增强音乐页多类型分类筛选兼容性

This commit is contained in:
root
2026-03-08 23:38:00 +08:00
parent 23a2090644
commit f27a4cc7ec

View File

@@ -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 : [])