fix(web): 修复图片上传、自动保存竞态、登录竞态并统一失效公共缓存

FormData 不强设 Content-Type(P1-2),补 api 客户端回归测试; 自动保存成功仅失效列表与公共键,防详情 refetch 回滚输入(P1-4); login/logout 以请求序号丢弃迟到 /api/me 响应,401 统一回调跳登录(P2-15); 首页不硬编码 page_size,写操作后统一 invalidatePublic,TagPage 补 error 分支(P2-15)。
This commit is contained in:
2026-09-08 17:32:57 +08:00
parent 3105b0415c
commit b94e9b1721
10 changed files with 136 additions and 10 deletions
+5 -1
View File
@@ -4,6 +4,7 @@ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
import { Bold, Italic, Link2, Code, Table, Eye, EyeOff } from 'lucide-react'
import { api, ApiError } from '../lib/api'
import type { NoteItem } from '../lib/api'
import { invalidatePublic } from '../lib/invalidate'
import MarkdownViewer from '../components/MarkdownViewer'
import { slugPreview } from '../lib/utils'
@@ -110,7 +111,10 @@ export default function AdminEdit() {
setSlugFieldError(null)
setErrorMsg(null)
dirtyRef.current = false
void qc.invalidateQueries({ queryKey: ['admin'] })
// 仅失效列表与公共缓存;不失效当前编辑详情(['admin','note',id]),
// 防 refetch 回滚保存期间继续输入的内容并抑制下一轮自动保存(评审 round2 P1-4)
void qc.invalidateQueries({ queryKey: ['admin', 'notes'] })
invalidatePublic(qc)
if (isNew) {
navigate(`/admin/notes/${saved.id}/edit`, { replace: true })
}