Compare commits
No commits in common. "main" and "v1.10.6" have entirely different histories.
1
.npmrc
1
.npmrc
@ -1 +0,0 @@
|
|||||||
@unlock-music:registry=https://git.unlock-music.dev/api/packages/um/npm/
|
|
@ -6,15 +6,12 @@
|
|||||||
- Unlock Music 项目是以学习和技术研究的初衷创建的,修改、再分发时请遵循[授权协议]。
|
- Unlock Music 项目是以学习和技术研究的初衷创建的,修改、再分发时请遵循[授权协议]。
|
||||||
- Unlock Music 的 CLI 版本可以在 [unlock-music/cli] 找到,大批量转换建议使用 CLI 版本。
|
- Unlock Music 的 CLI 版本可以在 [unlock-music/cli] 找到,大批量转换建议使用 CLI 版本。
|
||||||
- 我们新建了 Telegram 群组 [`@unlock_music_chat`] ,欢迎加入!
|
- 我们新建了 Telegram 群组 [`@unlock_music_chat`] ,欢迎加入!
|
||||||
- CI 自动构建已经部署,可以在 [um-packages] 下载
|
- CI 自动构建已经部署,可以在 [UM-Packages] 下载
|
||||||
|
|
||||||
> **WARNING**
|
|
||||||
> 在本站 fork 不会起到备份的作用,只会浪费服务器储存空间。如无必要请勿 fork 该仓库。
|
|
||||||
|
|
||||||
[授权协议]: https://git.unlock-music.dev/um/web/src/branch/master/LICENSE
|
[授权协议]: https://git.unlock-music.dev/um/web/src/branch/master/LICENSE
|
||||||
[unlock-music/cli]: https://git.unlock-music.dev/um/cli
|
[unlock-music/cli]: https://git.unlock-music.dev/um/cli
|
||||||
[`@unlock_music_chat`]: https://t.me/unlock_music_chat
|
[`@unlock_music_chat`]: https://t.me/unlock_music_chat
|
||||||
[um-packages]: https://git.unlock-music.dev/um/-/packages/generic/web-build/
|
[UM-Packages]: https://git.unlock-music.dev/um/-/packages/generic/web-build/
|
||||||
|
|
||||||
## 特性
|
## 特性
|
||||||
|
|
||||||
@ -45,7 +42,7 @@
|
|||||||
|
|
||||||
### 使用预构建版本
|
### 使用预构建版本
|
||||||
|
|
||||||
- 从 [Release] 或 [CI 构建][um-packages] 下载预构建的版本
|
- 从 [Release] 或 [CI 构建][UM-Packages] 下载预构建的版本
|
||||||
- :warning: 本地使用请下载`legacy版本`(`modern版本`只能通过 **http(s)协议** 访问)
|
- :warning: 本地使用请下载`legacy版本`(`modern版本`只能通过 **http(s)协议** 访问)
|
||||||
- 解压缩后即可部署或本地使用(**请勿直接运行源代码**)
|
- 解压缩后即可部署或本地使用(**请勿直接运行源代码**)
|
||||||
|
|
||||||
|
@ -1,23 +1,18 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 3,
|
"manifest_version": 2,
|
||||||
"content_security_policy": {
|
|
||||||
"extension_pages": "script-src 'self' 'wasm-unsafe-eval'; object-src 'self';"
|
|
||||||
},
|
|
||||||
"name": "音乐解锁",
|
"name": "音乐解锁",
|
||||||
"short_name": "音乐解锁",
|
"short_name": "音乐解锁",
|
||||||
"icons": {
|
"icons": {
|
||||||
"16": "img/icons/favicon-16x16.png",
|
"128": "./img/icons/msapplication-icon-144x144.png"
|
||||||
"32": "img/icons/favicon-32x32.png",
|
|
||||||
"192": "img/icons/android-chrome-192x192.png",
|
|
||||||
"512": "img/icons/android-chrome-512x512.png"
|
|
||||||
},
|
},
|
||||||
"description": "在任何设备上解锁已购的加密音乐!",
|
"description": "在任何设备上解锁已购的加密音乐!",
|
||||||
"permissions": ["storage"],
|
"permissions": [
|
||||||
|
"storage"
|
||||||
|
],
|
||||||
"offline_enabled": true,
|
"offline_enabled": true,
|
||||||
"options_page": "index.html",
|
"options_page": "./index.html",
|
||||||
"homepage_url": "https://git.unlock-music.dev/um/web",
|
"homepage_url": "https://git.unlock-music.dev/um/web",
|
||||||
"action": {
|
"browser_action": {
|
||||||
"default_icon": "img/icons/favicon-32x32.png",
|
|
||||||
"default_popup": "./popup.html"
|
"default_popup": "./popup.html"
|
||||||
}
|
}
|
||||||
}
|
}
|
61
package-lock.json
generated
61
package-lock.json
generated
@ -1,17 +1,17 @@
|
|||||||
{
|
{
|
||||||
"name": "unlock-music",
|
"name": "unlock-music",
|
||||||
"version": "1.10.8",
|
"version": "1.10.6",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "unlock-music",
|
"name": "unlock-music",
|
||||||
"version": "1.10.8",
|
"version": "1.10.6",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/preset-typescript": "^7.16.5",
|
"@babel/preset-typescript": "^7.16.5",
|
||||||
"@unlock-music/joox-crypto": "^0.0.1",
|
"@unlock-music/joox-crypto": "^0.0.1-R5",
|
||||||
"@xhacker/kgmwasm": "^1.0.0",
|
"@xhacker/kgmwasm": "^1.0.0",
|
||||||
"@xhacker/qmcwasm": "^1.0.0",
|
"@xhacker/qmcwasm": "^1.0.0",
|
||||||
"base64-js": "^1.5.1",
|
"base64-js": "^1.5.1",
|
||||||
@ -3484,12 +3484,11 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@unlock-music/joox-crypto": {
|
"node_modules/@unlock-music/joox-crypto": {
|
||||||
"version": "0.0.1",
|
"version": "0.0.1-R5",
|
||||||
"resolved": "https://git.unlock-music.dev/api/packages/um/npm/%40unlock-music%2Fjoox-crypto/-/0.0.1/joox-crypto-0.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@unlock-music/joox-crypto/-/joox-crypto-0.0.1-R5.tgz",
|
||||||
"integrity": "sha512-bj7UcA4/KSqK07PPmoRYJ+3s4h3P45RGUVAMspptMYXobhVkDlB1ArTYNlyIlrF/P0EMy7JkfEdOgUz0nD7EAg==",
|
"integrity": "sha512-+FhGT4bjzfb1Q7dAwHps/XqbqXrRA6Qg7pkDPzyXfeRmQocAySQ/dekojxkaFBf7ZX5ToIAopwxkKZ5NFt5bFw==",
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"crypto-js": "^4.2.0"
|
"crypto-js": "^4.1.1"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"joox-decrypt": "joox-decrypt"
|
"joox-decrypt": "joox-decrypt"
|
||||||
@ -5712,23 +5711,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001668",
|
"version": "1.0.30001434",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001668.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz",
|
||||||
"integrity": "sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==",
|
"integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA=="
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"type": "opencollective",
|
|
||||||
"url": "https://opencollective.com/browserslist"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "tidelift",
|
|
||||||
"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "github",
|
|
||||||
"url": "https://github.com/sponsors/ai"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"node_modules/case-sensitive-paths-webpack-plugin": {
|
"node_modules/case-sensitive-paths-webpack-plugin": {
|
||||||
"version": "2.4.0",
|
"version": "2.4.0",
|
||||||
@ -6744,9 +6729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/crypto-js": {
|
"node_modules/crypto-js": {
|
||||||
"version": "4.2.0",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz",
|
||||||
"integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
|
"integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw=="
|
||||||
},
|
},
|
||||||
"node_modules/css-color-names": {
|
"node_modules/css-color-names": {
|
||||||
"version": "0.0.4",
|
"version": "0.0.4",
|
||||||
@ -23668,11 +23653,11 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@unlock-music/joox-crypto": {
|
"@unlock-music/joox-crypto": {
|
||||||
"version": "0.0.1",
|
"version": "0.0.1-R5",
|
||||||
"resolved": "https://git.unlock-music.dev/api/packages/um/npm/%40unlock-music%2Fjoox-crypto/-/0.0.1/joox-crypto-0.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@unlock-music/joox-crypto/-/joox-crypto-0.0.1-R5.tgz",
|
||||||
"integrity": "sha512-bj7UcA4/KSqK07PPmoRYJ+3s4h3P45RGUVAMspptMYXobhVkDlB1ArTYNlyIlrF/P0EMy7JkfEdOgUz0nD7EAg==",
|
"integrity": "sha512-+FhGT4bjzfb1Q7dAwHps/XqbqXrRA6Qg7pkDPzyXfeRmQocAySQ/dekojxkaFBf7ZX5ToIAopwxkKZ5NFt5bFw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"crypto-js": "^4.2.0"
|
"crypto-js": "^4.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@vue/babel-helper-vue-jsx-merge-props": {
|
"@vue/babel-helper-vue-jsx-merge-props": {
|
||||||
@ -25491,9 +25476,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"caniuse-lite": {
|
"caniuse-lite": {
|
||||||
"version": "1.0.30001668",
|
"version": "1.0.30001434",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001668.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz",
|
||||||
"integrity": "sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw=="
|
"integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA=="
|
||||||
},
|
},
|
||||||
"case-sensitive-paths-webpack-plugin": {
|
"case-sensitive-paths-webpack-plugin": {
|
||||||
"version": "2.4.0",
|
"version": "2.4.0",
|
||||||
@ -26312,9 +26297,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"crypto-js": {
|
"crypto-js": {
|
||||||
"version": "4.2.0",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz",
|
||||||
"integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
|
"integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw=="
|
||||||
},
|
},
|
||||||
"css-color-names": {
|
"css-color-names": {
|
||||||
"version": "0.0.4",
|
"version": "0.0.4",
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "unlock-music",
|
"name": "unlock-music",
|
||||||
"version": "1.10.8",
|
"version": "1.10.6",
|
||||||
"ext_build": 0,
|
"ext_build": 0,
|
||||||
"updateInfo": "修正 joox 在远程获取 API 信息出错时不能正确回退到本地元信息获取的错误。",
|
"updateInfo": "修正文件过小的情况下酷狗 / QQ解密错误问题",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"description": "Unlock encrypted music file in browser.",
|
"description": "Unlock encrypted music file in browser.",
|
||||||
"repository": {
|
"repository": {
|
||||||
@ -21,7 +21,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/preset-typescript": "^7.16.5",
|
"@babel/preset-typescript": "^7.16.5",
|
||||||
"@unlock-music/joox-crypto": "^0.0.1",
|
"@unlock-music/joox-crypto": "^0.0.1-R5",
|
||||||
"@xhacker/kgmwasm": "^1.0.0",
|
"@xhacker/kgmwasm": "^1.0.0",
|
||||||
"@xhacker/qmcwasm": "^1.0.0",
|
"@xhacker/qmcwasm": "^1.0.0",
|
||||||
"base64-js": "^1.5.1",
|
"base64-js": "^1.5.1",
|
||||||
|
12
src/App.vue
12
src/App.vue
@ -4,22 +4,22 @@
|
|||||||
<Home />
|
<Home />
|
||||||
</el-main>
|
</el-main>
|
||||||
<el-footer id="app-footer">
|
<el-footer id="app-footer">
|
||||||
<div>
|
<el-row>
|
||||||
<a href="https://git.unlock-music.dev/um/web" target="_blank">音乐解锁</a>({{ version }})
|
<a href="https://git.unlock-music.dev/um/web" target="_blank">音乐解锁</a>({{ version }})
|
||||||
:移除已购音乐的加密保护。
|
:移除已购音乐的加密保护。
|
||||||
<a href="https://git.unlock-music.dev/um/web/wiki/使用提示" target="_blank">使用提示</a>
|
<a href="https://git.unlock-music.dev/um/web/wiki/使用提示" target="_blank">使用提示</a>
|
||||||
</div>
|
</el-row>
|
||||||
<div>
|
<el-row>
|
||||||
目前支持 网易云音乐(ncm), QQ音乐(qmc, mflac, mgg), 酷狗音乐(kgm), 虾米音乐(xm), 酷我音乐(.kwm)
|
目前支持 网易云音乐(ncm), QQ音乐(qmc, mflac, mgg), 酷狗音乐(kgm), 虾米音乐(xm), 酷我音乐(.kwm)
|
||||||
<a href="https://git.unlock-music.dev/um/web/src/branch/master/README.md" target="_blank">更多</a>。
|
<a href="https://git.unlock-music.dev/um/web/src/branch/master/README.md" target="_blank">更多</a>。
|
||||||
</div>
|
</el-row>
|
||||||
<div>
|
<el-row>
|
||||||
<!--如果进行二次开发,此行版权信息不得移除且应明显地标注于页面上-->
|
<!--如果进行二次开发,此行版权信息不得移除且应明显地标注于页面上-->
|
||||||
<span>Copyright © 2019 - {{ new Date().getFullYear() }} MengYX</span>
|
<span>Copyright © 2019 - {{ new Date().getFullYear() }} MengYX</span>
|
||||||
音乐解锁使用
|
音乐解锁使用
|
||||||
<a href="https://git.unlock-music.dev/um/web/src/branch/master/LICENSE" target="_blank">MIT许可协议</a>
|
<a href="https://git.unlock-music.dev/um/web/src/branch/master/LICENSE" target="_blank">MIT许可协议</a>
|
||||||
开放源代码
|
开放源代码
|
||||||
</div>
|
</el-row>
|
||||||
</el-footer>
|
</el-footer>
|
||||||
</el-container>
|
</el-container>
|
||||||
</template>
|
</template>
|
||||||
|
@ -4,6 +4,16 @@ label {
|
|||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
.item-desc {
|
||||||
|
color: #aaa;
|
||||||
|
font-size: small;
|
||||||
|
display: block;
|
||||||
|
line-height: 1.2;
|
||||||
|
margin-top: 0.2em;
|
||||||
|
}
|
||||||
|
.item-desc a {
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
form >>> input {
|
form >>> input {
|
||||||
font-family: 'Courier New', Courier, monospace;
|
font-family: 'Courier New', Courier, monospace;
|
||||||
@ -29,7 +39,7 @@ form >>> input {
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<p class="tip">
|
<p class="item-desc">
|
||||||
下载该加密文件的 JOOX 应用所记录的设备唯一识别码。
|
下载该加密文件的 JOOX 应用所记录的设备唯一识别码。
|
||||||
<br />
|
<br />
|
||||||
参见:
|
参见:
|
||||||
|
@ -1,4 +1,24 @@
|
|||||||
<style scoped>
|
<style scoped>
|
||||||
|
label {
|
||||||
|
cursor: pointer;
|
||||||
|
line-height: 1.2;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.item-desc {
|
||||||
|
color: #aaa;
|
||||||
|
font-size: small;
|
||||||
|
display: block;
|
||||||
|
line-height: 1.2;
|
||||||
|
margin-top: 0.2em;
|
||||||
|
}
|
||||||
|
.item-desc a {
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
form >>> input {
|
||||||
|
font-family: 'Courier New', Courier, monospace;
|
||||||
|
}
|
||||||
|
|
||||||
* >>> .um-edit-dialog {
|
* >>> .um-edit-dialog {
|
||||||
max-width: 90%;
|
max-width: 90%;
|
||||||
width: 30em;
|
width: 30em;
|
||||||
@ -9,8 +29,7 @@
|
|||||||
<el-dialog @close="cancel()" title="音乐标签编辑" :visible="show" custom-class="um-edit-dialog" center>
|
<el-dialog @close="cancel()" title="音乐标签编辑" :visible="show" custom-class="um-edit-dialog" center>
|
||||||
<el-form ref="form" status-icon :model="form" label-width="0">
|
<el-form ref="form" status-icon :model="form" label-width="0">
|
||||||
<section>
|
<section>
|
||||||
<div class="music-cover">
|
<el-image v-show="!editPicture" :src="imgFile.url || picture" style="width: 100px; height: 100px">
|
||||||
<el-image v-show="!editPicture" :src="imgFile.url || picture">
|
|
||||||
<div slot="error" class="image-slot el-image__error">暂无封面</div>
|
<div slot="error" class="image-slot el-image__error">暂无封面</div>
|
||||||
</el-image>
|
</el-image>
|
||||||
<el-upload v-show="editPicture" :auto-upload="false" :on-change="addFile" :on-remove="rmvFile" :show-file-list="true" :limit="1" list-type="picture" action="" drag>
|
<el-upload v-show="editPicture" :auto-upload="false" :on-change="addFile" :on-remove="rmvFile" :show-file-list="true" :limit="1" list-type="picture" action="" drag>
|
||||||
@ -20,51 +39,47 @@
|
|||||||
新拖到此处的图片将覆盖原始图片
|
新拖到此处的图片将覆盖原始图片
|
||||||
</div>
|
</div>
|
||||||
</el-upload>
|
</el-upload>
|
||||||
<i :class="{'el-icon-edit': !editPicture, 'el-icon-check': editPicture}"
|
<i
|
||||||
@click="changeCover"></i>
|
:class="{'el-icon-edit': !editPicture, 'el-icon-check': editPicture}"
|
||||||
</div>
|
@click="changeCover"
|
||||||
|
></i><br />
|
||||||
<div class="edit-item">
|
标题:
|
||||||
<div class="label">标题</div>
|
<span v-show="!editTitle">{{title}}</span>
|
||||||
<div class="value" v-show="!editTitle">{{title}}</div>
|
<el-input v-show="editTitle" v-model="title"></el-input>
|
||||||
<el-input class="input" size="small" v-show="editTitle" v-model="title"/>
|
<i
|
||||||
<i :class="{'el-icon-edit': !editTitle, 'el-icon-check': editTitle}"
|
:class="{'el-icon-edit': !editTitle, 'el-icon-check': editTitle}"
|
||||||
@click="editTitle = !editTitle"/>
|
@click="editTitle = !editTitle"
|
||||||
</div>
|
></i><br />
|
||||||
<div class="edit-item">
|
艺术家:
|
||||||
<div class="label">艺术家</div>
|
<span v-show="!editArtist">{{artist}}</span>
|
||||||
<div class="value" v-show="!editArtist">{{artist}}</div>
|
<el-input v-show="editArtist" v-model="artist"></el-input>
|
||||||
<el-input class="input" size="small" v-show="editArtist" v-model="artist"/>
|
<i
|
||||||
<i :class="{'el-icon-edit': !editArtist, 'el-icon-check': editArtist}"
|
:class="{'el-icon-edit': !editArtist, 'el-icon-check': editArtist}"
|
||||||
@click="editArtist = !editArtist"
|
@click="editArtist = !editArtist"
|
||||||
/>
|
></i><br />
|
||||||
</div>
|
专辑:
|
||||||
<div class="edit-item">
|
<span v-show="!editAlbum">{{album}}</span>
|
||||||
<div class="label">专辑</div>
|
<el-input v-show="editAlbum" v-model="album"></el-input>
|
||||||
<div class="value" v-show="!editAlbum">{{album}}</div>
|
<i
|
||||||
<el-input class="input" size="small" v-show="editAlbum" v-model="album"/>
|
:class="{'el-icon-edit': !editAlbum, 'el-icon-check': editAlbum}"
|
||||||
<i :class="{'el-icon-edit': !editAlbum, 'el-icon-check': editAlbum}"
|
|
||||||
@click="editAlbum = !editAlbum"
|
@click="editAlbum = !editAlbum"
|
||||||
/>
|
></i><br />
|
||||||
</div>
|
专辑艺术家:
|
||||||
<div class="edit-item">
|
<span v-show="!editAlbumartist">{{albumartist}}</span>
|
||||||
<div class="label">专辑艺术家</div>
|
<el-input v-show="editAlbumartist" v-model="albumartist"></el-input>
|
||||||
<div class="value" v-show="!editAlbumartist">{{albumartist}}</div>
|
<i
|
||||||
<el-input class="input" size="small" v-show="editAlbumartist" v-model="albumartist"/>
|
:class="{'el-icon-edit': !editAlbumartist, 'el-icon-check': editAlbumartist}"
|
||||||
<i :class="{'el-icon-edit': !editAlbumartist, 'el-icon-check': editAlbumartist}"
|
|
||||||
@click="editAlbumartist = !editAlbumartist"
|
@click="editAlbumartist = !editAlbumartist"
|
||||||
/>
|
></i><br />
|
||||||
</div>
|
风格:
|
||||||
<div class="edit-item">
|
<span v-show="!editGenre">{{genre}}</span>
|
||||||
<div class="label">风格</div>
|
<el-input v-show="editGenre" v-model="genre"></el-input>
|
||||||
<div class="value" v-show="!editGenre">{{genre}}</div>
|
<i
|
||||||
<el-input class="input" size="small" v-show="editGenre" v-model="genre"/>
|
:class="{'el-icon-edit': !editGenre, 'el-icon-check': editGenre}"
|
||||||
<i :class="{'el-icon-edit': !editGenre, 'el-icon-check': editGenre}"
|
|
||||||
@click="editGenre = !editGenre"
|
@click="editGenre = !editGenre"
|
||||||
/>
|
></i><br />
|
||||||
</div>
|
|
||||||
|
|
||||||
<p class="tip">
|
<p class="item-desc">
|
||||||
为了节省您设备的资源,请在确定前充分检查,避免反复修改。<br />
|
为了节省您设备的资源,请在确定前充分检查,避免反复修改。<br />
|
||||||
直接关闭此对话框不会保留所作的更改。
|
直接关闭此对话框不会保留所作的更改。
|
||||||
</p>
|
</p>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="歌曲">
|
<el-table-column label="歌曲">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<p>{{ scope.row.title }}</p>
|
<span>{{ scope.row.title }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="歌手">
|
<el-table-column label="歌手">
|
||||||
|
@ -10,45 +10,235 @@
|
|||||||
background-color: $dark-bg;
|
background-color: $dark-bg;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 编辑歌曲信息
|
// FORM
|
||||||
.music-cover{
|
.el-radio{
|
||||||
i{
|
&__label{
|
||||||
|
color: $dark-text-main;
|
||||||
|
}
|
||||||
|
&__input{
|
||||||
|
color: $dark-text-info;
|
||||||
|
.el-radio__inner{
|
||||||
|
border-color: $dark-border;
|
||||||
|
background-color: $dark-btn-bg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-checked{
|
||||||
|
.el-radio__inner{
|
||||||
|
background-color: $blue;
|
||||||
|
}
|
||||||
|
.el-radio__label{
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-checkbox.is-bordered{
|
||||||
|
border-color: $dark-border;
|
||||||
|
color: $dark-text-main;
|
||||||
|
background-color: $dark-btn-bg;
|
||||||
|
.el-checkbox__inner{
|
||||||
|
background-color: $dark-btn-bg-highlight;
|
||||||
|
border-color: $dark-border-highlight;
|
||||||
|
}
|
||||||
&:hover{
|
&:hover{
|
||||||
color: $color-checkbox;
|
border-color: $dark-border-highlight;
|
||||||
|
.el-checkbox__inner{
|
||||||
|
background-color: $dark-btn-bg-highlight;
|
||||||
|
border-color: $dark-border-highlight;
|
||||||
|
}
|
||||||
|
.el-checkbox__label{
|
||||||
|
color: $dark-text-info;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.el-image{
|
&.is-checked{
|
||||||
border: 1px solid $dark-border;
|
background-color: $blue;
|
||||||
|
.el-checkbox__inner{
|
||||||
|
border-color: white;
|
||||||
}
|
}
|
||||||
|
.el-checkbox__label{
|
||||||
|
color: white;
|
||||||
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
.edit-item{
|
|
||||||
.label{
|
|
||||||
}
|
|
||||||
.value{
|
|
||||||
}
|
|
||||||
.input{
|
|
||||||
input{
|
|
||||||
background-color: transparent !important;
|
|
||||||
border-bottom: 1px solid $dark-border;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
i{
|
|
||||||
&:hover{
|
&:hover{
|
||||||
color: $color-checkbox;
|
border-color: $blue;
|
||||||
|
.el-checkbox__inner{
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// footer
|
|
||||||
#app-footer {
|
// BUTTON
|
||||||
|
.el-button{
|
||||||
|
background-color: $dark-btn-bg;
|
||||||
|
border-color: $dark-border;
|
||||||
|
color: $dark-text-main;
|
||||||
|
|
||||||
|
&:active{
|
||||||
|
transform: translateY(2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
&--default{
|
||||||
|
&.is-plain {
|
||||||
|
background-color: $dark-btn-bg;
|
||||||
|
&:hover {
|
||||||
|
background-color: $blue;
|
||||||
|
border-color: $blue;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.is-circle {
|
||||||
|
background-color: $dark-blue;
|
||||||
|
border-color: $dark-blue;
|
||||||
|
&:hover {
|
||||||
|
background-color: $blue;
|
||||||
|
border-color: $blue;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&--success{
|
||||||
|
&.is-plain {
|
||||||
|
background-color: $dark-btn-bg;
|
||||||
|
&:hover {
|
||||||
|
background-color: $green;
|
||||||
|
border-color: $green;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.is-circle {
|
||||||
|
background-color: $dark-green;
|
||||||
|
border-color: $dark-green;
|
||||||
|
&:hover {
|
||||||
|
background-color: $green;
|
||||||
|
border-color: $green;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&--danger{
|
||||||
|
&.is-plain{
|
||||||
|
border-color: $dark-border;
|
||||||
|
background-color: $dark-btn-bg;
|
||||||
|
&:hover{
|
||||||
|
background-color: $red;
|
||||||
|
border-color: $red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.is-circle {
|
||||||
|
background-color: $dark-red;
|
||||||
|
border-color: $dark-red;
|
||||||
|
&:hover {
|
||||||
|
background-color: $red;
|
||||||
|
border-color: $red;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 文件拖放区
|
||||||
|
.el-upload__tip{
|
||||||
|
color: $dark-text-info;
|
||||||
|
}
|
||||||
|
.el-upload-dragger{
|
||||||
|
background-color: $dark-uploader-bg;
|
||||||
|
border-color: $dark-border;
|
||||||
|
.el-upload__text{
|
||||||
|
color: $dark-text-info;
|
||||||
|
}
|
||||||
|
&:hover{
|
||||||
|
background: $dark-uploader-bg-highlight;
|
||||||
|
border-color: $dark-border-highlight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TABLE
|
||||||
|
.el-table{
|
||||||
|
background-color: $dark-bg-td;
|
||||||
|
&:before{ // 去除表格末尾的横线
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
&__header{
|
||||||
|
th{
|
||||||
|
border-bottom-color: $dark-border !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
th.el-table__cell{
|
||||||
|
background-color: $dark-bg-th;
|
||||||
|
color: $dark-text-info;
|
||||||
|
}
|
||||||
|
td{
|
||||||
|
border-bottom-color: $dark-border !important;
|
||||||
|
}
|
||||||
|
tr{
|
||||||
|
background-color: $dark-bg-td;
|
||||||
|
color: $dark-text-main;
|
||||||
|
&:hover{
|
||||||
|
td{
|
||||||
|
background-color: $dark-bg-th !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// LINKS
|
||||||
a{
|
a{
|
||||||
color: lighten($text-comment, 5%);
|
text-decoration: none;
|
||||||
|
color: darken($dark-color-link, 15%);
|
||||||
&:hover{
|
&:hover{
|
||||||
color: $color-link;
|
color: $dark-color-link;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ALERT
|
||||||
|
.el-notification{
|
||||||
|
background-color: $dark-btn-bg-highlight;
|
||||||
|
border-color: $dark-border;
|
||||||
|
&__title{
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
&__content{
|
||||||
|
color: $dark-text-info;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// DIALOG
|
||||||
|
.el-dialog{
|
||||||
|
background-color: $dark-dialog-bg;
|
||||||
|
.el-dialog__header{
|
||||||
|
.el-dialog__title{
|
||||||
|
color: $dark-text-main;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.el-dialog__body{
|
||||||
|
color: $dark-text-main;
|
||||||
|
.el-input{
|
||||||
|
.el-input__inner{
|
||||||
|
color: $dark-text-main;
|
||||||
|
background-color: $dark-btn-bg;
|
||||||
|
}
|
||||||
|
.el-input__suffix{
|
||||||
|
.el-input__suffix-inner{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.el-input__count{
|
||||||
|
.el-input__count-inner{
|
||||||
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
.item-desc{
|
||||||
|
color: $dark-text-info;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 自定义样式
|
// 自定义样式
|
||||||
// 首页弹窗提示信息的 更新信息 面板
|
// 首页弹窗提示信息的 更新信息 面板
|
||||||
|
39
src/scss/_element-ui-overrite.scss
Normal file
39
src/scss/_element-ui-overrite.scss
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
$color-checkbox: $blue;
|
||||||
|
$color-border-el: #DCDFE6;
|
||||||
|
|
||||||
|
$btn-radius: 6px;
|
||||||
|
|
||||||
|
/* FORM */
|
||||||
|
// checkbox
|
||||||
|
.el-checkbox.is-bordered{
|
||||||
|
@include border-radius($btn-radius) ;
|
||||||
|
&:hover{
|
||||||
|
border-color: $color-checkbox;
|
||||||
|
.el-checkbox__label{
|
||||||
|
color: $color-checkbox;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.el-checkbox__input.is-focus{
|
||||||
|
.el-checkbox__inner{
|
||||||
|
border-color: $color-border-el;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.is-checked{
|
||||||
|
background-color: $color-checkbox;
|
||||||
|
.el-checkbox__label{
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
.el-checkbox__inner{
|
||||||
|
border-color: white;
|
||||||
|
background-color: white;
|
||||||
|
&:after{
|
||||||
|
border-color: $color-checkbox;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// el-button
|
||||||
|
.el-button{
|
||||||
|
@include border-radius($btn-radius) ;
|
||||||
|
}
|
@ -1,291 +0,0 @@
|
|||||||
$color-checkbox: $blue;
|
|
||||||
$color-border-el: #DCDFE6;
|
|
||||||
|
|
||||||
$btn-radius: 6px;
|
|
||||||
|
|
||||||
/* FORM */
|
|
||||||
// checkbox
|
|
||||||
.el-checkbox.is-bordered{
|
|
||||||
@include border-radius($btn-radius) ;
|
|
||||||
&:hover{
|
|
||||||
border-color: $color-checkbox;
|
|
||||||
.el-checkbox__label{
|
|
||||||
color: $color-checkbox;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.el-checkbox__input.is-focus{
|
|
||||||
.el-checkbox__inner{
|
|
||||||
border-color: $color-border-el;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.is-checked{
|
|
||||||
background-color: $color-checkbox;
|
|
||||||
.el-checkbox__label{
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
.el-checkbox__inner{
|
|
||||||
border-color: white;
|
|
||||||
background-color: white;
|
|
||||||
&:after{
|
|
||||||
border-color: $color-checkbox;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// el-button
|
|
||||||
.el-button{
|
|
||||||
@include border-radius($btn-radius) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
// upload
|
|
||||||
.el-upload-dragger{
|
|
||||||
&:hover{
|
|
||||||
background-color: transparentize($color-checkbox, 0.9);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.el-upload__tip{
|
|
||||||
text-align: center;
|
|
||||||
color: $text-comment;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// dialog
|
|
||||||
.el-dialog{
|
|
||||||
@include border-radius(5px);
|
|
||||||
&.el-dialog--center{
|
|
||||||
.el-dialog__body{
|
|
||||||
padding: 25px 25px 15px;
|
|
||||||
}
|
|
||||||
.el-dialog__footer{
|
|
||||||
padding: 10px 20px 30px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
|
|
||||||
// FORM
|
|
||||||
.el-radio{
|
|
||||||
&__label{
|
|
||||||
color: $dark-text-main;
|
|
||||||
}
|
|
||||||
&__input{
|
|
||||||
color: $dark-text-info;
|
|
||||||
.el-radio__inner{
|
|
||||||
border-color: $dark-border;
|
|
||||||
background-color: $dark-btn-bg;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.is-checked{
|
|
||||||
.el-radio__inner{
|
|
||||||
background-color: $blue;
|
|
||||||
}
|
|
||||||
.el-radio__label{
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.el-checkbox.is-bordered{
|
|
||||||
border-color: $dark-border;
|
|
||||||
color: $dark-text-main;
|
|
||||||
background-color: $dark-btn-bg;
|
|
||||||
.el-checkbox__inner{
|
|
||||||
background-color: $dark-btn-bg-highlight;
|
|
||||||
border-color: $dark-border-highlight;
|
|
||||||
}
|
|
||||||
&:hover{
|
|
||||||
border-color: $dark-border-highlight;
|
|
||||||
.el-checkbox__inner{
|
|
||||||
background-color: $dark-btn-bg-highlight;
|
|
||||||
border-color: $dark-border-highlight;
|
|
||||||
}
|
|
||||||
.el-checkbox__label{
|
|
||||||
color: $dark-text-info;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.is-checked{
|
|
||||||
background-color: $blue;
|
|
||||||
.el-checkbox__inner{
|
|
||||||
border-color: white;
|
|
||||||
}
|
|
||||||
.el-checkbox__label{
|
|
||||||
color: white;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
&:hover{
|
|
||||||
border-color: $blue;
|
|
||||||
.el-checkbox__inner{
|
|
||||||
background-color: white;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// BUTTON
|
|
||||||
.el-button{
|
|
||||||
background-color: $dark-btn-bg;
|
|
||||||
border-color: $dark-border;
|
|
||||||
color: $dark-text-main;
|
|
||||||
|
|
||||||
&:active{
|
|
||||||
transform: translateY(2px);
|
|
||||||
}
|
|
||||||
|
|
||||||
&--default{
|
|
||||||
&.is-plain {
|
|
||||||
background-color: $dark-btn-bg;
|
|
||||||
&:hover {
|
|
||||||
background-color: $blue;
|
|
||||||
border-color: $blue;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.is-circle {
|
|
||||||
background-color: $dark-blue;
|
|
||||||
border-color: $dark-blue;
|
|
||||||
&:hover {
|
|
||||||
background-color: $blue;
|
|
||||||
border-color: $blue;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&--success{
|
|
||||||
&.is-plain {
|
|
||||||
background-color: $dark-btn-bg;
|
|
||||||
&:hover {
|
|
||||||
background-color: $green;
|
|
||||||
border-color: $green;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.is-circle {
|
|
||||||
background-color: $dark-green;
|
|
||||||
border-color: $dark-green;
|
|
||||||
&:hover {
|
|
||||||
background-color: $green;
|
|
||||||
border-color: $green;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&--danger{
|
|
||||||
&.is-plain{
|
|
||||||
border-color: $dark-border;
|
|
||||||
background-color: $dark-btn-bg;
|
|
||||||
&:hover{
|
|
||||||
background-color: $red;
|
|
||||||
border-color: $red;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.is-circle {
|
|
||||||
background-color: $dark-red;
|
|
||||||
border-color: $dark-red;
|
|
||||||
&:hover {
|
|
||||||
background-color: $red;
|
|
||||||
border-color: $red;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 文件拖放区
|
|
||||||
.el-upload__tip{
|
|
||||||
color: $dark-text-info;
|
|
||||||
}
|
|
||||||
.el-upload-dragger{
|
|
||||||
background-color: $dark-uploader-bg;
|
|
||||||
border-color: $dark-border;
|
|
||||||
.el-upload__text{
|
|
||||||
color: $dark-text-info;
|
|
||||||
}
|
|
||||||
&:hover{
|
|
||||||
background: $dark-uploader-bg-highlight;
|
|
||||||
border-color: $dark-border-highlight;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TABLE
|
|
||||||
.el-table{
|
|
||||||
background-color: $dark-bg-td;
|
|
||||||
&:before{ // 去除表格末尾的横线
|
|
||||||
content: none;
|
|
||||||
}
|
|
||||||
&__header{
|
|
||||||
th{
|
|
||||||
border-bottom-color: $dark-border !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
th.el-table__cell{
|
|
||||||
background-color: $dark-bg-th;
|
|
||||||
color: $dark-text-info;
|
|
||||||
}
|
|
||||||
td{
|
|
||||||
border-bottom-color: $dark-border !important;
|
|
||||||
}
|
|
||||||
tr{
|
|
||||||
background-color: $dark-bg-td;
|
|
||||||
color: $dark-text-main;
|
|
||||||
&:hover{
|
|
||||||
td{
|
|
||||||
background-color: $dark-bg-th !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ALERT
|
|
||||||
.el-notification{
|
|
||||||
background-color: $dark-btn-bg-highlight;
|
|
||||||
border-color: $dark-border;
|
|
||||||
&__title{
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
&__content{
|
|
||||||
color: $dark-text-info;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// DIALOG
|
|
||||||
.el-dialog{
|
|
||||||
background-color: $dark-dialog-bg;
|
|
||||||
.el-dialog__header{
|
|
||||||
.el-dialog__title{
|
|
||||||
color: $dark-text-main;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.el-dialog__body{
|
|
||||||
color: $dark-text-main;
|
|
||||||
.el-input{
|
|
||||||
.el-input__inner{
|
|
||||||
border-color: $dark-border;
|
|
||||||
color: $dark-text-main;
|
|
||||||
background-color: $dark-btn-bg;
|
|
||||||
}
|
|
||||||
.el-input__suffix{
|
|
||||||
.el-input__suffix-inner{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.el-input__count{
|
|
||||||
.el-input__count-inner{
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.item-desc{
|
|
||||||
color: $dark-text-info;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
38
src/scss/_normal.scss
Normal file
38
src/scss/_normal.scss
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
body{
|
||||||
|
font-family: $font-family;
|
||||||
|
font-size: $fz-main;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
|
|
||||||
|
#app {
|
||||||
|
text-align: center;
|
||||||
|
color: $text-main;
|
||||||
|
padding-top: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#app-footer a {
|
||||||
|
padding-left: 0.2em;
|
||||||
|
padding-right: 0.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#app-footer {
|
||||||
|
text-align: center;
|
||||||
|
font-size: small;
|
||||||
|
}
|
||||||
|
|
||||||
|
#app-control {
|
||||||
|
padding-top: 1em;
|
||||||
|
padding-bottom: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
audio{
|
||||||
|
margin-bottom: 15px; // 播放控件与表格间隔
|
||||||
|
}
|
||||||
|
|
||||||
|
a{
|
||||||
|
color: darken($color-link, 15%);
|
||||||
|
&:hover{
|
||||||
|
color: $color-link;
|
||||||
|
}
|
||||||
|
}
|
@ -66,7 +66,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.btn-like{
|
.btn-like{
|
||||||
cursor: pointer;
|
|
||||||
&:active{
|
&:active{
|
||||||
@include transform(translateY(2px))
|
@include transform(translateY(2px))
|
||||||
}
|
}
|
||||||
|
@ -3,17 +3,18 @@ $blue : #409EFF;
|
|||||||
$red : #F56C6C;
|
$red : #F56C6C;
|
||||||
$green : #85ce61;
|
$green : #85ce61;
|
||||||
|
|
||||||
// TEXT COLOR
|
// TEXT
|
||||||
$text-main : #2C3E50;
|
$text-main : #2C3E50;
|
||||||
$text-copyright : #777;
|
|
||||||
$text-comment : #999;
|
|
||||||
$color-link: $blue;
|
$color-link: $blue;
|
||||||
|
|
||||||
// FONT SIZE
|
|
||||||
$fz-main: 14px;
|
$fz-main: 14px;
|
||||||
$fz-mini-title: 13px;
|
$fz-mini-title: 13px;
|
||||||
$fz-mini-content: 12px;
|
$fz-mini-content: 12px;
|
||||||
|
|
||||||
|
$font-family: "Helvetica Neue", Helvetica, "PingFang SC",
|
||||||
|
"Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;
|
||||||
|
|
||||||
|
|
||||||
// DARK MODE
|
// DARK MODE
|
||||||
$dark-border : lighten(black, 25%);
|
$dark-border : lighten(black, 25%);
|
||||||
$dark-border-highlight : lighten(black, 55%);
|
$dark-border-highlight : lighten(black, 55%);
|
||||||
|
@ -1,127 +1,11 @@
|
|||||||
@import "variables";
|
@import "variables";
|
||||||
@import "utility";
|
@import "utility";
|
||||||
@import "gaps";
|
@import "gaps";
|
||||||
@import "element-ui-overwrite";
|
@import "element-ui-overrite";
|
||||||
|
|
||||||
// MAIN CONTENT
|
@import "normal";
|
||||||
body{
|
@import "dark-mode"; // dark-mode 放在 normal 后面,以获得更高优先级
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
border: 0;
|
|
||||||
box-sizing: border-box;
|
|
||||||
font-family: "PingFang SC", "微软雅黑", "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif;
|
|
||||||
font-size: $fz-main;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
}
|
|
||||||
|
|
||||||
#app {
|
|
||||||
text-align: center;
|
|
||||||
color: $text-main;
|
|
||||||
padding: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 音频文件操作
|
|
||||||
#app-control {
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 音频播放
|
|
||||||
audio{
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.table-content{
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 编辑歌曲信息
|
|
||||||
.music-cover{
|
|
||||||
margin-bottom: 20px;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
flex-flow: column nowrap;
|
|
||||||
i{
|
|
||||||
margin-top: 10px;
|
|
||||||
@extend .btn-like;
|
|
||||||
&:hover{
|
|
||||||
color: $color-checkbox;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.el-image{
|
|
||||||
padding: 5px;
|
|
||||||
@include border-radius(5px);
|
|
||||||
border: 1px solid $color-border-el;
|
|
||||||
width: 150px;
|
|
||||||
height: 150px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.edit-item{
|
|
||||||
display: flex;
|
|
||||||
justify-content: flex-start;
|
|
||||||
align-items: center;
|
|
||||||
.label{
|
|
||||||
font-weight: bold;
|
|
||||||
width: 80px;
|
|
||||||
text-align: right;
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
.value{
|
|
||||||
padding: 5px 0;
|
|
||||||
height: 20px;
|
|
||||||
line-height: 20px;
|
|
||||||
margin-left: 10px;
|
|
||||||
overflow: hidden;
|
|
||||||
white-space: nowrap;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
|
||||||
.input{
|
|
||||||
margin-left: 10px;
|
|
||||||
input{
|
|
||||||
font-family: inherit;
|
|
||||||
height: 30px;
|
|
||||||
line-height: 20px;
|
|
||||||
@include border-radius(0);
|
|
||||||
border: none;
|
|
||||||
border-bottom: 1px solid $color-border-el;
|
|
||||||
padding: 5px 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
i{
|
|
||||||
margin-left: 10px;
|
|
||||||
@extend .btn-like;
|
|
||||||
&:hover{
|
|
||||||
color: $color-checkbox;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.tip{
|
|
||||||
margin-top: 20px;
|
|
||||||
color: $text-comment;
|
|
||||||
font-size: $fz-mini-content;
|
|
||||||
a{
|
|
||||||
color: inherit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// footer
|
|
||||||
#app-footer {
|
|
||||||
margin-top: 40px;
|
|
||||||
text-align: center;
|
|
||||||
color: $text-copyright;
|
|
||||||
line-height: 1.3;
|
|
||||||
font-size: $fz-mini-content;
|
|
||||||
a {
|
|
||||||
padding-left: 0.2rem;
|
|
||||||
padding-right: 0.2rem;
|
|
||||||
color: darken($text-copyright, 10%);
|
|
||||||
&:hover{
|
|
||||||
color: $color-link;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 首页弹窗提示信息的 更新信息 面板
|
// 首页弹窗提示信息的 更新信息 面板
|
||||||
.update-info{
|
.update-info{
|
||||||
@ -131,14 +15,12 @@ audio{
|
|||||||
margin: 10px 0;
|
margin: 10px 0;
|
||||||
.update-title{
|
.update-title{
|
||||||
font-size: $fz-mini-title;
|
font-size: $fz-mini-title;
|
||||||
padding: 3px 10px;
|
padding: 5px 10px;
|
||||||
background-color: $color-border-el;
|
background-color: $color-border-el;
|
||||||
}
|
}
|
||||||
.update-content{
|
.update-content{
|
||||||
font-size: $fz-mini-content;
|
font-size: $fz-mini-content;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
padding: 5px 8px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@import "dark-mode"; // dark-mode 放在 normal 后面,以获得更高优先级
|
|
||||||
|
@ -55,7 +55,7 @@ export async function extractQQMusicMeta(
|
|||||||
|
|
||||||
if (id && id !== '0') {
|
if (id && id !== '0') {
|
||||||
try {
|
try {
|
||||||
return await fetchMetadataFromSongId(id, ext, musicMeta, musicBlob);
|
return fetchMetadataFromSongId(id, ext, musicMeta, musicBlob);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.warn('在线获取曲目信息失败,回退到本地 meta 提取', e);
|
console.warn('在线获取曲目信息失败,回退到本地 meta 提取', e);
|
||||||
}
|
}
|
||||||
|
@ -47,12 +47,12 @@
|
|||||||
<audio :autoplay="playing_auto" :src="playing_url" controls />
|
<audio :autoplay="playing_auto" :src="playing_url" controls />
|
||||||
|
|
||||||
<PreviewTable
|
<PreviewTable
|
||||||
class="table-content"
|
|
||||||
:policy="filename_policy"
|
:policy="filename_policy"
|
||||||
:table-data="tableData"
|
:table-data="tableData"
|
||||||
@download="saveFile"
|
@download="saveFile"
|
||||||
@edit="editFile"
|
@edit="editFile"
|
||||||
@play="changePlaying" />
|
@play="changePlaying"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user