fix: 沉默期已过期未延期时每次回首页都弹提醒
Some checks failed
构建并部署前端到测试环境 / build-and-deploy (push) Has been cancelled
Some checks failed
构建并部署前端到测试环境 / build-and-deploy (push) Has been cancelled
已过期(含有未支付延期订单)不再限频,直到支付或延期;待实名临近截止仍为每次登录一次
This commit is contained in:
@@ -161,7 +161,7 @@
|
||||
import { consumePendingPaymentRefresh, PAYMENT_REFRESH_TARGETS } from '@/utils/payment.js';
|
||||
import { getSessionContext, isCurrentSession } from '@/utils/session-context.js';
|
||||
import { getShanghaiDay } from '@/utils/expiry-reminder.js';
|
||||
import { pickSilenceReminder, silenceReminderKey } from '@/utils/silence.js';
|
||||
import { pickSilenceReminder, silenceReminderKey, silenceReminderRepeats } from '@/utils/silence.js';
|
||||
|
||||
const userStore = useUserStore();
|
||||
const assetStore = useAssetStore();
|
||||
@@ -202,7 +202,8 @@
|
||||
const data = await assetApi.getPackageHistory(identifier, 1, 20, { status: 0 });
|
||||
if (entryId !== homeEntryId || !homeActive.value || identifier !== String(userStore.state.identifier || '').trim()) return;
|
||||
const reminder = pickSilenceReminder(data?.items);
|
||||
if (!reminder || uni.getStorageSync(silenceReminderKey(identifier, reminder, getSessionContext().token))) return;
|
||||
if (!reminder) return;
|
||||
if (!silenceReminderRepeats(reminder) && uni.getStorageSync(silenceReminderKey(identifier, reminder, getSessionContext().token))) return;
|
||||
// 已过期的套餐再查一次延期资格:有未支付的延期订单时,弹窗改为提醒去支付或作废
|
||||
if (reminder.kind === 'expired') {
|
||||
try {
|
||||
@@ -228,7 +229,9 @@
|
||||
silenceReminder.value = null;
|
||||
return false;
|
||||
}
|
||||
uni.setStorageSync(silenceReminderKey(silenceReminderIdentifier, reminder, getSessionContext().token), 1);
|
||||
if (!silenceReminderRepeats(reminder)) {
|
||||
uni.setStorageSync(silenceReminderKey(silenceReminderIdentifier, reminder, getSessionContext().token), 1);
|
||||
}
|
||||
silenceReminderShow.value = true;
|
||||
return true;
|
||||
};
|
||||
|
||||
@@ -934,7 +934,7 @@ test('order completion and payment return reread actual asset state, not a presu
|
||||
assert.equal(reads, 4);
|
||||
});
|
||||
|
||||
test('home shows the silence reminder after other popups, once per login, and opens the extension page', async () => {
|
||||
test('home shows the expired silence reminder on every return until paid, after other popups', async () => {
|
||||
const r = runtime();
|
||||
r.api.assetApi = {
|
||||
getInfo: async () => ({ identifier: 'A' }),
|
||||
@@ -960,9 +960,11 @@ test('home shows the silence reminder after other popups, once per login, and op
|
||||
assert.equal(page.silenceReminderShow.value, false);
|
||||
assert.equal(r.calls.at(-1).kind, 'navigateTo');
|
||||
assert.equal(r.calls.at(-1).url, '/pages/silence-extension/silence-extension?package_usage_id=44961');
|
||||
// 同一次登录内再回到首页不重复弹
|
||||
// 已过期未支付:同一次登录内每次回到首页都要再弹
|
||||
r.hidden[0](); await r.shown[0](); await settle();
|
||||
page.onPopupCandidateClose('empty'); await settle();
|
||||
assert.equal(page.silenceReminderShow.value, true);
|
||||
page.closeSilenceReminder();
|
||||
assert.equal(page.silenceReminderShow.value, false);
|
||||
// 重新登录(凭证变化)后再次提醒;有未支付延期订单时提示去支付或作废
|
||||
pendingOrderNo = 'SE20261107200004975908';
|
||||
|
||||
@@ -11,6 +11,7 @@ import {
|
||||
isSilenceOrderFinal,
|
||||
pickSilenceReminder,
|
||||
silenceReminderKey,
|
||||
silenceReminderRepeats,
|
||||
validateExtensionDays
|
||||
} from '../utils/silence.js';
|
||||
|
||||
@@ -95,3 +96,11 @@ test('首页沉默期提醒:优先已过期可延期,其次 7 天内到期
|
||||
assert.equal(keyA, silenceReminderKey('A', { packageUsageId: 3, kind: 'expired' }, 'token-1'));
|
||||
assert.notEqual(keyA, silenceReminderKey('A', { packageUsageId: 3, kind: 'expired' }, 'token-2'));
|
||||
});
|
||||
|
||||
test('只有已过期未延期的提醒每次回首页都弹,待实名提醒每次登录一次', () => {
|
||||
assert.equal(silenceReminderRepeats({ kind: 'expired' }), true);
|
||||
assert.equal(silenceReminderRepeats({ kind: 'expired', pendingOrderNo: 'SE1' }), true);
|
||||
assert.equal(silenceReminderRepeats({ kind: 'waiting' }), false);
|
||||
assert.equal(silenceReminderRepeats(null), false);
|
||||
});
|
||||
|
||||
|
||||
@@ -177,5 +177,8 @@ const shortHash = (value) => {
|
||||
* 每次登录、每个资产、每笔套餐、每种提醒最多弹一次的存储键:
|
||||
* 带上登录凭证摘要,重新登录后会再次提醒;同一次登录内反复回首页不重复弹。
|
||||
*/
|
||||
/** 已过期未延期(含有未支付延期订单)每次回首页都要提醒;只有"待实名临近截止"按每次登录一次 */
|
||||
export const silenceReminderRepeats = (reminder) => reminder?.kind === 'expired';
|
||||
|
||||
export const silenceReminderKey = (identifier, reminder, sessionToken) =>
|
||||
`silence_reminder:${identifier}:${reminder.packageUsageId}:${reminder.kind}:${shortHash(sessionToken)}`;
|
||||
|
||||
Reference in New Issue
Block a user