Add KDocs action feedback
This commit is contained in:
@@ -44,6 +44,10 @@ const kdocsStatus = ref({})
|
||||
const kdocsQrOpen = ref(false)
|
||||
const kdocsQrImage = ref('')
|
||||
const kdocsPolling = ref(false)
|
||||
const kdocsStatusLoading = ref(false)
|
||||
const kdocsQrLoading = ref(false)
|
||||
const kdocsClearLoading = ref(false)
|
||||
const kdocsActionHint = ref('')
|
||||
let kdocsPollingTimer = null
|
||||
|
||||
const weekdaysOptions = [
|
||||
@@ -71,12 +75,24 @@ const scheduleWeekdayDisplay = computed(() =>
|
||||
.map((d) => weekdayNames[Number(d)] || d)
|
||||
.join('、'),
|
||||
)
|
||||
const kdocsActionBusy = computed(
|
||||
() => kdocsStatusLoading.value || kdocsQrLoading.value || kdocsClearLoading.value,
|
||||
)
|
||||
|
||||
function normalizeBrowseType(value) {
|
||||
if (String(value) === '注册前未读') return '注册前未读'
|
||||
return '应读'
|
||||
}
|
||||
|
||||
function setKdocsHint(message) {
|
||||
if (!message) {
|
||||
kdocsActionHint.value = ''
|
||||
return
|
||||
}
|
||||
const time = new Date().toLocaleTimeString('zh-CN', { hour12: false })
|
||||
kdocsActionHint.value = `${message} (${time})`
|
||||
}
|
||||
|
||||
async function loadAll() {
|
||||
loading.value = true
|
||||
try {
|
||||
@@ -250,10 +266,16 @@ async function saveKdocsConfig() {
|
||||
}
|
||||
|
||||
async function refreshKdocsStatus() {
|
||||
if (kdocsStatusLoading.value) return
|
||||
kdocsStatusLoading.value = true
|
||||
setKdocsHint('正在刷新状态')
|
||||
try {
|
||||
kdocsStatus.value = await fetchKdocsStatus({ live: 1 })
|
||||
setKdocsHint('状态已刷新')
|
||||
} catch {
|
||||
// handled by interceptor
|
||||
setKdocsHint('刷新失败,请稍后重试')
|
||||
} finally {
|
||||
kdocsStatusLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -264,6 +286,7 @@ async function pollKdocsStatus() {
|
||||
const loggedIn = status?.logged_in === true || status?.last_login_ok === true
|
||||
if (loggedIn) {
|
||||
ElMessage.success('扫码成功,已登录')
|
||||
setKdocsHint('扫码成功,已登录')
|
||||
kdocsQrOpen.value = false
|
||||
stopKdocsPolling()
|
||||
}
|
||||
@@ -275,6 +298,7 @@ async function pollKdocsStatus() {
|
||||
function startKdocsPolling() {
|
||||
stopKdocsPolling()
|
||||
kdocsPolling.value = true
|
||||
setKdocsHint('扫码检测中')
|
||||
pollKdocsStatus()
|
||||
kdocsPollingTimer = setInterval(pollKdocsStatus, 2000)
|
||||
}
|
||||
@@ -288,31 +312,48 @@ function stopKdocsPolling() {
|
||||
}
|
||||
|
||||
async function onFetchKdocsQr() {
|
||||
if (kdocsQrLoading.value) return
|
||||
kdocsQrLoading.value = true
|
||||
setKdocsHint('正在获取二维码')
|
||||
try {
|
||||
kdocsQrImage.value = ''
|
||||
const res = await fetchKdocsQr()
|
||||
kdocsQrImage.value = res?.qr_image || ''
|
||||
if (!kdocsQrImage.value) {
|
||||
if (res?.logged_in) {
|
||||
ElMessage.success('当前已登录,无需扫码')
|
||||
setKdocsHint('当前已登录,无需扫码')
|
||||
await refreshKdocsStatus()
|
||||
return
|
||||
}
|
||||
ElMessage.warning('未获取到二维码')
|
||||
setKdocsHint('未获取到二维码')
|
||||
return
|
||||
}
|
||||
setKdocsHint('二维码已获取')
|
||||
kdocsQrOpen.value = true
|
||||
} catch {
|
||||
// handled by interceptor
|
||||
setKdocsHint('获取二维码失败')
|
||||
} finally {
|
||||
kdocsQrLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
async function onClearKdocsLogin() {
|
||||
if (kdocsClearLoading.value) return
|
||||
kdocsClearLoading.value = true
|
||||
setKdocsHint('正在清除登录态')
|
||||
try {
|
||||
await clearKdocsLogin()
|
||||
kdocsQrOpen.value = false
|
||||
kdocsQrImage.value = ''
|
||||
ElMessage.success('登录态已清除')
|
||||
setKdocsHint('登录态已清除')
|
||||
await refreshKdocsStatus()
|
||||
} catch {
|
||||
// handled by interceptor
|
||||
setKdocsHint('清除登录态失败')
|
||||
} finally {
|
||||
kdocsClearLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -535,9 +576,31 @@ onMounted(loadAll)
|
||||
|
||||
<div class="row-actions">
|
||||
<el-button type="primary" @click="saveKdocsConfig">保存表格配置</el-button>
|
||||
<el-button @click="refreshKdocsStatus">刷新状态</el-button>
|
||||
<el-button type="success" plain @click="onFetchKdocsQr">获取二维码</el-button>
|
||||
<el-button type="danger" plain @click="onClearKdocsLogin">清除登录</el-button>
|
||||
<el-button
|
||||
:loading="kdocsStatusLoading"
|
||||
:disabled="kdocsActionBusy && !kdocsStatusLoading"
|
||||
@click="refreshKdocsStatus"
|
||||
>
|
||||
刷新状态
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
:loading="kdocsQrLoading"
|
||||
:disabled="kdocsActionBusy && !kdocsQrLoading"
|
||||
@click="onFetchKdocsQr"
|
||||
>
|
||||
获取二维码
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
:loading="kdocsClearLoading"
|
||||
:disabled="kdocsActionBusy && !kdocsClearLoading"
|
||||
@click="onClearKdocsLogin"
|
||||
>
|
||||
清除登录
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<div class="help">
|
||||
@@ -548,6 +611,7 @@ onMounted(loadAll)
|
||||
· 待上传 {{ kdocsStatus.queue_size || 0 }}
|
||||
<span v-if="kdocsStatus.last_error">· 最近错误:{{ kdocsStatus.last_error }}</span>
|
||||
</div>
|
||||
<div v-if="kdocsActionHint" class="help">操作提示:{{ kdocsActionHint }}</div>
|
||||
</el-card>
|
||||
|
||||
<el-dialog v-model="kdocsQrOpen" title="扫码登录" width="min(420px, 92vw)">
|
||||
|
||||
Reference in New Issue
Block a user