feat: Metrix 平台按需启用与数据源合并为外部储存

This commit is contained in:
2026-06-25 17:20:17 +08:00
parent 6a517c98c8
commit 9339453482
8 changed files with 112 additions and 18 deletions
+21 -3
View File
@@ -112,7 +112,7 @@
</n-layout>
</n-layout>
<LicenseActivationModal v-if="licenseModalVisible" v-model:show="licenseModalVisible" />
<LicenseActivationModal v-if="licenseModalVisible" v-model:show="licenseModalVisible" @metrix-changed="onMetrixChanged" />
</template>
<script setup lang="ts">
@@ -131,9 +131,10 @@ import {
SunnyOutline
} from '@vicons/ionicons5';
import { apiPost, clearToken, getToken, setToken, setUnauthorizedHandler } from './api/client';
import type { LoginResponse } from './types';
import { apiGet, apiPost, clearToken, getToken, setToken, setUnauthorizedHandler } from './api/client';
import type { AppConfig, LoginResponse } from './types';
import { pageHeader, resetPageHeader, resolveHeaderValue, type PageHeaderAction } from './composables/pageHeader';
import { metrixEnabled } from './composables/metrixEnabled';
import { themeName, toggleAppTheme } from './composables/theme';
const LoginView = defineAsyncComponent(() => import('./components/LoginView.vue'));
@@ -172,6 +173,9 @@ const themeToggleTitle = computed(() => (themeName.value === 'dark' ? '切换到
onMounted(() => {
window.addEventListener('dragover', preventWindowFileDrop, { capture: true });
window.addEventListener('drop', preventWindowFileDrop, { capture: true });
if (token.value) {
void loadMetrixEnabled();
}
});
onBeforeUnmount(() => {
@@ -198,6 +202,7 @@ async function handleLogin(payload: { username: string; password: string }) {
setToken(result.token);
token.value = result.token;
message.success('登录成功');
void loadMetrixEnabled();
} catch (error) {
message.error(error instanceof Error ? error.message : '登录失败');
} finally {
@@ -226,6 +231,19 @@ function handleMenuChange(key: string | number) {
void router.push({ name: key });
}
function onMetrixChanged(enabled: boolean) {
metrixEnabled.value = enabled;
}
async function loadMetrixEnabled() {
try {
const config = await apiGet<AppConfig>('/api/config/full');
metrixEnabled.value = config.metrix_enabled ?? false;
} catch {
metrixEnabled.value = false;
}
}
function handleBrandMarkClick() {
brandClickCount.value += 1;
if (brandClickResetTimer !== undefined) {