# Vue 迁移检查清单 ## 📋 迁移前准备 ### 代码备份 - [ ] 创建新的 Git 分支 `vue-migration` - [ ] 提交当前所有更改 - [ ] 创建备份标签 `git tag backup-before-vue-migration` ### 环境准备 - [ ] 确认 Node.js 版本 >= 16.0.0 - [ ] 清理 node_modules 和 package-lock.json - [ ] 准备测试环境 --- ## 🔧 依赖管理 ### 移除 React 依赖 - [ ] 移除 `react` - [ ] 移除 `react-dom` - [ ] 移除 `lucide-react` - [ ] 移除 `@vitejs/plugin-react` - [ ] 移除 `@types/react` - [ ] 移除 `@types/react-dom` - [ ] 移除 `eslint-plugin-react-hooks` - [ ] 移除 `eslint-plugin-react-refresh` ### 安装 Vue 依赖 - [ ] 安装 `vue@^3.4.0` - [ ] 安装 `pinia@^2.1.0` - [ ] 安装 `vue-router@^4.2.0` (可选) - [ ] 安装 `lucide-vue-next@^0.344.0` - [ ] 安装 `@vueuse/core@^10.7.0` (可选) - [ ] 安装 `@vitejs/plugin-vue@^5.0.0` - [ ] 安装 `vue-tsc@^1.8.25` - [ ] 安装 `@vue/eslint-config-typescript@^12.0.0` - [ ] 安装 `eslint-plugin-vue@^9.20.0` --- ## ⚙️ 配置文件更新 ### package.json - [ ] 更新 `scripts.build` 为 `vue-tsc && vite build` - [ ] 更新 `scripts.lint` 支持 Vue 文件 - [ ] 添加 `scripts.type-check` 脚本 - [ ] 移除所有 React 相关依赖 - [ ] 添加所有 Vue 相关依赖 ### vite.config.ts - [ ] 替换 `@vitejs/plugin-react` 为 `@vitejs/plugin-vue` - [ ] 添加路径别名 `@` 指向 `./src` - [ ] 保持服务器配置不变 - [ ] 保持预览配置不变 ### tsconfig.json - [ ] 更新 `jsx` 为 `"preserve"` - [ ] 添加 `baseUrl: "."` - [ ] 添加 `paths: { "@/*": ["./src/*"] }` - [ ] 确保 `include` 包含 `*.vue` 文件 ### 新建文件 - [ ] 创建 `src/env.d.ts` (Vue 类型声明) - [ ] 创建 `.eslintrc.cjs` (ESLint 配置) - [ ] 创建 `src/stores/` 目录 (Pinia stores) --- ## 📁 文件结构迁移 ### 组件文件转换 - [ ] `src/components/ProgressBar.tsx` → `ProgressBar.vue` - [ ] `src/components/SidebarItem.tsx` → `SidebarItem.vue` - [ ] `src/components/TableCheckItem.tsx` → `TableCheckItem.vue` - [ ] `src/components/Toast.tsx` → `Toast.vue` + `ToastItem.vue` - [ ] `src/layouts/MainLayout.tsx` → `MainLayout.vue` - [ ] `src/layouts/Sidebar.tsx` → `Sidebar.vue` - [ ] `src/pages/DashboardView.tsx` → `DashboardView.vue` - [ ] `src/pages/ProjectListView.tsx` → `ProjectListView.vue` - [ ] `src/pages/EngagementView.tsx` → `EngagementView.vue` - [ ] `src/pages/engagement/SetupStep.tsx` → `SetupStep.vue` - [ ] `src/pages/engagement/InventoryStep.tsx` → `InventoryStep.vue` - [ ] `src/pages/engagement/ContextStep.tsx` → `ContextStep.vue` - [ ] `src/pages/engagement/ValueStep.tsx` → `ValueStep.vue` - [ ] `src/pages/engagement/DeliveryStep.tsx` → `DeliveryStep.vue` ### 状态管理迁移 - [ ] `src/contexts/ToastContext.tsx` → `src/stores/toast.ts` (Pinia) - [ ] 创建 `src/stores/index.ts` (Pinia 导出) ### 入口文件迁移 - [ ] `src/main.tsx` → `src/main.ts` - [ ] `src/App.tsx` → `src/App.vue` ### 保持不变的文件 - [ ] `src/types/index.ts` (类型定义) - [ ] `src/data/mockData.ts` (模拟数据) - [ ] `src/index.css` (样式文件) - [ ] `tailwind.config.js` (Tailwind 配置) --- ## 🔄 代码转换检查 ### Hooks 转换 - [ ] 所有 `useState` 转换为 `ref` 或 `reactive` - [ ] 所有 `useEffect` 转换为 `watch` 或 `watchEffect` - [ ] 所有 `useMemo` 转换为 `computed` - [ ] 所有 `useCallback` 转换为普通函数或 `computed` - [ ] 所有 `useContext` 转换为 `inject` 或 Pinia store - [ ] 所有 `useRef` 转换为 `ref` ### 事件处理转换 - [ ] 所有 `onClick` 转换为 `@click` - [ ] 所有 `onChange` 转换为 `@change` 或 `v-model` - [ ] 所有 `onSubmit` 转换为 `@submit` - [ ] 所有事件处理器参数正确传递 ### 条件渲染转换 - [ ] 所有 `{condition && }` 转换为 `` - [ ] 所有三元表达式转换为 `v-if/v-else` - [ ] 所有 `map` 循环转换为 `v-for` ### Props 和 Emits - [ ] 所有组件 Props 使用 `defineProps()` - [ ] 所有事件使用 `defineEmits()` - [ ] Props 传递使用 `:prop="value"` - [ ] 事件监听使用 `@event="handler"` ### 图标库转换 - [ ] 所有 `lucide-react` 导入替换为 `lucide-vue-next` - [ ] 所有图标组件 `size={20}` 替换为 `:size="20"` - [ ] 所有图标组件正确渲染 ### 样式类转换 - [ ] 所有 `className` 替换为 `class` - [ ] 所有动态类使用 `:class` 绑定 - [ ] Tailwind CSS 类保持不变 --- ## 🧪 功能测试清单 ### Dashboard 页面 - [ ] KPI 卡片正常显示 - [ ] 项目作业全景表正常显示 - [ ] 风险雷达正常显示 - [ ] 所有数据正常加载 ### 项目列表页面 - [ ] 项目列表正常显示 - [ ] 搜索功能正常 - [ ] 筛选功能正常 - [ ] 项目卡片点击正常 - [ ] 新建项目功能正常 ### 项目作业台 - [ ] 步骤导航器正常显示 - [ ] 步骤切换正常 - [ ] SetupStep: 表单验证正常 - [ ] SetupStep: 行业选择正常 - [ ] InventoryStep: 方案选择正常 - [ ] InventoryStep: 文件上传正常 - [ ] InventoryStep: 结果表格正常 - [ ] InventoryStep: 排序功能正常 - [ ] ContextStep: 表单填写正常 - [ ] ContextStep: 场景添加正常 - [ ] ValueStep: 场景显示正常 - [ ] ValueStep: 场景选择正常 - [ ] DeliveryStep: 交付物列表正常 - [ ] DeliveryStep: 下载功能正常 ### 通用功能 - [ ] Toast 通知正常显示 - [ ] Toast 自动关闭正常 - [ ] 演示模式切换正常 - [ ] 侧边栏导航正常 - [ ] 响应式布局正常 - [ ] 移动端适配正常 --- ## 🐛 错误检查 ### 编译错误 - [ ] 运行 `npm run dev` 无编译错误 - [ ] 运行 `npm run build` 无构建错误 - [ ] 运行 `npm run type-check` 无类型错误 ### 运行时错误 - [ ] 浏览器控制台无错误 - [ ] 所有页面正常加载 - [ ] 所有交互正常响应 ### 类型错误 - [ ] 所有 TypeScript 类型正确 - [ ] 所有组件 Props 类型正确 - [ ] 所有事件类型正确 --- ## 📊 性能检查 ### 加载性能 - [ ] 首屏加载时间 ≤ 2s - [ ] 页面切换流畅 - [ ] 无长时间阻塞 ### 运行时性能 - [ ] 大数据量表格渲染正常 - [ ] 无内存泄漏 - [ ] 无不必要的重渲染 --- ## 🧹 清理工作 ### 删除旧文件 - [ ] 删除所有 `.tsx` 文件 - [ ] 删除 `src/contexts/` 目录(如果不再需要) - [ ] 删除 React 相关配置文件 ### 更新文档 - [ ] 更新 README.md - [ ] 更新技术栈说明 - [ ] 更新开发指南 - [ ] 更新部署文档 ### Git 提交 - [ ] 提交所有更改 - [ ] 编写详细的提交信息 - [ ] 创建 Pull Request(如适用) --- ## ✅ 最终验收 ### 功能完整性 - [ ] 所有功能正常工作 - [ ] 所有交互行为一致 - [ ] 所有样式保持一致 ### 代码质量 - [ ] 代码符合 Vue 3 最佳实践 - [ ] 无 ESLint 错误 - [ ] 无 TypeScript 错误 - [ ] 代码注释完整 ### 文档完整性 - [ ] README 已更新 - [ ] 迁移文档完整 - [ ] 代码注释清晰 --- ## 📝 备注 在迁移过程中遇到的问题和解决方案: 1. 2. 3. --- **迁移完成日期**: _______________ **迁移负责人**: _______________ **审核人**: _______________