import { PropType, defineComponent, nextTick, onMounted, reactive, ref, toRef, toRefs, watch } from 'vue'; import styles from './index.module.less'; import { NButton, NForm, NFormItem, NImage, NPopselect, NSpace } from 'naive-ui'; import { resourceTypeArray } from '/src/utils/searchArray'; import { useCatchStore } from '/src/store/modules/catchData'; import { useThrottleFn } from '@vueuse/core'; import TheSearch from '/src/components/TheSearch'; import isCollaose from '/src/views/natural-resources/images/isCollaose.png'; const ChildNodeSearch = defineComponent({ name: 'ChildNodeSearch', props: { activeRow: { type: Object, default: () => ({}) }, list: { type: Array, default: () => [] } }, emits: ['selectChildTag'], setup(props, { emit }) { const { activeRow } = toRefs(props); const selectItem = ref({}); watch( () => props.activeRow, () => { activeRow.value = props.activeRow; selectItem.value = {}; } ); return () => ( <> {activeRow.value?.id && ( <> {activeRow.value?.children.map((subject: any) => ( { activeRow.value.activeIndex = subject.id; let children: any; let columnName = ''; if (subject.children) { children = [ { columnName: subject.children[0].columnName, name: '全部', id: '' }, ...subject.children ]; columnName = subject.children[0].columnName; selectItem.value = { ...subject, columnName, activeIndex: '', children }; } else { selectItem.value = {}; } emit('selectChildTag', activeRow.value.activeIndex); }}> {subject.name} ))} { emit('selectChildTag', item || activeRow.value.activeIndex); }} /> )} ); } }); export default defineComponent({ name: 'resource-search-group', props: { type: { type: String as PropType< 'relateResources' | 'shareResources' | 'myResources' | 'myCollect' >, default: 'shareResources' }, subjectId: { type: String, default: null } }, emits: ['search'], setup(props, { emit }) { const subjectId = toRef(props.subjectId); const catchStore = useCatchStore(); const forms = reactive({ type: 'MUSIC', // name: '', subjectId: subjectId.value as any, // grade: null as any, bookVersionId: null as any // musicSheetCategoriesId: null as any }); const state = reactive({ tempSubjectId: null, gradeList: [] as any[], musicCategory: [] as any }); const data = reactive({ selectParents: {}, // 选中的数据 tags: [] as any[], tagActiveId: '' as any, tagActive: {} as any, childSelectId: null as any }); const resourceType = ref([] as any); const onSearch = (type?: string) => { emit( 'search', { ...forms, bookVersionId: data.childSelectId || data.tagActiveId }, type ); }; const throttleFn = useThrottleFn(() => onSearch(), 500); const collapseWrapRef = ref(); const divDomList = ref([] as any); const orginHeight = ref(0); const hiddenHeight = ref(0); const line = ref(0); const isCollapse = ref(false); const loadingCollapse = ref(false); // 是否加载完成 const musicCateRef = (el: any) => { if (el?.selfElRef) { divDomList.value.push(el.selfElRef.parentNode); } }; const setCollapse = (flag: boolean) => { isCollapse.value = flag; getLive(); }; const getLive = () => { try { divDomList.value = [...new Set(divDomList.value)]; let offsetLeft = -1; divDomList.value.forEach((item: any, index: number) => { if (index === 0) { line.value = 1; offsetLeft = item.offsetLeft; } else if (item.offsetLeft === offsetLeft && index != 0) { // 如果某个标签的offsetLeft和第一个标签的offsetLeft相等 说明增加了一行 line.value++; } if (!isCollapse.value) { if (line.value > 1) { //从第3行开始 隐藏标签 item.style.display = 'none'; // 显示展开按钮 class名chu是在前面动态添加的 } else { item.style.display = 'block'; } } else { item.style.display = 'block'; } }); loadingCollapse.value = true; } catch { // } }; const selectChildObj = (item: any) => { const obj: any = {}; item?.forEach((child: any) => { if (child.id === forms.subjectId) { obj.selected = true; obj.name = child.name; } }); return obj; }; const _initTags = () => { const tags = catchStore.getMusicTagTree; data.tags = [ { columnName: tags[0].columnName, name: '全部', id: '' }, ...tags ]; data.tagActiveId = data.tags[0].id; }; const changeTag = (item: any) => { data.tagActiveId = item.id; data.childSelectId = null; let children: any; let columnName = ''; if (item.children) { children = [ { columnName: item.children[0].columnName, name: '全部', id: '' }, ...item.children ]; columnName = item.children[0].columnName; data.selectParents = { ...item, columnName, activeIndex: '', children }; } else { data.selectParents = {}; } onSearch(); }; onMounted(async () => { resourceTypeArray.forEach((item: any) => { resourceType.value.push(item); }); // // 获取教材分类列表 // await catchStore.getMusicSheetCategory(); await catchStore.getMusicTagTreeApi(); _initTags(); // 获取声部 await catchStore.getSubjects(); forms.subjectId = null; // 这里开始 // musicCateRef if (forms.type === 'MUSIC') { orginHeight.value = collapseWrapRef.value?.offsetHeight; hiddenHeight.value = collapseWrapRef.value?.offsetHeight / line.value; // 默认隐藏 getLive(); } if (props.type === 'shareResources') { onSearch('timer'); } }); return () => (
{resourceType.value.map((item: any) => ( { forms.type = item.value; forms.subjectId = null; data.tagActiveId = ''; data.childSelectId = null; data.selectParents = {}; onSearch(); try { nextTick(() => { if (forms.type === 'MUSIC') { orginHeight.value = collapseWrapRef.value?.offsetHeight; hiddenHeight.value = collapseWrapRef.value?.offsetHeight / line.value; // 默认隐藏 getLive(); } else { divDomList.value = []; } }); } catch { // } }}> {item.label} ))} { forms.name = val; throttleFn(); }} />
{forms.type === 'MUSIC' && props.type === 'shareResources' && ( <> {data.tags.map((subject: any) => ( { changeTag(subject); }}> {subject.name} ))} { data.childSelectId = val; onSearch(); }} /> )} {/* {catchStore.getSubjectAllList.map((music: any) => ( { forms.subjectId = music.id; onSearch(); }}> {music.name} ))} */} {catchStore.getSubjectInstruments.map((subject: any) => subject.instruments && subject.instruments.length > 1 ? ( { forms.subjectId = state.tempSubjectId; onSearch(); }} key={subject.value} class={[styles.popSelect]}> {selectChildObj(subject.instruments).name || subject.name} ) : ( { forms.subjectId = subject.value; state.tempSubjectId = null; onSearch(); }}> {subject.name} ) )}
); } });