feat(oss): 添加测试上传功能

新增上传测试模态框组件,支持图片和文件上传测试
在OSS管理页面添加测试上传按钮
为上传API添加Content-Type头部配置
修复全屏引导hook的类型断言问题
This commit is contained in:
dap
2026-01-20 11:29:56 +08:00
parent 1246f8f77b
commit 7b74975819
4 changed files with 71 additions and 2 deletions

View File

@@ -1,6 +1,7 @@
import type { AxiosRequestConfig } from '@vben/request'; import type { AxiosRequestConfig } from '@vben/request';
import { alovaInstance } from '#/utils/http'; import { alovaInstance } from '#/utils/http';
import { ContentTypeEnum } from '#/utils/http/helper';
/** /**
* Axios上传进度事件 * Axios上传进度事件
@@ -33,7 +34,12 @@ export function uploadApi(
return alovaInstance.post<UploadResult>( return alovaInstance.post<UploadResult>(
'/resource/oss/upload', '/resource/oss/upload',
{ file, ...otherData }, { file, ...otherData },
{ timeout: 60_000 }, {
timeout: 60_000,
headers: {
'Content-Type': ContentTypeEnum.FORM_DATA,
},
},
); );
} }

View File

@@ -35,7 +35,7 @@ export function useFullScreenGuide() {
target: () => target: () =>
document.querySelector( document.querySelector(
'div#menu-select-table .vxe-tools--operate > button[title="全屏"]', 'div#menu-select-table .vxe-tools--operate > button[title="全屏"]',
)!, )! as HTMLElement,
}, },
]; ];

View File

@@ -30,6 +30,7 @@ import { columns, querySchema } from './data';
import fallbackImageBase64 from './fallback-image.txt?raw'; import fallbackImageBase64 from './fallback-image.txt?raw';
import fileUploadModal from './file-upload-modal.vue'; import fileUploadModal from './file-upload-modal.vue';
import imageUploadModal from './image-upload-modal.vue'; import imageUploadModal from './image-upload-modal.vue';
import uploadTestModal from './upload-test-modal.vue';
const formOptions: VbenFormProps = { const formOptions: VbenFormProps = {
commonConfig: { commonConfig: {
@@ -213,6 +214,9 @@ const [ImageUploadModal, imageUploadApi] = useVbenModal({
const [FileUploadModal, fileUploadApi] = useVbenModal({ const [FileUploadModal, fileUploadApi] = useVbenModal({
connectedComponent: fileUploadModal, connectedComponent: fileUploadModal,
}); });
const [UploadTestModal, uploadTestApi] = useVbenModal({
connectedComponent: uploadTestModal,
});
</script> </script>
<template> <template>
@@ -250,6 +254,12 @@ const [FileUploadModal, fileUploadApi] = useVbenModal({
> >
图片上传 图片上传
</a-button> </a-button>
<a-button
v-access:code="['system:oss:upload']"
@click="uploadTestApi.open"
>
测试上传
</a-button>
</Space> </Space>
</template> </template>
<template #url="{ row }"> <template #url="{ row }">
@@ -303,5 +313,6 @@ const [FileUploadModal, fileUploadApi] = useVbenModal({
</BasicTable> </BasicTable>
<ImageUploadModal @reload="tableApi.query" /> <ImageUploadModal @reload="tableApi.query" />
<FileUploadModal @reload="tableApi.query" /> <FileUploadModal @reload="tableApi.query" />
<UploadTestModal />
</Page> </Page>
</template> </template>

View File

@@ -0,0 +1,52 @@
<script setup lang="ts">
import { useVbenModal } from '@vben/common-ui';
import { useVbenForm } from '#/adapter/form';
const [Modal, modalApi] = useVbenModal({
title: '测试上传',
onConfirm: handleConfirm,
});
const [Form, formApi] = useVbenForm({
showDefaultActions: false,
layout: 'vertical',
schema: [
{
fieldName: 'images',
component: 'ImageUpload',
label: '图片上传',
componentProps: {
maxCount: 3,
},
},
{
fieldName: 'files',
component: 'FileUpload',
label: '文件上传',
},
],
});
async function handleConfirm() {
try {
modalApi.lock(true);
const { valid } = await formApi.validate();
if (!valid) {
return;
}
const data = await formApi.getValues();
console.log(data);
} catch (error) {
console.error(error);
} finally {
modalApi.lock(false);
}
}
</script>
<template>
<Modal>
<Form />
</Modal>
</template>