|
@@ -1,40 +1,77 @@
|
|
|
-import { NButton, NIcon, NScrollbar, NTabPane, NTabs } from 'naive-ui';
|
|
|
-import { defineComponent, reactive } from 'vue';
|
|
|
+import { NScrollbar, NSpin, NTabPane, NTabs } from 'naive-ui';
|
|
|
+import { defineComponent, onMounted, reactive } from 'vue';
|
|
|
import styles from './index.module.less';
|
|
|
import CardType from '@/components/card-type';
|
|
|
import SearchGroup from './search-group';
|
|
|
-import listData from '@views/xiaoku-music/data.json';
|
|
|
+import { materialQueryPage } from '/src/views/natural-resources/api';
|
|
|
+import TheEmpty from '/src/components/TheEmpty';
|
|
|
+import { useThrottleFn } from '@vueuse/core';
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: 'select-music',
|
|
|
emits: ['select'],
|
|
|
setup(props, { emit }) {
|
|
|
- const forms = reactive({
|
|
|
- list: [],
|
|
|
- height: '100%' as any
|
|
|
+ const state = reactive({
|
|
|
+ loading: false,
|
|
|
+ finshed: false, // 是否加载完
|
|
|
+ pagination: {
|
|
|
+ page: 1,
|
|
|
+ rows: 20
|
|
|
+ },
|
|
|
+ searchGroup: {
|
|
|
+ type: 'MUSIC', //
|
|
|
+ keyword: '',
|
|
|
+ bookVersionId: null,
|
|
|
+ subjectId: null,
|
|
|
+ sourceType: 2
|
|
|
+ },
|
|
|
+ tableList: [] as any
|
|
|
});
|
|
|
-
|
|
|
- const formatData = () => {
|
|
|
- const rows = listData.rows || [];
|
|
|
- console.log(rows);
|
|
|
- const tempList: any = [];
|
|
|
- rows.forEach((row: any, i: number) => {
|
|
|
- if (i <= 10) {
|
|
|
- tempList.push({
|
|
|
+ const getList = async () => {
|
|
|
+ try {
|
|
|
+ if (state.pagination.page === 1) {
|
|
|
+ state.loading = true;
|
|
|
+ }
|
|
|
+ const { data } = await materialQueryPage({
|
|
|
+ ...state.searchGroup,
|
|
|
+ ...state.pagination
|
|
|
+ });
|
|
|
+ state.loading = false;
|
|
|
+ const tempRows = data.rows || [];
|
|
|
+ const temp: any = [];
|
|
|
+ tempRows.forEach((row: any) => {
|
|
|
+ temp.push({
|
|
|
id: row.id,
|
|
|
- type: 'MUSIC',
|
|
|
- title: row.musicSheetName,
|
|
|
- url: row.fixedTone ? row.fixedTone.split(',')[0] : '',
|
|
|
- isCollect: i % 3 ? false : true,
|
|
|
- isSelected: i % 4 ? false : true
|
|
|
+ coverImg: row.coverImg,
|
|
|
+ type: row.type,
|
|
|
+ title: row.name,
|
|
|
+ isCollect: !!row.favoriteFlag,
|
|
|
+ isSelected: row.sourceFrom === 'PLATFORM' ? true : false,
|
|
|
+ content: row.content
|
|
|
});
|
|
|
- }
|
|
|
- });
|
|
|
+ });
|
|
|
+ state.tableList.push(...temp);
|
|
|
+ state.finshed = data.pages <= data.current ? true : false;
|
|
|
+ } catch {
|
|
|
+ state.loading = false;
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
- forms.list = tempList || [];
|
|
|
+ const onSearch = async (item: any) => {
|
|
|
+ state.pagination.page = 1;
|
|
|
+ state.tableList = [];
|
|
|
+ state.searchGroup = Object.assign(state.searchGroup, item);
|
|
|
+ getList();
|
|
|
};
|
|
|
|
|
|
- formatData();
|
|
|
+ const throttledFn = useThrottleFn(() => {
|
|
|
+ state.pagination.page = state.pagination.page + 1;
|
|
|
+ getList();
|
|
|
+ }, 500);
|
|
|
+
|
|
|
+ onMounted(() => {
|
|
|
+ getList();
|
|
|
+ });
|
|
|
return () => (
|
|
|
<div class={styles.selectMusic}>
|
|
|
<NTabs
|
|
@@ -44,17 +81,42 @@ export default defineComponent({
|
|
|
justifyContent="center"
|
|
|
paneWrapperClass={styles.paneWrapperContainer}>
|
|
|
<NTabPane name="shareResources" tab="选择曲目">
|
|
|
- <SearchGroup />
|
|
|
- <NScrollbar class={styles.listContainer}>
|
|
|
- <div class={styles.list}>
|
|
|
- {forms.list.map((item: any) => (
|
|
|
- <CardType
|
|
|
- isShowAdd
|
|
|
- item={item}
|
|
|
- onAdd={(i: any) => emit('select', i)}
|
|
|
- />
|
|
|
- ))}
|
|
|
- </div>
|
|
|
+ <SearchGroup onSearch={(item: any) => onSearch(item)} />
|
|
|
+ <NScrollbar
|
|
|
+ class={styles.listContainer}
|
|
|
+ onScroll={(e: any) => {
|
|
|
+ const clientHeight = e.target?.clientHeight;
|
|
|
+ const scrollTop = e.target?.scrollTop;
|
|
|
+ const scrollHeight = e.target?.scrollHeight;
|
|
|
+ // 是否到底,是否加载完
|
|
|
+ if (
|
|
|
+ clientHeight + scrollTop + 20 >= scrollHeight &&
|
|
|
+ !state.finshed &&
|
|
|
+ !state.loading
|
|
|
+ ) {
|
|
|
+ throttledFn();
|
|
|
+ }
|
|
|
+ }}>
|
|
|
+ <NSpin show={state.loading} size={'small'}>
|
|
|
+ <div
|
|
|
+ class={[
|
|
|
+ styles.listSection,
|
|
|
+ !state.loading && state.tableList.length <= 0
|
|
|
+ ? styles.emptySection
|
|
|
+ : ''
|
|
|
+ ]}>
|
|
|
+ {state.tableList.length > 0 && (
|
|
|
+ <div class={styles.list}>
|
|
|
+ {state.tableList.map((item: any) => (
|
|
|
+ <CardType isShowAdd item={item} />
|
|
|
+ ))}
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
+ {!state.loading && state.tableList.length <= 0 && (
|
|
|
+ <TheEmpty />
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ </NSpin>
|
|
|
</NScrollbar>
|
|
|
</NTabPane>
|
|
|
</NTabs>
|