Commit cd63e10afe4b9a83c5cc14711198a577995895d1

Authored by 王彪总
1 parent 62ffd5df

业务线 小程序不用写死,从后端接口获取

common/utils/common.js
... ... @@ -286,9 +286,6 @@ export const translateRoles = (roles = []) => {
286 286 .join(',');
287 287 }
288 288  
289   -/** 配置了工单(biz_type=1)动态字段的业务线;其他业务线走统一动作弹窗 */
290   -const WORKER_IMPLEMENT_BIZ_LINES = ['yl', 'hj'];
291   -
292 289 /**
293 290 * 跳转「作业填报」页(养护员实施)
294 291 *
... ... @@ -296,8 +293,9 @@ const WORKER_IMPLEMENT_BIZ_LINES = ['yl', 'hj'];
296 293 * 上传开始/进行中/结束/人员/材料五组照片,统一动作弹窗只有原因+单个附件,承载不了,
297 294 * 因此实施动作固定进「作业填报」页。
298 295 *
299   - * 只有养护(yl)、环卫(hj)配置了工单动态字段,秩序(zx)/市政(sz)/物业(wy)没有配置,
300   - * 这类工单仍走统一动作弹窗,保持原有处理流程。
  296 + * 不按业务线写死:所有业务线的实施动作都进本页,页面上有哪些填报项
  297 + * 由数据中心「业务类型(busiLine 首段) + 作业类型」的字段配置(biz_type=1)决定,
  298 + * 没配的业务线/作业类型进页后展示「该作业类型暂无需填报项」。
301 299 *
302 300 * 工单数据存本地缓存,URL 只带临时 key,避免参数过长。
303 301 * @param {Object} item 待办行数据,需包含 id(工单ID)与 taskId(流程任务ID)
... ... @@ -305,11 +303,6 @@ const WORKER_IMPLEMENT_BIZ_LINES = ['yl', 'hj'];
305 303 * @returns {Boolean} 是否已跳转;返回 false 时由调用方继续走统一动作弹窗
306 304 */
307 305 export const toWorkerImplementPage = (item, from = 'work-order') => {
308   - // 业务线可能多选(逗号分隔),任一命中即视为养护类工单
309   - const bizLines = String(item?.busiLine || '').split(',').map(v => v.trim()).filter(Boolean);
310   - if (!bizLines.some(v => WORKER_IMPLEMENT_BIZ_LINES.includes(v))) {
311   - return false;
312   - }
313 306 if (!item || !item.id || !item.taskId) {
314 307 uni.showToast({ title: '工单信息异常,无法实施', icon: 'none' });
315 308 return false;
... ...
pages-sub/problem/work-order-manage/add-maintain-order.vue
... ... @@ -437,8 +437,15 @@ onLoad((options) => {
437 437 workOrderForm.workTypeId = orderItem.workTypeId
438 438 workOrderForm.workTypeName = uni.$dict.getDictLabel('maintain_type', orderItem.workTypeId) || ''
439 439 } else {
440   - // 该业务线只配了一个作业类型的字段时自动选中,进页即可看到填报项
441   - loadDefaultWorkType()
  440 + // 先按工单名「大类/小类」的小类匹配作业类型(如 秩序管理/经营秩序 -> 2014 经营秩序)
  441 + const matchedWorkType = matchWorkTypeByOrderName(orderItem.orderName)
  442 + if (matchedWorkType) {
  443 + workOrderForm.workTypeId = matchedWorkType.value
  444 + workOrderForm.workTypeName = matchedWorkType.label
  445 + } else {
  446 + // 兜底:该业务线只配了一个作业类型的字段时自动选中,进页即可看到填报项
  447 + loadDefaultWorkType()
  448 + }
442 449 }
443 450 // 共同处理人(如有数据则回显,转换为数组格式)
444 451 if (orderItem.coHandlers && orderItem.coHandlersName) {
... ... @@ -743,7 +750,22 @@ const onDynamicFieldsLoaded = (count) => {
743 750 }
744 751  
745 752 /**
746   - * 自动带出作业类型:该业务线下只有一个作业类型配置了填报项时直接选中,
  753 + * 按工单名匹配作业类型:工单名格式「大类/小类」,小类与字典 maintain_type 的 label 同名
  754 + * (如 秩序管理/经营秩序 -> 2014 经营秩序),命中即自动带出,养护员仍可在弹窗里手改。
  755 + * @param {String} orderName 工单名,如「秩序管理/经营秩序」
  756 + * @returns {{value: String, label: String}|null} 未命中返回 null
  757 + */
  758 +const matchWorkTypeByOrderName = (orderName) => {
  759 + const subName = String(orderName || '').split('/').pop().trim()
  760 + if (!subName) {
  761 + return null
  762 + }
  763 + const dictList = uni.$dict.getDictSimpleList('maintain_type') || []
  764 + return dictList.find(item => item.label === subName) || null
  765 +}
  766 +
  767 +/**
  768 + * 兜底自动带出作业类型:该业务线下只有一个作业类型配置了填报项时直接选中,
747 769 * 动态字段块随之渲染(v-if 绑在 workTypeId 上),用户不用先猜该选哪个作业类型。
748 770 * 配了多个时不自动选,交给用户手选。
749 771 */
... ...