基于 detailDesign.md 与当前项目完整实现状态的对比分析,按优先级规划开发任务。
| 模块 | 文件 | 状态 |
|---|---|---|
| 类型定义 | src/type/index.ts |
已完善 — Pet, Package, BoardingRoom, RoomStatus, Appointment, Schedule 完整 |
| 路由配置 | src/router/index.ts |
已完善 — 用户侧 13 条路由 + 管理侧 10 条路由,含导航守卫 |
| 布局组件 | UserLayout.vue, AdminLayout.vue |
已完善 — 导航菜单、用户下拉、侧边栏展开/收起 |
| API 控制器 | src/api/ (13 个文件) |
已完善 — Orval 生成,覆盖全部端点 |
| Pinia Store | 4 个 store | 已完善 — user, meta, pet, appointment |
| 公共组件 | RoomCalendar, PaymentDialog, PetSelector | 已完善 |
| 用户页面 | BookingView, BoardingBookingView, GroomingBookingView | 已实现 — 4 步 Stepper, API 集成, 支付弹窗 |
| 用户订单 | OrderListView, OrderDetailView | 已实现 — Tab 筛选, 支付/取消功能 |
| 宠物档案 | PetListView, PetCreateView, PetDetailView, PetEditView | 已实现 — CRUD, 疫苗/驱虫记录管理 |
| 个人中心 | ProfileView, ProfileEditView, PasswordEditView | 已实现 — 资料展示, 昵称修改, 密码修改 |
| 后台订单 | AdminOrderListView, AdminOrderDetailView | 已实现 — 审核/取消弹窗 |
| 后台房态 | AdminRoomCalendarView | 已实现 — 房型切换 + 日历 + 状态切换 |
| 后台排班 | AdminScheduleListView | 已实现 — CRUD |
| 后台套餐 | AdminPackageListView, CreateView, EditView | 已实现 — CRUD |
| 后台用户 | AdminUserDetailView | 已实现 — 用户信息 + 宠物列表 |
| 登录页面 | LoginView | 已实现 — Tab 切换, 表单校验, 毛玻璃卡片 |
| 构建 | npm run build |
通过 — vue-tsc + vite build 无错误 |
src/components/RoomCalendar.vueprevMonth() / nextMonth() 为空实现(标记 TODO),无法切换月份currentYear, currentMonth 从 const 改为 computed(派生自 props.month)prevMonth() / nextMonth() 中 emit('month-change', newMonth)month-change 重新请求房态数据visible 双向绑定修复src/components/PaymentDialog.vuevisible prop 被复制到本地 ref( props.visible ),但不会随父组件更新而同步变化(v-model:visible 可能失效)computed getter/setter 或 watch 同步,移除本地 const visible = ref(props.visible),直接使用 computed 绑定src/view/order/OrderDetailView.vuehandleCancel 中取消原因硬编码为 { reason: '用户申请取消' },用户无法输入ElMessageBox.prompt 替代 ElMessageBox.confirm,收集用户输入的取消原因后提交 APIsrc/view/order/OrderListView.vuePENDING, CONFIRMED 等),detailDesign 要求显示中文(待审核、已确认)statusLabel() 映射函数,el-tag 内显示中文 + 对应 type 颜色src/view/admin/AdminRoomCalendarView.vueh1 标题为「房态管理」,detailDesign 要求使用「宠物房间管理」术语src/view/pet/PetCreateView.vue, src/view/pet/PetEditView.vueel-form 的 :rules 校验,用户可提交空数据FormRules,至少 name 为必填,weight > 0,提交前调用 formRef.validate()src/view/profile/ProfileEditView.vue:rules 必填校验 + 最小长度 2src/view/profile/PasswordEditView.vueif 判断密码一致性而非表单校验规则,缺少密码长度校验FormRules(原密码必填、新密码 min:4、确认密码自定义校验器)src/layout/UserLayout.vue, src/layout/AdminLayout.vue< 768px 时 TopNav 折叠为汉堡菜单< 768px 时侧边栏自动收起,菜单变为 Drawermax-width 和 flex 布局,小屏无适配@media (max-width: 768px) 样式覆盖:
el-steps 在小屏调整字号/间距src/view/LoginView.vue#db2777, #be185d, #831843),与 var(--el-color-primary) 不一致var(--el-color-primary) / var(--el-color-primary-light-*) / var(--el-color-primary-dark-2)#e34889src/style.css.el-button--primary 中硬编码了渐变颜色 linear-gradient(135deg, #db2777, #be185d)var(--el-color-primary) 和 var(--el-color-primary-dark-2) 构建渐变src/view/HomeView.vuesrc/util/axios-instance.tswithCredentials: true(detailDesign 要求自动携带 Cookie/JSESSIONID)axios.create 配置中添加 withCredentials: truesrc/view/booking/BoardingBookingView.vuelist4 / listRooms / list)分散在各视图重复src/view/order/OrderListView.vueCANCEL_REQUESTED,但 Tab 中缺少该筛选vite.config.ts(需修改)index.js 1.15MB > 500KB 阈值build.rollupOptions.output.manualChunks 将 Element Plus / 三方库拆分阶段一 (P0 缺陷修复) → 阶段二 (P1 表单校验) → 阶段三 (P2 响应式) → 阶段四 (P3 主题色) → 阶段五 (P4 完善)
| 批次 | 任务 | 说明 |
|---|---|---|
| 第一批 | 1.1 + 1.2 + 1.3 | 互不影响,可同步进行 |
| 第二批 | 1.4 + 1.5 + 2.1 + 2.2 + 2.3 | 全部为独立文件修改 |
| 第三批 | 3.1 + 3.2 | 布局 + 多页面响应式 |
| 第四批 | 4.1 + 4.2 + 5.1 | 主题色 + 首页改造 |
| 第五批 | 5.2 + 5.3 + 5.4 + 5.5 | 工具函数 + 构建优化 |
npm run build 确保无 TypeScript / 构建错误