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 @@