|
@@ -10,7 +10,7 @@ import umiRequest from 'umi-request'
|
|
|
import { useRoute, useRouter } from 'vue-router'
|
|
|
import request from '@/helpers/request'
|
|
|
import ColHeader from '@/components/col-header'
|
|
|
-import { postMessage, promisefiyPostMessage } from '@/helpers/native-message'
|
|
|
+
|
|
|
import {
|
|
|
Button,
|
|
|
Cell,
|
|
@@ -41,14 +41,10 @@ import iconCollect from './images/icon_collect.png'
|
|
|
import iconCollectActive from './images/icon_collect_active.png'
|
|
|
import iconListen from './images/icon_listen.png'
|
|
|
import iconTeacher from '@common/images/icon_teacher.png'
|
|
|
-import {
|
|
|
- addMusicTitle,
|
|
|
- addWatermark,
|
|
|
- convasToImg,
|
|
|
- imgToCanvas
|
|
|
-} from './imageFunction'
|
|
|
+import emtpy from './images/emtpy.png'
|
|
|
import Plyr from 'plyr'
|
|
|
import 'plyr/dist/plyr.css'
|
|
|
+import Download from './download'
|
|
|
|
|
|
export const getAssetsHomeFile = (fileName: string) => {
|
|
|
const path = `../component/images/${fileName}`
|
|
@@ -71,8 +67,9 @@ export default defineComponent({
|
|
|
const heightInfo = ref<any>('0')
|
|
|
const musicDetail = ref<any>(null)
|
|
|
const audioFileUrl = ref('')
|
|
|
- const showImg = ref<string>('')
|
|
|
+ const showImg = ref<Array<any>>([])
|
|
|
const accompanyUrl = ref<string>('')
|
|
|
+ const downloadStatus = ref<boolean>(false)
|
|
|
|
|
|
const colors: any = {
|
|
|
FREE: {
|
|
@@ -106,23 +103,23 @@ export default defineComponent({
|
|
|
const background = res.data.background
|
|
|
audioFileUrl.value =
|
|
|
background && background.length > 0 ? background[0].audioFileUrl : ''
|
|
|
-
|
|
|
- showImg.value = res.data.musicImg || ''
|
|
|
-
|
|
|
- if (!showImg.value) {
|
|
|
- setAccompanyUrl()
|
|
|
- window.addEventListener(
|
|
|
- 'message',
|
|
|
- async e => {
|
|
|
- // 给图片设置背景色
|
|
|
- const tempCanvas = await imgToCanvas(e.data)
|
|
|
- const img = convasToImg(tempCanvas)
|
|
|
- // 开始上传图片
|
|
|
- uploadFunction(img)
|
|
|
- },
|
|
|
- false
|
|
|
- )
|
|
|
- }
|
|
|
+ // const arrImgs = res.data.musicImg ? res.data.musicImg.split(',') : []
|
|
|
+ showImg.value = res.data.musicImg ? res.data.musicImg.split(',') : []
|
|
|
+
|
|
|
+ // if (!showImg.value) {
|
|
|
+ // setAccompanyUrl()
|
|
|
+ // window.addEventListener(
|
|
|
+ // 'message',
|
|
|
+ // async e => {
|
|
|
+ // // 给图片设置背景色
|
|
|
+ // const tempCanvas = await imgToCanvas(e.data)
|
|
|
+ // const img = convasToImg(tempCanvas)
|
|
|
+ // // 开始上传图片
|
|
|
+ // uploadFunction(img)
|
|
|
+ // },
|
|
|
+ // false
|
|
|
+ // )
|
|
|
+ // }
|
|
|
} catch (error) {
|
|
|
isError.value = true
|
|
|
}
|
|
@@ -194,7 +191,7 @@ export default defineComponent({
|
|
|
await request.post(state.platformApi + '/open/music/sheet/img', {
|
|
|
data: { musicSheetId: musicDetail.value.id, musicImg: imgurl }
|
|
|
})
|
|
|
- showImg.value = imgurl
|
|
|
+ // showImg.value = imgurl
|
|
|
} catch (e) {
|
|
|
console.log(e)
|
|
|
}
|
|
@@ -287,48 +284,49 @@ export default defineComponent({
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- const saveLoading = ref<boolean>(false)
|
|
|
- const image = ref('')
|
|
|
- const onSaveImg = async () => {
|
|
|
- // 判断是否在保存中...
|
|
|
- if (saveLoading.value) {
|
|
|
- return
|
|
|
- }
|
|
|
- saveLoading.value = true
|
|
|
- // 判断是否已经生成图片
|
|
|
- if (image.value) {
|
|
|
- saveImg()
|
|
|
- } else {
|
|
|
- const tempCanvas = await imgToCanvas(showImg.value)
|
|
|
- const titleCanvas = addMusicTitle(tempCanvas, {
|
|
|
- title: musicDetail.value?.musicSheetName,
|
|
|
- size: 18
|
|
|
+ const onAddCourse = async () => {
|
|
|
+ try {
|
|
|
+ const res = await request.post('/api-teacher/courseCourseware/submit', {
|
|
|
+ data: {
|
|
|
+ musicSheetId: musicDetail.value.id,
|
|
|
+ clientType: 'TEACHER',
|
|
|
+ userId: state.user.data?.userId
|
|
|
+ }
|
|
|
})
|
|
|
- const canvas = await addWatermark(titleCanvas, '酷乐秀')
|
|
|
- image.value = convasToImg(canvas)
|
|
|
- await saveImg()
|
|
|
+ console.log(res)
|
|
|
+ setTimeout(() => {
|
|
|
+ musicDetail.value.coursewareId = res.data.id || ''
|
|
|
+ Toast('添加成功')
|
|
|
+ musicDetail.value.coursewareStatus = 1
|
|
|
+ }, 100)
|
|
|
+ } catch {
|
|
|
+ //
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- const saveImg = async () => {
|
|
|
- Toast.loading({
|
|
|
- message: '图片生成中...',
|
|
|
- forbidClick: true
|
|
|
- })
|
|
|
- setTimeout(() => {
|
|
|
- saveLoading.value = false
|
|
|
- }, 100)
|
|
|
- const res = await promisefiyPostMessage({
|
|
|
- api: 'savePicture',
|
|
|
- content: {
|
|
|
- base64: image.value
|
|
|
+ const removeCourse = async () => {
|
|
|
+ Dialog.confirm({
|
|
|
+ title: '提示',
|
|
|
+ message: '您是否确定移除课件',
|
|
|
+ confirmButtonColor: '#269a93',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ confirmButtonText: '确定'
|
|
|
+ }).then(async () => {
|
|
|
+ try {
|
|
|
+ await request.post(
|
|
|
+ '/api-teacher/courseCourseware/remove/' +
|
|
|
+ musicDetail.value.coursewareId,
|
|
|
+ {
|
|
|
+ data: {}
|
|
|
+ }
|
|
|
+ )
|
|
|
+ setTimeout(() => {
|
|
|
+ Toast('移除成功')
|
|
|
+ musicDetail.value.coursewareStatus = 0
|
|
|
+ }, 100)
|
|
|
+ } catch {
|
|
|
+ //
|
|
|
}
|
|
|
})
|
|
|
- if (res?.content?.status === 'success') {
|
|
|
- Toast.success('保存成功')
|
|
|
- } else {
|
|
|
- Toast.fail('保存失败')
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
const onBuy = async () => {
|
|
@@ -535,27 +533,33 @@ export default defineComponent({
|
|
|
</p>
|
|
|
</div>
|
|
|
),
|
|
|
- value: () => (
|
|
|
- <span class={styles.download} onClick={() => onSaveImg()}>
|
|
|
- <img src={iconDownload} />
|
|
|
- 下载曲谱
|
|
|
- </span>
|
|
|
- )
|
|
|
+ value: () =>
|
|
|
+ showImg.value.length > 0 && (
|
|
|
+ <span
|
|
|
+ class={styles.download}
|
|
|
+ onClick={() => {
|
|
|
+ downloadStatus.value = true
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <img src={iconDownload} />
|
|
|
+ 下载曲谱
|
|
|
+ </span>
|
|
|
+ )
|
|
|
}}
|
|
|
/>
|
|
|
<div class={styles.musicContent}>
|
|
|
- <iframe
|
|
|
+ {/* <iframe
|
|
|
id="containerPrint"
|
|
|
ref="print"
|
|
|
style="width: 540px;page-break-after:always; height: 0;"
|
|
|
src={accompanyUrl.value}
|
|
|
- />
|
|
|
+ /> */}
|
|
|
<p class={styles.musicTitle}>
|
|
|
{musicDetail.value?.musicSheetName}
|
|
|
</p>
|
|
|
- {showImg.value ? (
|
|
|
- <img src={showImg.value} alt="" class={styles.musicImg} />
|
|
|
- ) : (
|
|
|
+ {showImg.value.length > 0 ? (
|
|
|
+ <img src={showImg.value[0]} alt="" class={styles.musicImg} />
|
|
|
+ ) : loading.value ? (
|
|
|
<>
|
|
|
<Vue3Lottie
|
|
|
animationData={AstronautJSON}
|
|
@@ -563,6 +567,11 @@ export default defineComponent({
|
|
|
></Vue3Lottie>
|
|
|
<p class={styles.finchLoad}>加载中...</p>
|
|
|
</>
|
|
|
+ ) : (
|
|
|
+ <div class={styles.empty}>
|
|
|
+ <Image src={emtpy} class={styles.emptyImg} />
|
|
|
+ <p class={styles.emptyTip}>暂无乐谱预览图</p>
|
|
|
+ </div>
|
|
|
)}
|
|
|
|
|
|
<div class={styles.videoOperation}>
|
|
@@ -608,18 +617,43 @@ export default defineComponent({
|
|
|
<span>{musicDetail.value?.userName}</span>
|
|
|
</div>
|
|
|
|
|
|
- <div
|
|
|
- class={[styles.collectSection]}
|
|
|
- onClick={() => toggleFavorite()}
|
|
|
- >
|
|
|
- <span>{musicDetail.value?.favoriteCount}人收藏</span>
|
|
|
- <img
|
|
|
- src={
|
|
|
- musicDetail.value?.favorite
|
|
|
- ? iconCollectActive
|
|
|
- : iconCollect
|
|
|
- }
|
|
|
- />
|
|
|
+ <div class={styles.functionSection}>
|
|
|
+ <div
|
|
|
+ class={[styles.collectSection]}
|
|
|
+ onClick={() => toggleFavorite()}
|
|
|
+ >
|
|
|
+ <span>{musicDetail.value?.favoriteCount}人收藏</span>
|
|
|
+ <img
|
|
|
+ src={
|
|
|
+ musicDetail.value?.favorite
|
|
|
+ ? iconCollectActive
|
|
|
+ : iconCollect
|
|
|
+ }
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ {state.platformType === 'TEACHER' && (
|
|
|
+ <div
|
|
|
+ class={[styles.collectSection]}
|
|
|
+ onClick={() => {
|
|
|
+ if (musicDetail.value?.coursewareStatus) {
|
|
|
+ removeCourse()
|
|
|
+ } else {
|
|
|
+ onAddCourse()
|
|
|
+ }
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <span>
|
|
|
+ {musicDetail.value?.coursewareStatus
|
|
|
+ ? '移出课件'
|
|
|
+ : '添加到课件'}
|
|
|
+ </span>
|
|
|
+ {musicDetail.value?.coursewareStatus ? (
|
|
|
+ <Icon name="clear" />
|
|
|
+ ) : (
|
|
|
+ <Icon name="add" size={18} />
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -750,6 +784,13 @@ export default defineComponent({
|
|
|
</div>
|
|
|
</ColShare>
|
|
|
</Popup>
|
|
|
+
|
|
|
+ <Popup v-model:show={downloadStatus.value} position="bottom" round>
|
|
|
+ <Download
|
|
|
+ imgList={showImg.value}
|
|
|
+ musicSheetName={musicDetail.value.musicSheetName}
|
|
|
+ />
|
|
|
+ </Popup>
|
|
|
</div>
|
|
|
)
|
|
|
}
|