Skip to content

Commit ce27d84

Browse files
committed
feat: 跳转定位
1 parent cdd22f1 commit ce27d84

2 files changed

Lines changed: 12 additions & 2 deletions

File tree

MaiChartManager/Front/src/views/BatchAction/MusicSelector.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { GenreOption } from "@/components/GenreInput";
88
import { LEVEL_COLOR, LEVELS } from "@/consts";
99
import _ from "lodash";
1010
import { watchDebounced } from "@vueuse/core";
11+
import { scrollToMusic } from "@/views/Charts/MusicList";
1112
import { useI18n } from 'vue-i18n';
1213

1314
export default defineComponent({
@@ -110,6 +111,7 @@ export default defineComponent({
110111
selectMusicId.value = row.id!;
111112
sidebarActive.value = 'charts';
112113
props.cancel();
114+
setTimeout(() => scrollToMusic(row.id!), 100);
113115
}}>
114116
<span class="i-tabler:external-link c-neutral-5"/>
115117
</Button>,

MaiChartManager/Front/src/views/Charts/MusicList/index.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
1-
import { defineComponent } from "vue";
1+
import { defineComponent, ref, watch, nextTick } from "vue";
22
import { MusicXmlWithABJacket } from "@/client/apiGen";
33
import { Button, theme } from "@munet/ui";
44
import { VList } from 'virtua/vue';
55
import MusicEntry from "@/views/Charts/MusicList/MusicEntry";
66
import { assetDirs, musicList, selectedADir, selectMusicId } from "@/store/refs";
77
import { leftPanel } from "@/views/Charts/refs";
88

9+
export const musicListRef = ref<InstanceType<typeof VList> | null>(null);
10+
11+
export const scrollToMusic = (musicId: number) => {
12+
const idx = musicList.value.findIndex(m => m.id === musicId);
13+
if (idx === -1 || !musicListRef.value) return;
14+
musicListRef.value.scrollToIndex(idx, { align: 'center', smooth: true });
15+
};
16+
917
export default defineComponent({
1018
props: {
1119
toggleMenu: { type: Function, required: true },
@@ -30,7 +38,7 @@ export default defineComponent({
3038
<span class="truncate">{selectedDirLabel()}</span>
3139
</div>
3240
</div>
33-
<VList class="flex-1 cst" data={musicList.value}>
41+
<VList ref={musicListRef} class="flex-1 cst" data={musicList.value}>
3442
{({item}: {item: MusicXmlWithABJacket}) => (
3543
<MusicEntry music={item} selected={selectMusicId.value === item.id} onClick={() => selectMusicId.value = item.id!} key={item.id} />
3644
)}

0 commit comments

Comments
 (0)