|
@@ -1,4 +1,4 @@
|
|
|
-import type { SelectOption } from 'naive-ui'
|
|
|
+import type {SelectOption} from 'naive-ui'
|
|
|
import {
|
|
|
NAlert,
|
|
|
NButton,
|
|
@@ -20,20 +20,19 @@ import {
|
|
|
useDialog,
|
|
|
useMessage
|
|
|
} from 'naive-ui'
|
|
|
-import { defineComponent, onMounted, onUnmounted, PropType, reactive, ref } from 'vue'
|
|
|
-import { musicSheetCategoriesQueryTree, musicSheetDetail, musicSheetSave } from '../../api'
|
|
|
+import {defineComponent, onMounted, PropType, reactive, ref} from 'vue'
|
|
|
+import {musicSheetCategoriesQueryTree, musicSheetDetail, musicSheetSave} from '../../api'
|
|
|
import UploadFile from '@/components/upload-file'
|
|
|
import styles from './index.module.less'
|
|
|
import deepClone from '@/utils/deep.clone'
|
|
|
import axios from 'axios'
|
|
|
-import { appKey, clientType, musicSheetSourceType, musicSheetType } from '@/utils/constant'
|
|
|
-import { getMapValueByKey, getSelectDataFromObj } from '@/utils/objectUtil'
|
|
|
-import { musicalInstrumentPage } from '@views/system-manage/subject-manage/api'
|
|
|
-import { subjectPage } from '@views/system-manage/api'
|
|
|
+import {appKey, clientType, musicSheetSourceType, musicSheetType} from '@/utils/constant'
|
|
|
+import {getMapValueByKey, getSelectDataFromObj} from '@/utils/objectUtil'
|
|
|
+import {musicalInstrumentPage} from '@views/system-manage/subject-manage/api'
|
|
|
+import {subjectPage} from '@views/system-manage/api'
|
|
|
import MusicSheetOwnerDialog from '@views/music-library/music-sheet/modal/musicSheetOwnerDialog'
|
|
|
-import { sysApplicationPage } from '@views/menu-manage/api'
|
|
|
-import { filterPointCategory } from '@views/teaching-manage/unit-test'
|
|
|
-import { api_uploadFile } from '@/plugins/uploadFile'
|
|
|
+import {sysApplicationPage} from '@views/menu-manage/api'
|
|
|
+import {filterPointCategory} from '@views/teaching-manage/unit-test'
|
|
|
import MusicCreateImg from './music-create-img'
|
|
|
|
|
|
/**
|
|
@@ -475,7 +474,7 @@ export default defineComponent({
|
|
|
const xmlParse = new DOMParser().parseFromString(xml, 'text/xml')
|
|
|
const partList =
|
|
|
xmlParse.getElementsByTagName('part-list')?.[0]?.getElementsByTagName('score-part') || []
|
|
|
- const partListNames = Array.from(partList).map((item) => {
|
|
|
+ let partListNames = Array.from(partList).map((item) => {
|
|
|
const part = item.getElementsByTagName('part-name')?.[0].textContent || ''
|
|
|
return {
|
|
|
value: part,
|
|
@@ -483,6 +482,10 @@ export default defineComponent({
|
|
|
}
|
|
|
})
|
|
|
|
|
|
+ partListNames = partListNames.filter(
|
|
|
+ (n: any) => n.value?.toLocaleUpperCase?.() != 'COMMON'
|
|
|
+ )
|
|
|
+
|
|
|
if (partListNames.length > 0) {
|
|
|
forms.musicSheetSoundList = forms.musicSheetSoundList.slice(0, partListNames.length)
|
|
|
}
|
|
@@ -496,41 +499,15 @@ export default defineComponent({
|
|
|
forms.playSpeed = 100
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- // 乐器
|
|
|
- const instrumentCodeList: any = []
|
|
|
- const instrumentEle = xmlParse.getElementsByTagName('virtual-instrument')
|
|
|
- for (let index = 0; index < instrumentEle.length; index++) {
|
|
|
- const note = instrumentEle[index]
|
|
|
- const instrumentCode = note.getElementsByTagName('virtual-name')?.[0]?.textContent || ''
|
|
|
- if (instrumentCode && !instrumentCodeList.includes(instrumentCode)) {
|
|
|
- instrumentCodeList.push(instrumentCode)
|
|
|
- }
|
|
|
- }
|
|
|
- const codeIdMap = new Map<string, string>()
|
|
|
- state.instrumentData.forEach((data: any) => {
|
|
|
- codeIdMap.set(data.code, data.id + '')
|
|
|
- })
|
|
|
- forms.musicalInstrumentIdList = []
|
|
|
- instrumentCodeList.forEach((code: string) => {
|
|
|
- if (codeIdMap.has(code)) {
|
|
|
- forms.musicalInstrumentIdList.push(codeIdMap.get(code))
|
|
|
- }
|
|
|
- })
|
|
|
-
|
|
|
- // 声部
|
|
|
- if (forms.musicalInstrumentIdList.length > 0) {
|
|
|
- showBackSubject(forms.musicalInstrumentIdList)
|
|
|
- }
|
|
|
return partListNames
|
|
|
}
|
|
|
|
|
|
// 判断选择的音轨是否在选中
|
|
|
const initPartsListStatus = (track: string): any => {
|
|
|
- const _names = state.partListNames.filter(
|
|
|
- (n: any) => n.value?.toLocaleUpperCase?.() != 'COMMON'
|
|
|
- )
|
|
|
- const partListNames = deepClone(_names) || []
|
|
|
+ // const _names = state.partListNames.filter(
|
|
|
+ // (n: any) => n.value?.toLocaleUpperCase?.() != 'COMMON'
|
|
|
+ // )
|
|
|
+ const partListNames = deepClone(state.partListNames) || []
|
|
|
partListNames.forEach((item: any) => {
|
|
|
const index = forms.musicSheetSoundList.findIndex((ground: any) => item.value == ground.track)
|
|
|
if (index > -1 && track == item.value) {
|
|
@@ -538,11 +515,6 @@ export default defineComponent({
|
|
|
} else {
|
|
|
item.disabled = true
|
|
|
}
|
|
|
- // if (index > -1 && track != item.value) {
|
|
|
- // item.disabled = true
|
|
|
- // } else {
|
|
|
- // item.disabled = false
|
|
|
- // }
|
|
|
})
|
|
|
return partListNames || []
|
|
|
}
|
|
@@ -691,11 +663,6 @@ export default defineComponent({
|
|
|
const detail = props.data
|
|
|
try {
|
|
|
const { data } = await musicSheetDetail({ id: detail.id })
|
|
|
- forms.audioType = data.audioType
|
|
|
- forms.musicSheetAccompanimentList = data.musicSheetAccompanimentList
|
|
|
- data.musicSheetAccompanimentList?.forEach((next: any) => {
|
|
|
- state.musicSheetAccompanimentUrlList.push(next.audioFileUrl)
|
|
|
- })
|
|
|
forms.playMode = data.playMode
|
|
|
forms.xmlFileUrl = data.xmlFileUrl
|
|
|
forms.midiUrl = data.midiUrl
|
|
@@ -711,23 +678,38 @@ export default defineComponent({
|
|
|
forms.musicCover = data.musicCover
|
|
|
forms.remark = data.remark
|
|
|
forms.status = data.status
|
|
|
- forms.musicCategoryId = data.musicCategoryId
|
|
|
-
|
|
|
forms.musicSheetType = data.musicSheetType || 'SINGLE'
|
|
|
- forms.evaluationStandard = data.evaluationStandard
|
|
|
- forms.musicalInstrumentIdList = data.musicalInstrumentIds.split(',') || []
|
|
|
-
|
|
|
- forms.subjectIds = data.subjectIds?.split(',') || []
|
|
|
forms.sourceType = data.sourceType
|
|
|
- forms.musicSheetExtend = data.musicSheetExtend
|
|
|
- forms.repeatedBeats = data.isPlayBeat
|
|
|
-
|
|
|
-
|
|
|
+ forms.appAuditFlag = data.appAuditFlag ? 1 : 0
|
|
|
+ forms.midiFileUrl = data.midiFileUrl
|
|
|
+ forms.subjectIds = []
|
|
|
+ if (data.subjectIds) {
|
|
|
+ const subjectIds = data.subjectIds.split(',') || []
|
|
|
+ subjectIds.forEach((subjectId: any) => {
|
|
|
+ if (!forms.subjectIds.includes(subjectId)) {
|
|
|
+ forms.subjectIds.push(subjectId)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ forms.musicalInstrumentIdList = data.musicalInstrumentIds.split(',') || []
|
|
|
+ forms.musicCategoryId = data.musicCategoryId
|
|
|
+ data.musicSheetAccompanimentList?.forEach((next: any) => {
|
|
|
+ state.musicSheetAccompanimentUrlList.push(next.audioFileUrl)
|
|
|
+ })
|
|
|
+ forms.musicSheetAccompanimentList = data.musicSheetAccompanimentList
|
|
|
+ forms.audioType = data.audioType
|
|
|
+ forms.isPlayBeat = data.isPlayBeat
|
|
|
+ forms.isUseSystemBeat = data.isUseSystemBeat
|
|
|
// 获取渐变 和 是否多声部
|
|
|
try {
|
|
|
const extConfigJson = data.extConfigJson ? JSON.parse(data.extConfigJson) : {}
|
|
|
forms.graduals = extConfigJson.gradualTimes || {}
|
|
|
+ forms.repeatedBeats = !!extConfigJson.repeatedBeats
|
|
|
+
|
|
|
} catch (error) {}
|
|
|
+ forms.evaluationStandard = data.evaluationStandard
|
|
|
+ forms.musicSheetExtend = data.musicSheetExtend
|
|
|
+
|
|
|
setOwnerName()
|
|
|
axios.get(data.xmlFileUrl).then((res: any) => {
|
|
|
if (res?.data) {
|
|
@@ -737,10 +719,23 @@ export default defineComponent({
|
|
|
state.partListNames = getPartListNames(res?.data as any) as any
|
|
|
|
|
|
// 初始化音轨和原音
|
|
|
- forms.musicSheetSoundList = data.musicSheetSoundList || []
|
|
|
- forms.musicSheetSoundList.forEach((next: any) => {
|
|
|
- forms.multiTracksSelection.push(next.track)
|
|
|
+ forms.multiTracksSelection = data.multiTracksSelection?.split(',')||[]
|
|
|
+
|
|
|
+ const existSoundList = data.musicSheetSoundList || [];
|
|
|
+ state.partListNames.forEach((item: any) => {
|
|
|
+ let audioFileUrl;
|
|
|
+ existSoundList.forEach((next: any) => {
|
|
|
+ if(next.track == item.value){
|
|
|
+ audioFileUrl = next.audioFileUrl
|
|
|
+ }
|
|
|
+ })
|
|
|
+ forms.musicSheetSoundList.push({
|
|
|
+ audioFileUrl: audioFileUrl, // 原音
|
|
|
+ track: item.value, // 轨道
|
|
|
+ })
|
|
|
})
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
})
|
|
|
} catch (error) {}
|
|
@@ -785,7 +780,7 @@ export default defineComponent({
|
|
|
<NInput
|
|
|
v-model:value={forms.name}
|
|
|
placeholder="请输入曲目名称"
|
|
|
- maxlength={25}
|
|
|
+ maxlength={50}
|
|
|
showCount
|
|
|
/>
|
|
|
</NFormItemGi>
|
|
@@ -825,7 +820,8 @@ export default defineComponent({
|
|
|
rule={[
|
|
|
{
|
|
|
required: true,
|
|
|
- message: '请上传曲目封面'
|
|
|
+ message: '请上传曲目封面',
|
|
|
+ trigger:['input','blur']
|
|
|
}
|
|
|
]}
|
|
|
>
|
|
@@ -857,7 +853,8 @@ export default defineComponent({
|
|
|
rule={[
|
|
|
{
|
|
|
required: true,
|
|
|
- message: '请选择曲目类型'
|
|
|
+ message: '请选择曲目类型',
|
|
|
+ trigger:'change'
|
|
|
}
|
|
|
]}
|
|
|
>
|
|
@@ -874,7 +871,8 @@ export default defineComponent({
|
|
|
rule={[
|
|
|
{
|
|
|
required: true,
|
|
|
- message: '请选择作者属性'
|
|
|
+ message: '请选择作者属性',
|
|
|
+ trigger:'change'
|
|
|
}
|
|
|
]}
|
|
|
>
|
|
@@ -902,7 +900,8 @@ export default defineComponent({
|
|
|
rule={[
|
|
|
{
|
|
|
required: true,
|
|
|
- message: '请选择曲目所属人'
|
|
|
+ message: '请选择曲目所属人',
|
|
|
+ trigger:['input','change']
|
|
|
}
|
|
|
]}
|
|
|
>
|
|
@@ -927,7 +926,8 @@ export default defineComponent({
|
|
|
rule={[
|
|
|
{
|
|
|
required: true,
|
|
|
- message: '请选择曲目所属机构'
|
|
|
+ message: '请选择曲目所属机构',
|
|
|
+ trigger:['input','change']
|
|
|
}
|
|
|
]}
|
|
|
>
|
|
@@ -969,7 +969,9 @@ export default defineComponent({
|
|
|
rule={[
|
|
|
{
|
|
|
required: true,
|
|
|
- message: '请选择曲目所属人'
|
|
|
+ message: '请选择审核版本',
|
|
|
+ trigger:'change',
|
|
|
+ type:'number'
|
|
|
}
|
|
|
]}
|
|
|
>
|
|
@@ -994,7 +996,7 @@ export default defineComponent({
|
|
|
{
|
|
|
required: true,
|
|
|
message: '请选择曲目分类',
|
|
|
- trigger: ['input', 'blur']
|
|
|
+ trigger: ['change']
|
|
|
}
|
|
|
]}
|
|
|
>
|
|
@@ -1223,7 +1225,9 @@ export default defineComponent({
|
|
|
rule={[
|
|
|
{
|
|
|
required: true,
|
|
|
- message: '请选择可用乐器'
|
|
|
+ message: '请选择可用乐器',
|
|
|
+ trigger: 'change',
|
|
|
+ type: 'array'
|
|
|
}
|
|
|
]}
|
|
|
>
|
|
@@ -1248,7 +1252,9 @@ export default defineComponent({
|
|
|
required: true,
|
|
|
message: `请选择${
|
|
|
forms.musicSheetType === 'SINGLE' ? '页面渲染声轨' : '用户可切换声轨'
|
|
|
- }`
|
|
|
+ }`,
|
|
|
+ trigger:'change',
|
|
|
+ type:'array'
|
|
|
}
|
|
|
]}
|
|
|
>
|
|
@@ -1309,7 +1315,7 @@ export default defineComponent({
|
|
|
{forms.isPlayBeat && (
|
|
|
<NFormItemGi
|
|
|
label="播放方式"
|
|
|
- path="audioType"
|
|
|
+ path="isUseSystemBeat"
|
|
|
rule={[
|
|
|
{
|
|
|
required: true,
|
|
@@ -1352,7 +1358,7 @@ export default defineComponent({
|
|
|
<UploadFile
|
|
|
desc={'原音文件'}
|
|
|
disabled={state.previewMode}
|
|
|
- size={10}
|
|
|
+ size={100}
|
|
|
v-model:fileList={item.audioFileUrl}
|
|
|
tips="仅支持上传.mp3格式文件"
|
|
|
listType="image"
|
|
@@ -1383,19 +1389,6 @@ export default defineComponent({
|
|
|
)}
|
|
|
</>
|
|
|
))}
|
|
|
-
|
|
|
- <NButton
|
|
|
- type="primary"
|
|
|
- dashed
|
|
|
- block
|
|
|
- disabled={state.partListNames.length <= forms.musicSheetSoundList.length}
|
|
|
- style={{
|
|
|
- marginBottom: '24px'
|
|
|
- }}
|
|
|
- onClick={createSys}
|
|
|
- >
|
|
|
- 添加原音
|
|
|
- </NButton>
|
|
|
</>
|
|
|
)}
|
|
|
</NForm>
|