diff --git a/src/lib/utils/slugify.ts b/src/lib/utils/slugify.ts index d171542..2817444 100644 --- a/src/lib/utils/slugify.ts +++ b/src/lib/utils/slugify.ts @@ -31,6 +31,7 @@ export function createSlugAutoHandler(opts: { setSlug: (val: string) => void; getIsUserModified: () => boolean; setIsUserModified: (val: boolean) => void; + setIsGenerating?: (val: boolean) => void; delayMs?: number; }) { const delay = opts.delayMs ?? 400; @@ -52,7 +53,9 @@ export function createSlugAutoHandler(opts: { } timer = setTimeout(async () => { + if (opts.setIsGenerating) opts.setIsGenerating(true); const generated = await fetchSlug(nameValue); + if (opts.setIsGenerating) opts.setIsGenerating(false); // 在异步返回后,再次确认用户期间没有手动修改 slug if (!opts.getIsUserModified() && generated) { opts.setSlug(generated); @@ -73,11 +76,13 @@ export function createSlugAutoHandler(opts: { }, /** - * 用户点击 🔄 重新生成按钮时强制生成 + * 用户点击 重新生成按钮时强制生成 */ async forceGenerate(nameValue: string) { if (!nameValue.trim()) return; + if (opts.setIsGenerating) opts.setIsGenerating(true); const generated = await fetchSlug(nameValue); + if (opts.setIsGenerating) opts.setIsGenerating(false); if (generated) { opts.setSlug(generated); // 标记为重置/由系统填充 diff --git a/src/routes/admin/categories/+page.svelte b/src/routes/admin/categories/+page.svelte index df38d8a..e5220ec 100644 --- a/src/routes/admin/categories/+page.svelte +++ b/src/routes/admin/categories/+page.svelte @@ -8,12 +8,14 @@ let name = $state(''); let slug = $state(''); let isSlugUserModified = $state(false); + let isGenerating = $state(false); const slugHandler = createSlugAutoHandler({ getSlug: () => slug, setSlug: (val) => (slug = val), getIsUserModified: () => isSlugUserModified, - setIsUserModified: (val) => (isSlugUserModified = val) + setIsUserModified: (val) => (isSlugUserModified = val), + setIsGenerating: (val) => (isGenerating = val) }); function handleNameInput() { @@ -60,10 +62,11 @@ ('edit'); let isSlugUserModified = $state(false); + let isGenerating = $state(false); const slugHandler = createSlugAutoHandler({ getSlug: () => slug, setSlug: (val) => (slug = val), getIsUserModified: () => isSlugUserModified, - setIsUserModified: (val) => (isSlugUserModified = val) + setIsUserModified: (val) => (isSlugUserModified = val), + setIsGenerating: (val) => (isGenerating = val) }); function handleTitleInput() { @@ -107,10 +109,11 @@ slug, setSlug: (val) => (slug = val), getIsUserModified: () => isSlugUserModified, - setIsUserModified: (val) => (isSlugUserModified = val) + setIsUserModified: (val) => (isSlugUserModified = val), + setIsGenerating: (val) => (isGenerating = val) }); function handleTitleInput() { @@ -517,11 +519,12 @@ slug, setSlug: (val) => (slug = val), getIsUserModified: () => isSlugUserModified, - setIsUserModified: (val) => (isSlugUserModified = val) + setIsUserModified: (val) => (isSlugUserModified = val), + setIsGenerating: (val) => (isGenerating = val) }); function handleNameInput() { @@ -54,10 +56,11 @@