From bb79260cbeeac88cfbadc9606eea57002e8945bc Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期四, 17 四月 2025 09:43:16 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/main' --- eims-ui/apps/web-antd/src/views/eims/spare-out/spare-out-drawer.vue | 122 +++++++++++++++++++++++++++++++++++++++- 1 files changed, 118 insertions(+), 4 deletions(-) diff --git a/eims-ui/apps/web-antd/src/views/eims/spare-out/spare-out-drawer.vue b/eims-ui/apps/web-antd/src/views/eims/spare-out/spare-out-drawer.vue index ebd82a4..8d4219c 100644 --- a/eims-ui/apps/web-antd/src/views/eims/spare-out/spare-out-drawer.vue +++ b/eims-ui/apps/web-antd/src/views/eims/spare-out/spare-out-drawer.vue @@ -1,18 +1,88 @@ <script setup lang="ts"> +import type { VxeGridProps } from '#/adapter/vxe-table'; + import { computed, ref } from 'vue'; -import { useVbenDrawer } from '@vben/common-ui'; +import { useVbenDrawer, useVbenModal } from '@vben/common-ui'; +import { DictEnum } from '@vben/constants'; import { $t } from '@vben/locales'; import { addFullName, cloneDeep, getPopupContainer } from '@vben/utils'; + +import { message } from 'ant-design-vue'; import { useVbenForm } from '#/adapter/form'; import { addSpareInout, getSpareInout, updateSpareInout } from '#/api/eims/spare-inout'; import { getDeptTree, userList } from '#/api/system/user'; +import { renderDict } from '#/utils/render'; +import CodeInput from '#/views/eims/components/code-input.vue'; +import spareModal from '#/views/eims/components/spare-modal.vue'; import { drawerSchema } from './data'; -import CodeInput from '#/views/eims/components/code-input.vue'; +import SelectSpareTable from './select-spare-table.vue'; const emit = defineEmits<{ reload: [] }>(); + +/** + * 鍑哄簱鍗曢�夋嫨鐨勫浠舵暟鎹� + */ +const outSpareList = ref([]); +const selectSpareTable = ref(); + +const outCol: VxeGridProps['columns'] = [ + { + field: 'action', + slots: { default: 'action' }, + title: '鍒犻櫎', + width: 60 + }, + { + title: '澶囦欢鍚嶇О', + field: 'name', + width: 180 + }, + { + title: '澶囦欢缂栫爜', + field: 'code', + width: 120 + }, + { + title: '澶囦欢鍨嬪彿', + field: 'modelNo', + width: 100 + }, + { + title: '璁¢噺鍗曚綅', + field: 'unit', + slots: { + default: ({ row }) => { + if (!row.unit || row.unit === '') { + return ''; + } + return renderDict(row.unit, DictEnum.EIMS_SPARE_UNIT); + } + }, + width: 80 + }, + + { + title: '瀹為檯搴撳瓨', + field: 'actualStock', + width: 100 + }, + { + title: '鏁伴噺', + field: 'quantity', + editRender: { + name: 'input' + }, + width: 80 + }, + { + title: '鍙傝�冧环', + field: 'referPrice', + width: 90 + } +]; const isUpdate = ref(false); const title = computed(() => { @@ -42,12 +112,18 @@ drawerApi.drawerLoading(true); const { id } = drawerApi.getData() as { id?: number | string }; isUpdate.value = !!id; + outSpareList.value = []; // 鍒濆鍖� await setupDeptSelect(); // 鏇存柊 && 璧嬪�� if (isUpdate.value && id) { const record = await getSpareInout(id); await formApi.setValues(record); + // 鏇存柊鍑哄簱鍗曠殑澶囦欢鏄庣粏 + outSpareList.value = record?.spareList; + if (isUpdate.value && record.chargeDept) { + await setupUserOptions(record.chargeDept); + } } drawerApi.drawerLoading(false); @@ -104,7 +180,7 @@ /** 鏍规嵁閮ㄩ棬ID鍔犺浇鐢ㄦ埛 */ await setupUserOptions(deptId); /** 鍙樺寲鍚庨渶瑕侀噸鏂伴�夋嫨鐢ㄦ埛 */ - formModel.operatorId = undefined; + formModel.chargeUser = undefined; }, placeholder: '璇烽�夋嫨', showSearch: true, @@ -120,6 +196,7 @@ } ]); } + async function handleConfirm() { try { drawerApi.drawerLoading(true); @@ -127,7 +204,15 @@ if (!valid) { return; } + const selectSpareList = selectSpareTable.value.tableData(); + // 妫�娴嬫槸鍚﹁緭鍏ュ嚭搴撴暟閲� + const eList = selectSpareList.filter((item: any) => !item.quantity || item.quantity <= 0 || item.quantity > item.actualStock); + if (selectSpareList.length<= 0 ||eList.length > 0) { + message.error('鍑哄簱鏁伴噺涓虹┖鎴栧ぇ浜庡簱瀛橈紝璇锋鏌ワ紒'); + return false; + } const data = cloneDeep(await formApi.getValues()); + data.spareList = selectSpareList; await (isUpdate.value ? updateSpareInout(data) : addSpareInout(data)); emit('reload'); await handleCancel(); @@ -142,14 +227,43 @@ drawerApi.close(); await formApi.resetForm(); } + +// 澶囦欢modal +const [SpareModal, spareModalApi] = useVbenModal({ + connectedComponent: spareModal, + draggable: true, + title: '閫夋嫨澶囦欢' +}); + +function handleSpareModal() { + spareModalApi.setData({}); + spareModalApi.open(); +} + +/** + * 閫夋嫨鐨勫浠� + * @param spareList + */ +function selectSpare(spareList: any) { + outSpareList.value = spareList; +} </script> <template> - <BasicDrawer :close-on-click-modal="false" :title="title" class="w-[600px]"> + <BasicDrawer :close-on-click-modal="false" :title="title" class="w-[1000px]"> <BasicForm> <template #orderCode="slotProps"> <CodeInput v-bind="slotProps" :disabled="isUpdate" prefix="CK" /> </template> + + <template #openSpare="slotProps"> + <a-button type="primary" v-bind="slotProps" :disabled="isUpdate" @click.stop="handleSpareModal">娣诲姞澶囦欢</a-button> + </template> + + <template #outSpareList> + <SelectSpareTable ref="selectSpareTable" :columns="outCol" :data="outSpareList" :is-update="isUpdate" /> + </template> </BasicForm> + <SpareModal class="w-[1200px]" @update-select="selectSpare" /> </BasicDrawer> </template> -- Gitblit v1.9.3