Files
X-Financial/web/src/composables/useBackendHealth.js

48 lines
1.1 KiB
JavaScript
Raw Normal View History

import { ref } from 'vue'
import { fetchBackendHealth } from '../services/system.js'
const backendHealthy = ref(true)
const backendChecking = ref(false)
const backendError = ref('')
let lastCheckedAt = 0
export async function checkBackendHealth(options = {}) {
const force = Boolean(options.force)
const now = Date.now()
if (!force && now - lastCheckedAt < 5000) {
return backendHealthy.value
}
backendChecking.value = true
try {
const payload = await fetchBackendHealth()
const ok = payload?.status === 'ok'
backendHealthy.value = ok
backendError.value = ok
? ''
: payload?.database?.error || '后端服务尚未准备完成。'
lastCheckedAt = now
return ok
} catch (error) {
backendHealthy.value = false
backendError.value = error?.message || '无法连接后端服务。'
lastCheckedAt = now
return false
} finally {
backendChecking.value = false
}
}
export function useBackendHealth() {
return {
backendHealthy,
backendChecking,
backendError,
checkBackendHealth
}
}