|
@@ -12,12 +12,12 @@ import styles from './index.module.less';
|
|
|
import iconChange from '../images/icon-change.png';
|
|
|
import iconDownload from '../images/icon-download.png';
|
|
|
import iconStaff from '../images/icon-staff.png';
|
|
|
-import staff from '../images/staff/staff.png'
|
|
|
-import staffActive from '../images/staff/staff-active.png'
|
|
|
-import first from '../images/staff/first.png'
|
|
|
-import firstActive from '../images/staff/first-active.png'
|
|
|
-import fixed from '../images/staff/fixed.png'
|
|
|
-import fixedActive from '../images/staff/fixed-active.png'
|
|
|
+import staff from '../images/staff/staff.png';
|
|
|
+import staffActive from '../images/staff/staff-active.png';
|
|
|
+import first from '../images/staff/first.png';
|
|
|
+import firstActive from '../images/staff/first-active.png';
|
|
|
+import fixed from '../images/staff/fixed.png';
|
|
|
+import fixedActive from '../images/staff/fixed-active.png';
|
|
|
import { Button, NoticeBar, Popover, showLoadingToast, showToast } from 'vant';
|
|
|
import { state } from '@/state';
|
|
|
import {
|
|
@@ -39,13 +39,18 @@ export default defineComponent({
|
|
|
item: {
|
|
|
type: Object,
|
|
|
default: () => ({})
|
|
|
+ },
|
|
|
+ /** 乐器编码 */
|
|
|
+ instrumentCodes: {
|
|
|
+ type: Object,
|
|
|
+ default: () => ({})
|
|
|
}
|
|
|
},
|
|
|
emits: ['handleGoto'],
|
|
|
setup(props, { emit }) {
|
|
|
const item = toRef(props.item);
|
|
|
- const noticeBarDom = ref()
|
|
|
- const isScroll = ref(false)
|
|
|
+ const noticeBarDom = ref();
|
|
|
+ const isScroll = ref(false);
|
|
|
const data = reactive({
|
|
|
musicPdfUrl: '',
|
|
|
iframeSrc: '',
|
|
@@ -63,8 +68,8 @@ export default defineComponent({
|
|
|
() => props.item,
|
|
|
() => {
|
|
|
item.value = props.item;
|
|
|
- data.musicPdfUrl = ''
|
|
|
- data.iframeSrc = ''
|
|
|
+ data.musicPdfUrl = '';
|
|
|
+ data.iframeSrc = '';
|
|
|
__init();
|
|
|
}
|
|
|
);
|
|
@@ -99,16 +104,16 @@ export default defineComponent({
|
|
|
});
|
|
|
}
|
|
|
action.forEach((item: any) => {
|
|
|
- if(item.value === data.showMusicImg) {
|
|
|
- if(item.value === 'first') {
|
|
|
- item.icon = firstActive
|
|
|
- } else if(item.value == 'fixed') {
|
|
|
- item.icon = fixedActive
|
|
|
- } else if(item.value === 'staff') {
|
|
|
- item.icon = staffActive
|
|
|
+ if (item.value === data.showMusicImg) {
|
|
|
+ if (item.value === 'first') {
|
|
|
+ item.icon = firstActive;
|
|
|
+ } else if (item.value == 'fixed') {
|
|
|
+ item.icon = fixedActive;
|
|
|
+ } else if (item.value === 'staff') {
|
|
|
+ item.icon = staffActive;
|
|
|
}
|
|
|
}
|
|
|
- })
|
|
|
+ });
|
|
|
|
|
|
return action.map((item, index) => {
|
|
|
return {
|
|
@@ -125,11 +130,14 @@ export default defineComponent({
|
|
|
return {
|
|
|
...item,
|
|
|
color:
|
|
|
- data.selectMusicInstrumentIndex === item.value ? 'var(--van-primary-color)' : '',
|
|
|
- className: data.selectMusicInstrumentIndex === item.value ? 'fontBlod' : ''
|
|
|
+ data.selectMusicInstrumentIndex === item.value
|
|
|
+ ? 'var(--van-primary-color)'
|
|
|
+ : '',
|
|
|
+ className:
|
|
|
+ data.selectMusicInstrumentIndex === item.value ? 'fontBlod' : ''
|
|
|
};
|
|
|
});
|
|
|
- })
|
|
|
+ });
|
|
|
|
|
|
/** 保存图片 */
|
|
|
const handleSave = async () => {
|
|
@@ -156,7 +164,7 @@ export default defineComponent({
|
|
|
const waterCanvasImg = await addWatermark(canvas);
|
|
|
// canvas转图片
|
|
|
const dataURL = await convasToImg(waterCanvasImg);
|
|
|
- console.log(dataURL, 'dataUrl')
|
|
|
+ console.log(dataURL, 'dataUrl');
|
|
|
setTimeout(() => {
|
|
|
showToast('已保存到相册');
|
|
|
}, 500);
|
|
@@ -351,7 +359,7 @@ export default defineComponent({
|
|
|
? true
|
|
|
: false;
|
|
|
|
|
|
- const instrumentName = getInstrumentName(item);
|
|
|
+ const instrumentName = getInstrumentName(props.instrumentCodes, item);
|
|
|
const instrumentId = instrumentCodeToInstrumentId(
|
|
|
musicalInstruments,
|
|
|
item
|
|
@@ -489,17 +497,23 @@ export default defineComponent({
|
|
|
musicIframeLoad();
|
|
|
|
|
|
nextTick(() => {
|
|
|
- const noticeBarEl = noticeBarDom.value.$el
|
|
|
- if(noticeBarEl){
|
|
|
- isScroll.value = noticeBarEl.querySelector(".van-notice-bar__wrap")?.offsetWidth < noticeBarEl.querySelector(".van-notice-bar__content")?.offsetWidth
|
|
|
+ const noticeBarEl = noticeBarDom.value.$el;
|
|
|
+ if (noticeBarEl) {
|
|
|
+ isScroll.value =
|
|
|
+ noticeBarEl.querySelector('.van-notice-bar__wrap')?.offsetWidth <
|
|
|
+ noticeBarEl.querySelector('.van-notice-bar__content')?.offsetWidth;
|
|
|
}
|
|
|
- })
|
|
|
+ });
|
|
|
};
|
|
|
|
|
|
-
|
|
|
/** 去云练习 */
|
|
|
const handleGoto = () => {
|
|
|
- emit('handleGoto', item.value, data.showMusicImg, data.selectMusicInstrumentIndex)
|
|
|
+ emit(
|
|
|
+ 'handleGoto',
|
|
|
+ item.value,
|
|
|
+ data.showMusicImg,
|
|
|
+ data.selectMusicInstrumentIndex
|
|
|
+ );
|
|
|
};
|
|
|
|
|
|
onMounted(() => {
|
|
@@ -510,17 +524,20 @@ export default defineComponent({
|
|
|
<div class={styles.musicContainer}>
|
|
|
<div class={styles.container}>
|
|
|
<div
|
|
|
- class={[styles['right-musicName'], isScroll.value && styles.isScroll]}
|
|
|
+ class={[
|
|
|
+ styles['right-musicName'],
|
|
|
+ isScroll.value && styles.isScroll
|
|
|
+ ]}
|
|
|
style={{
|
|
|
opacity: !data.musicPdfUrl ? '1' : '0',
|
|
|
height: !data.musicPdfUrl ? 'auto' : '0'
|
|
|
}}>
|
|
|
- <NoticeBar
|
|
|
- ref={noticeBarDom}
|
|
|
- text={item.value?.musicSheetName}
|
|
|
- class={styles.noticeBar}
|
|
|
- background="none"
|
|
|
- />
|
|
|
+ <NoticeBar
|
|
|
+ ref={noticeBarDom}
|
|
|
+ text={item.value?.musicSheetName}
|
|
|
+ class={styles.noticeBar}
|
|
|
+ background="none"
|
|
|
+ />
|
|
|
</div>
|
|
|
{data.iframeSrc &&
|
|
|
(isEnsemble.value || data.musicPdfUrl || !isMusicImg.value) ? (
|
|
@@ -604,20 +621,35 @@ export default defineComponent({
|
|
|
)}
|
|
|
</div>
|
|
|
|
|
|
-
|
|
|
- <div class={[styles.container, styles.downContainer]} ref={downRef}>
|
|
|
+ <div class={[styles.container, styles.downContainer]} ref={downRef}>
|
|
|
<div
|
|
|
class={[styles['right-musicName'], styles.downloadMusicName]}
|
|
|
style={{
|
|
|
opacity: !data.musicPdfUrl ? '1' : '0',
|
|
|
height: !data.musicPdfUrl ? 'auto' : '0'
|
|
|
}}>
|
|
|
- <div class={styles.name}>{item.value?.musicSheetName}</div>
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- {data.showMusicImg === 'first' ? (
|
|
|
- <>
|
|
|
- {item.value?.musicFirstImg
|
|
|
+ <div class={styles.name}>{item.value?.musicSheetName}</div>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ {data.showMusicImg === 'first' ? (
|
|
|
+ <>
|
|
|
+ {item.value?.musicFirstImg
|
|
|
+ ?.split(',')
|
|
|
+ .map((item: any, index: number) => {
|
|
|
+ return (
|
|
|
+ <img
|
|
|
+ class={styles.staff}
|
|
|
+ src={item}
|
|
|
+ key={item}
|
|
|
+ crossorigin="anonymous"
|
|
|
+ />
|
|
|
+ );
|
|
|
+ })}
|
|
|
+ </>
|
|
|
+ ) : data.showMusicImg === 'fixed' ? (
|
|
|
+ <>
|
|
|
+ <TransitionGroup name="van-fade">
|
|
|
+ {item.value?.musicJianImg
|
|
|
?.split(',')
|
|
|
.map((item: any, index: number) => {
|
|
|
return (
|
|
@@ -629,45 +661,28 @@ export default defineComponent({
|
|
|
/>
|
|
|
);
|
|
|
})}
|
|
|
- </>
|
|
|
- ) : data.showMusicImg === 'fixed' ? (
|
|
|
- <>
|
|
|
- <TransitionGroup name="van-fade">
|
|
|
- {item.value?.musicJianImg
|
|
|
- ?.split(',')
|
|
|
- .map((item: any, index: number) => {
|
|
|
- return (
|
|
|
- <img
|
|
|
- class={styles.staff}
|
|
|
- src={item}
|
|
|
- key={item}
|
|
|
- crossorigin="anonymous"
|
|
|
- />
|
|
|
- );
|
|
|
- })}
|
|
|
- </TransitionGroup>
|
|
|
- </>
|
|
|
- ) : (
|
|
|
- <>
|
|
|
- {item.value?.musicImg
|
|
|
- ?.split(',')
|
|
|
- .map((item: any, index: number) => {
|
|
|
- return (
|
|
|
- <img
|
|
|
- class={styles.staff}
|
|
|
- src={item + '?v=' + Date.now()}
|
|
|
- key={item}
|
|
|
- crossorigin="anonymous"
|
|
|
- />
|
|
|
- );
|
|
|
- })}
|
|
|
- </>
|
|
|
- )}
|
|
|
- </div>
|
|
|
+ </TransitionGroup>
|
|
|
+ </>
|
|
|
+ ) : (
|
|
|
+ <>
|
|
|
+ {item.value?.musicImg
|
|
|
+ ?.split(',')
|
|
|
+ .map((item: any, index: number) => {
|
|
|
+ return (
|
|
|
+ <img
|
|
|
+ class={styles.staff}
|
|
|
+ src={item + '?v=' + Date.now()}
|
|
|
+ key={item}
|
|
|
+ crossorigin="anonymous"
|
|
|
+ />
|
|
|
+ );
|
|
|
+ })}
|
|
|
+ </>
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
-
|
|
|
<div class={styles.btnGroup}>
|
|
|
<div class={styles.operation}>
|
|
|
{isEnsemble.value && (
|
|
@@ -679,7 +694,7 @@ export default defineComponent({
|
|
|
placement="top-start"
|
|
|
onSelect={(item: any) => {
|
|
|
// console.log(item, 'item')
|
|
|
- data.selectMusicInstrumentIndex = item.value
|
|
|
+ data.selectMusicInstrumentIndex = item.value;
|
|
|
data.showChangeVoice = false;
|
|
|
musicIframeLoad();
|
|
|
}}>
|