From f2a2aebee4e915e53f91ceda866067c9a8946547 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Thu, 3 Sep 2026 17:25:12 +0800 Subject: [PATCH 1/3] 1111111 --- src/i18n/pages/pay/en.ts | 15 ---- src/manifest.json | 4 +- .../table-reservation-time-select.vue | 8 ++- src/pages/order/daily-menu-confirm.vue | 24 ++++--- src/pages/pay/refund-apply.vue | 72 +++++++++++++------ src/pages/wallet/detail.vue | 32 ++++++--- src/pages/wallet/list.vue | 40 ++++++----- .../order/daily-menu-cart-drawer.vue | 25 +++++-- .../user/reserve-diners-trigger.vue | 2 +- 9 files changed, 137 insertions(+), 85 deletions(-) diff --git a/src/i18n/pages/pay/en.ts b/src/i18n/pages/pay/en.ts index 60448a8..16a3121 100644 --- a/src/i18n/pages/pay/en.ts +++ b/src/i18n/pages/pay/en.ts @@ -1,9 +1,6 @@ export default { - mobile: { - pay: { - selectWallet: "Select wallet:", balance: "Balance:", @@ -297,7 +294,6 @@ export default { duplicateDinerWallet: "Duplicate meal card data for {name}. Contact admin.", refundApply: { - pageTitle: "Request refund", loadFail: "Failed to load refund info", @@ -417,11 +413,9 @@ export default { increaseQtyAria: "Increase refund qty for {productName}", qtyAria: "{productName} refund qty {count}", - }, refundHistory: { - pageTitle: "Refund progress", loadFail: "Failed to load refund progress", @@ -467,7 +461,6 @@ export default { statusUpdated: "Refund status updated", status: { - pendingReview: { title: "Refund under review", desc: "Merchant is processing. See updates below.", label: "Reviewing" }, completed: { title: "Refund completed", desc: "Confirmed. Arrival per payment channel.", label: "Completed" }, @@ -477,24 +470,16 @@ export default { rejected: { title: "Refund rejected", desc: "Not approved. See records below.", label: "Rejected" }, updated: { title: "Progress updated", desc: "Status reflects latest server records", label: "Updated" }, - }, auto: { - completed: { title: "Refund completed", desc: "Auto refund done. Check meal card balance.", label: "Completed" }, waitRetry: { title: "Waiting for auto refund", desc: "Will retry automatically. No resubmit needed.", label: "Retry pending" }, processing: { title: "Auto refund in progress", desc: "Processing without merchant review.", label: "Auto processing" }, - }, - }, - }, - }, - } - diff --git a/src/manifest.json b/src/manifest.json index 42f06c8..7b26966 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -2,8 +2,8 @@ "name" : "资安信", "appid" : "__UNI__1BFE88F", "description" : "资安信后勤管理系统", - "versionName" : "1.5.33", - "versionCode" : 1533, + "versionName" : "1.5.35", + "versionCode" : 1535, "transformPx" : false, /* 5+App特有相关 */ "app-plus" : { diff --git a/src/pages/order/components/table-reservation-time-select.vue b/src/pages/order/components/table-reservation-time-select.vue index 65c667e..03ea582 100644 --- a/src/pages/order/components/table-reservation-time-select.vue +++ b/src/pages/order/components/table-reservation-time-select.vue @@ -75,6 +75,7 @@ import { useI18n } from "vue-i18n" import dayjs from "dayjs" import { orderApi } from "@@/api" +import { hooks } from "@@/index" import ServiceText from "@@/components/common/service-text.vue" @@ -129,9 +130,10 @@ const getOptionId = (option: ApptOption) => option.reserveMode === WEEKLY_CYCLE ? `cycle:${option.apptRuleId ?? ""}:${option.hourType ?? ""}` : `appt:${option.id ?? ""}` -const getOptionTitle = (option: ApptOption) => option.reserveMode === WEEKLY_CYCLE - ? option.hourTypeName || option.title || t("mobile.tableReservation.mealDefault") - : option.title || option.hourTypeName || t("mobile.tableReservation.mealDefault") +/** 已知餐段按当前语言展示,未知协议值保留服务端标题以兼容自定义餐段。 */ +const getOptionTitle = (option: ApptOption) => hooks.useEnum("hardHourTypeEnum", option.hourType) + || (option.reserveMode === WEEKLY_CYCLE ? option.hourTypeName || option.title : option.title || option.hourTypeName) + || t("mobile.tableReservation.mealDefault") const formatMonthDay = (value: string) => dayjs(value).format("MM/DD") diff --git a/src/pages/order/daily-menu-confirm.vue b/src/pages/order/daily-menu-confirm.vue index 67e5f5d..5bf3532 100644 --- a/src/pages/order/daily-menu-confirm.vue +++ b/src/pages/order/daily-menu-confirm.vue @@ -98,8 +98,8 @@ t('mobile.dailyMenu.bookedEmpty') }} - {{ formatReservationDate(bookedMenus[0]?.apptUseDate) }} · {{ bookedMenus[0]?.apptTitle || - t('mobile.dailyMenu.mealSlot') }} + {{ formatReservationDate(bookedMenus[0]?.apptUseDate) }} · {{ + resolveMealTitle(bookedMenus[0]) }} · {{ bookedFoodSummary(bookedMenus[0]) }} @@ -118,8 +118,7 @@ {{ formatReservationDate(reservation.apptUseDate) }} - {{ hooks.useEnum("hardHourTypeEnum", reservation.hourType) || - t("mobile.dailyMenu.mealSlot") }} + {{ resolveMealTitle(reservation) }} @@ -502,8 +501,13 @@ const resolveDailyMenuCartUserId = () => String(userStore.userId || userStore.us const createDraftKey = (apptDate: string, hourType: string | number) => apptDate && String(hourType) ? `${apptDate}::${String(hourType)}` : "" -/** 解析预约选项的餐段名称,优先使用服务端展示文案。 */ -const resolveMealTitle = (apptObj: any) => apptObj?.hourTypeName || apptObj?.title || t("mobile.dailyMenu.mealSlot") +/** 已知餐段按当前语言展示,未知协议值保留服务端标题以兼容自定义餐段和历史订单。 */ +const resolveMealTitle = (apptObj: any) => hooks.useEnum("hardHourTypeEnum", apptObj?.hourType) + || apptObj?.hourTypeName + || apptObj?.title + || apptObj?.apptTitle + || apptObj?.mealTitle + || t("mobile.dailyMenu.mealSlot") /** 将预约日期格式化为适合移动端阅读的日期和星期。 */ const formatReservationDate = (value?: string) => { @@ -611,7 +615,7 @@ const removeDraftGroup = (draftKey: string) => { title: t("mobile.dailyMenu.modal.removeMealTitle"), content: t("mobile.dailyMenu.modal.removeMealContent", { date: formatReservationDate(draft.apptDate), - meal: draft.mealTitle, + meal: resolveMealTitle(draft), }), confirmColor: "#d92d20", success: (result) => { @@ -778,7 +782,7 @@ const formatDraftFoodSelection = (draft: ReservationDraft, item: DailyMenuItem) const foodName = String(item.name || "").trim() || t("mobile.dailyMenu.reconcile.foodIdFallback", { id: String(item.spuId || item.id || t("mobile.dailyMenu.reconcile.unknownId")), }) - return `${formatReservationDate(draft.apptDate)} ${draft.mealTitle}:${foodName}` + return `${formatReservationDate(draft.apptDate)} ${resolveMealTitle(draft)}:${foodName}` } /** @@ -947,7 +951,7 @@ const showSameMealReservationConflict = (conflicts: ReturnType - `${formatReservationDate(draft.apptDate)} ${draft.mealTitle}${t("mobile.dailyMenu.modal.dupPeople", { count: dinerUserIds.length })}`, + `${formatReservationDate(draft.apptDate)} ${resolveMealTitle(draft)}${t("mobile.dailyMenu.modal.dupPeople", { count: dinerUserIds.length })}`, ) const remainingCount = Math.max(conflicts.length - summaries.length, 0) viewState.bookedMenusExpanded = true @@ -1118,7 +1122,7 @@ const submitDrafts = async () => { uni.showToast({ title: t("mobile.dailyMenu.toast.singleMealOnly", { date: formatReservationDate(invalidDraft.apptDate), - meal: invalidDraft.mealTitle, + meal: resolveMealTitle(invalidDraft), }), icon: "none", }) diff --git a/src/pages/pay/refund-apply.vue b/src/pages/pay/refund-apply.vue index 7016488..bc87b3a 100644 --- a/src/pages/pay/refund-apply.vue +++ b/src/pages/pay/refund-apply.vue @@ -26,9 +26,11 @@ {{ t('mobile.pay.refundApply.loadFail') }} - {{ t('mobile.pay.refundApply.loadFailHint') }} + {{ t('mobile.pay.refundApply.loadFailHint') + }} {{ t('mobile.pay.reload') }} + :aria-label="t('mobile.pay.refundApply.reloadAria')" @tap="loadPage">{{ t('mobile.pay.reload') }} + @@ -536,6 +561,7 @@ function confirmSubmit(): Promise { amount: money(selectedRefundPrice.value), processingText, }), + cancelText: t('common.cancel'), confirmText: t('mobile.pay.refundApply.confirmSubmit'), confirmColor: "#0094ff", success: (result) => resolve(Boolean(result.confirm)), @@ -827,7 +853,7 @@ async function submitRefund() { .submit-button { display: flex; - min-width: 184rpx; + min-width: 220rpx; height: 88rpx; flex-shrink: 0; align-items: center; diff --git a/src/pages/wallet/detail.vue b/src/pages/wallet/detail.vue index 90131e4..2684be5 100644 --- a/src/pages/wallet/detail.vue +++ b/src/pages/wallet/detail.vue @@ -144,17 +144,31 @@ const doTab = (e: any) => { - - {{ t('mobile.wallet.txUpdateBalance') }} - {{ t('mobile.wallet.txBatchUpdateBalance') }} - {{ t('mobile.wallet.txRecharge') }} - {{ t('mobile.wallet.txPay') }} - {{ t('mobile.wallet.txRefund') }} - {{ t('mobile.wallet.txTransfer') }} - {{ t('mobile.wallet.txTransferRefund') }} + + {{ t('mobile.wallet.txUpdateBalance') }} + + {{ t('mobile.wallet.txBatchUpdateBalance') }} + + + {{ t('mobile.wallet.txRecharge') }} + + + {{ t('mobile.wallet.txPay') }} + + + {{ t('mobile.wallet.txRefund') }} + + + {{ t('mobile.wallet.txTransfer') }} + + + {{ t('mobile.wallet.txTransferRefund') }} + - {{ hooks.useMoney(v.price) }}{{ t('mobile.wallet.currencyUnit') }} + + {{ hooks.useMoney(v.price) }}{{ t('mobile.wallet.currencyUnit') }} + diff --git a/src/pages/wallet/list.vue b/src/pages/wallet/list.vue index 5cb6ee9..1c0a073 100644 --- a/src/pages/wallet/list.vue +++ b/src/pages/wallet/list.vue @@ -41,7 +41,7 @@ onLoad(() => { }) onShow(async () => { const isLogin = await hooks.useCheckLogin() if (!isLogin) return - await userStore._getUserZsMch() + await userStore._getUserZsMch() if (pageRef.value) { pageRef.value.reload(false) } @@ -151,7 +151,7 @@ const doTransferMoney = (v: any) => { * 后端返回的 identityTypes 是钱包所属用户身份,不能使用当前登录用户身份替代。 */ const canRecharge = (wallet: any) => wallet?.walletTypeUniqueCode == 1 - && userStore.isTopUpIdentityAllowed(wallet?.identityTypes) + && userStore.isTopUpIdentityAllowed(wallet?.identityTypes)