Auto poll KDocs login status
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<script setup>
|
||||
import { computed, onMounted, ref } from 'vue'
|
||||
import { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
|
||||
import { fetchSystemConfig, updateSystemConfig, executeScheduleNow } from '../api/system'
|
||||
@@ -43,6 +43,8 @@ const kdocsAdminNotifyEmail = ref('')
|
||||
const kdocsStatus = ref({})
|
||||
const kdocsQrOpen = ref(false)
|
||||
const kdocsQrImage = ref('')
|
||||
const kdocsPolling = ref(false)
|
||||
let kdocsPollingTimer = null
|
||||
|
||||
const weekdaysOptions = [
|
||||
{ label: '周一', value: '1' },
|
||||
@@ -255,6 +257,36 @@ async function refreshKdocsStatus() {
|
||||
}
|
||||
}
|
||||
|
||||
async function pollKdocsStatus() {
|
||||
try {
|
||||
const status = await fetchKdocsStatus()
|
||||
kdocsStatus.value = status
|
||||
const loggedIn = status?.logged_in === true || status?.last_login_ok === true
|
||||
if (loggedIn) {
|
||||
ElMessage.success('扫码成功,已登录')
|
||||
kdocsQrOpen.value = false
|
||||
stopKdocsPolling()
|
||||
}
|
||||
} catch {
|
||||
// handled by interceptor
|
||||
}
|
||||
}
|
||||
|
||||
function startKdocsPolling() {
|
||||
stopKdocsPolling()
|
||||
kdocsPolling.value = true
|
||||
pollKdocsStatus()
|
||||
kdocsPollingTimer = setInterval(pollKdocsStatus, 2000)
|
||||
}
|
||||
|
||||
function stopKdocsPolling() {
|
||||
if (kdocsPollingTimer) {
|
||||
clearInterval(kdocsPollingTimer)
|
||||
kdocsPollingTimer = null
|
||||
}
|
||||
kdocsPolling.value = false
|
||||
}
|
||||
|
||||
async function onFetchKdocsQr() {
|
||||
try {
|
||||
const res = await fetchKdocsQr()
|
||||
@@ -284,6 +316,18 @@ async function onClearKdocsLogin() {
|
||||
}
|
||||
}
|
||||
|
||||
watch(kdocsQrOpen, (open) => {
|
||||
if (open) {
|
||||
startKdocsPolling()
|
||||
} else {
|
||||
stopKdocsPolling()
|
||||
}
|
||||
})
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
stopKdocsPolling()
|
||||
})
|
||||
|
||||
async function onTestProxy() {
|
||||
if (!proxyApiUrl.value.trim()) {
|
||||
ElMessage.error('请先输入代理API地址')
|
||||
|
||||
Reference in New Issue
Block a user