import { PropType, defineComponent, onMounted, reactive, ref } from 'vue'; import styles from './index.module.less'; import { NButton, NCarousel, NCarouselItem, NImage, NSpace } from 'naive-ui'; import TheSearch from '/src/components/TheSearch'; import iconSlideRight from '/src/views/prepare-lessons/images/icon-slide-right.png'; import { nextTick } from 'process'; export default defineComponent({ name: 'search-group', props: { categoryChildList: { type: Array as PropType, default: () => [] }, wikiCategoryId: { type: String, default: '' } }, emits: ['search', 'add'], expose: ['init'], setup(props, { emit }) { // const catchStore = useCatchStore(); const forms = reactive({ currentIndex: 0, keyword: '', wikiCategoryId: props.wikiCategoryId || '', maxIndex: 0 }); const state = reactive({ showSlide: false }); const onSearch = () => { emit('search', forms); }; const carouselRef = ref(); const onChangeSlide = (type: string) => { if (type === 'left') { carouselRef.value?.prev(); } else if (type === 'right') { carouselRef.value?.next(); } }; onMounted(async () => { // 获取教材分类列表 // await catchStore.getMusicSheetCategory() // nextTick(() => { // carouselRef.value?.to(100); // }); nextTick(() => { // carouselRef.value?.to(100); // 最外层宽度 const carouselContainer = document.querySelector('.carouselContainer'); const carouselContainerWidth = (carouselContainer && carouselContainer.getBoundingClientRect().width) || 0; const slideDoms = document.querySelectorAll('.n-carousel__slide'); let slideWidth = 0; slideDoms.forEach(doom => { const rect = doom.getBoundingClientRect(); slideWidth += rect.width; }); if (slideWidth >= carouselContainerWidth) { state.showSlide = true; } }); }); return () => (
{props.categoryChildList.length > 0 ? ( { forms.wikiCategoryId = props.wikiCategoryId; onSearch(); }}> 全部 ) : ( '' )}
{ // // if (val > forms.maxIndex) { // forms.maxIndex = val; // carouselRef.value?.to(0); // } forms.currentIndex = val; }}> {props.categoryChildList.map((item: any) => ( { forms.wikiCategoryId = item.id; onSearch(); }}> {item.name} ))} {state.showSlide && (
onChangeSlide('left')}>
onChangeSlide('right')}>
)}
{ forms.keyword = val; onSearch(); }} />
); } });