新增简洁名字(仅限本子),大幅度优化手机端体验,可选择显示全名以及简称,切换时每页的本子数会变化。排序新增简洁名字排序,并且与显示绑定。优化代码结构,去除部分无用代码。修复查找任务bug(同步更新) 更新vite至3.x

This commit is contained in:
chuzhongzai 2022-11-14 23:04:15 +08:00
parent 3daff3b8fc
commit 0eb89e98e2
4 changed files with 164 additions and 133 deletions

View File

@ -1,3 +1,8 @@
<script setup>
import Side from "./components/Side.vue";
import DashBoard from "./components/DashBoard.vue";
</script>
<template> <template>
<div class="app"> <div class="app">
<el-container> <el-container>
@ -11,16 +16,6 @@
</div> </div>
</template> </template>
<script>
import Side from "./components/Side.vue";
import DashBoard from "./components/DashBoard.vue";
export default {
name: 'App',
components:{Side, DashBoard}
}
</script>
<style> <style>
.app{ .app{
background-color: #c6e2ff; background-color: #c6e2ff;

View File

@ -29,7 +29,7 @@
<tr v-if="chosenGallery.availableResolution"> <tr v-if="chosenGallery.availableResolution">
目标分辨率:<el-select v-model="targetResolution"> 目标分辨率:<el-select v-model="targetResolution">
<el-option v-for="(fileSize, resolution) in chosenGallery.availableResolution" :value="resolution" <el-option v-for="(fileSize, resolution) in chosenGallery.availableResolution" :value="resolution"
:label="modify(resolution, fileSize)"> :label="resolution + ' ' + fileSize">
</el-option> </el-option>
</el-select> </el-select>
</tr> </tr>
@ -80,12 +80,12 @@ import {ElMessage} from "element-plus"
export default { export default {
name: "DashBoard", name: "DashBoard",
setup(){ setup(){
const link = ref("") let AuthCode = ref("")
const AuthCode = ref("") let isRemember = ref(false)
const keyword = ref("") let keyword = ref("")
const isRemember = ref(false) let link = ref("")
const targetResolution = ref("") let showTips = ref(false)
const showTips = ref(false) let targetResolution = ref("")
let chosenGallery = computed(() => { let chosenGallery = computed(() => {
return store.state.chosenGallery return store.state.chosenGallery
@ -95,14 +95,14 @@ export default {
return store.state.chosenVideo return store.state.chosenVideo
}) })
let maskDomain = computed(() => {
return store.state.maskDomain
})
let loadComplete = computed(() => { let loadComplete = computed(() => {
return store.state.loadComplete return store.state.loadComplete
}) })
let maskDomain = computed(() => {
return store.state.maskDomain
})
let weekUsed = computed(() => { let weekUsed = computed(() => {
return store.state.weekUsed return store.state.weekUsed
}) })
@ -111,10 +111,6 @@ export default {
store.dispatch("loadWeekUsedAmount") store.dispatch("loadWeekUsedAmount")
} }
function modify(str1, str2){
return str1 + " " + str2
}
function postTask(){ function postTask(){
if(!validateLink(link.value)){ if(!validateLink(link.value)){
ElMessage("链接错误") ElMessage("链接错误")
@ -170,6 +166,29 @@ export default {
} }
} }
function validateLink(rawLink){
if(rawLink.trim() === "")
return false
if(rawLink.includes("hentai")){
return rawLink.includes("/g/")
}
else if(rawLink.includes("xvideos.com")){
return true
}
else if(rawLink.includes("pornhub.com")){
return rawLink.includes("view_video.php")
}
}
function coverLink(rawLink){
let url = new URL(rawLink)
maskDomain.value.forEach((mask) => {
if(url.host === mask['raw'])
rawLink = rawLink.replace(mask['raw'], mask['mask'])
})
return rawLink;
}
function searchByLink() { function searchByLink() {
if(!validateLink(link.value)){ if(!validateLink(link.value)){
ElMessage("请检查输入的链接") ElMessage("请检查输入的链接")
@ -188,29 +207,6 @@ export default {
store.dispatch("searchRemoteByKeyword", keyword.value) store.dispatch("searchRemoteByKeyword", keyword.value)
} }
function coverLink(rawLink){
let url = new URL(rawLink)
maskDomain.value.forEach((mask) => {
if(url.host === mask['raw'])
rawLink = rawLink.replace(mask['raw'], mask['mask'])
})
return rawLink;
}
function validateLink(rawLink){
if(rawLink.trim() === "")
return false
if(rawLink.includes("hentai")){
return rawLink.includes("/g/")
}
else if(rawLink.includes("xvideos.com")){
return true
}
else if(rawLink.includes("pornhub.com")){
return rawLink.includes("view_video.php")
}
}
function onlineGalleryReader(name){ function onlineGalleryReader(name){
window.open("http://zfile.lionwebsite.xyz/1/gallery/" + encodeURI(name)) window.open("http://zfile.lionwebsite.xyz/1/gallery/" + encodeURI(name))
} }
@ -222,7 +218,7 @@ export default {
} }
}) })
return {postTask, queryTask, validate, searchByLink, searchLocalByKeyword, searchRemoteByKeyword, modify, return {postTask, queryTask, validate, searchByLink, searchLocalByKeyword, searchRemoteByKeyword,
queryWeekUsedAmount, deleteVideo, deleteGallery, onlineGalleryReader, queryWeekUsedAmount, deleteVideo, deleteGallery, onlineGalleryReader,
link, loadComplete, AuthCode, keyword, isRemember, chosenGallery, chosenVideo, targetResolution, weekUsed, link, loadComplete, AuthCode, keyword, isRemember, chosenGallery, chosenVideo, targetResolution, weekUsed,
showTips, showTips,

View File

@ -18,16 +18,16 @@
<el-table-column label="名字" width="300"> <el-table-column label="名字" width="300">
<template #default="scoped"> <template #default="scoped">
{{scoped.row.name}} {{showNameType === 'shortName' ? scoped.row.shortName: scoped.row.name}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="250"> <el-table-column label="操作" width="250">
<template #default="scoped"> <template #default="scoped">
<span> <span>
<el-button @click="downloadTask(scoped.row.download)" :disabled="operational(scoped.row.download)">下载</el-button> <el-button @click="downloadTask(scoped.row.download)" :disabled="scoped.row.download === undefined">下载</el-button>
<el-button @click="deleteGallery(scoped.row.gid)" :disabled="operational(scoped.row.download)">删除</el-button> <el-button @click="deleteGallery(scoped.row.gid)" :disabled="scoped.row.download === undefined">删除</el-button>
<el-button @click="onlineGalleryReader(scoped.row.name)" :disabled="operational(scoped.row.download)">在线看</el-button> <el-button @click="onlineGalleryReader(scoped.row.name)" :disabled="scoped.row.download === undefined">在线看</el-button>
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
@ -60,9 +60,9 @@
<el-table-column label="操作" width="250"> <el-table-column label="操作" width="250">
<template #default="scoped"> <template #default="scoped">
<span> <span>
<el-button @click="downloadTask(scoped.row.download)" :disabled="operational(scoped.row.download)">下载</el-button> <el-button @click="downloadTask(scoped.row.download)" :disabled="scoped.row.download === undefined">下载</el-button>
<el-button @click="deleteVideo(scoped.row.id)" :disabled="operational(scoped.row.download)">删除</el-button> <el-button @click="deleteVideo(scoped.row.id)" :disabled="scoped.row.download === undefined">删除</el-button>
<el-button @click="onlineVideoViewer()" :disabled="operational(scoped.row.download)">在线看</el-button> <el-button @click="onlineVideoViewer()" :disabled="scoped.row.download === undefined">在线看</el-button>
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
@ -77,8 +77,13 @@
<el-row class="pageChanger"> <el-row class="pageChanger">
<el-col> <el-col>
排列顺序:<el-select v-model="sortType" @change="changeSortType"> 排列顺序:<el-select v-model="sortType" @change="changeSortType">
<el-option value="name" label="名字"></el-option> <el-option value="fullName" label="名字"></el-option>
<el-option value="time" label="任务创建时间"></el-option> <el-option value="shortName" label="简洁名字"></el-option>
<el-option value="createTime" label="任务创建时间"></el-option>
</el-select>
显示:<el-select v-model="showNameType" @change="changeShowNameType">
<el-option value="fullName" label="名字"></el-option>
<el-option value="shortName" label="简洁名字"></el-option>
</el-select> </el-select>
</el-col> </el-col>
<el-col> <el-col>
@ -87,10 +92,10 @@
<el-input v-model="targetPage" <el-input v-model="targetPage"
@change="changePage" @change="changePage"
v-show="isEditing" v-show="isEditing"
@blur="reverse()" @blur="reverseEditMode"
class="page" class="page"
ref="inputNode"></el-input> ref="inputNode"></el-input>
<span @click="reverse" v-show="!isEditing" class="page">{{page}}</span> <span @click="reverseEditMode" v-show="!isEditing" class="page">{{page}}</span>
<el-button @click="next">+</el-button> <el-button @click="next">+</el-button>
<el-button @click="toMax">{{max}}</el-button> <el-button @click="toMax">{{max}}</el-button>
</el-col> </el-col>
@ -109,13 +114,16 @@ import {computed, ref} from "vue";
export default { export default {
name: "Side", name: "Side",
setup(){ setup(){
const targetPage = ref(1)
const isEditing = ref(false)
let inputNode = ref(null) let inputNode = ref(null)
let showType = ref("gallery") let isEditing = ref(false)
let sortType = ref("name") let showNameType = ref("shortName") // shortName fullName
let showType = ref("gallery") // gallery video
let sortType = ref("shortName") // shortName fullName createTime
let targetPage = ref(1)
let loadComplete = computed(() => {
return store.state.loadComplete
})
let galleryTasks = computed(() => { let galleryTasks = computed(() => {
if(store.getters.galleryTasks) if(store.getters.galleryTasks)
@ -154,10 +162,6 @@ export default {
return store.state.page return store.state.page
}) })
let loadComplete = computed(() => {
return store.state.loadComplete
})
function next() { function next() {
if(targetPage.value < max.value) { if(targetPage.value < max.value) {
targetPage.value++ targetPage.value++
@ -182,13 +186,41 @@ export default {
targetPage.value = min.value targetPage.value = min.value
} }
function changePage(){ function changePage(){
if(targetPage.value >= min.value && targetPage.value <= max.value) if(targetPage.value >= min.value && targetPage.value <= max.value)
store.commit("_changePage", targetPage.value) store.commit("_changePage", targetPage.value)
} }
function reverse(){ function changeShowType(){
if(isShowVideoHistory.value){
store.commit("_setShowType", "gallery")
showType.value = "gallery"
}
else{
store.commit("_setShowType", "video")
showType.value = "video"
}
}
function changeShowNameType(){
store.commit("_setShowNameType", showNameType.value)
if(showNameType.value !== sortType.value){
store.commit("_setSortType", showNameType.value)
sortType.value = showNameType.value
}
}
function changeSortType(){
store.commit("_setSortType", sortType.value)
if(sortType.value !== showNameType.value && sortType.value !== "createTime") {
store.commit("_setShowNameType", sortType.value)
showNameType.value = sortType.value
}
}
function reverseEditMode(){
isEditing.value = !isEditing.value isEditing.value = !isEditing.value
if(isEditing){ if(isEditing){
inputNode.value.focus() inputNode.value.focus()
@ -216,30 +248,10 @@ export default {
window.open("http://zfile.lionwebsite.xyz/1/video/") window.open("http://zfile.lionwebsite.xyz/1/video/")
} }
function changeShowType(){
if(isShowVideoHistory.value){
store.commit("_setShowType", "gallery")
showType.value = "gallery"
}
else{
store.commit("_setShowType", "video")
showType.value = "video"
}
}
function changeSortType(sortType){
store.commit("_setSortType", sortType)
}
function operational(download){
return download === undefined
}
return {galleryTasks, videoTasks, min, max, targetPage, loadComplete, page, isEditing, inputNode, isShowVideoHistory, return {galleryTasks, videoTasks, min, max, targetPage, loadComplete, page, isEditing, inputNode, isShowVideoHistory,
isShowGalleryHistory, showType, sortType, isShowGalleryHistory, showType, showNameType, sortType,
reverse, changePage, changeShowType, changeSortType, toMax, toMin, previous, next, downloadTask, deleteGallery, reverseEditMode, changePage, changeShowType, changeShowNameType, changeSortType, toMax, toMin, previous, next, downloadTask, deleteGallery,
deleteVideo, onlineGalleryReader, onlineVideoViewer, operational, deleteVideo, onlineGalleryReader, onlineVideoViewer,
store store
} }
} }
@ -257,7 +269,6 @@ export default {
.pageChanger{ .pageChanger{
position: absolute; position: absolute;
top: 85vh; top: 85vh;
left: 75px;
} }
.page{ .page{
display: inline-block; display: inline-block;

View File

@ -17,12 +17,8 @@ const actions = {
AuthCode AuthCode
} }
}).then((res) => { }).then((res) => {
let temp = []
context.commit("_emptyGalleryTasks") context.commit("_emptyGalleryTasks")
JSON.parse(res.data.data).forEach((task) => { context.commit("_updateGalleryTasks", JSON.parse(res.data.data))
temp.push(task)
})
context.commit("_updateGalleryTasks", temp)
}) })
}, },
@ -35,12 +31,8 @@ const actions = {
AuthCode AuthCode
} }
}).then(res => { }).then(res => {
let temp = []
context.commit("_emptyVideoTasks") context.commit("_emptyVideoTasks")
JSON.parse(res.data.data).forEach(task => { context.commit("_updateVideoTasks", JSON.parse(res.data.data))
temp.push(task)
})
context.commit("_updateVideoTasks", temp)
}) })
}, },
postGalleryTask(context, data){ postGalleryTask(context, data){
@ -239,6 +231,23 @@ const mutations = {
}, },
_updateGalleryTasks(state, tasks){ _updateGalleryTasks(state, tasks){
tasks.forEach((task) => { tasks.forEach((task) => {
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()
if(task.status === "已提交"){ if(task.status === "已提交"){
task.progress = "已提交" task.progress = "已提交"
} }
@ -332,18 +341,20 @@ const mutations = {
}, },
_searchLocalByKeyword(state, keyword){ _searchLocalByKeyword(state, keyword){
state.searchTask.splice(0) state.searchTask.splice(0)
state.page = 1 if(keyword.trim() !== '') {
let tasks state.page = 1
if(state.showType === "video") let tasks
tasks = state.totalVideoTask if (state.showType === "video")
else tasks = state.totalVideoTask
tasks = state.totalGalleryTask else
tasks.forEach((task) => { tasks = state.totalGalleryTask
if(task.name.includes(keyword)) tasks.forEach((task) => {
state.searchTask.push(task) if (task.name.includes(keyword))
}) state.searchTask.push(task)
if(state.searchTask.length === 0){ })
ElMessage("未找到该关键字的任务") if (state.searchTask.length === 0) {
ElMessage("未找到该关键字的任务")
}
} }
}, },
_deleteGallery(state, gid){ _deleteGallery(state, gid){
@ -385,18 +396,34 @@ const mutations = {
}, },
_setSortType(state, sortType){ _setSortType(state, sortType){
state.sortType = sortType state.sortType = sortType
state.totalGalleryTask = state.totalGalleryTask.sort((before, after) => { switch (sortType) {
if(sortType === 'name') case "fullName":
return before.name > after.name ? 1: -1 state.totalGalleryTask = state.totalGalleryTask.sort((before, after) => {
else return before.name > after.name ? 1: -1
return before.createTime - after.createTime })
}) state.totalVideoTask = state.totalVideoTask.sort((before, after) => {
state.totalVideoTask = state.totalVideoTask.sort((before, after) => { return before.name > after.name ? 1: -1
if(sortType === 'name') })
return before.name > after.name ? 1: -1 break
else case "shortName":
return before.createTime - after.createTime 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){ _setMaskDomain(state, maskDomain){
state.maskDomain = maskDomain state.maskDomain = maskDomain
@ -411,7 +438,9 @@ const state = {
chosenVideo:false, //准备下载的视频 chosenVideo:false, //准备下载的视频
page:1, //当前页数 page:1, //当前页数
length:8, //每页能有多少个链接 length:7, //每页能有多少个链接
defaultLength:7, //默认个数
shortLength:10, //简洁个数
isAuth:false, //是否授权 isAuth:false, //是否授权
AuthCode:'', //授权码 AuthCode:'', //授权码
@ -422,9 +451,9 @@ const state = {
showHistory:'', //是否打开面板 showHistory:'', //是否打开面板
showType:'gallery', //展示类型 showType:'gallery', //展示类型
sortType:'name', //排序类型 sortType:'name', //排序类型
weekUsed:{}, weekUsed:{}, //每周用量
maskDomain:[] maskDomain:[] //伪装域名
} }
const getters = { const getters = {