index.tsx 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { defineComponent, onMounted, onUnmounted, ref } from 'vue'
  2. import { useUserStore } from '@/store/modules/user'
  3. import styles from "./index.module.less"
  4. import { musicSheetAddMix } from '../../../api'
  5. import { useMessage } from 'naive-ui'
  6. export default defineComponent({
  7. name: 'musiceBeatTime',
  8. props: {
  9. id: {
  10. type: String
  11. }
  12. },
  13. emits: ['close'],
  14. setup(props, {emit}) {
  15. const message = useMessage()
  16. onMounted(() => {
  17. window.addEventListener('message', handleBeatRes)
  18. })
  19. onUnmounted(() => {
  20. window.removeEventListener('message', handleBeatRes)
  21. })
  22. function handleBeatRes(res: MessageEvent) {
  23. const data = res.data
  24. if (data?.api === 'webApi_beatTimes') {
  25. iframeShow.value = false
  26. handleBeatTimes(data)
  27. }
  28. }
  29. async function handleBeatTimes(data:any){
  30. try {
  31. const { beatTime, singBeatTime, mingBeatTime} = JSON.parse(data.data)
  32. await musicSheetAddMix({
  33. id: props.id,
  34. playTimeList: beatTime,
  35. singTimeList: singBeatTime,
  36. solmizationTimeList: mingBeatTime
  37. })
  38. message.success('节拍器生成成功')
  39. emit("close")
  40. }catch (err){
  41. console.log('🚀 ~ 音频合成失败', err)
  42. message.error('节拍器生成失败')
  43. emit("close", true)
  44. }
  45. }
  46. const iframeShow = ref(true)
  47. const userStore = useUserStore()
  48. const token = userStore.getToken
  49. const apiUrls = {
  50. 'dev': 'https://dev.kt.colexiu.com',
  51. 'test': 'https://test.lexiaoya.cn',
  52. 'online': 'https://mec.colexiu.com'
  53. }
  54. const environment = location.origin.includes('//dev') ? 'dev' : location.origin.includes('//test') ? 'test' : location.origin.includes('//mec.colexiu') ? 'online' : 'dev'
  55. const apiUrl = apiUrls[environment]
  56. const prefix = /(localhost|192)/.test(location.host) ? 'https://dev.kt.colexiu.com/' : apiUrl
  57. let src = prefix + `/instrument/?_t=${Date.now()}&id=${props.id}&Authorization=${token}&isCbs=true&isbeatTimes=true&musicRenderType=staff`
  58. //let src = "http://192.168.3.122:3000/instrument.html" + `?_t=${Date.now()}&id=${props.id}&Authorization=${token}&isCbs=true&isbeatTimes=true&musicRenderType=staff`
  59. return () => (
  60. <div class={styles.musiceBeatTime}>
  61. <div class={styles.tit}>节拍器音频生成中...</div>
  62. {
  63. iframeShow.value && <iframe class={styles.iframe} width={'667px'} height={'375px'} frameborder="0" src={src}></iframe>
  64. }
  65. </div>
  66. )
  67. }
  68. })