|
@@ -1,13 +1,234 @@
|
|
|
-import { defineComponent } from "vue";
|
|
|
+import OEmpty from '@/components/o-empty'
|
|
|
+import { postMessage } from '@/helpers/native-message'
|
|
|
+import request from '@/helpers/request'
|
|
|
+import { state } from '@/state'
|
|
|
+import {
|
|
|
+ Cell,
|
|
|
+ CellGroup,
|
|
|
+ DropdownItem,
|
|
|
+ DropdownMenu,
|
|
|
+ Icon,
|
|
|
+ List,
|
|
|
+ Popover,
|
|
|
+ PullRefresh,
|
|
|
+ Search,
|
|
|
+ Sticky
|
|
|
+} from 'vant'
|
|
|
+import { defineComponent, reactive, ref, onMounted, nextTick, computed } from 'vue'
|
|
|
+import { useRoute } from 'vue-router'
|
|
|
+import { getImage } from './images'
|
|
|
import styles from './index.module.less'
|
|
|
|
|
|
export default defineComponent({
|
|
|
- name: 'accompany-music-list',
|
|
|
- setup(props, ctx) {
|
|
|
- return () => (
|
|
|
- <div class={styles.accompany}>
|
|
|
- 曲谱
|
|
|
- </div>
|
|
|
- )
|
|
|
- },
|
|
|
-})
|
|
|
+ name: 'accompany-music-list',
|
|
|
+ props: {
|
|
|
+ musicTree: {
|
|
|
+ type: Array,
|
|
|
+ default: () => []
|
|
|
+ }
|
|
|
+ },
|
|
|
+ setup(props, ctx) {
|
|
|
+ const route = useRoute()
|
|
|
+ const imgDefault = getImage('icon-music.svg')
|
|
|
+ const data = reactive({
|
|
|
+ loading: true,
|
|
|
+ finished: false,
|
|
|
+ refreshing: false,
|
|
|
+ pagenation: {
|
|
|
+ page: 1,
|
|
|
+ rows: 20
|
|
|
+ },
|
|
|
+ value1: null,
|
|
|
+ value2: null,
|
|
|
+ PopoverOpen: false,
|
|
|
+ list: [] as any,
|
|
|
+ keyword: ''
|
|
|
+ })
|
|
|
+ const option1 = computed(() => {
|
|
|
+ const v1: any = props.musicTree.find((n: any) => n.id == route.query.categorieid)
|
|
|
+ console.log('🚀 ~ v1', v1)
|
|
|
+ if (Array.isArray(v1?.musicSheetCategoriesList)) {
|
|
|
+ const list = v1.musicSheetCategoriesList.map((m: any) => {
|
|
|
+ if (!data.value1) {
|
|
|
+ data.value1 = m.id
|
|
|
+ data.value2 = null
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ text: m.name,
|
|
|
+ value: m.id
|
|
|
+ }
|
|
|
+ })
|
|
|
+ return list
|
|
|
+ }
|
|
|
+ return []
|
|
|
+ })
|
|
|
+ const option2 = computed(() => {
|
|
|
+ const v1: any = props.musicTree.find((n: any) => n.id == route.query.categorieid)
|
|
|
+ // console.log('🚀 ~ v1', v1)
|
|
|
+ if (Array.isArray(v1?.musicSheetCategoriesList)) {
|
|
|
+ const v2: any = v1.musicSheetCategoriesList.find((n: any) => n.id == data.value1)
|
|
|
+ if (Array.isArray(v2?.musicSheetCategoriesList)) {
|
|
|
+ const list = [{ text: '全部', value: null }].concat(
|
|
|
+ v2.musicSheetCategoriesList.map((m: any) => {
|
|
|
+ return {
|
|
|
+ text: m.name,
|
|
|
+ value: m.id
|
|
|
+ }
|
|
|
+ })
|
|
|
+ )
|
|
|
+ return list
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return [{ text: '全部', value: null }]
|
|
|
+ })
|
|
|
+
|
|
|
+ const getList = async () => {
|
|
|
+ try {
|
|
|
+ const res: any = await request.post(state.platformApi + '/musicSheet/page', {
|
|
|
+ data: {
|
|
|
+ ...data.pagenation,
|
|
|
+ keyword: data.keyword,
|
|
|
+ musicTag: data.value2 || data.value1
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (Array.isArray(res?.data?.rows)) {
|
|
|
+ data.list = [].concat(data.list, res.data.rows)
|
|
|
+ data.pagenation.page += 1
|
|
|
+ if (!res.data.rows.length) {
|
|
|
+ data.finished = true
|
|
|
+ }
|
|
|
+ if (data.refreshing) {
|
|
|
+ data.refreshing = false
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ data.finished = true
|
|
|
+ }
|
|
|
+ } catch (error) {}
|
|
|
+ nextTick(() => {
|
|
|
+ data.loading = false
|
|
|
+ })
|
|
|
+ }
|
|
|
+ const onRefresh = () => {
|
|
|
+ console.log('下拉刷新')
|
|
|
+ // 清空列表数据
|
|
|
+ data.pagenation.page = 1
|
|
|
+ data.finished = false
|
|
|
+ data.loading = false
|
|
|
+ data.list = []
|
|
|
+ // 重新加载数据
|
|
|
+ getList()
|
|
|
+ }
|
|
|
+ // 重置搜索
|
|
|
+ const onSearch = () => {
|
|
|
+ console.log(234)
|
|
|
+ data.pagenation.page = 1
|
|
|
+ data.finished = false
|
|
|
+ data.loading = false
|
|
|
+ data.list = []
|
|
|
+ getList()
|
|
|
+ }
|
|
|
+ onMounted(() => {
|
|
|
+ getList()
|
|
|
+ })
|
|
|
+ //进入云教练
|
|
|
+ const openView = (item: any) => {
|
|
|
+ const Authorization = sessionStorage.getItem('Authorization') || ''
|
|
|
+ const dev = /(localhost|192)/.test(location.host)
|
|
|
+ console.log(dev, 'https://ponline.colexiu.com')
|
|
|
+ let src = `${
|
|
|
+ dev ? `http://192.168.3.114:3000` : location.origin
|
|
|
+ }/orchestra-music-score/#/?id=${item.id}&Authorization=${Authorization}`
|
|
|
+ postMessage({
|
|
|
+ api: 'openAccompanyWebView',
|
|
|
+ content: {
|
|
|
+ url: src,
|
|
|
+ orientation: 0,
|
|
|
+ isHideTitle: true,
|
|
|
+ statusBarTextColor: false,
|
|
|
+ isOpenLight: true
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ return () => (
|
|
|
+ <div class={styles['accompany-music-list']}>
|
|
|
+ <Sticky>
|
|
|
+ <DropdownMenu>
|
|
|
+ <DropdownItem
|
|
|
+ v-model:modelValue={data.value1}
|
|
|
+ options={option1.value}
|
|
|
+ onChange={() => onSearch()}
|
|
|
+ ></DropdownItem>
|
|
|
+ <DropdownItem
|
|
|
+ v-model:modelValue={data.value2}
|
|
|
+ options={option2.value as any}
|
|
|
+ onChange={() => onSearch()}
|
|
|
+ ></DropdownItem>
|
|
|
+ </DropdownMenu>
|
|
|
+ <div class={styles.filter}>
|
|
|
+ <Search
|
|
|
+ placeholder="请输入搜索关键词"
|
|
|
+ background="#F8F8F8"
|
|
|
+ shape="round"
|
|
|
+ showAction={true}
|
|
|
+ v-model:modelValue={data.keyword}
|
|
|
+ >
|
|
|
+ {{
|
|
|
+ // label: () => (
|
|
|
+ // <Popover
|
|
|
+ // v-model:show={data.PopoverOpen}
|
|
|
+ // actions={actions}
|
|
|
+ // placement="bottom-start"
|
|
|
+ // >
|
|
|
+ // {{
|
|
|
+ // reference: () => (
|
|
|
+ // <div>
|
|
|
+ // 长笛 <Icon name="arrow" />
|
|
|
+ // </div>
|
|
|
+ // )
|
|
|
+ // }}
|
|
|
+ // </Popover>
|
|
|
+ // ),
|
|
|
+ action: () => (
|
|
|
+ <div class={styles.searchBtn} onClick={() => onSearch()}>
|
|
|
+ 搜索
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </Search>
|
|
|
+ </div>
|
|
|
+ </Sticky>
|
|
|
+ <PullRefresh v-model:modelValue={data.refreshing} onRefresh={onRefresh}>
|
|
|
+ <List
|
|
|
+ immediateCheck={false}
|
|
|
+ v-model:loading={data.loading}
|
|
|
+ v-model:finished={data.finished}
|
|
|
+ finishedText="没有更多了"
|
|
|
+ onLoad={() => {
|
|
|
+ getList()
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <CellGroup inset>
|
|
|
+ {data.list.map((item: any) => {
|
|
|
+ return (
|
|
|
+ <Cell
|
|
|
+ center
|
|
|
+ title={item.musicSheetName}
|
|
|
+ isLink
|
|
|
+ onClick={() => openView(item)}
|
|
|
+ >
|
|
|
+ {{
|
|
|
+ icon: () => (
|
|
|
+ <Icon style={{ marginRight: '12px' }} size={40} name={imgDefault} />
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </Cell>
|
|
|
+ )
|
|
|
+ })}
|
|
|
+ </CellGroup>
|
|
|
+ </List>
|
|
|
+ </PullRefresh>
|
|
|
+ {!data.loading && !data.list.length && <OEmpty tips="空空如也" />}
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }
|
|
|
+})
|