xjj 2 жил өмнө
parent
commit
a9c0fb85e0

+ 2 - 2
.umirc.ts

@@ -17,8 +17,8 @@ export default defineConfig({
   proxy: {
     '/api': {
       // target: 'http://47.96.12.136:8888/',
-      // target: 'http://47.96.12.136:8895/',
-      target: 'http://120.55.44.4:8902/',
+      target: 'http://47.96.12.136:8895/',
+      // target: 'http://120.55.44.4:8902/',
       changeOrigin: true,
     },
   },

+ 1 - 0
src/models/userList.js

@@ -5,6 +5,7 @@ export default () => {
   const { data, loading, run } = useRequest(query, {
     manual: true,
     cacheKey: 'queryUserList',
+    cacheTime: -1
   });
 
   return { userList: data?.list, loading, run };

+ 40 - 4
src/pages/Flow/OaAuditDetail.js

@@ -1,15 +1,17 @@
 // 审批详情
-import React, { useEffect, useState, useRef, useMemo } from 'react';
-import { Steps, Button, Tooltip } from 'antd';
-import { useParams, useRequest, useNavigate, useModel } from 'umi';
+import React, { useState, useMemo } from 'react';
+import { Steps, Button, Tooltip, message } from 'antd';
+import { useParams, useRequest, useModel } from 'umi';
 import AuditModal from './components/AuditModal';
 import FormAndFilesNode from './components/FormAndFilesNode';
-import { queryAuditDetail, audit } from '@/services/boom';
+import { queryAuditDetail, updateAuditList } from '@/services/boom';
 import PageContent from '@/components/PageContent';
+import SignModal from './components/SignModal';
 
 function OaAuditDetail(props) {
   const [auditVisible, setAuditVisible] = useState(false);
   const { oaId, id } = useParams();
+  const [visible, setVisible] = useState(false);
 
   const { data, loading, refresh } = useRequest(queryAuditDetail, {
     defaultParams: [{ id }],
@@ -46,6 +48,31 @@ function OaAuditDetail(props) {
     }
     return str;
   };
+  const updateRes = useRequest(
+    (values) => {
+      let list = OaAuditList.map((item) => item.auditor);
+      if (values.type == 'before') {
+        list.splice(current_seq - 1, 0, values.approver);
+      } else {
+        list.splice(current_seq, 0, values.approver);
+      }
+      return updateAuditList(
+        {
+          oa_id: Number(id),
+          audit_list: list,
+        },
+        values.type == 'after',
+      );
+    },
+    {
+      manual: true,
+      onSuccess() {
+        message.success('加签成功');
+        setVisible(false);
+        refresh();
+      },
+    },
+  );
 
   const btns = useMemo(() => {
     if (!user || !data) return;
@@ -66,6 +93,9 @@ function OaAuditDetail(props) {
         <Button key={2} onClick={() => setAuditVisible(2)} danger>
           审批拒绝
         </Button>,
+        <Button key={3} onClick={() => setVisible(true)}>
+          加签
+        </Button>,
       ];
     }
     return [];
@@ -90,6 +120,12 @@ function OaAuditDetail(props) {
         onClose={() => setAuditVisible(false)}
         onOk={refresh}
       />
+      <SignModal
+        visible={visible}
+        onCancel={() => setVisible(false)}
+        onCreate={(values) => updateRes.run(values)}
+        loading={updateRes.loading}
+      />
     </PageContent>
   );
 }

+ 62 - 0
src/pages/Flow/components/SignModal.js

@@ -0,0 +1,62 @@
+import React from 'react';
+import { Modal, Form, Radio, Select, Button } from 'antd';
+import { useModel, useRequest } from '@umijs/max';
+
+const { Option } = Select;
+
+const SignModal = ({ visible, onCancel, onCreate, loading }) => {
+  const [form] = Form.useForm();
+  const { userList } = useModel('userList');
+
+  const handleOk = () => {
+    form.validateFields().then((values) => {
+      onCreate(values);
+    });
+  };
+
+  return (
+    <Modal
+      open={visible}
+      title="加签"
+      onCancel={onCancel}
+      onOk={handleOk}
+      destroyOnClose
+      confirmLoading={loading}
+    >
+      <Form form={form} layout="vertical">
+        <Form.Item
+          name="type"
+          label="加签类型"
+          initialValue={'before'}
+          rules={[{ required: true, message: '请选择加签类型' }]}
+        >
+          <Radio.Group>
+            <Radio value="before">前加</Radio>
+            <Radio value="after">后加</Radio>
+          </Radio.Group>
+        </Form.Item>
+        <Form.Item
+          name="approver"
+          label="审批人"
+          rules={[{ required: true, message: '请选择审批人' }]}
+        >
+          <Select
+            showSearch
+            filterOption={(input, option) =>
+              (option.children ?? '').toLowerCase().includes(input.toLowerCase())
+            }
+            placeholder="请选择审批人"
+          >
+            {userList?.map((item) => (
+              <Option value={item.ID} key={item.ID}>
+                {item.CName}
+              </Option>
+            ))}
+          </Select>
+        </Form.Item>
+      </Form>
+    </Modal>
+  );
+};
+
+export default SignModal;

+ 13 - 420
src/services/boom.js

@@ -255,423 +255,16 @@ export async function queryFlowDelete(id) {
   return request(`/api/v1/oa/flow/delete/${id}`);
 }
 
-// /**
-//   project_id
-//   version_id	大版本id
-//   template_id
-//   template_node_id	查询某流程和某节点下最新版本的数据记录
-//   node_id	查询某审批流程和某审批节点下最新版本的数据记录
-//  */
-// export async function queryRecord(params) {
-//   return request(`/api/v1/purchase/record?${stringify(params)}`);
-// }
-// //删除excel中单个sheet页
-// export async function queryDelSheetRecord(params) {
-//   const response = await request(`/api/v1/purchase/bom/del-purchase-excel-sheet?${stringify(params)}`);
-//   if (response.code == 200) {
-//     // message.success('删除成功');
-//   }
-// }
-
-// // 查询全部工作流
-// export async function queryFlowList(params) {
-//   return request(`/api/v1/purchase/bom/flows?${stringify(params)}`);
-// }
-
-// // 根据节点id查询所有version
-// export async function queryVserionByNode(params, signal) {
-//   return request(`/api/v1/purchase/bom/flow/node?${stringify(params)}`, {
-//     signal,
-//   });
-// }
-
-// export async function commitSheet(params) {
-//   return request(`/api/v1/purchase/record`, {
-//     method: 'POST',
-//     body: params,
-//   });
-// }
-// export async function approve(params) {
-//   return request(`/api/v1/purchase/audit/status`, {
-//     method: 'POST',
-//     body: params,
-//   });
-// }
-// export async function queryAuthority(params) {
-//   const depId = localStorage.depId;
-//   return request(`/api/v1/purchase/bom/user/excel/col?depId=${depId}`, {
-//     method: 'POST',
-//     body: params,
-//   });
-// }
-// export async function addBomComment(params) {
-//   return request(`/api/v1/purchase/comment`, {
-//     method: 'POST',
-//     body: params,
-//   });
-// }
-// export async function queryBomComment(params) {
-//   return request(`/api/v1/purchase/comment?${stringify(params)}`);
-// }
-
-// /**
-//  * 提交流转
-//   "id":3, 当前流转文档id,必填
-//   "project_id":46, 所属项目id
-//   "template_id":1, 所属模板id ,必填
-//   "template_node_id":34,所属节点id,必填
-//   "next_template_id":1,跳转的下级业务模板id,必填
-//   "next_template_node_id":2,跳转的下级业务节点id,必填
-//   "flow_id":1, 跳转的下级审核流程id , 如果不为空,则说明流转的是审核节点,下级业务节点为审核通过后进入的业务节点
-//   "node_id":1,跳转的下级审核节点id
-//   "desc":"流转描述"
-//  */
-// export async function submitNextNode(params) {
-//   return request(`/api/v1/purchase/next/node/submit`, {
-//     method: 'POST',
-//     body: params,
-//   });
-// }
-// export async function advanceSubmitNextNode(params) {
-//   return request(`/api/v1/purchase/next/node/advance-submit`, {
-//     method: 'POST',
-//     body: params,
-//   });
-// }
-
-// export async function queryDetail(params) {
-//   let response = await request(`/api/v1/purchase/record?${stringify(params)}`);
-//   let sheet = response.data;
-//   sheet.data = JSON.parse(sheet.data || '[]');
-//   sheet.data.forEach(item => {
-//     item.config = JSON.parse(item.config || '{}');
-//     item.celldata = JSON.parse(item.cell_data || '[]');
-//     delete item.cell_data;
-//   });
-//   return sheet;
-// }
-// export async function queryHistoryDetail(params) {
-//   return request(`/api/v1/purchase/record/history/detail?${stringify(params)}`);
-// }
-// export async function queryHistoryList(params) {
-//   return request(`/api/v1/purchase/record/history?${stringify(params)}`);
-// }
-
-// export async function queryBoomFlowList(params) {
-//   return request(`/api/v1/purchase/bom/flows?${stringify(params)}`);
-// }
-// //请求历史版本
-// export async function queryVersionsTree(params) {
-//   return request(`/api/v1/purchase/record/version/tree?${stringify(params)}`);
-// }
-// //查询业务节点的审核记录
-// export async function queryAuditExcel(params) {
-//   return request(`/api/v1/purchase/audit/excel?${stringify(params)}`);
-// }
-// //查询审批节点的审核记录
-// export async function queryAuditRecord(params) {
-//   return request(`/api/v1/purchase/audit/record?${stringify(params)}`);
-// }
-// //查询表单数据接口
-// export async function queryDingSchema(params) {
-//   return request(`/api/v1/purchase/bom/ding/schema?${stringify(params)}`);
-// }
-// export async function queryDingInstanceDetail(params) {
-//   let res = await request(`/api/v1/purchase/bom/ding/instance-detail`, {
-//     method: 'POST',
-//     body: params,
-//   });
-//   if (res.data.errcode != 0) {
-//     message.error(res.data.errmsg);
-//     throw new Error(res.data.errmsg);
-//   }
-//   return res;
-// }
-// export async function queryDingInstanceExecute(params) {
-//   let res = await request(`/api/v1/purchase/bom/ding/instance-execute`, {
-//     method: 'POST',
-//     body: params,
-//   });
-//   if (res.data.errcode != 0) {
-//     message.error('审批失败,请联系管理员。');
-//     throw new Error(res.data.errmsg);
-//   }
-//   return res;
-// }
-// export async function queryListParentByUser(params) {
-//   return request(`/api/v1/purchase/bom/ding/department/list-parent-by-user`, {
-//     method: 'POST',
-//     body: params,
-//   });
-// }
-// /**
-//  * 查看项目流程列表
-//  * project_id
-//  */
-// export async function queryProjectRecord(params) {
-//   return request(`/api/v1/purchase/bom/project/record?${stringify(params)}`);
-// }
-// /** 查看版本列表
-//  *  project_id
-//     template_id		流程id
-//     template_node_id	流程节点id
-//  */
-// export async function queryVersionsList(params) {
-//   return request(`/api/v1/purchase/record/versions?${stringify(params)}`);
-// }
-
-// export async function queryBoomFlowDetail(params) {
-//   let { data } = await request(`/api/v1/purchase/bom/flow/info?${stringify(params)}`);
-//   const groups = {
-//     top: {
-//       position: { name: 'top' },
-//       attrs: {
-//         circle: {
-//           r: 4,
-//           magnet: true,
-//           stroke: '#31d0c6',
-//           strokeWidth: 2,
-//           fill: '#fff',
-//           style: { visibility: 'hidden' },
-//         },
-//       },
-//       zIndex: 10,
-//     },
-//     right: {
-//       position: { name: 'right' },
-//       attrs: {
-//         circle: {
-//           r: 4,
-//           magnet: true,
-//           stroke: '#31d0c6',
-//           strokeWidth: 2,
-//           fill: '#fff',
-//           style: { visibility: 'hidden' },
-//         },
-//       },
-//       zIndex: 10,
-//     },
-//     bottom: {
-//       position: { name: 'bottom' },
-//       attrs: {
-//         circle: {
-//           r: 4,
-//           magnet: true,
-//           stroke: '#31d0c6',
-//           strokeWidth: 2,
-//           fill: '#fff',
-//           style: { visibility: 'hidden' },
-//         },
-//       },
-//       zIndex: 10,
-//     },
-//     left: {
-//       position: { name: 'left' },
-//       attrs: {
-//         circle: {
-//           r: 4,
-//           magnet: true,
-//           stroke: '#31d0c6',
-//           strokeWidth: 2,
-//           fill: '#fff',
-//           style: { visibility: 'hidden' },
-//         },
-//       },
-//       zIndex: 10,
-//     },
-//   };
-//   const attrs = {
-//     line: {
-//       stroke: '#A2B1C3',
-//       targetMarker: { name: 'block', width: 12, height: 8 },
-//       strokeDasharray: '5 5',
-//       strokeWidth: 1,
-//     },
-//   };
-//   let nodes = data.Nodes.map(item => {
-//     let node = {
-//       ...item,
-//       id: item.node_id,
-//       renderKey: item.render_key,
-//       zIndex: item.z_index,
-//       isCustom: !!item.is_custom,
-//       ports: JSON.parse(item.ports || '{}'),
-//     };
-//     node.ports.groups = groups;
-//     node.parentKey = '1';
-
-//     return node;
-//   });
-//   let edges = data.Edges.map(item => {
-//     let edge = {
-//       id: item.edge_id,
-//       source: {
-//         cell: item.source_cell,
-//         port: item.source_port,
-//       },
-//       target: {
-//         cell: item.target_cell,
-//         port: item.target_port,
-//       },
-//     };
-//     try {
-//       edge.attrs = item.attr ? JSON.parse(item.attr) : attrs;
-//     } catch (error) {
-//       edge.attrs = attrs;
-//     }
-//     return edge;
-//   });
-//   return {
-//     ...data,
-//     nodes,
-//     edges,
-//   };
-// }
-// export async function updateNode(data) {
-//   return request(`/api/v1/purchase/bom/flow/${data.templateId}/${data.nodeId}`, {
-//     method: 'PUT',
-//     body: data.body,
-//   });
-// }
-// export async function addBoomFlow(data) {
-//   return request(`/api/v1/purchase/bom/flow/info`, {
-//     method: 'POST',
-//     body: data,
-//   });
-// }
-
-// export async function addFlow(data) {
-//   return request(`/api/v1/purchase/bom/flow/info`, {
-//     method: 'POST',
-//     body: data,
-//   });
-// }
-// /**
-//  *  [
-//       {
-//         "flow_id": 23,
-//         "node": "主管",
-//         "desc": "desc",
-//         "auditor": 2,
-//         "seq": 1,
-//         "seq_relate": 0
-//       }
-//     ]
-//  */
-// export async function addAuditNode(data) {
-//   return request(`/api/v1/purchase/flow/info/${data.flowId}`, {
-//     method: 'POST',
-//     body: data.nodes,
-//   });
-// }
-
-// export async function queryRecordSheet(data) {
-//   return request(`/api/v1/purchase/record/sheet?${stringify(data)}`, {
-//     method: 'POST',
-//     body: data,
-//   });
-// }
-// export async function queryDingTemplateList() {
-//   return request(`/api/v1/purchase/bom/ding/template/list`);
-// }
-
-// export async function queryDDdepList(data) {
-//   let res = await request(`/api/v1/purchase/bom/ding/department-list`, {
-//     method: 'POST',
-//     body: data,
-//   });
-//   return res.data.result;
-// }
-
-// export async function queryDDProcessesForecast(data) {
-//   let res = await request(`/api/v1/purchase/bom/ding/processes-forecast`, {
-//     method: 'POST',
-//     body: data,
-//   });
-//   if (res.data.message) {
-//     // message.error(res.data.message);
-//     throw new Error(res.data.message);
-//   }
-//   return res.data.result;
-// }
-
-// export async function uploadFile(data) {
-//   let res = await request(`/api/v1/purchase/bom/ding/upload-file`, {
-//     method: 'POST',
-//     body: data,
-//     headers: {
-//       ContentType: 'application/x-www-form-urlencoded',
-//     },
-//   });
-//   if (!res.data.dentry) {
-//     message.error(res.data.errmsg);
-//     throw new Error(res.data.errmsg);
-//   }
-//   return res.data;
-// }
-
-// export async function bindDDCode(userId, code) {
-//   let res = await request(`/api/v1/purchase/bom/ding/set-ding-user-code?ucode=${userId}:${code}`, {
-//     method: 'GET',
-//   });
-
-//   return res.data;
-// }
-
-// //获取部门结构
-// export async function queryDepV2(params) {
-//   return request(`/api/v2/dep?${stringify(params)}`);
-// }
-
-// //新增工作流时调用接口 给项目绑定默认分类列表
-// //purchase/bom/default-bind-classify?project_id=1
-// export async function queryDefaultBindClassify(params) {
-//   let res = await request(`/api/v1/purchase/bom/default-bind-classify?${stringify(params)}`, {
-//     method: 'GET',
-//   });
-//   return res.data;
-// }
-
-// export async function queryBindClassify(params) {
-//   let res = await request(`/api/v1/purchase/bom/get-bind-classify?${stringify(params)}`, {
-//     method: 'GET',
-//   });
-//   return res.data;
-// }
-
-// export async function queryAddBindClassify(data) {
-//   return request(`/api/v1/purchase/bom/add-bind-classify`, {
-//     method: 'POST',
-//     body: data,
-//   });
-// }
-
-// export async function queryDelPurchaseExcel(params) {
-//   let res = await request(`/api/v1/purchase/bom/del-purchase-excel?${stringify(params)}`, {
-//     method: 'GET',
-//   });
-//   return res;
-// }
-// //提交流转存储表单审批人历史记录
-// export async function querySaveBomForm(data) {
-//   return request(`/api/v1/purchase/bom/save-bom-form`, {
-//     method: 'POST',
-//     body: data,
-//   });
-// }
-
-// //章管家失败,重新申请用印
-// export async function queryTrySeal(params) {
-//   let res = await request(`/api/v1/purchase/bom/try-seal?${stringify(params)}`, {
-//     method: 'GET',
-//   });
-//   return res;
-// }
-
-// export async function ChartTempOSSData(params) {
-//   return request(`/api/v1/purchase/bom/contract-file/${params.projectId}`);
-// }
-// // 设置最终版本
-// export async function setLastVersion(excelId) {
-//   return request(`/api/v1/purchase/bom/set-last-version/${excelId}`);
-// }
+export async function updateAuditList(data, isAfter) {
+  let res = await request(`/api/v1/oa/submit/add-auditor`, {
+    method: 'POST',
+    data,
+  });
+  if (isAfter) {
+    await audit({
+      id: data.oa_id,
+      status: 1,
+    });
+  }
+  return res;
+}