整体平台上传功能大改造

This commit is contained in:
2026-09-09 10:49:57 +08:00
parent d2643a3697
commit de7225b61e
21 changed files with 3835 additions and 2622 deletions
+18 -1
View File
@@ -106,10 +106,27 @@ export function getFileById(id) {
*/
export function uploadFile(formData, options = {}) {
// 0 表示「未分类」,不能用 truthy 判断
if (options.cate !== undefined && options.cate !== null && options.cate !== "") {
// 调用方若已手动 append 过 cate,这里不再重复追加(避免 multipart 出现两个 cate)
if (
options.cate !== undefined &&
options.cate !== null &&
options.cate !== "" &&
!formData.has("cate")
) {
formData.append("cate", String(options.cate));
}
// scope: 'user' 表示上传到「我的个人文件」目录(backend/{tid}/{uid}/),
// 不传或 'tenant' 表示租户共享文件(backend/{tid}/)
if (options.scope && !formData.has("scope")) {
formData.append("scope", String(options.scope));
}
// tuid:显式指定归属用户(代他人上传场景),一般不需要传
if (options.tuid && !formData.has("tuid")) {
formData.append("tuid", String(options.tuid));
}
const config = {
url: "/backend/uploadfile",
method: "post",
@@ -151,7 +151,7 @@ const currentBanner = ref<Partial<Banner>>({
// 上传配置
// @ts-ignore
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL;
const uploadUrl = ref(API_BASE_URL + "/admin/uploadfiles");
const uploadUrl = ref(API_BASE_URL + "/backend/uploadfile");
const uploadHeaders = ref({
Authorization: "Bearer " + (localStorage.getItem("token") || ""),
});
@@ -117,7 +117,7 @@ const submitLoading = ref(false)
const formRef = ref(null)
// 上传配置
const uploadUrl = ref(API_BASE_URL + "/admin/uploadfiles");
const uploadUrl = ref(API_BASE_URL + "/backend/uploadfile");
const uploadHeaders = ref({
Authorization: "Bearer " + (localStorage.getItem("token") || ""),
});
@@ -222,7 +222,7 @@ const currentMenu = ref<Partial<Menu>>({
// 上传配置
// @ts-ignore
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL;
const uploadUrl = ref(API_BASE_URL + '/admin/uploadfiles');
const uploadUrl = ref(API_BASE_URL + '/backend/uploadfile');
const uploadHeaders = ref({
'Authorization': 'Bearer ' + (localStorage.getItem('token') || '')
});
@@ -126,7 +126,7 @@ const submitLoading = ref(false);
const formRef = ref(null);
// 上传配置
const uploadUrl = ref(API_BASE_URL + "/admin/uploadfiles");
const uploadUrl = ref(API_BASE_URL + "/backend/uploadfile");
const uploadHeaders = ref({
Authorization: "Bearer " + (localStorage.getItem("token") || ""),
});
@@ -127,7 +127,7 @@ const submitLoading = ref(false);
const formRef = ref(null);
// 上传配置
const uploadUrl = ref(API_BASE_URL + "/admin/uploadfiles");
const uploadUrl = ref(API_BASE_URL + "/backend/uploadfile");
const uploadHeaders = ref({
Authorization: "Bearer " + (localStorage.getItem("token") || ""),
});
@@ -748,7 +748,8 @@ const uploadFileToSystem = async rawFile => {
const formData = new FormData()
formData.append('file', rawFile)
formData.append('cate', 'reimbursement-invoice')
const uploadResponse = await uploadFile(formData)
// 报销票据归属到当前用户个人目录:backend/{tid}/{uid}/年月日/
const uploadResponse = await uploadFile(formData, { scope: 'user' })
if (uploadResponse?.code !== 200 && uploadResponse?.code !== 201) {
throw new Error(uploadResponse?.msg || `「${rawFile.name}」上传失败`)
}
@@ -300,7 +300,8 @@ function ensureImageName(file) {
async function uploadImage(file) {
const formData = new FormData();
formData.append("file", file);
const res = await uploadFile(formData);
// 日程图片归属到当前用户个人目录:backend/{tid}/{uid}/年月日/
const res = await uploadFile(formData, { scope: "user" });
if (res?.code !== 200 && res?.code !== 201) {
throw new Error(res?.msg || `「${file.name}」上传失败`);
}
@@ -24,7 +24,8 @@
<el-form-item label="资质图片" prop="file_url">
<el-upload
class="avatar-uploader"
action="/api/platform/common/upload"
:action="uploadAction"
:headers="uploadHeaders"
:show-file-list="false"
:on-success="handleUploadSuccess"
:before-upload="beforeAvatarUpload"
@@ -70,7 +71,13 @@
const submitting = ref(false);
const tenantName = ref('');
const formRef = ref();
// 上传地址:走租户后台通用上传接口(原 /api/platform/common/upload 后端不存在,会 404)
const uploadAction = import.meta.env.VITE_API_BASE_URL + '/backend/uploadfile';
const uploadHeaders = {
Authorization: 'Bearer ' + (localStorage.getItem('token') || '')
};
const formData = reactive({
tid: null,
type: '',