Skip to content

feat: 新增创建表单草稿缓存能力(误关恢复) - #552

Open
Echo-Note wants to merge 2 commits into
fastapiadmin:masterfrom
Echo-Note:feat/form-draft-cache
Open

Echo-Note wants to merge 2 commits into
fastapiadmin:masterfrom
Echo-Note:feat/form-draft-cache

Conversation

@Echo-Note

@Echo-Note Echo-Note commented Oct 29, 2026 •

Copy link
Copy Markdown

背景

useCrudForm 目前关闭新增表单对话框即重置,用户填了一半误关窗口后重开需重新输入。本 PR 新增「创建表单草稿缓存」能力:新增表单误关后本地草稿自动恢复,编辑表单不缓存(由详情接口回填)。

改动内容

  • 新增 frontend/web/src/utils/form-draft.ts:localStorage 读写封装
    • loadFormDraft / saveFormDraft / clearFormDraft
  • 新增 frontend/web/src/hooks/core/useFormDraft.ts:面向「自管对话框」手写表单的组合式函数
    • watch(dialogVisible) 自动在关闭时保存草稿(仅新建态、且非提交成功)
    • openCreate(preset?) 打开时自动「重置 → 恢复草稿 → 应用预设」,预设优先级最高
    • done() 提交成功后清除草稿
    • 可选 mode(create/update),编辑态不参与草稿读写
  • hooks/core/useCrudForm.ts:新增可选 cacheKey 参数,提供后自动启用新增表单草稿缓存
    • 打开 create 时恢复草稿
    • 关闭 create 时保存草稿
    • 提交成功清草稿
    • 页面卸载兜底保存(直接切换路由等场景)
    • 编辑/详情表单不缓存

使用方式

useCrudForm 页面:提供 cacheKey 即启用

const { ... } = useCrudForm({
  // ...
  cacheKey: "my-form",
});

手写表单页面:用 useFormDraft 自动绑定对话框生命周期

const draft = useFormDraft({
  key: "my-form",
  dialogVisible,          // 对话框 v-model
  form,                   // 表单数据 ref
  blank: () => ({ ... }), // 新建态初始值工厂
  mode,                   // 可选:create/update,编辑态不缓存
});

function openCreateDialog(preset?) {
  draft.openCreate(preset); // 打开:重置 + 恢复草稿 + 应用预设
}
// 关闭对话框:watch 自动保存草稿
// 提交成功:draft.done()

验证

  • 类型检查通过
  • 草稿仅在创建态读写,提交成功/编辑态不残留草稿

新增 form-draft 工具与 useCrudForm cacheKey 参数,实现「新建/新增」表单误关后本地草稿自动恢复;编辑态表单由详情接口回填、不缓存。
移除 createFormDraft,新增 useFormDraft(watch 自动保存 + openCreate 恢复/预填),调用方只需提交成功后 done。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants