009.008.story.md 5.2 KB

Story 009.008: 公司创建优化

Status

Draft

Story

As a 系统管理员 I want 创建公司时仅"公司名字"为必填项 so that 快速创建公司信息

Acceptance Criteria

  1. 创建公司表单中仅"公司名字"为必填
  2. 其他所有字段(含平台)均设为非必填
  3. 表单验证规则更新

Tasks / Subtasks

  • 修改后端公司模块schema验证规则 (AC: 1, 2, 3)
    • 修改allin-packages/company-module/src/schemas/company.schema.ts中的CreateCompanySchema
    • platformIdcontactPersoncontactPhone字段从必填改为可选
    • 添加中文错误提示(参考平台管理模块的schema模式)
    • 确保空字符串自动转换为undefined(使用Zod transform)
  • 更新前端公司管理UI表单配置 (AC: 1, 2, 3)
    • 修改allin-packages/company-management-ui/src/components/CompanyManagement.tsx中的表单默认值
    • 更新FormLabel显示,移除非必填字段的红色星号标记
    • 验证表单提交时可选字段正确处理
  • 更新前端表单验证规则 (AC: 3)
    • 确保前端使用更新后的schema进行验证
    • 验证可选字段的默认值处理
  • 更新集成测试 (AC: 1, 2, 3)
    • 修改allin-packages/company-management-ui/tests/integration/company.integration.test.tsx
    • 添加测试用例验证仅公司名称为必填
    • 添加测试用例验证可选字段可以留空
    • 确保所有现有测试通过
  • 运行测试验证修改 (AC: 1, 2, 3)
    • 运行公司管理UI包测试:pnpm test
    • 运行公司模块测试:pnpm test
    • 验证所有测试通过

Dev Notes

技术栈信息 [Source: architecture/tech-stack.md]

  • 前端框架:React 19.1.0
  • 表单验证:Zod 4.0.15 + react-hook-form 7.61.1
  • 构建工具:Vite 7.0.0
  • 测试框架:Vitest 4.0.9 + Testing Library

项目结构信息 [Source: architecture/source-tree.md]

  • 公司管理UI包路径:allin-packages/company-management-ui/
  • 公司模块路径:allin-packages/company-module/
  • 测试文件位置:与源码并列的tests/文件夹

编码标准和测试策略 [Source: architecture/coding-standards.md]

  • 测试框架:使用Vitest + Testing Library
  • 测试位置:tests/文件夹与源码并列
  • 测试类型:单元测试、集成测试
  • 覆盖率目标:核心业务逻辑 > 80%

UI包开发规范 [Source: architecture/ui-package-standards.md]

  • 表单组件模式规范:必须使用条件渲染两个独立的Form组件(创建和编辑)
  • 类型推断最佳实践:必须使用RPC推断类型,而不是直接导入schema类型
  • 测试选择器优化:必须为关键交互元素添加data-testid属性
  • API调用一致性:必须根据实际路由名称修正API调用

当前schema状态分析

根据allin-packages/company-module/src/schemas/company.schema.ts

  • CreateCompanySchema当前必填字段:platformIdcompanyNamecontactPersoncontactPhone
  • 可选字段:contactEmailaddress
  • 需要修改:仅保留companyName为必填,其他字段改为可选

参考实现模式

参考平台管理模块的schema优化模式(故事009.002):

  • 使用Zod transform将空字符串转换为undefined
  • 添加中文错误提示
  • 统一创建和更新DTO的验证规则

前端表单当前状态

根据allin-packages/company-management-ui/src/components/CompanyManagement.tsx

  • 创建表单默认值:所有字段都有默认值(包括必填字段)
  • FormLabel显示:部分字段标记为"(可选)"
  • 需要更新:修改默认值,更新FormLabel,确保验证规则一致

文件位置

  • 后端schema文件:allin-packages/company-module/src/schemas/company.schema.ts
  • 前端组件文件:allin-packages/company-management-ui/src/components/CompanyManagement.tsx
  • 前端测试文件:allin-packages/company-management-ui/tests/integration/company.integration.test.tsx

技术约束

  1. 数据库兼容性:现有数据不需要迁移
  2. API向后兼容:修改schema不影响现有API调用
  3. 前端默认值:需要与后端schema验证规则保持一致
  4. 空字符串处理:使用Zod transform统一处理

Testing

测试标准 [Source: architecture/coding-standards.md]

  • 测试文件位置:tests/integration/文件夹
  • 测试框架:Vitest + Testing Library
  • Mock模式:使用标准mock响应函数

具体测试要求

  1. 集成测试:验证创建公司表单仅公司名称为必填
  2. 边界测试:测试可选字段留空、空字符串处理
  3. 错误处理测试:验证必填字段缺失时的错误提示
  4. 兼容性测试:确保现有功能不受影响

测试选择器规范 [Source: architecture/ui-package-standards.md#测试选择器优化规范]

  • 必须为表单元素添加data-testid属性
  • 命名约定:kebab-case格式 {action}-{element}-{purpose}
  • 示例:data-testid="create-company-name-input"

Change Log

Date Version Description Author
2025-12-10 1.0 初始故事创建 Scrum Master Bob

Dev Agent Record

Agent Model Used

Debug Log References

Completion Notes List

File List

QA Results