Browse Source

Merge branch 'ol_12_30'

lex-xin 4 years ago
parent
commit
d1f26356eb
65 changed files with 1150 additions and 386 deletions
  1. 9 0
      src/constant/index.js
  2. 9 0
      src/helpers/utils.js
  3. 3 1
      src/router/index.js
  4. 1 0
      src/router/notKeepAliveList.js
  5. 38 28
      src/store/modules/selects.js
  6. 51 38
      src/templateList.vue
  7. 2 1
      src/utils/searchArray.js
  8. 176 172
      src/views/accompanyManager/accompanyBuys.vue
  9. 1 0
      src/views/accompanyManager/accompanyList.vue
  10. 4 4
      src/views/accompanyManager/accompanys.vue
  11. 3 1
      src/views/afterSchoolManager/afterSchoolList.vue
  12. 4 2
      src/views/afterSchoolManager/afterWorkList.vue
  13. 42 4
      src/views/businessManager/orderManager/financeManager.vue
  14. 1 1
      src/views/businessManager/orderManager/orderAudit-taoqi/index.vue
  15. 70 16
      src/views/businessManager/orderManager/orderAudit/orderAuditDetail.vue
  16. 1 1
      src/views/businessManager/shopManager/shopList.vue
  17. 6 3
      src/views/categroyManager/generalSettings/errorManager.vue
  18. 28 0
      src/views/categroyManager/insideSetting/api.js
  19. 172 0
      src/views/categroyManager/insideSetting/modals/handover.vue
  20. 103 0
      src/views/categroyManager/insideSetting/modals/select-user.vue
  21. 29 4
      src/views/categroyManager/insideSetting/staffManager.vue
  22. 3 1
      src/views/categroyManager/specialSetup/chargesList.vue
  23. 1 0
      src/views/categroyManager/specialSetup/courseTimerSetting.vue
  24. 3 1
      src/views/categroyManager/specialSetup/discountManage.vue
  25. 4 1
      src/views/categroyManager/specialSetup/jobTemplateSetting.vue
  26. 4 1
      src/views/categroyManager/specialSetup/musicCourseFee.vue
  27. 4 1
      src/views/categroyManager/specialSetup/typesManager.vue
  28. 4 2
      src/views/contentManager/components/activity.vue
  29. 4 2
      src/views/contentManager/components/appPage.vue
  30. 4 2
      src/views/contentManager/components/banner.vue
  31. 4 2
      src/views/contentManager/components/flashPage.vue
  32. 4 2
      src/views/contentManager/components/information.vue
  33. 4 2
      src/views/contentManager/components/knowledge.vue
  34. 4 2
      src/views/contentManager/components/training.vue
  35. 1 0
      src/views/evaluateManager/evaluateList.vue
  36. 1 0
      src/views/evaluateManager/networkList.vue
  37. 9 7
      src/views/evaluateManager/vipEvaluateList.vue
  38. 9 4
      src/views/resetTeaming/components/resetPayList.vue
  39. 9 4
      src/views/resetTeaming/components/resetPayListSchool.vue
  40. 4 2
      src/views/studentManager/components/studentCashout.vue
  41. 4 1
      src/views/studentManager/components/studentNetwork.vue
  42. 3 1
      src/views/studentManager/components/studentOrder.vue
  43. 1 0
      src/views/studentManager/components/studentOutList.vue
  44. 1 0
      src/views/studentManager/components/studentPayList.vue
  45. 1 0
      src/views/studentManager/components/studentRecord.vue
  46. 2 1
      src/views/studentManager/components/studentVip.vue
  47. 1 0
      src/views/teacherManager/teacherDetail/components/courseInfo.vue
  48. 1 0
      src/views/teacherManager/teacherDetail/components/courseInfo1.vue
  49. 5 2
      src/views/teacherManager/teacherDetail/components/courseInfo2.vue
  50. 1 0
      src/views/teacherManager/teacherDetail/components/leaveRecord.vue
  51. 1 0
      src/views/teacherManager/teacherDetail/components/outCourseList.vue
  52. 5 2
      src/views/teacherManager/teacherDetail/components/serveStudentList.vue
  53. 1 0
      src/views/teacherManager/teacherDetail/components/settlement.vue
  54. 1 0
      src/views/teacherManager/teacherDetail/components/teacherRecord.vue
  55. 1 0
      src/views/teacherManager/teacherDetail/components/timerList.vue
  56. 1 1
      src/views/teamBuild/components/soundSetComponents/chioseMusic.vue
  57. 5 2
      src/views/teamDetail/components/classList.vue
  58. 2 0
      src/views/teamDetail/components/courseList.vue
  59. 3 2
      src/views/teamDetail/components/resetClass.vue
  60. 1 0
      src/views/teamDetail/components/studentList.vue
  61. 1 0
      src/views/teamDetail/components/teacherList.vue
  62. 132 0
      src/views/teamDetail/teamClassList.vue
  63. 1 0
      src/views/vipClass/vipDetail/components/fnanceInfo.vue
  64. 1 0
      src/views/vipClass/vipDetail/components/teacherRecord.vue
  65. 141 62
      src/views/vipClass/vipDetail/components/vipStudentList.vue

+ 9 - 0
src/constant/index.js

@@ -195,3 +195,12 @@ export const belongDaya = {
   0: '其它课酬',
   1: '基本课酬'
 }
+
+export const musicClassType = {
+  NORMAL:"声部班" ,
+  MIX:"合奏班",
+  HIGH:"基础技能班",
+  SNAP:"临时班",
+  HIGH_ONLINE:'线上基础技能班',
+  MUSIC_NETWORK:"乐团网管课"
+}

+ 9 - 0
src/helpers/utils.js

@@ -0,0 +1,9 @@
+export const array2object = (list = [], k = 'id', v) => {
+  const data = {}
+  if (list) {
+    for (const item of list) {
+      data[item[k]] = v ? item[v] : item
+    }
+  }
+  return data
+}

+ 3 - 1
src/router/index.js

@@ -359,7 +359,9 @@ export const asyncRoutes = {
   // 考勤列表
   attendanceList: () => import('@/views/attendanceManager/attendanceList'),
   // 学生考情列表
-  stuRecodeManager:()=>import('@/views/stuRecodeManager')
+  stuRecodeManager:()=>import('@/views/stuRecodeManager'),
+  // 乐团班级列表
+  teamCLassList:()=>import('@/views/teamDetail/teamClassList')
 }
 
 export default router

+ 1 - 0
src/router/notKeepAliveList.js

@@ -79,4 +79,5 @@ export default [
   '/business/vipReset', // vip修改
   '/business/vipDetail', // vip查看
   '/contentManager/contentManager', // 内容管理
+  '/business/teamCLassList', // 班级列表
 ]

+ 38 - 28
src/store/modules/selects.js

@@ -3,6 +3,9 @@
 import { getSubject, getTeacher,findEducationUsers,getEmployeeOrgan } from '@/api/buildTeam'
 import { getSchool } from '@/api/systemManage'
 import { vipGroupCategory } from "@/api/vipSeting"
+import { findTechnician } from '@/api/repairManager'
+
+const loadings = {}
 
 /**
  *
@@ -23,12 +26,7 @@ export default {
     schools: [],
     vipGroupCategory: [],
     educations:[],
-    branchsLoading:false,
-    subjectsLoading:false,
-    teachersLoading:false,
-    schoolsLoading:false,
-    vipGroupCategoryLoading:false,
-    educationsLoading:false
+    technician: []
   },
   mutations: {
     commit_branchs: (state, branchs) => {
@@ -40,6 +38,7 @@ export default {
     commit_teachers: (state, teachers) => {
       state.teachers = teachers.map(teacher=>{
         return {
+          ...teacher,
           id:teacher.id,
           userId:teacher.id,
           userName:teacher.realName,
@@ -53,76 +52,87 @@ export default {
     commit_vip_group_category: (state, vipGroupCategory) => {
       state.vipGroupCategory = vipGroupCategory
     },
-    commit_educations:(state,educations)=>{
+    commit_educations: (state, educations)=>{
       state.educations = educations
+    },
+    commit_technician: (state, technician) => {
+      state.technician = technician
     }
   },
   actions: {
     async setBranchs ({ commit, state }, force) {
-      if (!state.branchs.length || force === true || !state.branchsLoading) {
-        if(state.branchsLoading)return
+      if ((!state.branchs.length || force === true) && !loadings.commit_branchs) {
+        loadings.commit_branchs = true
         try {
           state.branchsLoading = true
           const res = await getEmployeeOrgan()
           commit('commit_branchs', res.data)
         } catch (error) { }
-        state.branchsLoading = false
+        loadings.commit_branchs = false
       }
     },
     async setSubjects ({ commit, state }, force) {
-      if (!state.subjects.length || force === true) {
-        if(state.subjectsLoading)return
+      if ((!state.subjects.length || force === true) && !loadings.commit_subjects) {
+        loadings.commit_subjects = true
         try {
           state.subjectsLoading = true
           const res = await getSubject({rows: 9999, tenantId: '1'})
           commit('commit_subjects', res.data)
         } catch (error) { }
-        state.subjectsLoading = false
+        loadings.commit_subjects = false
       }
     },
     async setTeachers ({ commit, state }, force) {
-      if (!state.teachers.length || force === true) {
-        if(state.teachersLoading)return
+      if ((!state.teachers.length || force === true) && !loadings.commit_teachers) {
+        loadings.commit_teachers = true
         try {
           state.teachersLoading =true
           const res = await getTeacher()
           commit('commit_teachers', res.data)
         } catch (error) { }
-        state.teachersLoading = false
+        loadings.commit_teachers = false
       }
     },
     async setSchools ({ commit, state }, force) {
-      if (!state.schools.length || force === true) {
-        if(state.schoolsLoading)return
+      if ((!state.schools.length || force === true) && !loadings.commit_schools) {
+        loadings.commit_schools = true
         try {
           state.schoolsLoading = true
           const res = await getSchool()
           commit('commit_schools', res.data)
         } catch (error) { }
-        state.schoolsLoading = false
+        loadings.commit_schools = false
       }
     },
     async setVipGroupCategory ({ commit, state }, force) {
-      if (!state.vipGroupCategory.length || force === true) {
-        if(state.vipGroupCategoryLoading)return
+      if ((!state.vipGroupCategory.length || force === true) && !loadings.commit_vip_group_category) {
+        loadings.commit_vip_group_category = true
         try {
           state.vipGroupCategoryLoading = true
           const res = await vipGroupCategory()
           commit('commit_vip_group_category', res.data)
         } catch (error) { }
-        state.vipGroupCategoryLoading = false
-
+        loadings.commit_vip_group_category = false
       }
     },
     async setEducations({commit,state},force){
-      if (!state.educations.length || force === true ) {
-        if(state.educationsLoading)return
+      if ((!state.educations.length || force === true) && !loadings.commit_educations) {
+        loadings.commit_educations = true
         try {
-          state.educationsLoading = true
           const res = await findEducationUsers()
           commit('commit_educations', res.data)
-        } catch (error) {  }
-        state.educationsLoading = false
+        } catch (error) { }
+        loadings.commit_educations = false
+      }
+    },
+    async setTechnician({commit,state},force){
+      if ((!state.technician.length || force === true) && !loadings.commit_technician) {
+        loadings.commit_technician = true
+        try {
+          const res = await findTechnician()
+          commit('commit_technician', res.data)
+        } catch (error) {}
+        loadings.commit_technician = false
       }
 
     }

+ 51 - 38
src/templateList.vue

@@ -2,30 +2,51 @@
 <template>
   <div class="m-container">
     <h2>
-      <div class="squrt"></div>名字
+      <div class="squrt"></div>
+      班级列表
     </h2>
     <div class="m-core">
-      <el-form :inline="true"
-               :model="searchForm">
+      <save-form :inline="true" :model="searchForm" @submit="search" @reset='onReSet'>
         <el-form-item>
-          <el-input v-model.trim="searchForm.search"
-                    @keyup.enter.native="search"
-                    placeholder></el-input>
+          <el-input
+            v-model.trim="searchForm.search"
+            clearable
+            @keyup.enter.native="search"
+            placeholder='请输入乐团编号'
+          ></el-input>
         </el-form-item>
-      </el-form>
+          <el-form-item>
+          <el-input
+            v-model.trim="searchForm.search"
+            @keyup.enter.native="search"
+            placeholder='请输入乐团编号'
+          ></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button native-type="submit" type="primary">搜索</el-button>
+          <el-button native-type="reset" type="danger">重置</el-button>
+        </el-form-item>
+      </save-form>
       <div class="tableWrap">
-        <el-table style="width: 100%"
-                  :header-cell-style="{background:'#EDEEF0',color:'#444'}"
-                  :data="tableList">
-          <el-table-column align="center"
-                           prop="studentId"
-                           label="分部"></el-table-column>
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+        >
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="分部"
+          ></el-table-column>
         </el-table>
-        <pagination :total="rules.total"
-                    :page.sync="rules.page"
-                    :limit.sync="rules.limit"
-                    :page-sizes="rules.page_size"
-                    @pagination="getList" />
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
       </div>
     </div>
   </div>
@@ -36,14 +57,12 @@ import axios from "axios";
 import { getToken } from "@/utils/auth";
 import pagination from "@/components/Pagination/index";
 import load from "@/utils/loading";
-import {  getEmployeeOrgan } from "@/api/buildTeam";
-
 export default {
   components: { pagination },
-  data () {
+  data() {
     return {
       searchForm: {
-        search: null
+        search: null,
       },
 
       tableList: [],
@@ -53,33 +72,27 @@ export default {
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         total: 0, // 总条数
-        page_size: [10, 20, 40, 50] // 选择限制显示条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
       },
     };
   },
   //生命周期 - 创建完成(可以访问当前this实例)
-  created () { },
+  created() {},
   //生命周期 - 挂载完成(可以访问DOM元素)
-  mounted () {
-    getEmployeeOrgan().then(res => {
-      if (res.code == 200) {
-        this.organList = res.data;
-      }
-    });
+  mounted() {
     // 获取分部
 
     this.init();
-
-
   },
-  // activated () {
-  //   this.init();
-  // },
   methods: {
-    init () {
+    init() {},
+    getList() {},
+    search(){
+      this.rules.page = 1;
+      this.getList()
     },
-    getList () { }
-  }
+    onReSet(){},
+  },
 };
 </script>
 <style lang='scss' scoped>

+ 2 - 1
src/utils/searchArray.js

@@ -1,5 +1,5 @@
 // 搜索用的下拉数据列表
-import { payOrderType, auditType, auditPaymentType, orderServerType, orderAuditType, rewardModeType,classTime } from '../constant'
+import { payOrderType, auditType, auditPaymentType, orderServerType, orderAuditType, rewardModeType,classTime,musicClassType } from '../constant'
 // 课程类型
 export const courseType = [
   { label: "声部课", value: "SINGLE" },
@@ -207,6 +207,7 @@ export const auditPaymentTypeList = getValueForKey(auditPaymentType)
 export const orderServerList = getValueForKey(orderServerType)
 export const orderAuditTypeList = getValueForKey(orderAuditType)
 export const rewardModeTypeList = getValueForKey(rewardModeType)
+export const musicClassTypeList =  getValueForKey(musicClassType)
 function getValueForKey (obj) {
   let arr = []
   for (let k in obj) {

+ 176 - 172
src/views/accompanyManager/accompanyBuys.vue

@@ -1,176 +1,179 @@
 <!--  -->
 <template>
   <div class="m-core">
-    <save-form :inline="true"
-             class="searchForm"
-             save-key='accompanyBuys'
-             @submit="search"
-             @reset="onReSet"
-             :model.sync="searchForm">
+    <save-form
+      :inline="true"
+      class="searchForm"
+      save-key="accompanyBuys"
+      @submit="search"
+      @reset="onReSet"
+      :model.sync="searchForm"
+    >
       <!-- 状态 指导老师 活动方案-->
       <el-form-item>
-        <el-input v-model.trim="searchForm.search"
-        clearable
-                  placeholder="学员编号 学员名称"></el-input>
+        <el-input
+          v-model.trim="searchForm.search"
+          clearable
+          placeholder="学员编号 学员名称"
+        ></el-input>
       </el-form-item>
       <el-form-item>
-        <el-select class="multiple"
-                   v-model.trim="searchForm.organIdList"
-                   filterable
-                   clearable
-                   placeholder="请选择分部">
-          <el-option v-for="(item,index) in selects.branchs"
-                     :key="index"
-                     :label="item.name"
-                     :value="item.id"></el-option>
+        <el-select
+          class="multiple"
+          v-model.trim="searchForm.organIdList"
+          filterable
+          clearable
+          placeholder="请选择分部"
+        >
+          <el-option
+            v-for="(item, index) in selects.branchs"
+            :key="index"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
         </el-select>
       </el-form-item>
       <!-- statusList -->
       <el-form-item prop="buy">
-        <el-select class="multiple"
-                   v-model.trim="searchForm.buy"
-                   filterable
-                   clearable
-                   placeholder="购买网管课">
-          <el-option label="是"
-                     value="true"></el-option>
-          <el-option label="否"
-                     value="false"></el-option>
+        <el-select
+          class="multiple"
+          v-model.trim="searchForm.buy"
+          filterable
+          clearable
+          placeholder="购买网管课"
+        >
+          <el-option label="是" value="true"></el-option>
+          <el-option label="否" value="false"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item>
-        <el-button native-type="submit"
-                   type="danger">搜索</el-button>
-        <el-button native-type="reset"
-                   type="primary">重置</el-button>
+        <el-button native-type="submit" type="danger">搜索</el-button>
+        <el-button native-type="reset" type="primary">重置</el-button>
       </el-form-item>
       <el-form-item>
         <!-- <div class="newBand" @click="onExport">导出</div> -->
-        <el-button @click="onExport"
-                   type="primary"
-                   v-permission="'export/studentBuyPractice'"
-                   style="background-color: #14928a; border: 1px solid #14928a;">导出</el-button>
+        <el-button
+          @click="onExport"
+          type="primary"
+          v-permission="'export/studentBuyPractice'"
+          style="background-color: #14928a; border: 1px solid #14928a"
+          >导出</el-button
+        >
       </el-form-item>
     </save-form>
     <div class="tableWrap">
-      <el-table style="width: 100%"
-                :header-cell-style="{background:'#EDEEF0',color:'#444'}"
-                :data="tableData">
-        <el-table-column align="center"
-                         prop="studentId"
-                         label="学员编号">
-                           <template slot-scope="scope">
-              <copy-text>{{ scope.row.studentId }}</copy-text>
-            </template>
-                         </el-table-column>
-        <el-table-column align="center"
-                         prop="studentName"
-                         label="学员名称">
-                                        <template slot-scope="scope">
-              <copy-text>{{ scope.row.studentName }}</copy-text>
-            </template>
-                         </el-table-column>
-        <el-table-column align="center"
-                         prop="organName"
-                         label="所属分部">
-
-                                        <template slot-scope="scope">
-              <copy-text>{{ scope.row.organName }}</copy-text>
-            </template>
-                         </el-table-column>
+      <el-table
+        style="width: 100%"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        :data="tableData"
+      >
+        <el-table-column align="center" prop="studentId" label="学员编号">
+          <template slot-scope="scope">
+            <copy-text>{{ scope.row.studentId }}</copy-text>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="studentName" label="学员名称">
+          <template slot-scope="scope">
+            <copy-text>{{ scope.row.studentName }}</copy-text>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="organName" label="所属分部">
+          <template slot-scope="scope">
+            <copy-text>{{ scope.row.organName }}</copy-text>
+          </template>
+        </el-table-column>
         <!-- educationalTeacherId -->
-        <el-table-column align="center"
-                         prop="phone"
-                         label="手机号"></el-table-column>
-        <el-table-column align="center"
-                         label="是否购买">
+        <el-table-column
+          align="center"
+          prop="phone"
+          label="手机号"
+        ></el-table-column>
+        <el-table-column align="center" label="是否购买">
           <template slot-scope="scope">
             <div>
-              <p>{{scope.row.buyPractice?'是':'否'}}</p>
+              <p>{{ scope.row.buyPractice ? "是" : "否" }}</p>
             </div>
           </template>
         </el-table-column>
-        <el-table-column align="center"
-                         prop="lastClassDate"
-                         label="结束日期">
-          <template slot="header"
-                    slot-scope="scope">
-            <p style="position: relative; "> 结束日期 <el-tooltip placement="top"
-                          popper-class="mTooltip">
-                <div slot="content">
-                  免费网管课最后一节课截止日期
-                </div>
+        <el-table-column align="center" prop="lastClassDate" label="结束日期">
+          <template slot="header" slot-scope="scope">
+            <p style="position: relative">
+              结束日期
+              <el-tooltip placement="top" popper-class="mTooltip">
+                <div slot="content">免费网管课最后一节课截止日期</div>
                 <!-- <img :src="imageIcon"
                       class="micon el-tooltip"
                       style="width:8px height:8px"
                       alt /> -->
-                <i class="el-icon-question"
-                   style="font-size: 18px; color: #F56C6C"></i>
+                <i
+                  class="el-icon-question"
+                  style="font-size: 18px; color: #f56c6c"
+                ></i>
               </el-tooltip>
             </p>
           </template>
           <template slot-scope="scope">
             <div>
-              <p>{{scope.row.lastClassDate | formatTimer}}</p>
+              <p>{{ scope.row.lastClassDate | formatTimer }}</p>
             </div>
           </template>
         </el-table-column>
-        <el-table-column align="center"
-                         prop="firstBuyTime"
-                         label="购买日期">
-          <template slot="header"
-                    slot-scope="scope">
-            <p style="position: relative; "> 购买日期 <el-tooltip placement="top"
-                          popper-class="mTooltip">
-                <div slot="content">
-                  付费网管课第一次购买时间
-                </div>
+        <el-table-column align="center" prop="firstBuyTime" label="购买日期">
+          <template slot="header" slot-scope="scope">
+            <p style="position: relative">
+              购买日期
+              <el-tooltip placement="top" popper-class="mTooltip">
+                <div slot="content">付费网管课第一次购买时间</div>
                 <!-- <img :src="imageIcon"
                       class="micon el-tooltip"
                       style="width:8px height:8px"
                       alt /> -->
-                <i class="el-icon-question"
-                   style="font-size: 18px; color: #F56C6C"></i>
+                <i
+                  class="el-icon-question"
+                  style="font-size: 18px; color: #f56c6c"
+                ></i>
               </el-tooltip>
             </p>
           </template>
           <template slot-scope="scope">
             <div>
-              <p>{{scope.row.firstBuyTime | formatTimer}}</p>
+              <p>{{ scope.row.firstBuyTime | formatTimer }}</p>
             </div>
           </template>
         </el-table-column>
-        <el-table-column align="center"
-                         prop="intervalDay"
-                         label="时间差">
-          <template slot="header"
-                    slot-scope="scope">
-            <p style="position: relative; "> 时间差 <el-tooltip placement="top"
-                          popper-class="mTooltip">
-                <div slot="content">
-                  付费网管课结束后与购买日期的时间差
-                </div>
+        <el-table-column align="center" prop="intervalDay" label="时间差">
+          <template slot="header" slot-scope="scope">
+            <p style="position: relative">
+              时间差
+              <el-tooltip placement="top" popper-class="mTooltip">
+                <div slot="content">付费网管课结束后与购买日期的时间差</div>
                 <!-- <img :src="imageIcon"
                       class="micon el-tooltip"
                       style="width:8px height:8px"
                       alt /> -->
-                <i class="el-icon-question"
-                   style="font-size: 18px; color: #F56C6C"></i>
+                <i
+                  class="el-icon-question"
+                  style="font-size: 18px; color: #f56c6c"
+                ></i>
               </el-tooltip>
             </p>
           </template>
           <template slot-scope="scope">
             <div>
-              <p>{{scope.row.intervalDay + '天'}}</p>
+              <p>{{ scope.row.intervalDay + "天" }}</p>
             </div>
           </template>
         </el-table-column>
       </el-table>
-      <pagination sync :total.sync="rules.total"
-                  :page.sync="rules.page"
-                  :limit.sync="rules.limit"
-                  :page-sizes="rules.page_size"
-                  @pagination="getList" />
+      <pagination
+        sync
+        :total.sync="rules.total"
+        save-key="accompanyBuys"
+        :page.sync="rules.page"
+        :limit.sync="rules.limit"
+        :page-sizes="rules.page_size"
+        @pagination="getList"
+      />
     </div>
   </div>
 </template>
@@ -178,21 +181,21 @@
 <script>
 import {
   practiceGroupManageStudentBuys,
-  getEmployeeOrgan
+  getEmployeeOrgan,
 } from "@/api/buildTeam";
 import pagination from "@/components/Pagination/index";
-import axios from 'axios'
-import { getToken } from '@/utils/auth'
-import load from '@/utils/loading'
-import qs from 'qs'
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import load from "@/utils/loading";
+import qs from "qs";
 export default {
   components: { pagination },
-  data () {
+  data() {
     return {
       searchForm: {
         search: null,
         buy: null,
-        organIdList: null
+        organIdList: null,
       },
       tableData: [],
       organList: [],
@@ -201,122 +204,123 @@ export default {
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         total: 0, // 总条数
-        page_size: [10, 20, 40, 50] // 选择限制显示条数
-      }
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
     };
   },
   //生命周期 - 创建完成(可以访问当前this实例)
-  created () { },
+  created() {},
   //生命周期 - 挂载完成(可以访问DOM元素)
-  mounted () {
+  mounted() {
     this.init();
   },
-  activated () {
+  activated() {
     this.init();
   },
   computed: {
     saveKey() {
-      return this.$route.path + '/2'
-    }
+      return this.$route.path + "/2";
+    },
   },
   methods: {
-    init () {
+    init() {
       // 获取分部
-      this.$store.dispatch('setBranchs')
+      this.$store.dispatch("setBranchs");
       // getEmployeeOrgan().then(res => {
       //   if (res.code == 200) {
       //     this.organList = res.data;
       //   }
       // });
-      this.getList()
+      this.getList();
     },
-    getList () {
+    getList() {
       let obj = {
         page: this.rules.page,
-        rows: this.rules.limit
+        rows: this.rules.limit,
       };
       this.searchForm.search ? (obj.search = this.searchForm.search) : null;
-      this.searchForm.buy
-        ? (obj.buyPractice = this.searchForm.buy)
-        : null;
+      this.searchForm.buy ? (obj.buyPractice = this.searchForm.buy) : null;
       this.searchForm.organIdList
         ? (obj.organId = this.searchForm.organIdList)
         : null;
-      practiceGroupManageStudentBuys(obj).then(res => {
+      practiceGroupManageStudentBuys(obj).then((res) => {
         if (res.code == 200) {
-          this.tableData = res.data.rows
+          this.tableData = res.data.rows;
           this.rules.total = res.data.total;
         }
       });
     },
-    search () {
+    search() {
       this.rules.page = 1;
       this.getList();
     },
-    onReSet () {
+    onReSet() {
       this.searchForm = {
         search: null,
         buy: null,
-        organIdList: null
+        organIdList: null,
       };
       this.search();
     },
     // 导出
-    onExport () {
+    onExport() {
       let searchForm = this.searchForm;
       let data = {
         buyPractice: searchForm.buy || null,
         organId: searchForm.organIdList || null,
-        search: searchForm.search || null
+        search: searchForm.search || null,
       };
       let url = "/api-web/export/studentBuyPractice";
       const options = {
         method: "POST",
         headers: {
-          Authorization: getToken()
+          Authorization: getToken(),
         },
         params: data,
         url,
-        responseType: "blob"
+        responseType: "blob",
       };
       this.$confirm("您确定导出报表", "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
-        type: "warning"
+        type: "warning",
       })
         .then(() => {
-          load.startLoading()
-          axios(options).then(res => {
-            let blob = new Blob([res.data], {
-              // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
-              type: "application/vnd.ms-excel;charset=utf-8"
-              //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
-            });
+          load.startLoading();
+          axios(options)
+            .then((res) => {
+              let blob = new Blob([res.data], {
+                // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
+                type: "application/vnd.ms-excel;charset=utf-8",
+                //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
+              });
 
-            let text = (new Response(blob)).text()
-            text.then(res => {
-              // 判断是否报错
-              if (res.indexOf('code') != -1) {
-                let json = JSON.parse(res)
-                this.$message.error(json.msg)
-              } else {
-                let objectUrl = URL.createObjectURL(blob);
-                let link = document.createElement("a");
-                let fname = "网管课购买" + new Date().getTime(); //下载文件的名字
-                link.href = objectUrl;
-                link.setAttribute("download", fname);
-                document.body.appendChild(link);
-                link.click();
-              }
+              let text = new Response(blob).text();
+              text.then((res) => {
+                // 判断是否报错
+                if (res.indexOf("code") != -1) {
+                  let json = JSON.parse(res);
+                  this.$message.error(json.msg);
+                } else {
+                  let objectUrl = URL.createObjectURL(blob);
+                  let link = document.createElement("a");
+                  let fname = "网管课购买" + new Date().getTime(); //下载文件的名字
+                  link.href = objectUrl;
+                  link.setAttribute("download", fname);
+                  document.body.appendChild(link);
+                  link.click();
+                }
+              });
+              load.endLoading();
             })
-            load.endLoading();
-          }).catch(error => {
-            this.$message.error('导出数据失败,请联系管理员');
-            load.endLoading();
-          });
-        }).catch(() => { });
-    }
-  }
+            .catch((error) => {
+              this.$message.error("导出数据失败,请联系管理员");
+              load.endLoading();
+            });
+        })
+        .catch(() => {});
+    },
+  },
 };
 </script>
 <style lang='scss' scoped>

+ 1 - 0
src/views/accompanyManager/accompanyList.vue

@@ -288,6 +288,7 @@
           </el-table-column>
         </el-table>
         <pagination
+         save-key="accompanyList"
           sync
           :total.sync="rules.total"
           :page.sync="rules.page"

+ 4 - 4
src/views/accompanyManager/accompanys.vue

@@ -128,11 +128,11 @@
           </template>
         </el-table-column>
       </el-table>
-      <pagination :total="rules.total"
+      <!-- <pagination :total="rules.total"
                   :page.sync="rules.page"
                   :limit.sync="rules.limit"
                   :page-sizes="rules.page_size"
-                  @pagination="getList" />
+                  @pagination="getList" /> 乔乔说后台没有分页所以一口气都展示-->
     </div>
     <el-dialog title="有效期调整"
                width="400px"
@@ -799,11 +799,11 @@ export default {
       });
     },
     getList () {
-      findPracticeGroupCourseSchedules({ practiceId: this.practiceId, page: this.rules.page, rows: this.rules.limit }).then(
+      // 乔乔说后台分页数据是假的所以不分页 page: this.rules.page, rows: this.rules.limit   this.rules.total = res.data.pageInfo.total;
+      findPracticeGroupCourseSchedules({ practiceId: this.practiceId,  }).then(
         res => {
           if (res.code == 200) {
             this.tableList = res.data.pageInfo.rows;
-            this.rules.total = res.data.pageInfo.total;
           }
         }
       );

+ 3 - 1
src/views/afterSchoolManager/afterSchoolList.vue

@@ -123,7 +123,9 @@
           </el-table-column>
         </el-table>
         <pagination
-          :total="rules.total"
+        sync
+         :saveKey="'afterSchoolList'"
+          :total.sync="rules.total"
           :page.sync="rules.page"
           :limit.sync="rules.limit"
           :page-sizes="rules.page_size"

+ 4 - 2
src/views/afterSchoolManager/afterWorkList.vue

@@ -200,7 +200,9 @@
             </template>
           </el-table-column>
         </el-table>
-        <pagination :total="rules.total"
+        <pagination
+         :saveKey="'afterWorkList'"
+        :total="rules.total"
                     :page.sync="rules.page"
                     :limit.sync="rules.limit"
                     :page-sizes="rules.page_size"
@@ -491,4 +493,4 @@ export default {
 /deep/.el-textarea.is-disabled .el-textarea__inner {
   color: #333;
 }
-</style>
+</style>

+ 42 - 4
src/views/businessManager/orderManager/financeManager.vue

@@ -480,7 +480,7 @@
             </el-select>
           </el-form-item>
           <div v-if="form.applyType == 'SELL'">
-            <div v-for="(goodsList, index) in form.goodsList" :key="index">
+            <div v-for="(goodsList, index) in form.goodsList" :key="index"  class="shopListWrap">
               <el-form-item
                 :label="'商品名称' + (index + 1)"
                 :label-width="formLabelWidth"
@@ -491,6 +491,7 @@
                 ]"
               >
                 <el-select
+                 v-if="isAdd"
                   v-model.trim="goodsList.id"
                   filterable
                   :disabled="!isAdd"
@@ -504,10 +505,13 @@
                     :value="item.id"
                   ></el-option>
                 </el-select>
+                  <p class="showShop" v-else>
+              <Tooltip :content="goodsList.id | filterShopId" />
+            </p>
               </el-form-item>
               <el-form-item
                 class="setWidth"
-                style="margin-right: 10px"
+                style="margin:0 10px"
                 :prop="'goodsList.' + index + '.number'"
                 :rules="validAmount"
               >
@@ -527,14 +531,16 @@
                 :disabled="!isAdd"
                 v-if="form.goodsList.length > 1"
                 circle
+                 style="height:40px;"
                 @click.prevent="removeGoodsList(goodsList)"
               ></el-button>
               <el-button
                 icon="el-icon-plus"
+
                 :disabled="!isAdd"
                 @click.prevent="addGoodsList"
                 circle
-                style="margin-left: 5px"
+                style="margin-left: 5px; height:40px;"
               ></el-button>
             </div>
           </div>
@@ -612,6 +618,7 @@ import { getToken } from "@/utils/auth";
 import load from "@/utils/loading";
 import { orderServerList } from "@/utils/searchArray";
 import { Export } from "@/utils/downLoadFile";
+import Tooltip from "@/components/Tooltip/index";
 let validAmount = (rule, value, callback) => {
   if (!value) {
     callback(new Error("请输入商品数量"));
@@ -623,8 +630,9 @@ let validAmount = (rule, value, callback) => {
     callback();
   }
 };
+let that;
 export default {
-  components: { pagination },
+  components: { pagination,Tooltip },
   name: "incomeTwo",
   data() {
     return {
@@ -717,6 +725,9 @@ export default {
       },
     };
   },
+  created(){
+    that = this
+  },
   mounted() {
     // getEmployeeOrgan().then((res) => {
     //   if (res.code == 200) {
@@ -1182,6 +1193,17 @@ export default {
       }
     },
   },
+    filters: {
+    filterShopId(val) {
+      let str = "";
+      that.shopList.forEach((shop) => {
+        if (shop.id == val) {
+          str = shop.name;
+        }
+      });
+      return str;
+    },
+  },
 };
 </script>
 <style lang="scss" scoped>
@@ -1202,4 +1224,20 @@ export default {
   padding: 0 20px;
   margin-bottom: 20px;
 }
+.showShop {
+  height: 40px;
+  line-height: 40px;
+  width: 150px;
+  background-color: #f5f7fa;
+  border-color: #e4e7ed;
+  color: #c0c4cc;
+  cursor: not-allowed;
+  color: #333;
+  opacity: 1;
+  border-radius: 4px;
+  border: 1px solid #dcdfe6;
+  padding: 0 15px;
+  margin-right: 10px;
+}
+.shopListWrap { display: flex; flex-direction: row; justify-content: flex-start;}
 </style>

+ 1 - 1
src/views/businessManager/orderManager/orderAudit-taoqi/index.vue

@@ -177,7 +177,7 @@ import pagination from "@/components/Pagination/index";
 import load from "@/utils/loading";
 import { getEmployeeOrgan, getAddress, getCooperation } from "@/api/buildTeam";
 import { orderServerList, orderAuditTypeList } from "@/utils/searchArray";
-import orderAuditDetail from "./orderAuditDetail";
+import orderAuditDetail from "@/views/businessManager/orderManager/orderAudit/orderAuditDetail";
 import { getRouteOrderList } from "@/api/orderManager";
 import { goodsQuery } from "@/api/businessManager";
 import { formatData } from "@/utils/utils";

+ 70 - 16
src/views/businessManager/orderManager/orderAudit/orderAuditDetail.vue

@@ -55,17 +55,17 @@
           ></el-option>
         </el-select>
       </el-form-item>
-          <el-form-item
-            label="缴费单号"
-            prop="calenderId"
-            :label-width="formLabelWidth"
-          >
-            <el-input
-              v-model.trim="form.calenderId"
-              :disabled="!isAdd"
-              placeholder="请输入缴费单号"
-            ></el-input>
-          </el-form-item>
+      <el-form-item
+        label="缴费单号"
+        prop="calenderId"
+        :label-width="formLabelWidth"
+      >
+        <el-input
+          v-model.trim="form.calenderId"
+          :disabled="!isAdd"
+          placeholder="请输入缴费单号"
+        ></el-input>
+      </el-form-item>
       <el-form-item
         label="学员编号"
         prop="userId"
@@ -188,7 +188,11 @@
       </el-form-item>
 
       <div v-if="form.applyType == 'SELL'">
-        <div v-for="(goodsList, index) in form.goodsList" :key="index">
+        <div
+          v-for="(goodsList, index) in form.goodsList"
+          :key="index"
+          class="shopListWrap"
+        >
           <el-form-item
             :label="'商品名称' + (index + 1)"
             :label-width="formLabelWidth"
@@ -199,18 +203,24 @@
             ]"
           >
             <el-select
+              v-if="isAdd"
               v-model.trim="goodsList.id"
               filterable
               :disabled="!isAdd"
               placeholder="请选择商品"
+              :popper-append-to-body="false"
             >
               <el-option
+                :title="item.name"
                 v-for="(item, index) in shopList"
                 :key="index"
                 :label="item.name"
                 :value="item.id"
               ></el-option>
             </el-select>
+            <p class="showShop" v-else>
+              <Tooltip :content="goodsList.id | filterShopId" />
+            </p>
           </el-form-item>
           <el-form-item
             class="setWidth"
@@ -276,8 +286,19 @@
         ></el-input>
       </el-form-item>
     </el-form>
-    <div class="lookTitle" v-if="auditStatus == 'ING'" v-permission="'routeOrder/auditOutOrder'">审核意见</div>
-    <el-form :model="submitForm" v-if="auditStatus == 'ING'" ref="submitForm" v-permission="'routeOrder/auditOutOrder'">
+    <div
+      class="lookTitle"
+      v-if="auditStatus == 'ING'"
+      v-permission="'routeOrder/auditOutOrder'"
+    >
+      审核意见
+    </div>
+    <el-form
+      :model="submitForm"
+      v-if="auditStatus == 'ING'"
+      ref="submitForm"
+      v-permission="'routeOrder/auditOutOrder'"
+    >
       <el-form-item
         prop="memo"
         :rules="[
@@ -301,7 +322,10 @@ import {
 } from "@/api/orderManager";
 import { orderServerList } from "@/utils/searchArray";
 import { getCooperation } from "@/api/buildTeam";
+import Tooltip from "@/components/Tooltip/index";
+let that;
 export default {
+  components: { Tooltip },
   props: ["orderId", "shopList", "organList", "isLook"],
   data() {
     return {
@@ -326,7 +350,7 @@ export default {
         applyType: null,
         userId: "",
         auditComment: "",
-        calenderId:''
+        calenderId: "",
       },
       isAdd: !this.isLook,
       cooperationList: [],
@@ -338,6 +362,9 @@ export default {
       clearSchool: false,
     };
   },
+  created() {
+    that = this;
+  },
   mounted() {
     if (this.orderId) {
       getRouteOrderInfo({ id: this.orderId }).then((res) => {
@@ -359,7 +386,7 @@ export default {
             userId: orderInfo.userId ? orderInfo.userId : "",
             auditComment: orderInfo.auditComment,
             applyType: orderInfo.saleAmount ? "SELL" : "SERVICE",
-            calenderId:orderInfo.calenderId?orderInfo.calenderId:''
+            calenderId: orderInfo.calenderId ? orderInfo.calenderId : "",
           };
           this.auditStatus = orderInfo.auditStatus;
           this.$set(
@@ -470,6 +497,17 @@ export default {
       });
     },
   },
+  filters: {
+    filterShopId(val) {
+      let str = "";
+      that.shopList.forEach((shop) => {
+        if (shop.id == val) {
+          str = shop.name;
+        }
+      });
+      return str;
+    },
+  },
 };
 </script>
 <style lang="scss" scoped>
@@ -484,4 +522,20 @@ export default {
 .setWidth {
   display: inline-block;
 }
+.showShop {
+  height: 40px;
+  line-height: 40px;
+  width: 150px;
+  background-color: #f5f7fa;
+  border-color: #e4e7ed;
+  color: #c0c4cc;
+  cursor: not-allowed;
+  color: #333;
+  opacity: 1;
+  border-radius: 4px;
+  border: 1px solid #dcdfe6;
+  padding: 0 15px;
+  margin-right: 10px;
+}
+.shopListWrap { display: flex; flex-direction: row; justify-content: flex-start;}
 </style>

+ 1 - 1
src/views/businessManager/shopManager/shopList.vue

@@ -288,7 +288,7 @@
               </el-popconfirm> -->
               <!-- {{ scope.row.status }} -->
               <!-- v-permission="scope.row.complementGoodsIdList ? 'goods/update' : '/shopOperation'" -->
-              <el-button v-if="scope.row.status == 0 && permission(scope.row.complementGoodsIdList ? 'goods/update' : '/shopOperation')"
+              <el-button v-if="scope.row.status == 0 && (scope.row.complementGoodsIdList ? 'goods/update' : '/shopOperation')"
                          @click="onShopOperation('update', scope.row)"
                          type="text">修改</el-button>
               <el-button v-if="scope.row.status == 1 && permission(scope.row.complementGoodsIdList ? 'goods/update' : '/shopOperation')"

+ 6 - 3
src/views/categroyManager/generalSettings/errorManager.vue

@@ -28,7 +28,10 @@
             </template>
           </el-table-column>
         </el-table>
-        <pagination :total="pageInfo.total"
+        <pagination
+        :saveKey="'errorManager'"
+        sync
+        :total.sync="pageInfo.total"
                     :page.sync="pageInfo.page"
                     :limit.sync="pageInfo.limit"
                     :page-sizes="pageInfo.page_size"
@@ -73,7 +76,7 @@ export default {
         create: '添加热词标签',
         update: '修改热词标签'
       },
-      typeStatus: false, // 添加教学点 
+      typeStatus: false, // 添加教学点
       formLabelWidth: '120px',
       form: {
         name: null, // 热词标签
@@ -181,4 +184,4 @@ export default {
 /deep/.el-select {
   width: 98% !important;
 }
-</style>
+</style>

+ 28 - 0
src/views/categroyManager/insideSetting/api.js

@@ -0,0 +1,28 @@
+import request2 from '@/utils/request2'
+
+// 员工离职
+export const employeeLevel = data => {
+  return request2({
+    url: '/api-web/employee/level',
+    method: 'post',
+    data
+  })
+}
+
+// 获取交接信息
+export const employeeLevelDetail = data => {
+  return request2({
+    url: '/api-web/employee/levelDetail',
+    method: 'get',
+    params: data
+  })
+}
+
+// 获取所有员工
+export const employeeFindEmployeeByRole = data => {
+  return request2({
+    url: '/api-web/employee/queryEmployByOrganId',
+    method: 'get',
+    params: data
+  })
+}

+ 172 - 0
src/views/categroyManager/insideSetting/modals/handover.vue

@@ -0,0 +1,172 @@
+<template>
+  <div v-loading="loading">
+    <el-form ref="form" inline :model="form" v-if="!isEmpty">
+      <template v-for="(item, key) in form">
+        <select-user
+          v-if="item.length > 0"
+          :key="key"
+          :name="key"
+          :item="item"
+          :branchsyId="branchsyId"
+          :employeeByOrganId="employeeByOrganId"
+          :technicianByOrganId="technicianByOrganId"
+        />
+      </template>
+    </el-form>
+    <empty v-else>
+      <p>无需交接,点击确定继续操作离职</p>
+    </empty>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="$listeners.close">取 消</el-button>
+      <el-button @click="submit" type="primary">确 定</el-button>
+    </span>
+  </div>
+</template>
+<script>
+import { array2object } from '@/helpers/utils'
+import { employeeOperate } from '@/api/systemManage'
+import { employeeLevelDetail, employeeLevel, employeeFindEmployeeByRole } from '../api'
+import selectUser from './select-user'
+export default {
+  props: ['detail'],
+  components: {
+    'select-user': selectUser
+  },
+  data() {
+    return {
+      list: [],
+      form: {
+        repair: [],
+        director: [],
+        education: [],
+        teamTeacher: [],
+      },
+      employees: [],
+      loading: false,
+    }
+  },
+  computed: {
+    isEmpty() {
+      let empty = true
+      for (const key in this.form) {
+        if (Object.hasOwnProperty.call(this.form, key)) {
+          const item = this.form[key];
+          if (item.length > 0) {
+            empty = false
+          }
+        }
+      }
+      return empty
+    },
+    branchsyId() {
+      return array2object(this.selects.branchs, 'id')
+    },
+    technicianByOrganId() {
+      const data = {}
+      for (const item of this.selects.technician) {
+        if (item.organIdList) {
+          for (const organId of item.organIdList) {
+            if (!data[organId]) {
+              data[organId] = []
+            }
+            data[organId].push(item)
+          }
+        }
+      }
+      return data
+    },
+    employeeByOrganId() {
+      const data = {}
+      for (const item of this.employees) {
+        if (item.organIdList) {
+          for (const organId of item.organIdList) {
+            if (!data[organId]) {
+              data[organId] = []
+            }
+            data[organId].push(item)
+          }
+        }
+      }
+      return data
+    }
+  },
+  async mounted() {
+    this.$store.dispatch('setBranchs')
+    this.$store.dispatch('setTechnician')
+    this.FetchDetail()
+  },
+  methods: {
+    async submit() {
+      if (!this.$refs.form) {
+        try {
+          await employeeOperate({
+            employeeId: this.detail.id,
+            operate: 'DEMISSION'
+          })
+          this.$message.success('提交成功')
+          this.$listeners.close()
+          this.$listeners.submited()
+        } catch (error) {}
+        return
+      }
+      this.$refs.form.validate(async valid => {
+        if (valid) {
+          let list = []
+          for (const key in this.form) {
+            if (Object.hasOwnProperty.call(this.form, key)) {
+              const item = this.form[key];
+              list = list.concat(item.map(row => ({...row, roleName: key})))
+            }
+          }
+          try {
+            await employeeLevel(list)
+            this.$message.success('提交成功')
+            this.$listeners.close()
+            this.$listeners.submited()
+          } catch (error) {}
+        }
+      })
+    },
+    async FetchDetail() {
+      this.loading = true
+      try {
+        const res = await Promise.all([
+          employeeFindEmployeeByRole({
+            rows: 99999,
+            demissionflag: 0
+          }),
+          employeeLevelDetail({
+            userId: this.detail.id
+          })
+        ]).then(res => {
+          this.employees = res[0].data.rows
+          return res[1]
+        })
+        this.list = res.data
+        for (const key in res.data) {
+          if (Object.hasOwnProperty.call(res.data, key)) {
+            const type = res.data[key];
+            for (const item of type) {
+              this.form[key].push({
+                organId: item,
+                transferUserId: '',
+                levelUserId: this.detail.id
+              })
+            }
+          }
+        }
+        this.form = this.form
+      } catch (error) {}
+      this.loading = false
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.dialog-footer{
+  text-align: right;
+  display: block;
+  padding-bottom: 20px;
+  margin-top: 20px;
+}
+</style>

+ 103 - 0
src/views/categroyManager/insideSetting/modals/select-user.vue

@@ -0,0 +1,103 @@
+<template>
+  <div>
+    <el-alert class="alert" type="info" :closable="false">
+      <template #title>
+        <div class="title">
+          <span>{{formatName}}</span>
+          <el-button style="padding: 5px;" type="text" @click="clear">清空</el-button>
+        </div>
+      </template>
+    </el-alert>
+    <div class="content">
+      <el-row v-for="(row, index) in item" :key="row.organId">
+        <el-col :span="8">
+          <el-form-item :label="branchsyId[row.organId] && branchsyId[row.organId].name"></el-form-item>
+        </el-col>
+        <el-col :span="16">
+          <el-form-item
+            label="交接人"
+            :prop="`${name}.${index}.transferUserId`"
+            :rules="[{
+              required: true, message: '请选择交接人'
+            }]"
+          >
+            <el-select
+              @change="val => change(val, row)"
+              :value="row.transferUserId"
+              clearable
+              filterable
+            >
+              <el-option
+                v-for="option in options[row.organId]"
+                :key="option.id || option.userId"
+                :value="option.id || option.userId"
+                :label="option.realName"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <!-- <el-col :span="6">
+          <el-button
+            type="text"
+            v-if="index == 0"
+            :disabled="!row.transferUserId"
+            @click="quickSetting(row.transferUserId)"
+          >快速设置</el-button>
+        </el-col> -->
+      </el-row>
+    </div>
+  </div>
+</template>
+<script>
+import { employeeLevelDetail, employeeLevel } from '../api'
+export default {
+  props: ['item', 'name', 'branchsyId', 'employeeByOrganId', 'technicianByOrganId'],
+  computed: {
+    formatName() {
+      const types = {
+        repair: '维修技师',
+        director: '乐队指导',
+        education: '乐团主管',
+        teamTeacher: '运营主管',
+      }
+      return types[this.name]
+    },
+    options() {
+      return this.name === 'repair' ? this.technicianByOrganId : this.employeeByOrganId
+    }
+  },
+  methods: {
+    quickSetting(id) {
+      this.item.forEach(row => {
+        if (!row.transferUserId) {
+          row.transferUserId = id
+        }
+      })
+    },
+    change(val, row) {
+      row.transferUserId = val
+    },
+    clear() {
+      this.item.forEach(row => {
+        row.transferUserId = ''
+      })
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.alert{
+  /deep/ .el-alert__content{
+    width: 100%;
+  }
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+  }
+}
+.content{
+  padding: 0 24px;
+  padding-top: 24px;
+}
+</style>

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

@@ -125,6 +125,7 @@
           </el-table-column>
           <el-table-column align='center'
                            width="250px"
+                           fixed="right"
                            label="操作">
             <template slot-scope="scope">
               <el-button @click="roleOperation('update', scope.row)"
@@ -136,9 +137,13 @@
               <el-button @click="onStaffOperation('LOCK_UNLOCK', scope.row)"
                          v-permission="'employee/employeeOperate'"
                          type="text">{{ scope.row.lockFlag == 1 ? '解冻' : '冻结' }}</el-button>
-              <el-button @click="onStaffOperation('DEMISSION', scope.row)"
+              <el-button @click="onStaffOperation('REINSTATE', scope.row)"
                          v-permission="'employee/employeeOperate'"
-                         type="text">{{ scope.row.demissionDate ? '复职' : '离职' }}</el-button>
+                         v-if="scope.row.demissionDate"
+                         type="text">复职</el-button>
+              <el-button @click="handover(scope.row)"
+                         v-if="!scope.row.demissionDate && permission('employee/level') && permission('employee/levelDetail')"
+                         type="text">离职</el-button>
             </template>
           </el-table-column>
         </el-table>
@@ -261,6 +266,18 @@
                    type="primary">确 定</el-button>
       </span>
     </el-dialog>
+    <el-dialog
+      title="工作交接"
+      :visible.sync="handoverVisible"
+      width="500px"
+    >
+      <handover
+        v-if="handoverVisible"
+        :detail="detail"
+        @close="handoverVisible = false"
+        @submited="getList"
+      />
+    </el-dialog>
     <el-dialog title="教务交接"
                width="400px"
                destroy-on-close
@@ -300,11 +317,13 @@
 </template>
 <script>
 import pagination from '@/components/Pagination/index'
+import { permission } from "@/utils/directivePage";
 import { queryEmployByOrganId, employeeOperate, getUserRole, employeeAdd, employeeUpdate, hasCourseGroupRelation, updateEducationTeacherId } from '@/api/systemManage'
 import { findEducationTeacher } from '@/api/specialSetting'
 import { findEducationUsers } from '@/api/buildTeam'
 import Tooltip from '@/components/Tooltip/index'
 import { isvalidPhone } from '@/utils/validate'
+import handover from './modals/handover'
 let validPhone = (rule, value, callback) => {
   if (!value) {
     callback(new Error('请输入电话号码'))
@@ -316,7 +335,7 @@ let validPhone = (rule, value, callback) => {
 }
 export default {
   name: 'staffManager',
-  components: { pagination, Tooltip },
+  components: { pagination, Tooltip, handover },
   data () {
     return {
       tableList: [],
@@ -333,6 +352,8 @@ export default {
         total: 0, // 总条数
         page_size: [10, 20, 40, 50] // 选择限制显示条数
       },
+      detail: null,
+      handoverVisible: false,
       roleStatus: false,
       formActionTitle: 'create',
       roleList: [], // 角色列表
@@ -375,7 +396,11 @@ export default {
     this.getRoleList()
   },
   methods: {
-
+    permission,
+    handover(row) {
+      this.detail = row
+      this.handoverVisible = true
+    },
     onBranchCheckAll () {
       this.form.organIdLists = []
 

+ 3 - 1
src/views/categroyManager/specialSetup/chargesList.vue

@@ -85,7 +85,9 @@
             </template>
           </el-table-column>
         </el-table>
-        <pagination :total="pageInfo.total"
+        <pagination
+        :saveKey="'chargesList'"
+        :total="pageInfo.total"
                     :page.sync="pageInfo.page"
                     :limit.sync="pageInfo.limit"
                     :page-sizes="pageInfo.page_size"

+ 1 - 0
src/views/categroyManager/specialSetup/courseTimerSetting.vue

@@ -94,6 +94,7 @@
         </el-table-column>
       </el-table>
       <pagination
+       :saveKey="'courseTimerSetting'"
         sync
         :total.sync="pageInfo.total"
         :page.sync="pageInfo.page"

+ 3 - 1
src/views/categroyManager/specialSetup/discountManage.vue

@@ -74,7 +74,9 @@
             </template>
           </el-table-column>
         </el-table>
-        <pagination sync :total.sync="pageInfo.total"
+        <pagination sync
+         :saveKey="'discountManage'"
+        :total.sync="pageInfo.total"
                     :page.sync="pageInfo.page"
                     :limit.sync="pageInfo.limit"
                     :page-sizes="pageInfo.page_size"

+ 4 - 1
src/views/categroyManager/specialSetup/jobTemplateSetting.vue

@@ -38,7 +38,10 @@
             </template>
           </el-table-column>
         </el-table>
-        <pagination :total="pageInfo.total"
+        <pagination
+        sync
+         :saveKey="'jobTemplateSetting'"
+        :total.sync="pageInfo.total"
                     :page.sync="pageInfo.page"
                     :limit.sync="pageInfo.limit"
                     :page-sizes="pageInfo.page_size"

+ 4 - 1
src/views/categroyManager/specialSetup/musicCourseFee.vue

@@ -87,7 +87,10 @@
             </template>
           </el-table-column>
         </el-table>
-        <pagination :total="pageInfo.total"
+        <pagination
+         :saveKey="'musicCourseFee'"
+         sync
+        :total.sync="pageInfo.total"
                     :page.sync="pageInfo.page"
                     :limit.sync="pageInfo.limit"
                     :page-sizes="pageInfo.page_size"

+ 4 - 1
src/views/categroyManager/specialSetup/typesManager.vue

@@ -23,7 +23,10 @@
             </template>
           </el-table-column>
         </el-table>
-        <pagination :total="pageInfo.total"
+        <pagination
+        save-key='typesManager'
+        sync
+        :total.sync="pageInfo.total"
                     :page.sync="pageInfo.page"
                     :limit.sync="pageInfo.limit"
                     :page-sizes="pageInfo.page_size"

+ 4 - 2
src/views/contentManager/components/activity.vue

@@ -77,7 +77,9 @@
           </template>
         </el-table-column>
       </el-table>
-      <pagination sync :total.sync="pageInfo.total"
+      <pagination
+      :saveKey="'contentActivity'"
+      sync :total.sync="pageInfo.total"
                   :page.sync="pageInfo.page"
                   :limit.sync="pageInfo.limit"
                   :page-sizes="pageInfo.page_size"
@@ -187,4 +189,4 @@ export default {
 .bannerImg {
   height: 60px;
 }
-</style>
+</style>

+ 4 - 2
src/views/contentManager/components/appPage.vue

@@ -88,7 +88,9 @@
           </template>
         </el-table-column>
       </el-table>
-      <pagination sync :total.sync="pageInfo.total"
+      <pagination
+       saveKey="contentAppPage"
+      sync :total.sync="pageInfo.total"
                   :page.sync="pageInfo.page"
                   :limit.sync="pageInfo.limit"
                   :page-sizes="pageInfo.page_size"
@@ -195,4 +197,4 @@ export default {
 .bannerImg {
   height: 60px;
 }
-</style>
+</style>

+ 4 - 2
src/views/contentManager/components/banner.vue

@@ -94,7 +94,9 @@
           </template>
         </el-table-column>
       </el-table>
-      <pagination sync :total.sync="pageInfo.total"
+      <pagination
+        saveKey="contentBanner"
+      sync :total.sync="pageInfo.total"
                   :page.sync="pageInfo.page"
                   :limit.sync="pageInfo.limit"
                   :page-sizes="pageInfo.page_size"
@@ -206,4 +208,4 @@ export default {
 .bannerImg {
   height: 60px;
 }
-</style>
+</style>

+ 4 - 2
src/views/contentManager/components/flashPage.vue

@@ -81,7 +81,9 @@
           </template>
         </el-table-column>
       </el-table>
-      <pagination sync :total.sync="pageInfo.total"
+      <pagination
+      saveKey="contentFlashPage"
+      sync :total.sync="pageInfo.total"
                   :page.sync="pageInfo.page"
                   :limit.sync="pageInfo.limit"
                   :page-sizes="pageInfo.page_size"
@@ -189,4 +191,4 @@ export default {
 .bannerImg {
   height: 60px;
 }
-</style>
+</style>

+ 4 - 2
src/views/contentManager/components/information.vue

@@ -81,7 +81,9 @@
           </template>
         </el-table-column>
       </el-table>
-      <pagination sync :total.sync="pageInfo.total"
+      <pagination
+      :saveKey="'contentInformation'"
+      sync :total.sync="pageInfo.total"
                   :page.sync="pageInfo.page"
                   :limit.sync="pageInfo.limit"
                   :page-sizes="pageInfo.page_size"
@@ -188,4 +190,4 @@ export default {
 .bannerImg {
   height: 60px;
 }
-</style>
+</style>

+ 4 - 2
src/views/contentManager/components/knowledge.vue

@@ -115,7 +115,9 @@
           </template>
         </el-table-column>
       </el-table>
-      <pagination sync :total.sync="pageInfo.total"
+      <pagination
+       saveKey="contentKnowledge"
+      sync :total.sync="pageInfo.total"
                   :page.sync="pageInfo.page"
                   :limit.sync="pageInfo.limit"
                   :page-sizes="pageInfo.page_size"
@@ -241,4 +243,4 @@ export default {
 .bannerImg {
   height: 60px;
 }
-</style>
+</style>

+ 4 - 2
src/views/contentManager/components/training.vue

@@ -77,7 +77,9 @@
           </template>
         </el-table-column>
       </el-table>
-      <pagination sync :total.sync="pageInfo.total"
+      <pagination
+       :saveKey="'contentTraining'"
+      sync :total.sync="pageInfo.total"
                   :page.sync="pageInfo.page"
                   :limit.sync="pageInfo.limit"
                   :page-sizes="pageInfo.page_size"
@@ -187,4 +189,4 @@ export default {
 .bannerImg {
   height: 60px;
 }
-</style>
+</style>

+ 1 - 0
src/views/evaluateManager/evaluateList.vue

@@ -150,6 +150,7 @@
         </el-table-column>
       </el-table>
       <pagination
+        save-key="commentManager-evaluateList"
         sync
         :total.sync="rules.total"
         :page.sync="rules.page"

+ 1 - 0
src/views/evaluateManager/networkList.vue

@@ -259,6 +259,7 @@
         </el-table-column>
       </el-table>
       <pagination
+       save-key="commentManager-networkList"
         sync
         :total.sync="rules.total"
         :page.sync="rules.page"

+ 9 - 7
src/views/evaluateManager/vipEvaluateList.vue

@@ -33,7 +33,7 @@
         </el-select>
       </el-form-item>
       <el-form-item>
-        <el-select
+        <!-- <el-select
           placeholder="指导老师"
           v-model="searchForm.teacherId"
           clearable
@@ -45,7 +45,8 @@
             :value="item.id"
             :key="index"
           ></el-option>
-        </el-select>
+        </el-select> -->
+           <remote-search :commit='"setTeachers"' v-model='searchForm.teacherId' />
       </el-form-item>
       <el-form-item>
         <el-select
@@ -205,6 +206,7 @@
         </el-table-column>
       </el-table>
       <pagination
+       save-key="commentManager-vipEvaluateList"
         sync
         :total.sync="rules.total"
         :page.sync="rules.page"
@@ -452,11 +454,11 @@ export default {
       }
 
       // 获取指导老师
-      getTeacher({}).then((res) => {
-        if (res.code == 200) {
-          this.teacherList = res.data;
-        }
-      });
+      // getTeacher({}).then((res) => {
+      //   if (res.code == 200) {
+      //     this.teacherList = res.data;
+      //   }
+      // });
       // 获取分部
       getEmployeeOrgan().then((res) => {
         if (res.code == 200) {

+ 9 - 4
src/views/resetTeaming/components/resetPayList.vue

@@ -1,7 +1,9 @@
 <!--  -->
 <template>
   <div class="m-core">
-    <el-form :inline="true"
+    <save-form :inline="true"
+    save-key="resetPayList"
+    @submit='getList'
              :model="searchForm">
       <el-form-item>
         <el-select placeholder="缴费类型"
@@ -17,10 +19,10 @@
 
       <el-form-item>
         <el-button type="danger"
-                   @click="getList">搜索</el-button>
+                   native-type="submit">搜索</el-button>
         <!-- <el-button @click="onReSet" type="primary">重置</el-button> -->
       </el-form-item>
-    </el-form>
+    </save-form>
     <div class="topWrap">
       <div class="newBand"
            @click="newUserPay"
@@ -149,7 +151,10 @@
           </template>
         </el-table-column>
       </el-table>
-      <pagination :total="rules.total"
+      <pagination
+      save-key="resetPayList"
+      sync
+      :total.sync="rules.total"
                   :page.sync="rules.page"
                   :limit.sync="rules.limit"
                   :page-sizes="rules.page_size"

+ 9 - 4
src/views/resetTeaming/components/resetPayListSchool.vue

@@ -1,7 +1,9 @@
 <!--  -->
 <template>
   <div class="m-core">
-    <el-form :inline="true"
+    <save-form :inline="true"
+    @submit='getList'
+    save-key='resetPayListSchool'
              :model="searchForm">
       <el-form-item>
         <el-select placeholder="缴费类型"
@@ -17,10 +19,10 @@
 
       <el-form-item>
         <el-button type="danger"
-                   @click="getList">搜索</el-button>
+                  native-type="submit">搜索</el-button>
         <!-- <el-button @click="onReSet" type="primary">重置</el-button> -->
       </el-form-item>
-    </el-form>
+    </save-form>
     <div class="topWrap">
       <div class="newBand"
            @click="newSchoolPay"
@@ -149,7 +151,10 @@
           </template>
         </el-table-column>
       </el-table>
-      <pagination :total="rules.total"
+      <pagination
+      save-key='resetPayListSchool'
+      sync
+      :total.sync="rules.total"
                   :page.sync="rules.page"
                   :limit.sync="rules.limit"
                   :page-sizes="rules.page_size"

+ 4 - 2
src/views/studentManager/components/studentCashout.vue

@@ -46,7 +46,9 @@
                          prop="withdrawNo">
         </el-table-column>
       </el-table>
-      <pagination :total="pageInfo.total"
+      <pagination
+      save-key='studentDetail-studentCashout'
+      :total.sync="pageInfo.total"
                   :page.sync="pageInfo.page"
                   :limit.sync="pageInfo.limit"
                   :page-sizes="pageInfo.page_size"
@@ -95,4 +97,4 @@ export default {
 }
 </script>
 <style lang="scss">
-</style>
+</style>

+ 4 - 1
src/views/studentManager/components/studentNetwork.vue

@@ -55,7 +55,10 @@
             </template>
           </el-table-column>
         </el-table>
-        <pagination :total="rules.total"
+        <pagination
+        sync
+        save-key='studentDetail-studentNetwork'
+        :total.sync="rules.total"
                     :page.sync="rules.page"
                     :limit.sync="rules.limit"
                     :page-sizes="rules.page_size"

+ 3 - 1
src/views/studentManager/components/studentOrder.vue

@@ -256,7 +256,9 @@
                 </el-table-column>
               </el-table>
               <pagination
-                :total="courseAccount.total"
+               save-key="studentDetail-studentOrder"
+               sync
+                :total.sync="courseAccount.total"
                 :page.sync="courseAccount.page"
                 :limit.sync="courseAccount.limit"
                 :page-sizes="courseAccount.page_size"

+ 1 - 0
src/views/studentManager/components/studentOutList.vue

@@ -75,6 +75,7 @@
         </el-table-column> -->
       </el-table>
       <pagination
+       save-key="studentDetail-studentOutList"
         sync
         :total.sync="pageInfo.total"
         :page.sync="pageInfo.page"

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

@@ -82,6 +82,7 @@
         </el-table-column>
       </el-table>
       <pagination
+       save-key="studentDetail-studentPayList"
         sync
         :total.sync="pageInfo.total"
         :page.sync="pageInfo.page"

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

@@ -239,6 +239,7 @@
         </el-table>
         <pagination
           sync
+           save-key='studentDetail-studentRecord'
           :total.sync="pageInfo.total"
           :page.sync="pageInfo.page"
           :limit.sync="pageInfo.limit"

+ 2 - 1
src/views/studentManager/components/studentVip.vue

@@ -99,6 +99,7 @@
         </el-table-column>
       </el-table>
       <pagination
+       save-key="studentDetail-studentVip"
       sync
         :total.sync="pageInfo.total"
         :page.sync="pageInfo.page"
@@ -154,7 +155,7 @@ export default {
     return {
       searchForm: {
         studentId: null,
-        classGroupName: null,
+        vipGroupName: null
       },
       checkIndex: null, // 选中的课程
       dialogTableVisible: false,

+ 1 - 0
src/views/teacherManager/teacherDetail/components/courseInfo.vue

@@ -87,6 +87,7 @@
         </el-table-column>
       </el-table>
       <pagination
+      save-key='teacherDetail-courseInfo'
       sync
         :total.sync="pageInfo.total"
         :page.sync="pageInfo.page"

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

@@ -87,6 +87,7 @@
         </el-table-column>
       </el-table>
       <pagination
+      save-key='teacherDetail-courseInfo1'
       sync
         :total.sync="pageInfo.total"
         :page.sync="pageInfo.page"

+ 5 - 2
src/views/teacherManager/teacherDetail/components/courseInfo2.vue

@@ -17,7 +17,10 @@
                          prop="subjectNames">
         </el-table-column>
       </el-table>
-      <pagination :total="pageInfo.total"
+      <pagination
+      save-key='teacherDetail-courseInfo2'
+      sync
+      :total.sync="pageInfo.total"
                   :page.sync="pageInfo.page"
                   :limit.sync="pageInfo.limit"
                   :page-sizes="pageInfo.page_size"
@@ -87,4 +90,4 @@ export default {
     margin-top: 20px;
   }
 }
-</style>
+</style>

+ 1 - 0
src/views/teacherManager/teacherDetail/components/leaveRecord.vue

@@ -63,6 +63,7 @@
         </el-table-column>
       </el-table>
       <pagination
+      save-key="teacherDetail-leaveRecord"
         sync
         :total.sync="pageInfo.total"
         :page.sync="pageInfo.page"

+ 1 - 0
src/views/teacherManager/teacherDetail/components/outCourseList.vue

@@ -88,6 +88,7 @@
         </el-table-column>
       </el-table>
       <pagination
+      save-key='teacherDetail-outCourseList'
         sync
         :total.sync="pageInfo.total"
         :page.sync="pageInfo.page"

+ 5 - 2
src/views/teacherManager/teacherDetail/components/serveStudentList.vue

@@ -35,7 +35,10 @@
                          align="right">
         </el-table-column>
       </el-table>
-      <pagination :total="pageInfo.total"
+      <pagination
+      save-key='teacherDetail-serveStudentList'
+      sync
+      :total.sync="pageInfo.total"
                   :page.sync="pageInfo.page"
                   :limit.sync="pageInfo.limit"
                   :page-sizes="pageInfo.page_size"
@@ -194,4 +197,4 @@ export default {
     margin-top: 20px;
   }
 }
-</style>
+</style>

+ 1 - 0
src/views/teacherManager/teacherDetail/components/settlement.vue

@@ -133,6 +133,7 @@
         </el-table-column>
       </el-table>
       <pagination
+      save-key='teacherDetail-settlement'
       sync
       :total.sync="pageInfo.total"
                   :page.sync="pageInfo.page"

+ 1 - 0
src/views/teacherManager/teacherDetail/components/teacherRecord.vue

@@ -127,6 +127,7 @@
           ></el-table-column>
         </el-table>
         <pagination
+         save-key="teacherDetail-record"
           sync
           :total.sync="pageInfo.total"
           :page.sync="pageInfo.page"

+ 1 - 0
src/views/teacherManager/teacherDetail/components/timerList.vue

@@ -86,6 +86,7 @@
                          label="备注"></el-table-column>
       </el-table>
       <pagination
+       save-key='teacherDetail-timerList'
       sync
       :total.sync="pageInfo.total"
                   :page.sync="pageInfo.page"

+ 1 - 1
src/views/teamBuild/components/soundSetComponents/chioseMusic.vue

@@ -25,7 +25,7 @@
           </el-select>
         </div>
         <div class="flexRow">
-          <p class="title">乐器选择方式:</p>
+          <p class="title">乐器提供方式:</p>
           <el-checkbox-group v-model="music.type" class="marginLeft10">
             <el-checkbox :disabled="basdisabled" label="GROUP"
               >团购</el-checkbox

+ 5 - 2
src/views/teamDetail/components/classList.vue

@@ -86,7 +86,10 @@
           </template>
         </el-table-column> -->
       </el-table>
-      <pagination :total="rules.total"
+      <pagination
+      sync
+      save-key='teamDetails-classList'
+      :total.sync="rules.total"
                   :page.sync="rules.page"
                   :limit.sync="rules.limit"
                   :page-sizes="rules.page_size"
@@ -271,4 +274,4 @@ export default {
 }
 </script>
 <style lang="scss" scope>
-</style>
+</style>

+ 2 - 0
src/views/teamDetail/components/courseList.vue

@@ -2,6 +2,7 @@
   <div class="cl-container">
     <!-- 搜索类型 -->
     <save-form :inline="true"
+    save-key='teamDetails-courseList'
              class="searchForm"
              ref='searchForm'
              :model="searchForm" @submit="search" @reset="onReSet">
@@ -178,6 +179,7 @@
         </el-table-column>
       </el-table>
       <pagination
+       save-key='teamDetails-courseList'
       sync
       :total.sync="rules.total"
                   :page.sync="rules.page"

+ 3 - 2
src/views/teamDetail/components/resetClass.vue

@@ -15,7 +15,7 @@
             @change="changeMixClass"
           >
             <el-option
-              v-for="(item, index) in classTypeList"
+              v-for="(item, index) in musicClassTypeList"
               :key="index"
               :label="item.label"
               :value="item.value"
@@ -503,7 +503,7 @@ import { queryEmployByOrganId } from "@/api/systemManage";
 import { diffTimerFormMinute, addTimerFormMinute } from "@/utils/date";
 import dayjs from "dayjs";
 import axios from "axios";
-import { classTimeList } from "@/utils/searchArray";
+import { classTimeList,musicClassTypeList } from "@/utils/searchArray";
 import viewStudentList from "./modals/view-student-list";
 import selectStudent from "./modals/select-student";
 import classroomSetting from "./modals/classroom-setting";
@@ -603,6 +603,7 @@ export default {
         { value: "HIGH_ONLINE", label: "线上基础技能班" },
         { value: "MUSIC_NETWORK", label: "乐团网管课" },
       ],
+      musicClassTypeList,
       // 基础技能班类型
       highTypeList: [
         { value: "HIGH", label: "基础技能班" },

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

@@ -256,6 +256,7 @@
         </el-table-column>
       </el-table>
       <pagination
+       save-key="teamDetails-studentList"
         sync
         :total.sync="rules.total"
         :page.sync="rules.page"

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

@@ -98,6 +98,7 @@
         </el-table-column> -->
       </el-table>
       <pagination
+      save-key="teamDetails-teacherList"
       sync
         :total.sync="rules.total"
         :page.sync="rules.page"

+ 132 - 0
src/views/teamDetail/teamClassList.vue

@@ -0,0 +1,132 @@
+<!--  -->
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      班级列表
+    </h2>
+    <div class="m-core">
+      <save-form
+        :inline="true"
+        :model="searchForm"
+        @submit="search"
+        @reset="onReSet"
+      >
+        <el-form-item>
+          <el-input
+            v-model.trim="searchForm.search"
+            clearable
+            @keyup.enter.native="search"
+            placeholder="请输入乐团编号"
+          ></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            class="multiple"
+            filterable
+            style="width: 180px !important"
+            v-model.trim="searchForm.organIdList"
+            clearable
+            placeholder="请选择分部"
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <!-- musicClassTypeList -->
+         <el-form-item >
+          <el-select
+            v-model.trim="searchForm.type"
+            clearable
+            filterable
+            @change="changeMixClass"
+          >
+            <el-option
+              v-for="(item, index) in musicClassTypeList"
+              :key="index"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button native-type="submit" type="primary">搜索</el-button>
+          <el-button native-type="reset" type="danger">重置</el-button>
+        </el-form-item>
+      </save-form>
+      <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+        >
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="分部"
+          ></el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import pagination from "@/components/Pagination/index";
+import load from "@/utils/loading";
+import { musicClassTypeList } from "@/utils/searchArray";
+export default {
+  components: { pagination },
+  data() {
+    return {
+      searchForm: {
+        search: null,
+        organIdList:'',
+        type:''
+      },
+      musicClassTypeList,
+      tableList: [],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    // 获取分部
+
+    this.init();
+  },
+  methods: {
+    init() {},
+    getList() {},
+    search() {
+      this.rules.page = 1;
+      this.getList();
+    },
+    onReSet() {},
+  },
+};
+</script>
+<style lang='scss' scoped>
+</style>

+ 1 - 0
src/views/vipClass/vipDetail/components/fnanceInfo.vue

@@ -94,6 +94,7 @@
       </el-table>
       <!-- 分页器 -->
       <pagination
+      save-key='vipDetail-fnanceInfo'
       sync
       :total.sync="rules.total"
                   :page.sync="rules.page"

+ 1 - 0
src/views/vipClass/vipDetail/components/teacherRecord.vue

@@ -174,6 +174,7 @@
       </el-table>
     </div>
     <pagination
+      save-key='vipDetail-record'
       sync
       :total.sync="rules.total"
       :page.sync="rules.page"

+ 141 - 62
src/views/vipClass/vipDetail/components/vipStudentList.vue

@@ -1,12 +1,18 @@
 <template>
   <div>
-    <div
-      class="newBand"
-      v-permission="'vipGroupManage/addVipGroupStudents'"
-      @click="addStudentList"
-    >
-      新增学员
+    <div class="btnWrap">
+      <el-button
+        v-permission="'vipGroupManage/addVipGroupStudents'"
+        @click="addStudentList"
+        type="primary"
+      >
+        新增学员
+      </el-button>
+      <el-button v-permission="'vipGroupManage/update'" @click="expireVisible = true"  type="primary">
+        有效期调整
+      </el-button>
     </div>
+
     <div class="tableWrap">
       <el-table
         :data="tableList"
@@ -52,26 +58,6 @@
         <el-table-column label="操作" align="center">
           <template slot-scope="scope">
             <div>
-              <!-- <el-popover placement="top"
-                          width="160"
-                          trigger="click"
-                          :ref="scope.$index">
-                <p>请输入退费金额</p>
-                <el-input style="margin:10px 0;"
-                          type="number"
-                          v-model.trim="scope.row.fee"></el-input>
-                <div style="text-align: right; margin-top: 20px">
-                  <el-button size="mini"
-                             type="text"
-                             @click="scope._self.$refs[scope.$index].doClose()">取消</el-button>
-                  <el-button type="primary"
-                             size="mini"
-                             @click="leaveSchool(scope)">确定</el-button>
-                </div>
-                <el-button type="text"
-                           slot="reference"
-                           @click="lookFee(scope)">退学</el-button>
-              </el-popover> -->
               <el-button
                 type="text"
                 v-if="
@@ -81,7 +67,6 @@
                 @click="lookFee(scope)"
                 >退学</el-button
               >
-              <!--   v-permission="'vipGroupManage/applyRefundForStudent'" -->
               <el-button
                 type="text"
                 v-if="scope.row.studentStatus == 0"
@@ -144,7 +129,9 @@
         <el-table-column prop="courseSalary" label="课程余额"></el-table-column>
       </el-table>
       <pagination
-        :total="rules.total"
+        save-key="vipDetail-vipStudentList"
+        sync
+        :total.sync="rules.total"
         :page.sync="rules.page"
         :limit.sync="rules.limit"
         :page-sizes="rules.page_size"
@@ -166,10 +153,19 @@
         :inline="true"
       >
         <el-form-item label="剩余课时">
-          <el-input disabled v-model.trim="adjustmentForm.count"></el-input>
+          <el-input
+            disabled
+            v-model.trim="adjustmentForm.count"
+            style="width: 200px !important"
+          ></el-input>
         </el-form-item>
         <el-form-item label="任课老师" prop="teacher">
-          <el-select v-model.trim="adjustmentForm.teacher" clearable filterable>
+          <el-select
+            v-model.trim="adjustmentForm.teacher"
+            clearable
+            filterable
+            style="width: 200px !important"
+          >
             <el-option
               v-for="(item, index) in teacherList"
               :key="index"
@@ -178,22 +174,7 @@
             ></el-option>
           </el-select>
         </el-form-item>
-        <!-- <br> -->
-        <!-- <el-form-item label="单课费用"
-                      prop="fee">
-          <el-input v-model.trim="adjustmentForm.fee"></el-input>
-        </el-form-item> -->
-        <!-- <el-form-item label="课程类型"
-                      prop="courseType">
-          <el-select clearable
-                     v-model.trim="adjustmentForm.courseType">
-            <el-option label="线上课"
-                       value="ONLINE"></el-option>
-            <el-option label="线下课"
-                       value="OFFLINE"></el-option>
-          </el-select>
-        </el-form-item> -->
-        <br />
+        <!-- <br /> -->
         <el-form-item label="排课起始时间" prop="courseTime">
           <el-date-picker
             v-model.trim="adjustmentForm.courseTime"
@@ -204,6 +185,21 @@
             placeholder="选择日期"
           >
           </el-date-picker>
+        </el-form-item>
+
+        <el-form-item label="有效期截止" prop="expireDate">
+          <el-date-picker
+            :disabled="true"
+            v-model.trim="adjustmentForm.expireDate"
+            :picker-options="pickerOptions"
+            style="width: 200px !important"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择日期"
+          >
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item>
           <el-checkbox
             style="margin-left: 10px"
             v-model.trim="adjustmentForm.checked"
@@ -225,8 +221,13 @@
             v-for="(item, index) in weekList"
             :key="index"
           >
-            <span>循环周期: </span>
-            <el-select v-model.trim="item.dayOfWeek" filterable clearable>
+            <span class="title">循环周期: </span>
+            <el-select
+              v-model.trim="item.dayOfWeek"
+              filterable
+              clearable
+              style="width: 200px !important"
+            >
               <el-option
                 v-for="(item, index) in weekDateList"
                 :key="index"
@@ -236,7 +237,7 @@
             </el-select>
             <span style="margin-left: 10px">开始时间</span>
             <el-time-select
-              style="margin-left: 10px"
+              style="margin-left: 10px; width: 100px"
               placeholder=""
               v-model.trim="item.startClassTime"
               :picker-options="{
@@ -261,10 +262,39 @@
         <el-button type="primary" @click="submieRecover">确 定</el-button>
       </div>
     </el-dialog>
+
+    <!-- 有效期调整 -->
+    <el-dialog title="有效期调整" width="400px" :visible.sync="expireVisible">
+      <el-form
+        :model="expireForm"
+        ref="expireForm"
+        :rules="expireRules"
+        label-position="right"
+        label-width="80px;"
+        :inline="true"
+      >
+        <el-form-item label="课程结束时间" prop="coursesExpireDate">
+          <el-date-picker
+            v-model.trim="expireForm.coursesExpireDate"
+            style="width: 200px !important"
+            type="date"
+            :picker-options="pickerOptions"
+            value-format="yyyy-MM-dd"
+            placeholder="选择日期"
+          ></el-date-picker>
+        </el-form-item>
+        <!-- <div style="padding-left: 15px; color: red;">课程结束时间不得晚于,{{ expireForm.tempCoursesExpireDate }}</div> -->
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="expireVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitExpireDate">确 定</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 <script>
 import pagination from "@/components/Pagination/index";
+import dayjs from "dayjs";
 import {
   findVipGroupStudents,
   leaveSchool,
@@ -275,11 +305,22 @@ import {
   getStudentPauseInfo,
   recoverForStudent,
   findTeacherWithVipGroupOrganAndSubject,
+  vipGroupManageUpdate,
 } from "@/api/vipSeting";
+import { permission } from "@/utils/directivePage";
 export default {
   components: { pagination },
   data() {
     return {
+      expireVisible: false,
+      expireForm: {
+        coursesExpireDate: "",
+      },
+      expireRules: {
+        coursesExpireDate: [
+          { required: true, message: "请选择课程结束时间", trigger: "blur" },
+        ],
+      },
       adjustmentVisible: false,
       tableList: [],
       id: "",
@@ -304,6 +345,8 @@ export default {
         courseType: "",
         fee: "",
         teacher: "",
+
+        expireDate: "",
       },
       adjustmentRules: {
         courseTime: [{ required: true, message: "请选择开始时间" }],
@@ -311,6 +354,8 @@ export default {
         courseType: [{ required: true, message: "请选择课程类型" }],
         fee: [{ required: true, message: "请输入费用" }],
         teacher: [{ required: true, message: "请选择老师" }],
+
+        expireDate: [{ required: true, message: "请输入有效期截止" }],
       },
       weekDateList: [
         { value: "1", label: "星期一" },
@@ -345,6 +390,10 @@ export default {
     this.__init();
   },
   methods: {
+    permission(str) {
+      console.log(permission(str));
+      return permission(str);
+    },
     __init() {
       let id = this.$route.query.id;
       this.id = id;
@@ -514,21 +563,13 @@ export default {
             // vip状态没暂停 不需要排课
             // 课程编号  学生编号
             const h = this.$createElement;
-            // `将按照当前剩余课时安排上课,排课截至时间, '提示',
-            /**
-             *
-             *     message: h( [
-                h("p", null, "将按照当前剩余课时安排上课"),
-                h("p", { style: "color: red" },),
-              ]),
-             */
             this.$msgbox({
               title: "提示",
-               message: h('p', null, [
-            h('p', null, '将按照当前剩余课时安排上课'),
-            h('span', null, `排课截至时间:`),
-            h('span',{ style: 'color: red' },`${res.data.expireDate}`)
-          ]),
+              message: h("p", null, [
+                h("p", null, "将按照当前剩余课时安排上课"),
+                // h("span", null, `排课截至时间:`),
+                // h("span", { style: "color: red" }, `${res.data.expireDate}`), 辜经理同意注释
+              ]),
               confirmButtonText: "确定",
               cancelButtonText: "取消",
               showCancelButton: true,
@@ -551,6 +592,7 @@ export default {
             this.adjustmentVisible = true;
             this.adjustmentForm.teacher = res.data.teacherId;
             this.adjustmentForm.count = `${res.data.totalCourseTimes}+${res.data.giveCourseTimes}`;
+            this.adjustmentForm.expireDate = res.data.expireDate;
           }
         }
       });
@@ -595,6 +637,7 @@ export default {
           obj.courseTimes = [];
           obj.courseTimes = this.weekList;
           obj.vipGroupId = this.id;
+          obj.expireDate = this.adjustmentForm.expireDate;
           recoverForStudent(obj).then((res) => {
             if (res.code == 200) {
               this.adjustmentVisible = false;
@@ -607,8 +650,44 @@ export default {
       });
       this.activeStudent;
     },
+    submitExpireDate() {
+      this.$refs.expireForm.validate((some) => {
+        if (some) {
+          vipGroupManageUpdate({
+            id: this.id,
+            coursesExpireDate: this.expireForm.coursesExpireDate,
+          }).then((res) => {
+            if (res.code == 200) {
+              this.$message.success("有效期修改成功");
+              this.expireVisible = false;
+              this.getStudents();
+            } else {
+              this.$message.error(res.msg);
+            }
+          });
+        } else {
+          return;
+        }
+      });
+    },
   },
 };
 </script>
 <style lang="scss" scoped>
+.title {
+  display: inline-block;
+  width: 108px;
+  text-align: right;
+  margin-right: 10px;
+}
+
+/deep/.el-input-number .el-input__inner {
+  text-align: left !important;
+}
+.btnWrap {
+  display: flex;
+  flex-direction: row;
+  justify-content: flex-start;
+  margin-bottom: 15px;
+}
 </style>