mo 4 tahun lalu
induk
melakukan
1a0dd1f414
100 mengubah file dengan 2073 tambahan dan 116 penghapusan
  1. 0 0
      dist/index.html
  2. 1 0
      dist/static/css/app.bca89471.css
  3. 2 0
      dist/static/css/app.e4b6dd04.css
  4. 9 1
      dist/static/css/chunk-12c6ad92.1f0956b2.css
  5. 5 0
      dist/static/css/chunk-2da2d7a8.dd716930.css
  6. 9 0
      dist/static/css/chunk-34d9c888.947d2ef9.css
  7. 0 1
      dist/static/css/chunk-4c0abd5f.c1e98585.css
  8. 0 1
      dist/static/css/chunk-584f76a2.a8072d98.css
  9. 1 0
      dist/static/css/chunk-62f4aaf4.456a9507.css
  10. 1 0
      dist/static/css/chunk-68051099.702cebf8.css
  11. 0 1
      dist/static/css/chunk-705565be.177166cd.css
  12. 5 0
      dist/static/css/chunk-b5446cf6.cc06dacf.css
  13. 5 0
      dist/static/css/chunk-bbb3c45e.dabaf49c.css
  14. 0 0
      dist/static/css/chunk-d00fd9e4.46f83b09.css
  15. 9 1
      dist/static/css/chunk-d4a89ac0.a9a88b9f.css
  16. 5 0
      dist/static/css/chunk-edbdc970.e4896613.css
  17. 5 0
      dist/static/css/chunk-fd992dc0.380fc7a1.css
  18. 0 0
      dist/static/js/chunk-026cbb1a.01d89669.js
  19. 0 0
      dist/static/js/chunk-07af787e.f4cbbf76.js
  20. 1 0
      dist/static/js/chunk-08a5bd4e.8be374f6.js
  21. 1 0
      dist/static/js/chunk-08a5bd4e.cc256fdc.js
  22. 0 0
      dist/static/js/chunk-0fdf5198.c0d71a58.js
  23. 0 0
      dist/static/js/chunk-1554f5f4.bf4069bc.js
  24. 0 0
      dist/static/js/chunk-15770507.c0d6b638.js
  25. 0 0
      dist/static/js/chunk-18013662.04ed009a.js
  26. 0 0
      dist/static/js/chunk-1c75ae7c.427f4f9a.js
  27. 0 0
      dist/static/js/chunk-206a2e07.94998fff.js
  28. 0 0
      dist/static/js/chunk-20d42954.2ea9ee53.js
  29. 1 0
      dist/static/js/chunk-259e1df6.6b6af37b.js
  30. 1 0
      dist/static/js/chunk-259e1df6.c41b8f63.js
  31. 0 0
      dist/static/js/chunk-35d964c1.c1e350f9.js
  32. 0 0
      dist/static/js/chunk-37caa5c6.74335a24.js
  33. 0 0
      dist/static/js/chunk-3c8266ca.8b116568.js
  34. 1 0
      dist/static/js/chunk-3d44bd43.a28d9e9a.js
  35. 1 0
      dist/static/js/chunk-3d44bd43.cfbe8add.js
  36. 1 0
      dist/static/js/chunk-3f7c6ea7.9f04ad19.js
  37. 1 0
      dist/static/js/chunk-3f7c6ea7.f2c98c60.js
  38. 0 0
      dist/static/js/chunk-4044fa84.982d3f98.js
  39. 0 0
      dist/static/js/chunk-42630e78.97037e5f.js
  40. 0 0
      dist/static/js/chunk-42bc69b9.d1c74bfb.js
  41. 0 0
      dist/static/js/chunk-4537ddda.e1345658.js
  42. 1 0
      dist/static/js/chunk-48f2714c.806d8380.js
  43. 1 0
      dist/static/js/chunk-48f2714c.a35e67da.js
  44. 1 0
      dist/static/js/chunk-495439dc.01598072.js
  45. 1 0
      dist/static/js/chunk-495439dc.69bbee4c.js
  46. 1 0
      dist/static/js/chunk-4a5767e5.1c0041c3.js
  47. 1 0
      dist/static/js/chunk-4a5767e5.d96e1c97.js
  48. 0 0
      dist/static/js/chunk-5871de68.e3c1aa12.js
  49. 1 0
      dist/static/js/chunk-5bcfc712.30f3875f.js
  50. 1 0
      dist/static/js/chunk-5bcfc712.d1173d49.js
  51. 0 0
      dist/static/js/chunk-5e9c1361.91380fb5.js
  52. 0 0
      dist/static/js/chunk-5e9eef69.4babb9d3.js
  53. 0 0
      dist/static/js/chunk-5f5ffb00.4d0b4b1d.js
  54. 0 0
      dist/static/js/chunk-6562cc02.f15cc518.js
  55. 0 0
      dist/static/js/chunk-67d158fc.4992678b.js
  56. 0 0
      dist/static/js/chunk-67eef159.576312a1.js
  57. 0 0
      dist/static/js/chunk-67eef159.e61de61f.js
  58. 0 0
      dist/static/js/chunk-6a1562ab.df6781b9.js
  59. 0 0
      dist/static/js/chunk-6d44028a.448a3619.js
  60. 0 0
      dist/static/js/chunk-6e855f0c.4ca2356d.js
  61. 0 0
      dist/static/js/chunk-705565be.0ccd58c9.js
  62. 1 0
      dist/static/js/chunk-739fed81.52c9248f.js
  63. 1 0
      dist/static/js/chunk-739fed81.f84e425c.js
  64. 0 0
      dist/static/js/chunk-73e20026.87ba6ad5.js
  65. 0 0
      dist/static/js/chunk-7a64171e.018245fa.js
  66. 1 0
      dist/static/js/chunk-7a64171e.6b7c661f.js
  67. 1 0
      dist/static/js/chunk-9cf825a4.803aedc8.js
  68. 1 0
      dist/static/js/chunk-9cf825a4.b0c394a2.js
  69. 0 0
      dist/static/js/chunk-a265025c.d6deea78.js
  70. 0 0
      dist/static/js/chunk-b9a6167e.3fce4155.js
  71. 0 0
      dist/static/js/chunk-bd334e84.bec4cb49.js
  72. 0 0
      dist/static/js/chunk-be3bf066.857adfda.js
  73. 0 0
      dist/static/js/chunk-c0b0701c.9d242180.js
  74. 1 0
      dist/static/js/chunk-c7f5974e.170ec19c.js
  75. 1 0
      dist/static/js/chunk-c7f5974e.1f504a36.js
  76. 0 0
      dist/static/js/chunk-c8c7f280.355c5753.js
  77. 0 0
      dist/static/js/chunk-cd6b5856.735cae9a.js
  78. 0 0
      dist/static/js/chunk-f3334c50.a4474ada.js
  79. 1 0
      package.json
  80. 9 2
      src/api/systemManage.js
  81. TEMPAT SAMPAH
      src/assets/images/base/archices.png
  82. 1 0
      src/permission.js
  83. 16 0
      src/router/index.js
  84. 52 0
      src/store/modules/permission.js
  85. 1 0
      src/utils/request.js
  86. 247 101
      src/views/categroyManager/insideSetting/branchManager.vue
  87. 1 1
      src/views/main/abnormal/title.vue
  88. 7 0
      src/views/main/api.js
  89. 0 2
      src/views/main/baseinfo/index.vue
  90. 2 3
      src/views/main/baseinfo/modals/searchHeader.vue
  91. 9 2
      src/views/main/constant.js
  92. 198 0
      src/views/main/teamShowList.vue
  93. 299 0
      src/views/photo-detail/index.vue
  94. 197 0
      src/views/resetTeaming/components/archicesComponents/api.js
  95. 118 0
      src/views/resetTeaming/components/archicesComponents/baseInfo.vue
  96. 5 0
      src/views/resetTeaming/components/archicesComponents/certificate.vue
  97. 206 0
      src/views/resetTeaming/components/archicesComponents/modals/addPlan.vue
  98. 162 0
      src/views/resetTeaming/components/archicesComponents/modals/studentMaster.vue
  99. 258 0
      src/views/resetTeaming/components/archicesComponents/modals/studentWork.vue
  100. 204 0
      src/views/resetTeaming/components/archicesComponents/modals/surveyMask.vue

File diff ditekan karena terlalu besar
+ 0 - 0
dist/index.html


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/css/app.bca89471.css


File diff ditekan karena terlalu besar
+ 2 - 0
dist/static/css/app.e4b6dd04.css


+ 9 - 1
dist/static/css/chunk-12c6ad92.1f0956b2.css

@@ -1 +1,9 @@
-.newBand[data-v-68015b7f]{display:inline-block}[data-v-68015b7f] .el-input-number.is-controls-right .el-input__inner{text-align:left}.setWidth[data-v-68015b7f]{display:inline-block}.lookTitle[data-v-68015b7f]{height:40px;line-height:40px;font-weight:700;background-color:#edeef0;padding:0 20px;margin-bottom:20px}.showShop[data-v-68015b7f]{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-68015b7f]{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}
+<<<<<<< HEAD
+.newBand[data-v-68015b7f]{display:inline-block}[data-v-68015b7f] .el-input-number.is-controls-right .el-input__inner{text-align:left}.setWidth[data-v-68015b7f]{display:inline-block}.lookTitle[data-v-68015b7f]{height:40px;line-height:40px;font-weight:700;background-color:#edeef0;padding:0 20px;margin-bottom:20px}.showShop[data-v-68015b7f]{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-68015b7f]{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}
+=======
+<<<<<<< HEAD:dist/static/css/chunk-2da2d7a8.dd716930.css
+.newBand[data-v-134e3746]{display:inline-block}[data-v-134e3746] .el-input-number.is-controls-right .el-input__inner{text-align:left}.setWidth[data-v-134e3746]{display:inline-block}.lookTitle[data-v-134e3746]{height:40px;line-height:40px;font-weight:700;background-color:#edeef0;padding:0 20px;margin-bottom:20px}.showShop[data-v-134e3746]{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-134e3746]{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-68015b7f]{display:inline-block}[data-v-68015b7f] .el-input-number.is-controls-right .el-input__inner{text-align:left}.setWidth[data-v-68015b7f]{display:inline-block}.lookTitle[data-v-68015b7f]{height:40px;line-height:40px;font-weight:700;background-color:#edeef0;padding:0 20px;margin-bottom:20px}.showShop[data-v-68015b7f]{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-68015b7f]{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}
+>>>>>>> 0609getMusicFee:dist/static/css/chunk-12c6ad92.1f0956b2.css
+>>>>>>> 07/06musicArchives

+ 5 - 0
dist/static/css/chunk-2da2d7a8.dd716930.css

@@ -0,0 +1,5 @@
+<<<<<<< HEAD:dist/static/css/chunk-2da2d7a8.dd716930.css
+.newBand[data-v-134e3746]{display:inline-block}[data-v-134e3746] .el-input-number.is-controls-right .el-input__inner{text-align:left}.setWidth[data-v-134e3746]{display:inline-block}.lookTitle[data-v-134e3746]{height:40px;line-height:40px;font-weight:700;background-color:#edeef0;padding:0 20px;margin-bottom:20px}.showShop[data-v-134e3746]{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-134e3746]{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-68015b7f]{display:inline-block}[data-v-68015b7f] .el-input-number.is-controls-right .el-input__inner{text-align:left}.setWidth[data-v-68015b7f]{display:inline-block}.lookTitle[data-v-68015b7f]{height:40px;line-height:40px;font-weight:700;background-color:#edeef0;padding:0 20px;margin-bottom:20px}.showShop[data-v-68015b7f]{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-68015b7f]{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}
+>>>>>>> 0609getMusicFee:dist/static/css/chunk-12c6ad92.1f0956b2.css

+ 9 - 0
dist/static/css/chunk-34d9c888.947d2ef9.css

@@ -0,0 +1,9 @@
+<<<<<<< HEAD:dist/static/css/chunk-6d5b6c9b.33b986ac.css
+<<<<<<< HEAD:dist/static/css/chunk-edbdc970.e4896613.css
+/deep/.avatar-uploader .el-upload,/deep/.upload-demo .el-upload{border-radius:6px;cursor:pointer;position:relative;overflow:hidden}.avatar-uploader .el-upload:hover{border-color:#409eff}.avatar-uploader-icon{border:1px dashed #d9d9d9;font-size:28px;color:#8c939d;width:120px;height:120px;line-height:120px;text-align:center}.avatar{width:120px;height:120px;display:block}.ivu-upload{display:none}.alert[data-v-6990a886]{margin-bottom:22px}.shopImage[data-v-6990a886]{width:60px;height:60px}.shopDesc[data-v-6990a886]{max-height:70px;overflow:hidden}.el-select__tags .el-tag.el-tag--info.el-tag--small.el-tag--light[data-v-6990a886]{max-width:95px}
+=======
+/deep/.avatar-uploader .el-upload,/deep/.upload-demo .el-upload{border-radius:6px;cursor:pointer;position:relative;overflow:hidden}.avatar-uploader .el-upload:hover{border-color:#409eff}.avatar-uploader-icon{border:1px dashed #d9d9d9;font-size:28px;color:#8c939d;width:120px;height:120px;line-height:120px;text-align:center}.avatar{width:120px;height:120px;display:block}.ivu-upload{display:none}.alert[data-v-6d1bdb5c]{margin-bottom:22px}.shopImage[data-v-6d1bdb5c]{width:60px;height:60px}.shopDesc[data-v-6d1bdb5c]{max-height:70px;overflow:hidden}.el-select__tags .el-tag.el-tag--info.el-tag--small.el-tag--light[data-v-6d1bdb5c]{max-width:95px}
+>>>>>>> 0609getMusicFee:dist/static/css/chunk-6d5b6c9b.33b986ac.css
+=======
+/deep/.avatar-uploader .el-upload,/deep/.upload-demo .el-upload{border-radius:6px;cursor:pointer;position:relative;overflow:hidden}.avatar-uploader .el-upload:hover{border-color:#409eff}.avatar-uploader-icon{border:1px dashed #d9d9d9;font-size:28px;color:#8c939d;width:120px;height:120px;line-height:120px;text-align:center}.avatar{width:120px;height:120px;display:block}.ivu-upload{display:none}.alert[data-v-f47677fa]{margin-bottom:22px}.shopImage[data-v-f47677fa]{width:60px;height:60px}.shopDesc[data-v-f47677fa]{max-height:70px;overflow:hidden}.el-select__tags .el-tag.el-tag--info.el-tag--small.el-tag--light[data-v-f47677fa]{max-width:95px}
+>>>>>>> 0609getMusicFee:dist/static/css/chunk-34d9c888.947d2ef9.css

+ 0 - 1
dist/static/css/chunk-4c0abd5f.c1e98585.css

@@ -1 +0,0 @@
-[data-v-ce3060a2] .dialog-footer{margin-top:10px}.dialog-footer[data-v-ce3060a2]{float:right}.coursetitle[data-v-ed7c90f6]{padding:0 20px;font-size:14px;color:#606266;line-height:40px}.title[data-v-ed7c90f6]{color:red;margin-bottom:30px;font-size:16px;font-weight:700}.tag[data-v-ed7c90f6]{margin-right:5px;cursor:pointer}.dialog-footer[data-v-ed7c90f6]{margin-top:20px;display:block;text-align:right}.lastBtnWrap[data-v-bd57c674]{margin-top:20px;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-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;margin-right:1%}[data-v-bd57c674] .el-table .noShow .cell .el-table__expand-icon{display:none}

+ 0 - 1
dist/static/css/chunk-584f76a2.a8072d98.css

@@ -1 +0,0 @@
-.alert[data-v-64fe4b1c]{margin:10px 0}.dialog-footer[data-v-59fb2832]{margin-top:20px;display:block;text-align:right}

File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/css/chunk-62f4aaf4.456a9507.css


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/css/chunk-68051099.702cebf8.css


+ 0 - 1
dist/static/css/chunk-705565be.177166cd.css

@@ -1 +0,0 @@
-.alert[data-v-a97fca8e] .el-alert__content{width:100%}.alert .title[data-v-a97fca8e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.content[data-v-a97fca8e]{padding:0 24px;padding-top:24px}.dialog-footer[data-v-028ec50e]{text-align:right;display:block;padding-bottom:20px;margin-top:20px}[data-v-528d6129] .el-button--primary,[data-v-528d6129] .el-button--primary:active,[data-v-528d6129] .el-button--primary:focus,[data-v-528d6129] .el-button--primary:hover{background:#14928a;border-color:#14928a;color:#fff}[data-v-528d6129] .el-date-editor.el-input,[data-v-528d6129] .el-select{width:100%!important}

+ 5 - 0
dist/static/css/chunk-b5446cf6.cc06dacf.css

@@ -0,0 +1,5 @@
+<<<<<<< HEAD:dist/static/css/chunk-bbb3c45e.dabaf49c.css
+[data-v-ce3060a2] .dialog-footer{margin-top:10px}.dialog-footer[data-v-ce3060a2]{float:right}.number-input[data-v-b6d286e0]{width:100%}.number-input[data-v-b6d286e0] .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-734e893a]{line-height:44px}.fixedBox[data-v-734e893a]{position:fixed;bottom:20px;right:10px;z-index:100;width:200px;background-color:#fff;font-size:14px}.fixedBox .boxWrap[data-v-734e893a]{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-734e893a]{font-size:18px;cursor:pointer}[data-v-734e893a] .el-divider--horizontal{margin:0!important}.topWrap[data-v-734e893a]{margin:10px 0;padding:0 20px 0 0}.minus[data-v-734e893a]{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-7a85dee4]{width:100%}.number-input[data-v-7a85dee4] .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-734e893a]{line-height:44px}.fixedBox[data-v-734e893a]{position:fixed;bottom:20px;right:10px;z-index:100;width:200px;background-color:#fff;font-size:14px}.fixedBox .boxWrap[data-v-734e893a]{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-734e893a]{font-size:18px;cursor:pointer}[data-v-734e893a] .el-divider--horizontal{margin:0!important}.topWrap[data-v-734e893a]{margin:10px 0;padding:0 20px 0 0}.minus[data-v-734e893a]{float:right;line-height:44px;padding-right:20px;font-size:20px;cursor:pointer}
+>>>>>>> 0609getMusicFee:dist/static/css/chunk-b5446cf6.61c00417.css

+ 5 - 0
dist/static/css/chunk-bbb3c45e.dabaf49c.css

@@ -0,0 +1,5 @@
+<<<<<<< HEAD:dist/static/css/chunk-bbb3c45e.dabaf49c.css
+[data-v-ce3060a2] .dialog-footer{margin-top:10px}.dialog-footer[data-v-ce3060a2]{float:right}.number-input[data-v-b6d286e0]{width:100%}.number-input[data-v-b6d286e0] .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-734e893a]{line-height:44px}.fixedBox[data-v-734e893a]{position:fixed;bottom:20px;right:10px;z-index:100;width:200px;background-color:#fff;font-size:14px}.fixedBox .boxWrap[data-v-734e893a]{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-734e893a]{font-size:18px;cursor:pointer}[data-v-734e893a] .el-divider--horizontal{margin:0!important}.topWrap[data-v-734e893a]{margin:10px 0;padding:0 20px 0 0}.minus[data-v-734e893a]{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-7a85dee4]{width:100%}.number-input[data-v-7a85dee4] .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-734e893a]{line-height:44px}.fixedBox[data-v-734e893a]{position:fixed;bottom:20px;right:10px;z-index:100;width:200px;background-color:#fff;font-size:14px}.fixedBox .boxWrap[data-v-734e893a]{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-734e893a]{font-size:18px;cursor:pointer}[data-v-734e893a] .el-divider--horizontal{margin:0!important}.topWrap[data-v-734e893a]{margin:10px 0;padding:0 20px 0 0}.minus[data-v-734e893a]{float:right;line-height:44px;padding-right:20px;font-size:20px;cursor:pointer}
+>>>>>>> 0609getMusicFee:dist/static/css/chunk-b5446cf6.61c00417.css

File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/css/chunk-d00fd9e4.46f83b09.css


+ 9 - 1
dist/static/css/chunk-d4a89ac0.a9a88b9f.css

@@ -1 +1,9 @@
-.newBand[data-v-68b120bd]{display:inline-block}[data-v-68b120bd] .el-input-number.is-controls-right .el-input__inner{text-align:left}.setWidth[data-v-68b120bd]{display:inline-block}.lookTitle[data-v-68b120bd]{height:40px;line-height:40px;font-weight:700;background-color:#edeef0;padding:0 20px;margin-bottom:20px}.showShop[data-v-68b120bd]{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-68b120bd]{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}
+<<<<<<< HEAD
+.newBand[data-v-68b120bd]{display:inline-block}[data-v-68b120bd] .el-input-number.is-controls-right .el-input__inner{text-align:left}.setWidth[data-v-68b120bd]{display:inline-block}.lookTitle[data-v-68b120bd]{height:40px;line-height:40px;font-weight:700;background-color:#edeef0;padding:0 20px;margin-bottom:20px}.showShop[data-v-68b120bd]{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-68b120bd]{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}
+=======
+<<<<<<< HEAD:dist/static/css/chunk-fd992dc0.380fc7a1.css
+.newBand[data-v-32de7ee1]{display:inline-block}[data-v-32de7ee1] .el-input-number.is-controls-right .el-input__inner{text-align:left}.setWidth[data-v-32de7ee1]{display:inline-block}.lookTitle[data-v-32de7ee1]{height:40px;line-height:40px;font-weight:700;background-color:#edeef0;padding:0 20px;margin-bottom:20px}.showShop[data-v-32de7ee1]{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-32de7ee1]{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-68b120bd]{display:inline-block}[data-v-68b120bd] .el-input-number.is-controls-right .el-input__inner{text-align:left}.setWidth[data-v-68b120bd]{display:inline-block}.lookTitle[data-v-68b120bd]{height:40px;line-height:40px;font-weight:700;background-color:#edeef0;padding:0 20px;margin-bottom:20px}.showShop[data-v-68b120bd]{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-68b120bd]{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}
+>>>>>>> 0609getMusicFee:dist/static/css/chunk-d4a89ac0.a9a88b9f.css
+>>>>>>> 07/06musicArchives

+ 5 - 0
dist/static/css/chunk-edbdc970.e4896613.css

@@ -0,0 +1,5 @@
+<<<<<<< HEAD:dist/static/css/chunk-edbdc970.e4896613.css
+/deep/.avatar-uploader .el-upload,/deep/.upload-demo .el-upload{border-radius:6px;cursor:pointer;position:relative;overflow:hidden}.avatar-uploader .el-upload:hover{border-color:#409eff}.avatar-uploader-icon{border:1px dashed #d9d9d9;font-size:28px;color:#8c939d;width:120px;height:120px;line-height:120px;text-align:center}.avatar{width:120px;height:120px;display:block}.ivu-upload{display:none}.alert[data-v-6990a886]{margin-bottom:22px}.shopImage[data-v-6990a886]{width:60px;height:60px}.shopDesc[data-v-6990a886]{max-height:70px;overflow:hidden}.el-select__tags .el-tag.el-tag--info.el-tag--small.el-tag--light[data-v-6990a886]{max-width:95px}
+=======
+/deep/.avatar-uploader .el-upload,/deep/.upload-demo .el-upload{border-radius:6px;cursor:pointer;position:relative;overflow:hidden}.avatar-uploader .el-upload:hover{border-color:#409eff}.avatar-uploader-icon{border:1px dashed #d9d9d9;font-size:28px;color:#8c939d;width:120px;height:120px;line-height:120px;text-align:center}.avatar{width:120px;height:120px;display:block}.ivu-upload{display:none}.alert[data-v-6d1bdb5c]{margin-bottom:22px}.shopImage[data-v-6d1bdb5c]{width:60px;height:60px}.shopDesc[data-v-6d1bdb5c]{max-height:70px;overflow:hidden}.el-select__tags .el-tag.el-tag--info.el-tag--small.el-tag--light[data-v-6d1bdb5c]{max-width:95px}
+>>>>>>> 0609getMusicFee:dist/static/css/chunk-6d5b6c9b.33b986ac.css

+ 5 - 0
dist/static/css/chunk-fd992dc0.380fc7a1.css

@@ -0,0 +1,5 @@
+<<<<<<< HEAD:dist/static/css/chunk-fd992dc0.380fc7a1.css
+.newBand[data-v-32de7ee1]{display:inline-block}[data-v-32de7ee1] .el-input-number.is-controls-right .el-input__inner{text-align:left}.setWidth[data-v-32de7ee1]{display:inline-block}.lookTitle[data-v-32de7ee1]{height:40px;line-height:40px;font-weight:700;background-color:#edeef0;padding:0 20px;margin-bottom:20px}.showShop[data-v-32de7ee1]{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-32de7ee1]{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-68b120bd]{display:inline-block}[data-v-68b120bd] .el-input-number.is-controls-right .el-input__inner{text-align:left}.setWidth[data-v-68b120bd]{display:inline-block}.lookTitle[data-v-68b120bd]{height:40px;line-height:40px;font-weight:700;background-color:#edeef0;padding:0 20px;margin-bottom:20px}.showShop[data-v-68b120bd]{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-68b120bd]{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}
+>>>>>>> 0609getMusicFee:dist/static/css/chunk-d4a89ac0.a9a88b9f.css

File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-026cbb1a.01d89669.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-07af787e.f4cbbf76.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-08a5bd4e.8be374f6.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-08a5bd4e.cc256fdc.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-0fdf5198.c0d71a58.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-1554f5f4.bf4069bc.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-15770507.c0d6b638.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-18013662.04ed009a.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-1c75ae7c.427f4f9a.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-206a2e07.94998fff.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-20d42954.2ea9ee53.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-259e1df6.6b6af37b.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-259e1df6.c41b8f63.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-35d964c1.c1e350f9.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-37caa5c6.74335a24.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-3c8266ca.8b116568.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-3d44bd43.a28d9e9a.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-3d44bd43.cfbe8add.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-3f7c6ea7.9f04ad19.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-3f7c6ea7.f2c98c60.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-4044fa84.982d3f98.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-42630e78.97037e5f.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-42bc69b9.d1c74bfb.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-4537ddda.e1345658.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-48f2714c.806d8380.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-48f2714c.a35e67da.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-495439dc.01598072.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-495439dc.69bbee4c.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-4a5767e5.1c0041c3.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-4a5767e5.d96e1c97.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-5871de68.e3c1aa12.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-5bcfc712.30f3875f.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-5bcfc712.d1173d49.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-5e9c1361.91380fb5.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-5e9eef69.4babb9d3.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-5f5ffb00.4d0b4b1d.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-6562cc02.f15cc518.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-67d158fc.4992678b.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-67eef159.576312a1.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-67eef159.e61de61f.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-6a1562ab.df6781b9.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-6d44028a.448a3619.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-6e855f0c.4ca2356d.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-705565be.0ccd58c9.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-739fed81.52c9248f.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-739fed81.f84e425c.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-73e20026.87ba6ad5.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-7a64171e.018245fa.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-7a64171e.6b7c661f.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-9cf825a4.803aedc8.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-9cf825a4.b0c394a2.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-a265025c.d6deea78.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-b9a6167e.3fce4155.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-bd334e84.bec4cb49.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-be3bf066.857adfda.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-c0b0701c.9d242180.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-c7f5974e.170ec19c.js


File diff ditekan karena terlalu besar
+ 1 - 0
dist/static/js/chunk-c7f5974e.1f504a36.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-c8c7f280.355c5753.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-cd6b5856.735cae9a.js


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/chunk-f3334c50.a4474ada.js


+ 1 - 0
package.json

@@ -54,6 +54,7 @@
     "vue-quill-editor": "^3.0.6",
     "vue-resize": "^1.0.1",
     "vue-router": "3.0.6",
+    "vuedraggable": "^2.24.3",
     "vuex": "3.1.0",
     "wangeditor": "^4.7.5",
     "webpack-merge": "^5.8.0"

+ 9 - 2
src/api/systemManage.js

@@ -7,16 +7,23 @@ export function cooperationOrganAdd (data) {
   return request({
     url: api + '/cooperationOrgan/add',
     method: 'post',
-    data: qs.stringify(data)
+    data,
+    headers: {
+      'Content-Type': 'application/json',
+    },
   })
 }
 
 // 修改合作单位(教学点)
+//     data: qs.stringify(data),    data: qs.stringify(data),
 export function cooperationOrganUpdate (data) {
   return request({
     url: api + '/cooperationOrgan/update',
     method: 'put',
-    data: qs.stringify(data)
+    data,
+    headers: {
+      'Content-Type': 'application/json',
+    },
   })
 }
 

TEMPAT SAMPAH
src/assets/images/base/archices.png


+ 1 - 0
src/permission.js

@@ -21,6 +21,7 @@ router.onError((error) => {
       isOpen = true
       //  (router.app.$confirm)
       // router.push({ path: "/403", query: { path: targetPath } })
+      console.log(error)
       router.app.$confirm("网站有更新请点击确定刷新页面?", "更新提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",

+ 16 - 0
src/router/index.js

@@ -58,6 +58,22 @@ export const constantRoutes = [
       }
     }]
   },
+  // {
+  //   path: '/photo-detail', // 相册详情
+  //   component: Layout,
+  //   hidden: true,
+  //   children: [
+  //   {
+  //     name: '相册详情',
+  //     path: ':id',
+  //     component: () => import('@/views/photo-detail'),
+  //     hidden: true,
+  //     meta: {
+  //       noCache: '1',
+  //       title: '相册详情'
+  //     }
+  //   }]
+  // },
   {
     path: '/setSilder', // 侧边栏
     component: Layout,

+ 52 - 0
src/store/modules/permission.js

@@ -224,6 +224,30 @@ function setDetailRoute(accessedRoutes) {
             activeMenu: '/main/main'
           }
         },
+        {
+          name: '乐团会员列表',
+          path: 'teamMemberList',
+          component: () => import('@/views/studentManager/memberList'),
+          hidden: true,
+          meta: {
+            noCache: '1',
+            title: '乐团会员列表',
+            belongTopMenu: "/main",
+            activeMenu: '/main/main'
+          }
+        },
+        {
+          name: '乐团展演列表',
+          path: 'teamShowList',
+          component: () => import('@/views/main/teamShowList'),
+          hidden: true,
+          meta: {
+            noCache: '1',
+            title: '乐团会员列表',
+            belongTopMenu: "/main",
+            activeMenu: '/main/main'
+          }
+        },
         //
       ])
     }
@@ -257,6 +281,20 @@ function setDetailRoute(accessedRoutes) {
           }
         },
         {
+          name: '乐团档案',
+          path: 'musicArchices',
+          component: () => import('@/views/resetTeaming/components/musicArchices'),
+          hidden: true,
+          meta: {
+            noCache: '1',
+            title: '乐团档案',
+            belongTopMenu: "/business",
+            activeMenu: '/teamList',
+            id:'xx4'
+          }
+        },
+        //musicArchices
+        {
           name: '会员排课列表',
           path: 'memberClassList',
           component: () => import('@/views/teamDetail/components/memberClassList'),
@@ -270,6 +308,20 @@ function setDetailRoute(accessedRoutes) {
           }
         },
         {
+          name: '相册详情',
+          path: 'photo-detail',
+          component: () => import('@/views/photo-detail'),
+          hidden: true,
+          meta: {
+            noCache: '1',
+            title: '相册详情',
+            belongTopMenu: "/business",
+            activeMenu: '/teamList',
+            id:'xxx28'
+          }
+        },
+        // 相册详情
+        {
           name: '新建vip',
           path: 'buildVip',
           component: () => import('@/views/buildVip/index'),

+ 1 - 0
src/utils/request.js

@@ -4,6 +4,7 @@ import { Message } from 'element-ui'
 import store from '@/store'
 import { getToken } from '@/utils/auth'
 import cleanDeep from 'clean-deep'
+import qs from 'querystring'
 // import { Loading } from 'element-ui'
 import { showFullScreenLoading, tryHideFullScreenLoading } from './request-loading'
 import router from '@/router/index'

+ 247 - 101
src/views/categroyManager/insideSetting/branchManager.vue

@@ -85,12 +85,12 @@
           </el-table-column>
           <el-table-column align="center" prop="realName" label="乐团主管">
           </el-table-column>
-          <el-table-column align="center" prop="linkman" label="联系人">
+          <!-- <el-table-column align="center" prop="linkman" label="联系人">
           </el-table-column>
           <el-table-column align="center" prop="job" label="职位">
           </el-table-column>
           <el-table-column align="center" prop="mobileNo" label="手机号">
-          </el-table-column>
+          </el-table-column> -->
           <el-table-column align="center" label="是否全职资源">
             <template slot-scope="scope">
               {{ scope.row.fullJobResource ? "是" : "否" }}
@@ -104,8 +104,11 @@
             </template>
           </el-table-column>
 
-          <el-table-column align="center" label="操作" width="100">
+          <el-table-column align="center" label="操作" width="140px">
             <template slot-scope="scope">
+              <el-button @click="openTeaching('look', scope.row)" type="text"
+                >查看</el-button
+              >
               <el-button
                 @click="openTeaching('update', scope.row)"
                 v-permission="'cooperationOrgan/update'"
@@ -136,98 +139,173 @@
       :title="formTitle[formActionTitle]"
       :visible.sync="teachingStatus"
       @close="onFormClose('ruleForm')"
-      width="500px"
+      width="1060px"
     >
-      <el-form :model="form" :rules="rules" ref="ruleForm">
-        <el-form-item
-          label="单位名称"
-          prop="name"
-          :label-width="formLabelWidth"
-        >
-          <el-input v-model.trim="form.name" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item
-          label="所属分部"
-          prop="organId"
-          :label-width="formLabelWidth"
-        >
-          <el-select
-            v-model.trim="form.organId"
-            @change="changeOrgan"
-            filterable
-            clearable
+      <el-form :model="form" :rules="rules" ref="ruleForm" :inline="true">
+        <el-row>
+          <el-form-item
+            label="单位名称"
+            prop="name"
+            :label-width="formLabelWidth"
           >
-            <el-option
-              v-for="item in selects.branchs"
-              :key="item.id"
-              :label="item.name"
-              :value="item.id"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item
-          label="乐团主管"
-          prop="educationUserId"
-          :label-width="formLabelWidth"
-          :rules="[{ required: true, message: '乐团主管不能为空' }]"
-        >
-          <el-select
-            :disabled="!form.organId"
-            v-model.trim="form.educationUserId"
-            filterable
-            clearable
+            <el-input
+              v-model.trim="form.name"
+              autocomplete="off"
+              style="width: 180px !important"
+            ></el-input>
+          </el-form-item>
+          <el-form-item
+            label="所属分部"
+            prop="organId"
+            :label-width="formLabelWidth"
           >
-            <el-option
-              v-for="(item, index) in educationList"
-              :key="index"
-              :label="item.realName"
-              :value="item.userId"
+            <el-select
+              style="width: 180px !important"
+              v-model.trim="form.organId"
+              @change="changeOrgan"
+              filterable
+              clearable
             >
-              <span style="float: left">{{ item.realName }}</span>
-              <span style="float: right; color: #8492a6; font-size: 13px">{{
-                String(item.userId)
-              }}</span>
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item
-          label="状态"
-          prop="isEnable"
-          :label-width="formLabelWidth"
-        >
-          <el-select v-model.trim="form.isEnable" filterable clearable>
-            <el-option label="开启" :value="true"></el-option>
-            <el-option label="关闭" :value="false"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item
-          label="联系人"
-          prop="linkman"
-          :label-width="formLabelWidth"
-        >
-          <el-input v-model.trim="form.linkman" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="职位" prop="job" :label-width="formLabelWidth">
-          <el-input v-model.trim="form.job" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item
-          label="手机号"
-          prop="mobileNo"
-          :label-width="formLabelWidth"
-        >
-          <el-input v-model.trim="form.mobileNo" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item
-          label="是否全职资源"
-          prop="fullJobResource"
-          :label-width="formLabelWidth"
+              <el-option
+                v-for="item in selects.branchs"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-row>
+        <el-row>
+          <el-form-item
+            label="乐团主管"
+            prop="educationUserId"
+            :label-width="formLabelWidth"
+            :rules="[{ required: true, message: '乐团主管不能为空' }]"
+          >
+            <el-select
+              style="width: 180px !important"
+              :disabled="!form.organId || basdisabled"
+              v-model.trim="form.educationUserId"
+              filterable
+              clearable
+            >
+              <el-option
+                v-for="(item, index) in educationList"
+                :key="index"
+                :label="item.realName"
+                :value="item.userId"
+              >
+                <span style="float: left">{{ item.realName }}</span>
+                <span style="float: right; color: #8492a6; font-size: 13px">{{
+                  String(item.userId)
+                }}</span>
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item
+            label="合作单位状态"
+            prop="isEnable"
+            :label-width="formLabelWidth"
+          >
+            <el-select
+              :disabled="basdisabled"
+              v-model.trim="form.isEnable"
+              filterable
+              clearable
+              style="width: 180px !important"
+            >
+              <el-option label="开启" :value="true"></el-option>
+              <el-option label="关闭" :value="false"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item
+            label="是否全职资源"
+            prop="fullJobResource"
+            :label-width="formLabelWidth"
+          >
+            <el-select
+              :disabled="basdisabled"
+              v-model.trim="form.fullJobResource"
+              style="width: 180px !important"
+            >
+              <el-option label="是" :value="1"></el-option>
+              <el-option label="否" :value="0"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-row>
+        <el-row
+          v-for="(item, index) in form.cooperationOrganLinkmanList"
+          :key="index"
         >
-          <el-select v-model.trim="form.fullJobResource">
-            <el-option label="是" :value="1"></el-option>
-            <el-option label="否" :value="0"></el-option>
-          </el-select>
-        </el-form-item>
+          <el-form-item
+            :rules="[
+              { required: true, message: '请输入联系人', trigger: 'blur' },
+            ]"
+            :label="'联系人' + (index + 1)"
+            :prop="'cooperationOrganLinkmanList.' + index + '.linkman'"
+            :label-width="formLabelWidth"
+          >
+            <el-input
+              :disabled="basdisabled"
+              v-model.trim="item.linkman"
+              autocomplete="off"
+              style="width: 180px !important"
+            ></el-input>
+          </el-form-item>
+          <el-form-item
+            :rules="[
+              { required: true, message: '请输入职位', trigger: 'blur' },
+            ]"
+            :label="'联系人' + (index + 1) + '职位'"
+            :prop="'cooperationOrganLinkmanList.' + index + '.job'"
+            :label-width="formLabelWidth"
+          >
+            <el-input
+              :disabled="basdisabled"
+              v-model.trim="item.job"
+              autocomplete="off"
+              style="width: 180px !important"
+            ></el-input>
+          </el-form-item>
+          <el-form-item
+            :rules="[
+              { required: true, validator: validPhone, trigger: 'blur' },
+              ,
+              {
+                pattern: /^1[3456789]\d{9}$/,
+                message: '请输入正确的手机号',
+                trigger: 'blur',
+              },
+            ]"
+            :label="'联系人' + (index + 1) + '手机号'"
+            :prop="'cooperationOrganLinkmanList.' + index + '.mobileNo'"
+            :label-width="formLabelWidth"
+          >
+            <el-input
+              :disabled="basdisabled"
+              v-model.trim="item.mobileNo"
+              autocomplete="off"
+              style="width: 180px !important"
+            ></el-input>
+          </el-form-item>
+          <i
+            class="el-icon-remove-outline marginLeft10 iconStyle"
+            v-if="form.cooperationOrganLinkmanList.length > 1 && !basdisabled"
+            @click="deleteLinkMan(index)"
+            style="font-size: 20px; cursor: pointer"
+          ></i>
+          <i
+            class="el-icon-circle-plus-outline marginLeft10 iconStyle"
+            v-if="
+              !basdisabled &&
+              index + 1 == form.cooperationOrganLinkmanList.length
+            "
+            @click="addLinkMan"
+            style="font-size: 20px; cursor: pointer"
+          ></i>
+        </el-row>
       </el-form>
+
       <span slot="footer" class="dialog-footer">
         <el-button @click="teachingStatus = false">取 消</el-button>
         <el-button type="primary" @click="onTeachingSubmit('ruleForm')"
@@ -270,6 +348,7 @@ export default {
         isEnable: null,
         search: null,
       },
+      validPhone,
       searchLsit: [],
       tableList: [],
       educationList: [],
@@ -285,6 +364,7 @@ export default {
       formTitle: {
         create: "添加合作单位",
         update: "修改合作单位",
+        look: "查看合作单位",
       },
       formLabelWidth: "120px",
       form: {
@@ -296,22 +376,15 @@ export default {
         fullJobResource: null,
         organId: null,
         educationUserId: null,
+        cooperationOrganLinkmanList: [
+          { cooperationOrganId: "", job: "", linkman: "", mobileNo: "" },
+        ],
       },
       rules: {
         name: [
           { required: true, message: "请输入教学点名称", trigger: "blur" },
         ],
-        linkman: [{ required: true, message: "请输入联系人", trigger: "blur" }],
-        job: [{ required: true, message: "请输入职位", trigger: "blur" }],
-        mobileNo: [
-          { required: true, validator: validPhone, trigger: "blur" },
-          ,
-          {
-            pattern: /^1[3456789]\d{9}$/,
-            message: "请输入正确的手机号",
-            trigger: "blur",
-          },
-        ],
+
         organId: [
           { required: true, message: "请选择所属分部", trigger: "change" },
         ],
@@ -325,6 +398,8 @@ export default {
           { required: true, message: "请选择状态", trigger: "change" },
         ],
       },
+      basdisabled: false,
+      actionRow: null,
     };
   },
   mounted() {
@@ -385,6 +460,7 @@ export default {
               // 判断有没有Id,如果有则删除
               delete this.form.id;
             }
+            console.log(this.form);
             cooperationOrganAdd(this.form).then((res) => {
               if (res.code == 200) {
                 this.$message.success("创建成功");
@@ -426,9 +502,38 @@ export default {
       // 重置数据
       this.teachingStatus = true;
       this.formActionTitle = type;
-      this.changeOrgan(rows.organId);
+
       // 修改的时候赋值
       if (type == "update") {
+        this.changeOrgan(rows.organId);
+        this.actionRow = rows;
+        this.form = {
+          id: rows.id,
+          name: rows.name, // 教学点名称
+          linkman: rows.linkman, // 来源
+          job: rows.job, // 费用
+          mobileNo: rows.mobileNo ? rows.mobileNo : null,
+          ownershipType: rows.ownershipType,
+          organId: rows.organId,
+          fullJobResource: rows.fullJobResource,
+          isEnable: rows.isEnable,
+          educationUserId: rows.educationUserId,
+          cooperationOrganLinkmanList:
+            rows.cooperationOrganLinkmanList.length > 0
+              ? rows.cooperationOrganLinkmanList
+              : [
+                  {
+                    cooperationOrganId: rows.id,
+                    job: "",
+                    linkman: "",
+                    mobileNo: "",
+                  },
+                ],
+        };
+        this.basdisabled = false;
+      } else if (type == "look") {
+        this.changeOrgan(rows.organId);
+        this.actionRow = rows;
         this.form = {
           id: rows.id,
           name: rows.name, // 教学点名称
@@ -440,7 +545,13 @@ export default {
           fullJobResource: rows.fullJobResource,
           isEnable: rows.isEnable,
           educationUserId: rows.educationUserId,
+          cooperationOrganLinkmanList: rows.cooperationOrganLinkmanList,
         };
+        this.basdisabled = true;
+        // 查看
+      } else {
+        this.basdisabled = false;
+        this.actionRow = null;
       }
     },
     onFormClose(formName) {
@@ -456,6 +567,9 @@ export default {
         organId: null,
         isEnable: null,
         educationUserId: null,
+        cooperationOrganLinkmanList: [
+          { cooperationOrganId: "", job: "", linkman: "", mobileNo: "" },
+        ],
       };
       this.$refs[formName].resetFields();
     },
@@ -473,6 +587,30 @@ export default {
         }
       }
     },
+    deleteLinkMan(index) {
+      console.log(this.form.cooperationOrganLinkmanList);
+      this.form.cooperationOrganLinkmanList.splice(index, 1);
+    },
+    addLinkMan() {
+      if (this.actionRow) {
+        // 修改
+        console.log(this.actionRow);
+        this.form.cooperationOrganLinkmanList.push({
+          cooperationOrganId: this.actionRow.id,
+          job: "",
+          linkman: "",
+          mobileNo: "",
+        });
+      } else {
+        // 新增
+        this.form.cooperationOrganLinkmanList.push({
+          cooperationOrganId: "",
+          job: "",
+          linkman: "",
+          mobileNo: "",
+        });
+      }
+    },
   },
 };
 </script>
@@ -498,4 +636,12 @@ export default {
   margin-top: 10px;
   z-index: 99999 !important;
 }
+
+.iconStyle {
+  color: #999;
+  line-height: 40px;
+}
+.marginLeft10 {
+  margin-left: 10px;
+}
 </style>

+ 1 - 1
src/views/main/abnormal/title.vue

@@ -36,7 +36,7 @@ export default {
   data() {
     return {
       descs,
-      ignore: ["NO_CLASS_MUSIC_GROUP_STUDENT_INFO","NO_MEMBER_STUDENT_INFO","MEMBER_STUDENT_INFO"], // // 忽略类型
+      ignore: ["NO_CLASS_MUSIC_GROUP_STUDENT_INFO","NO_MEMBER_STUDENT_INFO","MEMBER_STUDENT_INFO","MUSIC_GROUP_PERFORMANCE"], // // 忽略类型
     };
   },
   mounted() {},

+ 7 - 0
src/views/main/api.js

@@ -132,3 +132,10 @@ export const queryStudentLeaveCourseList = (data) => request2({
   params: data
 })
 
+
+// 获取乐团展演列表
+export const getMusicGroupPerformance = (data) => request2({
+  url: '/api-web/musicGroupPerformance/queryNoStartPage',
+  method: 'post',
+  params: data
+})

+ 0 - 2
src/views/main/baseinfo/index.vue

@@ -231,8 +231,6 @@ export default {
         }
         this.dataInfo[item] = data[item];
       }
-
-      // console.log(this.dataInfo)
       this.dataInfo = { ...this.dataInfo };
     },
   },

+ 2 - 3
src/views/main/baseinfo/modals/searchHeader.vue

@@ -154,8 +154,7 @@ export default {
   display: flex;
   flex-direction: row;
   justify-content: space-between;
-  .right {
-    margin-top: 15px;
-  }
+  align-items: center;
+  height: 55px;
 }
 </style>

+ 9 - 2
src/views/main/constant.js

@@ -101,15 +101,22 @@ export const errorType = {
   NO_MEMBER_STUDENT_INFO: {
     name: '当前共有{0}个乐团共{1}名学员会员已过期',
     isError: true,
-    url: '/studentManager/teamMemberList',
+    url: '/main/teamMemberList',
     permission: '/teamMemberList',
     always: true,
     query: {hasMember:'0'}
   },
+  MUSIC_GROUP_PERFORMANCE:{
+    name: '当前共有{0}个乐团共{1}次展演计划',
+    isError: false,
+    url: '/main/teamShowList',
+    permission: '/teamShowList',
+    always: true,
+  },
   MEMBER_STUDENT_INFO:{
     name: '当前共有{0}个乐团共{1}名学员会员即将过期',
     isError: true,
-    url: '/studentManager/teamMemberList',
+    url: '/main/teamMemberList',
     permission: '/teamMemberList',
     always: true,
     query: {hasMember:'1'}

+ 198 - 0
src/views/main/teamShowList.vue

@@ -0,0 +1,198 @@
+ <!--  -->
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      乐团展演列表
+    </h2>
+    <div class="m-core">
+      <save-form
+        :inline="true"
+        ref="searchForm"
+        :model="searchForm"
+        @submit="search"
+        @reset="onReSet"
+      >
+        <el-form-item prop="search">
+          <el-input
+            v-model.trim="searchForm.search"
+            clearable
+            @keyup.enter.native="search"
+            placeholder="乐团名称、编号"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item prop="organId">
+          <el-select
+            class="multiple"
+            filterable
+            v-model.trim="searchForm.organId"
+            clearable
+            placeholder="请选择分部"
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <!-- <el-form-item prop="year">
+          <el-date-picker
+            style="width: 180px !important"
+            v-model="searchForm.year"
+            type="year"
+            value-format="yyyy"
+            placeholder="选择年份"
+            :clearable="false"
+            @change="changeYear"
+          >
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item prop="term">
+          <el-select
+            :disabled="!searchForm.year"
+            class="multiple"
+            filterable
+            style="width: 180px !important"
+            v-model.trim="searchForm.term"
+            placeholder="请选择学期"
+            @change="changeTerm"
+          >
+            <el-option value="0" label="上学期"></el-option>
+            <el-option value="1" label="下学期"></el-option>
+          </el-select>
+        </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
+            align="center"
+            prop="organName"
+            label="所属分部"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="musicGroupName"
+            label="乐团名称"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="musicGroupId"
+            label="乐团编号"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="name"
+            label="展演名称"
+          ></el-table-column>
+          <el-table-column align="center" prop="startTime" label="预计时间">
+            <template slot-scope="scope">
+              <div>{{ scope.row.startTime | dayjsFormat}}</div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="subDay" label="剩余天数">
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="musicScoreName"
+            label="展演曲目"
+          >
+          </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 quiteTeam from "@/views/teamDetail/components/modals/quite-team";
+import { StudentQuit } from "@/api/buildTeam";
+import load from "@/utils/loading";
+import { getMusicGroupPerformance } from "./api";
+import visit from "@/views/withdrawal-application/modals/visit";
+import { getTimes } from "@/utils";
+export default {
+  components: { pagination, quiteTeam, visit },
+  data() {
+    return {
+      searchForm: {
+        search: null,
+        organId: null,
+        year: "",
+        term: "",
+      },
+
+      tableList: [],
+      organList: [],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    // 获取分部
+    this.$store.dispatch("setBranchs");
+    this.init();
+  },
+  methods: {
+    init() {
+      this.getList();
+    },
+    async getList() {
+      // 设置时间
+
+      try {
+        const res = await getMusicGroupPerformance({
+          ...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.$refs["searchForm"].resetFields();
+      this.search();
+    },
+  },
+  watch: {},
+};
+</script>
+<style lang='scss' scoped>
+</style>

+ 299 - 0
src/views/photo-detail/index.vue

@@ -0,0 +1,299 @@
+<template>
+  <div :class="{'m-container': type === 'DEFAULT'}">
+    <h2 v-if="type === 'DEFAULT'">
+      <el-page-header @back="onCancel" :content="detailName"></el-page-header>
+    </h2>
+    <div class="m-core">
+      <div class="buttons">
+        <auth :auths="['photo/add']">
+          <el-button type="primary" @click="openUpload()">{{type === 'DEFAULT' ? '上传照片' : '上传证书'}}</el-button>
+        </auth>
+        <auth :auths="['photo/batchUpdate']">
+          <el-button type="primary" :disabled="list.length == 0" v-if="!editing" @click="changeMode()">{{type === 'DEFAULT' ? '编辑照片' : '编辑证书'}}</el-button>
+        </auth>
+        <auth :auths="['photo/del']">
+          <el-button type="danger" v-if="editing" @click="remove()">{{type === 'DEFAULT' ? '删除照片' : '删除证书'}}</el-button>
+        </auth>
+        <el-button type="primary" v-if="editing" @click="confirm()">确定</el-button>
+        <el-button type="primary" v-if="editing" @click="cancel()">取消</el-button>
+      </div>
+      <el-alert
+        v-if="editing"
+        type="info"
+        class="alert"
+        :closable="false">
+        <div slot="title">
+          <el-button class="btn" type="text" :disabled="list.length === checked.length" @click="checkAll()">全选</el-button>
+          <el-button class="btn" type="text" :disabled="!checked.length" @click="checked = []">取消选择</el-button>
+          <span>共{{list.length}}条, 已选择{{checked.length}}条</span>
+        </div>
+      </el-alert>
+      <el-checkbox-group v-model="checked">
+        <draggable :list="list" :disabled="!editing" style="display: flex;">
+          <div
+            v-for="(item) in list"
+            :key="item.url"
+            class="img-container"
+          >
+            <auth :auths="['photo/del']">
+              <div v-if="editing" class="ctrl-bar">
+                <el-checkbox class="check" :label="item.id"></el-checkbox>
+                <i class="el-icon-view" :class="{active: views.includes(item.id)}" @click="setView(item)"></i>
+              </div>
+              <div v-else class="ctrl-bar-view">
+                <el-tooltip effect="dark" content="设为封面" placement="top" :open-delay=".5">
+                  <i class="el-icon-picture-outline-round" @click="setCover(item)" v-if="type === 'DEFAULT'"></i>
+                  <i v-else></i>
+                </el-tooltip>
+                <el-tooltip effect="dark" :content="views.includes(item.id) ? '设为不可见' : '设为可见'" placement="top" :open-delay=".5">
+                  <i class="el-icon-view" :class="{active: views.includes(item.id)}" @click="setViewItem(item)"></i>
+                </el-tooltip>
+              </div>
+            </auth>
+            <el-image
+              :src="item.url"
+              class="img"
+              :preview-src-list="list.map(item => item.url)">
+            </el-image>
+            <el-tooltip v-if="!editing" class="item" effect="dark" :content="item.name" placement="top" :open-delay=".5">
+              <div class="name">{{item.name}}</div>
+            </el-tooltip>
+            <el-input class="nameinput" v-else v-model="item.name" size="mini" :placeholder="'请输入' + (type === 'DEFAULT' ? '照片' : '证书') + '名称'" clearable/>
+          </div>
+        </draggable>
+      </el-checkbox-group>
+      <empty v-if="list.length == 0"/>
+    </div>
+    <el-dialog
+      :title="type === 'DEFAULT' ? '上传照片' : '上传证书'"
+      :visible.sync="uploadVisible"
+      v-if="uploadVisible"
+    >
+      <upload-popup
+        @close="uploadVisible = false"
+        @submited="submited"
+        :name="$route.query.name"
+        :query="queryIdOrType"
+      />
+    </el-dialog>
+  </div>
+</template>
+<script>
+import draggable from 'vuedraggable'
+import uploadPopup from '@/views/resetTeaming/components/training-photos/upload'
+import { photoQueryPage, photoDel, photoUpdate, photoAlbumUpdate } from '@/views/resetTeaming/components/training-photos/api'
+export default {
+  props: {
+    type: {
+      type: String,
+      default: 'DEFAULT'
+    },
+  },
+  components: {
+    'upload-popup': uploadPopup,
+    draggable,
+  },
+  computed: {
+    detailName() {
+      return this.$route.query.name || '相册详情'
+    },
+    queryIdOrType() {
+      const id = this.$route.query.pid
+      if (this.type === 'DEFAULT') {
+        return {
+          id,
+          type: this.type,
+        }
+      }
+      return {
+        type: this.type,
+        musicGroupId: this.$route.query.id,
+      }
+    },
+  },
+  data() {
+    return {
+      views: [],
+      checked: [],
+      uploadVisible: false,
+      list: [],
+      editing: false,
+    }
+  },
+  mounted() {
+    console.log(this.$route)
+    this.FetchList()
+  },
+  methods: {
+    onCancel() {
+      this.$store.dispatch("delVisitedViews", this.$route);
+      if (this.$route.query.returnUrl) {
+        this.$router.push(this.$route.query.returnUrl);
+      }
+    },
+    openUpload() {
+      this.uploadVisible = true
+    },
+    setInitViwes() {
+      this.views = this.list.filter(item => item.clientShow).map(item => item.id)
+    },
+    async setCover(item) {
+      try {
+        await this.$confirm('是否确认设置为封面?', '提示')
+        await photoAlbumUpdate({
+          ...this.queryIdOrType,
+          coverUrl: item.url
+        })
+        this.$message.success('设置成功')
+        this.FetchList()
+      } catch (error) {}
+    },
+    async setViewItem(item) {
+      try {
+        await this.$confirm('是否确认修改可见状态?', '提示')
+        await photoUpdate([{
+          ...item,
+          clientShow: +!item.clientShow
+        }])
+        this.$message.success('设置成功')
+        this.FetchList()
+      } catch (error) {}
+    },
+    changeMode() {
+      this.checked = []
+      this.setInitViwes()
+      this.editing = true
+    },
+    cancel() {
+      this.editing = false
+      this.list = this.list.sort((a, b) => a.order - b.order)
+    },
+    submited() {
+      this.FetchList()
+    },
+    setView(item){
+      const indexOf = this.views.indexOf(item.id)
+      if (indexOf > -1) {
+        this.views.splice(indexOf, 1)
+      } else {
+        this.views.push(item.id)
+      }
+    },
+    checkAll() {
+      this.checked = this.list.map(item => item.id)
+    },
+    async FetchList() {
+      try {
+        const res = await photoQueryPage({...this.queryIdOrType, photoAlbumId: this.queryIdOrType.id})
+        // console.log(res.data.rows)
+        this.list = res.data.rows
+        this.setInitViwes()
+      } catch (error) {}
+    },
+    async confirm() {
+      try {
+        await this.$confirm('是否确认修改照片信息?', '提示')
+        const data = this.list.map((item, index) => ([{
+          ...item,
+          order: index,
+          clientShow: +this.views.includes(item.id)
+        }]))
+        await photoUpdate(data)
+        this.editing = false
+        this.$message.success('修改成功')
+        this.FetchList()
+      } catch (error) {
+        console.log(error)
+      }
+    },
+    async remove() {
+      try {
+        await this.$confirm('是否确认删除已选照片?', '提示')
+        await photoDel({
+          ids: this.checked.join(',')
+        })
+        this.$message.success('删除成功')
+        this.editing = false
+        this.FetchList()
+      } catch (error) {}
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+.img-container{
+  display: inline-flex;
+  margin-right: 20px;
+  margin-top: 20px;
+  flex-direction: column;
+  text-align: center;
+  position: relative;
+  cursor: move;
+  >.name{
+    width: 150px;
+    height: 30px;
+    line-height: 30px;
+    text-align: center;
+    margin-top: 10px;
+    color: rgba(0, 0, 0, .65);
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: pre;
+    font-size: 14px;
+  }
+  >.nameinput{
+    width: 150px;
+    margin-top: 10px;
+  }
+}
+.ctrl-bar,
+.ctrl-bar-view{
+  background-color: rgba(0, 0, 0, .45);
+  height: 30px;
+  position: absolute;
+  top: 0;
+  width: 100%;
+  z-index: 1;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 0 15px;
+}
+.ctrl-bar-view{
+  opacity: 0;
+  visibility: hidden;
+  transition: all .3s;
+}
+.img-container:hover{
+  .ctrl-bar-view{
+    opacity: 1;
+    visibility: visible;
+  }
+}
+.el-icon-view,
+.el-icon-picture-outline-round{
+  font-size: 14px;
+  color: #fff;
+  cursor: pointer;
+  &.active{
+    color: #14928A;
+  }
+}
+.switch{
+  position: absolute;
+  top: 10px;
+  right: 10px;
+  z-index: 1;
+}
+.img{
+  width: 150px;
+  height: 150px;
+  border-radius: 3px;
+}
+.alert{
+  margin-top: 20px;
+}
+.btn{
+  padding: 0;
+}
+</style>

+ 197 - 0
src/views/resetTeaming/components/archicesComponents/api.js

@@ -0,0 +1,197 @@
+import request2 from '@/utils/request2'
+export const getCourseType = data => request2({
+  url: '/api-web/musicGroupTrainPlan/queryCourseType',
+  data: data,
+  params: {},
+  method: 'post',
+  requestType:'json'
+
+})
+//   requestType: 'form'
+
+// 获取训练次数
+export const getPlanCourseNum = data => request2({
+  url: '/api-web/musicGroupTrainPlan/queryPlanCourseNum',
+  data: data,
+  params: {},
+  method: 'post',
+  requestType:'json'
+
+})
+
+// 获取训练时长
+export const getMusicGroupTrainPlan = data => request2({
+  url: '/api-web/musicGroupTrainPlan/queryPlanPage',
+  data: data,
+  params: {},
+  method: 'post',
+  requestType:'json'
+
+})
+
+// 新增乐团训练规划
+export const addMusicGroupTrainPlan = data => request2({
+  url: '/api-web/musicGroupTrainPlan/add',
+  data: data,
+  params: {},
+  method: 'post',
+  requestType:'json'
+
+})
+
+// 修改乐团训练规划
+export const resetMusicGroupTrainPlan = data =>request2({
+  url: '/api-web/musicGroupTrainPlan/update',
+  data: data,
+  params: {},
+  method: 'post',
+  requestType:'form'
+})
+
+// 删除乐团训练 musicGroupTrainPlan/del
+export const deteleMusicGroupTrainPlan = data =>request2({
+  url: '/api-web/musicGroupTrainPlan/del',
+  data: data,
+  params: {},
+  method: 'post',
+  requestType:'form'
+})
+
+// 获取乐团训练规划异常规划
+export const getExceptionPlan = data => request2({
+  url: '/api-web/musicGroupTrainPlan/queryExceptionPlan',
+  data: data,
+  params: {},
+  method: 'post',
+  requestType:'json'
+
+})
+
+// 获取乐团档案基本信息
+export const getBasicInfo = data => request2({
+  url: '/api-web/musicGroupRecord/queryBasicInfo',
+  data ,
+  params:data,
+  method: 'get',
+  requestType:'form'
+
+})
+
+// 查询学员 师资
+export const getStudentAndTeacher = data => request2({
+  url: '/api-web/musicGroupRecord/queryStudentAndTeacher',
+  data ,
+  params:data,
+  method: 'get',
+  requestType:'form'
+
+})
+
+// 获取作业情况
+export const getHomeworkStat = data => request2({
+  url: '/api-web/exercisesSituation/musicGroupHomeworkStat',
+  data ,
+  params:data,
+  method: 'get',
+  requestType:'form'
+
+})
+
+// 查询乐团资讯
+export const getMusicGroupNews = data => request2({
+  url: '/api-web/musicGroupNews/queryPage',
+  data ,
+  params:data,
+  method: 'get',
+  requestType:'form'
+
+})
+
+// 新增乐团资讯
+export const addMusicGroupNews = data => request2({
+  url: '/api-web/musicGroupNews/add',
+  data: data,
+  params: {},
+  method: 'post',
+  requestType:'form'
+
+})
+
+// 修改乐团资讯
+export const resetMusicGroupNews = data => request2({
+  url: '/api-web/musicGroupNews/update',
+  data: data,
+  params: {},
+  method: 'post',
+  requestType:'form'
+
+})
+
+// 删除乐团资讯
+export const delMusicGroupNews = data => request2({
+  url: '/api-web/musicGroupNews/del',
+  data: data,
+  params: {},
+  method: 'post',
+  requestType:'form'
+
+})
+
+// 查询问卷调查
+export const getMusicGroupQuestionnaire = data => request2({
+  url: '/api-web/musicGroupQuestionnaire/queryPage',
+  data ,
+  params:data,
+  method: 'get',
+  requestType:'form'
+
+})
+
+// 获取调查问卷题目详情
+export const getQuestionDetail = data => request2({
+  url: '/api-web/musicGroupQuestionnaire/getQuestionDetail',
+  data ,
+  params:data,
+  method: 'get',
+  requestType:'form'
+
+})
+
+// 新增问卷
+export const addQuestion = data => request2({
+  url: '/api-web/musicGroupQuestionnaire/add',
+  data,
+  method: 'post',
+  requestType:'json'
+
+})
+
+// 获取问卷详情
+export const getMusicGroupQuestionnaireDetail = data => request2({
+  url: '/api-web/musicGroupQuestionnaire/get',
+  data ,
+  params:data,
+  method: 'get',
+  requestType:'form'
+
+})
+
+// 修改问卷详情
+export const resetQuestion = data => request2({
+  url: '/api-web/musicGroupQuestionnaire/update',
+  data,
+  method: 'post',
+  requestType:'json'
+
+})
+// 删除问卷
+export const delQuestion = data => request2({
+  url: '/api-web/musicGroupQuestionnaire/del',
+  data,
+  method: 'post',
+  requestType:'form'
+
+})
+
+
+

+ 118 - 0
src/views/resetTeaming/components/archicesComponents/baseInfo.vue

@@ -0,0 +1,118 @@
+<template>
+  <div>
+    <el-alert :closable="false" class="alert" type="info">
+      <template slot="title">
+        <div class="shapeWrap">
+          <span class="shape"></span>
+          <p>基本信息</p>
+        </div>
+      </template>
+    </el-alert>
+    <descriptions :column="3" class="marginBtm22">
+      <descriptions-item label="乐团编号:">
+        <div v-if="baseInfo && baseInfo.id">
+          <overflow-text :text="baseInfo.id || ''" width="100%"></overflow-text>
+        </div>
+      </descriptions-item>
+      <descriptions-item label="申请时间:">
+        {{ baseInfo.createTime | formatTimer }}</descriptions-item
+      >
+      <descriptions-item label="开团时间:">
+        {{ baseInfo.billStartDate | formatTimer }}</descriptions-item
+      >
+      <descriptions-item label="收费模式:">
+        {{ baseInfo.courseViewType | courseViewType }}</descriptions-item
+      >
+      <descriptions-item label="收费类型:"
+        >{{ baseInfo.chargeTypeName }}
+      </descriptions-item>
+      <descriptions-item label="合作单位:">
+        {{ baseInfo.cooperationOrganName }}</descriptions-item
+      >
+      <descriptions-item label="教学点:"
+        >{{ baseInfo.schoolName }}
+      </descriptions-item>
+      <descriptions-item label="衔接老师:">
+        {{ baseInfo.transactionTeacherName }}/{{baseInfo.transactionTeacherPhone}}</descriptions-item
+      >
+      <descriptions-item label="乐队指导:"
+        >{{ baseInfo.directorUserName }}
+      </descriptions-item>
+      <descriptions-item label="乐团主管:">
+        {{ baseInfo.educationalTeacherName }}</descriptions-item
+      >
+    </descriptions>
+    <el-alert :closable="false" class="alert" type="info">
+      <div class="shapeWrap">
+        <span class="shape"></span>
+        联系人
+      </div>
+    </el-alert>
+
+    <descriptions :column="3">
+      <template
+        v-for="(item, index) in baseInfo.cooperationOrganLinkmanList"
+      >
+        <descriptions-item label="联系人:" :key="index">
+          {{ item.linkman }}</descriptions-item
+        >
+        <descriptions-item label="职位:" :key="index"> {{ item.job }}</descriptions-item>
+        <descriptions-item label="手机号:" :key="index">
+          {{ item.mobileNo }}</descriptions-item
+        >
+      </template>
+    </descriptions>
+  </div>
+</template>
+<script>
+import { getBasicInfo } from "./api";
+export default {
+  data() {
+    return {
+      baseInfo: {
+        id: "",
+        createTime: "",
+        billStartDate: "",
+        courseViewType: "",
+        chargeTypeName: "",
+        cooperationOrganName: "",
+        transactionTeacherName: "",
+        transactionTeacherPhone:"",
+        directorUserName: "",
+        educationalTeacherName: "",
+        cooperationOrganLinkmanList: [],
+      },
+    };
+  },
+  async mounted() {
+    try {
+      const res = await getBasicInfo({ musicGroupId: this.$route.query.id });
+      this.baseInfo = res.data;
+    } catch (e) {
+      console.log(e);
+    }
+  },
+  methods: {},
+};
+</script>
+<style lang="scss" scoped="scoped">
+.marginBtm22 {
+  margin-bottom: 22px;
+}
+.shapeWrap {
+  display: flex;
+  flex-direction: row;
+  justify-content: flex-start;
+  align-items: center;
+  .shape {
+    position: relative;
+    top: -1px;
+    display: block;
+    margin-right: 10px;
+    height: 14px;
+    width: 4px;
+    background-color: #14928a;
+    z-index: 500;
+  }
+}
+</style>

+ 5 - 0
src/views/resetTeaming/components/archicesComponents/certificate.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+      演示证书
+  </div>
+</template>

+ 206 - 0
src/views/resetTeaming/components/archicesComponents/modals/addPlan.vue

@@ -0,0 +1,206 @@
+<template>
+  <div>
+    <el-form :inline="true" :model.sync="form">
+      <el-form-item prop="year" label="年份">
+        <el-date-picker
+          v-model="form.year"
+          type="year"
+          value-format="yyyy"
+          placeholder="选择年"
+          :clearable="false"
+          :disabled="true"
+          style="width: 180px !important"
+        >
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item prop="term" label="学期">
+        <el-select
+          :disabled="true"
+          class="multiple"
+          filterable
+          style="width: 180px !important"
+          v-model.trim="form.term"
+          placeholder="请选择学期"
+        >
+          <el-option value="0" label="上学期"></el-option>
+          <el-option value="1" label="下学期"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="classGroupId" label="班级">
+        <el-select
+          :disabled="true"
+          v-model.trim="form.classGroupId"
+          filterable
+          placeholder="请选择班级"
+          style="width: 180px !important"
+        >
+          <el-option
+            v-for="(item, index) in classList1"
+            :key="index"
+            :value="item.id"
+            :label="item.name"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item
+        label="课程类型"
+        prop="courseScheduleType"
+        :rules="[
+          { required: true, message: '请选择课程类型', trigger: 'blur' },
+        ]"
+      >
+        <el-select
+          :disabled="true"
+          style="width: 180px !important"
+          class="multiple"
+          v-model.trim="form.courseScheduleType"
+          filterable
+          placeholder="课程类型"
+        >
+          <el-option
+            v-for="(item, index) in courseTypeList1"
+            :key="index"
+            :label="item.label"
+            :value="item.value"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <!-- 判断一下 是否能添加   -->
+    </el-form>
+    <p class="subTitle" v-if="maxPlansNum > 0">
+      共{{ maxPlansNum }}次课程尚未进行训练规划
+    </p>
+    <el-form :model.sync="planform" :inline="true" ref="planform">
+      <el-form-item
+        v-for="(item, index) in planform.palnList"
+        :key="index"
+        :label="'第' + (index + currentIndex) + '次训练规划'"
+        :rules="{
+          required: true,
+          message: '训练规划不能为空',
+          trigger: 'blur',
+        }"
+        :prop="'palnList.' + index + '.value'"
+      >
+        <el-input
+          type="textarea"
+          style="width: 700px; resize: none"
+          :rows="3"
+          v-model="item.value"
+          maxlength="200"
+          show-word-limit
+        ></el-input>
+
+        <i
+          class="el-icon-remove-outline marginLeft10 iconStyle"
+          v-if="planform.palnList.length > 1 && !basdisabled"
+          @click="deletePlan(index)"
+          style="font-size: 20px; cursor: pointer"
+        ></i>
+        <i
+          class="el-icon-circle-plus-outline marginLeft10 iconStyle"
+          v-if="!basdisabled && index + 1 == planform.palnList.length"
+          @click="addPlan"
+          style="font-size: 20px; cursor: pointer"
+        ></i>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+<script>
+import { addMusicGroupTrainPlan, resetMusicGroupTrainPlan } from "../api";
+export default {
+  props: [
+    "form",
+    "classList",
+    "courseTypeList",
+    "planList",
+    "currentIndex",
+    "maxPlansNum",
+    "isAdd",
+    "activeItem",
+  ],
+  data() {
+    return {
+      planform: {
+        palnList: [{ value: "" }],
+      },
+    };
+  },
+  mounted() {
+    if (!this.add && this.activeItem) {
+      this.planform.palnList[0].value = this.activeItem?.plan?.value;
+    }
+  },
+  computed: {
+    classList1() {
+      return this.classList;
+    },
+    courseTypeList1() {
+      return this.courseTypeList;
+    },
+    basdisabled() {
+      return !this.isAdd;
+    },
+  },
+  methods: {
+    addPlan() {
+      if (this.planform.palnList.length < this.maxPlansNum) {
+        this.planform.palnList.push({ value: "" });
+      } else {
+        this.$message.error("已添加所有课时规划");
+      }
+    },
+    deletePlan(index) {
+      console.log(index);
+       this.planform.palnList.splice(index,1)
+    },
+    submit() {
+      this.$refs.planform.validate(async (flag) => {
+        if (flag) {
+          if (this.isAdd) {
+            // 新增计划
+            let plans = this.planform.palnList.map((item) => {
+              return item.value;
+            });
+            try {
+              const res = await addMusicGroupTrainPlan({
+                ...this.form,
+                plans: plans,
+                musicGroupId:this.$route.query.id
+              });
+              this.$emit("close");
+            } catch (e) {
+              console.log(e);
+            }
+          } else {
+            // 修改
+            // activeItem
+            let plan = this.planform.palnList[0].value;
+            let planId = this.activeItem.plan.id;
+            try {
+              const res = await resetMusicGroupTrainPlan({ plan, planId });
+              this.$emit("close");
+            } catch (e) {
+              console.log(e);
+            }
+          }
+        }
+      });
+    },
+  },
+};
+</script>
+<style lang="scss" scoped="scoped">
+.subTitle {
+  margin-bottom: 30px;
+  color: red;
+}
+.iconStyle {
+  color: #999;
+  line-height: 75px;
+}
+.marginLeft10 {
+  margin-left: 10px;
+}
+</style>

+ 162 - 0
src/views/resetTeaming/components/archicesComponents/modals/studentMaster.vue

@@ -0,0 +1,162 @@
+<template>
+  <div>
+    <save-form
+      ref="searchForm"
+      :inline="true"
+      save-key="studentMaster"
+      class="searchForm"
+      @submit="search"
+      @reset="onReSet"
+      :model="searchForm"
+    >
+      <el-form-item prop="search">
+        <el-input
+          v-model.trim="searchForm.search"
+          clearable
+          placeholder="学生姓名或电话"
+          @keyup.enter.native="search"
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="major">
+        <el-select
+          v-model.trim="searchForm.subjectId"
+          clearable
+          filterable
+          placeholder="请选择声部"
+        >
+          <el-option
+            v-for="(item, index) in soundList"
+            :key="index"
+            :value="item.id"
+            :label="item.name"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+
+      <el-form-item prop="currentGrade">
+        <el-select
+          v-model.trim="searchForm.currentGrade"
+          filterable
+          clearable
+          placeholder="请选择年级"
+        >
+          <el-option
+            v-for="(item, index) in gradeList"
+            :key="index"
+            :label="item.label"
+            :value="item.label"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="oweFlag">
+        <el-select
+          v-model.trim="searchForm.oweFlag"
+          clearable
+          filterable
+          placeholder="是否购买月保"
+        >
+          <el-option label="否" value="0"></el-option>
+          <el-option label="是" value="1"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button native-type="submit" type="danger">搜索</el-button>
+        <el-button type="primary" native-type="reset">重置</el-button>
+        <el-button
+          type="primary"
+          v-permission="'export/musicGroupStudent'"
+          @click="onMusicGroupExport"
+          >导出</el-button
+        >
+      </el-form-item>
+    </save-form>
+    <el-table
+      :data="tableList"
+      :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+    >
+      <el-table-column label="学员编号" width="120px;" prop="userId">
+      </el-table-column>
+      <el-table-column label="学员姓名" width="120px;" prop="realName">
+      </el-table-column>
+      <el-table-column align="center" prop="phone" label="联系电话">
+        <template slot-scope="scope">
+          <copy-text>
+            {{ scope.row.phone }}
+          </copy-text>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="声部" prop="subjectName">
+        <template slot-scope="scope">
+          <copy-text>
+            {{ scope.row.regSubjectName }}
+          </copy-text>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="年级">
+        <template slot-scope="scope">
+          <div>{{ scope.row.currentGrade + scope.row.currentClass }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="乐器品牌">
+        <template slot-scope="scope">
+          <div>{{ scope.row.paymentStatus | paymentStatus }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="乐器型号">
+        <template slot-scope="scope">
+          <div>{{ scope.row.paymentStatus | paymentStatus }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="购买日期">
+        <template slot-scope="scope">
+          <div>{{ scope.row.paymentStatus | paymentStatus }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="是否购买月保">
+        <template slot-scope="scope">
+          <div>{{ scope.row.isActive ? "是" : "否" }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="月保有效期">
+        <template slot-scope="scope">
+          <div>{{ scope.row.hasCourse ? "是" : "否" }}</div>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      save-key="studentMaster"
+      sync
+      :total.sync="rules.total"
+      :page.sync="rules.page"
+      :limit.sync="rules.limit"
+      :page-sizes="rules.page_size"
+      @pagination="getList"
+    />
+  </div>
+</template>
+<script>
+import pagination from "@/components/Pagination/index";
+export default {
+  props: ["searchForm", "soundList", "gradeList"],
+  components:{pagination},
+  data() {
+    return {
+      tableList: [],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+    };
+  },
+  mounted() {},
+  methods: {
+       getList(){},
+    onMusicGroupExport() {},
+    search() {},
+    onReSet() {},
+  },
+};
+</script>

+ 258 - 0
src/views/resetTeaming/components/archicesComponents/modals/studentWork.vue

@@ -0,0 +1,258 @@
+<template
+>
+  <el-card header="">
+    <div slot="header" class="clearfix">
+      <searchHeader
+        v-if="mdate.length > 0"
+        :dates="mdate"
+        :title="'作业情况'"
+        :isShowQuert="false"
+        @changeValue="changeValue"
+      />
+    </div>
+
+    <div class="wall" style="height:68px;" v-if="JSON.stringify(items) == '{}'"></div>
+    <statistic class="statistic" :cols="0">
+      <statistic-item
+        v-for="(item, key) in items"
+        :key="key"
+        :class="{ active: active === key }"
+        @click="active = key"
+      >
+        <span v-if="item.title">
+          {{ item.title+'(%)'}}
+          <el-tooltip
+            v-if="item.desc"
+            :content="item.desc"
+            :open-delay="0.3"
+            placement="top"
+          >
+            <i
+              style="margin-left: 5px; cursor: pointer"
+              class="el-icon-warning-outline"
+            />
+          </el-tooltip>
+        </span>
+        <span> <count-to :endVal="item.percent" :decimals="2" /></span>
+      </statistic-item>
+    </statistic>
+    <!--   :data-zoom="dataZoom" -->
+    <ve-line
+      style="width: 100%"
+      height="350px"
+      :data="chartData"
+      :data-empty="dataEmpty"
+      :extend="chartExtend"
+      :legend="legend"
+    ></ve-line>
+  </el-card>
+</template>
+<script>
+import "v-charts/lib/style.css";
+import "echarts/lib/component/dataZoom";
+import countTo from "vue-count-to";
+import veLine from "v-charts/lib/line.common";
+import searchHeader from "@/views/main/baseinfo/modals/searchHeader";
+import { getTimes } from "@/utils";
+import { getHomeworkStat } from "../api";
+// import { descs, chioseNum } from "../constant";
+import { getNowDateAndSunday, getNowDateAndMonday } from "@/utils/date";
+export default {
+  props: ["data", "search"],
+  components: {
+    "count-to": countTo,
+    "ve-line": veLine,
+    searchHeader,
+  },
+  computed: {
+    legend() {
+      return {
+        left: "10px",
+      };
+    },
+    items() {
+      let obj = {}
+      let arr = ["HOMEWORK_CREATE_RATE","HOMEWORK_SUBMIT_RATE","HOMEWORK_COMMENT_RATE"]
+      arr.forEach(str=>{
+        if(this.data[str]){
+          obj[str]=this.data[str]
+        }else{
+          obj[str]={
+            title:""
+          }
+        }
+      })
+      /**
+       *  {
+        HOMEWORK_CREATE_RATE:this.data["HOMEWORK_CREATE_RATE"] || {},
+        HOMEWORK_SUBMIT_RATE: this.data["HOMEWORK_SUBMIT_RATE"] || {},
+        HOMEWORK_COMMENT_RATE: this.data["HOMEWORK_COMMENT_RATE"] || {},
+      };
+       */
+      return obj
+    },
+    chartExtend() {
+      return {
+        series: {
+           type: 'line',
+          smooth: false,
+        },
+        yAxis: {
+          //纵轴标尺固定
+          minInterval: 1,
+          type: "value",
+          scale: true,
+          min: 0,
+          max: 100,
+          axisLabel: {
+            formatter: "{value}%",
+          },
+        },
+        tooltip: {
+          axisPointer: {
+            type: "shadow",
+            shadowStyle: {
+              color: "rgba(150,150,150,0.2)",
+            },
+          },
+
+          formatter: (item) => {
+            return [
+              item[0].axisValueLabel,
+              ...item.map(
+                (d) => `<br/>${d.marker}${d.seriesName}: ${d.value[1]} %`
+              ),
+            ].join("");
+          },
+        },
+      };
+    },
+    dataZoom() {
+      return [
+        {
+          grid: {
+            left: "0%",
+          },
+          type: "slider",
+          start: 40,
+          end: 100,
+        },
+      ];
+    },
+    chartData() {
+      const values = Object.values(this.items);
+      const months = {};
+      for (const item of values) {
+        for (const row of item.indexMonthData || []) {
+          const key = this.$helpers.dayjs(row.month).format("YYYY-MM-DD");
+          if (!months[key]) {
+            months[key] = {
+              日期: key + "/" + getNowDateAndSunday(key),
+            };
+          }
+          months[key][item.title] = row.percent;
+        }
+      }
+
+      return {
+        columns: [
+          "日期",
+          ...values.map((item) => {
+            return item.title;
+          }),
+        ],
+        rows: Object.values(months),
+      };
+    },
+    dataEmpty() {
+      return !this.chartData.rows.length;
+    },
+  },
+  data() {
+    return {
+      active: "ACTIVATION_RATE",
+      mdate: [],
+      loading: false,
+    };
+  },
+  mounted() {
+    this.init()
+  },
+  methods: {
+    init() {
+      let nowTiem = this.$helpers.dayjs(new Date()).format("YYYY-MM-DD");
+      let startTime = this.$helpers
+        .dayjs(getNowDateAndMonday(nowTiem))
+        .subtract(49, "day")
+        .format("YYYY-MM-DD");
+      let endTime = getNowDateAndSunday(nowTiem);
+      this.mdate = [startTime, endTime];
+      this.FetchDetail();
+    },
+    changeValue(date) {
+      // 请求更改数据
+      this.mdate = date;
+      //  this.isDayOrMoth(date)
+      this.FetchDetail();
+    },
+    async FetchDetail() {
+      this.loading = true;
+      let data = [];
+      try {
+
+        const res = await getHomeworkStat({
+          musicGroupId:this.$route.query.musicGroupId,
+          ...getTimes(this.mdate, ["startDay", "endDay"]),
+        });
+        //       desc: descs[item.dataType],
+        for (const item of res.data) {
+          // 再循环一遍
+          for (const key in this.items) {
+            if (item.dataType == key) {
+              data[item.dataType] = {
+                ...item,
+
+              };
+            }
+          }
+        }
+      } catch (error) {
+        console.log(error);
+      }
+          this.dataInfo = data;
+      this.loading = false;
+      this.$emit('resetDate',data)
+
+
+    },
+  },
+};
+</script>
+<style lang="less" scoped>
+// .statistic{
+//   /deep/ .statistic-content{
+//     cursor: pointer;
+//     &.active > span{
+//       color: #14928a !important;
+//     }
+//   }
+// }
+
+/deep/.el-card__header {
+    padding: 0 20px !important;
+}
+  .shape {
+    margin-right: 10px;
+    height: 18px;
+    width: 4px;
+    background-color: #14928a;
+  }
+.chioseBox {
+  position: absolute;
+  right: 20px;
+  z-index: 1000;
+}
+.wrap {
+  position: relative;
+}
+</style>

+ 204 - 0
src/views/resetTeaming/components/archicesComponents/modals/surveyMask.vue

@@ -0,0 +1,204 @@
+<template>
+  <div>
+    <el-form :inline="true" :model.sync="form" ref="form" label-width="80px">
+      <el-alert
+        :closable="false"
+        title="基本信息"
+        class="alert marginBtm22"
+        type="info"
+      >
+      </el-alert>
+      <el-row>
+        <el-form-item prop="title" label="调查乐团">
+          {{ $route.query.name }}
+        </el-form-item>
+      </el-row>
+      <el-row>
+        <el-form-item
+          prop="questionTime"
+          label="调查时间"
+          :rules="[{ required: true, message: '请选择调查时间' }]"
+        >
+          <el-date-picker
+            :disabled="isdisabled"
+            style="width: 200px !important"
+            value-format="yyyy-MM-dd"
+            v-model.trim="form.questionTime"
+            type="date"
+            :picker-options="{ firstDayOfWeek: 1 }"
+            placeholder="请选择调查时间"
+          >
+          </el-date-picker>
+          <!-- <el-input v-model="form.author"></el-input> -->
+        </el-form-item>
+
+        <el-form-item
+          prop="target"
+          label="调查对象"
+          :rules="[{ required: true, message: '请填写调查对象' }]"
+        >
+          <el-input
+            :disabled="isdisabled"
+            style="width: 200px !important"
+            v-model="form.target"
+          ></el-input>
+        </el-form-item>
+      </el-row>
+      <el-alert
+        :closable="false"
+        title="问卷信息"
+        class="alert marginBtm22"
+        type="info"
+      />
+
+      <el-row
+        v-for="(item, index) in form.questionnaireUserResultList"
+        :key="index"
+      >
+        <!--  :rules="[{ required: item.isRequire, message: '请选择问卷信息' }]" -->
+        <el-form-item
+          :prop="
+            'questionnaireUserResultList.' +
+            index +
+            '.questionnaireQuestionItemIdList'
+          "
+        >
+          <p><span v-if="item.isRequire" class="start">*</span>{{ index + 1 }}{{ item.content }}</p>
+          <el-select
+            :disabled="isdisabled"
+            v-if="item.type == 'radio'"
+            v-model="item.questionnaireQuestionItemIdList"
+            placeholder="请选择答案"
+            @change="changeSelect"
+            style="width: 585px !important"
+          >
+            <el-option
+              :label="subject.answerValue"
+              :value="String(subject.id)"
+              v-for="(subject, index) in item.questionnaireQuestionItemList"
+              :key="index"
+            ></el-option>
+          </el-select>
+          <el-select
+            :disabled="isdisabled"
+            v-else-if="item.type == 'checkbox'"
+            v-model="item.questionnaireQuestionItemIdList"
+            placeholder="请选择答案"
+            multiple
+            @change="changeSelect"
+            style="width: 585px !important"
+          >
+            <el-option
+              :label="subject.answerValue"
+              :value="String(subject.id)"
+              v-for="(subject, index) in item.questionnaireQuestionItemList"
+              :key="index"
+            ></el-option>
+          </el-select>
+          <el-input
+            :disabled="isdisabled"
+            v-else-if="item.type == 'textarea'"
+            type="textarea"
+            style="border: 0; width: 585px !important"
+            :autosize="{ minRows: 3, maxRows: 6 }"
+            placeholder="请输入其它意见"
+            v-model="item.questionnaireQuestionItemIdList"
+            @input="setTextarea"
+          >
+          </el-input>
+        </el-form-item>
+      </el-row>
+    </el-form>
+  </div>
+</template>
+<script>
+import { addQuestion, resetQuestion } from "../api";
+export default {
+  props: ["form", "isdisabled"],
+  data() {
+    return {};
+  },
+  mounted() {
+    console.log(this.form.id);
+  },
+  methods: {
+    submitSurvey() {
+      let flag = true;
+      let str;
+      for (let quests in this.form.questionnaireUserResultList) {
+        let quest = this.form.questionnaireUserResultList[quests];
+        if (
+          !(
+            quest.isRequire &&
+            quest.questionnaireQuestionItemIdList &&
+            quest.questionnaireQuestionItemIdList.length > 0
+          )
+        ) {
+          flag = false;
+          str = "请填写" + quest.content;
+          break;
+        }
+      }
+
+      if (!flag) {
+        this.$message.error(str);
+        return;
+      }
+      this.$refs.form.validate(async (flag) => {
+        if (flag) {
+          let obj = this.setObj();
+          if (this.form.id) {
+            // 修改
+            try {
+              const res = await resetQuestion(obj);
+              this.$message.success("修改成功");
+              this.$emit("close");
+            } catch (e) {
+              console.log(e);
+            }
+          } else {
+            // 新增
+            try {
+              const res = await addQuestion(obj);
+              this.$message.success("新增成功");
+              this.$emit("close");
+            } catch (e) {
+              console.log(e);
+            }
+          }
+        }
+      });
+      console.log(this.form);
+    },
+    changeSelect() {
+      this.$forceUpdate();
+    },
+    setTextarea(event, val) {
+      this.$forceUpdate();
+    },
+    setObj() {
+      this.form.questionnaireUserResultList.forEach((quest) => {
+        if (quest.type == "textarea") {
+          quest.additionalValue = quest.questionnaireQuestionItemIdList;
+          //  quest.questionnaireQuestionItemIdList= ''
+        } else if (quest.type == "checkbox") {
+          if (Array.isArray(quest.questionnaireQuestionItemIdList))
+            quest.questionnaireQuestionItemIdList =
+              quest.questionnaireQuestionItemIdList.join(",");
+        }
+      });
+      return { ...this.form };
+    },
+  },
+  watch: {},
+};
+</script>
+<style lang="scss" scoped>
+.marginBtm22 {
+  margin-bottom: 22px;
+}
+.start {
+  color: #f56c6c;
+  margin-right: 4px;
+}
+</style>

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini