From 88b70e67296f06fbcbd808525365938f08022923 Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Wed, 22 Jul 2026 15:43:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=AD=A3=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E5=8D=95=E5=AD=97=E5=85=B8=E5=8A=A0=E8=BD=BD=E4=B8=8E=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E6=A0=87=E8=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/api/wms/iostorinv/index.ts | 4 +-- .../src/views/wms/iostorinv/modules/form.vue | 32 ++++++++++++++++--- .../iostorinv/modules/outbound-form.test.ts | 13 ++++++++ .../wms/iostorinv/modules/outbound-form.ts | 13 ++++++++ 4 files changed, 56 insertions(+), 6 deletions(-) diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/wms/iostorinv/index.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/wms/iostorinv/index.ts index 30bff1d0..7896257a 100644 --- a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/wms/iostorinv/index.ts +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/wms/iostorinv/index.ts @@ -110,9 +110,9 @@ export function getIostorInvPage(params: PageParam) { } /** 查询出入库单主表详情 */ -export function getIostorInv(id: number) { +export function getIostorInv(id: string) { return requestClient.get( - `/wms/iostor-inv/get?id=${id}`, + `/wms/iostor-inv/get?id=${encodeURIComponent(id)}`, ); } diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/wms/iostorinv/modules/form.vue b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/wms/iostorinv/modules/form.vue index 2261c764..b28a4926 100644 --- a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/wms/iostorinv/modules/form.vue +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/wms/iostorinv/modules/form.vue @@ -4,13 +4,12 @@ import type { WmsIostorInvApi } from '#/api/wms/iostorinv'; import { computed, ref } from 'vue'; import { useVbenModal } from '@vben/common-ui'; -import { DICT_TYPE } from '@vben/constants'; -import { getDictOptions } from '@vben/hooks'; import { Button, Input, InputNumber, message, Space, Table } from 'antdv-next'; import dayjs from 'dayjs'; import { useVbenForm } from '#/adapter/form'; +import { getSimpleDictDataList } from '#/api/system/dict/data'; import { getBsrealStorAttrSimpleList } from '#/api/wms/bsrealstorattr'; import { createOutbound, @@ -25,6 +24,7 @@ import InventorySelectComponent from './inventory-select.vue'; import ManualDetailComponent from './manual-detail.vue'; import { buildOutboundPayload, + filterOutboundBillTypeOptions, mergeOutboundInventory, type OutboundFormDetail, shouldClearDetailsForWarehouseChange, @@ -35,6 +35,7 @@ const formData = ref(); const details = ref([]); const currentStorId = ref(); let manualRowSequence = 0; +let billTypeRequest: null | ReturnType = null; const isEdit = computed(() => Boolean(formData.value?.iostorinvId)); const getTitle = computed(() => @@ -103,7 +104,7 @@ const [OutboundForm, outboundFormApi] = useVbenForm({ component: 'Select', componentProps: { allowClear: true, - options: getDictOptions(DICT_TYPE.WMS_SHIPMENT_ORDER_TYPE, 'string'), + options: [], placeholder: '请选择业务类型', }, fieldName: 'billType', @@ -159,6 +160,28 @@ const [ManualDetail, manualDetailApi] = useVbenModal({ destroyOnClose: true, }); +async function loadBillTypeOptions() { + billTypeRequest ??= getSimpleDictDataList(); + const request = billTypeRequest; + try { + const dictItems = await request; + outboundFormApi.updateSchema([ + { + componentProps: { + allowClear: true, + options: filterOutboundBillTypeOptions(dictItems), + placeholder: '请选择业务类型', + }, + fieldName: 'billType', + }, + ]); + } catch { + message.error('出库业务类型加载失败,请稍后重试'); + } finally { + if (billTypeRequest === request) billTypeRequest = null; + } +} + const columns = [ { key: 'index', title: '序号', width: 60 }, { dataIndex: 'materialCode', key: 'materialCode', title: '物料编码', width: 130 }, @@ -293,12 +316,13 @@ const [Modal, modalApi] = useVbenModal({ detailCount: 0, totalWeight: '0.000', }); + await loadBillTypeOptions(); return; } modalApi.lock(); try { formData.value = data; - formData.value = await getIostorInv(Number(data.iostorinvId)); + formData.value = await getIostorInv(data.iostorinvId); await legacyFormApi.setValues(formData.value); } finally { modalApi.unlock(); diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/wms/iostorinv/modules/outbound-form.test.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/wms/iostorinv/modules/outbound-form.test.ts index 502f3e99..9f11026e 100644 --- a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/wms/iostorinv/modules/outbound-form.test.ts +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/wms/iostorinv/modules/outbound-form.test.ts @@ -2,10 +2,23 @@ import { describe, expect, it } from 'vitest'; import { buildOutboundPayload, + filterOutboundBillTypeOptions, mergeOutboundInventory, shouldClearDetailsForWarehouseChange, } from './outbound-form'; +describe('filterOutboundBillTypeOptions', () => { + it('从冷缓存接口结果中只提取启用的出库业务类型', () => { + expect( + filterOutboundBillTypeOptions([ + { dictType: 'in_bill_type', label: '采购入库', status: 0, value: '100' }, + { dictType: 'out_bill_type', label: '销售出库', status: 0, value: '201' }, + { dictType: 'out_bill_type', label: '停用出库', status: 1, value: '299' }, + ]), + ).toEqual([{ label: '销售出库', value: '201' }]); + }); +}); + describe('buildOutboundPayload', () => { it('将业务日期转换成毫秒,并剥离所有仅展示字段和汇总字段', () => { const bizDate = new Date('2026-07-22T08:30:00+08:00'); diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/wms/iostorinv/modules/outbound-form.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/wms/iostorinv/modules/outbound-form.ts index a47ba6ea..4b95be41 100644 --- a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/wms/iostorinv/modules/outbound-form.ts +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/wms/iostorinv/modules/outbound-form.ts @@ -1,5 +1,12 @@ import type { WmsIostorInvApi } from '#/api/wms/iostorinv'; +export interface OutboundDictItem { + dictType: string; + label: string; + status?: number; + value: string; +} + export interface OutboundFormValues { billType?: string; bizDate?: number | string | { valueOf: () => number }; @@ -14,6 +21,12 @@ export interface OutboundFormDetail rowKey?: string; } +export function filterOutboundBillTypeOptions(items: OutboundDictItem[]) { + return items + .filter((item) => item.dictType === 'out_bill_type' && item.status !== 1) + .map(({ label, value }) => ({ label, value })); +} + export function buildOutboundPayload( values: OutboundFormValues, details: OutboundFormDetail[],