Browse Source

Merge branch 'master' of http://git.dayaedu.com/lex/classroom-instruments

mo 1 year ago
parent
commit
98243bf490
100 changed files with 741 additions and 190 deletions
  1. BIN
      dist/assets/0-34a03604.png
  2. BIN
      dist/assets/1-30f15957.png
  3. BIN
      dist/assets/2-5f9c270e.png
  4. BIN
      dist/assets/3-d57df471.png
  5. BIN
      dist/assets/5-7bea1376.png
  6. 1 1
      dist/assets/Scrollbar-0237d814.js
  7. 5 5
      dist/assets/Slider-d5357784.js
  8. BIN
      dist/assets/beatIcon-1f7963a3.png
  9. BIN
      dist/assets/colLogo-bedee3c7.png
  10. 0 0
      dist/assets/data-0dab0feb.js
  11. 40 0
      dist/assets/icon_default-c2fa566e.svg
  12. 16 0
      dist/assets/icon_searchActive-bf7fd0c6.svg
  13. 0 0
      dist/assets/index-0a29702d.css
  14. 0 0
      dist/assets/index-0dba904d.css
  15. 0 0
      dist/assets/index-0ead09d1.js
  16. 0 0
      dist/assets/index-22486d5d.js
  17. 0 0
      dist/assets/index-25fe8512.js
  18. 1 0
      dist/assets/index-2a301af6.css
  19. 0 0
      dist/assets/index-2c46e2a7.js
  20. 0 0
      dist/assets/index-2cc38f8c.css
  21. 0 0
      dist/assets/index-2ef18519.css
  22. 0 0
      dist/assets/index-2f1ccb56.css
  23. 1 1
      dist/assets/index-32e8b019.js
  24. 0 0
      dist/assets/index-35c1af3c.js
  25. 0 0
      dist/assets/index-37c60a82.css
  26. 0 0
      dist/assets/index-4b46da06.css
  27. 1 0
      dist/assets/index-4c8e5c3e.js
  28. 1 0
      dist/assets/index-50089975.css
  29. 28 0
      dist/assets/index-5117cfb5.js
  30. 0 0
      dist/assets/index-560392d6.js
  31. 0 1
      dist/assets/index-56826533.js
  32. 0 0
      dist/assets/index-5734b946.js
  33. 0 1
      dist/assets/index-60838e34.css
  34. 0 0
      dist/assets/index-60fe5683.js
  35. 0 0
      dist/assets/index-61f8e07b.css
  36. 0 0
      dist/assets/index-6217671a.css
  37. 0 1
      dist/assets/index-63acf244.css
  38. 0 1
      dist/assets/index-69178b61.js
  39. 0 0
      dist/assets/index-6ebe4bb9.js
  40. 0 0
      dist/assets/index-6fc4924b.js
  41. 0 1
      dist/assets/index-703f0315.css
  42. 0 0
      dist/assets/index-74eb895f.js
  43. 0 0
      dist/assets/index-799d83d4.css
  44. 0 1
      dist/assets/index-79de8bf0.css
  45. 1 0
      dist/assets/index-800768ae.css
  46. 0 28
      dist/assets/index-84577b8a.js
  47. 0 0
      dist/assets/index-91ec4b22.js
  48. 0 0
      dist/assets/index-9871ef41.js
  49. 1 1
      dist/assets/index-9989caac.js
  50. 0 0
      dist/assets/index-9c2aedf8.js
  51. 0 0
      dist/assets/index-9d0ddbd8.js
  52. 0 0
      dist/assets/index-9e3fac2e.js
  53. 0 0
      dist/assets/index-a7c7dda4.css
  54. 0 0
      dist/assets/index-a9eecb75.css
  55. 0 0
      dist/assets/index-b0bf63fa.js
  56. 0 0
      dist/assets/index-b2565c53.css
  57. 0 0
      dist/assets/index-b39daff1.js
  58. 0 0
      dist/assets/index-c658ca9d.css
  59. 1 0
      dist/assets/index-c7998cab.css
  60. 0 1
      dist/assets/index-d3fab033.js
  61. 0 0
      dist/assets/index-e1504caf.js
  62. 0 0
      dist/assets/index-e9ec84fb.js
  63. 0 0
      dist/assets/index-f46ba0e9.js
  64. 0 0
      dist/assets/index-f571d27c.js
  65. 0 0
      dist/assets/index-f6678ecb.js
  66. 0 0
      dist/assets/index-faedd4f1.css
  67. 1 0
      dist/assets/index-ffe5ada5.js
  68. BIN
      dist/assets/login-left-588cef70.png
  69. BIN
      dist/assets/login_bg-19ea25e8.png
  70. BIN
      dist/assets/login_styles-21dea017.png
  71. BIN
      dist/assets/login_styles-ceba7cd4.png
  72. BIN
      dist/assets/loginright-bff46f2c.png
  73. BIN
      dist/assets/setTimeIcon-b494ebcf.png
  74. BIN
      dist/assets/tick-b5f22461.mp3
  75. BIN
      dist/assets/toneIcon-08a00dff.png
  76. BIN
      dist/assets/toolbox-d14e974b.png
  77. 3 3
      dist/index.html
  78. 1 1
      index.html
  79. 11 0
      package-lock.json
  80. 1 0
      package.json
  81. 22 0
      src/api/user.ts
  82. 16 0
      src/common/images/icon_searchActive.svg
  83. 21 0
      src/components/TheNoticeBar/index.module.less
  84. 72 0
      src/components/TheNoticeBar/index.tsx
  85. 18 0
      src/components/TheSearch/index.module.less
  86. 7 1
      src/components/TheSearch/index.tsx
  87. 6 9
      src/components/card-type/index.module.less
  88. 1 1
      src/components/card-type/index.tsx
  89. 0 1
      src/components/layout/index.tsx
  90. 2 1
      src/components/layout/layoutSilder.tsx
  91. 1 2
      src/main.ts
  92. 2 0
      src/shims-vue.d.ts
  93. 20 29
      src/store/modules/users.ts
  94. 1 0
      src/types.d.ts
  95. 96 0
      src/utils/request.ts
  96. 155 0
      src/views/attend-class/component/audio-pay copy.tsx
  97. 133 67
      src/views/attend-class/component/audio-pay.tsx
  98. 22 0
      src/views/attend-class/component/audio.module.less
  99. 31 31
      src/views/attend-class/component/musicScore.tsx
  100. 1 1
      src/views/attend-class/component/tools/pen.tsx

BIN
dist/assets/0-34a03604.png


BIN
dist/assets/1-30f15957.png


BIN
dist/assets/2-5f9c270e.png


BIN
dist/assets/3-d57df471.png


BIN
dist/assets/5-7bea1376.png


+ 1 - 1
dist/assets/Scrollbar-34da8de0.js → dist/assets/Scrollbar-0237d814.js

@@ -1 +1 @@
-import{a8 as l,d as e,r as a,ab as n,aq as t}from"./index-6fc4924b.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{a9 as l,d as e,r as a,ac as n,aq as t}from"./index-6ebe4bb9.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};

File diff suppressed because it is too large
+ 5 - 5
dist/assets/Slider-d5357784.js


BIN
dist/assets/beatIcon-1f7963a3.png


BIN
dist/assets/colLogo-bedee3c7.png


File diff suppressed because it is too large
+ 0 - 0
dist/assets/data-0dab0feb.js


+ 40 - 0
dist/assets/icon_default-c2fa566e.svg

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="51px" height="49px" viewBox="0 0 51 49" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>编组@2x</title>
+    <defs>
+        <linearGradient x1="60.3790157%" y1="14.1179897%" x2="60.3790157%" y2="99.1367692%" id="linearGradient-1">
+            <stop stop-color="#D8D9DB" offset="0%"></stop>
+            <stop stop-color="#D3D4D6" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient x1="47.928727%" y1="88.2137009%" x2="47.928727%" y2="-1.32949207e-12%" id="linearGradient-2">
+            <stop stop-color="#D0D1D3" offset="0%"></stop>
+            <stop stop-color="#CACBCD" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient x1="57.5601934%" y1="1.66592618%" x2="56.4312509%" y2="99.1367692%" id="linearGradient-3">
+            <stop stop-color="#D8D9DB" offset="0%"></stop>
+            <stop stop-color="#D1D2D4" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient x1="47.928727%" y1="88.2137009%" x2="47.928727%" y2="-1.32949207e-12%" id="linearGradient-4">
+            <stop stop-color="#D0D1D3" offset="0%"></stop>
+            <stop stop-color="#C8C9CB" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient x1="47.928727%" y1="88.2137009%" x2="47.928727%" y2="-1.32949207e-12%" id="linearGradient-5">
+            <stop stop-color="#CFD0D2" offset="0%"></stop>
+            <stop stop-color="#CBCCCE" offset="100%"></stop>
+        </linearGradient>
+    </defs>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="67、小酷AI" transform="translate(-1720.000000, -737.000000)" fill-rule="nonzero">
+            <g id="编组" transform="translate(1720.000000, 737.000000)">
+                <g id="编组-6" transform="translate(0.600000, 0.666667)">
+                    <path d="M0.755328486,15.0252525 C-0.830540243,19.9313215 0.11107891,25.262202 3.29524979,29.4047571 C6.47942068,33.5473122 11.5319763,36.0147566 16.9240016,36.0606061 C24.4286025,36.09296 31.0759035,31.4573623 33.3061224,24.6361115 L0.755328486,15.0252525 Z" id="路径" fill="url(#linearGradient-1)"></path>
+                    <path d="M17.7262393,31.0568351 C8.4521233,30.9803529 0.940551474,23.8601879 0.813375057,15.0252525 L0.754723889,15.0252525 C-0.829875444,19.9313026 0.110989998,25.2621626 3.29261214,29.4047017 C6.47423428,33.5472408 11.5227456,36.0146758 16.9104549,36.060355 C24.4276023,36.0999738 31.0862959,31.4479077 33.3061224,24.6055962 L31.7758601,24.1535015 C28.5683718,28.5148198 23.3157927,31.0956941 17.7262393,31.0568351 L17.7262393,31.0568351 Z" id="路径" fill="url(#linearGradient-2)"></path>
+                    <path d="M14.7677422,5.37825957 C14.7677422,5.37825957 18.3328036,4.44948812 20.0004184,7.54187485 C15.9970737,11.1250329 13.586515,16.8823604 15.6870684,21.3679043 C16.5048411,23.1304592 18.0548677,24.5341705 18.6962581,26.4392074 C20.6791709,32.3335664 18.6004257,38.818554 13.5437557,42.5132859 L13.4849616,42.5555028 C13.4849616,42.5555028 12.9504696,42.951286 12.1113173,43.5370453 C14.650154,45.1782267 18.4236672,47.1360346 21.8711403,47.7956734 C30.2359393,49.4051921 38.8305699,44.0067081 42.0642462,36.4921028 C42.3367119,35.8608728 42.5652914,35.2120441 42.7483959,34.5501262 C43.5795078,31.4293042 43.8097647,28.1821626 43.4272007,24.9774478 C43.202714,23.0407483 42.6147729,19.4681445 45.3674064,19.0354214 C46.4363903,18.8665539 47.4626149,19.4048192 48.2803876,20.0539038 C48.4033207,20.1488917 49.5364437,21.067109 49.4562699,21.2518078 C51.2735425,16.9351315 48.2964223,5.51018733 38.3869416,1.64734247 C31.0376772,-1.32367072 20.3692179,-0.389622168 14.7677422,5.37825957 Z" id="路径" fill="url(#linearGradient-3)"></path>
+                    <path d="M26.6124657,47.6072826 C21.4912819,46.636432 18.7337213,44.7527707 16.9716508,43.1698621 C17.8393774,42.600015 18.3557545,42.2148405 18.3557545,42.2148405 L18.4143128,42.1726296 C23.5265567,38.5761859 25.72439,32.1283454 23.8602286,26.1958052 C23.2533524,24.2752094 21.7308383,22.8505916 20.9589343,21.077734 C18.9626308,16.5558917 21.459341,10.8415915 25.5105062,7.33281071 C23.9134634,4.20920435 20.3414111,5.07452773 20.3414111,5.07452773 C23.237382,2.18835767 27.421634,0.584343589 31.7922078,0.114747363 C25.5850348,-0.47092883 18.8188969,1.17001978 14.7570848,5.39110946 C14.7570848,5.39110946 18.3078432,4.46774609 19.9687677,7.55441792 C15.9814843,11.1370678 13.5805966,16.8988552 15.6727227,21.383763 C16.4872145,23.1407916 18.0310225,24.5495802 18.6698396,26.4490706 C20.6447971,32.3425937 18.5743917,38.8266616 13.5380088,42.5208695 L13.4794506,42.5630804 C13.4794506,42.5630804 12.947103,42.9640839 12.1113173,43.5444838 C14.6399683,45.1907088 18.3983423,47.1429627 21.8319843,47.8077844 C23.7881287,48.171816 25.7955452,48.171816 27.7516896,47.8077844 C27.3524289,47.744468 26.9797855,47.6811517 26.6124657,47.6072826 Z" id="路径" fill="url(#linearGradient-4)"></path>
+                    <path d="M45.0423476,14.0093804 C46.200789,13.854566 48.445269,13.5716291 48.445269,13.5716291 C46.707607,9.89878877 42.4247158,7.65130943 39.7402509,6.83452952 C39.7068343,6.83452952 38.3200464,6.42347036 38.3311852,6.43948565 C33.2852822,5.3717995 29.0190992,6.29000959 25.799969,9.25283865 C22.37477,12.4025128 21.6340358,17.9598192 24.3964728,21.7340897 C25.154529,22.6993831 26.100114,23.5151123 27.1811875,24.1363836 C25.0592349,38.8384218 37.0335082,40.6855189 37.1560356,40.562735 C39.1777385,38.2405176 41.2105802,35.939654 41.2105802,28.0601302 C41.2105802,25.9247579 40.2916244,22.4120704 40.1579581,21.5045372 C39.5230431,17.1750699 40.8652756,14.5966078 45.0423476,14.0093804 Z" id="路径" fill="#F4F5F7"></path>
+                    <ellipse id="椭圆形" fill="url(#linearGradient-5)" cx="35.5769944" cy="14.2739899" rx="2.27087199" ry="2.25378788"></ellipse>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 16 - 0
dist/assets/icon_searchActive-bf7fd0c6.svg

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="18px" height="18px" viewBox="0 0 18 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>切片</title>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linejoin="round">
+        <g id="65、布置作业-选择曲目" transform="translate(-1247.000000, -182.000000)" stroke="#2089FF" stroke-width="1.81438256">
+            <g id="矩形" transform="translate(284.000000, 76.000000)">
+                <g id="编组-18" transform="translate(951.000000, 94.000000)">
+                    <g id="搜索" transform="translate(12.000000, 12.000000)">
+                        <path d="M7.53172346,13.9386396 C11.0702243,13.9386396 13.9384469,11.0703739 13.9384469,7.53181981 C13.9384469,3.99444998 11.0702243,1.125 7.53172346,1.125 C3.99440683,1.125 1.125,3.99444998 1.125,7.53181981 C1.125,11.0703739 3.99440683,13.9386396 7.53172346,13.9386396 Z" id="Stroke-1"></path>
+                        <line x1="12.138051" y1="12.1379798" x2="16.5200841" y2="16.5203156" id="Stroke-3" stroke-linecap="round"></line>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-0a29702d.css


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-0dba904d.css


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-0ead09d1.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-22486d5d.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-25fe8512.js


+ 1 - 0
dist/assets/index-2a301af6.css

@@ -0,0 +1 @@
+._listWrap_1jk25_1{padding:1.66667vw;background-color:#fff;min-height:100%;border-radius:1.04167vw}._addBtnIcon_1jk25_7{width:.83333vw;height:.88542vw}._addBtn_1jk25_7{margin-bottom:1.5625vw;height:2.23958vw;background:#198cfe;border-radius:.41667vw;line-height:2.13542vw;width:7.5vw;padding:0 1.25vw}._addBtn_1jk25_7 .n-button__content{font-size:.9375vw}

File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-2c46e2a7.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-2cc38f8c.css


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-2ef18519.css


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-2f1ccb56.css


+ 1 - 1
dist/assets/index-f2faa80b.js → dist/assets/index-32e8b019.js

@@ -1 +1 @@
-import{W as y,X as F,L as P,Y as C,E as b}from"./index-6fc4924b.js";function W(e){return y()?(F(e),!0):!1}function w(e){return typeof e=="function"?e():b(e)}const g=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 j(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 O(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 E(e,i=200,n={}){return D(j(i,n),e)}function L(e,i=200,n=!1,t=!0,o=!1){return D(O(i,n,t,o),e)}function R(e){P()&&C(e)}export{L as a,W as b,w as c,g as i,R as t,E as u};
+import{X as y,Y as F,S as P,Z as C,J as S}from"./index-6ebe4bb9.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};

File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-35c1af3c.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-37c60a82.css


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-4b46da06.css


+ 1 - 0
dist/assets/index-4c8e5c3e.js

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

+ 1 - 0
dist/assets/index-50089975.css

@@ -0,0 +1 @@
+._TheSearch_u8dnx_1{border-radius:20Px!important}._TheSearch_u8dnx_1 .n-input-wrapper{padding-right:4Px;height:42Px}._TheSearch_u8dnx_1 .n-input-wrapper .n-input__input-el{height:100%}._TheSearch_u8dnx_1 .n-button{width:72Px;height:34Px;opacity:.8}._TheSearch_u8dnx_1 ._active_u8dnx_16{display:none}._TheSearch_u8dnx_1.n-input--focus ._active_u8dnx_16{display:block}._TheSearch_u8dnx_1.n-input--focus ._default_u8dnx_22{display:none}._TheSearch_u8dnx_1.n-input--focus .n-button{opacity:1}

File diff suppressed because it is too large
+ 28 - 0
dist/assets/index-5117cfb5.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-560392d6.js


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

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

File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-5734b946.js


+ 0 - 1
dist/assets/index-60838e34.css

@@ -1 +0,0 @@
-._container_bwvqf_1{display:flex;flex-direction:column;background:#FFFFFF;border-radius:20Px;height:100%}._tools_bwvqf_8{padding:32Px 32Px 20Px;display:flex;align-items:center;flex-shrink:0}._tools_bwvqf_8 .n-input{margin-left:auto;width:361Px}._content_bwvqf_18{flex:1;overflow-y:auto;padding:20Px 36Px 36Px}._item_bwvqf_23{position:relative;width:214Px;cursor:pointer;transition:all .3s}._item_bwvqf_23 ._cover_bwvqf_29{position:relative;overflow:hidden}._item_bwvqf_23 ._cover_bwvqf_29:before{content:"";position:absolute;top:107Px;left:0;width:214Px;height:214Px;background:#DDF2FF;border-radius:50%}._item_bwvqf_23:hover{transform:scale(1.1)}._item_bwvqf_23 ._itemImg_bwvqf_46{position:relative;width:158Px;height:223Px;margin:auto;background-color:#faebd7;box-shadow:0 0 .52083vw .20833vw #1b23371a}._item_bwvqf_23 ._itemImg_bwvqf_46 .n-image{width:100%;height:100%}._item_bwvqf_23 ._itemImg_bwvqf_46 img{transition:opacity .3s;opacity:0}._item_bwvqf_23 ._itemImg_bwvqf_46 img[data-loaded=true]{opacity:1}._item_bwvqf_23 ._itemName_bwvqf_65{margin-top:16Px;font-size:16Px;font-weight:500;color:#333;text-align:center}

File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-60fe5683.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-61f8e07b.css


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-6217671a.css


+ 0 - 1
dist/assets/index-63acf244.css

@@ -1 +0,0 @@
-._listWrap_gj4q0_1{padding:1.66667vw;background-color:#fff}._addBtnIcon_gj4q0_5{width:.83333vw;height:.88542vw}._addBtn_gj4q0_5{margin-bottom:1.5625vw;height:2.23958vw;background:#198cfe;border-radius:.41667vw;line-height:2.13542vw;width:7.5vw;padding:0 1.25vw}._addBtn_gj4q0_5 .n-button__content{font-size:.9375vw}

+ 0 - 1
dist/assets/index-69178b61.js

@@ -1 +0,0 @@
-import{T as g}from"./index-56826533.js";import{d as u,u as p,c as d,f as t,J as i,k as f,l as v,O as b}from"./index-6fc4924b.js";const w="_container_bwvqf_1",I="_tools_bwvqf_8",h="_content_bwvqf_18",y="_item_bwvqf_23",N="_cover_bwvqf_29",q="_itemImg_bwvqf_46",L="_itemName_bwvqf_65",e={container:w,tools:I,content:h,item:y,cover:N,itemImg:q,itemName:L},R=""+new URL("0-34a03604.png",import.meta.url).href,k=""+new URL("1-30f15957.png",import.meta.url).href,U=""+new URL("2-5f9c270e.png",import.meta.url).href,j=""+new URL("3-d57df471.png",import.meta.url).href,O=""+new URL("1-30f15957.png",import.meta.url).href,S=""+new URL("5-7bea1376.png",import.meta.url).href,x=Object.assign({"./0.png":R,"./1.png":k,"./2.png":U,"./3.png":j,"./4.png":O,"./5.png":S}),z=o=>x[`./${o}`]||"";function _(o){return typeof o=="function"||Object.prototype.toString.call(o)==="[object Object]"&&!b(o)}const A=u({name:"XiaokuAi",setup(){const o=p(),a=d({tags:[{name:"全部",id:0},{name:"人教版",id:1},{name:"声部训练",id:2},{name:"小曲目",id:3},{name:"考级曲目",id:4}],tagIndex:0,list:[{name:"一年级上册人教版(2013版)",src:""}]});return()=>{let s,c;return t("div",{class:e.container},[t("div",{class:e.tools},[t("div",{class:e.tags},[t(i,{size:[24,12]},_(s=a.tags.map((r,n)=>t(f,{round:!0,secondary:a.tagIndex!==n,type:a.tagIndex===n?"primary":"default",class:[e.tag,a.tagIndex===n?e.active:""],onClick:()=>a.tagIndex=n},{default:()=>[r.name]})))?s:{default:()=>[s]})]),t(g,{round:!0},null)]),t("div",{class:e.content},[t(i,{size:[50,40]},_(c=new Array(30).fill(a.list[0]).map((r,n)=>{const m=n>5?n%5:n;return t("div",{class:e.item,key:`item-${n}`,onClick:()=>o.push({path:"/xiaoku-music"})},[t("div",{class:e.cover},[t("div",{class:e.itemImg},[t(v,{objectFit:"contain",src:z(`${m}.png`),lazy:!0,previewDisabled:!0,onLoad:l=>{l.target.dataset.loaded="true"}},null)])]),t("div",{class:e.itemName},[r.name])])}))?c:{default:()=>[c]})])])}}});export{A as default};

File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-6ebe4bb9.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-6fc4924b.js


+ 0 - 1
dist/assets/index-703f0315.css

@@ -1 +0,0 @@
-._TheSearch_jcd5r_1{border-radius:20Px!important}._TheSearch_jcd5r_1 .n-input-wrapper{padding-right:4Px;height:42Px}._TheSearch_jcd5r_1 .n-input-wrapper .n-input__input-el{height:100%}._TheSearch_jcd5r_1 .n-button{height:34Px}

File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-74eb895f.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-799d83d4.css


+ 0 - 1
dist/assets/index-79de8bf0.css

@@ -1 +0,0 @@
-._searchInput_1cmht_1{height:2.23958vw;border-radius:.41667vw}._searchInput_1cmht_1 .n-input__input-el{line-height:2.23958vw;height:2.23958vw}._searchInput_1cmht_1 ._searchIcon_1cmht_9{width:.83333vw;height:.88542vw}._arrow_3fl4c_1{width:.625vw;height:.67708vw}._CSelectWrap_3fl4c_5 .n-select{width:9.375vw}._CSelectWrap_3fl4c_5 .n-select .n-base-selection-label{height:2.23958vw;line-height:2.23958vw}._CSelectWrap_3fl4c_5 .n-select .n-base-selection__border,._CSelectWrap_3fl4c_5 .n-select .n-base-selection__state-border{border-radius:.41667vw;overflow:hidden}

+ 1 - 0
dist/assets/index-800768ae.css

@@ -0,0 +1 @@
+._searchInput_1cmht_1{height:2.23958vw;border-radius:.41667vw}._searchInput_1cmht_1 .n-input__input-el{line-height:2.23958vw;height:2.23958vw}._searchInput_1cmht_1 ._searchIcon_1cmht_9{width:.83333vw;height:.88542vw}._arrow_7rpyy_1{width:.625vw;height:.67708vw}._CSelectWrap_7rpyy_5 .n-select{width:100%;min-width:9.375vw}._CSelectWrap_7rpyy_5 .n-select .n-base-selection-label{height:2.23958vw;line-height:2.23958vw}._CSelectWrap_7rpyy_5 .n-select .n-base-selection__border,._CSelectWrap_7rpyy_5 .n-select .n-base-selection__state-border{border-radius:.41667vw;overflow:hidden}

File diff suppressed because it is too large
+ 0 - 28
dist/assets/index-84577b8a.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-91ec4b22.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-9871ef41.js


+ 1 - 1
dist/assets/index-68996785.js → dist/assets/index-9989caac.js

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

File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-9c2aedf8.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-9d0ddbd8.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-9e3fac2e.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-a7c7dda4.css


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-a9eecb75.css


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-b0bf63fa.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-b2565c53.css


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-b39daff1.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-c658ca9d.css


+ 1 - 0
dist/assets/index-c7998cab.css

@@ -0,0 +1 @@
+._listWrap_186bn_1{padding:1.66667vw;background-color:#fff;border-radius:1.04167vw;min-height:100%}._addBtnIcon_186bn_7{width:.83333vw;height:.88542vw}._addBtn_186bn_7{margin-bottom:1.5625vw;height:2.23958vw;background:#198cfe;border-radius:.41667vw;line-height:2.13542vw;width:7.5vw;padding:0 1.25vw}._addBtn_186bn_7 .n-button__content{font-size:.9375vw}

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

@@ -1 +0,0 @@
-import{s as g,d as i}from"./searchIcon-ba1c1828.js";import{d as u,r as t,f as e,i as p,D as I,l as c,Q as m,F as h}from"./index-6fc4924b.js";const S="_searchInput_1cmht_1",J="_searchIcon_1cmht_9",l={searchInput:S,searchIcon:J},F=u({name:"student-studentList",props:["searchWord"],emits:["changeValue"],setup(n,{emit:o,attrs:a}){const s=t(!1);return()=>e("div",null,[e(p,I(a,{clearable:!0,class:l.searchInput,value:n.searchWord,onInput:A=>{o("changeValue",A)},onFocus:()=>{s.value=!0},onBlur:()=>{s.value=!1}}),{prefix:()=>e(c,{class:l.searchIcon,previewDisabled:!0,src:s.value?g:i},null)})])}}),w="_arrow_3fl4c_1",C="_CSelectWrap_3fl4c_5",r={arrow:w,CSelectWrap:C},d="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAaCAYAAACtv5zzAAAAAXNSR0IArs4c6QAAANtJREFUSEvt0zFOAkEYQOFv7eEi9iba0GLlDextKNUbECmpuIItFSWNmnANPIEWtoZkJ5LJDv9AQuVOs8Vm3tt5/2zjzKs5M18vCAv/r0TXmLdNJvgI+1B9i26wwqCFfuMWb5GkZgY5PDGrJJGgBK+WHBJ0wZ9a8stemoMnKQlK8FkLfkQuGeM9n0mXIIInRpUkF9TCqyX7gmPhVZIkGGKL3TOt3UBT8+i657m+cInPJBhhfSK8dJI7LJPgAq+4whSL6JML7x/wjA3u8RP9aCd6/rb1gjBhnyhM9As5gjEbhIMMwQAAAABJRU5ErkJggg==",v="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAaCAYAAACtv5zzAAAAAXNSR0IArs4c6QAAASlJREFUSEvtlDFOxDAQRWecigJOAMegABpKFI3TcgUqShZusFDScIA9AbJltt0mSPQcI83SJjMo0S7KBmM7xTYoaT3zn+f/cRD2/OGe9WECRB3+JxaVZXlQVdUCAE4RcU5EL9HZPQXGmBsAeACADyK6RkTuLLLWFsz8uu1BxJnW+mkMxFo7Y+Z5r+eyKIpVB3DOHTdN8ykiR9sCpdQ9ET2mQIbiiLjOsuwkz/P1T8jW2nNmXgLA4ZhJjDF3ItK/yJdS6oqIylZnZ4vGQmLivwCbPJImSRH3AlIgqeJ/AkKQ9izk+XApgi/ZOXdR1/VbP/iBwE6gvo2L/ip8wW+EouJBi/q38UCSxJMBbaEx5kxEnrsmxFut9XvKI4xalCISqpkAUQcni6IWfQOwkaYb9TFYBgAAAABJRU5ErkJggg==",k=u({name:"CSelect",setup(n,{emit:o,attrs:a}){t(null);const s=t(!1);return()=>e(h,null,[e("div",{class:r.CSelectWrap},[e(m,I({"show-checkmark":!1},a,{"onUpdate:show":A=>{s.value=A}}),{arrow:()=>s.value?e(c,{class:r.arrow,src:d},null):e(c,{class:r.arrow,src:v},null)})])])}});export{k as C,F as S};

File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-e1504caf.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-e9ec84fb.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-f46ba0e9.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-f571d27c.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-f6678ecb.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-faedd4f1.css


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

@@ -0,0 +1 @@
+import{s as p,d as g}from"./searchIcon-ba1c1828.js";import{d as u,r as t,f as e,h as i,I,o as c,Q as m,F as h}from"./index-6ebe4bb9.js";const S="_searchInput_1cmht_1",J="_searchIcon_1cmht_9",l={searchInput:S,searchIcon:J},F=u({name:"student-studentList",props:["searchWord"],emits:["changeValue"],setup(n,{emit:o,attrs:a}){const s=t(!1);return()=>e("div",null,[e(i,I(a,{clearable:!0,class:l.searchInput,value:n.searchWord,onInput:A=>{o("changeValue",A)},onFocus:()=>{s.value=!0},onBlur:()=>{s.value=!1}}),{prefix:()=>e(c,{class:l.searchIcon,previewDisabled:!0,src:s.value?p:g},null)})])}}),w="_arrow_7rpyy_1",C="_CSelectWrap_7rpyy_5",r={arrow:w,CSelectWrap:C},d="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAaCAYAAACtv5zzAAAAAXNSR0IArs4c6QAAANtJREFUSEvt0zFOAkEYQOFv7eEi9iba0GLlDextKNUbECmpuIItFSWNmnANPIEWtoZkJ5LJDv9AQuVOs8Vm3tt5/2zjzKs5M18vCAv/r0TXmLdNJvgI+1B9i26wwqCFfuMWb5GkZgY5PDGrJJGgBK+WHBJ0wZ9a8stemoMnKQlK8FkLfkQuGeM9n0mXIIInRpUkF9TCqyX7gmPhVZIkGGKL3TOt3UBT8+i657m+cInPJBhhfSK8dJI7LJPgAq+4whSL6JML7x/wjA3u8RP9aCd6/rb1gjBhnyhM9As5gjEbhIMMwQAAAABJRU5ErkJggg==",v="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAaCAYAAACtv5zzAAAAAXNSR0IArs4c6QAAASlJREFUSEvtlDFOxDAQRWecigJOAMegABpKFI3TcgUqShZusFDScIA9AbJltt0mSPQcI83SJjMo0S7KBmM7xTYoaT3zn+f/cRD2/OGe9WECRB3+JxaVZXlQVdUCAE4RcU5EL9HZPQXGmBsAeACADyK6RkTuLLLWFsz8uu1BxJnW+mkMxFo7Y+Z5r+eyKIpVB3DOHTdN8ykiR9sCpdQ9ET2mQIbiiLjOsuwkz/P1T8jW2nNmXgLA4ZhJjDF3ItK/yJdS6oqIylZnZ4vGQmLivwCbPJImSRH3AlIgqeJ/AkKQ9izk+XApgi/ZOXdR1/VbP/iBwE6gvo2L/ip8wW+EouJBi/q38UCSxJMBbaEx5kxEnrsmxFut9XvKI4xalCISqpkAUQcni6IWfQOwkaYb9TFYBgAAAABJRU5ErkJggg==",k=u({name:"CSelect",setup(n,{emit:o,attrs:a}){t(null);const s=t(!1);return()=>e(h,null,[e("div",{class:r.CSelectWrap},[e(m,I({"show-checkmark":!1},a,{"onUpdate:show":A=>{s.value=A}}),{arrow:()=>s.value?e(c,{class:r.arrow,src:d},null):e(c,{class:r.arrow,src:v},null)})])])}});export{k as C,F as S};

BIN
dist/assets/login-left-588cef70.png


BIN
dist/assets/login_bg-19ea25e8.png


BIN
dist/assets/login_styles-21dea017.png


BIN
dist/assets/login_styles-ceba7cd4.png


BIN
dist/assets/loginright-bff46f2c.png


BIN
dist/assets/setTimeIcon-b494ebcf.png


BIN
dist/assets/tick-b5f22461.mp3


BIN
dist/assets/toneIcon-08a00dff.png


BIN
dist/assets/toolbox-d14e974b.png


+ 3 - 3
dist/index.html

@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html lang="en">
+<html lang="zh-CN">
 
 <head>
   <meta charset="UTF-8" />
@@ -24,8 +24,8 @@
   <meta name="msapplication-tap-highlight" content="no" />
   <meta name="referrer" content="no-referrer" />
   <title>老师端</title>
-  <script type="module" crossorigin src="./assets/index-6fc4924b.js"></script>
-  <link rel="stylesheet" href="./assets/index-417106d0.css">
+  <script type="module" crossorigin src="./assets/index-6ebe4bb9.js"></script>
+  <link rel="stylesheet" href="./assets/index-37c60a82.css">
 </head>
 
 <body>

+ 1 - 1
index.html

@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html lang="en">
+<html lang="zh-CN">
 
 <head>
   <meta charset="UTF-8" />

+ 11 - 0
package-lock.json

@@ -20,6 +20,7 @@
         "plyr": "^3.7.8",
         "query-string": "^8.1.0",
         "umi-request": "^1.4.0",
+        "vudio.js": "^1.0.3",
         "vue": "^3.3.4",
         "vue-router": "^4.1.6",
         "vue3-lottie": "^2.7.0",
@@ -8354,6 +8355,11 @@
         "vue": "^3.0.0"
       }
     },
+    "node_modules/vudio.js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/vudio.js/-/vudio.js-1.0.3.tgz",
+      "integrity": "sha512-pip5HpUUmRYTKblq9EoDwUaKSTD4O+8LbGpzKYxRt6ZVQLzS/SpmjvsMTb8Wut6DzAn5fYzxifb9xzRZwEI2IQ=="
+    },
     "node_modules/vue": {
       "version": "3.3.4",
       "resolved": "https://registry.npmmirror.com/vue/-/vue-3.3.4.tgz",
@@ -15214,6 +15220,11 @@
         "evtd": "^0.2.2"
       }
     },
+    "vudio.js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/vudio.js/-/vudio.js-1.0.3.tgz",
+      "integrity": "sha512-pip5HpUUmRYTKblq9EoDwUaKSTD4O+8LbGpzKYxRt6ZVQLzS/SpmjvsMTb8Wut6DzAn5fYzxifb9xzRZwEI2IQ=="
+    },
     "vue": {
       "version": "3.3.4",
       "resolved": "https://registry.npmmirror.com/vue/-/vue-3.3.4.tgz",

+ 1 - 0
package.json

@@ -33,6 +33,7 @@
     "plyr": "^3.7.8",
     "query-string": "^8.1.0",
     "umi-request": "^1.4.0",
+    "vudio.js": "^1.0.3",
     "vue": "^3.3.4",
     "vue-router": "^4.1.6",
     "vue3-lottie": "^2.7.0",

+ 22 - 0
src/api/user.ts

@@ -0,0 +1,22 @@
+import request from '@/utils/request';
+
+/**
+ * 用户登录
+ * @param prams 登录参数
+ */
+export const userLogin = (params: any) => {
+  return request.post('/api-auth/usernameLogin', {
+    requestType: 'form',
+    data: params
+  });
+};
+
+/**
+ * 获取用户信息
+ * returns user
+ */
+export const getUserInfo = () => {
+  return request.get('/api-app/user/getUserInfo', {
+    requestType: 'form'
+  });
+};

+ 16 - 0
src/common/images/icon_searchActive.svg

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="18px" height="18px" viewBox="0 0 18 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>切片</title>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linejoin="round">
+        <g id="65、布置作业-选择曲目" transform="translate(-1247.000000, -182.000000)" stroke="#2089FF" stroke-width="1.81438256">
+            <g id="矩形" transform="translate(284.000000, 76.000000)">
+                <g id="编组-18" transform="translate(951.000000, 94.000000)">
+                    <g id="搜索" transform="translate(12.000000, 12.000000)">
+                        <path d="M7.53172346,13.9386396 C11.0702243,13.9386396 13.9384469,11.0703739 13.9384469,7.53181981 C13.9384469,3.99444998 11.0702243,1.125 7.53172346,1.125 C3.99440683,1.125 1.125,3.99444998 1.125,7.53181981 C1.125,11.0703739 3.99440683,13.9386396 7.53172346,13.9386396 Z" id="Stroke-1"></path>
+                        <line x1="12.138051" y1="12.1379798" x2="16.5200841" y2="16.5203156" id="Stroke-3" stroke-linecap="round"></line>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 21 - 0
src/components/TheNoticeBar/index.module.less

@@ -0,0 +1,21 @@
+.wrap{
+    max-width: 100%;
+    overflow: hidden;
+    display: flex;
+    align-items: center;
+    &:hover{
+        .notice{
+            width: auto;
+            overflow: initial;
+        }
+    }
+}
+.notice{
+    transition-timing-function: linear;
+    transition-duration: 5s;
+    width: 100%;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    transition-timing-function: linear;
+}

+ 72 - 0
src/components/TheNoticeBar/index.tsx

@@ -0,0 +1,72 @@
+import { defineComponent, onMounted, reactive, ref } from 'vue';
+import styles from './index.module.less';
+
+export default defineComponent({
+  name: 'TheNoticeBar',
+  props: {
+    text: {
+      type: String,
+      default: ''
+    }
+  },
+  setup(props) {
+    const wrapRef = ref();
+    const contentRef = ref();
+    const notiData = reactive({
+      isActive: false,
+      wrapWidth: 0,
+      contentWidth: 0,
+      contentStyle: {
+        transitionDuration: '0s',
+        transform: 'translateX(0px)'
+      },
+      time: null as any
+    });
+    const init = () => {
+      if (notiData.isActive || !contentRef.value || !wrapRef.value) return;
+      notiData.isActive = true;
+      notiData.contentWidth = contentRef.value.getBoundingClientRect().width;
+      notiData.wrapWidth = wrapRef.value.getBoundingClientRect().width;
+      startAnimate();
+    };
+    const startAnimate = () => {
+      if (notiData.contentWidth <= notiData.wrapWidth || !notiData.isActive) {
+        notiData.contentStyle.transitionDuration = '0s';
+        notiData.contentStyle.transform = 'translateX(0px)';
+        return;
+      }
+
+      notiData.contentStyle.transitionDuration = '5s';
+      notiData.contentStyle.transform = 'translateX(-100%)';
+
+      notiData.time = setTimeout(() => {
+        notiData.contentStyle.transitionDuration = '0s';
+        notiData.contentStyle.transform = `translateX(${notiData.wrapWidth}px)`;
+        requestAnimationFrame(() => {
+          startAnimate();
+        });
+      }, 5 * 1000);
+    };
+    const stopAnimate = () => {
+      clearTimeout(notiData.time);
+      notiData.isActive = false;
+      notiData.contentStyle.transitionDuration = '0s';
+      notiData.contentStyle.transform = 'translateX(0px)';
+      notiData.time = null;
+    };
+    return () => (
+      <div
+        ref={wrapRef}
+        class={styles.wrap}
+        onMouseenter={() => init()}
+        onMouseleave={() => stopAnimate()}>
+        <div
+          ref={contentRef}
+          style={notiData.contentStyle}
+          class={styles.notice}>
+          {props.text}
+        </div>
+      </div>
+    );
+  }
+});

+ 18 - 0
src/components/TheSearch/index.module.less

@@ -12,7 +12,25 @@
         }
 
         .n-button {
+            width: 72Px;
             height: 34Px;
+            opacity: .8;
+        }
+    }
+    .active{
+        display: none;
+    }
+    &:global(.n-input--focus){
+        .active{
+            display: block;
+        }
+        .default{
+            display: none;
+        }
+        :global{
+            .n-button{
+                opacity: 1;
+            }
         }
     }
 }

+ 7 - 1
src/components/TheSearch/index.tsx

@@ -2,6 +2,7 @@ import { PropType, defineComponent, reactive } from 'vue';
 import styles from './index.module.less';
 import { InputProps, NButton, NIcon, NImage, NInput } from 'naive-ui';
 import icon_search from '/src/common/images/icon_search.svg';
+import icon_searchActive from '/src/common/images/icon_searchActive.svg';
 
 export default defineComponent({
   name: 'TheSearch',
@@ -24,7 +25,12 @@ export default defineComponent({
         placeholder="请输入搜索关键词"
         v-model={searchData.value}>
         {{
-          prefix: () => <img src={icon_search} />,
+          prefix: () => (
+            <>
+              <img class={styles.default} src={icon_search} />
+              <img class={styles.active} src={icon_searchActive} />
+            </>
+          ),
           suffix: () => (
             <NButton
               size="small"

+ 6 - 9
src/components/card-type/index.module.less

@@ -14,16 +14,15 @@
   width: 300px;
   height: 220px;
   border-radius: 14px;
-  overflow: hidden;
   background: linear-gradient(270deg, #DBF1FF 0%, #E7F9FF 100%) !important;
   display: inline-flex;
+  transition: all .3s ease-in-out;
 
   // 鼠标经过时样式
   &:hover {
-    .image {
-      transform: scale(1.1);
-      transition: all .3s ease-in-out;
-    }
+    transform: scale(1.01);
+    transition: all .3s ease-in-out;
+
 
     .addBtn {
       display: block;
@@ -41,6 +40,8 @@
     width: 100%;
     height: 170px;
     background-color: #fff;
+    border-radius: 14px 14px 0 0;
+    overflow: hidden;
 
     img {
       height: fit-content;
@@ -48,10 +49,6 @@
     }
   }
 
-  .image {
-    transition: all .3s ease-in-out;
-  }
-
 
   :global {
     .n-card__footer {

+ 1 - 1
src/components/card-type/index.tsx

@@ -80,7 +80,7 @@ export default defineComponent({
           ]}>
           {{
             cover: () =>
-              ['IMG', 'VIDEO', 'SONG'].includes(props.item.type) && (
+              ['IMG', 'VIDEO', 'SONG', 'AUDIO'].includes(props.item.type) && (
                 <NImage
                   class={[styles.cover, styles.image]}
                   lazy

+ 0 - 1
src/components/layout/index.tsx

@@ -16,7 +16,6 @@ export default defineComponent({
     const showModalTone = ref(false);
     const showModalTime = ref(false);
     const initMoveable = async () => {
-      console.log(document.querySelector('.wrap'));
       if (document.querySelector('.wrap')) {
         const moveable = new Moveable(document.querySelector('.wrap') as any, {
           target: document.querySelector('#moveNPopover') as any,

+ 2 - 1
src/components/layout/layoutSilder.tsx

@@ -63,6 +63,7 @@ export default defineComponent({
         normalIcon: kuNormal,
         isActive: false,
         id: 5,
+        lightList:[ '/xiaoku-music'],//小酷AI的灯光列表
         path: '/xiaoku-ai'
       },
       {
@@ -101,7 +102,7 @@ export default defineComponent({
     const checkPathChange = (path: string) => {
       itemInfoList.forEach((now: any) => {
         now.isActive = false;
-        if (now.path === path) {
+        if (now.path === path || now.lightList?.includes(path)) {
           now.isActive = true;
         }
       });

+ 1 - 2
src/main.ts

@@ -6,7 +6,6 @@ import { setupNaive } from './plugins';
 import { setupStore } from './store';
 import 'dayjs/locale/zh-cn';
 import './styles/index.less';
-import { useLoadingBar } from 'naive-ui';
 
 async function setupApp() {
   // app loading
@@ -25,7 +24,7 @@ async function setupApp() {
 
   dayjs.locale('zh-ch');
 
-  app.use(router);
+  // app.use(router);
 
   await router.isReady();
 

+ 2 - 0
src/shims-vue.d.ts

@@ -3,3 +3,5 @@ declare module '*.vue' {
   const component: DefineComponent<{}, {}, any>;
   export default component;
 }
+
+declare module 'vudio.js';

+ 20 - 29
src/store/modules/users.ts

@@ -1,6 +1,8 @@
 import { defineStore } from 'pinia';
+import { store } from '@/store';
 import { ACCESS_TOKEN, CURRENT_USER, IM_TOKEN } from '@/store/mutation-types';
 import { storage } from '@/utils/storage';
+import { userLogin, getUserInfo } from '@/api/user';
 
 export interface IUserState {
   token: string;
@@ -51,31 +53,17 @@ export const useUserStore = defineStore('user-store', {
     // 登录
     async login(userInfo: any) {
       try {
-        if (userInfo.username !== 'admin' || userInfo.password !== '123456') {
-          return Promise.reject({ msg: '用户名或密码错误' });
-        }
-        // const response = (await login(userInfo)) as any;
-        // const { data, code } = response;
-        // if (code === ResultEnum.SUCCESS) {
+        const { data } = await userLogin(userInfo);
+        const userToken =
+          data.authentication.token_type +
+          ' ' +
+          data.authentication.access_token;
         const ex = 7 * 24 * 60 * 60 * 1000;
-        storage.set(ACCESS_TOKEN, 'bearer test1121121212121212', ex);
-        storage.set(
-          CURRENT_USER,
-          {
-            name: '王天奇',
-            avatar: ''
-          },
-          ex
-        );
-        //   this.setToken(data.token_type + ' ' + data.access_token);
-        //   this.setImToken(data.imToken);
-        //   this.setUserInfo(data);
-        // }
-        this.setToken('bearer test1121121212121212');
-        this.setUserInfo({
-          name: '王天奇',
-          avatar: ''
-        });
+        storage.set(ACCESS_TOKEN, userToken, ex);
+        // storage.get(IM_TOKEN, data.imToken);
+
+        this.setToken(userToken);
+        // this.setImToken(data.imToken);
         return Promise.resolve();
       } catch (e) {
         return Promise.reject(e);
@@ -83,10 +71,9 @@ export const useUserStore = defineStore('user-store', {
     },
 
     // 获取用户信息
-    getInfo() {
+    async getInfo() {
       // const that = this;
       return new Promise((resolve, reject) => {
-        // getUserInfo()
         //   .then(res => {
         //     const result = res.data;
         //     this..setUserInfo(result);
@@ -97,6 +84,9 @@ export const useUserStore = defineStore('user-store', {
         //     reject(error);
         //   });
         try {
+          // getUserInfo().then((res: any) => {
+          //   console.log(res, 'res');
+          // });
           resolve(true);
         } catch {
           reject();
@@ -108,12 +98,13 @@ export const useUserStore = defineStore('user-store', {
     async logout() {
       this.setUserInfo('');
       storage.remove(ACCESS_TOKEN);
+      storage.remove(CURRENT_USER);
       return Promise.resolve('');
     }
   }
 });
 
 // Need to be used outside the setup
-// export function useUserStoreWidthOut() {
-//   return useUserStore(store);
-// }
+export function useUserStoreWidthOut() {
+  return useUserStore(store);
+}

+ 1 - 0
src/types.d.ts

@@ -3,5 +3,6 @@ export {};
 declare global {
   interface Window {
     $loadingBar: any;
+    $message: any;
   }
 }

+ 96 - 0
src/utils/request.ts

@@ -0,0 +1,96 @@
+import { extend } from 'umi-request';
+import cleanDeep from 'clean-deep';
+import { useUserStore } from '../store/modules/users';
+import router from '@/router';
+
+export interface SearchInitParams {
+  rows?: string | number;
+  page?: string | number;
+}
+
+const request = extend({
+  // requestType: 'form',
+  hideLoading: true, // 默认都不显示加载
+  timeout: 20000,
+  timeoutMessage: '请求超时'
+});
+
+request.interceptors.request.use(
+  (url, options: any) => {
+    if (!options.hideLoading) {
+      window.$message.loading('加载中...');
+    }
+
+    const userStore = useUserStore();
+    const Authorization = userStore.getToken || '';
+    const authHeaders: any = {};
+    if (
+      Authorization &&
+      !['/api-oauth/userlogin', '/api-auth/open/sendSms'].includes(url)
+    ) {
+      authHeaders.Authorization = Authorization;
+    }
+
+    return {
+      url,
+      options: {
+        ...options,
+        params: cleanDeep(options.params),
+        data: cleanDeep(options.data),
+        headers: {
+          ...options.headers,
+          ...authHeaders
+        }
+      }
+    };
+  },
+  { global: false }
+);
+
+request.interceptors.response.use(
+  async (res: any) => {
+    const userStore = useUserStore();
+    if (res.status > 299 || res.status < 200) {
+      const msg = '服务器错误,状态码' + res.status;
+      window.$message.error(msg);
+      throw new Error(msg);
+    }
+    const data = await res.clone().json();
+    if (
+      data.code === 401 ||
+      data.code === 4001 ||
+      data.code == 403 ||
+      data.code == 5000
+    ) {
+      userStore.logout(); // 删除登录 - 清除缓存
+      router.replace('/login');
+      location.reload();
+      return;
+    }
+    // if (
+    //   (((data.code < 200 && data.code != 100) ||
+    //     (data.code >= 300 && data.code != 100)) &&
+    //     data.code != 0 &&
+    //     data.code == 5200) ||
+    //   data.code == 5400 ||
+    //   (data.code >= 5000 && data.code < 6000) ||
+    //   data.code == -1
+    // ) {
+    //   const str = res.message || `请求失败code码为${data.code}`;
+    //   window.$message.error(str);
+    //   throw new Error(str);
+    // }
+
+    if (data.code !== 200 && data.errCode !== 0) {
+      const msg = data.msg || data.message || '处理失败,请重试';
+      if (!(data.code === 403 || data.code === 401)) {
+        window.$message.error(msg);
+      }
+      throw new Error(msg);
+    }
+    return res;
+  },
+  { global: false }
+);
+
+export default request;

+ 155 - 0
src/views/attend-class/component/audio-pay copy.tsx

@@ -0,0 +1,155 @@
+import { defineComponent, onMounted, toRefs, reactive } from 'vue';
+import styles from './audio.module.less';
+import WaveSurfer from 'wavesurfer.js';
+import iconplay from '../image/icon-pause.svg';
+import iconpause from '../image/icon-play.svg';
+import { NSlider } from 'naive-ui';
+
+export default defineComponent({
+  name: 'audio-play',
+  props: {
+    item: {
+      type: Object,
+      default: () => {
+        return {};
+      }
+    },
+    isEmtry: {
+      type: Boolean,
+      default: false
+    }
+  },
+  setup(props) {
+    const { item } = toRefs(props);
+    const audioId = 'a' + +Date.now() + Math.floor(Math.random() * 100);
+    const audioForms = reactive({
+      paused: true,
+      currentTimeNum: 0,
+      currentTime: '00:00',
+      duration: '00:00'
+    });
+    const audioDom = new Audio();
+    audioDom.controls = true;
+    audioDom.style.width = '100%';
+    audioDom.className = styles.audio;
+    document.querySelector(`#${audioId}`)?.appendChild(audioDom);
+
+    onMounted(() => {
+      const wavesurfer = WaveSurfer.create({
+        container: document.querySelector(`#${audioId}`) as HTMLElement,
+        waveColor: '#C5C5C5',
+        progressColor: '#02baff',
+        url: item.value.content + '?t=' + +new Date(),
+        cursorWidth: 0,
+        height: 160,
+        normalize: true,
+        // Set a bar width
+        barWidth: 6,
+        // Optionally, specify the spacing between bars
+        barGap: 12,
+        // And the bar radius
+        barRadius: 12,
+        autoScroll: true,
+        /** If autoScroll is enabled, keep the cursor in the center of the waveform during playback */
+        autoCenter: true,
+        hideScrollbar: false,
+        media: audioDom
+      });
+
+      wavesurfer.once('interaction', () => {
+        // wavesurfer.play();
+      });
+      wavesurfer.once('ready', () => {
+        audioForms.paused = audioDom.paused;
+        audioForms.duration = timeFormat(Math.round(audioDom.duration));
+      });
+
+      wavesurfer.on('finish', () => {
+        audioForms.paused = true;
+      });
+    });
+
+    // 切换音频播放
+    const onToggleAudio = (e: MouseEvent) => {
+      e.stopPropagation();
+      if (audioDom.paused) {
+        audioDom.play();
+      } else {
+        audioDom.pause();
+      }
+
+      audioForms.paused = audioDom.paused;
+    };
+
+    // 播放时监听
+    audioDom.addEventListener('timeupdate', () => {
+      audioForms.currentTime = timeFormat(Math.round(audioDom.currentTime));
+      audioForms.currentTimeNum = audioDom.currentTime;
+    });
+
+    // 播放结束时
+
+    // 对时间进行格式化
+    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';
+      }
+    };
+
+    return () => (
+      <div class={styles.audioWrap}>
+        <div class={styles.audioContainer}>
+          <div
+            id={audioId}
+            onClick={(e: MouseEvent) => {
+              e.stopPropagation();
+            }}></div>
+        </div>
+
+        <div
+          class={styles.controls}
+          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
+              v-model:value={audioForms.currentTimeNum}
+              step={0.01}
+              max={audioDom.duration}
+              tooltip={false}
+            />
+          </div>
+        </div>
+      </div>
+    );
+  }
+});

+ 133 - 67
src/views/attend-class/component/audio-pay.tsx

@@ -1,9 +1,10 @@
-import { defineComponent, onMounted, toRefs, reactive } from 'vue';
+import { defineComponent, reactive, ref, nextTick } from 'vue';
 import styles from './audio.module.less';
-import WaveSurfer from 'wavesurfer.js';
 import iconplay from '../image/icon-pause.svg';
 import iconpause from '../image/icon-play.svg';
 import { NSlider } from 'naive-ui';
+import Vudio from 'vudio.js';
+import tickMp3 from '../image/tick.mp3';
 
 export default defineComponent({
   name: 'audio-play',
@@ -19,75 +20,58 @@ export default defineComponent({
       default: false
     }
   },
-  setup(props) {
-    const { item } = toRefs(props);
-    const audioId = 'a' + +Date.now() + Math.floor(Math.random() * 100);
+  emits: ['loadedmetadata', 'togglePlay', 'ended', 'reset'],
+  setup(props, { emit, expose }) {
     const audioForms = reactive({
       paused: true,
       currentTimeNum: 0,
       currentTime: '00:00',
-      duration: '00:00'
-    });
-    const audioDom = new Audio();
-    audioDom.controls = true;
-    audioDom.style.width = '100%';
-    audioDom.className = styles.audio;
-    document.querySelector(`#${audioId}`)?.appendChild(audioDom);
-
-    onMounted(() => {
-      const wavesurfer = WaveSurfer.create({
-        container: document.querySelector(`#${audioId}`) as HTMLElement,
-        waveColor: '#C5C5C5',
-        progressColor: '#02baff',
-        url: item.value.content + '?t=' + +new Date(),
-        cursorWidth: 0,
-        height: 160,
-        normalize: true,
-        // Set a bar width
-        barWidth: 6,
-        // Optionally, specify the spacing between bars
-        barGap: 12,
-        // And the bar radius
-        barRadius: 12,
-        autoScroll: true,
-        /** If autoScroll is enabled, keep the cursor in the center of the waveform during playback */
-        autoCenter: true,
-        hideScrollbar: false,
-        media: audioDom
-      });
-
-      wavesurfer.once('interaction', () => {
-        // wavesurfer.play();
-      });
-      wavesurfer.once('ready', () => {
-        audioForms.paused = audioDom.paused;
-        audioForms.duration = timeFormat(Math.round(audioDom.duration));
-      });
-
-      wavesurfer.on('finish', () => {
-        audioForms.paused = true;
-      });
+      durationNum: 0,
+      duration: '00:00',
+      showBar: true,
+      afterMa3: true
     });
+    const canvas: any = ref();
+    const audio: any = ref();
+    let vudio: any = null;
+    const controlID = 'v' + Date.now() + Math.floor(Math.random() * 100);
 
     // 切换音频播放
-    const onToggleAudio = (e: MouseEvent) => {
-      e.stopPropagation();
-      if (audioDom.paused) {
-        audioDom.play();
+    const onToggleAudio = (e?: MouseEvent) => {
+      e?.stopPropagation();
+      if (audio.value.paused) {
+        onInit(audio.value, canvas.value);
+        audio.value.play();
+        audioForms.afterMa3 = false;
       } else {
-        audioDom.pause();
+        audio.value.pause();
       }
+      audioForms.paused = audio.value.paused;
 
-      audioForms.paused = audioDom.paused;
+      emit('togglePlay', audioForms.paused);
     };
 
-    // 播放时监听
-    audioDom.addEventListener('timeupdate', () => {
-      audioForms.currentTime = timeFormat(Math.round(audioDom.currentTime));
-      audioForms.currentTimeNum = audioDom.currentTime;
-    });
-
-    // 播放结束时
+    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) => {
@@ -100,20 +84,97 @@ export default defineComponent({
       }
     };
 
+    //
+    const toggleHideControl = (isShow: false) => {
+      console.log('isShow', 'toggle');
+      audioForms.showBar = isShow;
+    };
+
+    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();
+    });
+    expose({
+      toggleHideControl
+    });
+
     return () => (
       <div class={styles.audioWrap}>
         <div class={styles.audioContainer}>
-          <div
-            id={audioId}
-            onClick={(e: MouseEvent) => {
-              e.stopPropagation();
-            }}></div>
+          <audio
+            ref={audio}
+            crossorigin="anonymous"
+            src={props.item.content + '?time=1'}
+            onEnded={() => {
+              audioForms.paused = true;
+              emit('ended');
+            }}
+            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;
+
+              if (props.item.autoPlay && audio.value) {
+                audio.value.play();
+              }
+              audio.value.stop = () => {
+                audio.value.pause();
+                audioForms.paused = true;
+                emit('togglePlay', audioForms.paused);
+              };
+              audio.value.onPlay = () => {
+                audio.value.play();
+                audioForms.paused = false;
+                onInit(audio.value, canvas.value);
+                emit('togglePlay', audioForms.paused);
+              };
+
+              emit('loadedmetadata', audio.value);
+            }}></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}
+          class={[
+            styles.controls,
+            audioForms.showBar ? '' : styles.sectionAnimate
+          ]}
           onClick={(e: MouseEvent) => {
             e.stopPropagation();
+            emit('reset');
           }}>
           <div class={styles.actions}>
             <div class={styles.actionWrap}>
@@ -142,10 +203,15 @@ export default defineComponent({
 
           <div class={styles.slider}>
             <NSlider
-              v-model:value={audioForms.currentTimeNum}
+              value={audioForms.currentTimeNum}
               step={0.01}
-              max={audioDom.duration}
+              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>

+ 22 - 0
src/views/attend-class/component/audio.module.less

@@ -21,6 +21,20 @@
     top: 0;
     opacity: 0;
   }
+
+  .tempVudio {
+    position: absolute;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    padding: 0 240px;
+  }
+
+  canvas {
+    width: 100%;
+    height: 100%;
+  }
 }
 
 .controls {
@@ -36,6 +50,7 @@
   transition: all 0.5s;
   display: flex;
   align-items: center;
+  transition: all .5s;
 
   .time {
     display: flex;
@@ -99,4 +114,11 @@
       transition: all .2s;
     }
   }
+}
+
+.sectionAnimate {
+  opacity: 0;
+  pointer-events: none;
+  transform: translateY(100%);
+  transition: all .5s;
 }

+ 31 - 31
src/views/attend-class/component/musicScore.tsx

@@ -1,8 +1,8 @@
 import { defineComponent, ref, watch } from 'vue';
 import { NSkeleton } from 'naive-ui';
 import styles from './musicScore.module.less';
-import iconStart from '../image/icon-start.svg';
-import { listenerMessage, postMessage } from '@/helpers/native-message';
+// import iconStart from '../image/icon-start.svg';
+// import { listenerMessage, postMessage } from '@/helpers/native-message';
 import { usePageVisibility } from '@vant/use';
 import { browser } from '@/helpers/utils';
 
@@ -33,7 +33,7 @@ export default defineComponent({
     const isLoaded = ref(false);
     const renderError = ref(false);
     const renderSuccess = ref(false);
-    const src = `https://test.lexiaoya.cn/orchestra-music-score/?_t=1687590480955&id=11707&modelType=practice&modeType=json&Authorization=bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsib2F1dGgyLXJlc291cmNlIl0sImNsaWVudFR5cGUiOiJCQUNLRU5EIiwidXNlcl9uYW1lIjoiMTgxNjI4NTU4MDAiLCJzY29wZSI6WyJhbGwiXSwidXNlcklkIjoiMTAwMDE0OSIsImF1dGhvcml0aWVzIjpbIjE4MTYyODU1ODAwIl0sImp0aSI6IjY0MzA2NjllLTE5NGItNDk3Yy1hMDQ5LWM4YWUxMGU0NDNiOCIsImNsaWVudF9pZCI6ImptZWR1LWJhY2tlbmQifQ.aeJ0o-lSfx1Ok-YptZuC-AUY6M7k3LK9rr0Bmx7sj81pPt2HDiDqeT2PuriYdJacxWnxboyhdG_lwU0QK-W-vON97c45NQpSEFLVpZ0m1xdIqwllwf20xhyj5YJwdOFUzxf1TNEfGsHZg66J7wEJQBSzlmQwcxmEE5lqLVD8o_3f2SBqnWCj9RqE4air7FUemllMnZiu8HsS-TKtLDaGa_XW8Yb_Zjzzz6r5UcYNI-C1uKPXg18o1dhHBJ8O-Pl0U8WivPRub_opvO2NSn5L9YtPt7Dd50UeSwaIOdMeCGdii1bg__h77Stek1_5IaZLYkoo2gvmUA-xk09TwCQBpA`;
+    const src = `https://dev.kt.colexiu.com/instrument`;
     const checkView = () => {
       fetch(src)
         .then(() => {
@@ -53,34 +53,34 @@ export default defineComponent({
     });
 
     // 去云教练完整版
-    const gotoAccomany = () => {
-      if (isLoading.value) return;
-      if (!browserInfo.ios) {
-        isLoading.value = true;
-      }
-      // const parmas = qs.stringify({
-      //   id: props.music.content
-      // });
-      // let src = `${location.origin}/orchestra-music-score/?` + parmas
-      const src = `https://test.lexiaoya.cn/orchestra-music-score/?_t=1687590480955&id=11707&modelType=practice&modeType=json&Authorization=bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsib2F1dGgyLXJlc291cmNlIl0sImNsaWVudFR5cGUiOiJCQUNLRU5EIiwidXNlcl9uYW1lIjoiMTgxNjI4NTU4MDAiLCJzY29wZSI6WyJhbGwiXSwidXNlcklkIjoiMTAwMDE0OSIsImF1dGhvcml0aWVzIjpbIjE4MTYyODU1ODAwIl0sImp0aSI6IjY0MzA2NjllLTE5NGItNDk3Yy1hMDQ5LWM4YWUxMGU0NDNiOCIsImNsaWVudF9pZCI6ImptZWR1LWJhY2tlbmQifQ.aeJ0o-lSfx1Ok-YptZuC-AUY6M7k3LK9rr0Bmx7sj81pPt2HDiDqeT2PuriYdJacxWnxboyhdG_lwU0QK-W-vON97c45NQpSEFLVpZ0m1xdIqwllwf20xhyj5YJwdOFUzxf1TNEfGsHZg66J7wEJQBSzlmQwcxmEE5lqLVD8o_3f2SBqnWCj9RqE4air7FUemllMnZiu8HsS-TKtLDaGa_XW8Yb_Zjzzz6r5UcYNI-C1uKPXg18o1dhHBJ8O-Pl0U8WivPRub_opvO2NSn5L9YtPt7Dd50UeSwaIOdMeCGdii1bg__h77Stek1_5IaZLYkoo2gvmUA-xk09TwCQBpA`;
-      postMessage(
-        {
-          api: 'openAccompanyWebView',
-          content: {
-            url: src,
-            orientation: 0,
-            isHideTitle: true,
-            statusBarTextColor: false,
-            isOpenLight: true
-          }
-        },
-        () => {
-          if (browserInfo.ios) {
-            isLoading.value = true;
-          }
-        }
-      );
-    };
+    // const gotoAccomany = () => {
+    //   if (isLoading.value) return;
+    //   if (!browserInfo.ios) {
+    //     isLoading.value = true;
+    //   }
+    //   // const parmas = qs.stringify({
+    //   //   id: props.music.content
+    //   // });
+    //   // let src = `${location.origin}/orchestra-music-score/?` + parmas
+    //   const src = `https://test.lexiaoya.cn/orchestra-music-score/?_t=1687590480955&id=11707&modelType=practice&modeType=json&Authorization=bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsib2F1dGgyLXJlc291cmNlIl0sImNsaWVudFR5cGUiOiJCQUNLRU5EIiwidXNlcl9uYW1lIjoiMTgxNjI4NTU4MDAiLCJzY29wZSI6WyJhbGwiXSwidXNlcklkIjoiMTAwMDE0OSIsImF1dGhvcml0aWVzIjpbIjE4MTYyODU1ODAwIl0sImp0aSI6IjY0MzA2NjllLTE5NGItNDk3Yy1hMDQ5LWM4YWUxMGU0NDNiOCIsImNsaWVudF9pZCI6ImptZWR1LWJhY2tlbmQifQ.aeJ0o-lSfx1Ok-YptZuC-AUY6M7k3LK9rr0Bmx7sj81pPt2HDiDqeT2PuriYdJacxWnxboyhdG_lwU0QK-W-vON97c45NQpSEFLVpZ0m1xdIqwllwf20xhyj5YJwdOFUzxf1TNEfGsHZg66J7wEJQBSzlmQwcxmEE5lqLVD8o_3f2SBqnWCj9RqE4air7FUemllMnZiu8HsS-TKtLDaGa_XW8Yb_Zjzzz6r5UcYNI-C1uKPXg18o1dhHBJ8O-Pl0U8WivPRub_opvO2NSn5L9YtPt7Dd50UeSwaIOdMeCGdii1bg__h77Stek1_5IaZLYkoo2gvmUA-xk09TwCQBpA`;
+    //   postMessage(
+    //     {
+    //       api: 'openAccompanyWebView',
+    //       content: {
+    //         url: src,
+    //         orientation: 0,
+    //         isHideTitle: true,
+    //         statusBarTextColor: false,
+    //         isOpenLight: true
+    //       }
+    //     },
+    //     () => {
+    //       if (browserInfo.ios) {
+    //         isLoading.value = true;
+    //       }
+    //     }
+    //   );
+    // };
 
     return () => (
       <div class={styles.musicScore}>

+ 1 - 1
src/views/attend-class/component/tools/pen.tsx

@@ -18,7 +18,7 @@ export default defineComponent({
     const firstRender = ref(true);
     const src = /(localhost|192)/.test(location.host)
       ? 'https://test.lexiaoya.cn/whiteboard-noCollab'
-      : `${location.origin}/whiteboard-noCollab`;
+      : `https://test.lexiaoya.cn/whiteboard-noCollab`;
 
     return () => (
       <div

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