123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- import { defineComponent, onMounted, onUnmounted, reactive, ref } from 'vue'
- import { useLocalStorage } from '@vueuse/core'
- import styles from './index.module.less'
- import { useRoute, useRouter } from 'vue-router'
- import { getRandomKey } from '../music'
- import { mitter } from './header'
- import { SubjectEnum, useSubjectId } from '@/helpers/hooks'
- import { List } from 'vant'
- import Song from '../component/song'
- import ColResult from '@/components/col-result'
- import { openDefaultWebView, state } from '@/state'
- import request from '@/helpers/request'
- export default defineComponent({
- name: 'MusicSearch',
- emits: ['confirm'],
- setup() {
- localStorage.setItem('behaviorId', getRandomKey())
- const route = useRoute()
- const router = useRouter()
- const keyword = ref(route.query.keyword || '')
- const subject = ref()
- const getSubject: any = useSubjectId(SubjectEnum.SEARCH)
- subject.value = getSubject.id
- const onSearch = val => {
- keyword.value = val
- console.log(val, 'onSearchonSearchonSearch')
- data.value.rows = []
- params.name = val
- params.page = 1
- FetchList()
- }
- const params = reactive({
- name: (route.query.search as string) || '',
- rows: 20,
- page: 1
- })
- const data = ref<any>(null)
- const loading = ref(false)
- const finished = ref(false)
- const isError = ref(false)
- const FetchList = async () => {
- if (loading.value) {
- return
- }
- loading.value = true
- isError.value = false
- try {
- const res = await request.post(
- `/api-student/music/sheet/searchTenant`,
- {
- data: params
- }
- )
- if (data.value) {
- const result = (data.value?.rows || []).concat(
- res.data.music.rows || []
- )
- data.value.rows = result
- }
- data.value = data.value || res.data.music
- const temp = data.value.rows || []
- temp.forEach((item: any) => {
- if (keyword.value) {
- item.musicSheetName = item.musicSheetName.replace(
- keyword.value,
- `<span style="color: #FE2451">${keyword.value}</span>`
- )
- }
- })
- data.value.rows = temp
- params.page = res.data.music.pageNo + 1
- finished.value = res.data.music.pageNo >= res.data.music.totalPage
- } catch (error) {
- isError.value = true
- }
- loading.value = false
- }
- onMounted(() => {
- mitter.on('search', onSearch)
- })
- onUnmounted(() => {
- mitter.off('search', onSearch)
- })
- return () => {
- return (
- <div class={[styles.search, styles.searchAlbum]}>
- <List
- // loading={loading.value}
- finished={finished.value}
- finished-text={data.value && data.value.rows.length ? '' : ''}
- onLoad={FetchList}
- error={isError.value}
- >
- {data.value && data.value.rows.length && (
- <Song
- showTitleImg
- list={data.value.rows}
- onDetail={(item: any) => {
- const url =
- location.origin +
- location.pathname +
- '#/music-detail?id=' +
- item.id
- openDefaultWebView(url, () => {
- router.push({
- path: '/music-detail',
- query: {
- id: item.id
- }
- })
- })
- }}
- />
- )}
- </List>
- {!loading.value && <ColResult tips="暂无曲目" btnStatus={false} />}
- </div>
- )
- }
- }
- })
|