2025-05-27 19:31:37 +08:00
|
|
|
<script lang="ts" setup>
|
|
|
|
|
import type { VbenFormProps } from '#/adapter/form';
|
|
|
|
|
import type { VxeGridProps } from '#/adapter/vxe-table';
|
|
|
|
|
|
|
|
|
|
import { Page, useVbenModal } from '@vben/common-ui';
|
|
|
|
|
|
|
|
|
|
import { useVbenVxeGrid } from '#/adapter/vxe-table';
|
|
|
|
|
import {
|
|
|
|
|
postFilesDelete,
|
|
|
|
|
postFilesDownload,
|
|
|
|
|
postFilesPage,
|
|
|
|
|
} from '#/api-client/index';
|
|
|
|
|
import { TableAction } from '#/components/table-action';
|
|
|
|
|
import { $t } from '#/locales';
|
|
|
|
|
|
|
|
|
|
// 新增modal
|
|
|
|
|
import AddModal from './AddModal.vue';
|
|
|
|
|
// 编辑modal
|
|
|
|
|
import { querySchema, tableSchema } from './schema';
|
|
|
|
|
|
|
|
|
|
const formOptions: VbenFormProps = {
|
|
|
|
|
// 默认展开
|
|
|
|
|
collapsed: false,
|
|
|
|
|
schema: querySchema.value,
|
|
|
|
|
// 控制表单是否显示折叠按钮
|
|
|
|
|
showCollapseButton: true,
|
|
|
|
|
// 按下回车时是否提交表单
|
|
|
|
|
submitOnEnter: false,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const gridOptions: VxeGridProps<any> = {
|
|
|
|
|
checkboxConfig: {
|
|
|
|
|
highlight: true,
|
|
|
|
|
labelField: 'name',
|
|
|
|
|
},
|
|
|
|
|
columns: tableSchema.value,
|
|
|
|
|
keepSource: true,
|
|
|
|
|
height: 'auto',
|
|
|
|
|
pagerConfig: {},
|
|
|
|
|
toolbarConfig: {
|
|
|
|
|
custom: true,
|
|
|
|
|
},
|
|
|
|
|
customConfig: {
|
|
|
|
|
storage: true,
|
|
|
|
|
},
|
|
|
|
|
proxyConfig: {
|
|
|
|
|
ajax: {
|
|
|
|
|
query: async ({ page }, formValues) => {
|
|
|
|
|
if (formValues?.time?.length === 2) {
|
|
|
|
|
formValues = {
|
|
|
|
|
...formValues,
|
|
|
|
|
startCreationTime: formValues.time[0],
|
|
|
|
|
endCreationTime: formValues.time[1],
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
const { data } = await postFilesPage({
|
|
|
|
|
body: {
|
|
|
|
|
pageIndex: page.currentPage,
|
|
|
|
|
pageSize: page.pageSize,
|
|
|
|
|
...formValues,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
return data;
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const [Grid, gridApi] = useVbenVxeGrid({ formOptions, gridOptions });
|
|
|
|
|
|
|
|
|
|
const [AddVbenModal, addModalApi] = useVbenModal({
|
|
|
|
|
// 连接抽离的组件
|
|
|
|
|
connectedComponent: AddModal,
|
|
|
|
|
});
|
|
|
|
|
|
2025-07-29 10:06:30 +08:00
|
|
|
const handleReload = () => {
|
|
|
|
|
console.log('Reloading file list...');
|
|
|
|
|
gridApi.reload();
|
|
|
|
|
};
|
|
|
|
|
|
2025-05-27 19:31:37 +08:00
|
|
|
const handleAdd = () => {
|
|
|
|
|
addModalApi.open();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const handleDelete = async (row: any) => {
|
|
|
|
|
await postFilesDelete({
|
|
|
|
|
body: {
|
|
|
|
|
id: row.id,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
gridApi.reload();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const handleDown = async (row: any) => {
|
|
|
|
|
const { data } = await postFilesDownload({
|
|
|
|
|
body: { id: row.id },
|
|
|
|
|
responseType: 'blob',
|
|
|
|
|
});
|
|
|
|
|
const url = window.URL.createObjectURL(new Blob([data as Blob]));
|
|
|
|
|
const link = document.createElement('a');
|
|
|
|
|
link.href = url;
|
|
|
|
|
link.setAttribute('download', row.fileName);
|
|
|
|
|
document.body.append(link);
|
|
|
|
|
link.click();
|
|
|
|
|
link.remove();
|
|
|
|
|
window.URL.revokeObjectURL(url);
|
|
|
|
|
};
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<template>
|
|
|
|
|
<Page auto-content-height>
|
|
|
|
|
<Grid>
|
|
|
|
|
<template #toolbar-actions>
|
|
|
|
|
<TableAction
|
|
|
|
|
:actions="[
|
|
|
|
|
{
|
|
|
|
|
label: $t('common.upload'),
|
|
|
|
|
type: 'primary',
|
|
|
|
|
icon: 'ant-design:upload-outlined',
|
|
|
|
|
onClick: handleAdd.bind(null),
|
|
|
|
|
auth: ['FileManagement.File.Upload'],
|
|
|
|
|
},
|
|
|
|
|
]"
|
|
|
|
|
/>
|
|
|
|
|
</template>
|
|
|
|
|
<template #action="{ row }">
|
|
|
|
|
<TableAction
|
|
|
|
|
:actions="[
|
|
|
|
|
{
|
|
|
|
|
label: $t('common.delete'),
|
|
|
|
|
icon: 'ant-design:delete-outlined',
|
|
|
|
|
type: 'link',
|
|
|
|
|
size: 'small',
|
|
|
|
|
auth: ['FileManagement.File.Delete'],
|
|
|
|
|
popConfirm: {
|
|
|
|
|
title: $t('common.askConfirmDelete'),
|
|
|
|
|
confirm: handleDelete.bind(null, row),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
label: $t('common.download'),
|
|
|
|
|
icon: 'ant-design:download-outlined',
|
|
|
|
|
type: 'link',
|
|
|
|
|
size: 'small',
|
|
|
|
|
auth: ['FileManagement.File.Download'],
|
|
|
|
|
onClick: handleDown.bind(null, row),
|
|
|
|
|
},
|
|
|
|
|
]"
|
|
|
|
|
/>
|
|
|
|
|
</template>
|
|
|
|
|
</Grid>
|
2025-07-29 10:06:30 +08:00
|
|
|
<AddVbenModal @reload="handleReload" />
|
2025-05-27 19:31:37 +08:00
|
|
|
</Page>
|
|
|
|
|
</template>
|
|
|
|
|
<style scoped></style>
|