Browse Source

feat: 文件图片上传接口增加source来源,采用全路径存储

yanglzh 1 năm trước cách đây
mục cha
commit
607cf26c17

+ 15 - 12
src/api/device/index.ts

@@ -1,14 +1,17 @@
-import { get, post, del, put,file } from '/@/utils/request';
+import { get, post, del, put, file } from '/@/utils/request';
 
 export default {
-  common:{
-    singleImg: (data: object) => post('/common/singleImg', data),
+  common: {
+    singleImg: (data: FormData) => {
+      data.append('source', '0')
+      return post('/common/singleImg', data)
+    },
   },
   product: {
     // 设备属性设置
     propertySet: (data: object) => post('/product/property/set', data),
     // 获取设备接入信息 /product/?id=35
-    connect_intro: (id: string) => get('/product/connect_intro', {id}),
+    connect_intro: (id: string) => get('/product/connect_intro', { id }),
     getList: (params: object) => get('/product/page_list', params),
     getLists: (params: object) => get('/product/list', params),
     add: (data: object) => post('/product/add', data),
@@ -30,13 +33,13 @@ export default {
     // 脚本更新
     script: (data: object) => put('/product/script/update', data),
   },
-  category:{
+  category: {
     getList: (params: object) => get('/product/category/list', params),
     add: (data: object) => post('/product/category/add', data),
     edit: (data: object) => put('/product/category/edit', data),
     del: (id: number) => del('/product/category/del', { id }),
   },
-  instance:{
+  instance: {
     getList: (params: object) => get('/product/device/page_list', params),
     add: (data: object) => post('/product/device/add', data),
     edit: (data: object) => put('/product/device/edit', data),
@@ -63,23 +66,23 @@ export default {
     property: (params: object) => get('/product/tsl/property/list', params),
     propertyadd: (data: object) => post('/product/tsl/property/add', data),
     propertyedit: (data: object) => put('/product/tsl/property/edit', data),
-    propertydel: (productId: number,key:string) => del('/product/tsl/property/del', { productId,key }),
+    propertydel: (productId: number, key: string) => del('/product/tsl/property/del', { productId, key }),
 
     function: (params: object) => get('/product/tsl/function/list', params),
     functionadd: (data: object) => post('/product/tsl/function/add', data),
     functionedit: (data: object) => put('/product/tsl/function/edit', data),
-    functiondel: (productId: number,key:string) => del('/product/tsl/function/del', { productId,key }),
+    functiondel: (productId: number, key: string) => del('/product/tsl/function/del', { productId, key }),
 
 
     event: (params: object) => get('/product/tsl/event/list', params),
     eventadd: (data: object) => post('/product/tsl/event/add', data),
     eventedit: (data: object) => put('/product/tsl/event/edit', data),
-    eventdel: (productId: number,key:string) => del('/product/tsl/event/del', { productId,key }),
+    eventdel: (productId: number, key: string) => del('/product/tsl/event/del', { productId, key }),
 
     tag: (params: object) => get('/product/tsl/tag/list', params),
     tagadd: (data: object) => post('/product/tsl/tag/add', data),
     tagedit: (data: object) => put('/product/tsl/tag/edit', data),
-    tagdel: (productId: number,key:string) => del('/product/tsl/tag/del', { productId,key }),
+    tagdel: (productId: number, key: string) => del('/product/tsl/tag/del', { productId, key }),
   },
   tree: {
     getList: (params: object) => get('/product/device_tree/list', params),
@@ -102,6 +105,6 @@ export default {
     import: (data: object) => post('/product/device/import', data),
     export: (data: object) => file('/product/device/export', data),
   }
-  
-  
+
+
 }

+ 4 - 2
src/components/upload-wrapper/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="upload">
-    <el-upload class="hide" :accept="accept" :limit="1" :multiple="multiple" :headers="headers" :before-upload="beforeAvatarUpload" :action="uploadUrl" :on-success="updateImg">
+    <el-upload class="hide" :accept="accept" :limit="1" :data="{ source }" :multiple="multiple" :headers="headers" :before-upload="beforeAvatarUpload" :action="uploadUrl" :on-success="updateImg">
       <slot></slot>
     </el-upload>
   </div>
@@ -13,6 +13,8 @@ import getOrigin from '/@/utils/origin'
 
 const uploadUrl: string = getOrigin(import.meta.env.VITE_API_URL + '/common/singleImg');
 
+const source = JSON.parse(localStorage.sysinfo || '{"uploadFileWay": 0}').uploadFileWay;
+
 const headers = {
   Authorization: 'Bearer ' + localStorage.token,
 };
@@ -35,7 +37,7 @@ const props = defineProps({
 });
 
 const updateImg = (res: any) => {
-  const url = getOrigin(import.meta.env.VITE_SERVER_URL + '/' + res.data?.path)
+  const url = res?.data?.full_path
   emit('setImg', url, props.name);
 };
 

+ 6 - 5
src/components/upload/index.vue

@@ -6,6 +6,7 @@
 			:accept="accept"
 			list-type="picture-card"
 			:limit="limit"
+			:data="{ source }"
 			:multiple="multiple"
 			:headers="headers"
 			:before-upload="beforeAvatarUpload"
@@ -50,6 +51,8 @@ const headers = {
 
 const emit = defineEmits(['setImg', 'setImgs'])
 
+const source =  JSON.parse(localStorage.sysinfo || '{"uploadFileWay": 0}').uploadFileWay;
+
 const props = defineProps({
 	multiple: {
 		type: Boolean,
@@ -91,8 +94,7 @@ const fileList = ref<any[]>([
 const updateImg = () => {
 	const list = fileList.value.map((item) => {
 		if (item.response) {
-			return getOrigin(import.meta.env.VITE_SERVER_URL + '/' + item.response?.data?.path)
-			// return item.response?.data?.path;
+			return item.response?.data?.full_path
 		} else {
 			return item.url
 		}
@@ -103,7 +105,7 @@ const updateImg = () => {
 			emit('setImg', '');
 			return;
 		}
-		emit('setImg', props.widthHost ? img : img.replace(getOrigin(import.meta.env.VITE_SERVER_URL + '/'), ''));
+		emit('setImg', img);
 	} else {
 		emit('setImgs', list)
 		// if(props.keyName) {
@@ -133,8 +135,7 @@ watch(
 	() => props.img,
 	(img) => {
 		if (img) {
-			const theImg = props.widthHost ? img : getOrigin(import.meta.env.VITE_SERVER_URL + '/' + img)
-			fileList.value = [{ name: theImg, url: theImg }]
+			fileList.value = [{ name: img, url: img }]
 			updateImg()
 		} else {
 			fileList.value = []

+ 4 - 2
src/components/upload/uploadFile.vue

@@ -4,6 +4,7 @@
 		:show-file-list="false"
 		v-model:file-list="fileList"
 		:limit="1"
+		:data="{ source }"
 		:headers="headers"
 		:before-upload="beforeAvatarUpload"
 		:action="uploadUrl"
@@ -22,6 +23,8 @@ import { ElMessage } from 'element-plus';
 import type { UploadProps } from 'element-plus';
 import getOrigin from '/@/utils/origin';
 
+const source = JSON.parse(localStorage.sysinfo || '{"uploadFileWay": 0}').uploadFileWay;
+
 const headers = {
 	Authorization: 'Bearer ' + localStorage.token,
 };
@@ -37,7 +40,6 @@ const props = defineProps({
 		type: String,
 		default: '/common/singleFile',
 	},
-	// https://zhgy.sagoo.cn/api/v1/common/singleFile
 });
 
 const fileList = ref<any[]>([
@@ -56,7 +58,7 @@ const updateImg = (res: any) => {
 		ElMessage.error(res.message);
 	}
 	fileList.value = []
-	emit('update', res.data.path)
+	emit('update', res.data.full_path)
 };
 
 const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => {

+ 2 - 1
src/views/iot/certificate/component/editParams.vue

@@ -13,7 +13,7 @@
 			</el-form-item>
 			<el-form-item label="证书文件" prop="fileContent">
 				<el-input disabled v-if="state.ruleForm.fileContent" size="default" v-model="state.ruleForm.fileContent"></el-input>
-				<uploadFile @update="updateFile" url="/common/singleFile"></uploadFile>
+				<uploadFile @update="updateFile"></uploadFile>
 			</el-form-item>
 			<el-form-item label="证书公钥" prop="publicKeyContent">
 				<el-input size="default" disabled type="textarea" :rows="6" v-model="state.ruleForm.publicKeyContent"></el-input>
@@ -349,6 +349,7 @@ defineExpose({ openDialog })
 	overflow-y: auto;
 	overflow-x: hidden;
 }
+
 :deep(.el-upload-list) {
 	display: none;
 }

+ 3 - 1
src/views/iot/ota-update/update/component/edit.vue

@@ -44,7 +44,7 @@
         </el-form-item>
 
         <el-form-item label="选择升级包" prop="url">
-          <el-upload :file-list="fileList" :accept="['.doc', '.docx', '.zip', '.xls', '.xlsx', '.rar', '.jpg', '.jpeg', '.gif', '.npm', '.png', '.cert']" :show-file-list="false" :limit="1" :headers="headers" :action="uploadUrl" :on-success="updateImg">
+          <el-upload :file-list="fileList" :data="{ source }" :accept="['.doc', '.docx', '.zip', '.xls', '.xlsx', '.rar', '.jpg', '.jpeg', '.gif', '.npm', '.png', '.cert']" :show-file-list="false" :limit="1" :headers="headers" :action="uploadUrl" :on-success="updateImg">
             <el-button type="Default">上传升级包</el-button>
           </el-upload>
           <div v-if="ruleForm.urlName" style="color: green;margin-left: 10px;">{{ ruleForm.urlName }},上传成功</div>
@@ -113,6 +113,7 @@ export default defineComponent({
     const formRef = ref<HTMLElement | null>(null);
     const headers = { Authorization: 'Bearer ' + localStorage.token, };
     const uploadUrl: string = getOrigin(import.meta.env.VITE_API_URL + "/common/singleFile");
+    const source = JSON.parse(localStorage.sysinfo || '{"uploadFileWay": 0}').uploadFileWay;
     const areType = ref([
       {
         label: 'MD5',
@@ -255,6 +256,7 @@ export default defineComponent({
       areType,
       headers,
       uploadUrl,
+      source,
       fileList,
       urlName,
       updateImg,

+ 1 - 2
src/views/system/monitor/plugin/edit.vue

@@ -23,8 +23,7 @@
 				<el-input v-model="formData.author" placeholder="输入作者" />
 			</el-form-item>
 			<el-form-item label="插件图标" prop="icon">
-				<!-- <el-input v-model="formData.icon" placeholder="输入插件图标" /> -->
-				<uploadVue :width-host="false" :img="formData.icon" @set-img="setImage"></uploadVue>
+				<uploadVue :img="formData.icon" @set-img="setImage"></uploadVue>
 			</el-form-item>
 			<el-form-item label="插件网址" prop="link">
 				<el-input v-model="formData.link" placeholder="输入插件网址" />