From 81c0d84fc35f7e8647fea46e7ae7b34e541ef642 Mon Sep 17 00:00:00 2001 From: sqj Date: Wed, 13 Aug 2025 22:39:11 +0800 Subject: [PATCH] feat:codeformat --- README.md | 17 ++++- docs/api.md | 60 +++++++++-------- docs/design.md | 108 ++++++++++++++++++------------- package.json | 5 +- resources/logo.png | Bin 0 -> 44215 bytes resources/logo.svg | 10 +++ src/main/index.ts | 4 +- src/renderer/index.html | 2 +- src/renderer/src/App.vue | 3 - src/renderer/src/assets/base.css | 2 - src/renderer/src/router/index.ts | 3 +- 11 files changed, 128 insertions(+), 86 deletions(-) create mode 100644 resources/logo.png create mode 100644 resources/logo.svg diff --git a/README.md b/README.md index 686a959..5072ad2 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,11 @@ 一个跨平台的音乐播放器应用,支持多来源音乐数据获取与播放。 ## 项目简介 + Ceru Music 是基于 Electron 和 Vue 开发的跨平台桌面音乐播放器,支持从多个音乐平台获取歌曲信息并播放。该项目结合了现代前端技术和桌面应用开发,提供了流畅的用户体验和灵活的音乐数据源支持。 ## 技术栈 + - **Electron**:用于构建跨平台桌面应用 - **Vue 3**:前端框架,提供响应式 UI - **TypeScript**:增强代码可维护性和类型安全 @@ -14,6 +16,7 @@ Ceru Music 是基于 Electron 和 Vue 开发的跨平台桌面音乐播放器, - **Meting API**:作为备用音乐数据源 ## 主要功能 + - 支持从多个音乐平台搜索和播放歌曲 - 获取歌词和专辑信息 - 支持虚拟滚动列表,优化大量数据渲染性能 @@ -23,17 +26,21 @@ Ceru Music 是基于 Electron 和 Vue 开发的跨平台桌面音乐播放器, ## 安装与使用 ### 推荐开发环境 + - **IDE**: VS Code 或 WebStorm - **Node.js 版本**: 推荐使用最新稳定版 - **包管理器**: pnpm ### 项目设置 + 1. 安装依赖: + ```bash pnpm install ``` 2. 启动开发服务器: + ```bash pnpm dev ``` @@ -44,12 +51,15 @@ Ceru Music 是基于 Electron 和 Vue 开发的跨平台桌面音乐播放器, ``` ### 平台构建指令 + - **Windows**: + ```bash pnpm build:win ``` - **macOS**: + ```bash pnpm build:mac ``` @@ -60,17 +70,22 @@ Ceru Music 是基于 Electron 和 Vue 开发的跨平台桌面音乐播放器, ``` ## 文档与资源 + - [API 接口文档](docs/api.md):详细说明了支持的音乐平台和请求格式。 - [产品设计文档](docs/design.md):涵盖项目架构、核心功能设计和开发规范。 ## 开源许可 + 本项目遵循 MIT 许可协议。详情请参阅 [LICENSE](LICENSE) 文件。 ## 贡献指南 + 欢迎贡献代码和反馈建议!请遵循 [Git 提交规范](docs/design.md#git提交规范) 并确保代码符合项目风格指南。 ## 更新日志 + 请参阅 [更新日志](docs/api.md#更新日志) 了解最新功能和改进。 ## 联系方式 -如有问题或合作意向,请通过 Gitee 私信联系项目维护者。 \ No newline at end of file + +如有问题或合作意向,请通过 Gitee 私信联系项目维护者。 diff --git a/docs/api.md b/docs/api.md index d40ebaf..c71412e 100644 --- a/docs/api.md +++ b/docs/api.md @@ -13,35 +13,35 @@ ## 请求参数 -| 参数名 | 类型 | 必填 | 默认值 | 说明 | -|--------|------|------|--------|------| -| server | string | 否 | netease | 音乐平台 | -| type | string | 否 | search | 请求类型 | -| id | string | 否 | hello | 查询ID或关键词 | +| 参数名 | 类型 | 必填 | 默认值 | 说明 | +| ------ | ------ | ---- | ------- | -------------- | +| server | string | 否 | netease | 音乐平台 | +| type | string | 否 | search | 请求类型 | +| id | string | 否 | hello | 查询ID或关键词 | ### 支持的音乐平台 (server) -| 平台代码 | 平台名称 | -|----------|----------| -| netease | 网易云音乐 | -| tencent | QQ音乐 | -| baidu | 百度音乐 | -| xiami | 虾米音乐 | -| kugou | 酷狗音乐 | -| kuwo | 酷我音乐 | +| 平台代码 | 平台名称 | +| -------- | ---------- | +| netease | 网易云音乐 | +| tencent | QQ音乐 | +| baidu | 百度音乐 | +| xiami | 虾米音乐 | +| kugou | 酷狗音乐 | +| kuwo | 酷我音乐 | ### 支持的请求类型 (type) -| 类型 | 说明 | id参数说明 | -|------|------|------------| -| search | 搜索歌曲 | 搜索关键词 | -| song | 获取歌曲详情 | 歌曲ID | -| album | 获取专辑信息 | 专辑ID | -| artist | 获取歌手信息 | 歌手ID | -| playlist | 获取歌单信息 | 歌单ID | -| lrc | 获取歌词 | 歌曲ID | -| url | 获取播放链接 | 歌曲ID | -| pic | 获取封面图片 | 歌曲/专辑/歌手ID | +| 类型 | 说明 | id参数说明 | +| -------- | ------------ | ---------------- | +| search | 搜索歌曲 | 搜索关键词 | +| song | 获取歌曲详情 | 歌曲ID | +| album | 获取专辑信息 | 专辑ID | +| artist | 获取歌手信息 | 歌手ID | +| playlist | 获取歌单信息 | 歌单ID | +| lrc | 获取歌词 | 歌曲ID | +| url | 获取播放链接 | 歌曲ID | +| pic | 获取封面图片 | 歌曲/专辑/歌手ID | ## 响应格式 @@ -74,6 +74,7 @@ GET /?server=netease&type=search&id=周杰伦 ``` **响应示例**: + ```json { "success": true, @@ -104,6 +105,7 @@ GET /?server=netease&type=lrc&id=186016 ``` **响应示例**: + ```json { "success": true, @@ -120,6 +122,7 @@ GET /?server=netease&type=url&id=186016 ``` **响应示例**: + ```json { "success": true, @@ -160,11 +163,11 @@ GET /?server=netease&type=pic&id=186016 ## 错误码说明 -| 错误信息 | 说明 | -|----------|------| -| require id. | 缺少必需的id参数 | +| 错误信息 | 说明 | +| ------------------- | ---------------- | +| require id. | 缺少必需的id参数 | | unsupported server. | 不支持的音乐平台 | -| unsupported type. | 不支持的请求类型 | +| unsupported type. | 不支持的请求类型 | ## 注意事项 @@ -184,10 +187,11 @@ GET /?server=netease&type=pic&id=186016 ## 技术实现 本API基于以下技术栈: + - **PHP**: 后端语言 - **Meting**: 音乐数据获取库 - **Composer**: 依赖管理 ## 更新日志 -- **v1.0.0**: 初始版本,支持基础的音乐数据获取功能 \ No newline at end of file +- **v1.0.0**: 初始版本,支持基础的音乐数据获取功能 diff --git a/docs/design.md b/docs/design.md index c6b03c7..5aa12d6 100644 --- a/docs/design.md +++ b/docs/design.md @@ -7,6 +7,7 @@ Ceru Music 是一个基于 Electron + Vue 3 的跨平台桌面音乐播放器, ## 项目架构 ### 技术栈 + - **前端框架**: Vue 3 + TypeScript + Composition API - **桌面框架**: Electron (v37.2.3) - **UI组件库**: TDesign Vue Next (v1.15.2) @@ -18,17 +19,17 @@ Ceru Music 是一个基于 Electron + Vue 3 的跨平台桌面音乐播放器, - **Node pnpm 版本**: ```bash - PS D:\code\Ceru-Music> node -v + PS D:\code\Ceru-Music> node -v v22.17.0 PS D:\code\Ceru-Music> pnpm -v 10.14.0 ``` - +- ### 架构设计 -``` +```asp Ceru Music ├── 主进程 (Main Process) │ ├── 应用生命周期管理 @@ -45,6 +46,7 @@ Ceru Music ``` ### 目录结构 + ``` src/ ├── main/ # 主进程代码 @@ -67,6 +69,7 @@ src/ ## 项目开发使用方式 ### 开发环境启动 + ```bash # 安装依赖 pnpm install @@ -82,6 +85,7 @@ pnpm typecheck ``` ### 构建打包 + ```bash # 构建当前平台 pnpm build @@ -101,18 +105,21 @@ pnpm build:linux ### 接口1: 网易云音乐原生接口 (主要数据源) #### 获取音乐信息 + - **请求地址**: `https://music.163.com/api/song/detail` - **请求参数**: `ids=[ID1,ID2,ID3,...]` 音乐ID列表 - **示例**: `https://music.163.com/api/song/detail?ids=[36270426]` #### 获取音乐直链 + - **请求地址**: `https://music.163.com/song/media/outer/url` - **请求参数**: `id=123` 音乐ID - **示例**: `https://music.163.com/song/media/outer/url?id=36270426.mp3` #### 获取歌词 + - **请求地址**: `https://music.163.com/api/song/lyric` -- **请求参数**: +- **请求参数**: - `id=123` 音乐ID - `lv=-1` 获取歌词 - `yv=-1` 获取逐字歌词 @@ -120,6 +127,7 @@ pnpm build:linux - **示例**: `https://music.163.com/api/song/lyric?id=36270426&lv=-1&yv=-1&tv=-1` #### 搜索歌曲 + - **请求地址**: `https://music.163.com/api/search/get/web` - **请求参数**: - `s` 歌名 @@ -131,6 +139,7 @@ pnpm build:linux ### 接口2: Meting API (备用数据源) #### 参数说明 + - **server**: 数据源 - `netease` 网易云音乐(默认) - `tencent` QQ音乐 @@ -145,6 +154,7 @@ pnpm build:linux - **id**: 类型ID(封面ID/单曲ID/歌单ID) #### 使用示例 + ``` https://api.qijieya.cn/meting/?type=url&id=1969519579 https://api.qijieya.cn/meting/?type=song&id=591321 @@ -152,10 +162,12 @@ https://api.qijieya.cn/meting/?type=playlist&id=2619366284 ``` ### 接口3: 备选接口 + - **地址**: https://doc.vkeys.cn/api-doc/ - **说明**: 不建议使用,延迟较高 ### 接口4: 自部署接口 (备用) + - **地址**: `https://music.shiqianjiang.cn?id=你是我的风景&server=netease` - **说明**: 不支持分页,用于获取歌曲源、歌词源等 - **文档**: [API文档](./api.md) @@ -223,7 +235,7 @@ export const useMusicStore = defineStore('music', { currentTime: 0, duration: 0 }), - + actions: { // 播放歌曲 async playSong(song: Song) { @@ -231,23 +243,26 @@ export const useMusicStore = defineStore('music', { this.isPlaying = true this.saveToStorage() }, - + // 添加到播放列表 addToPlaylist(songs: Song[]) { this.playlist.push(...songs) this.saveToStorage() }, - + // 保存到本地存储 saveToStorage() { - localStorage.setItem('music-state', JSON.stringify({ - currentSong: this.currentSong, - playlist: this.playlist, - playMode: this.playMode, - volume: this.volume - })) + localStorage.setItem( + 'music-state', + JSON.stringify({ + currentSong: this.currentSong, + playlist: this.playlist, + playMode: this.playMode, + volume: this.volume + }) + ) }, - + // 从本地存储恢复 loadFromStorage() { const saved = localStorage.getItem('music-state') @@ -266,12 +281,7 @@ export const useMusicStore = defineStore('music', { ```vue