浏览代码

直播课

lex 2 年之前
父节点
当前提交
9091204213

+ 1 - 1
src/constant/index.js

@@ -445,7 +445,7 @@ export const coupontypeDetail = {
   SINGLE: "声部课",
   MIX: "合奏课",
   VIP: "VIP",
-
+  LIVE: "直播课",
   MEMBER: "云教练"
 };
 

+ 1 - 0
src/router/index.js

@@ -613,6 +613,7 @@ export const asyncRoutes = {
   createLiveCourse: () => import("@/views/liveClassManager/createLiveClass"),
   // 直播课详情
   liveClassDetail: () => import("@/views/liveClassManager/liveClassDetail"),
+  liveClassTwo: () => import("@/views/liveClassManager/liveClassTwo"),
   // 平台员工管理
   platformAdminManger: () => import("@/views/platformManager/paltformAdmin"),
   // 小课学员管理

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

@@ -612,6 +612,18 @@ function setDetailRoute(accessedRoutes) {
           }
         },
         {
+          name: "直播课详情",
+          path: "liveCourseDetail",
+          component: () => import("@/views/liveClassManager/liveClassTwo"),
+          hidden: true,
+          meta: {
+            noCache: "1",
+            title: "直播课详情",
+            belongTopMenu: "/business",
+            activeMenu: "/liveClassManager"
+          }
+        },
+        {
           name: "商品设置",
           path: "liveShopControl",
           component: () => import("@/views/liveClassManager/liveShopControl"),

+ 23 - 24
src/views/groupChatManager/component/chatList.vue

@@ -12,13 +12,13 @@
         <el-input
           v-model.trim="searchForm.search"
           clearable
-            @keyup.enter.native="
-              (e) => {
-                e.target.blur();
-                $refs.searchForm.save();
-                search();
-              }
-            "
+          @keyup.enter.native="
+            e => {
+              e.target.blur();
+              $refs.searchForm.save();
+              search();
+            }
+          "
           placeholder="群聊名称"
         ></el-input>
       </el-form-item>
@@ -87,7 +87,7 @@
             </div>
           </template>
         </el-table-column>
-                   <el-table-column align="center" prop="groupType" label="群类型">
+        <el-table-column align="center" prop="groupType" label="群类型">
           <template slot-scope="scope">
             <div>
               {{ scope.row.type | catType }}
@@ -147,7 +147,7 @@ export default {
     return {
       searchForm: {
         search: null,
-        groupType: "",
+        groupType: ""
       },
       catgGoupTypeList,
       tableList: [],
@@ -157,12 +157,12 @@ export default {
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         total: 0, // 总条数
-        page_size: [10, 20, 40, 50], // 选择限制显示条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
       },
       addMuiscVisible: false,
       multipleSelection: [],
       chioseIdList: [],
-      isNewPage: false,
+      isNewPage: false
     };
   },
   //生命周期 - 创建完成(可以访问当前this实例)
@@ -189,16 +189,16 @@ export default {
         const res = await getGroupList({
           ...this.searchForm,
           page: this.rules.page,
-          rows: this.rules.limit,
+          rows: this.rules.limit
         });
         this.tableList = res.data.rows;
         this.rules.total = res.data.total;
-        let idList = this.chioseIdList.map((group) => {
+        let idList = this.chioseIdList.map(group => {
           return group.id;
         });
         this.isNewPage = true;
         this.$nextTick(() => {
-          this.tableList.forEach((course) => {
+          this.tableList.forEach(course => {
             if (idList.indexOf(course.id) != -1) {
               this.$refs.multipleSelection.toggleRowSelection(course, true);
             }
@@ -235,12 +235,12 @@ export default {
         );
       } else {
         if (this.isNewPage) return;
-        let idList = this.chioseIdList.map((group) => {
+        let idList = this.chioseIdList.map(group => {
           return group.id;
         });
         this.$nextTick(() => {
           let tableIdList = [];
-          this.tableList.forEach((group) => {
+          this.tableList.forEach(group => {
             tableIdList.push(group.id);
             if (idList.indexOf(group.id) != -1) {
               this.$refs.multipleSelection.toggleRowSelection(group, false);
@@ -248,7 +248,7 @@ export default {
           });
           this.chioseIdList = this.$helpers.lodash.remove(
             this.chioseIdList,
-            function (item) {
+            function(item) {
               return tableIdList.indexOf(item.id) == -1;
             }
           );
@@ -263,7 +263,7 @@ export default {
       this.$refs.multipleSelection.clearSelection();
     },
     onTableSelect(rows, row) {
-      let idList = this.chioseIdList.map((group) => {
+      let idList = this.chioseIdList.map(group => {
         return group.id;
       });
       if (idList.indexOf(row.id) != -1) {
@@ -279,7 +279,7 @@ export default {
     gotoCatDetail(row) {
       this.$router.push({
         path: "/operateManager/chatDetail",
-        query: { imGroupId: row.id, name: row.name },
+        query: { imGroupId: row.id, name: row.name }
       });
       console.log(row);
     },
@@ -289,7 +289,7 @@ export default {
     async cancelCat(row) {
       try {
         await this.$confirm("是否解散群组" + row.name + "?", "提示", {
-          type: "warning",
+          type: "warning"
         });
         const res = await dismissGroup({ imGroupId: row.id });
         this.$message.success("取消成功");
@@ -297,9 +297,8 @@ export default {
       } catch (e) {
         console.log(e);
       }
-    },
-  },
+    }
+  }
 };
 </script>
-<style lang='scss' scoped>
-</style>
+<style lang="scss" scoped></style>

+ 19 - 20
src/views/groupChatManager/model/eidtPostMsg.vue

@@ -101,7 +101,7 @@
   </div>
 </template>
 <script>
-import { sendGroupMsg,resetGroupMessageList } from "../api";
+import { sendGroupMsg, resetGroupMessageList } from "../api";
 export default {
   name: "eidtPostMsg",
   data() {
@@ -111,13 +111,13 @@ export default {
         postType: "0",
         sendTime: "",
         messageContent: "",
-        messageType: "",
-        fileName: "",
+        messageType: "TXT",
+        fileName: ""
       },
       lookVisible: false,
       chioseIdList: null,
       activeRow: null,
-      type:''
+      type: ""
     };
   },
 
@@ -126,20 +126,19 @@ export default {
   },
   methods: {
     init() {},
-    openDioag(chioseIdList,type) {
+    openDioag(chioseIdList, type) {
       this.chioseIdList = chioseIdList;
 
-      this.type = type
+      this.type = type;
 
       this.lookVisible = true;
-
     },
-    openResetDioag(row,type) {
+    openResetDioag(row, type) {
       if (row.sendTime) {
         row.postType = "1";
       }
       this.activeRow = row;
-       this.type = type
+      this.type = type;
       this.formes = { ...row };
       this.lookVisible = true;
     },
@@ -150,20 +149,20 @@ export default {
         sendTime: "",
         messageContent: "",
         messageType: "",
-        fileName: "",
+        fileName: ""
       };
       this.$refs["eidtPostMsg"].resetFields();
       this.lookVisible = false;
     },
     submitMsg() {
-      this.$refs.eidtPostMsg.validate(async (flag) => {
+      this.$refs.eidtPostMsg.validate(async flag => {
         if (flag) {
           try {
             if (this.activeRow && this.activeRow.id) {
               let obj = { ...this.formes };
-              console.log(this.type,'type')
-              if(this.type){
-                obj.isIncludeSender = 0
+              console.log(this.type, "type");
+              if (this.type) {
+                obj.isIncludeSender = 0;
               }
               const res = await resetGroupMessageList({ ...obj });
               this.$message.success("修改成功");
@@ -171,13 +170,13 @@ export default {
               this.onClose();
             } else {
               let idList = this.chioseIdList
-                .map((group) => {
+                .map(group => {
                   return group.id;
                 })
                 .join(",");
               let obj = { ...this.formes, targetIds: idList };
-                  if(this.type){
-                obj.isIncludeSender = 0
+              if (this.type) {
+                obj.isIncludeSender = 0;
               }
               const res = await sendGroupMsg({ ...obj });
               this.$message.success("发送成功");
@@ -199,10 +198,10 @@ export default {
         firstDayOfWeek: 1,
         disabledDate(time) {
           return time.getTime() + 86400000 < new Date().getTime();
-        },
+        }
       };
-    },
-  },
+    }
+  }
 };
 </script>
 <style lang="scss" scoped>

+ 8 - 0
src/views/liveClassManager/api.js

@@ -275,3 +275,11 @@ export const sysTenantConfigAll = data => {
     method: "get"
   });
 };
+
+// 直播课详情
+export const liveGroupDetail = data => {
+  return request({
+    url: "/api-web/vipGroupManage/liveGroupDetail/" + data.id,
+    method: "get"
+  });
+};

+ 11 - 7
src/views/liveClassManager/createLiveClass.vue

@@ -246,6 +246,7 @@
               <el-form-item
                 :prop="'timeTable.' + scope.$index + '.teachingContent'"
                 :rules="[{ required: true, message: '请输入内容' }]"
+                style="margin-bottom: 0;"
               >
                 <el-input
                   v-model="scope.row.teachingContent"
@@ -266,6 +267,7 @@
               <el-form-item
                 :prop="'timeTable.' + scope.$index + '.teachingPoint'"
                 :rules="[{ required: true, message: '请输入技能/知识点掌握' }]"
+                style="margin-bottom: 0;"
               >
                 <!-- v-model="scope.row.teachingPoint" -->
                 <el-input
@@ -310,7 +312,7 @@
           style="margin: 20px 0"
         />
         <el-row :gutter="20">
-          <el-col :span="10">
+          <el-col :span="6">
             <el-form-item
               label="直播设备"
               prop="os"
@@ -330,7 +332,7 @@
               </el-radio-group>
             </el-form-item>
           </el-col>
-          <el-col :span="10">
+          <el-col :span="6">
             <el-form-item
               label="直播场景"
               prop="useScene"
@@ -343,7 +345,7 @@
             </el-form-item>
           </el-col>
 
-          <el-col :span="10">
+          <el-col :span="6">
             <el-form-item
               prop="roomConfig.whether_video"
               label="保存直播回放"
@@ -355,7 +357,7 @@
               </el-radio-group>
             </el-form-item>
           </el-col>
-          <el-col :span="10">
+          <el-col :span="6">
             <el-form-item
               prop="roomConfig.whether_view_shop_cart"
               label="是否展示购物车"
@@ -473,13 +475,11 @@ export default {
           whether_mic: 0,
           whether_view_shop_cart: 0
         },
-        checkList: [], //
         timeTable: [], // 排课
         clientType: "TEACHER" // 主讲人身份 默认[老师]
       },
 
       serviceProvider: "tencentCloud", // 直播模式
-      checkList: [],
       subjectList: [], // 声部列表
       teacherList: [], // 指导老师
       educationList: [], // 乐团主管
@@ -584,7 +584,11 @@ export default {
               serviceProvider: form.serviceProvider,
               viewMode: form.viewMode,
               popularizeType: form.popularizeType,
-              roomConfig: form.roomConfig
+              roomConfig: {
+                ...form.roomConfig,
+                subjectId: form.subjectIdList,
+                groupType: "LIVE"
+              }
             }
           };
           console.log(obj, "obj");

+ 15 - 8
src/views/liveClassManager/liveClassManager.vue

@@ -107,12 +107,12 @@
 
         <el-table-column
           align="center"
-          prop="speakerName"
+          prop="studentNum"
           label="报名人数"
         ></el-table-column>
         <el-table-column
           align="center"
-          prop="totalClassTimes"
+          prop="onlineClassesNum"
           label="课时数"
         ></el-table-column>
         <el-table-column align="center" label="分部">
@@ -132,7 +132,7 @@
           <template slot-scope="scope">
             <div>
               <auth auths="/liveBlackList">
-                <el-button type="text" @click="gotoBuylist(scope.row)"
+                <el-button type="text" @click="onDetail(scope.row)"
                   >详情</el-button
                 >
               </auth>
@@ -145,13 +145,11 @@
               <el-popover
                 placement="top"
                 width="160"
-                v-if="
-                  scope.row.status < 3 &&
-                    scope.row.enableDelete != 1 &&
-                    permission('vipGroupManage/stopVipGroup')
-                "
+                v-if="scope.row.status < 3 && scope.row.enableDelete != 1"
                 :ref="scope.$index"
               >
+                <!-- && -->
+                <!-- permission('vipGroupManage/stopVipGroup') -->
                 <p style="margin-bottom: 10px">确定停止该vip课?</p>
                 <el-input
                   v-model.trim="stopReason"
@@ -229,6 +227,15 @@ export default {
         route.meta.title = "新建直播课";
       });
     },
+    onDetail(row) {
+      this.$router.push({
+        path: "/business/liveCourseDetail",
+        query: {
+          name: row.name,
+          id: row.id
+        }
+      });
+    },
     onCancelVip(scope) {
       this.stopReason = null;
       scope._self.$refs[scope.$index].doClose();

+ 428 - 0
src/views/liveClassManager/liveClassTwo/components/courseAdjust.vue

@@ -0,0 +1,428 @@
+<!--  -->
+<template>
+  <div>
+    <el-button type="primary" style="margin-bottom: 12px;" @click="onAdjustment"
+      >批量调整</el-button
+    >
+    <div class="tableWrap">
+      <el-table
+        style="width: 100%"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        :data="tableList"
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column type="selection" width="55"></el-table-column>
+        <el-table-column
+          align="center"
+          prop="name"
+          label="上课日期"
+        ></el-table-column>
+        <el-table-column align="center" label="课程状态">
+          <template slot-scope="scope">
+            <div>{{ scope.row.status | coursesStatus }}</div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          align="center"
+          prop="startClassTime"
+          label="开始时间"
+        ></el-table-column>
+        <el-table-column
+          align="center"
+          prop="endClassTime"
+          label="结束时间"
+        ></el-table-column>
+      </el-table>
+      <pagination
+        sync
+        saveKey="liveClass-courseAdjust"
+        :total.sync="rules.total"
+        :page.sync="rules.page"
+        :limit.sync="rules.limit"
+        :page-sizes="rules.page_size"
+        @pagination="getList"
+      />
+    </div>
+
+    <el-dialog
+      :title="adjustmentName"
+      width="800px"
+      :visible.sync="adjustmentVisible"
+    >
+      <el-form
+        :model="adjustmentForm"
+        label-position="right"
+        label-width="120px"
+        ref="adjustmentForm"
+        :rules="adjustmentRules"
+        :inline="true"
+      >
+        <el-form-item label="已选择课时数">
+          <el-input disabled v-model.trim="adjustmentForm.count"></el-input>
+        </el-form-item>
+
+        <el-form-item label="课程类型" prop="courseType">
+          <el-select
+            clearable
+            v-model.trim="adjustmentForm.courseType"
+            disabled
+          >
+            <el-option label="线上课" value="ONLINE"></el-option>
+            <el-option label="线下课" value="OFFLINE"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item
+          label="教学地点"
+          v-if="adjustmentForm.courseType == 'OFFLINE'"
+        >
+          <el-select v-model.trim="adjustmentForm.address" filterable clearable>
+            <el-option
+              v-for="(item, index) in schoolList"
+              :key="index"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <br />
+        <el-form-item label="排课起始时间" prop="courseTime">
+          <el-date-picker
+            v-model.trim="adjustmentForm.courseTime"
+            :picker-options="pickerOptions()"
+            style="width:200px!important;"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择日期"
+          ></el-date-picker>
+          <el-checkbox
+            style="margin-left:10px;"
+            v-model.trim="adjustmentForm.checked"
+            >是否跳过节假日</el-checkbox
+          >
+        </el-form-item>
+      </el-form>
+      <div class="WeekWrap">
+        <h3 style="margin-bottom:20px;">
+          循环次数
+          <el-button type="text" style="margin-left:10px;" @click="addWeek"
+            >添加</el-button
+          >
+        </h3>
+        <div class="countWrap" style="margin-bottom:10px;">
+          <div
+            class="countItem"
+            style="margin-bottom:20px;"
+            v-for="(item, index) in weekList"
+            :key="index"
+          >
+            <span>循环周期:</span>
+            <el-select v-model.trim="item.dayOfWeek" filterable clearable>
+              <el-option
+                v-for="(item, index) in weekDateList"
+                :key="index"
+                :label="item.label"
+                :value="item.value"
+              ></el-option>
+            </el-select>
+            <span style="margin-left:10px;">开始时间</span>
+            <el-time-picker
+              style="margin-left:10px;"
+              placeholder
+              v-model.trim="item.startClassTime"
+              @change="
+                val => {
+                  changeStartTimes(val, item);
+                }
+              "
+              format="HH:mm"
+              value-format="HH:mm"
+              :picker-options="{
+                selectableRange: '06:00:00 - 21:00:00'
+              }"
+            ></el-time-picker>
+            <span style="margin-left:10px;">结束时间</span>
+            <el-time-picker
+              style="margin-left:10px;"
+              placeholder
+              v-model.trim="item.endClassTime"
+              format="HH:mm"
+              value-format="HH:mm"
+              disabled
+              :picker-options="{
+                selectableRange: '06:00:00 - 21:00:00'
+              }"
+            ></el-time-picker>
+            <el-button
+              style="margin-left:10px;"
+              type="danger"
+              :disabled="index < 1"
+              @click="removeWeek(item)"
+              icon="el-icon-delete"
+              circle
+            ></el-button>
+          </div>
+        </div>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="adjustmentVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitAdjustment">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import pagination from "@/components/Pagination/index";
+import {
+  findVipGroupCourseSchedules,
+  bathDelete,
+  appendVipGroupCourseSchedules,
+  vipCourseAdjust,
+  updateVipBaseInfo,
+  batchAppendVipGroupCourses,
+  vipGroupManageUpdate
+} from "@/api/vipSeting";
+export default {
+  components: {
+    pagination
+  },
+  data() {
+    return {
+      id: this.$route.query.id,
+      adjustmentName: "",
+      tableList: [],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      },
+      chioseVipList: [],
+      activeList: [],
+      adjustmentVisible: false,
+      adjustmentForm: {
+        count: "",
+        courseTime: "",
+        checked: false,
+        addCount: "",
+        courseType: "",
+        fee: "",
+        address: ""
+      },
+      adjustmentRules: {
+        courseTime: [{ required: true, message: "请选择开始时间" }],
+        addCount: [{ required: true, message: "请输入加课次数" }],
+        courseType: [{ required: true, message: "请选择课程类型" }],
+        fee: [{ required: true, message: "请输入费用" }],
+        address: [{ required: true, message: "请选择教学地点" }]
+      },
+      weekDateList: [
+        { value: "1", label: "星期一" },
+        { value: "2", label: "星期二" },
+        { value: "3", label: "星期三" },
+        { value: "4", label: "星期四" },
+        { value: "5", label: "星期五" },
+        { value: "6", label: "星期六" },
+        { value: "7", label: "星期日" }
+      ],
+      weekList: [
+        {
+          dayOfWeek: "",
+          startTime: "",
+          endTime: "",
+          moid: new Date().getTime()
+        }
+      ]
+    };
+  },
+  mounted() {
+    this.getList();
+  },
+  methods: {
+    getList() {
+      findVipGroupCourseSchedules({
+        vipGroupId: this.id,
+        rows: this.rules.limit,
+        page: this.rules.page,
+        gorupType: "LIVE"
+      }).then(res => {
+        if (res.code == 200) {
+          this.tableList = res.data.pageInfo.rows;
+          this.rules.total = res.data.pageInfo.total;
+          this.courseTime = res.data.singleClassMinutes;
+        }
+      });
+    },
+    addWeek() {
+      // 添加循环周期
+      this.weekList.push({
+        dayOfWeek: "",
+        startClassTime: "",
+        endClassTime: "",
+        id: new Date()
+      });
+    },
+    // 删除循环周
+    removeWeek(item) {
+      for (let i in this.weekList) {
+        if (this.weekList[i].id == item.id) {
+          this.weekList.splice(i, 1);
+        }
+      }
+    },
+    handleSelectionChange(val) {
+      this.chioseVipList = val;
+      this.adjustmentForm.count = val.length;
+      this.activeList = val;
+    },
+    onAdjustment() {
+      this.adjustmentName = "批量调整";
+      if (this.adjustmentForm.count <= 0) {
+        this.$message.error("请至少勾选一节课");
+      } else {
+        this.adjustmentVisible = true;
+      }
+    },
+    pickerOptions(dateStr) {
+      return {
+        firstDayOfWeek: 1,
+        disabledDate(time) {
+          return time.getTime() + 86400000 <= new Date().getTime();
+        }
+      };
+    },
+    submitAdjustment() {
+      this.$refs["adjustmentForm"].validate(item => {
+        if (item) {
+          let week = this.weekList;
+          if (!week[0] || !week[0].startClassTime || !week[0].dayOfWeek) {
+            this.$message.error("至少排一节课");
+            return;
+          }
+          // 开始
+          let obj = {};
+          obj.courseCreateStartTime = this.adjustmentForm.courseTime;
+          let idArr = this.activeList.map(item => {
+            return item.id;
+          });
+
+          let courseScheduleIds = idArr.join(",");
+          obj.courseScheduleIds = courseScheduleIds;
+          obj.courseTimes = this.weekList;
+          obj.holiday = this.adjustmentForm.checked;
+          obj.teachMode = this.adjustmentForm.courseType || null;
+          obj.groupType = "LIVE";
+          obj.vipGroupId = this.vipid;
+          obj.schoolId = this.adjustmentForm.address || null;
+          vipCourseAdjust(obj).then(res => {
+            if (res.code == 200) {
+              this.$message.success("恭喜您修改成功");
+              this.adjustmentVisible = false;
+              this.getList();
+            }
+          });
+        }
+      });
+    },
+    addCourseSubmit() {
+      this.$refs["adjustmentForm"].validate(item => {
+        if (item) {
+          let week = this.weekList;
+          if (!week[0] || !week[0].startClassTime || !week[0].dayOfWeek) {
+            this.$message.error("至少排一节课");
+            return;
+          }
+          // 开始
+          let obj = {};
+          obj.courseCreateStartTime = this.adjustmentForm.courseTime;
+          let idArr = this.activeList.map(item => {
+            return item.id;
+          });
+          let courseScheduleIds = idArr.join(",");
+          obj.courseScheduleIds = courseScheduleIds;
+          obj.courseTimes = this.weekList;
+          obj.holiday = this.adjustmentForm.checked;
+          obj.vipGroupId = this.vipid;
+          obj.courseCount = this.adjustmentForm.addCount;
+          obj.teachMode = this.adjustmentForm.courseType;
+          obj.singleClassPrice = this.adjustmentForm.fee;
+          obj.groupType = "LIVE";
+          batchAppendVipGroupCourses(obj).then(res => {
+            if (res.code == 200) {
+              this.$message.success("恭喜您添加成功");
+              this.adjustmentVisible = false;
+              this.getList();
+            }
+          });
+        }
+      });
+    }
+  },
+  filters: {
+    formatterTime(val) {
+      let result;
+      if (val) {
+        result = val.split(" ")[0];
+      } else {
+        result = "";
+      }
+      return result;
+    },
+    formatterStatus(val) {
+      let arr = [
+        "未开始",
+        "报名中",
+        "进行中",
+        "取消",
+        "已结束",
+        "报名结束",
+        "暂停"
+      ];
+      return arr[val];
+    }
+  }
+};
+</script>
+<style lang="scss" scoped>
+::v-deep .el-dropdown-link {
+  cursor: pointer;
+  color: var(--color-primary);
+}
+::v-deep .el-icon-arrow-down {
+  font-size: 12px;
+}
+
+.vipwrap {
+  display: flex;
+  flex-direction: row;
+  justify-content: flex-start;
+  .newBand {
+    margin-right: 20px;
+  }
+}
+.resetClassForm {
+  ::v-deep .el-date-editor.el-input,
+  ::v-deep .el-date-editor.el-input__inner {
+    width: 180px !important;
+  }
+}
+.countWrap {
+  ::v-deep .el-date-editor.el-input,
+  ::v-deep .el-date-editor.el-input__inner {
+    width: 100px !important;
+  }
+}
+
+.maskForm {
+  ::v-deep .el-input {
+    width: 220px !important;
+  }
+}
+.titlewrap {
+  display: flex;
+  flex-direction: row;
+  justify-content: flex-start;
+  align-items: center;
+}
+</style>

+ 557 - 0
src/views/liveClassManager/liveClassTwo/components/courseOverview.vue

@@ -0,0 +1,557 @@
+<!--  -->
+<template>
+  <div>
+    <div class="m-core">
+      <el-form ref="liveForm" :model="form" label-position="top">
+        <el-alert
+          title="课程规划"
+          :closable="false"
+          type="info"
+          style="margin: 0 0 20px"
+        />
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item
+              label="直播课标题"
+              prop="roomTitle"
+              :rules="[{ required: false, message: '请输入直播课标题' }]"
+            >
+              <el-input
+                v-model="form.roomTitle"
+                placeholder="请输入直播课标题"
+                maxlength="25"
+                :disabled="disabled"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item
+              label="分部"
+              prop="organIds"
+              :rules="[{ required: false, message: '请选择分部' }]"
+            >
+              <select-all
+                v-model.trim="form.organIds"
+                filterable
+                placeholder="请选择分部"
+                multiple
+                clearable
+                :disabled="disabled"
+              >
+                <el-option
+                  v-for="(item, index) in selects.branchs"
+                  :key="index"
+                  :label="item.name"
+                  :value="item.id"
+                ></el-option>
+              </select-all>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item
+              label="直播课内容"
+              prop="liveRemark"
+              :rules="[{ required: false, message: '请输入直播课内容' }]"
+            >
+              <el-input
+                type="textarea"
+                v-model="form.liveRemark"
+                placeholder="请输入直播课内容"
+                maxlength="200"
+                show-word-limit
+                :disabled="disabled"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item
+              label="声部"
+              prop="subjectIdList"
+              :rules="[{ required: false, message: '请选择声部' }]"
+            >
+              <el-select
+                v-model.trim="form.subjectIdList"
+                filterable
+                clearable
+                placeholder="请选择声部"
+                style="width: 100% !important"
+                :disabled="disabled"
+              >
+                <el-option
+                  v-for="(item, index) in subjectList"
+                  :key="index"
+                  :value="item.id"
+                  :label="item.name"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item
+              label="指导老师"
+              prop="teacher"
+              :rules="[{ required: false, message: '请选择指导老师' }]"
+            >
+              <el-select
+                v-model.trim="form.teacher"
+                filterable
+                clearable
+                placeholder="请选择指导老师"
+                style="width: 100% !important"
+                :disabled="!form.subjectIdList || disabled"
+              >
+                <el-option
+                  v-for="(item, index) in teacherList"
+                  :key="index"
+                  :label="item.realName"
+                  :value="item.id"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item
+              label="乐团主管"
+              prop="educationalTeacherId"
+              :rules="[{ required: false, message: '请选择乐团主管' }]"
+            >
+              <el-select
+                v-model.trim="form.educationalTeacherId"
+                filterable
+                clearable
+                style="width: 100% !important"
+                :disabled="disabled"
+              >
+                <el-option
+                  v-for="(item, key) in educationList"
+                  :key="key"
+                  :label="item.userName"
+                  :value="item.userId"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item
+              label="课程购买时间"
+              prop="signUpTimeList"
+              :rules="[{ required: false, message: '请选择课程购买时间' }]"
+            >
+              <!-- :default-time="['00:00:00', '23:59:59']" -->
+              <el-date-picker
+                style="width: 100%"
+                v-model="form.signUpTimeList"
+                type="daterange"
+                range-separator="-"
+                start-placeholder="购买开始日期"
+                end-placeholder="购买结束日期"
+                :disabled="disabled"
+              >
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item
+              label="课时数"
+              prop="onlineClassesNum"
+              :rules="[{ required: false, message: '请输入课时数' }]"
+            >
+              <el-input
+                v-model="form.onlineClassesNum"
+                placeholder="请输入课时数"
+                maxlength="2"
+                :disabled="disabled"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item
+              label="课程时长"
+              prop="singleClassMinuteId"
+              :rules="[{ required: false, message: '请选择课程时长' }]"
+            >
+              <el-select
+                v-model.trim="form.singleClassMinuteId"
+                filterable
+                clearable
+                style="width: 100% !important"
+                placeholder="请选择课程时长"
+                :disabled="disabled"
+              >
+                <el-option
+                  v-for="(item, key) in liveGroupList"
+                  :key="key"
+                  :label="item.singleClassMinutes"
+                  :value="item.id"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item
+              label="现价"
+              prop="onlineClassesUnitPrice"
+              :rules="[{ required: false, message: '请输入现价' }]"
+            >
+              <el-input
+                v-model="form.onlineClassesUnitPrice"
+                placeholder="请输入现价"
+                @keyup.native="keyupEvent($event)"
+                :disabled="disabled"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item
+              label="原价"
+              prop="offlineClassesUnitPrice"
+              :rules="[{ required: false, message: '请输入原价' }]"
+            >
+              <el-input
+                v-model="form.offlineClassesUnitPrice"
+                placeholder="请输入原价"
+                @keyup.native="keyupEvent($event)"
+                :disabled="disabled"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-table
+          style="width: 100%; margin-top: 20px;"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="form.timeTable"
+        >
+          <el-table-column align="center" label="课时">
+            <template slot-scope="scope">
+              第{{ scope.$index + 1 }}课
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            label="内容"
+            width="150px"
+            prop="teachingContent"
+            key="teachingContent"
+          >
+            <template slot-scope="scope">
+              <!-- {{ scope.row.teachingContent }} -->
+              <Tooltip :content="scope.row.teachingContent" />
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            label="技能/知识点掌握"
+            width="220px"
+            prop="teachingPoint"
+            key="teachingPoint"
+          >
+            <template slot-scope="scope">
+              <!-- {{ scope.row.teachingPoint }} -->
+              <Tooltip :content="scope.row.teachingPoint" />
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="singleClassMinutes"
+            label="时长"
+          ></el-table-column>
+          <el-table-column align="center" label="课程日期">
+            <template slot-scope="scope">
+              <div>{{ scope.row.classDate | formatTimer }}</div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="startClassTimeStr"
+            label="开始时间"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="endClassTimeStr"
+            label="结束时间"
+          ></el-table-column>
+          <el-table-column align="center" label="课程类型">
+            <template slot-scope="scope">
+              <div>{{ scope.row.teachMode | teachMode }}</div>
+            </template>
+          </el-table-column>
+        </el-table>
+
+        <el-alert
+          title="直播课信息"
+          :closable="false"
+          type="info"
+          style="margin: 20px 0"
+        />
+        <el-row :gutter="20">
+          <el-col :span="6">
+            <el-form-item
+              label="直播设备"
+              prop="os"
+              :rules="[{ required: false, message: '请选择推广类型' }]"
+            >
+              <el-radio-group v-model="form.os" :disabled="disabled">
+                <!-- 根据不同的模式,显示不同的直播设备 -->
+                <el-radio v-if="serviceProvider === 'rongCloud'" label="pc"
+                  >web</el-radio
+                >
+                <el-radio
+                  v-if="serviceProvider === 'tencentCloud'"
+                  label="client"
+                  >客户端</el-radio
+                >
+                <el-radio label="mobile">手机</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item
+              label="直播场景"
+              prop="useScene"
+              :rules="[{ required: false, message: '请选择直播场景' }]"
+            >
+              <el-radio-group v-model="form.useScene" :disabled="disabled">
+                <el-radio label="NORMAL">普通模式</el-radio>
+                <el-radio label="MUSIC">音乐模式</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="6">
+            <el-form-item
+              prop="roomConfig.whether_video"
+              label="保存直播回放"
+              :rules="[{ required: false, message: '是否保存直播回放' }]"
+            >
+              <el-radio-group
+                v-model="form.roomConfig.whether_video"
+                :disabled="disabled"
+              >
+                <el-radio :label="0">是</el-radio>
+                <el-radio :label="1">否</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item
+              prop="roomConfig.whether_view_shop_cart"
+              label="是否展示购物车"
+              :rules="[{ required: false, message: '是否展示购物车' }]"
+            >
+              <el-radio-group
+                v-model="form.roomConfig.whether_view_shop_cart"
+                :disabled="disabled"
+              >
+                <el-radio :label="0">是</el-radio>
+                <el-radio :label="1">否</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="24">
+            <el-form-item
+              label="预热模板(模板使用于分享宣传图片)"
+              prop="preTemplate"
+              :rules="[{ required: false, message: '请选择预热模板' }]"
+            >
+              <el-radio-group v-model="form.preTemplate" :disabled="disabled">
+                <div class="chioseWrap">
+                  <div class="chioseItem">
+                    <img src="../../images/img1.png" alt="" />
+                    <i
+                      class="dotWrap"
+                      :class="form.preTemplate == 1 ? 'checked' : ''"
+                    ></i>
+                  </div>
+                  <div class="chioseItem">
+                    <img src="../../images/img2.png" alt="" />
+                    <i
+                      class="dotWrap"
+                      :class="form.preTemplate == 2 ? 'checked' : ''"
+                    ></i>
+                  </div>
+                  <div class="chioseItem">
+                    <img src="../../images/img3.png" alt="" />
+                    <i
+                      class="dotWrap"
+                      :class="form.preTemplate == 3 ? 'checked' : ''"
+                    ></i>
+                  </div>
+                </div>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </div>
+  </div>
+</template>
+
+<script>
+import Tooltip from "@/components/Tooltip/index";
+import { liveGroupDetail } from "../../api";
+export default {
+  components: {
+    Tooltip
+  },
+  data() {
+    return {
+      disabled: true,
+      tableList: [],
+      form: {
+        roomTitle: "", //
+        liveRemark: "", // 内容
+        organIds: [],
+        subjectIdList: null, // 声部
+        teacher: "", // 指导老师列表
+        educationalTeacherId: null, // 乐团主管
+        preTemplate: 1, // 模板
+        signUpStart: null, // 开始时间
+        signUpEnd: null, // 结束时间
+        signUpTimeList: [], // 课程购买时间
+        onlineClassesNum: null,
+        singleClassMinuteId: null, //时长编号
+        singleClassMinutes: null, // 时长
+        onlineClassesUnitPrice: null, // 售价
+        offlineClassesUnitPrice: null, // 原价
+        os: "client", // 直播设备
+        useScene: "NORMAL", // 直播场景
+        popularizeType: "ALL", // 观看权限信息
+        viewMode: "LOGIN",
+        roomConfig: {
+          whether_like: 0,
+          whether_chat: 0,
+          whether_video: 0,
+          whether_mic: 0,
+          whether_view_shop_cart: 0
+        },
+        timeTable: [], // 排课
+        clientType: "TEACHER" // 主讲人身份 默认[老师]
+      },
+      serviceProvider: "tencentCloud", // 直播模式
+      subjectList: [], // 声部列表
+      teacherList: [], // 指导老师
+      educationList: [], // 乐团主管
+      liveGroupList: [] // 课时列表
+    };
+  },
+  mounted() {
+    this.getList();
+  },
+  methods: {
+    async getList() {
+      try {
+        const query = this.$route.query;
+        const { data } = await liveGroupDetail({ id: query.id });
+        console.log(data, "data");
+
+        const liveBroadcastRoom = data.liveBroadcastRoom || {};
+        const vipGroupApplyBaseInfo = data.vipGroupApplyBaseInfo || {};
+        const courseSchedules = data.courseSchedules || [];
+        const tempCourse = [];
+        courseSchedules.forEach(item => {
+          tempCourse.push({
+            classDate: item.classDate,
+            actualTeacherId: item.teacherId,
+            startClassTimeStr: item.startClassTimeStr,
+            endClassTimeStr: item.endClassTimeStr,
+            teachMode: "ONLINE",
+            singleClassMinutes: vipGroupApplyBaseInfo.singleClassMinutes,
+            teachingContent: item.teachingContent,
+            teachingPoint: item.teachingPoint
+          });
+        });
+
+        // 初始化数据
+        this.form = {
+          roomTitle: liveBroadcastRoom.roomTitle, //
+          liveRemark: liveBroadcastRoom.liveRemark, // 内容
+          organIds: vipGroupApplyBaseInfo.organName.split(","),
+          subjectIdList: vipGroupApplyBaseInfo.subjectName, // 声部
+          teacher: liveBroadcastRoom.speakerName, // 指导老师列表
+          educationalTeacherId: vipGroupApplyBaseInfo.educationalTeacherName, // 乐团主管
+          preTemplate: liveBroadcastRoom.preTemplate, // 模板
+          signUpStart: null, // 开始时间
+          signUpEnd: null, // 结束时间
+          signUpTimeList: [
+            vipGroupApplyBaseInfo.registrationStartTime,
+            vipGroupApplyBaseInfo.paymentExpireDate
+          ], // 课程购买时间
+          onlineClassesNum: vipGroupApplyBaseInfo.onlineClassesNum,
+          singleClassMinuteId: vipGroupApplyBaseInfo.singleClassMinutes, //时长编号
+          singleClassMinutes: vipGroupApplyBaseInfo.singleClassMinutes, // 时长
+          onlineClassesUnitPrice: vipGroupApplyBaseInfo.onlineClassesUnitPrice, // 售价
+          offlineClassesUnitPrice:
+            vipGroupApplyBaseInfo.offlineClassesUnitPrice, // 原价
+          os: liveBroadcastRoom.os, // 直播设备
+          useScene: liveBroadcastRoom.useScene, // 直播场景
+          popularizeType: liveBroadcastRoom.popularizeType, // 观看权限信息
+          viewMode: liveBroadcastRoom.viewMode,
+          roomConfig: liveBroadcastRoom.roomConfig || {
+            whether_like: 0,
+            whether_chat: 0,
+            whether_video: 0,
+            whether_mic: 0,
+            whether_view_shop_cart: 0
+          },
+          timeTable: tempCourse, // 排课
+          clientType: "TEACHER" // 主讲人身份 默认[老师]
+        };
+      } catch {
+        //
+      }
+    }
+  }
+};
+</script>
+<style lang="scss" scoped>
+.chioseWrap {
+  display: flex;
+  flex-direction: row;
+  justify-content: flex-start;
+  .chioseItem {
+    border-radius: 4px;
+    overflow: hidden;
+    position: relative;
+    margin-right: 10px;
+    width: 188px;
+    height: 188px;
+    cursor: pointer;
+
+    .dotWrap {
+      width: 21px;
+      height: 21px;
+      background: url("../../../../assets/images/icon_checkbox_default.png")
+        no-repeat center;
+      background-size: contain;
+      display: block;
+      position: absolute;
+      top: 10px;
+      right: 12px;
+      overflow: hidden;
+      &.checked {
+        background: url("../../../../assets/images/icon_checkbox.png") no-repeat
+          center;
+        background-size: contain;
+      }
+    }
+  }
+}
+
+::v-deep .el-select > .el-input {
+  height: 36px !important;
+}
+::v-deep .select-all {
+  .select {
+    .el-input__inner {
+      height: 36px !important;
+      min-height: 36px !important;
+    }
+  }
+  .btn {
+    height: 36px !important;
+    min-height: 36px !important;
+  }
+}
+</style>

+ 205 - 0
src/views/liveClassManager/liveClassTwo/components/studentList.vue

@@ -0,0 +1,205 @@
+<!--  -->
+<template>
+  <div>
+    <div class="tableWrap">
+      <el-table
+        style="width: 100%"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        :data="tableList"
+      >
+        <el-table-column
+          align="center"
+          prop="id"
+          label="编号"
+        ></el-table-column>
+        <el-table-column
+          align="center"
+          prop="organName"
+          label="分部"
+        ></el-table-column>
+        <el-table-column align="center" label="学员姓名" prop="userName">
+        </el-table-column>
+        <!-- <el-table-column
+          align="center"
+          prop="userName"
+          label="学校姓名"
+        ></el-table-column> -->
+        <el-table-column
+          align="center"
+          prop="subjectName"
+          label="声部"
+        ></el-table-column>
+        <el-table-column
+          align="center"
+          prop="phone"
+          label="手机号"
+        ></el-table-column>
+        <el-table-column align="center" prop="applyDate" label="报名时间">
+          <template slot-scope="scope">
+            <p>{{ scope.row.applyDate | formatTimer }}</p>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="studentId" label="操作">
+          <template slot-scope="scope">
+            <div>
+              <auth auths="/liveBlackList">
+                <el-button
+                  type="text"
+                  v-if="
+                    scope.row.studentStatus == 0 || scope.row.studentStatus == 3
+                  "
+                  @click="lookFee(scope)"
+                  >退学</el-button
+                >
+              </auth>
+            </div>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        sync
+        saveKey="liveClass-courseOverview"
+        :total.sync="rules.total"
+        :page.sync="rules.page"
+        :limit.sync="rules.limit"
+        :page-sizes="rules.page_size"
+        @pagination="getStudents"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import {
+  findVipGroupStudents,
+  leaveSchool,
+  getStudentSurplusCourseFee
+} from "@/api/vipSeting";
+import pagination from "@/components/Pagination/index";
+export default {
+  components: {
+    pagination
+  },
+  data() {
+    return {
+      id: this.$route.query.id,
+      tableList: [],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      }
+    };
+  },
+  mounted() {
+    this.getStudents();
+  },
+  methods: {
+    getStudents() {
+      findVipGroupStudents({ vipGroupId: this.id, groupType: "LIVE" }).then(
+        res => {
+          if (res.code == 200) {
+            this.tableList = res.data.rows;
+            for (let i in this.tableList) {
+              this.tableList[i].fee = 0;
+              this.tableList[i].visible = false;
+            }
+            this.rules.total = res.data.total;
+          }
+        }
+      );
+    },
+    leaveSchool(scope) {
+      let studentId = scope.row.id;
+      let vipGroupId = this.id;
+      let amount = scope.row.fee;
+      leaveSchool({ studentId, vipGroupId, amount }).then(res => {
+        if (res.code == 200) {
+          this.$message.success("退学成功");
+          this.getStudents();
+        }
+        if (res.code == 206) {
+          this.$confirm(res.msg, "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消"
+          }).then(() => {
+            leaveSchool({
+              studentId,
+              vipGroupId,
+              amount,
+              confirmReturnActivityGive: true
+            }).then(res => {
+              if (res.code == 200) {
+                this.$message.success("退学成功");
+                this.getStudents();
+              }
+            });
+          });
+        }
+      });
+    },
+    lookFee(scope) {
+      this.$confirm(`确定是否退学?`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(() => {
+          let id = scope.row.id;
+          if (scope.row.studentStatus == 3) {
+            this.leaveSchool(scope);
+          } else {
+            getStudentSurplusCourseFee({
+              studentId: id,
+              vipGroupId: this.id
+            }).then(res => {
+              if (res.code == 200) {
+                scope.row.fee = res.data.suplusCourseFee;
+                const h = this.$createElement;
+                this.$msgbox({
+                  title: "消息",
+                  closeOnClickModal: false,
+                  message: h("p", null, [
+                    h("p", null, "请输入退课金额 "),
+                    h("input", {
+                      class: "el-input__inner",
+                      attrs: { value: res.data.suplusCourseFee },
+                      on: {
+                        input: function(event) {
+                          scope.row.fee = event.target.value;
+                          this.$emit("input", event.target.value);
+                        }.bind(this)
+                      }
+                    }),
+                    h(
+                      "p",
+                      { style: "color: red;marginTop:20px" },
+                      "退费金额暂不进入账户余额"
+                    )
+                  ]),
+                  showCancelButton: true,
+                  confirmButtonText: "确定",
+                  cancelButtonText: "取消"
+                }).then(action => {
+                  this.leaveSchool(scope);
+                });
+              }
+            });
+          }
+        })
+        .catch(() => {});
+    }
+  }
+};
+</script>
+<style lang="scss" scoped>
+::v-deep .el-dropdown-link {
+  cursor: pointer;
+  color: var(--color-primary);
+}
+::v-deep .el-icon-arrow-down {
+  font-size: 12px;
+}
+</style>

+ 72 - 0
src/views/liveClassManager/liveClassTwo/index.vue

@@ -0,0 +1,72 @@
+<template>
+  <div class="m-container">
+    <h2>
+      <el-page-header @back="onCancel" :content="className"></el-page-header>
+    </h2>
+    <div class="m-core">
+      <!-- navMenu -->
+      <tab-router
+        v-model.trim="activeName"
+        type="card"
+        @tab-click="handleClick"
+      >
+        <el-tab-pane label="课程总览" lazy name="1">
+          <!-- v-if="permissionList.vipBase" -->
+          <courseOverview v-if="activeName == '1'" />
+        </el-tab-pane>
+        <el-tab-pane label="学生列表" lazy name="2">
+          <studentList v-if="activeName == '2'" />
+        </el-tab-pane>
+        <el-tab-pane label="课表调整" lazy name="3">
+          <courseAdjust v-if="activeName == '3'" />
+        </el-tab-pane>
+      </tab-router>
+    </div>
+  </div>
+</template>
+<script>
+import courseOverview from "./components/courseOverview.vue";
+import studentList from "./components/studentList.vue";
+import courseAdjust from "./components/courseAdjust.vue";
+import { permission } from "@/utils/directivePage"; // 权限
+export default {
+  components: { courseOverview, courseAdjust, studentList },
+  name: "vipDetail",
+  data() {
+    return {
+      activeName: "1",
+      className: "",
+      rules: null,
+      searchForm: null,
+      vipDetail: null
+      // permissionList: {
+      //   vipBase: permission("/vipDetail/vipBase"),
+      //   teacherRecord: permission("/vipDetail/teacherRecord"),
+      //   fnanceInfo: permission("/vipDetail/fnanceInfo"),
+      //   vipStudentList: permission("/vipDetail/vipStudentList"),
+      //   vipReset: permission("/vipReset")
+      // }
+    };
+  },
+  mounted() {
+    this.__init();
+  },
+  methods: {
+    __init() {
+      let querys = this.$route.query;
+      this.className = querys.name;
+      // 获取vip基本信息
+      // let id = this.$route.query.id;
+      // 根据id 获取vip详情
+    },
+    handleClick(val) {
+      this.activeName = val.name;
+    },
+    onCancel() {
+      this.$store.dispatch("delVisitedViews", this.$route);
+      this.$router.push({ path: "/liveClassManager?tabrouter=2" });
+    }
+  }
+};
+</script>
+<style lang="scss"></style>

文件差异内容过多而无法显示
+ 367 - 331
src/views/vipClass/vipReset.vue


部分文件因为文件数量过多而无法显示