Browse Source

Merge branch '03/12permission' of http://git.dayaedu.com/molingzhide/dy-admin-manager into 03/12permission

lex-xin 4 years ago
parent
commit
c12f9044b0
96 changed files with 908 additions and 597 deletions
  1. 0 0
      dist/index.html
  2. 1 1
      dist/static/css/chunk-5d0da7dc.e21876a4.css
  3. 1 1
      dist/static/css/chunk-71b38ba0.bb27d388.css
  4. 0 0
      dist/static/css/chunk-7cacdd72.0700bf84.css
  5. 0 0
      dist/static/js/app.09b8891b.js
  6. 0 0
      dist/static/js/chunk-00832bd2.84ef4f62.js
  7. 0 0
      dist/static/js/chunk-00e01cbe.6fc5239e.js
  8. 0 0
      dist/static/js/chunk-00e01cbe.d62437f9.js
  9. 0 0
      dist/static/js/chunk-0135c62e.3d0bf170.js
  10. 0 0
      dist/static/js/chunk-0135c62e.b2943f2c.js
  11. 0 0
      dist/static/js/chunk-06b8e50e.d46f6e68.js
  12. 0 0
      dist/static/js/chunk-06b8e50e.ea954514.js
  13. 0 0
      dist/static/js/chunk-07594f33.30d2f577.js
  14. 0 0
      dist/static/js/chunk-07594f33.b5bdb3c8.js
  15. 0 0
      dist/static/js/chunk-26e8d6c4.f4762811.js
  16. 0 0
      dist/static/js/chunk-2928a062.0beea48c.js
  17. 0 0
      dist/static/js/chunk-2928a062.fae2691a.js
  18. 0 0
      dist/static/js/chunk-2d0ac1af.10ace8aa.js
  19. 0 0
      dist/static/js/chunk-2d0b9f85.a773f28a.js
  20. 0 0
      dist/static/js/chunk-301cfd2c.ddd723b9.js
  21. 0 0
      dist/static/js/chunk-30b26ad2.9254b080.js
  22. 0 0
      dist/static/js/chunk-31c9df52.5a38d09c.js
  23. 0 0
      dist/static/js/chunk-359433da.0f619bea.js
  24. 0 0
      dist/static/js/chunk-359433da.919f3e2f.js
  25. 0 0
      dist/static/js/chunk-3645c22a.3e3be6ae.js
  26. 0 0
      dist/static/js/chunk-3645c22a.6123eb45.js
  27. 0 0
      dist/static/js/chunk-37592ffa.5693c467.js
  28. 0 0
      dist/static/js/chunk-3d44bd43.893de49a.js
  29. 0 0
      dist/static/js/chunk-3e99cc06.c1158dfa.js
  30. 0 0
      dist/static/js/chunk-3e99cc06.f7a80a0e.js
  31. 0 0
      dist/static/js/chunk-478490b6.251430d1.js
  32. 0 0
      dist/static/js/chunk-495439dc.aefbb4dd.js
  33. 0 0
      dist/static/js/chunk-5013150b.0a235066.js
  34. 0 0
      dist/static/js/chunk-5013150b.0c7796b1.js
  35. 0 0
      dist/static/js/chunk-54ae4d6e.87b9f49c.js
  36. 0 0
      dist/static/js/chunk-54ae4d6e.df69c996.js
  37. 0 0
      dist/static/js/chunk-56598bd6.db584b0a.js
  38. 0 0
      dist/static/js/chunk-58005682.67e2bc88.js
  39. 0 0
      dist/static/js/chunk-5b1fcc5a.3e068abd.js
  40. 0 0
      dist/static/js/chunk-5b1fcc5a.e734fe23.js
  41. 0 0
      dist/static/js/chunk-5c25e4f8.e3e8c151.js
  42. 0 0
      dist/static/js/chunk-5d0da7dc.de6d0f0a.js
  43. 0 0
      dist/static/js/chunk-5f5ffb00.d0507d80.js
  44. 0 0
      dist/static/js/chunk-5f5ffb00.d8cf76ea.js
  45. 0 0
      dist/static/js/chunk-611077a4.96a7cfd3.js
  46. 0 0
      dist/static/js/chunk-71b38ba0.b65cdd2d.js
  47. 0 0
      dist/static/js/chunk-731b88cb.20c6d8a2.js
  48. 0 0
      dist/static/js/chunk-731b88cb.5de97573.js
  49. 0 0
      dist/static/js/chunk-7386f3b0.5a4786bf.js
  50. 0 0
      dist/static/js/chunk-7386f3b0.c961cdf3.js
  51. 0 0
      dist/static/js/chunk-739fed81.0f2793a3.js
  52. 0 0
      dist/static/js/chunk-73bf40f8.ae620601.js
  53. 0 0
      dist/static/js/chunk-73fa30ca.4f0c7228.js
  54. 0 0
      dist/static/js/chunk-76f1424b.d378f3fa.js
  55. 0 0
      dist/static/js/chunk-787a507d.31b83b36.js
  56. 0 0
      dist/static/js/chunk-7cacdd72.1af8ea3b.js
  57. 0 0
      dist/static/js/chunk-96adb77c.5660d044.js
  58. 0 0
      dist/static/js/chunk-9dec6de0.d3bc92ff.js
  59. 0 0
      dist/static/js/chunk-a1d792d2.7faf5aa7.js
  60. 0 0
      dist/static/js/chunk-a23e2ba4.73170b20.js
  61. 0 0
      dist/static/js/chunk-a23e2ba4.cd5db44f.js
  62. 0 0
      dist/static/js/chunk-badb2aba.2487ca34.js
  63. 0 0
      dist/static/js/chunk-c0b0701c.ff05e981.js
  64. 0 0
      dist/static/js/chunk-c2ac2236.fee32a46.js
  65. 0 0
      dist/static/js/chunk-c65f7f72.edcb10e6.js
  66. 0 0
      dist/static/js/chunk-c7f5974e.8fb04197.js
  67. 0 0
      dist/static/js/chunk-d44e0732.aacc506e.js
  68. 0 0
      dist/static/js/chunk-d5006d16.c21f3c8c.js
  69. 0 0
      dist/static/js/chunk-da63f3ae.1a7ec31f.js
  70. 0 0
      dist/static/js/chunk-da63f3ae.93bcc4bd.js
  71. 0 0
      dist/static/js/chunk-e60d0406.062f86c5.js
  72. 0 0
      dist/static/js/chunk-f1a49b48.33b971a1.js
  73. 0 0
      dist/static/js/chunk-f1a49b48.8fdf8286.js
  74. 0 0
      dist/static/js/chunk-fb41c584.7d6fa192.js
  75. 8 1
      src/api/buildTeam.js
  76. 4 0
      src/constant/index.js
  77. 1 0
      src/permission.js
  78. 3 1
      src/router/index.js
  79. 2 1
      src/router/notKeepAliveList.js
  80. 3 1
      src/utils/searchArray.js
  81. 6 0
      src/utils/vueFilter.js
  82. 30 24
      src/views/businessManager/orderManager/financeManager.vue
  83. 15 34
      src/views/businessManager/orderManager/income.vue
  84. 13 0
      src/views/reportForm/api.js
  85. 164 0
      src/views/reportForm/downList.vue
  86. 44 17
      src/views/resetTeaming/index.vue
  87. 1 1
      src/views/serverDetail/index.vue
  88. 6 8
      src/views/teamBuild/components/soundSetComponents/chioseSoundList.vue
  89. 131 167
      src/views/teamBuild/components/soundSetComponents/soundSetCore.vue
  90. 28 12
      src/views/teamBuild/components/teamBaseInfo.vue
  91. 155 0
      src/views/teamBuild/components/teamRemainTime.vue
  92. 29 5
      src/views/teamDetail/componentClass/classCompound.vue
  93. 4 4
      src/views/teamDetail/components/courseList.vue
  94. 6 134
      src/views/teamDetail/components/resetClass.vue
  95. 59 32
      src/views/teamDetail/components/studentList.vue
  96. 194 153
      src/views/teamDetail/teamDetailedList.vue

File diff suppressed because it is too large
+ 0 - 0
dist/index.html


+ 1 - 1
dist/static/css/chunk-9dec6de0.6ae5ecbc.css → dist/static/css/chunk-5d0da7dc.e21876a4.css

@@ -1 +1 @@
-[data-v-ce3060a2] .dialog-footer{margin-top:10px}.dialog-footer[data-v-ce3060a2]{float:right}.number-input[data-v-e3750f40]{width:100%}.number-input[data-v-e3750f40] .el-input__inner{text-align:left}.number-input[data-v-55ad3016]{width:100%}.number-input[data-v-55ad3016] .el-input__inner{text-align:left}.courseDiv[data-v-3d34d1da]{height:45px;line-height:45px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.courseDiv[data-v-3d34d1da],[data-v-3d34d1da] .header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}[data-v-3d34d1da] .header{width:100%;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}[data-v-3d34d1da] .header>span:first-child{display:-webkit-box;display:-ms-flexbox;display:flex}[data-v-3d34d1da] .header>span:first-child:before{content:"";display:block;width:5px;background-color:#14928a;margin-right:10px;border-radius:2px;height:48px}[data-v-3d34d1da] .header .icon{font-size:18px;font-weight:400;margin-right:20px}[data-v-3d34d1da] .header /deep/.el-collapse-item__wrap{border-bottom:none!important}.title[data-v-225a961a]{line-height:44px}.fixedBox[data-v-225a961a]{position:fixed;bottom:20px;right:10px;z-index:100;width:200px;background-color:#fff;font-size:14px}.fixedBox .boxWrap[data-v-225a961a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.fixedBox .boxWrap i[data-v-225a961a]{font-size:18px;cursor:pointer}[data-v-225a961a] .el-divider--horizontal{margin:0!important}.minus[data-v-225a961a]{float:right;line-height:44px;padding-right:20px;font-size:20px;cursor:pointer}
+[data-v-ce3060a2] .dialog-footer{margin-top:10px}.dialog-footer[data-v-ce3060a2]{float:right}.number-input[data-v-e3750f40]{width:100%}.number-input[data-v-e3750f40] .el-input__inner{text-align:left}.number-input[data-v-55ad3016]{width:100%}.number-input[data-v-55ad3016] .el-input__inner{text-align:left}.courseDiv[data-v-3d34d1da]{height:45px;line-height:45px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.courseDiv[data-v-3d34d1da],[data-v-3d34d1da] .header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}[data-v-3d34d1da] .header{width:100%;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}[data-v-3d34d1da] .header>span:first-child{display:-webkit-box;display:-ms-flexbox;display:flex}[data-v-3d34d1da] .header>span:first-child:before{content:"";display:block;width:5px;background-color:#14928a;margin-right:10px;border-radius:2px;height:48px}[data-v-3d34d1da] .header .icon{font-size:18px;font-weight:400;margin-right:20px}[data-v-3d34d1da] .header /deep/.el-collapse-item__wrap{border-bottom:none!important}.title[data-v-14d3870f]{line-height:44px}.fixedBox[data-v-14d3870f]{position:fixed;bottom:20px;right:10px;z-index:100;width:200px;background-color:#fff;font-size:14px}.fixedBox .boxWrap[data-v-14d3870f]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.fixedBox .boxWrap i[data-v-14d3870f]{font-size:18px;cursor:pointer}[data-v-14d3870f] .el-divider--horizontal{margin:0!important}.topWrap[data-v-14d3870f]{margin:10px 0;padding:0 20px 0 0}.minus[data-v-14d3870f]{float:right;line-height:44px;padding-right:20px;font-size:20px;cursor:pointer}

+ 1 - 1
dist/static/css/chunk-301cfd2c.166f4fd5.css → dist/static/css/chunk-71b38ba0.bb27d388.css

@@ -1 +1 @@
-.newBand[data-v-d4045b8a]{display:inline-block}[data-v-d4045b8a] .el-input-number.is-controls-right .el-input__inner{text-align:left}.setWidth[data-v-d4045b8a]{display:inline-block}.lookTitle[data-v-d4045b8a]{height:40px;line-height:40px;font-weight:700;background-color:#edeef0;padding:0 20px;margin-bottom:20px}.showShop[data-v-d4045b8a]{height:40px;line-height:40px;width:150px;background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed;color:#333;opacity:1;border-radius:4px;border:1px solid #dcdfe6;padding:0 15px;margin-right:10px}.shopListWrap[data-v-d4045b8a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}
+.newBand[data-v-6fcf95dc]{display:inline-block}[data-v-6fcf95dc] .el-input-number.is-controls-right .el-input__inner{text-align:left}.setWidth[data-v-6fcf95dc]{display:inline-block}.lookTitle[data-v-6fcf95dc]{height:40px;line-height:40px;font-weight:700;background-color:#edeef0;padding:0 20px;margin-bottom:20px}.showShop[data-v-6fcf95dc]{height:40px;line-height:40px;width:150px;background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed;color:#333;opacity:1;border-radius:4px;border:1px solid #dcdfe6;padding:0 15px;margin-right:10px}.shopListWrap[data-v-6fcf95dc]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}

+ 0 - 0
dist/static/css/chunk-7cacdd72.4b1b8eaa.css → dist/static/css/chunk-7cacdd72.0700bf84.css


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


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-00832bd2.84ef4f62.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-00e01cbe.6fc5239e.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-00e01cbe.d62437f9.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-0135c62e.3d0bf170.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-0135c62e.b2943f2c.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-06b8e50e.d46f6e68.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-06b8e50e.ea954514.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-07594f33.30d2f577.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-07594f33.b5bdb3c8.js


+ 0 - 0
dist/static/js/chunk-26e8d6c4.5349811a.js → dist/static/js/chunk-26e8d6c4.f4762811.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-2928a062.0beea48c.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-2928a062.fae2691a.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-2d0ac1af.10ace8aa.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-2d0b9f85.a773f28a.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-301cfd2c.ddd723b9.js


+ 0 - 0
dist/static/js/chunk-30b26ad2.dddb0ecf.js → dist/static/js/chunk-30b26ad2.9254b080.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-31c9df52.5a38d09c.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-359433da.0f619bea.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-359433da.919f3e2f.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-3645c22a.3e3be6ae.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-3645c22a.6123eb45.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-37592ffa.5693c467.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-3d44bd43.893de49a.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-3e99cc06.c1158dfa.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-3e99cc06.f7a80a0e.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-478490b6.251430d1.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-495439dc.aefbb4dd.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-5013150b.0a235066.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-5013150b.0c7796b1.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-54ae4d6e.87b9f49c.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-54ae4d6e.df69c996.js


+ 0 - 0
dist/static/js/chunk-56598bd6.064a057a.js → dist/static/js/chunk-56598bd6.db584b0a.js


+ 0 - 0
dist/static/js/chunk-58005682.ae7b1c80.js → dist/static/js/chunk-58005682.67e2bc88.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-5b1fcc5a.3e068abd.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-5b1fcc5a.e734fe23.js


+ 0 - 0
dist/static/js/chunk-5c25e4f8.557a479b.js → dist/static/js/chunk-5c25e4f8.e3e8c151.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-5d0da7dc.de6d0f0a.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-5f5ffb00.d0507d80.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-5f5ffb00.d8cf76ea.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-611077a4.96a7cfd3.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-71b38ba0.b65cdd2d.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-731b88cb.20c6d8a2.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-731b88cb.5de97573.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-7386f3b0.5a4786bf.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-7386f3b0.c961cdf3.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-739fed81.0f2793a3.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-73bf40f8.ae620601.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-73fa30ca.4f0c7228.js


+ 0 - 0
dist/static/js/chunk-76f1424b.77399b3e.js → dist/static/js/chunk-76f1424b.d378f3fa.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-787a507d.31b83b36.js


+ 0 - 0
dist/static/js/chunk-7cacdd72.757c2a14.js → dist/static/js/chunk-7cacdd72.1af8ea3b.js


+ 0 - 0
dist/static/js/chunk-96adb77c.05f12b37.js → dist/static/js/chunk-96adb77c.5660d044.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-9dec6de0.d3bc92ff.js


+ 0 - 0
dist/static/js/chunk-a1d792d2.acad5cd5.js → dist/static/js/chunk-a1d792d2.7faf5aa7.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-a23e2ba4.73170b20.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-a23e2ba4.cd5db44f.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-badb2aba.2487ca34.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-c0b0701c.ff05e981.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-c2ac2236.fee32a46.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-c65f7f72.edcb10e6.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-c7f5974e.8fb04197.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-d44e0732.aacc506e.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-d5006d16.c21f3c8c.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-da63f3ae.1a7ec31f.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-da63f3ae.93bcc4bd.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-e60d0406.062f86c5.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-f1a49b48.33b971a1.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-f1a49b48.8fdf8286.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-fb41c584.7d6fa192.js


+ 8 - 1
src/api/buildTeam.js

@@ -1548,4 +1548,11 @@ export function sendWaitRenewMessage(data) {
     data:data
   })
 }
-
+// 查询进行中乐团能否补招
+export function checkCanReg(data) {
+  return request2({
+    url: api + `/studentManage/checkCanReg`,
+    method: 'get',
+    params:data,
+  })
+}

+ 4 - 0
src/constant/index.js

@@ -260,3 +260,7 @@ export const clientType = {
 // export const musicScoreCategoriesId = [
 //   ''
 // ]
+export const downListType = {
+  1:'订单列表',
+  2:'财务管理'
+}

+ 1 - 0
src/permission.js

@@ -14,6 +14,7 @@ const whiteList = ['/login'] // no redirect whitelist
 let isOpen = false
 
 router.onError((error) => {
+  console.log(error)
   if (error instanceof Error) {
     const isChunkLoadFailed = error.name.indexOf('chunk')
     const targetPath = router.history.pending.fullPath;

+ 3 - 1
src/router/index.js

@@ -432,7 +432,9 @@ export const asyncRoutes = {
   teamPayInfo:()=>import('@/views/courseListManager'),
   serverDetail:()=>import('@/views/serverDetail'),
   // 未在班级学员
-  notClassStudent:()=>import('@/views/main/notClassStudent')
+  notClassStudent:()=>import('@/views/main/notClassStudent'),
+  // 报表中心 下载列表
+  downList:()=>import('@/views/reportForm/downList')
 }
 
 export default router

+ 2 - 1
src/router/notKeepAliveList.js

@@ -102,6 +102,7 @@ export default [
   '/business/ArrearageStudents',
   '/operateManager/serverDetail', // 服务指标明细
   '/business/remedy', //
-  '/setSilder/setSilder'
+  '/setSilder/setSilder',
+  '/downList', //下载列表
   // '/business/feeAudit',
 ]

+ 3 - 1
src/utils/searchArray.js

@@ -1,5 +1,5 @@
 // 搜索用的下拉数据列表
-import { payOrderType, auditType, auditPaymentType, orderServerType, orderAuditType, rewardModeType,classTime,musicClassType,ProbationPeriodStatus,musicGroupType } from '../constant'
+import { payOrderType, auditType, auditPaymentType, orderServerType, orderAuditType, rewardModeType,classTime,musicClassType,ProbationPeriodStatus,downListType,musicGroupType } from '../constant'
 // 课程类型
 export const courseType = [
   { label: "声部课", value: "SINGLE" },
@@ -225,6 +225,8 @@ export const orderAuditTypeList = getValueForKey(orderAuditType)
 export const rewardModeTypeList = getValueForKey(rewardModeType)
 export const musicClassTypeList =  getValueForKey(musicClassType)
 export const ProbationPeriodList = getValueForKey(ProbationPeriodStatus)
+export const downTypeList = getValueForKey(downListType)
+//downListType
 function getValueForKey (obj) {
   let arr = []
   for (let k in obj) {

+ 6 - 0
src/utils/vueFilter.js

@@ -735,3 +735,9 @@ Vue.filter('gradeTypeFormat', value => {
 Vue.filter('ProbationPeriod', value => {
   return constant.ProbationPeriodStatus[value]
 })
+
+// 下载列表 类型
+// downListType
+Vue.filter('downListType', value => {
+  return constant.downListType[value]
+})

+ 30 - 24
src/views/businessManager/orderManager/financeManager.vue

@@ -883,7 +883,7 @@ export default {
         },
         data: qs.stringify(cleanDeep(data)),
         url,
-        responseType: "blob",
+        responseType: "json",
       };
       this.$confirm("您确定导出报表", "提示", {
         confirmButtonText: "确定",
@@ -893,30 +893,36 @@ export default {
         .then(() => {
           load.startLoading();
           axios(options).then((res) => {
-            let blob = new Blob([res.data], {
-              // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
-              type: "application/vnd.ms-excel;charset=utf-8",
-              //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
-            });
-            let objectUrl = URL.createObjectURL(blob);
-            let link = document.createElement("a");
-            let nowTime = new Date();
-            let ymd =
-              nowTime.getFullYear() +
-              "" +
-              (nowTime.getMonth() + 1) +
-              "" +
-              nowTime.getDate() +
-              "" +
-              nowTime.getHours() +
-              "" +
-              nowTime.getMinutes();
-            let fname = "报表导出" + new Date().getTime() + ".xls"; //下载文件的名字
-            link.href = objectUrl;
-            link.setAttribute("download", fname);
-            document.body.appendChild(link);
-            link.click();
             load.endLoading();
+            if(res.data.code == 200) {
+              this.$message.info(res.data.data);
+            } else {
+              this.$message.error(res.data.msg);
+            }
+            // let blob = new Blob([res.data], {
+            //   // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
+            //   type: "application/vnd.ms-excel;charset=utf-8",
+            //   //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
+            // });
+            // let objectUrl = URL.createObjectURL(blob);
+            // let link = document.createElement("a");
+            // let nowTime = new Date();
+            // let ymd =
+            //   nowTime.getFullYear() +
+            //   "" +
+            //   (nowTime.getMonth() + 1) +
+            //   "" +
+            //   nowTime.getDate() +
+            //   "" +
+            //   nowTime.getHours() +
+            //   "" +
+            //   nowTime.getMinutes();
+            // let fname = "报表导出" + new Date().getTime() + ".xls"; //下载文件的名字
+            // link.href = objectUrl;
+            // link.setAttribute("download", fname);
+            // document.body.appendChild(link);
+            // link.click();
+            // load.endLoading();
           });
         })
         .catch(() => {});

+ 15 - 34
src/views/businessManager/orderManager/income.vue

@@ -439,7 +439,7 @@ export default {
         },
         data: qs.stringify(cleanDeep(data)),
         url,
-        responseType: "blob",
+        responseType: "json",
       };
       this.$confirm("您确定导出报表", "提示", {
         confirmButtonText: "确定",
@@ -450,40 +450,21 @@ export default {
           load.startLoading();
           axios(options)
             .then((res) => {
-              let blob = new Blob([res.data], {
-                // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
-                type: "application/vnd.ms-excel;charset=utf-8",
-                //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
-              });
-              let text = new Response(blob).text();
-              text.then((res) => {
-                // 判断是否报错
-                if (res.indexOf("code") != -1) {
-                  let json = JSON.parse(res);
-                  this.$message.error(json.msg);
-                } else {
-                  let objectUrl = URL.createObjectURL(blob);
-                  let link = document.createElement("a");
-                  let nowTime = new Date();
-                  let ymd =
-                    nowTime.getFullYear() +
-                    "" +
-                    (nowTime.getMonth() + 1) +
-                    "" +
-                    nowTime.getDate() +
-                    "" +
-                    nowTime.getHours() +
-                    "" +
-                    nowTime.getMinutes();
-                  let fname = "报表导出" + new Date().getTime()+'.xls'; //下载文件的名字
-                  link.href = objectUrl;
-                  link.setAttribute("download", fname);
-                  document.body.appendChild(link);
-                  link.click();
-                }
-              });
-
               load.endLoading();
+              if(res.data.code == 200) {
+                this.$message.info(res.data.data);
+              } else {
+                this.$message.error(res.data.msg);
+              }
+              // this.$confirm(res.data.data, "提示", {
+              //   confirmButtonText: "确定",
+              //   cancelButtonText: "取消",
+              //   type: "warning",
+              // }).then(() => {
+
+              // }).catch(err => {
+
+              // })
             })
             .catch((error) => {
               this.$message.error("导出数据失败,请联系管理员");

+ 13 - 0
src/views/reportForm/api.js

@@ -0,0 +1,13 @@
+import request from '@/utils/request'
+import request2 from '@/utils/request2'
+import qs from 'qs'
+let api = '/api-web'
+
+
+export function managerDownloadList(data) {
+  return request2({
+    url: api + '/managerDownload/queryPage',
+    method: 'get',
+    params: data
+  })
+}

+ 164 - 0
src/views/reportForm/downList.vue

@@ -0,0 +1,164 @@
+<!--  -->
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      下载列表
+    </h2>
+    <div class="m-core">
+      <save-form :inline="true" :model="searchForm" @submit="search" @reset='onReSet'>
+        <el-form-item prop="type">
+          <!-- downTypeList -->
+           <el-form-item>
+          <el-select
+            v-model.trim="searchForm.type"
+            clearable
+            filterable
+            placeholder="文件搜索类型"
+          >
+            <el-option
+              v-for="(item, index) in downTypeList"
+              :key="index"
+              :value="item.value"
+              :label="item.label"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        </el-form-item>
+
+        <el-form-item>
+          <el-button native-type="submit" type="primary">搜索</el-button>
+          <el-button native-type="reset" type="danger">重置</el-button>
+        </el-form-item>
+      </save-form>
+      <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+        >
+          <el-table-column
+            width="120"
+            align="center"
+            prop="id"
+            label="下载编号"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="name"
+            label="文件名"
+          ></el-table-column>
+          <el-table-column align="center" prop="type" label="文件类型">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.type |downListType }}
+              </div>
+            </template>
+          </el-table-column>
+
+          <el-table-column align="center" prop="status" label="文件状态">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.status == 0 ? "生成中" : "已生成" }}
+              </div>
+            </template>
+          </el-table-column>
+
+          <el-table-column align="center" prop=" createTime" label="生成时间">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.createTime | dateForMinFormat }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column prop="fileUrl" label="下载地址" align="center">
+            <template slot-scope="scope">
+              <div>
+                <a
+                  :href="scope.row.fileUrl"
+                  target="view_window"
+                  v-if="scope.row.status != 0"
+                  style="color: #14928a"
+                  >点击下载</a
+                >
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import pagination from "@/components/Pagination/index";
+import load from "@/utils/loading";
+import {downTypeList} from "@/utils/searchArray"
+import { managerDownloadList } from "./api";
+export default {
+  components: { pagination },
+  data() {
+    return {
+      searchForm: {
+        order: null,
+        userId: null,
+      },
+      downTypeList,
+      tableList: [],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    // 获取分部
+
+    this.init();
+  },
+  methods: {
+    init() {
+      this.getList();
+    },
+    async getList() {
+      try {
+        const res = await managerDownloadList({
+          ...this.searchForm,
+          page: this.rules.page,
+          rows: this.rules.limit,
+        });
+        this.tableList = res.data.rows;
+        this.rules.total = res.data.total;
+      } catch (e) {
+        console.log(e);
+      }
+    },
+    search() {
+      this.rules.page = 1;
+      this.getList();
+    },
+    onReSet() {
+      this.searchForm.type = null;
+      this.search()
+    },
+  },
+};
+</script>
+<style lang='scss' scoped>
+</style>

+ 44 - 17
src/views/resetTeaming/index.vue

@@ -9,22 +9,17 @@
         {{ musicGroupType[team_status] }}
       </p>
       <!-- navMenu -->
-      <tab-router
-        v-model="activeIndex"
-        type="card"
-        ref="tab"
-
-      >
-       <!-- @tab-click="handleClick" -->
+      <tab-router v-model="activeIndex" type="card" ref="tab">
+        <!-- @tab-click="handleClick" -->
         <el-tab-pane
           label="基本信息"
           lazy
           v-if="permission('/teamBaseInfo')"
           name="1"
         >
-        <!--  v-if="activeIndex == 'teamBaseInfo'" -->
+          <!--  v-if="activeIndex == 'teamBaseInfo'" -->
           <teamBaseInfo
-          v-if="activeIndex == '1'"
+            v-if="activeIndex == '1'"
             @getBaseInfo="getBaseInfo"
             :baseInfo="baseInfo"
             @getName="getName"
@@ -40,7 +35,13 @@
         >
           <resetSound v-if="activeIndex == '2'" />
         </el-tab-pane>
-        <el-tab-pane lazy label="预报名信息" name="9" :disabled="!teamid" v-if="permission('/teamForecastName')">
+        <el-tab-pane
+          lazy
+          label="预报名信息"
+          name="9"
+          :disabled="!teamid"
+          v-if="permission('/teamForecastName')"
+        >
           <!--         v-if="
             team_status == 'PRE_APPLY' ||
             team_status == 'PRE_BUILD_FEE' ||
@@ -52,8 +53,14 @@
             :isedit="team_status == 'PRE_APPLY'"
           />
         </el-tab-pane>
-        <el-tab-pane lazy label="乐器清单" name="10" :disabled="!teamid" v-if="permission('/teamMusicList')" >
-          <musicOrder  v-if="activeIndex == '10'"/>
+        <el-tab-pane
+          lazy
+          label="乐器清单"
+          name="10"
+          :disabled="!teamid"
+          v-if="permission('/teamMusicList')"
+        >
+          <musicOrder v-if="activeIndex == '10'" />
         </el-tab-pane>
         <el-tab-pane
           label="老师列表"
@@ -71,7 +78,19 @@
         >
           <studentList :teamid="teamid" v-if="activeIndex == '7'" />
         </el-tab-pane>
-
+        <!-- teamRemainTime -->
+        <el-tab-pane
+          label="剩余时长"
+          lazy
+          v-if="permission('/teamRemainTime')"
+          name="12"
+          :disabled="!teamid"
+        >
+          <teamRemainTime
+            v-if="activeIndex == '12' && musicGroupInfo"
+            :musicGroupInfo="musicGroupInfo"
+          />
+        </el-tab-pane>
         <el-tab-pane
           label="班级列表"
           lazy
@@ -120,7 +139,12 @@
           />
         </el-tab-pane>
         <!--   v-if="permission('/resetTeaming/coursePlan')" -->
-        <el-tab-pane label="乐团日志" :disabled="!teamid" name="11"  v-if="permission('/teamJournal')">
+        <el-tab-pane
+          label="乐团日志"
+          :disabled="!teamid"
+          name="11"
+          v-if="permission('/teamJournal')"
+        >
           <teamJournal :teamid="teamid" v-if="activeIndex == 11" />
         </el-tab-pane>
         <!-- <el-tab-pane label="新增小班课"
@@ -149,6 +173,8 @@ import courseList from "@/views/teamDetail/components/courseList";
 import forecastName from "@/views/teamBuild/forecastName";
 import musicOrder from "@/views/teamDetail/teamDetailedList";
 import teamJournal from "@/views/teamBuild/components/teamJournal";
+import teamRemainTime from "@/views/teamBuild/components/teamRemainTime";
+
 import { permission } from "@/utils/directivePage";
 import { getTeamBaseInfo } from "@/api/buildTeam";
 import { musicGroupType } from "@/constant";
@@ -166,6 +192,7 @@ export default {
     forecastName,
     musicOrder,
     teamJournal,
+    teamRemainTime,
   },
   name: "resetTeaming",
   data() {
@@ -248,15 +275,15 @@ export default {
       this.teamid = this.$route.query.id;
       // this.team_status = this.$route.query.team_status;
       // console.log('切换tab',val)
-   this.$refs.tab.tab(val);
+      this.$refs.tab.tab(val);
       // this.activeIndex = val.name;
     },
     permission(str) {
       return permission(str);
     },
     getName(val) {
-      this.name = val
-          this.teamid = this.$route.query.id;
+      this.teamName = val;
+      this.teamid = this.$route.query.id;
     },
   },
 };

+ 1 - 1
src/views/serverDetail/index.vue

@@ -80,7 +80,7 @@
             end-placeholder="结束日期"
             :clearable="false"
             @change="changeWeek"
-            :picker-options="bigin"
+            :picker-options="bigin()"
           >
           </el-date-picker>
         </el-form-item>

+ 6 - 8
src/views/teamBuild/components/soundSetComponents/chioseSoundList.vue

@@ -1,13 +1,11 @@
 <template>
   <div>
-
     <div class="soundWrap">
-
       <el-checkbox-group v-model.trim="activeSoundList">
         <div class="itemList">
           <div class="categroy"
-               v-for="(item,index) in soundList"
-               :key="index">
+               v-for="item in soundList"
+               :key="item.id">
             <p>{{item.name}}</p>
             <el-checkbox :label="sound.id"
                          @change="changeCheck"
@@ -42,7 +40,6 @@ export default {
     console.log(this.soundList)
   },
   activated () {
-    console.log(this.soundList)
   },
   methods: {
     generates () {
@@ -56,7 +53,7 @@ export default {
 <style lang="scss" scoped>
 .soundWrap {
   width: 100%;
-  overflow: auto;
+  overflow-y: auto;
   .itemList {
     display: flex;
     flex-direction: row;
@@ -65,7 +62,7 @@ export default {
     flex-grow: 1;
     height: 300px;
     max-height: 300px;
-    overflow: auto;
+    overflow-y: auto;
     .categroy {
       z-index: 100;
       width: 150px;
@@ -83,6 +80,7 @@ export default {
         background-color: #edeef0;
         margin-bottom: 15px;
         text-align: center;
+        font-size: 14px;
       }
     }
   }
@@ -99,4 +97,4 @@ export default {
   flex-direction: row;
   justify-content: flex-end;
 }
-</style>
+</style>

+ 131 - 167
src/views/teamBuild/components/soundSetComponents/soundSetCore.vue

@@ -1,7 +1,6 @@
 <template>
   <div>
     <div
-
       :class="isField ? 'soundBtnWrap' : 'soundBtnFixed'"
       v-if="!basdisabled"
     >
@@ -87,7 +86,7 @@
         </el-collapse>
       </el-checkbox-group>
     </div>
-    <el-dialog title="声部选择" :visible.sync="soundVisible" destroy-on-close>
+    <el-dialog title="声部选择" :visible.sync="soundVisible" v-if="soundVisible">
       <chioseSoundList
         :soundList="soundList"
         :activeSound="activeSound"
@@ -102,11 +101,9 @@ import { formatData } from "@/utils/utils";
 import {
   getSubject,
   getDefaultSubject,
-
   getSoundTree,
   findMusicGroupSubjectInfo,
   updateSubjectInfo,
-
   getSubjectGoods,
 } from "@/api/buildTeam";
 import dayjs from "dayjs";
@@ -137,18 +134,15 @@ export default {
     if (this.$route.query.id) {
       this.teamid = this.$route.query.id;
     }
-      window.addEventListener("scroll", this.getScroll);
+    window.addEventListener("scroll", this.getScroll);
     this.init();
   },
   deactivated() {
     window.removeEventListener("scroll", this.getScroll);
   },
   beforeDestroy() {
-    sessionStorage.setItem(
-      `${this.teamid}sound`,
-      JSON.stringify(this.activeSoundList)
-    );
-     window.removeEventListener("scroll", this.getScroll);
+    this.setStore();
+    window.removeEventListener("scroll", this.getScroll);
   },
   activated() {
     if (
@@ -161,23 +155,29 @@ export default {
         this.init();
       }
     }
-      this.teamStatus = this.$route.query.type;
-     if (
-        this.teamStatus == "look" ||
-        this.teamStatus == "teamAudit" ||
-        this.teamStatus == "feeAudit"||
-        this.teamStatus ==  "teamCanceled"
-      ) {
-        this.basdisabled = true;
-      } else {
-        this.basdisabled = false;
-      }
+    this.teamStatus = this.$route.query.type;
+    if (
+      this.teamStatus == "look" ||
+      this.teamStatus == "teamAudit" ||
+      this.teamStatus == "feeAudit" ||
+      this.teamStatus == "teamCanceled"
+    ) {
+      this.basdisabled = true;
+    } else {
+      this.basdisabled = false;
+    }
   },
-  deactivated(){
-    this.activeSoundList = []
+  deactivated() {
+    this.activeSoundList = [];
   },
 
   methods: {
+    setStore() {
+      sessionStorage.setItem(
+        `${this.teamid}sound`,
+        JSON.stringify(this.activeSoundList)
+      );
+    },
     init() {
       // 获取第一页的数据
       this.topfor = this.$store.getters.topinfo;
@@ -197,98 +197,100 @@ export default {
       let sotrage = JSON.parse(
         sessionStorage.getItem(`${this.$route.query.id}sound`)
       );
-      if (sotrage&&sotrage[0]?.id) {
-        this.activeSoundList = sotrage;
-        let activeSound = [];
 
-        this.activeSoundList.forEach((item) => {
-          activeSound.push(item.id);
-        });
-        this.chioseActiveSound = activeSound;
-      } else {
-        getSoundTree({ tenantId: 1 }).then((res) => {
-          if (res.code == 200) {
-            this.soundList = res.data.rows;
-            if (this.teamStatus == "newTeam" && type && section) {
-              getDefaultSubject({
-                chargeTypeId: type,
-                organId: section,
-                number: 1,
-              }).then((res) => {
-                if (res.code == 200) {
-                  let activeSound = [];
-                  this.activeSoundList = res.data.map((item) => {
-                    activeSound.push(item.id);
-                    return this.initSound(item);
-                  });
-                  this.activeSound = activeSound;
-                  this.chioseActiveSound = activeSound;
-                  this.changeActiveSound(activeSound.join(","));
-                }
-              });
-            } else {
-              this.teamid = this.$route.query.id;
-              if (this.teamid) {
-                findMusicGroupSubjectInfo({ musicGroupId: this.teamid }).then(
-                  (res) => {
-                    if (res.code == 200) {
-                      let activeSound = [];
-                      this.activeSoundList = res.data?.musicGroupSubjectPlans.map(
-                        (item) => {
-                          activeSound.push(item.subjectId);
-                          return {
-                            id: parseInt(item.subjectId),
-                            sound: item.subName,
-                            expectedStudentNum: item.expectedStudentNum,
-                            chioseMusic: [],
-                            markChioseList: [],
-                            goodsList: [],
-                            markList: [],
-                          };
-                        }
-                      );
-                      this.activeSound = activeSound;
-                      this.chioseActiveSound = activeSound;
-                      this.changeActiveSound(activeSound.join(","));
-                      // 格式化商品和教辅
-                      res.data.musicGroupSubjectGoodsGroups.forEach((shop) => {
-                        let index = findIndex(this.activeSoundList, (o) => {
-                          return o.id == shop.subjectId;
-                        });
+      getSoundTree({ tenantId: 1 }).then((res) => {
+        if (res.code == 200) {
+          this.soundList = res.data.rows;
+        }
+        if (sotrage && sotrage[0]?.id) {
+          this.activeSoundList = sotrage;
+          let activeSound = [];
 
-                        if (index != -1) {
-                          if (shop.type == "ACCESSORIES") {
-                            shop.goodsIdList.split(",").forEach((item) => {
-                              this.activeSoundList[index].markChioseList.push(
-                                parseInt(item)
-                              );
-                            });
-                          } else if (shop.type == "INSTRUMENT") {
-                            // 商品
-                            let typeJson = Object.keys(
-                              JSON.parse(shop.kitGroupPurchaseTypeJson)
+          this.activeSoundList.forEach((item) => {
+            activeSound.push(item.id);
+          });
+          this.chioseActiveSound = activeSound;
+           this.activeSound = activeSound;
+           this.changeActiveSound(activeSound.join(","));
+        } else {
+          if (this.teamStatus == "newTeam" && type && section) {
+            getDefaultSubject({
+              chargeTypeId: type,
+              organId: section,
+              number: 1,
+            }).then((res) => {
+              if (res.code == 200) {
+                let activeSound = [];
+                this.activeSoundList = res.data.map((item) => {
+                  activeSound.push(item.id);
+                  return this.initSound(item);
+                });
+                this.activeSound = activeSound;
+                this.chioseActiveSound = activeSound;
+                this.changeActiveSound(activeSound.join(","));
+              }
+            });
+          } else {
+            this.teamid = this.$route.query.id;
+            if (this.teamid) {
+              findMusicGroupSubjectInfo({ musicGroupId: this.teamid }).then(
+                (res) => {
+                  if (res.code == 200) {
+                    let activeSound = [];
+                    this.activeSoundList = res.data?.musicGroupSubjectPlans.map(
+                      (item) => {
+                        activeSound.push(item.subjectId);
+                        return {
+                          id: parseInt(item.subjectId),
+                          sound: item.subName,
+                          expectedStudentNum: item.expectedStudentNum,
+                          chioseMusic: [],
+                          markChioseList: [],
+                          goodsList: [],
+                          markList: [],
+                        };
+                      }
+                    );
+                    this.activeSound = activeSound;
+                    this.chioseActiveSound = activeSound;
+                    this.changeActiveSound(activeSound.join(","));
+                    // 格式化商品和教辅
+                    res.data.musicGroupSubjectGoodsGroups.forEach((shop) => {
+                      let index = findIndex(this.activeSoundList, (o) => {
+                        return o.id == shop.subjectId;
+                      });
+
+                      if (index != -1) {
+                        if (shop.type == "ACCESSORIES") {
+                          shop.goodsIdList.split(",").forEach((item) => {
+                            this.activeSoundList[index].markChioseList.push(
+                              parseInt(item)
                             );
-                            this.activeSoundList[index].chioseMusic.push({
-                              musical: parseInt(shop.goodsIdList),
-                              type: typeJson,
-                              groupPrice: shop.price,
-                              borrowPrice: shop.depositFee,
-                              groupRemissionCourseFee: Boolean(
-                                shop.groupRemissionCourseFee
-                              ),
-                            });
-                          }
+                          });
+                        } else if (shop.type == "INSTRUMENT") {
+                          // 商品
+                          let typeJson = Object.keys(
+                            JSON.parse(shop.kitGroupPurchaseTypeJson)
+                          );
+                          this.activeSoundList[index].chioseMusic.push({
+                            musical: parseInt(shop.goodsIdList),
+                            type: typeJson,
+                            groupPrice: shop.price,
+                            borrowPrice: shop.depositFee,
+                            groupRemissionCourseFee: Boolean(
+                              shop.groupRemissionCourseFee
+                            ),
+                          });
                         }
-                      });
-                    }
+                      }
+                    });
                   }
-                );
-              }
+                }
+              );
             }
           }
-        });
-      }
-
+        }
+      });
       getSubject({ tenantId: 1 }).then((res) => {
         if (res.code == 200) {
           this.childSoundList = res.data;
@@ -499,43 +501,9 @@ export default {
         });
       });
       if (this.teamStatus == "newTeam") {
-        // createTeam(obj).then((res) => {
-        //   if (res.code == 200) {
-        //     // 成功 跳转到乐团报名详情
-        //     // let query = this.$route.query;
-        //     // query.type = "teamDraft";
-        //     // this.$router.push({
-        //     //   query: {
-        //     //     ...query,
-        //     //     id: res.data,
-        //     //   },
-        //     // });
-        //     // this.$emit("chiosetab", 2);
-        //     // this.$emit("getBaseInfo", obj);
-        //     //  zheli
-
-        //     // 把第3步单独拆出来做成独立的模块
-        //     this.$confirm("乐团创建成功,是否提交审核?", "提示", {
-        //       confirmButtonText: "确定",
-        //       cancelButtonText: "取消",
-        //       type: "warning",
-        //     })
-        //       .then(() => {
-        //         this.teamStatus = "teamDraft";
-        //         this.teamid = res.data;
-        //         this.submitInfo(1);
-        //       })
-        //       .catch(() => {
-        //         this.$store.dispatch("delVisitedViews", this.$route);
-        //         this.$router.push({
-        //           path: "/teamList",
-        //         });
-        //       });
-        //   }
-        // });
       } else {
         obj.musicGroupId = this.teamid;
-        console.log(obj,type)
+        console.log(obj, type);
         if (type) {
           obj.musicGroupStatus = "AUDIT";
         } else {
@@ -560,31 +528,28 @@ export default {
               });
             })
             .catch(() => {});
-        }else{
-           updateSubjectInfo(obj).then((res) => {
-          if (res.code == 200) {
-
-            if(type == 1){
-               this.$message.success('已提交审核')
-               let query = this.$route.query;
-            this.$store.dispatch("delVisitedViews", this.$route);
-            this.$router.push({
-              path: "/teamList",
-              query: {
-                ...query,
-              },
-            });
-
-            }else{
-               this.$message.success('保存成功')
+        } else {
+          updateSubjectInfo(obj).then((res) => {
+            if (res.code == 200) {
+              this.setStore();
+              if (type == 1) {
+                this.$message.success("已提交审核");
+                let query = this.$route.query;
+                this.$store.dispatch("delVisitedViews", this.$route);
+                this.$router.push({
+                  path: "/teamList",
+                  query: {
+                    ...query,
+                  },
+                });
+              } else {
+                this.$message.success("保存成功");
+              }
+              // this.$emit("chiosetab", 2);
+              // 创建乐团,只会到声部了
             }
-            // this.$emit("chiosetab", 2);
-            // 创建乐团,只会到声部了
-
-          }
-        });
+          });
         }
-
       }
     },
     deleteRow() {
@@ -654,7 +619,6 @@ export default {
       return obj;
     },
     getScroll() {
-
       this.scrollTop =
         window.pageYOffset ||
         document.documentElement.scrollTop ||

+ 28 - 12
src/views/teamBuild/components/teamBaseInfo.vue

@@ -334,7 +334,7 @@
         <!-- 审批或者草稿的下一步 -->
         <div
           class="nextBtn"
-          @click="gotoNext(teamStatus == 'newTeam' ? 0 : 1)"
+          @click="gotoNext"
           v-if="!basdisabled"
         >
           保存
@@ -441,7 +441,6 @@ export default {
 
       paymentForm: {
         paymentExpireDate: null,
-
         // feeType: null
       },
       paymentRules: {
@@ -507,7 +506,12 @@ export default {
   deactivated() {},
   beforeDestroy() {
     // this.topFrom.paymentExpireDate = this.paymentExpireDate;
-    if (this.$route.query.id) {
+   this.setStore()
+  },
+
+  methods: {
+    setStore(){
+       if (this.$route.query.id) {
       sessionStorage.setItem(
         `${this.$route.query.id}base`,
         JSON.stringify(this.topFrom)
@@ -515,9 +519,7 @@ export default {
     } else {
       sessionStorage.setItem(`newTeambase`, JSON.stringify(this.topFrom));
     }
-  },
-
-  methods: {
+    },
     //|| this.teamStatus === 'teamAudit'
     isNotEditing: function () {
       return !(
@@ -691,7 +693,7 @@ export default {
       });
     },
     chioseSchool(val) {},
-    gotoNext(num) {
+    gotoNext() {
       this.$refs["topinfo"].validate((valid, object) => {
         if (!valid) {
           this.$message.error("请填写建团必要参数");
@@ -774,11 +776,12 @@ export default {
             repairUserId: this.topFrom.repairUserId || null,
             feeType: this.topFrom.feeType,
           };
-          obj.musicGroupPaymentEntities = [];
+          // obj.musicGroupPaymentEntities = [];
           // createTeam
           if (this.teamStatus != "newTeam") {
             resetTeamBaseInfo(obj).then((res) => {
               if (res.code == 200) {
+                 this.setStore()
                 if (this.teamStatus == "teamDraft") {
                   this.$message.success("保存成功");
                   // 跳到第二页
@@ -791,15 +794,22 @@ export default {
             });
           } else {
             // 发送建团申请 成功后跳到第二页
-
             createTeam(obj).then((res) => {
               if (res.code == 200) {
                 // this.$message.success('建团成功,请设置声部信息')
                 // this.$emit("chiosetab", 1);
-                this.$confirm("新建乐团成功是否继续设置声部信息", "提示", {
+                const h = this.$createElement;
+                this.$msgbox({
+                  title: "提示",
+                  message: h("p", null, [
+                    h("p", null, "新建与团成功 "),
+                    h("p", null, "请设置声部信息"),
+                  ]),
+                  type: "warning",
                   confirmButtonText: "是",
                   cancelButtonText: "否",
-                  type: "warning",
+                  showCancelButton: true,
+                  customClass: "messageBox-prompt-test",
                 })
                   .then(() => {
                     this.$router.push({
@@ -809,8 +819,9 @@ export default {
                         team_status: "DRAFT",
                       }),
                     });
-                    this.$emit("handleClick", { name: "2" });
+
                     this.$emit("getName", this.topFrom.name);
+                    this.$emit("handleClick", { name: "2" });
                   })
                   .catch(() => {
                     this.$router.push({
@@ -1119,6 +1130,11 @@ export default {
 };
 </script>
 <style lang="scss" >
+.messageBox-prompt-test {
+  .el-message-box__status {
+    top: 25% !important;
+  }
+}
 .base-container {
   overflow: auto;
   // display: flex;

+ 155 - 0
src/views/teamBuild/components/teamRemainTime.vue

@@ -0,0 +1,155 @@
+<template>
+  <div>
+    <el-form ref="search" :model="search" inline @submit.stop.native="submit" @reset.stop.native="reset">
+      <el-form-item prop="keyword">
+        <el-input v-model.trim="search.keyword" clearable placeholder="学生姓名(手机、编号)"/>
+      </el-form-item>
+      <el-form-item prop="hastimer">
+        <el-select v-model.trim="search.hastimer" clearable placeholder="是否存在剩余时长">
+          <el-option label="是" value="1"></el-option>
+          <el-option label="否" value="0"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" native-type="submit">搜索</el-button>
+        <el-button type="danger" native-type="reset">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table
+      :data="filterlist"
+      :header-cell-style="{background:'#EDEEF0',color:'#444'}"
+    >
+      <!-- <el-table-column
+        prop="type"
+        label="课程类型"
+        align="center"
+      >
+        <template slot-scope="scope">
+          {{courseType[scope.row.type]}}
+        </template>
+      </el-table-column> -->
+      <el-table-column
+        prop="userId"
+        label="学生编号"
+        width="120"
+        align="center"
+      >
+        <template slot-scope="scope">
+          <copy-text>{{scope.row.userId}}</copy-text>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="username"
+        label="学生姓名"
+        width="120"
+        align="center"
+      >
+        <template slot-scope="scope">
+          <copy-text>{{scope.row.username}}</copy-text>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="phone"
+        label="学生手机号"
+        width="140"
+        align="center"
+      >
+        <template slot-scope="scope">
+          <copy-text>{{scope.row.phone}}</copy-text>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="课程时长"
+      >
+        <template slot-scope="scope">
+          <el-tag
+            style="margin-right: 5px;margin-bottom: 5px;"
+            v-for="item in scope.row.mapDtos"
+            :key="item.key"
+            type="info"
+            size="small"
+          >{{courseType[item.key]}}: {{item.value}}分钟</el-tag>
+        </template>
+      </el-table-column>
+      <!-- <el-table-column
+        prop="time"
+        label="剩余时长(分)"
+        align="center"
+      /> -->
+    </el-table>
+  </div>
+</template>
+
+<script>
+import { queryStudentSubTotalCourseTimes } from '@/views/teamDetail/api'
+import { courseType } from '@/constant'
+export default {
+  props: ['detail'],
+  data() {
+    return {
+      courseType,
+      list: [],
+      filterlist: [],
+      extra: [],
+      search: {
+        keyword: '',
+        hastimer: ''
+      }
+    }
+  },
+  mounted() {
+    this.FetchDetail()
+  },
+  methods: {
+    array2object(list = []) {
+      const data = {}
+      for (const item of list) {
+        data[item.key] = item.value
+      }
+      return data
+    },
+    filter() {
+      const { keyword, hastimer } = this.search
+      this.filterlist = this.list.filter(item => {
+        const user = !keyword || (
+          ('' + item.userId).indexOf(keyword) > -1 ||
+          ('' + item.phone).indexOf(keyword) > -1 ||
+          ('' + item.username).indexOf(keyword) > -1
+        )
+        const length = item.mapDtos.filter(dto => dto.value > 0).length
+        const couse = !hastimer || (hastimer == '1' && length || hastimer == '0' && !length)
+        return user && couse
+      })
+    },
+    submit(evt) {
+      evt.stopPropagation()
+      evt.stopImmediatePropagation()
+      evt.preventDefault()
+      this.filter()
+    },
+    reset(evt) {
+      evt.stopPropagation()
+      evt.stopImmediatePropagation()
+      evt.preventDefault()
+      this.search = {
+        keyword: '',
+        hastimer: ''
+      }
+      this.filter()
+    },
+    async FetchDetail() {
+      try {
+        const res = await queryStudentSubTotalCourseTimes({
+          musicGroupId: this.$route.query.id,
+        })
+        this.list = res.data
+        this.filter()
+        if (res.data[0]) {
+          this.extra = res.data[0].mapDtos
+        }
+        // this.list = Object.keys(res.data).map(item => ({type: item, time: res.data[item]}))
+      } catch (error) {}
+    }
+  }
+}
+</script>

+ 29 - 5
src/views/teamDetail/componentClass/classCompound.vue

@@ -14,19 +14,36 @@
 
             <el-divider></el-divider>
           </div>
-          <el-button type="text" style="float: right" @click="clearCom"
+          <div class="topWrap">
+             <el-select
+            placeholder="请选择主班"
+            v-model="radio"
+            clearable
+            @change="changeMasterClass"
+          >
+            <el-option
+              v-for="(item, index) in dataList"
+              :label="item.name"
+              :value="item.id"
+              :key="index"
+            ></el-option>
+          </el-select>
+             <el-button type="text" style="float: right" @click="clearCom"
             >清空列表</el-button
           >
+          </div>
+
           <div>
-            <el-radio-group v-model="radio" @change="changeMasterClass">
+            <!-- <el-radio-group v-model="radio" @change="changeMasterClass"> -->
               <el-table
                 :data="dataList"
                 height="300px"
                 :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
               >
-                <el-table-column align="center" label="主班" width="110">
+                <el-table-column align="center" label="班级编号" width="110">
                   <template slot-scope="scope">
-                    <el-radio :label="scope.row.id"></el-radio>
+                    {{scope.row.id}}
+                    <!-- <el-radio :label="scope.row.id"></el-radio> -->
                   </template>
                 </el-table-column>
                 <el-table-column
@@ -69,7 +86,7 @@
                   </template>
                 </el-table-column>
               </el-table>
-            </el-radio-group>
+            <!-- </el-radio-group> -->
           </div>
           <el-button
             type="primary"
@@ -164,6 +181,9 @@ export default {
   },
   methods: {
     cancleCom(row) {
+      if(row.id== this.radio){
+        this.radio = ''
+      }
       this.$emit("cancleCompound", row);
     },
     clearCom() {
@@ -326,6 +346,10 @@ export default {
 /deep/.el-divider--horizontal {
   margin: 0 !important;
 }
+.topWrap{
+  margin: 10px 0;
+  padding: 0 20px 0 0;
+}
 .minus {
   float: right;
   line-height: 44px;

+ 4 - 4
src/views/teamDetail/components/courseList.vue

@@ -78,15 +78,15 @@
       @click="resetTimer">修改日期</div>-->
     </div>
     <!-- -->
-
+<!--  @selection-change="handleSelectionChange" -->
     <!-- 列表 -->
     <div class="tableWrap">
       <el-table :data="tableList"
                 :header-cell-style="{background:'#EDEEF0',color:'#444'}"
-                @selection-change="handleSelectionChange">
-        <el-table-column type="selection"
+               >
+        <!-- <el-table-column type="selection"
                          width="55"
-                         :selectable="checkSelectable"></el-table-column>
+                         :selectable="checkSelectable"></el-table-column> -->
         <el-table-column align='center'
                          prop="courseScheduleId"
                          label="课程编号"></el-table-column>

+ 6 - 134
src/views/teamDetail/components/resetClass.vue

@@ -43,7 +43,9 @@
           tooltip-effect="dark"
           @selection-change="handleSelectionChange"
         >
+        <!-- checkSignPostpone -->
           <el-table-column
+          :selectable="checkSignPostpone"
             type="selection"
             width="55"
             v-if="team_status == 'PROGRESS'"
@@ -149,7 +151,7 @@
                   type="text"
                   v-if="
                     team_status == 'PROGRESS' &&
-                    permission('courseSchedule/coursePostpone')
+                    permission('courseSchedule/coursePostpone')&&checkSignPostpone(scope.row)
                   "
                   @click="signPostpone(scope.row)"
                   >顺延课程</el-button
@@ -1354,139 +1356,6 @@ export default {
         }
       }
     },
-    // 提交临时班的信息
-    // submitTemporary(type) {
-    //   // 参数是一样  type为1 新增临时班
-    //   // type为2  新增声部班
-    //   // type为3 修改班级信息
-
-    //   if (type == 1) {
-    //     this.isTemporary = true;
-    //   } else {
-    //     this.isTemporary = false;
-    //   }
-
-    //   this.$refs["teacherForm"].validate((item) => {
-    //     if (item) {
-    //       let week = this.weekList;
-    //       if (this.teacherForm.isAdd != "onlyUpdateTeacher") {
-    //         if (
-    //           !week[0] ||
-    //           !week[0].startClassTime ||
-    //           !week[0].endClassTime ||
-    //           !week[0].dayOfWeek
-    //         ) {
-    //           this.$message.error("至少排一节课");
-    //           return;
-    //         }
-    //       }
-
-    //       // 这里代表排课成功  发请求  新增临时班
-    //       let classGroupName = this.className;
-    //       let classGroupTeacherMapperList = [
-    //         { userId: this.teacherForm.coreTeacher, teacherRole: "BISHOP" },
-    //       ];
-    //       for (let i in this.teacherForm.assistant) {
-    //         classGroupTeacherMapperList.push({
-    //           userId: this.teacherForm.assistant[i],
-    //           teacherRole: "TEACHING",
-    //         });
-    //       }
-    //       // let mixClassGroupId = this.teacherForm.mixClassGroupId;
-    //       let musicGroupId = this.teamid;
-    //       let startDate = this.teacherForm.courseTime;
-    //       let courseType = this.teacherForm.courseType;
-    //       let courseTimes = this.teacherForm.courseNum;
-
-    //       if (
-    //         courseTimes <= 0 &&
-    //         this.teacherForm.isAdd != "onlyUpdateTeacher"
-    //       ) {
-    //         this.$message.error("请至少排一节课");
-    //         return;
-    //       } else if (courseTimes > this.maxMun) {
-    //         this.$message.error(`一次最多排${this.maxMun}节课`);
-    //         return;
-    //       }
-    //       let students = this.activeListStudent.map((item) => {
-    //         return item.userId;
-    //       });
-    //       let holiday = this.teacherForm.checked;
-    //       let courseList = [];
-    //       for (let i in this.weekList) {
-    //         courseList.push(this.weekList[i]);
-    //       }
-    //       if (
-    //         courseList.length <= 0 &&
-    //         this.teacherForm.isAdd != "onlyUpdateTeacher"
-    //       ) {
-    //         this.$message.error("新增班级至少排一节课");
-    //         return;
-    //       }
-    //       if (this.teacherForm.isAdd == "onlyUpdateTeacher") {
-    //         startDate = null;
-    //         courseType = null;
-    //         students = null;
-    //         holiday = null;
-    //         courseTimes = null;
-    //         (courseList = null), (mineType = null);
-    //       }
-    //       //       mixClassGroupId,
-    //       let mineType = this.activeType;
-    //       let obj = {
-    //         classGroupName,
-    //         classGroupTeacherMapperList,
-    //         musicGroupId,
-    //         startDate,
-    //         courseType,
-    //         students,
-    //         holiday,
-    //         courseTimes,
-    //         courseTimeDtoList: courseList,
-    //         type: mineType,
-    //         courseAddType: this.teacherForm.isAdd,
-    //       };
-    //       if (type == 1) {
-    //         // 新增临时班级
-    //         revisionClassGroup(obj).then((res) => {
-    //           if (res.code == 200) {
-    //             // 提示修改成功
-    //             this.$message.success("修改成功");
-    //             this.infoVisible = false;
-    //             this.studentVisible = false;
-    //             this.getList();
-    //           }
-    //         });
-    //       } else if (type == 2) {
-    //         (obj.subjectId = this.teacherForm.sound),
-    //           (obj.expectStudentNum = this.teacherForm.expectStudentNum);
-    //         // 新增声部班
-    //         revisionAddClassGroup(obj).then((res) => {
-    //           if (res.code == 200) {
-    //             // 修改成功
-    //             this.$message.success("修改成功");
-    //             this.infoVisible = false;
-    //             this.studentVisible = false;
-    //             this.getList();
-    //           }
-    //         });
-    //       } else if (type == 3) {
-    //         // 乐团修改
-    //         obj.classGroupId = this.activeClass;
-    //         classGroupUpdate(obj).then((res) => {
-    //           if (res.code == 200) {
-    //             this.$message.success("修改成功");
-    //             this.infoVisible = false;
-    //             this.getList();
-    //           }
-    //         });
-    //       }
-    //     } else {
-    //       this.$message.error("请填写必要信息");
-    //       return;
-    //     }
-    //   });
-    // },
     // 新建基础技能班
     newClassHight() {
       this.$refs["newClassForm"].validate((res) => {
@@ -1703,6 +1572,9 @@ export default {
       }
       this.postponeVisible = true;
     },
+    checkSignPostpone(row){
+      return row.totalClassTimes - row.currentClassTimes >0
+    },
     handleClose() {
       // 弹窗关闭之前
       this.postponeVisible = false;

+ 59 - 32
src/views/teamDetail/components/studentList.vue

@@ -21,12 +21,19 @@
     </statistic> -->
 
     <!-- style="margin-bottom: 15px" -->
-        <p
+    <p
       style="margin-bottom: 15px; font-size: 16px; font-weight: 400"
+      v-if="
+        team_status == 'PAY' ||
+        team_status == 'APPLY' ||
+        (team_status == 'PROGRESS' && isCanReg) ||
+        team_status == 'PREPARE'
+      "
     >
-      报名截止时间:{{ applyExpireDate | formatTimer }} 缴费截止时间:{{
-        paymentExpireDate | formatTimer
-      }}
+      <span> 报名截止时间:{{ applyExpireDate | formatTimer }} </span>
+      <span v-if="team_status != 'APPLY'">
+        缴费截止时间:{{ paymentExpireDate | formatTimer }}
+      </span>
     </p>
     <div class="studentListWrap" v-if="team_status == 'PROGRESS'">
       <div
@@ -39,21 +46,21 @@
       <!-- 可以直接去学生考勤查看 -->
       <!-- <el-button type="primary" v-permission="'/studentSignin'"
               @click="gotoSignin">点名总览</el-button> -->
-      <div
+      <!-- <div
         class="newBand"
         v-permission="'studentManage/queryStudentSubTotalCourseTimes'"
         @click="viewTimer"
         style="margin-right: 15px"
       >
         剩余时长明细
-      </div>
+      </div> -->
     </div>
     <div
       style="display: flex; justify-content: space-between; align-items: center"
       v-if="
         team_status == 'PAY' ||
         team_status == 'APPLY' ||
-        team_status == 'PROGRESS' ||
+        (team_status == 'PROGRESS' && isCanReg) ||
         team_status == 'PREPARE'
       "
     >
@@ -129,9 +136,7 @@
         </div>
         <div
           v-if="
-            team_status == 'APPLY' ||
-            team_status == 'PROGRESS' ||
-            team_status == 'PREPARE'
+            team_status == 'APPLY'
           "
           v-permission="'studentRegistration/openPayment'"
           class="newBand"
@@ -190,21 +195,21 @@
               <el-button v-show="isEdit" @click="saveIsEdit">保存</el-button>
             </div>
           </div>
-          <auth :auths="'studentRegistration/openPayment'">
+          <!-- <auth :auths="'studentRegistration/openPayment'">
             <el-button
               style="background-color: #14928a; border: 1px solid #14928a"
               @click="onPartPayment"
               type="primary"
               >开启缴费</el-button
             >
-          </auth>
+          </auth> -->
           <div class="newBand" style="margin-bottom: 10px" slot="reference">
             声部报名计划
           </div>
         </el-popover>
       </div>
     </div>
-         <!-- v-if="
+    <!-- v-if="
         team_status == 'PAY' ||
         team_status == 'PROGRESS' ||
         team_status == 'PREPARE'
@@ -571,7 +576,7 @@
               <auth :auths="'studentRegistration/batchUpdateSubject'">
                 <el-button
                   type="text"
-                  v-show="scope.row.paymentStatus != 1"
+                  v-show="scope.row.paymentStatus != 2&&isShowResSound()"
                   @click="resetSubject(scope.row)"
                   >修改专业</el-button
                 >
@@ -592,7 +597,7 @@
               <!-- &&  status == "PAY"-->
               <auth
                 :auths="'studentRegistration/queryFeeDetail'"
-                v-show="scope.row.paymentStatus == 1"
+                v-show="scope.row.paymentStatus == 2"
               >
                 <el-button type="text" @click="lookdetail(scope.row)"
                   >查看</el-button
@@ -600,7 +605,7 @@
               </auth>
               <auth
                 :auths="'subjectChange/getStudentOriginal'"
-                v-show="scope.row.paymentStatus == 1"
+                v-show="scope.row.paymentStatus == 2&&isShowResSound()"
               >
                 <el-button type="text" @click="openChangeVoice(scope.row)"
                   >更改声部</el-button
@@ -933,7 +938,7 @@
         style="padding: 0 20px"
         :organId="organId"
         @close="mergeVisible = false"
-        @submited="gotoStudentList"
+        @submited="getList"
       />
     </el-dialog>
     <el-dialog
@@ -1116,7 +1121,9 @@ import {
   getTeamBaseInfo,
   getintoClass,
   resetPlanNum,
-  openPayment
+  openPayment,
+  musicGroupFound,
+  checkCanReg,
 } from "@/api/buildTeam";
 import {
   addStudent,
@@ -1139,12 +1146,12 @@ import cleanDeep from "clean-deep";
 import createUserPay from "./modals/create-user-pay.vue";
 import TimesView from "./modals/course-time-detail";
 import paymentCycle from "../../resetTeaming/modals/payment-cycle";
-
 import paymentList from "./modals/payment-list";
 import Tooltip from "@/components/Tooltip/index";
 import changeVoice from "@/views/teamBuild/modals/change-voice";
 //import changeVoice from "./modals/change-voice";
 import visit from "@/views/withdrawal-application/modals/visit";
+import mergeMusic from "@/views/teamBuild/components/merge-music";
 export default {
   name: "tstudentList",
   data() {
@@ -1369,6 +1376,8 @@ export default {
       },
       subjectVisible: false,
       multipleSelection: [],
+      isCanReg: false,
+      organId: "",
     };
   },
   components: {
@@ -1381,6 +1390,7 @@ export default {
     visit,
     qrCode,
     changeVoice,
+    mergeMusic,
   },
   created() {},
   filters: {
@@ -1416,9 +1426,16 @@ export default {
     permission(str) {
       return permission(str);
     },
-    init() {
+    async init() {
       this.teamid = this.$route.query.id;
       this.team_status = this.$route.query.team_status;
+      // 获取乐团是否能补招
+      try {
+        const ruselt = await checkCanReg({ musicGroupId: this.teamid });
+        this.isCanReg = ruselt.data;
+      } catch (e) {
+        console.log(e);
+      }
       getMusicGroupGradeList({ musicGroupId: this.teamid }).then((res) => {
         let result = res.data;
         if (res.code == 200 && result) {
@@ -1435,6 +1452,7 @@ export default {
         if (res.code == 200) {
           this.paymentExpireDate = res.data.musicGroup.paymentExpireDate;
           this.applyExpireDate = res.data.musicGroup.applyExpireDate;
+          this.organId = res.data.musicGroup.organId;
         }
       });
 
@@ -1459,17 +1477,6 @@ export default {
         }
       });
 
-      // getSubject().then(res => {
-      //   if (res.code == 200) {
-      //     this.soundList = res.data;
-      //   }
-      // })
-      // 获取乐团所有声部课班
-      // getSingleClass({ musicGroupId: this.teamid }).then(res => {
-      //   if (res.code == 200) {
-      //     this.signList = res.data;
-      //   }
-      // })
       // 获取乐团基本信息
       getMusicGroup({ musicGroupId: this.teamid }).then(
         (res) => (this.baseInfo = res.data)
@@ -1625,6 +1632,7 @@ export default {
         if (res.code == 200) {
           this.tableList = res.data.rows;
           this.rules.total = res.data.total;
+          this.getStudentStatus();
         }
       });
     },
@@ -2044,7 +2052,8 @@ export default {
               //     ...query,
               //   },
               // });
-              this.onCancel();
+              this.$store.dispatch("delVisitedViews", this.$route);
+              this.$router.push({ path: "/teamList" });
             }
           });
         })
@@ -2343,6 +2352,24 @@ export default {
     checkboxSelect(row) {
       return row.paymentStatus == 0;
     },
+    isShowResSound() {
+      /**
+       *         team_status == 'PAY' ||
+        team_status == 'APPLY' ||
+        team_status == 'PROGRESS'&&isCanReg ||
+        team_status == 'PREPARE')
+       */
+      if (this.team_status == "PAY" || this.team_status == "APPLY") {
+        return true;
+      } else if (
+        this.team_status == "PROGRESS" ||
+        this.team_status == "PREPARE"
+      ) {
+        return this.isCanReg
+      }else {
+        return false
+      }
+    },
   },
   watch: {
     quitVisible(val) {

+ 194 - 153
src/views/teamDetail/teamDetailedList.vue

@@ -22,210 +22,251 @@
     </div> -->
     <div class="m-core">
       <div class="tableWrap">
-        <el-table :header-cell-style="{background:'#EDEEF0',color:'#444'}"
-                  :data='tableList'>
-          <el-table-column label="商品编号"
-                           prop='sn'
-                           align="center">
+        <el-table
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+        >
+          <el-table-column label="商品编号" prop="sn" align="center">
           </el-table-column>
-          <el-table-column label="商品名称"
-                           align="center"
-                           prop='name'>
+          <el-table-column label="商品名称" align="center" prop="name">
           </el-table-column>
-          <el-table-column label="商品类型"
-                           align="center"
-                           prop='type'>
+          <el-table-column label="商品类型" align="center" prop="type">
             <template slot-scope="scope">
               <div>
                 {{ scope.row.type | shopType }}
               </div>
             </template>
           </el-table-column>
-          <el-table-column label="具体型号"
-                           align="center"
-                           prop='specification'>
+          <el-table-column label="具体型号" align="center" prop="specification">
           </el-table-column>
-          <el-table-column label="数量统计"
-                           align="center"
-                           prop='sellCount'>
+          <el-table-column label="数量统计" align="center" prop="sellCount">
           </el-table-column>
         </el-table>
       </div>
     </div>
-    <div class="btnWrap"
-         style="margin-top:20px;">
-      <el-button type="primary"
-                 v-if="tableList.length > 0"
-                 v-permission="'order/musicalListExport'"
-                 @click="musicalListExport">订货清单导出</el-button>
-      <el-button type="primary"
-                 v-if="tableList.length > 0"
-                 v-permission="'order/musicalListDetailExport'"
-                 @click="musicalListDetailExport">分发清单导出</el-button>
-      <el-button type="warning okBtn"
-      v-if="team_status =='PREPARE'"
-                 v-permission="'order/verifyMusicalList'"
-                 @click="okDetailList">确认</el-button>
+    <div class="btnWrap" style="margin-top: 20px">
+      <el-button
+        type="primary"
+        v-if="tableList.length > 0"
+        v-permission="'order/musicalListExport'"
+        @click="musicalListExport"
+        >订货清单导出</el-button
+      >
+      <el-button
+        type="primary"
+        v-if="tableList.length > 0"
+        v-permission="'order/musicalListDetailExport'"
+        @click="musicalListDetailExport"
+        >分发清单导出</el-button
+      >
+      <el-button
+        type="warning okBtn"
+        v-if="team_status == 'PREPARE'&&!hasVerifyMusicalList"
+        v-permission="'order/verifyMusicalList'"
+        @click="okDetailList"
+        >确认</el-button
+      >
       <!-- <div class="okBtn" v-permission="'order/verifyMusicalList'"
            @click="okDetailList">确认</div> -->
     </div>
   </div>
 </template>
 <script>
-import { getTeamDetailList } from '@/api/buildTeam'
-import { verifyMusicalList } from '@/api/orderManager'
-import axios from 'axios'
-import qs from 'qs'
-import { getToken } from '@/utils/auth'
-import load from '@/utils/loading'
+import { getTeamDetailList } from "@/api/buildTeam";
+import { getTeamList } from "@/api/teamServer";
+import { verifyMusicalList } from "@/api/orderManager";
+import axios from "axios";
+import qs from "qs";
+import { getToken } from "@/utils/auth";
+import load from "@/utils/loading";
 export default {
-  data () {
+  data() {
     return {
-      teamid: '',
+      teamid: "",
       tableList: [],
       Fsearch: null,
       Frules: null,
-      team_status:''
-    }
+      team_status: "",
+      hasVerifyMusicalList:true
+    };
   },
-  mounted () {
-    this.init()
+  mounted() {
+    this.init();
   },
-  activated () {
-    this.init()
+  activated() {
+    this.init();
   },
   methods: {
-    init () {
+    init() {
       this.team_status = this.$route.query.team_status;
       this.teamid = this.$route.query.id;
-      getTeamDetailList({ musicGroupId: this.teamid }).then(res => {
-        if (res.code == 200) {
-          this.tableList = res.data ? res.data : [];
-        }
-      })
-    },
-    onCancel () {
-       this.$store.dispatch('delVisitedViews', this.$route)
-      this.$router.push({ path: '/teamList'})
-    },
-    okDetailList () {
-      this.$confirm(`是否确认发放清单?`, '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        verifyMusicalList({ musicGroupId: this.teamid }).then(res => {
+      if (this.teamid) {
+        getTeamList({ musicGroupId: this.teamid }).then(res=>{
+          if(res.code == 200){
+            this.hasVerifyMusicalList = res?.data?.rows[0]?.hasVerifyMusicalList
+          }
+        })
+        getTeamDetailList({ musicGroupId: this.teamid }).then((res) => {
           if (res.code == 200) {
-            this.$router.push({ path: '/teamList', query: { search: this.Fsearch, rules: this.Frules } })
+            this.tableList = res.data ? res.data : [];
           }
+        });
+      }
+    },
+    onCancel() {
+      this.$store.dispatch("delVisitedViews", this.$route);
+      this.$router.push({ path: "/teamList" });
+    },
+    okDetailList() {
+      this.$confirm(`是否确认发放清单?`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          verifyMusicalList({ musicGroupId: this.teamid }).then((res) => {
+            if (res.code == 200) {
+              this.$router.push({
+                path: "/teamList",
+                query: { search: this.Fsearch, rules: this.Frules },
+              });
+            }
+          });
         })
-      }).catch(() => { })
-
+        .catch(() => {});
     },
-    musicalListExport () { // 报表导出
-      let url = '/api-web/order/musicalListExport'
+    musicalListExport() {
+      // 报表导出
+      let url = "/api-web/order/musicalListExport";
       let data = {
         musicGroupId: this.$route.query.id,
-      }
+      };
       const options = {
-        method: 'POST',
+        method: "POST",
         headers: {
-          'Authorization': getToken()
+          Authorization: getToken(),
         },
         data: qs.stringify(data),
         url,
-        responseType: 'blob'
-      }
-      this.$confirm('您确定导出订货清单', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        load.startLoading()
-        axios(options).then(res => {
-          let blob = new Blob([res.data], {
-            // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
-            type: 'application/vnd.ms-excel;charset=utf-8'
-            //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
-          })
-          let text = (new Response(blob)).text()
-          text.then(res => {
-            // 判断是否报错
-            if (res.indexOf('code') != -1) {
-              let json = JSON.parse(res)
-              this.$message.error(json.msg)
-            } else {
-              let objectUrl = URL.createObjectURL(blob)
-              let link = document.createElement("a")
-              let nowTime = new Date()
-              let ymd = nowTime.getFullYear() + '' + (nowTime.getMonth() + 1) + '' + nowTime.getDate() + '' + nowTime.getHours() + '' + nowTime.getMinutes()
-              let fname = this.$route.query.id + '-' + ymd + '订货清单.xls' //下载文件的名字
-              link.href = objectUrl
-              link.setAttribute("download", fname)
-              document.body.appendChild(link)
-              link.click()
-            }
-          })
-          load.endLoading();
-        }).catch(error => {
-          this.$message.error('导出数据失败,请联系管理员');
-          load.endLoading();
+        responseType: "blob",
+      };
+      this.$confirm("您确定导出订货清单", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          load.startLoading();
+          axios(options)
+            .then((res) => {
+              let blob = new Blob([res.data], {
+                // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
+                type: "application/vnd.ms-excel;charset=utf-8",
+                //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
+              });
+              let text = new Response(blob).text();
+              text.then((res) => {
+                // 判断是否报错
+                if (res.indexOf("code") != -1) {
+                  let json = JSON.parse(res);
+                  this.$message.error(json.msg);
+                } else {
+                  let objectUrl = URL.createObjectURL(blob);
+                  let link = document.createElement("a");
+                  let nowTime = new Date();
+                  let ymd =
+                    nowTime.getFullYear() +
+                    "" +
+                    (nowTime.getMonth() + 1) +
+                    "" +
+                    nowTime.getDate() +
+                    "" +
+                    nowTime.getHours() +
+                    "" +
+                    nowTime.getMinutes();
+                  let fname = this.$route.query.id + "-" + ymd + "订货清单.xls"; //下载文件的名字
+                  link.href = objectUrl;
+                  link.setAttribute("download", fname);
+                  document.body.appendChild(link);
+                  link.click();
+                }
+              });
+              load.endLoading();
+            })
+            .catch((error) => {
+              this.$message.error("导出数据失败,请联系管理员");
+              load.endLoading();
+            });
         })
-      }).catch(() => { })
+        .catch(() => {});
     },
-    musicalListDetailExport () { // 报表导出
-      let url = '/api-web/order/musicalListDetailExport'
+    musicalListDetailExport() {
+      // 报表导出
+      let url = "/api-web/order/musicalListDetailExport";
       let data = {
-        musicGroupId: this.$route.query.id
-      }
+        musicGroupId: this.$route.query.id,
+      };
       const options = {
-        method: 'POST',
+        method: "POST",
         headers: {
-          'Authorization': getToken()
+          Authorization: getToken(),
         },
         data: qs.stringify(data),
         url,
-        responseType: 'blob'
-      }
-      this.$confirm('您确定导出分发清单', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        load.startLoading()
-        axios(options).then(res => {
-          let blob = new Blob([res.data], {
-            // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
-            type: 'application/vnd.ms-excel;charset=utf-8'
-            //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
-          })
-          let text = (new Response(blob)).text()
-          text.then(res => {
-            // 判断是否报错
-            if (res.indexOf('code') != -1) {
-              let json = JSON.parse(res)
-              this.$message.error(json.msg)
-            } else {
-              let objectUrl = URL.createObjectURL(blob)
-              let link = document.createElement("a")
-              let nowTime = new Date()
-              let ymd = nowTime.getFullYear() + '' + (nowTime.getMonth() + 1) + '' + nowTime.getDate() + '' + nowTime.getHours() + '' + nowTime.getMinutes()
-              let fname = this.$route.query.id + '-' + ymd + '分发清单.xls' //下载文件的名字
-              link.href = objectUrl
-              link.setAttribute("download", fname)
-              document.body.appendChild(link)
-              link.click()
-            }
-          })
-          load.endLoading();
-        }).catch(error => {
-          this.$message.error('导出数据失败,请联系管理员');
-          load.endLoading();
+        responseType: "blob",
+      };
+      this.$confirm("您确定导出分发清单", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          load.startLoading();
+          axios(options)
+            .then((res) => {
+              let blob = new Blob([res.data], {
+                // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
+                type: "application/vnd.ms-excel;charset=utf-8",
+                //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
+              });
+              let text = new Response(blob).text();
+              text.then((res) => {
+                // 判断是否报错
+                if (res.indexOf("code") != -1) {
+                  let json = JSON.parse(res);
+                  this.$message.error(json.msg);
+                } else {
+                  let objectUrl = URL.createObjectURL(blob);
+                  let link = document.createElement("a");
+                  let nowTime = new Date();
+                  let ymd =
+                    nowTime.getFullYear() +
+                    "" +
+                    (nowTime.getMonth() + 1) +
+                    "" +
+                    nowTime.getDate() +
+                    "" +
+                    nowTime.getHours() +
+                    "" +
+                    nowTime.getMinutes();
+                  let fname = this.$route.query.id + "-" + ymd + "分发清单.xls"; //下载文件的名字
+                  link.href = objectUrl;
+                  link.setAttribute("download", fname);
+                  document.body.appendChild(link);
+                  link.click();
+                }
+              });
+              load.endLoading();
+            })
+            .catch((error) => {
+              this.$message.error("导出数据失败,请联系管理员");
+              load.endLoading();
+            });
         })
-      }).catch(() => { })
-    }
+        .catch(() => {});
+    },
   },
-}
+};
 </script>
 
 <style lang="scss">

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