Tang vor 1 Jahr
Ursprung
Commit
c999cdc148
22 geänderte Dateien mit 905 neuen und 396 gelöschten Zeilen
  1. 58 10
      src/components/videoPreview/index.vue
  2. 10 0
      src/views/Marketing/goods/commodityManageMent/add/courseContent/courseCheck.vue
  3. 12 2
      src/views/Marketing/goods/commodityManageMent/add/courseContent/index.vue
  4. 13 3
      src/views/Marketing/goods/commodityManageMent/add/courseContent/moreListCheck.vue
  5. 15 0
      src/views/Marketing/goods/commodityManageMent/add/index.vue
  6. 6 0
      src/views/Marketing/goods/commodityManageMent/add/productInformation.vue
  7. 10 0
      src/views/Marketing/goods/commodityManageMent/edit/courseContent/courseCheck.vue
  8. 10 0
      src/views/Marketing/goods/commodityManageMent/edit/courseContent/index.vue
  9. 11 0
      src/views/Marketing/goods/commodityManageMent/edit/courseContent/moreListCheck.vue
  10. 15 0
      src/views/Marketing/goods/commodityManageMent/edit/index.vue
  11. 6 0
      src/views/Marketing/goods/commodityManageMent/edit/productInformation.vue
  12. 60 38
      src/views/resource/videoManagement/chapter/add/index.vue
  13. 47 11
      src/views/resource/videoManagement/chapter/addSection.vue
  14. 59 38
      src/views/resource/videoManagement/chapter/edit/index.vue
  15. 13 7
      src/views/resource/videoManagement/courseManagement/basicInfoAdd/index.vue
  16. 9 0
      src/views/resource/videoManagement/courseManagement/basicInfoEdit/index.vue
  17. 2 0
      src/views/resource/videoManagement/courseManagement/chapterContent/index.vue
  18. 206 116
      src/views/resource/videoManagement/festival/add/index.vue
  19. 217 144
      src/views/resource/videoManagement/festival/edit/index.vue
  20. 39 0
      src/views/resource/videoManagement/moduleManagement/add/index.vue
  21. 49 27
      src/views/resource/videoManagement/moduleManagement/addChapter.vue
  22. 38 0
      src/views/resource/videoManagement/moduleManagement/edit/index.vue

+ 58 - 10
src/components/videoPreview/index.vue

@@ -11,7 +11,7 @@
       <div slot="title" class="hearders">
         <div class="leftTitle">视频预览</div>
         <div class="rightBoxs">
-          <img src="@/assets/images/Close@2x.png" alt="" @click="clears" />
+          <img src="@/assets/images/Close@2x.png" alt @click="clears" />
         </div>
       </div>
       <div>
@@ -34,16 +34,18 @@ export default {
       vidzb: "",
       playerJs:
         "https://player.polyv.net/resp/live-h5-player/latest/liveplayer.min.js",
+      vodPlayerJsForTCPlayer:
+        "https://web.sdk.qcloud.com/player/tcplayer/release/v5.1.0/tcplayer.v5.1.0.min.js",
       uidzb: "egsxlptzdq",
       fileSetting: {
         desc: "i am desc", // 描述
         cataid: "1639399775001", // 分类ID 可以后端传递 也可以不写 或写死
         tag: "i am tag", // 标签
         luping: 0, // 是否开启视频课件优化处理,对于上传录屏类视频清晰度有所优化:0为不开启,1为开启
-        keepsource: 1, // 是否源文件播放(不对视频进行编码):0为编码,1为不编码
+        keepsource: 1 // 是否源文件播放(不对视频进行编码):0为编码,1为不编码
       },
       diavos: false,
-      listData: {}, //数据
+      listData: {} //数据
     };
   },
   methods: {
@@ -59,7 +61,11 @@ export default {
     },
     isOkBf() {
       if (this.listData.sectionType === 1) {
-        this.loadPlayerScript(this.loadPlayer);
+        if(this.listData.viewSign == 2) {
+          this.loadPlayerScript_tencent(this.loadPlayer_tencent);
+        }else {
+          this.loadPlayerScript(this.loadPlayer);
+        }
       }
       if (this.listData.sectionType === 2) {
         this.loadPlayerScriptzb(this.loadPlayerzb);
@@ -79,6 +85,20 @@ export default {
         });
       }
     },
+    loadPlayerScript_tencent(callback) {
+      if (!window.TCPlayer) {
+        const myScript = document.createElement("script");
+        myScript.setAttribute("src", this.vodPlayerJsForTCPlayer);
+        myScript.onload = callback;
+        document.body.appendChild(myScript);
+      } else {
+        callback();
+        this.player_tencent.on("server", (...params) => {
+          this.$message.error(returnTitle(params[1]));
+          console.log(params);
+        });
+      }
+    },
     loadPlayer() {
       var self = this;
       const polyvPlayer = window.polyvPlayer;
@@ -88,11 +108,36 @@ export default {
         height: 533,
         vid: self.vid,
         teaser_show: 0,
-        playsafe: function (vid, next) {
-          self.$api.obtainpolyvvideosign(vid).then((res) => {
+        playsafe: function(vid, next) {
+          self.$api.obtainpolyvvideosign(vid).then(res => {
             next(res.data);
           });
-        },
+        }
+      });
+    },
+    loadPlayer_tencent() {
+      var self = this;
+      const TCPlayer = window.TCPlayer;
+      try {
+        let video = document.querySelector("video");
+        video.parentNode.removeChild(video);
+      } catch (error) {
+        console.log("清除video标签异常");
+      }
+      let player_tencent = document.createElement("video");
+      player_tencent.id = "player-tencent";
+      document
+        .getElementById("player")
+        .insertAdjacentElement("afterend", player_tencent);
+      self.$api.obtaintcvideosign(self.vid).then(res => {
+        self.player_tencent = TCPlayer("player-tencent", {
+          width: 800,
+          height: 533,
+          fileID: self.vid,
+          appID: res.data.appID,
+          psign: res.data.psign,
+          licenseUrl: res.data.licenseUrl
+        });
       });
     },
     /**
@@ -103,6 +148,9 @@ export default {
       if (this.listData.sectionType === 1 && this.player) {
         this.player.destroy();
       }
+      if (this.listData.sectionType === 1 && this.player_tencent) {
+        this.player_tencent.dispose();
+      }
       if (this.listData.sectionType === 2 && this.playerzb) {
         this.playerzb.destroy();
       }
@@ -127,10 +175,10 @@ export default {
         width: 800,
         height: 533,
         uid: self.uidzb,
-        vid: self.vidzb,
+        vid: self.vidzb
       });
-    },
-  },
+    }
+  }
 };
 </script>
 

+ 10 - 0
src/views/Marketing/goods/commodityManageMent/add/courseContent/courseCheck.vue

@@ -71,6 +71,15 @@
                     : "未知"
                 }}
               </span>
+              <span v-else-if="item.scope === 'viewSign'">
+                {{
+                  scope.row[item.prop] === 1
+                    ? "保利威"
+                    : scope.row[item.prop] === 2
+                    ? "腾讯"
+                    : ""
+                }}
+              </span>
               <span v-else>{{ scope.row[item.prop] }}</span></template
             >
           </el-table-column></template
@@ -108,6 +117,7 @@ export default {
       tableSet: [
         { label: "课程编码", prop: "code", width: "140px" },
         { label: "名称前缀", prop: "prefixName", width: "160px" },
+        { label: "视频类型", prop: "viewSign", scope: "viewSign" },
         { label: "课程标题", prop: "courseName" },
         {
           label: "发布状态",

+ 12 - 2
src/views/Marketing/goods/commodityManageMent/add/courseContent/index.vue

@@ -80,6 +80,15 @@
               : "未知"
           }}</span>
 
+          <span v-else-if="item.scope === 'viewSign'">
+            {{
+              scope.row[item.prop] === 1
+                ? "保利威"
+                : scope.row[item.prop] === 2
+                ? "腾讯"
+                : ""
+            }}
+          </span>
           <span v-else-if="item.scope === 'busin'">
             {{ scope.row[item.prop1] + " - " + scope.row[item.prop2] }}
           </span>
@@ -150,6 +159,7 @@ export default {
       tableSetVideo: [
         { label: "排序", prop: "sort", scope: "inputs", width: "100" },
         { label: "编码", prop: "code", width: "140" },
+        { label: "视频类型", prop: "viewSign", scope: "viewSign" },
         { label: "课程名称", prop: "courseName", width: "300", type: 1 },
         { label: "类型", prop: "type", width: "190", type: 2, scope: "type" },
         { label: "名称", prop: "menuName", width: "300", type: 2 },
@@ -363,13 +373,13 @@ export default {
     /**
      * 点击选择关联题库
      */
-     openBankSet(){
+    openBankSet() {
       if (!this.listData.businessId) {
         this.$message.warning("请选择业务层次");
         return;
       }
       this.$refs.bankView.openBox(this.listData.questionRelIds || []);
-     },
+    },
     /**
      * 题库回调数据
      */

+ 13 - 3
src/views/Marketing/goods/commodityManageMent/add/courseContent/moreListCheck.vue

@@ -83,6 +83,15 @@
                     : "未知"
                 }}
               </span>
+              <span v-else-if="item.scope === 'viewSign'">
+                {{
+                  scope.row[item.prop] === 1
+                    ? "保利威"
+                    : scope.row[item.prop] === 2
+                    ? "腾讯"
+                    : ""
+                }}
+              </span>
               <span v-else>{{ scope.row[item.prop] }}</span></template
             >
           </el-table-column></template
@@ -120,6 +129,7 @@ export default {
       tableSet: [
         { label: "编码", prop: "code", width: "140px" },
         { label: "名称前缀", prop: "prefixName", width: "160px" },
+        { label: "视频类型", prop: "viewSign", scope: "viewSign" },
         { label: "模块标题", prop: "moduleName", type: 1 },
         { label: "章标题", prop: "name", type: 2 },
         { label: "节标题", prop: "name", type: 3 },
@@ -292,8 +302,9 @@ export default {
             menuId: splitStr[1],
             menuName: item.name,
             code: item.code,
-            courseId:0,
+            courseId: 0,
             publishStatus: item.publishStatus,
+            viewSign:item.viewSign,
             durationTime: item.durationTime,
             sectionType: splitStr[0] === 3 ? item.sectionType : "",
             auditionMinute:
@@ -332,5 +343,4 @@ export default {
 };
 </script>
 
-<style lang="less" scoped>
-</style>
+<style lang="less" scoped></style>

+ 15 - 0
src/views/Marketing/goods/commodityManageMent/add/index.vue

@@ -244,6 +244,14 @@ export default {
             trigger: "change",
           },
         ],
+        viewSign: [
+          {
+            type: "number",
+            required: true,
+            message: "请选择视频类型",
+            trigger: "change",
+          },
+        ],
         gradeType: [
           {
             type: "number",
@@ -855,6 +863,13 @@ export default {
         }
         //课程排序问题检查
         for (let i = 0; i < this.$refs.courseContent.tableData.length; i++) {
+          if (
+            this.$refs.courseContent.tableData[i].viewSign != this.listData.viewSign
+          ) {
+            this.$message.warning(`课程列表数据请与商品视频类型保持一致`);
+            this.disabledBtn = false;
+            return;
+          }
           if (
             !this.$refs.courseContent.tableData[i].sort &&
             this.$refs.courseContent.tableData[i].sort !== 0

+ 6 - 0
src/views/Marketing/goods/commodityManageMent/add/productInformation.vue

@@ -40,6 +40,12 @@
             </el-option>
           </el-select>
         </el-form-item>
+        <el-form-item label="视频类型" prop="viewSign" v-if="listData.goodsType == 1 || listData.goodsType == 6">
+          <el-radio-group v-model="listData.viewSign">
+            <el-radio :label="1">保利威</el-radio>
+            <el-radio :label="2">腾讯</el-radio>
+          </el-radio-group>
+        </el-form-item>
         <el-form-item label="教育类型" prop="educationTypeId">
           <el-select
             v-model="listData.educationTypeId"

+ 10 - 0
src/views/Marketing/goods/commodityManageMent/edit/courseContent/courseCheck.vue

@@ -71,6 +71,15 @@
                     : "未知"
                 }}
               </span>
+              <span v-else-if="item.scope === 'viewSign'">
+                {{
+                  scope.row[item.prop] === 1
+                    ? "保利威"
+                    : scope.row[item.prop] === 2
+                    ? "腾讯"
+                    : ""
+                }}
+              </span>
               <span v-else>{{ scope.row[item.prop] }}</span></template
             >
           </el-table-column></template
@@ -108,6 +117,7 @@ export default {
       tableSet: [
         { label: "课程编码", prop: "code", width: "140px" },
         { label: "名称前缀", prop: "prefixName", width: "160px" },
+        { label: "视频类型", prop: "viewSign", scope: "viewSign" },
         { label: "课程标题", prop: "courseName" },
         {
           label: "发布状态",

+ 10 - 0
src/views/Marketing/goods/commodityManageMent/edit/courseContent/index.vue

@@ -85,6 +85,15 @@
               ? "课程"
               : "未知"
           }}</span>
+              <span v-else-if="item.scope === 'viewSign'">
+                {{
+                  scope.row[item.prop] === 1
+                    ? "保利威"
+                    : scope.row[item.prop] === 2
+                    ? "腾讯"
+                    : ""
+                }}
+              </span>
           <span v-else-if="item.scope === 'busin'">
             {{ scope.row[item.prop1] + " - " + scope.row[item.prop2] }}
           </span>
@@ -234,6 +243,7 @@ export default {
       tableSetVideo: [
         { label: "排序", prop: "sort", scope: "inputs", width: "100" },
         { label: "编码", prop: "code", width: "140" },
+        { label: "视频类型", prop: "viewSign", scope: "viewSign" },
         // { label: "课程名称", prop: "courseName", width: "300", type: 1 },
         {
           label: "名称",

+ 11 - 0
src/views/Marketing/goods/commodityManageMent/edit/courseContent/moreListCheck.vue

@@ -83,6 +83,15 @@
                     : "未知"
                 }}
               </span>
+              <span v-else-if="item.scope === 'viewSign'">
+                {{
+                  scope.row[item.prop] === 1
+                    ? "保利威"
+                    : scope.row[item.prop] === 2
+                    ? "腾讯"
+                    : ""
+                }}
+              </span>
               <span v-else>{{ scope.row[item.prop] }}</span></template
             >
           </el-table-column></template
@@ -121,6 +130,7 @@ export default {
       tableSet: [
         { label: "编码", prop: "code", width: "140px" },
         { label: "名称前缀", prop: "prefixName", width: "160px" },
+        { label: "视频类型", prop: "viewSign", scope: "viewSign" },
         { label: "模块标题", prop: "moduleName", type: 1 },
         { label: "章标题", prop: "name", type: 2 },
         { label: "节标题", prop: "name", type: 3 },
@@ -296,6 +306,7 @@ export default {
             code: item.code,
             courseId:this.bfCourseId,
             publishStatus: item.publishStatus,
+            viewSign:item.viewSign,
             durationTime: item.durationTime,
             sectionType: splitStr[0] === 3 ? item.sectionType : "",
             auditionMinute:

+ 15 - 0
src/views/Marketing/goods/commodityManageMent/edit/index.vue

@@ -271,6 +271,14 @@ export default {
             trigger: "change",
           },
         ],
+        viewSign: [
+          {
+            type: "number",
+            required: true,
+            message: "请选择视频类型",
+            trigger: "change",
+          },
+        ],
         gradeType: [
           {
             type: "number",
@@ -1086,6 +1094,13 @@ export default {
         }
         //课程排序问题检查
         for (let i = 0; i < this.$refs.courseContent.tableData.length; i++) {
+          if (
+            this.$refs.courseContent.tableData[i].viewSign != this.listData.viewSign
+          ) {
+            this.$message.warning(`课程列表数据请与商品视频类型保持一致`);
+            this.disabledBtn = false;
+            return;
+          }
           if (
             !this.$refs.courseContent.tableData[i].sort &&
             this.$refs.courseContent.tableData[i].sort !== 0

+ 6 - 0
src/views/Marketing/goods/commodityManageMent/edit/productInformation.vue

@@ -41,6 +41,12 @@
             </el-option>
           </el-select>
         </el-form-item>
+        <el-form-item label="视频类型" prop="viewSign" v-if="listData.goodsType == 1 || listData.goodsType == 6">
+          <el-radio-group v-model="listData.viewSign">
+            <el-radio :label="1">保利威</el-radio>
+            <el-radio :label="2">腾讯</el-radio>
+          </el-radio-group>
+        </el-form-item>
         <el-form-item label="教育类型" prop="educationTypeId">
           <el-select
             v-model="listData.educationTypeId"

+ 60 - 38
src/views/resource/videoManagement/chapter/add/index.vue

@@ -201,6 +201,12 @@
             <el-radio :label="0">非公共章</el-radio>
           </el-radio-group>
         </el-form-item>
+        <el-form-item label="视频类型" prop="viewSign">
+          <el-radio-group v-model="listData.viewSign">
+            <el-radio :label="1">保利威</el-radio>
+            <el-radio :label="2">腾讯</el-radio>
+          </el-radio-group>
+        </el-form-item>
         <el-form-item label="是否发布" prop="publishStatus">
           <el-radio-group v-model="listData.publishStatus">
             <el-radio :label="1">是</el-radio>
@@ -247,15 +253,13 @@
             :prop="item.prop"
           >
             <template slot-scope="scope">
-              <span v-if="item.scope === 'types'">{{
-                scope.row[item.prop] === 1
-                  ? "录播"
-                  : scope.row[item.prop] === 2
-                  ? "直播"
-                  : scope.row[item.prop] === 3
-                  ? "回放"
-                  : "未知"
-              }}</span>
+              <span v-if="item.scope === 'isOptions'">
+                <span v-for="(items, indexs) in item.options" :key="indexs">
+                  <span v-if="scope.row[item.prop] == items.value">{{
+                    items.label
+                  }}</span>
+                </span>
+              </span>
               <span v-else-if="item.scope === 'convert'">{{
                 $methodsTools.secondToDate(scope.row[item.prop], false)
               }}</span>
@@ -264,15 +268,6 @@
                   ? scope.row[item.prop2]
                   : scope.row[item.prop1]
               }}</span>
-              <span v-else-if="item.scope === 'Status'">
-                {{
-                  scope.row[item.prop] === 1
-                    ? "发布"
-                    : scope.row[item.prop] === 0
-                    ? "未发布"
-                    : "未知"
-                }}
-              </span>
               <div v-else-if="item.scope === 'inputs'">
                 <el-input-number
                   style="width: 50px"
@@ -373,15 +368,13 @@
             header-align="center"
           >
             <template slot-scope="scope">
-              <span v-if="item.scope === 'types'">{{
-                scope.row[item.prop] === 1
-                  ? "录播"
-                  : scope.row[item.prop] === 2
-                  ? "直播"
-                  : scope.row[item.prop] === 3
-                  ? "回放"
-                  : ""
-              }}</span>
+              <span v-if="item.scope === 'isOptions'">
+                <span v-for="(items, indexs) in item.options" :key="indexs">
+                  <span v-if="scope.row[item.prop] == items.value">{{
+                    items.label
+                  }}</span>
+                </span>
+              </span>
               <span v-else-if="item.scope === 'convert'">{{
                 $methodsTools.secondToDate(scope.row[item.prop], false)
               }}</span>
@@ -390,15 +383,6 @@
                   ? scope.row[item.prop2]
                   : scope.row[item.prop1]
               }}</span>
-              <span v-else-if="item.scope === 'Status'">
-                {{
-                  scope.row[item.prop] === 1
-                    ? "发布"
-                    : scope.row[item.prop] === 0
-                    ? "未发布"
-                    : "未知"
-                }}
-              </span>
               <span v-else>{{ scope.row[item.prop] }}</span></template
             >
           </el-table-column></template
@@ -464,6 +448,7 @@ export default {
         publishStatus: 1,
         recordingUrl: "",
         liveUrl: "",
+        viewSign:1,
         coverUrl: "oss/images/avatar/20211013/1634097664410_1397766697",
       },
       eduTypeOptions: [], //教育类型数据
@@ -490,6 +475,9 @@ export default {
         commonSign: [
           { required: true, message: "请选择公共标识", trigger: "change" },
         ],
+        viewSign: [
+          { required: true, message: "请选择视频类型", trigger: "change" },
+        ],
         publishStatus: [
           { required: true, message: "请选择是否发布", trigger: "change" },
         ],
@@ -501,7 +489,29 @@ export default {
         { label: "节编码", prop: "code", width: "120" },
         { label: "标题前缀", prop: "prefixName", width: "180" },
         { label: "节标题", prop: "name", width: "310" },
-        { label: "节类型", prop: "sectionType", scope: "types" },
+        {
+          label: "节类型",
+          prop: "sectionType",
+          scope: "isOptions",
+          options: [
+            {
+              label: "录播",
+              value: 1,
+            },
+            { label: "直播", value: 2 },
+            { label: "回放", value: 3 },
+          ],
+        },
+        {
+          label: "视频类型",
+          prop: "viewSign",
+          scope: "isOptions",
+          options: [
+            { label: "保利威", value: 1 },
+            { label: "腾讯", value: 2 },
+          ],
+          width: "120",
+        },
         {
           label: "URL地址/直播地址",
           prop: "sectionType",
@@ -520,7 +530,14 @@ export default {
         {
           label: "发布状态",
           prop: "publishStatus",
-          scope: "Status",
+          scope: "isOptions",
+          options: [
+            {
+              label: "发布",
+              value: 1,
+            },
+            { label: "未发布", value: 0 },
+          ],
           width: "120",
         },
       ],
@@ -943,6 +960,10 @@ export default {
               this.$message.warning(`管理节第${i + 1}条请输入排序`);
               return;
             }
+            if(this.tableData[i].viewSign != this.listData.viewSign){
+              this.$message.warning("请保持节视频类型与章关联视频类型保持一致")
+              return
+            }
           }
           let arr = this.tableData.map((items) => {
             return items.sort;
@@ -968,6 +989,7 @@ export default {
       });
       var dataInfos = {
         status: 1,
+        viewSign:this.listData.viewSign,
         businessList: this.newSujectApis,
         sectionIdList: sectionIdList,
         coverUrl: this.listData.coverUrl,

+ 47 - 11
src/views/resource/videoManagement/chapter/addSection.vue

@@ -58,18 +58,38 @@
                     </el-option>
                   </el-select>
                 </el-form-item>
+                <el-form-item
+                  label="视频类型"
+                  prop="viewSign"
+                  v-if="item.sectionType === 1"
+                >
+                  <el-radio-group v-model="item.viewSign">
+                    <el-radio :label="1">保利威</el-radio>
+                    <el-radio :label="2">腾讯</el-radio>
+                  </el-radio-group>
+                </el-form-item>
                 <el-form-item
                   v-if="item.sectionType"
                   :label="item.sectionType === 1 ? 'URL地址' : '频道号'"
                   prop="url"
                 >
                   <el-input
+                    :disabled="
+                      item.sectionType == 1 && !item.viewSign ? true : false
+                    "
                     v-model="item.url"
                     @blur="
-                      item.sectionType === 1 ? getUrlTime(index, $event) : ''
+                      item.sectionType === 1
+                        ? getUrlTime(item.viewSign, index, $event)
+                        : ''
                     "
-                  ><el-button :disabled="item.url.length <= 0" slot="append" @click="seeTheVideoFunc(item)">预览</el-button></el-input>
-                   
+                    ><el-button
+                      :disabled="item.url.length <= 0"
+                      slot="append"
+                      @click="seeTheVideoFunc(item)"
+                      >预览</el-button
+                    ></el-input
+                  >
                 </el-form-item>
                 <div v-if="item.sectionType === 1">
                   <el-form-item label="节时长" prop="durationTime">
@@ -171,6 +191,9 @@ export default {
         sectionType: [
           { required: true, message: "请选择节类型", trigger: "change" },
         ],
+        viewSign: [
+          { required: true, message: "请选择视频类型", trigger: "change" },
+        ],
         url: [
           { required: true, message: "请输入URL地址/频道号", trigger: "blur" },
         ],
@@ -223,15 +246,22 @@ export default {
     /**
      * 查找节时长
      */
-    getUrlTime(index, value) {
+    getUrlTime(viewSign, index, value) {
       var self = this;
       let val = value.target.value;
       const valueUrl = val.replace(/\s/g, "");
-      if (valueUrl && valueUrl.length > 30) {
-        this.$api
-          .inquirepolyvvideo(valueUrl)
+      if (valueUrl && valueUrl.length > 10) {
+        this.$api[
+          viewSign == 1 ? "inquirepolyvvideo" : "inquirevodvideodetail"
+        ](valueUrl)
           .then((res) => {
             if (res.data.duration) {
+              if (viewSign == 2) {
+                res.data.duration = this.$methodsTools.secondToDate(
+                  res.data.duration,
+                  false
+                );
+              }
               this.$set(this.list[index], "durationTime", res.data.duration);
               this.$set(this.list[index], "disabled", true);
               this.$message.success("已自动录入节时长");
@@ -272,7 +302,13 @@ export default {
      * 修改节类型需要处理的逻辑
      */
     changesType(index, val) {
-      let ary = ["url", "durationTime", "liveStartTime", "liveEndTime"];
+      let ary = [
+        "url",
+        "durationTime",
+        "liveStartTime",
+        "liveEndTime",
+        "viewSign",
+      ];
       for (let i = 0; i < ary.length; i++) {
         this.$set(this.list[index], ary[i], "");
       }
@@ -366,11 +402,11 @@ export default {
      */
     seeTheVideoFunc(item) {
       let jsonstr = JSON.parse(JSON.stringify(item));
-      if(jsonstr.sectionType === 1){
+      if (jsonstr.sectionType === 1) {
         jsonstr.recordingUrl = item.url;
       }
-      if(jsonstr.sectionType === 2){
-        jsonstr.liveUrl = item.url
+      if (jsonstr.sectionType === 2) {
+        jsonstr.liveUrl = item.url;
       }
       this.$parent.$refs.preview.diavosFun(jsonstr);
     },

+ 59 - 38
src/views/resource/videoManagement/chapter/edit/index.vue

@@ -173,6 +173,12 @@
             <el-radio :label="0">非公共章</el-radio>
           </el-radio-group>
         </el-form-item>
+        <el-form-item label="视频类型" prop="viewSign">
+          <el-radio-group v-model="listData.viewSign" disabled>
+            <el-radio :label="1">保利威</el-radio>
+            <el-radio :label="2">腾讯</el-radio>
+          </el-radio-group>
+        </el-form-item>
         <el-form-item label="是否发布" prop="publishStatus">
           <el-radio-group v-model="listData.publishStatus">
             <el-radio :label="1">是</el-radio>
@@ -219,15 +225,13 @@
             :prop="item.prop"
           >
             <template slot-scope="scope">
-              <span v-if="item.scope === 'types'">{{
-                scope.row[item.prop] === 1
-                  ? "录播"
-                  : scope.row[item.prop] === 2
-                  ? "直播"
-                  : scope.row[item.prop] === 3
-                  ? "回放"
-                  : "未知"
-              }}</span>
+              <span v-if="item.scope === 'isOptions'">
+                <span v-for="(items, indexs) in item.options" :key="indexs">
+                  <span v-if="scope.row[item.prop] == items.value">{{
+                    items.label
+                  }}</span>
+                </span>
+              </span>
               <span v-else-if="item.scope === 'convert'">{{
                 $methodsTools.secondToDate(scope.row[item.prop], false)
               }}</span>
@@ -236,15 +240,6 @@
                   ? scope.row[item.prop2]
                   : scope.row[item.prop1]
               }}</span>
-              <span v-else-if="item.scope === 'Status'">
-                {{
-                  scope.row[item.prop] === 1
-                    ? "发布"
-                    : scope.row[item.prop] === 0
-                    ? "未发布"
-                    : "未知"
-                }}
-              </span>
               <div v-else-if="item.scope === 'inputs'">
                 <el-input-number
                   style="width: 50px"
@@ -346,15 +341,13 @@
             header-align="center"
           >
             <template slot-scope="scope">
-              <span v-if="item.scope === 'types'">{{
-                scope.row[item.prop] === 1
-                  ? "录播"
-                  : scope.row[item.prop] === 2
-                  ? "直播"
-                  : scope.row[item.prop] === 3
-                  ? "回放"
-                  : ""
-              }}</span>
+              <span v-if="item.scope === 'isOptions'">
+                <span v-for="(items, indexs) in item.options" :key="indexs">
+                  <span v-if="scope.row[item.prop] == items.value">{{
+                    items.label
+                  }}</span>
+                </span>
+              </span>
               <span v-else-if="item.scope === 'convert'">{{
                 $methodsTools.secondToDate(scope.row[item.prop], false)
               }}</span>
@@ -363,15 +356,6 @@
                   ? scope.row[item.prop2]
                   : scope.row[item.prop1]
               }}</span>
-              <span v-else-if="item.scope === 'Status'">
-                {{
-                  scope.row[item.prop] === 1
-                    ? "发布"
-                    : scope.row[item.prop] === 0
-                    ? "未发布"
-                    : "未知"
-                }}
-              </span>
               <span v-else>{{ scope.row[item.prop] }}</span></template
             >
           </el-table-column></template
@@ -461,6 +445,9 @@ export default {
         commonSign: [
           { required: true, message: "请选择公共标识", trigger: "change" },
         ],
+        viewSign: [
+          { required: true, message: "请选择视频类型", trigger: "change" },
+        ],
         publishStatus: [
           { required: true, message: "请选择是否发布", trigger: "change" },
         ],
@@ -472,7 +459,29 @@ export default {
         { label: "节编码", prop: "code", width: "120" },
         { label: "标题前缀", prop: "prefixName", width: "180" },
         { label: "节标题", prop: "name", width: "310" },
-        { label: "节类型", prop: "sectionType", scope: "types" },
+        {
+          label: "节类型",
+          prop: "sectionType",
+          scope: "isOptions",
+          options: [
+            {
+              label: "录播",
+              value: 1,
+            },
+            { label: "直播", value: 2 },
+            { label: "回放", value: 3 },
+          ],
+        },
+        {
+          label: "视频类型",
+          prop: "viewSign",
+          scope: "isOptions",
+          options: [
+            { label: "保利威", value: 1 },
+            { label: "腾讯", value: 2 },
+          ],
+          width: "120",
+        },
         {
           label: "URL地址/直播地址",
           prop: "sectionType",
@@ -491,7 +500,14 @@ export default {
         {
           label: "发布状态",
           prop: "publishStatus",
-          scope: "Status",
+          scope: "isOptions",
+          options: [
+            {
+              label: "发布",
+              value: 1,
+            },
+            { label: "未发布", value: 0 },
+          ],
           width: "120",
         },
       ],
@@ -983,6 +999,10 @@ export default {
               this.$message.warning(`管理节第${i + 1}条请输入排序`);
               return;
             }
+            if(this.tableData[i].viewSign != this.listData.viewSign){
+              this.$message.warning("请保持节视频类型与章关联视频类型保持一致")
+              return
+            }
           }
           let arr = this.tableData.map((items) => {
             return items.sort;
@@ -1011,6 +1031,7 @@ export default {
       });
       var dataInfos = {
         status: 1,
+        viewSign:this.listData.viewSign,
         chapterId: this.pageId,
         businessList: this.newSujectApis,
         sectionIdList: sectionIdList,

+ 13 - 7
src/views/resource/videoManagement/courseManagement/basicInfoAdd/index.vue

@@ -72,11 +72,7 @@
             </el-option>
           </el-select>
         </el-form-item> -->
-        <el-form-item
-          label="科目"
-          prop="subjectId"
-          v-if="listData.businessId"
-        >
+        <el-form-item label="科目" prop="subjectId" v-if="listData.businessId">
           <el-select v-model="listData.subjectId" placeholder="请选择科目">
             <el-option
               v-for="(item, index) in newSujectOption"
@@ -147,6 +143,12 @@
             >删除</el-button
           >
         </el-form-item>
+        <el-form-item label="视频类型" prop="viewSign">
+          <el-radio-group v-model="listData.viewSign">
+            <el-radio :label="1">保利威</el-radio>
+            <el-radio :label="2">腾讯</el-radio>
+          </el-radio-group>
+        </el-form-item>
         <el-form-item label="是否发布" prop="publishStatus">
           <el-radio-group v-model="listData.publishStatus">
             <el-radio :label="1">是</el-radio>
@@ -230,6 +232,7 @@ export default {
         schoolId: "",
         majorId: "",
         subjectId: "",
+        viewSign:1,
       },
 
       eduTypeOptions: [], //教育类型数据
@@ -285,6 +288,9 @@ export default {
         courseName: [
           { required: true, message: "请输入课程名称", trigger: "blur" },
         ],
+        viewSign: [
+          { required: true, message: "请选择视频类型", trigger: "change" },
+        ],
         publishStatus: [
           { required: true, message: "请选择是否发布", trigger: "change" },
         ],
@@ -404,7 +410,7 @@ export default {
           // if (!newMajorOption.length) {
           //   this.newMajorOption = this.majorOption;
           // } else {
-            this.newMajorOption = newMajorOption;
+          this.newMajorOption = newMajorOption;
           // }
           for (let i = 0; i < this.sujectOption.length; i++) {
             if (
@@ -593,4 +599,4 @@ export default {
   text-align: center;
   border: none;
 }
-</style>
+</style>

+ 9 - 0
src/views/resource/videoManagement/courseManagement/basicInfoEdit/index.vue

@@ -150,6 +150,12 @@
             >删除</el-button
           >
         </el-form-item>
+        <el-form-item label="视频类型" prop="viewSign" >
+          <el-radio-group v-model="listData.viewSign" disabled>
+            <el-radio :label="1">保利威</el-radio>
+            <el-radio :label="2">腾讯</el-radio>
+          </el-radio-group>
+        </el-form-item>
         <el-form-item label="是否发布" prop="publishStatus">
           <el-radio-group v-model="listData.publishStatus">
             <el-radio :label="1">是</el-radio>
@@ -287,6 +293,9 @@ export default {
         courseName: [
           { required: true, message: "请输入课程名称", trigger: "blur" },
         ],
+        viewSign: [
+          { required: true, message: "请选择视频类型", trigger: "change" },
+        ],
         publishStatus: [
           { required: true, message: "请选择是否发布", trigger: "change" },
         ],

+ 2 - 0
src/views/resource/videoManagement/courseManagement/chapterContent/index.vue

@@ -510,6 +510,7 @@ export default {
         publishStatus: 1,
         name: "",
         key: "",
+        viewSign:""
       },
       formList5: [],
       total6: 0,
@@ -737,6 +738,7 @@ export default {
     search() {
       this.$api.obtainCourseS(this.$route.query.id).then((res) => {
         this.pageInfo = res.data;
+        this.formData5.viewSign = res.data.viewSign || ""
       });
       this.$api
         .inquireCoursemenuListS({ courseId: this.$route.query.id })

+ 206 - 116
src/views/resource/videoManagement/festival/add/index.vue

@@ -9,7 +9,11 @@
         ref="listData"
       >
         <el-form-item label="适用业务层级" required>
-          <el-select v-model="eduType" placeholder="请选择教育类型" @change="changeEduType">
+          <el-select
+            v-model="eduType"
+            placeholder="请选择教育类型"
+            @change="changeEduType"
+          >
             <el-option
               v-for="(item, index) in eduTypeOptions"
               :key="index"
@@ -17,7 +21,11 @@
               :value="item.id"
             ></el-option>
           </el-select>
-          <el-select v-model="courType" placeholder="请选择业务层次" @change="changecourseType">
+          <el-select
+            v-model="courType"
+            placeholder="请选择业务层次"
+            @change="changecourseType"
+          >
             <el-option
               v-for="(item, index) in newCourTypeOptions"
               :key="index"
@@ -37,7 +45,8 @@
               v-model="checkAll"
               @change="handleCheckAllChange"
               :indeterminate="isIndeterminate"
-            >全选</el-checkbox>
+              >全选</el-checkbox
+            >
             <el-checkbox-group
               v-model="sujectArray"
               class="checkboxSty"
@@ -47,34 +56,47 @@
                 v-for="(item, index) in newSujectOption"
                 :label="item.newId"
                 :key="index"
-              >{{ item.subjectName }}</el-checkbox>
+                >{{ item.subjectName }}</el-checkbox
+              >
             </el-checkbox-group>
             <div style="display: block; text-align: center; margin-top: 10px">
-              <el-button size="mini" type="primary" @click="submitSujectArray">确定</el-button>
+              <el-button size="mini" type="primary" @click="submitSujectArray"
+                >确定</el-button
+              >
             </div>
-            <el-button slot="reference" style="margin-left: 12px" @click="getMessage">请选择科目</el-button>
+            <el-button
+              slot="reference"
+              style="margin-left: 12px"
+              @click="getMessage"
+              >请选择科目</el-button
+            >
           </el-popover>
           <span style="margin-left: 10px">注:可多选</span>
         </el-form-item>
         <el-form-item label>
           <div :class="changeHeight ? 'ach' : 'clh'">
-            <div v-for="(item, index) in newSujectApis" :key="index" class="listBoxStys">
+            <div
+              v-for="(item, index) in newSujectApis"
+              :key="index"
+              class="listBoxStys"
+            >
               {{
-              item.educationName +
-              " - " +
-              item.projectName +
-              " - " +
-              item.businessName +
-              " - " +
-              item.subjectName
+                item.educationName +
+                " - " +
+                item.projectName +
+                " - " +
+                item.businessName +
+                " - " +
+                item.subjectName
               }}
-              <i
-                class="el-icon-error closeIcons"
-                @click="closeType(index)"
-              ></i>
+              <i class="el-icon-error closeIcons" @click="closeType(index)"></i>
             </div>
           </div>
-          <el-popover placement="bottom-start" trigger="hover" :close-delay="50">
+          <el-popover
+            placement="bottom-start"
+            trigger="hover"
+            :close-delay="50"
+          >
             <ul style="margin: 0; max-width: 600px">
               <li
                 class="copyDataLi"
@@ -84,7 +106,7 @@
                 @click="unTime(itemT)"
               >
                 {{
-                `${itemT.educationName}-${itemT.projectName}-${itemT.businessName}-${itemT.subjectName}`
+                  `${itemT.educationName}-${itemT.projectName}-${itemT.businessName}-${itemT.subjectName}`
                 }}
               </li>
             </ul>
@@ -94,14 +116,21 @@
               slot="reference"
               size="mini"
               style="margin-right: 10px"
-            >最近选择</el-button>
+              >最近选择</el-button
+            >
           </el-popover>
           <el-button
             size="mini"
             v-if="newSujectApis.length > 1"
             @click="changeType"
-          >{{ changeHeight ? "展开" : "关闭" }}</el-button>
-          <el-button size="mini" v-if="newSujectApis.length > 0" @click="sujectApis = []">清空</el-button>
+            >{{ changeHeight ? "展开" : "关闭" }}</el-button
+          >
+          <el-button
+            size="mini"
+            v-if="newSujectApis.length > 0"
+            @click="sujectApis = []"
+            >清空</el-button
+          >
           <!-- <span v-if="newSujectApis.length === 0">未选项目类型</span> -->
         </el-form-item>
         <el-form-item label="标题前缀">
@@ -110,7 +139,9 @@
         </el-form-item>
         <el-form-item label="节标题" prop="name">
           <el-input v-model="listData.name"></el-input>
-          <div style="color: #999">注:请尽量规范易懂,方便在课程目录表呈现给学员</div>
+          <div style="color: #999">
+            注:请尽量规范易懂,方便在课程目录表呈现给学员
+          </div>
         </el-form-item>
         <el-form-item label="节类型">
           <el-select
@@ -129,15 +160,27 @@
         </el-form-item>
 
         <el-form-item label="视频类型" prop="viewSign">
-          <el-radio-group v-model="listData.viewSign">
+          <el-radio-group v-model="listData.viewSign" @change="changeViewSign">
             <el-radio :label="1">保利威</el-radio>
             <el-radio :label="2">腾讯</el-radio>
           </el-radio-group>
         </el-form-item>
 
-        <el-form-item label="频道号" v-if="listData.sectionType === 2" prop="liveUrl">
-          <el-input style="width: 300px" v-model="listData.liveUrl" placeholder="请输入频道号"></el-input>
-          <el-select v-model="newActiveLiveUrl" placeholder="快捷选中频道号" @change="changeLiveUrl">
+        <el-form-item
+          label="频道号"
+          v-if="listData.sectionType === 2"
+          prop="liveUrl"
+        >
+          <el-input
+            style="width: 300px"
+            v-model="listData.liveUrl"
+            placeholder="请输入频道号"
+          ></el-input>
+          <el-select
+            v-model="newActiveLiveUrl"
+            placeholder="快捷选中频道号"
+            @change="changeLiveUrl"
+          >
             <el-option
               v-for="(item, index) in newLiveUrl"
               :key="index"
@@ -146,10 +189,19 @@
             ></el-option>
           </el-select>
           <div v-if="listData.liveUrl" style="margin-top: 10px">
-            <el-button size="small" type="warning" @click="watchZbVideo(listData.liveUrl)">直播预览</el-button>
+            <el-button
+              size="small"
+              type="warning"
+              @click="watchZbVideo(listData.liveUrl)"
+              >直播预览</el-button
+            >
           </div>
         </el-form-item>
-        <el-form-item label="直播开始时间" v-if="listData.sectionType === 2" prop="liveStartTime">
+        <el-form-item
+          label="直播开始时间"
+          v-if="listData.sectionType === 2"
+          prop="liveStartTime"
+        >
           <el-date-picker
             v-model="listData.liveStartTime"
             type="datetime"
@@ -157,7 +209,11 @@
             value-format="timestamp"
           ></el-date-picker>
         </el-form-item>
-        <el-form-item label="直播结束时间" v-if="listData.sectionType === 2" prop="liveEndTime">
+        <el-form-item
+          label="直播结束时间"
+          v-if="listData.sectionType === 2"
+          prop="liveEndTime"
+        >
           <el-date-picker
             v-model="listData.liveEndTime"
             type="datetime"
@@ -172,7 +228,10 @@
             listData.liveStartTime &&
             listData.liveEndTime
           "
-        >{{ compTimeOUT(listData.liveStartTime, listData.liveEndTime) }}</el-form-item>
+          >{{
+            compTimeOUT(listData.liveStartTime, listData.liveEndTime)
+          }}</el-form-item
+        >
         <el-form-item
           label="URL地址"
           v-if="listData.sectionType === 1 || listData.sectionType === 3"
@@ -185,13 +244,20 @@
             @change="getApiTime(listData.recordingUrl)"
           ></el-input>
           <label
+            v-if="listData.viewSign == 1"
             for="mobles"
             class="el-button el-button--primary"
             style="margin: 0px 6px; padding: 10px 20px"
-          >上传</label>
-          <input style="display: none" type="file" id="mobles" @change="importMoble" />
+            >上传</label
+          >
+          <input
+            style="display: none"
+            type="file"
+            id="mobles"
+            @change="importMoble"
+          />
           <el-select
-            v-if="listData.sectionType === 1"
+            v-if="listData.sectionType === 1 && listData.viewSign == 1"
             v-model="newActiveRecordingUrl1"
             filterable
             placeholder="快捷选中录播URL地址"
@@ -219,7 +285,12 @@
             ></el-option>
           </el-select>
           <div v-if="listData.recordingUrl" style="margin-top: 10px">
-            <el-button size="small" type="warning" @click="watchVideo(listData.recordingUrl)">视频预览</el-button>
+            <el-button
+              size="small"
+              type="warning"
+              @click="watchVideo(listData.recordingUrl)"
+              >视频预览</el-button
+            >
           </div>
         </el-form-item>
         <el-form-item
@@ -235,8 +306,15 @@
             placeholder="请填入节时长"
           ></el-time-picker>
         </el-form-item>
-        <el-form-item label="讲师" :prop="listData.sectionType === 2 ? 'teacherId' : ''">
-          <el-select v-model="listData.teacherId" placeholder="请选择讲师" filterable>
+        <el-form-item
+          label="讲师"
+          :prop="listData.sectionType === 2 ? 'teacherId' : ''"
+        >
+          <el-select
+            v-model="listData.teacherId"
+            placeholder="请选择讲师"
+            filterable
+          >
             <el-option
               v-for="(item, index) in teacherList"
               :key="index"
@@ -280,9 +358,9 @@
               ></el-image>
             </el-col>
             <el-col :span="11">
-              <span
-                style="color: #999; font-size: 14px"
-              >注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型</span>
+              <span style="color: #999; font-size: 14px"
+                >注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型</span
+              >
             </el-col>
           </el-row>
           <el-button
@@ -291,7 +369,8 @@
             size="mini"
             class="margin-top: 20px;"
             @click="clearImgs"
-          >删除</el-button>
+            >删除</el-button
+          >
         </el-form-item>
         <el-form-item label="是否发布" prop="publishStatus">
           <el-radio-group v-model="listData.publishStatus">
@@ -301,7 +380,12 @@
         </el-form-item>
         <el-form-item>
           <el-button @click="backPage">取消</el-button>
-          <el-button type="primary" @click="submit('listData')" :loading="disabledBtn">确定</el-button>
+          <el-button
+            type="primary"
+            @click="submit('listData')"
+            :loading="disabledBtn"
+            >确定</el-button
+          >
         </el-form-item>
       </el-form>
     </div>
@@ -373,17 +457,17 @@ export default {
         cataid: "1639399775001", // 分类ID 可以后端传递 也可以不写 或写死
         tag: "i am tag", // 标签
         luping: 0, // 是否开启视频课件优化处理,对于上传录屏类视频清晰度有所优化:0为不开启,1为开启
-        keepsource: 1 // 是否源文件播放(不对视频进行编码):0为编码,1为不编码
+        keepsource: 1, // 是否源文件播放(不对视频进行编码):0为编码,1为不编码
       },
       sectionTypeOptions: [
         {
           label: "录播",
-          value: 1
+          value: 1,
         },
         {
           label: "直播",
-          value: 2
-        }
+          value: 2,
+        },
         // {
         //   label: "回放",
         //   value: 3,
@@ -399,7 +483,7 @@ export default {
         publishStatus: 1,
         recordingUrl: "",
         liveUrl: "",
-        coverUrl: "oss/images/avatar/20211013/1634097664410_1397766697"
+        coverUrl: "oss/images/avatar/20211013/1634097664410_1397766697",
       },
       newActiveLiveUrl: "",
       newLiveUrl: [], //直播流地址
@@ -424,7 +508,7 @@ export default {
       //表单验证
       rules: {
         prefixName: [
-          { required: true, message: "请输入标题前缀", trigger: "blur" }
+          { required: true, message: "请输入标题前缀", trigger: "blur" },
         ],
         name: [{ required: true, message: "请输入节标题", trigger: "blur" }],
         // liveDuration: [
@@ -432,39 +516,41 @@ export default {
         //   { type: "number", message: "节时长必须为数字值" },
         // ],
         viewSign: [
-          { required: true, message: "请选择视频类型", trigger: "change" }
+          { required: true, message: "请选择视频类型", trigger: "change" },
         ],
         recordingUrl: [
           {
             required: true,
             message: "请输入URL地址",
-            trigger: ["blur", "change"]
-          }
+            trigger: ["blur", "change"],
+          },
         ],
         durationTime: [
-          { required: false, message: "请选择节时长", trigger: "change" }
+          { required: false, message: "请选择节时长", trigger: "change" },
         ],
         liveUrl: [
           {
             required: true,
             message: "请输入频道号",
-            trigger: ["blur", "change"]
-          }
+            trigger: ["blur", "change"],
+          },
         ],
         liveStartTime: [
-          { required: true, message: "请选择直播开始时间", trigger: "change" }
+          { required: true, message: "请选择直播开始时间", trigger: "change" },
         ],
         liveEndTime: [
-          { required: true, message: "请选择直播结束时间", trigger: "change" }
+          { required: true, message: "请选择直播结束时间", trigger: "change" },
         ],
         teacherId: [
-          { required: true, message: "请选择讲师", trigger: "change" }
+          { required: true, message: "请选择讲师", trigger: "change" },
         ],
         publishStatus: [
-          { required: true, message: "请选择是否发布", trigger: "change" }
+          { required: true, message: "请选择是否发布", trigger: "change" },
         ],
-        coverUrl: [{ required: true, message: "请上传封面", trigger: "change" }]
-      }
+        coverUrl: [
+          { required: true, message: "请上传封面", trigger: "change" },
+        ],
+      },
     };
   },
   watch: {
@@ -472,18 +558,23 @@ export default {
       immediate: true,
       handler(newName, oldName) {
         this.changeTypes();
-      }
-    }
+      },
+    },
   },
   mounted() {
     this.localData = this.$methodsTools.getBusinessList();
     this.getDict();
   },
   methods: {
+    changeViewSign(){
+      this.listData.recordingUrl = ''
+      this.listData.durationTime = ''
+    },
     changeTypeSection() {
       this.$nextTick(() => {
         this.$refs.listData.clearValidate();
       });
+      this.changeViewSign()
     },
     unTime(val) {
       let a = `${val.businessId}-${val.subjectId}`;
@@ -495,7 +586,7 @@ export default {
     },
     changeSty(val) {
       var arr = "";
-      this.sujectApis.forEach(item => {
+      this.sujectApis.forEach((item) => {
         let arr1 = item.split("-").map(Number);
         if (val.businessId == arr1[0] && val.subjectId == arr1[1]) {
           arr = "activeStyIcons";
@@ -504,7 +595,7 @@ export default {
       return arr;
     },
     handleCheckedCitiesChange() {
-      let nid = this.newSujectOption.map(item => {
+      let nid = this.newSujectOption.map((item) => {
         return item.newId;
       });
       this.checkAll = this.sujectArray.length === nid.length;
@@ -522,18 +613,18 @@ export default {
     },
     handleCheckAllChange(val) {
       if (val) {
-        let nid = this.newSujectOption.map(item => {
+        let nid = this.newSujectOption.map((item) => {
           return item.newId;
         });
         let arrays = this.sujectArray.concat(nid);
         this.sujectArray = this.setFunc(arrays);
         this.isIndeterminate = false;
       } else {
-        let nid = this.newSujectOption.map(item => {
+        let nid = this.newSujectOption.map((item) => {
           return item.newId;
         });
         let newArr = [];
-        this.sujectArray.forEach(item => {
+        this.sujectArray.forEach((item) => {
           if (!nid.includes(item)) {
             newArr.push(item);
           }
@@ -561,7 +652,7 @@ export default {
         this.disabledBtn = true;
         this.$api
           .inquirevodvideodetail(valueUrl)
-          .then(res => {
+          .then((res) => {
             console.log("请求腾讯时长", res.data.duration);
             if (res.data.duration) {
               self.listData.durationTime = this.$methodsTools.secondToDate(
@@ -574,7 +665,7 @@ export default {
               self.disabloutime = false;
             }
           })
-          .catch(err => {
+          .catch((err) => {
             self.disabloutime = false;
           })
           .finally(() => {
@@ -585,7 +676,7 @@ export default {
           this.disabledBtn = true;
           this.$api
             .inquirepolyvvideo(valueUrl)
-            .then(res => {
+            .then((res) => {
               if (res.data.duration) {
                 self.listData.durationTime = res.data.duration;
                 self.disabloutime = true;
@@ -593,7 +684,7 @@ export default {
                 self.disabloutime = false;
               }
             })
-            .catch(err => {
+            .catch((err) => {
               self.disabloutime = false;
             })
             .finally(() => {
@@ -637,11 +728,11 @@ export default {
         height: 533,
         vid: self.vid,
         teaser_show: 0,
-        playsafe: function(vid, next) {
-          self.$api.obtainpolyvvideosign(vid).then(res => {
+        playsafe: function (vid, next) {
+          self.$api.obtainpolyvvideosign(vid).then((res) => {
             next(res.data);
           });
-        }
+        },
       });
     },
     loadPlayer_tencent() {
@@ -658,14 +749,14 @@ export default {
       document
         .getElementById("player")
         .insertAdjacentElement("afterend", player_tencent);
-      self.$api.obtaintcvideosign(self.vid).then(res => {
+      self.$api.obtaintcvideosign(self.vid).then((res) => {
         self.player_tencent = TCPlayer("player-tencent", {
           width: 800,
           height: 533,
           fileID: self.vid,
           appID: res.data.appID,
           psign: res.data.psign,
-          licenseUrl: res.data.licenseUrl
+          licenseUrl: res.data.licenseUrl,
         });
       });
     },
@@ -736,7 +827,7 @@ export default {
         width: 800,
         height: 533,
         uid: this.uidzb,
-        vid: this.vidzb
+        vid: this.vidzb,
       });
     },
     clearszb() {
@@ -762,7 +853,7 @@ export default {
        * @param: this.fileSetting -> 常规配置 上面有备注
        * @param: 回调
        */
-      uploadFile(file, this.fileSetting, event => {
+      uploadFile(file, this.fileSetting, (event) => {
         this.listData.recordingUrl = event.vid;
         this.listData.durationTime = "";
         this.getApiTime(event.vid);
@@ -781,7 +872,7 @@ export default {
       var self = this;
       var arrays = [];
       this.sujectApis.map((item, index) => {
-        this.courTypeOptions.map(items => {
+        this.courTypeOptions.map((items) => {
           if (items.id === item.split("-").map(Number)[0]) {
             var obj = {
               educationTypeId: items.educationId,
@@ -789,9 +880,9 @@ export default {
               projectId: items.projectId,
               projectName: items.projectName,
               businessId: items.id,
-              businessName: items.businessName
+              businessName: items.businessName,
             };
-            self.sujectOption.map(i => {
+            self.sujectOption.map((i) => {
               if (
                 i.id === item.split("-").map(Number)[1] &&
                 i.courseArrays.indexOf(items.projectId) !== -1
@@ -823,7 +914,7 @@ export default {
       });
     },
     changeUrl() {
-      var arr = this.newSujectApis.map(val => val.businessId);
+      var arr = this.newSujectApis.map((val) => val.businessId);
       const unique = [...new Set(arr)];
       var busId = "";
       if (unique.length) {
@@ -831,11 +922,11 @@ export default {
       } else {
         busId = "";
       }
-      this.$api.inquireCourseStreaming({ status: 1 }).then(res => {
+      this.$api.inquireCourseStreaming({ status: 1 }).then((res) => {
         var arraystt = [];
         var newarrays1tt = [];
         var newarrays2tt = [];
-        res.rows.map(item => {
+        res.rows.map((item) => {
           if (item.streamingType === 1) {
             arraystt.push(item);
           }
@@ -848,11 +939,11 @@ export default {
         });
         this.$api
           .inquireCourseStreaming({ status: 1, businessId: busId })
-          .then(result => {
+          .then((result) => {
             var arrays = [];
             var newarrays1 = [];
             var newarrays2 = [];
-            result.rows.map(item => {
+            result.rows.map((item) => {
               if (item.streamingType === 1) {
                 arrays.push(item);
               }
@@ -896,27 +987,27 @@ export default {
         this.$refs.popovers.doClose();
         return;
       }
-      this.newSujectOption.map(item => {
+      this.newSujectOption.map((item) => {
         item.newId = this.courType + "-" + item.id;
       });
       this.handleCheckedCitiesChange();
     },
     hideHandle() {},
     getDict() {
-      this.$api.inquiresystemteacherlist({ status: 1 }).then(res => {
+      this.$api.inquiresystemteacherlist({ status: 1 }).then((res) => {
         this.teacherList = res.rows;
       });
-      this.$api.inquireCourseEducationType({ status: 1 }).then(res => {
+      this.$api.inquireCourseEducationType({ status: 1 }).then((res) => {
         this.eduTypeOptions = res.rows;
       });
-      this.$api.inquireCourseProjectType({ status: 1 }).then(res => {
+      this.$api.inquireCourseProjectType({ status: 1 }).then((res) => {
         this.projectTypeOptions = res.rows;
       });
-      this.$api.inquirebusinessList({ status: 1 }).then(res => {
+      this.$api.inquirebusinessList({ status: 1 }).then((res) => {
         this.courTypeOptions = res.rows;
         this.newCourTypeOptions = res.rows;
       });
-      this.$api.inquireCourseSubject({ status: 1 }).then(res => {
+      this.$api.inquireCourseSubject({ status: 1 }).then((res) => {
         res.rows.map((item, index) => {
           var array = [];
           item.courseProjectTypes.map((items, indexs) => {
@@ -926,11 +1017,11 @@ export default {
         });
         this.sujectOption = res.rows;
       });
-      this.$api.inquireCourseStreaming({ status: 1 }).then(res => {
+      this.$api.inquireCourseStreaming({ status: 1 }).then((res) => {
         var arrays = [];
         var newarrays1 = [];
         var newarrays2 = [];
-        res.rows.map(item => {
+        res.rows.map((item) => {
           if (item.streamingType === 1) {
             arrays.push(item);
           }
@@ -951,7 +1042,7 @@ export default {
         this.courType = "";
       }
       var arrays = [];
-      this.courTypeOptions.map(item => {
+      this.courTypeOptions.map((item) => {
         if (item.educationId === this.eduType) {
           arrays.push(item);
         }
@@ -972,7 +1063,7 @@ export default {
         }
       });
       var arrays = [];
-      this.courTypeOptions.map(item => {
+      this.courTypeOptions.map((item) => {
         if (item.educationId === this.eduType) {
           arrays.push(item);
         }
@@ -981,7 +1072,7 @@ export default {
       this.$refs.popovers.doClose();
     },
     submit(formName) {
-      this.$refs[formName].validate(valid => {
+      this.$refs[formName].validate((valid) => {
         if (valid) {
           if (!this.newSujectApis.length) {
             this.$message.error("请选择适用业务层级");
@@ -1011,7 +1102,7 @@ export default {
         name: this.listData.name,
         prefixName: this.listData.prefixName,
         publishStatus: this.listData.publishStatus,
-        teacherId: this.listData.teacherId
+        teacherId: this.listData.teacherId,
       };
 
       if (this.listData.sectionType === 2) {
@@ -1053,15 +1144,17 @@ export default {
       }
       this.$api
         .appCourseSection(dataInfos)
-        .then(res => {
+        .then((res) => {
           this.$methodsTools.cacheBusinessList(this.newSujectApis);
           this.$message.success("新增成功");
           setTimeout(() => {
-            this.$store.dispatch("tagsView/exitView", this.$route).then(res => {
-              this.$router.push({
-                path: "festival"
+            this.$store
+              .dispatch("tagsView/exitView", this.$route)
+              .then((res) => {
+                this.$router.push({
+                  path: "festival",
+                });
               });
-            });
           }, 500);
         })
         .catch(() => {
@@ -1069,9 +1162,9 @@ export default {
         });
     },
     backPage() {
-      this.$store.dispatch("tagsView/delView", this.$route).then(res => {
+      this.$store.dispatch("tagsView/delView", this.$route).then((res) => {
         this.$router.push({
-          path: "festival"
+          path: "festival",
         });
       });
     },
@@ -1082,7 +1175,7 @@ export default {
       });
     },
     changeLiveUrl() {
-      this.newLiveUrl.map(item => {
+      this.newLiveUrl.map((item) => {
         if (item.id === this.newActiveLiveUrl) {
           this.listData.liveUrl = item.liveUrl;
         }
@@ -1090,7 +1183,7 @@ export default {
       this.newActiveLiveUrl = "";
     },
     changeRecordingUrl1() {
-      this.newSteamUrl1.map(item => {
+      this.newSteamUrl1.map((item) => {
         if (item.id === this.newActiveRecordingUrl1) {
           this.listData.recordingUrl = item.recordingVideoId;
           this.getApiTime(item.recordingVideoId);
@@ -1099,7 +1192,7 @@ export default {
       this.newActiveRecordingUrl1 = "";
     },
     changeRecordingUrl2() {
-      this.newSteamUrl2.map(item => {
+      this.newSteamUrl2.map((item) => {
         if (item.id === this.newActiveRecordingUrl2) {
           this.listData.recordingUrl = item.playbackUrl;
           this.getApiTime(item.recordingVideoId);
@@ -1118,10 +1211,7 @@ export default {
         self.$message.error("图片不得大于300kb");
         return;
       }
-      var type = self.$refs.file.value
-        .toLowerCase()
-        .split(".")
-        .splice(-1);
+      var type = self.$refs.file.value.toLowerCase().split(".").splice(-1);
       if (
         type[0] != "jpg" &&
         type[0] != "png" &&
@@ -1132,15 +1222,15 @@ export default {
         self.$refs.file.value = "";
         return;
       }
-      this.$upload.upload(file, 0).then(res => {
+      this.$upload.upload(file, 0).then((res) => {
         self.listData.coverUrl = res;
         self.$refs.listData.validateField("coverUrl");
       });
-    }
+    },
   },
   destroyed() {
     this.closePlayer();
-  }
+  },
 };
 </script>
 

+ 217 - 144
src/views/resource/videoManagement/festival/edit/index.vue

@@ -9,7 +9,11 @@
         ref="listData"
       >
         <el-form-item label="适用业务层级" required>
-          <el-select v-model="eduType" placeholder="请选择教育类型" @change="changeEduType">
+          <el-select
+            v-model="eduType"
+            placeholder="请选择教育类型"
+            @change="changeEduType"
+          >
             <el-option
               v-for="(item, index) in eduTypeOptions"
               :key="index"
@@ -17,7 +21,11 @@
               :value="item.id"
             ></el-option>
           </el-select>
-          <el-select v-model="courType" placeholder="请选择业务层次" @change="changecourseType">
+          <el-select
+            v-model="courType"
+            placeholder="请选择业务层次"
+            @change="changecourseType"
+          >
             <el-option
               v-for="(item, index) in newCourTypeOptions"
               :key="index"
@@ -37,7 +45,8 @@
               v-model="checkAll"
               @change="handleCheckAllChange"
               :indeterminate="isIndeterminate"
-            >全选</el-checkbox>
+              >全选</el-checkbox
+            >
             <el-checkbox-group
               v-model="sujectArray"
               class="checkboxSty"
@@ -47,39 +56,54 @@
                 v-for="(item, index) in newSujectOption"
                 :label="item.newId"
                 :key="index"
-              >{{ item.subjectName }}</el-checkbox>
+                >{{ item.subjectName }}</el-checkbox
+              >
             </el-checkbox-group>
             <div style="display: block; text-align: center; margin-top: 10px">
-              <el-button size="mini" type="primary" @click="submitSujectArray">确定</el-button>
+              <el-button size="mini" type="primary" @click="submitSujectArray"
+                >确定</el-button
+              >
             </div>
-            <el-button slot="reference" style="margin-left: 12px" @click="getMessage">请选择科目</el-button>
+            <el-button
+              slot="reference"
+              style="margin-left: 12px"
+              @click="getMessage"
+              >请选择科目</el-button
+            >
           </el-popover>
           <span style="margin-left: 10px">注:可多选</span>
         </el-form-item>
         <el-form-item label>
           <div :class="changeHeight ? 'ach' : 'clh'">
-            <div v-for="(item, index) in newSujectApis" :key="index" class="listBoxStys">
+            <div
+              v-for="(item, index) in newSujectApis"
+              :key="index"
+              class="listBoxStys"
+            >
               {{
-              item.educationName +
-              " - " +
-              item.projectName +
-              " - " +
-              item.businessName +
-              " - " +
-              item.subjectName
+                item.educationName +
+                " - " +
+                item.projectName +
+                " - " +
+                item.businessName +
+                " - " +
+                item.subjectName
               }}
-              <i
-                class="el-icon-error closeIcons"
-                @click="closeType(index)"
-              ></i>
+              <i class="el-icon-error closeIcons" @click="closeType(index)"></i>
             </div>
           </div>
           <el-button
             size="mini"
             v-if="newSujectApis.length > 1"
             @click="changeType"
-          >{{ changeHeight ? "展开" : "关闭" }}</el-button>
-          <el-button size="mini" v-if="newSujectApis.length > 0" @click="sujectApis = []">清空</el-button>
+            >{{ changeHeight ? "展开" : "关闭" }}</el-button
+          >
+          <el-button
+            size="mini"
+            v-if="newSujectApis.length > 0"
+            @click="sujectApis = []"
+            >清空</el-button
+          >
           <!-- <span v-if="newSujectApis.length === 0">未选项目类型</span> -->
         </el-form-item>
         <el-form-item label="标题前缀">
@@ -88,7 +112,9 @@
         </el-form-item>
         <el-form-item label="节标题" prop="name">
           <el-input v-model="listData.name"></el-input>
-          <div style="color: #999">注:请尽量规范易懂,方便在课程目录表呈现给学员</div>
+          <div style="color: #999">
+            注:请尽量规范易懂,方便在课程目录表呈现给学员
+          </div>
         </el-form-item>
         <el-form-item label="节类型">
           <el-select
@@ -109,15 +135,27 @@
         </el-form-item>
 
         <el-form-item label="视频类型" prop="viewSign">
-          <el-radio-group v-model="listData.viewSign">
+          <el-radio-group v-model="listData.viewSign" disabled>
             <el-radio :label="1">保利威</el-radio>
             <el-radio :label="2">腾讯</el-radio>
           </el-radio-group>
         </el-form-item>
 
-        <el-form-item label="频道号" v-if="listData.sectionType === 2" prop="liveUrl">
-          <el-input style="width: 300px" v-model="listData.liveUrl" placeholder="请输入频道号"></el-input>
-          <el-select v-model="newActiveLiveUrl" placeholder="快捷选中频道号" @change="changeLiveUrl">
+        <el-form-item
+          label="频道号"
+          v-if="listData.sectionType === 2"
+          prop="liveUrl"
+        >
+          <el-input
+            style="width: 300px"
+            v-model="listData.liveUrl"
+            placeholder="请输入频道号"
+          ></el-input>
+          <el-select
+            v-model="newActiveLiveUrl"
+            placeholder="快捷选中频道号"
+            @change="changeLiveUrl"
+          >
             <el-option
               v-for="(item, index) in newLiveUrl"
               :key="index"
@@ -126,10 +164,19 @@
             ></el-option>
           </el-select>
           <div v-if="listData.liveUrl" style="margin-top: 10px">
-            <el-button size="small" type="warning" @click="watchZbVideo(listData.liveUrl)">直播预览</el-button>
+            <el-button
+              size="small"
+              type="warning"
+              @click="watchZbVideo(listData.liveUrl)"
+              >直播预览</el-button
+            >
           </div>
         </el-form-item>
-        <el-form-item label="直播开始时间" prop="liveStartTime" v-if="listData.sectionType === 2">
+        <el-form-item
+          label="直播开始时间"
+          prop="liveStartTime"
+          v-if="listData.sectionType === 2"
+        >
           <el-date-picker
             v-model="listData.liveStartTime"
             type="datetime"
@@ -137,7 +184,11 @@
             value-format="timestamp"
           ></el-date-picker>
         </el-form-item>
-        <el-form-item label="直播结束时间" prop="liveEndTime" v-if="listData.sectionType === 2">
+        <el-form-item
+          label="直播结束时间"
+          prop="liveEndTime"
+          v-if="listData.sectionType === 2"
+        >
           <el-date-picker
             v-model="listData.liveEndTime"
             type="datetime"
@@ -152,7 +203,10 @@
             listData.liveStartTime &&
             listData.liveEndTime
           "
-        >{{ compTimeOUT(listData.liveStartTime, listData.liveEndTime) }}</el-form-item>
+          >{{
+            compTimeOUT(listData.liveStartTime, listData.liveEndTime)
+          }}</el-form-item
+        >
         <el-form-item
           label="URL地址"
           v-if="listData.sectionType === 1 || listData.sectionType === 3"
@@ -165,13 +219,20 @@
             @change="getApiTime(listData.recordingUrl)"
           ></el-input>
           <label
+          v-if="listData.viewSign == 1"
             for="mobles"
             class="el-button el-button--primary"
             style="margin: 0px 6px; padding: 10px 20px"
-          >上传</label>
-          <input style="display: none" type="file" id="mobles" @change="importMoble" />
+            >上传</label
+          >
+          <input
+            style="display: none"
+            type="file"
+            id="mobles"
+            @change="importMoble"
+          />
           <el-select
-            v-if="listData.sectionType === 1"
+            v-if="listData.sectionType === 1 && listData.viewSign == 1"
             v-model="newActiveRecordingUrl1"
             placeholder="快捷选中录播URL地址"
             filterable
@@ -199,7 +260,12 @@
             ></el-option>
           </el-select>
           <div v-if="listData.recordingUrl" style="margin-top: 10px">
-            <el-button size="small" type="warning" @click="watchVideo(listData.recordingUrl)">视频预览</el-button>
+            <el-button
+              size="small"
+              type="warning"
+              @click="watchVideo(listData.recordingUrl)"
+              >视频预览</el-button
+            >
           </div>
         </el-form-item>
         <el-form-item
@@ -215,8 +281,15 @@
             placeholder="请填入节时长"
           ></el-time-picker>
         </el-form-item>
-        <el-form-item label="讲师" :prop="listData.sectionType === 2 ? 'teacherId' : ''">
-          <el-select v-model="listData.teacherId" placeholder="请选择讲师" filterable>
+        <el-form-item
+          label="讲师"
+          :prop="listData.sectionType === 2 ? 'teacherId' : ''"
+        >
+          <el-select
+            v-model="listData.teacherId"
+            placeholder="请选择讲师"
+            filterable
+          >
             <el-option
               v-for="(item, index) in teacherList"
               :key="index"
@@ -260,9 +333,9 @@
               ></el-image>
             </el-col>
             <el-col :span="11">
-              <span
-                style="color: #999; font-size: 14px"
-              >注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型</span>
+              <span style="color: #999; font-size: 14px"
+                >注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型</span
+              >
             </el-col>
           </el-row>
           <el-button
@@ -271,7 +344,8 @@
             size="mini"
             class="margin-top: 20px;"
             @click="clearImgs"
-          >删除</el-button>
+            >删除</el-button
+          >
         </el-form-item>
         <el-form-item label="是否发布" prop="publishStatus">
           <el-radio-group v-model="listData.publishStatus">
@@ -286,7 +360,8 @@
             @click="submit('listData')"
             :disabled="listData.sectionType === 1 ? !noStudent : false"
             :loading="disabledBtn"
-          >确定</el-button>
+            >确定</el-button
+          >
         </el-form-item>
       </el-form>
     </div>
@@ -359,21 +434,21 @@ export default {
         cataid: "1639399775001", // 分类ID 可以后端传递 也可以不写 或写死
         tag: "i am tag", // 标签
         luping: 0, // 是否开启视频课件优化处理,对于上传录屏类视频清晰度有所优化:0为不开启,1为开启
-        keepsource: 1 // 是否源文件播放(不对视频进行编码):0为编码,1为不编码
+        keepsource: 1, // 是否源文件播放(不对视频进行编码):0为编码,1为不编码
       },
       sectionTypeOptions: [
         {
           label: "录播",
-          value: 1
+          value: 1,
         },
         {
           label: "直播",
-          value: 2
+          value: 2,
         },
         {
           label: "回放",
-          value: 3
-        }
+          value: 3,
+        },
       ],
       //   弹窗数据
       changeHeight: true,
@@ -381,7 +456,7 @@ export default {
       listData: {
         recordingUrl: "",
         liveUrl: "",
-        coverUrl: "oss/images/avatar/20211013/1634097664410_1397766697"
+        coverUrl: "oss/images/avatar/20211013/1634097664410_1397766697",
       },
       newActiveLiveUrl: "",
       newLiveUrl: [], //直播地址
@@ -407,7 +482,7 @@ export default {
       //表单验证
       rules: {
         prefixName: [
-          { required: true, message: "请输入标题前缀", trigger: "blur" }
+          { required: true, message: "请输入标题前缀", trigger: "blur" },
         ],
         name: [{ required: true, message: "请输入节标题", trigger: "blur" }],
         // liveDuration: [
@@ -415,40 +490,42 @@ export default {
         //   { type: "number", message: "节时长必须为数字值" },
         // ],
         viewSign: [
-          { required: true, message: "请选择视频类型", trigger: "change" }
+          { required: true, message: "请选择视频类型", trigger: "change" },
         ],
         recordingUrl: [
           {
             required: true,
             message: "请输入URL地址",
-            trigger: ["blur", "change"]
-          }
+            trigger: ["blur", "change"],
+          },
         ],
         durationTime: [
-          { required: false, message: "请选择节时长", trigger: "change" }
+          { required: false, message: "请选择节时长", trigger: "change" },
         ],
         liveUrl: [
           {
             required: true,
             message: "请输入频道号",
-            trigger: ["blur", "change"]
-          }
+            trigger: ["blur", "change"],
+          },
         ],
         liveStartTime: [
-          { required: true, message: "请选择直播开始时间", trigger: "change" }
+          { required: true, message: "请选择直播开始时间", trigger: "change" },
         ],
         liveEndTime: [
-          { required: true, message: "请选择直播结束时间", trigger: "change" }
+          { required: true, message: "请选择直播结束时间", trigger: "change" },
         ],
         teacherId: [
-          { required: true, message: "请选择讲师", trigger: "change" }
+          { required: true, message: "请选择讲师", trigger: "change" },
         ],
         publishStatus: [
-          { required: true, message: "请选择是否发布", trigger: "change" }
+          { required: true, message: "请选择是否发布", trigger: "change" },
+        ],
+        coverUrl: [
+          { required: true, message: "请上传封面", trigger: "change" },
         ],
-        coverUrl: [{ required: true, message: "请上传封面", trigger: "change" }]
       },
-      pageId: this.$route.query.id
+      pageId: this.$route.query.id,
     };
   },
   watch: {
@@ -456,12 +533,12 @@ export default {
       immediate: true,
       handler(newName, oldName) {
         this.changeTypes();
-      }
-    }
+      },
+    },
   },
   mounted() {
     this.$modal.loading("正在导入数据,请稍后...");
-    this.$api.gradecheckGoodsChange({ sectionId: this.pageId }).then(res => {
+    this.$api.gradecheckGoodsChange({ sectionId: this.pageId }).then((res) => {
       if (res.data > 0) {
         // this.noStudent = false;
       }
@@ -473,7 +550,7 @@ export default {
      * 复选框点击触发
      */
     handleCheckedCitiesChange() {
-      let nid = this.newSujectOption.map(item => {
+      let nid = this.newSujectOption.map((item) => {
         return item.newId;
       });
       this.checkAll = this.sujectArray.length === nid.length;
@@ -496,18 +573,18 @@ export default {
      */
     handleCheckAllChange(val) {
       if (val) {
-        let nid = this.newSujectOption.map(item => {
+        let nid = this.newSujectOption.map((item) => {
           return item.newId;
         });
         let arrays = this.sujectArray.concat(nid);
         this.sujectArray = this.setFunc(arrays);
         this.isIndeterminate = false;
       } else {
-        let nid = this.newSujectOption.map(item => {
+        let nid = this.newSujectOption.map((item) => {
           return item.newId;
         });
         let newArr = [];
-        this.sujectArray.forEach(item => {
+        this.sujectArray.forEach((item) => {
           if (!nid.includes(item)) {
             newArr.push(item);
           }
@@ -555,7 +632,7 @@ export default {
         this.disabledBtn = true;
         this.$api
           .inquirevodvideodetail(valueUrl)
-          .then(res => {
+          .then((res) => {
             console.log("请求腾讯时长", res.data.duration);
             if (res.data.duration) {
               self.listData.durationTime = this.$methodsTools.secondToDate(
@@ -568,7 +645,7 @@ export default {
               self.disabloutime = false;
             }
           })
-          .catch(err => {
+          .catch((err) => {
             self.disabloutime = false;
           })
           .finally(() => {
@@ -579,7 +656,7 @@ export default {
           this.disabledBtn = true;
           this.$api
             .inquirepolyvvideo(valueUrl)
-            .then(res => {
+            .then((res) => {
               if (res.data.duration) {
                 self.listData.durationTime = res.data.duration;
                 self.disabloutime = true;
@@ -587,7 +664,7 @@ export default {
                 self.disabloutime = false;
               }
             })
-            .catch(err => {
+            .catch((err) => {
               self.disabloutime = false;
             })
             .finally(() => {
@@ -631,11 +708,11 @@ export default {
         height: 533,
         vid: self.vid,
         teaser_show: 0,
-        playsafe: function(vid, next) {
-          self.$api.obtainpolyvvideosign(vid).then(res => {
+        playsafe: function (vid, next) {
+          self.$api.obtainpolyvvideosign(vid).then((res) => {
             next(res.data);
           });
-        }
+        },
       });
     },
     loadPlayer_tencent() {
@@ -652,14 +729,14 @@ export default {
       document
         .getElementById("player")
         .insertAdjacentElement("afterend", player_tencent);
-      self.$api.obtaintcvideosign(self.vid).then(res => {
+      self.$api.obtaintcvideosign(self.vid).then((res) => {
         self.player_tencent = TCPlayer("player-tencent", {
           width: 800,
           height: 533,
           fileID: self.vid,
           appID: res.data.appID,
           psign: res.data.psign,
-          licenseUrl: res.data.licenseUrl
+          licenseUrl: res.data.licenseUrl,
         });
       });
     },
@@ -730,7 +807,7 @@ export default {
         width: 800,
         height: 533,
         uid: this.uidzb,
-        vid: this.vidzb
+        vid: this.vidzb,
       });
     },
     clearszb() {
@@ -754,7 +831,7 @@ export default {
        * @param: this.fileSetting -> 常规配置 上面有备注
        * @param: 回调
        */
-      uploadFile(file, this.fileSetting, event => {
+      uploadFile(file, this.fileSetting, (event) => {
         this.listData.recordingUrl = event.vid;
         this.listData.durationTime = "";
         this.getApiTime(event.vid);
@@ -768,7 +845,7 @@ export default {
     search() {
       this.$api
         .obtainCourseSection(this.pageId)
-        .then(res => {
+        .then((res) => {
           this.bfImg = res.data.coverUrl;
           if (res.data.sectionType === 2) {
             res.data.liveStartTime = this.$methodsTools.time10to13(
@@ -789,9 +866,9 @@ export default {
           }
           this.typeSection = res.data.sectionType;
           this.listData = JSON.parse(JSON.stringify(res.data));
-          this.$api.obtaincourseSectionbusiness(this.pageId).then(result => {
+          this.$api.obtaincourseSectionbusiness(this.pageId).then((result) => {
             var arrays = [];
-            result.data.map(item => {
+            result.data.map((item) => {
               arrays.push(item.businessId + "-" + item.subjectId);
             });
             this.sujectApis = arrays;
@@ -809,7 +886,7 @@ export default {
       var self = this;
       var arrays = [];
       this.sujectApis.map((item, index) => {
-        this.courTypeOptions.map(items => {
+        this.courTypeOptions.map((items) => {
           if (items.id === item.split("-").map(Number)[0]) {
             var obj = {
               educationTypeId: items.educationId,
@@ -817,9 +894,9 @@ export default {
               projectId: items.projectId,
               projectName: items.projectName,
               businessId: items.id,
-              businessName: items.businessName
+              businessName: items.businessName,
             };
-            self.sujectOption.map(i => {
+            self.sujectOption.map((i) => {
               if (
                 i.id === item.split("-").map(Number)[1] &&
                 i.courseArrays.indexOf(items.projectId) !== -1
@@ -851,7 +928,7 @@ export default {
       });
     },
     changeUrl() {
-      var arr = this.newSujectApis.map(val => val.businessId);
+      var arr = this.newSujectApis.map((val) => val.businessId);
       const unique = [...new Set(arr)];
       var busId = "";
       if (unique.length) {
@@ -859,11 +936,11 @@ export default {
       } else {
         busId = "";
       }
-      this.$api.inquireCourseStreaming({ status: 1 }).then(res => {
+      this.$api.inquireCourseStreaming({ status: 1 }).then((res) => {
         var arraystt = [];
         var newarrays1tt = [];
         var newarrays2tt = [];
-        res.rows.map(item => {
+        res.rows.map((item) => {
           if (item.streamingType === 1) {
             arraystt.push(item);
           }
@@ -876,11 +953,11 @@ export default {
         });
         this.$api
           .inquireCourseStreaming({ status: 1, businessId: busId })
-          .then(result => {
+          .then((result) => {
             var arrays = [];
             var newarrays1 = [];
             var newarrays2 = [];
-            result.rows.map(item => {
+            result.rows.map((item) => {
               if (item.streamingType === 1) {
                 arrays.push(item);
               }
@@ -925,7 +1002,7 @@ export default {
         this.$refs.popovers.doClose();
         return;
       }
-      this.newSujectOption.map(item => {
+      this.newSujectOption.map((item) => {
         item.newId = this.courType + "-" + item.id;
       });
       this.handleCheckedCitiesChange();
@@ -937,12 +1014,12 @@ export default {
       await this.courseTys();
       await this.businTys();
       await this.courseSubject();
-      await this.Streaming();
+      this.Streaming();
       this.search();
     },
     tearchApi() {
       return new Promise((resolve, reject) => {
-        this.$api.inquiresystemteacherlist({ status: 1 }).then(res => {
+        this.$api.inquiresystemteacherlist({ status: 1 }).then((res) => {
           this.teacherList = res.rows;
           resolve();
         });
@@ -950,7 +1027,7 @@ export default {
     },
     eduTys() {
       return new Promise((resolve, reject) => {
-        this.$api.inquireCourseEducationType({ status: 1 }).then(res => {
+        this.$api.inquireCourseEducationType({ status: 1 }).then((res) => {
           this.eduTypeOptions = res.rows;
           resolve();
         });
@@ -958,7 +1035,7 @@ export default {
     },
     courseTys() {
       return new Promise((resolve, reject) => {
-        this.$api.inquireCourseProjectType({ status: 1 }).then(res => {
+        this.$api.inquireCourseProjectType({ status: 1 }).then((res) => {
           this.projectTypeOptions = res.rows;
           resolve();
         });
@@ -966,7 +1043,7 @@ export default {
     },
     businTys() {
       return new Promise((resolve, reject) => {
-        this.$api.inquirebusinessList({ status: 1 }).then(res => {
+        this.$api.inquirebusinessList({ status: 1 }).then((res) => {
           this.courTypeOptions = res.rows;
           this.newCourTypeOptions = res.rows;
           resolve();
@@ -975,7 +1052,7 @@ export default {
     },
     courseSubject() {
       return new Promise((resolve, reject) => {
-        this.$api.inquireCourseSubject({ status: 1 }).then(res => {
+        this.$api.inquireCourseSubject({ status: 1 }).then((res) => {
           res.rows.map((item, index) => {
             var array = [];
             item.courseProjectTypes.map((items, indexs) => {
@@ -989,27 +1066,24 @@ export default {
       });
     },
     Streaming() {
-      return new Promise((resolve, reject) => {
-        this.$api.inquireCourseStreaming({ status: 1 }).then(res => {
-          var arrays = [];
-          var newarrays1 = [];
-          var newarrays2 = [];
-          res.rows.map(item => {
-            if (item.streamingType === 1) {
-              arrays.push(item);
-            }
-            if (item.streamingType === 2) {
-              newarrays1.push(item);
-            }
-            if (item.streamingType === 3) {
-              newarrays2.push(item);
-            }
-          });
-          this.newLiveUrl = arrays;
-          this.newSteamUrl1 = newarrays1;
-          this.newSteamUrl2 = newarrays2;
-          resolve();
+      this.$api.inquireCourseStreaming({ status: 1 }).then((res) => {
+        var arrays = [];
+        var newarrays1 = [];
+        var newarrays2 = [];
+        res.rows.map((item) => {
+          if (item.streamingType === 1) {
+            arrays.push(item);
+          }
+          if (item.streamingType === 2) {
+            newarrays1.push(item);
+          }
+          if (item.streamingType === 3) {
+            newarrays2.push(item);
+          }
         });
+        this.newLiveUrl = arrays;
+        this.newSteamUrl1 = newarrays1;
+        this.newSteamUrl2 = newarrays2;
       });
     },
     changeEduType() {
@@ -1017,7 +1091,7 @@ export default {
         this.courType = "";
       }
       var arrays = [];
-      this.courTypeOptions.map(item => {
+      this.courTypeOptions.map((item) => {
         if (item.educationId === this.eduType) {
           arrays.push(item);
         }
@@ -1038,7 +1112,7 @@ export default {
         }
       });
       var arrays = [];
-      this.courTypeOptions.map(item => {
+      this.courTypeOptions.map((item) => {
         if (item.educationId === this.eduType) {
           arrays.push(item);
         }
@@ -1047,7 +1121,7 @@ export default {
       this.$refs.popovers.doClose();
     },
     submit(formName) {
-      this.$refs[formName].validate(valid => {
+      this.$refs[formName].validate((valid) => {
         if (valid) {
           if (!this.newSujectApis.length) {
             this.$message.error("请选择适用业务层级");
@@ -1078,7 +1152,7 @@ export default {
         name: this.listData.name,
         prefixName: this.listData.prefixName,
         publishStatus: this.listData.publishStatus,
-        teacherId: this.listData.teacherId
+        teacherId: this.listData.teacherId,
       };
 
       if (this.listData.sectionType === 2) {
@@ -1120,20 +1194,22 @@ export default {
       }
       this.$api
         .editCourseSection(dataInfos)
-        .then(res => {
+        .then((res) => {
           this.$message.success("修改成功");
           setTimeout(() => {
-            this.$store.dispatch("tagsView/exitView", this.$route).then(res => {
-              if (this.$store.getters.festivalPage) {
-                this.$router.push({
-                  path: this.$store.getters.festivalPage.name
-                });
-              } else {
-                this.$router.push({
-                  path: "festival"
-                });
-              }
-            });
+            this.$store
+              .dispatch("tagsView/exitView", this.$route)
+              .then((res) => {
+                if (this.$store.getters.festivalPage) {
+                  this.$router.push({
+                    path: this.$store.getters.festivalPage.name,
+                  });
+                } else {
+                  this.$router.push({
+                    path: "festival",
+                  });
+                }
+              });
           }, 500);
         })
         .catch(() => {
@@ -1141,14 +1217,14 @@ export default {
         });
     },
     backPage() {
-      this.$store.dispatch("tagsView/delView", this.$route).then(res => {
+      this.$store.dispatch("tagsView/delView", this.$route).then((res) => {
         if (this.$store.getters.festivalPage) {
           this.$router.push({
-            path: this.$store.getters.festivalPage.name
+            path: this.$store.getters.festivalPage.name,
           });
         } else {
           this.$router.push({
-            path: "festival"
+            path: "festival",
           });
         }
       });
@@ -1160,7 +1236,7 @@ export default {
       });
     },
     changeLiveUrl() {
-      this.newLiveUrl.map(item => {
+      this.newLiveUrl.map((item) => {
         if (item.id === this.newActiveLiveUrl) {
           this.listData.liveUrl = item.liveUrl;
         }
@@ -1168,7 +1244,7 @@ export default {
       this.newActiveLiveUrl = "";
     },
     changeRecordingUrl1() {
-      this.newSteamUrl1.map(item => {
+      this.newSteamUrl1.map((item) => {
         if (item.id === this.newActiveRecordingUrl1) {
           this.listData.recordingUrl = item.recordingVideoId;
           this.getApiTime(item.recordingVideoId);
@@ -1177,7 +1253,7 @@ export default {
       this.newActiveRecordingUrl1 = "";
     },
     changeRecordingUrl2() {
-      this.newSteamUrl2.map(item => {
+      this.newSteamUrl2.map((item) => {
         if (item.id === this.newActiveRecordingUrl2) {
           this.listData.recordingUrl = item.playbackUrl;
           this.getApiTime(item.recordingVideoId);
@@ -1196,10 +1272,7 @@ export default {
         self.$message.error("图片不得大于300kb");
         return;
       }
-      var type = self.$refs.file.value
-        .toLowerCase()
-        .split(".")
-        .splice(-1);
+      var type = self.$refs.file.value.toLowerCase().split(".").splice(-1);
       if (
         type[0] != "jpg" &&
         type[0] != "png" &&
@@ -1210,15 +1283,15 @@ export default {
         self.$refs.file.value = "";
         return;
       }
-      this.$upload.upload(file, 0).then(res => {
+      this.$upload.upload(file, 0).then((res) => {
         self.listData.coverUrl = res;
         self.$refs.listData.validateField("coverUrl");
       });
-    }
+    },
   },
   destroyed() {
     this.closePlayer();
-  }
+  },
 };
 </script>
 

+ 39 - 0
src/views/resource/videoManagement/moduleManagement/add/index.vue

@@ -269,6 +269,12 @@
             <el-radio :label="0">非公共模块</el-radio>
           </el-radio-group>
         </el-form-item>
+        <el-form-item label="视频类型" prop="viewSign">
+          <el-radio-group v-model="listData.viewSign">
+            <el-radio :label="1">保利威</el-radio>
+            <el-radio :label="2">腾讯</el-radio>
+          </el-radio-group>
+        </el-form-item>
         <el-form-item label="是否发布" prop="publishStatus">
           <el-radio-group v-model="listData.publishStatus">
             <el-radio :label="1">是</el-radio>
@@ -324,6 +330,13 @@
                   ? "回放"
                   : "未知"
               }}</span>
+              <span v-else-if="item.scope === 'isOptions'">
+                <span v-for="(items, indexs) in item.options" :key="indexs">
+                  <span v-if="scope.row[item.prop] == items.value">{{
+                    items.label
+                  }}</span>
+                </span>
+              </span>
               <span v-else-if="item.scope === 'Status'">
                 {{
                   scope.row[item.prop] === 1
@@ -439,6 +452,13 @@
                   ? "回放"
                   : "未知"
               }}</span>
+              <span v-else-if="item.scope === 'isOptions'">
+                <span v-for="(items, indexs) in item.options" :key="indexs">
+                  <span v-if="scope.row[item.prop] == items.value">{{
+                    items.label
+                  }}</span>
+                </span>
+              </span>
               <span v-else-if="item.scope === 'Status'">
                 {{
                   scope.row[item.prop] === 1
@@ -507,6 +527,7 @@ export default {
         publishStatus: 1,
         recordingUrl: "",
         liveUrl: "",
+        viewSign:1,
         coverUrl: "oss/images/avatar/20211013/1634097664410_1397766697",
       },
       eduTypeOptions: [], //教育类型数据
@@ -535,6 +556,9 @@ export default {
         commonSign: [
           { required: true, message: "请选择公共标识", trigger: "change" },
         ],
+        viewSign: [
+          { required: true, message: "请选择视频类型", trigger: "change" },
+        ],
         publishStatus: [
           { required: true, message: "请选择是否发布", trigger: "change" },
         ],
@@ -546,6 +570,16 @@ export default {
         { label: "章编码", prop: "code", width: "120" },
         { label: "标题前缀", prop: "prefixName", width: "180" },
         { label: "章标题", prop: "name" },
+        {
+          label: "视频类型",
+          prop: "viewSign",
+          scope: "isOptions",
+          options: [
+            { label: "保利威", value: 1 },
+            { label: "腾讯", value: 2 },
+          ],
+          width: "120",
+        },
         { label: "节数量", prop: "sectionNum", width: "120" },
         {
           label: "发布状态",
@@ -996,6 +1030,10 @@ export default {
               this.$message.warning(`管理章第${i + 1}条请输入排序`);
               return;
             }
+            if(this.tableData[i].viewSign != this.listData.viewSign){
+              this.$message.warning("请保持模块视频类型与章视频类型保持一致")
+              return
+            }
           }
           let arr = this.tableData.map((items) => {
             return items.sort;
@@ -1021,6 +1059,7 @@ export default {
       });
       var dataInfos = {
         status: 1,
+        viewSign:this.listData.viewSign,
         businessList: this.newSujectApis,
         chapterIdList: chapterIdList,
         coverUrl: this.listData.coverUrl,

+ 49 - 27
src/views/resource/videoManagement/moduleManagement/addChapter.vue

@@ -22,19 +22,39 @@
             >添加</el-button
           >
         </p>
-        <el-form label-width="100px" class="elform_style">
+        <el-form
+          label-width="100px"
+          class="elform_style"
+          :rules="rules"
+          ref="ruleForm"
+          :model="{ list: list }"
+        >
           <div v-for="(item, index) in list" :key="index" class="dis_box">
             <div class="left_box">
               <el-form-item label="标题前缀">
                 <el-input v-model="item.prefixName"></el-input>
                 <p class="p_style">注:便于检索、归类,以及区分一样的标题</p>
               </el-form-item>
-              <el-form-item label="章标题" required>
+              <el-form-item
+                label="章标题"
+                :prop="'list.' + index + '.name'"
+                :rules="rules['name']"
+              >
                 <el-input v-model="item.name"></el-input>
                 <p class="p_style">
                   注:请尽量规范易懂,方便在课程目录表呈现给学员
                 </p>
               </el-form-item>
+              <el-form-item
+                label="视频类型"
+                :prop="'list.' + index + '.viewSign'"
+                :rules="rules['viewSign']"
+              >
+                <el-radio-group v-model="item.viewSign">
+                  <el-radio :label="1">保利威</el-radio>
+                  <el-radio :label="2">腾讯</el-radio>
+                </el-radio-group>
+              </el-form-item>
             </div>
             <div class="clear_style">
               <el-button :size="size" @click="list.splice(index, 1)"
@@ -61,6 +81,12 @@ export default {
       size: "small",
       dialogVisible: false,
       list: [],
+      rules: {
+        name: [{ required: true, message: "请输入章标题", trigger: "blur" }],
+        viewSign: [
+          { required: true, message: "请选择视频类型", trigger: "change" },
+        ],
+      },
     };
   },
   methods: {
@@ -69,33 +95,29 @@ export default {
     },
     openBoxs(arr) {
       this.businList = JSON.parse(JSON.stringify(arr));
-      this.list = [{}]
+      this.list = [{}];
       this.dialogVisible = true;
     },
     submitForm() {
-      const arr = [];
-      this.list.forEach((item, index) => {
-        if (!item.name && item.name !== 0) {
-          arr.push(index + 1);
+      this.$refs["ruleForm"].validate((valid) => {
+        if (valid) {
+          let data = this.list.map((item) => {
+            item.businessList = this.businList;
+            item.status = 1;
+            item.publishStatus = 1;
+            item.coverUrl =
+              "oss/images/avatar/20211013/1634097664410_1397766697";
+            return item;
+          });
+          this.$api.addMoreCoursechapter(data.reverse()).then((res) => {
+            this.dialogVisible = false;
+            this.$emit("backData", res.data);
+          });
+        } else {
+          console.log("error submit!!");
+          return false;
         }
       });
-      if (arr.length) {
-        this.$message.error(
-          `第${arr.join(",")}条数据没有填写章标题,请填写完整后提交`
-        );
-        return;
-      }
-      let data = this.list.map((item) => {
-        item.businessList = this.businList;
-        item.status = 1;
-        item.publishStatus = 1;
-        item.coverUrl = "oss/images/avatar/20211013/1634097664410_1397766697";
-        return item;
-      });
-      this.$api.addMoreCoursechapter(data.reverse()).then((res) => {
-        this.dialogVisible = false;
-        this.$emit("backData", res.data);
-      });
     },
   },
 };
@@ -117,9 +139,9 @@ export default {
     text-align: center;
   }
 }
-.elform_style{
-    max-height: 620px;
-    overflow: auto;
+.elform_style {
+  max-height: 620px;
+  overflow: auto;
 }
 .p_style {
   font-size: 12px;

+ 38 - 0
src/views/resource/videoManagement/moduleManagement/edit/index.vue

@@ -243,6 +243,12 @@
             <el-radio :label="0">非公共模块</el-radio>
           </el-radio-group>
         </el-form-item>
+        <el-form-item label="视频类型" prop="viewSign">
+          <el-radio-group v-model="listData.viewSign" disabled>
+            <el-radio :label="1">保利威</el-radio>
+            <el-radio :label="2">腾讯</el-radio>
+          </el-radio-group>
+        </el-form-item>
         <el-form-item label="是否发布" prop="publishStatus">
           <el-radio-group v-model="listData.publishStatus">
             <el-radio :label="1">是</el-radio>
@@ -298,6 +304,13 @@
                   ? "回放"
                   : "未知"
               }}</span>
+              <span v-else-if="item.scope === 'isOptions'">
+                <span v-for="(items, indexs) in item.options" :key="indexs">
+                  <span v-if="scope.row[item.prop] == items.value">{{
+                    items.label
+                  }}</span>
+                </span>
+              </span>
               <span v-else-if="item.scope === 'Status'">
                 {{
                   scope.row[item.prop] === 1
@@ -414,6 +427,13 @@
                   ? "回放"
                   : "未知"
               }}</span>
+              <span v-else-if="item.scope === 'isOptions'">
+                <span v-for="(items, indexs) in item.options" :key="indexs">
+                  <span v-if="scope.row[item.prop] == items.value">{{
+                    items.label
+                  }}</span>
+                </span>
+              </span>
               <span v-else-if="item.scope === 'Status'">
                 {{
                   scope.row[item.prop] === 1
@@ -509,6 +529,9 @@ export default {
         commonSign: [
           { required: true, message: "请选择公共标识", trigger: "change" },
         ],
+        viewSign: [
+          { required: true, message: "请选择视频类型", trigger: "change" },
+        ],
         publishStatus: [
           { required: true, message: "请选择是否发布", trigger: "change" },
         ],
@@ -520,6 +543,16 @@ export default {
         { label: "章编码", prop: "code", width: "120" },
         { label: "标题前缀", prop: "prefixName", width: "180" },
         { label: "章标题", prop: "name" },
+        {
+          label: "视频类型",
+          prop: "viewSign",
+          scope: "isOptions",
+          options: [
+            { label: "保利威", value: 1 },
+            { label: "腾讯", value: 2 },
+          ],
+          width: "120",
+        },
         { label: "节数量", prop: "sectionNum", width: "120" },
         {
           label: "发布状态",
@@ -974,6 +1007,10 @@ export default {
               this.$message.warning(`管理章第${i + 1}条请输入排序`);
               return;
             }
+            if(this.tableData[i].viewSign != this.listData.viewSign){
+              this.$message.warning("请保持模块视频类型与章视频类型保持一致")
+              return
+            }
           }
           let arr = this.tableData.map((items) => {
             return items.sort;
@@ -999,6 +1036,7 @@ export default {
       });
       var dataInfos = {
         status: 1,
+        viewSign:this.listData.viewSign,
         moduleId: this.pageId,
         businessList: this.newSujectApis,
         chapterIdList: chapterIdList,