feat: 添加一级需求任务完善明细功能

- 在任务卡片上为pending_detail_completion状态添加'重新编辑'按钮
- 添加canEditDetailTask函数判断是否可以编辑完善明细
- 添加handleEditDetailTask函数跳转到发布任务页面
- 在CreateTask.vue中添加loadPrimaryTaskForEdit函数加载一级需求任务数据
- 扩展formData以支持一级需求任务编辑模式
This commit is contained in:
Your Name 2026-01-19 23:49:35 +08:00
parent 17e87bb612
commit 0f749d71a8
2 changed files with 125 additions and 6 deletions

View File

@ -669,9 +669,9 @@ const formData = reactive({
pipelineMode: 'sequential' as 'sequential' | 'parallel', // 固定为顺序流水线
taskTypes: [{ taskTypeId: undefined, taskTypePath: undefined, quantity: 1, receiverId: undefined, selectedDeptId: undefined }] as TaskTypeItem[], // 任务类型数组
taskSubType: '', // 动态加载,初始为空
brandId: undefined,
platformId: undefined,
categoryId: undefined,
brandId: undefined as number | undefined,
platformId: undefined as number | undefined,
categoryId: undefined as number | undefined,
spuInfo: '',
attachmentUrl: '',
previewImage: '', // 预览图URL
@ -679,7 +679,18 @@ const formData = reactive({
releaseType: 'default',
productBarcodes: [] as string[], // 商品条码列表(已验证库存)
// receiverId: undefined, // 已移除,改用子任务指定
isUrgent: false
isUrgent: false,
// 一级需求任务编辑相关
isPrimaryTaskEdit: false, // 是否是一级需求任务明细编辑模式
primaryPublisherId: undefined as number | undefined,
primaryPublisherDeptId: undefined as number | undefined,
description: '', // 任务描述
score: undefined as number | undefined, // 积分
taskTypeId: undefined as number | undefined, // 任务类型ID
taskTypeIds: [] as number[], // 任务类型ID数组
demandTypeId: undefined as number | undefined, // 需求类型ID
deadline: undefined as string | undefined, // 截止时间
timeLimit: undefined as number | undefined // 时效要求
})
// 新条码输入框
@ -2129,6 +2140,57 @@ const handleGlobalPaste = (e: ClipboardEvent) => {
}
}
// 加载一级需求任务进行明细编辑
const loadPrimaryTaskForEdit = async () => {
try {
const editDataStr = sessionStorage.getItem('editPrimaryTaskData')
if (!editDataStr) {
message.error('未找到任务数据')
router.push('/tasks')
return
}
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
// 清除 sessionStorage
sessionStorage.removeItem('editPrimaryTaskData')
message.info('请完善任务明细后提交')
} catch (error) {
console.error('加载一级需求任务失败:', error)
message.error('加载任务数据失败')
router.push('/tasks')
}
}
// 组件挂载
onMounted(async () => {
// 添加全局粘贴事件监听
@ -2153,12 +2215,16 @@ onMounted(async () => {
])
// 检查是否是编辑模式
// 支持两种方式:
// 支持三种方式:
// 1. editId 参数(驳回任务重新编辑)
// 2. taskId + mode=edit 参数(草稿箱继续编辑)
// 3. editPrimaryTask 参数(一级需求任务完善明细)
const editId = route.query.editId || (route.query.mode === 'edit' ? route.query.taskId : null)
if (editId) {
await loadTaskForEdit(Number(editId))
} else if (route.query.editPrimaryTask === 'true') {
// 一级需求任务完善明细
await loadPrimaryTaskForEdit()
}
// 监听配置更新事件

View File

@ -535,7 +535,12 @@
</template>
<template v-else>
<a-button size="small" @click="handleViewTaskDetail(task)">查看详情</a-button>
<a-button v-if="canApproveTask(task)" type="primary" size="small" @click="handleApproveTask(task)">
<!-- 待完善明细状态:显示重新编辑按钮 -->
<a-button v-if="canEditDetailTask(task)" type="primary" size="small" @click="handleEditDetailTask(task)">
<Icon name="edit" size="sm" style="margin-right: 4px;" />
重新编辑
</a-button>
<a-button v-else-if="canApproveTask(task)" type="primary" size="small" @click="handleApproveTask(task)">
通过审核
</a-button>
<a-button v-if="canRejectTask(task)" danger size="small" @click="handleRejectTask(task)">
@ -5029,6 +5034,54 @@ const canRejectTask = (task: Task) => {
return canApproveTask(task)
}
// 判断是否可以编辑完善任务明细(一级需求部门任务)
const canEditDetailTask = (task: Task) => {
const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}')
const currentUserId = userInfo.id
// 只有待完善明细状态的任务,且当前用户是指定的完善人
if (task.approvalStatus === 'pending_detail_completion') {
return task.currentApproverId === currentUserId || task.detailCompleterId === currentUserId
}
return false
}
// 处理编辑完善任务明细(跳转到发布任务页面)
const handleEditDetailTask = (task: Task) => {
// 将任务信息存储到 sessionStorage,供发布任务页面使用
// 使用 any 类型断言来访问可能不在类型定义中但实际存在的属性
const taskData = task as any
const editTaskData = {
taskId: task.id,
isPrimaryTaskEdit: true, // 标记为一级需求任务的明细编辑
brandId: task.brandId,
brandName: task.brandName,
platformId: task.platformId,
platformName: task.platformName,
categoryId: task.categoryId,
categoryName: task.categoryName,
title: task.title,
description: taskData.description || '',
score: task.score,
taskTypeId: task.taskTypeId,
taskTypeIds: taskData.taskTypeIds || [],
demandTypeId: taskData.demandTypeId,
spuInfo: task.spuInfo,
deadline: task.deadline,
timeLimit: taskData.timeLimit,
// 一级需求部门信息
primaryPublisherId: task.primaryPublisherId,
primaryPublisherDeptId: task.primaryPublisherDeptId,
isPrimaryTask: task.isPrimaryTask
}
sessionStorage.setItem('editPrimaryTaskData', JSON.stringify(editTaskData))
// 跳转到发布任务页面
router.push('/create-task?editPrimaryTask=true')
}
// 更新进度(支持普通任务和子任务)
const handleUpdateProgress = (task: TaskOrSubTask) => {
let newProgress = task.progress || 0