fix: 子任务组审核使用与第一轮相同的审核弹窗(任务类型编辑、设计师选择)

This commit is contained in:
Your Name 2026-01-07 20:17:27 +08:00
parent a56f504871
commit 97bf6b514a

View File

@ -3153,19 +3153,31 @@ const handleApproveConfirm = async () => {
return
}
const approvalData: TaskApprovalDTO = {
comment: approveAssignType.value === 'manual' ?
`指定设计师接单` : '审核通过,发布到任务大厅',
assignedReceiverId: approveAssignType.value === 'manual' ? approveDesignerId.value : undefined,
taskUpdates: {
taskTypes: approveTaskTypes.value.map(t => ({
taskTypeId: t.typeId,
quantity: t.quantity
}))
// 判断是子任务组还是主任务
const taskData = approveTaskData.value as any
const isTaskGroup = taskData._isTaskGroup === true
if (isTaskGroup) {
// 子任务组审核
await taskApi.approveTaskGroup(taskData.id, {
groupNo: taskData._groupNo,
assignedReceiverId: approveAssignType.value === 'manual' ? approveDesignerId.value : undefined
})
} else {
// 主任务审核
const approvalData: TaskApprovalDTO = {
comment: approveAssignType.value === 'manual' ?
`指定设计师接单` : '审核通过,发布到任务大厅',
assignedReceiverId: approveAssignType.value === 'manual' ? approveDesignerId.value : undefined,
taskUpdates: {
taskTypes: approveTaskTypes.value.map(t => ({
taskTypeId: t.typeId,
quantity: t.quantity
}))
}
}
await taskApi.approveReceivingLevel(taskData.id!, approvalData)
}
await taskApi.approveReceivingLevel(approveTaskData.value.id!, approvalData)
if (approveAssignType.value === 'manual') {
const designer = designersList.value.find(d => d.id === approveDesignerId.value)
@ -3176,7 +3188,7 @@ const handleApproveConfirm = async () => {
approveModalVisible.value = false
// 刷新列表和数量
loadPendingApprovalTasks()
loadReviewTasks()
loadAllTabCounts()
loadDashboardStats()
} catch (error: any) {
@ -3428,113 +3440,22 @@ const handleApproveTaskGroupFromReview = async (task: any) => {
return
}
try {
// 获取设计师列表及工作量
const designersWithWorkload = await userApi.getDesignersWithWorkload()
let assignType = ref<'auto' | 'manual'>('auto')
let selectedDesignerId = ref<number | undefined>(undefined)
Modal.confirm({
title: '审核子任务组',
width: 600,
content: h('div', { style: 'padding: 10px 0;' }, [
h('p', { style: 'margin-bottom: 16px; color: #666; font-size: 13px;' },
`即将审核通过子任务组"${task.title} - 第${groupData.groupNo}组",共${groupData.itemCount || 0}个子任务。`
),
h('p', { style: 'margin-bottom: 12px; font-weight: 500;' }, '请选择接单方式:'),
h(RadioGroup, {
value: assignType.value,
onChange: (e: any) => {
assignType.value = e.target.value
if (e.target.value === 'auto') {
selectedDesignerId.value = undefined
}
}
}, () => [
h(Radio, { value: 'auto', style: { display: 'block', marginBottom: '12px' } }, () => '发布到任务大厅(设计师抢单)'),
h(Radio, { value: 'manual', style: { display: 'block', marginBottom: '12px' } }, () => '指定设计师接单')
]),
h('div', {
style: {
display: assignType.value === 'manual' ? 'block' : 'none',
marginTop: '16px',
marginLeft: '24px'
}
}, [
h('p', { style: 'margin-bottom: 8px; font-size: 13px; color: #666;' }, '选择设计师:'),
h(RadioGroup, {
value: selectedDesignerId.value,
onChange: (e: any) => {
selectedDesignerId.value = e.target.value
},
style: { width: '100%' }
}, () => designersWithWorkload.map(designer => {
const workloadColor = designer.inProgressCount === 0 ? '#52c41a'
: designer.inProgressCount <= 3 ? '#faad14'
: '#f5222d'
return h(Radio, {
value: designer.id,
style: {
display: 'block',
marginBottom: '8px',
padding: '8px',
border: '1px solid #d9d9d9',
borderRadius: '4px'
}
}, () => h('div', { style: 'display: flex; justify-content: space-between; align-items: center;' }, [
h('span', {}, `${designer.realName} (${designer.deptName || '未知部门'})`),
h('span', {
style: {
fontSize: '12px',
color: workloadColor
}
}, `当前${designer.inProgressCount}个任务`)
]))
}))
])
]),
okText: '确认审核',
cancelText: '取消',
onOk: async () => {
if (assignType.value === 'manual' && !selectedDesignerId.value) {
message.warning('请选择设计师')
return Promise.reject()
}
try {
approvalLoading.value = true
await taskApi.approveTaskGroup(groupData.taskId, {
groupNo: groupData.groupNo,
assignedReceiverId: assignType.value === 'manual' ? selectedDesignerId.value : undefined
})
if (assignType.value === 'manual') {
const designer = designersWithWorkload.find(d => d.id === selectedDesignerId.value)
message.success(`已审核通过并指定给设计师 ${designer?.realName}`)
} else {
message.success('已审核通过,子任务组已发布到任务大厅')
}
// 刷新列表和数量
loadReviewTasks()
loadAllTabCounts()
loadDashboardStats()
} catch (error: any) {
console.error('审核失败:', error)
message.error(error.msg || error.message || '审核失败')
return Promise.reject(error)
} finally {
approvalLoading.value = false
}
}
})
} catch (error: any) {
console.error('获取设计师列表失败:', error)
message.error('获取设计师列表失败')
}
// 将子任务组数据转换为与主任务相同的格式,复用审核弹窗
const taskForApproval = {
id: groupData.taskId,
title: task.title,
taskNo: task.taskNo,
typeDetails: task.typeDetails,
taskTypeId: task.taskTypeId,
currentApproverRole: 'receiving_leader',
// 标记这是子任务组审核
_isTaskGroup: true,
_groupNo: groupData.groupNo,
_groupData: groupData
} as any
// 调用与第一轮相同的审核弹窗
showAssignDesignerModal(taskForApproval)
}
// 从待审核任务页面驳回子任务组