Files
sentinel/frontend/src/composables/useAsyncAction.js
chy88 380a78283e feat(frontend): 打磨管理台交互体验与可访问性
- 优化 Dashboard、Bindings、Logs、Settings 的布局、筛选区与信息层级
- 增加筛选状态同步、未保存提醒、运行时反馈和趋势表视图
- 补充跳转主内容、aria live、键盘导航与移动端触控细节
2026-03-04 00:18:59 +08:00

37 lines
756 B
JavaScript

import { ref } from 'vue'
import { ElMessage } from 'element-plus'
import { humanizeError } from '../api'
import { announcePolite } from '../utils/liveRegion'
export function useAsyncAction() {
const loading = ref(false)
const errorMessage = ref('')
function clearError() {
errorMessage.value = ''
}
async function run(task, fallbackMessage) {
loading.value = true
clearError()
try {
return await task()
} catch (error) {
errorMessage.value = humanizeError(error, fallbackMessage)
announcePolite(errorMessage.value)
ElMessage.error(errorMessage.value)
throw error
} finally {
loading.value = false
}
}
return {
clearError,
errorMessage,
loading,
run,
}
}