From 838f05b3c033fdc7225a9b6203c966ff3037eca5 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Wed, 11 Mar 2026 17:07:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=BF=81=E7=A7=BB=E8=BF=87=E5=8E=BB?= =?UTF-8?q?=E4=B8=80=E9=83=A8=E9=97=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/global.d.ts | 12 + src/pages.json | 166 +++++++ src/pages/boxes/list.vue | 271 +++++++++++ src/pages/canteen/components/product-cart.vue | 53 ++ src/pages/canteen/components/product-row.vue | 79 +++ .../canteen/components/product-total.vue | 38 ++ src/pages/canteen/detail.vue | 459 ++++++++++++++++++ src/pages/canteen/food.vue | 169 +++++++ src/pages/canteen/product-detail.vue | 73 +++ src/pages/car/user-car/apply.vue | 111 +++++ src/pages/car/user-car/list.vue | 81 ++++ src/pages/human-face/apply.vue | 106 ++++ src/pages/human-face/list.vue | 75 +++ src/pages/order/detail.vue | 235 +++++++++ src/pages/pay/payComplete.vue | 53 ++ src/pages/pay/scanPay.vue | 172 +++++++ src/pages/pay/transferMoney.vue | 179 +++++++ src/pages/root/login.vue | 23 +- src/pages/root/pwd-login.vue | 128 +++++ src/pages/tabbar/canteen.vue | 18 - src/pages/tabbar/my.vue | 18 - src/pages/tabbar/order.vue | 178 ++++--- src/sheep/api/user.ts | 12 +- src/sheep/components/modify-user.vue | 100 ++++ .../tongtong-plate/plate-keyboard.vue | 277 +++++++++++ .../tongtong-plate/plate-number.vue | 312 ++++++++++++ src/sheep/utils/request.ts | 29 +- src/static/page/address.svg | 16 + src/static/page/arrow-down-s-fill.svg | 1 + src/static/page/arrow-right.svg | 1 + src/static/page/fold.svg | 1 + src/static/page/keyboard-delete.svg | 26 + src/static/page/money-cny-circle-fill.svg | 1 + src/static/page/phone.svg | 16 + src/static/page/unfold.svg | 1 + 35 files changed, 3372 insertions(+), 118 deletions(-) create mode 100644 src/pages/boxes/list.vue create mode 100644 src/pages/canteen/components/product-cart.vue create mode 100644 src/pages/canteen/components/product-row.vue create mode 100644 src/pages/canteen/components/product-total.vue create mode 100644 src/pages/canteen/detail.vue create mode 100644 src/pages/canteen/food.vue create mode 100644 src/pages/canteen/product-detail.vue create mode 100644 src/pages/car/user-car/apply.vue create mode 100644 src/pages/car/user-car/list.vue create mode 100644 src/pages/human-face/apply.vue create mode 100644 src/pages/human-face/list.vue create mode 100644 src/pages/order/detail.vue create mode 100644 src/pages/pay/payComplete.vue create mode 100644 src/pages/pay/scanPay.vue create mode 100644 src/pages/pay/transferMoney.vue create mode 100644 src/pages/root/pwd-login.vue create mode 100644 src/sheep/components/modify-user.vue create mode 100644 src/sheep/components/tongtong-plate/plate-keyboard.vue create mode 100644 src/sheep/components/tongtong-plate/plate-number.vue create mode 100644 src/static/page/address.svg create mode 100644 src/static/page/arrow-down-s-fill.svg create mode 100644 src/static/page/arrow-right.svg create mode 100644 src/static/page/fold.svg create mode 100644 src/static/page/keyboard-delete.svg create mode 100644 src/static/page/money-cny-circle-fill.svg create mode 100644 src/static/page/phone.svg create mode 100644 src/static/page/unfold.svg diff --git a/src/global.d.ts b/src/global.d.ts index 1b626d4..852079c 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -7,4 +7,16 @@ declare namespace GlobalSetting { username: string password: string } + // token相关 + type TokenStorage = { + accessToken: string + refreshToken: string + accessTokenExpiresIn: string + refreshTokenExpiresIn: string + } + // 记住密码 + type RememberUser = { + username: string + password: string + } } diff --git a/src/pages.json b/src/pages.json index a0ddbcd..b50f28e 100644 --- a/src/pages.json +++ b/src/pages.json @@ -36,9 +36,42 @@ "navigationBarTitleText": "登录", "disableScroll": true } + }, + { + "path": "pages/root/pwd-login", + "style": { + "navigationBarTitleText": "账号密码登录", + "disableScroll": true + } } ], "subPackages": [ + { + "root": "pages/canteen", + "pages": [ + { + "path": "detail", + "style": { + "navigationBarTitleText": "", + "disableScroll": true + } + }, + { + "path": "food", + "style": { + "navigationBarTitleText": "", + "disableScroll": true + } + }, + { + "path": "product-detail", + "style": { + "navigationBarTitleText": "", + "disableScroll": true + } + } + ] + }, { "root": "pages/wallet", "pages": [ @@ -64,6 +97,139 @@ } } ] + }, + { + "root": "pages/boxes", + "pages": [ + { + "path": "list", + "style": { + "navigationBarTitleText": "", + "disableScroll": true + } + } + ] + }, + { + "root": "pages/order", + "pages": [ + { + "path": "detail", + "style": { + "navigationBarTitleText": "", + "disableScroll": true + } + } + ] + }, + { + "root": "pages/merchant", + "pages": [ + { + "path": "detail", + "style": { + "navigationBarTitleText": "商户详情", + "disableScroll": true + } + }, + { + "path": "brandDetail", + "style": { + "navigationBarTitleText": "商户品牌详情", + "disableScroll": true + } + }, + { + "path": "cancel-qrcode", + "style": { + "navigationBarTitleText": "活动", + "disableScroll": true + } + }, + { + "path": "my-act-list", + "style": { + "navigationBarTitleText": "我参加的活动", + "disableScroll": true + } + }, + { + "path": "merchant-activity", + "style": { + "navigationBarTitleText": "商户活动", + "disableScroll": true + } + }, + { + "path": "coupon-list", + "style": { + "navigationBarTitleText": "优惠券列表", + "disableScroll": true + } + } + ] + }, + { + "root": "pages/pay", + "pages": [ + { + "path": "scanPay", + "style": { + "navigationBarTitleText": "支付", + "disableScroll": true + } + }, + { + "path": "payComplete", + "style": { + "navigationBarTitleText": "支付完成", + "disableScroll": true + } + }, + { + "path": "transferMoney", + "style": { + "navigationBarTitleText": "转账", + "disableScroll": true + } + } + ] + }, + { + "root": "pages/human-face", + "pages": [ + { + "path": "list", + "style": { + "navigationBarTitleText": "", + "disableScroll": true + } + }, + { + "path": "apply", + "style": { + "navigationBarTitleText": "", + "disableScroll": true + } + } + ] + }, + { + "root": "pages/car", + "pages": [ + { + "path": "user-car/apply", + "style": { + "navigationBarTitleText": "申请车辆" + } + }, + { + "path": "user-car/list", + "style": { + "navigationBarTitleText": "我的车辆" + } + } + ] } ], "globalStyle": { diff --git a/src/pages/boxes/list.vue b/src/pages/boxes/list.vue new file mode 100644 index 0000000..1990880 --- /dev/null +++ b/src/pages/boxes/list.vue @@ -0,0 +1,271 @@ + + + + + diff --git a/src/pages/canteen/components/product-cart.vue b/src/pages/canteen/components/product-cart.vue new file mode 100644 index 0000000..6d0129e --- /dev/null +++ b/src/pages/canteen/components/product-cart.vue @@ -0,0 +1,53 @@ + + + diff --git a/src/pages/canteen/components/product-row.vue b/src/pages/canteen/components/product-row.vue new file mode 100644 index 0000000..7660070 --- /dev/null +++ b/src/pages/canteen/components/product-row.vue @@ -0,0 +1,79 @@ + + + diff --git a/src/pages/canteen/components/product-total.vue b/src/pages/canteen/components/product-total.vue new file mode 100644 index 0000000..b5a0a6d --- /dev/null +++ b/src/pages/canteen/components/product-total.vue @@ -0,0 +1,38 @@ + + + diff --git a/src/pages/canteen/detail.vue b/src/pages/canteen/detail.vue new file mode 100644 index 0000000..912cd17 --- /dev/null +++ b/src/pages/canteen/detail.vue @@ -0,0 +1,459 @@ + + + + + diff --git a/src/pages/canteen/food.vue b/src/pages/canteen/food.vue new file mode 100644 index 0000000..d68fe1d --- /dev/null +++ b/src/pages/canteen/food.vue @@ -0,0 +1,169 @@ + + + + + diff --git a/src/pages/canteen/product-detail.vue b/src/pages/canteen/product-detail.vue new file mode 100644 index 0000000..96731b0 --- /dev/null +++ b/src/pages/canteen/product-detail.vue @@ -0,0 +1,73 @@ + + + + + diff --git a/src/pages/car/user-car/apply.vue b/src/pages/car/user-car/apply.vue new file mode 100644 index 0000000..9f08613 --- /dev/null +++ b/src/pages/car/user-car/apply.vue @@ -0,0 +1,111 @@ + + + + + \ No newline at end of file diff --git a/src/pages/car/user-car/list.vue b/src/pages/car/user-car/list.vue new file mode 100644 index 0000000..39d384c --- /dev/null +++ b/src/pages/car/user-car/list.vue @@ -0,0 +1,81 @@ + + + \ No newline at end of file diff --git a/src/pages/human-face/apply.vue b/src/pages/human-face/apply.vue new file mode 100644 index 0000000..407680a --- /dev/null +++ b/src/pages/human-face/apply.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/src/pages/human-face/list.vue b/src/pages/human-face/list.vue new file mode 100644 index 0000000..605f018 --- /dev/null +++ b/src/pages/human-face/list.vue @@ -0,0 +1,75 @@ + + + diff --git a/src/pages/order/detail.vue b/src/pages/order/detail.vue new file mode 100644 index 0000000..c62817d --- /dev/null +++ b/src/pages/order/detail.vue @@ -0,0 +1,235 @@ + + + + + diff --git a/src/pages/pay/payComplete.vue b/src/pages/pay/payComplete.vue new file mode 100644 index 0000000..e83550e --- /dev/null +++ b/src/pages/pay/payComplete.vue @@ -0,0 +1,53 @@ + + + diff --git a/src/pages/pay/scanPay.vue b/src/pages/pay/scanPay.vue new file mode 100644 index 0000000..3d8b19c --- /dev/null +++ b/src/pages/pay/scanPay.vue @@ -0,0 +1,172 @@ + + + diff --git a/src/pages/pay/transferMoney.vue b/src/pages/pay/transferMoney.vue new file mode 100644 index 0000000..df84137 --- /dev/null +++ b/src/pages/pay/transferMoney.vue @@ -0,0 +1,179 @@ + + + diff --git a/src/pages/root/login.vue b/src/pages/root/login.vue index 20571cd..bb7f703 100644 --- a/src/pages/root/login.vue +++ b/src/pages/root/login.vue @@ -13,7 +13,6 @@ const affirmModalRef = ref() const state = reactive({ userInfo: null, isAgree: false, - loginErrorVisible: false, loginErrorCode: null, }) @@ -47,12 +46,18 @@ const minAppGetphone = async (e) => { uni.hideLoading() return } + uni.setStorageSync(constant.storageConstant.TOKEN, { + accessToken: data.accessToken.tokenValue, + accessTokenExpiresIn: data.accessToken.expiresAt, + refreshToken: data.refreshToken.tokenValue, + refreshTokenExpiresIn: data.refreshToken.expiresAt, + } as GlobalSetting.TokenStorage) + // 查询用户信息 const { data: userData } = await userApi.userInfo() uni.setStorageSync(constant.storageConstant.USERINFO, userData) - uni.setStorageSync(constant.storageConstant.TOKEN, data) uni.hideLoading() uni.showToast({ title: "登录成功", icon: "success" }) - router.jump("/pages/tabbar/canteen") + router.jump("/pages/tabbar/canteen", {}, 3) } catch (error) { console.error("登录错误", error); } @@ -91,6 +96,10 @@ const affirmConfirm = () => { + + + 账号密码登录 + @@ -113,10 +122,4 @@ const affirmConfirm = () => { - + diff --git a/src/pages/root/pwd-login.vue b/src/pages/root/pwd-login.vue new file mode 100644 index 0000000..5431a2a --- /dev/null +++ b/src/pages/root/pwd-login.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/pages/tabbar/canteen.vue b/src/pages/tabbar/canteen.vue index a945f13..d310986 100644 --- a/src/pages/tabbar/canteen.vue +++ b/src/pages/tabbar/canteen.vue @@ -26,7 +26,6 @@ onShow(() => { if (app._initTabbar) { app._initTabbar() } - reportPageAccess("pages/tabbar/canteen") if (pageRef.value) { pageRef.value.reload(false) } @@ -48,23 +47,6 @@ const toDetail = async (v: any) => { router.jump("/pages/canteen/detail", { id: v.id }) } } - -const createEventId = () => `evt_${Date.now()}_${Math.random().toString(36).slice(2, 10)}` -const reportPageAccess = async (pageCode: string) => { - const tokenStorage: any = uni.getStorageSync(STORAGE_KEYS.TOKEN) - const userInfo: any = uni.getStorageSync(STORAGE_KEYS.USER_INFO) - if (!userInfo?.sysUser?.userId) return - const systemInfo = uni.getSystemInfoSync() - await accessStatsApi.track({ - eventId: createEventId(), - pageCode, - userId: userInfo?.sysUser?.userId, - eventTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), - deviceId: tokenStorage?.access_token || "", - clientType: systemInfo?.platform || "", - osVersion: systemInfo?.system || "", - }) -}