🐞 fix: 修复图片
3
.gitignore
vendored
@@ -16,9 +16,6 @@ coverage
|
|||||||
out
|
out
|
||||||
.env
|
.env
|
||||||
|
|
||||||
/cypress/videos/
|
|
||||||
/cypress/screenshots/
|
|
||||||
|
|
||||||
# Editor directories and files
|
# Editor directories and files
|
||||||
.vscode/*
|
.vscode/*
|
||||||
.vscode
|
.vscode
|
||||||
|
|||||||
18
README.md
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
> 一个简约的音乐播放器
|
> 一个简约的音乐播放器
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 说明
|
## 说明
|
||||||
|
|
||||||
@@ -57,49 +57,49 @@
|
|||||||
- 📱 移动端基础适配
|
- 📱 移动端基础适配
|
||||||
- ~~🌐 `i18n` 支持~~
|
- ~~🌐 `i18n` 支持~~
|
||||||
|
|
||||||
## 🖼️ Screenshots
|
## 🖼️ screenshot
|
||||||
|
|
||||||
> 开发中,仅供参考
|
> 开发中,仅供参考
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>主页面</summary>
|
<summary>主页面</summary>
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>播放页面</summary>
|
<summary>播放页面</summary>
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>发现页面</summary>
|
<summary>发现页面</summary>
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>歌单页面</summary>
|
<summary>歌单页面</summary>
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>评论页面</summary>
|
<summary>评论页面</summary>
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>本地音乐</summary>
|
<summary>本地音乐</summary>
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
@@ -162,7 +162,7 @@ docker run -d --name SPlayer -p 7899:7899 imsyy/splayer:latest
|
|||||||
|
|
||||||
5. 将 `Build and Output Settings` 中的 `Output Directory` 改为 `out/renderer`
|
5. 将 `Build and Output Settings` 中的 `Output Directory` 改为 `out/renderer`
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
6. 点击 `Deploy`,即可成功部署
|
6. 点击 `Deploy`,即可成功部署
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ win:
|
|||||||
# 可执行文件名
|
# 可执行文件名
|
||||||
executableName: SPlayer
|
executableName: SPlayer
|
||||||
# 应用程序的图标文件路径
|
# 应用程序的图标文件路径
|
||||||
icon: public/images/icons/favicon-512x512.png
|
icon: public/imgs/icons/favicon-512x512.png
|
||||||
# 构建类型
|
# 构建类型
|
||||||
target: nsis
|
target: nsis
|
||||||
# NSIS 安装器配置
|
# NSIS 安装器配置
|
||||||
@@ -41,15 +41,15 @@ nsis:
|
|||||||
# 是否允许用户更改安装目录
|
# 是否允许用户更改安装目录
|
||||||
allowToChangeInstallationDirectory: true
|
allowToChangeInstallationDirectory: true
|
||||||
# 安装包图标
|
# 安装包图标
|
||||||
installerIcon: public/images/icons/favicon.ico
|
installerIcon: public/imgs/icons/favicon.ico
|
||||||
# 卸载命令图标
|
# 卸载命令图标
|
||||||
uninstallerIcon: public/images/icons/favicon.ico
|
uninstallerIcon: public/imgs/icons/favicon.ico
|
||||||
# macOS 平台配置
|
# macOS 平台配置
|
||||||
mac:
|
mac:
|
||||||
# 可执行文件名
|
# 可执行文件名
|
||||||
executableName: SPlayer
|
executableName: SPlayer
|
||||||
# 应用程序的图标文件路径
|
# 应用程序的图标文件路径
|
||||||
icon: public/images/icons/favicon-512x512.png
|
icon: public/imgs/icons/favicon-512x512.png
|
||||||
# 权限继承的文件路径
|
# 权限继承的文件路径
|
||||||
entitlementsInherit: build/entitlements.mac.plist
|
entitlementsInherit: build/entitlements.mac.plist
|
||||||
# 扩展信息,如权限描述
|
# 扩展信息,如权限描述
|
||||||
@@ -71,7 +71,7 @@ linux:
|
|||||||
# 可执行文件名
|
# 可执行文件名
|
||||||
executableName: SPlayer
|
executableName: SPlayer
|
||||||
# 应用程序的图标文件路径
|
# 应用程序的图标文件路径
|
||||||
icon: public/images/icons/favicon-512x512.png
|
icon: public/imgs/icons/favicon-512x512.png
|
||||||
# 构建类型
|
# 构建类型
|
||||||
target:
|
target:
|
||||||
- AppImage
|
- AppImage
|
||||||
|
|||||||
@@ -106,22 +106,22 @@ export default defineConfig(({ mode }) => {
|
|||||||
background_color: "#efefef",
|
background_color: "#efefef",
|
||||||
icons: [
|
icons: [
|
||||||
{
|
{
|
||||||
src: "/images/icons/favicon-32x32.png",
|
src: "/imgs/icons/favicon-32x32.png",
|
||||||
sizes: "32x32",
|
sizes: "32x32",
|
||||||
type: "image/png",
|
type: "image/png",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: "/images/icons/favicon-96x96.png",
|
src: "/imgs/icons/favicon-96x96.png",
|
||||||
sizes: "96x96",
|
sizes: "96x96",
|
||||||
type: "image/png",
|
type: "image/png",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: "/images/icons/favicon-256x256.png",
|
src: "/imgs/icons/favicon-256x256.png",
|
||||||
sizes: "256x256",
|
sizes: "256x256",
|
||||||
type: "image/png",
|
type: "image/png",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: "/images/icons/favicon-512x512.png",
|
src: "/imgs/icons/favicon-512x512.png",
|
||||||
sizes: "512x512",
|
sizes: "512x512",
|
||||||
type: "image/png",
|
type: "image/png",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ class MainProcess {
|
|||||||
titleBarStyle: "customButtonsOnHover", // Macos 隐藏菜单栏
|
titleBarStyle: "customButtonsOnHover", // Macos 隐藏菜单栏
|
||||||
autoHideMenuBar: true, // 失去焦点后自动隐藏菜单栏
|
autoHideMenuBar: true, // 失去焦点后自动隐藏菜单栏
|
||||||
// 图标配置
|
// 图标配置
|
||||||
icon: nativeImage.createFromPath(join(__dirname, "../../public/images/icons/favicon.png")),
|
icon: nativeImage.createFromPath(join(__dirname, "../../public/imgs/icons/favicon.png")),
|
||||||
// 预加载
|
// 预加载
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
// devTools: is.dev,
|
// devTools: is.dev,
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ const createSystemTray = (win) => {
|
|||||||
join(
|
join(
|
||||||
__dirname,
|
__dirname,
|
||||||
process.platform === "win32"
|
process.platform === "win32"
|
||||||
? "../../public/images/icons/favicon.ico"
|
? "../../public/imgs/icons/favicon.ico"
|
||||||
: "../../public/images/icons/favicon-32x32.png",
|
: "../../public/imgs/icons/favicon-32x32.png",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.resize({
|
.resize({
|
||||||
@@ -63,8 +63,8 @@ const createIcon = (name) => {
|
|||||||
return nativeImage
|
return nativeImage
|
||||||
.createFromPath(
|
.createFromPath(
|
||||||
isDarkMode
|
isDarkMode
|
||||||
? join(__dirname, `../../public/images/icons/${name}-dark.png`)
|
? join(__dirname, `../../public/imgs/icons/${name}-dark.png`)
|
||||||
: join(__dirname, `../../public/images/icons/${name}-light.png`),
|
: join(__dirname, `../../public/imgs/icons/${name}-light.png`),
|
||||||
)
|
)
|
||||||
.resize({ width: 16, height: 16 });
|
.resize({ width: 16, height: 16 });
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,16 +2,16 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/png" sizes="32x32" href="/images/icons/favicon-32x32.png" />
|
<link rel="icon" type="image/png" sizes="32x32" href="/imgs/icons/favicon-32x32.png" />
|
||||||
<link rel="icon" type="image/png" sizes="16x16" href="/images/icons/favicon-16x16.png" />
|
<link rel="icon" type="image/png" sizes="16x16" href="/imgs/icons/favicon-16x16.png" />
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="/images/icons/apple-touch-icon.png" />
|
<link rel="apple-touch-icon" sizes="180x180" href="/imgs/icons/apple-touch-icon.png" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>%RENDERER_VITE_SITE_TITLE%</title>
|
<title>%RENDERER_VITE_SITE_TITLE%</title>
|
||||||
<meta name="apple-mobile-web-app-title" content="%RENDERER_VITE_SITE_TITLE%" />
|
<meta name="apple-mobile-web-app-title" content="%RENDERER_VITE_SITE_TITLE%" />
|
||||||
<meta name="author" content="%RENDERER_VITE_SITE_ANTHOR%" />
|
<meta name="author" content="%RENDERER_VITE_SITE_ANTHOR%" />
|
||||||
<meta name="keywords" content="%RENDERER_VITE_SITE_KEYWORDS%" />
|
<meta name="keywords" content="%RENDERER_VITE_SITE_KEYWORDS%" />
|
||||||
<meta name="description" content="%RENDERER_VITE_SITE_DES%" />
|
<meta name="description" content="%RENDERER_VITE_SITE_DES%" />
|
||||||
<link rel="mask-icon" href="/images/icons/safari-pinned-tab.svg" color="#5bbad5" />
|
<link rel="mask-icon" href="/imgs/icons/safari-pinned-tab.svg" color="#5bbad5" />
|
||||||
<meta name="msapplication-TileColor" content="#da532c" />
|
<meta name="msapplication-TileColor" content="#da532c" />
|
||||||
<meta name="theme-color" content="#ffffff" />
|
<meta name="theme-color" content="#ffffff" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
BIN
public/imgs/icons/android-chrome-192x192.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/imgs/icons/android-chrome-512x512.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
public/imgs/icons/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
public/imgs/icons/favicon-16x16.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
public/imgs/icons/favicon-192x192.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/imgs/icons/favicon-256x256.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/imgs/icons/favicon-32x32.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
public/imgs/icons/favicon-512x512.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
public/imgs/icons/favicon-96x96.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
public/imgs/icons/favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/imgs/icons/favicon.png
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
1
public/imgs/icons/favicon.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1663641871751" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11550" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M511.764091 131.708086a446.145957 446.145957 0 1 0 446.145957 446.145957 446.145957 446.145957 0 0 0-446.145957-446.145957z m0 519.76004A71.829499 71.829499 0 1 1 583.59359 580.530919 72.275645 72.275645 0 0 1 511.764091 651.468126z" fill="#F55E55" p-id="11551"></path><path d="M802.205109 0.541175l-168.197026 37.030114a67.814185 67.814185 0 0 0-53.091369 66.029602V223.614153l3.569168 349.778431h114.213365V223.614153h108.859613a26.322611 26.322611 0 0 0 26.768758-26.322611V26.863786a26.768757 26.768757 0 0 0-32.122509-26.322611z" fill="#F9BBB8" p-id="11552"></path><path d="M511.764091 386.457428a186.935156 186.935156 0 1 0 186.935156 186.48901A186.935156 186.935156 0 0 0 511.764091 386.457428z m0 264.564552a71.383353 71.383353 0 1 1 71.383353-71.383353 71.383353 71.383353 0 0 1-71.383353 71.383353z" fill="#F9BBB8" p-id="11553"></path></svg>
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
BIN
public/imgs/icons/mstile-150x150.png
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
public/imgs/icons/next-dark.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
public/imgs/icons/next-light.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
public/imgs/icons/open-dark.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
public/imgs/icons/open-light.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
public/imgs/icons/pause-dark.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
public/imgs/icons/pause-light.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
public/imgs/icons/play-dark.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
public/imgs/icons/play-light.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
public/imgs/icons/power-dark.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
public/imgs/icons/power-light.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
public/imgs/icons/prev-dark.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
public/imgs/icons/prev-light.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
25
public/imgs/icons/safari-pinned-tab.svg
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||||
|
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="512.000000pt" height="512.000000pt" viewBox="0 0 512.000000 512.000000"
|
||||||
|
preserveAspectRatio="xMidYMid meet">
|
||||||
|
<metadata>
|
||||||
|
Created by potrace 1.14, written by Peter Selinger 2001-2017
|
||||||
|
</metadata>
|
||||||
|
<g transform="translate(0.000000,512.000000) scale(0.100000,-0.100000)"
|
||||||
|
fill="#000000" stroke="none">
|
||||||
|
<path d="M2400 4444 c-14 -2 -63 -8 -110 -14 -407 -50 -737 -184 -1077 -436
|
||||||
|
-124 -93 -348 -309 -406 -394 -100 -144 -190 -286 -223 -352 -101 -200 -199
|
||||||
|
-506 -226 -707 -17 -127 -22 -436 -8 -546 40 -338 161 -687 327 -942 138 -213
|
||||||
|
226 -319 372 -450 237 -211 471 -353 761 -460 147 -54 156 -57 330 -88 383
|
||||||
|
-71 516 -67 965 25 76 16 288 91 370 132 28 13 66 31 85 38 39 16 158 88 270
|
||||||
|
164 242 164 474 410 628 668 254 422 362 920 308 1408 -16 139 -23 172 -73
|
||||||
|
344 -80 273 -188 496 -346 711 -104 143 -302 348 -404 421 l-48 34 -192 0
|
||||||
|
c-184 0 -193 -1 -203 -21 -8 -14 -11 -271 -10 -882 1 -474 -1 -896 -5 -937
|
||||||
|
-29 -306 -228 -596 -507 -737 -207 -104 -426 -126 -663 -66 -168 43 -300 125
|
||||||
|
-453 283 -118 122 -203 310 -223 495 -10 86 -3 271 11 320 41 135 58 180 95
|
||||||
|
248 103 193 330 376 545 441 157 47 364 49 513 5 38 -11 78 -19 90 -17 l22 3
|
||||||
|
-3 635 c-2 349 -7 638 -10 642 -22 22 -413 47 -502 32z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
BIN
public/imgs/icons/setting-dark.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
public/imgs/icons/setting-light.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
public/imgs/pic/album.jpg
Normal file
|
After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
BIN
public/imgs/pic/artist.jpg
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
public/imgs/pic/avatar.jpg
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
public/imgs/pic/cover-2.jpg
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
BIN
public/imgs/pic/cover.jpg
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
public/imgs/pic/default.jpg
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
BIN
public/imgs/pic/like.jpg
Normal file
|
After Width: | Height: | Size: 158 KiB |
BIN
public/imgs/pic/pl-1.jpg
Normal file
|
After Width: | Height: | Size: 95 KiB |
BIN
public/imgs/pic/pl-2.jpg
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
public/imgs/pic/pl-3.jpg
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
public/imgs/pic/pl-4.jpg
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
public/imgs/pic/pointer.png
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
BIN
public/imgs/pic/radar-private.jpg
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
public/imgs/pic/radar-treasure.jpg
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
public/imgs/pic/record.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
public/imgs/pic/song.jpg
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
public/imgs/pic/video.png
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
public/imgs/pic/vip.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 243 KiB After Width: | Height: | Size: 243 KiB |
|
Before Width: | Height: | Size: 261 KiB After Width: | Height: | Size: 261 KiB |
|
Before Width: | Height: | Size: 241 KiB After Width: | Height: | Size: 241 KiB |
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 171 KiB After Width: | Height: | Size: 171 KiB |
|
Before Width: | Height: | Size: 208 KiB After Width: | Height: | Size: 208 KiB |
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
@@ -40,10 +40,10 @@
|
|||||||
class="loading-img"
|
class="loading-img"
|
||||||
:src="
|
:src="
|
||||||
type === 'mv'
|
type === 'mv'
|
||||||
? '/images/pic/video.jpg?assest'
|
? '/imgs/pic/video.jpg?assest'
|
||||||
: type === 'artist'
|
: type === 'artist'
|
||||||
? '/images/pic/artist.jpg?assest'
|
? '/imgs/pic/artist.jpg?assest'
|
||||||
: '/images/pic/album.jpg?assest'
|
: '/imgs/pic/album.jpg?assest'
|
||||||
"
|
"
|
||||||
alt="song"
|
alt="song"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
class: 'cover-img',
|
class: 'cover-img',
|
||||||
}"
|
}"
|
||||||
class="cover-main-img"
|
class="cover-main-img"
|
||||||
fallback-src="/images/pic/default.jpg?assest"
|
fallback-src="/imgs/pic/default.jpg?assest"
|
||||||
preview-disabled
|
preview-disabled
|
||||||
@load="
|
@load="
|
||||||
(e) => {
|
(e) => {
|
||||||
|
|||||||
@@ -294,7 +294,7 @@ const changeUserPlaylists = (data) => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
[
|
[
|
||||||
h(NAvatar, { src: v?.coverSize?.s, fallbackSrc: "/images/pic/album.jpg?assest" }),
|
h(NAvatar, { src: v?.coverSize?.s, fallbackSrc: "/imgs/pic/album.jpg?assest" }),
|
||||||
h(NText, null, () => [v.name]),
|
h(NText, null, () => [v.name]),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@@ -333,7 +333,7 @@ const changeUserPlaylists = (data) => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
[
|
[
|
||||||
h(NAvatar, { src: v?.coverSize?.s, fallbackSrc: "/images/pic/album.jpg?assest" }),
|
h(NAvatar, { src: v?.coverSize?.s, fallbackSrc: "/imgs/pic/album.jpg?assest" }),
|
||||||
h(NText, null, () => [v.name]),
|
h(NText, null, () => [v.name]),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
>
|
>
|
||||||
<template #placeholder>
|
<template #placeholder>
|
||||||
<div class="cover-loading">
|
<div class="cover-loading">
|
||||||
<img class="loading-img" src="/images/pic/avatar.jpg?assest" alt="avatar" />
|
<img class="loading-img" src="/imgs/pic/avatar.jpg?assest" alt="avatar" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</n-image>
|
</n-image>
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
>
|
>
|
||||||
<template #placeholder>
|
<template #placeholder>
|
||||||
<div class="cover-loading">
|
<div class="cover-loading">
|
||||||
<img class="loading-img" src="/images/pic/song.jpg?assest" alt="song" />
|
<img class="loading-img" src="/imgs/pic/song.jpg?assest" alt="song" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</n-image>
|
</n-image>
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<n-image
|
<n-image
|
||||||
:src="item?.coverSize?.s || '/images/pic/album.jpg?assest'"
|
:src="item?.coverSize?.s || '/imgs/pic/album.jpg?assest'"
|
||||||
class="cover"
|
class="cover"
|
||||||
preview-disabled
|
preview-disabled
|
||||||
lazy
|
lazy
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
>
|
>
|
||||||
<template #placeholder>
|
<template #placeholder>
|
||||||
<div class="cover-loading">
|
<div class="cover-loading">
|
||||||
<img class="loading-img" src="/images/pic/album.jpg?assest" alt="song" />
|
<img class="loading-img" src="/imgs/pic/album.jpg?assest" alt="song" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</n-image>
|
</n-image>
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
>
|
>
|
||||||
<template #placeholder>
|
<template #placeholder>
|
||||||
<div class="cover-loading">
|
<div class="cover-loading">
|
||||||
<img class="loading-img" src="/images/pic/song.jpg?assest" alt="loading-img" />
|
<img class="loading-img" src="/imgs/pic/song.jpg?assest" alt="loading-img" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</n-image>
|
</n-image>
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
>
|
>
|
||||||
<div class="login-content">
|
<div class="login-content">
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<img class="logo" src="/images/icons/favicon.png?asset" alt="logo" />
|
<img class="logo" src="/imgs/icons/favicon.png?asset" alt="logo" />
|
||||||
</div>
|
</div>
|
||||||
<!-- 登录方式 -->
|
<!-- 登录方式 -->
|
||||||
<n-tabs class="login-tabs" default-value="login-qr" type="segment" animated>
|
<n-tabs class="login-tabs" default-value="login-qr" type="segment" animated>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
:class="['qr', qrStatusCode === 802 ? 'hidden' : null]"
|
:class="['qr', qrStatusCode === 802 ? 'hidden' : null]"
|
||||||
:size="156"
|
:size="156"
|
||||||
:icon-size="30"
|
:icon-size="30"
|
||||||
icon-src="/images/icons/favicon.png?asset"
|
icon-src="/imgs/icons/favicon.png?asset"
|
||||||
error-correction-level="H"
|
error-correction-level="H"
|
||||||
/>
|
/>
|
||||||
<n-skeleton v-else class="qr" />
|
<n-skeleton v-else class="qr" />
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<nav :class="{ 'main-nav': true, 'no-sider': !showSider }">
|
<nav :class="{ 'main-nav': true, 'no-sider': !showSider }">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<div :class="['logo', asideMenuCollapsed ? 'collapsed' : null]" @click="router.push('/')">
|
<div :class="['logo', asideMenuCollapsed ? 'collapsed' : null]" @click="router.push('/')">
|
||||||
<!-- <n-avatar class="logo-img" src="/images/icons/favicon.png?asset" /> -->
|
<!-- <n-avatar class="logo-img" src="/imgs/icons/favicon.png?asset" /> -->
|
||||||
<n-icon class="logo-img" size="30">
|
<n-icon class="logo-img" size="30">
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
<img
|
<img
|
||||||
v-if="userLoginStatus && userData.detail?.profile?.vipType === 11"
|
v-if="userLoginStatus && userData.detail?.profile?.vipType === 11"
|
||||||
class="vip"
|
class="vip"
|
||||||
src="/images/pic/vip.png?assest"
|
src="/imgs/pic/vip.png?assest"
|
||||||
/>
|
/>
|
||||||
<n-icon depth="3" class="more">
|
<n-icon depth="3" class="more">
|
||||||
<SvgIcon icon="menu-down" />
|
<SvgIcon icon="menu-down" />
|
||||||
|
|||||||
@@ -56,7 +56,7 @@
|
|||||||
>
|
>
|
||||||
<template #placeholder>
|
<template #placeholder>
|
||||||
<div class="cover-loading">
|
<div class="cover-loading">
|
||||||
<img class="loading-img" src="/images/pic/song.jpg?assest" alt="loading-img" />
|
<img class="loading-img" src="/imgs/pic/song.jpg?assest" alt="loading-img" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</n-image>
|
</n-image>
|
||||||
@@ -670,7 +670,7 @@ watch(
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
animation: playerCoverRotate 18s linear infinite;
|
animation: playerCoverRotate 18s linear infinite;
|
||||||
background: no-repeat url("/images/pic/record.png?assest") center;
|
background: no-repeat url("/imgs/pic/record.png?assest") center;
|
||||||
:deep(img) {
|
:deep(img) {
|
||||||
width: 40px;
|
width: 40px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<img
|
<img
|
||||||
v-if="playCoverType === 'record'"
|
v-if="playCoverType === 'record'"
|
||||||
:class="{ pointer: true, play: playState }"
|
:class="{ pointer: true, play: playState }"
|
||||||
src="/images/pic/pointer.png?assest"
|
src="/imgs/pic/pointer.png?assest"
|
||||||
alt="pointer"
|
alt="pointer"
|
||||||
/>
|
/>
|
||||||
<!-- 专辑图片 -->
|
<!-- 专辑图片 -->
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
>
|
>
|
||||||
<template #placeholder>
|
<template #placeholder>
|
||||||
<div class="cover-loading">
|
<div class="cover-loading">
|
||||||
<img class="loading-img" src="/images/pic/song.jpg?assest" alt="loading-img" />
|
<img class="loading-img" src="/imgs/pic/song.jpg?assest" alt="loading-img" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</n-image>
|
</n-image>
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
<div
|
<div
|
||||||
class="overlay"
|
class="overlay"
|
||||||
:style="{
|
:style="{
|
||||||
backgroundImage: `url(${privateFmSong?.coverSize?.m || '/images/pic/song.jpg?assest'})`,
|
backgroundImage: `url(${privateFmSong?.coverSize?.m || '/imgs/pic/song.jpg?assest'})`,
|
||||||
}"
|
}"
|
||||||
/>
|
/>
|
||||||
<!-- 内容 -->
|
<!-- 内容 -->
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
>
|
>
|
||||||
<template #placeholder>
|
<template #placeholder>
|
||||||
<div class="cover-loading">
|
<div class="cover-loading">
|
||||||
<img class="loading-img" src="/images/pic/song.jpg?assest" alt="loading-img" />
|
<img class="loading-img" src="/imgs/pic/song.jpg?assest" alt="loading-img" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</n-image>
|
</n-image>
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ const formatData = (data, type = "playlist", noTracks = false) => {
|
|||||||
*/
|
*/
|
||||||
const getCoverUrl = (url, size = null) => {
|
const getCoverUrl = (url, size = null) => {
|
||||||
try {
|
try {
|
||||||
if (!url) return "/images/pic/song.jpg?assest";
|
if (!url) return "/imgs/pic/song.jpg?assest";
|
||||||
const sizeUrl = size
|
const sizeUrl = size
|
||||||
? typeof size === "number"
|
? typeof size === "number"
|
||||||
? `?param=${size}y${size}`
|
? `?param=${size}y${size}`
|
||||||
@@ -158,7 +158,7 @@ const getCoverUrl = (url, size = null) => {
|
|||||||
return imageUrl;
|
return imageUrl;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("图片链接处理出错:", error);
|
console.error("图片链接处理出错:", error);
|
||||||
return "/images/pic/song.jpg?assest";
|
return "/imgs/pic/song.jpg?assest";
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ export const getLocalCoverData = async (path, isAlbum = false) => {
|
|||||||
return lastCoverBlobUrl;
|
return lastCoverBlobUrl;
|
||||||
} else {
|
} else {
|
||||||
// 如果没有封面数据
|
// 如果没有封面数据
|
||||||
return `/images/pic/${isAlbum ? "album" : "song"}.jpg?assest`;
|
return `/imgs/pic/${isAlbum ? "album" : "song"}.jpg?assest`;
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("获取本地音乐封面出错:", error);
|
console.error("获取本地音乐封面出错:", error);
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
>
|
>
|
||||||
<template #placeholder>
|
<template #placeholder>
|
||||||
<div class="cover-loading">
|
<div class="cover-loading">
|
||||||
<img class="loading-img" src="/images/pic/avatar.jpg?assest" alt="avatar" />
|
<img class="loading-img" src="/imgs/pic/avatar.jpg?assest" alt="avatar" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</n-image>
|
</n-image>
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
>
|
>
|
||||||
<template #placeholder>
|
<template #placeholder>
|
||||||
<div class="cover-loading">
|
<div class="cover-loading">
|
||||||
<img class="loading-img" src="/images/pic/song.jpg?assest" alt="loading-img" />
|
<img class="loading-img" src="/imgs/pic/song.jpg?assest" alt="loading-img" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</n-image>
|
</n-image>
|
||||||
|
|||||||
@@ -78,10 +78,10 @@ const dailySongsCoverData = computed(() => {
|
|||||||
if (isLogin() && dailySongsData.value.data?.length) {
|
if (isLogin() && dailySongsData.value.data?.length) {
|
||||||
const randomIndex = Math.floor(Math.random() * dailySongsData.value.data.length);
|
const randomIndex = Math.floor(Math.random() * dailySongsData.value.data.length);
|
||||||
dailySongsCover.cover =
|
dailySongsCover.cover =
|
||||||
dailySongsData.value.data[randomIndex]?.coverSize?.s || "/images/pic/like.jpg";
|
dailySongsData.value.data[randomIndex]?.coverSize?.s || "/imgs/pic/like.jpg";
|
||||||
return dailySongsCover;
|
return dailySongsCover;
|
||||||
}
|
}
|
||||||
dailySongsCover.cover = "/images/pic/cover-2.jpg";
|
dailySongsCover.cover = "/imgs/pic/cover-2.jpg";
|
||||||
return dailySongsCover;
|
return dailySongsCover;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -93,10 +93,10 @@ const likeSongsCoverData = computed(() => {
|
|||||||
desc: "发现你独特的音乐品味",
|
desc: "发现你独特的音乐品味",
|
||||||
};
|
};
|
||||||
if (isLogin() && userLikeData.value.playlists?.length) {
|
if (isLogin() && userLikeData.value.playlists?.length) {
|
||||||
likeSongsCover.cover = userLikeData.value.playlists[0]?.coverSize?.s || "/images/pic/like.jpg";
|
likeSongsCover.cover = userLikeData.value.playlists[0]?.coverSize?.s || "/imgs/pic/like.jpg";
|
||||||
return likeSongsCover;
|
return likeSongsCover;
|
||||||
}
|
}
|
||||||
likeSongsCover.cover = "/images/pic/like.jpg";
|
likeSongsCover.cover = "/imgs/pic/like.jpg";
|
||||||
return likeSongsCover;
|
return likeSongsCover;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
>
|
>
|
||||||
<template #placeholder>
|
<template #placeholder>
|
||||||
<div class="cover-loading">
|
<div class="cover-loading">
|
||||||
<img class="loading-img" src="/images/pic/song.jpg?assest" alt="song" />
|
<img class="loading-img" src="/imgs/pic/song.jpg?assest" alt="song" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</n-image>
|
</n-image>
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
>
|
>
|
||||||
<template #placeholder>
|
<template #placeholder>
|
||||||
<div class="cover-loading">
|
<div class="cover-loading">
|
||||||
<img class="loading-img" src="/images/pic/song.jpg?assest" alt="song" />
|
<img class="loading-img" src="/imgs/pic/song.jpg?assest" alt="song" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</n-image>
|
</n-image>
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
<div class="creator">
|
<div class="creator">
|
||||||
<n-avatar
|
<n-avatar
|
||||||
:src="(djDetail.creator?.avatarUrl + '?param=300y$300').replace(/^http:/, 'https:')"
|
:src="(djDetail.creator?.avatarUrl + '?param=300y$300').replace(/^http:/, 'https:')"
|
||||||
fallback-src="/images/pic/avatar.jpg?assest"
|
fallback-src="/imgs/pic/avatar.jpg?assest"
|
||||||
round
|
round
|
||||||
/>
|
/>
|
||||||
<n-text class="nickname">{{ djDetail.creator?.nickname || "未知创建者" }}</n-text>
|
<n-text class="nickname">{{ djDetail.creator?.nickname || "未知创建者" }}</n-text>
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
>
|
>
|
||||||
<template #placeholder>
|
<template #placeholder>
|
||||||
<div class="cover-loading">
|
<div class="cover-loading">
|
||||||
<img class="loading-img" src="/images/pic/song.jpg?assest" alt="song" />
|
<img class="loading-img" src="/imgs/pic/song.jpg?assest" alt="song" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</n-image>
|
</n-image>
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
:src="
|
:src="
|
||||||
(playListDetail.creator?.avatarUrl + '?param=300y$300').replace(/^http:/, 'https:')
|
(playListDetail.creator?.avatarUrl + '?param=300y$300').replace(/^http:/, 'https:')
|
||||||
"
|
"
|
||||||
fallback-src="/images/pic/avatar.jpg?assest"
|
fallback-src="/imgs/pic/avatar.jpg?assest"
|
||||||
round
|
round
|
||||||
/>
|
/>
|
||||||
<n-text class="nickname">{{ playListDetail.creator?.nickname || "未知创建者" }}</n-text>
|
<n-text class="nickname">{{ playListDetail.creator?.nickname || "未知创建者" }}</n-text>
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
}"
|
}"
|
||||||
@click="chooseAlbum = item.album"
|
@click="chooseAlbum = item.album"
|
||||||
>
|
>
|
||||||
<img class="cover" src="/images/pic/album.jpg?assest" alt="album-cover" />
|
<img class="cover" src="/imgs/pic/album.jpg?assest" alt="album-cover" />
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<span class="album">{{ item.album }}</span>
|
<span class="album">{{ item.album }}</span>
|
||||||
<span class="artist">{{ item.artist }} · {{ item.num }} 首</span>
|
<span class="artist">{{ item.artist }} · {{ item.num }} 首</span>
|
||||||
|
|||||||
@@ -174,7 +174,7 @@
|
|||||||
>
|
>
|
||||||
<template #placeholder>
|
<template #placeholder>
|
||||||
<div class="cover-loading">
|
<div class="cover-loading">
|
||||||
<img class="loading-img" src="/images/pic/avatar.jpg?assest" alt="song" />
|
<img class="loading-img" src="/imgs/pic/avatar.jpg?assest" alt="song" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</n-image>
|
</n-image>
|
||||||
|
|||||||