Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
T
TOSTUMI
Project
Project
Details
Activity
Releases
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
Maple
TOSTUMI
Commits
28f9a4cf
Commit
28f9a4cf
authored
Sep 18, 2020
by
maple
1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[fix]用户模块
parent
7cf88132
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
332 additions
and
180 deletions
+332
-180
config.ts
config/config.ts
+3
-0
TableShow.tsx
src/components/TableShow/TableShow.tsx
+2
-2
User.ts
src/models/CommunityManagement/User.ts
+31
-8
login.ts
src/models/login.ts
+2
-1
ResultPage.tsx
src/pages/UserManagement/LIFEUserManagement/ResultPage.tsx
+54
-0
ResultPageFailed.tsx
...es/UserManagement/LIFEUserManagement/ResultPageFailed.tsx
+39
-0
UserMemberDetail.tsx
...es/UserManagement/LIFEUserManagement/UserMemberDetail.tsx
+25
-0
Users.tsx
src/pages/UserManagement/LIFEUserManagement/Users.tsx
+95
-111
UsersDetail.tsx
src/pages/UserManagement/LIFEUserManagement/UsersDetail.tsx
+71
-52
Template.tsx
src/pages/runTest/Template.tsx
+1
-1
tos.ts
src/services/tos.ts
+5
-1
method.ts
src/utils/method.ts
+1
-1
params.ts
src/utils/params.ts
+3
-3
No files found.
config/config.ts
View file @
28f9a4cf
...
@@ -87,7 +87,10 @@ export default defineConfig({
...
@@ -87,7 +87,10 @@ export default defineConfig({
{
path
:
'./'
,
component
:
'./UserManagement/LIFEUserManagement/Users'
},
{
path
:
'./'
,
component
:
'./UserManagement/LIFEUserManagement/Users'
},
{
path
:
'./Add'
,
component
:
'./UserManagement/LIFEUserManagement/UsersAdd'
},
{
path
:
'./Add'
,
component
:
'./UserManagement/LIFEUserManagement/UsersAdd'
},
{
path
:
'./Detail'
,
component
:
'./UserManagement/LIFEUserManagement/UsersDetail'
},
{
path
:
'./Detail'
,
component
:
'./UserManagement/LIFEUserManagement/UsersDetail'
},
{
path
:
'./MemberDetail'
,
component
:
'./UserManagement/LIFEUserManagement/UserMemberDetail'
},
{
path
:
'./Edit'
,
component
:
'./UserManagement/LIFEUserManagement/UsersDetail'
},
{
path
:
'./Edit'
,
component
:
'./UserManagement/LIFEUserManagement/UsersDetail'
},
{
path
:
'./Result'
,
component
:
'./UserManagement/LIFEUserManagement/ResultPage'
},
{
path
:
'./ResultFailed'
,
component
:
'./UserManagement/LIFEUserManagement/ResultPageFailed'
},
]
]
},
},
{
{
...
...
src/components/TableShow/TableShow.tsx
View file @
28f9a4cf
...
@@ -55,7 +55,7 @@ const TableShow = (props:any) => {
...
@@ -55,7 +55,7 @@ const TableShow = (props:any) => {
dataRow
.
map
((
item
,
index
)
=>
{
dataRow
.
map
((
item
,
index
)
=>
{
return
(
return
(
<
TabPane
tab=
{
item
.
name
}
key=
{
index
}
>
<
TabPane
tab=
{
item
.
name
}
key=
{
index
}
>
<
Row
gutter=
{
16
}
><
Col
>
Address:
</
Col
><
Col
>
{
((
item
.
unit
)[
0
].
member
)[
0
]
.
address_and_postalCode
}
</
Col
></
Row
>
<
Row
gutter=
{
16
}
><
Col
>
Address:
</
Col
><
Col
>
{
((
item
).
owner
)
.
address_and_postalCode
}
</
Col
></
Row
>
{
{
(
item
.
unit
).
map
((
unit
:
any
,
uindex
:
any
)
=>
{
(
item
.
unit
).
map
((
unit
:
any
,
uindex
:
any
)
=>
{
return
(
return
(
...
@@ -79,7 +79,7 @@ const TableShow = (props:any) => {
...
@@ -79,7 +79,7 @@ const TableShow = (props:any) => {
<
Row
>
<
Row
>
<
img
width=
{
80
}
src=
{
unit
.
imgUrl
}
/>
<
img
width=
{
80
}
src=
{
unit
.
imgUrl
}
/>
</
Row
>
</
Row
>
<
Row
style=
{
{
marginTop
:
8
}
}
><
div
style=
{
{
width
:
80
,
textAlign
:
"center"
}
}
>
{
((
item
.
unit
)[
0
].
member
)[
0
].
cdk_code
}
(
{
user_code
[((
item
.
unit
)[
0
].
member
)[
0
].
cdk_s
tatus
]
}
)
</
div
></
Row
>
<
Row
style=
{
{
marginTop
:
8
}
}
><
div
style=
{
{
width
:
80
,
textAlign
:
"center"
}
}
>
{
item
.
owner
.
cdkCode
}
(
{
user_code
[
item
.
owner
.
cdkS
tatus
]
}
)
</
div
></
Row
>
</
Col
>
</
Col
>
</
Row
>
</
Row
>
...
...
src/models/CommunityManagement/User.ts
View file @
28f9a4cf
...
@@ -17,7 +17,9 @@ export default {
...
@@ -17,7 +17,9 @@ export default {
curString
:
{
subscribeDate
:
null
,
status
:
null
,
curPage
:
1
,
curPage2
:
1
},
curString
:
{
subscribeDate
:
null
,
status
:
null
,
curPage
:
1
,
curPage2
:
1
},
communityInfo
:
null
,
communityInfo
:
null
,
pageDate
:
null
,
pageDate
:
null
,
returnValue
:
null
,
},
},
reducers
:
{
reducers
:
{
...
@@ -30,8 +32,8 @@ export default {
...
@@ -30,8 +32,8 @@ export default {
returnDataSave
(
state
,
{
DataSave
})
{
returnDataSave
(
state
,
{
DataSave
})
{
return
{
...
state
,
DataSave
};
return
{
...
state
,
DataSave
};
},
},
DataSaveDetail
(
state
,
{
DataSaveDetail
,})
{
DataSaveDetail
(
state
,
{
DataSaveDetail
,
returnValue
})
{
return
{
...
state
,
DataSaveDetail
};
return
{
...
state
,
DataSaveDetail
,
returnValue
};
},
},
returnSource
(
state
,
{
sourceData
})
{
returnSource
(
state
,
{
sourceData
})
{
return
{
...
state
,
sourceData
};
return
{
...
state
,
sourceData
};
...
@@ -47,8 +49,10 @@ export default {
...
@@ -47,8 +49,10 @@ export default {
},
},
PageDate
(
state
,
{
pageDate
})
{
PageDate
(
state
,
{
pageDate
})
{
return
{...
state
,
pageDate
}
return
{...
state
,
pageDate
}
}
},
ReturnValue
(
state
,
{
returnValue
})
{
return
{...
state
,
returnValue
}
},
},
},
...
@@ -63,6 +67,16 @@ export default {
...
@@ -63,6 +67,16 @@ export default {
let
Data
=
null
;
let
Data
=
null
;
yield
put
({
type
:
'returnPage'
,
Data
});
yield
put
({
type
:
'returnPage'
,
Data
});
}
break
;
}
break
;
case
13
:
{
let
DataSaveDetail
=
null
;
let
returnValue
=
null
;
yield
put
({
type
:
'DataSaveDetail'
,
DataSaveDetail
,
returnValue
});
}
break
;
case
16
:
{
console
.
log
(
"等待删除完成"
)
var
returnValue
=
{
test
:
"yes"
};
yield
put
({
type
:
'ReturnValue'
,
returnValue
});
}
break
;
}
}
const
resp
=
yield
call
(
service
.
RA
,
playload
);
const
resp
=
yield
call
(
service
.
RA
,
playload
);
console
.
log
(
resp
)
console
.
log
(
resp
)
...
@@ -103,9 +117,11 @@ export default {
...
@@ -103,9 +117,11 @@ export default {
let
DataSaveDetail
=
resp
.
data
;
let
DataSaveDetail
=
resp
.
data
;
yield
put
({
type
:
'DataSaveDetail'
,
DataSaveDetail
});
yield
put
({
type
:
'DataSaveDetail'
,
DataSaveDetail
});
}
break
;
}
break
;
case
16
:
{
// case 16: {
console
.
log
(
"等待删除完成"
)
// console.log("等待删除完成")
}
break
;
// var returnValue = resp;
// yield put({ type: 'ReturnValue', returnValue });
// } break;
case
32
:
{
case
32
:
{
let
communityInfo
=
resp
;
let
communityInfo
=
resp
;
yield
put
({
type
:
'returnCommunityInfo'
,
communityInfo
});
yield
put
({
type
:
'returnCommunityInfo'
,
communityInfo
});
...
@@ -148,6 +164,13 @@ export default {
...
@@ -148,6 +164,13 @@ export default {
var
pageDate
=
playload
var
pageDate
=
playload
yield
put
({
type
:
'PageDate'
,
pageDate
})
yield
put
({
type
:
'PageDate'
,
pageDate
})
},
},
*
DataClear
({
},
{
put
})
{
var
pageDate
=
null
yield
put
({
type
:
'returnPage'
,
pageDate
})
},
},
},
};
};
src/models/login.ts
View file @
28f9a4cf
...
@@ -71,7 +71,8 @@ const Model: LoginModelType = {
...
@@ -71,7 +71,8 @@ const Model: LoginModelType = {
// tosUserName: "admin"
// tosUserName: "admin"
// tosUserPhone: "18818881888"
// tosUserPhone: "18818881888"
setCookie
(
"name"
,
response
.
token
.
tosUserName
)
setCookie
(
"name"
,
response
.
token
.
tosUserName
)
setCookie
(
"phone"
,
response
.
token
.
tosUserPhone
)
setCookie
(
"phone"
,
response
.
token
.
tosUserPhone
)
setCookie
(
"id"
,
response
.
token
.
id
)
console
.
log
(
"获取到Token:"
+
getCookie
(
"token"
))
console
.
log
(
"获取到Token:"
+
getCookie
(
"token"
))
yield
put
({
type
:
'saveToken'
,
token
:
userMessage
.
token
,
userName
:
payload
.
userName
,
password
:
payload
.
password
});
yield
put
({
type
:
'saveToken'
,
token
:
userMessage
.
token
,
userName
:
payload
.
userName
,
password
:
payload
.
password
});
const
urlParams
=
new
URL
(
window
.
location
.
href
);
const
urlParams
=
new
URL
(
window
.
location
.
href
);
...
...
src/pages/UserManagement/LIFEUserManagement/ResultPage.tsx
0 → 100644
View file @
28f9a4cf
import
React
,
{
useState
,
useEffect
,
useRef
}
from
'react'
;
import
{
Input
,
Tabs
,
Table
,
Result
,
Button
}
from
'antd'
;
const
{
TabPane
}
=
Tabs
;
import
{
connect
,
history
}
from
'umi'
;
import
{
RA
}
from
'@/utils/method'
;
const
module
=
"User"
const
ResultPage
=
(
props
:
any
)
=>
{
const
{
dispatch
,
Data
}
=
props
;
const
formRef
=
useRef
(
null
)
const
[
resultTime
,
setResultTime
]
=
useState
(
3
);
function
loop
(
i
:
number
)
{
if
(
i
<
4
)
{
console
.
log
(
i
)
setResultTime
(
4
-
i
)
setTimeout
(
function
(){
loop
(
++
i
)},
1000
)
}
else
{
setResultTime
(
0
)
history
.
go
(
-
1
)
}
}
useEffect
(()
=>
{
loop
(
1
)
},[])
const
backPage
=
()
=>
{
}
return
(
<
div
style=
{
{
width
:
"100%"
,
minWidth
:
1020
,
padding
:
34
,
backgroundColor
:
"#ffffff"
}
}
>
<
Result
status=
"success"
title=
"Successfully submit the file!"
subTitle=
{
<
p
>
server has been handled it ,Wait for
<
strong
>
{
resultTime
}
</
strong
>
seconds to return automatically.
</
p
>
}
extra=
{
[
<
Button
type=
"primary"
key=
"ok"
onClick=
{
backPage
}
>
Ok
</
Button
>,
<
Button
key=
"back"
onClick=
{
backPage
}
>
Back
</
Button
>
]
}
/>
</
div
>
);
};
function
map
(
state
:
any
)
{
const
{
Data
}
=
state
[
module
]
return
{
Data
}
}
export
default
connect
(
map
)(
ResultPage
);
\ No newline at end of file
src/pages/UserManagement/LIFEUserManagement/ResultPageFailed.tsx
0 → 100644
View file @
28f9a4cf
import
React
,
{
useState
,
useEffect
,
useRef
}
from
'react'
;
import
{
Input
,
Tabs
,
Table
,
Result
,
Button
}
from
'antd'
;
const
{
TabPane
}
=
Tabs
;
import
{
connect
,
history
}
from
'umi'
;
import
{
RA
}
from
'@/utils/method'
;
const
module
=
"User"
const
ResultPageFailed
=
(
props
:
any
)
=>
{
const
{
dispatch
,
Data
}
=
props
;
const
formRef
=
useRef
(
null
)
const
[
resultTime
,
setResultTime
]
=
useState
(
3
);
const
backPage
=
()
=>
{
history
.
go
(
-
1
)
}
return
(
<
div
style=
{
{
width
:
"100%"
,
minWidth
:
1020
,
padding
:
34
,
backgroundColor
:
"#ffffff"
}
}
>
<
Result
status=
"error"
title=
"Error submit the file!"
subTitle=
{
<
p
>
server has been handled it ,please try again or back.
</
p
>
}
extra=
{
[
<
Button
type=
"primary"
key=
"ok"
><
a
href=
"http://47.74.233.180:8651/tos/excel/down?operator_id=123456"
>
Download
</
a
></
Button
>,
<
Button
key=
"back"
onClick=
{
backPage
}
>
Back
</
Button
>
]
}
/>
</
div
>
);
};
function
map
(
state
:
any
)
{
const
{
Data
}
=
state
[
module
]
return
{
Data
}
}
export
default
connect
(
map
)(
ResultPageFailed
);
\ No newline at end of file
src/pages/UserManagement/LIFEUserManagement/UserMemberDetail.tsx
0 → 100644
View file @
28f9a4cf
import
React
,
{
useState
,
useEffect
,
useRef
}
from
'react'
;
import
{
Input
,
Tabs
,
Table
,
Space
,
Button
}
from
'antd'
;
const
{
TabPane
}
=
Tabs
;
import
{
connect
,
history
}
from
'umi'
;
import
{
RA
}
from
'@/utils/method'
;
const
module
=
"User"
const
UserMemberDetail
=
(
props
:
any
)
=>
{
const
{
dispatch
,
Data
}
=
props
;
const
formRef
=
useRef
(
null
)
return
(
<
div
style=
{
{
width
:
"100%"
,
minWidth
:
1020
,
padding
:
34
,
backgroundColor
:
"#ffffff"
}
}
>
</
div
>
);
};
function
map
(
state
:
any
)
{
const
{
Data
}
=
state
[
module
]
return
{
Data
}
}
export
default
connect
(
map
)(
UserMemberDetail
);
\ No newline at end of file
src/pages/UserManagement/LIFEUserManagement/Users.tsx
View file @
28f9a4cf
...
@@ -10,7 +10,7 @@ import TitleSearch from '../../../components/TitleSearch/TitleSearch';
...
@@ -10,7 +10,7 @@ import TitleSearch from '../../../components/TitleSearch/TitleSearch';
import
{
timestampToTime
}
from
'../../../utils/time'
;
import
{
timestampToTime
}
from
'../../../utils/time'
;
import
{
PAGE
,
RA
,
URLCLEAR
}
from
'@/utils/method'
;
import
{
PAGE
,
RA
,
URLCLEAR
,
getCookie
,
DataClear
}
from
'@/utils/method'
;
import
PageData
from
'@/models/Common/PageData'
;
import
PageData
from
'@/models/Common/PageData'
;
const
module
=
"User"
const
module
=
"User"
...
@@ -37,98 +37,110 @@ const Users = (props:any) => {
...
@@ -37,98 +37,110 @@ const Users = (props:any) => {
// const string2mean = [[0, "未注册"], [1, "注册"], [2, "注销"]]
// const string2mean = [[0, "未注册"], [1, "注册"], [2, "注销"]]
const
string2mean
=
[[
0
,
"Unregistered"
],[
1
,
"Registered"
],
[
2
,
"Deregistered"
]]
const
string2mean
=
[[
0
,
"Unregistered"
],[
1
,
"Registered"
],
[
2
,
"Deregistered"
]]
const
[
curString
,
setCurString
]
=
useState
(
null
)
const
[
curString
,
setCurString
]
=
useState
({
defaultCurrent
:
1
})
const
[
compent
,
setCompent
]
=
useState
({
loading
:
false
,
fileUploading
:
false
})
const
[
TestData
,
setTestData
]
=
useState
(
null
)
//{ rows: [], total:0,defaultCurrent:1 }
const
[
pageStart
,
setPageStart
]
=
useState
(
false
)
const
[
fileUpload
,
setFileUpload
]
=
useState
(
false
);
const
[
fileUploading
,
setFileUploading
]
=
useState
(
false
)
const
[
resultTime
,
setResultTime
]
=
useState
(
3
);
const
columns
=
[
{
title
:
username
,
dataIndex
:
'owerName'
,
},
{
title
:
project
,
dataIndex
:
'communityName'
,},
{
title
:
unit
,
render
:(
text
:
any
,
record
:
any
)
=>
(<
div
>
{
record
.
buildingNumber
+
"#"
+
record
.
floorNumber
+
"—"
+
record
.
roomNumber
}
</
div
>)},
{
title
:
status
,
dataIndex
:
'enable'
,
render
:
(
text
:
any
,
record
:
any
)
=>
(<
div
>
{
string2mean
[
text
][
1
]
}
</
div
>)},
{
title
:
submissionTime
,
render
:(
text
:
any
,
record
:
any
)
=>
(<
div
>
{
timestampToTime
(
record
.
createTime
.
time
)
}
</
div
>)},
{
title
:
actions
,
render
:
(
text
:
any
,
record
:
any
)
=>
(
<
Space
size=
"middle"
>
<
a
onClick=
{
goToEdit
.
bind
(
this
,
record
)
}
disabled=
{
record
.
enable
==
2
?
true
:
false
}
>
Edit
</
a
>
<
a
onClick=
{
goToDetail
.
bind
(
this
,
record
)
}
>
Detail
</
a
>
</
Space
>
),
},
];
const
changeValue
=
(
key
:
any
,
value
:
any
)
=>
{
var
tmp
=
compent
;
tmp
[
key
]
=
value
;
setCompent
(
tmp
)
}
// 上传的模块
const
propsUpload
=
{
const
propsUpload
=
{
name
:
'file'
,
name
:
'file'
,
action
:
'http://47.74.233.180:8651/tos/excel/upload?userId=369'
,
action
:
()
=>
{
return
"http://47.74.233.180:8651/tos/excel/upload?userId="
+
getCookie
(
"id"
)}
,
onChange
(
info
)
{
onChange
(
info
)
{
if
(
info
.
file
.
status
==
'uploading'
)
{
if
(
info
.
file
.
status
==
'uploading'
)
{
setFileUploading
(
true
)
changeValue
(
"fileUploading"
,
true
)
// console.log(info.file, info.fileList);
}
}
if
(
info
.
file
.
status
===
'done'
)
{
if
(
info
.
file
.
status
===
'done'
)
{
setFileUpload
(
true
)
if
(
info
.
file
.
response
.
data
.
error_code
==
"0000"
)
{
setFileUploading
(
false
)
history
.
push
(
location
.
pathname
+
"/Result"
)
// message.success(`${info.file.name} file uploaded successfully`);
}
else
{
history
.
push
(
location
.
pathname
+
"/ResultFailed"
)
message
.
error
(
`
${
info
.
file
.
name
}
file upload failed.`
);
changeValue
(
"fileUploading"
,
false
)
}
}
else
if
(
info
.
file
.
status
===
'error'
)
{
}
else
if
(
info
.
file
.
status
===
'error'
)
{
message
.
error
(
`
${
info
.
file
.
name
}
file upload failed.`
);
message
.
error
(
`
${
info
.
file
.
name
}
file upload failed.`
);
setFileUploading
(
false
)
changeValue
(
"fileUploading"
,
false
)
}
}
},
},
showUploadList
:
false
,
showUploadList
:
false
,
}
}
useEffect
(()
=>
{
if
(
fileUpload
)
{
var
index
=
2
var
timer
=
setInterval
(()
=>
{
setResultTime
(
index
)
index
--
if
(
index
==
-
1
)
{
setFileUpload
(
false
)
setResultTime
(
3
)
clearInterval
(
timer
)
}
},
1000
)
}
},
[
fileUpload
])
const
backPage
=
()
=>
{
setFileUpload
(
false
)
setResultTime
(
3
)
}
useEffect
(()
=>
{
// useEffect(() => {
// if (CommunityList != null) {
if
(
CommunityList
!=
null
)
{
// console.log("小组件开始请求")
// if (pageData != null) {
console
.
log
(
"小组件开始请求"
)
// console.log(pageData)
RA
(
12
,
{
// }
ownerName
:
null
,
// RA(12, {
communityArray
:
CommunityList
// ownerName: pageData != null?pageData.search.name:null,
},
module
,
dispatch
);
// communityArray: pageData != null?pageData.search.cell:CommunityList
}
// }, module, dispatch);
},
[
CommunityList
])
// }
// }, [CommunityList])
useEffect
(()
=>
{
useEffect
(()
=>
{
if
(
Data
!=
null
)
{
if
(
pageStart
==
false
)
{
var
tmp
=
{
serach
:
{
name
:
null
,
cell
:
null
},
defaultCurrent
:
1
,
total
:
0
}
if
(
history_url
!=
null
&&
history
.
location
.
pathname
!=
history_url
)
{
if
(
history_url
!=
null
&&
history
.
location
.
pathname
!=
history_url
)
{
console
.
log
(
"旧页面"
);
console
.
log
(
"来自上层数据"
)
console
.
log
(
history_url
)
console
.
log
(
history
.
location
.
pathname
)
console
.
log
(
pageData
)
tmp
.
defaultCurrent
=
pageData
.
defaultCurrent
;
}
else
{
console
.
log
(
"新页面"
)
}
tmp
.
total
=
Data
.
total
var
tmp
=
Data
tmp
.
defaultCurrent
=
pageData
.
defaultCurrent
var
tmp2
=
curString
;
tmp2
.
defaultCurrent
=
pageData
.
defaultCurrent
;
setCurString
(
tmp2
)
setTestData
(
tmp
)
setCurString
(
tmp
)
// URLCLEAR(module2, dispatch)
console
.
log
(
tmp
)
}
else
{
URLCLEAR
(
module2
,
dispatch
)
var
tmp
=
{
rows
:[],
total
:
0
,
defaultCurrent
:
1
}
setTestData
(
tmp
)
}
}
if
(
pageStart
==
true
)
{
if
(
Data
!=
null
)
{
console
.
log
(
"可以接受值2"
)
console
.
log
(
Data
)
changeValue
(
"loading"
,
false
)
setTestData
(
Data
)
}
}
}
},
[
Data
])
},
[
Data
])
useEffect
(()
=>
{
setPageStart
(
true
)
},[])
const
goToDetail
=
(
values
:
any
,
e
:
any
)
=>
{
const
goToDetail
=
(
values
:
any
,
e
:
any
)
=>
{
SA
(
values
)
SA
(
values
)
console
.
log
(
"保存页面参数"
)
PAGE
(
curString
,
module3
,
dispatch
)
//保存页面参数
console
.
log
(
curString
)
PAGE
(
curString
,
module3
,
dispatch
)
history
.
push
(
location
.
pathname
+
'/Detail'
)
history
.
push
(
location
.
pathname
+
'/Detail'
)
}
}
const
goToEdit
=
(
values
:
any
,
e
:
any
)
=>
{
const
goToEdit
=
(
values
:
any
,
e
:
any
)
=>
{
SA
(
values
)
SA
(
values
)
PAGE
(
curString
,
module3
,
dispatch
)
history
.
push
(
location
.
pathname
+
'/Edit'
)
history
.
push
(
location
.
pathname
+
'/Edit'
)
}
}
...
@@ -136,39 +148,21 @@ const Users = (props:any) => {
...
@@ -136,39 +148,21 @@ const Users = (props:any) => {
history
.
push
(
location
.
pathname
+
'/Add'
)
history
.
push
(
location
.
pathname
+
'/Add'
)
}
}
const
columns
=
[
{
title
:
username
,
dataIndex
:
'owerName'
,
},
{
title
:
project
,
dataIndex
:
'communityName'
,},
{
title
:
unit
,
render
:(
text
:
any
,
record
:
any
)
=>
(<
div
>
{
record
.
buildingNumber
+
"#"
+
record
.
floorNumber
+
"—"
+
record
.
roomNumber
}
</
div
>)},
{
title
:
status
,
dataIndex
:
'enable'
,
render
:
(
text
:
any
,
record
:
any
)
=>
(<
div
>
{
string2mean
[
text
][
1
]
}
</
div
>)},
{
title
:
submissionTime
,
render
:(
text
:
any
,
record
:
any
)
=>
(<
div
>
{
timestampToTime
(
record
.
createTime
.
time
)
}
</
div
>)},
{
title
:
actions
,
render
:
(
text
:
any
,
record
:
any
)
=>
(
<
Space
size=
"middle"
>
<
a
onClick=
{
goToEdit
.
bind
(
this
,
record
)
}
disabled=
{
record
.
enable
==
2
?
true
:
false
}
>
Edit
</
a
>
<
a
onClick=
{
goToDetail
.
bind
(
this
,
record
)
}
>
Detail
</
a
>
</
Space
>
),
},
];
const
CallBackTitleSearch
=
(
comment
:
any
)
=>
{
const
CallBackTitleSearch
=
(
comment
:
any
)
=>
{
console
.
log
(
comment
)
console
.
log
(
comment
)
var
tmp
=
curString
tmp
.
total
=
0
tmp
.
serach
.
name
=
comment
.
OwnerName
tmp
.
serach
.
cell
=
comment
.
serviceCommunityList
setCurString
(
tmp
)
RA
(
12
,
{
RA
(
12
,
{
ownerName
:
comment
.
OwnerName
,
ownerName
:
comment
.
OwnerName
,
communityArray
:
comment
.
serviceCommunityList
communityArray
:
comment
.
serviceCommunityList
},
module
,
dispatch
);
},
module
,
dispatch
);
changeValue
(
"loading"
,
true
)
}
}
const
pageChange
=
(
values
:
any
)
=>
{
const
pageChange
=
(
values
:
any
)
=>
{
var
tmp
=
curString
tmp
.
defaultCurrent
=
values
.
current
var
tmp
=
curString
;
tmp
.
defaultCurrent
=
values
.
current
;
setCurString
(
tmp
)
setCurString
(
tmp
)
}
}
...
@@ -177,39 +171,29 @@ const Users = (props:any) => {
...
@@ -177,39 +171,29 @@ const Users = (props:any) => {
{
/* 头部组件 */
}
{
/* 头部组件 */
}
{
fileUpload
!=
true
?
<>
<
TitleSearch
<
TitleSearch
listkey=
{
[
"OwnerName"
]
}
list=
{
[
"Owner Name"
]
}
community=
{
"serviceCommunityList"
}
onSubmit=
{
CallBackTitleSearch
}
/>
listkey=
{
[
"OwnerName"
]
}
list=
{
[
"Owner Name"
]
}
community=
{
"serviceCommunityList"
}
onSubmit=
{
CallBackTitleSearch
}
/>
{
/* 内容组件 */
}
{
/* 内容组件 */
}
<
div
className=
{
styles
.
box2
}
>
<
div
className=
{
styles
.
box2
}
>
<
button
className=
{
styles
.
buttonAdd2
}
onClick=
{
goToAdd
}
>
Create New Owner
</
button
>
<
button
className=
{
styles
.
buttonAdd2
}
onClick=
{
goToAdd
}
>
Create New Owner
</
button
>
<
div
className=
{
styles
.
buttonAdd
}
>
<
div
className=
{
styles
.
buttonAdd
}
>
<
Upload
{
...
propsUpload
}
>
<
Upload
{
...
propsUpload
}
>
<
Button
icon=
{
fileUploading
?
null
:<
UploadOutlined
/>
}
>
{
fileUploading
?<><
Spin
indicator=
{
<
LoadingOutlined
style=
{
{
fontSize
:
16
}
}
spin
/>
}
/>
Uploading
</>:
"Batch Upload"
}
</
Button
>
<
Button
icon=
{
compent
.
fileUploading
?
null
:<
UploadOutlined
/>
}
>
{
compent
.
fileUploading
?<><
Spin
indicator=
{
<
LoadingOutlined
style=
{
{
fontSize
:
16
}
}
spin
/>
}
/>
Uploading
</>:
"Batch Upload"
}
</
Button
>
</
Upload
>
</
Upload
>
</
div
>
</
div
>
</
div
>
</
div
>
{
/* 列表组件 */
}
{
/* 列表组件 */
}
<
Spin
spinning=
{
compent
.
loading
}
>
{
{
Data
!=
null
?
TestData
!=
null
?
<
Table
rowKey=
{
"id"
}
style=
{
{
marginTop
:
16
}
}
dataSource=
{
Data
.
rows
}
columns=
{
columns
}
pagination=
{
curString
}
onChange=
{
pageChange
}
/>
<>
<
Table
rowKey=
{
"id"
}
style=
{
{
marginTop
:
16
}
}
dataSource=
{
TestData
.
rows
}
columns=
{
columns
}
pagination=
{
TestData
}
onChange=
{
pageChange
}
/>
</>
:
null
:
null
}
}
</>
:
</
Spin
>
<
Result
status=
"success"
title=
"Successfully submit the file!"
subTitle=
{
<
p
>
server has been handled it ,Wait for
<
strong
>
{
resultTime
}
</
strong
>
seconds to return automatically.
</
p
>
}
extra=
{
[
<
Button
type=
"primary"
key=
"ok"
onClick=
{
backPage
}
>
Ok
</
Button
>,
<
Button
key=
"back"
onClick=
{
backPage
}
>
Back
</
Button
>
]
}
/>
}
</
div
>
</
div
>
);
);
...
...
src/pages/UserManagement/LIFEUserManagement/UsersDetail.tsx
View file @
28f9a4cf
import
React
,
{
useState
,
useEffect
,
useRef
}
from
'react'
;
import
React
,
{
useState
,
useEffect
,
useRef
}
from
'react'
;
import
{
Input
,
Tabs
,
Table
,
Space
,
Pagination
,
Tooltip
,
Button
,
Form
,
Row
,
Col
,
message
}
from
'antd'
;
import
{
Input
,
Tabs
,
Table
,
Space
,
Pagination
,
Tooltip
,
Button
,
Form
,
Row
,
Col
,
message
,
Spin
}
from
'antd'
;
const
{
TabPane
}
=
Tabs
;
const
{
TabPane
}
=
Tabs
;
import
{
Link
,
useIntl
,
connect
,
Dispatch
}
from
'umi'
;
import
{
Link
,
useIntl
,
connect
,
Dispatch
}
from
'umi'
;
import
styles
from
'./UsersAdd.less'
;
import
styles
from
'./UsersAdd.less'
;
...
@@ -11,25 +11,29 @@ import { checkParam } from '../../../utils/method'
...
@@ -11,25 +11,29 @@ import { checkParam } from '../../../utils/method'
import
TableShow
from
'@/components/TableShow/TableShow'
;
import
TableShow
from
'@/components/TableShow/TableShow'
;
import
{
values
,
fromPairs
}
from
'lodash'
;
import
{
values
,
fromPairs
}
from
'lodash'
;
import
{
timestampToTime
}
from
'@/utils/time'
;
import
{
timestampToTime
}
from
'@/utils/time'
;
import
{
validateMessages
}
from
'@/utils/params'
;
const
UsersDetail
=
(
props
:
any
)
=>
{
const
UsersDetail
=
(
props
:
any
)
=>
{
const
{
dispatch
,
DataSave
,
DataSaveDetail
,
Result
}
=
props
;
const
{
dispatch
,
DataSave
,
DataSaveDetail
,
Result
,
returnValue
}
=
props
;
const
RA
=
(
index
:
any
,
values
:
any
)
=>
{
dispatch
({
type
:
'User/RA'
,
playload
:
{
index
:
index
,
body
:
values
}
})
};
const
RA
=
(
index
:
any
,
values
:
any
)
=>
{
dispatch
({
type
:
'User/RA'
,
playload
:
{
index
:
index
,
body
:
values
}
})
};
const
ResultClear
=
()
=>
{
dispatch
({
type
:
'User/ResultClear'
})
};
const
ResultClear
=
()
=>
{
dispatch
({
type
:
'User/ResultClear'
})
};
const
[
postman
,
setPostman
]
=
useState
({
extend
:
null
,
tab
:
1
})
const
[
memberDetail
,
setMemberDetail
]
=
useState
(
false
);
const
[
memberDetail
,
setMemberDetail
]
=
useState
(
false
);
const
[
memberData
,
setMemberData
]
=
useState
(
null
);
const
[
memberData
,
setMemberData
]
=
useState
(
null
);
const
[
editFlag
,
setEditFlag
]
=
useState
(
false
)
const
[
editFlag
,
setEditFlag
]
=
useState
(
false
)
const
user_status
=
[[
1
,
"家属"
],
[
2
,
"租户"
]]
const
user_status
=
[[
1
,
"家属"
],
[
2
,
"租户"
]]
const
user_type_status
=
[
"Registered"
,
"Unregistered"
,
"Cancellation"
]
const
user_type_status
=
[
"Unregistered"
,
"registered"
,
"Deregistered"
]
const
[
DataSaveLoading
,
setDataSaveLoading
]
=
useState
(
false
);
const
formRef
=
useRef
(
null
);
const
formRef
=
useRef
(
null
);
const
onFinish
=
(
values
:
any
)
=>
{
const
onFinish
=
(
values
:
any
)
=>
{
if
(
DataSave
!=
null
)
{
if
(
DataSave
!=
null
)
{
values
.
id
=
DataSave
.
id
values
.
id
=
DataSave
.
id
values
.
enable
=
DataSave
.
enable
}
else
{
}
else
{
values
.
id
=
null
values
.
id
=
null
}
}
...
@@ -52,7 +56,18 @@ const UsersDetail = (props:any) => {
...
@@ -52,7 +56,18 @@ const UsersDetail = (props:any) => {
ResultClear
()
ResultClear
()
}
}
}
}
},[
Result
])
},
[
Result
])
useEffect
(()
=>
{
if
(
returnValue
!=
null
)
{
message
.
success
(
"Delete Successfully!"
)
RA
(
13
,
{
id
:
DataSave
.
id
,
owerName
:
DataSave
.
owerName
,
enable
:
DataSave
.
enable
,
})
}
},[
returnValue
])
useEffect
(()
=>
{
useEffect
(()
=>
{
if
(
DataSave
!=
null
)
{
if
(
DataSave
!=
null
)
{
console
.
log
(
"页面数据"
)
console
.
log
(
"页面数据"
)
...
@@ -64,37 +79,32 @@ const UsersDetail = (props:any) => {
...
@@ -64,37 +79,32 @@ const UsersDetail = (props:any) => {
}
}
formRef
.
current
.
setFieldsValue
(
tmp
)
formRef
.
current
.
setFieldsValue
(
tmp
)
RA
(
13
,
{
RA
(
13
,
{
ownerId
:
DataSave
.
id
,
id
:
DataSave
.
id
,
owerName
:
DataSave
.
owerName
,
owerName
:
DataSave
.
owerName
,
enable
:
DataSave
.
enable
,
})
})
}
else
{
history
.
go
(
-
1
)
}
}
},
[
DataSave
])
},
[
DataSave
])
useEffect
(()
=>
{
useEffect
(()
=>
{
if
(
DataSaveDetail
!=
null
)
{
if
(
DataSaveDetail
!=
null
)
{
console
.
log
(
"页面数据副歌"
)
console
.
log
(
"页面数据副歌"
)
console
.
log
(
DataSaveDetail
)
console
.
log
(
DataSaveDetail
)
setDataSaveLoading
(
false
)
}
}
},
[
DataSaveDetail
])
},
[
DataSaveDetail
])
useEffect
(()
=>
{
useEffect
(()
=>
{
if
((
location
.
pathname
).
indexOf
(
"Edit"
)
>
-
1
)
{
if
((
location
.
pathname
).
indexOf
(
"Edit"
)
>
-
1
)
{
setEditFlag
(
true
)
setEditFlag
(
true
)
}
}
setDataSaveLoading
(
true
)
},
[])
},
[])
const
extendName
=
(
values
:
any
)
=>
{
var
tmp
=
postman
tmp
.
extend
=
values
setPostman
(
tmp
)
}
const
checkInput
=
(
e
:
any
)
=>
{
console
.
log
(
e
)
if
(
e
.
target
.
value
.
length
==
1
)
{
message
.
error
(
"Ower Name Should be limit 2~30!"
,
3
)
}
}
const
tableShowCallback
=
(
values
:
any
)
=>
{
const
tableShowCallback
=
(
values
:
any
)
=>
{
console
.
log
(
"成员信息"
)
console
.
log
(
"成员信息"
)
console
.
log
(
values
)
console
.
log
(
values
)
...
@@ -123,20 +133,23 @@ const UsersDetail = (props:any) => {
...
@@ -123,20 +133,23 @@ const UsersDetail = (props:any) => {
<
div
className=
{
styles
.
base
}
>
<
div
className=
{
styles
.
base
}
>
{
{
memberDetail
==
false
?
<>
memberDetail
==
false
?
<>
{
DataSave
!=
null
?
<>
<
TitleBack
sublist=
{
[
'Status : '
+
user_type_status
[
DataSave
.
enable
],
'Create Time : '
+
timestampToTime
(
DataSave
.
createTime
.
time
)]
}
title=
{
editFlag
?
"Edit Owner Infomation"
:
"Owner Detail"
}
/>
<
TitleBack
sublist=
{
[
'Status : '
+
user_type_status
[
DataSave
.
enable
],
'Create Time : '
+
timestampToTime
(
DataSave
.
createTime
.
time
)]
}
title=
{
editFlag
?
"Edit Owner Infomation"
:
"Owner Detail"
}
/>
<
Form
ref=
{
formRef
}
name=
"basic"
onFinish=
{
onFinish
}
>
<
Form
ref=
{
formRef
}
name=
"basic"
onFinish=
{
onFinish
}
validateMessages=
{
validateMessages
}
>
<
div
className=
{
styles
.
box1
}
>
<
div
className=
{
styles
.
box1
}
>
<
div
className=
{
styles
.
box1item1
}
>
Owner's Name
</
div
>
<
div
className=
{
styles
.
box1item1
}
>
Owner's Name
</
div
>
<
div
className=
{
styles
.
box1item2
}
><
Form
.
Item
name=
"owerName"
><
Input
disabled=
{
!
editFlag
}
placeholder=
"Ower Name"
onBlur=
{
checkInput
}
maxLength=
{
30
}
/></
Form
.
Item
></
div
>
<
div
className=
{
styles
.
box1item2
}
><
Form
.
Item
name=
"owerName"
rules=
{
[{
required
:
true
,
min
:
2
,
max
:
30
}]
}
><
Input
disabled=
{
!
editFlag
}
placeholder=
"Ower Name"
/></
Form
.
Item
></
div
>
</
div
>
</
div
>
<
div
className=
{
styles
.
box4
}
>
<
div
className=
{
styles
.
box4
}
>
<
div
className=
{
styles
.
box4item0
}
>
Contact Details
</
div
>
<
div
className=
{
styles
.
box4item0
}
>
Contact Details
</
div
>
<
div
className=
{
styles
.
box4item1
}
><
Form
.
Item
name=
"owerPhone"
><
Input
disabled=
{
!
editFlag
}
placeholder=
"Phone Number"
/></
Form
.
Item
></
div
>
<
div
className=
{
styles
.
box4item1
}
><
Form
.
Item
name=
"owerPhone"
><
Input
disabled=
{
!
editFlag
}
placeholder=
"Phone Number"
/></
Form
.
Item
></
div
>
<
div
className=
{
styles
.
box4item2
}
><
Form
.
Item
name=
"owerEmail"
><
Input
disabled=
{
!
editFlag
}
placeholder=
"Email"
/></
Form
.
Item
></
div
>
<
div
className=
{
styles
.
box4item2
}
><
Form
.
Item
name=
"owerEmail"
rules=
{
[{
required
:
true
,
type
:
"email"
}]
}
><
Input
disabled=
{
!
editFlag
}
placeholder=
"Email"
/></
Form
.
Item
></
div
>
</
div
>
</
div
>
<
Line
/>
<
Line
/>
<
Spin
spinning=
{
DataSaveLoading
}
tip=
"Loading Detial"
>
{
{
DataSaveDetail
!=
null
?
<
TableShow
data=
{
DataSaveDetail
}
onSubmit=
{
tableShowCallback
}
onChange=
{
deleteUnit
}
deleteDisable=
{
editFlag
}
/>
:
null
DataSaveDetail
!=
null
?
<
TableShow
data=
{
DataSaveDetail
}
onSubmit=
{
tableShowCallback
}
onChange=
{
deleteUnit
}
deleteDisable=
{
editFlag
}
/>
:
null
}
}
...
@@ -146,7 +159,11 @@ const UsersDetail = (props:any) => {
...
@@ -146,7 +159,11 @@ const UsersDetail = (props:any) => {
<
Form
.
Item
><
Button
type=
"primary"
htmlType=
"submit"
>
Submit
</
Button
></
Form
.
Item
>
<
Form
.
Item
><
Button
type=
"primary"
htmlType=
"submit"
>
Submit
</
Button
></
Form
.
Item
>
</>:
null
</>:
null
}
}
</
Spin
>
</
Form
>
</
Form
>
</>:
null
}
</>
:
</>
:
<>
<>
<
div
>
<
div
>
...
@@ -168,18 +185,20 @@ const UsersDetail = (props:any) => {
...
@@ -168,18 +185,20 @@ const UsersDetail = (props:any) => {
<
Button
type=
"danger"
onClick=
{
DeleteMember
}
>
Delete
</
Button
>
<
Button
type=
"danger"
onClick=
{
DeleteMember
}
>
Delete
</
Button
>
</
div
>
</
div
>
</>
</>
}
}
</
div
>
</
div
>
);
);
};
};
function
mapStateToProps
(
state
:
any
)
{
function
mapStateToProps
(
state
:
any
)
{
const
{
DataSave
,
DataSaveDetail
,
Result
}
=
state
.
User
;
const
{
DataSave
,
DataSaveDetail
,
Result
,
returnValue
}
=
state
.
User
;
return
{
return
{
DataSave
,
DataSave
,
DataSaveDetail
,
DataSaveDetail
,
Result
Result
,
returnValue
,
};
};
}
}
export
default
connect
(
mapStateToProps
)(
UsersDetail
);
export
default
connect
(
mapStateToProps
)(
UsersDetail
);
...
...
src/pages/runTest/Template.tsx
View file @
28f9a4cf
...
@@ -33,7 +33,7 @@ const Guard = (props:any) => {
...
@@ -33,7 +33,7 @@ const Guard = (props:any) => {
return
(
return
(
<
div
className=
{
styles
.
base
}
>
<
div
className=
{
styles
.
base
}
>
<
TitleGet
title=
{
"Version 1.1.
2
"
}
/>
<
TitleGet
title=
{
"Version 1.1.
4
"
}
/>
<
p
>
<
p
>
token:
{
page
.
token
}
token:
{
page
.
token
}
name:
{
getCookie
(
"name"
)
}
name:
{
getCookie
(
"name"
)
}
...
...
src/services/tos.ts
View file @
28f9a4cf
...
@@ -101,9 +101,13 @@ const requestList = [
...
@@ -101,9 +101,13 @@ const requestList = [
[
"/tos/home/page/community/houseCard/add"
,
"35 申请住户卡"
],
[
"/tos/home/page/community/houseCard/add"
,
"35 申请住户卡"
],
[
"/tos/property/community/houseCard/query/detail"
,
"36 获取住户卡详情"
],
[
"/tos/property/community/houseCard/query/detail"
,
"36 获取住户卡详情"
],
[
"/tos/property/decorate/record/get/detail"
,
"37 获取装修记录详情"
],
[
"/tos/property/decorate/record/get/detail"
,
"37 获取装修记录详情"
],
[
"/tos/users/save"
,
"38 新建后台信息"
],
[
"/tos/users/save"
,
"38 新建后台信息"
],
[
"/tos/life/community/account/member/del"
,
"39 删除业主成员信息"
],
// {"id":"c06286cfe7b843cb96fdfcb987231123","ownerId":"6b359755a36b49c28241a4620fa6539b"}
]
]
const
params
=
[
const
params
=
[
{
"communityName"
:
""
},
{
"communityName"
:
""
},
{
"communityNum"
:
""
,
"noticTitlel"
:
""
},
{
"communityNum"
:
""
,
"noticTitlel"
:
""
},
...
...
src/utils/method.ts
View file @
28f9a4cf
...
@@ -59,7 +59,7 @@ export const SA = (values: any, module: string, dispatch: any) => { dispatch({ t
...
@@ -59,7 +59,7 @@ export const SA = (values: any, module: string, dispatch: any) => { dispatch({ t
export
const
PAGE
=
(
values
:
any
,
module
:
string
,
dispatch
:
any
)
=>
{
dispatch
({
type
:
module
+
'/PAGE'
,
playload
:
values
})
};
export
const
PAGE
=
(
values
:
any
,
module
:
string
,
dispatch
:
any
)
=>
{
dispatch
({
type
:
module
+
'/PAGE'
,
playload
:
values
})
};
export
const
URL
=
(
values
:
any
,
module
:
string
,
dispatch
:
any
)
=>
{
dispatch
({
type
:
module
+
'/URL'
,
playload
:
values
})
};
export
const
URL
=
(
values
:
any
,
module
:
string
,
dispatch
:
any
)
=>
{
dispatch
({
type
:
module
+
'/URL'
,
playload
:
values
})
};
export
const
URLCLEAR
=
(
module
:
string
,
dispatch
:
any
)
=>
{
dispatch
({
type
:
module
+
'/URLCLEAR'
})
};
export
const
URLCLEAR
=
(
module
:
string
,
dispatch
:
any
)
=>
{
dispatch
({
type
:
module
+
'/URLCLEAR'
})
};
export
const
DataClear
=
(
module
:
string
,
dispatch
:
any
)
=>
{
dispatch
({
type
:
module
+
'/DataClear'
})
};
export
const
ResultClear
=
(
module
:
any
,
dispatch
:
any
)
=>
{
dispatch
({
type
:
module
+
'/ResultClear'
})
};
export
const
ResultClear
=
(
module
:
any
,
dispatch
:
any
)
=>
{
dispatch
({
type
:
module
+
'/ResultClear'
})
};
// const reg = [["url", "categoriesImageUrl"], ["name", "categoriesName"]]
// const reg = [["url", "categoriesImageUrl"], ["name", "categoriesName"]]
// const values = [{ categoriesImageUrl: "http://url", categoriesName: "A9" },{ categoriesImageUrl: "http://url...", categoriesName: "A8" }]
// const values = [{ categoriesImageUrl: "http://url", categoriesName: "A9" },{ categoriesImageUrl: "http://url...", categoriesName: "A8" }]
...
...
src/utils/params.ts
View file @
28f9a4cf
export
const
validateMessages
=
{
export
const
validateMessages
=
{
required
:
'
p
lease enter,it is required!'
,
required
:
'
P
lease enter,it is required!'
,
types
:
{
types
:
{
email
:
'
${label}
is not validate email!'
,
email
:
'
It
is not validate email!'
,
number
:
'${label} is not a validate number!'
,
number
:
'${label} is not a validate number!'
,
string
:
'${label} is not a validate number!'
string
:
'${label} is not a validate number!'
},
},
string
:
{
string
:
{
range
:
'
i
t must be between ${min} and ${max}'
,
range
:
'
I
t must be between ${min} and ${max}'
,
},
},
number
:
{
number
:
{
range
:
'${label} must be between ${min} and ${max}'
,
range
:
'${label} must be between ${min} and ${max}'
,
...
...
MrShi
@Shi
mentioned in commit
6199bd32
·
Sep 21, 2020
mentioned in commit
6199bd32
mentioned in commit 6199bd32c6c1b0e95983ba52c7523569ee45eb38
Toggle commit list
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