Appearance
业务模块开发
**本文引用的文件** - [设备模块页面 equipment.vue](file://app/devicemate-app/modules/equipment/equipment.vue) - [维保工单模块页面 maintain.vue](file://app/devicemate-app/modules/maintain/maintain.vue) - [巡检工单模块页面 inspectTasks.vue](file://app/devicemate-app/modules/inspectTasks/inspectTasks.vue) - [维修工单模块页面 repair.vue](file://app/devicemate-app/modules/repair/repair.vue) - [公共模块-派工 assign.vue](file://app/devicemate-app/modules/common/assign.vue) - [公共模块-历史记录 history.vue](file://app/devicemate-app/modules/common/history.vue) - [设备菜单入口 menu.vue](file://app/devicemate-app/modules/equipment/menu.vue) - [设备基础信息 basicInfo.vue](file://app/devicemate-app/modules/equipment/basicInfo.vue) - [mescroll-uni 组件 mescroll-body.vue](file://app/devicemate-app/components/mescroll-uni/mescroll-body.vue) - [字典混入 dictMixins.js](file://app/devicemate-app/utils/dictMixins.js) - [请求封装 request.js](file://app/devicemate-app/config/request.js) - [Vuex 根实例 store/index.js](file://app/devicemate-app/store/index.js) - [Vuex 模块索引 store/modules/index.js](file://app/devicemate-app/store/modules/index.js) - [设备模块状态 equipment.js](file://app/devicemate-app/store/modules/equipment.js) - [公共模块状态 common.js](file://app/devicemate-app/store/modules/common.js)目录
简介
本指南面向 DeviceMate UniApp 业务模块开发,系统阐述模块化架构设计理念与组织结构,覆盖设备管理、维保管理、巡检管理、维修管理四大业务域及通用功能模块。文档重点解析设备台账、维保计划执行、工单流转处理、点检任务完成等核心流程,说明模块间通信机制、数据共享与状态管理策略,并提供页面组件设计、API 调用、数据处理与错误处理的最佳实践与调试技巧。
项目结构
- 模块划分
- 设备管理:设备列表、设备详情菜单、基础信息、资产信息、规格参数、附件、备件、事件、电表、文档等
- 工单管理:巡检工单、维保工单、维修工单三大类,统一采用“列表-详情-执行/派工/历史/维修”流程
- 通用功能:派工、历史记录登记、维修关联
- 技术栈要点
- 视图层:uView UI、mescroll-uni 分页/下拉刷新
- 状态管理:Vuex 模块化 store
- 数据与字典:统一通过混入获取字典与远程数据
- 网络层:封装请求与鉴权头、国际化语言头、超时与错误提示
图表来源
- 设备模块页面 equipment.vue
- 设备菜单入口 menu.vue
- 设备基础信息 basicInfo.vue
- 巡检工单模块页面 inspectTasks.vue
- 维保工单模块页面 maintain.vue
- 维修工单模块页面 repair.vue
- 公共模块-派工 assign.vue
- 公共模块-历史记录 history.vue
- mescroll-uni 组件 mescroll-body.vue
- 字典混入 dictMixins.js
- 请求封装 request.js
- Vuex 根实例 store/index.js
- Vuex 模块索引 store/modules/index.js
- 设备模块状态 equipment.js
- 公共模块状态 common.js
章节来源
- 设备模块页面 equipment.vue
- mescroll-uni 组件 mescroll-body.vue
- 字典混入 dictMixins.js
- 请求封装 request.js
- Vuex 根实例 store/index.js
- Vuex 模块索引 store/modules/index.js
核心组件
- mescroll-body:统一的下拉刷新与上拉加载容器,提供分页、空态、回到顶部能力
- dictMixins:统一字典获取与名称映射,减少重复逻辑
- request:统一网络请求封装,处理鉴权头、国际化、超时、错误提示与 401 处理
- store:模块化状态管理,设备域与公共域分别维护状态与动作
章节来源
- mescroll-uni 组件 mescroll-body.vue
- 字典混入 dictMixins.js
- 请求封装 request.js
- Vuex 根实例 store/index.js
- Vuex 模块索引 store/modules/index.js
架构总览
- 页面层:各业务模块页面负责展示与交互,统一使用 mescroll-body 实现分页与刷新
- 服务层:通过 request.js 发起 HTTP 请求,自动注入鉴权与语言头
- 数据层:字典通过 dictMixins 统一获取;业务数据按模块独立接口
- 状态层:Vuex 模块化管理,公共状态(派工URL、历史记录、维修对象)在公共模块中共享
图表来源
- 维保工单模块页面 maintain.vue
- mescroll-uni 组件 mescroll-body.vue
- 字典混入 dictMixins.js
- 请求封装 request.js
- 公共模块状态 common.js
详细组件分析
设备管理模块
- 设备列表 equipment.vue
- 功能:设备筛选(状态/使用状态)、搜索、扫码跳转、分页加载、跳转至设备菜单
- 关键点:使用 mescroll-body 的 up/down 回调;通过字典混入获取设备状态/使用状态;扫码后重置分页
- 数据来源:设备主表分页接口
- 设备菜单 menu.vue
- 功能:设备卡片图片与菜单项入口,传递设备编码/编号/角色类型
- 数据来源:设备详情接口获取图片
- 基础信息 basicInfo.vue
- 功能:基础信息/资产信息/规格参数三段式切换查看
- 数据来源:设备主表、设备参数列表;字典 device_classify
图表来源
章节来源
维保管理模块
- 维保工单 maintain.vue
- 功能:维保工单列表、状态筛选、扫码、详情跳转、派工/执行/历史/维修入口、审批确认弹窗
- 关键点:根据 orderStatus 控制按钮显隐;通过 store 写入 setAssignUrl/setHistory/setRepair 供后续页面使用
- 数据来源:维保工单分页接口;字典 task_status
- 巡检工单 inspectTasks.vue
- 功能:与维保工单一致的列表与操作流程,但来源接口不同(巡检任务)
- 数据来源:巡检任务分页接口;字典 task_status
图表来源
- 维保工单模块页面 maintain.vue
- mescroll-uni 组件 mescroll-body.vue
- 字典混入 dictMixins.js
- 请求封装 request.js
- 公共模块状态 common.js
章节来源
维修管理模块
- 维修工单 repair.vue
- 功能:维修工单列表、状态筛选、扫码、签收、执行、派工、审批确认、新增入口
- 关键点:根据 orderStatus 控制按钮显隐;签收调用 orderStatusUpdate 接口并提示成功
- 数据来源:维修工单分页接口;字典 repair_order_status;当前用户编号注入
图表来源
- 维修工单模块页面 repair.vue
- mescroll-uni 组件 mescroll-body.vue
- 字典混入 dictMixins.js
- 请求封装 request.js
- 公共模块状态 common.js
章节来源
通用功能模块
- 派工 assign.vue
- 功能:部门人员列表选择,提交后调用 setAssignUrl 中保存的 URL 与参数,回填执行人信息
- 数据来源:当前工厂部门用户列表接口
- 历史记录 history.vue
- 功能:基于公共状态 history 的业务类型与工单号,填写异常项并提交
- 数据来源:设备主表详情接口;异常登记接口
图表来源
章节来源
依赖关系分析
- 组件耦合
- 各业务页面均依赖 mescroll-body 实现统一分页体验
- 通过 dictMixins 统一字典获取,降低重复代码
- 通过 request.js 统一网络层,保证鉴权与国际化头一致
- 状态共享
- 公共模块 common.js 提供 setAssignUrl/setHistory/setRepair 动作,供工单页面在不同流程中写入上下文
- 设备模块 equipment.js 维护设备编码/编号/图片等上下文
- 模块边界
- 设备域与工单域相对独立,通过 store 公共状态进行弱耦合协作
图表来源
- 设备模块页面 equipment.vue
- 巡检工单模块页面 inspectTasks.vue
- 维保工单模块页面 maintain.vue
- 维修工单模块页面 repair.vue
- 公共模块-派工 assign.vue
- 公共模块-历史记录 history.vue
- mescroll-uni 组件 mescroll-body.vue
- 字典混入 dictMixins.js
- 请求封装 request.js
- 公共模块状态 common.js
章节来源
性能与可维护性建议
- 分页与渲染
- 使用 mescroll-body 的分页能力,避免一次性加载大量数据
- 列表项使用虚拟滚动或合理设置高度,减少重排
- 网络请求
- 统一在 request.js 中设置超时与错误提示,避免页面分散处理
- 对高频接口增加本地缓存策略(如字典、用户列表)
- 状态管理
- 公共状态尽量只存放必要上下文,避免冗余数据导致内存占用
- 使用命名空间清晰区分模块状态
- 代码复用
- 将通用的筛选、搜索、扫码、分页逻辑抽象为混入或工具函数,提升复用度
[本节为通用建议,无需列出章节来源]
故障排查指南
- 网络无响应或频繁弹出“无网络”
- 检查 request.js 中网络状态监听与 loading 展示逻辑
- 确认接口超时时间与失败回调
- 401 未授权跳转登录
- 检查 request.js 中 401 处理逻辑与 token 清理
- 字典为空或名称显示为占位符
- 确认 dictMixins.js 的 getDict 与 getDictName 调用顺序
- 工单状态按钮不可见
- 检查对应字典 task_status 或 repair_order_status 是否正确获取
- 确认页面根据 orderStatus 的条件渲染逻辑
- 派工/历史/维修跳转上下文丢失
- 检查 common.js 的 setAssignUrl/setHistory/setRepair 是否被正确调用与读取
章节来源
结论
DeviceMate UniApp 业务模块采用“页面-混入-网络-状态”的分层架构,通过 mescroll-body 统一分页体验,通过 dictMixins 与 request.js 统一数据与网络处理,通过 Vuex 模块化实现弱耦合的状态共享。设备管理与三大工单域遵循统一的列表-详情-执行/派工/历史/维修流程,具备良好的扩展性与可维护性。
[本节为总结,无需列出章节来源]
附录:开发流程与最佳实践
开发流程
- 页面设计
- 使用 mescroll-body 包裹列表,配置 up/down 回调
- 通过 dictMixins 获取字典,用于状态/类型显示
- 在 onLoad/onShow 中触发数据加载与字典获取
- API 调用
- 统一通过 this.$http.post/get 调用,自动注入鉴权与语言头
- 对于分页接口,使用 endByPage 与 concat 逻辑处理
- 状态管理
- 在需要跨页面传递上下文时,使用 store 的公共模块 actions 写入
- 在 assign/history/repair 等页面中读取并提交
- 错误处理
- 依赖 request.js 的统一错误提示与 401 处理
- 对关键操作增加确认弹窗与 toast 提示
代码规范
- 组件命名:语义化命名,如 equipment.vue、maintain.vue、inspectTasks.vue、repair.vue、assign.vue、history.vue
- 混入使用:将通用逻辑抽取为混入,减少重复代码
- 网络层:所有接口调用通过 this.$http,避免直接使用 uni.request
- 状态命名:公共状态使用 setXxx 形式,避免直接修改 state
调试技巧
- 使用 uni.scanCode 扫码测试设备/工单跳转
- 在 mescroll-body 的 upCallback 中打印分页参数,验证接口分页
- 在公共模块中断言 assignUrl/history/repair 的值,确保上下文正确传递
- 对字典名称映射问题,检查 dictMixins 的 getDictName 与 dictCode 是否匹配
[本节为实践建议,无需列出章节来源]