fix(avatar): persist takeover toggle immediately
This commit is contained in:
@@ -95,7 +95,7 @@
|
||||
</main>
|
||||
|
||||
<footer v-if="activeAvatarId" class="save-area">
|
||||
<button class="save-button" type="button" :disabled="loading || saving" @click="saveSettings">
|
||||
<button class="save-button" type="button" :disabled="loading || saving" @click="saveSettings()">
|
||||
<span v-if="saving" class="saving-spinner" aria-hidden="true"></span>
|
||||
{{ saving ? '保存中...' : '保存授权设置' }}
|
||||
</button>
|
||||
@@ -221,16 +221,19 @@ const showToast = (message: string) => {
|
||||
toastTimer = window.setTimeout(() => { toastMessage.value = '' }, 2400)
|
||||
}
|
||||
|
||||
const togglePermission = (permission: AvatarPermission) => {
|
||||
const togglePermission = async (permission: AvatarPermission) => {
|
||||
errorMessage.value = ''
|
||||
const previousValue = permissionState[permission]
|
||||
permissionState[permission] = !permissionState[permission]
|
||||
if (permission === 'takeover') {
|
||||
takeoverStatus.value = null
|
||||
if (!permissionState.takeover && takeoverStatusTimer) {
|
||||
if (takeoverStatusTimer) {
|
||||
window.clearTimeout(takeoverStatusTimer)
|
||||
takeoverStatusTimer = undefined
|
||||
}
|
||||
const saved = await saveSettings(true)
|
||||
if (!saved) permissionState.takeover = previousValue
|
||||
}
|
||||
errorMessage.value = ''
|
||||
}
|
||||
|
||||
const scheduleTakeoverStatusRefresh = () => {
|
||||
@@ -276,8 +279,8 @@ const loadTakeoverStatus = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
const saveSettings = async () => {
|
||||
if (!activeAvatarId.value || loading.value || saving.value) return
|
||||
const saveSettings = async (takeoverToggle = false): Promise<boolean> => {
|
||||
if (!activeAvatarId.value || loading.value || saving.value) return false
|
||||
saving.value = true
|
||||
errorMessage.value = ''
|
||||
try {
|
||||
@@ -285,9 +288,15 @@ const saveSettings = async () => {
|
||||
setPermissions(settings.permissions || [])
|
||||
await loadTakeoverStatus()
|
||||
scheduleTakeoverStatusRefresh()
|
||||
showToast('授权设置已保存')
|
||||
if (takeoverToggle) {
|
||||
showToast(permissionState.takeover ? '接管已开启,正在连接' : '接管已关闭')
|
||||
} else {
|
||||
showToast('授权设置已保存')
|
||||
}
|
||||
return true
|
||||
} catch (error: any) {
|
||||
errorMessage.value = readableError(error, '授权设置保存失败,请重试')
|
||||
return false
|
||||
} finally {
|
||||
saving.value = false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user