index.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. import React, { useState, useEffect, useRef } from 'react';
  2. import { Button, Space, Table, message } from 'antd';
  3. import { connect, useNavigate } from 'umi';
  4. import AuditModal from './AuditModal';
  5. import PageContent from '@/components/PageContent';
  6. import { queryProcessFlows, saveAuditFlowInfo } from '@/services/boom';
  7. function Audit(props) {
  8. const { list = [], classify = [], dispatch, loading } = props;
  9. let navigate = useNavigate();
  10. const [data, setData] = useState();
  11. const [visible, setVisible] = useState({
  12. audit: false,
  13. auditNode: false,
  14. });
  15. const detailRef = useRef();
  16. const columns = [
  17. {
  18. title: '审批流名称',
  19. dataIndex: 'name',
  20. },
  21. {
  22. title: '分类',
  23. dataIndex: 'classify_id',
  24. render: (id) => classify?.find((item) => item.id == id)?.name || '-',
  25. },
  26. {
  27. title: '操作',
  28. render: (item, index) => (
  29. <Space>
  30. <a
  31. onClick={() => {
  32. setCurrentNode(item);
  33. }}
  34. >
  35. 编辑
  36. </a>
  37. <a
  38. onClick={() => {
  39. setData(item);
  40. changeVisible('audit', true);
  41. queryDetail(item);
  42. }}
  43. >
  44. 复制
  45. </a>
  46. </Space>
  47. ),
  48. },
  49. ];
  50. const queryDetail = async (item) => {
  51. const res = await queryProcessFlows({ ids: Number(item.id) });
  52. if (res?.data) {
  53. detailRef.current = res.data;
  54. }
  55. };
  56. const handleCopy = async (values) => {
  57. dispatch({
  58. type: 'flow/addAudit',
  59. payload: {
  60. ...values,
  61. flow_type: 1,
  62. },
  63. callback: async (res) => {
  64. if (res?.data && detailRef.current) {
  65. let param = {
  66. id: Number(res.data?.id),
  67. form_json: detailRef.current.form_json,
  68. process_json: detailRef.current.process_json,
  69. process_simple_json: detailRef.current.process_simple_json,
  70. };
  71. saveAuditFlowInfo(param).then((res) => message.success('添加成功'));
  72. // dispatch({ type: 'flow/saveAuditFlowInfo', payload: param });
  73. }
  74. changeVisible('audit', false);
  75. },
  76. });
  77. };
  78. const handleAuditOk = (values) => {
  79. dispatch({
  80. type: 'flow/addAudit',
  81. payload: {
  82. ...values,
  83. flow_type: 1,
  84. },
  85. callback: () => {
  86. message.success('新增成功');
  87. changeVisible('audit', false);
  88. },
  89. });
  90. };
  91. const changeVisible = (type, visible) => {
  92. setVisible({
  93. ...visible,
  94. [type]: visible,
  95. });
  96. };
  97. const setCurrentNode = (item) => {
  98. localStorage.setItem('currentAudit', JSON.stringify(item));
  99. dispatch({
  100. type: 'flow/save',
  101. payload: {
  102. current: item.list,
  103. },
  104. });
  105. navigate('/flow/audit');
  106. };
  107. useEffect(() => {
  108. dispatch({
  109. type: 'flow/queryAuditList',
  110. payload: {
  111. flow_type: 1,
  112. },
  113. });
  114. dispatch({
  115. type: 'flow/queryClassify',
  116. payload: {
  117. c_type: 1,
  118. },
  119. });
  120. }, []);
  121. return (
  122. <PageContent>
  123. <Button
  124. key={1}
  125. onClick={() => {
  126. setData(null);
  127. changeVisible('audit', true);
  128. }}
  129. type="primary"
  130. >
  131. 新建流程
  132. </Button>
  133. <Table
  134. style={{ marginTop: 20 }}
  135. loading={loading['flow/queryAuditList']}
  136. rowKey="id"
  137. dataSource={list}
  138. columns={columns}
  139. />
  140. <AuditModal
  141. data={data}
  142. loading={loading['flow/addAudit']}
  143. visible={visible.audit}
  144. onOk={data ? handleCopy : handleAuditOk}
  145. onCancel={() => changeVisible('audit', false)}
  146. classify={classify}
  147. />
  148. </PageContent>
  149. );
  150. }
  151. export default connect(({ flow, loading }) => ({
  152. list: flow.auditList,
  153. classify: flow.classify,
  154. loading: loading.effects,
  155. }))(Audit);