xjj před 2 roky
rodič
revize
a380b5aaef

+ 2 - 2
config/config.js

@@ -141,8 +141,8 @@ export default {
   proxy: {
     '/api': {
       // target: 'http://192.168.20.152:8888/',
-      // target: 'http://120.55.44.4:8896/',
-      target: 'http://47.96.12.136:8896/',
+      target: 'http://120.55.44.4:8896/',
+      // target: 'http://47.96.12.136:8896/',
       // target: 'http://oraysmart.com:8889/',
       // target: 'http://oraysmart.com:8888/api',
       // changeOrigin: true,

+ 8 - 8
config/router.config.js

@@ -24,14 +24,6 @@ export default [
             path: '/home/detail/:projectId/:templateId',
             component: './PurchaseAdmin/PurchaseList/Detail/Index',
           },
-          {
-            path: '/home/approval/list',
-            component: './PurchaseAdmin/PurchaseList/Approval/List',
-          },
-          {
-            path: '/home/approval/auth',
-            component: './PurchaseAdmin/PurchaseList/Approval/Auth',
-          },
           {
             path: '/home/flow/:flowId',
             component: './PurchaseAdmin/PurchaseList/Flow/Flow',
@@ -83,6 +75,14 @@ export default [
             path: '/workload/report/finance',
             component: './PurchaseAdmin/PurchaseList/Report/Finance',
           },
+          {
+            path: '/workload/approval/list',
+            component: './PurchaseAdmin/PurchaseList/Approval/List',
+          },
+          {
+            path: '/workload/approval/auth',
+            component: './PurchaseAdmin/PurchaseList/Approval/Auth',
+          },
         ],
       },
       {

+ 2 - 2
public/luckysheet.html

@@ -8,12 +8,12 @@
   <title>Document</title>
 
   <!-- 线上发布使用路径 -->
-  <link rel="stylesheet" href="/bom/Luckysheet/plugins/css/pluginsCss.css" />
+  <!-- <link rel="stylesheet" href="/bom/Luckysheet/plugins/css/pluginsCss.css" />
   <link rel="stylesheet" href="/bom/Luckysheet/plugins/plugins.css" />
   <link rel="stylesheet" href="/bom/Luckysheet/css/luckysheet.css" />
   <link rel="stylesheet" href="/bom/Luckysheet/assets/iconfont/iconfont.css" />
   <script src="/bom/Luckysheet/plugins/js/plugin.js"></script>
-  <script src="/bom/Luckysheet/luckysheet.umd.js"></script>
+  <script src="/bom/Luckysheet/luckysheet.umd.js"></script> -->
 
   <!-- 本地开发使用路径 -->
 

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

@@ -194,6 +194,7 @@ const Component = (props: any) => {
           onChange={value => {
             onNodeConfigChange('is_start_node', value);
           }}
+          disabled={meta?.editMode == 2}
           options={[
             { label: '是', value: 1 },
             { label: '否', value: 0 },

+ 18 - 24
src/pages/PurchaseAdmin/PurchaseList/Detail/CompareModal.js

@@ -37,21 +37,30 @@ function CompareModal(props) {
     }
   };
 
-  const tabList = useMemo(() => {
+  const items = useMemo(() => {
     let list = {};
     versionList.forEach(version => {
       let nodeId = version.template_node_id;
-      if (!nodeId || nodeId === '0') return;
+      if (!nodeId || nodeId === '0' || !version.version_no) return;
       if (!list[nodeId]) {
         list[nodeId] = [];
       }
       list[nodeId].push(version);
     });
-    return Object.keys(list).map(nodeId => ({
-      name: flowDetail.nodes.find(node => node.Id == nodeId)?.label,
-      id: nodeId,
-      list: list[nodeId],
-    }));
+    let nodeIds = Object.keys(list)
+    return nodeIds.filter(nodeId => {
+      let name = flowDetail.nodes.find(node => node.Id == nodeId)?.label
+      return name
+    }).map(nodeId => ({
+      label: flowDetail.nodes.find(node => node.Id == nodeId)?.label,
+      key: nodeId + "",
+      // list: list[nodeId],
+      children: list[nodeId].map(version => (
+        <div style={{ marginBottom: 16 }} key={version.id}>
+          <Checkbox value={version.id}>{version.version_name}_{version.version_no}</Checkbox>
+        </div>
+      ))
+    }))
   }, [versionList, flowDetail]);
 
   return (
@@ -71,23 +80,8 @@ function CompareModal(props) {
             </Col>
           ))}
         </Row> */}
-        <Tabs>
-          {tabList.map(tab => (
-            <TabPane tab={tab.name} key={tab.id}>
-              {/* <Row gutter={24}>
-                {tab.list.map(version => (
-                  <Col span={24} key={version.id}>
-                  </Col>
-                ))}
-              </Row> */}
-              {tab.list.map(version => (
-                <div style={{ marginBottom: 16 }} key={version.id}>
-                  <Checkbox value={version.id}>{version.version_name}</Checkbox>
-                </div>
-              ))}
-            </TabPane>
-          ))}
-        </Tabs>
+        <Tabs defaultActiveKey={items[0]?.key} items={items} />
+
       </Checkbox.Group>
     </Modal>
   );

+ 6 - 2
src/pages/PurchaseAdmin/PurchaseList/Detail/ExportModal.js

@@ -44,11 +44,15 @@ function CompareModal(props) {
         obj.name = item.name;
         if (item.data && item.data[0]) {
           obj.list = item.data[0]?.filter(cur => cur);
+          obj.list.forEach(item => {
+            if(item.ct.t == "inlineStr") {
+              item.v = item.ct.s.map(s => s.v).join("")
+            }
+          })
         }
         obj.id = item.index;
         list.push(obj);
       });
-
       setCheckValue([]);
       setTabList(list);
       setActive(list[0]?.id);
@@ -79,7 +83,7 @@ function CompareModal(props) {
               <Row>
                 {tab.list.map(item => (
                   <Col span={8} key={item.m}>
-                    <Checkbox value={item.v}>{item.v}</Checkbox>
+                    <Checkbox value={item.cid}>{item.v}</Checkbox>
                   </Col>
                 ))}
               </Row>

+ 11 - 3
src/pages/PurchaseAdmin/PurchaseList/Detail/FlowModal.js

@@ -1,5 +1,5 @@
 import React, { useEffect, useState, useRef, useMemo, memo } from 'react';
-import { Modal, Input, Select, List, Row, Col, Table, message, Steps, Space, Button } from 'antd';
+import { Modal, Input, Select, List, Row, Col, Table, message, Steps, Space, Button, Popover } from 'antd';
 import Flow from '@/components/Flow/index';
 import { connect } from 'dva';
 import { GetTokenFromUrl, getToken } from '@/utils/utils';
@@ -210,6 +210,7 @@ function FlowModal(props) {
           if (!item.flow_id && item.isParent) return;
           let style = { color: getColor(item) };
           let txt = '';
+          let dom = '';
           switch (item.audit_status) {
             case 0:
               txt = '未提交';
@@ -228,10 +229,17 @@ function FlowModal(props) {
               break;
           }
           if (item.status == 1) txt = '已失效';
+
+          // 显示拒绝原因
+          if (item.audit_comment) {
+            dom = <Popover content={item.audit_comment} title="原因">{txt}</Popover>
+          } else {
+            dom = txt
+          }
           return item.audit_status != 0 ? (
-            <Button onClick={() => handleChangeClick(item)}>{txt}</Button>
+            <Button onClick={() => handleChangeClick(item)}>{dom}</Button>
           ) : (
-            <span style={style}>{txt}</span>
+            <span style={style}>{dom}</span>
           );
         },
       },

+ 8 - 2
src/pages/PurchaseAdmin/PurchaseList/Detail/LuckySheet.js

@@ -76,6 +76,7 @@ class LuckySheet extends React.Component {
       lang: 'zh',
       showinfobar: false,
       showstatisticBar: false,
+      // forceCalculation: true,
       hook: {
         cellMousedown: (cell, position, sheet) => {
           onClickCell && onClickCell(cell, position, sheet);
@@ -152,8 +153,12 @@ class LuckySheet extends React.Component {
         },
       ];
     }
+    
     this.luckysheet.destroy();
     this.luckysheet.create(option);
+    setTimeout(() => {
+      this.luckysheet.setCellFormat(0, 0, 'bg', "#fff");
+    }, 1000)
   }
 
   // componentDidUpdate(prevProps) {
@@ -278,7 +283,7 @@ class LuckySheet extends React.Component {
           }
         });
       });
-      // console.log(currentData);
+      console.log(currentData);
       this.renderSheet(currentData);
       // luckysheet.refresh()
     } else {
@@ -448,9 +453,10 @@ class LuckySheet extends React.Component {
       let data = sheet.data;
       let celldata = sheet.celldata;
       let colList = [];
+      debugger
       data[0]?.forEach((rowOneItem, colIdx) => {
         if (rowOneItem) {
-          if (!checkValue || checkValue.indexOf(rowOneItem.v) !== -1) {
+          if (!checkValue || checkValue.indexOf(rowOneItem.cid) !== -1) {
             colList.indexOf(colIdx) == -1 ? colList.push(colIdx) : true;
           }
         }

+ 17 - 25
src/pages/PurchaseAdmin/PurchaseList/Detail/MergeModal.js

@@ -26,21 +26,30 @@ function MergeModal(props) {
       setCheckValue();
     }
   };
-  const tabList = useMemo(() => {
+  const items = useMemo(() => {
     let list = {};
     versionList.forEach(version => {
       let nodeId = version.template_node_id;
-      if (!nodeId || nodeId === '0') return;
+      if (!nodeId || nodeId === '0' || !version.version_no) return;
       if (!list[nodeId]) {
         list[nodeId] = [];
       }
       list[nodeId].push(version);
     });
-    return Object.keys(list).map(nodeId => ({
-      name: flowDetail.nodes.find(node => node.Id == nodeId)?.label,
-      id: nodeId,
-      list: list[nodeId],
-    }));
+    let nodeIds = Object.keys(list)
+    return nodeIds.filter(nodeId => {
+      let name = flowDetail.nodes.find(node => node.Id == nodeId)?.label
+      return name
+    }).map(nodeId => ({
+      label: flowDetail.nodes.find(node => node.Id == nodeId)?.label,
+      key: nodeId + "",
+      // list: list[nodeId],
+      children: list[nodeId].map(version => (
+        <div style={{ marginBottom: 16 }} key={version.id}>
+          <Radio value={version.id}>{version.version_name}_{version.version_no}</Radio>
+        </div>
+      ))
+    }))
   }, [versionList, flowDetail]);
 
   return (
@@ -63,24 +72,7 @@ function MergeModal(props) {
             );
           })}
         </Row> */}
-        <Tabs>
-          {tabList.map(tab => (
-            <TabPane tab={tab.name} key={tab.id}>
-              {/* <Row>
-                {tab.list.map(version => (
-                  <Col span={8} key={version.id}>
-                    <Radio value={version.id}>{version.version_name}</Radio>
-                  </Col>
-                ))}
-              </Row> */}
-              {tab.list.map(version => (
-                <div style={{ marginBottom: 16 }} key={version.id}>
-                  <Radio value={version.id}>{version.version_name}</Radio>
-                </div>
-              ))}
-            </TabPane>
-          ))}
-        </Tabs>
+        <Tabs defaultActiveKey={items[0]?.key} items={items} />
       </Radio.Group>
     </Modal>
   );

+ 19 - 2
src/pages/PurchaseAdmin/PurchaseList/Flow/Audit.js

@@ -22,14 +22,29 @@ function Audit(props) {
     formData,
     flowDetail,
     simpleFlowDteail,
+    currentUser
   } = props;
   const ref = useRef();
+  const permission = currentUser.Permission
 
   const curItem = useMemo(() => {
     let item = localStorage.getItem('currentAudit');
     return JSON.stringify(currentItem) == '{}' ? JSON.parse(item) : currentItem;
   }, [currentItem, localStorage.getItem('currentAudit')]);
 
+  const editMode = useMemo(() => {
+    // 判断是否有权限
+    if(permission['func-01-point-bom-flow']) {
+      return 1
+    }
+    // 判断是否为创建者
+    if(flowDetail.Creator == currentUser.ID) {
+      return 1
+    }
+
+    return 2
+  },[permission,flowDetail])
+
   useEffect(() => {
     dispatch({
       type: 'flow/queryProcessFlows',
@@ -46,6 +61,7 @@ function Audit(props) {
       type: 'user/fetchDepV2',
     });
   }, []);
+  
   const onChange = values => {
     dispatch({
       type: 'xflow/save',
@@ -87,7 +103,7 @@ function Audit(props) {
           <AuditForm value={formData} onChange={values => onChange(values)} />
         </TabPane>
         <TabPane tab="流程控制" key="2">
-          <Flow meta={{ type: 'edit', flowId: curItem.id }} flowDetail={flowDetail} ref={ref} />
+          <Flow meta={{ type: 'edit', editMode, flowId: curItem.id }} flowDetail={flowDetail} ref={ref} />
         </TabPane>
       </Tabs>
       <Button
@@ -100,12 +116,13 @@ function Audit(props) {
     </div>
   );
 }
-export default connect(({ flow, loading, xflow }) => ({
+export default connect(({ flow, loading, user, xflow }) => ({
   roleList: flow.roleList,
   currentItem: flow.current,
   loading: loading.models.purchaseList2,
   formItems: xflow.formData,
   flowDetail: flow.flowDetail,
   formData: flow.formData,
+  currentUser: user.currentUser,
   simpleFlowDteail: flow.simpleFlowDteail,
 }))(Audit);

+ 5 - 2
src/pages/PurchaseAdmin/PurchaseList/Flow/FlowModal.js

@@ -36,9 +36,12 @@ function FlowModal(props) {
           <Input />
         </Form.Item>
         <Form.Item label="所属项目" name="project_id">
-          <Select>
+          <Select
+            showSearch
+            filterOption={(input, option) => option.children.join("").toLowerCase().includes(input.toLowerCase())}
+          >
             {projectList.map(item => (
-              <Option key={item.ID}>{item.Name}</Option>
+              <Option key={item.id}>{item.project_full_code}({item.project_name})</Option>
             ))}
           </Select>
         </Form.Item>

+ 5 - 1
src/pages/PurchaseAdmin/PurchaseList/Flow/List.js

@@ -17,7 +17,11 @@ function List(props) {
     },
     {
       title: '所属项目',
-      dataIndex: ['Project', 'Name'],
+      dataIndex: 'ProjectId',
+      render: projectId => {
+        let project = projectList.find(item => item.id == projectId)
+        if(project) return `${project.project_name}(${project.project_full_code})`
+      }
     },
     {
       title: '操作',

+ 4 - 1
src/pages/PurchaseAdmin/PurchaseList/Flow/models/flow.js

@@ -11,6 +11,9 @@ import {
   queryDepV2,
   queryProcessFlows,
 } from '@/services/boom';
+import {
+  queryApproval,
+} from '@/services/approval';
 import { queryRole } from '@/services/SysAdmin';
 import { queryProject } from '@/services/PurchaseList';
 import { message } from 'antd';
@@ -175,7 +178,7 @@ export default {
       });
     },
     *queryProject({ callback }, { call, put }) {
-      const response = yield call(queryProject);
+      const response = yield call(queryApproval,{pageSize: 99999});
       if (response) {
         yield put({
           type: 'save',

+ 12 - 2
src/pages/PurchaseAdmin/PurchaseList/List/NewList.js

@@ -24,13 +24,22 @@ function List(props) {
       width: '35%',
       render: item => item.version_name || item.name,
     },
+    // {
+    //   title: '所属项目',
+    //   width: '35%',
+    //   render: item => {
+    //     if (!item.is_parent) return '';
+    //     return project.list.find(p => p.ID == item.project_id)?.Name;
+    //   },
+    // },
     {
       title: '所属项目',
       width: '35%',
       render: item => {
         if (!item.is_parent) return '';
-        return project.list.find(p => p.ID == item.project_id)?.Name;
-      },
+        let p = project.list.find(p => p.id == item.project_id)
+        if(p) return `${p.project_name}(${p.project_full_code})`
+      }
     },
     {
       title: '操作',
@@ -58,6 +67,7 @@ function List(props) {
       },
     },
   ];
+  console.log(project)
   const queryList = page => {
     console.log(page);
     dispatch({

+ 4 - 1
src/pages/PurchaseAdmin/PurchaseList/List/models/newList.js

@@ -1,5 +1,8 @@
 import { queryProjectRecord } from '@/services/boom';
 import { queryProject } from '@/services/PurchaseList';
+import {
+  queryApproval,
+} from '@/services/approval';
 import { message } from 'antd';
 import { commitSheet, queryVersionsList, queryAuditExcel, queryAuditRecord } from '@/services/boom';
 
@@ -40,7 +43,7 @@ export default {
       });
     },
     *queryProject({ callback }, { call, put }) {
-      const response = yield call(queryProject);
+      const response = yield call(queryApproval,{pageSize: 99999});
       if (response) {
         yield put({
           type: 'save',

+ 17 - 17
src/pages/PurchaseAdmin/PurchaseList/WorkloadIndex.js

@@ -53,42 +53,42 @@ function LayoutDetail(props) {
               defaultSelectedKeys={[props.location.pathname]}
               style={{ lineHeight: '64px', width: '100%' }}
             >
-              <SubMenu key="/home/work-hours" title="工时管理">
-                <Menu.Item key="/home/work-hours">
-                  <Link to="/home/work-hours">上报工时</Link>
+              <SubMenu key="/workload/work-hours" title="工时管理">
+                <Menu.Item key="/workload/work-hours">
+                  <Link to="/workload/work-hours">上报工时</Link>
                 </Menu.Item>
-                <Menu.Item key="/home/work-hours-auth">
-                  <Link to="/home/work-hours-auth">审批工时</Link>
+                <Menu.Item key="/workload/work-hours-auth">
+                  <Link to="/workload/work-hours-auth">审批工时</Link>
                 </Menu.Item>
               </SubMenu>
 
-              <SubMenu key="/home/approval" title="项目立项">
-                <Menu.Item key="/home/approval/list">
-                  <Link to="/home/approval/list">项目列表</Link>
+              <SubMenu key="/workload/approval" title="项目立项">
+                <Menu.Item key="/workload/approval/list">
+                  <Link to="/workload/approval/list">项目列表</Link>
                 </Menu.Item>
-                <Menu.Item key="/home/approval/auth">
-                  <Link to="/home/approval/auth">审核列表</Link>
+                <Menu.Item key="/workload/approval/auth">
+                  <Link to="/workload/approval/auth">审核列表</Link>
                 </Menu.Item>
               </SubMenu>
 
               {checkReport(0) && (
-                <SubMenu key="/home/report" title="工时报表">
+                <SubMenu key="/workload/report" title="工时报表">
                   {/* <Menu.Item key="/home/report/resource">
                   <Link to="/home/report/resource">资源报表</Link>
                 </Menu.Item> */}
                   {checkReport(1) && (
-                    <Menu.Item key="/home/report/project">
-                      <Link to="/home/report/project">项目报表</Link>
+                    <Menu.Item key="/workload/report/project">
+                      <Link to="/workload/report/project">项目报表</Link>
                     </Menu.Item>
                   )}
                   {checkReport(2) && (
-                    <Menu.Item key="/home/report/department">
-                      <Link to="/home/report/department">部门报表</Link>
+                    <Menu.Item key="/workload/report/department">
+                      <Link to="/workload/report/department">部门报表</Link>
                     </Menu.Item>
                   )}
                   {checkReport(3) && (
-                    <Menu.Item key="/home/report/finance">
-                      <Link to="/home/report/finance">财务报表</Link>
+                    <Menu.Item key="/workload/report/finance">
+                      <Link to="/workload/report/finance">财务报表</Link>
                     </Menu.Item>
                   )}
                 </SubMenu>