新增打开收藏的在线列表的对应平台详情页功能

This commit is contained in:
lyswhut
2022-02-11 16:51:39 +08:00
parent 68827f7697
commit 777551cb43
16 changed files with 100 additions and 8 deletions
+39 -2
View File
@@ -19,7 +19,7 @@
<span :class="$style.listsLabel">{{loveList.name}}</span>
</li>
<li class="user-list"
:class="[$style.listsItem, {[$style.active]:item.id == listId}, {[$style.clicked]: listsData.rightClickItemIndex == index}, {[$style.fetching]: fetchingListStatus[item.id]}]" :data-index="index"
:class="[$style.listsItem, {[$style.active]: item.id == listId}, {[$style.clicked]: listsData.rightClickItemIndex == index}, {[$style.fetching]: fetchingListStatus[item.id]}]" :data-index="index"
@contextmenu="handleListsItemRigthClick($event, index)" :tips="item.name" v-for="(item, index) in userLists" :key="item.id"
>
<span :class="$style.listsLabel" @click="handleListToggle(item.id, index + 2)">{{item.name}}</span>
@@ -41,7 +41,7 @@
<script>
import { mapMutations, mapActions } from 'vuex'
import { openSaveDir, saveLxConfigFile, selectDir, readLxConfigFile, filterFileName } from '@renderer/utils'
import { openSaveDir, saveLxConfigFile, selectDir, readLxConfigFile, filterFileName, openUrl } from '@renderer/utils'
import musicSdk from '@renderer/utils/music'
import DuplicateMusicModal from './DuplicateMusicModal'
import ListSortModal from './ListSortModal'
@@ -97,6 +97,7 @@ export default {
rename: true,
duplicate: true,
sort: true,
sourceDetail: true,
import: true,
export: true,
sync: false,
@@ -141,6 +142,11 @@ export default {
action: 'duplicate',
disabled: !this.listsData.itemMenuControl.duplicate,
},
{
name: this.$t('lists__source_detail'),
action: 'sourceDetail',
disabled: !this.listsData.itemMenuControl.sourceDetail,
},
{
name: this.$t('lists__import'),
action: 'import',
@@ -288,6 +294,7 @@ export default {
break
}
this.listsData.itemMenuControl.sort = !!getList(this.getTargetListInfo(index)?.id).length
this.listsData.itemMenuControl.sourceDetail = this.assertSupportDetail(source, index)
this.listsData.rightClickItemIndex = index
this.listsData.menuLocation.x = event.currentTarget.offsetLeft + event.offsetX
this.listsData.menuLocation.y = event.currentTarget.offsetTop + event.offsetY - this.dom_lists_list.scrollTop
@@ -322,6 +329,9 @@ export default {
this.selectedSortListInfo = this.getTargetListInfo(index)
this.isShowListSortModal = true
break
case 'sourceDetail':
this.openSourceDetailPage(index)
break
case 'import':
this.handleImportList(index)
break
@@ -382,6 +392,33 @@ export default {
}
return list
},
assertSupportDetail(source, index) {
if (source) {
const { sourceListId } = this.userLists[index]
if (sourceListId) {
if (/board__/.test(sourceListId)) {
// const id = sourceListId.replace(/board__/, '')
return !!musicSdk[source]?.leaderboard?.getDetailPageUrl
} else {
return !!musicSdk[source]?.songList?.getDetailPageUrl
}
}
}
return false
},
openSourceDetailPage(index) {
const { source, sourceListId } = this.userLists[index]
if (!sourceListId) return
let url
if (/board__/.test(sourceListId)) {
const id = sourceListId.replace(/board__/, '')
url = musicSdk[source].leaderboard.getDetailPageUrl(id)
} else {
url = musicSdk[source].songList.getDetailPageUrl(sourceListId)
}
if (!url) return
openUrl(url)
},
handleExportList(index) {
const list = this.getTargetListInfo(index)
if (!list) return