In Progress
As a 平台管理员 I want 邮箱字段改为非必要输入项 so that 在不需要邮箱的场景下快速完成平台相关操作
''改为undefined[x] 修改平台模块后端schema验证 (AC: 2, 3)
[x] 将contactEmail字段改为包含中文错误提示和空字符串处理:
contactEmail: z.string({
error: '请输入联系邮箱'
}).email({
message: '请输入有效的邮箱地址'
}).max(100, {
message: '邮箱地址不能超过100个字符'
}).optional()
.or(z.literal('')) // 允许空字符串
.transform(val => val === '' ? undefined : val) // 将空字符串转为undefined
.openapi({
description: '联系邮箱',
example: 'zhangsan@example.com'
})
[x] 同样修改UpdatePlatformSchema中的contactEmail字段验证规则
[x] 可选:为其他字段添加中文错误提示(如platformName必填验证)
[x] 验证数据库兼容性 (AC: 3)
[ ] 编写单元测试 (AC: 1, 2, 3)
[ ] 执行回归测试 (AC: 3)
前端技术栈:
项目结构:
allin-packages/platform-management-ui [Source: 实际项目结构检查]allin-packages/platform-module [Source: 实际项目结构检查]UI包开发规范:
data-testid属性 [Source: architecture/coding-standards.md#关键检查点]平台管理表单现状:
allin-packages/platform-management-ui/src/components/PlatformManagement.tsx:395-406平台schema现状:
allin-packages/platform-module/src/schemas/platform.schema.ts:53 - contactEmail字段有z.email('请输入有效的邮箱')验证和.optional()allin-packages/platform-module/src/schemas/platform.schema.ts:77 - contactEmail字段有z.string().email()验证和.optional()(缺少中文错误提示)allin-packages/platform-module/src/entities/platform.entity.ts:47 - contactEmail字段为nullable: true问题分析:
当前schema中contactEmail字段有.optional()和.email()验证,这意味着:
undefined)✅ 符合"非必要输入项"要求z.email('请输入有效的邮箱') ✅z.string().email() ❌ 需要添加关键问题发现:
前端表单默认值问题:
allin-packages/platform-management-ui/src/components/PlatformManagement.tsx:42contactEmail: ''(空字符串)''不是有效的邮箱格式,会导致Zod验证失败undefinedschema中文错误提示不统一:
技术细节:
.optional()允许undefined,但不允许无效的邮箱格式defaultValues中可以使用undefined,但输入框清空后值是'''',但只有contactEmail需要特殊处理,因为它是可选但需要邮箱验证的字段解决方案选项:
推荐方案:修改schema,使用.or(z.literal(''))允许空字符串,然后转换,并添加中文错误提示
contactEmail: z.string({
error: '请输入联系邮箱'
}).email({
message: '请输入有效的邮箱地址'
}).max(100, {
message: '邮箱地址不能超过100个字符'
}).optional()
.or(z.literal('')) // 允许空字符串
.transform(val => val === '' ? undefined : val) // 将空字符串转为undefined
.openapi({
description: '联系邮箱',
example: 'zhangsan@example.com'
})
备选方案:前端在提交前将空字符串转换为undefined
简单方案:只修改默认值为undefined,但用户清空输入框后还是''
根据故事需求,推荐使用方案1,因为它:
undefined根据故事"邮箱字段改为非必要输入项"的要求,需要:
undefined''改为undefinedallin-packages/platform-management-ui/src/components/PlatformManagement.tsxallin-packages/platform-module/src/schemas/platform.schema.tsallin-packages/platform-module/src/entities/platform.entity.tscontactEmail字段已经是nullable: true,无需修改数据库结构测试策略:
tests/文件夹与源码并列 [Source: 实际项目结构检查]测试要求:
具体测试场景:
''转换为undefined通过验证undefined通过验证(可选字段)tests/文件夹与源码并列 [Source: 实际项目结构检查]data-testid属性 [Source: architecture/coding-standards.md#关键检查点]allin-packages/platform-management-ui/tests/integration/platform-management.integration.test.tsx| Date | Version | Description | Author |
|---|---|---|---|
| 2025-12-10 | 1.0 | 初始故事创建 | Scrum Master Bob |
此部分由开发代理在实施期间填写
此部分由QA代理在审查期间填写