# 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` - [ ] 将`platformId`、`contactPerson`、`contactPhone`字段从必填改为可选 - [ ] 添加中文错误提示(参考平台管理模块的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`当前必填字段:`platformId`、`companyName`、`contactPerson`、`contactPhone` - 可选字段:`contactEmail`、`address` - 需要修改:仅保留`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