mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-26 01:33:05 +00:00
104 lines
2.8 KiB
Vue
104 lines
2.8 KiB
Vue
<template>
|
|
<component
|
|
v-if="chat_show && init_data_end"
|
|
:applicationAvailable="applicationAvailable"
|
|
:is="currentTemplate"
|
|
:application_profile="application_profile"
|
|
:key="route.fullPath"
|
|
v-loading="loading"
|
|
/>
|
|
<Auth
|
|
v-else
|
|
:application_profile="application_profile"
|
|
:auth_type="application_profile.authentication_type"
|
|
v-model="is_auth"
|
|
:style="{
|
|
'--el-color-primary': application_profile?.custom_theme?.theme_color,
|
|
'--el-color-primary-light-9': hexToRgba(application_profile?.custom_theme?.theme_color, 0.1)
|
|
}"
|
|
></Auth>
|
|
</template>
|
|
<script setup lang="ts">
|
|
import { ref, onBeforeMount, computed } from 'vue'
|
|
import { useRoute } from 'vue-router'
|
|
import useStore from '@/stores'
|
|
import Auth from '@/views/chat/auth/index.vue'
|
|
import { hexToRgba } from '@/utils/theme'
|
|
import { useI18n } from 'vue-i18n'
|
|
import { getBrowserLang } from '@/locales/index'
|
|
const { locale } = useI18n({ useScope: 'global' })
|
|
const route = useRoute()
|
|
const { application, user } = useStore()
|
|
|
|
const components: any = import.meta.glob('@/views/chat/**/index.vue', {
|
|
eager: true
|
|
})
|
|
|
|
const {
|
|
query: { mode },
|
|
params: { accessToken }
|
|
} = route as any
|
|
const is_auth = ref<boolean>(false)
|
|
const currentTemplate = computed(() => {
|
|
let modeName = ''
|
|
if (!mode || mode === 'pc') {
|
|
modeName = show_history.value || !user.isEnterprise() ? 'pc' : 'base'
|
|
} else {
|
|
modeName = mode
|
|
}
|
|
const name = `/src/views/chat/${modeName}/index.vue`
|
|
return components[name].default
|
|
})
|
|
/**
|
|
* 是否显示对话
|
|
*/
|
|
const chat_show = computed(() => {
|
|
if (init_data_end.value) {
|
|
if (!applicationAvailable.value) {
|
|
return true
|
|
}
|
|
if (application_profile.value) {
|
|
if (application_profile.value.authentication && is_auth.value) {
|
|
return true
|
|
} else if (!application_profile.value.authentication) {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
return false
|
|
})
|
|
const loading = ref(false)
|
|
|
|
const show_history = ref(false)
|
|
|
|
const application_profile = ref<any>({})
|
|
/**
|
|
|
|
* 初始化结束
|
|
*/
|
|
const init_data_end = ref<boolean>(false)
|
|
|
|
const applicationAvailable = ref<boolean>(true)
|
|
function getAppProfile() {
|
|
return application.asyncGetAppProfile(loading).then((res: any) => {
|
|
locale.value = res.data?.language || getBrowserLang()
|
|
show_history.value = res.data?.show_history
|
|
application_profile.value = res.data
|
|
})
|
|
}
|
|
function getAccessToken(token: string) {
|
|
return application.asyncAppAuthentication(token, loading).then(() => {
|
|
return getAppProfile()
|
|
})
|
|
}
|
|
onBeforeMount(() => {
|
|
user.changeUserType(2, accessToken)
|
|
Promise.all([user.asyncGetProfile(), getAccessToken(accessToken)])
|
|
.catch(() => {
|
|
applicationAvailable.value = false
|
|
})
|
|
.finally(() => (init_data_end.value = true))
|
|
})
|
|
</script>
|
|
<style lang="scss"></style>
|