|
@@ -1,4 +1,4 @@
|
|
|
-import { defineComponent, onMounted, reactive } from 'vue';
|
|
|
+import { computed, defineComponent, onMounted, reactive } from 'vue';
|
|
|
import styles from './index.module.less';
|
|
|
import { browser } from '@/helpers/utils';
|
|
|
import MSticky from '@/components/m-sticky';
|
|
@@ -12,6 +12,7 @@ import { state as baseState } from '@/state';
|
|
|
import { useEventListener, useWindowScroll } from '@vueuse/core';
|
|
|
import request from '@/helpers/request';
|
|
|
import MEmpty from '@/components/m-empty';
|
|
|
+import { postMessage } from '@/helpers/native-message';
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: 'hot-music-more',
|
|
@@ -25,7 +26,8 @@ export default defineComponent({
|
|
|
musics: [] as any,
|
|
|
types: [] as any,
|
|
|
subjectList: [] as any,
|
|
|
- subjectItem: {} as any
|
|
|
+ sMSCI: '',
|
|
|
+ sMII: ''
|
|
|
});
|
|
|
|
|
|
const musicForms = reactive({
|
|
@@ -33,7 +35,8 @@ export default defineComponent({
|
|
|
rows: 20,
|
|
|
status: 1,
|
|
|
keyword: '', // 关键词
|
|
|
- musicSheetCategoriesId: ''
|
|
|
+ musicSheetCategoriesId: '',
|
|
|
+ musicalInstrumentId: ''
|
|
|
});
|
|
|
|
|
|
const getMusicList = async () => {
|
|
@@ -83,7 +86,7 @@ export default defineComponent({
|
|
|
|
|
|
if (tempSubjects.length > 0) {
|
|
|
state.subjectList = [{ text: '全部', value: '' }, ...tempSubjects];
|
|
|
- state.subjectItem = tempSubjects[0];
|
|
|
+ // musicForms.musicalInstrumentId = tempSubjects[0].value;
|
|
|
}
|
|
|
}
|
|
|
// console.log(state.subjectList, state.subjectItem);
|
|
@@ -119,6 +122,28 @@ export default defineComponent({
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+ const onDetail = (item: any) => {
|
|
|
+ let src = `${location.origin}/instrument?id=${item?.id}&showGuide=true`;
|
|
|
+ postMessage({
|
|
|
+ api: 'openAccompanyWebView',
|
|
|
+ content: {
|
|
|
+ url: src,
|
|
|
+ orientation: 0,
|
|
|
+ isHideTitle: true,
|
|
|
+ statusBarTextColor: false,
|
|
|
+ isOpenLight: true,
|
|
|
+ c_orientation: 0 // 0 横屏 1 竖屏
|
|
|
+ }
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
+ // 判断是否有数据
|
|
|
+ const isSearch = computed(() => {
|
|
|
+ return state.subjectList.length > 2 && state.types.length > 0
|
|
|
+ ? true
|
|
|
+ : false;
|
|
|
+ });
|
|
|
+
|
|
|
onMounted(async () => {
|
|
|
useEventListener(document, 'scroll', () => {
|
|
|
const { y } = useWindowScroll();
|
|
@@ -169,17 +194,22 @@ export default defineComponent({
|
|
|
|
|
|
<MSearch background={state.background}>
|
|
|
{{
|
|
|
- left: () => (
|
|
|
- <div
|
|
|
- class={[
|
|
|
- styles.searchContent,
|
|
|
- state.searchPopup && styles.active
|
|
|
- ]}
|
|
|
- onClick={() => (state.searchPopup = true)}>
|
|
|
- <span>筛选</span>
|
|
|
- <i></i>
|
|
|
- </div>
|
|
|
- )
|
|
|
+ left: () =>
|
|
|
+ isSearch.value && (
|
|
|
+ <div
|
|
|
+ class={[
|
|
|
+ styles.searchContent,
|
|
|
+ state.searchPopup && styles.active
|
|
|
+ ]}
|
|
|
+ onClick={() => {
|
|
|
+ state.sMSCI = musicForms.musicSheetCategoriesId;
|
|
|
+ state.sMII = musicForms.musicalInstrumentId;
|
|
|
+ state.searchPopup = true;
|
|
|
+ }}>
|
|
|
+ <span>筛选</span>
|
|
|
+ <i></i>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
}}
|
|
|
</MSearch>
|
|
|
</MSticky>
|
|
@@ -189,30 +219,39 @@ export default defineComponent({
|
|
|
finished={state.finished}
|
|
|
finishedText=" "
|
|
|
onLoad={getMusicList}
|
|
|
- immediateCheck={false}
|
|
|
- class={styles.musicList}>
|
|
|
- {state.musics.map((item: any) => (
|
|
|
- <Cell class={styles.musicItem} border={false} center>
|
|
|
- {{
|
|
|
- icon: () => (
|
|
|
- <Image class={styles.musicImg} src={item.titleImg} />
|
|
|
- ),
|
|
|
- title: () => (
|
|
|
- <div class={styles.musicContnet}>
|
|
|
- <h2>{item.musicSheetName}</h2>
|
|
|
- {item.composer && <p>{item.composer}</p>}
|
|
|
- </div>
|
|
|
- ),
|
|
|
- 'right-icon': () => (
|
|
|
- <Image class={styles.musicPlayIcon} src={iconPlayer} />
|
|
|
- )
|
|
|
- }}
|
|
|
- </Cell>
|
|
|
- ))}
|
|
|
+ immediateCheck={false}>
|
|
|
+ {state.musics.length > 0 && (
|
|
|
+ <div class={styles.musicList}>
|
|
|
+ {state.musics.map((item: any) => (
|
|
|
+ <Cell
|
|
|
+ class={styles.musicItem}
|
|
|
+ border={false}
|
|
|
+ center
|
|
|
+ onClick={(item: any) => onDetail(item)}>
|
|
|
+ {{
|
|
|
+ icon: () => (
|
|
|
+ <Image class={styles.musicImg} src={item.titleImg} />
|
|
|
+ ),
|
|
|
+ title: () => (
|
|
|
+ <div class={styles.musicContnet}>
|
|
|
+ <h2>{item.musicSheetName}</h2>
|
|
|
+ {item.composer && <p>{item.composer}</p>}
|
|
|
+ </div>
|
|
|
+ ),
|
|
|
+ 'right-icon': () => (
|
|
|
+ <Image class={styles.musicPlayIcon} src={iconPlayer} />
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </Cell>
|
|
|
+ ))}
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
</List>
|
|
|
|
|
|
{!state.loading && state.musics.length === 0 && (
|
|
|
- <MEmpty description="暂无曲谱" />
|
|
|
+ <div class={styles.emptyGroup}>
|
|
|
+ <MEmpty description="暂无曲谱" />
|
|
|
+ </div>
|
|
|
)}
|
|
|
|
|
|
<Popup position="bottom" round v-model:show={state.searchPopup}>
|
|
@@ -226,7 +265,15 @@ export default defineComponent({
|
|
|
<span>筛选</span>
|
|
|
<span
|
|
|
class={styles.confirm}
|
|
|
- onClick={() => (state.searchPopup = false)}>
|
|
|
+ onClick={() => {
|
|
|
+ musicForms.musicSheetCategoriesId = state.sMSCI;
|
|
|
+ musicForms.musicalInstrumentId = state.sMII;
|
|
|
+ state.searchPopup = false;
|
|
|
+ musicForms.page = 1;
|
|
|
+ state.musics = [];
|
|
|
+ state.finished = false;
|
|
|
+ getMusicList();
|
|
|
+ }}>
|
|
|
确定
|
|
|
</span>
|
|
|
</div>
|
|
@@ -239,9 +286,12 @@ export default defineComponent({
|
|
|
{state.subjectList.map((subject: any) => (
|
|
|
<div
|
|
|
class={[
|
|
|
- styles.subjectItem
|
|
|
- // styles.active
|
|
|
- ]}>
|
|
|
+ styles.subjectItem,
|
|
|
+ subject.value === state.sMII && styles.active
|
|
|
+ ]}
|
|
|
+ onClick={() => {
|
|
|
+ state.sMII = subject.value;
|
|
|
+ }}>
|
|
|
{subject.text}
|
|
|
</div>
|
|
|
))}
|
|
@@ -253,12 +303,25 @@ export default defineComponent({
|
|
|
<>
|
|
|
<div class={styles.title}>曲谱教材</div>
|
|
|
<div class={styles.subjectContainer}>
|
|
|
+ <div
|
|
|
+ class={[
|
|
|
+ styles.subjectItem,
|
|
|
+ state.sMSCI === '' && styles.active
|
|
|
+ ]}
|
|
|
+ onClick={() => {
|
|
|
+ state.sMSCI = '';
|
|
|
+ }}>
|
|
|
+ 全部
|
|
|
+ </div>
|
|
|
{state.types.map((item: any) => (
|
|
|
<div
|
|
|
class={[
|
|
|
- styles.subjectItem
|
|
|
- // styles.active
|
|
|
- ]}>
|
|
|
+ styles.subjectItem,
|
|
|
+ item.value === state.sMSCI && styles.active
|
|
|
+ ]}
|
|
|
+ onClick={() => {
|
|
|
+ state.sMSCI = item.value;
|
|
|
+ }}>
|
|
|
{item.text}
|
|
|
</div>
|
|
|
))}
|