工单流程VO渲染效果
This commit is contained in:
@@ -3,6 +3,7 @@ package org.xyzh.api.workcase.service;
|
|||||||
import org.xyzh.api.workcase.dto.TbWorkcaseDTO;
|
import org.xyzh.api.workcase.dto.TbWorkcaseDTO;
|
||||||
import org.xyzh.api.workcase.dto.TbWorkcaseDeviceDTO;
|
import org.xyzh.api.workcase.dto.TbWorkcaseDeviceDTO;
|
||||||
import org.xyzh.api.workcase.dto.TbWorkcaseProcessDTO;
|
import org.xyzh.api.workcase.dto.TbWorkcaseProcessDTO;
|
||||||
|
import org.xyzh.api.workcase.vo.WorkcaseProcessVO;
|
||||||
import org.xyzh.common.core.domain.ResultDomain;
|
import org.xyzh.common.core.domain.ResultDomain;
|
||||||
import org.xyzh.common.core.page.PageRequest;
|
import org.xyzh.common.core.page.PageRequest;
|
||||||
|
|
||||||
@@ -110,7 +111,7 @@ public interface WorkcaseService {
|
|||||||
* @author yslg
|
* @author yslg
|
||||||
* @since 2025-12-19
|
* @since 2025-12-19
|
||||||
*/
|
*/
|
||||||
ResultDomain<TbWorkcaseProcessDTO> getWorkcaseProcessList(TbWorkcaseProcessDTO filter);
|
ResultDomain<WorkcaseProcessVO> getWorkcaseProcessList(TbWorkcaseProcessDTO filter);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 获取工单处理过程分页
|
* @description 获取工单处理过程分页
|
||||||
@@ -118,7 +119,7 @@ public interface WorkcaseService {
|
|||||||
* @author yslg
|
* @author yslg
|
||||||
* @since 2025-12-19
|
* @since 2025-12-19
|
||||||
*/
|
*/
|
||||||
ResultDomain<TbWorkcaseProcessDTO> getWorkcaseProcessPage(PageRequest<TbWorkcaseProcessDTO> pageRequest);
|
ResultDomain<WorkcaseProcessVO> getWorkcaseProcessPage(PageRequest<TbWorkcaseProcessDTO> pageRequest);
|
||||||
|
|
||||||
// ====================== 工单设备管理 ======================
|
// ====================== 工单设备管理 ======================
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
package org.xyzh.api.workcase.vo;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import org.xyzh.common.vo.BaseVO;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import com.alibaba.fastjson2.annotation.JSONField;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 工单列表VO
|
|
||||||
* 用于前端列表展示(简化版)
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
|
||||||
@Schema(description = "工单列表VO")
|
|
||||||
public class TicketListVO extends BaseVO {
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
@Schema(description = "工单ID")
|
|
||||||
private String ticketId;
|
|
||||||
|
|
||||||
@Schema(description = "工单编号")
|
|
||||||
private String ticketNo;
|
|
||||||
|
|
||||||
@Schema(description = "客户姓名")
|
|
||||||
private String customerName;
|
|
||||||
|
|
||||||
@Schema(description = "工单标题")
|
|
||||||
private String title;
|
|
||||||
|
|
||||||
@Schema(description = "工单类型名称")
|
|
||||||
private String ticketTypeName;
|
|
||||||
|
|
||||||
@Schema(description = "优先级")
|
|
||||||
private String priority;
|
|
||||||
|
|
||||||
@Schema(description = "优先级名称")
|
|
||||||
private String priorityName;
|
|
||||||
|
|
||||||
@Schema(description = "工单状态")
|
|
||||||
private String ticketStatus;
|
|
||||||
|
|
||||||
@Schema(description = "工单状态名称")
|
|
||||||
private String ticketStatusName;
|
|
||||||
|
|
||||||
@Schema(description = "处理人姓名")
|
|
||||||
private String assignedToName;
|
|
||||||
|
|
||||||
@Schema(description = "SLA截止时间", format = "date-time")
|
|
||||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
|
||||||
private Date slaDeadline;
|
|
||||||
|
|
||||||
@Schema(description = "是否逾期", defaultValue = "false")
|
|
||||||
private Boolean isOverdue;
|
|
||||||
|
|
||||||
@Schema(description = "创建者姓名")
|
|
||||||
private String creatorName;
|
|
||||||
}
|
|
||||||
@@ -1,151 +0,0 @@
|
|||||||
package org.xyzh.api.workcase.vo;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import org.xyzh.common.vo.BaseVO;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import com.alibaba.fastjson2.annotation.JSONField;
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 工单VO
|
|
||||||
* 用于前端展示工单信息
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
|
||||||
@Schema(description = "工单VO")
|
|
||||||
public class TicketVO extends BaseVO {
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
@Schema(description = "工单ID")
|
|
||||||
private String ticketId;
|
|
||||||
|
|
||||||
@Schema(description = "工单编号")
|
|
||||||
private String ticketNo;
|
|
||||||
|
|
||||||
@Schema(description = "客户ID")
|
|
||||||
private String customerId;
|
|
||||||
|
|
||||||
@Schema(description = "客户姓名")
|
|
||||||
private String customerName;
|
|
||||||
|
|
||||||
@Schema(description = "客户电话")
|
|
||||||
private String customerPhone;
|
|
||||||
|
|
||||||
@Schema(description = "关联会话ID")
|
|
||||||
private String conversationId;
|
|
||||||
|
|
||||||
@Schema(description = "工单类型")
|
|
||||||
private String ticketType;
|
|
||||||
|
|
||||||
@Schema(description = "工单类型名称")
|
|
||||||
private String ticketTypeName;
|
|
||||||
|
|
||||||
@Schema(description = "工单分类")
|
|
||||||
private String ticketCategory;
|
|
||||||
|
|
||||||
@Schema(description = "优先级")
|
|
||||||
private String priority;
|
|
||||||
|
|
||||||
@Schema(description = "优先级名称")
|
|
||||||
private String priorityName;
|
|
||||||
|
|
||||||
@Schema(description = "优先级颜色")
|
|
||||||
private String priorityColor;
|
|
||||||
|
|
||||||
@Schema(description = "工单标题")
|
|
||||||
private String title;
|
|
||||||
|
|
||||||
@Schema(description = "问题描述")
|
|
||||||
private String description;
|
|
||||||
|
|
||||||
@Schema(description = "附件ID数组")
|
|
||||||
private List<String> attachments;
|
|
||||||
|
|
||||||
@Schema(description = "附件数量")
|
|
||||||
private Integer attachmentCount;
|
|
||||||
|
|
||||||
@Schema(description = "工单来源")
|
|
||||||
private String ticketSource;
|
|
||||||
|
|
||||||
@Schema(description = "工单来源名称")
|
|
||||||
private String ticketSourceName;
|
|
||||||
|
|
||||||
@Schema(description = "分配给(处理人ID)")
|
|
||||||
private String assignedTo;
|
|
||||||
|
|
||||||
@Schema(description = "处理人姓名")
|
|
||||||
private String assignedToName;
|
|
||||||
|
|
||||||
@Schema(description = "分配部门")
|
|
||||||
private String assignedDept;
|
|
||||||
|
|
||||||
@Schema(description = "分配部门名称")
|
|
||||||
private String assignedDeptName;
|
|
||||||
|
|
||||||
@Schema(description = "工单状态")
|
|
||||||
private String ticketStatus;
|
|
||||||
|
|
||||||
@Schema(description = "工单状态名称")
|
|
||||||
private String ticketStatusName;
|
|
||||||
|
|
||||||
@Schema(description = "工单状态颜色")
|
|
||||||
private String statusColor;
|
|
||||||
|
|
||||||
@Schema(description = "解决方案")
|
|
||||||
private String resolution;
|
|
||||||
|
|
||||||
@Schema(description = "解决时间", format = "date-time")
|
|
||||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
|
||||||
private Date resolutionTime;
|
|
||||||
|
|
||||||
@Schema(description = "关闭时间", format = "date-time")
|
|
||||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
|
||||||
private Date closeTime;
|
|
||||||
|
|
||||||
@Schema(description = "首次响应时间", format = "date-time")
|
|
||||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
|
||||||
private Date responseTime;
|
|
||||||
|
|
||||||
@Schema(description = "SLA截止时间", format = "date-time")
|
|
||||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
|
||||||
private Date slaDeadline;
|
|
||||||
|
|
||||||
@Schema(description = "是否逾期", defaultValue = "false")
|
|
||||||
private Boolean isOverdue;
|
|
||||||
|
|
||||||
@Schema(description = "距离SLA截止的剩余时间(分钟)")
|
|
||||||
private Integer slaRemainingMinutes;
|
|
||||||
|
|
||||||
@Schema(description = "客户评分(1-5星)")
|
|
||||||
private Integer customerRating;
|
|
||||||
|
|
||||||
@Schema(description = "客户反馈")
|
|
||||||
private String customerFeedback;
|
|
||||||
|
|
||||||
@Schema(description = "CRM系统工单ID")
|
|
||||||
private String crmTicketId;
|
|
||||||
|
|
||||||
@Schema(description = "同步状态")
|
|
||||||
private String syncStatus;
|
|
||||||
|
|
||||||
@Schema(description = "同步状态名称")
|
|
||||||
private String syncStatusName;
|
|
||||||
|
|
||||||
@Schema(description = "工单标签")
|
|
||||||
private List<String> tags;
|
|
||||||
|
|
||||||
@Schema(description = "工单元数据")
|
|
||||||
private JsonNode metadata;
|
|
||||||
|
|
||||||
@Schema(description = "处理记录数量")
|
|
||||||
private Integer logCount;
|
|
||||||
|
|
||||||
@Schema(description = "创建者姓名")
|
|
||||||
private String creatorName;
|
|
||||||
|
|
||||||
@Schema(description = "更新者姓名")
|
|
||||||
private String updaterName;
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package org.xyzh.api.workcase.vo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.xyzh.common.vo.BaseVO;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 工单过程VO
|
||||||
|
* @filename WorkcaseProcessVO.java
|
||||||
|
* @author yslg
|
||||||
|
* @copyright xyzh
|
||||||
|
* @since 2025-12-31
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Schema(description = "工单过程VO")
|
||||||
|
public class WorkcaseProcessVO extends BaseVO {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Schema(description = "工单ID")
|
||||||
|
private String workcaseId;
|
||||||
|
|
||||||
|
@Schema(description = "过程ID")
|
||||||
|
private String processId;
|
||||||
|
|
||||||
|
@Schema(description = "动作 info:记录,assign:指派,redeploy:转派,repeal:撤销,finish:完成")
|
||||||
|
private String action;
|
||||||
|
|
||||||
|
@Schema(description = "消息")
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
@Schema(description = "携带文件列表")
|
||||||
|
private List<String> files;
|
||||||
|
|
||||||
|
@Schema(description = "处理人ID(指派、转派专属)")
|
||||||
|
private String processor;
|
||||||
|
|
||||||
|
@Schema(description = "处理人名称")
|
||||||
|
private String processorName;
|
||||||
|
}
|
||||||
@@ -14,6 +14,7 @@ import org.xyzh.api.workcase.dto.TbWorkcaseDTO;
|
|||||||
import org.xyzh.api.workcase.dto.TbWorkcaseDeviceDTO;
|
import org.xyzh.api.workcase.dto.TbWorkcaseDeviceDTO;
|
||||||
import org.xyzh.api.workcase.dto.TbWorkcaseProcessDTO;
|
import org.xyzh.api.workcase.dto.TbWorkcaseProcessDTO;
|
||||||
import org.xyzh.api.workcase.service.WorkcaseService;
|
import org.xyzh.api.workcase.service.WorkcaseService;
|
||||||
|
import org.xyzh.api.workcase.vo.WorkcaseProcessVO;
|
||||||
import org.xyzh.common.auth.utils.LoginUtil;
|
import org.xyzh.common.auth.utils.LoginUtil;
|
||||||
import org.xyzh.common.core.domain.LoginDomain;
|
import org.xyzh.common.core.domain.LoginDomain;
|
||||||
import org.xyzh.common.core.domain.ResultDomain;
|
import org.xyzh.common.core.domain.ResultDomain;
|
||||||
@@ -49,7 +50,8 @@ public class WorkcaseController {
|
|||||||
@PostMapping
|
@PostMapping
|
||||||
public ResultDomain<TbWorkcaseDTO> createWorkcase(@RequestBody TbWorkcaseDTO workcase) {
|
public ResultDomain<TbWorkcaseDTO> createWorkcase(@RequestBody TbWorkcaseDTO workcase) {
|
||||||
ValidationResult vr = ValidationUtils.validate(workcase, Arrays.asList(
|
ValidationResult vr = ValidationUtils.validate(workcase, Arrays.asList(
|
||||||
ValidationUtils.requiredString("deviceNamePlateImg", "设备名称牌图片"),
|
ValidationUtils.requiredString("deviceNamePlate", "设备名称牌图片"),
|
||||||
|
ValidationUtils.requiredString("deviceCode", "设备代码"),
|
||||||
ValidationUtils.requiredString("type", "问题类型"),
|
ValidationUtils.requiredString("type", "问题类型"),
|
||||||
ValidationUtils.requiredString("userId", "用户ID"),
|
ValidationUtils.requiredString("userId", "用户ID"),
|
||||||
ValidationUtils.requiredString("username", "用户名称")
|
ValidationUtils.requiredString("username", "用户名称")
|
||||||
@@ -176,14 +178,14 @@ public class WorkcaseController {
|
|||||||
@Operation(summary = "查询工单处理过程列表")
|
@Operation(summary = "查询工单处理过程列表")
|
||||||
@PreAuthorize("hasAuthority('workcase:ticket:process')")
|
@PreAuthorize("hasAuthority('workcase:ticket:process')")
|
||||||
@PostMapping("/process/list")
|
@PostMapping("/process/list")
|
||||||
public ResultDomain<TbWorkcaseProcessDTO> getWorkcaseProcessList(@RequestBody TbWorkcaseProcessDTO filter) {
|
public ResultDomain<WorkcaseProcessVO> getWorkcaseProcessList(@RequestBody TbWorkcaseProcessDTO filter) {
|
||||||
return workcaseService.getWorkcaseProcessList(filter);
|
return workcaseService.getWorkcaseProcessList(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "分页查询工单处理过程")
|
@Operation(summary = "分页查询工单处理过程")
|
||||||
@PreAuthorize("hasAuthority('workcase:ticket:process')")
|
@PreAuthorize("hasAuthority('workcase:ticket:process')")
|
||||||
@PostMapping("/process/page")
|
@PostMapping("/process/page")
|
||||||
public ResultDomain<TbWorkcaseProcessDTO> getWorkcaseProcessPage(@RequestBody PageRequest<TbWorkcaseProcessDTO> pageRequest) {
|
public ResultDomain<WorkcaseProcessVO> getWorkcaseProcessPage(@RequestBody PageRequest<TbWorkcaseProcessDTO> pageRequest) {
|
||||||
ValidationResult vr = ValidationUtils.validate(pageRequest, Arrays.asList(
|
ValidationResult vr = ValidationUtils.validate(pageRequest, Arrays.asList(
|
||||||
ValidationUtils.requiredNumber("pageParam.page", "页码", 1, null),
|
ValidationUtils.requiredNumber("pageParam.page", "页码", 1, null),
|
||||||
ValidationUtils.requiredNumber("pageParam.pageSize", "每页数量", 1, 100)
|
ValidationUtils.requiredNumber("pageParam.pageSize", "每页数量", 1, 100)
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import java.util.List;
|
|||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.xyzh.api.workcase.dto.TbWorkcaseProcessDTO;
|
import org.xyzh.api.workcase.dto.TbWorkcaseProcessDTO;
|
||||||
|
import org.xyzh.api.workcase.vo.WorkcaseProcessVO;
|
||||||
import org.xyzh.common.core.page.PageParam;
|
import org.xyzh.common.core.page.PageParam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -40,12 +41,12 @@ public interface TbWorkcaseProcessMapper {
|
|||||||
/**
|
/**
|
||||||
* 查询工单过程列表
|
* 查询工单过程列表
|
||||||
*/
|
*/
|
||||||
List<TbWorkcaseProcessDTO> selectWorkcaseProcessList(@Param("filter") TbWorkcaseProcessDTO filter);
|
List<WorkcaseProcessVO> selectWorkcaseProcessList(@Param("filter") TbWorkcaseProcessDTO filter);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询工单过程
|
* 分页查询工单过程
|
||||||
*/
|
*/
|
||||||
List<TbWorkcaseProcessDTO> selectWorkcaseProcessPage(@Param("filter") TbWorkcaseProcessDTO filter, @Param("pageParam") PageParam pageParam);
|
List<WorkcaseProcessVO> selectWorkcaseProcessPage(@Param("filter") TbWorkcaseProcessDTO filter, @Param("pageParam") PageParam pageParam);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 统计工单过程数量
|
* 统计工单过程数量
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import org.xyzh.api.workcase.dto.TbWorkcaseDTO;
|
|||||||
import org.xyzh.api.workcase.dto.TbWorkcaseDeviceDTO;
|
import org.xyzh.api.workcase.dto.TbWorkcaseDeviceDTO;
|
||||||
import org.xyzh.api.workcase.dto.TbWorkcaseProcessDTO;
|
import org.xyzh.api.workcase.dto.TbWorkcaseProcessDTO;
|
||||||
import org.xyzh.api.workcase.service.WorkcaseService;
|
import org.xyzh.api.workcase.service.WorkcaseService;
|
||||||
|
import org.xyzh.api.workcase.vo.WorkcaseProcessVO;
|
||||||
import org.xyzh.common.auth.utils.LoginUtil;
|
import org.xyzh.common.auth.utils.LoginUtil;
|
||||||
import org.xyzh.common.core.domain.ResultDomain;
|
import org.xyzh.common.core.domain.ResultDomain;
|
||||||
import org.xyzh.common.core.page.PageDomain;
|
import org.xyzh.common.core.page.PageDomain;
|
||||||
@@ -445,21 +446,21 @@ public class WorkcaseServiceImpl implements WorkcaseService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResultDomain<TbWorkcaseProcessDTO> getWorkcaseProcessList(TbWorkcaseProcessDTO filter) {
|
public ResultDomain<WorkcaseProcessVO> getWorkcaseProcessList(TbWorkcaseProcessDTO filter) {
|
||||||
List<TbWorkcaseProcessDTO> list = workcaseProcessMapper.selectWorkcaseProcessList(filter);
|
List<WorkcaseProcessVO> list = workcaseProcessMapper.selectWorkcaseProcessList(filter);
|
||||||
return ResultDomain.success("查询成功", list);
|
return ResultDomain.success("查询成功", list);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResultDomain<TbWorkcaseProcessDTO> getWorkcaseProcessPage(PageRequest<TbWorkcaseProcessDTO> pageRequest) {
|
public ResultDomain<WorkcaseProcessVO> getWorkcaseProcessPage(PageRequest<TbWorkcaseProcessDTO> pageRequest) {
|
||||||
TbWorkcaseProcessDTO filter = pageRequest.getFilter();
|
TbWorkcaseProcessDTO filter = pageRequest.getFilter();
|
||||||
PageParam pageParam = pageRequest.getPageParam();
|
PageParam pageParam = pageRequest.getPageParam();
|
||||||
|
|
||||||
List<TbWorkcaseProcessDTO> list = workcaseProcessMapper.selectWorkcaseProcessPage(filter, pageParam);
|
List<WorkcaseProcessVO> list = workcaseProcessMapper.selectWorkcaseProcessPage(filter, pageParam);
|
||||||
long total = workcaseProcessMapper.countWorkcaseProcesses(filter);
|
long total = workcaseProcessMapper.countWorkcaseProcesses(filter);
|
||||||
|
|
||||||
pageParam.setTotal((int) total);
|
pageParam.setTotal((int) total);
|
||||||
PageDomain<TbWorkcaseProcessDTO> pageDomain = new PageDomain<>(pageParam, list);
|
PageDomain<WorkcaseProcessVO> pageDomain = new PageDomain<>(pageParam, list);
|
||||||
return ResultDomain.success("查询成功", pageDomain);
|
return ResultDomain.success("查询成功", pageDomain);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,10 +34,9 @@
|
|||||||
|
|
||||||
<insert id="insertWorkcase" parameterType="org.xyzh.api.workcase.dto.TbWorkcaseDTO">
|
<insert id="insertWorkcase" parameterType="org.xyzh.api.workcase.dto.TbWorkcaseDTO">
|
||||||
INSERT INTO workcase.tb_workcase (
|
INSERT INTO workcase.tb_workcase (
|
||||||
optsn, workcase_id, room_id, user_id, username, phone, type, device_name_plate_img, creator
|
optsn, workcase_id, room_id, user_id, username, phone, type, device_code,device_name_plate, creator
|
||||||
<if test="device != null">, device</if>
|
<if test="device != null">, device</if>
|
||||||
<if test="deviceCode != null">, device_code</if>
|
<if test="deviceNamePlateImg != null">, device_name_plate_img</if>
|
||||||
<if test="deviceNamePlate != null">, device_name_plate</if>
|
|
||||||
<if test="address != null">, address</if>
|
<if test="address != null">, address</if>
|
||||||
<if test="description != null">, description</if>
|
<if test="description != null">, description</if>
|
||||||
<if test="imgs != null">, imgs</if>
|
<if test="imgs != null">, imgs</if>
|
||||||
@@ -45,10 +44,9 @@
|
|||||||
<if test="status != null">, status</if>
|
<if test="status != null">, status</if>
|
||||||
<if test="processor != null">, processor</if>
|
<if test="processor != null">, processor</if>
|
||||||
) VALUES (
|
) VALUES (
|
||||||
#{optsn}, #{workcaseId}, #{roomId}, #{userId}, #{username}, #{phone}, #{type}, #{deviceNamePlateImg}, #{creator}
|
#{optsn}, #{workcaseId}, #{roomId}, #{userId}, #{username}, #{phone}, #{type}, #{deviceCode}, #{deviceNamePlate}, #{creator}
|
||||||
<if test="device != null">, #{device}</if>
|
<if test="device != null">, #{device}</if>
|
||||||
<if test="deviceCode != null">, #{deviceCode}</if>
|
<if test="deviceNamePlateImg != null">, #{deviceNamePlateImg}</if>
|
||||||
<if test="deviceNamePlate != null">, #{deviceNamePlate}</if>
|
|
||||||
<if test="address != null">, #{address}</if>
|
<if test="address != null">, #{address}</if>
|
||||||
<if test="description != null">, #{description}</if>
|
<if test="description != null">, #{description}</if>
|
||||||
<if test="imgs != null">, #{imgs, typeHandler=org.xyzh.common.jdbc.handler.StringArrayTypeHandler}</if>
|
<if test="imgs != null">, #{imgs, typeHandler=org.xyzh.common.jdbc.handler.StringArrayTypeHandler}</if>
|
||||||
|
|||||||
@@ -15,6 +15,21 @@
|
|||||||
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
|
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap id="VOResultMap" type="org.xyzh.api.workcase.vo.WorkcaseProcessVO">
|
||||||
|
<id column="process_id" property="processId" jdbcType="VARCHAR"/>
|
||||||
|
<result column="optsn" property="optsn" jdbcType="VARCHAR"/>
|
||||||
|
<result column="workcase_id" property="workcaseId" jdbcType="VARCHAR"/>
|
||||||
|
<result column="action" property="action" jdbcType="VARCHAR"/>
|
||||||
|
<result column="message" property="message" jdbcType="VARCHAR"/>
|
||||||
|
<result column="files" property="files" jdbcType="ARRAY" typeHandler="org.xyzh.common.jdbc.handler.StringArrayTypeHandler"/>
|
||||||
|
<result column="processor" property="processor" jdbcType="VARCHAR"/>
|
||||||
|
<result column="processor_name" property="processorName" jdbcType="VARCHAR"/>
|
||||||
|
<result column="remark" property="remark" jdbcType="VARCHAR"/>
|
||||||
|
<result column="creator" property="creator" jdbcType="VARCHAR"/>
|
||||||
|
<result column="creator_name" property="creatorName" jdbcType="VARCHAR"/>
|
||||||
|
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
<sql id="Base_Column_List">
|
<sql id="Base_Column_List">
|
||||||
process_id, optsn, workcase_id, action, message, files, processor, remark, creator, create_time
|
process_id, optsn, workcase_id, action, message, files, processor, remark, creator, create_time
|
||||||
</sql>
|
</sql>
|
||||||
@@ -58,50 +73,64 @@
|
|||||||
WHERE process_id = #{processId}
|
WHERE process_id = #{processId}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectWorkcaseProcessList" resultMap="BaseResultMap">
|
<select id="selectWorkcaseProcessList" resultMap="VOResultMap">
|
||||||
SELECT <include refid="Base_Column_List"/>
|
SELECT p.process_id, p.optsn, p.workcase_id, p.action, p.message, p.files,
|
||||||
FROM workcase.tb_workcase_process
|
p.processor, p.remark, p.creator, p.create_time,
|
||||||
|
COALESCE(u1.username, g1.name) as creator_name,
|
||||||
|
COALESCE(u2.username, g2.name) as processor_name
|
||||||
|
FROM workcase.tb_workcase_process p
|
||||||
|
LEFT JOIN sys.tb_sys_user_info u1 ON p.creator = u1.user_id
|
||||||
|
LEFT JOIN sys.tb_guest g1 ON p.creator = g1.user_id
|
||||||
|
LEFT JOIN sys.tb_sys_user_info u2 ON p.processor = u2.user_id
|
||||||
|
LEFT JOIN sys.tb_guest g2 ON p.processor = g2.user_id
|
||||||
<where>
|
<where>
|
||||||
<if test="filter.processId != null and filter.processId != ''">
|
<if test="filter.processId != null and filter.processId != ''">
|
||||||
AND process_id = #{filter.processId}
|
AND p.process_id = #{filter.processId}
|
||||||
</if>
|
</if>
|
||||||
<if test="filter.workcaseId != null and filter.workcaseId != ''">
|
<if test="filter.workcaseId != null and filter.workcaseId != ''">
|
||||||
AND workcase_id = #{filter.workcaseId}
|
AND p.workcase_id = #{filter.workcaseId}
|
||||||
</if>
|
</if>
|
||||||
<if test="filter.action != null and filter.action != ''">
|
<if test="filter.action != null and filter.action != ''">
|
||||||
AND action = #{filter.action}
|
AND p.action = #{filter.action}
|
||||||
</if>
|
</if>
|
||||||
<if test="filter.processor != null and filter.processor != ''">
|
<if test="filter.processor != null and filter.processor != ''">
|
||||||
AND processor = #{filter.processor}
|
AND p.processor = #{filter.processor}
|
||||||
</if>
|
</if>
|
||||||
<if test="filter.creator != null and filter.creator != ''">
|
<if test="filter.creator != null and filter.creator != ''">
|
||||||
AND creator = #{filter.creator}
|
AND p.creator = #{filter.creator}
|
||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
ORDER BY create_time ASC
|
ORDER BY p.create_time ASC
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectWorkcaseProcessPage" resultMap="BaseResultMap">
|
<select id="selectWorkcaseProcessPage" resultMap="VOResultMap">
|
||||||
SELECT <include refid="Base_Column_List"/>
|
SELECT p.process_id, p.optsn, p.workcase_id, p.action, p.message, p.files,
|
||||||
FROM workcase.tb_workcase_process
|
p.processor, p.remark, p.creator, p.create_time,
|
||||||
|
COALESCE(u1.username, g1.name) as creator_name,
|
||||||
|
COALESCE(u2.username, g2.name) as processor_name
|
||||||
|
FROM workcase.tb_workcase_process p
|
||||||
|
LEFT JOIN sys.tb_sys_user_info u1 ON p.creator = u1.user_id
|
||||||
|
LEFT JOIN sys.tb_guest g1 ON p.creator = g1.user_id
|
||||||
|
LEFT JOIN sys.tb_sys_user_info u2 ON p.processor = u2.user_id
|
||||||
|
LEFT JOIN sys.tb_guest g2 ON p.processor = g2.user_id
|
||||||
<where>
|
<where>
|
||||||
<if test="filter.processId != null and filter.processId != ''">
|
<if test="filter.processId != null and filter.processId != ''">
|
||||||
AND process_id = #{filter.processId}
|
AND p.process_id = #{filter.processId}
|
||||||
</if>
|
</if>
|
||||||
<if test="filter.workcaseId != null and filter.workcaseId != ''">
|
<if test="filter.workcaseId != null and filter.workcaseId != ''">
|
||||||
AND workcase_id = #{filter.workcaseId}
|
AND p.workcase_id = #{filter.workcaseId}
|
||||||
</if>
|
</if>
|
||||||
<if test="filter.action != null and filter.action != ''">
|
<if test="filter.action != null and filter.action != ''">
|
||||||
AND action = #{filter.action}
|
AND p.action = #{filter.action}
|
||||||
</if>
|
</if>
|
||||||
<if test="filter.processor != null and filter.processor != ''">
|
<if test="filter.processor != null and filter.processor != ''">
|
||||||
AND processor = #{filter.processor}
|
AND p.processor = #{filter.processor}
|
||||||
</if>
|
</if>
|
||||||
<if test="filter.creator != null and filter.creator != ''">
|
<if test="filter.creator != null and filter.creator != ''">
|
||||||
AND creator = #{filter.creator}
|
AND p.creator = #{filter.creator}
|
||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
ORDER BY create_time ASC
|
ORDER BY p.create_time ASC
|
||||||
LIMIT #{pageParam.pageSize} OFFSET #{pageParam.offset}
|
LIMIT #{pageParam.pageSize} OFFSET #{pageParam.offset}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { api } from 'shared/api'
|
import { api } from 'shared/api'
|
||||||
import type { ResultDomain, PageRequest } from 'shared/types'
|
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 工单管理接口
|
* @description 工单管理接口
|
||||||
@@ -121,8 +121,8 @@ export const workcaseAPI = {
|
|||||||
* 查询工单处理过程列表
|
* 查询工单处理过程列表
|
||||||
* @param filter 筛选条件
|
* @param filter 筛选条件
|
||||||
*/
|
*/
|
||||||
async getWorkcaseProcessList(filter?: TbWorkcaseProcessDTO): Promise<ResultDomain<TbWorkcaseProcessDTO>> {
|
async getWorkcaseProcessList(filter?: TbWorkcaseProcessDTO): Promise<ResultDomain<WorkcaseProcessVO>> {
|
||||||
const response = await api.post<TbWorkcaseProcessDTO>(`${this.baseUrl}/process/list`, filter || {})
|
const response = await api.post<WorkcaseProcessVO>(`${this.baseUrl}/process/list`, filter || {})
|
||||||
return response.data
|
return response.data
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -130,8 +130,8 @@ export const workcaseAPI = {
|
|||||||
* 分页查询工单处理过程
|
* 分页查询工单处理过程
|
||||||
* @param pageRequest 分页请求
|
* @param pageRequest 分页请求
|
||||||
*/
|
*/
|
||||||
async getWorkcaseProcessPage(pageRequest: PageRequest<TbWorkcaseProcessDTO>): Promise<ResultDomain<TbWorkcaseProcessDTO>> {
|
async getWorkcaseProcessPage(pageRequest: PageRequest<TbWorkcaseProcessDTO>): Promise<ResultDomain<WorkcaseProcessVO>> {
|
||||||
const response = await api.post<TbWorkcaseProcessDTO>(`${this.baseUrl}/process/page`, pageRequest)
|
const response = await api.post<WorkcaseProcessVO>(`${this.baseUrl}/process/page`, pageRequest)
|
||||||
return response.data
|
return response.data
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -103,6 +103,8 @@ declare module 'shared/types' {
|
|||||||
|
|
||||||
export interface BaseVO extends BaseDTO {
|
export interface BaseVO extends BaseDTO {
|
||||||
id?: string
|
id?: string
|
||||||
|
creatorName?: string
|
||||||
|
updaterName?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
// 重新导出 response
|
// 重新导出 response
|
||||||
|
|||||||
@@ -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 */
|
/** 文件根ID */
|
||||||
fileRootId?: string
|
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
|
||||||
|
}
|
||||||
@@ -40,9 +40,9 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="message" label="操作内容" min-width="200" show-overflow-tooltip />
|
<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 }">
|
<template #default="{ row }">
|
||||||
{{ row.processor || '-' }}
|
{{ row.processorName || '-' }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="files" label="附件" width="80">
|
<el-table-column prop="files" label="附件" width="80">
|
||||||
@@ -51,7 +51,11 @@
|
|||||||
<span v-else>-</span>
|
<span v-else>-</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</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 prop="createTime" label="操作时间" width="170" />
|
||||||
<el-table-column label="操作" width="120" fixed="right">
|
<el-table-column label="操作" width="120" fixed="right">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
@@ -83,8 +87,8 @@
|
|||||||
<el-tag :type="getActionTagType(selectedLog.action)">{{ getActionLabel(selectedLog.action) }}</el-tag>
|
<el-tag :type="getActionTagType(selectedLog.action)">{{ getActionLabel(selectedLog.action) }}</el-tag>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="操作内容">{{ selectedLog.message || '-' }}</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.processorName || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="操作人">{{ selectedLog.creator }}</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 label="操作时间">{{ selectedLog.createTime }}</el-descriptions-item>
|
||||||
<el-descriptions-item v-if="selectedLog.files?.length" label="附件">
|
<el-descriptions-item v-if="selectedLog.files?.length" label="附件">
|
||||||
<div class="file-list">
|
<div class="file-list">
|
||||||
@@ -104,7 +108,7 @@ import AdminLayout from '@/views/admin/AdminLayout.vue'
|
|||||||
import { Download, Search } from 'lucide-vue-next'
|
import { Download, Search } from 'lucide-vue-next'
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
import { workcaseAPI } from '@/api/workcase'
|
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'
|
import type { PageRequest, PageParam } from 'shared/types'
|
||||||
|
|
||||||
// 操作类型选项
|
// 操作类型选项
|
||||||
@@ -120,8 +124,8 @@ const actionOptions = [
|
|||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
const dateRange = ref<[string, string] | null>(null)
|
const dateRange = ref<[string, string] | null>(null)
|
||||||
const showDetailDialog = ref(false)
|
const showDetailDialog = ref(false)
|
||||||
const selectedLog = ref<TbWorkcaseProcessDTO | null>(null)
|
const selectedLog = ref<WorkcaseProcessVO | null>(null)
|
||||||
const processLogs = ref<TbWorkcaseProcessDTO[]>([])
|
const processLogs = ref<WorkcaseProcessVO[]>([])
|
||||||
|
|
||||||
// 筛选条件
|
// 筛选条件
|
||||||
const filter = reactive<TbWorkcaseProcessDTO>({
|
const filter = reactive<TbWorkcaseProcessDTO>({
|
||||||
@@ -196,7 +200,7 @@ const handleSearch = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 查看详情
|
// 查看详情
|
||||||
const viewDetail = (row: TbWorkcaseProcessDTO) => {
|
const viewDetail = (row: WorkcaseProcessVO) => {
|
||||||
selectedLog.value = row
|
selectedLog.value = row
|
||||||
showDetailDialog.value = true
|
showDetailDialog.value = true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -286,7 +286,7 @@ import { ref, watch, onMounted, computed } from 'vue'
|
|||||||
import { ChatMessage } from '@/views/public/ChatRoom/'
|
import { ChatMessage } from '@/views/public/ChatRoom/'
|
||||||
import { ElButton, ElInput, ElSelect, ElOption, ElDialog, ElMessage, ElLoading } from 'element-plus'
|
import { ElButton, ElInput, ElSelect, ElOption, ElDialog, ElMessage, ElLoading } from 'element-plus'
|
||||||
import { MessageSquare, ImageIcon as ImageIcon, Plus } from 'lucide-vue-next'
|
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 type { TbSysFileDTO } from 'shared/types'
|
||||||
import { workcaseAPI } from '@/api/workcase'
|
import { workcaseAPI } from '@/api/workcase'
|
||||||
import { fileAPI } from 'shared/api/file'
|
import { fileAPI } from 'shared/api/file'
|
||||||
@@ -322,7 +322,7 @@ const faultTypes = ['电气系统故障', '机械故障', '控制系统故障',
|
|||||||
|
|
||||||
const showChatMessage = ref(false)
|
const showChatMessage = ref(false)
|
||||||
const currentRoomId = ref<string>('')
|
const currentRoomId = ref<string>('')
|
||||||
const processList = ref<TbWorkcaseProcessDTO[]>([])
|
const processList = ref<WorkcaseProcessVO[]>([])
|
||||||
|
|
||||||
// 文件信息缓存 (fileId -> TbSysFileDTO)
|
// 文件信息缓存 (fileId -> TbSysFileDTO)
|
||||||
const fileInfoCache = ref<Map<string, TbSysFileDTO>>(new Map())
|
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
|
// 收集所有文件ID
|
||||||
const fileIds: string[] = []
|
const fileIds: string[] = []
|
||||||
processes.forEach(p => {
|
processes.forEach(p => {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { request } from '../base'
|
import { request } from '../base'
|
||||||
import type { ResultDomain, PageRequest } from '../../types'
|
import type { ResultDomain, PageRequest } from '../../types'
|
||||||
import type { TbWorkcaseDTO, TbWorkcaseProcessDTO, TbWorkcaseDeviceDTO } from '../../types/workcase'
|
import type { TbWorkcaseDTO, TbWorkcaseProcessDTO, TbWorkcaseDeviceDTO, WorkcaseProcessVO } from '../../types/workcase'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 工单管理接口
|
* @description 工单管理接口
|
||||||
@@ -110,16 +110,16 @@ export const workcaseAPI = {
|
|||||||
* 查询工单处理过程列表
|
* 查询工单处理过程列表
|
||||||
* @param filter 筛选条件
|
* @param filter 筛选条件
|
||||||
*/
|
*/
|
||||||
getWorkcaseProcessList(filter?: TbWorkcaseProcessDTO): Promise<ResultDomain<TbWorkcaseProcessDTO>> {
|
getWorkcaseProcessList(filter?: TbWorkcaseProcessDTO): Promise<ResultDomain<WorkcaseProcessVO>> {
|
||||||
return request<TbWorkcaseProcessDTO>({ url: `${this.baseUrl}/process/list`, method: 'POST', data: filter || {} })
|
return request<WorkcaseProcessVO>({ url: `${this.baseUrl}/process/list`, method: 'POST', data: filter || {} })
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询工单处理过程
|
* 分页查询工单处理过程
|
||||||
* @param pageRequest 分页请求
|
* @param pageRequest 分页请求
|
||||||
*/
|
*/
|
||||||
getWorkcaseProcessPage(pageRequest: PageRequest<TbWorkcaseProcessDTO>): Promise<ResultDomain<TbWorkcaseProcessDTO>> {
|
getWorkcaseProcessPage(pageRequest: PageRequest<TbWorkcaseProcessDTO>): Promise<ResultDomain<WorkcaseProcessVO>> {
|
||||||
return request<TbWorkcaseProcessDTO>({ url: `${this.baseUrl}/process/page`, method: 'POST', data: pageRequest })
|
return request<WorkcaseProcessVO>({ url: `${this.baseUrl}/process/page`, method: 'POST', data: pageRequest })
|
||||||
},
|
},
|
||||||
|
|
||||||
// ========================= 工单设备管理 =========================
|
// ========================= 工单设备管理 =========================
|
||||||
|
|||||||
@@ -380,7 +380,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, onMounted, reactive, computed } from 'vue'
|
import { ref, onMounted, reactive, computed } from 'vue'
|
||||||
import { onLoad } from '@dcloudio/uni-app'
|
import { onLoad } from '@dcloudio/uni-app'
|
||||||
import type { TbWorkcaseDTO, TbWorkcaseProcessDTO } from '@/types/workcase'
|
import type { TbWorkcaseDTO, TbWorkcaseProcessDTO, WorkcaseProcessVO } from '@/types/workcase'
|
||||||
import type { CustomerServiceVO } from '@/types/workcase/chatRoom'
|
import type { CustomerServiceVO } from '@/types/workcase/chatRoom'
|
||||||
import { workcaseAPI, fileAPI, workcaseChatAPI } from '@/api'
|
import { workcaseAPI, fileAPI, workcaseChatAPI } from '@/api'
|
||||||
|
|
||||||
@@ -401,7 +401,7 @@ const userId = JSON.parse(uni.getStorageSync('loginDomain')).userInfo.userId
|
|||||||
const workcase = reactive<TbWorkcaseDTO>({})
|
const workcase = reactive<TbWorkcaseDTO>({})
|
||||||
|
|
||||||
// 处理记录
|
// 处理记录
|
||||||
const processList = reactive<TbWorkcaseProcessDTO[]>([])
|
const processList = reactive<WorkcaseProcessVO[]>([])
|
||||||
|
|
||||||
// 文件信息缓存
|
// 文件信息缓存
|
||||||
const fileInfoCache = reactive<Map<string, any>>(new Map())
|
const fileInfoCache = reactive<Map<string, any>>(new Map())
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import type { BaseDTO } from '../base'
|
import type { BaseDTO, BaseVO } from '../base'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工单表对象
|
* 工单表对象
|
||||||
@@ -74,3 +74,23 @@ export interface TbWorkcaseDeviceDTO extends BaseDTO {
|
|||||||
/** 文件根ID */
|
/** 文件根ID */
|
||||||
fileRootId?: string
|
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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user