优化后台金山状态:登录后静默预取并在系统配置页复用缓存
This commit is contained in:
@@ -5,6 +5,7 @@ import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { fetchSystemConfig, updateSystemConfig } from '../api/system'
|
||||
import { fetchKdocsQr, fetchKdocsStatus, clearKdocsLogin } from '../api/kdocs'
|
||||
import { fetchProxyConfig, testProxy, updateProxyConfig } from '../api/proxy'
|
||||
import { getCachedKdocsStatus, preloadKdocsStatus, updateCachedKdocsStatus } from '../utils/kdocsStatusCache'
|
||||
|
||||
const loading = ref(false)
|
||||
|
||||
@@ -33,14 +34,15 @@ const kdocsRowEnd = ref(0)
|
||||
const kdocsAdminNotifyEnabled = ref(false)
|
||||
const kdocsAdminNotifyEmail = ref('')
|
||||
|
||||
const kdocsStatus = ref({})
|
||||
const initialKdocsStatus = getCachedKdocsStatus({ maxAgeMs: 10 * 60 * 1000 })
|
||||
const kdocsStatus = ref(initialKdocsStatus || {})
|
||||
const kdocsQrOpen = ref(false)
|
||||
const kdocsQrImage = ref('')
|
||||
const kdocsPolling = ref(false)
|
||||
const kdocsStatusLoading = ref(false)
|
||||
const kdocsQrLoading = ref(false)
|
||||
const kdocsClearLoading = ref(false)
|
||||
const kdocsSilentRefreshing = ref(false)
|
||||
const kdocsSilentRefreshing = ref(!initialKdocsStatus)
|
||||
const kdocsActionHint = ref('')
|
||||
let kdocsPollingTimer = null
|
||||
|
||||
@@ -116,7 +118,13 @@ async function loadAll() {
|
||||
loading.value = false
|
||||
}
|
||||
|
||||
// 金山登录状态改为静默异步获取,避免阻塞系统配置首屏渲染
|
||||
const cachedStatus = getCachedKdocsStatus({ maxAgeMs: 10 * 60 * 1000 })
|
||||
if (cachedStatus) {
|
||||
kdocsStatus.value = cachedStatus
|
||||
kdocsSilentRefreshing.value = false
|
||||
}
|
||||
|
||||
// 静默刷新金山登录状态,确保状态持续更新且不阻塞首屏。
|
||||
void refreshKdocsStatusSilently()
|
||||
}
|
||||
|
||||
@@ -124,14 +132,12 @@ async function refreshKdocsStatusSilently() {
|
||||
if (kdocsSilentRefreshing.value || kdocsStatusLoading.value) return
|
||||
kdocsSilentRefreshing.value = true
|
||||
try {
|
||||
const status = await fetchKdocsStatus(
|
||||
{},
|
||||
{
|
||||
__silent: true,
|
||||
__no_retry: true,
|
||||
timeout: 8000,
|
||||
},
|
||||
)
|
||||
const status = await preloadKdocsStatus({
|
||||
force: false,
|
||||
maxAgeMs: 60_000,
|
||||
silent: true,
|
||||
live: 0,
|
||||
})
|
||||
kdocsStatus.value = status || {}
|
||||
} catch {
|
||||
// silent mode
|
||||
@@ -255,7 +261,9 @@ async function refreshKdocsStatus() {
|
||||
kdocsStatusLoading.value = true
|
||||
setKdocsHint('正在刷新状态')
|
||||
try {
|
||||
kdocsStatus.value = await fetchKdocsStatus({ live: 1 })
|
||||
const status = await fetchKdocsStatus({ live: 1 })
|
||||
kdocsStatus.value = status || {}
|
||||
updateCachedKdocsStatus(kdocsStatus.value)
|
||||
setKdocsHint('状态已刷新')
|
||||
} catch {
|
||||
setKdocsHint('刷新失败,请稍后重试')
|
||||
@@ -267,7 +275,8 @@ async function refreshKdocsStatus() {
|
||||
async function pollKdocsStatus() {
|
||||
try {
|
||||
const status = await fetchKdocsStatus({ live: 1 })
|
||||
kdocsStatus.value = status
|
||||
kdocsStatus.value = status || {}
|
||||
updateCachedKdocsStatus(kdocsStatus.value)
|
||||
const loggedIn = status?.logged_in === true || status?.last_login_ok === true
|
||||
if (loggedIn) {
|
||||
ElMessage.success('扫码成功,已登录')
|
||||
@@ -332,6 +341,12 @@ async function onClearKdocsLogin() {
|
||||
await clearKdocsLogin()
|
||||
kdocsQrOpen.value = false
|
||||
kdocsQrImage.value = ''
|
||||
kdocsStatus.value = updateCachedKdocsStatus({
|
||||
...(kdocsStatus.value || {}),
|
||||
logged_in: false,
|
||||
last_login_ok: false,
|
||||
login_required: true,
|
||||
})
|
||||
ElMessage.success('登录态已清除')
|
||||
setKdocsHint('登录态已清除')
|
||||
await refreshKdocsStatus()
|
||||
|
||||
Reference in New Issue
Block a user