增强音乐页多类型分类筛选兼容性
This commit is contained in:
@@ -36,6 +36,45 @@ const getMusicTypeId = (music) => {
|
|||||||
return music?.typeId ?? music?.musicTypeId ?? music?.type?.id ?? null
|
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 applyMusicFilter = (list = []) => {
|
||||||
const normalizedKeyword = keyword.value.trim().toLowerCase()
|
const normalizedKeyword = keyword.value.trim().toLowerCase()
|
||||||
const selectedTypeItem = musicTypes.value.find(item => item.id === selectedType.value)
|
const selectedTypeItem = musicTypes.value.find(item => item.id === selectedType.value)
|
||||||
@@ -44,10 +83,12 @@ const applyMusicFilter = (list = []) => {
|
|||||||
return list.filter((music) => {
|
return list.filter((music) => {
|
||||||
const musicTypeId = getMusicTypeId(music)
|
const musicTypeId = getMusicTypeId(music)
|
||||||
const musicTypeName = music?.typeName || music?.type?.name || ''
|
const musicTypeName = music?.typeName || music?.type?.name || ''
|
||||||
|
const typeTokens = getMusicTypeTokens(music)
|
||||||
|
|
||||||
const matchType = selectedType.value == null
|
const matchType = selectedType.value == null
|
||||||
|| (musicTypeId != null && Number(musicTypeId) === Number(selectedType.value))
|
|| (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) {
|
if (!normalizedKeyword) {
|
||||||
return matchType
|
return matchType
|
||||||
@@ -56,6 +97,7 @@ const applyMusicFilter = (list = []) => {
|
|||||||
const searchText = [
|
const searchText = [
|
||||||
music.name,
|
music.name,
|
||||||
musicTypeName,
|
musicTypeName,
|
||||||
|
...typeTokens,
|
||||||
music.album,
|
music.album,
|
||||||
music.singer,
|
music.singer,
|
||||||
...(Array.isArray(music.singerNames) ? music.singerNames : [])
|
...(Array.isArray(music.singerNames) ? music.singerNames : [])
|
||||||
|
|||||||
Reference in New Issue
Block a user