Sfoglia il codice sorgente

前端用户权限

Veronique 1 anno fa
parent
commit
545506f7ec

+ 69 - 0
conf/DesignItemPerms.json

@@ -0,0 +1,69 @@
+[
+  {
+    "type": "background",
+    "perms": [
+      {
+        "name": "背景颜色",
+        "code": "0"
+      },
+      {
+        "name": "背景尺寸",
+        "code": "1"
+      },
+      {
+        "name": "上传背景",
+        "code": "2"
+      }
+    ]
+  },
+  {
+    "type": "text",
+    "perms": [
+      {
+        "name": "文字内容",
+        "code": "0"
+      },
+      {
+        "name": "字号",
+        "code": "1"
+      },
+      {
+        "name": "字体",
+        "code": "2"
+      },
+      {
+        "name": "颜色",
+        "code": "3"
+      },
+      {
+        "name": "字间距",
+        "code": "4"
+      },
+      {
+        "name": "元素尺寸",
+        "code": "5"
+      },
+      {
+        "name": "元素位置",
+        "code": "6"
+      }
+    ]
+  },
+  {
+    "type": "image",
+    "perms": [
+      {
+        "name": "上传图片",
+        "code": "0"
+      },
+      {
+        "name": "图片尺寸",
+        "code": "1"
+      },
+      {
+        "name": "图片位置",
+        "code": "2"
+      }
+    ]
+  }
+]

+ 78 - 4
sdBusiness/src/main/java/com/sdtool/business/service/mall/DesignServiceImpl.java

@@ -268,6 +268,16 @@ public class DesignServiceImpl extends BaseService implements DesignService {
 
         if (redisTemplate == null) return RetResult.<DesignTemplate>errorT().retinfo("模板id不正确");
         else {
+            //从文件读取设计json
+            String fileName = designContentRoot + File.separator + supplierCode +
+                    File.separator + redisTemplate.getId() + ".txt";
+            Path path = Paths.get(fileName);
+            try {
+                redisTemplate.setJsonContent(Files.readString(path, StandardCharsets.UTF_8));
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+
             fillParamsToTemplate(redisTemplate, params);
             return RetResult.<DesignTemplate>successT().result(redisTemplate);
         }
@@ -280,6 +290,9 @@ public class DesignServiceImpl extends BaseService implements DesignService {
         if (!templateRetResult.isSuccess()) return templateRetResult;
         DesignTemplate designTemplate = templateRetResult.getResult();
 
+        //给前端预处理一下权限
+        designTemplate.setJsonContent(preProcessTemplateContent(designTemplate.getJsonContent()));
+
         //将当前临时模板记录在redis中,设置个过期时间就行了
         redisService.setex(keysService.getRedisKey(RedisKeys.KEY_DESIGNER_DESIGN_TEMPLATE_SESSION, supplierCode, true)
                 + outerSessionId, tempTemplateExpire, designTemplate);
@@ -296,6 +309,67 @@ public class DesignServiceImpl extends BaseService implements DesignService {
             return RetResult.<DesignTemplate>successT().result(redisTemplate);
     }
 
+    //根据元素权限对元素进行一些限制
+    private String preProcessTemplateContent(String templateContent) {
+        RMap<String, Object> template = jsonConvert.convertFrom(RMap.class, templateContent);
+
+        List<HashMap<String, Object>> objects = jsonConvert.convertFrom(new TypeToken<List<HashMap<String, Object>>>() {
+        }.getType(), template.getString("objects"));
+
+        objects.forEach(object -> {
+            if (!object.get("id").equals("WorkSpaceDrawType") && object.get("name").equals("textbox")) {
+                //字
+                List<String> permsList = jsonConvert.convertFrom(new TypeToken<List<String>>() {
+                }.getType(), object.get("permissionsConfig").toString());
+                if (permsList.contains("0")) {
+                    //文字内容
+                    object.put("editable", true);
+                } else {
+                    object.put("editable", false);
+                }
+
+                if (permsList.contains("5")) {
+                    //大小
+                    object.put("hasControls", true);
+                } else {
+                    object.put("hasControls", false);
+                }
+
+                if (permsList.contains("6")) {
+                    //位置
+                    object.put("lockMovementX", false);
+                    object.put("lockMovementY", false);
+                } else {
+                    object.put("lockMovementX", true);
+                    object.put("lockMovementY", true);
+                }
+            } else if (!object.get("id").equals("WorkSpaceDrawType") && object.get("name").equals("image")) {
+                //图
+                List<String> permsList = jsonConvert.convertFrom(new TypeToken<List<String>>() {
+                }.getType(), object.get("permissionsConfig").toString());
+
+                if (permsList.contains("1")) {
+                    //大小
+                    object.put("hasControls", true);
+                } else {
+                    object.put("hasControls", false);
+                }
+
+                if (permsList.contains("2")) {
+                    //位置
+                    object.put("lockMovementX", false);
+                    object.put("lockMovementY", false);
+                } else {
+                    object.put("lockMovementX", true);
+                    object.put("lockMovementY", true);
+                }
+            }
+        });
+
+        template.set("objects", objects);
+        return jsonConvert.convertTo(template);
+    }
+
     //todo 转换fabric的元素结构
     private void convertJsonObjectsToTemplate(DesignTemplate designTemplate, String dataSourceId, long supplierCode) {
         FabricMain fabricMain = jsonConvert.convertFrom(FabricMain.class, designTemplate.getJsonContent());
@@ -320,8 +394,8 @@ public class DesignServiceImpl extends BaseService implements DesignService {
         for (HashMap<String, Object> object : fabricMain.getObjects()) {
             if (object.get("id").equals("WorkSpaceDrawType")) {
                 //背景对象
-                designOrder.setCanvasHeight(ERPUtils.px2mm(((BigDecimal) object.get("height")).doubleValue()));
-                designOrder.setCanvasWidth(ERPUtils.px2mm(((BigDecimal) object.get("width")).doubleValue()));
+                designOrder.setCanvasHeight(ERPUtils.px2mm(new BigDecimal(object.get("height").toString()).doubleValue()));
+                designOrder.setCanvasWidth(ERPUtils.px2mm(new BigDecimal(object.get("width").toString()).doubleValue()));
             }
 
             DesignOrderItem orderItem = new DesignOrderItem();
@@ -330,8 +404,8 @@ public class DesignServiceImpl extends BaseService implements DesignService {
             orderItem.setItemType(object.get("type").toString());
             orderItem.setLocationX(Double.parseDouble(object.get("left").toString()));
             orderItem.setLocationY(Double.parseDouble(object.get("top").toString()));
-            orderItem.setSizeWidth(ERPUtils.px2mm(((BigDecimal) object.get("width")).doubleValue()));
-            orderItem.setSizeHeight(ERPUtils.px2mm(((BigDecimal) object.get("height")).doubleValue()));
+            orderItem.setSizeWidth(ERPUtils.px2mm(new BigDecimal(object.get("width").toString()).doubleValue()));
+            orderItem.setSizeHeight(ERPUtils.px2mm(new BigDecimal(object.get("height").toString()).doubleValue()));
             orderItem.setRotation(Double.parseDouble(object.get("angle").toString()));
 
             orderItems.add(orderItem);

+ 43 - 0
sdCommon/src/main/java/com/sdtool/common/datas/design/TemplateItemType.java

@@ -0,0 +1,43 @@
+package com.sdtool.common.datas.design;
+
+import java.util.Objects;
+
+/**
+ * 设计模板元素类型
+ */
+@SuppressWarnings("unused")
+public enum TemplateItemType {
+    background("背景", "background"),
+    text("文本", "text"),
+    image("图片", "image");
+    private String name;
+    private String value;
+
+    TemplateItemType(String name, String value) {
+        this.name = name;
+        this.value = value;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public static String getName(String value) {
+        for (TemplateItemType p : TemplateItemType.values()) {
+            if (Objects.equals(p.getValue(), value)) return p.getName();
+        }
+        return null;
+    }
+}

+ 34 - 10
sdCommon/src/main/java/com/sdtool/common/entity/design/DesignTemplateItem.java

@@ -8,46 +8,54 @@ import org.rex.db.RColumn;
  * 设计元素
  */
 public class DesignTemplateItem extends BaseEntity {
-    @Comment("")
     @RColumn("id")
+    @Comment("")
     private long id;
 
-    @Comment("关联的模板id")
     @RColumn("idtemplate")
+    @Comment("关联的模板id")
     private long idTemplate;
 
-    @Comment("元素类型")
+    @Comment("元素展示名称")
+    @RColumn("itemname")
+    private String itemName;
+
     @RColumn("itemtype")
+    @Comment("元素类型")
     private String itemType;
 
-    @Comment("坐标x(锚点相对于拼版尺寸左上角)")
     @RColumn("locationx")
+    @Comment("坐标x(锚点相对于拼版尺寸左上角)")
     private double locationX;
 
-    @Comment("坐标y(锚点相对于拼版尺寸左上角)")
     @RColumn("locationy")
+    @Comment("坐标y(锚点相对于拼版尺寸左上角)")
     private double locationY;
 
-    @Comment("元素宽")
     @RColumn("sizewidth")
+    @Comment("元素宽")
     private double sizeWidth;
 
-    @Comment("元素高")
     @RColumn("sizeheight")
+    @Comment("元素高")
     private double sizeHeight;
 
-    @Comment("旋转角度")
     @RColumn("rotation")
+    @Comment("旋转角度")
     private double rotation;
 
-    @Comment("z轴顺序,0最底层")
     @RColumn("zindex")
+    @Comment("z轴顺序,0最底层")
     private int zIndex;
 
-    @Comment("元素属性json,通常是文件链接")
     @RColumn("jsoncontent")
+    @Comment("元素属性json,通常是文件链接")
     private String jsonContent;
 
+    @Comment("前台可编辑该元素的权限,逗号分隔,关联至DesignItemPerms.json")
+    @RColumn("permissionsconfig")
+    private String permissionsConfig;
+
     public long getId() {
         return id;
     }
@@ -127,4 +135,20 @@ public class DesignTemplateItem extends BaseEntity {
     public void setJsonContent(String jsonContent) {
         this.jsonContent = jsonContent;
     }
+
+    public String getItemName() {
+        return itemName;
+    }
+
+    public void setItemName(String itemName) {
+        this.itemName = itemName;
+    }
+
+    public String getPermissionsConfig() {
+        return permissionsConfig;
+    }
+
+    public void setPermissionsConfig(String permissionsConfig) {
+        this.permissionsConfig = permissionsConfig;
+    }
 }