feat: 任务卡片日期信息添加鼠标悬停提示

- 为发布时间、截止时间、完成时间等添加title属性
- 鼠标悬停时显示完整的日期时间(年月日 时分秒)
- 修复日期显示不完整时无法查看完整信息的问题
This commit is contained in:
Your Name 2026-01-28 17:16:45 +08:00
parent a8ecc8a11f
commit 5a1a5fba84
2 changed files with 28 additions and 16 deletions

View File

@ -133,19 +133,19 @@
<!-- 时间信息 -->
<div class="task-footer">
<div class="footer-item">
<div class="footer-item" :title="formatFullDateTime(task.createTime)">
<Icon name="calendar" size="sm" color="#31f08b" />
<span style="color: #ffffff;">发布: {{ formatDate(task.createTime) }}</span>
</div>
<div v-if="task.deadline && task.status === 'in_progress'" class="footer-item">
<div v-if="task.deadline && task.status === 'in_progress'" class="footer-item" :title="formatFullDateTime(task.deadline)">
<Icon name="clock" size="sm" color="#31f08b" />
<span style="color: #ffffff;">截止: {{ formatDate(task.deadline) }}</span>
</div>
<div v-if="task.completeTime && task.status === 'completed'" class="footer-item">
<div v-if="task.completeTime && task.status === 'completed'" class="footer-item" :title="formatFullDateTime(task.completeTime)">
<Icon name="check" size="sm" color="#31f08b" />
<span style="color: #ffffff;">完成: {{ formatDate(task.completeTime) }}</span>
</div>
<div v-if="task.submitTime && task.status === 'review'" class="footer-item">
<div v-if="task.submitTime && task.status === 'review'" class="footer-item" :title="formatFullDateTime(task.submitTime)">
<Icon name="upload" size="sm" color="#31f08b" />
<span style="color: #ffffff;">提交: {{ formatDate(task.submitTime) }}</span>
</div>
@ -288,12 +288,18 @@ const getTaskTypeName = (taskTypeId: number) => {
return type?.name || '--'
}
// 格式化日期
// 格式化日期(简短显示)
const formatDate = (date?: string) => {
if (!date) return '--'
return dayjs(date).format('YYYY-MM-DD HH:mm')
}
// 格式化完整日期时间(用于鼠标悬停提示)
const formatFullDateTime = (date?: string) => {
if (!date) return ''
return dayjs(date).format('YYYY年MM月DD日 HH:mm:ss')
}
// 复制任务编号
const handleCopyTaskNo = async (taskNo: string) => {
try {

View File

@ -260,7 +260,7 @@
</span>
<span>时效要求: {{ formatEstimatedTime(task.estimatedHours) }}</span>
</div>
<div class="detail-item">
<div class="detail-item" :title="formatFullDateTime(task.createTime)">
<span class="icon">
<Icon name="calendar" size="sm" color="#31f08b" />
</span>
@ -872,16 +872,16 @@
title="复制任务编号"
/>
</div>
<div class="footer-item">
<div class="footer-item" :title="formatFullDateTime(task.createTime)">
<Icon name="calendar" size="sm" color="#31f08b" />
<span style="color: #ffffff;">发布: {{ formatTime(task.createTime) }}</span>
</div>
<div class="footer-item" v-if="task.estimatedHours">
<div class="footer-item" v-if="task.estimatedHours" :title="'时效要求: ' + formatEstimatedTime(task.estimatedHours)">
<Icon name="clock" size="sm" color="#31f08b" />
<span style="color: #ffffff;">时效要求: {{ formatEstimatedTime(task.estimatedHours) }}</span>
</div>
<!-- 驳回时间 -->
<div class="footer-item" v-if="task.approvalStatus?.includes('rejected') && task.updateTime">
<div class="footer-item" v-if="task.approvalStatus?.includes('rejected') && task.updateTime" :title="formatFullDateTime(task.updateTime)">
<Icon name="x-circle" size="sm" color="#f5222d" />
<span style="color: #f5222d;">驳回: {{ formatTime(task.updateTime) }}</span>
</div>
@ -1215,11 +1215,11 @@
title="复制任务编号"
/>
</div>
<div class="footer-item">
<div class="footer-item" :title="formatFullDateTime(task.createTime)">
<Icon name="calendar" size="sm" color="#31f08b" />
<span style="color: #ffffff;">发布: {{ formatDate(task.createTime) }}</span>
</div>
<div v-if="task.completeTime && task.status === 'completed'" class="footer-item">
<div v-if="task.completeTime && task.status === 'completed'" class="footer-item" :title="formatFullDateTime(task.completeTime)">
<Icon name="check" size="sm" color="#31f08b" />
<span style="color: #ffffff;">完成: {{ formatDate(task.completeTime) }}</span>
</div>
@ -1551,16 +1551,16 @@
title="复制任务编号"
/>
</div>
<div class="footer-item">
<div class="footer-item" :title="formatFullDateTime(task.createTime)">
<Icon name="calendar" size="sm" color="#31f08b" />
<span style="color: #ffffff;">发布: {{ formatTime(task.createTime) }}</span>
</div>
<div class="footer-item" v-if="task.estimatedHours">
<div class="footer-item" v-if="task.estimatedHours" :title="'时效要求: ' + formatEstimatedTime(task.estimatedHours)">
<Icon name="clock" size="sm" color="#31f08b" />
<span style="color: #ffffff;">时效要求: {{ formatEstimatedTime(task.estimatedHours) }}</span>
</div>
<!-- 驳回时间 -->
<div class="footer-item" v-if="task.approvalStatus?.includes('rejected') && task.updateTime">
<div class="footer-item" v-if="task.approvalStatus?.includes('rejected') && task.updateTime" :title="formatFullDateTime(task.updateTime)">
<Icon name="x-circle" size="sm" color="#f5222d" />
<span style="color: #f5222d;">驳回: {{ formatTime(task.updateTime) }}</span>
</div>
@ -1778,11 +1778,11 @@
title="复制任务编号"
/>
</div>
<div class="footer-item">
<div class="footer-item" :title="formatFullDateTime(task.createTime)">
<Icon name="calendar" size="sm" color="#31f08b" />
<span style="color: #ffffff;">创建: {{ formatTime(task.createTime) }}</span>
</div>
<div class="footer-item" v-if="task.updateTime && task.updateTime !== task.createTime">
<div class="footer-item" v-if="task.updateTime && task.updateTime !== task.createTime" :title="formatFullDateTime(task.updateTime)">
<Icon name="edit" size="sm" color="#faad14" />
<span style="color: #faad14;">最后编辑: {{ formatTime(task.updateTime) }}</span>
</div>
@ -3043,6 +3043,12 @@ const formatDate = (date: string | undefined) => {
return dayjs(date).format('YYYY-MM-DD')
}
// 格式化完整日期时间(用于鼠标悬停提示)
const formatFullDateTime = (date: string | undefined) => {
if (!date) return ''
return dayjs(date).format('YYYY年MM月DD日 HH:mm:ss')
}
// 格式化积分(保留两位小数,修复浮点数精度问题)
const formatScore = (score: number | null | undefined): string => {
if (score === null || score === undefined) return '0.00'