import { http, HttpResponse, delay } from 'msw'; import { mockCuttingPlans, mockSmallCoils } from '../data/aps'; // Mutable in-memory store let plans = [...mockCuttingPlans]; let smallCoils = [...mockSmallCoils]; function paginate(list: T[], pageNo: number, pageSize: number) { const start = (pageNo - 1) * pageSize; return { list: list.slice(start, start + pageSize), total: list.length, }; } export const apsPlanHandlers = [ // Get paginated plan list http.get('/admin-api/aps/plan/page', async ({ request }) => { await delay(300); const url = new URL(request.url); const pageNo = Number(url.searchParams.get('pageNo') || 1); const pageSize = Number(url.searchParams.get('pageSize') || 10); const coilId = url.searchParams.get('coilId') || ''; const planId = url.searchParams.get('planId') || ''; let filtered = [...plans]; if (coilId) { filtered = filtered.filter((p) => p.coilId.includes(coilId)); } if (planId) { filtered = filtered.filter((p) => p.planId.includes(planId)); } return HttpResponse.json({ code: 0, data: paginate(filtered, pageNo, pageSize), msg: '', }); }), // Get plans by coilId http.get('/admin-api/aps/plan/list', async ({ request }) => { await delay(200); const url = new URL(request.url); const coilId = url.searchParams.get('coilId') || ''; const filtered = plans.filter((p) => p.coilId === coilId); return HttpResponse.json({ code: 0, data: filtered, msg: '' }); }), // Get plan detail http.get('/admin-api/aps/plan/detail', async ({ request }) => { await delay(300); const url = new URL(request.url); const planId = url.searchParams.get('planId'); const plan = plans.find((p) => p.planId === planId); if (!plan) { return HttpResponse.json({ code: 1, data: null, msg: '方案不存在' }); } const coils = smallCoils.filter((sc) => sc.planId === planId); return HttpResponse.json({ code: 0, data: { ...plan, smallCoils: coils }, msg: '', }); }), // Delete plan http.delete('/admin-api/aps/plan/delete', async ({ request }) => { await delay(200); const url = new URL(request.url); const planId = url.searchParams.get('planId'); plans = plans.filter((p) => p.planId !== planId); smallCoils = smallCoils.filter((sc) => sc.planId !== planId); return HttpResponse.json({ code: 0, data: true, msg: '' }); }), // Confirm plan http.post('/admin-api/aps/plan/confirm', async ({ request }) => { await delay(300); const url = new URL(request.url); const planId = url.searchParams.get('planId'); const plan = plans.find((p) => p.planId === planId); if (!plan) { return HttpResponse.json({ code: 1, data: null, msg: '方案不存在' }); } // In real implementation, this would lock the coil return HttpResponse.json({ code: 0, data: true, msg: '' }); }), // Export work instruction (mock - return empty blob) http.get('/admin-api/aps/plan/export', async () => { await delay(1000); return new HttpResponse(new Blob(), { headers: { 'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }, }); }), ];