fix(avatar): persist takeover toggle immediately

This commit is contained in:
stefanfeng
2026-08-20 15:55:12 +08:00
parent 76bd22c24b
commit 89f52963b7
@@ -95,7 +95,7 @@
</main> </main>
<footer v-if="activeAvatarId" class="save-area"> <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> <span v-if="saving" class="saving-spinner" aria-hidden="true"></span>
{{ saving ? '保存中...' : '保存授权设置' }} {{ saving ? '保存中...' : '保存授权设置' }}
</button> </button>
@@ -221,16 +221,19 @@ const showToast = (message: string) => {
toastTimer = window.setTimeout(() => { toastMessage.value = '' }, 2400) 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] permissionState[permission] = !permissionState[permission]
if (permission === 'takeover') { if (permission === 'takeover') {
takeoverStatus.value = null takeoverStatus.value = null
if (!permissionState.takeover && takeoverStatusTimer) { if (takeoverStatusTimer) {
window.clearTimeout(takeoverStatusTimer) window.clearTimeout(takeoverStatusTimer)
takeoverStatusTimer = undefined takeoverStatusTimer = undefined
} }
const saved = await saveSettings(true)
if (!saved) permissionState.takeover = previousValue
} }
errorMessage.value = ''
} }
const scheduleTakeoverStatusRefresh = () => { const scheduleTakeoverStatusRefresh = () => {
@@ -276,8 +279,8 @@ const loadTakeoverStatus = async () => {
} }
} }
const saveSettings = async () => { const saveSettings = async (takeoverToggle = false): Promise<boolean> => {
if (!activeAvatarId.value || loading.value || saving.value) return if (!activeAvatarId.value || loading.value || saving.value) return false
saving.value = true saving.value = true
errorMessage.value = '' errorMessage.value = ''
try { try {
@@ -285,9 +288,15 @@ const saveSettings = async () => {
setPermissions(settings.permissions || []) setPermissions(settings.permissions || [])
await loadTakeoverStatus() await loadTakeoverStatus()
scheduleTakeoverStatusRefresh() scheduleTakeoverStatusRefresh()
if (takeoverToggle) {
showToast(permissionState.takeover ? '接管已开启,正在连接' : '接管已关闭')
} else {
showToast('授权设置已保存') showToast('授权设置已保存')
}
return true
} catch (error: any) { } catch (error: any) {
errorMessage.value = readableError(error, '授权设置保存失败,请重试') errorMessage.value = readableError(error, '授权设置保存失败,请重试')
return false
} finally { } finally {
saving.value = false saving.value = false
} }