import type { ResourceField } from './resources'; export type ResourceFormValue = string | number | boolean | undefined; export function isMissingField(value: ResourceFormValue | null): boolean { return value === '' || value === null || value === undefined; } export function buildResourcePayload( fields: ResourceField[], form: Record, ): Record { const payload: Record = {}; for (const field of fields) { const value = form[field.key]; if (isMissingField(value)) { if (!field.required) continue; payload[field.key] = value; continue; } switch (field.type) { case 'number': { const number = Number(value); if (!Number.isFinite(number)) throw new Error(`${field.label}必须是数字`); payload[field.key] = number; break; } case 'boolean': payload[field.key] = value === true || value === 'true'; break; case 'json': payload[field.key] = typeof value === 'string' ? JSON.parse(value) : value; break; default: payload[field.key] = value; } } return payload; }