From 9c81c228ee38e7e55e190d1163fd1a202396206f Mon Sep 17 00:00:00 2001 From: dzq Date: Wed, 9 Apr 2025 10:28:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(approval):=20=E6=B7=BB=E5=8A=A0=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E4=B8=AD=E5=BF=83=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=8C=85?= =?UTF-8?q?=E6=8B=AC=E5=AE=A1=E6=89=B9=E5=88=97=E8=A1=A8=E5=92=8C=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E5=AE=A1=E6=89=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增审批中心页面,支持管理员查看审批列表,包含搜索、分页和状态筛选功能。同时优化了提交审批页面,增加退货备注字段,并改进上传文件后的反馈提示。 --- src/common/apis/approval/index.ts | 12 +- src/common/apis/approval/type.ts | 49 +++++++ src/pages/approval/list.vue | 218 ++++++++++++++++++++++++++++++ src/pages/approval/submit.vue | 15 +- src/pages/me/index.vue | 1 + src/router/index.ts | 19 +++ types/auto/components.d.ts | 4 + 7 files changed, 312 insertions(+), 6 deletions(-) create mode 100644 src/pages/approval/list.vue diff --git a/src/common/apis/approval/index.ts b/src/common/apis/approval/index.ts index 61938b5..617fd99 100644 --- a/src/common/apis/approval/index.ts +++ b/src/common/apis/approval/index.ts @@ -1,5 +1,13 @@ import { request } from '@/http/axios' -import { SubmitApprovalRequestData, SubmitApprovalResponseData } from './type' +import { SubmitApprovalRequestData, SubmitApprovalResponseData, SearchApiReturnApprovalQuery, ApiResponsePageData, ReturnApprovalEntity } from './type' + +export const getApprovalListApi = (params: SearchApiReturnApprovalQuery) => { + return request>({ + url: 'approval/list', + method: 'get', + params + }) +} export const submitApprovalApi = (data: SubmitApprovalRequestData) => { return request({ @@ -7,4 +15,4 @@ export const submitApprovalApi = (data: SubmitApprovalRequestData) => { method: 'post', data }) -} \ No newline at end of file +} diff --git a/src/common/apis/approval/type.ts b/src/common/apis/approval/type.ts index 11e1de1..bcc20c0 100644 --- a/src/common/apis/approval/type.ts +++ b/src/common/apis/approval/type.ts @@ -2,6 +2,55 @@ export interface SubmitApprovalRequestData { orderGoodsId: number returnQuantity: number returnImages: string + returnRemark: string +} + +export interface SearchApiReturnApprovalQuery { + pageNum: number + pageSize: number + approvalId?: number + orderId?: number + goodsId?: number + status?: number + startTime?: string + endTime?: string +} + +export interface ApiResponsePageData { + code: number + msg: string + data: { + total: number + rows: T[] + } +} + +export interface ReturnApprovalEntity { + approvalId: number + orderId: number + goodsId: number + /** 关联订单商品ID */ + orderGoodsId: number + /** 归还数量 */ + returnQuantity: number + /** 商品单价 */ + goodsPrice: number + status: number + returnAmount: number + /** 归还图片路径数组 */ + returnImages: string + /** 审核图片路径数组 */ + auditImages: string + /** 归还说明 */ + returnRemark: string + /** 审核说明 */ + auditRemark: string + createTime: string + updateTime: string + /** 商品名称 */ + goodsName: string + /** 封面图URL */ + coverImg: string } export type SubmitApprovalResponseData = ApiResponseMsgData<{ diff --git a/src/pages/approval/list.vue b/src/pages/approval/list.vue new file mode 100644 index 0000000..e46fd22 --- /dev/null +++ b/src/pages/approval/list.vue @@ -0,0 +1,218 @@ + + + + + \ No newline at end of file diff --git a/src/pages/approval/submit.vue b/src/pages/approval/submit.vue index 6c2d2eb..fcaf674 100644 --- a/src/pages/approval/submit.vue +++ b/src/pages/approval/submit.vue @@ -13,7 +13,8 @@ const route = useRoute() const formData = ref({ orderGoodsId: Number(route.query.orderGoodsId), returnQuantity: 1, - returnImages: '' + returnImages: '', + returnRemark: '' }) watch(() => route.query.orderGoodsId, (newVal) => { @@ -71,10 +72,9 @@ const handleFileUpload = async (items: UploaderFileListItem | UploaderFileListIt const urls = await Promise.all(uploadPromises) files.forEach((item, index) => { item.status = 'done' - item.message = '' + item.message = '上传成功' item.url = urls[index].url }) - showToast('上传成功') } catch (error) { showConfirmDialog({ title: '上传失败', @@ -96,7 +96,13 @@ const handleSubmit = async () => { if (code === 0) { showSuccessToast('提交成功') - router.push('/order/' + orderId) + try { + await showConfirmDialog({ + title: "提交成功", + message: `退货申请已提交,等待管理员审核` + }) + } catch (error) { } + router.push('/order/' + orderId.value) } } catch (error) { console.error('提交失败:', error) @@ -118,6 +124,7 @@ const handleSubmit = async () => { + diff --git a/src/pages/me/index.vue b/src/pages/me/index.vue index 6d8da21..61ece3a 100644 --- a/src/pages/me/index.vue +++ b/src/pages/me/index.vue @@ -75,6 +75,7 @@ const balance = computed(() => wxStore.balance) + diff --git a/src/router/index.ts b/src/router/index.ts index 77d785d..1572027 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -87,6 +87,25 @@ export const routes: RouteRecordRaw[] = [ } } }, + { + path: '/approval/list', + component: () => import('@/pages/approval/list.vue'), + name: "Approval", + meta: { + title: '审批中心', + keepAlive: true, + layout: { + navBar: { + showNavBar: false, + showLeftArrow: false + }, + tabbar: { + showTabbar: false, + icon: "home-o" + } + } + } + }, { path: "/", component: () => import("@/pages/product/ProductList.vue"), diff --git a/types/auto/components.d.ts b/types/auto/components.d.ts index caa3761..436f172 100644 --- a/types/auto/components.d.ts +++ b/types/auto/components.d.ts @@ -17,12 +17,16 @@ declare module 'vue' { VanConfigProvider: typeof import('vant/es')['ConfigProvider'] VanDivider: typeof import('vant/es')['Divider'] VanField: typeof import('vant/es')['Field'] + VanForm: typeof import('vant/es')['Form'] VanGrid: typeof import('vant/es')['Grid'] VanGridItem: typeof import('vant/es')['GridItem'] VanIcon: typeof import('vant/es')['Icon'] VanImage: typeof import('vant/es')['Image'] + VanList: typeof import('vant/es')['List'] VanLoading: typeof import('vant/es')['Loading'] VanNavBar: typeof import('vant/es')['NavBar'] + VanPicker: typeof import('vant/es')['Picker'] + VanPopup: typeof import('vant/es')['Popup'] VanRadio: typeof import('vant/es')['Radio'] VanRadioGroup: typeof import('vant/es')['RadioGroup'] VanSidebar: typeof import('vant/es')['Sidebar']