From 9f3a0a9f3454a8f4676c257d66f8643f6c616894 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 14 Oct 2025 19:46:15 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E3=80=90mall=20=E5=95=86=E5=9F=8E?= =?UTF-8?q?=E3=80=91=E5=94=AE=E5=90=8E=E9=80=80=E6=AC=BE=EF=BC=88100%=20an?= =?UTF-8?q?td=20detail=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/api/mall/trade/afterSale/index.ts | 10 +- .../mall/trade/afterSale/detail/index.vue | 214 +++++++++--------- .../mall/trade/delivery/pickUpOrder/index.vue | 4 +- .../mall/trade/delivery/pickUpOrder/index.vue | 4 +- 4 files changed, 113 insertions(+), 119 deletions(-) diff --git a/apps/web-antd/src/api/mall/trade/afterSale/index.ts b/apps/web-antd/src/api/mall/trade/afterSale/index.ts index 6a60404c9..74c684857 100644 --- a/apps/web-antd/src/api/mall/trade/afterSale/index.ts +++ b/apps/web-antd/src/api/mall/trade/afterSale/index.ts @@ -107,26 +107,26 @@ export function getAfterSale(id: number) { } /** 同意售后 */ -export function agree(id: number) { +export function agreeAfterSale(id: number) { return requestClient.put(`/trade/after-sale/agree?id=${id}`); } /** 拒绝售后 */ -export function disagree(data: MallAfterSaleApi.DisagreeRequest) { +export function disagreeAfterSale(data: MallAfterSaleApi.DisagreeRequest) { return requestClient.put('/trade/after-sale/disagree', data); } /** 确认收货 */ -export function receive(id: number) { +export function receiveAfterSale(id: number) { return requestClient.put(`/trade/after-sale/receive?id=${id}`); } /** 拒绝收货 */ -export function refuse(id: number) { +export function refuseAfterSale(id: number) { return requestClient.put(`/trade/after-sale/refuse?id=${id}`); } /** 确认退款 */ -export function refund(id: number) { +export function refundAfterSale(id: number) { return requestClient.put(`/trade/after-sale/refund?id=${id}`); } diff --git a/apps/web-antd/src/views/mall/trade/afterSale/detail/index.vue b/apps/web-antd/src/views/mall/trade/afterSale/detail/index.vue index 3c4bcbe76..398636c94 100644 --- a/apps/web-antd/src/views/mall/trade/afterSale/detail/index.vue +++ b/apps/web-antd/src/views/mall/trade/afterSale/detail/index.vue @@ -6,16 +6,21 @@ import type { MallOrderApi } from '#/api/mall/trade/order'; import { onMounted, ref } from 'vue'; import { useRoute, useRouter } from 'vue-router'; -import { Page, useVbenModal } from '@vben/common-ui'; +import { confirm, Page, useVbenModal } from '@vben/common-ui'; import { DICT_TYPE } from '@vben/constants'; import { useTabs } from '@vben/hooks'; import { $t } from '@vben/locales'; -import { Card, message, Modal, Tag } from 'ant-design-vue'; +import { Card, message, Tag } from 'ant-design-vue'; import { useVbenVxeGrid } from '#/adapter/vxe-table'; -// TODO @AI:移除 AfterSaleApi,直接换成 api -import * as AfterSaleApi from '#/api/mall/trade/afterSale/index'; +import { + agreeAfterSale, + getAfterSale, + receiveAfterSale, + refundAfterSale, + refuseAfterSale, +} from '#/api/mall/trade/afterSale'; import { useDescription } from '#/components/description'; import { DictTag } from '#/components/dict-tag'; import { TableAction } from '#/components/table-action'; @@ -112,15 +117,15 @@ const [DisagreeModal, disagreeModalApi] = useVbenModal({ async function getDetail() { loading.value = true; try { - const res = await AfterSaleApi.getAfterSale(afterSaleId.value); + const res = await getAfterSale(afterSaleId.value); if (res === null) { message.error('售后订单不存在'); handleBack(); return; } afterSale.value = res; - await productGridApi.setGridOptions({ data: [afterSale.value.orderItem] }); - await operateLogGridApi.setGridOptions({ + productGridApi.setGridOptions({ data: [afterSale.value.orderItem] }); + operateLogGridApi.setGridOptions({ data: afterSale.value.logs || [], }); } finally { @@ -129,64 +134,72 @@ async function getDetail() { } /** 同意售后 */ -// TODO @AI:需要 loading -async function agree() { - Modal.confirm({ - title: '确认操作', - content: '是否同意售后?', - onOk: async () => { - await AfterSaleApi.agree(afterSale.value.id!); - message.success($t('page.common.success')); - await getDetail(); - }, +async function handleAgree() { + await confirm('是否同意售后?'); + const hideLoading = message.loading({ + content: '正在处理中...', + duration: 0, }); + try { + await agreeAfterSale(afterSale.value.id!); + message.success($t('ui.actionMessage.operationSuccess')); + await getDetail(); + } finally { + hideLoading(); + } } /** 拒绝售后 */ -function disagree() { +function handleDisagree() { disagreeModalApi.setData({ afterSale: afterSale.value }).open(); } /** 确认收货 */ -// TODO @AI:需要 loading -async function receive() { - Modal.confirm({ - title: '确认操作', - content: '是否确认收货?', - onOk: async () => { - await AfterSaleApi.receive(afterSale.value.id!); - message.success($t('page.common.success')); - await getDetail(); - }, +async function handleReceive() { + await confirm('是否确认收货?'); + const hideLoading = message.loading({ + content: '正在处理中...', + duration: 0, }); + try { + await receiveAfterSale(afterSale.value.id!); + message.success($t('ui.actionMessage.operationSuccess')); + await getDetail(); + } finally { + hideLoading(); + } } /** 拒绝收货 */ -// TODO @AI:需要 loading -async function refuse() { - Modal.confirm({ - title: '确认操作', - content: '是否拒绝收货?', - onOk: async () => { - await AfterSaleApi.refuse(afterSale.value.id!); - message.success($t('page.common.success')); - await getDetail(); - }, +async function handleRefuse() { + await confirm('是否拒绝收货?'); + const hideLoading = message.loading({ + content: '正在处理中...', + duration: 0, }); + try { + await refuseAfterSale(afterSale.value.id!); + message.success($t('ui.actionMessage.operationSuccess')); + await getDetail(); + } finally { + hideLoading(); + } } /** 确认退款 */ -// TODO @AI:需要 loading -async function refund() { - Modal.confirm({ - title: '确认操作', - content: '是否确认退款?', - onOk: async () => { - await AfterSaleApi.refund(afterSale.value.id!); - message.success($t('page.common.success')); - await getDetail(); - }, +async function handleRefund() { + await confirm('是否确认退款?'); + const hideLoading = message.loading({ + content: '正在处理中...', + duration: 0, }); + try { + await refundAfterSale(afterSale.value.id!); + message.success($t('ui.actionMessage.operationSuccess')); + await getDetail(); + } finally { + hideLoading(); + } } /** 返回列表页 */ @@ -195,66 +208,7 @@ function handleBack() { router.push('/mall/trade/afterSale'); } -/** 获取操作按钮 */ -function getActionButtons() { - const buttons: any[] = [ - { - label: '返回', - type: 'default', - icon: 'lucide:arrow-left', - onClick: handleBack, - }, - ]; - - // 根据状态添加不同的操作按钮 - switch (afterSale.value.status) { - case 10: { - buttons.push( - { - label: '同意售后', - type: 'primary', - onClick: agree, - }, - { - label: '拒绝售后', - type: 'primary', - onClick: disagree, - }, - ); - - break; - } - case 30: { - buttons.push( - { - label: '确认收货', - type: 'primary', - onClick: receive, - }, - { - label: '拒绝收货', - type: 'primary', - onClick: refuse, - }, - ); - - break; - } - case 40: { - buttons.push({ - label: '确认退款', - type: 'primary', - onClick: refund, - }); - - break; - } - // No default - } - - return buttons; -} - +/** 初始化 */ onMounted(() => { afterSaleId.value = Number(route.params.id); getDetail(); @@ -267,9 +221,49 @@ onMounted(() => { --> - diff --git a/apps/web-antd/src/views/mall/trade/delivery/pickUpOrder/index.vue b/apps/web-antd/src/views/mall/trade/delivery/pickUpOrder/index.vue index cc0572f7b..e4c399ebe 100644 --- a/apps/web-antd/src/views/mall/trade/delivery/pickUpOrder/index.vue +++ b/apps/web-antd/src/views/mall/trade/delivery/pickUpOrder/index.vue @@ -212,7 +212,7 @@ const [Grid, gridApi] = useVbenVxeGrid({