feat(order): 收银台支付倒计时,超时锁死并引导重新下单
- 到期时刻由后端下发(payDeadline),倒计时与"到点锁页面"都用它,前端不自己算时限 - 解析后端时间时把空格换成 T:后端格式是 `yyyy-MM-dd HH:mm:ss`, 而 iOS Safari / 微信内置浏览器解析不了不带 T 的写法(返回 NaN, 会让倒计时与锁页在最主要的那一端静默失效) - 修正收银台写死的「2 小时」文案:有效期由后端配置,页面不该复述一个具体数字 - 订单列表/详情:超时后不再给「去支付」,并显示「已取消(支付超时)」 - `hjcCanActOn` 收成共享导出,两个页面不再各写一份判定 - 与 hjc-h5 的 utils/orderStatus 保持同一套定义(两仓逐字对齐)
This commit is contained in:
@@ -13,11 +13,11 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* 支付码的有效期。
|
||||
* 支付码有效期的**兜底**值(从调用 `start` 的那一刻起算)。
|
||||
*
|
||||
* 微信 Native 默认 2 小时;支付宝当面付的超时由下单时的 `timeout_express` 决定。
|
||||
* 服务端都不下发过期时刻(`PaymentResponse` 不设 `expireTime`),
|
||||
* 所以只能以「本次拿到支付码的时刻」本地计时;到点停止轮询并提示重新获取。
|
||||
* 优先用后端随订单下发的 `payDeadline`——那才是权威值,且与后端判定超时、渠道单失效
|
||||
* 是同一个时刻(见 ADR 0019),`start` 的第二个参数就是传它。
|
||||
* 拿不到到期时刻时才退回这个本地计时(例如购标流程里还没取到订单对象就被调用)。
|
||||
*/
|
||||
export const HJC_PAY_QR_TTL_MS = 2 * 60 * 60 * 1000
|
||||
|
||||
@@ -143,14 +143,22 @@ export function useHjcPayStatus(
|
||||
}
|
||||
}
|
||||
|
||||
/** 开始(或重新开始)轮询,并重置 2 小时计时 */
|
||||
function start(no: string) {
|
||||
/**
|
||||
* 开始(或重新开始)轮询。
|
||||
*
|
||||
* @param no 订单号
|
||||
* @param deadlineAtMs 该订单支付时限的到期时刻(毫秒)。**传后端下发的 `payDeadline`**——
|
||||
* 用本地倒计时代替它,两者会在边界上错开。不传则退回 {@link HJC_PAY_QR_TTL_MS}
|
||||
*/
|
||||
function start(no: string, deadlineAtMs?: number | null) {
|
||||
orderNo = no
|
||||
paid.value = false
|
||||
expired.value = false
|
||||
error.value = ''
|
||||
status.value = null
|
||||
deadline = Date.now() + HJC_PAY_QR_TTL_MS
|
||||
deadline = typeof deadlineAtMs === 'number' && Number.isFinite(deadlineAtMs)
|
||||
? deadlineAtMs
|
||||
: Date.now() + HJC_PAY_QR_TTL_MS
|
||||
active = true
|
||||
pauseTimer()
|
||||
ensureTimer()
|
||||
|
||||
Reference in New Issue
Block a user