Appearance
通用功能模块
**本文引用的文件** - [assign.vue](file://app/devicemate-app/modules/common/assign.vue) - [repair.vue](file://app/devicemate-app/modules/common/repair.vue) - [history.vue](file://app/devicemate-app/modules/common/history.vue) - [common.js(Vuex)](file://app/devicemate-app/store/modules/common.js) - [dictMixins.js](file://app/devicemate-app/utils/dictMixins.js) - [common.js(工具函数)](file://app/devicemate-app/utils/common.js) - [localstorage.js](file://app/devicemate-app/utils/localstorage.js) - [userMixins.js](file://app/devicemate-app/utils/userMixins.js) - [baseForm.vue](file://app/devicemate-app/components/dd-form/baseForm.vue) - [index.js(store入口)](file://app/devicemate-app/store/index.js) - [index.js(modules聚合)](file://app/devicemate-app/store/modules/index.js) - [index.js(配置)](file://app/devicemate-app/config/index.js) - [pages.json](file://app/devicemate-app/pages.json) - [apply.vue(维护申请)](file://app/devicemate-app/modules/maintain/apply.vue) - [apply.vue(维修申请)](file://app/devicemate-app/modules/repair/apply.vue) - [execute.vue(巡检执行)](file://app/devicemate-app/modules/inspectTasks/execute.vue)目录
简介
本文件面向“通用功能模块”的开发与使用,覆盖以下通用业务能力:
- 工单指派:支持按部门查询用户并选择执行人,提交后联动后端更新工单执行人。
- 关键维修:填写紧急度、缺陷数量/比例、问题描述、上传异常图片,保存至维修工单。
- 历史记录:登记异常项,关联到对应工单来源,便于后续追溯。
同时,文档阐述通用模块的复用机制(组件封装、数据共享、状态管理)、与各业务模块的集成方式(数据传递、事件通信、状态同步),并给出开发规范、最佳实践与扩展指南,帮助开发者快速理解与使用这些通用功能。
项目结构
通用功能模块位于前端工程的模块化目录下,采用“按功能域划分”的组织方式:
- 通用页面:modules/common 下的 assign、repair、history 三个页面,分别对应工单指派、关键维修、历史记录。
- 状态管理:store/modules/common.js 提供公共状态与动作,统一承载 assignUrl、history、repair 等跨页面数据。
- 工具与混入:utils 下的 dictMixins、localstorage、userMixins 提供字典、本地存储、用户权限等通用能力;components/dd-form/baseForm.vue 提供通用表单渲染与校验能力。
- 集成入口:pages.json 中声明了通用页面的导航标题与导航栏按钮等样式;store/index.js 与 store/modules/index.js 组织全局状态。
图表来源
- assign.vue:1-174
- repair.vue:1-196
- history.vue:1-139
- common.js(Vuex):1-45
- index.js(store入口):1-13
- index.js(modules聚合):1-13
- dictMixins.js:1-33
- localstorage.js:1-22
- userMixins.js:1-160
- baseForm.vue:1-672
- pages.json:1-571
- index.js(配置):1-7
章节来源
- assign.vue:1-174
- repair.vue:1-196
- history.vue:1-139
- common.js(Vuex):1-45
- index.js(store入口):1-13
- index.js(modules聚合):1-13
- dictMixins.js:1-33
- localstorage.js:1-22
- userMixins.js:1-160
- baseForm.vue:1-672
- pages.json:1-571
- index.js(配置):1-7
核心组件
- 工单指派(assign.vue)
- 功能:搜索并选择执行人,提交后调用后端接口更新工单执行人。
- 关键点:使用Vuex状态 assignUrl 传递目标工单URL与参数;选择后仅允许单选;提交时从选中用户填充执行人信息。
- 关键维修(repair.vue)
- 功能:填写紧急度、缺陷数量/比例、问题描述、上传异常图片,保存至维修工单。
- 关键点:通过字典混入获取紧急度字典;上传组件配置请求头与上传地址;提交时合并表单与Vuex中的repair数据。
- 历史记录(history.vue)
- 功能:登记异常项,关联到来源工单与来源类型。
- 关键点:提交时携带 deviceNo、itemSourceOrderNo、itemSourceType 等上下文信息;上传组件用于异常图片。
- 通用表单(baseForm.vue)
- 功能:通用表单渲染、字典选择、日期/时间选择、图片上传、审批流程可视化与提交。
- 关键点:支持多种输入类型与必填校验;上传前检查未完成上传任务;提供审批弹窗与意见输入。
- 状态管理(store/modules/common.js)
- 功能:集中管理 assignUrl、history、repair 等跨页面共享数据;提供 setAssignUrl、setHistory、setRepair 等动作。
- 工具与混入
- 字典混入(dictMixins.js):统一获取字典列表与根据值获取名称。
- 本地存储(localstorage.js):封装本地缓存读写。
- 用户混入(userMixins.js):权限判断、菜单展示、角色信息加载、默认工厂设置等。
章节来源
- assign.vue:1-174
- repair.vue:1-196
- history.vue:1-139
- baseForm.vue:1-672
- common.js(Vuex):1-45
- dictMixins.js:1-33
- localstorage.js:1-22
- userMixins.js:1-160
架构总览
通用功能模块通过“页面 + 状态管理 + 工具/混入 + 通用组件”的分层设计实现高内聚低耦合:
- 页面层:assign、repair、history 各自负责单一业务场景。
- 状态管理层:common 模块集中存放跨页面共享数据,避免重复请求与状态漂移。
- 工具/混入层:字典、本地存储、用户权限等能力下沉,提升复用性。
- 通用组件层:baseForm 提供统一表单体验与校验,减少重复开发。
图表来源
- assign.vue:1-174
- repair.vue:1-196
- history.vue:1-139
- common.js(Vuex):1-45
- dictMixins.js:1-33
- localstorage.js:1-22
- userMixins.js:1-160
- baseForm.vue:1-672
- index.js(配置):1-7
- pages.json:1-571
详细组件分析
工单指派(assign.vue)
- 数据流
- 页面加载时调用部门用户接口,渲染用户列表。
- 用户点击选择后,仅保留一个选中项。
- 导航栏提交时,读取 assignUrl(来自Vuex),拼接执行人信息后提交。
- 关键实现要点
- 使用Vuex映射 assignUrl,保证不同业务场景可注入不同的URL与参数。
- 选择逻辑为单选,避免多选导致的歧义。
- 提交成功后返回上一页,保持一致的交互体验。
图表来源
章节来源
关键维修(repair.vue)
- 数据流
- 页面加载时获取字典列表(如紧急度)。
- 用户填写表单字段,支持上传异常图片。
- 导航栏提交时,合并表单数据与Vuex中的repair对象,调用保存接口。
- 关键实现要点
- 通过字典混入统一获取字典,避免重复请求。
- 上传组件配置请求头(含Token与语言),确保鉴权与国际化。
- 表单字段与上传文件列表统一管理,提交时一并发送。
图表来源
章节来源
历史记录(history.vue)
- 数据流
- 页面加载时从Vuex读取历史上下文(如工单号、设备号、来源类型)。
- 用户填写异常项名称,提交时携带上下文信息。
- 关键实现要点
- 通过Vuex共享上下文,避免重复传参。
- 上传组件用于异常图片,提交时与异常项一起保存。
图表来源
章节来源
通用表单(baseForm.vue)
- 数据流
- 接收 formConfig,动态渲染表单项(输入、选择、日期、时间、上传)。
- 支持字典选择与自定义数据源;上传前检查未完成上传任务;提交时触发外部事件。
- 关键实现要点
- 通过混入获取字典,支持直接传入静态列表或远程字典码。
- 上传组件自动管理文件列表与上传进度,提交时合并附件。
- 提供审批弹窗与意见输入,满足审批流程场景。
图表来源
章节来源
与业务模块的集成方式
- 与“维护/巡检/维修”模块的协作
- 通用页面通过Vuex注入上下文(如 assignUrl、repair、history),业务模块在跳转前设置对应上下文。
- 例如:巡检执行页面在详情加载完成后,将当前工单状态写入公共状态,控制页面按钮与标题栏按钮的显示。
- 与“物料申请”模块的协作
- 维护/维修申请页面在加载时读取业务上下文,结合通用页面的字典与上传能力,完成物料申请与提交。
- 与“用户权限/菜单”模块的协作
- 通过用户混入计算菜单可见性与跳转逻辑,保障页面访问权限。
图表来源
章节来源
依赖分析
- 组件耦合与内聚
- 通用页面与Vuex强耦合,但通过统一命名空间与动作降低耦合度。
- 通用页面与工具/混入弱耦合,通过mixins引入,提升内聚性。
- 通用表单作为独立组件,被多个页面复用,形成高内聚低耦合。
- 外部依赖
- HTTP请求封装于 config/request.js(通过 $http 访问),统一鉴权与拦截。
- 国际化与主题样式由 uView UI 与全局样式提供。
- 循环依赖
- 当前结构未发现循环依赖;若新增页面,应避免在Vuex中互相依赖。
图表来源
- assign.vue:30-36
- repair.vue:54-58
- history.vue:31-35
- common.js(Vuex):1-45
- dictMixins.js:1-33
- baseForm.vue:127-139
章节来源
- assign.vue:1-174
- repair.vue:1-196
- history.vue:1-139
- common.js(Vuex):1-45
- dictMixins.js:1-33
- baseForm.vue:1-672
性能考虑
- 请求去重与缓存
- 字典列表建议在进入页面前缓存,避免重复请求;可在字典混入中增加本地缓存策略。
- 上传优化
- 通用表单在上传过程中禁用提交按钮,减少无效请求;建议在上传失败时提供重试与错误提示。
- 渲染优化
- 通用页面使用虚拟滚动与懒加载(如 mescroll-uni)提升长列表性能。
- 状态同步
- 通过Vuex集中管理跨页面状态,避免频繁跨页面传参带来的性能损耗。
故障排查指南
- 提交失败
- 检查 assignUrl 是否正确设置;确认后端接口返回状态码与提示。
- 关键维修/历史记录页面需确认上传组件是否完成上传再提交。
- 字典未显示
- 确认字典混入已正确调用;检查网络请求与返回格式。
- 权限与菜单
- 使用用户混入的权限判断方法,确认当前用户是否有访问该页面的权限。
- 本地存储
- 使用 localstorage 封装的读写方法,确认键名与数据结构一致。
章节来源
- assign.vue:48-62
- repair.vue:97-105
- history.vue:72-85
- dictMixins.js:10-20
- userMixins.js:14-45
- localstorage.js:1-22
结论
通用功能模块以“页面 + 状态管理 + 工具/混入 + 通用组件”为核心,实现了工单指派、关键维修、历史记录等通用业务的高复用与低耦合。通过Vuex集中管理跨页面上下文,配合字典与上传等通用能力,显著降低了业务重复开发成本。建议在后续扩展中继续坚持“分层清晰、职责单一”的原则,并在字典缓存、上传优化、权限控制等方面持续改进。
附录
- 开发规范与最佳实践
- 页面命名:通用页面统一置于 modules/common,便于识别与复用。
- 状态管理:跨页面共享数据统一放入 common 模块,避免分散在各业务模块。
- 混入使用:将通用逻辑抽象为混入,减少重复代码。
- 接口调用:统一通过 $http 访问,确保鉴权与拦截一致。
- 错误处理:每个异步请求均需处理返回状态与错误提示。
- 使用示例与扩展指南
- 工单指派:在业务模块中设置 assignUrl,然后跳转到通用页面。
- 关键维修:在业务模块中设置 repair 上下文,然后跳转到通用页面。
- 历史记录:在业务模块中设置 history 上下文,然后跳转到通用页面。
- 通用表单:在业务模块中组装 formConfig,传入 baseForm 即可渲染。
章节来源