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