Files
vtsuru.live/src/data/Initializer.ts
Megghy 45338ffe7d feat: Enhance message content handling and improve UI components
- Updated `getShowContentParts` function to handle message content more robustly, ensuring proper display of content parts.
- Refactored `GamepadViewer.vue` to use async component loading for `GamepadDisplay`, added a toggle for real-time preview.
- Implemented debounced search functionality in `PointGoodsView.vue` for improved performance during keyword searches.
- Enhanced `PointOrderView.vue` with order filtering capabilities and added statistics display for better user insights.
- Improved `PointUserHistoryView.vue` by adding export functionality for history data and enhanced filtering options.
- Updated `PointUserLayout.vue` to improve card styling and tab navigation experience.
- Refined `PointUserSettings.vue` layout for better user interaction and added responsive design adjustments.
- Adjusted `vite.config.mts` for better dependency management and build optimization.
2025-10-05 15:13:47 +08:00

152 lines
4.9 KiB
TypeScript

import EasySpeech from 'easy-speech'
import { createDiscreteApi, NButton, NFlex, NText } from 'naive-ui'
import { h } from 'vue'
import { GetSelfAccount, UpdateAccountLoop, useAccount } from '@/api/account'
import { QueryGetAPI } from '@/api/query'
import { useBiliAuth } from '@/store/useBiliAuth'
import { useNotificationStore } from '@/store/useNotificationStore'
import { apiFail, BASE_API_URL, isTauri } from './constants'
import { GetNotifactions } from './notifactions'
let currentVersion: string
let isHaveNewVersion = false
const { notification } = createDiscreteApi(['notification'])
export function InitVTsuru() {
QueryGetAPI<string>(`${BASE_API_URL}vtsuru/version`)
.then((version) => {
if (version.code == 200) {
currentVersion = version.data
const savedVersion = localStorage.getItem('Version')
localStorage.setItem('Version', currentVersion)
if (currentVersion && savedVersion && savedVersion !== currentVersion) {
setTimeout(() => {
location.reload()
}, 1000)
// alert('发现新的版本更新, 请按 Ctrl+F5 强制刷新页面')
notification.info({
title: '发现新的版本更新',
content: '将自动刷新页面',
duration: 5000,
meta: () => h(NText, { depth: 3 }, () => currentVersion),
})
} else {
InitVersionCheck()
}
}
InitOther()
})
.catch(() => {
apiFail.value = true
console.log('默认API调用失败, 切换至故障转移节点')
})
.finally(async () => {
})
}
async function InitOther() {
if (process.env.NODE_ENV !== 'development' && !window.$route.path.startsWith('/obs')) {
const mod = await import('@hyperdx/browser')
const HyperDX = (mod as any).default ?? mod
HyperDX.init({
apiKey: '7d1eb66c-24b8-445e-a406-dc2329fa9423',
service: 'vtsuru.live',
tracePropagationTargets: [/vtsuru.suki.club/i], // Set to link traces from frontend to backend requests
// consoleCapture: true, // Capture console logs (default false)
advancedNetworkCapture: true, // Capture full HTTP request/response headers and bodies (default false)
ignoreUrls: [/localhost/i],
})
// 将实例挂到窗口,便于后续设置全局属性(可选)
;(window as any).__HyperDX__ = HyperDX
}
// 加载其他数据
InitTTS()
await GetSelfAccount()
const account = useAccount()
const useAuth = useBiliAuth()
if (account.value.id) {
if (account.value.biliUserAuthInfo && !useAuth.currentToken) {
useAuth.currentToken = account.value.biliUserAuthInfo.token
}
const HyperDX = (window as any).__HyperDX__
HyperDX?.setGlobalAttributes({
userId: account.value.id.toString(),
userName: account.value.name,
})
}
useAuth.getAuthInfo()
GetNotifactions()
UpdateAccountLoop()
useNotificationStore().init()
}
function InitVersionCheck() {
setInterval(() => {
if (isHaveNewVersion) {
return
}
QueryGetAPI<string>(`${BASE_API_URL}vtsuru/version`).then(
(keepCheckData) => {
if (
keepCheckData.code == 200
&& keepCheckData.data != currentVersion
) {
isHaveNewVersion = true
currentVersion = keepCheckData.data
localStorage.setItem('Version', currentVersion)
console.log(`[vtsuru] 发现新版本: ${currentVersion}`)
if (window.$route.meta.forceReload || isTauri()) {
location.reload()
} else {
const n = notification.info({
title: '发现新的版本更新',
content: '是否现在刷新?',
meta: () => h(NText, { depth: 3 }, () => currentVersion),
action: () =>
h(NFlex, null, () => [
h(
NButton,
{
text: true,
type: 'primary',
onClick: () => location.reload(),
size: 'small',
},
{ default: () => '刷新' },
),
h(
NButton,
{
text: true,
onClick: () => n.destroy(),
size: 'small',
},
{ default: () => '稍后' },
),
]),
})
}
}
},
)
}, 60 * 1000)
}
function InitTTS() {
try {
const result = EasySpeech.detect()
if (result.speechSynthesis) {
EasySpeech.init({ maxTimeout: 5000, interval: 250 })
.then(() => console.log('[SpeechSynthesis] 已加载tts服务'))
.catch(e => console.error(e))
} else {
console.log('[SpeechSynthesis] 当前浏览器不支持tts服务')
}
} catch {
console.log('[SpeechSynthesis] 当前浏览器不支持tts服务')
}
}