Kaynağa Gözat

docs(story): 根据故事011.001完成情况更新故事011.002依赖关系和细节

- 更新状态从Draft改为In Progress
- 详细列出故事011.001已提供的API客户端、布局组件和认证框架
- 更新API规范、文件位置、技术约束和测试要求
- 优化任务列表,标注已完成部分和待实现部分

🤖 Generated with [Claude Code](https://claude.com/claude-code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname 1 hafta önce
ebeveyn
işleme
cfde985f1f
1 değiştirilmiş dosya ile 145 ekleme ve 41 silme
  1. 145 41
      docs/stories/011.002.story.md

+ 145 - 41
docs/stories/011.002.story.md

@@ -1,7 +1,7 @@
 # 故事 011.002:认证与首页实现
 
 ## 状态
-Draft
+In Progress
 
 ## 故事
 **作为**企业用户,
@@ -19,54 +19,141 @@ Draft
 ## 任务 / 子任务
 
 - [ ] 任务1:实现登录页面(AC:1,2)
-  - [ ] 创建登录页面组件,包含手机号、密码输入框
-  - [ ] 集成史诗012提供的企业用户认证API
+  - [ ] **更新现有登录页面UI样式**(故事011.001已改造`mini/src/pages/login/index.tsx`为企业用户登录页)
+    - 更新UI以匹配原型设计 `docs/小程序原型/yongren.html` 第218-260行
+    - 保持现有核心认证逻辑不变(已使用`enterpriseAuthClient`)
+  - [ ] **集成企业用户认证API**(✅ 已由故事011.001完成:`enterpriseAuthClient` 已可用)
+    - 使用已集成的`enterpriseAuthClient.login`接口
+    - 请求体格式:`{phone: string, password: string}`
   - [ ] 实现表单验证(手机号格式、密码强度)
+    - 手机号正则:`/^1[3-9]\d{9}$/`(已在现有登录页面实现)
+    - 密码强度验证(如果需要)
   - [ ] 添加登录错误处理和加载状态
-  - [ ] 实现登录成功后的token存储和状态更新
+    - 使用企业认证框架的错误处理机制
+  - [ ] **实现登录成功后的token存储和状态更新**(✅ 部分已由故事011.001完成)
+    - 使用`useEnterpriseAuth`钩子管理认证状态
+    - 登录成功后跳转到首页:`/pages/yongren/dashboard/index`
 - [ ] 任务2:完善认证状态管理(AC:2)
-  - [ ] 基于故事011.001的认证框架,完善状态管理
+  - [ ] **基于故事011.001的认证框架,完善状态管理**(✅ 基础框架已就绪)
+    - 使用现有`EnterpriseAuthProvider`和`useEnterpriseAuth`钩子
+    - 验证token存储和验证机制正常工作
   - [ ] 实现自动token刷新机制
+    - 集成到企业认证框架中
+    - 处理token过期自动刷新
   - [ ] 添加登录状态检查中间件
-  - [ ] 实现登出功能
+    - 保护需要认证的页面(如首页)
+    - 未登录用户重定向到登录页
+  - [ ] **实现登出功能**(✅ 部分已由故事011.001完成)
+    - 使用`useEnterpriseAuth().logout()`方法
+    - 清除本地存储的token和用户信息
+    - 登出后重定向到登录页
 - [ ] 任务3:实现首页/看板页面(AC:3,4)
-  - [ ] 创建首页页面组件,使用基础布局组件
-  - [ ] 集成企业统计API(史诗012提供)
+  - [ ] **创建首页页面组件,使用基础布局组件**(✅ 基础布局组件已由故事011.001提供)
+    - 使用`YongrenTabBarLayout`作为页面布局,首页标签激活状态
+    - 使用`PageContainer`作为内容容器
+    - 页面位置:`mini/src/pages/yongren/dashboard/index.tsx`
+  - [ ] **集成企业统计API**(✅ API客户端已由故事011.001集成)
+    - 使用`enterpriseCompanyClient.overview.get()`获取企业概览数据
+    - 使用`enterpriseCompanyClient.allocations.recent.get()`获取近期分配人才列表
   - [ ] 实现数据卡片组件:在职人员统计、待分配人才数、本月订单数等
+    - 参照原型设计 `docs/小程序原型/yongren.html` 第276-300行
+    - 使用统计卡片样式(见基础样式规范)
   - [ ] 实现分配人才列表组件(近期分配的人才信息)
+    - 参照原型设计 `docs/小程序原型/yongren.html` 第323-376行
+    - 实现人才卡片组件,包含头像、姓名、残疾信息、状态标签等
   - [ ] 添加数据刷新和加载状态
+    - 实现下拉刷新或手动刷新功能
+    - 添加加载中状态和错误处理
 - [ ] 任务4:优化用户体验(AC:4)
-  - [ ] 参考原型设计:`docs/小程序原型/yongren.html`
+  - [ ] **参考原型设计**:`docs/小程序原型/yongren.html`
+    - 登录页面:严格对照第218-260行设计实现UI样式
+    - 首页页面:严格对照第261-418行设计实现所有组件
   - [ ] 确保移动端响应式设计和交互友好
+    - 使用Tailwind CSS响应式工具类
+    - 测试不同屏幕尺寸的显示效果
   - [ ] 添加页面过渡动画和加载提示
+    - 页面切换动画
+    - 数据加载时的骨架屏或加载指示器
   - [ ] 优化表单输入体验
+    - 登录表单的输入验证和错误提示
+    - 自动焦点管理和键盘操作优化
 - [ ] 任务5:编写集成测试(AC:5)
-  - [ ] 编写登录流程集成测试
-  - [ ] 编写首页数据展示测试
-  - [ ] 测试认证状态管理
-  - [ ] 验证与基础框架的集成
+  - [ ] **编写登录流程集成测试**(✅ 基于故事011.001的测试基础)
+    - 扩展现有`mini/tests/yongren-api.test.ts`添加登录API测试
+    - 编写登录页面UI和交互测试
+  - [ ] **编写首页数据展示测试**
+    - 测试企业统计API数据加载和展示
+    - 测试数据刷新功能
+    - 测试空状态和错误处理
+  - [ ] **测试认证状态管理**(✅ 基于故事011.001的认证框架测试)
+    - 测试`useEnterpriseAuth`钩子的状态管理
+    - 测试token存储和验证
+    - 测试自动token刷新机制
+  - [ ] **验证与基础框架的集成**(✅ 故事011.001已提供集成基础)
+    - 验证与`YongrenTabBarLayout`的集成
+    - 验证与`PageContainer`的兼容性
+    - 验证与企业认证框架的无缝集成
 
 ## 开发笔记
 
 ### 依赖关系
 **依赖故事011.001(基础框架搭建)**:
-- 需要故事011.001完成后才能开始本故事
-- 将使用故事011.001提供的:API客户端、路由配置、基础布局组件、认证框架
+- ✅ 故事011.001已完成,基础框架已就绪
+- **已提供的API客户端**:所有allin系统模块和企业专用API客户端已集成到`mini/src/api.ts`:
+  - `enterpriseAuthClient` - 企业用户认证API(路径前缀:`/api/v1/yongren/auth`)
+  - `enterpriseCompanyClient` - 企业统计API(路径前缀:`/api/v1/yongren/company`)
+  - `enterpriseDisabilityClient` - 人才扩展API(路径前缀:`/api/v1/yongren/disability-person`)
+  - `channelClient`, `companyClient`, `disabilityClient`, `orderClient`, `platformClient`, `salaryClient` - Allin系统模块
+- **已配置的路由结构**:用人方小程序8个页面路由已配置,登录页已统一到`pages/login/index`(改造为企业用户登录页)
+- **已实现的基础布局组件**:
+  - `YongrenTabBarLayout` - 用人方小程序底部导航布局组件(已包含首页、人才、订单、数据、设置5个导航项)
+  - `UserStatusBar` - 用户状态栏组件(显示用户信息和通知)
+  - `PageContainer` - 页面容器组件(统一页面布局和样式)
+- **已建立的企业用户认证框架**:
+  - `EnterpriseAuthProvider` - 企业认证上下文提供者
+  - `useEnterpriseAuth` - 企业认证钩子(提供登录、登出、状态管理功能)
+  - 权限检查框架已就绪
 
 ### API规范
-**企业用户认证API**(史诗012提供):
-- 企业用户手机号密码登录接口
-- 企业用户token验证接口
-- 用户信息获取接口
+**企业用户认证API**(史诗012提供,已通过故事011.001集成):
+- **客户端**:`enterpriseAuthClient`(已在`mini/src/api.ts`中可用)
+- **主要接口**:
+  - `POST /login` - 企业用户手机号密码登录接口
+    - 请求体:`{phone: string, password: string}`
+    - 响应:包含`token`和`userInfo`的企业用户认证信息
+  - `GET /me` - 用户信息获取接口
+  - `POST /logout` - 用户登出接口
+  - `POST /refresh-token` - token刷新接口
+- **使用示例**:
+  ```typescript
+  import { enterpriseAuthClient } from '@/api'
 
-**企业统计API**(史诗012提供):
-- 企业概览数据接口(在职人员统计、待分配人才等)
-- 实时数据更新接口
+  // 登录调用
+  const response = await enterpriseAuthClient.login.post({
+    json: { phone: '13800138000', password: 'password123' }
+  })
+  ```
+
+**企业统计API**(史诗012提供,已通过故事011.001集成):
+- **客户端**:`enterpriseCompanyClient`(已在`mini/src/api.ts`中可用)
+- **主要接口**:
+  - `GET /overview` - 企业概览数据接口(在职人员统计、待分配人才数、本月订单数等)
+  - `GET /stats/real-time` - 实时数据更新接口
+  - `GET /employees` - 在职人员列表
+  - `GET /allocations/recent` - 近期分配人才列表
+- **使用示例**:
+  ```typescript
+  import { enterpriseCompanyClient } from '@/api'
+
+  // 获取企业概览数据
+  const overview = await enterpriseCompanyClient.overview.get()
+  ```
 
 **技术集成**:
-- 使用故事011.001集成的RPC客户端
-- 遵循现有`mini/src/api.ts`的RPC客户端模式
+- 使用故事011.001集成的RPC客户端(见依赖关系部分)
+- 遵循现有`mini/src/api.ts`的RPC客户端模式(Hono RPC客户端)
 - API路径前缀:`api/v1/yongren`
+- **认证状态管理**:使用`useEnterpriseAuth`钩子管理登录状态、token存储和验证
 
 ### 组件规范
 **登录页面设计规范**:
@@ -146,40 +233,57 @@ Draft
 
 ### 文件位置
 **页面组件位置**:
-- `mini/src/pages/yongren/login/` - 登录页面组件
-- `mini/src/pages/yongren/dashboard/` - 首页/看板页面组件
+- `mini/src/pages/login/index.tsx` - **登录页面组件**(已由故事011.001改造为企业用户登录页)
+  - 原`mini/src/pages/yongren/login/`目录已删除,统一使用现有登录页面
+  - 需要更新UI样式以匹配原型设计,但核心认证逻辑已就绪
+- `mini/src/pages/yongren/dashboard/index.tsx` - **首页/看板页面组件**(需要创建)
+  - 使用`YongrenTabBarLayout`布局组件,首页标签激活状态
+  - 位置:`mini/src/pages/yongren/dashboard/`目录
 
 **状态管理位置**:
-- `mini/src/stores/auth.ts` - 认证状态管理
-- `mini/src/hooks/useAuth.ts` - 认证相关hooks
+- `mini/src/utils/auth.tsx` - **企业认证上下文提供者**(`EnterpriseAuthProvider`)
+  - 包含`useEnterpriseAuth`钩子,提供登录、登出、状态管理功能
+  - 原`mini/src/stores/auth.ts`用于普通用户认证,企业用户使用统一的企业认证框架
+- `mini/src/hooks/useEnterpriseAuth.ts` - **企业认证钩子**(如果已抽取为独立hook)
 
 ### 技术约束
-- **安全性**:密码传输需加密,token存储安全
+- **基础框架集成**:必须与故事011.001已实现的基础框架无缝集成(API客户端、布局组件、认证框架)
+- **安全性**:密码传输需加密,token存储安全(使用故事011.001提供的企业认证框架)
 - **性能**:首页数据加载需快速,使用缓存策略
-- **错误处理**:网络错误、认证失败等场景需友好提示
-- **兼容性**:与现有mini项目登录页面(普通用户登录)不冲突
+- **错误处理**:网络错误、认证失败等场景需友好提示,使用企业认证框架的错误处理机制
+- **兼容性**:与现有mini项目登录页面(已改造为企业用户登录)保持兼容,样式更新不影响功能
 
 ### 测试要求
 **测试框架**:Jest + Testing Library
+**已有测试基础**(故事011.001已实现):
+- `mini/tests/yongren-api.test.ts` - API客户端集成测试
+- `mini/tests/yongren-routes.test.ts` - 路由配置测试
+- `mini/tests/yongren-components.test.tsx` - 布局组件测试
+- 现有功能回归测试(验证现有功能不受影响)
+
 **关键测试场景**:
 1. **登录功能测试**:
-   - 正常登录流程
-   - 错误手机号格式
-   - 错误密码
-   - 网络异常
+   - 正常登录流程(使用`enterpriseAuthClient.login`)
+   - 错误手机号格式(手机号正则验证:`/^1[3-9]\d{9}$/`)
+   - 错误密码(企业认证API错误响应处理)
+   - 网络异常(错误处理和重试机制)
+   - 与现有登录页面UI样式的集成测试
 2. **首页功能测试**:
-   - 数据加载和展示
-   - 数据刷新
-   - 空状态处理
+   - 数据加载和展示(使用`enterpriseCompanyClient.overview.get()`)
+   - 数据刷新(下拉刷新或手动刷新功能)
+   - 空状态处理(无数据时的UI展示)
+   - 与`YongrenTabBarLayout`的集成测试
 3. **集成测试**:
-   - 从登录到首页的完整流程
-   - 认证状态持久化
-   - 与故事011.001组件的集成
+   - 从登录到首页的完整流程(登录→token存储→页面跳转→数据加载)
+   - 认证状态持久化(使用`useEnterpriseAuth`钩子的状态管理)
+   - 与故事011.001组件的集成(验证与现有布局组件、API客户端、认证框架的兼容性)
+   - 企业用户登录状态下的页面访问权限测试
 
 ## 变更日志
 | 日期 | 版本 | 描述 | 作者 |
 |------|------|------|------|
 | 2025-12-17 | 1.0 | 初始创建(拆分后的认证与首页故事) | Bob(Scrum Master) |
+| 2025-12-18 | 1.1 | 根据故事011.001完成情况更新依赖关系、API规范、文件位置和技术细节 | Bob(Scrum Master) |
 
 ## 开发代理记录
 *此部分由开发代理在实施过程中填充*