工单流程VO渲染效果

This commit is contained in:
2025-12-31 12:45:26 +08:00
parent 1ef1b32f5f
commit 4f0eeede37
17 changed files with 184 additions and 272 deletions

View File

@@ -1,6 +1,6 @@
import { api } from 'shared/api'
import type { ResultDomain, PageRequest } from 'shared/types'
import type { TbWorkcaseDTO, TbWorkcaseProcessDTO, TbWorkcaseDeviceDTO } from '@/types/workcase'
import type { TbWorkcaseDTO, TbWorkcaseProcessDTO, TbWorkcaseDeviceDTO, WorkcaseProcessVO } from '@/types/workcase'
/**
* @description 工单管理接口
@@ -121,8 +121,8 @@ export const workcaseAPI = {
* 查询工单处理过程列表
* @param filter 筛选条件
*/
async getWorkcaseProcessList(filter?: TbWorkcaseProcessDTO): Promise<ResultDomain<TbWorkcaseProcessDTO>> {
const response = await api.post<TbWorkcaseProcessDTO>(`${this.baseUrl}/process/list`, filter || {})
async getWorkcaseProcessList(filter?: TbWorkcaseProcessDTO): Promise<ResultDomain<WorkcaseProcessVO>> {
const response = await api.post<WorkcaseProcessVO>(`${this.baseUrl}/process/list`, filter || {})
return response.data
},
@@ -130,8 +130,8 @@ export const workcaseAPI = {
* 分页查询工单处理过程
* @param pageRequest 分页请求
*/
async getWorkcaseProcessPage(pageRequest: PageRequest<TbWorkcaseProcessDTO>): Promise<ResultDomain<TbWorkcaseProcessDTO>> {
const response = await api.post<TbWorkcaseProcessDTO>(`${this.baseUrl}/process/page`, pageRequest)
async getWorkcaseProcessPage(pageRequest: PageRequest<TbWorkcaseProcessDTO>): Promise<ResultDomain<WorkcaseProcessVO>> {
const response = await api.post<WorkcaseProcessVO>(`${this.baseUrl}/process/page`, pageRequest)
return response.data
},

View File

@@ -103,6 +103,8 @@ declare module 'shared/types' {
export interface BaseVO extends BaseDTO {
id?: string
creatorName?: string
updaterName?: string
}
// 重新导出 response

View File

@@ -1,4 +1,4 @@
import type { BaseDTO } from 'shared/types'
import type { BaseDTO, BaseVO } from 'shared/types'
/**
* 工单表对象
@@ -72,3 +72,23 @@ export interface TbWorkcaseDeviceDTO extends BaseDTO {
/** 文件根ID */
fileRootId?: string
}
export interface WorkcaseProcessVO extends BaseVO {
/** 工单ID */
workcaseId?: string
/** 过程ID */
processId?: string
/** 动作 info记录assign指派redeploy转派repeal撤销finish完成 */
action?: 'info' | 'assign' | 'redeploy' | 'repeal' | 'finish'
/** 消息 */
message?: string
/** 携带文件列表 */
files?: string[]
/** 处理人(指派、转派专属) */
processor?: string
processorName?: string
/** 创建时间 */
createTime?: string
/** 更新时间 */
updateTime?: string
}

View File

@@ -40,9 +40,9 @@
</template>
</el-table-column>
<el-table-column prop="message" label="操作内容" min-width="200" show-overflow-tooltip />
<el-table-column prop="processor" label="处理人" width="120">
<el-table-column prop="processorName" label="处理人" width="120">
<template #default="{ row }">
{{ row.processor || '-' }}
{{ row.processorName || '-' }}
</template>
</el-table-column>
<el-table-column prop="files" label="附件" width="80">
@@ -51,7 +51,11 @@
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column prop="creator" label="操作人" width="120" />
<el-table-column prop="creatorName" label="操作人" width="120">
<template #default="{ row }">
{{ row.creatorName || row.creator || '-' }}
</template>
</el-table-column>
<el-table-column prop="createTime" label="操作时间" width="170" />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
@@ -83,8 +87,8 @@
<el-tag :type="getActionTagType(selectedLog.action)">{{ getActionLabel(selectedLog.action) }}</el-tag>
</el-descriptions-item>
<el-descriptions-item label="操作内容">{{ selectedLog.message || '-' }}</el-descriptions-item>
<el-descriptions-item label="处理人">{{ selectedLog.processor || '-' }}</el-descriptions-item>
<el-descriptions-item label="操作人">{{ selectedLog.creator }}</el-descriptions-item>
<el-descriptions-item label="处理人">{{ selectedLog.processorName || '-' }}</el-descriptions-item>
<el-descriptions-item label="操作人">{{ selectedLog.creatorName || selectedLog.creator || '-' }}</el-descriptions-item>
<el-descriptions-item label="操作时间">{{ selectedLog.createTime }}</el-descriptions-item>
<el-descriptions-item v-if="selectedLog.files?.length" label="附件">
<div class="file-list">
@@ -104,7 +108,7 @@ import AdminLayout from '@/views/admin/AdminLayout.vue'
import { Download, Search } from 'lucide-vue-next'
import { ElMessage } from 'element-plus'
import { workcaseAPI } from '@/api/workcase'
import type { TbWorkcaseProcessDTO } from '@/types/workcase'
import type { TbWorkcaseProcessDTO, WorkcaseProcessVO } from '@/types/workcase'
import type { PageRequest, PageParam } from 'shared/types'
// 操作类型选项
@@ -120,8 +124,8 @@ const actionOptions = [
const loading = ref(false)
const dateRange = ref<[string, string] | null>(null)
const showDetailDialog = ref(false)
const selectedLog = ref<TbWorkcaseProcessDTO | null>(null)
const processLogs = ref<TbWorkcaseProcessDTO[]>([])
const selectedLog = ref<WorkcaseProcessVO | null>(null)
const processLogs = ref<WorkcaseProcessVO[]>([])
// 筛选条件
const filter = reactive<TbWorkcaseProcessDTO>({
@@ -196,7 +200,7 @@ const handleSearch = async () => {
}
// 查看详情
const viewDetail = (row: TbWorkcaseProcessDTO) => {
const viewDetail = (row: WorkcaseProcessVO) => {
selectedLog.value = row
showDetailDialog.value = true
}

View File

@@ -286,7 +286,7 @@ import { ref, watch, onMounted, computed } from 'vue'
import { ChatMessage } from '@/views/public/ChatRoom/'
import { ElButton, ElInput, ElSelect, ElOption, ElDialog, ElMessage, ElLoading } from 'element-plus'
import { MessageSquare, ImageIcon as ImageIcon, Plus } from 'lucide-vue-next'
import type { TbWorkcaseDTO, TbWorkcaseProcessDTO } from '@/types/workcase/workcase'
import type { TbWorkcaseDTO, TbWorkcaseProcessDTO, WorkcaseProcessVO } from '@/types/workcase/workcase'
import type { TbSysFileDTO } from 'shared/types'
import { workcaseAPI } from '@/api/workcase'
import { fileAPI } from 'shared/api/file'
@@ -322,7 +322,7 @@ const faultTypes = ['电气系统故障', '机械故障', '控制系统故障',
const showChatMessage = ref(false)
const currentRoomId = ref<string>('')
const processList = ref<TbWorkcaseProcessDTO[]>([])
const processList = ref<WorkcaseProcessVO[]>([])
// 文件信息缓存 (fileId -> TbSysFileDTO)
const fileInfoCache = ref<Map<string, TbSysFileDTO>>(new Map())
@@ -391,7 +391,7 @@ const loadProcessList = async (workcaseId: string) => {
}
// 加载处理记录中的文件信息
const loadFilesInfo = async (processes: TbWorkcaseProcessDTO[]) => {
const loadFilesInfo = async (processes: WorkcaseProcessVO[]) => {
// 收集所有文件ID
const fileIds: string[] = []
processes.forEach(p => {