Forráskód Böngészése

Merge branch 'master' into iteration-login

lex 2 éve
szülő
commit
26de043cb7
93 módosított fájl, 1797 hozzáadás és 9162 törlés
  1. 1 1
      dist/assets/Scrollbar-ddd13731.js
  2. 1 1
      dist/assets/Slider-9d2027bb.js
  3. 0 0
      dist/assets/data-0dab0feb.js
  4. 0 0
      dist/assets/data-c15517db.js
  5. BIN
      dist/assets/dragingBoxIcon-654e13db.png
  6. BIN
      dist/assets/dragingBoxIcon-f4149aa2.png
  7. 0 0
      dist/assets/e-delete-50e50a8c.svg
  8. 0 0
      dist/assets/e-edit-27c28498.svg
  9. 0 0
      dist/assets/e-tag-41ad6d7f.svg
  10. 0 0
      dist/assets/icon-add-540d8f63.svg
  11. 0 0
      dist/assets/icon-assignHomework-16a80795.svg
  12. 0 0
      dist/assets/icon-down-c5693186.svg
  13. 0 0
      dist/assets/icon-menu-74c5e633.svg
  14. 0 0
      dist/assets/icon-pause-5efb540a.svg
  15. 0 0
      dist/assets/icon-pause-70c10a79.svg
  16. 0 0
      dist/assets/icon-play-f01e3616.svg
  17. 0 0
      dist/assets/icon-replay-06435dc9.svg
  18. 0 0
      dist/assets/icon-up-c2aeb981.svg
  19. 0 0
      dist/assets/icon_arrow-653dc704.svg
  20. 0 0
      dist/assets/icon_back-8a62341e.svg
  21. 0 0
      dist/assets/icon_default-486fe3d3.svg
  22. 0 0
      dist/assets/icon_goXiaoku-af3839bc.svg
  23. 0 0
      dist/assets/icon_next-7ede96c3.svg
  24. 0 0
      dist/assets/icon_pause-b55f26df.svg
  25. 0 0
      dist/assets/icon_play-e55ce8d9.svg
  26. 0 0
      dist/assets/icon_pre-f15675ed.svg
  27. 0 0
      dist/assets/icon_search-cda46378.svg
  28. 0 0
      dist/assets/icon_searchActive-80477bdc.svg
  29. 0 0
      dist/assets/icon_separator-36fe21d8.svg
  30. 1 0
      dist/assets/index-0501053e.js
  31. 0 0
      dist/assets/index-09fcfd1b.js
  32. 0 0
      dist/assets/index-0c86b852.js
  33. 0 0
      dist/assets/index-0fd78c07.css
  34. 1 1
      dist/assets/index-1300b69b.js
  35. 1 1
      dist/assets/index-169a3253.js
  36. 0 0
      dist/assets/index-2087c156.js
  37. 0 0
      dist/assets/index-3433d78c.css
  38. 0 0
      dist/assets/index-3e02f95e.css
  39. 0 0
      dist/assets/index-4655f601.js
  40. 1 1
      dist/assets/index-4906bab0.js
  41. 0 1
      dist/assets/index-5bdd7450.js
  42. 0 0
      dist/assets/index-65c05462.js
  43. 0 0
      dist/assets/index-6cc62516.js
  44. 0 0
      dist/assets/index-75a0b25a.css
  45. 0 0
      dist/assets/index-8578de3b.js
  46. 0 0
      dist/assets/index-85f52e15.css
  47. 0 0
      dist/assets/index-8cdf68fe.js
  48. 1 1
      dist/assets/index-90cf30e0.js
  49. 0 0
      dist/assets/index-9f374edd.css
  50. 0 0
      dist/assets/index-a3913260.js
  51. 0 0
      dist/assets/index-a429a432.js
  52. 0 0
      dist/assets/index-a9b9f7b0.js
  53. 0 0
      dist/assets/index-ace660bb.css
  54. 1 1
      dist/assets/index-beeda43a.js
  55. 0 0
      dist/assets/index-c90d1a20.js
  56. 0 0
      dist/assets/index-d1be2782.js
  57. 0 0
      dist/assets/index-dc433865.js
  58. 0 0
      dist/assets/index-dc48940a.js
  59. 0 0
      dist/assets/index-dea5db2b.js
  60. 0 0
      dist/assets/index-e14ef5b5.css
  61. 0 0
      dist/assets/index-ee97bf37.js
  62. 0 0
      dist/assets/index-ef1f6d7b.css
  63. 0 0
      dist/assets/index-f09ccedc.js
  64. 0 0
      dist/assets/index-fb526bca.js
  65. 0 0
      dist/assets/p-delete-f451a434.svg
  66. 0 0
      dist/assets/p-edit-4f706e0f.svg
  67. 0 0
      dist/assets/p-tag-c1dd923a.svg
  68. BIN
      dist/assets/toolbox-d14e974b.png
  69. BIN
      dist/assets/toolbox-d5807fe8.png
  70. 2 2
      dist/index.html
  71. 1 8920
      package-lock.json
  72. 3 0
      package.json
  73. 1027 127
      pnpm-lock.yaml
  74. BIN
      src/components/layout/images/dragingBoxIcon.png
  75. BIN
      src/components/layout/images/radiusIcon.png
  76. BIN
      src/components/layout/images/toolbox.png
  77. 47 24
      src/components/layout/index.module.less
  78. 3 3
      src/components/layout/layoutTop.tsx
  79. 4 4
      src/hooks/event/useEventListener.ts
  80. 35 3
      src/styles/index.less
  81. 1 1
      src/utils/index.ts
  82. 8 8
      src/views/attend-class/index.tsx
  83. 6 2
      src/views/classList/index.tsx
  84. 286 0
      src/views/home/components/practiceData.tsx
  85. 124 0
      src/views/home/components/practiceRanking.tsx
  86. 39 5
      src/views/home/components/study.tsx
  87. 145 3
      src/views/home/components/trainData.tsx
  88. 7 5
      src/views/home/index.module.less
  89. 16 19
      src/views/home/index.tsx
  90. 12 5
      src/views/natural-resources/index.module.less
  91. 9 3
      src/views/natural-resources/search-group-resources.tsx
  92. 1 9
      src/views/prepare-lessons/model/resource-search-group/index.tsx
  93. 13 11
      src/views/prepare-lessons/model/select-music/index.module.less

+ 1 - 1
dist/assets/Scrollbar-b4233a4b.js → dist/assets/Scrollbar-ddd13731.js

@@ -1 +1 @@
-import{a9 as l,d as e,r as a,ac as n,aq as t}from"./index-4655f601.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-65c05462.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};

+ 1 - 1
dist/assets/Slider-102fa947.js → dist/assets/Slider-9d2027bb.js

@@ -1,4 +1,4 @@
-import{ar as We,r as x,as as Ge,at as M,a6 as n,au as m,a7 as j,av as ue,aw as Je,ax as qe,d as Qe,a8 as Ze,a9 as ge,ay as eo,E as w,az as oo,aA as ao,w as he,aB as to,ab as ve,aC as no,aD as Z,ac as v,aE as ro,aF as lo,aG as io,aH as so,T as co,aI as U,aJ as O,M as Q,aK as fe}from"./index-4655f601.js";const uo={railHeight:"4px",railWidthVertical:"4px",handleSize:"18px",dotHeight:"8px",dotWidth:"8px",dotBorderRadius:"4px"},ho=t=>{const l="rgba(0, 0, 0, .85)",y="0 2px 8px 0 rgba(0, 0, 0, 0.12)",{railColor:f,primaryColor:s,baseColor:d,cardColor:z,modalColor:R,popoverColor:_,borderRadius:L,fontSize:B,opacityDisabled:D}=t;return Object.assign(Object.assign({},uo),{fontSize:B,markFontSize:B,railColor:f,railColorHover:f,fillColor:s,fillColorHover:s,opacityDisabled:D,handleColor:"#FFF",dotColor:z,dotColorModal:R,dotColorPopover:_,handleBoxShadow:"0 1px 4px 0 rgba(0, 0, 0, 0.3), inset 0 0 1px 0 rgba(0, 0, 0, 0.05)",handleBoxShadowHover:"0 1px 4px 0 rgba(0, 0, 0, 0.3), inset 0 0 1px 0 rgba(0, 0, 0, 0.05)",handleBoxShadowActive:"0 1px 4px 0 rgba(0, 0, 0, 0.3), inset 0 0 1px 0 rgba(0, 0, 0, 0.05)",handleBoxShadowFocus:"0 1px 4px 0 rgba(0, 0, 0, 0.3), inset 0 0 1px 0 rgba(0, 0, 0, 0.05)",indicatorColor:l,indicatorBoxShadow:y,indicatorTextColor:d,indicatorBorderRadius:L,dotBorder:`2px solid ${f}`,dotBorderActive:`2px solid ${s}`,dotBoxShadow:""})},vo={name:"Slider",common:We,self:ho},fo=vo;function me(t){return window.TouchEvent&&t instanceof window.TouchEvent}function be(){const t=x(new Map),l=y=>f=>{t.value.set(y,f)};return Ge(()=>{t.value.clear()}),[t,l]}const mo=M([n("slider",`
+import{ar as We,r as x,as as Ge,at as M,a6 as n,au as m,a7 as j,av as ue,aw as Je,ax as qe,d as Qe,a8 as Ze,a9 as ge,ay as eo,E as w,az as oo,aA as ao,w as he,aB as to,ab as ve,aC as no,aD as Z,ac as v,aE as ro,aF as lo,aG as io,aH as so,T as co,aI as U,aJ as O,M as Q,aK as fe}from"./index-65c05462.js";const uo={railHeight:"4px",railWidthVertical:"4px",handleSize:"18px",dotHeight:"8px",dotWidth:"8px",dotBorderRadius:"4px"},ho=t=>{const l="rgba(0, 0, 0, .85)",y="0 2px 8px 0 rgba(0, 0, 0, 0.12)",{railColor:f,primaryColor:s,baseColor:d,cardColor:z,modalColor:R,popoverColor:_,borderRadius:L,fontSize:B,opacityDisabled:D}=t;return Object.assign(Object.assign({},uo),{fontSize:B,markFontSize:B,railColor:f,railColorHover:f,fillColor:s,fillColorHover:s,opacityDisabled:D,handleColor:"#FFF",dotColor:z,dotColorModal:R,dotColorPopover:_,handleBoxShadow:"0 1px 4px 0 rgba(0, 0, 0, 0.3), inset 0 0 1px 0 rgba(0, 0, 0, 0.05)",handleBoxShadowHover:"0 1px 4px 0 rgba(0, 0, 0, 0.3), inset 0 0 1px 0 rgba(0, 0, 0, 0.05)",handleBoxShadowActive:"0 1px 4px 0 rgba(0, 0, 0, 0.3), inset 0 0 1px 0 rgba(0, 0, 0, 0.05)",handleBoxShadowFocus:"0 1px 4px 0 rgba(0, 0, 0, 0.3), inset 0 0 1px 0 rgba(0, 0, 0, 0.05)",indicatorColor:l,indicatorBoxShadow:y,indicatorTextColor:d,indicatorBorderRadius:L,dotBorder:`2px solid ${f}`,dotBorderActive:`2px solid ${s}`,dotBoxShadow:""})},vo={name:"Slider",common:We,self:ho},fo=vo;function me(t){return window.TouchEvent&&t instanceof window.TouchEvent}function be(){const t=x(new Map),l=y=>f=>{t.value.set(y,f)};return Ge(()=>{t.value.clear()}),[t,l]}const mo=M([n("slider",`
  display: block;
  padding: calc((var(--n-handle-size) - var(--n-rail-height)) / 2) 0;
  position: relative;

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/data-0dab0feb.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/data-c15517db.js


BIN
dist/assets/dragingBoxIcon-654e13db.png


BIN
dist/assets/dragingBoxIcon-f4149aa2.png


+ 0 - 0
dist/assets/e-delete-42180152.svg → dist/assets/e-delete-50e50a8c.svg


+ 0 - 0
dist/assets/e-edit-a0caffbb.svg → dist/assets/e-edit-27c28498.svg


+ 0 - 0
dist/assets/e-tag-e90db03d.svg → dist/assets/e-tag-41ad6d7f.svg


+ 0 - 0
dist/assets/icon-add-e1bd484b.svg → dist/assets/icon-add-540d8f63.svg


+ 0 - 0
dist/assets/icon-assignHomework-b4738536.svg → dist/assets/icon-assignHomework-16a80795.svg


+ 0 - 0
dist/assets/icon-down-372e6a8f.svg → dist/assets/icon-down-c5693186.svg


+ 0 - 0
dist/assets/icon-menu-c82b47a8.svg → dist/assets/icon-menu-74c5e633.svg


+ 0 - 0
dist/assets/icon-pause-259f3cb5.svg → dist/assets/icon-pause-5efb540a.svg


+ 0 - 0
dist/assets/icon-pause-a04ae1da.svg → dist/assets/icon-pause-70c10a79.svg


+ 0 - 0
dist/assets/icon-play-f09d7ebf.svg → dist/assets/icon-play-f01e3616.svg


+ 0 - 0
dist/assets/icon-replay-2c102172.svg → dist/assets/icon-replay-06435dc9.svg


+ 0 - 0
dist/assets/icon-up-decb9226.svg → dist/assets/icon-up-c2aeb981.svg


+ 0 - 0
dist/assets/icon_arrow-b4fee1f7.svg → dist/assets/icon_arrow-653dc704.svg


+ 0 - 0
dist/assets/icon_back-8fc3ec5e.svg → dist/assets/icon_back-8a62341e.svg


+ 0 - 0
dist/assets/icon_default-c2fa566e.svg → dist/assets/icon_default-486fe3d3.svg


+ 0 - 0
dist/assets/icon_goXiaoku-c05e1880.svg → dist/assets/icon_goXiaoku-af3839bc.svg


+ 0 - 0
dist/assets/icon_next-7dc20456.svg → dist/assets/icon_next-7ede96c3.svg


+ 0 - 0
dist/assets/icon_pause-6dbc64e3.svg → dist/assets/icon_pause-b55f26df.svg


+ 0 - 0
dist/assets/icon_play-43b52923.svg → dist/assets/icon_play-e55ce8d9.svg


+ 0 - 0
dist/assets/icon_pre-20929b0c.svg → dist/assets/icon_pre-f15675ed.svg


+ 0 - 0
dist/assets/icon_search-8a6ade17.svg → dist/assets/icon_search-cda46378.svg


+ 0 - 0
dist/assets/icon_searchActive-bf7fd0c6.svg → dist/assets/icon_searchActive-80477bdc.svg


+ 0 - 0
dist/assets/icon_separator-7cca8458.svg → dist/assets/icon_separator-36fe21d8.svg


+ 1 - 0
dist/assets/index-0501053e.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-65c05462.js";const d="_TheSearch_u8dnx_1",m="_active_u8dnx_16",c={TheSearch:d,active:m,default:"_default_u8dnx_22"},p=""+new URL("icon_search-cda46378.svg",import.meta.url).href,f=""+new URL("icon_searchActive-80477bdc.svg",import.meta.url).href,_=n({name:"TheSearch",props:{round:{type:Boolean,default:!1}},emits:["search"],setup(t,{emit:s}){const a=o({value:""});return()=>e(l,{class:c.TheSearch,round:t.round,placeholder:"请输入搜索关键词",modelValue:a.value,"onUpdate:modelValue":r=>a.value=r},{prefix:()=>e(u,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};

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-09fcfd1b.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-0c86b852.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-0fd78c07.css


+ 1 - 1
dist/assets/index-6579893b.js → dist/assets/index-1300b69b.js

@@ -1 +1 @@
-import{d as t,f as e,aM as a,j as p,k as n}from"./index-4655f601.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-65c05462.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};

+ 1 - 1
dist/assets/index-4307530c.js → dist/assets/index-169a3253.js

@@ -1 +1 @@
-import{d as u,r as o,e as p,f as a}from"./index-4655f601.js";const m="_wrap_1mptt_1",f="_notice_1mptt_7",r={wrap:m,notice:f},v=u({name:"TheNoticeBar",props:{text:{type:String,default:""}},setup(s){const e=o(),n=o(),t=p({isActive:!1,wrapWidth:0,contentWidth:0,contentStyle:{transitionDuration:"0s",transform:"translateX(0px)"},time:null}),c=()=>{t.isActive||!n.value||!e.value||(t.isActive=!0,t.contentWidth=n.value.getBoundingClientRect().width,t.wrapWidth=e.value.getBoundingClientRect().width,i())},i=()=>{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)`,requestAnimationFrame(()=>{i()})},5*1e3)},l=()=>{clearTimeout(t.time),t.isActive=!1,t.contentStyle.transitionDuration="0s",t.contentStyle.transform="translateX(0px)",t.time=null};return()=>a("div",{ref:e,class:r.wrap,onMouseenter:()=>c(),onMouseleave:()=>l()},[a("div",{ref:n,style:t.contentStyle,class:r.notice},[s.text])])}});export{v as T};
+import{d as u,r as o,e as p,f as a}from"./index-65c05462.js";const m="_wrap_1mptt_1",f="_notice_1mptt_7",r={wrap:m,notice:f},v=u({name:"TheNoticeBar",props:{text:{type:String,default:""}},setup(s){const e=o(),n=o(),t=p({isActive:!1,wrapWidth:0,contentWidth:0,contentStyle:{transitionDuration:"0s",transform:"translateX(0px)"},time:null}),c=()=>{t.isActive||!n.value||!e.value||(t.isActive=!0,t.contentWidth=n.value.getBoundingClientRect().width,t.wrapWidth=e.value.getBoundingClientRect().width,i())},i=()=>{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)`,requestAnimationFrame(()=>{i()})},5*1e3)},l=()=>{clearTimeout(t.time),t.isActive=!1,t.contentStyle.transitionDuration="0s",t.contentStyle.transform="translateX(0px)",t.time=null};return()=>a("div",{ref:e,class:r.wrap,onMouseenter:()=>c(),onMouseleave:()=>l()},[a("div",{ref:n,style:t.contentStyle,class:r.notice},[s.text])])}});export{v as T};

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-2087c156.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-3433d78c.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-3e02f95e.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-4655f601.js


+ 1 - 1
dist/assets/index-2d04bd4e.js → dist/assets/index-4906bab0.js

@@ -1 +1 @@
-import{X as y,Y as F,S as P,Z as C,J as S}from"./index-4655f601.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-65c05462.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};

+ 0 - 1
dist/assets/index-5bdd7450.js

@@ -1 +0,0 @@
-import{d as n,e as o,f as e,h as l,F as u,j as h,k as i}from"./index-4655f601.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};

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-65c05462.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-6cc62516.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-75a0b25a.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-8578de3b.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-85f52e15.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-8cdf68fe.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 1
dist/assets/index-90cf30e0.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-9f374edd.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-a3913260.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-a429a432.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-a9b9f7b0.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-ace660bb.css


+ 1 - 1
dist/assets/index-8056670b.js → dist/assets/index-beeda43a.js

@@ -1 +1 @@
-import{d as l,f as e,h as u,I as o,r,Q as I,o as c,F as p}from"./index-4655f601.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-65c05462.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};

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-c90d1a20.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-d1be2782.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-dc433865.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-dc48940a.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-dea5db2b.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-e14ef5b5.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-ee97bf37.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-ef1f6d7b.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-f09ccedc.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/assets/index-fb526bca.js


+ 0 - 0
dist/assets/p-delete-0e4c7354.svg → dist/assets/p-delete-f451a434.svg


+ 0 - 0
dist/assets/p-edit-ecf6e1a4.svg → dist/assets/p-edit-4f706e0f.svg


+ 0 - 0
dist/assets/p-tag-db7b6399.svg → dist/assets/p-tag-c1dd923a.svg


BIN
dist/assets/toolbox-d14e974b.png


BIN
dist/assets/toolbox-d5807fe8.png


+ 2 - 2
dist/index.html

@@ -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-4655f601.js"></script>
-  <link rel="stylesheet" href="./assets/index-eb0156b8.css">
+  <script type="module" crossorigin src="./assets/index-65c05462.js"></script>
+  <link rel="stylesheet" href="./assets/index-9f374edd.css">
 </head>
 
 <body>

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 8920
package-lock.json


+ 3 - 0
package.json

@@ -24,9 +24,12 @@
   "dependencies": {
     "@vant/use": "^1.5.2",
     "@vueuse/core": "^10.2.0",
+    "animate.css": "^4.1.1",
     "clean-deep": "^3.4.0",
     "dayjs": "^1.11.7",
     "echarts": "^5.4.2",
+    "lodash": "^4.17.21",
+    "lodash-es": "^4.17.21",
     "moveable": "^0.49.0",
     "numeral": "^2.0.6",
     "pinia": "^2.1.4",

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1027 - 127
pnpm-lock.yaml


BIN
src/components/layout/images/dragingBoxIcon.png


BIN
src/components/layout/images/radiusIcon.png


BIN
src/components/layout/images/toolbox.png


+ 47 - 24
src/components/layout/index.module.less

@@ -57,13 +57,13 @@
 
   .radiusIcon {
     img {
-      width: 24px;
-      height: 139px;
+      width: 26px;
+      height: 137px;
     }
 
     position: absolute;
-    right: -9px;
-    top: -26px;
+    right: -10px;
+    top: -29px;
   }
 
   p {
@@ -127,31 +127,54 @@
       display: flex;
       flex-direction: row;
       align-items: center;
-
       .messageBadge {
         margin-right: 24px;
         :global {
-          // .n-badge-sup {
-          //   height: 22px;
-          //   padding: 0 5px;
-          //   border: 1px solid #fff;
-          //   min-width: 22px;
-          //   border-radius: 11px;
-          //   text-align: center;
-          //   display: flex;
-          //   flex-direction: column;
-          //   align-items: center;
-          //   line-height: 20px;
-          // }
-          // .n-base-slot-machine-current-number__inner {
-          //   top: 1px;
-          // }
+          .n-badge-sup {
+            left: 20px;
+            -webkit-animation: TadaNum 1s 2s both infinite !important;
+            -moz-animation: TadaNum 1s 2s both infinite !important;
+            -ms-animation: TadaNum 1s 2s both infinite !important;
+            animation: TadaNum 1s 2s both infinite !important;
+          }
         }
         .messageIcon {
+          -webkit-animation: Tada 1s 2s both infinite;
+          -moz-animation: Tada 1s 2s both infinite;
+          -ms-animation: Tada 1s 2s both infinite;
+          animation: Tada 1s 2s both infinite;
           width: 32px;
           height: 32px;
         }
       }
+      @keyframes Tada {
+        0% {
+          transform: scale(1);
+          transform: scale(1);
+        }
+        10%,
+        20% {
+          transform: scale(0.9) rotate(-3deg);
+          transform: scale(0.9) rotate(-3deg);
+        }
+        30%,
+        50%,
+        70%,
+        90% {
+          transform: scale(1.1) rotate(3deg);
+          transform: scale(1.1) rotate(3deg);
+        }
+        40%,
+        60%,
+        80% {
+          transform: scale(1.1) rotate(-3deg);
+          transform: scale(1.1) rotate(-3deg);
+        }
+        100% {
+          transform: scale(1) rotate(0);
+          transform: scale(1) rotate(0);
+        }
+      }
 
       .line {
         width: 1px;
@@ -283,8 +306,8 @@
 }
 
 .toolboxImg {
-  width: 60px;
-  height: 68px;
+  width: 138px;
+  height: 138px;
   position: absolute;
   right: 32px;
   bottom: 84px;
@@ -292,8 +315,8 @@
   z-index: 1000;
 }
 .isDragIng {
-  width: 115px;
-  height: 115px;
+  width: 138px;
+  height: 138px;
 }
 
 :global {

+ 3 - 3
src/components/layout/layoutTop.tsx

@@ -10,7 +10,7 @@ import schoolDot from './images/schoolDot.png';
 import personIcon from './images/personIcon.png';
 import { useUserStore } from '@/store/modules/users';
 import { useRouter } from 'vue-router';
-
+import 'animate.css';
 export default defineComponent({
   name: 'layoutTop',
   setup() {
@@ -26,13 +26,13 @@ export default defineComponent({
           </div>
           <div class={styles.layoutRight}>
             <NBadge
-              value={999}
+              value={8}
               max={99}
               class={styles.messageBadge}
               color={'#FF1036'}>
               <NImage
+                class={[styles.messageIcon]}
                 preview-disabled
-                class={styles.messageIcon}
                 src={messageIcon}></NImage>
             </NBadge>
             <div class={styles.line}></div>

+ 4 - 4
src/hooks/event/useEventListener.ts

@@ -29,7 +29,7 @@ export function useEventListener({
   const isAddRef = ref(false);
 
   if (el) {
-    const element: Ref<Element> = ref(el as Element);
+    const element = ref<Element>(el);
 
     // eslint-disable-next-line prettier/prettier
     const handler = isDebounce
@@ -48,9 +48,9 @@ export function useEventListener({
       element,
       (v, _ov, cleanUp) => {
         if (v) {
-          !unref(isAddRef) && addEventListener(v);
+          !unref(isAddRef) && addEventListener(v as unknown as Element);
           cleanUp(() => {
-            autoRemove && removeEventListener(v);
+            autoRemove && removeEventListener(v as unknown as Element);
           });
         }
       },
@@ -58,7 +58,7 @@ export function useEventListener({
     );
 
     remove = () => {
-      removeEventListener(element.value);
+      removeEventListener(element.value as unknown as Element);
       removeWatch();
     };
   }

+ 35 - 3
src/styles/index.less

@@ -130,7 +130,11 @@ body {
     padding-left: 20px;
 
     color: #333333;
-    font-size: 15px;
+    font-size: 14px;
+    .n-button__content {
+      font-size: 14px;
+      color: #1677ff;
+    }
   }
 }
 
@@ -209,7 +213,6 @@ body {
 
 :root {
   --product-color: #3044ca;
-  --n-text-color: #1677ff !important;
 }
 
 // .n-button--primary-type {
@@ -237,4 +240,33 @@ body {
   /* Internet Explorer 10+ */
 
   color: rgba(0, 0, 0, 0.4);
-}
+}
+
+@keyframes TadaNum {
+  0% {
+    transform: rotate(0);
+    transform: rotate(0);
+  }
+  10%,
+  20% {
+    transform: rotate(-6deg);
+    transform: rotate(-6deg);
+  }
+  30%,
+  50%,
+  70%,
+  90% {
+    transform: rotate(6deg);
+    transform: rotate(6deg);
+  }
+  40%,
+  60%,
+  80% {
+    transform: rotate(-6deg);
+    transform: rotate(-6deg);
+  }
+  100% {
+    transform: rotate(0);
+    transform: rotate(0);
+  }
+}

+ 1 - 1
src/utils/index.ts

@@ -3,7 +3,7 @@ import type { App, Plugin } from 'vue';
 import { NIcon, NTag } from 'naive-ui';
 import { PageEnum } from '@/enums/pageEnum';
 import { isObject } from './is/index';
-import { cloneDeep } from 'lodash-es';
+import { cloneDeep } from 'lodash';
 /**
  * render 图标
  * */

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

@@ -722,23 +722,23 @@ export default defineComponent({
             class={styles.displayBtn}
             onClick={() =>
               openStudyTool({
-                type: 'whiteboard',
-                icon: iconWhiteboard,
-                name: '白板'
+                type: 'pen',
+                icon: iconNote,
+                name: '批注'
               })
             }>
-            <img src={iconWhiteboard} />
+            <img src={iconNote} />
           </div>
           <div
             class={styles.displayBtn}
             onClick={() =>
               openStudyTool({
-                type: 'pen',
-                icon: iconNote,
-                name: '批注'
+                type: 'whiteboard',
+                icon: iconWhiteboard,
+                name: '白板'
               })
             }>
-            <img src={iconNote} />
+            <img src={iconWhiteboard} />
           </div>
         </div>
 

+ 6 - 2
src/views/classList/index.tsx

@@ -168,10 +168,14 @@ export default defineComponent({
 
             <NFormItem>
               <NSpace justify="end">
-                <NButton type="primary" ghost class="resetBtn" onClick={search}>
+                <NButton type="primary" class="searchBtn" onClick={search}>
                   搜索
                 </NButton>
-                <NButton type="primary" class="searchBtn" onClick={onReset}>
+                <NButton
+                  type="primary"
+                  ghost
+                  class="resetBtn"
+                  onClick={onReset}>
                   重置
                 </NButton>
               </NSpace>

+ 286 - 0
src/views/home/components/practiceData.tsx

@@ -0,0 +1,286 @@
+import { Ref, defineComponent, reactive, ref } from 'vue';
+import styles from '../index.module.less';
+import { NButton, NDataTable, NNumberAnimation } from 'naive-ui';
+import numeral from 'numeral';
+import { useECharts } from '@/hooks/web/useECharts';
+import Pagination from '/src/components/pagination';
+export default defineComponent({
+  name: 'home-practiceData',
+  setup() {
+    const chartRef = ref<HTMLDivElement | null>(null);
+    const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>);
+    const practiceFlag = ref(true);
+    const payForm = reactive({
+      height: '360px',
+      width: '100%',
+      studentNum: 0,
+      paymentAmount: 0,
+      dateList: [
+        '2022-10-10',
+        '2022-10-11',
+        '2022-10-12',
+        '2022-10-13',
+        '2022-10-14',
+        '2022-10-15',
+        '2022-10-16'
+      ],
+      timeList: [90, 128, 242, 120, 186, 77, 148]
+    });
+
+    const state = reactive({
+      loading: false,
+      pagination: {
+        page: 1,
+        rows: 10,
+        pageTotal: 4
+      },
+      tableList: [
+        {
+          teacherName: '孙忆枫',
+          createTime: '2023-06-27',
+          endTime: '2023-06-30',
+          status: 'ing',
+          studentNum: 100,
+          submitNum: 100,
+          quantityNum: 60,
+          submitRate: 100,
+          quantityRate: 60
+        },
+        {
+          teacherName: '孙忆枫',
+          createTime: '2023-06-27',
+          endTime: '2023-06-30',
+          status: 'ing',
+          studentNum: 100,
+          submitNum: 100,
+          quantityNum: 60,
+          submitRate: 100,
+          quantityRate: 60
+        },
+        {
+          teacherName: '孙忆枫',
+          createTime: '2023-06-27',
+          endTime: '2023-06-30',
+          status: 'ing',
+          studentNum: 100,
+          submitNum: 100,
+          quantityNum: 60,
+          submitRate: 100,
+          quantityRate: 60
+        },
+        {
+          teacherName: '孙忆枫',
+          createTime: '2023-06-25',
+          endTime: '2023-06-26',
+          status: 'end',
+          studentNum: 100,
+          submitNum: 100,
+          quantityNum: 60,
+          submitRate: 100,
+          quantityRate: 60
+        }
+      ] as any,
+      goCourseVisiable: false
+    });
+    const columns = () => {
+      return [
+        {
+          title: '日期',
+          key: 'createTime'
+        },
+        {
+          title: '练习人数',
+          key: 'quantityNum',
+          render(row: any) {
+            return <span>{row.quantityNum}人</span>;
+          }
+        },
+
+        {
+          title: '平均练习时长(分钟)',
+          key: 'submitNum',
+          render(row: any) {
+            return <span>{row.submitNum}分钟</span>;
+          }
+        }
+      ];
+    };
+    const getList = () => {
+      console.log('1');
+    };
+    const setChart = () => {
+      setOptions({
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: {
+            type: 'none'
+          }
+        },
+        legend: {
+          show: false,
+          selected: {
+            //在这里设置默认展示就ok了
+            '练习时长(分钟)': practiceFlag.value
+          }
+        },
+        xAxis: {
+          type: 'category',
+          boundaryGap: true,
+          axisLabel: {
+            show: true,
+            interval: 0
+          },
+          data: payForm.dateList
+        },
+        yAxis: [
+          {
+            type: 'value',
+            axisLabel: {
+              formatter: '{value} min'
+            },
+            axisTick: {
+              show: false
+            },
+            splitArea: {
+              show: false,
+              areaStyle: {
+                color: ['rgba(255,255,255,0.2)']
+              }
+            }
+          }
+        ],
+        grid: {
+          left: '1%',
+          right: '1%',
+          top: '2%',
+          bottom: 0,
+          containLabel: true
+        },
+        series: [
+          {
+            // smooth: true,
+            data: payForm.timeList,
+            type: 'bar',
+            barWidth: '48px',
+            label: {
+              // 柱图头部显示值
+              show: true,
+              position: 'top',
+              color: '#333',
+              fontSize: '12px',
+              fontWeight: 600
+            },
+
+            itemStyle: {
+              normal: {
+                //这里设置柱形图圆角 [左上角,右上角,右下角,左下角]
+                barBorderRadius: [8, 8, 0, 0],
+                color: '#D5E9FF'
+              },
+              emphasis: {
+                color: '#3583FA' //hover时改变柱子颜色
+                // borderWidth: 4,
+                // borderColor: 'rgba(213, 233, 255,.4)',
+                // borderType: 'solid'
+              }
+            } as any
+          }
+        ],
+
+        formatter: (item: any) => {
+          if (Array.isArray(item)) {
+            return [
+              item[0].axisValueLabel,
+              ...item.map(
+                (d: any) =>
+                  `<br/>${
+                    d.marker
+                  }<span style="margin-top:10px;margin-left:5px;font-size: 13px;font-weight: 500;
+                  color: #131415;font-weight: 600;
+                  margin-top:12px
+                  line-height: 18px;">练习时长: ${d.value}${'分钟'} </span>`
+              )
+            ].join('');
+          } else {
+            return item;
+          }
+        }
+        // dataZoom: [
+        //   {
+        //     type: 'slider',
+        //     start: 5,
+        //     end: 100,
+        //     filterMode: 'empty'
+        //   }
+        // ]
+      });
+    };
+    setChart();
+    return () => (
+      <>
+        <div class={styles.homeTrainData}>
+          <div class={styles.TrainDataTop}>
+            <div class={styles.TrainDataTopLeft}>
+              <div class={styles.TrainDataItem}>
+                <p class={styles.TrainDataItemTitle}>
+                  <span>
+                    <NNumberAnimation from={0} to={32}></NNumberAnimation>
+                  </span>
+                  人
+                </p>
+                <p class={styles.TrainDataItemsubTitle}>练习人数</p>
+              </div>
+              <div class={styles.TrainDataItem}>
+                <p class={styles.TrainDataItemTitle}>
+                  <span>
+                    <NNumberAnimation from={0} to={32}></NNumberAnimation>
+                  </span>
+                  分钟
+                </p>
+                <p class={styles.TrainDataItemsubTitle}>平均练习时长</p>
+              </div>
+            </div>
+            <div class={styles.TrainDataTopRight}>
+              <div
+                // onClick={() => {
+                //   practiceFlag.value = !practiceFlag.value;
+                //   setChart();
+                // }}
+                class={[
+                  styles.DataTopRightItem,
+                  practiceFlag.value ? '' : styles.DataTopRightItemDis
+                ]}>
+                <div
+                  class={[
+                    styles.DataTopRightDot,
+                    styles.DataTopRightDotBlue
+                  ]}></div>
+                <p>练习时长(分钟)</p>
+              </div>
+            </div>
+          </div>
+          <div class={styles.chatrs}>
+            <div
+              ref={chartRef}
+              style={{ height: payForm.height, width: payForm.width }}></div>
+          </div>
+          <div class={styles.tableWrap}>
+            <NDataTable
+              class={styles.classTable}
+              loading={state.loading}
+              columns={columns()}
+              data={state.tableList}></NDataTable>
+            <Pagination
+              v-model:page={state.pagination.page}
+              v-model:pageSize={state.pagination.rows}
+              v-model:pageTotal={state.pagination.pageTotal}
+              onList={getList}
+              sync
+              saveKey="orchestraRegistration-key"
+            />
+          </div>
+        </div>
+      </>
+    );
+  }
+});

+ 124 - 0
src/views/home/components/practiceRanking.tsx

@@ -0,0 +1,124 @@
+import { defineComponent, reactive } from 'vue';
+import styles from '../index.module.less';
+import {
+  NButton,
+  NDataTable,
+  NForm,
+  NFormItem,
+  NImage,
+  NSelect,
+  NSpace
+} from 'naive-ui';
+import SearchInput from '@/components/searchInput';
+import CSelect from '@/components/CSelect';
+import Pagination from '@/components/pagination';
+import add from './images/add.png';
+export default defineComponent({
+  name: 'student-studentList',
+  setup(props, { emit }) {
+    const state = reactive({
+      searchWord: '',
+      orchestraType: null,
+      courseTypeCode: null,
+      subjectId: null,
+      classId: null,
+      studentType: null,
+      loading: false,
+      pagination: {
+        page: 1,
+        rows: 10,
+        pageTotal: 4
+      },
+      tableList: [
+        {
+          studentName: '胡小小',
+          phone: '17625367893',
+          trainNum: '49',
+          trainDay: '9',
+          averageNum: '35'
+        },
+        {
+          studentName: '丁曼蓉',
+          phone: '14677789334',
+          trainNum: '49',
+          trainDay: '9',
+          averageNum: '35'
+        },
+        {
+          studentName: '李书意',
+          phone: '13467857893',
+          trainNum: '49',
+          trainDay: '9',
+          averageNum: '35'
+        },
+        {
+          studentName: '夏小满',
+          phone: '13925367893',
+          trainNum: '49',
+          trainDay: '9',
+          averageNum: '35'
+        }
+      ] as any
+    });
+    const search = () => {
+      console.log('search', state);
+    };
+
+    const onReset = () => {
+      console.log('search');
+    };
+    const getList = () => {
+      console.log('getList');
+    };
+
+    const columns = () => {
+      return [
+        {
+          title: '姓名',
+          key: 'studentName'
+        },
+        {
+          title: '练习天数',
+          key: 'trainDay',
+          render(row: any) {
+            return <span>{row.trainDay}天</span>;
+          }
+        },
+        {
+          title: '练习总时长',
+          key: 'trainNum',
+          render(row: any) {
+            return <span>{row.trainNum}分钟</span>;
+          }
+        },
+
+        {
+          title: '平均练习时长',
+          key: 'averageNum',
+          render(row: any) {
+            return <span>{row.averageNum}分钟</span>;
+          }
+        }
+      ];
+    };
+    return () => (
+      <div class={styles.listWrap}>
+        <div class={styles.tableWrap}>
+          <NDataTable
+            class={styles.classTable}
+            loading={state.loading}
+            columns={columns()}
+            data={state.tableList}></NDataTable>
+          <Pagination
+            v-model:page={state.pagination.page}
+            v-model:pageSize={state.pagination.rows}
+            v-model:pageTotal={state.pagination.pageTotal}
+            onList={getList}
+            sync
+            saveKey="orchestraRegistration-key"
+          />
+        </div>
+      </div>
+    );
+  }
+});

+ 39 - 5
src/views/home/components/study.tsx

@@ -1,12 +1,15 @@
-import { defineComponent } from 'vue';
+import { defineComponent, ref } from 'vue';
 import styles from '../index.module.less';
 import bannerPerson from './images/bannerPerson.png';
 import { NIcon, NImage, NDatePicker, NSpace, NButton } from 'naive-ui';
 import CDatePicker from '@/components/CDatePicker';
 import TrainData from './trainData';
+import PracticeData from './practiceData';
+import PracticeRanking from './practiceRanking';
 export default defineComponent({
   name: 'home-study',
   setup() {
+    const chioseTab = ref('trainData');
     return () => (
       <>
         <div class={styles.homeStudy}>
@@ -16,11 +19,36 @@ export default defineComponent({
           </div>
           <div class={styles.homeStudyInfoList}>
             <div class={styles.homeStudyInfoTabs}>
-              <div class={[styles.homeStudyInfoTabItem, styles.active]}>
+              <div
+                onClick={() => {
+                  chioseTab.value = 'trainData';
+                }}
+                class={[
+                  styles.homeStudyInfoTabItem,
+                  chioseTab.value == 'trainData' ? styles.active : null
+                ]}>
                 训练数据
               </div>
-              <div class={styles.homeStudyInfoTabItem}>练习数据</div>
-              <div class={styles.homeStudyInfoTabItem}>练习排行</div>
+              <div
+                onClick={() => {
+                  chioseTab.value = 'practiceData';
+                }}
+                class={[
+                  styles.homeStudyInfoTabItem,
+                  chioseTab.value == 'practiceData' ? styles.active : null
+                ]}>
+                练习数据
+              </div>
+              <div
+                onClick={() => {
+                  chioseTab.value = 'practiceRanking';
+                }}
+                class={[
+                  styles.homeStudyInfoTabItem,
+                  chioseTab.value == 'practiceRanking' ? styles.active : null
+                ]}>
+                练习排行
+              </div>
             </div>
             <div class={styles.homeStudyInfoDate}>
               <NSpace>
@@ -34,7 +62,13 @@ export default defineComponent({
               </NSpace>
             </div>
           </div>
-          <TrainData></TrainData>
+          {chioseTab.value == 'trainData' ? <TrainData></TrainData> : null}
+          {chioseTab.value == 'practiceData' ? (
+            <PracticeData></PracticeData>
+          ) : null}
+          {chioseTab.value == 'practiceRanking' ? (
+            <PracticeRanking></PracticeRanking>
+          ) : null}
         </div>
       </>
     );

+ 145 - 3
src/views/home/components/trainData.tsx

@@ -1,8 +1,9 @@
 import { Ref, defineComponent, reactive, ref } from 'vue';
 import styles from '../index.module.less';
-import { NNumberAnimation } from 'naive-ui';
+import { NButton, NDataTable, NNumberAnimation } from 'naive-ui';
 import numeral from 'numeral';
 import { useECharts } from '@/hooks/web/useECharts';
+import Pagination from '/src/components/pagination';
 export default defineComponent({
   name: 'home-trainData',
   setup() {
@@ -27,7 +28,133 @@ export default defineComponent({
       studentList: [50, 100, 80, 180, 70, 99, 300],
       payInfoList: [100, 200, 300, 450, 330, 200, 10]
     });
-
+    const state = reactive({
+      loading: false,
+      pagination: {
+        page: 1,
+        rows: 10,
+        pageTotal: 4
+      },
+      tableList: [
+        {
+          teacherName: '孙忆枫',
+          createTime: '2023-06-27',
+          endTime: '2023-06-30',
+          status: 'ing',
+          studentNum: 100,
+          submitNum: 100,
+          quantityNum: 60,
+          submitRate: 100,
+          quantityRate: 60
+        },
+        {
+          teacherName: '孙忆枫',
+          createTime: '2023-06-27',
+          endTime: '2023-06-30',
+          status: 'ing',
+          studentNum: 100,
+          submitNum: 100,
+          quantityNum: 60,
+          submitRate: 100,
+          quantityRate: 60
+        },
+        {
+          teacherName: '孙忆枫',
+          createTime: '2023-06-27',
+          endTime: '2023-06-30',
+          status: 'ing',
+          studentNum: 100,
+          submitNum: 100,
+          quantityNum: 60,
+          submitRate: 100,
+          quantityRate: 60
+        },
+        {
+          teacherName: '孙忆枫',
+          createTime: '2023-06-25',
+          endTime: '2023-06-26',
+          status: 'end',
+          studentNum: 100,
+          submitNum: 100,
+          quantityNum: 60,
+          submitRate: 100,
+          quantityRate: 60
+        }
+      ] as any,
+      goCourseVisiable: false
+    });
+    const columns = () => {
+      return [
+        {
+          title: '布置老师',
+          key: 'teacherName'
+        },
+        {
+          title: '布置时间',
+          key: 'createTime'
+        },
+        {
+          title: '截止时间',
+          key: 'endTime'
+        },
+        {
+          title: '训练状态',
+          key: 'status',
+          render(row: any) {
+            return row.status == 'ing' ? (
+              <div class={styles.indDot}>
+                {' '}
+                <span></span> 进行中
+              </div>
+            ) : (
+              <div class={styles.endDot}>
+                <span></span>已结束
+              </div>
+            );
+          }
+        },
+        {
+          title: '布置人数',
+          key: 'studentNum'
+        },
+        {
+          title: '提交人数',
+          key: 'submitNum'
+        },
+        {
+          title: '合格人数',
+          key: 'quantityNum'
+        },
+        {
+          title: '提交率',
+          key: 'submitRate',
+          render(row: any) {
+            return <span>{row.submitRate}%</span>;
+          }
+        },
+        {
+          title: '合格率',
+          key: 'quantityRate',
+          render(row: any) {
+            return <span>{row.quantityRate}%</span>;
+          }
+        },
+        {
+          title: '操作',
+          key: 'id',
+          render(row: any) {
+            return (
+              <NButton text type="primary">
+                详情
+              </NButton>
+            );
+          }
+        }
+      ];
+    };
+    const getList = () => {
+      console.log('1');
+    };
     const setChart = () => {
       setOptions({
         tooltip: {
@@ -49,7 +176,7 @@ export default defineComponent({
         },
         xAxis: {
           type: 'category',
-          boundaryGap: false,
+          boundaryGap: true,
           axisLabel: {
             show: true,
             interval: 0
@@ -295,6 +422,21 @@ export default defineComponent({
               ref={chartRef}
               style={{ height: payForm.height, width: payForm.width }}></div>
           </div>
+          <div class={styles.tableWrap}>
+            <NDataTable
+              class={styles.classTable}
+              loading={state.loading}
+              columns={columns()}
+              data={state.tableList}></NDataTable>
+            <Pagination
+              v-model:page={state.pagination.page}
+              v-model:pageSize={state.pagination.rows}
+              v-model:pageTotal={state.pagination.pageTotal}
+              onList={getList}
+              sync
+              saveKey="orchestraRegistration-key"
+            />
+          </div>
         </div>
       </>
     );

+ 7 - 5
src/views/home/index.module.less

@@ -280,7 +280,9 @@
           border-radius: 4px;
           margin-right: 6px;
         }
-
+        .DataTopRightDot.DataTopRightDotBlue {
+          background: #d5e9ff;
+        }
         .DataTopRightDot.red {
           background: #ff7aa7;
         }
@@ -516,13 +518,13 @@
     position: relative;
 
     .teachGroupListDot {
-      width: 12px;
-      height: 12px;
+      width: 14px;
+      height: 14px;
       background: #198cfe;
       border: 3px solid #d1e8ff;
       border-radius: 50%;
-      top: 31px;
-      left: -6px;
+      top: 28px;
+      left: -7px;
       position: absolute;
     }
   }

+ 16 - 19
src/views/home/index.tsx

@@ -173,28 +173,25 @@ export default defineComponent({
                 </NIcon>
               </div>
             </div>
-            <NImage class={styles.leftDot} src={leftDot}></NImage>
-            <NImage class={styles.rightDot} src={rightDot}></NImage>
-            <NImage class={styles.lineIcon} src={lineIcon}></NImage>
-            <NImage class={styles.musicIcon} src={musicIcon}></NImage>
+            <NImage
+              class={styles.leftDot}
+              src={leftDot}
+              previewDisabled></NImage>
+            <NImage
+              class={styles.rightDot}
+              src={rightDot}
+              previewDisabled></NImage>
+            <NImage
+              class={styles.lineIcon}
+              src={lineIcon}
+              previewDisabled></NImage>
+            <NImage
+              class={styles.musicIcon}
+              src={musicIcon}
+              previewDisabled></NImage>
           </div>
           <div class={styles.leftBottomWrap}>
             <Study></Study>
-            <div class={styles.tableWrap}>
-              <NDataTable
-                class={styles.classTable}
-                loading={state.loading}
-                columns={columns()}
-                data={state.tableList}></NDataTable>
-              <Pagination
-                v-model:page={state.pagination.page}
-                v-model:pageSize={state.pagination.rows}
-                v-model:pageTotal={state.pagination.pageTotal}
-                onList={getList}
-                sync
-                saveKey="orchestraRegistration-key"
-              />
-            </div>
           </div>
         </div>
         <div class={styles.homeInfoRight}>

+ 12 - 5
src/views/natural-resources/index.module.less

@@ -116,17 +116,24 @@
     height: 42px;
     font-size: 16px;
 
+    img {
+      width: 18px;
+      height: 18px;
+    }
+
     :global {
       .n-input-wrapper {
         padding-left: 12px;
         padding-right: 4px;
+        height: 42px !important;
       }
-    }
 
-    .searchBtn {
-      height: 34px;
-      font-size: 15px;
-      font-weight: 500;
+      .n-button {
+        height: 34px;
+        font-size: 15px;
+        font-weight: 500;
+        width: auto;
+      }
     }
   }
 

+ 9 - 3
src/views/natural-resources/search-group-resources.tsx

@@ -2,6 +2,7 @@ import { defineComponent, reactive } from 'vue';
 import styles from './index.module.less';
 import { NButton, NForm, NFormItem, NInput, NSpace } from 'naive-ui';
 import iconAdd from './images/icon-add.svg';
+import TheSearch from '/src/components/TheSearch';
 
 export default defineComponent({
   name: 'search-group',
@@ -82,7 +83,7 @@ export default defineComponent({
             </NSpace>
           </NFormItem>
 
-          <NInput
+          {/* <NInput
             type="text"
             placeholder="请输入搜索关键词"
             clearable
@@ -92,12 +93,17 @@ export default defineComponent({
             {{
               prefix: () => <span class={'icon-search-input'}></span>,
               suffix: () => (
-                <NButton round type="primary" class={styles.searchBtn}>
+                <NButton
+                  round
+                  size="small"
+                  type="primary"
+                  class={styles.searchBtn}>
                   搜索
                 </NButton>
               )
             }}
-          </NInput>
+          </NInput> */}
+          <TheSearch class={styles.inputSearch} round />
         </NForm>
       </div>
     );

+ 1 - 9
src/views/prepare-lessons/model/resource-search-group/index.tsx

@@ -42,15 +42,7 @@ export default defineComponent({
             v-model:value={forms.search}
             class={styles.inputSearch}>
             {{
-              prefix: () => <span class={'icon-search-input'}></span>,
-              suffix: () => (
-                <NButton
-                  type="primary"
-                  class={styles.searchBtn}
-                  disabled={forms.search ? false : true}>
-                  搜索
-                </NButton>
-              )
+              prefix: () => <span class={'icon-search-input'}></span>
             }}
           </NInput>
         </div>

+ 13 - 11
src/views/prepare-lessons/model/select-music/index.module.less

@@ -96,28 +96,30 @@
 
   .inputSearch {
     position: absolute;
-    top: 0;
+    top: 4px;
     right: 40px;
     width: 360px;
     height: 42px;
     font-size: 16px;
 
+    img {
+      width: 18px;
+      height: 18px;
+    }
+
     :global {
       .n-input-wrapper {
         padding-left: 12px;
         padding-right: 4px;
+        height: 42px !important;
       }
-    }
 
-    .searchBtn {
-      height: 34px;
-      font-size: 15px;
-      font-weight: 500;
-    }
-
-    .iconSearch {
-      width: 16px;
-      height: 17px;
+      .n-button {
+        height: 34px;
+        font-size: 15px;
+        font-weight: 500;
+        width: auto;
+      }
     }
   }
 }

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott