Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
M
multiSystem
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
Yulun Yao
multiSystem
Commits
14aeb7f4
Commit
14aeb7f4
authored
May 21, 2021
by
程卓
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev' of
http://git.omniview.pro/fangdi/housemanage/web/majorproject
into dev
parents
9b69b2d1
b5e55149
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
1401 additions
and
11 deletions
+1401
-11
labelNone.png
src/assets/icon/labelNone.png
+0
-0
routes.js
src/router/routes.js
+8
-0
api.js
src/server/api.js
+22
-2
basicInfoByLabel.vue
src/views/houseData/basicInfoByLabel.vue
+1089
-0
labelList.vue
src/views/label/labelList.vue
+148
-0
labelRightSide.vue
src/views/label/labelRightSide.vue
+10
-9
labelRightSideEmpty.vue
src/views/label/labelRightSideEmpty.vue
+18
-0
parentLabelRightPanel.vue
src/views/label/parentLabelRightPanel.vue
+106
-0
No files found.
src/assets/icon/labelNone.png
0 → 100644
View file @
14aeb7f4
8.46 KB
src/router/routes.js
View file @
14aeb7f4
...
...
@@ -140,12 +140,20 @@ const appRoutes = [
},
]
},
{
// 标签管理
path
:
'/systemManagement/lvot'
,
name
:
'lvot'
,
component
:
resolve
=>
require
([
'@/views/label/labelList'
],
resolve
),
//Tbls,
meta
:
{
title
:
'标签管理'
,
menuPath
:
true
,
menuIcon
:
'setting'
,
hideInBread
:
false
,
},
},
]
},
{
path
:
'/house'
,
name
:
'house'
,
component
:
resolve
=>
require
([
'@/components/Layout/content-wrapper'
],
resolve
),
// ContentWrapper,
meta
:
{
title
:
'住宅信息'
,
menuPath
:
true
,
menuIcon
:
'home'
,
hideInBread
:
true
,
requirePerm
:
false
,
authCode
:
'0001'
},
children
:
[
{
path
:
'/houseData/basicInfoByLabel'
,
name
:
'basicInfoByLabel'
,
component
:
resolve
=>
require
([
'@/views/houseData/basicInfoByLabel'
],
resolve
),
//basicInfo,
meta
:
{
title
:
'小区列表-标签'
,
menuPath
:
true
,
hideInBread
:
false
,
},
},
{
// 小区列表
path
:
'/houseData/basicInfo'
,
name
:
'basicInfo'
,
component
:
resolve
=>
require
([
'@/views/houseData/basicInfo'
],
resolve
),
//basicInfo,
meta
:
{
title
:
'住宅小区'
,
menuPath
:
true
,
hideInBread
:
false
,
authCode
:
'000101'
,
menuIcon
:
'home'
},
...
...
src/server/api.js
View file @
14aeb7f4
...
...
@@ -37,10 +37,11 @@ case 'huangpu-prod':
default
:
// 默认环境下(开发环境)
// BASE_URL = 'http://31.0.161.39/apiv2'
// BASE_URL = 'http://211.136.105.193/apiv2'
// BASE_URL = 'http://yangpu-hm.omniview.pro/api/v2'
BASE_URL
=
'http://yangpu-hm.omniview.pro/api/v2'
// BASE_URL = 'http://huangpu.hm.omniview.pro/api/v2'
// BASE_URL = 'http://xuhui.hm.omniview.pro/api/v2'
// BASE_URL = 'http://pudong.hm.omniview.pro/api/v2'
// BASE_URL = 'http://xuhui.hm.omniview.pro/api/v2'
BASE_URL
=
'http://yangpu-hm.omniview.pro/api/v2'
// BASE_URL = 'http://211.136.105.193/apiv2'
break
}
...
...
@@ -185,6 +186,10 @@ export default {
GET_USER_PEIMISSION
:
'/service-permission/user/perms'
,
// 当前用户角色权限树 -- 传userId
GET_ALL_PEIMISSION
:
'/service-permission/perms'
,
// 全部角色权限树
GET_ALL_ROLE
:
'/service-permission/menu/tree'
,
//获取权限
GET_PREMSPOINT_LIST
:
'/service-permission/perm/points'
,
//获取功能点清单
POST_PREMSBRANCH
:
'/service-permission/perm/perm'
,
//单个新增权限分支
DELETE_PREMSPOINT
:
'/service-permission/perm/point/{id}'
,
//删除功能点
SYSTEM_LIST_ALL_GET
:
'/service-user/user/systems'
,
//查询系统列表
GET_USER_CODE
:
'/service-permission/user/menus/code'
,
//获取用户权限
GET_USER_PERM
:
'/service-permission/user/menus/{id}'
,
...
...
@@ -209,4 +214,19 @@ export default {
GET_RIZHI_INFO
:
'/service-log/operateRecord/{id}'
,
//日志详情
GET_XIAOQUTOTAL
:
'/service-basicdatasync-ddd/summary/community/totare'
,
//查询小区住宅面积,总楼栋数,总户数信息
GET_LABEL_LIST
:
'/service-customkey-ddd/label/tree'
,
// 获取标签列表
GET_LABEL_DETAIL
:
'/service-customkey-ddd/label/{id}'
,
// 查看标签详情
DELETE_SINGLE_LABEL
:
'/service-customkey-ddd/label/{id}'
,
// 根据id删除某个标签
POST_SINGLE_LABEL
:
'/service-customkey-ddd/label'
,
// 新增标签
PUT_LABEL_INFO
:
'/service-customkey-ddd/label/{id}'
,
// 修改标签信息
POST_AVAILABLE_KEY
:
'/service-customkey-ddd/entityKeyDic'
,
// 可查询字段新增
PUT_AVAILABLE_KEY
:
'/service-customkey-ddd/entityKeyDic/{id}'
,
// 可查询字段修改
GET_AVAILABLE_KEY_LIST
:
'/service-customkey-ddd/entityKeyDics'
,
// 可查询字段列表
DELETE_AVAILABLE_KEY
:
'/service-customkey-ddd/entityKeyDic/{id}'
,
// 删除字段
GET_SINGLE_KEY_INFO
:
'/service-customkey-ddd/entityKeyDic/{id}'
,
//可查询字段详情
GET_LABEL_BIND_FILTER_RESULT
:
'/service-customkey-ddd/labelResource'
,
// 点击保存后查询是否有结果,有结果则调用绑定接口
POST_LABEL_RESULT_PREVIEW
:
'/service-customkey-ddd/findLabelObject'
,
// 标签预览
POST_LABEL_CREATE_CONFIRM
:
'/service-customkey-ddd/label/confirm'
,
GET_ID_INFO_BY_LABEL
:
'/service-customkey-ddd/label/resource/datas'
,
GET_WY_AND_YWH_LIST
:
'/service-customkey-ddd/datas'
}
src/views/houseData/basicInfoByLabel.vue
0 → 100644
View file @
14aeb7f4
This diff is collapsed.
Click to expand it.
src/views/label/labelList.vue
0 → 100644
View file @
14aeb7f4
<
template
>
<div
class=
"routerWapper"
>
<div
class=
"portalDetailTitle"
v-if=
"$route.name=='lvot'"
>
<span
class=
"title"
>
标签维护
</span>
<!--
{{
currentState
}}
-->
<div
class=
"detailOperations"
>
<a-button
@
click=
"backPage"
>
返回
</a-button>
</div>
</div>
<div
class=
"layoutMargin layoutPadding"
v-if=
"$route.name == 'lvot'"
>
<a-row
v-if=
"$route.name=='lvot'"
>
<a-col
:span=
"4"
style=
"border-right:1px solid #ccc;height:100%; position:relative"
>
<span
style=
"display: block; width: 90%; color:#1890ff; font-size: 16px; font-weight: 500; padding-bottom:5px;"
><a-button
style=
"width: 100%"
type=
"default"
@
click=
"addLabel"
>
<a-icon
type=
"plus"
/>
添加标签
</a-button></span>
<a-tree
style=
"height: 700px"
:tree-data=
"treeData"
:replace-fields=
"replaceFields"
:selected-keys=
"selectedKeys"
@
select=
"onSelect"
/>
</a-col>
<a-col
:span=
"19"
:offset=
'1'
>
<RightPanel
v-if=
"currentState == 'create'"
:trigger-type=
'currentState'
@
finish=
'getFinishState'
/>
<RightPanel
v-else-if=
"currentState == 'loadChildLabel'"
:trigger-type=
'currentState'
:label-id=
'labelId'
@
finish=
'getFinishState'
/>
<ParentRightPanel
v-else-if=
"currentState == 'loadParentLabel'"
:trigger-type=
'currentState'
:label-id=
'labelId'
@
finish=
'getFinishState'
/>
<EmptyRightPanel
v-else
/>
</a-col>
</a-row>
</div>
<!--
<div
v-if=
"$route.name=='lvot'"
>
<a-row>
<a-col
:span=
'4'
class=
"layoutMargin layoutPadding"
style=
"height: 680px"
>
<a-row
style=
"height: 36px"
>
<a-button
style=
"width: 100%"
size=
'small'
type=
"default"
@
click=
"addLabel"
>
<a-icon
type=
"plus"
/>
添加标签
</a-button>
</a-row>
<a-tree
:tree-data=
"treeData"
:replace-fields=
"replaceFields"
:selected-keys=
"selectedKeys"
@
select=
"onSelect"
/>
</a-col>
<a-col
:span=
'1'
></a-col>
<a-col
:span=
'18'
class=
"layoutMargin layoutPadding"
style=
"height: 680px"
>
<RightPanel
v-if=
"currentState == 'create'"
:trigger-type=
'currentState'
@
finish=
'getFinishState'
/>
<RightPanel
v-else-if=
"currentState == 'loadChildLabel'"
:trigger-type=
'currentState'
:label-id=
'labelId'
@
finish=
'getFinishState'
/>
<ParentRightPanel
v-else-if=
"currentState == 'loadParentLabel'"
:trigger-type=
'currentState'
:label-id=
'labelId'
@
finish=
'getFinishState'
/>
<EmptyRightPanel
v-else
/>
</a-col>
</a-row>
</div>
-->
<RouterWapper
v-else
/>
</div>
</
template
>
<
script
>
import
RightPanel
from
'@/views/label/labelRightSide.vue'
import
ParentRightPanel
from
'@/views/label/parentLabelRightPanel.vue'
import
EmptyRightPanel
from
'@/views/label/labelRightSideEmpty.vue'
const
treeData
=
[]
export
default
{
name
:
'lvot'
,
components
:
{
RightPanel
,
EmptyRightPanel
,
ParentRightPanel
},
data
()
{
return
{
treeData
,
replaceFields
:
{
children
:
'children'
,
title
:
'labelName'
,
key
:
'id'
},
selectedKeys
:
[],
currentState
:
null
,
labelId
:
null
}
},
mounted
()
{
this
.
getLabelList
()
},
methods
:
{
getFinishState
(
state
)
{
if
(
state
==
true
)
{
this
.
currentState
=
null
this
.
getLabelList
()
}
},
getLabelList
()
{
this
.
$ajax
.
get
({
url
:
this
.
$api
.
GET_LABEL_LIST
,
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
this
.
treeData
=
this
.
$com
.
confirm
(
res
,
'data.content'
,
[])
console
.
log
(
JSON
.
stringify
(
this
.
treeData
))
}
})
},
backPage
(){
// 返回按钮
this
.
$router
.
back
()
},
onSelect
(
selectedKeys
,
node
)
{
console
.
log
(
selectedKeys
,
node
.
node
.
$children
.
length
)
this
.
$ajax
.
get
({
url
:
this
.
$api
.
GET_LABEL_DETAIL
.
replace
(
'{id}'
,
selectedKeys
[
0
]),
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
let
result
=
this
.
$com
.
confirm
(
res
,
'data.content'
,
[])
this
.
labelId
=
selectedKeys
[
0
]
console
.
log
(
result
.
parentId
,
node
.
node
.
$children
.
length
)
if
(
result
.
parentId
!==
'0'
&&
node
.
node
.
$children
.
length
==
0
||
result
.
parentId
==
'0'
&&
node
.
node
.
$children
.
length
==
0
)
{
// 为二级菜单
this
.
currentState
=
'loadChildLabel'
}
else
{
// 为一级菜单
this
.
currentState
=
'loadParentLabel'
}
}
})
},
onCheck
(
checkedKeys
,
info
)
{
console
.
log
(
'onCheck'
,
checkedKeys
,
info
)
},
addLabel
()
{
this
.
currentState
=
'create'
console
.
log
(
'add'
)
}
},
}
</
script
>
<
style
>
.ant-tree
li
{
margin
:
0
;
padding
:
10px
0
;
white-space
:
nowrap
;
list-style
:
none
;
outline
:
0
;
}
.ant-tree-child-tree
>
li
:first-child
{
padding-top
:
20px
;
}
</
style
>
src/views/label/labelRightSide.vue
View file @
14aeb7f4
...
...
@@ -61,9 +61,8 @@
<a-form-item
v-if=
"index66 !== 0"
style=
"margin-bottom: 20px"
>
<a-select
style=
"width: 80px"
placeholder=
'与上组关系'
v-decorator=
"['relationWithGroup-' + index66 + '-0',
{initialValue: item66.relation, validateTrigger:'blur',rules: [{required: true, message: '请至少选择一项!'}]}]">
<a-select-option
value=
'and'
>
与
</a-select-option>
<a-select-option
value=
'and'
>
且
</a-select-option>
<a-select-option
value=
'or'
>
或
</a-select-option>
<a-select-option
value=
'ne'
>
非
</a-select-option>
</a-select>
</a-form-item>
...
...
@@ -81,9 +80,8 @@
<a-form-item
v-if=
"index !== 0"
>
<a-select
style=
"width: 80px"
placeholder=
'请选择条件'
v-decorator=
"['relation-' + index66 +'-' + index,
{initialValue: item.relation, validateTrigger:'blur',rules: [{required: true, message: '请至少选择一项!'}]}]">
<a-select-option
value=
'and'
>
与
</a-select-option>
<a-select-option
value=
'and'
>
且
</a-select-option>
<a-select-option
value=
'or'
>
或
</a-select-option>
<a-select-option
value=
'ne'
>
非
</a-select-option>
</a-select>
</a-form-item>
...
...
@@ -104,8 +102,8 @@
<a-form-item>
<a-select
style=
"width: 150px"
placeholder=
'区间'
v-decorator=
"['codition-' + index66 +'-' + index,
{initialValue: item.codition, validateTrigger:'blur',rules: [{required: true, message: '请至少选择一项!'}]}]">
<a-select-option
value=
'eq'
>
等于
(精确)
</a-select-option>
<a-select-option
value=
'regex'
>
等于(模糊)
</a-select-option>
<a-select-option
value=
'eq'
>
等于
</a-select-option>
<a-select-option
value=
'regex'
>
包含
</a-select-option>
<a-select-option
value=
'ne'
>
不等于
</a-select-option>
<a-select-option
value=
'gt'
>
大于
</a-select-option>
<a-select-option
value=
'gte'
>
大于等于
</a-select-option>
...
...
@@ -493,6 +491,7 @@ export default {
val
:
!
formData
[
'inputTwo-'
+
i
+
'-'
+
index
]
?
formData
[
'inputOne-'
+
i
+
'-'
+
index
]
:
formData
[
'inputOne-'
+
i
+
'-'
+
index
]
+
','
+
formData
[
'inputTwo-'
+
i
+
'-'
+
index
],
codition
:
formData
[
'codition-'
+
i
+
'-'
+
index
],
relation
:
!!
formData
[
'relation-'
+
i
+
'-'
+
index
]?
formData
[
'relation-'
+
i
+
'-'
+
index
]:
'and'
,
randomNum
:
formData
[
'randomNumInner-'
+
i
+
'-'
+
index
],
})
})
...
...
@@ -532,7 +531,7 @@ export default {
console
.
log
(
this
.
loopContent
)
Vue
.
set
(
this
.
loopContent
,
'data'
,
[
...
this
.
loopContent
.
data
,
{
randomNum
:
Math
.
random
().
toString
(),
serial
:
'新分组'
,
relation
:
'and'
,
labelSelConditionList
:
[
{
key
:
''
,
val
:
''
,
tableName
:
''
,
codition
:
'eq'
,
relation
:
''
}
]
}
...
this
.
loopContent
.
data
,
{
randomNum
:
Math
.
random
().
toString
(),
serial
:
'新分组'
,
relation
:
'and'
,
labelSelConditionList
:
[
{
key
:
''
,
val
:
''
,
tableName
:
''
,
codition
:
'eq'
,
relation
:
''
,
randomNum
:
Math
.
random
()
}
]
}
])
this
.
$forceUpdate
()
...
...
@@ -556,6 +555,7 @@ export default {
val
:
!
formData
[
'inputTwo-'
+
i
+
'-'
+
index
]
?
formData
[
'inputOne-'
+
i
+
'-'
+
index
]
:
formData
[
'inputOne-'
+
i
+
'-'
+
index
]
+
','
+
formData
[
'inputTwo-'
+
i
+
'-'
+
index
],
codition
:
formData
[
'codition-'
+
i
+
'-'
+
index
],
relation
:
!!
formData
[
'relation-'
+
i
+
'-'
+
index
]?
formData
[
'relation-'
+
i
+
'-'
+
index
]:
'and'
,
randomNum
:
formData
[
'randomNumInner-'
+
i
+
'-'
+
index
],
})
})
...
...
@@ -684,8 +684,7 @@ export default {
this
.
deleteVisible
=
!
this
.
deleteVisible
},
resetFormFields
()
{
this
.
loopContent
.
data
=
[
{
randomNum
:
Math
.
random
(),
serial
:
'新分组'
,
relation
:
'and'
,
labelSelConditionList
:
[
{
key
:
''
,
val
:
''
,
tableName
:
''
,
codition
:
'eq'
,
relation
:
''
}
]
}
]
this
.
loopContent
.
data
=
[
{
randomNum
:
Math
.
random
(),
serial
:
'新分组'
,
relation
:
'and'
,
labelSelConditionList
:
[
{
key
:
''
,
val
:
''
,
tableName
:
''
,
codition
:
'eq'
,
relation
:
''
,
randomNum
:
Math
.
random
()}
]
}
]
this
.
resultList
=
[]
this
.
labelForm
.
resetFields
()
this
.
infoSettingForm
.
resetFields
()
...
...
@@ -744,6 +743,7 @@ export default {
val
:
!
formData
[
'inputTwo-'
+
i
+
'-'
+
index
]
?
formData
[
'inputOne-'
+
i
+
'-'
+
index
]
:
formData
[
'inputOne-'
+
i
+
'-'
+
index
]
+
','
+
formData
[
'inputTwo-'
+
i
+
'-'
+
index
],
codition
:
formData
[
'codition-'
+
i
+
'-'
+
index
],
relation
:
!!
formData
[
'relation-'
+
i
+
'-'
+
index
]?
formData
[
'relation-'
+
i
+
'-'
+
index
]:
'and'
,
randomNum
:
formData
[
'randomNumInner-'
+
i
+
'-'
+
index
],
})
})
innerResult
.
push
({
...
...
@@ -813,6 +813,7 @@ export default {
val
:
!
formData
[
'inputTwo-'
+
i
+
'-'
+
index
]
?
formData
[
'inputOne-'
+
i
+
'-'
+
index
]
:
formData
[
'inputOne-'
+
i
+
'-'
+
index
]
+
','
+
formData
[
'inputTwo-'
+
i
+
'-'
+
index
],
codition
:
formData
[
'codition-'
+
i
+
'-'
+
index
],
relation
:
!!
formData
[
'relation-'
+
i
+
'-'
+
index
]?
formData
[
'relation-'
+
i
+
'-'
+
index
]:
'and'
,
randomNum
:
formData
[
'randomNumInner-'
+
i
+
'-'
+
index
],
})
})
...
...
src/views/label/labelRightSideEmpty.vue
0 → 100644
View file @
14aeb7f4
<
template
>
<div
style=
"position: relative"
>
<div
style=
"border: 1px dotted lightgrey; padding: 150px;"
>
<a-row
style=
"text-align: center; margin-bottom: 50px;"
>
<img
src=
"@/assets/icon/labelNone.png"
/>
</a-row>
<a-row
style=
"text-align: center; font-weight: bold; font-size: 16px"
>
<span>
请先在左侧选择一个标签或添加标签。
</span>
</a-row>
</div>
</div>
</
template
>
<
script
>
export
default
{
}
</
script
>
\ No newline at end of file
src/views/label/parentLabelRightPanel.vue
0 → 100644
View file @
14aeb7f4
<
template
>
<div
class=
"routerWapper"
>
<!--
{{
labelId
}}
-->
<div>
<a-row>
<a-col
:span=
'1'
>
<div
class=
"detailOperations"
>
<a-button
@
click=
"backPage"
>
返回
</a-button>
</div>
</a-col>
<a-col
:span=
'1'
:offset=
'1'
>
<a-button
type=
'primary'
@
click=
"save()"
>
保存
</a-button>
</a-col>
<a-col
:span=
'19'
></a-col>
</a-row>
</div>
<div>
<a-divider
type=
'horizontal'
/>
<a-form
:form=
'labelForm'
>
<a-form-item
label=
'标签名'
:label-col=
"
{span:2}" :wrapper-col="{span:14}">
<a-input
v-decorator=
"['labelName',
{validateTrigger:'blur', initialValue: '', rules: [{required: true, message: '请填写标签名!'}]}]">
</a-input>
</a-form-item>
</a-form>
</div>
</div>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
labelForm
:
this
.
$form
.
createForm
(
this
),
labelList
:
{},
finish
:
false
,
}
},
props
:
[
'triggerType'
,
'labelId'
],
mounted
()
{
this
.
getLabelInfo
()
},
watch
:
{
triggerType
:
{
handler
:
function
(
newV
,
oldV
)
{
this
.
resetFormFields
()
this
.
getLabelInfo
()
},
immediate
:
true
},
labelId
:
{
handler
:
function
(
newV
,
oldV
)
{
this
.
resetFormFields
()
this
.
getLabelInfo
()
},
immediate
:
true
}
},
methods
:
{
getLabelInfo
()
{
if
(
!!
this
.
labelId
)
{
this
.
$ajax
.
get
({
url
:
this
.
$api
.
GET_LABEL_DETAIL
.
replace
(
'{id}'
,
this
.
labelId
),
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
this
.
labelList
=
res
.
data
.
content
this
.
labelForm
.
setFieldsValue
({
labelName
:
res
.
data
.
content
.
labelName
})
}
})
}
},
resetFormFields
()
{
this
.
labelForm
.
resetFields
()
},
backPage
(){
// 返回按钮
this
.
finish
=
true
this
.
$emit
(
'finish'
,
this
.
finish
)
},
save
()
{
this
.
labelForm
.
validateFields
((
err1
,
values
)
=>
{
if
(
!
err1
)
{
this
.
labelList
.
labelName
=
this
.
labelForm
.
getFieldValue
(
'labelName'
)
this
.
$ajax
.
put
({
url
:
this
.
$api
.
PUT_LABEL_INFO
.
replace
(
'{id}'
,
this
.
labelId
),
params
:
Object
.
assign
(
this
.
labelList
,
{
id
:
this
.
labelId
})
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
this
.
$message
.
success
(
'修改成功!'
)
this
.
resetFormFields
()
this
.
finish
=
true
this
.
$emit
(
'finish'
,
this
.
finish
)
}
else
{
this
.
$message
.
success
(
'修改失败!'
)
}
})
}
})
},
},
}
</
script
>
\ No newline at end of file
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