完善&优化

This commit is contained in:
lyswhut 2023-07-11 14:58:34 +08:00
parent a526c7e1cf
commit 948016e562
6 changed files with 47 additions and 52 deletions

View File

@ -225,3 +225,23 @@ export const arrPushByPosition = <T>(list: T[], newList: T[], position: number)
} }
return list return list
} }
// https://stackoverflow.com/a/2450976
export const arrShuffle = <T>(array: T[]) => {
let currentIndex = array.length
let randomIndex
// While there remain elements to shuffle.
while (currentIndex != 0) {
// Pick a remaining element.
randomIndex = Math.floor(Math.random() * currentIndex)
currentIndex--;
// And swap it with the current element.
[array[currentIndex], array[randomIndex]] = [
array[randomIndex], array[currentIndex]]
}
return array
}

View File

@ -125,6 +125,7 @@
"list_sort_modal_by_down": "Descending", "list_sort_modal_by_down": "Descending",
"list_sort_modal_by_field": "Sort field", "list_sort_modal_by_field": "Sort field",
"list_sort_modal_by_name": "Song name", "list_sort_modal_by_name": "Song name",
"list_sort_modal_by_random": "Random",
"list_sort_modal_by_singer": "Singer name", "list_sort_modal_by_singer": "Singer name",
"list_sort_modal_by_source": "Song source", "list_sort_modal_by_source": "Song source",
"list_sort_modal_by_time": "Duration", "list_sort_modal_by_time": "Duration",

View File

@ -125,12 +125,12 @@
"list_sort_modal_by_down": "降序", "list_sort_modal_by_down": "降序",
"list_sort_modal_by_field": "排序字段", "list_sort_modal_by_field": "排序字段",
"list_sort_modal_by_name": "歌曲名", "list_sort_modal_by_name": "歌曲名",
"list_sort_modal_by_random": "随机乱序",
"list_sort_modal_by_singer": "歌手名", "list_sort_modal_by_singer": "歌手名",
"list_sort_modal_by_source": "歌曲源", "list_sort_modal_by_source": "歌曲源",
"list_sort_modal_by_time": "时长", "list_sort_modal_by_time": "时长",
"list_sort_modal_by_type": "排序类别", "list_sort_modal_by_type": "排序类别",
"list_sort_modal_by_up": "升序", "list_sort_modal_by_up": "升序",
"list_sort_modal_by_disorder": "随机乱序",
"list_sort_modal_tip_confirm": "你确定要这么做吗?", "list_sort_modal_tip_confirm": "你确定要这么做吗?",
"list_update_modal__auto_update": "自动更新", "list_update_modal__auto_update": "自动更新",
"list_update_modal__tips": "💡 每次启动软件时将会自动更新已勾选“自动更新”的列表", "list_update_modal__tips": "💡 每次启动软件时将会自动更新已勾选“自动更新”的列表",

View File

@ -125,6 +125,7 @@
"list_sort_modal_by_down": "降序", "list_sort_modal_by_down": "降序",
"list_sort_modal_by_field": "排序字段", "list_sort_modal_by_field": "排序字段",
"list_sort_modal_by_name": "歌曲名", "list_sort_modal_by_name": "歌曲名",
"list_sort_modal_by_random": "隨機亂序",
"list_sort_modal_by_singer": "歌手名", "list_sort_modal_by_singer": "歌手名",
"list_sort_modal_by_source": "歌曲源", "list_sort_modal_by_source": "歌曲源",
"list_sort_modal_by_time": "時長", "list_sort_modal_by_time": "時長",

View File

@ -10,31 +10,31 @@
<li :class="$style.listItem"> <li :class="$style.listItem">
<base-checkbox <base-checkbox
id="list_sort_modal_field_name" v-model="sortField" name="list_sort_modal_field" :aria-label="$t('list_sort_modal_by_name')" id="list_sort_modal_field_name" v-model="sortField" name="list_sort_modal_field" :aria-label="$t('list_sort_modal_by_name')"
need="need" value="name" :label="$t('list_sort_modal_by_name')" need="need" value="name" :disabled="disabledSortFislds" :label="$t('list_sort_modal_by_name')"
/> />
</li> </li>
<li :class="$style.listItem"> <li :class="$style.listItem">
<base-checkbox <base-checkbox
id="list_sort_modal_field_singer" v-model="sortField" name="list_sort_modal_field" id="list_sort_modal_field_singer" v-model="sortField" name="list_sort_modal_field"
need="need" value="singer" :label="$t('list_sort_modal_by_singer')" need="need" value="singer" :disabled="disabledSortFislds" :label="$t('list_sort_modal_by_singer')"
/> />
</li> </li>
<li :class="$style.listItem"> <li :class="$style.listItem">
<base-checkbox <base-checkbox
id="list_sort_modal_field_album" v-model="sortField" name="list_sort_modal_field" id="list_sort_modal_field_album" v-model="sortField" name="list_sort_modal_field"
need="need" value="albumName" :label="$t('list_sort_modal_by_album')" need="need" value="albumName" :disabled="disabledSortFislds" :label="$t('list_sort_modal_by_album')"
/> />
</li> </li>
<li :class="$style.listItem"> <li :class="$style.listItem">
<base-checkbox <base-checkbox
id="list_sort_modal_field_time" v-model="sortField" name="list_sort_modal_field" id="list_sort_modal_field_time" v-model="sortField" name="list_sort_modal_field"
need="need" value="interval" :label="$t('list_sort_modal_by_time')" need="need" value="interval" :disabled="disabledSortFislds" :label="$t('list_sort_modal_by_time')"
/> />
</li> </li>
<li :class="$style.listItem"> <li :class="$style.listItem">
<base-checkbox <base-checkbox
id="list_sort_modal_field_source" v-model="sortField" name="list_sort_modal_field" id="list_sort_modal_field_source" v-model="sortField" name="list_sort_modal_field"
need="need" value="source" :label="$t('list_sort_modal_by_source')" need="need" value="source" :disabled="disabledSortFislds" :label="$t('list_sort_modal_by_source')"
/> />
</li> </li>
</ul> </ul>
@ -56,8 +56,8 @@
</li> </li>
<li :class="$style.listItem"> <li :class="$style.listItem">
<base-checkbox <base-checkbox
id="list_sort_modal_type_disorder" v-model="sortType" name="list_sort_modal_type" id="list_sort_modal_type_random" v-model="sortType" name="list_sort_modal_type"
need="need" value="disorder" :label="$t('list_sort_modal_by_disorder')" need="need" value="random" :label="$t('list_sort_modal_by_random')"
/> />
</li> </li>
</ul> </ul>
@ -102,7 +102,7 @@ export default {
sortType.value = '' sortType.value = ''
} }
const verify = () => { const verify = () => {
return !!sortField.value && !!sortType.value return !!sortType.value && (!!sortField.value || sortType.value == 'random')
} }
const handleSort = async() => { const handleSort = async() => {
if (!verify()) return if (!verify()) return
@ -131,9 +131,14 @@ export default {
} }
}) })
const disabledSortFislds = computed(() => {
return sortType.value == 'random'
})
return { return {
sortField, sortField,
sortType, sortType,
disabledSortFislds,
closeModal, closeModal,
handleSort, handleSort,
handleAfterLeave, handleAfterLeave,

View File

@ -1,6 +1,6 @@
// import { throttle } from '@common/utils' // import { throttle } from '@common/utils'
import { filterFileName, sortInsert, similar, arrPushByPosition } from '@common/utils/common' import { filterFileName, sortInsert, similar, arrPushByPosition, arrShuffle } from '@common/utils/common'
import { joinPath, saveStrToFile } from '@common/utils/nodejs' import { joinPath, saveStrToFile } from '@common/utils/nodejs'
import { createLocalMusicInfo } from '@renderer/utils/music' import { createLocalMusicInfo } from '@renderer/utils/music'
@ -79,45 +79,14 @@ const getIntv = (musicInfo: LX.Music.MusicInfo) => {
* @param localeId * @param localeId
* @returns * @returns
*/ */
export const sortListMusicInfo = async(list: LX.Music.MusicInfo[], sortType: 'up' | 'down' | 'disorder', fieldName: 'name' | 'singer' | 'albumName' | 'interval' | 'source', localeId: string) => { export const sortListMusicInfo = async(list: LX.Music.MusicInfo[], sortType: 'up' | 'down' | 'random', fieldName: 'name' | 'singer' | 'albumName' | 'interval' | 'source', localeId: string) => {
// console.log(sortType, fieldName, localeId) // console.log(sortType, fieldName, localeId)
// const locale = new Intl.Locale(localeId) // const locale = new Intl.Locale(localeId)
if (sortType == 'disorder' && (fieldName =='name' || fieldName == 'singer' || fieldName =='albumName' || fieldName =='interval' || fieldName =='source')){ switch (sortType) {
case 'random':
let change_num:number[]=[] arrShuffle(list)
break
for(let i:number = 0;i<list.length;i++){ case 'up':
if(change_num.length == 0){
let r_num:number = Math.floor(Math.random()*list.length)
change_num.push(r_num)
}
else{
let sign:boolean = false
do{
let r_num:number = Math.floor(Math.random()*list.length)
for(let j:number = 0 ; j<change_num.length; j++){
if(change_num[j] == r_num){
break;
}
if (j == change_num.length-1){
change_num.push(r_num)
sign = true
}
}
}while(!sign)
}
}
let list2:LX.Music.MusicInfo[]=[]
for(let k:number = 0;k<change_num.length;k++){
list2.push(list[change_num[k]])
}
return list2
}
else{
if (sortType == 'up') {
if (fieldName == 'interval') { if (fieldName == 'interval') {
list.sort((a, b) => { list.sort((a, b) => {
if (a.interval == null) { if (a.interval == null) {
@ -144,7 +113,8 @@ export const sortListMusicInfo = async(list: LX.Music.MusicInfo[], sortType: 'up
break break
} }
} }
} else { break
case 'down':
if (fieldName == 'interval') { if (fieldName == 'interval') {
list.sort((a, b) => { list.sort((a, b) => {
if (a.interval == null) { if (a.interval == null) {
@ -171,11 +141,9 @@ export const sortListMusicInfo = async(list: LX.Music.MusicInfo[], sortType: 'up
break break
} }
} }
} break
return list
} }
return list
} }
const variantRxp = /(\(|).+(\)|)/g const variantRxp = /(\(|).+(\)|)/g