|
|
@@ -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 文档
|
|
|
+- 可考虑将此迁移过程自动化为脚本
|