From dcde4b33fa739b09486c39faade9ed19b29a6d7a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 03 八月 2026 14:58:35 +0800
Subject: [PATCH] feat(srm): 优化供应商选择组件功能
---
src/views/erp/sale/return/modules/form.vue | 131 +++++++++++++++++++++++++++++++++++--------
1 files changed, 106 insertions(+), 25 deletions(-)
diff --git a/src/views/erp/sale/return/modules/form.vue b/src/views/erp/sale/return/modules/form.vue
index 76ce63a..64d7dd5 100644
--- a/src/views/erp/sale/return/modules/form.vue
+++ b/src/views/erp/sale/return/modules/form.vue
@@ -13,6 +13,7 @@
import { useVbenForm } from '#/adapter/form';
import { getAccountSimpleList } from '#/api/erp/finance/account';
+import { getSaleOrderItemListByOrderId, getSaleOrderPage } from '#/api/erp/sale/order';
import {
createSaleReturn,
getSaleReturn,
@@ -29,7 +30,6 @@
accountId?: number;
customerId?: number;
discountPercent?: number;
- fileUrl?: string;
order?: ErpSaleOrderApi.SaleOrder;
orderId?: number;
orderNo?: string;
@@ -40,7 +40,6 @@
accountId: undefined,
returnTime: undefined,
remark: undefined,
- fileUrl: undefined,
discountPercent: 0,
customerId: undefined,
discountPrice: 0,
@@ -50,6 +49,7 @@
});
const formType = ref<FormType>('create'); // 琛ㄥ崟绫诲瀷锛�'create' | 'edit' | 'detail'
const itemFormRef = ref<InstanceType<typeof ItemForm>>();
+const orderItems = ref<ErpSaleOrderApi.SaleOrderItem[]>([]);
const getTitle = computed(() => {
if (formType.value === 'create') {
@@ -115,7 +115,7 @@
}
/** 閫夋嫨閿�鍞鍗� */
-function handleUpdateOrder(order: ErpSaleOrderApi.SaleOrder) {
+async function handleUpdateOrder(order: ErpSaleOrderApi.SaleOrder) {
formData.value = {
...formData.value,
orderId: order.id,
@@ -124,18 +124,35 @@
accountId: order.accountId!,
remark: order.remark!,
discountPercent: order.discountPercent!,
- fileUrl: order.fileUrl!,
};
- // 灏嗚鍗曢」璁剧疆鍒伴��璐у崟椤�
- order.items!.forEach((item: any) => {
- item.totalCount = item.count;
- item.count = item.totalCount - item.returnCount;
- item.orderItemId = item.id;
- item.id = undefined;
- });
- formData.value.items = order.items!.filter(
- (item) => item.count && item.count > 0,
- ) as ErpSaleReturnApi.SaleReturnItem[];
+ // 鍔犺浇鍏宠仈閿�鍞鍗曠殑鐗╂枡鍒楄〃
+ const items = await getSaleOrderItemListByOrderId(order.id!);
+ orderItems.value = items;
+ // 灏嗚鍗曢」杞崲涓洪��璐у崟椤癸紙浠呬繚鐣欏彲閫�璐ф暟閲� > 0 鐨勯」锛�
+ const returnItems: ErpSaleReturnApi.SaleReturnItem[] = [];
+ for (const item of items) {
+ const returnCount = (item as { returnCount?: number }).returnCount ?? 0;
+ const remainingCount = (item.count ?? 0) - returnCount;
+ if (remainingCount <= 0) continue;
+
+ returnItems.push({
+ orderItemId: item.id,
+ productId: item.productId,
+ productName: item.productName || '',
+ productPrice: item.productPrice || 0,
+ productUnitId: item.productUnitId,
+ productUnitName: item.productUnitName,
+ productBarCode: item.productBarCode,
+ totalCount: item.count,
+ count: remainingCount,
+ taxPercent: item.taxPercent || 0,
+ remark: item.remark || '',
+ totalProductPrice: 0,
+ taxPrice: 0,
+ totalPrice: 0,
+ });
+ }
+ formData.value.items = returnItems;
formApi.setValues(formData.value, false);
}
@@ -174,14 +191,72 @@
async onOpenChange(isOpen: boolean) {
if (!isOpen) {
formData.value = {} as ErpSaleReturnApi.SaleReturn;
+ orderItems.value = [];
return;
}
- // 鍔犺浇鏁版嵁
- const data = modalApi.getData<{ formType: FormType; id?: number }>();
- formType.value = data.formType;
+ const modalData = modalApi.getData<{ formType: FormType; id?: number }>();
+ formType.value = modalData.formType;
+
+ // 缂栬緫/璇︽儏妯″紡锛氬厛鍔犺浇鏁版嵁锛屽啀鏇存柊 schema锛岀‘淇濇覆鏌撴椂 orderNo 宸插氨缁�
+ if (modalData?.id) {
+ modalApi.lock();
+ try {
+ const apiData = await getSaleReturn(modalData.id);
+ const raw = apiData as Record<string, unknown>;
+
+ // 鎻愬彇璁㈠崟鍙凤紙灏濊瘯澶氱鍙兘鐨勫瓧娈靛悕 / 宓屽缁撴瀯锛�
+ const getOrderNo = (): string => {
+ if (raw.orderNo) return raw.orderNo as string;
+ if (raw.salesOrderCode) return raw.salesOrderCode as string;
+ if (raw.salesOrderNo) return raw.salesOrderNo as string;
+ const so = raw.salesOrder as Record<string, unknown> | undefined;
+ if (so?.no) return so.no as string;
+ const o = raw.order as Record<string, unknown> | undefined;
+ if (o?.no) return o.no as string;
+ return '';
+ };
+
+ // 鎻愬彇璁㈠崟ID锛堝皾璇曞绉嶅彲鑳界殑瀛楁鍚� / 宓屽缁撴瀯锛�
+ const getOrderId = (): number | undefined => {
+ if (raw.orderId) return raw.orderId as number;
+ if (raw.salesOrderId) return raw.salesOrderId as number;
+ const so = raw.salesOrder as Record<string, unknown> | undefined;
+ if (so?.id) return so.id as number;
+ const o = raw.order as Record<string, unknown> | undefined;
+ if (o?.id) return o.id as number;
+ return undefined;
+ };
+
+ let orderNo = getOrderNo();
+ let orderId = getOrderId();
+
+ // 濡傛灉鏈夎鍗曞彿浣嗘病鏈夎鍗旾D锛岄�氳繃璁㈠崟鍙峰弽鏌ヨ鍗旾D
+ if (orderNo && !orderId) {
+ const orderPage = await getSaleOrderPage({
+ pageNo: 1,
+ pageSize: 1,
+ no: orderNo,
+ } as Record<string, unknown> as never);
+ const list = (orderPage as Record<string, unknown>)?.list as Array<Record<string, unknown>> | undefined;
+ if (list?.length) {
+ orderId = list[0].id as number;
+ }
+ }
+
+ formData.value = { ...apiData, orderNo, orderId };
+ if (orderId) {
+ orderItems.value = await getSaleOrderItemListByOrderId(orderId);
+ }
+ } finally {
+ modalApi.unlock();
+ }
+ }
+
+ // 鏁版嵁灏辩华鍚庡啀鏇存柊 schema 鍜岃缃〃鍗曞��
formApi.setDisabled(formType.value === 'detail');
formApi.updateSchema(useFormSchema(formType.value));
- if (!data || !data.id) {
+
+ if (!modalData?.id) {
// 鏂板鏃讹紝榛樿閫変腑璐︽埛
const accountList = await getAccountSimpleList();
const defaultAccount = accountList.find((item) => item.defaultStatus);
@@ -190,13 +265,17 @@
}
return;
}
- modalApi.lock();
- try {
- formData.value = await getSaleReturn(data.id);
- // 璁剧疆鍒� values
- await formApi.setValues(formData.value, false);
- } finally {
- modalApi.unlock();
+
+ await formApi.setValues(formData.value, false);
+ if (formData.value?.attachmentList?.length) {
+ const blobIds = formData.value.attachmentList.map((item) => ({
+ uid: String(item.id),
+ name: item.name || '',
+ url: item.url || '',
+ status: 'done',
+ id: item.id,
+ }));
+ await formApi.setFieldValue('blobIds', blobIds);
}
},
});
@@ -217,6 +296,7 @@
:disabled="formType === 'detail'"
:discount-percent="formData?.discountPercent ?? 0"
:other-price="formData?.otherPrice ?? 0"
+ :order-items="orderItems"
@update:items="handleUpdateItems"
@update:discount-price="handleUpdateDiscountPrice"
@update:other-price="handleUpdateOtherPrice"
@@ -225,6 +305,7 @@
</template>
<template #orderNo>
<SaleOrderSelect
+ :key="formData?.orderNo ?? 'empty'"
:order-no="formData?.orderNo"
@update:order="handleUpdateOrder"
/>
--
Gitblit v1.9.3