Commit cd63e10afe4b9a83c5cc14711198a577995895d1
1 parent
62ffd5df
业务线 小程序不用写死,从后端接口获取
Showing
2 changed files
with
28 additions
and
13 deletions
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 | */ | ... | ... |