浏览代码

update 优化 文件与图片上传组件 使用id存储回显

疯狂的狮子li 2 年之前
父节点
当前提交
af6a08398e

+ 14 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java

@@ -32,6 +32,7 @@ import java.io.File;
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -58,6 +59,19 @@ public class SysOssController extends BaseController {
         return iSysOssService.queryPageList(bo, pageQuery);
     }
 
+    /**
+     * 查询OSS对象基于id串
+     */
+    @ApiOperation("查询OSS对象基于ID")
+    @SaCheckPermission("system:oss:list")
+    @GetMapping("/listByIds/{ossIds}")
+    public R<List<SysOssVo>> listByIds(@ApiParam("OSS对象ID串")
+                                     @NotEmpty(message = "主键不能为空")
+                                     @PathVariable Long[] ossIds) {
+        List<SysOssVo> list = iSysOssService.listByIds(Arrays.asList(ossIds));
+        return R.ok(list);
+    }
+
     /**
      * 上传OSS对象存储
      */

+ 3 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssService.java

@@ -8,6 +8,7 @@ import com.ruoyi.system.domain.vo.SysOssVo;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.Collection;
+import java.util.List;
 
 /**
  * 文件上传 服务层
@@ -18,6 +19,8 @@ public interface ISysOssService {
 
     TableDataInfo<SysOssVo> queryPageList(SysOssBo sysOss, PageQuery pageQuery);
 
+    List<SysOssVo> listByIds(Collection<Long> ossIds);
+
     SysOss getById(Long ossId);
 
     SysOss upload(MultipartFile file);

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java

@@ -42,6 +42,11 @@ public class SysOssServiceImpl implements ISysOssService {
         return TableDataInfo.build(result);
     }
 
+    @Override
+    public List<SysOssVo> listByIds(Collection<Long> ossIds) {
+        return baseMapper.selectVoById(ossIds);
+    }
+
     private LambdaQueryWrapper<SysOss> buildQueryWrapper(SysOssBo bo) {
         Map<String, Object> params = bo.getParams();
         LambdaQueryWrapper<SysOss> lqw = Wrappers.lambdaQuery();

+ 8 - 0
ruoyi-ui/src/api/system/oss.js

@@ -9,6 +9,14 @@ export function listOss(query) {
   })
 }
 
+// 查询OSS对象基于id串
+export function listByIds(ossId) {
+  return request({
+    url: '/system/oss/listByIds/' + ossId,
+    method: 'get'
+  })
+}
+
 // 删除OSS对象存储
 export function delOss(ossId) {
   return request({

+ 25 - 11
ruoyi-ui/src/components/FileUpload/index.vue

@@ -41,7 +41,7 @@
 
 <script>
 import { getToken } from "@/utils/auth";
-import { delOss } from "@/api/system/oss";
+import { listByIds, delOss } from "@/api/system/oss";
 
 export default {
   name: "FileUpload",
@@ -83,19 +83,24 @@ export default {
   },
   watch: {
     value: {
-      handler(val) {
+      async handler(val) {
         if (val) {
           let temp = 1;
           // 首先将值转为数组
-          const list = Array.isArray(val) ? val : this.value.split(',');
+          let list;
+          if (Array.isArray(val)) {
+            list = val;
+          } else {
+            await listByIds(val).then(res => {
+              list = res.data.map(oss => {
+                oss = { name: oss.originalName, url: oss.url, ossId: oss.ossId };
+                return oss;
+              });
+            })
+          }
           // 然后将数组转为对象数组
           this.fileList = list.map(item => {
-            // 字符串回显处理 如果此处存的是url可直接回显 如果存的是id需要调用接口查出来
-            if (typeof item === "string") {
-              item = { name: item, url: item };
-            } else {
-              item = { name: item.name, url: item.url, ossId: item.ossId };
-            }
+            item = { name: item.name, url: item.url, ossId: item.ossId };
             item.uid = item.uid || new Date().getTime() + temp++;
             return item;
           });
@@ -162,7 +167,7 @@ export default {
           this.fileList = this.fileList.concat(this.uploadList);
           this.uploadList = [];
           this.number = 0;
-          this.$emit("input", this.fileList);
+          this.$emit("input", this.listToString(this.fileList));
           this.$modal.closeLoading();
         }
       } else {
@@ -175,7 +180,7 @@ export default {
       let ossId = this.fileList[index].ossId;
       delOss(ossId);
       this.fileList.splice(index, 1);
-      this.$emit("input", this.fileList);
+      this.$emit("input", this.listToString(this.fileList));
     },
     // 获取文件名称
     getFileName(name) {
@@ -186,6 +191,15 @@ export default {
         return name;
       }
     },
+    // 对象转成指定字符串分隔
+    listToString(list, separator) {
+      let strs = "";
+      separator = separator || ",";
+      for (let i in list) {
+        strs += list[i].ossId + separator;
+      }
+      return strs != "" ? strs.substr(0, strs.length - 1) : "";
+    },
   },
 };
 </script>

+ 23 - 12
ruoyi-ui/src/components/ImageUpload/index.vue

@@ -44,7 +44,7 @@
 
 <script>
 import { getToken } from "@/utils/auth";
-import { delOss } from "@/api/system/oss";
+import { listByIds, delOss } from "@/api/system/oss";
 
 export default {
   props: {
@@ -87,19 +87,21 @@ export default {
   },
   watch: {
     value: {
-      handler(val) {
+      async handler(val) {
         if (val) {
           // 首先将值转为数组
-          const list = Array.isArray(val) ? val : this.value.split(',');
+          let list;
+          if (Array.isArray(val)) {
+            list = val;
+          } else {
+            await listByIds(val).then(res => {
+              list = res.data;
+            })
+          }
           // 然后将数组转为对象数组
           this.fileList = list.map(item => {
-            // 字符串回显处理 如果此处存的是url可直接回显 如果存的是id需要调用接口查出来
-            if (typeof item === "string") {
-              item = { name: item, url: item };
-            } else {
-              // 此处name使用ossId 防止删除出现重名
-              item = { name: item.ossId, url: item.url, ossId: item.ossId };
-            }
+            // 此处name使用ossId 防止删除出现重名
+            item = { name: item.ossId, url: item.url, ossId: item.ossId };
             return item;
           });
         } else {
@@ -125,7 +127,7 @@ export default {
         let ossId = this.fileList[findex].ossId;
         delOss(ossId);
         this.fileList.splice(findex, 1);
-        this.$emit("input", this.fileList);
+        this.$emit("input", this.listToString(this.fileList));
       }
     },
     // 上传成功回调
@@ -136,7 +138,7 @@ export default {
           this.fileList = this.fileList.concat(this.uploadList);
           this.uploadList = [];
           this.number = 0;
-          this.$emit("input", this.fileList);
+          this.$emit("input", this.listToString(this.fileList));
           this.$modal.closeLoading();
         }
       } else {
@@ -189,6 +191,15 @@ export default {
       this.dialogImageUrl = file.url;
       this.dialogVisible = true;
     },
+    // 对象转成指定字符串分隔
+    listToString(list, separator) {
+      let strs = "";
+      separator = separator || ",";
+      for (let i in list) {
+        strs += list[i].ossId + separator;
+      }
+      return strs != "" ? strs.substr(0, strs.length - 1) : "";
+    },
   }
 };
 </script>