|
@@ -1,4 +1,4 @@
|
|
-import React, { useEffect, useState, useRef, useMemo, useCallback } from 'react';
|
|
|
|
|
|
+import React, {useEffect, useState, useRef, useMemo, useCallback} from 'react';
|
|
import '@ant-design/compatible/assets/index.css';
|
|
import '@ant-design/compatible/assets/index.css';
|
|
import {
|
|
import {
|
|
Modal,
|
|
Modal,
|
|
@@ -19,11 +19,11 @@ import {
|
|
Divider,
|
|
Divider,
|
|
Collapse,
|
|
Collapse,
|
|
} from 'antd';
|
|
} from 'antd';
|
|
-import { PlusOutlined, UploadOutlined } from '@ant-design/icons';
|
|
|
|
-import { connect } from 'dva';
|
|
|
|
-import { isArray, result, set } from 'lodash';
|
|
|
|
-import { useForm } from 'rc-field-form';
|
|
|
|
-import { async } from '@antv/x6/lib/registry/marker/async';
|
|
|
|
|
|
+import {PlusOutlined, UploadOutlined} from '@ant-design/icons';
|
|
|
|
+import {connect} from 'dva';
|
|
|
|
+import {isArray, result, set} from 'lodash';
|
|
|
|
+import {useForm} from 'rc-field-form';
|
|
|
|
+import {async} from '@antv/x6/lib/registry/marker/async';
|
|
import AuditDetailed from './AuditDetailed';
|
|
import AuditDetailed from './AuditDetailed';
|
|
import AuditFlow from './AuditFlow';
|
|
import AuditFlow from './AuditFlow';
|
|
import {
|
|
import {
|
|
@@ -32,21 +32,22 @@ import {
|
|
queryProcessFlows,
|
|
queryProcessFlows,
|
|
querySaveBomForm,
|
|
querySaveBomForm,
|
|
} from '@/services/boom';
|
|
} from '@/services/boom';
|
|
-import { Form as Form3x } from '@ant-design/compatible';
|
|
|
|
-import { getCurrentUser } from '@/utils/authority';
|
|
|
|
|
|
+import {Form as Form3x} from '@ant-design/compatible';
|
|
|
|
+import {getCurrentUser} from '@/utils/authority';
|
|
import DDCode from '@/components/DDComponents/DDCode';
|
|
import DDCode from '@/components/DDComponents/DDCode';
|
|
-import { uploadFile, queryUserListByRoleID } from '@/services/boom';
|
|
|
|
|
|
+import {uploadFile, queryUserListByRoleID} from '@/services/boom';
|
|
import ApprovalProcess from './ApprovalProcess';
|
|
import ApprovalProcess from './ApprovalProcess';
|
|
-import { uuidv4 } from '@antv/xflow';
|
|
|
|
|
|
+import {uuidv4} from '@antv/xflow';
|
|
import AliyunOSSUpload from '@/components/OssUpload/AliyunOssUploader';
|
|
import AliyunOSSUpload from '@/components/OssUpload/AliyunOssUploader';
|
|
import AttachmentTable from '@/components/AttachmentTable';
|
|
import AttachmentTable from '@/components/AttachmentTable';
|
|
-import { getToken } from '@/utils/utils';
|
|
|
|
|
|
+import {getToken} from '@/utils/utils';
|
|
import LuckyExcel from 'luckyexcel';
|
|
import LuckyExcel from 'luckyexcel';
|
|
|
|
+import DDComponents from "@/components/DDComponents";
|
|
|
|
|
|
-const { TextArea } = Input;
|
|
|
|
-const { Option } = Select;
|
|
|
|
-const { TabPane } = Tabs;
|
|
|
|
-const { Step } = Steps;
|
|
|
|
|
|
+const {TextArea} = Input;
|
|
|
|
+const {Option} = Select;
|
|
|
|
+const {TabPane} = Tabs;
|
|
|
|
+const {Step} = Steps;
|
|
|
|
|
|
// 提交
|
|
// 提交
|
|
function CommitAuditModal(props) {
|
|
function CommitAuditModal(props) {
|
|
@@ -82,7 +83,7 @@ function CommitAuditModal(props) {
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
if (!visible) return;
|
|
if (!visible) return;
|
|
- const { edges, nodes } = flowDetail;
|
|
|
|
|
|
+ const {edges, nodes} = flowDetail;
|
|
// initFormList().then(approvalProcess => {
|
|
// initFormList().then(approvalProcess => {
|
|
let Id = version.template_node_id;
|
|
let Id = version.template_node_id;
|
|
const currentId = flowDetail.nodes.find?.(item => item.Id == Id)?.node_id;
|
|
const currentId = flowDetail.nodes.find?.(item => item.Id == Id)?.node_id;
|
|
@@ -105,7 +106,7 @@ function CommitAuditModal(props) {
|
|
// 设置延迟,等待组件渲染
|
|
// 设置延迟,等待组件渲染
|
|
setTimeout(async () => {
|
|
setTimeout(async () => {
|
|
form.setFieldsValue(defaultValues);
|
|
form.setFieldsValue(defaultValues);
|
|
- const approvalProcess = await initFormList();
|
|
|
|
|
|
+ const {approvalProcess} = await initFormList();
|
|
Object.values(defaultValues).forEach(value => onChange(value, approvalProcess || {}));
|
|
Object.values(defaultValues).forEach(value => onChange(value, approvalProcess || {}));
|
|
}, 200);
|
|
}, 200);
|
|
}
|
|
}
|
|
@@ -137,7 +138,8 @@ function CommitAuditModal(props) {
|
|
uploadList.current = files.map(file => OSSData.host + '/' + file.url);
|
|
uploadList.current = files.map(file => OSSData.host + '/' + file.url);
|
|
console.log(uploadList.current);
|
|
console.log(uploadList.current);
|
|
};
|
|
};
|
|
- const OnUploading = file => {};
|
|
|
|
|
|
+ const OnUploading = file => {
|
|
|
|
+ };
|
|
const uploadProps = {
|
|
const uploadProps = {
|
|
OSSData: OSSData,
|
|
OSSData: OSSData,
|
|
// onDone: OnModelFileDone,
|
|
// onDone: OnModelFileDone,
|
|
@@ -155,7 +157,7 @@ function CommitAuditModal(props) {
|
|
if (res.data) {
|
|
if (res.data) {
|
|
const formList = JSON.parse(res.data.json);
|
|
const formList = JSON.parse(res.data.json);
|
|
setApprovalProcess(formList.approvalProcess || {});
|
|
setApprovalProcess(formList.approvalProcess || {});
|
|
- return formList.approvalProcess;
|
|
|
|
|
|
+ return formList;
|
|
// setFormComponentValues(defaultFormData);
|
|
// setFormComponentValues(defaultFormData);
|
|
}
|
|
}
|
|
};
|
|
};
|
|
@@ -205,7 +207,7 @@ function CommitAuditModal(props) {
|
|
* @returns
|
|
* @returns
|
|
*/
|
|
*/
|
|
const getNextNodes = (currentId, type) => {
|
|
const getNextNodes = (currentId, type) => {
|
|
- const { edges, nodes } = flowDetail;
|
|
|
|
|
|
+ const {edges, nodes} = flowDetail;
|
|
if (!currentId) return [];
|
|
if (!currentId) return [];
|
|
//删除虚线通向的节点
|
|
//删除虚线通向的节点
|
|
// let targetIds = edges
|
|
// let targetIds = edges
|
|
@@ -251,15 +253,23 @@ function CommitAuditModal(props) {
|
|
setAuditId(node?.node_id);
|
|
setAuditId(node?.node_id);
|
|
};
|
|
};
|
|
|
|
|
|
- const onChange = (value, approvalProcess) => {
|
|
|
|
|
|
+ const onChange = async (value, approvalProcess) => {
|
|
|
|
+ // 加载之前提交的form数据
|
|
|
|
+ const {formList: resData} = await initFormList();
|
|
|
|
+ const prevFormData = resData && resData.length ? JSON.parse(resData[0]) : [];
|
|
if (value) {
|
|
if (value) {
|
|
changeAudit(value[value.length - 1]);
|
|
changeAudit(value[value.length - 1]);
|
|
- setAuditListFun(approvalProcess);
|
|
|
|
|
|
+ if (prevFormData.length && value[0] === prevFormData.template_node_id) {
|
|
|
|
+ setAuditListFun(approvalProcess, prevFormData.formComponentValues);
|
|
|
|
+ } else {
|
|
|
|
+ setAuditListFun(approvalProcess);
|
|
|
|
+ }
|
|
} else {
|
|
} else {
|
|
changeAudit('');
|
|
changeAudit('');
|
|
setAuditList([]);
|
|
setAuditList([]);
|
|
setApprovalProcess({});
|
|
setApprovalProcess({});
|
|
}
|
|
}
|
|
|
|
+
|
|
form.setFieldValue('next_template_node_id', '');
|
|
form.setFieldValue('next_template_node_id', '');
|
|
};
|
|
};
|
|
|
|
|
|
@@ -311,7 +321,7 @@ function CommitAuditModal(props) {
|
|
};
|
|
};
|
|
|
|
|
|
//处理tabs页
|
|
//处理tabs页
|
|
- const setAuditListFun = async (approvalProcess = {}) => {
|
|
|
|
|
|
+ const setAuditListFun = async (approvalProcess = {}, prevFromData = []) => {
|
|
var fieldsValue = await form.validateFields();
|
|
var fieldsValue = await form.validateFields();
|
|
let addAuditList = [];
|
|
let addAuditList = [];
|
|
let result = Object.values(fieldsValue)
|
|
let result = Object.values(fieldsValue)
|
|
@@ -326,7 +336,7 @@ function CommitAuditModal(props) {
|
|
})
|
|
})
|
|
.filter(item => item);
|
|
.filter(item => item);
|
|
let flowIds = [...new Set(nodeList.map(item => item.flow_id))].join(',');
|
|
let flowIds = [...new Set(nodeList.map(item => item.flow_id))].join(',');
|
|
- let data = await queryProcessFlows({ ids: flowIds });
|
|
|
|
|
|
+ let data = await queryProcessFlows({ids: flowIds});
|
|
if (data && data?.length > 0) {
|
|
if (data && data?.length > 0) {
|
|
let newlist = nodeList.map(node => {
|
|
let newlist = nodeList.map(node => {
|
|
let curData = data.find(item => item.id == node.flow_id);
|
|
let curData = data.find(item => item.id == node.flow_id);
|
|
@@ -341,9 +351,16 @@ function CommitAuditModal(props) {
|
|
addAuditList = [...addAuditList, ...newlist];
|
|
addAuditList = [...addAuditList, ...newlist];
|
|
}
|
|
}
|
|
addAuditList.forEach((item, index) => {
|
|
addAuditList.forEach((item, index) => {
|
|
|
|
+ // 回填历史数据
|
|
|
|
+ if (prevFromData.length) {
|
|
|
|
+ item.items.forEach(DDComponent => {
|
|
|
|
+ const prevValue = prevFromData.find(pItem => pItem.id === DDComponent.props.id)
|
|
|
|
+ DDComponent.props.defaultValue = prevValue.value
|
|
|
|
+ })
|
|
|
|
+ }
|
|
let Components = Form3x.create({
|
|
let Components = Form3x.create({
|
|
onValuesChange: (props, changedValues, allValues) => {
|
|
onValuesChange: (props, changedValues, allValues) => {
|
|
- const { items } = props;
|
|
|
|
|
|
+ const {items} = props;
|
|
formComponentValues[item.nodeId] = items
|
|
formComponentValues[item.nodeId] = items
|
|
.map(item => {
|
|
.map(item => {
|
|
const itemProps = item.props;
|
|
const itemProps = item.props;
|
|
@@ -365,10 +382,10 @@ function CommitAuditModal(props) {
|
|
})
|
|
})
|
|
.filter(item => item);
|
|
.filter(item => item);
|
|
if (getReComputeAudit(items, changedValues)) advanceSubmit();
|
|
if (getReComputeAudit(items, changedValues)) advanceSubmit();
|
|
- setFormComponentValues({ ...formComponentValues });
|
|
|
|
|
|
+ setFormComponentValues({...formComponentValues});
|
|
},
|
|
},
|
|
})(AuditDetailed);
|
|
})(AuditDetailed);
|
|
- item.FormComponents = <Components items={item.items} />;
|
|
|
|
|
|
+ item.FormComponents = <Components items={item.items}/>;
|
|
});
|
|
});
|
|
setAuditList(addAuditList);
|
|
setAuditList(addAuditList);
|
|
if (Object.keys(approvalProcess).length == 0) advanceSubmit();
|
|
if (Object.keys(approvalProcess).length == 0) advanceSubmit();
|
|
@@ -545,7 +562,7 @@ function CommitAuditModal(props) {
|
|
await querySaveBomForm({
|
|
await querySaveBomForm({
|
|
project_id: version.project_id,
|
|
project_id: version.project_id,
|
|
node_id: version.template_node_id,
|
|
node_id: version.template_node_id,
|
|
- json: JSON.stringify({ approvalProcess }),
|
|
|
|
|
|
+ json: JSON.stringify({approvalProcess, fromList}),
|
|
});
|
|
});
|
|
params.audit_series = uuidv4();
|
|
params.audit_series = uuidv4();
|
|
params.files = uploadList.current.join(',');
|
|
params.files = uploadList.current.join(',');
|
|
@@ -574,13 +591,13 @@ function CommitAuditModal(props) {
|
|
const CascaderNode = index => {
|
|
const CascaderNode = index => {
|
|
return (
|
|
return (
|
|
<Form.Item
|
|
<Form.Item
|
|
- labelCol={{ span: 7 }}
|
|
|
|
- wrapperCol={{ span: 15 }}
|
|
|
|
|
|
+ labelCol={{span: 7}}
|
|
|
|
+ wrapperCol={{span: 15}}
|
|
label={`审批节点${index + 1}`}
|
|
label={`审批节点${index + 1}`}
|
|
name={`circle${index}`}
|
|
name={`circle${index}`}
|
|
key={`circle${index}`}
|
|
key={`circle${index}`}
|
|
>
|
|
>
|
|
- <Cascader style={{ width: '100%' }} options={data} onChange={onChange} />
|
|
|
|
|
|
+ <Cascader style={{width: '100%'}} options={data} onChange={onChange}/>
|
|
</Form.Item>
|
|
</Form.Item>
|
|
);
|
|
);
|
|
};
|
|
};
|
|
@@ -642,28 +659,28 @@ function CommitAuditModal(props) {
|
|
<Form form={form}>
|
|
<Form form={form}>
|
|
{data.map((item, idx) => (data.length == 1 ? CascaderNode('') : CascaderNode(idx)))}
|
|
{data.map((item, idx) => (data.length == 1 ? CascaderNode('') : CascaderNode(idx)))}
|
|
<Form.Item
|
|
<Form.Item
|
|
- labelCol={{ span: 7 }}
|
|
|
|
- wrapperCol={{ span: 15 }}
|
|
|
|
|
|
+ labelCol={{span: 7}}
|
|
|
|
+ wrapperCol={{span: 15}}
|
|
label="业务节点"
|
|
label="业务节点"
|
|
name="next_template_node_id"
|
|
name="next_template_node_id"
|
|
// rules={[{ required: true, message: '请选择业务节点' }]}
|
|
// rules={[{ required: true, message: '请选择业务节点' }]}
|
|
>
|
|
>
|
|
- <Select style={{ width: '100%' }}>
|
|
|
|
|
|
+ <Select style={{width: '100%'}}>
|
|
{nextNodesList.map(item => (
|
|
{nextNodesList.map(item => (
|
|
<Option key={item.value}>{item.label}</Option>
|
|
<Option key={item.value}>{item.label}</Option>
|
|
))}
|
|
))}
|
|
</Select>
|
|
</Select>
|
|
</Form.Item>
|
|
</Form.Item>
|
|
- <Form.Item labelCol={{ span: 7 }} wrapperCol={{ span: 15 }} label="备注信息" name="desc">
|
|
|
|
- <Input.TextArea />
|
|
|
|
|
|
+ <Form.Item labelCol={{span: 7}} wrapperCol={{span: 15}} label="备注信息" name="desc">
|
|
|
|
+ <Input.TextArea/>
|
|
</Form.Item>
|
|
</Form.Item>
|
|
- <Form.Item labelCol={{ span: 7 }} wrapperCol={{ span: 15 }} label="附件">
|
|
|
|
- {OSSData.host && <AliyunOSSUpload {...uploadProps} directory={false} label="上传文件" />}
|
|
|
|
|
|
+ <Form.Item labelCol={{span: 7}} wrapperCol={{span: 15}} label="附件">
|
|
|
|
+ {OSSData.host && <AliyunOSSUpload {...uploadProps} directory={false} label="上传文件"/>}
|
|
</Form.Item>
|
|
</Form.Item>
|
|
</Form>
|
|
</Form>
|
|
- <Collapse style={{ marginTop: 20 }}>
|
|
|
|
|
|
+ <Collapse style={{marginTop: 20}}>
|
|
<Collapse.Panel header="已上传附件" key="1">
|
|
<Collapse.Panel header="已上传附件" key="1">
|
|
- <AttachmentTable version={version} canDelete={version.last_version == 0} />
|
|
|
|
|
|
+ <AttachmentTable version={version} canDelete={version.last_version == 0}/>
|
|
</Collapse.Panel>
|
|
</Collapse.Panel>
|
|
</Collapse>
|
|
</Collapse>
|
|
<Tabs defaultActiveKey="1">
|
|
<Tabs defaultActiveKey="1">
|
|
@@ -673,7 +690,7 @@ function CommitAuditModal(props) {
|
|
<Col span={17}>{item.FormComponents}</Col>
|
|
<Col span={17}>{item.FormComponents}</Col>
|
|
<Col offset={1} span={6}>
|
|
<Col offset={1} span={6}>
|
|
{!approvalProcess[item.nodeId] ? ( //!formComponentValues[item.nodeId] ||
|
|
{!approvalProcess[item.nodeId] ? ( //!formComponentValues[item.nodeId] ||
|
|
- <Empty description="请先填写表单" />
|
|
|
|
|
|
+ <Empty description="请先填写表单"/>
|
|
) : (
|
|
) : (
|
|
<ApprovalProcess
|
|
<ApprovalProcess
|
|
id={item.nodeId}
|
|
id={item.nodeId}
|
|
@@ -699,6 +716,7 @@ function getDataValue(item) {
|
|
}
|
|
}
|
|
return arr;
|
|
return arr;
|
|
}
|
|
}
|
|
|
|
+
|
|
const uploadExcelByUrl = (nodeType, versionId) => {
|
|
const uploadExcelByUrl = (nodeType, versionId) => {
|
|
const TEMPLATE_URL =
|
|
const TEMPLATE_URL =
|
|
'https://water-service-test.oss-cn-hangzhou.aliyuncs.com/doc/contract/2023-06-29/ed0d5dcd-6ce0-40df-9d17-a1f69245dbb9.xlsx';
|
|
'https://water-service-test.oss-cn-hangzhou.aliyuncs.com/doc/contract/2023-06-29/ed0d5dcd-6ce0-40df-9d17-a1f69245dbb9.xlsx';
|
|
@@ -714,7 +732,7 @@ const uploadExcelByUrl = (nodeType, versionId) => {
|
|
|
|
|
|
let len = exportJson.sheets.length;
|
|
let len = exportJson.sheets.length;
|
|
const excelData = exportJson.sheets?.map(item => {
|
|
const excelData = exportJson.sheets?.map(item => {
|
|
- return { ...item, order: Number(item.order) };
|
|
|
|
|
|
+ return {...item, order: Number(item.order)};
|
|
});
|
|
});
|
|
delete record.id;
|
|
delete record.id;
|
|
record.order = len;
|
|
record.order = len;
|
|
@@ -742,7 +760,7 @@ async function getExcel(gridKey) {
|
|
return JSON.parse(JSON.parse(res));
|
|
return JSON.parse(JSON.parse(res));
|
|
}
|
|
}
|
|
|
|
|
|
-export default connect(({ xflow, detail, user }) => ({
|
|
|
|
|
|
+export default connect(({xflow, detail, user}) => ({
|
|
flowDetail: xflow.flowDetail,
|
|
flowDetail: xflow.flowDetail,
|
|
versionList: detail.versionList,
|
|
versionList: detail.versionList,
|
|
currentUser: user.currentUser,
|
|
currentUser: user.currentUser,
|