// 平台总后台 API 客户端,仅封装首期 M0 + M1 接口。 const apiBaseURL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:12426/Platform/v1'; const developmentJWT = import.meta.env.VITE_DEV_JWT?.trim(); export type OrgGasStation = { identity: string; stationCode: string; name: string; principal: string; serviceArea: string; status: string; createdAt: string; }; export type OrgDeliveryPoint = { identity: string; deliveryCode: string; name: string; gasStationName: string; serviceArea: string; status: string; }; export type OrgServicePerson = { identity: string; name: string; phoneMasked: string; roles: string; workStatus: string; credentialStatus: string; }; export type IdnAccount = { identity: string; phoneMasked: string; accountType: string; status: string; serviceArea: string; }; export type SafEvent = { identity: string; eventCode: string; level: number; title: string; status: string; createdAt: string; }; export type DashboardOverview = Record; type ListReply = { total: number; list: T[] }; type RawOrgDeliveryPoint = { identity: string; delivery_code: string; name: string; gas_station_name?: string; service_area: string; status: string }; type RawOrgServicePerson = { identity: string; name: string; phone_masked?: string; roles: string; work_status: string; credential_status: string }; type RawIdnAccount = { identity: string; phone_masked: string; account_type: string; status: string; service_area: string }; type RawSafEvent = { identity: string; event_code: string; level: number; title: string; status: string; created_at: string }; async function request(path: string, init?: RequestInit): Promise { const response = await fetch(`${apiBaseURL}${path}`, { headers: { 'Content-Type': 'application/json', ...(developmentJWT ? { Authorization: `Bearer ${developmentJWT}` } : {}), ...(init?.headers ?? {}), }, ...init, }); const payload = (await response.json()) as { code?: number; message?: string; details?: T }; if (!response.ok || payload.code !== 0) throw new Error(payload.message || '请求失败'); return payload.details as T; } export const platformAPI = { getDashboard: async () => { const item = await request<{ gas_station_count: number; delivery_point_count: number; service_person_count: number; user_count: number; pending_safety_count: number }>('/dashboard/overview'); return { gasStationCount: item.gas_station_count, deliveryPointCount: item.delivery_point_count, servicePersonCount: item.service_person_count, userCount: item.user_count, pendingSafetyCount: item.pending_safety_count }; }, listOrgGasStation: async () => { const reply = await request>('/organization/org_gas_station'); return reply.list.map((item) => ({ identity: item.identity, stationCode: item.station_code, name: item.name, principal: item.principal, serviceArea: item.service_area, status: item.status, createdAt: item.created_at })); }, createOrgGasStation: (body: Pick) => request('/organization/org_gas_station', { method: 'POST', body: JSON.stringify({ station_code: body.stationCode, name: body.name, principal: body.principal, service_area: body.serviceArea }) }), listOrgDeliveryPoint: async () => (await request>('/organization/org_delivery_point')).list.map((item) => ({ identity: item.identity, deliveryCode: item.delivery_code, name: item.name, gasStationName: item.gas_station_name ?? '未关联', serviceArea: item.service_area, status: item.status })), listOrgServicePerson: async () => (await request>('/organization/org_service_person')).list.map((item) => ({ identity: item.identity, name: item.name, phoneMasked: item.phone_masked ?? '***', roles: item.roles, workStatus: item.work_status, credentialStatus: item.credential_status })), listIdnAccount: async () => (await request>('/identity/idn_account')).list.map((item) => ({ identity: item.identity, phoneMasked: item.phone_masked, accountType: item.account_type, status: item.status, serviceArea: item.service_area })), listSafEvent: async () => (await request>('/safety/saf_event')).list.map((item) => ({ identity: item.identity, eventCode: item.event_code, level: item.level, title: item.title, status: item.status, createdAt: item.created_at })), };