Browse Source

feat: 支持链接跳转到具体的审核页面

ZhaoJun 1 year ago
parent
commit
500b6de75e
4 changed files with 112 additions and 78 deletions
  1. 4 4
      src/pages/Auth/Auth.js
  2. 34 30
      src/pages/Detail/Index.js
  3. 4 4
      src/pages/List/List.js
  4. 70 40
      src/services/boom.js

+ 4 - 4
src/pages/Auth/Auth.js

@@ -57,8 +57,8 @@ function Auth(props) {
     let version = {};
     if (item.type == 'checked') {
       version = checkedVersionList.find(v => v.id == item.id);
-      localStorage.excelItem = JSON.stringify(version);
-      router.push(`/home/detail/${item.project_id}/${item.template_id}`);
+      // localStorage.excelItem = JSON.stringify(version);
+      router.push(`/home/detail/${item.project_id}/${item.template_id}?version_id=${version.version_id}`);
     } else {
       //调用接口获取version信息
       dispatch({
@@ -66,8 +66,8 @@ function Auth(props) {
         payload: { template_node_id: item.node_id },
         callback: checkedVersionList => {
           let version = checkedVersionList.find(v => v.id == item.id) || {};
-          localStorage.excelItem = JSON.stringify(version);
-          router.push(`/home/detail/${item.project_id}/${item.template_id}`);
+          // localStorage.excelItem = JSON.stringify(version);
+          router.push(`/home/detail/${item.project_id}/${item.template_id}?version_id=${version.version_id}`);
         },
       });
     }

+ 34 - 30
src/pages/Detail/Index.js

@@ -1,7 +1,7 @@
-import React, { useEffect, useState, useRef, useMemo } from 'react';
-import { UnorderedListOutlined, PlusOutlined, InfoOutlined } from '@ant-design/icons';
-import { Button, Modal, message, Alert, Avatar } from 'antd';
-import { connect } from 'dva';
+import React, {useEffect, useState, useRef, useMemo} from 'react';
+import {UnorderedListOutlined, PlusOutlined, InfoOutlined} from '@ant-design/icons';
+import {Button, Modal, message, Alert, Avatar} from 'antd';
+import {connect} from 'dva';
 import styles from './Index.less';
 import LuckySheet from './LuckySheet';
 import AuditModal from './AuditModal';
@@ -18,8 +18,9 @@ import VersionModal from './VersionModal';
 import CommitAuditModal from './CommitAuditModal';
 import CommentContent from '@/components/CommentContent';
 import MergeModal from './MergeModal';
-import { GetTokenFromUrl, getToken } from '@/utils/utils';
+import {GetTokenFromUrl, getToken} from '@/utils/utils';
 import {
+  getAuditDetail,
   queryDelSheetRecord,
   queryDetail,
   queryDingInstanceExecute,
@@ -27,14 +28,15 @@ import {
 } from '@/services/boom';
 import HistoryDrawer from './HistoryDrawer';
 import AuditFlow from './AuditFlow';
-import { getCurrentUser } from '@/utils/authority';
-import { async } from '@antv/x6/es/registry/marker/async';
+import {getCurrentUser} from '@/utils/authority';
+import {async} from '@antv/x6/es/registry/marker/async';
 import FileViewerModal from '@/components/FileViewer';
 import PreviewFile from '@/components/PreviewFile';
 import FormAndFilesNode from './FormAndFilesNode';
 import DropdownMenu from './DropdownMenu';
 import CurrentInfo from './CurrentInfo';
 import moment from 'moment';
+
 const LocalData = localStorage.luckysheet;
 
 function Detail(props) {
@@ -46,7 +48,8 @@ function Detail(props) {
     auditList,
     flowDetail,
     versionTree,
-    match: { params },
+    match: {params},
+    location: {query},
     instanceDetail,
     typeOptions,
     classifyList,
@@ -107,6 +110,7 @@ function Detail(props) {
 
   const projectId = parseInt(params.projectId);
   const templateId = parseInt(params.templateId);
+  const versionID = parseInt(query.version_id);
 
   const flow = useMemo(() => {
     let data = {
@@ -263,7 +267,7 @@ function Detail(props) {
     await queryDelSheetRecord(params);
   };
 
-  const onAudit = ({ audit_comment, audit_status }) => {
+  const onAudit = ({audit_comment, audit_status}) => {
     const flowNode = flow.currentNode;
     dispatch({
       type: 'detail/approve',
@@ -299,7 +303,7 @@ function Detail(props) {
         } else {
           dispatch({
             type: 'authList/queryAuthList',
-            payloda: { user_id: currentUser.ID },
+            payloda: {user_id: currentUser.ID},
           });
           localStorage.excelId = newVersion.id;
           setVersion({
@@ -311,7 +315,7 @@ function Detail(props) {
         //更新未审批列表
         dispatch({
           type: 'authList/queryAuthList',
-          payloda: { user_id: currentUser.ID },
+          payloda: {user_id: currentUser.ID},
         });
       },
     });
@@ -389,14 +393,15 @@ function Detail(props) {
     return !loading.effects['detail/queryComment'] && loading.models.detail;
   };
 
-  const changeVersion = id => {
+  const changeVersion = async id => {
+    debugger
     let version;
     if (typeof id == 'object') {
       version = id;
       localStorage.excelId = version.id;
       localStorage.excelItem = JSON.stringify(version);
     } else {
-      version = versionList.find(item => item.id == id);
+      version = await getAuditDetail({userId: currentUser.ID, versionID})
       if (!version) return;
       localStorage.excelId = id;
     }
@@ -430,7 +435,8 @@ function Detail(props) {
         userRef.current = newUser;
         setUser(newUser);
       }
-    } catch (error) {}
+    } catch (error) {
+    }
   };
   const handleSubmitCell = (value, callback) => {
     if (!value) return;
@@ -486,7 +492,7 @@ function Detail(props) {
 
   useEffect(() => {
     if (compareList.length == 2) {
-      const callback = ({ diff, add }) => {
+      const callback = ({diff, add}) => {
         setUpdateCount(updateCount => {
           return {
             diff: diff.length,
@@ -500,22 +506,20 @@ function Detail(props) {
   }, [compareList]);
 
   useEffect(() => {
-    if (versionList.length == 0) return;
+    // if (versionList.length == 0) return;
+    if (!currentUser.ID) return
     if (!version.id) {
-      const excelId = localStorage.excelItem
-        ? JSON.parse(localStorage.excelItem)
-        : localStorage.excelId;
-      changeVersion(excelId);
+      changeVersion(versionID);
     } else {
       changeVersion(version.id);
     }
-  }, [versionList]);
+  }, [versionList, currentUser]);
 
   return (
     <>
       <div className={styles.top}>
         <div>
-          <Button type="primary" style={{ marginRight: 20 }} onClick={() => setFlowVisible(true)}>
+          <Button type="primary" style={{marginRight: 20}} onClick={() => setFlowVisible(true)}>
             查看流程
           </Button>
 
@@ -525,10 +529,10 @@ function Detail(props) {
               新建清单
             </Button>
           )}
-          <CurrentInfo version={version} flowDetail={flowDetail} />
+          <CurrentInfo version={version} flowDetail={flowDetail}/>
         </div>
         <div className={styles.btns}>
-          {saveTime && <span style={{ color: '#333', fontSize: 14 }}>上次保存时间 {saveTime}</span>}
+          {saveTime && <span style={{color: '#333', fontSize: 14}}>上次保存时间 {saveTime}</span>}
           {version.audit_status === 0 && (
             <Button type="primary" loading={loading.effects['detail/saveSheet']} onClick={onUpdate}>
               保存
@@ -536,16 +540,16 @@ function Detail(props) {
           )}
           <Button
             type="primary"
-            style={{ marginRight: 20 }}
+            style={{marginRight: 20}}
             onClick={() => setVersionTreeVisible(true)}
           >
             历史版本
           </Button>
-          <Avatar.Group style={{ marginRight: 20 }}>
+          <Avatar.Group style={{marginRight: 20}}>
             {user.map((item, id) => (
               <Avatar
                 key={`${id}-${item.name}`}
-                style={{ backgroundColor: '#008dff' }}
+                style={{backgroundColor: '#008dff'}}
                 size="large"
               >
                 {item.Name}
@@ -569,11 +573,11 @@ function Detail(props) {
         <input
           type="file"
           ref={fileRef}
-          style={{ display: 'none' }}
+          style={{display: 'none'}}
           onChange={e => exportExcl(e.target.files)}
         />
       </div>
-      <div style={{ display: 'flex' }}>
+      <div style={{display: 'flex'}}>
         <div
           className={styles.content}
           style={{
@@ -709,7 +713,7 @@ function Detail(props) {
   );
 }
 
-export default connect(({ detail, user, xflow, loading }) => ({
+export default connect(({detail, user, xflow, loading}) => ({
   flowDetail: xflow.flowDetail,
   auditList: detail.auditList,
   instanceDetail: detail.dingInstanceDetail,

+ 4 - 4
src/pages/List/List.js

@@ -142,10 +142,10 @@ function List(props) {
   }, []);
 
   const changeVersion = item => {
-    if (typeof item == 'object') {
-      localStorage.excelItem = JSON.stringify(item);
-    }
-    router.push(`/home/detail/${item.project_id}/${item.template_id}`);
+    // if (typeof item == 'object') {
+    //   localStorage.excelItem = JSON.stringify(item);
+    // }
+    router.push(`/home/detail/${item.project_id}/${item.template_id}?version_id=${item.version_id}`);
   };
 
   const getLoading = () => {

+ 70 - 40
src/services/boom.js

@@ -1,18 +1,19 @@
-import { message } from 'antd';
+import {message} from 'antd';
 import request from '@/utils/request';
-import { async } from '@antv/x6/lib/registry/marker/async';
-import { stringify } from 'qs';
+import {async} from '@antv/x6/lib/registry/marker/async';
+import {stringify} from 'qs';
 
 /**
-  project_id
-  version_id	大版本id
-  template_id	
-  template_node_id	查询某流程和某节点下最新版本的数据记录
-  node_id	查询某审批流程和某审批节点下最新版本的数据记录
+ project_id
+ version_id	大版本id
+ template_id
+ template_node_id	查询某流程和某节点下最新版本的数据记录
+ node_id	查询某审批流程和某审批节点下最新版本的数据记录
  */
 export async function queryRecord(params) {
   return request(`/purchase/record?${stringify(params)}`);
 }
+
 //删除excel中单个sheet页
 export async function queryDelSheetRecord(params) {
   const response = await request(`/purchase/bom/del-purchase-excel-sheet?${stringify(params)}`);
@@ -39,12 +40,14 @@ export async function commitSheet(params) {
     body: params,
   });
 }
+
 export async function approve(params) {
   return request(`/purchase/audit/status`, {
     method: 'POST',
     body: params,
   });
 }
+
 export async function queryAuthority(params) {
   const depId = localStorage.depId;
   return request(`/purchase/bom/user/excel/col?depId=${depId}`, {
@@ -52,27 +55,29 @@ export async function queryAuthority(params) {
     body: params,
   });
 }
+
 export async function addBomComment(params) {
   return request(`/purchase/comment`, {
     method: 'POST',
     body: params,
   });
 }
+
 export async function queryBomComment(params) {
   return request(`/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":"流转描述"
+ "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(`/purchase/next/node/submit`, {
@@ -80,6 +85,7 @@ export async function submitNextNode(params) {
     body: params,
   });
 }
+
 export async function advanceSubmitNextNode(params) {
   return request(`/api/v1/purchase/next/node/advance-submit`, {
     method: 'POST',
@@ -98,9 +104,11 @@ export async function queryDetail(params) {
   });
   return sheet;
 }
+
 export async function queryHistoryDetail(params) {
   return request(`/purchase/record/history/detail?${stringify(params)}`);
 }
+
 export async function queryHistoryList(params) {
   return request(`/purchase/record/history?${stringify(params)}`);
 }
@@ -108,22 +116,27 @@ export async function queryHistoryList(params) {
 export async function queryBoomFlowList(params) {
   return request(`/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',
@@ -135,6 +148,7 @@ export async function queryDingInstanceDetail(params) {
   }
   return res;
 }
+
 export async function queryDingInstanceExecute(params) {
   let res = await request(`/api/v1/purchase/bom/ding/instance-execute`, {
     method: 'POST',
@@ -146,12 +160,14 @@ export async function queryDingInstanceExecute(params) {
   }
   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
@@ -159,20 +175,21 @@ export async function queryListParentByUser(params) {
 export async function queryProjectRecord(params) {
   return request(`/purchase/bom/project/record?${stringify(params)}`);
 }
+
 /** 查看版本列表
- *  project_id		
-    template_id		流程id
-    template_node_id	流程节点id
+ *  project_id
+ template_id		流程id
+ template_node_id	流程节点id
  */
 export async function queryVersionsList(params) {
   return request(`/purchase/record/versions?${stringify(params)}`);
 }
 
 export async function queryBoomFlowDetail(params) {
-  let { data } = await request(`/purchase/bom/flow/info?${stringify(params)}`);
+  let {data} = await request(`/purchase/bom/flow/info?${stringify(params)}`);
   const groups = {
     top: {
-      position: { name: 'top' },
+      position: {name: 'top'},
       attrs: {
         circle: {
           r: 4,
@@ -180,13 +197,13 @@ export async function queryBoomFlowDetail(params) {
           stroke: '#31d0c6',
           strokeWidth: 2,
           fill: '#fff',
-          style: { visibility: 'hidden' },
+          style: {visibility: 'hidden'},
         },
       },
       zIndex: 10,
     },
     right: {
-      position: { name: 'right' },
+      position: {name: 'right'},
       attrs: {
         circle: {
           r: 4,
@@ -194,13 +211,13 @@ export async function queryBoomFlowDetail(params) {
           stroke: '#31d0c6',
           strokeWidth: 2,
           fill: '#fff',
-          style: { visibility: 'hidden' },
+          style: {visibility: 'hidden'},
         },
       },
       zIndex: 10,
     },
     bottom: {
-      position: { name: 'bottom' },
+      position: {name: 'bottom'},
       attrs: {
         circle: {
           r: 4,
@@ -208,13 +225,13 @@ export async function queryBoomFlowDetail(params) {
           stroke: '#31d0c6',
           strokeWidth: 2,
           fill: '#fff',
-          style: { visibility: 'hidden' },
+          style: {visibility: 'hidden'},
         },
       },
       zIndex: 10,
     },
     left: {
-      position: { name: 'left' },
+      position: {name: 'left'},
       attrs: {
         circle: {
           r: 4,
@@ -222,7 +239,7 @@ export async function queryBoomFlowDetail(params) {
           stroke: '#31d0c6',
           strokeWidth: 2,
           fill: '#fff',
-          style: { visibility: 'hidden' },
+          style: {visibility: 'hidden'},
         },
       },
       zIndex: 10,
@@ -231,7 +248,7 @@ export async function queryBoomFlowDetail(params) {
   const attrs = {
     line: {
       stroke: '#A2B1C3',
-      targetMarker: { name: 'block', width: 12, height: 8 },
+      targetMarker: {name: 'block', width: 12, height: 8},
       strokeDasharray: '5 5',
       strokeWidth: 1,
     },
@@ -261,7 +278,7 @@ export async function queryBoomFlowDetail(params) {
         cell: item.target_cell,
         port: item.target_port,
       },
-      zIndex:0
+      zIndex: 0
     };
     try {
       edge.attrs = item.attr ? JSON.parse(item.attr) : attrs;
@@ -276,12 +293,14 @@ export async function queryBoomFlowDetail(params) {
     edges,
   };
 }
+
 export async function updateNode(data) {
   return request(`/purchase/bom/flow/${data.templateId}/${data.nodeId}`, {
     method: 'PUT',
     body: data.body,
   });
 }
+
 export async function addBoomFlow(data) {
   return request(`/purchase/bom/flow/info`, {
     method: 'POST',
@@ -299,23 +318,25 @@ export async function addAudit(data) {
     body: data,
   });
 }
+
 export async function addFlow(data) {
   return request(`/purchase/bom/flow/info`, {
     method: 'POST',
     body: data,
   });
 }
+
 /**
  *  [
-      {
-        "flow_id": 23,
-        "node": "主管",
-        "desc": "desc",
-        "auditor": 2,
-        "seq": 1,
-        "seq_relate": 0
-      }
-    ]
+ {
+ "flow_id": 23,
+ "node": "主管",
+ "desc": "desc",
+ "auditor": 2,
+ "seq": 1,
+ "seq_relate": 0
+ }
+ ]
  */
 export async function addAuditNode(data) {
   return request(`/purchase/flow/info/${data.flowId}`, {
@@ -334,6 +355,7 @@ export async function queryRecordSheet(data) {
     body: data,
   });
 }
+
 export async function queryDingTemplateList() {
   return request(`/purchase/bom/ding/template/list`);
 }
@@ -444,6 +466,7 @@ export async function queryDelPurchaseExcel(params) {
   });
   return res;
 }
+
 //提交流转存储表单审批人历史记录
 export async function querySaveBomForm(data) {
   return request(`/purchase/bom/save-bom-form`, {
@@ -451,6 +474,7 @@ export async function querySaveBomForm(data) {
     body: data,
   });
 }
+
 export async function queryGetBomForm(params) {
   let res = await request(`/purchase/bom/get-bom-form?${stringify(params)}`, {
     method: 'GET',
@@ -469,7 +493,13 @@ export async function queryTrySeal(params) {
 export async function ChartTempOSSData(params) {
   return request(`/purchase/bom/contract-file/${params.projectId}`);
 }
+
 // 设置最终版本
 export async function setLastVersion(excelId) {
   return request(`/purchase/bom/set-last-version/${excelId}`);
 }
+
+export async function getAuditDetail(params) {
+  const res = await request(`/purchase/bom/get-audit-detail/${params.userId}?version_id=${params.versionID}`)
+  return res.data
+}