Pārlūkot izejas kodu

Merge branch '04/13classAddSound' into dev

mo 4 gadi atpakaļ
vecāks
revīzija
7b9d10e485
32 mainītis faili ar 1215 papildinājumiem un 766 dzēšanām
  1. 1 1
      src/components/filter-search/index.vue
  2. 0 1
      src/components/install.js
  3. 71 28
      src/components/select-all/index.vue
  4. 2 3
      src/views/HumanResources/form.vue
  5. 14 6
      src/views/arrearage-students/index.vue
  6. 8 6
      src/views/businessManager/orderManager/salesList.vue
  7. 179 145
      src/views/businessManager/shopManager/shopCategory.vue
  8. 313 233
      src/views/categroyManager/insideSetting/branchActiveOperation.vue
  9. 6 5
      src/views/categroyManager/insideSetting/staffManager.vue
  10. 7 7
      src/views/categroyManager/vipActiveList.vue
  11. 7 6
      src/views/categroyManager/vipNewActive.vue
  12. 2 2
      src/views/contentManager/components/activity.vue
  13. 3 3
      src/views/contentManager/components/advert.vue
  14. 2 2
      src/views/contentManager/components/appPage.vue
  15. 2 2
      src/views/contentManager/components/banner.vue
  16. 2 2
      src/views/contentManager/components/flashPage.vue
  17. 2 2
      src/views/contentManager/components/information.vue
  18. 2 2
      src/views/contentManager/components/knowledge.vue
  19. 2 2
      src/views/contentManager/components/training.vue
  20. 155 102
      src/views/main/abnormal/index.vue
  21. 199 126
      src/views/operateManager/serverIndexList.vue
  22. 4 4
      src/views/teacherManager/teacherOperation/components/teacherOperation.vue
  23. 3 3
      src/views/teamBuild/components/soundSetComponents/chioseAccessory.vue
  24. 3 3
      src/views/teamBuild/components/soundSetComponents/soundSetCore.vue
  25. 1 1
      src/views/teamBuild/components/teamSoundSet.vue
  26. 1 0
      src/views/teamDetail/componentClass/classCompound.vue
  27. 2 2
      src/views/teamDetail/components/modals/create-user-pay.vue
  28. 3 3
      src/views/teamDetail/components/modals/select-student.vue
  29. 2 2
      src/views/teamDetail/components/resetClass.vue
  30. 3 4
      src/views/teamDetail/teamClassList.vue
  31. 203 51
      src/views/teamDetail/teamCourseList.vue
  32. 11 7
      src/views/vipClass/vipList.vue

+ 1 - 1
src/components/filter-search/index.vue

@@ -38,7 +38,7 @@ for (const key in errorType) {
   }
 }
 
-console.log(typesByUrl)
+// console.log(typesByUrl)
 
 export default {
   name: 'filter-search',

+ 0 - 1
src/components/install.js

@@ -18,7 +18,6 @@ import autoHeight from '@/components/auto-height'
 import auth from '@/components/Auth'
 import filterSearch from '@/components/filter-search'
 import singeFileUpload from '@/components/singe-file-upload'
-
 export default {
   install(Vue) {
     Vue.component(saveform.name, saveform)

+ 71 - 28
src/components/select-all/index.vue

@@ -1,51 +1,94 @@
 <template>
-  <div class="select-all">
-    <el-select
-      multiple
-      clearable
-      filterable
-      collapse-tags
-      class="select"
-      v-bind="{...$attrs, ...$props}"
-      v-on:input="value => $emit('input', value)"
-      ref="select"
+  <div class="wrap">
+    <el-tooltip
+      v-if="isShow"
+      class="item"
+      effect="dark"
+      :content="labelStr"
+      placement="top"
+      ref="tooltip"
     >
-      <slot/>
-    </el-select>
-    <el-button @click="selectAll" class="btn">
-      全选
-    </el-button>
+      <div class="showDev"></div>
+    </el-tooltip>
+    <div class="select-all">
+      <el-select
+        multiple
+        clearable
+        filterable
+        collapse-tags
+        class="select"
+        v-bind="{ ...$attrs, ...$props }"
+        v-on:input="(value) => $emit('input', value)"
+        ref="select"
+      >
+        <slot />
+      </el-select>
+      <el-button @click="selectAll" class="btn" v-bind="{ ...$attrs }">
+        全选
+      </el-button>
+    </div>
   </div>
 </template>
 <script>
 export default {
-  name: 'select-all',
+  name: "select-all",
+  data() {
+    return {
+      labelStr: "",
+      isShow: false,
+    };
+  },
   mounted() {
-    // console.log(this)
+    const { selected } = this.$refs.select;
+    this.labelStr = selected.map((item) => item.label?item.label:item.value).join(",");
+    this.isShow = (this.$refs?.select?.disabled || false)&&this.labelStr.length>0;
   },
   methods: {
     selectAll() {
-      const { options } = this.$refs.select
-      const values = options.filter(item => !item.disabled && item.value).map(item => item.value)
-      this.$emit('input', values)
-    }
-  }
-}
+      const { options } = this.$refs.select;
+      const values = options
+        .filter((item) => !item.disabled && item.value)
+        .map((item) => item.value);
+      this.$emit("input", values);
+    },
+  },
+};
 </script>
+<style lang="scss">
+.el-tooltip__popper {
+  max-width: 300px;
+  line-height: 180%;
+}
+
+</style>
 <style lang="less" scoped>
-.select-all{
+.wrap {
+  position: relative;
+}
+
+.select-all {
   display: flex;
-  .select{
+  .select {
     flex: 1;
-    /deep/ .el-input__inner{
+    /deep/ .el-input__inner {
       border-radius: 4px 0 0 4px;
     }
   }
 }
-.btn{
+.btn {
   width: 50px;
-  padding: 10px;
+  padding: 0 10px;
   border-left: none;
   border-radius: 0 4px 4px 0;
+
+}
+.item {
+  width: 100%;
+  position: absolute;
+  z-index: 1000;
+  height: 40px;
+  .showDev {
+    width: 100%;
+  }
 }
 </style>

+ 2 - 3
src/views/HumanResources/form.vue

@@ -104,12 +104,11 @@
               <th class="description-label">声部</th>
               <td class="description-content">
                 <el-form-item prop="subjectIdList">
-                  <el-select
+                  <select-all
                     v-model.trim="form.subjectIdList"
                     clearable
                     filterable
                     multiple
-                    size="mini"
                     collapse-tags
                     placeholder='请选择声部'
                   >
@@ -119,7 +118,7 @@
                       :label="item.name"
                     >
                     </el-option>
-                  </el-select>
+                  </select-all>
                 </el-form-item>
               </td>
             </tr>

+ 14 - 6
src/views/arrearage-students/index.vue

@@ -19,21 +19,29 @@
           ></el-input>
         </el-form-item>
         <el-form-item>
-          <el-select
-            v-model.trim="searchForm.organIds"
+          <select-all  v-model.trim="searchForm.organIds"
             clearable
             filterable
             multiple
             collapse-tags
-            placeholder="请选择所属分部"
-          >
-            <el-option
+            placeholder="请选择所属分部">
+             <el-option
               v-for="(item, index) in selects.branchs"
               :key="index"
               :label="item.name"
               :value="item.id"
             ></el-option>
-          </el-select>
+          </select-all>
+          <!-- <el-select
+            v-model.trim="searchForm.organIds"
+            clearable
+            filterable
+            multiple
+            collapse-tags
+            placeholder="请选择所属分部"
+          > -->
+
+          <!-- </el-select> -->
         </el-form-item>
         <el-form-item>
           <el-select

+ 8 - 6
src/views/businessManager/orderManager/salesList.vue

@@ -38,21 +38,23 @@
           ></el-input>
         </el-form-item>
         <el-form-item>
-          <el-select
-            multiple
+          <select-all  multiple
             collapse-tags
             v-model="searchForm.organIdList"
             clearable
             filterable
-            placeholder="请选择所属分部"
-          >
-            <el-option
+            placeholder="请选择所属分部">
+              <el-option
               v-for="(item, index) in selects.branchs"
               :key="index"
               :label="item.name"
               :value="item.id"
             ></el-option>
-          </el-select>
+          </select-all>
+          <!-- <el-select
+          >
+
+          </el-select> -->
         </el-form-item>
         <el-form-item>
           <el-select

+ 179 - 145
src/views/businessManager/shopManager/shopCategory.vue

@@ -1,242 +1,276 @@
 
 <template>
-  <div class='m-container'>
+  <div class="m-container">
     <h2>
-      <div class="squrt"></div>商品分类管理
+      <div class="squrt"></div>
+      商品分类管理
     </h2>
     <div class="m-core">
-      <div class='newBand'
-           v-permission="'category/upset'"
-           @click="openTypes('create')">添加</div>
+      <div
+        class="newBand"
+        v-permission="'category/upset'"
+        @click="openTypes('create')"
+      >
+        添加
+      </div>
       <!-- 列表 -->
       <div class="tableWrap">
-        <el-table :data='tableList'
-                  :header-cell-style="{background:'#EDEEF0',color:'#444'}">
-          <el-table-column align='center'
-                           prop="name"
-                           label="分类名称">
+        <el-table
+          :data="tableList"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        >
+          <el-table-column align="center" prop="name" label="分类名称">
           </el-table-column>
-          <el-table-column align='center'
-                           label="声部属性">
+          <el-table-column align="center" label="声部属性">
             <template slot-scope="scope">
-              <overflow-text width="100%" :text="scope.row.subjectName | joinArray(',')"></overflow-text>
+              <overflow-text
+                width="100%"
+                :text="scope.row.subjectName | joinArray(',')"
+              ></overflow-text>
             </template>
           </el-table-column>
-          <el-table-column align='center'
-                           label="操作">
+          <el-table-column align="center" label="操作">
             <template slot-scope="scope">
-              <el-button @click="openTypes('update', scope.row)"
-                         v-permission="'category/upset'"
-                         type="text">修改</el-button>
-              <el-button @click="onTypesDelOpeation(scope.row)"
-                         v-permission="'category/del'"
-                         type="text">删除</el-button>
+              <el-button
+                @click="openTypes('update', scope.row)"
+                v-permission="'category/upset'"
+                type="text"
+                >修改</el-button
+              >
+              <el-button
+                @click="onTypesDelOpeation(scope.row)"
+                v-permission="'category/del'"
+                type="text"
+                >删除</el-button
+              >
             </template>
           </el-table-column>
         </el-table>
-        <pagination sync :total.sync="pageInfo.total"
-                    :page.sync="pageInfo.page"
-                    :limit.sync="pageInfo.limit"
-                    :page-sizes="pageInfo.page_size"
-                    @pagination="getList" />
+        <pagination
+          sync
+          :total.sync="pageInfo.total"
+          :page.sync="pageInfo.page"
+          :limit.sync="pageInfo.limit"
+          :page-sizes="pageInfo.page_size"
+          @pagination="getList"
+        />
       </div>
     </div>
-    <el-dialog :title="formTitle[formActionTitle]"
-               :visible.sync="typeStatus"
-               @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.trim="form.name"
-                    autocomplete="off"></el-input>
+    <el-dialog
+      :title="formTitle[formActionTitle]"
+      :visible.sync="typeStatus"
+      @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.trim="form.name" autocomplete="off"></el-input>
         </el-form-item>
-        <el-form-item label="声部属性"
-                      v-if="form.classGroupType != 'MIX'"
-                      prop="subjectIds"
-                      :label-width="formLabelWidth">
-          <el-select v-model.trim="form.subjectIds"
-                     clearable
-                     filterable
-                     multiple>
-            <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-form-item
+          label="声部属性"
+          v-if="form.classGroupType != 'MIX'"
+          prop="subjectIds"
+          :label-width="formLabelWidth"
+        >
+          <select-all
+            v-model.trim="form.subjectIds"
+            clearable
+            filterable
+            multiple
+          >
+            <!-- <el-select > -->
+            <el-option-group
+              v-for="group in subjectList"
+              :key="group.id"
+              :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>
+          </select-all>
+          <!-- </el-select> -->
         </el-form-item>
       </el-form>
-      <span slot="footer"
-            class="dialog-footer">
+      <span slot="footer" class="dialog-footer">
         <el-button @click="typeStatus = false">取 消</el-button>
-        <el-button type="primary"
-                   @click="onTypesSubmit('ruleForm')">确 定</el-button>
+        <el-button type="primary" @click="onTypesSubmit('ruleForm')"
+          >确 定</el-button
+        >
       </span>
     </el-dialog>
   </div>
 </template>
 <script>
-import pagination from '@/components/Pagination/index'
-import store from '@/store'
-import { subjectListTree } from '@/api/specialSetting'
-import { categoryListTree, categoryUpSet, categoryUpSetDel } from '@/api/businessManager'
+import pagination from "@/components/Pagination/index";
+import store from "@/store";
+import { subjectListTree } from "@/api/specialSetting";
+import {
+  categoryListTree,
+  categoryUpSet,
+  categoryUpSetDel,
+} from "@/api/businessManager";
 export default {
   components: { pagination },
-  name: 'shopCategory',
-  data () {
+  name: "shopCategory",
+  data() {
     return {
       tableList: [],
       subjectList: [], // 声部列表
-      formActionTitle: 'create',
+      formActionTitle: "create",
       formTitle: {
-        create: '添加商品分类',
-        update: '修改商品分类'
+        create: "添加商品分类",
+        update: "修改商品分类",
       },
       typeStatus: false, // 添加教学点
-      formLabelWidth: '120px',
+      formLabelWidth: "120px",
       form: {
         name: null, // 作业模块名称
-        subjectIds: []
+        subjectIds: [],
       },
       rules: {
-        name: [{ required: true, message: '请输入类型名称', trigger: 'blur' }],
-        subjectIds: [{ required: true, message: '请选择声部组合', trigger: 'change' }]
+        name: [{ required: true, message: "请输入类型名称", trigger: "blur" }],
+        subjectIds: [
+          { required: true, message: "请选择声部组合", trigger: "change" },
+        ],
       },
       pageInfo: {
         // 分页规则
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         total: 0, // 总条数
-        page_size: [10, 20, 40, 50] // 选择限制显示条数
-      }
-    }
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+    };
   },
-  mounted () {
-    this.getList()
-    this.getSubjectTree()
+  mounted() {
+    this.getList();
+    this.getSubjectTree();
   },
   methods: {
-    onTypesDelOpeation (row) {
-
+    onTypesDelOpeation(row) {
       this.$confirm("您确定删除该分类?", "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
-        type: "warning"
+        type: "warning",
       }).then(() => {
-        categoryUpSetDel({ id: row.id }).then(res => {
-          this.messageTips('删除', res)
-        })
+        categoryUpSetDel({ id: row.id }).then((res) => {
+          this.messageTips("删除", res);
+        });
       });
-
     },
-    onTypesSubmit (formName) { // 添加数据
+    onTypesSubmit(formName) {
+      // 添加数据
       this.$refs[formName].validate((valid) => {
         if (valid) {
-          if (this.formActionTitle == 'create') {
-            if (this.form.id) { // 判断有没有Id,如果有则删除
-              delete this.form.id
+          if (this.formActionTitle == "create") {
+            if (this.form.id) {
+              // 判断有没有Id,如果有则删除
+              delete this.form.id;
             }
-            categoryUpSet(this.form).then(res => {
-              this.messageTips('添加', res)
-            })
-          } else if (this.formActionTitle == 'update') {
-            categoryUpSet(this.form).then(res => {
-              this.messageTips('修改', res)
-            })
+            categoryUpSet(this.form).then((res) => {
+              this.messageTips("添加", res);
+            });
+          } else if (this.formActionTitle == "update") {
+            categoryUpSet(this.form).then((res) => {
+              this.messageTips("修改", res);
+            });
           }
         } else {
           return false;
         }
-      })
+      });
     },
 
-    messageTips (title, res) {
+    messageTips(title, res) {
       if (res.code == 200) {
-        this.$message.success(title + '成功')
-        this.typeStatus = false
-        this.getList()
+        this.$message.success(title + "成功");
+        this.typeStatus = false;
+        this.getList();
       } else {
-        this.$message.error(res.msg)
+        this.$message.error(res.msg);
       }
     },
-    getList () {
+    getList() {
       categoryListTree({
         delFlag: 0,
         rows: this.pageInfo.limit,
-        page: this.pageInfo.page
-      }).then(res => {
-        let result = res.data
+        page: this.pageInfo.page,
+      }).then((res) => {
+        let result = res.data;
         if (res.code == 200) {
-          result.rows.forEach(row => {
+          result.rows.forEach((row) => {
             let subjectname = [],
-              subjectIds = []
-            row.subjects.forEach(item => {
-              subjectname.push(item.name)
-              subjectIds.push(item.id)
-            })
-            row.subjectName = subjectname
-            row.subjectIds = subjectIds
-          })
-          this.tableList = result.rows
-          this.pageInfo.total = result.total
+              subjectIds = [];
+            row.subjects.forEach((item) => {
+              subjectname.push(item.name);
+              subjectIds.push(item.id);
+            });
+            row.subjectName = subjectname;
+            row.subjectIds = subjectIds;
+          });
+          this.tableList = result.rows;
+          this.pageInfo.total = result.total;
         }
-      })
+      });
     },
-    openTypes (type, row) {
-      this.typeStatus = true
-      this.formActionTitle = type
+    openTypes(type, row) {
+      this.typeStatus = true;
+      this.formActionTitle = type;
       // 修改的时候赋值
-      if (type == 'update') {
+      if (type == "update") {
         this.form = {
           id: row.id,
           name: row.name,
-          subjectIds: row.subjectIds
-        }
+          subjectIds: row.subjectIds,
+        };
       }
     },
-    onFormClose (formName) { // 关闭弹窗重置验证
+    onFormClose(formName) {
+      // 关闭弹窗重置验证
       this.form = {
         name: null, // 作业模块名称
-        subjectIds: []
-      }
-      this.$refs[formName].resetFields()
+        subjectIds: [],
+      };
+      this.$refs[formName].resetFields();
     },
-    getSubjectTree () { // 获取声部列表
+    getSubjectTree() {
+      // 获取声部列表
       subjectListTree({
         delFlag: 0,
-        rows: 9999
-      }).then(res => {
-        let result = res.data
+        rows: 9999,
+      }).then((res) => {
+        let result = res.data;
         if (res.code == 200) {
-          let tempArray = []
+          let tempArray = [];
           result.rows.forEach((item, index) => {
-            let subject = []
-            item.subjects.forEach(s => {
+            let subject = [];
+            item.subjects.forEach((s) => {
               subject.push({
                 value: s.id,
-                label: s.name
-              })
-            })
+                label: s.name,
+              });
+            });
 
             tempArray[index] = {
               label: item.name,
-              options: subject
-            }
-          })
-          this.subjectList = tempArray
+              options: subject,
+            };
+          });
+          this.subjectList = tempArray;
         }
-      })
-    }
-  }
-}
+      });
+    },
+  },
+};
 </script>
 <style lang="scss" scoped>
 /deep/.el-date-editor.el-input {

+ 313 - 233
src/views/categroyManager/insideSetting/branchActiveOperation.vue

@@ -1,150 +1,181 @@
 <template>
-  <div class='m-container'>
+  <div class="m-container">
     <h2>
-      <el-page-header @back="onCancel"
-                      :content="(pageType == 'create' ? '添加' : '修改') + '分部活动'"></el-page-header>
+      <el-page-header
+        @back="onCancel"
+        :content="(pageType == 'create' ? '添加' : '修改') + '分部活动'"
+      ></el-page-header>
     </h2>
     <div class="m-core">
-      <el-form :model="result"
-               :rules="rules"
-               ref="form"
-               label-width="120px">
-        <el-form-item label="活动名称"
-                      prop="name"
-                      style="width: 500px">
+      <el-form :model="result" :rules="rules" ref="form" label-width="120px">
+        <el-form-item label="活动名称" prop="name" style="width: 500px">
           <el-input v-model.trim="result.name"></el-input>
         </el-form-item>
-        <el-form-item prop="rewardMode"
-                      label="活动类型"
-                      style="width: 500px">
+        <el-form-item prop="rewardMode" label="活动类型" style="width: 500px">
           <el-radio-group v-model.trim="result.rewardMode">
             <el-radio label="STAIR">阶梯奖励</el-radio>
             <el-radio label="PER">累计奖励</el-radio>
           </el-radio-group>
         </el-form-item>
-        <el-form-item class="moreRule"
-                      style="margin-bottom: 0;">
+        <el-form-item class="moreRule" style="margin-bottom: 0">
           <span class="min">最小值</span>
           <span class="min">最大值</span>
           <span class="max">奖励金额</span>
         </el-form-item>
         <div class="moreRule">
-          <div class="moreRuleIn"
-               v-for="(domain, index) in result.domains"
-               :key="domain.key">
+          <div
+            class="moreRuleIn"
+            v-for="(domain, index) in result.domains"
+            :key="domain.key"
+          >
             <el-form-item :label="'梯度' + (index + 1)">
-              <el-input type="number"
-                        v-number
-                        :disabled="domain.disabled"
-                        @mousewheel.native.prevent
-                        v-model.trim="domain.min"></el-input>
+              <el-input
+                type="number"
+                v-number
+                :disabled="domain.disabled"
+                @mousewheel.native.prevent
+                v-model.trim="domain.min"
+              ></el-input>
             </el-form-item>
             <el-form-item>
-              <el-input type="number"
-                        @mousewheel.native.prevent
-                        v-number
-                        :disabled="domain.disabled"
-                        v-model.trim="domain.max"></el-input>
+              <el-input
+                type="number"
+                @mousewheel.native.prevent
+                v-number
+                :disabled="domain.disabled"
+                v-model.trim="domain.max"
+              ></el-input>
             </el-form-item>
             <el-form-item>
-              <el-input style="width: auto;"
-                        type="number"
-                        @mousewheel.native.prevent
-                        :disabled="domain.disabled"
-                        v-model.trim="domain.money"></el-input>
-              <el-button v-if="index != 0 && !domain.disabled"
-                         @click.prevent="removeDomain(result, domain)">删除</el-button>
+              <el-input
+                style="width: auto"
+                type="number"
+                @mousewheel.native.prevent
+                :disabled="domain.disabled"
+                v-model.trim="domain.money"
+              ></el-input>
+              <el-button
+                v-if="index != 0 && !domain.disabled"
+                @click.prevent="removeDomain(result, domain)"
+                >删除</el-button
+              >
             </el-form-item>
           </div>
-          <div class="el-form-item__error"
-               v-if="result.errorText">{{ result.errorText }}</div>
+          <div class="el-form-item__error" v-if="result.errorText">
+            {{ result.errorText }}
+          </div>
         </div>
         <el-form-item class="add">
-          <el-button icon="el-icon-plus"
-                     @click="addDomain(result)">新增梯度</el-button>
+          <el-button icon="el-icon-plus" @click="addDomain(result)"
+            >新增梯度</el-button
+          >
         </el-form-item>
 
-        <el-form-item prop="vipGroupCategoryIdList"
-                      label="课程类型"
-                      style="width: 500px">
-          <el-select style="width: 100% !important;"
-                     v-model.trim="result.vipGroupCategoryIdList"
-                     filterable
-                     clearable
-                     multiple
-                     placeholder="请选择">
-            <el-option v-for="item in selects.vipGroupCategory"
-                       :key="item.id"
-                       :label="item.name"
-                       :value="item.id.toString()"> </el-option>
-          </el-select>
+        <el-form-item
+          prop="vipGroupCategoryIdList"
+          label="课程类型"
+          style="width: 500px"
+        >
+          <select-all
+            style="width: 100% !important"
+            v-model.trim="result.vipGroupCategoryIdList"
+            filterable
+            clearable
+            multiple
+            placeholder="请选择"
+          >
+            <!-- <el-select > -->
+            <el-option
+              v-for="item in selects.vipGroupCategory"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id.toString()"
+            >
+            </el-option>
+          </select-all>
+          <!-- </el-select> -->
         </el-form-item>
 
-        <el-form-item prop="organId"
-                      label="所属分部"
-                      style="width: 500px">
-          <el-select style="width: 100% !important;"
-                     filterable
-                     clearable
-                     @change="onSubjectChange('search')"
-                     v-model.trim="result.organId"
-                     placeholder="请选择">
-            <el-option v-for="item in selects.branchs"
-                       :key="item.id"
-                       :label="item.name"
-                       :value="item.id.toString()"> </el-option>
+        <el-form-item prop="organId" label="所属分部" style="width: 500px">
+          <el-select
+            style="width: 100% !important"
+            filterable
+            clearable
+            @change="onSubjectChange('search')"
+            v-model.trim="result.organId"
+            placeholder="请选择"
+          >
+            <el-option
+              v-for="item in selects.branchs"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id.toString()"
+            >
+            </el-option>
           </el-select>
         </el-form-item>
 
-        <el-form-item prop="subjectIds"
-                      label="所属声部"
-                      style="width: 500px">
-          <el-select style="width: 100% !important;"
-                     filterable
-                     clearable
-                     multiple
-                     @change="onSubjectChange('search')"
-                     v-model.trim="result.subjectIds"
-                     placeholder="请选择">
-            <el-option v-for="(item, i) in selects.subjects"
-                         :key="i"
-                         :label="item.name"
-                         :value="item.id.toString()"></el-option>
-          </el-select>
+        <el-form-item prop="subjectIds" label="所属声部" style="width: 500px">
+          <select-all
+            style="width: 100% !important"
+            filterable
+            clearable
+            multiple
+            @change="onSubjectChange('search')"
+            v-model.trim="result.subjectIds"
+            placeholder="请选择"
+          >
+            <el-option
+              v-for="(item, i) in selects.subjects"
+              :key="i"
+              :label="item.name"
+              :value="item.id.toString()"
+            ></el-option>
+          </select-all>
         </el-form-item>
 
-        <el-form-item prop="teacherId"
-                      label="老师"
-                      style="width: 500px">
-          <el-select style="width: 80% !important;"
-                     v-model.trim="result.teacherId"
-                     filterable
-                     clearable
-                     multiple
-                     placeholder="请选择">
-            <el-option v-for="(item, index) in teacherList"
-                       :key="index"
-                       :label="item.label"
-                       :value="item.value.toString()"> </el-option>
-          </el-select>
-          <el-button @click="onCheckAll">全选</el-button>
+        <el-form-item prop="teacherId" label="老师" style="width: 500px">
+          <select-all
+            style="width: 100% !important"
+            v-model.trim="result.teacherId"
+            filterable
+            clearable
+            multiple
+            placeholder="请选择"
+          >
+            <el-option
+              v-for="(item, index) in teacherList"
+              :key="index"
+              :label="item.label"
+              :value="item.value.toString()"
+            >
+            </el-option>
+          </select-all>
+          <!-- <el-button @click="onCheckAll">全选</el-button> -->
         </el-form-item>
         <el-form-item>
           <el-button @click="resetForm">重置</el-button>
-          <el-button type="primary"
-                     @click="onSubmit('form')">立即{{ pageType == "create" ? '创建' : '修改' }}</el-button>
+          <el-button type="primary" @click="onSubmit('form')"
+            >立即{{ pageType == "create" ? "创建" : "修改" }}</el-button
+          >
         </el-form-item>
       </el-form>
     </div>
   </div>
 </template>
 <script>
-import { getEmployeeOrgan, getSoundTree } from '@/api/buildTeam'
-import { courseScheduleRewardsQuery, getUserRole, courseScheduleRewardsAdd, courseScheduleRewardsUpdate, findTeacherByOrganId } from '@/api/systemManage'
-import { vipGroupCategory } from "@/api/vipSeting"
+import { getEmployeeOrgan, getSoundTree } from "@/api/buildTeam";
+import {
+  courseScheduleRewardsQuery,
+  getUserRole,
+  courseScheduleRewardsAdd,
+  courseScheduleRewardsUpdate,
+  findTeacherByOrganId,
+} from "@/api/systemManage";
+import { vipGroupCategory } from "@/api/vipSeting";
 export default {
-  name: 'branchActiveOperation',
-  data () {
+  name: "branchActiveOperation",
+  data() {
     return {
       organId: null,
       pageType: this.$route.query.type,
@@ -157,224 +188,273 @@ export default {
         organId: null,
         teacherId: null,
         subjectIds: null,
-        courseScheduleType: 'VIP',
-        domains: [{
-          min: null,
-          max: null,
-          money: null,
-          disabled: false,
-          key: Date.now()
-        }],
-        errorText: null
+        courseScheduleType: "VIP",
+        domains: [
+          {
+            min: null,
+            max: null,
+            money: null,
+            disabled: false,
+            key: Date.now(),
+          },
+        ],
+        errorText: null,
       },
       rules: {
-        name: [{ required: true, message: '请输入活动名称', trigger: 'blur' }],
-        rewardMode: [{ required: true, message: '请选择活动类型', trigger: 'change' }],
-        vipGroupCategoryIdList: [{ type: 'array', required: true, message: '请选择课程类型', trigger: 'change' }],
-        organId: [{ required: true, message: '请选择所属分部', trigger: 'change' }],
-        subjectIds: [{ type: 'array', required: true, message: '请选择所属声部', trigger: 'change' }],
-        teacherId: [{ type: 'array', required: true, message: '请选择老师', trigger: 'change' }]
-      }
-    }
+        name: [{ required: true, message: "请输入活动名称", trigger: "blur" }],
+        rewardMode: [
+          { required: true, message: "请选择活动类型", trigger: "change" },
+        ],
+        vipGroupCategoryIdList: [
+          {
+            type: "array",
+            required: true,
+            message: "请选择课程类型",
+            trigger: "change",
+          },
+        ],
+        organId: [
+          { required: true, message: "请选择所属分部", trigger: "change" },
+        ],
+        subjectIds: [
+          {
+            type: "array",
+            required: true,
+            message: "请选择所属声部",
+            trigger: "change",
+          },
+        ],
+        teacherId: [
+          {
+            type: "array",
+            required: true,
+            message: "请选择老师",
+            trigger: "change",
+          },
+        ],
+      },
+    };
   },
-  mounted () {
-    this.__init()
+  mounted() {
+    this.__init();
   },
   methods: {
-    async __init () {
-      this.$refs.form.resetFields()
+    async __init() {
+      this.$refs.form.resetFields();
       // 获取类型
-      this.$store.dispatch('setVipGroupCategory')
+      this.$store.dispatch("setVipGroupCategory");
       // 获取分部
-      this.$store.dispatch('setBranchs')
+      this.$store.dispatch("setBranchs");
       // 获取声部
-      this.$store.dispatch('setSubjects')
+      this.$store.dispatch("setSubjects");
 
-      if (this.pageType == 'update') {
-        let courseScheduleRewards = await courseScheduleRewardsQuery({ id: this.id })
+      if (this.pageType == "update") {
+        let courseScheduleRewards = await courseScheduleRewardsQuery({
+          id: this.id,
+        });
         if (courseScheduleRewards.code == 200) {
-          let data = courseScheduleRewards.data
+          let data = courseScheduleRewards.data;
           this.$nextTick(() => {
-            this.result.organId = data.organId
-            this.result.subjectIds = data.subjectIds ? data.subjectIds.split(',') : data.subjectIds
-            this.onSubjectChange('update')
+            this.result.organId = data.organId;
+            this.result.subjectIds = data.subjectIds
+              ? data.subjectIds.split(",")
+              : data.subjectIds;
+            this.onSubjectChange("update");
             this.result = {
               id: data.id,
               name: data.name,
               rewardMode: data.rewardMode,
               organId: data.organId,
-              subjectIds: data.subjectIds ? data.subjectIds.split(',') : data.subjectIds,
-              vipGroupCategoryIdList: data.vipGroupCategoryIdList ? data.vipGroupCategoryIdList.split(',') : data.vipGroupCategoryIdList,
-              teacherId: data.teacherId ? data.teacherId.split(',') : data.teacherId,
+              subjectIds: data.subjectIds
+                ? data.subjectIds.split(",")
+                : data.subjectIds,
+              vipGroupCategoryIdList: data.vipGroupCategoryIdList
+                ? data.vipGroupCategoryIdList.split(",")
+                : data.vipGroupCategoryIdList,
+              teacherId: data.teacherId
+                ? data.teacherId.split(",")
+                : data.teacherId,
               courseScheduleType: data.courseScheduleType,
-              domains: data.rewardsRulesJson ?
-                JSON.parse(data.rewardsRulesJson) : [{
-                  min: null,
-                  max: null,
-                  money: null,
-                  disabled: false,
-                  key: Date.now()
-                }],
-              errorText: null
-            }
-          })
+              domains: data.rewardsRulesJson
+                ? JSON.parse(data.rewardsRulesJson)
+                : [
+                    {
+                      min: null,
+                      max: null,
+                      money: null,
+                      disabled: false,
+                      key: Date.now(),
+                    },
+                  ],
+              errorText: null,
+            };
+          });
         }
       } else {
-        this.resetForm()
+        this.resetForm();
       }
     },
-    async onSubjectChange (type) {
-      let organId = this.result.organId
-      let subject = this.result.subjectIds
+    async onSubjectChange(type) {
+      let organId = this.result.organId;
+      let subject = this.result.subjectIds;
       // 判断是否有分部和声部
-      if (subject.length <= 0 || !organId || organId == '') {
-        this.teacherList = []
-        this.result.teacherId = []
-        return
+      if (subject.length <= 0 || !organId || organId == "") {
+        this.teacherList = [];
+        this.result.teacherId = [];
+        return;
       }
-      let subjectIds = Object.assign([], subject).join(',')
-      await findTeacherByOrganId({ organId: organId, subjectIds: subjectIds, jobNature: 'FULL_TIME' }).then(res => {
+      let subjectIds = Object.assign([], subject).join(",");
+      await findTeacherByOrganId({
+        organId: organId,
+        subjectIds: subjectIds,
+        jobNature: "FULL_TIME",
+      }).then((res) => {
         if (res.code == 200) {
-          if (type != 'update') {
-            this.teacherList = []
-            this.result.teacherId = []
+          if (type != "update") {
+            this.teacherList = [];
+            this.result.teacherId = [];
           }
-          res.data.forEach(item => {
+          res.data.forEach((item) => {
             this.teacherList.push({
               label: item.realName,
-              value: item.id
-            })
-          })
+              value: item.id,
+            });
+          });
         }
-      })
+      });
     },
-    onCheckAll () { // 全选老师
+    onCheckAll() {
+      // 全选老师
       if (this.teacherList.length <= 0) {
-        return
+        return;
       }
-      this.result.teacherId = []
-      this.teacherList.forEach(item => {
-        this.result.teacherId.push(item.value.toString())
-      })
+      this.result.teacherId = [];
+      this.teacherList.forEach((item) => {
+        this.result.teacherId.push(item.value.toString());
+      });
     },
-    onSubmit (formName) {
+    onSubmit(formName) {
       this.$refs[formName].validate((valid) => {
-        let result = JSON.parse(JSON.stringify(this.result))
-        this.addDomain(result, true)
+        let result = JSON.parse(JSON.stringify(this.result));
+        this.addDomain(result, true);
         if (valid && !result.errorText) {
           // 如果奖励金额为空时,默认为0
-          result.domains.forEach(item => {
+          result.domains.forEach((item) => {
             if (!item.money) {
-              item.money = 0
+              item.money = 0;
             }
-          })
+          });
           let params = {
             organId: result.organId,
-            vipGroupCategoryIdList: result.vipGroupCategoryIdList.join(','),
-            teacherId: result.teacherId.join(','),
+            vipGroupCategoryIdList: result.vipGroupCategoryIdList.join(","),
+            teacherId: result.teacherId.join(","),
             courseScheduleType: result.courseScheduleType,
             rewardMode: result.rewardMode,
-            subjectIds: result.subjectIds.join(','),
+            subjectIds: result.subjectIds.join(","),
             rewardsRulesJson: JSON.stringify(result.domains),
-            name: result.name
-          }
-          if (this.pageType == 'update') {
-            params.id = result.id
-            courseScheduleRewardsUpdate(params).then(res => {
-              this.messageTips('修改', res)
-            })
-          } else if (this.pageType == 'create') {
+            name: result.name,
+          };
+          if (this.pageType == "update") {
+            params.id = result.id;
+            courseScheduleRewardsUpdate(params).then((res) => {
+              this.messageTips("修改", res);
+            });
+          } else if (this.pageType == "create") {
             // return false
-            courseScheduleRewardsAdd(params).then(res => {
-              this.messageTips('添加', res)
-            })
+            courseScheduleRewardsAdd(params).then((res) => {
+              this.messageTips("添加", res);
+            });
           }
         } else {
           return false;
         }
-      })
-
+      });
     },
-    messageTips (title, res) {
+    messageTips(title, res) {
       if (res.code == 200) {
         this.$message.success('修改成功')
         this.$store.dispatch('delVisitedViews', this.$route)
         this.$router.push({ path: '/operateManager/branchActiveManager/branchActive', query: { rules: this.pageInfo, searchForm: this.searchForm } })
       } else {
-        this.$message.error(res.msg)
+        this.$message.error(res.msg);
       }
     },
     onCancel () {
       this.$store.dispatch('delVisitedViews', this.$route)
       this.$router.push({ path: '/operateManager/branchActiveManager/branchActive', query: { rules: this.pageInfo, searchForm: this.searchForm } })
     },
-    resetForm () {
-      this.teacherList = []
+    resetForm() {
+      this.teacherList = [];
       this.result = {
         name: null,
         rewardMode: null,
         organId: null,
         subjectIds: [],
         teacherId: [],
-        courseScheduleType: 'VIP',
-        domains: [{
-          min: null,
-          max: null,
-          money: null,
-          disabled: false,
-          key: Date.now()
-        }],
-        errorText: null
-      }
-      this.$refs.form.resetFields()
+        courseScheduleType: "VIP",
+        domains: [
+          {
+            min: null,
+            max: null,
+            money: null,
+            disabled: false,
+            key: Date.now(),
+          },
+        ],
+        errorText: null,
+      };
+      this.$refs.form.resetFields();
     },
-    removeDomain (form, item) {
-      var index = form.domains.indexOf(item)
+    removeDomain(form, item) {
+      var index = form.domains.indexOf(item);
       if (index !== -1) {
-        form.domains.splice(index, 1)
+        form.domains.splice(index, 1);
         // 取消最后一个数据的禁用状态
-        form.domains[form.domains.length - 1].disabled = false
-        form.errorText = null
+        form.domains[form.domains.length - 1].disabled = false;
+        form.errorText = null;
       }
     },
-    addDomain (form, checked) {
+    addDomain(form, checked) {
       // debugger
       let domains = form.domains,
         singleLength = domains.length,
-        lastDate = domains[singleLength - 1] // 获取倒数一个对象
+        lastDate = domains[singleLength - 1]; // 获取倒数一个对象
       if (!lastDate.min) {
-        form.errorText = '最小值不能为空'
-        return
+        form.errorText = "最小值不能为空";
+        return;
       }
       if (singleLength <= 1 && parseInt(lastDate.min) <= 0) {
-        form.errorText = '最小值不能小于0'
-        return
-      } else if (singleLength > 1 && parseInt(lastDate.min) <= parseInt(domains[singleLength - 2].max)) {
-        form.errorText = '最小值不能小于或等于上一个梯度的最大值'
-        return
+        form.errorText = "最小值不能小于0";
+        return;
+      } else if (
+        singleLength > 1 &&
+        parseInt(lastDate.min) <= parseInt(domains[singleLength - 2].max)
+      ) {
+        form.errorText = "最小值不能小于或等于上一个梯度的最大值";
+        return;
       }
 
       if (!parseInt(lastDate.max)) {
-        form.errorText = '最大值不能为空'
-        return
+        form.errorText = "最大值不能为空";
+        return;
       } else if (parseInt(lastDate.max) <= parseInt(lastDate.min)) {
-        form.errorText = '最大值应大于该梯度的最小值'
-        return
+        form.errorText = "最大值应大于该梯度的最小值";
+        return;
       }
 
-      form.errorText = null
+      form.errorText = null;
       if (!checked) {
-        lastDate.disabled = true
+        lastDate.disabled = true;
         domains.push({
           min: null,
           max: null,
           disabled: false,
-          key: Date.now()
-        })
+          key: Date.now(),
+        });
       }
-    }
-  }
-}
+    },
+  },
+};
 </script>
 <style lang="scss" scoped>
 .el-button--primary {

+ 6 - 5
src/views/categroyManager/insideSetting/staffManager.vue

@@ -189,7 +189,7 @@
         <el-form-item label="角色分类"
                       prop="roleIds"
                       :label-width="formLabelWidth">
-          <el-select v-model.trim="form.roleIds"
+          <select-all v-model.trim="form.roleIds"
                      placeholder="请选择角色分类"
                      clearable
                      filterable
@@ -199,12 +199,13 @@
                        :key="item.value"
                        :label="item.label"
                        :value="item.value"></el-option>
-          </el-select>
+          </select-all>
         </el-form-item>
         <el-form-item label="所属部门"
                       prop="organIdLists"
                       :label-width="formLabelWidth">
-          <el-select style="width: calc(100% - 75px) !important;"
+                      <!-- style="width: calc(100% - 75px) !important;" -->
+          <select-all
                      filterable
                      clearable
                       placeholder="请选择部门"
@@ -215,8 +216,8 @@
                        :key="item.id"
                        :label="item.name"
                        :value="item.id"></el-option>
-          </el-select>
-          <el-button @click="onBranchCheckAll">全选</el-button>
+          </select-all>
+          <!-- <el-button @click="onBranchCheckAll">全选</el-button> -->
         </el-form-item>
         <el-form-item label="工作类型"
                       prop="jobNature"

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

@@ -195,7 +195,7 @@
     <el-dialog
       title="修改VIP/乐理课活动"
       width="650px"
-      :before-close="closeVipform"
+      v-if="dialogVisible"
       :visible.sync="dialogVisible"
     >
       <div>
@@ -208,12 +208,12 @@
         >
           <el-form-item label="活动名称" label-width="120px" prop="name">
             <el-input
-              style="width: 400px"
+
               v-model.trim="resetForm.name"
             ></el-input>
           </el-form-item>
           <el-form-item label="适用分部" label-width="120px" prop="organ">
-            <el-select
+            <select-all
               v-model.trim="resetForm.organ"
               filterable
               disabled
@@ -226,11 +226,11 @@
                 :label="item.name"
                 :value="item.id"
               ></el-option>
-            </el-select>
+            </select-all>
             <!-- <el-button @click="onCheckAllBranch">适用所有分部</el-button> -->
           </el-form-item>
           <el-form-item label="课程形式" label-width="120px" prop="stauts">
-            <el-select
+            <select-all
               v-model.trim="resetForm.stauts"
               filterable
               clearable
@@ -243,13 +243,13 @@
                 :value="item.id"
                 :label="item.name"
               ></el-option>
-            </el-select>
+            </select-all>
           </el-form-item>
           <el-form-item label="活动描述" label-width="120px" prop="desc">
             <el-input
               type="textarea"
               v-model.trim="resetForm.desc"
-              style="width: 400px"
+
               :rows="5"
               placeholder="请输入活动说明"
             ></el-input>

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

@@ -19,7 +19,8 @@
         </el-form-item>
         <el-form-item label="适用分部"
                       prop="organ">
-          <el-select v-model.trim="vipform.organ"
+          <select-all v-model.trim="vipform.organ"
+           style="width:400px"
                      multiple
                      filterable
                      @visible-change="$forceUpdate()"
@@ -29,13 +30,13 @@
                        :key="index"
                        :label="item.name"
                        :value="item.id"></el-option>
-          </el-select>
-          <el-button @click="onCheckAllBranch">适用所有分部</el-button>
+          </select-all>
+          <!-- <el-button @click="onCheckAllBranch">适用所有分部</el-button> -->
         </el-form-item>
         <el-form-item label="课程形式"
                       prop="stauts">
-          <el-select v-model.trim="vipform.stauts"
-
+          <select-all v-model.trim="vipform.stauts"
+                       style="width:400px"
                      @visible-change="$forceUpdate()"
                      clearable
                      multiple>
@@ -43,7 +44,7 @@
                        :key="item.id"
                        :value="item.id"
                        :label="item.name"></el-option>
-          </el-select>
+          </select-all>
         </el-form-item>
         <el-form-item label="活动描述"
                       prop="desc">

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

@@ -20,7 +20,7 @@
         </el-select>
       </el-form-item> -->
       <el-form-item prop="organIdList">
-        <el-select class="multiple" v-model="searchForm.organIdList"
+        <select-all class="multiple" v-model="searchForm.organIdList"
                    clearable
                    multiple
                    filterable
@@ -30,7 +30,7 @@
                     :key="index"
                     :label="item.name"
                     :value="item.id"></el-option>
-        </el-select>
+        </select-all>
       </el-form-item>
       <el-form-item>
         <el-button native-type="submit" type="danger">搜索</el-button>

+ 3 - 3
src/views/contentManager/components/advert.vue

@@ -10,7 +10,7 @@
              @submit="search"
              :model="searchForm">
       <el-form-item prop="organIdList">
-        <el-select class="multiple" clearable
+        <select-all class="multiple" clearable
                    filterable
                    collapse-tags
                    multiple
@@ -20,7 +20,7 @@
                     :key="index"
                     :label="item.name"
                     :value="item.id"></el-option>
-        </el-select>
+        </select-all>
       </el-form-item>
       <el-form-item>
         <el-button native-type="submit" type="danger">搜索</el-button>
@@ -196,4 +196,4 @@ export default {
 .bannerImg {
   height: 60px;
 }
-</style>
+</style>

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

@@ -10,7 +10,7 @@
              @submit="search"
              :model="searchForm">
       <el-form-item prop="organIdList">
-        <el-select class="multiple"
+        <select-all class="multiple"
                    v-model.trim="searchForm.organIdList" clearable
                    filterable
                    collapse-tags
@@ -20,7 +20,7 @@
                     :key="index"
                     :label="item.name"
                     :value="item.id"></el-option>
-        </el-select>
+        </select-all>
       </el-form-item>
       <el-form-item>
         <el-button native-type="submit" type="danger">搜索</el-button>

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

@@ -10,7 +10,7 @@
              @submit="search"
              :model="searchForm">
       <el-form-item prop="organIdList">
-        <el-select class="multiple" clearable
+        <select-all class="multiple" clearable
                    filterable
                    collapse-tags
                    multiple
@@ -20,7 +20,7 @@
                     :key="index"
                     :label="item.name"
                     :value="item.id"></el-option>
-        </el-select>
+        </select-all>
       </el-form-item>
       <el-form-item>
         <el-button native-type="submit" type="danger">搜索</el-button>

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

@@ -10,7 +10,7 @@
              @submit="search"
              :model="searchForm">
       <el-form-item prop="organIdList">
-        <el-select class="multiple" clearable
+        <select-all class="multiple" clearable
                    filterable
                    collapse-tags
                    multiple
@@ -20,7 +20,7 @@
                     :key="index"
                     :label="item.name"
                     :value="item.id"></el-option>
-        </el-select>
+        </select-all>
       </el-form-item>
       <el-form-item>
         <el-button native-type="submit" type="danger">搜索</el-button>

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

@@ -10,7 +10,7 @@
              @submit="search"
              :model="searchForm">
       <el-form-item prop="organIdList">
-        <el-select class="multiple" clearable
+        <select-all class="multiple" clearable
                    filterable
                    collapse-tags
                    multiple
@@ -20,7 +20,7 @@
                     :key="index"
                     :label="item.name"
                     :value="item.id"></el-option>
-        </el-select>
+        </select-all>
       </el-form-item>
       <el-form-item prop="subType">
         <el-select v-model="searchForm.subType"

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

@@ -10,7 +10,7 @@
              @submit="search"
              :model="searchForm">
       <el-form-item prop="organIdList">
-        <el-select class="multiple" clearable
+        <select-all class="multiple" clearable
                    filterable
                    collapse-tags
                    multiple
@@ -20,7 +20,7 @@
                     :key="index"
                     :label="item.name"
                     :value="item.id"></el-option>
-        </el-select>
+        </select-all>
       </el-form-item>
       <el-form-item prop="subType">
         <el-select v-model="searchForm.subType"

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

@@ -10,7 +10,7 @@
              @submit="search"
              :model="searchForm">
       <el-form-item prop="organIdList">
-        <el-select class="multiple" clearable
+        <select-all class="multiple" clearable
                    filterable
                    collapse-tags
                    multiple
@@ -20,7 +20,7 @@
                     :key="index"
                     :label="item.name"
                     :value="item.id"></el-option>
-        </el-select>
+        </select-all>
       </el-form-item>
       <el-form-item>
         <el-button native-type="submit" type="danger">搜索</el-button>

+ 155 - 102
src/views/main/abnormal/index.vue

@@ -1,6 +1,12 @@
 <template>
   <div class="container">
-    <save-form inline :model="search" @submit="FetchList" @reset="reset" saveKey="/main/main/abnormal">
+    <save-form
+      inline
+      :model="search"
+      @submit="FetchList"
+      @reset="reset"
+      saveKey="/main/main/abnormal"
+    >
       <el-form-item prop="organId">
         <el-select
           clearable
@@ -8,14 +14,17 @@
           v-model="search.organId"
           placeholder="请选择分部"
         >
-          <el-option v-for="(item,index) in selects.branchs"
+          <el-option
+            v-for="(item, index) in selects.branchs"
             :key="index"
             :label="item.name"
-            :value="item.id"></el-option>
+            :value="item.id"
+          ></el-option>
         </el-select>
       </el-form-item>
       <el-button native-type="submit" type="primary">搜索</el-button>
       <el-button native-type="reset" type="danger">重置</el-button>
+      <el-button type="primary" @click="exportAbnormal">导出</el-button>
     </save-form>
     <div class="tags">
       <el-badge
@@ -27,23 +36,40 @@
         <el-tag
           :effect="activeKey === item ? 'dark' : 'plain'"
           @click="changeTag(item)"
-        >{{keyNames[item].name}}</el-tag>
+          >{{ keyNames[item].name }}</el-tag
+        >
       </el-badge>
     </div>
-    <empty desc="暂无需要处理异常" v-if="!activeList.length"/>
-    <el-button @click="handle(item)"
-      style="width: 100%;color: #303133;margin-left: 0;"
+    <empty desc="暂无需要处理异常" v-if="!activeList.length" />
+    <el-button
+      @click="handle(item)"
+      style="width: 100%; color: #303133; margin-left: 0"
       v-else
       v-for="(item, index) in activeList"
       :key="index"
-      :disabled="(item[0].result && !item[0].result.length) || (!item[0].num)" type="text"
+      :disabled="(item[0].result && !item[0].result.length) || !item[0].num"
+      type="text"
     >
       <title-item
         :type="item[0].isError ? 'error' : 'warning'"
-        :data="item.map(title => ({name: title.desc, num: title.num, num2: title.num2, errorType:title.errorType}))"
+        :data="
+          item.map((title) => ({
+            name: title.desc,
+            num: title.num,
+            num2: title.num2,
+            errorType: title.errorType,
+          }))
+        "
       >
-        <span style="color: #14928A;" v-if='!errorType[item[0].errorType] || (errorType[item[0].errorType] && permission(errorType[item[0].errorType].permission))'>
-            立即处理<i class="el-icon-d-arrow-right"/>
+        <span
+          style="color: #14928a"
+          v-if="
+            !errorType[item[0].errorType] ||
+            (errorType[item[0].errorType] &&
+              permission(errorType[item[0].errorType].permission))
+          "
+        >
+          立即处理<i class="el-icon-d-arrow-right" />
         </span>
       </title-item>
     </el-button>
@@ -71,96 +97,110 @@
   </div>
 </template>
 <script>
-import { Searchs } from '@/helpers'
-import { getIndexError } from '@/views/main/api'
-import { createNotification } from '@/helpers/notification'
-import { errorType } from '@/views/main/constant'
-import { permission } from '@/utils/directivePage'
-import title from './title'
+import { Searchs } from "@/helpers";
+import { getIndexError } from "@/views/main/api";
+import { createNotification } from "@/helpers/notification";
+import { errorType } from "@/views/main/constant";
+import { permission } from "@/utils/directivePage";
+import title from "./title";
+import{Export}  from "@/utils/downLoadFile";
 const initSearch = {
-  organId: null
-}
+  organId: null,
+};
 export default {
   components: {
-    'title-item': title
+    "title-item": title,
   },
   data() {
     return {
       search: {
-        ...initSearch
+        ...initSearch,
       },
       listByType: {},
       infoByType: {},
       list: [],
-      errorType: errorType
-    }
+      errorType: errorType,
+    };
   },
   computed: {
     keyNames() {
-      const { status } = this.$store.state.app
+      const { status } = this.$store.state.app;
       return {
         MUSIC_PATROL: {
-          name: '乐团巡查',
+          name: "乐团巡查",
           num: status.musicPatrol || false,
         },
         STUDENT_INFO: {
-          name: '学员处理',
+          name: "学员处理",
           num: status.studentInfo || false,
         },
         TEACHER_INFO: {
-          name: '日常行政',
+          name: "日常行政",
           num: status.teacherInfo || false,
         },
-        ATTENDANCE_SERVE:{
-          name:'考勤及服务',
+        ATTENDANCE_SERVE: {
+          name: "考勤及服务",
           num: status.attendanceServe || false,
-        }
-      }
+        },
+      };
     },
     permissionTags() {
-      const url = 'getIndexErrData?errorType='
-      const permissions = ['MUSIC_PATROL', 'STUDENT_INFO', 'TEACHER_INFO','ATTENDANCE_SERVE']
-      return permissions.filter(item => {
-        return this.permission(url + item)
-      })
+      const url = "getIndexErrData?errorType=";
+      const permissions = [
+        "MUSIC_PATROL",
+        "STUDENT_INFO",
+        "TEACHER_INFO",
+        "ATTENDANCE_SERVE",
+      ];
+      return permissions.filter((item) => {
+        return this.permission(url + item);
+      });
     },
     activeKey() {
-      let key = ''
-      const { tag } = this.$route.query
+      let key = "";
+      const { tag } = this.$route.query;
       if (tag) {
-        key = tag
+        key = tag;
       } else if (this.permissionTags[0]) {
-        key = this.permissionTags[0]
+        key = this.permissionTags[0];
       }
-      return key
+      return key;
     },
     tags() {
-      const tags = this.list.map(item => ({name: item.desc, type: item.errorType, num: item.num}))
-      return tags
+      const tags = this.list.map((item) => ({
+        name: item.desc,
+        type: item.errorType,
+        num: item.num,
+      }));
+      return tags;
     },
     activeList() {
-
-      const list = this.listByType[this.activeKey] || []
-      return list
+      const list = this.listByType[this.activeKey] || [];
+      return list;
     },
   },
   mounted() {
-    this.FetchList()
-    this.$store.dispatch('setBranchs')
+    this.FetchList();
+    this.$store.dispatch("setBranchs");
   },
   methods: {
     permission,
     handle(item) {
       // 添加判断权限
-      if(errorType[item[0].errorType] && !this.permission(errorType[item[0].errorType].permission)) {
-        return
+      if (
+        errorType[item[0].errorType] &&
+        !this.permission(errorType[item[0].errorType].permission)
+      ) {
+        return;
       }
 
       // 单独对未缴费学员数
-      if(item[0].errorType == 'STUDENT_NOT_PAYMENT') {
-        item[0].query['result'] = item[0].result ? (item[0].result || []).join(',') : undefined
+      if (item[0].errorType == "STUDENT_NOT_PAYMENT") {
+        item[0].query["result"] = item[0].result
+          ? (item[0].result || []).join(",")
+          : undefined;
       }
-      new Searchs().removeByKey(item[0].url)
+      new Searchs().removeByKey(item[0].url);
       this.$router.push({
         path: item[0].url,
         query: {
@@ -168,85 +208,98 @@ export default {
           tag: this.$route.query.tag,
           filter_type: item[0].errorType,
           organId: this.search.organId || undefined,
-          [item[0].resultKey]: item[0].resultKey ? (item[0].result || []).join(',') : undefined
-        }
-      })
+          [item[0].resultKey]: item[0].resultKey
+            ? (item[0].result || []).join(",")
+            : undefined,
+        },
+      });
     },
     changeTag(type) {
       this.$router.replace({
         query: {
           ...this.$route.query,
-          tag: type
-        }
-      })
-      this.FetchList()
+          tag: type,
+        },
+      });
+      this.FetchList();
     },
     formatData(data) {
-      const list = {}
+      const list = {};
       for (const item of data) {
-        const row = errorType[item.errorType] || {}
-        const key = row.parent || item.errorType
+        const row = errorType[item.errorType] || {};
+        const key = row.parent || item.errorType;
         if (!list[key]) {
-          list[key] = []
+          list[key] = [];
         }
-        list[key].push(
-          {
-            ...item,
-            ...row,
-          }
-        )
-
+        list[key].push({
+          ...item,
+          ...row,
+        });
       }
-      return Object.values(list)
+      return Object.values(list);
     },
     async FetchList() {
       try {
         const res = await getIndexError({
           errorType: this.activeKey,
           ...this.search,
-        })
-        this.list = res.data.data
-        const data = {}
-        const info = {}
+        });
+        this.list = res.data.data;
+        const data = {};
+        const info = {};
         for (const item of this.list) {
-          info[item.errorType] = item
-          data[item.errorType] = this.formatData(item?.result || [])
+          info[item.errorType] = item;
+          data[item.errorType] = this.formatData(item?.result || []);
         }
-        this.infoByType = info
-        this.listByType = data
+        this.infoByType = info;
+        this.listByType = data;
       } catch (error) {}
     },
     reset() {
-      this.search = {...initSearch}
-      this.FetchList()
+      this.search = { ...initSearch };
+      this.FetchList();
     },
     send() {
       createNotification({
-        title: '测试发送通知',
-        body: '您有一条待处理通知,请及时处理',
+        title: "测试发送通知",
+        body: "您有一条待处理通知,请及时处理",
         onClick: () => {
-          this.$router.replace('/main/main')
-        }
-      })
-    }
-  }
-}
+          this.$router.replace("/main/main");
+        },
+      });
+    },
+    exportAbnormal() {
+      let params = this.search;
+      Export(
+        this,
+        {
+          method: "post",
+          url: "/api-web/export/exportIndexErrData",
+          params: this.$helpers.qs.stringify({
+            ...params
+          }),
+        },
+        "是否确认导出报表?"
+      );
+    },
+  },
+};
 </script>
 <style lang="less" scoped>
-  .tags{
-    margin-bottom: 20px;
-    >div{
-      margin-right: 20px;
-      cursor: pointer;
-    }
+.tags {
+  margin-bottom: 20px;
+  > div {
+    margin-right: 20px;
+    cursor: pointer;
   }
-  .container{
-    /deep/ .is-disabled {
-      .title{
-        >span{
-          color: #C0C4CC!important;
-        }
+}
+.container {
+  /deep/ .is-disabled {
+    .title {
+      > span {
+        color: #c0c4cc !important;
       }
     }
   }
+}
 </style>

+ 199 - 126
src/views/operateManager/serverIndexList.vue

@@ -3,110 +3,41 @@
   <div class="m-container">
     <h2>
       <div class="titleWrap">
-      <div class="squrt"></div>
-      服务指标
+        <div class="squrt"></div>
+        服务指标
       </div>
 
-      <el-button type="text" icon="el-icon-question"  @click="lookServerDetail" style="color:red">服务指标规则</el-button>
+      <el-button
+        type="text"
+        icon="el-icon-question"
+        @click="lookServerDetail"
+        style="color: red"
+        >服务指标规则</el-button
+      >
     </h2>
     <div class="m-core">
       <save-form
+      ref='searchForm'
         :inline="true"
         :model="searchForm"
         @submit="search"
         @reset="onReSet"
       >
         <el-form-item>
-          <el-input
-            v-model.trim="searchForm.search"
-            @keyup.enter.native="search"
-            clearable
-            placeholder="学生姓名"
-          ></el-input>
-        </el-form-item>
-        <el-form-item>
           <remote-search
             :commit="'setTeachers'"
             v-model="searchForm.teacherId"
           />
         </el-form-item>
-        <el-form-item prop="organId">
-          <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>
-        <el-form-item>
-          <el-select
-            placeholder="实际安排"
-            v-model="searchForm.actualExercisesNumIsAchieve"
-            clearable
-          >
-            <el-option label="符合预期" value="1"></el-option>
-            <el-option label="不符合预期" value="0"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-select
-            placeholder="提交次数"
-            v-model="searchForm.exercisesReplyNumIsAchieve"
-            clearable
-          >
-            <el-option label="符合预期" value="1"></el-option>
-            <el-option label="不符合预期" value="0"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-select
-            placeholder="评价次数"
-            v-model="searchForm.exercisesMessageNumIsAchieve"
-            clearable
-          >
-            <el-option label="符合预期" value="1"></el-option>
-            <el-option label="不符合预期" value="0"></el-option>
-          </el-select>
-        </el-form-item>
         <el-form-item>
-          <el-select
-            placeholder="及时评价"
-            v-model="searchForm.exercisesMessageTimelyNumIsAchieve"
-            clearable
-          >
-            <el-option label="符合预期" value="1"></el-option>
-            <el-option label="不符合预期" value="0"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-select
-            placeholder="是否有VIP课"
-            v-model="searchForm.existVipCourse"
-            clearable
-          >
-            <el-option label="是" value="1"></el-option>
-            <el-option label="否" value="0"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-select
-            placeholder="是否有付费网管课"
-            v-model="searchForm.existPracticeCourse"
+          <el-input
+            v-model.trim="searchForm.search"
+            @keyup.enter.native="search"
             clearable
-          >
-            <el-option label="是" value="1"></el-option>
-            <el-option label="否" value="0"></el-option>
-          </el-select>
+            placeholder="学生姓名"
+          ></el-input>
         </el-form-item>
-        <br />
+
         <el-form-item label="周次选择">
           <el-date-picker
             v-model.trim="searchForm.timer"
@@ -122,21 +53,14 @@
             @change="getWeekTime"
           ></el-date-picker>
         </el-form-item>
-        <el-form-item label="作业提交时间">
-          <el-date-picker
-            v-model.trim="searchForm.workTimer"
-            style="width: 400px"
-            type="daterange"
-            :picker-options="{
-              firstDayOfWeek: 1,
-            }"
-            value-format="yyyy-MM-dd"
-            range-separator="至"
-            start-placeholder="提交开始日期"
-            end-placeholder="提交结束日期"
-          ></el-date-picker>
-        </el-form-item>
+
         <el-form-item>
+          <el-button
+            type="primary"
+            icon="el-icon-circle-plus-outline"
+            @click="showMove = true"
+            >更多选项</el-button
+          >
           <el-button type="danger" native-type="submit">搜索</el-button>
           <el-button native-type="reset" type="primary">重置</el-button>
           <el-button
@@ -303,8 +227,8 @@
           只布置一次作业、统计一次服务指标(多乐团、多组VIP网管课除外)
         </p>
         <el-table
-         border
-         style="margin-top:30px"
+          border
+          style="margin-top: 30px"
           :data="infoList"
           :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
           :span-method="arraySpanMethod"
@@ -331,31 +255,59 @@
           ></el-table-column>
         </el-table>
         <div class="infoWrap">
-           <h4>其他情况:</h4>
-        <p>1.学员在 <span>多个乐团时</span> ,剩余课程中 <span>本周有声部课</span> 的乐团布置作业, <span>都有</span> 则都布置, <span>都没有</span>  则根据表格中的逻辑布置</p>
-        <p>2.学员存在 <span>多组VIP课</span> 时,若课程组 <span>老师相同</span> ,则仅布置一次作业(网管课同理)</p>
-        <p>3.学员存在 <span>多组VIP课</span> 时,若课程组 <span>老师不同,本周有课</span> 的VIP课程组布置作业,多个课程组本周都有课则布置多次(网管课同理)</p>
-        <p>4.学员存在 <span>多组VIP课</span> 时,若课程组 <span>老师不同,本周都没有课</span> ,则所有VIP老师  <span>都布置</span> 课外训练, <span>都统计</span> 服务指标</p>
+          <h4>其他情况:</h4>
+          <p>
+            1.学员在 <span>多个乐团时</span> ,剩余课程中
+            <span>本周有声部课</span> 的乐团布置作业,
+            <span>都有</span> 则都布置,
+            <span>都没有</span> 则根据表格中的逻辑布置
+          </p>
+          <p>
+            2.学员存在 <span>多组VIP课</span> 时,若课程组
+            <span>老师相同</span> ,则仅布置一次作业(网管课同理)
+          </p>
+          <p>
+            3.学员存在 <span>多组VIP课</span> 时,若课程组
+            <span>老师不同,本周有课</span>
+            的VIP课程组布置作业,多个课程组本周都有课则布置多次(网管课同理)
+          </p>
+          <p>
+            4.学员存在 <span>多组VIP课</span> 时,若课程组
+            <span>老师不同,本周都没有课</span> ,则所有VIP老师
+            <span>都布置</span> 课外训练, <span>都统计</span> 服务指标
+          </p>
         </div>
-           <div class="infoWrap">
-           <h4>课程调整:</h4>
-        <p>本周 <span>课程调整时</span> ,重新根据该学员的 <span>本周课程情况更新</span> 作业布置路径及服务指标 则根据表格中的逻辑布置</p>
+        <div class="infoWrap">
+          <h4>课程调整:</h4>
+          <p>
+            本周 <span>课程调整时</span> ,重新根据该学员的
+            <span>本周课程情况更新</span> 作业布置路径及服务指标
+            则根据表格中的逻辑布置
+          </p>
         </div>
-                   <div class="infoWrap">
-           <h4>服务指标:</h4>
-           <p>服务指标按 <span>周为单位</span> 统计</p>
-            <p><span>周六周日</span> 的服务指标 <span>延迟到下周二更新</span> 实际安排数据(即周日的作业课程,在周二23:59:59时前布置作业都算一次实际安排)</p>
+        <div class="infoWrap">
+          <h4>服务指标:</h4>
+          <p>服务指标按 <span>周为单位</span> 统计</p>
+          <p>
+            <span>周六周日</span> 的服务指标
+            <span>延迟到下周二更新</span>
+            实际安排数据(即周日的作业课程,在周二23:59:59时前布置作业都算一次实际安排)
+          </p>
         </div>
-          <div class="infoWrap">
-           <h4>服务指标开启/关闭:</h4>
-           <p>学员新增课程时,自动开启服务指标,</p>
-           <p>手动关闭服务指标的学员新增课程时,不会自动开启服务指标</p>
-           <p>学员退团、乐团关闭、VIP课程组结束、网管课课程组结束时,若学员不在任何【进行中】乐团【在读】,且无任何未开始课程(乐团课、VIP课、网管课),则关闭服务指标</p>
+        <div class="infoWrap">
+          <h4>服务指标开启/关闭:</h4>
+          <p>学员新增课程时,自动开启服务指标,</p>
+          <p>手动关闭服务指标的学员新增课程时,不会自动开启服务指标</p>
+          <p>
+            学员退团、乐团关闭、VIP课程组结束、网管课课程组结束时,若学员不在任何【进行中】乐团【在读】,且无任何未开始课程(乐团课、VIP课、网管课),则关闭服务指标
+          </p>
         </div>
-           <div class="infoWrap">
-           <h4>服务指标解释:</h4>
-          <p><span>若本周学员有多次服务指标则生成多条数据</span> </p>
-          <p>预期安排:本周内服务指标次数(即本周应该给该学员布置的作业次数)</p>
+        <div class="infoWrap">
+          <h4>服务指标解释:</h4>
+          <p><span>若本周学员有多次服务指标则生成多条数据</span></p>
+          <p>
+            预期安排:本周内服务指标次数(即本周应该给该学员布置的作业次数)
+          </p>
           <p>实际安排:本周通过服务指标作业布置路径给该学员布置作业的次数</p>
           <p>提交次数:本周学员按照作业布置路径提交作业的次数</p>
           <p>评价次数:本周老师评价通过作业布置路径提交的作业的次数</p>
@@ -367,6 +319,117 @@
         </div>
       </div>
     </el-dialog>
+    <el-dialog
+      title="更多选项"
+      :visible.sync="showMove"
+      v-if="showMove"
+      width="700px"
+    >
+      <el-form
+        :inline="true"
+        class="searchForm"
+        @submit="search"
+        @reset="onReSet"
+        ref="searchForm2"
+        :model.sync="searchForm"
+        label-width="120px"
+      >
+        <el-form-item prop="organId" label="分部">
+          <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>
+        <el-form-item label="实际安排">
+          <el-select
+            placeholder="实际安排"
+            v-model="searchForm.actualExercisesNumIsAchieve"
+            clearable
+          >
+            <el-option label="符合预期" value="1"></el-option>
+            <el-option label="不符合预期" value="0"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="提交次数">
+          <el-select
+            placeholder="提交次数"
+            v-model="searchForm.exercisesReplyNumIsAchieve"
+            clearable
+          >
+            <el-option label="符合预期" value="1"></el-option>
+            <el-option label="不符合预期" value="0"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="评价次数">
+          <el-select
+            placeholder="评价次数"
+            v-model="searchForm.exercisesMessageNumIsAchieve"
+            clearable
+          >
+            <el-option label="符合预期" value="1"></el-option>
+            <el-option label="不符合预期" value="0"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="及时评价">
+          <el-select
+            placeholder="及时评价"
+            v-model="searchForm.exercisesMessageTimelyNumIsAchieve"
+            clearable
+          >
+            <el-option label="符合预期" value="1"></el-option>
+            <el-option label="不符合预期" value="0"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="是否有VIP课">
+          <el-select
+            placeholder="是否有VIP课"
+            v-model="searchForm.existVipCourse"
+            clearable
+          >
+            <el-option label="是" value="1"></el-option>
+            <el-option label="否" value="0"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="有付费网管课">
+          <el-select
+            placeholder="是否有付费网管课"
+            v-model="searchForm.existPracticeCourse"
+            clearable
+          >
+            <el-option label="是" value="1"></el-option>
+            <el-option label="否" value="0"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="作业提交时间">
+          <el-date-picker
+            v-model.trim="searchForm.workTimer"
+            style="width: 400px"
+            type="daterange"
+            :picker-options="{
+              firstDayOfWeek: 1,
+            }"
+            value-format="yyyy-MM-dd"
+            range-separator="至"
+            start-placeholder="提交开始日期"
+            end-placeholder="提交结束日期"
+          ></el-date-picker>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="cancleMore">取 消</el-button>
+        <el-button type="primary" @click="okMore">确 定</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 
@@ -417,6 +480,7 @@ export default {
       },
       lookServer: false,
       infoList: infoList,
+      showMove: false,
       // imageIcon: require("@/assets/images/base/warning.png"),
     };
   },
@@ -524,6 +588,14 @@ export default {
       this.searchForm.timer.push(this.getNowDateAndSunday(nowTime));
       this.search();
     },
+    cancleMore() {
+      // this.$refs.searchForm2.resetFields()
+      this.showMove = false;
+    },
+    okMore() {
+      this.getList();
+      this.showMove = false;
+    },
 
     onExport() {
       let url = "/api-web/export/exercisesSituations";
@@ -591,6 +663,7 @@ export default {
     },
     search() {
       this.rules.page = 1;
+           this.$refs.searchForm.save(this.searchForm);
       this.getList();
     },
     getNowDateAndMonday(time) {
@@ -707,8 +780,8 @@ export default {
 .infoWrap {
   margin-top: 30px;
   span {
-    color:red;
-     font-weight: normal;
+    color: red;
+    font-weight: normal;
   }
 }
 .titleWrap {
@@ -717,8 +790,8 @@ export default {
   justify-content: flex-start;
   align-items: center;
 }
-.m-container{
-  h2{
+.m-container {
+  h2 {
     justify-content: space-between;
   }
 }

+ 4 - 4
src/views/teacherManager/teacherOperation/components/teacherOperation.vue

@@ -130,7 +130,7 @@
             </el-col>
             <el-col :span="12">
               <el-form-item label="流动范围" :label-width="formLabelWidth">
-                <el-select
+                <select-all
                   v-model.trim="topForm.flowOrganRange"
                   filterable
                   clearable
@@ -143,7 +143,7 @@
                     :label="item.label"
                     :value="item.value.toString()"
                   ></el-option>
-                </el-select>
+                </select-all>
               </el-form-item>
             </el-col>
           </el-row>
@@ -258,7 +258,7 @@
                 :rules="[{ required: true }]"
                 :label-width="formLabelWidth"
               >
-                <el-select
+                <select-all
                   :disabled="!topForm.organId"
                   v-model="subjectIds"
                   clearable
@@ -271,7 +271,7 @@
                     :label="item.name"
                     :value="item.id"
                   ></el-option>
-                </el-select>
+                </select-all>
               </el-form-item>
             </el-col>
             <el-col :span="12">

+ 3 - 3
src/views/teamBuild/components/soundSetComponents/chioseAccessory.vue

@@ -34,8 +34,8 @@ export default {
 <style lang="scss" scoped>
 .coreItemRow {
   padding-left: 20px;
-  height: 50px;
-  line-height: 50px;
+  // height: 50px;
+  // line-height: 50px;
   display: flex;
   flex-direction: row;
   align-items: center;
@@ -51,4 +51,4 @@ export default {
 .marginLeft10 {
   margin-left: 10px;
 }
-</style>
+</style>

+ 3 - 3
src/views/teamBuild/components/soundSetComponents/soundSetCore.vue

@@ -55,7 +55,7 @@
             />
             <div class="coreItemRow">
               <p class="title">教辅:</p>
-              <el-select
+              <select-all
                 style="width: 558px !important"
                 v-model="item.markChioseList"
                 :disabled="basdisabled"
@@ -80,7 +80,7 @@
                     >{{ item.groupPurchasePrice | moneyFormat }}元</span
                   >
                 </el-option>
-              </el-select>
+              </select-all>
             </div>
           </el-collapse-item>
         </el-collapse>
@@ -714,7 +714,7 @@ export default {
 }
 .coreItemRow {
   padding: 0 20px;
-  line-height: 50px;
+  // line-height: 50px;
   display: flex;
   flex-direction: row;
   align-items: center;

+ 1 - 1
src/views/teamBuild/components/teamSoundSet.vue

@@ -226,7 +226,7 @@ export default {
 }
 .coreItemRow {
   padding: 0 20px;
-  line-height: 50px;
+  // line-height: 50px;
   display: flex;
   flex-direction: row;
   align-items: center;

+ 1 - 0
src/views/teamDetail/componentClass/classCompound.vue

@@ -190,6 +190,7 @@ export default {
       this.$emit("cancleCompound", row);
     },
     clearCom() {
+      this.radio = "";
       this.$emit("clearCom");
     },
     async submitClass() {

+ 2 - 2
src/views/teamDetail/components/modals/create-user-pay.vue

@@ -42,7 +42,7 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="临时班">
-            <el-select
+            <select-all
               v-model.trim="form.snapClass"
               filterable
               clearable
@@ -54,7 +54,7 @@
                 :value="item.id"
                 :label="item.name"
               ></el-option>
-            </el-select>
+            </select-all>
           </el-form-item>
         </el-col>
       </el-row>

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

@@ -78,9 +78,9 @@
           </el-form-item>
         </el-col>
         <!-- :offset="showName ? 4 : 0" -->
-        <el-col :span="10" >
+        <el-col :span="12" >
           <el-form-item label="声部" style="margin-right: 0;" prop="sound"  :rules="(isOnlyChangeUser||activeType == 'MUSIC_NETWORK')?null:[{ required: true, message: '请选择声部',trigger: 'blur' }]">
-            <el-select
+            <select-all
               v-model="form.sound"
               style="width: 100%"
               clearable
@@ -95,7 +95,7 @@
                 :label="item.name"
                 :value="item.id"
               ></el-option>
-            </el-select>
+            </select-all>
           </el-form-item>
         </el-col>
       </el-row>

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

@@ -472,7 +472,7 @@
             newClassForm.type == 'HIGH'
           "
         >
-          <el-select
+          <select-all
             v-model.trim="newClassForm.memo"
             multiple
             clearable
@@ -485,7 +485,7 @@
               :label="item.name"
               :value="item.id"
             ></el-option>
-          </el-select>
+          </select-all>
         </el-form-item>
         <el-form-item
           label="网络教室声部"

+ 3 - 4
src/views/teamDetail/teamClassList.vue

@@ -22,11 +22,10 @@
           ></el-input>
         </el-form-item>
         <el-form-item prop="organIdList">
-          <el-select
+          <select-all
             class="multiple"
             filterable
             multiple
-            style="width: 180px !important"
             v-model.trim="searchForm.organIdList"
             clearable
             placeholder="请选择分部"
@@ -37,7 +36,7 @@
               :label="item.name"
               :value="item.id"
             ></el-option>
-          </el-select>
+          </select-all>
         </el-form-item>
         <el-form-item>
           <el-select
@@ -225,7 +224,7 @@
     </div>
     <classCompound
       :compoundList="compoundList"
-      v-if="permission('classGroup/spanGroupMergeClassSplitClassAffirm')"
+      v-if="permission('classGroup/spanGroupMergeClassSplitClassAffirm')&&compoundList.length>0"
       @clearCom="clearCom"
       @getList="getList"
       @cancleCompound="cancleCompound"

+ 203 - 51
src/views/teamDetail/teamCourseList.vue

@@ -29,7 +29,7 @@
             placeholder="课程编号"
           />
         </el-form-item>
-        <el-form-item>
+        <!-- <el-form-item>
           <el-input
             v-model.trim="searchForm.search"
             clearable
@@ -50,27 +50,14 @@
               :label="item.name"
             ></el-option>
           </el-select>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item>
           <remote-search
             :commit="'setTeachers'"
             v-model="searchForm.teacherIdList"
           />
-          <!-- <el-select
-            v-model.trim="searchForm.teacherIdList"
-            clearable
-            filterable
-            placeholder="请选择老师"
-          >
-            <el-option
-              v-for="(item, index) in selects.teachers"
-              :key="index"
-              :value="item.id"
-              :label="item.realName"
-            ></el-option>
-          </el-select> -->
         </el-form-item>
-        <el-form-item>
+        <!-- <el-form-item>
           <el-select
             class="multiple"
             v-model.trim="searchForm.organIdList"
@@ -100,7 +87,7 @@
               :label="item.label"
             ></el-option>
           </el-select>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item>
           <el-select
             v-model.trim="searchForm.courseType"
@@ -116,7 +103,7 @@
             ></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item>
+        <!-- <el-form-item>
           <el-select
             v-model.trim="searchForm.teachMode"
             clearable
@@ -126,7 +113,7 @@
             <el-option label="线上课" value="ONLINE"></el-option>
             <el-option label="线下课" value="OFFLINE"></el-option>
           </el-select>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item>
           <el-select
             v-model.trim="searchForm.courseStatus"
@@ -139,7 +126,7 @@
             <el-option label="已结束" value="OVER"></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item>
+        <!-- <el-form-item>
           <el-select
             v-model.trim="searchForm.mergeCourseType"
             clearable
@@ -179,7 +166,7 @@
             <el-option label="是" value="1"></el-option>
             <el-option label="否" value="0"></el-option>
           </el-select>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item>
           <el-date-picker
             v-model.trim="searchForm.timer"
@@ -193,7 +180,7 @@
             }"
           ></el-date-picker>
         </el-form-item>
-        <el-form-item>
+        <!-- <el-form-item>
           <el-date-picker
             v-model.trim="searchForm.creatTimer"
             type="daterange"
@@ -205,29 +192,25 @@
               firstDayOfWeek: 1,
             }"
           ></el-date-picker>
-        </el-form-item>
-        <el-row type="flex" justify="space-around">
-          <el-col>
-            <el-button native-type="submit" type="primary">搜索</el-button>
-            <el-button native-type="reset" type="danger">重置</el-button>
-            <auth auths="export/superFindCourseSchedules">
-              <el-button @click="onCourseExport" type="primary"
-                >导出课表</el-button
-              >
-            </auth>
-            <auth auths="courseSchedule/batchDelete?page=teamCourseList">
-              <el-button
-                @click="removeCourse"
-                :disabled="!deleteList.length > 0"
-                type="primary"
-                >批量删除</el-button
-              >
-            </auth>
-          </el-col>
-        </el-row>
+        </el-form-item> -->
+        <el-button
+          type="primary"
+          icon="el-icon-circle-plus-outline"
+          @click="showMove = true"
+          >更多选项</el-button
+        >
+        <el-button native-type="submit" type="primary">搜索</el-button>
+        <el-button native-type="reset" type="danger">重置</el-button>
+
+        <el-button
+          v-permission="'export/superFindCourseSchedules'"
+          @click="onCourseExport"
+          type="primary"
+          >导出课表</el-button
+        >
       </save-form>
       <!-- 列表 -->
-      <div class="tableWrap" style="margin-top: 20px">
+      <div class="tableWrap">
         <el-table
           :data="tableList"
           ref="tableList"
@@ -237,10 +220,7 @@
           row-key="id"
         >
           >
-          <el-table-column
-            type="selection"
-            width="55"
-          ></el-table-column>
+          <el-table-column type="selection" width="55"></el-table-column>
           <el-table-column
             align="center"
             prop="organName"
@@ -653,6 +633,168 @@
         :address="maskForm.school.address"
       />
     </el-dialog>
+    <el-dialog
+      title="更多选项"
+      :visible.sync="showMove"
+      v-if="showMove"
+      width="700px"
+    >
+      <el-form
+        :inline="true"
+        class="searchForm"
+        @submit="search"
+        @reset="reset"
+        ref="searchForm2"
+        :model.sync="searchForm"
+        label-width="120px"
+      >
+        <el-form-item label="课程组编号/名称" prop="search">
+          <el-input
+          style="width:180px"
+            v-model.trim="searchForm.search"
+            clearable
+            placeholder="课程组编号/课程名称"
+          />
+        </el-form-item>
+        <el-form-item label="教学点" prop="schoolId">
+          <el-select
+             style="width:180px"
+            v-model.trim="searchForm.schoolId"
+            clearable
+            filterable
+            placeholder="请选择教学点"
+          >
+            <el-option
+              v-for="(item, index) in selects.schools"
+              :key="index"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="分部" prop="organIdList">
+          <el-select
+             style="width:180px"
+            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>
+        <el-form-item label="课程组类型" prop="groupType">
+          <el-select
+             style="width:180px"
+            v-model.trim="searchForm.groupType"
+            clearable
+            filterable
+            placeholder="课程组类型"
+          >
+            <el-option
+              v-for="item in courseListType"
+              :key="item.value"
+              :value="item.value"
+              :label="item.label"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="教学模式" prop="teachMode">
+          <el-select
+             style="width:180px"
+            v-model.trim="searchForm.teachMode"
+            clearable
+            filterable
+            placeholder="教学模式"
+          >
+            <el-option label="线上课" value="ONLINE"></el-option>
+            <el-option label="线下课" value="OFFLINE"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="课程状态" prop="courseStatus">
+          <el-select
+             style="width:180px"
+            v-model.trim="searchForm.courseStatus"
+            clearable
+            filterable
+            placeholder="课程状态"
+          >
+            <el-option label="未开始" value="NOT_START"></el-option>
+            <el-option label="进行中" value="UNDERWAY"></el-option>
+            <el-option label="已结束" value="OVER"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="合并课类型" prop="mergeCourseType">
+          <el-select
+             style="width:180px"
+            v-model.trim="searchForm.mergeCourseType"
+            clearable
+            filterable
+            placeholder="合并课程类型"
+          >
+            <el-option
+              v-for="(item, index) in mergeCourseTypeOptions"
+              :key="index"
+              :value="item.value"
+              :label="item.label"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="老师类型" prop="teachType">
+          <el-select
+             style="width:180px"
+            v-model.trim="searchForm.teachType"
+            clearable
+            filterable
+            placeholder="老师类型"
+          >
+            <el-option
+              v-for="item in workTypeOptions"
+              :key="item.label"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="是否点名" prop="isCallNames">
+          <el-select
+             style="width:180px"
+            v-model.trim="searchForm.isCallNames"
+            clearable
+            filterable
+            placeholder="是否点名"
+          >
+            <el-option label="是" value="1"></el-option>
+            <el-option label="否" value="0"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="创建日期" prop="creatTimer">
+          <el-date-picker
+            v-model.trim="searchForm.creatTimer"
+            type="daterange"
+            value-format="yyyy-MM-dd"
+            range-separator="-"
+            start-placeholder="创建开始日期"
+            end-placeholder="创建结束日期"
+            :picker-options="{
+              firstDayOfWeek: 1,
+            }"
+          ></el-date-picker>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="cancleMore">取 消</el-button>
+        <el-button type="primary" @click="okMore">确 定</el-button>
+      </span>
+    </el-dialog>
+    <!-- showMove -->
+
     <addCompound
       ref="addCompound"
       :compoundList="deleteList"
@@ -746,6 +888,7 @@ export default {
       deleteList: [],
       isMainGo: false,
       isDetele: false,
+      showMove: false,
     };
   },
   components: {
@@ -816,7 +959,7 @@ export default {
       if (query.start || query.end) {
         this.searchForm.timer = [query.start, query.end];
       } else {
-        this.searchForm.timer = []
+        this.searchForm.timer = [];
       }
     },
     permission(str, parent) {
@@ -873,6 +1016,7 @@ export default {
     },
     search() {
       this.rules.page = 1;
+      console.log(this.searchForm);
       this.$refs.searchForm.save(this.searchForm);
       this.getList();
     },
@@ -1051,6 +1195,14 @@ export default {
         })
         .catch(() => {});
     },
+    cancleMore(){
+      // this.$refs.searchForm2.resetFields()
+      this.showMove = false
+    },
+    okMore(){
+      this.getList()
+      this.showMove = false
+    },
     // addCompound(row) {
     //   this.compoundList.push(row);
     //   this.compoundList = [...new Set(this.compoundList)];
@@ -1136,9 +1288,9 @@ export default {
               return tableIdList.indexOf(item.id) == -1;
             }
           );
-            if (this.deleteList.length <= 0) {
-          this.clearCom();
-        }
+          if (this.deleteList.length <= 0) {
+            this.clearCom();
+          }
         });
       }
     },

+ 11 - 7
src/views/vipClass/vipList.vue

@@ -75,7 +75,7 @@
         </el-form-item>
 
         <el-form-item>
-          <el-select
+          <!-- <el-select
             v-model.trim="searchForm.teacherId"
             clearable
             filterable
@@ -87,7 +87,11 @@
               :value="item.id"
               :label="item.realName"
             ></el-option>
-          </el-select>
+          </el-select> -->
+               <remote-search
+            :commit="'setTeachers'"
+            v-model="searchForm.userId"
+          />
         </el-form-item>
         <el-form-item>
           <el-select
@@ -433,11 +437,11 @@ export default {
       });
 
       //   <!-- 状态 指导老师 活动方案-->
-      getTeacher({ organId: this.organId }).then((res) => {
-        if (res.code == 200) {
-          this.teacherList = res.data;
-        }
-      });
+      // getTeacher({ organId: this.organId }).then((res) => {
+      //   if (res.code == 200) {
+      //     this.teacherList = res.data;
+      //   }
+      // });
       // 获取活动方案
       vipGroupActivity({ organId: this.organId, rows: 9999 }).then((res) => {
         if (res.code == 200) {