add loadingbar

This commit is contained in:
2023-12-26 23:04:03 +08:00
parent 5f02894e90
commit 840dc080a0
12 changed files with 188 additions and 114 deletions

View File

@@ -25,6 +25,7 @@
"html2canvas": "^1.4.1",
"linqts": "^1.15.0",
"mitt": "^3.0.1",
"pinia": "^2.1.7",
"prettier": "^3.1.1",
"qrcode.vue": "^3.4.1",
"queue-typescript": "^1.0.1",

View File

@@ -2,8 +2,9 @@
<NMessageProvider>
<NNotificationProvider>
<NConfigProvider :theme-overrides="themeOverrides" :theme="theme" style="height: 100vh" :locale="zhCN" :date-locale="dateZhCN">
<NLoadingBarProvider>
<Suspense>
<div style="height: 100vh">
<TempComponent>
<NElement style="height: 100%" v-if="layout != 'obs'">
<ViewerLayout v-if="layout == 'viewer'" />
<ManageLayout v-else-if="layout == 'manage'" />
@@ -13,25 +14,28 @@
</template>
</NElement>
<RouterView v-else />
</div>
</TempComponent>
<template #fallback>
<NSpin size="large" show />
</template>
</Suspense>
</NLoadingBarProvider>
</NConfigProvider>
</NNotificationProvider>
</NMessageProvider>
</template>
<script setup lang="ts">
import { useProviderStore } from '@/store/useProviderStore'
import ManageLayout from '@/views/ManageLayout.vue'
import ViewerLayout from '@/views/ViewerLayout.vue'
import { useStorage } from '@vueuse/core'
import { NConfigProvider, NElement, NMessageProvider, NNotificationProvider, NSpin, darkTheme, dateZhCN, useOsTheme, zhCN } from 'naive-ui'
import { computed } from 'vue'
import { NConfigProvider, NElement, NLoadingBarProvider, NMessageProvider, NNotificationProvider, NSpin, darkTheme, dateZhCN, useLoadingBar, useOsTheme, zhCN } from 'naive-ui'
import { computed, defineComponent, onMounted } from 'vue'
import { useRoute } from 'vue-router'
import { ThemeType } from './api/api-models'
import OpenLiveLayout from './views/OpenLiveLayout.vue'
import TempComponent from './components/TempComponent.vue'
const route = useRoute()

View File

@@ -0,0 +1,18 @@
<script setup lang="ts">
import { useProviderStore } from '@/store/useProviderStore'
import { useLoadingBar } from 'naive-ui'
import { onMounted } from 'vue'
// Setup code
onMounted(() => {
const providerStore = useProviderStore()
const loadingBar = useLoadingBar()
providerStore.setLoadingBar(loadingBar)
})
</script>
<template>
<div style="height: 100vh">
<slot></slot>
</div>
</template>

View File

@@ -2,13 +2,17 @@ import { QueryGetAPI } from '@/api/query'
import { BASE_API, apiFail } from '@/data/constants'
import EasySpeech from 'easy-speech'
import { NText, createDiscreteApi } from 'naive-ui'
import { createPinia } from 'pinia'
import { createApp, h } from 'vue'
import App from './App.vue'
import { GetSelfAccount, UpdateAccountLoop } from './api/account'
import { GetNotifactions } from './data/notifactions'
import router from './router'
createApp(App).use(router).mount('#app')
const pinia = createPinia()
const app = createApp(App)
app.use(router).use(pinia).mount('#app')
let currentVersion: string
const { notification } = createDiscreteApi(['notification'])
@@ -20,6 +24,9 @@ QueryGetAPI<string>(BASE_API() + 'vtsuru/version')
localStorage.setItem('Version', currentVersion)
if (currentVersion && savedVersion && savedVersion !== currentVersion) {
setTimeout(() => {
location.reload()
}, 1000)
//alert('发现新的版本更新, 请按 Ctrl+F5 强制刷新页面')
notification.info({
title: '发现新的版本更新',
@@ -27,7 +34,6 @@ QueryGetAPI<string>(BASE_API() + 'vtsuru/version')
duration: 5000,
meta: () => h(NText, { depth: 3 }, () => currentVersion),
})
location.reload()
}
}
})

View File

@@ -1,3 +1,4 @@
import { useProviderStore } from '@/store/useProviderStore'
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
import IndexView from '../views/IndexView.vue'
@@ -355,5 +356,13 @@ const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes,
})
router.beforeEach((to, from, next) => {
useProviderStore().loadingBar?.start()
next()
})
router.afterEach((to, from) => {
const loadingBar = useProviderStore().loadingBar
loadingBar?.finish()
})
export default router

View File

@@ -0,0 +1,13 @@
import { defineStore } from 'pinia'
import { LoadingBarApi } from 'naive-ui'
import { ref } from 'vue'
export const useProviderStore = defineStore('provider', () => {
const loadingBar = ref<LoadingBarApi>()
function setLoadingBar(b: LoadingBarApi) {
loadingBar.value = b
}
return { loadingBar, setLoadingBar }
})

View File

@@ -26,15 +26,12 @@ import { NButton, NCard, NDivider, NLayoutContent, NSpace, NText, NTimeline, NTi
<NButton tag="a" type="info" href="mailto:admin@vtsuru.live" text> admin@vtsuru.live </NButton>
</NText>
<template #footer>
<NSpace vertical>
<span>
开发者:
<NButton type="primary" tag="a" href="https://space.bilibili.com/10021741" target="_blank" text style=""> Megghy </NButton>
</span>
<span> 技术栈: 前端 VUE3 + NAIVE UI, 后端 .NET 8 </span>
<NSpace vertical align="center">
<span style="color: gray"> MADE WITH BY <NButton type="primary" tag="a" href="https://space.bilibili.com/10021741" target="_blank" text style=""> Megghy </NButton> </span>
</NSpace>
<NDivider title-placement="left"> 更新日志 </NDivider>
<NTimeline>
<NTimelineItem type="info" title="功能更新" content="读弹幕支持自定义API" time="2023-12-25" />
<NTimelineItem type="success" title="功能添加" content="弹幕点歌 (点播)" time="2023-12-24" />
<NTimelineItem type="success" title="功能添加" content="读弹幕" time="2023-12-17" />
<NTimelineItem type="success" title="功能添加" content="直播记录" time="2023-12-3" />

View File

@@ -191,6 +191,11 @@ const menuOptions = [
},
{
label: () =>
h(
NTooltip,
{},
{
trigger: () =>
h(NText, () => [
'弹幕相关',
h(
@@ -271,10 +276,12 @@ const menuOptions = [
},
),
]),
default: () => accountInfo.value?.isBiliVerified ? '需要使用直播弹幕的功能' : '你尚未进行 Bilibili 认证, 请前往面板进行绑定',
},
),
key: 'manage-danmaku',
icon: renderIcon(Chat24Filled),
disabled: accountInfo.value?.isEmailVerified == false,
//disabled: accountInfo.value?.isEmailVerified == false,
children: [
{
label: () =>
@@ -289,7 +296,6 @@ const menuOptions = [
),
key: 'manage-liveLottery',
icon: renderIcon(Lottery24Filled),
//disabled: accountInfo.value?.isEmailVerified == false,
},
{
label: () =>
@@ -314,7 +320,6 @@ const menuOptions = [
),
key: 'manage-songRequest',
icon: renderIcon(MusicalNote),
//disabled: accountInfo.value?.isEmailVerified == false,
},
{
label: () =>
@@ -339,7 +344,6 @@ const menuOptions = [
),
key: 'manage-musicRequest',
icon: renderIcon(MusicalNote),
//disabled: accountInfo.value?.isEmailVerified == false,
},
{
label: () =>
@@ -354,7 +358,6 @@ const menuOptions = [
),
key: 'manage-liveQueue',
icon: renderIcon(PeopleQueue24Filled),
//disabled: accountInfo.value?.isEmailVerified == false,
},
{
label: () =>
@@ -369,7 +372,6 @@ const menuOptions = [
),
key: 'manage-speech',
icon: renderIcon(TabletSpeaker24Filled),
//disabled: accountInfo.value?.isEmailVerified == false,
},
],
},

View File

@@ -6,7 +6,7 @@ import EventFetcherStatusCard from '@/components/EventFetcherStatusCard.vue'
import { ACCOUNT_API_URL, TURNSTILE_KEY } from '@/data/constants'
import { Question24Regular } from '@vicons/fluent'
import { useLocalStorage } from '@vueuse/core'
import { NAlert, NButton, NCard, NCountdown, NDivider, NEllipsis, NIcon, NInput, NInputGroup, NModal, NPopconfirm, NSpace, NTag, NText, NTime, NTooltip, useMessage } from 'naive-ui'
import { NAlert, NButton, NCard, NCountdown, NDivider, NEllipsis, NIcon, NInput, NInputGroup, NModal, NPopconfirm, NSpace, NTag, NText, NTime, NTooltip, useLoadingBar, useMessage } from 'naive-ui'
import { onUnmounted, ref } from 'vue'
import VueTurnstile from 'vue-turnstile'
import SettingsManageView from './SettingsManageView.vue'

View File

@@ -506,7 +506,7 @@ onUnmounted(() => {
<NAlert v-if="!speechSynthesisInfo || !speechSynthesisInfo.speechSynthesis" type="error"> 你的浏览器不支持语音功能 </NAlert>
<template v-else>
<NSpace vertical>
<NAlert type="info">
<NAlert v-if="settings.voiceType == 'local'" type="info" closeable >
建议在 Edge 浏览器使用
<NTooltip>
<template #trigger>
@@ -668,10 +668,10 @@ onUnmounted(() => {
</NButton>
将被替换为要念的文本
</NAlert>
<NAlert v-if="isVtsuruVoiceAPI" type="success">
<NAlert v-if="isVtsuruVoiceAPI" type="success" closable>
看起来你正在使用本站提供的测试API (voice.vtsuru.live), 这个接口将会返回
<NButton text type="info" tag="a" href="https://space.bilibili.com/5859321" target="_blank"> Xz乔希 </NButton>
训练的 Taffy 模型结果, 不支持部分英文, 侵删
训练的 Taffy 模型结果, 不支持部分英文, 仅用于测试 侵删
</NAlert>
</NSpace>
<br />

View File

@@ -6,12 +6,16 @@ import { defineConfig } from 'vite';
import svgLoader from 'vite-svg-loader';
export default defineConfig({
plugins: [vue({
plugins: [
vue({
script: {
propsDestructure: true,
defineModel: true
}
}), svgLoader(), vueJsx()],
defineModel: true,
},
}),
svgLoader(),
vueJsx(),
],
resolve: {
alias: {
'@': path.resolve(__dirname, 'src'),

View File

@@ -4061,6 +4061,25 @@ __metadata:
languageName: node
linkType: hard
"pinia@npm:^2.1.7":
version: 2.1.7
resolution: "pinia@npm:2.1.7"
dependencies:
"@vue/devtools-api": "npm:^6.5.0"
vue-demi: "npm:>=0.14.5"
peerDependencies:
"@vue/composition-api": ^1.4.0
typescript: ">=4.4.4"
vue: ^2.6.14 || ^3.3.0
peerDependenciesMeta:
"@vue/composition-api":
optional: true
typescript:
optional: true
checksum: f4380a4db04b5b8565ed8a6843821d91f8f650d79dd9f0094005248bd963521b8a73419032fda76541e59b895b0e7852e67ca9d0408162cc391ce5a1bcbda445
languageName: node
linkType: hard
"postcss-selector-parser@npm:^6.0.13":
version: 6.0.13
resolution: "postcss-selector-parser@npm:6.0.13"
@@ -5041,6 +5060,7 @@ __metadata:
linqts: "npm:^1.15.0"
mitt: "npm:^3.0.1"
naive-ui: "npm:^2.36.0"
pinia: "npm:^2.1.7"
prettier: "npm:^3.1.1"
qrcode.vue: "npm:^3.4.1"
queue-typescript: "npm:^1.0.1"
@@ -5060,7 +5080,7 @@ __metadata:
languageName: unknown
linkType: soft
"vue-demi@npm:>=0.14.6, vue-demi@npm:latest":
"vue-demi@npm:>=0.14.5, vue-demi@npm:>=0.14.6, vue-demi@npm:latest":
version: 0.14.6
resolution: "vue-demi@npm:0.14.6"
peerDependencies: