fix: 修复一级需求任务编辑时任务明细未加载的问题

- 从API获取完整的任务数据而不是仅从sessionStorage
- 正确解析和填充taskTypes数组
- 支持流水线任务和非流水线任务的任务类型加载
- 为任务类型设置级联路径
This commit is contained in:
Your Name 2026-01-19 23:58:46 +08:00
parent e3b7efe561
commit 40be47290f

View File

@ -564,7 +564,7 @@
</template>
<script setup lang="ts">
import { ref, reactive, computed, onMounted, onUnmounted, watch } from 'vue'
import { ref, reactive, computed, onMounted, onUnmounted, watch, nextTick } from 'vue'
import { useRouter, useRoute } from 'vue-router'
import { message } from 'ant-design-vue'
import type { UploadFile, UploadProps } from 'ant-design-vue'
@ -2151,37 +2151,127 @@ const loadPrimaryTaskForEdit = async () => {
}
const editData = JSON.parse(editDataStr)
// 设置编辑模式
editMode.value = true
editTaskId.value = editData.taskId
// 填充基本信息(这些字段是一级需求部门填写的,不可修改)
formData.brandId = editData.brandId
formData.platformId = editData.platformId
formData.categoryId = editData.categoryId
formData.title = editData.title
formData.description = editData.description || ''
formData.score = editData.score
formData.taskTypeId = editData.taskTypeId
formData.demandTypeId = editData.demandTypeId
formData.spuInfo = editData.spuInfo || ''
formData.deadline = editData.deadline
formData.timeLimit = editData.timeLimit
// 处理任务类型(可能是数组)
if (editData.taskTypeIds && editData.taskTypeIds.length > 0) {
formData.taskTypeIds = editData.taskTypeIds
}
// 标记为一级需求任务编辑模式
formData.isPrimaryTaskEdit = true
formData.primaryPublisherId = editData.primaryPublisherId
formData.primaryPublisherDeptId = editData.primaryPublisherDeptId
const taskId = editData.taskId
// 清除 sessionStorage
sessionStorage.removeItem('editPrimaryTaskData')
// 从API获取完整的任务数据
loading.value = true
const response = await taskApi.getTaskById(taskId)
const task = response.data
if (!task) {
message.error('任务不存在')
router.push('/tasks')
return
}
console.log('加载一级需求任务数据:', task)
// 设置编辑模式
editMode.value = true
editTaskId.value = taskId
// 填充基本表单数据
formData.title = task.title || ''
formData.taskSubType = task.taskSubType || ''
formData.brandId = task.brandId
formData.platformId = task.platformId
formData.categoryId = task.categoryId
formData.spuInfo = task.spuInfo || ''
formData.remark = task.remark || ''
formData.releaseType = task.releaseType || 'recruitment'
formData.isUrgent = task.isUrgent === 1 || task.isUrgent === true
// 处理预览图
if (task.previewImage) {
formData.previewImage = task.previewImage
previewFileList.value = [{
uid: 'existing-preview',
name: '预览图',
status: 'done' as const,
url: task.previewImage
}]
}
// 处理任务类型和数量 - 优先从子任务的typeDetails中获取
if (task.isPipeline === 1 && task.subTasks && task.subTasks.length > 0) {
// 流水线任务:从子任务的typeDetails中提取任务类型信息
console.log('流水线任务子任务:', task.subTasks)
const taskTypeItems: TaskTypeItem[] = []
for (const subTask of task.subTasks) {
// 优先从typeDetails解析(包含完整的任务类型明细)
if (subTask.typeDetails) {
try {
const details = typeof subTask.typeDetails === 'string'
? JSON.parse(subTask.typeDetails)
: subTask.typeDetails
for (const detail of details) {
taskTypeItems.push({
taskTypeId: detail.typeId,
quantity: detail.quantity || 1,
receiverId: detail.receiverId || subTask.receiverId,
selectedDeptId: undefined
})
}
} catch (e) {
console.warn('解析typeDetails失败:', e)
taskTypeItems.push({
taskTypeId: subTask.taskTypeId,
quantity: subTask.quantity || 1,
receiverId: subTask.receiverId,
selectedDeptId: undefined
})
}
} else {
taskTypeItems.push({
taskTypeId: subTask.taskTypeId,
quantity: subTask.quantity || 1,
receiverId: subTask.receiverId,
selectedDeptId: undefined
})
}
}
formData.taskTypes = taskTypeItems
console.log('解析后的任务类型:', formData.taskTypes)
} else if (task.taskTypeIds) {
// 非流水线任务:从taskTypeIds字符串解析
const typeIds = task.taskTypeIds.split(',').map((id: string) => parseInt(id.trim()))
formData.taskTypes = typeIds.map((typeId: number, index: number) => ({
taskTypeId: typeId,
quantity: index === 0 ? (task.quantity || 1) : 1,
receiverId: task.receiverId
}))
} else if (task.taskTypeId) {
// 兼容单任务类型
formData.taskTypes = [{
taskTypeId: task.taskTypeId,
quantity: task.quantity || 1,
receiverId: task.receiverId
}]
}
// 为每个任务类型设置级联路径(需要在层级数据加载后执行)
nextTick(() => {
for (const item of formData.taskTypes) {
if (item.taskTypeId) {
const path = findTaskTypePath(item.taskTypeId)
if (path) {
item.taskTypePath = path
}
}
}
})
// 标记为一级需求任务编辑模式
formData.isPrimaryTaskEdit = true
formData.primaryPublisherId = task.primaryPublisherId
formData.primaryPublisherDeptId = task.primaryPublisherDeptId
message.info('请完善任务明细后提交')
} catch (error) {