Browse Source

文件上传新增 token 校验

jack.zhou 4 weeks ago
parent
commit
723bd9abc0

BIN
dist_0918_1.tar


+ 11 - 1
src/utils/upload.ts

@@ -8,6 +8,15 @@
  */
 import axios from 'axios'
 import { Local } from './storage'
+
+/**
+ * 文件上传统一请求头(上传服务要求 Authorization Bearer 认证)
+ * el-upload 通过 :headers="getUploadHeaders()" 绑定
+ */
+export function getUploadHeaders(): Record<string, string> {
+  const token = Local.get('token') || ''
+  return token ? { Authorization: `Bearer ${token}` } : {}
+}
 export function handleUpload(file: File) {
   return new Promise((resolve, reject) => {
     const formData = new FormData()
@@ -17,7 +26,8 @@ export function handleUpload(file: File) {
       .post(import.meta.env.VITE_UPLOAD, formData, {
         headers: {
           'Content-Type': 'multipart/form-data',
-          'Tenant': Local.get('Tenant')
+          'Tenant': Local.get('Tenant'),
+          'Authorization': `Bearer ${Local.get('token') || ''}`
         }
       })
       .then((res) => {

+ 7 - 6
src/view/Application.vue

@@ -158,7 +158,7 @@
           <el-col :span="12" class="mb16">
             <el-form-item label="生产许可证副本" prop="licenseNumberFile"
               :required="state.form.buyFrom === ProcurementChannels.PURCHASED_BY_MYSELF">
-              <el-upload v-model:file-list="licenseNumberFileList" class="upload-demo" :action="uploadUrl" :limit="1"
+              <el-upload v-model:file-list="licenseNumberFileList" class="upload-demo" :action="uploadUrl" :headers="getUploadHeaders()" :limit="1"
                 style="width: 100%" :before-upload="beforeAvatarFileUpload" :disabled="state.dialog.type === 'view'"
                 :on-preview="handlePreview" :on-remove="() => handleRemove(UploadFileType.LICENSE_NUMBER)"
                 :on-success="(res: any, file: UploadFile) => handleSuccess(res, UploadFileType.LICENSE_NUMBER, file)">
@@ -172,7 +172,7 @@
           <el-col :span="12" class="mb16">
             <el-form-item label="近三个月动物质量检测证明" prop="animalTestDateFile"
               :required="state.form.buyFrom === ProcurementChannels.PURCHASED_BY_MYSELF">
-              <el-upload v-model:file-list="animalTestDateFileList" class="upload-demo" :action="uploadUrl" :limit="1"
+              <el-upload v-model:file-list="animalTestDateFileList" class="upload-demo" :action="uploadUrl" :headers="getUploadHeaders()" :limit="1"
                 style="width: 100%" :before-upload="beforeAvatarFileUpload" :on-preview="handlePreview"
                 :disabled="state.dialog.type === 'view'"
                 :on-remove="() => handleRemove(UploadFileType.ANIMAL_TEST_DATE)"
@@ -186,7 +186,7 @@
         <el-row class="mt10" :gutter="20" v-if="state.form.buyFrom === ProcurementChannels.PURCHASED_BY_MYSELF">
           <el-col :span="12" class="mb16">
             <el-form-item label="基因鉴定报告" prop="geneIdentificationFile">
-              <el-upload v-model:file-list="geneIdentificationFileList" class="upload-demo" :action="uploadUrl"
+              <el-upload v-model:file-list="geneIdentificationFileList" class="upload-demo" :action="uploadUrl" :headers="getUploadHeaders()"
                 :limit="1" style="width: 100%" :before-upload="beforeAvatarFileUpload" :on-preview="handlePreview"
                 :disabled="state.dialog.type === 'view'"
                 :on-remove="() => handleRemove(UploadFileType.GENE_IDENTIFICATION_FILE)"
@@ -222,7 +222,7 @@
               <el-upload
                 v-model:file-list="cageAppointFileList"
                 class="upload-demo"
-                :action="uploadUrl"
+                :action="uploadUrl" :headers="getUploadHeaders()"
                 :limit="1"
                 style="width: 100%"
                 :before-upload="beforeAvatarFileUpload"
@@ -240,7 +240,7 @@
         <el-row class="mt10" :gutter="20">
           <el-col :span="12" class="mb16">
             <el-form-item label="实验动物福利伦理审查申请表" prop="ethicsCheckFile" required>
-              <el-upload v-model:file-list="ethicsCheckFileList" class="upload-demo" :action="uploadUrl" :limit="1"
+              <el-upload v-model:file-list="ethicsCheckFileList" class="upload-demo" :action="uploadUrl" :headers="getUploadHeaders()" :limit="1"
                 style="width: 100%" :before-upload="beforeAvatarFileUpload" :on-preview="handlePreview"
                 :disabled="state.dialog.type === 'view'"
                 :on-remove="() => handleRemove(UploadFileType.ETHICS_CHECK_FILE)"
@@ -254,7 +254,7 @@
         <el-row class="mt10" :gutter="20">
           <el-col :span="12" class="mb16">
             <el-form-item label="实验动物福利伦理审查意见表" prop="ethicsAdviceFile" required>
-              <el-upload v-model:file-list="ethicsAdviceFileList" class="upload-demo" :action="uploadUrl" :limit="1"
+              <el-upload v-model:file-list="ethicsAdviceFileList" class="upload-demo" :action="uploadUrl" :headers="getUploadHeaders()" :limit="1"
                 style="width: 100%" :before-upload="beforeAvatarFileUpload" :on-preview="handlePreview"
                 :disabled="state.dialog.type === 'view'"
                 :on-remove="() => handleRemove(UploadFileType.ETHICS_ADVICE_FILE)"
@@ -311,6 +311,7 @@
   } from '/@/constants/pageConstants';
 
   import { deepClone } from '/@/utils/other';
+  import { getUploadHeaders } from '/@/utils/upload';
   import { useUserInfo } from '/@/stores/userInfo';
 
   const uploadUrl = (import.meta as any).env.VITE_UPLOAD;

+ 3 - 2
src/view/entry/components/upload.vue

@@ -10,7 +10,7 @@
 				</div>
 				<h4 class="mb8 mt8">信息上传</h4>
 				<el-form-item label="缴费单" prop="billList">
-					<el-upload :accept="state.SUPPORT_FILE_UPLOAD_TYPE_MAX" :action="uploadUrl" :on-success="billSuccess" :limit="1" clearable class="w100" v-model:file-list="state.form.billList" >
+					<el-upload :accept="state.SUPPORT_FILE_UPLOAD_TYPE_MAX" :action="uploadUrl" :headers="getUploadHeaders()" :on-success="billSuccess" :limit="1" clearable class="w100" v-model:file-list="state.form.billList" >
 						<template #trigger>
 							<el-button type="primary">点击上传</el-button>
 						</template>
@@ -18,7 +18,7 @@
 				</el-form-item>
 				<el-form-item label="其它附件" prop="group">
 					<el-upload
-            :accept="state.SUPPORT_FILE_UPLOAD_TYPE_MAX" :action="uploadUrl" :on-success="otherSuccess" clearable class="w100" v-model:file-list="state.form.fileList">
+            :accept="state.SUPPORT_FILE_UPLOAD_TYPE_MAX" :action="uploadUrl" :headers="getUploadHeaders()" :on-success="otherSuccess" clearable class="w100" v-model:file-list="state.form.fileList">
 						<template #trigger>
 							<el-button type="primary">点击上传</el-button>
 						</template>
@@ -47,6 +47,7 @@ import { useUserInfo } from '/@/stores/userInfo';
 import { storeToRefs } from 'pinia';
 import { useDictApi } from '/@/api/base/system/dict';
 import { SUPPORT_FILE_UPLOAD_TYPE_MAX } from '/@/constants/pageConstants'
+import { getUploadHeaders } from '/@/utils/upload'
 
 const stores = useUserInfo();
 const { userInfos } = storeToRefs(stores);

+ 2 - 0
src/view/instr/addAuthorization/index.vue

@@ -91,6 +91,7 @@
                 :class="{ disUoloadSty: state.form.fileList.length > 0 }"
                 v-model:file-list="state.form.fileList"
                 :action="uploadUrl"
+                :headers="getUploadHeaders()"
                 :limit="1"
                 style="width: 100%"
                 accept=".jpg,.png"
@@ -152,6 +153,7 @@
   const grantApi = useGrantApi()
   const grantApplyApi = useGrantApplyApi()
   import { deepClone } from '/@/utils/other'
+  import { getUploadHeaders } from '/@/utils/upload'
   import { storeToRefs } from 'pinia'
   import mittBus from '/@/utils/mitt'
   import { useUserInfo } from '/@/stores/userInfo'

+ 2 - 0
src/view/todo/component/approveTasks.vue

@@ -31,6 +31,7 @@
                 ref="upload"
                 :file-list="state.form.fileList"
                 :action="uploadUrl"
+                :headers="getUploadHeaders()"
                 :before-upload="beforeAvatarFileUpload"
                 :on-success="handleSuccess"
                 :limit="1"
@@ -62,6 +63,7 @@
   import type { UploadFile, UploadUserFile, UploadProps, UploadRawFile } from 'element-plus'
   import { genFileId } from 'element-plus'
   import { Session } from '/@/utils/storage'
+  import { getUploadHeaders } from '/@/utils/upload'
   import { SUPPORT_FILE_UPLOAD_TYPE_MAX } from '/@/constants/pageConstants'
 
   // 定义变量内容

+ 3 - 1
src/view/user/edit.vue

@@ -80,6 +80,7 @@ import { useDictApi } from '/@/api/system/dict'
 import Cropper from 'cropperjs'
 import 'cropperjs/dist/cropper.css'
 import axios from 'axios'
+import { Local } from '/@/utils/storage'
 import { userImgSize } from '/@/constants/pageConstants'
 import { getResourceUrl } from '/@/utils/url'
 
@@ -221,7 +222,8 @@ const uploadBaseFunc = (file) => {
   axios
     .post(uploadUrl, formData, {
       headers: {
-        'Content-Type': 'multipart/form-data'
+        'Content-Type': 'multipart/form-data',
+        'Authorization': `Bearer ${Local.get('token') || ''}`
       }
     })
     .then(async (res) => {