diff --git a/pages/task-list/index.vue b/pages/task-list/index.vue index ea83f30..6aa6431 100644 --- a/pages/task-list/index.vue +++ b/pages/task-list/index.vue @@ -39,7 +39,7 @@ 🕐 - 剩余{{ task.remainingDays }}天 + {{ task.remainingDays < 0 ? `已逾期${Math.abs(task.remainingDays)}天` : `剩余${task.remainingDays}天` }} @@ -223,18 +223,83 @@ const getOwnerNames = (memberList) => { return memberList.map(member => member.userName || member.name || '').filter(name => name).join('、'); }; +// 根据过期时间判断任务状态 +const determineTaskStatus = (item, expireTime) => { + // 如果任务已完成(状态为4),直接返回 completed + const taskStatusFromBackend = item.status; + if (taskStatusFromBackend === 4 || taskStatusFromBackend === 'completed') { + return 'completed'; + } + + // 如果没有过期时间,使用过滤状态或默认 pending + if (!expireTime) { + return statusFilter.value || 'pending'; + } + + const expireDate = new Date(expireTime); + const now = new Date(); + + // 设置时间到当天0点,便于日期比较 + now.setHours(0, 0, 0, 0); + expireDate.setHours(23, 59, 59, 999); + + // 如果已过期,标记为逾期 + if (expireDate.getTime() < now.getTime()) { + return 'overdue'; + } + + // 计算距离过期的天数 + const diffTime = expireDate.getTime() - now.getTime(); + const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); + + // 如果3天内到期,标记为即将逾期 + if (diffDays <= 3 && diffDays > 0) { + return 'imminent'; + } + + // 否则返回待完成状态 + return 'pending'; +}; + // 将接口数据转换为页面需要的格式 const transformTaskData = (item) => { const expireTime = item.expireTime || item.expire_time || ''; - const remainingDays = calculateRemainingDays(expireTime); - // 直接使用后端返回的状态,如果后端没有返回状态且有状态过滤,使用过滤的状态 - const taskStatus = statusFilter.value || 'pending'; + // 最高优先级:判断任务状态 - status===4 或 status==='4' 直接返回completed,不做任何其他校验 + // 支持多种字段名和数据类型:status、taskStatus、statusId 等 + const taskStatus = item.status !== undefined ? item.status : + item.taskStatus !== undefined ? item.taskStatus : + item.statusId !== undefined ? item.statusId : null; + + // 检查是否已完成(支持数字4、字符串'4'、字符串'completed'等多种格式) + const isCompleted = taskStatus === 4 || + taskStatus === '4' || + taskStatus === 'completed' || + String(taskStatus) === '4'; + + // 如果已完成,直接返回完成状态,不做过期校验,不计算剩余天数 + if (isCompleted) { + return { + id: item.id || '', + status: 'completed', // 固定为completed,确保显示灰色样式 + createName: item.createName || '', + date: formatDate(expireTime) || '', + project: item.projectName || item.project_name || '', + description: item.description || item.task_name || '', + owner: getOwnerNames(item.memberList || item.member_list || []), + releaseTime: formatDate(item.createTime || item.create_time) || '', + remainingDays: null // 已完成任务不计算剩余天数 + }; + } + + // 未完成的任务才计算剩余天数并进行过期校验 + const remainingDays = calculateRemainingDays(expireTime); + const finalStatus = determineTaskStatus(item, expireTime); return { id: item.id || '', - status: taskStatus, - createName:item.createName, + status: finalStatus, + createName: item.createName || '', date: formatDate(expireTime) || '', project: item.projectName || item.project_name || '', description: item.description || item.task_name || '',