Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
merchant-manage-ui
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
ui
merchant-manage-ui
Commits
b937ff45
Commit
b937ff45
authored
Sep 21, 2022
by
李腾
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 新增权限控制逻辑判断
parent
f4724461
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
158 additions
and
49 deletions
+158
-49
permission.config.js
config/permission.config.js
+57
-1
index.jsx
src/pages/GoodsManage/SearchForm/index.jsx
+20
-10
index.jsx
src/pages/GoodsManage/index.jsx
+17
-15
staticdata.js
src/pages/GoodsManage/staticdata.js
+1
-1
data.js
src/pages/distributionArea/data.js
+15
-10
index.jsx
src/pages/distributionArea/index.jsx
+15
-5
index.jsx
src/pages/orderManage/batchDelivery/index.jsx
+11
-2
index.jsx
src/pages/orderManage/pendingDeliveryOrder/index.jsx
+11
-3
index.jsx
src/pages/orderManage/queryOrder/index.jsx
+11
-2
No files found.
config/permission.config.js
View file @
b937ff45
...
@@ -8,7 +8,7 @@ export const GOOD_MANAGE = {
...
@@ -8,7 +8,7 @@ export const GOOD_MANAGE = {
},
},
EDITABLE
:
{
EDITABLE
:
{
name
:
'
新增/修改
'
,
name
:
'
新增/修改
'
,
id
:
'
02010
1
'
,
id
:
'
02010
2
'
,
apis
:
[],
apis
:
[],
},
},
};
};
...
@@ -29,6 +29,62 @@ export const DISTRIBUTION_AREA = {
...
@@ -29,6 +29,62 @@ export const DISTRIBUTION_AREA = {
/** @name 订单管理 */
/** @name 订单管理 */
//待发货订单
export
const
PENDING_DELIVERY_ORDER
=
{
LIST
:
{
name
:
'
待发货订单列表
'
,
id
:
'
020301
'
,
apis
:
[],
},
EDITABLE
:
{
name
:
'
新增/修改
'
,
id
:
'
020302
'
,
apis
:
[],
},
};
// 已发货订单
export
const
DELIVERY_ORDER
=
{
LIST
:
{
name
:
'
已发货
'
,
id
:
'
020401
'
,
apis
:
[],
},
EDITABLE
:
{
name
:
'
新增/修改
'
,
id
:
'
020402
'
,
apis
:
[],
},
};
// 批量发货
export
const
BATCH_DELIVERY
=
{
LIST
:
{
name
:
'
批量发货
'
,
id
:
'
020501
'
,
apis
:
[],
},
EDITABLE
:
{
name
:
'
新增/修改
'
,
id
:
'
020502
'
,
apis
:
[],
},
};
// 订单查询
export
const
QUERY_ORDER
=
{
LIST
:
{
name
:
'
订单查询列表
'
,
id
:
'
020601
'
,
apis
:
[],
},
EDITABLE
:
{
name
:
'
新增/修改
'
,
id
:
'
020602
'
,
apis
:
[],
},
};
/** @name 售后地址设置 */
/** @name 售后地址设置 */
export
const
AFTER_SALE_ADDRESS
=
{
export
const
AFTER_SALE_ADDRESS
=
{
LIST
:
{
LIST
:
{
...
...
src/pages/GoodsManage/SearchForm/index.jsx
View file @
b937ff45
...
@@ -18,11 +18,13 @@ import { format } from 'date-fns';
...
@@ -18,11 +18,13 @@ import { format } from 'date-fns';
import
styles
from
'
../style.less
'
;
import
styles
from
'
../style.less
'
;
import
{
stateList
}
from
'
../staticdata
'
;
import
{
stateList
}
from
'
../staticdata
'
;
import
{
apiGoodsInfosExport
}
from
'
../service
'
;
import
{
apiGoodsInfosExport
}
from
'
../service
'
;
import
{
GOOD_MANAGE
}
from
'
@/../config/permission.config
'
;
const
FormItem
=
Form
.
Item
;
const
FormItem
=
Form
.
Item
;
const
{
Option
}
=
Select
;
const
{
Option
}
=
Select
;
@
connect
(({
goodsManage
})
=>
({
@
connect
(({
goodsManage
,
menu
})
=>
({
goodsManage
,
goodsManage
,
permissions
:
menu
.
permissions
,
}))
}))
class
goodsManage
extends
Component
{
class
goodsManage
extends
Component
{
formRef
=
React
.
createRef
();
formRef
=
React
.
createRef
();
...
@@ -31,7 +33,11 @@ class goodsManage extends Component {
...
@@ -31,7 +33,11 @@ class goodsManage extends Component {
loading
:
false
,
loading
:
false
,
};
};
canEditable
=
false
;
componentDidMount
()
{
componentDidMount
()
{
this
.
canEditable
=
this
.
props
.
permissions
[
GOOD_MANAGE
.
EDITABLE
.
id
];
console
.
log
(
111
,
this
.
props
.
permissions
,
this
.
canEditable
);
this
.
props
.
onRef
(
this
);
this
.
props
.
onRef
(
this
);
this
.
handleSearch
();
this
.
handleSearch
();
}
}
...
@@ -220,14 +226,15 @@ class goodsManage extends Component {
...
@@ -220,14 +226,15 @@ class goodsManage extends Component {
导出
导出
</
Button
>
</
Button
>
</
FormItem
>
</
FormItem
>
<
FormItem
style=
{
{
float
:
'
right
'
}
}
>
{
this
.
canEditable
?
(
<
Popover
content=
{
content
}
onVisibleChange=
{
this
.
handleVisibleChange
}
>
<
FormItem
style=
{
{
float
:
'
right
'
}
}
>
<
Button
type=
"primary"
className=
{
styles
.
button
}
>
<
Popover
content=
{
content
}
onVisibleChange=
{
this
.
handleVisibleChange
}
>
批量设置
<
Button
type=
"primary"
className=
{
styles
.
button
}
>
</
Button
>
批量设置
</
Popover
>
</
Button
>
{
this
.
props
.
selectNum
>
0
&&
<
Tag
color=
"green"
>
已选商品
{
this
.
props
.
selectNum
}
</
Tag
>
}
</
Popover
>
{
/* <Button
{
this
.
props
.
selectNum
>
0
&&
<
Tag
color=
"green"
>
已选商品
{
this
.
props
.
selectNum
}
</
Tag
>
}
{
/* <Button
className={styles.button}
className={styles.button}
type="primary"
type="primary"
icon="download"
icon="download"
...
@@ -243,7 +250,10 @@ class goodsManage extends Component {
...
@@ -243,7 +250,10 @@ class goodsManage extends Component {
批量库存修改
批量库存修改
</Button>
</Button>
</Upload> */
}
</Upload> */
}
</
FormItem
>
</
FormItem
>
)
:
(
''
)
}
</
Form
>
</
Form
>
);
);
}
}
...
...
src/pages/GoodsManage/index.jsx
View file @
b937ff45
...
@@ -70,7 +70,7 @@ class goodsManage extends Component {
...
@@ -70,7 +70,7 @@ class goodsManage extends Component {
componentDidMount
()
{
componentDidMount
()
{
this
.
props
.
goodsManage
.
tableData
=
{};
this
.
props
.
goodsManage
.
tableData
=
{};
this
.
canEditable
=
t
rue
||
t
his
.
props
.
permissions
[
GOOD_MANAGE
.
EDITABLE
.
id
];
this
.
canEditable
=
this
.
props
.
permissions
[
GOOD_MANAGE
.
EDITABLE
.
id
];
this
.
categoryList
();
this
.
categoryList
();
this
.
getVirtualCategory
();
this
.
getVirtualCategory
();
this
.
specList
();
this
.
specList
();
...
@@ -401,23 +401,25 @@ class goodsManage extends Component {
...
@@ -401,23 +401,25 @@ class goodsManage extends Component {
<
PageHeaderWrapper
>
<
PageHeaderWrapper
>
<
Spin
spinning=
{
this
.
state
.
createloading
}
>
<
Spin
spinning=
{
this
.
state
.
createloading
}
>
{
this
.
canEditable
?
(
{
this
.
canEditable
?
(
<
Button
<>
type=
"primary"
<
Button
className=
{
styles
.
button
}
type=
"primary"
onClick=
{
()
=>
this
.
setState
({
createVisible
:
true
,
initData
:
{}
})
}
className=
{
styles
.
button
}
>
onClick=
{
()
=>
this
.
setState
({
createVisible
:
true
,
initData
:
{}
})
}
新增商品
>
</
Button
>
新增商品
</
Button
>
<
Button
type=
"primary"
className=
{
styles
.
button
}
onClick=
{
()
=>
this
.
serviceVisbleClose
(
true
)
}
>
新增服务类商品
</
Button
>
</>
)
:
(
)
:
(
''
''
)
}
)
}
<
Button
type=
"primary"
className=
{
styles
.
button
}
onClick=
{
()
=>
this
.
serviceVisbleClose
(
true
)
}
>
新增服务类商品
</
Button
>
<
Card
>
<
Card
>
<
SearchForm
<
SearchForm
handleSearch=
{
this
.
handleSearch
}
handleSearch=
{
this
.
handleSearch
}
...
...
src/pages/GoodsManage/staticdata.js
View file @
b937ff45
...
@@ -151,7 +151,7 @@ export function column() {
...
@@ -151,7 +151,7 @@ export function column() {
align
:
'
center
'
,
align
:
'
center
'
,
render
:
(
_
,
row
)
=>
(
render
:
(
_
,
row
)
=>
(
<
div
className
=
{
styles
.
actionBtn
}
>
<
div
className
=
{
styles
.
actionBtn
}
>
{(
row
.
state
===
4
||
(
row
.
state
>=
5
&&
row
.
updateState
!==
1
))
&&
(
{
this
.
canEditable
&&
(
row
.
state
===
4
||
(
row
.
state
>=
5
&&
row
.
updateState
!==
1
))
&&
(
<
Button
<
Button
key
=
"
edit
"
key
=
"
edit
"
type
=
"
primary
"
type
=
"
primary
"
...
...
src/pages/distributionArea/data.js
View file @
b937ff45
...
@@ -41,16 +41,21 @@ export function columns(res) {
...
@@ -41,16 +41,21 @@ export function columns(res) {
key
:
'
option
'
,
key
:
'
option
'
,
align
:
'
center
'
,
align
:
'
center
'
,
width
:
100
,
width
:
100
,
render
:
(
_
,
row
)
=>
(
render
:
(
_
,
row
)
=>
{
<
div
className
=
{
styles
.
option
}
>
if
(
!
res
.
canEditable
)
{
<
Button
type
=
"
primary
"
onClick
=
{()
=>
res
.
edit
(
0
,
row
)}
>
return
'
-
'
;
复制
}
<
/Button
>
return
(
<
Button
type
=
"
primary
"
onClick
=
{()
=>
res
.
edit
(
1
,
row
)}
>
<
div
className
=
{
styles
.
option
}
>
编辑
<
Button
type
=
"
primary
"
onClick
=
{()
=>
res
.
edit
(
0
,
row
)}
>
<
/Button
>
复制
<
/div
>
<
/Button
>
),
<
Button
type
=
"
primary
"
onClick
=
{()
=>
res
.
edit
(
1
,
row
)}
>
编辑
<
/Button
>
<
/div
>
);
},
},
},
];
];
}
}
src/pages/distributionArea/index.jsx
View file @
b937ff45
...
@@ -2,11 +2,15 @@ import { Button, Popconfirm, notification } from 'antd';
...
@@ -2,11 +2,15 @@ import { Button, Popconfirm, notification } from 'antd';
import
React
,
{
useRef
,
useEffect
,
useState
}
from
'
react
'
;
import
React
,
{
useRef
,
useEffect
,
useState
}
from
'
react
'
;
import
{
PageHeaderWrapper
}
from
'
@ant-design/pro-layout
'
;
import
{
PageHeaderWrapper
}
from
'
@ant-design/pro-layout
'
;
import
ProTable
from
'
@ant-design/pro-table
'
;
import
ProTable
from
'
@ant-design/pro-table
'
;
import
{
connect
}
from
'
dva
'
;
import
{
columns
}
from
'
./data
'
;
import
{
columns
}
from
'
./data
'
;
import
AddArea
from
'
./addArea
'
;
import
AddArea
from
'
./addArea
'
;
import
{
searchList
,
addressTree
}
from
'
./services
'
;
import
{
searchList
,
addressTree
}
from
'
./services
'
;
import
{
DISTRIBUTION_AREA
}
from
'
@/../config/permission.config
'
;
const
TableList
=
()
=>
{
const
TableList
=
props
=>
{
const
{
permissions
}
=
props
;
const
canEditable
=
permissions
[
DISTRIBUTION_AREA
.
EDITABLE
.
id
];
const
[
visible
,
setVisible
]
=
useState
(
false
);
const
[
visible
,
setVisible
]
=
useState
(
false
);
const
[
templateData
,
settemplateData
]
=
useState
(
''
);
const
[
templateData
,
settemplateData
]
=
useState
(
''
);
const
actionRef
=
useRef
();
const
actionRef
=
useRef
();
...
@@ -29,6 +33,7 @@ const TableList = () => {
...
@@ -29,6 +33,7 @@ const TableList = () => {
};
};
const
res
=
{
const
res
=
{
edit
,
edit
,
canEditable
,
};
};
useEffect
(()
=>
{},
[]);
useEffect
(()
=>
{},
[]);
return
(
return
(
...
@@ -42,9 +47,12 @@ const TableList = () => {
...
@@ -42,9 +47,12 @@ const TableList = () => {
search=
{
false
}
search=
{
false
}
options=
{
false
}
options=
{
false
}
toolBarRender=
{
()
=>
[
toolBarRender=
{
()
=>
[
<
Button
key=
"3"
type=
"primary"
onClick=
{
setaArea
}
>
canEditable
&&
(
添加
<
Button
key=
"3"
type=
"primary"
onClick=
{
setaArea
}
>
</
Button
>,
{
'
'
}
添加
</
Button
>
),
]
}
]
}
/>
/>
<
AddArea
visible=
{
visible
}
onSubmit=
{
reload
}
templateData=
{
templateData
}
/>
<
AddArea
visible=
{
visible
}
onSubmit=
{
reload
}
templateData=
{
templateData
}
/>
...
@@ -52,4 +60,6 @@ const TableList = () => {
...
@@ -52,4 +60,6 @@ const TableList = () => {
);
);
};
};
export
default
TableList
;
export
default
connect
(({
menu
})
=>
({
permissions
:
menu
.
permissions
,
}))(
TableList
);
src/pages/orderManage/batchDelivery/index.jsx
View file @
b937ff45
...
@@ -2,6 +2,8 @@ import { Button, Upload, notification } from 'antd';
...
@@ -2,6 +2,8 @@ import { Button, Upload, notification } from 'antd';
import
React
,
{
useRef
}
from
'
react
'
;
import
React
,
{
useRef
}
from
'
react
'
;
import
{
PageHeaderWrapper
}
from
'
@ant-design/pro-layout
'
;
import
{
PageHeaderWrapper
}
from
'
@ant-design/pro-layout
'
;
import
ProTable
from
'
@ant-design/pro-table
'
;
import
ProTable
from
'
@ant-design/pro-table
'
;
import
{
connect
}
from
'
dva
'
;
import
{
BATCH_DELIVERY
}
from
'
@/../config/permission.config
'
;
import
{
import
{
queryToBatchSend
,
queryToBatchSend
,
uploadFile
,
uploadFile
,
...
@@ -9,8 +11,10 @@ import {
...
@@ -9,8 +11,10 @@ import {
downUploadeOrder
,
downUploadeOrder
,
}
from
'
../pendingDeliveryOrder/service
'
;
}
from
'
../pendingDeliveryOrder/service
'
;
const
TableList
=
ref
=>
{
const
TableList
=
props
=>
{
const
actionRef
=
useRef
(
null
);
const
actionRef
=
useRef
(
null
);
const
{
permissions
}
=
props
;
const
canEditable
=
permissions
[
BATCH_DELIVERY
.
EDITABLE
.
id
];
const
columns
=
[
const
columns
=
[
{
{
...
@@ -147,6 +151,9 @@ const TableList = ref => {
...
@@ -147,6 +151,9 @@ const TableList = ref => {
模板下载
模板下载
</
Button
>,
</
Button
>,
];
];
if
(
!
canEditable
)
{
exportBtn
.
splice
(
0
,
1
);
}
return
[
return
[
<
Button
<
Button
key=
"search"
key=
"search"
...
@@ -192,4 +199,6 @@ const TableList = ref => {
...
@@ -192,4 +199,6 @@ const TableList = ref => {
);
);
};
};
export
default
TableList
;
export
default
connect
(({
menu
})
=>
({
permissions
:
menu
.
permissions
,
}))(
TableList
);
src/pages/orderManage/pendingDeliveryOrder/index.jsx
View file @
b937ff45
...
@@ -4,6 +4,8 @@ import { PageHeaderWrapper } from '@ant-design/pro-layout';
...
@@ -4,6 +4,8 @@ import { PageHeaderWrapper } from '@ant-design/pro-layout';
import
ProTable
from
'
@ant-design/pro-table
'
;
import
ProTable
from
'
@ant-design/pro-table
'
;
import
{
FormInstance
}
from
'
antd/lib/form
'
;
import
{
FormInstance
}
from
'
antd/lib/form
'
;
import
moment
from
'
moment
'
;
import
moment
from
'
moment
'
;
import
{
connect
}
from
'
dva
'
;
import
{
PENDING_DELIVERY_ORDER
,
DELIVERY_ORDER
}
from
'
@/../config/permission.config
'
;
import
LogisticsForm
from
'
./components/LogisticsForm
'
;
import
LogisticsForm
from
'
./components/LogisticsForm
'
;
import
style
from
'
./styles.less
'
;
import
style
from
'
./styles.less
'
;
import
PopoverDom
from
'
./components/PreviewImage
'
;
import
PopoverDom
from
'
./components/PreviewImage
'
;
...
@@ -22,6 +24,10 @@ const { confirm } = Modal;
...
@@ -22,6 +24,10 @@ const { confirm } = Modal;
const
TableList
=
props
=>
{
const
TableList
=
props
=>
{
const
dateFormat
=
'
YYYY-MM-DD
'
;
const
dateFormat
=
'
YYYY-MM-DD
'
;
const
{
permissions
}
=
props
;
// 因待发货 和 已发货都使用当前组件,功能且相同,所以只要授权其中一个均可获得发货物流权限
const
canEditable
=
permissions
[
PENDING_DELIVERY_ORDER
.
EDITABLE
.
id
]
||
permissions
[
DELIVERY_ORDER
.
EDITABLE
.
id
];
const
[
companys
,
setCompanys
]
=
useState
([]);
const
[
companys
,
setCompanys
]
=
useState
([]);
const
[
LogisticsModalVisible
,
handleModalVisible
]
=
useState
(
false
);
const
[
LogisticsModalVisible
,
handleModalVisible
]
=
useState
(
false
);
const
[
skuList
,
setSkuList
]
=
useState
([]);
const
[
skuList
,
setSkuList
]
=
useState
([]);
...
@@ -299,7 +305,7 @@ const TableList = props => {
...
@@ -299,7 +305,7 @@ const TableList = props => {
fixed
:
'
right
'
,
fixed
:
'
right
'
,
render
:
(
_
,
record
)
=>
(
render
:
(
_
,
record
)
=>
(
<
React
.
Fragment
>
<
React
.
Fragment
>
{
ShowUpdateBtn
.
includes
(
record
?.
skuSource
?.
value
)
?
null
:
(
{
canEditable
&&
ShowUpdateBtn
.
includes
(
record
?.
skuSource
?.
value
)
?
null
:
(
<
Button
<
Button
type=
"primary"
type=
"primary"
style=
{
{
style=
{
{
...
@@ -324,7 +330,7 @@ const TableList = props => {
...
@@ -324,7 +330,7 @@ const TableList = props => {
{
props
.
type
===
2
?
'
更新物流信息
'
:
'
填写物流信息
'
}
{
props
.
type
===
2
?
'
更新物流信息
'
:
'
填写物流信息
'
}
</
Button
>
</
Button
>
)
}
)
}
{
props
.
type
!==
2
&&
(
{
canEditable
&&
props
.
type
!==
2
&&
(
<
Button
<
Button
type=
"primary"
type=
"primary"
className=
{
+
record
.
delayStatus
===
1
?
style
.
btnWarning
:
''
}
className=
{
+
record
.
delayStatus
===
1
?
style
.
btnWarning
:
''
}
...
@@ -453,4 +459,6 @@ const TableList = props => {
...
@@ -453,4 +459,6 @@ const TableList = props => {
);
);
};
};
export
default
TableList
;
export
default
connect
(({
menu
})
=>
({
permissions
:
menu
.
permissions
,
}))(
TableList
);
src/pages/orderManage/queryOrder/index.jsx
View file @
b937ff45
import
{
Form
,
Tabs
,
Input
,
Button
,
Pagination
}
from
'
antd
'
;
import
{
Form
,
Tabs
,
Input
,
Button
,
Pagination
}
from
'
antd
'
;
import
React
,
{
useState
,
useEffect
,
useRef
}
from
'
react
'
;
import
React
,
{
useState
,
useEffect
,
useRef
}
from
'
react
'
;
import
{
PageHeaderWrapper
}
from
'
@ant-design/pro-layout
'
;
import
{
PageHeaderWrapper
}
from
'
@ant-design/pro-layout
'
;
import
{
connect
}
from
'
dva
'
;
import
{
QUERY_ORDER
}
from
'
@/../config/permission.config
'
;
import
style
from
'
./index.less
'
;
import
style
from
'
./index.less
'
;
import
{
CustomTable
}
from
'
./components/CustomTable/index
'
;
import
{
CustomTable
}
from
'
./components/CustomTable/index
'
;
import
{
FormSearch
,
SEARCH_TYPE
}
from
'
./components/FormSearch/index
'
;
import
{
FormSearch
,
SEARCH_TYPE
}
from
'
./components/FormSearch/index
'
;
...
@@ -13,7 +15,9 @@ import { ORDER_SEARCH_TYPE, ORDER_TYPE, ORDER_STATUS } from './const';
...
@@ -13,7 +15,9 @@ import { ORDER_SEARCH_TYPE, ORDER_TYPE, ORDER_STATUS } from './const';
const
{
TabPane
}
=
Tabs
;
const
{
TabPane
}
=
Tabs
;
const
OrderList
=
ref
=>
{
const
OrderList
=
props
=>
{
const
{
permissions
}
=
props
;
const
canEditable
=
permissions
[
QUERY_ORDER
.
EDITABLE
.
id
];
const
[
loading
,
setLoading
]
=
useState
(
false
);
const
[
loading
,
setLoading
]
=
useState
(
false
);
const
detailModalRef
=
useRef
();
const
detailModalRef
=
useRef
();
...
@@ -290,6 +294,9 @@ const OrderList = ref => {
...
@@ -290,6 +294,9 @@ const OrderList = ref => {
align
:
'
center
'
,
align
:
'
center
'
,
width
:
100
,
width
:
100
,
render
:
({
value
,
record
,
index
,
subRecord
,
subIndex
})
=>
{
render
:
({
value
,
record
,
index
,
subRecord
,
subIndex
})
=>
{
if
(
!
canEditable
)
{
return
'
-
'
;
}
let
text
=
''
;
let
text
=
''
;
if
([
12
,
14
].
includes
(
record
.
orderStatus
))
{
if
([
12
,
14
].
includes
(
record
.
orderStatus
))
{
...
@@ -412,4 +419,6 @@ const OrderList = ref => {
...
@@ -412,4 +419,6 @@ const OrderList = ref => {
</
PageHeaderWrapper
>
</
PageHeaderWrapper
>
);
);
};
};
export
default
OrderList
;
export
default
connect
(({
menu
})
=>
({
permissions
:
menu
.
permissions
,
}))(
OrderList
);
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