lex 2 years ago
parent
commit
8256e0471d

+ 1 - 1
src/constant/index.js

@@ -543,7 +543,7 @@ export const quiteReason = {
 export const osType = {
   pc: "web",
   mobile: "手机",
-  client: "客户端"
+  client: "乐直播"
 };
 
 export const serviceProvider = {

+ 144 - 21
src/views/liveClassManager/createLiveClass.vue

@@ -20,7 +20,8 @@
           </el-col>
           <el-col :span="10">
             <el-form-item label="分部" prop="organIds" :rules="[{ required: true, message: '请选择分部' }]">
-              <select-all v-model.trim="form.organIds" filterable placeholder="请选择分部" multiple clearable>
+              <select-all v-model.trim="form.organIds" filterable placeholder="请选择分部" multiple clearable
+                :disabled="isDisabled">
                 <el-option v-for="(item, index) in selects.branchs" :key="index" :label="item.name"
                   :value="item.id"></el-option>
               </select-all>
@@ -29,7 +30,7 @@
           <el-col :span="10">
             <el-form-item label="声部" prop="subjectIdList" :rules="[{ required: true, message: '请选择声部' }]">
               <el-select v-model.trim="form.subjectIdList" filterable clearable @change="onChangeSubject"
-                placeholder="请选择声部" style="width: 100% !important">
+                placeholder="请选择声部" style="width: 100% !important" :disabled="isDisabled">
                 <el-option v-for="(item, index) in subjectList" :key="index" :value="item.id" :label="item.name" />
               </el-select>
             </el-form-item>
@@ -51,10 +52,27 @@
             </el-form-item>
           </el-col>
           <el-col :span="10">
-            <el-form-item label="课程购买时间" prop="signUpTimeList" :rules="[{ required: true, message: '请选择课程购买时间' }]">
-              <el-date-picker style="width: 100%" v-model="form.signUpTimeList" :picker-options="pickerOptions"
+            <el-form-item label="课程购买开始时间" prop="signUpStart" :rules="[{ required: true, message: '请选择课程购买开始时间' }]">
+              <!-- <el-date-picker style="width: 100%" v-model="form.signUpTimeList" :picker-options="pickerOptions"
                 type="daterange" :default-time="['00:00:00', '23:59:59']" range-separator="-" start-placeholder="购买开始日期"
                 end-placeholder="购买结束日期">
+              </el-date-picker> -->
+              <el-date-picker v-model="form.signUpStart" :picker-options="startBigin()" type="date"
+                style="width: 100% !important" placeholder="购买开始日期" @change="() => {
+                  form.signUpEnd = ''
+                  form.timeTable = []; // 课表重置
+                }" :disabled="isDisabled">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="10">
+            <el-form-item label="课程购买结束时间" prop="signUpEnd" :rules="[{ required: true, message: '请选择课程购买结束时间' }]">
+              <el-date-picker v-model="form.signUpEnd" type="date" :picker-options="beginDate()"
+                style="width: 100% !important" placeholder="购买结束日期" @change="() => {
+                  if (status == 0) {
+                    form.timeTable = []; // 课表重置
+                  }
+                }" :disabled="type === 'update' && status === 2">
               </el-date-picker>
             </el-form-item>
           </el-col>
@@ -66,13 +84,13 @@
                 @input="(val) => { form.onlineClassesNum = val.replace(/[^\d]/g, '') }" @change="() => {
                   form.timeTable = []; // 课表重置
                 }
-                  "></el-input>
+                  " :disabled="isDisabled"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="10">
             <el-form-item label="课程时长" prop="singleClassMinuteId" :rules="[{ required: true, message: '请选择课程时长' }]">
               <el-select v-model.trim="form.singleClassMinuteId" filterable clearable style="width: 100% !important"
-                placeholder="请选择课程时长" @change="onSingleClassChange">
+                placeholder="请选择课程时长" @change="onSingleClassChange" :disabled="isDisabled">
                 <el-option v-for="(   item, key   ) in    liveGroupList   " :key="key" :label="item.singleClassMinutes"
                   :value="item.id" />
               </el-select>
@@ -81,13 +99,15 @@
           <el-col :span="10">
             <el-form-item label="现单价" prop="onlineClassesUnitPrice" :rules="[{ required: true, message: '请输入现单价' }]">
               <el-input v-model="form.onlineClassesUnitPrice" placeholder="请输入现单价" maxlength="9"
-                @input="(val) => { form.onlineClassesUnitPrice = val.replace(/[^\d]/g, '') }"></el-input>
+                @input="(val) => { form.onlineClassesUnitPrice = val.replace(/[^\d]/g, '') }"
+                :disabled="isDisabled"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="10">
             <el-form-item label="原单价" prop="offlineClassesUnitPrice" :rules="[{ required: true, message: '请输入原单价' }]">
               <el-input v-model="form.offlineClassesUnitPrice" placeholder="请输入原单价" maxlength="9"
-                @input="(val) => { form.offlineClassesUnitPrice = val.replace(/[^\d]/g, '') }"></el-input>
+                @input="(val) => { form.offlineClassesUnitPrice = val.replace(/[^\d]/g, '') }"
+                :disabled="isDisabled"></el-input>
             </el-form-item>
           </el-col>
 
@@ -103,7 +123,7 @@
           </el-col>
         </el-row>
 
-        <el-button type="danger" @click="onTimeTable">点击排课</el-button>
+        <el-button type="danger" @click="onTimeTable" :disabled="isDisabled">点击排课</el-button>
         <el-table style="width: 100%; margin-top: 20px;" :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
           :data="form.timeTable">
           <el-table-column align="center" label="课时">
@@ -115,7 +135,8 @@
             <template slot-scope="scope">
               <el-form-item :prop="'timeTable.' + scope.$index + '.teachingContent'"
                 :rules="[{ required: true, message: '请输入内容' }]" style="margin-bottom: 0;">
-                <el-input v-model="scope.row.teachingContent" placeholder="请输入内容" maxlength="20">
+                <el-input v-model="scope.row.teachingContent" placeholder="请输入内容" maxlength="20"
+                  :disabled="type === 'update' && status === 2">
                 </el-input>
               </el-form-item>
             </template>
@@ -124,7 +145,8 @@
             <template slot-scope="scope">
               <el-form-item :prop="'timeTable.' + scope.$index + '.teachingPoint'"
                 :rules="[{ required: true, message: '请输入技能/知识点掌握' }]" style="margin-bottom: 0;">
-                <el-input v-model="form.timeTable[scope.$index].teachingPoint" placeholder="请输入技能/知识点掌握" maxlength="20">
+                <el-input v-model="form.timeTable[scope.$index].teachingPoint" placeholder="请输入技能/知识点掌握" maxlength="20"
+                  :disabled="type === 'update' && status === 2">
                 </el-input>
               </el-form-item>
             </template>
@@ -216,7 +238,7 @@
     </div>
 
     <el-dialog title="排课" ref="maskForm" width="500px" :visible.sync="dialogFormVisible">
-      <addLiveCourse :singleClassMinutes="form.singleClassMinutes" :signUpTimeList="form.signUpTimeList"
+      <addLiveCourse :singleClassMinutes="form.singleClassMinutes" :signUpEnd="form.signUpEnd"
         :onlineCourseNum="form.onlineClassesNum" @close="dialogFormVisible = false" @confirm="onConfirm" />
     </el-dialog>
   </div>
@@ -226,18 +248,20 @@ import dayjs from "dayjs";
 import deepClone from "@/helpers/deep-clone";
 import preview from "./modals/preview.vue";
 import addLiveCourse from "./modals/addLiveCourse.vue";
-import { sysTenantConfigAll, findTeacherByTenantId } from "./api";
+import { sysTenantConfigAll, findTeacherByTenantId, liveGroupDetail } from "./api";
 import {
   getSubject,
-
   getOrganRole
 } from "@/api/buildTeam";
 import { vipGroupCategory, createVip } from "@/api/vipSeting";
 export default {
   components: { preview, addLiveCourse },
   data() {
+    const query = this.$route.query;
     return {
-      name: "新建直播课",
+      name: query.type == 'update' ? "修改直播课" : '新建直播课',
+      id: query.id,
+      type: query.type,
       dialogFormVisible: false,
       form: {
         roomTitle: "", //
@@ -269,7 +293,8 @@ export default {
         timeTable: [], // 排课
         clientType: "TEACHER" // 主讲人身份 默认[老师]
       },
-
+      status: 0, // 直播课状态
+      courseStartDate: null, // 课程开始时间
       serviceProvider: "tencentCloud", // 直播模式
       subjectList: [], // 声部列表
       teacherList: [], // 指导老师
@@ -360,10 +385,10 @@ export default {
               onlineClassesNum: form.onlineClassesNum || 0,
               offlineClassesUnitPrice: form.offlineClassesUnitPrice || 0,
               onlineClassesUnitPrice: form.onlineClassesUnitPrice || 0,
-              registrationStartTime: dayjs(form.signUpTimeList[0]).format(
+              registrationStartTime: dayjs(form.signUpStart).format(
                 "YYYY-MM-DD"
               ),
-              paymentExpireDate: dayjs(form.signUpTimeList[0]).format(
+              paymentExpireDate: dayjs(form.signUpEnd).format(
                 "YYYY-MM-DD"
               ),
               singleClassMinutes: form.singleClassMinutes,
@@ -430,7 +455,7 @@ export default {
     async onTimeTable() {
       let count = 0;
       this.$refs.liveForm.validateField(
-        ["signUpTimeList", "onlineClassesNum", "singleClassMinuteId"],
+        ["signUpStart", "signUPEnd", "onlineClassesNum", "singleClassMinuteId"],
         valid => {
           count += 1;
           if (valid) {
@@ -444,6 +469,36 @@ export default {
         }
       );
     },
+    beginDate() {
+      const timer = this.form.signUpStart || ''
+      const courseTimer = this.courseStartDate ? dayjs(this.courseStartDate).format('YYYY-MM-DD') : ''
+      const type = this.type
+      // console.log(type, courseTimer, 'courseTimer')
+      return {
+        firstDayOfWeek: 1,
+        disabledDate(time) {
+          if (timer) {
+            if (courseTimer && type === 'update') {
+              // console.log(new Date(timer).getTime(), time.getTime(), new Date(timer).getTime() >= time.getTime(), dayjs(time).format('YYYY-MM-DD'), new Date(courseTimer + ' 00:00:00').getTime(), time.getTime() >= new Date(courseTimer + ' 00:00:00').getTime(), courseTimer)
+              return new Date(timer).getTime() > time.getTime() || time.getTime() >= new Date(courseTimer + ' 00:00:00').getTime();
+            } else {
+              return new Date(timer).getTime() > time.getTime();
+            }
+          } else {
+            return time.getTime() + 86400000 <= new Date().getTime();
+          }
+        },
+      };
+    },
+    startBigin() {
+      return {
+        firstDayOfWeek: 1,
+        disabledDate(time) {
+          // return time.getTime() >= Date.now();
+          return time.getTime() + 86400000 <= new Date().getTime();
+        },
+      };
+    },
     onScrollError() {
       this.$nextTick(() => {
         let isError = document.getElementsByClassName("is-error");
@@ -513,7 +568,7 @@ export default {
         });
 
         // 获取乐团主管
-        await getOrganRole().then(ruselt => {
+        await getOrganRole({ all: true }).then(ruselt => {
           this.educationList = ruselt?.data?.EDUCATION;
         });
 
@@ -526,6 +581,70 @@ export default {
             this.liveGroupList = res.data;
           }
         });
+
+        // 获取详情
+        if (this.id) {
+          const query = this.$route.query;
+          const { data } = await liveGroupDetail({ id: query.id });
+          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
+            });
+          });
+
+          const subjectId = vipGroupApplyBaseInfo.subjectIdList ? Number(vipGroupApplyBaseInfo.subjectIdList) : ''
+          await this.onChangeSubject(subjectId)
+
+          // 初始化数据
+          this.form = {
+            roomTitle: liveBroadcastRoom.roomTitle, //
+            liveRemark: liveBroadcastRoom.liveRemark, // 内容
+            organIds: vipGroupApplyBaseInfo.organIdList ? vipGroupApplyBaseInfo.organIdList.split(",").map(item => Number(item)) : [],
+            subjectIdList: subjectId, // 声部
+            teacher: liveBroadcastRoom.speakerId, // 指导老师列表
+            educationalTeacherId: vipGroupApplyBaseInfo.educationalTeacherId, // 乐团主管
+            preTemplate: liveBroadcastRoom.preTemplate, // 模板
+            signUpStart: vipGroupApplyBaseInfo.registrationStartTime, // 开始时间
+            signUpEnd: vipGroupApplyBaseInfo.paymentExpireDate, // 结束时间
+            // 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" // 主讲人身份 默认[老师]
+          };
+
+          this.status = data.vipGroupApplyBaseInfo.status
+          this.courseStartDate = data.vipGroupApplyBaseInfo.courseStartDate
+        }
       } catch (e) {
         //
         console.log(e, "e info");
@@ -539,6 +658,10 @@ export default {
     countOfflineClassesUnitPrice() {
       return this.form.onlineClassesNum * this.form.offlineClassesUnitPrice || 0
     },
+    isDisabled() {
+      console.log(this.status, this.type, 'isDisabled');
+      return this.type === 'update' && [1, 2].includes(this.status) ? true : false
+    }
   }
 };
 </script>
@@ -584,7 +707,7 @@ export default {
   height: 36px !important;
 }
 
-::v-deep .el-col-8 .el-form-item__content {
+::v-deep .el-col-10 .el-form-item__content {
   height: 36px !important;
 }
 

+ 48 - 30
src/views/liveClassManager/liveClassManager.vue

@@ -16,22 +16,16 @@
       <el-form-item props="teacherId">
         <remote-search :commit="'setTeachers'" v-model="searchForm.teacherId" :isForzenWithQueryCondition="true" />
       </el-form-item>
+      <el-form-item prop="subjectId">
+        <el-select placeholder="课程组类型" v-model="searchForm.subjectId" clearable>
+          <el-option v-for="(item, index) in subjectList" :key="index" :value="item.id" :label="item.name" />
+        </el-select>
+      </el-form-item>
       <el-form-item prop="status">
         <el-select v-model.trim="searchForm.status" filterable clearable placeholder="请选课程组状态">
           <el-option v-for="(item, index) in statusList" :key="index" :label="item.lable" :value="item.value"></el-option>
         </el-select>
       </el-form-item>
-      <!-- <el-form-item prop="serviceProvider">
-        <el-select
-          placeholder="课程类型"
-          v-model="searchForm.serviceProvider"
-          clearable
-        >
-          <el-option label="乐理" value="rongCloud"></el-option>
-          <el-option label="乐器" value="tencentCloud"></el-option>
-        </el-select>
-      </el-form-item> -->
-
       <el-form-item>
         <el-button native-type="submit" type="primary">搜索</el-button>
         <el-button native-type="reset" type="danger">重置</el-button>
@@ -41,11 +35,7 @@
       <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="name" label="课程组名称"></el-table-column>
-        <!-- <el-table-column
-          align="center"
-          prop="roomTitle"
-          label="课程类型"
-        ></el-table-column> -->
+        <el-table-column align="center" prop="subjectName" label="课程组类型"></el-table-column>
         <el-table-column align="center" label="课程组状态">
           <template slot-scope="scope">
             <div>{{ scope.row.status | formatterStatus }}</div>
@@ -75,16 +65,8 @@
               <auth auths="/liveBlackList">
                 <el-button type="text" @click="onDetail(scope.row)">详情</el-button>
               </auth>
-              <!-- <auth auths="vipGroupManage/stopVipGroup" v-if="scope.row.status < 3 &&
-                      scope.row.enableDelete != 1">
-                <el-button type="text" @click="onCloseVip(scope.row)"
-                  >停止</el-button
-                >
-              </auth> -->
               <el-popover placement="top" width="160" v-if="scope.row.status < 3 && scope.row.enableDelete != 1"
                 :ref="scope.$index">
-                <!-- && -->
-                <!-- permission('vipGroupManage/stopVipGroup') -->
                 <p style="margin-bottom: 10px">确定关闭该直播课?</p>
                 <el-input v-model.trim="stopReason" placeholder="请输入关闭原因"></el-input>
                 <div style="text-align: right; margin-top: 20px">
@@ -93,6 +75,10 @@
                 </div>
                 <el-button type="text" slot="reference">关闭</el-button>
               </el-popover>
+
+              <auth auths="vipGroupManage/stopVipGroup" v-if="[0, 1, 2].includes(scope.row.status)">
+                <el-button type="text" @click="onUpdate(scope.row)">修改</el-button>
+              </auth>
             </div>
           </template>
         </el-table-column>
@@ -106,6 +92,7 @@
 <script>
 import pagination from "@/components/Pagination/index";
 import { getVipList, closeVip } from "@/api/vipSeting";
+import { getSubject } from "@/api/buildTeam";
 export default {
   components: {
     pagination
@@ -115,6 +102,7 @@ export default {
       searchForm: {
         search: null,
         teacherId: null,
+        subjectId: null,
         status: null
       },
       tableList: [],
@@ -131,13 +119,32 @@ export default {
         { lable: "报名结束", value: "5" },
         { lable: "进行中", value: "2" },
         { lable: "已结束", value: "4" },
-        { lable: "取消", value: "3" },
-        { lable: "暂停", value: "6" }
+        { lable: "关闭", value: "3" },
+        { lable: "取消", value: "6" },
       ],
-      stopReason: ""
+      stopReason: "",
+      subjectList: []
     };
   },
-  mounted() {
+  async mounted() {
+    try {
+      // 获取 指导老师列表
+      await getSubject({
+        tenantId: 1
+      }).then(res => {
+        if (res.code == 200) {
+          this.subjectList = [
+            {
+              id: -1,
+              name: "乐理"
+            },
+            ...res.data
+          ];
+        }
+      });
+    } catch {
+
+    }
     this.getList();
   },
   methods: {
@@ -158,6 +165,17 @@ export default {
         }
       });
     },
+    onUpdate(row) {
+      this.$router.push({
+        path: '/business/createLiveCourse',
+        query: {
+          type: 'update',
+          id: row.id
+        }
+      }, (route) => {
+        route.meta.title = '修改直播课'
+      })
+    },
     onCancelVip(scope) {
       this.stopReason = null;
       scope._self.$refs[scope.$index].doClose();
@@ -211,10 +229,10 @@ export default {
         "未开始",
         "报名中",
         "进行中",
-        "取消",
+        "关闭",
         "已结束",
         "报名结束",
-        "暂停"
+        "取消"
       ];
       return arr[val];
     }

+ 1 - 1
src/views/liveClassManager/liveClassTwo/components/courseAdjust.vue

@@ -336,7 +336,7 @@ export default {
         classDate: this.maskForm.date,
         schoolId: this.maskForm.address || null,
         teachMode: this.maskForm.teachMode || null,
-        groupType: "VIP"
+        groupType: "LIVE"
       };
       resetCourse(obj).then(res => {
         if (res.code == 200) {

+ 63 - 191
src/views/liveClassManager/liveRoomManager.vue

@@ -3,81 +3,45 @@
   <div>
     <!-- <h2>
       <div class="squrt"></div>
-      直播管理
+      直播管理
     </h2> -->
     <div>
       <auth auths="imLiveBroadcastRoom/add">
-        <el-button
-          @click="newLiveClass"
-          type="primary"
-          style="margin-bottom: 20px"
-          >新建直播课</el-button
-        >
+        <el-button @click="newLiveClass" type="primary" style="margin-bottom: 20px">新建直播间</el-button>
       </auth>
-      <save-form
-        :inline="true"
-        :model="searchForm"
-        @submit="search"
-        @reset="onReSet"
-        ref="searchForm"
-      >
+      <save-form :inline="true" :model="searchForm" @submit="search" @reset="onReSet" ref="searchForm">
         <el-form-item prop="search">
-          <el-input
-            v-model.trim="searchForm.search"
-            clearable
-            @keyup.enter.native="
-              e => {
-                e.target.blur();
-                $refs.searchForm.save();
-                search();
-              }
-            "
-            placeholder="直播间编号/标题"
-          ></el-input>
+          <el-input v-model.trim="searchForm.search" clearable @keyup.enter.native="e => {
+            e.target.blur();
+            $refs.searchForm.save();
+            search();
+          }
+            " placeholder="直播间编号/标题"></el-input>
         </el-form-item>
         <el-form-item prop="popularize">
-          <el-select
-            placeholder="是否推广"
-            v-model="searchForm.popularize"
-            clearable
-          >
+          <el-select placeholder="是否推广" v-model="searchForm.popularize" clearable>
             <el-option label="否" value="0"></el-option>
             <el-option label="是" value="1"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item prop="liveState">
-          <el-select
-            placeholder="直播状态"
-            v-model="searchForm.liveState"
-            clearable
-          >
+          <el-select placeholder="直播状态" v-model="searchForm.liveState" clearable>
             <el-option label="未开始" value="0"></el-option>
             <el-option label="直播中" value="1"></el-option>
             <el-option label="已结束" value="2"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item prop="serviceProvider">
-          <el-select
-            placeholder="直播方案"
-            v-model="searchForm.serviceProvider"
-            clearable
-          >
+          <el-select placeholder="直播方案" v-model="searchForm.serviceProvider" clearable>
             <el-option label="融云" value="rongCloud"></el-option>
             <el-option label="腾讯云" value="tencentCloud"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item prop="timer">
-          <el-date-picker
-            v-model.trim="searchForm.timer"
-            type="daterange"
-            value-format="yyyy-MM-dd"
-            range-separator="至"
-            start-placeholder="直播开始日期"
-            end-placeholder="直播结束日期"
-            :picker-options="{
+          <el-date-picker v-model.trim="searchForm.timer" type="daterange" value-format="yyyy-MM-dd" range-separator="至"
+            start-placeholder="直播开始日期" end-placeholder="直播结束日期" :picker-options="{
               firstDayOfWeek: 1
-            }"
-          >
+            }">
           </el-date-picker>
         </el-form-item>
 
@@ -87,31 +51,11 @@
         </el-form-item>
       </save-form>
       <div class="tableWrap">
-        <el-table
-          style="width: 100%"
-          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
-          :data="tableList"
-        >
-          <el-table-column
-            align="center"
-            prop="id"
-            label="直播间编号"
-          ></el-table-column>
-          <el-table-column
-            align="center"
-            prop="roomTitle"
-            label="直播课标题"
-          ></el-table-column>
-          <el-table-column
-            align="center"
-            prop="speakerName"
-            label="主讲人"
-          ></el-table-column>
-          <el-table-column
-            align="center"
-            prop="liveStartTime"
-            label="直播开始时间"
-          >
+        <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="roomTitle" label="直播间标题"></el-table-column>
+          <el-table-column align="center" prop="speakerName" label="主讲人"></el-table-column>
+          <el-table-column align="center" prop="liveStartTime" label="直播开始时间">
             <template slot-scope="scope">
               <div>
                 {{ scope.row.liveStartTime | dateForMinFormat }}
@@ -128,7 +72,7 @@
           <el-table-column align="center" prop="popularize" label="观看权限">
             <template slot-scope="scope">
               <div>
-                {{ scope.row.popularizeType == "ALL" ? "全员" : "部分" }}
+                {{ scope.row.popularizeType == "ALL" ? "公开模式" : "私密模式" }}
               </div>
             </template>
           </el-table-column>
@@ -147,11 +91,7 @@
               </div>
             </template>
           </el-table-column>
-          <el-table-column
-            align="center"
-            prop="serviceProvider"
-            label="直播方案"
-          >
+          <el-table-column align="center" prop="serviceProvider" label="直播方案">
             <template slot-scope="scope">
               <div>
                 {{ scope.row.serviceProvider | serviceProvider }}
@@ -165,21 +105,13 @@
               </div>
             </template>
           </el-table-column>
-          <el-table-column
-            align="center"
-            prop="createdByName"
-            label="创建人"
-          ></el-table-column>
+          <el-table-column align="center" prop="createdByName" label="创建人"></el-table-column>
           <el-table-column align="center" prop="createdByName" label="预约人数">
             <template slot-scope="scope">
               <div>
                 <auth auths="imLiveBroadcastRoom/query/roomUser">
-                  <el-button
-                    type="text"
-                    @click="lookReservationDetail(scope.row)"
-                  >
-                    {{ scope.row.roomReservationNum }}</el-button
-                  >
+                  <el-button type="text" @click="lookReservationDetail(scope.row)">
+                    {{ scope.row.roomReservationNum }}</el-button>
                 </auth>
               </div>
             </template>
@@ -187,61 +119,36 @@
           <el-table-column align="center" prop="studentId" label="操作">
             <template slot-scope="scope">
               <div>
-                <el-dropdown
-                  trigger="click"
-                  placement="bottom"
-                  :hide-on-click="false"
-                >
+                <el-dropdown trigger="click" placement="bottom" :hide-on-click="false">
                   <span class="el-dropdown-link">
                     操作<i class="el-icon-arrow-down el-icon--right"></i>
                   </span>
                   <el-dropdown-menu slot="dropdown" style="width: 100px">
-                    <el-dropdown-item
-                      style="width: 100px"
-                      v-if="
-                        permission('imLiveBroadcastRoom/roomStart') &&
-                          scope.row.liveState == 0
-                      "
-                      @click.native="onStartLive(scope.row)"
-                    >
+                    <el-dropdown-item style="width: 100px" v-if="permission('imLiveBroadcastRoom/roomStart') &&
+                      scope.row.liveState == 0
+                      " @click.native="onStartLive(scope.row)">
                       <el-button type="text">开启直播</el-button>
                     </el-dropdown-item>
-                    <el-dropdown-item
-                      style="width: 100px"
-                      v-if="
-                        permission('/liveStudentList') &&
-                          scope.row.popularizeType !== 'ALL'
-                      "
-                      @click.native="lookStudentDetail(scope.row)"
-                    >
+                    <el-dropdown-item style="width: 100px" v-if="permission('/liveStudentList') &&
+                      scope.row.popularizeType !== 'ALL'
+                      " @click.native="lookStudentDetail(scope.row)">
                       <el-button type="text">观看学员</el-button>
                     </el-dropdown-item>
-                    <el-dropdown-item
-                      v-if="
-                        permission('imLiveBroadcastRoom/opsPopularize') &&
-                          scope.row.liveState != 2
-                      "
-                      @click.native="popularizeRoom(scope.row)"
-                    >
+                    <el-dropdown-item v-if="permission('imLiveBroadcastRoom/opsPopularize') &&
+                      scope.row.liveState != 2
+                      " @click.native="popularizeRoom(scope.row)">
                       <el-button type="text">{{
                         scope.row.popularize == 1 ? "取消推广" : "首页推广"
                       }}</el-button>
                     </el-dropdown-item>
 
-                    <el-dropdown-item
-                      v-if="
-                        permission('imLiveBroadcastRoom/roomDestroy') &&
-                          scope.row.liveState == 1
-                      "
-                      @click.native="closeRoom(scope.row)"
-                    >
+                    <el-dropdown-item v-if="permission('imLiveBroadcastRoom/roomDestroy') &&
+                      scope.row.liveState == 1
+                      " @click.native="closeRoom(scope.row)">
                       <el-button type="text">关闭直播</el-button>
                     </el-dropdown-item>
 
-                    <el-dropdown-item
-                      v-if="scope.row.liveState == 2"
-                      @click.native="gotoDetail(scope.row)"
-                    >
+                    <el-dropdown-item v-if="scope.row.liveState == 2" @click.native="gotoDetail(scope.row)">
                       <el-button type="text">直播详情</el-button>
                     </el-dropdown-item>
                     <auth auths="/liveBlackList">
@@ -249,54 +156,30 @@
                         <el-button type="text">订单详情</el-button>
                       </el-dropdown-item>
                     </auth>
-                    <el-dropdown-item
-                      v-if="
-                        permission('liveGoodsMapper/page') &&
-                          ishowCart(scope.row)
-                      "
-                      @click.native="setShop(scope.row)"
-                    >
+                    <el-dropdown-item v-if="permission('liveGoodsMapper/page') &&
+                      ishowCart(scope.row)
+                      " @click.native="setShop(scope.row)">
                       <el-button type="text">商品设置</el-button>
                     </el-dropdown-item>
-                    <auth
-                      auths="imLiveBroadcastRoom/queryLiveRoomGoodsOrderList"
-                    >
-                      <el-dropdown-item
-                        @click.native="gotoBlacklist(scope.row)"
-                      >
+                    <auth auths="imLiveBroadcastRoom/queryLiveRoomGoodsOrderList">
+                      <el-dropdown-item @click.native="gotoBlacklist(scope.row)">
                         <el-button type="text">黑名单</el-button>
                       </el-dropdown-item>
                     </auth>
-                    <el-dropdown-item
-                      v-if="permission('imLiveBroadcastRoom/shareGroup')"
-                      @click.native="shareLive(scope.row)"
-                    >
+                    <el-dropdown-item v-if="permission('imLiveBroadcastRoom/shareGroup')"
+                      @click.native="shareLive(scope.row)">
                       <el-button type="text">分享</el-button>
                     </el-dropdown-item>
 
-                    <el-dropdown-item
-                      v-if="
-                        permission('imLiveBroadcastRoom/update') &&
-                          scope.row.liveState == 0
-                      "
-                    >
-                      <el-button
-                        type="text"
-                        @click.native="resetLive(scope.row)"
-                        >修改</el-button
-                      >
+                    <el-dropdown-item v-if="permission('imLiveBroadcastRoom/update') &&
+                      scope.row.liveState == 0
+                      ">
+                      <el-button type="text" @click.native="resetLive(scope.row)">修改</el-button>
                     </el-dropdown-item>
 
-                    <auth
-                      auths="imLiveBroadcastRoom/delete"
-                      v-if="scope.row.liveState == 0"
-                    >
+                    <auth auths="imLiveBroadcastRoom/delete" v-if="scope.row.liveState == 0">
                       <el-dropdown-item>
-                        <el-button
-                          type="text"
-                          @click.native="deteleLive(scope.row)"
-                          >删除</el-button
-                        >
+                        <el-button type="text" @click.native="deteleLive(scope.row)">删除</el-button>
                       </el-dropdown-item>
                     </auth>
                   </el-dropdown-menu>
@@ -366,23 +249,11 @@
             </template>
           </el-table-column>
         </el-table>
-        <pagination
-          sync
-          :total.sync="rules.total"
-          :page.sync="rules.page"
-          :limit.sync="rules.limit"
-          :page-sizes="rules.page_size"
-          @pagination="getList"
-        />
+        <pagination sync :total.sync="rules.total" :page.sync="rules.page" :limit.sync="rules.limit"
+          :page-sizes="rules.page_size" @pagination="getList" />
       </div>
     </div>
-    <el-dialog
-      title="分享"
-      width="510px"
-      append-to-body
-      :visible.sync="shareVisible"
-      v-if="shareVisible"
-    >
+    <el-dialog title="分享" width="510px" append-to-body :visible.sync="shareVisible" v-if="shareVisible">
       <shareDetail @close="shareVisible = false" :row="activeRow" />
     </el-dialog>
     <popularizeRoom @getList="getList" ref="popularizeRoom" />
@@ -441,7 +312,7 @@ export default {
     };
   },
   //生命周期 - 创建完成(可以访问当前this实例)
-  created() {},
+  created() { },
   //生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {
     // 获取分部
@@ -481,7 +352,7 @@ export default {
         path: "/business/createLiveClass"
       };
       this.$router.push(params, route => {
-        route.meta.title = "新建直播";
+        route.meta.title = "新建直播";
       });
       this.$router.push("/business/createLiveClass");
       //liveClassDetail
@@ -504,7 +375,7 @@ export default {
       };
       //  ,
       this.$router.push(params, route => {
-        route.meta.title = "修改直播";
+        route.meta.title = "修改直播";
       });
     },
     deteleLive(row) {
@@ -522,7 +393,7 @@ export default {
             console.log(e);
           }
         })
-        .catch(() => {});
+        .catch(() => { });
     },
     closeRoom(row) {
       this.$confirm("您确定关闭直播间", "提示", {
@@ -533,7 +404,7 @@ export default {
           const res = await closeBroadcastRoomList(row.id);
           this.$message.success("关闭成功");
           this.getList();
-        } catch (e) {}
+        } catch (e) { }
       });
     },
     async popularizeRoom(row) {
@@ -563,7 +434,7 @@ export default {
             console.log(e);
           }
         })
-        .catch(() => {});
+        .catch(() => { });
     },
     setShop(row) {
       this.$router.push({
@@ -610,7 +481,7 @@ export default {
           type: "warning"
         });
         await roomStart(row.id);
-      } catch (e) {}
+      } catch (e) { }
     }
   }
 };
@@ -620,6 +491,7 @@ export default {
   cursor: pointer;
   color: var(--color-primary);
 }
+
 ::v-deep .el-icon-arrow-down {
   font-size: 12px;
 }

+ 21 - 11
src/views/liveClassManager/modals/addLiveCourse.vue

@@ -2,7 +2,7 @@
   <div>
     <el-form :model="maskForm" label-position="right" label-width="80px">
       <el-form-item label="开课时间">
-        <el-date-picker v-model.trim="maskForm.courseStartOnline" type="date" :picker-options="pickerOptions"
+        <el-date-picker v-model.trim="maskForm.courseStartOnline" type="date" :picker-options="pickOptions"
           placeholder="请选择开课时间" style="width: 100% !important" />
       </el-form-item>
       <!-- <el-form-item label="课程类型" prop="type">
@@ -83,9 +83,9 @@ export default {
       type: [Number, String],
       default: 0
     },
-    signUpTimeList: {
-      type: Array,
-      default: []
+    signUpEnd: {
+      type: [Date, String],
+      default: null
     },
     // 指导老师
     teacher: {
@@ -107,7 +107,7 @@ export default {
     }
   },
   data() {
-    const endTime = this.signUpTimeList[1] ? dayjs(this.signUpTimeList[1]).valueOf() : new Date().getTime()
+
     return {
       maskForm: {
         type: "ONLINE",
@@ -129,16 +129,26 @@ export default {
       onlinelookList: [], // 展示课表线上
       offlineLookList: [], // 展示课表线下
       timeTable: [], // 排课数据
-      pickerOptions: {
-        firstDayOfWeek: 1,
-        disabledDate(time) {
 
-          return time.getTime() + 86400000 <= endTime;
-        }
-      }
     };
   },
+  watch: {
+    signUpEnd() {
+      this.pickOptions()
+    }
+  },
   methods: {
+    pickOptions() {
+      const endTime = this.signUpEnd ? dayjs(this.signUpEnd).valueOf() : new Date().getTime()
+      console.log(this.signUpEnd, endTime, 'endTime')
+      return {
+        firstDayOfWeek: 1,
+        disabledDate(time) {
+          // return time.getTime() + 86400000 < endTime;
+          return endTime > time.getTime();
+        }
+      }
+    },
     onClose() {
       this.$emit("close");
     },

+ 6 - 6
src/views/liveClassManager/newLiveClass.vue

@@ -27,10 +27,10 @@
             </el-radio-group>
           </el-form-item>
         </el-row>
-        <el-alert title="直播信息" type="info" :closable="false" style="margin-bottom: 20px"></el-alert>
+        <el-alert title="直播信息" type="info" :closable="false" style="margin-bottom: 20px"></el-alert>
         <el-row class="row">
-          <el-form-item label="直播课标题" class="nomb" prop="roomTitle" :rules="[{ required: true, message: '请输入直播课标题' }]">
-            <el-input maxlength="10" show-word-limit placeholder="请输入直播标题" v-model.trim="form.roomTitle"></el-input>
+          <el-form-item label="直播间标题" class="nomb" prop="roomTitle" :rules="[{ required: true, message: '请输入直播间标题' }]">
+            <el-input maxlength="10" show-word-limit placeholder="请输入直播标题" v-model.trim="form.roomTitle"></el-input>
           </el-form-item>
           <!-- <el-form-item
             label="直播方案"
@@ -101,8 +101,8 @@
           </el-form-item>
         </el-row>
         <el-row class="row">
-          <el-form-item label="直播课内容" prop="liveRemark" :rules="[{ required: true, message: '请输入直播课内容' }]">
-            <el-input :rows="3" placeholder="请输入直播内容" v-model.trim="form.liveRemark" type="textarea" maxlength="200"
+          <el-form-item label="直播间内容" prop="liveRemark" :rules="[{ required: true, message: '请输入直播间内容' }]">
+            <el-input :rows="3" placeholder="请输入直播内容" v-model.trim="form.liveRemark" type="textarea" maxlength="200"
               show-word-limit></el-input>
           </el-form-item>
         </el-row>
@@ -288,7 +288,7 @@ export default {
   components: { preview },
   data() {
     return {
-      name: "新建直播",
+      name: "新建直播",
       preLookVisible: false,
       form: {
         organIds: [],