@@ -6,20 +6,75 @@ import {
66 MoonIcon ,
77 PaperClipIcon ,
88} from " @heroicons/vue/20/solid"
9- import { ref , onMounted } from " vue"
9+ import { ref , onMounted , onBeforeUnmount , toRefs , watch } from " vue"
10+ import { useRoute } from " vue-router"
1011import { useStorage , useThrottleFn } from " @vueuse/core"
12+
1113import { appWindow } from " @tauri-apps/api/window"
14+
1215import { useDarkMode } from " ../../composables/useDarkMode"
16+ import { register , unregisterAll } from " @tauri-apps/api/globalShortcut"
17+
18+ const $props = withDefaults (
19+ defineProps <{
20+ titleText? : string
21+ }>(),
22+ {
23+ titleText: " Rocox Codex" ,
24+ }
25+ )
26+ const { titleText } = toRefs ($props )
27+ const $route = useRoute ()
1328
1429const title = ref (" Rocox Codex" )
30+ const titleStack = useStorage <string []>(" rocox-title-stack" , [])
1531const isAlwaysonTop = useStorage (" rocox-always-on-top" , false )
32+ const category = useStorage (" rocox-category" , " angels" )
33+ const categoryNameMap = new Map ([
34+ [" angels" , " 精灵" ],
35+ [" skills" , " 技能" ],
36+ [" items" , " 物品" ],
37+ ])
38+ const routeNameMap = new Map ([
39+ [" Angel" , " 精灵" ],
40+ [" Skill" , " 技能" ],
41+ ])
42+
43+ function updateTitle() {
44+ if (!! $route .meta .titleStorageKey )
45+ title .value =
46+ routeNameMap .get ($route .name as string )! +
47+ localStorage .getItem ($route .meta .titleStorageKey as string )!
48+ else
49+ title .value =
50+ $route .name === " Home" ? categoryNameMap .get (category .value )! : " 关于"
51+ }
52+
53+ watch (
54+ titleText ,
55+ (value ) => {
56+ title .value = value
57+ },
58+ {
59+ immediate: true ,
60+ }
61+ )
62+
63+ watch ($route , (_route ) => {
64+ updateTitle ()
65+ })
66+ watch (category , (_route ) => {
67+ updateTitle ()
68+ })
1669
1770function getIspinnedClass() {
1871 return isAlwaysonTop .value ? " pinned" : null
1972}
73+
2074// Initial top
2175onMounted (async () => {
2276 await appWindow .setAlwaysOnTop (isAlwaysonTop .value )
77+ titleStack .value = []
2378})
2479
2580async function toggleIspinned() {
@@ -50,6 +105,16 @@ function removeMoveClass(event: MouseEvent) {
50105}
51106
52107const { isDarkMode, toggleDarkMode } = useDarkMode ()
108+
109+ onMounted (async () => {
110+ await unregisterAll ()
111+ await register (" CommandOrControl+D" , () => {
112+ toggleDarkMode ()
113+ })
114+ await register (" CommandOrControl+P" , () => {
115+ throttleToggleIspinned ()
116+ })
117+ })
53118 </script >
54119
55120<template >
@@ -58,7 +123,7 @@ const { isDarkMode, toggleDarkMode } = useDarkMode()
58123 <!-- <span class="icon" data-tauri-drag-region>
59124 <img src="../../assets/hf.jpg" alt="!@" />
60125 </span> -->
61- <span data-tauri-drag-region >{{ title }}</span >
126+ <span data-tauri-drag-region >{{ title }} · RoCoX Codex </span >
62127 </span >
63128 <div class =" buttons" data-tauri-drag-region >
64129 <span
@@ -108,7 +173,8 @@ const { isDarkMode, toggleDarkMode } = useDarkMode()
108173}
109174
110175.title {
111- @apply absolute inline-flex items-center top-1/ 2 left-2 text-sm
176+ @apply absolute inline-flex items-center top-1/ 2 left-2
177+ text-sm font-bold
112178 -translate-y-1/ 2 ;
113179}
114180
0 commit comments