修复列表渲染性能bug
							parent
							
								
									95a398da23
								
							
						
					
					
						commit
						1e1c0515d1
					
				| 
						 | 
				
			
			@ -20,7 +20,7 @@
 | 
			
		|||
      </div>
 | 
			
		||||
      <div v-if="list.length" ref="dom_listContent" :class="$style.content">
 | 
			
		||||
        <base-virtualized-list
 | 
			
		||||
          v-slot="{ item, index }" :list="list" key-name="key" :item-height="listItemHeight"
 | 
			
		||||
          v-slot="{ item, index }" :list="list" key-name="id" :item-height="listItemHeight"
 | 
			
		||||
          container-class="scroll" content-class="list"
 | 
			
		||||
        >
 | 
			
		||||
          <div
 | 
			
		||||
| 
						 | 
				
			
			@ -29,12 +29,14 @@
 | 
			
		|||
            @click="handleListItemClick($event, index)" @contextmenu="handleListItemRightClick($event, index)"
 | 
			
		||||
          >
 | 
			
		||||
            <div class="list-item-cell no-select" :class="$style.num" style="flex: 0 0 5%;">
 | 
			
		||||
              <div v-if="playTaskId == item.id" :class="$style.playIcon">
 | 
			
		||||
                <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" height="50%" viewBox="0 0 512 512" space="preserve">
 | 
			
		||||
                  <use xlink:href="#icon-play-outline" />
 | 
			
		||||
                </svg>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div v-else class="num">{{ index + 1 }}</div>
 | 
			
		||||
              <transition name="play-active">
 | 
			
		||||
                <div v-if="playTaskId == item.id" :class="$style.playIcon">
 | 
			
		||||
                  <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" height="50%" viewBox="0 0 512 512" space="preserve">
 | 
			
		||||
                    <use xlink:href="#icon-play-outline" />
 | 
			
		||||
                  </svg>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div v-else class="num">{{ index + 1 }}</div>
 | 
			
		||||
              </transition>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="list-item-cell auto name">
 | 
			
		||||
              <span class="select name" :aria-label="getName(item)">{{ getName(item) }}</span>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,12 +32,14 @@
 | 
			
		|||
          @click="handleListItemClick($event, index)" @contextmenu="handleListItemRightClick($event, index)"
 | 
			
		||||
        >
 | 
			
		||||
          <div class="list-item-cell no-select" :class="$style.num" style="flex: 0 0 5%;">
 | 
			
		||||
            <div v-if="playerInfo.isPlayList && playerInfo.playIndex === index" :class="$style.playIcon">
 | 
			
		||||
              <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" height="50%" viewBox="0 0 512 512" space="preserve">
 | 
			
		||||
                <use xlink:href="#icon-play-outline" />
 | 
			
		||||
              </svg>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div v-else class="num">{{ index + 1 }}</div>
 | 
			
		||||
            <transition name="play-active">
 | 
			
		||||
              <div v-if="playerInfo.isPlayList && playerInfo.playIndex === index" :class="$style.playIcon">
 | 
			
		||||
                <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" height="50%" viewBox="0 0 512 512" space="preserve">
 | 
			
		||||
                  <use xlink:href="#icon-play-outline" />
 | 
			
		||||
                </svg>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div v-else class="num">{{ index + 1 }}</div>
 | 
			
		||||
            </transition>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="list-item-cell auto name" :aria-label="item.name">
 | 
			
		||||
            <span class="select name">{{ item.name }}</span>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -149,19 +149,21 @@ const variantRxp2 = /\s|'|\.|,|,|&|"|、|\(|\)|(|)|`|~|-|<|>|\||\/|\]|\[/g
 | 
			
		|||
 * @returns
 | 
			
		||||
 */
 | 
			
		||||
export const filterDuplicateMusic = async(list: LX.Music.MusicInfo[], isFilterVariant: boolean = true) => {
 | 
			
		||||
  type ListMapValue = Array<{ index: number, musicInfo: LX.Music.MusicInfo }>
 | 
			
		||||
  type ListMapValue = Array<{ id: string, index: number, musicInfo: LX.Music.MusicInfo }>
 | 
			
		||||
  const listMap = new Map<string, ListMapValue>()
 | 
			
		||||
  const duplicateList = new Set<string>()
 | 
			
		||||
  const handleFilter = (name: string, index: number, musicInfo: LX.Music.MusicInfo) => {
 | 
			
		||||
    if (listMap.has(name)) {
 | 
			
		||||
      const targetMusicInfo = listMap.get(name)
 | 
			
		||||
      targetMusicInfo!.push({
 | 
			
		||||
        id: musicInfo.id,
 | 
			
		||||
        index,
 | 
			
		||||
        musicInfo,
 | 
			
		||||
      })
 | 
			
		||||
      duplicateList.add(name)
 | 
			
		||||
    } else {
 | 
			
		||||
      listMap.set(name, [{
 | 
			
		||||
        id: musicInfo.id,
 | 
			
		||||
        index,
 | 
			
		||||
        musicInfo,
 | 
			
		||||
      }])
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue