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
b70a5514
Commit
b70a5514
authored
Nov 30, 2021
by
邓超
Browse files
Options
Browse Files
Download
Plain Diff
fix: 解决冲突提交
parents
e8376731
a6cba482
Pipeline
#39088
skipped with stages
Changes
19
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
3884 additions
and
3538 deletions
+3884
-3538
maintenance.jsx
...ages/platformCenter/bsmanager/maintenance/maintenance.jsx
+220
-223
AddFlowsModal.jsx
...ages/platformCenter/bsmanager/workOrder/AddFlowsModal.jsx
+422
-391
AddModal.jsx
src/pages/platformCenter/bsmanager/workOrder/AddModal.jsx
+0
-0
ChangeAddFlows.jsx
...ges/platformCenter/bsmanager/workOrder/ChangeAddFlows.jsx
+243
-180
changeAdd.jsx
src/pages/platformCenter/bsmanager/workOrder/changeAdd.jsx
+460
-320
incident.jsx
src/pages/platformCenter/bsmanager/workOrder/incident.jsx
+561
-552
incident.less
src/pages/platformCenter/bsmanager/workOrder/incident.less
+265
-237
incidentFlow.jsx
...pages/platformCenter/bsmanager/workOrder/incidentFlow.jsx
+192
-177
ProjectManage.jsx
...tformCenter/messageManage/projectManage/ProjectManage.jsx
+397
-352
TemplateManage.jsx
...ormCenter/messageManage/templateManage/TemplateManage.jsx
+429
-409
standingBook.less
src/pages/platformCenter/standingBook/standingBook.less
+300
-297
index.js
src/pages/platformCenter/videoManager/index.js
+4
-1
siteManage.less
src/pages/userCenter/siteManageV2/siteManage.less
+32
-37
EditOrgModal.jsx
src/pages/userCenter/userManage/EditOrgModal.jsx
+2
-2
UserManage.js
src/pages/userCenter/userManage/UserManage.js
+68
-74
UserManage.less
src/pages/userCenter/userManage/UserManage.less
+282
-284
webMenu.jsx
src/pages/webConfig/menuconfig/webMenu.jsx
+4
-0
config.js
src/routes/config.js
+1
-0
api.js
src/services/userCenter/userManage/api.js
+2
-2
No files found.
src/pages/platformCenter/bsmanager/maintenance/maintenance.jsx
View file @
b70a5514
/* eslint-disable react-hooks/rules-of-hooks */
/* eslint-disable camelcase */
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
styles
from
'./maintenance.less'
import
{
Space
,
Table
,
Popconfirm
,
Tooltip
,
Button
,
notification
}
from
'antd'
;
import
{
Space
,
Table
,
Popconfirm
,
Tooltip
,
Button
,
notification
}
from
'antd'
;
import
{
CM_XWBPlan_DataList
,
CM_XWBPlan_RemovePlan
}
from
'@/services/maintenance/api'
;
import
{
EditTwoTone
,
DeleteOutlined
,
PlusOutlined
}
from
'@ant-design/icons'
;
import
AddModal
from
'./AddModal'
CM_XWBPlan_DataList
,
CM_XWBPlan_RemovePlan
,
}
from
'@/services/maintenance/api'
;
import
{
EditTwoTone
,
DeleteOutlined
,
PlusOutlined
}
from
'@ant-design/icons'
;
import
styles
from
'./maintenance.less'
;
import
AddModal
from
'./AddModal'
;
const
maintenance
=
()
=>
{
const
[
addVisible
,
setAddVisible
]
=
useState
(
false
)
const
[
type
,
setType
]
=
useState
(
''
)
const
[
formObj
,
setFormObj
]
=
useState
(
''
)
const
[
treeLoading
,
setTreeLoading
]
=
useState
(
false
);
const
[
flag
,
setFlag
]
=
useState
(
0
);
const
[
tableData
,
setTableData
]
=
useState
([])
const
[
addVisible
,
setAddVisible
]
=
useState
(
false
);
const
[
type
,
setType
]
=
useState
(
''
);
const
[
formObj
,
setFormObj
]
=
useState
(
''
);
const
[
treeLoading
,
setTreeLoading
]
=
useState
(
false
);
const
[
flag
,
setFlag
]
=
useState
(
0
);
const
[
tableData
,
setTableData
]
=
useState
([]);
const
columns
=
[
{
title
:
'业务名称'
,
dataIndex
:
'businessName'
,
key
:
'businessName'
,
width
:
100
,
align
:
'center'
,
},
{
title
:
'业务类型'
,
dataIndex
:
'businessType'
,
key
:
'businessType'
,
width
:
100
,
ellipsis
:
true
,
align
:
'center'
,
},
{
title
:
'执行周期'
,
dataIndex
:
'docycle'
,
key
:
'docycle'
,
width
:
100
,
align
:
'center'
,
},
{
title
:
'台账名称'
,
dataIndex
:
'accountName'
,
key
:
'accountName'
,
width
:
200
,
ellipsis
:
true
,
align
:
'center'
,
},
{
title
:
'反馈名称'
,
dataIndex
:
'feedbackName'
,
key
:
'feedbackName'
,
width
:
200
,
align
:
'center'
,
},
{
title
:
'台账过滤条件'
,
dataIndex
:
'filterCondition'
,
key
:
'filterCondition'
,
width
:
200
,
ellipsis
:
true
,
align
:
'center'
,
},
{
title
:
'是否送审'
,
dataIndex
:
'isSubmit'
,
key
:
'isSubmit'
,
width
:
100
,
align
:
'center'
,
},
{
title
:
'执行角色'
,
dataIndex
:
'doRole'
,
key
:
'doRole'
,
width
:
200
,
ellipsis
:
true
,
align
:
'center'
,
},
{
title
:
'预生成天数'
,
dataIndex
:
'produceDays'
,
key
:
'produceDays'
,
width
:
100
,
align
:
'center'
,
},
{
title
:
'在线任务量'
,
dataIndex
:
'onLines'
,
key
:
'onLines'
,
width
:
100
,
ellipsis
:
true
,
align
:
'center'
,
},
{
title
:
'启停'
,
dataIndex
:
'doNot'
,
key
:
'doNot'
,
width
:
100
,
align
:
'center'
,
},
{
title
:
'操作'
,
ellipsis
:
true
,
key
:
'action'
,
align
:
'center'
,
render
:
(
text
,
record
)
=>
(
<
Space
>
<
Tooltip
title=
"修改"
>
<
EditTwoTone
onClick=
{
()
=>
editEventType
(
record
)
}
style=
{
{
fontSize
:
'16px'
}
}
/>
</
Tooltip
>
<
Tooltip
title=
"删除"
>
<
Popconfirm
placement=
"bottomRight"
title=
{
<
p
>
是否确认删除?
</
p
>
}
okText=
"确认"
cancelText=
"取消"
onConfirm=
{
()
=>
deleteEventType
(
record
)
}
>
<
DeleteOutlined
style=
{
{
fontSize
:
'16px'
,
color
:
'#e86060'
}
}
/>
</
Popconfirm
>
</
Tooltip
>
</
Space
>
),
},
]
const
columns
=
[
{
title
:
'业务名称'
,
dataIndex
:
'businessName'
,
key
:
'businessName'
,
width
:
100
,
align
:
'center'
,
},
{
title
:
'业务类型'
,
dataIndex
:
'businessType'
,
key
:
'businessType'
,
width
:
100
,
ellipsis
:
true
,
align
:
'center'
,
},
{
title
:
'执行周期'
,
dataIndex
:
'docycle'
,
key
:
'docycle'
,
width
:
100
,
align
:
'center'
,
},
{
title
:
'台账名称'
,
dataIndex
:
'accountName'
,
key
:
'accountName'
,
width
:
200
,
ellipsis
:
true
,
align
:
'center'
,
},
{
title
:
'反馈名称'
,
dataIndex
:
'feedbackName'
,
key
:
'feedbackName'
,
width
:
200
,
align
:
'center'
,
},
{
title
:
'台账过滤条件'
,
dataIndex
:
'filterCondition'
,
key
:
'filterCondition'
,
width
:
200
,
ellipsis
:
true
,
align
:
'center'
,
},
{
title
:
'是否送审'
,
dataIndex
:
'isSubmit'
,
key
:
'isSubmit'
,
width
:
100
,
align
:
'center'
,
},
{
title
:
'执行角色'
,
dataIndex
:
'doRole'
,
key
:
'doRole'
,
width
:
200
,
ellipsis
:
true
,
align
:
'center'
,
},
{
title
:
'预生成天数'
,
dataIndex
:
'produceDays'
,
key
:
'produceDays'
,
width
:
100
,
align
:
'center'
,
},
{
title
:
'在线任务量'
,
dataIndex
:
'onLines'
,
key
:
'onLines'
,
width
:
100
,
ellipsis
:
true
,
align
:
'center'
,
},
{
title
:
'启停'
,
dataIndex
:
'doNot'
,
key
:
'doNot'
,
width
:
100
,
align
:
'center'
,
},
{
title
:
'操作'
,
ellipsis
:
true
,
key
:
'action'
,
align
:
'center'
,
render
:
(
text
,
record
)
=>
(
<
Space
>
<
Tooltip
title=
"修改"
>
<
EditTwoTone
onClick=
{
()
=>
editEventType
(
record
)
}
style=
{
{
fontSize
:
'16px'
}
}
/>
</
Tooltip
>
<
Tooltip
title=
"删除"
>
<
Popconfirm
placement=
"bottomRight"
title=
{
<
p
>
是否确认删除?
</
p
>
}
okText=
"确认"
cancelText=
"取消"
onConfirm=
{
()
=>
deleteEventType
(
record
)
}
>
<
DeleteOutlined
style=
{
{
fontSize
:
'16px'
,
color
:
'#e86060'
}
}
/>
</
Popconfirm
>
</
Tooltip
>
</
Space
>
),
},
];
useEffect
(()
=>
{
setTreeLoading
(
true
);
CM_XWBPlan_DataList
().
then
(
res
=>
{
setTreeLoading
(
false
);
if
(
res
.
msg
==
'Ok'
)
{
setTableData
(
res
.
data
)
}
})
},[
flag
])
useEffect
(()
=>
{
setTreeLoading
(
true
);
CM_XWBPlan_DataList
().
then
(
res
=>
{
setTreeLoading
(
false
);
if
(
res
.
msg
===
'Ok'
)
{
setTableData
(
res
.
data
);
}
});
},
[
flag
]);
const
add
=
()
=>
{
setAddVisible
(
true
)
setType
(
'add'
)
}
const
editEventType
=
record
=>
{
setAddVisible
(
true
)
setType
(
'edit'
)
setFormObj
(
record
);
}
const
deleteEventType
=
record
=>
{
CM_XWBPlan_RemovePlan
({
planId
:
record
.
id
}).
then
(
res
=>
{
if
(
res
.
msg
===
''
)
{
notification
.
success
({
message
:
'提示'
,
duration
:
3
,
description
:
'删除成功'
,
});
setFlag
(
flag
+
1
)
}
else
{
notification
.
error
({
message
:
'提示'
,
duration
:
3
,
description
:
res
.
msg
,
});
}
})
}
const
onSubmit
=
()
=>
{
setAddVisible
(
false
)
setFlag
(
flag
+
1
)
}
const
add
=
()
=>
{
setAddVisible
(
true
);
setType
(
'add'
);
};
const
editEventType
=
record
=>
{
setAddVisible
(
true
);
setType
(
'edit'
);
setFormObj
(
record
);
};
const
deleteEventType
=
record
=>
{
CM_XWBPlan_RemovePlan
({
planId
:
record
.
id
}).
then
(
res
=>
{
if
(
res
.
msg
===
''
)
{
notification
.
success
({
message
:
'提示'
,
duration
:
3
,
description
:
'删除成功'
,
});
setFlag
(
flag
+
1
);
}
else
{
notification
.
error
({
message
:
'提示'
,
duration
:
3
,
description
:
res
.
msg
,
});
}
});
};
const
onSubmit
=
()
=>
{
setAddVisible
(
false
);
setFlag
(
flag
+
1
);
};
return
(
<
div
className=
{
styles
.
maintenanceContainer
}
>
<
div
className=
{
styles
.
contentContainers
}
>
<
div
style=
{
{
height
:
'50px'
,
backgroundColor
:
'white'
}
}
>
<
span
style=
{
{
float
:
'right'
,
marginRight
:
'10px'
}
}
>
<
Button
icon=
{
<
PlusOutlined
className=
{
styles
.
icon
}
/>
}
onClick=
{
add
}
style=
{
{
marginLeft
:
'30px'
,
verticalAlign
:
'middle'
,
marginTop
:
'10px'
}
}
>
添加
</
Button
>
</
span
>
</
div
>
<
Table
// rowClassName={setRowClassName}
size=
"small"
rowKey=
'ID'
bordered
loading=
{
treeLoading
}
onRow=
{
record
=>
{
return
{
onDoubleClick
:
event
=>
{
event
.
stopPropagation
();
editEventType
(
record
)
},
//双击
};
}
}
columns=
{
columns
}
dataSource=
{
tableData
}
scroll=
{
{
y
:
'calc(100vh - 215px)'
}
}
pagination=
{
{
showTotal
:
(
total
,
range
)
=>
`第${range[0]}-${range[1]} 条/共 ${total} 条`
,
pageSizeOptions
:
[
10
,
20
,
50
,
100
],
defaultPageSize
:
20
,
showQuickJumper
:
true
,
showSizeChanger
:
true
,
}
}
/>
{
/* 添加事件 */
}
<
AddModal
visible=
{
addVisible
}
type=
{
type
}
onClose=
{
()
=>
setAddVisible
(
false
)
}
callBackSubmit=
{
onSubmit
}
formObj=
{
formObj
}
placement=
"right"
/>
</
div
>
return
(
<
div
className=
{
styles
.
maintenanceContainer
}
>
<
div
className=
{
styles
.
contentContainers
}
>
<
div
style=
{
{
height
:
'50px'
,
backgroundColor
:
'white'
}
}
>
<
span
style=
{
{
float
:
'right'
,
marginRight
:
'10px'
}
}
>
<
Button
icon=
{
<
PlusOutlined
className=
{
styles
.
icon
}
/>
}
onClick=
{
add
}
style=
{
{
marginLeft
:
'30px'
,
verticalAlign
:
'middle'
,
marginTop
:
'10px'
,
}
}
>
添加
</
Button
>
</
span
>
</
div
>
)
<
Table
// rowClassName={setRowClassName}
size=
"small"
rowKey=
"ID"
bordered
loading=
{
treeLoading
}
onRow=
{
record
=>
({
onDoubleClick
:
event
=>
{
event
.
stopPropagation
();
editEventType
(
record
);
},
// 双击
})
}
columns=
{
columns
}
dataSource=
{
tableData
}
scroll=
{
{
y
:
'calc(100vh - 215px)'
,
x
:
'max-content'
}
}
pagination=
{
{
showTotal
:
(
total
,
range
)
=>
`第${range[0]}-${range[1]} 条/共 ${total} 条`
,
pageSizeOptions
:
[
10
,
20
,
50
,
100
],
defaultPageSize
:
20
,
showQuickJumper
:
true
,
showSizeChanger
:
true
,
}
}
/>
{
/* 添加事件 */
}
<
AddModal
visible=
{
addVisible
}
type=
{
type
}
onClose=
{
()
=>
setAddVisible
(
false
)
}
callBackSubmit=
{
onSubmit
}
formObj=
{
formObj
}
placement=
"right"
/>
</
div
>
</
div
>
);
};
export
default
maintenance
\ No newline at end of file
export
default
maintenance
;
src/pages/platformCenter/bsmanager/workOrder/AddFlowsModal.jsx
View file @
b70a5514
/* eslint-disable indent */
/* eslint-disable react/jsx-no-duplicate-props */
/* eslint-disable no-shadow */
/* eslint-disable no-undef */
/* eslint-disable eqeqeq */
/* eslint-disable array-callback-return */
/* eslint-disable guard-for-in */
/* eslint-disable no-restricted-syntax */
/* eslint-disable camelcase */
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
{
Modal
,
Form
,
Input
,
notification
,
message
,
Row
,
Col
,
Select
,
Drawer
,
Space
,
Button
}
from
'antd'
;
import
{
Modal
,
Form
,
Input
,
notification
,
message
,
Row
,
Col
,
Select
,
Drawer
,
Space
,
Button
,
}
from
'antd'
;
import
{
PlusOutlined
}
from
'@ant-design/icons'
;
import
ChangeAddFlows
from
'./ChangeAddFlows'
import
{
CM_Event_ReloadFlows
,
CM_Event_LoadDepartmentAndRoles
,
CM_Event_AddEvenFlow
,
CM_Event_EditEvenFlow
}
from
'@/services/standingBook/api'
;
import
ChangeAddFlows
from
'./ChangeAddFlows'
;
import
{
CM_Event_ReloadFlows
,
CM_Event_LoadDepartmentAndRoles
,
CM_Event_AddEvenFlow
,
CM_Event_EditEvenFlow
,
}
from
'@/services/standingBook/api'
;
import
styles
from
'./incident.less'
;
const
{
Option
}
=
Select
;
const
AddFlowsModal
=
props
=>
{
const
{
callBackSubmit
=
()
=>
{
},
type
,
visible
,
onClose
,
formObj
,
obj
,
maxLength
,
record
}
=
props
;
const
[
form
]
=
Form
.
useForm
();
const
{
Item
}
=
Form
;
const
{
callBackSubmit
=
()
=>
{},
type
,
visible
,
onClose
,
formObj
,
obj
,
maxLength
,
record
,
}
=
props
;
const
[
form
]
=
Form
.
useForm
();
const
{
Item
}
=
Form
;
const
[
filed1
,
setFiled1
]
=
useState
({});
// 传给子组件列表数据
const
[
standingTable
,
setStandingTable
]
=
useState
([]);
const
[
visible1
,
setVisible1
]
=
useState
(
false
)
const
[
pickItem
,
setPickItem
]
=
useState
(
''
)
const
[
checkedList1
,
setCheckedList1
]
=
useState
([])
const
[
nu1
,
setNu1
]
=
useState
([])
const
[
inputValue
,
setInputValue
]
=
useState
({
Roles
:
''
});
const
[
selectValue
,
setSelectValue
]
=
useState
(
''
)
const
[
characterValue
,
setCharacterValue
]
=
useState
(
''
)
const
[
Order
,
setOrder
]
=
useState
(
''
);
// 弹窗类型
const
[
strr
,
setStrr
]
=
useState
(
''
)
const
[
filed1
,
setFiled1
]
=
useState
({});
// 传给子组件列表数据
const
[
standingTable
,
setStandingTable
]
=
useState
([]);
const
[
visible1
,
setVisible1
]
=
useState
(
false
);
const
[
pickItem
,
setPickItem
]
=
useState
(
''
);
const
[
checkedList1
,
setCheckedList1
]
=
useState
([]);
const
[
nu1
,
setNu1
]
=
useState
([]);
const
[
inputValue
,
setInputValue
]
=
useState
({
Roles
:
''
});
const
[
selectValue
,
setSelectValue
]
=
useState
(
''
);
const
[
characterValue
,
setCharacterValue
]
=
useState
(
''
);
const
[
Order
,
setOrder
]
=
useState
(
''
);
// 弹窗类型
const
[
strr
,
setStrr
]
=
useState
(
''
);
useEffect
(()
=>
{
console
.
log
(
formObj
)
getRole
()
console
.
log
(
obj
)
CM_Event_ReloadFlows
({
eventTypeId
:
obj
}).
then
(
res
=>
{
if
(
res
.
msg
===
'Ok'
)
{
console
.
log
(
res
.
data
)
let
arr
=
formateArrDataA
(
res
.
data
,
'System'
)
let
newArr
=
[]
Object
.
keys
(
arr
).
map
((
item
,
index
)
=>
{
newArr
.
push
(
item
)
})
console
.
log
(
newArr
)
setStandingTable
(
newArr
);
}
})
if
(
type
===
'add'
)
{
setInputValue
({
Roles
:
''
})
setFiled1
({})
form
.
resetFields
();
}
else
if
(
type
===
'edit'
)
{
setStrr
(
record
.
FlowRoles
)
console
.
log
(
record
)
setInputValue
({
Roles
:
record
.
FlowRoles
})
setSelectValue
(
record
.
FlowName
)
console
.
log
(
selectValue
)
}
},
[
visible
])
const
formateArrDataA
=
(
initialArr
,
name
)
=>
{
// 判定传参是否符合规则
if
(
!
(
initialArr
instanceof
Array
))
{
return
'请传入正确格式的数组'
}
if
(
!
name
)
{
return
'请传入对象属性'
}
//先获取一下这个数组中有多少个"name"
let
nameArr
=
[]
for
(
let
i
in
initialArr
)
{
if
(
nameArr
.
indexOf
(
initialArr
[
i
][
`
${
name
}
`
])
===
-
1
)
{
nameArr
.
push
(
initialArr
[
i
][
`
${
name
}
`
])
}
}
//新建一个包含多个list的结果对象
let
tempObj
=
{}
// 根据不同的"name"生成多个数组
for
(
let
k
in
nameArr
)
{
for
(
let
j
in
initialArr
)
{
if
(
initialArr
[
j
][
`
${
name
}
`
]
==
nameArr
[
k
])
{
// 每次外循环时新建一个对应"name"的数组, 内循环时当前数组不变
tempObj
[
nameArr
[
k
]]
=
tempObj
[
nameArr
[
k
]]
||
[]
tempObj
[
nameArr
[
k
]].
push
(
initialArr
[
j
])
}
}
}
for
(
let
keys
in
tempObj
)
{
let
arr
=
[]
tempObj
[
keys
].
map
((
item
,
index
)
=>
{
tempObj
[
keys
]
=
arr
;
item
.
key
=
index
arr
.
push
(
item
)
})
useEffect
(()
=>
{
console
.
log
(
formObj
);
getRole
();
console
.
log
(
obj
);
CM_Event_ReloadFlows
({
eventTypeId
:
obj
}).
then
(
res
=>
{
if
(
res
.
msg
===
'Ok'
)
{
console
.
log
(
res
.
data
);
let
arr
=
formateArrDataA
(
res
.
data
,
'System'
);
let
newArr
=
[];
Object
.
keys
(
arr
).
map
((
item
,
index
)
=>
{
newArr
.
push
(
item
);
});
console
.
log
(
newArr
);
setStandingTable
(
newArr
);
}
});
if
(
type
===
'add'
)
{
setInputValue
({
Roles
:
''
});
setFiled1
({});
form
.
resetFields
();
}
else
if
(
type
===
'edit'
)
{
setStrr
(
record
.
FlowRoles
);
console
.
log
(
record
);
setInputValue
({
Roles
:
record
.
FlowRoles
,
});
setSelectValue
(
record
.
FlowName
);
console
.
log
(
selectValue
);
}
},
[
visible
]);
const
formateArrDataA
=
(
initialArr
,
name
)
=>
{
// 判定传参是否符合规则
if
(
!
(
initialArr
instanceof
Array
))
{
return
'请传入正确格式的数组'
;
}
if
(
!
name
)
{
return
'请传入对象属性'
;
}
// 先获取一下这个数组中有多少个"name"
let
nameArr
=
[];
for
(
let
i
in
initialArr
)
{
if
(
nameArr
.
indexOf
(
initialArr
[
i
][
`
${
name
}
`
])
===
-
1
)
{
nameArr
.
push
(
initialArr
[
i
][
`
${
name
}
`
]);
}
}
// 新建一个包含多个list的结果对象
let
tempObj
=
{};
// 根据不同的"name"生成多个数组
for
(
let
k
in
nameArr
)
{
for
(
let
j
in
initialArr
)
{
if
(
initialArr
[
j
][
`
${
name
}
`
]
==
nameArr
[
k
])
{
// 每次外循环时新建一个对应"name"的数组, 内循环时当前数组不变
tempObj
[
nameArr
[
k
]]
=
tempObj
[
nameArr
[
k
]]
||
[];
tempObj
[
nameArr
[
k
]].
push
(
initialArr
[
j
]);
}
return
tempObj
}
}
const
formateArrDataA1
=
(
initialArr
,
name
)
=>
{
let
aa
=
[]
let
a1
=
[]
let
a2
let
a3
=
[]
initialArr
.
map
(
i
=>
{
// console.log(i.groupType)
a2
=
i
.
groupType
// console.log(a2)
// console.log(i.root)
a1
=
i
.
root
a1
.
map
(
j
=>
{
j
.
group
=
a2
// console.log(j)
})
aa
.
push
(
i
.
root
)
})
// console.log(aa)
aa
.
map
(
p
=>
{
// console.log(p)
p
.
map
(
o
=>
{
// console.log(o)
a3
.
push
(
o
)
})
})
console
.
log
(
a3
)
for
(
let
keys
in
tempObj
)
{
let
arr
=
[];
tempObj
[
keys
].
map
((
item
,
index
)
=>
{
tempObj
[
keys
]
=
arr
;
item
.
key
=
index
;
arr
.
push
(
item
);
});
}
return
tempObj
;
};
const
formateArrDataA1
=
(
initialArr
,
name
)
=>
{
let
aa
=
[];
let
a1
=
[];
let
a2
;
let
a3
=
[];
initialArr
.
map
(
i
=>
{
// console.log(i.groupType)
a2
=
i
.
groupType
;
// console.log(a2)
// console.log(i.root)
a1
=
i
.
root
;
a1
.
map
(
j
=>
{
j
.
group
=
a2
;
// console.log(j)
});
aa
.
push
(
i
.
root
);
});
// console.log(aa)
aa
.
map
(
p
=>
{
// console.log(p)
p
.
map
(
o
=>
{
// console.log(o)
a3
.
push
(
o
);
});
});
console
.
log
(
a3
);
// 判定传参是否符合规则
if
(
!
(
a3
instanceof
Array
))
{
return
'请传入正确格式的数组'
}
if
(
!
name
)
{
return
'请传入对象属性'
}
//先获取一下这个数组中有多少个"name"
let
nameArr
=
[]
a3
.
map
(
i
=>
{
if
(
nameArr
.
indexOf
(
i
.
group
)
===
-
1
)
{
nameArr
.
push
(
i
.
group
)
}
})
console
.
log
(
nameArr
)
//新建一个包含多个list的结果对象
let
tempObj
=
{}
// 根据不同的"name"生成多个数组
for
(
let
k
in
nameArr
)
{
for
(
let
j
in
a3
)
{
if
(
a3
[
j
].
group
==
nameArr
[
k
])
{
// 每次外循环时新建一个对应"name"的数组, 内循环时当前数组不变
tempObj
[
nameArr
[
k
]]
=
tempObj
[
nameArr
[
k
]]
||
[]
tempObj
[
nameArr
[
k
]].
push
(
a3
[
j
])
}
}
}
console
.
log
(
tempObj
);
for
(
let
key
in
tempObj
)
{
let
arr
=
[]
tempObj
[
key
].
map
(
item
=>
{
tempObj
[
key
]
=
arr
;
arr
.
push
(
item
.
Name
)
})
}
return
tempObj
// 判定传参是否符合规则
if
(
!
(
a3
instanceof
Array
))
{
return
'请传入正确格式的数组'
;
}
const
onSumbit
=
()
=>
{
callBackSubmit
();
// setLoading(true);
let
aa
=
form
.
getFieldsValue
().
FlowName
console
.
log
(
aa
)
console
.
log
(
inputValue
)
console
.
log
(
strr
)
if
(
type
==
'add'
)
{
let
index
=
aa
.
lastIndexOf
(
"
\
\"
);
aa = aa.substring(index + 1, aa.length);
CM_Event_AddEvenFlow({
eventTypeId: formObj.ID,
flowName: aa,
roles: inputValue.Roles,
order: maxLength,
})
.then(res => {
// setLoading(false);
if (res.msg === 'Ok') {
form.resetFields();
callBackSubmit();
notification.success({
message: '提示',
duration: 3,
description: '新增成功',
});
} else {
notification.error({
message: '提示',
duration: 3,
description: res.msg,
});
}
})
.catch(error => {
notification.error({
message: '提示',
duration: 3,
description: '新增失败',
});
// setLoading(false);
});
}
if (type == 'edit') {
CM_Event_EditEvenFlow({
eventTypeId: formObj.ID,
eventFlowId: record.ID,
roles: inputValue.Roles
})
.then(res => {
// setLoading(false);
if (res.msg === '') {
form.resetFields();
callBackSubmit();
notification.success({
message: '提示',
duration: 3,
description: '编辑成功',
});
} else {
notification.error({
message: '提示',
duration: 3,
description: res.msg,
});
}
})
.catch(error => {
notification.error({
message: '提示',
duration: 3,
description: '编辑失败',
});
setLoading(false);
});
if
(
!
name
)
{
return
'请传入对象属性'
;
}
// 先获取一下这个数组中有多少个"name"
let
nameArr
=
[];
a3
.
map
(
i
=>
{
if
(
nameArr
.
indexOf
(
i
.
group
)
===
-
1
)
{
nameArr
.
push
(
i
.
group
);
}
});
console
.
log
(
nameArr
);
// 新建一个包含多个list的结果对象
let
tempObj
=
{};
// 根据不同的"name"生成多个数组
for
(
let
k
in
nameArr
)
{
for
(
let
j
in
a3
)
{
if
(
a3
[
j
].
group
==
nameArr
[
k
])
{
// 每次外循环时新建一个对应"name"的数组, 内循环时当前数组不变
tempObj
[
nameArr
[
k
]]
=
tempObj
[
nameArr
[
k
]]
||
[];
tempObj
[
nameArr
[
k
]].
push
(
a3
[
j
]);
}
};
const getRole = () => {
CM_Event_LoadDepartmentAndRoles().then(res => {
if (res.msg === 'Ok') {
setNu1(res.data)
setFiled1(formateArrDataA1(res.data, 'groupType'))
console.log(res.data)
}
})
}
}
const changeText = (e, type) => {
let inputText = { ...inputValue }
inputText[type] = e.target.value
setInputValue(inputText)
console
.
log
(
tempObj
);
for
(
let
key
in
tempObj
)
{
let
arr
=
[];
tempObj
[
key
].
map
(
item
=>
{
tempObj
[
key
]
=
arr
;
arr
.
push
(
item
.
Name
);
});
}
const pickFiled1 = (fileds) => {
// setTypes('app')
let pp = formateArrDataA1(nu1, 'group')
let ab = inputValue[fileds].split(',')
console.log(pp)
let arr = Object.keys(pp)
let b = []
let a = []
arr.map((item, index) => {
pp[item].map((i, j) => {
b.push(i)
})
return
tempObj
;
};
const
onSumbit
=
()
=>
{
callBackSubmit
();
// setLoading(true);
let
aa
=
form
.
getFieldsValue
().
FlowName
;
console
.
log
(
aa
);
console
.
log
(
inputValue
);
console
.
log
(
strr
);
if
(
type
==
'add'
)
{
let
index
=
aa
.
lastIndexOf
(
'
\
\'
);
aa = aa.substring(index + 1, aa.length);
CM_Event_AddEvenFlow({
eventTypeId: formObj.ID,
flowName: aa,
roles: inputValue.Roles,
order: maxLength,
})
.then(res => {
// setLoading(false);
if (res.msg === '
Ok
') {
form.resetFields();
callBackSubmit();
notification.success({
message: '
提示
',
duration: 3,
description: '
新增成功
',
});
} else {
notification.error({
message: '
提示
',
duration: 3,
description: res.msg,
});
}
})
console.log(ab)
ab.map((item, index) => {
if (b.includes(item) == false) {
if(item == ''){
a=[]
}else{
a.push(item)
}
}
})
if(a.length >0){
pp.外部字段 = a
console.log(pp)
arr.push('外部字段')
}
console.log(a)
console.log(pp)
setFiled1(pp)
console.log(fileds)
setCharacterValue(inputValue[fileds])
setCheckedList1(inputValue[fileds].split(','))
setPickItem(fileds)
setVisible1(true)
.catch(error => {
notification.error({
message: '
提示
',
duration: 3,
description: '
新增失败
',
});
// setLoading(false);
});
}
const onOKk = prop => {
let title = prop.title
let selectData = prop.stt
let ff = prop.filed22
let aa = []
let bb = 0
title.map((item, index) => {
console.log(ff[item])
aa=[]
selectData.map((item1, index1) => {
console.log(item1)
if (ff[item].indexOf(item1) != -1) {
aa.push(item1)
}
})
console.log(aa)
if(aa.length == 0){
bb = 1
}
})
console.log(aa)
if (bb == 1) {
if (type == '
edit
') {
CM_Event_EditEvenFlow({
eventTypeId: formObj.ID,
eventFlowId: record.ID,
roles: inputValue.Roles,
})
.then(res => {
// setLoading(false);
if (res.msg === '') {
form.resetFields();
callBackSubmit();
notification.success({
message: '
提示
',
duration: 3,
description: '
编辑成功
',
});
} else {
notification.error({
message: '提示',
description: '权限角色部门必须都选至少一项',
message: '
提示
',
duration: 3,
description: res.msg,
});
}
})
.catch(error => {
notification.error({
message: '
提示
',
duration: 3,
description: '
编辑失败
',
});
setLoading(false);
});
}
};
const getRole = () => {
CM_Event_LoadDepartmentAndRoles().then(res => {
if (res.msg === '
Ok
') {
setNu1(res.data);
setFiled1(formateArrDataA1(res.data, '
groupType
'));
console.log(res.data);
}
});
};
const changeText = (e, type) => {
let inputText = { ...inputValue };
inputText[type] = e.target.value;
setInputValue(inputText);
};
const pickFiled1 = fileds => {
// setTypes('
app
')
let pp = formateArrDataA1(nu1, '
group
');
let ab = inputValue[fileds].split('
,
');
console.log(pp);
let arr = Object.keys(pp);
let b = [];
let a = [];
arr.map((item, index) => {
pp[item].map((i, j) => {
b.push(i);
});
});
console.log(ab);
ab.map((item, index) => {
if (b.includes(item) == false) {
if (item == '') {
a = [];
} else {
setVisible1(false)
let inputText = { ...inputValue }
inputText[prop.pickItem] = prop.str
console.log(prop.str)
console.log(inputText)
setStrr(prop.str)
setCheckedList1(prop.checkedList)
setInputValue(inputText)
a.push(item);
}
}
});
if (a.length > 0) {
pp.外部字段 = a;
console.log(pp);
arr.push('
外部字段
');
}
console.log(a);
console.log(pp);
setFiled1(pp);
console.log(fileds);
setCharacterValue(inputValue[fileds]);
setCheckedList1(inputValue[fileds].split('
,
'));
setPickItem(fileds);
setVisible1(true);
};
const onOKk = prop => {
let { title } = prop;
let selectData = prop.stt;
let ff = prop.filed22;
let aa = [];
let bb = 0;
title.map((item, index) => {
console.log(ff[item]);
aa = [];
selectData.map((item1, index1) => {
console.log(item1);
if (ff[item].indexOf(item1) != -1) {
aa.push(item1);
}
});
console.log(aa);
if (aa.length == 0) {
bb = 1;
}
});
console.log(aa);
if (bb == 1) {
notification.error({
message: '
提示
',
description: '
权限角色部门必须都选至少一项
',
});
} else {
setVisible1(false);
let inputText = { ...inputValue };
inputText[prop.pickItem] = prop.str;
console.log(prop.str);
console.log(inputText);
setStrr(prop.str);
setCheckedList1(prop.checkedList);
setInputValue(inputText);
}
return (
<Drawer
title={type === 'add' ? '添加受理流程' : '编辑受理流程'}
visible={visible}
width='600px'
onClose={onClose}
destroyOnClose
footer={
<Space>
<Button onClick={onSumbit} type="
primary
">
确定
</Button>
</Space>
}
>
<Form form={form} labelCol={{ span: 7 }} style={{ overflowY: 'scroll' }}>
<Row>
<Col span={23}>
{type === 'edit' ?
<>
<Item
label="
受理流程
"
name="
FlowName
"
labelCol={{ span: 4 }}
>
<Select
placeholder="
选择受理流程
"
placeholder={selectValue}
disabled
>
{standingTable ? standingTable.map((item, index) => { return <Option key={index} value={item}>{item}</Option> }) : ''}
</Select>
</Item>
</>
: <>
<Item
label="
受理流程
"
name="
FlowName
"
labelCol={{ span: 4 }}
>
<Select
placeholder="
选择受理流程
"
>
{standingTable ? standingTable.map((item, index) => { return <Option key={index} value={item}>{item}</Option> }) : ''}
</Select>
</Item>
</>
}
</Col>
<Col span={23}>
<Item
label="
受理权限
"
name="
Roles
"
labelCol={{ span: 4 }}
>
<div className={styles.filed_listItem} >
<Input style={{width:'83%'}}placeholder="
请选择受理权限
" onChange={(e) => changeText(e, 'Roles')} value={inputValue.Roles} allowClear />
<Button type="
dashed
" onClick={() => pickFiled1('Roles')} icon={<PlusOutlined style={{marginTop:'5px'}}/>} style={{ marginLeft: '0.5rem', width: '4rem' }} />
</div>
</Item>
</Col>
</Row>
</Form>
<ChangeAddFlows
visible={visible1}
onCancel={() => setVisible1(false)}
callBackSubmit={onOKk}
newCheckedList={checkedList1}
filed1={filed1}
pickItem={pickItem}
characterValue={characterValue}
formObj={formObj}
/>
</Drawer>
)
}
export default AddFlowsModal
\ No newline at end of file
};
return (
<Drawer
title={type === '
add
' ? '
添加受理流程
' : '
编辑受理流程
'}
visible={visible}
width="600px"
onClose={onClose}
destroyOnClose
footer={
<Space>
<Button onClick={onSumbit} type="primary">
确定
</Button>
</Space>
}
>
<Form form={form} labelCol={{ span: 7 }} style={{ overflowY: '
scroll
' }}>
<Row>
<Col span={23}>
{type === '
edit
' ? (
<>
<Item label="受理流程" name="FlowName" labelCol={{ span: 4 }}>
<Select
placeholder="选择受理流程"
placeholder={selectValue}
disabled
>
{standingTable
? standingTable.map((item, index) => (
<Option key={index} value={item}>
{item}
</Option>
))
: ''}
</Select>
</Item>
</>
) : (
<>
<Item label="受理流程" name="FlowName" labelCol={{ span: 4 }}>
<Select placeholder="选择受理流程">
{standingTable
? standingTable.map((item, index) => (
<Option key={index} value={item}>
{item}
</Option>
))
: ''}
</Select>
</Item>
</>
)}
</Col>
<Col span={23}>
<Item label="受理权限" name="Roles" labelCol={{ span: 4 }}>
<div className={styles.filed_listItem}>
<Input
style={{ width: '
83
%
' }}
placeholder="请选择受理权限"
onChange={e => changeText(e, '
Roles
')}
value={inputValue.Roles}
allowClear
/>
<Button
type="dashed"
onClick={() => pickFiled1('
Roles
')}
icon={<PlusOutlined style={{ marginTop: '
5
px
' }} />}
style={{ marginLeft: '
0.5
rem
', width: '
4
rem
' }}
/>
</div>
</Item>
</Col>
</Row>
</Form>
<ChangeAddFlows
visible={visible1}
onCancel={() => setVisible1(false)}
callBackSubmit={onOKk}
newCheckedList={checkedList1}
filed1={filed1}
pickItem={pickItem}
characterValue={characterValue}
formObj={formObj}
/>
</Drawer>
);
};
export default AddFlowsModal;
src/pages/platformCenter/bsmanager/workOrder/AddModal.jsx
View file @
b70a5514
This source diff could not be displayed because it is too large. You can
view the blob
instead.
src/pages/platformCenter/bsmanager/workOrder/ChangeAddFlows.jsx
View file @
b70a5514
/* eslint-disable no-plusplus */
/* eslint-disable array-callback-return */
/* eslint-disable no-unused-expressions */
/* eslint-disable no-shadow */
import
React
,
{
useState
,
useEffect
,
useCallback
,
useRef
}
from
'react'
;
import
{
Form
,
Modal
,
Space
,
Divider
,
Radio
,
Checkbox
,
Button
}
from
'antd'
;
import
styles
from
'./incident.less'
;
import
Sortable
from
'sortablejs'
;
import
styles
from
'./incident.less'
;
const
CheckboxGroup
=
Checkbox
.
Group
;
const
ChangeAddFlows
=
props
=>
{
const
{
callBackSubmit
=
()
=>
{
},
pickItem
,
visible
,
filed1
,
characterValue
,
newCheckedList
}
=
props
;
const
[
loading
,
setLoading
]
=
useState
(
false
);
const
[
value
,
setValue
]
=
useState
(
''
);
const
[
checkValue
,
setCheckValue
]
=
useState
([]);
const
[
form
]
=
Form
.
useForm
();
const
[
title
,
setTitle
]
=
useState
([])
const
{
Item
}
=
Form
;
const
[
checkedList
,
setCheckedList
]
=
useState
([]);
//选中的复选框内容
const
[
indeterminate
,
setIndeterminate
]
=
useState
([]);
const
[
checkAll
,
setCheckAll
]
=
useState
([]);
const
[
selectData
,
setSelectData
]
=
useState
([])
let
objArr
=
[]
const
onChangeList1
=
(
list
,
index
,
title
)
=>
{
const
checkedListArr
=
[...
checkedList
]
checkedListArr
[
index
]
=
list
setCheckedList
(
checkedListArr
);
const
indeterminateArr
=
[...
indeterminate
]
const
checkAllArr
=
[...
checkAll
]
indeterminateArr
[
index
]
=
!!
list
.
length
&&
list
.
length
<
filed1
[
title
].
length
checkAllArr
[
index
]
=
list
.
length
===
filed1
[
title
].
length
setIndeterminate
(
indeterminateArr
)
setCheckAll
(
checkAllArr
);
};
const
onSubmit
=
()
=>
{
console
.
log
(
selectData
.
join
(
","
))
console
.
log
(
pickItem
)
console
.
log
(
checkedList
)
callBackSubmit
({
checkedList
,
str
:
selectData
.
join
(
","
),
pickItem
,
stt
:
selectData
,
title
:
title
,
filed22
:
filed1
});
}
const
onCheckAllChange
=
e
=>
{
const
indeterminateArr
=
[...
indeterminate
]
const
checkAllArr
=
[...
checkAll
]
const
checkedListArr
=
[...
checkedList
]
checkAllArr
[
e
.
target
.
index
]
=
e
.
target
.
checked
indeterminateArr
[
e
.
target
.
index
]
=
false
e
.
target
.
checked
?
checkedListArr
[
e
.
target
.
index
]
=
e
.
target
.
checkvalue
:
checkedListArr
[
e
.
target
.
index
]
=
[]
setCheckedList
(
checkedListArr
);
setIndeterminate
(
indeterminateArr
);
setCheckAll
(
checkAllArr
);
};
useEffect
(()
=>
{
selectAll
()
},
[
checkedList
]);
const
selectAll
=
()
=>
{
objArr
=
[]
checkedList
.
map
(
item
=>
{
objArr
=
objArr
.
concat
(
item
)
})
setSelectData
(
objArr
)
}
const
{
callBackSubmit
=
()
=>
{},
pickItem
,
visible
,
filed1
,
characterValue
,
newCheckedList
,
}
=
props
;
const
[
loading
,
setLoading
]
=
useState
(
false
);
const
[
value
,
setValue
]
=
useState
(
''
);
const
[
checkValue
,
setCheckValue
]
=
useState
([]);
const
[
form
]
=
Form
.
useForm
();
const
[
title
,
setTitle
]
=
useState
([]);
const
{
Item
}
=
Form
;
const
[
checkedList
,
setCheckedList
]
=
useState
([]);
// 选中的复选框内容
const
[
indeterminate
,
setIndeterminate
]
=
useState
([]);
const
[
checkAll
,
setCheckAll
]
=
useState
([]);
const
[
selectData
,
setSelectData
]
=
useState
([]);
let
objArr
=
[];
useEffect
(()
=>
{
console
.
log
(
characterValue
)
console
.
log
(
pickItem
)
console
.
log
(
filed1
)
let
arr
=
Object
.
keys
(
filed1
)
console
.
log
(
arr
,
'arr'
)
setTitle
(
arr
)
let
checkArr
=
[]
let
indeterminateArr
=
[]
let
checkAllArr
=
[]
console
.
log
(
newCheckedList
);
// let b = []
// let a = []
arr
.
map
((
item
,
index
)
=>
{
// filed1[item].map((i, j) => {
// b.push(i)
// })
checkArr
[
index
]
=
[]
newCheckedList
.
map
(
checkItem
=>
{
if
(
filed1
[
item
].
includes
(
checkItem
))
{
checkArr
[
index
].
push
(
checkItem
)
}
})
indeterminateArr
.
push
(
!!
checkArr
[
index
].
length
&&
checkArr
[
index
].
length
<
filed1
[
item
].
length
)
checkAllArr
.
push
(
checkArr
[
index
].
length
===
filed1
[
item
].
length
)
})
// newCheckedList.map((item, index) => {
// if (b.includes(item) == false) {
// if(item == ''){
// a=[]
// }else{
// a.push(item)
// }
// }
// })
// if(a.length >0){
// filed1.外部字段 = a
// console.log(filed1)
// arr.push('外部字段')
// }
// setTitle(arr)
// checkArr.push(a)
console
.
log
(
checkArr
)
setCheckedList
(
checkArr
)
setIndeterminate
(
indeterminateArr
)
setCheckAll
(
checkAllArr
)
let
newArr
=
characterValue
.
length
?
characterValue
.
split
(
","
)
:
[]
setSelectData
(
newArr
)
draftSort
()
const
onChangeList1
=
(
list
,
index
,
title
)
=>
{
const
checkedListArr
=
[...
checkedList
];
checkedListArr
[
index
]
=
list
;
setCheckedList
(
checkedListArr
);
const
indeterminateArr
=
[...
indeterminate
];
const
checkAllArr
=
[...
checkAll
];
indeterminateArr
[
index
]
=
!!
list
.
length
&&
list
.
length
<
filed1
[
title
].
length
;
checkAllArr
[
index
]
=
list
.
length
===
filed1
[
title
].
length
;
setIndeterminate
(
indeterminateArr
);
setCheckAll
(
checkAllArr
);
};
const
onSubmit
=
()
=>
{
console
.
log
(
selectData
.
join
(
','
));
console
.
log
(
pickItem
);
console
.
log
(
checkedList
);
callBackSubmit
({
checkedList
,
str
:
selectData
.
join
(
','
),
pickItem
,
stt
:
selectData
,
title
,
filed22
:
filed1
,
});
};
const
onCheckAllChange
=
e
=>
{
const
indeterminateArr
=
[...
indeterminate
];
const
checkAllArr
=
[...
checkAll
];
const
checkedListArr
=
[...
checkedList
];
checkAllArr
[
e
.
target
.
index
]
=
e
.
target
.
checked
;
indeterminateArr
[
e
.
target
.
index
]
=
false
;
e
.
target
.
checked
?
(
checkedListArr
[
e
.
target
.
index
]
=
e
.
target
.
checkvalue
)
:
(
checkedListArr
[
e
.
target
.
index
]
=
[]);
setCheckedList
(
checkedListArr
);
setIndeterminate
(
indeterminateArr
);
setCheckAll
(
checkAllArr
);
};
useEffect
(()
=>
{
selectAll
();
},
[
checkedList
]);
},
[
visible
]);
const
selectAll
=
()
=>
{
objArr
=
[];
checkedList
.
map
(
item
=>
{
objArr
=
objArr
.
concat
(
item
);
});
setSelectData
(
objArr
);
};
//拖拽初始化及逻辑
const
draftSort
=
()
=>
{
let
el
=
document
.
getElementById
(
'doctor-drag-items'
);
if
(
el
)
{
let
sortable
=
Sortable
.
create
(
el
,
{
animation
:
100
,
//动画参数
onEnd
:
function
(
evt
)
{
//拖拽完毕之后发生,只需关注该事件
let
arr
=
[];
let
len
=
evt
.
from
.
children
.
length
;
for
(
let
i
=
0
;
i
<
len
;
i
++
)
{
arr
.
push
(
evt
.
from
.
children
[
i
].
getAttribute
(
'drag-id'
))
}
setSelectData
(
arr
)
}
});
useEffect
(()
=>
{
console
.
log
(
characterValue
);
console
.
log
(
pickItem
);
console
.
log
(
filed1
);
let
arr
=
Object
.
keys
(
filed1
);
console
.
log
(
arr
,
'arr'
);
setTitle
(
arr
);
let
checkArr
=
[];
let
indeterminateArr
=
[];
let
checkAllArr
=
[];
console
.
log
(
newCheckedList
);
// let b = []
// let a = []
arr
.
map
((
item
,
index
)
=>
{
// filed1[item].map((i, j) => {
// b.push(i)
// })
checkArr
[
index
]
=
[];
newCheckedList
.
map
(
checkItem
=>
{
if
(
filed1
[
item
].
includes
(
checkItem
))
{
checkArr
[
index
].
push
(
checkItem
);
}
});
indeterminateArr
.
push
(
!!
checkArr
[
index
].
length
&&
checkArr
[
index
].
length
<
filed1
[
item
].
length
,
);
checkAllArr
.
push
(
checkArr
[
index
].
length
===
filed1
[
item
].
length
);
});
// newCheckedList.map((item, index) => {
// if (b.includes(item) == false) {
// if(item == ''){
// a=[]
// }else{
// a.push(item)
// }
}
// }
// })
// if(a.length >0){
// filed1.外部字段 = a
// console.log(filed1)
// arr.push('外部字段')
// }
// setTitle(arr)
// checkArr.push(a)
console
.
log
(
checkArr
);
setCheckedList
(
checkArr
);
setIndeterminate
(
indeterminateArr
);
setCheckAll
(
checkAllArr
);
let
newArr
=
characterValue
.
length
?
characterValue
.
split
(
','
)
:
[];
setSelectData
(
newArr
);
draftSort
();
},
[
visible
]);
return
(
<
Modal
title=
'部门或角色'
bodyStyle=
{
{
width
:
'100%'
,
minHeight
:
'100px'
}
}
width=
"700px"
destroyOnClose
centered=
{
true
}
cancelText=
"取消"
okText=
"确认"
{
...
props
}
onOk=
{
()
=>
onSubmit
()
}
forceRender=
{
true
}
getContainer=
{
false
}
>
{
visible
&&
(
<
div
className=
{
styles
.
listCard
}
>
<
div
className=
{
styles
.
cardItem
}
style=
{
{
borderRight
:
'1px solid #99bbe8'
}
}
>
<
Divider
orientation=
"left"
style=
{
{
margin
:
'0 0 10px 0'
,
backgroundColor
:
'#dfe8f6'
}
}
>
待选部门角色站点
</
Divider
>
<
div
className=
{
styles
.
cardContent
}
>
{
title
.
map
((
item
,
index
)
=>
{
return
<
div
className=
{
styles
.
cardItemData
}
key=
{
index
}
>
<
Divider
orientation=
"left"
style=
{
{
margin
:
'0 0 10px 0'
,
color
:
'#15428b'
,
borderTopColor
:
'#99bbe8'
}
}
>
{
item
}
<
Checkbox
indeterminate=
{
indeterminate
[
index
]
}
onChange=
{
onCheckAllChange
}
index=
{
index
}
checkvalue=
{
filed1
[
item
]
}
checked=
{
checkAll
[
index
]
}
>
</
Checkbox
></
Divider
>
<
CheckboxGroup
options=
{
filed1
[
item
]
}
value=
{
checkedList
[
index
]
}
onChange=
{
(
e
)
=>
onChangeList1
(
e
,
index
,
item
)
}
/></
div
>
})
}
</
div
>
</
div
>
<
div
className=
{
styles
.
cardItem
}
>
<
Divider
orientation=
"left"
style=
{
{
margin
:
'0 0 10px 0'
,
backgroundColor
:
'#dfe8f6'
}
}
>
已选列表
</
Divider
>
<
div
className=
{
styles
.
cardContent
}
>
<
div
className=
{
styles
.
doctorTable
}
>
<
table
>
<
thead
>
<
tr
>
<
td
>
字段名
</
td
>
</
tr
>
</
thead
>
<
tbody
id=
'doctor-drag-items'
>
{
selectData
&&
selectData
.
length
>
0
?
selectData
.
map
((
item
,
index
)
=>
{
return
<
tr
drag
-
id=
{
item
}
key=
{
index
}
style=
{
{
cursor
:
'move'
}
}
>
<
td
><
span
title=
{
item
}
>
{
item
}
</
span
></
td
>
</
tr
>
})
:
<
tr
><
td
colSpan=
'10'
style=
{
{
textAlign
:
'center'
}
}
>
暂无数据
</
td
></
tr
>
}
</
tbody
>
</
table
>
</
div
>
// 拖拽初始化及逻辑
const
draftSort
=
()
=>
{
let
el
=
document
.
getElementById
(
'doctor-drag-items'
);
if
(
el
)
{
let
sortable
=
Sortable
.
create
(
el
,
{
animation
:
100
,
// 动画参数
onEnd
(
evt
)
{
// 拖拽完毕之后发生,只需关注该事件
let
arr
=
[];
let
len
=
evt
.
from
.
children
.
length
;
for
(
let
i
=
0
;
i
<
len
;
i
++
)
{
arr
.
push
(
evt
.
from
.
children
[
i
].
getAttribute
(
'drag-id'
));
}
setSelectData
(
arr
);
},
});
}
};
</
div
>
</
div
>
return
(
<
Modal
title=
"部门或角色"
bodyStyle=
{
{
width
:
'100%'
,
minHeight
:
'100px'
}
}
width=
"1400px"
destroyOnClose
centered
cancelText=
"取消"
okText=
"确认"
{
...
props
}
onOk=
{
()
=>
onSubmit
()
}
forceRender
getContainer=
{
false
}
>
{
visible
&&
(
<
div
className=
{
styles
.
listCard1
}
>
<
div
className=
{
styles
.
cardItem1
}
style=
{
{
borderRight
:
'1px solid #99bbe8'
}
}
>
<
Divider
orientation=
"left"
style=
{
{
margin
:
'0 0 10px 0'
,
backgroundColor
:
'#dfe8f6'
}
}
>
待选部门站点角色
</
Divider
>
<
div
className=
{
styles
.
cardContent1
}
>
{
title
.
map
((
item
,
index
)
=>
(
<
div
className=
{
styles
.
cardItemData1
}
key=
{
index
}
>
<
Divider
orientation=
"left"
style=
{
{
margin
:
'0 0 10px 0'
,
color
:
'#15428b'
,
borderTopColor
:
'#99bbe8'
,
}
}
>
{
item
}{
' '
}
<
Checkbox
indeterminate=
{
indeterminate
[
index
]
}
onChange=
{
onCheckAllChange
}
index=
{
index
}
checkvalue=
{
filed1
[
item
]
}
checked=
{
checkAll
[
index
]
}
>
{
' '
}
</
Checkbox
>
</
Divider
>
<
CheckboxGroup
options=
{
filed1
[
item
]
}
value=
{
checkedList
[
index
]
}
onChange=
{
e
=>
onChangeList1
(
e
,
index
,
item
)
}
/>
</
div
>
)
}
</
Modal
>
)
))
}
</
div
>
</
div
>
{
/* <div className={styles.cardItem}>
<Divider
orientation="left"
style={{ margin: '0 0 10px 0', backgroundColor: '#dfe8f6' }}
>
已选列表
</Divider>
<div className={styles.cardContent}>
<div className={styles.doctorTable}>
<table>
<thead>
<tr>
<td>字段名</td>
</tr>
</thead>
<tbody id="doctor-drag-items">
{selectData && selectData.length > 0 ? (
selectData.map((item, index) => (
<tr
drag-id={item}
key={index}
style={{ cursor: 'move' }}
>
<td>
<span title={item}>{item}</span>
</td>
</tr>
))
) : (
<tr>
<td colSpan="10" style={{ textAlign: 'center' }}>
暂无数据
</td>
</tr>
)}
</tbody>
</table>
</div>
</div>
</div> */
}
</
div
>
)
}
</
Modal
>
);
};
export
default
ChangeAddFlows
;
\ No newline at end of file
export
default
ChangeAddFlows
;
src/pages/platformCenter/bsmanager/workOrder/changeAdd.jsx
View file @
b70a5514
/* eslint-disable consistent-return */
/* eslint-disable no-shadow */
/* eslint-disable indent */
/* eslint-disable no-unused-expressions */
/* eslint-disable array-callback-return */
/* eslint-disable eqeqeq */
/* eslint-disable no-plusplus */
import
React
,
{
useState
,
useEffect
,
useCallback
,
useRef
}
from
'react'
;
import
{
Form
,
Modal
,
Divider
,
Checkbox
}
from
'antd'
;
import
styles
from
'./incident.less'
;
import
Sortable
from
'sortablejs'
;
import
styles
from
'./incident.less'
;
const
CheckboxGroup
=
Checkbox
.
Group
;
const
AddModal
=
props
=>
{
const
{
callBackSubmit
=
()
=>
{
},
isType
,
pickItem
,
visible
,
filed
,
filed1
,
characterValue
,
newCheckedList
,
flag
}
=
props
;
const
[
loading
,
setLoading
]
=
useState
(
false
);
const
[
value
,
setValue
]
=
useState
(
''
);
const
[
checkValue
,
setCheckValue
]
=
useState
([]);
const
[
form
]
=
Form
.
useForm
();
const
[
title
,
setTitle
]
=
useState
([])
const
{
Item
}
=
Form
;
const
[
checkedList
,
setCheckedList
]
=
useState
([]);
//选中的复选框内容
const
[
indeterminate
,
setIndeterminate
]
=
useState
([]);
const
[
checkAll
,
setCheckAll
]
=
useState
([]);
const
[
selectData
,
setSelectData
]
=
useState
([])
let
objArr
=
[]
const
onChangeList
=
(
list
,
index
,
title
)
=>
{
const
checkedListArr
=
[...
checkedList
]
checkedListArr
[
index
]
=
list
setCheckedList
(
checkedListArr
);
const
indeterminateArr
=
[...
indeterminate
]
const
checkAllArr
=
[...
checkAll
]
indeterminateArr
[
index
]
=
!!
list
.
length
&&
list
.
length
<
filed
[
title
].
length
checkAllArr
[
index
]
=
list
.
length
===
filed
[
title
].
length
setIndeterminate
(
indeterminateArr
)
setCheckAll
(
checkAllArr
);
};
const
onChangeList1
=
(
list
,
index
,
title
)
=>
{
const
checkedListArr
=
[...
checkedList
]
checkedListArr
[
index
]
=
list
setCheckedList
(
checkedListArr
);
const
indeterminateArr
=
[...
indeterminate
]
const
checkAllArr
=
[...
checkAll
]
indeterminateArr
[
index
]
=
!!
list
.
length
&&
list
.
length
<
filed1
[
title
].
length
checkAllArr
[
index
]
=
list
.
length
===
filed1
[
title
].
length
setIndeterminate
(
indeterminateArr
)
setCheckAll
(
checkAllArr
);
};
const
{
callBackSubmit
=
()
=>
{},
isType
,
pickItem
,
visible
,
filed
,
filed1
,
characterValue
,
newCheckedList
,
flag
,
}
=
props
;
const
[
loading
,
setLoading
]
=
useState
(
false
);
const
[
value
,
setValue
]
=
useState
(
''
);
const
[
checkValue
,
setCheckValue
]
=
useState
([]);
const
[
form
]
=
Form
.
useForm
();
const
[
title
,
setTitle
]
=
useState
([]);
const
{
Item
}
=
Form
;
const
[
checkedList
,
setCheckedList
]
=
useState
([]);
// 选中的复选框内容
const
[
indeterminate
,
setIndeterminate
]
=
useState
([]);
const
[
checkAll
,
setCheckAll
]
=
useState
([]);
const
[
selectData
,
setSelectData
]
=
useState
([]);
let
objArr
=
[];
const
onSubmit
=
()
=>
{
isType
===
'rule'
?
callBackSubmit
(
`
${
value
===
'无'
||
value
===
''
?
''
:
value
+
','
}${
checkValue
.
join
(
','
)}
`
)
:
callBackSubmit
({
checkedList
,
str
:
selectData
.
join
(
","
),
pickItem
,
stt
:
selectData
,
title
:
title
,
filed22
:
filed1
,
isType
:
isType
});
}
const
onCheckAllChange
=
e
=>
{
const
indeterminateArr
=
[...
indeterminate
]
const
checkAllArr
=
[...
checkAll
]
const
checkedListArr
=
[...
checkedList
]
checkAllArr
[
e
.
target
.
index
]
=
e
.
target
.
checked
indeterminateArr
[
e
.
target
.
index
]
=
false
e
.
target
.
checked
?
checkedListArr
[
e
.
target
.
index
]
=
e
.
target
.
checkvalue
:
checkedListArr
[
e
.
target
.
index
]
=
[]
setCheckedList
(
checkedListArr
);
setIndeterminate
(
indeterminateArr
);
setCheckAll
(
checkAllArr
);
};
useEffect
(()
=>
{
console
.
log
(
filed1
)
selectAll
()
},
[
checkedList
]);
const
onChangeList
=
(
list
,
index
,
title
)
=>
{
const
checkedListArr
=
[...
checkedList
];
checkedListArr
[
index
]
=
list
;
setCheckedList
(
checkedListArr
);
const
indeterminateArr
=
[...
indeterminate
];
const
checkAllArr
=
[...
checkAll
];
indeterminateArr
[
index
]
=
!!
list
.
length
&&
list
.
length
<
filed
[
title
].
length
;
checkAllArr
[
index
]
=
list
.
length
===
filed
[
title
].
length
;
setIndeterminate
(
indeterminateArr
);
setCheckAll
(
checkAllArr
);
};
const
onChangeList1
=
(
list
,
index
,
title
)
=>
{
const
checkedListArr
=
[...
checkedList
];
checkedListArr
[
index
]
=
list
;
setCheckedList
(
checkedListArr
);
const
indeterminateArr
=
[...
indeterminate
];
const
checkAllArr
=
[...
checkAll
];
indeterminateArr
[
index
]
=
!!
list
.
length
&&
list
.
length
<
filed1
[
title
].
length
;
checkAllArr
[
index
]
=
list
.
length
===
filed1
[
title
].
length
;
setIndeterminate
(
indeterminateArr
);
setCheckAll
(
checkAllArr
);
};
const
selectAll
=
()
=>
{
objArr
=
[]
checkedList
.
map
(
item
=>
{
objArr
=
objArr
.
concat
(
item
)
})
setSelectData
(
objArr
)
}
const
onSubmit
=
()
=>
{
isType
===
'rule'
?
callBackSubmit
(
`
${
value
===
'无'
||
value
===
''
?
''
:
`
${
value
}
,`
}${
checkValue
.
join
(
','
)}
`
,
)
:
callBackSubmit
({
checkedList
,
str
:
selectData
.
join
(
','
),
pickItem
,
stt
:
selectData
,
title
,
filed22
:
filed1
,
isType
,
});
};
const
onCheckAllChange
=
e
=>
{
const
indeterminateArr
=
[...
indeterminate
];
const
checkAllArr
=
[...
checkAll
];
const
checkedListArr
=
[...
checkedList
];
checkAllArr
[
e
.
target
.
index
]
=
e
.
target
.
checked
;
indeterminateArr
[
e
.
target
.
index
]
=
false
;
e
.
target
.
checked
?
(
checkedListArr
[
e
.
target
.
index
]
=
e
.
target
.
checkvalue
)
:
(
checkedListArr
[
e
.
target
.
index
]
=
[]);
setCheckedList
(
checkedListArr
);
setIndeterminate
(
indeterminateArr
);
setCheckAll
(
checkAllArr
);
};
useEffect
(()
=>
{
console
.
log
(
filed1
);
selectAll
();
},
[
checkedList
]);
useEffect
(()
=>
{
if
(
isType
!=
''
&&
isType
===
'add'
)
{
console
.
log
(
filed
)
let
arr
=
Object
.
keys
(
filed
)
console
.
log
(
arr
,
'arr'
)
setTitle
(
arr
)
let
checkArr
=
[]
let
indeterminateArr
=
[]
let
checkAllArr
=
[]
console
.
log
(
newCheckedList
);
// let b = []
// let a = []
arr
.
map
((
item
,
index
)
=>
{
// filed[item].map((i, j) => {
// b.push(i)
// })
checkArr
[
index
]
=
[]
newCheckedList
.
map
(
checkItem
=>
{
if
(
filed
[
item
].
includes
(
checkItem
))
{
checkArr
[
index
].
push
(
checkItem
)
}
})
indeterminateArr
.
push
(
!!
checkArr
[
index
].
length
&&
checkArr
[
index
].
length
<
filed
[
item
].
length
)
checkAllArr
.
push
(
checkArr
[
index
].
length
===
filed
[
item
].
length
)
})
// newCheckedList.map((item, index) => {
// if (b.includes(item) == false) {
// if(item == ''){
// a=[]
// }else{
// a.push(item)
// }
// }
// })
// if(a.length >0){
// filed.外部字段 = a
// console.log(filed)
// arr.push('外部字段')
// }
// setTitle(arr)
// checkArr.push(a)
setCheckedList
(
checkArr
)
setIndeterminate
(
indeterminateArr
)
setCheckAll
(
checkAllArr
)
console
.
log
(
characterValue
)
let
newArr
=
characterValue
.
length
?
characterValue
.
split
(
","
)
:
[]
console
.
log
(
newArr
)
setSelectData
(
newArr
)
draftSort
()
}
else
if
(
isType
===
'app'
)
{
console
.
log
(
filed1
)
let
arr
=
Object
.
keys
(
filed1
)
console
.
log
(
arr
,
'arr'
)
setTitle
(
arr
)
let
checkArr
=
[]
let
indeterminateArr
=
[]
let
checkAllArr
=
[]
console
.
log
(
newCheckedList
);
// let b = []
// let a = []
arr
.
map
((
item
,
index
)
=>
{
// filed1[item].map((i, j) => {
// b.push(i)
// })
checkArr
[
index
]
=
[]
newCheckedList
.
map
(
checkItem
=>
{
if
(
filed1
[
item
].
includes
(
checkItem
))
{
checkArr
[
index
].
push
(
checkItem
)
}
})
indeterminateArr
.
push
(
!!
checkArr
[
index
].
length
&&
checkArr
[
index
].
length
<
filed1
[
item
].
length
)
checkAllArr
.
push
(
checkArr
[
index
].
length
===
filed1
[
item
].
length
)
})
// newCheckedList.map((item, index) => {
// if (b.includes(item) == false) {
// if(item == ''){
// a=[]
// }else{
// a.push(item)
// }
// }
// })
// if(a.length >0){
// filed1.外部字段 = a
// console.log(filed1)
// arr.push('外部字段')
// }
// setTitle(arr)
// checkArr.push(a)
setCheckedList
(
checkArr
)
setIndeterminate
(
indeterminateArr
)
setCheckAll
(
checkAllArr
)
console
.
log
(
characterValue
)
let
newArr
=
characterValue
.
length
?
characterValue
.
split
(
","
)
:
[]
console
.
log
(
newArr
)
setSelectData
(
newArr
)
draftSort
()
}
const
selectAll
=
()
=>
{
objArr
=
[];
checkedList
.
map
(
item
=>
{
objArr
=
objArr
.
concat
(
item
);
});
setSelectData
(
objArr
);
};
},
[
visible
]);
useEffect
(()
=>
{
if
(
isType
!=
''
&&
isType
===
'add'
)
{
console
.
log
(
filed
);
let
arr
=
Object
.
keys
(
filed
);
console
.
log
(
arr
,
'arr'
);
setTitle
(
arr
);
let
checkArr
=
[];
let
indeterminateArr
=
[];
let
checkAllArr
=
[];
console
.
log
(
newCheckedList
);
// let b = []
// let a = []
arr
.
map
((
item
,
index
)
=>
{
// filed[item].map((i, j) => {
// b.push(i)
// })
checkArr
[
index
]
=
[];
newCheckedList
.
map
(
checkItem
=>
{
if
(
filed
[
item
].
includes
(
checkItem
))
{
checkArr
[
index
].
push
(
checkItem
);
}
});
indeterminateArr
.
push
(
!!
checkArr
[
index
].
length
&&
checkArr
[
index
].
length
<
filed
[
item
].
length
,
);
checkAllArr
.
push
(
checkArr
[
index
].
length
===
filed
[
item
].
length
);
});
// newCheckedList.map((item, index) => {
// if (b.includes(item) == false) {
// if(item == ''){
// a=[]
// }else{
// a.push(item)
// }
//拖拽初始化及逻辑
const
draftSort
=
()
=>
{
let
el
=
document
.
getElementById
(
'doctor-drag-items'
);
if
(
el
)
{
let
sortable
=
Sortable
.
create
(
el
,
{
animation
:
100
,
//动画参数
onEnd
:
function
(
evt
)
{
//拖拽完毕之后发生,只需关注该事件
let
arr
=
[];
let
len
=
evt
.
from
.
children
.
length
;
for
(
let
i
=
0
;
i
<
len
;
i
++
)
{
arr
.
push
(
evt
.
from
.
children
[
i
].
getAttribute
(
'drag-id'
))
}
console
.
log
(
arr
)
setSelectData
(
arr
)
}
});
}
// }
// })
// if(a.length >0){
// filed.外部字段 = a
// console.log(filed)
// arr.push('外部字段')
// }
// setTitle(arr)
// checkArr.push(a)
setCheckedList
(
checkArr
);
setIndeterminate
(
indeterminateArr
);
setCheckAll
(
checkAllArr
);
console
.
log
(
characterValue
);
let
newArr
=
characterValue
.
length
?
characterValue
.
split
(
','
)
:
[];
console
.
log
(
newArr
);
setSelectData
(
newArr
);
draftSort
();
}
else
if
(
isType
===
'app'
)
{
console
.
log
(
filed1
);
let
arr
=
Object
.
keys
(
filed1
);
console
.
log
(
arr
,
'arr'
);
setTitle
(
arr
);
let
checkArr
=
[];
let
indeterminateArr
=
[];
let
checkAllArr
=
[];
console
.
log
(
newCheckedList
);
// let b = []
// let a = []
arr
.
map
((
item
,
index
)
=>
{
// filed1[item].map((i, j) => {
// b.push(i)
// })
checkArr
[
index
]
=
[];
newCheckedList
.
map
(
checkItem
=>
{
if
(
filed1
[
item
].
includes
(
checkItem
))
{
checkArr
[
index
].
push
(
checkItem
);
}
});
indeterminateArr
.
push
(
!!
checkArr
[
index
].
length
&&
checkArr
[
index
].
length
<
filed1
[
item
].
length
,
);
checkAllArr
.
push
(
checkArr
[
index
].
length
===
filed1
[
item
].
length
);
});
// newCheckedList.map((item, index) => {
// if (b.includes(item) == false) {
// if(item == ''){
// a=[]
// }else{
// a.push(item)
// }
// }
// })
// if(a.length >0){
// filed1.外部字段 = a
// console.log(filed1)
// arr.push('外部字段')
// }
// setTitle(arr)
// checkArr.push(a)
setCheckedList
(
checkArr
);
setIndeterminate
(
indeterminateArr
);
setCheckAll
(
checkAllArr
);
console
.
log
(
characterValue
);
let
newArr
=
characterValue
.
length
?
characterValue
.
split
(
','
)
:
[];
console
.
log
(
newArr
);
setSelectData
(
newArr
);
draftSort
();
}
if
(
isType
!=
'app'
)
{
return
(
<
Modal
title=
'字段集选择'
bodyStyle=
{
{
width
:
'100%'
,
minHeight
:
'100px'
}
}
width=
"700px"
destroyOnClose
centered=
{
true
}
cancelText=
"取消"
okText=
"确认"
{
...
props
}
onOk=
{
()
=>
onSubmit
()
}
forceRender=
{
true
}
getContainer=
{
false
}
>
{
visible
&&
(
<
div
className=
{
styles
.
listCard
}
>
<
div
className=
{
styles
.
cardItem
}
style=
{
{
borderRight
:
'1px solid #99bbe8'
}
}
>
<
Divider
orientation=
"left"
style=
{
{
margin
:
'0 0 10px 0'
,
backgroundColor
:
'#dfe8f6'
}
}
>
待选字段列表
</
Divider
>
{
flag
===
0
?
<>
<
div
className=
{
styles
.
cardContent
}
>
<
span
style=
{
{
color
:
'red'
,
fontSize
:
'1rem'
,
marginLeft
:
'25px'
}
}
>
请先选择事件主表
</
span
>
</
div
>
</>
:
<>
{
JSON
.
stringify
(
filed
)
==
"{}"
?
<>
<
div
className=
{
styles
.
cardContent
}
>
<
span
style=
{
{
color
:
'red'
,
fontSize
:
'1rem'
,
marginLeft
:
'25px'
}
}
>
表字段缺失请先配置表/字段
</
span
>
</
div
>
</>
:
<>
<
div
className=
{
styles
.
cardContent
}
>
{
title
.
map
((
item
,
index
)
=>
{
return
<
div
className=
{
styles
.
cardItemData
}
key=
{
index
}
>
<
Divider
orientation=
"left"
style=
{
{
margin
:
'0 0 10px 0'
,
color
:
'#15428b'
,
borderTopColor
:
'#99bbe8'
}
}
><
Checkbox
indeterminate=
{
indeterminate
[
index
]
}
onChange=
{
onCheckAllChange
}
index=
{
index
}
checkvalue=
{
filed
[
item
]
}
checked=
{
checkAll
[
index
]
}
style=
{
{
marginRight
:
'7px'
}
}
></
Checkbox
>
{
item
}
</
Divider
>
<
CheckboxGroup
options=
{
filed
[
item
]
}
value=
{
checkedList
[
index
]
}
onChange=
{
(
e
)
=>
onChangeList
(
e
,
index
,
item
)
}
/>
</
div
>
})
}
</
div
>
</>
}
</>
},
[
visible
]);
}
</
div
>
<
div
className=
{
styles
.
cardItem
}
>
<
Divider
orientation=
"left"
style=
{
{
margin
:
'0 0 10px 0'
,
backgroundColor
:
'#dfe8f6'
}
}
>
已选字段列表
</
Divider
>
<
div
className=
{
styles
.
cardContent
}
>
<
div
className=
{
styles
.
doctorTable
}
>
<
table
>
<
thead
>
<
tr
>
<
td
>
字段名
</
td
>
</
tr
>
</
thead
>
<
tbody
id=
'doctor-drag-items'
>
{
selectData
&&
selectData
.
length
>
0
?
selectData
.
map
((
item
,
index
)
=>
{
return
<
tr
drag
-
id=
{
item
}
key=
{
index
}
style=
{
{
cursor
:
'move'
}
}
>
<
td
><
span
title=
{
item
}
>
{
item
}
</
span
></
td
>
</
tr
>
})
:
<
tr
><
td
colSpan=
'10'
style=
{
{
textAlign
:
'center'
}
}
>
暂无数据
</
td
></
tr
>
}
</
tbody
>
</
table
>
</
div
>
</
div
>
</
div
>
</
div
>
)
}
</
Modal
>
);
}
else
if
(
isType
===
'app'
)
{
return
(
<
Modal
title=
'部门或角色'
bodyStyle=
{
{
width
:
'100%'
,
minHeight
:
'100px'
}
}
width=
"700px"
style=
{
{
top
:
'10px'
}
}
destroyOnClose
centered=
{
true
}
cancelText=
"取消"
okText=
"确认"
{
...
props
}
onOk=
{
()
=>
onSubmit
()
}
forceRender=
{
true
}
getContainer=
{
false
}
// eslint-disable-next-line spaced-comment
//拖拽初始化及逻辑
const
draftSort
=
()
=>
{
let
el
=
document
.
getElementById
(
'doctor-drag-items'
);
if
(
el
)
{
let
sortable
=
Sortable
.
create
(
el
,
{
animation
:
100
,
// 动画参数
onEnd
(
evt
)
{
// 拖拽完毕之后发生,只需关注该事件
let
arr
=
[];
let
len
=
evt
.
from
.
children
.
length
;
for
(
let
i
=
0
;
i
<
len
;
i
++
)
{
arr
.
push
(
evt
.
from
.
children
[
i
].
getAttribute
(
'drag-id'
));
}
console
.
log
(
arr
);
setSelectData
(
arr
);
},
});
}
};
if
(
isType
!=
'app'
)
{
return
(
<
Modal
title=
"字段集选择"
bodyStyle=
{
{
width
:
'100%'
,
minHeight
:
'100px'
}
}
width=
"700px"
destroyOnClose
centered
cancelText=
"取消"
okText=
"确认"
{
...
props
}
onOk=
{
()
=>
onSubmit
()
}
forceRender
getContainer=
{
false
}
>
{
visible
&&
(
<
div
className=
{
styles
.
listCard
}
>
<
div
className=
{
styles
.
cardItem
}
style=
{
{
borderRight
:
'1px solid #99bbe8'
}
}
>
{
visible
&&
(
<
div
className=
{
styles
.
listCard
}
>
<
div
className=
{
styles
.
cardItem
}
style=
{
{
borderRight
:
'1px solid #99bbe8'
}
}
>
<
Divider
orientation=
"left"
style=
{
{
margin
:
'0 0 10px 0'
,
backgroundColor
:
'#dfe8f6'
}
}
>
待选部门角色站点
</
Divider
>
<
div
className=
{
styles
.
cardContent
}
>
{
title
.
map
((
item
,
index
)
=>
{
return
<
div
className=
{
styles
.
cardItemData
}
key=
{
index
}
>
<
Divider
orientation=
"left"
style=
{
{
margin
:
'0 0 10px 0'
,
color
:
'#15428b'
,
borderTopColor
:
'#99bbe8'
}
}
><
Checkbox
indeterminate=
{
indeterminate
[
index
]
}
onChange=
{
onCheckAllChange
}
index=
{
index
}
checkvalue=
{
filed1
[
item
]
}
checked=
{
checkAll
[
index
]
}
style=
{
{
marginRight
:
'7px'
}
}
></
Checkbox
>
{
item
}
</
Divider
>
<
CheckboxGroup
options=
{
filed1
[
item
]
}
value=
{
checkedList
[
index
]
}
onChange=
{
(
e
)
=>
onChangeList1
(
e
,
index
,
item
)
}
/></
div
>
})
}
</
div
>
</
div
>
<
div
className=
{
styles
.
cardItem
}
>
<
Divider
orientation=
"left"
style=
{
{
margin
:
'0 0 10px 0'
,
backgroundColor
:
'#dfe8f6'
}
}
>
已选列表
</
Divider
>
<
div
className=
{
styles
.
cardContent
}
>
<
div
className=
{
styles
.
doctorTable
}
>
<
table
>
<
thead
>
<
tr
>
<
td
>
字段名
</
td
>
</
tr
>
</
thead
>
<
tbody
id=
'doctor-drag-items'
>
{
selectData
&&
selectData
.
length
>
0
?
selectData
.
map
((
item
,
index
)
=>
{
return
<
tr
drag
-
id=
{
item
}
key=
{
index
}
style=
{
{
cursor
:
'move'
}
}
>
<
td
><
span
title=
{
item
}
>
{
item
}
</
span
></
td
>
</
tr
>
})
:
<
tr
><
td
colSpan=
'10'
style=
{
{
textAlign
:
'center'
}
}
>
暂无数据
</
td
></
tr
>
}
</
tbody
>
</
table
>
</
div
>
</
div
>
</
div
>
</
div
>
)
<
Divider
orientation=
"left"
style=
{
{
margin
:
'0 0 10px 0'
,
backgroundColor
:
'#dfe8f6'
}
}
>
待选字段列表
</
Divider
>
}
</
Modal
>
);
}
{
flag
===
0
?
(
<>
<
div
className=
{
styles
.
cardContent
}
>
<
span
style=
{
{
color
:
'red'
,
fontSize
:
'1rem'
,
marginLeft
:
'25px'
,
}
}
>
请先选择事件主表
</
span
>
</
div
>
</>
)
:
(
<>
{
JSON
.
stringify
(
filed
)
==
'{}'
?
(
<>
<
div
className=
{
styles
.
cardContent
}
>
<
span
style=
{
{
color
:
'red'
,
fontSize
:
'1rem'
,
marginLeft
:
'25px'
,
}
}
>
表字段缺失请先配置表/字段
</
span
>
</
div
>
</>
)
:
(
<>
<
div
className=
{
styles
.
cardContent
}
>
{
title
.
map
((
item
,
index
)
=>
(
<
div
className=
{
styles
.
cardItemData
}
key=
{
index
}
>
<
Divider
orientation=
"left"
style=
{
{
margin
:
'0 0 10px 0'
,
color
:
'#15428b'
,
borderTopColor
:
'#99bbe8'
,
}
}
>
<
Checkbox
indeterminate=
{
indeterminate
[
index
]
}
onChange=
{
onCheckAllChange
}
index=
{
index
}
checkvalue=
{
filed
[
item
]
}
checked=
{
checkAll
[
index
]
}
style=
{
{
marginRight
:
'7px'
}
}
/>
{
item
}
</
Divider
>
<
CheckboxGroup
options=
{
filed
[
item
]
}
value=
{
checkedList
[
index
]
}
onChange=
{
e
=>
onChangeList
(
e
,
index
,
item
)
}
/>
</
div
>
))
}
</
div
>
</>
)
}
</>
)
}
</
div
>
<
div
className=
{
styles
.
cardItem
}
>
<
Divider
orientation=
"left"
style=
{
{
margin
:
'0 0 10px 0'
,
backgroundColor
:
'#dfe8f6'
}
}
>
已选字段列表
</
Divider
>
<
div
className=
{
styles
.
cardContent
}
>
<
div
className=
{
styles
.
doctorTable
}
>
<
table
>
<
thead
>
<
tr
>
<
td
>
字段名
</
td
>
</
tr
>
</
thead
>
<
tbody
id=
"doctor-drag-items"
>
{
selectData
&&
selectData
.
length
>
0
?
(
selectData
.
map
((
item
,
index
)
=>
(
<
tr
drag
-
id=
{
item
}
key=
{
index
}
style=
{
{
cursor
:
'move'
}
}
>
<
td
>
<
span
title=
{
item
}
>
{
item
}
</
span
>
</
td
>
</
tr
>
))
)
:
(
<
tr
>
<
td
colSpan=
"10"
style=
{
{
textAlign
:
'center'
}
}
>
暂无数据
</
td
>
</
tr
>
)
}
</
tbody
>
</
table
>
</
div
>
</
div
>
</
div
>
</
div
>
)
}
</
Modal
>
);
}
if
(
isType
===
'app'
)
{
return
(
<
Modal
title=
"部门或角色"
bodyStyle=
{
{
width
:
'100%'
,
minHeight
:
'100px'
}
}
width=
"1400px"
style=
{
{
top
:
'10px'
}
}
destroyOnClose
centered
cancelText=
"取消"
okText=
"确认"
{
...
props
}
onOk=
{
()
=>
onSubmit
()
}
forceRender
getContainer=
{
false
}
>
{
visible
&&
(
<
div
className=
{
styles
.
listCard1
}
>
<
div
className=
{
styles
.
cardItem1
}
// style=
{{
borderRight
:
'1
px
solid
#99
bbe8
'
}}
>
<
Divider
orientation=
"left"
style=
{
{
margin
:
'0 0 10px 0'
,
backgroundColor
:
'#dfe8f6'
}
}
>
待选部门站点角色
</
Divider
>
<
div
className=
{
styles
.
cardContent1
}
>
{
title
.
map
((
item
,
index
)
=>
(
<
div
className=
{
styles
.
cardItemData1
}
key=
{
index
}
>
<
Divider
orientation=
"left"
style=
{
{
margin
:
'0 0 10px 0'
,
color
:
'#15428b'
,
borderTopColor
:
'#99bbe8'
,
}
}
>
<
Checkbox
indeterminate=
{
indeterminate
[
index
]
}
onChange=
{
onCheckAllChange
}
index=
{
index
}
checkvalue=
{
filed1
[
item
]
}
checked=
{
checkAll
[
index
]
}
style=
{
{
marginRight
:
'7px'
}
}
/>
{
item
}
</
Divider
>
<
CheckboxGroup
options=
{
filed1
[
item
]
}
value=
{
checkedList
[
index
]
}
onChange=
{
e
=>
onChangeList1
(
e
,
index
,
item
)
}
/>
</
div
>
))
}
</
div
>
</
div
>
{
/* <div className={styles.cardItem}>
<Divider
orientation="left"
style={{ margin: '0 0 10px 0', backgroundColor: '#dfe8f6' }}
>
已选列表
</Divider>
<div className={styles.cardContent}>
<div className={styles.doctorTable}>
<table>
<thead>
<tr>
<td>字段名</td>
</tr>
</thead>
<tbody id="doctor-drag-items">
{selectData && selectData.length > 0 ? (
selectData.map((item, index) => (
<tr
drag-id={item}
key={index}
style={{ cursor: 'move' }}
>
<td>
<span title={item}>{item}</span>
</td>
</tr>
))
) : (
<tr>
<td colSpan="10" style={{ textAlign: 'center' }}>
暂无数据
</td>
</tr>
)}
</tbody>
</table>
</div>
</div>
</div> */
}
</
div
>
)
}
</
Modal
>
);
}
};
export
default
AddModal
;
\ No newline at end of file
export
default
AddModal
;
src/pages/platformCenter/bsmanager/workOrder/incident.jsx
View file @
b70a5514
/* eslint-disable prettier/prettier */
/* eslint-disable eqeqeq */
/* eslint-disable no-shadow */
/* eslint-disable no-unused-vars */
/* eslint-disable array-callback-return */
/* eslint-disable react-hooks/rules-of-hooks */
/* eslint-disable camelcase */
/* eslint-disable guard-for-in */
/* eslint-disable no-restricted-syntax */
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
{
useHistory
}
from
'react-router-dom'
;
import
styles
from
'./incident.less'
;
import
{
Form
,
Card
,
Space
,
Table
,
Popconfirm
,
Spin
,
Tooltip
,
notification
,
Tree
,
Button
,
Form
,
Card
,
Space
,
Table
,
Popconfirm
,
Spin
,
Tooltip
,
notification
,
Tree
,
Button
,
}
from
'antd'
;
import
{
DoubleLeftOutlined
,
DoubleRightOutlined
,
PlusSquareFilled
,
RightOutlined
,
EditTwoTone
,
DeleteOutlined
,
OrderedListOutlined
,
ApartmentOutlined
,
DesktopOutlined
DoubleLeftOutlined
,
DoubleRightOutlined
,
PlusSquareFilled
,
RightOutlined
,
EditTwoTone
,
DeleteOutlined
,
OrderedListOutlined
,
ApartmentOutlined
,
DesktopOutlined
,
}
from
'@ant-design/icons'
;
import
{
GetCM_Event_LoadEventTable
,
CM_Event_RemoveEventTable
,
CM_Event_ReOrder
,
GetCM_Event_LoadEventTypeTable
}
from
'@/services/standingBook/api'
;
import
{
GetCM_Event_LoadEventTable
,
CM_Event_RemoveEventTable
,
CM_Event_ReOrder
,
GetCM_Event_LoadEventTypeTable
,
}
from
'@/services/standingBook/api'
;
import
classnames
from
'classnames'
;
import
AddModal
from
'./AddModal'
import
ProcessModal
from
'./ProcessModal'
import
SortModal
from
'./SortModal'
import
ViewModal
from
'./ViewModal'
import
styles
from
'./incident.less'
;
import
AddModal
from
'./AddModal'
;
import
ProcessModal
from
'./ProcessModal'
;
import
SortModal
from
'./SortModal'
;
import
ViewModal
from
'./ViewModal'
;
const
incident
=
()
=>
{
const
history
=
useHistory
();
const
[
treeLoading
,
setTreeLoading
]
=
useState
(
false
);
const
[
treeVisible
,
setTreeVisible
]
=
useState
(
true
);
// 左边列表是否可见
const
[
treeData
,
setTreeData
]
=
useState
([]);
// 事件表数据
const
[
tableData
,
setTableData
]
=
useState
([]);
// 事件表
const
[
addVisible
,
setAddvisible
]
=
useState
(
false
);
const
[
processVisible
,
setProcessVisible
]
=
useState
(
false
);
const
[
sortVisible
,
setSortVisible
]
=
useState
(
false
);
const
[
viewVisible
,
setViewVisible
]
=
useState
(
false
)
const
[
isType
,
setIsType
]
=
useState
(
''
);
// 弹窗类型
const
[
formObj
,
setFormObj
]
=
useState
(
''
);
const
[
flag
,
setFlag
]
=
useState
(
0
);
const
[
title1
,
setTitle1
]
=
useState
(
''
)
const
[
title2
,
setTitle2
]
=
useState
(
''
)
const
[
select
,
setSelect
]
=
useState
(
''
)
const
history
=
useHistory
();
const
[
treeLoading
,
setTreeLoading
]
=
useState
(
false
);
const
[
treeVisible
,
setTreeVisible
]
=
useState
(
true
);
// 左边列表是否可见
const
[
treeData
,
setTreeData
]
=
useState
([]);
// 事件表数据
const
[
tableData
,
setTableData
]
=
useState
([]);
// 事件表
const
[
addVisible
,
setAddvisible
]
=
useState
(
false
);
const
[
processVisible
,
setProcessVisible
]
=
useState
(
false
);
const
[
sortVisible
,
setSortVisible
]
=
useState
(
false
);
const
[
viewVisible
,
setViewVisible
]
=
useState
(
false
);
const
[
isType
,
setIsType
]
=
useState
(
''
);
// 弹窗类型
const
[
formObj
,
setFormObj
]
=
useState
(
''
);
const
[
flag
,
setFlag
]
=
useState
(
0
);
const
[
title1
,
setTitle1
]
=
useState
(
''
);
const
[
title2
,
setTitle2
]
=
useState
(
''
);
const
[
select
,
setSelect
]
=
useState
(
''
);
const
[
sortData
,
setSortData
]
=
useState
([]);
const
[
rember
,
setRember
]
=
useState
(
0
);
const
[
rember1
,
setRember1
]
=
useState
();
const
[
maxLength
,
setMaxLength
]
=
useState
(
0
);
const
[
pickItem
,
setPickItem
]
=
useState
(
''
);
const
[
sortData
,
setSortData
]
=
useState
([])
const
[
rember
,
setRember
]
=
useState
(
0
)
const
[
rember1
,
setRember1
]
=
useState
()
const
columns
=
[
{
title
:
'事件名称'
,
dataIndex
:
'name'
,
key
:
'name'
,
width
:
150
,
},
{
title
:
'事件主表'
,
dataIndex
:
'tableName'
,
key
:
'tableName'
,
width
:
200
,
ellipsis
:
true
,
},
{
title
:
'编码'
,
dataIndex
:
'code'
,
key
:
'code'
,
width
:
50
,
},
{
title
:
'摘要字段'
,
dataIndex
:
'summaryFields'
,
key
:
'summaryFields'
,
width
:
200
,
ellipsis
:
true
,
},
{
title
:
'权限'
,
dataIndex
:
'roles'
,
key
:
'roles'
,
width
:
50
,
},
{
title
:
'流程'
,
dataIndex
:
'flowCount'
,
key
:
'flowCount'
,
width
:
50
,
},
{
title
:
'上报'
,
dataIndex
:
'reportable'
,
key
:
'reportable'
,
width
:
50
,
},
{
title
:
'上报字段'
,
dataIndex
:
'reportFields'
,
key
:
'reportFields'
,
width
:
100
,
render
:
item
=>
(
<
span
style=
{
{
color
:
'grey'
}
}
key=
{
item
}
>
{
item
}
</
span
>
),
},
{
title
:
'显示字段'
,
dataIndex
:
'displayFields'
,
key
:
'displayFields'
,
width
:
100
,
render
:
item
=>
(
<
span
style=
{
{
color
:
'grey'
}
}
key=
{
item
}
>
{
item
}
</
span
>
),
},
const
[
maxLength
,
setMaxLength
]
=
useState
(
0
);
const
[
pickItem
,
setPickItem
]
=
useState
(
''
);
const
columns
=
[
{
title
:
'事件名称'
,
dataIndex
:
'name'
,
key
:
'name'
,
width
:
150
,
},
{
title
:
'事件主表'
,
dataIndex
:
'tableName'
,
key
:
'tableName'
,
width
:
200
,
ellipsis
:
true
,
}
,
{
title
:
'编码'
,
dataIndex
:
'code'
,
key
:
'code'
,
width
:
50
,
}
,
{
title
:
'摘要字段'
,
dataIndex
:
'summaryFields'
,
key
:
'summaryFields'
,
width
:
200
,
ellipsis
:
true
}
,
{
title
:
'权限'
,
dataIndex
:
'roles'
,
key
:
'roles'
,
width
:
50
,
}
,
{
title
:
'流程'
,
dataIndex
:
'flowCount'
,
key
:
'flowCount'
,
width
:
50
,
}
,
{
title
:
'上报'
,
dataIndex
:
'reportable'
,
key
:
'reportable'
,
width
:
50
,
}
,
{
title
:
'上报字段'
,
dataIndex
:
'reportFields'
,
key
:
'reportFields'
,
width
:
100
,
render
:
item
=>
(
<
span
style=
{
{
color
:
'grey'
}
}
key=
{
item
}
>
{
item
}
</
span
>
),
}
,
{
title
:
'显示字段'
,
dataIndex
:
'displayFields'
,
key
:
'displayFields'
,
width
:
100
,
render
:
item
=>
(
<
span
style=
{
{
color
:
'grey'
}
}
key=
{
item
}
>
{
item
}
</
span
>
),
}
,
{
title
:
'编辑'
,
dataIndex
:
'editable'
,
key
:
'editable'
,
width
:
50
,
render
:
item
=>
(
<
span
style=
{
{
color
:
'grey'
}
}
key=
{
item
}
>
{
item
}
</
span
>
),
}
,
{
title
:
'编辑字段'
,
dataIndex
:
'editableFields'
,
key
:
'editableFields'
,
width
:
100
,
render
:
item
=>
(
<
div
ref=
{
r
=>
{
if
(
r
)
{
r
.
innerHTML
=
item
;
}
}
}
/>
)
}
,
{
title
:
'上报方式'
,
dataIndex
:
'createMode'
,
key
:
'createMode'
,
width
:
100
,
}
,
// {
// title: '置顶条件',
// dataIndex: 'topWhere',
// key: 'topWhere',
// width: 100,
// render: item =>(
// <div
// ref={r => {
// if (r) {
// r.innerHTML = item;
// }
// }}
// />
// )
// }
// ,
// {
// title: '接口配置',
// dataIndex: 'interfaceConfig',
// key: 'interfaceConfig',
// width: 100,
// render: item =>(
// <div
// ref={r => {
// if (r) {
// r.innerHTML = item;
// }
// }}
// />
// )
// },
{
title
:
'操作'
,
key
:
'action'
,
align
:
'center'
,
render
:
record
=>
(
<
Space
size=
"middle"
>
<
Tooltip
title=
"编辑事件类型"
>
<
EditTwoTone
onClick=
{
()
=>
editEventType
(
record
)
}
style=
{
{
fontSize
:
'16px'
}
}
/>
</
Tooltip
>
<
Tooltip
title=
"删除事件类型"
>
<
Popconfirm
placement=
"bottomRight"
title=
{
<
p
>
即将删除事件类型表,是否确认删除?
</
p
>
}
okText=
"确认"
cancelText=
"取消"
onConfirm=
{
()
=>
deleteEventType
(
record
)
}
>
<
DeleteOutlined
style=
{
{
fontSize
:
'16px'
,
color
:
'#e86060'
}
}
/>
</
Popconfirm
>
</
Tooltip
>
<
Tooltip
title=
"受理流程"
>
<
ApartmentOutlined
onClick=
{
()
=>
process1
(
record
)
}
style=
{
{
fontSize
:
'16px'
,
color
:
'#1890FF'
}
}
/>
</
Tooltip
>
<
Tooltip
title=
"辅助视图"
>
<
DesktopOutlined
onClick=
{
()
=>
auxiliaryView1
(
record
)
}
style=
{
{
fontSize
:
'16px'
,
color
:
'#1890FF'
}
}
/>
</
Tooltip
>
</
Space
>
)
}
]
useEffect
(()
=>
{
setTreeLoading
(
true
);
GetCM_Event_LoadEventTable
().
then
(
res
=>
{
setTreeLoading
(
false
);
if
(
res
.
msg
===
'Ok'
)
{
console
.
log
(
res
.
data
)
// setMaxLength(res.data.root.length + 1)
let
arr
=
formateArrDataA
(
res
.
data
,
'businessType'
)
console
.
log
(
arr
)
let
newArr
=
[]
let
newapp
=
[]
let
newabb
=
[]
let
aa
=
[]
let
zz
=
[]
Object
.
keys
(
arr
).
map
((
item
,
index
)
=>
{
newArr
.
push
(
item
)
})
console
.
log
(
arr
)
Object
.
values
(
arr
).
map
((
item
,
index
)
=>
{
newapp
.
push
(
item
)
})
console
.
log
(
newapp
)
newapp
.
map
((
item
,
index
)
=>
{
console
.
log
(
item
)
item
.
map
((
item1
,
index
)
=>
{
newabb
.
push
(
item1
.
root
)
console
.
log
(
item1
.
root
)
})
})
console
.
log
(
newabb
)
newabb
.
map
((
item
,
index
)
=>
{
console
.
log
(
item
)
aa
.
push
(
item
)
})
console
.
log
(
aa
)
aa
.
map
((
item
,
index
)
=>
{
console
.
log
(
item
)
item
.
map
((
item1
,
index
)
=>
{
console
.
log
(
item1
)
zz
.
push
({
...
item1
})
})
})
console
.
log
(
zz
)
let
arrr
=
formateArrDataA
(
zz
,
'businessType'
)
console
.
log
(
arrr
)
setTableData
(
arrr
)
console
.
log
(
history
.
location
.
state
)
if
(
history
.
location
.
state
){
console
.
log
(
history
)
console
.
log
(
history
.
location
.
state
.
rember
)
setPickItem
(
newArr
[
history
.
location
.
state
.
rember
])
setRember
(
history
.
location
.
state
.
rember
)
setRember1
(
newArr
[
history
.
location
.
state
.
rember
])
}
else
{
setPickItem
(
newArr
[
rember
])
setRember1
(
newArr
[
0
])
}
console
.
log
(
rember
)
console
.
log
(
newArr
[
rember
])
console
.
log
(
newArr
,
'newArr'
);
setTreeData
(
newArr
)
}
})
},
[
flag
])
useEffect
(()
=>
{
GetCM_Event_LoadEventTypeTable
().
then
(
res
=>
{
if
(
res
.
msg
===
'Ok'
)
{
let
arr
=
[]
res
.
data
.
map
((
item
,
index
)
=>
{
arr
.
push
(
item
.
text
)
})
setSelect
(
arr
)
}
})
},
[])
const
formateArrDataA
=
(
initialArr
,
name
)
=>
{
console
.
log
(
initialArr
)
console
.
log
(
name
)
// 判定传参是否符合规则
if
(
!
(
initialArr
instanceof
Array
))
{
return
'请传入正确格式的数组'
}
if
(
!
name
)
{
return
'请传入对象属性'
}
//先获取一下这个数组中有多少个"name"
let
nameArr
=
[]
for
(
let
i
in
initialArr
)
{
if
(
nameArr
.
indexOf
(
initialArr
[
i
][
`
${
name
}
`
])
===
-
1
)
{
nameArr
.
push
(
initialArr
[
i
][
`
${
name
}
`
])
}
}
//新建一个包含多个list的结果对象
let
tempObj
=
{}
// 根据不同的"name"生成多个数组
for
(
let
k
in
nameArr
)
{
for
(
let
j
in
initialArr
)
{
if
(
initialArr
[
j
][
`
${
name
}
`
]
==
nameArr
[
k
])
{
// 每次外循环时新建一个对应"name"的数组, 内循环时当前数组不变
tempObj
[
nameArr
[
k
]]
=
tempObj
[
nameArr
[
k
]]
||
[]
tempObj
[
nameArr
[
k
]].
push
(
initialArr
[
j
])
}
{
title
:
'编辑'
,
dataIndex
:
'editable'
,
key
:
'editable'
,
width
:
50
,
render
:
item
=>
(
<
span
style=
{
{
color
:
'grey'
}
}
key=
{
item
}
>
{
item
}
</
span
>
),
},
{
title
:
'编辑字段'
,
dataIndex
:
'editableFields'
,
key
:
'editableFields'
,
width
:
100
,
render
:
item
=>
(
<
div
ref=
{
r
=>
{
if
(
r
)
{
r
.
innerHTML
=
item
;
}
}
for
(
let
keys
in
tempObj
)
{
let
arr
=
[]
tempObj
[
keys
].
map
((
item
,
index
)
=>
{
tempObj
[
keys
]
=
arr
;
item
.
key
=
index
arr
.
push
(
item
)
})
}
return
tempObj
}
//添加事件
const
addIncident
=
()
=>
{
setAddvisible
(
true
)
setIsType
(
'add'
)
}
//修改事件类型
const
editEventType
=
record
=>
{
setFormObj
(
record
);
setIsType
(
'edit'
);
setAddvisible
(
true
);
}
//删除事件类型
const
deleteEventType
=
record
=>
{
CM_Event_RemoveEventTable
(
record
.
ID
).
then
(
res
=>
{
if
(
res
.
msg
===
''
)
{
notification
.
success
({
message
:
'提示'
,
duration
:
3
,
description
:
'删除成功'
,
});
setFlag
(
flag
+
1
);
}
else
{
notification
.
error
({
message
:
'提示'
,
duration
:
3
,
description
:
res
.
msg
,
});
}
})
}
const
sort
=
()
=>
{
setSortVisible
(
true
);
console
.
log
(
tableData
)
console
.
log
(
pickItem
)
console
.
log
(
tableData
[
pickItem
])
setSortData
(
tableData
[
pickItem
])
}
// const process = record => {
// setProcessVisible(true);
// setFormObj(record);
// setTitle1(record.name)
}
}
/>
),
},
{
title
:
'上报方式'
,
dataIndex
:
'createMode'
,
key
:
'createMode'
,
width
:
100
,
},
// {
// title: '置顶条件',
// dataIndex: 'topWhere',
// key: 'topWhere',
// width: 100,
// render: item =>(
// <div
// ref={r => {
// if (r) {
// r.innerHTML = item;
// }
// }}
// />
// )
// }
const
process1
=
record
=>
{
history
.
push
({
pathname
:
'/platformCenter/bsmanger/incidentFlow'
,
state
:
{
formObj
:
record
,
title1
:
record
.
name
,
rember
},
// ,
// {
// title: '接口配置',
// dataIndex: 'interfaceConfig',
// key: 'interfaceConfig',
// width: 100,
// render: item =>(
// <div
// ref={r => {
// if (r) {
// r.innerHTML = item;
// }
// }}
// />
// )
// },
{
title
:
'操作'
,
key
:
'action'
,
align
:
'center'
,
render
:
record
=>
(
<
Space
size=
"middle"
>
<
Tooltip
title=
"编辑事件类型"
>
<
EditTwoTone
onClick=
{
()
=>
editEventType
(
record
)
}
style=
{
{
fontSize
:
'16px'
}
}
/>
</
Tooltip
>
<
Tooltip
title=
"删除事件类型"
>
<
Popconfirm
placement=
"bottomRight"
title=
{
<
p
>
即将删除事件类型表,是否确认删除?
</
p
>
}
okText=
"确认"
cancelText=
"取消"
onConfirm=
{
()
=>
deleteEventType
(
record
)
}
>
<
DeleteOutlined
style=
{
{
fontSize
:
'16px'
,
color
:
'#e86060'
}
}
/>
</
Popconfirm
>
</
Tooltip
>
<
Tooltip
title=
"受理流程"
>
<
ApartmentOutlined
onClick=
{
()
=>
process1
(
record
)
}
style=
{
{
fontSize
:
'16px'
,
color
:
'#1890FF'
}
}
/>
</
Tooltip
>
<
Tooltip
title=
"辅助视图"
>
<
DesktopOutlined
onClick=
{
()
=>
auxiliaryView1
(
record
)
}
style=
{
{
fontSize
:
'16px'
,
color
:
'#1890FF'
}
}
/>
</
Tooltip
>
</
Space
>
),
},
];
useEffect
(()
=>
{
setTreeLoading
(
true
);
GetCM_Event_LoadEventTable
().
then
(
res
=>
{
setTreeLoading
(
false
);
if
(
res
.
msg
===
'Ok'
)
{
console
.
log
(
res
.
data
);
// setMaxLength(res.data.root.length + 1)
let
arr
=
formateArrDataA
(
res
.
data
,
'businessType'
);
console
.
log
(
arr
);
let
newArr
=
[];
let
newapp
=
[];
let
newabb
=
[];
let
aa
=
[];
let
zz
=
[];
Object
.
keys
(
arr
).
map
((
item
,
index
)
=>
{
newArr
.
push
(
item
);
});
console
.
log
(
arr
);
Object
.
values
(
arr
).
map
((
item
,
index
)
=>
{
newapp
.
push
(
item
);
});
console
.
log
(
newapp
);
newapp
.
map
((
item
,
index
)
=>
{
console
.
log
(
item
);
item
.
map
((
item1
,
index
)
=>
{
newabb
.
push
(
item1
.
root
);
console
.
log
(
item1
.
root
);
});
}
// const auxiliaryView = record => {
// setFormObj(record);
// setViewVisible(true)
// setTitle2(record.name)
// }
const
auxiliaryView1
=
record
=>
{
history
.
push
({
pathname
:
'/platformCenter/bsmanger/incidentView'
,
state
:
{
formObj
:
record
,
title2
:
record
.
name
,
rember
},
});
console
.
log
(
newabb
);
newabb
.
map
((
item
,
index
)
=>
{
console
.
log
(
item
);
aa
.
push
(
item
);
});
console
.
log
(
aa
);
aa
.
map
((
item
,
index
)
=>
{
console
.
log
(
item
);
item
.
map
((
item1
,
index
)
=>
{
console
.
log
(
item1
);
zz
.
push
({
...
item1
});
});
});
console
.
log
(
zz
);
let
arrr
=
formateArrDataA
(
zz
,
'businessType'
);
console
.
log
(
arrr
);
setTableData
(
arrr
);
console
.
log
(
history
.
location
.
state
);
if
(
history
.
location
.
state
)
{
console
.
log
(
history
);
console
.
log
(
history
.
location
.
state
.
rember
);
setPickItem
(
newArr
[
history
.
location
.
state
.
rember
]);
setRember
(
history
.
location
.
state
.
rember
);
setRember1
(
newArr
[
history
.
location
.
state
.
rember
]);
}
else
{
setPickItem
(
newArr
[
rember
]);
setRember1
(
newArr
[
0
]);
}
console
.
log
(
rember
);
console
.
log
(
newArr
[
rember
]);
console
.
log
(
newArr
,
'newArr'
);
setTreeData
(
newArr
);
}
});
},
[
flag
]);
useEffect
(()
=>
{
GetCM_Event_LoadEventTypeTable
().
then
(
res
=>
{
if
(
res
.
msg
===
'Ok'
)
{
let
arr
=
[];
res
.
data
.
map
((
item
,
index
)
=>
{
arr
.
push
(
item
.
text
);
});
setSelect
(
arr
);
}
});
},
[]);
const
formateArrDataA
=
(
initialArr
,
name
)
=>
{
console
.
log
(
initialArr
);
console
.
log
(
name
);
// 判定传参是否符合规则
if
(
!
(
initialArr
instanceof
Array
))
{
return
'请传入正确格式的数组'
;
}
const
onSubmit
=
()
=>
{
setAddvisible
(
false
)
setFlag
(
flag
+
1
)
if
(
!
name
)
{
return
'请传入对象属性'
;
}
const
onOK
=
prop
=>
{
setSortVisible
(
false
)
let
aa
=
(
prop
.
str
).
toString
()
console
.
log
(
aa
)
CM_Event_ReOrder
(
aa
).
then
(
res
=>
{
if
(
res
.
msg
===
'Ok'
)
{
notification
.
success
({
message
:
'提示'
,
duration
:
3
,
description
:
'调整成功'
,
});
setFlag
(
flag
+
1
);
}
else
{
notification
.
error
({
message
:
'提示'
,
duration
:
3
,
description
:
res
.
msg
,
});
}
})
// 先获取一下这个数组中有多少个"name"
let
nameArr
=
[];
for
(
let
i
in
initialArr
)
{
if
(
nameArr
.
indexOf
(
initialArr
[
i
][
`
${
name
}
`
])
===
-
1
)
{
nameArr
.
push
(
initialArr
[
i
][
`
${
name
}
`
]);
}
}
const
onOK1
=
()
=>
{
setProcessVisible
(
false
)
setFlag
(
flag
+
1
)
// 新建一个包含多个list的结果对象
let
tempObj
=
{};
// 根据不同的"name"生成多个数组
for
(
let
k
in
nameArr
)
{
for
(
let
j
in
initialArr
)
{
if
(
initialArr
[
j
][
`
${
name
}
`
]
==
nameArr
[
k
])
{
// 每次外循环时新建一个对应"name"的数组, 内循环时当前数组不变
tempObj
[
nameArr
[
k
]]
=
tempObj
[
nameArr
[
k
]]
||
[];
tempObj
[
nameArr
[
k
]].
push
(
initialArr
[
j
]);
}
}
}
const
onOK11
=
()
=>
{
setViewVisible
(
false
)
for
(
let
keys
in
tempObj
)
{
let
arr
=
[];
tempObj
[
keys
].
map
((
item
,
index
)
=>
{
tempObj
[
keys
]
=
arr
;
item
.
key
=
index
;
arr
.
push
(
item
);
});
}
return
(
<
div
className=
{
styles
.
incidentContainer
}
>
<
div
className=
{
styles
.
contentContainers
}
>
{
/*左侧事件树 */
}
<
Spin
spinning=
{
treeLoading
}
tip=
"loading..."
>
<
Card
className=
{
classnames
({
[
styles
.
orgContainer
]:
true
,
[
styles
.
orgContainerHide
]:
!
treeVisible
,
})
}
>
<
div
>
<
span
style=
{
{
fontSize
:
'15px '
,
fontWeight
:
'bold'
,
return
tempObj
;
};
// 添加事件
const
addIncident
=
()
=>
{
setAddvisible
(
true
);
setIsType
(
'add'
);
};
// 修改事件类型
const
editEventType
=
record
=>
{
setFormObj
(
record
);
setIsType
(
'edit'
);
setAddvisible
(
true
);
};
// 删除事件类型
const
deleteEventType
=
record
=>
{
CM_Event_RemoveEventTable
(
record
.
ID
).
then
(
res
=>
{
if
(
res
.
msg
===
''
)
{
notification
.
success
({
message
:
'提示'
,
duration
:
3
,
description
:
'删除成功'
,
});
setFlag
(
flag
+
1
);
}
else
{
notification
.
error
({
message
:
'提示'
,
duration
:
3
,
description
:
res
.
msg
,
});
}
});
};
const
sort
=
()
=>
{
setSortVisible
(
true
);
console
.
log
(
tableData
);
console
.
log
(
pickItem
);
console
.
log
(
tableData
[
pickItem
]);
setSortData
(
tableData
[
pickItem
]);
};
// const process = record => {
// setProcessVisible(true);
// setFormObj(record);
// setTitle1(record.name)
}
}
>
事件列表
</
span
>
<
Tooltip
title=
"添加事件类型"
>
<
PlusSquareFilled
onClick=
{
()
=>
addIncident
()
}
style=
{
{
color
:
'#1890FF'
,
fontSize
:
'25px'
,
verticalAlign
:
'middle'
,
marginLeft
:
'58%'
}
}
/>
</
Tooltip
>
<
hr
style=
{
{
width
:
'100%'
,
color
:
'#eeecec'
}
}
/>
{
treeData
.
length
>
0
&&
(
treeData
.
map
((
item
,
index
)
=>
{
return
<
div
className=
{
classnames
({
[
styles
.
listItem
]:
true
,
[
styles
.
pickItem
]:
item
===
pickItem
,
})
}
onClick=
{
e
=>
{
setPickItem
(
item
);
setRember
(
index
);
setRember1
(
item
)
}
}
key=
{
index
}
>
{
item
}
(
{
tableData
[
item
]
?
tableData
[
item
].
length
:
''
}
)
{
item
===
pickItem
?
<
RightOutlined
/>
:
''
}
</
div
>
})
)
}
</
div
>
<
div
className=
{
styles
.
switcher
}
>
{
treeVisible
&&
(
<
Tooltip
title=
"隐藏机构列表"
>
<
DoubleLeftOutlined
onClick=
{
()
=>
setTreeVisible
(
false
)
}
/>
</
Tooltip
>
)
}
{
!
treeVisible
&&
(
<
Tooltip
title=
"显示机构列表"
>
<
DoubleRightOutlined
onClick=
{
()
=>
setTreeVisible
(
true
)
}
/>
</
Tooltip
>
)
}
</
div
>
</
Card
>
</
Spin
>
{
/*右侧 */
}
<
div
// }
const
process1
=
record
=>
{
history
.
push
({
pathname
:
'/platformCenter/bsmanger/incidentFlow'
,
state
:
{
formObj
:
record
,
title1
:
record
.
name
,
rember
},
});
};
// const auxiliaryView = record => {
// setFormObj(record);
// setViewVisible(true)
// setTitle2(record.name)
// }
const
auxiliaryView1
=
record
=>
{
history
.
push
({
pathname
:
'/platformCenter/bsmanger/incidentView'
,
state
:
{
formObj
:
record
,
title2
:
record
.
name
,
rember
},
});
};
const
onSubmit
=
()
=>
{
setAddvisible
(
false
);
setFlag
(
flag
+
1
);
};
const
onOK
=
prop
=>
{
setSortVisible
(
false
);
let
aa
=
prop
.
str
.
toString
();
console
.
log
(
aa
);
CM_Event_ReOrder
(
aa
).
then
(
res
=>
{
if
(
res
.
msg
===
'Ok'
)
{
notification
.
success
({
message
:
'提示'
,
duration
:
3
,
description
:
'调整成功'
,
});
setFlag
(
flag
+
1
);
}
else
{
notification
.
error
({
message
:
'提示'
,
duration
:
3
,
description
:
res
.
msg
,
});
}
});
};
const
onOK1
=
()
=>
{
setProcessVisible
(
false
);
setFlag
(
flag
+
1
);
};
const
onOK11
=
()
=>
{
setViewVisible
(
false
);
};
return
(
<
div
className=
{
styles
.
incidentContainer
}
>
<
div
className=
{
styles
.
contentContainers
}
>
{
/* 左侧事件树 */
}
<
Spin
spinning=
{
treeLoading
}
tip=
"loading..."
>
<
Card
className=
{
classnames
({
[
styles
.
orgContainer
]:
true
,
[
styles
.
orgContainerHide
]:
!
treeVisible
,
})
}
>
<
div
>
<
span
style=
{
{
fontSize
:
'15px '
,
fontWeight
:
'bold'
,
}
}
>
事件列表
</
span
>
<
Tooltip
title=
"添加事件类型"
>
<
PlusSquareFilled
onClick=
{
()
=>
addIncident
()
}
style=
{
{
color
:
'#1890FF'
,
fontSize
:
'25px'
,
verticalAlign
:
'middle'
,
marginLeft
:
'58%'
,
}
}
/>
</
Tooltip
>
<
hr
style=
{
{
width
:
'100%'
,
color
:
'#eeecec'
}
}
/>
{
treeData
.
length
>
0
&&
treeData
.
map
((
item
,
index
)
=>
(
<
div
className=
{
classnames
({
[
styles
.
userContainer
]:
true
,
[
styles
.
userContainerHide
]:
!
treeVisible
,
[
styles
.
listItem
]:
true
,
[
styles
.
pickItem
]:
item
===
pickItem
,
})
}
>
<
div
style=
{
{
height
:
'50px'
}
}
>
<
span
style=
{
{
float
:
'right'
,
marginRight
:
'10px'
}
}
>
<
Button
icon=
{
<
OrderedListOutlined
className=
{
styles
.
icon
}
/>
}
onClick=
{
sort
}
style=
{
{
marginLeft
:
'30px'
,
verticalAlign
:
'middle'
,
marginTop
:
'10px'
}
}
>
调序
</
Button
>
</
span
>
</
div
>
<
Table
size=
"small"
rowKey=
'ID'
bordered
onRow=
{
record
=>
{
return
{
onDoubleClick
:
event
=>
{
event
.
stopPropagation
();
editEventType
(
record
)
},
//双击
};
}
}
columns=
{
columns
}
dataSource=
{
tableData
[
pickItem
]
}
scroll=
{
{
y
:
'calc(100vh - 155px)'
}
}
pagination=
{
{
showTotal
:
(
total
,
range
)
=>
`第${range[0]}-${range[1]} 条/共 ${total} 条`
,
pageSizeOptions
:
[
10
,
20
,
50
,
100
],
defaultPageSize
:
20
,
showQuickJumper
:
true
,
showSizeChanger
:
true
,
}
}
/>
onClick=
{
e
=>
{
setPickItem
(
item
);
setRember
(
index
);
setRember1
(
item
);
}
}
key=
{
index
}
>
{
item
}
(
{
tableData
[
item
]
?
tableData
[
item
].
length
:
''
}
)
{
' '
}
{
item
===
pickItem
?
<
RightOutlined
/>
:
''
}{
' '
}
</
div
>
))
}
</
div
>
<
div
className=
{
styles
.
switcher
}
>
{
treeVisible
&&
(
<
Tooltip
title=
"隐藏机构列表"
>
<
DoubleLeftOutlined
onClick=
{
()
=>
setTreeVisible
(
false
)
}
/>
</
Tooltip
>
)
}
{
!
treeVisible
&&
(
<
Tooltip
title=
"显示机构列表"
>
<
DoubleRightOutlined
onClick=
{
()
=>
setTreeVisible
(
true
)
}
/>
</
Tooltip
>
)
}
</
div
>
</
Card
>
</
Spin
>
{
/* 右侧 */
}
<
div
className=
{
classnames
({
[
styles
.
userContainer
]:
true
,
[
styles
.
userContainerHide
]:
!
treeVisible
,
})
}
>
<
div
style=
{
{
height
:
'50px'
}
}
>
<
span
style=
{
{
float
:
'right'
,
marginRight
:
'10px'
}
}
>
<
Button
icon=
{
<
OrderedListOutlined
className=
{
styles
.
icon
}
/>
}
onClick=
{
sort
}
style=
{
{
marginLeft
:
'30px'
,
verticalAlign
:
'middle'
,
marginTop
:
'10px'
,
}
}
>
调序
</
Button
>
</
span
>
</
div
>
</
div
>
{
/* Modal弹框 */
}
{
/* 添加事件 */
}
<
AddModal
visible=
{
addVisible
}
type=
{
isType
}
formObj=
{
formObj
}
rember1=
{
rember1
}
maxLength=
{
maxLength
}
onClose=
{
()
=>
setAddvisible
(
false
)
}
treeData=
{
treeData
}
selectData=
{
select
}
callBackSubmit=
{
onSubmit
}
placement=
"right"
/>
{
/* <ProcessModal
<
Table
size=
"small"
rowKey=
"ID"
bordered
onRow=
{
record
=>
({
onDoubleClick
:
event
=>
{
event
.
stopPropagation
();
editEventType
(
record
);
},
// 双击
})
}
columns=
{
columns
}
dataSource=
{
tableData
[
pickItem
]
}
scroll=
{
{
y
:
'calc(100vh - 155px)'
,
x
:
'max-content'
}
}
pagination=
{
{
showTotal
:
(
total
,
range
)
=>
`第${range[0]}-${range[1]} 条/共 ${total} 条`
,
pageSizeOptions
:
[
10
,
20
,
50
,
100
],
defaultPageSize
:
20
,
showQuickJumper
:
true
,
showSizeChanger
:
true
,
}
}
/>
</
div
>
{
/* Modal弹框 */
}
{
/* 添加事件 */
}
<
AddModal
visible=
{
addVisible
}
type=
{
isType
}
formObj=
{
formObj
}
rember1=
{
rember1
}
maxLength=
{
maxLength
}
onClose=
{
()
=>
setAddvisible
(
false
)
}
treeData=
{
treeData
}
selectData=
{
select
}
callBackSubmit=
{
onSubmit
}
placement=
"right"
/>
{
/* <ProcessModal
visible={processVisible}
formObj={formObj}
title1={title1}
...
...
@@ -569,25 +580,24 @@ const incident = () => {
onCancel={() => setProcessVisible(false)}
callBackSubmit={onOK1}
/> */
}
<
SortModal
title=
"调整顺序"
visible=
{
sortVisible
}
sortData1=
{
sortData
}
pickItem=
{
pickItem
}
onCancel=
{
()
=>
setSortVisible
(
false
)
}
callBackSubmit=
{
onOK
}
/>
{
/* <ViewModal
<
SortModal
title=
"调整顺序"
visible=
{
sortVisible
}
sortData1=
{
sortData
}
pickItem=
{
pickItem
}
onCancel=
{
()
=>
setSortVisible
(
false
)
}
callBackSubmit=
{
onOK
}
/>
{
/* <ViewModal
formObj={formObj}
visible={viewVisible}
onCancel={() => setViewVisible(false)}
title2={title2}
callBackSubmit={onOK11}
/> */
}
</
div
>
</
div
>
)
</
div
>
</
div
>
);
};
export
default
incident
;
\ No newline at end of file
export
default
incident
;
src/pages/platformCenter/bsmanager/workOrder/incident.less
View file @
b70a5514
.ant-modal-close-x {
line-height: 35px;
line-height: 35px;
}
.ant-btn .anticon.anticon-plus > svg {
margin-top:
-5px;
margin-top:
-5px;
}
.incidentContainer{
.ant-card-body {
padding: 12px 24px 24px 24px;
.incidentContainer {
.ant-card-body {
padding: 12px 24px 24px 24px;
}
.linkDrowp {
position: absolute;
left: 93.5%;
width: 1rem;
height: 100%;
display: flex;
align-items: center;
}
.listItem {
display: flex;
justify-content: space-between;
font-size: 14px;
font-weight: 400;
color: #414e65;
cursor: pointer;
line-height: 28px;
align-items: center;
padding: 8px 14px;
}
.ant-btn .anticon.anticon-plus > svg,
.ant-btn .anticon.anticon-minus > svg {
margin-top: -5px;
}
.pickItem {
background-color: #f5f6f9;
}
.contentContainers {
display: flex;
width: 100%;
position: relative;
.ant-table.ant-table-bordered > .ant-table-container {
min-width: calc(100vw - 582px);
height: calc(100vh - 166px);
overflow-x: hidden;
border: none;
}
.linkDrowp{
.orgContainer {
height: calc(100vh - 74px);
width: 250px;
left: 0;
top: 0;
overflow-x: hidden;
margin-right: 10px;
position: relative;
transition-property: width, left;
transition-duration: 0.5s;
white-space: nowrap;
.ant-tree {
padding-top: 6px;
.ant-tree-switcher {
line-height: 1;
margin-right: 0px !important;
color: #1890ff;
.ant-tree-switcher-line-icon {
margin-left: 5px;
}
}
}
.switcher {
display: block;
position: absolute;
left: 93.5%;
width: 1rem;
height: 100%;
display: flex;
align-items: center;
font-size: 18px;
color: #1890ff !important;
top: 50%;
right: 2px;
transform: translate(0%, -50%);
z-index: 1;
}
}
.listItem{
display: flex;
justify-content: space-between;
font-size: 14px;
font-weight: 400;
color: #414E65;
cursor: pointer;
line-height: 28px;
align-items: center;
padding: 8px 14px;
.orgContainerHide {
// transform: translateX(-230px);
left: 0px;
top: 0;
width: 26px;
}
.ant-btn .anticon.anticon-plus > svg, .ant-btn .anticon.anticon-minus > svg {
margin-top: -5px;
}
.pickItem{
background-color: #F5F6F9;
.ant-popover-message-title {
padding-left: 20px;
}
.contentContainers{
display: flex;
width: 100%;
position: relative;
.ant-table.ant-table-bordered > .ant-table-container {
min-width: calc(100vw - 582px);
height: calc(100vh - 166px);
overflow-x: hidden;
border: none;
}
.orgContainer{
height: calc(100vh - 74px);
width: 250px;
left: 0;
top: 0;
overflow-x: hidden;
margin-right: 10px;
position: relative;
transition-property:width,left;
transition-duration: 0.5s;
white-space: nowrap;
.ant-tree{
padding-top: 6px;
.ant-tree-switcher{
line-height: 1;
margin-right: 0px !important;
color:#1890FF;
.ant-tree-switcher-line-icon{
margin-left: 5px;
}
}
}
.switcher{
display: block;
position: absolute;
font-size: 18px;
color: #1890FF!important;
top: 50%;
right: 2px;
transform: translate(0%,-50%);
z-index: 1;
}
}
.orgContainerHide{
// transform: translateX(-230px);
left: 0px;
top: 0;
width: 26px;
}
.ant-popover-message-title {
padding-left: 20px;
}
.userContainer{
height: calc(100vh - 74px) !important;
z-index: 999;
min-width: 800px;
background: white;
width: 100%;
position: relative;
transition: width 0.5s;
.title{
margin: 16px 0 10px 16px;
display: inline-block;
width: 270px;
cursor: pointer;
overflow: hidden;
text-overflow:ellipsis;
white-space: nowrap;
}
.ant-table-pagination{
padding-right: 12px;
background: white;
margin: 1px 0;
padding: 8px;
padding-right: 20px;
}
.ant-btn{
margin: 0px 10px;
.ant-btn-primary{
background: #50aefc;
}
}
.ant-input-search-button{
margin-left: 0px !important;
}
.ant-table-thead tr th{
font-weight: 600;
color:rgba(0,0,0,0.85);
background-color:#F6F9FE;
}
.ant-table-cell{
text-align:center;
overflow: hidden;
// text-overflow:ellipsis;
white-space: nowrap;
}
.ant-table-body{
height:calc(100vh - 210px);
border-right: white;
overflow: auto !important;
}
.clickRowStyle{
background: #cfe7fd;
}
.ant-pagination{
z-index: 999;
border-top: 1px solid #f0eded;
}
.userContainer {
height: calc(100vh - 74px) !important;
z-index: 999;
min-width: 800px;
background: white;
width: 100%;
position: relative;
transition: width 0.5s;
.title {
margin: 16px 0 10px 16px;
display: inline-block;
width: 270px;
cursor: pointer;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.ant-table-pagination {
padding-right: 12px;
background: white;
margin: 1px 0;
padding: 8px;
padding-right: 20px;
}
.ant-btn {
margin: 0px 10px;
.ant-btn-primary {
background: #50aefc;
}
}
.ant-input-search-button {
margin-left: 0px !important;
}
.ant-table-thead tr th {
font-weight: 600;
color: rgba(0, 0, 0, 0.85);
background-color: #f6f9fe;
}
.ant-table-cell {
text-align: center;
overflow: hidden;
// text-overflow:ellipsis;
white-space: nowrap;
}
.ant-table-body {
height: calc(100vh - 210px);
border-right: white;
overflow: auto !important;
}
.clickRowStyle {
background: #cfe7fd;
}
.ant-pagination {
z-index: 999;
border-top: 1px solid #f0eded;
}
}
.icon{
margin-top: -5px !important;
vertical-align: text-bottom;
}
.icon {
margin-top: -5px !important;
vertical-align: text-bottom;
}
}
.formData {
height: 38rem;
overflow-y: scroll;
.ant-form-item-label
> label.ant-form-item-required:not(.ant-form-item-required-mark-optional)::before {
display: none;
}
.formData_label {
display: flex;
align-items: center;
}
.filed_listItem {
display: flex;
height: 3.6rem;
.ant-btn-icon-only {
width: 32px;
height: 32px;
/* padding: 2.4px 0; */
font-size: 16px;
border-radius: 2px;
display: flex;
align-items: center;
justify-content: center;
}
}
.ant-modal-root .ant-checkbox-group .ant-checkbox-group-item {
margin-right: 0px !important;
min-width: 200px !important;
}
}
.formData{
height: 38rem;
.listCard {
display: flex;
justify-content: space-around;
width: 100%;
.cardItem {
padding: 0.5rem;
width: 50%;
}
.cardContent {
height: 30rem;
overflow-y: scroll;
.ant-form-item-label > label.ant-form-item-required:not(.ant-form-item-required-mark-optional)::before{
display: none;
}
.formData_label{
display: flex;
align-items: center;
}
.filed_listItem{
display: flex;
height: 3.6rem;
.ant-btn-icon-only {
width: 32px;
height: 32px;
/* padding: 2.4px 0; */
font-size: 16px;
border-radius: 2px;
display: flex;
align-items: center;
justify-content: center;
}
}
width: 19rem;
}
.cardItemData {
padding: 1rem;
border: 1px solid #b5b8c8;
margin-bottom: 1rem;
overflow-x: hidden;
}
}
.listCard{
.listCard1 {
display: flex;
.cardItem1 {
padding: 0.5rem;
}
.cardContent1 {
height: 33rem;
overflow-y: scroll;
width: 1350px;
display: flex;
.cardItem{
padding: 0.5rem;
}
.cardContent{
height: 30rem;
overflow-y: scroll;
width: 19rem;
}
.cardItemData{
padding: 1rem;
border: 1px solid #b5b8c8;
margin-bottom: 1rem;
overflow-x: hidden;
}
justify-content: space-around;
}
.cardItemData1 {
padding: 1rem;
border: 1px solid #b5b8c8;
margin-bottom: 1rem;
width: 33.3%;
overflow-x: hidden;
}
}
.doctorTable {
margin-bottom: 16px;
table {
width: 100%;
td {
padding: 6px;
border: 1px solid #e8e8e8;
}
thead {
tr {
font-weight: 600;
background: #FAFAFA;
}
margin-bottom: 16px;
table {
width: 100%;
td {
padding: 6px;
border: 1px solid #e8e8e8;
}
thead {
tr {
font-weight: 600;
background: #fafafa;
}
tbody{
tr:hover
{
background-color:#ededed ;
}
}
tbody
{
tr:hover {
background-color: #ededed;
}
}
}
.ant-checkbox-group-item {
width: 260px;
}
.ant-drawer-footer {
display:
flex;
justify-content: flex-end;
display:
flex;
justify-content: flex-end;
}
.config{
.config {
display: flex;
padding: 1rem 0 0.5rem 0.5rem;
justify-content: space-between;
width: calc(100% - 10px);
.title {
font-size: 18px;
color: rgba(0, 114, 255, 1);
font-weight: bold;
}
.btn {
display: flex;
padding: 1rem 0 0.5rem 0.5rem;
justify-content: space-between;
width: calc(100% - 10px);
.title{
font-size: 18px;
color: rgba(0, 114, 255, 1);
font-weight: bold;
}
.btn{
display: flex;
justify-content: flex-end;
width: 20rem;
}
.ant-btn{
display: flex;
align-items: center;
margin-left: 20px;
}
justify-content: flex-end;
width: 20rem;
}
.ant-btn {
display: flex;
align-items: center;
margin-left: 20px;
}
}
.containerBox {
width: 100vm;
height: calc(100vh - 90px) ;
background: #ffffff;
.ant-table.ant-table-small .ant-table-tbody .ant-table-wrapper:only-child .ant-table{
margin-left: 0;
}
.ant-table.ant-table-bordered > .ant-table-container{
border: none;
}
.clickRowStyle{
background: #cfe7fd;
}
.ant-table-thead tr th{
font-weight: 600;
color:rgba(0,0,0,0.85);
}
width: 100vm;
height: calc(100vh - 90px);
background: #ffffff;
.ant-table.ant-table-small
.ant-table-tbody
.ant-table-wrapper:only-child
.ant-table {
margin-left: 0;
}
.ant-table.ant-table-bordered > .ant-table-container {
border: none;
}
.clickRowStyle {
background: #cfe7fd;
}
.ant-table-thead tr th {
font-weight: 600;
color: rgba(0, 0, 0, 0.85);
}
}
.panda-pro-pages-platform-center-bsmanager-work-order-incident-filed_listItem {
display: flex;
}
.panda-pro-pages-platform-center-bsmanager-work-order-incident-filed_listItem{
display:flex
}
\ No newline at end of file
src/pages/platformCenter/bsmanager/workOrder/incidentFlow.jsx
View file @
b70a5514
/* eslint-disable react-hooks/rules-of-hooks */
/* eslint-disable camelcase */
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
Modal
,
Table
,
Tooltip
,
notification
,
Space
,
Popconfirm
,
Spin
,
Button
}
from
'antd'
;
import
{
PlusSquareFilled
,
EditTwoTone
,
DeleteOutlined
,
PlusSquareOutlined
,
RollbackOutlined
Modal
,
Table
,
Tooltip
,
notification
,
Space
,
Popconfirm
,
Spin
,
Button
,
}
from
'antd'
;
import
{
PlusSquareFilled
,
EditTwoTone
,
DeleteOutlined
,
PlusSquareOutlined
,
RollbackOutlined
,
}
from
'@ant-design/icons'
;
import
{
useHistory
}
from
'react-router-dom'
;
import
styles
from
'./incident.less'
;
import
{
GetCM_Event_LoadEvenFlows
,
CM_Event_RemoveEvenFlow
}
from
'@/services/standingBook/api'
;
import
AddFlowsModal
from
'./AddFlowsModal'
const
incidentFlow
=
(
props
)
=>
{
const
[
tableData
,
setTableData
]
=
useState
([])
const
history
=
useHistory
();
const
[
addVisible
,
setAddVisible
]
=
useState
(
false
)
const
[
treeLoading
,
setTreeLoading
]
=
useState
(
false
);
const
[
isType
,
setIsType
]
=
useState
(
''
);
// 弹窗类型
const
[
record1
,
setRecord1
]
=
useState
(
''
)
const
[
obj
,
setObj
]
=
useState
(
''
)
const
[
flag
,
setFlag
]
=
useState
(
0
)
const
columns
=
[
{
title
:
()
=>
(<
span
style=
{
{
fontWeight
:
'bold'
}
}
>
流程名称
</
span
>),
dataIndex
:
'FlowName'
,
key
:
'FlowName'
,
width
:
250
,
ellipsis
:
true
,
}
,
{
title
:
()
=>
(<
span
style=
{
{
fontWeight
:
'bold'
}
}
>
受理权限
</
span
>),
dataIndex
:
'FlowRoles'
,
key
:
'FlowRoles'
,
ellipsis
:
true
,
},
{
title
:
()
=>
(<
span
style=
{
{
fontWeight
:
'bold'
}
}
>
操作
</
span
>),
key
:
'action'
,
width
:
150
,
aligin
:
'center'
,
render
:
record
=>
(
<
Space
size=
"middle"
>
<
Tooltip
title=
"编辑用户"
>
<
EditTwoTone
onClick=
{
()
=>
editEventType
(
record
)
}
style=
{
{
fontSize
:
'16px'
}
}
/>
</
Tooltip
>
<
Tooltip
title=
"删除"
>
<
Popconfirm
placement=
"bottomRight"
title=
{
<
p
>
即将删除事件流程,是否确认删除?
</
p
>
}
okText=
"确认"
cancelText=
"取消"
onConfirm=
{
()
=>
deleteEventType
(
record
)
}
>
<
DeleteOutlined
style=
{
{
fontSize
:
'16px'
,
color
:
'#e86060'
}
}
/>
</
Popconfirm
>
</
Tooltip
>
</
Space
>
)
import
{
GetCM_Event_LoadEvenFlows
,
CM_Event_RemoveEvenFlow
,
}
from
'@/services/standingBook/api'
;
import
AddFlowsModal
from
'./AddFlowsModal'
;
const
incidentFlow
=
props
=>
{
const
[
tableData
,
setTableData
]
=
useState
([]);
const
history
=
useHistory
();
const
[
addVisible
,
setAddVisible
]
=
useState
(
false
);
const
[
treeLoading
,
setTreeLoading
]
=
useState
(
false
);
const
[
isType
,
setIsType
]
=
useState
(
''
);
// 弹窗类型
const
[
record1
,
setRecord1
]
=
useState
(
''
);
const
[
obj
,
setObj
]
=
useState
(
''
);
const
[
flag
,
setFlag
]
=
useState
(
0
);
}
]
const
columns
=
[
{
title
:
()
=>
<
span
style=
{
{
fontWeight
:
'bold'
}
}
>
流程名称
</
span
>,
dataIndex
:
'FlowName'
,
key
:
'FlowName'
,
width
:
250
,
ellipsis
:
true
,
},
{
title
:
()
=>
<
span
style=
{
{
fontWeight
:
'bold'
}
}
>
受理权限
</
span
>,
dataIndex
:
'FlowRoles'
,
key
:
'FlowRoles'
,
ellipsis
:
true
,
},
{
title
:
()
=>
<
span
style=
{
{
fontWeight
:
'bold'
}
}
>
操作
</
span
>,
key
:
'action'
,
width
:
150
,
aligin
:
'center'
,
render
:
record
=>
(
<
Space
size=
"middle"
>
<
Tooltip
title=
"编辑用户"
>
<
EditTwoTone
onClick=
{
()
=>
editEventType
(
record
)
}
style=
{
{
fontSize
:
'16px'
}
}
/>
</
Tooltip
>
<
Tooltip
title=
"删除"
>
<
Popconfirm
placement=
"bottomRight"
title=
{
<
p
>
即将删除事件流程,是否确认删除?
</
p
>
}
okText=
"确认"
cancelText=
"取消"
onConfirm=
{
()
=>
deleteEventType
(
record
)
}
>
<
DeleteOutlined
style=
{
{
fontSize
:
'16px'
,
color
:
'#e86060'
}
}
/>
</
Popconfirm
>
</
Tooltip
>
</
Space
>
),
},
];
useEffect
(()
=>
{
console
.
log
(
props
)
console
.
log
(
props
.
location
.
state
.
title1
)
setTreeLoading
(
true
);
GetCM_Event_LoadEvenFlows
({
eventTypeId
:
props
.
location
.
state
.
formObj
.
ID
}).
then
(
res
=>
{
setTreeLoading
(
false
);
if
(
res
.
msg
===
'Ok'
)
{
console
.
log
(
res
.
data
)
setTableData
(
res
.
data
)
}
})
},
[
flag
])
const
addIncident
=
()
=>
{
console
.
log
(
props
.
location
.
state
.
formObj
.
ID
)
setObj
(
props
.
location
.
state
.
formObj
.
ID
)
setAddVisible
(
true
)
setIsType
(
'add'
)
}
const
editEventType
=
record
=>
{
setObj
(
props
.
location
.
state
.
formObj
.
ID
)
setRecord1
(
record
)
setIsType
(
'edit'
);
setAddVisible
(
true
)
}
const
back
=
()
=>
{
let
rember
=
props
.
location
.
state
.
rember
;
history
.
push
({
pathname
:
'/platformCenter/bsmanger/incident'
,
state
:
{
rember
},
useEffect
(()
=>
{
console
.
log
(
props
);
console
.
log
(
props
.
location
.
state
.
title1
);
setTreeLoading
(
true
);
GetCM_Event_LoadEvenFlows
({
eventTypeId
:
props
.
location
.
state
.
formObj
.
ID
,
}).
then
(
res
=>
{
setTreeLoading
(
false
);
if
(
res
.
msg
===
'Ok'
)
{
console
.
log
(
res
.
data
);
setTableData
(
res
.
data
);
}
});
},
[
flag
]);
const
addIncident
=
()
=>
{
console
.
log
(
props
.
location
.
state
.
formObj
.
ID
);
setObj
(
props
.
location
.
state
.
formObj
.
ID
);
setAddVisible
(
true
);
setIsType
(
'add'
);
};
const
editEventType
=
record
=>
{
setObj
(
props
.
location
.
state
.
formObj
.
ID
);
setRecord1
(
record
);
setIsType
(
'edit'
);
setAddVisible
(
true
);
};
const
back
=
()
=>
{
let
{
rember
}
=
props
.
location
.
state
;
history
.
push
({
pathname
:
'/platformCenter/bsmanger/incident'
,
state
:
{
rember
},
});
};
const
deleteEventType
=
record
=>
{
console
.
log
(
record
);
CM_Event_RemoveEvenFlow
({
eventFlowIds
:
record
.
ID
}).
then
(
res
=>
{
if
(
res
.
msg
===
''
)
{
notification
.
success
({
message
:
'提示'
,
duration
:
3
,
description
:
'删除成功'
,
});
};
const
deleteEventType
=
record
=>
{
console
.
log
(
record
)
CM_Event_RemoveEvenFlow
({
eventFlowIds
:
record
.
ID
}).
then
(
res
=>
{
if
(
res
.
msg
===
''
)
{
notification
.
success
({
message
:
'提示'
,
duration
:
3
,
description
:
'删除成功'
,
});
setFlag
(
flag
+
1
)
}
else
{
notification
.
error
({
message
:
'提示'
,
duration
:
3
,
description
:
res
.
msg
,
});
}
})
}
const
onOK
=
()
=>
{
setAddVisible
(
false
)
GetCM_Event_LoadEvenFlows
({
eventTypeId
:
props
.
location
.
state
.
formObj
.
ID
}).
then
(
res
=>
{
if
(
res
.
msg
===
'Ok'
)
{
console
.
log
(
res
.
data
)
setTableData
(
res
.
data
)
}
})
}
return
(
<>
<
Spin
tip=
"loading..."
spinning=
{
treeLoading
}
>
<
div
className=
{
styles
.
containerBox
}
>
<
div
className=
{
styles
.
config
}
>
<
div
className=
{
styles
.
title
}
>
{
`${props.location.state.title1}受理流程和权限`
}
</
div
>
<
div
className=
{
styles
.
btn
}
>
<
Button
type=
"primary"
icon=
{
<
PlusSquareOutlined
/>
}
onClick=
{
()
=>
addIncident
()
}
>
新增
</
Button
>
<
Button
type=
"primary"
icon=
{
<
RollbackOutlined
/>
}
onClick=
{
()
=>
back
()
}
>
返回
</
Button
>
</
div
>
</
div
>
setFlag
(
flag
+
1
);
}
else
{
notification
.
error
({
message
:
'提示'
,
duration
:
3
,
description
:
res
.
msg
,
});
}
});
};
const
onOK
=
()
=>
{
setAddVisible
(
false
);
GetCM_Event_LoadEvenFlows
({
eventTypeId
:
props
.
location
.
state
.
formObj
.
ID
,
}).
then
(
res
=>
{
if
(
res
.
msg
===
'Ok'
)
{
console
.
log
(
res
.
data
);
setTableData
(
res
.
data
);
}
});
};
<
Table
size=
"small"
rowKey=
'ID'
bordered
style=
{
{
overflowY
:
'scroll'
}
}
onRow=
{
record
=>
{
return
{
onDoubleClick
:
event
=>
{
event
.
stopPropagation
();
editEventType
(
record
);
},
//双击
};
}
}
columns=
{
columns
}
dataSource=
{
tableData
}
pagination=
{
false
}
/>
</
div
>
</
Spin
>
<
AddFlowsModal
visible=
{
addVisible
}
obj=
{
obj
}
formObj=
{
props
.
location
.
state
.
formObj
}
type=
{
isType
}
record=
{
record1
}
// maxLength={maxLength}
onClose=
{
()
=>
setAddVisible
(
false
)
}
callBackSubmit=
{
onOK
}
placement=
"right"
/>
</>
return
(
<>
<
Spin
tip=
"loading..."
spinning=
{
treeLoading
}
>
<
div
className=
{
styles
.
containerBox
}
>
<
div
className=
{
styles
.
config
}
>
<
div
className=
{
styles
.
title
}
>
{
`${
props.location.state.title1
}受理流程和权限`
}
</
div
>
<
div
className=
{
styles
.
btn
}
>
<
Button
type=
"primary"
icon=
{
<
PlusSquareOutlined
/>
}
onClick=
{
()
=>
addIncident
()
}
>
新增
</
Button
>
<
Button
type=
"primary"
icon=
{
<
RollbackOutlined
/>
}
onClick=
{
()
=>
back
()
}
>
返回
</
Button
>
</
div
>
</
div
>
)
}
export
default
incidentFlow
;
\ No newline at end of file
<
Table
size=
"small"
rowKey=
"ID"
bordered
style=
{
{
overflowY
:
'scroll'
}
}
onRow=
{
record
=>
({
onDoubleClick
:
event
=>
{
event
.
stopPropagation
();
editEventType
(
record
);
},
// 双击
})
}
columns=
{
columns
}
dataSource=
{
tableData
}
pagination=
{
false
}
/>
</
div
>
</
Spin
>
<
AddFlowsModal
visible=
{
addVisible
}
obj=
{
obj
}
formObj=
{
props
.
location
.
state
.
formObj
}
type=
{
isType
}
record=
{
record1
}
// maxLength={maxLength}
onClose=
{
()
=>
setAddVisible
(
false
)
}
callBackSubmit=
{
onOK
}
placement=
"right"
/>
</>
);
};
export
default
incidentFlow
;
src/pages/platformCenter/messageManage/projectManage/ProjectManage.jsx
View file @
b70a5514
import
React
,
{
useEffect
,
useState
}
from
'react'
/* eslint-disable array-callback-return */
/* eslint-disable no-shadow */
/* eslint-disable indent */
/* eslint-disable eqeqeq */
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
// Tree,
Table
,
Space
,
Input
,
Button
,
Select
,
Popconfirm
,
message
,
Tooltip
,
Spin
// Tree,
Table
,
Space
,
Input
,
Button
,
Select
,
Popconfirm
,
message
,
Tooltip
,
Spin
,
}
from
'antd'
;
import
{
PlusCircleOutlined
,
EditTwoTone
,
DeleteOutlined
,
FundViewOutlined
,
FieldTimeOutlined
}
from
'@ant-design/icons'
;
import
{
PlusCircleOutlined
,
EditTwoTone
,
DeleteOutlined
,
FundViewOutlined
,
FieldTimeOutlined
,
}
from
'@ant-design/icons'
;
import
{
useHistory
}
from
'react-router-dom'
;
import
EditModal
from
'./components/EditModal'
;
import
VisibleRoleModal
from
'./components/RolseSelect/VisibleRoleModal'
;
import
{
GetMessageConfigList
,
TestPush
,
DeleteMessageConfig
,
GetMsgTypeList
,
DeleteIISAgentConfig
,
}
from
'@/services/platform/messagemanage'
;
import
styles
from
'./ProjectManage.less'
;
const
{
Search
}
=
Input
;
const
{
Option
}
=
Select
;
import
EditModal
from
'./components/EditModal'
import
VisibleRoleModal
from
'./components/RolseSelect/VisibleRoleModal'
import
{
GetMessageConfigList
,
TestPush
,
DeleteMessageConfig
,
GetMsgTypeList
,
DeleteIISAgentConfig
}
from
'@/services/platform/messagemanage'
import
styles
from
'./ProjectManage.less'
const
ProjectManage
=
()
=>
{
const
history
=
useHistory
();
const
[
visibleParams
,
setvisibleParams
]
=
useState
({
addVisible
:
false
,
// 新增弹窗
delVisible
:
false
,
// 删除弹窗
editVisible
:
false
,
// 修改弹窗
spinLoading
:
false
,
// 加载弹窗
btnLoading
:
false
,
loading
:
false
,
checkBoxLoading
:
false
,
});
const
[
currentType
,
setCurrentType
]
=
useState
(
"全部"
)
const
[
currentName
,
setCurrentName
]
=
useState
(
"全部"
)
const
[
messageTypes
,
setMessageTypes
]
=
useState
([])
const
[
currentTemplate
,
setCurrentTempalte
]
=
useState
({});
const
[
flag
,
setFlag
]
=
useState
(
0
)
const
[
pageIndex
,
setPageIndex
]
=
useState
(
0
)
const
[
pageSize
,
setPageSize
]
=
useState
(
10
)
const
[
dataList
,
setDataList
]
=
useState
([])
const
[
treeLoading
,
setTreeLoading
]
=
useState
(
false
);
const
[
showSearchStyle
,
setShowSearchStyle
]
=
useState
(
false
);
// 是否显示模糊查询样式
const
[
value
,
setValue
]
=
useState
(
''
)
const
columns
=
[
{
title
:
'方案名称'
,
dataIndex
:
'name'
,
key
:
'name'
,
render
:
(
text
,
record
)
=>
(
<
div
>
{
record
.
type
==
'定时推送'
?
searchStyle
(
text
)
:
<
div
style=
{
{
display
:
'flex'
,
alignItems
:
'center'
}
}
>
<
Tooltip
title=
{
text
}
>
<
FieldTimeOutlined
style=
{
{
fontSize
:
'16px'
,
color
:
'#1890FF'
,
marginRight
:
'0.1rem'
}
}
/>
</
Tooltip
>
{
searchStyle
(
text
)
}
</
div
>
}
</
div
>
),
},
{
title
:
'方案类型'
,
dataIndex
:
'type'
,
key
:
'type'
,
},
{
title
:
'推送方式'
,
dataIndex
:
'send_pattern'
,
key
:
'send_pattern'
,
},
{
title
:
'推送组'
,
dataIndex
:
'receive_person'
,
key
:
'receive_person'
,
},
{
title
:
'是否启用'
,
dataIndex
:
'is_use'
,
key
:
'is_use'
,
render
:
(
text
,
record
)
=>
(
<
div
>
{
text
===
"0"
?
"否"
:
"是"
}
</
div
>
)
},
{
title
:
'操作'
,
width
:
250
,
ellipsis
:
true
,
render
:
(
text
,
record
)
=>
(
<
Space
>
<
Tooltip
title=
"测试"
>
<
FundViewOutlined
style=
{
{
fontSize
:
'16px'
,
color
:
'#1890FF'
}
}
onClick=
{
()
=>
{
TestDesc
(
record
);
}
}
/>
</
Tooltip
>
<
Tooltip
title=
"编辑"
>
<
EditTwoTone
style=
{
{
fontSize
:
'16px'
,
color
:
'#e86060'
}
}
onClick=
{
()
=>
{
changeDesc
(
record
);
}
}
></
EditTwoTone
>
</
Tooltip
>
{
record
.
name
!=
"通用报警"
&&
record
.
name
!=
"工单提醒"
&&
record
.
name
!=
"系统通知"
&&
(<
div
onClick=
{
e
=>
e
.
stopPropagation
()
}
>
<
Popconfirm
title=
"是否删除方案?"
okText=
"确认"
cancelText=
"取消"
onConfirm=
{
()
=>
{
DeleteProject
(
record
)
}
}
>
const
history
=
useHistory
();
const
[
visibleParams
,
setvisibleParams
]
=
useState
({
addVisible
:
false
,
// 新增弹窗
delVisible
:
false
,
// 删除弹窗
editVisible
:
false
,
// 修改弹窗
spinLoading
:
false
,
// 加载弹窗
btnLoading
:
false
,
loading
:
false
,
checkBoxLoading
:
false
,
});
const
[
currentType
,
setCurrentType
]
=
useState
(
'全部'
);
const
[
currentName
,
setCurrentName
]
=
useState
(
'全部'
);
const
[
messageTypes
,
setMessageTypes
]
=
useState
([]);
const
[
currentTemplate
,
setCurrentTempalte
]
=
useState
({});
const
[
flag
,
setFlag
]
=
useState
(
0
);
const
[
pageIndex
,
setPageIndex
]
=
useState
(
0
);
const
[
pageSize
,
setPageSize
]
=
useState
(
10
);
const
[
dataList
,
setDataList
]
=
useState
([]);
const
[
treeLoading
,
setTreeLoading
]
=
useState
(
false
);
const
[
showSearchStyle
,
setShowSearchStyle
]
=
useState
(
false
);
// 是否显示模糊查询样式
const
[
value
,
setValue
]
=
useState
(
''
);
const
columns
=
[
{
title
:
'方案名称'
,
dataIndex
:
'name'
,
key
:
'name'
,
render
:
(
text
,
record
)
=>
(
<
div
>
{
record
.
type
===
'定时推送'
?
(
searchStyle
(
text
)
)
:
(
<
div
style=
{
{
display
:
'flex'
,
alignItems
:
'center'
}
}
>
<
Tooltip
title=
{
text
}
>
<
FieldTimeOutlined
style=
{
{
fontSize
:
'16px'
,
color
:
'#1890FF'
,
marginRight
:
'0.1rem'
,
}
}
/>
</
Tooltip
>
{
searchStyle
(
text
)
}
</
div
>
)
}
</
div
>
),
},
{
title
:
'方案类型'
,
dataIndex
:
'type'
,
key
:
'type'
,
},
{
title
:
'推送方式'
,
dataIndex
:
'send_pattern'
,
key
:
'send_pattern'
,
},
{
title
:
'推送组'
,
dataIndex
:
'receive_person'
,
key
:
'receive_person'
,
},
{
title
:
'是否启用'
,
dataIndex
:
'is_use'
,
key
:
'is_use'
,
render
:
(
text
,
record
)
=>
<
div
>
{
text
===
'0'
?
'否'
:
'是'
}
</
div
>,
},
{
title
:
'操作'
,
width
:
250
,
ellipsis
:
true
,
render
:
(
text
,
record
)
=>
(
<
Space
>
<
Tooltip
title=
"测试"
>
<
FundViewOutlined
style=
{
{
fontSize
:
'16px'
,
color
:
'#1890FF'
}
}
onClick=
{
()
=>
{
TestDesc
(
record
);
}
}
/>
</
Tooltip
>
<
Tooltip
title=
"编辑"
>
<
EditTwoTone
style=
{
{
fontSize
:
'16px'
,
color
:
'#e86060'
}
}
onClick=
{
()
=>
{
changeDesc
(
record
);
}
}
/>
</
Tooltip
>
<
DeleteOutlined
style=
{
{
fontSize
:
'16px'
,
color
:
'#e86060'
}
}
></
DeleteOutlined
>
</
Popconfirm
>
</
div
>)
}
</
Space
>
),
},
{
record
.
name
!=
'通用报警'
&&
record
.
name
!=
'工单提醒'
&&
record
.
name
!=
'系统通知'
&&
(
<
div
onClick=
{
e
=>
e
.
stopPropagation
()
}
>
<
Popconfirm
title=
"是否删除方案?"
okText=
"确认"
cancelText=
"取消"
onConfirm=
{
()
=>
{
DeleteProject
(
record
);
}
}
>
<
DeleteOutlined
style=
{
{
fontSize
:
'16px'
,
color
:
'#e86060'
}
}
/>
</
Popconfirm
>
</
div
>
)
}
</
Space
>
),
},
];
];
// 模糊查询匹配的样式
const
searchStyle
=
val
=>
{
console
.
log
(
val
);
console
.
log
(
value
);
let
n
;
if
(
showSearchStyle
)
{
n
=
val
.
replace
(
new
RegExp
(
value
,
'g'
),
`<span style='color:red'>
${
value
}
</span>`
,
);
}
else
{
n
=
val
;
}
console
.
log
(
val
);
return
<
div
dangerouslySetInnerHTML=
{
{
__html
:
n
}
}
/>;
};
// 模糊查询匹配的样式
const
searchStyle
=
val
=>
{
console
.
log
(
val
)
console
.
log
(
value
)
let
n
;
if
(
showSearchStyle
)
{
n
=
val
.
replace
(
new
RegExp
(
value
,
'g'
),
`<span style='color:red'>
${
value
}
</span>`
,
);
const
placeholder
=
'请输入方案名称'
;
const
handleSearch
=
value
=>
{
GetMessageList
({
pageSize
:
10
,
pageIndex
:
0
,
search
:
value
});
setShowSearchStyle
(
true
);
};
const
changeDesc
=
record
=>
{
setCurrentTempalte
(
record
);
history
.
push
({
pathname
:
`/platformCenter/schemeDetail`
,
state
:
{
template
:
record
},
});
// handleShowModal("editVisible", true)
};
const
TestDesc
=
record
=>
{
if
(
record
.
ThemeName
)
TestPush
({
theme
:
record
.
ThemeName
,
msgType
:
record
.
MsgType
,
tousers
:
record
.
PushGroup
,
pushPath
:
record
.
item
.
AgentConfig
?
record
.
item
.
AgentConfig
.
Url
:
''
,
msgTypeId
:
record
.
ID
,
}).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
message
.
success
(
'测试推送成功'
);
}
else
{
n
=
val
;
message
.
error
(
res
.
msg
)
;
}
console
.
log
(
val
)
return
<
div
dangerouslySetInnerHTML=
{
{
__html
:
n
}
}
/>;
};
const
placeholder
=
'请输入方案名称'
const
handleSearch
=
(
value
)
=>
{
GetMessageList
({
pageSize
:
10
,
pageIndex
:
0
,
search
:
value
})
setShowSearchStyle
(
true
);
}
const
changeDesc
=
(
record
)
=>
{
setCurrentTempalte
(
record
)
history
.
push
({
pathname
:
`/platformCenter/schemeDetail`
,
state
:
{
template
:
record
}
})
// handleShowModal("editVisible", true)
}
const
TestDesc
=
(
record
)
=>
{
if
(
record
.
ThemeName
)
TestPush
({
theme
:
record
.
ThemeName
,
msgType
:
record
.
MsgType
,
tousers
:
record
.
PushGroup
,
pushPath
:
record
.
item
.
AgentConfig
?
record
.
item
.
AgentConfig
.
Url
:
''
,
msgTypeId
:
record
.
ID
}).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
message
.
success
(
"测试推送成功"
)
}
else
{
message
.
error
(
res
.
msg
)
}
}
)
}
const
DeleteProject
=
(
record
)
=>
{
let
agen
=
record
.
item
.
AgentConfig
let
config
=
record
.
item
.
MessageConfig
if
(
agen
)
{
DeleteIISAgentConfig
({
agentName
:
config
.
MsgType
}).
then
(
res
=>
{
if
(
res
===
0
)
{
DeleteMessageConfig
({
id
:
config
.
ID
}).
then
(
res3
=>
{
if
(
res3
.
code
===
0
)
{
message
.
success
(
"删除方案成功"
)
setFlag
(
flag
+
1
)
}
}
)
}
else
{
message
.
error
(
res
.
msg
)
}
}
)
});
};
const
DeleteProject
=
record
=>
{
let
agen
=
record
.
item
.
AgentConfig
;
let
config
=
record
.
item
.
MessageConfig
;
if
(
agen
)
{
DeleteIISAgentConfig
({
agentName
:
config
.
MsgType
,
}).
then
(
res
=>
{
if
(
res
===
0
)
{
DeleteMessageConfig
({
id
:
config
.
ID
,
}).
then
(
res3
=>
{
if
(
res3
.
code
===
0
)
{
message
.
success
(
'删除方案成功'
);
setFlag
(
flag
+
1
);
}
});
}
else
{
DeleteMessageConfig
({
id
:
config
.
ID
}).
then
(
res3
=>
{
if
(
res3
.
code
===
0
)
{
message
.
success
(
"删除方案成功"
)
setFlag
(
flag
+
1
)
}
}
)
message
.
error
(
res
.
msg
);
}
}
const
handleReset
=
()
=>
{
setCurrentType
(
"全部"
)
setCurrentName
(
"全部"
)
GetMessageList
({
pageSize
:
10
,
pageIndex
:
0
})
setShowSearchStyle
(
false
);
setValue
(
''
)
}
// 弹出模态框
const
handleShowModal
=
(
key
,
value
)
=>
{
setvisibleParams
({
...
visibleParams
,
[
key
]:
value
});
};
const
editModal
=
()
=>
{
handleShowModal
(
"editVisbile"
,
false
)
setFlag
(
flag
+
1
)
}
const
bddModal
=
()
=>
{
handleShowModal
(
"addVisbile"
,
false
)
setFlag
(
flag
+
1
)
}
const
onAddClick
=
()
=>
{
setCurrentTempalte
({})
// handleShowModal("addVisible", true)
history
.
push
({
pathname
:
`/platformCenter/schemeDetail`
,
state
:
{
template
:
{}
}
})
}
const
onTypeChange
=
(
value
)
=>
{
if
(
value
==
"全部"
)
{
setCurrentType
(
""
)
GetMessageList
({
pageIndex
:
pageIndex
,
pageSize
:
10
})
}
else
{
GetMessageList
({
pageIndex
:
pageIndex
,
pageSize
:
10
,
infoType
:
value
,
msgType
:
currentName
==
"全部"
?
""
:
currentName
})
setCurrentType
(
value
)
});
}
else
{
DeleteMessageConfig
({
id
:
config
.
ID
,
}).
then
(
res3
=>
{
if
(
res3
.
code
===
0
)
{
message
.
success
(
'删除方案成功'
);
setFlag
(
flag
+
1
);
}
});
}
const
onNameChange
=
(
value
)
=>
{
if
(
value
==
"全部"
)
{
setCurrentName
(
""
)
GetMessageList
({
pageIndex
:
pageIndex
,
pageSize
:
10
})
}
else
{
GetMessageList
({
pageIndex
:
pageIndex
,
pageSize
:
10
,
msgType
:
value
,
infoType
:
currentType
==
"全部"
?
""
:
currentType
})
setCurrentName
(
value
)
}
};
const
handleReset
=
()
=>
{
setCurrentType
(
'全部'
);
setCurrentName
(
'全部'
);
GetMessageList
({
pageSize
:
10
,
pageIndex
:
0
});
setShowSearchStyle
(
false
);
setValue
(
''
);
};
// 弹出模态框
const
handleShowModal
=
(
key
,
value
)
=>
{
setvisibleParams
({
...
visibleParams
,
[
key
]:
value
});
};
const
editModal
=
()
=>
{
handleShowModal
(
'editVisbile'
,
false
);
setFlag
(
flag
+
1
);
};
const
bddModal
=
()
=>
{
handleShowModal
(
'addVisbile'
,
false
);
setFlag
(
flag
+
1
);
};
const
onAddClick
=
()
=>
{
setCurrentTempalte
({});
// handleShowModal("addVisible", true)
history
.
push
({
pathname
:
`/platformCenter/schemeDetail`
,
state
:
{
template
:
{}
},
});
};
const
onTypeChange
=
value
=>
{
if
(
value
==
'全部'
)
{
setCurrentType
(
''
);
GetMessageList
({
pageIndex
,
pageSize
:
10
});
}
else
{
GetMessageList
({
pageIndex
,
pageSize
:
10
,
infoType
:
value
,
msgType
:
currentName
==
'全部'
?
''
:
currentName
,
});
setCurrentType
(
value
);
}
};
const
onNameChange
=
value
=>
{
if
(
value
==
'全部'
)
{
setCurrentName
(
''
);
GetMessageList
({
pageIndex
,
pageSize
:
10
});
}
else
{
GetMessageList
({
pageIndex
,
pageSize
:
10
,
msgType
:
value
,
infoType
:
currentType
==
'全部'
?
''
:
currentType
,
});
setCurrentName
(
value
);
}
};
useEffect
(()
=>
{
setTreeLoading
(
true
)
GetMsgTypeList
().
then
(
res
=>
{
setTreeLoading
(
false
)
if
(
res
.
code
===
0
)
{
setMessageTypes
(
res
.
data
)
}
}
)
},
[])
useEffect
(()
=>
{
GetMessageList
({
pageIndex
:
pageIndex
,
pageSize
:
10
})
},
[
flag
])
const
GetMessageList
=
(
params
)
=>
{
setTreeLoading
(
true
)
GetMessageConfigList
(
params
).
then
(
res
=>
{
setTreeLoading
(
false
)
let
mesList
=
[]
if
(
res
.
code
===
0
)
{
res
.
data
.
MessageConfigModels
.
map
((
item
)
=>
{
mesList
.
push
({
name
:
item
.
MessageConfig
.
MsgType
,
type
:
item
.
MessageConfig
.
ThemeName
,
send_pattern
:
item
.
MessageConfig
.
PushMode
,
receive_person
:
item
.
MessageConfig
.
PushGroup
,
is_use
:
item
.
MessageConfig
.
IsStarted
,
...
item
.
MessageConfig
,
item
:
item
})
})
useEffect
(()
=>
{
setTreeLoading
(
true
);
GetMsgTypeList
().
then
(
res
=>
{
setTreeLoading
(
false
);
if
(
res
.
code
===
0
)
{
setMessageTypes
(
res
.
data
);
}
});
},
[]);
useEffect
(()
=>
{
GetMessageList
({
pageIndex
,
pageSize
:
10
});
},
[
flag
]);
setDataList
(
mesList
)
}
}
)
}
const
GetMessageList
=
params
=>
{
setTreeLoading
(
true
);
GetMessageConfigList
(
params
).
then
(
res
=>
{
setTreeLoading
(
false
);
let
mesList
=
[];
if
(
res
.
code
===
0
)
{
res
.
data
.
MessageConfigModels
.
map
(
item
=>
{
mesList
.
push
({
name
:
item
.
MessageConfig
.
MsgType
,
type
:
item
.
MessageConfig
.
ThemeName
,
send_pattern
:
item
.
MessageConfig
.
PushMode
,
receive_person
:
item
.
MessageConfig
.
PushGroup
,
is_use
:
item
.
MessageConfig
.
IsStarted
,
...
item
.
MessageConfig
,
item
,
});
});
const
handleChange
=
e
=>
{
setValue
(
e
.
target
.
value
)
}
setDataList
(
mesList
);
}
});
};
const
pagenation
=
{
showTotal
:
(
total
,
range
)
=>
`第
${
range
[
0
]}
-
${
range
[
1
]}
条/共
${
total
}
条`
,
pageSizeOptions
:
[
10
,
20
,
50
,
100
],
defaultPageSize
:
10
,
showQuickJumper
:
true
,
showSizeChanger
:
true
,
};
return
(
<
div
className=
{
styles
.
project_container
}
>
<
Spin
tip=
"loading..."
spinning=
{
treeLoading
}
>
<
div
className=
{
styles
.
operate_bar
}
>
<
div
className=
{
styles
.
template_type
}
>
<
div
className=
{
styles
.
title
}
>
方案类型
</
div
>
<
Select
placeholder=
"请选择方案类型!"
defaultValue=
{
currentType
}
style=
{
{
width
:
"150px"
}
}
onChange=
{
onTypeChange
}
>
<
Option
value=
"全部"
>
全部
</
Option
>
<
Option
value=
"监控报警"
>
监控报警
</
Option
>
<
Option
value=
"工单办理"
>
工单办理
</
Option
>
<
Option
value=
"平台公告"
>
平台公告
</
Option
>
<
Option
value=
"定时推送"
>
定时推送
</
Option
>
</
Select
>
</
div
>
<
div
className=
{
styles
.
template_type
}
>
<
div
className=
{
styles
.
title
}
>
方案名称
</
div
>
<
Select
placeholder=
"请选择方案名称!"
defaultValue=
{
currentName
}
style=
{
{
width
:
"150px"
}
}
onChange=
{
onNameChange
}
>
<
Option
value=
"全部"
>
全部
</
Option
>
{
messageTypes
.
map
((
item
,
idx
)
=>
{
return
(
<
Option
key=
{
idx
}
value=
{
item
.
MsgType
}
>
{
item
.
MsgType
}
</
Option
>
)
})
}
</
Select
>
</
div
>
<
div
className=
{
styles
.
fast_search
}
>
<
div
className=
{
styles
.
title
}
>
快速检索
</
div
>
<
Search
allowClear
placeholder=
{
placeholder
}
onSearch=
{
handleSearch
}
onChange=
{
e
=>
{
handleChange
(
e
)}
}
enterButton
style=
{
{
width
:
"300px"
}
}
value=
{
value
}
/>
</
div
>
<
Button
type=
"primary"
onClick=
{
handleReset
}
>
重置
</
Button
>
<
Button
type=
"primary"
style=
{
{
marginLeft
:
"10px"
}
}
icon=
{
<
PlusCircleOutlined
/>
}
onClick=
{
onAddClick
}
><
span
style=
{
{
marginTop
:
"-3px"
}
}
>
新增
</
span
></
Button
>
const
handleChange
=
e
=>
{
setValue
(
e
.
target
.
value
);
};
</
div
>
<
div
className=
{
styles
.
list_view
}
>
<
Table
bordered
columns=
{
columns
}
dataSource=
{
dataList
}
pagination=
{
pagenation
}
rowKey=
'ID'
/>
</
div
>
<
EditModal
visible=
{
visibleParams
.
editVisible
}
template=
{
currentTemplate
}
onCancel=
{
()
=>
handleShowModal
(
'editVisible'
,
false
)
}
confirmModal=
{
editModal
}
/>
<
EditModal
visible=
{
visibleParams
.
addVisible
}
template=
{
{}
}
onCancel=
{
()
=>
handleShowModal
(
'addVisible'
,
false
)
}
confirmModal=
{
bddModal
}
/>
</
Spin
>
const
pagenation
=
{
showTotal
:
(
total
,
range
)
=>
`第
${
range
[
0
]}
-
${
range
[
1
]}
条/共
${
total
}
条`
,
pageSizeOptions
:
[
10
,
20
,
50
,
100
],
defaultPageSize
:
10
,
showQuickJumper
:
true
,
showSizeChanger
:
true
,
};
return
(
<
div
className=
{
styles
.
project_container
}
>
<
Spin
tip=
"loading..."
spinning=
{
treeLoading
}
>
<
div
className=
{
styles
.
operate_bar
}
>
<
div
className=
{
styles
.
template_type
}
>
<
div
className=
{
styles
.
title
}
>
方案类型
</
div
>
<
Select
placeholder=
"请选择方案类型!"
value=
{
currentType
}
style=
{
{
width
:
'150px'
}
}
onChange=
{
onTypeChange
}
>
<
Option
value=
"全部"
>
全部
</
Option
>
<
Option
value=
"监控报警"
>
监控报警
</
Option
>
<
Option
value=
"工单办理"
>
工单办理
</
Option
>
<
Option
value=
"平台公告"
>
平台公告
</
Option
>
<
Option
value=
"定时推送"
>
定时推送
</
Option
>
</
Select
>
</
div
>
<
div
className=
{
styles
.
template_type
}
>
<
div
className=
{
styles
.
title
}
>
方案名称
</
div
>
<
Select
placeholder=
"请选择方案名称!"
value=
{
currentName
}
style=
{
{
width
:
'150px'
}
}
onChange=
{
onNameChange
}
>
<
Option
value=
"全部"
>
全部
</
Option
>
{
messageTypes
.
map
((
item
,
idx
)
=>
(
<
Option
key=
{
idx
}
value=
{
item
.
MsgType
}
>
{
item
.
MsgType
}
</
Option
>
))
}
</
Select
>
</
div
>
<
div
className=
{
styles
.
fast_search
}
>
<
div
className=
{
styles
.
title
}
>
快速检索
</
div
>
<
Search
allowClear
placeholder=
{
placeholder
}
onSearch=
{
handleSearch
}
onChange=
{
e
=>
{
handleChange
(
e
);
}
}
enterButton
style=
{
{
width
:
'300px'
}
}
value=
{
value
}
/>
</
div
>
<
Button
type=
"primary"
onClick=
{
handleReset
}
>
重置
</
Button
>
<
Button
type=
"primary"
style=
{
{
marginLeft
:
'10px'
}
}
icon=
{
<
PlusCircleOutlined
/>
}
onClick=
{
onAddClick
}
>
<
span
style=
{
{
marginTop
:
'-3px'
}
}
>
新增
</
span
>
</
Button
>
</
div
>
<
div
className=
{
styles
.
list_view
}
>
<
Table
bordered
columns=
{
columns
}
dataSource=
{
dataList
}
pagination=
{
pagenation
}
rowKey=
"ID"
/>
</
div
>
)
}
export
default
ProjectManage
;
\ No newline at end of file
<
EditModal
visible=
{
visibleParams
.
editVisible
}
template=
{
currentTemplate
}
onCancel=
{
()
=>
handleShowModal
(
'editVisible'
,
false
)
}
confirmModal=
{
editModal
}
/>
<
EditModal
visible=
{
visibleParams
.
addVisible
}
template=
{
{}
}
onCancel=
{
()
=>
handleShowModal
(
'addVisible'
,
false
)
}
confirmModal=
{
bddModal
}
/>
</
Spin
>
</
div
>
);
};
export
default
ProjectManage
;
src/pages/platformCenter/messageManage/templateManage/TemplateManage.jsx
View file @
b70a5514
import
React
,
{
useEffect
,
useState
}
from
'react'
/* eslint-disable array-callback-return */
/* eslint-disable eqeqeq */
/* eslint-disable no-shadow */
/* eslint-disable spaced-comment */
/* eslint-disable import/first */
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
// Tree,
Table
,
Space
,
Input
,
Button
,
Select
,
Popconfirm
,
message
,
Tooltip
,
notification
,
Spin
// Tree,
Table
,
Space
,
Input
,
Button
,
Select
,
Popconfirm
,
message
,
Tooltip
,
notification
,
Spin
,
}
from
'antd'
;
import
{
PlusCircleOutlined
,
EditTwoTone
,
DeleteOutlined
}
from
'@ant-design/icons'
;
import
{
PlusCircleOutlined
,
EditTwoTone
,
DeleteOutlined
,
}
from
'@ant-design/icons'
;
const
{
Search
}
=
Input
;
const
{
Option
}
=
Select
;
import
EditModal
from
'./components/EditModal'
import
AddModal
from
'./components/AddModal'
import
{
GetMessageTemplate
,
UpdateMessageTemplate
,
DeleteMessageTemplate
,
InsertMessageTemplate
,
GetThirdpartyTemplates
}
from
'@/services/platform/messagemanage'
import
styles
from
'./TemplateManage.less'
import
EditModal
from
'./components/EditModal'
;
import
AddModal
from
'./components/AddModal'
;
import
{
GetMessageTemplate
,
UpdateMessageTemplate
,
DeleteMessageTemplate
,
InsertMessageTemplate
,
GetThirdpartyTemplates
,
}
from
'@/services/platform/messagemanage'
;
import
styles
from
'./TemplateManage.less'
;
const
TemplateManage
=
()
=>
{
const
[
visibleParams
,
setvisibleParams
]
=
useState
({
addVisible
:
false
,
// 新增弹窗
delVisible
:
false
,
// 删除弹窗
editVisible
:
false
,
// 修改弹窗
spinLoading
:
false
,
// 加载弹窗
btnLoading
:
false
,
loading
:
false
,
checkBoxLoading
:
false
,
});
const
[
currentTemplate
,
setCurrentTempalte
]
=
useState
({});
const
[
data
,
setData
]
=
useState
([]);
const
[
flag
,
setFlag
]
=
useState
(
0
);
const
[
option
,
setOption
]
=
useState
([]);
// 下拉列表数据
const
[
treeLoading
,
setTreeLoading
]
=
useState
(
false
);
const
[
showSearchStyle
,
setShowSearchStyle
]
=
useState
(
false
);
// 是否显示模糊查询样式
const
[
value
,
setValue
]
=
useState
(
''
);
const
[
currentType
,
setCurrentType
]
=
useState
(
'全部'
);
const
[
visibleParams
,
setvisibleParams
]
=
useState
({
addVisible
:
false
,
// 新增弹窗
delVisible
:
false
,
// 删除弹窗
editVisible
:
false
,
// 修改弹窗
spinLoading
:
false
,
// 加载弹窗
btnLoading
:
false
,
loading
:
false
,
checkBoxLoading
:
false
,
});
const
[
currentTemplate
,
setCurrentTempalte
]
=
useState
({});
const
[
data
,
setData
]
=
useState
([])
const
[
flag
,
setFlag
]
=
useState
(
0
)
const
[
option
,
setOption
]
=
useState
([]);
// 下拉列表数据
const
[
treeLoading
,
setTreeLoading
]
=
useState
(
false
);
const
[
showSearchStyle
,
setShowSearchStyle
]
=
useState
(
false
);
// 是否显示模糊查询样式
const
[
value
,
setValue
]
=
useState
(
''
)
useEffect
(()
=>
{
getTemplateList
()
selectFocus
()
},
[
flag
])
const
getTemplateList
=
(
obj
)
=>
{
setTreeLoading
(
true
)
GetMessageTemplate
(
obj
).
then
(
res
=>
{
setTreeLoading
(
false
)
let
list
=
[]
if
(
res
.
code
===
0
)
{
res
.
data
.
map
((
item
,
index
)
=>
{
list
.
push
({
key
:
item
.
Id
,
Id
:
item
.
Id
,
name
:
item
.
LikeName
,
type
:
item
.
Type
,
third_name
:
item
.
Name
,
third_id
:
item
.
No
,
template_params2
:
item
.
ParsingParams
,
//模板参数2.0
template_params1
:
item
.
TParameters
,
//模板参数1.0
analysis_params
:
item
.
ParsingRules
,
//模板解析
desc
:
item
.
ParsingDescription
,
//模板参数说明
weixin
:
item
.
WorkWeiXinId
//企业微信ID
})
})
setData
(
list
)
}
}
).
catch
(
e
=>
{
setTreeLoading
(
false
)
})
}
useEffect
(()
=>
{
getTemplateList
();
selectFocus
();
},
[
flag
]);
const
selectFocus
=
(
obj
)
=>
{
GetThirdpartyTemplates
(
obj
).
then
(
res
=>
{
if
(
res
.
msg
===
"Ok"
)
{
console
.
log
(
res
.
data
)
setOption
(
res
.
data
);
}
else
{
notification
.
error
({
message
:
'提示'
,
duration
:
15
,
description
:
res
.
message
,
});
}
})
.
catch
(
err
=>
{
console
.
error
(
err
);
const
getTemplateList
=
obj
=>
{
setTreeLoading
(
true
);
GetMessageTemplate
(
obj
)
.
then
(
res
=>
{
setTreeLoading
(
false
);
let
list
=
[];
if
(
res
.
code
===
0
)
{
res
.
data
.
map
((
item
,
index
)
=>
{
list
.
push
({
key
:
item
.
Id
,
Id
:
item
.
Id
,
name
:
item
.
LikeName
,
type
:
item
.
Type
,
third_name
:
item
.
Name
,
third_id
:
item
.
No
,
template_params2
:
item
.
ParsingParams
,
//模板参数2.0
template_params1
:
item
.
TParameters
,
//模板参数1.0
analysis_params
:
item
.
ParsingRules
,
//模板解析
desc
:
item
.
ParsingDescription
,
//模板参数说明
weixin
:
item
.
WorkWeiXinId
,
//企业微信ID
});
};
const
columns
=
[
{
title
:
'编号'
,
dataIndex
:
'Id'
,
key
:
'Id'
,
align
:
'center'
,
width
:
80
,
render
:
text
=>
<
a
>
{
text
}
</
a
>,
},
{
title
:
'模板名称'
,
dataIndex
:
'name'
,
key
:
'name'
,
align
:
'center'
,
render
:
item
=>
searchStyle
(
item
),
},
{
title
:
'模板类型'
,
dataIndex
:
'type'
,
key
:
'type'
,
align
:
'center'
,
},
{
title
:
'第三方模板名称'
,
dataIndex
:
'third_name'
,
key
:
'third_name'
,
align
:
'center'
,
},
{
title
:
'企业微信ID'
,
dataIndex
:
'weixin'
,
key
:
'weixin'
,
align
:
'center'
,
},
{
title
:
'第三方模版编号'
,
dataIndex
:
'third_id'
,
key
:
'third_id'
,
align
:
'center'
,
},
{
title
:
'模板参数1.0'
,
dataIndex
:
'template_params1'
,
key
:
'template_params1'
,
align
:
'center'
,
},
{
title
:
'模板参数2.0'
,
dataIndex
:
'template_params2'
,
key
:
'template_params2'
,
align
:
'center'
,
},
{
title
:
'模板参数说明'
,
dataIndex
:
'desc'
,
key
:
'desc'
,
align
:
'center'
,
},
{
title
:
'解析规则'
,
dataIndex
:
'analysis_params'
,
key
:
'analysis_params'
,
align
:
'center'
,
},
{
title
:
'操作'
,
dataIndex
:
'action'
,
key
:
'action'
,
align
:
'center'
,
width
:
150
,
ellipsis
:
true
,
render
:
(
text
,
record
)
=>
(
<
Space
>
<
Tooltip
title=
"编辑"
>
<
EditTwoTone
type=
"primary"
size=
"small"
onClick=
{
()
=>
{
changeDesc
(
record
);
}
}
style=
{
{
fontSize
:
'16px'
}
}
/>
</
Tooltip
>
<
Tooltip
title=
"删除"
>
<
div
onClick=
{
e
=>
e
.
stopPropagation
()
}
>
<
Popconfirm
placement=
"bottomRight"
title=
"是否删除该模板?"
okText=
"确认"
cancelText=
"取消"
onConfirm=
{
()
=>
{
delTemplate
(
record
);
}
}
>
<
DeleteOutlined
style=
{
{
fontSize
:
'16px'
,
color
:
'#e86060'
}
}
/>
</
Popconfirm
>
</
div
>
</
Tooltip
>
</
Space
>
),
},
];
});
setData
(
list
);
}
})
.
catch
(
e
=>
{
setTreeLoading
(
false
);
});
};
// 模糊查询匹配的样式
const
searchStyle
=
val
=>
{
let
n
;
if
(
showSearchStyle
)
{
n
=
val
.
replace
(
new
RegExp
(
value
,
'g'
),
`<span style='color:red'>
${
value
}
</span>`
,
);
const
selectFocus
=
obj
=>
{
GetThirdpartyTemplates
(
obj
)
.
then
(
res
=>
{
if
(
res
.
msg
===
'Ok'
)
{
console
.
log
(
res
.
data
);
setOption
(
res
.
data
);
}
else
{
n
=
val
;
notification
.
error
({
message
:
'提示'
,
duration
:
15
,
description
:
res
.
message
,
});
}
console
.
log
(
n
)
return
<
div
dangerouslySetInnerHTML=
{
{
__html
:
n
}
}
/>;
};
})
.
catch
(
err
=>
{
console
.
error
(
err
);
});
};
const
placeholder
=
'请输入模板名称'
const
handleSearch
=
(
value
)
=>
{
setValue
(
value
)
getTemplateList
({
queryInfo
:
value
})
setShowSearchStyle
(
true
);
}
const
handleReset
=
()
=>
{
getTemplateList
()
setValue
(
''
)
setShowSearchStyle
(
false
);
const
columns
=
[
{
title
:
'编号'
,
dataIndex
:
'Id'
,
key
:
'Id'
,
align
:
'center'
,
width
:
80
,
render
:
text
=>
<
a
>
{
text
}
</
a
>,
},
{
title
:
'模板名称'
,
dataIndex
:
'name'
,
key
:
'name'
,
align
:
'center'
,
render
:
item
=>
searchStyle
(
item
),
},
{
title
:
'模板类型'
,
dataIndex
:
'type'
,
key
:
'type'
,
align
:
'center'
,
},
{
title
:
'第三方模板名称'
,
dataIndex
:
'third_name'
,
key
:
'third_name'
,
align
:
'center'
,
},
{
title
:
'企业微信ID'
,
dataIndex
:
'weixin'
,
key
:
'weixin'
,
align
:
'center'
,
},
{
title
:
'第三方模版编号'
,
dataIndex
:
'third_id'
,
key
:
'third_id'
,
align
:
'center'
,
},
{
title
:
'模板参数1.0'
,
dataIndex
:
'template_params1'
,
key
:
'template_params1'
,
align
:
'center'
,
},
{
title
:
'模板参数2.0'
,
dataIndex
:
'template_params2'
,
key
:
'template_params2'
,
align
:
'center'
,
},
{
title
:
'模板参数说明'
,
dataIndex
:
'desc'
,
key
:
'desc'
,
align
:
'center'
,
},
{
title
:
'解析规则'
,
dataIndex
:
'analysis_params'
,
key
:
'analysis_params'
,
align
:
'center'
,
},
{
title
:
'操作'
,
dataIndex
:
'action'
,
key
:
'action'
,
align
:
'center'
,
width
:
150
,
ellipsis
:
true
,
render
:
(
text
,
record
)
=>
(
<
Space
>
<
Tooltip
title=
"编辑"
>
<
EditTwoTone
type=
"primary"
size=
"small"
onClick=
{
()
=>
{
changeDesc
(
record
);
}
}
style=
{
{
fontSize
:
'16px'
}
}
/>
</
Tooltip
>
<
Tooltip
title=
"删除"
>
<
div
onClick=
{
e
=>
e
.
stopPropagation
()
}
>
<
Popconfirm
placement=
"bottomRight"
title=
"是否删除该模板?"
okText=
"确认"
cancelText=
"取消"
onConfirm=
{
()
=>
{
delTemplate
(
record
);
}
}
>
<
DeleteOutlined
style=
{
{
fontSize
:
'16px'
,
color
:
'#e86060'
}
}
/>
</
Popconfirm
>
</
div
>
</
Tooltip
>
</
Space
>
),
},
];
// 模糊查询匹配的样式
const
searchStyle
=
val
=>
{
let
n
;
if
(
showSearchStyle
)
{
n
=
val
.
replace
(
new
RegExp
(
value
,
'g'
),
`<span style='color:red'>
${
value
}
</span>`
,
);
}
else
{
n
=
val
;
}
const
handleChange
=
e
=>
{
setValue
(
e
.
target
.
value
)
console
.
log
(
n
);
return
<
div
dangerouslySetInnerHTML=
{
{
__html
:
n
}
}
/>;
};
const
placeholder
=
'请输入模板名称'
;
const
handleSearch
=
value
=>
{
setValue
(
value
);
getTemplateList
({
queryInfo
:
value
});
setShowSearchStyle
(
true
);
};
const
handleReset
=
()
=>
{
setCurrentType
(
'全部'
);
getTemplateList
();
setValue
(
''
);
setShowSearchStyle
(
false
);
};
const
handleChange
=
e
=>
{
setValue
(
e
.
target
.
value
);
};
const
handleSelectType
=
value
=>
{
if
(
value
===
'全部'
)
{
setCurrentType
(
''
);
getTemplateList
();
}
else
{
getTemplateList
({
tempType
:
value
});
setCurrentType
(
value
);
}
const
handleSelectType
=
(
value
)
=>
{
if
(
value
===
'全部'
)
{
getTemplateList
()
};
const
changeDesc
=
record
=>
{
setCurrentTempalte
(
record
);
handleShowModal
(
'editVisible'
,
true
);
};
const
AddTemplate
=
()
=>
{
handleShowModal
(
'addVisible'
,
true
);
};
const
delTemplate
=
record
=>
{
DeleteMessageTemplate
({
id
:
record
.
Id
,
}).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
message
.
success
(
'模板删除成功!'
);
setFlag
(
flag
+
1
);
}
else
{
message
.
warn
(
'模板删除失败!'
);
}
});
};
// 弹出模态框
const
handleShowModal
=
(
key
,
value
)
=>
{
setvisibleParams
({
...
visibleParams
,
[
key
]:
value
});
};
//编辑
const
editModal
=
()
=>
{
handleShowModal
(
'editVisible'
,
false
);
};
const
onSubmit
=
result
=>
{
if
(
result
.
type
==
'企业微信'
)
{
UpdateMessageTemplate
({
Id
:
result
.
Id
,
Type
:
result
.
type
,
LikeName
:
result
.
name
,
Name
:
result
.
third_name
,
ParsingRules
:
result
.
analysis_params
,
ParsingDescription
:
result
.
desc
,
TParameters
:
result
.
params
,
ParsingParams
:
result
.
param1
,
WorkWeiXinId
:
result
.
weixin
,
}).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
message
.
success
(
'模板保存成功!'
);
handleShowModal
(
'editVisible'
,
false
);
setFlag
(
flag
+
1
);
}
else
{
getTemplateList
({
tempType
:
value
})
message
.
warn
(
'模板保存失败!'
);
}
}
const
changeDesc
=
(
record
)
=>
{
setCurrentTempalte
(
record
)
handleShowModal
(
"editVisible"
,
true
)
}
const
AddTemplate
=
()
=>
{
handleShowModal
(
"addVisible"
,
true
)
}
const
delTemplate
=
(
record
)
=>
{
DeleteMessageTemplate
({
id
:
record
.
Id
}).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
message
.
success
(
"模板删除成功!"
)
setFlag
(
flag
+
1
)
}
else
{
message
.
warn
(
"模板删除失败!"
)
}
}
)
}
// 弹出模态框
const
handleShowModal
=
(
key
,
value
)
=>
{
setvisibleParams
({
...
visibleParams
,
[
key
]:
value
});
};
//编辑
const
editModal
=
()
=>
{
handleShowModal
(
"editVisible"
,
false
)
}
const
onSubmit
=
(
result
)
=>
{
if
(
result
.
type
==
'企业微信'
){
UpdateMessageTemplate
({
Id
:
result
.
Id
,
Type
:
result
.
type
,
LikeName
:
result
.
name
,
Name
:
result
.
third_name
,
ParsingRules
:
result
.
analysis_params
,
ParsingDescription
:
result
.
desc
,
TParameters
:
result
.
params
,
ParsingParams
:
result
.
param1
,
WorkWeiXinId
:
result
.
weixin
}).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
message
.
success
(
"模板保存成功!"
)
handleShowModal
(
"editVisible"
,
false
)
setFlag
(
flag
+
1
)
}
else
{
message
.
warn
(
"模板保存失败!"
)
}
}
)
}
else
{
UpdateMessageTemplate
({
Id
:
result
.
Id
,
Type
:
result
.
type
,
LikeName
:
result
.
name
,
Name
:
result
.
third_name
,
No
:
result
.
third_id
,
ParsingRules
:
result
.
analysis_params
,
ParsingDescription
:
result
.
desc
,
TParameters
:
result
.
params
,
ParsingParams
:
result
.
param1
,
}).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
message
.
success
(
"模板保存成功!"
)
handleShowModal
(
"editVisible"
,
false
)
setFlag
(
flag
+
1
)
}
else
{
message
.
warn
(
"模板保存失败!"
)
}
}
)
});
}
else
{
UpdateMessageTemplate
({
Id
:
result
.
Id
,
Type
:
result
.
type
,
LikeName
:
result
.
name
,
Name
:
result
.
third_name
,
No
:
result
.
third_id
,
ParsingRules
:
result
.
analysis_params
,
ParsingDescription
:
result
.
desc
,
TParameters
:
result
.
params
,
ParsingParams
:
result
.
param1
,
}).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
message
.
success
(
'模板保存成功!'
);
handleShowModal
(
'editVisible'
,
false
);
setFlag
(
flag
+
1
);
}
else
{
message
.
warn
(
'模板保存失败!'
);
}
});
}
//新增
const
addModal
=
()
=>
{
handleShowModal
(
"editVisible"
,
false
)
}
const
onAddSubmit
=
(
result
)
=>
{
if
(
result
.
type
==
'企业微信'
){
InsertMessageTemplate
({
Type
:
result
.
type
,
LikeName
:
result
.
name
,
Name
:
result
.
third_name
,
ParsingRules
:
result
.
analysis_params
,
ParsingDescription
:
result
.
desc
,
TParameters
:
result
.
params
,
ParsingParams
:
result
.
param1
,
WorkWeiXinId
:
result
.
weixin
}).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
message
.
success
(
"模板添加成功!"
)
handleShowModal
(
"addVisible"
,
false
)
setFlag
(
flag
+
1
)
}
else
{
message
.
warn
(
"模板添加失败!"
)
}
}
)
}
else
{
InsertMessageTemplate
({
Type
:
result
.
type
,
LikeName
:
result
.
name
,
Name
:
result
.
third_name
,
No
:
result
.
third_id
,
ParsingRules
:
result
.
analysis_params
,
ParsingDescription
:
result
.
desc
,
TParameters
:
result
.
params
,
ParsingParams
:
result
.
param1
,
}).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
message
.
success
(
"模板添加成功!"
)
handleShowModal
(
"addVisible"
,
false
)
setFlag
(
flag
+
1
)
}
else
{
message
.
warn
(
"模板添加失败!"
)
}
}
)
};
//新增
const
addModal
=
()
=>
{
handleShowModal
(
'editVisible'
,
false
);
};
const
onAddSubmit
=
result
=>
{
if
(
result
.
type
==
'企业微信'
)
{
InsertMessageTemplate
({
Type
:
result
.
type
,
LikeName
:
result
.
name
,
Name
:
result
.
third_name
,
ParsingRules
:
result
.
analysis_params
,
ParsingDescription
:
result
.
desc
,
TParameters
:
result
.
params
,
ParsingParams
:
result
.
param1
,
WorkWeiXinId
:
result
.
weixin
,
}).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
message
.
success
(
'模板添加成功!'
);
handleShowModal
(
'addVisible'
,
false
);
setFlag
(
flag
+
1
);
}
else
{
message
.
warn
(
'模板添加失败!'
);
}
});
}
else
{
InsertMessageTemplate
({
Type
:
result
.
type
,
LikeName
:
result
.
name
,
Name
:
result
.
third_name
,
No
:
result
.
third_id
,
ParsingRules
:
result
.
analysis_params
,
ParsingDescription
:
result
.
desc
,
TParameters
:
result
.
params
,
ParsingParams
:
result
.
param1
,
}).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
message
.
success
(
'模板添加成功!'
);
handleShowModal
(
'addVisible'
,
false
);
setFlag
(
flag
+
1
);
}
else
{
message
.
warn
(
'模板添加失败!'
);
}
});
}
};
const
pagenation
=
{
showTotal
:
(
total
,
range
)
=>
`第
${
range
[
0
]}
-
${
range
[
1
]}
条/共
${
total
}
条`
,
pageSizeOptions
:
[
10
,
20
,
50
,
100
],
defaultPageSize
:
'10'
,
showQuickJumper
:
true
,
showSizeChanger
:
true
,
};
return
(
<
div
className=
{
styles
.
template_container
}
>
<
Spin
tip=
"loading..."
spinning=
{
treeLoading
}
>
<
div
className=
{
styles
.
operate_bar
}
>
<
div
className=
{
styles
.
template_type
}
>
<
div
className=
{
styles
.
title
}
>
模板类型
</
div
>
<
Select
placeholder=
"请选择是否!"
defaultValue=
"全部"
style=
{
{
width
:
"150px"
}
}
onChange=
{
handleSelectType
}
className=
{
styles
.
select
}
>
<
Option
value=
"全部"
>
全部
</
Option
>
<
Option
value=
"公众号"
>
公众号
</
Option
>
<
Option
value=
"短信"
>
短信
</
Option
>
<
Option
value=
"APP"
>
APP
</
Option
>
<
Option
value=
"WEB"
>
WEB
</
Option
>
<
Option
value=
"企业微信"
>
企业微信
</
Option
>
</
Select
>
</
div
>
<
div
className=
{
styles
.
fast_search
}
>
<
div
className=
{
styles
.
title
}
>
快速检索
</
div
>
<
Search
allowClear
placeholder=
{
placeholder
}
onSearch=
{
handleSearch
}
onChange=
{
e
=>
handleChange
(
e
)
}
enterButton
style=
{
{
width
:
"300px"
}
}
value=
{
value
}
/>
</
div
>
<
Button
type=
"primary"
onClick=
{
handleReset
}
>
重置
</
Button
>
<
Button
type=
"primary"
style=
{
{
marginLeft
:
"10px"
}
}
icon=
{
<
PlusCircleOutlined
style=
{
{
verticalAlign
:
"middle"
}
}
/>
}
onClick=
{
AddTemplate
}
><
span
style=
{
{
marginTop
:
"-3px"
}
}
>
新增
</
span
></
Button
>
const
pagenation
=
{
showTotal
:
(
total
,
range
)
=>
`第
${
range
[
0
]}
-
${
range
[
1
]}
条/共
${
total
}
条`
,
pageSizeOptions
:
[
10
,
20
,
50
,
100
],
defaultPageSize
:
'10'
,
showQuickJumper
:
true
,
showSizeChanger
:
true
,
};
return
(
<
div
className=
{
styles
.
template_container
}
>
<
Spin
tip=
"loading..."
spinning=
{
treeLoading
}
>
<
div
className=
{
styles
.
operate_bar
}
>
<
div
className=
{
styles
.
template_type
}
>
<
div
className=
{
styles
.
title
}
>
模板类型
</
div
>
<
Select
placeholder=
"请选择是否!"
value=
{
currentType
}
style=
{
{
width
:
'150px'
}
}
onChange=
{
handleSelectType
}
className=
{
styles
.
select
}
>
<
Option
value=
"全部"
>
全部
</
Option
>
<
Option
value=
"公众号"
>
公众号
</
Option
>
<
Option
value=
"短信"
>
短信
</
Option
>
<
Option
value=
"APP"
>
APP
</
Option
>
<
Option
value=
"WEB"
>
WEB
</
Option
>
<
Option
value=
"企业微信"
>
企业微信
</
Option
>
</
Select
>
</
div
>
<
div
className=
{
styles
.
fast_search
}
>
<
div
className=
{
styles
.
title
}
>
快速检索
</
div
>
<
Search
allowClear
placeholder=
{
placeholder
}
onSearch=
{
handleSearch
}
onChange=
{
e
=>
handleChange
(
e
)
}
enterButton
style=
{
{
width
:
'300px'
}
}
value=
{
value
}
/>
</
div
>
<
Button
type=
"primary"
onClick=
{
handleReset
}
>
重置
</
Button
>
</
div
>
<
div
className=
{
styles
.
list_view
}
>
<
Table
columns=
{
columns
}
dataSource=
{
data
}
bordered
pagination=
{
pagenation
}
scroll=
{
{
y
:
'500px'
}
}
/>
</
div
>
<
EditModal
visible=
{
visibleParams
.
editVisible
}
template=
{
currentTemplate
}
onCancel=
{
()
=>
handleShowModal
(
'editVisible'
,
false
)
}
option=
{
option
}
confirmModal=
{
editModal
}
onSubmit=
{
onSubmit
}
/>
<
AddModal
visible=
{
visibleParams
.
addVisible
}
template=
{
currentTemplate
}
onCancel=
{
()
=>
handleShowModal
(
'addVisible'
,
false
)
}
option=
{
option
}
confirmModal=
{
addModal
}
onSubmit=
{
onAddSubmit
}
/>
</
Spin
>
<
Button
type=
"primary"
style=
{
{
marginLeft
:
'10px'
}
}
icon=
{
<
PlusCircleOutlined
style=
{
{
verticalAlign
:
'middle'
}
}
/>
}
onClick=
{
AddTemplate
}
>
<
span
style=
{
{
marginTop
:
'-3px'
}
}
>
新增
</
span
>
</
Button
>
</
div
>
<
div
className=
{
styles
.
list_view
}
>
<
Table
columns=
{
columns
}
dataSource=
{
data
}
bordered
pagination=
{
pagenation
}
scroll=
{
{
y
:
'500px'
}
}
/>
</
div
>
)
}
export
default
TemplateManage
;
\ No newline at end of file
<
EditModal
visible=
{
visibleParams
.
editVisible
}
template=
{
currentTemplate
}
onCancel=
{
()
=>
handleShowModal
(
'editVisible'
,
false
)
}
option=
{
option
}
confirmModal=
{
editModal
}
onSubmit=
{
onSubmit
}
/>
<
AddModal
visible=
{
visibleParams
.
addVisible
}
template=
{
currentTemplate
}
onCancel=
{
()
=>
handleShowModal
(
'addVisible'
,
false
)
}
option=
{
option
}
confirmModal=
{
addModal
}
onSubmit=
{
onAddSubmit
}
/>
</
Spin
>
</
div
>
);
};
export
default
TemplateManage
;
src/pages/platformCenter/standingBook/standingBook.less
View file @
b70a5514
.redText{
color: red;
cursor: pointer;
.redText {
color: red;
cursor: pointer;
}
.ant-layout{
overflow: auto;
.ant-layout-content
{
margin:
12px !important;
}
.ant-layout
{
overflow: auto;
.ant-layout-content
{
margin:
12px !important;
}
}
.ant-btn > .anticon + span, .ant-btn > span + .anticon {
margin-left: 8px;
vertical-align: middle;
.ant-btn > .anticon + span,
.ant-btn > span + .anticon {
margin-left: 8px;
vertical-align: middle;
}
.siteTitle{
font-size: 16px;
margin: 0 0 6px 0;
user-select: none;
padding: 3px;
border-bottom: 1px solid #ccc;
.siteTitle
{
font-size: 16px;
margin: 0 0 6px 0;
user-select: none;
padding: 3px;
border-bottom: 1px solid #ccc;
}
.userManageContainer{
.ant-card-body{
padding-left: 0;
padding-right: 0;
.userManageContainer {
.ant-card-body {
padding-left: 0;
padding-right: 0;
}
.listItem {
display: flex;
justify-content: space-between;
font-size: 14px;
font-weight: 400;
color: #414e65;
cursor: pointer;
line-height: 28px;
align-items: center;
padding: 8px 14px;
}
.pickItem {
background-color: #f5f6f9;
}
.ant-form-item {
vertical-align: top;
}
.ant-form-item-label > label {
align-items: middle;
}
.ant-modal-body {
padding-bottom: 0px;
padding-right: 40px;
padding-left: 40px;
.ant-form {
width: 90%;
}
.listItem{
display: flex;
justify-content: space-between;
font-size: 14px;
font-weight: 400;
color: #414E65;
cursor: pointer;
line-height: 28px;
align-items: center;
padding: 8px 14px;
}
.anticon svg {
margin-top: -3px;
}
.ant-popover-message {
position: relative;
padding: 0px 0 0px;
color: rgba(0, 0, 0, 0.85);
font-size: 14px;
}
.ant-tree-treenode {
width: 100% !important;
.ant-tree-node-content-wrapper {
display: inline-block;
width: 100%;
}
.pickItem{
background-color: #F5F6F9;
.iconWraper1 {
float: right;
span {
display: none;
}
}
.ant-form-item {
vertical-align: top;
}
.ant-tree-treenode:hover {
.iconWraper1 > span {
margin-left: 12px;
font-size: 18px;
display: inline-block;
}
.ant-form-item-label > label {
align-items:middle;
}
.ant-radio-group {
margin: 0px !important;
}
.contentContainers {
display: flex;
width: 100%;
position: relative;
.ant-table.ant-table-bordered > .ant-table-container {
min-width: calc(100vw - 582px);
height: calc(100vh - 120px);
overflow-x: hidden;
border: none;
}
.ant-modal-body{
padding-bottom:0px;
padding-right:40px;
padding-left:40px;
.ant-form{
width: 90%;
.orgContainer {
height: calc(100vh - 74px);
width: 240px;
left: 0;
top: 0;
overflow-x: hidden;
margin-right: 10px;
position: relative;
transition-property: width, left;
transition-duration: 0.5s;
white-space: nowrap;
.ant-tree {
padding-top: 6px;
.ant-tree-switcher {
line-height: 1;
margin-right: 0px !important;
color: #1890ff;
.ant-tree-switcher-line-icon {
margin-left: 5px;
}
}
}
.switcher {
display: block;
position: absolute;
font-size: 18px;
color: #1890ff !important;
top: 50%;
right: 2px;
transform: translate(0%, -50%);
z-index: 1;
}
}
.anticon svg {
margin-top: -3px;
}
.ant-popover-message {
position: relative;
padding: 0px 0 0px;
color: rgba(0, 0, 0, 0.85);
font-size: 14px;
}
.ant-tree-treenode{
width: 100% !important;
.ant-tree-node-content-wrapper{
display: inline-block;
width: 100%;
}
.iconWraper1{
float: right;
span{
display: none;
}
}
}
.ant-tree-treenode:hover{
.iconWraper1>span{
margin-left: 12px;
font-size: 18px;
display: inline-block;
}
.orgContainerHide {
// transform: translateX(-230px);
left: 0px;
top: 0;
width: 26px;
}
.ant-
radio-group
{
margin: 0px !important;
.ant-
popover-message-title
{
padding-left: 20px;
}
.contentContainers{
display: flex;
width: 100%;
position: relative;
.ant-table.ant-table-bordered > .ant-table-container {
min-width: calc(100vw - 582px);
height: calc(100vh - 120px);
overflow-x: hidden;
border: none;
}
.orgContainer{
height: calc(100vh - 74px);
width: 240px;
left: 0;
top: 0;
overflow-x: hidden;
margin-right: 10px;
position: relative;
transition-property:width,left;
transition-duration: 0.5s;
white-space: nowrap;
.ant-tree{
padding-top: 6px;
.ant-tree-switcher{
line-height: 1;
margin-right: 0px !important;
color:#1890FF;
.ant-tree-switcher-line-icon{
margin-left: 5px;
}
}
}
.switcher{
display: block;
position: absolute;
font-size: 18px;
color: #1890FF!important;
top: 50%;
right: 2px;
transform: translate(0%,-50%);
z-index: 1;
}
}
.orgContainerHide{
// transform: translateX(-230px);
left: 0px;
top: 0;
width: 26px;
}
.ant-popover-message-title {
padding-left: 20px;
}
.userContainer{
height: calc(100vh - 74px) !important;
z-index: 999;
min-width: 800px;
background: white;
width: 100%;
position: relative;
transition: width 0.5s;
.title{
margin: 16px 0 10px 16px;
display: inline-block;
width: 270px;
cursor: pointer;
overflow: hidden;
text-overflow:ellipsis;
white-space: nowrap;
}
.ant-table-pagination{
padding-right: 12px;
background: white;
margin: 1px 0;
padding: 8px;
padding-right: 20px;
}
.ant-btn{
margin: 0px 10px;
.ant-btn-primary{
background: #50aefc;
}
}
.ant-input-search-button{
margin-left: 0px !important;
}
.ant-table-thead tr th{
font-weight: 600;
color:rgba(0,0,0,0.85);
}
.ant-table-cell{
text-align:center;
overflow: hidden;
// text-overflow:ellipsis;
white-space: nowrap;
}
.ant-table-body{
height:calc(100vh - 210px);
border-right: white;
overflow: auto !important;
}
.clickRowStyle{
background: #cfe7fd;
}
.ant-pagination{
z-index: 999;
border-top: 1px solid #f0eded;
}
.userContainer {
height: calc(100vh - 74px) !important;
z-index: 999;
min-width: 800px;
background: white;
width: 100%;
position: relative;
transition: width 0.5s;
.title {
margin: 16px 0 10px 16px;
display: inline-block;
width: 270px;
cursor: pointer;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.ant-table-pagination {
padding-right: 12px;
background: white;
margin: 1px 0;
padding: 8px;
padding-right: 20px;
}
.ant-btn {
margin: 0px 10px;
.ant-btn-primary {
background: #50aefc;
}
}
.ant-input-search-button {
margin-left: 0px !important;
}
.ant-table-thead tr th {
font-weight: 600;
color: rgba(0, 0, 0, 0.85);
}
.ant-table-cell {
text-align: center;
overflow: hidden;
// text-overflow:ellipsis;
white-space: nowrap;
}
.ant-table-body {
height: calc(100vh - 210px);
border-right: white;
overflow: auto !important;
}
.clickRowStyle {
background: #cfe7fd;
}
.ant-pagination {
z-index: 999;
border-top: 1px solid #f0eded;
}
}
}
}
.ant-modal-root{
.ant-tree-switcher
{
line-height: 1;
color:#1890FF
;
margin-right: 0px !important;
}
.ant-checkbox-group .ant-checkbox-group-item {
margin-right: 0px !important;
min-width: 27
0px !important;
}
.ant-tree-list-holder
{
overflow: auto;
overflow-x:
hidden;
height: 40vh;
}
.ant-tabs-content-holder
{
overflow: auto;
height: 50vh;
}
.ant-modal-root
{
.ant-tree-switcher
{
line-height: 1;
color: #1890ff
;
margin-right: 0px !important;
}
.ant-checkbox-group .ant-checkbox-group-item {
margin-right: 0px !important;
min-width: 20
0px !important;
}
.ant-tree-list-holder
{
overflow: auto;
overflow-x:
hidden;
height: 40vh;
}
.ant-tabs-content-holder
{
overflow: auto;
height: 50vh;
}
}
.ant-modal-content{
border-radius: 5px;
}
.ant-modal-header{
border-radius: 5px 5px 0 0;
padding: 28px 40px;
.ant-modal-content
{
border-radius: 5px;
}
.ant-modal-header
{
border-radius: 5px 5px 0 0;
padding: 28px 40px;
}
.ant-modal-close{
top:
14px;
right:
20px;
.ant-modal-close
{
top:
14px;
right:
20px;
}
.ant-modal-footer{
border:
none;
padding: 28px 40px;
.ant-modal-footer
{
border:
none;
padding: 28px 40px;
}
.ant-modal-footer .ant-btn + .ant-btn:not(.ant-dropdown-trigger) {
margin-bottom: 0;
margin-left: 15px;
margin-bottom: 0;
margin-left: 15px;
}
// .ant-form-horizontal .ant-form-item-control {
// margin-left: 10px;
// }
.linkDrowp{
position: absolute;
top: 0;
left: 94.6%;
width: 1rem;
height: 100%;
display: flex;
align-items: center;
.linkDrowp {
position: absolute;
top: 0;
left: 94.6%;
width: 1rem;
height: 100%;
display: flex;
align-items: center;
}
.title {
display: flex;
align-items: center;
width: 100%;
}
.tip {
display: none;
}
.title{
.fs {
font-size: 18px;
margin-left: 10px;
}
.title:hover {
.tip {
display: flex;
align-items: center;
justify-content: flex-end;
width: 100%;
}
.tip{
display: none;
}
.fs{
font-size: 18px;
margin-left: 10px;
}
.title:hover{
.tip{
display: flex;
align-items: center;
justify-content: flex-end;
width: 100%;
}
}
.titleText {
width: 12rem;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.ant-popover-inner {
border-radius: 10px;
background-color: rgba(255, 255, 255, 0.788);
}
.ant-popover-inner-content {
padding: 10px 10px;
}
.ant-popover-message > .anticon {
top: 7.0005px;
}
.listCard {
display: flex;
.cardItem {
padding: 0.5rem;
}
.titleText{
width: 12rem;
overflow:hidden;
white-space:nowrap;
text-overflow:ellipsis;
.cardContent {
height: 40rem;
overflow-y: scroll;
width: 19.5rem;
}
.
ant-popover-inner
{
border-radius: 10px
;
b
ackground-color: rgba(255, 255, 255, 0.788)
;
.
cardItemData
{
padding: 1rem
;
b
order: 1px solid #b5b8c8
;
margin-bottom: 1rem;
}
.ant-popover-inner-content {
padding: 10px 10px;
}
.ant-popover-message > .anticon {
top: 7.0005px
.sortable-ghost {
border-bottom: 2px dashed #1890ff;
}
.listCard{
display: flex;
.cardItem{
padding: 0.5rem;
}
.cardContent{
height: 40rem;
overflow-y: scroll;
width: 19.5rem;
}
.cardItemData{
padding: 1rem;
border: 1px solid #b5b8c8;
margin-bottom: 1rem;
}
.doctorTable {
margin-bottom: 16px;
.cardContent {
height: 40rem;
overflow-y: scroll;
width: 19.5rem;
}
}
.sortable-ghost {
border-bottom: 2px dashed #1890ff;
.formData {
height: calc(100vh - 170px);
overflow-y: scroll;
padding-right: 20px;
.ant-form-item-label
> label.ant-form-item-required:not(.ant-form-item-required-mark-optional)::before {
display: none;
}
.doctorTable {
margin-bottom: 16px;
}
.formData{
height: calc(100vh - 170px);
overflow-y: scroll;
padding-right: 20px;
.ant-form-item-label > label.ant-form-item-required:not(.ant-form-item-required-mark-optional)::before{
display: none;
}
.formData_label{
display: flex;
align-items: center;
}
.filed_listItem{
display: flex;
height: 3.6rem;
.ant-btn-icon-only {
width: 32px;
height: 32px;
/* padding: 2.4px 0; */
font-size: 16px;
border-radius: 2px;
vertical-align: -1px;
display: flex;
align-items: center;
justify-content: center;
}
.filed_listItem {
display: flex;
height: 3.6rem;
.ant-btn-icon-only {
width: 32px;
height: 32px;
/* padding: 2.4px 0; */
font-size: 16px;
border-radius: 2px;
vertical-align: -1px;
display: flex;
align-items: center;
justify-content: center;
}
}
}
src/pages/platformCenter/videoManager/index.js
View file @
b70a5514
/* eslint-disable react-hooks/rules-of-hooks */
/* eslint-disable default-case */
/* eslint-disable react/jsx-no-undef */
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
{
Row
,
...
...
@@ -404,7 +407,7 @@ const videoManager = () => {
rowKey
=
{
record
=>
record
.
Id
}
columns
=
{
columns
}
dataSource
=
{
tableData
}
scroll
=
{{
y
:
'calc(100vh - 210px)'
}}
scroll
=
{{
y
:
'calc(100vh - 210px)'
,
x
:
'max-content'
}}
onRow
=
{
record
=>
({
onDoubleClick
:
event
=>
{
event
.
stopPropagation
();
...
...
src/pages/userCenter/siteManageV2/siteManage.less
View file @
b70a5514
...
...
@@ -42,12 +42,12 @@
line-height: 1;
}
.ant-dropdown-menu-item
>
.anticon:first-child {
.ant-dropdown-menu-item
>
.anticon:first-child {
vertical-align: 0.15em !important;
}
.ant-table-tbody {
.ant-table-row:hover
>
td {
.ant-table-row:hover
>
td {
background: #aed8fa !important;
}
}
...
...
@@ -87,10 +87,10 @@
}
.siteManageContainer {
.ant-card-body{
.ant-card-body
{
padding: 15px;
}
.ant-spin-container{
.ant-spin-container
{
overflow-y: scroll;
height: calc(100vh - 410px);
}
...
...
@@ -112,7 +112,7 @@
}
.ant-tree-treenode:hover {
.iconWraper1
>
span {
.iconWraper1
>
span {
margin-left: 12px;
font-size: 18px;
display: inline-block;
...
...
@@ -142,7 +142,7 @@
.ant-tree-switcher {
line-height: 1;
margin-right: 0px !important;
color: #1890
FF
;
color: #1890
ff
;
.ant-tree-switcher-line-icon {
margin-left: 5px;
...
...
@@ -154,7 +154,7 @@
display: block;
position: absolute;
font-size: 18px;
color: #1890
FF
!important;
color: #1890
ff
!important;
top: 45%;
right: 2px;
transform: translate(0%, -50%);
...
...
@@ -238,7 +238,6 @@
}
}
//机构编辑面板
.boxR {
width: 100%;
...
...
@@ -250,11 +249,9 @@
min-height: calc(100vh - 210px);
max-height: calc(100vh - 210px);
min-width: 600px;
}
.siteCheckbox .ant-collapse-content>.ant-collapse-content-box {
.siteCheckbox .ant-collapse-content > .ant-collapse-content-box {
padding: 16px 16px 0;
}
...
...
@@ -269,7 +266,7 @@
.siteListTitle {
width: 199px;
// margin:0 0 15px 0;
padding: 0
0
0 15px;
padding: 0
0
0 15px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
...
...
@@ -301,8 +298,8 @@
overflow: auto;
}
.sitePanel .ant-checkbox-wrapper
+
.ant-checkbox-wrapper {
margin: 0
.sitePanel .ant-checkbox-wrapper
+
.ant-checkbox-wrapper {
margin: 0
;
}
.siteIcon {
...
...
@@ -315,7 +312,7 @@
}
.siteColor {
color: #f00
color: #f00
;
}
.siteCommit {
...
...
@@ -326,7 +323,7 @@
border: 1px solid #f5f5f5;
max-height: 120px;
overflow: auto;
margin-bottom:20px;
margin-bottom:
20px;
.siteSelectUl {
margin: 0;
...
...
@@ -338,9 +335,10 @@
li {
height: 35px;
line-height: 35px;
background: rgba(24, 144, 255, 0.16) url('../../../assets/images/icons/close.png') no-repeat 170px;
background: rgba(24, 144, 255, 0.16)
url('../../../assets/images/icons/close.png') no-repeat 170px;
background-size: 20px;
background-position:center right;
background-position:
center right;
margin: 0 10px 10px 0;
cursor: pointer;
overflow: hidden;
...
...
@@ -352,8 +350,6 @@
}
.siteline {
}
.siteBtn {
...
...
@@ -367,13 +363,13 @@
.ant-modal-root {
.ant-tree-switcher {
line-height: 1;
color: #1890
FF
;
color: #1890
ff
;
margin-right: 0px !important;
}
.ant-checkbox-group .ant-checkbox-group-item {
margin-right: 0px !important;
min-width: 2
7
0px !important;
min-width: 2
0
0px !important;
}
.ant-tree-list-holder {
...
...
@@ -387,35 +383,35 @@
height: 50vh;
}
}
.title{
.title
{
display: flex;
align-items: center;
width: 100%;
}
.tip{
.tip
{
display: none;
}
.title:hover{
.tip{
.title:hover
{
.tip
{
display: flex;
align-items: center;
justify-content: flex-end;
width: 100%;
}
}
.titleText{
.titleText
{
width: 12rem;
overflow:hidden;
white-space:nowrap;
text-overflow:ellipsis;
overflow:
hidden;
white-space:
nowrap;
text-overflow:
ellipsis;
}
.fs{
.fs
{
font-size: 18px;
margin-left: 10px;
}
.titleTop{
.titleTop
{
width: 12rem;
overflow:hidden;
white-space:nowrap;
text-overflow:ellipsis;
}
\ No newline at end of file
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
src/pages/userCenter/userManage/EditOrgModal.jsx
View file @
b70a5514
...
...
@@ -31,7 +31,7 @@ const EditOrgModal = props => {
''
,
)
.
then
(
res
=>
{
if
(
res
.
msg
===
''
)
{
if
(
res
.
code
===
0
)
{
onCancel
();
notification
.
success
({
message
:
'提交成功'
,
...
...
@@ -44,7 +44,7 @@ const EditOrgModal = props => {
}
else
{
notification
.
error
({
message
:
'提交失败'
,
description
:
res
.
m
essage
,
description
:
res
.
m
sg
,
});
}
})
...
...
src/pages/userCenter/userManage/UserManage.js
View file @
b70a5514
/* eslint-disable eqeqeq */
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
{
// Tree,
...
...
@@ -47,6 +48,7 @@ import {
getOneOUUserListNew
,
getUserRelationList
,
getUserTree
,
// eslint-disable-next-line import/named
deleteUser
as
postDeleteUser
,
setUserState
as
postSetUserState
,
multiDeleteUsers
,
...
...
@@ -56,16 +58,10 @@ import {
GetOUTreeNew
,
GetUserRelationListNew
,
GetUserByKeyNew
,
AddUserNew
,
AddOUNew
,
EditOneOUInfoNew
,
EditUserNew
,
UserStateOUNew
,
DeleteOUNew
,
SetUserRelationListNew
,
JumpToAnotherOUNew
,
DeleteUserNew
,
loadAllUserRole
loadAllUserRole
,
}
from
'@/services/userCenter/userManage/api'
;
import
{
AddUserAuthSetting
,
GetUserAuthSet
}
from
'@/services/database/api'
;
import
Tree
from
'@/components/ExpendableTree'
;
...
...
@@ -134,9 +130,9 @@ const UserManage = () => {
const
[
newOrgID
,
setNewOrgID
]
=
useState
();
// 更改机构新选择的ID
const
[
currentUser
,
setCurrentUser
]
=
useState
({});
// 当前用户
const
[
mult
,
setMult
]
=
useState
(
''
)
//
判断是否是批量关联
const
[
multiRoleList
,
setMultiRoleList
]
=
useState
([])
const
[
multistationList
,
setMultiStationList
]
=
useState
([])
const
[
mult
,
setMult
]
=
useState
(
''
)
;
//
判断是否是批量关联
const
[
multiRoleList
,
setMultiRoleList
]
=
useState
([])
;
const
[
multistationList
,
setMultiStationList
]
=
useState
([])
;
const
[
userIDs
,
setUserIDs
]
=
useState
(
''
);
// 批量删除的用户
const
[
orgIDs
,
setOrgIDs
]
=
useState
(
''
);
// 批量操作的机构
const
[
multiDelete
,
setMultiDelete
]
=
useState
(
false
);
// 是否批量删除用户
...
...
@@ -391,7 +387,7 @@ const UserManage = () => {
selectedRowKeys
,
onChange
:
(
RowKeys
,
Rows
)
=>
{
setSelectedRowKeys
(
RowKeys
);
getCheckList
(
RowKeys
)
getCheckList
(
RowKeys
)
;
setUserIDs
(
RowKeys
.
toString
());
// 数组转字符串,逗号连接
setOrgIDs
(
Rows
.
map
(
item
=>
item
.
OUID
).
toString
());
// 选中行数大于0时设置批量操作可行
...
...
@@ -414,7 +410,7 @@ const UserManage = () => {
<
span
className
=
{
styles
.
titleText
}
>
{
org
.
text
}
<
/span
>
<
span
className
=
{
styles
.
tip1
}
>
<
Tooltip
title
=
""
className
=
{
styles
.
fs1
}
>
<
Dropdown
overlay
=
{
orgButtonMenu
}
>
<
Dropdown
overlay
=
{
orgButtonMenu
}
>
<
PlusOutlined
style
=
{{
marginLeft
:
20
}}
onClick
=
{
e
=>
e
.
stopPropagation
()}
...
...
@@ -427,7 +423,7 @@ const UserManage = () => {
<
/Dropdown
>
<
/Tooltip
>
<
Dropdown
overlay
=
{
orgButtonMenu1
}
>
<
Dropdown
overlay
=
{
orgButtonMenu1
}
>
<
EllipsisOutlined
style
=
{{
marginLeft
:
10
,
fontSize
:
'20px'
}}
onClick
=
{
e
=>
e
.
stopPropagation
()}
...
...
@@ -533,10 +529,10 @@ const UserManage = () => {
const
onSelect
=
(
props
,
e
)
=>
{
console
.
log
(
e
);
console
.
log
(
props
);
console
.
log
(
props
[
0
])
console
.
log
(
props
[
0
].
id
)
if
(
props
[
0
].
id
!=
undefined
)
{
props
[
0
]
=
props
[
0
].
id
console
.
log
(
props
[
0
])
;
console
.
log
(
props
[
0
].
id
)
;
if
(
props
[
0
].
id
!==
undefined
)
{
props
[
0
]
=
props
[
0
].
id
;
}
setKeep1
(
props
);
console
.
log
(
keep1
);
...
...
@@ -563,11 +559,10 @@ const UserManage = () => {
}).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
console
.
log
(
res
);
if
(
res
.
code
.
MapRange
!=
null
)
{
if
(
res
.
code
.
MapRange
!=
null
)
{
setCurrentOrgArea
(
res
.
data
.
MapRange
);
setCurrentOrgDistinct
(
res
.
data
.
AreeName
);
}
}
});
setOrgID
(
props
[
0
]
||
currentSelectOrg
);
...
...
@@ -689,7 +684,7 @@ const UserManage = () => {
/** ***用户批量操作****** */
// 关联角色
const
relateRoles
=
()
=>
{
setMult
(
'Yes'
)
setMult
(
'Yes'
)
;
getEmptyRoleList
();
// getCheckList()
setRoleVisible
(
true
);
...
...
@@ -710,9 +705,9 @@ const UserManage = () => {
// 关联角色
const
relateRole
=
record
=>
{
// getEmptyRoleList(record.userID);
setMult
(
'No'
)
console
.
log
(
record
)
getRoleList
(
record
)
setMult
(
'No'
)
;
console
.
log
(
record
)
;
getRoleList
(
record
)
;
setRoleVisible
(
true
);
setCurrentUser
(
record
);
setSelectColor
(
record
);
...
...
@@ -823,7 +818,7 @@ const UserManage = () => {
GetUserAuthSet
({
UserId
:
record
.
userID
,
}).
then
(
res
=>
{
if
(
res
.
code
==
0
)
{
if
(
res
.
code
==
=
0
)
{
setSelctValue
(
res
.
data
);
console
.
log
(
res
.
data
);
}
...
...
@@ -917,16 +912,16 @@ const UserManage = () => {
// });
GetUserRelationListNew
({
userID
:
e
.
userID
})
.
then
(
res
=>
{
console
.
log
(
111
)
console
.
log
(
111
)
;
if
(
res
.
code
===
0
)
{
const
{
roleList
,
stationList
}
=
res
.
data
;
console
.
log
(
roleList
)
console
.
log
(
roleList
)
;
setRolelist
(
roleList
);
setStationlist
(
stationList
);
setLoading
(
false
);
}
else
{
console
.
log
(
res
)
console
.
log
(
res
)
;
setLoading
(
false
);
}
})
...
...
@@ -958,16 +953,16 @@ const UserManage = () => {
// setTableLoading(false);
// message.error(err);
// });
GetUserRelationListNew
({
userID
:
0
})
GetUserRelationListNew
({
userID
:
0
})
.
then
(
res
=>
{
console
.
log
(
222
)
console
.
log
(
222
)
;
if
(
res
.
code
===
0
)
{
const
{
roleList
,
stationList
}
=
res
.
data
;
setRolelist
(
roleList
);
setStationlist
(
stationList
);
setLoading
(
false
);
}
else
{
console
.
log
(
res
.
msg
)
console
.
log
(
res
.
msg
)
;
setLoading
(
false
);
}
})
...
...
@@ -978,29 +973,30 @@ const UserManage = () => {
});
};
const
getCheckList
=
e
=>
{
let
aa
=
[]
let
bb
=
[]
loadAllUserRole
(
e
).
then
(
res
=>
{
if
(
res
.
code
===
0
){
if
(
res
.
data
.
roleList
!=
undefined
){
Object
.
keys
(
res
.
data
.
roleList
).
map
((
item
,
index
)
=>
{
aa
.
push
(
item
)
})
const
getCheckList
=
e
=>
{
let
aa
=
[];
let
bb
=
[];
loadAllUserRole
(
e
).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
if
(
res
.
data
.
roleList
!==
undefined
)
{
// eslint-disable-next-line array-callback-return
Object
.
keys
(
res
.
data
.
roleList
).
map
((
item
,
index
)
=>
{
aa
.
push
(
item
);
});
}
if
(
res
.
data
.
siteList
!=
undefined
){
Object
.
keys
(
res
.
data
.
siteList
).
map
((
item1
,
index1
)
=>
{
bb
.
push
(
item1
)
})
if
(
res
.
data
.
siteList
!==
undefined
)
{
// eslint-disable-next-line array-callback-return
Object
.
keys
(
res
.
data
.
siteList
).
map
((
item1
,
index1
)
=>
{
bb
.
push
(
item1
);
});
}
console
.
log
(
aa
)
console
.
log
(
bb
)
setMultiRoleList
(
aa
)
setMultiStationList
(
bb
)
console
.
log
(
aa
)
;
console
.
log
(
bb
)
;
setMultiRoleList
(
aa
);
setMultiStationList
(
bb
);
}
})
}
});
};
// 提交-更改机构
const
submitChangeOrg
=
()
=>
{
// addToOrg(currentUser.userID, currentUser.OUID, newOrgID)
...
...
@@ -1246,33 +1242,31 @@ const UserManage = () => {
setTreeLoading
(
true
);
console
.
log
(
extent
);
console
.
log
(
areaName
);
console
.
log
(
flag
)
console
.
log
(
flag
)
;
console
.
log
(
currentSelectOrg1
);
if
(
flag
==
0
)
{
if
(
flag
===
0
)
{
setTreeLoading
(
false
);
notification
.
warn
({
message
:
'提交失败'
,
description
:
'请框选范围'
,
});
}
else
{
if
(
extent
)
{
setOrgArea
({
OUID
:
currentSelectOrg1
,
areaName
,
extent
,
}).
then
(
res
=>
{
if
(
res
.
msg
===
''
)
{
setTreeLoading
(
false
);
setEditOrgExtentVisible
(
false
);
setSaveExtentFlag
(
saveExtentFlag
+
1
);
message
.
success
(
'机构范围设置成功!'
);
}
else
{
setTreeLoading
(
false
);
setEditOrgExtentVisible
(
false
);
message
.
warn
(
res
.
Message
);
}
});
}
}
else
if
(
extent
)
{
setOrgArea
({
OUID
:
currentSelectOrg1
,
areaName
,
extent
,
}).
then
(
res
=>
{
if
(
res
.
msg
===
''
)
{
setTreeLoading
(
false
);
setEditOrgExtentVisible
(
false
);
setSaveExtentFlag
(
saveExtentFlag
+
1
);
message
.
success
(
'机构范围设置成功!'
);
}
else
{
setTreeLoading
(
false
);
setEditOrgExtentVisible
(
false
);
message
.
warn
(
res
.
Message
);
}
});
}
};
...
...
@@ -1467,7 +1461,7 @@ const UserManage = () => {
visible
=
{
userVisible
}
orgID
=
{
orgID
}
onCancel
=
{
kee
}
onSelect
=
{()
=>
onSelect
([
orgID
])}
onSelect
=
{()
=>
onSelect
([
orgID
])}
/
>
{
/* 添加下级机构 */
}
<
AddSubOrgModal
...
...
@@ -1491,7 +1485,7 @@ const UserManage = () => {
/
>
{
/* 删除机构 */
}
<
DeleteOrgModal
title
=
'删除机构'
title
=
"删除机构"
visible
=
{
deleteOrgVisible
}
orgTitle
=
{
orgTitle1
}
orgID
=
{
orgID
}
...
...
src/pages/userCenter/userManage/UserManage.less
View file @
b70a5514
:global{
::-webkit-scrollbar {
height: 6px;//x轴滚动条粗细
width:6px;//y轴滚动条粗细
border-bottom: 2px solid white;
}
//滚动条里面的小方块,能上下左右移动(取决于是垂直滚动条还是水平滚动条)
::-webkit-scrollbar-thumb {
border-radius: 10px;
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.1);
background: rgba(74, 74, 75, 0.3);
margin-bottom: 10px;
}
//滚动条的轨道(里面装有thumb)滚动槽
::-webkit-scrollbar-track {
box-shadow: 0;
border-radius: 0;
background: white;//滚动槽背景色
border-radius: 10px;//滚动条边框半径设置
}
.ant-tree-node-content-wrapper{
width:100%;
overflow: hidden !important;
.ant-tree-title{
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
display: flex !important;
justify-content: space-between;
}
}
.ant-pagination-prev,.ant-pagination-next{
line-height: 8px !important;
}
.ant-input-search-button{
line-height: 1;
}
.ant-dropdown-menu-item > .anticon:first-child {
vertical-align: 0.15em !important;
}
.ant-table-tbody{
.ant-table-row:hover>td{
background: #aed8fa !important;
}
}
.ant-modal-close-icon {
vertical-align: 0.3em;
}
.ant-notification-close-icon{
vertical-align: 0.2em;
}
.ant-tree-switcher-icon svg{
font-size: 14px;
color: #767777 !important;
:global {
::-webkit-scrollbar {
height: 6px; //x轴滚动条粗细
width: 6px; //y轴滚动条粗细
border-bottom: 2px solid white;
}
//滚动条里面的小方块,能上下左右移动(取决于是垂直滚动条还是水平滚动条)
::-webkit-scrollbar-thumb {
border-radius: 10px;
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.1);
background: rgba(74, 74, 75, 0.3);
margin-bottom: 10px;
}
//滚动条的轨道(里面装有thumb)滚动槽
::-webkit-scrollbar-track {
box-shadow: 0;
border-radius: 0;
background: white; //滚动槽背景色
border-radius: 10px; //滚动条边框半径设置
}
.ant-tree-node-content-wrapper {
width: 100%;
overflow: hidden !important;
.ant-tree-title {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
display: flex !important;
justify-content: space-between;
}
.ant-card-body {
padding: 12px 24px 24px 10px;
}
.ant-pagination-prev,
.ant-pagination-next {
line-height: 8px !important;
}
.ant-input-search-button {
line-height: 1;
}
.ant-dropdown-menu-item > .anticon:first-child {
vertical-align: 0.15em !important;
}
.ant-table-tbody {
.ant-table-row:hover > td {
background: #aed8fa !important;
}
}
.ant-modal-close-icon {
vertical-align: 0.3em;
}
.ant-notification-close-icon {
vertical-align: 0.2em;
}
.ant-tree-switcher-icon svg {
font-size: 14px;
color: #767777 !important;
}
.ant-card-body {
padding: 12px 24px 24px 10px;
}
}
.redText{
color: red;
cursor: pointer;
.redText
{
color: red;
cursor: pointer;
}
.ant-layout{
overflow: auto;
.ant-layout-content
{
margin:
12px !important;
}
.ant-layout
{
overflow: auto;
.ant-layout-content
{
margin:
12px !important;
}
}
.ant-btn > .anticon + span, .ant-btn > span + .anticon {
margin-left: 8px;
vertical-align: middle;
.ant-btn > .anticon + span,
.ant-btn > span + .anticon {
margin-left: 8px;
vertical-align: middle;
}
.siteTitle{
font-size: 16px;
margin: 0 0 6px 0;
user-select: none;
padding: 3px;
border-bottom: 1px solid #ccc;
.siteTitle
{
font-size: 16px;
margin: 0 0 6px 0;
user-select: none;
padding: 3px;
border-bottom: 1px solid #ccc;
}
.userManageContainer{
.ant-modal-footer{
border:none;
padding: 28px 40px;
}
.ant-form-item {
vertical-align: top;
.userManageContainer {
.ant-modal-footer {
border: none;
padding: 28px 40px;
}
.ant-form-item {
vertical-align: top;
}
.ant-form-item-label > label {
align-items: middle;
}
.ant-modal-body {
padding-bottom: 0px;
padding-right: 40px;
padding-left: 40px;
.ant-form {
width: 90%;
}
.ant-form-item-label > label {
align-items:middle;
}
.anticon svg {
margin-top: -3px;
}
.ant-popover-message {
position: relative;
padding: 0px 0 0px;
color: rgba(0, 0, 0, 0.85);
font-size: 14px;
}
.ant-tree-treenode {
width: 100% !important;
.ant-tree-node-content-wrapper {
display: inline-block;
width: 100%;
}
.ant-modal-body{
padding-bottom:0px;
padding-right:40px;
padding-left:40px;
.ant-form{
width: 90%;
}
.iconWraper1 {
float: right;
span {
display: none;
}
}
.anticon svg {
margin-top: -3px;
}
.ant-tree-treenode:hover {
.iconWraper1 > span {
margin-left: 12px;
font-size: 18px;
display: inline-block;
}
.ant-popover-message {
position: relative;
padding: 0px 0 0px;
color: rgba(0, 0, 0, 0.85);
font-size: 14px;
}
.ant-radio-group {
margin: 0px !important;
}
.contentContainer {
display: flex;
width: 100%;
position: relative;
.ant-table.ant-table-bordered > .ant-table-container {
min-width: calc(100vw - 582px);
}
.ant-tree-treenode{
width: 100% !important;
.ant-tree-node-content-wrapper{
display: inline-block;
width: 100%;
.orgContainer {
height: calc(100vh - 74px);
width: 340px;
left: 0;
top: 0;
overflow-x: hidden;
margin-right: 10px;
position: relative;
transition-property: width, left;
transition-duration: 0.5s;
white-space: nowrap;
.ant-tree {
padding-top: 6px;
.ant-tree-switcher {
line-height: 1;
margin-right: 0px !important;
color: #1890ff;
.ant-tree-switcher-line-icon {
margin-left: 5px;
}
}
}
.switcher {
display: block;
position: absolute;
font-size: 18px;
color: #1890ff !important;
top: 50%;
right: 2px;
transform: translate(0%, -50%);
z-index: 1;
}
}
.iconWraper1{
float: right;
span{
display: none;
}
}
.orgContainerHide {
// transform: translateX(-230px);
left: 0px;
top: 0;
width: 26px;
}
.ant-tree-treenode:hover{
.iconWraper1>span{
margin-left: 12px;
font-size: 18px;
display: inline-block;
}
.ant-popover-message-title {
padding-left: 20px;
}
.title1 {
display: flex;
align-items: center;
width: 100%;
}
.
ant-radio-group
{
margin: 0px !important;
.
tip1
{
display: none;
}
.contentContainer{
.fs1 {
font-size: 18px;
margin-left: 10px;
}
.title1:hover {
.tip1 {
display: flex;
align-items: center;
justify-content: flex-end;
width: 100%;
position: relative;
.ant-table.ant-table-bordered > .ant-table-container {
min-width: calc(100vw - 582px);
}
.orgContainer{
height: calc(100vh - 74px);
width: 340px;
left: 0;
top: 0;
overflow-x: hidden;
margin-right: 10px;
position: relative;
transition-property:width,left;
transition-duration: 0.5s;
white-space: nowrap;
.ant-tree{
padding-top: 6px;
.ant-tree-switcher{
line-height: 1;
margin-right: 0px !important;
color:#1890FF;
.ant-tree-switcher-line-icon{
margin-left: 5px;
}
}
}
.switcher{
display: block;
position: absolute;
font-size: 18px;
color: #1890FF!important;
top: 50%;
right: 2px;
transform: translate(0%,-50%);
z-index: 1;
}
}
.orgContainerHide{
// transform: translateX(-230px);
left: 0px;
top: 0;
width: 26px;
}
.ant-popover-message-title {
padding-left: 20px;
}
.title1{
display: flex;
align-items: center;
width: 100%;
}
.tip1{
display: none;
}
.fs1{
font-size: 18px;
margin-left: 10px;
}
.title1:hover{
.tip1{
display: flex;
align-items: center;
justify-content: flex-end;
width: 100%;
}
}
.titleText{
width: 12rem;
overflow:hidden;
white-space:nowrap;
text-overflow:ellipsis;
}
.userContainer{
height: calc(100vh - 74px) !important;
z-index: 999;
min-width: 800px;
background: white;
width: 100%;
position: relative;
transition: width 0.5s;
.title{
margin: 16px 0 10px 16px;
display: inline-block;
// width: 270px;
cursor: pointer;
overflow: hidden;
text-overflow:ellipsis;
white-space: nowrap;
}
.ant-table-pagination{
padding-right: 12px;
background: white;
margin: 1px 0;
padding: 8px;
padding-right: 20px;
}
.ant-btn{
margin: 0px 10px;
.ant-btn-primary{
background: #50aefc;
}
}
.ant-input-search-button{
margin-left: 0px !important;
}
.ant-table-thead tr th{
font-weight: 600;
color:rgba(0,0,0,0.85);
}
.ant-table-cell{
text-align:center;
overflow: hidden;
// text-overflow:ellipsis;
white-space: nowrap;
}
.ant-table-body{
height:calc(100vh - 210px);
border-right: white;
overflow: auto !important;
}
.clickRowStyle{
background: #cfe7fd;
}
.ant-pagination{
z-index: 999;
border-top: 1px solid #f0eded;
}
}
}
.titleText {
width: 12rem;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.userContainer {
height: calc(100vh - 74px) !important;
z-index: 999;
min-width: 800px;
background: white;
width: 100%;
position: relative;
transition: width 0.5s;
.title {
margin: 16px 0 10px 16px;
display: inline-block;
// width: 270px;
cursor: pointer;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.ant-table-pagination {
padding-right: 12px;
background: white;
margin: 1px 0;
padding: 8px;
padding-right: 20px;
}
.ant-btn {
margin: 0px 10px;
.ant-btn-primary {
background: #50aefc;
}
}
.ant-input-search-button {
margin-left: 0px !important;
}
.ant-table-thead tr th {
font-weight: 600;
color: rgba(0, 0, 0, 0.85);
}
.ant-table-cell {
text-align: center;
overflow: hidden;
// text-overflow:ellipsis;
white-space: nowrap;
}
.ant-table-body {
height: calc(100vh - 210px);
border-right: white;
overflow: auto !important;
}
.clickRowStyle {
background: #cfe7fd;
}
.ant-pagination {
z-index: 999;
border-top: 1px solid #f0eded;
}
}
}
.ant-modal-root
{
.ant-tree-switcher{
line-height: 1;
color:#1890FF
;
margin-right: 0px !important;
}
.ant-modal-root
{
.ant-tree-switcher
{
line-height: 1;
color: #1890ff
;
margin-right: 0px !important;
}
.ant-checkbox-group .ant-checkbox-group-item {
margin-right: 0px !important;
min-width: 27
0px !important;
margin-right: 0px !important;
min-width: 20
0px !important;
}
.ant-tree-list-holder{
overflow: auto;
overflow-x:
hidden;
height: 40vh;
.ant-tree-list-holder
{
overflow: auto;
overflow-x:
hidden;
height: 40vh;
}
.ant-tabs-content-holder{
overflow: auto;
height: 50vh;
.ant-tabs-content-holder
{
overflow: auto;
height: 50vh;
}
}
}
.ant-modal-content{
border-radius: 5px;
}
.ant-modal-header{
border-radius: 5px 5px 0 0;
padding: 28px 40px;
.ant-modal-content
{
border-radius: 5px;
}
.ant-modal-header
{
border-radius: 5px 5px 0 0;
padding: 28px 40px;
}
.ant-modal-close{
top:
14px;
right:
20px;
.ant-modal-close
{
top:
14px;
right:
20px;
}
.ant-modal-footer .ant-btn + .ant-btn:not(.ant-dropdown-trigger) {
margin-bottom: 0;
margin-left: 15px;
margin-bottom: 0;
margin-left: 15px;
}
// .ant-form-horizontal .ant-form-item-control {
// margin-left: 10px;
// }
.ant-popover-inner {
border-radius: 10px;
background-color: rgba(255, 255, 255, 0.788);
}
.ant-popover-inner-content {
padding: 10px 10px;
.ant-popover-inner {
border-radius: 10px;
background-color: rgba(255, 255, 255, 0.788);
}
.ant-popover-inner-content {
padding: 10px 10px;
}
.ant-popover-message > .anticon {
top: 7.0005px
.ant-popover-message > .anticon {
top: 7.0005px;
}
// .ant-tree {
// overflow-y: scroll;
// height: calc(100vh - 150px);
// }
src/pages/webConfig/menuconfig/webMenu.jsx
View file @
b70a5514
/* eslint-disable array-callback-return */
/* eslint-disable no-plusplus */
/* eslint-disable consistent-return */
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
notification
,
Tooltip
,
Modal
,
Spin
,
Empty
}
from
'antd'
;
import
Tree
from
'@/components/ExpendableTree'
;
...
...
@@ -396,6 +399,7 @@ const MiniMenu = props => {
};
// 树的拖动
const
handleDrop
=
infos
=>
{
console
.
log
(
infos
);
const
dropKey
=
infos
.
node
.
key
;
const
dragKey
=
infos
.
dragNode
.
key
;
const
dropPos
=
infos
.
node
.
pos
.
split
(
'-'
);
...
...
src/routes/config.js
View file @
b70a5514
/* eslint-disable import/no-unresolved */
import
React
from
'react'
;
import
{
DatabaseOutlined
,
...
...
src/services/userCenter/userManage/api.js
View file @
b70a5514
...
...
@@ -100,7 +100,7 @@ export const addToOrgs = (userIDs, orgIDs, newOrgID) =>
export
const
updateUserPassword
=
params
=>
post
(
`
${
PUBLISH_SERVICE
}
/UserCenter/UpdateUserPassword`
,
params
);
//批量获取用户角色和机构
//
批量获取用户角色和机构
export
const
loadAllUserRole
=
params
=>
post
(
`
${
PUBLISH_SERVICE
}
/UserCenter/LoadAllUserRole`
,
params
);
...
...
@@ -143,7 +143,7 @@ export const setUserRelation = (userID, roleList = [], stationList) =>
},
);
export
const
SetUserRelationList
=
(
userID
,
roleList
=
[],
stationList
)
=>
post
(
`
${
PUBLISH_SERVICE
}
/UserCenter/SetUserRelationList`
,{
post
(
`
${
PUBLISH_SERVICE
}
/UserCenter/SetUserRelationList`
,
{
userID
,
roleList
:
roleList
.
length
?
`
${
roleList
.
join
(
','
)}
,`
:
''
,
stationList
:
stationList
.
length
?
`
${
stationList
.
join
(
','
)}
,`
:
''
,
...
...
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