From 1a6b21ea00a80d09eafa8f624a478a48ac520a60 Mon Sep 17 00:00:00 2001 From: hwj Date: Wed, 17 Jun 2026 09:31:38 +0800 Subject: [PATCH 1/7] =?UTF-8?q?feat=EF=BC=9A=E5=87=BA=E5=85=A5=E5=BA=93?= =?UTF-8?q?=E5=8D=95=E6=8D=AE-=E7=8A=B6=E6=80=81=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E5=B7=B2=E5=87=BA=E5=BA=93/=E5=B7=B2?= =?UTF-8?q?=E5=85=A5=E5=BA=93=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/erp/stock/in/index.ts | 31 +++++++++++++++++++++++++++++-- src/api/erp/stock/out/index.ts | 31 +++++++++++++++++++++++++++++-- src/views/erp/stock/in/index.vue | 10 +++++++--- src/views/erp/stock/out/index.vue | 9 +++++++-- 4 files changed, 72 insertions(+), 9 deletions(-) diff --git a/src/api/erp/stock/in/index.ts b/src/api/erp/stock/in/index.ts index 8af08078..edff0500 100644 --- a/src/api/erp/stock/in/index.ts +++ b/src/api/erp/stock/in/index.ts @@ -1,4 +1,21 @@ import request from '@/config/axios' +import qs from 'qs' + +const normalizeStockQueryParams = (params: any) => { + if (!params) return params + const nextParams = { ...params } + if (Array.isArray(nextParams.statusList)) { + if (nextParams.statusList.length) { + nextParams.statusList = nextParams.statusList.join(',') + } else { + delete nextParams.statusList + } + } + return nextParams +} + +const stockQueryParamsSerializer = (params: any) => + qs.stringify(params, { allowDots: true, arrayFormat: 'repeat' }) // ERP 其它入库单 VO export interface StockInVO { @@ -32,7 +49,12 @@ export interface StockInApproveRecordVO { export const StockInApi = { // 查询其它入库单分页 getStockInPage: async (params: any) => { - return await request.get({ url: `/erp/stock-in/page`, params }) + const finalParams = normalizeStockQueryParams(params) + return await request.get({ + url: `/erp/stock-in/page`, + params: finalParams, + paramsSerializer: stockQueryParamsSerializer + }) }, // 查询其它入库单详情 @@ -88,7 +110,12 @@ export const StockInApi = { // 导出其它入库单 Excel exportStockIn: async (params) => { - return await request.download({ url: `/erp/stock-in/export-excel`, params }) + const finalParams = normalizeStockQueryParams(params) + return await request.download({ + url: `/erp/stock-in/export-excel`, + params: finalParams, + paramsSerializer: stockQueryParamsSerializer + }) }, // 查询生产入库单分页 diff --git a/src/api/erp/stock/out/index.ts b/src/api/erp/stock/out/index.ts index cc54ea20..76e2902f 100644 --- a/src/api/erp/stock/out/index.ts +++ b/src/api/erp/stock/out/index.ts @@ -1,4 +1,21 @@ import request from '@/config/axios' +import qs from 'qs' + +const normalizeStockQueryParams = (params: any) => { + if (!params) return params + const nextParams = { ...params } + if (Array.isArray(nextParams.statusList)) { + if (nextParams.statusList.length) { + nextParams.statusList = nextParams.statusList.join(',') + } else { + delete nextParams.statusList + } + } + return nextParams +} + +const stockQueryParamsSerializer = (params: any) => + qs.stringify(params, { allowDots: true, arrayFormat: 'repeat' }) // ERP 其它出库单 VO export interface StockOutVO { @@ -32,7 +49,12 @@ export interface StockOutApproveRecordVO { export const StockOutApi = { // 查询其它出库单分页 getStockOutPage: async (params: any) => { - return await request.get({ url: `/erp/stock-out/page`, params }) + const finalParams = normalizeStockQueryParams(params) + return await request.get({ + url: `/erp/stock-out/page`, + params: finalParams, + paramsSerializer: stockQueryParamsSerializer + }) }, // 查询其它出库单详情 @@ -85,7 +107,12 @@ export const StockOutApi = { // 导出其它出库单 Excel exportStockOut: async (params) => { - return await request.download({ url: `/erp/stock-out/export-excel`, params }) + const finalParams = normalizeStockQueryParams(params) + return await request.download({ + url: `/erp/stock-out/export-excel`, + params: finalParams, + paramsSerializer: stockQueryParamsSerializer + }) }, // 查询其它出库单分页 getMesStockOutPage: async (params: any) => { diff --git a/src/views/erp/stock/in/index.vue b/src/views/erp/stock/in/index.vue index f384778c..e8ff9bef 100644 --- a/src/views/erp/stock/in/index.vue +++ b/src/views/erp/stock/in/index.vue @@ -78,11 +78,14 @@ /> - + { /** 重置按钮操作 */ const resetQuery = () => { queryFormRef.value.resetFields() + queryParams.statusList = [] queryParams.inType = activeName.value || stockInTypeOptions.value[0]?.value handleQuery() } diff --git a/src/views/erp/stock/out/index.vue b/src/views/erp/stock/out/index.vue index f98d00b5..5c8e5d24 100644 --- a/src/views/erp/stock/out/index.vue +++ b/src/views/erp/stock/out/index.vue @@ -78,11 +78,14 @@ /> - + { /** 閲嶇疆鎸夐挳鎿嶄綔 */ const resetQuery = () => { queryFormRef.value.resetFields() + queryParams.statusList = [] queryParams.outType = activeName.value || stockOutTypeOptions.value[0]?.value handleQuery() } From f144dc8fc85d50518e45b7b22734bed894d5c3be Mon Sep 17 00:00:00 2001 From: hwj Date: Wed, 17 Jun 2026 09:32:16 +0800 Subject: [PATCH 2/7] =?UTF-8?q?feat=EF=BC=9A=E5=87=BA=E5=85=A5=E5=BA=93?= =?UTF-8?q?=E6=98=8E=E7=BB=86/=E5=BA=93=E5=AD=98=E6=9F=A5=E8=AF=A2-?= =?UTF-8?q?=E6=81=A2=E5=A4=8Dtabs=E6=A0=8F=E5=88=86=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/erp/stock/record/index.vue | 31 +++++++++++++--------- src/views/erp/stock/stock/index.vue | 39 ++++++++++++++-------------- 2 files changed, 38 insertions(+), 32 deletions(-) diff --git a/src/views/erp/stock/record/index.vue b/src/views/erp/stock/record/index.vue index fb24253a..85776be5 100644 --- a/src/views/erp/stock/record/index.vue +++ b/src/views/erp/stock/record/index.vue @@ -16,12 +16,6 @@ - - - - - @@ -66,6 +60,15 @@ + + + + @@ -83,12 +86,6 @@ sortable /> - - - { showAllFilters.value = !showAllFilters.value @@ -229,6 +227,15 @@ const handleQuery = () => { /** 重置按钮操作 */ const resetQuery = () => { queryFormRef.value.resetFields() + activeName.value = '' + queryParams.categoryType = undefined + handleQuery() +} + +const handleTabClick = (tab: any) => { + const value = String(tab.paneName || '') + activeName.value = value + queryParams.categoryType = value ? Number(value) : undefined handleQuery() } diff --git a/src/views/erp/stock/stock/index.vue b/src/views/erp/stock/stock/index.vue index 1c7a16e6..cf131c6c 100644 --- a/src/views/erp/stock/stock/index.vue +++ b/src/views/erp/stock/stock/index.vue @@ -27,21 +27,6 @@ - - - - - + + + + - - - @@ -188,6 +177,7 @@ const queryParams = reactive<{ }) const queryFormRef = ref() // 搜索的表单 const exportLoading = ref(false) // 导出的加载中 +const activeName = ref('') const productList = ref([]) // 产品列表 const warehouseList = ref([]) // 仓库列表 const categoryTypeOptions = computed(() => getIntDictOptions(DICT_TYPE.MATERIAL_CLASSIFICATION_TYPE)) @@ -256,6 +246,15 @@ const handleQuery = () => { /** 重置按钮操作 */ const resetQuery = () => { queryFormRef.value.resetFields() + activeName.value = '' + queryParams.categoryType = undefined + handleQuery() +} + +const handleTabClick = (tab: any) => { + const value = String(tab.paneName || '') + activeName.value = value + queryParams.categoryType = value ? Number(value) : undefined handleQuery() } From 0f1bb51d5ef65f420b714f063efcdc25c4a9139b Mon Sep 17 00:00:00 2001 From: hwj Date: Wed, 17 Jun 2026 10:30:19 +0800 Subject: [PATCH 3/7] =?UTF-8?q?style=EF=BC=9A=E6=A8=A1=E5=85=B7=E7=BB=84-?= =?UTF-8?q?=E7=BB=B4=E4=BF=AE=E8=AE=B0=E5=BD=95=E5=AD=97=E6=AE=B5=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/erp/mold/detail/brand.vue | 310 +++++++++++++++++++++++++--- 1 file changed, 276 insertions(+), 34 deletions(-) diff --git a/src/views/erp/mold/detail/brand.vue b/src/views/erp/mold/detail/brand.vue index d5a08226..49cd7e53 100644 --- a/src/views/erp/mold/detail/brand.vue +++ b/src/views/erp/mold/detail/brand.vue @@ -157,7 +157,12 @@ - +
-
-
{{ t('MoldManagement.MoldBrandDetail.moldCode') }}{{ row.moldCode ?? '-' }}
-
{{ t('MoldManagement.MoldBrandDetail.repairStatus') }}{{ - getRepairStatusLabel(row.status) }}
-
{{ t('EquipmentManagement.DvRepair.repairStatus') }} +
+
基本信息
+
{{ t('MoldManagement.MoldBrandDetail.repairCode') }}{{ row.repairCode ?? '-' }}
+
{{ t('MoldManagement.MoldRepair.repairName') }}{{ row.repairName ?? '-' }}
+
{{ t('MoldManagement.MoldBrandDetail.requireDate') }}{{ formatHistoryTime(row.requireDate) }}
+
{{ t('MoldManagement.MoldRepair.repairUser') }}{{ row.acceptedByName ?? row.acceptedName ?? row.acceptedBy ?? '-' }}
+
{{ t('MoldManagement.MoldRepair.confirmUser') }}{{ row.confirmByName ?? row.confirmName ?? row.confirmBy ?? '-' }}
+
{{ t('MoldManagement.MoldBrandDetail.repairStatus') }}{{ + getRepairStatusLabel(row.status) }}
+
{{ t('EquipmentManagement.DvRepair.repairStatus') }}{{ getRepairResultLabel(row.repairStatus) }}
-
{{ t('MoldManagement.MoldBrandDetail.requireDate') }}{{ formatHistoryTime(row.requireDate) }}
-
{{ t('MoldManagement.MoldBrandDetail.finishDate') }}{{ formatHistoryTime(row.finishDate) }}
-
{{ t('MoldManagement.MoldRepair.faultImages') }} -
- +
+
维修对象
+
{{ t('MoldManagement.MoldRepair.moldName') }}{{ row.moldName ?? row.machineryName ?? '-' }}
+
{{ t('MoldManagement.MoldBrandDetail.moldCode') }}{{ row.moldCode ?? row.machineryCode ?? '-' }}
+
规格型号{{ row.machinerySpec ?? row.moldSpec ?? '-' }}
+
品牌{{ row.machineryBrand ?? row.moldBrand ?? '-' }}
+
+
+
故障信息
+
{{ t('MoldManagement.MoldRepair.faultLevel') }} + -
-
-
-
+ - +
+
{{ t('MoldManagement.MoldRepair.isShutdown') }}{{ formatBooleanLabel(row.shutdown ?? row.isShutdown) }}
+
{{ t('MoldManagement.MoldRepair.faultPhenomenon') }}{{ row.faultPhenomenon ?? '-' }}
+
{{ t('MoldManagement.MoldRepair.faultDescription') }}{{ row.faultDescription ?? '-' }}
+
{{ t('MoldManagement.MoldRepair.faultImages') }} +
+ +
+
-
+
+
{{ t('MoldManagement.MoldBrandDetail.remark') }}{{ row.remark ?? '-' }}
+
+
+
+
+ 处理结果 + + {{ isRepairResultExpanded(row) ? '收起' : '展开' }} + +
+
+
{{ t('MoldManagement.MoldRepair.repairResult') }}{{ + getRepairResultLabel(row.repairStatus) }}
+
{{ t('MoldManagement.MoldBrandDetail.finishDate') }}{{ formatHistoryTime(row.finishDate) }}
+
{{ t('MoldManagement.MoldRepair.confirmDate') }}{{ formatHistoryTime(row.confirmDate) }}
+
{{ t('MoldManagement.MoldRepair.downtimeDuration') }}{{ formatDowntimeDuration(row.downtimeDuration) }}
+
{{ t('MoldManagement.MoldRepair.faultReason') }}{{ row.faultReason ?? '-' }}
+
{{ t('MoldManagement.MoldRepair.handlingMeasures') }}{{ row.handlingMeasures ?? '-' }}
+
{{ t('MoldManagement.MoldRepair.replacementParts') }}{{ row.replacementParts ?? '-' }}
+
{{ t('MoldManagement.MoldRepair.repairContent') }}{{ row.repairContent ?? '-' }}
+
{{ t('MoldManagement.MoldRepair.repairedImages') }} +
+ +
+
-
+
+
@@ -443,6 +549,7 @@ const installDateRange = ref() const installOperateType = ref() const moldList = ref([]) const repairActiveNames = ref([]) +const repairResultActiveNames = ref([]) const inspectionDateRange = ref() const maintainDateRange = ref() const repairDateRange = ref() @@ -485,6 +592,36 @@ const formatHistoryTime = (value: any) => { return String(raw) } +const formatBooleanLabel = (value: any) => { + if (value === undefined || value === null || value === '') return '-' + if (value === true || value === 1 || value === '1' || value === 'true') return t('common.yes') + if (value === false || value === 0 || value === '0' || value === 'false') return t('common.no') + return String(value) +} + +const formatDowntimeDuration = (value: any) => { + if (value === undefined || value === null || value === '') return '-' + return `${value}小时` +} + +const shouldShowRepairResult = (row: any) => { + const value = row?.repairStatus ?? row?.repairResult + const status = value === undefined || value === null || value === '' ? '0' : String(value) + return status !== '0' +} + +const getRepairRowKey = (row: any) => String(row?.id ?? row?.repairCode ?? '') + +const isRepairResultExpanded = (row: any) => repairResultActiveNames.value.includes(getRepairRowKey(row)) + +const toggleRepairResult = (row: any) => { + const key = getRepairRowKey(row) + if (!key) return + repairResultActiveNames.value = isRepairResultExpanded(row) + ? repairResultActiveNames.value.filter((item) => item !== key) + : [...repairResultActiveNames.value, key] +} + const parseImages = (value: any): string[] => { if (!value) return [] if (Array.isArray(value)) return value.map(String).filter(Boolean) @@ -782,6 +919,7 @@ const fetchRepairHistory = async () => { const data = await MoldRepairApi.getMoldRepairList(params) repairList.value = Array.isArray(data) ? data : [] repairActiveNames.value = repairList.value.map((row: any) => String(row.id ?? row.repairCode)) + repairResultActiveNames.value = [] } finally { repairLoading.value = false } @@ -1092,6 +1230,39 @@ onMounted(() => { margin-top: 10px; } +.device-ledger-repair-collapse { + border-top: 0; + border-bottom: 0; +} + +.device-ledger-repair-collapse :deep(.device-ledger-repair-collapse-item) { + overflow: hidden; + margin-bottom: 14px; + border: 1px solid var(--el-border-color-lighter); + border-radius: 10px; + background: #fff; + box-shadow: 0 2px 8px rgb(31 45 61 / 6%); +} + +.device-ledger-repair-collapse :deep(.device-ledger-repair-collapse-item:nth-child(even)) { + background: #fbfdff; +} + +.device-ledger-repair-collapse :deep(.device-ledger-repair-collapse-item:last-child) { + margin-bottom: 0; +} + +.device-ledger-repair-collapse :deep(.device-ledger-repair-collapse-item .el-collapse-item__header) { + height: 46px; + padding: 0 14px; + border-bottom-color: var(--el-border-color-lighter); + +} + +.device-ledger-repair-collapse :deep(.device-ledger-repair-collapse-item .el-collapse-item__content) { + padding: 14px; +} + .device-ledger-history-title, .device-ledger-repair-title { display: flex; @@ -1117,6 +1288,24 @@ onMounted(() => { border-radius: 12px; } +.device-ledger-repair-collapse .device-ledger-history-item { + position: relative; + padding: 16px; + border-color: var(--el-border-color); + background: #fff; +} + +.device-ledger-repair-collapse .device-ledger-history-item::before { + position: absolute; + top: 16px; + bottom: 16px; + left: 0; + width: 4px; + border-radius: 0 4px 4px 0; + background: var(--el-color-primary); + content: ''; +} + .device-ledger-history-item-head { display: flex; align-items: center; @@ -1129,6 +1318,50 @@ onMounted(() => { gap: 8px; } +.device-ledger-repair-overview { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 12px; +} + +.device-ledger-repair-overview > .device-ledger-history-item-body { + padding: 12px; + border: 1px solid var(--el-border-color-lighter); + border-radius: 8px; + background: var(--el-fill-color-lighter); +} + +.device-ledger-repair-overview .device-ledger-history-item-row, +.device-ledger-repair-result .device-ledger-history-item-row { + grid-template-columns: 128px minmax(0, 1fr); +} + +.device-ledger-repair-result { + margin-top: 14px; + padding: 12px; + border: 1px solid var(--el-border-color-lighter); + border-radius: 8px; + background: var(--el-fill-color-lighter); +} + +.device-ledger-repair-result-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; +} + +.device-ledger-repair-section-title { + margin-top: 4px; + padding-bottom: 2px; + font-weight: 600; + color: var(--el-text-color-primary); +} + +.device-ledger-repair-section-title:first-child { + margin-top: 0; +} + .device-ledger-history-item-row { display: grid; grid-template-columns: 88px minmax(0, 1fr); @@ -1143,6 +1376,11 @@ onMounted(() => { color: var(--el-text-color-secondary); } +.device-ledger-history-item-value { + min-width: 0; + word-break: break-word; +} + .device-ledger-repair-images { display: flex; flex-wrap: wrap; @@ -1192,5 +1430,9 @@ onMounted(() => { .mold-brand-detail__grid { grid-template-columns: 1fr; } + + .device-ledger-repair-overview { + grid-template-columns: 1fr; + } } From c01cbad539bd8c4e650633ead9957d3a3c0241b6 Mon Sep 17 00:00:00 2001 From: ck-chenkang Date: Wed, 17 Jun 2026 10:44:34 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E7=BB=B4=E4=BF=AE=E5=B1=A5=E5=8E=86?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E6=94=B9=E6=88=90=E5=92=8C=E5=85=B6=E4=BB=96?= =?UTF-8?q?=E5=B1=A5=E5=8E=86=E4=B8=80=E6=A0=B7=EF=BC=8C=E9=80=82=E9=85=8D?= =?UTF-8?q?=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/mes/deviceledger/detail/index.vue | 197 ++++++++++++-------- 1 file changed, 116 insertions(+), 81 deletions(-) diff --git a/src/views/mes/deviceledger/detail/index.vue b/src/views/mes/deviceledger/detail/index.vue index e28e03a8..29df7293 100644 --- a/src/views/mes/deviceledger/detail/index.vue +++ b/src/views/mes/deviceledger/detail/index.vue @@ -317,34 +317,54 @@ {{ t('action.export') }}
- - - + + + + + + @@ -731,6 +773,10 @@ type RepairHistoryRow = { repairId?: any repairCode?: any repairName?: any + acceptedBy?: any + confirmBy?: any + creator?: any + creatorName?: any subjectId?: any subjectCode?: any subjectName?: any @@ -739,41 +785,43 @@ type RepairHistoryRow = { malfunction?: any malfunctionUrl?: any repairDes?: any + faultPhenomenon?: any + faultDescription?: any + faultImages?: any + handlingMeasures?: any + replacementParts?: any + repairContent?: any + repairedImages?: any remark?: any createTime?: any finishDate?: any result?: any repairResult?: any - malfunctionImages?: string[] } -type RepairHistoryGroup = { key: string; name: string; items: RepairHistoryRow[] } +type RepairHistoryStepRow = RepairHistoryRow & { + key: string + time: string + operator: string + faultImageList: string[] + repairedImageList: string[] +} -const repairActiveNames = ref([]) const repairList = ref([]) -const repairGroups = computed(() => { - const groupsMap = new Map() - for (const row of repairList.value ?? []) { - const key = String(row.repairCode ?? row.repairId ?? row.subjectName ?? '-') - if (!groupsMap.has(key)) { - groupsMap.set(key, { - key, - name: String(row.repairName ?? row.repairCode ?? key), - items: [] - }) - } - const group = groupsMap.get(key)! - group.items.push({ - ...row, - malfunctionImages: parseImages(row?.malfunctionUrl) +const repairStepRows = computed(() => { + return (repairList.value ?? []) + .map((row) => { + const time = formatHistoryTime(row.finishDate ?? row.createTime) + return { + ...row, + key: String(row.id ?? row.repairId ?? row.repairCode ?? `${row.repairName ?? '-'}__${time}`), + time, + operator: String(row.acceptedBy ?? row.confirmBy ?? row.creatorName ?? row.creator ?? '-'), + faultImageList: parseImages(row.faultImages), + repairedImageList: parseImages(row.repairedImages) + } }) - } - const groups = Array.from(groupsMap.values()).filter((g) => g.items.length) - return groups.sort((a, b) => { - const at = formatHistoryTime(a.items?.[0]?.finishDate ?? a.items?.[0]?.createTime) - const bt = formatHistoryTime(b.items?.[0]?.finishDate ?? b.items?.[0]?.createTime) - return String(bt).localeCompare(String(at)) - }) + .sort((a, b) => String(b.time).localeCompare(String(a.time))) }) const inspectionExportLoading = ref(false) @@ -943,8 +991,6 @@ const getDetail = async () => { await fetchInspectionHistory() await fetchMaintainHistory() await fetchRepairHistory() - const keys = repairGroups.value.map((g) => g.key) - repairActiveNames.value = keys.length ? [keys[0]] : [] } finally { detailLoading.value = false } @@ -1217,6 +1263,16 @@ onMounted(async () => { margin-top: 4px; } +.device-ledger-history-image-group { + margin-top: 4px; +} + +.device-ledger-history-image-title { + margin-bottom: 6px; + color: var(--el-text-color-secondary); + font-size: 13px; +} + .device-ledger-history-item-image { width: 76px; height: 76px; @@ -1235,27 +1291,6 @@ onMounted(async () => { justify-content: center; } -.device-ledger-repair-collapse { - padding: 8px 8px 0; -} - -.device-ledger-repair-title { - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; -} - -.device-ledger-repair-name { - font-weight: 600; - color: var(--el-text-color-primary); -} - -.device-ledger-repair-meta { - font-size: 12px; - color: var(--el-text-color-secondary); -} - .device-ledger-history-item-text { color: var(--el-text-color-regular); } From 124083fe5eb691ad10d5b497f9b543c5315e6137 Mon Sep 17 00:00:00 2001 From: hwj Date: Wed, 17 Jun 2026 11:02:59 +0800 Subject: [PATCH 5/7] =?UTF-8?q?feat=EF=BC=9A=E4=BB=93=E5=BA=93=E4=BF=A1?= =?UTF-8?q?=E6=81=AF/=E5=87=BA=E5=85=A5=E5=BA=93=E5=8D=95=E6=8D=AE-?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BB=93=E5=BA=93=E5=88=86=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/erp/stock/warehouse/index.ts | 5 ++-- src/locales/en.ts | 2 ++ src/locales/zh-CN.ts | 2 ++ .../stock/in/components/StockInItemForm.vue | 25 +++++++++++++++++-- .../stock/out/components/StockOutItemForm.vue | 25 +++++++++++++++++-- .../erp/stock/warehouse/WarehouseForm.vue | 13 ++++++++++ src/views/erp/stock/warehouse/index.vue | 24 ++++++++++++++++++ 7 files changed, 90 insertions(+), 6 deletions(-) diff --git a/src/api/erp/stock/warehouse/index.ts b/src/api/erp/stock/warehouse/index.ts index b953eeb2..92b797ac 100644 --- a/src/api/erp/stock/warehouse/index.ts +++ b/src/api/erp/stock/warehouse/index.ts @@ -4,6 +4,7 @@ import request from '@/config/axios' export interface WarehouseVO { id: number // 仓库编号 name: string // 仓库名称 + categoryType?: number // 仓库分类 address: string // 仓库地址 sort: number // 排序 remark: string // 备注 @@ -49,8 +50,8 @@ export const WarehouseApi = { }, // 查询仓库精简列表 - getWarehouseSimpleList: async () => { - return await request.get({ url: `/erp/warehouse/simple-list` }) + getWarehouseSimpleList: async (params?: any) => { + return await request.get({ url: `/erp/warehouse/simple-list`, params }) }, // 查询仓库详情 diff --git a/src/locales/en.ts b/src/locales/en.ts index 7e6b3705..a2fa7281 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -267,6 +267,7 @@ ErpStock: { Warehouse: { name: 'Warehouse Name', + categoryType: 'Warehouse Category', status: 'Warehouse Status', address: 'Warehouse Address', warehousePrice: 'Storage Fee', @@ -277,6 +278,7 @@ defaultStatus: 'Default Status', createTime: 'Create Time', placeholderName: 'Please enter warehouse name', + placeholderCategoryType: 'Please select warehouse category', placeholderStatus: 'Please select warehouse status', placeholderAddress: 'Please enter warehouse address', placeholderPrincipal: 'Please enter principal', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 8553a215..bd3c1ca6 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -267,6 +267,7 @@ ErpStock: { Warehouse: { name: '仓库名称', + categoryType: '仓库分类', status: '仓库状态', address: '仓库地址', warehousePrice: '仓储费', @@ -277,6 +278,7 @@ defaultStatus: '是否默认', createTime: '创建时间', placeholderName: '请输入仓库名称', + placeholderCategoryType: '请选择仓库分类', placeholderStatus: '请选择仓库状态', placeholderAddress: '请输入仓库地址', placeholderPrincipal: '请输入负责人', diff --git a/src/views/erp/stock/in/components/StockInItemForm.vue b/src/views/erp/stock/in/components/StockInItemForm.vue index 1bdb41c3..b2574a5e 100644 --- a/src/views/erp/stock/in/components/StockInItemForm.vue +++ b/src/views/erp/stock/in/components/StockInItemForm.vue @@ -301,6 +301,27 @@ const productCascaderOptions = computed(() => { return Array.from(map.values()) }) +const loadWarehouseList = async () => { + const categoryType = activeCategoryType.value + warehouseList.value = await WarehouseApi.getWarehouseSimpleList(categoryType ? { categoryType } : undefined) + const firstWarehouse = warehouseList.value[0] + defaultWarehouse.value = firstWarehouse + const warehouseIds = new Set((warehouseList.value || []).map((item) => item.id)) + formData.value.forEach((row) => { + if (row.warehouseId && !warehouseIds.has(row.warehouseId)) { + row.warehouseId = undefined + row.areaId = undefined + row.stockCount = 0 + } + if (!row.warehouseId && firstWarehouse?.id) { + row.warehouseId = firstWarehouse.id + row.areaId = undefined + row.stockCount = 0 + } + }) + warehouseAreaMap.value = {} +} + /** 初始化设置入库项 */ watch( () => props.items, @@ -317,6 +338,7 @@ watch( watch( () => props.inType, async () => { + await loadWarehouseList() if (isProductMaterialStockIn.value) { formData.value.forEach((row) => { row.inputCount = row.inputCount ?? row.count ?? 1 @@ -601,8 +623,7 @@ defineExpose({ validate, resetItems }) /** 初始化 */ onMounted(async () => { productList.value = await ProductApi.getProductSimpleList() - warehouseList.value = await WarehouseApi.getWarehouseSimpleList() - defaultWarehouse.value = warehouseList.value.find((item) => item.defaultStatus) + await loadWarehouseList() fillProductNames(formData.value) if (isProductMaterialStockIn.value) { await loadRowsWarehouseAreas(formData.value) diff --git a/src/views/erp/stock/out/components/StockOutItemForm.vue b/src/views/erp/stock/out/components/StockOutItemForm.vue index 85c3470d..7aa7e97a 100644 --- a/src/views/erp/stock/out/components/StockOutItemForm.vue +++ b/src/views/erp/stock/out/components/StockOutItemForm.vue @@ -498,6 +498,27 @@ const productCascaderOptions = computed(() => { return Array.from(map.values()) }) +const loadWarehouseList = async () => { + const categoryType = activeCategoryType.value + warehouseList.value = await WarehouseApi.getWarehouseSimpleList(categoryType ? { categoryType } : undefined) + const firstWarehouse = warehouseList.value[0] + defaultWarehouse.value = firstWarehouse + const warehouseIds = new Set((warehouseList.value || []).map((item) => item.id)) + formData.value.forEach((row) => { + if (row.warehouseId && !warehouseIds.has(row.warehouseId)) { + row.warehouseId = undefined + row.areaId = undefined + row.stockCount = 0 + } + if (!row.warehouseId && firstWarehouse?.id) { + row.warehouseId = firstWarehouse.id + row.areaId = undefined + row.stockCount = 0 + } + }) + warehouseAreaMap.value = {} +} + /** 初始化设置入库项 */ watch( () => props.items, @@ -516,6 +537,7 @@ watch( watch( () => props.outType, async () => { + await loadWarehouseList() if (isProductMaterialStockOut.value) { formData.value.forEach((row) => { normalizeRow(row) @@ -986,8 +1008,7 @@ defineExpose({ validate, resetItems }) /** 初始化 */ onMounted(async () => { productList.value = await ProductApi.getProductSimpleList() - warehouseList.value = await WarehouseApi.getWarehouseSimpleList() - defaultWarehouse.value = warehouseList.value.find((item) => item.defaultStatus) + await loadWarehouseList() fillProductNames(formData.value) if (isProductMaterialStockOut.value) { await loadRowsWarehouseAreas(formData.value) diff --git a/src/views/erp/stock/warehouse/WarehouseForm.vue b/src/views/erp/stock/warehouse/WarehouseForm.vue index 51254d9c..a3242d7e 100644 --- a/src/views/erp/stock/warehouse/WarehouseForm.vue +++ b/src/views/erp/stock/warehouse/WarehouseForm.vue @@ -14,6 +14,17 @@ + + + + {{ dict.label }} + + + { formData.value = { id: undefined, name: undefined, + categoryType: undefined, address: undefined, sort: undefined, remark: undefined, diff --git a/src/views/erp/stock/warehouse/index.vue b/src/views/erp/stock/warehouse/index.vue index fe505046..9e524ff8 100644 --- a/src/views/erp/stock/warehouse/index.vue +++ b/src/views/erp/stock/warehouse/index.vue @@ -18,6 +18,21 @@ class="!w-240px" /> + + + + + + + +