|  | @@ -16,17 +16,19 @@ import {
 | 
	
		
			
				|  |  |    Popup,
 | 
	
		
			
				|  |  |    Dialog,
 | 
	
		
			
				|  |  |    Sticky,
 | 
	
		
			
				|  |  | -  Swipe,
 | 
	
		
			
				|  |  | -  SwipeItem,
 | 
	
		
			
				|  |  | -  Picker
 | 
	
		
			
				|  |  | +  Picker,
 | 
	
		
			
				|  |  | +  DropdownMenu,
 | 
	
		
			
				|  |  | +  DropdownItem,
 | 
	
		
			
				|  |  | +  Tag
 | 
	
		
			
				|  |  |  } from 'vant'
 | 
	
		
			
				|  |  |  import styles from './index.module.less'
 | 
	
		
			
				|  |  |  import TheSticky from '@/components/the-sticky'
 | 
	
		
			
				|  |  |  import ColHeader from '@/components/col-header'
 | 
	
		
			
				|  |  | -import { useWindowScroll, useEventListener } from '@vueuse/core'
 | 
	
		
			
				|  |  | +// import { useWindowScroll, useEventListener } from '@vueuse/core'
 | 
	
		
			
				|  |  |  import request from '@/helpers/request'
 | 
	
		
			
				|  |  | -import iconMenu from './images/icon-menu.png'
 | 
	
		
			
				|  |  | -import iconRightTop from './images/icon-right-top.png'
 | 
	
		
			
				|  |  | +// import iconMenu from './images/icon-menu.png'
 | 
	
		
			
				|  |  | +// import iconRightTop from './images/icon-right-top.png'
 | 
	
		
			
				|  |  | +import Search from '@/components/col-search'
 | 
	
		
			
				|  |  |  import iconAlbumCover from '../../images/icon-album-cover.png'
 | 
	
		
			
				|  |  |  import iconTimer from './images/icon-timer.png'
 | 
	
		
			
				|  |  |  import iconArrow from './images/icon-arrow.png'
 | 
	
	
		
			
				|  | @@ -47,6 +49,21 @@ import 'swiper/css'
 | 
	
		
			
				|  |  |  import 'swiper/css/pagination'
 | 
	
		
			
				|  |  |  import CourseItem from '../lessonCourseware/component/CourseItem'
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +enum courseEmnu {
 | 
	
		
			
				|  |  | +  PERCUSSION_SINGLE = '打击乐',
 | 
	
		
			
				|  |  | +  FLUTE_SINGLE = '长笛',
 | 
	
		
			
				|  |  | +  SAX_SINGLE = '萨克斯',
 | 
	
		
			
				|  |  | +  CLARINET_SINGLE = '单簧管',
 | 
	
		
			
				|  |  | +  TRUMPET_SINGLE = '小号',
 | 
	
		
			
				|  |  | +  TROMBONE_SINGLE = '长号',
 | 
	
		
			
				|  |  | +  HORN_SINGLE = '圆号',
 | 
	
		
			
				|  |  | +  BARITONE_TUBA_SINGLE = '上低音号-大号',
 | 
	
		
			
				|  |  | +  MUSIC_THEORY = '乐理',
 | 
	
		
			
				|  |  | +  INSTRUMENTAL_ENSEMBLE = '合奏',
 | 
	
		
			
				|  |  | +  EUPHONIUM_SINGLE = '上低音号',
 | 
	
		
			
				|  |  | +  TUBA_SINGLE = '大号'
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  export default defineComponent({
 | 
	
		
			
				|  |  |    name: 'train-tool',
 | 
	
		
			
				|  |  |    setup() {
 | 
	
	
		
			
				|  | @@ -59,7 +76,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |      const route = useRoute()
 | 
	
		
			
				|  |  |      const router = useRouter()
 | 
	
		
			
				|  |  |      const background = ref<string>('rgba(55, 205, 177, 0)')
 | 
	
		
			
				|  |  | -    const color = ref<string>('#fff')
 | 
	
		
			
				|  |  | +    // const color = ref<string>('#fff')
 | 
	
		
			
				|  |  |      const state = reactive({
 | 
	
		
			
				|  |  |        userId: '',
 | 
	
		
			
				|  |  |        details: {} as any,
 | 
	
	
		
			
				|  | @@ -73,7 +90,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        isError: false,
 | 
	
		
			
				|  |  |        list: [] as any,
 | 
	
		
			
				|  |  |        popupStatus: false,
 | 
	
		
			
				|  |  | -      selectMember: {} as any, // 购买的月份
 | 
	
		
			
				|  |  | +      // selectMember: {} as any, // 购买的月份
 | 
	
		
			
				|  |  |        ensembleCounts: false,
 | 
	
		
			
				|  |  |        musicCounts: false,
 | 
	
		
			
				|  |  |        subjectCounts: false,
 | 
	
	
		
			
				|  | @@ -91,7 +108,34 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        teacherSubjectIndex: 0,
 | 
	
		
			
				|  |  |        subjectList: [] // 声部列表
 | 
	
		
			
				|  |  |      })
 | 
	
		
			
				|  |  | +    // const params = reactive({
 | 
	
		
			
				|  |  | +    //   keyword: (route.query.search as string) || '',
 | 
	
		
			
				|  |  | +    //   subjectType: subjectType,
 | 
	
		
			
				|  |  | +    //   page: 1,
 | 
	
		
			
				|  |  | +    //   subjectId: null,
 | 
	
		
			
				|  |  | +    //   albumId: route.query.albumId,
 | 
	
		
			
				|  |  | +    //   albumName: '',
 | 
	
		
			
				|  |  | +    //   level: '',
 | 
	
		
			
				|  |  | +    //   type: '',
 | 
	
		
			
				|  |  | +    //   title: title
 | 
	
		
			
				|  |  | +    // })
 | 
	
		
			
				|  |  | +    const searchObj = ref<any>({
 | 
	
		
			
				|  |  | +      COURSEWARE: {},
 | 
	
		
			
				|  |  | +      SUBJECT: {},
 | 
	
		
			
				|  |  | +      MUSIC: {},
 | 
	
		
			
				|  |  | +      ENSEMBLE: {}
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  | +    const searchRef = ref()
 | 
	
		
			
				|  |  |      const params = reactive({
 | 
	
		
			
				|  |  | +      keyword: null as any,
 | 
	
		
			
				|  |  | +      // subjectType: '',
 | 
	
		
			
				|  |  | +      subjectId: null,
 | 
	
		
			
				|  |  | +      // albumId: route.query.albumId,
 | 
	
		
			
				|  |  | +      // albumName: '',
 | 
	
		
			
				|  |  | +      level: '',
 | 
	
		
			
				|  |  | +      type: '',
 | 
	
		
			
				|  |  | +      courseTypeCode: '',
 | 
	
		
			
				|  |  | +      // title: '',
 | 
	
		
			
				|  |  |        page: 1,
 | 
	
		
			
				|  |  |        rows: 20
 | 
	
		
			
				|  |  |      })
 | 
	
	
		
			
				|  | @@ -108,6 +152,44 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      })
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    const isSearchStatus = computed(() => {
 | 
	
		
			
				|  |  | +      const obj = searchObj.value[state.activeTab]
 | 
	
		
			
				|  |  | +      let status = false
 | 
	
		
			
				|  |  | +      if (state.activeTab === 'COURSEWARE') {
 | 
	
		
			
				|  |  | +        if (obj.courseTypeList && obj.courseTypeList.length > 0) {
 | 
	
		
			
				|  |  | +          status = true
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        if (obj.subjects && obj.subjects.length > 0) {
 | 
	
		
			
				|  |  | +          status = true
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (obj.levelList && obj.levelList.length > 0) {
 | 
	
		
			
				|  |  | +          status = true
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (obj.typeList && obj.typeList.length > 0) {
 | 
	
		
			
				|  |  | +          status = true
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      return status
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const courseTypeCodeList = computed(() => {
 | 
	
		
			
				|  |  | +      const obj =
 | 
	
		
			
				|  |  | +        state.activeTab === 'COURSEWARE' ? searchObj.value[state.activeTab] : []
 | 
	
		
			
				|  |  | +      const list = obj.courseTypeList || []
 | 
	
		
			
				|  |  | +      const temp = list?.map((item: any) => {
 | 
	
		
			
				|  |  | +        return {
 | 
	
		
			
				|  |  | +          text: courseEmnu[item],
 | 
	
		
			
				|  |  | +          value: item
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      })
 | 
	
		
			
				|  |  | +      temp.unshift({
 | 
	
		
			
				|  |  | +        text: '全部教材',
 | 
	
		
			
				|  |  | +        value: ''
 | 
	
		
			
				|  |  | +      })
 | 
	
		
			
				|  |  | +      return temp
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      const getDetails = async () => {
 | 
	
		
			
				|  |  |        state.loadingAlbum = true
 | 
	
		
			
				|  |  |        try {
 | 
	
	
		
			
				|  | @@ -179,6 +261,23 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        state.loadingAlbum = false
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    const getSelectCondition = async (type: string) => {
 | 
	
		
			
				|  |  | +      // 判断是否已经查询过数据
 | 
	
		
			
				|  |  | +      if(Object.keys(searchObj.value[type]).length > 0) {
 | 
	
		
			
				|  |  | +        return
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      const { data } = await request.post(
 | 
	
		
			
				|  |  | +        `${apiSuffix.value}/tenantAlbumMusic/selectCondition`,
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +          data: {
 | 
	
		
			
				|  |  | +            subjectType: type,
 | 
	
		
			
				|  |  | +            tenantAlbumId: state.details.id
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      )
 | 
	
		
			
				|  |  | +      searchObj.value[type] = data || {}
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      watch(
 | 
	
		
			
				|  |  |        () => state.details,
 | 
	
		
			
				|  |  |        () => {
 | 
	
	
		
			
				|  | @@ -208,9 +307,12 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        state.loading = true
 | 
	
		
			
				|  |  |        state.isError = false
 | 
	
		
			
				|  |  |        const tempParams = {
 | 
	
		
			
				|  |  | +        ...params,
 | 
	
		
			
				|  |  | +      //   level: '',
 | 
	
		
			
				|  |  | +      // type: '',
 | 
	
		
			
				|  |  | +      // subjectId: params.subjectId
 | 
	
		
			
				|  |  |          albumId: state.details.id || null,
 | 
	
		
			
				|  |  | -        subjectType: state.activeTab,
 | 
	
		
			
				|  |  | -        ...params
 | 
	
		
			
				|  |  | +        subjectType: state.activeTab
 | 
	
		
			
				|  |  |        } as any
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        // 老师端默认查询声部
 | 
	
	
		
			
				|  | @@ -284,6 +386,23 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    // 获取信息
 | 
	
		
			
				|  |  | +    const activeTypeParams = async () => {
 | 
	
		
			
				|  |  | +      if (state.activeTab === 'COURSEWARE') {
 | 
	
		
			
				|  |  | +        await getSelectCondition(state.activeTab)
 | 
	
		
			
				|  |  | +      } else if (['SUBJECT', 'MUSIC', 'ENSEMBLE'].includes(state.activeTab)) {
 | 
	
		
			
				|  |  | +        await getSelectCondition(state.activeTab)
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const onSearch = (value?: string) => {
 | 
	
		
			
				|  |  | +      params.page = 1
 | 
	
		
			
				|  |  | +      // state.finished = false
 | 
	
		
			
				|  |  | +      params.keyword = value
 | 
	
		
			
				|  |  | +      state.list = []
 | 
	
		
			
				|  |  | +      FetchList()
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      onMounted(async () => {
 | 
	
		
			
				|  |  |        // useEventListener(document, 'scroll', evt => {
 | 
	
		
			
				|  |  |        //   const { y } = useWindowScroll()
 | 
	
	
		
			
				|  | @@ -318,10 +437,16 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        state.loadingAlbum = true
 | 
	
		
			
				|  |  |        await getDetails()
 | 
	
		
			
				|  |  |        await FetchList()
 | 
	
		
			
				|  |  | -      getSubjectList()
 | 
	
		
			
				|  |  | +      //
 | 
	
		
			
				|  |  | +      if (baseState.platformType === 'TEACHER') {
 | 
	
		
			
				|  |  | +        getSubjectList()
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      activeTypeParams()
 | 
	
		
			
				|  |  |        state.loadingAlbum = false
 | 
	
		
			
				|  |  |        state.loading = false
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +      console.log(state.activeTab, 'activeTab')
 | 
	
		
			
				|  |  |        // 为了处理 swiper 会不显示的问题
 | 
	
		
			
				|  |  |        document.body.scrollIntoView()
 | 
	
		
			
				|  |  |        window.scrollTo(1, 0)
 | 
	
	
		
			
				|  | @@ -533,6 +658,11 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                          pagination={{ clickable: true }}
 | 
	
		
			
				|  |  |                          // onTransitionEnd={(swiper: any) => {}} onSlideChange
 | 
	
		
			
				|  |  |                          onSlideChange={(swiper: any) => {
 | 
	
		
			
				|  |  | +                          params.subjectId = null;
 | 
	
		
			
				|  |  | +                          params.keyword = null;
 | 
	
		
			
				|  |  | +                          params.level = ''
 | 
	
		
			
				|  |  | +                          params.type = ''
 | 
	
		
			
				|  |  | +                          params.courseTypeCode = ''
 | 
	
		
			
				|  |  |                            state.details = state.albumList[swiper.activeIndex]
 | 
	
		
			
				|  |  |                            // 等tab渲染完了之后再切换 不然tab会自动重新赋值
 | 
	
		
			
				|  |  |                            nextTick(() => {
 | 
	
	
		
			
				|  | @@ -613,7 +743,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                  </div>
 | 
	
		
			
				|  |  |                </div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -              <div class={styles.musicList}>
 | 
	
		
			
				|  |  | +              <div class={[styles.musicList, 'musicList']}>
 | 
	
		
			
				|  |  |                  <Sticky position="top" offsetTop={state.heightV}>
 | 
	
		
			
				|  |  |                    <Tabs
 | 
	
		
			
				|  |  |                      color="var(--van-primary)"
 | 
	
	
		
			
				|  | @@ -622,7 +752,14 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                      shrink
 | 
	
		
			
				|  |  |                      v-model:active={state.activeTab}
 | 
	
		
			
				|  |  |                      onClick-tab={val => {
 | 
	
		
			
				|  |  | +                      params.subjectId = null;
 | 
	
		
			
				|  |  | +                      params.keyword = null;
 | 
	
		
			
				|  |  | +                      params.level = ''
 | 
	
		
			
				|  |  | +                      params.type = ''
 | 
	
		
			
				|  |  | +                      params.courseTypeCode = ''
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                        state.activeTab = val.name
 | 
	
		
			
				|  |  | +                      activeTypeParams()
 | 
	
		
			
				|  |  |                        params.page = 1
 | 
	
		
			
				|  |  |                        state.list = []
 | 
	
		
			
				|  |  |                        FetchList()
 | 
	
	
		
			
				|  | @@ -641,6 +778,214 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                        <Tab title="合奏云练" name="ENSEMBLE"></Tab>
 | 
	
		
			
				|  |  |                      )}
 | 
	
		
			
				|  |  |                    </Tabs>
 | 
	
		
			
				|  |  | +                  <Search
 | 
	
		
			
				|  |  | +                    placeholder={state.activeTab === 'COURSEWARE' ? '请输入教材关键词' : '请输入曲谱关键词'}
 | 
	
		
			
				|  |  | +                    class={styles.search}
 | 
	
		
			
				|  |  | +                    onSearch={onSearch}
 | 
	
		
			
				|  |  | +                    type="tenant"
 | 
	
		
			
				|  |  | +                    v-slots={{
 | 
	
		
			
				|  |  | +                      left: () =>
 | 
	
		
			
				|  |  | +                        isSearchStatus.value && (
 | 
	
		
			
				|  |  | +                          <DropdownMenu zIndex={2999}>
 | 
	
		
			
				|  |  | +                            {state.activeTab === 'COURSEWARE' ? (
 | 
	
		
			
				|  |  | +                              <DropdownItem
 | 
	
		
			
				|  |  | +                                teleport="body"
 | 
	
		
			
				|  |  | +                                onOpen={() => {
 | 
	
		
			
				|  |  | +                                  const targetElement: any = document.querySelector('.musicList')
 | 
	
		
			
				|  |  | +                                  const targetPosition = targetElement.getBoundingClientRect().top + window.scrollY;
 | 
	
		
			
				|  |  | +                                  // 设置距离顶部的像素值
 | 
	
		
			
				|  |  | +                                  window.scrollTo({
 | 
	
		
			
				|  |  | +                                    top: targetPosition - state.heightV + 1,
 | 
	
		
			
				|  |  | +                                    behavior: 'smooth'
 | 
	
		
			
				|  |  | +                                  })
 | 
	
		
			
				|  |  | +                                }}
 | 
	
		
			
				|  |  | +                                v-model={params.courseTypeCode}
 | 
	
		
			
				|  |  | +                                options={courseTypeCodeList.value}
 | 
	
		
			
				|  |  | +                                onUpdate:modelValue={() => {
 | 
	
		
			
				|  |  | +                                  onSearch()
 | 
	
		
			
				|  |  | +                                }}
 | 
	
		
			
				|  |  | +                              />
 | 
	
		
			
				|  |  | +                            ) : (
 | 
	
		
			
				|  |  | +                              <DropdownItem
 | 
	
		
			
				|  |  | +                                onOpen={() => {
 | 
	
		
			
				|  |  | +                                  const targetElement: any = document.querySelector('.musicList')
 | 
	
		
			
				|  |  | +                                  const targetPosition = targetElement.getBoundingClientRect().top + window.scrollY;
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +                                  window.scrollTo({
 | 
	
		
			
				|  |  | +                                    top: targetPosition - state.heightV + 1,
 | 
	
		
			
				|  |  | +                                    behavior: 'smooth'
 | 
	
		
			
				|  |  | +                                  })
 | 
	
		
			
				|  |  | +                                }}
 | 
	
		
			
				|  |  | +                                teleport="body"
 | 
	
		
			
				|  |  | +                                titleClass={
 | 
	
		
			
				|  |  | +                                  params.subjectId ||
 | 
	
		
			
				|  |  | +                                  params.type ||
 | 
	
		
			
				|  |  | +                                  params.level
 | 
	
		
			
				|  |  | +                                    ? styles.titleActive
 | 
	
		
			
				|  |  | +                                    : ''
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                                title="筛选"
 | 
	
		
			
				|  |  | +                                ref={searchRef}
 | 
	
		
			
				|  |  | +                              >
 | 
	
		
			
				|  |  | +                                <div
 | 
	
		
			
				|  |  | +                                  class={styles.searchResult}
 | 
	
		
			
				|  |  | +                                  style={{
 | 
	
		
			
				|  |  | +                                    maxHeight: '45vh',
 | 
	
		
			
				|  |  | +                                    overflowY: 'auto'
 | 
	
		
			
				|  |  | +                                  }}
 | 
	
		
			
				|  |  | +                                >
 | 
	
		
			
				|  |  | +                                  {searchObj.value[state.activeTab].subjects &&
 | 
	
		
			
				|  |  | +                                    searchObj.value[state.activeTab].subjects.length > 0 && (
 | 
	
		
			
				|  |  | +                                      <>
 | 
	
		
			
				|  |  | +                                        <div class={styles.searchTitle}>
 | 
	
		
			
				|  |  | +                                          声部
 | 
	
		
			
				|  |  | +                                        </div>
 | 
	
		
			
				|  |  | +                                        <div
 | 
	
		
			
				|  |  | +                                          class={[
 | 
	
		
			
				|  |  | +                                            styles['radio-group'],
 | 
	
		
			
				|  |  | +                                            styles.radio,
 | 
	
		
			
				|  |  | +                                            styles['organ-radio']
 | 
	
		
			
				|  |  | +                                          ]}
 | 
	
		
			
				|  |  | +                                        >
 | 
	
		
			
				|  |  | +                                          {searchObj.value[state.activeTab].subjects.map(
 | 
	
		
			
				|  |  | +                                            (subject: any) => {
 | 
	
		
			
				|  |  | +                                              const isActive =
 | 
	
		
			
				|  |  | +                                                subject.id === params.subjectId
 | 
	
		
			
				|  |  | +                                              const type = isActive
 | 
	
		
			
				|  |  | +                                                ? 'primary'
 | 
	
		
			
				|  |  | +                                                : 'default'
 | 
	
		
			
				|  |  | +                                              return (
 | 
	
		
			
				|  |  | +                                                <Tag
 | 
	
		
			
				|  |  | +                                                  size="large"
 | 
	
		
			
				|  |  | +                                                  plain={isActive}
 | 
	
		
			
				|  |  | +                                                  type={type}
 | 
	
		
			
				|  |  | +                                                  round
 | 
	
		
			
				|  |  | +                                                  onClick={() => {
 | 
	
		
			
				|  |  | +                                                    params.subjectId =
 | 
	
		
			
				|  |  | +                                                      subject.id
 | 
	
		
			
				|  |  | +                                                  }}
 | 
	
		
			
				|  |  | +                                                >
 | 
	
		
			
				|  |  | +                                                  {subject.name}
 | 
	
		
			
				|  |  | +                                                </Tag>
 | 
	
		
			
				|  |  | +                                              )
 | 
	
		
			
				|  |  | +                                            }
 | 
	
		
			
				|  |  | +                                          )}
 | 
	
		
			
				|  |  | +                                        </div>
 | 
	
		
			
				|  |  | +                                      </>
 | 
	
		
			
				|  |  | +                                    )}
 | 
	
		
			
				|  |  | +                                  {searchObj.value[state.activeTab].levelList &&
 | 
	
		
			
				|  |  | +                                    searchObj.value[state.activeTab].levelList.length > 0 && (
 | 
	
		
			
				|  |  | +                                      <>
 | 
	
		
			
				|  |  | +                                        <div class={styles.searchTitle}>
 | 
	
		
			
				|  |  | +                                          级别
 | 
	
		
			
				|  |  | +                                        </div>
 | 
	
		
			
				|  |  | +                                        <div
 | 
	
		
			
				|  |  | +                                          class={[
 | 
	
		
			
				|  |  | +                                            styles['radio-group'],
 | 
	
		
			
				|  |  | +                                            styles.radio,
 | 
	
		
			
				|  |  | +                                            styles['organ-radio']
 | 
	
		
			
				|  |  | +                                          ]}
 | 
	
		
			
				|  |  | +                                        >
 | 
	
		
			
				|  |  | +                                          {searchObj.value[state.activeTab].levelList.map(
 | 
	
		
			
				|  |  | +                                            (subject: any) => {
 | 
	
		
			
				|  |  | +                                              const isActive =
 | 
	
		
			
				|  |  | +                                                subject.id === params.level
 | 
	
		
			
				|  |  | +                                              const type = isActive
 | 
	
		
			
				|  |  | +                                                ? 'primary'
 | 
	
		
			
				|  |  | +                                                : 'default'
 | 
	
		
			
				|  |  | +                                              return (
 | 
	
		
			
				|  |  | +                                                <Tag
 | 
	
		
			
				|  |  | +                                                  size="large"
 | 
	
		
			
				|  |  | +                                                  plain={isActive}
 | 
	
		
			
				|  |  | +                                                  type={type}
 | 
	
		
			
				|  |  | +                                                  round
 | 
	
		
			
				|  |  | +                                                  onClick={() => {
 | 
	
		
			
				|  |  | +                                                    params.level = subject.id
 | 
	
		
			
				|  |  | +                                                  }}
 | 
	
		
			
				|  |  | +                                                >
 | 
	
		
			
				|  |  | +                                                  {subject.value}
 | 
	
		
			
				|  |  | +                                                </Tag>
 | 
	
		
			
				|  |  | +                                              )
 | 
	
		
			
				|  |  | +                                            }
 | 
	
		
			
				|  |  | +                                          )}
 | 
	
		
			
				|  |  | +                                        </div>
 | 
	
		
			
				|  |  | +                                      </>
 | 
	
		
			
				|  |  | +                                    )}
 | 
	
		
			
				|  |  | +                                  {searchObj.value[state.activeTab].typeList &&
 | 
	
		
			
				|  |  | +                                    searchObj.value[state.activeTab].typeList.length > 0 && (
 | 
	
		
			
				|  |  | +                                      <>
 | 
	
		
			
				|  |  | +                                        <div class={styles.searchTitle}>
 | 
	
		
			
				|  |  | +                                          类型
 | 
	
		
			
				|  |  | +                                        </div>
 | 
	
		
			
				|  |  | +                                        <div
 | 
	
		
			
				|  |  | +                                          class={[
 | 
	
		
			
				|  |  | +                                            styles['radio-group'],
 | 
	
		
			
				|  |  | +                                            styles.radio,
 | 
	
		
			
				|  |  | +                                            styles['organ-radio']
 | 
	
		
			
				|  |  | +                                          ]}
 | 
	
		
			
				|  |  | +                                        >
 | 
	
		
			
				|  |  | +                                          {searchObj.value[state.activeTab].typeList.map(
 | 
	
		
			
				|  |  | +                                            (subject: any) => {
 | 
	
		
			
				|  |  | +                                              const isActive =
 | 
	
		
			
				|  |  | +                                                subject.id === params.type
 | 
	
		
			
				|  |  | +                                              const type = isActive
 | 
	
		
			
				|  |  | +                                                ? 'primary'
 | 
	
		
			
				|  |  | +                                                : 'default'
 | 
	
		
			
				|  |  | +                                              return (
 | 
	
		
			
				|  |  | +                                                <Tag
 | 
	
		
			
				|  |  | +                                                  size="large"
 | 
	
		
			
				|  |  | +                                                  plain={isActive}
 | 
	
		
			
				|  |  | +                                                  type={type}
 | 
	
		
			
				|  |  | +                                                  round
 | 
	
		
			
				|  |  | +                                                  onClick={() => {
 | 
	
		
			
				|  |  | +                                                    params.type = subject.id
 | 
	
		
			
				|  |  | +                                                  }}
 | 
	
		
			
				|  |  | +                                                >
 | 
	
		
			
				|  |  | +                                                  {subject.value}
 | 
	
		
			
				|  |  | +                                                </Tag>
 | 
	
		
			
				|  |  | +                                              )
 | 
	
		
			
				|  |  | +                                            }
 | 
	
		
			
				|  |  | +                                          )}
 | 
	
		
			
				|  |  | +                                        </div>
 | 
	
		
			
				|  |  | +                                      </>
 | 
	
		
			
				|  |  | +                                    )}
 | 
	
		
			
				|  |  | +                                </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                <div class={['btnGroup', 'btnMore']}>
 | 
	
		
			
				|  |  | +                                  <Button
 | 
	
		
			
				|  |  | +                                    class={styles.resetting}
 | 
	
		
			
				|  |  | +                                    type="primary"
 | 
	
		
			
				|  |  | +                                    plain
 | 
	
		
			
				|  |  | +                                    round
 | 
	
		
			
				|  |  | +                                    onClick={() => {
 | 
	
		
			
				|  |  | +                                      params.subjectId = null
 | 
	
		
			
				|  |  | +                                      params.level = ''
 | 
	
		
			
				|  |  | +                                      params.type = ''
 | 
	
		
			
				|  |  | +                                    }}
 | 
	
		
			
				|  |  | +                                  >
 | 
	
		
			
				|  |  | +                                    重 置
 | 
	
		
			
				|  |  | +                                  </Button>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                  <Button
 | 
	
		
			
				|  |  | +                                    class={styles.confirm}
 | 
	
		
			
				|  |  | +                                    type="primary"
 | 
	
		
			
				|  |  | +                                    color="linear-gradient( 270deg, #FF204B 0%, #FE5B71 100%)"
 | 
	
		
			
				|  |  | +                                    round
 | 
	
		
			
				|  |  | +                                    block
 | 
	
		
			
				|  |  | +                                    onClick={() => {
 | 
	
		
			
				|  |  | +                                      onSearch()
 | 
	
		
			
				|  |  | +                                      searchRef.value?.toggle()
 | 
	
		
			
				|  |  | +                                    }}
 | 
	
		
			
				|  |  | +                                  >
 | 
	
		
			
				|  |  | +                                    确 认
 | 
	
		
			
				|  |  | +                                  </Button>
 | 
	
		
			
				|  |  | +                                </div>
 | 
	
		
			
				|  |  | +                              </DropdownItem>
 | 
	
		
			
				|  |  | +                            )}
 | 
	
		
			
				|  |  | +                          </DropdownMenu>
 | 
	
		
			
				|  |  | +                        )
 | 
	
		
			
				|  |  | +                    }}
 | 
	
		
			
				|  |  | +                  />
 | 
	
		
			
				|  |  |                  </Sticky>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  <div
 | 
	
	
		
			
				|  | @@ -735,7 +1080,10 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                  </div>
 | 
	
		
			
				|  |  |                </div>
 | 
	
		
			
				|  |  |                {baseState.platformType === 'STUDENT' && state.buy != '1' && (
 | 
	
		
			
				|  |  | -                <TheSticky position="bottom">
 | 
	
		
			
				|  |  | +                <TheSticky
 | 
	
		
			
				|  |  | +                  position="bottom"
 | 
	
		
			
				|  |  | +                  varName="--bottom-train-tool-height"
 | 
	
		
			
				|  |  | +                >
 | 
	
		
			
				|  |  |                    <div class={styles.btnGroup}>
 | 
	
		
			
				|  |  |                      <Button
 | 
	
		
			
				|  |  |                        round
 |