From 0332b81d583c86120790f20461a0115f84c607fc Mon Sep 17 00:00:00 2001 From: lyswhut Date: Wed, 20 May 2020 22:52:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E3=80=81=E6=96=B0=E5=A2=9E=E5=8F=B3=E9=94=AE?= =?UTF-8?q?=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 9 +- src/common/config.js | 10 +- src/renderer/assets/styles/index.less | 6 + src/renderer/assets/styles/variables.less | 41 ++- src/renderer/components/core/Player.vue | 4 +- src/renderer/components/material/Btn.vue | 8 +- .../components/material/ListButtons.vue | 22 +- src/renderer/components/material/Menu.vue | 29 +- src/renderer/components/material/Select.vue | 16 +- .../components/material/Selection.vue | 26 +- src/renderer/components/material/SongList.vue | 189 ++++++++---- src/renderer/components/material/TagList.vue | 24 +- .../components/material/listAddModal.vue | 16 +- .../material/listAddMultipleModal.vue | 16 +- .../lang/cns/material/list_add_modal.json | 3 +- .../cns/material/list_add_multiple_modal.json | 3 +- src/renderer/lang/cns/material/song_list.json | 6 +- src/renderer/lang/cns/view/download.json | 8 +- src/renderer/lang/cns/view/list.json | 5 + src/renderer/lang/cns/view/search.json | 5 +- .../lang/cnt/material/list_add_modal.json | 3 +- .../cnt/material/list_add_multiple_modal.json | 3 +- src/renderer/lang/cnt/material/song_list.json | 6 +- src/renderer/lang/cnt/view/download.json | 8 +- src/renderer/lang/cnt/view/list.json | 5 + src/renderer/lang/cnt/view/search.json | 5 +- .../lang/en/material/list_add_modal.json | 3 +- .../en/material/list_add_multiple_modal.json | 3 +- src/renderer/lang/en/material/song_list.json | 6 +- src/renderer/lang/en/view/download.json | 8 +- src/renderer/lang/en/view/list.json | 5 + src/renderer/lang/en/view/search.json | 5 +- src/renderer/store/modules/list.js | 15 + src/renderer/utils/index.js | 2 + src/renderer/views/Download.vue | 285 +++++++++++++----- src/renderer/views/Leaderboard.vue | 237 +++++++++++++-- src/renderer/views/List.vue | 231 +++++++++++--- src/renderer/views/Search.vue | 185 +++++++++--- src/renderer/views/SongList.vue | 64 +++- 39 files changed, 1175 insertions(+), 350 deletions(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index b94482e0..da161078 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,14 +1,14 @@ ### 新增 -- 新增`rpm`、`pacman`包的打包 +- 新增`rpm`、`pacman`包的构建 - 新增当前音频输出设备改变时是否暂停播放的设置,默认关闭 -- 新增自定义列表,创建列表的按钮在表头`#`左侧,鼠标移上去才会显示;编辑列表名字时,按`ESC`键可取消编辑,按回车键或使输入框失去焦点即可保存列表名字 +- 新增歌曲列表右键菜单 +- 新增自定义列表,创建列表的按钮在表头`#`左侧,鼠标移上去才会显示;编辑列表名字时,按`ESC`键可快速取消编辑,按回车键或使输入框失去焦点即可保存列表名字,右击列表可编辑已创建的列表,“试听列表”与“我的收藏”两个列表固定不可编辑 ### 优化 -- 优化浮动按钮与布局颜色 - 改进歌曲切换时的歌词滚动效果 -- 极大优化批量添加、删除播放列表的歌曲操作流畅度 +- 优化批量添加、删除播放列表的歌曲操作逻辑,大幅提升流畅度 ### 修复 @@ -21,3 +21,4 @@ ### 更变 - 修改设置-列表-是否显示歌曲源的默认设置为选中(该变更不影响之前的设置) +- 移除浮动按钮,现在在多选完成后可鼠标右击随意一项在弹出的右键菜单中进行原来悬浮按钮的操作 diff --git a/src/common/config.js b/src/common/config.js index 451cc76e..833c3a86 100644 --- a/src/common/config.js +++ b/src/common/config.js @@ -17,35 +17,35 @@ module.exports = { { id: 2, name: 'medium', - width: 1012, + width: 1018, height: 650, fontSize: '16px', }, { id: 3, name: 'big', - width: 1104, + width: 1114, height: 708, fontSize: '17px', }, { id: 4, name: 'larger', - width: 1198, + width: 1202, height: 766, fontSize: '17px', }, { id: 5, name: 'oversized', - width: 1380, + width: 1382, height: 886, fontSize: '18px', }, { id: 6, name: 'huge', - width: 1656, + width: 1686, height: 1062, fontSize: '19px', }, diff --git a/src/renderer/assets/styles/index.less b/src/renderer/assets/styles/index.less index acde4152..140f0ae4 100644 --- a/src/renderer/assets/styles/index.less +++ b/src/renderer/assets/styles/index.less @@ -57,6 +57,9 @@ table { &.active { background-color: @color-theme_2-active; } + &.selected { + background-color: @color-theme_2-hover; + } td { padding: 6px; position: relative; @@ -217,6 +220,9 @@ each(@themes, { &.active { background-color: ~'@{color-@{value}-theme_2-active}'; } + &.selected { + background-color: ~'@{color-@{value}-theme_2-hover}'; + } } } } diff --git a/src/renderer/assets/styles/variables.less b/src/renderer/assets/styles/variables.less index 6d4a8ae7..fced8d9a 100644 --- a/src/renderer/assets/styles/variables.less +++ b/src/renderer/assets/styles/variables.less @@ -25,6 +25,9 @@ @color-theme-sidebar: @color-theme; @color-btn: lighten(@color-theme, 5%); @color-btn-background: fadeout(lighten(@color-theme, 35%), 70%); +@color-btn-hover: fadeout(lighten(@color-theme, 5%), 70%); +@color-btn-active: fadeout(darken(@color-theme, 5%), 70%); +@color-btn-select: fadeout(lighten(@color-theme, 5%), 50%); @color-pagination-background: fadeout(lighten(@color-theme, 45%), 30%); @color-pagination-hover: fadeout(lighten(@color-theme, 10%), 70%); @@ -89,6 +92,9 @@ @color-green-theme-sidebar: @color-green-theme; @color-green-btn: lighten(@color-green-theme, 5%); @color-green-btn-background: fadeout(lighten(@color-green-theme, 35%), 70%); +@color-green-btn-hover: fadeout(lighten(@color-green-theme, 5%), 70%); +@color-green-btn-active: fadeout(darken(@color-green-theme, 5%), 70%); +@color-green-btn-select: fadeout(lighten(@color-green-theme, 5%), 50%); @color-green-pagination-background: fadeout(lighten(@color-green-theme, 45%), 30%); @color-green-pagination-hover: fadeout(lighten(@color-green-theme, 10%), 70%); @color-green-pagination-active: fadeout(darken(@color-green-theme, 10%), 70%); @@ -142,6 +148,9 @@ @color-yellow-theme-sidebar: @color-yellow-theme; @color-yellow-btn: darken(@color-yellow-theme, 5%); @color-yellow-btn-background: fadeout(lighten(@color-yellow-theme, 25%), 60%); +@color-yellow-btn-hover: fadeout(lighten(@color-yellow-theme, 5%), 70%); +@color-yellow-btn-active: fadeout(darken(@color-yellow-theme, 5%), 70%); +@color-yellow-btn-select: fadeout(lighten(@color-yellow-theme, 5%), 50%); @color-yellow-pagination-background: fadeout(lighten(@color-yellow-theme, 30%), 30%); @color-yellow-pagination-hover: fadeout(lighten(@color-yellow-theme, 5%), 70%); @color-yellow-pagination-active: fadeout(darken(@color-yellow-theme, 5%), 70%); @@ -194,6 +203,9 @@ @color-orange-theme-sidebar: @color-orange-theme; @color-orange-btn: lighten(@color-orange-theme, 5%); @color-orange-btn-background: fadeout(lighten(@color-orange-theme, 25%), 60%); +@color-orange-btn-hover: fadeout(lighten(@color-orange-theme, 5%), 70%); +@color-orange-btn-active: fadeout(darken(@color-orange-theme, 5%), 70%); +@color-orange-btn-select: fadeout(lighten(@color-orange-theme, 5%), 50%); @color-orange-pagination-background: fadeout(lighten(@color-orange-theme, 25%), 40%); @color-orange-pagination-hover: fadeout(lighten(@color-orange-theme, 10%), 70%); @color-orange-pagination-active: fadeout(darken(@color-orange-theme, 10%), 70%); @@ -246,6 +258,9 @@ @color-blue-theme-sidebar: @color-blue-theme; @color-blue-btn: lighten(@color-blue-theme, 5%); @color-blue-btn-background: fadeout(lighten(@color-blue-theme, 35%), 50%); +@color-blue-btn-hover: fadeout(lighten(@color-blue-theme, 5%), 70%); +@color-blue-btn-active: fadeout(darken(@color-blue-theme, 5%), 70%); +@color-blue-btn-select: fadeout(lighten(@color-blue-theme, 5%), 50%); @color-blue-pagination-background: fadeout(lighten(@color-blue-theme, 40%), 30%); @color-blue-pagination-hover: fadeout(lighten(@color-blue-theme, 15%), 70%); @color-blue-pagination-active: fadeout(darken(@color-blue-theme, 15%), 70%); @@ -298,6 +313,9 @@ @color-red-theme-sidebar: @color-red-theme; @color-red-btn: lighten(@color-red-theme, 5%); @color-red-btn-background: fadeout(lighten(@color-red-theme, 35%), 70%); +@color-red-btn-hover: fadeout(lighten(@color-red-theme, 5%), 70%); +@color-red-btn-active: fadeout(darken(@color-red-theme, 5%), 70%); +@color-red-btn-select: fadeout(lighten(@color-red-theme, 5%), 50%); @color-red-pagination-background: fadeout(lighten(@color-red-theme, 40%), 30%); @color-red-pagination-hover: fadeout(lighten(@color-red-theme, 15%), 70%); @color-red-pagination-active: fadeout(darken(@color-red-theme, 15%), 70%); @@ -352,6 +370,9 @@ @color-pink-theme-sidebar: @color-pink-theme; @color-pink-btn: darken(@color-pink-theme, 3%); @color-pink-btn-background: fadeout(lighten(@color-pink-theme, 20%), 50%); +@color-pink-btn-hover: fadeout(lighten(@color-pink-theme, 5%), 70%); +@color-pink-btn-active: fadeout(darken(@color-pink-theme, 5%), 70%); +@color-pink-btn-select: fadeout(lighten(@color-pink-theme, 5%), 50%); @color-pink-pagination-background: fadeout(lighten(@color-pink-theme, 23%), 25%); @color-pink-pagination-hover: fadeout(lighten(@color-pink-theme, 5%), 70%); @color-pink-pagination-active: fadeout(darken(@color-pink-theme, 5%), 70%); @@ -404,6 +425,9 @@ @color-purple-theme-sidebar: @color-purple-theme; @color-purple-btn: lighten(@color-purple-theme, 5%); @color-purple-btn-background: fadeout(lighten(@color-purple-theme, 35%), 70%); +@color-purple-btn-hover: fadeout(lighten(@color-purple-theme, 5%), 70%); +@color-purple-btn-active: fadeout(darken(@color-purple-theme, 5%), 70%); +@color-purple-btn-select: fadeout(lighten(@color-purple-theme, 5%), 50%); @color-purple-pagination-background: fadeout(lighten(@color-purple-theme, 40%), 30%); @color-purple-pagination-hover: fadeout(lighten(@color-purple-theme, 15%), 70%); @color-purple-pagination-active: fadeout(darken(@color-purple-theme, 15%), 70%); @@ -456,6 +480,9 @@ @color-grey-theme-sidebar: @color-grey-theme; @color-grey-btn: lighten(@color-grey-theme, 5%); @color-grey-btn-background: fadeout(lighten(@color-grey-theme, 35%), 70%); +@color-grey-btn-hover: fadeout(lighten(@color-grey-theme, 5%), 70%); +@color-grey-btn-active: fadeout(darken(@color-grey-theme, 5%), 70%); +@color-grey-btn-select: fadeout(lighten(@color-grey-theme, 5%), 50%); @color-grey-pagination-background: fadeout(lighten(@color-grey-theme, 45%), 30%); @color-grey-pagination-hover: fadeout(lighten(@color-grey-theme, 10%), 70%); @color-grey-pagination-active: fadeout(darken(@color-grey-theme, 10%), 70%); @@ -509,6 +536,9 @@ @color-ming-theme-sidebar: @color-ming-theme; @color-ming-btn: lighten(@color-ming-theme, 5%); @color-ming-btn-background: fadeout(lighten(@color-ming-theme, 35%), 75%); +@color-ming-btn-hover: fadeout(lighten(@color-ming-theme, 5%), 70%); +@color-ming-btn-active: fadeout(darken(@color-ming-theme, 5%), 70%); +@color-ming-btn-select: fadeout(lighten(@color-ming-theme, 5%), 50%); @color-ming-pagination-background: fadeout(lighten(@color-ming-theme, 50%), 35%); @color-ming-pagination-hover: fadeout(lighten(@color-ming-theme, 15%), 70%); @color-ming-pagination-active: fadeout(darken(@color-ming-theme, 15%), 70%); @@ -563,6 +593,9 @@ @color-mid_autumn-theme-sidebar: rgba(255, 255, 255, 0); @color-mid_autumn-btn: lighten(@color-mid_autumn-theme, 10%); @color-mid_autumn-btn-background: fadeout(lighten(@color-mid_autumn-theme, 35%), 70%); +@color-mid_autumn-btn-hover: fadeout(lighten(@color-mid_autumn-theme, 5%), 70%); +@color-mid_autumn-btn-active: fadeout(darken(@color-mid_autumn-theme, 5%), 70%); +@color-mid_autumn-btn-select: fadeout(lighten(@color-mid_autumn-theme, 5%), 50%); @color-mid_autumn-pagination-background: fadeout(lighten(@color-mid_autumn-theme, 45%), 50%); @color-mid_autumn-pagination-hover: fadeout(lighten(@color-mid_autumn-theme, 10%), 70%); @color-mid_autumn-pagination-active: fadeout(darken(@color-mid_autumn-theme, 10%), 70%); @@ -615,6 +648,9 @@ @color-naruto-theme-sidebar: rgba(255, 255, 255, .3); @color-naruto-btn: lighten(@color-naruto-theme, 2%); @color-naruto-btn-background: fadeout(lighten(@color-naruto-theme, 35%), 70%); +@color-naruto-btn-hover: fadeout(lighten(@color-naruto-theme, 5%), 70%); +@color-naruto-btn-active: fadeout(darken(@color-naruto-theme, 5%), 70%); +@color-naruto-btn-select: fadeout(lighten(@color-naruto-theme, 5%), 50%); @color-naruto-pagination-background: fadeout(lighten(@color-naruto-theme, 20%), 70%); @color-naruto-pagination-hover: fadeout(lighten(@color-naruto-theme, 10%), 60%); @color-naruto-pagination-active: fadeout(darken(@color-naruto-theme, 10%), 70%); @@ -667,6 +703,9 @@ @color-happy_new_year-theme-sidebar: rgba(119, 37, 18, 0.1); @color-happy_new_year-btn: desaturate(@color-happy_new_year-theme, 10%); @color-happy_new_year-btn-background: fadeout(lighten(@color-happy_new_year-theme, 15%), 60%); +@color-happy_new_year-btn-hover: fadeout(lighten(@color-happy_new_year-theme, 5%), 70%); +@color-happy_new_year-btn-active: fadeout(darken(@color-happy_new_year-theme, 5%), 70%); +@color-happy_new_year-btn-select: fadeout(lighten(@color-happy_new_year-theme, 5%), 50%); @color-happy_new_year-pagination-background: fadeout(lighten(@color-happy_new_year-theme, 15%), 40%); @color-happy_new_year-pagination-hover: fadeout(lighten(@color-happy_new_year-theme, 10%), 70%); @color-happy_new_year-pagination-active: fadeout(darken(@color-happy_new_year-theme, 10%), 70%); @@ -703,7 +742,7 @@ // Width -@width-app-left: 6.5%; +@width-app-left: 6.6%; // Height @height-toolbar: 54px; diff --git a/src/renderer/components/core/Player.vue b/src/renderer/components/core/Player.vue index 30176515..1ad59d24 100644 --- a/src/renderer/components/core/Player.vue +++ b/src/renderer/components/core/Player.vue @@ -162,8 +162,8 @@ export default { 'setting.player.mediaDeviceId'(n) { this.setMediaDevice() }, - list(n, o) { - if (n === o) { + async list(n, o) { + if (n === o && this.musicInfo.songmid) { let index = this.listId == 'download' ? n.findIndex(s => s.musicInfo.songmid === this.musicInfo.songmid) : n.findIndex(s => s.songmid === this.musicInfo.songmid) diff --git a/src/renderer/components/material/Btn.vue b/src/renderer/components/material/Btn.vue index 2e3b9ec9..fafc6017 100644 --- a/src/renderer/components/material/Btn.vue +++ b/src/renderer/components/material/Btn.vue @@ -37,10 +37,10 @@ export default { } &:hover { - background-color: @color-theme_2-hover; + background-color: @color-btn-hover; } &:active { - background-color: @color-theme_2-active; + background-color: @color-btn-active; } } @@ -55,10 +55,10 @@ each(@themes, { color: ~'@{color-@{value}-btn}'; background-color: ~'@{color-@{value}-btn-background}'; &:hover { - background-color: ~'@{color-@{value}-theme_2-hover}'; + background-color: ~'@{color-@{value}-btn-hover}'; } &:active { - background-color: ~'@{color-@{value}-theme_2-active}'; + background-color: ~'@{color-@{value}-btn-active}'; } } } diff --git a/src/renderer/components/material/ListButtons.vue b/src/renderer/components/material/ListButtons.vue index c95e1a1f..fd4a5842 100644 --- a/src/renderer/components/material/ListButtons.vue +++ b/src/renderer/components/material/ListButtons.vue @@ -1,27 +1,27 @@ @@ -290,6 +369,7 @@ export default { overflow: hidden; display: flex; flex-flow: column nowrap; + height: 100%; } .thead { flex: none; @@ -298,8 +378,13 @@ export default { // padding-left: 10px; } } -.tbody { +.content { flex: auto; + min-height: 0; + position: relative; +} +.tbody { + height: 100%; overflow-y: auto; td { font-size: 12px; diff --git a/src/renderer/components/material/TagList.vue b/src/renderer/components/material/TagList.vue index 2d5e2ace..f3ee07d3 100644 --- a/src/renderer/components/material/TagList.vue +++ b/src/renderer/components/material/TagList.vue @@ -123,10 +123,10 @@ export default { } &:hover { - background-color: @color-theme_2-hover; + background-color: @color-btn-hover; } &:active { - background-color: @color-theme_2-active; + background-color: @color-btn-active; } } @@ -161,10 +161,10 @@ export default { box-sizing: border-box; &:hover { - background-color: @color-theme_2-hover; + background-color: @color-btn-hover; } &:active { - background-color: @color-theme_2-active; + background-color: @color-btn-active; } } } @@ -184,10 +184,10 @@ export default { transition: background-color @transition-theme; cursor: pointer; &:hover { - background-color: @color-theme_2-hover; + background-color: @color-btn-hover; } &:active { - background-color: @color-theme_2-active; + background-color: @color-btn-active; } } @@ -199,10 +199,10 @@ each(@themes, { // border-left-color: ~'@{color-@{value}-tab-border-bottom}'; color: ~'@{color-@{value}-btn}'; &:hover { - background-color: ~'@{color-@{value}-theme_2-hover}'; + background-color: ~'@{color-@{value}-btn-hover}'; } &:active { - background-color: ~'@{color-@{value}-theme_2-active}'; + background-color: ~'@{color-@{value}-btn-active}'; } } @@ -215,10 +215,10 @@ each(@themes, { // color: ~'@{color-@{value}-btn}'; background-color: ~'@{color-@{value}-btn-background}'; &:hover { - background-color: ~'@{color-@{value}-theme_2-hover}'; + background-color: ~'@{color-@{value}-btn-hover}'; } &:active { - background-color: ~'@{color-@{value}-theme_2-active}'; + background-color: ~'@{color-@{value}-btn-active}'; } } } @@ -226,10 +226,10 @@ each(@themes, { .tag { background-color: ~'@{color-@{value}-btn-background}'; &:hover { - background-color: ~'@{color-@{value}-theme_2-hover}'; + background-color: ~'@{color-@{value}-btn-hover}'; } &:active { - background-color: ~'@{color-@{value}-theme_2-active}'; + background-color: ~'@{color-@{value}-btn-active}'; } } diff --git a/src/renderer/components/material/listAddModal.vue b/src/renderer/components/material/listAddModal.vue index cc1fef04..150964ec 100644 --- a/src/renderer/components/material/listAddModal.vue +++ b/src/renderer/components/material/listAddModal.vue @@ -2,7 +2,7 @@ material-modal(:show="show" :bg-close="bgClose" @close="handleClose") main(:class="$style.main") h2 - | {{$t('material.list_add_modal.title_first')}}  + | {{$t('material.list_add_modal.' + (isMove ? 'title_first_move' : 'title_first_add'))}}  span(:class="$style.name") {{this.musicInfo && `${musicInfo.name}`}} |  {{$t('material.list_add_modal.title_last')}} div.scroll(:class="$style.btnContent") @@ -39,6 +39,14 @@ export default { type: String, default: '', }, + fromListId: { + type: String, + default: null, + }, + isMove: { + type: Boolean, + default: false, + }, }, data() { return { @@ -60,9 +68,11 @@ export default { }, }, methods: { - ...mapMutations('list', ['listAdd', 'createUserList']), + ...mapMutations('list', ['listAdd', 'listMove', 'createUserList']), handleClick(index) { - this.listAdd({ id: this.lists[index].id, musicInfo: this.musicInfo }) + this.isMove + ? this.listMove({ fromId: this.fromListId, toId: this.lists[index].id, musicInfo: this.musicInfo }) + : this.listAdd({ id: this.lists[index].id, musicInfo: this.musicInfo }) this.$nextTick(() => { this.handleClose() }) diff --git a/src/renderer/components/material/listAddMultipleModal.vue b/src/renderer/components/material/listAddMultipleModal.vue index 7ab72f7b..abe0c2bf 100644 --- a/src/renderer/components/material/listAddMultipleModal.vue +++ b/src/renderer/components/material/listAddMultipleModal.vue @@ -1,7 +1,7 @@ diff --git a/src/renderer/views/Leaderboard.vue b/src/renderer/views/Leaderboard.vue index fe0a75af..5458bc03 100644 --- a/src/renderer/views/Leaderboard.vue +++ b/src/renderer/views/Leaderboard.vue @@ -1,9 +1,20 @@