Ver Fonte

Merge branch 'master' into 04/14resetSalaryName

mo há 4 anos atrás
pai
commit
b7819a7a0f
69 ficheiros alterados com 647 adições e 399 exclusões
  1. 0 0
      dist/index.html
  2. 0 0
      dist/static/css/chunk-047f3d8e.dd52cd4e.css
  3. 0 0
      dist/static/css/chunk-0b3a8ade.dcaae606.css
  4. 0 0
      dist/static/css/chunk-2329b1e5.69c08349.css
  5. 0 0
      dist/static/css/chunk-24a29c7b.557af487.css
  6. 0 0
      dist/static/css/chunk-2edb0b06.a3cc3ea3.css
  7. 1 0
      dist/static/css/chunk-310a3f9c.705fa1fa.css
  8. 0 1
      dist/static/css/chunk-3365492b.8e0a8c00.css
  9. 0 0
      dist/static/css/chunk-5fc7e030.e83092ce.css
  10. 0 0
      dist/static/css/chunk-65d48a78.073fe17d.css
  11. 0 0
      dist/static/css/chunk-83f471d8.a8744a2b.css
  12. 1 1
      dist/static/css/chunk-dbb0940a.20f2ac77.css
  13. 0 0
      dist/static/css/chunk-f96bd7c8.59dcdaf4.css
  14. BIN
      dist/static/img/login-bg.450fe204.png
  15. BIN
      dist/static/img/login-bg.6f4f8f30.png
  16. 0 0
      dist/static/js/app.2964c196.js
  17. 0 0
      dist/static/js/app.f0b8d16a.js
  18. 0 0
      dist/static/js/chunk-00737944.dcae1da2.js
  19. 0 0
      dist/static/js/chunk-00832bd2.618a948d.js
  20. 0 0
      dist/static/js/chunk-03fd7a4d.f067dcbb.js
  21. 0 0
      dist/static/js/chunk-047f3d8e.31e77c96.js
  22. 0 0
      dist/static/js/chunk-0b3a8ade.261794e4.js
  23. 0 0
      dist/static/js/chunk-1341b691.a512c617.js
  24. 0 0
      dist/static/js/chunk-13c7308e.3b3f33e8.js
  25. 0 0
      dist/static/js/chunk-1a60fb84.1b2748ae.js
  26. 0 0
      dist/static/js/chunk-2329b1e5.d020b33c.js
  27. 0 0
      dist/static/js/chunk-26e8d6c4.af61b145.js
  28. 0 0
      dist/static/js/chunk-2c369f8f.45a47e43.js
  29. 0 0
      dist/static/js/chunk-2edb0b06.53844b4f.js
  30. 0 0
      dist/static/js/chunk-30b26ad2.6d76e424.js
  31. 0 0
      dist/static/js/chunk-310a3f9c.d54e3ed7.js
  32. 0 0
      dist/static/js/chunk-3365492b.35e7e329.js
  33. 0 0
      dist/static/js/chunk-363494be.8439d6ee.js
  34. 0 0
      dist/static/js/chunk-3645c22a.165bb9bd.js
  35. 0 0
      dist/static/js/chunk-3c8266ca.4428dd39.js
  36. 0 0
      dist/static/js/chunk-478490b6.75625f3b.js
  37. 0 0
      dist/static/js/chunk-5f5ffb00.96481caa.js
  38. 0 0
      dist/static/js/chunk-5fc7e030.63323ba4.js
  39. 0 0
      dist/static/js/chunk-63b90dc4.2b85a43f.js
  40. 0 0
      dist/static/js/chunk-65d48a78.f7caece0.js
  41. 0 0
      dist/static/js/chunk-65d5f8fc.e045d30e.js
  42. 0 0
      dist/static/js/chunk-68b8622f.211b71f3.js
  43. 0 0
      dist/static/js/chunk-7cacdd72.9656201b.js
  44. 0 0
      dist/static/js/chunk-7f91ee0d.333384c6.js
  45. 0 0
      dist/static/js/chunk-83f471d8.8af73595.js
  46. 0 0
      dist/static/js/chunk-8817c994.048fab6e.js
  47. 0 0
      dist/static/js/chunk-a0222f2a.ce249c4d.js
  48. 0 0
      dist/static/js/chunk-b7fa7158.290d2b4f.js
  49. 0 0
      dist/static/js/chunk-c38de4c8.b3eb5079.js
  50. 0 0
      dist/static/js/chunk-dbb0940a.e4097bbb.js
  51. 0 0
      dist/static/js/chunk-f96bd7c8.99f767f5.js
  52. 9 0
      src/api/systemManage.js
  53. BIN
      src/assets/images/base/login-bg.png
  54. 2 1
      src/main.js
  55. 2 1
      src/utils/vueFilter.js
  56. 3 1
      src/views/arrearage-students/index.vue
  57. 11 4
      src/views/categroyManager/insideSetting/staffManager.vue
  58. 5 1
      src/views/main/abnormal/index.vue
  59. 15 1
      src/views/main/constant.js
  60. 14 0
      src/views/repairManager/repairList.vue
  61. 76 33
      src/views/serverDetail/index.vue
  62. 3 3
      src/views/teamBuild/signupList.vue
  63. 18 3
      src/views/teamDetail/components/modals/classroom-preview.vue
  64. 296 259
      src/views/teamDetail/components/modals/classroom-setting-item.vue
  65. 70 42
      src/views/teamDetail/components/modals/classroom-setting.vue
  66. 11 7
      src/views/teamDetail/components/modals/select-student.vue
  67. 52 6
      src/views/teamDetail/components/resetClass.vue
  68. 53 31
      src/views/teamDetail/teamCourseList.vue
  69. 5 4
      vue.config.js

Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/css/chunk-047f3d8e.dd52cd4e.css


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/css/chunk-0b3a8ade.dcaae606.css


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/css/chunk-2329b1e5.69c08349.css


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/css/chunk-24a29c7b.557af487.css


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/css/chunk-2edb0b06.a3cc3ea3.css


+ 1 - 0
dist/static/css/chunk-310a3f9c.705fa1fa.css

@@ -0,0 +1 @@
+.box-card[data-v-10470ed4]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:102px;width:102px;margin-bottom:20px}

+ 0 - 1
dist/static/css/chunk-3365492b.8e0a8c00.css

@@ -1 +0,0 @@
-.box-card[data-v-166d464a]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:102px;width:102px;margin-bottom:20px}

Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/css/chunk-5fc7e030.e83092ce.css


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/css/chunk-65d48a78.073fe17d.css


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/css/chunk-83f471d8.a8744a2b.css


+ 1 - 1
dist/static/css/chunk-1a60fb84.76231814.css → dist/static/css/chunk-dbb0940a.20f2ac77.css

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

Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/css/chunk-f96bd7c8.59dcdaf4.css


BIN
dist/static/img/login-bg.450fe204.png


BIN
dist/static/img/login-bg.6f4f8f30.png


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/app.2964c196.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/app.f0b8d16a.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-00737944.dcae1da2.js


+ 0 - 0
dist/static/js/chunk-00832bd2.84ef4f62.js → dist/static/js/chunk-00832bd2.618a948d.js


+ 0 - 0
dist/static/js/chunk-03fd7a4d.db42a35f.js → dist/static/js/chunk-03fd7a4d.f067dcbb.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-047f3d8e.31e77c96.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-0b3a8ade.261794e4.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-1341b691.a512c617.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-13c7308e.3b3f33e8.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-1a60fb84.1b2748ae.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-2329b1e5.d020b33c.js


+ 0 - 0
dist/static/js/chunk-26e8d6c4.a058ac97.js → dist/static/js/chunk-26e8d6c4.af61b145.js


+ 0 - 0
dist/static/js/chunk-2c369f8f.88b89ee6.js → dist/static/js/chunk-2c369f8f.45a47e43.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-2edb0b06.53844b4f.js


+ 0 - 0
dist/static/js/chunk-30b26ad2.1f872093.js → dist/static/js/chunk-30b26ad2.6d76e424.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-310a3f9c.d54e3ed7.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-3365492b.35e7e329.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-363494be.8439d6ee.js


+ 0 - 0
dist/static/js/chunk-3645c22a.fea41547.js → dist/static/js/chunk-3645c22a.165bb9bd.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-3c8266ca.4428dd39.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-478490b6.75625f3b.js


+ 0 - 0
dist/static/js/chunk-5f5ffb00.d0507d80.js → dist/static/js/chunk-5f5ffb00.96481caa.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-5fc7e030.63323ba4.js


+ 0 - 0
dist/static/js/chunk-63b90dc4.624091dd.js → dist/static/js/chunk-63b90dc4.2b85a43f.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-65d48a78.f7caece0.js


+ 0 - 0
dist/static/js/chunk-65d5f8fc.1c1b7ee3.js → dist/static/js/chunk-65d5f8fc.e045d30e.js


+ 0 - 0
dist/static/js/chunk-68b8622f.03bf887f.js → dist/static/js/chunk-68b8622f.211b71f3.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-7cacdd72.9656201b.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-7f91ee0d.333384c6.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-83f471d8.8af73595.js


+ 0 - 0
dist/static/js/chunk-8817c994.39797eb4.js → dist/static/js/chunk-8817c994.048fab6e.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-a0222f2a.ce249c4d.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-b7fa7158.290d2b4f.js


+ 0 - 0
dist/static/js/chunk-c38de4c8.94d6fa28.js → dist/static/js/chunk-c38de4c8.b3eb5079.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-dbb0940a.e4097bbb.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/chunk-f96bd7c8.99f767f5.js


+ 9 - 0
src/api/systemManage.js

@@ -343,3 +343,12 @@ export function updateEducationTeacherId (data) {
     data: qs.stringify(data)
   })
 }
+
+// 获取员工所在分部列表(管理员查看所有的分部)
+export function queryEmployeeOrganByUser(data) {
+  return request({
+    url: api + '/organization/queryEmployeeOrganByUser',
+    method: 'get',
+    params: data
+  })
+}

BIN
src/assets/images/base/login-bg.png


+ 2 - 1
src/main.js

@@ -66,7 +66,7 @@ class DonMessage {
 // 修改默认属性
 ElementUI.Dialog.props.closeOnClickModal.default = false;
 // ElementUI.Dialog.props.destroyOnClose.default = true;
-
+console.log(ElementUI.Input)
 // 全局修改选择如果value与label都为数字0则清空
 const SelectValueWatch = ElementUI.Select.watch.value
 ElementUI.Select.watch.value = function (newValue, oldValue) {
@@ -98,6 +98,7 @@ document.addEventListener('keydown', function (event) {
 
   }
 })
+
 /**
  * If you don't want to use mock-server
  * you want to use MockJs for mock api

+ 2 - 1
src/utils/vueFilter.js

@@ -622,6 +622,7 @@ Vue.filter('hrStatus', value => {
     'PART_TIME': "兼职",
     'FULL_TIME': "全职",
     'DIMISSION': "离职",
+    "TEMPORARY":'临时工'
   }
   return template[value]
 })
@@ -745,4 +746,4 @@ Vue.filter('downListType', value => {
 // 退团状态
 Vue.filter('withdrawalStatus', value => {
   return constant.withdrawalStatus[value]
-})
+})

+ 3 - 1
src/views/arrearage-students/index.vue

@@ -220,9 +220,11 @@ export default {
   mounted() {
     const { query } = this.$route
     if (query.organId) {
-      console.log(query.organId)
       this.searchForm.organIds = [Number(query.organId)]
     }
+    if(query.result) {
+      this.searchForm.eduTeacherId = Number(query.result)
+    }
     getCooperation({ rows: 1000 }).then((res) => {
       this.cooperations = res.data.rows
     })

+ 11 - 4
src/views/categroyManager/insideSetting/staffManager.vue

@@ -212,7 +212,7 @@
                      collapse-tags
                      v-model.trim="form.organIdLists"
                      multiple>
-            <el-option v-for="item in selects.branchs"
+            <el-option v-for="item in organList"
                        :key="item.id"
                        :label="item.name"
                        :value="item.id"></el-option>
@@ -318,7 +318,7 @@
 <script>
 import pagination from '@/components/Pagination/index'
 import { permission } from "@/utils/directivePage";
-import { queryEmployByOrganId, employeeOperate, getUserRole, employeeAdd, employeeUpdate, hasCourseGroupRelation, updateEducationTeacherId } from '@/api/systemManage'
+import { queryEmployByOrganId, employeeOperate, getUserRole, employeeAdd, employeeUpdate, hasCourseGroupRelation, updateEducationTeacherId, queryEmployeeOrganByUser } from '@/api/systemManage'
 import { findEducationTeacher } from '@/api/specialSetting'
 import { findEducationUsers } from '@/api/buildTeam'
 import Tooltip from '@/components/Tooltip/index'
@@ -338,6 +338,7 @@ export default {
   components: { pagination, Tooltip, handover },
   data () {
     return {
+      organList: [],
       tableList: [],
       educationList: [],
       educationForm: {
@@ -404,7 +405,7 @@ export default {
     onBranchCheckAll () {
       this.form.organIdLists = []
 
-      this.selects.branchs.forEach(item => {
+      this.organList.forEach(item => {
         this.form.organIdLists.push(item.id)
       })
     },
@@ -478,7 +479,13 @@ export default {
       })
       this.$store.dispatch('setBranchs')
     },
-    roleOperation (type, data) {
+    async roleOperation (type, data) {
+      // 获取分部
+      await queryEmployeeOrganByUser().then(res => {
+        if(res.code == 200) {
+          this.organList = res.data
+        }
+      })
       this.formActionTitle = type
       this.roleStatus = true
       // 修改的时候

+ 5 - 1
src/views/main/abnormal/index.vue

@@ -155,10 +155,14 @@ export default {
   methods: {
     permission,
     handle(item) {
-      console.log(item)
       if(item[0].errorType == "NO_CLASS_MUSIC_GROUP_STUDENT_INFO" && !this.permission('/notClassStudent')) {
         return
       }
+
+      // 单独对未缴费学员数
+      if(item[0].errorType == 'STUDENT_NOT_PAYMENT') {
+        item[0].query['result'] = item[0].result ? (item[0].result || []).join(',') : undefined
+      }
       new Searchs().removeByKey(item[0].url)
       this.$router.push({
         path: item[0].url,

+ 15 - 1
src/views/main/constant.js

@@ -44,7 +44,8 @@ export const descs = {
   TEACHER_NOT_A_CLASS:'课程无老师考勤',
   TEACHER_SERVE_ERROR:'服务指标生成的作业未布置',
   WAIT_CREATE_PAYMENT_CALENDER:'缴费项目有效期结束前7天',
-  NO_CLASS_MUSIC_GROUP_STUDENT_INFO: '进行中乐团不在班级中的在读学员提醒'
+  NO_CLASS_MUSIC_GROUP_STUDENT_INFO: '进行中乐团不在班级中的在读学员提醒',
+  COURSE_TIME_ERROR: '课程开始时间在00:00:00至05:59:59为时间安排异常',
 }
 
 const dates = {
@@ -53,6 +54,16 @@ const dates = {
 }
 
 export const errorType = {
+  COURSE_TIME_ERROR: {
+    name: '课程时间安排异常',
+    isError: false,
+    url: '/business/teamCourseList',
+    always: true,
+    query: {
+      searchType: 'COURSE_TIME_ERROR',
+      // ...dates
+    },
+  },
   MUSIC_PATROL_ITEM: {
     name: '乐团巡查事项异常',
     isError: false,
@@ -85,6 +96,9 @@ export const errorType = {
     isError: true,
     url: '/business/ArrearageStudents',
     always: true,
+    query: {
+      
+    }
   },
   STUDENT_APPLY_FOR_QUIT_MUSIC_GROUP: {
     name: '申请退团学员数',

+ 14 - 0
src/views/repairManager/repairList.vue

@@ -117,6 +117,8 @@
         <el-form-item>
           <el-button type="danger" native-type="submit">搜索</el-button>
           <el-button native-type="reset" type="primary">重置</el-button>
+           <!-- v-permission="'studentRepair/export'" -->
+          <el-button @click="onExport" type="primary">导出</el-button>
         </el-form-item>
       </save-form>
       <div class="tableWrap">
@@ -426,6 +428,9 @@ import { getToken } from "@/utils/auth";
 import pagination from "@/components/Pagination/index";
 import load from "@/utils/loading";
 import { getSoundTree } from "@/api/buildTeam";
+import { Export } from '@/utils/downLoadFile'
+import qs from 'qs'
+import { getTimes } from "@/utils";
 import {
   findAllTechnician,
   studentRepairList,
@@ -573,6 +578,15 @@ export default {
         }
       });
     },
+    onExport() {
+      const {timer, ...rest} = this.searchForm
+      Export(this, {
+        url: '/api-web/studentRepair/export',
+        fileName: '维修单.xlsx',
+        method: 'post',
+        params: qs.stringify({ ...rest, ...getTimes(timer, ["startTime", "endTime"]) })
+      }, '您确定导出维修单列表?')
+    }
   },
   watch: {
     repairVisible(val) {

+ 76 - 33
src/views/serverDetail/index.vue

@@ -69,6 +69,21 @@
             v-model.trim="searchForm.operatorId"
           />
         </el-form-item>
+        <el-form-item prop="jobNature">
+          <el-select
+            v-model.trim="searchForm.jobNature"
+            filterable
+            clearable
+            placeholder="工作类型"
+          >
+            <el-option
+              v-for="item in jobNature"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
         <el-form-item>
           <el-date-picker
             style="width: 410px"
@@ -87,7 +102,12 @@
         <el-form-item>
           <el-button native-type="submit" type="primary">搜索</el-button>
           <el-button native-type="reset" type="danger">重置</el-button>
-          <el-button @click="onExport" type="primary" v-permission="'export/teacherServeInfo'">导出</el-button>
+          <el-button
+            @click="onExport"
+            type="primary"
+            v-permission="'export/teacherServeInfo'"
+            >导出</el-button
+          >
         </el-form-item>
       </save-form>
       <div class="btnWraps" style="margin-bottom: 20px">
@@ -126,20 +146,33 @@
             prop="teacherName"
             label="老师姓名"
           ></el-table-column>
-           <el-table-column
+          <el-table-column
             align="center"
             prop="teacherName"
-            label="服务周期"
-            width="180px"
+            label="工作类型"
           >
           <template slot-scope="scope">
             <div>
-              {{scope.row.monday | dayjsFormat}}~{{scope.row.sunday | dayjsFormat}}
+              {{ scope.row.jobNature|hrStatus}}
             </div>
           </template>
           </el-table-column>
           <el-table-column
             align="center"
+            prop="teacherName"
+            label="服务周期"
+            width="180px"
+          >
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.monday | dayjsFormat }}~{{
+                  scope.row.sunday | dayjsFormat
+                }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
             prop="homeworkNum"
             label="课后作业(节)"
           ></el-table-column>
@@ -153,23 +186,24 @@
               {{ scope.row.unDone ? "是" : "否" }}
             </template>
           </el-table-column>
-          <el-table-column
-            align="center"
-            prop="remindDate"
-            label="提醒时间"
-          >
-          <template slot-scope="scope">
-            <div>
-            {{scope.row.remindDate | dateForMinFormat}}
-            </div>
-          </template>
+          <el-table-column align="center" prop="remindDate" label="提醒时间">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.remindDate | dateForMinFormat }}
+              </div>
+            </template>
           </el-table-column>
           <el-table-column
             align="center"
             prop="operatorName"
             label="操作人"
           ></el-table-column>
-          <el-table-column align="center" prop="studentId" label="操作" width="160px">
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="操作"
+            width="160px"
+          >
             <template slot-scope="scope">
               <div>
                 <el-button type="text" @click="gotoDteail(scope.row)"
@@ -226,8 +260,9 @@ import load from "@/utils/loading";
 import { getTeacherServeInfo, teacherServeRemindPush } from "./api";
 import { getTimes } from "@/utils";
 import { getNowDateAndSunday, getNowDateAndMonday } from "@/utils/date";
-import { Export } from '@/utils/downLoadFile'
-import qs from 'qs'
+import { jobNature } from "@/utils/searchArray";
+import { Export } from "@/utils/downLoadFile";
+import qs from "qs";
 export default {
   components: { pagination, serverMask },
   data() {
@@ -239,6 +274,7 @@ export default {
         reminded: "",
         unDone: "",
         operatorId: "",
+        jobNature: "",
       },
       orderDate: [],
       tableList: [],
@@ -253,6 +289,7 @@ export default {
       lookVisible: false,
       activeRow: null,
       chioseList: [],
+      jobNature: jobNature,
     };
   },
   //生命周期 - 创建完成(可以访问当前this实例)
@@ -270,7 +307,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 = [
@@ -282,9 +319,8 @@ export default {
       this.getList();
     },
     async getList() {
-
       try {
-        const {orderDate, ...rest} = this.searchForm;
+        const { orderDate, ...rest } = this.searchForm;
         const result = await getTeacherServeInfo({
           ...rest,
           ...getTimes(this.orderDate, ["monday", "sunday"]),
@@ -322,10 +358,10 @@ export default {
     },
     changeWeek(val) {
       if (val) {
-        this.orderDate =  [
+        this.orderDate = [
           getNowDateAndMonday(val[0]),
           getNowDateAndSunday(val[1]),
-        ]
+        ];
       } else {
         this.getDefaultTime();
       }
@@ -370,24 +406,31 @@ export default {
     handleSelectionChange(arr) {
       this.chioseList = arr;
     },
-    bigin(){
+    bigin() {
       let self = this;
       return {
         firstDayOfWeek: 1,
         disabledDate(time) {
-            return time.getTime() >= Date.now();
+          return time.getTime() >= Date.now();
         },
       };
     },
     onExport() {
-      const {orderDate, ...rest} = this.searchForm;
-      Export(this, {
-        url: '/api-web/export/teacherServeInfo',
-        fileName: '退团申请.xlsx',
-        method: 'post',
-        params: qs.stringify({ ...rest, ...getTimes(this.orderDate, ["monday", "sunday"]) })
-      }, '您确定导出退团申请列表?')
-    }
+      const { orderDate, ...rest } = this.searchForm;
+      Export(
+        this,
+        {
+          url: "/api-web/export/teacherServeInfo",
+          fileName: "退团申请.xlsx",
+          method: "post",
+          params: qs.stringify({
+            ...rest,
+            ...getTimes(this.orderDate, ["monday", "sunday"]),
+          }),
+        },
+        "您确定导出退团申请列表?"
+      );
+    },
   },
 };
 </script>

+ 3 - 3
src/views/teamBuild/signupList.vue

@@ -68,9 +68,6 @@
             延长报名
           </div>
           <div class="newBand" @click="onCreateQRCode('payment')">报名链接</div>
-          <div class="newBand" @click="onCreateQRCode('rePayment')">
-            报名链接(无乐器)
-          </div>
           <div class="newBand" @click="onCreateQRCode('detail')">缴费详情</div>
           <div
             class="newBand"
@@ -100,6 +97,9 @@
           >
             合并学员
           </div>
+          <div class="newBand" style="background-color: #f97215; border: 1px solid #f97215;" @click="onCreateQRCode('rePayment')">
+            报名链接(无乐器)
+          </div>
         </div>
       </div>
       <el-dialog

+ 18 - 3
src/views/teamDetail/components/modals/classroom-preview.vue

@@ -1,13 +1,14 @@
 <template>
   <div>
-    <el-form inline>
+    <!-- <el-form inline>
       <el-form-item label="主教老师:">{{coreTeacherName}}</el-form-item>
       <el-form-item label="助教老师:" v-if="assistantName">{{assistantName}}</el-form-item>
-    </el-form>
+    </el-form> -->
     <el-table
       :header-cell-style="{background:'#EDEEF0',color:'#444'}"
       :data="typelist"
     >
+
       <el-table-column
         label="课程类型"
         prop="name"
@@ -31,6 +32,14 @@
       :data="details"
       max-height="300px"
     >
+             <el-table-column
+        label="主教老师"
+        prop="actualTeacherName"
+      ></el-table-column>
+           <el-table-column
+        label="助教老师"
+        prop="teachingTeacherNames"
+      ></el-table-column>
       <el-table-column
         label="课程类型"
         prop="type"
@@ -46,7 +55,13 @@
       <el-table-column
         label="开始时间"
         prop="startClassTime"
-      ></el-table-column>
+      >
+      <template slot-scope="scope">
+        <div>
+          {{scope.row.startClassTime | dateForMinFormat}}
+        </div>
+      </template>
+      </el-table-column>
       <el-table-column
         label="课程时长(分钟)"
         key="time"

+ 296 - 259
src/views/teamDetail/components/modals/classroom-setting-item.vue

@@ -10,212 +10,241 @@
         <el-radio :label="false">否</el-radio>
       </el-radio-group>
     </el-form-item> -->
-    <el-table v-if="form && form.cycle" :data="form.cycle">
-      <el-table-column prop="time" label="课程时长(分)" width="160">
+    <el-table v-if="form && form.cycle" :data="form.cycle" :show-header="false">
+      <el-table-column>
         <template slot-scope="scope">
-          <el-form-item
-            :prop="'classs.' + type + '.cycle.' + scope.$index + '.time'"
-            :rules="[{ required: true, message: '请选择课程时长' }]"
-            inline-message
-          >
-            <el-select
-              v-model.trim="scope.row.time"
-              style="width: 100% !important"
-              placeholder="请选择课程时长"
-              clearable
-              :disabled="!!selectPrice"
-              @change="
-                (val) => {
-                  startTimeChange(scope, val);
-                }
+          <div>
+            <el-form-item
+              :prop="
+                'classs.' + type + '.cycle.' + scope.$index + '.coreTeacher'
               "
-              filterable
+              label-width="88px"
+              :rules="[{ required: true, message: '请选择主教老师' }]"
             >
-              <el-option
-                v-for="(item, index) in pricesArray"
-                :key="index"
-                :disabled="
-                  surplustime + (parseFloat(scope.row.time) || 0) < item
-                "
-                :label="item"
-                :value="item"
+              <el-select
+                v-model.trim="scope.row.coreTeacher"
+                placeholder="请选择主教老师"
+                clearable
+                filterable
               >
-              </el-option>
-            </el-select>
-            <!-- <el-input disabled v-model="scope.row.time" placeholder="请输入课程时长"/> -->
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="预计课时数" width="160">
-        <template slot-scope="scope">
-          <!--   -->
-          <el-form-item
-            :prop="
-              'classs.' + type + '.cycle.' + scope.$index + '.expectCourseNum'
-            "
-            :rules="[
-              { required: true, message: '请输入预计课时数' },
-              { pattern: /^\+?[1-9]\d*$/, message: '请输入大于0的正整数' },
-            ]"
-            inline-message
-          >
-            <el-input
-              type="number"
-              v-model.trim="scope.row.expectCourseNum"
-              placeholder="请输入预计课数"
-              style="width: 130px !important"
-              @input="(val)=>{getUseTime(scope.row)}"
+                <!--     @change="changecoreTeacher" -->
+                <el-option
+                  v-for="(item, index) in teacherList"
+                  :key="index"
+                  :label="item.realName"
+                  :value="String(item.id)"
+                ></el-option>
+              </el-select>
+              <!-- <remote-search :commit="'setTeachers'" v-model="form.coreTeacher"  /> -->
+            </el-form-item>
+            <el-form-item
+              prop="assistant"
+              v-if="
+                activeType != 'HIGH_ONLINE' &&
+                activeType != 'MUSIC_NETWORK' &&
+                type != 'HIGH_ONLINE' &&
+                type != 'MUSIC_NETWORK'
+              "
             >
-            </el-input>
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column prop="dayOfWeek" label="循环周期" width="160">
-        <template slot-scope="scope">
-          <el-form-item
-            inline-message
-            :rules="[{ required: true, message: '请选择循环周期' }]"
-            :prop="'classs.' + type + '.cycle.' + scope.$index + '.dayOfWeek'"
-          >
-            <el-select
-              v-model.trim="scope.row.dayOfWeek"
-              style="width: 100% !important"
-              placeholder="请选择循环周期"
-              clearable
-              filterable
-              @change="(val)=>{getUseTime(scope.row)}"
+              <!-- <remote-search :commit="'setTeachers'" v-model="form.assistant"  :multiple='true'/> -->
+              <el-select
+                v-model.trim="scope.row.assistant"
+                placeholder="请选择助教老师"
+                filterable
+                clearable
+                multiple
+                collapse-tags
+              >
+                <el-option
+                  v-for="(item, index) in cooperationList"
+                  :key="index"
+                  :label="item.realName"
+                  :value="item.id"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item
+              :prop="'classs.' + type + '.cycle.' + scope.$index + '.time'"
+              :rules="[{ required: true, message: '请选择课程时长' }]"
+              inline-message
             >
-              <el-option
-                v-for="(item, index) in weekDateList"
-                :key="index"
-                :label="item.label"
-                :value="item.value"
+              <el-select
+                v-model.trim="scope.row.time"
+                style="width: 180px !important"
+                placeholder="请选择课程时长"
+                clearable
+                :disabled="!!selectPrice"
+                @change="
+                  (val) => {
+                    startTimeChange(scope, val);
+                  }
+                "
+                filterable
               >
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </template>
-      </el-table-column>
-
-      <el-table-column prop="startClassTime" label="开始时间" width="160">
-        <template slot-scope="scope">
-          <el-form-item
-            :prop="
-              'classs.' + type + '.cycle.' + scope.$index + '.startClassTime'
-            "
-            :rules="[{ required: true, message: '请选择开始时间' }]"
-            inline-message
-          >
-            <el-time-picker
-              style="width: 100% !important"
-              v-model.trim="scope.row.startClassTime"
-              format="HH:mm"
-              value-format="HH:mm"
-              placeholder="请选择时间"
-              @change="timeChange(scope.row)"
-              :picker-options="{
-                selectableRange: ['04:30:00 - 23:59:59'],
-              }"
+                <el-option
+                  v-for="(item, index) in pricesArray"
+                  :key="index"
+                  :disabled="
+                    surplustime + (parseFloat(scope.row.time) || 0) < item
+                  "
+                  :label="item"
+                  :value="item"
+                >
+                </el-option>
+              </el-select>
+              <!-- <el-input disabled v-model="scope.row.time" placeholder="请输入课程时长"/> -->
+            </el-form-item>
+            <el-form-item
+              :prop="
+                'classs.' + type + '.cycle.' + scope.$index + '.expectCourseNum'
+              "
+              :rules="[
+                { required: true, message: '请输入预计课时数' },
+                { pattern: /^\+?[1-9]\d*$/, message: '请输入大于0的正整数' },
+              ]"
+              inline-message
             >
-              <!--   @change="startTimeChange(scope.row)" -->
-            </el-time-picker>
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column prop="endClassTime" label="结束时间" width="160">
-        <template slot-scope="scope">
-          <el-form-item
-            :prop="
-              'classs.' + type + '.cycle.' + scope.$index + '.endClassTime'
-            "
-            inline-message
-          >
-            <el-time-picker
-              style="width: 100% !important"
-              v-model.trim="scope.row.endClassTime"
-              format="HH:mm"
-              disabled
-              value-format="HH:mm"
-              placeholder="请选择时间"
-              :picker-options="{
-                selectableRange: [scope.row.startClassTime + ':00 - 23:59:59'],
-              }"
+              <!--  style="width: 130px !important" -->
+              <el-input
+                style="width: 180px !important"
+                type="number"
+                v-model.trim="scope.row.expectCourseNum"
+                placeholder="请输入预计课数"
+                @input="
+                  (val) => {
+                    getUseTime(scope.row);
+                  }
+                "
+              >
+              </el-input>
+            </el-form-item>
+            <el-form-item
+              inline-message
+              :rules="[{ required: true, message: '请选择循环周期' }]"
+              :prop="'classs.' + type + '.cycle.' + scope.$index + '.dayOfWeek'"
             >
-            </el-time-picker>
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="是否跳过节假日" width="160">
-        <template slot-scope="scope">
-          <el-form-item
-            :prop="'classs.' + type + '.cycle.' + scope.$index + '.holiday'"
-            :rules="[{ required: true, message: '请选择是否跳过节假日' }]"
-            inline-message
-          >
-            <el-select
-              v-model.trim="scope.row.holiday"
-              style="width: 100% !important"
-              placeholder="是否跳过节假日"
-              filterable
-              @change="holidayChange(scope.row)"
+              <el-select
+                v-model.trim="scope.row.dayOfWeek"
+                style="width: 180px !important"
+                placeholder="请选择循环周期"
+                clearable
+                filterable
+                @change="
+                  (val) => {
+                    getUseTime(scope.row);
+                  }
+                "
+              >
+                <el-option
+                  v-for="(item, index) in weekDateList"
+                  :key="index"
+                  :label="item.label"
+                  :value="item.value"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item
+              :prop="
+                'classs.' + type + '.cycle.' + scope.$index + '.startClassTime'
+              "
+              :rules="[{ required: true, message: '请选择开始时间' }]"
+              inline-message
             >
-              <el-option label="是" :value="true"></el-option>
-              <el-option label="否" :value="false"> </el-option>
-            </el-select>
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="排课起始时间" width="170">
-        <template slot-scope="scope">
-          <el-form-item
-            inline-message
-            :prop="'classs.' + type + '.cycle.' + scope.$index + '.startDate'"
-            :rules="[{ required: true, message: '请选择排课起始时间' }]"
-          >
-            <el-date-picker
-              v-model.trim="scope.row.startDate"
-              :picker-options="pickerOptions"
-              style="width: 100% !important"
-              type="date"
-              value-format="yyyy-MM-dd"
-              placeholder="选择日期"
-              @change="
-                (val) => {
-                  changeStartDate(val, scope.row);
-                }
+              <el-time-picker
+                style="width: 180px !important"
+                v-model.trim="scope.row.startClassTime"
+                format="HH:mm"
+                value-format="HH:mm"
+                placeholder="请选择开始时间"
+                @change="timeChange(scope.row)"
+                :picker-options="{
+                  selectableRange: ['04:30:00 - 23:59:59'],
+                }"
+              >
+                <!--   @change="startTimeChange(scope.row)" -->
+              </el-time-picker>
+            </el-form-item>
+            <el-form-item
+              :prop="
+                'classs.' + type + '.cycle.' + scope.$index + '.endClassTime'
               "
+              inline-message
             >
-            </el-date-picker>
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="排课结束时间" width="170">
-        <template slot-scope="scope">
-          <el-form-item
-            inline-message
-            :prop="'classs.' + type + '.cycle.' + scope.$index + '.endDate'"
-            :rules="[{ required: true, message: '请选择排课结束时间' }]"
-          >
-            <el-date-picker
-              v-model.trim="scope.row.endDate"
-              :disabled="true"
-              :picker-options="pickerOptions"
-              style="width: 100% !important"
-              type="date"
-              value-format="yyyy-MM-dd"
-              placeholder="选择日期"
+              <el-time-picker
+                style="width: 180px !important"
+                v-model.trim="scope.row.endClassTime"
+                format="HH:mm"
+                disabled
+                value-format="HH:mm"
+                placeholder="请选择结束时间"
+                :picker-options="{
+                  selectableRange: [
+                    scope.row.startClassTime + ':00 - 23:59:59',
+                  ],
+                }"
+              >
+              </el-time-picker>
+            </el-form-item>
+            <el-form-item
+              :prop="'classs.' + type + '.cycle.' + scope.$index + '.holiday'"
+              :rules="[{ required: true, message: '请选择是否跳过节假日' }]"
+              inline-message
             >
-            </el-date-picker>
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column prop="date" width="50px">
-        <template slot-scope="scope">
-          <i
-            @click="remove(scope.$index, scope)"
-            v-if="form.cycle.length > 1"
-            class="close-icon el-icon-circle-close"
-          ></i>
+              <el-select
+                v-model.trim="scope.row.holiday"
+                style="width: 180px !important"
+                placeholder="是否跳过节假日"
+                filterable
+                @change="holidayChange(scope.row)"
+              >
+                <el-option label="是" :value="true"></el-option>
+                <el-option label="否" :value="false"> </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item
+              inline-message
+              :prop="'classs.' + type + '.cycle.' + scope.$index + '.startDate'"
+              :rules="[{ required: true, message: '请选择排课起始时间' }]"
+            >
+              <el-date-picker
+                v-model.trim="scope.row.startDate"
+                :picker-options="pickerOptions"
+                style="width: 180px !important"
+                type="date"
+                value-format="yyyy-MM-dd"
+                placeholder="选择日期"
+                @change="
+                  (val) => {
+                    changeStartDate(val, scope.row);
+                  }
+                "
+              >
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item
+              inline-message
+              :prop="'classs.' + type + '.cycle.' + scope.$index + '.endDate'"
+              :rules="[{ required: true, message: '请选择排课结束时间' }]"
+            >
+              <el-date-picker
+                v-model.trim="scope.row.endDate"
+                :disabled="true"
+                :picker-options="pickerOptions"
+                style="width: 180px !important"
+                type="date"
+                value-format="yyyy-MM-dd"
+                placeholder="选择日期"
+              >
+              </el-date-picker>
+            </el-form-item>
+
+            <i
+              @click="remove(scope.$index, scope)"
+              v-if="form.cycle.length > 1"
+              class="close-icon el-icon-circle-close"
+            ></i>
+          </div>
         </template>
       </el-table-column>
     </el-table>
@@ -242,7 +271,19 @@ for (const item of classTimeList) {
 }
 
 export default {
-  props: ["form", "type", "surplustime", "prices", "selectPrice", "holidays"],
+  props: [
+    "form",
+    "type",
+    "surplustime",
+    "prices",
+    "selectPrice",
+    "holidays",
+    "teacherList",
+    "activeType",
+    "cooperationList",
+    "coreid",
+    "assistant",
+  ],
   data() {
     return {
       classTimeListByType,
@@ -279,29 +320,33 @@ export default {
   },
   methods: {
     updateUseTime() {
-      let time = 0
-        for (const item of this.form.cycle) {
-          time += (item.time || 0) * (item.expectCourseNum || 0)
-        }
-        this.useTime = time
-        this.$emit('setUserTime', time, this.type)
+      let time = 0;
+      for (const item of this.form.cycle) {
+        time += (item.time || 0) * (item.expectCourseNum || 0);
+      }
+      this.useTime = time;
+      this.$emit("setUserTime", time, this.type);
     },
     create() {
-      if(this.surplustime<=this.useTime){
-        this.$message.error('已排课时长使用完毕,请修改预计课时数')
-        return
+      if (this.surplustime <= this.useTime) {
+        this.$message.error("已排课时长使用完毕,请修改预计课时数");
+        return;
       }
-      const initVal = {};
+      const initVal = {
+        coreTeacher: this.coreid,
+        assistant: this.assistant,
+      };
       if (this.selectPrice) {
         initVal.time = this.selectPrice;
       }
+      console.log(initVal)
       this.form.cycle.push(initVal);
-      this.updateUseTime()
+      this.updateUseTime();
     },
 
     remove(index) {
       this.form.cycle.splice(index, 1);
-      this.updateUseTime()
+      this.updateUseTime();
     },
     startTimeChange(item, val) {
       this.getUseTime(item.row);
@@ -316,7 +361,7 @@ export default {
         this.$set(item.row, "endClassTime", "");
       }
       if (val) {
-      let activeTime = val * Math.max((item.row.expectCourseNum || 0), 0)
+        let activeTime = val * Math.max(item.row.expectCourseNum || 0, 0);
         this.$set(
           item.row,
           "expectCourseNum",
@@ -339,81 +384,72 @@ export default {
       } else {
         this.$set(item, "endClassTime", "");
       }
-      this.updateUseTime()
+      this.updateUseTime();
     },
     holidayChange(row) {
-      this.updateEndTime(row)
+      this.updateEndTime(row);
     },
     getUseTime(row) {
-      this.updateEndTime(row)
+      this.updateEndTime(row);
       this.useTime = 0;
       this.form.cycle.forEach((item) => {
         this.useTime +=
           (item.expectCourseNum ? parseInt(item.expectCourseNum) : 0) *
           parseInt(item.time);
       });
-      this.updateUseTime()
-    //  this.$emit('setUserTime', this.useTime, this.type)
+      this.updateUseTime();
+      //  this.$emit('setUserTime', this.useTime, this.type)
     },
     addData(startDate, dayOfWeek) {
       let num;
-      let dayjs = this.$helpers.dayjs
+      let dayjs = this.$helpers.dayjs;
       let date = dayjs(startDate).toDate();
       dayOfWeek - date.getDay() >= 0
         ? (num = dayOfWeek - date.getDay())
         : (num = dayOfWeek - date.getDay() + 7);
-      return num
+      return num;
     },
     updateEndTime(row) {
-      console.log(row)
-        if (row.dayOfWeek && row.startDate && typeof row.holiday === 'boolean') {
-          // const num = this.addData(row.startDate, row.dayOfWeek)
-          // const week = dayjs(row.startDate).get('day') == 0 ? 7 : dayjs(row.startDate).get('day')
-          const selectWeek = row.dayOfWeek == 7 ? 0 : row.dayOfWeek
-          let exp = Math.max(row.expectCourseNum, 0)
-          let end = dayjs(row.startDate)
-          // console.log(selectWeek, end.get('day'))
-          if (row.holiday) {
-            while (exp > 0) {
-              if (selectWeek == end.get('day') && !this.holidays.includes(end.format('YYYY-MM-DD'))) {
-                exp--
-              }
-              end = end.add(1, 'day')
-              if (exp === 0) {
-                end = end.subtract(1, 'day')
-              }
+      console.log(row);
+      if (row.dayOfWeek && row.startDate && typeof row.holiday === "boolean") {
+        // const num = this.addData(row.startDate, row.dayOfWeek)
+        // const week = dayjs(row.startDate).get('day') == 0 ? 7 : dayjs(row.startDate).get('day')
+        const selectWeek = row.dayOfWeek == 7 ? 0 : row.dayOfWeek;
+        let exp = Math.max(row.expectCourseNum, 0);
+        let end = dayjs(row.startDate);
+        // console.log(selectWeek, end.get('day'))
+        if (row.holiday) {
+          while (exp > 0) {
+            if (
+              selectWeek == end.get("day") &&
+              !this.holidays.includes(end.format("YYYY-MM-DD"))
+            ) {
+              exp--;
             }
-          } else {
-            while (exp > 0) {
-              if (selectWeek == end.get('day')) {
-                exp--
-              }
-              end = end.add(1, 'day')
-              if (exp === 0) {
-                end = end.subtract(1, 'day')
-              }
+            end = end.add(1, "day");
+            if (exp === 0) {
+              end = end.subtract(1, "day");
             }
           }
-          const enumd = this.addData(end.format('YYYY-MM-DD'), row.dayOfWeek)
-          console.log(enumd)
-          // end = end.add(enumd, 'day')
-          this.$set(
-          row,
-          "endDate",
-          end.format('YYYY-MM-DD')
-        );
+        } else {
+          while (exp > 0) {
+            if (selectWeek == end.get("day")) {
+              exp--;
+            }
+            end = end.add(1, "day");
+            if (exp === 0) {
+              end = end.subtract(1, "day");
+            }
+          }
+        }
+        const enumd = this.addData(end.format("YYYY-MM-DD"), row.dayOfWeek);
+        console.log(enumd);
+        // end = end.add(enumd, 'day')
+        this.$set(row, "endDate", end.format("YYYY-MM-DD"));
       } else {
-        this.$set(
-          row,
-          "endDate",
-          ''
-        );
+        this.$set(row, "endDate", "");
       }
 
-
-
-
-
       // if (row.dayOfWeek && row.startDate && typeof row.holiday === 'boolean') {
       //     // const num = this.addData(row.startDate, row.dayOfWeek)
       //     const week = dayjs(row.startDate).get('day') == 0 ? 7 : dayjs(row.startDate).get('day')
@@ -443,8 +479,8 @@ export default {
       // }
     },
     changeStartDate(val, row) {
-      this.updateEndTime(row)
-      this.updateUseTime()
+      this.updateEndTime(row);
+      this.updateUseTime();
     },
   },
 };
@@ -454,5 +490,6 @@ export default {
   cursor: pointer;
   font-size: 16px;
   margin-bottom: 24px;
+  line-height: 40px;
 }
 </style>

+ 70 - 42
src/views/teamDetail/components/modals/classroom-setting.vue

@@ -21,7 +21,7 @@
           ></el-input>
         </el-form-item>
       </el-row>
-      <el-form-item
+      <!-- <el-form-item
         label="主教老师"
         prop="coreTeacher"
         label-width="88px"
@@ -46,9 +46,9 @@
             }}</span>
           </el-option>
         </el-select>
-        <!-- <remote-search :commit="'setTeachers'" v-model="form.coreTeacher"  /> -->
-      </el-form-item>
-      <el-form-item
+        <remote-search :commit="'setTeachers'" v-model="form.coreTeacher"  />
+     </el-form-item> -->
+      <!-- <el-form-item
         label="助教老师"
         prop="assistant"
         v-if="
@@ -57,7 +57,7 @@
           activeType != 'MUSIC_NETWORK'
         "
       >
-        <!-- <remote-search :commit="'setTeachers'" v-model="form.assistant"  :multiple='true'/> -->
+
         <el-select
           v-model.trim="form.assistant"
           placeholder="请选择助教老师"
@@ -77,7 +77,7 @@
             }}</span>
           </el-option>
         </el-select>
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item
         v-if="!!Object.keys(allClasss).length"
         style="display: block"
@@ -111,7 +111,12 @@
           </template>
           <courseItem
             :surplustime="surplustime[key]"
+            :coreid="coreid"
+            :assistant="assistant"
             @setUserTime="setUserTime"
+            :teacherList="teacherList"
+            :activeType="activeType"
+            :cooperationList="cooperationList"
             :type="key"
             :form="item"
             :prices="prices"
@@ -131,7 +136,7 @@
       title="班级预览"
       :visible.sync="previewVisible"
       append-to-body
-      width="700px"
+      width="900px"
     >
       <classrome-preview
         :types="form.classs"
@@ -163,10 +168,10 @@ import {
 import courseItem from "./classroom-setting-item";
 import { classTimeList } from "@/utils/searchArray";
 import MusicStore from "@/views/resetTeaming/store";
-import { sysConfigList } from '@/api/generalSettings'
+import { sysConfigList } from "@/api/generalSettings";
 import { queryByOrganIdAndCourseType } from "@/views/resetTeaming/api";
 import { isEmpty } from "lodash";
-import classromePreview from './classroom-preview'
+import classromePreview from "./classroom-preview";
 
 const classTimeListByType = {};
 for (const item of classTimeList) {
@@ -212,7 +217,7 @@ export default {
   ],
   components: {
     courseItem,
-    'classrome-preview': classromePreview
+    "classrome-preview": classromePreview,
   },
   data() {
     return {
@@ -232,6 +237,8 @@ export default {
       previewVisible: false,
       previewList: [],
       holidays: [],
+      coreid: "",
+      assistant: [],
     };
   },
   watch: {
@@ -276,15 +283,15 @@ export default {
     } catch (error) {}
     this.setCourseTypeListByName();
     this.formatClasss();
-    this.FetchHoliday()
+    this.FetchHoliday();
   },
   methods: {
     async FetchHoliday() {
       try {
         const res = await sysConfigList({
-          group: 'holiday'
-        })
-        this.holidays = JSON.parse(res.data[0].paranValue)
+          group: "holiday",
+        });
+        this.holidays = JSON.parse(res.data[0].paranValue);
       } catch (error) {}
     },
     setCourseTypeListByName() {
@@ -295,20 +302,20 @@ export default {
       this.courseTypeListByName = courseTypeListByName;
     },
     async formatClasss() {
+      this.coreid = "";
+      this.assistant = [];
       if (this.detail) {
-        let coreid = "";
-        const assistant = [];
         const { classGroupTeacherMapperList } = this.detail;
         for (const item of classGroupTeacherMapperList || []) {
           if (item.teacherRole === "BISHOP") {
-            coreid = String(item.userId);
+            this.coreid = String(item.userId);
           }
           if (item.teacherRole === "TEACHING") {
-            assistant.push(item.userId);
+            this.assistant.push(item.userId);
           }
         }
-        this.$set(this.form, "coreTeacher", String(coreid));
-        this.$set(this.form, "assistant", assistant);
+        this.$set(this.form, "coreTeacher", String(this.coreid));
+        this.$set(this.form, "assistant", this.assistant);
       }
       const studentIds = this.detail
         ? undefined
@@ -348,6 +355,8 @@ export default {
             cycle: [
               {
                 time: this.selectPrices ? this.selectPrices[key] : undefined,
+                coreTeacher: this.coreid,
+                assistant: this.assistant,
               },
             ],
           };
@@ -370,11 +379,13 @@ export default {
       for (const key in this.musicCourseSettings) {
         if (Object.hasOwnProperty.call(this.musicCourseSettings, key)) {
           const allTime = this.musicCourseSettings[key];
-          const useTime = this.musicSurplus[key]
+          const useTime = this.musicSurplus[key];
 
           if (useTime > allTime) {
-            this.$message.error(this.courseTypeListByName[key] + ' 课程时长不足')
-            return
+            this.$message.error(
+              this.courseTypeListByName[key] + " 课程时长不足"
+            );
+            return;
           }
         }
       }
@@ -402,19 +413,19 @@ export default {
                 students: this.studentSubmitedData?.seleched,
                 courseTimes: item.cycle.length,
                 courseTimeDtoList: item.cycle.map((_) => ({
-
+                  classGroupTeacherMapperList: this.formatTeacher(_),
                   courseType: key,
                   dayOfWeek: _.dayOfWeek,
                   endClassTime: _.endClassTime,
                   startClassTime: _.startClassTime,
-                  startDate:_.startDate,
-                  endDate:_.endDate,
+                  startDate: _.startDate,
+                  endDate: _.endDate,
                   holiday: _.holiday,
-                  expectCourseNum:_.expectCourseNum
+                  expectCourseNum: _.expectCourseNum,
                 })),
-              }
-              if (type && typeof type === 'string') {
-                data[type] = true
+              };
+              if (type && typeof type === "string") {
+                data[type] = true;
               }
               list.push(data);
             }
@@ -422,11 +433,15 @@ export default {
           try {
             if (this.detail) {
               let result = await classGroupUpdate(list);
-              this.previewVisible = false
+              this.previewVisible = false;
               if (result.code == 207) {
-                await this.$confirm((result.msg || `当前课程课酬预计为0,是否继续`), "提示", {
-                  type: "warning",
-                })
+                await this.$confirm(
+                  result.msg || `当前课程课酬预计为0,是否继续`,
+                  "提示",
+                  {
+                    type: "warning",
+                  }
+                );
                 // obj.allowZeroSalary = true;
                 list.forEach((item) => {
                   item.allowZeroSalary = true;
@@ -437,8 +452,8 @@ export default {
                 return;
               }
               if (result.code == 206) {
-                this.previewVisible = true
-                this.previewList = result.data
+                this.previewVisible = true;
+                this.previewList = result.data;
                 return;
               }
               this.$message.success("排课修改成功");
@@ -485,19 +500,32 @@ export default {
       this.collapses = val;
     },
     changecoreTeacher(val) {},
-    updateMusicSurplus() {
-
-    },
+    updateMusicSurplus() {},
     setUserTime(time, type) {
       // console.log(time, type)
-      this.$set(this.musicSurplus, type, (time || 0))
+      this.$set(this.musicSurplus, type, time || 0);
       // console.log(this.musicSurplus)
-       this.$forceUpdate()
+      this.$forceUpdate();
       // this.$nextTick(res=>{
       //   this.musicSurplus[type] = time;
       //       console.log(this.musicSurplus[type])
       // })
-
+    },
+    formatTeacher(row) {
+      console.log(row);
+      let arr = [];
+      if (row.coreTeacher) {
+        let obj = {};
+        obj.teacherRole = "BISHOP";
+        obj.userId = row.coreTeacher;
+        arr.push(obj);
+      }
+      if (row.assistant?.length > 0) {
+        row.assistant.forEach((ass) => {
+          arr.push({ teacherRole: "TEACHING", userId: ass });
+        });
+      }
+      return arr;
     },
   },
   // watch:{

+ 11 - 7
src/views/teamDetail/components/modals/select-student.vue

@@ -30,7 +30,8 @@
             <!-- <remote-search :commit="'setTeachers'" v-model="form.coreTeacher"  /> -->
           </el-form-item>
         </el-col>
-        <el-col :span="10" :offset="4">
+        <!-- :offset="4" -->
+        <el-col :span="10" >
           <el-form-item
             label="助教老师"
             prop="assistant"
@@ -76,8 +77,9 @@
             />
           </el-form-item>
         </el-col>
-        <el-col :span="10" :offset="showName ? 4 : 0">
-          <el-form-item label="声部" style="margin-right: 0;">
+        <!-- :offset="showName ? 4 : 0" -->
+        <el-col :span="10" >
+          <el-form-item label="声部" style="margin-right: 0;" >
             <el-select
               v-model="sound"
               style="width: 100%"
@@ -98,6 +100,7 @@
         </el-col>
       </el-row>
       <el-transfer
+      v-if="!showName"
         filterable
         :titles="['所有学员', '已选学员']"
         filter-placeholder="请输入学生姓名"
@@ -214,9 +217,9 @@ export default {
       if (!this.isOnlyChangeUser && this.activeType == 'HIGH_ONLINE' && (this.seleched.length < 3 || this.seleched.length > 5)) {
         return this.$message.error('线上技能班必须为3-5人')
       }
-      if (this.seleched.length < 1 && !this.isStudentRemove) {
-        return this.$message.error('请至少选择一名学生')
-      }
+      // if (this.seleched.length < 1 && !this.isStudentRemove) {
+      //   return this.$message.error('请至少选择一名学生')
+      // }
       if (this.activeType == 'MUSIC_NETWORK' && this.seleched.length > 1) {
         return this.$message.error('乐团网管课仅可添加一名学生')
       }
@@ -235,7 +238,8 @@ export default {
           } else {
             this.$listeners.submited({
               seleched: this.seleched,
-              ...this.form
+              ...this.form,
+              soundList:this.sound
             })
           }
         }

+ 52 - 6
src/views/teamDetail/components/resetClass.vue

@@ -118,9 +118,9 @@
                 <el-button
                   type="text"
                   v-if="
-                    permission('classGroup/classGroupUpdate') ||
+                   ( permission('classGroup/classGroupUpdate') ||
                     permission('classGroup/revisionClassGroup') ||
-                    permission('classGroup/revisionAddClassGroup')
+                    permission('classGroup/revisionAddClassGroup'))&&scope.row.studentNum>0
                   "
                   @click="classAdjustment(scope.row)"
                   >排课</el-button
@@ -232,7 +232,7 @@
     <!-- 老师以及课程设置 -->
     <el-dialog
       title="班级排课"
-      width="1400px"
+      width="1200px"
       :visible.sync="infoVisible"
       :modal-append-to-body="false"
     >
@@ -864,11 +864,49 @@ export default {
         },
       ];
     },
+    getClassDate(data) {
+      return {
+        type: this.activeType,
+        name: data?.name,
+        musicGroupId: this.teamid,
+        subjectIdList:
+          data?.soundList.length > 0 ? data?.soundList.join(",") : null,
+        teacherMapperList: formatClassGroupTeacherMapperList(
+          data.coreTeacher,
+          data.assistant
+        ),
+        groupType: "MUSIC",
+      };
+    },
     async submitClass(data) {
       const list = this.getSubmitData(data, { onlyCreateClassGroup: true });
+      let obj = this.getClassDate(data);
+      if (this.activeType == "MUSIC_NETWORK") {
+        try {
+          await revisionAddClassGroup(list);
+          this.$message.success("提交成功");
+          this.studentVisible = false;
+          this.getList();
+        } catch (error) {
+          console.log(error);
+        }
+      } else {
+        createClass(obj).then((res) => {
+          if (res.code == 200) {
+            this.studentVisible = false;
+            this.$message.success("提交成功");
+            this.getList();
+          }
+        });
+      }
+
+      return;
+      console.log(data);
       try {
         if (this.classType == 1) {
           // 0新建班级 2 3 4新增班级修改
+          console.log(list, "submitClass,临时班");
+          return;
           await revisionClassGroup(list);
           this.$message.success("提交成功");
         } else if (
@@ -876,6 +914,8 @@ export default {
           this.classType == 3 ||
           this.classType == 4
         ) {
+          console.log(list, "submitClass");
+          return;
           await revisionAddClassGroup(list);
           this.$message.success("提交成功");
         }
@@ -950,7 +990,7 @@ export default {
       this.isSearch = true;
       this.className = "";
       this.isTemporary = true;
-      this.activeType = "SPAN";
+      this.activeType = "SNAP";
       this.activeChioseSound = null;
       this.setType("SNAP");
       this.getNoClassStudent("SNAP");
@@ -984,7 +1024,7 @@ export default {
       console.log(this.activeChioseSound);
       // 搜索学生
       // 根据声部id  乐团id搜索学生
-      if (this.activeType == "SPAN") {
+      if (this.activeType == "SNAP") {
         teamSoundStudent({
           musicGroupId: this.teamid,
           actualSubjectId: this.activeChioseSound,
@@ -1075,7 +1115,8 @@ export default {
       this.isSearch = false;
       this.activeType = row.type;
       this.activeChioseSound = null;
-      this.isStudentRemove = row.currentClassTimes == row.totalClassTimes ? true : false // 上课时长是否没有
+      this.isStudentRemove =
+        row.currentClassTimes == row.totalClassTimes ? true : false; // 上课时长是否没有
       // 根据单机班id 查询声部班内的所有学生
       getClassAllStudent({ classGroupId: row.id }).then((res) => {
         if (res.code == 200) {
@@ -1400,6 +1441,8 @@ export default {
           };
           if (type == 1) {
             // 新增临时班级
+            console.log(obj, "submitTemporary");
+            return;
             revisionClassGroup(obj).then((res) => {
               if (res.code == 200) {
                 // 提示修改成功
@@ -1412,6 +1455,9 @@ export default {
           } else if (type == 2) {
             (obj.subjectId = this.teacherForm.sound),
               (obj.expectStudentNum = this.teacherForm.expectStudentNum);
+            console.log(obj, "submitTemporary");
+            return;
+            let data = {};
             // 新增声部班
             revisionAddClassGroup(obj).then((res) => {
               if (res.code == 200) {

+ 53 - 31
src/views/teamDetail/teamCourseList.vue

@@ -22,7 +22,7 @@
       >
         <el-form-item>
           <el-input
-          type="number"
+            type="number"
             v-model.trim="searchForm.courseIdSearch"
             clearable
             placeholder="课程编号"
@@ -332,18 +332,23 @@
             width="130px"
           >
             <template slot-scope="scope">
-              {{
-                scope.row.newCourseId > 0 &&
-                scope.row.newCourseId == scope.row.id
-                  ? "合并课"
-                  : null
-              }}
-              {{
-                scope.row.newCourseId > 0 &&
-                scope.row.newCourseId != scope.row.id
-                  ? "被合并课"
-                  : null
-              }}
+              <div>
+                <span
+                  v-if="
+                    scope.row.newCourseId > 0 &&
+                    scope.row.newCourseId == scope.row.id
+                  "
+                  >合并课
+                </span>
+                <el-button
+                  type="text"
+                  @click="common(scope.row)"
+                  v-if=" scope.row.newCourseId > 0 &&
+                  scope.row.newCourseId != scope.row.id"
+                >
+                  被合并课
+                </el-button>
+              </div>
             </template>
           </el-table-column>
           <el-table-column
@@ -387,13 +392,7 @@
                   @click="resetClass(scope.row)"
                   >调整</el-button
                 >
-                <el-button
-                  type="text"
-                  @click="common(scope.row)"
-                  v-if="scope.row.newCourseId > 0"
-                >
-                  合并课
-                </el-button>
+
                 <el-button
                   type="text"
                   @click="addCompound(scope.row)"
@@ -526,10 +525,28 @@
           </div>
         </el-form-item>
         <el-form-item label="学员考勤" v-if="maskForm.status != 'NOT_START'">
-          <div class="inputStyle" :class="maskForm.errorAttendanceNum != 0 ? 'red' : null">{{ maskForm.errorAttendanceNum != 0 ? '异常' : '正常' }}</div>
+          <div
+            class="inputStyle"
+            :class="maskForm.errorAttendanceNum != 0 ? 'red' : null"
+          >
+            {{ maskForm.errorAttendanceNum != 0 ? "异常" : "正常" }}
+          </div>
         </el-form-item>
         <el-form-item label="老师考勤" v-if="maskForm.status != 'NOT_START'">
-          <div class="inputStyle" :class="maskForm.signInStatusEnum == 1 && maskForm.signOutStatusEnum == 1? null : 'red'">{{ maskForm.signInStatusEnum == 1 && maskForm.signOutStatusEnum == 1 ? '正常' : '异常' }}</div>
+          <div
+            class="inputStyle"
+            :class="
+              maskForm.signInStatusEnum == 1 && maskForm.signOutStatusEnum == 1
+                ? null
+                : 'red'
+            "
+          >
+            {{
+              maskForm.signInStatusEnum == 1 && maskForm.signOutStatusEnum == 1
+                ? "正常"
+                : "异常"
+            }}
+          </div>
         </el-form-item>
         <el-form-item v-if="maskForm.school" label="教学点">
           {{ maskForm.school.name }}
@@ -669,7 +686,7 @@ const initSearch = {
   teacherIdList: null, // 老师编号
   schoolId: null, // 教学点编号
   creatTimer: [],
-  courseIdSearch:null
+  courseIdSearch: null,
 };
 export default {
   data() {
@@ -748,6 +765,10 @@ export default {
         this.searchForm.timer = [nowTime, nowTime];
       }
     }
+    // 课程时间段异常,不需要时间搜索
+    if(query.searchType == 'COURSE_TIME_ERROR') {
+      this.searchForm.timer = []
+    }
 
     if (query.organId) {
       this.searchForm.organIdList = Number(query.organId);
@@ -769,8 +790,8 @@ export default {
       this.searchForm.timer = [nowTime, nowTime];
       this.getList();
     },
-    async removeCourse() {
-      if (this.deleteList.length < 1) {
+    async removeCourse(row) {
+      if (this.deleteList.length < 1 && !row) {
         this.$message.error("请自少选择一个班级");
         return;
       }
@@ -778,7 +799,7 @@ export default {
       let arr = this.deleteList.map((course) => {
         return course.id;
       });
-      let courseScheduleIds = arr.join(",");
+      let courseScheduleIds = arr.join(",") || row.id;
       try {
         await this.$confirm("是否确认删除此数据?", "提示", {
           type: "warning",
@@ -804,7 +825,7 @@ export default {
       this.searchForm = {
         ...initSearch,
         timer: [],
-        search: row.newCourseId,
+        courseIdSearch: row.newCourseId,
       };
       this.search();
     },
@@ -829,10 +850,11 @@ export default {
           count++;
         }
       }
-      if (count <= 0) {
-        this.$message.error("请至少选择一个搜索条件");
-        return false;
-      }
+      //  课程时间段异常,不需要时间搜索,则课表列表搜索可以不要条件搜索
+      // if (count <= 0) {
+      //   this.$message.error("请至少选择一个搜索条件");
+      //   return false;
+      // }
       const { creatTimer, timer, ...rest } = searchForm;
       return {
         ...rest,

+ 5 - 4
vue.config.js

@@ -20,8 +20,8 @@ const name = defaultSettings.title || '管乐迷后台管理系统' // page titl
 // let target = 'http://192.168.3.139:8000' // 箭河
 // let target = 'http://192.168.3.38:8000' //邹璇
 // let target = 'http://192.168.3.57:8000' //勇哥
-// let target = 'http://dev.dayaedu.com' // 测试服
-let target = 'https://test.dayaedu.com' //开发环境
+let target = 'http://dev.dayaedu.com' // 开发环境
+// 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 = {
@@ -55,7 +55,7 @@ module.exports = {
     //   warnings: false,
     //   errors: true
     // },
-    https: true,
+    https: false,
     proxy: {
       // change xxx-api/login => mock/login
       // detail: https://cli.vuejs.org/config/#devserver-proxy
@@ -63,8 +63,9 @@ module.exports = {
       // http://192.168.3.28:8000
       // http://192.168.3.134
       // http://47.114.176.40:8000
+      // let target = 'http://dev.dayaedu.com'
       '/api-auth': {
-        target: 'https://test.dayaedu.com',
+        target: 'http://dev.dayaedu.com',
         changeOrigin: true,
         pathRewrite: {
           '^api-auth': ''

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff