增强音乐页多类型分类筛选兼容性
This commit is contained in:
@@ -36,6 +36,45 @@ const getMusicTypeId = (music) => {
|
||||
return music?.typeId ?? music?.musicTypeId ?? music?.type?.id ?? null
|
||||
}
|
||||
|
||||
const normalizeTypeToken = (value) => {
|
||||
if (value == null || value === '') return []
|
||||
|
||||
if (Array.isArray(value)) {
|
||||
return value.flatMap(item => normalizeTypeToken(item))
|
||||
}
|
||||
|
||||
if (typeof value === 'object') {
|
||||
return normalizeTypeToken(value.id ?? value.typeId ?? value.name ?? value.typeName)
|
||||
}
|
||||
|
||||
if (typeof value === 'string') {
|
||||
return value
|
||||
.split(/[,,、|/]/)
|
||||
.map(item => item.trim())
|
||||
.filter(Boolean)
|
||||
}
|
||||
|
||||
return [String(value)]
|
||||
}
|
||||
|
||||
const getMusicTypeTokens = (music) => {
|
||||
const sources = [
|
||||
music?.typeId,
|
||||
music?.musicTypeId,
|
||||
music?.type?.id,
|
||||
music?.typeName,
|
||||
music?.type?.name,
|
||||
music?.types,
|
||||
music?.typeList,
|
||||
music?.typeIds,
|
||||
music?.typeNames,
|
||||
music?.tags,
|
||||
music?.labels
|
||||
]
|
||||
|
||||
return sources.flatMap(source => normalizeTypeToken(source))
|
||||
}
|
||||
|
||||
const applyMusicFilter = (list = []) => {
|
||||
const normalizedKeyword = keyword.value.trim().toLowerCase()
|
||||
const selectedTypeItem = musicTypes.value.find(item => item.id === selectedType.value)
|
||||
@@ -44,10 +83,12 @@ const applyMusicFilter = (list = []) => {
|
||||
return list.filter((music) => {
|
||||
const musicTypeId = getMusicTypeId(music)
|
||||
const musicTypeName = music?.typeName || music?.type?.name || ''
|
||||
const typeTokens = getMusicTypeTokens(music)
|
||||
|
||||
const matchType = selectedType.value == null
|
||||
|| (musicTypeId != null && Number(musicTypeId) === Number(selectedType.value))
|
||||
|| (musicTypeId == null && selectedTypeName && musicTypeName === selectedTypeName)
|
||||
|| typeTokens.some(token => Number(token) === Number(selectedType.value))
|
||||
|| (selectedTypeName && typeTokens.includes(selectedTypeName))
|
||||
|
||||
if (!normalizedKeyword) {
|
||||
return matchType
|
||||
@@ -56,6 +97,7 @@ const applyMusicFilter = (list = []) => {
|
||||
const searchText = [
|
||||
music.name,
|
||||
musicTypeName,
|
||||
...typeTokens,
|
||||
music.album,
|
||||
music.singer,
|
||||
...(Array.isArray(music.singerNames) ? music.singerNames : [])
|
||||
|
||||
Reference in New Issue
Block a user