From cd63e10afe4b9a83c5cc14711198a577995895d1 Mon Sep 17 00:00:00 2001 From: 王彪总 Date: Thu, 22 Oct 2026 14:26:50 +0800 Subject: [PATCH] 业务线 小程序不用写死,从后端接口获取 --- common/utils/common.js | 13 +++---------- pages-sub/problem/work-order-manage/add-maintain-order.vue | 28 +++++++++++++++++++++++++--- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/common/utils/common.js b/common/utils/common.js index 702c4fb..57fb9a3 100644 --- a/common/utils/common.js +++ b/common/utils/common.js @@ -286,9 +286,6 @@ export const translateRoles = (roles = []) => { .join(','); } -/** 配置了工单(biz_type=1)动态字段的业务线;其他业务线走统一动作弹窗 */ -const WORKER_IMPLEMENT_BIZ_LINES = ['yl', 'hj']; - /** * 跳转「作业填报」页(养护员实施) * @@ -296,8 +293,9 @@ const WORKER_IMPLEMENT_BIZ_LINES = ['yl', 'hj']; * 上传开始/进行中/结束/人员/材料五组照片,统一动作弹窗只有原因+单个附件,承载不了, * 因此实施动作固定进「作业填报」页。 * - * 只有养护(yl)、环卫(hj)配置了工单动态字段,秩序(zx)/市政(sz)/物业(wy)没有配置, - * 这类工单仍走统一动作弹窗,保持原有处理流程。 + * 不按业务线写死:所有业务线的实施动作都进本页,页面上有哪些填报项 + * 由数据中心「业务类型(busiLine 首段) + 作业类型」的字段配置(biz_type=1)决定, + * 没配的业务线/作业类型进页后展示「该作业类型暂无需填报项」。 * * 工单数据存本地缓存,URL 只带临时 key,避免参数过长。 * @param {Object} item 待办行数据,需包含 id(工单ID)与 taskId(流程任务ID) @@ -305,11 +303,6 @@ const WORKER_IMPLEMENT_BIZ_LINES = ['yl', 'hj']; * @returns {Boolean} 是否已跳转;返回 false 时由调用方继续走统一动作弹窗 */ export const toWorkerImplementPage = (item, from = 'work-order') => { - // 业务线可能多选(逗号分隔),任一命中即视为养护类工单 - const bizLines = String(item?.busiLine || '').split(',').map(v => v.trim()).filter(Boolean); - if (!bizLines.some(v => WORKER_IMPLEMENT_BIZ_LINES.includes(v))) { - return false; - } if (!item || !item.id || !item.taskId) { uni.showToast({ title: '工单信息异常,无法实施', icon: 'none' }); return false; diff --git a/pages-sub/problem/work-order-manage/add-maintain-order.vue b/pages-sub/problem/work-order-manage/add-maintain-order.vue index 7ad82bd..29f8733 100644 --- a/pages-sub/problem/work-order-manage/add-maintain-order.vue +++ b/pages-sub/problem/work-order-manage/add-maintain-order.vue @@ -437,8 +437,15 @@ onLoad((options) => { workOrderForm.workTypeId = orderItem.workTypeId workOrderForm.workTypeName = uni.$dict.getDictLabel('maintain_type', orderItem.workTypeId) || '' } else { - // 该业务线只配了一个作业类型的字段时自动选中,进页即可看到填报项 - loadDefaultWorkType() + // 先按工单名「大类/小类」的小类匹配作业类型(如 秩序管理/经营秩序 -> 2014 经营秩序) + const matchedWorkType = matchWorkTypeByOrderName(orderItem.orderName) + if (matchedWorkType) { + workOrderForm.workTypeId = matchedWorkType.value + workOrderForm.workTypeName = matchedWorkType.label + } else { + // 兜底:该业务线只配了一个作业类型的字段时自动选中,进页即可看到填报项 + loadDefaultWorkType() + } } // 共同处理人(如有数据则回显,转换为数组格式) if (orderItem.coHandlers && orderItem.coHandlersName) { @@ -743,7 +750,22 @@ const onDynamicFieldsLoaded = (count) => { } /** - * 自动带出作业类型:该业务线下只有一个作业类型配置了填报项时直接选中, + * 按工单名匹配作业类型:工单名格式「大类/小类」,小类与字典 maintain_type 的 label 同名 + * (如 秩序管理/经营秩序 -> 2014 经营秩序),命中即自动带出,养护员仍可在弹窗里手改。 + * @param {String} orderName 工单名,如「秩序管理/经营秩序」 + * @returns {{value: String, label: String}|null} 未命中返回 null + */ +const matchWorkTypeByOrderName = (orderName) => { + const subName = String(orderName || '').split('/').pop().trim() + if (!subName) { + return null + } + const dictList = uni.$dict.getDictSimpleList('maintain_type') || [] + return dictList.find(item => item.label === subName) || null +} + +/** + * 兜底自动带出作业类型:该业务线下只有一个作业类型配置了填报项时直接选中, * 动态字段块随之渲染(v-if 绑在 workTypeId 上),用户不用先猜该选哪个作业类型。 * 配了多个时不自动选,交给用户手选。 */ -- libgit2 0.21.4