Ver código fonte

Merge branch 'develop'

xujunjie 1 ano atrás
pai
commit
a18049fe87

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
public/Luckysheet/luckysheet.umd.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
public/Luckysheet/luckysheet.umd.js.map


+ 2 - 1
src/components/DDComponents/DDDateField/index.js

@@ -8,8 +8,9 @@ function DDDateField(props) {
   const handleChange = date => {
     if (date) {
       onChange?.(date.format('YYYY-MM-DD HH:mm:ss'), props.id, props.label);
+    } else {
+      onChange?.(date, props.id, props.label);
     }
-    onChange?.(date, props.id, props.label);
   };
 
   return (

+ 3 - 71
src/components/DDComponents/DepartmentField/index.js

@@ -6,77 +6,9 @@ import { connect } from 'dva';
 
 function DepartmentField(props) {
   const { value = [], onChange, defaultValue, depTrees } = props;
-  // const [treeData, setTreeData] = useState([]);
 
-  // const genTreeNode = dep => {
-  //   return {
-  //     id: dep.dept_id,
-  //     pId: dep.parent_id,
-  //     value: dep.dept_id,
-  //     title: dep.name,
-  //     isLeaf: false,
-  //   };
-  // };
-
-  // const onLoadData = async ({ id }) => {
-  //   let depList = await queryDDdepList({ dept_id: id });
-
-  //   console.log(depList);
-  //   if (depList.length > 0) {
-  //     let nodes = depList.map(genTreeNode);
-  //     setTreeData([...treeData, ...nodes]);
-  //   }
-  // };
-
-  const findDepName = (list, ID) => {
-    let result = '';
-    const dep = list.find(item => item.ID === ID);
-    if (dep) {
-      result = dep.Name;
-      return result;
-    }
-    for (let index = 0; index < list.length; index++) {
-      const element = list[index];
-      if (element?.children && element?.children.length) {
-        result = findDepName(element.children, ID);
-        if (result) {
-          break;
-        }
-      }
-    }
-    return result;
-  };
-
-  const findDepID = (list, Name) => {
-    let result = '';
-    const dep = list.find(item => item.Name === Name);
-    if (dep) {
-      result = dep.ID;
-    } else {
-      for (let index = 0; index < list.length; index++) {
-        const element = list[index];
-        if (element?.children && element?.children.length) {
-          result = findDepID(element.children, Name);
-          if (result) {
-            break;
-          }
-        }
-      }
-    }
-    return result;
-  };
-
-  const defaultID = useMemo(() => {
-    if (defaultValue !== undefined) {
-      return findDepID(depTrees, defaultValue[0]);
-    } else {
-      return null;
-    }
-  }, [defaultValue]);
-
-  const onChangeValue = (newValue, label) => {
-    // const depName = findDepName(depTrees, newValue);
-    onChange(label);
+  const onChangeValue = newValue => {
+    onChange(String(newValue));
   };
 
   return (
@@ -84,7 +16,7 @@ function DepartmentField(props) {
       showSearch
       // // multiple
       allowClear
-      defaultValue={defaultID}
+      defaultValue={defaultValue ? Number(defaultValue) : null}
       dropdownStyle={{
         maxHeight: 400,
         overflow: 'auto',

+ 2 - 3
src/components/DDComponents/ProjectField/index.js

@@ -27,9 +27,8 @@ function DDProjectField(props) {
       loading={loading}
       style={{ width: '100%' }}
       disabled={disabled}
-      defaultValue={value ? Number(value) : undefined}
+      defaultValue={`${value}`}
       onChange={val => {
-        const project = projectList.find(item => item.ID === val);
         onChange(`${val}`);
       }}
       filterOption={(input, option) =>
@@ -38,7 +37,7 @@ function DDProjectField(props) {
       options={projectList.map(item => {
         return {
           label: `${item.project_name}(${item.project_full_code})`,
-          value: item.id,
+          value: `${item.id}`,
         };
       })}
     />

+ 22 - 0
src/components/Flow/components/judgeComponent/index.tsx

@@ -108,6 +108,8 @@ const RenderJudge = (props: any) => {
 
   const RenderComp = (item: FormItem) => {
     let component;
+    console.log(item);
+
     switch (item.componentName) {
       case ComponentName.Inner:
         component = (
@@ -133,6 +135,26 @@ const RenderJudge = (props: any) => {
         );
         break;
       case ComponentName.Depart:
+        component = (
+          <>
+            <div style={{ display: 'flex', justifyContent: 'space-between' }}>
+              <div>{item.props.label}</div>
+              <DeleteOutlined onClick={() => handleDelete(item)} />
+            </div>
+            <TreeSelect
+              showSearch
+              multiple
+              allowClear
+              defaultValue={item.judge?.values?.map(item => item.origin)}
+              style={{ width: '100%' }}
+              placeholder="请选择部门"
+              treeData={depUserTree}
+              onChange={values => {
+                handleTreeChange(values, item);
+              }}
+            />
+          </>
+        );
         break;
       case ComponentName.Money:
       case ComponentName.Number:

+ 1 - 1
src/components/Flow/components/judgeModal/index.tsx

@@ -18,7 +18,7 @@ const AddCondition = (props: any) => {
     .filter((item: FormItem) => {
       return (
         (item.componentName == ComponentName.Inner ||
-          // item.componentName == 'DepartmentField' ||
+          item.componentName == ComponentName.Depart ||
           item.componentName == ComponentName.Select ||
           item.componentName == ComponentName.MultiSelect ||
           item.componentName == ComponentName.Number ||

+ 14 - 0
src/components/Flow/node/circle/mapServe.tsx

@@ -22,6 +22,7 @@ export interface IConfig {
   flow_node_id?: string;
   process_code?: string;
   node_type_psr?: number | string;
+  node_psr_classify?: number | string;
 }
 const defaultConfig: IConfig = {
   node_type_psr: 0,
@@ -123,6 +124,19 @@ const Component = (props: any) => {
             { label: '清单权限', value: 7 }, //发起人和审批人可见
           ]}
         />
+        <SelectField
+          label="审批类型"
+          value={nodeConfig.node_psr_classify}
+          onChange={value => {
+            onNodeConfigChange('node_psr_classify', value);
+          }}
+          options={[
+            { label: '其他', value: 0 },
+            { label: '清单审核', value: 1 },
+            { label: '合同审核', value: 2 },
+            { label: 'PSR审核', value: 3 },
+          ]}
+        />
       </div>
 
       {meta?.editMode != 2 && (

+ 8 - 0
src/components/Flow/node/judgeNode/index.tsx

@@ -45,6 +45,14 @@ const JudgeRect = props => {
               .filter(item => item);
             text.push('发起人属于:' + list.join('或'));
             break;
+          case ComponentName.Depart:
+            const DeoPlist = judge?.values
+              .map(item => {
+                return getName(item.value, depUserTree);
+              })
+              .filter(item => item);
+            text.push(`${label}:` + DeoPlist.join('或'));
+            break;
           case ComponentName.Number:
             const type: Number = judge.values[0];
             const condition = judge.condition;

+ 0 - 1
src/components/Flow/node/registerNode.tsx

@@ -2,7 +2,6 @@ import React from 'react';
 import Rect, { RectServe } from './rect';
 import Circle, { CircleServe } from './circle';
 import AuditNode, { AuditServe } from './auditNode';
-
 import judgeNode, { judgeServe } from './judgeNode';
 
 export const registerNode = [

+ 7 - 4
src/models/authList.js

@@ -10,9 +10,12 @@ export default {
       const responce = yield call(queryAuthList, payload);
       if (responce) {
         let data = responce.data;
-        let ret = [];
+        // let ret = [];
+        let map = {}
         data.forEach(e => {
-          let item = ret.find(item => item.key == `${e.template_id}_${e.project_id}`);
+          let key = e.TemplateNodeInfo.node_psr_classify
+          if(!map[key]) map[key] = []
+          let item = map[key].find(item => item.key == `${e.template_id}_${e.project_id}`);
           if (!item) {
             item = {
               key: `${e.template_id}_${e.project_id}`,
@@ -20,7 +23,7 @@ export default {
               project_name: e.ding_schema,
               nodes: [],
             };
-            ret.push(item);
+            map[key].push(item);
           }
           item.nodes.push({
             template_id: e.template_id,
@@ -37,7 +40,7 @@ export default {
         });
         yield put({
           type: 'save',
-          payload: { authList: ret, authVersionList: data },
+          payload: { authList: map, authVersionList: data },
         });
       }
     },

+ 34 - 9
src/pages/Auth/Auth.js

@@ -1,9 +1,28 @@
-import React, { useEffect } from 'react';
+import React, { useEffect, useMemo } from 'react';
 import { Table, Collapse } from 'antd';
 import { connect } from 'dva';
 import router from 'umi/router';
+import { Tabs } from 'antd';
 
 const { Panel } = Collapse;
+const tabs = [
+  {
+    label: '清单审核',
+    value: 1,
+  },
+  {
+    label: '合同审核',
+    value: 2,
+  },
+  {
+    label: 'PSR审核',
+    value: 3,
+  },
+  {
+    label: '其他',
+    value: 0,
+  },
+];
 
 function Auth(props) {
   const {
@@ -84,14 +103,20 @@ function Auth(props) {
   return (
     <Collapse defaultActiveKey={['0']}>
       <Panel header="未审批" key="0">
-        <Table
-          columns={columns}
-          dataSource={authList}
-          expandable={{ expandedRowRender: record => renderUnauth(record.nodes) }}
-          pagination={false}
-          rowKey="key"
-          loading={loading.effects['auth/queryVersionByNode'] || loading.models.authList}
-        />
+        <Tabs>
+          {tabs.map(tab => (
+            <Tabs.TabPane tab={tab.label} key={tab.value + ''}>
+              <Table
+                columns={columns}
+                dataSource={authList[tab.value]}
+                expandable={{ expandedRowRender: record => renderUnauth(record.nodes) }}
+                pagination={false}
+                rowKey="key"
+                loading={loading.effects['auth/queryVersionByNode'] || loading.models.authList}
+              />
+            </Tabs.TabPane>
+          ))}
+        </Tabs>
       </Panel>
       <Panel header="已审批" key="1">
         <Table

+ 2 - 2
src/pages/Detail/CommitAuditModal.js

@@ -226,7 +226,7 @@ function CommitAuditModal(props) {
         : [];
       let values = data[approvalNode.Id] || prevValues || [];
       values.forEach(tempValue => {
-        if (tempValue.type === 'DIYTable') {
+        if (tempValue.id.includes('DIYTable')) {
           tempValue.value = tempValue.value.map(item => JSON.stringify(item));
         }
       });
@@ -333,7 +333,7 @@ function CommitAuditModal(props) {
         });
       }
       // 回填之前的值结束后需要把formComponentValues清空 防止提交之前的值
-      setFormComponentValues([]);
+      // setFormComponentValues([]);
     });
     setAuditList(addAuditList);
     if (prevFormData.length == 0) advanceSubmit();

+ 9 - 7
src/pages/Detail/FlowModal.js

@@ -125,12 +125,14 @@ function FlowModal(props) {
         const res = await queryDelPurchaseExcel(data);
         if (res.code == 200) {
           message.success('删除成功');
-          dispatch({
-            type: 'xflow/queryBoomFlowDetail',
-            payload: {
-              id: templateId,
-            },
-          });
+          // dispatch({
+          //   type: 'xflow/queryBoomFlowDetail',
+          //   payload: {
+          //     id: templateId,
+          //   },
+          // });
+
+          initData(data.template_node_id);
         }
       },
     });
@@ -366,7 +368,7 @@ function FlowModal(props) {
               item.author == currentUser.ID && ( //自己创建的&&未提交的清单自己可以删除
                   <a
                     onClick={() => {
-                      onDelVersion({ excel_id: item.id });
+                      onDelVersion({ excel_id: item.id, template_node_id: item.template_node_id });
                     }}
                   >
                     删除

+ 44 - 9
src/pages/Detail/FormAndFilesNode.js

@@ -12,7 +12,7 @@ const { confirm } = Modal;
 const { Panel } = Collapse;
 
 const FormAndFilesNode = props => {
-  const { formData, excelFileList, comment, version, loading } = props;
+  const { formData, excelFileList, comment, depTrees, version, loading } = props;
 
   const [projectList, setProjectList] = useState([]);
 
@@ -30,7 +30,7 @@ const FormAndFilesNode = props => {
   }, []);
 
   const FormContent = useMemo(() => {
-    return renderFrom(formData, projectList);
+    return renderFrom(formData, projectList, depTrees);
   }, [formData]);
 
   if (formData) {
@@ -57,13 +57,32 @@ const FormAndFilesNode = props => {
   return null;
 };
 
-const renderFrom = (data, projects) => {
+const renderFrom = (data, projects, depTrees) => {
   if (!data) return <Empty description="没有表单信息" />;
   try {
     const ding_schema = JSON.parse(data)[0];
     const formData = JSON.parse(ding_schema)?.formComponentValues;
-
     if (formData.length == 0) return <Empty description="没有表单信息" />;
+
+    function getDepName(id, tree) {
+      if (tree.length === 0) {
+        return;
+      }
+      let result = tree.find(item => item.ID === id);
+      if (result) {
+        return result.Name;
+      } else {
+        for (let index = 0; index < tree.length; index++) {
+          const element = tree[index];
+          result = getDepName(id, element?.children || []);
+          if (result) {
+            return result;
+          }
+        }
+      }
+      return '';
+    }
+
     return (
       <>
         {formData.map((item, idx) => {
@@ -82,11 +101,26 @@ const renderFrom = (data, projects) => {
           let value = item.value.join(',');
           if (item.id.includes('ProjectField')) {
             if (value) {
-              value = Number(value);
-              const project = projects.find(pitem => pitem.id === value);
-              if (project) {
-                value = `${project.project_name}(${project.project_full_code})`;
+              if (!Number.isNaN(Number(value))) {
+                value = Number(value);
+                const project = projects.find(pitem => pitem.id === value);
+                if (project) {
+                  value = `${project.project_name}(${project.project_full_code})`;
+                }
+              }
+            }
+          }
+          if (item.id.includes('DepartmentField')) {
+            if (value) {
+              if (!Number.isNaN(Number(value))) {
+                value = Number(value);
+                value = getDepName(value, depTrees);
+                console.log(value);
               }
+              // const dep = depTrees.find(ditem => ditem.ID === value);
+              // if (dep) {
+              //   value = `${dep.name}`;
+              // }
             }
           }
           return (
@@ -117,7 +151,8 @@ const renderFrom = (data, projects) => {
     return <Empty description="没有表单信息" />;
   }
 };
-export default connect(({ detail, loading }) => ({
+export default connect(({ detail, user, loading }) => ({
   comment: detail.comment,
+  depTrees: user.depTrees,
   loading,
 }))(FormAndFilesNode);

+ 6 - 1
src/pages/Detail/LuckySheet.js

@@ -89,6 +89,7 @@ class LuckySheet extends React.Component {
       lang: 'zh',
       showinfobar: false,
       showstatisticBar: false,
+      showstatisticBarConfig: false,
       // forceCalculation: true,
       hook: {
         cellMousedown: (cell, position, sheet) => {
@@ -142,7 +143,11 @@ class LuckySheet extends React.Component {
         },
         workbookCreateAfter: options => {
           setTimeout(() => {
-            this.luckysheet.refreshFormula();
+            const _this = this;
+            this.luckysheet.setPauseUpdate(true);
+            this.luckysheet.refreshFormula(() => {
+              _this.luckysheet.setPauseUpdate(false);
+            });
           }, 800);
         },
       },

+ 12 - 1
src/pages/Flow/FlowDetail.json

@@ -70,6 +70,7 @@
       "y": 6,
       "flow_id": 9,
       "node_type_psr": 0,
+      "node_psr_classify": 2,
       "count": 0,
       "role_list": ""
     },
@@ -240,7 +241,7 @@
       "flow_id": 0,
       "node_type_psr": 0,
       "count": 0,
-      "is_seal": 1,
+      "is_seal": 0,
       "role_list": ""
     },
     {
@@ -264,6 +265,7 @@
       "y": -170,
       "flow_id": 5,
       "node_type_psr": 0,
+      "node_psr_classify": 1,
       "count": 0,
       "role_list": ""
     },
@@ -288,6 +290,7 @@
       "y": 6,
       "flow_id": 8,
       "node_type_psr": 0,
+      "node_psr_classify": 2,
       "count": 0,
       "role_list": ""
     },
@@ -312,6 +315,7 @@
       "y": -435,
       "flow_id": 51,
       "node_type_psr": 0,
+      "node_psr_classify": 3,
       "count": 0,
       "role_list": ""
     },
@@ -361,6 +365,7 @@
       "zIndex": 10,
       "flow_id": 3,
       "node_type_psr": 0,
+      "node_psr_classify": 1,
       "count": 0
     },
     {
@@ -385,6 +390,7 @@
       "zIndex": 10,
       "flow_id": 4,
       "node_type_psr": 0,
+      "node_psr_classify": 1,
       "count": 0
     },
     {
@@ -408,6 +414,7 @@
       "y": -117,
       "flow_id": 4,
       "node_type_psr": 0,
+      "node_psr_classify": 1,
       "count": 0,
       "role_list": ""
     },
@@ -432,6 +439,7 @@
       "y": -240,
       "flow_id": 3,
       "node_type_psr": 0,
+      "node_psr_classify": 1,
       "count": 0,
       "role_list": ""
     },
@@ -457,6 +465,7 @@
       "zIndex": 10,
       "flow_id": 5,
       "node_type_psr": 0,
+      "node_psr_classify": 1,
       "count": 0
     },
     {
@@ -481,6 +490,7 @@
       "zIndex": 10,
       "flow_id": 7,
       "node_type_psr": 0,
+      "node_psr_classify": 1,
       "count": 0
     },
     {
@@ -529,6 +539,7 @@
       "zIndex": 10,
       "flow_id": 48,
       "node_type_psr": 0,
+      "node_psr_classify": 3,
       "count": 0
     }
   ],

+ 8 - 2
src/pages/Index.js

@@ -1,4 +1,4 @@
-import React, { useEffect } from 'react';
+import React, { useEffect, useMemo } from 'react';
 import { Badge, Layout, Menu } from 'antd';
 import { connect } from 'dva';
 import RightContent from './RightContent';
@@ -22,6 +22,12 @@ function LayoutDetail(props) {
     width: 120,
   };
 
+  const authCount = useMemo(() => {
+    let count = 0;
+    Object.values(authList).forEach(list => (count += list.length));
+    return count;
+  }, [authList]);
+
   useEffect(() => {
     if (isMobile) return;
     // 查询用户信息
@@ -93,7 +99,7 @@ function LayoutDetail(props) {
               </Menu.Item>
               <Menu.Item key="/home/auth">
                 <Link to="/home/auth">
-                  <Badge count={authList.length} className={styles.badge}>
+                  <Badge count={authCount} className={styles.badge}>
                     审核列表
                   </Badge>
                 </Link>

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff