feat:快捷充值、快捷查看流水
This commit is contained in:
1 parent
cc89123dd1
commit
c9db4f11a4
8 files changed
+88
-6
No files matched your search
@@ -35,15 +35,15 @@ VITE_OAUTH2_SOCIAL_CLIENT='social:social'
|
||||
# 是否开启websocket 消息接受,
|
||||
VITE_WEBSOCKET_ENABLE = true
|
||||
# --------------------------- start 开发环境 start ----------------------------------
|
||||
# VITE_APP_DEV_SERVICE = https://www.zianxin.com/api
|
||||
VITE_APP_DEV_SERVICE = https://dzc-test-1.fy.takin.cc
|
||||
VITE_APP_DEV_SERVICE = https://www.zianxin.com/api
|
||||
# VITE_APP_DEV_SERVICE = https://dzc-test-1.fy.takin.cc
|
||||
# VITE_APP_DEV_SERVICE = http://127.0.0.1:9999
|
||||
# VITE_APP_DEV_SERVICE = https://www.zianxin.com/api
|
||||
# VITE_APP_DEV_SERVICE = https://dzc-test-1.fy.takin.cc
|
||||
# VITE_APP_DEV_SERVICE = http://127.0.0.1:9999
|
||||
|
||||
# VITE_IMAGE_DEV_PATH = https://www.zianxin.com/api
|
||||
VITE_IMAGE_DEV_PATH = https://dzc-test-1.fy.takin.cc
|
||||
VITE_IMAGE_DEV_PATH = https://www.zianxin.com/api
|
||||
# VITE_IMAGE_DEV_PATH = https://dzc-test-1.fy.takin.cc
|
||||
# VITE_IMAGE_DEV_PATH = http://127.0.0.1:9999
|
||||
# VITE_IMAGE_DEV_PATH = https://www.zianxin.com/api
|
||||
# VITE_IMAGE_DEV_PATH = https://dzc-test-1.fy.takin.cc
|
||||
|
||||
@@ -30,6 +30,12 @@ export default {
|
||||
|
||||
wallet: "Wallet",
|
||||
|
||||
/** 本人默认饭卡的充值快捷入口。 */
|
||||
eatWalletTopUp: "Meal Card Top-up",
|
||||
|
||||
/** 本人默认饭卡的钱包流水快捷入口。 */
|
||||
eatWalletTransaction: "Meal Card Transactions",
|
||||
|
||||
/** 用餐历史入口名称,涵盖本人和被监护人的用餐记录。 */
|
||||
guardianWardMenu: "Meal History",
|
||||
|
||||
|
||||
@@ -30,6 +30,12 @@ export default {
|
||||
|
||||
wallet: "钱包管理",
|
||||
|
||||
/** 本人默认饭卡的充值快捷入口。 */
|
||||
eatWalletTopUp: "饭卡充值",
|
||||
|
||||
/** 本人默认饭卡的钱包流水快捷入口。 */
|
||||
eatWalletTransaction: "饭卡流水",
|
||||
|
||||
/** 用餐历史入口名称,涵盖本人和被监护人的用餐记录。 */
|
||||
guardianWardMenu: "用餐历史",
|
||||
|
||||
|
||||
@@ -30,6 +30,12 @@ export default {
|
||||
|
||||
wallet: "錢包管理",
|
||||
|
||||
/** 本人默认饭卡的充值快捷入口。 */
|
||||
eatWalletTopUp: "飯卡充值",
|
||||
|
||||
/** 本人默认饭卡的钱包流水快捷入口。 */
|
||||
eatWalletTransaction: "飯卡流水",
|
||||
|
||||
/** 用餐历史入口名称,涵盖本人和被监护人的用餐记录。 */
|
||||
guardianWardMenu: "用餐歷史",
|
||||
|
||||
|
||||
+60
-1
@@ -110,7 +110,7 @@ import { isEmpty } from "radash"
|
||||
import dayjs from "dayjs"
|
||||
import { filePath } from "@@/utils/file"
|
||||
import { hooks, router, constant } from "@@/index"
|
||||
import { accessStatsApi, actCancelApi, productApi, userApi, adApi, workbenchMenuApi } from "@@/api"
|
||||
import { accessStatsApi, actCancelApi, productApi, userApi, adApi, workbenchMenuApi, walletApi } from "@@/api"
|
||||
import {
|
||||
hasRoleCode,
|
||||
refreshUserRoleCodes,
|
||||
@@ -135,6 +135,8 @@ const { t } = useI18n()
|
||||
|
||||
type MenuKey =
|
||||
| "wallet"
|
||||
| "eatWalletTopUp"
|
||||
| "eatWalletTransaction"
|
||||
| "guardianWardMenu"
|
||||
| "relationGraph"
|
||||
| "address"
|
||||
@@ -181,6 +183,10 @@ const menuText = (key: string) => {
|
||||
/** 浅色圆底 + 原彩色图标(不做 invert,避免 App 端图标消失) */
|
||||
const MENU_THEME: Record<MenuKey, { iconBg: string; iconColor?: string }> = {
|
||||
wallet: { iconBg: "#ECFDF5" },
|
||||
/** 饭卡充值入口沿用钱包服务的浅绿图标底色。 */
|
||||
eatWalletTopUp: { iconBg: "#ECFDF5" },
|
||||
/** 饭卡流水入口与充值入口保持一致的钱包服务配色。 */
|
||||
eatWalletTransaction: { iconBg: "#ECFDF5" },
|
||||
/** 用餐历史入口沿用关系服务的浅灰图标底色。 */
|
||||
guardianWardMenu: { iconBg: "#F3F4F6" },
|
||||
relationGraph: { iconBg: "#F3F4F6" },
|
||||
@@ -206,6 +212,10 @@ const getMenuTheme = (key: MenuKey) => MENU_THEME[key] || { iconBg: "#F3F4F6" }
|
||||
/** “我的”页面固定功能入口,角色专属入口由 syncRoleMenus 按权限插入。 */
|
||||
const BASE_MENUS: MenuItem[] = [
|
||||
{ key: "wallet", icon: "/static/icon/service_3.png", path: "/pages/wallet/list" },
|
||||
/** 点击时查询本人饭卡 ID,避免将示例钱包 ID 固定给所有用户。 */
|
||||
{ key: "eatWalletTopUp", icon: "/static/icon/service_23.png", path: "/pages/wallet/recharge" },
|
||||
/** 点击时查询同一本人饭卡,直接进入已有钱包流水页。 */
|
||||
{ key: "eatWalletTransaction", icon: "/static/icon/service_22.png", path: "/pages/wallet/detail" },
|
||||
{ key: "guardianWardMenu", icon: "/static/icon/service_21.png", path: "/pages/order/guardian-ward-menu" },
|
||||
{ key: "relationGraph", icon: "/static/icon/service_14.png", path: "/pages/user/relation/tree" },
|
||||
{ key: "address", tmIcon: "map-pin-2-line", path: "/pages/user/address/index" },
|
||||
@@ -421,11 +431,60 @@ const onMessageEntryClick = async () => {
|
||||
router.jump("/pages/message/list")
|
||||
}
|
||||
|
||||
/** 钱包接口约定的本人饭卡类型编码;兼容响应中的字符串和数值编码。 */
|
||||
const EAT_WALLET_TYPE_CODE = "1"
|
||||
/** 每次查询的钱包条数;仍按服务端总页数继续查找,不能把第一页当作全部钱包。 */
|
||||
const EAT_WALLET_PAGE_SIZE = 100
|
||||
/** 两个饭卡入口共用的页面级请求锁,避免连点或交叉点击造成重复跳转。 */
|
||||
const eatWalletOpening = ref(false)
|
||||
|
||||
/**
|
||||
* 从登录用户的钱包分页中查找饭卡,再携带真实钱包 ID 打开充值或流水页。
|
||||
* 接口由服务端限定本人范围并过滤不可见钱包,不使用关系人或跨账号缓存的钱包数据。
|
||||
* @param path 固定菜单配置的充值或流水页面路径,调用前须完成登录校验。
|
||||
*/
|
||||
const openEatWallet = async (path: string) => {
|
||||
if (eatWalletOpening.value) return
|
||||
eatWalletOpening.value = true
|
||||
try {
|
||||
uni.showLoading({ title: t("common.loading"), mask: true })
|
||||
for (let current = 1, pages = 1; current <= pages; current += 1) {
|
||||
const response: any = await walletApi.all({ current, size: EAT_WALLET_PAGE_SIZE })
|
||||
if (response?.code !== 0 || !Array.isArray(response?.data?.records)) {
|
||||
throw new Error(response?.msg || t("mobile.wallet.queryWalletFail"))
|
||||
}
|
||||
const wallet = response.data.records.find(
|
||||
(item: any) => String(item?.walletTypeUniqueCode) === EAT_WALLET_TYPE_CODE,
|
||||
)
|
||||
if (wallet) {
|
||||
if (!wallet.id) throw new Error(t("mobile.wallet.missingWalletInfo"))
|
||||
uni.hideLoading()
|
||||
router.jump(path, { id: wallet.id })
|
||||
return
|
||||
}
|
||||
// 商户可见性过滤可能使当前页为空,仍以分页元数据判断是否需要继续查询。
|
||||
pages = Number(response.data.pages) || 1
|
||||
}
|
||||
throw new Error(t("mobile.wallet.wardNoCard"))
|
||||
} catch (error: any) {
|
||||
uni.hideLoading()
|
||||
console.error("打开本人饭卡钱包失败", error)
|
||||
uni.showToast({ title: error?.message || t("mobile.wallet.queryWalletFail"), icon: "none" })
|
||||
} finally {
|
||||
eatWalletOpening.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 固定功能入口统一校验登录;饭卡入口先解析本人钱包,其余入口沿用原跳转方式。 */
|
||||
const onTabMenu = async (item: MenuItem) => {
|
||||
const isLogin = await hooks.useCheckLogin()
|
||||
if (!isLogin) return
|
||||
if (item.path == "/pages/tabbar/index") return uni.switchTab({ url: item.path })
|
||||
switch (item.key) {
|
||||
case "eatWalletTopUp":
|
||||
case "eatWalletTransaction":
|
||||
await openEatWallet(item.path)
|
||||
break
|
||||
case "scan":
|
||||
await appScanCode()
|
||||
break
|
||||
|
||||
@@ -64,10 +64,15 @@ export default {
|
||||
method: "GET",
|
||||
params,
|
||||
}),
|
||||
all: (): Promise<any> =>
|
||||
/**
|
||||
* 查询当前登录用户可见的钱包分页;省略参数时保持服务端默认分页。
|
||||
* @param params 可选分页参数,current 从 1 开始,size 表示每页钱包条数。
|
||||
*/
|
||||
all: (params?: { current?: number; size?: number }): Promise<any> =>
|
||||
request({
|
||||
url: "/wallet/wallet-manage/app/get-all",
|
||||
method: "GET",
|
||||
params,
|
||||
}),
|
||||
getQrCode: (params: any) =>
|
||||
request({
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 3.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 5.0 KiB |
Reference in new issue
Block a user