Browse Source

提交重现打包

1
mo 3 years ago
parent
commit
e60bfb9a70
87 changed files with 3407 additions and 1928 deletions
  1. 0 0
      dist/index.html
  2. 0 0
      dist/static/css/app.7e5feca9.css
  3. 0 1
      dist/static/css/chunk-026cbb1a.ce59d0bf.css
  4. 1 1
      dist/static/css/chunk-16544ea6.22675a8c.css
  5. 0 0
      dist/static/css/chunk-20ce4e9e.9aa4f75c.css
  6. 0 0
      dist/static/css/chunk-27b246d1.0536aee0.css
  7. 0 0
      dist/static/css/chunk-2858aed6.63532ef2.css
  8. 0 0
      dist/static/css/chunk-3bbfd6b6.b901a06b.css
  9. 0 0
      dist/static/css/chunk-4e56be9c.595005b5.css
  10. 1 0
      dist/static/css/chunk-71d695f7.b6843835.css
  11. 1 1
      dist/static/css/chunk-77c17389.1fc022c2.css
  12. 1 1
      dist/static/css/chunk-9086a85e.1568df31.css
  13. 0 0
      dist/static/css/chunk-d983dc6e.628d09dc.css
  14. 0 0
      dist/static/js/app.22c2bb70.js
  15. 0 0
      dist/static/js/chunk-00de1148.c7161e8b.js
  16. 0 0
      dist/static/js/chunk-081a8b8e.ed70a6bf.js
  17. 0 0
      dist/static/js/chunk-09f2e803.34c944d4.js
  18. 0 0
      dist/static/js/chunk-09f2e803.c0565027.js
  19. 1 0
      dist/static/js/chunk-0ca6c6f9.5a691882.js
  20. 0 0
      dist/static/js/chunk-113d417a.49dce98d.js
  21. 0 0
      dist/static/js/chunk-1298fcaa.cb390922.js
  22. 8 0
      dist/static/js/chunk-14f81e1c.22071e5e.js
  23. 0 0
      dist/static/js/chunk-16544ea6.72083e71.js
  24. 0 0
      dist/static/js/chunk-1697edb4.d9f1e45d.js
  25. 0 0
      dist/static/js/chunk-2032a5f9.1665d9d1.js
  26. 0 0
      dist/static/js/chunk-20ce4e9e.f8afecf9.js
  27. 0 0
      dist/static/js/chunk-23b3acc0.db569be9.js
  28. 0 0
      dist/static/js/chunk-27b246d1.9dac9536.js
  29. 0 0
      dist/static/js/chunk-2858aed6.a4f6fe6f.js
  30. 0 0
      dist/static/js/chunk-2d217e7a.1bd12f92.js
  31. 0 0
      dist/static/js/chunk-2d217e7a.e6f92913.js
  32. 0 0
      dist/static/js/chunk-3bbfd6b6.6ebc354e.js
  33. 0 0
      dist/static/js/chunk-3bc7cbb6.8d9bea00.js
  34. 0 0
      dist/static/js/chunk-3f7c6ea7.53090676.js
  35. 0 0
      dist/static/js/chunk-3f7c6ea7.9bfc5521.js
  36. 0 0
      dist/static/js/chunk-410450c9.87d0cc4c.js
  37. 0 0
      dist/static/js/chunk-4e56be9c.bd596d2b.js
  38. 4 0
      dist/static/js/chunk-588eee5a.5cbeca4d.js
  39. 0 0
      dist/static/js/chunk-68da6b0b.7e231497.js
  40. 0 0
      dist/static/js/chunk-68da6b0b.826a868b.js
  41. 0 0
      dist/static/js/chunk-6d44028a.6306cf0c.js
  42. 0 0
      dist/static/js/chunk-6d44028a.de51ebd1.js
  43. 0 0
      dist/static/js/chunk-71d695f7.4278fd6c.js
  44. 0 0
      dist/static/js/chunk-7356d038.e438a1c9.js
  45. 0 0
      dist/static/js/chunk-77c17389.f40d321f.js
  46. 0 0
      dist/static/js/chunk-7a64171e.f31d7410.js
  47. 0 0
      dist/static/js/chunk-7ca32848.5da9ffd4.js
  48. 0 0
      dist/static/js/chunk-9086a85e.c05b86d0.js
  49. 0 0
      dist/static/js/chunk-bd334e84.7d6cdc6b.js
  50. 0 0
      dist/static/js/chunk-c23a63d0.73a73cfa.js
  51. 0 0
      dist/static/js/chunk-c59bca8c.bbc7f3e6.js
  52. 0 0
      dist/static/js/chunk-commons.25a13ea3.js
  53. 0 0
      dist/static/js/chunk-d175dc08.939849ea.js
  54. 1 0
      dist/static/js/chunk-d983dc6e.f8fd3d88.js
  55. 0 0
      dist/static/js/chunk-f84b980e.97e6ddb3.js
  56. 0 0
      dist/static/js/chunk-f84b980e.fec46a8a.js
  57. 0 0
      dist/static/js/chunk-fae5b3fa.35107696.js
  58. 0 0
      dist/static/js/chunk-fae5b3fa.cbbd0e2b.js
  59. 84 43
      src/api/vipSeting.js
  60. 6 5
      src/constant/index.js
  61. 3 0
      src/layout/components/TagsView.vue
  62. 2 0
      src/router/index.js
  63. 13 0
      src/store/modules/permission.js
  64. 5 1
      src/utils/searchArray.js
  65. 113 13
      src/views/accompanyManager/accompanyList.vue
  66. 39 23
      src/views/accompanyManager/accompanys.vue
  67. 158 0
      src/views/activityScheduling/activeMarketing.vue
  68. 35 0
      src/views/activityScheduling/api.js
  69. 114 0
      src/views/activityScheduling/modals/market.vue
  70. 495 244
      src/views/buildVip/index.vue
  71. 1 1
      src/views/businessManager/orderManager/salesList.vue
  72. 703 0
      src/views/categroyManager/modals/baseInfo.vue
  73. 573 0
      src/views/categroyManager/modals/payInfo.vue
  74. 327 0
      src/views/categroyManager/modals/salaryInfo.vue
  75. 128 727
      src/views/categroyManager/vipActiveList.vue
  76. 464 805
      src/views/categroyManager/vipNewActive.vue
  77. 0 1
      src/views/main/baseinfo/management.vue
  78. 10 3
      src/views/studentManager/memberList.vue
  79. 1 0
      src/views/teamBuild/signupList.vue
  80. 61 41
      src/views/teamDetail/components/modals/quite-team.vue
  81. 1 0
      src/views/teamDetail/components/studentList.vue
  82. 47 12
      src/views/vipClass/vipDetail/components/vipStudentList.vue
  83. 1 3
      src/views/vipClass/vipList.vue
  84. 2 1
      src/views/withdrawal-application/index.vue
  85. 1 0
      src/views/workBenchManager/journal/model/musicGroup.vue
  86. 1 0
      src/views/workBenchManager/journal/musicGroup.vue
  87. 1 1
      vue.config.js

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


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/app.7e5feca9.css


+ 0 - 1
dist/static/css/chunk-026cbb1a.ce59d0bf.css

@@ -1 +0,0 @@
-.m-container[data-v-64fa97af]{-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.newBand[data-v-64fa97af]{display:inline-block}

+ 1 - 1
dist/static/css/chunk-926ccd64.9c580796.css → dist/static/css/chunk-16544ea6.22675a8c.css

@@ -1 +1 @@
-.dialog-footer.question[data-v-97c5d1e4]{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}
+.dialog-footer.question[data-v-e9d6336c]{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}

+ 0 - 0
dist/static/css/chunk-0491b8f1.9aa4f75c.css → dist/static/css/chunk-20ce4e9e.9aa4f75c.css


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-27b246d1.0536aee0.css


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-2858aed6.63532ef2.css


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-3bbfd6b6.b901a06b.css


+ 0 - 0
dist/static/css/chunk-bd334e84.a524d3e5.css → dist/static/css/chunk-4e56be9c.595005b5.css


+ 1 - 0
dist/static/css/chunk-71d695f7.b6843835.css

@@ -0,0 +1 @@
+.m-container[data-v-3db190a3]{-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.newBand[data-v-3db190a3]{display:inline-block}

+ 1 - 1
dist/static/css/chunk-c274d6ea.5b02d62d.css → dist/static/css/chunk-77c17389.1fc022c2.css

@@ -1 +1 @@
-.computeMoney[data-v-05a32f7c]{margin-top:10px;float:right}.m-core[data-v-05a32f7c]{margin-top:30px}.m-core .el-input[data-v-05a32f7c]{width:180px}.m-core h4[data-v-05a32f7c]{font-size:16px;background-color:#ccc;color:#fff;width:100%;height:40px;line-height:40px;margin-bottom:20px;padding:0 20px}.m-core .right[data-v-05a32f7c]{margin-top:20px}.vipMsg[data-v-05a32f7c]{margin-bottom:20px}.planList[data-v-05a32f7c]{padding:0 25px}.planList .planTop[data-v-05a32f7c]{height:40px;line-height:40px;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;border-bottom:1px solid #ccc;margin-top:20px}.planList .planTop>p[data-v-05a32f7c]{font-size:14px}.planList .planCore .row[data-v-05a32f7c]{width:100%;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;-ms-flex-wrap:nowrap;flex-wrap:nowrap;height:40px;line-height:40px;font-size:14px;text-align:center}.planList .planCore .row div[data-v-05a32f7c]{width:87px}.planList .nomore[data-v-05a32f7c]{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:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:40px}.okBtn[data-v-05a32f7c]{width:120px;height:40px;line-height:40px;text-align:center;color:#fff;border-radius:4px;margin-right:20px;cursor:pointer;background-color:#f97215;float:right}.submitP[data-v-05a32f7c]{margin-bottom:20px;font-size:14px;padding-left:24px}
+.computeMoney[data-v-28097f6b]{margin-top:10px;float:right}.m-core[data-v-28097f6b]{margin-top:30px}.m-core .el-input[data-v-28097f6b]{width:180px}.m-core h4[data-v-28097f6b]{font-size:16px;background-color:#ccc;color:#fff;width:100%;height:40px;line-height:40px;margin-bottom:20px;padding:0 20px}.m-core .right[data-v-28097f6b]{margin-top:20px}.vipMsg[data-v-28097f6b]{margin-bottom:20px}.planList[data-v-28097f6b]{padding:0 25px}.planList .planTop[data-v-28097f6b]{height:40px;line-height:40px;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;border-bottom:1px solid #ccc;margin-top:20px}.planList .planTop>p[data-v-28097f6b]{font-size:14px}.planList .planCore .row[data-v-28097f6b]{width:100%;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;-ms-flex-wrap:nowrap;flex-wrap:nowrap;height:40px;line-height:40px;font-size:14px;text-align:center}.planList .planCore .row div[data-v-28097f6b]{width:87px}.planList .nomore[data-v-28097f6b]{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:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:40px}.okBtn[data-v-28097f6b]{width:120px;height:40px;line-height:40px;text-align:center;color:#fff;border-radius:4px;margin-right:20px;cursor:pointer;background-color:#f97215;float:right}.submitP[data-v-28097f6b]{margin-bottom:20px;font-size:14px;padding-left:24px}

+ 1 - 1
dist/static/css/chunk-48f2714c.768f0ad2.css → dist/static/css/chunk-9086a85e.1568df31.css

@@ -1 +1 @@
-.topWrap[data-v-8ff58918]{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}.topWrap div[data-v-8ff58918]{margin-right:10px}
+.topWrap[data-v-233bdaaa]{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}.topWrap div[data-v-233bdaaa]{margin-right:10px}

+ 0 - 0
dist/static/css/chunk-c23a63d0.628d09dc.css → dist/static/css/chunk-d983dc6e.628d09dc.css


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


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


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-081a8b8e.ed70a6bf.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-09f2e803.34c944d4.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-09f2e803.c0565027.js


+ 1 - 0
dist/static/js/chunk-0ca6c6f9.5a691882.js

@@ -0,0 +1 @@
+(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-08128ceb"],{"0358":function(t,s,a){"use strict";a("8aa4")},"26fc":function(t,s,a){t.exports=a.p+"static/img/404_cloud.0f4bc32b.png"},"8aa4":function(t,s,a){},"8cdb":function(t,s,a){"use strict";a.r(s);var i=function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"wscn-http404-container"},[a("div",{staticClass:"wscn-http404"},[t._m(0),t._v(" "),a("div",{staticClass:"bullshit"},[a("div",{staticClass:"bullshit__oops"},[t._v("OOPS!")]),t._v(" "),a("div",{staticClass:"bullshit__headline"},[t._v(t._s(t.message))]),t._v(" "),a("div",{staticClass:"bullshit__info"},[t._v("请检查您输入的网址是否正确,或者点击链接继续浏览")]),t._v(" "),a("a",{staticClass:"bullshit__return-home",attrs:{href:""}},[t._v("返回首页")])])])])},c=[function(){var t=this,s=t.$createElement,i=t._self._c||s;return i("div",{staticClass:"pic-404"},[i("img",{staticClass:"pic-404__parent",attrs:{src:a("a36b0"),alt:"404"}}),t._v(" "),i("img",{staticClass:"pic-404__child left",attrs:{src:a("26fc"),alt:"404"}}),t._v(" "),i("img",{staticClass:"pic-404__child mid",attrs:{src:a("26fc"),alt:"404"}}),t._v(" "),i("img",{staticClass:"pic-404__child right",attrs:{src:a("26fc"),alt:"404"}})])}],l={name:"Page404",computed:{message:function(){return"很抱歉,你访问的页面不存在"}}},e=l,n=(a("0358"),a("2877")),_=Object(n["a"])(e,i,c,!1,null,"3abe8ce9",null);s["default"]=_.exports},a36b0:function(t,s,a){t.exports=a.p+"static/img/404.a57b6f31.png"}}]);

File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-113d417a.49dce98d.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-1298fcaa.cb390922.js


File diff suppressed because it is too large
+ 8 - 0
dist/static/js/chunk-14f81e1c.22071e5e.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-16544ea6.72083e71.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-1697edb4.d9f1e45d.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-2032a5f9.1665d9d1.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-20ce4e9e.f8afecf9.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-23b3acc0.db569be9.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-27b246d1.9dac9536.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-2858aed6.a4f6fe6f.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-2d217e7a.1bd12f92.js


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


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-3bbfd6b6.6ebc354e.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-3bc7cbb6.8d9bea00.js


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


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-3f7c6ea7.9bfc5521.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-410450c9.87d0cc4c.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-4e56be9c.bd596d2b.js


+ 4 - 0
dist/static/js/chunk-588eee5a.5cbeca4d.js

@@ -1,4 +1,8 @@
+<<<<<<< HEAD:dist/static/js/chunk-14f81e1c.22071e5e.js
+(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-14f81e1c","chunk-e1e767e6","chunk-4e56be9c","chunk-584f76a2","chunk-4c5113fa","chunk-59c1227c","chunk-4a5f46a6","chunk-081a8b8e","chunk-171bdaae","chunk-6e855f0c","chunk-c8c7f280"],{"010e":function(e,t,a){(function(e,t){t(a("c1df"))})(0,(function(e){"use strict";
+=======
 (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-588eee5a","chunk-e1e767e6","chunk-bd334e84","chunk-584f76a2","chunk-4c5113fa","chunk-59c1227c","chunk-4a5f46a6","chunk-081a8b8e","chunk-171bdaae","chunk-6e855f0c","chunk-c8c7f280"],{"010e":function(e,t,a){(function(e,t){t(a("c1df"))})(0,(function(e){"use strict";
+>>>>>>> master:dist/static/js/chunk-588eee5a.7100a727.js
 //! moment.js locale configuration
 var t=e.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}});return t}))},"027d":function(e,t,a){},"02fb":function(e,t,a){(function(e,t){t(a("c1df"))})(0,(function(e){"use strict";
 //! moment.js locale configuration

File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-68da6b0b.7e231497.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-68da6b0b.826a868b.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-6d44028a.6306cf0c.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-6d44028a.de51ebd1.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-71d695f7.4278fd6c.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-7356d038.e438a1c9.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-77c17389.f40d321f.js


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


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-7ca32848.5da9ffd4.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-9086a85e.c05b86d0.js


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


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


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


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-commons.25a13ea3.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-d175dc08.939849ea.js


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


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-f84b980e.97e6ddb3.js


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


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


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


+ 84 - 43
src/api/vipSeting.js

@@ -1,8 +1,9 @@
 import request from '@/utils/request'
+import request2 from '@/utils/request2'
 import qs from 'qs'
 let api = '/api-web'
 // 获取vip 分类列表
-export function vipGroupCategory (data) {
+export function vipGroupCategory(data) {
   return request({
     url: api + '/vipGroupCategory/queryAll',
     method: 'get',
@@ -11,7 +12,7 @@ export function vipGroupCategory (data) {
 }
 
 // 获取vip 老师默认分类列表
-export function findTeacherDefaultSalary (data) {
+export function findTeacherDefaultSalary(data) {
   return request({
     url: api + '/vipGroupCategory/findTeacherDefaultSalary',
     method: 'post',
@@ -20,7 +21,7 @@ export function findTeacherDefaultSalary (data) {
 }
 
 // 获取 vip循环列表
-export function getDefaultClassesCycle (data) {
+export function getDefaultClassesCycle(data) {
   return request({
     url: api + '/vipGroupDefaultClassesCycle/queryAll',
     method: 'get',
@@ -29,7 +30,7 @@ export function getDefaultClassesCycle (data) {
 }
 
 // 单个添加vip课程类型
-export function addVipGroupCategory (data) {
+export function addVipGroupCategory(data) {
   return request({
     url: api + '/vipGroupCategory/add',
     method: 'post',
@@ -38,7 +39,7 @@ export function addVipGroupCategory (data) {
 }
 
 // 单个修改vip课程类型
-export function resetVipGroupCategory (data) {
+export function resetVipGroupCategory(data) {
   return request({
     url: api + '/vipGroupCategory/update',
     method: 'post',
@@ -46,7 +47,7 @@ export function resetVipGroupCategory (data) {
   })
 }
 // 删除单个vip类型
-export function removeVipGroupCategory (data) {
+export function removeVipGroupCategory(data) {
   return request({
     url: api + '/vipGroupCategory/delete',
     method: 'post',
@@ -55,7 +56,7 @@ export function removeVipGroupCategory (data) {
 }
 
 // 新增排课周期
-export function addDefaultClassesCycle (data) {
+export function addDefaultClassesCycle(data) {
   return request({
     url: api + '/vipGroupDefaultClassesCycle/add',
     method: 'post',
@@ -64,7 +65,7 @@ export function addDefaultClassesCycle (data) {
 }
 
 // 修改排课周期
-export function resetDefaultClassesCycle (data) {
+export function resetDefaultClassesCycle(data) {
   return request({
     url: api + '/vipGroupDefaultClassesCycle/update',
     method: 'post',
@@ -73,7 +74,7 @@ export function resetDefaultClassesCycle (data) {
 }
 
 // 删除排课周期
-export function removeDefaultClassesCycle (data) {
+export function removeDefaultClassesCycle(data) {
   return request({
     url: api + '/vipGroupDefaultClassesCycle/delete',
     method: 'post',
@@ -82,7 +83,7 @@ export function removeDefaultClassesCycle (data) {
 }
 
 // 新增默认单价
-export function defaultClassesUnitPrice (data) {
+export function defaultClassesUnitPrice(data) {
   return request({
     url: api + '/vipGroupDefaultClassesUnitPrice/add',
     method: 'post',
@@ -91,7 +92,7 @@ export function defaultClassesUnitPrice (data) {
 }
 
 // 查询活动方案列表
-export function vipGroupActivity (data) {
+export function vipGroupActivity(data) {
   return request({
     url: api + '/vipGroupActivity/queryPage',
     method: 'get',
@@ -100,7 +101,7 @@ export function vipGroupActivity (data) {
 }
 
 // 根据课程类型获取活动方案
-export function vipGroupActivityFind (data) {
+export function vipGroupActivityFind(data) {
   return request({
     url: api + '/vipGroupActivity/findByVipGroupCategory',
     method: 'get',
@@ -109,7 +110,7 @@ export function vipGroupActivityFind (data) {
 }
 
 // 新增vip课活动方案
-export function addVipActive (data) {
+export function addVipActive(data) {
   return request({
     url: api + '/vipGroupActivity/addVipGroupActivity',
     method: 'POST',
@@ -117,7 +118,7 @@ export function addVipActive (data) {
   })
 }
 // 修改vio课活动方案
-export function resetVipActive (data) {
+export function resetVipActive(data) {
   return request({
     url: api + '/vipGroupActivity/update',
     method: 'POST',
@@ -127,7 +128,7 @@ export function resetVipActive (data) {
 
 // 删除vip课
 
-export function removeVipActive (data) {
+export function removeVipActive(data) {
   return request({
     url: api + '/vipGroupActivity/delete',
     method: 'POST',
@@ -136,7 +137,7 @@ export function removeVipActive (data) {
 }
 
 // 获取vip列表
-export function getVipList (data) {
+export function getVipList(data) {
   return request({
     url: api + '/vipGroupManage/queryAll',
     method: 'GET',
@@ -144,7 +145,7 @@ export function getVipList (data) {
   })
 }
 // 根据id获取vip详情
-export function getVipGroupDetail (data) {
+export function getVipGroupDetail(data) {
   return request({
     url: api + `/vipGroupManage/getVipGroupDetail`,
     method: 'GET',
@@ -153,7 +154,7 @@ export function getVipGroupDetail (data) {
 }
 
 // 根据id获取vip详情
-export function getVipGroupDetailForAudit (data) {
+export function getVipGroupDetailForAudit(data) {
   return request({
     url: api + `/vipGroupManage/getVipGroupDetailForAudit`,
     method: 'GET',
@@ -162,7 +163,7 @@ export function getVipGroupDetailForAudit (data) {
 }
 
 // 根据vipid获取学员
-export function findVipGroupStudents (data) {
+export function findVipGroupStudents(data) {
   return request({
     url: api + '/vipGroupManage/findVipGroupStudents',
     method: 'GET',
@@ -171,7 +172,7 @@ export function findVipGroupStudents (data) {
 }
 
 // 根据vipid和学生id 退学
-export function leaveSchool (data) {
+export function leaveSchool(data) {
   return request({
     url: api + '/vipGroupManage/applyRefundForStudent',
     method: 'POST',
@@ -180,7 +181,7 @@ export function leaveSchool (data) {
 }
 
 // 获取vip教学记录
-export function findVipGroupTeachingRecord (data) {
+export function findVipGroupTeachingRecord(data) {
   return request({
     url: api + '/vipGroupManage/findVipGroupTeachingRecord',
     method: 'get',
@@ -189,7 +190,7 @@ export function findVipGroupTeachingRecord (data) {
 }
 
 // 获取vip财务信息
-export function getVipGroupSalarys (data) {
+export function getVipGroupSalarys(data) {
   return request({
     url: api + '/vipGroupManage/findVipGroupSalarys',
     method: 'get',
@@ -198,7 +199,7 @@ export function getVipGroupSalarys (data) {
 }
 
 // 获取当前课程上课学员
-export function getStudyStudents (data) {
+export function getStudyStudents(data) {
   return request({
     url: api + '/vipGroupManage/findVipGroupAttendanceStudents',
     method: 'get',
@@ -207,7 +208,7 @@ export function getStudyStudents (data) {
 }
 
 // vip课时调整
-export function resetVipClass (data) {
+export function resetVipClass(data) {
   return request({
     url: api + '/vipGroupManage/classStartDateAdjust',
     method: 'POST',
@@ -216,7 +217,7 @@ export function resetVipClass (data) {
 }
 
 // 计算vip课酬
-export function getVipGroupCostCount (data) {
+export function getVipGroupCostCount(data) {
   return request({
     url: api + '/vipGroupManage/getVipGroupCostCount',
     method: 'POST',
@@ -224,8 +225,33 @@ export function getVipGroupCostCount (data) {
   })
 }
 
+// 计算网管课课酬
+export function getPracticeGroupCostCount(data) {
+  return request({
+    url: api + '/practiceGroupManage/getPracticeGroupCostCount',
+    method: 'POST',
+    data: data
+  })
+}
+// 网管课申请
+export function createPractice(data) {
+  return request({
+    url: api + '/practiceGroupManage/practiceGroupApply',
+    method: 'POST',
+    data
+  })
+}
+
+// 获取网管课单价 practiceGroupManage/queryPracticeGroupSellPrice
+export function getPracticeGroupSellPrice(data) {
+  return request({
+    url: api + '/practiceGroupManage/queryPracticeGroupSellPrice',
+    method: 'GET',
+    params:data
+  })
+}
 // vip课申请
-export function createVip (data) {
+export function createVip(data) {
   return request({
     url: api + '/vipGroupManage/vipGroupApply',
     method: 'POST',
@@ -234,7 +260,7 @@ export function createVip (data) {
 }
 
 // 暂停vip
-export function closeVip (data) {
+export function closeVip(data) {
   return request({
     url: api + '/vipGroupManage/stopVipGroup',
     method: 'POST',
@@ -244,7 +270,7 @@ export function closeVip (data) {
 
 // 修改vip基本信息
 
-export function updateVipBaseInfo (data) {
+export function updateVipBaseInfo(data) {
   return request({
     url: api + '/vipGroupManage/updateVipBaseInfo',
     method: 'POST',
@@ -253,7 +279,7 @@ export function updateVipBaseInfo (data) {
 }
 
 // 获取vip课程计划
-export function findVipGroupCourseSchedules (data) {
+export function findVipGroupCourseSchedules(data) {
   return request({
     url: api + '/courseSchedule/findVipGroupCourseSchedules',
     method: 'POST',
@@ -262,7 +288,7 @@ export function findVipGroupCourseSchedules (data) {
 }
 
 // 批量删除课程 删除vip
-export function bathDelete (data) {
+export function bathDelete(data) {
   return request({
 
     url: api + '/courseSchedule/batchDelete',
@@ -271,7 +297,7 @@ export function bathDelete (data) {
   })
 }
 // vip批量修改
-export function vipCourseAdjust (data) {
+export function vipCourseAdjust(data) {
   return request({
     url: api + '/courseSchedule/vipCourseAdjust',
     method: 'POST',
@@ -280,7 +306,7 @@ export function vipCourseAdjust (data) {
 }
 
 // 新增vip课程计划
-export function appendVipGroupCourseSchedules (data) {
+export function appendVipGroupCourseSchedules(data) {
   return request({
     url: api + '/vipGroupManage/appendVipGroupCourseSchedules',
     method: 'POST',
@@ -289,7 +315,7 @@ export function appendVipGroupCourseSchedules (data) {
 }
 
 // vip退费查询
-export function getStudentSurplusCourseFee (data) {
+export function getStudentSurplusCourseFee(data) {
   return request({
     url: api + '/vipGroupManage/getStudentSurplusCourseFee',
     method: 'get',
@@ -298,7 +324,7 @@ export function getStudentSurplusCourseFee (data) {
 }
 
 // vip搜索课程余额的学生
-export function getHaveCourseBalanceStudents (data) {
+export function getHaveCourseBalanceStudents(data) {
   return request({
     url: api + '/vipGroupManage/findHaveCourseBalanceStudents',
     method: 'get',
@@ -307,7 +333,7 @@ export function getHaveCourseBalanceStudents (data) {
 }
 
 // vip添加学员 addVipGroupStudents
-export function addVipGroupStudents (data) {
+export function addVipGroupStudents(data) {
   return request({
     url: api + '/vipGroupManage/addVipGroupStudents',
     method: 'post',
@@ -316,7 +342,7 @@ export function addVipGroupStudents (data) {
 }
 // /courseSchedule/batchAppendVipGroupCourses
 // vip课批量新增
-export function batchAppendVipGroupCourses (data) {
+export function batchAppendVipGroupCourses(data) {
   return request({
     url: api + '/courseSchedule/batchAppendVipGroupCourses',
     method: 'POST',
@@ -325,7 +351,7 @@ export function batchAppendVipGroupCourses (data) {
 }
 
 // vip休学
-export function vipPauseForStudent (data) {
+export function vipPauseForStudent(data) {
   return request({
     url: api + '/vipGroupManage/pauseForStudent',
     method: 'POST',
@@ -334,7 +360,7 @@ export function vipPauseForStudent (data) {
 }
 
 // 获取学生休学信息
-export function getStudentPauseInfo (data) {
+export function getStudentPauseInfo(data) {
   return request({
     url: api + '/vipGroupManage/getStudentPauseInfo',
     method: 'POST',
@@ -343,7 +369,7 @@ export function getStudentPauseInfo (data) {
 }
 
 // 恢复休学
-export function recoverForStudent (data) {
+export function recoverForStudent(data) {
   return request({
     url: api + '/vipGroupManage/recoverForStudent',
     method: 'POST',
@@ -352,7 +378,7 @@ export function recoverForStudent (data) {
 }
 
 // 根据vip课所在部门与声部获取教师
-export function findTeacherWithVipGroupOrganAndSubject (data) {
+export function findTeacherWithVipGroupOrganAndSubject(data) {
   return request({
     url: api + '/vipGroupManage/findTeacherWithVipGroupOrganAndSubject',
     method: 'get',
@@ -361,7 +387,7 @@ export function findTeacherWithVipGroupOrganAndSubject (data) {
 }
 
 // 删除VIP课
-export function deleteVipGroup (data) {
+export function deleteVipGroup(data) {
   return request({
     url: api + '/vipGroupManage/deleteVipGroup',
     method: 'post',
@@ -370,7 +396,7 @@ export function deleteVipGroup (data) {
 }
 
 // 查询公用部分,分部
-export function getPublicOrgans (data) {
+export function getPublicOrgans(data) {
   return request({
     url: api + '/vipGroupManage/getPublicOrgans',
     method: 'get',
@@ -378,10 +404,25 @@ export function getPublicOrgans (data) {
   })
 }
 // 修改vip课程组 vipGroupManageUpdate
-export function vipGroupManageUpdate (data) {
+export function vipGroupManageUpdate(data) {
   return request({
     url: api + '/vipGroupManage/update',
     method: 'post',
     data: qs.stringify(data)
   })
 }
+export const getVipGroupActivity = data => request2({
+  url:api +  '/vipGroupActivity/get',
+  params:data,
+  method: 'get',
+  requestType: 'form'
+})
+// 启用停用活动方案
+export const enableVipGroupActivity = data => request2({
+  url:api +  '/vipGroupActivity/enable',
+  params:data,
+  method: 'get',
+  requestType: 'form'
+})
+
+

+ 6 - 5
src/constant/index.js

@@ -43,6 +43,7 @@ export const courseType = {
   DEMO: '试听课',
   PRACTICE: '网管课',
   COMM: '对外课',
+  MEMBER:'会员'
 }
 
 export const boolOptions = {
@@ -286,10 +287,10 @@ export const conclusion = {
   2:'异常'
 }
 export const vipResetType = {
-  1: '不限制',
-0: '线上不可调为线下',
-2: '线下不可调为线上',
-3: '线上线下不可互调'
+'1': '不限制',
+'0': '线上不可调为线下',
+'2': '线下不可调为线上',
+'3': '线上线下不可互调'
 }
 
 export const courseViewType = {
@@ -324,4 +325,4 @@ export const orderType = {
   REPLACEMENT: '乐器置换',
   ADD_STUDENT: '进行中乐团加学员',
   OTHER: "其他",
-}
+}

+ 3 - 0
src/layout/components/TagsView.vue

@@ -90,6 +90,9 @@ export default {
         document.body.removeEventListener("click", this.closeMenu);
       }
     },
+   async '$route.meta.title'(val){
+       await this.$store.dispatch("addVisitedViews", this.$route);
+    }
   },
   mounted() {
     this.addViewTags();

+ 2 - 0
src/router/index.js

@@ -452,6 +452,8 @@ export const asyncRoutes = {
   couponManager:()=>import ('@/views/couponManager'),
   // 优惠券明细
   couponDetail:()=>import ('@/views/couponManager/couponDetail'),
+  // 优惠券明细
+  activeMarketing:()=>import ('@/views/activityScheduling/activeMarketing'),
 }
 
 export default router

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

@@ -387,6 +387,19 @@ function setDetailRoute(accessedRoutes) {
           }
         },
         {
+          name: '网管课',
+          path: 'newPractice',
+          component: () => import('@/views/buildVip/index'),
+          hidden: true,
+          meta: {
+            noCache: '1',
+            title: '网管课申请',
+            belongTopMenu: "/business",
+            activeMenu: '/accompanyManager/accompany',
+            id: 'xx5'
+          }
+        },
+        {
           name: 'vip修改',
           path: 'vipReset',
           component: () => import('@/views/vipClass/vipReset'),

+ 5 - 1
src/utils/searchArray.js

@@ -217,7 +217,11 @@ export const stockType = [
 //   { value: 'CANCELED', text: '取消' },
 //   { value: 'CLOSE', text: '已关闭' },
 // ]
-export const vipResetTypeList = getValueForKey(vipResetType)
+export const vipResetTypeList = [{label:'不限制',value:'1'},
+{label:'线上不可调为线下',value:'0'},
+{label:'线下不可调为线上',value:'2'},
+{label:'线上线下不可互调',value:'3'}
+  ]
 export const musicGroupStatus = getValueForKey(musicGroupType)
 export const classTimeList = getValueForKey(classTime)
 export const courseViewTypeList = getValueForKey(courseViewType)

+ 113 - 13
src/views/accompanyManager/accompanyList.vue

@@ -6,9 +6,17 @@
     <div class="topWrap">
       <div
         class="newBand"
+        v-permission="'/newPractice'"
+        @click="newPractice"
+        style="width: 120px"
+      >
+        新建网管课
+      </div>
+      <div
+        class="newBand"
         v-permission="'export/practiceGroup'"
         @click="onStudentExport"
-        style="width: 150px; max-width:150px"
+        style="width: 150px; max-width: 150px"
       >
         续费提醒导出
       </div>
@@ -240,8 +248,21 @@
           <el-table-column align="center" label="是否续费" fixed="right">
             <template slot-scope="scope">
               <div>
-                <p v-if="scope.row.buyMonths == 0">免费</p>
-                <p v-if="scope.row.buyMonths > 0">
+                <p
+                  v-if="
+                    scope.row.type == 'FREE' ||
+                    scope.row.type == 'CARE_PACKAGE' ||
+                    scope.row.type == 'TRIAL'
+                  "
+                >
+                  免费
+                </p>
+                <p
+                  v-if="
+                    scope.row.type == 'CHARGE' ||
+                    scope.row.type == 'COME_ON_PACKAGE'
+                  "
+                >
                   {{ scope.row.beRenewGroupId > 0 ? "续费" : "首充" }}
                 </p>
               </div>
@@ -265,7 +286,10 @@
             <template slot-scope="scope">
               <div>
                 <!-- v-permission="'courseSchedule/classStartDateAdjust'"  v-if="!scope.row.isSettlement" -->
-                <el-button type="text" @click="lookCrouse(scope.row)"   v-if="permission('/accompanys')"
+                <el-button
+                  type="text"
+                  @click="lookCrouse(scope.row)"
+                  v-if="permission('/accompanys')"
                   >查看</el-button
                 >
                 <el-button
@@ -288,7 +312,7 @@
           </el-table-column>
         </el-table>
         <pagination
-         save-key="accompanyList"
+          save-key="accompanyList"
           sync
           :total.sync="rules.total"
           :page.sync="rules.page"
@@ -317,6 +341,7 @@
             v-model.trim="closeForm.money"
           ></el-input>
         </el-form-item>
+        <p style="color:red"  v-if="closeForm.isBack">退费金额暂不进入账户余额</p>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button @click="closeVisible = false">取 消</el-button>
@@ -340,6 +365,7 @@
 </template>
 <script>
 import pagination from "@/components/Pagination/index";
+import { Searchs } from "@/helpers";
 import { permission } from "@/utils/directivePage";
 import cleanDeep from "clean-deep";
 import { commGroupStatus, practiceGroupType } from "@/utils/searchArray";
@@ -392,9 +418,9 @@ export default {
     };
   },
   mounted() {
-           const { query } = this.$route;
-      if(query.search){
-      this.searchForm.search = query.search
+    const { query } = this.$route;
+    if (query.search) {
+      this.searchForm.search = query.search;
     }
     this.init();
   },
@@ -424,6 +450,7 @@ export default {
         practiceGroupType: null,
         groupStatus: null,
       };
+      new Searchs().removeByKey("accompanyList");
       this.search();
     },
     onStudentExport() {
@@ -470,7 +497,7 @@ export default {
                 } else {
                   let objectUrl = URL.createObjectURL(blob);
                   let link = document.createElement("a");
-                  let fname = "网管课续费提醒" + new Date().getTime() + '.xls'; //下载文件的名字
+                  let fname = "网管课续费提醒" + new Date().getTime() + ".xls"; //下载文件的名字
                   link.href = objectUrl;
                   link.setAttribute("download", fname);
                   document.body.appendChild(link);
@@ -532,7 +559,7 @@ export default {
                 } else {
                   let objectUrl = URL.createObjectURL(blob);
                   let link = document.createElement("a");
-                  let fname = "网管课" + new Date().getTime() + '.xls'; //下载文件的名字
+                  let fname = "网管课" + new Date().getTime() + ".xls"; //下载文件的名字
                   link.href = objectUrl;
                   link.setAttribute("download", fname);
                   document.body.appendChild(link);
@@ -569,16 +596,64 @@ export default {
       });
     },
     lookCrouse(row) {
-    let coursesStartDate = this.$helpers.dayjs(row.coursesStartDate).format('YYYY-MM-DD')
-    let coursesExpireDate = this.$helpers.dayjs(row.coursesExpireDate).format('YYYY-MM-DD')
+      let coursesStartDate = this.$helpers
+        .dayjs(row.coursesStartDate)
+        .format("YYYY-MM-DD");
+      let coursesExpireDate = this.$helpers
+        .dayjs(row.coursesExpireDate)
+        .format("YYYY-MM-DD");
       this.$router.push({
         path: "/business/accompanys",
-        query: { id: row.id, type: row.type,coursesStartDate,coursesExpireDate },
+        query: {
+          id: row.id,
+          type: row.type,
+          coursesStartDate,
+          coursesExpireDate,
+        },
       });
     },
     closeCrouse(row) {
       this.activeRow = row;
       this.closeVisible = true;
+      // this.$confirm("请确认是否关闭课程组,关闭后不予退费", "提示", {
+      //   confirmButtonText: "确定",
+      //   cancelButtonText: "取消",
+      //   type: "warning",
+      // })
+      //   .then((res) => {
+      //     cancelGroup({
+      //       groupId: row.id,
+      //       groupType: "PRACTICE",
+      //       refundAmount: 0,
+      //     }).then((res) => {
+      //       if (res.code == 200) {
+      //         this.$message.success("关闭成功");
+      //         this.getList();
+      //         // this.closeVisible = false;
+      //       }
+      //       if (res.code == 206) {
+      //         this.$confirm(res.msg, "提示", {
+      //           confirmButtonText: "确定",
+      //           cancelButtonText: "取消",
+      //         }).then(() => {
+      //           cancelGroup({
+      //             groupId: row.id,
+      //             groupType: "PRACTICE",
+      //             refundAmount: 0,
+      //             confirmReturnActivityGive: true,
+      //           }).then((res) => {
+      //             if (res.code == 200) {
+      //               this.$message.success("关闭成功");
+      //               this.getList();
+      //             }
+      //           });
+      //         });
+      //       }
+      //     });
+      //   })
+      //   .catch(() => {});
+
+      // this.closeVisible = true;
     },
     courseVisibleClose() {
       // 关闭弹窗前
@@ -604,6 +679,25 @@ export default {
           this.getList();
           this.closeVisible = false;
         }
+         if (res.code == 206) {
+              this.$confirm(res.msg, "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+              }).then(() => {
+                cancelGroup({
+                  groupId: this.activeRow.id,
+                  groupType: "PRACTICE",
+                  refundAmount: this.closeForm.money,
+                  confirmReturnActivityGive: true,
+                }).then((res) => {
+                  if (res.code == 200) {
+                    this.$message.success("关闭成功");
+                    this.getList();
+                      this.closeVisible = false;
+                  }
+                });
+              });
+            }
       });
     },
     resetMemo(row) {
@@ -620,6 +714,12 @@ export default {
         }
       });
     },
+    newPractice() {
+      this.$router.push({
+        path: "/business/newPractice",
+        query: { courseType: "PRACTICE" },
+      });
+    },
   },
   watch: {
     closeVisible(val) {

+ 39 - 23
src/views/accompanyManager/accompanys.vue

@@ -217,7 +217,7 @@
                   @pagination="getList" /> 乔乔说后台没有分页所以一口气都展示-->
     </div>
     <el-dialog
-      :title="updateCourseStatus==2?'有效期调整':'有效期调整(高权限)'"
+      :title="updateCourseStatus == 2 ? '有效期调整' : '有效期调整(高权限)'"
       width="400px"
       :before-close="expireClose"
       :visible.sync="expireVisible"
@@ -849,9 +849,9 @@ export default {
       this.getList();
     },
     onUpdateCourse(type) {
-      this.updateCourseStatus = type
+      this.updateCourseStatus = type;
 
-      this.expireVisible = true
+      this.expireVisible = true;
     },
     onCallName(item) {
       // 点名表
@@ -915,6 +915,7 @@ export default {
               ? new Date(this.courseData[0].coursesStartDate)
               : new Date();
             let buyMonths = this.courseData[0].buyMonths;
+            this.accompanTime = this.courseData[0].singleClassMinutes || 25;
             let lastDayNum = nextMonthLastDay(
               originalStartDate.getFullYear(),
               originalStartDate.getMonth() + buyMonths + 1
@@ -946,10 +947,12 @@ export default {
       return {
         firstDayOfWeek: 1,
         disabledDate(time) {
-          if (self.tableList[self.tableList.length -1].classDate) {
+          if (self.tableList[self.tableList.length - 1].classDate) {
             return (
-              new Date(self.tableList[self.tableList.length -1].classDate).getTime() >=
-              time.getTime()+24*60*60*1000
+              new Date(
+                self.tableList[self.tableList.length - 1].classDate
+              ).getTime() >=
+              time.getTime() + 24 * 60 * 60 * 1000
             );
           } else {
             return time.getTime() >= Date.now();
@@ -958,15 +961,16 @@ export default {
         },
       };
     },
-     resetDate() {
+    resetDate() {
       let self = this;
       return {
         firstDayOfWeek: 1,
         disabledDate(time) {
-          if (self.tableList[self.tableList.length -1].classDate) {
+          if (self.tableList[self.tableList.length - 1].classDate) {
             return (
-              new Date(self.tableList[self.tableList.length -1].classDate).getTime() >=
-              time.getTime()
+              new Date(
+                self.tableList[self.tableList.length - 1].classDate
+              ).getTime() >= time.getTime()
             );
           } else {
             return time.getTime() >= Date.now();
@@ -996,7 +1000,7 @@ export default {
     submitExpireDate() {
       this.$refs.expireForm.validate((some) => {
         if (some) {
-          if(this.updateCourseStatus == 1) {
+          if (this.updateCourseStatus == 1) {
             updateCoursesExpireDate({
               practiceGroupId: this.practiceId,
               coursesExpireDate: this.expireForm.coursesExpireDate,
@@ -1011,7 +1015,7 @@ export default {
                   }),
                 });
                 this.timers =
-                  this.expireForm.coursesStartDate+
+                  this.expireForm.coursesStartDate +
                   "至" +
                   this.expireForm.coursesExpireDate;
                 this.expireVisible = false;
@@ -1021,7 +1025,7 @@ export default {
                 this.$message.error(res.msg);
               }
             });
-          } else if(this.updateCourseStatus == 2) {
+          } else if (this.updateCourseStatus == 2) {
             updateCoursesExpireDateOnlyNormal({
               practiceGroupId: this.practiceId,
               coursesExpireDate: this.expireForm.coursesExpireDate,
@@ -1036,7 +1040,7 @@ export default {
                   }),
                 });
                 this.timers =
-                  this.expireForm.coursesStartDate+
+                  this.expireForm.coursesStartDate +
                   "至" +
                   this.expireForm.coursesExpireDate;
                 this.expireVisible = false;
@@ -1047,7 +1051,6 @@ export default {
               }
             });
           }
-
         } else {
           return;
         }
@@ -1227,14 +1230,17 @@ export default {
           // let date = new Date(self.leftForm.courseStart.replace(/-/, "/"));
           // coursesExpireDate
           let dayjs = this.$helpers.dayjs;
-          let nowDate =   dayjs(new Date()).valueOf()-24*60*60*1000
-          let coursesStartDate = dayjs(this.expireForm.coursesStartDate).valueOf()
-          let coursesExpireDate =  dayjs(this.expireForm.coursesExpireDate).valueOf()
-         let startTime =
-          coursesStartDate - nowDate >0?coursesStartDate:nowDate
+          let nowDate = dayjs(new Date()).valueOf() - 24 * 60 * 60 * 1000;
+          let coursesStartDate = dayjs(
+            this.expireForm.coursesStartDate
+          ).valueOf();
+          let coursesExpireDate = dayjs(
+            this.expireForm.coursesExpireDate
+          ).valueOf();
+          let startTime =
+            coursesStartDate - nowDate > 0 ? coursesStartDate : nowDate;
           return (
-            time.getTime() <(startTime)||
-            time.getTime()>coursesExpireDate
+            time.getTime() < startTime || time.getTime() > coursesExpireDate
           );
           // }
           // return;
@@ -1439,7 +1445,17 @@ export default {
   watch: {
     adjustmentVisible(val) {
       if (!val) {
-        this.$refs.adjustmentForm.resetFields();
+        if( this.$refs.adjustmentForm){
+            this.$refs.adjustmentForm.resetFields();
+        }
+        this.weekList = [
+          {
+            dayOfWeek: "",
+            startTime: "",
+            endTime: "",
+            moid: new Date().getTime(),
+          },
+        ];
       }
     },
   },

+ 158 - 0
src/views/activityScheduling/activeMarketing.vue

@@ -0,0 +1,158 @@
+<template>
+    <div class="m-container">
+        <h2>
+            <div class="squrt"></div>营销活动
+        </h2>
+
+        <div class="m-core">
+            <el-button type="primary" class='newBand' @click="() => { operationType = 'create'; marketVisible = true }">添加营销活动</el-button>
+            <save-form
+                ref="searchForm"
+                :inline="true"
+                :model="searchForm"
+                @submit="search"
+                @reset="onReSet"
+            >
+                <el-form-item prop="search">
+                    <el-input
+                        v-model="searchForm.search"
+                        clearable
+                        placeholder="活动名称/活动编号"
+                    />
+                </el-form-item>
+                <!-- <el-form-item prop="search">
+                    <el-input
+                        v-model="searchForm.activityIds"
+                        clearable
+                        placeholder="关联活动方案"
+                    />
+                </el-form-item> -->
+                <el-form-item>
+                    <el-button native-type="submit" type="primary">搜索</el-button>
+                    <el-button native-type="reset" type="danger">重置</el-button>
+                </el-form-item>
+            </save-form>
+
+            <el-table
+                style="width: 100%"
+                :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+                :data="tableList"
+            >
+                <el-table-column align="center" prop="id" label="营销活动编号" width="200">
+                    <template slot-scope="scope">
+                        <div>
+                        <copy-text>{{ scope.row.id }}</copy-text>
+                        </div>
+                    </template>
+                </el-table-column>
+                <el-table-column align="center" prop="name" label="活动名称">
+                    <template slot-scope="scope">
+                        <copy-text>{{ scope.row.name }}</copy-text>
+                    </template>
+                </el-table-column>
+                <el-table-column align="center" prop="activityIds" label="关联活动方案">
+                    <template slot-scope="scope">
+                        {{ scope.row.activityIds }}
+                    </template>
+                </el-table-column>
+                <el-table-column
+                    align="center"
+                    width="180px"
+                    label="操作"
+                    fixed="right"
+                >
+                    <template slot-scope="scope">
+                        <el-button type="text" @click="onUpdate(scope.row)">修改</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <pagination
+                sync
+                :total.sync="rules.total"
+                :page.sync="rules.page"
+                :limit.sync="rules.limit"
+                :page-sizes="rules.page_size"
+                @pagination="FetchList"
+            />
+        </div>
+
+        <el-dialog
+            :title="(operationType == 'create' ? '添加' : '修改') + '营销活动'"
+            :visible.sync="marketVisible"
+            width="550px"
+            v-if="marketVisible"
+        >
+            <market-form
+                :marketId="marketId"
+                :operationType="operationType"
+                @submited="FetchList"
+                @close="marketVisible = false"
+            />
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import saveForm from "@/components/save-form";
+import pagination from "@/components/Pagination/index";
+import marketForm from './modals/market'
+import { marketActivityQueryPage } from './api'
+export default {
+    components: {
+        saveForm,
+        pagination,
+        marketForm
+    },
+    data() {
+        return {
+            operationType: 'create',
+            marketVisible: false,
+            marketId: null,
+            searchForm: {
+                search: null,
+                activityIds: null
+            },
+            rules: {
+                // 分页规则
+                limit: 10, // 限制显示条数
+                page: 1, // 当前页
+                total: 0, // 总条数
+                page_size: [10, 20, 40, 50], // 选择限制显示条数
+            },
+            tableList: [],
+        }
+    },
+    mounted() {
+        this.FetchList()
+    },
+    methods: {
+        search() {
+            this.rules.page = 1
+            this.FetchList()
+        },
+        onReSet() {
+            this.$refs.searchForm.resetFields();
+            this.rules.page = 1
+            this.FetchList();
+        },
+        async FetchList() {
+            try {
+                let res = await marketActivityQueryPage({
+                    ...this.searchForm,
+                    page: this.rules.page,
+                    rows: this.rules.limit
+                })
+                this.tableList = res.data.rows || []
+                this.rules.total = res.data.total
+            } catch {
+                //
+            }
+        },
+        onUpdate(row) {
+            this.marketId = row.id
+            this.operationType = 'update'
+            this.marketVisible = true
+        }
+    }
+}
+</script>

+ 35 - 0
src/views/activityScheduling/api.js

@@ -0,0 +1,35 @@
+import request from '@/utils/request2'
+
+export function marketActivityAdd (data) {
+    return request({
+        url: '/api-web/marketActivity/add',
+        method: 'post',
+        data,
+        requestType: 'form'
+    })
+}
+
+export function marketActivityUpdate (data) {
+    return request({
+        url: '/api-web/marketActivity/update',
+        method: 'post',
+        data,
+        requestType: 'form'
+    })
+}
+
+export function marketActivityGet (data) {
+    return request({
+        url: '/api-web/marketActivity/get',
+        method: 'get',
+        params: data
+    })
+}
+
+export function marketActivityQueryPage (data) {
+    return request({
+        url: '/api-web/marketActivity/queryPage',
+        method: 'get',
+        params: data
+    })
+}

+ 114 - 0
src/views/activityScheduling/modals/market.vue

@@ -0,0 +1,114 @@
+<template>
+    <div>
+        <el-form ref="form" :model="form" label-width="120px">
+            <el-form-item
+                prop="activeId"
+                label="营销活动编号"
+                v-if="type == 'update'"
+            >
+                <el-input placeholder="请输入营销活动编号" disabled v-model="form.activeId"/>
+            </el-form-item>
+            <el-form-item
+                prop="name"
+                label="活动名称"
+                :rules="[{required: true, message: '请输入活动名称'}]"
+            >
+                <!-- :disabled="type == 'update'"  -->
+                <el-input placeholder="请输入活动名称" v-model="form.name"/>
+            </el-form-item>
+            <el-form-item label="关联活动方案" prop="activityIds" :rules="[{required: true, message: '请输入关联活动方案'}]">
+                <el-input
+                    type="textarea"
+                    v-model.trim="form.activityIds"
+                    style="width: 100%"
+                    maxlength="300"
+                    :autosize="{ minRows: 5 }"
+                     placeholder="请输入关联活动方案(多个活动以英文“,”分割)"
+                ></el-input>
+            </el-form-item>
+
+            <div style="text-align: right;">
+                <el-button type="primary" @click="submit">提交</el-button>
+                <el-button @click="$listeners.close">取消</el-button>
+            </div>
+        </el-form>
+    </div>
+</template>
+
+<script>
+import { validUsername } from '@/utils/validate'
+import { marketActivityAdd, marketActivityUpdate, marketActivityGet } from '../api'
+export default {
+    props: {
+        operationType: {
+            type: String,
+            default: 'create'
+        },
+        marketId: {
+            type: Number || String,
+            default: null
+        }
+    },
+    data() {
+        return {
+            form: {
+                activeId: null,
+                name: null,
+                activityIds: null,
+            }
+        }
+    },
+    computed: {
+        type() {
+            return this.operationType
+        }
+    },
+    async mounted() {
+        console.log(this.type, this.marketId)
+        if(this.type == 'update' && this.marketId) {
+            try {
+                let res = await marketActivityGet({ id: this.marketId })
+                let result = res.data
+                this.form = {
+                    activeId: result.id,
+                    name: result.name,
+                    activityIds: result.activityIds
+                }
+
+            } catch {
+                //
+            }
+        }
+    },
+    methods: {
+        submit() {
+            this.$refs.form.validate(async (valid) => {
+                console.log(valid)
+                if(!valid) return
+                try {
+                    let form = this.form
+                    if(this.type == 'create') {
+                        await marketActivityAdd({
+                            name: form.name,
+                            activityIds: form.activityIds
+                        })
+                        this.$message.success('添加营销活动成功')
+                    } else if(this.type == 'update') {
+                        console.log('join')
+                        await marketActivityUpdate({
+                            id: this.marketId,
+                            name: form.name,
+                            activityIds: form.activityIds
+                        })
+                        this.$message.success('修改营销活动成功')
+                    }
+                    this.$listeners.submited()
+                    this.$listeners.close()
+                } catch {
+                    //
+                }
+            })
+        }
+    }
+}
+</script>

File diff suppressed because it is too large
+ 495 - 244
src/views/buildVip/index.vue


+ 1 - 1
src/views/businessManager/orderManager/salesList.vue

@@ -304,7 +304,7 @@
                 >修改成本</el-button
               >
               <el-popconfirm
-                title="退货后该销售金额将退还到学员账户余额"
+                title="退货后该销售金额将暂不进入账户余额"
                 @confirm="() => refund({ id: scope.row.id })"
                 v-if="scope.row.status === 0"
                 v-permission="'sellOrder/refund'"

+ 703 - 0
src/views/categroyManager/modals/baseInfo.vue

@@ -0,0 +1,703 @@
+<template>
+  <div>
+    <el-alert
+      title="基础信息"
+      type="info"
+      :closable="false"
+      class="baseMsg"
+    ></el-alert>
+
+    <div class="m-core">
+      <el-form
+        :label-position="labelPosition"
+        :model="baseForm"
+        ref="vipform"
+        label-width="140px"
+        :rules="vipformRules"
+        class="vipform"
+      >
+        <el-form-item label="活动名称" prop="name">
+          <el-input
+            style="width: 400px"
+            v-model.trim="baseForm.name"
+            :disabled="isDisabled || status != 'DRAFT'"
+          ></el-input>
+        </el-form-item>
+        <!--   @visible-change="$forceUpdate()" -->
+        <el-form-item label="适用分部" prop="organ">
+          <select-all
+            v-model.trim="baseForm.organ"
+            style="width: 400px"
+            multiple
+            filterable
+            @change="onOrganChange"
+            clearable
+            :disabled="isDisabled || status != 'DRAFT'"
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </select-all>
+          <!-- <el-button @click="onCheckAllBranch">适用所有分部</el-button> -->
+        </el-form-item>
+        <el-form-item label="活动描述" prop="description">
+          <el-input
+            type="textarea"
+            v-model.trim="baseForm.description"
+            style="width: 400px"
+            :rows="5"
+            placeholder="请输入活动说明"
+            :disabled="isDisabled || status != 'DRAFT'"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="活动类型" prop="activityType">
+          <el-select
+            v-model.trim="baseForm.activityType"
+            placeholder="请选择活动类型"
+            clearable
+            style="width: 400px !important"
+            @change="changeActivityType"
+            :disabled="isDisabled || status != 'DRAFT'"
+          >
+            <el-option label="课程活动" :value="0"></el-option>
+            <el-option label="会员活动" :value="1"></el-option>
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="活动生效时间" prop="activeTime">
+          <el-date-picker
+            :disabled="isDisabled"
+            v-model.trim="baseForm.activeTime"
+            type="datetimerange"
+            :default-time="['00:00:00', '23:59:59']"
+            range-separator="至"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            start-placeholder="开始日期"
+            :picker-options="{
+              firstDayOfWeek: 1,
+            }"
+            end-placeholder="结束日期"
+          ></el-date-picker>
+          <el-tooltip placement="top" popper-class="mTooltip">
+            <div slot="content">
+              可通过该方案购买课程的时间范围,到达开始时间才可购买,到达结束时间后不可购买,不填则不限制且立即生效
+            </div>
+            <i
+              class="el-icon-question micon el-tooltip"
+              style="font-size: 18px; color: #f56c6c"
+            ></i>
+          </el-tooltip>
+        </el-form-item>
+        <el-form-item label="排课时间范围" prop="courseTime">
+          <el-date-picker
+            :disabled="isDisabled"
+            v-model.trim="baseForm.courseTime"
+            type="datetimerange"
+            :default-time="['00:00:00', '23:59:59']"
+            range-separator="至"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            start-placeholder="开始日期"
+            :picker-options="{
+              firstDayOfWeek: 1,
+            }"
+            end-placeholder="结束日期"
+          ></el-date-picker>
+          <el-tooltip placement="top" popper-class="mTooltip">
+            <div slot="content">
+             通过该方案购买的课程排课时,课程时间不可超过该时间范围,不填则不限制
+            </div>
+            <i
+              class="el-icon-question micon el-tooltip"
+              style="font-size: 18px; color: #f56c6c"
+            ></i>
+          </el-tooltip>
+        </el-form-item>
+        <el-form-item label="适用学员" prop="applyToStudentType">
+          <el-row>
+            <el-col style="width: 400px">
+              <select-all
+                v-model.trim="baseForm.applyToStudentType"
+                style="width: 400px"
+                multiple
+                filterable
+                clearable
+                placeholder="请选择适用学员"
+                @change="applyToStudentTypeChange"
+                :disabled="isDisabled"
+              >
+                <el-option label="新学员" value="1"></el-option>
+                <el-option label="老学员" value="0"></el-option>
+                <el-option label="会员" value="2"></el-option>
+                <el-option label="非会员" value="3"></el-option>
+              </select-all>
+            </el-col>
+            <el-tooltip placement="top" popper-class="mTooltip">
+              <div slot="content">
+                可通过该方案购买课程的学员群体,不填则不限制
+              </div>
+              <i
+                class="el-icon-question micon el-tooltip"
+                style="font-size: 18px; color: #f56c6c; margin-left: 3px"
+              ></i>
+            </el-tooltip>
+          </el-row>
+        </el-form-item>
+        <el-form-item label="可购买次数" prop="studentMaxUsedTimes">
+          <el-input
+            style="width: 400px"
+            type="number"
+            v-model.trim="baseForm.studentMaxUsedTimes"
+            :disabled="isDisabled"
+          >
+            <template slot="append">次</template>
+          </el-input>
+          <el-tooltip placement="top" popper-class="mTooltip">
+            <div slot="content">
+              学员可以购买该活动方案的次数限制,不填则不限制
+            </div>
+            <i
+              class="el-icon-question micon el-tooltip"
+              style="font-size: 18px; color: #f56c6c"
+            ></i>
+          </el-tooltip>
+        </el-form-item>
+        <el-form-item label="是否充值课程余额" prop="isPayToBalance">
+          <el-select
+            v-model.trim="baseForm.isPayToBalance"
+            placeholder="请选择是否充值课程余额"
+            clearable
+            style="width: 400px !important"
+            :disabled="isDisabled || status != 'DRAFT' || balanceDis"
+          >
+            <el-option label="课程余额" :value="1"></el-option>
+            <el-option label="资格限制" :value="0"></el-option>
+          </el-select>
+          <el-tooltip placement="top" popper-class="mTooltip">
+            <div slot="content">
+              课程余额:学员缴费金额进入课程余额,排课时扣减课程余额,若课程余额不足则不可排课<br/>
+              资格限制:学员缴费金额不进入课程余额,学员购买后增加可排课次数,排课后扣减可排课次数
+              会员活动默认为资格限制,不可修改
+            </div>
+            <i
+              class="el-icon-question micon el-tooltip"
+              style="font-size: 18px; color: #f56c6c"
+            ></i>
+          </el-tooltip>
+        </el-form-item>
+        <el-form-item label="营销活动售价" prop="marketPrice">
+          <el-input
+            style="width: 400px"
+            type="number"
+            v-model.trim="baseForm.marketPrice"
+            :disabled="isDisabled || status != 'DRAFT'"
+          >
+            <template slot="append">元</template>
+          </el-input>
+          <el-tooltip placement="top" popper-class="mTooltip">
+            <div slot="content">
+              该字段仅用于关联的营销活动中本方案的销售价格,后台、老师端为学员创建课程不受此价格影响
+            </div>
+            <i
+              class="el-icon-question micon el-tooltip"
+              style="font-size: 18px; color: #f56c6c"
+            ></i>
+          </el-tooltip>
+        </el-form-item>
+      </el-form>
+    </div>
+  </div>
+</template>
+<script>
+import { vipGroupCategory, addVipActive } from "@/api/vipSeting";
+import { getEmployeeOrgan } from "@/api/buildTeam";
+import { vipResetTypeList } from "@/utils/searchArray";
+import cleanDeep from "clean-deep";
+
+export default {
+  props: ["baseForm", "isDisabled", "status"],
+  name: "vipNewActive",
+  data() {
+    return {
+      vipResetTypeList,
+      pageType: "",
+      labelPosition: "right",
+      vipformRules: {
+        name: [
+          { required: true, message: "请输入活动名称", trigger: "blur" },
+          {
+            min: 1,
+            max: 25,
+            message: "长度在 1 到 25 个字符",
+            trigger: "blur",
+          },
+        ],
+        desc: [
+          { required: true, message: "请输入文字描述", trigger: "blur" },
+          {
+            min: 1,
+            max: 200,
+            message: "长度在 1 到 200 个字符",
+            trigger: "blur",
+          },
+        ],
+        activityType: [
+          { required: true, message: "请选择活动类型", trigger: "change" },
+        ],
+        // activeTime: [
+        //   { required: false, message: "请选择活动时间", trigger: "blur" },
+        // ],
+        courseTime: [
+          { required: false, message: "请选择课程时间", trigger: "change" },
+        ],
+        studentMaxUsedTimes: [
+          { required: false, message: "请输入购买次数", trigger: "blur" },
+          { pattern:  /^\+?[1-9]\d*$/, message: "请输入大于0的正整数" },
+        ],
+        organ: [
+          { required: true, message: "请选择适用分部", trigger: "change" },
+        ],
+        stauts: [
+          { required: true, message: "请选择活动形式", trigger: "change" },
+        ],
+        applyToStudentType: [
+          { required: false, message: "请选择是否新生专享" },
+        ],
+        isPayToBalance: [
+          {
+            required: true,
+            message: "请选择是否支付到余额",
+            trigger: "change",
+          },
+        ],
+        allowOnlineToOffline: [
+          { required: true, message: "请选择课程调整方式", trigger: "change" },
+        ],
+      },
+      courseStatusList: [], // 获取所有课程形式
+      activeType: "",
+      online: true,
+      unonline: true,
+      onlineSalary: "TEACHER_DEFAULT",
+      unonlineSalary: "TEACHER_DEFAULT",
+      onlineprice: "",
+      unonlineprice: "",
+      salaryReadonlyFlag: false,
+      paymentReadonlyFlag: false,
+      attribute1: "",
+      attribute2: "",
+      courseNumForm: {
+        minCourseNum: "",
+        maxCourseNum: "",
+        studentMaxUsedTimes: "",
+      },
+      giveClassPaySalaryFlag: true,
+      organList: [],
+      onlineClassJoinGradientRewards: false,
+      offlineClassJoinGradientRewards: false,
+      courseNumrules: {
+        minCourseNum: [
+          { required: true, message: "请输入最小课时数", trigger: "blur" },
+          { validator: this.validateCom, trigger: "blur" },
+          { validator: this.validateMin, trigger: "blur" },
+        ],
+        maxCourseNum: [
+          { required: true, message: "请输入最大课时数", trigger: "blur" },
+          { validator: this.validateCom, trigger: "blur" },
+          { validator: this.validateMax, trigger: "blur" },
+        ],
+      },
+    };
+  },
+
+  async mounted() {
+    // 首先获取课程形式
+    // vipGroupCategory().then(res => {
+    //   if (res.code == 200) {
+    //     this.courseStatusList = res.data;
+    //   }
+    // });
+    // // 适用分部
+    // getEmployeeOrgan().then(res => {
+    //   if (res.code == 200) {
+    //     this.organList = res.data;
+    //   }
+    // });
+    // 获取类型
+    await this.$store.dispatch("setVipGroupCategory");
+    // 获取分部
+    await this.$store.dispatch("setBranchs");
+    // this.onReSet();
+    // if (this.$route.query.rules) {
+    //   this.rules = this.$route.query.rules;
+    // }
+    // if (this.$route.query.searchForm) {
+    //   this.searchForm = this.$route.query.searchForm;
+    // }
+
+    this.pageType = this.$route.query.type;
+    if (!this.$route.query.id) {
+      this.$refs.vipform.resetFields();
+    }
+    //
+  },
+
+  methods: {
+    resetForm() {
+      this.$refs.form.resetFields();
+    },
+    handleMinChange() {
+      this.$refs.form.validateField("maxCourseNum");
+    },
+    handleMaxChange() {
+      this.$refs.form.validateField("minCourseNum");
+    },
+    validateCom(rule, value, callback) {
+      const one = Number(value);
+      if (Number.isInteger(one)) {
+        if (one < MIN_NUMBER) {
+          return callback(new Error("输入值必须大于0"));
+        } else if (one > MAX_NUMBER) {
+          return callback(new Error("输入值必须小于999"));
+        }
+        return callback();
+      }
+      return callback(new Error("输入值必须为正整数"));
+    },
+    validateMin(rule, value, callback) {
+      const one = Number(value);
+      const max = Number(this.courseNumForm.maxCourseNum);
+      if (!max || one <= max) {
+        return callback();
+      }
+      return callback(new Error("输入值不得大于最大课时数"));
+    },
+    validateMax(rule, value, callback) {
+      const one = Number(value);
+      const min = Number(this.courseNumForm.minCourseNum);
+      if (!min || one >= min) {
+        return callback();
+      }
+      return callback(new Error("输入值不得小于最小课时数"));
+    },
+    changeStauts(val) {
+      console.log(val);
+    },
+    changeActivityType(val) {
+      this.$emit("resetPayInfo");
+    },
+    submitFrom() {
+      this.$refs.form.validate((isok) => {
+        if (isok) {
+          this.$refs["vipform"].validate((valid) => {
+            if (valid) {
+              // 验证通过
+              let coursesStartTime = null,
+                coursesEndTime = null,
+                startTime = null,
+                endTime = null;
+              if (
+                this.vipform.courseTime &&
+                this.vipform.courseTime.length > 0
+              ) {
+                coursesStartTime = this.vipform.courseTime[0];
+                coursesEndTime = this.vipform.courseTime[1];
+              }
+              if (
+                this.vipform.activeTime &&
+                this.vipform.activeTime.length > 0
+              ) {
+                startTime = this.vipform.activeTime[0];
+                endTime = this.vipform.activeTime[1];
+              }
+              let organId = this.vipform.organ.join(",");
+              let type = this.activeType;
+              if (!type) {
+                this.$message.error("请选择活动类型");
+                return;
+              }
+              if (!this.online && !this.unonline) {
+                this.$message.error("请选择活动适用范围");
+                return;
+              }
+              if (type == "DISCOUNT") {
+                if (!this.attribute1 || this.attribute1 < 0) {
+                  this.$message.error("折扣必须大于等于0");
+                  return;
+                }
+              } else if (type == "GIVE_CLASS") {
+                if (!this.attribute1) {
+                  this.$message.error("请输入多少节开始赠");
+                  return;
+                }
+                if (!this.attribute2) {
+                  this.$message.error("请输入赠送课时数");
+                  return;
+                }
+              }
+              let vipGroupCategoryIdList = this.vipform.stauts.join(",");
+              let onlineSalarySettlement;
+              let offlineSalarySettlement;
+              if (this.online) {
+                // 勾选线上
+                if (this.onlineSalary == "RATIO_DISCOUNT") {
+                  if (this.onlineprice < 0 || this.onlineprice > 100) {
+                    this.$message.error("折扣比必须大于0且小于100");
+                    return;
+                  }
+                } else if (this.onlineSalary == "TEACHER_DEFAULT") {
+                  this.onlineprice = 0;
+                }
+                onlineSalarySettlement = {
+                  salarySettlementType: this.onlineSalary,
+                  settlementValue: this.onlineprice,
+                };
+              } else {
+                onlineSalarySettlement = null;
+              }
+              if (this.unonline) {
+                // 勾选线下
+                if (this.unonlineSalary == "RATIO_DISCOUNT") {
+                  if (this.unonlineprice < 0 || this.unonlineprice > 100) {
+                    this.$message.error("折扣比必须大于0且小于100");
+                    return;
+                  }
+                } else if (this.unonlineSalary == "TEACHER_DEFAULT") {
+                  this.unonlineprice = 0;
+                }
+                offlineSalarySettlement = {
+                  salarySettlementType: this.unonlineSalary,
+                  settlementValue: this.unonlineprice,
+                };
+              } else {
+                offlineSalarySettlement = null;
+              }
+              let salaryReadonlyFlag = this.salaryReadonlyFlag * 1;
+              let paymentReadonlyFlag = this.paymentReadonlyFlag * 1;
+              // let giveClassPaySalaryFlag = this.giveClassPaySalaryFlag * 1;
+              let vipGroupSalarySettlement = {
+                onlineSalarySettlement,
+                offlineSalarySettlement,
+              };
+              if (type == "BASE_ACTIVITY") {
+                this.courseNumForm.studentMaxUsedTimes = -1;
+                this.courseNumForm.minCourseNum = -1;
+                this.courseNumForm.maxCourseNum = -1;
+              } else if (type == "GIVE_CLASS") {
+                this.courseNumForm.minCourseNum = -1;
+                this.courseNumForm.maxCourseNum = -1;
+              }
+              // 发请求创建活动
+              addVipActive(
+                cleanDeep({
+                  coursesStartTime,
+                  coursesEndTime,
+                  startTime,
+                  endTime,
+                  name: this.vipform.name,
+                  description: this.vipform.desc,
+                  applyToStudentType: this.vipform.applyToStudentType,
+                  allowOnlineToOffline: this.vipform.allowOnlineToOffline,
+                  organId,
+                  type,
+                  vipGroupCategoryIdList,
+                  vipGroupSalarySettlement,
+                  salaryReadonlyFlag,
+                  paymentReadonlyFlag,
+                  giveClassPaySalaryFlag: 1,
+                  attribute1: this.attribute1,
+                  attribute2: this.attribute2,
+                  minCourseNum: this.courseNumForm.minCourseNum,
+                  maxCourseNum: this.courseNumForm.maxCourseNum,
+                  studentMaxUsedTimes: this.courseNumForm.studentMaxUsedTimes
+                    ? this.courseNumForm.studentMaxUsedTimes
+                    : -1,
+                  offlineClassJoinGradientRewards:
+                    this.offlineClassJoinGradientRewards * 1,
+                  onlineClassJoinGradientRewards:
+                    this.onlineClassJoinGradientRewards * 1,
+                })
+              ).then((res) => {
+                if (res.code == 200) {
+                  this.$message.success("恭喜你,活动创建成功");
+                  // this.onReSet();
+                  this.$store.dispatch("delVisitedViews", this.$route);
+                  this.$router.push({
+                    path: "/vipActiveManager/vipActiveList",
+                  });
+                }
+              });
+            } else {
+              this.$nextTick(() => {
+                let isError = document.getElementsByClassName("is-error");
+                isError[0].scrollIntoView({
+                  block: "center",
+                  behavior: "smooth",
+                });
+              });
+              // this.$message.error("请填写必要参数");
+            }
+          });
+        }
+      });
+
+      // 线上线下课 勾选就传不勾选就不传
+      // addVipActive().then(res => { })
+    },
+    onOrganChange() {
+      // this.$forceUpdate();
+      this.$refs.vipform.validateField("organ");
+      this.$forceUpdate();
+    },
+    applyToStudentTypeChange() {
+      this.$refs.vipform.validateField("applyToStudentType");
+      this.$forceUpdate();
+    },
+    onCheckAllBranch() {
+      // 选择所有分部
+      let vipform = this.vipform;
+      vipform.organ = [];
+      this.selects.branchs.forEach((item) => {
+        vipform.organ.push(item.id);
+      });
+      this.$refs.vipform.validateField("organ");
+      this.$forceUpdate();
+    },
+
+    onReSet() {
+      this.vipform = {
+        name: "",
+        desc: "",
+        activeTime: [],
+        courseTime: [],
+      };
+      this.activeType = "";
+      this.online = true;
+      this.unonline = true;
+      this.salaryReadonlyFlag = false;
+      this.onlineSalary = "TEACHER_DEFAULT";
+      this.unonlineSalary = "TEACHER_DEFAULT";
+      this.onlineprice = "";
+      this.unonlineprice = "";
+      this.onlineClassJoinGradientRewards = false;
+      this.offlineClassJoinGradientRewards = false;
+      this.attribute1 = "";
+      this.attribute2 = "";
+      this.courseNumForm.maxCourseNum = "";
+      this.courseNumForm.minCourseNum = "";
+      // this.$refs.vipform.resetFields();
+    },
+  },
+  computed: {
+    balanceDis() {
+      if (this.baseForm.activityType) {
+        this.baseForm.isPayToBalance = 0;
+        return true;
+      } else {
+        return false;
+      }
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.baseMsg {
+  margin: 30px 0;
+}
+.m-core {
+  font-size: 14px;
+  width: 100%;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  // text-align: center;
+  .activeRange {
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-start;
+    .left {
+      height: 72px;
+      line-height: 72px;
+    }
+    .right {
+      .chioseWrap {
+        display: flex;
+        flex-direction: row;
+        justify-content: flex-start;
+        height: 72px;
+        line-height: 72px;
+        align-items: center;
+        .el-checkbox {
+          margin-right: 20px;
+        }
+        .el-select {
+          margin-right: 20px;
+        }
+      }
+    }
+  }
+  .activeType {
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-start;
+    .left {
+      margin-right: 20px;
+      p {
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+    .right {
+      > div {
+        display: flex;
+        flex-direction: row;
+        justify-content: flex-start;
+        height: 40px;
+        line-height: 40px;
+        margin-bottom: 20px;
+        .head {
+          width: 120px;
+          height: 40px;
+          line-height: 40px;
+          border: 1px solid #ccc;
+
+          text-align: center;
+          border-radius: 5px;
+          cursor: pointer;
+          margin-right: 10px;
+        }
+        > .head.active {
+          background-color: #13817a;
+          color: #fff;
+          border: none;
+        }
+        .title {
+          line-height: 40px;
+          height: 40px;
+        }
+      }
+    }
+  }
+}
+</style>
+<style lang="scss">
+.m-core {
+  // .vipform {
+  //   .el-select {
+  //     .el-input__inner {
+  //     }
+  //   }
+  // }
+  .activeType {
+    .right {
+      .el-input {
+        width: 150px !important;
+      }
+    }
+  }
+}
+</style>
+
+

+ 573 - 0
src/views/categroyManager/modals/payInfo.vue

@@ -0,0 +1,573 @@
+<template>
+  <div>
+    <el-alert
+      title="缴费信息"
+      type="info"
+      :closable="false"
+      class="baseMsg"
+    ></el-alert>
+    <el-form
+      :model="payForm"
+      label-width="120px"
+      label-position="right"
+      :inline="true"
+      ref="form"
+    >
+      <div v-if="!activeType">
+        <el-row>
+          <el-form-item
+            label="课程类型"
+            prop="courseType"
+            :rules="[
+              { required: true, message: '请选择课程类型', trigger: 'change' },
+            ]"
+          >
+            <el-select
+              style="width: 400px !important"
+              v-model.trim="payForm.courseType"
+              placeholder="请选择课程类型"
+              @change="changeCourseType"
+              clearable
+              :disabled="isDisabled"
+            >
+              <el-option label="VIP课" value="VIP"></el-option>
+              <el-option label="网管课" value="PRACTICE"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-row>
+        <el-row>
+          <el-form-item
+            :rules="[
+              { required: true, message: '请选择课程形式', trigger: 'change' },
+            ]"
+            label="课程形式"
+            prop="vipGroupCategoryIdList"
+            v-if="payForm.courseType == 'VIP'"
+          >
+            <el-select
+              v-model.trim="payForm.vipGroupCategoryIdList"
+              style="width: 400px !important"
+              @visible-change="$forceUpdate()"
+              clearable
+              :disabled="isDisabled"
+            >
+              <el-option
+                v-for="item in selects.vipGroupCategory"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-row>
+        <el-row>
+          <el-form-item
+            :rules="[
+              { required: true, message: '请选择上课模式', trigger: 'change' },
+            ]"
+            label="上课模式"
+            prop="teachMode"
+            :validate-on-rule-change="true"
+            v-if="payForm.courseType == 'VIP'"
+          >
+            <el-select
+              style="width: 400px !important"
+              v-model.trim="payForm.teachMode"
+              placeholder="请选择上课模式"
+              clearable
+              :disabled="isDisabled"
+            >
+              <el-option label="线上" value="0"></el-option>
+              <el-option label="线下" value="1"></el-option>
+              <el-option label="不限制" value="-1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-row>
+        <el-row>
+          <el-form-item
+            label="课程调整方式"
+            prop="allowOnlineToOffline"
+            v-if="payForm.courseType == 'VIP'"
+            :rules="[
+              { required: true, message: '课程调整方式', trigger: 'change' },
+            ]"
+          >
+            <el-select
+              style="width: 400px !important"
+              v-model.trim="payForm.allowOnlineToOffline"
+              placeholder="请选择课程调整方式"
+              clearable
+              :disabled="isDisabled"
+            >
+              <el-option
+                :label="item.label"
+                :value="item.value"
+                v-for="item in vipResetTypeList"
+                :key="item.value"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-row>
+        <el-row>
+          <el-form-item
+            label="单课时长"
+            prop="singleCourseTime"
+            :rules="[
+              { required: true, message: '请输入单课时长', trigger: 'blur' },
+            ]"
+          >
+            <el-input
+              v-model.number="payForm.singleCourseTime"
+              type="number"
+              style="width: 400px"
+              placeholder="单课时长"
+              :disabled="isDisabled"
+            >
+              <template slot="append">分钟</template>
+            </el-input>
+          </el-form-item>
+        </el-row>
+        <el-row>
+          <el-form-item
+            label="是否限制课时数"
+            prop="isLimitNum"
+            :rules="[
+              {
+                required: false,
+                message: '请选择是否限制课时数',
+                trigger: 'blur',
+              },
+            ]"
+          >
+            <el-select
+              style="width: 400px !important"
+              v-model.trim="payForm.isLimitNum"
+              placeholder="请选择是否限制课时"
+              clearable
+              :disabled="isDisabled"
+              @change="checkisLimitNum"
+            >
+              <el-option label="是" :value="true"></el-option>
+              <el-option label="否" :value="false"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-row>
+        <el-row v-if="payForm.isLimitNum">
+          <el-form-item
+            prop="minCourseNum"
+            label="最小课时数"
+            :rules="[
+              { required: true, message: '请输入最小课时数', trigger: 'blur' },
+              { validator: this.validateCom, trigger: 'blur' },
+              { validator: this.validateMin, trigger: 'blur' },
+            ]"
+          >
+            <el-input
+              @change="handleMinChange"
+              v-model.number="payForm.minCourseNum"
+              type="number"
+              style="width: 400px"
+              placeholder="最小课时数"
+              :disabled="isDisabled"
+            >
+              <template slot="append">课时</template>
+            </el-input>
+          </el-form-item>
+        </el-row>
+        <el-row v-if="payForm.isLimitNum">
+          <el-form-item
+            prop="maxCourseNum"
+            label="最大课时数"
+            :rules="[
+              { required: true, message: '请输入最大课时数', trigger: 'blur' },
+              { validator: this.validateCom, trigger: 'blur' },
+              { validator: this.validateMax, trigger: 'blur' },
+            ]"
+          >
+            <el-input
+              @change="handleMaxChange"
+              v-model.number="payForm.maxCourseNum"
+              type="number"
+              style="width: 400px"
+              placeholder="最大课时数"
+              :disabled="isDisabled"
+            >
+              <template slot="append">课时</template>
+            </el-input>
+          </el-form-item>
+        </el-row>
+      </div>
+      <div v-else>
+        <el-row>
+          <el-form-item
+            label="会员名称"
+            prop="memberRankId"
+            :rules="[
+              { required: true, message: '请选择会员名称', trigger: 'change' },
+            ]"
+          >
+            <el-select
+              style="width: 400px !important"
+              v-model.trim="payForm.memberRankId"
+              placeholder="请选择会员名称"
+              clearable
+              :disabled="isDisabled"
+            >
+              <el-option
+                v-for="(item, index) in remberList"
+                :key="index"
+                :label="item.name"
+                :value="item.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-row>
+        <el-row>
+          <el-form-item
+            label="会员周期"
+            prop="periodEnum"
+            :rules="[
+              { required: true, message: '请选择会员周期', trigger: 'change' },
+            ]"
+          >
+            <el-select
+              style="width: 400px !important"
+              v-model.trim="payForm.periodEnum"
+              placeholder="请选择会员周期"
+              clearable
+              :disabled="isDisabled"
+            >
+              <el-option label="按月" value="MONTH"></el-option>
+              <el-option label="按季度" value="QUARTERLY"></el-option>
+              <el-option label="按半年" value="YEAR_HALF"></el-option>
+              <el-option label="按年" value="YEAR"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-row>
+      </div>
+      <el-row>
+        <el-form-item
+          prop="discount"
+          label="折扣值"
+          :rules="[
+            { required: true, message: '请输入折扣值', trigger: 'blur' },
+            {
+              pattern: /^100$|^(\d|[1-9]\d)(\.\d{1,8})*$/,
+              message: '请输入正确的折扣',
+            },
+          ]"
+        >
+          <el-input
+            v-model.number="payForm.discount"
+            type="number"
+            style="width: 400px"
+            placeholder="折扣值"
+            :disabled="isDisabled"
+          >
+            <template slot="append">%</template>
+          </el-input>
+        </el-form-item>
+      </el-row>
+      <el-row>
+        <el-form-item prop="fullMinusCourseTimes" label="满赠达标数量">
+          <el-input
+            v-model.number="payForm.fullMinusCourseTimes"
+            type="number"
+            style="width: 400px"
+            @input="changeFullMinus"
+            placeholder="满赠达标数量"
+            :disabled="isDisabled"
+          >
+          </el-input>
+        </el-form-item>
+      </el-row>
+      <el-row>
+        <el-col>
+          <el-form-item
+            label="赠送类型"
+            prop="giveCourseType"
+            v-if="payForm.fullMinusCourseTimes"
+            :rules="[
+              { required: true, message: '请选择赠送类型', trigger: 'change' },
+            ]"
+          >
+            <el-select
+              v-model.trim="payForm.giveCourseType"
+              placeholder="请选择赠送类型"
+              style="width: 400px !important"
+              @change="changeGiveCourseType"
+              clearable
+              :disabled="isDisabled"
+            >
+              <el-option label="VIP课" value="VIP"></el-option>
+              <el-option label="网管课" value="PRACTICE"></el-option>
+              <el-option label="会员" value="MEMBER"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-form-item
+          label="赠课模式"
+          prop="giveTeachMode"
+          v-if="payForm.giveCourseType == 'VIP' && payForm.fullMinusCourseTimes"
+          :rules="[
+            { required: true, message: '请选择赠课模式', trigger: 'change' },
+          ]"
+        >
+          <el-select
+            style="width: 400px !important"
+            v-model.trim="payForm.giveTeachMode"
+            placeholder="请选择赠课模式"
+            clearable
+            :disabled="isDisabled"
+          >
+            <el-option label="线上" value="0"></el-option>
+            <el-option label="线下" value="1"></el-option>
+            <el-option label="不限制" value="-1"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-col>
+          <el-form-item
+            label="赠课调整方式"
+            prop="giveAllowOnlineToOffline"
+            v-if="
+              payForm.giveCourseType == 'VIP' && payForm.fullMinusCourseTimes
+            "
+            :rules="[
+              {
+                required: true,
+                message: '请选择赠课调整方式',
+                trigger: 'change',
+              },
+            ]"
+          >
+            <el-select
+              style="width: 400px !important"
+              v-model.trim="payForm.giveAllowOnlineToOffline"
+              placeholder="请选择赠课调整方式"
+              clearable
+              :disabled="isDisabled"
+            >
+              <el-option
+                :label="item.label"
+                :value="item.value"
+                v-for="item in vipResetTypeList"
+                :key="item.label"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col>
+          <el-form-item
+            label="赠课形式"
+            prop="giveCategoryId"
+            v-if="
+              payForm.giveCourseType == 'VIP' && payForm.fullMinusCourseTimes
+            "
+            :rules="[
+              { required: true, message: '请选择赠课形式', trigger: 'change' },
+            ]"
+          >
+            <el-select
+              style="width: 400px !important"
+              v-model.trim="payForm.giveCategoryId"
+              @visible-change="$forceUpdate()"
+              clearable
+              @change="chageSalary"
+              :disabled="isDisabled"
+            >
+              <el-option
+                v-for="item in selects.vipGroupCategory"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-form-item
+        label="赠课时长"
+        prop="giveSingleCourseTime"
+        v-if="
+          payForm.giveCourseType != 'MEMBER' && payForm.fullMinusCourseTimes
+        "
+        :rules="[
+          { required: true, message: '请选择赠课时长', trigger: 'blur' },
+        ]"
+      >
+        <el-input
+          v-model.number="payForm.giveSingleCourseTime"
+          type="number"
+          style="width: 400px"
+          placeholder="赠课时长"
+          :disabled="isDisabled"
+        >
+          <template slot="append">分钟</template>
+        </el-input>
+      </el-form-item>
+      <el-row
+        v-if="
+          payForm.giveCourseType != 'MEMBER' && payForm.fullMinusCourseTimes
+        "
+      >
+        <el-form-item
+          prop="giveCourseNum"
+          label="赠送课时数"
+          :rules="[
+            { required: true, message: '请输入赠送课时数', trigger: 'blur' },
+          ]"
+        >
+          <el-input
+            v-model.number="payForm.giveCourseNum"
+            @input="changeGiveCourseNum"
+            type="number"
+            style="width: 400px"
+            placeholder="赠送课时数"
+            :disabled="isDisabled"
+          >
+            <template slot="append">课时</template>
+          </el-input>
+        </el-form-item>
+      </el-row>
+      <el-row
+        v-if="
+          payForm.giveCourseType == 'MEMBER' && payForm.fullMinusCourseTimes
+        "
+      >
+        <el-form-item
+          label="赠送会员名称"
+          prop="giveMemberRankId"
+          :rules="[
+            {
+              required: true,
+              message: '请选择赠送会员名称',
+              trigger: 'change',
+            },
+          ]"
+        >
+          <el-select
+            style="width: 400px !important"
+            v-model.trim="payForm.giveMemberRankId"
+            placeholder="请选择会员名称"
+            clearable
+            :disabled="isDisabled"
+          >
+            <el-option
+              v-for="(item, index) in remberList"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+      </el-row>
+      <el-row>
+        <el-form-item
+          prop="giveMemberTime"
+          label="赠送会员时长"
+          v-if="
+            payForm.giveCourseType == 'MEMBER' && payForm.fullMinusCourseTimes
+          "
+          :rules="[
+            { required: true, message: '请输入赠送会员时长', trigger: 'blur' },
+          ]"
+        >
+          <el-input
+            v-model.number="payForm.giveMemberTime"
+            type="number"
+            style="width: 400px"
+            placeholder="请输入赠送会员时长"
+            :disabled="isDisabled"
+          >
+            <template slot="append">天</template>
+          </el-input>
+        </el-form-item>
+      </el-row>
+    </el-form>
+  </div>
+</template>
+<script>
+import { vipResetTypeList } from "@/utils/searchArray";
+const MIN_NUMBER = 1;
+const MAX_NUMBER = 999;
+export default {
+  props: ["payForm", "activeType", "remberList", "isDisabled"],
+  data() {
+    return {
+      coureTimerList: [],
+      vipResetTypeList,
+    };
+  },
+  async mounted() {
+    await this.$store.dispatch("setVipGroupCategory");
+  },
+  methods: {
+    handleMinChange() {
+      this.$refs.form.validateField("maxCourseNum");
+    },
+    handleMaxChange() {
+      this.$refs.form.validateField("minCourseNum");
+    },
+    validateCom(rule, value, callback) {
+      const one = Number(value);
+      if (Number.isInteger(one)) {
+        if (one < MIN_NUMBER) {
+          return callback(new Error("输入值必须大于0"));
+        } else if (one > MAX_NUMBER) {
+          return callback(new Error("输入值必须小于999"));
+        }
+        return callback();
+      }
+      return callback(new Error("输入值必须为正整数"));
+    },
+    validateMin(rule, value, callback) {
+      const one = Number(value);
+      const max = Number(this.payForm.maxCourseNum);
+      if (!max || one <= max) {
+        return callback();
+      }
+      return callback(new Error("输入值不得大于最大课时数"));
+    },
+    validateMax(rule, value, callback) {
+      const one = Number(value);
+      const min = Number(this.payForm.minCourseNum);
+      if (!min || one >= min) {
+        return callback();
+      }
+      return callback(new Error("输入值不得小于最小课时数"));
+    },
+    changeCourseType(val) {
+      this.$emit("chageSalary");
+      this.$emit("changeCourseType", val);
+    },
+    changeGiveCourseType(val) {
+      this.$emit("chageSalary");
+      this.$emit("changeGiveCourseType", val);
+    },
+    chageSalary(val) {
+      this.$emit("chageSalary");
+    },
+    changeFullMinus(val) {
+      if (!val || val <= 0) {
+        this.$emit("chageSalary");
+        this.$emit("changeGiveCourseType");
+      }
+    },
+    changeGiveCourseNum(val) {
+      if (!val || val <= 0) {
+        this.$emit("chageSalary");
+      }
+    },
+    checkisLimitNum(val) {
+      if (!val) {
+        this.$emit("resetIsLimitNum");
+      }
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.baseMsg {
+  margin: 30px 0;
+}
+</style>

+ 327 - 0
src/views/categroyManager/modals/salaryInfo.vue

@@ -0,0 +1,327 @@
+<template>
+  <div>
+    <el-alert
+      title="课酬信息"
+      type="info"
+      :closable="false"
+      class="baseMsg"
+    ></el-alert>
+    <div
+      v-if="
+        (activeType && payForm.giveCourseType == 'MEMBER') ||
+        (activeType && !payForm.giveCourseType)
+      "
+    >
+      <empty desc="该活动方案未设置课程,无需设置课酬信息" />
+    </div>
+    <el-form
+      v-else
+      :model="salaryForm"
+      label-width="150px"
+      label-position="right"
+      :inline="true"
+      ref="salaryForm"
+    >
+      <!-- <el-row v-if="payForm.courseType == 'VIP'">
+        <el-form-item
+          v-if="courseTeachModeOnline"
+          label="付费VIP线上课课酬"
+          prop="vipOnlineSalarySettlement.salarySettlementType"
+          :rules="[{required: true, message: '请选择付费VIP线上课课酬'}]"
+        >
+          <el-select
+            style="width: 240px !important"
+            v-model.trim="
+              salaryForm.vipOnlineSalarySettlement.salarySettlementType
+            "
+            placeholder="请选择付费VIP线上课课酬"
+            clearable
+            :disabled="isDisabled"
+
+          >
+            <el-option label="自定义课酬" value="FIXED_SALARY"></el-option>
+            <el-option label="标准课酬" value="TEACHER_DEFAULT"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item
+          v-if="
+            salaryForm.vipOnlineSalarySettlement.salarySettlementType ==
+            'FIXED_SALARY'&&courseTeachModeOnline
+          "
+          label="自定义课时课酬"
+          prop="vipOnlineSalarySettlement.settlementValue"
+           :rules="[{required: true, message: '请输入自定义课时课酬'}]"
+        >
+          <el-input
+            v-model.number="
+              salaryForm.vipOnlineSalarySettlement.settlementValue
+            "
+            type="number"
+            style="width: 240px"
+            placeholder="自定义课时课酬"
+            :disabled="isDisabled"
+          >
+            <template slot="append">课时/元</template>
+          </el-input>
+        </el-form-item>
+      </el-row> -->
+      <!--    v-if="courseTeachModeOffline" -->
+      <el-row v-if="payForm.courseType == 'VIP'">
+        <el-form-item
+          label="付费VIP课课酬"
+          prop="offlineSalarySettlement.salarySettlementType"
+          :rules="[{ required: true, message: '请选择付费VIP课课酬' }]"
+        >
+          <el-select
+            style="width: 240px !important"
+            v-model.trim="
+              salaryForm.offlineSalarySettlement.salarySettlementType
+            "
+            placeholder="请选择付费VIP课课酬"
+            clearable
+            :disabled="isDisabled"
+          >
+            <el-option label="标准课酬" value="TEACHER_DEFAULT"></el-option>
+            <el-option label="自定义课酬" value="FIXED_SALARY"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item
+          label="自定义课时课酬"
+          :rules="[{ required: true, message: '请输入自定义课时课酬' }]"
+          prop="offlineSalarySettlement.settlementValue"
+          v-if="
+            salaryForm.offlineSalarySettlement.salarySettlementType ==
+              'FIXED_SALARY' && courseTeachModeOffline
+          "
+        >
+          <el-input
+            v-model.number="salaryForm.offlineSalarySettlement.settlementValue"
+            type="number"
+            style="width: 240px"
+            placeholder="自定义课时课酬"
+            :disabled="isDisabled"
+          >
+            <template slot="append">课时/元</template>
+          </el-input>
+        </el-form-item>
+      </el-row>
+      <el-row>
+        <el-form-item
+          label="付费网管课课酬"
+          prop="practiceSalarySettlement.salarySettlementType"
+          v-if="payForm.courseType == 'PRACTICE'"
+          :rules="[{ required: true, message: '请选择付费网管课课酬' }]"
+        >
+          <el-select
+            style="width: 240px !important"
+            v-model.trim="
+              salaryForm.practiceSalarySettlement.salarySettlementType
+            "
+            placeholder="请选择付费网管课课酬"
+            clearable
+            :disabled="isDisabled"
+          >
+            <el-option label="标准课酬" value="TEACHER_DEFAULT"></el-option>
+            <el-option label="自定义课酬" value="FIXED_SALARY"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item
+          :rules="[{ required: true, message: '请输入自定义课时课酬' }]"
+          label="自定义课时课酬"
+          prop="practiceSalarySettlement.settlementValue"
+          v-if="
+            salaryForm.practiceSalarySettlement.salarySettlementType ==
+              'FIXED_SALARY' && payForm.courseType == 'PRACTICE'
+          "
+        >
+          <el-input
+            v-model.number="salaryForm.practiceSalarySettlement.settlementValue"
+            type="number"
+            style="width: 240px"
+            placeholder="自定义课时课酬"
+            :disabled="isDisabled"
+          >
+            <template slot="append">课时/元</template>
+          </el-input>
+        </el-form-item>
+      </el-row>
+      <!-- <el-row>
+        <el-form-item
+       v-if="giveCourseTeachModeOnline"
+          label="赠送VIP线上课课酬"
+          prop="giveVipOnlineSalarySettlement.salarySettlementType"
+             :rules="[{required: true, message: '请选择赠送VIP线上课课酬'}]"
+        >
+          <el-select
+            style="width: 240px !important"
+            v-model.trim="
+              salaryForm.giveVipOnlineSalarySettlement.salarySettlementType
+            "
+            placeholder="请选择赠送VIP线上课课酬"
+            clearable
+            :disabled="isDisabled"
+          >
+            <el-option label="自定义课酬" value="FIXED_SALARY"></el-option>
+            <el-option label="标准课酬" value="TEACHER_DEFAULT"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item
+         :rules="[{required: true, message: '请输入自定义课时课酬'}]"
+          label="自定义课时课酬"
+          prop="giveVipOnlineSalarySettlement.settlementValue"
+          v-if="
+            salaryForm.giveVipOnlineSalarySettlement.salarySettlementType ==
+            'FIXED_SALARY'&&giveCourseTeachModeOnline
+          "
+        >
+          <el-input
+            v-model.number="
+              salaryForm.giveVipOnlineSalarySettlement.settlementValue
+            "
+            type="number"
+            style="width: 240px"
+            placeholder="自定义课时课酬"
+            :disabled="isDisabled"
+          >
+            <template slot="append">课时/元</template>
+          </el-input>
+        </el-form-item>
+      </el-row> -->
+      <el-row v-if="giveCourseTeachModeOffline">
+        <el-form-item
+          label="赠送VIP课课酬"
+          prop="giveVipOfflineSalarySettlement.salarySettlementType"
+          :rules="[{ required: true, message: '请选择赠送VIP课课酬' }]"
+        >
+          <el-select
+            style="width: 240px !important"
+            v-model.trim="
+              salaryForm.giveVipOfflineSalarySettlement.salarySettlementType
+            "
+            placeholder="请选择赠送VIP课课酬"
+            clearable
+            :disabled="isDisabled"
+          >
+            <el-option label="标准课酬" value="TEACHER_DEFAULT"></el-option>
+            <el-option label="自定义课酬" value="FIXED_SALARY"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item
+          label="自定义课时课酬"
+          :rules="[{ required: true, message: '请输入自定义课时课酬' }]"
+          prop="giveVipOfflineSalarySettlement.settlementValue"
+          v-if="
+            salaryForm.giveVipOfflineSalarySettlement.salarySettlementType ==
+              'FIXED_SALARY' && giveCourseTeachModeOffline
+          "
+        >
+          <el-input
+            v-model.number="
+              salaryForm.giveVipOfflineSalarySettlement.settlementValue
+            "
+            type="number"
+            style="width: 240px"
+            placeholder="自定义课时课酬"
+            :disabled="isDisabled"
+          >
+            <template slot="append">课时/元</template>
+          </el-input>
+        </el-form-item>
+      </el-row>
+      <el-row
+        v-if="payForm.giveCourseType == 'PRACTICE' && payForm.giveCourseNum > 0"
+      >
+        <el-form-item
+          label="赠送网管课课酬"
+          prop="givePracticeSalarySettlement.salarySettlementType"
+          :rules="[{ required: true, message: '请选择赠送网管课课酬' }]"
+        >
+          <el-select
+            style="width: 240px !important"
+            v-model.trim="
+              salaryForm.givePracticeSalarySettlement.salarySettlementType
+            "
+            placeholder="请选择赠送网管课课酬"
+            clearable
+            :disabled="isDisabled"
+          >
+            <el-option label="标准课酬" value="TEACHER_DEFAULT"></el-option>
+            <el-option label="自定义课酬" value="FIXED_SALARY"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item
+          label="自定义课时课酬"
+          prop="givePracticeSalarySettlement.settlementValue"
+          v-if="
+            salaryForm.givePracticeSalarySettlement.salarySettlementType ==
+              'FIXED_SALARY' &&
+            payForm.giveCourseType == 'PRACTICE' &&
+            payForm.giveCourseNum > 0
+          "
+        >
+          <el-input
+            v-model.number="
+              salaryForm.givePracticeSalarySettlement.settlementValue
+            "
+            type="number"
+            style="width: 240px"
+            placeholder="自定义课时课酬"
+            :disabled="isDisabled"
+          >
+            <template slot="append">课时/元</template>
+          </el-input>
+        </el-form-item>
+      </el-row>
+    </el-form>
+  </div>
+</template>
+<script>
+export default {
+  props: ["salaryForm", "payForm", "activeType", "isDisabled"],
+  data() {
+    return {};
+  },
+  mounted() {},
+  methods: {},
+  computed: {
+    courseTeachModeOnline() {
+      return (
+        (this.payForm?.teachMode == -1 || this.payForm?.teachMode == 0) &&
+        this.payForm?.courseType == "VIP"
+      );
+    },
+    courseTeachModeOffline() {
+      return (
+        (this.payForm?.teachMode == -1 ||
+          this.payForm?.teachMode == 1 ||
+          this.payForm?.teachMode == 0) &&
+        this.payForm?.courseType == "VIP"
+      );
+    },
+    giveCourseTeachModeOnline() {
+      return (
+        (this.payForm?.giveTeachMode == -1 ||
+          this.payForm?.giveTeachMode == 0) &&
+        this.payForm?.fullMinusCourseTimes > 0 &&
+        this.payForm?.giveCourseType == "VIP" &&
+        this.payForm?.giveCourseNum > 0
+      );
+    },
+    giveCourseTeachModeOffline() {
+      return (
+        (this.payForm?.giveTeachMode == -1 ||
+          this.payForm?.giveTeachMode == 1 ||
+          this.payForm?.giveTeachMode == 0) &&
+        this.payForm?.fullMinusCourseTimes > 0 &&
+        this.payForm?.giveCourseType == "VIP" &&
+        this.payForm?.giveCourseNum > 0
+      );
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.baseMsg {
+  margin: 30px 0;
+}
+</style>

File diff suppressed because it is too large
+ 128 - 727
src/views/categroyManager/vipActiveList.vue


+ 464 - 805
src/views/categroyManager/vipNewActive.vue

@@ -2,860 +2,519 @@
   <div class="m-container">
     <!-- <h2><div class="squrt"></div>VIP活动方案新增 </h2> -->
     <h2>
-      <el-page-header
-        @back="onCancel"
-        :content="
-          'VIP/乐理课活动方案' + (pageType == 'create' ? '新增' : '修改')
-        "
-      ></el-page-header>
+      <el-page-header @back="onCancel" :content="title"></el-page-header>
     </h2>
-    <div class="m-core">
-      <el-form
-        :label-position="labelPosition"
-        :model="vipform"
-        ref="vipform"
-        label-width="120px"
-        :rules="vipformRules"
-        class="vipform"
-      >
-        <el-form-item label="活动名称" prop="name">
-          <el-input style="width: 400px" v-model.trim="vipform.name"></el-input>
-        </el-form-item>
-        <el-form-item label="适用分部" prop="organ">
-          <select-all
-            v-model.trim="vipform.organ"
-            style="width: 400px"
-            multiple
-            filterable
-            @visible-change="$forceUpdate()"
-            @change="onOrganChange"
-            clearable
-          >
-            <el-option
-              v-for="(item, index) in selects.branchs"
-              :key="index"
-              :label="item.name"
-              :value="item.id"
-            ></el-option>
-          </select-all>
-          <!-- <el-button @click="onCheckAllBranch">适用所有分部</el-button> -->
-        </el-form-item>
-        <el-form-item label="课程形式" prop="stauts">
-          <select-all
-            v-model.trim="vipform.stauts"
-            style="width: 400px"
-            @visible-change="$forceUpdate()"
-            clearable
-            multiple
-          >
-            <el-option
-              v-for="item in selects.vipGroupCategory"
-              :key="item.id"
-              :value="item.id"
-              :label="item.name"
-            ></el-option>
-          </select-all>
-        </el-form-item>
-        <el-form-item label="课程调整方式" prop="allowOnlineToOffline">
-          <el-select
-            v-model.trim="vipform.allowOnlineToOffline"
-            placeholder="请选择课程调整方式"
-            clearable
-          >
-               <el-option
-              :label="item.label"
-              :value="item.value"
-              v-for="item in vipResetTypeList"
-              :key="item.value"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="使用学员" prop="applyToStudentType">
-          <el-select
-            v-model.trim="vipform.applyToStudentType"
-            placeholder="请选择使用学员"
-            clearable
-          >
-            <el-option label="新学员" :value="1"></el-option>
-            <el-option label="老学员" :value="0"></el-option>
-            <el-option label="所有学员" :value="-1"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="活动描述" prop="desc">
-          <el-input
-            type="textarea"
-            v-model.trim="vipform.desc"
-            style="width: 400px"
-            :rows="5"
-            placeholder="请输入活动说明"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="活动时间" prop="activeTime">
-          <el-date-picker
-            v-model.trim="vipform.activeTime"
-            type="datetimerange"
-            :default-time="['00:00:00', '23:59:59']"
-            range-separator="至"
-            value-format="yyyy-MM-dd HH:mm:ss"
-            start-placeholder="开始日期"
-            :picker-options="{
-              firstDayOfWeek: 1,
-            }"
-            end-placeholder="结束日期"
-          ></el-date-picker>
-        </el-form-item>
-        <el-form-item label="课程时间" prop="courseTime">
-          <el-date-picker
-            v-model.trim="vipform.courseTime"
-            type="datetimerange"
-            :default-time="['00:00:00', '23:59:59']"
-            range-separator="至"
-            value-format="yyyy-MM-dd HH:mm:ss"
-            start-placeholder="开始日期"
-            :picker-options="{
-              firstDayOfWeek: 1,
-            }"
-            end-placeholder="结束日期"
-          ></el-date-picker>
-        </el-form-item>
-      </el-form>
-      <el-alert
-        title="活动适用范围&结算标准:"
-        type="info"
-        :closable="false"
-        class="alert"
-      >
-      </el-alert>
-      <div class="activeRange" style="padding-left: 120px">
-        <!-- <div class="left">
-          <p>活动适用范围&结算标准:</p>
-        </div> -->
-        <div class="right">
-          <div class="chioseWrap">
-            <el-checkbox label="线上课" v-model.trim="online"></el-checkbox>
-            <el-select
-              v-model.trim="onlineSalary"
-              disabled
-              clearable
-              filterable
-            >
-              <el-option
-                label="老师默认课酬"
-                value="TEACHER_DEFAULT"
-              ></el-option>
-              <el-option
-                label="实际课程单价比例折扣"
-                value="RATIO_DISCOUNT"
-              ></el-option>
-              <el-option label="固定课酬" value="FIXED_SALARY"></el-option>
-            </el-select>
-            <el-input
-              placeholder="请输入"
-              v-if="onlineSalary == 'RATIO_DISCOUNT'"
-              style="width: 200px"
-              type="number"
-              @mousewheel.native.prevent
-              v-model.trim="onlineprice"
-            >
-              <template slot="append">%</template>
-            </el-input>
-            <el-input
-              placeholder="请输入"
-              v-if="onlineSalary == 'FIXED_SALARY'"
-              style="width: 200px"
-              type="number"
-              @mousewheel.native.prevent
-              v-model.trim="onlineprice"
-            >
-              <template slot="append">元</template>
-            </el-input>
-            <div
-              style="width: 200px"
-              v-if="onlineSalary == 'TEACHER_DEFAULT'"
-            ></div>
-            <!-- <el-checkbox label="是否参加梯度"
-                         style="margin-left:20px;"
-                         v-model.trim="onlineClassJoinGradientRewards"></el-checkbox> -->
-          </div>
-          <div class="chioseWrap">
-            <el-checkbox label="线下课" v-model.trim="unonline"></el-checkbox>
-            <el-select
-              v-model.trim="unonlineSalary"
-              clearable
-              disabled
-              filterable
-            >
-              <el-option
-                label="老师默认课酬"
-                value="TEACHER_DEFAULT"
-              ></el-option>
-              <el-option
-                label="实际课程单价比例折扣"
-                value="RATIO_DISCOUNT"
-              ></el-option>
-              <el-option label="固定课酬" value="FIXED_SALARY"></el-option>
-            </el-select>
-            <el-input
-              placeholder="请输入"
-              v-if="unonlineSalary == 'RATIO_DISCOUNT'"
-              style="width: 200px"
-              type="number"
-              @mousewheel.native.prevent
-              v-model.trim="unonlineprice"
-            >
-              <template slot="append">%</template>
-            </el-input>
-            <el-input
-              placeholder="请输入"
-              style="width: 200px"
-              v-if="unonlineSalary == 'FIXED_SALARY'"
-              type="number"
-              @mousewheel.native.prevent
-              v-model.trim="unonlineprice"
-            >
-              <template slot="append">元</template>
-            </el-input>
-            <div
-              style="width: 200px"
-              v-if="unonlineSalary == 'TEACHER_DEFAULT'"
-            ></div>
-            <!-- <el-checkbox label="是否参加梯度"
-                         style="margin-left:20px;"
-                         v-model.trim="offlineClassJoinGradientRewards"></el-checkbox> -->
-          </div>
-          <!-- <div class="chioseWrap">
-            <el-checkbox v-model.trim="paymentReadonlyFlag"
-                         label="可自定义单价"></el-checkbox>
-            <el-checkbox v-model.trim="salaryReadonlyFlag"
-                         label="可自定义课酬"></el-checkbox>
-          </div> -->
-        </div>
-      </div>
-      <el-alert
-        title="活动类型:"
-        type="info"
-        style="margin-bottom: 15px"
-        :closable="false"
-        class="alert"
-      >
-      </el-alert>
-      <div class="activeType">
-        <!-- <div class="left">
-          <p>活动类型</p>
-        </div> -->
-        <div class="right">
-          <div>
-            <div
-              class="head"
-              :class="activeType == 'BASE_ACTIVITY' ? 'active' : ''"
-              @click="
-                () => {
-                  this.$refs['form'].resetFields();
-                  activeType = 'BASE_ACTIVITY';
-                  courseNumForm = {
-                    minCourseNum: '',
-                    maxCourseNum: '',
-                    studentMaxUsedTimes: '',
-                  };
-                  attribute1 = '';
-                  attribute2 = '';
-                }
-              "
-            >
-              基础活动
-            </div>
-            <p class="title" v-if="activeType == 'BASE_ACTIVITY'">课程原价</p>
-          </div>
-          <div>
-            <div
-              class="head"
-              :class="activeType == 'DISCOUNT' ? 'active' : ''"
-              @click="activeType = 'DISCOUNT'"
-            >
-              折扣
-            </div>
-            <el-input
-              v-if="activeType == 'DISCOUNT'"
-              v-model.trim="attribute1"
-              style="width: 200px !important"
-              placeholder="请输入折扣数值"
-            >
-              <template slot="append">%</template>
-            </el-input>
-            <el-form
-              :model="courseNumForm"
-              :inline="true"
-              ref="form"
-              v-show="activeType == 'DISCOUNT'"
-              :rules="activeType == 'DISCOUNT' ? courseNumrules : {}"
-            >
-              <el-form-item prop="minCourseNum">
-                <el-input
-                  @change="handleMinChange"
-                  v-model.number="courseNumForm.minCourseNum"
-                  type="number"
-                  style="margin-left: 10px; width: 120px !important"
-                  placeholder="最小课时数"
-                >
-                </el-input>
-              </el-form-item>
-              <el-form-item prop="maxCourseNum">
-                <el-input
-                  @change="handleMaxChange"
-                  v-model.number="courseNumForm.maxCourseNum"
-                  type="number"
-                  style="margin-left: 10px; width: 120px !important"
-                  placeholder="最大课时数"
-                >
-                </el-input>
-              </el-form-item>
-              <el-form-item>
-                <el-input
-                  v-model.number="courseNumForm.studentMaxUsedTimes"
-                  type="number"
-                  style="margin-left: 10px; width: 120px !important"
-                  placeholder="学员购买次数"
-                >
-                </el-input>
-              </el-form-item>
-            </el-form>
-          </div>
-          <div>
-            <div
-              class="head"
-              :class="activeType == 'GIVE_CLASS' ? 'active' : ''"
-              @click="
-                () => {
-                  this.$refs['form'].resetFields();
-                  activeType = 'GIVE_CLASS';
-                  courseNumForm.minCourseNum = '';
-                  courseNumForm.maxCourseNum = '';
-                  attribute1 = '';
-                  attribute2 = '';
-                }
-              "
-            >
-              赠送课时
-            </div>
-            <el-input
-              placeholder="多少节开始赠"
-              v-if="activeType == 'GIVE_CLASS'"
-              v-model.trim="attribute1"
-              type="number"
-              @mousewheel.native.prevent
-              style="margin-right: 10px; width: 200px !important"
-            >
-              <template slot="append">节</template>
-            </el-input>
-            <span v-if="activeType == 'GIVE_CLASS'">赠</span>
-            <el-input
-              v-if="activeType == 'GIVE_CLASS'"
-              placeholder="请输入赠送课时数"
-              type="number"
-              @mousewheel.native.prevent
-              v-model.trim="attribute2"
-              style="margin: 0 10px; width: 200px !important"
-            >
-              <template slot="append">节</template>
-            </el-input>
-            <el-input
-              v-show="activeType == 'GIVE_CLASS'"
-              v-model.number="courseNumForm.studentMaxUsedTimes"
-              type="number"
-              style="margin-left: 10px; width: 120px !important"
-              placeholder="学员购买次数"
-            >
-            </el-input>
-            <!-- <el-checkbox
-              v-if="activeType=='GIVE_CLASS'"
-              v-model.trim="giveClassPaySalaryFlag"
-              label="赠送课时结算课酬"
-            ></el-checkbox> -->
-          </div>
-        </div>
-      </div>
-    </div>
-    <div
-      class="btnWrap"
-      style="justify-content: flex-start; padding-left: 120px"
+
+    <el-steps
+      :active="active"
+      finish-status="success"
+      align-center
+      class="steps"
     >
-      <el-button type="primary" @click="submitFrom">确定</el-button>
-      <el-button type="info" @click="onReSet">重置</el-button>
-      <!-- <div class="okBtn"
-           @click="submitFrom">确定</div> -->
-           <!--  -->
+      <el-step title="基础信息"></el-step>
+      <el-step title="缴费信息"></el-step>
+      <el-step title="课酬信息"></el-step>
+    </el-steps>
+    <div class="wrap">
+      <baseInfo
+        :baseForm="baseForm"
+        v-if="active == 1"
+        ref="baseForm"
+        @resetPayInfo="resetPayInfo"
+        :isDisabled="isDisabled"
+        :status="statuss"
+      />
+      <payInfo
+        :payForm="payForm"
+        ref="payInfo"
+        :activeType="baseForm.activityType"
+        @changeCourseType="changeCourseType"
+        @changeGiveCourseType="changeGiveCourseType"
+        @chageSalary="chageSalary"
+        @resetIsLimitNum="resetIsLimitNum"
+        v-if="active == 2"
+        :remberList="remberList"
+        :isDisabled="isDisabled || statuss != 'DRAFT'"
+      />
+      <salaryInfo
+        ref="salaryInfo"
+        :salaryForm="salaryForm"
+        v-if="active == 3"
+        :activeType="baseForm.activityType"
+        :payForm="payForm"
+        :isDisabled="isDisabled || statuss != 'DRAFT'"
+        :status="statuss"
+      />
     </div>
+    <el-button
+      style="margin-top: 12px"
+      type="primary"
+      @click="prve"
+      v-if="active > 1"
+      >上一步</el-button
+    >
+    <el-button
+      style="margin-top: 12px"
+      type="primary"
+      @click="next"
+      v-if="active < 3"
+      >下一步</el-button
+    >
+
+    <el-button
+      style="margin-top: 12px"
+      type="danger"
+      @click="save"
+      v-if="!isDisabled && statuss == 'DRAFT'"
+      >保存草稿</el-button
+    >
+    <el-button
+      style="margin-top: 12px"
+      type="danger"
+      @click="submit"
+      v-if="active == 3 && !isDisabled && statuss == 'DRAFT'"
+      >创建活动</el-button
+    >
+    <el-button
+      style="margin-top: 12px"
+      type="danger"
+      @click="submit"
+      v-if="active == 3 && !isDisabled && statuss != 'DRAFT'"
+      >提交修改</el-button
+    >
   </div>
 </template>
+
 <script>
-import { vipGroupCategory, addVipActive } from "@/api/vipSeting";
-import { getEmployeeOrgan } from "@/api/buildTeam";
-import { vipResetTypeList } from "@/utils/searchArray";
+import baseInfo from "./modals/baseInfo.vue";
+import payInfo from "./modals/payInfo.vue";
+import salaryInfo from "./modals/salaryInfo.vue";
+import { getAllmemberRank } from "@/views/categroyManager/productSystem/api";
+import merge from "webpack-merge";
+import {
+  vipGroupCategory,
+  addVipActive,
+  resetVipActive,
+  getVipGroupActivity,
+} from "@/api/vipSeting";
 import cleanDeep from "clean-deep";
-const MIN_NUMBER = 1;
-const MAX_NUMBER = 999;
+const payBaseForm = {
+  courseType: "",
+  vipGroupCategoryIdList: "",
+  applyToStudentType: [],
+  teachMode: null,
+  allowOnlineToOffline: "",
+  singleCourseTime: null,
+  isLimitNum: null,
+  minCourseNum: null,
+  maxCourseNum: null,
+  memberRankId: null,
+  periodEnum: null,
+  discount: 100,
+  fullMinusCourseTimes: null,
+  giveCourseType: null,
+  giveTeachMode: null,
+  giveCategoryId: null,
+  giveSingleCourseTime: null,
+  giveCourseNum: null,
+  giveMemberRankId: null,
+  giveMemberTime: null,
+  giveAllowOnlineToOffline:null
+};
+const baseSalaryForm = {
+  vipOnlineSalarySettlement: {
+    salarySettlementType: null,
+    settlementValue: null,
+  },
+  offlineSalarySettlement: {
+    salarySettlementType: null,
+    settlementValue: null,
+  },
+  giveVipOnlineSalarySettlement: {
+    salarySettlementType: null,
+    settlementValue: null,
+  },
+  giveVipOfflineSalarySettlement: {
+    salarySettlementType: null,
+    settlementValue: null,
+  },
+  practiceSalarySettlement: {
+    salarySettlementType: null,
+    settlementValue: null,
+  },
+  givePracticeSalarySettlement: {
+    salarySettlementType: null,
+    settlementValue: null,
+  },
+};
 export default {
-  name: "vipNewActive",
+  components: {
+    baseInfo,
+    payInfo,
+    salaryInfo,
+  },
   data() {
     return {
-      vipResetTypeList,
-      pageType: "",
-      labelPosition: "right",
-      vipform: {
+      status: "DRAFT",
+      active: 1,
+      baseForm: {
         name: "",
-        desc: "",
+        description: "",
         activeTime: [],
         courseTime: [],
         organ: [],
-      },
-      vipformRules: {
-        name: [
-          { required: true, message: "请输入活动名称", trigger: "blur" },
-          {
-            min: 1,
-            max: 25,
-            message: "长度在 1 到 25 个字符",
-            trigger: "blur",
-          },
-        ],
-        desc: [
-          { required: false, message: "请输入文字描述", trigger: "blur" },
-          {
-            min: 1,
-            max: 200,
-            message: "长度在 1 到 200 个字符",
-            trigger: "blur",
-          },
-        ],
-        activeTime: [
-          { required: false, message: "请选择活动时间", trigger: "blur" },
-        ],
-        courseTime: [
-          { required: false, message: "请选择课程时间", trigger: "blur" },
-        ],
-        organ: [{ required: true, message: "请选择适用分部", trigger: "blur" }],
-        stauts: [
-          { required: true, message: "请选择活动形式", trigger: "blur" },
-        ],
-        applyToStudentType: [{ required: true, message: "请选择是否新生专享" }],
-        allowOnlineToOffline: [
-          { required: true, message: "请选择课程调整方式" },
-        ],
-      },
-      courseStatusList: [], // 获取所有课程形式
-      activeType: "",
-      online: true,
-      unonline: true,
-      onlineSalary: "TEACHER_DEFAULT",
-      unonlineSalary: "TEACHER_DEFAULT",
-      onlineprice: "",
-      unonlineprice: "",
-      salaryReadonlyFlag: false,
-      paymentReadonlyFlag: false,
-      attribute1: "",
-      attribute2: "",
-      courseNumForm: {
-        minCourseNum: "",
-        maxCourseNum: "",
+        activityType: "",
+        applyToStudentType: [],
         studentMaxUsedTimes: "",
+        isPayToBalance: "",
+        marketPrice: "",
+      },
+      title: "新建课程活动方案",
+      payForm: {
+        ...payBaseForm,
       },
-      giveClassPaySalaryFlag: true,
-      organList: [],
-      onlineClassJoinGradientRewards: false,
-      offlineClassJoinGradientRewards: false,
-      courseNumrules: {
-        minCourseNum: [
-          { required: true, message: "请输入最小课时数", trigger: "blur" },
-          { validator: this.validateCom, trigger: "blur" },
-          { validator: this.validateMin, trigger: "blur" },
-        ],
-        maxCourseNum: [
-          { required: true, message: "请输入最大课时数", trigger: "blur" },
-          { validator: this.validateCom, trigger: "blur" },
-          { validator: this.validateMax, trigger: "blur" },
-        ],
+      salaryForm: {
+        ...baseSalaryForm,
       },
+      remberList: [],
     };
   },
-  activated() {
-    this.onReSet();
-    // if (this.$route.query.rules) {
-    //   this.rules = this.$route.query.rules;
-    // }
-    // if (this.$route.query.searchForm) {
-    //   this.searchForm = this.$route.query.searchForm;
-    // }
-
-    this.pageType = this.$route.query.type;
-    this.$refs.vipform.resetFields();
-  },
-
   async mounted() {
-    // 首先获取课程形式
-    // vipGroupCategory().then(res => {
-    //   if (res.code == 200) {
-    //     this.courseStatusList = res.data;
-    //   }
-    // });
-    // // 适用分部
-    // getEmployeeOrgan().then(res => {
-    //   if (res.code == 200) {
-    //     this.organList = res.data;
-    //   }
-    // });
-    // 获取类型
-    await this.$store.dispatch("setVipGroupCategory");
-    // 获取分部
-    await this.$store.dispatch("setBranchs");
-    this.onReSet();
-    // if (this.$route.query.rules) {
-    //   this.rules = this.$route.query.rules;
-    // }
-    // if (this.$route.query.searchForm) {
-    //   this.searchForm = this.$route.query.searchForm;
-    // }
+    try {
+      const res = await getAllmemberRank();
+      this.remberList = res.data;
+    } catch {}
 
-    this.pageType = this.$route.query.type;
-    this.$refs.vipform.resetFields();
+    if (this.$route.query.id) {
+      this.baseForm.id = this.$route.query.id;
+      const rusult = await getVipGroupActivity({ id: this.$route.query.id });
+      this.formatDetail(rusult.data);
+    } else {
+      this.payInfo = { ...payBaseForm };
+      this.salaryForm = JSON.parse(JSON.stringify({ ...baseSalaryForm }));
+    }
   },
-
   methods: {
-    resetForm() {
-      this.$refs.form.resetFields();
+    onCancel() {
+      // if (this.active > 1) {
+      //   this.active--;
+      //   console.log(this.active);
+      // } else {
+      this.$store.dispatch("delVisitedViews", this.$route);
+      this.$router.push({
+        path: "/vipActiveManager/vipActiveList",
+        query: { rules: this.rules, searchForm: this.searchForm },
+      });
+      // }
     },
-    handleMinChange() {
-      this.$refs.form.validateField("maxCourseNum");
+    next() {
+      let flags = true;
+      if (this.active == 1) {
+        this.$refs.baseForm.$refs.vipform.validate((flag) => {
+          flags = flag;
+        });
+        // 验证表单1
+      } else if (this.active == 2) {
+        // 验证表单2
+        this.$refs.payInfo.$refs.form.validate((flag) => {
+          flags = flag;
+        });
+      }
+      if (!flags) {
+        return;
+      }
+      if (this.active < 3) {
+        this.active++;
+      }
     },
-    handleMaxChange() {
-      this.$refs.form.validateField("minCourseNum");
+    prve() {
+      if (this.active >= 2) {
+        this.active--;
+      }
     },
-    validateCom(rule, value, callback) {
-      const one = Number(value);
-      if (Number.isInteger(one)) {
-        if (one < MIN_NUMBER) {
-          return callback(new Error("输入值必须大于0"));
-        } else if (one > MAX_NUMBER) {
-          return callback(new Error("输入值必须小于999"));
-        }
-        return callback();
+    resetPayInfo() {
+      this.payForm = {
+        ...payBaseForm,
+      };
+    },
+    changeCourseType(val) {
+      // this.$emit("changeCourseType", val);
+      if (val == "PRACTICE") {
+        this.$set(this.payForm, "vipGroupCategoryIdList", "");
+        this.$set(this.payForm, "teachMode", "");
+        this.$set(this.payForm, "singleCourseTime", 25);
+        this.$set(this.payForm, "allowOnlineToOffline", []);
+      } else {
+        this.$set(this.payForm, "singleCourseTime", 45);
+        this.$set(this.payForm, "allowOnlineToOffline", []);
+        this.$set(this.payForm, "vipGroupCategoryIdList", "");
+        this.$set(this.payForm, "teachMode", "");
       }
-      return callback(new Error("输入值必须为正整数"));
+      // vip
+      // 课程形式
+      // 上课模式
+      // 单课时长
+      // 课程调整方式
+      // PRACTICE
     },
-    validateMin(rule, value, callback) {
-      const one = Number(value);
-      const max = Number(this.courseNumForm.maxCourseNum);
-      if (!max || one <= max) {
-        return callback();
+    changeGiveCourseType(val) {
+      if (val == "PRACTICE") {
+        this.$set(this.payForm, "giveSingleCourseTime", 25);
+      } else if (val == "VIP") {
+        this.$set(this.payForm, "giveSingleCourseTime", 45);
+      } else {
+        this.$set(this.payForm, "giveSingleCourseTime", null);
       }
-      return callback(new Error("输入值不得大于最大课时数"));
+      this.$set(this.payForm, "giveCourseNum", null);
+      this.$set(this.payForm, "giveCategoryId", null);
+      this.$set(this.payForm, "giveMemberRankId", null);
+      this.$set(this.payForm, "givePeriod", null);
+      this.$set(this.payForm, "giveTeachMode", "");
+      this.$set(this.payForm, "giveAllowOnlineToOffline", "");
+
+    },
+    chageSalary() {
+      this.salaryForm = null;
+      this.salaryForm = JSON.parse(JSON.stringify({ ...baseSalaryForm }));
+
+      this.$forceUpdate();
+    },
+    resetIsLimitNum() {
+      this.$set(this.payForm, "maxCourseNum", null);
+      this.$set(this.payForm, "minCourseNum", null);
     },
-    validateMax(rule, value, callback) {
-      const one = Number(value);
-      const min = Number(this.courseNumForm.minCourseNum);
-      if (!min || one >= min) {
-        return callback();
+    async submit() {
+      if (this.$refs?.salaryInfo?.$refs?.salaryForm) {
+        this.$refs.salaryInfo.$refs.salaryForm.validate((flag) => {
+          if (flag) {
+            this.baseForm.status = "PROGRESS";
+            this.submitDataFormat("PROGRESS");
+          }
+        });
+      } else {
+        this.baseForm.status = "PROGRESS";
+        this.submitDataFormat("PROGRESS");
       }
-      return callback(new Error("输入值不得小于最小课时数"));
     },
-    changeStauts(val) {
-      console.log(val);
+    save() {
+      this.baseForm.status = "DRAFT";
+      this.submitDataFormat("DRAFT");
     },
-    submitFrom() {
-      this.$refs.form.validate((isok) => {
-        if (isok) {
-          this.$refs["vipform"].validate((valid) => {
-            if (valid) {
-              // 验证通过
-              let coursesStartTime = null,
-                coursesEndTime = null,
-                startTime = null,
-                endTime = null;
-              if (
-                this.vipform.courseTime &&
-                this.vipform.courseTime.length > 0
-              ) {
-                coursesStartTime = this.vipform.courseTime[0];
-                coursesEndTime = this.vipform.courseTime[1];
-              }
-              if (
-                this.vipform.activeTime &&
-                this.vipform.activeTime.length > 0
-              ) {
-                startTime = this.vipform.activeTime[0];
-                endTime = this.vipform.activeTime[1];
-              }
-              let organId = this.vipform.organ.join(",");
-              let type = this.activeType;
-              if (!type) {
-                this.$message.error("请选择活动类型");
-                return;
-              }
-              if (!this.online && !this.unonline) {
-                this.$message.error("请选择活动适用范围");
-                return;
-              }
-              if (type == "DISCOUNT") {
-                if (!this.attribute1 || this.attribute1 < 0) {
-                  this.$message.error("折扣必须大于等于0");
-                  return;
-                }
-              } else if (type == "GIVE_CLASS") {
-                if (!this.attribute1) {
-                  this.$message.error("请输入多少节开始赠");
-                  return;
-                }
-                if (!this.attribute2) {
-                  this.$message.error("请输入赠送课时数");
-                  return;
-                }
-              }
-              let vipGroupCategoryIdList = this.vipform.stauts.join(",");
-              let onlineSalarySettlement;
-              let offlineSalarySettlement;
-              if (this.online) {
-                // 勾选线上
-                if (this.onlineSalary == "RATIO_DISCOUNT") {
-                  if (this.onlineprice < 0 || this.onlineprice > 100) {
-                    this.$message.error("折扣比必须大于0且小于100");
-                    return;
-                  }
-                } else if (this.onlineSalary == "TEACHER_DEFAULT") {
-                  this.onlineprice = 0;
-                }
-                onlineSalarySettlement = {
-                  salarySettlementType: this.onlineSalary,
-                  settlementValue: this.onlineprice,
-                };
-              } else {
-                onlineSalarySettlement = null;
-              }
-              if (this.unonline) {
-                // 勾选线下
-                if (this.unonlineSalary == "RATIO_DISCOUNT") {
-                  if (this.unonlineprice < 0 || this.unonlineprice > 100) {
-                    this.$message.error("折扣比必须大于0且小于100");
-                    return;
-                  }
-                } else if (this.unonlineSalary == "TEACHER_DEFAULT") {
-                  this.unonlineprice = 0;
-                }
-                offlineSalarySettlement = {
-                  salarySettlementType: this.unonlineSalary,
-                  settlementValue: this.unonlineprice,
-                };
-              } else {
-                offlineSalarySettlement = null;
-              }
-              let salaryReadonlyFlag = this.salaryReadonlyFlag * 1;
-              let paymentReadonlyFlag = this.paymentReadonlyFlag * 1;
-              // let giveClassPaySalaryFlag = this.giveClassPaySalaryFlag * 1;
-              let vipGroupSalarySettlement = {
-                onlineSalarySettlement,
-                offlineSalarySettlement,
-              };
-              if (type == "BASE_ACTIVITY") {
-                this.courseNumForm.studentMaxUsedTimes = -1;
-                this.courseNumForm.minCourseNum = -1;
-                this.courseNumForm.maxCourseNum = -1;
-              } else if (type == "GIVE_CLASS") {
-                this.courseNumForm.minCourseNum = -1;
-                this.courseNumForm.maxCourseNum = -1;
-              }
-              // 发请求创建活动
-              addVipActive(
-                cleanDeep({
-                  coursesStartTime,
-                  coursesEndTime,
-                  startTime,
-                  endTime,
-                  name: this.vipform.name,
-                  description: this.vipform.desc,
-                  applyToStudentType: this.vipform.applyToStudentType,
-                  allowOnlineToOffline: this.vipform.allowOnlineToOffline,
-                  organId,
-                  type,
-                  vipGroupCategoryIdList,
-                  vipGroupSalarySettlement,
-                  salaryReadonlyFlag,
-                  paymentReadonlyFlag,
-                  giveClassPaySalaryFlag: 1,
-                  attribute1: this.attribute1,
-                  attribute2: this.attribute2,
-                  minCourseNum: this.courseNumForm.minCourseNum,
-                  maxCourseNum: this.courseNumForm.maxCourseNum,
-                  studentMaxUsedTimes: this.courseNumForm.studentMaxUsedTimes
-                    ? this.courseNumForm.studentMaxUsedTimes
-                    : -1,
-                  offlineClassJoinGradientRewards:
-                    this.offlineClassJoinGradientRewards * 1,
-                  onlineClassJoinGradientRewards:
-                    this.onlineClassJoinGradientRewards * 1,
-                })
-              ).then((res) => {
-                if (res.code == 200) {
-                  this.$message.success("恭喜你,活动创建成功");
-                  this.onReSet();
-                  this.$store.dispatch("delVisitedViews", this.$route);
-                  this.$router.push({
-                    path: "/vipActiveManager/vipActiveList",
-                  });
-                }
+    submitDataFormat(status) {
+      let coursesStartTime = null,
+        coursesEndTime = null,
+        startTime = null,
+        endTime = null;
+      if (this.baseForm.courseTime && this.baseForm.courseTime.length > 0) {
+        coursesStartTime = this.baseForm.courseTime[0];
+        coursesEndTime = this.baseForm.courseTime[1];
+      }
+      if (this.baseForm.activeTime && this.baseForm.activeTime.length > 0) {
+        startTime = this.baseForm.activeTime[0];
+        endTime = this.baseForm.activeTime[1];
+      }
+      let organId = this.baseForm.organ.join(",");
+      this.baseForm.studentMaxUsedTimes
+        ? this.baseForm.studentMaxUsedTimes
+        : (this.baseForm.studentMaxUsedTimes = -1);
+      for (let item in this.salaryForm) {
+        if (this.salaryForm[item].salarySettlementType == "TEACHER_DEFAULT") {
+          this.salaryForm[item].settlementValue = null;
+        }
+      }
+      let applyToStudentType = this.baseForm.applyToStudentType.join(",");
+      // let vipGroupCategoryIdList =
+      //   this.payForm.vipGroupCategoryIdList.join(",");
+      let vipGroupSalarySettlement = this.salaryForm;
+      let obj = {
+        ...this.baseForm,
+        ...this.payForm,
+        organId,
+        coursesStartTime,
+        coursesEndTime,
+        startTime,
+        endTime,
+        applyToStudentType,
+        vipGroupSalarySettlement,
+      };
+      if (this.baseForm.id) {
+        resetVipActive(cleanDeep(obj)).then((res) => {
+          if (res.code == 200) {
+            if (status == "DRAFT") {
+              this.$message.success("恭喜你,保存草稿成功");
+              this.baseForm.id = res.data.id;
+              this.$router.push({
+                query: merge(this.$route.query, {
+                  id: res.data.id,
+                }),
               });
+              this.formatDetail(res.data);
             } else {
+              localStorage.removeItem("newVip");
+              localStorage.removeItem(`newPractice`);
+              this.$message.success("活动修改成功");
+              this.$store.dispatch("delVisitedViews", this.$route);
+              this.$router.push({
+                path: "/vipActiveManager/vipActiveList",
+              });
+            }
+
+            // this.onReSet();
+            // this.$store.dispatch("delVisitedViews", this.$route);
+            // this.$router.push({
+            //   path: "/vipActiveManager/vipActiveList",
+            // });
+          }
+        });
+      } else {
+        addVipActive(cleanDeep(obj)).then((res) => {
+          if (res.code == 200) {
+            if (status == "DRAFT") {
+              this.$message.success("恭喜你,保存草稿成功");
+              this.baseForm.id = res.data.id;
               this.$nextTick(() => {
-                let isError = document.getElementsByClassName("is-error");
-                isError[0].scrollIntoView({
-                  block: "center",
-                  behavior: "smooth",
-                });
+                this.formatDetail(res.data);
+              });
+              this.$router.push({
+                query: merge(this.$route.query, {
+                  id: res.data.id,
+                }),
+              });
+            } else {
+              this.$message.success("活动创建成功");
+              this.$store.dispatch("delVisitedViews", this.$route);
+              this.$router.push({
+                path: "/vipActiveManager/vipActiveList",
               });
-              // this.$message.error("请填写必要参数");
             }
-          });
+          }
+        });
+      }
+    },
+    formatDetail(data) {
+      this.status = data.status;
+      for (let item in data) {
+        if (!(item == "teachMode" || item == "giveTeachMode")) {
+          if (data[item] == -1) {
+            data[item] = null;
+          }
         }
-      });
+      }
+      let activeTime = [];
+      let courseTime = [];
+      this.title = data.name;
+      if (data.startTime) {
+        activeTime = [data.startTime, data.endTime];
+      }
+      if (data.coursesStartTime) {
+        courseTime = [data.coursesStartTime, data.coursesEndTime];
+      }
+      let applyToStudentType = data.applyToStudentType
+        ? data.applyToStudentType.split(",")
+        : [];
+      // 格式化 baseForm
+      this.$set(this, "baseForm", {
+        name: data.name,
+        description: data.description,
+        activeTime,
+        courseTime,
+        marketPrice: data.marketPrice,
+        organ: data.organId.split(",").map((organ) => {
+          return Number(organ);
+        }),
+        activityType: data.activityType,
+        applyToStudentType,
+        studentMaxUsedTimes: data.studentMaxUsedTimes,
+        isPayToBalance: Number(data.payToBalance),
+        id: this.$route.query.id,
 
-      // 线上线下课 勾选就传不勾选就不传
-      // addVipActive().then(res => { })
-    },
-    onOrganChange() {
-      this.$forceUpdate();
-    },
-    onCheckAllBranch() {
-      // 选择所有分部
-      let vipform = this.vipform;
-      vipform.organ = [];
-      this.selects.branchs.forEach((item) => {
-        vipform.organ.push(item.id);
       });
+      // this.baseForm = {
+      //   name: data.name,
+      //   description: data.description,
+      //   activeTime,
+      //   courseTime,
+      //   marketPrice: data.marketPrice,
+      //   organ: data.organId.split(",").map((organ) => {
+      //     return Number(organ);
+      //   }),
+      //   activityType: data.activityType,
+      //   applyToStudentType,
+      //   studentMaxUsedTimes,
+      //   isPayToBalance: Number(data.payToBalance),
+      //   id: this.$route.query.id,
+      // };
+      // this.$set()
+      //格式化payForm
+      // console.log(data.vipGroupCategoryIdList
+      //     .split(",")
+      //     .map((id) => {
+      //       return Number(id);
+      //     }),)
+      this.payForm = {
+        courseType: data.courseType,
+        vipGroupCategoryIdList: data.vipGroupCategoryIdList
+          ? data.vipGroupCategoryIdList.split(",").map((id) => {
+              return Number(id);
+            })[0]
+          : null,
+        teachMode: data.teachMode + "",
+        allowOnlineToOffline: data.allowOnlineToOffline + "",
+        singleCourseTime: data.singleCourseTime,
+        isLimitNum: data.minCourseNum ? true : false,
+        minCourseNum: data.minCourseNum,
+        maxCourseNum: data.maxCourseNum,
+        memberRankId: data.memberRankId,
+        periodEnum: data.periodEnum,
+        discount: data.discount,
+        fullMinusCourseTimes: data.fullMinusCourseTimes,
+        giveCourseType: data.giveCourseType,
+        giveTeachMode: data.giveTeachMode + "",
+        giveCategoryId:
+          data.giveCategoryId * 1 ? data.giveCategoryId * 1 : null,
+        giveSingleCourseTime: data.giveSingleCourseTime,
+        giveCourseNum: data.giveCourseNum,
+        giveMemberRankId: data.giveMemberRankId,
+        givePeriod: data.givePeriodEnum,
+        giveMemberTime: data.giveMemberTime ? data.giveMemberTime : null,
+         giveAllowOnlineToOffline:data.giveAllowOnlineToOffline+''
+      };
+      // 格式化缴费金额
+      if (data.salarySettlementJson && data.salarySettlementJson != "null") {
+        this.salaryForm = JSON.parse(JSON.stringify({ ...baseSalaryForm }));
+        let result = JSON.parse(data.salarySettlementJson);
+
+        for (let key in result) {
+          this.salaryForm[key] = result[key];
+        }
+      } else {
+        this.salaryForm = JSON.parse(JSON.stringify({ ...baseSalaryForm }));
+      }
       this.$forceUpdate();
     },
-    onCancel() {
-      this.$store.dispatch("delVisitedViews", this.$route);
-      this.$router.push({
-        path: "/vipActiveManager/vipActiveList",
-        query: { rules: this.rules, searchForm: this.searchForm },
-      });
+  },
+  computed: {
+    isDisabled() {
+      if (this.$route.query.type == "look") {
+        return true;
+      } else {
+        return false;
+      }
     },
-    onReSet() {
-      this.vipform = {
-        name: "",
-        desc: "",
-        activeTime: [],
-        courseTime: [],
-      };
-      this.activeType = "";
-      this.online = true;
-      this.unonline = true;
-      this.salaryReadonlyFlag = false;
-      this.onlineSalary = "TEACHER_DEFAULT";
-      this.unonlineSalary = "TEACHER_DEFAULT";
-      this.onlineprice = "";
-      this.unonlineprice = "";
-      this.onlineClassJoinGradientRewards = false;
-      this.offlineClassJoinGradientRewards = false;
-      this.attribute1 = "";
-      this.attribute2 = "";
-      this.courseNumForm.maxCourseNum = "";
-      this.courseNumForm.minCourseNum = "";
-      this.$refs.vipform.resetFields();
+    statuss() {
+      return this.status;
     },
   },
 };
 </script>
 <style lang="scss" scoped>
-.m-core {
-  font-size: 14px;
-  width: 100%;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  // text-align: center;
-  .activeRange {
-    display: flex;
-    flex-direction: row;
-    justify-content: flex-start;
-    .left {
-      height: 72px;
-      line-height: 72px;
-    }
-    .right {
-      .chioseWrap {
-        display: flex;
-        flex-direction: row;
-        justify-content: flex-start;
-        height: 72px;
-        line-height: 72px;
-        align-items: center;
-        .el-checkbox {
-          margin-right: 20px;
-        }
-        .el-select {
-          margin-right: 20px;
-        }
-      }
-    }
-  }
-  .activeType {
-    display: flex;
-    flex-direction: row;
-    justify-content: flex-start;
-    .left {
-      margin-right: 20px;
-      p {
-        height: 40px;
-        line-height: 40px;
-      }
-    }
-    .right {
-      > div {
-        display: flex;
-        flex-direction: row;
-        justify-content: flex-start;
-        height: 40px;
-        line-height: 40px;
-        margin-bottom: 20px;
-        .head {
-          width: 120px;
-          height: 40px;
-          line-height: 40px;
-          border: 1px solid #ccc;
-
-          text-align: center;
-          border-radius: 5px;
-          cursor: pointer;
-          margin-right: 10px;
-        }
-        > .head.active {
-          background-color: #13817a;
-          color: #fff;
-          border: none;
-        }
-        .title {
-          line-height: 40px;
-          height: 40px;
-        }
-      }
-    }
-  }
+.steps {
+  margin-top: 30px;
 }
-</style>
-<style lang="scss">
-.m-core {
-  .vipform {
-    .el-select {
-      width: 400px !important;
-      .el-input__inner {
-        width: 400px;
-      }
-    }
-  }
-  .activeType {
-    .right {
-      .el-input {
-        width: 150px !important;
-      }
-    }
-  }
+/deep/.is-success {
+  color: #14928a !important;
+  border-color: #14928a !important;
 }
 </style>
+
+

+ 0 - 1
src/views/main/baseinfo/management.vue

@@ -360,7 +360,6 @@ export default {
     };
   },
   mounted() {
-    console.log(this.orderType)
     this.init();
   },
   methods: {

+ 10 - 3
src/views/studentManager/memberList.vue

@@ -49,10 +49,11 @@
           <el-select
             class="multiple"
             v-model.trim="searchForm.hasMember"
+            clearable
             placeholder="会员是否过期"
           >
             <el-option label="已过期" value="0"></el-option>
-            <el-option label="即将过期" value="1"></el-option>
+            <el-option label="过期" value="1"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item prop="visitTime">
@@ -128,7 +129,7 @@
           <el-table-column align="center" prop="studentId" label="会员是否过期">
             <template slot-scope="scope">
               <div>
-                {{ scope.row.memberDay > 0 ? "即将过期" : "已过期" }}
+                {{ scope.row.memberDay > 0 ? "过期" : "已过期" }}
               </div>
             </template>
           </el-table-column>
@@ -190,8 +191,9 @@
       </div>
     </div>
     <!-- 退团弹窗 -->
-    <el-dialog title="退团信息确认" width="640px" :visible.sync="quitVisible">
+    <el-dialog title="退团信息确认" width="660px" :visible.sync="quitVisible">
       <quiteTeam :quitForm="quitForm" :activeRow="activeRow" ref="quitForm" />
+       <p style="color:red;paddingLeft:150px">退费金额暂不进入账户余额</p>
       <span slot="footer" class="dialog-footer question">
         <div>
           <el-popover placement="right" width="500" trigger="click">
@@ -202,6 +204,7 @@
               <p>退还乐器费用:报名缴费时缴纳的乐器费用(团购、租金)</p>
               <p>退还教辅费用:报名缴费时缴费的教辅费用</p>
               <p>退还乐保费用:报名缴费时缴费的乐保费用</p>
+
             </div>
             <el-button
               type="text"
@@ -269,6 +272,8 @@ export default {
       },
       quitForm: {
         // 退团信息确认
+        studentName:null,
+        musicGroupName:null,
         isRefundCourseFee: null,
         isRefundInstrumentFee: null,
         isRefundTeachingAssistantsFee: null,
@@ -327,6 +332,8 @@ export default {
       this.activeRow = row;
       this.quitVisible = true;
       this.quitForm.cloudTeacherAmount = row.cloudTeacherAmount;
+       this.quitForm.studentName = row.username
+       this.quitForm.musicGroupName = row.musicGroupName
     },
     quieTeams(row) {
       this.$prompt("请输入退团原因", "提示", {

+ 1 - 0
src/views/teamBuild/signupList.vue

@@ -993,6 +993,7 @@
       :visible.sync="quitVisible"
     >
       <quiteTeam :quitForm="quitForm" :activeRow="activeRow" ref="quitForm" />
+       <p style="color:red;paddingLeft:150px">退费金额暂不进入账户余额</p>
       <span slot="footer" class="dialog-footer question">
         <div>
           <el-popover placement="right" width="500" trigger="click">

+ 61 - 41
src/views/teamDetail/components/modals/quite-team.vue

@@ -9,34 +9,43 @@
     >
       <el-row>
         <el-col :span="10">
-          <el-form-item label="学员姓名" >
-            <span>{{quitForm.studentName}}</span>
+          <el-form-item label="学员姓名">
+            <span>{{ quitForm.studentName }}</span>
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="乐团名称">
-                 <overflow-text
-                :text="quitForm.musicGroupName"
-                width="150px"
-              ></overflow-text>
+            <overflow-text
+              :text="quitForm.musicGroupName"
+              width="150px"
+            ></overflow-text>
             <!-- <span>{{}}</span>   -->
           </el-form-item>
         </el-col>
       </el-row>
 
       <el-row>
-        <el-form-item label="是否回访" prop="isVisit"   >
-          <el-radio v-model.trim="quitForm.isVisit" :label="true"
-          :disabled='isDisabled'
+        <el-form-item label="是否回访" prop="isVisit">
+          <el-radio
+            v-model.trim="quitForm.isVisit"
+            :label="true"
+            :disabled="isDisabled"
             >是</el-radio
           >
-          <el-radio  :disabled='isDisabled' v-model.trim="quitForm.isVisit" :label="false"
+          <el-radio
+            :disabled="isDisabled"
+            v-model.trim="quitForm.isVisit"
+            :label="false"
             >否</el-radio
           >
         </el-form-item>
-        <el-form-item label="回访时间" v-if="quitForm.isVisit" :rules="[{required: true, message: '请选择回访回访时间'}]">
+        <el-form-item
+          label="回访时间"
+          v-if="quitForm.isVisit"
+          :rules="[{ required: true, message: '请选择回访回访时间' }]"
+        >
           <el-date-picker
-           :disabled='isDisabled'
+            :disabled="isDisabled"
             v-model.trim="quitForm.visitTime"
             align="right"
             type="date"
@@ -59,7 +68,7 @@
       </el-row> -->
       <!-- v-if="quitForm.isQuiteFee" -->
       <div>
-        <el-row>
+        <!-- <el-row>
           <el-form-item
             label="退还会员费用"
             prop="isReturnMemberFee"
@@ -90,28 +99,36 @@
               <template slot="append">元</template>
             </el-input>
           </el-form-item>
-        </el-row>
+        </el-row> -->
 
         <!-- v-if="activeRow.cloudTeacherAmount > 0" -->
 
         <el-row>
-          <el-form-item label="退还课程费用" prop="isReturnCourseFee"   :rules="[{required: true, message: '请选择是否退还课程费用'}]">
-            <el-radio  :disabled='isDisabled' v-model.trim="quitForm.isReturnCourseFee" :label="true"
+          <el-form-item
+            label="退还课程费用"
+            prop="isReturnCourseFee"
+            :rules="[{ required: true, message: '请选择是否退还课程费用' }]"
+          >
+            <el-radio
+              :disabled="isDisabled"
+              v-model.trim="quitForm.isReturnCourseFee"
+              :label="true"
               >是</el-radio
             >
-            <el-radio  :disabled='isDisabled' v-model.trim="quitForm.isReturnCourseFee" :label="false"
+            <el-radio
+              :disabled="isDisabled"
+              v-model.trim="quitForm.isReturnCourseFee"
+              :label="false"
               >否</el-radio
             >
           </el-form-item>
           <el-form-item
             label="退还课程金额"
             prop="courseFee"
-            v-if="
-            quitForm.isReturnCourseFee
-            "
+            v-if="quitForm.isReturnCourseFee"
           >
             <el-input
-            disabled
+              disabled
               type="number"
               v-model.trim="quitForm.courseFee"
               style="width: 180px"
@@ -121,15 +138,19 @@
           </el-form-item>
         </el-row>
         <el-row>
-          <el-form-item label="退还乐器费用" prop="isReturnMusicalFee"  :rules="[{required: true, message: '请选择是否退还乐器费用'}]">
+          <el-form-item
+            label="退还乐器费用"
+            prop="isReturnMusicalFee"
+            :rules="[{ required: true, message: '请选择是否退还乐器费用' }]"
+          >
             <el-radio
-             :disabled='isDisabled'
+              :disabled="isDisabled"
               v-model.trim="quitForm.isReturnMusicalFee"
               :label="true"
               >是</el-radio
             >
             <el-radio
-             :disabled='isDisabled'
+              :disabled="isDisabled"
               v-model.trim="quitForm.isReturnMusicalFee"
               :label="false"
               >否</el-radio
@@ -138,9 +159,7 @@
           <el-form-item
             label="退还乐器金额"
             prop="musicalFee"
-            v-if="
-              quitForm.isReturnMusicalFee
-            "
+            v-if="quitForm.isReturnMusicalFee"
           >
             <el-input
               type="number"
@@ -154,18 +173,18 @@
         </el-row>
         <el-row>
           <el-form-item
-          :rules="[{required: true, message: '请选择是否退还教辅费用'}]"
+            :rules="[{ required: true, message: '请选择是否退还教辅费用' }]"
             label="退还教辅费用"
             prop="isReturnAccessoriesFee"
           >
             <el-radio
-             :disabled='isDisabled'
+              :disabled="isDisabled"
               v-model.trim="quitForm.isReturnAccessoriesFee"
               :label="true"
               >是</el-radio
             >
             <el-radio
-             :disabled='isDisabled'
+              :disabled="isDisabled"
               v-model.trim="quitForm.isReturnAccessoriesFee"
               :label="false"
               >否</el-radio
@@ -177,7 +196,7 @@
             v-if="quitForm.isReturnAccessoriesFee"
           >
             <el-input
-               disabled
+              disabled
               type="number"
               v-model.trim="quitForm.accessoriesFee"
               style="width: 180px"
@@ -189,23 +208,25 @@
         <el-row>
           <el-form-item
             label="退还乐保费用"
-            :rules="[{required: true, message: '请选择是否退还乐保费用'}]"
+            :rules="[{ required: true, message: '请选择是否退还乐保费用' }]"
             prop="isReturnMaintenanceFee"
           >
             <el-radio
-             :disabled='isDisabled'
-             v-model.trim="quitForm.isReturnMaintenanceFee" :label="true"
+              :disabled="isDisabled"
+              v-model.trim="quitForm.isReturnMaintenanceFee"
+              :label="true"
               >是</el-radio
             >
             <el-radio
-             :disabled='isDisabled'
-             v-model.trim="quitForm.isReturnMaintenanceFee" :label="false"
+              :disabled="isDisabled"
+              v-model.trim="quitForm.isReturnMaintenanceFee"
+              :label="false"
               >否</el-radio
             >
           </el-form-item>
           <el-form-item
             label="退还乐保金额"
-            :rules="[{required: true, message: '请输入乐保金额'}]"
+            :rules="[{ required: true, message: '请输入乐保金额' }]"
             prop="maintenanceFee"
             v-if="quitForm.isReturnMaintenanceFee"
           >
@@ -224,7 +245,7 @@
           <el-input
             type="textarea"
             :rows="3"
-             :disabled='isDisabled'
+            :disabled="isDisabled"
             v-model.trim="quitForm.userComment"
             style="width: 455px !important"
           ></el-input>
@@ -232,7 +253,7 @@
       </el-row>
       <el-form-item label="审批理由" prop="reason">
         <el-input
-         :disabled='isDisabled'
+          :disabled="isDisabled"
           type="textarea"
           :rows="3"
           v-model.trim="quitForm.reason"
@@ -244,9 +265,8 @@
 </template>
 <script>
 export default {
-  props: ["quitForm",'isDisabled'],
+  props: ["quitForm", "isDisabled"],
   mounted() {
-    console.log("quitForm", this.quitForm);
   },
   data() {
     return {

+ 1 - 0
src/views/teamDetail/components/studentList.vue

@@ -769,6 +769,7 @@
     <!-- 退团弹窗 -->
     <el-dialog title="退团信息确认" width="700px" :visible.sync="quitVisible">
       <quiteTeam :quitForm="quitForm" ref="quitForm" />
+       <p style="color:red;paddingLeft:150px">退费金额暂不进入账户余额</p>
       <span slot="footer" class="dialog-footer question">
         <div>
           <el-popover placement="right" width="500" trigger="click">

+ 47 - 12
src/views/vipClass/vipDetail/components/vipStudentList.vue

@@ -527,6 +527,24 @@ export default {
           this.$message.success("退学成功");
           this.getStudents();
         }
+        if (res.code == 206) {
+          this.$confirm(res.msg, "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+          }).then(() => {
+            leaveSchool({
+              studentId,
+              vipGroupId,
+              amount,
+              confirmReturnActivityGive: true,
+            }).then((res) => {
+              if (res.code == 200) {
+                this.$message.success("退学成功");
+                this.getStudents();
+              }
+            });
+          });
+        }
       });
     },
     lookFee(scope) {
@@ -545,17 +563,34 @@ export default {
               vipGroupId: this.id,
             }).then((res) => {
               if (res.code == 200) {
-                // scope.row.fee =
-                this.$prompt("请输入退课金额", "提示", {
+                // this.$prompt("请输入退课金额", "提示", {
+                //   confirmButtonText: "确定",
+                //   cancelButtonText: "取消",
+                //   inputValue: res.data.suplusCourseFee,
+                // })
+                //   .then(({ value }) => {
+                //     scope.row.fee = value;
+                //     this.leaveSchool(scope);
+                //   })
+                //   .catch((res) => {});
+              const h = this.$createElement;
+                this.$msgbox({
+                  title: "消息",
+                  closeOnClickModal:false,
+                  message: h("p", null, [
+                    h("p", null, "请输入退课金额 "),
+                    h("input", { class: "el-input__inner",'attrs':{'value':res.data.suplusCourseFee},'on':{input:function(event){
+                        scope.row.fee = event.target.value;
+                     this.$emit('input',event.target.value)
+                    }.bind(this)}}),
+                    h('p',{style: "color: red;marginTop:20px"},"退费金额暂不进入账户余额")
+                  ]),
+                  showCancelButton: true,
                   confirmButtonText: "确定",
                   cancelButtonText: "取消",
-                  inputValue: res.data.suplusCourseFee,
-                })
-                  .then(({ value }) => {
-                    scope.row.fee = value;
-                    this.leaveSchool(scope);
-                  })
-                  .catch((res) => {});
+                }).then((action) => {
+                  this.leaveSchool(scope);
+                });
               }
             });
           }
@@ -685,9 +720,9 @@ export default {
         this.$message.error("请选择一名学生");
         return;
       }
-    let str = ''
+      let str = "";
       let arr = this.deleteList.map((stu) => {
-        str += stu.userName+','
+        str += stu.userName + ",";
         return {
           vipGroupId: this.id,
           studentId: stu.id,
@@ -695,7 +730,7 @@ export default {
           onlineClassesUnitPrice: stu.onlineClassesUnitPrice,
         };
       });
-      str=str.slice(0,str.length-1)
+      str = str.slice(0, str.length - 1);
       // return;
       // let offlineClassesUnitPrice, onlineClassesUnitPrice;
       // this.maskStudentList.forEach((stu) => {

+ 1 - 3
src/views/vipClass/vipList.vue

@@ -344,7 +344,7 @@
                   >修改</el-button
                 >
                 <el-button type='text'  v-if="
-                    scope.row.vipGroupActivityId <=0 &&
+                    scope.row.vipGroupCategoryName =='乐理课' &&
                     permission('vipGroupManage/update')&&scope.row.status==1" @click="isStartCourse(scope.row)">确认成课</el-button>
               </div>
             </template>
@@ -508,8 +508,6 @@ export default {
       scope._self.$refs[scope.$index].doClose();
     },
     gotoBuildVip() {
-      let rules = JSON.stringify(this.rules);
-      let searchForm = JSON.stringify(this.searchForm);
       this.$router.push({
         path: "/business/buildVip",
       });

+ 2 - 1
src/views/withdrawal-application/index.vue

@@ -24,7 +24,7 @@
             placeholder="学员(乐团)编号"
           ></el-input>
         </el-form-item>
-                <el-form-item prop="organId">
+         <el-form-item prop="organId">
           <el-select
             class="multiple"
             style="width: 180px !important"
@@ -225,6 +225,7 @@
         :isDisabled="isDisabled"
         ref="musicForm"
       />
+       <p style="color:red;paddingLeft:150px">退费金额暂不进入账户余额</p>
       <span slot="footer" class="dialog-footer question">
         <div>
           <el-popover placement="right" width="500" trigger="click">

+ 1 - 0
src/views/workBenchManager/journal/model/musicGroup.vue

@@ -160,6 +160,7 @@
         (!isManage && musicForm.currentApproveRole == '3')
       "
     />
+     <p style="color:red;paddingLeft:150px">退费金额暂不进入账户余额</p>
     <span
       slot="footer"
       class="dialog-footer question"

+ 1 - 0
src/views/workBenchManager/journal/musicGroup.vue

@@ -173,6 +173,7 @@
               <el-input type="textarea" :disabled="showMessage.status != 'PROCESSING'"
                         v-model.trim="quitForm.reason"></el-input>
             </el-form-item>
+
           </el-form>
         <el-row v-permission="'musicGroupQuit/quitMusicGroup'">
           <el-col :span="24"

+ 1 - 1
vue.config.js

@@ -17,7 +17,7 @@ const name = defaultSettings.title || '管乐迷后台管理系统' // page titl
 // //  https://online.dayaedu.com
 // let target = 'https://online.dayaedu.com' //线上
 // let target = 'http://192.168.3.139:8000' // 箭河
-// let target = 'http://192.168.3.148:8000' //邹璇
+// let target = 'http://192.168.3.124:8000' //邹璇
 // let target = 'http://192.168.3.112:8000' //勇哥
 // let target = 'http://dev.dayaedu.com' // 开发环境
 let target = 'https://test.dayaedu.com' //测试环境

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