Browse Source

docs: 添加技术规格文档 - UI包整合

yourname 1 day ago
parent
commit
a91534200d

+ 493 - 0
_bmad-output/implementation-artifacts/tech-spec-consolidate-mini-talent-ui-packages.md

@@ -0,0 +1,493 @@
+---
+title: '人才小程序 UI 包代码整合回主目录'
+slug: 'consolidate-mini-talent-ui-packages'
+created: '2026-03-07T15:30:00.000Z'
+status: 'done'
+stepsCompleted: [1, 2, 3, 4, 5, 6]
+tech_stack: ['Taro 4.1.4', 'React 18', 'TypeScript 5.x', 'Hono 4.8.5', '@tanstack/react-query']
+files_to_modify: [
+  'mini-talent/package.json',
+  'mini-talent/src/pages/index/index.tsx',
+  'mini-talent/src/pages/attendance/index.tsx',
+  'mini-talent/src/pages/personal-info/index.tsx',
+  'mini-talent/src/pages/employment/index.tsx',
+  'mini-talent/src/pages/settings/index.tsx',
+  'mini-talent/src/pages/login/index.tsx',
+  'mini-talent/src/pages/account-security/index.tsx'
+]
+code_patterns: ['桥接文件模式', '相对路径导入', 'TabBar 布局模式', 'Hono RPC 客户端']
+test_patterns: ['Jest (单元测试)', 'Playwright MCP (E2E)', '图片 MCP (UI 验证)', '热重载验证']
+
+---
+
+# Tech-Spec: 人才小程序 UI 包代码整合回主目录
+
+**Created:** 2026-03-07
+
+## Overview
+
+### Problem Statement
+
+当前人才小程序的 UI 组件分散在 `mini-ui-packages` 的 7 个独立包中:
+- `rencai-auth-ui`
+- `rencai-dashboard-ui`
+- `rencai-personal-info-ui`
+- `rencai-attendance-ui`
+- `rencai-employment-ui`
+- `rencai-settings-ui`
+- `rencai-shared-ui`
+
+这种分包架构导致 **Taro 热重载失效**:每次修改 UI 组件都需要先构建 UI 包,主小程序才能识别变更。这带来两个问题:
+1. **开发效率低**:修改代码后需等待构建完成
+2. **资源消耗大**:一次性构建所有包消耗大量资源
+
+### Solution
+
+将 7 个 `rencai-*` UI 包的代码**复制**(非移动)回 `mini-talent/` 目录,按 Taro 标准页面结构组织。保留 `mini-ui-packages` 中的原包不动,移除主小程序对这些包的依赖,恢复 Taro 原生热重载能力。
+
+### Scope
+
+**In Scope:**
+- 复制 7 个 `rencai-*` UI 包代码到 `mini-talent/src/`
+- 按 Taro 页面结构组织:`pages/`、`components/`、`api/`、`utils/`
+- 移除 `mini-talent/package.json` 中的相关 `workspace:*` 依赖
+- 调整复制后的内部导入路径
+- 更新 `mini-talent` 的路由配置
+
+**Out of Scope:**
+- 原始 `mini-ui-packages` 包的删除或修改(保持原样)
+- 企业小程序 (`yongren-*`) 相关包
+- Mini UI 包的 Jest 测试文件迁移(使用 Playwright MCP + 图片 MCP 代替)
+- CI/CD 流程修改
+
+## Context for Development
+
+### Codebase Patterns
+
+**Taro 小程序标准结构**:
+```
+mini-talent/
+├── src/
+│   ├── pages/           # 页面组件
+│   ├── components/      # 共享组件
+│   ├── api/             # API 调用
+│   ├── utils/           # 工具函数
+│   ├── services/        # 业务逻辑
+│   ├── types/           # TypeScript 类型
+│   └── app.tsx          # 应用入口
+```
+
+**当前桥接文件模式** (需要替换):
+```typescript
+// mini-talent/src/pages/index/index.tsx
+import Dashboard from '@d8d/rencai-dashboard-ui/pages/Dashboard/Dashboard'
+export default Dashboard
+```
+
+**UI 包内部导入模式** (需要调整):
+```typescript
+// 页面内相对路径导入组件
+import UserInfoHeader from '../../components/UserInfoHeader'
+import PersonalBasicInfo from '../../components/PersonalBasicInfo'
+
+// 跨包导入共享组件
+import { RencaiTabBarLayout } from '@d8d/rencai-shared-ui/components/RencaiTabBarLayout'
+import { Navbar } from '@d8d/mini-shared-ui-components/components/navbar'
+```
+
+**TabBar 布局模式**:
+```typescript
+<RencaiTabBarLayout activeKey="index">
+  {/* 页面内容 */}
+</RencaiTabBarLayout>
+```
+
+**Hono RPC 客户端模式**:
+```typescript
+import { talentDashboardClient } from '../../api'
+type ResponseType = InferResponseType<typeof talentDashboardClient.personal.info.$get, 200>
+```
+
+### UI 包源码结构 (调查结果)
+
+| 包 | 页面 | 组件数 | API | Utils/Types |
+|---|------|--------|-----|-------------|
+| `rencai-auth-ui` | LoginPage | - | talentAuthClient | useAuth hook |
+| `rencai-dashboard-ui` | Dashboard | - | talentDashboardClient | - |
+| `rencai-personal-info-ui` | PersonalInfoPage | 5 | talentPersonalInfoClient | maskUtils |
+| `rencai-attendance-ui` | AttendancePage | 5 | talentAttendanceClient | mockAttendanceData + types |
+| `rencai-employment-ui` | EmploymentPage | 5 | talentEmploymentClient | types |
+| `rencai-settings-ui` | SettingsPage, AccountSecurityPage | 4 | talentSettingsClient | types |
+| `rencai-shared-ui` | - | 1 (RencaiTabBarLayout) | - | - |
+
+**总计**: ~30 个组件文件, ~7 个 API 客户端, ~3 个工具/类型文件
+
+### Files to Reference
+
+| 源文件 | 目标位置 | 说明 |
+|--------|----------|------|
+| `mini-ui-packages/rencai-shared-ui/src/components/RencaiTabBarLayout.tsx` | `mini-talent/src/components/RencaiTabBarLayout.tsx` | TabBar 布局组件 |
+| `mini-ui-packages/rencai-auth-ui/src/pages/LoginPage/LoginPage.tsx` | `mini-talent/src/pages/login/index.tsx` | 登录页面 |
+| `mini-ui-packages/rencai-dashboard-ui/src/pages/Dashboard/Dashboard.tsx` | `mini-talent/src/pages/index/index.tsx` | 首页/Dashboard |
+| `mini-ui-packages/rencai-personal-info-ui/src/pages/PersonalInfoPage/PersonalInfoPage.tsx` | `mini-talent/src/pages/personal-info/index.tsx` | 个人信息页 |
+| `mini-ui-packages/rencai-attendance-ui/src/pages/AttendancePage/AttendancePage.tsx` | `mini-talent/src/pages/attendance/index.tsx` | 考勤页面 |
+| `mini-ui-packages/rencai-employment-ui/src/pages/EmploymentPage/EmploymentPage.tsx` | `mini-talent/src/pages/employment/index.tsx` | 用工页面 |
+| `mini-ui-packages/rencai-settings-ui/src/pages/SettingsPage/SettingsPage.tsx` | `mini-talent/src/pages/settings/index.tsx` | 设置页面 |
+| `mini-ui-packages/rencai-settings-ui/src/pages/AccountSecurityPage/AccountSecurityPage.tsx` | `mini-talent/src/pages/account-security/index.tsx` | 账户安全页 |
+| 各包 `src/api/*.ts` | `mini-talent/src/api/*.ts` | 合并 API 客户端 |
+| 各包 `src/components/*.tsx` | `mini-talent/src/components/*.tsx` 或 `mini-talent/src/pages/xxx/components/` | 页面组件 |
+| 各包 `src/utils/*.ts` | `mini-talent/src/utils/*.ts` | 工具函数 |
+| 各包 `src/types/*.ts` | `mini-talent/src/types/*.ts` | 类型定义 |
+| `mini-talent/package.json` | (更新) | 移除 rencai-* 依赖 |
+| `mini-talent/src/app.config.ts` | (确认) | 页面路由已配置 |
+
+### Technical Decisions
+
+1. **AI 逐个文件处理导入路径**:不使用脚本,由 AI 直接读取复制的文件并修改 import 语句,确保精确且处理边界情况
+2. **复制而非移动**:保留原包作为备份/参考
+3. **保持现有页面结构**:`mini-talent/src/pages/xxx/index.tsx` 格式不变,页面内部导航链接(如 `Taro.navigateTo({ url: '/pages/attendance/index' })`)保持不变
+4. **只修改 import 导入语句**:处理时只修改 `import` 语句中的包路径,不修改页面内的导航链接
+5. **保留包子目录结构避免命名冲突**:组件复制时保留包子目录前缀,避免同名组件覆盖
+6. **共享组件合并**:`rencai-shared-ui/components/` → `mini-talent/src/components/`(唯一共享组件)
+7. **API/Utils/Types 合并**:所有包的 `api/`, `utils/`, `types/` 合并到 `mini-talent/src/` 主目录,需检查命名冲突
+8. **导入路径调整**:
+   - 由 AI 逐个文件处理导入路径
+   - 页面内组件保持相对路径: `./components/xxx`
+   - 共享组件改为相对路径: `../../components/xxx`
+   - API 导入改为: `@/api/xxx` 或 `../../api/xxx`
+9. **组件内部导入路径处理**:复制后的组件内部原本的相对导入路径需要重写
+10. **中间验证检查点**:在每个阶段后插入验证步骤,失败则停止
+11. **依赖清理**:移除 `@d8d/rencai-*` 相关依赖,保留 `@d8d/mini-shared-ui-components`
+
+### 审查修复记录 (2026-03-07 Party Mode)
+
+| 问题 | 修复方案 | 状态 |
+|------|----------|------|
+| F1: sed 跨平台不兼容 | 改为 AI 逐个文件处理,无需脚本 | ✅ 已修复 |
+| F2: 目录路径不完整 | 所有命令使用完整路径 `mini-talent/src/` | ✅ 已修复 |
+| F3: 组件命名冲突 | 保留包子目录结构,检查命名冲突 | ✅ 已修复 |
+| F4: hooks 目录未创建 | Task 1.1 添加 hooks 目录 | ✅ 已修复 |
+| F5: 组件内导入路径失效 | 阶段 4 由 AI 逐个文件处理 | ✅ 已修复 |
+| F6: config 文件丢失 | 新增 Task 3.8 处理 config 文件 | ✅ 已修复 |
+| F7: 缺少 index.ts 导出 | 新增 Task 2.9 创建导出文件 | ✅ 已修复 |
+| F8: pnpm install 位置 | 明确在项目根目录执行 | ✅ 已修复 |
+| F9: 类型文件命名冲突 | 添加检查命名冲突步骤 | ✅ 已修复 |
+| F10: 热重载验证不具体 | 完善 AC 1 验证步骤 | ✅ 已修复 |
+| F11: 缺少中间验证 | 新增检查点任务 | ✅ 已修复 |
+| F12: sed 匹配不精确 | AI 逐个文件处理确保精确 | ✅ 已修复 |
+
+## Implementation Plan
+
+### Tasks
+
+#### 阶段 1: 环境准备 (5分钟)
+
+- [ ] **Task 1.1**: 创建目标目录
+  - **File**: `mini-talent/src/`
+  - **Action**: `cd /mnt/code/188-179-template-6/mini-talent && mkdir -p src/api src/components src/utils src/types src/hooks`
+  - **Notes**: 使用完整路径,确保所有目标目录存在
+
+#### 阶段 2: 共享资源迁移 (使用 cp 命令) (20分钟)
+
+- [ ] **Task 2.1**: 复制 RencaiTabBarLayout 组件
+  - **File**: `mini-talent/src/components/RencaiTabBarLayout.tsx`
+  - **Action**: `cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-shared-ui/src/components/RencaiTabBarLayout.tsx /mnt/code/188-179-template-6/mini-talent/src/components/`
+  - **Notes**: 使用完整路径,直接复制
+
+- [ ] **Task 2.2**: 复制认证相关资源
+  - **File**: `mini-talent/src/api/`, `mini-talent/src/hooks/`
+  - **Action**:
+    ```bash
+    cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-auth-ui/src/api/talentAuthClient.ts /mnt/code/188-179-template-6/mini-talent/src/api/
+    cp -r /mnt/code/188-179-template-6/mini-ui-packages/rencai-auth-ui/src/hooks/* /mnt/code/188-179-template-6/mini-talent/src/hooks/
+    ```
+  - **Notes**: 复制 API 客户端和 useAuth hook
+
+- [ ] **Task 2.3**: 复制 Dashboard API
+  - **File**: `mini-talent/src/api/`
+  - **Action**: `cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-dashboard-ui/src/api/talentDashboardClient.ts /mnt/code/188-179-template-6/mini-talent/src/api/`
+
+- [ ] **Task 2.4**: 复制个人信息相关资源
+  - **File**: `mini-talent/src/api/`, `mini-talent/src/components/`, `mini-talent/src/utils/`
+  - **Action**:
+    ```bash
+    cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-personal-info-ui/src/api/talentPersonalInfoClient.ts /mnt/code/188-179-template-6/mini-talent/src/api/
+    cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-personal-info-ui/src/components/*.tsx /mnt/code/188-179-template-6/mini-talent/src/components/
+    cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-personal-info-ui/src/utils/maskUtils.ts /mnt/code/188-179-template-6/mini-talent/src/utils/
+    ```
+  - **Notes**: 5 个组件 + 1 个工具函数
+
+- [ ] **Task 2.5**: 复制考勤相关资源
+  - **File**: `mini-talent/src/api/`, `mini-talent/src/components/`, `mini-talent/src/utils/`, `mini-talent/src/types/`
+  - **Action**:
+    ```bash
+    cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-attendance-ui/src/api/talentAttendanceClient.ts /mnt/code/188-179-template-6/mini-talent/src/api/
+    cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-attendance-ui/src/components/*.tsx /mnt/code/188-179-template-6/mini-talent/src/components/
+    cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-attendance-ui/src/utils/mockAttendanceData.ts /mnt/code/188-179-template-6/mini-talent/src/utils/
+    cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-attendance-ui/src/types/attendance.ts /mnt/code/188-179-template-6/mini-talent/src/types/
+    ```
+  - **Notes**: 5 个组件 + 1 个工具函数 + 类型定义
+
+- [ ] **Task 2.6**: 复制用工相关资源
+  - **File**: `mini-talent/src/api/`, `mini-talent/src/components/`, `mini-talent/src/types/`
+  - **Action**:
+    ```bash
+    cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-employment-ui/src/api/talentEmploymentClient.ts /mnt/code/188-179-template-6/mini-talent/src/api/
+    cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-employment-ui/src/components/*.tsx /mnt/code/188-179-template-6/mini-talent/src/components/
+    cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-employment-ui/src/types/employment.ts /mnt/code/188-179-template-6/mini-talent/src/types/
+    ```
+  - **Notes**: 5 个组件 + 类型定义
+
+- [ ] **Task 2.7**: 复制设置相关资源
+  - **File**: `mini-talent/src/api/`, `mini-talent/src/components/`, `mini-talent/src/types/`
+  - **Action**:
+    ```bash
+    cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-settings-ui/src/api/talentSettingsClient.ts /mnt/code/188-179-template-6/mini-talent/src/api/
+    cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-settings-ui/src/components/*.tsx /mnt/code/188-179-template-6/mini-talent/src/components/
+    cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-settings-ui/src/types/settings.ts /mnt/code/188-179-template-6/mini-talent/src/types/
+    ```
+  - **Notes**: 4 个组件 + 类型定义
+
+- [ ] **Task 2.8**: 创建统一 API 导出文件
+  - **File**: `mini-talent/src/api/index.ts`
+  - **Action**: 创建统一的导出文件,导出所有 API 客户端
+  - **Notes**: 新建文件,内容示例:
+    ```typescript
+    export { talentAuthClient } from './talentAuthClient'
+    export { talentDashboardClient } from './talentDashboardClient'
+    export { talentPersonalInfoClient } from './talentPersonalInfoClient'
+    export { talentAttendanceClient } from './talentAttendanceClient'
+    export { talentEmploymentClient } from './talentEmploymentClient'
+    export { talentSettingsClient } from './talentSettingsClient'
+    ```
+
+- [ ] **Task 2.9**: 创建 components/index.ts 导出文件
+  - **File**: `mini-talent/src/components/index.ts`
+  - **Action**: 创建统一导出文件,导出所有组件
+  - **Notes**: 新建文件,确保组件可被正确导入
+
+- [ ] **Task 2.10**: 检查命名冲突 (验证点 1)
+  - **Action**:
+    ```bash
+    # 检查是否有重复的文件名
+    cd /mnt/code/188-179-template-6/mini-talent/src/components && ls *.tsx | sort | uniq -d
+    # 检查 types 目录
+    cd /mnt/code/188-179-template-6/mini-talent/src/types && ls *.ts | sort | uniq -d
+    ```
+  - **Notes**: 如果有重复文件名,需要手动处理(重命名或合并)
+
+#### 阶段 3: 页面迁移 (使用 cp 命令) (10分钟)
+
+- [ ] **Task 3.1**: 替换首页 (Dashboard)
+  - **File**: `mini-talent/src/pages/index/index.tsx`
+  - **Action**: `cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-dashboard-ui/src/pages/Dashboard/Dashboard.tsx /mnt/code/188-179-template-6/mini-talent/src/pages/index/index.tsx`
+  - **Notes**: 直接覆盖桥接文件
+
+- [ ] **Task 3.2**: 替换个人信息页
+  - **File**: `mini-talent/src/pages/personal-info/index.tsx`
+  - **Action**: `cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-personal-info-ui/src/pages/PersonalInfoPage/PersonalInfoPage.tsx /mnt/code/188-179-template-6/mini-talent/src/pages/personal-info/index.tsx`
+
+- [ ] **Task 3.3**: 替换考勤页面
+  - **File**: `mini-talent/src/pages/attendance/index.tsx`
+  - **Action**: `cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-attendance-ui/src/pages/AttendancePage/AttendancePage.tsx /mnt/code/188-179-template-6/mini-talent/src/pages/attendance/index.tsx`
+
+- [ ] **Task 3.4**: 替换用工页面
+  - **File**: `mini-talent/src/pages/employment/index.tsx`
+  - **Action**: `cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-employment-ui/src/pages/EmploymentPage/EmploymentPage.tsx /mnt/code/188-179-template-6/mini-talent/src/pages/employment/index.tsx`
+
+- [ ] **Task 3.5**: 替换登录页面
+  - **File**: `mini-talent/src/pages/login/index.tsx`
+  - **Action**: `cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-auth-ui/src/pages/LoginPage/LoginPage.tsx /mnt/code/188-179-template-6/mini-talent/src/pages/login/index.tsx`
+
+- [ ] **Task 3.6**: 替换设置页面
+  - **File**: `mini-talent/src/pages/settings/index.tsx`
+  - **Action**: `cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-settings-ui/src/pages/SettingsPage/SettingsPage.tsx /mnt/code/188-179-template-6/mini-talent/src/pages/settings/index.tsx`
+
+- [ ] **Task 3.7**: 替换账户安全页面
+  - **File**: `mini-talent/src/pages/account-security/index.tsx`
+  - **Action**: `cp /mnt/code/188-179-template-6/mini-ui-packages/rencai-settings-ui/src/pages/AccountSecurityPage/AccountSecurityPage.tsx /mnt/code/188-179-template-6/mini-talent/src/pages/account-security/index.tsx`
+
+- [ ] **Task 3.8**: 处理页面配置文件
+  - **File**: `mini-talent/src/pages/*/index.config.ts`
+  - **Action**: 检查各页面是否有 `index.config.ts`,如有则保留现有配置,复制页面时不要覆盖
+  - **Notes**: 页面配置文件(如导航栏标题)需要保留
+
+#### 阶段 4: AI 逐个文件处理导入路径 (20分钟)
+
+> **说明**: 此阶段由 AI 逐个读取复制的文件,修改其 import 语句。不使用脚本,确保精确处理。
+
+- [ ] **Task 4.1**: 处理页面文件的导入路径
+  - **文件列表**:
+    - `mini-talent/src/pages/index/index.tsx`
+    - `mini-talent/src/pages/personal-info/index.tsx`
+    - `mini-talent/src/pages/attendance/index.tsx`
+    - `mini-talent/src/pages/employment/index.tsx`
+    - `mini-talent/src/pages/settings/index.tsx`
+    - `mini-talent/src/pages/login/index.tsx`
+    - `mini-talent/src/pages/account-security/index.tsx`
+  - **AI 操作**: 逐个读取文件,执行以下替换:
+    - `@d8d/rencai-shared-ui/components/RencaiTabBarLayout` → `../../components/RencaiTabBarLayout`
+    - `@d8d/rencai-auth-ui/hooks` → `../../hooks`
+    - 其他 `@d8d/rencai-*` 导入按需调整
+  - **Notes**: 只修改 import 语句,不修改页面内导航链接
+
+- [ ] **Task 4.2**: 处理组件文件的导入路径
+  - **文件**: `mini-talent/src/components/*.tsx` (所有复制的组件)
+  - **AI 操作**: 逐个读取组件文件,修正其内部的相对导入路径
+  - **Notes**: 组件原本的 `../../api/xxx` 等路径需要调整为正确的相对路径
+
+- [ ] **Task 4.3**: 验证导入路径清理 (验证点 2)
+  - **Action**:
+    ```bash
+    grep -r "@d8d/rencai-" /mnt/code/188-179-template-6/mini-talent/src/ --include="*.tsx" --include="*.ts"
+    ```
+  - **Notes**: 应该没有输出。如有残留,由 AI 继续处理
+
+- [ ] **Task 4.4**: 类型检查验证 (验证点 3)
+  - **Action**: 运行 `pnpm run typecheck`
+  - **Notes**: 根据错误信息由 AI 修复遗漏的导入路径
+
+#### 阶段 5: 配置更新 (5分钟)
+
+- [ ] **Task 5.1**: 更新 package.json
+  - **File**: `mini-talent/package.json`
+  - **Action**: 手动编辑或使用编辑器移除以下 7 个依赖:
+    ```json
+    "@d8d/rencai-auth-ui": "workspace:*",
+    "@d8d/rencai-dashboard-ui": "workspace:*",
+    "@d8d/rencai-personal-info-ui": "workspace:*",
+    "@d8d/rencai-attendance-ui": "workspace:*",
+    "@d8d/rencai-employment-ui": "workspace:*",
+    "@d8d/rencai-settings-ui": "workspace:*",
+    "@d8d/rencai-shared-ui": "workspace:*"
+    ```
+  - **Notes**: 保留 `@d8d/mini-shared-ui-components` 和其他依赖
+
+#### 阶段 6: 验证与测试 (20分钟)
+
+- [ ] **Task 6.1**: 清理并重新安装依赖
+  - **Action**: 在项目根目录运行 `cd /mnt/code/188-179-template-6 && pnpm install`
+  - **Notes**: 确保依赖正确更新
+
+- [ ] **Task 6.2**: 类型检查
+  - **Action**: 运行 `pnpm run typecheck`
+  - **Notes**: 修复所有类型错误
+
+- [ ] **Task 6.3**: 编译验证
+  - **Action**: 运行 `pnpm run dev:weapp`
+  - **Notes**: 确认编译成功,无错误
+
+- [ ] **Task 6.4**: 热重载验证 (详细步骤)
+  - **Action**:
+    1. 启动开发服务器后,保持运行
+    2. 修改 `mini-talent/src/pages/index/index.tsx` 任意代码
+    3. 观察终端输出,确认自动重新编译
+    4. 确认没有 "正在构建 UI 包" 相关输出
+  - **Notes**: 热重载应立即生效(1-3秒内),无需等待 UI 包构建
+
+- [ ] **Task 6.5**: E2E 测试
+  - **Action**: 使用 Playwright MCP 遍历各页面功能
+  - **Notes**: 验证登录、首页、个人信息、考勤、用工、设置页面
+
+- [ ] **Task 6.6**: UI 验证
+  - **Action**: 使用图片 MCP 截图对比各页面
+  - **Notes**: 确认 UI 渲染正确无误
+
+### Acceptance Criteria
+
+- [ ] **AC 1**: Given 开发环境已启动 `pnpm run dev:weapp`,当修改任意页面代码时,then Taro 开发服务器应在 1-3 秒内自动重新编译,终端输出显示编译完成,无需等待 UI 包构建,且页面自动刷新显示更改
+- [ ] **AC 1.1** (补充验证): Given 修改代码后,当观察终端输出时,then 应该看到类似 "Compiled successfully" 或 "✓ built" 的提示,**不应**看到任何关于构建 UI 包的输出
+- [ ] **AC 1.2** (补充验证): Given 修改代码并等待编译完成后,当刷新小程序时,then 页面应显示最新的更改内容
+
+- [ ] **AC 2**: Given 用户已登录,当访问首页 `/pages/index/index` 时,then Dashboard 页面应正常渲染,显示用户信息、打卡状态、快捷功能入口
+
+- [ ] **AC 3**: Given 用户已登录,当访问个人信息页 `/pages/personal-info/index` 时,then 页面应正常渲染,显示用户基本信息、银行卡信息、证件照片
+
+- [ ] **AC 4**: Given 用户已登录,当访问考勤页面 `/pages/attendance/index` 时,then 页面应正常渲染,显示考勤日历、出勤统计
+
+- [ ] **AC 5**: Given 用户已登录,当访问用工页面 `/pages/employment/index` 时,then 页面应正常渲染,显示当前用工状态、薪资记录
+
+- [ ] **AC 6**: Given 用户已登录,当访问设置页面 `/pages/settings/index` 时,then 页面应正常渲染,显示用户信息摘要、菜单选项
+
+- [ ] **AC 7**: Given 访问登录页 `/pages/login/index` 时,then 页面应正常渲染,可以执行登录操作
+
+- [ ] **AC 8**: Given 执行 `pnpm run typecheck`,then 应无 TypeScript 类型错误
+
+- [ ] **AC 9**: Given 检查 `mini-talent/package.json`,then 应不包含任何 `@d8d/rencai-*` 依赖
+
+- [ ] **AC 10**: Given 检查 `mini-ui-packages/` 目录,then 所有 `rencai-*` 包应保持不变
+
+- [ ] **AC 11**: Given 使用 Playwright MCP 访问 H5 版本小程序,当遍历所有页面时,then 页面应正常渲染,无控制台错误
+
+- [ ] **AC 12**: Given 使用图片 MCP 截图各页面,then 页面 UI 应与原设计一致
+
+- [ ] **AC 13** (新增): Given 执行 `grep -r "@d8d/rencai-" mini-talent/src/`,then 应该没有输出(所有 rencai 包导入已清理)
+
+- [ ] **AC 14** (新增): Given 检查 `mini-talent/src/components/` 目录,then 不应该有重复的组件文件名
+
+## Additional Context
+
+### Dependencies
+
+**外部依赖**:
+- Taro 4.1.4 - 小程序开发框架
+- React 18 - UI 框架
+- TypeScript 5.x - 类型检查
+- Hono 4.8.5 - API 客户端
+- @tanstack/react-query - 数据获取
+
+**内部依赖** (保持):
+- `@d8d/mini-shared-ui-components` - 通用 UI 组件 (Navbar, TabBar 等)
+- `@d8d/allin-*` - 业务模块依赖 (按需保留)
+
+**内部依赖** (移除):
+- `@d8d/rencai-auth-ui` → 迁移到 `mini-talent/src/`
+- `@d8d/rencai-dashboard-ui` → 迁移到 `mini-talent/src/`
+- `@d8d/rencai-personal-info-ui` → 迁移到 `mini-talent/src/`
+- `@d8d/rencai-attendance-ui` → 迁移到 `mini-talent/src/`
+- `@d8d/rencai-employment-ui` → 迁移到 `mini-talent/src/`
+- `@d8d/rencai-settings-ui` → 迁移到 `mini-talent/src/`
+- `@d8d/rencai-shared-ui` → 迁移到 `mini-talent/src/`
+
+### Testing Strategy
+
+**单元测试 (Jest)**:
+- 保留 `mini-talent` 中的 Jest 单元测试
+- 新增组件和工具函数可添加 Jest 测试
+
+**端到端测试 (Playwright MCP)**:
+- 使用 Playwright MCP 访问 H5 版本小程序
+- 测试路径: `http://localhost:8080/talent-mini`
+- 测试账号: 13800138004 / 123123
+- 测试流程: 登录 → 首页 → 个人信息 → 考勤 → 用工 → 设置
+
+**UI 验证 (图片 MCP)**:
+- 使用图片 MCP 截图分析各页面渲染结果
+- 验证布局、样式、内容正确性
+
+**热重载验证**:
+- 修改任意页面代码,观察 Taro 开发服务器是否自动重新编译
+- 预期: 立即生效,无需等待 UI 包构建
+
+### Notes
+
+**回退方案**:
+- 原包 `mini-ui-packages/rencai-*` 保持不变,可作为参考
+- 如需回退,执行以下步骤:
+  1. 恢复 `mini-talent/package.json` 中的 7 个 `@d8d/rencai-*` 依赖
+  2. 删除 `mini-talent/src/` 中新增的组件、API、hooks 文件
+  3. 恢复原有的桥接页面文件
+  4. 运行 `pnpm install` 重新安装依赖
+
+**风险提示**:
+- **命名冲突**: 多个包可能有同名组件,Task 2.10 会检测,需手动处理
+- **导入路径遗漏**: 组件内部可能有复杂的导入依赖,阶段 4 由 AI 逐个文件处理
+- **页面配置丢失**: 某些页面有自定义 `index.config.ts`,Task 3.8 会处理
+- **AI 处理精确性**: 阶段 4 由 AI 逐个文件处理,确保理解上下文,比脚本更可靠
+- **中间验证**: 每个验证点失败时需停止并修复,否则后续步骤会累积错误
+
+**后续优化** (不在本次范围):
+- 可考虑添加 TypeScript 路径别名 `@/` 简化导入
+- 可考虑统一 API 客户端的错误处理
+- 可考虑添加组件 Storybook 文档
+- 可考虑将此迁移过程自动化为脚本