Files
platforms/frontend/platform_admin/src/api/resource-form.ts

42 lines
1.2 KiB
TypeScript
Raw Normal View History

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<string, ResourceFormValue>,
): Record<string, unknown> {
const payload: Record<string, unknown> = {};
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;
}