import {
defineComponent,
nextTick,
onMounted,
reactive,
ref,
watch,
toRefs
} from 'vue';
import styles from './index.module.less';
import {
NButton,
NForm,
NFormItem,
NImage,
NPopselect,
NSpace
} from 'naive-ui';
// import iconAdd from '../../images/icon-add.png';
import TheSearch from '/src/components/TheSearch';
import { resourceTypeArray } from '/src/utils/searchArray';
import { useCatchStore } from '/src/store/modules/catchData';
// import isCollaose from '../../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}
))}
{
// console.log(
// activeRow.value.activeIndex,
// 'activeRow.value.activeIndex'
// );
emit('selectChildTag', item || activeRow.value.activeIndex);
}}
/>
>
)}
>
);
}
});
export default defineComponent({
name: 'search-group',
emits: ['search', 'add'],
expose: ['init'],
setup(props, { emit }) {
const catchStore = useCatchStore();
const forms = reactive({
type: 'MUSIC', //
name: '',
// grade: null as any,
bookVersionId: null as any,
// musicSheetCategoriesId: null as any,
subjectId: null
});
const state = reactive({
tempSubjectId: null
});
const data = reactive({
selectParents: {}, // 选中的数据
tags: [] as any[],
tagActiveId: '' as any,
tagActive: {} as any,
childSelectId: null as any
});
const onSearch = () => {
emit('search', {
...forms,
bookVersionId: data.childSelectId || data.tagActiveId
});
};
const collapseWrapRef = ref();
const divDomList = ref([] as any);
const orginHeight = 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 () => {
// console.log('加载');
// 获取教材分类列表
// await catchStore.getMusicSheetCategory();
await catchStore.getMusicTagTreeApi();
_initTags();
// console.log(data, 'data');
// 获取声部列表
await catchStore.getSubjects();
if (forms.type === 'MUSIC') {
orginHeight.value = collapseWrapRef.value?.offsetHeight;
// hiddenHeight.value = collapseWrapRef.value.offsetHeight / line.value;
// 默认隐藏
getLive();
// const musicTagTreeList = catchStore.getMusicTagTree;
// if (musicTagTreeList.length > 0) {
// forms.bookVersionId = musicTagTreeList[0].id;
// state.gradeList = musicTagTreeList[0].children || [];
// if (state.gradeList.length > 0) {
// forms.grade = state.gradeList[0].id;
// state.musicCategory = state.gradeList[0].children || [];
// if (state.musicCategory.length > 0) {
// forms.musicSheetCategoriesId = state.musicCategory[0].id;
// }
// }
// }
}
onSearch();
});
return () => (
{resourceTypeArray.map((item: any) => (
{
forms.type = item.value;
forms.subjectId = null;
state.tempSubjectId = null;
data.tagActiveId = null;
data.childSelectId = null;
onSearch();
nextTick(() => {
if (forms.type === 'MUSIC') {
orginHeight.value = collapseWrapRef.value?.offsetHeight;
// hiddenHeight.value =
// collapseWrapRef.value.offsetHeight / line.value || 0;
// 默认隐藏
getLive();
} else {
divDomList.value = [];
}
});
}}>
{item.label}
))}
{/*
emit('add')}>
添加自定义教材
*/}
{forms.type === 'MUSIC' && (
<>
{data.tags.length > 0 && (
{data.tags.map((subject: any) => (
{
changeTag(subject);
}}>
{subject.name}
))}
)}
{
data.childSelectId = val;
onSearch();
}}
/>
>
)}
{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}
)
)}
{
forms.name = val;
onSearch();
}}
/>
);
}
});