Skip to content

📁 项目结构

📂 根目录

GlassMusicPlayer/
├── src/                    # 📦 源代码目录
├── public/                 # 🌐 静态资源(不经过编译)
├── build/                  # 🔧 Vite 构建配置
├── dist/                   # 📤 构建输出目录
├── images/                 # 🖼️ README 截图
├── index.html              # 📄 HTML 入口
├── vite.config.ts          # ⚙️ Vite 配置
├── tsconfig.json           # 📘 TypeScript 配置
├── package.json            # 📋 项目依赖与脚本
├── postcss.config.mjs      # 🎨 PostCSS 配置
├── netlify.toml            # ☁️ Netlify 部署配置
└── .env                    # 🔐 环境变量(需自行创建)

📦 源码目录 src/

src/
├── main.ts                 # 🚀 应用入口
├── App.vue                 # 🏠 根组件
├── api/                    # 🔌 API 请求封装
│   ├── index.ts            # 📡 所有 API 函数
│   └── interface.ts        # 📝 数据类型定义
├── assets/                 # 🎨 静态资源
│   ├── svg/                # 🖼️ SVG 图标
│   ├── png/                # 🖼️ 图片资源
│   └── hanyi.ttf           # 🔤 字体文件
├── components/             # 🧩 通用组件
│   ├── Auth/               # 🔐 登录相关
│   ├── Background/         # 🌌 背景主题组件
│   ├── Comments/           # 💬 评论组件
│   ├── Mobile/             # 📱 移动端专用组件
│   ├── Search/             # 🔍 搜索结果组件
│   ├── Ui/                 # 🎯 通用 UI 组件
│   ├── PlayerDrawer.vue    # 🎵 播放器抽屉
│   ├── SongList.vue        # 📋 歌曲列表
│   └── Swiper.vue          # 🎠 轮播图
├── composables/            # 🪝 组合式函数
│   ├── useAudio.ts         # 🎧 音频播放控制
│   └── useLyrics.ts        # 📝 歌词解析与同步
├── config/                 # ⚙️ 配置文件
│   ├── nprogress.ts        # 📊 进度条配置
│   └── settingsOptions.ts  # 🎛️ 设置选项
├── languages/              # 🌍 国际化
│   ├── index.ts            # 🌐 i18n 入口
│   └── modules/            # 📦 语言包
│       ├── zh.ts           # 🇨🇳 中文
│       ├── en.ts           # 🇺🇸 英文
│       └── ja.ts           # 🇯🇵 日文
├── layout/                 # 📐 布局组件
│   ├── index.vue           # 🖥️ 桌面端布局
│   ├── aside.vue           # 📌 侧边栏
│   ├── header.vue          # 🔝 顶部栏
│   ├── footer.vue          # 🎵 底部播放栏
│   └── mobile/             # 📱 移动端布局
│       ├── index.vue
│       ├── Header.vue
│       └── TabBar.vue
├── pages/                  # 📄 页面组件
│   ├── index.vue           # 🏠 首页
│   ├── playlist.vue        # 📋 歌单详情
│   ├── song.vue            # 🎵 歌曲详情
│   ├── artist.vue          # 🎤 艺术家详情
│   ├── artists.vue         # 👥 艺术家列表
│   ├── album.vue           # 💿 专辑详情
│   ├── new-albums.vue      # 🆕 新碟上架
│   ├── charts.vue          # 📊 排行榜
│   ├── search.vue          # 🔍 搜索页
│   ├── mv-list.vue         # 🎬 MV 列表
│   ├── mv-player.vue       # ▶️ MV 播放
│   ├── likes.vue           # ❤️ 我喜欢
│   ├── recent.vue          # 🕐 最近播放
│   ├── my-music.vue        # 🎵 我的音乐
│   ├── settings.vue        # ⚙️ 设置页
│   └── mobile/             # 📱 移动端页面
├── routers/                # 🛤️ 路由配置
│   └── index.ts            # 🔀 响应式路由
├── stores/                 # 🗄️ 状态管理(Pinia)
│   ├── index.ts            # 📦 Store 入口
│   ├── interface.ts        # 📝 类型定义
│   ├── persist.ts          # 💾 持久化配置
│   └── modules/
│       ├── audio.ts        # 🎧 音频播放状态
│       ├── global.ts       # 🌐 全局状态(主题、语言)
│       ├── settings.ts     # ⚙️ 设置状态(背景、歌词)
│       └── user.ts         # 👤 用户登录状态
├── style/                  # 🎨 样式文件
│   ├── index.scss          # 📦 样式入口
│   ├── base.scss           # 🎯 基础样式
│   ├── theme.css           # 🌗 主题变量
│   ├── tailwind.css        # 🌬️ Tailwind 导入
│   └── components.css      # 🧩 组件样式
├── typings/                # 📘 全局类型
│   ├── index.ts
│   └── global.d.ts
└── utils/                  # 🛠️ 工具函数
    ├── index.ts            # 📦 通用工具
    ├── http.ts             # 🌐 Axios 封装
    ├── time.ts             # ⏰ 时间格式化
    └── audioUtils.ts       # 🎧 音频工具

🔀 响应式路由机制

项目使用自定义的 responsive() 工厂函数实现桌面端与移动端页面的自动切换:

ts
// src/routers/index.ts
const responsive = (desktopLoader, mobileLoader) =>
  defineComponent({
    setup() {
      const isMobile = useMediaQuery('(max-width: 768px)')
      const Desktop = defineAsyncComponent(desktopLoader)
      const Mobile = defineAsyncComponent(mobileLoader)
      return () => h(isMobile.value ? Mobile : Desktop)
    },
  })

当窗口宽度 ≤ 768px 时自动加载移动端组件,否则加载桌面端组件。

🌌 背景主题组件

src/components/Background/ 目录包含三种可选背景:

组件说明
🌌 Aurora.vue极光效果,基于 WebGL/OGL
🌈 ColorBends.vue渐变弯曲效果
Ultimate.vue终极渐变,支持鼠标交互

每种背景都有对应的设置面板(*SettingsPanel.vue),可在设置页调整颜色与参数。

基于 PolyForm-Noncommercial-1.0.0 许可发布