From 800d8c1ae96453504e9ccde5730c7cd1c503a618 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A6=82=E5=88=9D?= <3236758982@qq.com> Date: Mon, 22 Jun 2026 19:15:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=8E=E7=BA=A2=E6=94=80=EF=BC=9AV2.6.969?= =?UTF-8?q?=EF=BC=8C=E9=94=80=E5=94=AE=E9=80=80=E8=B4=A7=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/erp/sale-order/index.ts | 1 + src/api/erp/sale-return/index.ts | 92 +++ .../purchase-return/detail/index.vue | 2 +- src/pages-erp/purchase-return/form/index.vue | 44 +- .../sale-return/components/search-form.vue | 95 +++ src/pages-erp/sale-return/detail/index.vue | 319 +++++++++ src/pages-erp/sale-return/form/index.vue | 633 ++++++++++++++++++ src/pages-erp/sale-return/index.vue | 371 ++++++++++ src/pages/index/index.ts | 8 + 9 files changed, 1552 insertions(+), 13 deletions(-) create mode 100644 src/api/erp/sale-return/index.ts create mode 100644 src/pages-erp/sale-return/components/search-form.vue create mode 100644 src/pages-erp/sale-return/detail/index.vue create mode 100644 src/pages-erp/sale-return/form/index.vue create mode 100644 src/pages-erp/sale-return/index.vue diff --git a/src/api/erp/sale-order/index.ts b/src/api/erp/sale-order/index.ts index ab76a47..9bba02d 100644 --- a/src/api/erp/sale-order/index.ts +++ b/src/api/erp/sale-order/index.ts @@ -22,6 +22,7 @@ export interface SaleOrderItem { taxAmount?: number remark?: string outCount?: number + returnCount?: number stockCount?: number } diff --git a/src/api/erp/sale-return/index.ts b/src/api/erp/sale-return/index.ts new file mode 100644 index 0000000..33bcff0 --- /dev/null +++ b/src/api/erp/sale-return/index.ts @@ -0,0 +1,92 @@ +import type { PageParam, PageResult } from '@/http/types' +import { http } from '@/http/http' + +/** 销售退货明细 */ +export interface SaleReturnItem { + id?: number + orderItemId?: number + warehouseId?: number + warehouseName?: string + productId?: number + productName?: string + productBarCode?: string + productUnitId?: number + productUnitName?: string + productPrice?: number + count?: number + totalCount?: number + totalPrice?: number + taxPercent?: number + taxPrice?: number + remark?: string + stockCount?: number + totalProductPrice?: number + outCount?: number + returnCount?: number + productSpec?: string +} + +/** 销售退货 */ +export interface SaleReturn { + id?: number + no?: string + customerId?: number + customerName?: string + accountId?: number + accountName?: string + saleUserId?: number + saleUserName?: string + returnTime?: string | number + orderId?: number + orderNo?: string + totalCount?: number + totalPrice?: number + refundPrice?: number + totalProductPrice?: number + totalTaxPrice?: number + discountPercent?: number + discountPrice?: number + otherPrice?: number + fileUrl?: string + status?: number + remark?: string + creator?: string + creatorName?: string + createTime?: string | number + productNames?: string + items?: SaleReturnItem[] +} + +/** 获取销售退货分页列表 */ +export function getSaleReturnPage(params: PageParam & { + no?: string + customerId?: number + status?: number +}) { + return http.get>('/erp/sale-return/page', params) +} + +/** 获取销售退货详情 */ +export function getSaleReturn(id: number) { + return http.get(`/erp/sale-return/get?id=${id}`) +} + +/** 创建销售退货 */ +export function createSaleReturn(data: SaleReturn) { + return http.post('/erp/sale-return/create', data) +} + +/** 更新销售退货 */ +export function updateSaleReturn(data: SaleReturn) { + return http.put('/erp/sale-return/update', data) +} + +/** 更新销售退货状态 */ +export function updateSaleReturnStatus(id: number, status: number) { + return http.put('/erp/sale-return/update-status', undefined, { id, status }) +} + +/** 删除销售退货 */ +export function deleteSaleReturn(ids: number[]) { + return http.delete('/erp/sale-return/delete', undefined, { ids: ids.join(',') }) +} diff --git a/src/pages-erp/purchase-return/detail/index.vue b/src/pages-erp/purchase-return/detail/index.vue index 45ed52f..92f8f14 100644 --- a/src/pages-erp/purchase-return/detail/index.vue +++ b/src/pages-erp/purchase-return/detail/index.vue @@ -8,7 +8,7 @@ /> - + diff --git a/src/pages-erp/purchase-return/form/index.vue b/src/pages-erp/purchase-return/form/index.vue index b4b41b2..18010e1 100644 --- a/src/pages-erp/purchase-return/form/index.vue +++ b/src/pages-erp/purchase-return/form/index.vue @@ -325,7 +325,7 @@ const formData = ref({ no: undefined, supplierId: undefined, accountId: undefined, - returnTime: undefined, + returnTime: Date.now(), orderId: undefined, orderNo: undefined, discountPercent: 0, @@ -358,14 +358,20 @@ const orderTotal = ref(0) const selectedOrderId = ref() /** 账户下拉列 */ -const accountColumns = computed(() => [ - accountList.value.map(a => ({ value: a.id, label: a.name })), -]) +const accountColumns = computed(() => { + if (!accountList.value.length) { + return [] + } + return [accountList.value.map(a => ({ value: a.id, label: a.name }))] +}) /** 仓库下拉列 */ -const warehouseColumns = computed(() => [ - warehouseList.value.map(w => ({ value: w.id, label: w.name })), -]) +const warehouseColumns = computed(() => { + if (!warehouseList.value.length) { + return [] + } + return [warehouseList.value.map(w => ({ value: w.id, label: w.name }))] +}) /** 获取供应商名称 */ function getSupplierName() { @@ -375,15 +381,29 @@ function getSupplierName() { } /** 账户选择回调 */ -function onAccountConfirm({ value }: any) { - formData.value.accountId = value?.[0] +function getPickerSingleValue(payload: any) { + if (Array.isArray(payload?.value)) { + return payload.value[0] + } + if (payload?.value !== undefined) { + return payload.value + } + if (Array.isArray(payload?.selectedItems) && payload.selectedItems.length > 0) { + return payload.selectedItems[0]?.value + } + return undefined +} + +function onAccountConfirm(payload: any) { + formData.value.accountId = getPickerSingleValue(payload) } /** 仓库选择回调 */ -function onWarehouseConfirm({ value }: any, index: number) { +function onWarehouseConfirm(payload: any, index: number) { if (formData.value.items && formData.value.items[index]) { - formData.value.items[index].warehouseId = value?.[0] - const warehouse = warehouseList.value.find(w => w.id === value?.[0]) + const warehouseId = getPickerSingleValue(payload) + formData.value.items[index].warehouseId = warehouseId + const warehouse = warehouseList.value.find(w => w.id === warehouseId) if (warehouse) { formData.value.items[index].warehouseName = warehouse.name } diff --git a/src/pages-erp/sale-return/components/search-form.vue b/src/pages-erp/sale-return/components/search-form.vue new file mode 100644 index 0000000..705943c --- /dev/null +++ b/src/pages-erp/sale-return/components/search-form.vue @@ -0,0 +1,95 @@ + + + diff --git a/src/pages-erp/sale-return/detail/index.vue b/src/pages-erp/sale-return/detail/index.vue new file mode 100644 index 0000000..34ddb33 --- /dev/null +++ b/src/pages-erp/sale-return/detail/index.vue @@ -0,0 +1,319 @@ + + + + + diff --git a/src/pages-erp/sale-return/form/index.vue b/src/pages-erp/sale-return/form/index.vue new file mode 100644 index 0000000..42ed881 --- /dev/null +++ b/src/pages-erp/sale-return/form/index.vue @@ -0,0 +1,633 @@ + + + + + diff --git a/src/pages-erp/sale-return/index.vue b/src/pages-erp/sale-return/index.vue new file mode 100644 index 0000000..310a28a --- /dev/null +++ b/src/pages-erp/sale-return/index.vue @@ -0,0 +1,371 @@ + + + + + diff --git a/src/pages/index/index.ts b/src/pages/index/index.ts index 7a6c2a8..b285db0 100644 --- a/src/pages/index/index.ts +++ b/src/pages/index/index.ts @@ -115,6 +115,14 @@ const menuGroupsData: MenuGroup[] = [ url: '/pages-erp/sale-out/index', iconColor: '#52c41a', permission: 'erp:sale-out:query', + }, + { + key: 'saleReturn', + name: '销售退货', + icon: 'refund', + url: '/pages-erp/sale-return/index', + iconColor: '#fa8c16', + permission: 'erp:sale-return:query', } ], },