import { Transition, TransitionGroup, computed, defineComponent, nextTick, onMounted, reactive, ref } from 'vue'; import styles from './index.module.less'; import icon_back from './images/icon_back.svg'; import icon_separator from './images/icon_separator.svg'; import { NBreadcrumb, NBreadcrumbItem, NButton, NEmpty, NImage, NSpace, NSpin } from 'naive-ui'; import TheSearch from '/src/components/TheSearch'; import { IMusicItem } from './type'; import icon_arrow from './images/icon_arrow.svg'; import icon_play from './images/icon_play.svg'; import icon_pause from './images/icon_pause.svg'; import icon_goXiaoku from './images/icon_goXiaoku.svg'; import icon_favitor from '/src/common/images/icon-collect-default.png'; import icon_favitorActive from '/src/common/images/icon-collect-active.png'; import { useRoute, useRouter } from 'vue-router'; import PlayItem from './component/play-item'; import PlayLoading from './component/play-loading'; import TheNoticeBar from '/src/components/TheNoticeBar'; import { api_musicSheetPage, api_subjectList } from '../xiaoku-ai/api'; export default defineComponent({ name: 'XiaokuMusic', setup() { const route = useRoute(); const router = useRouter(); const forms = reactive({ page: 1, rows: 20, status: true, keyword: '', // 关键词 musicSheetCategoriesId: route.query.id || '' }); const data = reactive({ loading: false, finshed: false, reshing: false, tags: [] as any[], tagIndex: 0, list: [] as unknown as IMusicItem[], listActive: 0, playState: 'pause' as 'play' | 'pause', showPlayer: false }); const getSubjects = async () => { const res = await api_subjectList(); if (Array.isArray(res?.data)) { data.tags = [{ name: '全部', id: 0 }, ...res.data]; } }; const getList = async () => { data.loading = true; let res = {} as any; try { res = await api_musicSheetPage({ ...forms, musicSubject: data.tagIndex ? data.tagIndex : '' }); } catch (error) { console.log(error); } if (data.reshing) { data.list = []; data.reshing = false; } if (res?.code === 200 && Array.isArray(res?.data?.rows)) { data.list = [...data.list, ...res.data.rows]; data.finshed = res.data.rows.length < forms.rows; console.log('🚀 ~ data.finshed:', data.finshed); } data.loading = false; }; const handleGetList = () => { forms.page = 1; data.finshed = false; getList(); }; const spinRef = ref(); const handleResh = () => { console.log(data.finshed); if (data.loading || data.finshed) return; forms.page = forms.page + 1; getList(); }; onMounted(async () => { getSubjects(); await getList(); const obv = new IntersectionObserver(entries => { if (entries[0].intersectionRatio > 0) { handleResh(); } }); nextTick(() => { obv.observe(spinRef.value); }); }); /** 改变模仿的曲谱 */ const handleChange = (item: IMusicItem) => { const index = data.list.findIndex(_item => _item.id === item.id); if (index > -1) { data.listActive = index; } }; /** 选中的item */ const activeItem = computed(() => { return data.list[data.listActive] || {}; }); /** 收藏 */ const handleFavitor = () => { data.list[data.listActive].delFlag = !data.list[data.listActive].delFlag; }; /** 播放曲目 */ const handlePlay = (item: IMusicItem) => { const index = data.list.findIndex(_item => _item.id === item.id); if (index > -1) { if (data.listActive === index) { data.playState = data.playState === 'play' ? 'pause' : 'play'; } else { data.playState = 'play'; } data.showPlayer = true; data.listActive = index; } }; /** 音频控制 */ const handleChangeAudio = ( type: 'play' | 'pause' | 'pre' | 'next' | 'favitor' ) => { if (type === 'play') { data.playState = 'play'; } else if (type === 'pause') { data.playState = 'pause'; } else if (type === 'pre') { if (data.list[data.listActive - 1]) { handlePlay(data.list[data.listActive - 1]); } } else if (type === 'next') { if (data.list[data.listActive + 1]) { handlePlay(data.list[data.listActive + 1]); } } else if (type === 'favitor') { handleFavitor(); } }; return () => (
router.push({ path: '/xiaoku-ai' })} /> router.push({ path: '/xiaoku-ai' })}> 曲谱列表 {route.query.name}
{data.tags.map(item => ( { data.tagIndex = item.id; data.reshing = true; handleGetList(); }}> {item.name} ))} { forms.keyword = val; data.reshing = true; handleGetList(); }} />
{data.list.map((item: IMusicItem, index) => { return (
handleChange(item)}>
{ (e.target as any).dataset.loaded = 'true'; }} />
{item.composer}
{ e.stopPropagation(); handlePlay(item); }}> 试听
); })} {!data.finshed && (
)} {!data.loading && data.list.length === 0 && (
)}
{activeItem.value.musicSheetName}
{ handleChangeAudio('pause'); const origin = /(localhost|192)/.test(location.host) ? 'https://test.lexiaoya.cn' : location.origin; const src = `${origin}/instrument?platform=pc&id=${activeItem.value.id}`; window.open(src); }} />
handleFavitor()}> {activeItem.value.delFlag ? ( ) : ( )}
{activeItem.value?.firstTone ?.split(',') .map((item, index) => { return ; })}
handleChangeAudio(value)} />
); } });