|
@@ -1,9 +1,10 @@
|
|
|
-import React, { useMemo, useState } from 'react';
|
|
|
+import React, { useMemo, useRef, useState } from 'react';
|
|
|
|
|
|
import { queryUserListByRoleID } from '@/services/boom';
|
|
|
import { connect } from 'dva';
|
|
|
import { PlusOutlined } from '@ant-design/icons';
|
|
|
import { Popover, Radio, RadioChangeEvent, Spin, Steps } from 'antd';
|
|
|
+import list from '../List/models/list';
|
|
|
|
|
|
const { Step } = Steps;
|
|
|
|
|
@@ -18,8 +19,10 @@ const ApprovalProcess = props => {
|
|
|
const [curNodeIdx, setCurNodeIdx] = useState(-1);
|
|
|
const [loading, setLoading] = useState(false);
|
|
|
|
|
|
- const list = useMemo(() => {
|
|
|
+ const { auditList, ccList } = useMemo(() => {
|
|
|
const newList = approvalProcess[id];
|
|
|
+ let auditList = [],
|
|
|
+ ccList = [];
|
|
|
newList?.forEach(item => {
|
|
|
if (item.length > 1 && item[0].type == TYPR.USER) {
|
|
|
item.forEach(curUser => {
|
|
@@ -32,8 +35,14 @@ const ApprovalProcess = props => {
|
|
|
} else {
|
|
|
item[0].name = null;
|
|
|
}
|
|
|
+
|
|
|
+ if (item[0].is_cc == 1) {
|
|
|
+ ccList.push(item);
|
|
|
+ } else {
|
|
|
+ auditList.push(item);
|
|
|
+ }
|
|
|
});
|
|
|
- return newList;
|
|
|
+ return { auditList, ccList };
|
|
|
}, [approvalProcess]);
|
|
|
|
|
|
const onStepsChange = async (current, list) => {
|
|
@@ -46,42 +55,69 @@ const ApprovalProcess = props => {
|
|
|
setLoading(false);
|
|
|
};
|
|
|
|
|
|
- const selectedUserId = ({ target: { value } }: RadioChangeEvent) => {
|
|
|
+ const selectedUserId = ({ target: { value } }: RadioChangeEvent, list) => {
|
|
|
//userId
|
|
|
const name = userList.find(user => user.ID == value)?.CName || '-';
|
|
|
- const data = { nowType: TYPR.USER, nowValue: Number(value), name }; //type: TYPR.USER, value: Number(value)
|
|
|
- list[curNodeIdx][0] = { ...list[curNodeIdx][0], ...data };
|
|
|
- console.log(list);
|
|
|
- onChange?.({ ...approvalProcess, [id]: list });
|
|
|
+ // const data = { nowType: TYPR.USER, nowValue: Number(value), name }; //type: TYPR.USER, value: Number(value)
|
|
|
+ let cur = list[curNodeIdx][0];
|
|
|
+ cur.nowType = TYPR.USER;
|
|
|
+ cur.nowValue = Number(value);
|
|
|
+ cur.name = name;
|
|
|
+ onChange?.({ ...approvalProcess });
|
|
|
};
|
|
|
|
|
|
- const content = (
|
|
|
- <Spin spinning={loading}>
|
|
|
- <Radio.Group onChange={selectedUserId}>
|
|
|
- {selectUserList.map(item => (
|
|
|
- // <Button onClick={() => selectedUserId(item.user_id)}>{item.c_name}</Button>
|
|
|
- <Radio.Button value={item.user_id}>{item.c_name}</Radio.Button>
|
|
|
- ))}
|
|
|
- </Radio.Group>
|
|
|
- </Spin>
|
|
|
- );
|
|
|
+ const renderContent = list => {
|
|
|
+ return (
|
|
|
+ <Spin spinning={loading}>
|
|
|
+ <Radio.Group onChange={e => selectedUserId(e, list)}>
|
|
|
+ {selectUserList.map(item => (
|
|
|
+ // <Button onClick={() => selectedUserId(item.user_id)}>{item.c_name}</Button>
|
|
|
+ <Radio.Button value={item.user_id}>{item.c_name}</Radio.Button>
|
|
|
+ ))}
|
|
|
+ </Radio.Group>
|
|
|
+ </Spin>
|
|
|
+ );
|
|
|
+ };
|
|
|
|
|
|
return (
|
|
|
- <>
|
|
|
- <Steps current={-1} direction="vertical" onChange={value => onStepsChange(value, list)}>
|
|
|
- {list?.map(item => (
|
|
|
+ <div>
|
|
|
+ <h3>审批列表</h3>
|
|
|
+ <Steps current={-1} direction="vertical" onChange={value => onStepsChange(value, auditList)}>
|
|
|
+ {auditList?.map(item => (
|
|
|
+ <Step
|
|
|
+ key={item[0]?.value}
|
|
|
+ icon={
|
|
|
+ <Popover
|
|
|
+ placement="bottomLeft"
|
|
|
+ title={'选择审批人'}
|
|
|
+ content={renderContent(auditList)}
|
|
|
+ trigger="click"
|
|
|
+ overlayStyle={{ width: '300px' }}
|
|
|
+ >
|
|
|
+ <PlusOutlined />
|
|
|
+ </Popover>
|
|
|
+ }
|
|
|
+ title={
|
|
|
+ item[0]?.name || `从${roleList?.find(cur => cur.ID == item[0]?.value)?.Name}选择`
|
|
|
+ }
|
|
|
+ />
|
|
|
+ ))}
|
|
|
+ </Steps>
|
|
|
+ <h3 style={{ marginTop: 20 }}>抄送人</h3>
|
|
|
+ <Steps current={-1} direction="vertical" onChange={value => onStepsChange(value, ccList)}>
|
|
|
+ {ccList?.map(item => (
|
|
|
<Step
|
|
|
key={item[0]?.value}
|
|
|
icon={
|
|
|
<Popover
|
|
|
- placement="bottomLeft"
|
|
|
- title={'选择审批人'}
|
|
|
- content={content}
|
|
|
- trigger="click"
|
|
|
- overlayStyle={{ width: '300px' }}
|
|
|
- >
|
|
|
- <PlusOutlined />
|
|
|
- </Popover>
|
|
|
+ placement="bottomLeft"
|
|
|
+ title={'选择审批人'}
|
|
|
+ content={renderContent(ccList)}
|
|
|
+ trigger="click"
|
|
|
+ overlayStyle={{ width: '300px' }}
|
|
|
+ >
|
|
|
+ <PlusOutlined />
|
|
|
+ </Popover>
|
|
|
}
|
|
|
title={
|
|
|
item[0]?.name || `从${roleList?.find(cur => cur.ID == item[0]?.value)?.Name}选择`
|
|
@@ -89,10 +125,7 @@ const ApprovalProcess = props => {
|
|
|
/>
|
|
|
))}
|
|
|
</Steps>
|
|
|
- {/* {selectUserList.map(item => (
|
|
|
- <Button onClick={() => selectedUserId(item.user_id)}>{item.c_name}</Button>
|
|
|
- ))} */}
|
|
|
- </>
|
|
|
+ </div>
|
|
|
);
|
|
|
};
|
|
|
export default connect(({ xflow, detail, user }) => ({
|