Commit 215c937e by linjinhong

添加我的下载页面

parent 8d0213b5
import axios from './axios'
import { BaseRespData } from '@/types/api'
//我的下载列表
export function getExportRecordApi(params: {
pageSize?: number
currentPage?: number
}) {
return axios.post<never, BaseRespData<never>>(
'factory/exportRecord/getExportRecord ',
params,
)
}
export function deleteExportRecordByIdsApi(ids: string) {
return axios.get<never, BaseRespData<never>>('factory/exportRecord/delete', {
params: { ids },
})
}
......@@ -52,6 +52,7 @@
</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="toDownload">我的下载</el-dropdown-item>
<el-dropdown-item @click="resetPassword"
>修改密码</el-dropdown-item
>
......@@ -455,6 +456,10 @@ onMounted(() => {
}
})
const toDownload = () => {
router.push({ name: 'MyDownloads' })
}
onUnmounted(() => {
// 清理监听器
resizeObserver.disconnect()
......
......@@ -187,8 +187,8 @@ export default defineComponent({
searchForm.value[item.prop] = value
},
...getComponentAttrs(item),
style: { width: `${componentWidth.value}px` },
...getComponentAttrs(item),
})}
</ElFormItem>
))}
......
......@@ -165,7 +165,8 @@ const router = createRouter({
title: 'POD(CN)对账单',
},
component: PodBillOrder,
},{
},
{
path: '/account/pod-us-bill-order',
meta: {
title: 'POD(US)对账单',
......@@ -284,6 +285,14 @@ const router = createRouter({
},
component: () => import('@/views/setting/settingIndex.vue'),
},
{
path: '/MyDownloads',
meta: {
title: '我的下载',
},
name: 'MyDownloads',
component: () => import('@/views/MyDownloads.vue'),
},
],
},
// 登录
......@@ -295,6 +304,7 @@ const router = createRouter({
path: '/user/reset',
component: Reset,
},
// 其他路由
{
path: '/:pathMatch(.*)*',
......
<template>
<div class="user-page flex-column card h-100 overflow-hidden">
<div class="header-filter-form">
<SearchForm
v-model="searchForm"
:config="searchConfig"
@search="search"
:isAddBtn="false"
@delete="deleteFn"
></SearchForm>
</div>
<div class="user-content flex-1 flex-column overflow-hidden">
<div v-loading="loading" class="user-list flex-1 overflow-hidden">
<CustomizeTable
border
align="center"
v-model="tableData"
:config="tableConfig"
@get-checkbox-records="handleCheckboxRecords"
></CustomizeTable>
</div>
<ElPagination
v-model:current-page="currentPage"
v-model:page-size="pageSize"
:page-sizes="[100, 200, 300, 400, 500]"
background
layout="total, sizes, prev, pager, next, jumper"
:total="total"
style="margin: 10px auto 0; text-align: right"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
></ElPagination>
</div>
</div>
</template>
<script setup lang="tsx">
defineOptions({
name: 'MyDownloads',
})
import {
getExportRecordApi,
deleteExportRecordByIdsApi,
} from '@/api/myDownload'
import { ISeachFormConfig } from '@/types/searchType'
import { TableColumn } from '@/components/VxeTable'
import SearchForm from '@/components/SearchForm.tsx'
import CustomizeTable from '@/components/VxeTable.tsx'
import usePageList from '@/utils/hooks/usePageList'
import { useValue } from '@/utils/hooks/useValue'
// import { filePath } from '@/api/axios'
import { Delete, Download } from '@element-plus/icons-vue'
const [searchForm] = useValue({ periodTime: [] })
interface ParamsType {
startTime?: string
endTime?: string
periodTime?: string[]
pageSize: number
currentPage: number
}
const {
loading,
currentPage,
pageSize,
total,
data: tableData,
refresh: search,
onCurrentPageChange: handleCurrentChange,
onPageSizeChange: handleSizeChange,
} = usePageList({
query: (page, pageSize) => {
const params: ParamsType = {
...searchForm.value,
pageSize: pageSize,
currentPage: page,
}
if (searchForm.value?.periodTime.length) {
params.startTime = searchForm.value?.periodTime[0]
params.endTime = searchForm.value?.periodTime[1]
}
params.periodTime && delete params.periodTime
return getExportRecordApi(params).then(({ data }) => {
return data
})
},
})
const selection = ref([])
const searchConfig = ref<ISeachFormConfig[]>([
{
prop: 'periodTime',
type: 'dateRangePicker',
label: '创建时间',
attrs: {
style: { width: '380px' },
clearable: true,
type: 'datetimerange',
'default-time': [
new Date(0, 0, 0, 0, 0, 0),
new Date(0, 0, 0, 23, 59, 59),
],
'start-placeholder': '开始时间',
'end-placeholder': '结束时间',
format: 'YYYY-MM-DD HH:mm:ss',
'value-format': 'YYYY-MM-DD HH:mm:ss',
},
},
{
prop: 'status',
type: 'select',
label: '状态',
attrs: {
clearable: true,
placeholder: '请选择启用状态',
options: [
{ label: '正在生成', value: 1 },
{ label: '生成成功', value: 2 },
{ label: '生成失败', value: 3 },
],
},
},
{
prop: 'fileDescription',
type: 'input',
label: '下载描述',
attrs: {
clearable: true,
placeholder: '请输入下载描述',
},
},
])
const tableConfig = ref<TableColumn[]>([
{
prop: 'fileDescription',
label: '下载文件描述',
attrs: {
'min-width': 200,
},
},
{
prop: 'status',
label: '下载状态',
render: {
default: ({ row }) => (
<div>
{row.status === 1
? '正在生成'
: row.status === 2
? '生成成功'
: '生成失败'}
</div>
),
},
},
{
prop: 'createTime',
label: '创建时间',
},
{
prop: 'finishTime',
label: '完成时间',
},
{
prop: 'errorMsg',
label: '错误信息',
attrs: {
'min-width': 400,
},
},
{
prop: 'operating',
label: '操作',
attrs: {
align: 'center',
},
render: {
default: ({ row }) => (
<div>
<el-icon
size="24"
title="下载"
color={row.status === 2 ? '#8cc34b' : '#ccc'}
style={{
cursor: row.status === 2 ? 'pointer' : 'not-allowed',
verticalAlign: 'middle',
opacity: row.status === 2 ? 1 : 0.6,
}}
onClick={
row.status === 2
? () => downloadFn(row as { fileUrl: string })
: undefined
}
>
<Download />
</el-icon>
<el-icon
size="24"
title="删除"
color="#f56c6c"
style="cursor: pointer; vertical-align: middle"
onclick={() => deleteFn(row.id as string | number)}
>
<Delete />
</el-icon>
</div>
),
},
},
])
/**
* @description: 获取选中数据
*/
function handleCheckboxRecords(value: never[]) {
console.log(351, value)
selection.value = value
}
function downloadFn(data: { fileUrl: string }) {
window.open('http://10.168.1.209//upload/factory' + data.fileUrl, '_blank')
console.log(248, data)
}
async function deleteFn(id?: string | number) {
try {
await ElMessageBox.confirm('确定删除该下载文件记录?', '提示', {
cancelButtonText: '取消',
confirmButtonText: '确认',
type: 'warning',
})
let ids
if (id) {
ids = [id].join(',')
} else {
ids = selection.value.map((el: { id: string }) => el.id).join(',')
}
console.log(214, ids)
await deleteExportRecordByIdsApi(ids)
ElMessage.success('操作成功')
search()
} catch (error) {
console.log(error)
}
}
</script>
<style lang="scss" scoped>
.header-filter-form {
margin-bottom: 20px;
:deep(.el-form-item) {
margin-right: 14px;
margin-bottom: 10px;
}
}
.user-operate-btn {
margin-bottom: 10px;
}
.dialog-footer {
text-align: center;
}
</style>
......@@ -424,11 +424,11 @@ const submitExportForm = async () => {
console.error('未知的资源类型:', resourceType)
}
try {
const res = await exportPodUSInfo({
await exportPodUSInfo({
...params,
...(resourceType === 2 ? searchForm.value : {}),
})
window.open(filePath + res.message, '_blank')
ElMessage.success('请求成功,请稍后到右上角[我的下载]中查看')
exportVisible.value = false
exportLoading.value = false
} catch (e) {
......
......@@ -2743,11 +2743,11 @@ const submitExportForm = async () => {
console.error('未知的资源类型:', resourceType)
}
try {
const res = await exportPodUSInfo({
await exportPodUSInfo({
...params,
...(resourceType === 2 ? searchForm.value : {}),
})
window.open(filePath + res.message, '_blank')
ElMessage.success('请求成功,请稍后到右上角[我的下载]中查看')
exportVisible.value = false
exportLoading.value = false
} catch (e) {
......
......@@ -209,7 +209,7 @@
>
<template #default> US账户 </template>
</el-table-column>
<el-table-column
<!-- <el-table-column
label="应付金额($)"
header-align="center"
prop="totalAmount"
......@@ -217,7 +217,7 @@
align="center"
show-overflow-tooltip
>
</el-table-column>
</el-table-column> -->
<el-table-column
label="实付金额($)"
header-align="center"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment