|
@@ -1,4 +1,4 @@
|
|
-import React, { useEffect, useState, useRef } from 'react';
|
|
|
|
|
|
+import React, { useEffect, useState, useRef, useMemo } from 'react';
|
|
import { DownOutlined } from '@ant-design/icons';
|
|
import { DownOutlined } from '@ant-design/icons';
|
|
import { Button, Modal, message, Alert, Spin, Select, Menu, Dropdown } from 'antd';
|
|
import { Button, Modal, message, Alert, Spin, Select, Menu, Dropdown } from 'antd';
|
|
import { connect } from 'dva';
|
|
import { connect } from 'dva';
|
|
@@ -26,7 +26,7 @@ let cell_position = {};
|
|
|
|
|
|
function Detail(props) {
|
|
function Detail(props) {
|
|
const {
|
|
const {
|
|
- flow,
|
|
|
|
|
|
+ // flow,
|
|
dispatch,
|
|
dispatch,
|
|
comment,
|
|
comment,
|
|
history,
|
|
history,
|
|
@@ -36,10 +36,10 @@ function Detail(props) {
|
|
roleList,
|
|
roleList,
|
|
template,
|
|
template,
|
|
versionList,
|
|
versionList,
|
|
|
|
+ auditList,
|
|
match: { params },
|
|
match: { params },
|
|
} = props;
|
|
} = props;
|
|
// const audit_status = 0
|
|
// const audit_status = 0
|
|
- const audit_status = history.list[0]?.audit_status;
|
|
|
|
const [commentVisible, setCommentVisible] = useState(false);
|
|
const [commentVisible, setCommentVisible] = useState(false);
|
|
const [historyVisible, setHistoryVisible] = useState(false);
|
|
const [historyVisible, setHistoryVisible] = useState(false);
|
|
const [compareVisible, setCompareVisible] = useState(false);
|
|
const [compareVisible, setCompareVisible] = useState(false);
|
|
@@ -69,10 +69,32 @@ function Detail(props) {
|
|
edit: false,
|
|
edit: false,
|
|
compare: false,
|
|
compare: false,
|
|
});
|
|
});
|
|
|
|
+ const audit_status = version.audit_status;
|
|
|
|
|
|
const excelId = parseInt(params.excelId);
|
|
const excelId = parseInt(params.excelId);
|
|
const projectId = parseInt(params.projectId);
|
|
const projectId = parseInt(params.projectId);
|
|
|
|
|
|
|
|
+ const flow = useMemo(() => {
|
|
|
|
+ let data = {
|
|
|
|
+ active: 0,
|
|
|
|
+ current: 0,
|
|
|
|
+ currentNode: {},
|
|
|
|
+ list: {
|
|
|
|
+ FlowNodes: [],
|
|
|
|
+ },
|
|
|
|
+ };
|
|
|
|
+ if (version?.flow_id && auditList?.length > 0) {
|
|
|
|
+ let item = auditList.find(item => item.list.id == version.flow_id);
|
|
|
|
+ if (!item) return data;
|
|
|
|
+ item.current = item.list.FlowNodes.findIndex(node => node.id == item.active);
|
|
|
|
+ item.current = item.current == -1 ? 0 : item.current;
|
|
|
|
+ item.currentNode = item.list.FlowNodes[item.current];
|
|
|
|
+ data = item;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return data;
|
|
|
|
+ }, [auditList, version]);
|
|
|
|
+
|
|
const onSave = () => {
|
|
const onSave = () => {
|
|
setEdit(false);
|
|
setEdit(false);
|
|
statusRef.current.edit = false;
|
|
statusRef.current.edit = false;
|
|
@@ -137,7 +159,10 @@ function Detail(props) {
|
|
const renderSheetDom = (item, index) => {
|
|
const renderSheetDom = (item, index) => {
|
|
return (
|
|
return (
|
|
<div key={item?.id || 'temp'} className={styles.sheetItem}>
|
|
<div key={item?.id || 'temp'} className={styles.sheetItem}>
|
|
- <h3>{item?.name}</h3>
|
|
|
|
|
|
+ <h3>
|
|
|
|
+ {item?.name}
|
|
|
|
+ {item.version_name && `(${item.version_name})`}
|
|
|
|
+ </h3>
|
|
<LuckySheet
|
|
<LuckySheet
|
|
className={styles.sheet}
|
|
className={styles.sheet}
|
|
ref={!index ? sheetRef : sheetRef2}
|
|
ref={!index ? sheetRef : sheetRef2}
|
|
@@ -308,18 +333,6 @@ function Detail(props) {
|
|
flow_id: flowNode.flow_id,
|
|
flow_id: flowNode.flow_id,
|
|
node_id: flowNode.id,
|
|
node_id: flowNode.id,
|
|
},
|
|
},
|
|
- callback: (flow, sheets) => {
|
|
|
|
- if (flag) {
|
|
|
|
- // 更新excel id后 跳转新页面
|
|
|
|
- router.push(`/home/detail/${sheets.id}/${projectId}`);
|
|
|
|
- // 更新版本列表
|
|
|
|
- sheets.excel_id = sheets.id;
|
|
|
|
- sheets.name = sheets.version_name;
|
|
|
|
- delete sheets.id;
|
|
|
|
- queryHistory(sheets.excel_id);
|
|
|
|
- setSheet(sheets);
|
|
|
|
- }
|
|
|
|
- },
|
|
|
|
});
|
|
});
|
|
},
|
|
},
|
|
});
|
|
});
|
|
@@ -435,14 +448,14 @@ function Detail(props) {
|
|
// 模板
|
|
// 模板
|
|
handleClickFile();
|
|
handleClickFile();
|
|
break;
|
|
break;
|
|
- case 'auditSuccess':
|
|
|
|
- // 审核通过
|
|
|
|
- onApprove(true);
|
|
|
|
- break;
|
|
|
|
- case 'auditFailed':
|
|
|
|
- // 审核拒绝
|
|
|
|
- onApprove(false);
|
|
|
|
- break;
|
|
|
|
|
|
+ // case 'auditSuccess':
|
|
|
|
+ // // 审核通过
|
|
|
|
+ // onApprove(true);
|
|
|
|
+ // break;
|
|
|
|
+ // case 'auditFailed':
|
|
|
|
+ // // 审核拒绝
|
|
|
|
+ // onApprove(false);
|
|
|
|
+ // break;
|
|
case 'edit':
|
|
case 'edit':
|
|
// 编辑
|
|
// 编辑
|
|
handleEdit(true);
|
|
handleEdit(true);
|
|
@@ -509,10 +522,7 @@ function Detail(props) {
|
|
menuList.push(<Menu.Item key="version">历史提交</Menu.Item>);
|
|
menuList.push(<Menu.Item key="version">历史提交</Menu.Item>);
|
|
// menuList.push(<Menu.Item key="template">模板</Menu.Item>);
|
|
// menuList.push(<Menu.Item key="template">模板</Menu.Item>);
|
|
}
|
|
}
|
|
- if (isAuditor) {
|
|
|
|
- menuList.push(<Menu.Item key="auditSuccess">审批通过</Menu.Item>);
|
|
|
|
- menuList.push(<Menu.Item key="auditFailed">审批拒绝</Menu.Item>);
|
|
|
|
- } else if (canEdit()) {
|
|
|
|
|
|
+ if (!isAuditor && canEdit()) {
|
|
menuList.push(<Menu.Item key="edit">编辑</Menu.Item>);
|
|
menuList.push(<Menu.Item key="edit">编辑</Menu.Item>);
|
|
menuList.push(<Menu.Item key="merge">合并</Menu.Item>);
|
|
menuList.push(<Menu.Item key="merge">合并</Menu.Item>);
|
|
menuList.push(<Menu.Item key="commit">提交</Menu.Item>);
|
|
menuList.push(<Menu.Item key="commit">提交</Menu.Item>);
|
|
@@ -521,11 +531,23 @@ function Detail(props) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return (
|
|
return (
|
|
- <Dropdown overlay={<Menu onClick={handleMenuClick}>{menuList}</Menu>}>
|
|
|
|
- <Button type="primary">
|
|
|
|
- 其他操作 <DownOutlined />
|
|
|
|
- </Button>
|
|
|
|
- </Dropdown>
|
|
|
|
|
|
+ <>
|
|
|
|
+ {isAuditor && (
|
|
|
|
+ <>
|
|
|
|
+ <Button type="primary" onClick={() => onApprove(true)}>
|
|
|
|
+ 审批通过
|
|
|
|
+ </Button>
|
|
|
|
+ <Button onClick={() => onApprove(false)} danger>
|
|
|
|
+ 审批拒绝
|
|
|
|
+ </Button>
|
|
|
|
+ </>
|
|
|
|
+ )}
|
|
|
|
+ <Dropdown overlay={<Menu onClick={handleMenuClick}>{menuList}</Menu>}>
|
|
|
|
+ <Button type="primary">
|
|
|
|
+ 其他操作 <DownOutlined />
|
|
|
|
+ </Button>
|
|
|
|
+ </Dropdown>
|
|
|
|
+ </>
|
|
);
|
|
);
|
|
};
|
|
};
|
|
|
|
|
|
@@ -678,14 +700,12 @@ function Detail(props) {
|
|
window.location.href = `${record.url}`;
|
|
window.location.href = `${record.url}`;
|
|
};
|
|
};
|
|
|
|
|
|
- const onChangeVersion = version => {
|
|
|
|
- // TODO 查询version对应内容,渲染到界面上
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
const changeVersion = id => {
|
|
const changeVersion = id => {
|
|
let version = versionList.find(item => item.id == id);
|
|
let version = versionList.find(item => item.id == id);
|
|
|
|
+ if (!version) return message.error('版本不存在!');
|
|
setVersion(version);
|
|
setVersion(version);
|
|
- sheetRef.current.renderSheet([]);
|
|
|
|
|
|
+
|
|
|
|
+ // 查询excel内容
|
|
dispatch({
|
|
dispatch({
|
|
type: 'detail/queryRecord',
|
|
type: 'detail/queryRecord',
|
|
payload: {
|
|
payload: {
|
|
@@ -695,9 +715,38 @@ function Detail(props) {
|
|
version_id: version.id,
|
|
version_id: version.id,
|
|
},
|
|
},
|
|
callback: sheets => {
|
|
callback: sheets => {
|
|
|
|
+ console.log(sheets);
|
|
|
|
+ setSheet(sheets);
|
|
sheetRef.current.renderSheet(sheets.data);
|
|
sheetRef.current.renderSheet(sheets.data);
|
|
},
|
|
},
|
|
});
|
|
});
|
|
|
|
+
|
|
|
|
+ // 查询历史修改
|
|
|
|
+ dispatch({
|
|
|
|
+ type: 'detail/queryHistoryList',
|
|
|
|
+ payload: {
|
|
|
|
+ version_id: version.id,
|
|
|
|
+ },
|
|
|
|
+ });
|
|
|
|
+ // 判断是否审批节点
|
|
|
|
+ // dispatch({
|
|
|
|
+ // type: 'detail/queryAuditList',
|
|
|
|
+ // payload: {
|
|
|
|
+ // template_id: version.template_id ,
|
|
|
|
+ // template_node_id: version.template_node_id ,
|
|
|
|
+ // flow_id: version.flow_id
|
|
|
|
+ // }
|
|
|
|
+ // })
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ const onSubmitNextNode = values => {
|
|
|
|
+ dispatch({
|
|
|
|
+ type: 'detail/submitNextNode',
|
|
|
|
+ payload: values,
|
|
|
|
+ callback: () => {
|
|
|
|
+ setCommitAuditVisible(false);
|
|
|
|
+ },
|
|
|
|
+ });
|
|
};
|
|
};
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
@@ -713,7 +762,10 @@ function Detail(props) {
|
|
id: 1,
|
|
id: 1,
|
|
},
|
|
},
|
|
});
|
|
});
|
|
-
|
|
|
|
|
|
+ // 审批流程
|
|
|
|
+ dispatch({
|
|
|
|
+ type: 'detail/queryAuditList',
|
|
|
|
+ });
|
|
// 查询节点
|
|
// 查询节点
|
|
// dispatch({
|
|
// dispatch({
|
|
// type: 'detail/queryFlowInfo',
|
|
// type: 'detail/queryFlowInfo',
|
|
@@ -767,10 +819,14 @@ function Detail(props) {
|
|
}
|
|
}
|
|
}, [compareList]);
|
|
}, [compareList]);
|
|
|
|
|
|
- // useEffect(() => {
|
|
|
|
- // // 根据excel id查询历史版本
|
|
|
|
- // queryHistory();
|
|
|
|
- // }, [excelId]);
|
|
|
|
|
|
+ useEffect(() => {
|
|
|
|
+ if (versionList.length == 0) return;
|
|
|
|
+ if (!version.id) {
|
|
|
|
+ changeVersion(excelId);
|
|
|
|
+ } else {
|
|
|
|
+ changeVersion(version.id);
|
|
|
|
+ }
|
|
|
|
+ }, [versionList]);
|
|
|
|
|
|
return (
|
|
return (
|
|
<Spin spinning={false}>
|
|
<Spin spinning={false}>
|
|
@@ -780,7 +836,10 @@ function Detail(props) {
|
|
</Button>
|
|
</Button>
|
|
<div className={styles.top}>
|
|
<div className={styles.top}>
|
|
<div>
|
|
<div>
|
|
- 当前节点: {version.template_node_id}/当前状态:{version.audit_status}
|
|
|
|
|
|
+ {/* 当前节点: {version.template_node_id}
|
|
|
|
+ <br />
|
|
|
|
+ 当前状态:{version.audit_status} */}
|
|
|
|
+ {flow.active !== 0 && <TimeNode flow={flow}></TimeNode>}
|
|
</div>
|
|
</div>
|
|
<div className={styles.btns}>
|
|
<div className={styles.btns}>
|
|
{renderBtns()}
|
|
{renderBtns()}
|
|
@@ -798,7 +857,7 @@ function Detail(props) {
|
|
))}
|
|
))}
|
|
</Select>
|
|
</Select>
|
|
</div>
|
|
</div>
|
|
- {/* <TimeNode flow={flow}></TimeNode>
|
|
|
|
|
|
+ {/*
|
|
|
|
|
|
<div className={styles.btns}>{renderBtns()}</div>
|
|
<div className={styles.btns}>{renderBtns()}</div>
|
|
*/}
|
|
*/}
|
|
@@ -832,14 +891,14 @@ function Detail(props) {
|
|
/>
|
|
/>
|
|
<HistoryModal
|
|
<HistoryModal
|
|
visible={historyVisible}
|
|
visible={historyVisible}
|
|
- data={history}
|
|
|
|
|
|
+ version={version}
|
|
// onChange={queryHistory}
|
|
// onChange={queryHistory}
|
|
onClose={() => setHistoryVisible(false)}
|
|
onClose={() => setHistoryVisible(false)}
|
|
onSelect={item => exportSheet(item)}
|
|
onSelect={item => exportSheet(item)}
|
|
/>
|
|
/>
|
|
<CompareModal
|
|
<CompareModal
|
|
visible={compareVisible}
|
|
visible={compareVisible}
|
|
- list={history.list}
|
|
|
|
|
|
+ version={version}
|
|
onClose={() => setCompareVisible(false)}
|
|
onClose={() => setCompareVisible(false)}
|
|
onOk={onCompare}
|
|
onOk={onCompare}
|
|
/>
|
|
/>
|
|
@@ -860,7 +919,7 @@ function Detail(props) {
|
|
visible={flowVisible}
|
|
visible={flowVisible}
|
|
onClose={() => setFlowVisible(false)}
|
|
onClose={() => setFlowVisible(false)}
|
|
// onOk={onCommit}
|
|
// onOk={onCommit}
|
|
- onChangeVersion={onChangeVersion}
|
|
|
|
|
|
+ onChangeVersion={version => changeVersion(version.id)}
|
|
/>
|
|
/>
|
|
<AuditModal
|
|
<AuditModal
|
|
loading={getLoading()}
|
|
loading={getLoading()}
|
|
@@ -888,7 +947,7 @@ function Detail(props) {
|
|
visible={commitAuditVisible}
|
|
visible={commitAuditVisible}
|
|
version={version}
|
|
version={version}
|
|
onClose={() => setCommitAuditVisible(false)}
|
|
onClose={() => setCommitAuditVisible(false)}
|
|
- onOk={() => {}}
|
|
|
|
|
|
+ onOk={onSubmitNextNode}
|
|
/>
|
|
/>
|
|
</Spin>
|
|
</Spin>
|
|
);
|
|
);
|
|
@@ -896,6 +955,7 @@ function Detail(props) {
|
|
|
|
|
|
export default connect(({ detail, user, loading }) => ({
|
|
export default connect(({ detail, user, loading }) => ({
|
|
flow: detail.flow,
|
|
flow: detail.flow,
|
|
|
|
+ auditList: detail.auditList,
|
|
fileList: detail.fileList,
|
|
fileList: detail.fileList,
|
|
history: detail.history,
|
|
history: detail.history,
|
|
comment: detail.comment,
|
|
comment: detail.comment,
|