index.html 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>MusicWeb Player</title>
  7. <link rel="stylesheet" href="/static/css/style.css" />
  8. </head>
  9. <body>
  10. <div class="page-shell">
  11. <aside class="sidebar glass">
  12. <div class="brand">
  13. <p class="eyebrow">FastAPI MusicWeb</p>
  14. <h1>在线音乐播放器</h1>
  15. <p class="subtext">支持目录管理、随机播放、循环模式与自定义播放列表。</p>
  16. </div>
  17. <section class="panel">
  18. <div class="panel-head">
  19. <h2>文件操作</h2>
  20. </div>
  21. <label class="field">
  22. <span>目标目录</span>
  23. <input id="targetDir" type="text" placeholder="如:流行/周杰伦" />
  24. </label>
  25. <label class="field">
  26. <span>上传音乐</span>
  27. <input id="uploadInput" type="file" multiple />
  28. </label>
  29. <button id="uploadBtn" class="primary-btn">上传文件</button>
  30. <label class="field">
  31. <span>新建文件夹</span>
  32. <input id="newFolderInput" type="text" placeholder="如:轻音乐/夜晚" />
  33. </label>
  34. <button id="createFolderBtn" class="secondary-btn">创建文件夹</button>
  35. </section>
  36. <section class="panel">
  37. <div class="panel-head">
  38. <h2>播放列表</h2>
  39. </div>
  40. <label class="field">
  41. <span>新列表名称</span>
  42. <input id="playlistNameInput" type="text" placeholder="我的收藏" />
  43. </label>
  44. <button id="createPlaylistBtn" class="secondary-btn">用当前队列创建</button>
  45. <div id="playlistList" class="playlist-list"></div>
  46. </section>
  47. </aside>
  48. <main class="content">
  49. <section class="hero glass">
  50. <div>
  51. <p class="eyebrow">Now Playing</p>
  52. <h2 id="nowTitle">请选择一首歌</h2>
  53. <p id="nowMeta" class="subtext">从目录、全部歌曲或播放列表开始。</p>
  54. </div>
  55. <div class="hero-actions">
  56. <button id="playAllBtn" class="secondary-btn">播放全部</button>
  57. <button id="playFolderBtn" class="secondary-btn">播放当前目录</button>
  58. <button id="shuffleBtn" class="secondary-btn">随机: 关</button>
  59. <button id="loopBtn" class="secondary-btn">循环: 列表</button>
  60. </div>
  61. <audio id="audioPlayer" controls preload="metadata"></audio>
  62. </section>
  63. <section class="library-grid">
  64. <div class="library-panel glass">
  65. <div class="panel-head">
  66. <h2>音乐目录</h2>
  67. <span id="folderIndicator">当前目录:根目录</span>
  68. </div>
  69. <div id="folderTree" class="folder-tree"></div>
  70. </div>
  71. <div class="queue-panel glass">
  72. <div class="panel-head">
  73. <h2>播放队列</h2>
  74. <button id="saveQueueBtn" class="ghost-btn">刷新队列</button>
  75. </div>
  76. <div id="queueList" class="queue-list"></div>
  77. </div>
  78. </section>
  79. </main>
  80. </div>
  81. <template id="trackItemTemplate">
  82. <div class="track-item">
  83. <div>
  84. <strong class="track-name"></strong>
  85. <p class="track-path"></p>
  86. </div>
  87. <div class="track-actions">
  88. <button class="play-btn ghost-btn">播放</button>
  89. <button class="queue-btn ghost-btn">加入队列</button>
  90. <button class="move-btn ghost-btn">移动</button>
  91. </div>
  92. </div>
  93. </template>
  94. <script src="/static/js/app.js"></script>
  95. </body>
  96. </html>