From edf0982ce477b74261904ae4b4d3907c86e5b90a Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Sat, 28 Feb 2026 15:25:14 +0800 Subject: [PATCH 1/3] feat(skills): enhance candidate promotion buttons with loading and disabled states --- .../components/extension/SkillsSection.vue | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/dashboard/src/components/extension/SkillsSection.vue b/dashboard/src/components/extension/SkillsSection.vue index c26f37abe..e9d472bb0 100644 --- a/dashboard/src/components/extension/SkillsSection.vue +++ b/dashboard/src/components/extension/SkillsSection.vue @@ -188,10 +188,24 @@ {{ tm("skills.neoReject") }} - + Canary - + Stable `${candidateId}:${stage}`; + const isCandidatePromoteLoading = (candidateId, stage) => + !!candidatePromoteLoading[candidatePromoteLoadingKey(candidateId, stage)]; + const isCandidatePromoting = (candidateId) => + isCandidatePromoteLoading(candidateId, "canary") || isCandidatePromoteLoading(candidateId, "stable"); + const promoteCandidate = async (candidate, stage) => { + const candidateId = candidate?.id; + if (!candidateId) return; + const loadingKey = candidatePromoteLoadingKey(candidateId, stage); + if (candidatePromoteLoading[loadingKey]) return; + candidatePromoteLoading[loadingKey] = true; try { const res = await axios.post("/api/skills/neo/promote", { - candidate_id: candidate.id, + candidate_id: candidateId, stage, sync_to_local: true, }); @@ -650,6 +676,8 @@ export default { } } catch (_err) { showMessage(tm("skills.neoPromoteFailed"), "error"); + } finally { + candidatePromoteLoading[loadingKey] = false; } }; @@ -818,6 +846,8 @@ export default { deleteSkill, evaluateCandidate, promoteCandidate, + isCandidatePromoteLoading, + isCandidatePromoting, rollbackRelease, deactivateRelease, handleReleaseLifecycleAction, From 7c913093b01aeb5e146a03014192432407102470 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Sat, 28 Feb 2026 15:27:50 +0800 Subject: [PATCH 2/3] feat(i18n): add neoFilterHint for filtering candidates and release records --- dashboard/src/components/extension/SkillsSection.vue | 2 +- dashboard/src/i18n/locales/en-US/features/extension.json | 1 + dashboard/src/i18n/locales/zh-CN/features/extension.json | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/dashboard/src/components/extension/SkillsSection.vue b/dashboard/src/components/extension/SkillsSection.vue index e9d472bb0..d8ec137e0 100644 --- a/dashboard/src/components/extension/SkillsSection.vue +++ b/dashboard/src/components/extension/SkillsSection.vue @@ -113,7 +113,7 @@
Neo Skills
-
筛选候选与发布记录
+
{{ tm("skills.neoFilterHint") }}
{{ tm("skills.refresh") }} diff --git a/dashboard/src/i18n/locales/en-US/features/extension.json b/dashboard/src/i18n/locales/en-US/features/extension.json index 85ab70b8b..405c638e3 100644 --- a/dashboard/src/i18n/locales/en-US/features/extension.json +++ b/dashboard/src/i18n/locales/en-US/features/extension.json @@ -233,6 +233,7 @@ "neoSkillKey": "Filter by skill_key", "neoStatus": "Candidate Status", "neoStage": "Release Stage", + "neoFilterHint": "Filter candidates and release records", "neoAll": "All", "neoCandidates": "Neo Candidates", "neoReleases": "Neo Releases", diff --git a/dashboard/src/i18n/locales/zh-CN/features/extension.json b/dashboard/src/i18n/locales/zh-CN/features/extension.json index d2ab828f4..155dd6de9 100644 --- a/dashboard/src/i18n/locales/zh-CN/features/extension.json +++ b/dashboard/src/i18n/locales/zh-CN/features/extension.json @@ -233,6 +233,7 @@ "neoSkillKey": "skill_key 过滤", "neoStatus": "候选状态", "neoStage": "发布阶段", + "neoFilterHint": "筛选候选与发布记录", "neoAll": "全部", "neoCandidates": "Neo Candidates", "neoReleases": "Neo Releases", From 064495698f3f079ae5bc79b7692e6874ca9c560c Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Sat, 28 Feb 2026 15:45:41 +0800 Subject: [PATCH 3/3] feat(i18n): add neoDeactivate messages for extension management --- dashboard/src/i18n/locales/en-US/features/extension.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dashboard/src/i18n/locales/en-US/features/extension.json b/dashboard/src/i18n/locales/en-US/features/extension.json index 405c638e3..b66de9448 100644 --- a/dashboard/src/i18n/locales/en-US/features/extension.json +++ b/dashboard/src/i18n/locales/en-US/features/extension.json @@ -247,6 +247,9 @@ "neoRollback": "Rollback", "neoRollbackSuccess": "Rollback succeeded", "neoRollbackFailed": "Rollback failed", + "neoDeactivate": "Deactivate", + "neoDeactivateSuccess": "Deactivated successfully", + "neoDeactivateFailed": "Failed to deactivate", "neoSync": "Sync", "neoSyncSuccess": "Sync succeeded", "neoSyncFailed": "Sync failed",