fix(web): close final workbench interaction gaps
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { Input, Modal, Select, Space, Switch, Typography } from '@arco-design/web-react'
|
||||
import { Alert, Input, Modal, Select, Space, Switch, Typography } from '@arco-design/web-react'
|
||||
import { useEffect, useMemo, useState } from 'react'
|
||||
import type { ProjectWorkspace, TaskItem } from './project-types'
|
||||
|
||||
@@ -29,13 +29,16 @@ export function ProjectTaskEditModal({
|
||||
task: TaskItem | null
|
||||
workspace: ProjectWorkspace
|
||||
onClose: () => void
|
||||
onSubmit: (update: ProjectTaskUpdate) => void
|
||||
onSubmit: (update: ProjectTaskUpdate) => Promise<void>
|
||||
}) {
|
||||
const tagOptions = useMemo(() => workspace.tags.filter((tag) => tag !== 'all' && tag !== '全部'), [workspace.tags])
|
||||
const [draft, setDraft] = useState<TaskDraft>({ title: '', summary: '', tag: '', completed: false })
|
||||
const [saving, setSaving] = useState(false)
|
||||
const [saveError, setSaveError] = useState('')
|
||||
|
||||
useEffect(() => {
|
||||
if (!task) return
|
||||
setSaveError('')
|
||||
setDraft({
|
||||
title: task.title,
|
||||
summary: task.summary,
|
||||
@@ -44,24 +47,39 @@ export function ProjectTaskEditModal({
|
||||
})
|
||||
}, [task])
|
||||
|
||||
async function saveTask() {
|
||||
if (!task || saving) return
|
||||
setSaving(true)
|
||||
setSaveError('')
|
||||
try {
|
||||
await onSubmit({
|
||||
taskId: task.id,
|
||||
title: draft.title.trim() || task.title,
|
||||
summary: draft.summary.trim(),
|
||||
tag: draft.tag.trim(),
|
||||
completed: draft.completed,
|
||||
})
|
||||
onClose()
|
||||
} catch (error) {
|
||||
setSaveError(error instanceof Error ? error.message : '任务保存失败,请稍后重试')
|
||||
} finally {
|
||||
setSaving(false)
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<Modal
|
||||
className="action-modal"
|
||||
title="编辑计划"
|
||||
visible={Boolean(task)}
|
||||
onCancel={onClose}
|
||||
onOk={() => {
|
||||
if (!task) return
|
||||
onSubmit({
|
||||
taskId: task.id,
|
||||
title: draft.title.trim() || task.title,
|
||||
summary: draft.summary.trim(),
|
||||
tag: draft.tag.trim(),
|
||||
completed: draft.completed,
|
||||
})
|
||||
}}
|
||||
confirmLoading={saving}
|
||||
maskClosable={!saving}
|
||||
cancelButtonProps={{ disabled: saving }}
|
||||
onCancel={() => { if (!saving) onClose() }}
|
||||
onOk={() => void saveTask()}
|
||||
>
|
||||
<Space direction="vertical" size={12} className="action-form">
|
||||
{saveError && <Alert type="error" content={saveError} />}
|
||||
<label>
|
||||
<Text>标题</Text>
|
||||
<Input value={draft.title} onChange={(title) => setDraft((value) => ({ ...value, title }))} />
|
||||
|
||||
Reference in New Issue
Block a user