|
@@ -0,0 +1,103 @@
|
|
|
+import { defineComponent, ref, computed } from 'vue'
|
|
|
+import { useUserStore } from '@/store/modules/user'
|
|
|
+import styles from './index.module.less'
|
|
|
+import { api_getCbsDetail } from '../../api'
|
|
|
+import musicImg from './img/music.png'
|
|
|
+import tipImg from './img/tip.png'
|
|
|
+import { NPopselect } from 'naive-ui'
|
|
|
+
|
|
|
+export default defineComponent({
|
|
|
+ name: 'musicPreView',
|
|
|
+ props: {
|
|
|
+ item: {
|
|
|
+ type: Object,
|
|
|
+ default: () => {}
|
|
|
+ },
|
|
|
+ scoreType: {
|
|
|
+ type: String,
|
|
|
+ default: 'staff'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ setup(props, { emit }) {
|
|
|
+ const userStore = useUserStore()
|
|
|
+ const token = userStore.getToken
|
|
|
+ const src = ref('')
|
|
|
+ // 获取乐器列表
|
|
|
+ const musicalInstrumentsList = ref<any[]>([])
|
|
|
+ const muicInstrumentId = ref<undefined | string>(undefined)
|
|
|
+ api_getCbsDetail(props.item.id).then((res) => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ // 当不是节奏练习(isAllSubject),并且是独奏SINGLE,且有演奏文件的时候PLAY 才加载乐器列表字段;当乐器列表大于1个的时候才显示,默认展示第一个乐器
|
|
|
+ const { isAllSubject, musicSheetType, audioPlayTypes, musicalInstruments } = res.data
|
|
|
+ if (!isAllSubject && musicSheetType === 'SINGLE' && audioPlayTypes.includes("PLAY")) {
|
|
|
+ musicalInstrumentsList.value = (musicalInstruments || []).map((item: any) => {
|
|
|
+ return {
|
|
|
+ value: item.id,
|
|
|
+ label: item.name
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (musicalInstrumentsList.value.length) {
|
|
|
+ muicInstrumentId.value = musicalInstrumentsList.value[0].value
|
|
|
+ setSrc(muicInstrumentId.value)
|
|
|
+ } else {
|
|
|
+ setSrc()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ const musicName = computed(() => {
|
|
|
+ return musicalInstrumentsList.value.find((item) => {
|
|
|
+ return item.value === muicInstrumentId.value
|
|
|
+ })?.label
|
|
|
+ })
|
|
|
+
|
|
|
+ const apiUrls = {
|
|
|
+ dev: 'https://dev.kt.colexiu.com',
|
|
|
+ test: 'https://test.lexiaoya.cn',
|
|
|
+ online: 'https://mec.colexiu.com'
|
|
|
+ }
|
|
|
+ const environment = location.origin.includes('//dev')
|
|
|
+ ? 'dev'
|
|
|
+ : location.origin.includes('//test')
|
|
|
+ ? 'test'
|
|
|
+ : location.origin.includes('//mec.colexiu')
|
|
|
+ ? 'online'
|
|
|
+ : 'dev'
|
|
|
+ const apiUrl = apiUrls[environment]
|
|
|
+ const prefix = /(localhost|192)/.test(location.host) ? 'https://test.kt.colexiu.com/' : apiUrl
|
|
|
+ function setSrc(instrumentId?: string) {
|
|
|
+ let url =
|
|
|
+ prefix +
|
|
|
+ `/instrument/?_t=${Date.now()}&id=${
|
|
|
+ props.item.id
|
|
|
+ }&modelType=practise&modeType=json&Authorization=${token}&isCbs=true&isMove=1`
|
|
|
+ url += '&musicRenderType=' + props.scoreType
|
|
|
+ instrumentId && (url += `&instrumentId=${instrumentId}`)
|
|
|
+ src.value = url
|
|
|
+ }
|
|
|
+ return () => (
|
|
|
+ <div class={styles.musicPreView}>
|
|
|
+ {musicalInstrumentsList.value.length > 1 && (
|
|
|
+ <NPopselect
|
|
|
+ v-model:value={muicInstrumentId.value}
|
|
|
+ options={musicalInstrumentsList.value}
|
|
|
+ scrollable
|
|
|
+ size={'large'}
|
|
|
+ trigger={'click'}
|
|
|
+ class="musicalInstrumentsListPop"
|
|
|
+ onUpdate:value={setSrc}
|
|
|
+ >
|
|
|
+ <div class={styles.musicList}>
|
|
|
+ <img class={styles.musicImg} src={musicImg} />
|
|
|
+ <div>{musicName.value}</div>
|
|
|
+ <img class={styles.tipImg} src={tipImg} />
|
|
|
+ </div>
|
|
|
+ </NPopselect>
|
|
|
+ )}
|
|
|
+ {src.value && (
|
|
|
+ <iframe width={'100%'} height={'100%'} frameborder="0" src={src.value}></iframe>
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }
|
|
|
+})
|