launcher/ui/src/App.vue
li-xiaochen 1c484d3f77 功能修复:在无网络情况下启动器无法使用
在加载配置完成后取消加载中状态,把一些不影响功能使用的操作后置
2024-12-26 08:57:15 +08:00

120 lines
3.1 KiB
Vue

<script setup>
import Init from '@/pages/Init.vue'
import Launch from '@/pages/Launch.vue'
import Update from '@/pages/Update.vue'
import Fix from '@/pages/Fix.vue'
import { dateZhCN, zhCN } from 'naive-ui'
import Settings from '@/pages/Settings.vue'
import { useConfigStore } from '@/stores/config.js'
const configStore = useConfigStore()
const loading = ref(true)
const page = ref(null)
let conf
function show_doc() {
window.open('https://hedgedoc.zhaozuohong.vip/s/LfSzK2n0K', '_blank')
}
async function init_version() {
version.value = await pywebview.api.get_version()
new_version.value = await pywebview.api.get_new_version()
if (new_version.value.tag_name > version.value) {
update_able.value = true
}
}
async function initialize_config() {
await configStore.load_config()
conf = configStore.config
loading.value = false
if (!conf.is_already_show_doc) {
show_doc()
conf.is_already_show_doc = true
}
await init_version()
}
const log = ref('')
provide('log', log)
const log_ele = ref(null)
provide('log_ele', log_ele)
watch(log, () => {
nextTick(() => {
log_ele.value?.scrollTo({ position: 'bottom' })
})
})
onMounted(() => {
if (window.pywebview && pywebview.api) {
initialize_config()
} else {
window.addEventListener('pywebviewready', () => {
initialize_config()
})
}
window.addEventListener('log', (e) => {
log.value += e.detail.log
})
})
function set_page(value) {
log.value = ''
}
const running = ref(false)
provide('running', running)
const steps = ref([])
provide('steps', steps)
const update_able = ref(false)
provide('update_able', update_able)
const version = ref('')
provide('version', version)
const new_version = ref({})
provide('new_version', new_version)
</script>
<template>
<n-config-provider :locale="zhCN" :dateLocale="dateZhCN">
<n-spin v-if="loading" class="container">
<template #description>加载中</template>
</n-spin>
<n-notification-provider v-else>
<n-tabs
type="card"
placement="left"
class="container"
v-model:value="conf.page"
@update:value="set_page"
>
<n-tab-pane :disabled="running" name="init" tab="初始化"><init /></n-tab-pane>
<n-tab-pane :disabled="running" name="update" tab="更新代码"><update /></n-tab-pane>
<n-tab-pane :disabled="running" name="launch" tab="启动程序"><launch /></n-tab-pane>
<n-tab-pane :disabled="running" name="fix" tab="依赖修复"><fix /></n-tab-pane>
<n-tab-pane :disabled="running" name="settings">
<template #tab>
<n-space :wrap="false">
设置
<n-tag v-if="update_able" round type="success"></n-tag>
</n-space>
</template>
<settings />
</n-tab-pane>
<template #suffix>
<n-button type="primary" secondary size="small" @click="show_doc">帮助文档</n-button>
</template>
</n-tabs>
</n-notification-provider>
<n-global-style />
</n-config-provider>
</template>
<style scoped>
.container {
width: 100vw;
height: 100vh;
}
</style>