+
+
+
+
diff --git a/frontend/app/web-gold/src/components/GlobalLoading.vue b/frontend/app/web-gold/src/components/GlobalLoading.vue
index 47ad6284cb..c098d45998 100644
--- a/frontend/app/web-gold/src/components/GlobalLoading.vue
+++ b/frontend/app/web-gold/src/components/GlobalLoading.vue
@@ -115,13 +115,13 @@ onUnmounted(() => {
.spinner-ring:nth-child(1) {
animation-delay: -0.45s;
- border-top-color: var(--color-primary, #3B82F6);
+ border-top-color: var(--primary);
opacity: 1;
}
.spinner-ring:nth-child(2) {
animation-delay: -0.3s;
- border-top-color: rgba(59, 130, 246, 0.8);
+ border-top-color: oklch(from var(--primary) l c h / 0.8);
opacity: 0.8;
width: 80%;
height: 80%;
@@ -131,7 +131,7 @@ onUnmounted(() => {
.spinner-ring:nth-child(3) {
animation-delay: -0.15s;
- border-top-color: rgba(59, 130, 246, 0.6);
+ border-top-color: oklch(from var(--primary) l c h / 0.6);
opacity: 0.6;
width: 60%;
height: 60%;
@@ -141,7 +141,7 @@ onUnmounted(() => {
.spinner-ring:nth-child(4) {
animation-delay: 0s;
- border-top-color: rgba(59, 130, 246, 0.4);
+ border-top-color: oklch(from var(--primary) l c h / 0.4);
opacity: 0.4;
width: 40%;
height: 40%;
@@ -159,11 +159,11 @@ onUnmounted(() => {
}
.loading-text {
- color: var(--color-text, #F2F2F2);
- font-size: 14px;
+ color: var(--foreground);
+ font-size: var(--font-size-base);
font-weight: 500;
text-align: center;
- margin-top: 8px;
+ margin-top: var(--space-2);
}
/* 淡入淡出动画 */
diff --git a/frontend/app/web-gold/src/components/GradientButton.vue b/frontend/app/web-gold/src/components/GradientButton.vue
index e17c6aa897..77400e3076 100644
--- a/frontend/app/web-gold/src/components/GradientButton.vue
+++ b/frontend/app/web-gold/src/components/GradientButton.vue
@@ -5,7 +5,7 @@
@click="handleClick"
>
-
+
{{ loadingText }}
@@ -99,7 +99,7 @@ const buttonClass = computed(() => {
border-radius: var(--radius-lg);
font-size: var(--font-size-base);
font-weight: 500;
- color: #ffffff;
+ color: var(--primary-foreground);
cursor: pointer;
transition: all var(--duration-fast);
background: var(--color-gray-900);
@@ -189,6 +189,22 @@ const buttonClass = computed(() => {
transform: none;
}
+/* 加载动画 */
+.gradient-button__spinner {
+ width: 14px;
+ height: 14px;
+ border: 2px solid oklch(1 0 0 / 0.3);
+ border-top-color: var(--primary-foreground);
+ border-radius: 50%;
+ animation: gradient-button-spin 0.6s linear infinite;
+}
+
+@keyframes gradient-button-spin {
+ to {
+ transform: rotate(360deg);
+ }
+}
+
/* 响应式调整 */
@media (max-width: 768px) {
.gradient-button--large {
diff --git a/frontend/app/web-gold/src/components/PointsTag.vue b/frontend/app/web-gold/src/components/PointsTag.vue
index 94d5d6731e..4fe6dd24ed 100644
--- a/frontend/app/web-gold/src/components/PointsTag.vue
+++ b/frontend/app/web-gold/src/components/PointsTag.vue
@@ -62,31 +62,31 @@ const displayText = computed(() => {
.points-tag {
display: inline-flex;
align-items: center;
- gap: 4px;
- padding: 2px 8px;
- border-radius: 4px;
+ gap: var(--space-1);
+ border-radius: var(--radius-tag);
font-weight: 500;
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
- color: #fff;
+ background: var(--primary);
+ color: var(--primary-foreground);
white-space: nowrap;
&--small {
padding: 1px 6px;
- font-size: 11px;
+ font-size: var(--font-size-xs);
}
&--default {
- padding: 2px 8px;
- font-size: 12px;
+ padding: 2px var(--space-2);
+ font-size: var(--font-size-sm);
}
&--large {
- padding: 4px 12px;
- font-size: 14px;
+ padding: var(--space-1) var(--space-3);
+ font-size: var(--font-size-base);
}
&--free {
- background: linear-gradient(135deg, #11998e 0%, #38ef7d 100%);
+ background: var(--success);
+ color: white;
}
&__icon {
diff --git a/frontend/app/web-gold/src/components/ResultPanel.vue b/frontend/app/web-gold/src/components/ResultPanel.vue
index 2dc56f3359..7cd6db0225 100644
--- a/frontend/app/web-gold/src/components/ResultPanel.vue
+++ b/frontend/app/web-gold/src/components/ResultPanel.vue
@@ -9,7 +9,7 @@
生成的数字人视频
@@ -18,7 +18,8 @@
-
-
diff --git a/frontend/app/web-gold/src/views/content-style/composables/useBenchmarkAnalysis.js b/frontend/app/web-gold/src/views/content-style/composables/useBenchmarkAnalysis.js
index 55bf504fef..bdc50208a1 100644
--- a/frontend/app/web-gold/src/views/content-style/composables/useBenchmarkAnalysis.js
+++ b/frontend/app/web-gold/src/views/content-style/composables/useBenchmarkAnalysis.js
@@ -1,5 +1,5 @@
import { ref } from 'vue'
-import { message } from 'ant-design-vue'
+import { toast } from 'vue-sonner'
import { ChatMessageApi } from '@/api/chat'
import useVoiceText from '@/hooks/web/useVoiceText'
import { streamChat } from '@/utils/streamChat'
@@ -18,17 +18,17 @@ export function useBenchmarkAnalysis(data, expandedRowKeys, saveTableDataToSessi
row._analyzing = true
- message.info('正在获取音频转写...')
+ toast.info('正在获取音频转写...')
const transcriptions = await getVoiceText([row])
row.transcriptions = transcriptions.find(item => item.audio_url === row.audio_url)?.value
if (!row.transcriptions?.trim()) {
- message.warning('未提取到语音内容,请检查音频文件或稍后重试')
+ toast.warning('未提取到语音内容,请检查音频文件或稍后重试')
row._analyzing = false
return false
}
- message.info('正在创建对话...')
+ toast.info('正在创建对话...')
const createPayload = { roleId: 20, role_id: 20 }
console.debug('createChatConversationMy payload:', createPayload)
const conversationResp = await ChatMessageApi.createChatConversationMy(createPayload)
@@ -41,7 +41,7 @@ export function useBenchmarkAnalysis(data, expandedRowKeys, saveTableDataToSessi
throw new Error('创建对话失败:未获取到 conversationId')
}
- message.info('正在生成提示词...')
+ toast.info('正在生成提示词...')
const content = buildPromptFromTranscription(row.transcriptions)
const index = data.value.findIndex(item => item.id === row.id)
const aiContent = await streamChat({
@@ -65,11 +65,11 @@ export function useBenchmarkAnalysis(data, expandedRowKeys, saveTableDataToSessi
await saveTableDataToSession()
- message.success('分析完成')
+ toast.success('分析完成')
return true
} catch (error) {
console.error('分析视频失败:', error)
- message.error('分析失败,请稍后重试')
+ toast.error('分析失败,请稍后重试')
return false
} finally {
row._analyzing = false
@@ -78,7 +78,7 @@ export function useBenchmarkAnalysis(data, expandedRowKeys, saveTableDataToSessi
async function batchAnalyze(selectedRowKeys, onBatchComplete) {
if (!selectedRowKeys.value.length) {
- message.warning('请先选择要分析的视频')
+ toast.warning('请先选择要分析的视频')
return
}
@@ -104,7 +104,7 @@ export function useBenchmarkAnalysis(data, expandedRowKeys, saveTableDataToSessi
}
if (!allTexts.length) {
- message.warning('未提取到任何语音内容,请检查音频文件或稍后重试')
+ toast.warning('未提取到任何语音内容,请检查音频文件或稍后重试')
batchAnalyzeLoading.value = false
globalLoading.value = false
globalLoadingText.value = ''
@@ -119,7 +119,7 @@ export function useBenchmarkAnalysis(data, expandedRowKeys, saveTableDataToSessi
}
} catch (error) {
console.error('批量分析失败:', error)
- message.error('批量分析失败,请稍后重试')
+ toast.error('批量分析失败,请稍后重试')
} finally {
batchAnalyzeLoading.value = false
globalLoading.value = false
diff --git a/frontend/app/web-gold/src/views/kling/IdentifyFace.vue b/frontend/app/web-gold/src/views/kling/IdentifyFace.vue
index 3b3b7c7a3f..8b289b732a 100644
--- a/frontend/app/web-gold/src/views/kling/IdentifyFace.vue
+++ b/frontend/app/web-gold/src/views/kling/IdentifyFace.vue
@@ -95,19 +95,19 @@