瀏覽代碼

回退功能

xujunjie 1 年之前
父節點
當前提交
61d547f5d0

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

@@ -241,6 +241,7 @@ const Component = (props: any) => {
             { label: '签字版', value: 2 },
             { label: '投标测算', value: 3 },
             { label: '合同测算', value: 4 },
+            { label: '采购合同', value: 5 },
           ]}
         />
         {nodeConfig.is_start_node == 1 && (

+ 15 - 2
src/pages/Detail/AuditModal.js

@@ -1,4 +1,4 @@
-import React, { useEffect, useMemo } from 'react';
+import React, { useEffect, useMemo, useRef, useState } from 'react';
 import { Form } from '@ant-design/compatible';
 import '@ant-design/compatible/assets/index.css';
 import { Modal, Input } from 'antd';
@@ -19,8 +19,11 @@ function AuditModal(props) {
     loading,
     versionList,
     OSSData,
+    dispatch,
   } = props;
 
+  const filesRef = useRef();
+
   const handleOk = () => {
     form.validateFields((err, fieldsValue) => {
       if (err) return;
@@ -36,6 +39,7 @@ function AuditModal(props) {
       onOk({
         ...fieldsValue,
         audit_status,
+        files: filesRef.current,
       });
     });
   };
@@ -45,7 +49,8 @@ function AuditModal(props) {
     OSSData: OSSData,
     noStyle: false,
     onChange: files => {
-      let data = files.map(file => OSSData.host + '/' + file.url);
+      console.log(files)
+      filesRef.current = files.map(file => OSSData.host + '/' + file.url).join(',');
     },
   };
 
@@ -108,6 +113,12 @@ function AuditModal(props) {
 
   useEffect(() => {
     if (visible) {
+      dispatch({
+        type: 'detail/getChartOSSData',
+        payload: {
+          projectId: version.project_id,
+        },
+      });
       try {
         const comment = sheetRef.current.getComment();
         console.log(comment);
@@ -118,6 +129,8 @@ function AuditModal(props) {
         });
         form.setFieldsValue({ audit_comment: str });
       } catch (error) {}
+    } else {
+      filesRef.current = '';
     }
   }, [visible]);
 

+ 21 - 1
src/pages/Detail/FlowModal.js

@@ -403,6 +403,14 @@ function FlowModal(props) {
 
   const getDescription = (node, prevNode) => {
     let str = `审批人:${node.AuditorUser?.CName || '-'}`;
+    let filesList = [];
+    if (node.files) {
+      filesList = node.files.split(',').map(item => {
+        const list = item.split('/');
+        const name = list[list.length - 1];
+        return { name, url: item };
+      });
+    }
     const date = new Date(node.audit_time);
     const auditTime =
       node.audit_time === '0001-01-01T00:00:00Z'
@@ -423,6 +431,18 @@ function FlowModal(props) {
         <div>
           <span>审批时间:{auditTime || '-'}</span>
         </div>
+        {filesList.length > 0 && (
+          <div style={{ display: 'flex' }}>
+            附件:
+            <div>
+              {filesList.map(item => (
+                <a target="_blank" href={item.url}>
+                  {item.name}
+                </a>
+              ))}
+            </div>
+          </div>
+        )}
         {/* <div> */}
         {/*   <span>滞留时间:{`${residenceTime}小时`}</span> */}
         {/* </div> */}
@@ -614,7 +634,7 @@ function FlowModal(props) {
                       current={item.current}
                       status={item.status}
                     >
-                      {item.list.map(( node) => (
+                      {item.list.map(node => (
                         <Step
                           key={`${node.id}_${node.node}`}
                           title={node.node}

+ 4 - 5
src/pages/Detail/Index.js

@@ -268,7 +268,7 @@ function Detail(props) {
     await queryDelSheetRecord(params);
   };
 
-  const onAudit = ({ audit_comment, audit_status }) => {
+  const onAudit = (data) => {
     const flowNode = flow.currentNode;
     dispatch({
       type: 'detail/approve',
@@ -277,8 +277,7 @@ function Detail(props) {
         project_id: projectId,
         flow_id: flowNode.flow_id,
         node_id: flowNode.seq,
-        audit_comment,
-        audit_status,
+        ...data
       },
       callback: newVersion => {
         setAuditVisible(false);
@@ -289,7 +288,7 @@ function Detail(props) {
             id: templateId,
           },
         });
-        if (audit_status == 3) {
+        if (data.audit_status == 3) {
           // 更新审批流
           dispatch({
             type: 'detail/queryAuditList',
@@ -437,7 +436,7 @@ function Detail(props) {
     }
   };
 
-  console.log('0--------------', currentUser);
+  // console.log('0--------------', currentUser);
 
   //是否展示psr表上面的按钮
   const showPsrBtns = useMemo(() => {

+ 4 - 4
src/pages/Detail/LuckySheet.js

@@ -625,13 +625,13 @@ class LuckySheet extends React.Component {
     return comment;
   }
 
-  async goalSeek(type, goal) {
+  async goalSeek(type, goal,order = 2) {
     let luckysheet = this.luckysheet;
 
     const fn = function(x) {
       return new Promise(resolve => {
         luckysheet.setCellValue(9, 2, x.toFixed(4), {
-          order: 0,
+          order,
           success: () => {
             luckysheet.refreshFormula(() => {
               let row;
@@ -643,7 +643,7 @@ class LuckySheet extends React.Component {
                 row = 5;
               }
               let data = luckysheet.getCellValue(row, 2, {
-                order: 0,
+                order,
               });
               console.log(data);
               resolve(data);
@@ -654,7 +654,7 @@ class LuckySheet extends React.Component {
     };
     try {
       let defaultValue = luckysheet.getCellValue(9, 2, {
-        order: 0,
+        order,
       });
       const result = await GoalSeek({
         goal,

+ 28 - 23
src/pages/Detail/TimeNode.js

@@ -1,12 +1,12 @@
-import React, {useEffect, useState, useRef} from 'react';
-import {Form} from '@ant-design/compatible';
+import React, { useEffect, useState, useRef, useMemo } from 'react';
+import { Form } from '@ant-design/compatible';
 import '@ant-design/compatible/assets/index.css';
-import {connect} from 'dva';
-import {Steps, Button, Modal, Tooltip} from 'antd';
+import { connect } from 'dva';
+import { Steps, Button, Modal, Tooltip } from 'antd';
 import styles from './Index.less';
-import {getCurrentUser} from '@/utils/authority';
+import { getCurrentUser } from '@/utils/authority';
 
-const {Step} = Steps;
+const { Step } = Steps;
 
 // 时间节点
 function TimeNode(props) {
@@ -24,9 +24,15 @@ function TimeNode(props) {
     stepDirection,
     currentUser,
   } = props;
-  const {current, list, active} = flow;
-  console.log(list.FlowNodes)
+  const { current, list, active } = flow;
+  const nodeId = version.template_node_id;
 
+  const showBackBtn = useMemo(() => {
+    if (!nodeId || flowDetail.nodes.length == 0) return false;
+    const node = flowDetail.nodes.find(item => item.Id == nodeId);
+    if (node.label == '三级审批1') return true;
+    return false;
+  }, [nodeId, flowDetail]);
 
   function calculateHoursDifference(date1, date2) {
     const timestamp1 = date1.getTime(); // 获取第一个Date对象的时间戳(以毫秒为单位)
@@ -42,23 +48,24 @@ function TimeNode(props) {
     let str = node?.AuditRoleInfo
       ? `审批人:${node?.AuditRoleInfo.Name || '-'}`
       : `审批人:${node?.AuditorUser.CName || '-'}`;
-    const date = new Date(node.audit_time)
-    const auditTime = node.audit_time === '0001-01-01T00:00:00Z' ? '-' : date.toLocaleDateString('zh-CN', {
-      format: 'YYYY-MM-DD hh:mm:ss'
-    })
+    const date = new Date(node.audit_time);
+    const auditTime =
+      node.audit_time === '0001-01-01T00:00:00Z'
+        ? '-'
+        : date.toLocaleDateString('zh-CN', {
+            format: 'YYYY-MM-DD hh:mm:ss',
+          });
     // const residenceTime = auditTime === '-' ? '-' : calculateHoursDifference(date, new Date(prevNode.audit_time))
     return (
       <div>
         {str}
         <div>
-          <span style={{color: '#1A73E8', textDecoration: 'undeline'}}>
+          <span style={{ color: '#1A73E8', textDecoration: 'undeline' }}>
             审批意见:{node.desc || '-'}
           </span>
         </div>
         <div>
-          <span>
-            审批时间:{auditTime}
-          </span>
+          <span>审批时间:{auditTime}</span>
         </div>
         {/* <div> */}
         {/*   <span> */}
@@ -79,18 +86,16 @@ function TimeNode(props) {
           current={current}
           status={active == 0 ? 'error' : 'process'}
         >
-          {list.FlowNodes.map(( item) => {
-            return <Step key={item.id} title={item.node} description={getDescription(item)} />
+          {list.FlowNodes.map(item => {
+            return <Step key={item.id} title={item.node} description={getDescription(item)} />;
           })}
         </Steps>
         {isAuditor && active != 0 && (
-          <div className={styles.btns} style={{margin: '40px 0'}}>
+          <div className={styles.btns} style={{ margin: '40px 0' }}>
             <Button type="primary" onClick={() => setAuditVisible(1)}>
               通过
             </Button>
-            <Button onClick={() => setAuditVisible(3)}>
-              回退
-            </Button>
+            <Button onClick={() => setAuditVisible(3)}>回退</Button>
             <Button onClick={() => setAuditVisible(2)} danger>
               拒绝
             </Button>
@@ -107,7 +112,7 @@ function TimeNode(props) {
   return null;
 }
 
-export default connect(({user, detail}) => ({
+export default connect(({ user, detail }) => ({
   currentUser: user.currentUser,
   versionList: detail.versionList,
 }))(TimeNode);