浏览代码

提交修改

1
mo 3 年之前
父节点
当前提交
0a9eacba0e

+ 13 - 0
src/store/modules/permission.js

@@ -678,6 +678,19 @@ function setDetailRoute(accessedRoutes) {
           }
         },
         {
+          name: '发放优惠券',
+          path: 'couponGrant',
+          component: () => import('@/views/couponManager/couponGrant'),
+          hidden: true,
+          meta: {
+            noCache: '1',
+            title: '发放优惠券',
+            belongTopMenu: "/operateManager",
+            activeMenu: '/couponManager',
+            id: 'xx19'
+          }
+        },
+        {
           name: '答题详情',
           path: 'userAskList',
           component: () => import('@/views/setQuestions/userAskList'),

+ 308 - 176
src/views/categroyManager/specialSetup/branchSetting.vue

@@ -1,151 +1,252 @@
 <template>
-  <div class='m-container'>
+  <div class="m-container">
     <h2>
-      <div class="squrt"></div>分部管理
+      <div class="squrt"></div>
+      分部管理
     </h2>
     <div class="m-core">
-      <div @click="onBranchOperation('create')"
-           v-permission="'organization/add'"
-           class='newBand'>添加</div>
+      <div
+        @click="onBranchOperation('create')"
+        v-permission="'organization/add'"
+        class="newBand"
+      >
+        添加
+      </div>
       <!-- 列表 -->
       <div class="tableWrap">
-        <el-table :data='tableList'
-                  :header-cell-style="{background:'#EDEEF0',color:'#444'}">
-          <el-table-column align='center'
-                           prop="id"
-                           label="分部编号">
+        <el-table
+          :data="tableList"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        >
+          <el-table-column align="center" prop="id" label="分部编号">
           </el-table-column>
-          <el-table-column align='center'
-                           prop="name"
-                           label="分部名称">
+          <el-table-column align="center" prop="name" label="分部名称">
           </el-table-column>
-          <el-table-column align='center'
-                           prop="areaName"
-                           label="城市">
+          <el-table-column align="center" prop="areaName" label="城市">
           </el-table-column>
-          <el-table-column align='center'
-                           prop="address"
-                           label="分部地址">
+          <el-table-column align="center" prop="address" label="分部地址">
           </el-table-column>
-          <el-table-column align='center'
-                           label="学年制">
+          <el-table-column align="center" label="学年制">
             <template slot-scope="scope">
               {{ scope.row.gradeType | gradeTypeFormat }}
             </template>
           </el-table-column>
-          <el-table-column align='center'
-                           label="成立时间">
+          <el-table-column align="center" label="成立时间">
             <template slot-scope="scope">
               {{ scope.row.registerDate | formatTimer }}
             </template>
           </el-table-column>
-          <el-table-column align='center'
-                           label="操作">
+          <el-table-column align="center" label="操作">
             <template slot-scope="scope">
-              <el-button @click="onBranchOperation('update', scope.row)"
-                         v-permission="'organization/update'"
-                         type="text">修改</el-button>
+              <el-button
+                @click="onBranchOperation('update', scope.row)"
+                v-permission="'organization/update'"
+                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="branchStatus"
-               @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" placeholder="请输入分部名称"
-                    autocomplete="off"></el-input>
+    <el-dialog
+      :title="formTitle[formActionTitle]"
+      :visible.sync="branchStatus"
+      @close="onFormClose('ruleForm')"
+      width="500px"
+    >
+      <el-form :model="form" :rules="rules" ref="ruleForm">
+        <el-alert
+          style="margin: 20px 0"
+          title="分部信息"
+          :closable="false"
+          type="info"
+        >
+        </el-alert>
+        <el-form-item
+          label="分部名称"
+          prop="name"
+          :label-width="formLabelWidth"
+        >
+          <el-input
+            v-model.trim="form.name"
+            placeholder="请输入分部名称"
+            autocomplete="off"
+          ></el-input>
         </el-form-item>
-        <el-form-item label="城市"
-                      required
-                      :label-width="formLabelWidth">
+        <el-form-item label="城市" required :label-width="formLabelWidth">
           <el-col :span="12">
             <el-form-item prop="province">
-              <el-select v-model.trim="form.province"
-                         filterable
-                         placeholder="请选择省"
-                         clearable
-                         @change="onChangeProvince">
-                <el-option v-for="item in provinceList"
-                           :key="item.value"
-                           :label="item.label"
-                           :value="item.value"></el-option>
+              <el-select
+                v-model.trim="form.province"
+                filterable
+                placeholder="请选择省"
+                clearable
+                @change="onChangeProvince"
+              >
+                <el-option
+                  v-for="item in provinceList"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                ></el-option>
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item prop="city">
-              <el-select v-model.trim="form.city"
-                         filterable
-                         placeholder="请选择市"
-                         clearable>
-                <el-option v-for="item in cityList"
-                           :key="item.value"
-                           :label="item.label"
-                           :value="item.value"></el-option>
+              <el-select
+                v-model.trim="form.city"
+                filterable
+                placeholder="请选择市"
+                clearable
+              >
+                <el-option
+                  v-for="item in cityList"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                ></el-option>
               </el-select>
             </el-form-item>
           </el-col>
         </el-form-item>
-        <el-form-item label="学年制"
-                      prop="address"
-                      :label-width="formLabelWidth">
-          <el-select v-model.trim="form.gradeType"
-                         filterable
-                         placeholder="请选择学年制"
-                         clearable>
-                <el-option label="6+3" value="SIX_PLUS"></el-option>
-                <el-option label="5+4" value="FIVE_PLUS"></el-option>
-              </el-select>
+        <el-form-item
+          label="学年制"
+          prop="address"
+          :label-width="formLabelWidth"
+        >
+          <el-select
+            v-model.trim="form.gradeType"
+            filterable
+            placeholder="请选择学年制"
+            clearable
+          >
+            <el-option label="6+3" value="SIX_PLUS"></el-option>
+            <el-option label="5+4" value="FIVE_PLUS"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item
+          label="分部地址"
+          prop="address"
+          :label-width="formLabelWidth"
+        >
+          <el-input
+            v-model.trim="form.address"
+            placeholder="请输入分部地址"
+            autocomplete="off"
+          ></el-input>
+        </el-form-item>
+        <el-form-item
+          label="成立时间"
+          prop="registerDate"
+          :label-width="formLabelWidth"
+        >
+          <el-date-picker
+            v-model.trim="form.registerDate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            :picker-options="{
+              firstDayOfWeek: 1,
+            }"
+            placeholder="选择成立时间"
+          ></el-date-picker>
+        </el-form-item>
+        <el-alert
+          style="margin: 20px 0"
+          title="分部人员配置"
+          :closable="false"
+          type="info"
+        >
+        </el-alert>
+        <el-form-item label="分部经理" prop="organManager" :label-width="formLabelWidth">
+          <el-select
+            v-model.trim="form.organManager"
+            filterable
+            clearable
+            multiple
+          >
+            <el-option
+              v-for="item in employeeList"
+              :key="item.id"
+              :label="item.realName"
+              :value="item.id+''"
+            >
+              <span style="float: left">{{ item.realName }}</span>
+              <span style="float: right; color: #8492a6; font-size: 13px">{{
+                String(item.id)
+              }}</span>
+            </el-option>
+          </el-select>
         </el-form-item>
-        <el-form-item label="分部地址"
-                      prop="address"
-                      :label-width="formLabelWidth">
-          <el-input v-model.trim="form.address" placeholder="请输入分部地址"
-                    autocomplete="off"></el-input>
+        <el-form-item label="乐团主管" prop="educationId" :label-width="formLabelWidth">
+          <el-select
+            v-model.trim="form.educationId"
+            filterable
+            clearable
+            multiple
+          >
+            <el-option
+              v-for="item in employeeList"
+              :key="item.id"
+              :label="item.realName"
+              :value="item.id+''"
+            >
+              <span style="float: left">{{ item.realName }}</span>
+              <span style="float: right; color: #8492a6; font-size: 13px">{{
+                String(item.id)
+              }}</span>
+            </el-option>
+          </el-select>
         </el-form-item>
-        <el-form-item label="成立时间"
-                      prop="registerDate"
-                      :label-width="formLabelWidth">
-          <el-date-picker v-model.trim="form.registerDate"
-                          type="date"
-                          value-format="yyyy-MM-dd"
-                          :picker-options="{
-                            firstDayOfWeek:1
-                          }"
-                          placeholder="选择成立时间"></el-date-picker>
+        <el-form-item label="维修技师" prop="repairId" :label-width="formLabelWidth">
+          <el-select v-model.trim="form.repairId" filterable clearable multiple>
+            <el-option
+              v-for="item in employeeList"
+              :key="item.id"
+              :label="item.realName"
+              :value="item.id+''"
+            >
+              <span style="float: left">{{ item.realName }}</span>
+              <span style="float: right; color: #8492a6; font-size: 13px">{{
+                String(item.id)
+              }}</span>
+            </el-option>
+          </el-select>
         </el-form-item>
       </el-form>
-      <span slot="footer"
-            class="dialog-footer">
+      <span slot="footer" class="dialog-footer">
         <el-button @click="branchStatus = false">取 消</el-button>
-        <el-button @click="onBranchSubmit('ruleForm')"
-                   type="primary">确 定</el-button>
+        <el-button @click="onBranchSubmit('ruleForm')" type="primary"
+          >确 定</el-button
+        >
       </span>
     </el-dialog>
-
   </div>
 </template>
 <script>
-import pagination from '@/components/Pagination/index'
-import { branchQueryPage, areaQueryChild, branchAdd, branchUpdate, getParentArea } from '@/api/specialSetting'
+import pagination from "@/components/Pagination/index";
+import {
+  branchQueryPage,
+  areaQueryChild,
+  branchAdd,
+  branchUpdate,
+  getParentArea,
+} from "@/api/specialSetting";
+import { queryEmployByOrganId } from "@/api/systemManage";
 export default {
-  name: 'branchSetting',
+  name: "branchSetting",
   components: { pagination },
-  data () {
+  data() {
     return {
       tableList: [],
       pageInfo: {
@@ -153,115 +254,142 @@ export default {
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         total: 0, // 总条数
-        page_size: [10, 20, 40, 50] // 选择限制显示条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
       },
       organId: null,
-      formActionTitle: 'create',
+      formActionTitle: "create",
       formTitle: {
-        create: '添加分部',
-        update: '修改分部'
+        create: "添加分部",
+        update: "修改分部",
       },
-      formLabelWidth: '100px',
+      formLabelWidth: "100px",
       branchStatus: false,
       provinceList: [], // 省列表
       cityList: [], // 市列表
+      employeeList: [], // 分部下的员工集合
       form: {
         name: null,
         province: null,
         city: null,
         address: null,
         registerDate: null,
-        gradeType: 'SIX_PLUS',
+        gradeType: "SIX_PLUS",
+        organManager: [],
+        educationId: [],
+        repairId: [],
       },
       rules: {
-        name: [{ required: true, message: '请输入分部名称', trigger: 'blur' }],
-        province: [{ required: true, message: '请选择省', trigger: 'change' }],
-        city: [{ required: true, message: '请选择市', trigger: 'change' }],
-        address: [{ required: true, message: '请输入分部地址', trigger: 'blur' }],
-        registerDate: [{ required: true, message: '请选择成立时间', trigger: 'change' }],
-        gradeType: [{ required: true, message: '请选择学年制', trigger: 'change' }]
-      }
-    }
+        name: [{ required: true, message: "请输入分部名称", trigger: "blur" }],
+        province: [{ required: true, message: "请选择省", trigger: "change" }],
+        city: [{ required: true, message: "请选择市", trigger: "change" }],
+        address: [
+          { required: true, message: "请输入分部地址", trigger: "blur" },
+        ],
+        registerDate: [
+          { required: true, message: "请选择成立时间", trigger: "change" },
+        ],
+        gradeType: [
+          { required: true, message: "请选择学年制", trigger: "change" },
+        ],
+      },
+    };
   },
-  mounted () {
-    this.getList()
-    this.getAreaList()
+  mounted() {
+    this.getList();
+    this.getAreaList();
   },
   methods: {
-    onBranchSubmit (formName) {
-      this.$refs[formName].validate(valid => {
-        if (!valid) return
-        this.form.areaId = this.form.city
-        if (this.formActionTitle == 'create') {
-          if (this.form.id) { // 判断有没有Id,如果有则删除
-            delete this.form.id
+    onBranchSubmit(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (!valid) return;
+        this.form.areaId = this.form.city;
+        let obj = {
+          ...this.form,
+          organManager:this.form.organManager.join(','),
+          educationId:this.form.educationId.join(','),
+          repairId:this.form.repairId.join(',')
+        }
+
+        if (this.formActionTitle == "create") {
+          if (this.form.id) {
+            // 判断有没有Id,如果有则删除
+            delete this.form.id;
           }
-          branchAdd(this.form).then(res => {
-            this.messageTips('添加', res)
-          })
-        } else if (this.formActionTitle == 'update') {
-          branchUpdate(this.form).then(res => {
-            this.messageTips('修改', res)
-          })
+          branchAdd(obj).then((res) => {
+            this.messageTips("添加", res);
+          });
+        } else if (this.formActionTitle == "update") {
+          branchUpdate(obj).then((res) => {
+            this.messageTips("修改", res);
+          });
         }
-      })
+      });
     },
-    messageTips (title, res) {
+    messageTips(title, res) {
       if (res.code == 200) {
-        this.$message.success(title + '成功')
-        this.branchStatus = false
-        this.getList()
+        this.$message.success(title + "成功");
+        this.branchStatus = false;
+        this.getList();
       } else {
-        this.$message.error(res.msg)
+        this.$message.error(res.msg);
       }
     },
-    getList () {
+    getList() {
       branchQueryPage({
         rows: this.pageInfo.limit,
-        page: this.pageInfo.page
-      }).then(res => {
+        page: this.pageInfo.page,
+      }).then((res) => {
         if (res.code == 200 && res.data) {
-          this.tableList = res.data.rows
-          this.pageInfo.total = res.data.total
+          this.tableList = res.data.rows;
+          this.pageInfo.total = res.data.total;
         }
-      })
+      });
     },
-    onFormClose (formName) { // 关闭弹窗重置验证
-      this.$refs[formName].resetFields()
-      this.form.gradeType = 'SIX_PLUS'
+    onFormClose(formName) {
+      // 关闭弹窗重置验证
+      this.$refs[formName].resetFields();
+      this.form.gradeType = "SIX_PLUS";
     },
-    getAreaList (parentId, callback) {
-      parentId = parentId ? parentId : 0
-      areaQueryChild({ parentId: parentId }).then(res => {
+    getAreaList(parentId, callback) {
+      parentId = parentId ? parentId : 0;
+      areaQueryChild({ parentId: parentId }).then((res) => {
         if (res.code == 200 && res.data) {
-          let tempData = []
-          res.data.forEach(item => {
+          let tempData = [];
+          res.data.forEach((item) => {
             tempData.push({
               label: item.name,
-              value: item.id
-            })
-          })
+              value: item.id,
+            });
+          });
           if (parentId) {
-            this.cityList = tempData
+            this.cityList = tempData;
           } else {
-            this.provinceList = tempData
+            this.provinceList = tempData;
           }
 
-          if (callback && typeof callback == 'function') {
-            callback()
+          if (callback && typeof callback == "function") {
+            callback();
           }
         }
-      })
+      });
     },
-    onChangeProvince (val) {
-      this.form.city = null
-      this.getAreaList(val)
+    onChangeProvince(val) {
+      this.form.city = null;
+      this.getAreaList(val);
     },
-    onBranchOperation (type, row) { // 修改分部信息
-      this.formActionTitle = type
-      this.branchStatus = true
-      if (type == 'update') {
-        getParentArea({ id: row.areaId }).then(res => {
+    async onBranchOperation(type, row) {
+      // 修改分部信息
+      // employeeFindEmployeeByRole
+      try {
+        const res = await queryEmployByOrganId({ organId: row.id, rows: 9999 });
+        this.$set(this, "employeeList", res.data.rows);
+      } catch (e) {
+        console.log(e);
+      }
+      this.formActionTitle = type;
+
+      if (type == "update") {
+        getParentArea({ id: row.areaId }).then((res) => {
           if (res.code == 200 && res.data) {
             this.getAreaList(res.data.id, () => {
               this.form = {
@@ -271,17 +399,21 @@ export default {
                 city: row.areaId,
                 address: row.address,
                 registerDate: row.registerDate,
-                gradeType: row.gradeType == 1 ? 'FIVE_PLUS' : 'SIX_PLUS'
-              }
-            })
-
+                gradeType: row.gradeType == 1 ? "FIVE_PLUS" : "SIX_PLUS",
+                organManager:row.organManager?row.organManager.split(','):[],
+                repairId:row.repairId?row.repairId.split(','):[],
+                educationId:row.educationId?row.educationId.split(','):[],
+              };
+            });
+             this.branchStatus = true;
           }
-        })
+        });
+      }else{
+          this.branchStatus = true;
       }
-    }
-
-  }
-}
+    },
+  },
+};
 </script>
 <style lang="scss" scoped>
 /deep/.el-button--primary {
@@ -302,4 +434,4 @@ export default {
 /deep/.el-select {
   width: 98% !important;
 }
-</style>
+</style>

+ 303 - 0
src/views/couponManager/couponGrant.vue

@@ -0,0 +1,303 @@
+<!-- m-container -->
+<template>
+  <div class="">
+    <!-- <el-page-header @back="onCancel" :content="title"></el-page-header> -->
+    <div class="m-core">
+      <el-form
+        :inline="true"
+        @submit="search"
+        ref="searchForm"
+        :model="searchForm"
+      >
+        <el-form-item prop="search">
+          <el-input
+            class="search"
+            type="text"
+            clearable
+            v-model="searchForm.search"
+            placeholder="学员名称、编号、手机号"
+          ></el-input>
+        </el-form-item>
+        <el-form-item prop="organId">
+          <el-select
+            class="multiple"
+            filterable
+            style="width: 180px !important"
+            v-model.trim="searchForm.organId"
+            clearable
+            multiple
+            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 prop="subjectId">
+          <el-select
+            clearable
+            v-model="searchForm.subjectId"
+            filterable
+            placeholder="声部"
+          >
+            <el-option
+              v-for="item in selects.subjects"
+              :value="item.id"
+              :label="item.name"
+              :key="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="hasMusicCourse">
+          <el-select
+            clearable
+            v-model="searchForm.hasMusicCourse"
+            filterable
+            placeholder="是否乐团在读"
+          >
+            <el-option value="1" label="是"></el-option>
+            <el-option value="0" label="否"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="hasVipCourse">
+          <el-select
+            clearable
+            v-model="searchForm.hasVipCourse"
+            filterable
+            placeholder="是否vip在读"
+          >
+            <el-option value="1" label="是"></el-option>
+            <el-option value="0" label="否"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="hasPracticeCourse">
+          <el-select
+            clearable
+            v-model="searchForm.hasPracticeCourse"
+            filterable
+            placeholder="是否网管课在读"
+          >
+            <el-option value="1" label="是"></el-option>
+            <el-option value="0" label="否"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="hasMember">
+          <el-select
+            clearable
+            v-model="searchForm.hasMember"
+            filterable
+            placeholder="是否会员"
+          >
+            <el-option value="1" label="是"></el-option>
+            <el-option value="0" label="否"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="danger" @click="search">搜索</el-button>
+          <el-button native-type="reset" type="primary" @click="onReSet"
+            >重置</el-button
+          >
+        </el-form-item>
+      </el-form>
+      <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+          ref="tableList"
+          @selection-change="handleSelectionChange"
+          @select="onTableSelect"
+          row-key="userId"
+        >
+          <el-table-column type="selection" width="55"> </el-table-column>
+          <el-table-column
+            align="center"
+            prop="organName"
+            label="分部"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="userId"
+            label="学员编号"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="username"
+            label="学员姓名"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="phone"
+            label="手机号"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="subjectNames"
+            label="声部"
+          ></el-table-column>
+        </el-table>
+        <pagination
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes.sync="rules.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import pagination from "@/components/Pagination/index";
+import { getStudentList, addActivityUserMapperStudents } from "@/api/vipSeting";
+export default {
+  components: { pagination },
+  data() {
+    return {
+      searchForm: {
+        search: null,
+        organId: [],
+        subjectId: null,
+        hasMember: null,
+        hasMusicCourse: null,
+        hasPracticeCourse: null,
+        hasVipCourse: null,
+      },
+
+      tableList: [],
+      organList: [],
+      title: "",
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+         isDetele: false,
+      deleteList: [],
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  async mounted() {
+    // 获取分部
+    if (this.$route.query.row) {
+      this.activeRow = JSON.parse(this.$route.query.row);
+      this.title = this.activeRow.name;
+    }
+    await this.$store.dispatch("setBranchs");
+    await this.$store.dispatch("setSubjects");
+    this.getList()
+  },
+  methods: {
+      search() {
+      this.rules.page = 1;
+      this.getList();
+    },
+    onReSet() {
+      this.$refs.searchForm.resetFields();
+      this.search();
+    },
+    async getList() {
+      try {
+        let { organId, ...rest } = this.searchForm;
+        let params = {
+          ...rest,
+          page: this.rules.page,
+          rows: this.rules.limit,
+          organId: organId.join(","),
+        };
+        const res = await getStudentList(params);
+        this.tableList = res.data.rows;
+        this.rules.total = res.data.total;
+        let idList = this.deleteList.map((course) => {
+          return course.userId;
+        });
+        this.isDetele = true;
+        this.$nextTick(() => {
+          this.tableList.forEach((course) => {
+            if (idList.indexOf(course.userId) != -1) {
+              console.log(course);
+              this.$refs.tableList.toggleRowSelection(course, true);
+            }
+          });
+          this.isDetele = false;
+        });
+      } catch (e) {
+        console.log(e);
+      }
+
+      /**
+       *
+       */
+    },
+    handleSelectionChange(arr) {
+      // this.deleteList = arr;
+      if (arr.length > 0) {
+        // 有可能加 有可能减
+        this.deleteList = this.deleteList.concat(arr);
+        // 去重
+        this.deleteList = this.$helpers.lodash.uniqBy(
+          this.deleteList,
+          "userId"
+        );
+      }
+      // else if(){}
+      else {
+        if (this.isDetele) return;
+        // 有2种 1是新页
+        // 2是点击反选
+        let idList = this.deleteList.map((course) => {
+          return course.userId;
+        });
+        this.$nextTick(() => {
+          let tableIdList = [];
+          this.tableList.forEach((course) => {
+            tableIdList.push(course.userId);
+            if (idList.indexOf(course.userId) != -1) {
+              this.$refs.tableList.toggleRowSelection(course, false);
+              // 删除这个元素
+            }
+          });
+          this.deleteList = this.$helpers.lodash.remove(
+            this.deleteList,
+            function (item) {
+              return tableIdList.indexOf(item.userId) == -1;
+            }
+          );
+          if (this.deleteList.length <= 0) {
+            this.clearCom();
+          }
+        });
+      }
+    },
+    onTableSelect(rows, row) {
+      let idList = this.deleteList.map((course) => {
+        return course.userId;
+      });
+      if (idList.indexOf(row.userId) != -1) {
+        this.deleteList.splice(idList.indexOf(row.userId), 1);
+        if (this.deleteList.length <= 0) {
+          this.clearCom();
+        }
+      }
+    },
+    clearCom() {
+      // this.deleteList = [];
+      this.$set(this, "deleteList", []);
+      this.$refs.tableList.clearSelection();
+    },
+    // onCancel() {
+    //   this.$router.push("/couponManager");
+    // },
+  },
+};
+</script>
+<style lang='scss' scoped>
+</style>

+ 31 - 10
src/views/couponManager/index.vue

@@ -156,7 +156,7 @@
           <el-table-column
             align="center"
             prop="cloudStudyUseStudentDuty"
-            width="140px"
+
           >
             <template slot="header" slot-scope="slot">
               <div class="titleCell">
@@ -182,7 +182,7 @@
           <el-table-column
             align="center"
             prop="cloudStudyUseStudentDuty"
-            width="140px"
+
           >
             <template slot="header" slot-scope="slot">
               <div class="titleCell">
@@ -310,14 +310,11 @@
             align="center"
             prop="studentId"
             label="操作"
-            width="120px"
+            width="170px"
           >
             <template slot-scope="scope">
               <div>
                 <auth auths="sysCoupon/updateCoupon">
-                  <!-- <el-button type="text" @click="gotoDetail(scope.row)"
-                  >查看</el-button
-                > -->
                   <el-button
                     type="text"
                     v-if="scope.row.status"
@@ -327,6 +324,8 @@
                   <el-button type="text" v-else @click="start(scope.row)"
                     >启用</el-button
                   >
+                </auth>
+                <auth auths="sysCoupon/updateCoupon">
                   <el-button
                     type="text"
                     v-if="!scope.row.status"
@@ -343,12 +342,12 @@
                   >
                 </auth>
                 <auth auths="sysCoupon/delete">
-                  <el-button type="text" @click="removeCoupon(scope.row)"
+                  <el-button type="text" @click="getCoupon(scope.row)"
                     >手动发放</el-button
                   >
                 </auth>
                 <auth auths="sysCoupon/delete">
-                  <el-button type="text" @click="removeCoupon(scope.row)"
+                  <el-button type="text" @click="getCouponRecord(scope.row)"
                     >发放记录</el-button
                   >
                 </auth>
@@ -366,6 +365,15 @@
         />
       </div>
     </div>
+    <el-dialog :title="title" :visible.sync="addCouponVisible" width="1000px">
+      <couponGrant :activeRow="activeRow"/>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="addCouponVisible = false">取 消</el-button>
+        <el-button @click="addCouponVisible = false" type="primary"
+          >确 定</el-button
+        >
+      </span>
+    </el-dialog>
   </div>
 </template>
 
@@ -377,8 +385,9 @@ import load from "@/utils/loading";
 import { getSysCoupon, resetSysCoupon, delSysCoupon } from "./api";
 import { couponTypeList } from "@/utils/searchArray";
 import Tooltip from "@/components/Tooltip/index";
+import couponGrant from './couponGrant'
 export default {
-  components: { pagination, Tooltip },
+  components: { pagination, Tooltip,couponGrant },
   data() {
     return {
       couponTypeList,
@@ -387,7 +396,7 @@ export default {
         type: null,
         status: null,
       },
-
+      activeRow:null,
       tableList: [],
       organList: [],
       rules: {
@@ -397,6 +406,8 @@ export default {
         total: 0, // 总条数
         page_size: [10, 20, 40, 50], // 选择限制显示条数
       },
+      addCouponVisible:false,
+      title:''
     };
   },
   //生命周期 - 创建完成(可以访问当前this实例)
@@ -501,6 +512,16 @@ export default {
         })
         .catch(() => {});
     },
+    getCoupon(row) {
+      this.activeRow = row;
+      this.title = this.activeRow.name;
+      this.addCouponVisible = true;
+      // this.$router.push({
+      //   path: "/operateManager/couponGrant",
+      //   query: { row: JSON.stringify(row) },
+      // });
+    },
+    getCouponRecord(row) {},
   },
 };
 </script>

+ 131 - 103
src/views/teamBuild/components/teamBaseInfo.vue

@@ -1,21 +1,23 @@
 <template>
   <div class="base-container">
     <div class="banseLeft">
-      <div class="head">乐团基本信息:</div>
       <!-- <div class="num">乐团编号:dywh01</div> -->
       <el-form
         :model="topFrom"
-        :inline="true"
         ref="topinfo"
         label-width="120px"
+        :inline="true"
+        label-position="left"
       >
-      <!-- style="margin-left: 11px" -->
+        <div class="head">乐团基本信息:</div>
+        <!-- style="margin-left: 11px"  -->
         <el-form-item
           label="所属分部"
           prop="section"
           :rules="[{ required: true, message: '所属分部不能为空' }]"
         >
           <el-select
+            class="width400"
             v-model.trim="topFrom.section"
             filterable
             :disabled="basdisabled"
@@ -62,7 +64,13 @@
             :disabled="basdisabled"
             clearable
           >
-            <el-option :label="item.label"  :value="Number(item.value)"  v-for="item in courseViewTypeList" :key="item.value" :disabled="checkCourseView(Number(item.value))"></el-option>
+            <el-option
+              :label="item.label"
+              :value="Number(item.value)"
+              v-for="item in courseViewTypeList"
+              :key="item.value"
+              :disabled="checkCourseView(Number(item.value))"
+            ></el-option>
             <!-- <el-option label="AMR收费" :value="1"></el-option>
             <el-option label="会员收费" :value="2"></el-option> -->
           </el-select>
@@ -87,30 +95,7 @@
             ></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item
-          label="乐团主管"
-          prop="teacher"
-          :rules="[{ required: true, message: '乐团主管不能为空' }]"
-        >
-          <el-select
-            v-model.trim="topFrom.teacher"
-            :disabled="true"
-            filterable
-            clearable
-          >
-            <el-option
-              v-for="(item, index) in educationList"
-              :key="index"
-              :label="item.realName"
-              :value="item.userId"
-            >
-              <span style="float: left">{{ item.realName }}</span>
-              <span style="float: right; color: #8492a6; font-size: 13px">{{
-                String(item.userId)
-              }}</span>
-            </el-option>
-          </el-select>
-        </el-form-item>
+
         <el-form-item
           label="教学地点"
           prop="address"
@@ -179,47 +164,7 @@
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="衔接老师" prop="transactionTeacherId">
-          <el-select
-            v-model.trim="topFrom.transactionTeacherId"
-            :disabled="!topFrom.section || basdisabled"
-            filterable
-            clearable
-          >
-            <el-option
-              v-for="item in transactionList"
-              :key="item.userId"
-              :label="item.realName"
-              :value="item.userId"
-            >
-              <span style="float: left">{{ item.realName }}</span>
-              <span style="float: right; color: #8492a6; font-size: 13px">{{
-                String(item.userId)
-              }}</span>
-            </el-option>
-          </el-select>
-        </el-form-item>
 
-        <el-form-item label="维修技师" prop="repairUserId">
-          <el-select
-            v-model.trim="topFrom.repairUserId"
-            :disabled="!topFrom.section || basdisabled"
-            filterable
-            clearable
-          >
-            <el-option
-              v-for="(item, index) in technician"
-              :key="index"
-              :label="item.userName"
-              :value="item.userId"
-            >
-              <span style="float: left">{{ item.realName }}</span>
-              <span style="float: right; color: #8492a6; font-size: 13px">{{
-                String(item.userId)
-              }}</span>
-            </el-option>
-          </el-select>
-        </el-form-item>
         <!-- <el-form-item
           label="预报名截止时间"
           prop="time"
@@ -248,7 +193,7 @@
             placeholder="选择日期"
           ></el-date-picker>
         </el-form-item>
-        <el-form-item
+        <!-- <el-form-item
           label="预计开团时间"
           prop="startTime"
           :rules="[{ required: true, message: '请输入预计开团时间' }]"
@@ -261,7 +206,7 @@
             :picker-options="beginDate()"
             placeholder="选择日期"
           ></el-date-picker>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item
           label="课酬结算标准"
           :rules="[{ required: true, message: '请选择课酬结算标准' }]"
@@ -290,6 +235,32 @@
           </el-select>
         </el-form-item>
         <!-- v-if="teamStatus == 'resetTeam' || teamStatus == 'teamList'" -->
+
+        <div class="head">人员配置:</div>
+        <el-form-item
+          label="乐团主管"
+          prop="teacher"
+          :rules="[{ required: true, message: '乐团主管不能为空' }]"
+        >
+          <el-select
+            v-model.trim="topFrom.teacher"
+            :disabled="true"
+            filterable
+            clearable
+          >
+            <el-option
+              v-for="(item, index) in educationList"
+              :key="index"
+              :label="item.realName"
+              :value="item.userId"
+            >
+              <span style="float: left">{{ item.realName }}</span>
+              <span style="float: right; color: #8492a6; font-size: 13px">{{
+                String(item.userId)
+              }}</span>
+            </el-option>
+          </el-select>
+        </el-form-item>
         <el-form-item label="乐队指导" prop="head">
           <el-select
             v-model.trim="topFrom.head"
@@ -311,12 +282,53 @@
           </el-select>
         </el-form-item>
 
+        <el-form-item label="维修技师" prop="repairUserId">
+          <el-select
+            v-model.trim="topFrom.repairUserId"
+            :disabled="!topFrom.section || basdisabled"
+            filterable
+            clearable
+          >
+            <el-option
+              v-for="(item, index) in technician"
+              :key="index"
+              :label="item.userName"
+              :value="item.userId"
+            >
+              <span style="float: left">{{ item.realName }}</span>
+              <span style="float: right; color: #8492a6; font-size: 13px">{{
+                String(item.userId)
+              }}</span>
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="衔接老师" prop="transactionTeacherId">
+          <el-select
+            v-model.trim="topFrom.transactionTeacherId"
+            :disabled="!topFrom.section || basdisabled"
+            filterable
+            clearable
+          >
+            <el-option
+              v-for="item in transactionList"
+              :key="item.userId"
+              :label="item.realName"
+              :value="item.userId"
+            >
+              <span style="float: left">{{ item.realName }}</span>
+              <span style="float: right; color: #8492a6; font-size: 13px">{{
+                String(item.userId)
+              }}</span>
+            </el-option>
+          </el-select>
+        </el-form-item>
         <div class="head">乐团设置:</div>
         <el-form-item
           label="同步群消息"
           prop="homeworkPushFlag"
           label-width="200px"
-          :rules="[{ required: true, message: '同步群消息不能为空' }]">
+          :rules="[{ required: true, message: '同步群消息不能为空' }]"
+        >
           <template #label>
             <p style="position: relative; display: inline-block">
               开课后作业同步群消息
@@ -335,7 +347,8 @@
             v-model="topFrom.homeworkPushFlag"
             :disabled="basdisabled"
             :active-value="1"
-            :inactive-value="0" >
+            :inactive-value="0"
+          >
           </el-switch>
         </el-form-item>
 
@@ -343,14 +356,13 @@
           label="是否显示免费课程"
           prop="memberCourseShowFlag"
           label-width="200px"
-          :rules="[{ required: true, message: '是否显示免费课程不能为空' }]">
+          :rules="[{ required: true, message: '是否显示免费课程不能为空' }]"
+        >
           <template #label>
             <p style="position: relative; display: inline-block">
               是否显示免费课程
               <el-tooltip placement="top" popper-class="mTooltip">
-                <div slot="content">
-                  报名时是否显示免费赠送课程
-                </div>
+                <div slot="content">报名时是否显示免费赠送课程</div>
                 <i
                   class="el-icon-question"
                   style="font-size: 18px; color: #f56c6c"
@@ -362,7 +374,8 @@
             v-model="topFrom.memberCourseShowFlag"
             :disabled="basdisabled"
             :active-value="1"
-            :inactive-value="0" >
+            :inactive-value="0"
+          >
           </el-switch>
         </el-form-item>
         <!-- <el-form-item label prop="isClass">
@@ -423,7 +436,7 @@ import dayjs from "dayjs";
 import merge from "webpack-merge";
 import { queryByOrganId, getSchool } from "@/api/systemManage";
 import qrCode from "@/components/QrCode/index";
-import { classStatus,courseViewTypeList } from "@/utils/searchArray";
+import { classStatus, courseViewTypeList } from "@/utils/searchArray";
 import { vaildStudentUrl, vaildTeacherUrl } from "@/utils/validate";
 import mergeMusic from "../components/merge-music";
 export default {
@@ -1013,7 +1026,7 @@ export default {
         ownershipType: "OWN", // 合作机构类型
         feeType: null,
         homeworkPushFlag: 1,
-        memberCourseShowFlag: 0
+        memberCourseShowFlag: 0,
       };
       this.$refs["topinfo"].resetFields();
     },
@@ -1250,9 +1263,12 @@ export default {
       this.paymentExpireDate = res.data.musicGroup.paymentExpireDate;
       this.applyExpireDate = res.data.musicGroup.applyExpireDate;
       this.topFrom.transactionTeacherId =
-        res.data.musicGroup.transactionTeacherId||'';
-      this.topFrom.homeworkPushFlag = res.data.musicGroup.homeworkPushFlag
-      this.topFrom.memberCourseShowFlag = res.data.musicGroup.memberCourseShowFlag ? 1 : 0
+        res.data.musicGroup.transactionTeacherId || "";
+      this.topFrom.homeworkPushFlag = res.data.musicGroup.homeworkPushFlag;
+      this.topFrom.memberCourseShowFlag = res.data.musicGroup
+        .memberCourseShowFlag
+        ? 1
+        : 0;
       localStorage.setItem(`${this.teamid}base`, JSON.stringify(this.topFrom));
     },
     changeType(val) {
@@ -1260,21 +1276,23 @@ export default {
         localStorage.removeItem(`${this.teamid}sound`);
       }
     },
-      checkCourseView(val){
-      if(this.teamStatus == "newTeam" || this.teamStatus == "teamDraft"){
-        return false
-      }else{
-        if(this.topFrom.courseViewType == 0 || this.topFrom.courseViewType== 1){
+    checkCourseView(val) {
+      if (this.teamStatus == "newTeam" || this.teamStatus == "teamDraft") {
+        return false;
+      } else {
+        if (
+          this.topFrom.courseViewType == 0 ||
+          this.topFrom.courseViewType == 1
+        ) {
           // val ==2
-          return false
-        }else{
-          return val == 0 || val==1
+          return false;
+        } else {
+          return val == 0 || val == 1;
         }
       }
     },
   },
   computed: {
-
     startClassString() {
       return this.topFrom.startClass
         .map((item) => {
@@ -1296,7 +1314,6 @@ export default {
         teamStatus == "feeAudit"
       );
     },
-
   },
 };
 </script>
@@ -1452,18 +1469,29 @@ export default {
 }
 </style>
 <style scoped lang="scss">
-/deep/.el-date-editor {
-  width: 180px !important;
-}
-/deep/.el-checkbox {
-  margin-left: 15px !important;
-}
-/deep/.el-input {
-  position: relative;
-  font-size: 14px;
-  display: inline-block;
-  width: 180px;
+.banseLeft {
+  /deep/.el-form--inline {
+    .el-form-item__content {
+      display: block;
+    }
+  }
+  /deep/.el-select {
+    width: 300px !important;
+  }
+  /deep/.el-date-editor {
+    width: 300px !important;
+  }
+  /deep/.el-checkbox {
+    margin-left: 15px !important;
+  }
+  /deep/.el-input {
+    position: relative;
+    font-size: 14px;
+    display: inline-block;
+    width: 300px;
+  }
 }
+
 input[disabled] {
   background-color: #fff;
   border-color: #b3b3b3;

+ 2 - 2
vue.config.js

@@ -17,9 +17,9 @@ const name = defaultSettings.title || '管乐迷后台管理系统' // page titl
 // //  https://online.dayaedu.com
 // let target = 'https://online.dayaedu.com' //线上
 // let target = 'http://192.168.3.227:8000' // 何国威
-// let target = 'http://192.168.3.124:8000' //邹璇
+let target = 'http://192.168.3.124:8000' //邹璇
 // let target = 'http://192.168.3.112:8000' //勇哥
-let target = 'http://dev.dayaedu.com' // 开发环境
+// let target = 'http://dev.dayaedu.com' // 开发环境
 // let target = 'https://test.dayaedu.com' //测试环境
 // let target = 'http://192.168.3.134:8000' // 乔
 // All configuration item explanations can be find in https://cli.vuejs.org/config/