screenshots,
description: result.description || null,
translatedDescription: null,
- va: result.va || [],
- vntags: [],
+ va,
+ tags,
+ relations,
+ extlinks,
play_hours,
length_minute,
length_votes,
length_color,
book_length,
rating: result.rating || undefined,
+ average: result.average || undefined,
votecount: result.votecount || undefined,
released: result.released || undefined,
developers: developers.length > 0 ? developers : undefined,
platforms: result.platforms || undefined,
+ languages: result.languages || undefined,
+ olang: result.olang || undefined,
+ devstatus: result.devstatus,
}
// 检查代理并替换 URL
diff --git a/src/components/ImageViewer.vue b/src/components/ImageViewer.vue
new file mode 100644
index 0000000..db38c3b
--- /dev/null
+++ b/src/components/ImageViewer.vue
@@ -0,0 +1,817 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 图片加载失败
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/VndbPanel.vue b/src/components/VndbPanel.vue
index 0bf6864..8b841bb 100644
--- a/src/components/VndbPanel.vue
+++ b/src/components/VndbPanel.vue
@@ -13,7 +13,7 @@
'fixed z-50 flex flex-col vndb-page shadow-2xl shadow-black/20',
isFullscreen
? 'inset-0'
- : 'inset-0 md:inset-6 md:m-auto md:w-[600px] md:min-w-[400px] md:max-w-[800px] md:h-[500px] md:max-h-[calc(100%-3rem)] md:rounded-3xl'
+ : 'inset-0 md:inset-6 md:m-auto md:w-[800px] md:min-w-[700px] md:max-w-[1000px] md:h-[700px] md:max-h-[calc(100%-3rem)] md:rounded-3xl'
]"
:style="windowStyle"
>
@@ -88,19 +88,18 @@
-
-
+
@@ -181,10 +180,53 @@
v-text-scroll
class="text-base font-bold text-gray-800 dark:text-white"
>
- {{ searchStore.vndbInfo.developers.join(', ') }}
+ {{ searchStore.vndbInfo.developers.map(d => d.name).join(', ') }}
+
+
+
+
+
+
+
+
开发状态
+
+ {{ formatDevStatus(searchStore.vndbInfo.devstatus) }}
+
+
+
+
+
+
+
+
+
+
+
原始语言
+
+ {{ formatLanguage(searchStore.vndbInfo.olang) }}
+
+
+
+
+
+
+
+
+
+
支持语言
+
+
+
+ {{ formatLanguage(lang) }}
+
+
@@ -204,6 +246,154 @@
+
+
+
+
+
+
标签
+ (按相关性排序)
+
+
+
+
+
+
+
+
+
+
+
+ {{ getTagDisplayName(tag) }}
+
+
+
+ 分类:
+
+ 内容
+
+
+ 技术
+
+
+ 色情
+
+
+
+
+
+
+
+
+
声优
+ ({{ searchStore.vndbInfo.va.length }})
+
+
+
+ 还有 {{ searchStore.vndbInfo.va.length - 10 }} 位声优...
+
+
+
+
+
+
+
+
相关作品
+
+
+
+ 还有 {{ searchStore.vndbInfo.relations.length - 8 }} 个相关作品...
+
+
+
+
+
+
@@ -269,13 +459,11 @@
游戏截图
-
-
+
@@ -301,6 +489,7 @@ import { useUIStore } from '@/stores/ui'
import { translateText } from '@/api/search'
import { playClick, playSuccess, playError, playToggle, playTransitionUp, playTransitionDown, playSwipe } from '@/composables/useSound'
import { animate } from '@/composables/useAnime'
+import { useImageViewer } from '@/composables/useImageViewer'
import {
BookOpen,
ChevronLeft,
@@ -321,10 +510,19 @@ import {
Maximize2,
Minimize2,
X,
+ Tag,
+ Mic,
+ Link2,
+ GitBranch,
+ Globe,
+ Gamepad2,
} from 'lucide-vue-next'
import { useWindowManager, type ResizeDirection } from '@/composables/useWindowManager'
import WindowResizeHandles from '@/components/WindowResizeHandles.vue'
+// 图片预览
+const imageViewer = useImageViewer()
+
// 进入/离开动画
function onEnter(el: Element, done: () => void) {
animate(el as HTMLElement, {
@@ -355,6 +553,12 @@ const translatedDescription = ref(null)
const showOriginal = ref(false)
const translateError = ref(false)
+// 标签翻译状态
+const isTranslatingTags = ref(false)
+const translatedTags = ref