Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
download-web
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
downloader
download-web
Commits
bd08d501
Commit
bd08d501
authored
Sep 01, 2025
by
焦子成
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
a2c01127
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
250 additions
and
128 deletions
+250
-128
src/api/api.js
+1
-0
src/stores/download.js
+31
-1
src/views/Downloader.vue
+132
-102
src/views/History.vue
+86
-25
No files found.
src/api/api.js
View file @
bd08d501
...
...
@@ -28,6 +28,7 @@ const config = {
uploadDetailDelete
:
`
${
domain
}
/uploadDetail/delete`
,
downLoadStatus
:
`
${
domain
}
/uploadDetail/downLoadStatus`
,
fileUploadDetail
:
`
${
domain
}
/uploadBatch/fileUploadDetail`
,
queryFileAll
:
`
${
domain
}
/uploadBatch/queryFileAll`
,
};
export
default
config
;
src/stores/download.js
View file @
bd08d501
...
...
@@ -2,6 +2,8 @@ import { defineStore } from 'pinia'
import
{
ref
,
computed
}
from
'vue'
import
{
ElMessage
}
from
'element-plus'
import
{
useAuthStore
}
from
'./auth'
import
http
from
'@/utils/request.js'
;
import
config
from
'@/api/api.js'
;
export
const
useDownloadStore
=
defineStore
(
'download'
,
()
=>
{
const
authStore
=
useAuthStore
()
...
...
@@ -148,13 +150,32 @@ export const useDownloadStore = defineStore('download', () => {
// 创建 AbortController 用于取消下载
download
.
controller
=
new
AbortController
()
console
.
log
(
'download config.url-->'
,
config
.
downLoadStatus
)
console
.
log
(
'download id-->'
,
download
.
id
)
try
{
await
performDownload
(
download
)
http
.
post
(
config
.
downLoadStatus
,{
detailId
:
download
.
id
,
fileStatus
:
3
,
//下载状态 0:等待中 1:下载中 2:已暂停 3:已完成 4:失败
}).
then
(
res
=>
{
if
(
res
.
code
===
200
)
{
}
else
{
ElMessage
.
error
(
res
.
message
)
}
})
}
catch
(
error
)
{
if
(
error
.
name
===
'AbortError'
)
{
download
.
status
=
'paused'
saveToStorage
()
http
.
post
(
config
.
downLoadStatus
,{
detailId
:
download
.
id
,
fileStatus
:
2
,
//下载状态 0:等待中 1:下载中 2:已暂停 3:已完成 4:失败
}).
then
(
res
=>
{
if
(
res
.
code
===
200
)
{
}
else
{
ElMessage
.
error
(
res
.
message
)
}
})
}
else
{
// 处理重试逻辑
if
(
download
.
retryCount
<
download
.
maxRetries
)
{
...
...
@@ -169,6 +190,15 @@ export const useDownloadStore = defineStore('download', () => {
download
.
status
=
'error'
download
.
error
=
error
.
message
saveToStorage
()
http
.
post
(
config
.
downLoadStatus
,{
detailId
:
download
.
id
,
fileStatus
:
4
,
//下载状态 0:等待中 1:下载中 2:已暂停 3:已完成 4:失败
}).
then
(
res
=>
{
if
(
res
.
code
===
200
)
{
}
else
{
ElMessage
.
error
(
res
.
message
)
}
})
}
}
}
finally
{
...
...
src/views/Downloader.vue
View file @
bd08d501
...
...
@@ -60,9 +60,8 @@
</el-table>
<div
class=
"pagination-container"
>
<el-pagination
v-model:current-page=
"upQuery.current"
v-model:page-size=
"upQuery.pageSize"
:page-sizes=
"[10, 20, 50, 100]"
:total=
"upTotal"
layout=
"total, sizes, prev, pager, next, jumper"
@
size-change=
"handleUpSizeChange"
@
current-change=
"handleUpCurrentChange"
/>
:page-sizes=
"[10, 20, 50, 100]"
:total=
"upTotal"
layout=
"total, sizes, prev, pager, next, jumper"
@
size-change=
"handleUpSizeChange"
@
current-change=
"handleUpCurrentChange"
/>
</div>
</div>
<el-divider
/>
...
...
@@ -244,8 +243,8 @@
<
el
-
option
label
=
"已完成"
value
=
"completed"
/>
<
el
-
option
label
=
"失败"
value
=
"error"
/>
<
/el-select> --
>
<
el
-
select
v
-
model
=
"
deQuery.fileStatus"
placeholder
=
"按状态筛选"
clearable
style
=
"width: 150px; margin-right: 10px;"
@
change
=
"handleStatusFilterChange"
>
<
el
-
select
v
-
model
=
"
fileStatus"
placeholder
=
"按状态筛选"
clearable
style
=
"width: 150px; margin-right: 10px;"
@
change
=
"handleStatusFilterChange"
>
<
el
-
option
label
=
"全部"
value
=
""
/>
<
el
-
option
label
=
"等待中"
:
value
=
"0"
/>
<
el
-
option
label
=
"下载中"
:
value
=
"1"
/>
...
...
@@ -289,7 +288,7 @@
<
div
v
-
else
class
=
"download-table-container"
>
<!--
分页表格
-->
<!--
:
data
=
"paginatedDownloads"
-->
<
el
-
table
:
data
=
"
deTableData
"
style
=
"width: 100%"
border
stripe
highlight
-
current
-
row
>
<
el
-
table
:
data
=
"
paginatedDownloads
"
style
=
"width: 100%"
border
stripe
highlight
-
current
-
row
>
<
el
-
table
-
column
label
=
"Excel文件"
width
=
"180"
>
<
template
#
default
=
"{ row
}
"
>
...
...
@@ -297,7 +296,7 @@
<
el
-
icon
>
<
Document
/>
<
/el-icon
>
<
span
class
=
"excel-file-name"
>
{{
row
.
upload
Name
||
'-'
}}
<
/span
>
<
span
class
=
"excel-file-name"
>
{{
row
.
excelFile
Name
||
'-'
}}
<
/span
>
<
/div
>
<
/template
>
<
/el-table-column
>
...
...
@@ -315,10 +314,7 @@
<!--
<
span
v
-
if
=
"downloadStore.customSubFolder"
class
=
"file-prefix"
>
{{
downloadStore
.
customSubFolder
}}
_
<
/span> --
>
<
span
v
-
if
=
"row.fileName"
class
=
"file-prefix"
>
{{
row
.
fileName
}}
_
<
/span
>
{{
row
.
fileUrl
}}
{{
row
.
fileName
}}
<
/div
>
<
div
class
=
"file-url"
>
{{
row
.
url
}}
<
/div
>
<
/div
>
...
...
@@ -329,7 +325,7 @@
<
el
-
table
-
column
label
=
"状态"
width
=
"100"
align
=
"center"
>
<
template
#
default
=
"{ row
}
"
>
<
el
-
tag
:
class
=
"`status-badge status-${row.status
}
`"
size
=
"small"
>
{{
getStatusText
(
row
.
fileS
tatus
)
}}
{{
getStatusText
(
row
.
s
tatus
)
}}
<
/el-tag
>
<
/template
>
<
/el-table-column
>
...
...
@@ -397,10 +393,9 @@
<!--
分页器
-->
<
div
class
=
"pagination-container"
>
<
el
-
pagination
v
-
model
:
current
-
page
=
"deQuery.current"
v
-
model
:
page
-
size
=
"deQuery.pageSize"
:
page
-
sizes
=
"[10, 20, 50, 100]"
:
total
=
"deTotal"
layout
=
"total, sizes, prev, pager, next, jumper"
@
size
-
change
=
"handleSizeChange"
@
current
-
change
=
"handleCurrentChange"
/>
<
el
-
pagination
v
-
model
:
current
-
page
=
"currentPage"
v
-
model
:
page
-
size
=
"pageSize"
:
page
-
sizes
=
"[10, 20, 50, 100]"
:
total
=
"deTotal"
layout
=
"total, sizes, prev, pager, next, jumper"
@
size
-
change
=
"handleSizeChange"
@
current
-
change
=
"handleCurrentChange"
/>
<
/div
>
<
/div
>
<
/div
>
...
...
@@ -439,6 +434,7 @@ const activeCollapse = ref(['upload']) // 默认展开配置区域
// 分页相关
const
currentPage
=
ref
(
1
)
const
pageSize
=
ref
(
10
)
const
fileStatus
=
ref
(
''
)
// 已上传文件列表
let
upQuery
=
ref
({
current
:
1
,
...
...
@@ -447,11 +443,11 @@ let upQuery = ref({
let
upTableData
=
reactive
([])
let
upTotal
=
ref
(
0
)
// 下载任务管理列表
let
deQuery
=
ref
({
current
:
1
,
pageSize
:
10
,
fileStatus
:
''
}
)
//
let deQuery = ref(
{
//
current: 1,
//
pageSize: 10,
// fileStatus:
''
//
}
)
let
deTableData
=
reactive
([])
let
deTotal
=
ref
(
0
)
...
...
@@ -476,7 +472,7 @@ const loadUpTableData = () => {
http
.
post
(
config
.
uploadBatchList
,
upQuery
.
value
).
then
(
res
=>
{
if
(
res
.
code
===
200
)
{
for
(
let
element
of
res
.
data
.
rows
)
{
element
.
createTime
=
element
.
createTime
?
element
.
createTime
.
substring
(
0
,
10
)
:
''
element
.
createTime
=
element
.
createTime
?
element
.
createTime
.
substring
(
0
,
10
)
:
''
}
upTableData
=
res
.
data
.
rows
upTotal
.
value
=
res
.
data
.
total
...
...
@@ -534,22 +530,22 @@ const selectExcelFile = async (fileId) => {
// console.error('选择Excel文件失败:', error)
// ElMessage.error('选择Excel文件失败: ' + error.message)
//
}
http.post(config.uploadBatchQueryUpload, {
batchId:fileId
}
).then(res => {
http.post(config.uploadBatchQueryUpload, {
batchId: fileId
}
).then(res => {
if (res.code === 200) {
if (!res.data || res.data.details.length === 0) {
ElMessage.error('文件信息不存在')
return
}
selectedFile.value = {
name:res.data.uploadName,
name:
res.data.uploadName,
}
excelColumns.value = res.data.fileColumnNameAll || []
columnMapping.value.fileNameColumns = res.data.fileColumnName || []
columnMapping.value.url = res.data.urlColumnName
rawExcelData.value = res.data.details || []
if (res.data.details.length
>5)
{
previewData.value = res.data.details.slice(0,5)
}
else {
if (res.data.details.length
> 5)
{
previewData.value = res.data.details.slice(0,
5)
}
else {
previewData.value = res.data.details || []
}
customSubFolder.value = res.data.filePrefix || ''
...
...
@@ -825,19 +821,53 @@ onMounted(() => {
loadUpTableData()
loadDetailTableData()
}
)
function loadDetailTableData(){
http.post(config.uploadDetailList,deQuery.value).then(res=>{
if (res.code === 200){
deTableData = res.data.rows
const statusMap = {
0: 'pending',
1: 'downloading',
2: 'paused',
3: 'completed',
4: 'error'
}
function loadDetailTableData() {
http.post(config.uploadDetailList, {
current: currentPage.value,
size: pageSize.value,
fileStatus: fileStatus.value
}
).then(res => {
if (res.code === 200) {
var list = []
for (const element of res.data.rows) {
list.push({
"id": element.detailId,
"fileName": element.fileName,
"url": element.fileUrl,
"excelFileName": element.uploadName,
"excelFileId": "",
"status": statusMap[element.fileStatus],
"progress": 0,
"downloadedBytes": 0,
"fileSize": element.fileLength,
"speed": 0,
"startTime": element.createTime,
"endTime": null,
"error": null,
"retryCount": 0,
"maxRetries": 3,
"controller": null
}
)
}
// console.log('--lsit:',list)
// deTableData = res.data.rows
downloadStore.downloads = list
deTotal.value = res.data.total
loadUploadDetailTotalNum()
}
else {
}
else {
ElMessage.error(res.message)
}
}
)
}
let totalNumObj = ref({
countNum:0,
countNum:
0,
fileLength: '',
status0: 0,
status1: 0,
...
...
@@ -845,14 +875,14 @@ let totalNumObj = ref({
status3: 0,
status4: 0,
}
)
function loadUploadDetailTotalNum(){
http.post(config.uploadDetailTotalNum).then(res
=>{
if (res.code === 200){
function loadUploadDetailTotalNum()
{
http.post(config.uploadDetailTotalNum).then(res
=> {
if (res.code === 200)
{
totalNumObj.value.countNum = res.data.countNum
totalNumObj.value.status3 = res.data.status3
totalNumObj.value.status4 = res.data.status4
totalNumObj.value.fileLength = res.data.fileLength
}
else {
}
else {
ElMessage.error(res.message)
}
}
)
...
...
@@ -860,45 +890,47 @@ function loadUploadDetailTotalNum(){
// 清除已完成
function clearCompleted() {
http.post(config.uploadDetailDeleteAll,{
type:0
}
).then(res
=>{
if (res.code === 200){
http.post(config.uploadDetailDeleteAll,
{
type:
0
}
).then(res
=> {
if (res.code === 200)
{
ElMessage.success(res.message)
deQuery.value.current = 1
// deQuery.value.current = 1
currentPage.value = 1
// loadUploadDetailList()
loadDetailTableData()
}
else {
}
else {
ElMessage.error(res.message)
}
}
)
}
// 清除所有
function clearAll() {
http.post(config.uploadDetailDeleteAll,{
type:1
}
).then(res
=>{
if (res.code === 200){
http.post(config.uploadDetailDeleteAll,
{
type:
1
}
).then(res
=> {
if (res.code === 200)
{
ElMessage.success(res.message)
deQuery.value.current = 1
// loadUploadDetailList()
loadDetailTableData()
}
else {
}
else {
ElMessage.error(res.message)
}
}
)
}
// 删除单行
function deleteRow(row) {
http.post(config.uploadDetailDelete,{
detailId:row.detailId
}
).then(res
=>{
if (res.code === 200){
http.post(config.uploadDetailDelete,
{
detailId:
row.detailId
}
).then(res
=> {
if (res.code === 200)
{
ElMessage.success(res.message)
deQuery.value.current = 1
// deQuery.value.current = 1
currentPage.value = 1
// loadUploadDetailList()
loadDetailTableData()
}
else {
}
else {
ElMessage.error(res.message)
}
}
)
...
...
@@ -906,7 +938,7 @@ function deleteRow(row) {
// 解析Excel文件
const parseExcelFile = async () => {
if (rawExcelData.value.length > 3000){
if (rawExcelData.value.length > 3000)
{
ElMessage.error('文件数据量太大,请拆分处理,每次不超过3000条')
return
}
...
...
@@ -1086,10 +1118,10 @@ function getDetailList() {
}
var upDetailId = ''
let detailList = reactive([])
function uploadDetails(){
function uploadDetails()
{
detailList = getDetailList()
http.post(config.uploadBatchFileUpload,{
uploadName:selectedFile.value.name,
http.post(config.uploadBatchFileUpload,
{
uploadName:
selectedFile.value.name,
uploadUrl: '',
totalRows: rawExcelData.value.length,
fileColumnNameAll: excelColumns.value,
...
...
@@ -1109,24 +1141,24 @@ function uploadDetails(){
}
}
)
}
function uploadDetailsFile(){
function uploadDetailsFile()
{
var uplist = []
if (detailList.length > 500) {
uplist = detailList.slice(0,500)
uplist = detailList.slice(0,
500)
detailList = detailList.slice(500)
}
else {
}
else {
uplist = detailList
detailList = []
}
console.log('list-->',detailList.length)
http.post(config.fileUploadDetail,{
console.log('list-->',
detailList.length)
http.post(config.fileUploadDetail,
{
batchId: upDetailId,
details: uplist
}
).then(res => {
if (res.code === 200) {
if (detailList.length > 0) {
uploadDetailsFile()
}
else {
}
else {
ElMessage.success('上传任务完成')
loadDetailTableData()
}
...
...
@@ -1137,6 +1169,7 @@ function uploadDetailsFile(){
// 下载当前页所有任务
const downloadCurrentPage = async () => {
const currentPageItems = paginatedDownloads.value
// const currentPageItems = deTableData
if (currentPageItems.length === 0) {
ElMessage.warning('当前页没有下载任务')
return
...
...
@@ -1146,12 +1179,16 @@ const downloadCurrentPage = async () => {
const startableItems = currentPageItems.filter(item =>
['pending', 'paused', 'error'].includes(item.status)
)
// const startableItems = currentPageItems.filter(item =>
// [0, 2, 4].includes(item.fileStatus)
// )
if (startableItems.length === 0) {
ElMessage.warning('当前页没有可以开始下载的任务')
return
}
// console.log('currentPageItems-->',currentPageItems)
// console.log('startableItems-->',startableItems)
try {
await ElMessageBox.confirm(`
确定要下载当前页的
$
{
startableItems
.
length
}
个任务吗?
`, '下载当前页', {
confirmButtonText: '确定',
...
...
@@ -1166,37 +1203,25 @@ const downloadCurrentPage = async () => {
await downloadStore.batchStartDownloads(currentPageIds)
ElMessage.success(`
已开始下载当前页的
$
{
startableItems
.
length
}
个任务
`)
for (const item of startableItems) {
const size = await getFileSize(item.url);
http.post(config.downLoadStatus,{
detailId: item.id,
fileStatus: 3, //下载状态 0:等待中 1:下载中 2:已暂停 3:已完成 4:失败
fileStatus: size || 0
}
).then(res=>{
if (res.code === 200) {
}
else {
ElMessage.error(res.message)
}
}
)
}
}
catch {
// 用户取消
}
}
async function getFileSize(url) {
try {
const response = await axios.head(url);
const size = response.headers["content-length"];
return size ? parseInt(size, 10) : null;
}
catch (err) {
console.error("获取文件大小失败:", err);
return null;
}
}
//
async function getFileSize(url) {
//
try {
//
const response = await axios.head(url);
//
const size = response.headers["content-length"];
//
return size ? parseInt(size, 10) : null;
//
}
catch (err) {
//
console.error("获取文件大小失败:", err);
//
return null;
//
}
//
}
// 暂停当前页所有任务
const pauseCurrentPage = async () => {
const currentPageItems = paginatedDownloads.value
// const currentPageItems = deTableData
if (currentPageItems.length === 0) {
ElMessage.warning('当前页没有下载任务')
return
...
...
@@ -1235,13 +1260,16 @@ const pauseCurrentPage = async () => {
// 处理分页大小变化
const handleSizeChange = (size) => {
deQuery.value.pageSize = size
deQuery.value.current = 1
// deQuery.value.pageSize = size
// deQuery.value.current = 1
pageSize.value = size
currentPage.value = 1
loadDetailTableData()
}
// 处理当前页变化
const handleCurrentChange = (page) => {
deQuery.value.current = page
// deQuery.value.current = page
currentPage.value = page
loadDetailTableData()
}
...
...
@@ -1259,7 +1287,9 @@ const handleUpCurrentChange = (page) => {
// 处理状态筛选变化
const handleStatusFilterChange = () => {
// currentPage.value = 1 // 重置当前页为1,以便重新加载数据
deQuery.value.current = 1
// deQuery.value.current = 1
currentPage.value = 1
loadDetailTableData()
}
// 单个文件下载
...
...
@@ -1425,16 +1455,16 @@ const readExcelFile = (file) => {
// 获取状态文本
const getStatusText = (status) => {
const statusMap = {
//
pending: '等待中',
//
downloading: '下载中',
//
completed: '已完成',
//
error: '失败',
// paused: '已暂停'
0:
'等待中',
1:
'下载中'
,
2:
'已暂停'
,
3:
'已完成',
4:'失败'
pending: '等待中',
downloading: '下载中',
completed: '已完成',
error: '失败',
paused: '已暂停',
0:
'等待中',
1:
'下载中'
,
2:
'已暂停'
,
3:
'已完成',
4:
'失败'
}
return statusMap[status] || status
}
...
...
src/views/History.vue
View file @
bd08d501
...
...
@@ -48,7 +48,7 @@
<div
class=
"card-header"
>
<span>
历史记录
</span>
<div
class=
"header-actions"
>
<el-select
v-model=
"
deQuery.fileStatus
"
placeholder=
"状态筛选"
size=
"small"
style=
"width: 120px;"
>
<el-select
v-model=
"
statusFilter
"
placeholder=
"状态筛选"
size=
"small"
style=
"width: 120px;"
>
<el-option
label=
"全部"
value=
""
/>
<el-option
label=
"已完成"
:value=
"3"
/>
<el-option
label=
"失败"
:value=
"4"
/>
...
...
@@ -57,10 +57,10 @@
<el-select
v-model=
"excelFileFilter"
placeholder=
"Excel文件筛选"
size=
"small"
style=
"width: 150px; margin-left: 10px;"
>
<el-option
label=
"全部Excel文件"
value=
""
/>
<el-option
v-for=
"excelFile in
uniqueExcelFiles
"
:key=
"excelFile"
:label=
"excelFile"
<el-option
v-for=
"excelFile in
excelFileFilterList
"
:key=
"excelFile"
:label=
"excelFile"
:value=
"excelFile"
/>
</el-select>
<el-input
v-model=
"
deQuery.fileName
"
placeholder=
"搜索文件名或Excel文件"
size=
"small"
<el-input
v-model=
"
searchKeyword
"
placeholder=
"搜索文件名或Excel文件"
size=
"small"
style=
"width: 200px; margin-left: 10px;"
clearable
>
<template
#
prefix
>
<el-icon>
...
...
@@ -73,7 +73,7 @@
</template>
<!-- 历史记录表格 -->
<el-table
:data=
"
deTableData
"
style=
"width: 100%"
:default-sort=
"{ prop: 'timestamp', order: 'descending' }"
<el-table
:data=
"
filteredHistory
"
style=
"width: 100%"
:default-sort=
"{ prop: 'timestamp', order: 'descending' }"
stripe
>
<el-table-column
prop=
"timestamp"
label=
"时间"
width=
"180"
sortable
>
<
template
#
default=
"scope"
>
...
...
@@ -142,10 +142,10 @@
<el-table-column
label=
"操作"
width=
"120"
fixed=
"right"
>
<
template
#
default=
"scope"
>
<el-button
v-if=
"scope.row.status === 'error'"
@
click=
"retryDownload(scope.row)"
type=
"primary"
<
!--
<
el-button
v-if=
"scope.row.status === 'error'"
@
click=
"retryDownload(scope.row)"
type=
"primary"
size=
"small"
>
重试
</el-button>
</el-button>
-->
<el-button
@
click=
"viewDetails(scope.row)"
type=
"info"
size=
"small"
>
详情
</el-button>
...
...
@@ -155,7 +155,7 @@
<!-- 分页 -->
<div
class=
"pagination-container"
>
<el-pagination
v-model:current-page=
"
deQuery.current"
v-model:page-size=
"deQuery.
pageSize"
:page-sizes=
"[10, 20, 50, 100]"
<el-pagination
v-model:current-page=
"
currentPage"
v-model:page-size=
"
pageSize"
:page-sizes=
"[10, 20, 50, 100]"
:total=
"deTotal"
layout=
"total, sizes, prev, pager, next, jumper"
@
size-change=
"handleSizeChange"
@
current-change=
"handleCurrentChange"
/>
</div>
...
...
@@ -196,7 +196,7 @@
<
script
setup
>
import
{
ref
,
computed
,
onMounted
,
reactive
}
from
'vue'
import
{
useRouter
}
from
'vue-router'
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
import
{
ElMessage
,
ElMessageBox
,
valueEquals
}
from
'element-plus'
import
{
Clock
,
Search
}
from
'@element-plus/icons-vue'
import
{
useAuthStore
}
from
'../stores/auth'
import
http
from
'@/utils/request.js'
;
...
...
@@ -214,21 +214,71 @@ const currentPage = ref(1)
const
pageSize
=
ref
(
20
)
const
detailsVisible
=
ref
(
false
)
const
selectedRecord
=
ref
(
null
)
const
deQuery
=
ref
({
current
:
1
,
pageSize
:
10
,
fileStatus
:
3
,
fileName
:
''
})
let
deTableData
=
reactive
([])
const
excelFileFilterList
=
ref
([])
// const deQuery = ref({
// current: 1,
// pageSize: 10,
// fileStatus: 3,
// fileName: ''
// })
// let deTableData =
// reactive([])
let
deTotal
=
ref
(
0
)
const
statusMap
=
{
0
:
'pending'
,
1
:
'downloading'
,
2
:
'paused'
,
3
:
'completed'
,
4
:
'error'
}
function
laodFileAll
(){
http
.
post
(
config
.
queryFileAll
).
then
(
res
=>
{
if
(
res
.
code
===
200
){
excelFileFilterList
.
value
=
res
.
data
}
else
{
ElMessage
.
error
(
res
.
message
)
}
})
}
// 加载历史数据
const
loadHistory
=
()
=>
{
// historyData.value = authStore.getDownloadHistory()
http
.
post
(
config
.
uploadDetailList
,
deQuery
.
value
).
then
(
res
=>
{
http
.
post
(
config
.
uploadDetailList
,
{
current
:
currentPage
.
value
,
pageSize
:
pageSize
.
value
,
fileStatus
:
statusFilter
.
value
,
uploadName
:
excelFileFilter
.
value
,
fileName
:
searchKeyword
.
value
}).
then
(
res
=>
{
if
(
res
.
code
===
200
)
{
deTableData
=
res
.
data
.
rows
var
list
=
[]
var
updateTime
=
''
for
(
const
element
of
res
.
data
.
rows
)
{
updateTime
=
element
.
updateTime
list
.
push
({
"id"
:
element
.
detailId
,
"fileName"
:
element
.
fileName
,
"fileNamePrefix"
:
""
,
"excelFileName"
:
element
.
uploadName
,
"url"
:
element
.
fileUrl
,
"status"
:
statusMap
[
element
.
fileStatus
],
"progress"
:
100
,
"fileSize"
:
element
.
fileLength
,
"downloadedBytes"
:
0
,
"startTime"
:
element
.
createTime
,
"endTime"
:
''
,
"error"
:
null
})
}
historyData
.
value
=
[
{
downloads
:
list
,
timestamp
:
updateTime
,
userId
:
''
}
]
// deTableData = res.data.rows
deTotal
.
value
=
res
.
data
.
total
}
else
{
ElMessage
.
error
(
res
.
message
)
...
...
@@ -400,9 +450,19 @@ const clearAllHistory = async () => {
}
)
authStore
.
clearDownloadHistory
()
// authStore.clearDownloadHistory()
// loadHistory()
// ElMessage.success('历史记录已清空')
http
.
post
(
config
.
uploadDetailDeleteAll
,
{
type
:
1
}).
then
(
res
=>
{
if
(
res
.
code
===
200
)
{
loadHistory
()
ElMessage
.
success
(
'历史记录已清空'
)
}
else
{
ElMessage
.
error
(
res
.
message
)
}
})
}
catch
{
// 用户取消
}
...
...
@@ -410,16 +470,16 @@ const clearAllHistory = async () => {
// 分页处理
const
handleSizeChange
=
(
size
)
=>
{
//
pageSize.value = size
//
currentPage.value = 1
deQuery
.
value
.
pageSize
=
size
deQuery
.
value
.
current
=
1
pageSize
.
value
=
size
currentPage
.
value
=
1
//
deQuery.value.pageSize = size
//
deQuery.value.current = 1
loadHistory
()
}
const
handleCurrentChange
=
(
page
)
=>
{
//
currentPage.value = page
deQuery
.
value
.
current
=
page
currentPage
.
value
=
page
//
deQuery.value.current = page
loadHistory
()
}
...
...
@@ -432,6 +492,7 @@ const goBack = () => {
onMounted
(()
=>
{
loadHistory
()
loadUploadDetailTotalNum
()
laodFileAll
()
})
</
script
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment