|
|
@@ -1,83 +1,111 @@
|
|
|
<template>
|
|
|
- <el-col>
|
|
|
- <el-card>
|
|
|
- <el-row>
|
|
|
- <h2>发布视频</h2>
|
|
|
- <uploader
|
|
|
- class="uploader-example"
|
|
|
- :options="options"
|
|
|
- :auto-start="true"
|
|
|
- @file-added="onFileAdded"
|
|
|
- @file-success="onFileSuccess"
|
|
|
- @file-progress="onFileProgress"
|
|
|
- @file-error="onFileError"
|
|
|
- >
|
|
|
- <uploader-unsupport />
|
|
|
- <uploader-drop>
|
|
|
- <p>拖动视频文件到此处或</p>
|
|
|
- <uploader-btn :attrs="attrs">选择视频文件</uploader-btn>
|
|
|
- </uploader-drop>
|
|
|
- <uploader-list />
|
|
|
- </uploader>
|
|
|
- </el-row>
|
|
|
- <el-divider />
|
|
|
- <el-row style="position: center">
|
|
|
- <h2>上传封面</h2>
|
|
|
- <el-upload
|
|
|
- class="avatar-uploader"
|
|
|
- action="//oss.reghao.cn/"
|
|
|
- :headers="imgHeaders"
|
|
|
- :data="imgData"
|
|
|
- :show-file-list="false"
|
|
|
- :before-upload="beforeAvatarUpload"
|
|
|
- :on-success="handleAvatarSuccess"
|
|
|
- >
|
|
|
- <img v-if="imageUrl" :src="imageUrl" class="avatar">
|
|
|
- <i v-else class="el-icon-plus avatar-uploader-icon" />
|
|
|
- </el-upload>
|
|
|
- </el-row>
|
|
|
- <el-divider />
|
|
|
- <el-row>
|
|
|
- <h2>稿件信息</h2>
|
|
|
- </el-row>
|
|
|
- <el-form ref="form" :model="form" label-width="80px">
|
|
|
- <el-form-item label="标题">
|
|
|
- <el-input v-model="form.title" style="width: 70%; padding-right: 2px" placeholder="标题不能超过 50 个字符" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="描述">
|
|
|
- <el-input v-model="form.description" type="textarea" style="width: 70%; padding-right: 2px" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="分区">
|
|
|
- <el-select v-model="category" placeholder="请选择分区">
|
|
|
- <el-option label="新闻" value="shanghai" />
|
|
|
- <el-option label="教育" value="beijing" />
|
|
|
- </el-select>
|
|
|
- <el-select v-model="childCategory" placeholder="请选择子分区">
|
|
|
- <el-option label="历史" value="shanghai" />
|
|
|
- <el-option label="计算机" value="beijing" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="标签">
|
|
|
- <el-input v-model="tagsStr" style="width: 70%; padding-right: 2px" placeholder="多个标签之间使用英文逗号分隔" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="可见范围">
|
|
|
- <el-select v-model="form.scope" placeholder="选择可见范围">
|
|
|
- <el-option label="所有人可见" value="1" />
|
|
|
- <el-option label="验证码可见" value="2" />
|
|
|
- <el-option label="VIP 可见" value="3" />
|
|
|
- <el-option label="仅自己可见" value="4" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item>
|
|
|
- <el-button type="primary" @click="onSubmit">立即投稿</el-button>
|
|
|
- <el-button>取消</el-button>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- </el-card>
|
|
|
- </el-col>
|
|
|
+ <el-row class="movie-list">
|
|
|
+ <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
|
|
|
+ <el-col :md="12" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
|
|
|
+ <el-card class="box-card">
|
|
|
+ <div slot="header" class="clearfix">
|
|
|
+ <span>上传视频文件</span>
|
|
|
+ </div>
|
|
|
+ <div class="text item">
|
|
|
+ <uploader
|
|
|
+ class="uploader-example"
|
|
|
+ :options="options"
|
|
|
+ :auto-start="true"
|
|
|
+ @file-added="onFileAdded"
|
|
|
+ @file-success="onFileSuccess"
|
|
|
+ @file-progress="onFileProgress"
|
|
|
+ @file-error="onFileError"
|
|
|
+ >
|
|
|
+ <uploader-unsupport />
|
|
|
+ <uploader-drop>
|
|
|
+ <p>拖动视频文件到此处或</p>
|
|
|
+ <uploader-btn :attrs="attrs">选择视频文件</uploader-btn>
|
|
|
+ </uploader-drop>
|
|
|
+ <uploader-list />
|
|
|
+ </uploader>
|
|
|
+ </div>
|
|
|
+ </el-card>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
|
|
|
+ <el-col :md="12" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
|
|
|
+ <el-card class="box-card">
|
|
|
+ <div slot="header" class="clearfix">
|
|
|
+ <span>上传视频封面</span>
|
|
|
+ </div>
|
|
|
+ <div class="text item">
|
|
|
+ <el-tooltip class="item" effect="dark" content="点击上传图片" placement="top-end">
|
|
|
+ <el-upload
|
|
|
+ class="avatar-uploader"
|
|
|
+ action="//oss.reghao.cn/"
|
|
|
+ :headers="imgHeaders"
|
|
|
+ :data="imgData"
|
|
|
+ :show-file-list="false"
|
|
|
+ :before-upload="beforeAvatarUpload"
|
|
|
+ :on-success="handleAvatarSuccess"
|
|
|
+ >
|
|
|
+ <img v-if="form.coverUrl" :src="form.coverUrl" class="avatar">
|
|
|
+ <i v-else class="el-icon-plus avatar-uploader-icon" />
|
|
|
+ </el-upload>
|
|
|
+ </el-tooltip>
|
|
|
+ </div>
|
|
|
+ </el-card>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
|
|
|
+ <el-col :md="12" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
|
|
|
+ <el-card class="box-card">
|
|
|
+ <div slot="header" class="clearfix">
|
|
|
+ <span>稿件信息</span>
|
|
|
+ <el-button style="float: right; padding: 3px 0" type="text" @click="onSubmit">发布</el-button>
|
|
|
+ </div>
|
|
|
+ <div class="text item">
|
|
|
+ <el-form ref="form" :model="form" label-width="80px">
|
|
|
+ <el-form-item label="标题">
|
|
|
+ <el-input v-model="form.title" style="padding-right: 1px" placeholder="标题不能超过 50 个字符" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="描述">
|
|
|
+ <el-input v-model="form.description" type="textarea" autosize style="padding-right: 1px;" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="分区">
|
|
|
+ <el-select v-model="category" placeholder="请选择分区">
|
|
|
+ <el-option label="新闻" value="shanghai" />
|
|
|
+ <el-option label="教育" value="beijing" />
|
|
|
+ </el-select>
|
|
|
+ <el-select v-model="childCategory" placeholder="请选择子分区">
|
|
|
+ <el-option label="历史" value="shanghai" />
|
|
|
+ <el-option label="计算机" value="beijing" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="标签">
|
|
|
+ <el-input v-model="tagsStr" style="width: 70%; padding-right: 2px" placeholder="多个标签使用英文逗号分隔" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="可见范围">
|
|
|
+ <el-select v-model="form.scope" placeholder="选择可见范围">
|
|
|
+ <el-option label="所有人可见" value="1" />
|
|
|
+ <el-option label="验证码可见" value="2" />
|
|
|
+ <el-option label="VIP 可见" value="3" />
|
|
|
+ <el-option label="仅自己可见" value="4" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="定时发布">
|
|
|
+ <el-col :span="11">
|
|
|
+ <el-date-picker v-model="form.date" type="date" placeholder="选择日期" style="width: 100%;" />
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="11">
|
|
|
+ <el-time-picker v-model="form.time" placeholder="选择时间" style="width: 100%;" />
|
|
|
+ </el-col>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
+ </el-card>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-row>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+import { getServerInfo } from '@/api/file'
|
|
|
import { videoCategory, submitVideo } from '@/api/video'
|
|
|
|
|
|
export default {
|
|
|
@@ -96,20 +124,22 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
headers: {
|
|
|
- Authorization: '1234567890'
|
|
|
- }
|
|
|
+ Authorization: ''
|
|
|
+ },
|
|
|
+ withCredentials: true,
|
|
|
},
|
|
|
attrs: {
|
|
|
accept: 'video/*'
|
|
|
},
|
|
|
+ /***********************************************************************/
|
|
|
+ imgOssUrl: null,
|
|
|
imgHeaders: {
|
|
|
- Authorization: '1234567890'
|
|
|
+ Authorization: ''
|
|
|
},
|
|
|
imgData: {
|
|
|
- channelId: 3
|
|
|
+ channelId: 5
|
|
|
},
|
|
|
/***********************************************************************/
|
|
|
- coverUrl: null,
|
|
|
categoryMap: {
|
|
|
Set: function(key, value) { this[key] = value },
|
|
|
Get: function(key) { return this[key] },
|
|
|
@@ -118,9 +148,6 @@ export default {
|
|
|
},
|
|
|
category: [],
|
|
|
childCategory: [],
|
|
|
- coverFile: null,
|
|
|
- imageList: [],
|
|
|
- imageUrl: '',
|
|
|
// 提交给后端的数据
|
|
|
tagsStr: null,
|
|
|
form: {
|
|
|
@@ -134,12 +161,32 @@ export default {
|
|
|
width: 0,
|
|
|
height: 0,
|
|
|
duration: 0
|
|
|
- }
|
|
|
+ },
|
|
|
}
|
|
|
},
|
|
|
created() {
|
|
|
+ getServerInfo(2).then(res => {
|
|
|
+ if (res.code === 0) {
|
|
|
+ const resData = res.data
|
|
|
+ this.options.target = resData.ossUrl
|
|
|
+ this.options.chunkSize = resData.maxSize
|
|
|
+ this.options.headers.Authorization = "Bearer " + resData.token
|
|
|
+ } else {
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ getServerInfo(5).then(res => {
|
|
|
+ if (res.code === 0) {
|
|
|
+ const resData = res.data
|
|
|
+ this.imgOssUrl = resData.ossUrl
|
|
|
+ this.imgHeaders.Authorization = "Bearer " + resData.token
|
|
|
+ } else {
|
|
|
+ }
|
|
|
+ })
|
|
|
this.getVideoCategory()
|
|
|
},
|
|
|
+ mounted() {
|
|
|
+ },
|
|
|
methods: {
|
|
|
/***********************************************************************/
|
|
|
onFileAdded(file) {
|
|
|
@@ -196,16 +243,16 @@ export default {
|
|
|
return isJPG && isLt2M
|
|
|
},
|
|
|
handleAvatarSuccess(res, file) {
|
|
|
- this.imageList.push(file)
|
|
|
- this.imageUrl = URL.createObjectURL(file.raw)
|
|
|
+ const localUrl = URL.createObjectURL(file.raw)
|
|
|
if (res.code === 0) {
|
|
|
const resData = res.data
|
|
|
const uploadId = resData.uploadId
|
|
|
- const url = resData.url
|
|
|
+ this.form.coverUrl = resData.url
|
|
|
} else {
|
|
|
|
|
|
}
|
|
|
},
|
|
|
+ /***********************************************************************/
|
|
|
// 选择视频后获取视频的分辨率和时长, 并截取第一秒的内容作为封面
|
|
|
processVideo(file) {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
@@ -261,11 +308,9 @@ export default {
|
|
|
if (coverFile instanceof File) {
|
|
|
const formData = new FormData()
|
|
|
formData.append('file', coverFile)
|
|
|
- formData.append('channelId', 3)
|
|
|
+ formData.append('channelId', 5)
|
|
|
fetch(`//oss.reghao.cn/`, {
|
|
|
- headers: {
|
|
|
- Authorization: '1234567890'
|
|
|
- },
|
|
|
+ headers: this.imgHeaders,
|
|
|
method: 'POST',
|
|
|
credentials: 'include',
|
|
|
body: formData
|
|
|
@@ -273,7 +318,6 @@ export default {
|
|
|
if (json.code === 0) {
|
|
|
const resData = json.data
|
|
|
this.form.coverUrl = resData.url
|
|
|
- this.imageUrl = resData.url
|
|
|
} else {
|
|
|
this.$notify(
|
|
|
{
|
|
|
@@ -293,6 +337,7 @@ export default {
|
|
|
// 防止拖动进度条的时候重复触发
|
|
|
// videoElem.removeEventListener('canplay', arguments.callee)
|
|
|
},
|
|
|
+ /***********************************************************************/
|
|
|
setTitle(title) {
|
|
|
if (title.length > 50) {
|
|
|
this.form.title = title.substring(0, 50)
|