fix: prevent accidental subtask completion
This commit is contained in:
+10
-2
@@ -654,14 +654,22 @@ async function loadTodayView() {
|
||||
await loadAll()
|
||||
}
|
||||
function applyTaskUpdate(task: Task, updated: Task, updateSelected = true) {
|
||||
const updateNestedSubtasks = (items: Task[]) => items.map((item) => ({
|
||||
...item,
|
||||
subtasks: item.subtasks?.map((subtask) => subtask.id === task.id ? { ...subtask, ...updated } : subtask),
|
||||
}))
|
||||
const index = tasks.value.findIndex((item) => item.id === task.id)
|
||||
if (index >= 0) tasks.value[index] = { ...tasks.value[index], ...updated }
|
||||
else tasks.value = updateNestedSubtasks(tasks.value)
|
||||
const overdueIndex = overdueTasks.value.findIndex((item) => item.id === task.id)
|
||||
if (overdueIndex >= 0) {
|
||||
if (updated.completed && !completionExitingTaskIds.value.has(task.id)) overdueTasks.value.splice(overdueIndex, 1)
|
||||
else overdueTasks.value[overdueIndex] = { ...overdueTasks.value[overdueIndex], ...updated }
|
||||
}
|
||||
} else overdueTasks.value = updateNestedSubtasks(overdueTasks.value)
|
||||
if (updateSelected && selectedTask.value?.id === task.id) selectedTask.value = { ...selectedTask.value, ...updated }
|
||||
else if (updateSelected && selectedTask.value?.subtasks) {
|
||||
selectedTask.value.subtasks = selectedTask.value.subtasks.map((subtask) => subtask.id === task.id ? { ...subtask, ...updated } : subtask)
|
||||
}
|
||||
}
|
||||
async function patchTask(task: Task, patch: Partial<Task>, updateSelected = true) {
|
||||
const updated = await api(`/tasks/${task.id}`, { method: 'PATCH', body: JSON.stringify({ ...patch, version: task.version }) }) as Task
|
||||
@@ -1528,7 +1536,7 @@ onUnmounted(() => {
|
||||
</div>
|
||||
<div v-else class="markdown-preview" :class="{'markdown-preview-empty':!selectedTask.description.trim()}" v-html="selectedTask.description.trim() ? renderMarkdown(selectedTask.description) : '<p>暂无备注,切回编辑开始书写。</p>'"/>
|
||||
</div>
|
||||
<div class="subtasks"><div class="field-label"><span>子任务</span><button class="link" @click="addSubtask"><Plus/>添加</button></div><button v-for="subtask in selectedTaskSubtasks" :key="subtask.id" class="subtask-detail" @click="toggle(subtask)"><span class="check"><Check v-if="subtask.completed"/></span><span :class="{strike:subtask.completed}">{{subtask.title}}</span></button><span v-if="!selectedTaskSubtasks.length" class="hint">把这件事拆成更小的步骤</span></div>
|
||||
<div class="subtasks"><div class="field-label"><span>子任务</span><button class="link" @click="addSubtask"><Plus/>添加</button></div><div v-for="subtask in selectedTaskSubtasks" :key="subtask.id" class="subtask-detail"><button class="check subtask-check" type="button" :aria-label="subtask.completed ? `重新打开${subtask.title}` : `完成${subtask.title}`" :aria-pressed="subtask.completed" @click="toggle(subtask)"><Check v-if="subtask.completed"/></button><span :class="{strike:subtask.completed}">{{subtask.title}}</span></div><span v-if="!selectedTaskSubtasks.length" class="hint">把这件事拆成更小的步骤</span></div>
|
||||
<details class="more-settings" :open="moreSettingsOpen" @toggle="moreSettingsOpen=($event.target as HTMLDetailsElement).open"><summary>更多设置</summary><div class="more-settings-body">
|
||||
<label>优先级<select v-model.number="selectedTask.priority"><option :value="0">无</option><option :value="1">低</option><option :value="2">中</option><option :value="3">高</option></select></label>
|
||||
</div></details>
|
||||
|
||||
Reference in New Issue
Block a user