|
@@ -13,6 +13,9 @@ import tagItem from '@/components/tagItem'
|
|
|
import code from './images/code.png'
|
|
|
import musicItem from './modals/musicItem'
|
|
|
import request from '@/helpers/request'
|
|
|
+import { useRoute } from 'vue-router'
|
|
|
+import { getUserType } from '@/helpers/utils'
|
|
|
+import printJS from 'print-js'
|
|
|
export default defineComponent({
|
|
|
name: 'muiscDetial',
|
|
|
props: {
|
|
@@ -27,33 +30,75 @@ export default defineComponent({
|
|
|
musicItem
|
|
|
},
|
|
|
setup(props, conent) {
|
|
|
+ const route = useRoute()
|
|
|
const state = reactive({
|
|
|
title: props.title,
|
|
|
+ id: route.query.id,
|
|
|
subjectId: '',
|
|
|
subjectList: [],
|
|
|
tagList: [],
|
|
|
teacherDetail: {} as any,
|
|
|
- musicList:[]
|
|
|
+ musicDetail: {} as any,
|
|
|
+ musicList: [],
|
|
|
+ mp3Type: '',
|
|
|
+ activeRow: {} as any,
|
|
|
+ showCode: false,
|
|
|
+ userType: ''
|
|
|
})
|
|
|
+ const print = ref()
|
|
|
const getMusicList = async () => {
|
|
|
try {
|
|
|
- const res = await request.post('/api-website/open/music/sheet/list', {
|
|
|
- data: {
|
|
|
- albumStatus: 'PASS',
|
|
|
- page: 1,
|
|
|
- rows: 5,
|
|
|
- state: 1
|
|
|
+ const res = await request.get(
|
|
|
+ `/api-website/open/music/sheet/detail/${state.id}`,
|
|
|
+ {}
|
|
|
+ )
|
|
|
+
|
|
|
+ state.musicDetail = res.data
|
|
|
+ state.musicList = res.data.teacher.musicSheetList
|
|
|
+ state.subjectList = res.data.background
|
|
|
+ state.mp3Type = res.data.audioType
|
|
|
+ state.activeRow = res.data.background[0]
|
|
|
+ state.subjectId = res.data.background[0].id
|
|
|
+ state.teacherDetail = res.data.teacher
|
|
|
+ } catch (e) {
|
|
|
+ console.log(e)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const followVideo = async () => {
|
|
|
+ try {
|
|
|
+ const res = await request.get('/api-website/student/starOrUnStar', {
|
|
|
+ params: {
|
|
|
+ userId: state.teacherDetail.userId,
|
|
|
+ starStatus: state.teacherDetail.star ? 0 : 1
|
|
|
}
|
|
|
})
|
|
|
-
|
|
|
- state.musicList = res.data.rows
|
|
|
+ getMusicList()
|
|
|
+ // state.otherVideoList = res.data
|
|
|
} catch (e) {
|
|
|
console.log(e)
|
|
|
}
|
|
|
}
|
|
|
- onMounted(()=>{
|
|
|
+ const getDetail = (val: string | number) => {
|
|
|
+ state.id = val as string
|
|
|
+ getMusicList()
|
|
|
+ }
|
|
|
+ onMounted(() => {
|
|
|
+ state.userType = getUserType()
|
|
|
+ state.showCode = state.userType == 'STUDENT' ? true : false
|
|
|
getMusicList()
|
|
|
})
|
|
|
+ const printHander = () => {
|
|
|
+ printJS({
|
|
|
+ printable: 'containerPrint', // 元素id,不支持多个
|
|
|
+ type: 'html',
|
|
|
+ targetStyle: ['* '],
|
|
|
+ targetStyles: ['*'],
|
|
|
+ maxWidth: '', // 最大宽度,默认800,仅支持数字
|
|
|
+ style:
|
|
|
+ '@page{size:auto; margin: 0;}' +
|
|
|
+ '@media print { @page {size: landscape } }' // landscape 默认横向打印
|
|
|
+ } as any)
|
|
|
+ }
|
|
|
return () => (
|
|
|
<>
|
|
|
<div class={classes.wall}></div>
|
|
@@ -68,45 +113,63 @@ export default defineComponent({
|
|
|
placeholder="请选择声部"
|
|
|
>
|
|
|
{state.subjectList.map((item: any) => (
|
|
|
- <ElOption key={item.id} value={item.id} label={item.name} />
|
|
|
+ <ElOption
|
|
|
+ key={item.id}
|
|
|
+ value={item.id}
|
|
|
+ label={item.track}
|
|
|
+ />
|
|
|
))}
|
|
|
</ElSelect>
|
|
|
</div>
|
|
|
- <div class={classes.titleRight}>
|
|
|
+ <div class={classes.titleRight} onClick={() => printHander()}>
|
|
|
<img src={printIcon} alt="" />
|
|
|
<p>打印乐谱</p>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class={classes.musicContent}></div>
|
|
|
- <div class={classes.showCode}>
|
|
|
- <div class={classes.showCodeWrap}>
|
|
|
- <img class={classes.close} src={iconClose} alt="" />
|
|
|
- <img class={classes.code} src={code} alt="" />
|
|
|
- <h2 class={classes.title}>酷乐秀</h2>
|
|
|
- <p class={classes.conent}>扫码下载酷乐秀APP</p>
|
|
|
- <p class={classes.subConent}>
|
|
|
- 使用小酷Ai即可智能练习本首曲目哦!
|
|
|
- </p>
|
|
|
- <img src={banner} alt="" />
|
|
|
- </div>
|
|
|
+ <div class={classes.musicContent} id='containerPrint' ref="print">
|
|
|
+ 123
|
|
|
</div>
|
|
|
- <colVideo
|
|
|
- src=""
|
|
|
- styleValue={{
|
|
|
- height: '68px',
|
|
|
- bacground: '#333'
|
|
|
- }}
|
|
|
- type={'audto'}
|
|
|
- settings={['captions', 'quality', 'speed', 'loop']}
|
|
|
- class={classes.audios}
|
|
|
- ></colVideo>
|
|
|
+ {state.showCode ? (
|
|
|
+ <div class={classes.showCode}>
|
|
|
+ <div class={classes.showCodeWrap}>
|
|
|
+ <img
|
|
|
+ class={classes.close}
|
|
|
+ src={iconClose}
|
|
|
+ alt=""
|
|
|
+ onClick={() => {
|
|
|
+ state.showCode = false
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ <img class={classes.code} src={code} alt="" />
|
|
|
+ <h2 class={classes.title}>酷乐秀</h2>
|
|
|
+ <p class={classes.conent}>扫码下载酷乐秀APP</p>
|
|
|
+ <p class={classes.subConent}>
|
|
|
+ 使用小酷Ai即可智能练习本首曲目哦!
|
|
|
+ </p>
|
|
|
+ <img src={banner} alt="" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ ) : null}
|
|
|
+
|
|
|
+ {state.mp3Type == 'MP3' ? (
|
|
|
+ <colVideo
|
|
|
+ src={state.activeRow.audioFileUrl}
|
|
|
+ styleValue={{
|
|
|
+ height: '68px',
|
|
|
+ bacground: '#333'
|
|
|
+ }}
|
|
|
+ type={'audto'}
|
|
|
+ settings={['captions', 'quality', 'speed', 'loop']}
|
|
|
+ class={classes.audios}
|
|
|
+ ></colVideo>
|
|
|
+ ) : null}
|
|
|
</div>
|
|
|
<div class={classes.right}>
|
|
|
<div class={classes.musicInfo}>
|
|
|
- <h2>曲目:红莲华</h2>
|
|
|
+ <h2>曲目:{state.musicDetail.musicSheetName}</h2>
|
|
|
<div class={classes.collect}>
|
|
|
<img src={start} class={classes.start} alt="" />
|
|
|
- <p>321人收藏</p>
|
|
|
+ <p>{state.musicDetail.favoriteNum}人收藏</p>
|
|
|
</div>
|
|
|
<div class={classes.tagList}>
|
|
|
{state.tagList.map((item: any) => {
|
|
@@ -114,66 +177,79 @@ export default defineComponent({
|
|
|
})}
|
|
|
</div>
|
|
|
<p class={classes.subTitle}>
|
|
|
- 作曲人:<span>草野华余子</span>
|
|
|
+ 作曲人:<span>{state.musicDetail.composer}</span>
|
|
|
</p>
|
|
|
<p class={classes.subTitle}>
|
|
|
- 声部:<span>长笛、萨克斯、单簧管</span>
|
|
|
+ 声部:<span>{state.musicDetail.subjectNames}</span>
|
|
|
</p>
|
|
|
</div>
|
|
|
<div class={classes.btooom}>
|
|
|
- <div class={classes.teacherInfo}>
|
|
|
- <div class={classes.teacherHeadWrap}>
|
|
|
- <div class={classes.teacherHeadLeft}>
|
|
|
- <img
|
|
|
- src={
|
|
|
- state.teacherDetail.avatar
|
|
|
- ? state.teacherDetail.avatar
|
|
|
- : teacherHeader
|
|
|
- }
|
|
|
- alt=""
|
|
|
- class={classes.teacherHeader}
|
|
|
- />
|
|
|
- <div class={classes.teacherHeadInfo}>
|
|
|
- <div class={classes.teacherHeadName}>
|
|
|
- <span>{state.teacherDetail.username}</span>
|
|
|
- {state.teacherDetail.teacherType &&
|
|
|
- state.teacherDetail.teacherType.indexOf('ENTRY') ==
|
|
|
- -1 ? (
|
|
|
- ''
|
|
|
- ) : (
|
|
|
- <img
|
|
|
- src={teacher}
|
|
|
- class={classes.teacherIcon}
|
|
|
- alt=""
|
|
|
- />
|
|
|
- )}
|
|
|
- {state.teacherDetail.teacherType &&
|
|
|
- state.teacherDetail.teacherType.indexOf('MUSICIAN') ==
|
|
|
- -1 ? (
|
|
|
- ''
|
|
|
- ) : (
|
|
|
- <img
|
|
|
- src={musiceIcon}
|
|
|
- class={classes.teacherIcon}
|
|
|
- alt=""
|
|
|
- />
|
|
|
- )}
|
|
|
+ {state.teacherDetail.userId ? (
|
|
|
+ <div class={classes.teacherInfo}>
|
|
|
+ <div class={classes.teacherHeadWrap}>
|
|
|
+ <div class={classes.teacherHeadLeft}>
|
|
|
+ <img
|
|
|
+ src={
|
|
|
+ state.teacherDetail.avatar
|
|
|
+ ? state.teacherDetail.avatar
|
|
|
+ : teacherHeader
|
|
|
+ }
|
|
|
+ alt=""
|
|
|
+ class={classes.teacherHeader}
|
|
|
+ />
|
|
|
+ <div class={classes.teacherHeadInfo}>
|
|
|
+ <div class={classes.teacherHeadName}>
|
|
|
+ <span>{state.teacherDetail.userName}</span>
|
|
|
+ {!state.teacherDetail.entryFlag ? (
|
|
|
+ ''
|
|
|
+ ) : (
|
|
|
+ <img
|
|
|
+ src={teacher}
|
|
|
+ class={classes.teacherIcon}
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
+ )}
|
|
|
+ {!state.teacherDetail.musicianFlag ? (
|
|
|
+ ''
|
|
|
+ ) : (
|
|
|
+ <img
|
|
|
+ src={musiceIcon}
|
|
|
+ class={classes.teacherIcon}
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ <p class={classes.fens}>
|
|
|
+ 粉丝 <span>{state.teacherDetail.fansNum}</span>
|
|
|
+ </p>
|
|
|
</div>
|
|
|
- <p class={classes.fens}>
|
|
|
- 粉丝 <span>{state.teacherDetail.fansNum}</span>
|
|
|
- </p>
|
|
|
</div>
|
|
|
+ {state.userType == 'STUDENT' ? (
|
|
|
+ <div
|
|
|
+ class={[
|
|
|
+ classes.teacherHeadRight,
|
|
|
+ state.teacherDetail.star ? classes.isStart : ''
|
|
|
+ ]}
|
|
|
+ onClick={() => followVideo()}
|
|
|
+ >
|
|
|
+ {state.teacherDetail.star ? '已关注' : '关注'}
|
|
|
+ </div>
|
|
|
+ ) : null}
|
|
|
</div>
|
|
|
- <div class={classes.teacherHeadRight}>关注</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ ) : null}
|
|
|
+
|
|
|
<div class={classes.otherMusic}>
|
|
|
<h2>Ta的曲谱</h2>
|
|
|
<div class={classes.otherMusicList}>
|
|
|
- {state.musicList.map(item=>{
|
|
|
- return <musicItem item={item}></musicItem>
|
|
|
+ {state.musicList.map(item => {
|
|
|
+ return (
|
|
|
+ <musicItem
|
|
|
+ item={item}
|
|
|
+ onMusicDetail={val => getDetail(val)}
|
|
|
+ ></musicItem>
|
|
|
+ )
|
|
|
})}
|
|
|
-
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|