Renxy 2 år sedan
förälder
incheckning
aca8f9072d

+ 2 - 2
config/config.js

@@ -140,8 +140,8 @@ export default {
   chainWebpack: webpackPlugin,
   proxy: {
     '/api': {
-      // target: 'http://192.168.20.152:8888/',
-      target: 'http://47.96.12.136:8896/',
+      target: 'http://192.168.20.152:8888/',
+      // target: 'http://47.96.12.136:8896/',
       // target: 'http://oraysmart.com:8889/',
       // target: 'http://oraysmart.com:8888/api',
       // changeOrigin: true,

+ 2 - 15
src/components/DDComponents/DDMultiSelectField/index.js

@@ -17,22 +17,9 @@ function DDMultiSelectField(props) {
       }}
     >
       {options?.map(cur => {
-        if (typeof cur == 'string') {
-          try {
-            // 判断是否为json字符串
-            cur = JSON.parse(cur);
-          } catch (error) {
-            // 拼接成对象
-            cur = {
-              key: cur,
-              value: cur,
-            };
-          }
-        }
-
         return (
-          <Option key={cur.key} value={cur.value}>
-            {cur.value}
+          <Option key={cur} value={cur}>
+            {cur}
           </Option>
         );
       })}

+ 2 - 15
src/components/DDComponents/DDSelectField/index.js

@@ -15,22 +15,9 @@ function DDSelectField(props) {
       }}
     >
       {options?.map(cur => {
-        if (typeof cur == 'string') {
-          try {
-            // 判断是否为json字符串
-            cur = JSON.parse(cur);
-          } catch (error) {
-            // 拼接成对象
-            cur = {
-              key: cur,
-              value: cur,
-            };
-          }
-        }
-
         return (
-          <Option key={cur.key} value={cur.value}>
-            {cur.value}
+          <Option key={cur} value={cur}>
+            {cur}
           </Option>
         );
       })}

+ 2 - 2
src/components/DDComponents/InnerContactField/index.js

@@ -6,7 +6,7 @@ const { Option } = Select;
 
 function InnerContactField(props) {
   const { value, userList, onChange } = props;
-
+  console.log(userList);
   return (
     <Select
       showSearch
@@ -23,7 +23,7 @@ function InnerContactField(props) {
       {(userList || [])
         .filter(item => item.DingUserId)
         .map(item => (
-          <Option key={item.ID} value={item.DingUserId}>
+          <Option key={item.ID} value={item.ID}>
             {item.CName}
           </Option>
         ))}

+ 2 - 2
src/components/Flow/components/judgeComponent/index.tsx

@@ -31,7 +31,7 @@ export const JudgeOptions = [
 ];
 export const SiginOptions = [
   { label: '<', value: 1 },
-  { label: '≤', value: 2 },
+  { label: '≤', value: 3 },
 ];
 
 const RenderJudge = (props: any) => {
@@ -233,4 +233,4 @@ const RenderJudge = (props: any) => {
   return <>{formData.map(item => RenderComp(item))}</>;
 };
 
-export default connect(({ flow }) => ({ depUserTree: flow.depUserTree }))(RenderJudge);
+export default connect(({ user }) => ({ depUserTree: user.depUserTree }))(RenderJudge);

+ 22 - 2
src/components/Flow/index.tsx

@@ -70,10 +70,30 @@ export const Demo: React.FC<IProps> = props => {
         {
           saveGraphDataService: (meta, graphData) => {
             let data = JSON.parse(JSON.stringify(graphData));
-
+            let simpleNodes = data?.nodes?.map(curNode => {
+              let children = data.edges
+                .map(edge => {
+                  if (edge.source?.cell == curNode.id) {
+                    return edge.target?.cell;
+                  }
+                })
+                .filter(item => item);
+              const node = {
+                id: curNode.id,
+                type: curNode.type,
+                //条件节点
+                formItems: curNode.formItems,
+                priority: curNode.priority,
+                //审批节点
+                roleID: curNode.roleID,
+                audits: curNode.audits,
+                children: children,
+              };
+              return node;
+            });
             console.log(data);
             console.log(JSON.stringify(data));
-            cb?.(JSON.stringify(data));
+            cb?.(JSON.stringify(data), JSON.stringify(simpleNodes));
             return data;
           },
         }

+ 6 - 17
src/components/Flow/node/auditNode/index.tsx

@@ -1,24 +1,13 @@
 import React, { useMemo } from 'react';
 AuditServe;
 import AuditServe, { TYPE } from './mapServe';
-// import { Badge } from 'antd';
-import { useXFlowApp, XFlowNodeCommands } from '@antv/xflow';
 import { connect } from 'dva';
 export { AuditServe };
 
 const CustomRect = props => {
   const { size = { width: 130, height: 50 }, data, depUserTree, roleList } = props;
   const { width, height } = size;
-  const { label, stroke, fill, fontFill, fontSize, type = 1, audits, roleID } = data;
-  const app = useXFlowApp();
-  const handleClick = () => {
-    // console.log(data);
-    app.executeCommand(XFlowNodeCommands.SELECT_NODE.id, {
-      nodeId: data.id,
-    });
-    // console.log('XFlowNodeCommands.SELECT_NODE.id', data);
-    // message.success(`${XFlowNodeCommands.SELECT_NODE.label}: 命令执行成功`);
-  };
+  const { label, stroke, fill, fontFill, fontSize, type = 2, audits, roleID } = data;
 
   const contentText = useMemo(() => {
     let text = '请选择审批人';
@@ -122,18 +111,18 @@ const CustomRect = props => {
   );
 };
 
-export default connect(({ flow }) => ({
-  depUserTree: flow.depUserTree,
-  roleList: flow.roleList,
+export default connect(({ user }) => ({
+  depUserTree: user.depUserTree,
+  roleList: user.roleList,
 }))(CustomRect);
 
 const enum COLOR {
-  AUDIT = '#FF943E',
   INITIATOR = '#576A95',
+  AUDIT = '#FF943E',
   COPYMAN = '#3296FA',
 }
 const enum TITLETEXT {
-  AUDIT = '审批人',
   INITIATOR = '发起人',
+  AUDIT = '审批人',
   COPYMAN = '抄送人',
 }

+ 7 - 5
src/components/Flow/node/auditNode/mapServe.tsx

@@ -9,8 +9,8 @@ import { Button, Select, TreeSelect } from 'antd';
 const { Option } = Select;
 
 export const enum TYPE {
-  AUDIT = 1,
-  INITIATOR,
+  INITIATOR = 1,
+  AUDIT,
   JUDGE,
   COPYMAN,
 }
@@ -58,6 +58,7 @@ const Component = (props: any) => {
         [key]: value,
       });
       updateNode({
+        type: nodeConfig.type ? nodeConfig.type : TYPE.AUDIT,
         [key]: value,
       });
     } else if (value instanceof Object) {
@@ -66,6 +67,7 @@ const Component = (props: any) => {
         ...value,
       });
       updateNode({
+        type: nodeConfig.type ? nodeConfig.type : TYPE.AUDIT,
         ...value,
       });
     }
@@ -215,8 +217,8 @@ function RecthServe(props: any) {
   );
 }
 
-export default connect(({ xflow, flow }) => ({
+export default connect(({ xflow, flow, user }) => ({
   auditList: xflow.auditList,
-  depUserTree: flow.depUserTree,
-  roleList: flow.roleList,
+  depUserTree: user.depUserTree,
+  roleList: user.roleList,
 }))(RecthServe);

+ 3 - 3
src/components/Flow/node/judgeNode/index.tsx

@@ -81,7 +81,7 @@ const JudgeRect = props => {
         boxShadow: '0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19)',
       }}
     >
-      <span style={{ color: '##7E8185', float: 'right', fontSize: '8px' }}>优先级{priority}</span>
+      <span style={{ color: '#7E8185', float: 'right', fontSize: '8px' }}>优先级{priority}</span>
       <div style={{ color: '#15BC83' }}>{label}</div>
       <div
         style={{
@@ -108,8 +108,8 @@ const JudgeRect = props => {
   );
 };
 
-export default connect(({ flow }) => ({
-  depUserTree: flow.depUserTree,
+export default connect(({ user }) => ({
+  depUserTree: user.depUserTree,
 }))(JudgeRect);
 
 const enum COLOR {

+ 8 - 5
src/components/Flow/node/judgeNode/mapServe.tsx

@@ -7,12 +7,13 @@ import { UnityAction } from '@/utils/utils';
 import { Button } from 'antd';
 import AddCondition from '../../components/judgeModal';
 import RenderJudge, { JudgeType } from '../../components/judgeComponent';
+import { TYPE } from '../auditNode/mapServe';
 
-export const enum TYPE {
-  AUDIT,
-  INITIATOR,
-  COPYMAN,
-}
+// export const enum TYPE {
+//   AUDIT,
+//   INITIATOR,
+//   COPYMAN,
+// }
 
 export const enum ComponentName {
   Inner = 'InnerContactField',
@@ -120,6 +121,7 @@ const Component = (props: any) => {
         [key]: value,
       });
       updateNode({
+        type: TYPE.JUDGE,
         [key]: value,
       });
     } else if (value instanceof Object) {
@@ -128,6 +130,7 @@ const Component = (props: any) => {
         ...value,
       });
       updateNode({
+        type: TYPE.JUDGE,
         ...value,
       });
     }

+ 1 - 1
src/components/Flow/node/rect/mapServe.tsx

@@ -292,4 +292,4 @@ function RecthServe(props: any) {
   );
 }
 
-export default connect(({ flow }) => ({ roleList: flow.roleList }))(RecthServe);
+export default connect(({ user }) => ({ roleList: user.roleList }))(RecthServe);

+ 39 - 1
src/models/user.js

@@ -5,11 +5,38 @@ import {
   queryUserRole,
   queryUnreadNotification,
   SetNotificationRead,
+  queryDepV2,
 } from '@/services/user';
 import { ShowUnreadNotification } from '@/utils/utils';
 import { queryDeviceItemRealtimeData } from '@/services/DeviceAdmin';
 import { queryUserList } from '@/services/plant';
-import { queryProjectMenu, queryUserDetail } from '@/services/SysAdmin';
+import { queryProjectMenu, queryUserDetail, queryRole } from '@/services/SysAdmin';
+
+function getDepUserTree(data) {
+  data.title = `${data.Name}`;
+  data.id = data.ID;
+  data.value = data.ID;
+  // data.selectable = false;
+  if (!data.children) data.children = new Array();
+
+  if (data.children) {
+    data.children.forEach(item => {
+      getDepUserTree(item);
+    });
+  }
+
+  if (data.Users && data.Users.length !== 0) {
+    data.Users.forEach(item => {
+      item.title = item.CName;
+      item.id = item.ID + '||' + data.ID;
+      item.value = item.ID + '||' + data.ID;
+      // item.selectable = true;
+      item.DepId = data.ID;
+      data.children.push(item);
+    });
+  }
+  return data;
+}
 
 const getRoleList = data => {
   let roleList = [];
@@ -34,6 +61,8 @@ export default {
     message: {},
     userList: [],
     depRole: [],
+    depUserTree: [],
+    roleList: [],
   },
 
   effects: {
@@ -126,6 +155,15 @@ export default {
         });
       }
     },
+    *getRoleList({ payload }, { call, put }) {
+      const response = yield call(queryRole, payload);
+      if (response) {
+        yield put({
+          type: 'save',
+          payload: { roleList: response.data.list },
+        });
+      }
+    },
   },
 
   reducers: {

+ 13 - 0
src/models/xflow.js

@@ -38,6 +38,19 @@ export default {
         });
       }
     },
+    *fetchDepV2({ payload, callback }, { call, put }) {
+      const response = yield call(queryDepV2, { pageSize: 999999 });
+      if (response) {
+        // const depUserTree = response.data?.list;
+        const depUserTree = response.data.list.map(item => {
+          return getDepUserTree(item);
+        });
+        yield put({
+          type: 'save',
+          payload: { depUserTree },
+        });
+      }
+    },
   },
 
   reducers: {

+ 22 - 26
src/pages/PurchaseAdmin/PurchaseList/Detail/CommitAuditModal.js

@@ -7,7 +7,7 @@ import { useForm } from 'rc-field-form';
 import { async } from '@antv/x6/lib/registry/marker/async';
 import AuditDetailed from './AuditDetailed';
 import AuditFlow from './AuditFlow';
-import { queryDingSchema } from '@/services/boom';
+import { queryDingSchema, queryProcessFlows } from '@/services/boom';
 import { Form as Form3x } from '@ant-design/compatible';
 import { getCurrentUser } from '@/utils/authority';
 import DDCode from '@/components/DDComponents/DDCode';
@@ -154,20 +154,28 @@ function CommitAuditModal(props) {
       .map(Id => {
         return flowDetail.nodes.find?.(item => item.Id == Id);
       })
-      .filter(item => item.process_code);
-    for (let i = 0; i < codeList.length; i++) {
-      let res = await queryDingSchema({ process_code: codeList[i].process_code });
-      if (res) {
-        res.data.result.nodeId = codeList[i].Id;
-        addAuditList.push(res.data.result);
-      }
+      .filter(item => item);
+    console.log('============', codeList);
+    let flowIds = [...new Set(codeList.map(item => item.flow_id))].join(',');
+    let data = await queryProcessFlows({ ids: flowIds });
+    if (data && data?.length > 0) {
+      let newlist = codeList.map(node => {
+        let curData = data.find(item => item.id == node.flow_id);
+        let newItem = {
+          name: curData?.name,
+          nodeId: node.Id,
+          items: JSON.parse(curData.form_json),
+        };
+        return newItem;
+      });
+      addAuditList = [...addAuditList, ...newlist];
     }
-    console.log(JSON.stringify(addAuditList));
+
+    console.log(addAuditList);
     addAuditList.forEach((item, index) => {
       let Components = Form3x.create({
         onValuesChange: (props, changedValues, allValues) => {
           const { items } = props;
-          console.log(item);
           formComponentValues[item.nodeId] = items
             .map(item => {
               const itemProps = item.props;
@@ -182,7 +190,7 @@ function CommitAuditModal(props) {
               } else if (allValues[itemProps.id]) {
                 return {
                   name: itemProps.label,
-                  // id: itemProps.id,
+                  id: itemProps.id,
                   value: allValues[itemProps.id] || undefined,
                 };
               }
@@ -191,7 +199,7 @@ function CommitAuditModal(props) {
           setFormComponentValues({ ...formComponentValues });
         },
       })(AuditDetailed);
-      item.FormComponents = <Components items={item.schemaContent.items} />;
+      item.FormComponents = <Components items={item.items} />;
     });
     setAuditList(addAuditList);
   };
@@ -211,24 +219,12 @@ function CommitAuditModal(props) {
       });
     }
     let firstList = [...new Set(list)];
-    // let firstList = idList[0];
-    // for (let i = 1; i < idList.length; i++) {
-    //   let item = idList[i];
-    //   item.forEach(itemId => {
-    //     let idx = firstList.findIndex(id => id == itemId);
-    //     if (idx > 0 && !firstList.find(cur => cur == item[idx - 1])) {
-    //       firstList.splice(idx, 0, item[i - 1]);
-    //     }
-    //   });
-    // }
     let attachment = await upload();
     firstList.forEach(id => {
       let approvalNode = flowDetail.nodes.find?.(item => item.Id == id);
       let values = data[approvalNode.Id] || [];
       const formItem = {
-        processCode: approvalNode.process_code,
-        originatorUserId: currentUser.DingUserId || getCurrentUser()?.DingUserId, //'16569001414345099',
-        deptId: '14237557', //currentUser.DingDepId || getCurrentUser()?.DingDepId,
+        flow_id: `${approvalNode.flow_id}`,
         template_node_id: `${approvalNode.Id}`,
         formComponentValues: [...values, { name: '附件', value: JSON.stringify(attachment) }],
       };
@@ -238,7 +234,7 @@ function CommitAuditModal(props) {
   };
   const onFinish = async () => {
     var fieldsValue = await form.validateFields();
-    console.log(formComponentValues);
+    console.log();
     let hasFlowId = true; //是否都绑定审批节点
     const getFlowPath = node => {
       //[134, 135]

+ 6 - 5
src/pages/PurchaseAdmin/PurchaseList/Flow/Audit.js

@@ -22,10 +22,10 @@ function Audit(props) {
   }, [currentItem, localStorage.getItem('currentAudit')]);
 
   useEffect(() => {
-    // dispatch({
-    //   type: 'flow/queryProcessFlows',
-    //   payload: { ids: Number(curItem.id) },
-    // });
+    dispatch({
+      type: 'flow/queryProcessFlows',
+      payload: { ids: Number(curItem.id) },
+    });
     dispatch({
       type: 'flow/fetchDepV2',
     });
@@ -40,12 +40,13 @@ function Audit(props) {
   };
 
   const handleSaveClick = async () => {
-    const data = await ref.current.getGraphData(data => {
+    const data = await ref.current.getGraphData((data, simpleNodes) => {
       let param = {
         // name: curItem.name,
         id: Number(curItem.id),
         form_json: JSON.stringify(formItems),
         process_json: data,
+        process_simple_json: simpleNodes,
       };
       dispatch({ type: 'flow/saveAuditFlowInfo', payload: param });
     });

+ 4 - 0
src/pages/PurchaseAdmin/PurchaseList/Flow/List.js

@@ -50,6 +50,10 @@ function List(props) {
     dispatch({
       type: 'flow/getRoleList',
     });
+
+    dispatch({
+      type: 'flow/fetchDepV2',
+    });
     // dispatch({
     //   type: 'flow/queryDingTemplateList',
     // });

+ 0 - 3
src/pages/PurchaseAdmin/PurchaseList/Flow/models/flow.js

@@ -151,14 +151,11 @@ export default {
     },
     *fetchDepV2({ payload, callback }, { call, put }) {
       const response = yield call(queryDepV2, { pageSize: 999999 });
-
-      console.log('=======fetchDepV2===========', response);
       if (response) {
         // const depUserTree = response.data?.list;
         const depUserTree = response.data.list.map(item => {
           return getDepUserTree(item);
         });
-        console.log('=======fetchDepV2===========', depUserTree);
         yield put({
           type: 'save',
           payload: { depUserTree },

+ 22 - 14
src/pages/PurchaseAdmin/PurchaseList/List/NewList.js

@@ -1,5 +1,5 @@
 import React, { useState, useEffect } from 'react';
-import { Table, Divider } from 'antd';
+import { Table, Divider, message } from 'antd';
 import { connect } from 'dva';
 import router from 'umi/router';
 import FlowModal from '../Detail/FlowModal';
@@ -9,7 +9,7 @@ import { getToken } from '@/utils/utils';
 import AuditForm from '@/components/AuditForm';
 
 function List(props) {
-  const { excel, loading, project, dispatch } = props;
+  const { excel, loading, project, dispatch, versionList } = props;
   const [flowVisible, setFlowVisible] = useState(false);
   const [version, setVersion] = useState({});
   const [versionVisible, setVersionVisible] = useState(false);
@@ -79,6 +79,13 @@ function List(props) {
     dispatch({
       type: 'newList/queryProject',
     });
+    dispatch({
+      type: 'newList/queryVersionsList',
+    });
+
+    dispatch({
+      type: 'user/queryDepV2',
+    });
   }, []);
 
   const changeVersion = item => {
@@ -96,16 +103,16 @@ function List(props) {
   const onCommit = async (values, id) => {
     let currentNode = flowDetail.nodes.find?.(item => item.Id == version.template_node_id);
     let sheets = await queryRecordSheet({ gridKey: version.id, 'JWT-TOKEN': token });
-    if (!currentNode.muti_version) {
-      // audit_status=4 表示为清单推进后留存的副本.不计入多清单计算
-      let serviceVersion = versionList.find(
-        item => item.audit_status != 4 && item.template_node_id == currentNode.Id
-      );
-      if (serviceVersion) {
-        message.error(`新建清单失败!业务节点【${currentNode.label}】只能有一个清单!`);
-        return;
-      }
-    }
+    // if (!currentNode.muti_version) {
+    //   // audit_status=4 表示为清单推进后留存的副本.不计入多清单计算
+    //   let serviceVersion = versionList?.find(
+    //     item => item.audit_status != 4 && item.template_node_id == currentNode.Id
+    //   );
+    //   if (serviceVersion) {
+    //     message.error(`新建清单失败!业务节点【${currentNode.label}】只能有一个清单!`);
+    //     return;
+    //   }
+    // }
     let params = {
       ...values,
       id: id,
@@ -135,7 +142,7 @@ function List(props) {
 
   return (
     <div>
-      <AuditForm onChange={values => console.log(values)} />
+      {/* <AuditForm onChange={values => console.log(values)} /> */}
       <Table
         loading={loading || loading2}
         rowKey="id"
@@ -163,9 +170,10 @@ function List(props) {
   );
 }
 
-export default connect(({ newList, loading }) => ({
+export default connect(({ newList, loading, detail }) => ({
   excel: newList.excel,
   project: newList.project,
   loading: loading.models.newList,
   loadingVersion: loading,
+  versionList: newList.versionList,
 }))(List);

+ 14 - 0
src/pages/PurchaseAdmin/PurchaseList/List/models/list.js

@@ -15,6 +15,7 @@ import {
   Logout,
   queryProject,
 } from '@/services/PurchaseList';
+import { queryVersionsList } from '@/services/boom';
 import { queryRole } from '@/services/SysAdmin';
 import { setCurrentUser } from '@/utils/authority';
 import { storeToken } from '@/utils/utils';
@@ -45,6 +46,7 @@ export default {
     },
     comment: { list: [] },
     roleList: [],
+    versionList: [],
   },
 
   effects: {
@@ -280,6 +282,18 @@ export default {
         });
       }
     },
+    *queryVersionsList({ payload, callback }, { call, put }) {
+      const response = yield call(queryVersionsList, payload);
+      if (response) {
+        callback && callback(response.data);
+        yield put({
+          type: 'save',
+          payload: {
+            versionList: response.data,
+          },
+        });
+      }
+    },
   },
 
   reducers: {

+ 7 - 0
src/pages/PurchaseAdmin/PurchaseList/List/models/newList.js

@@ -14,6 +14,7 @@ export default {
       list: [],
       pagination: false,
     },
+    versionList: [],
   },
 
   effects: {
@@ -53,6 +54,12 @@ export default {
       const response = yield call(queryVersionsList, payload);
       if (response) {
         callback && callback(response.data);
+        yield put({
+          type: 'save',
+          payload: {
+            versionList: response.data,
+          },
+        });
       }
     },
     *commitSheet({ payload, callback }, { call, put }) {