|
@@ -1,9 +1,33 @@
|
|
|
-import { defineComponent, reactive } from 'vue'
|
|
|
+import { defineComponent, onMounted, reactive } from 'vue'
|
|
|
import styles from './index.module.less'
|
|
|
import headTitle from './images/header-title.png'
|
|
|
import headPhone from './images/header-phone.png'
|
|
|
import headBg from './images/header-bg.png'
|
|
|
-import { CellGroup, Field, Form, Radio, RadioGroup, Tag, showToast } from 'vant'
|
|
|
+import iconHead from './images/icon-head.png'
|
|
|
+import iconBao from './images/icon-bao.png'
|
|
|
+import iconFree from './images/icon-free.png'
|
|
|
+import icon12 from './images/icon-12.png'
|
|
|
+import {
|
|
|
+ Button,
|
|
|
+ CellGroup,
|
|
|
+ Field,
|
|
|
+ Form,
|
|
|
+ Radio,
|
|
|
+ RadioGroup,
|
|
|
+ Tag,
|
|
|
+ showToast,
|
|
|
+ Image,
|
|
|
+ showImagePreview,
|
|
|
+ Cell,
|
|
|
+ Checkbox,
|
|
|
+ Picker,
|
|
|
+ Popup
|
|
|
+} from 'vant'
|
|
|
+import OSticky from '@/components/o-sticky'
|
|
|
+import { browser, getUrlCode, moneyFormat } from '@/helpers/utils'
|
|
|
+import request from '@/helpers/request'
|
|
|
+import { useRoute, useRouter } from 'vue-router'
|
|
|
+import { goWechatAuth, setLogout } from '@/state'
|
|
|
|
|
|
// 乐团交付,乐团停止或关闭,有新的交付团;则不允许报名
|
|
|
const classList: any = []
|
|
@@ -14,8 +38,10 @@ for (let i = 1; i <= 40; i++) {
|
|
|
export default defineComponent({
|
|
|
name: 'pre-goods-apply',
|
|
|
setup() {
|
|
|
+ const route = useRoute()
|
|
|
+ const router = useRouter()
|
|
|
const state = reactive({
|
|
|
- // code: '' as any, // 微信授权code码
|
|
|
+ code: '' as any, // 微信授权code码
|
|
|
detail: {} as any, // 学员详情
|
|
|
currentGrade: [
|
|
|
{ text: '一年级', value: 1 },
|
|
@@ -33,6 +59,9 @@ export default defineComponent({
|
|
|
gradeStatus: false,
|
|
|
classStatus: false,
|
|
|
subjectStatus: false,
|
|
|
+ registerInfo: {}, // 乐团信息
|
|
|
+ // 是否开启微信登录(测试使用)默认为false
|
|
|
+ testIsWeixin: true,
|
|
|
pattern: /^1(3|4|5|6|7|8|9)\d{9}$/,
|
|
|
nameReg: /^[\u4E00-\u9FA5]+$/,
|
|
|
subjectChangeStatus: false // 更换声部时
|
|
@@ -47,9 +76,64 @@ export default defineComponent({
|
|
|
registerSubjectId: '',
|
|
|
registerSubjectTxt: null, // 所在声部
|
|
|
parentName: null,
|
|
|
+ groupBuyType: null,
|
|
|
phone: null
|
|
|
})
|
|
|
|
|
|
+ // 获取乐团报名信息
|
|
|
+ const studentRegister = async () => {
|
|
|
+ try {
|
|
|
+ const { data } = await request.get(
|
|
|
+ '/api-student/orchestraRegister/register/' + route.query.id
|
|
|
+ )
|
|
|
+ const detail = data || {}
|
|
|
+ state.detail = detail
|
|
|
+ const grade: any = state.currentGrade.find((item: any) => item.value == detail.currentGrade)
|
|
|
+ const cls: any = state.classList.find((item: any) => item.value == detail.currentClass)
|
|
|
+ const subjects: any = state.subjectList.find(
|
|
|
+ (item: any) => item.value == detail.registerSubjectId
|
|
|
+ )
|
|
|
+ forms.username = detail.username
|
|
|
+ forms.sex = detail.sex ? 1 : 0
|
|
|
+ forms.currentGrade = detail.currentGrade
|
|
|
+ forms.currentGradeTxt = grade ? grade.text : ''
|
|
|
+ forms.currentClass = detail.currentClass
|
|
|
+ forms.currentClassTxt = cls ? cls.text : ''
|
|
|
+ forms.registerSubjectId = detail.registerSubjectId
|
|
|
+ forms.registerSubjectTxt = subjects ? subjects.text : ''
|
|
|
+ forms.parentName = detail.parentName
|
|
|
+ forms.phone = detail.phone
|
|
|
+ } catch (e) {
|
|
|
+ //
|
|
|
+ console.log(e)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取声部信息
|
|
|
+ const getSubjects = async () => {
|
|
|
+ try {
|
|
|
+ const subjects = await request.post(
|
|
|
+ '/api-student/open/orchestraSubjectConfig/pageByOrchestraId',
|
|
|
+ {
|
|
|
+ data: {
|
|
|
+ orchestraId: route.query.id,
|
|
|
+ page: 1,
|
|
|
+ rows: 100
|
|
|
+ }
|
|
|
+ }
|
|
|
+ )
|
|
|
+ const rows = subjects.data.rows || []
|
|
|
+ rows.forEach((item: any) => {
|
|
|
+ state.subjectList.push({
|
|
|
+ text: item.name,
|
|
|
+ value: item.subjectId
|
|
|
+ })
|
|
|
+ })
|
|
|
+ } catch {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
const validator = (val: any) => {
|
|
|
// 校验函数返回 true 表示校验通过,false 表示不通过
|
|
|
return state.nameReg.test(val) && val.length >= 2 && val.length <= 15
|
|
@@ -68,30 +152,97 @@ export default defineComponent({
|
|
|
|
|
|
// 乐团报名
|
|
|
const onSubmit = async () => {
|
|
|
- // try {
|
|
|
- // const params: any = {
|
|
|
- // orchestraId: route.query.id,
|
|
|
- // schoolId: state.detail.schoolId,
|
|
|
- // ...forms
|
|
|
- // }
|
|
|
- // // 判断是否已报过名
|
|
|
- // if (state.detail.id) {
|
|
|
- // params.id = state.detail.id
|
|
|
- // }
|
|
|
- // await request.post('/api-student/orchestraRegister/save', {
|
|
|
- // hideLoading: false,
|
|
|
- // data: {
|
|
|
- // ...params,
|
|
|
- // code: props.code
|
|
|
- // }
|
|
|
+ try {
|
|
|
+ const params: any = {
|
|
|
+ orchestraId: route.query.id,
|
|
|
+ schoolId: state.detail.schoolId,
|
|
|
+ ...forms
|
|
|
+ }
|
|
|
+ // 判断是否已报过名
|
|
|
+ if (state.detail.id) {
|
|
|
+ params.id = state.detail.id
|
|
|
+ }
|
|
|
+ await request.post('/api-student/orchestraRegister/save', {
|
|
|
+ hideLoading: false,
|
|
|
+ data: {
|
|
|
+ ...params,
|
|
|
+ code: state.code
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } catch {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const getRegisterStatus = async () => {
|
|
|
+ try {
|
|
|
+ const { data } = await request.get(
|
|
|
+ '/api-student/orchestraRegister/registerStatus/' + route.query.id
|
|
|
+ )
|
|
|
+ state.registerInfo = data || {}
|
|
|
+ } catch {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const getAppIdAndCode = async () => {
|
|
|
+ try {
|
|
|
+ const { data } = await request.get('/api-student/open/paramConfig/wechatAppId')
|
|
|
+ // 判断是否有微信appId
|
|
|
+ if (data) {
|
|
|
+ // goAuth(data)
|
|
|
+ goWechatAuth(data)
|
|
|
+ }
|
|
|
+ } catch {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ onMounted(async () => {
|
|
|
+ // state.code = route.query.code || ''
|
|
|
+ // console.log('pre register code: ' + state.code)
|
|
|
+ await getSubjects()
|
|
|
+ await studentRegister()
|
|
|
+
|
|
|
+ // 判断是否有授权码
|
|
|
+ // if (!props.code) {
|
|
|
+ // setLogout()
|
|
|
+ // const query = {
|
|
|
+ // returnUrl: route.path,
|
|
|
+ // ...route.query
|
|
|
+ // } as any
|
|
|
+ // router.replace({
|
|
|
+ // path: '/loginMusic',
|
|
|
+ // query: query
|
|
|
// })
|
|
|
- // setTimeout(() => {
|
|
|
- // // showToast('报名成功')
|
|
|
- // emit('next', 'payment')
|
|
|
- // }, 100)
|
|
|
- // } catch {
|
|
|
- // //
|
|
|
// }
|
|
|
+ })
|
|
|
+
|
|
|
+ // 先请求接口 判断是否有code
|
|
|
+ if (state.testIsWeixin) {
|
|
|
+ getRegisterStatus()
|
|
|
+ } else {
|
|
|
+ if (browser().weixin) {
|
|
|
+ // 微信公众号支付
|
|
|
+ //授权
|
|
|
+ const code = getUrlCode()
|
|
|
+ if (!code) {
|
|
|
+ getAppIdAndCode()
|
|
|
+ } else {
|
|
|
+ state.code = code
|
|
|
+ getRegisterStatus()
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ setLogout()
|
|
|
+ const query = {
|
|
|
+ returnUrl: route.path,
|
|
|
+ ...route.query
|
|
|
+ } as any
|
|
|
+ router.replace({
|
|
|
+ path: '/loginMusic',
|
|
|
+ query: query
|
|
|
+ })
|
|
|
+ }
|
|
|
}
|
|
|
return () => (
|
|
|
<div class={styles.goodsApply}>
|
|
@@ -103,8 +254,17 @@ export default defineComponent({
|
|
|
</div>
|
|
|
<img src={headPhone} class={styles.headPhone} />
|
|
|
</div>
|
|
|
- <Form validateFirst scrollToError onSubmit={onSubmit} ref="form" class={styles.form}>
|
|
|
- <CellGroup class={styles.applyCellGroup}>
|
|
|
+ <Form
|
|
|
+ validateFirst
|
|
|
+ // showError
|
|
|
+ // showErrorMessage={false}
|
|
|
+ errorMessageAlign="right"
|
|
|
+ scrollToError
|
|
|
+ onSubmit={onSubmit}
|
|
|
+ ref="form"
|
|
|
+ class={styles.form}
|
|
|
+ >
|
|
|
+ <CellGroup class={styles.applyCellGroup} border={false}>
|
|
|
<div class={[styles.title, styles.titleApply]}></div>
|
|
|
<Field
|
|
|
required
|
|
@@ -129,7 +289,8 @@ export default defineComponent({
|
|
|
type="primary"
|
|
|
class={[styles.radioSection, forms.sex === 1 ? styles.active : '']}
|
|
|
>
|
|
|
- <Radio class={styles.radioItem} name={1}></Radio>男生
|
|
|
+ <Radio class={styles.radioItem} name={1}></Radio>
|
|
|
+ 男生
|
|
|
</Tag>
|
|
|
<Tag
|
|
|
size="large"
|
|
@@ -198,7 +359,7 @@ export default defineComponent({
|
|
|
/>
|
|
|
</CellGroup>
|
|
|
|
|
|
- <CellGroup class={styles.applyCellGroup}>
|
|
|
+ <CellGroup class={styles.applyCellGroup} border={false}>
|
|
|
<div class={[styles.title, styles.titleParent]}></div>
|
|
|
<Field
|
|
|
required
|
|
@@ -221,23 +382,305 @@ export default defineComponent({
|
|
|
/>
|
|
|
</CellGroup>
|
|
|
|
|
|
- <CellGroup class={styles.applyCellGroup}>
|
|
|
+ <CellGroup class={styles.applyCellGroup} border={false}>
|
|
|
<div class={[styles.title, styles.titleTips]}></div>
|
|
|
|
|
|
<div class={styles.tipsContainer}>
|
|
|
- <p class={styles.line}>开训前,家长需准备好①乐器②管乐AI学练工具,准备方式不限;</p>
|
|
|
<p class={styles.line}>
|
|
|
+ <i class={[styles.num, styles.numOne]}></i>
|
|
|
+ 开训前,家长需准备好①乐器②管乐AI学练工具,准备方式不限;
|
|
|
+ </p>
|
|
|
+ <p class={styles.line}>
|
|
|
+ <i class={[styles.num, styles.numTwo]}></i>
|
|
|
为了降低家长投入压力,可参与项目支持方提供的AI学练工具团购,政策如下:
|
|
|
<p class={[styles.child]}>
|
|
|
- 1、支持方免费提供一支全新乐器供学生训练(可带回家) ;<br />
|
|
|
- 2、乐器提供时间为一年,如期满继续训练,乐器将赠送至学生以作鼓励;
|
|
|
+ 1、支持方<span style="color: #F67146">免费</span>
|
|
|
+ 提供一支全新乐器供学生训练(可带回家) ;<br />
|
|
|
+ 2、乐器提供时间为一年,如期满继续训练,乐器将
|
|
|
+ <span style="color: #F67146">赠送</span>至学生以作鼓励;
|
|
|
<br />
|
|
|
- 3、如期间或期满不再训练,家长归还乐器即可,无需额外支付乐器费用。
|
|
|
+ 3、如期间或期满不再训练,家长归还乐器即可,
|
|
|
+ <span style="color: #F67146">无需额外支付</span>乐器费用。
|
|
|
</p>
|
|
|
</p>
|
|
|
</div>
|
|
|
</CellGroup>
|
|
|
+
|
|
|
+ <CellGroup class={styles.applyCellGroup} border={false}>
|
|
|
+ <div class={[styles.title, styles.titleTool]}></div>
|
|
|
+ <Field
|
|
|
+ required
|
|
|
+ label="请选择训练工具的准备方法:"
|
|
|
+ labelAlign="top"
|
|
|
+ rules={[{ required: true, message: '请选择训练工具的准备方法' }]}
|
|
|
+ >
|
|
|
+ {{
|
|
|
+ input: () => (
|
|
|
+ <RadioGroup v-model={forms.groupBuyType} class={styles.toolRadioGroup}>
|
|
|
+ <Tag
|
|
|
+ size="large"
|
|
|
+ type="primary"
|
|
|
+ class={[
|
|
|
+ styles.radioSectionTag,
|
|
|
+ styles.radioSection,
|
|
|
+ forms.groupBuyType === 'GROUP_BUY' ? styles.active : ''
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <Radio
|
|
|
+ class={styles.radioItem}
|
|
|
+ name={'GROUP_BUY'}
|
|
|
+ // disabled={true}
|
|
|
+ onClick={() => {
|
|
|
+ // console.log(111)
|
|
|
+ }}
|
|
|
+ ></Radio>
|
|
|
+ 参与团购
|
|
|
+ </Tag>
|
|
|
+ <Tag
|
|
|
+ size="large"
|
|
|
+ type="primary"
|
|
|
+ class={[
|
|
|
+ styles.radioSectionTag,
|
|
|
+ styles.radioSection,
|
|
|
+ forms.groupBuyType === 'SELF' ? styles.active : ''
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <Radio class={styles.radioItem} name={'SELF'}></Radio>自行准备
|
|
|
+ </Tag>
|
|
|
+ </RadioGroup>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </Field>
|
|
|
+ </CellGroup>
|
|
|
+
|
|
|
+ {forms.groupBuyType === 'GROUP_BUY' && (
|
|
|
+ <>
|
|
|
+ <CellGroup class={[styles.applyCellGroup, styles.groupBuy]} border={false}>
|
|
|
+ <Cell border={false}>
|
|
|
+ {{
|
|
|
+ icon: () => (
|
|
|
+ <Image
|
|
|
+ src={'https://cloud-coach.ks3-cn-beijing.ksyuncs.com/1696816717584.png'}
|
|
|
+ class={styles.goodsImg}
|
|
|
+ />
|
|
|
+ ),
|
|
|
+ value: () => (
|
|
|
+ <div class={styles.goodsInfo}>
|
|
|
+ <div class={styles.goodsTitle}>
|
|
|
+ 管乐AI学练工具 <img src={icon12} />
|
|
|
+ </div>
|
|
|
+ <p class={styles.goodsTips}>乐团首次训练之日起生效</p>
|
|
|
+ <p class={[styles.goodsMemo, 'van-multi-ellipsis--l2']}>
|
|
|
+ 乐团云教材、课件,乐团声部、合奏、考级等
|
|
|
+ </p>
|
|
|
+ <div class={styles.goodsPrice}>
|
|
|
+ <div class={styles.priceGroup}>
|
|
|
+ 团购价:
|
|
|
+ <p>
|
|
|
+ <span>¥</span> 2,900.00
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
+ <div class={styles.priceOrigin}>原价: ¥2,900.00</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </Cell>
|
|
|
+ <Cell border={false}>
|
|
|
+ {{
|
|
|
+ icon: () => (
|
|
|
+ <Image
|
|
|
+ src={'https://cloud-coach.ks3-cn-beijing.ksyuncs.com/1696816717584.png'}
|
|
|
+ class={styles.goodsImg}
|
|
|
+ />
|
|
|
+ ),
|
|
|
+ value: () => (
|
|
|
+ <div class={styles.goodsInfo}>
|
|
|
+ <div class={styles.goodsTitle}>
|
|
|
+ 管乐AI学练工具 <img src={iconFree} />
|
|
|
+ </div>
|
|
|
+ <p class={styles.goodsTips}>乐团首次训练之日起生效</p>
|
|
|
+ <p class={[styles.goodsMemo, 'van-multi-ellipsis--l2']}>
|
|
|
+ 乐团云教材、课件,乐团声部、合奏、考级等
|
|
|
+ </p>
|
|
|
+ <div class={styles.goodsPrice}>
|
|
|
+ <div class={styles.priceGroup}>
|
|
|
+ 团购价:
|
|
|
+ <p>
|
|
|
+ <span>¥</span> 2,900.00
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
+ <div class={styles.priceOrigin}>原价: ¥2,900.00</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </Cell>
|
|
|
+
|
|
|
+ <Cell>
|
|
|
+ {{
|
|
|
+ icon: () => <img src={iconBao} class={styles.iconBao} />,
|
|
|
+ value: () => (
|
|
|
+ <div class={styles.baoContainer}>
|
|
|
+ <div class={styles.baoTitle}>下校检查乐器 1-2次/学期</div>
|
|
|
+ <div class={styles.baoPrice}>
|
|
|
+ <p>
|
|
|
+ <span class={styles.prefix}>¥</span> 300.00
|
|
|
+ <span class={styles.suffix}>/年</span>
|
|
|
+ </p>
|
|
|
+ <Checkbox></Checkbox>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </Cell>
|
|
|
+ </CellGroup>
|
|
|
+ <OSticky position="bottom">
|
|
|
+ <div class={styles.paymentContainer}>
|
|
|
+ <div class={styles.payemntPrice}>
|
|
|
+ <p class={styles.needPrice}>
|
|
|
+ 总计:
|
|
|
+ <span class={styles.numFont}>
|
|
|
+ <span>¥ </span>
|
|
|
+
|
|
|
+ {moneyFormat(10)}
|
|
|
+ </span>
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
+ <div class={styles.paymentBtn}>
|
|
|
+ <Button
|
|
|
+ color="linear-gradient(135deg, #FF8C4A 0%, #FF531C 100%)"
|
|
|
+ round
|
|
|
+ native-type="submit"
|
|
|
+ >
|
|
|
+ 团购支付
|
|
|
+ </Button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </OSticky>
|
|
|
+ </>
|
|
|
+ )}
|
|
|
+
|
|
|
+ {forms.groupBuyType === 'SELF' && (
|
|
|
+ <>
|
|
|
+ <CellGroup class={[styles.applyCellGroup, styles.self]} border={false}>
|
|
|
+ <div class={styles.toolImg}>
|
|
|
+ <Image
|
|
|
+ src={'https://cloud-coach.ks3-cn-beijing.ksyuncs.com/1696816717584.png'}
|
|
|
+ onClick={() => {
|
|
|
+ showImagePreview([
|
|
|
+ 'https://cloud-coach.ks3-cn-beijing.ksyuncs.com/1696816717584.png'
|
|
|
+ ])
|
|
|
+ }}
|
|
|
+ />
|
|
|
+
|
|
|
+ <div class={styles.toolImgOverflow}>
|
|
|
+ <Button
|
|
|
+ onClick={() => {
|
|
|
+ showImagePreview([
|
|
|
+ 'https://cloud-coach.ks3-cn-beijing.ksyuncs.com/1696816717584.png'
|
|
|
+ ])
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ 点击查看《乐团训练工具标准配置表》
|
|
|
+ </Button>
|
|
|
+ <img src={iconHead} class={styles.iconHead} />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <Field
|
|
|
+ required
|
|
|
+ label="您计划配置的乐器品牌"
|
|
|
+ labelAlign="top"
|
|
|
+ border={false}
|
|
|
+ placeholder="请填写您计划配置的乐器品牌"
|
|
|
+ v-model={forms.parentName}
|
|
|
+ maxlength={30}
|
|
|
+ class={styles.toolInput}
|
|
|
+ rules={[{ required: true, message: '请填写您计划配置的乐器品牌' }]}
|
|
|
+ />
|
|
|
+ <Field
|
|
|
+ required
|
|
|
+ label="您计划配置的AI学练工具品牌"
|
|
|
+ labelAlign="top"
|
|
|
+ border={false}
|
|
|
+ class={styles.toolInput}
|
|
|
+ placeholder="请填写您计划配置的AI学练工具品牌"
|
|
|
+ v-model={forms.phone}
|
|
|
+ maxlength={30}
|
|
|
+ rules={[{ required: true, message: '请填写您计划配置的AI学练工具品牌' }]}
|
|
|
+ />
|
|
|
+ </CellGroup>
|
|
|
+
|
|
|
+ <div class={'btnGroup'} style={{ paddingTop: '30px' }}>
|
|
|
+ <Button
|
|
|
+ type="primary"
|
|
|
+ color="linear-gradient(135deg, #FF8C4A 0%, #FF531C 100%)"
|
|
|
+ round
|
|
|
+ block
|
|
|
+ native-type="submit"
|
|
|
+ >
|
|
|
+ 提交
|
|
|
+ </Button>
|
|
|
+ </div>
|
|
|
+ </>
|
|
|
+ )}
|
|
|
</Form>
|
|
|
+
|
|
|
+ {/* 年级 */}
|
|
|
+ <Popup
|
|
|
+ v-model:show={state.gradeStatus}
|
|
|
+ position="bottom"
|
|
|
+ round
|
|
|
+ safeAreaInsetBottom
|
|
|
+ // duration={0}
|
|
|
+ lazyRender={false}
|
|
|
+ class={'popupBottomSearch'}
|
|
|
+ >
|
|
|
+ <Picker
|
|
|
+ showToolbar
|
|
|
+ columns={state.currentGrade}
|
|
|
+ onCancel={() => (state.gradeStatus = false)}
|
|
|
+ onConfirm={(val: any) => {
|
|
|
+ const selectedOption = val.selectedOptions[0]
|
|
|
+ forms.currentGrade = selectedOption.value
|
|
|
+ forms.currentGradeTxt = selectedOption.text
|
|
|
+ state.gradeStatus = false
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </Popup>
|
|
|
+ {/* 班级 */}
|
|
|
+ <Popup v-model:show={state.classStatus} position="bottom" round class={'popupBottomSearch'}>
|
|
|
+ <Picker
|
|
|
+ showToolbar
|
|
|
+ columns={state.classList}
|
|
|
+ onCancel={() => (state.classStatus = false)}
|
|
|
+ onConfirm={(val: any) => {
|
|
|
+ const selectedOption = val.selectedOptions[0]
|
|
|
+ forms.currentClass = selectedOption.value
|
|
|
+ forms.currentClassTxt = selectedOption.text
|
|
|
+ state.classStatus = false
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </Popup>
|
|
|
+ {/* 声部 */}
|
|
|
+ <Popup
|
|
|
+ v-model:show={state.subjectStatus}
|
|
|
+ position="bottom"
|
|
|
+ round
|
|
|
+ class={'popupBottomSearch'}
|
|
|
+ >
|
|
|
+ <Picker
|
|
|
+ showToolbar
|
|
|
+ columns={state.subjectList}
|
|
|
+ onCancel={() => (state.subjectStatus = false)}
|
|
|
+ onConfirm={(val: any) => {
|
|
|
+ const selectedOption = val.selectedOptions[0]
|
|
|
+ forms.registerSubjectId = selectedOption.value
|
|
|
+ forms.registerSubjectTxt = selectedOption.text
|
|
|
+ state.subjectStatus = false
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </Popup>
|
|
|
</div>
|
|
|
)
|
|
|
}
|