Browse Source

更新样式与考试功能

lex 2 years ago
parent
commit
13f43f3299
34 changed files with 333 additions and 180 deletions
  1. 10 11
      public/project/initiation.html
  2. 10 12
      public/project/preRegister.html
  3. 14 14
      public/project/schoolRegister.html
  4. 6 18
      src/school/companion-teacher/companion-teacher-register.tsx
  5. 5 12
      src/school/manage-teacher/manage-teacher-register.tsx
  6. 2 2
      src/school/train-planning/component/train-content/index.tsx
  7. 4 4
      src/school/train-planning/modal/timer/index.tsx
  8. BIN
      src/student/download/images/download_bg.png
  9. BIN
      src/student/download/images/manage-center.png
  10. BIN
      src/student/download/images/manage_bg.png
  11. BIN
      src/student/download/images/student-center.png
  12. BIN
      src/student/download/images/student_bg.png
  13. BIN
      src/student/download/images/teacher-center.png
  14. BIN
      src/student/download/images/teacher_bg.png
  15. 0 1
      src/student/download/index.tsx
  16. 13 1
      src/student/music-group/layout/login.tsx
  17. 6 5
      src/student/music-group/pre-apply/component/payment.tsx
  18. 1 1
      src/student/music-group/pre-apply/index.module.less
  19. 8 4
      src/views/unit-test/examination-mode/index.tsx
  20. BIN
      src/views/unit-test/images/icon-pass-check.png
  21. 2 2
      src/views/unit-test/index.tsx
  22. 19 0
      src/views/unit-test/model/anser-title/index.module.less
  23. 16 2
      src/views/unit-test/model/anser-title/index.tsx
  24. 1 1
      src/views/unit-test/model/answer-analysis/index.module.less
  25. 26 13
      src/views/unit-test/model/answer-list/index.tsx
  26. 7 1
      src/views/unit-test/model/choice-question/index.tsx
  27. 7 0
      src/views/unit-test/model/drag-question/index.tsx
  28. 8 8
      src/views/unit-test/model/keep-look-question/index.tsx
  29. 11 3
      src/views/unit-test/model/play-question/index.tsx
  30. 8 7
      src/views/unit-test/practice-mode/index.tsx
  31. 3 2
      src/views/unit-test/test-exercise/index.tsx
  32. 6 1
      src/views/unit-test/unit-create/uni-last.tsx
  33. 101 45
      src/views/unit-test/unit-detail/index.tsx
  34. 39 10
      src/views/unit-test/unit-list/unitDetail.tsx

+ 10 - 11
public/project/initiation.html

@@ -188,13 +188,12 @@
     <van-form validate-first scroll-to-error @submit="onSubmit" ref='form' class="form">
       <div class="top-tips">科学的教育与关爱,足以改变世界。我们希望,学生的未来会因您和我们的共同努力而更加光辉灿烂!</div>
       <van-cell-group inset class="cell-group">
-        <van-field required type="tel" @blur='checkchangePhone' maxlength="11" minlength="11" label="联系电话(直接监护人)"
+        <van-field type="tel" @blur='checkchangePhone' maxlength="11" minlength="11" label="联系电话(直接监护人)"
           v-model="stu.phone" name="phone" :rules="[{ pattern, message: '输入监护人手机号码有误' }]" placeholder="请输入监护人手机号码">
         </van-field>
-        <van-field required label="学员姓名" :rules="[{ validator, message }]" name="username" v-model="stu.username"
+        <van-field label="学员姓名" :rules="[{ validator, message }]" name="username" v-model="stu.username"
           placeholder="请填写学员真实姓名" :disabled='checkPhone'></van-field>
-        <van-field required label="性别" name="sex" :disabled='checkPhone'
-          :rules="[{ required: true, message: '请选择性别' }]">
+        <van-field label="性别" name="sex" :disabled='checkPhone' :rules="[{ required: true, message: '请选择性别' }]">
           <template #input>
             <van-radio-group v-model="stu.sex" :disabled='checkPhone' checked-color="#FF8057" direction="horizontal">
               <van-tag size="large" type="primary" :color="!(stu.sex === 1) || checkPhone ? '#EAEAEA' : '#FF8057'"
@@ -208,7 +207,7 @@
             </van-radio-group>
           </template>
         </van-field>
-        <van-field required label="在读年级" :disabled='checkPhone' v-model="stu.currentGrade" readonly name="currentGrade"
+        <van-field label="在读年级" :disabled='checkPhone' v-model="stu.currentGrade" readonly name="currentGrade"
           :rules="[{ required: true, message: '请选择在读年级', trigger: 'onChange' }]" @click="() => showPicker = true"
           placeholder="请选择在读年级" clickable>
           <template #right-icon>
@@ -216,7 +215,7 @@
           </template>
         </van-field>
         <van-field v-show="false" v-model="stu.currentGradeNum" name="currentGradeNum" readonly></van-field>
-        <van-field required label="所在班级" :disabled='checkPhone' v-model="stu.currentClass" readonly name="currentClass"
+        <van-field label="所在班级" :disabled='checkPhone' v-model="stu.currentClass" readonly name="currentClass"
           :rules="[{ required: true, message: '请选择所在班级', trigger: 'onChange' }]" @click="() => classPicker = true"
           placeholder="请选择所在班级">
           <template #right-icon>
@@ -224,7 +223,7 @@
           </template>
         </van-field>
 
-        <van-field required label="孩子是否有学习过乐器" :disabled='checkPhone' name="musicalInstrumentsLearning"
+        <van-field label="孩子是否有学习过乐器" :disabled='checkPhone' name="musicalInstrumentsLearning"
           :rules="[{ required: true, message: '请选择孩子是否有学习过乐器' }]">
           <template #input>
             <van-radio-group v-model="stu.hasLearningExperience" :disabled='checkPhone' checked-color="#FF8057"
@@ -245,8 +244,8 @@
           </template>
         </van-field>
         <van-field label="所学乐器" :disabled='checkPhone' v-if="stu.hasLearningExperience==1" name="learningSubjectName"
-          v-model="stu.learningSubjectName" placeholder="请选择所学乐器"></van-field>
-        <van-field required label="是否报名参加管乐团家长会了解相关情况" :disabled='checkPhone' name="joinParentMeeting"
+          v-model="stu.learningSubjectName" placeholder="(非必填)请选择所学乐器"></van-field>
+        <van-field label="是否报名参加管乐团家长会了解相关情况" :disabled='checkPhone' name="joinParentMeeting"
           :rules="[{ required: true, message: '请选择是否报名参加管乐团家长会了解相关情况' }]">
           <template #input>
             <van-radio-group v-model="stu.joinParentMeeting" :disabled='checkPhone' checked-color="#FF8057"
@@ -265,7 +264,7 @@
           </template>
         </van-field>
         <van-field :border="true" label="您对校管乐团的组建有什么建议" :disabled='checkPhone' type="textarea" rows="3"
-          name="personalSuggestion" v-model="stu.personalSuggestion" placeholder="请填写您的建议内容">
+          name="personalSuggestion" v-model="stu.personalSuggestion" placeholder="(非必填)请填写您的建议内容">
         </van-field>
       </van-cell-group>
 
@@ -325,7 +324,7 @@
           pickerType: null, // 下拉类型
           stu: {
             username: null, // 姓名
-            sex: null, // 性别
+            sex: 0, // 性别
             phone: null, // 电话
             currentGrade: '', // 年级
             currentGradeNum: null, // 年级编号

+ 10 - 12
public/project/preRegister.html

@@ -188,13 +188,12 @@
     <van-form validate-first scroll-to-error @submit="onSubmit" ref='form' class="form">
       <div class="top-tips">科学的教育与关爱,足以改变世界。我们希望,学生的未来会因您和我们的共同努力而更加光辉灿烂!</div>
       <van-cell-group inset class="cell-group">
-        <van-field required type="tel" @blur='checkchangePhone' maxlength="11" minlength="11" label="联系电话(直接监护人)"
+        <van-field type="tel" @blur='checkchangePhone' maxlength="11" minlength="11" label="联系电话(直接监护人)"
           v-model="stu.phone" name="phone" :rules="[{ pattern, message: '输入监护人手机号码有误' }]" placeholder="请输入监护人手机号码">
         </van-field>
-        <van-field required label="学员姓名" :rules="[{ validator, message }]" name="username" v-model="stu.username"
+        <van-field label="学员姓名" :rules="[{ validator, message }]" name="username" v-model="stu.username"
           placeholder="请填写学员真实姓名" :disabled='checkPhone'></van-field>
-        <van-field required label="性别" name="sex" :disabled='checkPhone'
-          :rules="[{ required: true, message: '请选择性别' }]">
+        <van-field label="性别" name="sex" :disabled='checkPhone' :rules="[{ required: true, message: '请选择性别' }]">
           <template #input>
             <van-radio-group v-model="stu.sex" :disabled='checkPhone' checked-color="#9A64FF" direction="horizontal">
               <van-tag size="large" type="primary" :color="!(stu.sex === 1) || checkPhone ? '#EAEAEA' : '#64A9FF'"
@@ -208,14 +207,14 @@
             </van-radio-group>
           </template>
         </van-field>
-        <van-field required label="在读年级" :disabled='checkPhone' v-model="stu.currentGrade" readonly name="currentGrade"
+        <van-field label="在读年级" :disabled='checkPhone' v-model="stu.currentGrade" readonly name="currentGrade"
           :rules="[{ required: true, message: '请选择在读年级', trigger: 'onChange' }]" @click="pickerChange"
           placeholder="请选择在读年级" clickable>
           <template #right-icon>
             <van-icon name="arrow" :color="checkPhone ? '#aaa' : '#323233'" size="16"></van-icon>
           </template>
         </van-field>
-        <van-field required label="所在班级" :disabled='checkPhone' v-model="stu.currentClass" readonly name="currentClass"
+        <van-field label="所在班级" :disabled='checkPhone' v-model="stu.currentClass" readonly name="currentClass"
           :rules="[{ required: true, message: '请选择所在班级', trigger: 'onChange' }]" @click="pickerChange1"
           placeholder="请选择所在班级">
           <template #right-icon>
@@ -225,15 +224,15 @@
       </van-cell-group>
 
       <van-cell-group inset class="cell-group">
-        <van-field required label="选报声部" :disabled='checkPhone' v-model="stu.registerSubjectId" readonly
-          name="registerSubjectId" :rules="[{ required: true, message: '请选择选报声部', trigger: 'onChange' }]"
-          @click="pickerChange2" placeholder="请选择选报声部">
+        <van-field label="选报声部" :disabled='checkPhone' v-model="stu.registerSubjectId" readonly name="registerSubjectId"
+          :rules="[{ required: true, message: '请选择选报声部', trigger: 'onChange' }]" @click="pickerChange2"
+          placeholder="请选择选报声部">
           <template #right-icon>
             <van-icon name="arrow" :color="checkPhone ? '#aaa' : '#323233'" size="16"></van-icon>
           </template>
         </van-field>
 
-        <van-field required label="乐器准备方式" :disabled='checkPhone' name="instrumentsPrepareMode"
+        <van-field label="乐器准备方式" :disabled='checkPhone' name="instrumentsPrepareMode"
           :rules="[{ required: true, message: '请选择乐器准备方式' }]">
           <template #input>
             <van-radio-group v-model="stu.instrumentsPrepareMode" :disabled='checkPhone' checked-color="#9A64FF"
@@ -254,7 +253,7 @@
           </template>
         </van-field>
 
-        <van-field required label="乐团学习系统准备方式" :disabled='checkPhone' name="learningSystemPrepareMode"
+        <van-field label="乐团学习系统准备方式" :disabled='checkPhone' name="learningSystemPrepareMode"
           :rules="[{ required: true, message: '请选择乐团学习系统准备方式' }]">
           <template #input>
             <van-radio-group v-model="stu.learningSystemPrepareMode" :disabled='checkPhone' checked-color="#9A64FF"
@@ -455,7 +454,6 @@
               }
             })
 
-            // console.log(userDetail.data.code)
             if (userDetail.data.code === 200 && userDetail.data.data) {
               var detail = userDetail.data.data
               var grade = this.currentGrade.find(item => item.value == detail.currentGrade)

+ 14 - 14
public/project/schoolRegister.html

@@ -45,18 +45,18 @@
 
       <div class="cell_title">学校信息</div>
       <van-cell-group inset class="cell-group">
-        <van-field required label="学校全称" v-model="forms.name" :rules="[{ required: true, message: '请填写学校全称' }]"
-          name="name" placeholder="请填写学校全称" maxlength="50">
+        <van-field label="学校全称" v-model="forms.name" :rules="[{ required: true, message: '请填写学校全称' }]" name="name"
+          placeholder="请填写学校全称" maxlength="50">
         </van-field>
 
-        <van-field required label="所在城市" v-model="forms.cityCodeName" readonly name="cityCodeName" @click="onSelectCity"
+        <van-field label="所在城市" v-model="forms.cityCodeName" readonly name="cityCodeName" @click="onSelectCity"
           :rules="[{ required: true, message: '请选择所在城市', trigger: 'onChange' }]" placeholder="请选择所在城市">
           <template #right-icon>
             <van-icon name="arrow" :color="checkPhone ? '#aaa' : '#323233'" size="16"></van-icon>
           </template>
         </van-field>
 
-        <van-field required label="办学性质" name="schoolNature" :rules="[{ required: true, message: '请选择办学性质' }]">
+        <van-field label="办学性质" name="schoolNature" :rules="[{ required: true, message: '请选择办学性质' }]">
           <template #input>
             <van-radio-group checked-color="#64A9FF" v-model="forms.schoolNature" direction="horizontal">
               <van-tag size="large" type="primary" :color="!(forms.schoolNature === 'PUBLIC') ? '#EAEAEA' : '#64A9FF'"
@@ -71,7 +71,7 @@
           </template>
         </van-field>
 
-        <van-field required label="学年制" name="schoolSystem" :rules="[{ required: true, message: '请选择学年制' }]">
+        <van-field label="学年制" name="schoolSystem" :rules="[{ required: true, message: '请选择学年制' }]">
           <template #input>
             <van-radio-group checked-color="#64A9FF" v-model="forms.schoolSystem" direction="horizontal">
               <van-tag size="large" type="primary"
@@ -89,24 +89,24 @@
         </van-field>
 
         <van-field label="邮箱地址" v-model="forms.email" :rules="[{validator: validatorEmail}]" name="email"
-          placeholder="请输入学校邮箱地址">
+          placeholder="(非必填)请输入学校邮箱地址">
         </van-field>
       </van-cell-group>
 
       <div class="cell_title">负责人</div>
       <van-cell-group inset class="cell-group">
-        <van-field required label="负责人姓名" v-model="forms.emergencyContact" maxlength="20"
-          :rules="[{ required: true, message: '请输入负责人姓名' }]" :maxlength="20" name="emergencyContact"
+        <van-field label="负责人姓名" v-model="forms.emergencyContact" maxlength="5"
+          :rules="[{ required: true, message: '请输入负责人姓名' }]" :maxlength="5" name="emergencyContact"
           placeholder="请输入负责人姓名">
         </van-field>
 
-        <van-field required type="tel" v-model="forms.emergencyContactPhone" maxlength="11" minlength="11"
-          label="负责人手机号" name="emergencyContactPhone"
+        <van-field type="tel" v-model="forms.emergencyContactPhone" maxlength="11" minlength="11" label="负责人手机号"
+          name="emergencyContactPhone"
           :rules="[{ required: true, message: '请输入负责人手机号' },{ pattern, message: '输入负责人手机号有误' }]"
           placeholder="请输入负责人手机号码">
         </van-field>
 
-        <van-field required label="在校职位" v-model="forms.emergencyContactPosition" maxlength="20"
+        <van-field label="在校职位" v-model="forms.emergencyContactPosition" maxlength="20"
           :rules="[{ required: true, message: '请输入负责人在校职位' }]" name="emergencyContactPosition" placeholder="请输入负责人在校职位">
         </van-field>
       </van-cell-group>
@@ -114,18 +114,18 @@
 
       <div class="cell_title">乐团管理老师</div>
       <van-cell-group inset class="cell-group">
-        <van-field required label="管理老师姓名" v-model="forms.educationalAdministrationUsername" maxlength="20"
+        <van-field label="管理老师姓名" v-model="forms.educationalAdministrationUsername" maxlength="5"
           :rules="[{ required: true, message: '请输入管理老师姓名' }]" name="educationalAdministrationUsername"
           placeholder="请输入管理老师姓名">
         </van-field>
 
-        <van-field required type="tel" v-model="forms.educationalAdministrationPhone" maxlength="11" minlength="11"
+        <van-field type="tel" v-model="forms.educationalAdministrationPhone" maxlength="11" minlength="11"
           label="管理老师手机号" name="educationalAdministrationPhone"
           :rules="[{ required: true, message: '请输入管理老师手机号' },{ pattern, message: '输入管理老师手机号有误' }]"
           placeholder="请输入管理老师手机号">
         </van-field>
 
-        <van-field required label="在校职位" v-model="forms.educationalAdministrationPosition" maxlength="20"
+        <van-field label="在校职位" v-model="forms.educationalAdministrationPosition" maxlength="20"
           :rules="[{ required: true, message: '请输入乐团管理老师在校职位' }]" name="educationalAdministrationPosition"
           placeholder="请输入乐团管理老师在校职位">
         </van-field>

+ 6 - 18
src/school/companion-teacher/companion-teacher-register.tsx

@@ -204,7 +204,9 @@ export default defineComponent({
         const res = await request.post('/api-school/open/schoolTeacherStudent/queryQrCodeStatus', {
           data: {
             schoolId: state.id,
-            qrCodeEffectiveStartTime: state.t ? dayjs(state.t).format('YYYY-MM-DD HH:mm:ss') : null
+            qrCodeEffectiveStartTime: state.t
+              ? dayjs(Number(state.t)).format('YYYY-MM-DD HH:mm:ss')
+              : null
           }
         })
         if (res.code === 999) {
@@ -215,6 +217,7 @@ export default defineComponent({
             confirmButtonColor: '#ff8057'
           })
           state.qrCodeStatus = true
+          state.qrCodeMessage = res.message
         }
       } catch (e: any) {
         //
@@ -354,7 +357,6 @@ export default defineComponent({
         <Form validateFirst scrollToError onSubmit={onSubmit} ref={formRef} class={styles.form}>
           <CellGroup inset class={styles['cell-group']}>
             <Field
-              required
               label="手机号码"
               v-model={state.forms.phone}
               rules={[
@@ -368,18 +370,16 @@ export default defineComponent({
               type="tel"
             ></Field>
             <Field
-              required
               label="真实姓名"
               v-model={state.forms.realName}
               rules={[{ required: true, message: '请填写真实姓名' }]}
               name="realName"
               placeholder="请填写真实姓名"
-              maxlength="50"
+              maxlength="5"
               disabled={state.checkPhone}
             ></Field>
 
             <Field
-              required
               label="身份证号码"
               v-model={state.forms.idCardNo}
               rules={[
@@ -396,12 +396,7 @@ export default defineComponent({
               disabled={state.checkPhone}
             ></Field>
 
-            <Field
-              required
-              label="性别"
-              name="gender"
-              rules={[{ required: true, message: '请选择性别' }]}
-            >
+            <Field label="性别" name="gender" rules={[{ required: true, message: '请选择性别' }]}>
               {{
                 input: () => (
                   <RadioGroup
@@ -436,7 +431,6 @@ export default defineComponent({
             </Field>
 
             <Field
-              required
               label="身份证照片正面"
               v-model={state.forms.idcardFrontImg}
               readonly
@@ -456,7 +450,6 @@ export default defineComponent({
               }}
             </Field>
             <Field
-              required
               label="身份证照片反面"
               v-model={state.forms.idcardBackImg}
               readonly
@@ -477,7 +470,6 @@ export default defineComponent({
             </Field>
 
             <Field
-              required
               label="学历"
               v-model={state.forms.educationBackground}
               readonly
@@ -498,7 +490,6 @@ export default defineComponent({
             </Field>
 
             <Field
-              required
               label="毕业学校"
               disabled={state.checkPhone}
               v-model={state.forms.graduateSchool}
@@ -508,7 +499,6 @@ export default defineComponent({
             ></Field>
 
             <Field
-              required
               label="所在城市"
               v-model={state.forms.cityCodeName}
               readonly
@@ -529,7 +519,6 @@ export default defineComponent({
             </Field>
 
             <Field
-              required
               label="声部(可多选)"
               v-model={state.forms.showSubjectIds}
               readonly
@@ -576,7 +565,6 @@ export default defineComponent({
               }}
             </Field>
             <Field
-              required
               label="验证码"
               v-model={state.forms.smsValidCode}
               name="smsValidCode"

+ 5 - 12
src/school/manage-teacher/manage-teacher-register.tsx

@@ -132,7 +132,9 @@ export default defineComponent({
         const res = await request.post('/api-school/open/schoolTeacherStudent/queryQrCodeStatus', {
           data: {
             schoolId: state.id,
-            qrCodeEffectiveStartTime: state.t ? dayjs(state.t).format('YYYY-MM-DD HH:mm:ss') : null
+            qrCodeEffectiveStartTime: state.t
+              ? dayjs(Number(state.t)).format('YYYY-MM-DD HH:mm:ss')
+              : null
           }
         })
         if (res.code === 999) {
@@ -216,17 +218,15 @@ export default defineComponent({
         <Form validateFirst scrollToError onSubmit={onSubmit} ref="form" class={styles.form}>
           <CellGroup inset class={styles['cell-group']}>
             <Field
-              required
               label="真实姓名"
               v-model={state.forms.realName}
               rules={[{ required: true, message: '请填写真实姓名' }]}
               name="realName"
               placeholder="请填写真实姓名"
-              maxlength="50"
+              maxlength="5"
             ></Field>
 
             <Field
-              required
               label="手机号码"
               v-model={state.forms.phone}
               rules={[
@@ -240,7 +240,6 @@ export default defineComponent({
             ></Field>
 
             <Field
-              required
               label="身份证号码"
               v-model={state.forms.idCardNo}
               rules={[
@@ -255,12 +254,7 @@ export default defineComponent({
               placeholder="请输入身份证号码"
             ></Field>
 
-            <Field
-              required
-              label="性别"
-              name="gender"
-              rules={[{ required: true, message: '请选择性别' }]}
-            >
+            <Field label="性别" name="gender" rules={[{ required: true, message: '请选择性别' }]}>
               {{
                 input: () => (
                   <RadioGroup
@@ -293,7 +287,6 @@ export default defineComponent({
               }}
             </Field>
             <Field
-              required
               label="验证码"
               v-model={state.forms.smsValidCode}
               name="smsValidCode"

+ 2 - 2
src/school/train-planning/component/train-content/index.tsx

@@ -41,14 +41,14 @@ export default defineComponent({
         SINGLE: 60,
         MUSIC_THEORY: 60,
         INSTRUMENTAL_ENSEMBLE: 60
-      }
+      },
+      disabled: false // 判断是否有班级
     })
     const getClasses = async () => {
       try {
         const { data } = await request.get(
           '/api-school/orchestra/trainingContent/' + state.user.data.school.id
         )
-        console.log(data)
         base.contentList = data || []
       } catch {
         //

+ 4 - 4
src/school/train-planning/modal/timer/index.tsx

@@ -194,20 +194,20 @@ export default defineComponent({
           {state.useTimer.map((item: any) => (
             <Cell
               center
-              value={`${dayjs(item.startTime).format('HH:mm')}~${dayjs(item.endTime).format(
+              title={`${dayjs(item.startTime).format('HH:mm')}~${dayjs(item.endTime).format(
                 'HH:mm'
               )}`}
-              title="可排课时间段"
+              value="可排课时间段"
             ></Cell>
           ))}
 
           {state.usedTimer.map((item: any) => (
             <Cell
               center
-              title={`${dayjs(item.startTime).format('HH:mm')}~${dayjs(item.endTime).format(
+              value={`${dayjs(item.startTime).format('HH:mm')}~${dayjs(item.endTime).format(
                 'HH:mm'
               )}`}
-              value="冲突时间"
+              title="冲突时间"
               class={styles.noTime}
             ></Cell>
           ))}

BIN
src/student/download/images/download_bg.png


BIN
src/student/download/images/manage-center.png


BIN
src/student/download/images/manage_bg.png


BIN
src/student/download/images/student-center.png


BIN
src/student/download/images/student_bg.png


BIN
src/student/download/images/teacher-center.png


BIN
src/student/download/images/teacher_bg.png


+ 0 - 1
src/student/download/index.tsx

@@ -7,7 +7,6 @@ import { browser } from '@/helpers/utils'
 import student from './images/student-center.png'
 import teacher from './images/teacher-center.png'
 import manage from './images/manage-center.png'
-import OSticky from '@/components/o-sticky'
 
 // 唤起前缀
 // BandMusicTeam:// 管乐团

+ 13 - 1
src/student/music-group/layout/login.tsx

@@ -1,5 +1,16 @@
 import { defineComponent } from 'vue'
-import { CellGroup, Field, Button, CountDown, Row, Col, showToast, Popup, showDialog } from 'vant'
+import {
+  CellGroup,
+  Field,
+  Button,
+  CountDown,
+  Row,
+  Col,
+  showToast,
+  Popup,
+  showDialog,
+  closeToast
+} from 'vant'
 import ImgCode from '@/components/o-img-code'
 import { checkPhone } from '@/helpers/validate'
 import { setLogin, state } from '@/state'
@@ -73,6 +84,7 @@ export default defineComponent({
         const { data } = await request.get('/api-student/open/paramConfig/wechatAppId')
         // 判断是否有微信appId
         if (data) {
+          closeToast()
           this.goAuth(data, url)
         }
       } catch {

+ 6 - 5
src/student/music-group/pre-apply/component/payment.tsx

@@ -355,7 +355,7 @@ export default defineComponent({
                       <div class={styles.extra}>
                         <div class={styles.sectionPrice}>
                           <p class={styles.price}>
-                            新团特惠
+                            团购价
                             <span class={styles.numFont}>
                               <span class={styles.numPrefix}>¥</span>
                               {moneyFormat(state.goodsInfo.currentPrice)}
@@ -452,7 +452,7 @@ export default defineComponent({
                       <div class={styles.extra}>
                         <div class={styles.sectionPrice}>
                           <p class={styles.price}>
-                            新团特惠
+                            团购价
                             <span
                               class={[
                                 state.textBookInfo.currentPrice > 0 ? styles.numFont : styles.free
@@ -542,7 +542,7 @@ export default defineComponent({
                       <div class={styles.extra}>
                         <div class={styles.sectionPrice}>
                           <p class={styles.price}>
-                            新团特惠
+                            团购价
                             <span class={styles.numFont}>
                               <span class={styles.numPrefix}>¥</span>
                               {moneyFormat(state.vipInfo.currentPrice)}
@@ -575,8 +575,9 @@ export default defineComponent({
                 </span>
               </p>
               <p class={styles.allPrice}>
-                总原价:
-                <del class={styles.numFont}>¥{moneyFormat(state.orderInfo.originalPrice)}</del>
+                <del class={styles.numFont}>
+                  总原价:¥{moneyFormat(state.orderInfo.originalPrice)}
+                </del>
               </p>
             </div>
             <div class={styles.paymentBtn}>

+ 1 - 1
src/student/music-group/pre-apply/index.module.less

@@ -245,7 +245,7 @@
 }
 .section {
   display: flex;
-  align-items: center;
+  // align-items: center;
 
   .img {
     width: 88px;

+ 8 - 4
src/views/unit-test/examination-mode/index.tsx

@@ -119,6 +119,7 @@ export default defineComponent({
           const currentItemDom: Element =
             document.querySelectorAll('.swipe-item-question')[state.currentIndex]
           const rect = useRect(currentItemDom)
+
           state.swipeHeight = rect.height
         }, 100)
       })
@@ -221,16 +222,16 @@ export default defineComponent({
         confirmButtonColor: '#ff8057'
       }).then(() => {
         onAfter()
+        router.back()
       })
     }
 
     const onAfter = () => {
       window.removeEventListener('popstate', onBack, false)
-      router.back()
     }
 
-    onMounted(() => {
-      getExamDetails()
+    onMounted(async () => {
+      await getExamDetails()
 
       // 初始化高度
       resizeSwipeItemHeight()
@@ -241,7 +242,7 @@ export default defineComponent({
 
     return () => (
       <div class={styles.unitDetail}>
-        <Cell center class={styles.unitSection}>
+        <Cell center class={styles.unitSection} border={false}>
           {{
             title: () => <div class={styles.unitTitle}>{state.examDetail.unitExaminationName}</div>,
             label: () => (
@@ -276,6 +277,7 @@ export default defineComponent({
           duration={300}
           touchable={false}
           height={state.swipeHeight}
+          style={{ marginBottom: '12px' }}
           lazyRender
           onChange={(index: number) => {
             state.currentIndex = index
@@ -384,10 +386,12 @@ export default defineComponent({
             cancelButtonText="我知道了"
             onClose={() => {
               state.visiableResult = false
+              onAfter()
               router.back()
             }}
             onConform={() => {
               state.visiableResult = false
+              onAfter()
               router.back()
             }}
           />

BIN
src/views/unit-test/images/icon-pass-check.png


+ 2 - 2
src/views/unit-test/index.tsx

@@ -250,8 +250,7 @@ export default defineComponent({
                               router.push({
                                 path: '/test-exercise',
                                 query: {
-                                  id: item.unitExaminationId,
-                                  name: item.name
+                                  id: item.unitExaminationId
                                 }
                               })
                             }}
@@ -267,6 +266,7 @@ export default defineComponent({
                               type="primary"
                               round
                               block
+                              disabled={dayjs().isAfter(dayjs(item.expiryDate))}
                               onClick={() => onUnitTestStart(item)}
                             >
                               {item.status === 'C_ING' ? '继续测验' : '开始测验'}

+ 19 - 0
src/views/unit-test/model/anser-title/index.module.less

@@ -24,3 +24,22 @@
 .unitTitleImg {
   width: 100%;
 }
+
+.unitTitleRate {
+  display: flex;
+  align-items: center;
+  justify-content: flex-end;
+  padding-top: 15px;
+  padding-bottom: 15px;
+  font-size: 16px;
+  font-weight: 500;
+  color: #333333;
+  line-height: 26px;
+  .icon {
+    font-size: 16px;
+    margin-right: 6px;
+  }
+  .rate {
+    color: #4991eb;
+  }
+}

+ 16 - 2
src/views/unit-test/model/anser-title/index.tsx

@@ -1,7 +1,8 @@
-import { Tag, Image } from 'vant'
+import { Tag, Image, Icon } from 'vant'
 import { computed, defineComponent } from 'vue'
 import { QuestionType, QuestionTypeName } from '../../unit'
 import styles from './index.module.less'
+import iconPassCheck from '../../images/icon-pass-check.png'
 
 export default defineComponent({
   name: 'answer-title',
@@ -27,6 +28,10 @@ export default defineComponent({
     extra: {
       type: Object,
       default: () => ({})
+    },
+    showRate: {
+      type: Boolean,
+      default: false
     }
   },
   setup(props) {
@@ -52,11 +57,20 @@ export default defineComponent({
           {props.index}、{props.name} <span class={styles.unitScore}>({props.score || 0}分)</span>
           <Tag type="primary">{answerTypeName.value}</Tag>
         </div>
+        {props.showRate && (
+          <div class={styles.unitTitleRate}>
+            <Icon name={iconPassCheck} class={styles.icon} />
+            正确率:
+            <span class={styles.rate}>{props.extra.rightRate || 0}%</span>
+          </div>
+        )}
         {props.extra.questionDetail || mediaUrls.value ? (
           <div class={styles.unitDetail}>
             <div v-html={props.extra.questionDetail}></div>
             {mediaUrls.value &&
-              mediaUrls.value.map((url: any) => <Image class={styles.unitTitleImg} src={url} />)}
+              mediaUrls.value.map(
+                (url: any) => url && <Image class={styles.unitTitleImg} src={url} />
+              )}
           </div>
         ) : (
           ''

+ 1 - 1
src/views/unit-test/model/answer-analysis/index.module.less

@@ -6,6 +6,7 @@
     font-size: 16px;
     font-weight: 600;
     color: #333333;
+    padding-bottom: 20px;
 
     .aImg {
       font-size: 18px;
@@ -19,7 +20,6 @@
     color: #f44541;
   }
   .analysisTitle {
-    padding-top: 20px;
     padding-bottom: 10px;
   }
   .analysisMessage {

+ 26 - 13
src/views/unit-test/model/answer-list/index.tsx

@@ -9,9 +9,13 @@ export default defineComponent({
       type: Array,
       default: () => []
     },
-    look: {
-      type: Boolean,
-      default: false
+    index: {
+      type: Number,
+      default: 0
+    },
+    lookType: {
+      type: String as PropType<'ANSWER' | 'RESULT' | 'CLICK'>,
+      default: 'ANSWER'
     },
     statusList: {
       type: Array,
@@ -48,16 +52,20 @@ export default defineComponent({
       return result
     }
 
+    console.log(props.answerResult, 'props.answerResult')
+
     return () => (
       <div class={styles.anserList}>
-        <div class={styles.status}>
-          {props.statusList.map((item: any) => (
-            <span>
-              <i style={{ backgroundColor: item.color }}></i>
-              {item.text}
-            </span>
-          ))}
-        </div>
+        {props.statusList.length > 0 && (
+          <div class={styles.status}>
+            {props.statusList.map((item: any) => (
+              <span>
+                <i style={{ backgroundColor: item.color }}></i>
+                {item.text}
+              </span>
+            ))}
+          </div>
+        )}
 
         <div
           style={{
@@ -72,8 +80,13 @@ export default defineComponent({
                 {/* 判断是否答题了 */}
                 <span
                   class={[
-                    item.userAnswer && item.userAnswer.length > 0 && styles.answered,
-                    props.look && (formatUserResult(item.id) ? styles.yes : styles.no)
+                    props.lookType === 'ANSWER' &&
+                      item.userAnswer &&
+                      item.userAnswer.length > 0 &&
+                      styles.answered,
+                    props.lookType === 'RESULT' &&
+                      (formatUserResult(item.id) ? styles.yes : styles.no),
+                    props.lookType === 'CLICK' && index === props.index && styles.answered
                   ]}
                 >
                   {index + 1}

+ 7 - 1
src/views/unit-test/model/choice-question/index.tsx

@@ -30,6 +30,10 @@ export default defineComponent({
       type: Boolean,
       default: false
     },
+    showRate: {
+      tyep: Boolean,
+      default: false
+    },
     showAnalysis: {
       // 是否显示解析
       type: Boolean,
@@ -88,11 +92,13 @@ export default defineComponent({
           <AnserTitle
             index={props.index}
             name={props.data.name}
+            showRate={props.showRate}
             score={props.data.totalScore}
             answerType={props.type === 'radio' ? QuestionType.RADIO : QuestionType.CHECKBOX}
             extra={{
               questionDetail: props.data.questionDetail,
-              mediaUrls: props.data.mediaUrls
+              mediaUrls: props.data.mediaUrls,
+              rightRate: props.data.rightRate
             }}
           />
 

+ 7 - 0
src/views/unit-test/model/drag-question/index.tsx

@@ -30,6 +30,11 @@ export default defineComponent({
       type: Boolean,
       default: false
     },
+    showRate: {
+      // 是否显示答题的正确率
+      type: Boolean,
+      default: false
+    },
     showAnalysis: {
       // 是否显示解析
       type: Boolean,
@@ -149,9 +154,11 @@ export default defineComponent({
           <AnserTitle
             index={props.index}
             name={props.data.name}
+            showRate={props.showRate}
             score={props.data.totalScore}
             answerType={QuestionType.SORT}
             extra={{
+              rightRate: props.data.rightRate,
               questionDetail: props.data.questionDetail,
               mediaUrls: props.data.mediaUrls
             }}

+ 8 - 8
src/views/unit-test/model/keep-look-question/index.tsx

@@ -28,6 +28,10 @@ export default defineComponent({
       type: Boolean,
       default: false
     },
+    showRate: {
+      type: Boolean,
+      default: false
+    },
     showAnalysis: {
       // 是否显示解析
       type: Boolean,
@@ -317,7 +321,7 @@ export default defineComponent({
       })
 
       // 反显答案-初始化数据
-      console.log(userAnswer)
+      // console.log(userAnswer)
       userAnswer.forEach((user: any) => {
         const temps: any = {
           startPoint: { x: 0, y: 0 },
@@ -347,7 +351,6 @@ export default defineComponent({
       // 反显答案-连线
       nextTick(() => {
         state.drawLineList.forEach((draw: any) => {
-          console.log(draw, 'drawLine')
           state.selectItem = []
           const leftObj: any = useRect(document.getElementById(draw.leftIndex + '-left') as any)
           leftObj.index = draw.leftIndex
@@ -355,11 +358,6 @@ export default defineComponent({
           const rightObj: any = useRect(document.getElementById(draw.rightIndex + '-right') as any)
           rightObj.index = draw.rightIndex
           state.selectItem[1] = rightObj
-          console.log(state.selectItem, 'state.selectItem')
-          console.log(
-            document.getElementById(draw.leftIndex + '-left'),
-            document.getElementById(draw.rightIndex + '-right')
-          )
           const postion = calcPoint()
           draw.endPoint = postion.endPoint
           draw.startPoint = postion.startPoint
@@ -390,10 +388,12 @@ export default defineComponent({
             index={props.index}
             name={props.data.name}
             score={props.data.totalScore}
+            showRate={props.showRate}
             answerType={QuestionType.LINK}
             extra={{
               questionDetail: props.data.questionDetail,
-              mediaUrls: props.data.mediaUrls
+              mediaUrls: props.data.mediaUrls,
+              rightRate: props.data.rightRate
             }}
           />
 

+ 11 - 3
src/views/unit-test/model/play-question/index.tsx

@@ -40,6 +40,10 @@ export default defineComponent({
       type: Boolean,
       default: false
     },
+    showRate: {
+      type: Boolean,
+      default: false
+    },
     showAnalysis: {
       // 是否显示解析
       type: Boolean,
@@ -78,7 +82,7 @@ export default defineComponent({
       postMessage({
         api: 'openAccompanyWebView',
         content: {
-          url: `https://ponline.colexiu.com/orchestra-music-score/?id=${info.musicSheetId}&modelType=evaluation&unitId=${props.unitId}`,
+          url: `https://ponline.colexiu.com/orchestra-music-score/?id=${info.musicSheetId}&modelType=evaluation&unitId=${props.unitId}&questionId=${props.data.id}`,
           // url: `${location.origin}/orchestra-music-score/?id=${info.musicSheetId}&modelType=evaluation&unitId=${props.unitId}`,
           orientation: 0,
           isHideTitle: true,
@@ -94,7 +98,9 @@ export default defineComponent({
             const content = res.content
             if (content.value) {
               const result = content.value ? JSON.parse(content.value) : {}
-              if (result.unitId === props.unitId) {
+              console.log('🚀 ~ listenerMessage ~ result', result, props.data.questionId)
+
+              if (result.questionId === props.data.id) {
                 const tempScore = result.score || 0
                 // 跟上一次分数对比
                 if (state.score < tempScore) {
@@ -128,10 +134,12 @@ export default defineComponent({
             index={props.index}
             name={props.data.name}
             score={props.data.totalScore}
+            showRate={props.showRate}
             answerType={QuestionType.PLAY}
             extra={{
               questionDetail: props.data.questionDetail,
-              mediaUrls: ''
+              mediaUrls: '',
+              rightRate: props.data.rightRate
             }}
           />
 

+ 8 - 7
src/views/unit-test/practice-mode/index.tsx

@@ -126,12 +126,6 @@ export default defineComponent({
           }
         })
 
-        // 判断是否是最后一题
-        if (state.questionList.length === state.currentIndex + 1) {
-          state.visiableSure = true
-          return
-        }
-
         const { data } = await request.post(
           '/api-school/studentUnitExamination/submitTrainingAnswer',
           {
@@ -147,6 +141,13 @@ export default defineComponent({
             question.analysis.userResult = data
           }
         })
+
+        // 判断是否是最后一题
+        if (state.questionList.length === state.currentIndex + 1) {
+          state.visiableSure = true
+          return
+        }
+
         if (data) {
           swipeRef.value?.next()
         } else {
@@ -306,7 +307,7 @@ export default defineComponent({
             }}
           />
         </OSticky>
-        <Cell center class={styles.unitSection}>
+        <Cell center class={styles.unitSection} border={false}>
           {{
             title: () => <div class={[styles.unitTitle]}>{state.name}</div>,
             value: () => (

+ 3 - 2
src/views/unit-test/test-exercise/index.tsx

@@ -12,7 +12,7 @@ export default defineComponent({
     const router = useRouter()
     const state = reactive({
       id: route.query.id,
-      name: route.query.name,
+      name: '',
       visiableNotice: false,
       list: [] as any
     })
@@ -25,7 +25,8 @@ export default defineComponent({
             unitExaminationId: state.id
           }
         })
-        state.list = data || []
+        state.list = data.lists || []
+        state.name = data.unitExaminationName
         console.log(data)
       } catch {
         //

+ 6 - 1
src/views/unit-test/unit-create/uni-last.tsx

@@ -129,7 +129,12 @@ export default defineComponent({
             <p>乐团:{forms.value?.orchestraName}</p>
             <p>班级:{forms.value?.classGroupName}</p>
             <p>学生人数:{forms.value?.preStudentNum}人</p>
-            <Field v-model={forms.value.expiryDate} type="number" input-align="right">
+            <Field
+              v-model={forms.value.expiryDate}
+              type="number"
+              placeholder="请输入截止日期"
+              input-align="right"
+            >
               {{
                 extra: () => (
                   <div class={styles.loctionIconWrap}>

+ 101 - 45
src/views/unit-test/unit-detail/index.tsx

@@ -13,6 +13,7 @@ import PlayQuestion from '../model/play-question'
 import request from '@/helpers/request'
 import { QuestionType } from '../unit'
 import { useRect } from '@vant/use'
+import { state as baseState } from '@/state'
 
 export default defineComponent({
   name: 'unit-detail',
@@ -33,6 +34,7 @@ export default defineComponent({
       swipeHeight: 'auto' as any
     })
 
+    // 学生端查看详情
     const getExamDetails = async () => {
       try {
         const { data } = await request.post('/api-student/studentUnitExamination/detail', {
@@ -45,6 +47,12 @@ export default defineComponent({
         const temp = questionJson || []
         temp.forEach((item: any) => {
           item.userAnswer = formatUserAnswers(item, studentAnswerJson)
+          item.showAnalysis = true
+          item.analysis = {
+            message: item.answerAnalysis,
+            topic: true, // 是否显示结果
+            userResult: formatUserResult(item.id) // 用户答题对错
+          }
         })
         // 问题列表
         state.questionList = temp
@@ -58,6 +66,62 @@ export default defineComponent({
       }
     }
 
+    const getExamTeaherDetails = async () => {
+      try {
+        const { data } = await request.post('/api-teacher/classGroupUnitExamination/report', {
+          requestType: 'form',
+          data: {
+            classGroupUnitExaminationId: state.id,
+            level: route.query.level
+          }
+        })
+        console.log(data)
+        // const { questionJson, studentAnswerJson, answerResult, ...res } = data
+        state.examDetail = {
+          unitExaminationName: data.unitExaminationName,
+          questionNum: data.questionNum || 0
+        }
+        // 问题列表
+        const temp = data.examinationQuestionAdds || []
+        temp.forEach((item: any) => {
+          item.userAnswer = formatTeacherAnswer(item.answers)
+          item.showAnalysis = true
+          item.showRate = true
+          item.analysis = {
+            message: item.answerAnalysis,
+            topic: false // 是否显示结果
+          }
+        })
+        // 问题列表
+        state.questionList = temp
+        // 正确答案
+      } catch {
+        //
+      }
+    }
+    /**
+     * @description 初始化正确答案
+     */
+    const formatTeacherAnswer = (answers: any) => {
+      console.log(answers)
+      const result: any = []
+      answers.forEach((answer: any) => {
+        // rightAnswerFlag 说明是正确的
+        if (answer.rightAnswerFlag) {
+          const rightOption = answers.find(
+            (item: any) => item.questionExtra === answer.questionExtra
+          )
+
+          result.push({
+            answer: answer.questionAnswer,
+            answerId: answer.examinationQuestionAnswerId,
+            answerExtra: rightOption ? rightOption.questionExtra : null
+          })
+        }
+      })
+      return result || []
+    }
+
     /**
      * @description 初始化用户答案
      */
@@ -65,8 +129,6 @@ export default defineComponent({
       // 判断是否有结果
       if (!userAnswer) return []
       const answers = userAnswer || []
-
-      // const questionItem = answers.find((child: any) => child.questionId === item.id)
       return answers[item.id] ? answers[item.id] : []
     }
 
@@ -117,7 +179,11 @@ export default defineComponent({
     }
 
     onMounted(async () => {
-      await getExamDetails()
+      if (baseState.platformType === 'TEACHER') {
+        await getExamTeaherDetails()
+      } else {
+        await getExamDetails()
+      }
 
       // 初始化高度
       resizeSwipeItemHeight()
@@ -125,7 +191,7 @@ export default defineComponent({
 
     return () => (
       <div class={styles.unitDetail}>
-        <Cell center class={styles.unitSection}>
+        <Cell center class={styles.unitSection} border={false}>
           {{
             title: () => <div class={styles.unitTitle}>{state.examDetail.unitExaminationName}</div>,
             label: () => (
@@ -184,12 +250,9 @@ export default defineComponent({
                     data={item}
                     readOnly
                     type="radio"
-                    showAnalysis
-                    analysis={{
-                      message: item.answerAnalysis,
-                      topic: true, // 是否显示结果
-                      userResult: formatUserResult(item.id) // 用户答题对错
-                    }}
+                    showRate={item.showRate}
+                    showAnalysis={item.showAnalysis}
+                    analysis={item.analysis}
                   />
                 )}
                 {item.questionTypeCode === QuestionType.CHECKBOX && (
@@ -199,12 +262,9 @@ export default defineComponent({
                     data={item}
                     readOnly
                     type="checkbox"
-                    showAnalysis
-                    analysis={{
-                      message: item.answerAnalysis,
-                      topic: true, // 是否显示结果
-                      userResult: formatUserResult(item.id) // 用户答题对错
-                    }}
+                    showRate={item.showRate}
+                    showAnalysis={item.showAnalysis}
+                    analysis={item.analysis}
                   />
                 )}
                 {item.questionTypeCode === QuestionType.SORT && (
@@ -213,12 +273,9 @@ export default defineComponent({
                     v-model:value={item.userAnswer}
                     data={item}
                     index={index + 1}
-                    showAnalysis
-                    analysis={{
-                      message: item.answerAnalysis,
-                      topic: true, // 是否显示结果
-                      userResult: formatUserResult(item.id) // 用户答题对错
-                    }}
+                    showRate={item.showRate}
+                    showAnalysis={item.showAnalysis}
+                    analysis={item.analysis}
                   />
                 )}
                 {item.questionTypeCode === QuestionType.LINK && (
@@ -227,12 +284,9 @@ export default defineComponent({
                     v-model:value={item.userAnswer}
                     data={item}
                     index={index + 1}
-                    showAnalysis
-                    analysis={{
-                      message: item.answerAnalysis,
-                      topic: true, // 是否显示结果
-                      userResult: formatUserResult(item.id) // 用户答题对错
-                    }}
+                    showRate={item.showRate}
+                    showAnalysis={item.showAnalysis}
+                    analysis={item.analysis}
                   />
                 )}
                 {item.questionTypeCode === QuestionType.PLAY && (
@@ -242,12 +296,9 @@ export default defineComponent({
                     data={item}
                     index={index + 1}
                     unitId={state.id as any}
-                    showAnalysis
-                    analysis={{
-                      message: item.answerAnalysis,
-                      topic: true, // 是否显示结果
-                      userResult: formatUserResult(item.id) // 用户答题对错
-                    }}
+                    showRate={item.showRate}
+                    showAnalysis={item.showAnalysis}
+                    analysis={item.analysis}
                   />
                 )}
               </div>
@@ -293,17 +344,22 @@ export default defineComponent({
           <AnswerList
             value={state.questionList}
             answerResult={state.answerResult}
-            look
-            statusList={[
-              {
-                text: '答对',
-                color: '#71B0FF'
-              },
-              {
-                text: '答错',
-                color: '#FF8486'
-              }
-            ]}
+            index={state.currentIndex}
+            lookType={baseState.platformType === 'STUDENT' ? 'RESULT' : 'CLICK'}
+            statusList={
+              baseState.platformType === 'STUDENT'
+                ? [
+                    {
+                      text: '答对',
+                      color: '#71B0FF'
+                    },
+                    {
+                      text: '答错',
+                      color: '#FF8486'
+                    }
+                  ]
+                : []
+            }
             onSelect={(item: any) => {
               // 跳转,并且跳过动画
               swipeRef.value?.swipeTo(item, {

+ 39 - 10
src/views/unit-test/unit-list/unitDetail.tsx

@@ -3,7 +3,7 @@ import OHeader from '@/components/o-header'
 import OSearch from '@/components/o-search'
 import OSticky from '@/components/o-sticky'
 import { Button, Dialog, Icon, Tab, Tabs } from 'vant'
-import { defineComponent, onMounted, reactive, ref } from 'vue'
+import { computed, defineComponent, onMounted, reactive, ref } from 'vue'
 import questIcon from '@/school/images/quest-icon.png'
 import styles from './index.module.less'
 import { useRoute, useRouter } from 'vue-router'
@@ -16,11 +16,13 @@ export default defineComponent({
   setup() {
     const router = useRouter()
     const route = useRoute()
-    const form = reactive({})
+    const form = reactive({
+      studentList: {} as any
+    })
     const refreshing = ref(false)
     const loading = ref(false)
     const platformApi = state.platformApi
-    const activeName = ref('one')
+    const activeName = ref(1)
     const info = ref({} as any)
     const showTip = ref(false)
     const getDetail = async () => {
@@ -35,8 +37,33 @@ export default defineComponent({
         console.log(e)
       }
     }
+
+    const getStudentList = async () => {
+      try {
+        const { data } = await request.post(`${platformApi}/studentUnitExamination/studentDetail`, {
+          data: {
+            classGroupUnitExaminationId: route.query.id
+          },
+          requestType: 'form'
+        })
+        console.log(data)
+        form.studentList = data || {}
+      } catch {
+        //
+      }
+    }
+
+    // 判断是否可以查看测试报名,如果没有学生则不能查看
+    const activeNameStatus = computed(() =>
+      form.studentList[activeName.value] && form.studentList[activeName.value].length > 0
+        ? false
+        : true
+    )
+
     onMounted(() => {
       getDetail()
+
+      getStudentList()
     })
 
     return () => (
@@ -61,13 +88,13 @@ export default defineComponent({
             color={'#FF8057'}
             shrink
           >
-            <Tab name="one" title="I类学生">
+            <Tab name={1} title="I类学生">
               <UnitStudentList type={1}></UnitStudentList>
             </Tab>
-            <Tab name="two" title="II类学生">
+            <Tab name={2} title="II类学生">
               <UnitStudentList type={2}></UnitStudentList>
             </Tab>
-            <Tab name="three" title="III类学生">
+            <Tab name={3} title="III类学生">
               <UnitStudentList type={3}></UnitStudentList>
             </Tab>
           </Tabs>
@@ -79,11 +106,13 @@ export default defineComponent({
               block
               round
               type="primary"
+              disabled={activeNameStatus.value}
               onClick={() => {
                 router.push({
                   path: '/unit-detail',
                   query: {
-                    id: route.query.id
+                    id: route.query.id,
+                    level: activeName.value
                   }
                 })
               }}
@@ -111,9 +140,9 @@ export default defineComponent({
                   根据学生入团的批次对不同训练阶段的学生进行分类,不同训练阶段的学生可布置不同标准的课后训练和单元测验内容。
                 </p>
                 <br />
-                <p>&nbsp;&nbsp;&nbsp;I类学生:最新进入本乐团的学员</p>
-                <p>&nbsp;II 类学生:较早进入本乐团的学员</p>
-                <p>III 类学生:最早进入本乐团的学员</p>
+                <p>I类学生:最新进入本乐团的学员</p>
+                <p>II类学生:较早进入本乐团的学员</p>
+                <p>III类学生:最早进入本乐团的学员</p>
               </div>
             )
           }}