import { defineComponent, reactive, ref } from 'vue' import { Sticky, List, Popup, Icon, Tabs, Tab } from 'vant' import Search from '@/components/col-search' import request from '@/helpers/request' import Item from './item' import SelectTag from '../search/select-tag' import { useRoute, useRouter } from 'vue-router' import ColResult from '@/components/col-result' import styles from './index.module.less' import { state as baseState } from '@/state' import SelectSubject from '../search/select-subject' import { SubjectEnum, useSubjectId } from '@/helpers/hooks' import MusicGrid from '../component/music-grid' import { useAsyncState } from '@vueuse/core' import ColHeader from '@/components/col-header' import TheSticky from '@/components/the-sticky' export default defineComponent({ name: 'Album', props: { hideSearch: { type: Boolean, default: false }, defauleParams: { type: Object, default: () => ({}) } }, setup({ hideSearch, defauleParams }, { expose }) { const { isLoading, state } = useAsyncState( request(baseState.platformApi + '/MusicTag/tree', { params: { type: 'ALBUM' } }), null ) const teacherDetaultSubject = ref({ id: '', name: '' }) if (baseState.platformType === 'TEACHER') { const users = baseState.user.data teacherDetaultSubject.value = { name: users.defaultSubjectName || '全部声部', id: users.defaultSubject || '' } } else { const subjects: any = useSubjectId(SubjectEnum.SEARCH) // 判断是否已有数据 if (!subjects.id) { const users = baseState.user.data const subjectId = users.subjectId ? Number(users.subjectId.split(',')[0]) : '' const subjectName = users.subjectName ? users.subjectName.split(',')[0] : '' if (subjectId) { useSubjectId( SubjectEnum.SEARCH, JSON.stringify({ id: subjectId, name: subjectName }), 'set' ) } } } const router = useRouter() const route = useRoute() const tempParams: any = {} if (baseState.version) { tempParams.version = baseState.version || '' // 处理ios审核版本 tempParams.platform = baseState.platformType === 'STUDENT' ? 'ios-student' : 'ios-teacher' } tempParams.myself = false if (!hideSearch) { if (baseState.platformType === 'TEACHER') { tempParams.subjectIds = teacherDetaultSubject.value.id } else { const getSubject: any = useSubjectId(SubjectEnum.SEARCH) tempParams.subjectIds = getSubject.id } } const params = reactive({ search: (route.query.search as string) || '', albumTagIds: route.query.tagids || '', page: 1, ...defauleParams, ...tempParams }) const data = ref(null) const loading = ref(false) const finished = ref(false) const isError = ref(false) const tagVisibility = ref(false) const onSearch = (value: string) => { params.page = 1 params.search = value data.value = null FetchList() } const FetchList = async () => { if (loading.value) { return } loading.value = true isError.value = false try { const res = await request.post('/music/album/list', { prefix: baseState.platformType === 'TEACHER' ? '/api-teacher' : '/api-student', data: { ...params, idAndName: params.search } }) if (data.value) { const result = (data.value?.rows || []).concat(res.data.rows || []) data.value.rows = result } data.value = data.value || res.data params.page = res.data.pageNo + 1 finished.value = res.data.pageNo >= res.data.totalPage } catch (error) { isError.value = true } loading.value = false } // 设置默认声部 const setDefaultSubject = async (subjectId: any) => { try { await request.post('/api-teacher/teacher/defaultSubject', { params: { subjectId } }) } catch { // } } const onComfirm = tags => { const d = Object.values(tags).flat().filter(Boolean).join(',') params.albumTagIds = d params.page = 1 data.value = null FetchList() tagVisibility.value = false } const onComfirmSubject = item => { params.page = 1 params.subjectIds = item.id data.value = null if (baseState.platformType === 'TEACHER') { teacherDetaultSubject.value = { name: item.name, id: item.id } setDefaultSubject(item.id) } else { subject.id = item.id subject.name = item.name useSubjectId( SubjectEnum.SEARCH, JSON.stringify({ id: item.id, name: item.name }), 'set' ) } FetchList() subject.show = false } expose({ onSearch, onComfirm, onComfirmSubject }) const getSubject: any = useSubjectId(SubjectEnum.SEARCH) const subject = reactive({ show: false, name: getSubject.name || '全部声部', id: getSubject.id || '' }) return () => { const tagList = ((state.value && state.value.data) as any) || [] return ( <> {!hideSearch && ( (
(subject.show = true)} > {baseState.platformType === 'TEACHER' ? teacherDetaultSubject.value.name : subject.name}
) }} /> { params.albumTagIds = obj.name data.value = null params.page = 1 FetchList() }} > {tagList.map((tag: any) => ( ))}
)} {data.value && data.value.rows.length ? (
{ router.push({ name: 'music-album-detail', params: { id: n.id } }) }} />
) : ( // data.value.rows.map(item => ) !loading.value && ( ) )}
{/* (tagVisibility.value = val)} > {}} /> */} (subject.show = false)} onClosed={() => (subject.show = false)} > ) } } })