移动端支持下载人信息与筛选(仅管理员)

- 详情抽屉显示下载人昵称,取不到时回退为 #id
- 任务列表新增「下载人」筛选,选项从当前分类派生,切分类时清空
- 管理员判定改用后端下发的 isAdmin,不再硬编码 userId === 3
This commit is contained in:
2026-09-20 22:54:55 +08:00
parent abb1cdb952
commit 3a39677bb3
5 changed files with 68 additions and 17 deletions
+29 -11
View File
@@ -325,6 +325,8 @@ const mutations = {
state.AuthCode = data.AuthCode
state.userId = data.userId
state.username = data.username
state.isAdmin = Boolean(data.isAdmin)
state.downloaderFilter = null
state.isAuth = true
ElMessage("验证成功,加载中")
},
@@ -402,6 +404,8 @@ const mutations = {
_setCategory(state, category){
state.category = category
state.visiblePages = 1
// 换分类后旧的下载人筛选可能在新分类里根本不存在,先清掉。
state.downloaderFilter = null
confirmCurrentTask(state)
sortTasks(state)
},
@@ -413,6 +417,12 @@ const mutations = {
_setGalleryNameType(state, galleryNameType){
state.galleryNameType = galleryNameType
},
_setDownloaderFilter(state, downloader){
state.downloaderFilter = downloader === null || downloader === undefined
? null
: Number(downloader)
state.visiblePages = 1
},
_setShowNameType(state, type){
if(type === "shortName")
state.length = state.shortLength
@@ -481,23 +491,23 @@ const state = {
sortType:'shortName', //排序类型 shortName name createTime
currentTasks: [], //当前任务
weekUsed: {}, //每周用量
isAdmin: false, //管理员(后端 validate 下发)
downloaderFilter: null, //管理员按下载人筛选,null 表示全部
}
const getters = {
currentTasks(state){
if(state.isSearch)
return state.searchTask.slice((state.page - 1) * state.length, state.page * state.length)
else
return state.currentTasks.slice((state.page - 1) * state.length, state.page * state.length)
const tasks = activeTaskList(state)
return tasks.slice((state.page - 1) * state.length, state.page * state.length)
},
min(){
return 1
},
visibleTasks(state){
return (state.currentTasks || []).slice(0, state.visiblePages * state.length)
return activeTaskList(state).slice(0, state.visiblePages * state.length)
},
taskTotal(state){
return (state.currentTasks || []).length
return activeTaskList(state).length
},
taskRemaining(state, getters){
return Math.max(0, getters.taskTotal - state.visiblePages * state.length)
@@ -507,11 +517,7 @@ const getters = {
},
max(state){
let max = 0
let tasks
if(state.isSearch)
tasks = state.searchTask
else
tasks = state.currentTasks
const tasks = activeTaskList(state)
if(!tasks)
return 1
@@ -531,6 +537,18 @@ export default new vuex.Store({
getters
})
/**
* 当前视图实际要展示的任务。
* 下载人筛选只在管理员生效,作用于「我的下载/收藏/全部」三种分类的结果。
*/
function activeTaskList(state){
if(state.isSearch)
return state.searchTask
if(state.isAdmin && state.downloaderFilter !== null)
return state.currentTasks.filter(task => task.downloader === state.downloaderFilter)
return state.currentTasks
}
function getShortname(name){
if(name === null)
return null