本文档总结了标注平台中表单验证功能的实现。
项目名称:
项目描述:
标注配置:
< 开头,以 > 结尾任务名称:
项目 ID:
任务数据 (JSON):
const [formErrors, setFormErrors] = useState<Record<string, string>>({});
border-error-border)focus:ring-error-border)text-error-foreground)aria-invalid 标记无效字段aria-describedby 关联错误消息* 符号// 空白字符串验证(Requirements 1.4)
if (!formData.name || !formData.name.trim()) {
errors.name = '项目名称不能为空或仅包含空格';
}
// 长度验证
if (formData.name.trim().length < 2) {
errors.name = '项目名称至少需要 2 个字符';
}
// XML 基本验证
if (!trimmedConfig.startsWith('<') || !trimmedConfig.endsWith('>')) {
errors.config = '标注配置必须是有效的 XML 格式(以 < 开头,以 > 结尾)';
}
// JSON 验证
try {
const parsedData = JSON.parse(dataJson);
if (typeof parsedData !== 'object' || parsedData === null) {
errors.data = '任务数据必须是有效的 JSON 对象';
} else if (Array.isArray(parsedData)) {
errors.data = '任务数据必须是 JSON 对象,不能是数组';
} else if (Object.keys(parsedData).length === 0) {
errors.data = '任务数据不能为空对象,至少需要包含一个字段';
}
} catch (e) {
errors.data = `JSON 格式错误:${(e as Error).message}`;
}
虽然任务 19.1(编写单元测试)是可选的,但建议测试以下场景:
web/apps/lq_label/src/components/project-form/project-form.tsx
validateForm() 函数handleFieldBlur() 函数web/apps/lq_label/src/components/task-form/task-form.tsx
validateForm() 函数handleFieldBlur() 函数任务 20:样式优化和响应式设计
任务 21:最终集成测试
可选:编写单元测试(任务 19.1)
表单验证功能已经完全实现,提供了:
所有验证规则都符合需求规范,特别是 Requirements 1.4(空项目名称拒绝)和 Requirements 10.2(表单验证)。