Skip to content

Commit b33b90c

Browse files
author
ricardo
committed
refactor(frontend): 重构前端项目结构及组件命名
- 适配 `vue-router@5` 文件路由 - 更新 `README.md` 项目结构
1 parent 85a4db9 commit b33b90c

32 files changed

+636
-471
lines changed

README.md

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
# VSingerBoard - 您的专属虚拟主播点歌台
99

10-
![Release Status](https://github.com/zangxx66/VSingerBoard/actions/workflows/release.yml/badge.svg) ![Push Status](https://github.com/zangxx66/VSingerBoard/actions/workflows/push.yml/badge.svg) ![Python Version](https://img.shields.io/badge/python-3.12-blue.svg) ![Node.js Version](https://img.shields.io/badge/node.js-24.0-blue.svg) ![License](https://img.shields.io/badge/license-GPL--3.0-green.svg)
10+
![Release Status](https://github.com/zangxx66/VSingerBoard/actions/workflows/release.yml/badge.svg) ![Push Status](https://github.com/zangxx66/VSingerBoard/actions/workflows/ci.yml/badge.svg) ![Python Version](https://img.shields.io/badge/python-3.12-blue.svg) ![Node.js Version](https://img.shields.io/badge/node.js-24.0-blue.svg) ![License](https://img.shields.io/badge/license-GPL--3.0-green.svg)
1111

1212
</div>
1313

@@ -58,38 +58,38 @@
5858

5959
```
6060
.
61-
├── .github/ # GitHub Actions 配置文件
62-
│ └── workflows/ # 自动化工作流定义
63-
├── doc/ # 项目文档和截图
64-
├── frontend/ # 前端项目源代码
65-
│ ├── public/ # 静态文件
66-
└── images/ # 图片资源
67-
── src/ # 前端核心代码
68-
│ ├── api/ # API 服务定义
69-
│ ├── assets/ # 静态资源文件
70-
│ ├── components/ # Vue 组件
71-
│ ├── pages/ # Vue 页面组件
72-
│ ├── router/ # Vue Router 配置
73-
│ ├── stores/ # Pinia 状态管理
74-
│ ├── types/ # TypeScript 类型定义
75-
│ └── utils/ # 前端工具函数
76-
├── hooks/ # PyInstaller 钩子文件
77-
├── resources/ # 应用程序运行时资源文件
78-
│ ├── douyinjs/ # 抖音直播相关 JavaScript 文件
79-
│ ├── icons/ # 应用程序图标
80-
│ └── Notificator.app/ # macOS 应用程序包
81-
├── src/ # 后端 Python 源代码
82-
│ ├── database/ # 数据库模型和操作
83-
│ ├── douyin/ # 抖音直播相关逻辑
84-
│ │ └── lib/ # 抖音库文件
85-
│ ├── jsBridge/ # Python 与 JavaScript 桥接逻辑
86-
│ ├── live/ # 直播平台实现
87-
│ ├── manager/ # 核心管理器模块
88-
│ ├── notifypy/ # 通知功能库
89-
│ │ └── os_notifiers/ # 操作系统特定的通知实现
90-
│ ├── server/ # FastAPI 后端服务
91-
│ └── utils/ # 后端通用工具函数和模块
92-
└── tests/ # 单元测试
61+
├── .github/ # GitHub Actions CI/CD 工作流
62+
│ └── workflows/ # 自动化工作流定义
63+
├── doc/ # 项目文档和图片
64+
├── frontend/ # 前端Vue应用源码
65+
│ ├── public/ # 前端静态资源
66+
│ └── src/ # 前端核心代码
67+
── api/ # API 服务定义
68+
│ ├── assets/ # 静态资源(如CSS,图片)
69+
│ ├── components/ # Vue 公共组件
70+
│ ├── layouts/ # 布局组件
71+
│ ├── pages/ # 页面组件
72+
│ ├── router/ # Vue Router 配置
73+
│ ├── stores/ # Pinia 状态管理
74+
│ ├── types/ # TypeScript 类型定义
75+
│ └── utils/ # 前端工具函数
76+
├── hooks/ # PyInstaller打包钩子
77+
├── resources/ # 应用打包所需资源
78+
│ ├── douyinjs/ # 抖音签名相关JS文件
79+
│ ├── icons/ # 应用图标
80+
│ └── Notificator.app/ # macOS通知程序
81+
├── src/ # Python后端应用源码
82+
│ ├── database/ # 数据库模型和操作
83+
│ ├── douyin/ # 抖音直播相关逻辑
84+
│ │ └── lib/ # Protobuf编译库
85+
│ ├── jsBridge/ # Python与JavaScript桥接
86+
│ ├── live/ # 各直播平台实现
87+
│ ├── manager/ # 核心管理器模块
88+
│ ├── notifypy/ # 跨平台桌面通知库
89+
│ │ └── os_notifiers/ # 特定操作系统的通知实现
90+
│ ├── server/ # FastAPI后端服务
91+
│ └── utils/ # 后端通用工具函数
92+
└── tests/ # 测试代码
9393
```
9494

9595
## 🤝 如何贡献

frontend/auto-imports.d.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,6 @@ declare global {
204204
const useIntervalStore: typeof import('./src/stores/interval').useIntervalStore
205205
const useKeyModifier: typeof import('@vueuse/core').useKeyModifier
206206
const useLastChanged: typeof import('@vueuse/core').useLastChanged
207-
const useLink: typeof import('vue-router').useLink
208207
const useLocalStorage: typeof import('@vueuse/core').useLocalStorage
209208
const useMagicKeys: typeof import('@vueuse/core').useMagicKeys
210209
const useManualRefHistory: typeof import('@vueuse/core').useManualRefHistory

frontend/components.d.ts

Lines changed: 26 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,23 @@ export {}
1313
declare module 'vue' {
1414
export interface GlobalComponents {
1515
About: typeof import('./src/pages/about/index.vue')['default']
16-
AddPlaylistDialog: typeof import('./src/components/playlist/addPlaylistDialog.vue')['default']
17-
AddSingDialog: typeof import('./src/components/home/addSingDialog.vue')['default']
18-
AppSettingTab: typeof import('./src/components/settings/appSettingTab.vue')['default']
19-
BiliCredential: typeof import('./src/components/settings/biliCredential.vue')['default']
20-
BiliTab: typeof import('./src/components/settings/biliTab.vue')['default']
16+
AddPlaylistDialog: typeof import('./src/components/playlist/add-playlist-dialog.vue')['default']
17+
AddSingDialog: typeof import('./src/components/home/add-sing-dialog.vue')['default']
18+
AppSettingTab: typeof import('./src/components/settings/app-setting-tab.vue')['default']
19+
BiliCredential: typeof import('./src/components/settings/bili-credential.vue')['default']
20+
BiliTab: typeof import('./src/components/settings/bili-tab.vue')['default']
2121
Changelog: typeof import('./src/pages/changelog/index.vue')['default']
2222
Danmaku: typeof import('./src/pages/danmaku/index.vue')['default']
23-
DyTab: typeof import('./src/components/settings/dyTab.vue')['default']
24-
ElAlert: typeof import('element-plus/es')['ElAlert']
23+
DyTab: typeof import('./src/components/settings/dy-tab.vue')['default']
2524
ElAside: typeof import('element-plus/es')['ElAside']
2625
ElAutoResizer: typeof import('element-plus/es')['ElAutoResizer']
2726
ElBacktop: typeof import('element-plus/es')['ElBacktop']
2827
ElButton: typeof import('element-plus/es')['ElButton']
2928
ElCard: typeof import('element-plus/es')['ElCard']
3029
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
3130
ElContainer: typeof import('element-plus/es')['ElContainer']
32-
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
3331
ElDialog: typeof import('element-plus/es')['ElDialog']
3432
ElDivider: typeof import('element-plus/es')['ElDivider']
35-
ElEmpty: typeof import('element-plus/es')['ElEmpty']
3633
ElForm: typeof import('element-plus/es')['ElForm']
3734
ElFormItem: typeof import('element-plus/es')['ElFormItem']
3835
ElIcon: typeof import('element-plus/es')['ElIcon']
@@ -46,25 +43,20 @@ declare module 'vue' {
4643
ElRadio: typeof import('element-plus/es')['ElRadio']
4744
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
4845
ElSelect: typeof import('element-plus/es')['ElSelect']
49-
ElSplitter: typeof import('element-plus/es')['ElSplitter']
50-
ElSplitterPanel: typeof import('element-plus/es')['ElSplitterPanel']
51-
ElSwitch: typeof import('element-plus/es')['ElSwitch']
5246
ElTableV2: typeof import('element-plus/es')['ElTableV2']
53-
ElTabPane: typeof import('element-plus/es')['ElTabPane']
54-
ElTabs: typeof import('element-plus/es')['ElTabs']
5547
ElText: typeof import('element-plus/es')['ElText']
5648
ElTooltip: typeof import('element-plus/es')['ElTooltip']
5749
ElTour: typeof import('element-plus/es')['ElTour']
5850
ElTourStep: typeof import('element-plus/es')['ElTourStep']
5951
ElUpload: typeof import('element-plus/es')['ElUpload']
60-
FansClub: typeof import('./src/components/common/fansClub.tsx')['default']
61-
FansMedal: typeof import('./src/components/common/fansMedal.tsx')['default']
52+
FansClub: typeof import('./src/components/common/fans-club.tsx')['default']
53+
FansMedal: typeof import('./src/components/common/fans-medal.tsx')['default']
6254
History: typeof import('./src/pages/history/index.vue')['default']
63-
Home: typeof import('./src/pages/home/index.vue')['default']
64-
LineHeader: typeof import('./src/components/common/lineHeader.tsx')['default']
65-
LinkIcon: typeof import('./src/components/common/linkIcon.tsx')['default']
66-
ObsSetting: typeof import('./src/components/settings/obsSetting.vue')['default']
67-
PlatformStatus: typeof import('./src/components/home/platformStatus.vue')['default']
55+
LineHeader: typeof import('./src/components/common/line-header.tsx')['default']
56+
LinkIcon: typeof import('./src/components/common/link-icon.tsx')['default']
57+
ObsSetting: typeof import('./src/components/settings/obs-setting.vue')['default']
58+
Pages: typeof import('./src/pages/index.vue')['default']
59+
PlatformStatus: typeof import('./src/components/home/platform-status.vue')['default']
6860
Playlist: typeof import('./src/pages/playlist/index.vue')['default']
6961
RouterLink: typeof import('vue-router')['RouterLink']
7062
RouterView: typeof import('vue-router')['RouterView']
@@ -79,26 +71,23 @@ declare module 'vue' {
7971
// For TSX support
8072
declare global {
8173
const About: typeof import('./src/pages/about/index.vue')['default']
82-
const AddPlaylistDialog: typeof import('./src/components/playlist/addPlaylistDialog.vue')['default']
83-
const AddSingDialog: typeof import('./src/components/home/addSingDialog.vue')['default']
84-
const AppSettingTab: typeof import('./src/components/settings/appSettingTab.vue')['default']
85-
const BiliCredential: typeof import('./src/components/settings/biliCredential.vue')['default']
86-
const BiliTab: typeof import('./src/components/settings/biliTab.vue')['default']
74+
const AddPlaylistDialog: typeof import('./src/components/playlist/add-playlist-dialog.vue')['default']
75+
const AddSingDialog: typeof import('./src/components/home/add-sing-dialog.vue')['default']
76+
const AppSettingTab: typeof import('./src/components/settings/app-setting-tab.vue')['default']
77+
const BiliCredential: typeof import('./src/components/settings/bili-credential.vue')['default']
78+
const BiliTab: typeof import('./src/components/settings/bili-tab.vue')['default']
8779
const Changelog: typeof import('./src/pages/changelog/index.vue')['default']
8880
const Danmaku: typeof import('./src/pages/danmaku/index.vue')['default']
89-
const DyTab: typeof import('./src/components/settings/dyTab.vue')['default']
90-
const ElAlert: typeof import('element-plus/es')['ElAlert']
81+
const DyTab: typeof import('./src/components/settings/dy-tab.vue')['default']
9182
const ElAside: typeof import('element-plus/es')['ElAside']
9283
const ElAutoResizer: typeof import('element-plus/es')['ElAutoResizer']
9384
const ElBacktop: typeof import('element-plus/es')['ElBacktop']
9485
const ElButton: typeof import('element-plus/es')['ElButton']
9586
const ElCard: typeof import('element-plus/es')['ElCard']
9687
const ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
9788
const ElContainer: typeof import('element-plus/es')['ElContainer']
98-
const ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
9989
const ElDialog: typeof import('element-plus/es')['ElDialog']
10090
const ElDivider: typeof import('element-plus/es')['ElDivider']
101-
const ElEmpty: typeof import('element-plus/es')['ElEmpty']
10291
const ElForm: typeof import('element-plus/es')['ElForm']
10392
const ElFormItem: typeof import('element-plus/es')['ElFormItem']
10493
const ElIcon: typeof import('element-plus/es')['ElIcon']
@@ -112,25 +101,20 @@ declare global {
112101
const ElRadio: typeof import('element-plus/es')['ElRadio']
113102
const ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
114103
const ElSelect: typeof import('element-plus/es')['ElSelect']
115-
const ElSplitter: typeof import('element-plus/es')['ElSplitter']
116-
const ElSplitterPanel: typeof import('element-plus/es')['ElSplitterPanel']
117-
const ElSwitch: typeof import('element-plus/es')['ElSwitch']
118104
const ElTableV2: typeof import('element-plus/es')['ElTableV2']
119-
const ElTabPane: typeof import('element-plus/es')['ElTabPane']
120-
const ElTabs: typeof import('element-plus/es')['ElTabs']
121105
const ElText: typeof import('element-plus/es')['ElText']
122106
const ElTooltip: typeof import('element-plus/es')['ElTooltip']
123107
const ElTour: typeof import('element-plus/es')['ElTour']
124108
const ElTourStep: typeof import('element-plus/es')['ElTourStep']
125109
const ElUpload: typeof import('element-plus/es')['ElUpload']
126-
const FansClub: typeof import('./src/components/common/fansClub.tsx')['default']
127-
const FansMedal: typeof import('./src/components/common/fansMedal.tsx')['default']
110+
const FansClub: typeof import('./src/components/common/fans-club.tsx')['default']
111+
const FansMedal: typeof import('./src/components/common/fans-medal.tsx')['default']
128112
const History: typeof import('./src/pages/history/index.vue')['default']
129-
const Home: typeof import('./src/pages/home/index.vue')['default']
130-
const LineHeader: typeof import('./src/components/common/lineHeader.tsx')['default']
131-
const LinkIcon: typeof import('./src/components/common/linkIcon.tsx')['default']
132-
const ObsSetting: typeof import('./src/components/settings/obsSetting.vue')['default']
133-
const PlatformStatus: typeof import('./src/components/home/platformStatus.vue')['default']
113+
const LineHeader: typeof import('./src/components/common/line-header.tsx')['default']
114+
const LinkIcon: typeof import('./src/components/common/link-icon.tsx')['default']
115+
const ObsSetting: typeof import('./src/components/settings/obs-setting.vue')['default']
116+
const Pages: typeof import('./src/pages/index.vue')['default']
117+
const PlatformStatus: typeof import('./src/components/home/platform-status.vue')['default']
134118
const Playlist: typeof import('./src/pages/playlist/index.vue')['default']
135119
const RouterLink: typeof import('vue-router')['RouterLink']
136120
const RouterView: typeof import('vue-router')['RouterView']

frontend/env.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
/// <reference types="vite/client" />
2+
/// <reference types="unplugin-vue-router/client" />
3+
24
declare interface Window {
35
pywebview: {
46
api: {

frontend/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,11 @@
5151
"unplugin-auto-import": "^21.0.0",
5252
"unplugin-icons": "^23.0.1",
5353
"unplugin-vue-components": "^31.0.0",
54+
"unplugin-vue-router": "^0.19.2",
5455
"vite": "^7.3.1",
56+
"vite-plugin-pages": "^0.33.3",
5557
"vite-plugin-vue-devtools": "^8.0.5",
58+
"vite-plugin-vue-layouts": "^0.11.0",
5659
"vue-tsc": "^3.2.4"
5760
}
5861
}

0 commit comments

Comments
 (0)