From e084cdeb908f5d00504678bba49d82ca7da3f7f6 Mon Sep 17 00:00:00 2001 From: luo Date: Mon, 26 Oct 2026 15:00:05 +0800 Subject: [PATCH] fix: some --- api/modules/asset.js | 48 +++--- components/TrafficCard.vue | 65 ++------ pages/index/index.vue | 49 +++--- pages/order-list/order-list.vue | 23 +-- pages/package-order/package-order.vue | 61 ++++---- tests/october-h5.test.mjs | 212 +++++++++++++++++++++++++- 6 files changed, 318 insertions(+), 140 deletions(-) diff --git a/api/modules/asset.js b/api/modules/asset.js index a9bff8f..ade50d8 100644 --- a/api/modules/asset.js +++ b/api/modules/asset.js @@ -3,24 +3,30 @@ import { useAssetStore } from '@/store/asset.js'; import { useUserStore } from '@/store/user.js'; import { getSessionContext, isCurrentSession } from '@/utils/session-context.js'; -export const normalizeAssetInfo = (data = {}) => ({ - ...data, - allowed_payment_methods: Array.isArray(data.allowed_payment_methods) - ? data.allowed_payment_methods - : [], - real_name_status: data.real_name_status === undefined || data.real_name_status === null - ? data.real_name_status - : Number(data.real_name_status), - realname_required: data.realname_required === undefined || data.realname_required === null - ? data.realname_required - : data.realname_required === true || data.realname_required === 1, - days_until_final_expiry: data.days_until_final_expiry === null || data.days_until_final_expiry === undefined - ? data.days_until_final_expiry - : Number(data.days_until_final_expiry), - is_expiring: data.is_expiring === undefined || data.is_expiring === null - ? data.is_expiring - : data.is_expiring === true || data.is_expiring === 1 -}); +let assetInfoRequestId = 0; + +export const normalizeAssetInfo = (data = {}) => { + // 保护期已下线:不向展示和业务判断透传废弃字段,兼容 none 或字段缺失。 + const { device_protect_status, ...info } = data; + return { + ...info, + allowed_payment_methods: Array.isArray(data.allowed_payment_methods) + ? data.allowed_payment_methods + : [], + real_name_status: data.real_name_status === undefined || data.real_name_status === null + ? data.real_name_status + : Number(data.real_name_status), + realname_required: data.realname_required === undefined || data.realname_required === null + ? data.realname_required + : data.realname_required === true || data.realname_required === 1, + days_until_final_expiry: data.days_until_final_expiry === null || data.days_until_final_expiry === undefined + ? data.days_until_final_expiry + : Number(data.days_until_final_expiry), + is_expiring: data.is_expiring === undefined || data.is_expiring === null + ? data.is_expiring + : data.is_expiring === true || data.is_expiring === 1 + }; +}; const normalizePackageHistoryNode = (node = {}) => ({ ...node, @@ -69,6 +75,7 @@ export const assetApi = { return Promise.reject({ msg: '登录和微信配置尚未完成,请稍后重试' }); } const phoneRevision = userStore.state.phoneRevision; + const requestId = identifier === context.identifier ? ++assetInfoRequestId : null; return request({ url: '/api/c/v1/asset/info', method: 'GET', @@ -76,7 +83,10 @@ export const assetApi = { }).then((response) => { const data = normalizeAssetInfo(response); if (identifier === context.identifier && isCurrentSession(context)) { - useAssetStore().receiveExpiryReminder(context, data.expiry_reminder); + const assetStore = useAssetStore(); + // 替换整个快照,不合并旧轮询开关;迟到的旧请求不得覆盖新状态。 + if (requestId === assetInfoRequestId) assetStore.setAssetInfo(data); + assetStore.receiveExpiryReminder(context, data.expiry_reminder); if (phoneRevision === userStore.state.phoneRevision && typeof data.bound_phone === 'string') { userStore.setCustomerPhone(data.bound_phone); } diff --git a/components/TrafficCard.vue b/components/TrafficCard.vue index 3f1297f..7193908 100644 --- a/components/TrafficCard.vue +++ b/components/TrafficCard.vue @@ -40,32 +40,23 @@