comet_change: weapp-fixes-and-schedule-creation role: technical-design canonical_spec: openspec archived-with: 2026-06-25-weapp-fixes-and-schedule-creation
本次变更修复清道夫 App 的 5 个 UI/交互问题,并补全后端缺失的车辆下拉接口:
navigationStyle: custom。TopBar.vue、CapsuleSafeArea.vue。src/custom-tab-bar/index.js。目标:
/vehicle/simple-list。非目标:
src/components/common/TopBar.vue,将 showBack 默认值从 true 改为 false。:showBack="true"。<TopBar 使用处,为需要返回的非 tab 页面补充属性。TaskListView.vue 的发布/新增按钮已放入 TopBar 的 right slot。TopBar.vue 的 right slot 外层已包裹 <CapsuleSafeArea>。CapsuleSafeArea 计算的安全宽度仍不足,检查 safeWidth 公式与微信胶囊边界,必要时调整按钮内边距或字体大小,确保按钮完整可见且可点击。在 ScheduleView.vue 内实现新增排班弹窗:
表单字段(对齐后端 DispatchSchedule):
| 原型字段 | 提交字段 | 说明 |
|---|---|---|
| 班组 | teamId / teamName | 下拉 /team/simple-list |
| 工作日期 | workDate | uni-datetime-picker 或日期选择器,格式 yyyy-MM-dd |
| 班次类型 | shiftType | 月计划 → month_plan;应急 → emergency |
| 车辆 | vehicleIds | 多选,调用 /vehicle/simple-list |
| 人员 | staffIds | 多选,调用 /staff/simple-list |
| 备注 | remark | 文本输入 |
| 状态 | status | 默认 idle 或 0,与后端约定 |
API 调整:
src/api/schedule.ts 的 createSchedule 参数,改为接收 DispatchSchedule 对象。src/api/vehicle.ts,新增/复用 getVehicleSimpleList() 调用 /vehicle/simple-list。后端补全:
VehicleController.java 新增 GET /vehicle/simple-list,返回 List<Map<String, Object>>,结构 { value: vehicleId, label: plateNo }。VehicleService.java 新增 simpleList() 查询未删除车辆列表。onShow 生命周期中调用 this.getTabBar()?.setData({ selected: <index> })。custom-tab-bar/index.js 保持 selected 数据字段响应式,无需额外逻辑。ProfileView.vue 中 logout 方法顺序:
uni.reLaunch({ url: '/pages/login/login' }) 触发页面切换动画。authStore.doLogout() 清理 token、用户信息。[ScheduleView] 打开弹窗
├── GET /team/simple-list → 班组下拉
├── GET /vehicle/simple-list → 车辆多选
├── GET /staff/simple-list → 人员多选
└── POST /schedule → 保存排班
└── GET /schedule/date/{workDate} → 刷新列表
npm run type-check 无 TS 错误。npm run build:mp-weixin 构建通过。mvn compile 通过,/vehicle/simple-list 返回正确格式。| 风险 | 缓解 |
|---|---|
TopBar 默认关闭返回后,非 tab 页面遗漏补充 |
全局搜索使用处并逐一确认 |
| 车辆下拉后端接口未部署 | 本次同时修改前端与后端,按用户要求后端补全 |
tabBar getTabBar() 在页面未挂载时为 null |
使用可选链 ?.setData |
| 退出登录清理逻辑在跳转后执行失败 | 确保 authStore.doLogout() 不依赖当前页面上下文 |
无。delta spec schedule-creation 已覆盖新增排班需求;其余修复为既有能力实现层修正,未改变 spec 级需求。