清道夫 App 采用 uni-app Vue 3 + TypeScript 开发,页面使用 navigationStyle: custom 自定义导航栏。TopBar 组件为通用导航头,CapsuleSafeArea 负责计算微信胶囊安全区。自定义 tabBar 使用微信小程序 custom-tab-bar 组件。后端为 Java Spring Boot + MyBatis-Plus。
当前问题:
TopBar 默认 showBack: true,导致 tab 页面(首页、任务、排班、我的)出现多余返回按钮。TopBar 右侧插槽,但仍被胶囊遮挡,需要进一步调整。addSchedule() 仅提示“排班功能开发中”,未实现 V21-SOP 原型的新增排班流程。authStore.doLogout() 和 uni.showToast,再 uni.reLaunch,导致页面切换无动画、卡顿。Goals:
/vehicle/simple-list 时补全该接口,保证前端下拉数据可用。Non-Goals:
TopBar 默认不显示返回按钮
showBack 默认值改为 false;需要返回的页面显式传入 :showBack="true"。任务页按钮胶囊安全区二次确认
TaskListView 是否正确将按钮放入 TopBar 的 right slot,并确认 CapsuleSafeArea 已包裹 right slot。CapsuleSafeArea 内部元素,确保 margin-left 生效。排班新增采用弹窗表单
ScheduleView 内实现 uni-popup 或同项目弹窗组件,表单字段:班组(下拉 /team/simple-list)、工作日期(日期选择器)、班次类型(月计划/应急,映射 month_plan/emergency)、车辆(多选,调用 /vehicle/simple-list)、人员(多选,调用 /staff/simple-list)、备注(文本)。POST /schedule,成功后刷新当前日期班表列表。后端车辆下拉接口补全 /vehicle/simple-list
VehicleController 新增该接口,返回 { value: vehicleId, label: plateNo }。getAvailableVehicles() 调用不存在的 /vehicle/available;用户要求以后端接口为准,缺失则补全。tabBar 高亮同步
onShow 中调用 uni.setTabBarItem 不够,因为项目使用自定义 tabBar;需通过 getTabBar().setData({ selected: index }) 显式同步。退出登录顺序调整
uni.reLaunch({ url: '/pages/login/login' }),再执行 authStore.doLogout() 清理 token/state;toast 可在跳转后可选显示或省略。reLaunch 是同步触发页面切换的 API,放在前面可立即释放当前页面;清理逻辑在后台完成不影响动画。TopBar 默认 showBack=false 可能导致已有非 tab 页面依赖默认返回而失效。
→ Mitigation:全局搜索 TopBar 使用处,为非 tab 页面补充 :showBack="true"。DispatchSchedule 不完全对齐。
→ Mitigation:严格参考后端 entity 字段命名,提交前做一次字段映射。getTabBar() 在页面未完全挂载时可能为 null。
→ Mitigation:使用 this.getTabBar()?.setData 并加空值保护。/vehicle/list?pageSize=100),但本次按用户要求优先补全后端接口。/vehicle/simple-list,重启服务。TopBar、TaskListView、ScheduleView、custom-tab-bar/index.js、ProfileView 及相关 API 文件。npm run type-check 与 npm run build:mp-weixin 验证。