|
@@ -19,8 +19,7 @@
|
|
|
:key="index"
|
|
|
:label="item.educationName"
|
|
|
:value="item.id"
|
|
|
- >
|
|
|
- </el-option>
|
|
|
+ ></el-option>
|
|
|
</el-select>
|
|
|
<el-select
|
|
|
v-model="courType"
|
|
@@ -32,8 +31,7 @@
|
|
|
:key="index"
|
|
|
:label="item.projectName + '-' + item.businessName"
|
|
|
:value="item.id"
|
|
|
- >
|
|
|
- </el-option>
|
|
|
+ ></el-option>
|
|
|
</el-select>
|
|
|
<el-popover
|
|
|
ref="popovers"
|
|
@@ -75,7 +73,7 @@
|
|
|
</el-popover>
|
|
|
<span style="margin-left: 10px">注:可多选</span>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="">
|
|
|
+ <el-form-item label>
|
|
|
<div :class="changeHeight ? 'ach' : 'clh'">
|
|
|
<div
|
|
|
v-for="(item, index) in newSujectApis"
|
|
@@ -99,7 +97,8 @@
|
|
|
v-if="newSujectApis.length > 1"
|
|
|
@click="changeType"
|
|
|
>{{ changeHeight ? "展开" : "关闭" }}</el-button
|
|
|
- ><el-button
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
size="mini"
|
|
|
v-if="newSujectApis.length > 0"
|
|
|
@click="sujectApis = []"
|
|
@@ -131,10 +130,17 @@
|
|
|
:disabled="item.value == 1"
|
|
|
:label="item.label"
|
|
|
:value="item.value"
|
|
|
- >
|
|
|
- </el-option>
|
|
|
+ ></el-option>
|
|
|
</el-select>
|
|
|
</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="频道号"
|
|
|
v-if="listData.sectionType === 2"
|
|
@@ -155,8 +161,7 @@
|
|
|
:key="index"
|
|
|
:label="item.streamingName"
|
|
|
:value="item.id"
|
|
|
- >
|
|
|
- </el-option>
|
|
|
+ ></el-option>
|
|
|
</el-select>
|
|
|
<div v-if="listData.liveUrl" style="margin-top: 10px">
|
|
|
<el-button
|
|
@@ -177,8 +182,7 @@
|
|
|
type="datetime"
|
|
|
placeholder="请选择直播开始时间"
|
|
|
value-format="timestamp"
|
|
|
- >
|
|
|
- </el-date-picker>
|
|
|
+ ></el-date-picker>
|
|
|
</el-form-item>
|
|
|
<el-form-item
|
|
|
label="直播结束时间"
|
|
@@ -190,8 +194,7 @@
|
|
|
type="datetime"
|
|
|
placeholder="请选择直播结束时间"
|
|
|
value-format="timestamp"
|
|
|
- >
|
|
|
- </el-date-picker>
|
|
|
+ ></el-date-picker>
|
|
|
</el-form-item>
|
|
|
<el-form-item
|
|
|
label="直播时长"
|
|
@@ -200,9 +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"
|
|
@@ -215,18 +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
|
|
|
+ >
|
|
|
+ <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
|
|
@@ -237,8 +243,7 @@
|
|
|
:key="index"
|
|
|
:label="item.streamingName"
|
|
|
:value="item.id"
|
|
|
- >
|
|
|
- </el-option>
|
|
|
+ ></el-option>
|
|
|
</el-select>
|
|
|
<el-select
|
|
|
v-if="listData.sectionType === 3"
|
|
@@ -252,8 +257,7 @@
|
|
|
:key="index"
|
|
|
:label="item.streamingName"
|
|
|
:value="item.id"
|
|
|
- >
|
|
|
- </el-option>
|
|
|
+ ></el-option>
|
|
|
</el-select>
|
|
|
<div v-if="listData.recordingUrl" style="margin-top: 10px">
|
|
|
<el-button
|
|
@@ -275,8 +279,7 @@
|
|
|
range-separator=":"
|
|
|
v-model="listData.durationTime"
|
|
|
placeholder="请填入节时长"
|
|
|
- >
|
|
|
- </el-time-picker>
|
|
|
+ ></el-time-picker>
|
|
|
</el-form-item>
|
|
|
<el-form-item
|
|
|
label="讲师"
|
|
@@ -292,8 +295,7 @@
|
|
|
:key="index"
|
|
|
:label="item.teacherName"
|
|
|
:value="item.teacherId"
|
|
|
- >
|
|
|
- </el-option>
|
|
|
+ ></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="节封面" prop="coverUrl">
|
|
@@ -311,8 +313,8 @@
|
|
|
v-if="!listData.coverUrl"
|
|
|
>
|
|
|
<label for="uplose">
|
|
|
- <i class="el-icon-circle-plus-outline iconStsz"></i
|
|
|
- ></label>
|
|
|
+ <i class="el-icon-circle-plus-outline iconStsz"></i>
|
|
|
+ </label>
|
|
|
<input
|
|
|
ref="file"
|
|
|
type="file"
|
|
@@ -328,8 +330,7 @@
|
|
|
:preview-src-list="[
|
|
|
$methodsTools.splitImgHost(listData.coverUrl),
|
|
|
]"
|
|
|
- >
|
|
|
- </el-image>
|
|
|
+ ></el-image>
|
|
|
</el-col>
|
|
|
<el-col :span="11">
|
|
|
<span style="color: #999; font-size: 14px"
|
|
@@ -375,11 +376,11 @@
|
|
|
<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>
|
|
|
- <div id="player"></div>
|
|
|
+ <div id="player" v-show="listData.viewSign == 1"></div>
|
|
|
</div>
|
|
|
<span slot="footer" class="dialog-footer">
|
|
|
<el-button @click="clears">取 消</el-button>
|
|
@@ -395,7 +396,7 @@
|
|
|
<div slot="title" class="hearders">
|
|
|
<div class="leftTitle">直播预览</div>
|
|
|
<div class="rightBoxs">
|
|
|
- <img src="@/assets/images/Close@2x.png" alt="" @click="clearszb" />
|
|
|
+ <img src="@/assets/images/Close@2x.png" alt @click="clearszb" />
|
|
|
</div>
|
|
|
</div>
|
|
|
<div>
|
|
@@ -419,6 +420,8 @@ export default {
|
|
|
isIndeterminate: false,
|
|
|
checkAll: false,
|
|
|
vodPlayerJs: "https://player.polyv.net/script/player.js",
|
|
|
+ vodPlayerJsForTCPlayer:
|
|
|
+ "https://web.sdk.qcloud.com/player/tcplayer/release/v5.1.0/tcplayer.v5.1.0.min.js",
|
|
|
vid: "",
|
|
|
playerJs:
|
|
|
"https://player.polyv.net/resp/live-h5-player/latest/liveplayer.min.js",
|
|
@@ -486,6 +489,9 @@ export default {
|
|
|
// { required: true, message: "节时长不能为空" },
|
|
|
// { type: "number", message: "节时长必须为数字值" },
|
|
|
// ],
|
|
|
+ viewSign: [
|
|
|
+ { required: true, message: "请选择视频类型", trigger: "change" },
|
|
|
+ ],
|
|
|
recordingUrl: [
|
|
|
{
|
|
|
required: true,
|
|
@@ -618,16 +624,22 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
getApiTime(val) {
|
|
|
+ console.log("获取时长");
|
|
|
var self = this;
|
|
|
this.clearTimes(val);
|
|
|
const valueUrl = val.replace(/\s/g, "");
|
|
|
- if (valueUrl && valueUrl.length > 30) {
|
|
|
+ if (this.listData.viewSign == 2) {
|
|
|
this.disabledBtn = true;
|
|
|
this.$api
|
|
|
- .inquirepolyvvideo(valueUrl)
|
|
|
+ .inquirevodvideodetail(valueUrl)
|
|
|
.then((res) => {
|
|
|
+ console.log("请求腾讯时长", res.data.duration);
|
|
|
if (res.data.duration) {
|
|
|
- self.listData.durationTime = res.data.duration;
|
|
|
+ self.listData.durationTime = this.$methodsTools.secondToDate(
|
|
|
+ res.data.duration,
|
|
|
+ false
|
|
|
+ );
|
|
|
+ console.log("转换后的腾讯时间", self.listData.durationTime);
|
|
|
self.disabloutime = true;
|
|
|
} else {
|
|
|
self.disabloutime = false;
|
|
@@ -639,6 +651,26 @@ export default {
|
|
|
.finally(() => {
|
|
|
this.disabledBtn = false;
|
|
|
});
|
|
|
+ } else {
|
|
|
+ if (valueUrl && valueUrl.length > 30) {
|
|
|
+ this.disabledBtn = true;
|
|
|
+ this.$api
|
|
|
+ .inquirepolyvvideo(valueUrl)
|
|
|
+ .then((res) => {
|
|
|
+ if (res.data.duration) {
|
|
|
+ self.listData.durationTime = res.data.duration;
|
|
|
+ self.disabloutime = true;
|
|
|
+ } else {
|
|
|
+ self.disabloutime = false;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ self.disabloutime = false;
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ this.disabledBtn = false;
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
loadPlayerScript(callback) {
|
|
@@ -654,6 +686,19 @@ 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("error", (...params) => {
|
|
|
+ this.$message.error(returnTitle(params[1]));
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
loadPlayer() {
|
|
|
var self = this;
|
|
|
const polyvPlayer = window.polyvPlayer;
|
|
@@ -670,6 +715,31 @@ export default {
|
|
|
},
|
|
|
});
|
|
|
},
|
|
|
+ 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,
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
/**
|
|
|
* @param {String} 关闭视频窗口-销毁实例
|
|
|
*/
|
|
@@ -678,6 +748,9 @@ export default {
|
|
|
if (this.player) {
|
|
|
this.player.destroy();
|
|
|
}
|
|
|
+ if (this.player_tencent) {
|
|
|
+ this.player_tencent.dispose();
|
|
|
+ }
|
|
|
},
|
|
|
/**
|
|
|
* @param {String} 视频查看
|
|
@@ -691,12 +764,19 @@ export default {
|
|
|
this.diavos = true;
|
|
|
},
|
|
|
isOkBf() {
|
|
|
- this.loadPlayerScript(this.loadPlayer);
|
|
|
+ if (this.listData.viewSign == 2) {
|
|
|
+ this.loadPlayerScript_tencent(this.loadPlayer_tencent);
|
|
|
+ } else {
|
|
|
+ this.loadPlayerScript(this.loadPlayer);
|
|
|
+ }
|
|
|
},
|
|
|
closePlayer() {
|
|
|
if (this.player) {
|
|
|
this.player.destroy();
|
|
|
}
|
|
|
+ if (this.player_tencent) {
|
|
|
+ this.player_tencent.dispose();
|
|
|
+ }
|
|
|
},
|
|
|
/**
|
|
|
* @param {String} 直播预览
|
|
@@ -934,7 +1014,7 @@ export default {
|
|
|
await this.courseTys();
|
|
|
await this.businTys();
|
|
|
await this.courseSubject();
|
|
|
- await this.Streaming();
|
|
|
+ this.Streaming();
|
|
|
this.search();
|
|
|
},
|
|
|
tearchApi() {
|
|
@@ -986,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() {
|
|
@@ -1070,6 +1147,7 @@ export default {
|
|
|
status: 1,
|
|
|
sectionId: this.pageId,
|
|
|
businessList: this.newSujectApis,
|
|
|
+ viewSign: this.listData.viewSign,
|
|
|
coverUrl: this.listData.coverUrl,
|
|
|
name: this.listData.name,
|
|
|
prefixName: this.listData.prefixName,
|