修复工单系统竞态与接口安全问题

This commit is contained in:
2026-09-05 16:14:43 +08:00
parent a992bd841d
commit af79e5864f
8 changed files with 521 additions and 99 deletions
+16
View File
@@ -1,5 +1,21 @@
import { request } from './client.js';
export function normalizeTicketListResponse(data, fallbackPageSize = 20) {
const payload = Array.isArray(data) ? { tickets: data } : (data && typeof data === 'object' ? data : {});
const tickets = Array.isArray(payload.tickets)
? payload.tickets
: (Array.isArray(payload.list) ? payload.list : (Array.isArray(payload.items) ? payload.items : []));
const pageSizeValue = Number(payload.pageSize ?? payload.page_size);
const pageSize = Number.isInteger(pageSizeValue) && pageSizeValue > 0 ? pageSizeValue : fallbackPageSize;
const totalValue = Number(payload.total ?? payload.count);
const total = Number.isFinite(totalValue) && totalValue >= 0 ? totalValue : tickets.length;
const totalPagesValue = Number(payload.totalPages ?? payload.total_pages ?? payload.pages);
const totalPages = Number.isInteger(totalPagesValue) && totalPagesValue > 0
? totalPagesValue
: Math.max(1, Math.ceil(total / pageSize));
return { tickets, total, totalPages };
}
export function listTickets(params = {}) {
const query = new URLSearchParams();
if (params.page) query.set('page', String(params.page));