Ready for Review
As a 订单管理员 I want 预计开始日期选择无需精确到时间 so that 简化订单创建流程
allin-packages/order-management-ui/src/components/OrderForm.tsx中的expectedStartDate字段type="datetime-local"改为type="date"value={field.value ? field.value.slice(0, 16) : ''}field.onChange(e.target.value ? e.target.value + ':00.000Z' : undefined)allin-packages/order-management-ui/src/components/OrderForm.tsx中的orderFormSchemaexpectedStartDate: z.string().datetime('请选择有效的开始日期').optional()改为日期验证z.string().regex(/^\d{4}-\d{2}-\d{2}$/, '请选择有效的日期格式(YYYY-MM-DD)').optional()allin-packages/order-module/src/schemas/order.schema.ts中的expectedStartDate字段z.coerce.date(),支持Date对象z.coerce.date()能正确解析YYYY-MM-DD格式的字符串allin-packages/order-module/src/entities/employment-order.entity.ts中字段类型为dateallin-packages/order-management-ui/tests/integration/order.integration.test.tsx中的日期测试'2024-01-01T00:00'改为'2024-01-01'date前端技术栈:
项目结构:
allin-packages/order-management-ui [Source: 实际项目结构检查]allin-packages/order-module [Source: 实际项目结构检查]UI包开发规范:
data-testid属性 [Source: architecture/coding-standards.md#关键检查点]前端订单表单现状:
allin-packages/order-management-ui/src/components/OrderForm.tsxexpectedStartDate字段使用type="datetime-local"输入框当前值处理逻辑复杂:
value={field.value ? field.value.slice(0, 16) : ''}
onChange={(e) => field.onChange(e.target.value ? e.target.value + ':00.000Z' : undefined)}
当前schema验证:z.string().datetime('请选择有效的开始日期').optional()
后端schema现状:
allin-packages/order-module/src/schemas/order.schema.ts:95 - expectedStartDate: z.coerce.date().optional()allin-packages/order-module/src/schemas/order.schema.ts:139 - expectedStartDate: z.coerce.date().optional()allin-packages/order-module/src/entities/employment-order.entity.ts:50 - type: 'date', nullable: true测试现状:
allin-packages/order-management-ui/tests/integration/order.integration.test.tsxdatetime-local输入框:fireEvent.change(startDateInput, { target: { value: '2024-01-01T00:00' } })'2024-01-01T00:00:00Z'问题分析:
当前实现使用datetime-local输入框,包含日期和时间选择。根据故事需求,需要:
type="date")z.coerce.date()兼容技术细节:
date输入框:返回YYYY-MM-DD格式字符串z.coerce.date():能解析多种日期格式,包括YYYY-MM-DDdate类型:仅存储日期部分,时间部分为00:00:00date类型,仅需前端格式调整解决方案:
前端修改:
datetime-local → datez.string().datetime() → z.string().regex(/^\d{4}-\d{2}-\d{2}$/)后端兼容性:
z.coerce.date()能自动解析YYYY-MM-DD格式date类型保持不变测试更新:
date输入框行为allin-packages/order-management-ui/src/components/OrderForm.tsxallin-packages/order-module/src/schemas/order.schema.tsallin-packages/order-module/src/entities/employment-order.entity.tsallin-packages/order-management-ui/tests/integration/order.integration.test.tsxdate类型数据必须能正常显示和编辑date类型,无需修改数据库结构YYYY-MM-DD → Date对象转换正确测试策略:
tests/文件夹与源码并列 [Source: 实际项目结构检查]测试要求:
具体测试场景:
YYYY-MM-DD格式通过验证YYYY-MM-DD格式能正确提交到后端YYYY-MM-DD格式tests/文件夹与源码并列 [Source: 实际项目结构检查]data-testid属性 [Source: architecture/coding-standards.md#关键检查点]dateYYYY-MM-DD格式的表单提交allin-packages/order-management-ui/tests/integration/order.integration.test.tsx| Date | Version | Description | Author |
|---|---|---|---|
| 2025-12-10 | 1.0 | 初始故事创建 | Scrum Master Bob |
实施日期: 2025-12-10 开发代理: James (dev) 状态: 已完成
成功实现了故事009.007的日期选择优化需求。主要修改包括:
datetime-local 改为 date 类型z.coerce.date() 能正确解析YYYY-MM-DD格式OrderForm.tsx:
type="datetime-local" → type="date"value={field.value ? field.value.slice(0, 16) : ''} → value={field.value ? field.value.slice(0, 10) : ''}onChange={(e) => field.onChange(e.target.value ? e.target.value + ':00.000Z' : undefined)} → onChange={(e) => field.onChange(e.target.value || undefined)}expectedStartDate: z.string().datetime('请选择有效的开始日期').optional() → z.string().regex(/^\d{4}-\d{2}-\d{2}$/, '请选择有效的日期格式(YYYY-MM-DD)').optional()personInfoSchema 中的 joinDate 和 leaveDate 验证规则orderData.expectedStartDate.slice(0, 10)order.integration.test.tsx:
'2024-01-01T00:00' → '2024-01-01''2024-01-01T00:00' → '2024-01-01''2024-01-01T00:00:00.000Z' → '2024-01-01'修改的文件:
allin-packages/order-management-ui/src/components/OrderForm.tsxallin-packages/order-management-ui/tests/integration/order.integration.test.tsx检查的文件:
allin-packages/order-module/src/schemas/order.schema.tsallin-packages/order-module/src/entities/employment-order.entity.ts此部分由QA代理在审查期间填写