mirror of
https://github.com/fumiama/paper-manager.git
synced 2026-06-12 12:10:25 +08:00
101 lines
2.8 KiB
TypeScript
101 lines
2.8 KiB
TypeScript
import { reactive } from 'vue'
|
|
import { getFileList, getFilePercent } from '/@/api/page'
|
|
import { getFileListModel } from '/@/api/page/model/fileListModel'
|
|
|
|
const random = (min: number, max: number) => Math.floor(Math.random() * (max - min + 1) + min)
|
|
|
|
export function refreshFilePercent(arr: any[], i: number) {
|
|
return async () => {
|
|
const p = await getFilePercent(arr[i].id)
|
|
arr[i].percent = p.percent
|
|
if (p.percent < 100) {
|
|
setTimeout(refreshFilePercent(arr, i), 1000)
|
|
}
|
|
}
|
|
}
|
|
|
|
export function getListOfPage(pageSize: number, page: number): any[] {
|
|
const i = page - 1
|
|
let lst: any[] = []
|
|
if (i < cardList._cardList.length / pageSize)
|
|
lst = reactive(cardList._cardList.slice(i * pageSize, page * pageSize))
|
|
else lst = reactive(cardList._cardList.slice((cardList._cardList.length / pageSize) * pageSize))
|
|
for (let i = 0; i < lst.length; i++) {
|
|
if (!lst[i].hassettimeout && lst[i].percent > 0 && lst[i].percent < 100) {
|
|
setTimeout(refreshFilePercent(lst, i), 1000 + random(0, 1000))
|
|
lst[i].hassettimeout = true
|
|
}
|
|
}
|
|
return lst
|
|
}
|
|
|
|
async function refreshFileList() {
|
|
const __cardList: any[] = []
|
|
const lst = (await getFileList()) as getFileListModel
|
|
let __totalSize = 0
|
|
let __totalQuestions = 0
|
|
for (let i = 0; i < lst.length; i++) {
|
|
__cardList.push({
|
|
id: lst[i].id,
|
|
title: lst[i].title,
|
|
description: lst[i].description,
|
|
size: lst[i].size,
|
|
questions: lst[i].questions,
|
|
datetime: lst[i].datetime,
|
|
icon: 'bi:filetype-docx',
|
|
color: '#1890ff',
|
|
author: lst[i].author,
|
|
percent: lst[i].percent,
|
|
hassettimeout: false,
|
|
delloading: false,
|
|
})
|
|
__totalSize += lst[i].size
|
|
__totalQuestions += lst[i].questions
|
|
}
|
|
return {
|
|
_cardList: __cardList,
|
|
_totalSize: __totalSize,
|
|
_totalQuestions: __totalQuestions,
|
|
}
|
|
}
|
|
|
|
export let cardList = reactive(await refreshFileList())
|
|
|
|
export let pagination = reactive({
|
|
current: 1,
|
|
total: cardList._cardList.length,
|
|
show: true,
|
|
pageSize: 10,
|
|
onChange: function (page: number, pageSize: number) {
|
|
this.current = page
|
|
this.pageSize = pageSize
|
|
},
|
|
})
|
|
|
|
export function refreshCardList() {
|
|
refreshFileList().then((value) => {
|
|
cardList = reactive(value)
|
|
pagination = reactive({
|
|
current: 1,
|
|
total: cardList._cardList.length,
|
|
show: true,
|
|
pageSize: 10,
|
|
onChange: function (page: number, pageSize: number) {
|
|
this.current = page
|
|
this.pageSize = pageSize
|
|
},
|
|
})
|
|
})
|
|
}
|
|
|
|
export function deleteFileByID(id: number) {
|
|
cardList._cardList.map((value: any, index: number) => {
|
|
if (value.id == id) {
|
|
cardList._cardList.splice(index, 1)
|
|
cardList._totalSize -= value.size
|
|
cardList._totalQuestions -= value.questions
|
|
pagination.total = cardList._cardList.length
|
|
}
|
|
})
|
|
}
|