| null = null
+
+ function clearTimer() {
+ if (!timer) return
+ clearTimeout(timer)
+ timer = null
+ }
+
+ function schedule() {
+ clearTimer()
+ if (!isActive.value) return
+ if (pauseWhenHidden && document.hidden) return
+ const delay = typeof interval === 'function' ? interval() : interval
+ timer = setTimeout(() => void run(), Math.max(0, delay))
+ }
+
+ async function run() {
+ clearTimer()
+ if (!isActive.value || isRunning.value) return
+ if (pauseWhenHidden && document.hidden) return
+
+ isRunning.value = true
+ try {
+ await fn()
+ } catch (error) {
+ onError?.(error)
+ } finally {
+ isRunning.value = false
+ schedule()
+ }
+ }
function stop() {
- pause()
+ isActive.value = false
+ clearTimer()
}
function start() {
- if (immediate) fn()
- resume()
+ if (isActive.value) return
+ isActive.value = true
+ if (immediate) void run()
+ else schedule()
}
- return { start, stop, pause, resume }
+ function handleVisibilityChange() {
+ if (!pauseWhenHidden || !isActive.value) return
+ if (document.hidden) clearTimer()
+ else void run()
+ }
+
+ onMounted(() => document.addEventListener('visibilitychange', handleVisibilityChange))
+ onBeforeUnmount(() => {
+ stop()
+ document.removeEventListener('visibilitychange', handleVisibilityChange)
+ })
+
+ return { start, stop, run, isActive, isRunning }
}
diff --git a/frontend/src/env.d.ts b/frontend/src/env.d.ts
index 323c78a..443a7fa 100644
--- a/frontend/src/env.d.ts
+++ b/frontend/src/env.d.ts
@@ -1,5 +1,14 @@
///
+interface ImportMetaEnv {
+ /** 是否启用前端 Mock;开发环境默认开启,生产环境默认关闭。 */
+ readonly VITE_ENABLE_MOCK?: 'true' | 'false'
+}
+
+interface ImportMeta {
+ readonly env: ImportMetaEnv
+}
+
declare module '*.vue' {
import type { DefineComponent } from 'vue'
const component: DefineComponent<{}, {}, any>
diff --git a/frontend/src/layouts/MainLayout.vue b/frontend/src/layouts/MainLayout.vue
index 0a67cda..6cb75d7 100644
--- a/frontend/src/layouts/MainLayout.vue
+++ b/frontend/src/layouts/MainLayout.vue
@@ -1,6 +1,7 @@
diff --git a/frontend/src/views/compare/CompareResultView.vue b/frontend/src/views/compare/CompareResultView.vue
index e3cfd3f..bc9d620 100644
--- a/frontend/src/views/compare/CompareResultView.vue
+++ b/frontend/src/views/compare/CompareResultView.vue
@@ -1,14 +1,9 @@
@@ -144,6 +166,7 @@ onMounted(init)
{{ r.content }}
+ {{ r.displayContent }}
正在生成回答...
@@ -212,6 +235,13 @@ onMounted(init)
color: #f56c6c;
}
+ .streaming-text {
+ min-height: 80px;
+ line-height: 1.7;
+ white-space: pre-wrap;
+ word-break: break-word;
+ }
+
.result-stats {
display: flex;
gap: 16px;
diff --git a/frontend/src/views/dashboard/DashboardView.vue b/frontend/src/views/dashboard/DashboardView.vue
index 1cd346e..23495fc 100644
--- a/frontend/src/views/dashboard/DashboardView.vue
+++ b/frontend/src/views/dashboard/DashboardView.vue
@@ -1,6 +1,8 @@
diff --git a/frontend/src/views/inference/InferenceChatView.vue b/frontend/src/views/inference/InferenceChatView.vue
index 679a0ce..7d6b056 100644
--- a/frontend/src/views/inference/InferenceChatView.vue
+++ b/frontend/src/views/inference/InferenceChatView.vue
@@ -1,5 +1,5 @@
diff --git a/frontend/src/views/login/LoginView.vue b/frontend/src/views/login/LoginView.vue
index aa89d4b..3b5e5e8 100644
--- a/frontend/src/views/login/LoginView.vue
+++ b/frontend/src/views/login/LoginView.vue
@@ -136,7 +136,7 @@ async function handleLogin() {
position: relative;
color: #fff;
background-color: #121127;
- background-image: url('@/assets/login-hero-flow.png');
+ background-image: url('@/assets/login-hero-flow.jpg');
background-size: cover;
background-position: center;
overflow: hidden;
diff --git a/frontend/src/views/system/HardwareView.vue b/frontend/src/views/system/HardwareView.vue
index 765cfcd..0ea331c 100644
--- a/frontend/src/views/system/HardwareView.vue
+++ b/frontend/src/views/system/HardwareView.vue
@@ -1,6 +1,8 @@
diff --git a/frontend/src/views/system/TrainingLogView.vue b/frontend/src/views/system/TrainingLogView.vue
index c17800a..3f4eebd 100644
--- a/frontend/src/views/system/TrainingLogView.vue
+++ b/frontend/src/views/system/TrainingLogView.vue
@@ -1,9 +1,12 @@
diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts
index f70c797..4e77070 100644
--- a/frontend/vite.config.ts
+++ b/frontend/vite.config.ts
@@ -10,10 +10,10 @@ export default defineConfig({
plugins: [
vue(),
AutoImport({
- resolvers: [ElementPlusResolver({ importStyle: false })],
+ resolvers: [ElementPlusResolver({ importStyle: 'css' })],
}),
Components({
- resolvers: [ElementPlusResolver({ importStyle: false })],
+ resolvers: [ElementPlusResolver({ importStyle: 'css' })],
}),
],
resolve: {