소스 검색

修改合同走OA审批流程

Renxy 2 년 전
부모
커밋
14c5daaa89

+ 54 - 0
src/pages/ContractManager/component/AuditSteps.jsx

@@ -0,0 +1,54 @@
+import { Steps } from 'antd';
+const AuditSteps = (props) => {
+  // const data =
+  //   '[{"id":13,"desc":"","auditor":7,"AuditorUser":{"UserName":"admin","CName":"管理员","Title":"","Mobile":"13426370450","Email":"123123@qq.com","Status":1,"IsSuper":true,"DepId":"undefined","Dep":null,"Password":"4297f44b13955235245b2497399d7a93","QyWxUserId":"HanTangHeYing","DingUserId":"","Role":null,"RoleNames":"","ID":7,"CreatedBy":0,"CreatedOn":"2019-10-04T16:48:04+08:00","UpdatedBy":0,"UpdatedOn":"2022-06-17T14:23:15+08:00","DeletedBy":0,"DeletedOn":null,"DeletedFlag":0,"DefaultProject":"","ForbiddenModule":0,"IsDepLeader":0,"UserType":0,"Permission":null,"Permissions":null,"is_leader":0,"is_accountant":0,"is_opt_mgr":0,"is_wty_mgr":0},"seq":1,"oa_id":7,"seq_name":"审批1","audit_time":"1970-01-01T08:00:00+08:00"},{"id":14,"desc":"","auditor":7,"AuditorUser":{"UserName":"admin","CName":"管理员","Title":"","Mobile":"13426370450","Email":"123123@qq.com","Status":1,"IsSuper":true,"DepId":"undefined","Dep":null,"Password":"4297f44b13955235245b2497399d7a93","QyWxUserId":"HanTangHeYing","DingUserId":"","Role":null,"RoleNames":"","ID":7,"CreatedBy":0,"CreatedOn":"2019-10-04T16:48:04+08:00","UpdatedBy":0,"UpdatedOn":"2022-06-17T14:23:15+08:00","DeletedBy":0,"DeletedOn":null,"DeletedFlag":0,"DefaultProject":"","ForbiddenModule":0,"IsDepLeader":0,"UserType":0,"Permission":null,"Permissions":null,"is_leader":0,"is_accountant":0,"is_opt_mgr":0,"is_wty_mgr":0},"seq":2,"oa_id":7,"seq_name":"审批2","audit_time":"1970-01-01T08:00:00+08:00"}]';
+  // const OaAuditList1 = JSON.parse(data);
+  // const audit_status1 = 0;
+  // const current_seq1 = 1;
+
+  const { OaAuditList, audit_status, current_seq, statusText } = props;
+
+  const getDescription = (node) => {
+    let str = node?.AuditRoleInfo
+      ? `审批人:${node?.AuditRoleInfo.Name || '-'}`
+      : `审批人:${node?.AuditorUser.CName || '-'}`;
+    if (node.desc) {
+      return (
+        <div>
+          {str}
+          <div>
+            <Tooltip title={node.desc}>
+              <span style={{ color: '#1A73E8', textDecoration: 'undeline' }}>
+                审批意见
+              </span>
+            </Tooltip>
+          </div>
+        </div>
+      );
+    }
+    return str;
+  };
+
+  return (
+    <div style={{ display: 'flex' }}>
+      <Steps
+        style={{ marginBottom: 20 }}
+        current={audit_status == 3 ? OaAuditList?.length : current_seq - 1}
+        status={audit_status == 2 ? 'error' : 'process'}
+        items={OaAuditList?.map((item) => ({
+          title: item.seq_name,
+          description: getDescription(item),
+        }))}
+      />
+      {audit_status == 3 && (
+        <div
+          style={{ marginLeft: '40px', fontSize: '28px', whiteSpace: 'nowrap' }}
+        >
+          {statusText}
+        </div>
+      )}
+    </div>
+  );
+};
+
+export default AuditSteps;

+ 249 - 148
src/pages/ContractManager/component/Modal.jsx

@@ -19,16 +19,17 @@ import {
 import ModuleTitle from '../../../components/ModuleTitle/moduleTitle';
 import { useEffect, useMemo, useState } from 'react';
 import {
+  queryAuditByCode,
   queryCompany,
-  queryDepList,
+  queryContractCode,
   querySupplierList,
 } from '@/services/contract';
-import { request, useModel, useRequest } from '@umijs/max';
+import { useModel, useRequest } from '@umijs/max';
 import { CloudUploadOutlined } from '@ant-design/icons';
 import styles from '../index.less';
 import dayjs from 'dayjs';
-import InputSelect from '../../../components/InputSelect';
-import { advanceSubmitNextNode } from '@/services/boom';
+import { advanceSubmitNextNode, audit } from '@/services/boom';
+import AuditSteps from './AuditSteps';
 export const Type = {
   add: 0, //新增
   detail: 1, //详情
@@ -62,7 +63,7 @@ const ContractModal = (props) => {
   } = useModel('@@initialState');
   const { userList, run: userListRun } = useModel('userList');
   const { depList, run: depListRun } = useModel('depList');
-  // const [auditList, setAuditList] = useState([]);
+  const [auditList, setAuditList] = useState([]);
   const FORMAT = 'YYYY-MM-DD';
   const {
     detail: data,
@@ -74,22 +75,36 @@ const ContractModal = (props) => {
     parent_id,
     handlePreView,
   } = props;
+  const title =
+    type == Type.add ? '新增' : type == Type.cancel ? '作废' : '详情';
+  const archivesOptions = [
+    {
+      Name: '财务部',
+      ID: '财务部',
+    },
+    {
+      Name: '行政部',
+      ID: '行政部',
+    },
+  ];
+
+  const [isPass, setIsPass] = useState(1);
+  const [companyDepList, setCompanyDepList] = useState(depList || []);
+  const [archivesDepList, setArchivesDepList] = useState(archivesOptions);
+  const [dealDisable, setDealDisable] = useState(false);
+  const company = Form.useWatch('company_id', form);
+  const project_name = Form.useWatch('project_name', form);
+  const archives_dep = Form.useWatch('archives_dep', form);
+
+  //是否补充协议,是的话需要填合同编号
+  const is_supplement = Form.useWatch('is_supplement', form);
+
+  //请求合同编号用
+  const dep_id = Form.useWatch('dep_id', form);
+  const parent_code = Form.useWatch('parent_code', form);
 
   //审批流拼接
-  const audit = {
-    flow_id: 40,
-    form: '[{"name":"是否本部","id":"DDSelectField_4fbddb04-9b4f-4281-991b-5047f835fb9d","type":"DDSelectField","value":["是"]},{"name":"单选框","id":"DDSelectField_1235c6b9-9d74-4856-a62d-6ca1bb9716a6","type":"DDSelectField","value":["财务部"]}]',
-    audit_list: [430, 256],
-    cc_list: [],
-    files: '',
-  };
   const formData = [
-    {
-      id: 'TextField_1a01000b-4458-4dfb-bd13-74a74e7a33e5',
-      name: '合同id',
-      type: 'TextField',
-      value: ['1'],
-    },
     {
       name: '是否本部',
       id: 'DDSelectField_4fbddb04-9b4f-4281-991b-5047f835fb9d',
@@ -97,11 +112,23 @@ const ContractModal = (props) => {
       value: ['是'],
     },
     {
-      name: '单选框',
+      name: '合同归档部门',
       id: 'DDSelectField_1235c6b9-9d74-4856-a62d-6ca1bb9716a6',
       type: 'DDSelectField',
       value: ['财务部'],
     },
+    {
+      name: '合同编码',
+      id: 'TextField_1a01000b-4458-4dfb-bd13-74a74e7a33e5',
+      type: 'TextField',
+      value: ['1'],
+    },
+    {
+      name: '提审类型',
+      id: 'DDSelectField_c79e124c-c933-4ea1-b799-faceaf830a9b',
+      type: 'DDSelectField',
+      value: ['1'],
+    },
   ];
 
   //计算审批流数据
@@ -122,60 +149,35 @@ const ContractModal = (props) => {
     // audit_list:[],
   };
 
-  const { run } = useRequest((data) => advanceSubmitNextNode(data), {
-    debounceInterval: 500,
+  const { data: companyData, run: runCompany } = useRequest(queryCompany);
+
+  //计算审批流接口
+  const { run: runAuditList } = useRequest(
+    (data) => advanceSubmitNextNode(data),
+    {
+      debounceInterval: 500,
+      manual: true,
+      formatResult(res) {
+        setAuditList(
+          res.data[0]?.map((item) => {
+            const name = userList?.find(
+              (user) => user.ID == item[0].value,
+            )?.CName;
+            return { ...item[0], name };
+          }),
+        );
+      },
+    },
+  );
+  //计算合同编号接口
+  const { run: runCode } = useRequest((data) => queryContractCode(data), {
     manual: true,
-    formatResult(res) {
-      setAuditList(
-        res.data[0]?.map((item) => {
-          const name = userList.find((user) => user.ID == item.value)?.CName;
-          return { ...item, name };
-        }),
-      );
+    onSuccess: (data) => {
+      form.setFieldsValue({
+        code: data?.code,
+      });
     },
   });
-
-  const title =
-    type == Type.add ? '新增' : type == Type.cancel ? '作废' : '详情';
-  //所属公司为总部时才能选择部门,为子公司时,部门不能操作  所属部门为子公司的需要填经办人
-  const company = Form.useWatch('company_id', form);
-  const [depDisable, setDepDisable] = useState(false);
-  const [dealDisable, setDealDisable] = useState(false);
-  //项目名称选择后,自动填入对应的项目编号
-  const project_name = Form.useWatch('project_name', form);
-
-  //是否补充协议,是的话需要填合同编号
-  const is_supplement = Form.useWatch('is_supplement', form);
-
-  const [isPass, setIsPass] = useState(1);
-
-  const { data: companyData, run: runCompany } = useRequest(queryCompany);
-
-  //获取审批流逻辑
-  // const archives_dep = Form.useWatch('archives_dep', form);
-  // useEffect(() => {
-  //   if (!company || !archives_dep) return;
-  //   const param = { ...advance };
-  //   const formValus = JSON.parse(JSON.stringify(formData));
-  //   const item = companyData?.find((item) => item.ID == company);
-  //   formValus[1].value = item?.Flag == 1 ? ['是'] : ['否'];
-  //   formValus[2].value = [archives_dep];
-  //   param.formComponentValues = formValus;
-  //   run(param);
-  // }, [company, archives_dep]);
-
-  // console.log(user, data, depList);
-
-  useEffect(() => {
-    userListRun();
-    depListRun();
-    runCompany();
-  }, []);
-
-  useEffect(() => {
-    form.resetFields();
-  }, [data]);
-
   //供应商列表
   const { data: supplierList = [], loading } = useRequest(querySupplierList, {
     defaultParams: [
@@ -194,35 +196,113 @@ const ContractModal = (props) => {
         : [];
     },
   });
+  //获取OA 归档审批列表
+  const { data: auditData, run: runAudit } = useRequest(
+    (data) => queryAuditByCode({ ...data, extend_type: 0 }),
+    {
+      manual: true,
+    },
+  );
+  //获取OA 作废审批列表
+  const {
+    data: auditCelData,
+    run: runCalAudit,
+    refresh,
+  } = useRequest((data) => queryAuditByCode({ ...data, extend_type: 1 }), {
+    manual: true,
+  });
+
+  useEffect(() => {
+    if (!visible) {
+      setAuditList([]);
+      setCompanyDepList([]);
+      setArchivesDepList([]);
+    } else {
+      userListRun();
+      depListRun();
+      runCompany();
+      if (data?.status >= Status.Checking) runAudit({ extend_code: data.code });
+      if (data?.status >= Status.CalChecking)
+        runCalAudit({ extend_code: data.code });
+    }
+  }, [visible]);
+
+  useEffect(() => {
+    form.resetFields();
+  }, [data]);
 
   const isSuper = useMemo(() => {
-    if (user?.Permission['menu-001-audit']) return true;
+    // if (user?.Permission['menu-001-audit']) return true;
+    // return false;
+    if (type == Type.add || type == Type.cancel) return true;
+    let currentAuditUserID;
+    if (data?.status == Status.Checking && auditData) {
+      const { OaAuditList, audit_status } = auditData;
+      currentAuditUserID = OaAuditList[audit_status]?.auditor;
+    } else if (data?.status == Status.CalChecking && auditCelData) {
+      const { OaAuditList, audit_status } = auditCelData;
+      currentAuditUserID = OaAuditList[audit_status]?.auditor;
+    }
+    if (user.ID == currentAuditUserID) return true;
     return false;
-  }, [user]);
+  }, [user, data, auditData, auditCelData]);
 
   useEffect(() => {
     if (type !== Type.add) return;
+    if (!company) {
+      setCompanyDepList([]);
+      setArchivesDepList([]);
+      return;
+    }
+    const deps = getDepItemById(company)?.children;
+    if (deps) setCompanyDepList(deps);
     const item = companyData?.find((item) => item.ID == company);
     if (item?.Flag == 1) {
-      //公司为本部
-      setDepDisable(false);
-      form.setFieldsValue({
-        dep_id: '',
-        archives_dep: '',
-        created_dep: '',
-        deal_by: user?.CName,
-      });
+      //公司为本部 经办人为自己并不可编辑 合同存档部门从财务和行政部选
+      setDealDisable(false);
+      setArchivesDepList(archivesOptions);
+      form.setFieldsValue({ deal_by: user?.CName });
     } else {
-      setDepDisable(true);
-      form.setFieldsValue({
-        dep_id: '综合管理部',
-        archives_dep: '综合管理部',
-        created_dep: '综合管理部',
-        deal_by: '',
-      });
+      //公司为分子公司 经办人为手动输入 合同存档部门从所选分子公司的子部门选择
+      setDealDisable(true);
+      setArchivesDepList(deps);
+      form.setFieldsValue({ deal_by: '' });
     }
   }, [company]);
+
+  useEffect(() => {
+    if (type !== Type.add || !company || !dep_id) return;
+    const item = companyData?.find((item) => item.ID == company);
+    const dep_code = getDepItemById(dep_id)?.Code;
+    if (item) {
+      let params = {
+        company_id: item.ID,
+        company_code: item.Code,
+        dep_code,
+        parent_code,
+      };
+      runCode(params);
+    }
+  }, [dep_id, parent_code]);
+
+  //获取审批流逻辑
+  useEffect(() => {
+    if (type !== Type.add) return;
+    const param = { ...advance };
+    let formValues = [];
+    const item = companyData?.find((item) => item.ID == company);
+    formValues.push({
+      ...formData[0],
+      value: item?.Flag == 1 ? ['是'] : ['否'],
+    });
+    if (archives_dep)
+      formValues.push({ ...formData[1], value: [archives_dep] });
+    param.formComponentValues = formValues;
+    runAuditList(param);
+  }, [company, archives_dep]);
+
   useEffect(() => {
+    if (type !== Type.add) return;
     const project_code = projectList?.find(
       (item) => item.project_name == project_name,
     )?.project_full_code;
@@ -239,7 +319,6 @@ const ContractModal = (props) => {
   const disableds = useMemo(() => {
     if (!visible) {
       setIsPass(1);
-      setDepDisable(false);
       setDealDisable(false);
     }
     if (type == Type.add) {
@@ -259,7 +338,6 @@ const ContractModal = (props) => {
     },
     onChange({ file, fileList }) {
       if (file.status !== 'uploading') {
-        console.log(file, fileList);
         const list = fileList.map((item) => item.response?.data?.attach);
         form.setFieldsValue({ attach: list });
       }
@@ -272,16 +350,31 @@ const ContractModal = (props) => {
     },
     onChange({ file, fileList }) {
       if (file.status !== 'uploading') {
-        console.log(file, fileList);
         const list = fileList.map((item) => item.response?.data?.attach);
         form.setFieldsValue({ attach_extend: list });
       }
     },
   };
 
+  //获取提交审批流所需form字段
+  const getAuditData = (values, type) => {
+    // 合同类型type "1" 归档 “2”作废
+    const flag =
+      companyData?.find((item) => item.ID == values.company)?.Flag == 1
+        ? '是'
+        : '否';
+    const newValues = [[flag], [values.archives_dep], [values.code], [type]];
+    const form = formData.map((item, index) => {
+      return { ...item, value: newValues[index] };
+    });
+    return form;
+  };
+
   const handleSubmit = () => {
     form.validateFields().then((values) => {
       if (type == Type.add) {
+        const form = getAuditData(values, '1');
+        const audit_list = auditList.map((item) => item.value);
         values.effect_on = dayjs(values.effect_on).format(FORMAT);
         values.created_on = values.created_on || dayjs().format(FORMAT);
         if (parent_id) values.parent_id = parent_id;
@@ -297,46 +390,34 @@ const ContractModal = (props) => {
         const companyItem = companyData?.find(
           (item) => item.ID == values.company_id,
         );
-        //所属公司为本部
-        if (companyItem.Flag == 1) {
-          const item = getDepItemById(values.dep_id);
-          if (item) {
-            values.dep_name = item.Name;
-            values.dep_code = item.Code;
-          }
-          values.company_name = companyItem.Name;
-        } else {
-          //为分子公司
-          values.company_name = companyItem.Name;
-          values.company_code = companyItem.Code;
-          values.dep_name = '综合管理部';
-          values.dep_code = '综合管理部';
-          values.dep_id = 0;
-        }
+        values.company_name = companyItem.Name;
+        values.company_code = companyItem.Code;
+        const depItem = getDepItemById(values.dep_id);
+        values.dep_name = depItem?.Name;
+        values.dep_code = depItem?.Code;
         values.created_by = user?.ID;
-        handleOk(values, Type.add);
+        handleOk(values, Type.add, form, audit_list);
       } else if (type == Type.cancel) {
+        const form = getAuditData(values, '2');
+        const audit_list = auditData?.OaAuditList?.map((item) => item?.auditor);
         let result = {
           id: data?.id,
           cancel_desc: values.cancel_desc,
+          code: data?.code,
         };
-        handleOk(result, Type.cancel);
+        handleOk(result, Type.cancel, form, audit_list);
       } else if (data?.status == Status.Checking) {
         let result = {
-          id: data?.id,
-          check_by: user?.CName,
-          check_result: values.check_result,
-          is_pass: values.is_pass,
-          check_desc: values?.check_desc,
+          id: auditData?.id,
+          status: values.is_pass,
+          desc: '',
         };
         handleOk(result, data?.status);
       } else if (data?.status == Status.CalChecking) {
         let result = {
-          id: data?.id,
-          cancel_check_by: user?.CName,
-          cancel_check_result: values.cancel_check_result,
-          is_pass: values.is_pass,
-          // check_desc: values?.check_desc,
+          id: auditCelData?.id,
+          status: values.is_pass,
+          desc: '',
         };
         handleOk(result, data?.status);
       }
@@ -358,6 +439,27 @@ const ContractModal = (props) => {
     return fun(depList);
   };
 
+  const getDescription = (node) => {
+    let str = node?.AuditRoleInfo
+      ? `审批人:${node?.AuditRoleInfo.Name || '-'}`
+      : `审批人:${node?.AuditorUser.CName || '-'}`;
+    if (node.desc) {
+      return (
+        <div>
+          {str}
+          <div>
+            <Tooltip title={node.desc}>
+              <span style={{ color: '#1A73E8', textDecoration: 'undeline' }}>
+                审批意见
+              </span>
+            </Tooltip>
+          </div>
+        </div>
+      );
+    }
+    return str;
+  };
+
   return (
     <Modal
       width={'85%'}
@@ -367,7 +469,9 @@ const ContractModal = (props) => {
       cancelText="返回"
       onOk={handleSubmit}
       onCancel={handleCancel}
-      // okButtonProps={type == Type.detail ? { disabled: true } : null}
+      okButtonProps={
+        type == Type.detail || !isSuper ? { disabled: true } : null
+      }
       destroyOnClose
     >
       <Divider />
@@ -429,7 +533,7 @@ const ContractModal = (props) => {
             <Form.Item
               name="dep_id"
               label="所属部门:"
-              initialValue={data?.dep_id || data?.dep_name}
+              initialValue={data?.dep_name || data?.dep_id}
             >
               <TreeSelect
                 style={{ width: '100%' }}
@@ -441,9 +545,9 @@ const ContractModal = (props) => {
                   value: 'ID',
                   children: 'children',
                 }}
-                disabled={disableds.contract || depDisable}
+                disabled={disableds.contract}
                 dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}
-                treeData={depList?.find((item) => item.Code == 'GT')?.children}
+                treeData={companyDepList}
               />
             </Form.Item>
           </Col>
@@ -463,12 +567,12 @@ const ContractModal = (props) => {
                 },
               ]}
             >
-              <Input disabled={!depDisable} />
+              <Input disabled={!dealDisable} />
               {/* <Select
                 showSearch
                 style={{ width: '100%' }}
                 placeholder="请选择"
-                disabled={!depDisable}
+                disabled={!dealDisable}
                 filterOption={(input, option) =>
                   (option?.label ?? '')
                     .toLowerCase()
@@ -501,14 +605,14 @@ const ContractModal = (props) => {
                 placeholder="请选择"
                 showSearch
                 allowClear
-                disabled={disableds.contract || depDisable}
+                disabled={disableds.contract}
                 fieldNames={{
                   label: 'Name',
                   value: 'Name',
                   children: 'children',
                 }}
                 dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}
-                treeData={depList?.find((item) => item.Code == 'GT')?.children}
+                treeData={companyDepList}
               />
             </Form.Item>
           </Col>
@@ -529,7 +633,7 @@ const ContractModal = (props) => {
                 },
               ]}
             >
-              <Radio.Group>
+              <Radio.Group disabled={disableds.contract}>
                 <Radio value={1}>是</Radio>
                 <Radio value={0}>否</Radio>
               </Radio.Group>
@@ -797,17 +901,10 @@ const ContractModal = (props) => {
             >
               <Select
                 style={{ width: '100%' }}
-                options={[
-                  {
-                    value: '财务部',
-                    label: '财务部',
-                  },
-                  {
-                    value: '行政部',
-                    label: '行政部',
-                  },
-                ]}
-                disabled={disableds.contract || depDisable}
+                options={archivesDepList?.map((item) => {
+                  return { label: item.Name, value: item.ID };
+                })}
+                disabled={disableds.contract}
               />
             </Form.Item>
           </Col>
@@ -854,7 +951,9 @@ const ContractModal = (props) => {
           <>
             <ModuleTitle title="归档流程" />
             <div className={styles.modelItem}>
-              <Steps
+              <AuditSteps {...auditData} statusText="已归档" />
+              {/* {renderAudit()} */}
+              {/* <Steps
                 current={data?.status == Status.Checking ? 1 : 2}
                 status={
                   data?.status == Status.CheckReject ? 'error' : 'process'
@@ -901,7 +1000,7 @@ const ContractModal = (props) => {
                         : StatusText[data?.status],
                   },
                 ]}
-              />
+              /> */}
             </div>
           </>
         )}
@@ -929,7 +1028,7 @@ const ContractModal = (props) => {
                         label: '同意',
                       },
                       {
-                        value: 0,
+                        value: 2,
                         label: '拒绝',
                       },
                     ]}
@@ -946,7 +1045,7 @@ const ContractModal = (props) => {
                 </Form.Item>
               </Col>
             </Row>
-            {!isPass && (
+            {isPass == 2 && (
               <Form.Item
                 name="check_desc"
                 label="拒绝原因:"
@@ -999,7 +1098,8 @@ const ContractModal = (props) => {
           <>
             <ModuleTitle title="作废流程" />
             <div className={styles.modelItem}>
-              <Steps
+              <AuditSteps {...auditCelData} statusText="已作废" />
+              {/* <Steps
                 current={data?.status == Status.CalChecking ? 1 : 2}
                 status={
                   data?.status == Status.CalCheckReject ? 'error' : 'process'
@@ -1035,7 +1135,7 @@ const ContractModal = (props) => {
                     title: StatusText[data?.status],
                   },
                 ]}
-              />
+              /> */}
             </div>
           </>
         )}
@@ -1091,21 +1191,22 @@ const ContractModal = (props) => {
             )}
           </>
         )}
-        {/* {auditList.length > 0 && (
+        {auditList.length > 0 && (
           <>
             <ModuleTitle title="审批流程" />
             <div className={styles.modelItem}>
               <Steps
                 current={1}
-                items={auditList.map((item) => {
+                items={auditList.map((item, index) => {
                   return {
-                    title: item.name,
+                    title: `审批${index + 1}`,
+                    description: `审批人:${item.name}`,
                   };
                 })}
               />
             </div>
           </>
-        )} */}
+        )}
       </Form>
       <Divider />
     </Modal>

+ 37 - 6
src/pages/ContractManager/index.jsx

@@ -30,6 +30,7 @@ import { getToken } from '@/utils/utils';
 import PageContent from '@/components/PageContent';
 import EllipsisText from './component/EllipsisText';
 import { stringify } from 'qs';
+import { audit, createAduit } from '@/services/boom';
 
 const ConteactManager = (props) => {
   const { dispatch } = props;
@@ -319,12 +320,30 @@ const ConteactManager = (props) => {
     defaultParams: [{ pageSize: 99999 }],
   });
 
+  //发起OA审批
+  const { run: createRun } = useRequest(
+    (data) => createAduit({ ...data, flow_id: 40, cc_list: [], files: '' }),
+    {
+      manual: true,
+    },
+  );
+
+  // const handleAuditSubmit = async () => {
+  //   // setLoading(true);
+  //   try {
+  //     await audit({
+  //       id,
+  //       status: visible,
+  //       ...fieldsValue,
+  //     });
+  //     message.success('操作成功');
+  //     onClose();
+  //     onOk?.();
+  //   } catch (error) {}
+  //   // setLoading(false);
+  // };
   const handlePreView = (data) => {
-    // if (!data) return;
-    // const attach = JSON.parse(data);
-    // setFileViewerData(attach);
-    // setFileViewerVisible(true);
-    if (!data?.attach || !data?.attach_extend) return;
+    if (!data?.attach && !data?.attach_extend) return;
     const result = [];
     if (data?.attach) {
       const attach = JSON.parse(data?.attach);
@@ -388,11 +407,23 @@ const ConteactManager = (props) => {
     }
   };
 
-  const handleOk = (data, type) => {
+  const handleOk = (data, type, formData = [], audit_list = []) => {
     if (type == Type.add) {
       editRun(data);
+      createRun({
+        form: JSON.stringify(formData),
+        audit_list,
+        extend_code: data.code,
+        extend_type: 0, //归档提交
+      });
     } else if (type == Type.cancel) {
       calRun(data);
+      createRun({
+        form: JSON.stringify(formData),
+        audit_list,
+        extend_code: data.code,
+        extend_type: 1, //作废提交
+      });
     } else if (type == Status.Checking) {
       runCheck(data);
     } else if (type == Status.CalChecking) {

+ 1 - 0
src/pages/Flow/OaAuditDetail.js

@@ -24,6 +24,7 @@ function OaAuditDetail(props) {
     audit_status,
     AuditorInfo,
   } = data || {};
+  if (OaAuditList) console.log(JSON.stringify(OaAuditList));
   const {
     initialState: { user },
   } = useModel('@@initialState');

+ 56 - 35
src/pages/Profile/approve.js

@@ -16,7 +16,7 @@ import {
 import { PageContainer } from '@ant-design/pro-components';
 const { RangePicker } = DatePicker;
 import { useRequest, useModel } from '@umijs/max';
-import { queryProfileList, queryApplyList } from '@/services/boom';
+import { queryProfileList, queryApplyList, audit } from '@/services/boom';
 import dayjs from 'dayjs';
 import {
   queryContractCancelCheck,
@@ -97,37 +97,57 @@ function Approve(props) {
     formatResult: contractResult,
   });
 
-  //审核合同
-  const { run: runCheck, loading: checkLoading } = useRequest(
-    (data) => queryContractCheck(data),
-    {
-      manual: true,
-      onSuccess: () => {
+  // //审核合同
+  // const { run: runCheck, loading: checkLoading } = useRequest(
+  //   (data) => queryContractCheck(data),
+  //   {
+  //     manual: true,
+  //     onSuccess: () => {
+  //       conAuditRun({ multi_status: '1,4', currentPage: 1, page_size: 10 });
+  //       // conAuditedRun({ check_by: user.CName });
+  //       setConVisible(false);
+  //       message.success('审核成功');
+  //     },
+  //     onErroe: () => {
+  //       message.error('审核失败');
+  //     },
+  //   },
+  // );
+  // //作废审核
+  // const { run: calCheckRun } = useRequest(
+  //   (data) => queryContractCancelCheck(data),
+  //   {
+  //     manual: true,
+  //     onSuccess: () => {
+  //       message.success('审核成功');
+  //       setConVisible(false);
+  //       conAuditRun({ multi_status: '1,4', currentPage: 1, page_size: 10 });
+  //     },
+  //     onError: () => {
+  //       message.success('审核失败');
+  //     },
+  //   },
+  // );
+
+  const { run: runOACheck } = useRequest(audit, {
+    manual: true,
+    onSuccess: (data) => {
+      if (data?.Code) {
+        message.error(data?.Msg || '审核失败');
+        return;
+      }
+      setTimeout(() => {
         conAuditRun({ multi_status: '1,4', currentPage: 1, page_size: 10 });
-        // conAuditedRun({ check_by: user.CName });
-        setConVisible(false);
-        message.success('审核成功');
-      },
-      onErroe: () => {
-        message.error('审核失败');
-      },
+      }, 1000);
+
+      // conAuditedRun({ check_by: user.CName });
+      setConVisible(false);
+      message.success('审核成功');
     },
-  );
-  //作废审核
-  const { run: calCheckRun } = useRequest(
-    (data) => queryContractCancelCheck(data),
-    {
-      manual: true,
-      onSuccess: () => {
-        message.success('审核成功');
-        setConVisible(false);
-        conAuditRun({ multi_status: '1,4', currentPage: 1, page_size: 10 });
-      },
-      onError: () => {
-        message.success('审核失败');
-      },
+    onErroe: () => {
+      message.error('审核失败');
     },
-  );
+  });
 
   const applyData = useMemo(() => {
     let result = [];
@@ -387,12 +407,13 @@ function Approve(props) {
         type={Type.check}
         // projectList={projectData?.list}
         visible={conVisible}
-        handleOk={(data) =>
-          detail.status == Status.Checking
-            ? runCheck(data)
-            : detail.status == Status.CalChecking
-            ? calCheckRun(data)
-            : null
+        handleOk={
+          (data) => runOACheck(data)
+          // detail.status == Status.Checking
+          //   ? runOACheck(data)
+          //   : detail.status == Status.CalChecking
+          //   ? calCheckRun(data)
+          //   : null
         }
         handleCancel={() => setConVisible(false)}
       />

+ 12 - 0
src/services/contract.js

@@ -74,3 +74,15 @@ export const queryCompany = async (data) => {
     params: data,
   });
 };
+//计算合同编号
+export const queryContractCode = async (data) => {
+  return await request('/api/contract/v1/code', {
+    params: data,
+  });
+};
+//获取合同审批详情
+export const queryAuditByCode = async (data) => {
+  return await request('/api/v1/oa/audit/extend/detail', {
+    params: data,
+  });
+};