Audit.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import React, { useState, useEffect, useRef, useMemo } from 'react';
  2. import { Form, Select, Button, Table, Input, Checkbox, Divider, Tabs } from 'antd';
  3. import { connect } from 'dva';
  4. import AuditNodeModal from './AuditNodeModal';
  5. import AuditModal from './AuditModal';
  6. import styles from './Audit.less';
  7. import router from 'umi/router';
  8. import Flow, { FLOW_TYPE } from '@/components/Flow';
  9. import AuditForm from '@/components/AuditForm';
  10. import { async } from '@antv/x6/lib/registry/marker/async';
  11. const { Option } = Select;
  12. const { TabPane } = Tabs;
  13. const FLOWID = 2;
  14. function Audit(props) {
  15. const {
  16. roleList,
  17. currentItem,
  18. dispatch,
  19. formItems,
  20. formData,
  21. flowDetail,
  22. simpleFlowDteail,
  23. currentUser,
  24. loading,
  25. } = props;
  26. const ref = useRef();
  27. const permission = currentUser.Permission;
  28. const curItem = useMemo(() => {
  29. let item = localStorage.getItem('currentAudit');
  30. return JSON.stringify(currentItem) == '{}' ? JSON.parse(item) : currentItem;
  31. }, [currentItem, localStorage.getItem('currentAudit')]);
  32. const editMode = useMemo(() => {
  33. // 判断是否有权限
  34. if (permission['func-01-point-bom-flow']) {
  35. return 1;
  36. }
  37. // 判断是否为创建者
  38. if (currentUser.IsSuper) {
  39. return 1;
  40. }
  41. return 2;
  42. }, [permission, flowDetail]);
  43. useEffect(() => {
  44. dispatch({
  45. type: 'flow/queryProcessFlows',
  46. payload: { ids: Number(curItem.id) },
  47. });
  48. dispatch({
  49. type: 'user/getRoleList',
  50. });
  51. dispatch({
  52. type: 'user/fetch',
  53. });
  54. dispatch({
  55. type: 'user/fetchDepV2',
  56. });
  57. }, []);
  58. const onChange = values => {
  59. dispatch({
  60. type: 'xflow/save',
  61. payload: {
  62. formData: values,
  63. },
  64. });
  65. };
  66. const handleSaveClick = async () => {
  67. //只修改表单不渲染xflow getGraphData方法找不到,保存接口返回的flowDetail数据
  68. if (!ref.current?.getGraphData) {
  69. let param = {
  70. // name: curItem.name,
  71. id: Number(curItem.id),
  72. form_json: JSON.stringify(formItems),
  73. process_json: JSON.stringify(flowDetail),
  74. process_simple_json: simpleFlowDteail,
  75. };
  76. dispatch({ type: 'flow/saveAuditFlowInfo', payload: param });
  77. return;
  78. }
  79. await ref.current?.getGraphData?.((data, simpleNodes) => {
  80. let param = {
  81. // name: curItem.name,
  82. id: Number(curItem.id),
  83. form_json: JSON.stringify(formItems),
  84. process_json: data,
  85. process_simple_json: simpleNodes,
  86. };
  87. localStorage.saveAuditFlowInfo = JSON.stringify(param)
  88. dispatch({ type: 'flow/saveAuditFlowInfo', payload: param });
  89. });
  90. };
  91. return (
  92. <div style={{ position: 'relative' }}>
  93. <p>{curItem.name}</p>
  94. <Tabs defaultActiveKey="1">
  95. <TabPane tab="表单设计" key="1">
  96. <AuditForm value={formData} onChange={values => onChange(values)} />
  97. </TabPane>
  98. <TabPane tab="流程控制" key="2">
  99. <Flow
  100. meta={{ type: 'edit', editMode, flowId: curItem.id }}
  101. flowDetail={flowDetail}
  102. ref={ref}
  103. />
  104. </TabPane>
  105. </Tabs>
  106. <Button
  107. loading={loading['flow/saveAuditFlowInfo']}
  108. type="primary"
  109. onClick={handleSaveClick}
  110. style={{ position: 'absolute', right: 0, top: 0 }}
  111. >
  112. 保存
  113. </Button>
  114. </div>
  115. );
  116. }
  117. export default connect(({ flow, loading, user, xflow }) => ({
  118. roleList: flow.roleList,
  119. currentItem: flow.current,
  120. loading: loading.effects,
  121. formItems: xflow.formData,
  122. flowDetail: flow.flowDetail,
  123. formData: flow.formData,
  124. currentUser: user.currentUser,
  125. simpleFlowDteail: flow.simpleFlowDteail,
  126. }))(Audit);