浏览代码

添加功能

lex-xin 5 年之前
父节点
当前提交
6f000ee104

+ 97 - 0
src/api/teacherManager.js

@@ -20,4 +20,101 @@ export function teacherGet(data) {
     })
 }
 
+// 获取老师乐团课程信息列表
+export function getTeacherMusicClass(data) {
+    return request({
+        url: '/teacher-server/teacher/getTeacherMusicClass',
+        method: 'get',
+        params: data
+    })
+}
+
+// 获取老师VIP课程信息列表
+export function getTeacherVipClass(data) {
+    return request({
+        url: '/teacher-server/teacher/getTeacherVipClass',
+        method: 'get',
+        params: data
+    })
+}
+
+// 获取教师试听课安排列表
+export function findTeacherDemoGroups(data) {
+    return request({
+        url: '/teacher-server/demoGroup/findTeacherDemoGroups',
+        method: 'get',
+        params: data
+    })
+}
+
+// 查询教师签到记录
+export function getTeacherPersonalAttendances(data) {
+    return request({
+        url: '/teacher-server/teacherAttendance/getTeacherPersonalAttendances',
+        method: 'get',
+        params: data
+    })
+}
 
+// 获取教师上课结算列表
+export function teacherQueryCloses(data) {
+    return request({
+        url: '/teacher-server/teacher/queryCloses',
+        method: 'get',
+        params: data
+    })
+}
+
+// 分页查询教师请假记录列表
+export function teacherLeaveRecordQuery(data) {
+    return request({
+        url: '/web-server/teacherLeaveRecord/queryPage',
+        method: 'get',
+        params: data
+    })
+}
+
+// 获取教师上课课酬未结算总额
+export function sumTeacherNoPay(data) {
+    return request({
+        url: '/teacher-server/teacher/sumTeacherNoPay',
+        method: 'get',
+        params: data
+    })
+}
+
+// 获取教师的vip课酬列表
+export function vipGroupSalaryList(data) {
+    return request({
+        url: '/web-server/teacherDefaultVipGroupSalary/queryPageByTeacherId',
+        method: 'get',
+        params: data
+    })
+}
+
+// 修改教师vip课酬
+export function vipGroupSalarySet(data) {
+    return request({
+        url: '/web-server/teacherDefaultVipGroupSalary/set',
+        method: 'post',
+        data: qs.stringify(data)
+    })
+}
+
+// 分页查询教师薪酬
+export function teacherSalaryList(data) {
+    return request({
+        url: '/web-server/teacherDefaultMusicGroupSalary/queryPage',
+        method: 'get',
+        params: data
+    })
+}
+
+// 批量新增、修改、删除教师乐团课薪酬
+export function teacherSalaryBatchUpset(data) {
+    return request({
+        url: '/web-server/teacherDefaultMusicGroupSalary/batchUpset',
+        method: 'post',
+        data: data
+    })
+}

+ 41 - 0
src/utils/searchArray.js

@@ -0,0 +1,41 @@
+// 搜索用的下拉数据列表
+
+// 课程类型
+const courseType = [
+    { label: '单技课', value: 'SINGLE' },
+    { label: '合奏课', value: 'MIX' },
+    { label: '小班课', value: 'HIGH' },
+    { label: 'VIP课', value: 'VIP' },
+    { label: '试听课', value: 'DEMO' },
+    { label: '综合课', value: 'COMPREHENSIVE' },
+    { label: '练习课', value: 'PRACTICE' },
+    { label: '启蒙课', value: 'ENLIGHTENMENT' },
+    { label: '集训课', value: 'TRAINING' }
+]
+
+// 考勤状态
+const attendance = [
+    { label: '正常签到', value: 1 },
+    { label: '异常签到', value: 0 },
+]
+
+// 工作类型
+const jobNature = [
+    { label: '兼职', value: 'PART_TIME' },
+    { label: '全职', value: 'FULL_TIME' },
+    { label: '零时工', value: 'TEMPORARY' }
+]
+
+// 老师状态
+const teacherStatus = [
+    { label: '正常', value: 'NOACTIVATED' },
+    { label: '冻结', value: 'CANCELLED' },
+    { label: '锁定', value: 'NORMAL' }
+]
+
+export {
+    courseType,
+    attendance,
+    jobNature,
+    teacherStatus
+}

+ 51 - 12
src/utils/vueFilter.js

@@ -12,16 +12,6 @@ Vue.filter('joinArray', (value, type) => {
     }
 })
 
-// 合并数组
-Vue.filter('jobNature', (value) => {
-    let template = {
-        PART_TIME: "兼职",
-        FULL_TIME: "全职",
-        TEMPORARY: "零时工"
-    }
-    return template[value]
-})
-
 // 合作单位
 Vue.filter('branchType', (value) => {
     let template = {
@@ -79,11 +69,15 @@ Vue.filter('instrumentType', (value) => {
 // 课程类型
 Vue.filter('coursesType', (value) => {
     let template = {
-        NORMAL: "单技课", 
+        SINGLE: '单技课',
         MIX: "合奏课", 
         HIGH: "小班课",
         VIP: "VIP课",
-        DEMO: "试听课"
+        DEMO: "试听课",
+        COMPREHENSIVE: '综合课',
+        PRACTICE: '练习课',
+        ENLIGHTENMENT: '启蒙课',
+        TRAINING: '集训课'
     }
     return template[value]
 })
@@ -118,3 +112,48 @@ Vue.filter('formatTimer', (value) => {
         return value
     }
 })
+// 格式化成星期
+Vue.filter('formatWeek', date => {
+    let nd = new Date(date) 
+    let temp = ['星期天', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
+    return temp[nd.getDay()]
+  })
+
+// 职位
+Vue.filter('jobType', value => {
+    let template = {
+        ADVISER: "指导老师",
+        ACADEMIC: "教务老师",
+        TEACHING: "教学主管"
+    }
+    return template[value]
+})
+
+// 工作类型
+Vue.filter('jobNature', (value) => {
+    let template = {
+        PART_TIME: "兼职",
+        FULL_TIME: "全职",
+        TEMPORARY: "零时工"
+    }
+    return template[value]
+})
+
+
+// 考勤状态
+Vue.filter('attendanceType', value => {
+    let template = {
+        0: "异常签到",
+        1: "正常签到"
+    }
+    return template[value]
+})
+
+// 上课类型
+Vue.filter('workType', value => {
+    let template = {
+        TEACHING: "助教",
+        BISHOP: "主教"
+    }
+    return template[value]
+})

+ 1 - 0
src/views/categroyManager/insideSetting/staffManager.vue

@@ -202,6 +202,7 @@ export default {
       }).then(res => {
         if(res.code == 200 && res.data) {
           this.tableList = res.data.rows
+          this.pageInfo.total = res.data.total
         }
       })
     },

+ 2 - 1
src/views/login/index.vue

@@ -66,7 +66,8 @@ export default {
   name: "Login",
   data () {
     const validateUsername = (rule, value, callback) => {
-      if (!validUsername(value)) {
+      // validUsername
+      if (!value) {
         callback(new Error("请输入用户名"));
       } else {
         callback();

+ 0 - 2
src/views/studentManager/components/studentPayList.vue

@@ -21,8 +21,6 @@
       </el-form-item>
       <el-form-item>
         <el-button @click="getList" type="danger">搜索</el-button>
-      </el-form-item>
-      <el-form-item>
         <el-button @click="onReSet" type="primary">重置</el-button>
       </el-form-item>
     </el-form>

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

@@ -48,7 +48,7 @@
         <el-table-column align='center'
                          label="星期几">
           <template slot-scope="scope">
-            {{ getWeek(scope.row.courseDate) }}
+            {{ scope.row.courseDate | formatWeek }}
           </template>             
         </el-table-column>
         <el-table-column align='center'
@@ -151,11 +151,6 @@ export default {
       }
       this.getList()
     },
-    getWeek(date) {
-      let nd = new Date(date) 
-      let temp = ['星期天', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
-      return temp[nd.getDay()]
-    }
   }
 }
 </script>

+ 55 - 53
src/views/teacherManager/teacherDetail/components/courseInfo.vue

@@ -1,78 +1,80 @@
 <template>
   <div class='courseInfo'>
     <div class="tableWrap">
-      <h4>乐团课</h4>
-      <el-table :data='teamList'
+      <el-table :data='tableList'
                 :header-cell-style="{background:'#EDEEF0',color:'#444'}">
-        <el-table-column label="乐团编号">
+        <el-table-column label="乐团编号" prop="musicGroupId">
         </el-table-column>
-        <el-table-column label="乐团名称">
+        <el-table-column label="乐团名称" prop="musicGroupName">
         </el-table-column>
-        <el-table-column label="老师类型">
+        <el-table-column label="老师类型" prop="jobType">
+          <template slot-scope="scope">
+            {{ scope.row.jobNature | jobNature }}
+          </template>
         </el-table-column>
         <el-table-column label="乐团职位">
+          <template slot-scope="scope">
+            {{ scope.row.jobType | jobType }}
+          </template>
         </el-table-column>
         <el-table-column label="执教班级">
+          <template slot-scope="scope">
+            {{ scope.row.classGroupNames | joinArray }}
+          </template>
         </el-table-column>
         <el-table-column label="乐团状态">
+          <template slot-scope="scope">
+            {{ scope.row.status | musicGroupType }}
+          </template>
         </el-table-column>
-        <el-table-column label="出勤次数">
-        </el-table-column>
-        <el-table-column label="操作">
-        </el-table-column>
-      </el-table>
-    </div>
-    <div class="tableWrap tableMargin">
-      <h4>vip课</h4>
-      <el-table :data='teamList'
-                :header-cell-style="{background:'#EDEEF0',color:'#444'}">
-        <el-table-column label="VIP编号">
-        </el-table-column>
-        <el-table-column label="VIP课名称">
-        </el-table-column>
-        <el-table-column label="VIP课状态">
-        </el-table-column>
-        <el-table-column label="指导老师">
-        </el-table-column>
-        <el-table-column label="班级人数">
-        </el-table-column>
-        <el-table-column label="课程单价">
-        </el-table-column>
-        <el-table-column label="活动方案">
-        </el-table-column>
-        <el-table-column label="剩余课时">
-        </el-table-column>
-        <el-table-column label="月均消耗">
-        </el-table-column>
-        <el-table-column label="开课时间">
-        </el-table-column>
-        <el-table-column label="截止时间">
-        </el-table-column>
-        <el-table-column label="申请时间">
-        </el-table-column>
-      </el-table>
-    </div>
-    <div class="tableWrap tableMargin">
-      <h4>试听课</h4>
-      <el-table :data='teamList'
-                :header-cell-style="{background:'#EDEEF0',color:'#444'}">
-        <el-table-column label="星期"
-                         width="180px">
-        </el-table-column>
-        <el-table-column label="试听安排">
-        </el-table-column>
-        <el-table-column label="试听专业"
-                         width="180px">
+        <el-table-column label="出勤次数" prop="attendanceNum">
         </el-table-column>
       </el-table>
+      <pagination :total="pageInfo.total"
+                :page.sync="pageInfo.page"
+                :limit.sync="pageInfo.limit"
+                :page-sizes="pageInfo.page_size"
+                @pagination="getList" />
     </div>
   </div>
 </template>
 <script>
+import { getTeacherMusicClass } from '@/api/teacherManager'
+import pagination from '@/components/Pagination/index'
+import store from '@/store'
 export default {
+  components: {
+    pagination
+  },
   data () {
     return {
-      teamList: []
+      tableList: [],
+      teacherId: this.$route.query.teacherId,
+      organId: store.getters.organ,
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 1, // 总条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      }
+    }
+  },
+  mounted() {
+    this.getList()
+  },
+  methods: {
+    getList() {
+      getTeacherMusicClass({ 
+        rows: this.pageInfo.limit,
+        page: this.pageInfo.page,
+        search: this.teacherId
+      }).then(res => {
+        if(res.code == 200) {
+          this.tableList = res.data.rows
+          this.pageInfo.total = res.data.total
+        }
+      })
     }
   }
 }

+ 106 - 0
src/views/teacherManager/teacherDetail/components/courseInfo1.vue

@@ -0,0 +1,106 @@
+<template>
+  <div class='courseInfo'>
+    <div class="tableWrap tableMargin">
+      <el-table :data='teamList'
+                :header-cell-style="{background:'#EDEEF0',color:'#444'}">
+        <el-table-column label="VIP编号" prop="vipClassId">
+        </el-table-column>
+        <el-table-column label="VIP课名称" prop="vipClassName">
+        </el-table-column>
+        <el-table-column label="VIP课状态">
+          <template slot-scope="scope">
+            {{ scope.row.status | coursesStatus }}
+          </template>
+        </el-table-column>
+        <el-table-column label="班级人数" prop="studentNum">
+        </el-table-column>
+        <el-table-column label="课程单价">
+          <template slot-scope="scope">
+            线上:{{ scope.row.onlineClassesUnitPrice }} <br />
+            线下:{{ scope.row.offlineClassesUnitPrice }}
+          </template>
+        </el-table-column>
+        <el-table-column label="活动方案" prop="activityName">
+        </el-table-column>
+        <el-table-column label="剩余课时">
+          <template slot-scope="scope">
+            {{ scope.row.totalClassTimes - scope.row.currentClassTimes }}
+          </template>
+        </el-table-column>
+        <el-table-column label="月均消耗" prop="monthAvg">
+        </el-table-column>
+        <el-table-column label="开课时间">
+          <template slot-scope="scope">
+            {{ scope.row.paymentExpireDate | formatTimer }}
+          </template>
+        </el-table-column>
+        <el-table-column label="截止时间">
+          <template slot-scope="scope">
+            {{ scope.row.coursesExpireDate | formatTimer }}
+          </template>
+        </el-table-column>
+        <el-table-column label="申请时间">
+          <template slot-scope="scope">
+            {{ scope.row.createDate | formatTimer }}
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination :total="pageInfo.total"
+                :page.sync="pageInfo.page"
+                :limit.sync="pageInfo.limit"
+                :page-sizes="pageInfo.page_size"
+                @pagination="getList" />
+    </div>
+  </div>
+</template>
+<script>
+import { getTeacherVipClass } from '@/api/teacherManager'
+import pagination from '@/components/Pagination/index'
+import store from '@/store'
+export default {
+  components: {
+    pagination
+  },
+  data () {
+    return {
+      teamList: [],
+      organId: store.getters.organ,
+      teacherId: this.$route.query.teacherId,
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 1, // 总条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      }
+    }
+  },
+  mounted() {
+    this.getList()
+  },
+  methods: {
+    getList() {
+      getTeacherVipClass({ 
+        rows: this.pageInfo.limit,
+        page: this.pageInfo.page,
+        teacherId: this.teacherId
+      }).then(res => {
+        if(res.code == 200) {
+          this.teamList = res.data.rows
+          this.pageInfo.total = res.data.total
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="scss" scope>
+.courseInfo {
+  h4 {
+    margin-bottom: 20px;
+  }
+  .tableMargin {
+    margin-top: 20px;
+  }
+}
+</style>

+ 81 - 0
src/views/teacherManager/teacherDetail/components/courseInfo2.vue

@@ -0,0 +1,81 @@
+<template>
+  <div class='courseInfo'>
+    <div class="tableWrap tableMargin">
+      <!-- <h4>试听课</h4> -->
+      <el-table :data='teamList'
+                :header-cell-style="{background:'#EDEEF0',color:'#444'}">
+        <el-table-column label="星期" width="180px">
+          <template slot-scope="scope">
+            {{ scope.row.classDate | formatWeek }}
+          </template>
+        </el-table-column>
+        <el-table-column label="试听安排" prop="startTimes">
+        </el-table-column>
+        <el-table-column label="试听专业" prop="subjectNames" >
+        </el-table-column>
+      </el-table>
+      <pagination :total="pageInfo.total"
+                :page.sync="pageInfo.page"
+                :limit.sync="pageInfo.limit"
+                :page-sizes="pageInfo.page_size"
+                @pagination="getList" />
+    </div>
+  </div>
+</template>
+<script>
+import { findTeacherDemoGroups } from '@/api/teacherManager'
+import pagination from '@/components/Pagination/index'
+import store from '@/store'
+export default {
+  components: {
+    pagination
+  },
+  data () {
+    return {
+      teamList: [],
+      organId: store.getters.organ,
+      teacherId: this.$route.query.teacherId,
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 1, // 总条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      }
+    }
+  },
+  mounted() {
+    this.getList()
+  },
+  methods: {
+    getList() {
+      findTeacherDemoGroups({ 
+        rows: this.pageInfo.limit,
+        page: this.pageInfo.page,
+        teacherId: this.teacherId
+      }).then(res => {
+        if(res.code == 200) {
+          let data = res.data.rows
+          data.forEach(item => {
+            if(item.startTimes) {
+              item.startTimes = item.startTimes.replace(/\s+/g, '-')
+            }
+          })
+          this.teamList = data
+          this.pageInfo.total = res.data.total
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="scss" scope>
+.courseInfo {
+  h4 {
+    margin-bottom: 20px;
+  }
+  .tableMargin {
+    margin-top: 20px;
+  }
+}
+</style>

+ 82 - 32
src/views/teacherManager/teacherDetail/components/leaveRecord.vue

@@ -6,12 +6,6 @@
         <div class="headItem">
           <p>本月请假:<span>12345</span></p>
         </div>
-        <div class="headItem">
-          <p>大课次数:<span>12345</span></p>
-        </div>
-        <div class="headItem">
-          <p>小课次数:<span>12345</span></p>
-        </div>
       </div>
       <div class="right">
       </div>
@@ -21,51 +15,107 @@
              class="searchForm"
              v-model="searchForm">
       <el-form-item>
-        <el-select v-model="searchForm.name"
-                   placeholder="课程类型">
-          <el-option label="哈哈哈"
-                     value="1"></el-option>
-        </el-select>
+        <el-date-picker
+          v-model="courseDate"
+          type="daterange"
+          value-format="yyyy-MM-dd"
+          @change="searchCourseDate"
+          range-separator="至"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期">
+        </el-date-picker>
+      </el-form-item>
+      </el-form-item>
+      <el-form-item>
+        <el-button @click="getList" type="danger">搜索</el-button>
+        <el-button @click="onReSet" type="primary">重置</el-button>
       </el-form-item>
     </el-form>
-    <!-- 查询 -->
-    <div class="searchWrap">
-      <p>查询条件:</p>
-      <div class="searchItem"
-           @click="closeSearch(item)"
-           v-for="(item,index) in searchLsit">
-        {{ item.key }}
-        <i class="el-icon-close"></i>
-      </div>
-    </div>
     <!-- 列表 -->
     <div class="tableWrap">
-      <el-table :data='tableList'>
-        <el-table-column align='center'
-                         label="请假时间">
+      <el-table :data='tableList' :header-cell-style="{background:'#EDEEF0',color:'#444'}">
+        <el-table-column align='center' prop="createTime"
+                         label="请假发起时间">
         </el-table-column>
         <el-table-column align='center'
-                         label="请假类型">
+                         label="请假时间">
+          <template slot-scope="scope">
+            {{ scope.row.startTime }} - {{ scope.row.endTime }}
+          </template>
         </el-table-column>
-        <el-table-column align='center'
+        <el-table-column align='center' prop="remark"
                          label="请假说明">
         </el-table-column>
-        <el-table-column align='center'
-                         label="统计">
-        </el-table-column>
       </el-table>
+      <pagination :total="pageInfo.total"
+                :page.sync="pageInfo.page"
+                :limit.sync="pageInfo.limit"
+                :page-sizes="pageInfo.page_size"
+                @pagination="getList" />
     </div>
   </div>
 </template>
 <script>
+import { teacherLeaveRecordQuery } from '@/api/teacherManager'
+import pagination from '@/components/Pagination/index'
+import store from '@/store'
+import { attendance } from '@/utils/searchArray'
 export default {
+  components: {
+    pagination
+  },
   data () {
     return {
+      attendance: attendance,
+      courseDate: null,
       searchForm: {
-        name: ''
+        startTime: null,
+        endTime: null,
       },
-      searchLsit: [],
-      tableList: []
+      tableList: [],
+      tableList: [],
+      organId: store.getters.organ,
+      teacherId: this.$route.query.teacherId,
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 1, // 总条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      }
+    }
+  },
+  mounted() {
+    this.getList()
+  },
+  methods: {
+    getList() {
+      let params = this.searchForm
+      params.rows = this.pageInfo.limit
+      params.page = this.pageInfo.page,
+      params.teacherId = this.teacherId
+      teacherLeaveRecordQuery(params).then(res => {
+        if(res.code == 200) {
+          this.tableList = res.data.rows
+          this.pageInfo.total = res.data.total
+        }
+      })
+    },
+    searchCourseDate(value) {
+      if(value) {
+        this.searchForm.startTime = value[0]
+        this.searchForm.endTime = value[1]
+      } else {
+        this.searchForm.startTime = null
+        this.searchForm.endTime = null
+      }
+    },
+    onReSet() {
+      this.courseDate = null
+      this.searchForm = {
+        startTime: null,
+        endTime: null,
+      }
     }
   }
 }

+ 276 - 17
src/views/teacherManager/teacherDetail/components/salarySet.vue

@@ -1,30 +1,81 @@
 <template>
   <div class="salarySet">
-    <h4>单次课次参考时长:30min</h4>
+    <!-- <h4>单次课次参考时长:30min</h4> -->
     <div class="tableList">
       <div class="left">
+        <h3>单次课次参考时长:30min</h3>
         <el-table :data='teamTable'
                   :header-cell-style="{background:'#EDEEF0',color:'#444'}">
-          <el-table-column label="乐团课酬参考值">
+          <el-table-column label="乐团课课酬课时结算">
+            <template slot-scope="scope">
+              {{ scope.row.courseScheduleType | coursesType }}
+            </template>
           </el-table-column>
-          <el-table-column label="主教单课次课酬">
+          <el-table-column label="主教课酬">
+            <template slot-scope="scope">
+              <el-input v-model="scope.row.mainTeacherSalary" placeholder="请输入内容"></el-input>
+            </template>
           </el-table-column>
-          <el-table-column label="助教单课次课酬">
+          <el-table-column label="助教课酬">
+            <template slot-scope="scope">
+              <el-input v-model="scope.row.assistantTeacherSalary" placeholder="请输入内容"></el-input>
+            </template>
           </el-table-column>
-          <el-table-column label="操作">
+          <el-table-column label="操作" width="100px">
+            <template slot-scope="scope">
+              <el-button @click="onMusicGroupSave2(scope.row)" type="text">保存</el-button>
+            </template>
           </el-table-column>
         </el-table>
-      </div>
-      <div class="right">
+
+        <h3>单次课次参考时长:30min</h3>
         <el-table :data='vipTable'
                   :header-cell-style="{background:'#EDEEF0',color:'#444'}">
-          <el-table-column label="VIP课酬参考值">
+          <el-table-column label="VIP课酬参考值" prop="vipGroupCategoryName">
           </el-table-column>
           <el-table-column label="线上课">
+            <template slot-scope="scope">
+              <el-input v-model="scope.row.onlineClassesSalary" placeholder="请输入内容"></el-input>
+            </template>
           </el-table-column>
           <el-table-column label="线下课">
+            <template slot-scope="scope">
+              <el-input v-model="scope.row.offlineClassesSalary" placeholder="请输入内容"></el-input>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="100px">
+            <template slot-scope="scope">
+              <el-button @click="onVIPSave(scope.row)" type="text">保存</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <div class="right">
+        <h3>乐团课梯度课酬结算</h3>
+        <el-table :data="musicGroupTable" :header-cell-style="{background:'#EDEEF0',color:'#444'}">
+          <el-table-column label="">
+            <template slot-scope="scope">
+              {{ scope.row.courseScheduleType | coursesType }}
+            </template>
           </el-table-column>
-          <el-table-column label="操作">
+          <el-table-column label="最小值/分钟" prop="durationMin">
+          </el-table-column>
+          <el-table-column label="最大值/分钟" prop="durationMax">
+          </el-table-column>
+          <el-table-column label="主教课酬">
+            <template slot-scope="scope">
+              <el-input v-model="scope.row.mainTeacherSalary" placeholder="请输入内容"></el-input>
+            </template>
+          </el-table-column>
+          <el-table-column label="助教课酬">
+            <template slot-scope="scope">
+              <el-input v-model="scope.row.assistantTeacherSalary" placeholder="请输入内容"></el-input>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="100px">
+            <template slot-scope="scope">
+              <el-button @click="onMusicGroupSave(scope.row)" type="text">保存</el-button>
+            </template>
           </el-table-column>
         </el-table>
       </div>
@@ -32,29 +83,237 @@
   </div>
 </template>
 <script>
+import { vipGroupSalaryList, vipGroupSalarySet, teacherSalaryList, teacherSalaryBatchUpset } from '@/api/teacherManager'
+import { sysConfigList } from '@/api/generalSettings'
+import { vipGroupCategory } from '@/api/vipSeting'
 export default {
   data () {
     return {
+      teacherId: this.$route.query.teacherId,
       teamTable: [],
-      vipTable: []
+      vipTable: [],
+      musicGroupTable: [],
+      ruleList: [],
+      vipList: []
+    }
+  },
+  mounted() {
+    this.__init()
+  },
+  methods: {
+    __init() {
+      // 获取课程形态 设置vip课酬
+      vipGroupCategory({ organId: this.$store.getters.organ }).then(res => {
+        if (res.code == 200) {
+          this.vipList = res.data
+          let vipData = res.data
+          // VIP课列表
+          vipGroupSalaryList({
+            rows: 9999,
+            page: 1,
+            teacherId: this.teacherId
+          }).then(res => {
+            if(res.code == 200) {
+              let rows = res.data.rows
+              this.vipListCompare(vipData, rows)
+            }
+          })
+        }
+      })
+      // 乐团
+      teacherSalaryList({
+        rows: 9999,
+        page: 1,
+        teacherId: this.teacherId,
+        settlementType: 'FIXED_SALARY'
+      }).then(res => {
+        if(res.code == 200) {
+          this.teamTable = res.data.rows
+        }
+      })
+
+      // 乐团梯度结算
+      sysConfigList({ group: 'settlement_rule' }).then(res => {
+        if(res.code == 200 && res.data.length > 0) {
+          let domain = []
+          res.data.forEach(item => {
+              let paramName
+              if(item.paramName == 'sigle_gradient_settlement_rule') {
+                  paramName = "SINGLE"
+              }
+              if(item.paramName == "max_gradient_settlement_rule") {
+                  paramName = "MIX"
+              }
+              if(item.paramName == "high_gradient_settlement_rule") {
+                  paramName = "HIGH"
+              }
+              if(item.paranValue) {
+                let value = JSON.parse(item.paranValue)
+                value.forEach(type => {
+                  domain.push({
+                    paramName: paramName,
+                    max: type.max,
+                    min: type.min
+                  })
+                })
+              }
+          })
+          // this.ruleList.push(domain)
+
+          // 乐团
+          teacherSalaryList({
+            rows: 9999,
+            page: 1,
+            teacherId: this.teacherId,
+            settlementType: 'GRADIENT_SALARY'
+          }).then(res => {
+            if(res.code == 200) {
+              let rows = res.data.rows
+              // this.musicGroupTable = res.data.rows
+              this.teacherSalaryList(domain, rows)
+            }
+          })
+        }
+      })
+    },
+    vipListCompare(vipData, rows) { // vip 做对比
+      if(!vipData) { // 判断是否有数据
+        this.vipTable = rows
+        return
+      }
+      let result = []
+      vipData.forEach(item => {
+        if(rows) { // 判断是否已经设置的课程
+          rows.forEach(c => {
+            if(item.id == c.vipGroupCategoryId) {
+              result.push({
+                id: c.id,
+                vipGroupCategoryName: c.vipGroupCategoryName,
+                offlineClassesSalary: c.offlineClassesSalary,
+                onlineClassesSalary: c.onlineClassesSalary
+              })
+            } else {
+              result.push({
+                vipGroupCategoryName: item.name,
+                offlineClassesSalary: item.offlineClassesUnitPrice,
+                onlineClassesSalary: item.onlineClassesUnitPrice
+              })
+            }
+          })
+        } else {
+          result.push({
+            vipGroupCategoryName: item.name,
+            offlineClassesSalary: item.offlineClassesUnitPrice,
+            onlineClassesSalary: item.onlineClassesUnitPrice
+          })
+        }
+      })
+      this.vipTable = result
+    },
+    teacherSalaryList(domain, rows) {
+      console.log(domain)
+      console.log(rows)
+      if(domain.length <= 0) { // 判断后台是否有设置
+        this.musicGroupTable = rows
+        return
+      }
+      let result = []
+      domain.forEach(item => {
+        if(rows) {
+          rows.forEach(c => {
+            if(item.paramName == c.settlementType && item.max == c.durationMax && item.min == c.durationMin) {
+              result.push({
+                id: c.id,
+                durationMax: c.durationMax,
+                durationMin: c.durationMin,
+                mainTeacherSalary: c.mainTeacherSalary,
+                assistantTeacherSalary: c.assistantTeacherSalary,
+                courseScheduleType: c.courseScheduleType
+              })
+            }
+          })
+        } else {
+          result.push({
+            durationMax: item.max,
+            durationMin: item.min,
+            assistantTeacherSalary: null,
+            mainTeacherSalary: null,
+            courseScheduleType: item.paramName
+          })
+        }
+      })
+      if(rows) {
+        
+      }
+      console.log(result)
+      // this.musicGroupTable = result
+    },
+    onVIPSave(row) { // vip保存
+      vipGroupSalarySet({
+        id: row.id,
+        offlineClassesSalary: row.offlineClassesSalary,
+        onlineClassesSalary: row.onlineClassesSalary
+      }).then(res => {
+        if(res.code == 200) {
+          this.$message({
+            message: '保存成功',
+            type: 'success'
+          })
+        }
+      })
+    },
+    onMusicGroupSave(row) {
+      teacherSalaryBatchUpset([{
+        id: row.id,
+        mainTeacherSalary: row.mainTeacherSalary,
+        assistantTeacherSalary: row.assistantTeacherSalary
+      }]).then(res => {
+        if(res.code == 200) {
+          this.$message({
+            message: '保存成功',
+            type: 'success'
+          })
+        }
+      })
+    },
+    onMusicGroupSave2(row) {
+      teacherSalaryBatchUpset([{
+        id: row.id,
+        mainTeacherSalary: row.mainTeacherSalary,
+        assistantTeacherSalary: row.assistantTeacherSalary
+      }]).then(res => {
+        if(res.code == 200) {
+          this.$message({
+            message: '保存成功',
+            type: 'success'
+          })
+        }
+      })
     }
   }
 }
 </script>
 <style lang="scss" scope>
 .salarySet {
-  h4 {
-    margin-bottom: 20px;
+  h3 {
+    margin-top: 10px;
+    margin-bottom: 10px;
     font-size: 14px;
     color: #444;
     font-weight: normal;
   }
   .tableList {
-    display: flex;
-    flex-direction: row;
-    justify-content: space-between;
-    > div {
-      flex: 1;
+    .left, .right {
+      
+      float: left;
+    }
+    .left {
+      width: 40%;
+      margin-right: 2%;
+    }
+    .right {
+      width: 56%;
+      margin-left: 2%;
     }
   }
 }

+ 182 - 13
src/views/teacherManager/teacherDetail/components/settlement.vue

@@ -3,53 +3,222 @@
     <div class="headWrap">
       <div class="left">
         <div class="headItem">
-          <p>未结算总额:<span>12345</span></p>
+          <p>未结算总额:<span>{{ teacherNoPay }}</span></p>
         </div>
       </div>
     </div>
     <el-form :inline="true"
              :model="searchForm">
-      <el-form-item label="课程类型">
-        <el-select v-model="type">
-          <el-option label="哈哈哈"
-                     value="1">
-
-          </el-option>
+      <el-form-item>
+        <el-date-picker
+          v-model="courseDate"
+          type="daterange"
+          value-format="yyyy-MM-dd"
+          @change="searchCourseDate"
+          range-separator="至"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-select v-model="searchForm.courseScheduleType" placeholder="课程类型">
+          <el-option v-for="(item, index) in courseType" :key="index" 
+            :label="item.label" :value="item.value"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-select v-model="searchForm.signInStatus" placeholder="上课类型">
+          <el-option v-for="(item, index) in attendance" :key="index" 
+            :label="item.label" :value="item.value"></el-option>
         </el-select>
       </el-form-item>
+      <el-form-item>
+        <el-button @click="getList" type="danger">搜索</el-button>
+        <el-button @click="onReSet" type="primary">重置</el-button>
+      </el-form-item>
     </el-form>
     <div class="tableWrap">
-      <el-table :header-cell-style="{background:'#EDEEF0',color:'#444'}">
+      <el-table :data="tableList" :header-cell-style="{background:'#EDEEF0',color:'#444'}">
         <el-table-column label="上课时间">
+          <template slot-scope="scope">
+            {{ scope.row.classDate }} {{ scope.row.classTime }}
+          </template>
         </el-table-column>
-        <el-table-column label="班级名称">
+        <el-table-column label="班级名称" prop="className">
         </el-table-column>
         <el-table-column label="课程类型">
+          <template slot-scope="scope">
+            {{ scope.row.courseScheduleType | coursesType }}
+          </template>
         </el-table-column>
         <el-table-column label="上课类型">
+          <template slot-scope="scope">
+            {{ scope.row.teacherRole | workType }}
+          </template>
         </el-table-column>
-        <el-table-column label="当前课次">
+        <el-table-column label="当前课次" prop="currentClassTimes">
         </el-table-column>
         <el-table-column label="考情状态">
+          <template slot-scope="scope">
+            {{ scope.row.signInStatus | attendanceType }}
+          </template>
         </el-table-column>
-        <el-table-column label="老师课酬">
+        <el-table-column label="老师课酬" prop="actualSalary">
         </el-table-column>
-        <el-table-column label="课时补贴">
+        <el-table-column label="课时补贴" prop="subsidy">
         </el-table-column>
         <el-table-column label="结算状态">
+          <template slot-scope="scope">
+            {{ scope.row.settlementTime ? '已结算' : '未结算' }}
+          </template>
         </el-table-column>
         <el-table-column label="操作">
+          <template slot-scope="scope">
+            <el-button @click="settlementStatus = true" type="text">课酬调整</el-button>
+          </template>
         </el-table-column>
       </el-table>
+      <pagination :total="pageInfo.total"
+                :page.sync="pageInfo.page"
+                :limit.sync="pageInfo.limit"
+                :page-sizes="pageInfo.page_size"
+                @pagination="getList" />
     </div>
+    <el-dialog title="课酬调整" :visible.sync="settlementStatus" @close="onFormClose('ruleForm')" width="500px">
+      <el-form :model="form" :rules="rules" ref="ruleForm">
+        <el-form-item label="课酬调整为" prop="name" :label-width="formLabelWidth">
+          <el-input v-model="form.name" type="number" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="课时补贴调整为" prop="name" :label-width="formLabelWidth">
+          <el-input v-model="form.name" type="number" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="调整范围" prop="name" :label-width="formLabelWidth">
+          <el-radio-group v-model="form.radio">
+            <el-radio :label="3">仅限本次</el-radio>
+            <el-radio :label="6">之后剩余课次</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="settlementStatus = false">取 消</el-button>
+        <el-button @click="onSettlementSubmit('ruleForm')" type="primary">确 定</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 <script>
+import { teacherQueryCloses, sumTeacherNoPay } from '@/api/teacherManager'
+import pagination from '@/components/Pagination/index'
+import store from '@/store'
+import { courseType, attendance } from '@/utils/searchArray'
 export default {
+  components: {
+    pagination
+  },
   data () {
     return {
+      teacherNoPay: 0,
+      courseDate: null,
       searchForm: {
-        type: ''
+        courseStartDate: null,
+        courseEndDate: null,
+        courseScheduleType: null,
+        signInStatus: null,
+      },
+      courseType: courseType,
+      attendance: attendance,
+      organId: store.getters.organ,
+      teacherId: this.$route.query.teacherId,
+      tableList: [],
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 1, // 总条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      },
+      formLabelWidth: '120px',
+      settlementStatus: false,
+      form: {
+        name: null,
+        radio: 3,
+      },
+      rules: {
+        name: [{required: true, message: '请输入分部名称', trigger: 'blur'}],
+        radio: [{required: true, message: '请选择调整范围', trigger: 'change'}],
+      }
+    }
+  },
+  mounted() {
+    this.getList()
+    sumTeacherNoPay({ teacherId: this.teacherId }).then(res => {
+      if(res.code == 200) {
+        this.teacherNoPay = res.data
+      }
+    })
+  },
+  methods: {
+    onSettlementSubmit(formName) {
+      this.$refs[formName].validate(valid => {
+        if(!valid) return
+        this.form.areaId = this.form.city
+        if(this.formActionTitle == 'create') {
+          if(this.form.id) { // 判断有没有Id,如果有则删除
+            delete this.form.id
+          }
+          branchAdd(this.form).then(res => {
+            this.messageTips('添加', res)
+          })
+        } else if(this.formActionTitle == 'update') {
+          branchUpdate(this.form).then(res => {
+            this.messageTips('修改', res)
+          })
+        }
+      })
+    },
+    messageTips(title, res) {
+      if(res.code == 200) {
+        this.$message({
+          message: title + '成功',
+          type: 'success'
+        })
+        this.branchStatus = false
+        this.getList()
+      } else {
+        this.$message.error(res.msg)
+      }
+    },
+    getList() {
+      let params = this.searchForm
+      params.rows = this.pageInfo.limit
+      params.page = this.pageInfo.page
+      params.teacherId = this.teacherId
+      teacherQueryCloses(params).then(res => {
+        if(res.code == 200) {
+          this.tableList = res.data.rows
+          this.pageInfo.total = res.data.total
+        }
+      })
+    },
+    searchCourseDate(value) {
+      if(value) {
+        this.searchForm.courseStartDate = value[0]
+        this.searchForm.courseEndDate = value[1]
+      } else {
+        this.searchForm.courseStartDate = null
+        this.searchForm.courseEndDate = null
+      }
+    },
+    onFormClose(formName) { // 关闭弹窗重置验证
+      this.$refs[formName].resetFields()
+    },
+    onReSet() { 
+      this.courseDate = null
+      this.searchForm = {
+        courseStartDate: null,
+        courseEndDate: null,
+        courseScheduleType: null,
+        signInStatus: null
       }
     }
   }

+ 108 - 20
src/views/teacherManager/teacherDetail/components/teacherRecord.vue

@@ -5,53 +5,141 @@
              class="searchForm"
              v-model="searchForm">
       <el-form-item>
-        <el-select v-model="searchForm.name"
-                   placeholder="课程类型">
-          <el-option label="哈哈哈"
-                     value="1"></el-option>
+        <el-date-picker
+          v-model="courseDate"
+          type="daterange"
+          value-format="yyyy-MM-dd"
+          @change="searchCourseDate"
+          range-separator="至"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-select v-model="searchForm.courseScheduleType" placeholder="课程类型">
+          <el-option v-for="(item, index) in courseType" :key="index" 
+            :label="item.label" :value="item.value"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-input placeholder="课程名称" v-model="searchForm.classGroupName"></el-input>
+      </el-form-item>
+      <el-form-item>
+        <el-select v-model="searchForm.signInStatus"
+                   placeholder="考勤状态">
+          <el-option v-for="(item, index) in attendance" :key="index" 
+            :label="item.label" :value="item.value"></el-option>
         </el-select>
       </el-form-item>
+      <el-form-item>
+        <el-button @click="getList" type="danger">搜索</el-button>
+        <el-button @click="onReSet" type="primary">重置</el-button>
+      </el-form-item>
     </el-form>
-    <!-- 查询 -->
-    <div class="searchWrap">
-      <p>查询条件:</p>
-      <div class="searchItem"
-           @click="closeSearch(item)"
-           v-for="(item,index) in searchLsit">
-        {{ item.key }}
-        <i class="el-icon-close"></i>
-      </div>
-    </div>
     <!-- 列表 -->
     <div class="tableWrap">
       <div class="tableWrap">
-        <el-table :data='tableList'>
+        <el-table :data='tableList' :header-cell-style="{background:'#EDEEF0',color:'#444'}">
           <el-table-column align='center'
                            label="上课时间">
+            <template slot-scope="scope">
+              {{ scope.row.classDate }} {{ scope.row.startClassTime }}
+            </template>
           </el-table-column>
           <el-table-column align='center'
                            label="课程类型">
+            <template slot-scope="scope">
+              {{ scope.row.type | coursesType }}
+            </template>
           </el-table-column>
-          <el-table-column align='center'
+          <el-table-column align='center' prop="name"
                            label="课程名称">
           </el-table-column>
-          <el-table-column align='center'
+          <el-table-column align='center' label="签到状态">
+            <template slot-scope="scope">
+              {{ scope.row.status | attendanceType }}
+            </template>
+          </el-table-column>
+          <el-table-column align='center' prop="remark"
                            label="备注">
           </el-table-column>
         </el-table>
+        <pagination :total="pageInfo.total"
+                :page.sync="pageInfo.page"
+                :limit.sync="pageInfo.limit"
+                :page-sizes="pageInfo.page_size"
+                @pagination="getList" />
       </div>
     </div>
   </div>
 </template>
 <script>
+import { getTeacherPersonalAttendances } from '@/api/teacherManager'
+import pagination from '@/components/Pagination/index'
+import store from '@/store'
+import { courseType, attendance } from '@/utils/searchArray'
 export default {
+  components: {
+    pagination
+  },
   data () {
     return {
+      courseType: courseType, // 课程类型
+      attendance: attendance, // 考勤状态
+      courseDate: null, // 上课时间
       searchForm: {
-        name: ''
+        courseStartDate: null,
+        courseEndDate: null,
+        classGroupName: null,
+        courseScheduleType: null,
+        signInStatus: null
       },
-      searchLsit: [],
-      tableList: []
+      tableList: [],
+      organId: store.getters.organ,
+      teacherId: this.$route.query.teacherId,
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 1, // 总条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      }
+    }
+  },
+  mounted() {
+    this.getList()
+  },
+  methods: {
+    getList() {
+      let params = this.searchForm
+      params.rows = this.pageInfo.limit
+      params.page = this.pageInfo.page,
+      params.teacherId = this.teacherId
+      getTeacherPersonalAttendances(params).then(res => {
+        if(res.code == 200) {
+          this.tableList = res.data.rows
+          this.pageInfo.total = res.data.total
+        }
+      })
+    },
+    searchCourseDate(value) {
+      if(value) {
+        this.searchForm.courseStartDate = value[0]
+        this.searchForm.courseEndDate = value[1]
+      } else {
+        this.searchForm.courseStartDate = null
+        this.searchForm.courseEndDate = null
+      }
+    },
+    onReSet() { 
+      this.courseDate = null
+      this.searchForm = {
+        courseStartDate: null,
+        courseEndDate: null,
+        classGroupName: null,
+        courseScheduleType: null,
+        signInStatus: null
+      }
     }
   }
 }

+ 28 - 15
src/views/teacherManager/teacherDetail/index.vue

@@ -7,28 +7,36 @@
                type="card"
                @tab-click="handleClick">
         <el-tab-pane label="基本信息"
-                     name="1">
+                     name="0">
           <teacherInfo v-if="activeStatus[0]" />
         </el-tab-pane>
-        <el-tab-pane label="课程信息"
-                     name="2">
+        <el-tab-pane label="乐团课"
+                     name="1">
           <courseInfo v-if="activeStatus[1]" />
         </el-tab-pane>
-        <el-tab-pane label="上课记录"
+        <el-tab-pane label="VIP课"
+                     name="2">
+          <courseInfo1 v-if="activeStatus[2]" />
+        </el-tab-pane>
+        <el-tab-pane label="试听课"
                      name="3">
-          <teacherRecord v-if="activeStatus[2]" />
+          <courseInfo2 v-if="activeStatus[3]" />
         </el-tab-pane>
-        <el-tab-pane label="请假记录"
+        <el-tab-pane label="上课记录"
                      name="4">
-          <leaveRecord v-if="activeStatus[3]" />
+          <teacherRecord v-if="activeStatus[4]" />
         </el-tab-pane>
-        <el-tab-pane label="上课结算列表"
+        <el-tab-pane label="请假记录"
                      name="5">
-          <settlement v-if="activeStatus[4]" />
+          <leaveRecord v-if="activeStatus[5]" />
         </el-tab-pane>
-        <el-tab-pane label="课酬设置"
+        <el-tab-pane label="上课结算列表"
                      name="6">
-          <salarySet v-if="activeStatus[5]" />
+          <settlement v-if="activeStatus[6]" />
+        </el-tab-pane>
+        <el-tab-pane label="课酬设置"
+                     name="7">
+          <salarySet v-if="activeStatus[7]" />
         </el-tab-pane>
       </el-tabs>
     </div>
@@ -39,22 +47,27 @@ import teacherRecord from '@/views/teacherManager/teacherDetail/components/teach
 import leaveRecord from '@/views/teacherManager/teacherDetail/components/leaveRecord'
 import teacherInfo from '@/views/teacherManager/teacherDetail/components/teacherInfo'
 import courseInfo from '@/views/teacherManager/teacherDetail/components/courseInfo'
+import courseInfo1 from '@/views/teacherManager/teacherDetail/components/courseInfo1'
+import courseInfo2 from '@/views/teacherManager/teacherDetail/components/courseInfo2'
 import settlement from '@/views/teacherManager/teacherDetail/components/settlement'
 import salarySet from '@/views/teacherManager/teacherDetail/components/salarySet'
 export default {
-  components: { teacherRecord, leaveRecord, teacherInfo, courseInfo, settlement, salarySet },
+  components: { teacherRecord, 
+  leaveRecord, teacherInfo, 
+  courseInfo, courseInfo1, courseInfo2, settlement, 
+  salarySet },
   name: 'teacherDetail',
   data () {
     return {
       teacherName: this.$route.query.teacherName,
-      activeName: '1',
-      activeStatus: [true, false, false, false, false, false]
+      activeName: "7",
+      activeStatus: [false, false, false, false, false, false, false, true]
     }
   },
   methods: {
     handleClick (val, event) {
       this.activeName = val.name
-      this.activeStatus[val.name - 1] = true
+      this.activeStatus[val.name] = true
     }
   }
 }

+ 115 - 32
src/views/teacherManager/teacherList.vue

@@ -7,39 +7,46 @@
                class="searchForm"
                v-model="searchForm">
         <el-form-item>
-          <el-select v-model="searchForm.name" placeholder="老师状态">
-            <el-option label="哈哈哈" value="1"></el-option>
+          <el-select v-model="searchForm.lockFlag" placeholder="老师状态">
+            <el-option v-for="item in teacherStatus" :key="item.value" 
+              :label="item.label" :value="item.value"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item>
-          <el-select v-model="searchForm.name" placeholder="专业技能">
-            <el-option label="哈哈哈" value="1"></el-option>
+          <el-select v-model="searchForm.subjectId" placeholder="专业技能">
+            <el-option-group
+                v-for="group in subjectList"
+                :key="group.label"
+                :label="group.label">
+                <el-option
+                  v-for="item in group.options"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+                </el-option>
+              </el-option-group>
           </el-select>
         </el-form-item>
         <el-form-item>
-          <el-select v-model="searchForm.name" placeholder="所属分部">
-            <el-option label="哈哈哈" value="1"></el-option>
+          <el-select v-model="searchForm.organId"  placeholder="所属分部">
+            <el-option v-for="item in branchList" :key="item.value" 
+              :label="item.label" :value="item.value"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item>
-          <el-select v-model="searchForm.name" placeholder="工作类型">
-            <el-option label="哈哈哈" value="1"></el-option>
+          <el-select v-model="searchForm.jobNature" 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-select v-model="searchForm.name" placeholder="人事状态">
-            <el-option label="哈哈哈" value="1"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-select v-model="searchForm.name" placeholder="试听课安排">
-            <el-option label="哈哈哈" value="1"></el-option>
+          <el-select v-model="searchForm.isProbationPeriod" placeholder="人事状态">
+            <el-option label="试用" value="YES"></el-option>
+            <el-option label="正式" value="NO"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item>
           <el-button @click="getList" type="danger">搜索</el-button>
-        </el-form-item>
-        <el-form-item>
           <el-button @click="onReSet" type="primary">重置</el-button>
         </el-form-item>
       </el-form>
@@ -54,6 +61,9 @@
           </el-table-column>
           <el-table-column align='center' prop="subjectId"
                            label="老师状态">
+            <template slot-scope="scope">
+              {{ scope.row.lockFlag == 1 ? '冻结' : '正常' }}
+            </template>
           </el-table-column>
           <el-table-column align='center'
                            label="专业技能">
@@ -68,9 +78,6 @@
                            label="所属分部">
           </el-table-column>
           <el-table-column align='center'
-                           label="所在乐团">
-          </el-table-column>
-          <el-table-column align='center'
                            label="工作类型">
             <template slot-scope="scope">
               {{ scope.row.jobNature | jobNature }}
@@ -79,7 +86,7 @@
           <el-table-column align='center'
                            label="人事状态">
             <template slot-scope="scope">
-              {{ scope.row.demissionDate ? '离职' : '在职' }}
+              {{ scope.row.isProbationPeriod ? '试用' : '正式' }}
             </template>
           </el-table-column>
           <el-table-column align='center' prop="vipNum"
@@ -87,13 +94,15 @@
           </el-table-column>
           <el-table-column align='center'
                            label="试听课安排">
+            <template slot-scope="scope">
+              {{ scope.row.demoNum > 0 ? '是' : '否' }}
+            </template>
           </el-table-column>
           <el-table-column align='center'
                            label="操作">
             <template slot-scope="scope">
               <router-link style="color:#409EFF" :to="`/business/teacherDetail?teacherId=${scope.row.id}&teacherName=${scope.row.realName}`">查看</router-link>
-              <el-button type="text">冻结</el-button>
-              <el-button type="text">解冻</el-button>
+              <el-button @click="onStaffOperation('LOCK_UNLOCK', scope.row)" type="text">{{ scope.row.lockFlag == 1 ? '解冻' : '冻结' }}</el-button>
             </template>
           </el-table-column>
         </el-table>
@@ -109,6 +118,9 @@
 <script>
 import pagination from '@/components/Pagination/index'
 import { teacherQueryPage } from '@/api/teacherManager'
+import { employeeOperate } from '@/api/systemManage'
+import { branchQueryPage, subjectListTree } from '@/api/specialSetting'
+import { jobNature, teacherStatus } from '@/utils/searchArray'
 import store from '@/store'
 export default {
   name: 'teacherList',
@@ -118,10 +130,18 @@ export default {
   data () {
     return {
       searchForm: {
-        name: ''
+        lockFlag: null,
+        isProbationPeriod: null,
+        jobNature: null,
+        subjectId: null,
+        organId: null,
       },
+      jobNature: jobNature, // 工作类型
+      teacherStatus: teacherStatus, // 老师状态
+      subjectList: [], // 声部列表
+      branchList: [], // 分部列表
       tableList: [],
-      organId: store.getters.organ,
+      // organId: store.getters.organ,
       pageInfo: {
         // 分页规则
         limit: 10, // 限制显示条数
@@ -132,15 +152,55 @@ export default {
     }
   },
   mounted() {
+    this.__init()
     this.getList()
   },
   methods: {
-    getList () { 
-      let params = {
-        organId: this.organId,
-        rows: this.pageInfo.limit,
-        page: this.pageInfo.page
-      }
+    __init() {
+      branchQueryPage({ // 获取分部
+        delFlag: 0,
+        rows: 9999
+      }).then(res => {
+        if(res.code == 200 && res.data && res.data.rows) {
+          res.data.rows.forEach(item => {
+            this.branchList.push({
+              label: item.name,
+              value: item.id
+            })
+          })
+        }
+      })
+
+      subjectListTree({
+        delFlag: 0,
+        rows: 9999
+      }).then(res => {
+        let result = res.data
+        if(res.code == 200) {
+          let tempArray = []
+          result.rows.forEach((item, index) => {
+            let subject = []
+            item.subjects.forEach(s => {
+              subject.push({
+                value: s.id,
+                label: s.name
+              })
+            })
+            
+            tempArray[index] = {
+              label: item.name,
+              options: subject
+            }
+          })
+          this.subjectList = tempArray
+        }
+      })
+    },
+    getList () {
+      let params = this.searchForm
+      // params.organId = this.organId
+      params.rows = this.pageInfo.limit
+      params.page = this.pageInfo.page
       teacherQueryPage(params).then(res => {
         if(res.code == 200) {
           this.tableList = res.data.rows
@@ -148,8 +208,31 @@ export default {
         }
       })
     },
+    onStaffOperation(type, data) {
+      employeeOperate({ 
+        employeeId: data.id,
+        operate: type
+      }).then(res => {
+        if(res.code == 200) {
+          this.$message({
+            message: '更改成功',
+            type: 'success'
+          })
+          this.roleStatus = false
+          this.getList()
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    },
     onReSet() {
-      
+      this.searchForm = {
+        lockFlag: null,
+        isProbationPeriod: null,
+        jobNature: null,
+        organId: null,
+        subjectId: null
+      }
     }
   }
 }