mirror of
https://github.com/ProudMuBai/GoFilm.git
synced 2026-02-13 13:34:42 +08:00
banner image local upload
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
</div>-->
|
||||
<div class="content">
|
||||
<el-upload v-model:file-list="data.photoWall" action="#" list-type="picture-card"
|
||||
:on-remove="handleRemove" :http-request="customUpload">
|
||||
:http-request="customUpload">
|
||||
<template #file="{ file }">
|
||||
<el-image class="el-upload-list__item-thumbnail" style="width: 100%;height: 100%" :src="file.link" fit="cover" />
|
||||
<span class="el-upload-list__item-actions">
|
||||
@@ -112,7 +112,7 @@ const handlePictureCardPreview = (currentFile:any) => {
|
||||
padding: 10px 10px;
|
||||
}
|
||||
:deep(.el-upload-list__item ) {
|
||||
margin: 10px auto!important;
|
||||
margin: 10px 10px!important;
|
||||
}
|
||||
:deep(.el-upload--picture-card){
|
||||
margin: 10px auto;
|
||||
|
||||
@@ -90,8 +90,8 @@
|
||||
</el-table-column>
|
||||
<el-table-column prop="remarks" align="center" label="更新状态">
|
||||
<template #default="scope">
|
||||
<el-tag v-if="scope.row.remarks == '已完结'" type="success" disable-transitions>{{scope.row.remarks }}</el-tag>
|
||||
<el-tag v-else disable-transitions>{{scope.row.remarks }}</el-tag>
|
||||
<el-tag v-if="(scope.row.remarks+'').indexOf('更新') != -1" type="warning" >{{scope.row.remarks }}</el-tag>
|
||||
<el-tag v-else type="success" >{{scope.row.remarks }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column sortable prop="updateStamp" align="center" label="更新时间">
|
||||
@@ -99,9 +99,10 @@
|
||||
<el-tag type="success" disable-transitions>{{fmt.dateFormat(scope.row.updateStamp) }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center">
|
||||
<el-table-column label="操作" align="center" min-width="100px">
|
||||
<template #default="scope">
|
||||
<el-button type="success" :icon="Aim" @click="" plain circle/>
|
||||
<el-button type="success" :icon="RefreshRight" @click="UpdateFilm(scope.row.mid)" plain circle/>
|
||||
<el-button type="primary" :icon="Edit" @click="" plain circle/>
|
||||
<el-button type="danger" :icon="Delete" @click="delFilm(scope.row.ID)" plain circle/>
|
||||
</template>
|
||||
@@ -119,7 +120,7 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {Delete, Edit, Aim, Search, Calendar} from "@element-plus/icons-vue";
|
||||
import {Delete, Edit, Aim, Search, Calendar, RefreshRight} from "@element-plus/icons-vue";
|
||||
import {onMounted, reactive} from "vue";
|
||||
import {ApiGet} from "../../../utils/request";
|
||||
import {ElMessage} from "element-plus";
|
||||
@@ -198,6 +199,18 @@ const searchFilm = ()=>{
|
||||
|
||||
}
|
||||
|
||||
// 更新影片信息
|
||||
const UpdateFilm = (id:number)=>{
|
||||
let ids = id + ''
|
||||
ApiGet(`/manage/spider/update/single`, {ids: id}).then((resp: any) => {
|
||||
if (resp.code === 0) {
|
||||
ElMessage.success({message: resp.msg})
|
||||
} else {
|
||||
ElMessage.error({message: resp.msg})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 获取影片分页信息
|
||||
const getFilmPage = () => {
|
||||
let {current, pageSize} = data.page
|
||||
|
||||
@@ -16,12 +16,14 @@
|
||||
</el-table-column>
|
||||
<el-table-column prop="collectType" align="center" label="影片海报">
|
||||
<template #default="scope">
|
||||
<el-image style="width: 180px; height: 80px" :src="scope.row.poster" :preview-src-list="[scope.row.poster]" preview-teleported fit="contain" />
|
||||
<el-image style="width: 180px; height: 80px" :src="scope.row.poster" :preview-src-list="[scope.row.poster]"
|
||||
preview-teleported fit="contain"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="collectType" align="center" label="影片封面">
|
||||
<template #default="scope">
|
||||
<el-image style="width: 60px; height: 80px" :src="scope.row.picture" :preview-src-list="[scope.row.picture]" preview-teleported fit="cover" />
|
||||
<el-image style="width: 60px; height: 80px" :src="scope.row.picture" :preview-src-list="[scope.row.picture]"
|
||||
preview-teleported fit="cover"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="collectType" align="center" label="排序">
|
||||
@@ -31,27 +33,27 @@
|
||||
</el-table-column>
|
||||
<el-table-column prop="resultModel" align="center" label="连载状态">
|
||||
<template #default="scope">
|
||||
<el-tag v-if="(scope.row.remarks+'').search('更新') == -1" type="success" >{{ scope.row.remark}}</el-tag>
|
||||
<el-tag v-else type="primary" >{{ scope.row.remark}}</el-tag>
|
||||
<el-tag v-if="(scope.row.remarks+'').search('更新') == -1" type="success">{{ scope.row.remark }}</el-tag>
|
||||
<el-tag v-else type="primary">{{ scope.row.remark }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-tooltip content="绑定影片信息" placement="top">
|
||||
<el-button type="success" :icon="Link" plain circle @click="openBindV(scope.row)" />
|
||||
<el-button type="success" :icon="Link" plain circle @click="openBindV(scope.row)"/>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="修改海报信息" placement="top">
|
||||
<el-button type="primary" :icon="Edit" plain circle @click="openEditV(scope.row)" />
|
||||
<el-button type="primary" :icon="Edit" plain circle @click="openEditV(scope.row)"/>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="删除海报信息" placement="top">
|
||||
<el-button type="danger" :icon="Delete" plain circle @click="delBanner(scope.row)" />
|
||||
<el-button type="danger" :icon="Delete" plain circle @click="delBanner(scope.row)"/>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="cus_util">
|
||||
<el-button color="#9b49e7" :icon="CirclePlus" @click="openAddV">添加海报</el-button>
|
||||
<el-button color="#9b49e7" :icon="CirclePlus" @click="clearCache">清除缓存</el-button>
|
||||
<el-button type="danger" :icon="TakeawayBox" @click="clearCache">清除缓存</el-button>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -68,34 +70,42 @@
|
||||
<el-input v-model="data.banner.cName" placeholder="影片所属分类"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="影片海报">
|
||||
<el-input v-model="data.banner.poster" placeholder="影片海报访问URL"/>
|
||||
<el-input v-model="data.banner.poster" placeholder="影片海报访问URL" class="upload_input" />
|
||||
<el-upload :show-file-list="false" action="#" :http-request="customUpload" :data="{type: 0}" class="upload" >
|
||||
<el-button color="#626aef" round plain :icon="UploadFilled" class="upload_btn">Upload</el-button>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="影片封面">
|
||||
<el-input v-model="data.banner.picture" placeholder="影片封面访问URL"/>
|
||||
<el-input v-model="data.banner.picture" placeholder="影片封面访问URL" class="upload_input" />
|
||||
<el-upload :show-file-list="false" action="#" :http-request="customUpload" :data="{type: 1}" class="upload" >
|
||||
<el-button color="#626aef" round plain :icon="UploadFilled" class="upload_btn" >Upload</el-button>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="更新状态">
|
||||
<el-input v-model="data.banner.remark" placeholder="影片更新状态"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="上映年份">
|
||||
<el-input-number v-model="data.banner.year" :min="0" :step="1" :max="2100" step-strictly />
|
||||
<el-input-number v-model="data.banner.year" :min="0" :step="1" :max="2100" step-strictly/>
|
||||
</el-form-item>
|
||||
<el-form-item label="排序分值">
|
||||
<el-input-number v-model="data.banner.sort" :min="-100" :step="1" :max="100" step-strictly />
|
||||
<el-input-number v-model="data.banner.sort" :min="-100" :step="1" :max="100" step-strictly/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button color="#cf48be" @click="data.dialogV.addBindV = true" >绑定影片</el-button>
|
||||
<el-button color="#9b49e7" @click="add" >确认添加</el-button>
|
||||
<el-button color="#cf48be" @click="data.dialogV.addBindV = true">绑定影片</el-button>
|
||||
<el-button color="#9b49e7" @click="add">确认添加</el-button>
|
||||
<el-button @click="data.dialogV.addV = false">取消</el-button>
|
||||
</span>
|
||||
</template>
|
||||
<!--影片绑定弹窗-->
|
||||
<el-dialog v-model="data.dialogV.addBindV" width="620px" title="绑定影片" align-center >
|
||||
<el-dialog v-model="data.dialogV.addBindV" width="620px" title="绑定影片" align-center>
|
||||
<el-form :model="data.banner">
|
||||
<el-form-item label="搜索影片">
|
||||
<el-select-v2 v-model="data.FilmId" filterable :props="{label:'name', value: 'id'}" remote :remote-method="loadingFilm" clearable
|
||||
:options="data.options" :loading="data.loading" placeholder="请输入需要绑定的影片名称" @change="changeFilm" >
|
||||
<el-select-v2 v-model="data.FilmId" filterable :props="{label:'name', value: 'id'}" remote
|
||||
:remote-method="loadingFilm" clearable
|
||||
:options="data.options" :loading="data.loading" placeholder="请输入需要绑定的影片名称"
|
||||
@change="changeFilm">
|
||||
</el-select-v2>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="data.film.id">
|
||||
@@ -110,14 +120,14 @@
|
||||
</p>
|
||||
<p><em>导演:</em>{{ data.film.director }}</p>
|
||||
<p><em>主演:</em>{{ data.film.actor }}</p>
|
||||
<p class="blurb"><em>剧情:</em>{{ (data.film.blurb+'').replaceAll(' ', '') }}</p>
|
||||
<p class="blurb"><em>剧情:</em>{{ (data.film.blurb + '').replaceAll(' ', '') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button color="#9b49e7" @click="bindAddBanner" >确认绑定</el-button>
|
||||
<el-button color="#9b49e7" @click="bindAddBanner">确认绑定</el-button>
|
||||
<el-button @click="data.dialogV.addBindV = false">取消</el-button>
|
||||
</span>
|
||||
</template>
|
||||
@@ -137,34 +147,42 @@
|
||||
<el-input v-model="data.banner.cName" placeholder="影片所属分类"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="影片海报">
|
||||
<el-input v-model="data.banner.poster" placeholder="影片海报访问URL"/>
|
||||
<el-input v-model="data.banner.poster" placeholder="影片海报访问URL" class="upload_input" />
|
||||
<el-upload :show-file-list="false" action="#" :http-request="customUpload" :data="{type: 0}" class="upload" >
|
||||
<el-button color="#626aef" round plain :icon="UploadFilled" class="upload_btn" >Upload</el-button>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="影片封面">
|
||||
<el-input v-model="data.banner.picture" placeholder="影片封面访问URL"/>
|
||||
<el-input v-model="data.banner.picture" placeholder="影片封面访问URL" class="upload_input" />
|
||||
<el-upload :show-file-list="false" action="#" :http-request="customUpload" :data="{type: 1}" class="upload" >
|
||||
<el-button color="#626aef" round plain :icon="UploadFilled" class="upload_btn" >Upload</el-button>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="更新状态">
|
||||
<el-input v-model="data.banner.remark" placeholder="影片更新状态"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="上映年份">
|
||||
<el-input-number v-model="data.banner.year" :min="0" :step="1" :max="2100" step-strictly />
|
||||
<el-input-number v-model="data.banner.year" :min="0" :step="1" :max="2100" step-strictly/>
|
||||
</el-form-item>
|
||||
<el-form-item label="排序分值">
|
||||
<el-input-number v-model="data.banner.sort" :min="-100" :step="1" :max="100" step-strictly />
|
||||
<el-input-number v-model="data.banner.sort" :min="-100" :step="1" :max="100" step-strictly/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button color="#cf48be" @click="data.dialogV.editBindV = true" >绑定影片</el-button>
|
||||
<el-button color="#9b49e7" @click="edit" >保存</el-button>
|
||||
<el-button color="#cf48be" @click="data.dialogV.editBindV = true">绑定影片</el-button>
|
||||
<el-button color="#9b49e7" @click="edit">保存</el-button>
|
||||
<el-button @click="data.dialogV.editV = false">取消</el-button>
|
||||
</span>
|
||||
</template>
|
||||
<!--重新绑定影片-->
|
||||
<el-dialog v-model="data.dialogV.editBindV" width="620px" title="绑定影片" align-center >
|
||||
<el-dialog v-model="data.dialogV.editBindV" width="620px" title="绑定影片" align-center>
|
||||
<el-form :model="data.banner">
|
||||
<el-form-item label="搜索影片">
|
||||
<el-select-v2 v-model="data.FilmId" filterable :props="{label:'name', value: 'id'}" remote :remote-method="loadingFilm" clearable
|
||||
:options="data.options" :loading="data.loading" placeholder="请输入需要绑定的影片名称" @change="changeFilm" >
|
||||
<el-select-v2 v-model="data.FilmId" filterable :props="{label:'name', value: 'id'}" remote
|
||||
:remote-method="loadingFilm" clearable
|
||||
:options="data.options" :loading="data.loading" placeholder="请输入需要绑定的影片名称"
|
||||
@change="changeFilm">
|
||||
</el-select-v2>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="data.film.id">
|
||||
@@ -179,14 +197,14 @@
|
||||
</p>
|
||||
<p><em>导演:</em>{{ data.film.director }}</p>
|
||||
<p><em>主演:</em>{{ data.film.actor }}</p>
|
||||
<p class="blurb"><em>剧情:</em>{{ (data.film.blurb+'').replaceAll(' ', '') }}</p>
|
||||
<p class="blurb"><em>剧情:</em>{{ (data.film.blurb + '').replaceAll(' ', '') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button color="#9b49e7" @click="bindAddBanner" >确认绑定</el-button>
|
||||
<el-button color="#9b49e7" @click="bindAddBanner">确认绑定</el-button>
|
||||
<el-button @click="data.dialogV.addBindV = false">取消</el-button>
|
||||
</span>
|
||||
</template>
|
||||
@@ -197,8 +215,10 @@
|
||||
<el-dialog v-model="data.dialogV.bindV" width="680px" title="绑定影片">
|
||||
<el-form :model="data.banner">
|
||||
<el-form-item label="搜索影片">
|
||||
<el-select-v2 v-model="data.FilmId" filterable :props="{label:'name', value: 'id'}" remote :remote-method="loadingFilm" clearable
|
||||
:options="data.options" :loading="data.loading" placeholder="请输入需要绑定的影片名称" @change="changeFilm" >
|
||||
<el-select-v2 v-model="data.FilmId" filterable :props="{label:'name', value: 'id'}" remote
|
||||
:remote-method="loadingFilm" clearable
|
||||
:options="data.options" :loading="data.loading" placeholder="请输入需要绑定的影片名称"
|
||||
@change="changeFilm">
|
||||
</el-select-v2>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="data.film.id">
|
||||
@@ -213,14 +233,14 @@
|
||||
</p>
|
||||
<p><em>导演:</em>{{ data.film.director }}</p>
|
||||
<p><em>主演:</em>{{ data.film.actor }}</p>
|
||||
<p class="blurb"><em>剧情:</em>{{ (data.film.blurb+'').replaceAll(' ', '') }}</p>
|
||||
<p class="blurb"><em>剧情:</em>{{ (data.film.blurb + '').replaceAll(' ', '') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button color="#9b49e7" @click="bindFilm" >确认绑定</el-button>
|
||||
<el-button color="#9b49e7" @click="bindFilm">确认绑定</el-button>
|
||||
<el-button @click="data.dialogV.bindV = false">取消</el-button>
|
||||
</span>
|
||||
</template>
|
||||
@@ -233,7 +253,7 @@ import {
|
||||
CirclePlus,
|
||||
Delete,
|
||||
Edit,
|
||||
Link,
|
||||
Link, TakeawayBox, UploadFilled,
|
||||
} from "@element-plus/icons-vue";
|
||||
import {onMounted, reactive} from "vue";
|
||||
import {ApiGet, ApiPost} from "../../../utils/request";
|
||||
@@ -257,11 +277,11 @@ const data = reactive({
|
||||
})
|
||||
|
||||
// banner添加功能组
|
||||
const openAddV = ()=>{
|
||||
const openAddV = () => {
|
||||
data.banner = {id: '', mid: 0, name: '', cName: '', poster: '', picture: '', year: 0, remark: '', sort: 0}
|
||||
data.dialogV.addV = true
|
||||
}
|
||||
const bindAddBanner = ()=>{
|
||||
const bindAddBanner = () => {
|
||||
// 同步绑定的影片信息到当前Banner
|
||||
data.banner.mid = data.film.id
|
||||
data.banner.name = data.film.name
|
||||
@@ -273,8 +293,8 @@ const bindAddBanner = ()=>{
|
||||
data.dialogV.editBindV = false
|
||||
ElMessage.success({message: "影片信息绑定成功!!!"})
|
||||
}
|
||||
const add = ()=>{
|
||||
ApiPost('/manage/banner/add', data.banner).then((resp:any)=>{
|
||||
const add = () => {
|
||||
ApiPost('/manage/banner/add', data.banner).then((resp: any) => {
|
||||
if (resp.code === 0) {
|
||||
ElMessage.success({message: resp.msg})
|
||||
data.banner = {id: '', mid: 0, name: '', cName: '', poster: '', picture: '', year: 0, remark: '', sort: 0}
|
||||
@@ -287,13 +307,13 @@ const add = ()=>{
|
||||
}
|
||||
|
||||
// 修改功能组
|
||||
const openEditV = (b:any)=> {
|
||||
const openEditV = (b: any) => {
|
||||
data.banner = b
|
||||
data.dialogV.editV = true
|
||||
|
||||
}
|
||||
const edit = ()=>{
|
||||
ApiPost('/manage/banner/update', data.banner).then((resp:any)=>{
|
||||
const edit = () => {
|
||||
ApiPost('/manage/banner/update', data.banner).then((resp: any) => {
|
||||
if (resp.code === 0) {
|
||||
ElMessage.success({message: resp.msg})
|
||||
data.banner = {id: '', mid: 0, name: '', cName: '', poster: '', picture: '', year: 0, remark: '', sort: 0}
|
||||
@@ -306,14 +326,14 @@ const edit = ()=>{
|
||||
}
|
||||
|
||||
// 绑定功能组
|
||||
const openBindV = (b:any)=>{
|
||||
const openBindV = (b: any) => {
|
||||
data.banner = b
|
||||
data.dialogV.bindV = true
|
||||
}
|
||||
const loadingFilm = (query:string)=>{
|
||||
if(query){
|
||||
const loadingFilm = (query: string) => {
|
||||
if (query) {
|
||||
data.loading = true
|
||||
setTimeout(()=>{
|
||||
setTimeout(() => {
|
||||
data.loading = false
|
||||
ApiGet('/searchFilm', {keyword: query, current: 0}).then((resp: any) => {
|
||||
if (resp.code == 0) {
|
||||
@@ -323,18 +343,18 @@ const loadingFilm = (query:string)=>{
|
||||
data.options = []
|
||||
}
|
||||
})
|
||||
},1500)
|
||||
}, 1500)
|
||||
}
|
||||
|
||||
}
|
||||
const changeFilm = (val:any)=>{
|
||||
data.options.forEach(item=>{
|
||||
if (item.id==val) {
|
||||
const changeFilm = (val: any) => {
|
||||
data.options.forEach(item => {
|
||||
if (item.id == val) {
|
||||
data.film = item
|
||||
}
|
||||
})
|
||||
}
|
||||
const bindFilm = ()=>{
|
||||
const bindFilm = () => {
|
||||
// 同步绑定的影片信息到当前Banner
|
||||
data.banner.mid = data.film.id
|
||||
data.banner.name = data.film.name
|
||||
@@ -342,7 +362,7 @@ const bindFilm = ()=>{
|
||||
data.banner.picture = data.film.picture
|
||||
data.banner.year = parseInt(data.film.year)
|
||||
data.banner.remark = data.film.remarks
|
||||
ApiPost('/manage/banner/update', data.banner).then((resp:any)=>{
|
||||
ApiPost('/manage/banner/update', data.banner).then((resp: any) => {
|
||||
if (resp.code === 0) {
|
||||
ElMessage.success({message: resp.msg})
|
||||
data.banner = {id: '', mid: 0, name: '', cName: '', poster: '', picture: '', year: 0, remark: '', sort: 0}
|
||||
@@ -355,8 +375,8 @@ const bindFilm = ()=>{
|
||||
}
|
||||
|
||||
// 删除海报信息
|
||||
const delBanner = (b:any)=>{
|
||||
ApiGet('/manage/banner/del', {id:b.id}).then((resp:any)=>{
|
||||
const delBanner = (b: any) => {
|
||||
ApiGet('/manage/banner/del', {id: b.id}).then((resp: any) => {
|
||||
if (resp.code === 0) {
|
||||
ElMessage.success({message: resp.msg})
|
||||
getBanners()
|
||||
@@ -367,8 +387,8 @@ const delBanner = (b:any)=>{
|
||||
}
|
||||
|
||||
// 清除海报信息
|
||||
const clearCache = ()=>{
|
||||
ApiGet('/cache/del').then((resp:any)=> {
|
||||
const clearCache = () => {
|
||||
ApiGet('/cache/del').then((resp: any) => {
|
||||
if (resp.code == 0) {
|
||||
ElMessage.success({message: resp.msg})
|
||||
} else {
|
||||
@@ -377,9 +397,34 @@ const clearCache = ()=>{
|
||||
})
|
||||
}
|
||||
|
||||
const getBanners = ()=>{
|
||||
ApiGet(`/manage/banner/list`).then((resp:any)=>{
|
||||
if(resp.code === 0){
|
||||
// 上传并回填图片信息
|
||||
const customUpload = (options: any) => {
|
||||
let file = options.file
|
||||
let formData = new FormData();
|
||||
formData.append("file", file)
|
||||
ApiPost(`/manage/file/upload`, formData).then((resp: any) => {
|
||||
if (resp.code === 0) {
|
||||
switch (options.data.type) {
|
||||
case 0:
|
||||
data.banner.poster = resp.data
|
||||
break
|
||||
case 1:
|
||||
data.banner.picture = resp.data
|
||||
break
|
||||
}
|
||||
ElMessage.success({message: resp.msg})
|
||||
} else {
|
||||
ElMessage.error({message: resp.msg})
|
||||
}
|
||||
})
|
||||
}
|
||||
const changePicture = (r: any) => {
|
||||
console.log(r)
|
||||
}
|
||||
|
||||
const getBanners = () => {
|
||||
ApiGet(`/manage/banner/list`).then((resp: any) => {
|
||||
if (resp.code === 0) {
|
||||
data.banners = resp.data
|
||||
} else {
|
||||
ElMessage.error({message: resp.msg})
|
||||
@@ -387,7 +432,7 @@ const getBanners = ()=>{
|
||||
})
|
||||
}
|
||||
|
||||
onMounted(()=>{
|
||||
onMounted(() => {
|
||||
// 初始化banners数据
|
||||
getBanners()
|
||||
})
|
||||
@@ -396,16 +441,31 @@ onMounted(()=>{
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
.upload_input {
|
||||
width: 76%;
|
||||
}
|
||||
|
||||
.upload {
|
||||
height: 32px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.upload_btn {
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.film_view {
|
||||
max-width: 100%;
|
||||
display: flex;
|
||||
background: rgba(255,255,255,0.25);
|
||||
background: rgba(255, 255, 255, 0.25);
|
||||
padding: 16px;
|
||||
min-height: 200px;
|
||||
max-height: 200px;
|
||||
border-radius: 10px;
|
||||
margin: 16px 0;
|
||||
}
|
||||
|
||||
.film_view a {
|
||||
flex: 1;
|
||||
border-radius: 8px;
|
||||
@@ -450,14 +510,17 @@ onMounted(()=>{
|
||||
margin-bottom: 2px;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.tags {
|
||||
display: flex;
|
||||
width: 90%;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.tags .tag_c{
|
||||
|
||||
.tags .tag_c {
|
||||
background: rgba(155, 73, 231, 0.72);
|
||||
}
|
||||
|
||||
.tags span {
|
||||
border-radius: 5px;
|
||||
padding: 3px 5px;
|
||||
|
||||
@@ -7,32 +7,32 @@ import {ElementPlusResolver} from "unplugin-vue-components/resolvers";
|
||||
|
||||
export default defineConfig({
|
||||
// 本地测试环境
|
||||
// server: {
|
||||
// host: '0.0.0.0',
|
||||
// port: 3600,
|
||||
// proxy: {
|
||||
// "/api": {
|
||||
// target: `http://127.0.0.1:3601`,
|
||||
// // target: `http://1.94.30.26:3601`,
|
||||
// changeOrigin: true, // 允许跨域
|
||||
// rewrite: path => path.replace(/^\/api/, '')
|
||||
// }
|
||||
// },
|
||||
// },
|
||||
|
||||
// nginx发布构建时使用此配置
|
||||
server: {
|
||||
host: 'localhost',
|
||||
host: '0.0.0.0',
|
||||
port: 3600,
|
||||
proxy: {
|
||||
"/api": {
|
||||
target: `http://localhost`,
|
||||
target: `http://127.0.0.1:3601`,
|
||||
// target: `http://1.94.30.26:3601`,
|
||||
changeOrigin: true, // 允许跨域
|
||||
rewrite: path => path.replace(/^\/api/,'')
|
||||
rewrite: path => path.replace(/^\/api/, '')
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
// nginx发布构建时使用此配置
|
||||
// server: {
|
||||
// host: 'localhost',
|
||||
// port: 3600,
|
||||
// proxy: {
|
||||
// "/api": {
|
||||
// target: `http://localhost`,
|
||||
// changeOrigin: true, // 允许跨域
|
||||
// rewrite: path => path.replace(/^\/api/,'')
|
||||
// }
|
||||
// },
|
||||
// },
|
||||
|
||||
plugins: [
|
||||
vue(),
|
||||
AutoImport({
|
||||
|
||||
@@ -111,12 +111,14 @@ func DirectedSpider(c *gin.Context) {
|
||||
// SingleUpdateSpider 单一影片更新采集
|
||||
func SingleUpdateSpider(c *gin.Context) {
|
||||
// 获取影片对应的唯一标识
|
||||
id := c.Query("id")
|
||||
if id == "" {
|
||||
system.Failed("参数异常, 资源站标识不能为空", c)
|
||||
ids := c.Query("ids")
|
||||
if ids == "" {
|
||||
system.Failed("参数异常, 资源标识ID信息缺失", c)
|
||||
return
|
||||
}
|
||||
// 通过ID对指定影片进行同步更新
|
||||
logic.SL.SyncCollect(ids)
|
||||
system.SuccessOnlyMsg("影片更新任务已成功开启!!!", c)
|
||||
}
|
||||
|
||||
// 校验密码有效性
|
||||
|
||||
@@ -48,6 +48,11 @@ func (sl *SpiderLogic) ZeroCollect(time int) {
|
||||
go spider.StarZero(time)
|
||||
}
|
||||
|
||||
// SyncCollect 同步采集
|
||||
func (sl *SpiderLogic) SyncCollect(ids string) {
|
||||
go spider.CollectSingleFilm(ids)
|
||||
}
|
||||
|
||||
// FilmClassCollect 影视分类采集, 直接覆盖当前分类数据
|
||||
func (sl *SpiderLogic) FilmClassCollect() error {
|
||||
l := system.GetCollectSourceListByGrade(system.MasterCollect)
|
||||
|
||||
@@ -126,7 +126,7 @@ func CollectCategory(s *system.FilmSource) {
|
||||
}
|
||||
}
|
||||
|
||||
// 影视详情采集
|
||||
// collectFilm 影视详情采集 (单一源分页全采集)
|
||||
func collectFilm(s *system.FilmSource, h, pg int) {
|
||||
// 生成请求参数
|
||||
r := util.RequestInfo{Uri: s.Uri, Params: url.Values{}}
|
||||
@@ -163,6 +163,41 @@ func collectFilm(s *system.FilmSource, h, pg int) {
|
||||
}
|
||||
}
|
||||
|
||||
// collectFilmById 采集指定ID的影片信息
|
||||
func collectFilmById(ids string, s *system.FilmSource) {
|
||||
// 生成请求参数
|
||||
r := util.RequestInfo{Uri: s.Uri, Params: url.Values{}}
|
||||
// 设置分页页数
|
||||
r.Params.Set("pg", "1")
|
||||
// 设置影片IDS参数信息
|
||||
r.Params.Set("ids", ids)
|
||||
// 执行采集方法 获取影片详情list
|
||||
list, err := spiderCore.GetFilmDetail(r)
|
||||
if err != nil || len(list) <= 0 {
|
||||
log.Println("GetMovieDetail Error: ", err)
|
||||
return
|
||||
}
|
||||
// 通过采集站 Grade 类型, 执行不同的存储逻辑
|
||||
switch s.Grade {
|
||||
case system.MasterCollect:
|
||||
// 主站点 保存完整影片详情信息到 redis 和 mysql 中
|
||||
if err = system.SaveDetail(list[0]); err != nil {
|
||||
log.Println("SaveDetails Error: ", err)
|
||||
}
|
||||
// 如果主站点开启了图片同步, 则将图片url以及对应的mid存入ZSet集合中
|
||||
if s.SyncPictures {
|
||||
if err = system.SaveVirtualPic(conver.ConvertVirtualPicture(list)); err != nil {
|
||||
log.Println("SaveVirtualPic Error: ", err)
|
||||
}
|
||||
}
|
||||
case system.SlaveCollect:
|
||||
// 附属站点 仅保存影片播放信息到redis
|
||||
if err = system.SaveSitePlayList(s.Id, list); err != nil {
|
||||
log.Println("SaveDetails Error: ", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ConcurrentPageSpider 并发分页采集, 不限类型
|
||||
func ConcurrentPageSpider(capacity int, s *system.FilmSource, h int, collectFunc func(s *system.FilmSource, hour, pageNumber int)) {
|
||||
// 开启协程并发执行
|
||||
@@ -191,7 +226,7 @@ func ConcurrentPageSpider(capacity int, s *system.FilmSource, h int, collectFunc
|
||||
}
|
||||
}()
|
||||
}
|
||||
for i := 0; i < config.MAXGoroutine; i++ {
|
||||
for i := 0; i < GoroutineNum; i++ {
|
||||
<-waitCh
|
||||
}
|
||||
}
|
||||
@@ -229,7 +264,7 @@ func AutoCollect(h int) {
|
||||
}
|
||||
}
|
||||
|
||||
// ClearSpider 删除已采集的影片信息
|
||||
// ClearSpider 删除所有已采集的影片信息
|
||||
func ClearSpider() {
|
||||
system.FilmZero()
|
||||
}
|
||||
@@ -242,6 +277,20 @@ func StarZero(h int) {
|
||||
AutoCollect(h)
|
||||
}
|
||||
|
||||
// CollectSingleFilm 通过影片唯一ID获取影片信息
|
||||
func CollectSingleFilm(ids string) {
|
||||
// 获取采集站列表信息
|
||||
fl := system.GetCollectSourceList()
|
||||
// 循环遍历所有采集站信息
|
||||
for _, f := range fl {
|
||||
// 目前仅对主站点进行处理
|
||||
if f.Grade == system.MasterCollect && f.State {
|
||||
collectFilmById(ids, &f)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ======================================================= 公共方法 =======================================================
|
||||
|
||||
// CollectApiTest 测试采集接口是否可用
|
||||
|
||||
@@ -91,6 +91,7 @@ func SetupRouter() *gin.Engine {
|
||||
spiderRoute.POST(`/start`, controller.StarSpider)
|
||||
spiderRoute.GET(`/zero`, controller.SpiderReset)
|
||||
spiderRoute.GET(`/clear`, controller.ClearAllFilm)
|
||||
spiderRoute.GET(`/update/single`, controller.SingleUpdateSpider)
|
||||
spiderRoute.GET(`/class/cover`, controller.CoverFilmClass)
|
||||
}
|
||||
// filmManage 影视管理
|
||||
|
||||
Reference in New Issue
Block a user