|
@@ -3,7 +3,7 @@
|
|
|
|
|
|
|
|
<template #title><div @click="handleSettingClick" v-log="{ describe: { action: '点击首页标题' } }">首页</div></template>
|
|
<template #title><div @click="handleSettingClick" v-log="{ describe: { action: '点击首页标题' } }">首页</div></template>
|
|
|
</headerBar>
|
|
</headerBar>
|
|
|
- <div class="home-container" v-loading="loading">
|
|
|
|
|
|
|
+ <div class="home-container" v-loading="loading || syncLoading" :element-loading-text="syncLoading ? '正在同步配置...' : '正在加载...'">
|
|
|
<!-- 背景图片 -->
|
|
<!-- 背景图片 -->
|
|
|
<img src="@/assets/images/home/bg.png" alt="背景图片" class="background-image" />
|
|
<img src="@/assets/images/home/bg.png" alt="背景图片" class="background-image" />
|
|
|
|
|
|
|
@@ -25,7 +25,7 @@
|
|
|
import headerBar from "@/components/header-bar/index.vue";
|
|
import headerBar from "@/components/header-bar/index.vue";
|
|
|
import { useRouter } from "vue-router";
|
|
import { useRouter } from "vue-router";
|
|
|
import configInfo from '@/stores/modules/config';
|
|
import configInfo from '@/stores/modules/config';
|
|
|
-import { ref, onMounted } from 'vue';
|
|
|
|
|
|
|
+import { ref, onMounted, onUnmounted } from 'vue';
|
|
|
import axios from 'axios';
|
|
import axios from 'axios';
|
|
|
import client from "@/stores/modules/client";
|
|
import client from "@/stores/modules/client";
|
|
|
import icpList from '@/utils/ipc';
|
|
import icpList from '@/utils/ipc';
|
|
@@ -36,6 +36,8 @@ import tokenInfo from "@/stores/modules/token";
|
|
|
|
|
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
|
const loading = ref(true);
|
|
const loading = ref(true);
|
|
|
|
|
+const syncLoading = ref(false); // 同步配置的loading状态
|
|
|
|
|
+const syncCompleted = ref(false); // 同步是否完成
|
|
|
|
|
|
|
|
// 用户状态管理 - 在 onMounted 中初始化
|
|
// 用户状态管理 - 在 onMounted 中初始化
|
|
|
let configInfoStore: any;
|
|
let configInfoStore: any;
|
|
@@ -56,26 +58,50 @@ function socketConnect(){
|
|
|
socketStore.connectSocket();
|
|
socketStore.connectSocket();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-const goCheck = () => {
|
|
|
|
|
|
|
+const goCheck = async () => {
|
|
|
// 检查登录状态
|
|
// 检查登录状态
|
|
|
if (!tokenInfoStore.getToken) {
|
|
if (!tokenInfoStore.getToken) {
|
|
|
useUserInfoStore.updateLoginShow(true);
|
|
useUserInfoStore.updateLoginShow(true);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // 如果正在同步,显示提示
|
|
|
|
|
+ if (syncLoading.value) {
|
|
|
|
|
+ console.log('正在同步配置,请稍候...');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 如果未同步完成,等待同步
|
|
|
|
|
+ if (!syncCompleted.value) {
|
|
|
|
|
+ console.log('等待配置同步完成...');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
configInfoStore.updateAppModel(1);
|
|
configInfoStore.updateAppModel(1);
|
|
|
router.push({
|
|
router.push({
|
|
|
name: 'PhotographyCheck'
|
|
name: 'PhotographyCheck'
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const goShot = () => {
|
|
|
|
|
|
|
+const goShot = async () => {
|
|
|
// 检查登录状态
|
|
// 检查登录状态
|
|
|
if (!tokenInfoStore.getToken) {
|
|
if (!tokenInfoStore.getToken) {
|
|
|
useUserInfoStore.updateLoginShow(true);
|
|
useUserInfoStore.updateLoginShow(true);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // 如果正在同步,显示提示
|
|
|
|
|
+ if (syncLoading.value) {
|
|
|
|
|
+ console.log('正在同步配置,请稍候...');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 如果未同步完成,等待同步
|
|
|
|
|
+ if (!syncCompleted.value) {
|
|
|
|
|
+ console.log('等待配置同步完成...');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
socketConnect();
|
|
socketConnect();
|
|
|
configInfoStore.updateAppModel(2);
|
|
configInfoStore.updateAppModel(2);
|
|
|
router.push({
|
|
router.push({
|
|
@@ -97,15 +123,29 @@ const checkHealth = async () => {
|
|
|
const token = tokenInfoStore.getToken;
|
|
const token = tokenInfoStore.getToken;
|
|
|
if (token && token.trim() !== '') {
|
|
if (token && token.trim() !== '') {
|
|
|
try {
|
|
try {
|
|
|
|
|
+ syncLoading.value = true; // 开始同步
|
|
|
|
|
+ syncCompleted.value = false; // 重置同步状态
|
|
|
|
|
+
|
|
|
// 导入同步函数
|
|
// 导入同步函数
|
|
|
const { syncAfterLogin } = await import('@/apis/setting');
|
|
const { syncAfterLogin } = await import('@/apis/setting');
|
|
|
await syncAfterLogin();
|
|
await syncAfterLogin();
|
|
|
console.log('健康检查后数据同步成功');
|
|
console.log('健康检查后数据同步成功');
|
|
|
|
|
+
|
|
|
|
|
+ syncCompleted.value = true; // 同步完成
|
|
|
} catch (syncError) {
|
|
} catch (syncError) {
|
|
|
console.error('健康检查后数据同步失败:', syncError);
|
|
console.error('健康检查后数据同步失败:', syncError);
|
|
|
|
|
+ syncCompleted.value = false; // 同步失败
|
|
|
// 同步失败不影响主流程
|
|
// 同步失败不影响主流程
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ syncLoading.value = false; // 结束同步loading
|
|
|
}
|
|
}
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 未登录状态,直接设置同步完成
|
|
|
|
|
+ syncCompleted.value = true;
|
|
|
}
|
|
}
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 未登录状态,直接设置同步完成
|
|
|
|
|
+ syncCompleted.value = true;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
@@ -219,6 +259,13 @@ const checkForUpdates = async () => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+// 监听登录成功事件
|
|
|
|
|
+const handleLoginSuccess = () => {
|
|
|
|
|
+ console.log('检测到登录成功,重新检查同步状态');
|
|
|
|
|
+ // 重新执行健康检查和同步
|
|
|
|
|
+ checkHealth();
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
// 在组件挂载时执行健康检查和版本检查
|
|
// 在组件挂载时执行健康检查和版本检查
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
|
// 初始化 store
|
|
// 初始化 store
|
|
@@ -226,12 +273,20 @@ onMounted(() => {
|
|
|
useUserInfoStore = useUserInfo();
|
|
useUserInfoStore = useUserInfo();
|
|
|
tokenInfoStore = tokenInfo();
|
|
tokenInfoStore = tokenInfo();
|
|
|
|
|
|
|
|
|
|
+ // 监听登录成功事件
|
|
|
|
|
+ window.addEventListener('login-success', handleLoginSuccess);
|
|
|
|
|
+
|
|
|
checkHealth();
|
|
checkHealth();
|
|
|
// 延迟执行版本检查,避免影响健康检查
|
|
// 延迟执行版本检查,避免影响健康检查
|
|
|
setTimeout(() => {
|
|
setTimeout(() => {
|
|
|
checkForUpdates();
|
|
checkForUpdates();
|
|
|
}, 1000);
|
|
}, 1000);
|
|
|
});
|
|
});
|
|
|
|
|
+
|
|
|
|
|
+// 组件卸载时清理事件监听器
|
|
|
|
|
+onUnmounted(() => {
|
|
|
|
|
+ window.removeEventListener('login-success', handleLoginSuccess);
|
|
|
|
|
+});
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|