Ver código fonte

feat: show success feedback after saving template edits

ChenYu 3 meses atrás
pai
commit
5114ac3d4c

+ 3 - 0
frontend/src/i18n/locales/ja/translation.json

@@ -487,6 +487,9 @@
     "errors": {
       "saveFailed": "保存に失敗しました"
     },
+    "success": {
+      "saveSucceeded": "保存しました"
+    },
     "submitTitle": "テンプレート情報を保存",
     "submitLead": "保存後はテンプレート詳細へ戻り、利用状況や結果を続けて確認できます。",
     "statusOptions": { "DRAFT": "下書き", "PUBLIC": "公開中" },

+ 3 - 0
frontend/src/i18n/locales/zh/translation.json

@@ -487,6 +487,9 @@
     "errors": {
       "saveFailed": "保存失败"
     },
+    "success": {
+      "saveSucceeded": "保存成功"
+    },
     "submitTitle": "保存模板信息",
     "submitLead": "保存后返回模板详情页继续查看模板效果和使用结果。",
     "statusOptions": { "DRAFT": "草稿", "PUBLIC": "公开中" },

+ 12 - 0
frontend/src/pages/dashboard/templates/TemplateEditPage.tsx

@@ -38,6 +38,9 @@ const FALLBACK_PAGE_COPY = {
   errors: {
     saveFailed: '保存失败',
   },
+  success: {
+    saveSucceeded: '保存成功',
+  },
   submitTitle: '保存模板信息',
   submitLead: '保存后可继续查看模板详情与使用结果。',
   statusOptions: {
@@ -76,6 +79,7 @@ export function TemplateEditPage() {
   const [description, setDescription] = useState('')
   const [saving, setSaving] = useState(false)
   const [error, setError] = useState('')
+  const [successMessage, setSuccessMessage] = useState('')
 
   useEffect(() => {
     let cancelled = false
@@ -124,6 +128,7 @@ export function TemplateEditPage() {
 
     setSaving(true)
     setError('')
+    setSuccessMessage('')
 
     try {
       const updated = await updateTemplateBasicInfo(params.templateId, {
@@ -143,7 +148,9 @@ export function TemplateEditPage() {
       setCategory(updated.category)
       setTags(toTagInput(updated.tags))
       setDescription(updated.description)
+      setSuccessMessage(pageCopy.success?.saveSucceeded ?? FALLBACK_PAGE_COPY.success.saveSucceeded)
     } catch (err) {
+      setSuccessMessage('')
       setError(err instanceof Error ? err.message : pageCopy.errors.saveFailed)
     } finally {
       setSaving(false)
@@ -225,6 +232,11 @@ export function TemplateEditPage() {
 
       <section className="pt-0">
         <div className="container">
+          {successMessage ? (
+            <p className="fs-14 text-green mb-3" role="status" aria-live="polite">
+              {successMessage}
+            </p>
+          ) : null}
           {error ? (
             <p className="fs-14 text-red mb-3" role="alert">
               {error}

+ 5 - 0
frontend/src/pages/dashboard/templates/__tests__/TemplateEditPage.test.tsx

@@ -60,6 +60,9 @@ vi.mock('../../../../shared/pageContext', () => ({
         errors: {
           saveFailed: '保存失败',
         },
+        success: {
+          saveSucceeded: '保存成功',
+        },
         submitTitle: '保存模板信息',
         submitLead: '保存后返回详情页',
         statusOptions: {
@@ -154,6 +157,8 @@ describe('TemplateEditPage', () => {
         description: '更新后的说明',
       })
     })
+
+    expect(await screen.findByRole('status')).toHaveTextContent('保存成功')
   })
 
   it('falls back to the template list when no taskId is provided', async () => {