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