|
@@ -1,8 +1,11 @@
|
|
|
import { defineComponent } from 'vue'
|
|
|
-import { Button, Field, Sticky, Form } from 'vant'
|
|
|
-import ColArea from '@/components/col-area'
|
|
|
+import { Button, Field, Sticky, Form, Tag, Radio, RadioGroup } from 'vant'
|
|
|
+import ColFieldGroup from '@/components/col-field-group'
|
|
|
import { MusicType } from 'src/teacher/music/list/item.d'
|
|
|
import ColField from '@/components/col-field'
|
|
|
+import { teacherChargeType } from '@/constant/music'
|
|
|
+import { getXmlInfo, FormatXMLInfo } from '@/helpers/music-xml'
|
|
|
+import Upload from './upload'
|
|
|
import styles from './index.module.less'
|
|
|
|
|
|
export default defineComponent({
|
|
@@ -10,7 +13,23 @@ export default defineComponent({
|
|
|
data() {
|
|
|
return {
|
|
|
musicSheetName: '',
|
|
|
- selectTagVisible: false
|
|
|
+ composer: '',
|
|
|
+ speed: '',
|
|
|
+ chargeType: '0',
|
|
|
+ musicPrice: '',
|
|
|
+ selectTagVisible: false,
|
|
|
+ tags: ['12312'] as string[],
|
|
|
+ formated: {} as FormatXMLInfo
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ formated() {
|
|
|
+ this.mergeXmlData(this.formated)
|
|
|
+ },
|
|
|
+ chargeType() {
|
|
|
+ if (this.chargeType === '0') {
|
|
|
+ this.musicPrice = ''
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
@@ -19,15 +38,45 @@ export default defineComponent({
|
|
|
},
|
|
|
failed() {
|
|
|
console.log('failed', this.musicSheetName)
|
|
|
+ },
|
|
|
+ mergeXmlData(data: FormatXMLInfo) {
|
|
|
+ this.formated = data
|
|
|
+ if (!this.musicSheetName) {
|
|
|
+ this.musicSheetName = data.title
|
|
|
+ }
|
|
|
+ if (!this.composer) {
|
|
|
+ this.composer = data.composer
|
|
|
+ }
|
|
|
+ if (!this.speed && data.speed) {
|
|
|
+ this.speed = '' + data.speed
|
|
|
+ }
|
|
|
+ },
|
|
|
+ readerFile(file: File) {
|
|
|
+ const reader = new FileReader()
|
|
|
+ reader.onload = () => {
|
|
|
+ const xml = reader.result as string
|
|
|
+ this.formated = getXmlInfo(xml)
|
|
|
+ }
|
|
|
+ reader.readAsText(file)
|
|
|
}
|
|
|
},
|
|
|
render() {
|
|
|
return (
|
|
|
<Form onSubmit={this.submit} onFailed={this.failed}>
|
|
|
<div class={styles.container}>
|
|
|
- <ColArea class={styles.area}>
|
|
|
+ <ColFieldGroup class={styles.area}>
|
|
|
+ <ColField required title="MusicXML文件">
|
|
|
+ <Upload
|
|
|
+ onUpdate:modelValue={val => console.log(val)}
|
|
|
+ accept=".xml"
|
|
|
+ formatFile={this.readerFile}
|
|
|
+ />
|
|
|
+ </ColField>
|
|
|
+ </ColFieldGroup>
|
|
|
+ <ColFieldGroup class={styles.area}>
|
|
|
<ColField required title="曲目名称">
|
|
|
<Field
|
|
|
+ clearable
|
|
|
name="musicSheetName"
|
|
|
modelValue={this.musicSheetName}
|
|
|
rules={[{ required: true, message: '请输入曲目名称' }]}
|
|
@@ -38,16 +87,21 @@ export default defineComponent({
|
|
|
</ColField>
|
|
|
<ColField required title="作曲人">
|
|
|
<Field
|
|
|
+ clearable
|
|
|
class={styles['clear-px']}
|
|
|
placeholder="请输入作曲人姓名"
|
|
|
+ name="composer"
|
|
|
+ modelValue={this.composer}
|
|
|
+ rules={[{ required: true, message: '请输入作曲人姓名' }]}
|
|
|
+ onUpdate:modelValue={val => (this.composer = val)}
|
|
|
/>
|
|
|
</ColField>
|
|
|
- </ColArea>
|
|
|
- <ColArea class={styles.area}>
|
|
|
+ </ColFieldGroup>
|
|
|
+ <ColFieldGroup class={styles.area}>
|
|
|
<ColField
|
|
|
required
|
|
|
title="曲目标签"
|
|
|
- v-slos={{
|
|
|
+ v-slots={{
|
|
|
right: () => (
|
|
|
<Button
|
|
|
class={styles.select}
|
|
@@ -61,36 +115,73 @@ export default defineComponent({
|
|
|
)
|
|
|
}}
|
|
|
>
|
|
|
- <Field class={styles['clear-px']} placeholder="请输入曲目名称" />
|
|
|
- </ColField>
|
|
|
- </ColArea>
|
|
|
- <ColArea class={styles.area}>
|
|
|
- <ColField required title="默认速度">
|
|
|
- <Field class={styles['clear-px']} placeholder="请输入默认速度" />
|
|
|
- </ColField>
|
|
|
- </ColArea>
|
|
|
- <ColArea class={styles.area}>
|
|
|
- <ColField required title="默认速度">
|
|
|
- <Field class={styles['clear-px']} placeholder="请输入默认速度" />
|
|
|
+ {this.tags.length > 0 &&
|
|
|
+ this.tags.map((item: any) => (
|
|
|
+ <Tag
|
|
|
+ type="primary"
|
|
|
+ size="large"
|
|
|
+ closeable
|
|
|
+ onClose={() => console.log(item)}
|
|
|
+ >
|
|
|
+ {item}
|
|
|
+ </Tag>
|
|
|
+ ))}
|
|
|
</ColField>
|
|
|
- </ColArea>
|
|
|
- <ColArea class={styles.area}>
|
|
|
+ </ColFieldGroup>
|
|
|
+ <ColFieldGroup class={styles.area}>
|
|
|
<ColField required title="默认速度">
|
|
|
- <Field class={styles['clear-px']} placeholder="请输入默认速度" />
|
|
|
+ <Field
|
|
|
+ clearable
|
|
|
+ name="playSpeed"
|
|
|
+ modelValue={this.speed}
|
|
|
+ rules={[{ required: true, message: '请输入默认速度' }]}
|
|
|
+ onUpdate:modelValue={val => (this.speed = val)}
|
|
|
+ class={styles['clear-px']}
|
|
|
+ placeholder="请输入默认速度"
|
|
|
+ />
|
|
|
</ColField>
|
|
|
- </ColArea>
|
|
|
- <ColArea class={styles.area}>
|
|
|
- <ColField required title="收费价格">
|
|
|
- <Field class={styles['clear-px']} placeholder="请输入收费价格" />
|
|
|
+ <ColField required title="是否收费">
|
|
|
+ <RadioGroup
|
|
|
+ class={styles['radio-group']}
|
|
|
+ modelValue={this.chargeType}
|
|
|
+ onUpdate:modelValue={val => (this.chargeType = val)}
|
|
|
+ >
|
|
|
+ {Object.keys(teacherChargeType).map((item: string) => {
|
|
|
+ const isActive = item === this.chargeType
|
|
|
+ const type = isActive ? 'primary' : 'default'
|
|
|
+ return (
|
|
|
+ <Radio class={styles.radio} name={item}>
|
|
|
+ <Tag size="large" plain={isActive} type={type}>
|
|
|
+ {teacherChargeType[item]}
|
|
|
+ </Tag>
|
|
|
+ </Radio>
|
|
|
+ )
|
|
|
+ })}
|
|
|
+ </RadioGroup>
|
|
|
</ColField>
|
|
|
- </ColArea>
|
|
|
- <div class={styles.rule}>
|
|
|
- <p>扣除手续费后该曲目预计收入为:</p>
|
|
|
- <p>
|
|
|
- 单课时:<span>5.8</span>元/人
|
|
|
- </p>
|
|
|
- <p>您的乐谱收入将在学员购买后结算到您的账户中</p>
|
|
|
- </div>
|
|
|
+ {this.chargeType === '2' && (
|
|
|
+ <ColField required title="收费价格">
|
|
|
+ <Field
|
|
|
+ clearable
|
|
|
+ class={styles['clear-px']}
|
|
|
+ placeholder="请输入收费价格"
|
|
|
+ v-slots={{ button: () => '元' }}
|
|
|
+ modelValue={this.musicPrice}
|
|
|
+ rules={[{ required: true, message: '请输入收费价格' }]}
|
|
|
+ onUpdate:modelValue={val => (this.musicPrice = val)}
|
|
|
+ />
|
|
|
+ </ColField>
|
|
|
+ )}
|
|
|
+ </ColFieldGroup>
|
|
|
+ {this.chargeType === '2' && (
|
|
|
+ <div class={styles.rule}>
|
|
|
+ <p>扣除手续费后该曲目预计收入为:</p>
|
|
|
+ <p>
|
|
|
+ 单课时:<span>5.8</span>元/人
|
|
|
+ </p>
|
|
|
+ <p>您的乐谱收入将在学员购买后结算到您的账户中</p>
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
</div>
|
|
|
<Sticky offsetBottom={0} position="bottom">
|
|
|
<div class={styles['button-area']}>
|