516 lines
18 KiB
JavaScript
516 lines
18 KiB
JavaScript
import vuex from "vuex"
|
|
import axios from "axios"
|
|
import {ElMessage} from "element-plus"
|
|
import qs from "qs"
|
|
import moment from 'moment'
|
|
const BaseUrl = "http://downloader.lionwebsite.xyz/"
|
|
const GalleryManageUrl = BaseUrl + "GalleryManage/"
|
|
const VideoManageUrl = BaseUrl + "VideoManage/"
|
|
|
|
const actions = {
|
|
updateGalleryTasks(context){
|
|
const AuthCode = context.state.AuthCode
|
|
axios.get(GalleryManageUrl, {
|
|
params:{
|
|
param:"",
|
|
type:"all",
|
|
AuthCode
|
|
}
|
|
}).then((res) => {
|
|
context.commit("_emptyGalleryTasks")
|
|
context.commit("_updateGalleryTasks", JSON.parse(res.data.data))
|
|
|
|
})
|
|
},
|
|
updateVideoTasks(context){
|
|
const AuthCode = context.state.AuthCode
|
|
axios.get(VideoManageUrl, {
|
|
params:{
|
|
param:"123",
|
|
type:"all",
|
|
AuthCode
|
|
}
|
|
}).then(res => {
|
|
context.commit("_emptyVideoTasks")
|
|
context.commit("_updateVideoTasks", JSON.parse(res.data.data))
|
|
})
|
|
},
|
|
postGalleryTask(context, data){
|
|
axios.post(GalleryManageUrl, qs.stringify({
|
|
AuthCode:context.state.AuthCode,
|
|
link:data.link,
|
|
targetResolution:data.targetResolution
|
|
})).then((res) => {
|
|
if(res.data.result === "success") {
|
|
ElMessage("提交成功")
|
|
context.commit("_setChosenGallery", {gallery:false, resolution:data.targetResolution})
|
|
}
|
|
else{
|
|
if(res.data.data)
|
|
ElMessage(res.data.data)
|
|
else{
|
|
ElMessage("提交失败")
|
|
}
|
|
}
|
|
})
|
|
},
|
|
postVideoTask(context, data){
|
|
axios.post(VideoManageUrl, qs.stringify({
|
|
AuthCode:context.state.AuthCode,
|
|
link: data.link,
|
|
targetResolution: data.targetResolution
|
|
})).then((res) => {
|
|
if(res.data.result === "success") {
|
|
ElMessage("提交成功")
|
|
context.commit("_setChosenVideo", {video:false, resolution:data.targetResolution})
|
|
}
|
|
else{
|
|
if(res.data.data)
|
|
ElMessage(res.data.data)
|
|
else{
|
|
ElMessage("提交失败")
|
|
}
|
|
}
|
|
})
|
|
},
|
|
queryGalleryTask(context, link){
|
|
const AuthCode = context.state.AuthCode
|
|
axios.get(GalleryManageUrl, {
|
|
params:{
|
|
param:link,
|
|
type:'link',
|
|
AuthCode
|
|
}
|
|
}).then((res) => {
|
|
if(res.data.result === 'success'){
|
|
const gallery = JSON.parse(res.data.data)
|
|
context.commit("_setChosenGallery", {gallery})
|
|
}
|
|
else
|
|
ElMessage("查询失败")
|
|
})
|
|
},
|
|
queryVideoTask(context, link){
|
|
const AuthCode = context.state.AuthCode
|
|
axios.get(VideoManageUrl, {
|
|
params:{
|
|
param: link,
|
|
type:"link",
|
|
AuthCode
|
|
}
|
|
}).then((res) => {
|
|
if(res.data.result === 'success'){
|
|
const video = JSON.parse(res.data.data)
|
|
context.commit("_setChosenVideo", {video})
|
|
}
|
|
else
|
|
ElMessage("查询失败")
|
|
})
|
|
},
|
|
validate(context, AuthCode){
|
|
axios.post(BaseUrl + "validate?AuthCode=" + AuthCode).then((res)=>{
|
|
if(res.data.result === 'success'){
|
|
context.commit("_authed", AuthCode, context)
|
|
context.dispatch("updateGalleryTasks").then()
|
|
context.dispatch("updateVideoTasks").then()
|
|
context.dispatch("loadMaskDomain").then()
|
|
context.dispatch("loadWeekUsedAmount").then()
|
|
setInterval(() => {
|
|
context.dispatch("update").then()
|
|
}, 30000)
|
|
}
|
|
else{
|
|
context.commit("_unAuthed")
|
|
}
|
|
})
|
|
},
|
|
update(context){
|
|
if(context.state.showType === "video")
|
|
context.dispatch("updateVideoTasks").then()
|
|
else
|
|
context.dispatch("updateGalleryTasks").then()
|
|
},
|
|
loadMaskDomain(context){
|
|
axios.get(BaseUrl + "maskDomain").then((res) => {
|
|
if(res.data.result === "success"){
|
|
context.commit("_setMaskDomain", JSON.parse(res.data.data))
|
|
}
|
|
})
|
|
},
|
|
loadWeekUsedAmount(context){
|
|
axios.get(GalleryManageUrl + "weekUsedAmount", {
|
|
params: {
|
|
AuthCode: context.state.AuthCode
|
|
}
|
|
}).then((res) => {
|
|
if(res.data.result === "success"){
|
|
context.state.weekUsed = JSON.parse(res.data.data)
|
|
ElMessage("查询用量成功")
|
|
}else{
|
|
ElMessage("查询用量失败")
|
|
}
|
|
})
|
|
},
|
|
searchByLink(context, link){
|
|
context.commit("_searchByLink", link)
|
|
},
|
|
searchLocalByKeyword(context, keyword){
|
|
context.commit("_searchLocalByKeyword", keyword)
|
|
},
|
|
searchRemoteByKeyword(context, keyword){
|
|
if(context.state.showType === "gallery"){
|
|
axios.get(GalleryManageUrl, {
|
|
params:{
|
|
type:"name",
|
|
param:keyword
|
|
}
|
|
}).then((res) => {
|
|
if(res.data.result === 'success'){
|
|
context.commit("_setChosenGallery", {'gallery':JSON.parse(res.data.data)})
|
|
}
|
|
else{
|
|
ElMessage(res.data.data)
|
|
}
|
|
})
|
|
}
|
|
else{
|
|
axios.get(VideoManageUrl, {
|
|
params:{
|
|
type:"name",
|
|
param:keyword
|
|
}
|
|
}).then((res) => {
|
|
if(res.data.result === 'success'){
|
|
context.commit("_setChosenVideo", {'video': JSON.parse(res.data.data)})
|
|
}
|
|
else{
|
|
ElMessage(res.data.data)
|
|
}
|
|
})
|
|
}
|
|
},
|
|
deleteGallery(context, gid){
|
|
axios.delete(GalleryManageUrl, {
|
|
params:{
|
|
AuthCode:state.AuthCode,
|
|
gid
|
|
}}).then((res) => {
|
|
if(res.data.result === "success"){
|
|
ElMessage("删除成功")
|
|
context.commit("_deleteGallery", gid)
|
|
}
|
|
else{
|
|
ElMessage(res.data.data)
|
|
}
|
|
})
|
|
},
|
|
deleteVideo(context, id){
|
|
axios.delete(VideoManageUrl, {
|
|
params:{
|
|
AuthCode:state.AuthCode,
|
|
id
|
|
}
|
|
}).then((res) => {
|
|
if(res.data.result === "success"){
|
|
ElMessage("删除成功")
|
|
context.commit("_deleteVideo", id)
|
|
}
|
|
else{
|
|
ElMessage(res.data.data)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
const mutations = {
|
|
_emptyGalleryTasks(state){
|
|
state.totalGalleryTask.splice(0)
|
|
},
|
|
_emptyVideoTasks(state){
|
|
state.totalVideoTask.splice(0)
|
|
},
|
|
_updateGalleryTasks(state, tasks){
|
|
tasks.forEach((task) => {
|
|
if(task.name.includes("[")) {
|
|
let name = task.name
|
|
let lastIndex = name.lastIndexOf("[")
|
|
name = name.substring(0, lastIndex)
|
|
while (name.includes("[") && name.includes("]")) {
|
|
let start = name.indexOf("[")
|
|
let end = name.indexOf("]") + 1
|
|
let temp = name.substring(start, end)
|
|
name = name.replace(temp, "")
|
|
}
|
|
while (name.includes("(") && name.includes(")")) {
|
|
let start = name.indexOf("(")
|
|
let end = name.indexOf(")") + 1
|
|
let temp = name.substring(start, end)
|
|
name = name.replace(temp, "")
|
|
}
|
|
task.shortName = name.trim()
|
|
}
|
|
else{
|
|
task.shortName = task.name
|
|
}
|
|
|
|
if(task.status === "已提交"){
|
|
task.progress = "已提交"
|
|
}
|
|
else if(task.status === "下载中"){
|
|
task.progress = (Math.round((task.proceeding / task.pages)*100)).toString() + "%"
|
|
}
|
|
else if(task.status === "下载完成"){
|
|
task.progress = "下载完成"
|
|
let tempLink
|
|
let url = new URL(task.link)
|
|
|
|
state.maskDomain.forEach((mask) => {
|
|
if(url.host === mask['raw'])
|
|
tempLink = task.link.replace(mask['raw'], mask['mask'])
|
|
})
|
|
task.download = GalleryManageUrl + "file/" + encodeURI(task.name) + "?link=" + tempLink + "&AuthCode=" + state.AuthCode
|
|
}
|
|
task.createTimeDisplay = moment(task.createTime * 1000).format("YYYY-MM-DD HH:mm:ss")
|
|
state.totalGalleryTask.push(task)
|
|
})
|
|
state.totalGalleryTask = state.totalGalleryTask.sort((before, after) => {
|
|
if(state.sortType === 'name')
|
|
return before.name > after.name ? 1: -1
|
|
else
|
|
return before.createTime - after.createTime
|
|
})
|
|
if(state.isAuth && !state.loadComplete){
|
|
state.loadComplete = true
|
|
ElMessage("加载完成")
|
|
}
|
|
},
|
|
_updateVideoTasks(state, tasks){
|
|
tasks.forEach((task) => {
|
|
task.progress = task.status
|
|
if(task.status === "下载完成"){
|
|
let tempLink
|
|
let url = new URL(task.link)
|
|
|
|
state.maskDomain.forEach((mask) => {
|
|
if(url.host === mask['raw'])
|
|
tempLink = task.link.replace(mask['raw'], mask['mask'])
|
|
})
|
|
task.download = VideoManageUrl + "file/" + encodeURI(task.name) + "?link=" + tempLink + "&AuthCode=" + state.AuthCode
|
|
task.createTimeDisplay = moment(task.createTime * 1000).format("YYYY-MM-DD HH:mm:ss")
|
|
}
|
|
state.totalVideoTask.push(task)
|
|
})
|
|
state.totalVideoTask = state.totalVideoTask.sort((before, after) => {
|
|
if(state.sortType === 'name')
|
|
return before.name > after.name ? 1: -1
|
|
else
|
|
return before.createTime - after.createTime
|
|
})
|
|
},
|
|
_changePage(state, targetPage){
|
|
state.page = targetPage
|
|
},
|
|
_authed(state, AuthCode){
|
|
state.AuthCode = AuthCode
|
|
state.isAuth = true
|
|
ElMessage("验证成功,加载中")
|
|
},
|
|
_unAuthed(state){
|
|
state.isAuth = false
|
|
state.AuthCode = ""
|
|
ElMessage("授权码错误")
|
|
localStorage.removeItem("auth")
|
|
},
|
|
_searchByLink(state, link){
|
|
let tasks
|
|
if(state.showType === "gallery") {
|
|
tasks = state.totalGalleryTask
|
|
}
|
|
else
|
|
tasks = state.totalVideoTask
|
|
let i = 0
|
|
let found = false
|
|
for (i = 0; i < tasks.length; i++) {
|
|
if (tasks[i].link === link) {
|
|
state.page = Math.floor(i / state.length) + 1
|
|
found = true
|
|
break
|
|
}
|
|
}
|
|
if(!found){
|
|
ElMessage("未找到此任务")
|
|
}
|
|
else{
|
|
ElMessage("已跳转到该任务所在页数")
|
|
}
|
|
},
|
|
_searchLocalByKeyword(state, keyword){
|
|
state.searchTask.splice(0)
|
|
if(keyword.trim() !== '') {
|
|
state.page = 1
|
|
let tasks
|
|
if (state.showType === "video")
|
|
tasks = state.totalVideoTask
|
|
else
|
|
tasks = state.totalGalleryTask
|
|
tasks.forEach((task) => {
|
|
if (task.name.includes(keyword))
|
|
state.searchTask.push(task)
|
|
})
|
|
if (state.searchTask.length === 0) {
|
|
ElMessage("未找到该关键字的任务")
|
|
}
|
|
}
|
|
},
|
|
_deleteGallery(state, gid){
|
|
state.totalGalleryTask.forEach((item, index, arr) => {
|
|
if(item.gid === gid){
|
|
arr.splice(index, 1)
|
|
}
|
|
})
|
|
},
|
|
_deleteVideo(state, id){
|
|
state.totalVideoTask.forEach((item, index, arr) => {
|
|
if(item.id === id)
|
|
arr.splice(index, 1)
|
|
})
|
|
},
|
|
_setChosenGallery(state,data){
|
|
if(data.gallery === false) {
|
|
state.chosenGallery.resolution = data.resolution
|
|
state.chosenGallery.fileSize = "等待下载完成后再查看"
|
|
state.chosenGallery.createTimeDisplay = "等待下载完成后再查看"
|
|
state.chosenGallery.progress = "已提交"
|
|
state.totalGalleryTask.push(state.chosenGallery)
|
|
}
|
|
state.chosenGallery = data.gallery
|
|
},
|
|
_setChosenVideo(state,data){
|
|
if(data.video === false) {
|
|
state.chosenVideo.resolution = data.resolution
|
|
state.chosenVideo.fileSize = "下载完成后再查看"
|
|
state.chosenVideo.duration = "下载完成后再查看"
|
|
state.chosenVideo.createTimeDisplay = "下载完成后再查看"
|
|
state.chosenVideo.progress = "已提交"
|
|
state.totalVideoTask.push(state.chosenVideo)
|
|
}
|
|
state.chosenVideo = data.video
|
|
},
|
|
_setShowType(state, showType){
|
|
state.showType = showType
|
|
},
|
|
_setSortType(state, sortType){
|
|
state.sortType = sortType
|
|
switch (sortType) {
|
|
case "fullName":
|
|
state.totalGalleryTask = state.totalGalleryTask.sort((before, after) => {
|
|
return before.name > after.name ? 1: -1
|
|
})
|
|
state.totalVideoTask = state.totalVideoTask.sort((before, after) => {
|
|
return before.name > after.name ? 1: -1
|
|
})
|
|
break
|
|
case "shortName":
|
|
state.totalGalleryTask = state.totalGalleryTask.sort((before, after) => {
|
|
return before.shortName > after.shortName ? 1: -1
|
|
})
|
|
break
|
|
case "createTime":
|
|
state.totalGalleryTask = state.totalGalleryTask.sort((before, after) => {
|
|
return before.createTime - after.createTime
|
|
})
|
|
state.totalVideoTask = state.totalVideoTask.sort((before, after) => {
|
|
return before.createTime - after.createTime
|
|
})
|
|
}
|
|
},
|
|
_setShowNameType(state, type){
|
|
if(type === "shortName")
|
|
state.length = state.shortLength
|
|
else
|
|
state.length = state.defaultLength
|
|
},
|
|
_setMaskDomain(state, maskDomain){
|
|
state.maskDomain = maskDomain
|
|
},
|
|
_changeThumbnailGallery(state, gallery){
|
|
state.thumbnailGallery = gallery
|
|
state.thumbnailGallery.url = GalleryManageUrl + "thumbnail/" + encodeURIComponent(gallery.name) + ".webp?AuthCode="+state.AuthCode
|
|
}
|
|
}
|
|
|
|
const state = {
|
|
totalGalleryTask:[], //存放本子数据的数组
|
|
chosenGallery:false, //准备下载的本子
|
|
thumbnailGallery:{},
|
|
|
|
totalVideoTask:[], //存放视频数据的数组
|
|
chosenVideo:false, //准备下载的视频
|
|
|
|
page:1, //当前页数
|
|
length:10, //每页能有多少个链接
|
|
defaultLength:7, //默认个数
|
|
shortLength:10, //简洁个数
|
|
|
|
isAuth:false, //是否授权
|
|
AuthCode:'', //授权码
|
|
loadComplete:false, //是否加载完成
|
|
|
|
isInclude:false, //是否搜索到任务
|
|
searchTask:[], //搜索到的任务
|
|
showHistory:'', //是否打开面板
|
|
showType:'gallery', //展示类型
|
|
sortType:'name', //排序类型
|
|
weekUsed:{}, //每周用量
|
|
|
|
maskDomain:[] //伪装域名
|
|
}
|
|
|
|
const getters = {
|
|
galleryTasks(state){
|
|
if(state.searchTask.length !== 0)
|
|
return state.searchTask.slice((state.page-1)*state.length, state.page*state.length)
|
|
if(state.totalGalleryTask.length !== 0)
|
|
return state.totalGalleryTask.slice((state.page-1)*state.length, state.page*state.length)
|
|
return null
|
|
},
|
|
videoTasks(state){
|
|
if(state.searchTask.length !== 0)
|
|
return state.searchTask.slice((state.page-1)*state.length, state.page*state.length)
|
|
if(state.totalVideoTask.length !== 0)
|
|
return state.totalVideoTask.slice((state.page-1)*state.length, state.page*state.length)
|
|
return null
|
|
},
|
|
min(){
|
|
return 1
|
|
},
|
|
max(state){
|
|
let max = 0
|
|
let tasks
|
|
if(state.searchTask.length !== 0){
|
|
tasks = state.searchTask
|
|
}
|
|
else if(state.showType === "gallery")
|
|
if(state.totalGalleryTask.length !== 0)
|
|
tasks = state.totalGalleryTask
|
|
else if(state.showType === "video")
|
|
if(state.totalVideoTask.length)
|
|
tasks = state.totalVideoTask
|
|
if(!tasks)
|
|
return 1
|
|
max = Math.floor(tasks.length/state.length)
|
|
if(tasks.length % state.length !== 0){
|
|
max += 1
|
|
}
|
|
return max
|
|
}
|
|
}
|
|
|
|
export default new vuex.Store({
|
|
actions,
|
|
mutations,
|
|
state,
|
|
getters
|
|
})
|
|
|