Browse Source

Merge branch 'dev' of http://git.dayaedu.com/huangqiyong/classroom

黄琪勇 11 months ago
parent
commit
53331b870a
100 changed files with 816 additions and 112 deletions
  1. 0 0
      dist/css/25.adf5a690.css
  2. 0 0
      dist/css/365.67a2fae0.css
  3. 0 0
      dist/css/365.eb7f6ac0.css
  4. 0 0
      dist/css/421.bdf73258.css
  5. 0 0
      dist/css/77.586635e1.css
  6. 0 0
      dist/css/808.dd15425d.css
  7. 0 0
      dist/css/901.9a69515b.css
  8. 0 0
      dist/css/901.c50714b7.css
  9. 0 0
      dist/css/967.700f8b8c.css
  10. 0 0
      dist/css/app.4390d2a7.css
  11. 0 0
      dist/css/app.e24cef09.css
  12. BIN
      dist/fonts/DIN_Alternate_Bold.b3f31a5f.ttf
  13. BIN
      dist/img/bg.0d12965d.png
  14. BIN
      dist/img/bg1.7309242c.png
  15. BIN
      dist/img/kuang.d94d532e.png
  16. BIN
      dist/img/loading.b17515ef.gif
  17. BIN
      dist/img/mid.c9654fbf.png
  18. BIN
      dist/img/shujia.24f3cb41.png
  19. 45 1
      dist/index.html
  20. 0 0
      dist/js/25.10a6bf22.js
  21. 0 1
      dist/js/355.caea621e.js
  22. 0 0
      dist/js/421.7cea7a31.js
  23. 0 0
      dist/js/530.a9aeccbb.js
  24. 1 0
      dist/js/77.c777ee5c.js
  25. 0 0
      dist/js/808.d0984145.js
  26. 0 1
      dist/js/814.35f3fe4d.js
  27. 0 0
      dist/js/901.2600f8d0.js
  28. 0 0
      dist/js/967.ce6c8833.js
  29. 0 0
      dist/js/app.a742e359.js
  30. 0 0
      dist/js/chunk-vendors.cbad746c.js
  31. 0 0
      dist/js/chunk-vendors.e1570976.js
  32. 3 5
      package.json
  33. 48 1
      public/index.html
  34. 2 1
      src/api/cloudTextbooks.api.ts
  35. 33 0
      src/api/coursewarePlay.api.ts
  36. 133 0
      src/api/curriculum.api.ts
  37. 23 0
      src/api/homePage.api.ts
  38. 2 2
      src/api/user.api.ts
  39. 22 39
      src/assets/elementTheme.scss
  40. BIN
      src/assets/font/DIN_Alternate_Bold.ttf
  41. 5 0
      src/assets/font/index.scss
  42. 0 0
      src/businessComponents/navContainer/index.ts
  43. 19 9
      src/businessComponents/navContainer/navContainer.vue
  44. 75 30
      src/components/dictionary/dictionary.vue
  45. 1 5
      src/components/ellipsisScroll/ellipsisScroll.vue
  46. BIN
      src/components/myCalendar/img/jiao.png
  47. BIN
      src/components/myCalendar/img/left.png
  48. BIN
      src/components/myCalendar/img/left1.png
  49. BIN
      src/components/myCalendar/img/mid.png
  50. BIN
      src/components/myCalendar/img/midh.png
  51. BIN
      src/components/myCalendar/img/right.png
  52. BIN
      src/components/myCalendar/img/right1.png
  53. 2 0
      src/components/myCalendar/index.ts
  54. 260 0
      src/components/myCalendar/myCalendar.vue
  55. 0 0
      src/components/myInput/img/ss.png
  56. 2 0
      src/components/myInput/index.ts
  57. 102 0
      src/components/myInput/myInput.vue
  58. 26 6
      src/config/menus.ts
  59. 12 11
      src/hooks/useDialogConfirm/dialogConfirm.vue
  60. BIN
      src/img/coursewarePlay/IMG.png
  61. BIN
      src/img/coursewarePlay/IMG1.png
  62. BIN
      src/img/coursewarePlay/SONG.png
  63. BIN
      src/img/coursewarePlay/SONG1.png
  64. BIN
      src/img/coursewarePlay/VIDEO.png
  65. BIN
      src/img/coursewarePlay/VIDEO1.png
  66. BIN
      src/img/coursewarePlay/back.png
  67. BIN
      src/img/coursewarePlay/baiban.png
  68. BIN
      src/img/coursewarePlay/close.png
  69. 0 0
      src/img/coursewarePlay/icon-load.gif
  70. BIN
      src/img/coursewarePlay/jieshu.png
  71. BIN
      src/img/coursewarePlay/jtb.png
  72. BIN
      src/img/coursewarePlay/jtr.png
  73. BIN
      src/img/coursewarePlay/jtr1.png
  74. BIN
      src/img/coursewarePlay/kcml.png
  75. BIN
      src/img/coursewarePlay/pizhu.png
  76. BIN
      src/img/coursewarePlay/shang.png
  77. BIN
      src/img/coursewarePlay/ts.png
  78. BIN
      src/img/coursewarePlay/xia.png
  79. BIN
      src/img/coursewarePlay/zhishidian.png
  80. BIN
      src/img/curriculum/Band.png
  81. BIN
      src/img/curriculum/DEMO.png
  82. BIN
      src/img/curriculum/IMG.png
  83. BIN
      src/img/curriculum/LIVE.png
  84. BIN
      src/img/curriculum/PRACTICE.png
  85. BIN
      src/img/curriculum/SONG.png
  86. BIN
      src/img/curriculum/VIDEO.png
  87. BIN
      src/img/curriculum/Vip.png
  88. BIN
      src/img/curriculum/jg.png
  89. BIN
      src/img/curriculum/jt.png
  90. BIN
      src/img/curriculum/jt1.png
  91. BIN
      src/img/curriculum/jxmb.png
  92. BIN
      src/img/curriculum/kuang.png
  93. BIN
      src/img/curriculum/mid.png
  94. BIN
      src/img/curriculum/qd.png
  95. BIN
      src/img/curriculum/qd1.png
  96. BIN
      src/img/curriculum/qd2.png
  97. BIN
      src/img/curriculum/qt.png
  98. BIN
      src/img/curriculum/qt1.png
  99. BIN
      src/img/curriculum/qt2.png
  100. BIN
      src/img/curriculum/shujia.png

File diff suppressed because it is too large
+ 0 - 0
dist/css/25.adf5a690.css


File diff suppressed because it is too large
+ 0 - 0
dist/css/365.67a2fae0.css


File diff suppressed because it is too large
+ 0 - 0
dist/css/365.eb7f6ac0.css


File diff suppressed because it is too large
+ 0 - 0
dist/css/421.bdf73258.css


File diff suppressed because it is too large
+ 0 - 0
dist/css/77.586635e1.css


File diff suppressed because it is too large
+ 0 - 0
dist/css/808.dd15425d.css


File diff suppressed because it is too large
+ 0 - 0
dist/css/901.9a69515b.css


File diff suppressed because it is too large
+ 0 - 0
dist/css/901.c50714b7.css


File diff suppressed because it is too large
+ 0 - 0
dist/css/967.700f8b8c.css


File diff suppressed because it is too large
+ 0 - 0
dist/css/app.4390d2a7.css


File diff suppressed because it is too large
+ 0 - 0
dist/css/app.e24cef09.css


BIN
dist/fonts/DIN_Alternate_Bold.b3f31a5f.ttf


BIN
dist/img/bg.0d12965d.png


BIN
dist/img/bg1.7309242c.png


BIN
dist/img/kuang.d94d532e.png


BIN
dist/img/loading.b17515ef.gif


BIN
dist/img/mid.c9654fbf.png


BIN
dist/img/shujia.24f3cb41.png


+ 45 - 1
dist/index.html

@@ -1,3 +1,47 @@
 <!doctype html><html lang=""><head><meta charset="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="renderer" content="webkit"/><meta name="force-rendering" content="webkit"/><link rel="icon" href="/favicon.ico"/><title>乐教通</title><script>if (!!window.ActiveXObject || "ActiveXObject" in window) {
             window.location.href = "./ieIncompatible/index.html"
-         }</script><script defer="defer" src="/js/chunk-vendors.e1570976.js"></script><script defer="defer" src="/js/app.46158de7.js"></script><link href="/css/app.4390d2a7.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but classroom doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
+<<<<<<< HEAD
+         }</script><script defer="defer" src="/js/chunk-vendors.e1570976.js"></script><script defer="defer" src="/js/app.46158de7.js"></script><link href="/css/app.4390d2a7.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but classroom doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
+=======
+         }</script><script defer="defer" src="/js/chunk-vendors.cbad746c.js"></script><script defer="defer" src="/js/app.a742e359.js"></script><link href="/css/app.e24cef09.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but classroom doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"><style>.firstLoading {
+               position: fixed;
+               left: 50%;
+               top: 50%;
+               transform: translate(-50%, -50%);
+               height: 58px;
+               width: 58px;
+            }
+            .firstLoading .circular {
+               display: inline;
+               height: 100%;
+               width: 100%;
+               animation: loading-rotate 2s linear infinite;
+            }
+            .firstLoading .circular .path {
+               animation: loading-dash 1.5s ease-in-out infinite;
+               stroke-dasharray: 90, 150;
+               stroke-dashoffset: 0;
+               stroke-width: 4;
+               stroke: #f5c42d;
+               stroke-linecap: round;
+            }
+            @keyframes loading-rotate {
+               to {
+                  transform: rotate(360deg);
+               }
+            }
+            @keyframes loading-dash {
+               0% {
+                  stroke-dasharray: 1, 200;
+                  stroke-dashoffset: 0;
+               }
+               50% {
+                  stroke-dasharray: 90, 150;
+                  stroke-dashoffset: -40px;
+               }
+               to {
+                  stroke-dasharray: 90, 150;
+                  stroke-dashoffset: -120px;
+               }
+            }</style><div class="firstLoading"><svg class="circular" viewBox="0 0 50 50"><circle class="path" cx="25" cy="25" r="20" fill="none"></circle></svg></div></div></body></html>
+>>>>>>> 2a128e809756957acf47cddb4103db2453cdb64d

File diff suppressed because it is too large
+ 0 - 0
dist/js/25.10a6bf22.js


+ 0 - 1
dist/js/355.caea621e.js

@@ -1 +0,0 @@
-"use strict";(self["webpackChunkclassroom"]=self["webpackChunkclassroom"]||[]).push([[355],{7288:function(a,e,s){s.r(e),s.d(e,{default:function(){return f}});s(7658);var l=s(3396),n=s(4870),c=s(7139),m=s(1111),r=s(2483),u=s(4589);const i={class:"homePage"},o={class:"classTypes"},t=["onClick"],g=["src"],d={class:"courseBoard"},p={class:"details"};var v=(0,l.aZ)({__name:"homePage_gym",setup(a){const e=(0,r.tv)(),v={img:s(5824)},_=[{name:"主页"}],h=[{img:s(7339),name:"课表",url:""},{img:s(498),name:"训练",url:""},{img:s(2796),name:"进度测评",url:""},{img:s(8712),name:"训练统计",url:""},{img:s(6876),name:"云教练",url:""},{img:s(2341),name:"云教程",url:"/cloudTextbooks"}];function f(a){a?e.push(a):(0,u.Z)({headImg:s(7799),text:"该功能暂未开放,请敬请期待哦~",btnShow:[!0]})}return(a,e)=>{const r=(0,l.up)("el-empty"),u=(0,l.up)("ElScrollbar");return(0,l.wg)(),(0,l.j4)((0,n.SU)(m.Z),{class:"navContainer homePageNav",headImg:v,navs:_},{default:(0,l.w5)((()=>[(0,l._)("div",i,[(0,l.Wm)(u,{class:"elScrollbar"},{default:(0,l.w5)((()=>[(0,l._)("div",o,[((0,l.wg)(),(0,l.iD)(l.HY,null,(0,l.Ko)(h,(a=>(0,l._)("div",{class:"classType",key:a.name,onClick:e=>f(a.url)},[(0,l._)("img",{src:a.img},null,8,g),(0,l._)("div",null,(0,c.zw)(a.name),1)],8,t))),64))]),(0,l._)("div",d,[(0,l._)("div",p,[(0,l.Wm)(r,{class:"empty",image:s(5572),description:"您还没有待上课程哦~"},null,8,["image"])])])])),_:1})])])),_:1})}}}),_=s(89);const h=(0,_.Z)(v,[["__scopeId","data-v-3622d026"]]);var f=h},2796:function(a,e,s){a.exports=s.p+"img/jdcp.2aeb9227.png"}}]);

File diff suppressed because it is too large
+ 0 - 0
dist/js/421.7cea7a31.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/530.a9aeccbb.js


+ 1 - 0
dist/js/77.c777ee5c.js

@@ -0,0 +1 @@
+"use strict";(self["webpackChunkclassroom"]=self["webpackChunkclassroom"]||[]).push([[77],{5110:function(){},4012:function(s,c,a){a.r(c),a.d(c,{default:function(){return b}});a(7658);var n=a(3396),r=a.p+"img/404.ee28d6e3.png",t=(a(5110),a(2483));const e=s=>((0,n.dD)("data-v-104cb630"),s=s(),(0,n.Cn)(),s),i={class:"errorPage"},o=e((()=>(0,n._)("img",{class:"img",src:r},null,-1))),l=e((()=>(0,n._)("div",{class:"errName"},"糟糕,页面找不到了",-1))),u=e((()=>(0,n._)("div",{class:"title"},"您可以通过以下方式继续访问",-1)));var d=(0,n.aZ)({__name:"errorPage",setup(s){const c=(0,t.tv)();function a(){c.push({path:"/"})}function r(){c.back()}return(s,c)=>((0,n.wg)(),(0,n.iD)("div",i,[(0,n._)("div",{class:"error"},[o,l,u,(0,n._)("div",{class:"btnCon"},[(0,n._)("div",{class:"btn",onClick:a},"跳转到首页"),(0,n._)("div",{class:"btn",onClick:r},"返回上一步")])])]))}}),v=a(89);const _=(0,v.Z)(d,[["__scopeId","data-v-104cb630"]]);var p=_,b=p}}]);

File diff suppressed because it is too large
+ 0 - 0
dist/js/808.d0984145.js


+ 0 - 1
dist/js/814.35f3fe4d.js

@@ -1 +0,0 @@
-"use strict";(self["webpackChunkclassroom"]=self["webpackChunkclassroom"]||[]).push([[814],{4249:function(a,e,s){s.r(e),s.d(e,{default:function(){return f}});s(7658);var l=s(3396),n=s(4870),c=s(7139),m=s(1111),r=s(2483),u=s(4589);const i={class:"homePage"},o={class:"classTypes"},t=["onClick"],g=["src"],d={class:"courseBoard"},p={class:"details"};var v=(0,l.aZ)({__name:"homePage_gyt",setup(a){const e=(0,r.tv)(),v={img:s(5824)},_=[{name:"主页"}],h=[{img:s(7339),name:"课表",url:""},{img:s(498),name:"课后作业",url:""},{img:s(7619),name:"阶段自测",url:""},{img:s(8712),name:"练习情况",url:""},{img:s(6876),name:"云练习",url:""},{img:s(2341),name:"云教材",url:"/cloudTextbooks"}];function f(a){a?e.push(a):(0,u.Z)({headImg:s(7799),text:"该功能暂未开放,请敬请期待哦~",btnShow:[!0]})}return(a,e)=>{const r=(0,l.up)("el-empty"),u=(0,l.up)("ElScrollbar");return(0,l.wg)(),(0,l.j4)((0,n.SU)(m.Z),{class:"navContainer homePageNav",headImg:v,navs:_},{default:(0,l.w5)((()=>[(0,l._)("div",i,[(0,l.Wm)(u,{class:"elScrollbar"},{default:(0,l.w5)((()=>[(0,l._)("div",o,[((0,l.wg)(),(0,l.iD)(l.HY,null,(0,l.Ko)(h,(a=>(0,l._)("div",{class:"classType",key:a.name,onClick:e=>f(a.url)},[(0,l._)("img",{src:a.img},null,8,g),(0,l._)("div",null,(0,c.zw)(a.name),1)],8,t))),64))]),(0,l._)("div",d,[(0,l._)("div",p,[(0,l.Wm)(r,{class:"empty",image:s(5572),description:"您还没有待上课程哦~"},null,8,["image"])])])])),_:1})])])),_:1})}}}),_=s(89);const h=(0,_.Z)(v,[["__scopeId","data-v-58c5511c"]]);var f=h},7619:function(a,e,s){a.exports=s.p+"img/jdzc.1b5d1a15.png"}}]);

File diff suppressed because it is too large
+ 0 - 0
dist/js/901.2600f8d0.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/967.ce6c8833.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/app.a742e359.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/chunk-vendors.cbad746c.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/chunk-vendors.e1570976.js


+ 3 - 5
package.json

@@ -14,18 +14,15 @@
       "axios": "^1.3.6",
       "core-js": "^3.8.3",
       "element-plus": "^2.6.1",
-      "html2canvas": "^1.4.1",
       "js-cookie": "^3.0.5",
       "md5": "^2.3.0",
       "nprogress": "^0.2.0",
       "pinia": "^2.0.35",
-      "plyr": "^3.7.8",
       "qrcode.vue": "^3.4.1",
       "screenfull": "^6.0.2",
-      "vant": "^4.8.7",
+      "tcplayer.js": "^4.8.0",
       "vue": "^3.2.13",
-      "vue-router": "^4.0.3",
-      "vue3-lottie": "^3.3.0"
+      "vue-router": "^4.0.3"
    },
    "devDependencies": {
       "@types/js-cookie": "^3.0.3",
@@ -43,6 +40,7 @@
       "eslint-config-prettier": "^8.3.0",
       "eslint-plugin-prettier": "^4.0.0",
       "eslint-plugin-vue": "^8.0.3",
+      "postcss-pxtorem": "^6.1.0",
       "prettier": "^2.4.1",
       "sass": "^1.32.7",
       "sass-loader": "^12.0.0",

+ 48 - 1
public/index.html

@@ -20,7 +20,54 @@
             We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.
          </strong>
       </noscript>
-      <div id="app"></div>
+      <div id="app">
+         <style>
+            .firstLoading {
+               position: fixed;
+               left: 50%;
+               top: 50%;
+               transform: translate(-50%, -50%);
+               height: 58px;
+               width: 58px;
+            }
+            .firstLoading .circular {
+               display: inline;
+               height: 100%;
+               width: 100%;
+               animation: loading-rotate 2s linear infinite;
+            }
+            .firstLoading .circular .path {
+               animation: loading-dash 1.5s ease-in-out infinite;
+               stroke-dasharray: 90, 150;
+               stroke-dashoffset: 0;
+               stroke-width: 4;
+               stroke: #f5c42d;
+               stroke-linecap: round;
+            }
+            @keyframes loading-rotate {
+               to {
+                  transform: rotate(360deg);
+               }
+            }
+            @keyframes loading-dash {
+               0% {
+                  stroke-dasharray: 1, 200;
+                  stroke-dashoffset: 0;
+               }
+               50% {
+                  stroke-dasharray: 90, 150;
+                  stroke-dashoffset: -40px;
+               }
+               to {
+                  stroke-dasharray: 90, 150;
+                  stroke-dashoffset: -120px;
+               }
+            }
+         </style>
+         <div class="firstLoading">
+            <svg class="circular" viewBox="0 0 50 50"><circle class="path" cx="25" cy="25" r="20" fill="none"></circle></svg>
+         </div>
+      </div>
       <!-- built files will be auto injected -->
    </body>
 </html>

+ 2 - 1
src/api/cloudTextbooks.api.ts

@@ -3,8 +3,9 @@ import { httpAxios_gym, httpAxios_gyt } from "@/api/ApiInstance"
 /** 管乐迷 */
 
 //获取课程列表
-export const queryLessonCourseware_gym = (type: string) => {
+export const queryLessonCourseware_gym = (type: string, abortController: AbortController) => {
    return httpAxios_gym.axioseRquest({
+      signal: abortController.signal,
       method: "post",
       url: "/api-teacher/lessonCourseware/queryLessonCourseware",
       data: {

+ 33 - 0
src/api/coursewarePlay.api.ts

@@ -0,0 +1,33 @@
+import { httpAxios_gyt } from "@/api/ApiInstance"
+
+/**
+ * 管乐团
+ */
+
+// 获取当前播放的时间
+export const getCoursewarePlayTime_gyt = (id: string) => {
+   return httpAxios_gyt.axioseRquest({
+      method: "post",
+      url: "/api-teacher/courseSchedule/getCoursewarePlayTime?courseScheduleId=" + id,
+      params: {
+         playFrom: "WEB"
+      }
+   })
+}
+// 记录时间
+export const coursewarePlayTime_gyt = (id: string, time: number) => {
+   return httpAxios_gyt.axioseRquest({
+      method: "post",
+      url: `/api-teacher/courseSchedule/coursewarePlayTime?courseScheduleId=${id}&playTime=${time}`,
+      params: {
+         playFrom: "WEB"
+      }
+   })
+}
+// 判断是否签退
+export const checkWebCourse_gyt = (id: string) => {
+   return httpAxios_gyt.axioseRquest({
+      method: "post",
+      url: `/api-teacher/courseSchedule/checkWebCourse/` + id
+   })
+}

+ 133 - 0
src/api/curriculum.api.ts

@@ -0,0 +1,133 @@
+import { httpAxios_gym, httpAxios_gyt } from "@/api/ApiInstance"
+
+/** 管乐迷 */
+
+// 获取课程详情
+export const getCurrentCourseDetail_gym = (id: string) => {
+   return httpAxios_gym.axioseRquest({
+      method: "get",
+      url: "/api-teacher/teacherCourseSchedule/getCurrentCourseDetail",
+      params: {
+         courseID: id
+      }
+   })
+}
+// 获取课件详情 详情展示用
+export const getLessonCourseDetail_gym = (id: string) => {
+   return httpAxios_gym.axioseRquest({
+      method: "get",
+      url: "/api-teacher/lessonCourseware/getLessonCourseDetail/" + id
+   })
+}
+
+//获取课程列表
+export const queryLessonCourseware_gym = () => {
+   return httpAxios_gym.axioseRquest({
+      method: "post",
+      url: "/api-teacher/lessonCourseware/queryLessonCourseware",
+      data: {
+         query: {
+            page: 1,
+            rows: 9999
+         }
+      }
+   })
+}
+// 课程详情列表
+export const getLessonCoursewareCourseList_gym = (id: string) => {
+   return httpAxios_gym.axioseRquest({
+      method: "get",
+      url: "/api-teacher/lessonCourseware/getLessonCoursewareCourseList/" + id
+   })
+}
+// 设置课件
+export const setCoursewareDetail_gym = (id: string, courseId: string) => {
+   return httpAxios_gym.axioseRquest({
+      method: "get",
+      url: `/api-teacher/teacher/configCourseware`,
+      params: {
+         courseId,
+         coursewareDetailId: id
+      }
+   })
+}
+// 获取当月所有的课程日期 month=2024-04
+export const getCourseScheduleDateByMonth_gym = (date: string, abortController: AbortController) => {
+   return httpAxios_gym.axioseRquest({
+      method: "get",
+      signal: abortController.signal,
+      url: `/api-teacher/teacherCourseSchedule/getCourseScheduleDateByMonth?month=${date}`
+   })
+}
+// 获取当天的课程列表 date=2024-04-03
+export const getCourseSchedulesWithDate_gym = (date: string, abortController: AbortController) => {
+   return httpAxios_gym.axioseRquest({
+      method: "get",
+      signal: abortController.signal,
+      url: `/api-teacher/teacherCourseSchedule/getCourseSchedulesWithDate?date=${date}`
+   })
+}
+/**
+ * 管乐团
+ */
+
+// 获取课程详情
+export const getCourseScheduleDetail_gyt = (id: string) => {
+   return httpAxios_gyt.axioseRquest({
+      method: "get",
+      url: "/api-teacher/courseSchedule/detail/" + id
+   })
+}
+// 获取课程能选择的课件列表
+export const getCourseware_gyt = (id: string) => {
+   return httpAxios_gyt.axioseRquest({
+      method: "post",
+      url: "/api-teacher/courseSchedule/getCourseware/" + id
+   })
+}
+
+// 获取课件详情 配置课件用
+export const getCoursewareDetail_gyt = (id: string, courseId: string) => {
+   return httpAxios_gyt.axioseRquest({
+      method: "post",
+      url: `/api-teacher/courseSchedule/getCoursewareDetail?courseScheduleId=${courseId}&coursewareId=${id}`
+   })
+}
+// 设置课件
+export const setCoursewareDetail_gyt = (id: string, courseId: string) => {
+   return httpAxios_gyt.axioseRquest({
+      method: "post",
+      url: `/api-teacher/courseSchedule/setCoursewareDetail?courseScheduleId=${courseId}&coursewareDetailId=${id}`
+   })
+}
+
+// 获取课件详情 详情展示用
+export const getLessonCoursewareDetail_gyt = (id: string) => {
+   return httpAxios_gyt.axioseRquest({
+      method: "get",
+      url: "/api-teacher/lessonCoursewareDetail/detail/" + id
+   })
+}
+
+// 获取当月所有的课程日期 month=2024-04
+export const getCourseScheduleDateByMonth_gyt = (date: string, abortController: AbortController) => {
+   return httpAxios_gyt.axioseRquest({
+      signal: abortController.signal,
+      method: "post",
+      url: `/api-teacher/courseSchedule/calendar`,
+      data: {
+         classMonth: date
+      }
+   })
+}
+// 获取当天的课程列表 date=2024-04-03
+export const getCourseSchedulesWithDate_gyt = (date: string, abortController: AbortController) => {
+   return httpAxios_gyt.axioseRquest({
+      signal: abortController.signal,
+      method: "post",
+      url: `/api-teacher/courseSchedule/page`,
+      data: {
+         classDate: date
+      }
+   })
+}

+ 23 - 0
src/api/homePage.api.ts

@@ -0,0 +1,23 @@
+import { httpAxios_gym, httpAxios_gyt } from "@/api/ApiInstance"
+
+/** 管乐迷 */
+
+// 首页课程 传id就是查课程详情 不传id就是查下次课程
+export const getRecentCourseSchedule_gym = (id?: string) => {
+   return httpAxios_gym.axioseRquest({
+      method: "post",
+      url: `/api-teacher/teacherCourseSchedule/getRecentCourseSchedule${id ? "?courseId=" + id : ""}`
+   })
+}
+
+/**
+ * 管乐团
+ */
+
+// 首页课程
+export const getRemind_gyt = () => {
+   return httpAxios_gyt.axioseRquest({
+      method: "post",
+      url: "/api-teacher/courseSchedule/remind"
+   })
+}

+ 2 - 2
src/api/user.api.ts

@@ -1,10 +1,10 @@
 import { httpAxios, httpAxiosNoNprogress, httpAxios_gym, httpAxios_gyt } from "@/api/ApiInstance"
 
 /** 获取二维码 */
-export const createQrcodeApi = () => {
+export const createQrcodeApi = (uuid?: string) => {
    return httpAxios.axioseRquest({
       method: "get",
-      url: "/open/qrcode/create"
+      url: "/open/qrcode/create?uuid=" + uuid
    })
 }
 

+ 22 - 39
src/assets/elementTheme.scss

@@ -12,59 +12,42 @@
 @use "element-plus/theme-chalk/src/index.scss" as *;
 
 /* 普通模式 */
-// :root {}
+:root {
+   --el-loading-spinner-size: 50px;
+   --el-loading-fullscreen-spinner-size: 58px;
+}
 /* 暗黑模式 */
 //html.dark {}
+
 //表头加颜色
 .el-table .el-table__header thead th {
    background-color: var(--el-bg-color-page);
 }
 
+/* 空元素全局样式 */
 .el-empty .el-empty__description p {
    font-weight: 400;
-   font-size: 2.2rem;
+   font-size: 22px;
    color: #aaaaaa;
 }
 
-.el-cascader__dropdown {
-   .el-cascader-menu__list {
-      padding: 12px 0;
-   }
-   .el-cascader-node:not(.is-disabled):hover,
-   .el-cascader-node:not(.is-disabled):focus {
-      background-color: transparent;
-   }
-   .el-cascader-menu:last-child .el-cascader-node {
-      padding: 0 12px;
-      line-height: 40px;
-      height: 40px;
-   }
-   .el-cascader-node__prefix {
-      display: none;
-   }
-   .is-active .el-cascader-node__label {
-      color: #994d1c;
-   }
-   .el-cascader-node__label {
-      font-size: 16px;
-      border-radius: 8px;
-      &:hover {
-         color: #994d1c;
-         background: #fff3d7;
-      }
+/* 加载条加宽 */
+.el-loading-spinner {
+   margin-top: 0;
+   transform: translateY(-50%);
+   .path {
+      stroke-width: 4;
    }
 }
 
-.el-popper.is-light {
-   box-shadow: rgba(0, 0, 0, 0.08) 0px 2px 17px 0px;
-   border-radius: 12px;
-   border: none;
-   .el-popper__arrow {
-      display: none;
+/* 滚动条 */
+.el-scrollbar {
+   .el-scrollbar__bar.is-vertical {
+      right: 1px;
+      width: 5px;
+      .el-scrollbar__thumb {
+         opacity: 1;
+         background-color: #dbd6d2;
+      }
    }
 }
-
-.el-scrollbar__thumb {
-   opacity: 1;
-   background-color: #ececec;
-}

BIN
src/assets/font/DIN_Alternate_Bold.ttf


+ 5 - 0
src/assets/font/index.scss

@@ -2,3 +2,8 @@
    font-family: "AlimamaFangYuanTiVF";
    src: url("./AlimamaFangYuanTiVF-Thin.woff2");
 }
+
+@font-face {
+   font-family: "DINAlternate";
+   src: url("./DIN_Alternate_Bold.ttf");
+}

+ 0 - 0
src/views/homePage/components/navContainer/index.ts → src/businessComponents/navContainer/index.ts


+ 19 - 9
src/views/homePage/components/navContainer/navContainer.vue → src/businessComponents/navContainer/navContainer.vue

@@ -30,16 +30,26 @@ const router = useRouter()
  * headImg  头部图片与跳转
  * navs    导航栏
  */
-const props = defineProps<{
-   headImg: {
-      img: string
-      url?: string
+const props = withDefaults(
+   defineProps<{
+      headImg?: {
+         img: string
+         url?: string
+      }
+      navs: {
+         name: string
+         url?: string
+      }[]
+   }>(),
+   {
+      headImg: () => {
+         return {
+            img: require("@/img/layout/back.png"),
+            url: "back"
+         }
+      }
    }
-   navs: {
-      name: string
-      url?: string
-   }[]
-}>()
+)
 
 function handleRouter(url?: string) {
    url && (url === "back" ? router.back() : router.push(url))

+ 75 - 30
src/components/dictionary/dictionary.vue

@@ -5,36 +5,31 @@
 -->
 <template>
    <el-cascader
-      class="dictionary"
-      v-model="myValue"
-      :disabled="props.disabled"
-      :size="props.size"
+      class="h_dictionary"
       :show-all-levels="false"
-      :options="props.options"
       :props="propsOpt"
       :clearable="props.clearable"
-      :placeholder="placeholder"
-      :popperClass="popperClass"
+      :popperClass="popperClass + ' dictionaryPopper'"
+      v-bind="$attrs"
    />
 </template>
 
 <script setup lang="ts">
-import { CascaderOption, CascaderProps, CascaderValue } from "element-plus"
-import { computed } from "vue"
+import { baseSize } from "@/libs/rem"
+import { CascaderProps } from "element-plus"
+import { computed, useAttrs } from "vue"
 import dictionaryCacheStore from "@/store/modules/dictionaryCache"
 
+const attrs = useAttrs()
 const dictionaryCacheStoreHook = dictionaryCacheStore()
 const props = withDefaults(
    defineProps<{
-      modelValue?: CascaderValue
-      options?: CascaderOption[]
       clearable?: boolean
       propsOpt?: Omit<CascaderProps, "lazyLoad" | "emitPath" | "lazy">
       dictionaryKey?: string
-      disabled?: boolean
-      size?: "default" | "small" | "large"
-      placeholder?: string
       popperClass?: string
+      width?: number
+      height?: number
    }>(),
    {
       clearable: true,
@@ -43,13 +38,8 @@ const props = withDefaults(
       }
    }
 )
-const emits = defineEmits<{
-   (e: "update:modelValue", value?: CascaderValue): void
-   (e: "change", value?: CascaderValue): void
-}>()
-
 const propsOpt: CascaderProps = {
-   emitPath: Array.isArray(props.modelValue) ? true : false, //当可能为多级字典时候 emitPath为true 值为数组模式
+   emitPath: Array.isArray(attrs.modelValue) ? true : false, //当可能为多级字典时候 emitPath为true 值为数组模式
    lazy: props.dictionaryKey ? true : false,
    leaf: "haveChild",
    async lazyLoad({ level, data }, resolve) {
@@ -60,19 +50,74 @@ const propsOpt: CascaderProps = {
 //赋值
 Object.assign(propsOpt, props.propsOpt)
 
-const myValue = computed({
-   get() {
-      return props.modelValue
-   },
-   set(value) {
-      emits("update:modelValue", value)
-      emits("change", value)
-   }
+const _h_width = computed(() => {
+   return props.width ? (props.width / baseSize).toFixed(5) + "rem" : "100%"
+})
+const _h_height = computed(() => {
+   return (((props.height || 32) - 4) / baseSize).toFixed(5) + "rem"
 })
 </script>
 
 <style lang="scss">
-.dictionary {
-   width: 100%;
+.h_dictionary {
+   flex-shrink: 0;
+   width: v-bind(_h_width);
+   .el-input {
+      --el-input-text-color: #333;
+      font-size: 16px;
+   }
+   .el-input__suffix {
+      font-size: 14px;
+   }
+   .el-input__wrapper {
+      border-radius: 20px;
+      box-shadow: none;
+      padding: 1px 26px 1px 16px;
+      border: 1px solid transparent;
+      &.is-focus {
+         border-color: #ff8057 !important;
+         box-shadow: 0px 0px 4px 0px rgba(255, 155, 109) !important;
+      }
+      .el-input__inner {
+         --el-input-inner-height: v-bind(_h_height);
+      }
+   }
+}
+
+.el-cascader__dropdown.el-popper.is-light.dictionaryPopper {
+   box-shadow: rgba(0, 0, 0, 0.08) 0px 2px 17px 0px;
+   border-radius: 12px;
+   border: none;
+   .el-cascader-menu__list {
+      padding: 12px 0;
+   }
+   .el-cascader-node:not(.is-disabled):hover,
+   .el-cascader-node:not(.is-disabled):focus {
+      background-color: transparent;
+   }
+   .el-cascader-menu {
+      &:last-child .el-cascader-node {
+         padding: 0 12px;
+         line-height: 40px;
+         height: 40px;
+      }
+   }
+   .el-cascader-node__prefix {
+      display: none;
+   }
+   .is-active .el-cascader-node__label {
+      color: #994d1c;
+   }
+   .el-cascader-node__label {
+      font-size: 16px;
+      border-radius: 8px;
+      &:hover {
+         color: #994d1c;
+         background: #fff3d7;
+      }
+   }
+   .el-popper__arrow {
+      display: none;
+   }
 }
 </style>

+ 1 - 5
src/components/ellipsisScroll/ellipsisScroll.vue

@@ -44,19 +44,15 @@ function handleLeaveScroll() {
 </script>
 
 <style lang="scss" scoped>
-.xx {
-   width: 100%;
-}
 .ellipsisScroll {
    width: 100%;
-   display: inline-block;
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;
    &.isScroll {
       &:hover {
          width: auto;
-         overflow: visible;
+         overflow: initial;
          animation: 3s roll linear infinite normal;
       }
       @keyframes roll {

BIN
src/components/myCalendar/img/jiao.png


BIN
src/components/myCalendar/img/left.png


BIN
src/components/myCalendar/img/left1.png


BIN
src/components/myCalendar/img/mid.png


BIN
src/components/myCalendar/img/midh.png


BIN
src/components/myCalendar/img/right.png


BIN
src/components/myCalendar/img/right1.png


+ 2 - 0
src/components/myCalendar/index.ts

@@ -0,0 +1,2 @@
+import myCalendar from "./myCalendar.vue"
+export default myCalendar

+ 260 - 0
src/components/myCalendar/myCalendar.vue

@@ -0,0 +1,260 @@
+<!--
+* @FileDescription: 日历
+* @Author: 黄琪勇
+* @Date:2024-03-28 19:43:30
+-->
+<template>
+   <el-calendar ref="calendarDom" :class="{ isNowMonth: isNowMonth }" class="h-calendar" v-model="dateData" v-bind="$attrs">
+      <template #header="{}">
+         <div class="calendarHead">
+            <div class="tit">{{ format(dateData, "yyyy年mm月") }}</div>
+            <div class="operate">
+               <div class="left" @click="selectDate('prev-month')"></div>
+               <div
+                  class="mid"
+                  :class="{ now: format(props.modelValue, 'yyyy/mm/dd') === format(new Date(), 'yyyy/mm/dd') }"
+                  @click="selectDate('today')"
+               ></div>
+               <div class="right" @click="selectDate('next-month')"></div>
+            </div>
+         </div>
+      </template>
+      <template #date-cell="{ data }">
+         <div class="dayCon" @click.stop>
+            <div v-if="data.type === 'current-month'" :class="isMarkClass(data.day)" class="dayBox" @click.stop="handleClickDate(data)">
+               <div class="daytit">
+                  {{
+                     format() === data.day && format(props.modelValue, "yyyy/mm/dd") !== format(new Date(), "yyyy/mm/dd")
+                        ? "今"
+                        : format(data.day, "d")
+                  }}
+               </div>
+            </div>
+            <div v-else class="nobg"></div>
+         </div>
+      </template>
+   </el-calendar>
+</template>
+
+<script setup lang="ts">
+import { format } from "@/libs/tools"
+import { ref, computed, watch } from "vue"
+import type { CalendarDateType, CalendarInstance } from "element-plus"
+import { useLocale } from "element-plus"
+import dayjs from "dayjs"
+
+const props = defineProps<{
+   modelValue: Date
+   dayMarks?: string[]
+}>()
+
+const emits = defineEmits<{
+   (e: "update:modelValue", value: Date): void
+   (e: "monthChange", value: Date): void
+}>()
+
+const isNowMonth = computed(() => {
+   return dateData.value.getMonth() === props.modelValue.getMonth() && dateData.value.getFullYear() === props.modelValue.getFullYear()
+})
+const isMarkClass = (date: string) => {
+   if (!props.dayMarks) {
+      return ""
+   }
+   const index = props.dayMarks.findIndex(day => {
+      return format(day) === format(date)
+   })
+   if (index === -1) {
+      return ""
+   }
+   return new Date(date.replace(/-/g, "/")) < new Date(format(new Date(), "yyyy/mm/dd")) ? "old" : "new"
+}
+const { lang } = useLocale()
+const dateData = ref(props.modelValue)
+
+watch(isNowMonth, () => {
+   if (isNowMonth.value) dateData.value = props.modelValue
+})
+watch(dateData, (newVal, oldVal) => {
+   if (newVal.getMonth() !== oldVal.getMonth()) {
+      emits("monthChange", newVal)
+   }
+})
+
+const calendarDom = ref<CalendarInstance>()
+const selectDate = (val: CalendarDateType) => {
+   calendarDom.value?.selectDate(val)
+   if (val == "today") {
+      emits("update:modelValue", dateData.value)
+   }
+}
+
+function handleClickDate(data: { type: "prev-month" | "current-month" | "next-month"; isSelected: boolean; day: string; date: Date }) {
+   calendarDom.value?.pickDay(dayjs(data.date).locale(lang.value))
+   emits("update:modelValue", dateData.value)
+}
+</script>
+
+<style lang="scss">
+.h-calendar.el-calendar {
+   --el-calendar-cell-width: 70px;
+   background-color: #fff;
+   .el-calendar__body {
+      padding: 0;
+   }
+   /* 头部 */
+   .el-calendar__header {
+      padding: initial;
+      border-bottom: none;
+   }
+   .el-calendar-table thead th {
+      font-weight: 400;
+      font-size: 24px;
+      color: #777777;
+      padding: 32px 0 18px 0;
+   }
+   .calendarHead {
+      width: 100%;
+      height: 42px;
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      .tit {
+         font-weight: 600;
+         font-size: 30px;
+         color: #333333;
+      }
+      .operate {
+         display: flex;
+         & > div {
+            cursor: pointer;
+            width: 38px;
+            height: 38px;
+         }
+         .left {
+            background: url("./img//left1.png") no-repeat;
+            background-size: 100% 100%;
+            &:hover {
+               background-image: url("./img//left.png");
+            }
+         }
+         .mid {
+            margin: 0 28px;
+            background: url("./img//midh.png") no-repeat;
+            background-size: 100% 100%;
+            &:hover,
+            &.now {
+               background: url("./img//mid.png") no-repeat;
+               background-size: 100% 100%;
+            }
+         }
+         .right {
+            background: url("./img//right1.png") no-repeat;
+            background-size: 100% 100%;
+            &:hover {
+               background-image: url("./img//right.png");
+            }
+         }
+      }
+   }
+   /* 内容 */
+   .el-calendar-table td {
+      border: none;
+      &.is-today {
+         color: initial;
+      }
+      &.is-selected {
+         background-color: initial;
+      }
+   }
+   .el-calendar-table .el-calendar-day {
+      height: initial;
+      padding: 0;
+      &:hover {
+         cursor: initial;
+         background-color: initial;
+      }
+   }
+   .el-calendar-table tr td:first-child .el-calendar-day .dayCon {
+      padding-left: 6px;
+   }
+   .el-calendar-table tr td:last-child .el-calendar-day .dayCon {
+      padding-right: 6px;
+   }
+   .el-calendar-table tr:last-child td .el-calendar-day .dayCon {
+      padding-bottom: 0px;
+   }
+   .el-calendar-table td {
+      .el-calendar-day .dayCon {
+         padding: 0 12px 12px 0;
+         .dayBox {
+            cursor: pointer;
+            background: #f8f8f8;
+            border-radius: 7px;
+            height: var(--el-calendar-cell-width);
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            color: #333333;
+            font-family: DINAlternate, DINAlternate;
+            font-weight: bold;
+            font-size: 32px;
+            &:hover {
+               background: #fff7ed;
+            }
+            &.old .daytit {
+               &::after {
+                  content: "";
+                  position: absolute;
+                  width: 8px;
+                  height: 8px;
+                  border-radius: 50%;
+                  bottom: -14px;
+                  left: 50%;
+                  transform: translateX(-50%);
+                  background-color: #aaaaaa;
+               }
+            }
+            &.new {
+               background: #fff7ed;
+               .daytit {
+                  &::after {
+                     content: "";
+                     position: absolute;
+                     width: 8px;
+                     height: 8px;
+                     border-radius: 50%;
+                     bottom: -14px;
+                     left: 50%;
+                     transform: translateX(-50%);
+                     background-color: #ff8057;
+                  }
+               }
+            }
+         }
+         .nobg {
+            height: var(--el-calendar-cell-width);
+         }
+         .daytit {
+            font-weight: 600;
+            font-size: 28px;
+            position: relative;
+         }
+      }
+      &.is-today .el-calendar-day .dayCon .dayBox {
+         background-image: url("./img//jiao.png");
+         background-size: 100% 100%;
+         background-color: #fff7ed;
+      }
+   }
+   &.isNowMonth .el-calendar-table td.is-selected .el-calendar-day .dayCon .dayBox {
+      background: linear-gradient(45deg, #ffa357 0%, #ff6736 100%), #fff7ed;
+      color: #ffffff;
+      &.old .daytit,
+      &.new .daytit {
+         &::after {
+            background-color: #fff;
+         }
+      }
+   }
+}
+</style>

+ 0 - 0
src/img/cloudTextbooks/ss.png → src/components/myInput/img/ss.png


+ 2 - 0
src/components/myInput/index.ts

@@ -0,0 +1,2 @@
+import myInput from "./myInput.vue"
+export default myInput

+ 102 - 0
src/components/myInput/myInput.vue

@@ -0,0 +1,102 @@
+<!--
+* @FileDescription: input
+* @Author: 黄琪勇
+* @Date:2024-03-28 17:22:38
+-->
+<template>
+   <el-input class="h_myInput" v-bind="$attrs" @focus="handleInputFocus" @blur="handleInputBlur" :class="{ isInputFocus: isInputFocus }">
+      <template #prepend>
+         <slot v-if="$slots.prepend" name="prepend"></slot>
+         <img v-else class="imgSs" src="./img/ss.png" />
+      </template>
+      <template #append>
+         <slot v-if="$slots.append" name="append"></slot>
+         <div v-else class="btnSelect" @click="handleQuery">搜索</div>
+      </template>
+   </el-input>
+</template>
+
+<script setup lang="ts">
+import { computed, ref } from "vue"
+import { baseSize } from "@/libs/rem"
+
+const props = defineProps<{
+   width?: number
+   height?: number
+}>()
+const emits = defineEmits<{
+   (e: "handleQuery"): void
+}>()
+
+const _h_width = computed(() => {
+   return props.width ? (props.width / baseSize).toFixed(5) + "rem" : "100%"
+})
+const _h_height = computed(() => {
+   return ((props.height || 32) / baseSize).toFixed(5) + "rem"
+})
+
+// 选中样式
+const isInputFocus = ref(false)
+function handleInputFocus() {
+   isInputFocus.value = true
+}
+function handleInputBlur() {
+   isInputFocus.value = false
+}
+
+function handleQuery() {
+   emits("handleQuery")
+}
+</script>
+
+<style lang="scss">
+.h_myInput {
+   &.el-input {
+      flex-shrink: 0;
+      width: v-bind(_h_width);
+      height: v-bind(_h_height);
+      --el-input-text-color: #333;
+      font-size: 16px;
+      border: 1px solid transparent;
+      background: #fff;
+      border-radius: 21px;
+      & .isInputFocus {
+         border-color: #ff8057 !important;
+         box-shadow: 0px 0px 4px 0px rgba(255, 155, 109);
+      }
+   }
+   .el-input-group__prepend {
+      background-color: transparent;
+      box-shadow: none;
+      padding: 0 0 0 15px;
+   }
+   .el-input-group__append {
+      background-color: transparent;
+      box-shadow: none;
+      padding: 0 4px;
+   }
+   .el-input__wrapper {
+      box-shadow: none;
+      border-radius: 21px;
+   }
+   .imgSs {
+      width: 20px;
+      height: 20px;
+   }
+   .btnSelect {
+      width: 70px;
+      height: 36px;
+      background: linear-gradient(180deg, #ffab71 0%, #ff6e45 100%), #ffad49;
+      border-radius: 21px;
+      font-weight: 500;
+      font-size: 16px;
+      color: #ffffff;
+      line-height: 36px;
+      text-align: center;
+      cursor: pointer;
+      &:hover {
+         opacity: $opacity-hover;
+      }
+   }
+}
+</style>

+ 26 - 6
src/config/menus.ts

@@ -3,9 +3,9 @@
 // 管乐团
 export const menus_gyt: menuType[] = [
    {
-      path: "/homePage_gyt",
-      component: "homePage_gyt",
-      title: "管乐团首页",
+      path: "/homePage",
+      component: "homePage",
+      title: "首页",
       icon: "",
       meta: {
          routeType: "layout"
@@ -31,15 +31,25 @@ export const menus_gyt: menuType[] = [
          routeType: "singlepage"
       },
       children: []
+   },
+   {
+      path: "/curriculum",
+      component: "curriculum",
+      title: "课表",
+      icon: "",
+      meta: {
+         routeType: "layout"
+      },
+      children: []
    }
 ]
 
 // 管乐迷
 export const menus_gym: menuType[] = [
    {
-      path: "/homePage_gym",
-      component: "homePage_gym",
-      title: "管乐迷首页",
+      path: "/homePage",
+      component: "homePage",
+      title: "首页",
       icon: "",
       meta: {
          routeType: "layout"
@@ -65,5 +75,15 @@ export const menus_gym: menuType[] = [
          routeType: "singlepage"
       },
       children: []
+   },
+   {
+      path: "/curriculum",
+      component: "curriculum",
+      title: "课表",
+      icon: "",
+      meta: {
+         routeType: "layout"
+      },
+      children: []
    }
 ]

+ 12 - 11
src/hooks/useDialogConfirm/dialogConfirm.vue

@@ -84,7 +84,7 @@ function ok() {
       display: flex;
       align-items: center;
       justify-content: center;
-      padding: 0 20px;
+      padding: 0 18px 0 22px;
       overflow: hidden;
       .text {
          font-size: 20px;
@@ -110,17 +110,18 @@ function ok() {
 }
 </style>
 <style lang="scss">
-.modalFrame.useDialogConfirm {
-   --modalFrameTitHeight: 0px !important;
-   .modalFrameTitle {
-      display: none !important;
-   }
+.h-modalFrame.useDialogConfirm {
+   /* prettier-ignore */
+   --modalFrameTitHeight: 0PX;
    .modalFrameBox {
-      background: linear-gradient(180deg, #fdfef2 0%, #fdf6de 100%) !important;
-      box-shadow: 0px 5px 0px 0px #ca8e2d, 0px 7px 10px 0px #6e6e6e !important;
-      border-radius: 20px !important;
-      border: 8px solid #ffdd98 !important;
-      position: relative !important;
+      background: linear-gradient(180deg, #fdfef2 0%, #fdf6de 100%);
+      box-shadow: 0px 5px 0px 0px #ca8e2d, 0px 7px 10px 0px #6e6e6e;
+      border-radius: 20px;
+      border: 8px solid #ffdd98;
+      position: relative;
+      .modalFrameTitle {
+         display: none;
+      }
    }
 }
 </style>

BIN
src/img/coursewarePlay/IMG.png


BIN
src/img/coursewarePlay/IMG1.png


BIN
src/img/coursewarePlay/SONG.png


BIN
src/img/coursewarePlay/SONG1.png


BIN
src/img/coursewarePlay/VIDEO.png


BIN
src/img/coursewarePlay/VIDEO1.png


BIN
src/img/coursewarePlay/back.png


BIN
src/img/coursewarePlay/baiban.png


BIN
src/img/coursewarePlay/close.png


+ 0 - 0
src/views/coursewarePlay/image/icon-load.gif → src/img/coursewarePlay/icon-load.gif


BIN
src/img/coursewarePlay/jieshu.png


BIN
src/img/coursewarePlay/jtb.png


BIN
src/img/coursewarePlay/jtr.png


BIN
src/img/coursewarePlay/jtr1.png


BIN
src/img/coursewarePlay/kcml.png


BIN
src/img/coursewarePlay/pizhu.png


BIN
src/img/coursewarePlay/shang.png


BIN
src/img/coursewarePlay/ts.png


BIN
src/img/coursewarePlay/xia.png


BIN
src/img/coursewarePlay/zhishidian.png


BIN
src/img/curriculum/Band.png


BIN
src/img/curriculum/DEMO.png


BIN
src/img/curriculum/IMG.png


BIN
src/img/curriculum/LIVE.png


BIN
src/img/curriculum/PRACTICE.png


BIN
src/img/curriculum/SONG.png


BIN
src/img/curriculum/VIDEO.png


BIN
src/img/curriculum/Vip.png


BIN
src/img/curriculum/jg.png


BIN
src/img/curriculum/jt.png


BIN
src/img/curriculum/jt1.png


BIN
src/img/curriculum/jxmb.png


BIN
src/img/curriculum/kuang.png


BIN
src/img/curriculum/mid.png


BIN
src/img/curriculum/qd.png


BIN
src/img/curriculum/qd1.png


BIN
src/img/curriculum/qd2.png


BIN
src/img/curriculum/qt.png


BIN
src/img/curriculum/qt1.png


BIN
src/img/curriculum/qt2.png


BIN
src/img/curriculum/shujia.png


Some files were not shown because too many files changed in this diff