fix(avatar): persist takeover toggle immediately
This commit is contained in:
@@ -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()
|
||||||
showToast('授权设置已保存')
|
if (takeoverToggle) {
|
||||||
|
showToast(permissionState.takeover ? '接管已开启,正在连接' : '接管已关闭')
|
||||||
|
} else {
|
||||||
|
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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user