lex-xin 5 роки тому
батько
коміт
e930df575e
64 змінених файлів з 173 додано та 23 видалено
  1. 0 0
      dist/index.html
  2. 1 1
      dist/static/css/chunk-14254616.d896bf11.css
  3. 0 0
      dist/static/js/app.9e14def7.js
  4. 0 0
      dist/static/js/app.ba27bf2c.js
  5. 0 0
      dist/static/js/chunk-01894b84.7561f68c.js
  6. 0 0
      dist/static/js/chunk-05bea0d3.bbe77c4b.js
  7. 0 0
      dist/static/js/chunk-09753c97.a5da269b.js
  8. 0 0
      dist/static/js/chunk-1092deaa.239f747a.js
  9. 0 0
      dist/static/js/chunk-14254616.8ca0f4a1.js
  10. 0 0
      dist/static/js/chunk-1c226b1c.d6ab6b65.js
  11. 0 0
      dist/static/js/chunk-1c9ae0ee.cfd0d98a.js
  12. 0 0
      dist/static/js/chunk-24490ddc.7eb065d1.js
  13. 0 0
      dist/static/js/chunk-257cc208.01fb1698.js
  14. 0 0
      dist/static/js/chunk-2751bcc3.2f262a24.js
  15. 0 0
      dist/static/js/chunk-31362947.054c8938.js
  16. 0 0
      dist/static/js/chunk-35d7984f.0dd6bb6b.js
  17. 0 0
      dist/static/js/chunk-3661e960.9aef156c.js
  18. 0 0
      dist/static/js/chunk-38bd7fe2.9b3e4b2e.js
  19. 0 0
      dist/static/js/chunk-3e119562.e528ecf7.js
  20. 0 0
      dist/static/js/chunk-3e2f22ea.806c39ff.js
  21. 0 0
      dist/static/js/chunk-3e3440eb.220c3c38.js
  22. 0 0
      dist/static/js/chunk-4041894e.9b81cf4d.js
  23. 0 0
      dist/static/js/chunk-40e665d1.38b5fdf4.js
  24. 0 0
      dist/static/js/chunk-41f382a0.efdfa995.js
  25. 0 0
      dist/static/js/chunk-49f1f558.f80f1f77.js
  26. 0 0
      dist/static/js/chunk-4aab68d7.c9d84e39.js
  27. 0 0
      dist/static/js/chunk-523c3930.1fed680e.js
  28. 0 0
      dist/static/js/chunk-53974364.eb5e1989.js
  29. 0 0
      dist/static/js/chunk-5440ee4e.3e245947.js
  30. 0 0
      dist/static/js/chunk-56480712.7de6032d.js
  31. 0 0
      dist/static/js/chunk-5c578a77.045503ca.js
  32. 0 0
      dist/static/js/chunk-5e9eef69.27607bd3.js
  33. 0 0
      dist/static/js/chunk-5f8100bc.aeecf325.js
  34. 0 0
      dist/static/js/chunk-5fbb8ef1.bb9616ee.js
  35. 0 0
      dist/static/js/chunk-6181ddae.6f61a3ae.js
  36. 0 0
      dist/static/js/chunk-63a9c1b3.fb5aa8d6.js
  37. 0 0
      dist/static/js/chunk-6562cc02.731e01d5.js
  38. 0 0
      dist/static/js/chunk-68259a14.d970056d.js
  39. 0 0
      dist/static/js/chunk-6b55c86a.c13c46aa.js
  40. 0 0
      dist/static/js/chunk-6c42ea8e.dc9c16ed.js
  41. 0 0
      dist/static/js/chunk-6cb6556b.89541bdb.js
  42. 0 0
      dist/static/js/chunk-706f42cc.352f9b34.js
  43. 0 0
      dist/static/js/chunk-71bf792c.d1fd9e5f.js
  44. 0 0
      dist/static/js/chunk-7212fea1.5245d925.js
  45. 0 0
      dist/static/js/chunk-77d97730.df761fab.js
  46. 0 0
      dist/static/js/chunk-7ca9ecab.e19cfdc7.js
  47. 0 0
      dist/static/js/chunk-7ec4324a.ffa19c97.js
  48. 0 0
      dist/static/js/chunk-90bc8dd8.7171b934.js
  49. 0 0
      dist/static/js/chunk-918b3752.80830d3c.js
  50. 0 0
      dist/static/js/chunk-935a2cb4.919fa469.js
  51. 0 0
      dist/static/js/chunk-93886960.2cfa1f43.js
  52. 0 0
      dist/static/js/chunk-93a712fa.6b5630c2.js
  53. 0 0
      dist/static/js/chunk-96db54d2.2eccf7c3.js
  54. 0 0
      dist/static/js/chunk-ac13cdcc.cc0c15cd.js
  55. 0 0
      dist/static/js/chunk-b1e176fc.05ff6583.js
  56. 0 0
      dist/static/js/chunk-bb579d98.0285ebcb.js
  57. 0 0
      dist/static/js/chunk-bc672cf4.71ec1026.js
  58. 0 0
      dist/static/js/chunk-bdad1ada.ffdaeedc.js
  59. 0 0
      dist/static/js/chunk-d98ee362.384f5821.js
  60. 0 0
      dist/static/js/chunk-eb7895b6.68f22d1c.js
  61. 0 0
      dist/static/js/chunk-f6deba5e.8b9c5db6.js
  62. 10 0
      src/api/buildTeam.js
  63. 61 6
      src/utils/validate.js
  64. 101 16
      src/views/accompanyManager/accompanys.vue

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/index.html


+ 1 - 1
dist/static/css/chunk-77d97730.52d59aff.css → dist/static/css/chunk-14254616.d896bf11.css

@@ -1 +1 @@
-.pagination-container[data-v-31cb099a]{background:#fff;padding:32px 16px;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:center;-ms-flex-pack:center;justify-content:center}.pagination-container.hidden[data-v-31cb099a]{display:none}.titlewrap[data-v-43d9c028]{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.titlewrap[data-v-43d9c028],.wrap[data-v-43d9c028]{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}.wrap div[data-v-43d9c028]{margin-right:20px}
+.pagination-container[data-v-31cb099a]{background:#fff;padding:32px 16px;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:center;-ms-flex-pack:center;justify-content:center}.pagination-container.hidden[data-v-31cb099a]{display:none}.titlewrap[data-v-29780022]{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.titlewrap[data-v-29780022],.wrap[data-v-29780022]{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}.wrap div[data-v-29780022]{margin-right:20px}

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/app.9e14def7.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/app.ba27bf2c.js


+ 0 - 0
dist/static/js/chunk-01894b84.01e76b46.js → dist/static/js/chunk-01894b84.7561f68c.js


+ 0 - 0
dist/static/js/chunk-05bea0d3.f5767789.js → dist/static/js/chunk-05bea0d3.bbe77c4b.js


+ 0 - 0
dist/static/js/chunk-09753c97.a802036d.js → dist/static/js/chunk-09753c97.a5da269b.js


+ 0 - 0
dist/static/js/chunk-1092deaa.622f2fe7.js → dist/static/js/chunk-1092deaa.239f747a.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/chunk-14254616.8ca0f4a1.js


+ 0 - 0
dist/static/js/chunk-1c226b1c.3627aa75.js → dist/static/js/chunk-1c226b1c.d6ab6b65.js


+ 0 - 0
dist/static/js/chunk-1c9ae0ee.85c354b2.js → dist/static/js/chunk-1c9ae0ee.cfd0d98a.js


+ 0 - 0
dist/static/js/chunk-24490ddc.d49a8493.js → dist/static/js/chunk-24490ddc.7eb065d1.js


+ 0 - 0
dist/static/js/chunk-257cc208.47a4e33e.js → dist/static/js/chunk-257cc208.01fb1698.js


+ 0 - 0
dist/static/js/chunk-2751bcc3.ad4cf85d.js → dist/static/js/chunk-2751bcc3.2f262a24.js


+ 0 - 0
dist/static/js/chunk-31362947.c8f2c1b2.js → dist/static/js/chunk-31362947.054c8938.js


+ 0 - 0
dist/static/js/chunk-35d7984f.65dae5d5.js → dist/static/js/chunk-35d7984f.0dd6bb6b.js


+ 0 - 0
dist/static/js/chunk-3661e960.1adac5d0.js → dist/static/js/chunk-3661e960.9aef156c.js


+ 0 - 0
dist/static/js/chunk-38bd7fe2.c1617b38.js → dist/static/js/chunk-38bd7fe2.9b3e4b2e.js


+ 0 - 0
dist/static/js/chunk-3e119562.1b4f0d9e.js → dist/static/js/chunk-3e119562.e528ecf7.js


+ 0 - 0
dist/static/js/chunk-3e2f22ea.898fe50c.js → dist/static/js/chunk-3e2f22ea.806c39ff.js


+ 0 - 0
dist/static/js/chunk-3e3440eb.7ebf2896.js → dist/static/js/chunk-3e3440eb.220c3c38.js


+ 0 - 0
dist/static/js/chunk-4041894e.cbd9e665.js → dist/static/js/chunk-4041894e.9b81cf4d.js


+ 0 - 0
dist/static/js/chunk-40e665d1.91abae8e.js → dist/static/js/chunk-40e665d1.38b5fdf4.js


+ 0 - 0
dist/static/js/chunk-41f382a0.aa6b87f5.js → dist/static/js/chunk-41f382a0.efdfa995.js


+ 0 - 0
dist/static/js/chunk-49f1f558.4558aeb2.js → dist/static/js/chunk-49f1f558.f80f1f77.js


+ 0 - 0
dist/static/js/chunk-4aab68d7.f207d9fe.js → dist/static/js/chunk-4aab68d7.c9d84e39.js


+ 0 - 0
dist/static/js/chunk-523c3930.4f20f58d.js → dist/static/js/chunk-523c3930.1fed680e.js


+ 0 - 0
dist/static/js/chunk-53974364.df5bfbe6.js → dist/static/js/chunk-53974364.eb5e1989.js


+ 0 - 0
dist/static/js/chunk-5440ee4e.c90b9a83.js → dist/static/js/chunk-5440ee4e.3e245947.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/chunk-56480712.7de6032d.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/chunk-5c578a77.045503ca.js


+ 0 - 0
dist/static/js/chunk-5e9eef69.8642e4c7.js → dist/static/js/chunk-5e9eef69.27607bd3.js


+ 0 - 0
dist/static/js/chunk-5f8100bc.5baa9421.js → dist/static/js/chunk-5f8100bc.aeecf325.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/chunk-5fbb8ef1.bb9616ee.js


+ 0 - 0
dist/static/js/chunk-6181ddae.d432a6aa.js → dist/static/js/chunk-6181ddae.6f61a3ae.js


+ 0 - 0
dist/static/js/chunk-63a9c1b3.c274cfaf.js → dist/static/js/chunk-63a9c1b3.fb5aa8d6.js


+ 0 - 0
dist/static/js/chunk-6562cc02.522ad9b2.js → dist/static/js/chunk-6562cc02.731e01d5.js


+ 0 - 0
dist/static/js/chunk-68259a14.6ae93856.js → dist/static/js/chunk-68259a14.d970056d.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/chunk-6b55c86a.c13c46aa.js


+ 0 - 0
dist/static/js/chunk-6c42ea8e.86688b68.js → dist/static/js/chunk-6c42ea8e.dc9c16ed.js


+ 0 - 0
dist/static/js/chunk-6cb6556b.9a5acb8f.js → dist/static/js/chunk-6cb6556b.89541bdb.js


+ 0 - 0
dist/static/js/chunk-706f42cc.bee4c585.js → dist/static/js/chunk-706f42cc.352f9b34.js


+ 0 - 0
dist/static/js/chunk-71bf792c.bfaddc51.js → dist/static/js/chunk-71bf792c.d1fd9e5f.js


+ 0 - 0
dist/static/js/chunk-7212fea1.25898531.js → dist/static/js/chunk-7212fea1.5245d925.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/chunk-77d97730.df761fab.js


+ 0 - 0
dist/static/js/chunk-7ca9ecab.e5746513.js → dist/static/js/chunk-7ca9ecab.e19cfdc7.js


+ 0 - 0
dist/static/js/chunk-7ec4324a.2f79109d.js → dist/static/js/chunk-7ec4324a.ffa19c97.js


+ 0 - 0
dist/static/js/chunk-90bc8dd8.93789f50.js → dist/static/js/chunk-90bc8dd8.7171b934.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/chunk-918b3752.80830d3c.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/chunk-935a2cb4.919fa469.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/chunk-93886960.2cfa1f43.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/chunk-93a712fa.6b5630c2.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/chunk-96db54d2.2eccf7c3.js


+ 0 - 0
dist/static/js/chunk-ac13cdcc.714b56a7.js → dist/static/js/chunk-ac13cdcc.cc0c15cd.js


+ 0 - 0
dist/static/js/chunk-b1e176fc.568bb4dd.js → dist/static/js/chunk-b1e176fc.05ff6583.js


+ 0 - 0
dist/static/js/chunk-bb579d98.a9116874.js → dist/static/js/chunk-bb579d98.0285ebcb.js


+ 0 - 0
dist/static/js/chunk-bc672cf4.2cf5e48e.js → dist/static/js/chunk-bc672cf4.71ec1026.js


+ 0 - 0
dist/static/js/chunk-bdad1ada.6f30d71d.js → dist/static/js/chunk-bdad1ada.ffdaeedc.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/chunk-d98ee362.384f5821.js


+ 0 - 0
dist/static/js/chunk-eb7895b6.56d7f3f7.js → dist/static/js/chunk-eb7895b6.68f22d1c.js


+ 0 - 0
dist/static/js/chunk-f6deba5e.48bbea71.js → dist/static/js/chunk-f6deba5e.8b9c5db6.js


+ 10 - 0
src/api/buildTeam.js

@@ -1093,3 +1093,13 @@ export function getStuAndTeaReview(data) {
   })
 }
 
+// 网管课有效期调整
+export function updateCoursesExpireDate(data) { 
+  return request({
+    url: api + '/courseSchedule/updateCoursesExpireDate',
+    method: 'post',
+    data: qs.stringify(data)
+  })
+}
+
+

+ 61 - 6
src/utils/validate.js

@@ -29,11 +29,11 @@ export function isvalidPhone(str) {
 export function vaildStudentUrl() {
   let url = window.location.href
   let returnUrl = ''
-  if(/test/.test(url)) { // test环境
+  if (/test/.test(url)) { // test环境
     returnUrl = 'http://mstutest.dayaedu.com'
-  } else if(/dev/.test(url)) { // dev 环境
+  } else if (/dev/.test(url)) { // dev 环境
     returnUrl = 'http://mstudev.dayaedu.com'
-  } else if(/online/.test(url)) { //线上
+  } else if (/online/.test(url)) { //线上
     returnUrl = 'https://mstuonline.dayaedu.com'
   } else { // 默认dev环境
     returnUrl = 'http://mstudev.dayaedu.com'
@@ -45,14 +45,69 @@ export function vaildStudentUrl() {
 export function vaildTeacherUrl() {
   let url = window.location.href
   let returnUrl = ''
-  if(/test/.test(url)) { // test环境
+  if (/test/.test(url)) { // test环境
     returnUrl = 'http://mteatest.dayaedu.com'
-  } else if(/dev/.test(url)) {// dev 环境
+  } else if (/dev/.test(url)) { // dev 环境
     returnUrl = 'http://mteadev.dayaedu.com'
-  } else if(/online/.test(url)) {//线上
+  } else if (/online/.test(url)) { //线上
     returnUrl = 'https://mteaonline.dayaedu.com'
   } else { // 默认dev环境
     returnUrl = 'http://mteadev.dayaedu.com'
   }
   return returnUrl
 }
+
+
+export function nextMonthLastDay(year, month) { //日期显示为次月最后一天
+  // var time = date ? new Date(date) : new Date();
+  // var year = time.getFullYear();
+  // //var year = 1900; //用于测试
+  // var month = time.getMonth() + 2;
+  if (month > 12) {
+
+    month = month - 12;
+
+    year = year + 1;
+
+  }
+
+  var day = nextMonthDay(year, month);
+
+  return [year, month, day];
+
+}
+
+function nextMonthDay(year, month) { //判断每月多少天
+
+  var day31 = [1, 3, 5, 7, 8, 10, 12];
+
+  var day30 = [4, 6, 9, 11];
+
+  if (day31.indexOf(month) > -1) {
+
+    return 31;
+
+  } else if (day30.indexOf(month) > -1) {
+
+    return 30;
+
+  } else {
+
+    if (isLeapYear(year)) {
+
+      return 29;
+
+    } else {
+
+      return 28;
+
+    }
+
+  }
+
+}
+
+function isLeapYear(year) { //判断是否为闰年
+  return (year % 4 == 0) && (year % 100 != 0 || year % 400 == 0);
+
+}

+ 101 - 16
src/views/accompanyManager/accompanys.vue

@@ -27,10 +27,11 @@
         v-permission="'courseSchedule/batchUpdateCourseSchedule'"
         @click="adjustment"
       >批量调整</div>
-      <!-- <div class="newBand"
+
+      <div class="newBand"
         v-permission="'courseSchedule/updateCoursesExpireDate'"
-        @click="onCourseExpireDate"
-      >有效期调整</div> -->
+        @click="expireVisible = true"
+      >有效期调整</div>
     </div>
     
     <div class="tableWrap">
@@ -92,28 +93,24 @@
             <div>
               <el-button
                 type="text"
-                v-permission="'courseSchedule/classStartDateAdjust'"
-                v-show="!scope.row.isSettlement"
+                v-if="!scope.row.isSettlement && permission('courseSchedule/classStartDateAdjust')"
                 @click="resetClass(scope.row)"
               >调整</el-button>
               <el-button
                 type="text"
-                v-permission="'accompanys/remove'"
-                v-show="!scope.row.isSettlement && scope.row.status == 'NOT_START'"
+                v-if="!scope.row.isSettlement && scope.row.status == 'NOT_START' && permission('accompanys/remove')"
                 @click="removeClass(scope.row)"
               >删除</el-button>
               <el-button
-                v-permission="'courseSchedule/practiceCourseTeacherAdjust'"
                 type="text"
-                v-show="scope.row.status == 'NOT_START'&&courseType!='TRIAL'"
+                v-if="scope.row.status == 'NOT_START'&&courseType!='TRIAL'&& permission('courseSchedule/practiceCourseTeacherAdjust')"
                 @click="resetTeacher(scope.row)"
               >更换老师</el-button>
-              <!-- <el-button v-if="scope.row.status == 'OVER' && !scope.row.settlementTime && permission('teacherAttendance/updateTeacherAttendance', '/teamCourseList')" type="text" @click="onMarkAttendance(scope.row)"
-              >补考勤</el-button> -->
+              <el-button v-if="scope.row.status == 'OVER' && scope.row.isSettlement == 0 && permission('teacherAttendance/updateTeacherAttendance', '/accompanys')" type="text" @click="onMarkAttendance(scope.row)"
+              >补考勤</el-button>
               <el-button
                 type="text"
-                v-permission="'accompanys/cleanAttendance'"
-                v-show="!scope.row.isSettlement"
+                v-if="!scope.row.isSettlement && permission('accompanys/cleanAttendance')"
                 @click="clearAttend(scope.row)"
               >清除考勤</el-button>
             </div>
@@ -128,6 +125,31 @@
         @pagination="getList"
       />
     </div>
+    <el-dialog title="有效期调整" width="400px" :before-close="expireClose" :visible.sync="expireVisible">
+      <el-form
+        :model="expireForm"
+        ref="expireForm"
+        :rules="expireRules"
+        label-position="right"
+        label-width="80px;"
+        :inline="true">
+        <el-form-item label="课程结束时间" prop="coursesExpireDate">
+          <el-date-picker
+            v-model.trim="expireForm.coursesExpireDate"
+            style="width:200px!important;"
+            type="date"
+            :picker-options="bigin"
+            value-format="yyyy-MM-dd"
+            placeholder="选择日期"
+          ></el-date-picker>
+        </el-form-item >
+        <div style="padding-left: 15px; color: red;">课程结束时间不得早于,{{ expireForm.tempCoursesExpireDate }}</div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="expireVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitExpireDate">确 定</el-button>
+      </div>
+    </el-dialog>
     <el-dialog title="补考勤" width="400px" :visible.sync="markAttendance.status">
       <el-form>
         <el-form-item label="签到状态">{{ markAttendance.dataInfo.isSignIn | attendanceType }}</el-form-item>
@@ -364,6 +386,7 @@
 <script>
 import pagination from "@/components/Pagination/index";
 import { permission } from "@/utils/directivePage";
+import { nextMonthLastDay } from "@/utils/validate";
 import {
   findPracticeGroupCourseSchedules,
   practiceCourseAdjus,
@@ -377,13 +400,15 @@ import {
   batchUpdateCourseSchedule,
   findEducationUsers,
   updateTeacherAttendance,
-  superFindCourseSchedules
+  superFindCourseSchedules,
+  updateCoursesExpireDate
 } from "@/api/buildTeam";
 import {
   vipCourseAdjust,
   batchAppendVipGroupCourses,
   bathDelete
 } from "@/api/vipSeting";
+// import { start } from 'repl';
 export default {
   components: {
     pagination
@@ -393,6 +418,7 @@ export default {
       adjustmentName: "",
       isaddCourse: false,
       adjustmentVisible: false,
+      expireVisible: false,
       isMultiple: true,
       name: "网管课程组",
       courseVisible: false,
@@ -428,6 +454,13 @@ export default {
         fee: ""
       },
       startTime: null,
+      expireForm: {
+        coursesExpireDate: null,
+        tempCoursesExpireDate: null
+      },
+      expireRules: {
+        coursesExpireDate: [{ required: true, message: "请选择课程结束时间", trigger: "blur" }]
+      },
       maskRules: {
         date: [{ required: true, message: "请选择上课时间", trigger: "blur" }],
         // startTime: [{ required: true, message: '请选择上课开始时间', trigger: 'blur' },],
@@ -479,12 +512,12 @@ export default {
       activeList: [],
       educationList: [],
       timers: null,
-      courseExpireDate: null, // 结束时间
       markAttendance: {
         // 考勤状态
         status: false,
         dataInfo: {}
       },
+      bigin: this.beginDate()
     };
   },
   mounted() {
@@ -540,7 +573,18 @@ export default {
               this.courseData[0].coursesStartDate.substring(0, 10) +
               "至" +
               this.courseData[0].coursesExpireDate.substring(0, 10);
-            this.courseExpireDate = this.courseData[0].coursesExpireDate.substring(0, 10);
+            this.expireForm.coursesExpireDate = this.courseData[0].coursesExpireDate.substring(0, 10);
+            let originalStartDate = this.courseData[0].coursesStartDate ? new Date(this.courseData[0].coursesStartDate) : new Date()
+            let buyMonths = this.courseData[0].buyMonths
+            let lastDayNum = nextMonthLastDay(originalStartDate.getFullYear(), (originalStartDate.getMonth() + buyMonths + 1))
+            if(lastDayNum[2] >= originalStartDate.getDate()) {
+              originalStartDate.setMonth(originalStartDate.getMonth() + buyMonths)
+            } else {
+              originalStartDate = new Date(lastDayNum.join('-'))
+            }
+            // originalStartDate.setDate(originalStartDate.getDate() - 1)
+            let overTime = originalStartDate.getFullYear() + '-' + (originalStartDate.getMonth() + 1) + '-' + originalStartDate.getDate()
+            this.expireForm.tempCoursesExpireDate = overTime
           }
         }
       });
@@ -548,6 +592,40 @@ export default {
     permission(str, parent) {
       return permission(str, parent);
     },
+    beginDate () {
+      let self = this
+      return {
+        disabledDate (time) {
+          if (self.expireForm.tempCoursesExpireDate) {
+            return new Date(self.expireForm.tempCoursesExpireDate).getTime() > time.getTime()
+          } else {
+            return time.getTime() >= Date.now()
+            //开始时间不选时,结束时间最大值小于等于当天
+          }
+        }
+      }
+    },
+    submitExpireDate() {
+      this.$refs.expireForm.validate(some => {
+        if (some) {
+          updateCoursesExpireDate({
+            practiceGroupId: this.practiceId,
+            coursesExpireDate: this.expireForm.coursesExpireDate
+          }).then(res => {
+            if (res.code == 200) {
+              this.$message.success("有效期修改成功")
+              this.expireVisible = false
+              this.getCourseGroup()
+            } else {
+              this.$message.error(res.msg)
+            }
+          })
+        } else {
+          return;
+        }
+      });
+      
+    },
     onMarkAttendance(item) {
       // 补考勤
       this.markAttendance = {
@@ -604,6 +682,13 @@ export default {
       };
       this.$refs["maskForm"].resetFields();
     },
+    expireClose() {
+      this.expireVisible = false;
+      this.expireForm = {
+        coursesExpireDate: null
+      };
+      this.$refs["expireForm"].resetFields();
+    },
     submitResetClass() {
       //   endClassTimeStr: this.maskForm.endTime,
       if (!this.startTime) {

Деякі файли не було показано, через те що забагато файлів було змінено