Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
CivManage
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ReactWeb5
CivManage
Commits
3f460a87
Commit
3f460a87
authored
Nov 10, 2020
by
Maofei94
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
perf: a perf
parent
eac2ae43
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
228 additions
and
108 deletions
+228
-108
CurrentSolution.jsx
src/pages/database/CurrentSolution.jsx
+1
-1
InitDataBase.jsx
src/pages/database/InitDataBase.jsx
+6
-5
ManagementDataBase.jsx
src/pages/database/ManagementDataBase.jsx
+47
-7
ManagementDataBase.less
src/pages/database/ManagementDataBase.less
+5
-2
SiteConfig.jsx
src/pages/mobileConfig/SiteConfig.jsx
+6
-10
ListCard.jsx
src/pages/orgnazation/ListCard.jsx
+0
-4
RoleManage.js
src/pages/userCenter/RoleManage.js
+0
-24
SiteManage.js
src/pages/userCenter/SiteManage.js
+0
-24
AddModal.jsx
src/pages/userCenter/roleManage/AddModal.jsx
+6
-1
EditModal.jsx
src/pages/userCenter/roleManage/EditModal.jsx
+1
-1
RoleManage.jsx
src/pages/userCenter/roleManage/RoleManage.jsx
+61
-12
AddModal.jsx
src/pages/userCenter/siteManage/AddModal.jsx
+6
-1
EditModal.jsx
src/pages/userCenter/siteManage/EditModal.jsx
+1
-1
SiteManage.jsx
src/pages/userCenter/siteManage/SiteManage.jsx
+67
-15
api.js
src/services/database/api.js
+6
-0
api.js
src/services/userCenter/RoleManage/api.js
+8
-0
api.js
src/services/userCenter/siteManage/api.js
+7
-0
No files found.
src/pages/database/CurrentSolution.jsx
View file @
3f460a87
...
...
@@ -49,7 +49,7 @@ const CurrentSolution = () => {
notification
.
error
({
message
:
'提示'
,
description
:
res
.
message
,
duration
:
3
,
duration
:
null
,
});
}
})
...
...
src/pages/database/InitDataBase.jsx
View file @
3f460a87
...
...
@@ -79,7 +79,6 @@ const InitDataBase = props => {
dc
:
1603334559186
,
})
.
then
(
res
=>
{
console
.
log
(
res
,
'69res'
);
if
(
res
.
success
)
{
let
obj
=
{};
Object
.
keys
(
dbForm
).
forEach
(
k
=>
{
...
...
@@ -266,9 +265,10 @@ const InitDataBase = props => {
});
};
// 展示修改描述
const
changeDesc
=
()
=>
{
const
changeDesc
=
val
=>
{
console
.
log
(
val
);
setDesc
(
val
);
setModalVisible
(
true
);
setDesc
(
''
);
};
const
descChange
=
e
=>
{
const
{
value
}
=
e
.
target
;
...
...
@@ -365,7 +365,7 @@ const InitDataBase = props => {
type=
"primary"
size=
"small"
onClick=
{
()
=>
{
changeDesc
();
changeDesc
(
record
.
desc
);
}
}
>
修改描述
...
...
@@ -459,7 +459,6 @@ const InitDataBase = props => {
>
<
Button
type=
"primary"
>
数据库初始化
</
Button
>
</
Popconfirm
>
{
defaultSqlDir
&&
(
<
Select
placeholder=
"请选择解决方案"
...
...
@@ -543,6 +542,8 @@ const InitDataBase = props => {
<
Col
span=
{
22
}
>
<
Input
placeholder=
"请输入描述"
allowClear
defaultValue=
{
desc
}
onChange=
{
value
=>
{
descChange
(
value
);
}
}
...
...
src/pages/database/ManagementDataBase.jsx
View file @
3f460a87
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
Card
,
Button
,
Table
,
Space
,
Modal
}
from
'antd'
;
import
{
Card
,
Button
,
Table
,
Space
,
Modal
,
Popconfirm
,
notification
,
}
from
'antd'
;
import
{
PageContainer
}
from
'@ant-design/pro-layout'
;
import
{
get
}
from
'../../services'
;
import
styles
from
'./ManagementDataBase.less'
;
import
{
updateDateBase
}
from
'@/services/database/api'
;
const
ManagementDataBase
=
()
=>
{
const
[
autoCheckList
,
setAutoCheckList
]
=
useState
([]);
...
...
@@ -73,8 +82,29 @@ const ManagementDataBase = () => {
setCheckFlag
(
checkFlag
+
1
);
};
const
handleUpdate
=
()
=>
{
alert
(
'updatedb'
);
console
.
log
(
'updatedb'
);
updateDateBase
({
_version
:
9999
,
_dc
:
Date
.
now
(),
})
.
then
(
res
=>
{
setCheckFlag
(
checkFlag
+
1
);
if
(
res
.
sucess
)
{
notification
.
success
({
message
:
'通知'
,
duration
:
3
,
description
:
res
.
message
,
});
}
else
{
notification
.
error
({
message
:
'通知'
,
duration
:
3
,
description
:
res
.
message
,
});
}
})
.
catch
(
err
=>
{
console
.
error
(
err
);
});
};
const
handleLog
=
text
=>
{
let
arr
=
[];
...
...
@@ -181,7 +211,7 @@ const ManagementDataBase = () => {
loading=
{
checkLoading
}
size=
"small"
/>
<
div
className=
{
styles
.
tCenter
}
>
<
div
className=
{
styles
.
btnBox
}
>
<
Space
>
<
Button
type=
"primary"
...
...
@@ -190,9 +220,19 @@ const ManagementDataBase = () => {
>
检查
</
Button
>
<
Button
danger
type=
"primary"
onClick=
{
handleUpdate
}
>
升级
</
Button
>
<
Popconfirm
title=
"
是否升级当前连接数据库?"
okText=
"确认"
cancelText=
"取消"
onConfirm=
{
()
=>
{
handleUpdate
();
}
}
>
<
Button
danger
type=
"primary"
>
升级
</
Button
>
</
Popconfirm
>
</
Space
>
</
div
>
</
Card
>
...
...
src/pages/database/ManagementDataBase.less
View file @
3f460a87
...
...
@@ -6,4 +6,8 @@
}
.tCenter{
text-align: center;
}
\ No newline at end of file
}
.btnBox{
text-align: center;
margin-top: 10px;
}
src/pages/mobileConfig/SiteConfig.jsx
View file @
3f460a87
...
...
@@ -19,7 +19,7 @@ const SiteConfig = props => {
const
[
form
]
=
Form
.
useForm
();
const
layout
=
{
layout
:
'horizontal'
,
labelCol
:
{
span
:
2
},
labelCol
:
{
span
:
3
},
wrapperCol
:
{
span
:
14
},
};
useEffect
(()
=>
{
...
...
@@ -36,7 +36,6 @@ const SiteConfig = props => {
obj
[
k
]
=
res
[
k
];
});
form
.
setFieldsValue
(
obj
);
console
.
log
(
form
.
getFieldsValue
(),
'36/'
);
});
},
[]);
// 单选值改变
...
...
@@ -50,16 +49,13 @@ const SiteConfig = props => {
<
Item
label=
"应用名称:"
name=
"title"
>
<
Input
placeholder=
"请输入应用名称"
allowClear
/>
</
Item
>
<
Item
label=
"系统图标:"
name=
"shortcutIcon"
>
<
Row
gutter=
{
16
}
>
<
Col
span=
{
21
}
>
<
Input
placeholder=
"请输入系统图标名称"
allowClear
/>
</
Col
>
<
Col
span=
{
2
}
>
<
Button
type=
"primary"
>
按路径选择
</
Button
>
</
Col
>
</
Row
>
<
Input
placeholder=
"请输入系统图标名称"
allowClear
/>
</
Item
>
{
/* <Button type="primary">按路径选择</Button> */
}
<
Item
label=
"系统图标预览:"
/>
<
Item
label=
"登陆页面:"
name=
"loginTemplate"
>
<
Select
placeholder=
"请选择登陆页面"
>
...
...
src/pages/orgnazation/ListCard.jsx
View file @
3f460a87
...
...
@@ -45,10 +45,6 @@ const ListCard = props => {
console
.
error
(
err
);
setLoading
(
false
);
});
// 多级嵌套测试
// orgTest().then(res =>{
// console.log(res,'res')
// })
},
[
ouid
]);
return
(
<
div
>
...
...
src/pages/userCenter/RoleManage.js
deleted
100644 → 0
View file @
eac2ae43
import
React
from
'react'
;
import
{
Alert
,
Card
}
from
'antd'
;
import
{
PageContainer
}
from
'@ant-design/pro-layout'
;
import
{
connect
}
from
'react-redux'
;
// eslint-disable-next-line no-unused-vars
const
mapState
=
store
=>
store
;
export
default
connect
(
mapState
)(()
=>
(
<
PageContainer
>
<
Card
>
<
Alert
message
=
"更快更强的重型组件,已经发布。"
type
=
"success"
showIcon
banner
style
=
{{
margin
:
-
12
,
marginBottom
:
24
,
}}
/
>
<
/Card
>
<
/PageContainer
>
));
src/pages/userCenter/SiteManage.js
deleted
100644 → 0
View file @
eac2ae43
import
React
from
'react'
;
import
{
Alert
,
Card
}
from
'antd'
;
import
{
PageContainer
}
from
'@ant-design/pro-layout'
;
import
{
connect
}
from
'react-redux'
;
// eslint-disable-next-line no-unused-vars
const
mapState
=
store
=>
store
;
export
default
connect
(
mapState
)(()
=>
(
<
PageContainer
>
<
Card
>
<
Alert
message
=
"更快更强的重型组件,已经发布。"
type
=
"success"
showIcon
banner
style
=
{{
margin
:
-
12
,
marginBottom
:
24
,
}}
/
>
<
/Card
>
<
/PageContainer
>
));
src/pages/userCenter/roleManage/AddModal.jsx
View file @
3f460a87
...
...
@@ -66,7 +66,12 @@ const AddModal = props => {
onOk=
{
()
=>
onSubmit
()
}
confirmLoading=
{
loading
}
>
<
Form
form=
{
form
}
layout=
{
formLayout
}
onFinish=
{
onFinish
}
>
<
Form
form=
{
form
}
layout=
{
formLayout
}
onFinish=
{
onFinish
}
labelCol=
{
{
span
:
4
}
}
>
<
Item
label=
"角色名称"
name=
"stationName"
...
...
src/pages/userCenter/roleManage/EditModal.jsx
View file @
3f460a87
...
...
@@ -72,7 +72,7 @@ const EditModal = props => {
onOk=
{
()
=>
onSubmit
()
}
confirmLoading=
{
loading
}
>
<
Form
form=
{
form
}
layout=
{
formLayout
}
>
<
Form
form=
{
form
}
layout=
{
formLayout
}
labelCol=
{
{
span
:
4
}
}
>
<
Item
label=
"角色名称"
name=
"stationName"
...
...
src/pages/userCenter/roleManage/RoleManage.jsx
View file @
3f460a87
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
{
Row
,
Col
,
Tree
,
Card
,
Input
,
Tooltip
,
Butt
on
}
from
'antd'
;
import
{
Row
,
Col
,
Tree
,
Card
,
Input
,
Tooltip
,
Spin
,
notificati
on
}
from
'antd'
;
import
{
FileAddTwoTone
,
EditTwoTone
,
DeleteTwoTone
}
from
'@ant-design/icons'
;
import
{
PageContainer
,
GridContent
}
from
'@ant-design/pro-layout'
;
import
{
getWebModuleTree
}
from
'@/services/userCenter/roleManage/api'
;
import
{
getWebModuleTree
,
chooseUserToStation
,
}
from
'@/services/userCenter/roleManage/api'
;
import
ListCard
from
'@/pages/orgnazation/ListCard'
;
import
qs
from
'qs'
;
import
styles
from
'@/pages/userCenter/roleManage/RoleManage.less'
;
import
AddModal
from
'./AddModal'
;
import
DelModal
from
'./DelModal'
;
...
...
@@ -21,6 +25,8 @@ const SiteManage = () => {
const
[
stationObj
,
setStationObj
]
=
useState
({});
// 选择的站点
const
[
delVisible
,
setDelVisible
]
=
useState
(
false
);
// 删除弹窗
const
[
editVisible
,
setEditVisible
]
=
useState
(
false
);
// 修改弹窗
const
[
subList
,
setSubList
]
=
useState
([]);
// 选中的数组
const
[
spinLoading
,
setSpinLoading
]
=
useState
(
false
);
// 点击树的回调
const
handleTreeSelect
=
e
=>
{
console
.
log
(
e
);
...
...
@@ -33,6 +39,7 @@ const SiteManage = () => {
}
};
useEffect
(()
=>
{
setSpinLoading
(
true
);
getWebModuleTree
({
userMode
:
'super'
,
select
:
''
,
...
...
@@ -41,6 +48,8 @@ const SiteManage = () => {
node
:
-
2
,
})
.
then
(
res
=>
{
setSpinLoading
(
false
);
let
arr
=
[];
if
(
res
)
{
arr
.
push
(
res
.
find
(
item
=>
item
.
id
===
'Web4StationRoot'
));
...
...
@@ -50,6 +59,7 @@ const SiteManage = () => {
setTreeData
(
arr2
);
})
.
catch
(
err
=>
{
setSpinLoading
(
false
);
console
.
error
(
err
);
});
},
[
flag
]);
...
...
@@ -89,12 +99,12 @@ const SiteManage = () => {
console
.
log
(
e
);
setModalVisible
(
true
);
};
//
站点
删除
//
角色
删除
const
handleDel
=
e
=>
{
setStationId
(
e
.
stationID
);
setDelVisible
(
true
);
};
// 编辑
站点
// 编辑
角色
const
handleEdit
=
e
=>
{
setStationObj
(
e
);
setEditVisible
(
true
);
...
...
@@ -131,8 +141,40 @@ const SiteManage = () => {
setEditVisible
(
false
);
setFlag
(
flag
+
1
);
};
const
valueCallback
=
props
=>
{
console
.
log
(
props
);
const
valueCallback
=
valueObj
=>
{
setSubList
(
valueObj
);
};
const
handleCommit
=
value
=>
{
let
arr
=
Object
.
values
(
subList
);
chooseUserToStation
(
qs
.
stringify
({
userList
:
String
(
arr
.
flat
()),
stationID
:
ouid
,
}),
{
headers
:
{
'content-type'
:
'application/x-www-form-urlencggoded;charset=UTF-8'
,
},
},
)
.
then
(
res
=>
{
if
(
res
.
success
)
{
notification
.
success
({
message
:
'提示'
,
duration
:
3
,
description
:
'设置成功'
,
});
}
else
{
notification
.
error
({
message
:
'提示'
,
duration
:
3
,
description
:
res
.
message
,
});
}
})
.
catch
(
err
=>
{
console
.
log
(
err
);
});
};
return
(
<
PageContainer
>
...
...
@@ -140,12 +182,18 @@ const SiteManage = () => {
<
Row
gutter=
{
12
}
>
<
Col
lg=
{
6
}
md=
{
24
}
>
<
Card
className=
{
styles
.
cardBox
}
>
<
Tree
showLine=
{
{
showLeafIcon
:
false
}
}
showIcon
onSelect=
{
e
=>
handleTreeSelect
(
e
)
}
treeData=
{
treeData
}
/>
<
Spin
tip=
"loading...."
spinning=
{
spinLoading
}
style=
{
{
marginTop
:
'20px'
}
}
>
<
Tree
showLine=
{
{
showLeafIcon
:
false
}
}
showIcon
onSelect=
{
e
=>
handleTreeSelect
(
e
)
}
treeData=
{
treeData
}
/>
</
Spin
>
<
AddModal
visible=
{
modalVisible
}
onCancel=
{
()
=>
setModalVisible
(
false
)
}
...
...
@@ -183,6 +231,7 @@ const SiteManage = () => {
ouid=
{
ouid
}
searchWord=
{
searchWord
}
valueCallback=
{
valueCallback
}
onCommit=
{
handleCommit
}
/>
)
}
</
Card
>
...
...
src/pages/userCenter/siteManage/AddModal.jsx
View file @
3f460a87
...
...
@@ -66,7 +66,12 @@ const AddModal = props => {
onOk=
{
()
=>
onSubmit
()
}
confirmLoading=
{
loading
}
>
<
Form
form=
{
form
}
layout=
{
formLayout
}
onFinish=
{
onFinish
}
>
<
Form
form=
{
form
}
layout=
{
formLayout
}
onFinish=
{
onFinish
}
labelCol=
{
{
span
:
4
}
}
>
<
Item
label=
"站点名称"
name=
"stationName"
...
...
src/pages/userCenter/siteManage/EditModal.jsx
View file @
3f460a87
...
...
@@ -72,7 +72,7 @@ const EditModal = props => {
onOk=
{
()
=>
onSubmit
()
}
confirmLoading=
{
loading
}
>
<
Form
form=
{
form
}
layout=
{
formLayout
}
>
<
Form
form=
{
form
}
layout=
{
formLayout
}
labelCol=
{
{
span
:
4
}
}
>
<
Item
label=
"站点名称"
name=
"stationName"
...
...
src/pages/userCenter/siteManage/SiteManage.jsx
View file @
3f460a87
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
{
Row
,
Col
,
Tree
,
Card
,
Input
,
Tooltip
,
Button
}
from
'antd'
;
import
{
Row
,
Col
,
Tree
,
Card
,
Input
,
Tooltip
,
Button
,
notification
,
Spin
,
}
from
'antd'
;
import
{
FileAddTwoTone
,
EditTwoTone
,
DeleteTwoTone
}
from
'@ant-design/icons'
;
import
{
PageContainer
,
GridContent
}
from
'@ant-design/pro-layout'
;
import
{
getWebModuleTree
}
from
'@/services/userCenter/siteManage/api'
;
import
{
getWebModuleTree
,
chooseUserToStation
,
}
from
'@/services/userCenter/siteManage/api'
;
import
ListCard
from
'@/pages/orgnazation/ListCard'
;
import
styles
from
'@/pages/userCenter/siteManage/SiteManage.less'
;
import
qs
from
'qs'
;
import
AddModal
from
'./AddModal'
;
import
DelModal
from
'./DelModal'
;
import
EditModal
from
'./EditModal'
;
...
...
@@ -21,7 +35,8 @@ const SiteManage = () => {
const
[
stationObj
,
setStationObj
]
=
useState
({});
// 选择的站点
const
[
delVisible
,
setDelVisible
]
=
useState
(
false
);
// 删除弹窗
const
[
editVisible
,
setEditVisible
]
=
useState
(
false
);
// 修改弹窗
const
[
subList
,
setSubList
]
=
useState
([]);
const
[
subList
,
setSubList
]
=
useState
([]);
// 选中的数组
const
[
spinLoading
,
setSpinLoading
]
=
useState
(
false
);
const
now
=
new
Date
().
getTime
();
// 点击树的回调
const
handleTreeSelect
=
e
=>
{
...
...
@@ -35,6 +50,7 @@ const SiteManage = () => {
}
};
useEffect
(()
=>
{
setSpinLoading
(
true
);
getWebModuleTree
({
userMode
:
'super'
,
select
:
''
,
...
...
@@ -43,6 +59,7 @@ const SiteManage = () => {
node
:
-
2
,
})
.
then
(
res
=>
{
setSpinLoading
(
false
);
let
arr
=
[];
if
(
res
)
{
arr
.
push
(
res
.
find
(
item
=>
item
.
id
===
'Web4StationRoot'
));
...
...
@@ -52,6 +69,7 @@ const SiteManage = () => {
setTreeData
(
arr2
);
})
.
catch
(
err
=>
{
setSpinLoading
(
false
);
console
.
error
(
err
);
});
},
[
flag
]);
...
...
@@ -135,25 +153,59 @@ const SiteManage = () => {
setEditVisible
(
false
);
setFlag
(
flag
+
1
);
};
const
valueCallback
=
valueOBJ
=>
{
console
.
log
(
valueOBJ
);
setSubList
(
valueOBJ
);
const
valueCallback
=
valueObj
=>
{
setSubList
(
valueObj
);
};
const
handleCommit
=
value
=>
{
console
.
log
(
subList
);
let
arr
=
Object
.
values
(
subList
);
chooseUserToStation
(
qs
.
stringify
({
userList
:
String
(
arr
.
flat
()),
stationID
:
ouid
,
}),
{
headers
:
{
'content-type'
:
'application/x-www-form-urlencggoded;charset=UTF-8'
,
},
},
)
.
then
(
res
=>
{
if
(
res
.
success
)
{
notification
.
success
({
message
:
'提示'
,
duration
:
3
,
description
:
'设置成功'
,
});
}
else
{
notification
.
error
({
message
:
'提示'
,
duration
:
3
,
description
:
res
.
message
,
});
}
})
.
catch
(
err
=>
{
console
.
log
(
err
);
});
};
return
(
<
PageContainer
>
<
GridContent
>
<
Row
gutter=
{
12
}
>
<
Col
lg=
{
6
}
md=
{
24
}
>
<
Col
lg=
{
6
}
>
<
Card
className=
{
styles
.
cardBox
}
>
<
Tree
showLine=
{
{
showLeafIcon
:
false
}
}
showIcon
onSelect=
{
e
=>
handleTreeSelect
(
e
)
}
treeData=
{
treeData
}
/>
<
Spin
tip=
"loading...."
spinning=
{
spinLoading
}
style=
{
{
marginTop
:
'20px'
}
}
>
<
Tree
showLine=
{
{
showLeafIcon
:
false
}
}
showIcon
onSelect=
{
e
=>
handleTreeSelect
(
e
)
}
treeData=
{
treeData
}
/>
</
Spin
>
<
AddModal
visible=
{
modalVisible
}
onCancel=
{
()
=>
setModalVisible
(
false
)
}
...
...
@@ -173,7 +225,7 @@ const SiteManage = () => {
/>
</
Card
>
</
Col
>
<
Col
lg=
{
18
}
md=
{
24
}
>
<
Col
lg=
{
18
}
>
<
Card
className=
{
styles
.
cardBox
}
>
<
Row
align=
"middle"
>
<
Col
span=
{
1
}
>
搜索
</
Col
>
...
...
src/services/database/api.js
View file @
3f460a87
...
...
@@ -21,3 +21,9 @@ export const getSolutionList = params =>
// 切换解决方案
export
const
changeSolution
=
params
=>
get
(
'/Cityinterface/rest/services/OMS.svc/W4_ChangeSolution'
,
params
);
// 更新站点人员
export
const
updateDateBase
=
params
=>
get
(
'/Cityinterface/rest/services/OMS.svc/DatabaseStandard_UpdateDateBase'
,
params
,
);
src/services/userCenter/RoleManage/api.js
View file @
3f460a87
...
...
@@ -13,3 +13,11 @@ export const deleteStation = params =>
// 编辑站点
export
const
editStation
=
params
=>
get
(
'/Cityinterface/rest/services/OMS.svc/P_EditStation'
,
params
);
// 保存站点选择人员
export
const
chooseUserToStation
=
(
params
,
options
)
=>
post
(
'/Cityinterface/rest/services/OMS.svc/P_ChooseUserToStation?_version=9999'
,
params
,
options
,
);
src/services/userCenter/siteManage/api.js
View file @
3f460a87
...
...
@@ -22,3 +22,10 @@ export const deleteStation = params =>
// 编辑站点
export
const
editStation
=
params
=>
get
(
'/Cityinterface/rest/services/OMS.svc/P_EditStation'
,
params
);
// 保存站点选择人员
export
const
chooseUserToStation
=
(
params
,
options
)
=>
post
(
'/Cityinterface/rest/services/OMS.svc/P_ChooseUserToStation?_version=9999'
,
params
,
options
,
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment