Files
BYW-VoiceHub/VoiceHub-main/app/composables/useProgress.ts
T
Henry_Du 4ce4649aaf
Build VoiceHub FPK / build-fpk (push) Failing after 56m5s
Build and Push Docker Image / build-and-push (push) Canceled after 1h9m35s
初次提交
2026-09-06 08:19:02 +08:00

115 lines
2.5 KiB
TypeScript

import { computed, ref } from 'vue'
export const useProgress = () => {
const progress = ref(0)
const message = ref('')
const subMessage = ref('')
const active = ref(false)
const indeterminate = ref(false)
const completed = ref(false)
const error = ref('')
// 进度百分比,确保在0-100范围内
const percentage = computed(() => {
return Math.min(100, Math.max(0, progress.value))
})
// 启动进度条
const start = (initialMessage = '处理中...') => {
progress.value = 0
message.value = initialMessage
subMessage.value = ''
active.value = true
indeterminate.value = false
completed.value = false
error.value = ''
}
// 启动不确定进度条(不显示具体百分比,用于未知进度的操作)
const startIndeterminate = (initialMessage = '处理中...') => {
progress.value = 0
message.value = initialMessage
subMessage.value = ''
active.value = true
indeterminate.value = true
completed.value = false
error.value = ''
}
// 更新进度
const update = (newProgress: number, newMessage?: string, newSubMessage?: string) => {
progress.value = newProgress
if (newMessage !== undefined) {
message.value = newMessage
}
if (newSubMessage !== undefined) {
subMessage.value = newSubMessage
}
if (progress.value >= 100) {
complete()
}
}
// 完成进度
const complete = (finalMessage = '处理完成') => {
progress.value = 100
message.value = finalMessage
active.value = true
indeterminate.value = false
completed.value = true
// 2秒后自动隐藏进度条
setTimeout(() => {
if (completed.value) {
active.value = false
}
}, 2000)
}
// 设置错误
const setError = (errorMessage: string) => {
error.value = errorMessage
active.value = true
indeterminate.value = false
// 3秒后自动隐藏错误
setTimeout(() => {
if (error.value) {
active.value = false
error.value = ''
}
}, 3000)
}
// 重置进度条
const reset = () => {
progress.value = 0
message.value = ''
subMessage.value = ''
active.value = false
indeterminate.value = false
completed.value = false
error.value = ''
}
return {
progress,
percentage,
message,
subMessage,
active,
indeterminate,
completed,
error,
start,
startIndeterminate,
update,
complete,
setError,
reset
}
}