Selaa lähdekoodia

Merge branch 'master' into 03/03Lebao

lex-xin 4 vuotta sitten
vanhempi
commit
9cbd91e736
86 muutettua tiedostoa jossa 436 lisäystä ja 193 poistoa
  1. 0 0
      dist/index.html
  2. 0 0
      dist/static/css/app.4661845f.css
  3. 0 0
      dist/static/css/chunk-037c64f8.df1923e9.css
  4. 0 1
      dist/static/css/chunk-18bd2700.9face53c.css
  5. 0 0
      dist/static/css/chunk-31c9df52.d96bf91c.css
  6. 0 0
      dist/static/css/chunk-41b8b496.fa3f7bae.css
  7. 0 0
      dist/static/css/chunk-43c09ad0.34527248.css
  8. 0 0
      dist/static/css/chunk-53e17d9f.65b4148a.css
  9. 1 0
      dist/static/css/chunk-5b1fcc5a.ce348967.css
  10. 0 0
      dist/static/css/chunk-65d5f8fc.1972779a.css
  11. 0 0
      dist/static/css/chunk-7d5bf410.b273319a.css
  12. 0 0
      dist/static/css/chunk-bf85971a.0adeff11.css
  13. 0 0
      dist/static/js/app.a4cfe96a.js
  14. 0 0
      dist/static/js/app.c10b3c21.js
  15. 0 0
      dist/static/js/chunk-037c64f8.a7050e71.js
  16. 0 0
      dist/static/js/chunk-18bd2700.24adc5fc.js
  17. 0 0
      dist/static/js/chunk-1b5749db.94b55c9d.js
  18. 0 0
      dist/static/js/chunk-1b5749db.ed72d493.js
  19. 0 0
      dist/static/js/chunk-2a90eb6d.e13d868c.js
  20. 0 0
      dist/static/js/chunk-31c9df52.8af750ac.js
  21. 0 0
      dist/static/js/chunk-359433da.919f3e2f.js
  22. 0 0
      dist/static/js/chunk-359433da.cf628b5c.js
  23. 0 0
      dist/static/js/chunk-398fdb18.7835224b.js
  24. 0 0
      dist/static/js/chunk-398fdb18.844a2474.js
  25. 0 0
      dist/static/js/chunk-41b8b496.0f1065c8.js
  26. 0 0
      dist/static/js/chunk-43358ef0.4af825b4.js
  27. 0 0
      dist/static/js/chunk-43c09ad0.96a66b0a.js
  28. 0 0
      dist/static/js/chunk-4b7354eb.7ef6ccb1.js
  29. 0 0
      dist/static/js/chunk-53e17d9f.bdf23643.js
  30. 0 0
      dist/static/js/chunk-5b1fcc5a.d5e209d0.js
  31. 0 0
      dist/static/js/chunk-6541b5d8.78754e03.js
  32. 0 0
      dist/static/js/chunk-6541b5d8.f7d147d0.js
  33. 0 0
      dist/static/js/chunk-65d5f8fc.0efa7ee9.js
  34. 0 0
      dist/static/js/chunk-787a507d.34bec687.js
  35. 0 0
      dist/static/js/chunk-787a507d.974b7fb5.js
  36. 0 0
      dist/static/js/chunk-7d5bf410.590d7196.js
  37. 0 0
      dist/static/js/chunk-92c25d3e.90ca1d53.js
  38. 0 0
      dist/static/js/chunk-bf6f74a4.a850d59d.js
  39. 0 0
      dist/static/js/chunk-bf85971a.9a610abe.js
  40. 0 0
      dist/static/js/chunk-c38de4c8.c2e486df.js
  41. 0 0
      dist/static/js/chunk-d393573c.6648f5c2.js
  42. 0 0
      dist/static/js/chunk-d5006d16.1bf0c347.js
  43. 0 0
      dist/static/js/chunk-d5006d16.c2db8588.js
  44. 0 0
      dist/static/js/chunk-ede6ad82.0870ce42.js
  45. 0 0
      dist/static/js/chunk-ede6ad82.b3515ae7.js
  46. 2 2
      src/layout/components/TagsView.vue
  47. 6 1
      src/main.js
  48. 1 0
      src/permission.js
  49. 1 0
      src/router/index.js
  50. 1 0
      src/router/notKeepAliveList.js
  51. 3 2
      src/store/modules/tagsView.js
  52. 2 2
      src/utils/directivePage.js
  53. 0 1
      src/views/arrearage-students/modals/list.vue
  54. 39 2
      src/views/buildVip/index.vue
  55. 7 0
      src/views/categroyManager/vipActiveList.vue
  56. 6 1
      src/views/categroyManager/vipNewActive.vue
  57. 1 1
      src/views/main/baseinfo/business.vue
  58. 1 1
      src/views/main/baseinfo/curriculum.vue
  59. 2 2
      src/views/main/baseinfo/management.vue
  60. 17 8
      src/views/main/baseinfo/student.vue
  61. 8 7
      src/views/main/constant.js
  62. 4 3
      src/views/recodeManager/recodeList.vue
  63. 1 2
      src/views/serverDetail/conponent/afterWork.vue
  64. 0 2
      src/views/serverDetail/conponent/outWork.vue
  65. 0 1
      src/views/serverDetail/conponent/serverMask.vue
  66. 3 3
      src/views/serverDetail/index.vue
  67. 1 1
      src/views/stuRecodeManager/index.vue
  68. 1 1
      src/views/studentManager/components/studentRecord.vue
  69. 1 1
      src/views/teacherManager/teacherDetail/components/resetComponent.vue
  70. 1 1
      src/views/teacherManager/teacherDetail/components/teacherNetwork.vue
  71. 36 9
      src/views/teacherManager/teacherDetail/components/teacherRecord.vue
  72. 2 2
      src/views/teacherManager/teacherOperation/components/salarySet.vue
  73. 8 0
      src/views/teamBuild/api.js
  74. 17 1
      src/views/teamBuild/forecastName.vue
  75. 54 0
      src/views/teamBuild/modals/intention.vue
  76. 154 111
      src/views/teamBuild/signupList.vue
  77. 6 2
      src/views/teamDetail/componentCourse/infoMsg.vue
  78. 1 1
      src/views/teamDetail/componentCourse/studentRollCall.vue
  79. 6 4
      src/views/teamDetail/componentCourse/studentWork.vue
  80. 7 10
      src/views/teamDetail/componentCourse/teacherList.vue
  81. 8 4
      src/views/teamDetail/components/courseList.vue
  82. 0 1
      src/views/teamDetail/components/modals/change-teacher.vue
  83. 1 0
      src/views/teamDetail/teamCourseList.vue
  84. 25 0
      src/views/teamDetail/teamList.vue
  85. 1 1
      src/views/withdrawal-application/modals/record.vue
  86. 0 1
      vue.config.js

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/index.html


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/css/app.4661845f.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/css/chunk-037c64f8.df1923e9.css


+ 0 - 1
dist/static/css/chunk-18bd2700.9face53c.css

@@ -1 +0,0 @@
-.process[data-v-f049a426]{padding:10px;max-height:600px;overflow-y:auto}.dialog-footer[data-v-7a44cd83]{margin-top:20px;display:block;text-align:right}.select[data-v-a9e5c25c]{font-size:14px}.btnList[data-v-a9e5c25c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.btnList div[data-v-a9e5c25c]{margin-right:15px}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/css/chunk-31c9df52.d96bf91c.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/css/chunk-41b8b496.fa3f7bae.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/css/chunk-43c09ad0.34527248.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/css/chunk-53e17d9f.65b4148a.css


+ 1 - 0
dist/static/css/chunk-5b1fcc5a.ce348967.css

@@ -0,0 +1 @@
+.process[data-v-f049a426]{padding:10px;max-height:600px;overflow-y:auto}.dialog-footer[data-v-7a44cd83]{margin-top:20px;display:block;text-align:right}[data-v-078f879e] .el-button+.el-button{margin-left:0}.select[data-v-078f879e]{font-size:14px}.btnList[data-v-078f879e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.btnList div[data-v-078f879e]{margin-right:15px}

+ 0 - 0
dist/static/css/chunk-431b1f36.1972779a.css → dist/static/css/chunk-65d5f8fc.1972779a.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/css/chunk-7d5bf410.b273319a.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/css/chunk-bf85971a.0adeff11.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/app.a4cfe96a.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/app.c10b3c21.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-037c64f8.a7050e71.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-18bd2700.24adc5fc.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-1b5749db.94b55c9d.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-1b5749db.ed72d493.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-2a90eb6d.e13d868c.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-31c9df52.8af750ac.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-359433da.919f3e2f.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-359433da.cf628b5c.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-398fdb18.7835224b.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-398fdb18.844a2474.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-41b8b496.0f1065c8.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-43358ef0.4af825b4.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-43c09ad0.96a66b0a.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-4b7354eb.7ef6ccb1.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-53e17d9f.bdf23643.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-5b1fcc5a.d5e209d0.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-6541b5d8.78754e03.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-6541b5d8.f7d147d0.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-65d5f8fc.0efa7ee9.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-787a507d.34bec687.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-787a507d.974b7fb5.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-7d5bf410.590d7196.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-92c25d3e.90ca1d53.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-bf6f74a4.a850d59d.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-bf85971a.9a610abe.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-c38de4c8.c2e486df.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-d393573c.6648f5c2.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-d5006d16.1bf0c347.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-d5006d16.c2db8588.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-ede6ad82.0870ce42.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-ede6ad82.b3515ae7.js


+ 2 - 2
src/layout/components/TagsView.vue

@@ -117,7 +117,6 @@ export default {
       const allSearch = searchs.getSearchs();
 
       const sks = Object.keys(allSearch);
-      console.log(sks)
       let route = this.$route;
       for (const item of sks) {
        if (!(keys.includes(item) || keys.includes(allSearch[item].bind))) {
@@ -174,7 +173,8 @@ export default {
             if (latestView) {
               this.$router.push(latestView.fullPath);
             } else {
-              this.$router.push("/");
+              let firstMenuUrl = localStorage.getItem('firstMenuUrl')
+              this.$router.push(firstMenuUrl || '/');
             }
           }
         });

+ 6 - 1
src/main.js

@@ -5,7 +5,7 @@ import dayjs from 'dayjs'
 import numeral from 'numeral'
 import lodash from 'lodash'
 import qs from 'qs'
-import { permission } from "@/utils/directivePage";
+import { permission,getFullPermission } from "@/utils/directivePage";
 
 import * as constant from '@/constant'
 
@@ -120,6 +120,7 @@ Vue.mixin({
         lodash,
         qs,
         permission,
+
       }
     },
     $constant() {
@@ -130,6 +131,10 @@ Vue.mixin({
     changeHash(value) {
       const origin = window.location.origin
       history.replaceState("", "", `${origin}/#${this.$route.path}?opt=${value}`)
+    },
+    getFullPermission(str){
+      let routeName = this.$route.path
+      return str+routeName
     }
   }
 })

+ 1 - 0
src/permission.js

@@ -88,6 +88,7 @@ router.beforeEach(async (to, from, next) => {
           // 确保addroutes完整的hack方法
           // 设置replace:true,这样导航就不会留下历史记录。
           let firstMenu = getFirstMenu(accessRoutes)
+          localStorage.setItem('firstMenuUrl', firstMenu)
           if(to.path == '/main/main') {
             next({ path: firstMenu, replace: true })
           } else {

+ 1 - 0
src/router/index.js

@@ -249,6 +249,7 @@ export const asyncRoutes = {
   teamTeacherRecord: () => import('@/views/teamDetail/components/teamTeacherRecord'),
   // 乐团筹备中 报名中
   signupList: () => import('@/views/teamBuild/signupList'),
+  remedy:() => import('@/views/teamBuild/signupList'),
   // 乐团筹备设置 (班级 老师 小课)
   teamSeting: () => import('@/views/teamBuild/teamSeting/'),
   //乐团详情

+ 1 - 0
src/router/notKeepAliveList.js

@@ -100,5 +100,6 @@ export default [
   '/business/teacherOperationUpdate',
   '/business/ArrearageStudents',
   '/operateManager/serverDetail', // 服务指标明细
+  '/business/remedy', //
   // '/business/feeAudit',
 ]

+ 3 - 2
src/store/modules/tagsView.js

@@ -30,11 +30,12 @@ const tagsView = {
       // }
     },
     DEL_VISITED_VIEWS: (state, view) => {
+      let firstMenuUrl = localStorage.getItem('firstMenuUrl')
+      let compareUrl = firstMenuUrl || '/main/main'
       for (const [i, v] of state.visitedViews.entries()) {
 
         if (v.path === view.path) {
-
-          if (state.visitedViews.length == 1 && state.visitedViews[0].path == '/main/main') {
+          if (state.visitedViews.length == 1 && state.visitedViews[0].path == compareUrl) {
             break
           } else {
 

+ 2 - 2
src/utils/directivePage.js

@@ -23,5 +23,5 @@ export function permission(value, parent) {
     } else {
         return false
     }
-    
-}
+
+}

+ 0 - 1
src/views/arrearage-students/modals/list.vue

@@ -89,7 +89,6 @@
       </el-table-column>
     </el-table>
     <pagination
-      sync
       :total.sync="rules.total"
       :page.sync="rules.page"
       :limit.sync="rules.limit"

+ 39 - 2
src/views/buildVip/index.vue

@@ -96,7 +96,7 @@
               v-model.trim="leftForm.courseType"
               clearable
               filterable
-              :disabled="!leftForm.classOrganId"
+              :disabled="!leftForm.classOrganId || !leftForm.teacher"
               @change="changeType"
             >
               <el-option
@@ -266,6 +266,7 @@
             <el-input
               v-model.trim="centerForm.onlineCourseNum"
               @mousewheel.native.prevent
+              @input="onCourseNumChange('online')"
               type="number"
             >
               <template slot="append">节</template>
@@ -275,6 +276,7 @@
             <el-input
               v-model.trim="centerForm.offlineCourseNum"
               @mousewheel.native.prevent
+              @input="onCourseNumChange('offline')"
               type="number"
             >
               <template slot="append">节</template>
@@ -683,6 +685,7 @@ export default {
       hotType: "",
       attribute1: "",
       attribute2: "",
+      attribute3: "",
       salaryReadonlyFlag: "", // 老师课酬是否可配
       paymentReadonlyFlag: "", // 课程单价是否可配
       lookList: [],
@@ -814,6 +817,8 @@ export default {
         this.giveNum = giveNum || 0;
 
         return parseInt(offline) + parseInt(online) + "+" + giveNum || "";
+      } else if(this.hotType == 'DISCOUNT' && this.attribute3  && this.attribute3 > 0) {
+        return parseInt(this.attribute3)
       }
       return parseInt(offline) + parseInt(online) || "";
     },
@@ -863,6 +868,23 @@ export default {
       this.pickerOptions1 = this.processDate();
       this.courseOption = this.coursesDate();
     },
+    onCourseNumChange(type) {
+      let centerForm = this.centerForm
+      // 折扣类型,并且设置的排课数有值
+      if(this.hotType == 'DISCOUNT' && this.attribute3 && this.attribute3 > 0) {
+        // 判断线上或线下总和等于排课次数
+        // console.log((parseInt(centerForm.onlineCourseNum) + parseInt(centerForm.offlineCourseNum)), this.attribute3)
+        let onlineNum = centerForm.onlineCourseNum || 0
+        let offlineNum = centerForm.offlineCourseNum || 0
+        if((parseInt(onlineNum) + parseInt(offlineNum)) > this.attribute3) {
+          if(type == 'online') {
+            this.$message.error('线上课数加线下课数必须等于待排课数')
+          } else if(type == 'offline') {
+            this.$message.error('线上课数加线下课数必须等于待排课数')
+          }
+        }
+      }
+    },
     coursesDate() {
       let self = this;
       return {
@@ -951,7 +973,7 @@ export default {
       }
       // teacherId
 
-      if (this.leftForm.courseType) {
+      if (this.leftForm.courseType && this.leftForm.teacher) {
         // 根据课程类型获取活动方案
         vipGroupActivityFind({
           categoryId: this.leftForm.courseType,
@@ -973,6 +995,7 @@ export default {
       this.timeTable = [];
       this.attribute1 = "";
       this.attribute2 = "";
+      this.attribute3 = ""
       this.giveNum = 0;
       this.isGiveClass = false;
       this.leftForm.courseStart = "";
@@ -1003,6 +1026,7 @@ export default {
         // 根须活动id获取 相应的值
         for (let i in this.activeList) {
           if (this.activeList[i].id == val) {
+            console.log(this.activeList[i])
             // 如果是买赠就必须选择赠课类型
             // 报名开始 报名结束 课程开始 课程结束 // 判断是否有线上,线下课 并同步状态
             // this.leftForm.signUpStart = this.activeList[i].startTime;
@@ -1014,6 +1038,7 @@ export default {
             // 获取买赠必要参数
             this.attribute1 = this.activeList[i].attribute1;
             this.attribute2 = this.activeList[i].attribute2;
+            this.attribute3 = this.activeList[i].attribute3;
             // 存储课酬是否可配置
             this.salaryReadonlyFlag = this.activeList[i].salaryReadonlyFlag;
             this.paymentReadonlyFlag = this.activeList[i].paymentReadonlyFlag;
@@ -1630,8 +1655,20 @@ export default {
         this.$message.error("您还未选择赠课类型");
         return;
       }
+
       this.$refs["leftForm"].validate((vali) => {
         if (vali) {
+
+          let centerForm = this.centerForm
+          if(this.hotType == 'DISCOUNT' && this.attribute3 && this.attribute3 > 0) {
+            // 判断线上或线下总和大于排课次数
+            let onlineNum = centerForm.onlineCourseNum || 0
+            let offlineNum = centerForm.offlineCourseNum || 0
+            if((parseInt(onlineNum) + parseInt(offlineNum)) != this.attribute3) {
+              this.$message.error('线上课数加线下课数必须等于待排课数')
+              return
+            }
+          }
           this.dialogFormVisible = true;
         }
       });

+ 7 - 0
src/views/categroyManager/vipActiveList.vue

@@ -425,6 +425,12 @@
               >
                 <template slot="append">%</template>
               </el-input>
+              <el-input v-if="activeType=='DISCOUNT'"
+                      v-model.number="attribute3"
+                      type="number"
+                      style="margin-left: 10px;width:200px!important"
+                      placeholder="请输入课时数">
+              </el-input>
             </div>
             <div>
               <div
@@ -866,6 +872,7 @@ export default {
       this.activeType = row.type;
       this.attribute1 = row.attribute1;
       this.attribute2 = row.attribute2;
+      this.attribute3 = row.attribute3;
       this.giveClassPaySalaryFlag =
         row.giveClassPaySalaryFlag == 1 ? true : false;
     },

+ 6 - 1
src/views/categroyManager/vipNewActive.vue

@@ -21,7 +21,6 @@
                       prop="organ">
           <el-select v-model.trim="vipform.organ"
                      multiple
-
                      filterable
                      @visible-change="$forceUpdate()"
                      @change="onOrganChange"
@@ -199,6 +198,12 @@
                       placeholder="请输入折扣数值">
               <template slot="append">%</template>
             </el-input>
+            <el-input v-if="activeType=='DISCOUNT'"
+                      v-model.number="attribute3"
+                      type="number"
+                      style="margin-left: 10px;width:200px!important"
+                      placeholder="请输入课时数">
+            </el-input>
           </div>
           <div>
             <div class="head"

+ 1 - 1
src/views/main/baseinfo/business.vue

@@ -104,7 +104,7 @@ export default {
             return [
               item[0].axisValueLabel,
               ...item.map(
-                (d) => `<br/>${d.marker}${d.seriesName}: ${d.value} %`
+                (d) => `<br/>${d.marker}${d.seriesName}: ${d.value[1]} %`
               ),
             ].join("");
           },

+ 1 - 1
src/views/main/baseinfo/curriculum.vue

@@ -165,7 +165,7 @@ export default {
             return [
               item[0].axisValueLabel,
               ...item.map(
-                (d) => `<br/>${d.marker}${d.seriesName}: ${d.value} %`
+                (d) => `<br/>${d.marker}${d.seriesName}: ${d.value[1]}节`
               ),
             ].join("");
           },

+ 2 - 2
src/views/main/baseinfo/management.vue

@@ -30,7 +30,7 @@
           </el-tooltip>
         </span>
         <span>
-          <count-to :endVal="item.percent" :decimals="2" />
+          <count-to :endVal="item.percent" :decimals="2" />
         </span>
       </statistic-item>
     </statistic>
@@ -118,7 +118,7 @@ export default {
               ...item.map((d) => {
                 return `<br/>${d.marker}${
                   d.seriesName
-                }: ${this.$helpers.numeral(d.value[1]).format("0,0.00")}`;
+                }: ${this.$helpers.numeral(d.value[1]).format("0,0.00")}`;
               }),
             ].join("");
           },

+ 17 - 8
src/views/main/baseinfo/student.vue

@@ -67,7 +67,7 @@ export default {
   props: ["data", "search"],
   components: {
     "ve-funnel": veFunnel,
-      "ve-line": veLine,
+    "ve-line": veLine,
     "count-to": countTo,
     searchHeader,
   },
@@ -92,17 +92,17 @@ export default {
     },
     chartExtend() {
       return {
-          yAxis: {
+        yAxis: {
           //纵轴标尺固定
-          minInterval:1,
+          minInterval: 1,
           type: "value",
           scale: true,
           min: 0,
-            axisLabel:{
-            formatter:'{value}人'
-          }
+          axisLabel: {
+            formatter: "{value}人",
+          },
         },
-          series: {
+        series: {
           smooth: false,
         },
         tooltip: {
@@ -112,6 +112,14 @@ export default {
               color: "rgba(150,150,150,0.2)",
             },
           },
+          formatter: (item) => {
+            return [
+              item[0].axisValueLabel,
+              ...item.map(
+                (d) => `<br/>${d.marker}${d.seriesName}: ${d.value[1]}人`
+              ),
+            ].join("");
+          },
         },
       };
     },
@@ -209,7 +217,8 @@ export default {
         const res = await getIndex({
           ...rest,
           ...getTimes(this.mdate, ["startDate", "endDate"]),
-           dataTypes:'ADD_STUDENT_REGISTRATION_NUM,MUSIC_GROUP_STUDENT,NEWLY_STUDENT_NUM,QUIT_MUSIC_GROUP_STUDENT_NUM,VIP_PRACTICE_STUDENT_NUM,VIP_PRACTICE_ADD_STUDENT_NUM'
+          dataTypes:
+            "ADD_STUDENT_REGISTRATION_NUM,MUSIC_GROUP_STUDENT,NEWLY_STUDENT_NUM,QUIT_MUSIC_GROUP_STUDENT_NUM,VIP_PRACTICE_STUDENT_NUM,VIP_PRACTICE_ADD_STUDENT_NUM",
         });
         for (const item of res.data) {
           // 再循环一遍

+ 8 - 7
src/views/main/constant.js

@@ -10,11 +10,11 @@ export const descs = {
   FULL_TIME_NUM: '截止到昨日,非冻结、离职时间在昨日之后,且工作类型为【全职】的老师总数',
   PART_TIME_NUM: '截止到昨日,非冻结、离职时间在昨日之后,且工作类型为【兼职】的老师总数',
   SURPLUS_COURSE_NUM: '截止到昨日,系统中【未开始】课程总数(乐团+VIP+网管)【不包括试听课】',
-  SURPLUS_MUSIC_COURSE_NUM: '截止到昨日,系统中【未开始】乐团课程总数',
+  SURPLUS_MUSIC_COURSE_NUM: '截止到昨日,系统乐团【未开始】课程总数',
   SURPLUS_VIP_COURSE_NUM: '截止到昨日,系统中【未开始】VIP课程总数',
   SURPLUS_PRACTICE_COURSE_NUM: '截止到昨日,系统中【未开始】网管课程总数',
   OVER_COURSE_NUM: '截止到昨日,系统中【已结束】课程总数(乐团+VIP+网管)【不包括试听课】',
-  OVER_MUSIC_COURSE_NUM: '截止到昨日,系统中【已结束】乐团课程总数',
+  OVER_MUSIC_COURSE_NUM: '截止到昨日,系统中乐团【已结束】课程总数',
   OVER_VIP_COURSE_NUM: '截止到昨日,系统中【已结束】VIP课程总数',
   OVER_PRACTICE_COURSE_NUM: '截止到昨日,系统中【已结束】网管课程总数',
   FINANCE_PAY: '筛选时间段内支出金额总和',
@@ -34,9 +34,9 @@ export const descs = {
   VIP_PRACTICE_ADD_STUDENT_NUM: '筛选时间段内,新增的VIP/网管课付费学员总数',
   MUSIC_PATROL_ITEM:'乐团主管提交的巡查表中有未勾选事项',
   HIGH_CLASS_STUDENT_LESS_THAN_THREE:'基础技能班学员数量<3',
-  STUDENT_NOT_PAYMENT:'当前时间以前的缴费项目中学员未缴费',
-  STUDENT_APPLY_FOR_QUIT_MUSIC_GROUP:'学员提交退团申请',
-  TEACHER_EXPECT_SALARY_BE_LOW:'老师预计课酬未达到系统设置的分部基本课酬标准',
+  STUDENT_NOT_PAYMENT:'当前时间以前的缴费项目中未缴费学员数量',
+  STUDENT_APPLY_FOR_QUIT_MUSIC_GROUP:'未处理的学员退团申请数量',
+  TEACHER_EXPECT_SALARY_BE_LOW:'本月预计课酬未达到系统设置的分部基本课酬标准的老师人数',
   INSPECTION_ITEM:'乐团主管未完成巡查计划安排',
   INSPECTION_ITEM_PLAN:'乐团主管已安排的巡查任务未提交',
   STUDENT_VISIT:'乐团主管未完成回访任务',
@@ -59,6 +59,7 @@ export const errorType = {
     always: true,
     query: {
       tabrouter: 'teamSchedule',
+      searchType:'MUSIC_PATROL_ITEM',
       conclusionStatus: '1',
       ...dates,
     },
@@ -73,13 +74,13 @@ export const errorType = {
     },
   },
   STUDENT_NOT_PAYMENT: {
-    name: '学员未缴费',
+    name: '未缴费学员数',
     isError: true,
     url: '/business/ArrearageStudents',
     always: true,
   },
   STUDENT_APPLY_FOR_QUIT_MUSIC_GROUP: {
-    name: '学员退团申请',
+    name: '申请退团学员数',
     isError: true,
     url: '/business/WithdrawalApplication',
     always: true,

+ 4 - 3
src/views/recodeManager/recodeList.vue

@@ -199,7 +199,7 @@
           </el-table-column>
           <el-table-column align="center" label="签到状态">
             <template slot-scope="scope">
-              <div>
+              <div v-if="scope.row.courseScheduleStatus != 'NOT_START'">
                 {{ scope.row.signInStatus | attendanceType }}
               </div>
             </template>
@@ -218,7 +218,7 @@
           </el-table-column>
           <el-table-column align="center" label="签退状态">
             <template slot-scope="scope">
-              <div>
+              <div v-if="scope.row.courseScheduleStatus != 'NOT_START'">
                 {{ scope.row.signOutStatus | attendanceOutType }}
               </div>
             </template>
@@ -249,7 +249,7 @@
                 v-permission="'teacherAttendance/repealComplaints'"
               >撤销申诉</el-button>
               <el-button
-                v-if="scope.row.jobNature === 'PART_TIME' && (scope.row.complaintsStatus == null || scope.row.complaintsStatus == 3)"
+                v-if="scope.row.jobNature === 'PART_TIME' && (scope.row.complaintsStatus == null || scope.row.complaintsStatus == 3) && scope.row.courseScheduleStatus != 'NOT_START'"
                 type="text"
                 @click="appeal(scope.row)"
                 v-permission="'teacherAttendance/addComplaints'"
@@ -257,6 +257,7 @@
               <el-button
                 type="text"
                 v-permission="'teacherAttendance/update'"
+                v-if="scope.row.courseScheduleStatus != 'NOT_START'"
                 @click="hand(scope.row)"
               >处理意见</el-button>
             </template>

+ 1 - 2
src/views/serverDetail/conponent/afterWork.vue

@@ -60,7 +60,6 @@
       </el-table-column>
     </el-table>
     <pagination
-      sync
       :total.sync="rules.total"
       :page.sync="rules.page"
       :limit.sync="rules.limit"
@@ -97,7 +96,7 @@ export default {
       this.getList();
     },
     async getList() {
-      console.log(this.detail)
+
       try {
       const dayjs = this.$helpers.dayjs
      const ruselt =  await getTeacherServeHomeworkDetail({

+ 0 - 2
src/views/serverDetail/conponent/outWork.vue

@@ -33,7 +33,6 @@
       </el-table-column>
     </el-table>
     <pagination
-      sync
       :total.sync="rules.total"
       :page.sync="rules.page"
       :limit.sync="rules.limit"
@@ -69,7 +68,6 @@ export default {
       this.getList()
     },
     async getList() {
-      console.log(this.detail)
       try {
       const dayjs = this.$helpers.dayjs
      const ruselt =  await getTeacherServeExtraDetail({

+ 0 - 1
src/views/serverDetail/conponent/serverMask.vue

@@ -18,7 +18,6 @@ export default {
     };
   },
   mounted(){
-    console.log(this.detail)
   }
 };
 </script>

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

@@ -48,8 +48,8 @@
             clearable
             placeholder="是否异常"
           >
-            <el-option label="是" :value="1"></el-option>
-            <el-option label="否" :value="0"></el-option>
+            <el-option label="是" value="1"></el-option>
+            <el-option label="否" value="0"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item prop="reminded">
@@ -267,7 +267,7 @@ export default {
       this.getDefaultTime();
       if (this.$route.query.searchType) {
         this.searchForm.organId = this.$route.query.organId * 1 || "";
-        this.searchForm.unDone = this.$route.query.unDone || ""
+        this.searchForm.unDone = this.$route.query.unDone+'' || ""
         const dayjs = this.$helpers.dayjs;
         let nowDate = dayjs(new Date()).format("YYYY-MM-DD");
         this.orderDate = [

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

@@ -285,7 +285,7 @@
           </el-table-column>
           <el-table-column align="center" label="考勤状态">
             <template slot-scope="scope">
-              <div>
+              <div v-if="scope.row.courseSchedule && scope.row.courseSchedule.status != 'NOT_START'">
                 {{ scope.row.status | clockingIn }}
               </div>
             </template>

+ 1 - 1
src/views/studentManager/components/studentRecord.vue

@@ -226,7 +226,7 @@
           </el-table-column>
           <el-table-column align="center" label="考勤状态">
             <template slot-scope="scope">
-              <div>
+              <div v-if="scope.row.courseSchedule && scope.row.courseSchedule.status != 'NOT_START'">
                 {{ scope.row.status | clockingIn }}
               </div>
             </template>

+ 1 - 1
src/views/teacherManager/teacherDetail/components/resetComponent.vue

@@ -97,7 +97,7 @@
                          v-if="!scope.row.isSettlement && permission('courseSchedule/practiceCourseAdjust')&&scope.row.groupType==='PRACTICE'"
                          @click="resetClass(scope.row)">调整</el-button>
               <el-button type="text"
-                         v-if="scope.row.groupType==='PRACTICE'&&scope.row.status == 'NOT_START'&&scope.row.practiceGroup['type']!='TRIAL'&& permission('courseSchedule/practiceCourseTeacherAdjust')"
+                         v-if="scope.row.groupType==='PRACTICE'&&scope.row.status == 'NOT_START'&&(scope.row.practiceGroup && scope.row.practiceGroup['type']!='TRIAL')&& permission('courseSchedule/practiceCourseTeacherAdjust')"
                          @click="resetTeacher(scope.row)">更换老师</el-button>
             </div>
           </template>

+ 1 - 1
src/views/teacherManager/teacherDetail/components/teacherNetwork.vue

@@ -70,7 +70,7 @@
                 <el-button type="text"
                            v-if="(scope.row.totalClassTimes-scope.row.currentClassTimes)>0"
                            v-permission="'courseSchedule/batchPracticeGroupTeacherAdjust?t=819'"
-                           @click="resetCourse(scope.row)">操作</el-button>
+                           @click="resetCourse(scope.row)">课程移交</el-button>
               </div>
             </template>
           </el-table-column>

+ 36 - 9
src/views/teacherManager/teacherDetail/components/teacherRecord.vue

@@ -52,14 +52,35 @@
           v-model.trim="searchForm.signInStatus"
           filterable
           clearable
-          placeholder="考勤状态"
+          placeholder="签到状态"
         >
-          <el-option
+          <el-option :value="1" label="正常签到"></el-option>
+          <el-option :value="0" label="异常签到"></el-option>
+          <el-option :value="3" label="未签到"></el-option>
+          <!-- <el-option
             v-for="(item, index) in attendance"
             :key="index"
             :label="item.label"
             :value="item.value"
-          ></el-option>
+          ></el-option> -->
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-select
+          v-model.trim="searchForm.signOutStatus"
+          filterable
+          clearable
+          placeholder="签退状态"
+        >
+          <!-- <el-option
+            v-for="(item, index) in attendance"
+            :key="index"
+            :label="item.label"
+            :value="item.value"
+          ></el-option> -->
+          <el-option :value="1" label="正常签退"></el-option>
+          <el-option :value="0" label="异常签退"></el-option>
+          <el-option :value="3" label="未签退"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item>
@@ -110,15 +131,19 @@
             }}</template>
           </el-table-column>
 
-          <el-table-column align="center" label="签到">
-            <template slot-scope="scope">{{
+          <el-table-column align="center" label="签到状态">
+            <template slot-scope="scope">
+              <div v-if="scope.row.courseStatus != 'NOT_START'">{{
               scope.row.signInStatus | attendanceType
-            }}</template>
+            }}</div>
+            </template>
           </el-table-column>
-          <el-table-column align="center" label="签退">
-            <template slot-scope="scope">{{
+          <el-table-column align="center" label="签退状态">
+            <template slot-scope="scope">
+              <div v-if="scope.row.courseStatus != 'NOT_START'">{{
               scope.row.signOutStatus | attendanceOutType
-            }}</template>
+            }}</div>
+            </template>
           </el-table-column>
           <el-table-column
             align="center"
@@ -161,6 +186,7 @@ export default {
         classGroupName: null,
         courseScheduleType: null,
         signInStatus: null,
+        signOutStatus: null,
         courseDate:[]
       },
       tableList: [],
@@ -222,6 +248,7 @@ export default {
         classGroupName: null,
         courseScheduleType: null,
         signInStatus: null,
+        signOutStatus: null
       };
       this.getList()
     },

+ 2 - 2
src/views/teacherManager/teacherOperation/components/salarySet.vue

@@ -156,8 +156,8 @@
                         @mousewheel.native.prevent
                         v-model.trim="scope.row.offlineClassesSalary"
                         placeholder="请输入内容">
-                <template slot="append" v-if="scope.row.musicTheory"> 元/人</template>
-                <template slot="append" v-else>节/人</template>
+                <template slot="append"> 元/人</template>
+                <!-- <template slot="append" v-else>节/人</template>  v-if="scope.row.musicTheory" -->
               </el-input>
               </div>
 

+ 8 - 0
src/views/teamBuild/api.js

@@ -55,6 +55,14 @@ export const queryPreApplyList = data => request2({
   requestType: 'json'
 })
 
+// 意向列表
+export const queryPreApplySubjectList = data => request2({
+  url: '/api-web/studentRegistration/queryPreApplySubjectList',
+  params: data,
+  method: 'get',
+  requestType: 'json'
+})
+
 // 发送家长会通知
 export const sendParentMeetingNotice = data => request2({
   url: '/api-web/musicGroup/sendParentMeetingNotice',

+ 17 - 1
src/views/teamBuild/forecastName.vue

@@ -27,6 +27,9 @@
             <auth :auths="['studentRegistration/preRegisterExport']">
               <el-button type="primary" @click="downloadFile">导出</el-button>
             </auth>
+            <auth :auths="['studentRegistration/queryPreApplySubjectList']">
+              <el-button type="primary" @click="subjectVisible = true">意向统计</el-button>
+            </auth>
         </div>
 
         <div class="m-core">
@@ -219,6 +222,17 @@
         >
             <visit-model v-if="visitVisible" @close="visitVisible = false" :detail="visitDetail" @submited="getList"/>
         </el-dialog>
+
+        <!-- 回访记录 -->
+        <el-dialog
+            title="意向列表"
+            width="600px"
+            destroy-on-close
+            :close-on-click-modal="false"
+            :visible.sync="subjectVisible"
+        >
+            <intention-model v-if="subjectVisible" @close="subjectVisible = false" />
+        </el-dialog>
     </div>
 </template>
 
@@ -229,10 +243,11 @@ import { permission } from "@/utils/directivePage";
 import { vaildStudentUrl } from '@/utils/validate'
 import { Export } from '@/utils/downLoadFile'
 import visitModel from '@/views/withdrawal-application/modals/visit'
+import intentionModel from './modals/intention'
 import { queryPreApplyList, finishPreApply, sendParentMeetingNotice } from './api'
 export default {
     name: 'forecastName',
-    components: { pagination, qrCode, visitModel },
+    components: { pagination, qrCode, visitModel, intentionModel },
     data() {
         const query = this.$route.query
         return {
@@ -254,6 +269,7 @@ export default {
                 page_size: [10, 20, 40, 50], // 选择限制显示条数
             },
             visitVisible: false,
+            subjectVisible: false,
             visitDetail: null,
             extendPaymentStatus: false,
             extendForm: {

+ 54 - 0
src/views/teamBuild/modals/intention.vue

@@ -0,0 +1,54 @@
+<template>
+  <div>
+      <!-- <el-alert title="其它=听从老师安排" type="info" effect="dark" :closable="false"></el-alert> -->
+      <el-table
+        style="width: 100%"
+        max-height="300px"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        :data="list"
+      >
+        <el-table-column prop="subjectName" align="center" label="声部">
+        </el-table-column>
+        <el-table-column prop="firstSubjectNum" align="center" label="首选人数">
+          <template slot-scope="scope">
+            {{ scope.row.firstSubjectNum }}人
+          </template>
+        </el-table-column>
+        <el-table-column prop="secondSubjectNum" align="center" label="次选人数">
+            <template slot-scope="scope">
+                {{ scope.row.secondSubjectNum }}人
+            </template>
+        </el-table-column>
+      </el-table>
+  </div>
+</template>
+<script>
+import { queryPreApplySubjectList } from '../api'
+export default {
+    data() {
+        let query = this.$route.query
+        return {
+            list: [],
+            musicGroupId: query.id
+        }
+    },
+    mounted() {
+        this.FetchList()
+    },
+    methods: {
+        async FetchList() {
+            const res = await queryPreApplySubjectList({
+                musicGroupId: this.musicGroupId,
+            })
+            this.list = res.data
+        },
+    }
+}
+</script>
+<style lang="less" scoped>
+  .dialog-footer{
+    margin-top: 20px;
+    display: block;
+    text-align: right;
+  }
+</style>

+ 154 - 111
src/views/teamBuild/signupList.vue

@@ -2,64 +2,87 @@
   <div class="sigup-container">
     <div class="topWrap">
       <div>
-        <h2>
-          <el-page-header @back="onCancel" :content="teamName + '报名详情'">
-          </el-page-header>
-        </h2>
-        <p style="margin-bottom: 15px; font-size: 18px; font-weight: 400">
-          报名截止时间:{{ applyExpireDate | formatTimer }} 缴费截止时间:{{
-            paymentExpireDate | formatTimer
-          }}
-        </p>
+        <div style="display: flex; justify-content: space-between">
+          <div>
+            <h2>
+              <!-- + '报名详情' -->
+              <el-page-header @back="onCancel" :content="teamName">
+              </el-page-header>
+            </h2>
+            <p style="margin-bottom: 15px; font-size: 18px; font-weight: 400">
+              报名截止时间:{{ applyExpireDate | formatTimer }} 缴费截止时间:{{
+                paymentExpireDate | formatTimer
+              }}
+            </p>
+          </div>
+          <p
+            class="msg"
+            :class="status == 'PAY' ? 'pay' : ''"
+            v-if="status == 'APPLY' || status == 'PAY'"
+          >
+            <img
+              :src="status == 'APPLY' ? stepImgs.APPLY : stepImgs.PAY"
+              alt=""
+            />
+            {{ status == "APPLY" ? "报名中" : "缴费中" }}
+          </p>
+        </div>
+
         <div class="btnList">
           <!-- <div class='newBand close'
                v-permission="'musicGroup/cancelMusicGroup'"
-               @click="onClose">停止乐团</div> -->
+               @click="onClose">停止乐团</div>   v-show="status == 'APPLY'"-->
           <div
             class="newBand"
             @click="payStart"
-            v-permission="'musicGroup/openPay'"
-            v-show="status == 'APPLY'"
+            v-permission="getFullPermission('musicGroup/openPay')"
+            v-if="status == 'APPLY'"
           >
             开始缴费
           </div>
           <!-- v-show="status=='PAY'" -->
           <div
             class="newBand"
-            v-permission="'musicGroup/found'"
+            v-permission="getFullPermission('musicGroup/found')"
             @click="onGoHome"
+            v-if="status == 'APPLY' || status == 'PAY'"
           >
             确认开团
           </div>
           <div
             class="newBand"
-            v-permission="'musicGroup/extensionPayment'"
+            v-permission="getFullPermission('musicGroup/extensionPayment')"
             @click="extendTime(true)"
-            v-show="status == 'PAY'"
+            v-show="
+              status == 'PAY' || status == 'PROGRESS' || status == 'PREPARE'
+            "
           >
             延长缴费
           </div>
           <div
             class="newBand"
-            v-permission="'musicGroup/extensionApplyExpireDate'"
+            v-permission="getFullPermission('musicGroup/extensionApplyExpireDate')"
             @click="extendTime(false)"
+            v-show="status == 'PAY' || status == 'APPLY' || status == 'PROGRESS' || status == 'PREPARE'"
           >
             延长报名
           </div>
           <div class="newBand" @click="onCreateQRCode('payment')">报名链接</div>
-          <div class="newBand" @click="onCreateQRCode('rePayment')">报名链接(无乐器)</div>
+          <div class="newBand" @click="onCreateQRCode('rePayment')">
+            报名链接(无乐器)
+          </div>
           <div class="newBand" @click="onCreateQRCode('detail')">缴费详情</div>
           <div
             class="newBand"
             v-show="rightList.length > 0"
-            v-permission="'studentRegistration/queryStudentApplyDetailExport'"
+            v-permission="getFullPermission('studentRegistration/queryStudentApplyDetailExport')"
             @click="onDownLoadExecl"
           >
             报表导出
           </div>
           <auth
-            auths="studentRegistration/queryPreApplyList"
-            :router="['/business/signupList']"
+            :auths="getFullPermission('studentRegistration/queryPreApplyList')"
+
           >
             <div
               class="newBand"
@@ -71,8 +94,9 @@
           </auth>
           <div
             class="newBand"
-            v-permission="'musicGroup/addMusicGroupRegs'"
+            v-permission="getFullPermission('musicGroup/addMusicGroupRegs')"
             @click="mergeVisible = true"
+            v-show="status == 'PAY' || status == 'APPLY'"
           >
             合并学员
           </div>
@@ -103,10 +127,6 @@
         APPLY: require('@/assets/images/base/clock.png'),
         PAY: require('@/assets/images/base/pay.png')
       }, -->
-      <p class="msg" :class="status == 'PAY' ? 'pay' : ''">
-        <img :src="status == 'APPLY' ? stepImgs.APPLY : stepImgs.PAY" alt="" />
-        {{ status == "APPLY" ? "报名中" : "缴费中" }}
-      </p>
     </div>
     <div class="searchList">
       <save-form
@@ -148,6 +168,7 @@
     <div class="sigup-core">
       <div class="left">
         <el-table
+          style="width: 100% !important"
           :data="leftList"
           :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
         >
@@ -176,7 +197,7 @@
         </el-table>
         <div
           class="btnWrap"
-          v-permission="'musicGroup/updateExpectedStudentNum'"
+          v-permission="getFullPermission('musicGroup/updateExpectedStudentNum')"
           style="margin-right: 20px; margin-top: 20px"
         >
           <el-button v-show="!isEdit" @click="isEdit = true">编辑</el-button>
@@ -190,7 +211,7 @@
           :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
           @selection-change="handleSelectionChange"
         >
-          <el-table-column type="selection" width="55"> </el-table-column>
+          <el-table-column type="selection" width="55" :selectable='checkboxSelect'> </el-table-column>
           <el-table-column label="学员姓名" prop="studentName" align="center">
           </el-table-column>
           <el-table-column label="家长姓名" prop="parentsName" align="center">
@@ -247,13 +268,15 @@
           >
             <template slot-scope="scope">
               <div>
-                <el-button
-                  type="text"
-                  v-permission="'studentRegistration/batchUpdateSubject'"
-                  v-show="scope.row.paymentStatus != 2"
-                  @click="resetSubject(scope.row)"
-                  >修改专业</el-button
-                >
+                <auth :auths='getFullPermission("studentRegistration/batchUpdateSubject")'>
+                  <el-button
+                    type="text"
+                    v-show="scope.row.paymentStatus != 2"
+                    @click="resetSubject(scope.row)"
+                    >修改专业</el-button
+                  >
+                </auth>
+
                 <!-- APPLY  status == "APPLY" || s-->
                 <el-popover
                   v-show="scope.row.remark"
@@ -267,58 +290,60 @@
                 </el-popover>
                 <!-- PAY -->
                 <!-- &&  status == "PAY"-->
-                <el-button
-                  type="text"
-                  v-permission="'studentRegistration/queryFeeDetail'"
-                  v-show="scope.row.paymentStatus == 2"
-                  @click="lookdetail(scope.row)"
-                  >查看</el-button
-                >
-                <el-button
-                  type="text"
-                  v-permission="'musicGroupQuit/directQuitMusicGroup2'"
-                  v-show="scope.row.paymentStatus == 2"
-                  @click="quitTeam(scope.row)"
-                  >退团退费</el-button
-                >
-                <el-button
-                  type="text"
-                  v-show="
-                    permission('musicGroupQuit/directQuitMusicGroup3') &&
-                    scope.row.paymentStatus == 2
-                  "
-                  @click="quieTeams(scope.row)"
-                  >退团</el-button
-                >
-                <el-button
-                  type="text"
-                  v-show="permission('visit/add')"
-                  @click="addVisit(scope.row)"
-                  >新增回访</el-button
-                >
-                <el-button
-                  type="text"
-                  v-show="scope.row.paymentStatus == 2"
-                  v-permission="'subjectChange/getStudentOriginal'"
-                  @click="openChangeVoice(scope.row)"
-                  >更改声部</el-button
-                >
+                <auth :auths='getFullPermission("studentRegistration/queryFeeDetail")'   v-show="scope.row.paymentStatus == 2">
+                  <el-button
+                    type="text"
+
+                    @click="lookdetail(scope.row)"
+                    >查看</el-button
+                  >
+                </auth>
+                <auth :auths='getFullPermission("musicGroupQuit/directQuitMusicGroup2")'  v-show="scope.row.paymentStatus == 2">
+                  <el-button
+                    type="text"
+
+                    @click="quitTeam(scope.row)"
+                    >退团退费</el-button
+                  >
+                </auth>
+                <auth :auths='getFullPermission("musicGroupQuit/directQuitMusicGroup3")'  v-show="scope.row.paymentStatus == 2">
+                  <el-button
+                    type="text"
+
+                    @click="quieTeams(scope.row)"
+                    >退团</el-button
+                  >
+                </auth>
+                <auth :auths="getFullPermission('visit/add')">
+                  <el-button type="text" @click="addVisit(scope.row)"
+                    >新增回访</el-button
+                  >
+                </auth>
+                <auth :auths="getFullPermission('subjectChange/getStudentOriginal')"   v-show="scope.row.paymentStatus == 2">
+                  <el-button
+                    type="text"
+
+                    @click="openChangeVoice(scope.row)"
+                    >更改声部</el-button
+                  >
+                </auth>
               </div>
             </template>
           </el-table-column>
         </el-table>
         <div
           style="margin-top: 10px; margin-bottom: 10px"
-          v-show="status == 'APPLY'"
+          v-show="status == 'APPLY'|| status == 'PROGRESS' || status == 'PREPARE'"
         >
           <el-button @click="onSelectAll">全选/取消</el-button>
+          <auth :auths="getFullPermission('studentRegistration/openPayment')">
           <el-button
             style="background-color: #14928a; border: 1px solid #14928a"
             @click="onPartPayment"
-            v-permission="'studentRegistration/openPayment'"
             type="primary"
-            >提前缴费</el-button
+            >开启缴费</el-button
           >
+          </auth>
           <!-- <div class='newBand' v-show="status=='APPLY'">允许缴费</div> -->
         </div>
         <pagination
@@ -547,7 +572,7 @@
       </el-form>
       <span slot="footer" class="dialog-footer question">
         <div>
-                 <el-popover placement="right" width="500" trigger="click">
+          <el-popover placement="right" width="500" trigger="click">
             <div class="popoverWrap">
               <p>乐团退团退费规则:</p>
               <p>退还课程费用:缴费总额-已结束课时单价之和</p>
@@ -564,10 +589,9 @@
           </el-popover>
         </div>
         <div>
-           <el-button @click="quitVisible = false">取 消</el-button>
-        <el-button type="primary" @click="chioseType">确 定</el-button>
+          <el-button @click="quitVisible = false">取 消</el-button>
+          <el-button type="primary" @click="chioseType">确 定</el-button>
         </div>
-
       </span>
     </el-dialog>
     <!-- 回访记录 -->
@@ -662,7 +686,7 @@
 </template>
 <script>
 import pagination from "@/components/Pagination/index";
-import qrCode from '@/components/QrCode/index'
+import qrCode from "@/components/QrCode/index";
 import {
   getintoClass,
   getStudentList,
@@ -692,7 +716,7 @@ import qs from "qs";
 import { permission } from "@/utils/directivePage";
 import cleanDeep from "clean-deep";
 import changeVoice from "./modals/change-voice";
-import visit from '@/views/withdrawal-application/modals/visit'
+import visit from "@/views/withdrawal-application/modals/visit";
 export default {
   name: "signupList",
   components: {
@@ -701,7 +725,7 @@ export default {
     changeVoice,
     mergeMusic,
     forecastList,
-    visit
+    visit,
   },
   data() {
     return {
@@ -826,12 +850,14 @@ export default {
       },
       isPay: false,
       applyDates: this.applyDate(),
-      detail:null
+      detail: null,
     };
   },
-  created() {
+  created() {},
+  mounted() {
     // 通过乐团状态判断显示隐藏的东西
     this.init();
+   console.log(this.getFullPermission('123'))
   },
   activated() {
     this.init();
@@ -879,7 +905,7 @@ export default {
       this.getList();
     },
     onCancel() {
-       this.$store.dispatch('delVisitedViews', this.$route) 
+      this.$store.dispatch("delVisitedViews", this.$route);
       this.$router.push({ path: "/business/teamDetail" });
     },
     payStart() {
@@ -960,7 +986,7 @@ export default {
       // 部分缴费
       let selection = this.multipleSelection;
       if (selection.length <= 0) {
-        this.$message.success("您还没有选择学生");
+        this.$message.error("您还没有选择学生");
         return false;
       }
       let ids = [];
@@ -968,7 +994,7 @@ export default {
         ids.push(item.id);
       });
 
-      this.$confirm(`是否确认提前缴费?`, "提示", {
+      this.$confirm(`是否确认开启缴费?`, "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         type: "warning",
@@ -990,19 +1016,24 @@ export default {
     onCreateQRCode(type) {
       // 生成报名二维码
       let id = this.id;
-      this.codeStatus = true
-      if(type == 'payment') {
-        this.codeTitle = '学员报名连接'
+      this.codeStatus = true;
+      if (type == "payment") {
+        this.codeTitle = "学员报名连接";
         this.qrCodeUrl = vaildStudentUrl() + "/#/login?musicGroupId=" + id;
-      } else if(type == 'detail') {
+      } else if (type == "detail") {
         let teamName = this.$route.query.name;
-        this.codeTitle = '报名缴费详情'
-        this.qrCodeUrl = vaildTeacherUrl() + "/#/order?musicGroupId=" + id + "&musicGroupName=" + teamName;
-      } else if(type == 'rePayment') {
-        this.codeTitle = '学生报名链接(无乐器)'
-        this.qrCodeUrl = vaildStudentUrl() + "/#/login?musicGroupId=" + id + "&instrument=1";
+        this.codeTitle = "报名缴费详情";
+        this.qrCodeUrl =
+          vaildTeacherUrl() +
+          "/#/order?musicGroupId=" +
+          id +
+          "&musicGroupName=" +
+          teamName;
+      } else if (type == "rePayment") {
+        this.codeTitle = "学生报名链接(无乐器)";
+        this.qrCodeUrl =
+          vaildStudentUrl() + "/#/login?musicGroupId=" + id + "&instrument=1";
       }
-
     },
     onCreateQRCode2() {
       // 生成报名二维码
@@ -1120,14 +1151,15 @@ export default {
             musicGroupId: this.$route.query.id,
           }).then((res) => {
             if (res.code == 200) {
-              let query = this.$route.query;
-              this.$message.success("开启成功");
-              this.$router.push({
-                path: "/business/teamDetail",
-                query: {
-                  ...query,
-                },
-              });
+              // let query = this.$route.query;
+              // this.$message.success("开启成功");
+              // this.$router.push({
+              //   path: "/business/teamDetail",
+              //   query: {
+              //     ...query,
+              //   },
+              // });
+              this.onCancel()
             }
           });
         })
@@ -1357,9 +1389,9 @@ export default {
       // this.visitForm.studentName = row.studentName;
       // this.visitForm.musicGroupId = this.teamid;
       // this.visitForm.studentId = row.studentId;
-      row.userId = row.studentId
-      this.detail = row
-      this.detail.musicGroupId = this.$route.query.id
+      row.userId = row.studentId;
+      this.detail = row;
+      this.detail.musicGroupId = this.$route.query.id;
       this.visitVisiable = true;
     },
     openChangeVoice(row) {
@@ -1447,6 +1479,9 @@ export default {
         },
       };
     },
+    checkboxSelect(row){
+      return row.paymentStatus == 0
+    }
   },
   watch: {
     orderVisible(val) {
@@ -1502,7 +1537,13 @@ export default {
 };
 </script>
 <style lang="scss" scoped>
-.dialog-footer.question{
+ .auth {
+    display: inline-block;
+    & + .auth {
+      margin-left: 0px;
+    }
+  }
+.dialog-footer.question {
   display: flex;
   flex-direction: row;
   justify-content: space-between;
@@ -1513,9 +1554,9 @@ export default {
     padding: 18px 58px;
     // height: 136px;
     background-color: #fff;
-    display: flex;
-    flex-direction: row;
-    justify-content: space-between;
+    // display: flex;
+    // flex-direction: row;
+    // justify-content: space-between;
     .msg.pay {
       color: #f85043;
     }
@@ -1578,8 +1619,10 @@ export default {
       flex-direction: row;
       justify-content: flex-start;
       align-items: center;
-      div {
+      flex-wrap: wrap;
+      & > div {
         margin-right: 15px;
+        margin-bottom: 10px;
       }
     }
     .newBand.close {

+ 6 - 2
src/views/teamDetail/componentCourse/infoMsg.vue

@@ -64,13 +64,17 @@ export default {
     })
   },
   methods: {
+    getRealTime(time) {
+      const parsenum = parseInt(time)
+      return ('' + time).indexOf(' ') > -1 ? time : parsenum
+    },
     filterKeys(item) {
       const teachingTeacherNames = (item.teachingTeacherNames || '').split(',').sort((a, b) => (a || '').localeCompare((b || ''), 'zh'))
       return {
         name: item.name,
         actualTeacherName: item.actualTeacherName,
         teachingTeacherNames: teachingTeacherNames.join(','),
-        startClassTime: this.$helpers.dayjs(item.startClassTime).format('YYYY-MM-DD HH:mm'),
+        startClassTime: this.$helpers.dayjs(this.getRealTime(item.startClassTime)).format('YYYY-MM-DD HH:mm'),
         // classDate: item.classDate,
         // endClassTime: item.endClassTime,
         teachMode: teachMode[item.teachMode],
@@ -82,7 +86,7 @@ export default {
       return item.operatorName + ' 在 ' + item.createTime + ' 修改了'
     },
     getTimers (item) {
-      return diffTimerFormMinute(dayjs(item.classDate).format('YYYY-MM-DD'), dayjs(item.startClassTime).format('HH:mm'), dayjs(item.endClassTime).format('HH:mm'))
+      return diffTimerFormMinute(dayjs(item.classDate).format('YYYY-MM-DD'), dayjs(this.getRealTime(item.startClassTime)).format('HH:mm'), dayjs(this.getRealTime(item.endClassTime)).format('HH:mm'))
     }
   },
   computed: {

+ 1 - 1
src/views/teamDetail/componentCourse/studentRollCall.vue

@@ -61,7 +61,7 @@
                          prop="status"
                          label="考勤状态">
           <template slot-scope="scope">
-            <div>
+            <div v-if="scope.row.courseSchedule && scope.row.courseSchedule.status != 'NOT_START'">
               <p v-if="scope.row.status">{{scope.row.status | studentRecord}}</p>
               <p v-else>未签到</p>
             </div>

+ 6 - 4
src/views/teamDetail/componentCourse/studentWork.vue

@@ -11,8 +11,8 @@
     <el-form :inline="true" class="workForm" style="padding: 0 25px">
       <el-form-item label="应交学生数">
         <!-- <el-input disabled
-        :value="studentNum"></el-input>-->
-        <div class="inputStyle">{{ studentNum }}</div>
+        :value="homeworkStudentNum"></el-input>-->
+        <div class="inputStyle">{{ homeworkStudentNum }}</div>
       </el-form-item>
       <el-form-item label="已交学生数">
         <!-- <el-input disabled
@@ -70,7 +70,7 @@
         </el-table-column>
         <el-table-column align="center" prop="isView" label="是否提交">
           <template slot-scope="scope">
-            <div>{{ scope.row.createTime ? "是" : "否" }}</div>
+            <div>{{ scope.row.submitTime ? "是" : "否" }}</div>
           </template>
         </el-table-column>
         <el-table-column align="center" prop="isView" label="是否查看">
@@ -89,7 +89,7 @@
               <!--   -->
               <el-button
                 type="text"
-                v-if="scope.row.urlList && scope.row.createTime"
+                v-if="scope.row.urlList && scope.row.submitTime"
                 @click="lookWork(scope.row)"
                 >查看作业</el-button
               >
@@ -230,6 +230,7 @@ export default {
       workVisible: false,
       repliedVisible: false,
       studentNum: null,
+      homeworkStudentNum: null,
       homeworkNum: null,
       repliedNum: null,
       activeUrl: null,
@@ -272,6 +273,7 @@ export default {
         (res) => {
           if (res.code == 200) {
             this.studentNum = res.data.studentNum;
+            this.homeworkStudentNum = res.data.homeworkStudentNum;
             this.homeworkNum = res.data.homeworkNum;
             this.repliedNum = res.data.repliedNum;
           }

+ 7 - 10
src/views/teamDetail/componentCourse/teacherList.vue

@@ -44,14 +44,14 @@
                        prop="teacherPhone"
                        label="签到状态">
         <template slot-scope="scope">
-          <div>{{ scope.row.signInStatus | attendanceType}}</div>
+          <div v-if="courseStatus != 'NOT_START'">{{ scope.row.signInStatus | attendanceType}}</div>
         </template>
       </el-table-column>
       <el-table-column align='center'
                        prop="teacherPhone"
                        label="签退状态">
         <template slot-scope="scope">
-          <div>{{ scope.row.signOutStatus | attendanceOutType}}</div>
+          <div v-if="courseStatus != 'NOT_START'">{{ scope.row.signOutStatus | attendanceOutType}}</div>
         </template>
       </el-table-column>
       <el-table-column align='center'
@@ -114,23 +114,20 @@
         <template slot-scope="scope">
           <div>
             <el-button type="text"
-                       size="small"
                        v-permission="'teacherAttendance/updateTeacherAttendance'"
+                        v-if="courseStatus != 'NOT_START'"
                        @click="mackAttendance(scope.row)">补考勤</el-button>
             <el-button type="text"
-                       v-if="teachMode == 'OFFLINE'"
-                       size="small"
+                       v-if="teachMode == 'OFFLINE' && courseStatus != 'NOT_START'"
                        @click="lookGPS(scope.row)">GPS定位</el-button>
             <el-button type="text"
-                       size="small"
                        v-permission="'courseSchedule/queryTeacherSalary'"
                        @click="setCourseInfo(scope.row)">课酬调整</el-button>
               <el-button
-              size="small"
                 type="text"
                 v-permission="'teacherAttendance/update?page=teamCourseList'"
                 @click="hand(scope.row)"
-                v-if="scope.row.signInStatus!=1||scope.row.signOutStatus!=1"
+                v-if="(scope.row.signInStatus!=1||scope.row.signOutStatus!=1) && courseStatus != 'NOT_START'"
               >处理意见</el-button>
           </div>
         </template>
@@ -222,7 +219,7 @@ import gpsLoction from "../componentCourse/gpsLocation";
 import hand from '@/views/recodeManager/modals/hand'
 export default {
   components: { gpsLoction, hand },
-  props: ['courseScheduleId', 'teachMode'],
+  props: ['courseScheduleId', 'teachMode', 'courseStatus'],
   data () {
     return {
       tableList: [],
@@ -248,7 +245,7 @@ export default {
   },
   mounted () {
     this.init()
-    console.log(this.teachMode)
+    // console.log(this.teachMode, this.courseStatus)
   },
   activated () { },
   methods: {

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

@@ -110,7 +110,7 @@
 
         <el-table-column align="center"
                          prop="courseScheduleStatus"
-                         label="课程状态">
+                         label="课程状态">s
           <template slot-scope="scope">
             <div>{{ scope.row.courseScheduleStatus | coursesStatus }}</div>
           </template>
@@ -118,13 +118,13 @@
         <el-table-column align="center"
                          label="老师签到">
           <template slot-scope="scope">
-            <div>{{ scope.row.signInStatus | attendanceType}}</div>
+            <div v-if="scope.row.courseScheduleStatus != 'NOT_START'">{{ scope.row.signInStatus | attendanceType}}</div>
           </template>
         </el-table-column>
         <el-table-column align="center"
                          label="老师签退">
           <template slot-scope="scope">
-            <div>{{ scope.row.signOutStatus | attendanceOutType}}</div>
+            <div v-if="scope.row.courseScheduleStatus != 'NOT_START'">{{ scope.row.signOutStatus | attendanceOutType}}</div>
           </template>
         </el-table-column>
         <el-table-column align="center"
@@ -137,7 +137,11 @@
         <el-table-column align="center"
                          prop="remark"
                          label="是否点名">
-          <template slot-scope="scope">{{ scope.row.isCallNames ? '已点名' : '未点名' }}</template>
+          <template slot-scope="scope">
+            <div v-if="scope.row.courseScheduleStatus != 'NOT_START'">
+              {{ scope.row.isCallNames ? '已点名' : '未点名' }}
+            </div>
+          </template>
         </el-table-column>
         <el-table-column align="center"
                          prop="remark"

+ 0 - 1
src/views/teamDetail/components/modals/change-teacher.vue

@@ -71,7 +71,6 @@ export default {
     }
   },
   mounted() {
-    console.log(this.detail)
     const row = this.detail
     for (let i in row.classGroupTeacherMapperList) {
       if (row.classGroupTeacherMapperList[i].teacherRole == "BISHOP") {

+ 1 - 0
src/views/teamDetail/teamCourseList.vue

@@ -559,6 +559,7 @@
             <teacherList
               :courseScheduleId="maskForm.id"
               :teachMode="maskForm.teachMode"
+              :courseStatus="maskForm.status"
             ></teacherList>
           </div>
         </el-tab-pane>

+ 25 - 0
src/views/teamDetail/teamList.vue

@@ -226,6 +226,17 @@
                   @click="lookTeamDetail(scope.row)"
                   >查看</el-button
                 >
+
+                        <el-button
+                  type="text"
+                  v-if="
+                    (scope.row.status == 'PREPARE' ||
+                      scope.row.status == 'PROGRESS') &&
+                    permission('/remedy')&&scope.row.isRemedy
+                  "
+                  @click="gotoSigin(scope.row)"
+                  >乐团补招</el-button
+                >
                 <!-- 报名中缴费中筹备中查看乐团 -->
                 <el-button
                   type="text"
@@ -927,6 +938,17 @@ export default {
       this.activeId = row.id;
       this.showSteam = true;
     },
+    gotoSigin(row){
+       this.$router.push(
+            {
+              path: `/business/remedy`,
+              query: { status: row.status, id: row.id, name: row.name },
+            },
+            (router) => {
+              router.meta.title = "报名详情";
+            }
+          );
+    }
   },
   watch: {
     showSteam(val) {
@@ -938,6 +960,9 @@ export default {
 };
 </script>
 <style lang="scss" scoped>
+/deep/.el-button+.el-button {
+     margin-left: 0px;
+}
 .select {
   font-size: 14px;
 }

+ 1 - 1
src/views/withdrawal-application/modals/record.vue

@@ -94,7 +94,7 @@
       </el-table-column>
       <el-table-column align="center" label="考勤状态">
         <template slot-scope="scope">
-          <div>
+          <div v-if="scope.row.courseSchedule && scope.row.courseSchedule.status != 'NOT_START'">
             {{ scope.row.status | clockingIn }}
           </div>
         </template>

+ 0 - 1
vue.config.js

@@ -22,7 +22,6 @@ const name = defaultSettings.title || '管乐迷后台管理系统' // page titl
 // let target = 'http://192.168.3.57:8000' //勇哥
 let target = 'http://dev.dayaedu.com' // 测试服
 // let target = 'http://47.114.176.40:8000' //开发环境
-// let target = 'https://test.dayaedu.com' //开发环境
 // let target = 'http://192.168.3.134' // 乔
 // All configuration item explanations can be find in https://cli.vuejs.org/config/
 module.exports = {

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä