fix: 修复一级需求任务编辑时任务明细未加载的问题
- 从API获取完整的任务数据而不是仅从sessionStorage - 正确解析和填充taskTypes数组 - 支持流水线任务和非流水线任务的任务类型加载 - 为任务类型设置级联路径
This commit is contained in:
parent
e3b7efe561
commit
40be47290f
@ -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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user