From bc46f4028569fec121a69ac9070a61ada5607e29 Mon Sep 17 00:00:00 2001 From: dzq Date: Mon, 7 Apr 2025 15:50:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E9=80=80=E8=B4=A7?= =?UTF-8?q?=E5=AE=A1=E6=89=B9=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=9F=9C=E6=9C=BA=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增退货审批功能,包括提交审批的API接口、类型定义及页面 - 在订单页面添加“退还”按钮,支持用户提交退货申请 - 优化柜机管理页面布局,使用van-cell代替van-grid展示柜机信息 - 调整路由配置,将柜机管理页面从tabbar中移除,改为在个人中心页面显示 --- public/img/product-image.png | Bin 0 -> 7182 bytes public/img/product-image.svg | 6 + src/common/apis/approval/index.ts | 10 + src/common/apis/approval/type.ts | 11 ++ src/layout/components/Tabbar.vue | 11 +- src/pages/approval/submit.vue | 132 ++++++++++++++ src/pages/cabinet/index.vue | 291 ++++++++++++++++++------------ src/pages/me/index.vue | 1 + src/pages/order/index.vue | 67 ++++++- src/router/index.ts | 28 ++- 10 files changed, 413 insertions(+), 144 deletions(-) create mode 100644 public/img/product-image.png create mode 100644 public/img/product-image.svg create mode 100644 src/common/apis/approval/index.ts create mode 100644 src/common/apis/approval/type.ts create mode 100644 src/pages/approval/submit.vue diff --git a/public/img/product-image.png b/public/img/product-image.png new file mode 100644 index 0000000000000000000000000000000000000000..e553a04d2ffb2d426e0a557f161ddbc7ad088120 GIT binary patch literal 7182 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 V?%=F3AM7j-psb({DS2t?|6fW@sj2_~ literal 0 HcmV?d00001 diff --git a/public/img/product-image.svg b/public/img/product-image.svg new file mode 100644 index 0000000..f12a898 --- /dev/null +++ b/public/img/product-image.svg @@ -0,0 +1,6 @@ + + + 空闲 + \ No newline at end of file diff --git a/src/common/apis/approval/index.ts b/src/common/apis/approval/index.ts new file mode 100644 index 0000000..61938b5 --- /dev/null +++ b/src/common/apis/approval/index.ts @@ -0,0 +1,10 @@ +import { request } from '@/http/axios' +import { SubmitApprovalRequestData, SubmitApprovalResponseData } from './type' + +export const submitApprovalApi = (data: SubmitApprovalRequestData) => { + return request({ + url: 'approval/submit', + 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 new file mode 100644 index 0000000..3d771b2 --- /dev/null +++ b/src/common/apis/approval/type.ts @@ -0,0 +1,11 @@ +export interface SubmitApprovalRequestData { + orderId: number + goodsId: number + returnQuantity: number + returnImages: string +} + +export type SubmitApprovalResponseData = ApiResponseMsgData<{ + approvalId: number + status: number +}> \ No newline at end of file diff --git a/src/layout/components/Tabbar.vue b/src/layout/components/Tabbar.vue index 1827445..9a4b34f 100644 --- a/src/layout/components/Tabbar.vue +++ b/src/layout/components/Tabbar.vue @@ -3,7 +3,7 @@ const router = useRouter() const tabbarItemList = computed(() => { const routes = router.getRoutes() - return routes.filter(route => route.meta.layout?.tabbar?.showTabbar && route.path !== '/cabinet') + return routes.filter(route => route.meta.layout?.tabbar?.showTabbar) .map(route => ({ title: route.meta.title, icon: route.meta.layout?.tabbar?.icon, @@ -22,15 +22,6 @@ const wxStore = useWxStoreOutside() placeholder safe-area-inset-bottom > - - 柜机管理 - +import { ref } from 'vue' +import { showConfirmDialog, showSuccessToast } from 'vant' +import { submitApprovalApi } from '@/common/apis/approval' +import type { SubmitApprovalRequestData } from '@/common/apis/approval/type' +import { useRouter } from 'vue-router' + +const router = useRouter() +const route = useRoute() + +const formData = ref({ + orderId: Number(route.query.orderId), + goodsId: Number(route.query.goodsId), + returnQuantity: 1, + returnImages: '' +}) + +const submitting = ref(false) +const fileList = ref>([]) + +const validateForm = () => { + if (!formData.value.orderId || isNaN(formData.value.orderId)) { + showConfirmDialog({ title: '错误', message: '订单ID参数错误' }) + return false + } + if (!formData.value.goodsId || isNaN(formData.value.goodsId)) { + showConfirmDialog({ title: '错误', message: '商品ID参数错误' }) + return false + } + if (formData.value.returnQuantity < 1) { + showConfirmDialog({ title: '提示', message: '退还数量至少为1' }) + return false + } + return true +} + +const handleSubmit = async () => { + if (!validateForm()) return + + submitting.value = true + try { + formData.value.returnImages = fileList.value.map(f => f.url).join(',') + + const { code } = await submitApprovalApi(formData.value) + + if (code === 0) { + showSuccessToast('提交成功') + router.push({ name: 'approval-result', query: { id: formData.value.orderId } }) + } + } catch (error) { + showConfirmDialog({ + title: '提交失败', + message: error instanceof Error ? error.message : '网络请求异常' + }) + } finally { + submitting.value = false + } +} + + + + + \ No newline at end of file diff --git a/src/pages/cabinet/index.vue b/src/pages/cabinet/index.vue index 894deb0..237f2a5 100644 --- a/src/pages/cabinet/index.vue +++ b/src/pages/cabinet/index.vue @@ -4,41 +4,50 @@ -
- - - - - - +
+
+ + 详情 + + + 立即开启 + +
+ + @@ -48,6 +57,7 @@ import { ref } from 'vue' import { getCabinetDetailApi, openCabinet } from '@/common/apis/cabinet' import type { CabinetDetailDTO } from '@/common/apis/cabinet/type' import { useWxStoreOutside } from '@/pinia/stores/wx' +import { publicPath } from "@/common/utils/path" const wxStore = useWxStoreOutside() @@ -167,94 +177,139 @@ loadCabinetDetail() } } -.locker-item { - width: 100%; - margin: 8px; - border-radius: 8px; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); - transition: all 0.3s ease; - overflow: hidden; +.status-overlay { + display: flex; + align-items: center; + justify-content: center; - &:hover { - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); - } - - .locker-status { - position: relative; - border-radius: 4px; - overflow: hidden; - - .locker-image { - display: block; - } - - .status-overlay { - position: absolute; - width: 100%; - height: 50px; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(0, 0, 0, 0.4); - display: flex; - align-items: center; - justify-content: center; - - .status-text { - color: white; - font-size: 16px; - font-weight: 500; - } - } - } - - .locker-info { - padding: 8px; - - .locker-number { - font-size: 14px; - color: #666; - margin-bottom: 4px; - } - - .goods-info { - margin: 8px 0; - padding: 8px; - background: #f7f8fa; - border-radius: 4px; - - .goods-name { - font-size: 12px; - color: #333; - line-height: 1.4; - } - - .goods-price { - font-size: 14px; - color: #e95d5d; - font-weight: bold; - margin-top: 4px; - } - } - - .button-group { - display: flex; - gap: 8px; - margin-top: 12px; - - .detail-btn { - flex: 1; - background-color: #e95d5d; - border: none; - } - - :deep(.van-button--default) { - color: #e95d5d; - border-color: #e95d5d; - } - } + .status-text { + color: white; + font-size: 16px; + font-weight: 500; } } + +.locker-number { + font-size: 14px; + color: #666; + margin-bottom: 4px; +} + +.goods-info { + display: flex; + flex-direction: column; + gap: 8px; + width: 100%; + + .goods-name { + white-space: normal; + word-wrap: break-word; + font-size: 12px; + color: #666; + line-height: 1.2; + width: 70%; + } + + .goods-price { + font-size: 14px; + color: #e95d5d; + font-weight: bold; + margin-top: 4px; + } +} + +.button-group { + display: flex; + gap: 8px; + margin-top: 0; + + .detail-btn { + flex: 1; + background-color: #e95d5d; + border: none; + } + + :deep(.van-button--default) { + color: #e95d5d; + border-color: #e95d5d; + } +} + +.product-list { + flex: 1; + overflow-y: auto; + padding: 10px 16px 60px; + background: #ffffff; +} + +.product-item { + margin-bottom: 10px; + padding: min(2.667vw, 20px) 0; +} + +.product-info { + display: flex; + flex-direction: column; + justify-content: space-between; + height: 100px; + position: relative; + padding-left: 3px; +} + +.goods-name { + text-align: left; +} + +.button-group { + padding: 4px; +} + +.button-group .van-button { + font-size: 12px; + height: 24px; + line-height: 22px; +} + +:deep(.van-button) { + --van-button-mini-height: 24px; + --van-button-mini-padding: 0 8px; +} + +.locker-number { + font-size: 14px; + color: #333; + line-height: 1.4; + text-align: left; +} + +.goods-price { + font-size: 16px; + color: #e95d5d; + font-weight: bold; + text-align: left; +} + +.button-group { + display: flex; + gap: 8px; + margin-top: 12px; +} + +.detail-btn { + flex: 1; + background-color: #e95d5d; + border: none; +} + +:deep(.van-button--default) { + color: #e95d5d; + border-color: #e95d5d; +} + +.info-row { + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; +} \ No newline at end of file diff --git a/src/pages/me/index.vue b/src/pages/me/index.vue index d16e6dd..6d8da21 100644 --- a/src/pages/me/index.vue +++ b/src/pages/me/index.vue @@ -74,6 +74,7 @@ const balance = computed(() => wxStore.balance) + diff --git a/src/pages/order/index.vue b/src/pages/order/index.vue index 12b3736..5a43bc5 100644 --- a/src/pages/order/index.vue +++ b/src/pages/order/index.vue @@ -1,10 +1,11 @@ @@ -62,15 +74,26 @@ onMounted(() => { />
-
- {{ item.goodsInfo.goodsName }} -
-
- ¥{{ item.goodsInfo.price.toFixed(2) }} +
+
+ {{ item.goodsInfo.goodsName }} +
+
+ ¥{{ item.orderGoods.price.toFixed(2) }} +

数量: {{ item.orderGoods.quantity }}

小计: ¥{{ (item.orderGoods.price * item.orderGoods.quantity).toFixed(2) }}

+ + 退还 +
@@ -121,9 +144,39 @@ goods-info { flex: 1; } +.product-name-price { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; +} + +.product-name { + flex: 1; + margin-right: 10px; +} + +.product-price { + color: #ee0a24; + font-weight: 500; +} .not-found { padding: 40px; text-align: center; color: #999; } + +.refund-btn { + margin-left: auto; + color: #fff; + background: #ee0a24; + border-radius: 15px; + padding: 0 12px; +} + +.action-row { + display: flex; + gap: 8px; + align-items: center; +} \ No newline at end of file diff --git a/src/router/index.ts b/src/router/index.ts index a4b414e..77d785d 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -29,6 +29,11 @@ export const systemRoutes: RouteRecordRaw[] = [ /** 业务页面 */ export const routes: RouteRecordRaw[] = [ + { + path: '/approval/submit', + component: () => import('@/pages/approval/submit.vue'), + meta: { requiresAuth: true } + }, { path: '/order-success', name: 'OrderSuccess', @@ -64,11 +69,11 @@ export const routes: RouteRecordRaw[] = [ } }, { - path: "/", - component: () => import("@/pages/product/ProductList.vue"), - name: "ProductList", + path: '/cabinet', + component: () => import('@/pages/cabinet/index.vue'), + name: "Cabinet", meta: { - title: "商品列表", + title: '柜机管理', keepAlive: true, layout: { navBar: { @@ -76,18 +81,18 @@ export const routes: RouteRecordRaw[] = [ showLeftArrow: false }, tabbar: { - showTabbar: true, + showTabbar: false, icon: "home-o" } } } }, { - path: '/cabinet', - component: () => import('@/pages/cabinet/index.vue'), - name: "Cabinet", + path: "/", + component: () => import("@/pages/product/ProductList.vue"), + name: "ProductList", meta: { - title: '柜机管理', + title: "商品列表", keepAlive: true, layout: { navBar: { @@ -122,6 +127,11 @@ export const routes: RouteRecordRaw[] = [ ] /* export const routes: RouteRecordRaw[] = [ + { + path: '/approval/submit', + component: () => import('@/pages/approval/submit.vue'), + meta: { requiresAuth: true } + }, { path: '/order-success', name: 'OrderSuccess',