fix:项目初始化

This commit is contained in:
ouyangxiu
2025-06-10 17:11:41 +07:00
commit db9bffd2c5
713 changed files with 159746 additions and 0 deletions
@@ -0,0 +1,429 @@
<template>
<el-dialog :title="title" :visible.sync="Visible" width="1200px" top="50px" center class="ac-dialog" :close-on-click-modal="false" @close="close">
<el-form :inline="true" :model="form" :rules="rules" class="demo-form-inline" label-width="120px" label-position="right" style="" ref="ruleForm">
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="标题">
<el-input v-model="form.title" style="width: 400px" type="textarea" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="番号">
<el-input v-model="form.bango" style="width: 400px" type="textarea" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="8">
<el-form-item label="封面">
<UploadImg @changeImgUrl="changeCoverImgUrl" :img="form.coverImg"></UploadImg>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="封面类型">
<el-select placeholder="请选择封面类型" v-model="form.coverType" clearable>
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in coverTypeList" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="发布者ID">
<el-input v-model.number="form.publishId" style="width: 180px" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="预览视频URL">
<el-input v-model="form.preFileName" style="width: 400px" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="8">
<el-form-item label="演员分类">
<el-select placeholder="请选择演员分类" v-model="form.actorIds" filterable allow-create default-first-option multiple style="width: 180px">
<el-option :key="item.value" :label="item.name" :value="item.id" v-for="item in actorList" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="8">
<el-form-item label="视频类型">
<el-select placeholder="请选择视频类型" v-model="form.contentType" clearable @change="changeContentType" style="width: 180px">
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in contentTypeList" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="8">
<el-form-item label="主题分类">
<el-select placeholder="请选择主题分类" v-model="form.topicIds" filterable allow-create default-first-option multiple style="width: 180px">
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in chooseVideoType" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="8">
<el-form-item label="视频状态">
<el-select placeholder="请选择视频状态" clearable v-model="form.status">
<el-option v-for="item in MediaSatusList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="8">
<el-form-item label="上架时间">
<el-date-picker v-model="form.addedTime" type="date" placeholder="选择日期" value-format="yyyy-MM-ddTHH:mm:ss+08:00" style="width: 180px">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="8">
<el-form-item label="售价">
<el-input v-model="form.price" style="width: 180px">
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="8">
<el-form-item label="虚拟观看次数">
<el-input v-model.number="form.fake.watchTimes" style="width: 180px" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="8">
<el-form-item label="虚拟点赞次数">
<el-input v-model.number="form.fake.likes" style="width: 180px" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="8">
<el-form-item label="是否是vip">
<el-switch v-model="form.isVip" active-color="#13ce66" inactive-color="#ff4949" style="width: 180px"></el-switch>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="16" :sm="16" :md="16" :lg="16" :xl="16">
<el-form-item label="详细描述">
<el-input v-model="form.desc" type="textarea" :autosize="{ minRows: 6, maxRows: 10 }" style="width: 590px" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="已选标签">
<el-tag :key="index + 'tag'" v-for="(item, index) in form.tags" :disable-transitions="true" closable style="margin: 2px" @close="handleTagClose(item)">
{{item|changeName(chooseMediatag,'id','name') }}
</el-tag>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="可选标签">
<el-button :type="showTagsFlag?'warning':'success'" @click="showTagsFun">{{showTagsFlag?'隐藏标签':'展示标签'}}</el-button>
<div>
<el-tag v-show="showTagsFlag" :key="index + 'tagData'" style="margin: 2px; cursor: pointer" v-for="(item, index) in chooseMediatag" :disable-transitions="true" :type="fliterTagType(item.name)" @click="handleClickTag(item.id)">
{{ item.name }}
</el-tag>
</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="submit('ruleForm')">
</el-button>
</div>
<AddVideo :data="form" v-if="addVisible" @close="closeVideoInfo" @closeAll="close" @submit="videoInfo"></AddVideo>
</el-dialog>
</template>
<script>
import UploadImg from '@/components/UploadImg/index'
import AddVideo from './addVideo'
import moment from 'moment'
import { arryToString, changeMoneyYuan, changeMoneyFen } from '@/filters/index'
import { MediaSatusList } from '@/filters/videoManagement/videoList'
import { mediaUpdate } from '@/api/videoManagement/videoList'
import {
contentTypeList,
coverTypeList,
} from '@/filters/mediaLibrary/videoList'
import { topicSearch } from '@/api/videoManagement/topic'
import { mediatagList } from '@/api/videoManagement/mediatag'
export default {
name: 'AddOrEdit',
props: ['data', 'videoType', 'mediatag', 'actorList'],
components: {
UploadImg,
AddVideo,
},
data() {
return {
showTagsFlag: false,
Visible: true,
title: '',
coverTypeList: coverTypeList(),
contentTypeList: contentTypeList(),
MediaSatusList: MediaSatusList(),
addVisible: false,
longMediatag: [],
longVideoType: [],
shortMediatag: [],
shortVideoType: [],
chooseMediatag: [],
chooseVideoType: [],
form: {
actors: undefined, // [],演员
actorIds: [], // 演员分类
addedTime: undefined, // "string",上架时间
bango: undefined, // 番号
contentType: undefined, // 格式类型: 1:AV 2:小视频 3:动漫
tags: [],
score: undefined, // 评分
coverImg: undefined, // [],封面
coverType: undefined, // 封面类型: 1:竖版封面 2:横版封面 3:未知
desc: undefined, // "string",详细描述
fake: {},
isVip: undefined, // true,是否VIp
preFileName: undefined, // "string",预览文件
price: undefined, // 0,售价,单位分
publishAvatar: undefined, // 视频发布者头像
publishId: undefined, // 发布者ID
status: undefined, // 0,视频状态
title: undefined, // "string",标题
topicIds: [], // 视频分类
id: undefined, // 0,视频Id
},
rules: {},
}
},
mounted() {
this.title = this.data.title
if (this.title === '编辑') {
this.showChooseTag()
this.form = { ...this.data.data }
this.form.price = changeMoneyYuan(this.form.price)
this.form.addedTime =
moment(this.data.data.addedTime)
.utcOffset(480)
.format('YYYY-MM-DDTHH:mm:ss') + '+08:00'
this.form.sortTime =
moment(this.data.data.sortTime)
.utcOffset(480)
.format('YYYY-MM-DDTHH:mm:ss') + '+08:00'
if (!this.form.tags) {
this.form.tags = []
}
this.getTopicSearch(this.form.contentType)
this.getMediatagList(this.form.contentType)
} else if (this.title === '新增') {
this.addVisible = true
}
},
methods: {
//TODO
update(data) {
mediaUpdate(data).then((res) => {
if (res.code === 200) {
this.$message.success('更新成功')
this.close()
} else {
this.$message.error('更新失败')
}
})
},
// 获取主题
getTopicSearch(val) {
this.chooseVideoType = []
const param = {
pageNum: 1,
pageSize: 500,
contentType: val,
}
topicSearch(param).then((res) => {
if (res.data.list) {
res.data.list.forEach((item) => {
this.chooseVideoType.push({
label: item.name,
value: item.id,
})
})
} else {
this.chooseVideoType = []
}
})
},
// 获取标签
getMediatagList(val) {
this.chooseMediatag = []
const param = {
pageNum: 1,
pageSize: 5000,
contentType: val,
}
mediatagList(param).then((res) => {
if (res.data.list) {
res.data.list.forEach((item) => {
this.chooseMediatag.push({
name: item.name,
id: item.id,
})
})
} else {
this.chooseMediatag = []
}
})
},
// 新增时视频ID绑定
videoInfo(data) {
console.log(data)
this.form = { ...this.form, data }
if (this.form.actorIds) {
this.form.actorids = arryToString(this.form.actorids)
}
// this.form.directors = arryToString(this.form.directors)
// this.form.secondTags = arryToString(this.form.secondTags)
this.addVisible = false
},
showTagsFun() {
this.showTagsFlag = !this.showTagsFlag
},
// 在可选择列表过滤出已选择的标签
fliterTagType(tagID) {
if (this.form.tags.indexOf(tagID) !== -1) {
return 'danger'
} else {
return 'info'
}
},
// 删除已选择列表中的标签
handleTagClose(tag) {
this.form.tags.splice(this.form.tags.indexOf(tag), 1)
},
// // 过滤出选择的标签名称
// fliterTag(ID) {
// let name = ''
// this.mediatag.forEach((element) => {
// if (element.id === ID) {
// name = element.name
// }
// })
// return name
// },
// 根据格式类型显示不同的视频标签和主题分类
showChooseTag() {
this.mediatag.forEach((element) => {
if (element.contentType === 1) {
this.shortMediatag.push(element)
} else if (element.contentType === 2) {
this.longMediatag.push(element)
}
})
this.videoType.forEach((element) => {
if (element.contentType === 1) {
this.shortVideoType.push(element)
} else if (element.contentType === 2) {
this.longVideoType.push(element)
}
})
if (this.data.data.contentType === 1) {
this.chooseMediatag = this.shortMediatag
this.chooseVideoType = this.shortVideoType
} else if (this.data.data.contentType === 2) {
this.chooseMediatag = this.longMediatag
this.chooseVideoType = this.longVideoType
}
},
// 点击可选择列表中的标签
handleClickTag(tagID) {
console.log(tagID)
if (this.form.tags.indexOf(tagID) === -1) {
this.form.tags.push(tagID)
}
console.log(this.form.tags)
},
// 提交按钮
submit(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
const actorNameArr = []
if (this.actorList) {
Object.keys(this.actorList).forEach((key) => {
if (this.form.actorIds.length > 0) {
for (
let index = 0;
index < this.form.actorIds.length;
index++
) {
if (this.form.actorIds[index] === this.actorList[key].id) {
actorNameArr.push(this.actorList[key].name)
}
}
}
})
this.form.actors = arryToString(actorNameArr)
}
const tagNameArr = []
if (this.mediatag) {
Object.keys(this.mediatag).forEach((key) => {
if (this.form.actorIds.length > 0) {
for (let index = 0; index < this.form.tags.length; index++) {
if (this.form.tags[index] === this.mediatag[key].id) {
tagNameArr.push(this.mediatag[key].name)
}
}
}
})
this.form.tagString = arryToString(tagNameArr)
}
this.form.score = parseFloat(this.form.score)
const data = {
id: this.form.id,
param: JSON.parse(JSON.stringify(this.form)),
}
data.param.price = data.param.price
? changeMoneyFen(data.param.price)
: 0
data.param.companiesId = Number(data.param.companiesId)
data.param.fake.watchTimes = data.param.fake.watchTimes
? Number(data.param.fake.watchTimes)
: 0
this.update(data)
} else {
return false
}
})
},
changeContentType(val) {
this.form.topicIds = []
this.getTopicSearch(val)
this.getMediatagList(val)
// if (val === 1) {
// this.chooseMediatag = this.shortMediatag
// this.chooseVideoType = this.shortVideoType
// } else if (val === 2) {
// this.chooseMediatag = this.longMediatag
// this.chooseVideoType = this.longVideoType
// }
},
// 关闭编辑
close() {
this.$emit('close')
},
// 上传图片返回地址
changeCoverImgUrl(data) {
this.form.coverImg = data
},
// 关闭不通过原因弹框
closeVideoInfo() {
this.addVisible = false
},
},
}
</script>
@@ -0,0 +1,58 @@
<!--
* @Author:
* @Mail:
* @Date: 2022-02-23 16:08:40
* @LastEditTime: 2022-05-26 17:25:29
* @LastEditors: Please set LastEditors
* @FilePath: /web_admin/src/views/videoManagement/videoList/components/addVideo.vue
-->
<template>
<el-dialog :visible.sync="Visible" width="400px" center class="ac-dialog" :close-on-click-modal="false" @close="close" title="绑定影片" append-to-body>
<el-form :inline="true" :model="form" class="demo-form-inline" label-width="120px" label-position="right">
<el-input v-model="form.fileId " placeholder="请输入媒资库影片ID" style="width: 100%;margin-top:10px"></el-input>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="close"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</template>
<script>
// import { mediatsAddts } from '@/api/videoManagement/videoList'
export default {
name: 'AddVideo',
props: ['data'],
data() {
return {
Visible: true,
// 表单数据
form: {
fileId: undefined
}
}
},
mounted() {},
methods: {
// TODO:新增视频时绑定煤资库提交按钮
submit() {
// mediatsAddts(this.form).then((res) => {
// if (res.code === 200) {
// this.$message.success('添加成功')
// this.close()
// } else if (res.code === 8000) {
// this.$message.error('媒资库ID不存在')
// } else if (res.code === 1006) {
// this.$message.error('请输入媒资库ID')
// }
// })
},
// 关闭编辑
close() {
this.$emit('closeAll')
this.$emit('close')
}
}
}
</script>
@@ -0,0 +1,153 @@
<template>
<el-dialog :title="title" :visible.sync="Visible" width="700px" center class="ac-dialog" :close-on-click-modal="false" @close="close">
<el-form :inline="true" :model="form" :rules="rules" ref="ruleForm" class="demo-form-inline" label-width="120px" label-position="right">
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="是否VIP" prop="status">
<el-select placeholder="请选择信息分类" clearable v-model="form.isVip" style="width: 180px">
<el-option label="非VIP视频" :value="false" />
<el-option label="VIP视频" :value="true" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="视频状态" prop="status">
<el-select placeholder="请选择视频状态" clearable v-model="form.status" style="width: 180px">
<el-option v-for="item in MediaSatusList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="主题分类">
<el-select style="width: 180px" multiple placeholder="请选择主题分类" v-model="form.topicIds" filterable allow-create default-first-option>
<el-option :key="item.value" :label="item.name" :value="item.id" v-for="item in videoType" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="演员分类">
<el-select style="width: 180px" multiple placeholder="请选择演员分类" v-model="form.actorIds" filterable allow-create default-first-option>
<el-option :key="item.value" :label="item.name" :value="item.id" v-for="item in actorList" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="发布者ID">
<el-input v-model.number="form.publishId" style="width: 180px"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { mediaUpdate } from '@/api/videoManagement/videoList'
import { MediaSatusList } from '@/filters/videoManagement/videoList'
import { arryToString } from '@/filters/index'
export default {
name: 'Batch',
props: ['data', 'videoType', 'gatherList', 'studioList', 'actorList'],
data() {
return {
MediaSatusList: MediaSatusList(),
Visible: true,
title: '',
// 表单数据
form: {
isVip: undefined,
status: undefined,
topicIds: [],
gatherIds: [],
actorIds: [],
actor: undefined,
companiesId: undefined,
publishId: undefined
},
//
dates: [],
rules: {}
}
},
methods: {
// TODO:批量设置视频提交
submit() {
if (this.data.length) {
this.data.forEach((item) => {
const data = {
id: item.id,
param: item
}
console.log(data)
data.param.isVip = this.form.isVip
data.param.status = this.form.status
if (this.form.topicIds.length !== 0) {
data.param.topicIds = this.form.topicIds
}
if (this.form.gatherIds.length !== 0) {
data.param.gatherIds = this.form.gatherIds
}
if (this.form.companiesId) {
data.param.companiesId = this.form.companiesId
}
if (this.form.publishId) {
data.param.publishId = this.form.publishId
}
if (this.form.actorIds.length !== 0) {
data.param.actorIds = this.form.actorIds
const actorNameArr = []
Object.keys(this.actorList).forEach((key) => {
if (this.form.actorIds.length > 0) {
for (
let index = 0;
index < this.form.actorIds.length;
index++
) {
if (this.form.actorIds[index] === this.actorList[key].id) {
actorNameArr.push(this.actorList[key].name)
}
}
}
})
data.param.actor = arryToString(actorNameArr)
} else {
data.param.actor = arryToString(data.param.actor)
}
mediaUpdate(data).then((res) => {
if (res.code === 200) {
this.$message.success(item.id + '修改成功')
} else {
this.$message.error(item.id + '修改失败')
}
})
})
} else {
this.$message.error('未选择视频')
}
this.Visible = false
},
// 关闭编辑
close() {
this.$emit('close')
}
}
}
</script>
@@ -0,0 +1,94 @@
<!--
* @Author:
* @Mail:
* @Date: 2022-02-26 15:21:37
* @LastEditTime: 2022-03-28 14:32:13
* @LastEditors: Please set LastEditors
* @FilePath: /web_admin/src/views/videoManagement/videoList/components/setTag.vue
-->
<template>
<el-dialog :title="title" :visible.sync="Visible" width="700px" center class="ac-dialog" :close-on-click-modal="false" @close="close">
<el-form :inline="true" :model="form" :rules="rules" ref="ruleForm" class="demo-form-inline" label-width="120px" label-position="right">
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="视频标签" prop="status">
<el-select placeholder="请选择视频标签" clearable v-model="form.tags" style="width: 180px" multiple filterable>
<el-option v-for="item in MediaSatusList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { mediatagAddTags } from '@/api/videoManagement/videoList'
import { mediatagList } from '@/api/videoManagement/mediatag'
export default {
name: 'SetTag',
props: ['data'],
data() {
return {
MediaSatusList: [],
Visible: true,
title: '',
// 表单数据
form: {
tags: undefined
},
rules: {}
}
},
mounted() {
this.getMediatagList()
},
methods: {
// TODO:提交视频标签按钮
submit() {
if (this.data.length) {
const mediaIds = []
this.data.forEach(item => {
mediaIds.push(item.id)
})
const param = {
mediaIds: mediaIds,
tags: this.form.tags
}
mediatagAddTags(param).then(res => {
if (res.code === 200) {
this.$message.success('设置标签成功')
} else {
this.$message.error('设置标签失败')
}
})
} else {
this.$message.error('未选择视频')
}
this.Visible = false
},
// TODO:请求视频标签列表
getMediatagList(val) {
const param = {
pageNum: 1,
pageSize: 5000
}
mediatagList(param).then((res) => {
if (res.data.list) {
this.MediaSatusList = res.data.list
}
})
},
// 关闭编辑
close() {
this.$emit('close')
}
}
}
</script>
@@ -0,0 +1,294 @@
<template>
<div class="pf-warpper avlist">
<el-row class="table-form">
<el-form :inline="true" :model="searchData" class="form-inline" size="mini">
<el-form-item>
<el-select placeholder="请选择视频类型" clearable v-model="searchData.subType" @clear="onClear('subType')">
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in contentTypeList" />
</el-select>
</el-form-item>
<el-form-item>
<el-select placeholder="请选择推荐等级" clearable v-model="searchData.recommendLevel" @clear="onClear('recommendLevel')">
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in recommendLevelList" />
</el-select>
</el-form-item>
<el-form-item>
<el-select placeholder="请选择推荐状态" clearable v-model="searchData.recommendStatus" @clear="onClear('recommendStatus')">
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in recommendStatusList" />
</el-select>
</el-form-item>
<el-form-item>
<el-select placeholder="请选择排序方式" clearable v-model="searchData.sort" @clear="onClear('sort')">
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in rankSo" />
</el-select>
</el-form-item>
<el-form-item>
<el-date-picker :default-time="['00:00:00', '23:59:59']" end-placeholder="结束日期" range-separator="" start-placeholder="开始日期" type="datetimerange" v-model="time" value-format="yyyy-MM-ddTHH:mm:ss+08:00" />
</el-form-item>
<el-form-item>
<el-button @click="onSeach" icon="el-icon-search" plain type="primary">搜索</el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-col>
<el-table :data="resData" element-loading-text="拼命加载中" border height="700" highlight-current-row style="width: 100%" v-loading="loading" :row-style="{ height: '70px' }" empty-text="暂无更多数据">
<el-table-column align="center" label="排名 " width="100">
<template slot-scope="scope">{{ scope.row.rank }}</template>
</el-table-column>
<el-table-column align="center" label="影片ID" width="100px">
<template slot-scope="scope">{{ scope.row.mediaId }}</template>
</el-table-column>
<el-table-column align="center" label="视频标题" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.media.title }}</template>
</el-table-column>
<el-table-column align="center" label="视频封面" width="100px">
<template slot-scope="scope">
<ShowImg style="width: 70px; height: 40px; margin: 0 auto" :urls="scope.row.media.coverImg"></ShowImg>
</template>
</el-table-column>
<el-table-column align="center" label="正片预览" width="100px">
<template slot-scope="scope">
<i v-if="scope.row.media.fieldNameFs" class="el-icon-video-play views" title="点击预览" @click="checkMedia(scope.row.media.fieldNameFs, scope.row.media)"></i>
<div v-else>暂无</div>
</template>
</el-table-column>
<el-table-column align="center" label="观看次数" width="100px">
<template slot-scope="scope">{{
scope.row.watchTimes
}}</template>
</el-table-column>
<el-table-column align="center" label="👍点赞次数" width="100">
<template slot-scope="scope">{{ scope.row.likes }}</template>
</el-table-column>
<el-table-column align="center" label="👎倒彩次数" width="100px">
<template slot-scope="scope">{{ scope.row.notLikes }}</template>
</el-table-column>
<el-table-column align="center" label="推荐等级" width="100px">
<template slot-scope="scope">{{ scope.row.recommendLevel|changeRecommendLevel }}</template>
</el-table-column>
<el-table-column align="center" label="推荐状态" width="100px">
<template slot-scope="scope">{{
scope.row.recommendStatus|changeRecommendStatus
}}</template>
</el-table-column>
<el-table-column align="center" label="子类型" width="100px">
<template slot-scope="scope">{{
scope.row.subType|changeContentType
}}</template>
</el-table-column>
<el-table-column align="center" label="创建时间" width="180">
<template slot-scope="scope">{{
scope.row.media.createdAt | BeiJingTime
}}</template>
</el-table-column>
<el-table-column align="center" label="更新时间" width="180">
<template slot-scope="scope">{{
scope.row.media.updatedAt | BeiJingTime
}}</template>
</el-table-column>
<el-table-column align="center" fixed="right" label="操作" width="200">
<template slot-scope="scope">
<el-button @click="handleEdit(scope.row)" size="mini" type="primary">编辑</el-button>
<el-button @click="handleDelete(scope.row)" size="mini" type="danger">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<div class="table-pagination">
<el-pagination :current-page="searchData.pageNum" :page-size="searchData.pageSize" :page-sizes="[10, 20, 30, 50]" :total="total" @current-change="handleCurrentChange" @size-change="handleSizeChange" layout="total, sizes, prev, pager, next, jumper" />
</div>
<Edit :mediatag="mediatag" :videoType="videoType" :actorList="actorList" :data="editData" v-if="editVisible" @close="closeEdit" />
<ShowVideo ref="showvideo"></ShowVideo>
</div>
</template>
<script>
// 引入模块
import ShowImg from '@/components/ShowImg/index.vue'
import ShowVideo from '@/components/ShowVideo/index.vue'
import Edit from './components/AddOrEdit'
import { mediatagList } from '@/api/videoManagement/mediatag'
import { topicSearch } from '@/api/videoManagement/topic'
import { actressSearch } from '@/api/videoManagement/actressList'
import { recommendSeach, recommendDel } from '@/api/videoManagement/recommend'
import { contentTypeList } from '@/filters/mediaLibrary/videoList'
import {
rankSo2,
recommendLevelList,
recommendStatusList,
} from '@/filters/videoManagement/videoList'
export default {
name: 'VideoList',
components: {
ShowImg,
ShowVideo,
Edit,
},
data() {
return {
mediatag: [],
videoType: [],
rankSo: rankSo2(),
contentTypeList: contentTypeList(),
recommendLevelList: recommendLevelList(),
recommendStatusList: recommendStatusList(),
// MediacolumnList: [],
// 请求列表参数
searchData: {
end: undefined, // "string",结束时间
start: undefined, // "string",开始时间
recommendLevel: undefined, // 推荐等级:0:新片 1:黑名单 2:一般 3:推荐
recommendStatus: undefined, // integer推荐状态:0:采集数据,1:结果
sort: undefined, // "string",媒体状态 operatAt(编辑时间)/addedTime(上架时间)/createdAt(创建时间)/updatedAt(更新时间)
subType: undefined, // 格式类型 1:AV 2:小视频 3:动漫
pageNum: 1,
pageSize: 10,
},
time: undefined,
resData: [], // el-table表格数据
total: 0, // 数据总条数
loading: true, // 列表加载状态
// 编辑数据
editVisible: false,
editData: {
title: '新增',
data: {},
},
}
},
mounted() {
this.getMediatagList()
this.getActorList()
this.getMediacategoryList()
this.getMediaSearch()
},
methods: {
// TODO:请求视频列表数据
getMediaSearch() {
this.loading = true
if (this.time) {
this.searchData.start = this.time[0]
this.searchData.end = this.time[1]
} else {
this.searchData.start = undefined
this.searchData.end = undefined
}
recommendSeach(this.searchData).then((res) => {
if (res.code === 200) {
this.resData = res.data.list
this.total = res.data.total
} else {
this.$message.error('请求列表失败')
this.resData = []
this.total = 0
}
this.loading = false
})
},
// TODO:删除视频按钮
handleDelete(row) {
this.$confirm('确定删除?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
recommendDel({ id: row.id }).then((res) => {
if (res.code === 200) {
this.getMediaSearch()
this.$message.success('成功删除!')
} else {
this.$message.error(res.tip)
}
})
})
},
// TODO:请求演员列表数据
getActorList() {
actressSearch({ pageNum: 1, pageSize: 5000, param: {} }).then((res) => {
if (res.code === 200) {
this.actorList = res.data.list
} else {
this.$message.error('请求演员列表失败!')
}
})
},
// TODO:请求视频标签列表
getMediatagList(val) {
mediatagList({
pageNum: 1,
pageSize: 5000,
subType: val || undefined,
}).then((res) => {
if (res.code === 200) {
this.mediatag = res.data.list
} else {
this.$message.error('请求视频标签失败!')
}
})
},
// TODO:请求视频分类列表
getMediacategoryList(val) {
topicSearch({
pageNum: 1,
pageSize: 500,
subType: val || undefined,
}).then((res) => {
if (res.code === 200) {
this.videoType = res.data.list
} else {
this.$message.error('请求视频类型列表失败!')
}
})
},
// 关闭编辑弹窗
closeEdit() {
this.editVisible = false
this.getMediaSearch()
},
handleEdit(row) {
this.editVisible = true
this.editData = {
title: '编辑',
data: row.media,
}
},
checkMedia(url, data) {
this.$refs.showvideo.open(url, data)
},
onSeach() {
this.searchData.pageNum = 1
this.searchData.pageSize = 10
this.getMediaSearch()
},
// 切换每页数据量
handleSizeChange(val) {
this.searchData.pageSize = val
this.getMediaSearch()
},
// 切换页数
handleCurrentChange(val) {
this.searchData.pageNum = val
this.getMediaSearch()
},
// 清空某一项筛选列表
onClear(key) {
this.searchData[key] = undefined
this.getMediaSearch()
},
},
}
</script>