mo 3 лет назад
Родитель
Сommit
efbf272d7b

+ 8 - 0
src/utils/vueFilter.js

@@ -814,3 +814,11 @@ Vue.filter('usageStatus', value => {
   };
   return obj[value];
 })
+Vue.filter('liveState', value => {
+  let obj = {
+    0: "未开始",
+    1: "直播中",
+    2: "已结束",
+  };
+  return obj[value];
+})

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

@@ -0,0 +1,22 @@
+import request from '@/utils/request2'
+
+export const createLiveBroadcast = data => {
+  return request({
+    url: '/api-web/imLiveBroadcastRoom/add',
+    method: 'post',
+    data,
+    requestType: 'json',
+  })
+}
+
+
+export const getLiveBroadcastList = data => {
+  return request({
+    url: '/api-web/imLiveBroadcastRoom/queryPage',
+    method: 'post',
+    data,
+    requestType: 'json',
+  })
+}
+
+// imLiveBroadcastRoom/queryPage

+ 33 - 10
src/views/liveClassManager/index.vue

@@ -64,32 +64,44 @@
         >
           <el-table-column
             align="center"
-            prop="studentId"
+            prop="id"
             label="直播间编号"
           ></el-table-column>
           <el-table-column
             align="center"
-            prop="studentId"
+            prop="roomTitle"
             label="直播课标题"
           ></el-table-column>
           <el-table-column
             align="center"
-            prop="studentId"
+            prop="speakerName"
             label="主讲人"
           ></el-table-column>
           <el-table-column
             align="center"
-            prop="studentId"
+            prop="liveStartTime"
             label="直播开始时间"
-          ></el-table-column>
+          >
+                <template slot-scope="scope">
+            <div>
+              {{scope.row.liveStartTime|dateForMinFormat}}
+            </div>
+          </template>
+          </el-table-column>
           <el-table-column
             align="center"
-            prop="studentId"
+            prop="liveState"
             label="直播状态"
-          ></el-table-column>
+          >
+          <template slot-scope="scope">
+            <div>
+              {{scope.row.liveState|liveState}}
+            </div>
+          </template>
+          </el-table-column>
           <el-table-column
             align="center"
-            prop="studentId"
+            prop="createdByName"
             label="创建人"
           ></el-table-column>
           <el-table-column align="center" prop="studentId" label="操作">
@@ -136,6 +148,7 @@ import { getToken } from "@/utils/auth";
 import pagination from "@/components/Pagination/index";
 import shareDetail from "./modals/shareDetail.vue"
 import load from "@/utils/loading";
+import {getLiveBroadcastList} from './api'
 export default {
   components: { pagination,shareDetail },
   data() {
@@ -166,8 +179,18 @@ export default {
     this.init();
   },
   methods: {
-    init() {},
-    getList() {},
+    init() {
+      this.getList()
+    },
+   async getList() {
+     try{
+      const res = await getLiveBroadcastList({...this.searchForm,rows:this.rules.limit,page:this.rules.page})
+      this.tableList = res.data.rows;
+      this.rules.total = res.data.total
+     }catch(e){
+       console.log(e)
+     }
+   },
     search() {
       this.rules.page = 1;
       this.getList();

+ 2 - 2
src/views/liveClassManager/modals/preview.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <!--  -->
+
     <div class="first" v-if="form.preTemplate == 1">
       <h2>{{ form.roomTitle }}</h2>
       <p class="teacher">主讲人:{{ form.teacherName }}</p>
@@ -25,7 +25,7 @@
         </div>
       </div>
     </div>
-    <!--  -->
+
     <div class="second" v-if="form.preTemplate == 2">
       <h2>{{ form.roomTitle }}</h2>
       <p class="teacher">主讲人:{{ form.teacherName }}</p>

+ 156 - 57
src/views/liveClassManager/newLiveClass.vue

@@ -32,13 +32,31 @@
           </el-form-item>
           <el-form-item
             label="主讲人"
-            prop="teacherName"
+            prop="speakerId"
             :rules="[{ required: true, message: '请输入主讲人' }]"
           >
-            <el-input
+            <el-select
+              v-model.trim="form.speakerId"
+              collapse-tags
+              clearable
               placeholder="请输入主讲人"
-              v-model.trim="form.teacherName"
-            ></el-input>
+              remote
+              filterable
+              :remote-method="remoteMethod"
+              :loading="remoteLoading"
+            >
+              <el-option
+                v-for="item in teacherList"
+                :key="item.id"
+                :label="item.realName"
+                :value="item.id"
+              >
+                <span style="float: left">{{ item.realName }}</span>
+                <span style="float: right; color: #8492a6; font-size: 13px">{{
+                  item.phone
+                }}</span>
+              </el-option>
+            </el-select>
           </el-form-item>
           <el-form-item
             label="直播开始时间"
@@ -77,59 +95,58 @@
             prop="preTemplate"
             :rules="[{ required: true, message: '请选择预热模板' }]"
           >
-            <div class="chioseWrap">
-              <div class="chioseItem" @click="setPreTemplate(1)">
-                <img src="./images/img1.png" alt="" />
-                <!--        v-model="form.preTemplate" -->
-                <div class="remberBox">
-                  <el-checkbox
-                    v-model="form.preTemplate == 1"
-                    class="chioseBox"
-                    :label="1"
-                    :checked="form.preTemplate == 1"
-                    ><br
-                  /></el-checkbox>
-                  <!-- <div
+            <el-checkbox-group v-model="checkList" @change="bindCheckBox">
+              <div class="chioseWrap">
+                <div class="chioseItem" @click="setPreTemplate(1)">
+                  <img src="./images/img1.png" alt="" />
+                  <!--        v-model="form.preTemplate" -->
+                  <div class="remberBox">
+                    <el-checkbox
+                      class="chioseBox"
+                      :label="1"
+                      :checked="form.preTemplate == 1"
+                      ><br
+                    /></el-checkbox>
+                    <!-- <div
                     class="dotWrap"
                     :class="[form.preTemplate == 1 ? 'checked' : '']"
                   ></div> -->
+                  </div>
                 </div>
-              </div>
-              <div class="chioseItem" @click="setPreTemplate(2)">
-                <img src="./images/img2.png" alt="" />
-                <div class="remberBox">
-                  <!--  v-model="form.preTemplate" -->
-                  <el-checkbox
-                    v-model="form.preTemplate == 2"
-                    name="2"
-                    class="chioseBox"
-                    :label="2"
-                    :checked="form.preTemplate == 2"
-                    ><br
-                  /></el-checkbox>
-                  <!-- <div
+                <div class="chioseItem" @click="setPreTemplate(2)">
+                  <img src="./images/img2.png" alt="" />
+                  <div class="remberBox">
+                    <!--  v-model="form.preTemplate" -->
+                    <el-checkbox
+                      name="2"
+                      class="chioseBox"
+                      :label="2"
+                      :checked="form.preTemplate == 2"
+                      ><br
+                    /></el-checkbox>
+                    <!-- <div
                     class="dotWrap"
                     :class="[form.preTemplate == 2 ? 'checked' : '']"
                   ></div> -->
+                  </div>
                 </div>
-              </div>
-              <div class="chioseItem" @click="setPreTemplate(3)">
-                <img src="./images/img3.png" alt="" />
-                <div class="remberBox">
-                  <el-checkbox
-                    v-model="form.preTemplate == 3"
-                    class="chioseBox"
-                    :label="3"
-                    :checked="form.preTemplate == 3"
-                    ><br
-                  /></el-checkbox>
-                  <!-- <div
+                <div class="chioseItem" @click="setPreTemplate(3)">
+                  <img src="./images/img3.png" alt="" />
+                  <div class="remberBox">
+                    <el-checkbox
+                      class="chioseBox"
+                      :label="3"
+                      :checked="form.preTemplate == 3"
+                      ><br
+                    /></el-checkbox>
+                    <!-- <div
                     class="dotWrap"
                     :class="[form.preTemplate == 3 ? 'checked' : '']"
                   ></div> -->
+                  </div>
                 </div>
               </div>
-            </div>
+            </el-checkbox-group>
           </el-form-item>
         </el-row>
         <el-alert
@@ -140,13 +157,13 @@
         ></el-alert>
         <el-row class="row">
           <el-form-item
-            prop="whether_like"
+            prop="roomConfig.whether_like"
             label-width="120px"
             class="mline"
             label="允许点赞"
             :rules="[{ required: true, message: '是否允许点赞' }]"
           >
-            <el-radio-group v-model="form.whether_like">
+            <el-radio-group v-model="form.roomConfig.whether_like">
               <el-radio :label="1">是</el-radio>
               <el-radio :label="0">否</el-radio>
             </el-radio-group>
@@ -154,13 +171,13 @@
         </el-row>
         <el-row class="row">
           <el-form-item
-            prop="whether_chat"
+            prop="roomConfig.whether_chat"
             label-width="120px"
             class="mline"
             label="允许聊天互动"
             :rules="[{ required: true, message: '是否允许聊天互动' }]"
           >
-            <el-radio-group v-model="form.whether_chat">
+            <el-radio-group v-model="form.roomConfig.whether_chat">
               <el-radio :label="1">是</el-radio>
               <el-radio :label="0">否</el-radio>
             </el-radio-group>
@@ -168,22 +185,22 @@
         </el-row>
         <el-row class="row">
           <el-form-item
-            prop="radio"
+            prop="roomConfig.whether_video"
             label-width="120px"
             class="mline"
             label="保存直播回放"
             :rules="[{ required: true, message: '请选择允许点赞' }]"
           >
-            <el-radio-group v-model="form.radio">
-              <el-radio :label="3">是</el-radio>
-              <el-radio :label="6">否</el-radio>
+            <el-radio-group v-model="form.roomConfig.whether_video">
+              <el-radio :label="1">是</el-radio>
+              <el-radio :label="0">否</el-radio>
             </el-radio-group>
           </el-form-item>
         </el-row>
       </el-form>
       <el-row class="row">
         <el-button type="primary" @click="preLook">预览</el-button>
-        <el-button type="primary">提交</el-button>
+        <el-button type="primary" @click="submit">提交</el-button>
       </el-row>
     </div>
 
@@ -200,6 +217,9 @@
 </template>
 <script>
 import preview from "./modals/preview.vue";
+import axios from "axios";
+import { getToken, getTenantId } from "@/utils/auth";
+import { createLiveBroadcast } from "./api";
 export default {
   components: { preview },
   data() {
@@ -208,15 +228,16 @@ export default {
       preLookVisible: false,
       form: {
         roomTitle: "",
-        teacherName: "",
         speakerId: "",
         liveStartTime: "",
         liveRemark: "",
         preTemplate: null,
-        whether_like: "",
-        whether_chat: "",
-        whether_video: "",
+        roomConfig: { whether_like: "", whether_chat: "", whether_video: "" },
+        checkList: [],
       },
+      remoteLoading: false,
+      teacherList: [],
+      checkList: [],
     };
   },
   mounted() {},
@@ -236,6 +257,84 @@ export default {
     },
     setPreTemplate(index) {
       this.$set(this.form, "preTemplate", index);
+      if(this.checkList.indexOf(index)== -1){
+         this.checkList.push(index)
+      }else{
+        this.checkList.splice(this.checkList.indexOf(index), 1);
+      }
+      this.bindCheckBox()
+    },
+    remoteMethod(query) {
+      if (query !== "") {
+        this.remoteLoading = true;
+        // 发请求搜索
+        const url = "/api-auth/user/queryLike";
+        const options = {
+          method: "get",
+          headers: {
+            Authorization: getToken(),
+            tenantId: getTenantId(),
+          },
+          params: {
+            rows: 9999,
+            search: query,
+          },
+          url,
+        };
+        this.remoteLoading = true;
+        // this.studentList = []
+        axios(options).then((res) => {
+          this.remoteLoading = false;
+          let result = res.data;
+          if (result.code == 200) {
+            // Array.prototype.splice.apply(this.studentList, result.data.rows);
+            if (result.data && result.data.length > 0) {
+              result.data.forEach((item) => {
+                this.teacherList.unshift(item);
+              });
+              this.teacherList = this.deweight(this.teacherList, "phone");
+            }
+            // this.studentList = this.studentList.concat(result.data.rows);
+          }
+        });
+        // queryStudentList({ rows: 100, search: query }).then(res => {
+        //   if (res.code == 200) {
+        //     this.remoteLoading = false;
+        //     this.studentList = this.studentList.concat(res.data.rows);
+        //     this.unique(this.studentList, "userId");
+        //   }
+        // });
+      }
+    },
+    deweight(arr, key) {
+      let res = [];
+      arr.forEach((item) => {
+        let list = [];
+        res.forEach((resitem) => {
+          list.push(resitem[key]);
+        });
+        if (list.indexOf(item[key]) === -1) {
+          res.push(item);
+        }
+      });
+      return res;
+    },
+    bindCheckBox() {
+      if (this.checkList.length > 1) {
+        this.checkList.splice(0, 1);
+      }
+        this.$set(this.form, "preTemplate", this.checkList[0]||null);
+    },
+  async  submit() {
+      try {
+        const res = await createLiveBroadcast(this.form)
+        this.$message.success('创建成功')
+          this.$store.dispatch('delVisitedViews', this.$route)
+        this.$router.push('/liveClassManager')
+      }catch(e){
+        console.log(e)
+      }
+      // createLiveBroadcast
     },
   },
 };

+ 2 - 2
vue.config.js

@@ -19,8 +19,8 @@ const name = defaultSettings.title || '管乐迷后台管理系统' // page titl
 // let target = 'http://192.168.3.251:8000' // 何国威
 // let target = 'http://192.168.3.250:8000' //邹璇
 // let target = 'http://192.168.3.119:8000' //勇哥
-// let target = 'http://dev.dayaedu.com' // 开发环境
-let target = 'https://test.dayaedu.com' //测试环境
+let target = 'http://dev.dayaedu.com' // 开发环境
+// let target = 'https://test.dayaedu.com' //测试环境
 // All configuration item explanations can be find in https://cli.vuejs.org/config/
 module.exports = {
   /**