refactor: remove demo timers and client-side timeout simulation

Remove lib/config/demo-timers.ts and all usages across stores
and pages. Order timeout scheduling, dispute auto-progression,
and hardcoded countdown displays are removed — timeouts are
now handled server-side by the backend.
This commit is contained in:
zetaloop
2026-05-01 04:10:03 +08:00
parent 0a1a4c877b
commit 452004b194
5 changed files with 58 additions and 213 deletions
+1 -78
View File
@@ -1,5 +1,4 @@
import type { Actor } from "@/lib/actor"
import { DISPUTE_TO_RESOLVED_MS, DISPUTE_TO_REVIEWING_MS } from "@/lib/config/demo-timers"
import { allow, deny } from "@/lib/decision"
import type { ApiDecision } from "@/lib/errors"
import { generateId } from "@/lib/id"
@@ -50,17 +49,6 @@ interface DisputeState {
submitAppeal: (disputeId: string, actorId: string, reason: string) => ApiDecision
}
const progressTimers = new Map<string, ReturnType<typeof setTimeout>[]>()
function clearProgressTimers(disputeId: string) {
const timers = progressTimers.get(disputeId)
if (!timers) return
timers.forEach((timer) => {
clearTimeout(timer)
})
progressTimers.delete(disputeId)
}
function resolveParticipantActor(orderId: string, userId: string): Actor | null {
const order = useOrderStore.getState().orders.find((item) => item.id === orderId)
if (!order) return null
@@ -98,71 +86,8 @@ function notifyDispute(orderId: string, title: string, content: string) {
}
export const useDisputeStore = create<DisputeState>((set, get) => {
const scheduleProgress = (disputeId: string) => {
clearProgressTimers(disputeId)
const toReviewing = setTimeout(() => {
set((state) => ({
disputes: state.disputes.map((dispute) => {
if (dispute.id !== disputeId) return dispute
if (dispute.status !== "open" && dispute.status !== "appealed") return dispute
return {
...dispute,
status: "reviewing",
timeline: [
...dispute.timeline,
{
id: generateId("timeline"),
type: "reviewing",
content: "平台已受理并进入审核",
createdAt: new Date().toISOString(),
},
],
}
}),
}))
}, DISPUTE_TO_REVIEWING_MS)
const toResolved = setTimeout(() => {
let resolvedOrderId: string | null = null
set((state) => ({
disputes: state.disputes.map((dispute) => {
if (dispute.id !== disputeId) return dispute
if (dispute.status !== "reviewing" && dispute.status !== "appealed") return dispute
resolvedOrderId = dispute.orderId
return {
...dispute,
status: "resolved",
result: dispute.result ?? "partial_refund",
timeline: [
...dispute.timeline,
{
id: generateId("timeline"),
type: "resolved",
content: "平台已给出仲裁结果",
createdAt: new Date().toISOString(),
},
],
}
}),
}))
if (resolvedOrderId) {
notifyDispute(resolvedOrderId, "争议已处理", "平台已给出争议处理结果")
useOrderStore.getState().resolveDispute(resolvedOrderId)
}
clearProgressTimers(disputeId)
}, DISPUTE_TO_RESOLVED_MS)
progressTimers.set(disputeId, [toReviewing, toResolved])
}
return {
disputes: [],
disputes: [],
getDisputeByOrderId: (orderId) => get().disputes.find((dispute) => dispute.orderId === orderId),
submitDispute: (input) => {
const order = useOrderStore.getState().orders.find((item) => item.id === input.orderId)
@@ -208,7 +133,6 @@ export const useDisputeStore = create<DisputeState>((set, get) => {
}
set((state) => ({ disputes: [dispute, ...state.disputes] }))
scheduleProgress(dispute.id)
return { decision: allow(), dispute }
},
submitResponse: (disputeId, actorId, reason, evidence) => {
@@ -311,7 +235,6 @@ export const useDisputeStore = create<DisputeState>((set, get) => {
notifyDispute(dispute.orderId, "争议已申诉", "申诉已提交,平台将继续复核")
scheduleProgress(disputeId)
return allow()
},
}