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') }}
+
@@ -38,16 +40,18 @@
{{ t('mobile.pay.refundApply.selectProducts') }}
- {{ t('mobile.pay.refundApply.selectProductsHint') }}
+ {{
+ t('mobile.pay.refundApply.selectProductsHint') }}
- {{ allRemainingSelected ? t('mobile.pay.refundApply.allSelected') : t('mobile.pay.refundApply.selectAll') }}
+ {{ allRemainingSelected ? t('mobile.pay.refundApply.allSelected') :
+ t('mobile.pay.refundApply.selectAll') }}
@@ -56,7 +60,8 @@
{{ t('mobile.pay.refundApply.noRefundableProducts') }}
- {{ t('mobile.pay.refundApply.contactMerchant') }}
+ {{ t('mobile.pay.refundApply.contactMerchant') }}
+
@@ -72,26 +77,36 @@
¥
{{ money(product.productPrice)
}}
- {{ t('mobile.pay.refundApply.perUnit') }}
+ {{
+ t('mobile.pay.refundApply.perUnit') }}
- {{ t('mobile.pay.refundApply.purchased', { count: product.originalCount }) }}
- {{ t('mobile.pay.refundApply.refunded', { count: product.refundedCount }) }}
- {{ t('mobile.pay.refundApply.remaining', { count: product.refundableCount }) }}
+ {{ t('mobile.pay.refundApply.purchased', { count: product.originalCount })
+ }}
+ {{ t('mobile.pay.refundApply.refunded', { count: product.refundedCount })
+ }}
+ {{ t('mobile.pay.refundApply.remaining', {
+ count: product.refundableCount
+ }) }}
- {{ t('mobile.pay.refundApply.weightedProduct') }}
+ {{
+ t('mobile.pay.refundApply.weightedProduct') }}
- {{ t('mobile.pay.refundApply.estimatedRefund', { amount: money(estimateProductRefund(product)) }) }}
+ {{ t('mobile.pay.refundApply.estimatedRefund', {
+ amount:
+ money(estimateProductRefund(product))
+ }) }}
{{ t('mobile.pay.refundApply.selectRefundQty') }}
- {{ t('mobile.pay.refundApply.noRefundableQty') }}
+ {{
+ t('mobile.pay.refundApply.noRefundableQty') }}
@@ -134,7 +149,8 @@
{{ t('mobile.pay.refundApply.weightedOnly') }}
- {{ t('mobile.pay.refundApply.weightedOnlyHint') }}
+ {{
+ t('mobile.pay.refundApply.weightedOnlyHint') }}
@@ -151,9 +167,11 @@
v-model:model-str="applyForm.reasonText" :list="reasonOptions">
- *{{ t('mobile.pay.refundApply.refundReason') }}
+ *{{
+ t('mobile.pay.refundApply.refundReason') }}
- {{ applyForm.reasonText || t('mobile.pay.refundApply.selectPlaceholder') }}
+ {{ applyForm.reasonText ||
+ t('mobile.pay.refundApply.selectPlaceholder') }}
@@ -164,11 +182,13 @@
{{ t('mobile.pay.refundApply.proofTitle') }}
- {{ t('mobile.pay.refundApply.proofOptional') }}
+ {{ t('mobile.pay.refundApply.proofOptional') }}
+
+ :header="uploadHeader" :maxCount="6" :column="4" img-height="142"
+ :permissionFeature="t('mobile.pay.refundApply.proofPermission')" />
@@ -198,20 +218,25 @@
- {{ t('mobile.pay.refundApply.estimatedRefundLabel') }}
+ {{ t('mobile.pay.refundApply.estimatedRefundLabel')
+ }}
¥
{{ money(selectedRefundPrice)
}}
- {{ selectedProductCount > 0 ? t('mobile.pay.refundApply.selectedSummary', { productCount: selectedProductCount, unitCount: selectedUnitCount }) :
+ {{ selectedProductCount > 0 ? t('mobile.pay.refundApply.selectedSummary', {
+ productCount:
+ selectedProductCount, unitCount: selectedUnitCount
+ }) :
submitHint }}
{{ submitButtonText }}
+ :tabindex="submitDisabled ? -1 : 0" :aria-disabled="submitDisabled"
+ :aria-label="t('mobile.pay.refundApply.submitAria')" @tap="!submitDisabled && submitRefund()">{{
+ submitButtonText }}
@@ -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)
@@ -165,7 +165,8 @@ const canRecharge = (wallet: any) => wallet?.walletTypeUniqueCode == 1
- {{ t('mobile.wallet.cardNumber') }} {{ v.cardNumber }}
+ {{ t('mobile.wallet.cardNumber') }} {{
+ v.cardNumber }}
wallet?.walletTypeUniqueCode == 1
- {{ t('mobile.wallet.statusNormal') }}
- {{ t('mobile.wallet.statusFrozen') }}
+ {{ t('mobile.wallet.statusNormal')
+ }}
+ {{ t('mobile.wallet.statusFrozen')
+ }}
@@ -193,7 +196,8 @@ const canRecharge = (wallet: any) => wallet?.walletTypeUniqueCode == 1
- {{ t('mobile.wallet.transfer') }}
+ {{
+ t('mobile.wallet.transfer') }}
{{ t('mobile.wallet.applyFreeze') }}
@@ -210,30 +214,34 @@ const canRecharge = (wallet: any) => wallet?.walletTypeUniqueCode == 1
-
+
-
+
- {{ t('mobile.wallet.bind') }}
+ {{
+ t('mobile.wallet.bind') }}
-
+
-
+
- {{ t('mobile.wallet.freeze') }}
+ {{
+ t('mobile.wallet.freeze') }}
-
+
diff --git a/src/sheep/components/order/daily-menu-cart-drawer.vue b/src/sheep/components/order/daily-menu-cart-drawer.vue
index 76315fc..924a92b 100644
--- a/src/sheep/components/order/daily-menu-cart-drawer.vue
+++ b/src/sheep/components/order/daily-menu-cart-drawer.vue
@@ -12,19 +12,23 @@
- {{ t('mobile.dailyMenu.cart.segmentCount', { meals: props.draftGroups.length, foods: props.totalFoodCount }) }}
+ {{ t('mobile.dailyMenu.cart.segmentCount', {
+ meals: props.draftGroups.length, foods:
+ props.totalFoodCount
+ }) }}
- {{ t('mobile.dailyMenu.cart.clear') }}
+ {{
+ t('mobile.dailyMenu.cart.clear') }}