Преглед на файлове

Merge branch 'master' of http://git.dayaedu.com/lex/orchestra-app

mo преди 2 години
родител
ревизия
f2b4624d63
променени са 43 файла, в които са добавени 760 реда и са изтрити 106 реда
  1. 0 0
      dist/assets/companion-teacher-register-legacy.37a5770b.js
  2. 0 0
      dist/assets/index-legacy.2ae28dc5.js
  3. 3 3
      dist/assets/index-legacy.bd959491.js
  4. 0 0
      dist/assets/manage-teacher-register-legacy.d7ea16ea.js
  5. 2 2
      dist/assets/unbind-legacy.ff30fb4d.js
  6. 3 3
      dist/project/companionTeacher.html
  7. 1 1
      dist/project/manageTeacher.html
  8. 50 5
      package-lock.json
  9. 2 0
      package.json
  10. 3 3
      public/project/companionTeacher.html
  11. 1 1
      public/project/css/initiation.css
  12. 1 1
      public/project/css/preRegister.css
  13. 1 1
      public/project/manageTeacher.html
  14. 8 0
      src/router/routes-common.ts
  15. 3 3
      src/router/routes-school.ts
  16. 2 2
      src/school/companion-teacher/companion-teacher-register.tsx
  17. 1 1
      src/school/companion-teacher/compontent/teacher.tsx
  18. 3 3
      src/school/companion-teacher/index.tsx
  19. 1 1
      src/school/companion-teacher/unbind.tsx
  20. 1 1
      src/school/mass-message/select-sned.tsx
  21. 21 17
      src/school/orchestra/create-orchestra/index.tsx
  22. 2 1
      src/school/orchestra/modal/student-list.tsx
  23. 1 1
      src/school/train-planning/component/course-preview/index.tsx
  24. 10 8
      src/school/train-planning/component/standard/index.tsx
  25. 2 2
      src/school/train-planning/create.ts
  26. 2 2
      src/school/train-planning/modal/class-list/index.tsx
  27. 1 1
      src/student/music-group/layout/index.module.less
  28. 5 5
      src/student/music-group/pre-apply/order-detail.tsx
  29. 3 4
      src/teacher/screen-projection/index.tsx
  30. BIN
      src/views/coursewarePlay/image/icon-videobg.png
  31. 3 0
      src/views/coursewarePlay/index.module.less
  32. 20 4
      src/views/coursewarePlay/index.tsx
  33. 3 2
      src/views/exercise-after-class/index.tsx
  34. 39 0
      src/views/information/help-center/detail.tsx
  35. 14 4
      src/views/information/help-center/index.module.less
  36. 18 4
      src/views/information/help-center/index.tsx
  37. 8 10
      src/views/unit-test/model/answer-list/index.tsx
  38. 1 0
      src/views/unit-test/model/choice-question/index.tsx
  39. 74 0
      src/views/unit-test/model/drag-question/index.module.less
  40. 147 0
      src/views/unit-test/model/drag-question/index.tsx
  41. 72 0
      src/views/unit-test/model/keep-look-question/index.module.less
  42. 209 0
      src/views/unit-test/model/keep-look-question/index.tsx
  43. 19 10
      src/views/unit-test/unit-detail/index.tsx

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
dist/assets/companion-teacher-register-legacy.37a5770b.js


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
dist/assets/index-legacy.2ae28dc5.js


+ 3 - 3
dist/assets/index-legacy.bd959491.js

@@ -433,7 +433,7 @@
                                 b(
                                   c,
                                   {
-                                    placeholder: '请输入伴学老师姓名',
+                                    placeholder: '请输入伴学指导姓名',
                                     inputBackground: 'white',
                                     background: '#f6f8f9',
                                     onSearch: function (e) {
@@ -593,7 +593,7 @@
                             )
                           : b(
                               x,
-                              { btnStatus: !1, classImgSize: 'SMALL', tips: '暂无伴学老师' },
+                              { btnStatus: !1, classImgSize: 'SMALL', tips: '暂无伴学指导' },
                               null
                             ),
                         b(
@@ -615,7 +615,7 @@
                                     b('div', { class: A.codeContent }, [
                                       b('h2', { class: A.codeTitle }, [g.schoolName]),
                                       b('div', { class: A.codeName }, [
-                                        v('邀请您成为乐团伴学老师')
+                                        v('邀请您成为乐团伴学指导')
                                       ]),
                                       b('div', { class: A.codeQr }, [
                                         b(o, { text: g.url, size: '100%' }, null)

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
dist/assets/manage-teacher-register-legacy.d7ea16ea.js


+ 2 - 2
dist/assets/unbind-legacy.ff30fb4d.js

@@ -330,7 +330,7 @@
                                   }
                                 }
                           )
-                        : o(l, { btnStatus: !1, classImgSize: 'SMALL', tips: '暂无伴学老师' }, null)
+                        : o(l, { btnStatus: !1, classImgSize: 'SMALL', tips: '暂无伴学指导' }, null)
                     ])
                   }
                 )
@@ -448,7 +448,7 @@
                       return o(u, null, [
                         o(n, null, null),
                         o('div', { class: O.unbindTips }, [
-                          p('该伴学老师存在以下班级及课程未开始,请选择交接老师')
+                          p('该伴学指导存在以下班级及课程未开始,请选择交接老师')
                         ]),
                         o(
                           x,

+ 3 - 3
dist/project/companionTeacher.html

@@ -19,7 +19,7 @@
   <meta name="description" content="">
 
   <link rel="icon" href="../favicon.ico">
-  <title>乐团伴学老师注册</title>
+  <title>乐团伴学指导注册</title>
   <!-- 引入样式文件 -->
   <link rel="stylesheet" href="./js/vant-index.css" />
   <link rel="stylesheet" href="./css/companionTeacher.css">
@@ -116,7 +116,7 @@
 
       <div class="protocol">
         <van-checkbox v-model="checked" icon-size="16" style="margin-right: 6px" checked-color="#FF8057"></van-checkbox>
-        <span @click="() => { checked = !checked }">请认真阅读并勾选</span><span class="c">《乐团伴学老师注册协议》</span>
+        <span @click="() => { checked = !checked }">请认真阅读并勾选</span><span class="c">《乐团伴学指导注册协议》</span>
       </div>
 
       <van-button size="large" block round class="btn-submit" color="#FF8057" :loading="btnLoading"
@@ -138,7 +138,7 @@
         <img src="./images/manageTeacher/top-banner1.png" class="submit-img" />
         <div class="submit-container">
           <p class="submit-title">恭喜您已成功登记为</p>
-          <p class="submit-o">{{ decodeURI(name) }} <span>【伴学老师】</span></p>
+          <p class="submit-o">{{ decodeURI(name) }} <span>【伴学指导】</span></p>
           <p class="submit-tips">请下载管乐团管理端APP进行授课</p>
           <van-button type="primary" color="#FF8057" block round @click="submitStatus = false">立即下载</van-button>
         </div>

+ 1 - 1
dist/project/manageTeacher.html

@@ -87,7 +87,7 @@
 
       <div class="protocol">
         <van-checkbox v-model="checked" icon-size="16" style="margin-right: 6px"></van-checkbox>
-        <span @click="() => { checked = !checked }">请认真阅读并勾选</span><span class="c">《乐团伴学老师注册协议》</span>
+        <span @click="() => { checked = !checked }">请认真阅读并勾选</span><span class="c">《乐团伴学指导注册协议》</span>
       </div>
 
       <van-button size="large" block round class="btn-submit" color="#64A9FF" :loading="btnLoading"

+ 50 - 5
package-lock.json

@@ -28,6 +28,7 @@
         "qrcode": "^1.5.1",
         "qrcode.vue": "^3.3.3",
         "query-string": "^7.1.1",
+        "sortablejs": "^1.15.0",
         "umi-request": "^1.4.0",
         "vant": "^4.0.0",
         "vconsole": "^3.15.0",
@@ -37,6 +38,7 @@
         "vue-qr": "^4.0.9",
         "vue-router": "^4.0.12",
         "vue3-lottie": "^2.3.0",
+        "vuedraggable": "^2.24.3",
         "vuex": "^4.0.2"
       },
       "devDependencies": {
@@ -8494,6 +8496,11 @@
         "tslib": "^2.0.3"
       }
     },
+    "node_modules/sortablejs": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.15.0.tgz",
+      "integrity": "sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w=="
+    },
     "node_modules/source-map": {
       "version": "0.6.1",
       "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
@@ -9562,6 +9569,19 @@
         "vue": "^3.2"
       }
     },
+    "node_modules/vuedraggable": {
+      "version": "2.24.3",
+      "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.24.3.tgz",
+      "integrity": "sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==",
+      "dependencies": {
+        "sortablejs": "1.10.2"
+      }
+    },
+    "node_modules/vuedraggable/node_modules/sortablejs": {
+      "version": "1.10.2",
+      "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.2.tgz",
+      "integrity": "sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A=="
+    },
     "node_modules/vuex": {
       "version": "4.0.2",
       "resolved": "https://registry.npmmirror.com/vuex/-/vuex-4.0.2.tgz",
@@ -11493,7 +11513,8 @@
       "version": "2.0.1",
       "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-2.0.1.tgz",
       "integrity": "sha512-wtdMnGVvys9K8tg+DxowU1ytTrdVveXr3LzdhaKakysgGXyrsfaeds2cDywtvujEASjWOwWL/OgWM+qoeM8Plg==",
-      "dev": true
+      "dev": true,
+      "requires": {}
     },
     "@vitejs/plugin-vue-jsx": {
       "version": "1.3.8",
@@ -11777,7 +11798,8 @@
       "version": "5.3.1",
       "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
       "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
-      "dev": true
+      "dev": true,
+      "requires": {}
     },
     "aggregate-error": {
       "version": "3.1.0",
@@ -15091,7 +15113,8 @@
       "version": "6.0.0",
       "resolved": "https://registry.npmmirror.com/postcss-pxtorem/-/postcss-pxtorem-6.0.0.tgz",
       "integrity": "sha512-ZRXrD7MLLjLk2RNGV6UA4f5Y7gy+a/j1EqjAfp9NdcNYVjUMvg5HTYduTjSkKBkRkfqbg/iKrjMO70V4g1LZeg==",
-      "dev": true
+      "dev": true,
+      "requires": {}
     },
     "postcss-value-parser": {
       "version": "4.2.0",
@@ -15292,7 +15315,8 @@
     "qrcode.vue": {
       "version": "3.3.3",
       "resolved": "https://registry.npmmirror.com/qrcode.vue/-/qrcode.vue-3.3.3.tgz",
-      "integrity": "sha512-OsD4tQjIbxg/K6D5ZkWjBdYI9eg9K2i8qeYILdEAX5mdAydSAxV7xKmmZSP/hA12olLqEMZ9ryqDQrwa9jEMgw=="
+      "integrity": "sha512-OsD4tQjIbxg/K6D5ZkWjBdYI9eg9K2i8qeYILdEAX5mdAydSAxV7xKmmZSP/hA12olLqEMZ9ryqDQrwa9jEMgw==",
+      "requires": {}
     },
     "qs": {
       "version": "6.10.3",
@@ -15648,6 +15672,11 @@
         "tslib": "^2.0.3"
       }
     },
+    "sortablejs": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.15.0.tgz",
+      "integrity": "sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w=="
+    },
     "source-map": {
       "version": "0.6.1",
       "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
@@ -16262,7 +16291,8 @@
     "vue-demi": {
       "version": "0.13.2",
       "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.2.tgz",
-      "integrity": "sha512-41ukrclEbMddAyP7PvxMSYqnOSzPV6r7GNnyTSKSCNTaz19GehxmTiXyP9kwHSUv2+Dr6hHqiUiF7L1VAw2KdQ=="
+      "integrity": "sha512-41ukrclEbMddAyP7PvxMSYqnOSzPV6r7GNnyTSKSCNTaz19GehxmTiXyP9kwHSUv2+Dr6hHqiUiF7L1VAw2KdQ==",
+      "requires": {}
     },
     "vue-echarts": {
       "version": "6.2.3",
@@ -16382,6 +16412,21 @@
         "lottie-web": "^5.8.1"
       }
     },
+    "vuedraggable": {
+      "version": "2.24.3",
+      "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.24.3.tgz",
+      "integrity": "sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==",
+      "requires": {
+        "sortablejs": "1.10.2"
+      },
+      "dependencies": {
+        "sortablejs": {
+          "version": "1.10.2",
+          "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.2.tgz",
+          "integrity": "sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A=="
+        }
+      }
+    },
     "vuex": {
       "version": "4.0.2",
       "resolved": "https://registry.npmmirror.com/vuex/-/vuex-4.0.2.tgz",

+ 2 - 0
package.json

@@ -40,6 +40,7 @@
     "qrcode": "^1.5.1",
     "qrcode.vue": "^3.3.3",
     "query-string": "^7.1.1",
+    "sortablejs": "^1.15.0",
     "umi-request": "^1.4.0",
     "vant": "^4.0.0",
     "vconsole": "^3.15.0",
@@ -49,6 +50,7 @@
     "vue-qr": "^4.0.9",
     "vue-router": "^4.0.12",
     "vue3-lottie": "^2.3.0",
+    "vuedraggable": "^2.24.3",
     "vuex": "^4.0.2"
   },
   "devDependencies": {

+ 3 - 3
public/project/companionTeacher.html

@@ -19,7 +19,7 @@
   <meta name="description" content="">
 
   <link rel="icon" href="../favicon.ico">
-  <title>乐团伴学老师注册</title>
+  <title>乐团伴学指导注册</title>
   <!-- 引入样式文件 -->
   <link rel="stylesheet" href="./js/vant-index.css" />
   <link rel="stylesheet" href="./css/companionTeacher.css">
@@ -117,7 +117,7 @@
 
       <div class="protocol">
         <van-checkbox v-model="checked" icon-size="16" style="margin-right: 6px" checked-color="#FF8057"></van-checkbox>
-        <span @click="() => { checked = !checked }">请认真阅读并勾选</span><span class="c">《乐团伴学老师注册协议》</span>
+        <span @click="() => { checked = !checked }">请认真阅读并勾选</span><span class="c">《乐团伴学指导注册协议》</span>
       </div>
 
       <van-button size="large" block round class="btn-submit" color="#FF8057" :loading="btnLoading"
@@ -139,7 +139,7 @@
         <img src="./images/manageTeacher/top-banner1.png" class="submit-img" />
         <div class="submit-container">
           <p class="submit-title">恭喜您已成功登记为</p>
-          <p class="submit-o">{{ decodeURI(name) }} <span>【伴学老师】</span></p>
+          <p class="submit-o">{{ decodeURI(name) }} <span>【伴学指导】</span></p>
           <p class="submit-tips">请下载管乐团老师端APP进行授课</p>
           <van-button type="primary" color="#FF8057" block round @click="submitStatus = false">立即下载</van-button>
         </div>

+ 1 - 1
public/project/css/initiation.css

@@ -87,7 +87,7 @@ span {
 }
 
 .title {
-  text-shadow: 0px 2px 4px #649D66;
+  text-shadow: 0px 2px 3px rgba(255, 96, 0, 0.5);
   position: absolute;
   font-size: 26px;
   line-height: 37px;

+ 1 - 1
public/project/css/preRegister.css

@@ -87,7 +87,7 @@ span {
 }
 
 .title {
-  text-shadow: 0px 2px 4px #649D66;
+  text-shadow: 0px 2px 3px #704CA7;
   position: absolute;
   font-size: 26px;
   line-height: 37px;

+ 1 - 1
public/project/manageTeacher.html

@@ -88,7 +88,7 @@
 
       <div class="protocol">
         <van-checkbox v-model="checked" icon-size="16" style="margin-right: 6px"></van-checkbox>
-        <span @click="() => { checked = !checked }">请认真阅读并勾选</span><span class="c">《乐团伴学老师注册协议》</span>
+        <span @click="() => { checked = !checked }">请认真阅读并勾选</span><span class="c">《乐团伴学指导注册协议》</span>
       </div>
 
       <van-button size="large" block round class="btn-submit" color="#64A9FF" :loading="btnLoading"

+ 8 - 0
src/router/routes-common.ts

@@ -80,6 +80,14 @@ export const router: RouteRecordRaw[] = [
     }
   },
   {
+    path: '/help-detail',
+    name: 'help-detail',
+    component: () => import('@/views/information/help-center/detail'),
+    meta: {
+      title: '帮助中心详情'
+    }
+  },
+  {
     path: '/unit-test',
     name: 'unit-test',
     component: () => import('@/views/unit-test'),

+ 3 - 3
src/router/routes-school.ts

@@ -13,7 +13,7 @@ const noLoginRouter = [
     name: 'companion-teacher-register',
     component: () => import('@/school/companion-teacher/companion-teacher-register'),
     meta: {
-      title: '乐团伴学老师注册'
+      title: '乐团伴学指导注册'
     }
   },
   {
@@ -114,7 +114,7 @@ export default [
         name: 'companion-teacher',
         component: () => import('@/school/companion-teacher/index'),
         meta: {
-          title: '伴学老师'
+          title: '伴学指导'
         }
       },
       {
@@ -122,7 +122,7 @@ export default [
         name: 'companion-teacher-detail',
         component: () => import('@/school/companion-teacher/companion-detail'),
         meta: {
-          title: '伴学老师详情'
+          title: '伴学指导详情'
         }
       },
       {

+ 2 - 2
src/school/companion-teacher/companion-teacher-register.tsx

@@ -491,7 +491,7 @@ export default defineComponent({
               请认真阅读并勾选
             </span>
             <span class={styles.c} onClick={onPreview}>
-              《乐团伴学老师注册协议》
+              《乐团伴学指导注册协议》
             </span>
           </div>
 
@@ -556,7 +556,7 @@ export default defineComponent({
               <p class={styles['submit-title']}>恭喜您已成功登记为</p>
               <p class={styles['submit-o']}>
                 {state.name} <br />
-                <span>【伴学老师】</span>
+                <span>【伴学指导】</span>
               </p>
               <p class={styles['submit-tips']}>请下载管乐团老师端APP进行授课</p>
               <Button

+ 1 - 1
src/school/companion-teacher/compontent/teacher.tsx

@@ -132,7 +132,7 @@ export default defineComponent({
             ))}
           </List>
         ) : (
-          <OEmpty btnStatus={false} tips="暂无伴学老师" />
+          <OEmpty btnStatus={false} tips="暂无伴学指导" />
         )}
       </>
     )

+ 3 - 3
src/school/companion-teacher/index.tsx

@@ -281,7 +281,7 @@ export default defineComponent({
             }}
           </OHeader>
           <OSearch
-            placeholder="请输入伴学老师姓名"
+            placeholder="请输入伴学指导姓名"
             inputBackground="white"
             background="#f6f8f9"
             onSearch={(val: any) => {
@@ -374,7 +374,7 @@ export default defineComponent({
             ))}
           </List>
         ) : (
-          <OEmpty btnStatus={false} tips="暂无伴学老师" />
+          <OEmpty btnStatus={false} tips="暂无伴学指导" />
         )}
 
         <Popup
@@ -386,7 +386,7 @@ export default defineComponent({
             <div class={styles.codeImg} id="preview-container">
               <div class={styles.codeContent}>
                 <h2 class={[styles.codeTitle, 'van-ellipsis']}>{form.schoolName}</h2>
-                <div class={styles.codeName}>邀请您成为乐团伴学老师</div>
+                <div class={styles.codeName}>邀请您成为乐团伴学指导</div>
 
                 <div class={styles.codeQr}>
                   <OQrcode text={form.url} size={'100%'} />

+ 1 - 1
src/school/companion-teacher/unbind.tsx

@@ -111,7 +111,7 @@ export default defineComponent({
       <>
         <OHeader />
 
-        <div class={styles.unbindTips}>该伴学老师存在以下班级及课程未开始,请选择交接老师</div>
+        <div class={styles.unbindTips}>该伴学指导存在以下班级及课程未开始,请选择交接老师</div>
 
         <CellGroup inset class={styles.detailCellGroup}>
           {state.classList.map((item: any) => (

+ 1 - 1
src/school/mass-message/select-sned.tsx

@@ -77,7 +77,7 @@ export default defineComponent({
           <Tab title="学员" name="student">
             <StudentList height={state.height} v-model:selectItem={state.selectStudent} />
           </Tab>
-          <Tab title="伴学老师" name="teacher">
+          <Tab title="伴学指导" name="teacher">
             <TeacherList height={state.height} v-model:selectItem={state.selectTeacher} />
           </Tab>
           <Tab title="管理老师" name="manage">

+ 21 - 17
src/school/orchestra/create-orchestra/index.tsx

@@ -228,26 +228,30 @@ export default defineComponent({
 
         {/* 选择声部 */}
         <OPopup v-model:modelValue={state.subjectStatus} style="background: #F8F8F8;">
-          <SubjectList
-            onClose={() => (state.subjectStatus = false)}
-            subjectList={state.subjectList}
-            selectSubjects={state.selectSubjectIds}
-            onSelect={onSelectSubject}
-          />
+          {state.subjectStatus && (
+            <SubjectList
+              onClose={() => (state.subjectStatus = false)}
+              subjectList={state.subjectList}
+              selectSubjects={state.selectSubjectIds}
+              onSelect={onSelectSubject}
+            />
+          )}
         </OPopup>
 
         {/* 选择学生 */}
-        <OPopup v-model:modelValue={state.studentStatus} style="background: #f8f8f8;" destroy>
-          <StudentList
-            orchestraList={state.orchestraList}
-            subjectId={state.selectSubjectStudents.id}
-            selectStudentIds={state.selectSubjectStudents.students}
-            onClose={() => (state.studentStatus = false)}
-            onSelect={(item: any) => {
-              // console.log(item, 'select student')
-              state.selectSubjectStudents.students = [...item]
-            }}
-          />
+        <OPopup v-model:modelValue={state.studentStatus} style="background: #f8f8f8;">
+          {state.studentStatus && (
+            <StudentList
+              orchestraList={state.orchestraList}
+              subjectId={state.selectSubjectStudents.id}
+              selectStudentIds={state.selectSubjectStudents.students}
+              onClose={() => (state.studentStatus = false)}
+              onSelect={(item: any) => {
+                // console.log(item, 'select student')
+                state.selectSubjectStudents.students = [...item]
+              }}
+            />
+          )}
         </OPopup>
       </div>
     )

+ 2 - 1
src/school/orchestra/modal/student-list.tsx

@@ -145,6 +145,7 @@ export default defineComponent({
     watch(
       () => props.subjectId,
       () => {
+        console.log('subjectId')
         onSearch()
       }
     )
@@ -180,7 +181,7 @@ export default defineComponent({
     return () => (
       <div class={styles.studentList}>
         <OSticky position="top">
-          <OHeader title="选择学生" desotry={false} />
+          <OHeader title="选择学生" />
           <OSearch
             inputBackground="white"
             background="#F8F8F8"

+ 1 - 1
src/school/train-planning/component/course-preview/index.tsx

@@ -335,7 +335,7 @@ export default defineComponent({
                           state.choiceCourse = item
                         }}
                       >
-                        请假冲突
+                        老师请假
                       </Tag>
                     )}
                   </>

+ 10 - 8
src/school/train-planning/component/standard/index.tsx

@@ -321,14 +321,16 @@ export default defineComponent({
           style={{ background: '#F6F6F6' }}
           destroy
         >
-          <Timer
-            timerList={forms.timerList}
-            times={forms.trainTimer}
-            onClose={() => (forms.timerStatus = false)}
-            onConfirm={(val: any) => {
-              forms.trainStartTime = val
-            }}
-          />
+          {forms.timerStatus && (
+            <Timer
+              timerList={forms.timerList}
+              times={forms.trainTimer}
+              onClose={() => (forms.timerStatus = false)}
+              onConfirm={(val: any) => {
+                forms.trainStartTime = val
+              }}
+            />
+          )}
         </OPopup>
 
         <Popup v-model:show={forms.numberStatus} position="bottom" round>

+ 2 - 2
src/school/train-planning/create.ts

@@ -46,10 +46,10 @@ export const weekFormat = (val: any) => {
 
 const original = () => {
   return {
-    status: false, // 未设置伴学老师弹窗
+    status: false, // 未设置伴学指导弹窗
     weekStatus: false, // 时间
     calendarStatus: false, // 日期
-    classStatus: false, // 班级设置伴学老师
+    classStatus: false, // 班级设置伴学指导
     timerStatus: false, // 时间状态
     skipHoliday: 1, // 是否节假日
     week: null as any, // 周次

+ 2 - 2
src/school/train-planning/modal/class-list/index.tsx

@@ -29,7 +29,7 @@ export default defineComponent({
       try {
         const tempList: any = []
         state.list.forEach((item: any) => {
-          // 判断是否已经设置过伴学老师
+          // 判断是否已经设置过伴学指导
           if (item.teacherId) {
             tempList.push({
               classGroupId: item.id,
@@ -75,7 +75,7 @@ export default defineComponent({
     })
     return () => (
       <div class={styles.classList}>
-        <OHeader title="指定伴学老师" desotry={false} />
+        <OHeader title="指定伴学指导" desotry={false} />
 
         {state.list.map((item: any) => (
           <Cell

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

@@ -77,7 +77,7 @@
   .wxPopupDialog {
     position: relative;
     overflow: inherit;
-    margin-top: -100px;
+    margin-top: -160px;
     &::before {
       position: absolute;
       content: ' ';

+ 5 - 5
src/student/music-group/pre-apply/order-detail.tsx

@@ -470,13 +470,13 @@ export default defineComponent({
                 <div class={styles.codeTips}>
                   <div class={styles.tipsTitle}>使用说明:</div>
                   <div class={styles.tipsContent}>
-                    1.长按二维码保存图片到相册(或截屏保存到相册)
+                    {/* 1.长按二维码保存图片到相册(或截屏保存到相册) */}
+                    {/* <br /> */}
+                    1.打开{state.pay_channel === 'wx_pub' ? '微信' : '支付宝'}扫一扫
                     <br />
-                    2.打开{state.pay_channel === 'wx_pub' ? '微信' : '支付宝'}扫一扫
+                    2.选择相册中的二维码
                     <br />
-                    3.选择相册中的二维码
-                    <br />
-                    4.请在30分钟内扫码支付
+                    3.请在30分钟内扫码支付
                   </div>
                 </div>
               </div>

+ 3 - 4
src/teacher/screen-projection/index.tsx

@@ -53,8 +53,7 @@ export default defineComponent({
         query: {
           ...query,
           id: query.lessonCoursewareDetailId,
-          kId: n.knowledgePointId,
-          mId: n.id
+          kId: n.id
         }
       })
     }
@@ -76,7 +75,7 @@ export default defineComponent({
             </div>
           )}
           <CellGroup inset>
-            <Cell
+            {/* <Cell
               title="胜强测试"
               isLink
               center
@@ -89,7 +88,7 @@ export default defineComponent({
                   <Image style={{ marginRight: '12px' }} width={36} height={36} src={icons.music} />
                 )
               }}
-            </Cell>
+            </Cell> */}
             {data.knowledgePointList.map((item: any) => {
               return (
                 <>

BIN
src/views/coursewarePlay/image/icon-videobg.png


+ 3 - 0
src/views/coursewarePlay/index.module.less

@@ -53,6 +53,9 @@
     }
   }
 }
+.swipeItem{
+  overflow: hidden;
+}
 .itemDiv {
   position: relative;
   width: 100%;

+ 20 - 4
src/views/coursewarePlay/index.tsx

@@ -81,7 +81,8 @@ export default defineComponent({
       detail: null,
       knowledgePointList: [] as any,
       itemList: [] as any,
-      showHead: true
+      showHead: true,
+      isCourse: false
     })
     const activeData = reactive({
       nowTime: 0,
@@ -117,6 +118,20 @@ export default defineComponent({
       console.log('缓存路径返回', res)
       return res
     }
+    // 获取当前课程是否签退
+    const getCourseSchedule = async () => {
+      if (!route.query.courseId) return
+      try {
+        const res = await request.get(
+          `${state.platformApi}/courseSchedule/detail/${route.query.courseId}`
+        )
+        if (res?.data){
+          data.isCourse = res.data.status === 'COMPLETE' ? false : true
+        }
+      } catch (e) {
+        console.log(e)
+      }
+    }
     const getItemList = async () => {
       const list: any = []
       const browserInfo = browser()
@@ -205,6 +220,7 @@ export default defineComponent({
     }
     onMounted(() => {
       getDetail()
+      getCourseSchedule()
       window.addEventListener('message', iframeHandle)
     })
     // 返回
@@ -259,7 +275,7 @@ export default defineComponent({
         popupData.itemName = item.name
         popupData.tabName = item.tabName
         activeData.model = true
-        if (item.type === 'VIDEO'){
+        if (item.type === 'VIDEO') {
           item.playModel = true
         }
       }
@@ -384,7 +400,7 @@ export default defineComponent({
         >
           {data.itemList.map((m: any, mIndex: number) => {
             return (
-              <SwipeItem>
+              <SwipeItem class={styles.swipeItem}>
                 <>
                   <div
                     class={styles.itemDiv}
@@ -560,7 +576,7 @@ export default defineComponent({
                 <img src={iconMenu} />
                 <span>知识点</span>
               </div>
-              {route.query.courseId && (
+              {data.isCourse && (
                 <>
                   <div
                     class={[styles.fullBtn, styles.point]}

+ 3 - 2
src/views/exercise-after-class/index.tsx

@@ -278,13 +278,14 @@ export default defineComponent({
               })
             }
             if (nextItem?.type === materialType.曲目) {
+              handleInit(1)
               goback()
-               const parmas = qs.stringify({
+              const parmas = qs.stringify({
                 id: nextItem.content,
                 courseScheduleId: query.courseScheduleId,
                 lessonTrainingId: query.lessonTrainingId,
                 materialId: nextItem.materialId
-               })
+              })
               let src = `${location.origin}/orchestra-music-score/?` + parmas
               // console.log("🚀 ~ src", src)
               postMessage({

+ 39 - 0
src/views/information/help-center/detail.tsx

@@ -0,0 +1,39 @@
+import request from '@/helpers/request'
+import { state } from '@/state'
+import { defineComponent, onMounted, ref } from 'vue'
+import { useRoute } from 'vue-router'
+import styles from '../information-detail.module.less'
+
+export default defineComponent({
+  name: 'notice-detail',
+  setup() {
+    const route = useRoute()
+    const detail = ref<any>({})
+
+    const getDetails = async () => {
+      try {
+        const { data } = await request.get(
+          state.platformApi + '/helpCenterContent/detail/' + route.query.id
+        )
+        detail.value = data
+      } catch {
+        //
+      }
+    }
+
+    onMounted(() => {
+      getDetails()
+    })
+    return () => (
+      <div class={styles.detail}>
+        <div class={styles.title}>{detail.value.title}</div>
+        <div class={styles.who}>
+          <span>管乐团</span>
+          {detail.value.createTime}
+        </div>
+
+        <div class={styles.content} v-html={detail.value.content}></div>
+      </div>
+    )
+  }
+})

+ 14 - 4
src/views/information/help-center/index.module.less

@@ -1,5 +1,15 @@
-.title {
-  font-size: 16px;
-  color: #333333;
-  line-height: 22px;
+.helpCenter {
+  .title {
+    font-size: 16px;
+    color: #333333;
+    line-height: 22px;
+  }
+  .container {
+    margin-top: 12px;
+    :global {
+      .van-cell {
+        padding: 18px 13px;
+      }
+    }
+  }
 }

+ 18 - 4
src/views/information/help-center/index.tsx

@@ -6,11 +6,13 @@ import { forms } from '@/school/train-planning/create'
 import { state } from '@/state'
 import { Cell, CellGroup, List } from 'vant'
 import { defineComponent, onMounted, reactive } from 'vue'
+import { useRouter } from 'vue-router'
 import styles from './index.module.less'
 
 export default defineComponent({
   name: 'help-center',
   setup() {
+    const router = useRouter()
     const form = reactive({
       isClick: false,
       list: [] as any,
@@ -69,7 +71,7 @@ export default defineComponent({
       getList()
     })
     return () => (
-      <>
+      <div class={styles.helpCenter}>
         <OSticky position="top">
           <OSearch onSearch={onSearch} />
         </OSticky>
@@ -79,18 +81,30 @@ export default defineComponent({
             v-model:loading={form.listState.loading}
             finished={form.listState.finished}
             finishedText=" "
-            class={[styles.liveList]}
+            class={styles.container}
             onLoad={getList}
             immediateCheck={false}
           >
             {form.list.map((item: any) => (
-              <Cell titleClass={[styles.title, 'van-ellipsis']} title={'ijijii'} isLink></Cell>
+              <Cell
+                titleClass={[styles.title, 'van-ellipsis']}
+                title={item.title}
+                isLink
+                onClick={() => {
+                  router.push({
+                    path: 'help-detail',
+                    query: {
+                      id: item.id
+                    }
+                  })
+                }}
+              ></Cell>
             ))}
           </List>
         ) : (
           <OEmpty btnStatus={false} tips="暂无数据" />
         )}
-      </>
+      </div>
     )
   }
 })

+ 8 - 10
src/views/unit-test/model/answer-list/index.tsx

@@ -7,7 +7,7 @@ export default defineComponent({
   props: {
     value: {
       type: Array,
-      default: []
+      default: () => []
     },
     answerList: {
       type: Array,
@@ -27,8 +27,9 @@ export default defineComponent({
       ]
     }
   },
-  emits: ['select', 'update:value'],
+  emits: ['select'],
   setup(props, { emit }) {
+    console.log(props.value)
     return () => (
       <div class={styles.anserList}>
         <div class={styles.status}>
@@ -41,14 +42,11 @@ export default defineComponent({
         </div>
 
         <Grid class={styles.aList} columnNum={6} border={false}>
-          {[1, 2, 3, 4, 5, 6, 6, 7, 8, 9, 9, 0, 10].map((item: any) => {
-            // console.log(props.keys)
-            return (
-              <GridItem onClick={() => emit('select', item)}>
-                <span class={props.value.includes(item) && styles.active}>{item}</span>
-              </GridItem>
-            )
-          })}
+          {[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10].map((item: any) => (
+            <GridItem onClick={() => emit('select', item)}>
+              <span class={props.value.includes(item) && styles.answered}>{item}</span>
+            </GridItem>
+          ))}
         </Grid>
       </div>
     )

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

@@ -3,6 +3,7 @@ import { defineComponent, PropType, reactive } from 'vue'
 import { labelOptions } from '../../unit'
 import styles from './index.module.less'
 
+// 单选题 - 多选题
 export default defineComponent({
   name: 'choice-question',
   props: {

+ 74 - 0
src/views/unit-test/model/drag-question/index.module.less

@@ -0,0 +1,74 @@
+.unitSubject {
+  padding: 15px;
+  margin: 0 13px;
+  background-color: #fff;
+  // overflow: hidden;
+  border-radius: 10px;
+}
+
+.unitSubjectTitle {
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+  font-size: 16px;
+  font-weight: 500;
+  color: #333333;
+  line-height: 26px;
+  .unitScore {
+    color: #777777;
+  }
+}
+.unitTitleSection {
+  margin-top: 20px;
+  border-radius: 6px;
+  border: 1px solid #d5d5d5;
+  padding: 25px 5px;
+}
+.unitTitleImg {
+  width: 100%;
+}
+
+.unitAnswers {
+  padding-bottom: 30px;
+  :global {
+    .sortable-ghost {
+      opacity: 0.5;
+      background: #c8ebfb;
+    }
+  }
+  .sortReset {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    margin-top: 25px;
+    padding-top: 30px;
+    padding-bottom: 30px;
+    .tips {
+      font-size: 16px;
+      font-weight: 500;
+      color: #333333;
+      line-height: 26px;
+    }
+    :global {
+      .van-button {
+        min-width: 84px;
+        height: 31px;
+        line-height: 31px;
+        font-size: 15px;
+        font-weight: 500;
+      }
+    }
+  }
+
+  .items {
+    min-width: 56px;
+    height: 36px;
+    font-size: 16px;
+    font-weight: 500;
+    margin-right: 10px;
+    border-radius: 4px;
+    background: #ffebdd;
+    color: #f67146;
+    justify-content: center;
+  }
+}

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

@@ -0,0 +1,147 @@
+import { Tag, Image, Button } from 'vant'
+import { defineComponent, nextTick, onMounted, PropType, reactive } from 'vue'
+import { labelOptions } from '../../unit'
+import Draggable from 'vuedraggable'
+import styles from './index.module.less'
+import Sortable from 'sortablejs'
+import deepClone from '@/helpers/deep-clone'
+
+// 单选和多选题
+export default defineComponent({
+  name: 'choice-question',
+  props: {
+    value: {
+      type: [String, Number, Array],
+      default: ''
+    },
+    type: {
+      type: String as PropType<'radio' | 'checkbox'>,
+      default: 'radio'
+    },
+    answers: {
+      type: Object,
+      default: {}
+    },
+    /* 只读 */
+    readOnly: {
+      type: Boolean,
+      default: true
+    }
+  },
+  emits: ['update:value'],
+  setup(props, { emit }) {
+    const state = reactive({
+      domId: 'draggableContainer' + +new Date(),
+      drag: false,
+      sortable: null as any,
+      list: [] as any,
+      options: [
+        {
+          index: 1,
+          order: 1,
+          value: 'Sol'
+        },
+        {
+          index: 2,
+          order: 2,
+          value: 'Sal'
+        },
+        {
+          index: 3,
+          order: 3,
+          value: 'La'
+        },
+        {
+          index: 4,
+          order: 4,
+          value: 'Si'
+        }
+      ]
+    })
+
+    // const onSelect = (item: any) => {
+    //   if (props.type === 'checkbox') {
+    //     // 判断是否已选过
+    //     const value: any = props.value
+    //     if (value.includes(item.index)) {
+    //       const index = value.findIndex((v: any) => v === item.index)
+    //       value.splice(index, 1)
+    //       emit('update:value', [...value])
+    //     } else {
+    //       emit('update:value', [item.index, ...value])
+    //     }
+    //   } else {
+    //     emit('update:value', item.index)
+    //   }
+    // }
+
+    onMounted(() => {
+      nextTick(() => {
+        const el = document.getElementById(state.domId)
+        state.sortable = Sortable.create(el, {
+          // disabled: true,
+          animation: 150,
+          sort: true,
+          fallbackTolerance: 3,
+          onUpdate: (evt: any) => {
+            // console.log(evt, 'update')
+            const updatePosition = (list: any) =>
+              list.splice(evt.newIndex, 0, list.splice(evt.oldIndex, 1)[0])
+
+            // const list = deepClone(state.options)
+            // updatePosition(list)
+
+            // state.options = list
+            if (state.list && state.list.length > 0) {
+              updatePosition(state.list)
+              return
+            }
+            state.list = [...state.options]
+            updatePosition(state.list)
+            // console.log(updatePosition(state.options))
+          }
+        })
+      })
+    })
+    return () => (
+      <div class={styles.unitSubject}>
+        <div class={styles.unitSubjectTitle}>
+          1、选出与方框内音符时值相同的节奏阶段 <span class={styles.unitScore}>(5分)</span>
+          <Tag type="primary">排序题</Tag>
+        </div>
+        <div class={styles.unitTitleSection}>
+          <Image
+            class={styles.unitTitleImg}
+            src="https://lanhu-dds-backend.oss-cn-beijing.aliyuncs.com/merge_image/imgs/dbb27307d428424c8efb9f26032cfa1a_mergeImage.png"
+          />
+        </div>
+
+        <div class={[styles.unitAnswers, 'van-hairline--top']}>
+          <div class={styles.sortReset}>
+            <span class={styles.tips}>请长按拖拽答案进行排序</span>
+            <Button
+              type="primary"
+              round
+              onClick={() => {
+                const order = state.sortable.toArray()
+                state.sortable.sort(
+                  order.sort((a: any, b: any) => a - b),
+                  true
+                )
+              }}
+            >
+              重置
+            </Button>
+          </div>
+          <div id={state.domId}>
+            {state.options.map((item: any) => (
+              <Tag class={[styles.items]} data-id={item.index}>
+                {item.value + item.index}
+              </Tag>
+            ))}
+          </div>
+        </div>
+      </div>
+    )
+  }
+})

+ 72 - 0
src/views/unit-test/model/keep-look-question/index.module.less

@@ -0,0 +1,72 @@
+.unitSubject {
+  padding: 15px;
+  margin: 0 13px;
+  background-color: #fff;
+  // overflow: hidden;
+  border-radius: 10px;
+}
+
+.unitSubjectTitle {
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+  font-size: 16px;
+  font-weight: 500;
+  color: #333333;
+  line-height: 26px;
+  .unitScore {
+    color: #777777;
+  }
+}
+
+.unitTitleImg {
+  width: 100%;
+  padding-top: 20px;
+  padding-bottom: 10px;
+}
+
+.unitAnswers {
+  position: relative;
+  padding-bottom: 20px;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+
+  .leftSection,
+  .rightSection {
+    position: relative;
+    width: 95px;
+    z-index: 2;
+  }
+  .img {
+    width: 95px;
+  }
+  .unitItem {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    background: #ffffff;
+    border-radius: 6px;
+    border: 2px solid #d5d5d5;
+    overflow: hidden;
+    height: 54px;
+    width: 100%;
+    margin-bottom: 15px;
+    font-size: 16px;
+    font-weight: 500;
+    color: #333333;
+    line-height: 22px;
+  }
+
+  .active {
+    border: 2px solid #ff8057;
+    color: #f67146;
+  }
+}
+
+.canvasSection {
+  position: absolute;
+  background: #f9f9f9;
+  top: 0;
+  left: 0;
+}

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

@@ -0,0 +1,209 @@
+import { Tag, Image, Button } from 'vant'
+import { defineComponent, nextTick, onMounted, PropType, reactive } from 'vue'
+import { labelOptions } from '../../unit'
+import styles from './index.module.less'
+import Sortable from 'sortablejs'
+import deepClone from '@/helpers/deep-clone'
+import { useRect } from '@vant/use'
+
+// 单选和多选题
+export default defineComponent({
+  name: 'keep-look-question',
+  props: {
+    value: {
+      type: [String, Number, Array],
+      default: ''
+    },
+    type: {
+      type: String as PropType<'radio' | 'checkbox'>,
+      default: 'radio'
+    },
+    answers: {
+      type: Object,
+      default: {}
+    },
+    /* 只读 */
+    readOnly: {
+      type: Boolean,
+      default: true
+    }
+  },
+  emits: ['update:value'],
+  setup(props, { emit }) {
+    const state = reactive({
+      answerDomId: 'answer' + +new Date(),
+      answerObj: {
+        height: 100,
+        width: 100
+      },
+      canvasDomId: 'canvas' + +new Date(),
+      sortable: null as any,
+      list: [] as any,
+      options: [
+        {
+          index: 1,
+          value: 'Sol',
+          left: false,
+          right: false,
+          locked: false // 是否已经连线
+        },
+        {
+          index: 2,
+          value: 'Sal',
+          left: false,
+          right: false,
+          locked: false
+        },
+        {
+          index: 3,
+          value: 'La',
+          left: false,
+          right: false,
+          locked: false
+        },
+        {
+          index: 4,
+          value: 'Si',
+          left: false,
+          right: false,
+          locked: false
+        }
+      ],
+      selectItem: [] as any
+    })
+
+    const onLeftClick = (e: any, item: any) => {
+      const obj = useRect(e.target)
+      console.log(e, obj)
+      state.options.forEach((item: any) => {
+        item.left = false
+      })
+      item.left = !item.left
+
+      // 为true时添加定位
+      if (item.left) {
+        state.selectItem[0] = obj
+      }
+    }
+
+    const onRightClick = (e: any, item: any) => {
+      const obj = useRect(e.target)
+      console.log(e, obj)
+      state.options.forEach((item: any) => {
+        item.right = false
+      })
+      item.right = !item.right
+
+      // 为true时添加定位
+      if (item.right) {
+        state.selectItem[1] = obj
+
+        if (state.selectItem.length >= 2) {
+          drawLine()
+        }
+      }
+    }
+
+    const drawLine = () => {
+      const canvas: any = document.getElementById(state.canvasDomId)
+      const canvasPostion = useRect(canvas)
+      console.log(canvasPostion, 'canvasPostion')
+
+      const firstPostion = state.selectItem[0]
+      const secondPostion = state.selectItem[1]
+
+      const startPoint = {
+        x: firstPostion.width,
+        y: firstPostion.top + firstPostion.height / 2 - canvasPostion.top
+      }
+
+      const endPoint = {
+        x: secondPostion.left - canvasPostion.left,
+        y: secondPostion.top + secondPostion.height / 2 - canvasPostion.top
+      }
+
+      const ctx = canvas.getContext('2d')
+      console.log(startPoint, endPoint, ctx)
+
+      ctx.beginPath()
+      ctx.moveTo(startPoint.x, startPoint.y)
+      ctx.lineTo(endPoint.x, endPoint.y)
+      ctx.lineWidth = 2
+      ctx.strokeStyle = '#FF8057'
+      ctx.stroke()
+    }
+
+    // const onSelect = (item: any) => {
+    //   if (props.type === 'checkbox') {
+    //     // 判断是否已选过
+    //     const value: any = props.value
+    //     if (value.includes(item.index)) {
+    //       const index = value.findIndex((v: any) => v === item.index)
+    //       value.splice(index, 1)
+    //       emit('update:value', [...value])
+    //     } else {
+    //       emit('update:value', [item.index, ...value])
+    //     }
+    //   } else {
+    //     emit('update:value', item.index)
+    //   }
+    // }
+
+    onMounted(() => {
+      const answer: any = document.getElementById(state.answerDomId)
+      const { width, height } = useRect(answer)
+      console.log(width, height)
+      state.answerObj = {
+        height,
+        width
+      }
+    })
+
+    return () => (
+      <div class={styles.unitSubject}>
+        <div class={styles.unitSubjectTitle}>
+          1、选出与方框内音符时值相同的节奏阶段 <span class={styles.unitScore}>(5分)</span>
+          <Tag type="primary">连连看</Tag>
+        </div>
+
+        <Image
+          class={styles.unitTitleImg}
+          src="https://lanhu-dds-backend.oss-cn-beijing.aliyuncs.com/merge_image/imgs/dbb27307d428424c8efb9f26032cfa1a_mergeImage.png"
+        />
+
+        <div class={[styles.unitAnswers]} id={state.answerDomId}>
+          <div class={styles.leftSection}>
+            {state.options.map((item: any) => (
+              <div
+                class={[styles.unitItem, item.left && styles.active]}
+                onClick={(e: any) => onLeftClick(e, item)}
+              >
+                <Image
+                  src="https://lanhu-dds-backend.oss-cn-beijing.aliyuncs.com/merge_image/imgs/dbb27307d428424c8efb9f26032cfa1a_mergeImage.png"
+                  class={styles.img}
+                />
+              </div>
+            ))}
+          </div>
+          <div class={styles.rightSection}>
+            {state.options.map((item: any) => (
+              <div
+                class={[styles.unitItem, item.right && styles.active]}
+                onClick={(e: any) => onRightClick(e, item)}
+              >
+                Re{item.index}
+              </div>
+            ))}
+          </div>
+
+          <canvas
+            id={state.canvasDomId}
+            class={styles.canvasSection}
+            width={state.answerObj.width}
+            height={state.answerObj.height}
+          ></canvas>
+        </div>
+      </div>
+    )
+  }
+})

+ 19 - 10
src/views/unit-test/unit-detail/index.tsx

@@ -10,7 +10,7 @@ import {
   SwipeItem,
   Tag
 } from 'vant'
-import { defineComponent, reactive, ref } from 'vue'
+import { defineComponent, onMounted, reactive, ref } from 'vue'
 import { useRoute, useRouter } from 'vue-router'
 import NoticeStart from '../model/notice-start'
 import styles from './index.module.less'
@@ -19,9 +19,10 @@ import iconCountDown from '../images/icon-count-down.png'
 import iconButtonList from '../images/icon-button-list.png'
 import OSticky from '@/components/o-sticky'
 import ChoiceQuestion from '../model/choice-question'
-import { useCountDown } from '@vant/use'
 import AnswerList from '../model/answer-list'
 import ODialog from '@/components/o-dialog'
+import DragQuestion from '../model/drag-question'
+import KeepLookQuestion from '../model/keep-look-question'
 
 export default defineComponent({
   name: 'unit-detail',
@@ -34,10 +35,15 @@ export default defineComponent({
       visiableNotice: false,
       visiableAnswer: false,
       currentIndex: 0,
-      questionList: [1, 2, 3, 4, 5],
+      questionList: [5],
       answerList: {},
       time: 30 * 60 * 1000,
-      visiableSure: false
+      visiableSure: false,
+      childs: [
+        { name: 'John', id: 0 },
+        { name: 'Joao', id: 1 },
+        { name: 'Jean', id: 2 }
+      ]
     })
 
     return () => (
@@ -73,11 +79,16 @@ export default defineComponent({
           duration={300}
           touchable={false}
           lazyRender
-          initialSwipe={state.currentIndex}
+          // initialSwipe={state.currentIndex}
+          onChange={(index: number) => {
+            state.currentIndex = index
+          }}
         >
           {state.questionList.map((item: any) => (
             <SwipeItem>
-              <ChoiceQuestion v-model:value={state.answerList[item]} type="checkbox" />
+              {/* <ChoiceQuestion v-model:value={state.answerList[item]} type="checkbox" /> */}
+              {/* <DragQuestion /> */}
+              <KeepLookQuestion />
             </SwipeItem>
           ))}
         </Swipe>
@@ -91,7 +102,6 @@ export default defineComponent({
                 type="primary"
                 plain
                 onClick={() => {
-                  state.currentIndex -= 1
                   swipeRef.value?.prev()
                 }}
               >
@@ -103,13 +113,11 @@ export default defineComponent({
               round
               type="primary"
               onClick={() => {
-                if (state.questionList.length === state.currentIndex + 1) {
+                if (state.questionList.length - 1 === state.currentIndex) {
                   state.visiableSure = true
                 } else {
-                  state.currentIndex += 1
                   swipeRef.value?.next()
                 }
-                console.log(state.currentIndex)
               }}
             >
               {state.questionList.length === state.currentIndex + 1 ? '测试完成' : '下一题'}
@@ -131,6 +139,7 @@ export default defineComponent({
               swipeRef.value?.swipeTo(item, {
                 immediate: true
               })
+              state.visiableAnswer = false
             }}
           />
         </ActionSheet>

Някои файлове не бяха показани, защото твърде много файлове са промени