mo 1 rok temu
rodzic
commit
d6a0236f0d
100 zmienionych plików z 2047 dodań i 386 usunięć
  1. 5 0
      dist/assets/Scrollbar-638d4c19.js
  2. 4 0
      dist/assets/Scrollbar-e39aecbe.js
  3. 1 0
      dist/assets/Scrollbar-legacy-6d186d19.js
  4. 157 0
      dist/assets/data-08a3c9f6.js
  5. 0 0
      dist/assets/data-c15517db.js
  6. 0 0
      dist/assets/data-legacy-7b2c411a.js
  7. 1 0
      dist/assets/headerD-legacy-a41bea57.js
  8. 0 0
      dist/assets/index-02390318.css
  9. 0 0
      dist/assets/index-0310aded.css
  10. 0 0
      dist/assets/index-05507db4.js
  11. 0 0
      dist/assets/index-076f3ddd.css
  12. 4 0
      dist/assets/index-114d9f37.js
  13. 0 0
      dist/assets/index-16c80eef.css
  14. 0 0
      dist/assets/index-1baabc1e.css
  15. 0 0
      dist/assets/index-2560594c.css
  16. 1 0
      dist/assets/index-2cce0ec7.js
  17. 0 0
      dist/assets/index-2d47a39b.js
  18. 1 0
      dist/assets/index-3a985559.js
  19. 1 0
      dist/assets/index-443f1072.js
  20. 0 0
      dist/assets/index-45abc4e7.js
  21. 5 0
      dist/assets/index-489a7f4d.js
  22. 28 0
      dist/assets/index-4e12e5ee.js
  23. 0 0
      dist/assets/index-5a5ffe57.css
  24. 1 0
      dist/assets/index-5b3fe8a8.js
  25. 0 0
      dist/assets/index-614c7585.css
  26. 1 0
      dist/assets/index-636b0edf.css
  27. 1 0
      dist/assets/index-63e7688e.js
  28. 1 0
      dist/assets/index-70bb47c4.js
  29. 0 0
      dist/assets/index-88703940.js
  30. 1 0
      dist/assets/index-8e927364.js
  31. 0 0
      dist/assets/index-9122d76c.js
  32. 1 0
      dist/assets/index-916e3b1d.js
  33. 5 0
      dist/assets/index-98fcf9b1.js
  34. 1 0
      dist/assets/index-9b5d0b9d.js
  35. 0 0
      dist/assets/index-9f1df0ca.css
  36. 1 0
      dist/assets/index-9f374edd.css
  37. 0 0
      dist/assets/index-af550680.css
  38. 1 0
      dist/assets/index-b51192d1.js
  39. 0 0
      dist/assets/index-bd16cdf0.css
  40. 0 0
      dist/assets/index-bd60a592.js
  41. 5 0
      dist/assets/index-c5b37f0c.js
  42. 1 0
      dist/assets/index-c5dda1f6.js
  43. 4 0
      dist/assets/index-ca8d1310.js
  44. 4 0
      dist/assets/index-cc1148f5.js
  45. 1 0
      dist/assets/index-cffb74ce.js
  46. 0 0
      dist/assets/index-d881bcb2.js
  47. 0 0
      dist/assets/index-dec9deed.css
  48. 0 0
      dist/assets/index-ee2cead7.css
  49. 0 0
      dist/assets/index-f1b5a417.js
  50. 0 0
      dist/assets/index-f8d7ac29.css
  51. 1 0
      dist/assets/index-legacy-0133e503.js
  52. 1 0
      dist/assets/index-legacy-152fd71f.js
  53. 1 0
      dist/assets/index-legacy-32395098.js
  54. 0 0
      dist/assets/index-legacy-432b2fb1.js
  55. 0 0
      dist/assets/index-legacy-4350e458.js
  56. 1 0
      dist/assets/index-legacy-5441356f.js
  57. 0 0
      dist/assets/index-legacy-626c7276.js
  58. 0 0
      dist/assets/index-legacy-6b896b4b.js
  59. 0 0
      dist/assets/index-legacy-729295c6.js
  60. 0 0
      dist/assets/index-legacy-76ed30e6.js
  61. 0 0
      dist/assets/index-legacy-c04c74c8.js
  62. 0 0
      dist/assets/index-legacy-c3b8955b.js
  63. 0 0
      dist/assets/index-legacy-c3ce8626.js
  64. 0 0
      dist/assets/index-legacy-cb2745de.js
  65. 0 0
      dist/assets/index-legacy-d836552f.js
  66. 0 0
      dist/assets/index-legacy-e3e712f5.js
  67. 0 0
      dist/assets/index-legacy-edf402f4.js
  68. 0 0
      dist/assets/index-legacy-f29a6c05.js
  69. 0 0
      dist/assets/index-legacy-f2a20864.js
  70. 0 0
      dist/assets/polyfills-legacy-fb1ae481.js
  71. 1 0
      dist/assets/teacherIcon-legacy-3eeb62c3.js
  72. 0 0
      dist/assets/tick-bc5fe25f.js
  73. 0 0
      dist/assets/tick-eab18532.css
  74. 0 0
      dist/assets/tick-legacy-206a674c.js
  75. 192 1
      dist/index.html
  76. 183 1
      index.html
  77. 295 321
      package-lock.json
  78. 2 0
      package.json
  79. 72 3
      src/App.tsx
  80. 31 0
      src/components/RouterError/index.tsx
  81. 17 0
      src/components/card-preview/index.module.less
  82. 59 0
      src/components/card-preview/index.tsx
  83. 15 0
      src/components/card-preview/music-modal/index.module.less
  84. 33 0
      src/components/card-preview/music-modal/index.tsx
  85. 134 0
      src/components/card-preview/song-modal/index.module.less
  86. 204 0
      src/components/card-preview/song-modal/index.tsx
  87. 144 0
      src/components/card-preview/video-modal/index.module.less
  88. 150 0
      src/components/card-preview/video-modal/index.tsx
  89. 5 1
      src/components/card-type/index.module.less
  90. 30 11
      src/components/card-type/index.tsx
  91. BIN
      src/images/submit.jpg
  92. 19 1
      src/router/router-guards.ts
  93. 4 1
      src/views/attend-class/component/musicScore.tsx
  94. 1 1
      src/views/attend-class/component/video-play.tsx
  95. 1 1
      src/views/attend-class/index.tsx
  96. 4 1
      src/views/attend-class/model/train-type/index.tsx
  97. 21 2
      src/views/natural-resources/index.tsx
  98. 181 35
      src/views/prepare-lessons/components/directory-main/index.tsx
  99. 3 3
      src/views/xiaoku-music/data.json
  100. 5 3
      src/views/xiaoku-music/index.tsx

+ 5 - 0
dist/assets/Scrollbar-638d4c19.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/Scrollbar-e39aecbe.js
+import{a9 as l,d as e,r as a,ac as n,ar as t}from"./index-9d05148b.js";const c=Object.assign(Object.assign({},l.props),{trigger:String,xScrollable:Boolean,onScroll:Function,size:Number}),i=e({name:"Scrollbar",props:c,setup(){const r=a(null);return Object.assign(Object.assign({},{scrollTo:(...o)=>{var s;(s=r.value)===null||s===void 0||s.scrollTo(o[0],o[1])},scrollBy:(...o)=>{var s;(s=r.value)===null||s===void 0||s.scrollBy(o[0],o[1])}}),{scrollbarInstRef:r})},render(){return n(t,Object.assign({ref:"scrollbarInstRef"},this.$props),this.$slots)}}),d=i;export{d as N};
+========
+import{ab as l,d as e,r as a,ae as n,at as t}from"./index-2d47a39b.js";const c=Object.assign(Object.assign({},l.props),{trigger:String,xScrollable:Boolean,onScroll:Function,size:Number}),i=e({name:"Scrollbar",props:c,setup(){const r=a(null);return Object.assign(Object.assign({},{scrollTo:(...o)=>{var s;(s=r.value)===null||s===void 0||s.scrollTo(o[0],o[1])},scrollBy:(...o)=>{var s;(s=r.value)===null||s===void 0||s.scrollBy(o[0],o[1])}}),{scrollbarInstRef:r})},render(){return n(t,Object.assign({ref:"scrollbarInstRef"},this.$props),this.$slots)}}),d=i;export{d as N};
+>>>>>>>> compatible:dist/assets/Scrollbar-638d4c19.js

+ 4 - 0
dist/assets/Scrollbar-e39aecbe.js

@@ -1 +1,5 @@
+<<<<<<<< HEAD:dist/assets/Scrollbar-e39aecbe.js
 import{a9 as l,d as e,r as a,ac as n,ar as t}from"./index-9d05148b.js";const c=Object.assign(Object.assign({},l.props),{trigger:String,xScrollable:Boolean,onScroll:Function,size:Number}),i=e({name:"Scrollbar",props:c,setup(){const r=a(null);return Object.assign(Object.assign({},{scrollTo:(...o)=>{var s;(s=r.value)===null||s===void 0||s.scrollTo(o[0],o[1])},scrollBy:(...o)=>{var s;(s=r.value)===null||s===void 0||s.scrollBy(o[0],o[1])}}),{scrollbarInstRef:r})},render(){return n(t,Object.assign({ref:"scrollbarInstRef"},this.$props),this.$slots)}}),d=i;export{d as N};
+========
+import{ab as l,d as e,r as a,ae as n,at as t}from"./index-2d47a39b.js";const c=Object.assign(Object.assign({},l.props),{trigger:String,xScrollable:Boolean,onScroll:Function,size:Number}),i=e({name:"Scrollbar",props:c,setup(){const r=a(null);return Object.assign(Object.assign({},{scrollTo:(...o)=>{var s;(s=r.value)===null||s===void 0||s.scrollTo(o[0],o[1])},scrollBy:(...o)=>{var s;(s=r.value)===null||s===void 0||s.scrollBy(o[0],o[1])}}),{scrollbarInstRef:r})},render(){return n(t,Object.assign({ref:"scrollbarInstRef"},this.$props),this.$slots)}}),d=i;export{d as N};
+>>>>>>>> compatible:dist/assets/Scrollbar-638d4c19.js

+ 1 - 0
dist/assets/Scrollbar-legacy-6d186d19.js

@@ -0,0 +1 @@
+System.register(["./index-legacy-76ed30e6.js"],(function(r,s){"use strict";var e,l,t,n,o;return{setters:[r=>{e=r.ab,l=r.d,t=r.r,n=r.ae,o=r.at}],execute:function(){const s=Object.assign(Object.assign({},e.props),{trigger:String,xScrollable:Boolean,onScroll:Function,size:Number}),c=l({name:"Scrollbar",props:s,setup(){const r=t(null),s={scrollTo:(...s)=>{var e;null===(e=r.value)||void 0===e||e.scrollTo(s[0],s[1])},scrollBy:(...s)=>{var e;null===(e=r.value)||void 0===e||e.scrollBy(s[0],s[1])}};return Object.assign(Object.assign({},s),{scrollbarInstRef:r})},render(){return n(o,Object.assign({ref:"scrollbarInstRef"},this.$props),this.$slots)}});r("N",c)}}}));

Plik diff jest za duży
+ 157 - 0
dist/assets/data-08a3c9f6.js


Plik diff jest za duży
+ 0 - 0
dist/assets/data-c15517db.js


Plik diff jest za duży
+ 0 - 0
dist/assets/data-legacy-7b2c411a.js


+ 1 - 0
dist/assets/headerD-legacy-a41bea57.js

@@ -0,0 +1 @@
+System.register([],(function(e,t){"use strict";return{execute:function(){e("h",""+new URL("headerD-b79bc401.png",t.meta.url).href)}}}));

Plik diff jest za duży
+ 0 - 0
dist/assets/index-02390318.css


Plik diff jest za duży
+ 0 - 0
dist/assets/index-0310aded.css


Plik diff jest za duży
+ 0 - 0
dist/assets/index-05507db4.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-076f3ddd.css


+ 4 - 0
dist/assets/index-114d9f37.js

@@ -1 +1,5 @@
+<<<<<<<< HEAD:dist/assets/index-114d9f37.js
 import{X as y,Y as F,S as P,Z as C,J as S}from"./index-9d05148b.js";function g(e){return y()?(F(e),!0):!1}function w(e){return typeof e=="function"?e():S(e)}const R=typeof window<"u",m=()=>{};function D(e,i){function n(...t){return new Promise((o,r)=>{Promise.resolve(e(()=>i.apply(this,t),{fn:i,thisArg:this,args:t})).then(o).catch(r)})}return n}function b(e,i={}){let n,t,o=m;const r=u=>{clearTimeout(u),o(),o=m};return u=>{const a=w(e),s=w(i.maxWait);return n&&r(n),a<=0||s!==void 0&&s<=0?(t&&(r(t),t=null),Promise.resolve(u())):new Promise((c,p)=>{o=i.rejectOnCancel?p:c,s&&!t&&(t=setTimeout(()=>{n&&r(n),t=null,c(u())},s)),n=setTimeout(()=>{t&&r(t),t=null,c(u())},a)})}}function j(e,i=!0,n=!0,t=!1){let o=0,r,l=!0,u=m,a;const s=()=>{r&&(clearTimeout(r),r=void 0,u(),u=m)};return p=>{const f=w(e),T=Date.now()-o,d=()=>a=p();return s(),f<=0?(o=Date.now(),d()):(T>f&&(n||!l)?(o=Date.now(),d()):i&&(a=new Promise((h,x)=>{u=t?x:h,r=setTimeout(()=>{o=Date.now(),l=!0,h(d()),s()},Math.max(0,f-T))})),!n&&!r&&(r=setTimeout(()=>l=!0,f)),l=!1,a)}}function U(e,i=200,n={}){return D(b(i,n),e)}function V(e,i=200,n=!1,t=!0,o=!1){return D(j(i,n,t,o),e)}function W(e){P()&&C(e)}export{V as a,g as b,w as c,R as i,W as t,U as u};
+========
+import{X as y,Y as F,S as P,Z as C,J as S}from"./index-2d47a39b.js";function g(e){return y()?(F(e),!0):!1}function w(e){return typeof e=="function"?e():S(e)}const R=typeof window<"u",m=()=>{};function D(e,i){function n(...t){return new Promise((o,r)=>{Promise.resolve(e(()=>i.apply(this,t),{fn:i,thisArg:this,args:t})).then(o).catch(r)})}return n}function b(e,i={}){let n,t,o=m;const r=u=>{clearTimeout(u),o(),o=m};return u=>{const a=w(e),s=w(i.maxWait);return n&&r(n),a<=0||s!==void 0&&s<=0?(t&&(r(t),t=null),Promise.resolve(u())):new Promise((c,p)=>{o=i.rejectOnCancel?p:c,s&&!t&&(t=setTimeout(()=>{n&&r(n),t=null,c(u())},s)),n=setTimeout(()=>{t&&r(t),t=null,c(u())},a)})}}function j(e,i=!0,n=!0,t=!1){let o=0,r,l=!0,u=m,a;const s=()=>{r&&(clearTimeout(r),r=void 0,u(),u=m)};return p=>{const f=w(e),T=Date.now()-o,d=()=>a=p();return s(),f<=0?(o=Date.now(),d()):(T>f&&(n||!l)?(o=Date.now(),d()):i&&(a=new Promise((h,x)=>{u=t?x:h,r=setTimeout(()=>{o=Date.now(),l=!0,h(d()),s()},Math.max(0,f-T))})),!n&&!r&&(r=setTimeout(()=>l=!0,f)),l=!1,a)}}function U(e,i=200,n={}){return D(b(i,n),e)}function V(e,i=200,n=!1,t=!0,o=!1){return D(j(i,n,t,o),e)}function W(e){P()&&C(e)}export{V as a,g as b,w as c,R as i,W as t,U as u};
+>>>>>>>> compatible:dist/assets/index-c5b37f0c.js

Plik diff jest za duży
+ 0 - 0
dist/assets/index-16c80eef.css


Plik diff jest za duży
+ 0 - 0
dist/assets/index-1baabc1e.css


Plik diff jest za duży
+ 0 - 0
dist/assets/index-2560594c.css


Plik diff jest za duży
+ 1 - 0
dist/assets/index-2cce0ec7.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-2d47a39b.js


Plik diff jest za duży
+ 1 - 0
dist/assets/index-3a985559.js


Plik diff jest za duży
+ 1 - 0
dist/assets/index-443f1072.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-45abc4e7.js


+ 5 - 0
dist/assets/index-489a7f4d.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/index-ca8d1310.js
+import{d as f,r as l,e as A,w as d,f as m}from"./index-9d05148b.js";const p="_wrap_3lsnj_1",y="_isAnitaion_3lsnj_7",v="_notice_3lsnj_7",a={wrap:p,isAnitaion:y,notice:v},o=n=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{n()})})},h=f({name:"TheNoticeBar",props:{text:{type:String,default:""},isAnimation:{type:Boolean,default:!1}},setup(n){const e=l(),i=l(),t=A({isActive:!1,wrapWidth:0,contentWidth:0,contentStyle:{transitionDuration:"0s",transform:"translateX(0px)"},time:null}),s=()=>{t.isActive||!i.value||!e.value||(t.isActive=!0,t.contentWidth=i.value.getBoundingClientRect().width,t.wrapWidth=e.value.getBoundingClientRect().width,r())},r=()=>{if(t.contentWidth<=t.wrapWidth||!t.isActive){t.contentStyle.transitionDuration="0s",t.contentStyle.transform="translateX(0px)";return}t.contentStyle.transitionDuration="5s",t.contentStyle.transform="translateX(-100%)",t.time=setTimeout(()=>{t.contentStyle.transitionDuration="0s",t.contentStyle.transform=`translateX(${t.wrapWidth}px)`,o(r)},5*1e3)},c=()=>{clearTimeout(t.time),t.isActive=!1,t.contentStyle.transitionDuration="0s",t.contentStyle.transform="translateX(0px)",t.time=null};return d(()=>n.isAnimation,u=>{o(u?s:c)}),()=>m("div",{ref:e,class:[a.wrap,n.isAnimation?a.isAnitaion:""],onMouseenter:()=>!n.isAnimation&&s(),onMouseleave:()=>!n.isAnimation&&c()},[m("div",{ref:i,style:t.contentStyle,class:a.notice},[n.text])])}});export{h as T};
+========
+import{d as f,r as l,e as A,w as d,f as m}from"./index-2d47a39b.js";const p="_wrap_3lsnj_1",y="_isAnitaion_3lsnj_7",v="_notice_3lsnj_7",a={wrap:p,isAnitaion:y,notice:v},o=n=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{n()})})},h=f({name:"TheNoticeBar",props:{text:{type:String,default:""},isAnimation:{type:Boolean,default:!1}},setup(n){const e=l(),i=l(),t=A({isActive:!1,wrapWidth:0,contentWidth:0,contentStyle:{transitionDuration:"0s",transform:"translateX(0px)"},time:null}),s=()=>{t.isActive||!i.value||!e.value||(t.isActive=!0,t.contentWidth=i.value.getBoundingClientRect().width,t.wrapWidth=e.value.getBoundingClientRect().width,r())},r=()=>{if(t.contentWidth<=t.wrapWidth||!t.isActive){t.contentStyle.transitionDuration="0s",t.contentStyle.transform="translateX(0px)";return}t.contentStyle.transitionDuration="5s",t.contentStyle.transform="translateX(-100%)",t.time=setTimeout(()=>{t.contentStyle.transitionDuration="0s",t.contentStyle.transform=`translateX(${t.wrapWidth}px)`,o(r)},5*1e3)},c=()=>{clearTimeout(t.time),t.isActive=!1,t.contentStyle.transitionDuration="0s",t.contentStyle.transform="translateX(0px)",t.time=null};return d(()=>n.isAnimation,u=>{o(u?s:c)}),()=>m("div",{ref:e,class:[a.wrap,n.isAnimation?a.isAnitaion:""],onMouseenter:()=>!n.isAnimation&&s(),onMouseleave:()=>!n.isAnimation&&c()},[m("div",{ref:i,style:t.contentStyle,class:a.notice},[n.text])])}});export{h as T};
+>>>>>>>> compatible:dist/assets/index-489a7f4d.js

Plik diff jest za duży
+ 28 - 0
dist/assets/index-4e12e5ee.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-5a5ffe57.css


Plik diff jest za duży
+ 1 - 0
dist/assets/index-5b3fe8a8.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-614c7585.css


Plik diff jest za duży
+ 1 - 0
dist/assets/index-636b0edf.css


Plik diff jest za duży
+ 1 - 0
dist/assets/index-63e7688e.js


+ 1 - 0
dist/assets/index-70bb47c4.js

@@ -0,0 +1 @@
+import{d as u,e as n,f as e,h as o,F as l,j as h,k as i}from"./index-2d47a39b.js";const d="_TheSearch_18qen_1",m="_active_18qen_15",c={TheSearch:d,active:m,default:"_default_18qen_21"},p=""+new URL("icon_search-cda46378.svg",import.meta.url).href,f=""+new URL("icon_searchActive-80477bdc.svg",import.meta.url).href,_=u({name:"TheSearch",props:{round:{type:Boolean,default:!1}},emits:["search"],setup(t,{emit:s}){const a=n({value:""});return()=>e(o,{class:c.TheSearch,round:t.round,placeholder:"请输入搜索关键词",modelValue:a.value,"onUpdate:modelValue":r=>a.value=r},{prefix:()=>e(l,null,[e("img",{class:c.default,src:p},null),e("img",{class:c.active,src:f},null)]),suffix:()=>e(h,{size:"small",round:!0,type:"primary",onClick:()=>s("search",a.value)},{default:()=>[i("搜索")]})})}});export{_ as T};

Plik diff jest za duży
+ 0 - 0
dist/assets/index-88703940.js


Plik diff jest za duży
+ 1 - 0
dist/assets/index-8e927364.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-9122d76c.js


Plik diff jest za duży
+ 1 - 0
dist/assets/index-916e3b1d.js


+ 5 - 0
dist/assets/index-98fcf9b1.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/index-cc1148f5.js
+import{d as l,f as e,h as u,I as o,r,R as I,o as c,F as p}from"./index-9d05148b.js";const g="_searchInput_1cmht_1",m="_searchIcon_1cmht_9",S={searchInput:g,searchIcon:m},E=l({name:"student-studentList",props:["searchWord"],emits:["changeValue"],setup(t,{emit:n,attrs:A}){return()=>e("div",null,[e(u,o(A,{clearable:!0,class:S.searchInput,value:t.searchWord,onInput:a=>{n("changeValue",a)}}),{prefix:()=>e("span",{class:"icon-search-input"},null)})])}}),h="_arrow_fei3f_1",C="_CSelectWrap_fei3f_5",J="_CSelectInitWrap_fei3f_21",s={arrow:h,CSelectWrap:C,CSelectInitWrap:J},w="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAaCAYAAACtv5zzAAAAAXNSR0IArs4c6QAAANtJREFUSEvt0zFOAkEYQOFv7eEi9iba0GLlDextKNUbECmpuIItFSWNmnANPIEWtoZkJ5LJDv9AQuVOs8Vm3tt5/2zjzKs5M18vCAv/r0TXmLdNJvgI+1B9i26wwqCFfuMWb5GkZgY5PDGrJJGgBK+WHBJ0wZ9a8stemoMnKQlK8FkLfkQuGeM9n0mXIIInRpUkF9TCqyX7gmPhVZIkGGKL3TOt3UBT8+i657m+cInPJBhhfSK8dJI7LJPgAq+4whSL6JML7x/wjA3u8RP9aCd6/rb1gjBhnyhM9As5gjEbhIMMwQAAAABJRU5ErkJggg==",B="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAaCAYAAACtv5zzAAAAAXNSR0IArs4c6QAAASlJREFUSEvtlDFOxDAQRWecigJOAMegABpKFI3TcgUqShZusFDScIA9AbJltt0mSPQcI83SJjMo0S7KBmM7xTYoaT3zn+f/cRD2/OGe9WECRB3+JxaVZXlQVdUCAE4RcU5EL9HZPQXGmBsAeACADyK6RkTuLLLWFsz8uu1BxJnW+mkMxFo7Y+Z5r+eyKIpVB3DOHTdN8ykiR9sCpdQ9ET2mQIbiiLjOsuwkz/P1T8jW2nNmXgLA4ZhJjDF3ItK/yJdS6oqIylZnZ4vGQmLivwCbPJImSRH3AlIgqeJ/AkKQ9izk+XApgi/ZOXdR1/VbP/iBwE6gvo2L/ip8wW+EouJBi/q38UCSxJMBbaEx5kxEnrsmxFut9XvKI4xalCISqpkAUQcni6IWfQOwkaYb9TFYBgAAAABJRU5ErkJggg==",W=l({props:{inline:{type:Boolean,default:!1}},name:"CSelect",setup(t,{emit:n,attrs:A}){r(null);const a=r(!1);return()=>e(p,null,[e("div",{class:[s.CSelectWrap,t.inline?s.CSelectInitWrap:null]},[e(I,o({"show-checkmark":!1},A,{"onUpdate:show":i=>{a.value=i}}),{arrow:()=>a.value?e(c,{class:s.arrow,src:w},null):e(c,{class:s.arrow,src:B},null)})])])}});export{W as C,E as S};
+========
+import{d as l,f as e,h as u,I as o,r,R as I,o as c,F as p}from"./index-2d47a39b.js";const g="_searchInput_1cmht_1",m="_searchIcon_1cmht_9",S={searchInput:g,searchIcon:m},E=l({name:"student-studentList",props:["searchWord"],emits:["changeValue"],setup(t,{emit:n,attrs:A}){return()=>e("div",null,[e(u,o(A,{clearable:!0,class:S.searchInput,value:t.searchWord,onInput:a=>{n("changeValue",a)}}),{prefix:()=>e("span",{class:"icon-search-input"},null)})])}}),h="_arrow_fei3f_1",C="_CSelectWrap_fei3f_5",J="_CSelectInitWrap_fei3f_21",s={arrow:h,CSelectWrap:C,CSelectInitWrap:J},w="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAaCAYAAACtv5zzAAAAAXNSR0IArs4c6QAAANtJREFUSEvt0zFOAkEYQOFv7eEi9iba0GLlDextKNUbECmpuIItFSWNmnANPIEWtoZkJ5LJDv9AQuVOs8Vm3tt5/2zjzKs5M18vCAv/r0TXmLdNJvgI+1B9i26wwqCFfuMWb5GkZgY5PDGrJJGgBK+WHBJ0wZ9a8stemoMnKQlK8FkLfkQuGeM9n0mXIIInRpUkF9TCqyX7gmPhVZIkGGKL3TOt3UBT8+i657m+cInPJBhhfSK8dJI7LJPgAq+4whSL6JML7x/wjA3u8RP9aCd6/rb1gjBhnyhM9As5gjEbhIMMwQAAAABJRU5ErkJggg==",B="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAaCAYAAACtv5zzAAAAAXNSR0IArs4c6QAAASlJREFUSEvtlDFOxDAQRWecigJOAMegABpKFI3TcgUqShZusFDScIA9AbJltt0mSPQcI83SJjMo0S7KBmM7xTYoaT3zn+f/cRD2/OGe9WECRB3+JxaVZXlQVdUCAE4RcU5EL9HZPQXGmBsAeACADyK6RkTuLLLWFsz8uu1BxJnW+mkMxFo7Y+Z5r+eyKIpVB3DOHTdN8ykiR9sCpdQ9ET2mQIbiiLjOsuwkz/P1T8jW2nNmXgLA4ZhJjDF3ItK/yJdS6oqIylZnZ4vGQmLivwCbPJImSRH3AlIgqeJ/AkKQ9izk+XApgi/ZOXdR1/VbP/iBwE6gvo2L/ip8wW+EouJBi/q38UCSxJMBbaEx5kxEnrsmxFut9XvKI4xalCISqpkAUQcni6IWfQOwkaYb9TFYBgAAAABJRU5ErkJggg==",W=l({props:{inline:{type:Boolean,default:!1}},name:"CSelect",setup(t,{emit:n,attrs:A}){r(null);const a=r(!1);return()=>e(p,null,[e("div",{class:[s.CSelectWrap,t.inline?s.CSelectInitWrap:null]},[e(I,o({"show-checkmark":!1},A,{"onUpdate:show":i=>{a.value=i}}),{arrow:()=>a.value?e(c,{class:s.arrow,src:w},null):e(c,{class:s.arrow,src:B},null)})])])}});export{W as C,E as S};
+>>>>>>>> compatible:dist/assets/index-98fcf9b1.js

Plik diff jest za duży
+ 1 - 0
dist/assets/index-9b5d0b9d.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-9f1df0ca.css


Plik diff jest za duży
+ 1 - 0
dist/assets/index-9f374edd.css


Plik diff jest za duży
+ 0 - 0
dist/assets/index-af550680.css


Plik diff jest za duży
+ 1 - 0
dist/assets/index-b51192d1.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-bd16cdf0.css


Plik diff jest za duży
+ 0 - 0
dist/assets/index-bd60a592.js


+ 5 - 0
dist/assets/index-c5b37f0c.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/index-114d9f37.js
+import{X as y,Y as F,S as P,Z as C,J as S}from"./index-9d05148b.js";function g(e){return y()?(F(e),!0):!1}function w(e){return typeof e=="function"?e():S(e)}const R=typeof window<"u",m=()=>{};function D(e,i){function n(...t){return new Promise((o,r)=>{Promise.resolve(e(()=>i.apply(this,t),{fn:i,thisArg:this,args:t})).then(o).catch(r)})}return n}function b(e,i={}){let n,t,o=m;const r=u=>{clearTimeout(u),o(),o=m};return u=>{const a=w(e),s=w(i.maxWait);return n&&r(n),a<=0||s!==void 0&&s<=0?(t&&(r(t),t=null),Promise.resolve(u())):new Promise((c,p)=>{o=i.rejectOnCancel?p:c,s&&!t&&(t=setTimeout(()=>{n&&r(n),t=null,c(u())},s)),n=setTimeout(()=>{t&&r(t),t=null,c(u())},a)})}}function j(e,i=!0,n=!0,t=!1){let o=0,r,l=!0,u=m,a;const s=()=>{r&&(clearTimeout(r),r=void 0,u(),u=m)};return p=>{const f=w(e),T=Date.now()-o,d=()=>a=p();return s(),f<=0?(o=Date.now(),d()):(T>f&&(n||!l)?(o=Date.now(),d()):i&&(a=new Promise((h,x)=>{u=t?x:h,r=setTimeout(()=>{o=Date.now(),l=!0,h(d()),s()},Math.max(0,f-T))})),!n&&!r&&(r=setTimeout(()=>l=!0,f)),l=!1,a)}}function U(e,i=200,n={}){return D(b(i,n),e)}function V(e,i=200,n=!1,t=!0,o=!1){return D(j(i,n,t,o),e)}function W(e){P()&&C(e)}export{V as a,g as b,w as c,R as i,W as t,U as u};
+========
+import{X as y,Y as F,S as P,Z as C,J as S}from"./index-2d47a39b.js";function g(e){return y()?(F(e),!0):!1}function w(e){return typeof e=="function"?e():S(e)}const R=typeof window<"u",m=()=>{};function D(e,i){function n(...t){return new Promise((o,r)=>{Promise.resolve(e(()=>i.apply(this,t),{fn:i,thisArg:this,args:t})).then(o).catch(r)})}return n}function b(e,i={}){let n,t,o=m;const r=u=>{clearTimeout(u),o(),o=m};return u=>{const a=w(e),s=w(i.maxWait);return n&&r(n),a<=0||s!==void 0&&s<=0?(t&&(r(t),t=null),Promise.resolve(u())):new Promise((c,p)=>{o=i.rejectOnCancel?p:c,s&&!t&&(t=setTimeout(()=>{n&&r(n),t=null,c(u())},s)),n=setTimeout(()=>{t&&r(t),t=null,c(u())},a)})}}function j(e,i=!0,n=!0,t=!1){let o=0,r,l=!0,u=m,a;const s=()=>{r&&(clearTimeout(r),r=void 0,u(),u=m)};return p=>{const f=w(e),T=Date.now()-o,d=()=>a=p();return s(),f<=0?(o=Date.now(),d()):(T>f&&(n||!l)?(o=Date.now(),d()):i&&(a=new Promise((h,x)=>{u=t?x:h,r=setTimeout(()=>{o=Date.now(),l=!0,h(d()),s()},Math.max(0,f-T))})),!n&&!r&&(r=setTimeout(()=>l=!0,f)),l=!1,a)}}function U(e,i=200,n={}){return D(b(i,n),e)}function V(e,i=200,n=!1,t=!0,o=!1){return D(j(i,n,t,o),e)}function W(e){P()&&C(e)}export{V as a,g as b,w as c,R as i,W as t,U as u};
+>>>>>>>> compatible:dist/assets/index-c5b37f0c.js

Plik diff jest za duży
+ 1 - 0
dist/assets/index-c5dda1f6.js


+ 4 - 0
dist/assets/index-ca8d1310.js

@@ -1 +1,5 @@
+<<<<<<<< HEAD:dist/assets/index-ca8d1310.js
 import{d as f,r as l,e as A,w as d,f as m}from"./index-9d05148b.js";const p="_wrap_3lsnj_1",y="_isAnitaion_3lsnj_7",v="_notice_3lsnj_7",a={wrap:p,isAnitaion:y,notice:v},o=n=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{n()})})},h=f({name:"TheNoticeBar",props:{text:{type:String,default:""},isAnimation:{type:Boolean,default:!1}},setup(n){const e=l(),i=l(),t=A({isActive:!1,wrapWidth:0,contentWidth:0,contentStyle:{transitionDuration:"0s",transform:"translateX(0px)"},time:null}),s=()=>{t.isActive||!i.value||!e.value||(t.isActive=!0,t.contentWidth=i.value.getBoundingClientRect().width,t.wrapWidth=e.value.getBoundingClientRect().width,r())},r=()=>{if(t.contentWidth<=t.wrapWidth||!t.isActive){t.contentStyle.transitionDuration="0s",t.contentStyle.transform="translateX(0px)";return}t.contentStyle.transitionDuration="5s",t.contentStyle.transform="translateX(-100%)",t.time=setTimeout(()=>{t.contentStyle.transitionDuration="0s",t.contentStyle.transform=`translateX(${t.wrapWidth}px)`,o(r)},5*1e3)},c=()=>{clearTimeout(t.time),t.isActive=!1,t.contentStyle.transitionDuration="0s",t.contentStyle.transform="translateX(0px)",t.time=null};return d(()=>n.isAnimation,u=>{o(u?s:c)}),()=>m("div",{ref:e,class:[a.wrap,n.isAnimation?a.isAnitaion:""],onMouseenter:()=>!n.isAnimation&&s(),onMouseleave:()=>!n.isAnimation&&c()},[m("div",{ref:i,style:t.contentStyle,class:a.notice},[n.text])])}});export{h as T};
+========
+import{d as f,r as l,e as A,w as d,f as m}from"./index-2d47a39b.js";const p="_wrap_3lsnj_1",y="_isAnitaion_3lsnj_7",v="_notice_3lsnj_7",a={wrap:p,isAnitaion:y,notice:v},o=n=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{n()})})},h=f({name:"TheNoticeBar",props:{text:{type:String,default:""},isAnimation:{type:Boolean,default:!1}},setup(n){const e=l(),i=l(),t=A({isActive:!1,wrapWidth:0,contentWidth:0,contentStyle:{transitionDuration:"0s",transform:"translateX(0px)"},time:null}),s=()=>{t.isActive||!i.value||!e.value||(t.isActive=!0,t.contentWidth=i.value.getBoundingClientRect().width,t.wrapWidth=e.value.getBoundingClientRect().width,r())},r=()=>{if(t.contentWidth<=t.wrapWidth||!t.isActive){t.contentStyle.transitionDuration="0s",t.contentStyle.transform="translateX(0px)";return}t.contentStyle.transitionDuration="5s",t.contentStyle.transform="translateX(-100%)",t.time=setTimeout(()=>{t.contentStyle.transitionDuration="0s",t.contentStyle.transform=`translateX(${t.wrapWidth}px)`,o(r)},5*1e3)},c=()=>{clearTimeout(t.time),t.isActive=!1,t.contentStyle.transitionDuration="0s",t.contentStyle.transform="translateX(0px)",t.time=null};return d(()=>n.isAnimation,u=>{o(u?s:c)}),()=>m("div",{ref:e,class:[a.wrap,n.isAnimation?a.isAnitaion:""],onMouseenter:()=>!n.isAnimation&&s(),onMouseleave:()=>!n.isAnimation&&c()},[m("div",{ref:i,style:t.contentStyle,class:a.notice},[n.text])])}});export{h as T};
+>>>>>>>> compatible:dist/assets/index-489a7f4d.js

+ 4 - 0
dist/assets/index-cc1148f5.js

@@ -1 +1,5 @@
+<<<<<<<< HEAD:dist/assets/index-cc1148f5.js
 import{d as l,f as e,h as u,I as o,r,R as I,o as c,F as p}from"./index-9d05148b.js";const g="_searchInput_1cmht_1",m="_searchIcon_1cmht_9",S={searchInput:g,searchIcon:m},E=l({name:"student-studentList",props:["searchWord"],emits:["changeValue"],setup(t,{emit:n,attrs:A}){return()=>e("div",null,[e(u,o(A,{clearable:!0,class:S.searchInput,value:t.searchWord,onInput:a=>{n("changeValue",a)}}),{prefix:()=>e("span",{class:"icon-search-input"},null)})])}}),h="_arrow_fei3f_1",C="_CSelectWrap_fei3f_5",J="_CSelectInitWrap_fei3f_21",s={arrow:h,CSelectWrap:C,CSelectInitWrap:J},w="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAaCAYAAACtv5zzAAAAAXNSR0IArs4c6QAAANtJREFUSEvt0zFOAkEYQOFv7eEi9iba0GLlDextKNUbECmpuIItFSWNmnANPIEWtoZkJ5LJDv9AQuVOs8Vm3tt5/2zjzKs5M18vCAv/r0TXmLdNJvgI+1B9i26wwqCFfuMWb5GkZgY5PDGrJJGgBK+WHBJ0wZ9a8stemoMnKQlK8FkLfkQuGeM9n0mXIIInRpUkF9TCqyX7gmPhVZIkGGKL3TOt3UBT8+i657m+cInPJBhhfSK8dJI7LJPgAq+4whSL6JML7x/wjA3u8RP9aCd6/rb1gjBhnyhM9As5gjEbhIMMwQAAAABJRU5ErkJggg==",B="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAaCAYAAACtv5zzAAAAAXNSR0IArs4c6QAAASlJREFUSEvtlDFOxDAQRWecigJOAMegABpKFI3TcgUqShZusFDScIA9AbJltt0mSPQcI83SJjMo0S7KBmM7xTYoaT3zn+f/cRD2/OGe9WECRB3+JxaVZXlQVdUCAE4RcU5EL9HZPQXGmBsAeACADyK6RkTuLLLWFsz8uu1BxJnW+mkMxFo7Y+Z5r+eyKIpVB3DOHTdN8ykiR9sCpdQ9ET2mQIbiiLjOsuwkz/P1T8jW2nNmXgLA4ZhJjDF3ItK/yJdS6oqIylZnZ4vGQmLivwCbPJImSRH3AlIgqeJ/AkKQ9izk+XApgi/ZOXdR1/VbP/iBwE6gvo2L/ip8wW+EouJBi/q38UCSxJMBbaEx5kxEnrsmxFut9XvKI4xalCISqpkAUQcni6IWfQOwkaYb9TFYBgAAAABJRU5ErkJggg==",W=l({props:{inline:{type:Boolean,default:!1}},name:"CSelect",setup(t,{emit:n,attrs:A}){r(null);const a=r(!1);return()=>e(p,null,[e("div",{class:[s.CSelectWrap,t.inline?s.CSelectInitWrap:null]},[e(I,o({"show-checkmark":!1},A,{"onUpdate:show":i=>{a.value=i}}),{arrow:()=>a.value?e(c,{class:s.arrow,src:w},null):e(c,{class:s.arrow,src:B},null)})])])}});export{W as C,E as S};
+========
+import{d as l,f as e,h as u,I as o,r,R as I,o as c,F as p}from"./index-2d47a39b.js";const g="_searchInput_1cmht_1",m="_searchIcon_1cmht_9",S={searchInput:g,searchIcon:m},E=l({name:"student-studentList",props:["searchWord"],emits:["changeValue"],setup(t,{emit:n,attrs:A}){return()=>e("div",null,[e(u,o(A,{clearable:!0,class:S.searchInput,value:t.searchWord,onInput:a=>{n("changeValue",a)}}),{prefix:()=>e("span",{class:"icon-search-input"},null)})])}}),h="_arrow_fei3f_1",C="_CSelectWrap_fei3f_5",J="_CSelectInitWrap_fei3f_21",s={arrow:h,CSelectWrap:C,CSelectInitWrap:J},w="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAaCAYAAACtv5zzAAAAAXNSR0IArs4c6QAAANtJREFUSEvt0zFOAkEYQOFv7eEi9iba0GLlDextKNUbECmpuIItFSWNmnANPIEWtoZkJ5LJDv9AQuVOs8Vm3tt5/2zjzKs5M18vCAv/r0TXmLdNJvgI+1B9i26wwqCFfuMWb5GkZgY5PDGrJJGgBK+WHBJ0wZ9a8stemoMnKQlK8FkLfkQuGeM9n0mXIIInRpUkF9TCqyX7gmPhVZIkGGKL3TOt3UBT8+i657m+cInPJBhhfSK8dJI7LJPgAq+4whSL6JML7x/wjA3u8RP9aCd6/rb1gjBhnyhM9As5gjEbhIMMwQAAAABJRU5ErkJggg==",B="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAaCAYAAACtv5zzAAAAAXNSR0IArs4c6QAAASlJREFUSEvtlDFOxDAQRWecigJOAMegABpKFI3TcgUqShZusFDScIA9AbJltt0mSPQcI83SJjMo0S7KBmM7xTYoaT3zn+f/cRD2/OGe9WECRB3+JxaVZXlQVdUCAE4RcU5EL9HZPQXGmBsAeACADyK6RkTuLLLWFsz8uu1BxJnW+mkMxFo7Y+Z5r+eyKIpVB3DOHTdN8ykiR9sCpdQ9ET2mQIbiiLjOsuwkz/P1T8jW2nNmXgLA4ZhJjDF3ItK/yJdS6oqIylZnZ4vGQmLivwCbPJImSRH3AlIgqeJ/AkKQ9izk+XApgi/ZOXdR1/VbP/iBwE6gvo2L/ip8wW+EouJBi/q38UCSxJMBbaEx5kxEnrsmxFut9XvKI4xalCISqpkAUQcni6IWfQOwkaYb9TFYBgAAAABJRU5ErkJggg==",W=l({props:{inline:{type:Boolean,default:!1}},name:"CSelect",setup(t,{emit:n,attrs:A}){r(null);const a=r(!1);return()=>e(p,null,[e("div",{class:[s.CSelectWrap,t.inline?s.CSelectInitWrap:null]},[e(I,o({"show-checkmark":!1},A,{"onUpdate:show":i=>{a.value=i}}),{arrow:()=>a.value?e(c,{class:s.arrow,src:w},null):e(c,{class:s.arrow,src:B},null)})])])}});export{W as C,E as S};
+>>>>>>>> compatible:dist/assets/index-98fcf9b1.js

+ 1 - 0
dist/assets/index-cffb74ce.js

@@ -0,0 +1 @@
+import{d as t,f as e,aO as u,j as a,k as p}from"./index-2d47a39b.js";const r=t({name:"404-page",setup(){return()=>e("div",{style:{height:"220px","margin-top":"150px","padding-top":"30px","font-size":"15px","text-align":"center"}},[e(u,{description:"你访问的页面不见了,你还可以",size:"large"},null),e(a,{type:"primary",text:!0},{default:()=>[p("返回上一页")]})])}});export{r as default};

Plik diff jest za duży
+ 0 - 0
dist/assets/index-d881bcb2.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-dec9deed.css


Plik diff jest za duży
+ 0 - 0
dist/assets/index-ee2cead7.css


Plik diff jest za duży
+ 0 - 0
dist/assets/index-f1b5a417.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-f8d7ac29.css


+ 1 - 0
dist/assets/index-legacy-0133e503.js

@@ -0,0 +1 @@
+System.register(["./index-legacy-76ed30e6.js"],(function(e,t){"use strict";var i,n,r,a,p;return{setters:[e=>{i=e.d,n=e.f,r=e.aO,a=e.j,p=e.k}],execute:function(){e("default",i({name:"404-page",setup:()=>()=>n("div",{style:{height:"220px","margin-top":"150px","padding-top":"30px","font-size":"15px","text-align":"center"}},[n(r,{description:"你访问的页面不见了,你还可以",size:"large"},null),n(a,{type:"primary",text:!0},{default:()=>[p("返回上一页")]})])}))}}}));

+ 1 - 0
dist/assets/index-legacy-152fd71f.js

@@ -0,0 +1 @@
+System.register(["./index-legacy-76ed30e6.js"],(function(e,n){"use strict";var t,a,r,c,_,i,u;return{setters:[e=>{t=e.d,a=e.e,r=e.f,c=e.h,_=e.F,i=e.j,u=e.k}],execute:function(){var l=document.createElement("style");l.textContent="._TheSearch_18qen_1{border-radius:1.04167vw!important}._TheSearch_18qen_1 .n-input-wrapper{padding-left:.625vw;padding-right:.20833vw;height:2.1875vw!important}._TheSearch_18qen_1 .n-button{height:1.77083vw;font-size:.78125vw;font-weight:500;width:auto}._TheSearch_18qen_1 ._active_18qen_15{display:none}._TheSearch_18qen_1.n-input--focus ._active_18qen_15{display:block}._TheSearch_18qen_1.n-input--focus ._default_18qen_21{display:none}._TheSearch_18qen_1.n-input--focus .n-button{opacity:1}\n",document.head.appendChild(l);const s="_TheSearch_18qen_1",o="_active_18qen_15",h="_default_18qen_21",d=""+new URL("icon_search-cda46378.svg",n.meta.url).href,p=""+new URL("icon_searchActive-80477bdc.svg",n.meta.url).href;e("T",t({name:"TheSearch",props:{round:{type:Boolean,default:!1}},emits:["search"],setup(e,{emit:n}){const t=a({value:""});return()=>r(c,{class:s,round:e.round,placeholder:"请输入搜索关键词",modelValue:t.value,"onUpdate:modelValue":e=>t.value=e},{prefix:()=>r(_,null,[r("img",{class:h,src:d},null),r("img",{class:o,src:p},null)]),suffix:()=>r(i,{size:"small",round:!0,type:"primary",onClick:()=>n("search",t.value)},{default:()=>[u("搜索")]})})}}))}}}));

+ 1 - 0
dist/assets/index-legacy-32395098.js

@@ -0,0 +1 @@
+System.register(["./index-legacy-76ed30e6.js"],(function(t,n){"use strict";var e,i,o,a,s;return{setters:[t=>{e=t.d,i=t.r,o=t.e,a=t.w,s=t.f}],execute:function(){var n=document.createElement("style");n.textContent="._wrap_3lsnj_1{max-width:100%;overflow:hidden;display:flex;align-items:center}._wrap_3lsnj_1._isAnitaion_3lsnj_7 ._notice_3lsnj_7,._wrap_3lsnj_1:hover ._notice_3lsnj_7{width:auto;overflow:initial}._notice_3lsnj_7{transition-duration:5s;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition-timing-function:linear}\n",document.head.appendChild(n);const r="_wrap_3lsnj_1",l="_isAnitaion_3lsnj_7",c="_notice_3lsnj_7",u=t=>{requestAnimationFrame((()=>{requestAnimationFrame((()=>{t()}))}))};t("T",e({name:"TheNoticeBar",props:{text:{type:String,default:""},isAnimation:{type:Boolean,default:!1}},setup(t){const n=i(),e=i(),d=o({isActive:!1,wrapWidth:0,contentWidth:0,contentStyle:{transitionDuration:"0s",transform:"translateX(0px)"},time:null}),_=()=>{!d.isActive&&e.value&&n.value&&(d.isActive=!0,d.contentWidth=e.value.getBoundingClientRect().width,d.wrapWidth=n.value.getBoundingClientRect().width,m())},m=()=>{if(d.contentWidth<=d.wrapWidth||!d.isActive)return d.contentStyle.transitionDuration="0s",void(d.contentStyle.transform="translateX(0px)");d.contentStyle.transitionDuration="5s",d.contentStyle.transform="translateX(-100%)",d.time=setTimeout((()=>{d.contentStyle.transitionDuration="0s",d.contentStyle.transform=`translateX(${d.wrapWidth}px)`,u(m)}),5e3)},p=()=>{clearTimeout(d.time),d.isActive=!1,d.contentStyle.transitionDuration="0s",d.contentStyle.transform="translateX(0px)",d.time=null};return a((()=>t.isAnimation),(t=>{u(t?_:p)})),()=>s("div",{ref:n,class:[r,t.isAnimation?l:""],onMouseenter:()=>!t.isAnimation&&_(),onMouseleave:()=>!t.isAnimation&&p()},[s("div",{ref:e,style:d.contentStyle,class:c},[t.text])])}}))}}}));

Plik diff jest za duży
+ 0 - 0
dist/assets/index-legacy-432b2fb1.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-legacy-4350e458.js


+ 1 - 0
dist/assets/index-legacy-5441356f.js

@@ -0,0 +1 @@
+System.register(["./index-legacy-76ed30e6.js"],(function(t,e){"use strict";var n,o,r,u,i;return{setters:[t=>{n=t.X,o=t.Y,r=t.S,u=t.Z,i=t.J}],execute:function(){function e(t){return"function"==typeof t?t():i(t)}t({a:function(t,n=200,o=!1,r=!0,u=!1){return s(function(t,n=!0,o=!0,r=!1){let u,i,s=0,a=!0,f=c;const l=()=>{u&&(clearTimeout(u),u=void 0,f(),f=c)},m=c=>{const m=e(t),w=Date.now()-s,d=()=>i=c();return l(),m<=0?(s=Date.now(),d()):(w>m&&(o||!a)?(s=Date.now(),d()):n&&(i=new Promise(((t,e)=>{f=r?e:t,u=setTimeout((()=>{s=Date.now(),a=!0,t(d()),l()}),Math.max(0,m-w))}))),o||u||(u=setTimeout((()=>a=!0),m)),a=!1,i)};return m}(n,o,r,u),t)},b:function(t){return!!n()&&(o(t),!0)},c:e,t:function(t){r()&&u(t)},u:function(t,n=200,o={}){return s(function(t,n={}){let o,r,u=c;const i=t=>{clearTimeout(t),u(),u=c},s=c=>{const s=e(t),a=e(n.maxWait);return o&&i(o),s<=0||void 0!==a&&a<=0?(r&&(i(r),r=null),Promise.resolve(c())):new Promise(((t,e)=>{u=n.rejectOnCancel?e:t,a&&!r&&(r=setTimeout((()=>{o&&i(o),r=null,t(c())}),a)),o=setTimeout((()=>{r&&i(r),r=null,t(c())}),s)}))};return s}(n,o),t)}}),t("i","undefined"!=typeof window);const c=()=>{};function s(t,e){return function(...n){return new Promise(((o,r)=>{Promise.resolve(t((()=>e.apply(this,n)),{fn:e,thisArg:this,args:n})).then(o).catch(r)}))}}}}}));

Plik diff jest za duży
+ 0 - 0
dist/assets/index-legacy-626c7276.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-legacy-6b896b4b.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-legacy-729295c6.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-legacy-76ed30e6.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-legacy-c04c74c8.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-legacy-c3b8955b.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-legacy-c3ce8626.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-legacy-cb2745de.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-legacy-d836552f.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-legacy-e3e712f5.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-legacy-edf402f4.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-legacy-f29a6c05.js


Plik diff jest za duży
+ 0 - 0
dist/assets/index-legacy-f2a20864.js


Plik diff jest za duży
+ 0 - 0
dist/assets/polyfills-legacy-fb1ae481.js


+ 1 - 0
dist/assets/teacherIcon-legacy-3eeb62c3.js

@@ -0,0 +1 @@
+System.register([],(function(e,t){"use strict";return{execute:function(){e("d",""+new URL("teacherIcon-288bbd9f.png",t.meta.url).href)}}}));

Plik diff jest za duży
+ 0 - 0
dist/assets/tick-bc5fe25f.js


Plik diff jest za duży
+ 0 - 0
dist/assets/tick-eab18532.css


Plik diff jest za duży
+ 0 - 0
dist/assets/tick-legacy-206a674c.js


+ 192 - 1
dist/index.html

@@ -1,6 +1,8 @@
 <!DOCTYPE html>
+
 <html lang="zh-CN">
 
+
 <head>
   <meta charset="UTF-8" />
   <link rel="icon" href="./favicon.ico" />
@@ -24,13 +26,202 @@
   <meta name="msapplication-tap-highlight" content="no" />
   <meta name="referrer" content="no-referrer" />
   <title>老师端</title>
+<<<<<<< HEAD
   <script type="module" crossorigin src="./assets/index-9d05148b.js"></script>
   <link rel="stylesheet" href="./assets/index-9f374edd.css">
+=======
+  <script type="module" crossorigin src="./assets/index-2d47a39b.js"></script>
+  <link rel="stylesheet" href="./assets/index-636b0edf.css">
+  <script type="module">import.meta.url;import("_").catch(()=>1);async function* g(){};if(location.protocol!="file:"){window.__vite_is_modern_browser=true}</script>
+  <script type="module">!function(){if(window.__vite_is_modern_browser)return;console.warn("vite: loading legacy chunks, syntax error above and the same error below should be ignored");var e=document.getElementById("vite-legacy-polyfill"),n=document.createElement("script");n.src=e.src,n.onload=function(){System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))},document.body.appendChild(n)}();</script>
+>>>>>>> compatible
 </head>
+<style>
+  body {
+    background: #f1f5ff;
+    width: 100%;
+  }
+
+  .bgImg {
+    width: 23.75vw;
+  }
+
+  .btnImg {
+    width: 15vw;
+    position: absolute;
+    left: 50%;
+    margin-left: -7.5vw;
+    bottom: 1.61458vw;
+    cursor: pointer;
+  }
+
+  /* .imgWrap {
+    width: 456px;
+    position: absolute;
+    top: 141px;
+    left: 50%;
+    margin-left: -288px;
+  } */
+
+  .imgWrap {
+    margin-top: 15.625vw;
+    text-align: center;
+    /* width: 456px;
+        position: absolute;
+        top: 141px;
+        left: 50%;
+        margin-left: -288px;*/
+  }
+
+  .subMsg {
+    margin-top: 1.66667vw;
+    font-size: 1.14583vw;
+    line-height: 1.5625vw;
+    color: #777;
+  }
+
+  .subBtn {
+    width: 12.03125vw;
+    height: 3.22917vw;
+    background: #198CFE;
+    border-radius: 0.9375vw;
+    border: none;
+    font-size: 1.14583vw;
+    font-family: PingFangSC-Semibold, PingFang SC;
+    font-weight: 600;
+    color: #FFFFFF;
+    line-height: 1.5625vw;
+    cursor: pointer;
+    margin-top: 1.66667vw;
+    list-style: none outside none;
+    text-decoration: none;
+  }
+</style>
+<!-- 按钮 https://gyt.ks3-cn-beijing.ksyuncs.com/basic/1688699779209.png -->
+<!-- 背景 https://gyt.ks3-cn-beijing.ksyuncs.com/basic/1688699993534.png -->
+
+<body class="myBody">
+  <script type="text/javascript">
+    function gotoLinlk() {
+      console.log('点击')
+      var agent = navigator.userAgent.toLowerCase();
+      var isMac = function () { return /macintosh|mac os x/i.test(navigator.userAgent); }();
+      if (agent.indexOf("win32") >= 0 || agent.indexOf("wow32") >= 0) {
+        window.open('https://appstore.ks3-cn-beijing.ksyuncs.com/ChromeStandaloneSetup32.exe')
+      }
+      if (agent.indexOf("win64") >= 0 || agent.indexOf("wow64") >= 0) {
+        window.open('https://appstore.ks3-cn-beijing.ksyuncs.com/ChromeStandaloneSetup64.exe')
+      }
+      if (isMac) {
+        window.open('https://appstore.ks3-cn-beijing.ksyuncs.com/googlechrome-mac.dmg')
+      }
+    }
+    function getChromeVersion() {
+      var arr = navigator.userAgent.split(' ');
+      var chromeVersion = '';
+      for (let i = 0; i < arr.length; i++) {
+        if (/chrome/i.test(arr[i])) chromeVersion = arr[i];
+      }
+      if (chromeVersion) {
+        return Number(chromeVersion.split('/')[1].split('.')[0]);
+      } else {
+        return false;
+      }
+    };
+    function IsFF() {
+      var sAgent = window.navigator.userAgent.toLowerCase();
 
-<body>
+      if (sAgent.indexOf("firefox") != -1) {
+        return true;
+      }
+      return false;
+    }
+
+    function isChrome() {
+      var isChromium = window.chrome;
+      var winNav = window.navigator;
+      var vendorName = winNav.vendor;
+      var isOpera = typeof window.opr !== 'undefined';
+      var isIEedge = winNav.userAgent.indexOf('Edge') > -1;
+      var isIOSChrome = winNav.userAgent.match('CriOS');
+      return (
+        isIOSChrome ||
+        (isChromium !== null &&
+          typeof isChromium !== 'undefined' &&
+          vendorName === 'Google Inc.' &&
+          isOpera === false &&
+          isIEedge === false)
+      );
+    };
+    function IEVersion() {
+      var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
+      var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器
+      var isEdge = userAgent.indexOf("Edge") > -1 && !isIE; //判断是否IE的Edge浏览器
+      var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1;
+      if (isIE) {
+        var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
+        reIE.test(userAgent);
+        var fIEVersion = parseFloat(RegExp["$1"]);
+        if (fIEVersion == 7) {
+          return 7;
+        } else if (fIEVersion == 8) {
+          return 8;
+        } else if (fIEVersion == 9) {
+          return 9;
+        } else if (fIEVersion == 10) {
+          return 10;
+        } else {
+          return 6;//IE版本<=7
+        }
+      } else if (isEdge) {
+        return 'edge';//edge
+      } else if (isIE11) {
+        return 11; //IE11
+      } else {
+        return -1;//不是ie浏览器
+      }
+    }
+    (function (window) {
+
+      // if (IEVersion() != -1) {
+
+      //   document.writeln("<pre style='text-align:center;color:#fff;background-color:#0cc; height:100%;border:0;position:fixed;top:0;left:0;width:100%;z-index:1234'>" +
+      //     "<h2 style='padding-top:200px;margin:0'><strong>" + str + "<br/></strong></h2><h2>" +
+      //     str2 + "</h2>");
+      //   document.execCommand("Stop");
+      // };
+
+      if (!isChrome()) {
+        // document.writeln("<div class='imgWrap'><img src='https://gyt.ks3-cn-beijing.ksyuncs.com/basic/1688699993534.png' class='bgImg' alt=''><img src='https://gyt.ks3-cn-beijing.ksyuncs.com/basic/1688699779209.png' class='btnImg' alt=''></div>");
+        document.writeln(" <div class='imgWrap'><h1>当前浏览器版本过低</h1><p class='subMsg'>为了保证良好的上课体验,推荐您使用谷歌浏览器</p> <button class='subBtn' onclick='gotoLinlk()'>下载谷歌浏览器</button>");
+        document.execCommand("Stop");
+        // if (IsFF()) {
+        //   window.stop()
+        // } else {
+        //   document.execCommand("Stop");
+        // }
+
+      } else {
+        console.log(getChromeVersion(), 'getChromeVersion')
+        if (getChromeVersion() < 90) {
+
+          document.writeln(" <div class='imgWrap'><h1>当前浏览器版本过低</h1><p class='subMsg'>为了保证良好的上课体验,推荐您使用谷歌浏览器</p> <button class='subBtn' onclick='gotoLinlk()'>下载谷歌浏览器</button>");
+          document.execCommand("Stop");
+          window.stop()
+          console.log('Stop')
+        }
+
+        // if (IsFF()) {
+      }
+
+    })(window);
+  </script>
   <div id="app"></div>
   
+
+  <script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
+  <script nomodule crossorigin id="vite-legacy-polyfill" src="./assets/polyfills-legacy-fb1ae481.js"></script>
+  <script nomodule crossorigin id="vite-legacy-entry" data-src="./assets/index-legacy-76ed30e6.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
 </body>
 
 </html>

+ 183 - 1
index.html

@@ -1,6 +1,8 @@
 <!DOCTYPE html>
+
 <html lang="zh-CN">
 
+
 <head>
   <meta charset="UTF-8" />
   <link rel="icon" href="/favicon.ico" />
@@ -25,10 +27,190 @@
   <meta name="referrer" content="no-referrer" />
   <title>老师端</title>
 </head>
+<style>
+  body {
+    background: #f1f5ff;
+    width: 100%;
+  }
+
+  .bgImg {
+    width: 456px;
+  }
+
+  .btnImg {
+    width: 288px;
+    position: absolute;
+    left: 50%;
+    margin-left: -144px;
+    bottom: 31px;
+    cursor: pointer;
+  }
+
+  /* .imgWrap {
+    width: 456px;
+    position: absolute;
+    top: 141px;
+    left: 50%;
+    margin-left: -288px;
+  } */
+
+  .imgWrap {
+    margin-top: 300px;
+    text-align: center;
+    /* width: 456px;
+        position: absolute;
+        top: 141px;
+        left: 50%;
+        margin-left: -288px;*/
+  }
+
+  .subMsg {
+    margin-top: 32px;
+    font-size: 22px;
+    line-height: 30px;
+    color: #777;
+  }
+
+  .subBtn {
+    width: 231px;
+    height: 62px;
+    background: #198CFE;
+    border-radius: 18px;
+    border: none;
+    font-size: 22px;
+    font-family: PingFangSC-Semibold, PingFang SC;
+    font-weight: 600;
+    color: #FFFFFF;
+    line-height: 30px;
+    cursor: pointer;
+    margin-top: 32px;
+    list-style: none outside none;
+    text-decoration: none;
+  }
+</style>
+<!-- 按钮 https://gyt.ks3-cn-beijing.ksyuncs.com/basic/1688699779209.png -->
+<!-- 背景 https://gyt.ks3-cn-beijing.ksyuncs.com/basic/1688699993534.png -->
+
+<body class="myBody">
+  <script type="text/javascript">
+    function gotoLinlk() {
+      console.log('点击')
+      var agent = navigator.userAgent.toLowerCase();
+      var isMac = function () { return /macintosh|mac os x/i.test(navigator.userAgent); }();
+      if (agent.indexOf("win32") >= 0 || agent.indexOf("wow32") >= 0) {
+        window.open('https://appstore.ks3-cn-beijing.ksyuncs.com/ChromeStandaloneSetup32.exe')
+      }
+      if (agent.indexOf("win64") >= 0 || agent.indexOf("wow64") >= 0) {
+        window.open('https://appstore.ks3-cn-beijing.ksyuncs.com/ChromeStandaloneSetup64.exe')
+      }
+      if (isMac) {
+        window.open('https://appstore.ks3-cn-beijing.ksyuncs.com/googlechrome-mac.dmg')
+      }
+    }
+    function getChromeVersion() {
+      var arr = navigator.userAgent.split(' ');
+      var chromeVersion = '';
+      for (let i = 0; i < arr.length; i++) {
+        if (/chrome/i.test(arr[i])) chromeVersion = arr[i];
+      }
+      if (chromeVersion) {
+        return Number(chromeVersion.split('/')[1].split('.')[0]);
+      } else {
+        return false;
+      }
+    };
+    function IsFF() {
+      var sAgent = window.navigator.userAgent.toLowerCase();
+
+      if (sAgent.indexOf("firefox") != -1) {
+        return true;
+      }
+      return false;
+    }
 
-<body>
+    function isChrome() {
+      var isChromium = window.chrome;
+      var winNav = window.navigator;
+      var vendorName = winNav.vendor;
+      var isOpera = typeof window.opr !== 'undefined';
+      var isIEedge = winNav.userAgent.indexOf('Edge') > -1;
+      var isIOSChrome = winNav.userAgent.match('CriOS');
+      return (
+        isIOSChrome ||
+        (isChromium !== null &&
+          typeof isChromium !== 'undefined' &&
+          vendorName === 'Google Inc.' &&
+          isOpera === false &&
+          isIEedge === false)
+      );
+    };
+    function IEVersion() {
+      var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
+      var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器
+      var isEdge = userAgent.indexOf("Edge") > -1 && !isIE; //判断是否IE的Edge浏览器
+      var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1;
+      if (isIE) {
+        var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
+        reIE.test(userAgent);
+        var fIEVersion = parseFloat(RegExp["$1"]);
+        if (fIEVersion == 7) {
+          return 7;
+        } else if (fIEVersion == 8) {
+          return 8;
+        } else if (fIEVersion == 9) {
+          return 9;
+        } else if (fIEVersion == 10) {
+          return 10;
+        } else {
+          return 6;//IE版本<=7
+        }
+      } else if (isEdge) {
+        return 'edge';//edge
+      } else if (isIE11) {
+        return 11; //IE11
+      } else {
+        return -1;//不是ie浏览器
+      }
+    }
+    (function (window) {
+
+      // if (IEVersion() != -1) {
+
+      //   document.writeln("<pre style='text-align:center;color:#fff;background-color:#0cc; height:100%;border:0;position:fixed;top:0;left:0;width:100%;z-index:1234'>" +
+      //     "<h2 style='padding-top:200px;margin:0'><strong>" + str + "<br/></strong></h2><h2>" +
+      //     str2 + "</h2>");
+      //   document.execCommand("Stop");
+      // };
+
+      if (!isChrome()) {
+        // document.writeln("<div class='imgWrap'><img src='https://gyt.ks3-cn-beijing.ksyuncs.com/basic/1688699993534.png' class='bgImg' alt=''><img src='https://gyt.ks3-cn-beijing.ksyuncs.com/basic/1688699779209.png' class='btnImg' alt=''></div>");
+
+
+        if (IEVersion() < 9) {
+          document.writeln(" <div class='imgWrap'><h1>当前浏览器版本过低</h1><p class='subMsg'>为了保证良好的上课体验,推荐您使用谷歌浏览器</p> <button class='subBtn' onclick='gotoLinlk()'>下载谷歌浏览器</button>");
+          alert('1111')
+        } else {
+          document.writeln(" <div class='imgWrap'><h1>当前浏览器版本过低</h1><p class='subMsg'>为了保证良好的上课体验,推荐您使用谷歌浏览器</p> <button class='subBtn' onclick='gotoLinlk()'>下载谷歌浏览器</button>");
+          document.execCommand("Stop");
+        }
+      } else {
+        console.log(getChromeVersion(), 'getChromeVersion')
+        if (getChromeVersion() < 90) {
+
+          document.writeln(" <div class='imgWrap'><h1>当前浏览器版本过低</h1><p class='subMsg'>为了保证良好的上课体验,推荐您使用谷歌浏览器</p> <button class='subBtn' onclick='gotoLinlk()'>下载谷歌浏览器</button>");
+          document.execCommand("Stop");
+          window.stop()
+          console.log('Stop')
+        }
+
+        // if (IsFF()) {
+      }
+
+    })(window);
+  </script>
   <div id="app"></div>
   <script type="module" src="/src/main.ts"></script>
+
 </body>
 
 </html>

Plik diff jest za duży
+ 295 - 321
package-lock.json


+ 2 - 0
package.json

@@ -35,6 +35,7 @@
     "pinia": "^2.1.4",
     "plyr": "^3.7.8",
     "query-string": "^8.1.0",
+    "terser": "^5.18.2",
     "umi-request": "^1.4.0",
     "vudio.js": "^1.0.3",
     "vue": "^3.3.4",
@@ -50,6 +51,7 @@
     "@types/numeral": "^2.0.2",
     "@typescript-eslint/eslint-plugin": "^5.57.1",
     "@typescript-eslint/parser": "^5.57.1",
+    "@vitejs/plugin-legacy": "^4.1.0",
     "@vitejs/plugin-vue": "^4.1.0",
     "@vitejs/plugin-vue-jsx": "^3.0.1",
     "@vue/babel-plugin-jsx": "^1.1.1",

+ 72 - 3
src/App.tsx

@@ -1,15 +1,18 @@
-import { computed, defineComponent } from 'vue';
-import { NConfigProvider, zhCN, dateZhCN } from 'naive-ui';
+import { computed, defineComponent, onMounted, ref } from 'vue';
+import { NConfigProvider, zhCN, dateZhCN, NModal } from 'naive-ui';
 import { AppProvider } from './components/Application';
 import { RouterView } from 'vue-router';
 import setting from './settings/designSetting';
 import { lighten } from './utils';
+import RouterError from './components/RouterError';
 export default defineComponent({
   name: 'App',
   setup() {
+    const isIOSChrome = ref();
     const getThemeOverrides = computed(() => {
       const appTheme = setting.appTheme;
       const lightenStr = lighten(setting.appTheme, 6);
+
       return {
         common: {
           primaryColor: appTheme,
@@ -21,6 +24,62 @@ export default defineComponent({
         }
       };
     });
+    // const showModal = ref(false);
+    const showModalMsg = ref('');
+    // 判断浏览器
+    const isChrome = () => {
+      const isChromium = (window as any).chrome;
+      const winNav = window.navigator;
+      const vendorName = winNav.vendor;
+      const isOpera = typeof (window as any).opr !== 'undefined';
+      const isIEedge = winNav.userAgent.indexOf('Edge') > -1;
+      isIOSChrome.value = winNav.userAgent.match('CriOS');
+      return (
+        isIOSChrome.value ||
+        (isChromium !== null &&
+          typeof isChromium !== 'undefined' &&
+          vendorName === 'Google Inc.' &&
+          isOpera === false &&
+          isIEedge === false)
+      );
+    };
+
+    // 获取谷歌版本
+    const getChromeVersion = () => {
+      const arr = navigator.userAgent.split(' ');
+      let chromeVersion = '' as any;
+      for (let i = 0; i < arr.length; i++) {
+        if (/chrome/i.test(arr[i])) chromeVersion = arr[i];
+      }
+      if (chromeVersion) {
+        return Number(chromeVersion.split('/')[1].split('.')[0]);
+      } else {
+        return false;
+      }
+    };
+
+    const isChromeFlag = isChrome();
+    if (isChromeFlag) {
+      const chromeVersion = getChromeVersion();
+      if (!chromeVersion || (chromeVersion && chromeVersion < 100)) {
+        showModalMsg.value =
+          '您当前的chrome版本过低,为了保证您的用户体验请升级后使用';
+        // showModal.value = true;
+      }
+      // if (chromeVersion) {
+      //   return Number(chromeVersion.split('/')[1].split('.')[0]);
+      // } else {
+      //   return false;
+      // }
+    } else {
+      showModalMsg.value = '为了保证您的用户体验,请使用chrome打开,点击确定下载';
+      // showModal.value = true;
+      console.log('---');
+    }
+
+    const submitCallback = () => {
+      window.open('https://www.google.cn/intl/zh-CN/chrome/');
+    };
     return () => (
       <>
         <NConfigProvider
@@ -31,9 +90,19 @@ export default defineComponent({
           dateLocale={dateZhCN}>
           <AppProvider>
             <RouterView />
-            {/* <RouterError /> */}
+            <RouterError />
           </AppProvider>
         </NConfigProvider>
+        {/* <NModal
+          show={showModal.value}
+          closeOnEsc={false}
+          closable={false}
+          maskClosable={false}
+          preset="dialog"
+          title="确认"
+          content={showModalMsg.value}
+          positive-text="确认"
+          onPositiveClick={submitCallback}></NModal> */}
       </>
     );
   }

+ 31 - 0
src/components/RouterError/index.tsx

@@ -0,0 +1,31 @@
+import { useDialog } from 'naive-ui';
+import { defineComponent } from 'vue';
+import { useRouter } from 'vue-router';
+
+export default defineComponent({
+  name: 'router-error',
+  setup() {
+    const router = useRouter();
+    const dialog = useDialog();
+    let isOpen = false;
+    router.onError(error => {
+      const str = error.message + '';
+      const isChunkLoadFailed = str.indexOf('imported');
+
+      // const targetPath = router.history.pending.fullPath
+      if (isChunkLoadFailed != -1 && !isOpen) {
+        isOpen = true;
+        dialog.warning({
+          title: '更新提示',
+          content: '网站有更新请点击确定刷新页面?',
+          positiveText: '确定',
+          negativeText: '取消',
+          onPositiveClick: () => {
+            window.location.reload();
+          }
+        });
+      }
+    });
+    return () => <div></div>;
+  }
+});

+ 17 - 0
src/components/card-preview/index.module.less

@@ -0,0 +1,17 @@
+.cardPreview {
+  width: 920px;
+
+  :global {
+    .n-card__content {
+      height: 517px;
+    }
+
+    .n-card-header__main {
+      max-width: 60%;
+      margin: 0 auto;
+      white-space: nowrap;
+      overflow: hidden;
+      text-overflow: ellipsis;
+    }
+  }
+}

+ 59 - 0
src/components/card-preview/index.tsx

@@ -0,0 +1,59 @@
+import { NModal } from 'naive-ui';
+import { defineComponent, toRef, watch } from 'vue';
+import styles from './index.module.less';
+import VideoModal from './video-modal';
+import MusicModal from './music-modal';
+import SongModal from './song-modal';
+
+export default defineComponent({
+  name: 'card-preview',
+  props: {
+    show: {
+      type: Boolean,
+      default: false
+    },
+    item: {
+      type: Object,
+      default: () => ({})
+    }
+  },
+  emit: ['update:show'],
+  setup(props, { emit }) {
+    const show = toRef(props.show);
+    const item = toRef(props.item);
+
+    watch(
+      () => props.show,
+      () => {
+        show.value = props.show;
+      }
+    );
+
+    watch(
+      () => props.item,
+      () => {
+        item.value = props.item;
+      }
+    );
+    return () => (
+      <>
+        <NModal
+          v-model:show={show.value}
+          onUpdate:show={() => {
+            emit('update:show', show.value);
+          }}
+          preset="card"
+          showIcon={false}
+          class={['modalTitle background', styles.cardPreview]}
+          title={item.value.title}
+          blockScroll={false}>
+          {item.value.type === 'VIDEO' && (
+            <VideoModal poster={item.value.url} src={item.value.content} />
+          )}
+          {item.value.type === 'SONG' && <MusicModal item={item.value} />}
+          {item.value.type === 'AUDIO' && <SongModal item={item.value} />}
+        </NModal>
+      </>
+    );
+  }
+});

+ 15 - 0
src/components/card-preview/music-modal/index.module.less

@@ -0,0 +1,15 @@
+.musicScore {
+  width: 100%;
+  height: 518px;
+
+  iframe {
+    width: inherit;
+    height: inherit;
+
+    :global {
+      .headTopBackBtn {
+        display: none;
+      }
+    }
+  }
+}

+ 33 - 0
src/components/card-preview/music-modal/index.tsx

@@ -0,0 +1,33 @@
+import { defineComponent, ref, watch } from 'vue';
+import styles from './index.module.less';
+
+export default defineComponent({
+  name: 'song-modal',
+  props: {
+    item: {
+      type: Object,
+      default: () => ({})
+    }
+  },
+  setup(props) {
+    const iframeRef = ref();
+    const isLoaded = ref(false);
+    const origin = /(localhost|192)/.test(location.host)
+      ? 'https://dev.kt.colexiu.com'
+      : location.origin;
+    const src = `${origin}/instrument?id=${props.item.content}&modelType=practise`;
+    return () => (
+      <div class={styles.musicScore}>
+        <iframe
+          ref={iframeRef}
+          onLoad={() => {
+            // emit('setIframe', iframeRef.value);
+            isLoaded.value = true;
+          }}
+          class={[styles.container, 'musicIframe']}
+          frameborder="0"
+          src={src}></iframe>
+      </div>
+    );
+  }
+});

+ 134 - 0
src/components/card-preview/song-modal/index.module.less

@@ -0,0 +1,134 @@
+.audioWrap {
+  width: 100%;
+  height: 518px;
+  background-color: #fff;
+}
+
+.audioContainer {
+  position: relative;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  height: 100%;
+  padding: 0;
+
+  &>div {
+    flex: 1;
+  }
+
+  .audio {
+    position: absolute;
+    top: 0;
+    opacity: 0;
+  }
+
+  .tempVudio {
+    position: absolute;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    padding: 0;
+  }
+
+  canvas {
+    width: 100%;
+    height: 100%;
+  }
+}
+
+.controls {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  width: 100%;
+  background: rgba(0, 0, 0, 0.6);
+  backdrop-filter: blur(26px);
+  height: 80px;
+  padding: 0 40px 0 40px !important;
+  transition: all 0.5s;
+  display: flex;
+  align-items: center;
+  transition: all .5s;
+
+  .time {
+    display: flex;
+    justify-content: space-between;
+    color: #fff;
+    padding: 4px 12px 4px;
+    font-size: 24px;
+    font-weight: 600;
+    line-height: 33px;
+    min-width: 140px;
+
+    .line {
+      font-size: 12px;
+    }
+
+    :global {
+      .plyr__time+.plyr__time:before {
+        content: '';
+        margin-right: 0;
+      }
+    }
+  }
+}
+
+.actions {
+  display: flex;
+  justify-content: space-between;
+  height: 100%;
+  color: #fff;
+  font-size: 12px;
+  align-items: center;
+
+  .actionWrap {
+    display: flex;
+  }
+
+  .actionBtn {
+    display: flex;
+    width: 52px;
+    height: 52px;
+    padding: 4px 0;
+    background: transparent;
+
+    &>img {
+      width: 100%;
+      height: 100%;
+    }
+  }
+
+
+  .iconReplay {
+    width: 31px;
+    height: 29px;
+    background-color: transparent;
+
+    &>img {
+      width: 100%;
+      height: 100%;
+    }
+  }
+}
+
+.slider {
+  width: 100%;
+  padding: 0 20px 0 12px;
+
+  :global {
+
+    .n-slider .n-slider-rail .n-slider-rail__fill,
+    .n-slider .n-slider-handles .n-slider-handle-wrapper {
+      transition: all .2s;
+    }
+  }
+}
+
+.sectionAnimate {
+  opacity: 0;
+  pointer-events: none;
+  transform: translateY(100%);
+  transition: all .5s;
+}

+ 204 - 0
src/components/card-preview/song-modal/index.tsx

@@ -0,0 +1,204 @@
+import { defineComponent, reactive, ref, nextTick } from 'vue';
+import styles from './index.module.less';
+import iconplay from '@views/attend-class/image/icon-pause.svg';
+import iconpause from '@views/attend-class/image/icon-play.svg';
+import iconReplay from '@views/attend-class/image/icon-replay.svg';
+import { NSlider } from 'naive-ui';
+import Vudio from 'vudio.js';
+import tickMp3 from '@views/attend-class/image/tick.mp3';
+
+export default defineComponent({
+  name: 'audio-play',
+  props: {
+    item: {
+      type: Object,
+      default: () => {
+        return {};
+      }
+    },
+    isEmtry: {
+      type: Boolean,
+      default: false
+    }
+  },
+
+  setup(props) {
+    const audioForms = reactive({
+      paused: true,
+      currentTimeNum: 0,
+      currentTime: '00:00',
+      durationNum: 0,
+      duration: '00:00',
+      showBar: true,
+      afterMa3: true
+    });
+    const canvas: any = ref();
+    const audio: any = ref();
+    let vudio: any = null;
+
+    // 切换音频播放
+    const onToggleAudio = (e?: MouseEvent) => {
+      e?.stopPropagation();
+      if (audio.value.paused) {
+        onInit(audio.value, canvas.value);
+        audio.value.play();
+        audioForms.afterMa3 = false;
+      } else {
+        audio.value.pause();
+      }
+      audioForms.paused = audio.value.paused;
+    };
+
+    const onInit = (audio: undefined, canvas: undefined) => {
+      if (!vudio) {
+        vudio = new Vudio(audio, canvas, {
+          effect: 'waveform',
+          accuracy: 256,
+          width: 1024,
+          height: 600,
+          waveform: {
+            maxHeight: 200,
+            color: [
+              [0, '#44D1FF'],
+              [0.5, '#44D1FF'],
+              [0.5, '#198CFE'],
+              [1, '#198CFE']
+            ],
+            prettify: false
+          }
+        });
+        vudio.dance();
+      }
+    };
+
+    // 对时间进行格式化
+    const timeFormat = (num: number) => {
+      if (num > 0) {
+        const m = Math.floor(num / 60);
+        const s = num % 60;
+        return (m < 10 ? '0' + m : m) + ':' + (s < 10 ? '0' + s : s);
+      } else {
+        return '00:00';
+      }
+    };
+
+    const onReplay = () => {
+      if (!audio.value) return;
+      audio.value.currentTime = 0;
+    };
+
+    let vudio1 = null;
+    const canvas1: any = ref();
+    const audio1: any = ref();
+    nextTick(() => {
+      vudio1 = new Vudio(audio1.value, canvas1.value, {
+        effect: 'waveform',
+        accuracy: 256,
+        width: 1024,
+        height: 600,
+        waveform: {
+          maxHeight: 200,
+          color: [
+            [0, '#44D1FF'],
+            [0.5, '#44D1FF'],
+            [0.5, '#198CFE'],
+            [1, '#198CFE']
+          ],
+          prettify: false
+        }
+      });
+      vudio1.dance();
+    });
+
+    return () => (
+      <div class={styles.audioWrap}>
+        <div class={styles.audioContainer}>
+          <audio
+            ref={audio}
+            crossorigin="anonymous"
+            src={props.item.content + '?time=1'}
+            onEnded={() => {
+              audioForms.paused = true;
+            }}
+            onTimeupdate={() => {
+              audioForms.currentTime = timeFormat(
+                Math.round(audio.value?.currentTime || 0)
+              );
+              audioForms.currentTimeNum = audio.value.currentTime;
+            }}
+            onLoadedmetadata={() => {
+              audioForms.duration = timeFormat(
+                Math.round(audio.value.duration)
+              );
+              audioForms.durationNum = audio.value.duration;
+            }}></audio>
+
+          <canvas ref={canvas}></canvas>
+
+          {audioForms.afterMa3 && (
+            <div class={styles.tempVudio}>
+              <audio ref={audio1} src={tickMp3} />
+              <canvas ref={canvas1}></canvas>
+            </div>
+          )}
+        </div>
+
+        <div
+          class={[
+            styles.controls,
+            audioForms.showBar ? '' : styles.sectionAnimate
+          ]}
+          onClick={(e: MouseEvent) => {
+            e.stopPropagation();
+          }}>
+          <div class={styles.actions}>
+            <div class={styles.actionWrap}>
+              <button class={styles.actionBtn} onClick={onToggleAudio}>
+                {audioForms.paused ? (
+                  <img class={styles.playIcon} src={iconplay} />
+                ) : (
+                  <img class={styles.playIcon} src={iconpause} />
+                )}
+              </button>
+            </div>
+            <div class={styles.time}>
+              <div
+                class="plyr__time plyr__time--current"
+                aria-label="Current time">
+                {audioForms.currentTime}
+              </div>
+              <span class={styles.line}>/</span>
+              <div
+                class="plyr__time plyr__time--duration"
+                aria-label="Duration">
+                {audioForms.duration}
+              </div>
+            </div>
+          </div>
+
+          <div class={styles.slider}>
+            <NSlider
+              value={audioForms.currentTimeNum}
+              step={0.01}
+              max={audioForms.durationNum}
+              tooltip={false}
+              onUpdate:value={(val: number) => {
+                audio.value.currentTime = val;
+                audioForms.currentTimeNum = val;
+                audioForms.currentTime = timeFormat(Math.round(val || 0));
+              }}
+            />
+          </div>
+
+          <div class={styles.actions}>
+            <div class={styles.actionWrap}>
+              <button class={styles.iconReplay} onClick={onReplay}>
+                <img src={iconReplay} />
+              </button>
+            </div>
+          </div>
+        </div>
+      </div>
+    );
+  }
+});

+ 144 - 0
src/components/card-preview/video-modal/index.module.less

@@ -0,0 +1,144 @@
+.videoWrap {
+  width: 100%;
+  height: 100%;
+  --plyr-color-main: #198CFE;
+  --plyr-range-track-height: 6px;
+  --plyr-tooltip-radius: 3px;
+  --plyr-range-thumb-height: 24px;
+  --plyr-video-controls-background: #000;
+
+
+  :global {
+    .plyr--video {
+      width: 100%;
+      height: 100%;
+    }
+
+    .plyr__time {
+      display: block !important;
+    }
+
+    .plyr__video-wrapper {
+      pointer-events: none;
+    }
+
+  }
+}
+
+:global(.bottomFixed).controls {
+  width: 100% !important;
+  background: rgba(0, 0, 0, 0.6) !important;
+  // backdrop-filter: blur(26px);
+  height: 80px !important;
+  min-height: 80px !important;
+  padding: 0px 40px !important;
+  z-index: 999;
+
+  .time {
+    display: flex;
+    justify-content: space-between;
+    color: #fff;
+    padding: 4px 12px 4px;
+    font-size: 24px;
+    font-weight: 600;
+    line-height: 33px;
+    min-width: 140px;
+
+    .line {
+      font-size: 12px;
+    }
+
+    :global {
+      .plyr__time+.plyr__time:before {
+        content: '';
+        margin-right: 0;
+      }
+    }
+  }
+
+  .slider {
+    width: 100%;
+    padding: 0 20px 0 12px;
+
+    :global {
+      .van-slider__button {
+        background: var(--van-primary);
+      }
+
+      .van-loading {
+        width: 100%;
+        height: 100%;
+      }
+    }
+  }
+
+  .actions {
+    display: flex;
+    justify-content: space-between;
+    color: #fff;
+    font-size: 12px;
+    align-items: center;
+
+    .actionWrap {
+      display: flex;
+    }
+
+    .actionBtn {
+      display: flex;
+      width: 52px;
+      height: 52px;
+      padding: 4px 0;
+      background: transparent;
+    }
+
+    .actionBtn>img {
+      width: 100%;
+      height: 100%;
+    }
+
+    :global {
+      .van-loading__circular {
+        width: 100%;
+        height: 100%;
+      }
+    }
+
+    .playIcon {
+      display: none;
+    }
+
+    .btnPlay img:nth-child(2) {
+      display: block;
+    }
+
+    .btnPause img:nth-child(3) {
+      display: block;
+    }
+
+    .btnPlay,
+    .btnPause {
+      :global {
+        .van-loading {
+          display: none;
+        }
+      }
+    }
+
+    .loopBtn {
+      background-color: transparent;
+      width: 31px;
+      height: 29px;
+      cursor: pointer;
+
+      :global {
+        .loop {
+          display: block;
+        }
+
+        .loopActive {
+          display: none;
+        }
+      }
+    }
+  }
+}

+ 150 - 0
src/components/card-preview/video-modal/index.tsx

@@ -0,0 +1,150 @@
+import { defineComponent, nextTick, onMounted, toRefs } from 'vue';
+import 'plyr/dist/plyr.css';
+import Plyr from 'plyr';
+import { ref } from 'vue';
+import styles from './index.module.less';
+import iconplay from '@views/attend-class/image/icon-pause.svg';
+import iconpause from '@views/attend-class/image/icon-play.svg';
+import iconReplay from '@views/attend-class/image/icon-replay.svg';
+
+export default defineComponent({
+  name: 'video-play',
+  props: {
+    src: {
+      type: String,
+      default: ''
+    },
+    poster: {
+      type: String,
+      default: ''
+    },
+    isEmtry: {
+      type: Boolean,
+      default: false
+    }
+  },
+  emits: ['loadedmetadata', 'togglePlay', 'ended', 'reset'],
+  setup(props, { emit, expose }) {
+    const { src, poster, isEmtry } = toRefs(props);
+    const videoRef = ref();
+    const videoItem = ref<Plyr>();
+    const controlID = 'v' + Date.now() + Math.floor(Math.random() * 100);
+    const playBtnId = 'play' + Date.now() + Math.floor(Math.random() * 100);
+    const replayBtnId = 'replay' + Date.now() + Math.floor(Math.random() * 100);
+    const toggleHideControl = (isShow: false) => {
+      videoItem.value?.toggleControls(isShow);
+    };
+    const togglePlay = (e: Event) => {
+      e.stopPropagation();
+      videoItem.value?.togglePlay();
+    };
+    const toggleReplay = () => {
+      const replayBtn = document.getElementById(replayBtnId);
+      if (!replayBtn || !videoItem.value) return;
+      videoItem.value.restart();
+    };
+    const onDefault = () => {
+      document
+        .getElementById(controlID)
+        ?.addEventListener('click', (e: Event) => {
+          e.stopPropagation();
+          emit('reset');
+        });
+      document.getElementById(playBtnId)?.addEventListener('click', togglePlay);
+      document
+        .getElementById(replayBtnId)
+        ?.addEventListener('click', toggleReplay);
+    };
+
+    const changePlayBtn = (code: string) => {
+      const playBtn = document.getElementById(playBtnId);
+      if (!playBtn) return;
+      if (code == 'play') {
+        playBtn.classList.remove(styles.btnPause);
+        playBtn.classList.add(styles.btnPlay);
+      } else {
+        playBtn.classList.remove(styles.btnPlay);
+        playBtn.classList.add(styles.btnPause);
+      }
+    };
+    const controls = `
+            <div id="${controlID}" class="plyr__controls bottomFixed ${styles.controls}">
+                <div class="${styles.actions}">
+                    <div class="${styles.actionWrap}">
+                        <button id="${playBtnId}" class="${styles.actionBtn}">
+                            <div class="van-loading van-loading--circular" aria-live="polite" aria-busy="true"><span class="van-loading__spinner van-loading__spinner--circular" style="color: rgb(255, 255, 255);"><svg class="van-loading__circular" viewBox="25 25 50 50"><circle cx="50" cy="50" r="20" fill="none"></circle></svg></span></div>
+                            <img class="${styles.playIcon}" src="${iconplay}" />
+                            <img class="${styles.playIcon}" src="${iconpause}" />
+                        </button>
+                    </div>
+                    <div class="${styles.time}">
+                        <div class="plyr__time plyr__time--current" aria-label="Current time">00:00</div><span class="${styles.line}">/</span>
+                        <div class="plyr__time plyr__time--duration" aria-label="Duration">00:00</div>
+                    </div>
+                </div>
+                <div class="${styles.slider}">
+                    <div class="plyr__progress">
+                        <input data-plyr="seek" type="range" min="0" max="100" step="0.01" value="0" aria-label="Seek">
+                        <progress class="plyr__progress__buffer" min="0" max="100" value="0">% buffered</progress>
+                        <span role="tooltip" class="plyr__tooltip">00:00</span>
+                    </div>
+
+                </div>
+                <div class="${styles.actions}" style="padding-right: 0;">
+                    <button id="${replayBtnId}" class="${styles.actionBtn} ${styles.loopBtn}">
+                        <img class="loop" src="${iconReplay}" />
+                    </button>
+                </div>
+            </div>`;
+
+    onMounted(() => {
+      videoItem.value = new Plyr(videoRef.value, {
+        autoplay: false,
+        controls: controls,
+        autopause: true, // 一次只允许
+        ratio: '16:9', // 强制所有视频的纵横比
+        // hideControls: false, // 在 2 秒没有鼠标或焦点移动、控制元素模糊(制表符退出)、播放开始或进入全屏时自动隐藏视频控件。只要移动鼠标、聚焦控制元素或暂停播放,控件就会立即重新出现。
+        clickToPlay: false, // 单击(或点击)视频容器将切换播放/暂停
+        fullscreen: { enabled: false, fallback: false, iosNative: false } // 不适用全屏
+      });
+      if (videoItem.value) {
+        videoItem.value.on('play', () => {
+          if (videoItem.value) {
+            videoItem.value.muted = false;
+            videoItem.value.volume = 1;
+          }
+
+          changePlayBtn('');
+        });
+        videoItem.value.on('pause', () => {
+          changePlayBtn('play');
+        });
+        videoItem.value.on('ended', () => {
+          emit('ended');
+          changePlayBtn('play');
+        });
+        videoItem.value.once('loadedmetadata', () => {
+          changePlayBtn('play');
+        });
+
+        nextTick(() => {
+          onDefault();
+        });
+      }
+    });
+    expose({
+      changePlayBtn,
+      toggleHideControl
+    });
+    return () => (
+      <div class={styles.videoWrap}>
+        <video
+          style={{ width: '100%', height: '100%' }}
+          src={isEmtry.value ? '' : src.value}
+          poster={poster.value}
+          ref={videoRef}
+          playsinline="false"></video>
+      </div>
+    );
+  }
+});

+ 5 - 1
src/components/card-type/index.module.less

@@ -18,6 +18,10 @@
   display: inline-flex;
   transition: all .3s ease-in-out;
 
+  &.course {
+    cursor: pointer;
+  }
+
   // 鼠标经过时样式
   &:hover {
     transform: scale(1.01);
@@ -132,4 +136,4 @@
     opacity: 0;
     transition: all .3s ease-in-out;
   }
-}
+}

+ 30 - 11
src/components/card-type/index.tsx

@@ -1,6 +1,6 @@
 import { PropType, defineComponent, ref } from 'vue';
 import styles from './index.module.less';
-import { NButton, NCard, NImage } from 'naive-ui';
+import { NButton, NCard, NImage, NModal } from 'naive-ui';
 import iconImage from '@common/images/icon-image.png';
 import iconVideo from '@common/images/icon-video.png';
 import iconAudio from '@common/images/icon-audio.png';
@@ -39,6 +39,11 @@ export default defineComponent({
       type: Boolean,
       default: false
     },
+    // 是否预览
+    isPreview: {
+      type: Boolean,
+      default: true
+    },
     item: {
       type: Object as PropType<itemType>,
       default: () => ({})
@@ -84,19 +89,33 @@ export default defineComponent({
         <NCard
           class={[
             styles['card-section'],
+            props.isShowAdd ? '' : styles.course,
             props.isActive ? styles.isActive : ''
           ]}>
           {{
-            cover: () =>
-              ['IMG', 'VIDEO', 'SONG', 'AUDIO'].includes(props.item.type) && (
-                <NImage
-                  class={[styles.cover, styles.image]}
-                  lazy
-                  previewDisabled
-                  objectFit="cover"
-                  src={props.item.url}
-                />
-              ),
+            cover: () => (
+              <>
+                {props.item.type === 'IMG' && (
+                  <NImage
+                    class={[styles.cover, styles.image]}
+                    lazy
+                    previewDisabled={!props.isPreview}
+                    objectFit="cover"
+                    src={props.item.url}
+                  />
+                )}
+
+                {['VIDEO', 'SONG', 'AUDIO'].includes(props.item.type) && (
+                  <NImage
+                    class={[styles.cover, styles.image]}
+                    lazy
+                    previewDisabled
+                    objectFit="cover"
+                    src={props.item.url}
+                  />
+                )}
+              </>
+            ),
             footer: () => (
               <div class={styles.footer}>
                 <div class={styles.title}>

BIN
src/images/submit.jpg


+ 19 - 1
src/router/router-guards.ts

@@ -7,11 +7,29 @@ import { ACCESS_TOKEN } from '@/store/mutation-types';
 const LOGIN_PATH = PageEnum.BASE_LOGIN;
 
 const whitePathList = [LOGIN_PATH]; // no redirect whitelist
-
+const isChrome = () => {
+  const isChromium = (window as any).chrome;
+  const winNav = window.navigator;
+  const vendorName = winNav.vendor;
+  const isOpera = typeof (window as any).opr !== 'undefined';
+  const isIEedge = winNav.userAgent.indexOf('Edge') > -1;
+  const isIOSChrome = winNav.userAgent.match('CriOS');
+  return (
+    isIOSChrome ||
+    (isChromium !== null &&
+      typeof isChromium !== 'undefined' &&
+      vendorName === 'Google Inc.' &&
+      isOpera === false &&
+      isIEedge === false)
+  );
+};
 export function createRouterGuards(router: Router) {
   const userStore = useUserStore();
   router.beforeEach(async (to, from, next) => {
     // console.log('access token');
+    if (!isChrome()) {
+      return;
+    }
     window.$loadingBar && window.$loadingBar.start();
 
     // console.log(window.$loadingBar, '232332');

+ 4 - 1
src/views/attend-class/component/musicScore.tsx

@@ -29,7 +29,10 @@ export default defineComponent({
     const isLoaded = ref(false);
     const renderError = ref(false);
     const renderSuccess = ref(false);
-    const src = `https://kt.colexiu.com/instrument?platform=pc&modelType=practise`;
+    const origin = /(localhost|192)/.test(location.host)
+      ? 'https://dev.kt.colexiu.com'
+      : location.origin;
+    const src = `${origin}/instrument?platform=pc&modelType=practise`;
     const checkView = () => {
       fetch(src)
         .then(() => {

+ 1 - 1
src/views/attend-class/component/video-play.tsx

@@ -107,7 +107,7 @@ export default defineComponent({
 
     onMounted(() => {
       videoItem.value = new Plyr(videoRef.value, {
-        autoplay: true,
+        autoplay: false,
         controls: controls,
         autopause: true, // 一次只允许
         ratio: '16:9', // 强制所有视频的纵横比

+ 1 - 1
src/views/attend-class/index.tsx

@@ -82,7 +82,7 @@ export default defineComponent({
       modelTrainStatus: false // 训练设置
     });
     const activeData = reactive({
-      isAutoPlay: true, // 是否自动播放
+      isAutoPlay: false, // 是否自动播放
       nowTime: 0,
       model: true, // 遮罩
       isAnimation: true, // 是否动画

+ 4 - 1
src/views/attend-class/model/train-type/index.tsx

@@ -45,7 +45,10 @@ export default defineComponent({
     };
 
     const onDetail = () => {
-      const src = `https://kt.colexiu.com/instrument?platform=pc&modelType=practise`;
+      const origin = /(localhost|192)/.test(location.host)
+        ? 'https://dev.kt.colexiu.com'
+        : location.origin;
+      const src = `${origin}/instrument?platform=pc&modelType=practise`;
       window.open(src, '_blank');
     };
     return () => (

+ 21 - 2
src/views/natural-resources/index.tsx

@@ -5,6 +5,7 @@ import { NTabPane, NTabs } from 'naive-ui';
 import CardType from '/src/components/card-type';
 import SearchGroupResources from './search-group-resources';
 import listData from '../xiaoku-music/data.json';
+import CardPreview from '/src/components/card-preview';
 export default defineComponent({
   name: 'student-studentList',
   setup() {
@@ -16,7 +17,9 @@ export default defineComponent({
         rows: 50,
         pageTotal: 0
       },
-      tableList: [] as any
+      tableList: [] as any,
+      show: false,
+      item: {}
     });
     const forms = reactive({
       list: [],
@@ -30,6 +33,7 @@ export default defineComponent({
           id: row.id,
           type: 'SONG',
           title: row.musicSheetName,
+          content: row.id,
           url: row.fixedTone ? row.fixedTone.split(',')[0] : '',
           isCollect: i % 3 ? false : true,
           isSelected: i % 4 ? false : true
@@ -40,6 +44,8 @@ export default defineComponent({
             id: i + 3,
             type: 'VIDEO',
             title: '其多列',
+            content:
+              'https://gyt.ks3-cn-beijing.ksyuncs.com/courseware/1687844560120.mp4',
             url: 'https://gyt.ks3-cn-beijing.ksyuncs.com/courseware/1687844640957.png',
             isCollect: i % 3 ? false : true,
             isSelected: i % 4 ? false : true
@@ -51,6 +57,8 @@ export default defineComponent({
             id: i + 3,
             type: 'AUDIO',
             title: '歌曲表演 大鹿',
+            content:
+              'https://cloud-coach.ks3-cn-beijing.ksyuncs.com/1686819360752.mp3',
             url: 'https://gyt.ks3-cn-beijing.ksyuncs.com/courseware/1687916228530.png',
             isCollect: i % 3 ? false : true,
             isSelected: i % 4 ? false : true
@@ -90,7 +98,15 @@ export default defineComponent({
 
             <div class={styles.list}>
               {forms.list.map((item: any) => (
-                <CardType item={item} />
+                <CardType
+                  item={item}
+                  onClick={(val: any) => {
+                    if (val.type === 'IMG') return;
+
+                    state.show = true;
+                    state.item = val;
+                  }}
+                />
               ))}
             </div>
 
@@ -134,6 +150,9 @@ export default defineComponent({
             />
           </NTabPane>
         </NTabs>
+
+        {/* 弹窗查看 */}
+        <CardPreview v-model:show={state.show} item={state.item} />
       </div>
     );
   }

+ 181 - 35
src/views/prepare-lessons/components/directory-main/index.tsx

@@ -1,12 +1,6 @@
-import {
-  Transition,
-  TransitionGroup,
-  defineComponent,
-  reactive,
-  ref
-} from 'vue';
+import { defineComponent, reactive, ref } from 'vue';
 import styles from './index.module.less';
-import { NIcon, NTree, NSpin, NScrollbar } from 'naive-ui';
+import { NIcon, NSpin, NScrollbar } from 'naive-ui';
 
 export default defineComponent({
   name: 'directory-main',
@@ -14,96 +8,248 @@ export default defineComponent({
     const show = ref(true);
     const forms = reactive({
       expandedKey: null, // 展开
-      selectKey: 10 // 选的
+      selectKey: 16 // 选的
     });
     const treeList = ref([
       {
         key: 1,
-        label:
-          '第一单元 我愿住在童话里我愿住在童话里我愿住在童话里我愿住在童话里我愿住在童话里我愿住在童话里我愿住在童话里我愿住在童话里我愿住在童话里',
-        selected: true,
+        label: '第1课 好朋友',
+        selected: false,
         children: [
           {
             key: 10,
-            label: '【欣赏】永远住在童话里'
+            label: '玩具兵进行曲'
           },
           {
             key: 11,
-            label: '【欣赏】糖果仙子舞曲'
+            label: '口哨与小狗'
           },
           {
             key: 12,
-            label: '【知识】音的高低'
+            label: '你的名字叫什么?'
           },
           {
             key: 13,
-            label: '【唱歌】小红帽'
+            label: '拉勾勾'
+          },
+          {
+            key: 14,
+            label: '唱歌姿势'
           }
         ]
       },
       {
         key: 2,
-        label: '第二单元 快乐游戏',
-        selected: false,
+        label: '第2课 快乐的一天',
+        selected: true,
         children: [
           {
-            key: 14,
-            label: '【欣赏】永远住在童话里'
+            key: 15,
+            label: '快乐的一天'
+          },
+          {
+            key: 16,
+            label: '其多列'
+          },
+          {
+            key: 17,
+            label: '跳绳'
           }
         ]
       },
       {
         key: 3,
-        label: '第三单元 劳动最光荣',
+        label: '第3课 祖国您好',
         selected: false,
         children: [
           {
-            key: 15,
-            label: '【欣赏】永远住在童话里'
+            key: 18,
+            label: '中华人民共和国国歌'
+          },
+          {
+            key: 19,
+            label: '颂祖国'
+          },
+          {
+            key: 20,
+            label: '国旗国旗真美丽'
+          },
+          {
+            key: 21,
+            label: '同唱一首歌'
+          },
+          {
+            key: 22,
+            label: '音的强弱'
           }
         ]
       },
       {
         key: 4,
-        label: '第四单元 音乐中的动物',
+        label: '第4课 可爱的动物',
         selected: false,
         children: [
           {
-            key: 16,
-            label: '【欣赏】永远住在童话里'
+            key: 23,
+            label: '快乐的小熊猫'
+          },
+          {
+            key: 24,
+            label: '袋鼠'
+          },
+          {
+            key: 25,
+            label: '动物说话'
+          },
+          {
+            key: 26,
+            label: '咏鹅'
+          },
+          {
+            key: 27,
+            label: '木鱼 碰钟'
           }
         ]
       },
       {
         key: 5,
-        label: '第五单元 动画城',
+        label: '第5课 爱劳动',
         selected: false,
         children: [
           {
-            key: 17,
-            label: '【欣赏】永远住在童话里'
+            key: 28,
+            label: '劳动最光荣'
+          },
+          {
+            key: 29,
+            label: '三个和尚'
+          },
+          {
+            key: 30,
+            label: '洗手绢'
+          },
+          {
+            key: 31,
+            label: '大家来劳动'
           }
         ]
       },
       {
         key: 6,
-        label: '第六单元 下雪啦',
+        label: '第6课 小精灵',
         selected: false,
         children: [
           {
-            key: 18,
-            label: '【欣赏】永远住在童话里'
+            key: 32,
+            label: '小青蛙'
+          },
+          {
+            key: 33,
+            label: '野蜂飞舞'
+          },
+          {
+            key: 34,
+            label: '小青蛙找家'
+          },
+          {
+            key: 35,
+            label: '小蜻蜓'
+          },
+          {
+            key: 36,
+            label: '响板'
           }
         ]
       },
       {
         key: 7,
-        label: '我的音乐网页',
+        label: '游戏宫',
         selected: false,
         children: [
           {
-            key: 19,
-            label: '【欣赏】永远住在童话里'
+            key: 37,
+            label: '欢乐的游乐园'
+          }
+        ]
+      },
+      {
+        key: 8,
+        label: '第7课 小小音乐家',
+        selected: false,
+        children: [
+          {
+            key: 38,
+            label: '号手与鼓手'
+          },
+          {
+            key: 39,
+            label: '会跳舞的洋娃娃'
+          },
+          {
+            key: 40,
+            label: '星光圆舞曲'
+          },
+          {
+            key: 41,
+            label: '法国号'
+          },
+          {
+            key: 42,
+            label: '快乐的小笛子'
+          },
+          {
+            key: 43,
+            label: '音的长短'
+          }
+        ]
+      },
+      {
+        key: 9,
+        label: '第8课 过新年',
+        selected: false,
+        children: [
+          {
+            key: 44,
+            label: '小拜年'
+          },
+          {
+            key: 45,
+            label: '平安夜'
+          },
+          {
+            key: 46,
+            label: '龙咚锵'
+          },
+          {
+            key: 47,
+            label: '新年好'
+          },
+          {
+            key: 48,
+            label: '锣 鼓 镲'
+          }
+        ]
+      },
+      {
+        key: -1,
+        label: '欢乐谷',
+        selected: false,
+        children: [
+          {
+            key: 49,
+            label: '小鼓响咚咚'
+          },
+          {
+            key: 50,
+            label: '我有一只小羊羔'
+          },
+          {
+            key: 51,
+            label: '大月亮'
+          },
+          {
+            key: 52,
+            label: '我的音乐表现'
           }
         ]
       }

+ 3 - 3
src/views/xiaoku-music/data.json

@@ -6,7 +6,7 @@
             "firstTone": "https://cloud-coach.ks3-cn-beijing.ksyuncs.com/music-sheet-first/1671757941570-1.png,https://cloud-coach.ks3-cn-beijing.ksyuncs.com/music-sheet-first/1671757942013-2.png",
             "fixedTone": "https://cloud-coach.ks3-cn-beijing.ksyuncs.com/music-sheet-fixed/1675776823337-1.png,https://cloud-coach.ks3-cn-beijing.ksyuncs.com/music-sheet-fixed/1675776823784-2.png",
             "musicSheetName": "孤勇者",
-            "id": 21167,
+            "id": 22213,
             "musicImg": "https://cloud-coach.ks3-cn-beijing.ksyuncs.com/music-sheet/1671757934802-1.png,https://cloud-coach.ks3-cn-beijing.ksyuncs.com/music-sheet/1671757941112-2.png",
             "delFlag": false,
             "updateBy": 3113,
@@ -41,7 +41,7 @@
             "fixedTone": "https://cloud-coach.ks3-cn-beijing.ksyuncs.com/music-sheet-fixed/1687847690485-1.png",
             "hasBeat": null,
             "hotFlag": null,
-            "id": 43541,
+            "id": 43554,
             "lastMusicSheet": null,
             "metronomeUrl": "",
             "midiUrl": "",
@@ -112,7 +112,7 @@
             "fixedTone": "https://cloud-coach.ks3-cn-beijing.ksyuncs.com/music-sheet-fixed/1687673062731-1.png",
             "hasBeat": null,
             "hotFlag": null,
-            "id": 43539,
+            "id": 43558,
             "lastMusicSheet": null,
             "metronomeUrl": "",
             "midiUrl": "",

+ 5 - 3
src/views/xiaoku-music/index.tsx

@@ -210,9 +210,11 @@ export default defineComponent({
                   src={icon_goXiaoku}
                   onClick={() => {
                     handleChangeAudio('pause');
-                    window.open(
-                      `https://kt.colexiu.com/instrument/?platform=pc&id=${activeItem.value.id}`
-                    );
+                    const origin = /(localhost|192)/.test(location.host)
+                      ? 'https://dev.kt.colexiu.com'
+                      : location.origin;
+                    const src = `${origin}/instrument?platform=pc&id=${activeItem.value.id}`;
+                    window.open(src);
                   }}
                 />
                 <div class={styles.favitor} onClick={() => handleFavitor()}>

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików