From 7bcfc0507043dc878c801a259aa7d058f4982551 Mon Sep 17 00:00:00 2001
From: Ben Lin <maobin001@msn.com>
Date: 星期四, 09 一月 2025 00:42:21 +0800
Subject: [PATCH] 工单管理优化

---
 src/views/tigerprojects/system/lowcode/normal/mainTable.vue |  351 +++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 309 insertions(+), 42 deletions(-)

diff --git a/src/views/tigerprojects/system/lowcode/normal/mainTable.vue b/src/views/tigerprojects/system/lowcode/normal/mainTable.vue
index d4e5502..290bd88 100644
--- a/src/views/tigerprojects/system/lowcode/normal/mainTable.vue
+++ b/src/views/tigerprojects/system/lowcode/normal/mainTable.vue
@@ -1,5 +1,15 @@
 <template>
   <div>
+    <Loading
+      :loading="compState.loading"
+      :absolute="compState.absolute"
+      :theme="compState.theme"
+      :background="compState.background"
+      :tip="compState.tip"
+    />
+    <div v-show="false">
+      <printTemplate />
+    </div>
     <BasicTable @register="registerTable">
       <template #toolbar>
         <!-- 鏍规嵁鑿滃崟璁剧疆鐨勬寜閽紝鑷姩鐢熸垚 -->
@@ -38,7 +48,7 @@
         @cancel="custCancel"
         :type="cType"
         :entityName="entityName"
-        @modalInner="getdtlSlots"
+        @modal-inner="getdtlSlots"
       >
         <!-- 鐢ㄦ彃妲借嚜瀹氫箟澶氳〃鍗� -->
         <template #[item.name] v-for="item in dtlSlots" :key="item.name">
@@ -66,17 +76,26 @@
       </CustModal>
     </Suspense>
     <normalDrawer @register="registerDrawer" @success="handleSuccess" />
+    <ImportExcelModal @register="registerImport" :title="ImportTitle" />
   </div>
 </template>
 <script lang="ts" setup>
-  import { Ref, inject, nextTick, onMounted, ref, unref, watch } from 'vue';
-  import { BasicTable, useTable, TableAction, BasicColumn, FormSchema } from '/@/components/Table';
+  import { Ref, inject, nextTick, onMounted, reactive, ref, unref, watch } from 'vue';
+  import {
+    BasicTable,
+    useTable,
+    TableAction,
+    BasicColumn,
+    FormSchema,
+    ActionItem,
+  } from '/@/components/Table';
   import { BasicForm, useForm } from '/@/components/Form/index';
   import { useDrawer } from '/@/components/Drawer';
   import GeneralModal from '/@/views/components/GeneralModal.vue';
   import normalDrawer from '../normalDrawer.vue';
   import CustModal from '/@/views/components/CustModal.vue';
   import RouteViewModal from '/@/views/components/RouteViewModal.vue';
+  import ImportExcelModal from '/@/views/components/ImportExcelModal.vue';
   import { FlowChartView } from '/@/components/FlowChart';
   import { isNullOrEmpty, isNullOrUnDef } from '/@/utils/is';
   import { useModal } from '/@/components/Modal';
@@ -87,11 +106,16 @@
   import { getRoleButtons } from '/@/api/sys/menu';
   import { useUserStore } from '/@/store/modules/user';
   import { useRouter } from 'vue-router';
-  import { GenerateActionButton, initRoute } from '../data';
+  import { afterFetchFn, GenerateActionButton, initRoute, SearchInfoFn } from '../data';
   import LogicFlow from '@logicflow/core';
   import { isFunction } from 'xe-utils';
   import { CustModalParams } from '/@/api/tigerapi/model/systemModel';
   import { useQueryStore } from '/@/store/modules/queryInpage';
+  import printJS, { Configuration } from 'print-js';
+  import printTemplate from '/@/views/components/printTemplate.vue';
+  import { Loading, useLoading } from '@/components/Loading';
+  import { useWoFlowcardStore } from '/@/store/modules/woflowcardprint';
+  import { storeToRefs } from 'pinia';
 
   const { t } = useI18n();
   const { currentRoute } = useRouter();
@@ -117,6 +141,9 @@
   const [registerRv, { openModal: openRvModal, closeModal: RvcloseModal }] = useModal();
   const [registerCust, { openModal: openCustModal }] = useModal();
   const [registerCrud, { openModal: openCrudModal }] = useModal();
+  const [registerImport, { openModal: openImportModal }] = useModal();
+  const useWoFlowCard = useWoFlowcardStore();
+  const { curPrintInfo } = storeToRefs(useWoFlowCard);
   const cType = ref('');
   const formSchemas = ref({}); //寮瑰嚭妗嗗琛ㄥ崟缁撴瀯
   const routeData = ref({
@@ -124,6 +151,142 @@
     edges: [],
   });
   const selectVals = ref({});
+  const printData = ref<any[]>([]);
+  const wokerorder = ref('');
+  const compState = reactive<{
+    absolute?: boolean;
+    loading?: boolean;
+    theme?: 'dark' | 'light';
+    background?: string;
+    tip?: string;
+  }>({
+    absolute: false,
+    loading: false,
+    theme: 'dark',
+    background: 'rgba(111,111,111,.7)',
+    tip: '鍔犺浇涓�...',
+  });
+  const [openFullLoading, closeFullLoading] = useLoading({
+    tip: '姝e湪鍔犺浇鎵撳嵃鏁版嵁...',
+  });
+
+  printData.value = [
+    {
+      id: '111',
+      Items: [
+        {
+          ID: 111,
+          SALES_ORDER: 'YDSO240400482',
+          ORDER_NO: 'YDRKD241000012',
+          WORK_ORDER: 'YDMOB241104737',
+          ITEM_CODE: '20100705.0102.00',
+          ITEM_NAME: 'YM-DEMS-BD11Q48 AC0-300V AC20mA 鐢佃兘1绾� ',
+          PLAN_QTY: 100,
+          SCAN_QTY: 50,
+          STATUS: 'Y',
+        },
+        {
+          ID: 112,
+          SALES_ORDER: 'YDSO240400483',
+          ORDER_NO: 'YDRKD241000013',
+          WORK_ORDER: 'YDMOB241104737',
+          ITEM_CODE: '20100705.0102.00',
+          ITEM_NAME: 'YM-DEMS-BD11Q48 AC0-300V AC20mA 鐢佃兘1绾� ',
+          PLAN_QTY: 100,
+          SCAN_QTY: 50,
+          STATUS: 'Y',
+        },
+        {
+          ID: 113,
+          SALES_ORDER: 'YDSO240400484',
+          ORDER_NO: 'YDRKD241000014',
+          WORK_ORDER: 'YDMOB241104737',
+          ITEM_CODE: '20100705.0102.00',
+          ITEM_NAME: 'YM-DEMS-BD11Q48 AC0-300V AC20mA 鐢佃兘1绾� ',
+          PLAN_QTY: 100,
+          SCAN_QTY: 50,
+          STATUS: 'Y',
+        },
+        {
+          ID: 114,
+          ORDER_NO: 'YDRKD241000015',
+          SALES_ORDER: 'YDSO240400485',
+          WORK_ORDER: 'YDMOB241104737',
+          ITEM_CODE: '20100705.0102.00',
+          ITEM_NAME: 'YM-DEMS-BD11Q48 AC0-300V AC20mA 鐢佃兘1绾� ',
+          PLAN_QTY: 100,
+          SCAN_QTY: 50,
+          STATUS: 'Y',
+        },
+        {
+          ID: 115,
+          ORDER_NO: 'YDRKD241000016',
+          SALES_ORDER: 'YDSO240400486',
+          WORK_ORDER: 'YDMOB241104737',
+          ITEM_CODE: '20100705.0102.00',
+          ITEM_NAME: 'YM-DEMS-BD11Q48 AC0-300V AC20mA 鐢佃兘1绾� ',
+          PLAN_QTY: 100,
+          SCAN_QTY: 50,
+          STATUS: 'Y',
+        },
+        {
+          ID: 116,
+          ORDER_NO: 'YDRKD241000017',
+          SALES_ORDER: 'YDSO240400487',
+          WORK_ORDER: 'YDMOB241104737',
+          ITEM_CODE: '20100705.0102.00',
+          ITEM_NAME: 'YM-DEMS-BD11Q48 AC0-300V AC20mA 鐢佃兘1绾� ',
+          PLAN_QTY: 100,
+          SCAN_QTY: 50,
+          STATUS: 'Y',
+        },
+        // {
+        //   ID: 116,
+        //   ORDER_NO: 'YDRKD241000018',
+        //   SALES_ORDER: 'YDSO240400488',
+        //   WORK_ORDER: 'YDMOB241104737',
+        //   ITEM_CODE: '20100705.0102.00',
+        //   ITEM_NAME: 'YM-DEMS-BD11Q48 AC0-300V AC20mA 鐢佃兘1绾� ',
+        //   PLAN_QTY: 100,
+        //   SCAN_QTY: 50,
+        //   STATUS: 'Y',
+        // },
+        // {
+        //   ID: 116,
+        //   ORDER_NO: 'YDRKD241000019',
+        //   SALES_ORDER: 'YDSO240400489',
+        //   WORK_ORDER: 'YDMOB241104737',
+        //   ITEM_CODE: '20100705.0102.00',
+        //   ITEM_NAME: 'YM-DEMS-BD11Q48 AC0-300V AC20mA 鐢佃兘1绾� ',
+        //   PLAN_QTY: 100,
+        //   SCAN_QTY: 50,
+        //   STATUS: 'Y',
+        // },
+        // {
+        //   ID: 116,
+        //   ORDER_NO: 'YDRKD241000020',
+        //   SALES_ORDER: 'YDSO240400490',
+        //   WORK_ORDER: 'YDMOB241104737',
+        //   ITEM_CODE: '20100705.0102.00',
+        //   ITEM_NAME: 'YM-DEMS-BD11Q48 AC0-300V AC20mA 鐢佃兘1绾� ',
+        //   PLAN_QTY: 100,
+        //   SCAN_QTY: 50,
+        //   STATUS: 'Y',
+        // },
+        // {
+        //   ID: 116,
+        //   ORDER_NO: 'YDRKD241000021',
+        //   SALES_ORDER: 'YDSO240400491',
+        //   WORK_ORDER: 'YDMOB241104737',
+        //   ITEM_CODE: '20100705.0102.00',
+        //   ITEM_NAME: 'YM-DEMS-BD11Q48 AC0-300V AC20mA 鐢佃兘1绾� ',
+        //   PLAN_QTY: 100,
+        //   SCAN_QTY: 50,
+        //   STATUS: 'Y',
+        // },
+      ],
+    },
+  ];
   const custImport = ref<any[]>([]);
   const EntityCustFunction = ref([
     {
@@ -138,7 +301,9 @@
   /* 鍔ㄦ�乮mport瀹炰綋鍚�.ts鐨勮嚜瀹氫箟鏂规硶 */
   try {
     custImport.value = await import(`../entityts/${objParams.value['ID']}.ts`);
-  } catch (e) {}
+  } catch (e) {
+    console.log(e);
+  }
   const [
     {
       ActionItem: nActionItem,
@@ -149,6 +314,7 @@
       OpenSelectItem: OpenSelectCust,
       GetSelectSuccess,
       CustFunc,
+      GetTitle,
     },
     ActionColumn,
   ] = isNullOrUnDef(custImport.value['default'])
@@ -159,6 +325,7 @@
     ? {}
     : KeyFieldValues(objParams.value['CODE'], objParams.value['ID']);
   const dtlSlots = ref<any[]>([]);
+  const ImportTitle = GetTitle && isFunction(GetTitle) ? ref(GetTitle().importTitle) : ref('');
   const useformdata = GetUseForm && isFunction(GetUseForm) ? GetUseForm() : {};
   const useFormData = ref<any>(useformdata);
   /* 鑷畾涔夋ā鎬佺獥鍙d腑琛ㄥ崟涓彃妲芥覆鏌撴寜閽墦寮�妯℃�佹useModal鏂规硶 */
@@ -186,15 +353,16 @@
               CurOrg: useUserStore().getUserInfo.orgCode,
             }
           : '',
+      NeedInclude: true,
     },
-    beforeFetch: SearchInfoFn,
-    afterFetch: afterFetchFn,
+    beforeFetch: (t) => SearchInfoFn(t, route.name, AuthOption.value['BY_ORG'] == 'Y'),
+    afterFetch: afterFetch,
     columns: _columns as unknown as BasicColumn[],
     formConfig: {
       labelWidth: 140,
       schemas: _searchFormSchema as unknown as FormSchema[],
       submitFunc: () => Search(), //鑷畾涔夋煡璇㈡彁浜ゆ寜閽殑鏂规硶锛岃Е鍙戞煡璇㈡彁浜や簨浠�
-      resetFunc: () => useQuery.resetFunc(route.name, getForm()),
+      resetFunc: () => useQuery.resetFunc(route.name, getForm(), AuthOption.value['BY_ORG'] == 'Y'),
     },
     useSearchForm: true,
     showTableSetting: true,
@@ -259,31 +427,9 @@
    * @return {*}
    */
   async function Search() {
-    useQuery.submitFunc(route.name, getForm()).then(() => {
+    useQuery.submitFunc(route.name, getForm(), AuthOption.value['BY_ORG'] == 'Y').then(() => {
       reload();
     });
-  }
-
-  /**
-   * @description: 璋冪敤api鍓嶏紝鍙傛暟鏁寸悊
-   * @param {*} t
-   * @return {*}
-   */
-  function SearchInfoFn(t) {
-    if (
-      !isNullOrUnDef(useQuery.getCurSearchInfo) &&
-      useQuery.getCurSearchInfo.some((q) => q.name == route.name)
-    ) {
-      const curSearchInfo = useQuery.getCurSearchInfo.filter((q) => q.name == route.name);
-      const Keys = Object.getOwnPropertyNames(curSearchInfo[0].searchInfo);
-      for (const k in Keys) {
-        if (Keys[k] != 'page' && Keys[k] != 'pageSize') {
-          t[Keys[k]] = curSearchInfo[0].searchInfo[Keys[k]];
-        }
-      }
-      useQuery.setCurSearchInfo({ name: route.name, searchInfo: t });
-    }
-    return t;
   }
 
   /**
@@ -291,14 +437,8 @@
    * @param {*} t
    * @return {*}
    */
-  function afterFetchFn(t) {
-    if (
-      !isNullOrUnDef(useQuery.getCurSearchInfo) &&
-      useQuery.getCurSearchInfo.some((q) => q.name == route.name)
-    ) {
-      const curSearchInfo = useQuery.getCurSearchInfo.filter((q) => q.name == route.name);
-      getForm().setFieldsValue(curSearchInfo[0].searchInfo);
-    }
+  function afterFetch(t) {
+    afterFetchFn(t, route.name, getForm());
   }
 
   const currlf = ref(null) as Ref<LogicFlow | null>;
@@ -337,7 +477,17 @@
     };
 
     /* 鏍规嵁鑿滃崟璁剧疆鐨勬寜閽嚜鍔ㄧ敓鎴愭搷浣滃垪涓殑鎸夐挳 */
-    const actionItem = GenerateActionButton(params, buttons, openDrawer, reload);
+    const _actionItem: ActionItem[] = [];
+    const actionItem = GenerateActionButton(params, buttons, openDrawer, reload, _actionItem);
+    let _btn = buttons.value.filter((q) => q['BUTTON_TYPE'] == 1 && q['DO_METHOD'] == 'ToPrint');
+    if (_btn.length > 0) {
+      _actionItem.push({
+        icon: isNullOrEmpty(_btn[0]['ICON_URL']) ? '' : _btn[0]['ICON_URL'],
+        tooltip: '鎵撳嵃',
+        onClick: ToPrint.bind(null, params),
+        name: _btn[0]['DO_METHOD'],
+      });
+    }
     if (isNullOrUnDef(custImport.value['default'])) {
       return actionItem;
     }
@@ -371,7 +521,7 @@
   }
 
   /**
-   * @description: 鑾峰彇鏂板鎸夐挳鐨勮涓�
+   * @description: 鑾峰彇宸ュ叿鏍忎腑鎸夐挳鐨勮涓�
    * @return {*}
    */
   function handleCreate(fnName: string) {
@@ -388,7 +538,7 @@
     } else {
       /* 濡傛灉鍔ㄦ�佸姞杞界殑瀹炰綋绫�.ts瀛樺湪锛屾牴鎹�.ts鏂囦欢涓殑鏂规硶鏉ユ墽琛屾搷浣� */
       const [{ CreateAction }] = custImport.value['default']();
-      const result = CreateAction(entityName.value, colSlots.value);
+      const result = CreateAction(entityName.value, fnName);
       switch (result.action) {
         case 'go' /* 璺宠浆椤甸潰 */:
           // 灏嗗璞¤浆鎹负JSON瀛楃涓插苟淇濆瓨鍒皊essionStorage
@@ -409,6 +559,12 @@
             isExistSql: isExistSql.value, //鏄惁瀛樺湪妫�鏌ql锛屾瘮濡�: XXX_CODE = '12345'
             ifSave: true, //鏄惁鎻愪氦琛ㄥ崟鏃朵繚瀛樺埌鏁版嵁搴擄紝鍚�-鏆傚瓨|鏄�-淇濆瓨
           });
+          break;
+        case 'importModal' /* 鎵撳紑瀵煎叆Excel妯℃�佺獥鍙� */:
+          openImportModal(true, result.params);
+          break;
+        case 'ToPrint':
+          ToPrint({});
           break;
       }
     }
@@ -572,4 +728,115 @@
   function RvItemSuccess(d, u) {
     RvcloseModal();
   }
+
+  function ToPrint(params: {}) {
+    openFullLoading();
+    useWoFlowCard.getWoPickList(params['record']['ORDER_NO']).then((res) => {
+      const _style = `
+      #print-area {
+        position: absolute;
+        inset: 0;
+        background-color: #fff;
+
+        .item {
+          display: flex;
+          flex-direction: column;
+          height: 100%;
+          margin-right: 10px;
+          margin-left: 10px;
+          font-family: SimSun, "瀹嬩綋", serif;
+          page-break-after: always;
+
+          .head {
+          z-index: 1;
+          width: 100%;
+          background-color: azure;
+          font-size: 20px;
+          font-weight: bold;
+          line-height: 100px;
+          text-align: center;
+        }
+
+          .main {
+            display: flex;
+            flex: 1;
+            justify-content: center;
+            margin-top: 10px;
+            padding: 15px;
+            
+            table {
+              border-collapse: collapse;
+              width: 100%;
+            }
+
+            table,
+            th,
+            td {
+              border: solid 1px black;
+            }
+
+            tr > th {
+              height: 60px;
+            }
+            .instore_td {
+              border: 1px solid #000;
+              font-size: 12px;
+              line-height: 16px;
+              text-align: center;
+              word-break: break-all;
+            }
+            
+            .instore_td2 {
+              height: 60px;
+              border: 1px solid #000;
+              font-family: SimSun, "瀹嬩綋", serif;
+              font-size: 12px; /* 淇敼涓轰綘鎯宠鐨勫瓧浣撳ぇ灏� */
+              line-height: 20px;
+              text-align: center;
+              word-break: break-all;
+            }
+
+            .material_table_td {
+              border: 1px solid #000;
+              font-size: 12px; 
+              height: 25px;
+              line-height: 18px;
+              text-align: center;
+              word-break: break-all;
+            }
+          }
+
+          .footer {
+            display: flex;
+            margin-bottom: 15px;
+            background-color: #eee;
+            font-size: 12px;
+            line-height: 21px;
+            text-align: center;
+          }
+        }
+        .line {
+          width: 100px; /* 绾挎潯鐨勯暱搴� */
+          height: 0;
+          margin: 10px; /* 绾挎潯涓庡叾浠栧厓绱犵殑璺濈 */
+          border-top: 1px solid black; /* 绾挎潯鐨勯鑹插拰瀹藉害 */
+        }
+      }`;
+
+      printJS({
+        // 闇�瑕佹墦鍗板尯鍩熻缃殑Id
+        printable: 'print-area',
+        // 鎵撳嵃绫诲瀷
+        type: 'html',
+        // 榛樿鍊间负800锛屾垜浠妸鎶婅缃负100%
+        maxWidth: '100%',
+        // *浠h〃搴旂敤鎵�鏈夋牱寮忥紝榛樿鍊间负null锛屽鏋滀笉璁剧疆锛屾墦鍗扮獥鍙e垯浼氬拷鐣ユ墍鏈夋牱寮�
+        targetStyles: ['*'],
+        // font_size: '9pt',
+        scanStyles: false,
+        style: `@page {size: auto; margin: 0mm;} html, ${_style}`,
+      } as unknown as Configuration);
+      closeFullLoading();
+    });
+  }
 </script>

--
Gitblit v1.9.3