import React, { useEffect, useState, useRef, useMemo, memo } from 'react';
import { Modal, Input, Select, List, Row, Col, Table, message, Steps, Space, Button } from 'antd';
import Flow from '@/components/Flow/index';
import { connect } from 'dva';
import { GetTokenFromUrl, getToken } from '@/utils/utils';
import { MODELS, useXFlowApp, useModelAsync } from '@antv/xflow';
import { CheckOutlined } from '@ant-design/icons';
import { queryRecordSheet, queryVserionByNode } from '@/services/boom';
import { async } from '@antv/x6/lib/registry/marker/async';
import VersionModal from './VersionModal';
const { Step } = Steps;
const { TextArea } = Input;
const localData = JSON.parse(localStorage.ggDetaiData || '{}');
const PAGE_SIZE = 8;
// 提交
function FlowModal(props) {
const {
visible,
version,
onClose,
onChangeVersion,
form,
loading,
flowDetail,
dispatch,
isOut,
onCommit,
} = props;
const [data, setData] = useState([]);
const [nodeLoading, setNodeLoading] = useState(false);
const [pageSize, setPageSize] = useState(PAGE_SIZE);
const [stepsData, setStepsData] = useState([]);
const [versionVisible, setVersionVisible] = useState(false);
let token = getToken();
const graphData = useMemo(() => {
if (!flowDetail) return;
let nodes = flowDetail.nodes?.map(item => ({
...item,
isCheck: item.Id == version.template_node_id,
}));
return {
nodes,
edges: flowDetail.edges,
};
}, [flowDetail, version.template_node_id]);
useEffect(() => {
if (!visible) updateSteps([]);
}, [visible, version]);
useEffect(() => {
if (stepsData.length <= 0) {
setPageSize(PAGE_SIZE);
} else {
setPageSize(PAGE_SIZE - stepsData.length);
}
}, [stepsData]);
const handleSelectNode = async args => {
let res;
const id = args.nodeId || args.nodeIds[0];
if (!id) return;
let node = graphData.nodes.find(item => item.id == id);
setNodeLoading(true);
try {
res = await queryVserionByNode({ template_node_id: node.Id });
let data = [];
if (!res.data.excel_version_tree) setData([]);
res.data.excel_version_tree?.map(arr => {
if (res.data.flow_id) {
data = [...data, { ...arr, flow_id: res.data.flow_id }];
} else {
data = [...data, arr];
}
});
data.sort((a, b) => a.id - b.id);
data.forEach((item, id) => {
//解决key报错问题
data[id].key = `${id}-${item.name}`;
item.isParent = true;
});
console.log(data);
setData(data);
} catch (error) {
console.log(error);
}
setNodeLoading(false);
updateSteps([]);
};
const updateSteps = (data, curNodeId) => {
let newData = [];
let set = new Set();
data.forEach(item => set.add(item.template_node_id));
let list = [...set];
if (set.has(curNodeId)) {
set.delete(curNodeId);
list = [curNodeId, ...set];
}
let dataList = list.map(template_node_id => {
let itemDataList = data.filter(item => item.template_node_id == template_node_id);
let curid = 3;
let status = 'process';
itemDataList.forEach(item => {
if (item.audit_status != 3 && item.node_id <= curid) curid = item.node_id - 1;
if (item.audit_status == 2) status = 'error';
});
let curNode = flowDetail.nodes.find(item => item.Id == itemDataList[0].template_node_id);
let obj = {
status,
current: curid,
list: itemDataList[0].FlowInfo.FlowNodes,
name: curNode?.label || itemDataList[0].FlowInfo.name,
};
itemDataList.forEach((itemData, idx) => {
if (idx >= obj.list.length) return;
obj.list[idx].auditor = itemData.AuthorInfo.CName;
});
return obj;
});
setStepsData(dataList);
};
const handleChangeClick = item => {
let type = item.flow_id ? 'detail/queryAuditRecord' : 'detail/queryAuditExcel';
dispatch({
type,
payload: {
excel_id: item.id,
pageSize: 100,
},
callback: res => {
updateSteps(res, item.template_node_id);
},
});
};
const columns = useMemo(() => {
return [
{
title: '名称',
// width: '33%',
render: item => (
{item.id == version.id && }
{item.version_no && !item.isParent
? `${item.version_name}.${item.version_no}`
: item.version_name}
),
},
{
title: '状态',
width: '30%',
render: item => {
let style = { color: getColor(item) };
let txt = '';
switch (item.audit_status) {
case 0:
txt = '未提交';
break;
case 1:
txt = '待审批';
break;
case 2:
txt = '已拒绝';
break;
case 3:
txt = '已通过';
break;
case 4:
txt = '已提交';
break;
}
if (item.status == 1) txt = '已失效';
return item.audit_status != 0 ? (
) : (
{txt}
);
},
},
{
title: '操作',
width: '20%',
render: item =>
item.id != version.id && (
{
onChangeVersion(item);
onClose();
}}
>
加载
),
},
];
}, [version]);
const onChange = () => {
updateSteps([]);
};
return (
<>
{isOut && data.length == 1 && !data[0].children && (
)}
{stepsData.map((item, idx) => (
{item.name}
{item.list.map(node => (
))}
))}
setVersionVisible(false)}
onOk={values => {
onCommit?.(values);
setVersionVisible(false);
}}
/>
>
);
}
const getColor = item => {
let color = '';
switch (item.audit_status) {
case 2:
// 审批拒绝
color = '#f5222d';
break;
case 3:
// 审批成功
color = '#7cb305';
break;
case 4:
// 历史清单
color = '#9b9b9b';
break;
default:
break;
}
return color;
};
// export default connect(({ xflow, detail }) => ({
// flowDetail: xflow.flowDetail,
// }))(FlowModal);
export default FlowModal;