From 47ed097923b051ce18f19a2b37ae90bd0eb9e66f Mon Sep 17 00:00:00 2001 From: Austin Date: Sun, 20 Sep 2026 10:53:41 +0800 Subject: [PATCH] =?UTF-8?q?refactor(imWorkOrder):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=B7=A5=E5=8D=95=E5=88=86=E7=B1=BB=E5=92=8C=E7=9B=AE=E6=A0=87?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E7=9A=84=E5=B1=95=E7=A4=BA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将工单分类和目标类型的格式化逻辑抽离到model文件中,统一处理字典映射展示,替换原有的硬编码空值占位,同时修复列表页和详情页的展示不一致问题 --- web/src/views/imWorkOrder/model.ts | 51 ++++++++++++++++++++++++++++-- web/src/views/imWorkOrder/view.vue | 8 +++-- 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/web/src/views/imWorkOrder/model.ts b/web/src/views/imWorkOrder/model.ts index fbe7ae0..7e0c16d 100644 --- a/web/src/views/imWorkOrder/model.ts +++ b/web/src/views/imWorkOrder/model.ts @@ -14,6 +14,37 @@ export const workOrderTypeOptions = [ { label: '反馈', value: 'feedback' }, ]; +// 目标类型映射 +const targetTypeMap: Record = { + user: '用户', + group: '群聊', + message: '消息', +}; + +// 分类映射:举报按 reason_code,反馈按 category +const abuseCategoryMap: Record = { + spam: '垃圾广告', + harassment: '骚扰辱骂', + illegal: '违法违规', + fraud: '诈骗欺诈', + other: '其他', +}; +const feedbackCategoryMap: Record = { + bug: '功能异常', + suggestion: '功能建议', + complaint: '投诉', + other: '其他', +}; + +export function categoryLabelOf(type: string, category: string) { + const map = type === 'abuse' ? abuseCategoryMap : feedbackCategoryMap; + return map[category] || category || '-'; +} + +export function targetTypeLabel(targetType: string) { + return targetTypeMap[targetType] || (targetType || '-'); +} + export class State { public tenantId = 0; public tenantName = ''; @@ -118,9 +149,25 @@ export const columns = [ { title: 'ID', key: 'id', align: 'left', width: 80 }, { title: '工单ID', key: 'orderId', align: 'left', width: 180 }, { title: '提交人ID', key: 'userId', align: 'left', width: 120 }, - { title: '目标类型', key: 'targetType', align: 'left', width: 110 }, + { + title: '目标类型', + key: 'targetType', + align: 'left', + width: 110, + render(row: State) { + return targetTypeLabel(row.targetType); + }, + }, { title: '目标摘要', key: 'targetSummary', align: 'left', width: 220 }, - { title: '分类', key: 'category', align: 'left', width: 130 }, + { + title: '分类', + key: 'category', + align: 'left', + width: 130, + render(row: State) { + return categoryLabelOf(row.type, row.category); + }, + }, { title: '内容', key: 'content', align: 'left', width: 260 }, { title: '状态', diff --git a/web/src/views/imWorkOrder/view.vue b/web/src/views/imWorkOrder/view.vue index dd3fa25..a3edee6 100644 --- a/web/src/views/imWorkOrder/view.vue +++ b/web/src/views/imWorkOrder/view.vue @@ -17,9 +17,11 @@ {{ formValue.orderId }} {{ statusLabel }} {{ formValue.userId }} - {{ formValue.category || '-' }} + {{ + categoryLabelOf(formValue.type, formValue.category) + }} {{ - formValue.targetType || '-' + targetTypeLabel(formValue.targetType) }} {{ formValue.targetSummary || '-' @@ -67,7 +69,7 @@ import { computed, ref } from 'vue'; import { useDictStore } from '@/store/modules/dict'; import { View } from '@/api/imWorkOrder'; - import { newState, State } from './model'; + import { categoryLabelOf, newState, State, targetTypeLabel } from './model'; import { useProjectSettingStore } from '@/store/modules/projectSetting'; import { adaModalWidth } from '@/utils/hotgo';