移动端下载器改版:重构为底部三标签的信息架构
- 以 TabBar + 三个视图(任务/搜索/设置)替换原有 DashBoard/Side/HentaiSearch 单页结构 - 拆分 TaskView / TaskRow / TaskDetailSheet / SearchView / SettingsView / AuthScreen - 统一 theme.css 视觉规范,补 AppIcon 与缩略图工具 thumbnail.js 及其单测 - 提交弹层默认选中最高可用分辨率,缩略图加载失败走占位 - E站搜索结果与远端抽屉补回「在线看」入口
This commit is contained in:
+44
-3
@@ -311,6 +311,16 @@ const mutations = {
|
||||
_changePage(state, targetPage){
|
||||
state.page = targetPage
|
||||
},
|
||||
_setActiveTab(state, tab){
|
||||
state.activeTab = tab
|
||||
},
|
||||
_setDetailGallery(state, gallery){
|
||||
state.detailGallery = gallery
|
||||
},
|
||||
// The mobile list grows in place instead of paging through a footer control.
|
||||
_showMoreTasks(state){
|
||||
state.visiblePages += 1
|
||||
},
|
||||
_authed(state, data){
|
||||
state.AuthCode = data.AuthCode
|
||||
state.userId = data.userId
|
||||
@@ -329,12 +339,14 @@ const mutations = {
|
||||
_searchLocalByLink(state, link){
|
||||
let tasks = state.currentTasks
|
||||
let gid = link.split("/")[4]
|
||||
let matched = null
|
||||
let name = null
|
||||
|
||||
if(gid === undefined)
|
||||
for (let i = 0; i < tasks.length; i++) {
|
||||
if (tasks[i].link === link) {
|
||||
state.page = Math.floor(i / state.length) + 1
|
||||
matched = tasks[i]
|
||||
name = tasks[i].name
|
||||
break
|
||||
}
|
||||
@@ -342,19 +354,27 @@ const mutations = {
|
||||
else for (let i = 0; i < tasks.length; i++)
|
||||
if (String(tasks[i].gid) === gid) {
|
||||
state.page = Math.floor(i / state.length) + 1
|
||||
matched = tasks[i]
|
||||
name = state.sortType === "shortName" ? tasks[i].shortName: tasks[i].name
|
||||
break
|
||||
}
|
||||
|
||||
if(!name)
|
||||
ElMessage("未找到此任务")
|
||||
else
|
||||
else {
|
||||
state.searchTask.splice(0)
|
||||
if(matched)
|
||||
state.searchTask.push(matched)
|
||||
state.isSearch = true
|
||||
state.visiblePages = 1
|
||||
ElMessage("已跳转到该任务所在页数,任务名:" + name)
|
||||
}
|
||||
},
|
||||
_searchLocalByKeyword(state, keyword){
|
||||
state.searchTask.splice(0)
|
||||
if(keyword.trim() !== '') {
|
||||
state.page = 1
|
||||
state.visiblePages = 1
|
||||
let tasks = state.currentTasks
|
||||
tasks.forEach((task) => {
|
||||
if (task.name.includes(keyword))
|
||||
@@ -381,11 +401,13 @@ const mutations = {
|
||||
},
|
||||
_setCategory(state, category){
|
||||
state.category = category
|
||||
state.visiblePages = 1
|
||||
confirmCurrentTask(state)
|
||||
sortTasks(state)
|
||||
},
|
||||
_setSortType(state, sortType){
|
||||
state.sortType = sortType
|
||||
state.visiblePages = 1
|
||||
sortTasks(state)
|
||||
},
|
||||
_setGalleryNameType(state, galleryNameType){
|
||||
@@ -451,6 +473,9 @@ const state = {
|
||||
isInclude: false, //是否搜索到任务
|
||||
searchTask: [], //搜索到的任务
|
||||
isShowHistory: false, //是否打开面板
|
||||
activeTab: 'tasks', //移动端底部标签 tasks search settings
|
||||
detailGallery: null, //详情抽屉里正在看的任务
|
||||
visiblePages: 1, //列表已展开的页数,用于“继续加载”
|
||||
galleryNameType: 'shortName', //名字类型 shortName name
|
||||
category: 'myDownload', //分类 myDownload myCollect total
|
||||
sortType:'shortName', //排序类型 shortName name createTime
|
||||
@@ -468,6 +493,18 @@ const getters = {
|
||||
min(){
|
||||
return 1
|
||||
},
|
||||
visibleTasks(state){
|
||||
return (state.currentTasks || []).slice(0, state.visiblePages * state.length)
|
||||
},
|
||||
taskTotal(state){
|
||||
return (state.currentTasks || []).length
|
||||
},
|
||||
taskRemaining(state, getters){
|
||||
return Math.max(0, getters.taskTotal - state.visiblePages * state.length)
|
||||
},
|
||||
searchResults(state){
|
||||
return (state.searchTask || []).slice(0, state.visiblePages * state.length)
|
||||
},
|
||||
max(state){
|
||||
let max = 0
|
||||
let tasks
|
||||
@@ -500,8 +537,12 @@ function getShortname(name){
|
||||
if (!name.includes("[")) return name
|
||||
|
||||
// 截取最后一个 [ 之前的部分,然后移除所有 [...] 和 (...) 标签
|
||||
name = name.substring(0, name.lastIndexOf("["))
|
||||
return name.replace(/\s*\[[^\]]*\]\s*/g, '').replace(/\s*\([^\)]*\)\s*/g, '').trim()
|
||||
const trimmed = name.substring(0, name.lastIndexOf("["))
|
||||
.replace(/\s*\[[^\]]*\]\s*/g, '')
|
||||
.replace(/\s*\([^\)]*\)\s*/g, '')
|
||||
.trim()
|
||||
// 名字以 [...] 开头时截取结果为空,退回原名避免整列空白
|
||||
return trimmed === '' ? name.trim() : trimmed
|
||||
}
|
||||
|
||||
function buildGalleryDownloadUrl(gid, AuthCode){
|
||||
|
||||
Reference in New Issue
Block a user