|
@@ -6,11 +6,22 @@ import {
|
|
|
reactive,
|
|
|
ref
|
|
|
} from 'vue'
|
|
|
+import umiRequest from 'umi-request'
|
|
|
import { useRoute, useRouter } from 'vue-router'
|
|
|
import request from '@/helpers/request'
|
|
|
import ColHeader from '@/components/col-header'
|
|
|
-import { postMessage } from '@/helpers/native-message'
|
|
|
-import { Button, Cell, Dialog, Icon, Image, Popup, Tag } from 'vant'
|
|
|
+import { postMessage, promisefiyPostMessage } from '@/helpers/native-message'
|
|
|
+import {
|
|
|
+ Button,
|
|
|
+ Cell,
|
|
|
+ Dialog,
|
|
|
+ Icon,
|
|
|
+ Image,
|
|
|
+ Popup,
|
|
|
+ Sticky,
|
|
|
+ Tag,
|
|
|
+ Toast
|
|
|
+} from 'vant'
|
|
|
import styles from './index.module.less'
|
|
|
// import Item from '../list/item'
|
|
|
import { useRect } from '@vant/use'
|
|
@@ -22,12 +33,22 @@ import ColSticky from '@/components/col-sticky'
|
|
|
import { moneyFormat } from '@/helpers/utils'
|
|
|
import { orderStatus } from '@/views/order-detail/orderStatus'
|
|
|
import iconShare from '@/views/music/album/icon_share.svg'
|
|
|
+import iconAlbum from '@/views/music/component/images/icon_album.png'
|
|
|
import iconDownload from './images/icon_download.png'
|
|
|
import AstronautJSON from './animate/bigLoad.json'
|
|
|
import ColShare from '@/components/col-share'
|
|
|
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 Plyr from 'plyr'
|
|
|
+import 'plyr/dist/plyr.css'
|
|
|
|
|
|
export const getAssetsHomeFile = (fileName: string) => {
|
|
|
const path = `../component/images/${fileName}`
|
|
@@ -41,17 +62,16 @@ export default defineComponent({
|
|
|
localStorage.setItem('behaviorId', getRandomKey())
|
|
|
const router = useRouter()
|
|
|
const route = useRoute()
|
|
|
- const albumDetail = ref<any>(null)
|
|
|
const loading = ref(false)
|
|
|
const aId = Number(route.query.activityId) || 0
|
|
|
const studentActivityId = ref(aId)
|
|
|
const isError = ref(false)
|
|
|
- const favorited = ref(0)
|
|
|
- const albumFavoriteCount = ref(0)
|
|
|
const headers = ref(null)
|
|
|
+ const footers = ref(null)
|
|
|
const heightInfo = ref<any>('0')
|
|
|
const musicDetail = ref<any>(null)
|
|
|
const showImg = ref<string>('')
|
|
|
+ const accompanyUrl = ref<string>('')
|
|
|
|
|
|
const colors: any = {
|
|
|
FREE: {
|
|
@@ -81,56 +101,250 @@ export default defineComponent({
|
|
|
})
|
|
|
musicDetail.value = res.data
|
|
|
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
|
|
|
+ )
|
|
|
+ }
|
|
|
} catch (error) {
|
|
|
isError.value = true
|
|
|
}
|
|
|
loading.value = false
|
|
|
}
|
|
|
+ const base64ToBlob = data => {
|
|
|
+ const arr = data.split(','),
|
|
|
+ mime = arr[0].match(/:(.*?);/)[1]
|
|
|
+
|
|
|
+ const bstr = atob(arr[1])
|
|
|
+ let n = bstr.length
|
|
|
+ const u8arr = new Uint8Array(n)
|
|
|
+
|
|
|
+ while (n--) {
|
|
|
+ u8arr[n] = bstr.charCodeAt(n)
|
|
|
+ }
|
|
|
+ return new Blob([u8arr], { type: mime })
|
|
|
+ }
|
|
|
+ const uploadFunction = async file => {
|
|
|
+ try {
|
|
|
+ const formData = new FormData()
|
|
|
+ const fileName =
|
|
|
+ new Date().getTime() +
|
|
|
+ musicDetail.value?.musicSheetName.replaceAll(' ', '_') +
|
|
|
+ '.png'
|
|
|
+ const keyTime = new Date().getTime() + fileName
|
|
|
+ const obj = {
|
|
|
+ filename: fileName,
|
|
|
+ bucketName: 'cloud-coach',
|
|
|
+ postData: {
|
|
|
+ filename: fileName,
|
|
|
+ acl: 'public-read',
|
|
|
+ key: keyTime,
|
|
|
+ unknowValueField: []
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const res = await request.post(state.platformApi + '/getUploadSign', {
|
|
|
+ data: obj
|
|
|
+ })
|
|
|
+
|
|
|
+ Toast.loading({
|
|
|
+ message: '加载中...',
|
|
|
+ forbidClick: true,
|
|
|
+ loadingType: 'spinner',
|
|
|
+ duration: 0
|
|
|
+ })
|
|
|
+
|
|
|
+ const dataObj = {
|
|
|
+ policy: res.data.policy,
|
|
|
+ signature: res.data.signature,
|
|
|
+ key: keyTime,
|
|
|
+ KSSAccessKeyId: res.data.kssAccessKeyId,
|
|
|
+ acl: 'public-read',
|
|
|
+ name: fileName
|
|
|
+ }
|
|
|
+ for (const key in dataObj) {
|
|
|
+ formData.append(key, dataObj[key])
|
|
|
+ }
|
|
|
+ const files = base64ToBlob(file)
|
|
|
+
|
|
|
+ formData.append('file', files, fileName)
|
|
|
+ const ossUploadUrl = 'https://ks3-cn-beijing.ksyuncs.com/cloud-coach'
|
|
|
+ await umiRequest(ossUploadUrl, {
|
|
|
+ method: 'POST',
|
|
|
+ data: formData
|
|
|
+ })
|
|
|
+ Toast.clear()
|
|
|
+ const imgurl = ossUploadUrl + '/' + keyTime
|
|
|
+
|
|
|
+ await request.post(state.platformApi + '/open/music/sheet/img', {
|
|
|
+ data: { musicSheetId: musicDetail.value.id, musicImg: imgurl }
|
|
|
+ })
|
|
|
+ showImg.value = imgurl
|
|
|
+ } catch (e) {
|
|
|
+ console.log(e)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const setAccompanyUrl = () => {
|
|
|
+ const url = 'http://dev.colexiu.com'
|
|
|
+ const music = musicDetail.value
|
|
|
+ let subjectId = ''
|
|
|
+ if (music.background && music.background.length > 0) {
|
|
|
+ subjectId = music.background[0].id
|
|
|
+ }
|
|
|
+ accompanyUrl.value =
|
|
|
+ url +
|
|
|
+ `/accompany/colxiu-website.html?id=${music.id}&part-index=${subjectId}`
|
|
|
+ }
|
|
|
+ const player = ref<any>(null)
|
|
|
+ const audio = ref<any>(null)
|
|
|
+ const freeRate = ref<any>(0)
|
|
|
+ const initAudio = async () => {
|
|
|
+ const config = await request.get(
|
|
|
+ '/api-student/sysConfig/queryByParamNameList',
|
|
|
+ {
|
|
|
+ params: {
|
|
|
+ paramNames: 'music_sheet_free_rate'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ )
|
|
|
+ freeRate.value = config.data[0]?.paramValue || 0
|
|
|
|
|
|
- const favoriteLoading = ref(false)
|
|
|
+ const controls = [
|
|
|
+ // 'play-large',
|
|
|
+ 'play',
|
|
|
+ 'progress',
|
|
|
+ // 'captions',
|
|
|
+ // 'fullscreen',
|
|
|
+ 'duration'
|
|
|
+ ]
|
|
|
+ player.value = new Plyr(audio.value, {
|
|
|
+ controls: controls
|
|
|
+ })
|
|
|
|
|
|
- onMounted(() => {
|
|
|
- FetchList()
|
|
|
+ player.value.on('timeupdate', () => {
|
|
|
+ // 允许播放时间
|
|
|
+ const players = player.value
|
|
|
+ const playTime = (players.duration * freeRate.value) / 100 || 0
|
|
|
+ // 时间,是否购买,是否免费
|
|
|
+ if (
|
|
|
+ players.currentTime >= playTime &&
|
|
|
+ musicDetail.value?.orderStatus !== 'PAID' &&
|
|
|
+ !paymentType.value.includes('FREE')
|
|
|
+ ) {
|
|
|
+ // players.stop()
|
|
|
+ players.pause()
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ onMounted(async () => {
|
|
|
+ await FetchList()
|
|
|
const { height } = useRect(headers as any)
|
|
|
- heightInfo.value = height
|
|
|
+ const footer = useRect(footers as any)
|
|
|
+ heightInfo.value = height + footer.height
|
|
|
+
|
|
|
+ // 初始化音频
|
|
|
+ if (musicDetail.value?.audioFileUrl) {
|
|
|
+ initAudio()
|
|
|
+ }
|
|
|
})
|
|
|
|
|
|
- const toggleFavorite = async (id: number) => {
|
|
|
- favoriteLoading.value = true
|
|
|
+ const toggleFavorite = async () => {
|
|
|
try {
|
|
|
- await request.post('/music/album/favorite/' + id, {
|
|
|
+ await request.post('/music/sheet/favorite/' + musicDetail.value?.id, {
|
|
|
prefix:
|
|
|
state.platformType === 'TEACHER' ? '/api-teacher' : '/api-student'
|
|
|
})
|
|
|
- favorited.value = favorited.value === 1 ? 0 : 1
|
|
|
- albumFavoriteCount.value += favorited.value ? 1 : -1
|
|
|
- } catch (error) {}
|
|
|
- favoriteLoading.value = false
|
|
|
+ musicDetail.value.favorite = musicDetail.value?.favorite ? 0 : 1
|
|
|
+ musicDetail.value.favoriteCount = musicDetail.value?.favorite
|
|
|
+ ? musicDetail.value.favoriteCount + 1
|
|
|
+ : musicDetail.value.favoriteCount - 1 < 0
|
|
|
+ ? 0
|
|
|
+ : musicDetail.value.favoriteCount - 1
|
|
|
+ setTimeout(() => {
|
|
|
+ Toast(musicDetail.value?.favorite ? '收藏成功' : '取消收藏成功')
|
|
|
+ }, 100)
|
|
|
+ } catch (error) {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ 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 canvas = await addWatermark(titleCanvas, '酷乐秀')
|
|
|
+ image.value = convasToImg(canvas)
|
|
|
+ await saveImg()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const saveImg = async () => {
|
|
|
+ Toast.loading({
|
|
|
+ message: '图片生成中...',
|
|
|
+ forbidClick: true
|
|
|
+ })
|
|
|
+ setTimeout(() => {
|
|
|
+ saveLoading.value = false
|
|
|
+ }, 100)
|
|
|
+ const res = await promisefiyPostMessage({
|
|
|
+ api: 'savePicture',
|
|
|
+ content: {
|
|
|
+ base64: image.value
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (res?.content?.status === 'success') {
|
|
|
+ Toast.success('保存成功')
|
|
|
+ } else {
|
|
|
+ Toast.fail('保存失败')
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
const onBuy = async () => {
|
|
|
- const album = albumDetail.value
|
|
|
- orderStatus.orderObject.orderType = 'ALBUM'
|
|
|
- orderStatus.orderObject.orderName = album.albumName
|
|
|
- orderStatus.orderObject.orderDesc = album.albumName
|
|
|
- orderStatus.orderObject.actualPrice = album.albumPrice
|
|
|
+ const music = musicDetail.value
|
|
|
+ orderStatus.orderObject.orderType = 'MUSIC'
|
|
|
+ orderStatus.orderObject.orderName = music.musicSheetName
|
|
|
+ orderStatus.orderObject.orderDesc = music.musicSheetName
|
|
|
+ orderStatus.orderObject.actualPrice = music.musicPrice
|
|
|
orderStatus.orderObject.recomUserId = route.query.recomUserId || 0
|
|
|
orderStatus.orderObject.activityId = route.query.activityId || 0
|
|
|
orderStatus.orderObject.orderNo = ''
|
|
|
orderStatus.orderObject.orderList = [
|
|
|
{
|
|
|
- orderType: 'ALBUM',
|
|
|
- goodsName: album.albumName,
|
|
|
- recomUserId: route.query.recomUserId || 0,
|
|
|
- price: album.albumPrice,
|
|
|
- ...album
|
|
|
+ orderType: 'MUSIC',
|
|
|
+ goodsName: music.musicSheetName,
|
|
|
+ actualPrice: music.musicPrice,
|
|
|
+ ...music
|
|
|
}
|
|
|
]
|
|
|
|
|
|
const res = await request.post('/api-student/userOrder/getPendingOrder', {
|
|
|
data: {
|
|
|
- goodType: 'ALBUM',
|
|
|
- bizId: album.id
|
|
|
+ goodType: 'MUSIC',
|
|
|
+ bizId: music.id
|
|
|
}
|
|
|
})
|
|
|
|
|
@@ -159,12 +373,12 @@ export default defineComponent({
|
|
|
}
|
|
|
}
|
|
|
const routerTo = () => {
|
|
|
- const album = albumDetail.value
|
|
|
+ const music = musicDetail.value
|
|
|
router.push({
|
|
|
path: '/orderDetail',
|
|
|
query: {
|
|
|
- orderType: 'ALBUM',
|
|
|
- album: album.id
|
|
|
+ orderType: 'MUSIC',
|
|
|
+ musicId: music.id
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -201,12 +415,13 @@ export default defineComponent({
|
|
|
})
|
|
|
let url =
|
|
|
location.origin +
|
|
|
- `/accompany/colexiu-share.html?id=${musicDetail.value?.id}&recomUserId=${state.user.data?.userId}&userType=${state.platformType}`
|
|
|
+ `/teacher.html#/shareMusic?id=${musicDetail.value?.id}&recomUserId=${state.user.data?.userId}&userType=${state.platformType}`
|
|
|
// 判断是否有活动
|
|
|
if (res.data.discount === 1) {
|
|
|
url += `&activityId=${res.data.activityId}`
|
|
|
}
|
|
|
shareDiscount.value = res.data.discount || 0
|
|
|
+ console.log(url)
|
|
|
shareUrl.value = url
|
|
|
shareStatus.value = true
|
|
|
return
|
|
@@ -215,35 +430,40 @@ export default defineComponent({
|
|
|
return () => {
|
|
|
return (
|
|
|
<div class={styles.detail}>
|
|
|
- <ColHeader
|
|
|
- background="transparent"
|
|
|
- border={false}
|
|
|
- color="#fff"
|
|
|
- backIconColor="white"
|
|
|
- v-slots={{
|
|
|
- right: () => (
|
|
|
- <div
|
|
|
- class={styles.shareBtn}
|
|
|
- style={{
|
|
|
- color: '#fff'
|
|
|
- }}
|
|
|
- onClick={onShare}
|
|
|
- >
|
|
|
- <Image src={iconShare} />
|
|
|
- 分享
|
|
|
- </div>
|
|
|
- )
|
|
|
- }}
|
|
|
- />
|
|
|
- <img class={styles.bgImg} src={musicDetail.value?.titleImg} />
|
|
|
+ <Sticky position="top">
|
|
|
+ <div ref={headers}>
|
|
|
+ <ColHeader
|
|
|
+ background="transparent"
|
|
|
+ border={false}
|
|
|
+ isFixed={false}
|
|
|
+ color="#fff"
|
|
|
+ title={musicDetail.value?.musicSheetName}
|
|
|
+ backIconColor="white"
|
|
|
+ v-slots={{
|
|
|
+ right: () => (
|
|
|
+ <div
|
|
|
+ class={styles.shareBtn}
|
|
|
+ style={{
|
|
|
+ color: '#fff'
|
|
|
+ }}
|
|
|
+ onClick={onShare}
|
|
|
+ >
|
|
|
+ <Image src={iconShare} />
|
|
|
+ 分享
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </Sticky>
|
|
|
|
|
|
+ <img class={styles.bgImg} src={musicDetail.value?.titleImg} />
|
|
|
+ <div class={styles.bgContent}></div>
|
|
|
<div
|
|
|
class={styles.musicContainer}
|
|
|
style={{
|
|
|
marginTop: '16px',
|
|
|
- height: `calc(100vh - var(--van-nav-bar-height) - ${
|
|
|
- heightInfo.value + 16 + 'px'
|
|
|
- })`
|
|
|
+ height: `calc(100vh - ${heightInfo.value + 16 + 'px'})`
|
|
|
}}
|
|
|
>
|
|
|
<Cell
|
|
@@ -290,14 +510,14 @@ export default defineComponent({
|
|
|
src={getAssetsHomeFile('icon_album_active.png')}
|
|
|
/>
|
|
|
)}
|
|
|
- <span style={{ paddingTop: '2px', paddingLeft: '6px' }}>
|
|
|
+ <span class={styles.coomposer}>
|
|
|
{musicDetail.value?.composer}
|
|
|
</span>
|
|
|
</p>
|
|
|
</div>
|
|
|
),
|
|
|
value: () => (
|
|
|
- <span class={styles.download}>
|
|
|
+ <span class={styles.download} onClick={() => onSaveImg()}>
|
|
|
<img src={iconDownload} />
|
|
|
下载曲谱
|
|
|
</span>
|
|
@@ -309,7 +529,7 @@ export default defineComponent({
|
|
|
id="containerPrint"
|
|
|
ref="print"
|
|
|
style="width: 100%;page-break-after:always; height: 0"
|
|
|
- // src={state.accompanyUrl}
|
|
|
+ src={accompanyUrl.value}
|
|
|
/>
|
|
|
<p class={styles.musicTitle}>
|
|
|
{musicDetail.value?.musicSheetName}
|
|
@@ -327,65 +547,136 @@ export default defineComponent({
|
|
|
)}
|
|
|
|
|
|
<div class={styles.videoOperation}>
|
|
|
- <div class={[styles.audition]}>
|
|
|
- <img src={iconListen} />
|
|
|
- <span>每首曲目可试听30%</span>
|
|
|
- </div>
|
|
|
+ {musicDetail.value?.audioFileUrl && (
|
|
|
+ <>
|
|
|
+ {(paymentType.value.includes('CHARGE') ||
|
|
|
+ paymentType.value.includes('VIP')) &&
|
|
|
+ musicDetail.value?.orderStatus !== 'PAID' && (
|
|
|
+ <div class={[styles.audition]}>
|
|
|
+ <img src={iconListen} />
|
|
|
+ <span>每首曲目可试听{freeRate.value}%</span>
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
+
|
|
|
+ <div class={[styles.audio, styles.collectCell]}>
|
|
|
+ <audio id="player" controls ref={audio}>
|
|
|
+ <source
|
|
|
+ src={musicDetail.value?.audioFileUrl}
|
|
|
+ type="audio/mp3"
|
|
|
+ />
|
|
|
+ </audio>
|
|
|
+ </div>
|
|
|
+ </>
|
|
|
+ )}
|
|
|
|
|
|
<div class={[styles.collect, styles.collectCell]}>
|
|
|
<div class={[styles.userInfo]}>
|
|
|
- <img src="" />
|
|
|
- <span>用户名</span>
|
|
|
+ <img src={musicDetail.value?.userAvatar || iconTeacher} />
|
|
|
+ <span>{musicDetail.value?.userName}</span>
|
|
|
</div>
|
|
|
|
|
|
- <div class={[styles.collectSection]}>
|
|
|
- <span>326人收藏</span>
|
|
|
- <img src={iconCollect} />
|
|
|
+ <div
|
|
|
+ class={[styles.collectSection]}
|
|
|
+ onClick={() => toggleFavorite()}
|
|
|
+ >
|
|
|
+ <span>{musicDetail.value?.favoriteCount}人收藏</span>
|
|
|
+ <img
|
|
|
+ src={
|
|
|
+ musicDetail.value?.favorite
|
|
|
+ ? iconCollectActive
|
|
|
+ : iconCollect
|
|
|
+ }
|
|
|
+ />
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
- <div class={[styles.lookAlbum, styles.collectCell]}>
|
|
|
- <div class="">进入曲目所在专辑列表</div>
|
|
|
- <Icon name="arrow" />
|
|
|
+ <div
|
|
|
+ class={[styles.lookAlbum, styles.collectCell]}
|
|
|
+ onClick={() => {
|
|
|
+ router.push({
|
|
|
+ path: '/look-album-list',
|
|
|
+ query: {
|
|
|
+ id: musicDetail.value?.id
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <div>
|
|
|
+ <img src={iconAlbum} />
|
|
|
+ <span>进入曲目所在专辑列表</span>
|
|
|
+ </div>
|
|
|
+ <Icon name="arrow" size={16} color="#666" />
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
- <ColSticky position="bottom" background="white">
|
|
|
- <div ref={headers}>
|
|
|
- <div class={styles.colSticky}>
|
|
|
- <div class={styles.priceSection}>
|
|
|
- <span>点播价:</span>
|
|
|
- <span class={styles.price}>
|
|
|
- <i>¥</i>
|
|
|
- {moneyFormat(9.9)}
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- <div class={[styles.buyBtn]}>
|
|
|
+ {musicDetail.value?.id && (
|
|
|
+ <ColSticky position="bottom" background="white">
|
|
|
+ <div ref={footers}>
|
|
|
+ {/* 判断是否是免费的,或者已经购买过 */}
|
|
|
+ {paymentType.value.includes('FREE') ||
|
|
|
+ musicDetail.value?.orderStatus === 'PAID' ? (
|
|
|
<Button
|
|
|
round
|
|
|
+ block
|
|
|
type="primary"
|
|
|
color="linear-gradient(180deg, #59E5D5 0%, #2DC7AA 100%)"
|
|
|
- class={styles.primary}
|
|
|
- onClick={onBuy}
|
|
|
+ onClick={() => musicBuy(musicDetail.value)}
|
|
|
>
|
|
|
- 立即点播
|
|
|
+ 立即练习
|
|
|
</Button>
|
|
|
+ ) : (
|
|
|
+ <div class={styles.colSticky}>
|
|
|
+ <div class={styles.priceSection}>
|
|
|
+ <span>点播价:</span>
|
|
|
+ <span class={styles.price}>
|
|
|
+ <i>¥</i>
|
|
|
+ {moneyFormat(musicDetail.value?.musicPrice)}
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ <div class={[styles.buyBtn]}>
|
|
|
+ {/* 判断是否是需要收费的 */}
|
|
|
+ {paymentType.value.includes('CHARGE') && (
|
|
|
+ <Button
|
|
|
+ round
|
|
|
+ type="primary"
|
|
|
+ color="linear-gradient(180deg, #59E5D5 0%, #2DC7AA 100%)"
|
|
|
+ class={styles.primary}
|
|
|
+ onClick={onBuy}
|
|
|
+ >
|
|
|
+ 立即点播
|
|
|
+ </Button>
|
|
|
+ )}
|
|
|
|
|
|
- <Button
|
|
|
- round
|
|
|
- type="primary"
|
|
|
- color="linear-gradient(180deg, #F7BD8D 0%, #CD8806 100%)"
|
|
|
- class={styles.memeber}
|
|
|
- onClick={onBuy}
|
|
|
- >
|
|
|
- 开通会员
|
|
|
- </Button>
|
|
|
- </div>
|
|
|
+ {/* 判断是否有会员的 */}
|
|
|
+ {paymentType.value.includes('VIP') && (
|
|
|
+ <Button
|
|
|
+ round
|
|
|
+ type="primary"
|
|
|
+ color="linear-gradient(180deg, #F7BD8D 0%, #CD8806 100%)"
|
|
|
+ class={styles.memeber}
|
|
|
+ onClick={() => {
|
|
|
+ router.push({
|
|
|
+ path: '/memberCenter',
|
|
|
+ query: {
|
|
|
+ ...route.query
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ {studentActivityId.value > 0 && (
|
|
|
+ <div class={[styles.buttonDiscount]}>专属优惠</div>
|
|
|
+ )}
|
|
|
+ 开通会员
|
|
|
+ </Button>
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </ColSticky>
|
|
|
+ </ColSticky>
|
|
|
+ )}
|
|
|
|
|
|
<Popup
|
|
|
v-model:show={shareStatus.value}
|