Просмотр исходного кода

Merge branch '11/24SAAS' into iteration-20240410-cert

lex 1 год назад
Родитель
Сommit
a6868d8c81
54 измененных файлов с 1143 добавлено и 362 удалено
  1. 0 0
      dist/index.html
  2. 0 0
      dist/static/css/chunk-061705d9.e3988020.css
  3. 0 1
      dist/static/css/chunk-0676ba9a.e5d57a26.css
  4. 0 1
      dist/static/css/chunk-0cda4046.229731ba.css
  5. 0 1
      dist/static/css/chunk-2aafd8da.8ff1cd36.css
  6. 0 0
      dist/static/css/chunk-33330a3c.d74f9d61.css
  7. 0 1
      dist/static/css/chunk-34331fd2.692dd337.css
  8. 0 0
      dist/static/css/chunk-38994d76.9ff29e7a.css
  9. 0 1
      dist/static/css/chunk-3c27ecb4.791d85b5.css
  10. 1 0
      dist/static/css/chunk-4b1751a1.4ebd7443.css
  11. 0 0
      dist/static/css/chunk-4ee7fcea.39a1d3d9.css
  12. 0 0
      dist/static/css/chunk-5ae328ee.8fe81fd2.css
  13. 1 0
      dist/static/css/chunk-626bf21a.07117651.css
  14. 0 0
      dist/static/css/chunk-6ea71457.4737e76a.css
  15. 0 1
      dist/static/css/chunk-726d76c0.93b58f04.css
  16. 1 0
      dist/static/css/chunk-7756b2a0.dca39246.css
  17. 1 0
      dist/static/css/chunk-77be0649.4928dbd8.css
  18. 1 0
      dist/static/css/chunk-b38cc6ee.caf8f2b2.css
  19. 0 0
      dist/static/js/app.62e1b754.js
  20. 0 0
      dist/static/js/app.a7a5b293.js
  21. 0 0
      dist/static/js/chunk-061705d9.70af3239.js
  22. 0 0
      dist/static/js/chunk-0676ba9a.b030c6c9.js
  23. 0 0
      dist/static/js/chunk-0cda4046.2c28105a.js
  24. 0 0
      dist/static/js/chunk-2706ce08.a93b2f19.js
  25. 0 0
      dist/static/js/chunk-295ab5aa.f7d1481b.js
  26. 0 0
      dist/static/js/chunk-2aafd8da.7798824c.js
  27. 0 0
      dist/static/js/chunk-33330a3c.ec3a83b6.js
  28. 0 0
      dist/static/js/chunk-34331fd2.a576a3df.js
  29. 0 0
      dist/static/js/chunk-38994d76.9abb50bf.js
  30. 0 0
      dist/static/js/chunk-3c27ecb4.aad72698.js
  31. 0 0
      dist/static/js/chunk-4b1751a1.fd5cf743.js
  32. 0 0
      dist/static/js/chunk-4c292f42.e3d5b022.js
  33. 0 0
      dist/static/js/chunk-4e9861a8.b90d5919.js
  34. 0 0
      dist/static/js/chunk-4ee7fcea.00907858.js
  35. 1 1
      dist/static/js/chunk-5ae328ee.57c759f0.js
  36. 0 0
      dist/static/js/chunk-626bf21a.3a48c811.js
  37. 0 0
      dist/static/js/chunk-6ea71457.8bd1140e.js
  38. 0 0
      dist/static/js/chunk-726d76c0.fc44775e.js
  39. 0 0
      dist/static/js/chunk-7756b2a0.28405afe.js
  40. 0 0
      dist/static/js/chunk-77be0649.872a80c3.js
  41. 0 0
      dist/static/js/chunk-b38cc6ee.69607725.js
  42. 8 1
      src/constant/index.js
  43. 18 0
      src/views/categroyManager/generalSettings/overallManager.vue
  44. 119 35
      src/views/categroyManager/specialSetup/branchSetting.vue
  45. 37 20
      src/views/indexErrDataRecord/components/errorCourse.vue
  46. 37 20
      src/views/indexErrDataRecord/components/historyError.vue
  47. 40 21
      src/views/indexErrDataRecord/components/patrol.vue
  48. 182 145
      src/views/organManager/components/memberSetting.vue
  49. 402 0
      src/views/reportForm/balanced-relationship.vue
  50. 76 3
      src/views/reportForm/index.vue
  51. 69 27
      src/views/stuRecodeManager/index.vue
  52. 33 0
      src/views/studentManager/studentGroupPractice.vue
  53. 33 38
      src/views/teamDetail/components/modals/classroom-setting.vue
  54. 83 45
      src/views/withdrawal-application/index.vue

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/index.html


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/css/chunk-061705d9.e3988020.css


+ 0 - 1
dist/static/css/chunk-0676ba9a.e5d57a26.css

@@ -1 +0,0 @@
-.m-container .m-wrap[data-v-282d13ea]{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;width:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:16px}.m-container .m-wrap .newBand[data-v-282d13ea]{margin:0 5px 0 10px}.m-container .m-wrap .title[data-v-282d13ea]{width:150px;text-align:right;color:#212121;font-weight:600}.m-container .m-wrap .organSelect[data-v-282d13ea]{width:260px!important}.m-container .m-wrap .el-tooltip.micon[data-v-282d13ea]{width:20px;height:20px;position:relative;margin-left:8px}.m-container .formCollapse[data-v-282d13ea]{border:none}.m-container .formCollapse[data-v-282d13ea] .el-collapse-item__header{padding:0 15px;border-bottom:none;background-color:#f8f8f8}.m-container .formCollapse[data-v-282d13ea] .el-collapse-item__wrap{padding:15px;border-bottom:none}.m-container .formCollapse[data-v-282d13ea] .el-collapse-item__arrow.is-active{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.m-container .formCollapse .el-tabs__nav[data-v-282d13ea],.m-container .formCollapse[data-v-282d13ea] .el-collapse-item__arrow{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.m-container .formCollapse[data-v-282d13ea] .el-collapse-item__content{padding-bottom:0!important}.m-container .formCollapse .wrapTitle[data-v-282d13ea]{font-size:18px;position:relative;font-weight:600;margin-left:12px}.m-container .formCollapse .wrapTitle[data-v-282d13ea]:after{position:absolute;width:4px;height:18px;background:var(--color-primary);border-radius:2px;left:-13px;top:14px;content:""}[data-v-282d13ea] .el-input__icon.el-icon-date{height:40px!important}

+ 0 - 1
dist/static/css/chunk-0cda4046.229731ba.css

@@ -1 +0,0 @@
-[data-v-eb87393c] .description-title{margin:0!important}.visible[data-v-e49cf0ee]{visibility:hidden}.cl-container .topFrom[data-v-e49cf0ee]{margin:20px 30px 0}.cl-container .topFrom .classlist[data-v-e49cf0ee]{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;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.cl-container .topFrom .classlist ul li[data-v-e49cf0ee]{list-style:none}.cl-container .searchForm[data-v-e49cf0ee]{margin:0 30px}.btnWraps[data-v-e49cf0ee]{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}.btnWraps div[data-v-e49cf0ee]{margin-right:20px}.inputStyle[data-v-e49cf0ee]{width:180px}.red[data-v-e49cf0ee]{color:red}.green[data-v-e49cf0ee]{color:var(--color-primary)}.exportBtn[data-v-e49cf0ee]{background:var(--color-primary)}.newBand[data-v-e49cf0ee]{margin-top:30px}

+ 0 - 1
dist/static/css/chunk-2aafd8da.8ff1cd36.css

@@ -1 +0,0 @@
-.el-input[data-v-579de55d],.el-select[data-v-579de55d]{width:300px!important}.el-tag+.el-tag[data-v-29ca713f]{margin-left:10px}.el-cascader__dropdown[data-v-29ca713f],.el-input[data-v-29ca713f],.el-select[data-v-29ca713f]{width:300px!important}.el-cascader-menu[data-v-29ca713f]{width:100%}[data-v-8187e6e0] .el-input-number .el-input__inner{text-align:left}.el-input-number[data-v-8187e6e0],.el-input[data-v-97dd5394],.el-input[data-v-8187e6e0],.el-select[data-v-97dd5394],.el-select[data-v-8187e6e0]{width:300px!important}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/css/chunk-33330a3c.d74f9d61.css


+ 0 - 1
dist/static/css/chunk-34331fd2.692dd337.css

@@ -1 +0,0 @@
-.dialog-footer.question[data-v-6766c75f]{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}.btnList[data-v-6766c75f]{margin-bottom:20px}.confirmButton[data-v-6766c75f]{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.cancelButton[data-v-6766c75f]{color:#fff;background-color:var(--color-primary);border-color:var(--color-primary)}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/css/chunk-38994d76.9ff29e7a.css


+ 0 - 1
dist/static/css/chunk-3c27ecb4.791d85b5.css

@@ -1 +0,0 @@
-.ant-upload-preview[data-v-c4c7f328]{background-color:#fff}.ant-upload-preview .avatar-uploader .upload-desc[data-v-c4c7f328]{position:absolute;bottom:0;left:0;color:#ccc;font-size:8px;right:0}[data-v-c4c7f328] .avatar-uploader .el-upload--text{border:1px dashed #d9d9d9;border-radius:6px;margin-right:20px;cursor:pointer;position:relative}[data-v-c4c7f328] .avatar-uploader.uploadDisabled .el-upload--text{cursor:not-allowed;background-color:#f7f7f7}[data-v-c4c7f328] .avatar-uploader.uploadDisabled .el-upload:hover{border-color:#d9d9d9}[data-v-c4c7f328] .avatar-uploader .el-upload:hover{border-color:#409eff}[data-v-c4c7f328] .avatar-uploader-icon{font-size:22px;color:#ccc;width:108px;height:108px;line-height:108px;text-align:center}[data-v-c4c7f328].avatar{width:108px;height:108px;display:block}[data-v-c4c7f328] .el-date-editor.el-input{width:100%!important}[data-v-c4c7f328] .el-select{width:98%!important}

+ 1 - 0
dist/static/css/chunk-4b1751a1.4ebd7443.css

@@ -0,0 +1 @@
+[data-v-39f50f49] .el-input-group{width:180px;margin:0 5px}.el-row[data-v-39f50f49],p[data-v-39f50f49]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#000;margin-bottom:20px;padding:0 24px}.subtitle[data-v-39f50f49]{font-size:18px;margin-bottom:20px;position:relative;font-weight:600;margin-left:22px;padding-left:14px}.subtitle[data-v-39f50f49]:after{position:absolute;width:3px;height:16px;background:var(--color-primary);border-radius:2px;left:0;top:2px;content:""}.chiose[data-v-39f50f49] .el-input-group__append{padding:0}.chiose .append[data-v-39f50f49]{margin:0;width:70px!important}.chiose .append[data-v-39f50f49] .el-input__inner{height:34px;line-height:34px}.saveBtn[data-v-39f50f49]{margin-left:24px;margin-top:40px}[data-v-39f50f49] .el-form-item__content{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}[data-v-39f50f49] .el-form-item{margin-bottom:0}.marginLR5[data-v-39f50f49]{margin:0 5px}[data-v-39f50f49] .el-divider{margin-left:24px}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/css/chunk-4ee7fcea.39a1d3d9.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/css/chunk-5ae328ee.8fe81fd2.css


+ 1 - 0
dist/static/css/chunk-626bf21a.07117651.css

@@ -0,0 +1 @@
+[data-v-5bc77e50] .description-title{margin:0!important}.visible[data-v-3c7beba6]{visibility:hidden}.cl-container .topFrom[data-v-3c7beba6]{margin:20px 30px 0}.cl-container .topFrom .classlist[data-v-3c7beba6]{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;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.cl-container .topFrom .classlist ul li[data-v-3c7beba6]{list-style:none}.cl-container .searchForm[data-v-3c7beba6]{margin:0 30px}.btnWraps[data-v-3c7beba6]{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}.btnWraps div[data-v-3c7beba6]{margin-right:20px}.inputStyle[data-v-3c7beba6]{width:180px}.red[data-v-3c7beba6]{color:red}.green[data-v-3c7beba6]{color:var(--color-primary)}.exportBtn[data-v-3c7beba6]{background:var(--color-primary)}.newBand[data-v-3c7beba6]{margin-top:30px}

+ 0 - 0
dist/static/css/chunk-045ca156.4737e76a.css → dist/static/css/chunk-6ea71457.4737e76a.css


+ 0 - 1
dist/static/css/chunk-726d76c0.93b58f04.css

@@ -1 +0,0 @@
-[data-v-da717268] .el-input-group{width:180px;margin:0 5px}.el-row[data-v-da717268],p[data-v-da717268]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#000;margin-bottom:20px;padding:0 24px}.subtitle[data-v-da717268]{font-size:18px;margin-bottom:20px;position:relative;font-weight:600;margin-left:22px;padding-left:14px}.subtitle[data-v-da717268]:after{position:absolute;width:3px;height:16px;background:var(--color-primary);border-radius:2px;left:0;top:2px;content:""}.chiose[data-v-da717268] .el-input-group__append{padding:0}.chiose .append[data-v-da717268]{margin:0;width:70px!important}.chiose .append[data-v-da717268] .el-input__inner{height:34px;line-height:34px}.saveBtn[data-v-da717268]{margin-left:24px;margin-top:40px}[data-v-da717268] .el-form-item__content{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}[data-v-da717268] .el-form-item{margin-bottom:0}.marginLR5[data-v-da717268]{margin:0 5px}[data-v-da717268] .el-divider{margin-left:24px}

+ 1 - 0
dist/static/css/chunk-7756b2a0.dca39246.css

@@ -0,0 +1 @@
+.ant-upload-preview[data-v-237dedab]{background-color:#fff}.ant-upload-preview .avatar-uploader .upload-desc[data-v-237dedab]{position:absolute;bottom:0;left:0;color:#ccc;font-size:8px;right:0}[data-v-237dedab] .avatar-uploader .el-upload--text{border:1px dashed #d9d9d9;border-radius:6px;margin-right:20px;cursor:pointer;position:relative}[data-v-237dedab] .avatar-uploader.uploadDisabled .el-upload--text{cursor:not-allowed;background-color:#f7f7f7}[data-v-237dedab] .avatar-uploader.uploadDisabled .el-upload:hover{border-color:#d9d9d9}[data-v-237dedab] .avatar-uploader .el-upload:hover{border-color:#409eff}[data-v-237dedab] .avatar-uploader-icon{font-size:22px;color:#ccc;width:108px;height:108px;line-height:108px;text-align:center}[data-v-237dedab].avatar{width:108px;height:108px;display:block}[data-v-237dedab] .el-date-editor.el-input{width:100%!important}[data-v-237dedab] .el-select{width:98%!important}

+ 1 - 0
dist/static/css/chunk-77be0649.4928dbd8.css

@@ -0,0 +1 @@
+.el-input[data-v-579de55d],.el-select[data-v-579de55d]{width:300px!important}.el-tag+.el-tag[data-v-118dffcd]{margin-left:10px}.el-cascader__dropdown[data-v-118dffcd],.el-input[data-v-118dffcd],.el-select[data-v-118dffcd]{width:300px!important}.el-cascader-menu[data-v-118dffcd]{width:100%}[data-v-8187e6e0] .el-input-number .el-input__inner{text-align:left}.el-input-number[data-v-8187e6e0],.el-input[data-v-97dd5394],.el-input[data-v-8187e6e0],.el-select[data-v-97dd5394],.el-select[data-v-8187e6e0]{width:300px!important}

+ 1 - 0
dist/static/css/chunk-b38cc6ee.caf8f2b2.css

@@ -0,0 +1 @@
+.dialog-footer.question[data-v-58dc3e0e]{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}.btnList[data-v-58dc3e0e]{margin-bottom:20px}.confirmButton[data-v-58dc3e0e]{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.cancelButton[data-v-58dc3e0e]{color:#fff;background-color:var(--color-primary);border-color:var(--color-primary)}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/app.62e1b754.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/app.a7a5b293.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-061705d9.70af3239.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-0676ba9a.b030c6c9.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-0cda4046.2c28105a.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-2706ce08.a93b2f19.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-295ab5aa.f7d1481b.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-2aafd8da.7798824c.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-33330a3c.ec3a83b6.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-34331fd2.a576a3df.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-38994d76.9abb50bf.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-3c27ecb4.aad72698.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-4b1751a1.fd5cf743.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-4c292f42.e3d5b022.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-4e9861a8.b90d5919.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-4ee7fcea.00907858.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
dist/static/js/chunk-5ae328ee.57c759f0.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-626bf21a.3a48c811.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-6ea71457.8bd1140e.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-726d76c0.fc44775e.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-7756b2a0.28405afe.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-77be0649.872a80c3.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/chunk-b38cc6ee.69607725.js


+ 8 - 1
src/constant/index.js

@@ -316,7 +316,14 @@ export const downListType = {
   26: "经营报表收入汇总",
   27: "云教练激活明细",
   28: "课程收入明细导出",
-  29: "乐团梯队数据导出"
+  29: "乐团梯队数据导出",
+  30: "平衡关系-乐团课",
+  31: "平衡关系-VIP已排课",
+  32: "平衡关系-VIP未排课",
+  33: "平衡关系-缴费项目课时明细",
+  34: "平衡关系-学员情况总表",
+  35: "平衡关系(分表)-乐团在读学员",
+  36: "平衡关系(分表)-乐团退团学员"
 };
 
 export const withdrawalStatus = {

+ 18 - 0
src/views/categroyManager/generalSettings/overallManager.vue

@@ -364,6 +364,23 @@
             时发送短信和邮件提醒
           </el-form-item>
         </el-row>
+        <el-row>
+          <el-form-item
+            prop="273"
+            :rules="[
+              {
+                required: true,
+                message: '请选择禁止录屏'
+              }
+            ]"
+          >
+            禁止录屏:
+            <el-select placeholder="请选择禁止录屏" v-model="form['273']">
+              <el-option label="开启" value="1"></el-option>
+              <el-option label="关闭" value="0"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-row>
       </el-form>
       <!-- 列表 -->
       <!-- <el-row>
@@ -421,6 +438,7 @@ export default {
             // this.form[item.paramName] = item.paranValue
             this.$set(this.form, item.id, item.paranValue);
           });
+          console.log(this.form, "-------");
           // this.$forceUpdate()
           // console.log(this.form);
         }

+ 119 - 35
src/views/categroyManager/specialSetup/branchSetting.vue

@@ -20,7 +20,7 @@
             clearable
             placeholder="分部名称/编号/地址"
             @keyup.enter.native="
-              (e) => {
+              e => {
                 e.target.blur();
                 $refs.searchForm.save();
                 search();
@@ -197,7 +197,7 @@
             type="date"
             value-format="yyyy-MM-dd"
             :picker-options="{
-              firstDayOfWeek: 1,
+              firstDayOfWeek: 1
             }"
             placeholder="选择成立时间"
           ></el-date-picker>
@@ -212,10 +212,28 @@
             placeholder="请输入乐器分润上限"
             autocomplete="off"
           >
-          <template slot="append">元</template>
+            <template slot="append"
+              >元</template
+            >
           </el-input>
         </el-form-item>
         <el-form-item
+          label="可用教材"
+          prop="teachingMaterialId"
+          :label-width="formLabelWidth"
+        >
+          <el-cascader
+            v-model.trim="form.teachingMaterialId"
+            style="width: 100% !important"
+            :options="teachList"
+            :props="{ multiple: true }"
+            :show-all-levels="false"
+            collapse-tags
+            ref="cascader"
+            clearable
+          ></el-cascader>
+        </el-form-item>
+        <el-form-item
           label="公司名称"
           prop="corporateName"
           :label-width="formLabelWidth"
@@ -270,7 +288,7 @@
                 autoCropHeight: 300, //默认生成截图框高度
                 fixedBox: true, //是否固定截图框大小 不允许改变
                 previewsCircle: false, //预览图是否是圆形
-                title: '上传企业公章', //模态框上显示的标题
+                title: '上传企业公章' //模态框上显示的标题
               }"
               isDelete
               :imgSize="5"
@@ -318,7 +336,7 @@
                 autoCropHeight: 300, //默认生成截图框高度
                 fixedBox: true, //是否固定截图框大小 不允许改变
                 previewsCircle: false, //预览图是否是圆形
-                title: '上传企业财务公章', //模态框上显示的标题
+                title: '上传企业财务公章' //模态框上显示的标题
               }"
               isDelete
               :imgSize="5"
@@ -430,18 +448,20 @@ import {
   areaQueryChild,
   branchAdd,
   branchUpdate,
-  getParentArea,
+  getParentArea
 } from "@/api/specialSetting";
 import { vaildStudentUrl } from "@/utils/validate";
 import { queryEmployByOrganId } from "@/api/systemManage";
 import ImageCropper from "@/components/ImageCropper";
+import { queryTree } from "../../accompaniment/api";
+import _ from "lodash";
 export default {
   name: "branchSetting",
   components: { pagination, qrCode, ImageCropper },
   data() {
     return {
       headers: {
-        Authorization: getToken(),
+        Authorization: getToken()
       },
       tableList: [],
       pageInfo: {
@@ -449,19 +469,20 @@ export default {
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         total: 0, // 总条数
-        page_size: [10, 20, 40, 50], // 选择限制显示条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
       },
       organId: null,
       formActionTitle: "create",
       formTitle: {
         create: "添加分部",
-        update: "修改分部",
+        update: "修改分部"
       },
       formLabelWidth: "120px",
       branchStatus: false,
       provinceList: [], // 省列表
       cityList: [], // 市列表
       employeeList: [], // 分部下的员工集合
+      teachList: [], // 可用教材列表
       form: {
         name: null,
         province: null,
@@ -477,43 +498,72 @@ export default {
         corporateCode: null,
         corporateSeal: null,
         corporateFinancialSeal: null,
-        maxMusicalInstrumentsProfits:null
+        maxMusicalInstrumentsProfits: null,
+        teachingMaterialId: []
       },
       rules: {
         name: [{ required: true, message: "请输入分部名称", trigger: "blur" }],
         province: [{ required: true, message: "请选择省", trigger: "change" }],
         city: [{ required: true, message: "请选择市", trigger: "change" }],
         address: [
-          { required: true, message: "请输入分部地址", trigger: "blur" },
+          { required: true, message: "请输入分部地址", trigger: "blur" }
         ],
         registerDate: [
-          { required: true, message: "请选择成立时间", trigger: "change" },
+          { required: true, message: "请选择成立时间", trigger: "change" }
         ],
         gradeType: [
-          { required: true, message: "请选择学年制", trigger: "change" },
+          { required: true, message: "请选择学年制", trigger: "change" }
         ],
         maxMusicalInstrumentsProfits: [
           { required: true, message: "请输入乐器分润上线", trigger: "change" },
           {
-            pattern:
-              /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
-            message: "请输入正确的金额",
-          },
-        ],
+            pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
+            message: "请输入正确的金额"
+          }
+        ]
       },
       codeStatus: false,
       qrCodeUrl: null,
       codeTitle: "注册二维码",
       searchForm: {
-        search: "",
-      },
+        search: ""
+      }
     };
   },
   mounted() {
+    this.__init();
     this.getList();
     this.getAreaList();
   },
   methods: {
+    async __init() {
+      try {
+        // 不管是添加、查看、修改都传-1
+        const tenantId = -1;
+        const res = await queryTree({ enable: 1, tenantId });
+        const rows = res.data || [];
+        rows.forEach(item => {
+          let children = [];
+          item.label = item.name;
+          item.value = item.id;
+          let childList = item.sysMusicScoreCategoriesList
+            ? item.sysMusicScoreCategoriesList
+            : [];
+          if (childList.length > 0) {
+            childList.forEach(child => {
+              child.label = child.name;
+              child.value = child.id;
+              child.sysMusicScoreCategoriesList = [];
+              children.push(child);
+            });
+          }
+          item.children = children.length > 0 ? children : null;
+          this.teachList.push(item);
+        });
+      } catch (e) {
+        console.log(e);
+      }
+    },
     cropSuccess1(data) {
       this.form.corporateSeal = data.data.url;
     },
@@ -530,7 +580,7 @@ export default {
     },
     beforeAvatarUpload(file) {
       const imageType = {
-        "image/png": true,
+        "image/png": true
       };
       const isImage = imageType[file.type];
       const isLt2M = file.size / 1024 / 1024 < 5;
@@ -551,27 +601,32 @@ export default {
       this.form.corporateFinancialSeal = res.data.url;
     },
     onBranchSubmit(formName) {
-      this.$refs[formName].validate((valid) => {
+      this.$refs[formName].validate(valid => {
         if (!valid) return;
         this.form.areaId = this.form.city;
+        const { teachingMaterialId } = this.form;
+        let tempArr = [];
+        teachingMaterialId.forEach(ids => {
+          tempArr.push(_.last(ids));
+        });
         let obj = {
           ...this.form,
           organManager: this.form.organManager.join(","),
           educationId: this.form.educationId.join(","),
           repairId: this.form.repairId.join(","),
           joinTeacherId: this.form.joinTeacherId.join(","),
+          teachingMaterialId: tempArr.join(",")
         };
-
         if (this.formActionTitle == "create") {
           if (obj.id) {
             // 判断有没有Id,如果有则删除
             delete obj.id;
           }
-          branchAdd(obj).then((res) => {
+          branchAdd(obj).then(res => {
             this.messageTips("添加", res);
           });
         } else if (this.formActionTitle == "update") {
-          branchUpdate(obj).then((res) => {
+          branchUpdate(obj).then(res => {
             this.messageTips("修改", res);
           });
         }
@@ -590,8 +645,8 @@ export default {
       branchQueryPage({
         rows: this.pageInfo.limit,
         page: this.pageInfo.page,
-        ...this.searchForm,
-      }).then((res) => {
+        ...this.searchForm
+      }).then(res => {
         if (res.code == 200 && res.data) {
           this.tableList = res.data.rows;
           this.pageInfo.total = res.data.total;
@@ -605,13 +660,13 @@ export default {
     },
     getAreaList(parentId, callback) {
       parentId = parentId ? parentId : 0;
-      areaQueryChild({ parentId: parentId }).then((res) => {
+      areaQueryChild({ parentId: parentId }).then(res => {
         if (res.code == 200 && res.data) {
           let tempData = [];
-          res.data.forEach((item) => {
+          res.data.forEach(item => {
             tempData.push({
               label: item.name,
-              value: item.id,
+              value: item.id
             });
           });
           if (parentId) {
@@ -639,7 +694,7 @@ export default {
             organId: row.id,
             rows: 9999,
             demissionflag: false,
-            lockFlag: false,
+            lockFlag: false
           });
           this.$set(this, "employeeList", res.data.rows);
         } catch (e) {
@@ -649,9 +704,18 @@ export default {
       this.formActionTitle = type;
 
       if (type == "update") {
-        getParentArea({ id: row.areaId }).then((res) => {
+        getParentArea({ id: row.areaId }).then(res => {
           if (res.code == 200 && res.data) {
             this.getAreaList(res.data.id, () => {
+              let tempIdArr = [];
+              if (row.teachingMaterialId) {
+                const tempIds = row.teachingMaterialId
+                  .split(",")
+                  .map(i => Number(i));
+                tempIds.forEach(id => {
+                  tempIdArr.push(this.formatParentId(id, this.teachList));
+                });
+              }
               this.form = {
                 id: row.id,
                 name: row.name,
@@ -668,13 +732,15 @@ export default {
                   ? row.joinTeacherId.split(",")
                   : [],
                 educationId: row.educationId ? row.educationId.split(",") : [],
+                teachingMaterialId: tempIdArr,
                 corporateName: row.corporateName,
                 corporateCode: row.corporateCode,
                 corporateSeal: row.corporateSeal,
                 corporateFinancialSeal: row.corporateFinancialSeal,
-                maxMusicalInstrumentsProfits:row.maxMusicalInstrumentsProfits
+                maxMusicalInstrumentsProfits: row.maxMusicalInstrumentsProfits
               };
             });
+
             this.branchStatus = true;
           }
         });
@@ -682,13 +748,31 @@ export default {
         this.branchStatus = true;
       }
     },
+    formatParentId(id, list, ids = []) {
+      for (const item of list) {
+        if (item.sysMusicScoreCategoriesList) {
+          const cIds = this.formatParentId(
+            id,
+            item.sysMusicScoreCategoriesList,
+            [...ids, item.id]
+          );
+          if (cIds.includes(id)) {
+            return cIds;
+          }
+        }
+        if (item.id === id) {
+          return [...ids, id];
+        }
+      }
+      return ids;
+    },
     showCode(row) {
       this.qrCodeUrl =
         vaildStudentUrl() + "/project/register/index.html?organId=" + row.id;
       this.codeStatus = true;
       // qrCodeUrl:null,
-    },
-  },
+    }
+  }
 };
 </script>
 <style lang="scss" scoped>

+ 37 - 20
src/views/indexErrDataRecord/components/errorCourse.vue

@@ -94,7 +94,7 @@
             start-placeholder="上课开始日期"
             end-placeholder="上课结束日期"
             :picker-options="{
-              firstDayOfWeek: 1,
+              firstDayOfWeek: 1
             }"
           ></el-date-picker>
         </el-form-item>
@@ -133,7 +133,11 @@
             label="乐团/课程组编号"
           >
             <template slot-scope="scope">
-              <el-button type="text" style="width: 100%;" @click="gotoCourse(scope.row)">
+              <el-button
+                type="text"
+                style="width: 100%;"
+                @click="gotoCourse(scope.row)"
+              >
                 <copy-text>{{ scope.row.musicGroupId }}</copy-text>
               </el-button>
             </template>
@@ -404,7 +408,7 @@
             start-placeholder="创建开始日期"
             end-placeholder="创建结束日期"
             :picker-options="{
-              firstDayOfWeek: 1,
+              firstDayOfWeek: 1
             }"
           ></el-date-picker>
         </el-form-item>
@@ -422,7 +426,7 @@ import pagination from "@/components/Pagination/index";
 import {
   superFindCourseSchedules,
   cleanAttendance,
-  cancelCourseMerge,
+  cancelCourseMerge
 } from "@/api/buildTeam";
 import { bathDelete } from "@/api/vipSeting";
 import { workType, mergeCourseType } from "@/constant";
@@ -431,6 +435,7 @@ import { getTeacherPersonalAttendanceDetail } from "@/api/teacherManager";
 import { courseType, courseListType } from "@/utils/searchArray";
 import { permission } from "@/utils/directivePage";
 import { getHistoryErrCourse, getAllEducationUsers } from "../api";
+import dayjs from "dayjs";
 let nowTime = new Date();
 nowTime =
   nowTime.getFullYear() +
@@ -439,12 +444,23 @@ nowTime =
   "-" +
   nowTime.getDate();
 
+/** 获取当前月 */
+const getCurrentMonth = () => {
+  return [
+    dayjs()
+      .startOf("month")
+      .format("YYYY-MM-DD"),
+    dayjs()
+      .endOf("month")
+      .format("YYYY-MM-DD")
+  ];
+};
 const initSearch = {
   teachMode: null, // 教学模式
   organIdList: null,
   courseStatus: null,
   courseType: null,
-  timer: [], // 时间
+  timer: getCurrentMonth(), // 时间
   class: null,
   teachType: null,
   mergeCourseType: null,
@@ -455,7 +471,7 @@ const initSearch = {
   creatTimer: [],
   courseIdSearch: null,
   hasDealTime: null,
-  educationUserId: null,
+  educationUserId: null
 };
 export default {
   props: ["searchType"],
@@ -477,7 +493,7 @@ export default {
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         total: 0, // 总条数
-        page_size: [10, 20, 40, 50], // 选择限制显示条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
       },
       teacherList: [],
       schoolList: [],
@@ -490,11 +506,11 @@ export default {
       isMainGo: false,
       isDetele: false,
       showMove: false,
-      educationList: [],
+      educationList: []
     };
   },
   components: {
-    pagination,
+    pagination
   },
   created() {
     // this.searchForm.timer = [nowTime, nowTime];
@@ -518,7 +534,7 @@ export default {
         this.searchForm.isCallNames ||
         this.searchForm.creatTimer?.length > 0
       );
-    },
+    }
   },
   async mounted() {
     const { query } = this.$route;
@@ -587,6 +603,7 @@ export default {
 
     reset() {
       this.searchForm = { ...initSearch };
+      this.searchForm.timer = getCurrentMonth();
       this.search();
     },
     search() {
@@ -598,7 +615,7 @@ export default {
       this.searchForm = {
         ...initSearch,
         timer: [],
-        courseIdSearch: row.newCourseId,
+        courseIdSearch: row.newCourseId
       };
       this.search();
     },
@@ -635,7 +652,7 @@ export default {
         rows: this.rules.limit,
         searchType: this.searchType,
         ...getTimes(creatTimer, ["createStartDate", "createEndDate"]),
-        ...getTimes(timer, ["startTime", "endTime"]),
+        ...getTimes(timer, ["startTime", "endTime"])
       };
     },
     async getList() {
@@ -675,7 +692,7 @@ export default {
     lookDetail(row) {
       this.$router.push({
         name: "teamCourseList",
-        params: { courseIdSearch: row.id },
+        params: { courseIdSearch: row.id }
       });
       // this.maskForm = row;
       // 发请求 获取详情 row.id
@@ -706,17 +723,17 @@ export default {
       if (row.groupType == "MUSIC") {
         this.$router.push({
           path: "/teamList",
-          query: { search: row.musicGroupId },
+          query: { search: row.musicGroupId }
         });
       } else if (row.groupType == "VIP") {
         this.$router.push({
           path: "/vipManager/vipList",
-          query: { search: row.musicGroupId },
+          query: { search: row.musicGroupId }
         });
       } else if (row.groupType == "PRACTICE") {
         this.$router.push({
           path: "/accompanyManager/accompany",
-          query: { search: row.musicGroupId },
+          query: { search: row.musicGroupId }
         });
       }
     },
@@ -727,7 +744,7 @@ export default {
     okMore() {
       this.getList();
       this.showMove = false;
-    },
+    }
   },
   filters: {
     isCall(val) {
@@ -736,15 +753,15 @@ export default {
       } else if (val == 1) {
         return "已点名";
       }
-    },
+    }
   },
   watch: {
     classVisible(val) {
       if (!val) {
         this.activeName = null;
       }
-    },
-  },
+    }
+  }
 };
 </script>
 <style lang="scss" scoped>

+ 37 - 20
src/views/indexErrDataRecord/components/historyError.vue

@@ -55,7 +55,7 @@
           start-placeholder="开始日期"
           end-placeholder="结束日期"
           :picker-options="{
-            firstDayOfWeek: 1,
+            firstDayOfWeek: 1
           }"
         ></el-date-picker>
       </el-form-item>
@@ -99,7 +99,7 @@
         >
       </statistic-item>
       <statistic-item>
-        <span>课程考异常剩余/总数</span>
+        <span>课程考异常剩余/总数</span>
         <span>
           {{
             statInfo.teacherExceptionAttendanceSurplus
@@ -267,12 +267,25 @@ import pagination from "@/components/Pagination/index";
 import {
   getIndexErrData,
   getErrDataSummarizing,
-  getAllEducationUsers,
+  getAllEducationUsers
 } from "../api";
 import dayjs from "dayjs";
 import { getTimes } from "@/utils";
 import { Export } from "@/utils/downLoadFile";
 import qs from "qs";
+
+/** 获取当前月 */
+const getCurrentMonth = () => {
+  return [
+    dayjs()
+      .startOf("month")
+      .format("YYYY-MM-DD"),
+    dayjs()
+      .endOf("month")
+      .format("YYYY-MM-DD")
+  ];
+};
+console.log(getCurrentMonth(), "getCurrentMonth()");
 export default {
   props: ["searchType"],
   components: { pagination, "count-to": countTo },
@@ -280,8 +293,8 @@ export default {
     return {
       searchForm: {
         organIds: "",
-        timer: [],
-        educationUserId: "",
+        timer: getCurrentMonth(),
+        educationUserId: ""
       },
       tableList: [],
       handleVisible: false,
@@ -290,7 +303,7 @@ export default {
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         total: 0, // 总条数
-        page_size: [10, 20, 40, 50], // 选择限制显示条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
       },
       statInfo: {
         inspectionItemPlan: 0,
@@ -302,9 +315,9 @@ export default {
         teacherNotAClass: 0,
         teacherNotAClassSurplus: 0,
         studentVisit: 0,
-        studentVisitSurplus: 0,
+        studentVisitSurplus: 0
       },
-      educationList: [],
+      educationList: []
     };
   },
   async mounted() {
@@ -322,6 +335,7 @@ export default {
     },
     onReSet() {
       this.$refs.searchForm.resetFields();
+      this.searchForm.timer = getCurrentMonth();
       this.search();
     },
     search() {
@@ -342,7 +356,7 @@ export default {
         page: this.rules.page,
         rows: this.rules.limit,
         ...getTimes(timer, ["startDate", "endDate"]),
-        searchType: this.searchType,
+        searchType: this.searchType
       };
       try {
         const res = await getIndexErrData(params);
@@ -375,14 +389,18 @@ export default {
     //   }
     // },
     gotoHander(row) {
-      let startTime = dayjs(row.month).startOf("month").format("YYYY-MM-DD");
-      let endTime = dayjs(row.month).endOf("month").format("YYYY-MM-DD");
+      let startTime = dayjs(row.month)
+        .startOf("month")
+        .format("YYYY-MM-DD");
+      let endTime = dayjs(row.month)
+        .endOf("month")
+        .format("YYYY-MM-DD");
       if (row.item == "VISIT") {
         // 学员回访
         // 跳到回访页面 搜索条件 教务老师 时间范围
         this.$router.push({
           path: "/studentManager/returnVisitList",
-          query: { teacher: row.userName, timer: [startTime, endTime] },
+          query: { teacher: row.userName, timer: [startTime, endTime] }
         });
       } else {
         // 下校巡查
@@ -395,8 +413,8 @@ export default {
             name: row.userName,
             organId: row.organId,
             itemId: row.id,
-            times: row.times,
-          },
+            times: row.times
+          }
         });
       }
     },
@@ -407,7 +425,7 @@ export default {
         page: this.rules.page,
         rows: this.rules.limit,
         ...getTimes(timer, ["startDate", "endDate"]),
-        searchType: this.searchType,
+        searchType: this.searchType
       };
       Export(
         this,
@@ -415,13 +433,12 @@ export default {
           url: "/api-web/export/exportIndexHistoryErrData",
           fileName: "首页历史异常统计.xls",
           method: "post",
-          params: qs.stringify({ ...params }),
+          params: qs.stringify({ ...params })
         },
         "您确定导出首页历史异常统计?"
       );
-    },
-  },
+    }
+  }
 };
 </script>
-<style lang="scss" scoped>
-</style>
+<style lang="scss" scoped></style>

+ 40 - 21
src/views/indexErrDataRecord/components/patrol.vue

@@ -1,4 +1,4 @@
- <!--  -->
+<!--  -->
 <template>
   <div>
     <!-- <h2> class="m-container"
@@ -158,12 +158,19 @@
           </el-table-column>
           <el-table-column align="center" label="巡查项目是否异常">
             <template slot-scope="scope">
-              {{ scope.row.conclusionStatus ?'否':'是'}}
+              {{ scope.row.conclusionStatus ? "否" : "是" }}
             </template>
           </el-table-column>
-          <el-table-column align="center" prop="subject" label="巡查时间" width="103px">
+          <el-table-column
+            align="center"
+            prop="subject"
+            label="巡查时间"
+            width="103px"
+          >
             <template slot-scope="scope">
-              {{ dayjs(scope.row.planStart).format("YYYY-MM-DD HH:mm") }}~{{ dayjs(scope.row.planEnd).format("HH:mm") }}
+              {{ dayjs(scope.row.planStart).format("YYYY-MM-DD HH:mm") }}~{{
+                dayjs(scope.row.planEnd).format("HH:mm")
+              }}
             </template>
           </el-table-column>
           <el-table-column
@@ -276,7 +283,7 @@
           label="处理方式"
           prop="memo"
           :rules="[
-            { required: true, message: '请输入处理方式', trigger: 'blur' },
+            { required: true, message: '请输入处理方式', trigger: 'blur' }
           ]"
         >
           <el-input type="textarea" v-model.trim="handleForm.memo"></el-input>
@@ -303,6 +310,18 @@ import { getTimes } from "@/utils";
 import { Export } from "@/utils/downLoadFile";
 import gpsLoction from "@/views/teamDetail/componentCourse/gpsLocation";
 import { getErrInspectionData } from "../api";
+
+/** 获取当前月 */
+const getCurrentMonth = () => {
+  return [
+    dayjs()
+      .startOf("month")
+      .format("YYYY-MM-DD"),
+    dayjs()
+      .endOf("month")
+      .format("YYYY-MM-DD")
+  ];
+};
 export default {
   props: ["searchType"],
   components: { pagination, LookDetail, gpsLoction },
@@ -319,8 +338,8 @@ export default {
         // musicGroupId: null,
         conclusionStatus: null,
         cooperationOrganId: null,
-        createTimer: [],
-        hasDealTime:null
+        createTimer: getCurrentMonth(),
+        hasDealTime: null
       },
       tableList: [],
       pageInfo: {
@@ -328,15 +347,15 @@ export default {
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         total: 0, // 总条数
-        page_size: [10, 20, 40, 50], // 选择限制显示条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
       },
       handleStatus: false,
       handleForm: {
         id: null,
-        memo: null,
+        memo: null
       },
       tableStatus: false,
-      gpsVisible: false,
+      gpsVisible: false
     };
   },
   async mounted() {
@@ -355,7 +374,6 @@ export default {
     await this.$store.dispatch("setBranchs");
     await this.$store.dispatch("setOrganRole");
 
-
     // 乐团列表 {只查询进行中的乐团}
     // await getTeamList({ musicGroupStatus: 'PROGRESS', rows: 9999 }).then(res => {
     //     if(res.code == 200) {
@@ -378,7 +396,7 @@ export default {
           page: this.pageInfo.page,
           rows: this.pageInfo.limit,
           searchType: this.searchType,
-          ...getTimes(createTimer, ["startTime", "endTime"]),
+          ...getTimes(createTimer, ["startTime", "endTime"])
         };
         const res = await getErrInspectionData(params);
         this.tableList = res.data.rows;
@@ -396,7 +414,7 @@ export default {
     onGPS(row) {
       this.activeRow = {
         schoolLongitudeLatitude: row.schoolGps,
-        signOutLongitudeLatitude: row.submitedGps,
+        signOutLongitudeLatitude: row.submitedGps
       };
       this.gpsVisible = true;
     },
@@ -408,8 +426,8 @@ export default {
           fileName: "巡查结果.xls",
           method: "get",
           params: {
-            planId: row.id,
-          },
+            planId: row.id
+          }
         },
         "您确定导出巡查结果?"
       );
@@ -421,7 +439,7 @@ export default {
         return;
       }
       // 合作单位
-      await queryByOrganId({ organId: value }).then((res) => {
+      await queryByOrganId({ organId: value }).then(res => {
         if (res.code == 200) {
           this.cooperationList = res.data;
         }
@@ -433,6 +451,7 @@ export default {
     },
     onReSet() {
       this.$refs["searchForm"].resetFields();
+      this.searchForm.createTimer = getCurrentMonth();
       this.pageInfo.page = 1;
       this.getList();
     },
@@ -442,7 +461,7 @@ export default {
       this.handleStatus = true;
     },
     onHandleSubmit(formName) {
-      this.$refs[formName].validate(async (valid) => {
+      this.$refs[formName].validate(async valid => {
         if (valid) {
           console.log(this.handleForm);
           try {
@@ -456,17 +475,17 @@ export default {
     },
     handleClose(formName) {
       this.$refs[formName].resetFields();
-    },
+    }
   },
   filters: {
     statusFormat(value) {
       let template = ["未提交", "正常", "异常"];
       return template[value];
-    },
-  },
+    }
+  }
 };
 </script>
-<style lang='scss' scoped>
+<style lang="scss" scoped>
 ::v-deep .el-dialog__body {
   // padding: 10px 20px;
 }

+ 182 - 145
src/views/organManager/components/memberSetting.vue

@@ -2,96 +2,129 @@
 <template>
   <div>
     <el-alert
-        title="会员设置"
-        type="info"
-        :closable="false"
-        style="margin-bottom: 20px"
-      ></el-alert>
-      <el-form ref="form" label-position="top" :model="form" label-width="140px"  :inline="true">
-        <el-form-item label="按天会员激活金额" prop="day_divide"
-          :rules="[{ required: true, message: '请输入会员激活金额', trigger: 'blur' }]">
-          <el-input
-            :disabled="isDisabled"
-            placeholder="请输入会员激活金额"
-            v-model="form.day_divide"
-            @keyup.native='keyupEvent($event)'
-            style="width: 238px;"
-          >
-            <div slot="append">元/天/人</div>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="月度会员激活价" prop="month_divide"
-          :rules="[{ required: true, message: '请输入会员激活价', trigger: 'blur' }]">
-          <el-input
-            :disabled="isDisabled"
-            placeholder="请输入会员激活价"
-            v-model="form.month_divide"
-            @keyup.native='keyupEvent($event)'
-            style="width: 238px;"
-          >
-            <div slot="append">元/月/人</div>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="季度会员激活价" prop="quarter_divide"
-          :rules="[{ required: true, message: '请输入会员激活价', trigger: 'blur' }]">
-          <el-input
-            :disabled="isDisabled"
-            placeholder="请输入会员激活价"
-            v-model="form.quarter_divide"
-            @keyup.native='keyupEvent($event)'
-            style="width: 238px;"
-          >
-            <div slot="append">元/季/人</div>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="半年会员激活价" prop="half_year_divide"
-          :rules="[{ required: true, message: '请输入会员激活价', trigger: 'blur' }]">
-          <el-input
-            :disabled="isDisabled"
-            placeholder="请输入会员激活价"
-            @keyup.native='keyupEvent($event)'
-            v-model="form.half_year_divide"
-            style="width: 238px;"
-          >
-            <div slot="append">元/半年/人</div>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="年度会员激活价" prop="year_divide"
-          :rules="[{ required: true, message: '请输入会员激活价', trigger: 'blur' }]">
-          <el-input
-            :disabled="isDisabled"
-            placeholder="请输入会员激活价"
-            @keyup.native='keyupEvent($event)'
-            v-model="form.year_divide"
-            style="width: 238px;"
-          >
-            <div slot="append">元/年/人</div>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="可用教材" prop="teachingMaterialId">
-          <el-cascader
-            v-model.trim="form.teachingMaterialId"
-            :disabled="isDisabled"
-            v-show="!isDisabled"
-            style="width: 300px !important"
-            :options="teachList"
-            :props="{ multiple: true }"
-            :show-all-levels="false"
-            collapse-tags
-            ref="cascader"
-            @change="onChange"
-            clearable></el-cascader>
+      title="会员设置"
+      type="info"
+      :closable="false"
+      style="margin-bottom: 20px"
+    ></el-alert>
+    <el-form
+      ref="form"
+      label-position="top"
+      :model="form"
+      label-width="140px"
+      :inline="true"
+    >
+      <el-form-item
+        label="按天会员激活金额"
+        prop="day_divide"
+        :rules="[
+          { required: true, message: '请输入会员激活金额', trigger: 'blur' }
+        ]"
+      >
+        <el-input
+          :disabled="isDisabled"
+          placeholder="请输入会员激活金额"
+          v-model="form.day_divide"
+          @keyup.native="keyupEvent($event)"
+          style="width: 238px;"
+        >
+          <div slot="append">元/天/人</div>
+        </el-input>
+      </el-form-item>
+      <el-form-item
+        label="月度会员激活价"
+        prop="month_divide"
+        :rules="[
+          { required: true, message: '请输入会员激活价', trigger: 'blur' }
+        ]"
+      >
+        <el-input
+          :disabled="isDisabled"
+          placeholder="请输入会员激活价"
+          v-model="form.month_divide"
+          @keyup.native="keyupEvent($event)"
+          style="width: 238px;"
+        >
+          <div slot="append">元/月/人</div>
+        </el-input>
+      </el-form-item>
+      <el-form-item
+        label="季度会员激活价"
+        prop="quarter_divide"
+        :rules="[
+          { required: true, message: '请输入会员激活价', trigger: 'blur' }
+        ]"
+      >
+        <el-input
+          :disabled="isDisabled"
+          placeholder="请输入会员激活价"
+          v-model="form.quarter_divide"
+          @keyup.native="keyupEvent($event)"
+          style="width: 238px;"
+        >
+          <div slot="append">元/季/人</div>
+        </el-input>
+      </el-form-item>
+      <el-form-item
+        label="半年会员激活价"
+        prop="half_year_divide"
+        :rules="[
+          { required: true, message: '请输入会员激活价', trigger: 'blur' }
+        ]"
+      >
+        <el-input
+          :disabled="isDisabled"
+          placeholder="请输入会员激活价"
+          @keyup.native="keyupEvent($event)"
+          v-model="form.half_year_divide"
+          style="width: 238px;"
+        >
+          <div slot="append">元/半年/人</div>
+        </el-input>
+      </el-form-item>
+      <el-form-item
+        label="年度会员激活价"
+        prop="year_divide"
+        :rules="[
+          { required: true, message: '请输入会员激活价', trigger: 'blur' }
+        ]"
+      >
+        <el-input
+          :disabled="isDisabled"
+          placeholder="请输入会员激活价"
+          @keyup.native="keyupEvent($event)"
+          v-model="form.year_divide"
+          style="width: 238px;"
+        >
+          <div slot="append">元/年/人</div>
+        </el-input>
+      </el-form-item>
+      <el-form-item label="可用教材" prop="teachingMaterialId">
+        <el-cascader
+          v-model.trim="form.teachingMaterialId"
+          :disabled="isDisabled"
+          v-show="!isDisabled"
+          style="width: 300px !important"
+          :options="teachList"
+          :props="{ multiple: true }"
+          :show-all-levels="false"
+          collapse-tags
+          ref="cascader"
+          @change="onChange"
+          clearable
+        ></el-cascader>
 
-          <el-tag
-            :key="tag.id"
-            v-show="isDisabled"
-            v-for="tag in dynamicTags"
-            :disable-transitions="false"
-            @close="handleClose(tag)">
-            {{tag.name}}
-          </el-tag>
-        </el-form-item>
-      </el-form>
+        <el-tag
+          :key="tag.id"
+          v-show="isDisabled"
+          v-for="tag in dynamicTags"
+          :disable-transitions="false"
+          @close="handleClose(tag)"
+        >
+          {{ tag.name }}
+        </el-tag>
+      </el-form-item>
+    </el-form>
   </div>
 </template>
 
@@ -113,11 +146,11 @@
 //     }
 // }
 // import { getSysMusicScoreList } from '@/views/teachManager/api'
-import { queryTree } from '../../accompaniment/api'
-import _ from 'lodash'
+import { queryTree } from "../../accompaniment/api";
+import _ from "lodash";
 export default {
-  props: ['type', 'data'],
-  data () {
+  props: ["type", "data"],
+  data() {
     return {
       form: {
         day_divide: null,
@@ -125,72 +158,76 @@ export default {
         quarter_divide: null,
         half_year_divide: null,
         year_divide: null,
-        teachingMaterialId: [], // 可用教材
+        teachingMaterialId: [] // 可用教材
       },
       teachList: [], // 教材列表
       dynamicTags: []
     };
   },
-  async mounted () {
-    await this.__init()
-    if(this.data) {
-      const { config, teachingMaterialId } = this.data
-      const tmpConfig = config ? JSON.parse(config) : {}
-      let tempIdArr = []
-      if(teachingMaterialId) {
-        const tempIds = teachingMaterialId.split(',').map(i => Number(i))
+  async mounted() {
+    await this.__init();
+    if (this.data) {
+      const { config, teachingMaterialId } = this.data;
+      const tmpConfig = config ? JSON.parse(config) : {};
+      let tempIdArr = [];
+      if (teachingMaterialId) {
+        const tempIds = teachingMaterialId.split(",").map(i => Number(i));
         tempIds.forEach(id => {
-          tempIdArr.push(this.formatParentId(id, this.teachList))
-        })
+          tempIdArr.push(this.formatParentId(id, this.teachList));
+        });
       }
       this.form = {
         ...tmpConfig.member_config,
         teachingMaterialId: tempIdArr
-      }
+      };
       this.$nextTick(() => {
-        this.onChange()
-      })
+        this.onChange();
+      });
     }
   },
   computed: {
     isDisabled() {
-      return this.type == 'setting' ? true : false
+      return this.type == "setting" ? true : false;
     }
   },
   methods: {
     async __init() {
       try {
         // 不管是添加、查看、修改都传-1
-        const tenantId = -1
-        const res = await queryTree({ enable: 1, tenantId })
-        const rows = res.data || []
+        const tenantId = -1;
+        const res = await queryTree({ enable: 1, tenantId });
+        const rows = res.data || [];
         rows.forEach(item => {
-          let children = []
-          item.label = item.name
-          item.value = item.id
-          let childList = item.sysMusicScoreCategoriesList ? item.sysMusicScoreCategoriesList : []
-          if(childList.length > 0) {
+          let children = [];
+          item.label = item.name;
+          item.value = item.id;
+          let childList = item.sysMusicScoreCategoriesList
+            ? item.sysMusicScoreCategoriesList
+            : [];
+          if (childList.length > 0) {
             childList.forEach(child => {
-              child.label = child.name
-              child.value = child.id
-              child.sysMusicScoreCategoriesList = []
-              children.push(child)
-            })
+              child.label = child.name;
+              child.value = child.id;
+              child.sysMusicScoreCategoriesList = [];
+              children.push(child);
+            });
           }
-          item.children = children.length > 0 ? children : null
-          this.teachList.push(item)
-        })
-      } catch(e) { console.log(e) }
+          item.children = children.length > 0 ? children : null;
+          this.teachList.push(item);
+        });
+      } catch (e) {
+        console.log(e);
+      }
     },
     onChange() {
-      let childNodes = this.$refs.cascader.getCheckedNodes(true)
-      this.dynamicTags = []
+      let childNodes = this.$refs.cascader.getCheckedNodes(true);
+      this.dynamicTags = [];
       childNodes.forEach(node => {
         this.dynamicTags.push({
           name: node.label,
           id: node.value
-        })
-      })
+        });
+      });
     },
     formatParentId(id, list, ids = []) {
       for (const item of list) {
@@ -210,35 +247,35 @@ export default {
       }
       return ids;
     },
-    handleClose(tag) {
-
-    },
+    handleClose(tag) {},
     onSubmit() {
-      let status = false
+      let status = false;
       this.$refs.form.validate(_ => {
-        status = _
-      })
-      return status
+        status = _;
+      });
+      return status;
     },
     getValues() {
-      const { teachingMaterialId, ...res } = this.form
-      let tempArr = []
+      const { teachingMaterialId, ...res } = this.form;
+      let tempArr = [];
       teachingMaterialId.forEach(ids => {
-        tempArr.push(_.last(ids))
-      })
+        tempArr.push(_.last(ids));
+      });
       return {
         member_config: { ...res },
         teachingMaterialId: tempArr
-      }
-    },
-  },
+      };
+    }
+  }
 };
 </script>
-<style lang='scss' scoped>
+<style lang="scss" scoped>
 .el-tag + .el-tag {
   margin-left: 10px;
 }
-.el-input, .el-select, .el-cascader__dropdown {
+.el-input,
+.el-select,
+.el-cascader__dropdown {
   width: 300px !important;
 }
 .el-cascader-menu {

+ 402 - 0
src/views/reportForm/balanced-relationship.vue

@@ -0,0 +1,402 @@
+<template>
+  <div>
+    <div class="m-wrap" v-permission="'export/EXPORT_MUSIC_GROUP_ECHELON_DATA'">
+      <div class="title">乐团梯队数据:</div>
+      <!-- <el-date-picker
+        v-model="month1"
+        type="month"
+        placeholder="选择月"
+        value-format="yyyy-MM"
+        class="organSelect"
+        :picker-options="pickerOptions"
+        clearable
+      ></el-date-picker> -->
+      <select-all
+        v-model.trim="organId1"
+        class="organSelect"
+        style="width: 100%"
+        filterable
+        multiple
+        placeholder="请选择分部"
+        clearable
+      >
+        <el-option
+          v-for="(item, index) in selects.branchs"
+          :key="index"
+          :label="item.name"
+          :value="item.id"
+        ></el-option>
+      </select-all>
+      <ExportChiose
+        style="margin-left: 10px"
+        ExportEnum="EXPORT_MUSIC_GROUP_ECHELON_DATA"
+        :exportData="exportData1"
+        fileName="平衡关系-乐团梯队数据导出"
+        errorMsg="请选择月份"
+        message="您确认导出乐团梯队数据"
+        :flag="this.organId1.length <= 0"
+        :isDownList="true"
+      />
+    </div>
+
+    <div
+      class="m-wrap"
+      v-permission="'export/EXPORT_BALANCED_RELATIONSHIP_MUSIC_COURSE'"
+    >
+      <div class="title">乐团课:</div>
+      <el-date-picker
+        v-model="month2"
+        type="month"
+        placeholder="选择月"
+        value-format="yyyy-MM"
+        class="organSelect"
+        :picker-options="pickerOptions"
+        clearable
+      ></el-date-picker>
+      <ExportChiose
+        style="margin-left: 10px"
+        ExportEnum="EXPORT_BALANCED_RELATIONSHIP_MUSIC_COURSE"
+        :exportData="exportData2"
+        fileName="平衡关系-乐团课导出"
+        errorMsg="请选择月份"
+        message="您确认导出乐团课"
+        :flag="this.month2.length <= 0"
+        :isDownList="true"
+      />
+    </div>
+
+    <div
+      class="m-wrap"
+      v-permission="'export/EXPORT_BALANCED_RELATIONSHIP_VIP_COURSE'"
+    >
+      <div class="title">VIP已排课:</div>
+      <el-date-picker
+        v-model="month3"
+        type="month"
+        placeholder="选择月"
+        value-format="yyyy-MM"
+        class="organSelect"
+        :picker-options="pickerOptions"
+        clearable
+      ></el-date-picker>
+      <ExportChiose
+        style="margin-left: 10px"
+        ExportEnum="EXPORT_BALANCED_RELATIONSHIP_VIP_COURSE"
+        :exportData="exportData3"
+        fileName="平衡关系-VIP已排课导出"
+        errorMsg="请选择月份"
+        message="您确认导出VIP已排课"
+        :flag="this.month3.length <= 0"
+        :isDownList="true"
+      />
+    </div>
+
+    <div
+      class="m-wrap"
+      v-permission="'export/EXPORT_BALANCED_RELATIONSHIP_VIP_NO_COURSE'"
+    >
+      <div class="title">VIP未排课:</div>
+      <el-date-picker
+        v-model="month4"
+        type="month"
+        placeholder="选择月"
+        value-format="yyyy-MM"
+        class="organSelect"
+        :picker-options="pickerOptions"
+        clearable
+      ></el-date-picker>
+      <ExportChiose
+        style="margin-left: 10px"
+        ExportEnum="EXPORT_BALANCED_RELATIONSHIP_VIP_NO_COURSE"
+        :exportData="exportData4"
+        fileName="平衡关系-VIP未排课导出"
+        errorMsg="请选择月份"
+        message="您确认导出VIP未排课"
+        :flag="this.month4.length <= 0"
+        :isDownList="true"
+      />
+    </div>
+
+    <div
+      class="m-wrap"
+      v-permission="'export/EXPORT_BALANCED_RELATIONSHIP_MUSIC_SUB_COURSE'"
+    >
+      <div class="title">缴费项目课时明细:</div>
+      <el-date-picker
+        v-model="month5"
+        type="monthrange"
+        placeholder="选择月"
+        value-format="yyyy-MM"
+        class="organSelect"
+        start-placeholder="开始月份"
+        end-placeholder="结束月份"
+        :picker-options="pickerOptions2"
+        clearable
+      ></el-date-picker>
+      <ExportChiose
+        style="margin-left: 10px"
+        ExportEnum="EXPORT_BALANCED_RELATIONSHIP_MUSIC_SUB_COURSE"
+        :exportData="exportData5"
+        fileName="平衡关系-缴费项目课时明细导出"
+        errorMsg="请选择月份"
+        message="您确认导出缴费项目课时明细"
+        :flag="this.month5.length <= 0"
+        :isDownList="true"
+      />
+    </div>
+
+    <div
+      class="m-wrap"
+      v-permission="'export/EXPORT_BALANCED_RELATIONSHIP_STUDENT_INFO'"
+    >
+      <div class="title">学员情况总表:</div>
+      <el-date-picker
+        v-model="month6"
+        type="month"
+        placeholder="选择月"
+        value-format="yyyy-MM"
+        class="organSelect"
+        :picker-options="pickerOptions"
+        clearable
+      ></el-date-picker>
+      <ExportChiose
+        style="margin-left: 10px"
+        ExportEnum="EXPORT_BALANCED_RELATIONSHIP_STUDENT_INFO"
+        :exportData="exportData6"
+        fileName="平衡关系-学员情况总表导出"
+        errorMsg="请选择月份"
+        message="您确认导出学员情况总表"
+        :flag="this.month6.length <= 0"
+        :isDownList="true"
+      />
+    </div>
+
+    <div
+      class="m-wrap"
+      v-permission="'export/EXPORT_BALANCED_RELATIONSHIP_STUDENT_NORMAL_DETAIL'"
+    >
+      <div class="title">乐团在读学员:</div>
+      <ExportChiose
+        style="margin-left: 10px"
+        ExportEnum="EXPORT_BALANCED_RELATIONSHIP_STUDENT_NORMAL_DETAIL"
+        fileName="平衡关系(分表)-乐团在读学员导出"
+        errorMsg="请选择月份"
+        message="您确认导出乐团在读学员"
+        :isDownList="true"
+      />
+    </div>
+
+    <div
+      class="m-wrap"
+      v-permission="'export/EXPORT_BALANCED_RELATIONSHIP_STUDENT_QUIT_DETAIL'"
+    >
+      <div class="title">乐团退团学员:</div>
+      <el-date-picker
+        v-model="month7"
+        type="month"
+        placeholder="选择月"
+        value-format="yyyy-MM"
+        class="organSelect"
+        :picker-options="pickerOptions"
+        clearable
+      ></el-date-picker>
+      <ExportChiose
+        style="margin-left: 10px"
+        ExportEnum="EXPORT_BALANCED_RELATIONSHIP_STUDENT_QUIT_DETAIL"
+        :exportData="exportData7"
+        fileName="平衡关系(分表)-乐团退团学员导出"
+        errorMsg="请选择月份"
+        message="您确认导出乐团退团学员"
+        :flag="this.month7.length <= 0"
+        :isDownList="true"
+      />
+    </div>
+    <!-- EXPORT_MUSIC_GROUP_ECHELON_DATA(29,"乐团梯队数据导出"),
+	EXPORT_BALANCED_RELATIONSHIP_MUSIC_COURSE(30,"平衡关系-乐团课"),
+	EXPORT_BALANCED_RELATIONSHIP_VIP_COURSE(31,"平衡关系-VIP已排课"),
+	EXPORT_BALANCED_RELATIONSHIP_VIP_NO_COURSE(32,"平衡关系-VIP未排课"),
+	EXPORT_BALANCED_RELATIONSHIP_MUSIC_SUB_COURSE(33,"平衡关系-缴费项目课时明细"),
+	EXPORT_BALANCED_RELATIONSHIP_STUDENT_INFO(34,"平衡关系-学员情况总表"),
+	EXPORT_BALANCED_RELATIONSHIP_STUDENT_NORMAL_DETAIL(35,"平衡关系(分表)-乐团在读学员"),
+	EXPORT_BALANCED_RELATIONSHIP_STUDENT_QUIT_DETAIL(36,"平衡关系(分表)-乐团退团学员") -->
+  </div>
+</template>
+<script>
+import ExportChiose from "@/components/Export-chiose";
+import { getTimes } from "@/utils";
+import dayjs from "dayjs";
+export default {
+  name: "balanced-relationship",
+  components: {
+    ExportChiose
+  },
+  data() {
+    return {
+      pickerOptions: {
+        firstDayOfWeek: 1,
+        disabledDate(time) {
+          return time.getTime() + 86400000 > dayjs(new Date()).startOf("month");
+        }
+      },
+      pickerOptions2: {
+        firstDayOfWeek: 1,
+        disabledDate(time) {
+          return time.getTime() > dayjs(new Date()).startOf("month");
+        }
+      },
+      organId1: [], // 乐团梯队数据
+      month2: "", // 平衡关系-乐团课
+      month3: "", // 平衡关系-VIP已排课
+      month4: "", // 平衡关系-VIP未排课
+      month5: [], // 平衡关系-缴费项目课时明细
+      month6: "", // 平衡关系-学员情况总表
+      month7: "" // 平衡关系(分表)-乐团退团学员
+    };
+  },
+  mounted() {
+    // this.$store.dispatch("setBranchs");
+  },
+  methods: {
+    // exportMusicGroup() {
+    //   let params = {
+    //     ...getTimes(this.teamTimer, ["startTime", "endTime"]),
+    //     month: this.teamOrganId.join(",")
+    //   };
+    //   Export(
+    //     this,
+    //     {
+    //       method: "post",
+    //       url: "/api-web/export/exportMusicGroupCourseList",
+    //       params: this.$helpers.qs.stringify({
+    //         ...params
+    //       })
+    //     },
+    //     "是否确认导出报表?"
+    //   );
+    // }
+  },
+  computed: {
+    exportData1() {
+      let data = {
+        organId: this.organId1.join(",")
+      };
+      return data;
+    },
+    exportData2() {
+      let data = {
+        month: this.month2
+      };
+      return data;
+    },
+    exportData3() {
+      let data = {
+        month: this.month3
+      };
+      return data;
+    },
+    exportData4() {
+      let data = {
+        month: this.month4
+      };
+      return data;
+    },
+    exportData5() {
+      let data = {
+        ...getTimes(this.month5, ["startMonth", "endMonth"], "YYYY-MM")
+      };
+      return data;
+    },
+    exportData6() {
+      let data = {
+        month: this.month6
+      };
+      return data;
+    },
+    exportData7() {
+      let data = {
+        month: this.month7
+      };
+      return data;
+    }
+  }
+  // AccountDetailTimer
+};
+</script>
+<style lang="scss" scoped>
+.m-container {
+  // margin-top: 20px;
+  .m-wrap {
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-start;
+    width: 100%;
+    align-items: center;
+    margin-bottom: 16px;
+    .newBand {
+      margin: 0 5px 0 10px;
+    }
+    .title {
+      width: 150px;
+      // height: 40px;
+      // line-height: 40px;
+      text-align: right;
+      color: #212121;
+      font-weight: 600;
+    }
+    .organSelect {
+      width: 260px !important;
+    }
+    .el-tooltip.micon {
+      width: 20px;
+      height: 20px;
+      position: relative;
+      margin-left: 8px;
+      // top: 12px;
+    }
+  }
+
+  .formCollapse {
+    border: none;
+    ::v-deep .el-collapse-item__header {
+      padding: 0 15px;
+      border-bottom: none;
+      background-color: #f8f8f8;
+    }
+    ::v-deep .el-collapse-item__wrap {
+      padding: 15px;
+      border-bottom: none;
+    }
+    ::v-deep .el-collapse-item__arrow.is-active {
+      transform: rotate(-90deg);
+    }
+    //  默认方向
+    ::v-deep .el-collapse-item__arrow,
+    .el-tabs__nav {
+      transform: rotate(90deg);
+    }
+    ::v-deep .el-collapse-item__content {
+      padding-bottom: 0px !important;
+    }
+    .wrapTitle {
+      font-size: 18px;
+      position: relative;
+      font-weight: 600;
+      margin-left: 12px;
+
+      &::after {
+        position: absolute;
+        width: 4px;
+        height: 18px;
+        background: var(--color-primary);
+        border-radius: 2px;
+        left: -13px;
+        top: 14px;
+        content: "";
+      }
+    }
+  }
+}
+::v-deep .el-input__icon.el-icon-date {
+  height: 40px !important;
+}
+</style>

+ 76 - 3
src/views/reportForm/index.vue

@@ -870,7 +870,7 @@
             />
           </div>
 
-          <div
+          <!-- <div
             class="m-wrap"
             v-permission="'export/EXPORT_MUSIC_GROUP_ECHELON_DATA'"
           >
@@ -900,7 +900,65 @@
               :flag="this.echelonDataOrganId.length <= 0"
               :isDownList="true"
             />
+          </div> -->
+          <div
+            class="m-wrap"
+            v-permission="'export/EXPORT_MUSIC_GROUP_NO_COURSE'"
+          >
+            <div class="title">乐团未排课时长:</div>
+            <select-all
+              v-model.trim="musicGroupNoDataOrganId"
+              class="organSelect"
+              style="width: 100%"
+              filterable
+              multiple
+              placeholder="请选择分部"
+              clearable
+            >
+              <el-option
+                v-for="(item, index) in selects.branchs"
+                :key="index"
+                :label="item.name"
+                :value="item.id"
+              ></el-option>
+            </select-all>
+            <ExportChiose
+              style="margin-left: 10px"
+              ExportEnum="EXPORT_MUSIC_GROUP_NO_COURSE"
+              :exportData="exportMusicGroupNoData"
+              fileName="乐团未排课时长导出"
+              errorMsg="请选择分部"
+              message="您确认导出乐团未排课时长"
+              :flag="this.musicGroupNoDataOrganId.length <= 0"
+            />
           </div>
+          <!-- <div class="m-wrap" v-permission="'export/now'">
+            <div class="title">乐团未排课时长:</div>
+            <select-all
+              v-model.trim="musicGroupNoDataOrganId"
+              class="organSelect"
+              style="width: 100%"
+              filterable
+              multiple
+              placeholder="请选择分部"
+              clearable
+            >
+              <el-option
+                v-for="(item, index) in selects.branchs"
+                :key="index"
+                :label="item.name"
+                :value="item.id"
+              ></el-option>
+            </select-all>
+            <ExportChiose
+              style="margin-left: 10px"
+              ExportEnum="EXPORT_MUSIC_GROUP_NO_COURSE"
+              :exportData="exportMusicGroupNoData"
+              fileName="乐团未排课时长导出"
+              errorMsg="请选择分部"
+              :flag="!this.musicGroupNoDataOrganId"
+            />
+          </div> -->
         </el-collapse-item>
         <el-collapse-item
           name="3"
@@ -1223,6 +1281,12 @@
             />
           </div>
         </el-collapse-item>
+        <el-collapse-item name="4">
+          <template slot="title">
+            <p class="wrapTitle">平衡关系</p>
+          </template>
+          <BalancedRelationship />
+        </el-collapse-item>
         <!-- <el-collapse-item
           name="4"
           v-if="$helpers.permission('questionnaireUserResult/export/report')"
@@ -1279,10 +1343,12 @@ import axios from "axios";
 import { getToken, getTenantId } from "@/utils/auth";
 import { getTimes } from "@/utils";
 import load from "@/utils/loading";
+import BalancedRelationship from "./balanced-relationship";
 export default {
   name: "reportForm",
   components: {
-    ExportChiose
+    ExportChiose,
+    BalancedRelationship
   },
   data() {
     return {
@@ -1353,7 +1419,8 @@ export default {
         Authorization: getToken(),
         tenantId: getTenantId()
       },
-      echelonDataOrganId: []
+      echelonDataOrganId: [],
+      musicGroupNoDataOrganId: []
     };
   },
   mounted() {
@@ -1829,6 +1896,12 @@ export default {
       };
       return data;
     },
+    exportMusicGroupNoData() {
+      let data = {
+        organId: this.musicGroupNoDataOrganId.join(",")
+      };
+      return data;
+    },
     exportAccount() {
       let endTime, startTime;
       if (this.AccountTimer && this.AccountTimer.length > 1) {

+ 69 - 27
src/views/stuRecodeManager/index.vue

@@ -19,7 +19,7 @@
             clearable
             type="number"
             @keydown.enter.native="
-              (e) => {
+              e => {
                 e.target.blur();
                 $refs.searchForm.save();
                 search();
@@ -60,7 +60,7 @@
             type="number"
             clearable
             @keydown.enter.native="
-              (e) => {
+              e => {
                 e.target.blur();
                 $refs.searchForm.save();
                 search();
@@ -74,7 +74,7 @@
             v-model.trim="searchForm.courseScheduleId"
             clearable
             @keydown.enter.native="
-              (e) => {
+              e => {
                 e.target.blur();
                 $refs.searchForm.save();
                 search();
@@ -85,7 +85,10 @@
           ></el-input>
         </el-form-item>
         <el-form-item prop="groupType">
-          <el-select v-model.trim="searchForm.groupType" placeholder="请选择课程组类型">
+          <el-select
+            v-model.trim="searchForm.groupType"
+            placeholder="请选择课程组类型"
+          >
             <el-option
               v-for="(item, index) in courseListType"
               :key="index"
@@ -165,7 +168,12 @@
             prop="courseSchedule.organization.name"
             label="分部"
           ></el-table-column>
-          <el-table-column align="center" prop="username" label="学生姓名" width="110px">
+          <el-table-column
+            align="center"
+            prop="username"
+            label="学生姓名"
+            width="110px"
+          >
             <template slot-scope="scope">
               <div>
                 {{ scope.row.username }}
@@ -197,14 +205,27 @@
               </div>
             </template>
           </el-table-column>
-          <el-table-column align="center" prop="courseScheduleId" label="课程编号">
+          <el-table-column
+            align="center"
+            prop="courseScheduleId"
+            label="课程编号"
+          >
             <template slot-scope="scope">
               <div>
                 <copy-text>{{ scope.row.courseScheduleId }}</copy-text>
               </div>
             </template>
           </el-table-column>
-
+          <el-table-column
+            align="center"
+            prop="subjectName"
+            label="专业"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="musicGroupName"
+            label="课程组名称"
+          ></el-table-column>
           <el-table-column
             align="center"
             prop="courseSchedule.name"
@@ -221,14 +242,22 @@
               </div>
             </template>
           </el-table-column> -->
-          <el-table-column align="center" prop="startClassTime" label="课程组类型">
+          <el-table-column
+            align="center"
+            prop="startClassTime"
+            label="课程组类型"
+          >
             <template slot-scope="scope">
               <div>
                 {{ scope.row.groupType | coursesType }}
               </div>
             </template>
           </el-table-column>
-          <el-table-column align="center" prop="startClassTime" label="课程类型">
+          <el-table-column
+            align="center"
+            prop="startClassTime"
+            label="课程类型"
+          >
             <template slot-scope="scope">
               <div>
                 {{ scope.row.courseSchedule.type | coursesType }}
@@ -241,13 +270,15 @@
                 <!-- {{ scope.row.courseSchedule.newCourseId > 0 ? "是" : "否" }} -->
                 {{
                   scope.row.courseSchedule.newCourseId > 0 &&
-                  scope.row.courseSchedule.newCourseId == scope.row.courseScheduleId
+                  scope.row.courseSchedule.newCourseId ==
+                    scope.row.courseScheduleId
                     ? "合并课"
                     : null
                 }}
                 {{
                   scope.row.courseSchedule.newCourseId > 0 &&
-                  scope.row.courseSchedule.newCourseId != scope.row.courseScheduleId
+                  scope.row.courseSchedule.newCourseId !=
+                    scope.row.courseScheduleId
                     ? "被合并课"
                     : null
                 }}
@@ -263,7 +294,9 @@
             <template slot-scope="scope">
               <div>
                 {{ scope.row.courseSchedule.classDate | dayjsFormat }}
-                {{ scope.row.courseSchedule.startClassTime | dayjsFormatMinute }}-{{
+                {{
+                  scope.row.courseSchedule.startClassTime | dayjsFormatMinute
+                }}-{{
                   scope.row.courseSchedule.endClassTime | dayjsFormatMinute
                 }}
               </div>
@@ -298,7 +331,7 @@
               <div
                 v-if="
                   scope.row.courseSchedule &&
-                  scope.row.courseSchedule.status != 'NOT_START'
+                    scope.row.courseSchedule.status != 'NOT_START'
                 "
               >
                 {{ scope.row.status | clockingIn }}
@@ -323,7 +356,8 @@
                 <el-button
                   type="text"
                   v-if="
-                    permission(getFullPermission('visit/add')) && !scope.row.visitFlag
+                    permission(getFullPermission('visit/add')) &&
+                      !scope.row.visitFlag
                   "
                   @click="addVisit(scope.row)"
                   >新增回访</el-button
@@ -333,7 +367,7 @@
                   @click="lookVisit(scope.row)"
                   v-if="
                     scope.row.visitFlag &&
-                    permission(getFullPermission('visit/queryPage'))
+                      permission(getFullPermission('visit/queryPage'))
                   "
                   >查看回访</el-button
                 >
@@ -395,7 +429,7 @@ export default {
         courseScheduleType: "",
         organId: "",
         visitFlag: "",
-        dates: [],
+        dates: []
       },
 
       courseType,
@@ -409,8 +443,8 @@ export default {
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         total: 0, // 总条数
-        page_size: [10, 20, 40, 50], // 选择限制显示条数
-      },
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      }
     };
   },
   //生命周期 - 创建完成(可以访问当前this实例)
@@ -461,7 +495,11 @@ export default {
         page: this.rules.page,
         rows: this.rules.limit,
         ids: this.$route.query.ids,
-        ...getTimes(dates, ["startDateOfCourse", "endDateOfCourse"], "YYYY-MM-DD"),
+        ...getTimes(
+          dates,
+          ["startDateOfCourse", "endDateOfCourse"],
+          "YYYY-MM-DD"
+        )
       };
       await Export(
         this,
@@ -469,7 +507,7 @@ export default {
           url: "/api-web/export/studentCourseAttendance",
           fileName: "学生考勤列表.xls",
           method: "post",
-          params: qs.stringify(cleanDeep(obj)),
+          params: qs.stringify(cleanDeep(obj))
         },
         "您确定导出学员考勤列表?"
       );
@@ -484,7 +522,11 @@ export default {
         ...rest,
         page: this.rules.page,
         rows: this.rules.limit,
-        ...getTimes(dates, ["startDateOfCourse", "endDateOfCourse"], "YYYY-MM-DD"),
+        ...getTimes(
+          dates,
+          ["startDateOfCourse", "endDateOfCourse"],
+          "YYYY-MM-DD"
+        )
       };
 
       // let obj = {
@@ -498,8 +540,8 @@ export default {
       //   ),
       // };
       findStudentAttendance(obj, {
-        ids: this.$route.query.ids,
-      }).then((res) => {
+        ids: this.$route.query.ids
+      }).then(res => {
         if (res.code == 200) {
           this.tableList = res.data.rows;
           this.rules.total = res.data.total;
@@ -519,7 +561,7 @@ export default {
           status: undefined,
           visitFlag: undefined,
           start: undefined,
-          end: undefined,
+          end: undefined
         });
       }
     },
@@ -536,10 +578,10 @@ export default {
     lookVisit(row) {
       this.$router.push({
         path: "/studentManager/returnVisitList",
-        query: { search: row.id, tabrouter: "2" },
+        query: { search: row.id, tabrouter: "2" }
       });
-    },
-  },
+    }
+  }
 };
 </script>
 <style lang="scss" scoped></style>

+ 33 - 0
src/views/studentManager/studentGroupPractice.vue

@@ -62,6 +62,14 @@
         >取消资格</el-button
       >
 
+      <el-button
+        type="primary"
+        style="margin-bottom: 20px;margin-left: 12px;"
+        @click="exportList"
+        v-permission="'export/now'"
+        >导出</el-button
+      >
+
       <div class="tableWrap">
         <el-table
           style="width: 100%"
@@ -204,6 +212,7 @@ import { queryInactive, cancelInactive } from "@/views/resetTeaming/api";
 import giveMemberModel from "@/views/resetTeaming/modals/giveMemberModel";
 import Tooltip from "@/components/Tooltip";
 import { getTimeFormat } from "@/utils";
+import { Export } from "@/utils/downLoadFile";
 export default {
   components: { pagination, giveMemberModel, Tooltip },
   data() {
@@ -298,6 +307,30 @@ export default {
       });
       this.reson.ids = ids.join(",");
     },
+    exportList() {
+      let { operationDate, ...rest } = this.searchForm;
+      let params = {
+        ...rest,
+        ...getTimeFormat(
+          operationDate,
+          ["operateStartTime", "operateEndTime"],
+          "YYYY-MM-DD"
+        )
+      };
+      Export(
+        this,
+        {
+          url: "/api-web/export/now",
+          fileName: "待激活云教练.xls",
+          method: "post",
+          params: {
+            exportEnum: "EXPORT_CLOUD_TEACHER_ORDER_INACTIVE",
+            queryInfo: params
+          }
+        },
+        "您确定导出待激活云教练?"
+      );
+    },
     async submitDateReset() {
       this.$refs["cancelCloudForm"].validate(async flag => {
         if (flag) {

+ 33 - 38
src/views/teamDetail/components/modals/classroom-setting.vue

@@ -163,7 +163,7 @@ import {
   revisionClassGroup,
   revisionAddClassGroup,
   findClassCourseMinute,
-  mergeClassSplitClassAffirm,
+  mergeClassSplitClassAffirm
 } from "@/api/buildTeam";
 import courseItem from "./classroom-setting-item";
 import { classTimeList } from "@/utils/searchArray";
@@ -219,14 +219,14 @@ export default {
   ],
   components: {
     courseItem,
-    "classrome-preview": classromePreview,
+    "classrome-preview": classromePreview
   },
   data() {
     return {
       form: {
         coreTeacher: "",
         assistant: "",
-        classs: {},
+        classs: {}
       },
       allClasss: {},
       prices: {}, //分部每种课程类型的时长
@@ -238,7 +238,7 @@ export default {
       musicSurplus: {},
       previewVisible: false,
       previewList: [],
-      holidays: [],
+      holidays: []
     };
   },
   watch: {
@@ -250,11 +250,11 @@ export default {
     },
     detail() {
       this.formatClasss();
-    },
+    }
   },
   computed: {
     surplustime() {
-      console.log(this.form,'classssurplustime')
+      console.log(this.form, "classssurplustime");
       const _ = {};
       for (const key in this.form.classs) {
         if (this.form.classs.hasOwnProperty(key)) {
@@ -270,7 +270,7 @@ export default {
     },
     musicGroup() {
       return MusicStore.state.musicGroup;
-    },
+    }
   },
   async mounted() {
     this.setCourseTypeListByName();
@@ -281,13 +281,13 @@ export default {
     async init() {
       try {
         await MusicStore.dispatch("getBaseInfo", {
-          data: { musicGroupId: this.musicGroupId },
+          data: { musicGroupId: this.musicGroupId }
         });
         const res = await queryByOrganIdAndCourseType({
-          organId: this.musicGroup.organId,
+          organId: this.musicGroup.organId
         });
         const res1 = await getSysTenantConfig({
-          group: "holiday",
+          group: "holiday"
         });
 
         this.holidays = JSON.parse(
@@ -351,22 +351,18 @@ export default {
           res = await getMusicCourseSettingsWithStudents({
             musicGroupId: this.musicGroupId,
             studentIds,
-            classGroupId,
+            classGroupId
           });
           if (res.data.checkCourseTimesFlag == 1) {
             this.$confirm("该班级学员剩余时长不一致是否继续?", "提示", {
               confirmButtonText: "确定",
               cancelButtonText: "取消",
-              type: "warning",
+              type: "warning"
             })
-              .then(() => {
-
-              })
-              .catch((e)=>{
-                     this.$emit('close')
-              })
-
-
+              .then(() => {})
+              .catch(e => {
+                this.$emit("close");
+              });
           }
         } catch (error) {
           console.log(error);
@@ -388,9 +384,9 @@ export default {
               {
                 time: this.selectPrices ? this.selectPrices[key] : undefined,
                 coreTeacher: this.coreid,
-                assistant: this.assistant,
-              },
-            ],
+                assistant: this.assistant
+              }
+            ]
           };
         }
       }
@@ -421,7 +417,7 @@ export default {
           }
         }
       }
-      this.$refs.form.validate(async (valid) => {
+      this.$refs.form.validate(async valid => {
         if (valid) {
           const list = [];
           for (const key in this.form.classs) {
@@ -445,7 +441,7 @@ export default {
                 holiday: item.holiday,
                 students: this.studentSubmitedData?.seleched,
                 courseTimes: item.cycle.length,
-                courseTimeDtoList: item.cycle.map((_) => ({
+                courseTimeDtoList: item.cycle.map(_ => ({
                   classGroupTeacherMapperList: this.formatTeacher(_),
                   courseType: key,
                   dayOfWeek: _.dayOfWeek,
@@ -454,8 +450,8 @@ export default {
                   startDate: _.startDate,
                   endDate: _.endDate,
                   holiday: _.holiday,
-                  expectCourseNum: _.expectCourseNum,
-                })),
+                  expectCourseNum: _.expectCourseNum
+                }))
               };
               if (type && typeof type === "string") {
                 data[type] = true;
@@ -472,11 +468,11 @@ export default {
                   result.msg || `当前课程课酬预计为0,是否继续`,
                   "提示",
                   {
-                    type: "warning",
+                    type: "warning"
                   }
                 );
                 // obj.allowZeroSalary = true;
-                list.forEach((item) => {
+                list.forEach(item => {
                   item.allowZeroSalary = true;
                 });
                 await classGroupUpdate(list);
@@ -489,11 +485,11 @@ export default {
                   result.msg || `班级剩余排课时长不一致,请再次确认`,
                   "提示",
                   {
-                    type: "warning",
+                    type: "warning"
                   }
                 );
                 // obj.allowZeroSalary = true;
-                list.forEach((item) => {
+                list.forEach(item => {
                   item.checkCourseTimesFlag = true;
                 });
                 await classGroupUpdate(list);
@@ -522,16 +518,15 @@ export default {
               } else if (this.classType == 5) {
                 // 这里是合班拆班
                 let obj = {};
-                obj.musicGroupPaymentCalenderDtos =
-                  this.musicGroupPaymentCalenderDtos;
+                obj.musicGroupPaymentCalenderDtos = this.musicGroupPaymentCalenderDtos;
                 obj.classGroup4MixDtos = list;
                 obj.classGroupIds = this.classIdList;
                 obj.studentIds = this.studentSubmitedData.seleched;
                 obj.classGroupStudents = this.classGroupStudents;
                 obj.classCourseMinuteMap = this.selectPrices;
                 await mergeClassSplitClassAffirm(obj);
-                let grend =
-                  this.$parent.$parent.$parent.$parent.$parent.$parent.$parent;
+                let grend = this.$parent.$parent.$parent.$parent.$parent.$parent
+                  .$parent;
                 grend.closeStudentReset();
                 grend.getList();
                 return;
@@ -571,13 +566,13 @@ export default {
         arr.push(obj);
       }
       if (row.assistant?.length > 0) {
-        row.assistant.forEach((ass) => {
+        row.assistant.forEach(ass => {
           arr.push({ teacherRole: "TEACHING", userId: ass });
         });
       }
       return arr;
-    },
-  },
+    }
+  }
   // watch:{
   //   musicSurplus(){
   //     deep

+ 83 - 45
src/views/withdrawal-application/index.vue

@@ -45,7 +45,11 @@
         </el-form-item>
 
         <el-form-item>
-          <el-select v-model="searchForm.status" clearable placeholder="请选择状态">
+          <el-select
+            v-model="searchForm.status"
+            clearable
+            placeholder="请选择状态"
+          >
             <el-option
               v-for="(item, key) in withdrawalStatus"
               :key="key"
@@ -86,19 +90,27 @@
         :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
         @selection-change="handleSelectionChange"
       >
-        <el-table-column type="selection" width="55" :selectable="checkSeleabled">
+        <el-table-column
+          type="selection"
+          width="55"
+          :selectable="checkSeleabled"
+        >
         </el-table-column>
         <el-table-column prop="userId" label="学员编号">
           <copy-text slot-scope="scope">{{ scope.row.userId }}</copy-text>
         </el-table-column>
         <el-table-column prop="userId" label="学员姓名">
-          <copy-text slot-scope="scope">{{ scope.row.user.username }}</copy-text>
+          <copy-text slot-scope="scope">{{
+            scope.row.user.username
+          }}</copy-text>
         </el-table-column>
         <el-table-column prop="organName" label="所属分部">
           <div slot-scope="scope">{{ scope.row.musicGroup.organName }}</div>
         </el-table-column>
         <el-table-column prop="musicGroupId" label="所属乐团">
-          <copy-text slot-scope="scope">{{ scope.row.musicGroup.name }}</copy-text>
+          <copy-text slot-scope="scope">{{
+            scope.row.musicGroup.name
+          }}</copy-text>
         </el-table-column>
 
         <el-table-column prop="createTime" label="申请时间">
@@ -136,7 +148,9 @@
             width="100%"
             slot-scope="scope"
             :text="
-              scope.row.schoolStaffAuditReason ? scope.row.schoolStaffAuditReason : '--'
+              scope.row.schoolStaffAuditReason
+                ? scope.row.schoolStaffAuditReason
+                : '--'
             "
           ></overflow-text>
         </el-table-column>
@@ -146,7 +160,9 @@
             <div>
               {{ scope.row.status | withdrawalStatus }}
               <span v-if="scope.row.status == 'PROCESSING'"
-                >({{ scope.row.currentApproveRole == 1 ? "分部经理" : "乐团主管" }})</span
+                >({{
+                  scope.row.currentApproveRole == 1 ? "分部经理" : "乐团主管"
+                }})</span
               >
             </div>
           </template>
@@ -158,32 +174,36 @@
           label="操作"
           v-if="
             permission('musicGroupQuit/quitMusicGroup/quit') ||
-            permission('musicGroupQuit/quitMusicGroup/quit-only') ||
-            permission('visit/add/tuituanliebiao')
+              permission('musicGroupQuit/quitMusicGroup/quit-only') ||
+              permission('visit/add/tuituanliebiao')
           "
         >
           <template slot-scope="scope">
             <div>
               <el-button
                 type="text"
-                v-if="permission('musicGroupQuit/quitMusicGroup/quit') && isManage"
+                v-if="
+                  permission('musicGroupQuit/quitMusicGroup/quit') && isManage
+                "
                 :disabled="
                   scope.row.status != 'PROCESSING' ||
-                  scope.row.status == 'DENIED' ||
-                  scope.row.status == 'CANCELED' ||
-                  (scope.row.status == 'PROCESSING' &&
-                    isManage == 'manage' &&
-                    scope.row.currentApproveRole == '2') ||
-                  (scope.row.status == 'PROCESSING' &&
-                    isManage == 'staff' &&
-                    scope.row.currentApproveRole == '1')
+                    scope.row.status == 'DENIED' ||
+                    scope.row.status == 'CANCELED' ||
+                    (scope.row.status == 'PROCESSING' &&
+                      isManage == 'manage' &&
+                      scope.row.currentApproveRole == '2') ||
+                    (scope.row.status == 'PROCESSING' &&
+                      isManage == 'staff' &&
+                      scope.row.currentApproveRole == '1')
                 "
                 @click="quieTeamMask(scope.row)"
                 >立即处理</el-button
               >
               <el-button
                 type="text"
-                v-if="permission('musicGroupQuit/quitMusicGroup/quit') && isManage"
+                v-if="
+                  permission('musicGroupQuit/quitMusicGroup/quit') && isManage
+                "
                 :disabled="
                   !(
                     scope.row.status != 'PROCESSING' ||
@@ -248,7 +268,9 @@
               <p>退还课程费用:缴费总额-已结束课时单价之和</p>
               <p>退还乐器费用:报名缴费时缴纳的乐器费用(团购、租金)</p>
               <p>退还教辅费用:报名缴费时缴费的教辅费用</p>
-              <p v-if="$helpers.tenantId == 1">退还乐保费用:报名缴费时缴费的乐保费用</p>
+              <p v-if="$helpers.tenantId == 1">
+                退还乐保费用:报名缴费时缴费的乐保费用
+              </p>
             </div>
             <el-button
               type="text"
@@ -319,7 +341,7 @@ let that;
 const initSearch = {
   search: "",
   status: null,
-  organId: "",
+  organId: ""
 };
 export default {
   components: { pagination, quitModal, quitOnlyModal, visit },
@@ -332,14 +354,14 @@ export default {
       detail: null,
       list: [],
       searchForm: {
-        ...initSearch,
+        ...initSearch
       },
       rules: {
         // 分页规则
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         total: 0, // 总条数
-        page_size: [10, 20, 40, 50], // 选择限制显示条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
       },
       quitForm: {
         // 退团信息确认
@@ -353,11 +375,11 @@ export default {
         musicGroupName: null,
         isVisit: false,
         userComment: null,
-        schoolStaffAuditReason: null,
+        schoolStaffAuditReason: null
       },
       isManage: false,
       isDisabled: false,
-      multipleSelection: [],
+      multipleSelection: []
     };
   },
   async mounted() {
@@ -397,7 +419,7 @@ export default {
       this.submit();
     },
     async quieTeamMask(row, look) {
-      await musicGroupQuit({ id: row.id }).then((res) => {
+      await musicGroupQuit({ id: row.id }).then(res => {
         if (res.code == 200) {
           if (look == "look") {
             this.isDisabled = true;
@@ -416,7 +438,8 @@ export default {
           this.quitForm.reason = res.data.reason;
           this.quitForm.id = res.data.id;
           this.quitForm.reasonEnum = res.data.reasonEnum;
-          this.quitForm.schoolStaffAuditReason = res.data.schoolStaffAuditReason;
+          this.quitForm.schoolStaffAuditReason =
+            res.data.schoolStaffAuditReason;
           this.quitForm = { ...this.quitForm, ...res.data.returnFeeDto };
           console.log(this.quitForm, "this.quitForm");
           this.quitVisible = true;
@@ -441,7 +464,7 @@ export default {
           page: this.rules.page,
           rows: this.rules.limit,
           visitFlag: this.$route.query.visitFlag,
-          ...this.searchForm,
+          ...this.searchForm
         });
         this.rules.total = res.data.total;
         this.list = res.data.rows;
@@ -457,8 +480,8 @@ export default {
           method: "post",
           params: qs.stringify({
             visitFlag: this.$route.query.visitFlag,
-            ...rest,
-          }),
+            ...rest
+          })
         },
         "您确定导出退团申请列表?"
       );
@@ -467,7 +490,7 @@ export default {
       this.$confirm("确定此操作吗?", "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
-        type: "warning",
+        type: "warning"
       })
         .then(async () => {
           let query = this.quitForm;
@@ -482,9 +505,9 @@ export default {
             isReturnMusicalFee: query.isReturnMusicalFee,
             maintenanceFee: query.maintenanceFee,
             memberFee: query.memberFee,
-            musicalFee: query.musicalFee,
+            musicalFee: query.musicalFee
           };
-          await quitMusicGroup(cleanDeep(query)).then((res) => {
+          await quitMusicGroup(cleanDeep(query)).then(res => {
             this.$message.success("处理成功");
             this.activeRow = null;
             if (this.$refs["musicForm"].$refs.quitForm) {
@@ -494,7 +517,7 @@ export default {
             this.FetchList();
           });
         })
-        .catch((e) => {
+        .catch(e => {
           console.log(e);
         });
       // 乐团主管这里
@@ -508,7 +531,7 @@ export default {
         return;
       }
       let str = "";
-      this.multipleSelection.forEach((stu) => {
+      this.multipleSelection.forEach(stu => {
         console.log(stu);
         str += stu.user.username + ",";
       });
@@ -527,11 +550,11 @@ export default {
         beforeClose: async (val, instance, done) => {
           if (val == "confirm") {
             // reason
-            let objList = this.multipleSelection.map((stu) => {
+            let objList = this.multipleSelection.map(stu => {
               return {
                 id: stu.id,
                 status: "APPROVED",
-                reason: instance.inputValue,
+                reason: instance.inputValue
               };
             });
             try {
@@ -544,11 +567,11 @@ export default {
             }
           } else if (val == "cancel") {
             instance.validate();
-            let objList = this.multipleSelection.map((stu) => {
+            let objList = this.multipleSelection.map(stu => {
               return {
                 id: stu.id,
                 status: "DENIED",
-                reason: instance.inputValue,
+                reason: instance.inputValue
               };
             });
             try {
@@ -562,24 +585,39 @@ export default {
           } else {
             done();
           }
-        },
+        }
       })
         .then(() => {
           // 同意
         })
-        .catch((msg) => {
+        .catch(msg => {
           // close,cancel
           console.log(msg);
         });
     },
     checkSeleabled(row) {
-      if (row.status == "PROCESSING" && row.currentApproveRole == "1") {
-        return 1;
-      } else {
+      // if (row.status == "PROCESSING" && row.currentApproveRole == "1") {
+      //   return 1;
+      // } else {
+      //   return 0;
+      // }
+      if (
+        row.status != "PROCESSING" ||
+        row.status == "DENIED" ||
+        row.status == "CANCELED" ||
+        (row.status == "PROCESSING" &&
+          this.isManage == "manage" &&
+          row.currentApproveRole == "2") ||
+        (row.status == "PROCESSING" &&
+          this.isManage == "staff" &&
+          row.currentApproveRole == "1")
+      ) {
         return 0;
+      } else {
+        return 1;
       }
-    },
-  },
+    }
+  }
 };
 </script>
 <style lang="scss" scoped>

Некоторые файлы не были показаны из-за большого количества измененных файлов