|
@@ -40,7 +40,6 @@ import styles from './index.module.less'
|
|
|
import SelectTag from '@/views/music/search/select-tag'
|
|
|
import { browser } from '@/helpers/utils'
|
|
|
import { postMessage } from '@/helpers/native-message'
|
|
|
-import { teacherState } from '@/teacher/teacher-cert/teacherState'
|
|
|
import request from '@/helpers/request'
|
|
|
import requestOrigin from 'umi-request'
|
|
|
import UploadIcon from './images/music-icon.png'
|
|
@@ -50,20 +49,20 @@ import {
|
|
|
verifiyNumberInteger,
|
|
|
verifyNumberIntegerAndFloat
|
|
|
} from '@/helpers/toolsValidate'
|
|
|
-import { state } from '@/state'
|
|
|
import ColHeader from '@/components/col-header'
|
|
|
import ColSticky from '@/components/col-sticky'
|
|
|
import MessageTip from './message-tip'
|
|
|
|
|
|
export type BackgroundMp3 = {
|
|
|
url?: string
|
|
|
+ id?: string
|
|
|
trackName?: string
|
|
|
track?: string
|
|
|
+ loading?: boolean
|
|
|
}
|
|
|
|
|
|
// 校验函数返回 true 表示校验通过,false 表示不通过
|
|
|
export const validator = val => {
|
|
|
- console.log(val)
|
|
|
if (Number(val) <= 0) {
|
|
|
return '收费金额必须大于0'
|
|
|
} else {
|
|
@@ -79,28 +78,25 @@ export default defineComponent({
|
|
|
playMode: 'MP3',
|
|
|
xmlFileUrl: '',
|
|
|
xmlFileLoading: false,
|
|
|
- midiUrl: '',
|
|
|
+ midiFileUrl: '',
|
|
|
midiLoading: false,
|
|
|
mp3Url: '',
|
|
|
bgmp3Url: '',
|
|
|
mp3Loading: false,
|
|
|
- bgmp3Loading: false,
|
|
|
- musicSheetName: '',
|
|
|
+ name: '',
|
|
|
composer: '',
|
|
|
remark: '',
|
|
|
- repeatedBeats: 0,
|
|
|
+ // repeatedBeats: 0,
|
|
|
playSpeed: null as any,
|
|
|
- hasBeat: 0,
|
|
|
- titleImg: '',
|
|
|
- accompanimentType: 'HOMEMODE',
|
|
|
- chargeType: 0,
|
|
|
+ // hasBeat: 0,
|
|
|
+ musicCover: '',
|
|
|
paymentType: 'CHARGE',
|
|
|
- showFingering: 1,
|
|
|
- canEvaluate: 1,
|
|
|
- notation: 1,
|
|
|
+ // showFingering: 1,
|
|
|
+ // canEvaluate: 1,
|
|
|
+ // notation: 1,
|
|
|
musicPrice: '',
|
|
|
- subJectIndex: 0,
|
|
|
- subjectIds: [] as any, // 可用声部
|
|
|
+ // subJectIndex: 0,
|
|
|
+ // subjectIds: [] as any, // 可用声部
|
|
|
musicalInstrumentIdList: [] as any, // 可用乐器
|
|
|
selectTagVisible: false,
|
|
|
subJectVisible: false,
|
|
@@ -109,21 +105,20 @@ export default defineComponent({
|
|
|
tagsNames: [] as Array<{ [id in string]: string }>,
|
|
|
formated: {} as FormatXMLInfo,
|
|
|
tagVisibility: false,
|
|
|
- subjectListres: [] as any[],
|
|
|
- subjectListNames: {} as any,
|
|
|
- selectedSubjectList: null as any,
|
|
|
- vlewSubjectList: null as any,
|
|
|
+ // subjectListres: [] as any[],
|
|
|
+ // subjectListNames: {} as any,
|
|
|
+ // selectedSubjectList: null as any,
|
|
|
+ // vlewSubjectList: null as any,
|
|
|
submitLoading: false,
|
|
|
- showPicker: false,
|
|
|
+ // showPicker: false,
|
|
|
music_sheet_service_fee: 0,
|
|
|
music_account_period: 0,
|
|
|
- exquisiteFlag: 0,
|
|
|
+ // exquisiteFlag: 0,
|
|
|
backgroundMp3s: [] as BackgroundMp3[],
|
|
|
- checked: false,
|
|
|
+ // checked: false,
|
|
|
messageTipStatus: false,
|
|
|
messageTipTitle: '上传须知',
|
|
|
messageTipType: 'upload' as 'upload' | 'error' | 'origin',
|
|
|
- cbsSubjectList: [] as any,
|
|
|
cbsInstrumentList: [] as any
|
|
|
}
|
|
|
},
|
|
@@ -131,38 +126,7 @@ export default defineComponent({
|
|
|
formated() {
|
|
|
this.mergeXmlData(this.formated)
|
|
|
}
|
|
|
- // chargeType() {
|
|
|
- // if (this.chargeType === 0) {
|
|
|
- // this.musicPrice = ''
|
|
|
- // this.paymentType = ''
|
|
|
- // }
|
|
|
- // }
|
|
|
},
|
|
|
- // computed: {
|
|
|
- // choiceSubject() {
|
|
|
- // // 选择的科目
|
|
|
- // const tempArr: any[] = []
|
|
|
- // this.cbsSubjectList.forEach((parent: any) => {
|
|
|
- // if (this.subjectIds.includes(parent.id)) {
|
|
|
- // tempArr.push(parent as never)
|
|
|
- // }
|
|
|
- // })
|
|
|
- // console.log(tempArr, 'child', this.subjectIds, this.cbsSubjectList)
|
|
|
- // return tempArr
|
|
|
- // },
|
|
|
- // choiceInstrument() {
|
|
|
- // const tempArr: any[] = []
|
|
|
- // this.cbsSubjectList.forEach((parent: any) => {
|
|
|
- // const instruments = parent.instruments || []
|
|
|
- // instruments.forEach(child => {
|
|
|
- // if (this.musicalInstrumentIdList.includes(child.id)) {
|
|
|
- // tempArr.push(child as never)
|
|
|
- // }
|
|
|
- // })
|
|
|
- // })
|
|
|
- // return tempArr
|
|
|
- // }
|
|
|
- // },
|
|
|
async mounted() {
|
|
|
// 获取基础数据
|
|
|
request
|
|
@@ -182,102 +146,27 @@ export default defineComponent({
|
|
|
})
|
|
|
})
|
|
|
|
|
|
- // request
|
|
|
- // .post('/api-teacher/subject/queryPage', {
|
|
|
- // data: { page: 1, row: -1, parentSubjectId: 0 }
|
|
|
- // })
|
|
|
- // .then((response: any) => {
|
|
|
- // console.log(response, 'response')
|
|
|
-
|
|
|
- // const data = response.data.rows || []
|
|
|
- // console.log(data, 'data')
|
|
|
- // })
|
|
|
- // request
|
|
|
- // .get('/api-teacher/subject/subjectSelect', {
|
|
|
- // params: { parentSubjectId: 0 }
|
|
|
- // })
|
|
|
- // .then(res => {
|
|
|
- // console.log(res, '2112')
|
|
|
- // })
|
|
|
- this.cbsInstrumentList = [
|
|
|
- {
|
|
|
- id: 1004,
|
|
|
- name: '德式竖笛',
|
|
|
- code: 'Tenor Recorder'
|
|
|
- },
|
|
|
- {
|
|
|
- id: 1005,
|
|
|
- name: '英式竖笛',
|
|
|
- code: 'Baroque Recorder'
|
|
|
- },
|
|
|
- {
|
|
|
- id: 1006,
|
|
|
- name: '长笛',
|
|
|
- code: 'Flute'
|
|
|
- },
|
|
|
- {
|
|
|
- id: 1007,
|
|
|
- name: '中音萨克斯',
|
|
|
- code: 'AltoSaxophone'
|
|
|
- },
|
|
|
- {
|
|
|
- id: 1008,
|
|
|
- name: '单簧管',
|
|
|
- code: 'Clarinet'
|
|
|
- },
|
|
|
- {
|
|
|
- id: 1009,
|
|
|
- name: '黄式竖笛4',
|
|
|
- code: 'Flute'
|
|
|
- }
|
|
|
- ]
|
|
|
+ request
|
|
|
+ .post('/api-teacher/musicalInstrument/list')
|
|
|
+ .then((response: any) => {
|
|
|
+ const data = response.data || []
|
|
|
+ data.forEach((item: any) => {
|
|
|
+ this.cbsInstrumentList.push({
|
|
|
+ id: item.id,
|
|
|
+ name: item.name,
|
|
|
+ code: item.code,
|
|
|
+ loading: false
|
|
|
+ })
|
|
|
+ })
|
|
|
+ })
|
|
|
},
|
|
|
methods: {
|
|
|
- // onChoiceSubject(val: any) {
|
|
|
- // this.subJectVisible = false
|
|
|
- // this.subjectIds = [...val]
|
|
|
- // },
|
|
|
- // onRemoveSubject(val: any) {
|
|
|
- // const index = this.subjectIds.findIndex(s => s === val)
|
|
|
- // if (index > -1) {
|
|
|
- // this.subjectIds.splice(index, 1)
|
|
|
-
|
|
|
- // const cbsInstrumentList: any[] = []
|
|
|
- // this.cbsSubjectList.forEach(element => {
|
|
|
- // const index = this.subjectIds.findIndex(s => s === element.id)
|
|
|
- // if (index > -1) {
|
|
|
- // if (this.subjectIds.includes(element.id)) {
|
|
|
- // const instruments = element.instruments ? element.instruments : []
|
|
|
- // cbsInstrumentList.push(...instruments)
|
|
|
- // }
|
|
|
- // }
|
|
|
- // })
|
|
|
-
|
|
|
- // const tempInstrumentIds: any = []
|
|
|
- // this.musicalInstrumentIdList.forEach((item: any) => {
|
|
|
- // const index = cbsInstrumentList.findIndex(
|
|
|
- // instrument => instrument.id === item
|
|
|
- // )
|
|
|
- // if (index > -1) {
|
|
|
- // tempInstrumentIds.push(item)
|
|
|
- // }
|
|
|
- // })
|
|
|
- // this.musicalInstrumentIdList = tempInstrumentIds
|
|
|
- // }
|
|
|
- // },
|
|
|
- // onChoiceInstrument(val: any) {
|
|
|
- // this.instrumentVisible = false
|
|
|
- // this.musicalInstrumentIdList = [...val]
|
|
|
- // },
|
|
|
- // onRemoveInstrument(val: any) {
|
|
|
- // const index = this.musicalInstrumentIdList.findIndex(s => s === val)
|
|
|
- // console.log(val, 'val', index, this.musicalInstrumentIdList)
|
|
|
- // if (index > -1) {
|
|
|
- // this.musicalInstrumentIdList.splice(index, 1)
|
|
|
- // }
|
|
|
- // },
|
|
|
- removeBackground(index: number) {
|
|
|
- this.backgroundMp3s.splice(index, 1)
|
|
|
+ onComfirm(tags: any, names: any) {
|
|
|
+ this.tagsNames = names
|
|
|
+ this.tagVisibility = false
|
|
|
+ const data = Object.values(tags).flat().filter(Boolean) as string[]
|
|
|
+ console.log(data)
|
|
|
+ this.tags = data
|
|
|
},
|
|
|
readerFile(file: File) {
|
|
|
const reader = new FileReader()
|
|
@@ -327,8 +216,8 @@ export default defineComponent({
|
|
|
// this.backgroundMp3s = data.partNames.map((partName: string) => ({
|
|
|
// track: partName
|
|
|
// }))
|
|
|
- if (!this.musicSheetName) {
|
|
|
- this.musicSheetName = data.title
|
|
|
+ if (!this.name) {
|
|
|
+ this.name = data.title
|
|
|
}
|
|
|
if (!this.composer) {
|
|
|
this.composer = data.composer
|
|
@@ -380,9 +269,9 @@ export default defineComponent({
|
|
|
{ api: 'chooseFile', content: { type: 'midi', bucket: 'cloud-coach' } },
|
|
|
evt => {
|
|
|
// @ts-ignore
|
|
|
- this.midiUrl = evt?.fileUrl || this.midiUrl || ''
|
|
|
+ this.midiFileUrl = evt?.fileUrl || this.midiFileUrl || ''
|
|
|
this.midiLoading = false
|
|
|
- // this.midiUrl = path
|
|
|
+ // this.midiFileUrl = path
|
|
|
}
|
|
|
)
|
|
|
},
|
|
@@ -394,19 +283,18 @@ export default defineComponent({
|
|
|
// @ts-ignore
|
|
|
this.mp3Url = evt?.fileUrl || this.mp3Url || ''
|
|
|
this.mp3Loading = false
|
|
|
- // this.midiUrl = path
|
|
|
+ // this.midiFileUrl = path
|
|
|
}
|
|
|
)
|
|
|
},
|
|
|
- naiveBGMp3File() {
|
|
|
- this.bgmp3Loading = true
|
|
|
+ naiveBGMp3File(index) {
|
|
|
+ this.backgroundMp3s[index].loading = true
|
|
|
postMessage(
|
|
|
{ api: 'chooseFile', content: { type: 'mp3', bucket: 'cloud-coach' } },
|
|
|
evt => {
|
|
|
// @ts-ignore
|
|
|
this.bgmp3Url = evt?.fileUrl || this.bgmp3Url || ''
|
|
|
- this.bgmp3Loading = false
|
|
|
- // this.midiUrl = path
|
|
|
+ this.backgroundMp3s[index].loading = false
|
|
|
}
|
|
|
)
|
|
|
},
|
|
@@ -415,20 +303,90 @@ export default defineComponent({
|
|
|
},
|
|
|
onFormatter2(val: any) {
|
|
|
const num = verifiyNumberInteger(val)
|
|
|
- if (num && Number(num) > 300) {
|
|
|
- return '255'
|
|
|
+ if (num && Number(num) > 270) {
|
|
|
+ return '270'
|
|
|
+ }
|
|
|
+ if (num && Number(num) < 45) {
|
|
|
+ return '45'
|
|
|
}
|
|
|
return num
|
|
|
},
|
|
|
fileName(name = '') {
|
|
|
return name?.split('/').pop()
|
|
|
+ },
|
|
|
+ createSubmitData() {
|
|
|
+ return {
|
|
|
+ playMode: this.playMode, // 播放模式
|
|
|
+ xmlFileUrl: this.xmlFileUrl, // XML
|
|
|
+ name: this.name, // 曲目名称
|
|
|
+ composer: this.composer, // 音乐人
|
|
|
+ playSpeed: this.playSpeed, // 曲目速度
|
|
|
+ musicCover: this.musicCover, // 曲目封面
|
|
|
+
|
|
|
+ multiTracksSelection: '1001', // 声轨名
|
|
|
+ midiFileUrl: this.midiFileUrl, // MID文件
|
|
|
+ musicSheetAccompanimentList: [
|
|
|
+ {
|
|
|
+ audioFileUrl: this.mp3Url,
|
|
|
+ sortNumber: 1,
|
|
|
+ audioPlayType: 'PLAY'
|
|
|
+ }
|
|
|
+ ], // 伴奏
|
|
|
+ // audioType: 'HOMEMODE', // HOMEMODE 默认自制
|
|
|
+ musicSheetSoundList: this.backgroundMp3s.map(item => ({
|
|
|
+ // audioFileUrl: this.bgmp3Url,
|
|
|
+ // track: item.track
|
|
|
+ musicalInstrumentId: item.id,
|
|
|
+ musicalInstrumentName: item.trackName,
|
|
|
+ audioFileUrl: item.url,
|
|
|
+ audioPlayType: 'PLAY' // SING
|
|
|
+ })), // 原音
|
|
|
+ musicalInstrumentIds: '1001', // 乐器编号
|
|
|
+ extConfigJson: '{"repeatedBeats":0,"gradualTimes":{},"isEvxml":0}'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async onSubmit(vals: any) {
|
|
|
+ console.log(vals, this.createSubmitData())
|
|
|
+ this.submitLoading = true
|
|
|
+ try {
|
|
|
+ if (this.$route.params.id) {
|
|
|
+ await request.post('/api-teacher/music/sheet/update', {
|
|
|
+ data: {
|
|
|
+ ...this.createSubmitData(),
|
|
|
+ id: this.$route.params.id
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ await request.post('/api-teacher/music/sheet/save', {
|
|
|
+ data: this.createSubmitData()
|
|
|
+ })
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ //
|
|
|
+ }
|
|
|
+
|
|
|
+ Toast('上传成功')
|
|
|
+ setTimeout(() => {
|
|
|
+ postMessage({
|
|
|
+ api: 'back'
|
|
|
+ })
|
|
|
+ this.submitLoading = false
|
|
|
+ }, 800)
|
|
|
+ console.log(vals)
|
|
|
+ },
|
|
|
+ failed() {
|
|
|
+ console.log('failed', this.backgroundMp3s)
|
|
|
}
|
|
|
},
|
|
|
render() {
|
|
|
// console.log(this.formated)
|
|
|
// const browserInfo = browser()
|
|
|
return (
|
|
|
- <Form class={styles.form}>
|
|
|
+ <Form
|
|
|
+ class={styles.form}
|
|
|
+ onSubmit={this.onSubmit}
|
|
|
+ onFailed={this.onFailed}
|
|
|
+ >
|
|
|
<ColHeader hideHeader={false} background="transparent" border={false} />
|
|
|
|
|
|
<CellGroup class={[styles.area, styles.topArea]}>
|
|
@@ -468,7 +426,7 @@ export default defineComponent({
|
|
|
}}
|
|
|
</Field>
|
|
|
|
|
|
- {this.playMode === 'MP3' ? (
|
|
|
+ {this.playMode === 'MP3' && (
|
|
|
<Field
|
|
|
name="mp3Url"
|
|
|
class={styles.fieldTypeBottom}
|
|
@@ -500,8 +458,7 @@ export default defineComponent({
|
|
|
<>
|
|
|
<Upload
|
|
|
onUpdate:modelValue={val => (this.mp3Url = val)}
|
|
|
- accept=".xml,."
|
|
|
- formatFile={this.readerFile}
|
|
|
+ accept=".mp3"
|
|
|
/>
|
|
|
<div style={{ marginLeft: '8px' }}>
|
|
|
{this.fileName(this.mp3Url)}
|
|
@@ -510,11 +467,13 @@ export default defineComponent({
|
|
|
)
|
|
|
}}
|
|
|
</Field>
|
|
|
- ) : (
|
|
|
+ )}
|
|
|
+
|
|
|
+ {this.playMode === 'MIDI' && (
|
|
|
<Field
|
|
|
- name="midiUrl"
|
|
|
+ name="midiFileUrl"
|
|
|
class={styles.fieldTypeBottom}
|
|
|
- modelValue={this.midiUrl}
|
|
|
+ modelValue={this.midiFileUrl}
|
|
|
rules={[{ required: true, message: '请选择MIDI文件' }]}
|
|
|
>
|
|
|
{{
|
|
@@ -526,18 +485,30 @@ export default defineComponent({
|
|
|
<span class={styles.titleTip}>仅支持MIDI格式文件</span>
|
|
|
</div>
|
|
|
),
|
|
|
- input: () => (
|
|
|
- <Button
|
|
|
- icon={UploadIcon}
|
|
|
- class={styles.upbtn}
|
|
|
- loading={this.mp3Loading}
|
|
|
- onClick={this.naiveMp3File}
|
|
|
- >
|
|
|
- {this.midiUrl
|
|
|
- ? this.fileName(this.midiUrl)
|
|
|
- : '上传MIDI文件'}
|
|
|
- </Button>
|
|
|
- )
|
|
|
+ input: () =>
|
|
|
+ browser().isApp ? (
|
|
|
+ <Button
|
|
|
+ icon={UploadIcon}
|
|
|
+ class={styles.upbtn}
|
|
|
+ loading={this.mp3Loading}
|
|
|
+ onClick={this.naiveMidFile}
|
|
|
+ >
|
|
|
+ {this.midiFileUrl
|
|
|
+ ? this.fileName(this.midiFileUrl)
|
|
|
+ : '上传MIDI文件'}
|
|
|
+ </Button>
|
|
|
+ ) : (
|
|
|
+ <>
|
|
|
+ <Upload
|
|
|
+ onUpdate:modelValue={val => (this.midiFileUrl = val)}
|
|
|
+ accept=".mid"
|
|
|
+ formatFile={this.readerFile}
|
|
|
+ />
|
|
|
+ <div style={{ marginLeft: '8px' }}>
|
|
|
+ {this.fileName(this.midiFileUrl)}
|
|
|
+ </div>
|
|
|
+ </>
|
|
|
+ )
|
|
|
}}
|
|
|
</Field>
|
|
|
)}
|
|
@@ -546,7 +517,7 @@ export default defineComponent({
|
|
|
name="xmlFileUrl"
|
|
|
class={styles.fieldTypeBottom}
|
|
|
modelValue={this.xmlFileUrl}
|
|
|
- rules={[{ required: true, message: '请选择MusicXML文件' }]}
|
|
|
+ rules={[{ required: true, message: '请选择XML/MusicXML文件' }]}
|
|
|
>
|
|
|
{{
|
|
|
label: () => (
|
|
@@ -554,7 +525,9 @@ export default defineComponent({
|
|
|
<span>
|
|
|
<i>*</i>上传XML
|
|
|
</span>
|
|
|
- <span class={styles.titleTip}>仅支持XML/MXML格式文件</span>
|
|
|
+ <span class={styles.titleTip}>
|
|
|
+ 仅支持XML/MusicXML格式文件
|
|
|
+ </span>
|
|
|
</div>
|
|
|
),
|
|
|
input: () =>
|
|
@@ -589,13 +562,20 @@ export default defineComponent({
|
|
|
class={[styles.fieldTypeBottom, styles.hideValue]}
|
|
|
modelValue={this.xmlFileUrl}
|
|
|
border={false}
|
|
|
- rules={[{ required: true, message: '请选择MusicXML文件' }]}
|
|
|
>
|
|
|
{{
|
|
|
label: () => (
|
|
|
<div class={styles.fieldTitle}>
|
|
|
- <span>
|
|
|
+ <span class={styles.titleName}>
|
|
|
<i>*</i>上传原音
|
|
|
+ <i
|
|
|
+ class={styles.iconQuestion}
|
|
|
+ onClick={() => {
|
|
|
+ this.messageTipStatus = true
|
|
|
+ this.messageTipTitle = '原音文件'
|
|
|
+ this.messageTipType = 'origin'
|
|
|
+ }}
|
|
|
+ ></i>
|
|
|
</span>
|
|
|
<span class={styles.titleTip}>仅支持MP3格式文件</span>
|
|
|
</div>
|
|
@@ -606,20 +586,15 @@ export default defineComponent({
|
|
|
|
|
|
{this.backgroundMp3s.map((mp3, index) => (
|
|
|
<Field
|
|
|
- name="xmlFileUrl"
|
|
|
+ name="url"
|
|
|
class={[styles.fieldTypeBottom, styles.musicTrack]}
|
|
|
- modelValue={this.xmlFileUrl}
|
|
|
+ modelValue={mp3.url}
|
|
|
+ rules={[{ required: true, message: '请选择原音文件文件' }]}
|
|
|
>
|
|
|
{{
|
|
|
label: () => (
|
|
|
<div class={styles.fieldTitle}>
|
|
|
<span>所属轨道:{mp3.trackName}</span>
|
|
|
- <span
|
|
|
- class={styles.titleTip}
|
|
|
- onClick={() => this.removeBackground(index)}
|
|
|
- >
|
|
|
- 删除
|
|
|
- </span>
|
|
|
</div>
|
|
|
),
|
|
|
input: () =>
|
|
@@ -627,8 +602,8 @@ export default defineComponent({
|
|
|
<Button
|
|
|
icon={UploadIcon}
|
|
|
class={styles.upbtn}
|
|
|
- loading={this.bgmp3Loading}
|
|
|
- onClick={this.naiveBGMp3File}
|
|
|
+ loading={mp3.loading}
|
|
|
+ onClick={() => this.naiveBGMp3File(index)}
|
|
|
>
|
|
|
{mp3.url ? this.fileName(mp3.url) : '上传原声文件'}
|
|
|
</Button>
|
|
@@ -646,93 +621,6 @@ export default defineComponent({
|
|
|
}}
|
|
|
</Field>
|
|
|
))}
|
|
|
-
|
|
|
- {/* <Field
|
|
|
- label="可用声部"
|
|
|
- placeholder=""
|
|
|
- inputAlign="right"
|
|
|
- isLink
|
|
|
- required
|
|
|
- readonly
|
|
|
- // v-model={this.subjectIds}
|
|
|
- onClick={() => (this.subJectVisible = true)}
|
|
|
- ></Field>
|
|
|
-
|
|
|
- {this.choiceSubject && this.choiceSubject.length > 0 && (
|
|
|
- <Field name="subjectIds" class={styles.showField}>
|
|
|
- {{
|
|
|
- input: () =>
|
|
|
- this.choiceSubject.length > 0 ? (
|
|
|
- this.choiceSubject.map((item: any) => (
|
|
|
- <Tag
|
|
|
- type="primary"
|
|
|
- size="large"
|
|
|
- plain
|
|
|
- class={styles.tags}
|
|
|
- closeable
|
|
|
- onClose={() => this.onRemoveSubject(item.id)}
|
|
|
- >
|
|
|
- {item.name}
|
|
|
- </Tag>
|
|
|
- ))
|
|
|
- ) : (
|
|
|
- <Empty
|
|
|
- style={{ width: '100%' }}
|
|
|
- description="请选择曲目标签"
|
|
|
- imageSize={0}
|
|
|
- />
|
|
|
- )
|
|
|
- }}
|
|
|
- </Field>
|
|
|
- )} */}
|
|
|
- {/* <Field
|
|
|
- label="可用乐器"
|
|
|
- placeholder=""
|
|
|
- inputAlign="right"
|
|
|
- isLink
|
|
|
- required
|
|
|
- readonly
|
|
|
- onClick={() => {
|
|
|
- // const cbsInstrumentList: any = []
|
|
|
- // this.cbsSubjectList.forEach(element => {
|
|
|
- // if (this.subjectIds.includes(element.id)) {
|
|
|
- // const instruments = element.instruments
|
|
|
- // ? element.instruments
|
|
|
- // : []
|
|
|
- // cbsInstrumentList.push(...instruments)
|
|
|
- // }
|
|
|
- // })
|
|
|
- // this.cbsInstrumentList = cbsInstrumentList
|
|
|
- // this.instrumentVisible = true
|
|
|
- }}
|
|
|
- ></Field>
|
|
|
- {this.choiceInstrument && this.choiceInstrument.length > 0 && (
|
|
|
- <Field name="instrumentIds" class={styles.showField}>
|
|
|
- {{
|
|
|
- input: () =>
|
|
|
- this.choiceInstrument.length > 0 ? (
|
|
|
- this.choiceInstrument.map((item: any) => (
|
|
|
- <Tag
|
|
|
- type="primary"
|
|
|
- size="large"
|
|
|
- plain
|
|
|
- class={styles.tags}
|
|
|
- closeable
|
|
|
- onClose={() => this.onRemoveInstrument(item.id)}
|
|
|
- >
|
|
|
- {item.name}
|
|
|
- </Tag>
|
|
|
- ))
|
|
|
- ) : (
|
|
|
- <Empty
|
|
|
- style={{ width: '100%' }}
|
|
|
- description="请选择曲目标签"
|
|
|
- imageSize={0}
|
|
|
- />
|
|
|
- )
|
|
|
- }}
|
|
|
- </Field>
|
|
|
- )} */}
|
|
|
</CellGroup>
|
|
|
|
|
|
<CellGroup class={[styles.area]}>
|
|
@@ -743,12 +631,13 @@ export default defineComponent({
|
|
|
<Field
|
|
|
label="曲目名称"
|
|
|
clearable
|
|
|
- name="musicSheetName"
|
|
|
- modelValue={this.musicSheetName}
|
|
|
+ name="name"
|
|
|
+ modelValue={this.name}
|
|
|
rules={[{ required: true, message: '请输入曲目名称' }]}
|
|
|
+ errorMessageAlign="right"
|
|
|
placeholder="请输入曲目名称"
|
|
|
inputAlign="right"
|
|
|
- onUpdate:modelValue={val => (this.musicSheetName = val)}
|
|
|
+ onUpdate:modelValue={val => (this.name = val)}
|
|
|
/>
|
|
|
|
|
|
<Field
|
|
@@ -757,6 +646,7 @@ export default defineComponent({
|
|
|
name="composer"
|
|
|
modelValue={this.composer}
|
|
|
rules={[{ required: true, message: '请输入音乐人' }]}
|
|
|
+ errorMessageAlign="right"
|
|
|
placeholder="请输入音乐人"
|
|
|
inputAlign="right"
|
|
|
onUpdate:modelValue={val => (this.composer = val)}
|
|
@@ -790,55 +680,26 @@ export default defineComponent({
|
|
|
autoCropWidth: 600,
|
|
|
autoCropHeight: 600
|
|
|
}}
|
|
|
- v-model={this.titleImg}
|
|
|
+ v-model={this.musicCover}
|
|
|
class={styles.imgContainer}
|
|
|
/>
|
|
|
)
|
|
|
}}
|
|
|
</Field>
|
|
|
|
|
|
- {/* <Field
|
|
|
- required
|
|
|
- label="重复节拍时长"
|
|
|
- name="repeatedBeats"
|
|
|
- center
|
|
|
- inputAlign="right"
|
|
|
- >
|
|
|
- {{
|
|
|
- input: () => (
|
|
|
- <RadioGroup
|
|
|
- class={styles['radio-group']}
|
|
|
- modelValue={this.repeatedBeats}
|
|
|
- onUpdate:modelValue={val => (this.repeatedBeats = val)}
|
|
|
- >
|
|
|
- {Object.keys(teachershowHasBeatType).map((item: string) => {
|
|
|
- console.log(item, 'teachershowHasBeatType')
|
|
|
- const isActive = item === String(this.repeatedBeats)
|
|
|
- const type = isActive ? 'primary' : 'default'
|
|
|
- return (
|
|
|
- <Radio class={styles.radio} name={item}>
|
|
|
- <Tag size="large" plain={isActive} type={type}>
|
|
|
- {teachershowHasBeatType[item]}
|
|
|
- </Tag>
|
|
|
- </Radio>
|
|
|
- )
|
|
|
- })}
|
|
|
- </RadioGroup>
|
|
|
- )
|
|
|
- }}
|
|
|
- </Field> */}
|
|
|
<Field
|
|
|
required
|
|
|
label="曲目速度"
|
|
|
center
|
|
|
name="playSpeed"
|
|
|
inputAlign="right"
|
|
|
+ rules={[{ required: true, message: '请输入曲目速度' }]}
|
|
|
+ errorMessageAlign="right"
|
|
|
v-model={this.playSpeed}
|
|
|
class={styles.inputControl}
|
|
|
formatter={this.onFormatter2}
|
|
|
></Field>
|
|
|
|
|
|
- {/* tagVisibility */}
|
|
|
<Field
|
|
|
label="曲目标签"
|
|
|
placeholder=""
|
|
@@ -853,6 +714,7 @@ export default defineComponent({
|
|
|
{this.tags.length > 0 && (
|
|
|
<Field
|
|
|
name="tags"
|
|
|
+ class={styles.showField}
|
|
|
modelValue={this.tags.length ? 1 : undefined}
|
|
|
rules={[{ required: true, message: '请选择曲目标签' }]}
|
|
|
// @ts-ignore
|
|
@@ -860,7 +722,12 @@ export default defineComponent({
|
|
|
input: () =>
|
|
|
this.tags.length > 0 ? (
|
|
|
this.tags.map((item: any) => (
|
|
|
- <Tag type="primary" size="large" class={styles.tags}>
|
|
|
+ <Tag
|
|
|
+ type="primary"
|
|
|
+ size="large"
|
|
|
+ class={styles.tags}
|
|
|
+ closeable
|
|
|
+ >
|
|
|
{this.tagsNames[item]}
|
|
|
</Tag>
|
|
|
))
|
|
@@ -937,9 +804,11 @@ export default defineComponent({
|
|
|
formatter={this.onFormatter}
|
|
|
v-slots={{ button: () => '元' }}
|
|
|
modelValue={this.musicPrice}
|
|
|
+ maxlength={8}
|
|
|
rules={[
|
|
|
{ required: true, validator, message: '请输入收费价格' }
|
|
|
]}
|
|
|
+ errorMessageAlign="right"
|
|
|
onUpdate:modelValue={val => (this.musicPrice = val)}
|
|
|
/>
|
|
|
|
|
@@ -979,7 +848,7 @@ export default defineComponent({
|
|
|
</Button>
|
|
|
</div>
|
|
|
</ColSticky>
|
|
|
- <Popup
|
|
|
+ {/* <Popup
|
|
|
show={this.showPicker}
|
|
|
round
|
|
|
position="bottom"
|
|
@@ -1001,42 +870,6 @@ export default defineComponent({
|
|
|
this.showPicker = false
|
|
|
}}
|
|
|
/>
|
|
|
- </Popup>
|
|
|
-
|
|
|
- {/* <Popup
|
|
|
- show={this.subJectVisible}
|
|
|
- round
|
|
|
- closeable
|
|
|
- position="bottom"
|
|
|
- style={{ height: '60%' }}
|
|
|
- teleport="body"
|
|
|
- onUpdate:show={val => (this.subJectVisible = val)}
|
|
|
- >
|
|
|
- <SubjectModel
|
|
|
- show={this.subJectVisible}
|
|
|
- child={this.cbsSubjectList}
|
|
|
- choiceSubjectIds={this.subjectIds}
|
|
|
- onConfirm={this.onChoiceSubject}
|
|
|
- onClose={() => (this.subJectVisible = false)}
|
|
|
- />
|
|
|
- </Popup>
|
|
|
-
|
|
|
- <Popup
|
|
|
- show={this.instrumentVisible}
|
|
|
- round
|
|
|
- closeable
|
|
|
- position="bottom"
|
|
|
- style={{ height: '60%' }}
|
|
|
- teleport="body"
|
|
|
- onUpdate:show={val => (this.instrumentVisible = val)}
|
|
|
- >
|
|
|
- <InstrumentModal
|
|
|
- show={this.instrumentVisible}
|
|
|
- child={this.cbsInstrumentList}
|
|
|
- choiceSubjectIds={this.musicalInstrumentIdList}
|
|
|
- onConfirm={this.onChoiceInstrument}
|
|
|
- onClose={() => (this.instrumentVisible = false)}
|
|
|
- />
|
|
|
</Popup> */}
|
|
|
|
|
|
<Popup
|
|
@@ -1050,7 +883,9 @@ export default defineComponent({
|
|
|
>
|
|
|
<SelectTag
|
|
|
onConfirm={this.onComfirm}
|
|
|
- onCancel={() => {}}
|
|
|
+ onCancel={() => {
|
|
|
+ this.tagVisibility = false
|
|
|
+ }}
|
|
|
rowSingle
|
|
|
defaultValue={this.tags.join(',')}
|
|
|
needAllButton={false}
|