修复同部门多设计师审核时显示问题

1. 后端:在typeDetails中保存receiverId和receiverName
2. 前端:审核弹窗支持显示多个预先指定的设计师列表
3. 前端:扩展TaskTypeDetail接口支持receiverId和receiverName
This commit is contained in:
Your Name 2026-01-14 18:46:04 +08:00
parent 2df7e3713c
commit ed314051d7
2 changed files with 63 additions and 6 deletions

View File

@ -518,13 +518,21 @@ public class TaskService {
firstTaskTypeId = itemDto.getTaskTypeId();
}
// 添加任务类型明细
// 添加任务类型明细(包含预先指定的设计师信息)
java.util.Map<String, Object> detail = new java.util.LinkedHashMap<>();
detail.put("typeId", itemDto.getTaskTypeId());
detail.put("typeName", demandType.getName());
detail.put("quantity", itemDto.getQuantity());
detail.put("unitScore", demandType.getUnitScore());
detail.put("totalScore", itemScore);
// 如果指定了设计师,也保存到明细中
if (itemDto.getReceiverId() != null) {
detail.put("receiverId", itemDto.getReceiverId());
User receiver = userService.getUserById(itemDto.getReceiverId());
if (receiver != null) {
detail.put("receiverName", receiver.getRealName());
}
}
typeDetailsList.add(detail);
}
@ -1532,12 +1540,21 @@ public class TaskService {
firstTaskTypeId = itemDto.getTaskTypeId();
}
// 添加任务类型明细(包含预先指定的设计师信息)
java.util.Map<String, Object> detail = new java.util.LinkedHashMap<>();
detail.put("typeId", itemDto.getTaskTypeId());
detail.put("typeName", demandType.getName());
detail.put("quantity", itemDto.getQuantity());
detail.put("unitScore", demandType.getUnitScore());
detail.put("totalScore", itemScore);
// 如果指定了设计师,也保存到明细中
if (itemDto.getReceiverId() != null) {
detail.put("receiverId", itemDto.getReceiverId());
User receiver = userService.getUserById(itemDto.getReceiverId());
if (receiver != null) {
detail.put("receiverName", receiver.getRealName());
}
}
typeDetailsList.add(detail);
}

View File

@ -2030,7 +2030,19 @@
<Icon name="check-circle" size="lg" color="#52c41a" />
<span style="color: #fff; font-weight: 500;">已预先指定设计师接单</span>
</div>
<div style="margin-top: 12px; color: #888;">
<!-- 多个设计师列表(同部门多子任务情况) -->
<div v-if="preAssignedDesignersList.length > 0" style="margin-top: 12px;">
<div v-for="(item, index) in preAssignedDesignersList" :key="index"
style="display: flex; justify-content: space-between; align-items: center; padding: 8px 12px; background: rgba(49, 240, 139, 0.1); border-radius: 6px; margin-bottom: 8px;">
<div style="display: flex; flex-direction: column; gap: 2px;">
<span style="color: #fff; font-size: 13px;">{{ item.typeName }}</span>
<span style="color: #888; font-size: 12px;">数量: {{ item.quantity }}</span>
</div>
<span style="color: #31f08b; font-weight: 600;">{{ item.designerName }}</span>
</div>
</div>
<!-- 单个设计师(兼容旧逻辑) -->
<div v-else style="margin-top: 12px; color: #888;">
<span>指定设计师:</span>
<span style="color: #31f08b; font-weight: 600;">{{ preAssignedDesignerName }}</span>
</div>
@ -2475,6 +2487,8 @@ interface TaskTypeDetail {
quantity: number
unitScore: number
totalScore: number
receiverId?: number // 预先指定的设计师ID
receiverName?: string // 预先指定的设计师姓名
}
interface TaskOrSubTask extends Task {
@ -3535,11 +3549,15 @@ const approveDesignerId = ref<number | undefined>(undefined)
const designersList = ref<DesignerWithWorkload[]>([])
const newTaskTypePath = ref<(string | number)[] | undefined>(undefined)
const preAssignedDesignerName = ref<string>('') // 预先指定的设计师姓名
const preAssignedDesignersList = ref<Array<{typeName: string, designerName: string, quantity: number}>>([]) // 多个预先指定的设计师列表
// 判断任务是否已预先指定设计师
const isTaskPreAssigned = computed(() => {
if (!approveTaskData.value) return false
const task = approveTaskData.value as any
// 检查是否有预先指定的设计师列表(多个子任务情况)
if (preAssignedDesignersList.value.length > 0) return true
// 兼容旧逻辑:检查主任务的 receiverId
return task.releaseType === 'assigned' && task.receiverId != null
})
@ -3621,7 +3639,29 @@ const showAssignDesignerModal = async (task: Task) => {
// 检查任务是否已预先指定设计师
const taskAny = task as any
if (taskAny.releaseType === 'assigned' && taskAny.receiverId) {
preAssignedDesignersList.value = [] // 重置列表
// 检查 typeDetails 中是否有预先指定的设计师(同部门多设计师情况)
if (typeDetailsArray.length > 0) {
const designersInDetails: Array<{typeName: string, designerName: string, quantity: number}> = []
for (const detail of typeDetailsArray) {
if (detail.receiverId && detail.receiverName) {
designersInDetails.push({
typeName: detail.typeName || getTaskTypeName(detail.typeId),
designerName: detail.receiverName,
quantity: detail.quantity || 1
})
}
}
if (designersInDetails.length > 0) {
preAssignedDesignersList.value = designersInDetails
approveAssignType.value = 'manual'
console.log('任务类型明细中预先指定的设计师:', designersInDetails)
}
}
// 兼容旧逻辑:检查主任务的 receiverId
if (taskAny.releaseType === 'assigned' && taskAny.receiverId && preAssignedDesignersList.value.length === 0) {
// 已预先指定设计师,设置相关状态
approveAssignType.value = 'manual'
approveDesignerId.value = taskAny.receiverId
@ -3629,10 +3669,10 @@ const showAssignDesignerModal = async (task: Task) => {
const preAssigned = designers.find(d => d.id === taskAny.receiverId)
preAssignedDesignerName.value = preAssigned?.realName || taskAny.receiverName || '未知'
console.log('任务已预先指定设计师:', preAssignedDesignerName.value)
} else {
} else if (preAssignedDesignersList.value.length === 0) {
// 未预先指定,重置状态
approveAssignType.value = 'auto'
approveDesignerId.value = undefined
approveAssignType.value = 'auto'
approveDesignerId.value = undefined
preAssignedDesignerName.value = ''
}