|
@@ -1,4 +1,4 @@
|
|
|
-import type {SelectOption} from 'naive-ui'
|
|
|
+import type { SelectOption } from 'naive-ui'
|
|
|
import {
|
|
|
NAlert,
|
|
|
NButton,
|
|
@@ -16,22 +16,25 @@ import {
|
|
|
NRadioGroup,
|
|
|
NSelect,
|
|
|
NSpace,
|
|
|
+ NSpin,
|
|
|
useDialog,
|
|
|
useMessage
|
|
|
} from 'naive-ui'
|
|
|
-import {defineComponent, onMounted, PropType, reactive, ref} from 'vue'
|
|
|
-import {musicSheetCategoriesQueryTree, musicSheetDetail, musicSheetSave} from '../../api'
|
|
|
+import { defineComponent, onMounted, onUnmounted, 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 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 { 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 MusicCreateImg from './music-create-img'
|
|
|
|
|
|
/**
|
|
|
* 获取指定元素下一个Note元素
|
|
@@ -59,7 +62,7 @@ export const onlyVisible = (xml: any, partIndex: any) => {
|
|
|
if (!xml) return ''
|
|
|
const xmlParse = new DOMParser().parseFromString(xml, 'text/xml')
|
|
|
const partList =
|
|
|
- xmlParse.getElementsByTagName('part-list')?.[0]?.getElementsByTagName('score-part') || []
|
|
|
+ xmlParse.getElementsByTagName('part-list')?.[0]?.getElementsByTagName('score-part') || []
|
|
|
const parts = xmlParse.getElementsByTagName('part')
|
|
|
const visiblePartInfo = partList[partIndex]
|
|
|
if (visiblePartInfo) {
|
|
@@ -157,8 +160,8 @@ export function getGradualLengthByXml(xml: string) {
|
|
|
const measureNotes = Array.from(measure.querySelectorAll('note'))
|
|
|
|
|
|
const noteInMeasureIndex = Array.from(measure.childNodes)
|
|
|
- .filter((item: any) => item.nodeName === 'note')
|
|
|
- .findIndex((item) => item === note)
|
|
|
+ .filter((item: any) => item.nodeName === 'note')
|
|
|
+ .findIndex((item) => item === note)
|
|
|
|
|
|
let allDuration = 0
|
|
|
let leftDuration = 0
|
|
@@ -212,9 +215,9 @@ export function getGradualLengthByXml(xml: string) {
|
|
|
return textContent && ks.includes(textContent)
|
|
|
})
|
|
|
if (
|
|
|
- ele.type === 'metronome' ||
|
|
|
- (ele.type === 'words' && (textContent.startsWith('a tempo') || isKeyWork)) ||
|
|
|
- isLastNoteAndNotClosed
|
|
|
+ ele.type === 'metronome' ||
|
|
|
+ (ele.type === 'words' && (textContent.startsWith('a tempo') || isKeyWork)) ||
|
|
|
+ isLastNoteAndNotClosed
|
|
|
) {
|
|
|
const indexOf = gradualNotes.findIndex((item) => item.length === 1)
|
|
|
if (indexOf > -1 && ele.index > gradualNotes[indexOf]?.[0].start) {
|
|
@@ -253,8 +256,7 @@ export default defineComponent({
|
|
|
},
|
|
|
data: {
|
|
|
type: Object as PropType<any>,
|
|
|
- default: () => {
|
|
|
- }
|
|
|
+ default: () => {}
|
|
|
},
|
|
|
tagList: {
|
|
|
type: Array as PropType<Array<SelectOption>>,
|
|
@@ -263,7 +265,7 @@ export default defineComponent({
|
|
|
subjectList: {
|
|
|
type: Array as PropType<Array<SelectOption>>,
|
|
|
default: () => []
|
|
|
- },
|
|
|
+ }
|
|
|
// musicSheetCategories: {
|
|
|
// type: Array as PropType<Array<SelectOption>>,
|
|
|
// default: () => []
|
|
@@ -271,7 +273,7 @@ export default defineComponent({
|
|
|
},
|
|
|
emits: ['close', 'getList'],
|
|
|
|
|
|
- setup(props, {slots, attrs, emit}) {
|
|
|
+ setup(props, { slots, attrs, emit }) {
|
|
|
const forms = reactive({
|
|
|
graduals: {} as any, // 渐变速度
|
|
|
playMode: 'MP3', // 播放类型
|
|
@@ -297,20 +299,23 @@ export default defineComponent({
|
|
|
appAuditFlag: 0, // 是否审核版本
|
|
|
midiFileUrl: null, // 伴奏文件 MIDI文件(保留字段)
|
|
|
subjectIds: [] as any, // 可用声部
|
|
|
- musicalInstrumentIdList: [] as any, //可用乐器
|
|
|
- musicCategoryId: null, //曲目分类
|
|
|
- musicSheetAccompanimentList: [] as any, //曲目伴奏
|
|
|
+ musicalInstrumentIdList: [] as any, //可用乐器
|
|
|
+ musicCategoryId: null, //曲目分类
|
|
|
+ musicSheetAccompanimentList: [] as any, //曲目伴奏
|
|
|
audioType: 'HOMEMODE', // 伴奏类型
|
|
|
isPlayBeat: true, // 是否播放节拍器
|
|
|
isUseSystemBeat: true, // 是否使用系统节拍器(0:否;1:是)
|
|
|
repeatedBeats: false, // 是否重复节拍时长
|
|
|
evaluationStandard: 'FREQUENCY', // 评分标准 节奏 AMPLITUDE 音准 FREQUENCY 分贝 DECIBELS
|
|
|
multiTracksSelection: [] as any, // 声轨
|
|
|
- musicSheetExtend: {} as any,//所属人信息
|
|
|
+ musicSheetExtend: {} as any, //所属人信息
|
|
|
+ musicImg: '', // 五线谱图片
|
|
|
+ musicSvg: '', //首调图片
|
|
|
+ musicJianSvg: '' // 简谱固定调
|
|
|
})
|
|
|
const state = reactive({
|
|
|
loading: false,
|
|
|
- previewMode: false,//是否是预览模式
|
|
|
+ previewMode: false, //是否是预览模式
|
|
|
tagList: [...props.tagList] as any, // 标签列表
|
|
|
xmlFirstSpeed: null as any, // 第一个音轨速度
|
|
|
partListNames: [] as any, // 所有音轨声部列表
|
|
@@ -323,8 +328,13 @@ export default defineComponent({
|
|
|
showMusicSheetOwnerDialog: false, //所属人弹框
|
|
|
// musicSheetOwnerData: {}, //所属人信息
|
|
|
multiTracks: null,
|
|
|
- appData: [],// 应用列表
|
|
|
- ownerName: null as any,// 所属人名称描述
|
|
|
+ appData: [], // 应用列表
|
|
|
+ ownerName: null as any, // 所属人名称描述
|
|
|
+
|
|
|
+ productOpen: false, // 是否打开自动生成图片
|
|
|
+ productItem: {} as any,
|
|
|
+ productIfameSrc: '',
|
|
|
+ isAutoSave: false // 是否自动保存
|
|
|
})
|
|
|
const gradualData = reactive({
|
|
|
list: [] as any[],
|
|
@@ -342,6 +352,11 @@ export default defineComponent({
|
|
|
if (error) {
|
|
|
return
|
|
|
}
|
|
|
+ if (!state.isAutoSave) {
|
|
|
+ state.isAutoSave = true
|
|
|
+ state.productOpen = true
|
|
|
+ return
|
|
|
+ }
|
|
|
try {
|
|
|
//extConfigJson: {"repeatedBeats":0,"gradualTimes":{"75":"02:38:60","77":"02:43:39"}}
|
|
|
const obj = {
|
|
@@ -349,10 +364,13 @@ export default defineComponent({
|
|
|
musicTag: '-1',
|
|
|
multiTracksSelection: forms.multiTracksSelection.join(','),
|
|
|
musicSheetSoundList: forms.musicSheetSoundList.filter((next: any) => {
|
|
|
- return !!next.audioFileUrl && forms.multiTracksSelection.includes(next.track);
|
|
|
+ return !!next.audioFileUrl && forms.multiTracksSelection.includes(next.track)
|
|
|
}),
|
|
|
musicalInstrumentIds: forms.musicalInstrumentIdList.join(','),
|
|
|
- extConfigJson: JSON.stringify({repeatedBeats: forms.repeatedBeats ? 1 : 0, gradualTimes: forms.graduals}),
|
|
|
+ extConfigJson: JSON.stringify({
|
|
|
+ repeatedBeats: forms.repeatedBeats ? 1 : 0,
|
|
|
+ gradualTimes: forms.graduals
|
|
|
+ }),
|
|
|
subjectIds: forms.subjectIds.join(',')
|
|
|
}
|
|
|
if (forms.audioType == 'MIDI') {
|
|
@@ -363,7 +381,7 @@ export default defineComponent({
|
|
|
await musicSheetSave(obj)
|
|
|
message.success('添加成功')
|
|
|
} else if (props.type === 'edit') {
|
|
|
- await musicSheetSave({...obj, id: props.data.id})
|
|
|
+ await musicSheetSave({ ...obj, id: props.data.id })
|
|
|
message.success('修改成功')
|
|
|
}
|
|
|
emit('getList')
|
|
@@ -383,21 +401,24 @@ export default defineComponent({
|
|
|
xmlRead.onload = (res) => {
|
|
|
try {
|
|
|
gradualData.list = getGradualLengthByXml(res?.target?.result as any).filter(
|
|
|
- (item: any) => item.length === 2
|
|
|
+ (item: any) => item.length === 2
|
|
|
)
|
|
|
- } catch (error) {
|
|
|
- }
|
|
|
+ } catch (error) {}
|
|
|
state.partListNames = getPartListNames(res?.target?.result as any) as any
|
|
|
// 这里是如果没有当前音轨就重新写
|
|
|
for (let j = 0; j < state.partListNames.length; j++) {
|
|
|
if (!forms.musicSheetSoundList[j]) {
|
|
|
- forms.musicSheetSoundList.push({audioFileUrl: null, track: null})
|
|
|
+ forms.musicSheetSoundList.push({ audioFileUrl: null, track: null })
|
|
|
}
|
|
|
forms.musicSheetSoundList[j].track = state.partListNames[j].value
|
|
|
}
|
|
|
|
|
|
// 循环添加所在音轨的原音
|
|
|
- for (let index = forms.musicSheetSoundList.length; index < state.partListNames.length; index++) {
|
|
|
+ for (
|
|
|
+ let index = forms.musicSheetSoundList.length;
|
|
|
+ index < state.partListNames.length;
|
|
|
+ index++
|
|
|
+ ) {
|
|
|
const part = state.partListNames[index].value
|
|
|
const sysData = {
|
|
|
...forms.musicSheetSoundList[0],
|
|
@@ -410,10 +431,8 @@ export default defineComponent({
|
|
|
}
|
|
|
|
|
|
if (forms.musicSheetSoundList.length == 0) {
|
|
|
- forms.musicSheetSoundList.push({audioFileUrl: '', track: ''})
|
|
|
+ forms.musicSheetSoundList.push({ audioFileUrl: '', track: '' })
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
xmlRead.readAsText(file)
|
|
|
}
|
|
@@ -423,7 +442,7 @@ export default defineComponent({
|
|
|
if (!xml) return []
|
|
|
const xmlParse = new DOMParser().parseFromString(xml, 'text/xml')
|
|
|
const partList =
|
|
|
- xmlParse.getElementsByTagName('part-list')?.[0]?.getElementsByTagName('score-part') || []
|
|
|
+ xmlParse.getElementsByTagName('part-list')?.[0]?.getElementsByTagName('score-part') || []
|
|
|
const partListNames = Array.from(partList).map((item) => {
|
|
|
const part = item.getElementsByTagName('part-name')?.[0].textContent || ''
|
|
|
return {
|
|
@@ -447,39 +466,43 @@ export default defineComponent({
|
|
|
}
|
|
|
|
|
|
// 乐器
|
|
|
- const instrumentCodeList: any = [];
|
|
|
- const instrumentEle = xmlParse.getElementsByTagName('virtual-instrument');
|
|
|
+ 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 || '';
|
|
|
+ const instrumentCode = note.getElementsByTagName('virtual-name')?.[0]?.textContent || ''
|
|
|
if (instrumentCode && !instrumentCodeList.includes(instrumentCode)) {
|
|
|
- instrumentCodeList.push(instrumentCode);
|
|
|
+ instrumentCodeList.push(instrumentCode)
|
|
|
}
|
|
|
}
|
|
|
- const codeIdMap = new Map<string, string>();
|
|
|
+ const codeIdMap = new Map<string, string>()
|
|
|
state.instrumentData.forEach((data: any) => {
|
|
|
- codeIdMap.set(data.code, data.id + '');
|
|
|
+ codeIdMap.set(data.code, data.id + '')
|
|
|
})
|
|
|
- forms.musicalInstrumentIdList = [];
|
|
|
+ forms.musicalInstrumentIdList = []
|
|
|
instrumentCodeList.forEach((code: string) => {
|
|
|
if (codeIdMap.has(code)) {
|
|
|
- forms.musicalInstrumentIdList.push(codeIdMap.get(code));
|
|
|
+ forms.musicalInstrumentIdList.push(codeIdMap.get(code))
|
|
|
}
|
|
|
})
|
|
|
|
|
|
// 声部
|
|
|
if (forms.musicalInstrumentIdList.length > 0) {
|
|
|
- showBackSubject(forms.musicalInstrumentIdList);
|
|
|
+ showBackSubject(forms.musicalInstrumentIdList)
|
|
|
}
|
|
|
return partListNames
|
|
|
}
|
|
|
|
|
|
// 判断选择的音轨是否在选中
|
|
|
const initPartsListStatus = (track: string): any => {
|
|
|
- const _names = state.partListNames.filter((n: any) => n.value?.toLocaleUpperCase?.() != 'COMMON')
|
|
|
+ const _names = state.partListNames.filter(
|
|
|
+ (n: any) => n.value?.toLocaleUpperCase?.() != 'COMMON'
|
|
|
+ )
|
|
|
const partListNames = deepClone(_names) || []
|
|
|
partListNames.forEach((item: any) => {
|
|
|
- const index = forms.musicSheetSoundList.findIndex((ground: any) => item.value == ground.track)
|
|
|
+ const index = forms.musicSheetSoundList.findIndex(
|
|
|
+ (ground: any) => item.value == ground.track
|
|
|
+ )
|
|
|
if (index > -1 && track != item.value) {
|
|
|
item.disabled = true
|
|
|
} else {
|
|
@@ -492,13 +515,16 @@ export default defineComponent({
|
|
|
// 反显声部
|
|
|
const showBackSubject = async (musicalInstrumentIdList: []) => {
|
|
|
try {
|
|
|
- const {data} = await subjectPage({page: 1, rows: 999, musicalInstrumentIdList: musicalInstrumentIdList})
|
|
|
+ const { data } = await subjectPage({
|
|
|
+ page: 1,
|
|
|
+ rows: 999,
|
|
|
+ musicalInstrumentIdList: musicalInstrumentIdList
|
|
|
+ })
|
|
|
const tempList = data.rows || []
|
|
|
tempList.forEach((item: any) => {
|
|
|
forms.subjectIds.push(item.id + '')
|
|
|
})
|
|
|
- } catch {
|
|
|
- }
|
|
|
+ } catch {}
|
|
|
}
|
|
|
|
|
|
// 添加原音
|
|
@@ -524,7 +550,7 @@ export default defineComponent({
|
|
|
|
|
|
const checkMultiTracks = (value: string) => {
|
|
|
if (!value) {
|
|
|
- return;
|
|
|
+ return
|
|
|
}
|
|
|
if (value === 'all') {
|
|
|
forms.multiTracksSelection = []
|
|
@@ -533,7 +559,7 @@ export default defineComponent({
|
|
|
})
|
|
|
} else if (value === 'invert') {
|
|
|
state.partListNames.forEach((next: any) => {
|
|
|
- const indexOf = forms.multiTracksSelection.indexOf(next.value);
|
|
|
+ const indexOf = forms.multiTracksSelection.indexOf(next.value)
|
|
|
if (indexOf > -1) {
|
|
|
forms.multiTracksSelection.splice(indexOf, 1)
|
|
|
} else {
|
|
@@ -545,26 +571,27 @@ export default defineComponent({
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- const setOwnerName = (() => {
|
|
|
+ const setOwnerName = () => {
|
|
|
if (forms.sourceType == 'PLATFORM') {
|
|
|
state.ownerName = ''
|
|
|
- return;
|
|
|
+ return
|
|
|
}
|
|
|
if (!forms.musicSheetExtend || !forms.sourceType || !forms.musicSheetExtend?.userId) {
|
|
|
- return;
|
|
|
+ return
|
|
|
}
|
|
|
- const appId = forms.musicSheetExtend.applicationId;
|
|
|
+ const appId = forms.musicSheetExtend.applicationId
|
|
|
const app = state.appData.filter((next: any) => {
|
|
|
return next.id == appId
|
|
|
- }) as any;
|
|
|
+ }) as any
|
|
|
if (app.length > 0) {
|
|
|
state.ownerName = app[0].appName
|
|
|
}
|
|
|
if (forms.sourceType == 'ORG') {
|
|
|
state.ownerName += '-' + forms.musicSheetExtend.organizationRole
|
|
|
-
|
|
|
} else if (forms.sourceType == 'PERSON') {
|
|
|
- state.ownerName += '-' + getMapValueByKey(forms.musicSheetExtend.clientType, new Map(Object.entries(clientType)))
|
|
|
+ state.ownerName +=
|
|
|
+ '-' +
|
|
|
+ getMapValueByKey(forms.musicSheetExtend.clientType, new Map(Object.entries(clientType)))
|
|
|
if (forms.musicSheetExtend.userName) {
|
|
|
state.ownerName += '-' + forms.musicSheetExtend.userName
|
|
|
}
|
|
@@ -572,7 +599,7 @@ export default defineComponent({
|
|
|
state.ownerName += '(' + forms.musicSheetExtend.phone + ')'
|
|
|
}
|
|
|
}
|
|
|
- })
|
|
|
+ }
|
|
|
|
|
|
onMounted(async () => {
|
|
|
state.loading = true
|
|
@@ -585,7 +612,7 @@ export default defineComponent({
|
|
|
return
|
|
|
}
|
|
|
try {
|
|
|
- const {data} = await musicalInstrumentPage({page: 1, rows: 999})
|
|
|
+ const { data } = await musicalInstrumentPage({ page: 1, rows: 999 })
|
|
|
const tempList = data.rows || []
|
|
|
state.instrumentData = tempList
|
|
|
tempList.forEach((item: any) => {
|
|
@@ -594,8 +621,7 @@ export default defineComponent({
|
|
|
item.disabled = !item.enableFlag
|
|
|
})
|
|
|
state.instrumentList = tempList
|
|
|
- } catch {
|
|
|
- }
|
|
|
+ } catch {}
|
|
|
}
|
|
|
state.subjectList = deepClone(props.subjectList)
|
|
|
state.subjectList.forEach((subject: any) => {
|
|
@@ -604,13 +630,13 @@ export default defineComponent({
|
|
|
|
|
|
// 初始化应用
|
|
|
{
|
|
|
- const appKeys = Object.keys(appKey);
|
|
|
+ const appKeys = Object.keys(appKey)
|
|
|
|
|
|
- const {data} = await sysApplicationPage({page: 1, rows: 999, parentId: 0})
|
|
|
+ const { data } = await sysApplicationPage({ page: 1, rows: 999, parentId: 0 })
|
|
|
const tempList = data.rows || []
|
|
|
const filter = tempList.filter((next: any) => {
|
|
|
return appKeys.includes(next.appKey)
|
|
|
- });
|
|
|
+ })
|
|
|
filter.forEach((item: any) => {
|
|
|
item.label = item.appName
|
|
|
item.value = item.id
|
|
@@ -621,20 +647,19 @@ export default defineComponent({
|
|
|
// 获取分类信息
|
|
|
{
|
|
|
try {
|
|
|
- const {data} = await musicSheetCategoriesQueryTree({enable: true})
|
|
|
+ const { data } = await musicSheetCategoriesQueryTree({ enable: true })
|
|
|
state.musicSheetCategories = filterPointCategory(data, 'musicSheetCategoriesList')
|
|
|
- } catch (e) {
|
|
|
- }
|
|
|
+ } catch (e) {}
|
|
|
}
|
|
|
|
|
|
if (props.type === 'edit' || props.type === 'preview') {
|
|
|
const detail = props.data
|
|
|
try {
|
|
|
- const {data} = await musicSheetDetail({id: detail.id})
|
|
|
+ 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);
|
|
|
+ state.musicSheetAccompanimentUrlList.push(next.audioFileUrl)
|
|
|
})
|
|
|
forms.playMode = data.playMode
|
|
|
forms.xmlFileUrl = data.xmlFileUrl
|
|
@@ -653,7 +678,7 @@ export default defineComponent({
|
|
|
forms.status = data.status
|
|
|
forms.musicCategoryId = data.musicCategoryId
|
|
|
|
|
|
- forms.musicSheetType = data.musicSheetType || "SINGLE"
|
|
|
+ forms.musicSheetType = data.musicSheetType || 'SINGLE'
|
|
|
forms.evaluationStandard = data.evaluationStandard
|
|
|
forms.musicalInstrumentIdList = data.musicalInstrumentIds.split(',') || []
|
|
|
|
|
@@ -671,13 +696,12 @@ export default defineComponent({
|
|
|
try {
|
|
|
const extConfigJson = data.extConfigJson ? JSON.parse(data.extConfigJson) : {}
|
|
|
forms.graduals = extConfigJson.gradualTimes || {}
|
|
|
- } catch (error) {
|
|
|
- }
|
|
|
+ } catch (error) {}
|
|
|
setOwnerName()
|
|
|
axios.get(data.xmlFileUrl).then((res: any) => {
|
|
|
if (res?.data) {
|
|
|
gradualData.list = getGradualLengthByXml(res?.data as any).filter(
|
|
|
- (item: any) => item.length === 2
|
|
|
+ (item: any) => item.length === 2
|
|
|
)
|
|
|
// state.partListNames = getPartListNames(res?.data as any) as any
|
|
|
//
|
|
@@ -689,9 +713,7 @@ export default defineComponent({
|
|
|
// })
|
|
|
}
|
|
|
})
|
|
|
-
|
|
|
- } catch (error) {
|
|
|
- }
|
|
|
+ } catch (error) {}
|
|
|
} else {
|
|
|
// 新增只能使用启用状态的数据
|
|
|
state.subjectList = state.subjectList.filter((next: any) => {
|
|
@@ -702,664 +724,723 @@ export default defineComponent({
|
|
|
})
|
|
|
}
|
|
|
state.loading = false
|
|
|
-
|
|
|
})
|
|
|
|
|
|
return () => (
|
|
|
- <div style="background: #fff; padding-top: 12px">
|
|
|
+ <div style="background: #fff; padding-top: 12px">
|
|
|
+ <NSpin show={state.loading}>
|
|
|
<NForm
|
|
|
- class={styles.formContainer}
|
|
|
- model={forms}
|
|
|
- ref={formsRef}
|
|
|
- label-placement="left"
|
|
|
- label-width="130"
|
|
|
- disabled={state.previewMode}
|
|
|
+ class={styles.formContainer}
|
|
|
+ model={forms}
|
|
|
+ ref={formsRef}
|
|
|
+ label-placement="left"
|
|
|
+ label-width="130"
|
|
|
+ disabled={state.previewMode}
|
|
|
>
|
|
|
- <NAlert showIcon={false} style={{marginBottom: "12px"}}>曲目信息</NAlert>
|
|
|
+ <NAlert showIcon={false} style={{ marginBottom: '12px' }}>
|
|
|
+ 曲目信息
|
|
|
+ </NAlert>
|
|
|
<NGrid cols={2}>
|
|
|
<NFormItemGi
|
|
|
- label="曲目名称"
|
|
|
- path="name"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请输入曲目名称'
|
|
|
- }
|
|
|
- ]}
|
|
|
+ label="曲目名称"
|
|
|
+ path="name"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请输入曲目名称'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
>
|
|
|
<NInput
|
|
|
- v-model:value={forms.name}
|
|
|
- placeholder="请输入曲目名称"
|
|
|
- maxlength={25}
|
|
|
- showCount
|
|
|
+ v-model:value={forms.name}
|
|
|
+ placeholder="请输入曲目名称"
|
|
|
+ maxlength={25}
|
|
|
+ showCount
|
|
|
/>
|
|
|
</NFormItemGi>
|
|
|
<NFormItemGi
|
|
|
- label="音乐人"
|
|
|
- path="composer"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请输入音乐人'
|
|
|
- }
|
|
|
- ]}
|
|
|
+ label="音乐人"
|
|
|
+ path="composer"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请输入音乐人'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
>
|
|
|
- <NInput v-model:value={forms.composer}
|
|
|
- placeholder="请输入音乐人名称"
|
|
|
- showCount
|
|
|
- maxlength={14}
|
|
|
+ <NInput
|
|
|
+ v-model:value={forms.composer}
|
|
|
+ placeholder="请输入音乐人名称"
|
|
|
+ showCount
|
|
|
+ maxlength={14}
|
|
|
/>
|
|
|
</NFormItemGi>
|
|
|
</NGrid>
|
|
|
<NGrid cols={2}>
|
|
|
<NFormItemGi label="曲目描述" path="remark">
|
|
|
<NInput
|
|
|
- placeholder="请输入曲目描述"
|
|
|
- type="textarea"
|
|
|
- rows={4}
|
|
|
- showCount
|
|
|
- maxlength={200}
|
|
|
- v-model:value={forms.remark}
|
|
|
+ placeholder="请输入曲目描述"
|
|
|
+ type="textarea"
|
|
|
+ rows={4}
|
|
|
+ showCount
|
|
|
+ maxlength={200}
|
|
|
+ v-model:value={forms.remark}
|
|
|
/>
|
|
|
</NFormItemGi>
|
|
|
- <NFormItemGi label="曲目封面" path="musicCover"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: "请上传曲目封面"
|
|
|
- }
|
|
|
- ]}>
|
|
|
+ <NFormItemGi
|
|
|
+ label="曲目封面"
|
|
|
+ path="musicCover"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请上传曲目封面'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
<UploadFile
|
|
|
- desc={'封面图'}
|
|
|
- disabled={state.previewMode}
|
|
|
- accept=".jpg,.jpeg,.png"
|
|
|
- tips="请上传大小1M以内的JPG、PNG图片"
|
|
|
- size={1}
|
|
|
- v-model:fileList={forms.musicCover}
|
|
|
- cropper
|
|
|
- bucketName="cbs"
|
|
|
- options={{
|
|
|
- autoCrop: true, //是否默认生成截图框
|
|
|
- enlarge: 2, // 图片放大倍数
|
|
|
- autoCropWidth: 200, //默框高度
|
|
|
- fixedBox: true, //是否固定截图框大认生成截图框宽度
|
|
|
- autoCropHeight: 200, //默认生成截图小 不允许改变
|
|
|
- previewsCircle: false, //预览图是否是原圆形
|
|
|
- title: '曲目封面'
|
|
|
- }}
|
|
|
+ desc={'封面图'}
|
|
|
+ disabled={state.previewMode}
|
|
|
+ accept=".jpg,.jpeg,.png"
|
|
|
+ tips="请上传大小1M以内的JPG、PNG图片"
|
|
|
+ size={1}
|
|
|
+ v-model:fileList={forms.musicCover}
|
|
|
+ cropper
|
|
|
+ bucketName="cbs"
|
|
|
+ options={{
|
|
|
+ autoCrop: true, //是否默认生成截图框
|
|
|
+ enlarge: 2, // 图片放大倍数
|
|
|
+ autoCropWidth: 200, //默框高度
|
|
|
+ fixedBox: true, //是否固定截图框大认生成截图框宽度
|
|
|
+ autoCropHeight: 200, //默认生成截图小 不允许改变
|
|
|
+ previewsCircle: false, //预览图是否是原圆形
|
|
|
+ title: '曲目封面'
|
|
|
+ }}
|
|
|
/>
|
|
|
</NFormItemGi>
|
|
|
</NGrid>
|
|
|
<NGrid cols={2}>
|
|
|
<NFormItemGi
|
|
|
- label="曲目类型"
|
|
|
- path="musicSheetType"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请选择曲目类型'
|
|
|
- }
|
|
|
- ]}
|
|
|
+ label="曲目类型"
|
|
|
+ path="musicSheetType"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择曲目类型'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
>
|
|
|
<NSelect
|
|
|
- placeholder="请选择曲目类型"
|
|
|
- v-model:value={forms.musicSheetType}
|
|
|
- options={getSelectDataFromObj(musicSheetType)}
|
|
|
+ placeholder="请选择曲目类型"
|
|
|
+ v-model:value={forms.musicSheetType}
|
|
|
+ options={getSelectDataFromObj(musicSheetType)}
|
|
|
/>
|
|
|
</NFormItemGi>
|
|
|
|
|
|
<NFormItemGi
|
|
|
- label="作者属性"
|
|
|
- path="sourceType"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请选择作者属性'
|
|
|
- }
|
|
|
- ]}
|
|
|
+ label="作者属性"
|
|
|
+ path="sourceType"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择作者属性'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
>
|
|
|
<NSelect
|
|
|
- v-model:value={forms.sourceType}
|
|
|
- options={getSelectDataFromObj(musicSheetSourceType)}
|
|
|
- placeholder="请选择作者属性"
|
|
|
- onUpdateValue={() => {
|
|
|
- // 发送变化,清理选择的所属人信息
|
|
|
- forms.musicSheetExtend = {}
|
|
|
- state.ownerName = null
|
|
|
- // forms.musicSheetExtend.userId = null
|
|
|
- // forms.musicSheetExtend.userName = null
|
|
|
- // forms.musicSheetExtend.applicationId = null
|
|
|
- // forms.musicSheetExtend.organizationRoleId = null
|
|
|
- }}
|
|
|
+ v-model:value={forms.sourceType}
|
|
|
+ options={getSelectDataFromObj(musicSheetSourceType)}
|
|
|
+ placeholder="请选择作者属性"
|
|
|
+ onUpdateValue={() => {
|
|
|
+ // 发送变化,清理选择的所属人信息
|
|
|
+ forms.musicSheetExtend = {}
|
|
|
+ state.ownerName = null
|
|
|
+ // forms.musicSheetExtend.userId = null
|
|
|
+ // forms.musicSheetExtend.userName = null
|
|
|
+ // forms.musicSheetExtend.applicationId = null
|
|
|
+ // forms.musicSheetExtend.organizationRoleId = null
|
|
|
+ }}
|
|
|
/>
|
|
|
</NFormItemGi>
|
|
|
-
|
|
|
</NGrid>
|
|
|
<NGrid cols={2}>
|
|
|
{forms.sourceType === 'PERSON' && (
|
|
|
- <NFormItemGi
|
|
|
- label="所属人"
|
|
|
- path="musicSheetExtend.userId"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请选择曲目所属人'
|
|
|
- }
|
|
|
- ]}
|
|
|
+ <NFormItemGi
|
|
|
+ label="所属人"
|
|
|
+ path="musicSheetExtend.userId"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择曲目所属人'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <NButton
|
|
|
+ disabled={state.previewMode || !forms.sourceType}
|
|
|
+ type="primary"
|
|
|
+ size="small"
|
|
|
+ text
|
|
|
+ //v-auth="orchestraSubsidyStandard/update1597887579789053953"
|
|
|
+ onClick={() => {
|
|
|
+ state.showMusicSheetOwnerDialog = true
|
|
|
+ }}
|
|
|
>
|
|
|
- <NButton
|
|
|
- disabled={state.previewMode || !forms.sourceType}
|
|
|
- type="primary"
|
|
|
- size="small"
|
|
|
- text
|
|
|
- //v-auth="orchestraSubsidyStandard/update1597887579789053953"
|
|
|
- onClick={() => {
|
|
|
- state.showMusicSheetOwnerDialog = true
|
|
|
- }}
|
|
|
- >
|
|
|
- {state.ownerName ? state.ownerName : '请选择所属人'}
|
|
|
- </NButton>
|
|
|
- </NFormItemGi>)}
|
|
|
+ {state.ownerName ? state.ownerName : '请选择所属人'}
|
|
|
+ </NButton>
|
|
|
+ </NFormItemGi>
|
|
|
+ )}
|
|
|
{forms.sourceType === 'ORG' && (
|
|
|
- <NFormItemGi
|
|
|
- label="所属人"
|
|
|
- path="musicSheetExtend.organizationRoleId"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请选择曲目所属机构'
|
|
|
- }
|
|
|
- ]}
|
|
|
+ <NFormItemGi
|
|
|
+ label="所属人"
|
|
|
+ path="musicSheetExtend.organizationRoleId"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择曲目所属机构'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <NButton
|
|
|
+ disabled={state.previewMode || !forms.sourceType}
|
|
|
+ type="primary"
|
|
|
+ size="small"
|
|
|
+ text
|
|
|
+ //v-auth="orchestraSubsidyStandard/update1597887579789053953"
|
|
|
+ onClick={() => {
|
|
|
+ state.showMusicSheetOwnerDialog = true
|
|
|
+ }}
|
|
|
>
|
|
|
- <NButton
|
|
|
- disabled={state.previewMode || !forms.sourceType}
|
|
|
- type="primary"
|
|
|
- size="small"
|
|
|
- text
|
|
|
- //v-auth="orchestraSubsidyStandard/update1597887579789053953"
|
|
|
- onClick={() => {
|
|
|
- state.showMusicSheetOwnerDialog = true
|
|
|
- }}
|
|
|
- >
|
|
|
- {state.ownerName ? state.ownerName : '请选择所属机构'}
|
|
|
- </NButton>
|
|
|
- </NFormItemGi>)}
|
|
|
- <NFormItemGi label="速度" path="playSpeed"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: false,
|
|
|
- message: '请输入速度'
|
|
|
- }
|
|
|
- ]}
|
|
|
+ {state.ownerName ? state.ownerName : '请选择所属机构'}
|
|
|
+ </NButton>
|
|
|
+ </NFormItemGi>
|
|
|
+ )}
|
|
|
+ <NFormItemGi
|
|
|
+ label="速度"
|
|
|
+ path="playSpeed"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: false,
|
|
|
+ message: '请输入速度'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
>
|
|
|
<NInputNumber
|
|
|
- placeholder="请输入速度"
|
|
|
- v-model:value={forms.playSpeed}
|
|
|
- style="width:100%"
|
|
|
+ placeholder="请输入速度"
|
|
|
+ v-model:value={forms.playSpeed}
|
|
|
+ style="width:100%"
|
|
|
/>
|
|
|
</NFormItemGi>
|
|
|
</NGrid>
|
|
|
<NGrid cols={2}>
|
|
|
- <NFormItemGi label="审核版本" path="appAuditFlag"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请选择曲目所属人'
|
|
|
- }
|
|
|
- ]}
|
|
|
+ <NFormItemGi
|
|
|
+ label="审核版本"
|
|
|
+ path="appAuditFlag"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择曲目所属人'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
>
|
|
|
<NSelect
|
|
|
- options={
|
|
|
- [
|
|
|
- {
|
|
|
- label: '是',
|
|
|
- value: 1
|
|
|
- },
|
|
|
- {
|
|
|
- label: '否',
|
|
|
- value: 0
|
|
|
- }
|
|
|
- ] as any
|
|
|
- }
|
|
|
- v-model:value={forms.appAuditFlag}
|
|
|
+ options={
|
|
|
+ [
|
|
|
+ {
|
|
|
+ label: '是',
|
|
|
+ value: 1
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '否',
|
|
|
+ value: 0
|
|
|
+ }
|
|
|
+ ] as any
|
|
|
+ }
|
|
|
+ v-model:value={forms.appAuditFlag}
|
|
|
/>
|
|
|
</NFormItemGi>
|
|
|
- <NFormItemGi label="曲目分类" path="musicCategoryId"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请选择曲目分类'
|
|
|
- }
|
|
|
- ]}
|
|
|
+ <NFormItemGi
|
|
|
+ label="曲目分类"
|
|
|
+ path="musicCategoryId"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择曲目分类'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
>
|
|
|
<NCascader
|
|
|
- valueField="id"
|
|
|
- labelField="name"
|
|
|
- children-field="musicSheetCategoriesList"
|
|
|
- placeholder="请选择分类"
|
|
|
- v-model:value={forms.musicCategoryId}
|
|
|
- options={state.musicSheetCategories}
|
|
|
- clearable
|
|
|
+ valueField="id"
|
|
|
+ labelField="name"
|
|
|
+ children-field="musicSheetCategoriesList"
|
|
|
+ placeholder="请选择分类"
|
|
|
+ v-model:value={forms.musicCategoryId}
|
|
|
+ options={state.musicSheetCategories}
|
|
|
+ clearable
|
|
|
/>
|
|
|
</NFormItemGi>
|
|
|
</NGrid>
|
|
|
<NGrid cols={2}>
|
|
|
- <NFormItemGi label="重复节拍时长" path="repeatedBeats"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请选择是否重复节拍时长'
|
|
|
- }
|
|
|
- ]}
|
|
|
+ <NFormItemGi
|
|
|
+ label="重复节拍时长"
|
|
|
+ path="repeatedBeats"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择是否重复节拍时长'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
>
|
|
|
- <NRadioGroup
|
|
|
- v-model:value={forms.repeatedBeats}
|
|
|
- >
|
|
|
+ <NRadioGroup v-model:value={forms.repeatedBeats}>
|
|
|
<NRadio value={true}>是</NRadio>
|
|
|
<NRadio value={false}>否</NRadio>
|
|
|
</NRadioGroup>
|
|
|
</NFormItemGi>
|
|
|
<NFormItemGi
|
|
|
- label="评分标准"
|
|
|
- path="evaluationStandard"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true
|
|
|
- }
|
|
|
- ]}
|
|
|
+ label="评分标准"
|
|
|
+ path="evaluationStandard"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true
|
|
|
+ }
|
|
|
+ ]}
|
|
|
>
|
|
|
- <NRadioGroup
|
|
|
- v-model:value={forms.evaluationStandard}
|
|
|
- >
|
|
|
+ <NRadioGroup v-model:value={forms.evaluationStandard}>
|
|
|
<NRadio value={'FREQUENCY'}>标准评测</NRadio>
|
|
|
<NRadio value={'AMPLITUDE'}>打击乐(振幅)</NRadio>
|
|
|
<NRadio value={'DECIBELS'}>节奏(分贝)</NRadio>
|
|
|
</NRadioGroup>
|
|
|
</NFormItemGi>
|
|
|
</NGrid>
|
|
|
- <NAlert showIcon={false} style={{marginBottom: "12px"}}>曲目上传</NAlert>
|
|
|
+ <NAlert showIcon={false} style={{ marginBottom: '12px' }}>
|
|
|
+ 曲目上传
|
|
|
+ </NAlert>
|
|
|
<NGrid cols={2}>
|
|
|
- <NFormItemGi label="播放模式" path="playMode"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请选择播放模式'
|
|
|
- }
|
|
|
- ]}
|
|
|
+ <NFormItemGi
|
|
|
+ label="播放模式"
|
|
|
+ path="playMode"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择播放模式'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
>
|
|
|
<NRadioGroup
|
|
|
- v-model:value={forms.playMode}
|
|
|
- onUpdateValue={(value: string | number | boolean) => {
|
|
|
- if (value === 'MP3') {
|
|
|
- forms.playMode = 'MP3'
|
|
|
- } else {
|
|
|
- forms.playMode = 'MIDI'
|
|
|
- }
|
|
|
- }}
|
|
|
+ v-model:value={forms.playMode}
|
|
|
+ onUpdateValue={(value: string | number | boolean) => {
|
|
|
+ if (value === 'MP3') {
|
|
|
+ forms.playMode = 'MP3'
|
|
|
+ } else {
|
|
|
+ forms.playMode = 'MIDI'
|
|
|
+ }
|
|
|
+ }}
|
|
|
>
|
|
|
<NRadio value="MP3">MP3</NRadio>
|
|
|
<NRadio value="MIDI">MID</NRadio>
|
|
|
</NRadioGroup>
|
|
|
</NFormItemGi>
|
|
|
{forms.playMode === 'MP3' && (
|
|
|
- <NFormItemGi
|
|
|
- label="伴奏类型"
|
|
|
- path="audioType"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请选择伴奏类型'
|
|
|
- }
|
|
|
- ]}
|
|
|
- >
|
|
|
- <NRadioGroup
|
|
|
- v-model:value={forms.audioType}
|
|
|
- >
|
|
|
- <NRadio value={'HOMEMODE'}>自制伴奏</NRadio>
|
|
|
- <NRadio value={'COMMON'}>普通伴奏</NRadio>
|
|
|
- </NRadioGroup>
|
|
|
- </NFormItemGi>
|
|
|
+ <NFormItemGi
|
|
|
+ label="伴奏类型"
|
|
|
+ path="audioType"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择伴奏类型'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <NRadioGroup v-model:value={forms.audioType}>
|
|
|
+ <NRadio value={'HOMEMODE'}>自制伴奏</NRadio>
|
|
|
+ <NRadio value={'COMMON'}>普通伴奏</NRadio>
|
|
|
+ </NRadioGroup>
|
|
|
+ </NFormItemGi>
|
|
|
)}
|
|
|
</NGrid>
|
|
|
<NGrid cols={2}>
|
|
|
{forms.playMode === 'MP3' && (
|
|
|
- <NFormItemGi
|
|
|
- label="上传伴奏"
|
|
|
- path="musicSheetAccompanimentList"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: false,
|
|
|
- message: '请选择上传.mp3'
|
|
|
- }
|
|
|
- ]}
|
|
|
- >
|
|
|
- <UploadFile
|
|
|
- disabled={state.previewMode}
|
|
|
- size={10}
|
|
|
- v-model:imageList={state.musicSheetAccompanimentUrlList}
|
|
|
- tips="仅支持上传.mp3格式文件"
|
|
|
- listType="image"
|
|
|
- accept=".mp3"
|
|
|
- bucketName="cloud-coach"
|
|
|
- text="点击上传伴奏文件"
|
|
|
- max={10}
|
|
|
- desc={'上传伴奏文件'}
|
|
|
- onUpload:success={(file) => {
|
|
|
- state.musicSheetAccompanimentUrls = [state.musicSheetAccompanimentUrls, file.url].filter(Boolean).join(',')
|
|
|
- state.musicSheetAccompanimentUrlList = state.musicSheetAccompanimentUrls?.split(',').filter(Boolean)
|
|
|
- forms.musicSheetAccompanimentList = []
|
|
|
- for (let i = 0; i < state.musicSheetAccompanimentUrlList.length; i++) {
|
|
|
- forms.musicSheetAccompanimentList.push({
|
|
|
- audioFileUrl: state.musicSheetAccompanimentUrlList[i],
|
|
|
- sortNumber: i + 1
|
|
|
- })
|
|
|
- }
|
|
|
- }}
|
|
|
- onRemove={() => {
|
|
|
- state.musicSheetAccompanimentUrlList = []
|
|
|
- state.musicSheetAccompanimentUrls = ''
|
|
|
- }}
|
|
|
- // onReadFileInputEventAsArrayBuffer={readFileInputEventAsArrayBuffer}
|
|
|
- multiple={true}
|
|
|
- />
|
|
|
- </NFormItemGi>
|
|
|
+ <NFormItemGi
|
|
|
+ label="上传伴奏"
|
|
|
+ path="musicSheetAccompanimentList"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: false,
|
|
|
+ message: '请选择上传.mp3'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <UploadFile
|
|
|
+ disabled={state.previewMode}
|
|
|
+ size={10}
|
|
|
+ v-model:imageList={state.musicSheetAccompanimentUrlList}
|
|
|
+ tips="仅支持上传.mp3格式文件"
|
|
|
+ listType="image"
|
|
|
+ accept=".mp3"
|
|
|
+ bucketName="cloud-coach"
|
|
|
+ text="点击上传伴奏文件"
|
|
|
+ max={10}
|
|
|
+ desc={'上传伴奏文件'}
|
|
|
+ onUpload:success={(file) => {
|
|
|
+ state.musicSheetAccompanimentUrls = [
|
|
|
+ state.musicSheetAccompanimentUrls,
|
|
|
+ file.url
|
|
|
+ ]
|
|
|
+ .filter(Boolean)
|
|
|
+ .join(',')
|
|
|
+ state.musicSheetAccompanimentUrlList = state.musicSheetAccompanimentUrls
|
|
|
+ ?.split(',')
|
|
|
+ .filter(Boolean)
|
|
|
+ forms.musicSheetAccompanimentList = []
|
|
|
+ for (let i = 0; i < state.musicSheetAccompanimentUrlList.length; i++) {
|
|
|
+ forms.musicSheetAccompanimentList.push({
|
|
|
+ audioFileUrl: state.musicSheetAccompanimentUrlList[i],
|
|
|
+ sortNumber: i + 1
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }}
|
|
|
+ onRemove={() => {
|
|
|
+ state.musicSheetAccompanimentUrlList = []
|
|
|
+ state.musicSheetAccompanimentUrls = ''
|
|
|
+ }}
|
|
|
+ // onReadFileInputEventAsArrayBuffer={readFileInputEventAsArrayBuffer}
|
|
|
+ multiple={true}
|
|
|
+ />
|
|
|
+ </NFormItemGi>
|
|
|
)}
|
|
|
{forms.playMode === 'MIDI' && (
|
|
|
- <NFormItemGi
|
|
|
- label="上传MID"
|
|
|
- path="midiFileUrl"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请选择上传.MID格式文件'
|
|
|
- }
|
|
|
- ]}
|
|
|
- >
|
|
|
- <UploadFile
|
|
|
- desc={'MIDI文件'}
|
|
|
- disabled={state.previewMode}
|
|
|
- size={10}
|
|
|
- v-model:fileList={forms.midiFileUrl}
|
|
|
- tips="仅支持上传.MID格式文件"
|
|
|
- listType="image"
|
|
|
- accept=".mid"
|
|
|
- bucketName="cloud-coach"
|
|
|
- text="点击上传MID文件"
|
|
|
- // onReadFileInputEventAsArrayBuffer={readFileInputEventAsArrayBuffer}
|
|
|
- />
|
|
|
- </NFormItemGi>
|
|
|
- )}
|
|
|
- <NFormItemGi
|
|
|
- label="上传XML"
|
|
|
- path="xmlFileUrl"
|
|
|
+ <NFormItemGi
|
|
|
+ label="上传MID"
|
|
|
+ path="midiFileUrl"
|
|
|
rule={[
|
|
|
{
|
|
|
required: true,
|
|
|
- message: '请选择上传XML'
|
|
|
+ message: '请选择上传.MID格式文件'
|
|
|
}
|
|
|
]}
|
|
|
- >
|
|
|
- <UploadFile
|
|
|
- desc={'XML文件'}
|
|
|
+ >
|
|
|
+ <UploadFile
|
|
|
+ desc={'MIDI文件'}
|
|
|
disabled={state.previewMode}
|
|
|
size={10}
|
|
|
- v-model:fileList={forms.xmlFileUrl}
|
|
|
- tips="仅支持上传.xml/.mxml格式文件"
|
|
|
+ v-model:fileList={forms.midiFileUrl}
|
|
|
+ tips="仅支持上传.MID格式文件"
|
|
|
listType="image"
|
|
|
- accept=".xml,.mxml"
|
|
|
+ accept=".mid"
|
|
|
bucketName="cloud-coach"
|
|
|
- text="点击上传XML文件"
|
|
|
- onReadFileInputEventAsArrayBuffer={readFileInputEventAsArrayBuffer}
|
|
|
- onRemove={() => {
|
|
|
- forms.multiTracksSelection = []
|
|
|
- state.partListNames = []
|
|
|
- forms.musicSheetSoundList = []
|
|
|
- forms.musicalInstrumentIdList = []
|
|
|
- forms.subjectIds = []
|
|
|
- }}
|
|
|
+ text="点击上传MID文件"
|
|
|
+ // onReadFileInputEventAsArrayBuffer={readFileInputEventAsArrayBuffer}
|
|
|
+ />
|
|
|
+ </NFormItemGi>
|
|
|
+ )}
|
|
|
+ <NFormItemGi
|
|
|
+ label="上传XML"
|
|
|
+ path="xmlFileUrl"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择上传XML',
|
|
|
+ trigger: ['change', 'input']
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <UploadFile
|
|
|
+ desc={'XML文件'}
|
|
|
+ disabled={state.previewMode}
|
|
|
+ size={10}
|
|
|
+ key={'xmlFileUrl'}
|
|
|
+ v-model:fileList={forms.xmlFileUrl}
|
|
|
+ tips="仅支持上传.xml/.mxml格式文件"
|
|
|
+ listType="image"
|
|
|
+ accept=".xml,.mxml"
|
|
|
+ bucketName="cloud-coach"
|
|
|
+ text="点击上传XML文件"
|
|
|
+ onReadFileInputEventAsArrayBuffer={readFileInputEventAsArrayBuffer}
|
|
|
+ onRemove={() => {
|
|
|
+ forms.multiTracksSelection = []
|
|
|
+ state.partListNames = []
|
|
|
+ forms.musicSheetSoundList = []
|
|
|
+ forms.musicalInstrumentIdList = []
|
|
|
+ forms.subjectIds = []
|
|
|
+ }}
|
|
|
/>
|
|
|
</NFormItemGi>
|
|
|
-
|
|
|
</NGrid>
|
|
|
|
|
|
<NGrid cols={2}>
|
|
|
- <NFormItemGi label="可用声部" path="subjectIds"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请选择可用声部'
|
|
|
- }
|
|
|
- ]}
|
|
|
+ <NFormItemGi
|
|
|
+ label="可用声部"
|
|
|
+ path="subjectIds"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择可用声部',
|
|
|
+ trigger: 'change',
|
|
|
+ type: 'array'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
>
|
|
|
<NSelect
|
|
|
- v-model:value={forms.subjectIds}
|
|
|
- options={state.subjectList}
|
|
|
- multiple
|
|
|
- filterable
|
|
|
- clearable
|
|
|
- placeholder="请选择可用声部"
|
|
|
- maxTagCount={2}
|
|
|
+ v-model:value={forms.subjectIds}
|
|
|
+ options={state.subjectList}
|
|
|
+ multiple
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ placeholder="请选择可用声部"
|
|
|
+ maxTagCount={2}
|
|
|
/>
|
|
|
</NFormItemGi>
|
|
|
- <NFormItemGi label="可用乐器" path="musicalInstrumentIdList"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请选择可用乐器'
|
|
|
- }
|
|
|
- ]}
|
|
|
+ <NFormItemGi
|
|
|
+ label="可用乐器"
|
|
|
+ path="musicalInstrumentIdList"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择可用乐器'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
>
|
|
|
<NSelect
|
|
|
- placeholder="请选择可用乐器"
|
|
|
- options={state.instrumentList}
|
|
|
- v-model:value={forms.musicalInstrumentIdList}
|
|
|
- clearable
|
|
|
- multiple
|
|
|
- maxTagCount={2}
|
|
|
+ placeholder="请选择可用乐器"
|
|
|
+ options={state.instrumentList}
|
|
|
+ v-model:value={forms.musicalInstrumentIdList}
|
|
|
+ clearable
|
|
|
+ multiple
|
|
|
+ maxTagCount={2}
|
|
|
/>
|
|
|
</NFormItemGi>
|
|
|
</NGrid>
|
|
|
|
|
|
- {(forms.musicSheetType) && (
|
|
|
- <NGrid cols={1}>
|
|
|
- <NFormItemGi
|
|
|
- label={`${forms.musicSheetType === 'SINGLE' ? '页面渲染声轨' : '用户可切换声轨'}`}
|
|
|
- path="multiTracksSelection"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: `请选择${forms.musicSheetType === 'SINGLE' ? '页面渲染声轨' : '用户可切换声轨'}`
|
|
|
- }
|
|
|
- ]}
|
|
|
- >
|
|
|
- <NGrid style="padding-top: 4px;">
|
|
|
- <NGi span={24}>
|
|
|
- <NRadioGroup
|
|
|
- v-model:value={state.multiTracks}
|
|
|
- onUpdateValue={(value) => {
|
|
|
- checkMultiTracks(value)
|
|
|
- }}
|
|
|
- >
|
|
|
- <NRadio value={'all'}>全选</NRadio>
|
|
|
- <NRadio value={'allUncheck'}>重置</NRadio>
|
|
|
- <NRadio value={'invert'}>反选</NRadio>
|
|
|
- </NRadioGroup>
|
|
|
- </NGi>
|
|
|
- <NGi span={24} style={"margin-top:5px"}><NFormItemGi
|
|
|
- label=''
|
|
|
- path="multiTracksSelection"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: false,
|
|
|
- }
|
|
|
- ]}
|
|
|
+ {forms.musicSheetType && (
|
|
|
+ <NGrid cols={1}>
|
|
|
+ <NFormItemGi
|
|
|
+ label={`${forms.musicSheetType === 'SINGLE' ? '页面渲染声轨' : '用户可切换声轨'}`}
|
|
|
+ path="multiTracksSelection"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: `请选择${
|
|
|
+ forms.musicSheetType === 'SINGLE' ? '页面渲染声轨' : '用户可切换声轨'
|
|
|
+ }`
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <NGrid style="padding-top: 4px;">
|
|
|
+ <NGi span={24}>
|
|
|
+ <NRadioGroup
|
|
|
+ v-model:value={state.multiTracks}
|
|
|
+ onUpdateValue={(value) => {
|
|
|
+ checkMultiTracks(value)
|
|
|
+ }}
|
|
|
>
|
|
|
- <NCheckboxGroup
|
|
|
- v-model:value={forms.multiTracksSelection}
|
|
|
- >
|
|
|
- <NGrid yGap={2} cols={4}
|
|
|
- >
|
|
|
+ <NRadio value={'all'}>全选</NRadio>
|
|
|
+ <NRadio value={'allUncheck'}>重置</NRadio>
|
|
|
+ <NRadio value={'invert'}>反选</NRadio>
|
|
|
+ </NRadioGroup>
|
|
|
+ </NGi>
|
|
|
+ <NGi span={24} style={'margin-top:5px'}>
|
|
|
+ <NFormItemGi
|
|
|
+ label=""
|
|
|
+ path="multiTracksSelection"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: false
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <NCheckboxGroup v-model:value={forms.multiTracksSelection}>
|
|
|
+ <NGrid yGap={2} cols={4}>
|
|
|
{state.partListNames.map((item: any) => (
|
|
|
- <NGi>
|
|
|
- <NCheckbox value={item.value} label={item.label}/>
|
|
|
- </NGi>
|
|
|
+ <NGi>
|
|
|
+ <NCheckbox value={item.value} label={item.label} />
|
|
|
+ </NGi>
|
|
|
))}
|
|
|
</NGrid>
|
|
|
</NCheckboxGroup>
|
|
|
- </NFormItemGi></NGi>
|
|
|
- </NGrid>
|
|
|
- </NFormItemGi>
|
|
|
- </NGrid>
|
|
|
- )
|
|
|
- }
|
|
|
+ </NFormItemGi>
|
|
|
+ </NGi>
|
|
|
+ </NGrid>
|
|
|
+ </NFormItemGi>
|
|
|
+ </NGrid>
|
|
|
+ )}
|
|
|
<NGrid cols={2}>
|
|
|
- <NFormItemGi label="是否播放节拍器" path="isPlayBeat"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请选择是否播放节拍器'
|
|
|
- }
|
|
|
- ]}
|
|
|
+ <NFormItemGi
|
|
|
+ label="是否播放节拍器"
|
|
|
+ path="isPlayBeat"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择是否播放节拍器'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
>
|
|
|
- <NRadioGroup
|
|
|
- v-model:value={forms.isPlayBeat}
|
|
|
- >
|
|
|
+ <NRadioGroup v-model:value={forms.isPlayBeat}>
|
|
|
<NRadio value={true}>是</NRadio>
|
|
|
<NRadio value={false}>否</NRadio>
|
|
|
</NRadioGroup>
|
|
|
</NFormItemGi>
|
|
|
{forms.isPlayBeat && (
|
|
|
- <NFormItemGi label="播放方式" path="audioType"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请选择播放方式'
|
|
|
- }
|
|
|
- ]}
|
|
|
- >
|
|
|
- <NRadioGroup
|
|
|
- v-model:value={forms.isUseSystemBeat}
|
|
|
- >
|
|
|
- <NRadio value={true}>系统节拍器</NRadio>
|
|
|
- <NRadio value={false}>MP3节拍器</NRadio>
|
|
|
- </NRadioGroup>
|
|
|
- </NFormItemGi>
|
|
|
+ <NFormItemGi
|
|
|
+ label="播放方式"
|
|
|
+ path="audioType"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择播放方式'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <NRadioGroup v-model:value={forms.isUseSystemBeat}>
|
|
|
+ <NRadio value={true}>系统节拍器</NRadio>
|
|
|
+ <NRadio value={false}>MP3节拍器</NRadio>
|
|
|
+ </NRadioGroup>
|
|
|
+ </NFormItemGi>
|
|
|
)}
|
|
|
</NGrid>
|
|
|
{/* 只有播放类型为mp3时才会有原音 */}
|
|
|
{forms.playMode === 'MP3' && forms.musicSheetSoundList.length > 0 && (
|
|
|
- <>
|
|
|
- {forms.musicSheetSoundList.map((item: any, index: number) => (
|
|
|
- <>
|
|
|
- {item.track?.toLocaleUpperCase?.() != 'COMMON' && forms.multiTracksSelection.indexOf(item.track) > -1 &&
|
|
|
- <NGrid class={styles.audioSection}
|
|
|
- // v-show={forms.multiTracksSelection.indexOf(item.track) > -1}
|
|
|
+ <>
|
|
|
+ {forms.musicSheetSoundList.map((item: any, index: number) => (
|
|
|
+ <>
|
|
|
+ {item.track?.toLocaleUpperCase?.() != 'COMMON' &&
|
|
|
+ forms.multiTracksSelection.indexOf(item.track) > -1 && (
|
|
|
+ <NGrid
|
|
|
+ class={styles.audioSection}
|
|
|
+ // v-show={forms.multiTracksSelection.indexOf(item.track) > -1}
|
|
|
+ >
|
|
|
+ <NFormItemGi
|
|
|
+ span={12}
|
|
|
+ label="原音"
|
|
|
+ path={`musicSheetSoundList[${index}].audioFileUrl`}
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ // required: forms.multiTracksSelection.indexOf(forms.musicSheetSoundList[index].audioFileUrl) > -1,
|
|
|
+ required: true,
|
|
|
+ message: `请上传${
|
|
|
+ item.track ? item.track + '的' : '第' + (index + 1) + '个'
|
|
|
+ }原音`
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <UploadFile
|
|
|
+ desc={'原音文件'}
|
|
|
+ disabled={state.previewMode}
|
|
|
+ size={10}
|
|
|
+ v-model:fileList={item.audioFileUrl}
|
|
|
+ tips="仅支持上传.mp3格式文件"
|
|
|
+ listType="image"
|
|
|
+ accept=".mp3"
|
|
|
+ bucketName="cloud-coach"
|
|
|
+ />
|
|
|
+ </NFormItemGi>
|
|
|
+ {state.partListNames.length > 1 && (
|
|
|
+ <NFormItemGi
|
|
|
+ span={12}
|
|
|
+ label="所属轨道"
|
|
|
+ path={`musicSheetSoundList[${index}].track`}
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择所属轨道'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
>
|
|
|
- <NFormItemGi
|
|
|
- span={12}
|
|
|
- label="原音"
|
|
|
- path={`musicSheetSoundList[${index}].audioFileUrl`}
|
|
|
- rule={[
|
|
|
- {
|
|
|
- // required: forms.multiTracksSelection.indexOf(forms.musicSheetSoundList[index].audioFileUrl) > -1,
|
|
|
- required: true,
|
|
|
- message: `请上传${
|
|
|
- item.track ? item.track + '的' : '第' + (index + 1) + '个'
|
|
|
- }原音`
|
|
|
- }
|
|
|
- ]}
|
|
|
- >
|
|
|
- <UploadFile
|
|
|
- desc={'原音文件'}
|
|
|
- disabled={state.previewMode}
|
|
|
- size={10}
|
|
|
- v-model:fileList={item.audioFileUrl}
|
|
|
- tips="仅支持上传.mp3格式文件"
|
|
|
- listType="image"
|
|
|
- accept=".mp3"
|
|
|
- bucketName="cloud-coach"
|
|
|
- />
|
|
|
- </NFormItemGi>
|
|
|
- {state.partListNames.length > 1 && (
|
|
|
- <NFormItemGi
|
|
|
- span={12}
|
|
|
- label="所属轨道"
|
|
|
- path={`musicSheetSoundList[${index}].track`}
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请选择所属轨道'
|
|
|
- }
|
|
|
- ]}
|
|
|
- >
|
|
|
- <NSelect
|
|
|
- placeholder="请选择所属轨道"
|
|
|
- v-model:value={item.track}
|
|
|
- options={initPartsListStatus(item.track)}
|
|
|
- />
|
|
|
- </NFormItemGi>
|
|
|
- )}
|
|
|
- </NGrid>}
|
|
|
- </>
|
|
|
- ))}
|
|
|
+ <NSelect
|
|
|
+ placeholder="请选择所属轨道"
|
|
|
+ v-model:value={item.track}
|
|
|
+ options={initPartsListStatus(item.track)}
|
|
|
+ />
|
|
|
+ </NFormItemGi>
|
|
|
+ )}
|
|
|
+ </NGrid>
|
|
|
+ )}
|
|
|
+ </>
|
|
|
+ ))}
|
|
|
|
|
|
- <NButton
|
|
|
- type="primary"
|
|
|
- dashed
|
|
|
- block
|
|
|
- disabled={state.partListNames.length <= forms.musicSheetSoundList.length}
|
|
|
- style={{
|
|
|
- marginBottom: '24px'
|
|
|
- }}
|
|
|
- onClick={createSys}
|
|
|
- >
|
|
|
- 添加原音
|
|
|
- </NButton>
|
|
|
- </>
|
|
|
+ <NButton
|
|
|
+ type="primary"
|
|
|
+ dashed
|
|
|
+ block
|
|
|
+ disabled={state.partListNames.length <= forms.musicSheetSoundList.length}
|
|
|
+ style={{
|
|
|
+ marginBottom: '24px'
|
|
|
+ }}
|
|
|
+ onClick={createSys}
|
|
|
+ >
|
|
|
+ 添加原音
|
|
|
+ </NButton>
|
|
|
+ </>
|
|
|
)}
|
|
|
</NForm>
|
|
|
+ </NSpin>
|
|
|
+ {props.type !== 'preview' && (
|
|
|
+ <NSpace justify="end" style="padding-top:12px">
|
|
|
+ <NButton type="default" onClick={() => emit('close')}>
|
|
|
+ 取消
|
|
|
+ </NButton>
|
|
|
+ <NButton
|
|
|
+ type="primary"
|
|
|
+ onClick={() => onSubmit()}
|
|
|
+ loading={btnLoading.value}
|
|
|
+ disabled={btnLoading.value}
|
|
|
+ >
|
|
|
+ 确认
|
|
|
+ </NButton>
|
|
|
+ </NSpace>
|
|
|
+ )}
|
|
|
|
|
|
- {props.type !== 'preview' &&
|
|
|
- (
|
|
|
- <NSpace justify="end" style="padding-top:12px">
|
|
|
- <NButton type="default" onClick={() => emit('close')}>
|
|
|
- 取消
|
|
|
- </NButton>
|
|
|
- <NButton
|
|
|
- type="primary"
|
|
|
- onClick={() => onSubmit()}
|
|
|
- loading={btnLoading.value}
|
|
|
- disabled={btnLoading.value}
|
|
|
- >
|
|
|
- 确认
|
|
|
- </NButton>
|
|
|
- </NSpace>
|
|
|
- )}
|
|
|
+ <NModal
|
|
|
+ v-model:show={state.showMusicSheetOwnerDialog}
|
|
|
+ preset="dialog"
|
|
|
+ showIcon={false}
|
|
|
+ maskClosable={false}
|
|
|
+ title="所属人"
|
|
|
+ style={{ width: '800px' }}
|
|
|
+ >
|
|
|
+ <MusicSheetOwnerDialog
|
|
|
+ musicSheetExtend={forms.musicSheetExtend}
|
|
|
+ sourceType={forms.sourceType}
|
|
|
+ appData={state.appData}
|
|
|
+ onClose={() => {
|
|
|
+ state.showMusicSheetOwnerDialog = false
|
|
|
+ }}
|
|
|
+ onChoseMusicSheetOwnerData={(musicSheetOwnerData) => {
|
|
|
+ forms.musicSheetExtend = {
|
|
|
+ ...musicSheetOwnerData
|
|
|
+ }
|
|
|
+ setOwnerName()
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </NModal>
|
|
|
|
|
|
- <NModal
|
|
|
- v-model:show={state.showMusicSheetOwnerDialog}
|
|
|
- preset="dialog"
|
|
|
- showIcon={false}
|
|
|
- maskClosable={false}
|
|
|
- title="所属人"
|
|
|
- style={{width: '800px'}}
|
|
|
- >
|
|
|
- <MusicSheetOwnerDialog
|
|
|
- musicSheetExtend={forms.musicSheetExtend}
|
|
|
- sourceType={forms.sourceType}
|
|
|
- appData={state.appData}
|
|
|
- onClose={() => {
|
|
|
- state.showMusicSheetOwnerDialog = false
|
|
|
- }}
|
|
|
- onChoseMusicSheetOwnerData={(musicSheetOwnerData) => {
|
|
|
- forms.musicSheetExtend = {
|
|
|
- ...musicSheetOwnerData
|
|
|
- }
|
|
|
- setOwnerName()
|
|
|
- }}
|
|
|
- />
|
|
|
- </NModal>
|
|
|
- </div>
|
|
|
+ <NModal
|
|
|
+ class={styles.productModal}
|
|
|
+ title="自动生成曲谱图片"
|
|
|
+ v-model:show={state.productOpen}
|
|
|
+ preset="dialog"
|
|
|
+ closeOnEsc={false}
|
|
|
+ maskClosable={false}
|
|
|
+ showIcon={false}
|
|
|
+ >
|
|
|
+ <MusicCreateImg
|
|
|
+ xmlFileUrl={forms.xmlFileUrl || ''}
|
|
|
+ onClose={() => (state.productOpen = false)}
|
|
|
+ onConfirm={async (item: any) => {
|
|
|
+ // 保存
|
|
|
+ try {
|
|
|
+ forms.musicImg = item.musicImg
|
|
|
+ forms.musicSvg = item.musicSvg
|
|
|
+ forms.musicJianSvg = item.musicJianSvg
|
|
|
+ onSubmit()
|
|
|
+ } catch (e: any) {
|
|
|
+ //
|
|
|
+ console.log(e, 'e')
|
|
|
+ }
|
|
|
+ setTimeout(() => {
|
|
|
+ state.isAutoSave = false
|
|
|
+ }, 50)
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </NModal>
|
|
|
+ </div>
|
|
|
)
|
|
|
}
|
|
|
})
|