fix(avatar): refresh BOXIM takeover status
This commit is contained in:
@@ -101,7 +101,7 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, onMounted, reactive, ref } from 'vue'
|
||||
import { computed, onBeforeUnmount, onMounted, reactive, ref } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import {
|
||||
getAvatarPermissionSettings,
|
||||
@@ -177,6 +177,7 @@ const errorMessage = ref('')
|
||||
const toastMessage = ref('')
|
||||
const takeoverStatus = ref<TakeoverStatus | null>(null)
|
||||
let toastTimer: number | undefined
|
||||
let takeoverStatusTimer: number | undefined
|
||||
|
||||
const takeoverDescription = computed(() => {
|
||||
if (!permissionState.takeover) return '收到私聊消息 3 秒后回复,主人发言时暂停'
|
||||
@@ -203,9 +204,28 @@ const showToast = (message: string) => {
|
||||
|
||||
const togglePermission = (permission: AvatarPermission) => {
|
||||
permissionState[permission] = !permissionState[permission]
|
||||
if (permission === 'takeover') {
|
||||
takeoverStatus.value = null
|
||||
if (!permissionState.takeover && takeoverStatusTimer) {
|
||||
window.clearTimeout(takeoverStatusTimer)
|
||||
takeoverStatusTimer = undefined
|
||||
}
|
||||
}
|
||||
errorMessage.value = ''
|
||||
}
|
||||
|
||||
const scheduleTakeoverStatusRefresh = () => {
|
||||
if (takeoverStatusTimer) window.clearTimeout(takeoverStatusTimer)
|
||||
if (!permissionState.takeover || !activeAvatarId.value) {
|
||||
takeoverStatusTimer = undefined
|
||||
return
|
||||
}
|
||||
takeoverStatusTimer = window.setTimeout(async () => {
|
||||
await loadTakeoverStatus()
|
||||
scheduleTakeoverStatusRefresh()
|
||||
}, 3000)
|
||||
}
|
||||
|
||||
const loadSettings = async () => {
|
||||
if (!activeAvatarId.value) {
|
||||
loading.value = false
|
||||
@@ -217,6 +237,7 @@ const loadSettings = async () => {
|
||||
const settings = await getAvatarPermissionSettings(activeAvatarId.value)
|
||||
setPermissions(settings.permissions || [])
|
||||
await loadTakeoverStatus()
|
||||
scheduleTakeoverStatusRefresh()
|
||||
} catch (error: any) {
|
||||
errorMessage.value = readableError(error, '授权设置加载失败,请稍后重试')
|
||||
} finally {
|
||||
@@ -241,7 +262,7 @@ const saveSettings = async () => {
|
||||
const settings = await updateAvatarPermissionSettings(activeAvatarId.value, selectedPermissions())
|
||||
setPermissions(settings.permissions || [])
|
||||
await loadTakeoverStatus()
|
||||
if (permissionState.takeover) window.setTimeout(loadTakeoverStatus, 1400)
|
||||
scheduleTakeoverStatusRefresh()
|
||||
showToast('授权设置已保存')
|
||||
} catch (error: any) {
|
||||
errorMessage.value = readableError(error, '授权设置保存失败,请重试')
|
||||
@@ -258,6 +279,11 @@ onMounted(async () => {
|
||||
activeAvatarId.value = pickAvatarId(avatarStore.currentAvatarId, avatarStore.avatars) || ''
|
||||
await loadSettings()
|
||||
})
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
if (toastTimer) window.clearTimeout(toastTimer)
|
||||
if (takeoverStatusTimer) window.clearTimeout(takeoverStatusTimer)
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
Reference in New Issue
Block a user