v1.2.1 - bugfix: 在计时过的任务,停止计时后,添加前置或后置任务,新任务自动开启计时器问题。In tasks where timing is involved, after stopping the timer, adding predecessor or successor tasks leads to the new task automatically starting the timer.
This commit is contained in:
@@ -249,7 +249,7 @@ const toggleTaskList = () => {
|
||||
window.dispatchEvent(
|
||||
new CustomEvent('timeline-container-resized', {
|
||||
detail: { source: 'manual-task-list-toggle' },
|
||||
}),
|
||||
})
|
||||
)
|
||||
})
|
||||
}, 400)
|
||||
@@ -265,7 +265,7 @@ const handleToggleTaskList = (event: CustomEvent) => {
|
||||
window.dispatchEvent(
|
||||
new CustomEvent('timeline-container-resized', {
|
||||
detail: { source: 'task-list-toggle' },
|
||||
}),
|
||||
})
|
||||
)
|
||||
})
|
||||
}
|
||||
@@ -298,7 +298,7 @@ const handleTaskCollapseChange = (task: Task) => {
|
||||
const updateTaskCollapsedState = (
|
||||
tasks: Task[],
|
||||
targetId: number,
|
||||
collapsed: boolean,
|
||||
collapsed: boolean
|
||||
): boolean => {
|
||||
for (const t of tasks) {
|
||||
if (t.id === targetId) {
|
||||
@@ -369,7 +369,7 @@ watch(
|
||||
notifyTaskListUpdated()
|
||||
})
|
||||
},
|
||||
{ deep: true, immediate: true },
|
||||
{ deep: true, immediate: true }
|
||||
)
|
||||
|
||||
onMounted(() => {
|
||||
@@ -407,7 +407,7 @@ onUnmounted(() => {
|
||||
window.removeEventListener('task-added', handleTaskAdd as EventListener)
|
||||
window.removeEventListener(
|
||||
'milestone-icon-changed',
|
||||
handleMilestoneIconChangeEvent as EventListener,
|
||||
handleMilestoneIconChangeEvent as EventListener
|
||||
)
|
||||
window.removeEventListener('milestone-deleted', handleMilestoneDeleted as EventListener)
|
||||
window.removeEventListener('milestone-data-changed', handleMilestoneDataChanged as EventListener)
|
||||
@@ -1183,7 +1183,7 @@ watch(
|
||||
val => {
|
||||
if (val) setCustomMessages(locale.value, val)
|
||||
},
|
||||
{ deep: true },
|
||||
{ deep: true }
|
||||
)
|
||||
|
||||
// 右键菜单状态管理
|
||||
@@ -1329,6 +1329,10 @@ function handleAddPredecessor(targetTask: Task) {
|
||||
description: '',
|
||||
parentId: targetTask.parentId,
|
||||
children: [],
|
||||
isTimerRunning: false,
|
||||
timerStartTime: undefined,
|
||||
timerEndTime: undefined,
|
||||
timerElapsedTime: 0,
|
||||
}
|
||||
taskDrawerTask.value = newTask
|
||||
taskDrawerEditMode.value = false
|
||||
@@ -1355,6 +1359,10 @@ function handleAddSuccessor(targetTask: Task) {
|
||||
description: '',
|
||||
parentId: targetTask.parentId,
|
||||
children: [],
|
||||
isTimerRunning: false,
|
||||
timerStartTime: undefined,
|
||||
timerEndTime: undefined,
|
||||
timerElapsedTime: 0,
|
||||
}
|
||||
taskDrawerTask.value = newTask
|
||||
taskDrawerEditMode.value = false
|
||||
|
||||
@@ -68,7 +68,7 @@ watch(
|
||||
() => [props.task?.isTimerRunning, props.task?.timerStartTime, props.task?.timerElapsedTime],
|
||||
() => {
|
||||
updateTimer()
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
// 计时器本地状态,保证点击后UI立即切换
|
||||
@@ -84,7 +84,7 @@ watch(
|
||||
timerInterval.value = null
|
||||
}
|
||||
},
|
||||
{ immediate: true },
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
// 修正计时器每秒递增逻辑,保证计时器正常跳动
|
||||
@@ -102,7 +102,7 @@ watch(
|
||||
updateTimer()
|
||||
}
|
||||
},
|
||||
{ immediate: true },
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
onUnmounted(() => {
|
||||
@@ -138,6 +138,10 @@ const formData = reactive<Task>({
|
||||
progress: 0,
|
||||
description: '',
|
||||
parentId: undefined, // 上级任务ID
|
||||
isTimerRunning: false, // 是否正在计时
|
||||
timerStartTime: undefined, // 计时器开始时间
|
||||
timerEndTime: undefined, // 计时器结束时间
|
||||
timerElapsedTime: 0, // 计时器已用时间
|
||||
})
|
||||
|
||||
// 任务列表数据
|
||||
@@ -149,7 +153,7 @@ const availableParentTasks = computed(() => {
|
||||
.filter(
|
||||
task =>
|
||||
task.id !== props.task?.id && // 排除当前任务自己
|
||||
(task.type === 'story' || task.type === 'task'), // 只显示story和task类型
|
||||
(task.type === 'story' || task.type === 'task') // 只显示story和task类型
|
||||
)
|
||||
.map(task => ({
|
||||
...task,
|
||||
@@ -279,7 +283,7 @@ watch(
|
||||
// 抽屉显示时重新请求任务数据,确保前置任务列表是最新的
|
||||
window.dispatchEvent(new CustomEvent('request-task-list'))
|
||||
}
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
// 监听 isVisible 变化,同步到父组件
|
||||
@@ -296,7 +300,7 @@ watch(
|
||||
formData.parentId = newTask.parentId ?? undefined
|
||||
}
|
||||
},
|
||||
{ immediate: true },
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
// 重置表单
|
||||
@@ -313,6 +317,10 @@ const resetForm = () => {
|
||||
progress: 0,
|
||||
description: '',
|
||||
parentId: undefined,
|
||||
isTimerRunning: false,
|
||||
timerStartTime: undefined,
|
||||
timerEndTime: undefined,
|
||||
timerElapsedTime: 0,
|
||||
})
|
||||
|
||||
// 清除错误信息
|
||||
@@ -477,41 +485,7 @@ watch(
|
||||
newValue => {
|
||||
progressDisplayValue.value = (newValue || 0).toString()
|
||||
},
|
||||
{ immediate: true },
|
||||
)
|
||||
|
||||
// 计时器本地状态,保证点击后UI立即切换
|
||||
// !!! 只保留一处 localTimerRunning 定义,彻底移除重复声明 !!!
|
||||
|
||||
// 只要 props.task 变化或全局事件变化,立即同步本地状态
|
||||
watch(
|
||||
() => props.task?.isTimerRunning,
|
||||
val => {
|
||||
localTimerRunning.value = !!val
|
||||
if (!val && timerInterval.value) {
|
||||
clearInterval(timerInterval.value)
|
||||
timerInterval.value = null
|
||||
}
|
||||
},
|
||||
{ immediate: true },
|
||||
)
|
||||
|
||||
// 修正计时器每秒递增逻辑,保证计时器正常跳动
|
||||
watch(
|
||||
[localTimerRunning, timerStartTime, timerElapsedTime],
|
||||
() => {
|
||||
if (timerInterval.value) {
|
||||
clearInterval(timerInterval.value)
|
||||
timerInterval.value = null
|
||||
}
|
||||
if (localTimerRunning.value && timerStartTime.value) {
|
||||
updateTimer()
|
||||
timerInterval.value = window.setInterval(updateTimer, 1000)
|
||||
} else {
|
||||
updateTimer()
|
||||
}
|
||||
},
|
||||
{ immediate: true },
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
// 修正计时器首次启动不跳动问题:每次打开抽屉时重置 timerElapsed,且 timerStartTime 为空时立即赋值
|
||||
@@ -529,7 +503,7 @@ watch(
|
||||
}
|
||||
}
|
||||
},
|
||||
{ immediate: true },
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
const handleStartTimer = (desc?: string) => {
|
||||
|
||||
Reference in New Issue
Block a user