|
@@ -1,34 +1,39 @@
|
|
|
<template>
|
|
|
<div>
|
|
|
- <Search :search="search" :reset="reset">
|
|
|
+ <Search :search="search" :reset="resetQuery">
|
|
|
<template v-slot:body>
|
|
|
<el-form-item label="短剧" prop="name">
|
|
|
- <el-input v-model="query.name" name="name" placeholder="请输入剧号/短剧名称" clearable />
|
|
|
+ <el-input v-model="query.videoName" placeholder="请输入短剧名称" clearable />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="状态" prop="cp">
|
|
|
- <el-select v-model="query.cp_id" filterable clearable remote :remote-method="remoteMethod" placeholder="请选择状态">
|
|
|
- <el-option v-for="item in cpoptions" :key="item.cp_id" :label="item.cp_nick" :value="item.cp_id" />
|
|
|
+ <el-form-item label="状态" prop="updateType">
|
|
|
+ <el-select v-model="query.updateType" filterable clearable remote placeholder="请选择状态">
|
|
|
+ <el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="频道" prop="cp_company">
|
|
|
- <el-select v-model="query.settlement_type" clearable filterable placeholder="请选择频道">
|
|
|
- <el-option v-for="(item, index) in cooperations" :key="index" :label="item.name" :value="item.value" />
|
|
|
- </el-select>
|
|
|
+ <el-form-item label="频道" prop="categoryId">
|
|
|
+ <el-cascader v-model="selectType" :options="cooperations" filterable clearable :change-on-select="true"
|
|
|
+ @change="handleCascaderChange" />
|
|
|
</el-form-item>
|
|
|
</template>
|
|
|
</Search>
|
|
|
<div class="table-default">
|
|
|
<div class="set-warpper">
|
|
|
- <el-button type="primary" @click="mulSet" size="default" v-action="'contentManage.book.mulSet'">批量操作</el-button>
|
|
|
+ <el-button type="primary" @click="mulSet" size="default" v-action="'video.video.mulSet'">批量操作</el-button>
|
|
|
</div>
|
|
|
- <Operate :show="open" />
|
|
|
+ <Operate :show="open" v-action="'video.video.add'" />
|
|
|
<el-table :data="tableData" class="mt-3" v-loading="loading" @selection-change="handleSelectionChange">
|
|
|
<el-table-column type="selection" width="55" />
|
|
|
<el-table-column type="index" width="100" label="剧号" />
|
|
|
<el-table-column label="封面" width="200" show-overflow-tooltip>
|
|
|
<template #default="scope">
|
|
|
<div class="flex flex-col items-center justify-center wrapper">
|
|
|
- <el-image :src="scope.row.cover_image" style="width:148px;height:148px;" fit="fill" :lazy="true"></el-image>
|
|
|
+ <el-popover placement="top" :width="200" trigger="hover">
|
|
|
+ <template #reference>
|
|
|
+ <el-image :src="scope.row.cover_image" class="cursor-pointer" style="width:48px;height:48px;"
|
|
|
+ fit="contain" :lazy="true"></el-image>
|
|
|
+ </template>
|
|
|
+ <el-image :src="scope.row.cover_image" style="width:100%;" fit="contain"></el-image>
|
|
|
+ </el-popover>
|
|
|
<el-button type="primary" link size="default" @click="dowload(scope.row)">下载</el-button>
|
|
|
</div>
|
|
|
</template>
|
|
@@ -36,7 +41,7 @@
|
|
|
<el-table-column label="短剧名称" width="250" show-overflow-tooltip>
|
|
|
<template #default="scope">
|
|
|
<div class="wrapper">
|
|
|
- <span class="text-lg font-bold text-blue-600 cursor-pointer content"
|
|
|
+ <span class="text-lg font-bold text-blue-400 cursor-pointer content"
|
|
|
@click="openType('videoDetailVisible', scope.row)">
|
|
|
{{ scope.row.name }}
|
|
|
</span>
|
|
@@ -50,7 +55,23 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="total_episode_num" label="集数" />
|
|
|
+ <el-table-column prop="total_episode_num" label="集数">
|
|
|
+ <template #default="scope">
|
|
|
+ <div class="flex wrapper">
|
|
|
+ <div v-if="scope.row.update_type == 1">
|
|
|
+ <span class="content">
|
|
|
+ {{ scope.row.updated_episode_num }}
|
|
|
+ </span>
|
|
|
+ <span>/</span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="content">
|
|
|
+ {{ scope.row.total_episode_num }}
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
<el-table-column prop="category_str" label="频道" />
|
|
|
<el-table-column prop="shelf_type_str" label="上架状态" />
|
|
|
<el-table-column prop="charge_sequence" label="起始集" />
|
|
@@ -72,11 +93,14 @@
|
|
|
</el-table-column>
|
|
|
<el-table-column label="操作">
|
|
|
<template #default="scope">
|
|
|
- <el-button link type="primary" size="small"
|
|
|
- @click="openType('uploadVisible', scope.row)">上传视频</el-button><br />
|
|
|
- <el-button @click="open(scope.row)" link type="primary" size="small">编辑</el-button><br />
|
|
|
- <el-button @click="openType('takeVisible', scope.row)" link type="primary" size="small">订阅设置</el-button><br />
|
|
|
- <el-button link type="primary" size="small" @click="openType('videoDLVisible', scope.row)">视频下载</el-button>
|
|
|
+ <el-button link type="primary" size="small" @click="openType('uploadVisible', scope.row)"
|
|
|
+ v-action="'video.episode.add'">上传视频</el-button><br />
|
|
|
+ <el-button @click="open(scope.row)" link type="primary" size="small"
|
|
|
+ v-action="'video.video.update'">编辑</el-button><br />
|
|
|
+ <el-button @click="openType('takeVisible', scope.row)" link type="primary" size="small"
|
|
|
+ v-action="'video.video.setChargeConfig'">订阅设置</el-button><br />
|
|
|
+ <el-button link type="primary" size="small" @click="openType('videoDLVisible', scope.row)"
|
|
|
+ v-action="'video.episode.downloadList'">视频下载</el-button>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
@@ -95,7 +119,7 @@
|
|
|
<Dialog v-model="uploadVisible" width="50%" title="上传视频" destroy-on-close>
|
|
|
<uploadVideo @close="closeType('uploadVisible')" :primary="uploadData"></uploadVideo>
|
|
|
</Dialog>
|
|
|
- <Dialog v-model="videoDetailVisible" width="50%" title="短剧详情" destroy-on-close>
|
|
|
+ <Dialog v-action="'video.episode.list'" v-model="videoDetailVisible" width="50%" title="短剧详情" destroy-on-close>
|
|
|
<videoDetail @close="closeType('videoDetailVisible')" :primary="videoDetailData"></videoDetail>
|
|
|
</Dialog>
|
|
|
</div>
|
|
@@ -104,6 +128,7 @@
|
|
|
<script lang="ts" setup>
|
|
|
import { downloadImage } from '@/utils/index'
|
|
|
import { InfoFilled } from '@element-plus/icons-vue';
|
|
|
+import { provide } from 'vue'
|
|
|
import Create from './form/create.vue';
|
|
|
import videoDL from './form/videoDL.vue';
|
|
|
import videoDetail from './detail.vue';
|
|
@@ -114,12 +139,13 @@ import { useDestroy } from '@/hook/curd/useDestroy';
|
|
|
import { useOpen } from '@/hook/curd/useOpen';
|
|
|
import { shortcuts } from '@/utils/shortcuts';
|
|
|
import moment from 'moment';
|
|
|
-import { cpOptions } from '@/api/cp/index';
|
|
|
-import { ca } from 'element-plus/es/locale';
|
|
|
-let ismulSet = ref(false)
|
|
|
+import { videoStockVideoUpdate, videoStockVideoAdd, videoStockVideoCategoryList } from '@/api/video/index'
|
|
|
+import { useUserStore } from '@/stores/modules/user/index'
|
|
|
+
|
|
|
+const ismulSet = ref(false)
|
|
|
const api = 'videoStock/video/list';
|
|
|
const addApi = 'contentManage/book/edit_author';
|
|
|
-let multipleSelection = reactive([]);
|
|
|
+const multipleSelection = reactive([]);
|
|
|
const { data, query, search, reset, loading } = useGetList(api);
|
|
|
const { deleted } = useDestroy();
|
|
|
const uploadBooksVisible = ref(false)
|
|
@@ -131,7 +157,35 @@ const takeVisible = ref(false)
|
|
|
const takeData = ref({})
|
|
|
const videoDetailVisible = ref(false)
|
|
|
const videoDetailData = ref({})
|
|
|
-const openType = (type, data) => {
|
|
|
+const current = ref({})
|
|
|
+const selectType = ref([])
|
|
|
+const statusOptions = ref([{ label: '连载中', value: '1' }, { label: '完结', value: '2' }]);
|
|
|
+const cooperations = ref([]);
|
|
|
+
|
|
|
+
|
|
|
+const userStore = useUserStore()
|
|
|
+console.log('userStore', userStore.roles);
|
|
|
+
|
|
|
+const handleCascaderChange = (val: any) => {
|
|
|
+ console.log(val, 'valval');
|
|
|
+ if (val) {
|
|
|
+ // 获取最后一级选项的值
|
|
|
+ const lastOptionValue = val[val.length - 1];
|
|
|
+ console.log('最后一级选项的值:', lastOptionValue, selectType.value);
|
|
|
+ // 更新 selectedOptions 的值
|
|
|
+ query.value.categoryId = lastOptionValue;
|
|
|
+ } else {
|
|
|
+ delete query.value.categoryId
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+const resetQuery = () => {
|
|
|
+ reset()
|
|
|
+ selectType.value = []
|
|
|
+}
|
|
|
+const openType = (type: string, data: object) => {
|
|
|
+ current.value = data;
|
|
|
+ provide('video', current.value)
|
|
|
switch (type) {
|
|
|
case 'videoDLVisible':
|
|
|
videoDLVisible.value = true
|
|
@@ -151,24 +205,20 @@ const openType = (type, data) => {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+provide('video', current)
|
|
|
+const initType = () => {
|
|
|
+ videoStockVideoCategoryList().then(res => {
|
|
|
+ console.log(res);
|
|
|
+ cooperations.value = res.data
|
|
|
+ })
|
|
|
+}
|
|
|
+// 下载封面
|
|
|
const dowload = (e: object) => {
|
|
|
- console.log(e);
|
|
|
- // const link = document.createElement('a')
|
|
|
- // link.href = e.cover_image
|
|
|
- // link.setAttribute('download', e.name)
|
|
|
- // document.body.appendChild(link)
|
|
|
- // link.click()
|
|
|
- // document.body.removeChild(link)
|
|
|
- // (e.cover_image, e.name)
|
|
|
downloadImage(e.cover_image, e.name)
|
|
|
- console.log(downloadImage());
|
|
|
}
|
|
|
|
|
|
const tableData = computed(() => data.value?.data);
|
|
|
const { open, close, title, visible, id } = useOpen();
|
|
|
-let cooperations = ref([]);
|
|
|
-let cpoptions = ref([]);
|
|
|
|
|
|
const handleSelectionChange = (val: []) => {
|
|
|
console.log(toRaw(val));
|
|
@@ -193,14 +243,7 @@ const closeType = (type) => {
|
|
|
}
|
|
|
search()
|
|
|
}
|
|
|
-const closeUpload = () => {
|
|
|
- uploadBooksVisible.value = false
|
|
|
- search()
|
|
|
-}
|
|
|
|
|
|
-// watch(() => uploadVisible.value, (newVal, oldVal) => {
|
|
|
-// search()
|
|
|
-// })
|
|
|
const mulSet = () => {
|
|
|
if (multipleSelection.length <= 0) {
|
|
|
return ElMessage.warning({
|
|
@@ -236,23 +279,9 @@ const mulSet = () => {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-const remoteMethod = (query: string) => {
|
|
|
- if (query) {
|
|
|
- initCpOtion({ cp_name: query })
|
|
|
- } else {
|
|
|
- initCpOtion({})
|
|
|
- }
|
|
|
-}
|
|
|
-const initCpOtion = (params: object) => {
|
|
|
- cpOptions(params).then(res => {
|
|
|
- cpoptions.value = res.data
|
|
|
- })
|
|
|
-}
|
|
|
-
|
|
|
onMounted(() => {
|
|
|
- initCpOtion({})
|
|
|
+ initType()
|
|
|
search();
|
|
|
- deleted(reset);
|
|
|
});
|
|
|
</script>
|
|
|
|