基本正常,未发现恶性bug

This commit is contained in:
lion
2022-07-20 20:02:41 +08:00
commit ed257498c2
8 changed files with 634 additions and 0 deletions
+234
View File
@@ -0,0 +1,234 @@
import vuex from "vuex"
import axios from "axios"
import {ElMessage} from "element-plus"
import qs from "qs"
const base_url = "http://107.189.14.196:8080/TaskHandler/"
const actions = {
update(context){
const AuthCode = context.state.AuthCode
axios.get(base_url, {
params:{
param:"",
type:"all",
AuthCode: AuthCode
}
}).then((res) => {
let temp = []
context.commit("_empty")
JSON.parse(res.data.data).forEach((task) => {
temp.push(JSON.parse(task))
})
context.commit("_update", temp)
})
},
post(context, link){
const AuthCode = context.state.AuthCode
axios.post(base_url, qs.stringify({
AuthCode:AuthCode,
link:link
})).then((res) => {
if(res.data.result === "success")
ElMessage("提交成功")
else{
if(res.data.data)
ElMessage(res.data.data)
else{
ElMessage("提交失败")
}
}
})
},
query(context, link){
const AuthCode = context.state.AuthCode
axios.get(base_url, {
params:{
param:link,
type:'link',
AuthCode
}
}).then((res) => {
if(res.data.result === 'success'){
const gallery = JSON.parse(res.data.data)
let message = "本子名字: " + gallery.name + "<br>"
message += "本子页数: " + gallery.pages + "<br>"
message += "gid: " + gallery.gid + "<br>"
if(gallery.language === "N/A")
message += "语言: 未知<br>"
else
message += "语言: " + gallery.language + "<br>"
message += "大小: " + gallery.fileSize + "<br>"
switch (gallery.status){
case "complete":
message += "状态: 下载完成"
break
case "posted" :
message += "状态: 等待中"
break
case "proceeding":
message += "状态: 下载中"
break
default:
break
}
console.log(gallery)
ElMessage({
dangerouslyUseHTMLString: true,
duration: 5000,
showClose: true,
message
})
}
else
ElMessage("查询失败")
})
},
validate(context, AuthCode){
axios.post(base_url + "validate?AuthCode=" + AuthCode).then((res)=>{
if(res.data.result === 'success'){
context.commit("_authed", AuthCode, context)
context.dispatch("update")
setInterval(() => {
context.dispatch("update")
}, 30000)
}
else{
context.commit("_unAuthed")
}
})
},
searchByLink(context, link){
context.commit("_searchByLink", link)
},
searchByKeyword(context, keyword){
context.commit("_searchByKeyword", keyword)
}
}
const mutations = {
_empty(state){
state.totalTask.splice(0)
},
_update(state, tasks){
const download_url = base_url + "file?link="
tasks.forEach((task) => {
if(task.status === "posted"){
task.progress = "0%"
}
else if(task.status === "downloading"){
task.progress = (Math.round((task.proceeding / task.pages)*100)).toString() + "%"
}
else if(task.status === "complete"){
task.progress = "100%"
task.download = download_url + task.link + "&AuthCode=" + state.AuthCode
}
state.totalTask.push(task)
})
if(state.isAuth && !state.loadComplete){
state.loadComplete = true
ElMessage("加载完成")
}
},
_changePage(state, targetPage){
state.page = targetPage
},
_authed(state, AuthCode){
state.AuthCode = AuthCode
state.isAuth = true
ElMessage("验证成功,加载中")
},
_unAuthed(state){
state.isAuth = false
state.AuthCode = ""
ElMessage("授权码错误")
},
_searchByLink(state, link){
let gid = link.split('/')[4]
if(!gid){
ElMessage("请检查链接输入是否正确")
}
let i = 0
let found = false
for(i=0; i<state.totalTask.length; i++){
if(state.totalTask[i].gid === gid){
state.page = Math.floor(i/state.length) + 1
found = true
break
}
}
if(!found){
ElMessage("未找到此任务")
}
},
_searchByKeyword(state, keyword){
state.searchTask.splice(0)
state.page = 1
state.totalTask.forEach((task) => {
if(task.name.includes(keyword))
state.searchTask.push(task)
})
if(state.searchTask.length === 0){
ElMessage("未找到该关键字的本子")
}
}
}
const state = {
totalTask:[], //存放数据的数组
page:1, //当前页数
length:8, //每页能有多少个链接
isAuth:false, //是否授权
AuthCode:'', //授权码
loadComplete:false, //是否加载完成
isInclude:false, //是否搜索到任务
searchTask:[] //搜索到的任务
}
const getters = {
task(state){
if(state.searchTask.length !== 0)
return state.searchTask.slice((state.page-1)*state.length, state.page*state.length)
if(state.totalTask.length !== 0)
return state.totalTask.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.totalTask.length !== 0){
tasks = state.totalTask
}
if(!tasks)
return 1
max = Math.floor(tasks.length/state.length)
if(tasks.length % state.length !== 0){
max += 1
}
return max
},
isAuth(state){
return state.isAuth
},
page(state){
return state.page
},
loadComplete(state){
return state.loadComplete
}
}
export default new vuex.Store({
actions,
mutations,
state,
getters
})