lex 2 years ago
parent
commit
fabe6b0c79
88 changed files with 445 additions and 269 deletions
  1. 1 0
      dist/assets/arrow-legacy.c72c6a83.js
  2. BIN
      dist/assets/bg_bottom.579a0f8b.png
  3. BIN
      dist/assets/bg_center.9124774b.png
  4. BIN
      dist/assets/bg_left_bottom.35fbd214.png
  5. BIN
      dist/assets/bg_right_center.c34c3f54.png
  6. BIN
      dist/assets/bg_top.112cc7b4.png
  7. BIN
      dist/assets/demo.21622ee0.png
  8. BIN
      dist/assets/detaile.0966b309.png
  9. BIN
      dist/assets/downBg.ddf5d517.png
  10. BIN
      dist/assets/finch.d9c3029a.png
  11. BIN
      dist/assets/hold.abbcc7ab.png
  12. BIN
      dist/assets/icon.c76ae863.png
  13. BIN
      dist/assets/icon_music.19f6571c.png
  14. 1 0
      dist/assets/icon_teacher-legacy.51535f30.js
  15. BIN
      dist/assets/icon_teacher_auth.ad2ff51c.png
  16. 0 0
      dist/assets/index-legacy.278984c8.js
  17. 0 0
      dist/assets/index-legacy.2bd6ead4.js
  18. 0 0
      dist/assets/index-legacy.3acd5436.js
  19. 0 0
      dist/assets/index-legacy.3bb0580a.js
  20. 0 0
      dist/assets/index-legacy.6cf558bc.js
  21. 1 0
      dist/assets/index-legacy.780ecf5b.js
  22. 6 0
      dist/assets/index-legacy.7f24319e.js
  23. 0 0
      dist/assets/index-legacy.7fdb9974.js
  24. 0 0
      dist/assets/index-legacy.92b7863e.js
  25. 6 0
      dist/assets/index-legacy.a5d4f1c7.js
  26. 0 0
      dist/assets/index-legacy.b800f907.js
  27. 0 0
      dist/assets/index-legacy.b929229c.js
  28. 0 0
      dist/assets/index-legacy.bb99bb4b.js
  29. 0 0
      dist/assets/index-legacy.cc512209.js
  30. 0 0
      dist/assets/index-legacy.cf2a4f77.js
  31. 0 0
      dist/assets/index-legacy.d6455eca.js
  32. 0 0
      dist/assets/index-legacy.de4ef829.js
  33. 0 0
      dist/assets/index-legacy.dfa8f42c.js
  34. 0 0
      dist/assets/index-legacy.e2eba8e6.js
  35. 1 0
      dist/assets/index-legacy.eb5179d8.js
  36. 0 0
      dist/assets/index-legacy.f9e2de2e.js
  37. 0 1
      dist/assets/index.244807ad.css
  38. 0 0
      dist/assets/index.283b0169.css
  39. 0 0
      dist/assets/index.2b8cd76b.js
  40. 0 0
      dist/assets/index.5d243a6b.css
  41. 0 0
      dist/assets/index.67ed6471.js
  42. 0 0
      dist/assets/index.8de244d8.js
  43. 0 0
      dist/assets/index.9a188768.css
  44. 0 1
      dist/assets/index.a138bf7c.css
  45. 0 0
      dist/assets/index.bd1a105c.js
  46. 0 0
      dist/assets/index.ccf2a7c8.js
  47. BIN
      dist/assets/logo.5175680c.png
  48. BIN
      dist/assets/midi_money.64ba9a14.png
  49. BIN
      dist/assets/midi_upload.c4c1fc16.png
  50. BIN
      dist/assets/music.24d07fa6.png
  51. BIN
      dist/assets/music_main.4ca224cc.png
  52. BIN
      dist/assets/o1.d28cffda.png
  53. BIN
      dist/assets/o2.a2e5a6cd.png
  54. BIN
      dist/assets/o4.ac364cac.png
  55. 0 0
      dist/assets/polyfills-legacy.b8e9260e.js
  56. 0 0
      dist/assets/polyfills-legacy.bd1e9e62.js
  57. BIN
      dist/assets/register_bg.50c81b54.png
  58. 0 0
      dist/assets/scrollbar.min-legacy.5d34aa6f.js
  59. 0 0
      dist/assets/searchdetail-legacy.fb771af4.js
  60. 0 0
      dist/assets/swiper-slide-legacy.cb3feda4.js
  61. BIN
      dist/assets/teacher_1.fa7c93ef.png
  62. BIN
      dist/assets/teacher_2.49bf3854.png
  63. 0 0
      dist/assets/teacher_main-legacy.1af1bbac.js
  64. 0 0
      dist/assets/teacher_main-legacy.42c3e565.js
  65. 0 0
      dist/assets/teacher_main.22c83e59.js
  66. BIN
      dist/assets/teacher_main.bed0166b.png
  67. 1 0
      dist/assets/toolsValidate-legacy.3fd91d47.js
  68. 0 0
      dist/assets/vendor-legacy.a30f1236.js
  69. 0 0
      dist/assets/vendor.643bcffc.js
  70. 0 50
      dist/index.html
  71. 11 0
      src/components/col-upload/index.module.less
  72. 92 17
      src/components/col-upload/index.tsx
  73. 2 2
      src/components/musicLIstItem/index.tsx
  74. 11 1
      src/router/routes-admin.ts
  75. 26 0
      src/state.ts
  76. 4 25
      src/views/App.tsx
  77. 8 15
      src/views/role-auth/teacherAuth/components/auth/index.tsx
  78. 8 0
      src/views/role-auth/teacherAuth/components/cert-brief/index.tsx
  79. 21 5
      src/views/role-auth/teacherAuth/components/cert-info/index.tsx
  80. 19 6
      src/views/role-auth/teacherAuth/components/edu-information/index.tsx
  81. 28 12
      src/views/user-info/components/users/index.tsx
  82. 11 0
      src/views/user-info/music-class/index.module.less
  83. 58 8
      src/views/user-info/music-class/index.tsx
  84. 13 66
      src/views/user-info/music-class/list.tsx
  85. 0 0
      src/views/user-info/music-operation/index.module.less
  86. 30 0
      src/views/user-info/music-operation/index.tsx
  87. 31 10
      src/views/user-info/practice-setting/index.tsx
  88. 55 50
      src/views/user-info/video-class/list.tsx

+ 1 - 0
dist/assets/arrow-legacy.c72c6a83.js

@@ -0,0 +1 @@
+;(function(){System.register([],function(exports){'use strict';return{execute:function execute(){var arrow=exports('a',"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAPlJREFUWEft2LENAiEUBuB3tlaUOIyJK1gwgreAA9BZOcHlmttBK9dxBhJzuRgSCxtN4P0/kgg1kC8/JLxHJ5WPrnKfNKD2hFqCP0lwGIbDsizWGHNyzj20iG/rk494HMfNPM/316YXY8yeiUwGeu9X1tqbiOxKIJOBETVN0zqEcBWRLRuZBSyJzAaWQqqAJZBqIBsJATKRMCALCQUykHAgGkkBIpE04Afkue/7Y0px8b9A1HtNSRCFi1cBDkTi4EA0Dgpk4GBAFg4CZOLUQDZOBSyBywaWwmUBq287q2/cY+xVf32klEqIufC3GIF636MBtYm2BLUJPgHTXfIpPDsbwQAAAABJRU5ErkJggg==");}};});})();

BIN
dist/assets/bg_bottom.579a0f8b.png


BIN
dist/assets/bg_center.9124774b.png


BIN
dist/assets/bg_left_bottom.35fbd214.png


BIN
dist/assets/bg_right_center.c34c3f54.png


BIN
dist/assets/bg_top.112cc7b4.png


BIN
dist/assets/demo.21622ee0.png


BIN
dist/assets/detaile.0966b309.png


BIN
dist/assets/downBg.ddf5d517.png


BIN
dist/assets/finch.d9c3029a.png


BIN
dist/assets/hold.abbcc7ab.png


BIN
dist/assets/icon.c76ae863.png


BIN
dist/assets/icon_music.19f6571c.png


+ 1 - 0
dist/assets/icon_teacher-legacy.51535f30.js

@@ -0,0 +1 @@
+;(function(){System.register([],function(exports){'use strict';return{execute:function execute(){var iconTeacher=exports('i',"./assets/icon_teacher.2d942bf5.png");}};});})();

BIN
dist/assets/icon_teacher_auth.ad2ff51c.png


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


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


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


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


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


+ 1 - 0
dist/assets/index-legacy.780ecf5b.js

@@ -0,0 +1 @@
+;(function(){System.register(['./icon_teacher-legacy.51535f30.js','./vendor-legacy.a30f1236.js'],function(exports){'use strict';var iconTeacher,defineComponent,createVNode,ElImage,createTextVNode;return{setters:[function(module){iconTeacher=module.i;},function(module){defineComponent=module.d;createVNode=module.c;ElImage=module.l;createTextVNode=module.a;}],execute:function execute(){var Item=exports('I',defineComponent({name:'item',props:{item:{type:Object,default:function _default(){return{};}}},render:function render(){var item=this.item;return createVNode("div",{"class":"border border-[#f5f5f5] rounded-sm w-[262px] h-[302px] m-auto overflow-hidden relative hover:shadow-md transition-all"},[item.subjectName&&createVNode("div",{"class":"absolute top-2 right-3 bg-black/40 text-white text-sm rounded-sm px-3 h-7 flex items-center justify-center z-10"},[item.subjectName]),createVNode(ElImage,{"class":"w-full h-[175px] align-middle","fit":"cover","src":item.backgroundPic},null),createVNode("div",{"class":"mx-2.5 py-3.5 border-b border-b-[#F2F2F2]"},[createVNode("div",{"class":"text-lg leading-none font-medium whitespace-nowrap overflow-hidden text-ellipsis"},[item.courseGroupName]),createVNode("div",{"class":"text-sm text-[#999] pt-2.5"},[item.studentCount,createTextVNode("\u4EBA\u5DF2\u8D2D\u4E70")])]),createVNode("div",{"class":"mx-2.5 py-4 flex items-center justify-between"},[createVNode("div",{"class":"flex items-center"},[createVNode(ElImage,{"class":"w-[22px] h-[22px] align-middle rounded-full overflow-hidden mr-2","object-fit":"cover","src":item.avatar||iconTeacher},null),createVNode("span",null,[item.teacherName])]),createVNode("div",{"class":"font-medium text-[15px] leading-5 text-[#2DC7AA]"},[createTextVNode("\uFFE5"),item.coursePrice,createTextVNode("/"),item.courseNum,createTextVNode("\u8BFE\u65F6")])])]);}}));}};});})();

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


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


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


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


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


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


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


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


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


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


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


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


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


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

@@ -0,0 +1 @@
+;(function(){System.register(['./vendor-legacy.a30f1236.js'],function(exports){'use strict';var defineComponent,createVNode,Fragment,ElForm,ElFormItem,ElInput;return{setters:[function(module){defineComponent=module.d;createVNode=module.c;Fragment=module.F;ElForm=module.m;ElFormItem=module.n;ElInput=module.k;}],execute:function execute(){var index=exports('default',defineComponent({name:'music-operation',data:function data(){var query=this.$route.query;return{type:query.type||'create'};},render:function render(){return createVNode(Fragment,null,[createVNode("div",{"class":"text-base text-[#333] leading-none px-6 py-5 border-b border-b-[#E5E5E5]"},[this.type==='create'?'新建乐谱':'编辑乐谱']),createVNode(ElForm,null,{default:function _default(){return[createVNode(ElFormItem,{"label":"MusicXML文件","prop":"name"},{default:function _default(){return[createVNode(ElInput,{"placeholder":"请输入乐谱名称"},null)];}}),createVNode(ElFormItem,{"label":"是否带节拍器","prop":"name"},{default:function _default(){return[createVNode(ElInput,{"placeholder":"请输入乐谱名称"},null)];}})];}})]);}}));}};});})();

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


+ 0 - 1
dist/assets/index.244807ad.css

@@ -1 +0,0 @@
-._musicAuth_asr9_1{background:url(./bg_top.112cc7b4.png) no-repeat top left,url(./bg_center.9124774b.png) no-repeat left 80%,url(./bg_bottom.579a0f8b.png) no-repeat bottom right,url(./music_main.4ca224cc.png) no-repeat top right;background-size:212px 126px,178px 223px,171px 163px,668px 406px;background-color:#fff}._musicAuth_asr9_1 ._txt_asr9_6{position:relative;z-index:1;padding-bottom:1.25rem}._musicAuth_asr9_1 ._txt_asr9_6:after{content:"";display:block;width:100%;height:13px;background:#cbfdd5;position:absolute;bottom:15px;left:0;z-index:-1;opacity:.63;border-radius:.75rem}._musicAuth_asr9_1 ._col_asr9_24{background:#ffffff;box-shadow:0 10px 36px rgba(0,0,0,.13);border-radius:10px;min-height:197px}._musicAuth_asr9_1 .el-dialog{--el-dialog-width: 379px !important}._musicAuth_asr9_1 .el-dialog__header,._musicAuth_asr9_1 .el-dialog__body{padding:0}

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


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


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


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


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


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


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

@@ -1 +0,0 @@
-._steps_1jqo4_1{height:40px;border-top:1px solid #eaeaea;border-bottom:1px solid #eaeaea;position:relative;margin-right:6px;display:flex;flex:1 1 0%;align-items:center;justify-content:center;--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(153 153 153 / var(--tw-text-opacity))}._steps_1jqo4_1:last-child{margin-right:0}._steps_1jqo4_1:after{content:"";display:block;border-top:20px solid transparent;border-bottom:20px solid transparent;border-left:20px solid rgb(226 232 240 / var(--tw-bg-opacity));position:absolute;right:-20px;top:0;z-index:10}._steps_1jqo4_1:before{content:"";display:block;border-top:20px solid rgb(226 232 240 / var(--tw-bg-opacity));border-bottom:20px solid rgb(226 232 240 / var(--tw-bg-opacity));border-left:20px solid #fff;position:absolute;left:0px;top:0}._form_1jqo4_28 .el-radio-button__inner{border:var(--el-border);border-radius:var(--el-border-radius-base)!important;width:100%;padding:11px 19px!important}._form_1jqo4_28 .el-radio-button__original-radio:checked+.el-radio-button__inner{background-color:#e9fff8;color:var(--el-color-primary)}

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


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


BIN
dist/assets/logo.5175680c.png


BIN
dist/assets/midi_money.64ba9a14.png


BIN
dist/assets/midi_upload.c4c1fc16.png


BIN
dist/assets/music.24d07fa6.png


BIN
dist/assets/music_main.4ca224cc.png


BIN
dist/assets/o1.d28cffda.png


BIN
dist/assets/o2.a2e5a6cd.png


BIN
dist/assets/o4.ac364cac.png


File diff suppressed because it is too large
+ 0 - 0
dist/assets/polyfills-legacy.b8e9260e.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/polyfills-legacy.bd1e9e62.js


BIN
dist/assets/register_bg.50c81b54.png


File diff suppressed because it is too large
+ 0 - 0
dist/assets/scrollbar.min-legacy.5d34aa6f.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/searchdetail-legacy.fb771af4.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/swiper-slide-legacy.cb3feda4.js


BIN
dist/assets/teacher_1.fa7c93ef.png


BIN
dist/assets/teacher_2.49bf3854.png


File diff suppressed because it is too large
+ 0 - 0
dist/assets/teacher_main-legacy.1af1bbac.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/teacher_main-legacy.42c3e565.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/teacher_main.22c83e59.js


BIN
dist/assets/teacher_main.bed0166b.png


+ 1 - 0
dist/assets/toolsValidate-legacy.3fd91d47.js

@@ -0,0 +1 @@
+;(function(){System.register([],function(exports){'use strict';return{execute:function execute(){exports('v',verifyNumberIntegerAndFloat);function verifyNumberIntegerAndFloat(val){var v=val.replace(/(^\s*)|(\s*$)/g,"");v=v.replace(/[^\d.]/g,"");v=v.replace(/^0{2}$/g,"0");v=v.replace(/^\./g,"");v=v.replace(".","$#$").replace(/\./g,"").replace("$#$",".");v=v.replace(/^(\-)*(\d+)\.(\d\d).*$/,"$1$2.$3");return v;}}};});})();

File diff suppressed because it is too large
+ 0 - 0
dist/assets/vendor-legacy.a30f1236.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/vendor.643bcffc.js


+ 0 - 50
dist/index.html

@@ -1,50 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh">
-  <head>
-    <meta charset="UTF-8" />
-    <link rel="icon" href="./favicon.ico" />
-    <meta
-      name="viewport"
-      content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover"
-    />
-    <meta name="apple-mobile-web-app-capable" content="yes" />
-    <!-- 设置苹果工具栏颜色 -->
-    <meta name="apple-mobile-web-app-status-bar-style" content="black" />
-    <!-- 忽略页面中的数字识别为电话,忽略email识别 -->
-    <meta name="format-detection" content="telphone=no, email=no" />
-    <!-- 启用360浏览器的极速模式(webkit) -->
-    <meta name="renderer" content="webkit" />
-    <!-- 避免IE使用兼容模式 -->
-    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
-    <meta name="HandheldFriendly" content="true" />
-    <!-- uc强制竖屏 -->
-    <meta name="screen-orientation" content="portrait" />
-    <!-- QQ强制竖屏 -->
-    <meta name="x5-orientation" content="portrait" />
-    <!-- UC强制全屏 -->
-    <meta name="full-screen" content="yes" />
-    <!-- QQ强制全屏 -->
-    <meta name="x5-fullscreen" content="true" />
-    <!-- UC应用模式 -->
-    <meta name="browsermode" content="application" />
-    <!-- QQ应用模式 -->
-    <meta name="x5-page-mode" content="app" />
-    <!-- 设置在apple上以应用模式启动时,是否全屏 -->
-    <meta name="apple-touch-fullscreen" content="yes" />
-    <!-- windows phone 点击无高光 -->
-    <meta name="msapplication-tap-highlight" content="no" />
-    <title>酷乐秀</title>
-    <script type="module" crossorigin src="./assets/index.8de244d8.js"></script>
-    <link rel="modulepreload" href="./assets/vendor.643bcffc.js">
-    <link rel="stylesheet" href="./assets/index.9a188768.css">
-    <script type="module">!function(){try{new Function("m","return import(m)")}catch(o){console.warn("vite: loading legacy build because dynamic import is unsupported, syntax error above should be ignored");var e=document.getElementById("vite-legacy-polyfill"),n=document.createElement("script");n.src=e.src,n.onload=function(){System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))},document.body.appendChild(n)}}();</script>
-  </head>
-
-  <body>
-    <div id="app"></div>
-    
-    <script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
-    <script nomodule id="vite-legacy-polyfill" src="./assets/polyfills-legacy.b8e9260e.js"></script>
-    <script nomodule id="vite-legacy-entry" data-src="./assets/index-legacy.92b7863e.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
-  </body>
-</html>

+ 11 - 0
src/components/col-upload/index.module.less

@@ -8,3 +8,14 @@
   color: #2dc7aa;
   line-height: 20px;
 }
+
+.uploadClass {
+  height: 106px;
+
+  :global {
+    .el-loading-spinner {
+      margin-top: -43px;
+      height: 106px;
+    }
+  }
+}

+ 92 - 17
src/components/col-upload/index.tsx

@@ -1,4 +1,4 @@
-import { ElUpload } from 'element-plus'
+import { ElImage, ElLoading, ElMessage, ElUpload } from 'element-plus'
 import { defineComponent } from 'vue'
 import styles from './index.module.less'
 import iconUpload from './images/icon_upload.png'
@@ -19,6 +19,10 @@ export default defineComponent({
       type: String,
       default: 'daya'
     },
+    size: {
+      type: Number,
+      default: 5 // 默认5M
+    },
     accept: {
       type: String,
       default: 'images/*'
@@ -43,17 +47,65 @@ export default defineComponent({
         acl: 'public-read',
         name: ''
       },
-      fileList: [] as any
+      fileList: [] as any,
+      loading: null as any
     }
   },
   methods: {
-    handleSuccess() {},
-    handleRemove() {},
-    handleChange() {},
-    handleProgress() {},
-    handleError() {},
+    handleSuccess() {
+      this.loading?.close()
+      let url = this.ossUploadUrl + '/' + this.dataObj.key
+      console.log(url)
+      this.$emit('update:modelValue', url)
+    },
+    handleRemove() {
+      console.log('remove')
+    },
+    handleChange() {
+      console.log('handleChange')
+    },
+    handleProgress() {
+      console.log('handleProgress')
+    },
+    handleError() {
+      this.loading?.close()
+    },
     async beforeUpload(file: any) {
       // beforeUpload
+      console.log(file)
+      // let fileType = true
+      // if (props.rules.type && props.rules.type.length > 0) {
+      //   const fileExtension = file.name.split('.').pop().toUpperCase()
+      //   console.log(
+      //     props.rules.type,
+      //     fileExtension,
+      //     props.rules.type.indexOf(fileExtension) != -1
+      //   )
+      //   if (props.rules.type.indexOf(fileExtension) != -1) {
+      //     fileType = true
+      //   } else {
+      //     fileType = false
+      //     ElMessage.error('请上传正确的文件!')
+      //     return false
+      //   }
+      // }
+
+      let isLt2M = true
+      if (this.size) {
+        isLt2M = file.size / 1024 / 1024 < this.size
+        if (!isLt2M) {
+          ElMessage.error(`文件大小不能超过${this.size}M!`)
+          return false
+        }
+      }
+      this.loading = ElLoading.service({
+        target: this.$refs.uploadDom as HTMLElement,
+        lock: true,
+        fullscreen: false,
+        text: '上传中...',
+        background: 'rgba(0, 0, 0, 0.7)'
+      })
+      console.log(this.loading)
       try {
         let fileName = file.name.replaceAll(' ', '_')
         let key = new Date().getTime() + fileName
@@ -67,11 +119,20 @@ export default defineComponent({
             unknowValueField: []
           }
         }
-        const res = await request.post('/api-website/getUploadSign', {
+        const { data } = await request.post('/api-website/getUploadSign', {
           data: obj
         })
-        console.log(res)
-      } catch {}
+        this.dataObj = {
+          policy: data.policy,
+          signature: data.signature,
+          key: key,
+          KSSAccessKeyId: data.kssAccessKeyId,
+          acl: 'public-read',
+          name: fileName
+        }
+      } catch (e) {
+        this.loading.close()
+      }
     },
     handleExceed() {}
   },
@@ -92,17 +153,31 @@ export default defineComponent({
           accept={this.accept}
           beforeUpload={this.beforeUpload}
           onExceed={this.handleExceed}
-          limit={1}
           ref="uploadRef"
         >
           <div
-            class={[
-              styles.uploadSection,
-              'flex items-center flex-col justify-center'
-            ]}
+            // id="uploadDom"
+            ref="uploadDom"
+            class={styles.uploadClass}
+            style={{ height: '106px' }}
           >
-            <img src={iconUpload} class="w-8 h-7 mb-3" />
-            <p>{this.tips}</p>
+            {this.modelValue ? (
+              <ElImage
+                src={this.modelValue}
+                fit="cover"
+                class={styles.uploadSection}
+              />
+            ) : (
+              <div
+                class={[
+                  styles.uploadSection,
+                  'flex items-center flex-col justify-center'
+                ]}
+              >
+                <img src={iconUpload} class="w-8 h-7 mb-3" />
+                <p>{this.tips}</p>
+              </div>
+            )}
           </div>
         </ElUpload>
 

+ 2 - 2
src/components/musicLIstItem/index.tsx

@@ -1,4 +1,4 @@
-import { defineComponent,reactive } from 'vue'
+import { defineComponent, reactive } from 'vue'
 import icon from '../videoDetailItem/images/icon.png'
 import classes from './index.module.less'
 import detaile from './images/detaile.png'
@@ -30,7 +30,7 @@ export default defineComponent({
   setup(props: any) {
     const item = props.item
     return () => (
-      <div>
+      <>
         <div class={classes.itemWrap}>
           <div class={classes.left}>
             <div class={classes.imgWrap}>

+ 11 - 1
src/router/routes-admin.ts

@@ -39,7 +39,6 @@ export default [
     }
   },
 
-
   {
     path: '/teacherAuth',
     name: 'teacherAuth',
@@ -96,6 +95,17 @@ export default [
         name: 'userInfoMusicClass',
         component: () => import('@/views/user-info/music-class'),
         meta: { title: '我的曲谱', index: 5 }
+      },
+      {
+        path: '/userInfo/musicOperation',
+        name: 'userInfoMusicOperation',
+        component: () => import('@/views/user-info/music-operation'),
+        meta: {
+          title: '视频课',
+          index: 4,
+          hidden: true,
+          activeMenu: 'userInfoMusicClass'
+        }
       }
     ]
   }

+ 26 - 0
src/state.ts

@@ -1,4 +1,6 @@
 import { reactive } from 'vue'
+import request from './helpers/request'
+import { getAuth, getUserType } from './helpers/utils'
 
 type status = 'init' | 'login' | 'logout' | 'error'
 export const state = reactive({
@@ -9,3 +11,27 @@ export const state = reactive({
   loginPopupStatus: false, // 登录弹窗状态
   loginPopupTimer: null as any // 登录弹窗定时器
 })
+
+export const getUserInfo = async () => {
+  const token = getAuth()
+  const userType = getUserType()
+  // 判断是否有token,token和userType 判断是否登录
+  if (!token) {
+    return
+  }
+
+  try {
+    console.log(userType)
+    const url =
+      userType === 'TEACHER'
+        ? '/api-website/teacher/queryUserInfo'
+        : '/api-website/student/queryUserInfo'
+    const res = await request.get(url)
+    state.user.data = res.data || {}
+
+    // 登录状态
+    state.user.status = 'login'
+  } catch {
+    state.user.status = 'init'
+  }
+}

+ 4 - 25
src/views/App.tsx

@@ -6,36 +6,15 @@ import { defineComponent } from 'vue'
 import { RouterView } from 'vue-router'
 import Login from './login'
 import styles from './App.module.less'
-import { state } from '@/state'
-import { getAuth, getUserType } from '@/helpers/utils'
+import { getUserInfo, state } from '@/state'
 import silder from '@/components/silder'
-import request from '@/helpers/request'
 
 export default defineComponent({
-  components:{silder},
+  components: { silder },
   name: 'App',
   async mounted() {
-    const token = getAuth()
-    const userType = getUserType()
-    // 判断是否有token,token和userType 判断是否登录
-    if (!token) {
-      return
-    }
-
-    try {
-      console.log(userType)
-      const url =
-        userType === 'TEACHER'
-          ? '/api-website/teacher/queryUserInfo'
-          : '/api-website/student/queryUserInfo'
-      const res = await request.get(url)
-      state.user.data = res.data || {}
-
-      // 登录状态
-      state.user.status = 'login'
-    } catch {
-      state.user.status = 'init'
-    }
+    // 获取用户信息
+    await getUserInfo()
   },
   render() {
     return (

+ 8 - 15
src/views/role-auth/teacherAuth/components/auth/index.tsx

@@ -1,20 +1,10 @@
 import ColSteps from '@/components/col-steps'
 import request from '@/helpers/request'
-import {
-  ElButton,
-  ElDatePicker,
-  ElForm,
-  ElFormItem,
-  ElInput,
-  ElRadioButton,
-  ElRadioGroup
-} from 'element-plus'
 import { defineComponent } from 'vue'
 import { teacherState } from '../../teacherState'
 import BaseInfo from '../base-info'
 import CertInfo from '../cert-info'
 import EduInformation from '../edu-information'
-import styles from './index.module.less'
 
 export default defineComponent({
   name: 'auth',
@@ -26,7 +16,7 @@ export default defineComponent({
   async mounted() {
     try {
       if (teacherState.subjectList.length <= 0) {
-        const res = await request.get('/api-website/subject/subjectSelect')
+        const res = await request.get('/api-website/open/subject/subjectSelect')
         teacherState.subjectList = res.data || []
       }
 
@@ -34,11 +24,14 @@ export default defineComponent({
         '/api-website/teacherAuthEntryRecord/getLastRecordByUserId'
       )
       teacherState.teacherInfo = teacherInfo.data || {}
-      const info = teacherState.teacherInfo
+      const info = teacherInfo.data || {}
       teacherState.teacherCert.introduction = info.introduction
-      teacherState.teacherCert.subjectId = info.subjectId
-        ? info.subjectId.split(',')
-        : []
+
+      const subjectIds = info.subjectId ? info.subjectId.split(',') : []
+
+      teacherState.teacherCert.subjectId = subjectIds.map((item: any) => {
+        return Number(item)
+      })
       teacherState.teacherCert.graduateSchool = info.graduateSchool
       teacherState.teacherCert.subject = info.subject
       teacherState.teacherCert.gradCertificate = info.gradCertificate

+ 8 - 0
src/views/role-auth/teacherAuth/components/cert-brief/index.tsx

@@ -1,6 +1,8 @@
 import { state } from '@/state'
+import { scrollAnimation } from '@/util/scroll'
 import { ElButton, ElCol, ElRow } from 'element-plus'
 import { defineComponent } from 'vue'
+import { teacherState } from '../../teacherState'
 import styles from './index.module.less'
 export const getAssetsHomeFile = (fileName: string) => {
   const path = `../../../images/${fileName}`
@@ -109,6 +111,12 @@ export default defineComponent({
               type="primary"
               class="rounded w-40 !h-[38px]"
               disabled={this.auth.status}
+              onClick={() => {
+                const currentY =
+                  document.documentElement.scrollTop || document.body.scrollTop
+                scrollAnimation(currentY, 0)
+                teacherState.authStatus = true
+              }}
             >
               {this.auth.text}
             </ElButton>

+ 21 - 5
src/views/role-auth/teacherAuth/components/cert-info/index.tsx

@@ -11,7 +11,8 @@ import {
   ElRadioButton,
   ElCheckbox,
   ElLink,
-  ElMessage
+  ElMessage,
+  dayjs
 } from 'element-plus'
 import { defineComponent } from 'vue'
 import { teacherState } from '../../teacherState'
@@ -37,6 +38,19 @@ export default defineComponent({
       return !!(users.idCardNo && users.realName)
     }
   },
+  mounted() {
+    if (this.userAuth) {
+      const users = state.user.data || {}
+      teacherState.teacherCert.realName = users.realName
+      teacherState.teacherCert.idCardNo = users.idCardNo
+      teacherState.teacherCert.gender = users.gender
+      teacherState.teacherCert.birthdate = dayjs(users.birthdate).format(
+        'YYYY-MM-DD'
+      )
+
+      this.agreeStatus = true
+    }
+  },
   methods: {
     onIdCardValidate() {
       const idCardNo = teacherState.teacherCert.idCardNo
@@ -47,8 +61,6 @@ export default defineComponent({
       if (!checkIDCard(idCardNo || '')) {
         return false
       }
-
-      console.log(this.getSex(idCardNo))
       teacherState.teacherCert.birthdate = this.getBirth(idCardNo)
       teacherState.teacherCert.gender = this.getSex(idCardNo)
     },
@@ -76,7 +88,6 @@ export default defineComponent({
     onSubmit() {
       try {
         ;(this as any).$refs.certForm.validate(async (_: boolean) => {
-          console.log(_)
           if (_) {
             if (!this.agreeStatus) {
               return ElMessage.error('请阅读并同意协议')
@@ -99,6 +110,7 @@ export default defineComponent({
     }
   },
   render() {
+    console.log(teacherState.teacherCert)
     return (
       <ElForm
         ref={'certForm'}
@@ -120,6 +132,7 @@ export default defineComponent({
         >
           <ElInput
             v-model={teacherState.teacherCert.realName}
+            disabled={this.userAuth}
             placeholder="请输入您的真实姓名"
           />
         </ElFormItem>
@@ -133,7 +146,9 @@ export default defineComponent({
               message: '请输入身份证号'
             },
             {
-              pattern: /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/,
+              pattern: this.userAuth
+                ? ''
+                : /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/,
               message: '请输入正确的身份证号',
               trigger: 'blur'
             }
@@ -141,6 +156,7 @@ export default defineComponent({
         >
           <ElInput
             v-model={teacherState.teacherCert.idCardNo}
+            disabled={this.userAuth}
             onBlur={this.onIdCardValidate}
             placeholder="请输入您的身份证号码"
           />

+ 19 - 6
src/views/role-auth/teacherAuth/components/edu-information/index.tsx

@@ -13,6 +13,7 @@ import ColUpload from '@/components/col-upload'
 import request from '@/helpers/request'
 import deepClone from '@/helpers/deep-clone'
 import iconTeacherAuth from '../../../images/icon_teacher_auth.png'
+import { getUserInfo } from '@/state'
 
 export default defineComponent({
   name: 'auth',
@@ -20,7 +21,7 @@ export default defineComponent({
     return {
       labelWidth: '140px',
       loading: false,
-      popupStatus: true
+      popupStatus: false
     }
   },
   methods: {
@@ -36,6 +37,10 @@ export default defineComponent({
             })
             ElMessage.success('提交成功')
             this.loading = false
+            teacherState.active = 0
+            teacherState.authStatus = false
+            // 重新获取用户信息
+            await getUserInfo()
           }
         })
       } catch {
@@ -76,21 +81,29 @@ export default defineComponent({
         </ElFormItem>
         <ElFormItem labelWidth={this.labelWidth} label="毕业证书(选填)">
           <ColUpload
-            modelValue={teacherState.teacherCert.gradCertificate}
+            v-model:modelValue={teacherState.teacherCert.gradCertificate}
             accept=".png, .jpg"
           />
         </ElFormItem>
         <ElFormItem labelWidth={this.labelWidth} label="学位证书(选填)">
-          <ElInput
+          <ColUpload
+            v-model:modelValue={teacherState.teacherCert.degreeCertificate}
+            accept=".png, .jpg"
+          />
+          {/* <ElInput
             v-model={teacherState.teacherCert.degreeCertificate}
             placeholder="请输入您的毕业院校"
-          />
+          /> */}
         </ElFormItem>
         <ElFormItem labelWidth={this.labelWidth} label="教师资格证(选填)">
-          <ElInput
+          <ColUpload
+            v-model:modelValue={teacherState.teacherCert.teacherCertificate}
+            accept=".png, .jpg"
+          />
+          {/* <ElInput
             v-model={teacherState.teacherCert.teacherCertificate}
             placeholder="请输入您的毕业院校"
-          />
+          /> */}
         </ElFormItem>
 
         <ElFormItem>

+ 28 - 12
src/views/user-info/components/users/index.tsx

@@ -1,9 +1,16 @@
 import { defineComponent } from 'vue'
 import iconTeacher from '@/common/images/icon_teacher.png'
 import { ElTag } from 'element-plus'
+import { state } from '@/state'
+import { userInfo } from 'os'
 
 export default defineComponent({
   name: 'users',
+  computed: {
+    userInfo() {
+      return state.user.data
+    }
+  },
   render() {
     return (
       <div class="bg-white rounded-[6px] text-center pt-[30px] pb-8 flex items-center flex-col">
@@ -11,22 +18,31 @@ export default defineComponent({
 
         <p class="text-[#1A1A1A] text-lg pt-4">李老师</p>
 
-        <div class="pt-3 pb-6">
-          <ElTag round color="#fff" class="mx-1 !border-[#2DC7AA]">
-            老师认证
-          </ElTag>
-          <ElTag round color="#fff" class="mx-1 !border-[#2DC7AA]">
-            音乐人认证
-          </ElTag>
-        </div>
+        {(this.userInfo.entryFlag == 1 || this.userInfo.musicianFlag) && (
+          <div class="pt-3 pb-6">
+            {this.userInfo.entryFlag === 1 && (
+              <ElTag round color="#fff" class="mx-1 !border-[#2DC7AA]">
+                老师认证
+              </ElTag>
+            )}
+            {this.userInfo.musicianFlag === 1 && (
+              <ElTag round color="#fff" class="mx-1 !border-[#2DC7AA]">
+                音乐人认证
+              </ElTag>
+            )}
+          </div>
+        )}
 
         <div class="text-[14px] text-[#666] flex items-center justify-center">
-          <span class="pr-3 flex items-center justify-center leading-6">
-            粉丝<b class="text-black text-xl pl-1 pb-[2px]">134</b>
-          </span>
           <span class="flex items-center justify-center leading-6">
-            帖子<b class="text-black text-xl pl-1 pb-[2px]">124</b>
+            粉丝
+            <b class="text-black text-xl pl-1 pb-[2px]">
+              {this.userInfo.fansNum || 0}
+            </b>
           </span>
+          {/* <span class="pl-3 flex items-center justify-center leading-6">
+            帖子<b class="text-black text-xl pl-1 pb-[2px]">124</b>
+          </span> */}
         </div>
       </div>
     )

+ 11 - 0
src/views/user-info/music-class/index.module.less

@@ -17,4 +17,15 @@
   .musicListItem:hover {
     box-shadow: 0px 2px 7px 0px rgba(0, 0, 0, 0.04);
   }
+
+  .badge {
+    display: inline;
+
+    :global {
+      .el-badge__content.is-fixed {
+        top: -2px;
+        right: 0;
+      }
+    }
+  }
 }

+ 58 - 8
src/views/user-info/music-class/index.tsx

@@ -1,4 +1,4 @@
-import { ElButton, ElTabPane, ElTabs } from 'element-plus'
+import { ElBadge, ElButton, ElTabPane, ElTabs } from 'element-plus'
 import { defineComponent } from 'vue'
 import styles from './index.module.less'
 import List from './list'
@@ -7,24 +7,74 @@ export default defineComponent({
   name: 'music-class',
   data() {
     return {
-      activeName: 'PASS'
+      activeName: 'PASS',
+      num: {
+        doing: 0,
+        pass: 0,
+        unPass: 0
+      }
     }
   },
+
   render() {
     return (
       <div class={[styles.liveClass, 'relative pb-5']}>
-        <ElButton round type="primary" class="absolute right-11 top-4">
-          新建直播课
+        <ElButton
+          round
+          type="primary"
+          class="absolute right-11 top-4 z-10"
+          onClick={() => {
+            this.$router.push({
+              path: '/userInfo/musicOperation'
+            })
+          }}
+        >
+          新建乐谱
         </ElButton>
         <ElTabs v-model={this.activeName}>
           <ElTabPane label="已上架" name="PASS">
-            {this.activeName === 'PASS' && <List auditStatus="PASS" />}
+            {this.activeName === 'PASS' && (
+              <List
+                auditStatus="PASS"
+                onNumber={(data: any) => {
+                  this.num = data
+                }}
+              />
+            )}
           </ElTabPane>
           <ElTabPane label="审核中" name="DOING">
-            {this.activeName === 'DOING' && <List auditStatus="DOING" />}
+            {this.activeName === 'DOING' && (
+              <List
+                auditStatus="DOING"
+                onNumber={(data: any) => {
+                  this.num = data
+                }}
+              />
+            )}
           </ElTabPane>
-          <ElTabPane label="审核失败" name="UNPASS">
-            {this.activeName === 'UNPASS' && <List auditStatus="UNPASS" />}
+          <ElTabPane
+            // label="审核失败"
+            name="UNPASS"
+            v-slots={{
+              label: () => (
+                <ElBadge
+                  class={styles.badge}
+                  value={this.num.unPass}
+                  hidden={this.num.unPass === 0}
+                >
+                  审核失败
+                </ElBadge>
+              )
+            }}
+          >
+            {this.activeName === 'UNPASS' && (
+              <List
+                auditStatus="UNPASS"
+                onNumber={(data: any) => {
+                  this.num = data
+                }}
+              />
+            )}
           </ElTabPane>
         </ElTabs>
       </div>

+ 13 - 66
src/views/user-info/music-class/list.tsx

@@ -12,6 +12,10 @@ export default defineComponent({
     auditStatus: {
       type: String,
       default: ''
+    },
+    onNumber: {
+      type: Function,
+      default: (data: any) => {}
     }
   },
   data() {
@@ -45,11 +49,17 @@ export default defineComponent({
             }
           }
         )
-        this.list = data.rows || []
-        this.pageInfo.total = data.total
-        if (data.total <= 0) {
+        this.list = data.list.rows || []
+        this.pageInfo.total = data.list.total
+        if (data.list.total <= 0) {
           this.dataShow = true
         }
+        // 统计数据
+        this.onNumber({
+          doing: data.doing || 0,
+          pass: data.pass || 0,
+          unPass: data.unPass || 0
+        })
       } catch {}
       if (this.dataShow) {
         this.loading = false
@@ -119,69 +129,6 @@ export default defineComponent({
           pageSizes={this.pageInfo.page_size}
           pagination={this.getList}
         />
-        {/* <div class="flex flex-wrap px-10">
-          {this.list.map((item: any) => (
-            <div class="w-1/3 pt-8">
-              <ElSkeleton
-                loading={this.loading}
-                animated
-                style={{ width: '262px', margin: '0 auto' }}
-                count={1}
-                v-slots={{
-                  template: () => (
-                    <>
-                      <ElSkeletonItem
-                        variant="image"
-                        style={{ width: '100%', height: '175px' }}
-                      ></ElSkeletonItem>
-                      <div class="mx-2.5 py-3.5 border-b border-b-[#F2F2F2]">
-                        <div class="text-lg leading-none font-medium whitespace-nowrap overflow-hidden text-ellipsis">
-                          <ElSkeletonItem variant="h3"></ElSkeletonItem>
-                        </div>
-                        <div class="text-sm text-[#999] pt-2.5">
-                          <ElSkeletonItem
-                            variant="p"
-                            style={{ width: '50%' }}
-                          ></ElSkeletonItem>
-                        </div>
-                      </div>
-
-                      <div class="mx-2.5 py-4 flex items-center">
-                        <ElSkeletonItem
-                          variant="circle"
-                          style={{
-                            width: '22px',
-                            height: '22px',
-                            marginRight: '5px'
-                          }}
-                        ></ElSkeletonItem>
-                        <ElSkeletonItem
-                          variant="p"
-                          style={{ width: '20%' }}
-                        ></ElSkeletonItem>
-                        <p style={{ width: '45%' }}></p>
-                        <ElSkeletonItem
-                          variant="p"
-                          style={{ width: '20%' }}
-                        ></ElSkeletonItem>
-                      </div>
-                    </>
-                  )
-                }}
-              >
-                <Item class="cursor-pointer" item={item} />
-              </ElSkeleton>
-            </div>
-          ))}
-        </div>
-
-        <Pagination
-          total={this.pageInfo.total}
-          v-model:page={this.pageInfo.page}
-          limit={this.pageInfo.limit}
-          pageSizes={this.pageInfo.page_size}
-          pagination={this.getList}
-        /> */}
 
         {this.dataShow && <ColEmpty />}
       </>

+ 0 - 0
src/views/user-info/music-operation/index.module.less


+ 30 - 0
src/views/user-info/music-operation/index.tsx

@@ -0,0 +1,30 @@
+import { ElForm, ElFormItem, ElInput } from 'element-plus'
+import { defineComponent } from 'vue'
+
+export default defineComponent({
+  name: 'music-operation',
+  data() {
+    const query = this.$route.query
+    return {
+      type: query.type || 'create'
+    }
+  },
+  render() {
+    return (
+      <>
+        <div class="text-base text-[#333] leading-none px-6 py-5 border-b border-b-[#E5E5E5]">
+          {this.type === 'create' ? '新建乐谱' : '编辑乐谱'}
+        </div>
+
+        <ElForm>
+          <ElFormItem label="MusicXML文件" prop="name">
+            <ElInput placeholder="请输入乐谱名称" />
+          </ElFormItem>
+          <ElFormItem label="是否带节拍器" prop="name">
+            <ElInput placeholder="请输入乐谱名称" />
+          </ElFormItem>
+        </ElForm>
+      </>
+    )
+  }
+})

+ 31 - 10
src/views/user-info/practice-setting/index.tsx

@@ -93,7 +93,7 @@ export default defineComponent({
 
       // 获取课程设置
       const setting = await request.post(
-        '/api-teacher/teacherFreeTime/getDetail',
+        '/api-website/teacherFreeTime/getDetail',
         {
           data: {
             defaultFlag: 1
@@ -128,13 +128,13 @@ export default defineComponent({
         })
         const to = this.timerObject
         this.form = {
-          enableFlag: sr.enableFlag,
+          enableFlag: sr.enableFlag ? 1 : 0,
           courseMinutes: sr.courseMinutes,
           freeMinutes: sr.freeMinutes,
           subjectIdTemp: tempIds.join(','),
           subjectId: tempIds,
           subjectPrice: tempPrices,
-          skipHolidayFlag: sr.skipHolidayFlag,
+          skipHolidayFlag: sr.skipHolidayFlag ? 1 : 0,
           setting:
             to.monday.length > 0 ||
             to.tuesday.length > 0 ||
@@ -173,13 +173,12 @@ export default defineComponent({
       } catch {}
     },
     onChoiceTimer(item: any, status: boolean) {
-      console.log(item, 'item')
+      // console.log(item, 'item')
       this.form.setting = status ? '已设置' : ''
       this.timerObject = item
       this.timerStatus = false
     },
     onChoice(item: any) {
-      console.log(item, '2323')
       const tempItem = item || []
       this.form.subjectId = tempItem
       this.form.subjectIdTemp = tempItem.join(',') || ''
@@ -212,7 +211,7 @@ export default defineComponent({
       return subject ? subject.name : ''
     },
     onFormatter(e: any) {
-      console.log(verifyNumberIntegerAndFloat(e.target.value))
+      // console.log(verifyNumberIntegerAndFloat(e.target.value))
       e.target.value = verifyNumberIntegerAndFloat(e.target.value)
     },
     async onSubmit() {
@@ -346,10 +345,10 @@ export default defineComponent({
           ))}
           <ElFormItem label="是否跳过节假日">
             <ElRadioGroup v-model={this.form.skipHolidayFlag}>
-              <ElRadioButton label="1" class="mr-3 w-24">
+              <ElRadioButton label={1} class="mr-3 w-24">
               </ElRadioButton>
-              <ElRadioButton label="0" class="w-24">
+              <ElRadioButton label={0} class="w-24">
               </ElRadioButton>
             </ElRadioGroup>
@@ -368,7 +367,25 @@ export default defineComponent({
         </ElForm>
 
         <div class="border-t border-t-[#E5E5E5] text-center pt-6 pb-7">
-          <ElButton class="!w-40 !h-[38px]">重置</ElButton>
+          <ElButton
+            class="!w-40 !h-[38px]"
+            onClick={() => {
+              // 重置数据
+              this.form = {
+                enableFlag: 1,
+                courseMinutes: null as any,
+                freeMinutes: 0,
+                subjectIdTemp: '',
+                subjectId: [] as any[],
+                subjectPrice: [] as any[],
+                skipHolidayFlag: 1,
+                setting: '未设置'
+              }
+              ;(this as any).$refs.form.resetFields()
+            }}
+          >
+            重置
+          </ElButton>
           <ElButton
             type="primary"
             class="!w-40 !h-[38px]"
@@ -378,7 +395,11 @@ export default defineComponent({
           </ElButton>
         </div>
 
-        <ElDialog modelValue={this.timerStatus} showClose>
+        <ElDialog
+          modelValue={this.timerStatus}
+          onUpdate:modelValue={val => (this.timerStatus = val)}
+          showClose
+        >
           <PracticeTimer
             onChoice={this.onChoiceTimer}
             onClose={() => {

+ 55 - 50
src/views/user-info/video-class/list.tsx

@@ -52,65 +52,70 @@ export default defineComponent({
           this.dataShow = true
         }
       } catch {}
-      setTimeout(() => {
+      if (this.dataShow) {
         this.loading = false
-      }, 500)
+      } else {
+        setTimeout(() => {
+          this.loading = false
+        }, 500)
+      }
     }
   },
   render() {
     return (
       <>
         <div class="flex flex-wrap px-10">
-          {this.list.map((item: any) => (
-            <div class="w-1/3 pt-8">
-              <ElSkeleton
-                loading={this.loading}
-                animated
-                style={{ width: '262px', margin: '0 auto' }}
-                count={1}
-                v-slots={{
-                  template: () => (
-                    <>
-                      <ElSkeletonItem
-                        variant="image"
-                        // class="w-full h-[175px]"
-                        style={{ width: '100%', height: '175px' }}
-                      ></ElSkeletonItem>
-                      <div class="mx-2.5 py-3.5 border-b border-b-[#F2F2F2]">
-                        <div class="text-lg leading-none font-medium whitespace-nowrap overflow-hidden text-ellipsis">
-                          <ElSkeletonItem variant="h3"></ElSkeletonItem>
-                        </div>
-                        <div class="text-sm text-[#999] pt-2.5">
-                          <ElSkeletonItem
-                            variant="p"
-                            style={{ width: '50%' }}
-                          ></ElSkeletonItem>
-                        </div>
+          <ElSkeleton
+            loading={this.loading}
+            animated
+            class="flex"
+            count={3}
+            v-slots={{
+              template: () => (
+                <div class="w-1/3">
+                  <div class="flex flex-col pt-8 w-[262px] m-auto">
+                    <ElSkeletonItem
+                      variant="image"
+                      style={{ width: '100%', height: '175px' }}
+                    ></ElSkeletonItem>
+                    <div class="mx-2.5 py-3.5 border-b border-b-[#F2F2F2]">
+                      <div class="text-lg leading-none font-medium whitespace-nowrap overflow-hidden text-ellipsis">
+                        <ElSkeletonItem variant="h3"></ElSkeletonItem>
                       </div>
-
-                      <div class="mx-2.5 py-4 flex items-center">
-                        <ElSkeletonItem
-                          variant="circle"
-                          style={{
-                            width: '22px',
-                            height: '22px',
-                            marginRight: '5px'
-                          }}
-                        ></ElSkeletonItem>
-                        <ElSkeletonItem
-                          variant="p"
-                          style={{ width: '20%' }}
-                        ></ElSkeletonItem>
-                        <p style={{ width: '45%' }}></p>
+                      <div class="text-sm text-[#999] pt-2.5">
                         <ElSkeletonItem
                           variant="p"
-                          style={{ width: '20%' }}
+                          style={{ width: '50%' }}
                         ></ElSkeletonItem>
                       </div>
-                    </>
-                  )
-                }}
-              >
+                    </div>
+
+                    <div class="mx-2.5 py-4 flex items-center">
+                      <ElSkeletonItem
+                        variant="circle"
+                        style={{
+                          width: '22px',
+                          height: '22px',
+                          marginRight: '5px'
+                        }}
+                      ></ElSkeletonItem>
+                      <ElSkeletonItem
+                        variant="p"
+                        style={{ width: '20%' }}
+                      ></ElSkeletonItem>
+                      <p style={{ width: '45%' }}></p>
+                      <ElSkeletonItem
+                        variant="p"
+                        style={{ width: '20%' }}
+                      ></ElSkeletonItem>
+                    </div>
+                  </div>
+                </div>
+              )
+            }}
+          >
+            {this.list.map((item: any) => (
+              <div class="w-1/3 pt-8">
                 <Item
                   item={{
                     backgroundPic: item.lessonCoverUrl,
@@ -122,9 +127,9 @@ export default defineComponent({
                     courseNum: item.lessonCount
                   }}
                 />
-              </ElSkeleton>
-            </div>
-          ))}
+              </div>
+            ))}
+          </ElSkeleton>
         </div>
 
         <Pagination

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