From 00b8e2d4a520623f1012c2022dcbcdc1e9f02f74 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Tue, 25 May 2021 18:58:47 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=E6=A8=A1=E6=9D=BF=E4=B8=8D=E5=85=81?= =?UTF-8?q?=E8=AE=B8=E9=87=8D=E5=90=8D=20=E4=BD=86=E6=98=AF=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E5=85=81=E8=AE=B8=E8=A6=86=E7=9B=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commons/constants/CommonConstants.java | 40 ++++++++++++++ .../commons/constants/SystemConstants.java | 13 ++--- .../panel/PanelTemplateController.java | 6 ++ .../controller/request/BaseTreeRequest.java | 2 +- .../request/panel/PanelTemplateRequest.java | 2 + .../service/panel/PanelTemplateService.java | 50 +++++++++++++++-- .../dataease/service/sys/SysAuthService.java | 2 +- frontend/src/api/system/template.js | 8 +++ frontend/src/lang/en.js | 6 ++ frontend/src/lang/tw.js | 7 +++ frontend/src/lang/zh.js | 6 ++ frontend/src/views/panel/list/PanelMain.vue | 10 +++- .../src/views/panel/list/PanelViewShow.vue | 9 +-- .../src/views/panel/list/SaveToTemplate.vue | 55 ++++++++++++++----- .../template/component/TemplateImport.vue | 44 ++++++++++++--- frontend/src/views/panel/template/index.vue | 2 + 16 files changed, 218 insertions(+), 44 deletions(-) create mode 100644 backend/src/main/java/io/dataease/commons/constants/CommonConstants.java diff --git a/backend/src/main/java/io/dataease/commons/constants/CommonConstants.java b/backend/src/main/java/io/dataease/commons/constants/CommonConstants.java new file mode 100644 index 0000000000..92335df625 --- /dev/null +++ b/backend/src/main/java/io/dataease/commons/constants/CommonConstants.java @@ -0,0 +1,40 @@ +package io.dataease.commons.constants; + +/** + * Author: wangjiahao + * Date: 2021-05-25 + * Description: + */ +public class CommonConstants { + + + //操作类型 + public static final class OPT_TYPE{ + + public static final String INSERT = "insert"; + + public static final String UPDATE = "update"; + + public static final String DELETE = "delete"; + + public static final String SELECT = "select"; + + } + + //操作类型 + public static final class CHECK_RESULT{ + + // 不存在 + public static final String NONE = "none"; + + // 全局存在 + public static final String EXIST_ALL= "exist_all"; + + // 当前用户存在 + public static final String EXIST_USER= "exist_user"; + + // 其他用户存在 + public static final String EXIST_OTHER= "exist_other"; + + } +} diff --git a/backend/src/main/java/io/dataease/commons/constants/SystemConstants.java b/backend/src/main/java/io/dataease/commons/constants/SystemConstants.java index 992ac0e8f1..f8ce4997c5 100644 --- a/backend/src/main/java/io/dataease/commons/constants/SystemConstants.java +++ b/backend/src/main/java/io/dataease/commons/constants/SystemConstants.java @@ -7,14 +7,11 @@ package io.dataease.commons.constants; */ public class SystemConstants { - public final static String WITH_EXTEND_NOW = "now"; - public final static String WITH_EXTEND_PARENT = "parent"; - public final static String WITH_EXTEND_CHILDREN = "children"; - - - public final static int PRIVILEGE_VALUE_ON= 1; - public final static int PRIVILEGE_VALUE_OFF = 0; - + public static final class WITH_EXTEND{ + public final static String NOW = "now"; + public final static String PARENT = "parent"; + public final static String CHILDREN = "children"; + } diff --git a/backend/src/main/java/io/dataease/controller/panel/PanelTemplateController.java b/backend/src/main/java/io/dataease/controller/panel/PanelTemplateController.java index a90ddd7114..c4de49468a 100644 --- a/backend/src/main/java/io/dataease/controller/panel/PanelTemplateController.java +++ b/backend/src/main/java/io/dataease/controller/panel/PanelTemplateController.java @@ -49,4 +49,10 @@ public class PanelTemplateController { } + @PostMapping("/nameCheck") + public String nameCheck(@RequestBody PanelTemplateRequest request) { + return panelTemplateService.nameCheck(request); + } + + } diff --git a/backend/src/main/java/io/dataease/controller/request/BaseTreeRequest.java b/backend/src/main/java/io/dataease/controller/request/BaseTreeRequest.java index a575af59fa..d282a2e40f 100644 --- a/backend/src/main/java/io/dataease/controller/request/BaseTreeRequest.java +++ b/backend/src/main/java/io/dataease/controller/request/BaseTreeRequest.java @@ -22,7 +22,7 @@ public class BaseTreeRequest { private String pid; //now 返回当前条件查询的数据 parent 返回当前数据查询的数据同时递归父节点数据; children 返回当前数据查询的数据同时递归子节点数据 - private String withExtend= SystemConstants.WITH_EXTEND_NOW; + private String withExtend= SystemConstants.WITH_EXTEND.NOW; private String createBy; diff --git a/backend/src/main/java/io/dataease/controller/request/panel/PanelTemplateRequest.java b/backend/src/main/java/io/dataease/controller/request/panel/PanelTemplateRequest.java index a7f57e485f..283931d140 100644 --- a/backend/src/main/java/io/dataease/controller/request/panel/PanelTemplateRequest.java +++ b/backend/src/main/java/io/dataease/controller/request/panel/PanelTemplateRequest.java @@ -12,6 +12,8 @@ import lombok.Data; public class PanelTemplateRequest extends PanelTemplateWithBLOBs { private String sort; + private String optType; + private Boolean withChildren = false; public PanelTemplateRequest() { diff --git a/backend/src/main/java/io/dataease/service/panel/PanelTemplateService.java b/backend/src/main/java/io/dataease/service/panel/PanelTemplateService.java index 66a7adfc21..2d56368bb8 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelTemplateService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelTemplateService.java @@ -3,15 +3,20 @@ package io.dataease.service.panel; import io.dataease.base.domain.*; import io.dataease.base.mapper.PanelTemplateMapper; import io.dataease.base.mapper.ext.ExtPanelTemplateMapper; +import io.dataease.commons.constants.CommonConstants; import io.dataease.commons.constants.PanelConstants; +import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.BeanUtils; import io.dataease.controller.request.panel.PanelTemplateRequest; import io.dataease.dto.panel.PanelTemplateDTO; +import io.dataease.i18n.Translator; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.List; @@ -54,16 +59,30 @@ public class PanelTemplateService { } + @Transactional public PanelTemplateDTO save(PanelTemplateRequest request) { if (StringUtils.isEmpty(request.getId())) { - //如果level 是0(第一级)设置父级为对应的templateType - if(request.getLevel()==0){ - request.setPid(request.getTemplateType()); - } request.setId(UUID.randomUUID().toString()); request.setCreateTime(System.currentTimeMillis()); + request.setCreateBy(AuthUtils.getUser().getUsername()); + //如果level 是0(第一级)指的是分类目录 设置父级为对应的templateType + if(request.getLevel()==0){ + request.setPid(request.getTemplateType()); + String nameCheckResult = this.nameCheck(CommonConstants.OPT_TYPE.INSERT,request.getName(),request.getPid(),null); + if(CommonConstants.CHECK_RESULT.EXIST_ALL.equals(nameCheckResult)){ + throw new RuntimeException(Translator.get("i18n_same_folder_can_not_repeat")); + } + }else{//模板插入 相同文件夹同名的模板进行覆盖(先删除) + PanelTemplateExample exampleDelete = new PanelTemplateExample(); + exampleDelete.createCriteria().andPidEqualTo(request.getPid()).andNameEqualTo(request.getName()); + panelTemplateMapper.deleteByExample(exampleDelete); + } panelTemplateMapper.insert(request); } else { + String nameCheckResult = this.nameCheck(CommonConstants.OPT_TYPE.UPDATE,request.getName(),request.getPid(),request.getId()); + if(CommonConstants.CHECK_RESULT.EXIST_ALL.equals(nameCheckResult)){ + throw new RuntimeException(Translator.get("i18n_same_folder_can_not_repeat")); + } panelTemplateMapper.updateByPrimaryKeySelective(request); } PanelTemplateDTO panelTemplateDTO = new PanelTemplateDTO(); @@ -73,6 +92,29 @@ public class PanelTemplateService { } + //名称检查 + public String nameCheck(String optType,String name,String pid,String id){ + PanelTemplateExample example = new PanelTemplateExample(); + if(CommonConstants.OPT_TYPE.INSERT.equals(optType)){ + example.createCriteria().andPidEqualTo(pid).andNameEqualTo(name); + + }else if(CommonConstants.OPT_TYPE.UPDATE.equals(optType)){ + example.createCriteria().andPidEqualTo(pid).andNameEqualTo(name).andIdNotEqualTo(id); + } + List panelTemplates = panelTemplateMapper.selectByExample(example); + if(CollectionUtils.isEmpty(panelTemplates)){ + return CommonConstants.CHECK_RESULT.NONE; + }else{ + return CommonConstants.CHECK_RESULT.EXIST_ALL; + } + } + + public String nameCheck(PanelTemplateRequest request){ + return nameCheck(request.getOptType(),request.getName(),request.getPid(),request.getId()); + + } + + public void delete(String id){ Assert.notNull(id, "id cannot be null"); panelTemplateMapper.deleteByPrimaryKey(id); diff --git a/backend/src/main/java/io/dataease/service/sys/SysAuthService.java b/backend/src/main/java/io/dataease/service/sys/SysAuthService.java index 0933492077..619a636bda 100644 --- a/backend/src/main/java/io/dataease/service/sys/SysAuthService.java +++ b/backend/src/main/java/io/dataease/service/sys/SysAuthService.java @@ -103,7 +103,7 @@ public class SysAuthService { } private List getAuthModels(String id, String type) { - List vAuthModelDTOS = searchAuthModelTree(new BaseTreeRequest(id,type, SystemConstants.WITH_EXTEND_CHILDREN)); + List vAuthModelDTOS = searchAuthModelTree(new BaseTreeRequest(id,type, SystemConstants.WITH_EXTEND.CHILDREN)); List authSources = Optional.ofNullable(vAuthModelDTOS).orElse(new ArrayList<>()).stream().map(VAuthModelDTO::getId) .collect(Collectors.toList()); return authSources; diff --git a/frontend/src/api/system/template.js b/frontend/src/api/system/template.js index 2259c59e36..5b83b15bcb 100644 --- a/frontend/src/api/system/template.js +++ b/frontend/src/api/system/template.js @@ -36,3 +36,11 @@ export function find(data) { method: 'post' }) } + +export function nameCheck(data) { + return request({ + url: '/template/nameCheck', + data: data, + method: 'post' + }) +} diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 21ece828dd..f3de74961e 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -960,5 +960,11 @@ export default { enterprise: 'Enterprise', suport: 'Get technical support', update_success: 'Update Success' + }, + template: { + exit_same_template_check: 'The Same Name Exists In Now Class. Do You Want To Override It?', + override: 'Override', + cancel: '取消', + confirm_upload: 'Upload Confirm' } } diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 3d88a4efd5..dc97f01857 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -959,5 +959,12 @@ export default { enterprise: '企業版', suport: '獲取技術支持', update_success: '更新成功' + }, + template: { + exit_same_template_check: '当前存在相同名称模板,是否覆盖?', + override: '覆盖', + cancel: '取消', + confirm_upload: '上传确认' } + } diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 673e9832f5..fc6d405ac1 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -962,5 +962,11 @@ export default { enterprise: '企业版', suport: '获取技术支持', update_success: '更新成功' + }, + template: { + exit_same_template_check: '当前分类存在相同名称模板,是否覆盖?', + override: '覆盖', + cancel: '取消', + confirm_upload: '上传确认' } } diff --git a/frontend/src/views/panel/list/PanelMain.vue b/frontend/src/views/panel/list/PanelMain.vue index 1fc7311ba1..185287882e 100644 --- a/frontend/src/views/panel/list/PanelMain.vue +++ b/frontend/src/views/panel/list/PanelMain.vue @@ -17,7 +17,7 @@ - + @@ -41,6 +41,14 @@ export default { showEnshrine: false } }, + computed: { + mainActiveName() { + return this.$store.state.panel.mainActiveName + } + }, + mounted() { + this.$store.dispatch('panel/setMainActiveName', 'PanelMain') + }, methods: { handleClick(tab, event) { // 点击分析面板需要刷新分享内容 diff --git a/frontend/src/views/panel/list/PanelViewShow.vue b/frontend/src/views/panel/list/PanelViewShow.vue index 2c3be41bfd..97470bc007 100644 --- a/frontend/src/views/panel/list/PanelViewShow.vue +++ b/frontend/src/views/panel/list/PanelViewShow.vue @@ -40,7 +40,7 @@
- +
@@ -74,7 +74,7 @@ export default { data() { return { showMain: true, - templateInfo: '', + templateInfo: {}, templateSaveTitle: '保存为模板', templateSaveShow: false, hasStar: false @@ -84,9 +84,6 @@ export default { panelInfo() { return this.$store.state.panel.panelInfo }, - mainActiveName() { - return this.$store.state.panel.mainActiveName - }, ...mapState([ 'componentData', 'canvasStyleData' @@ -146,7 +143,7 @@ export default { }) }, refreshTemplateInfo() { - this.templateInfo = '' + this.templateInfo = {} html2canvas(this.$refs.imageWrapper).then(canvas => { const snapshot = canvas.toDataURL('image/jpeg', 0.2) // 0.2是图片质量 if (snapshot !== '') { diff --git a/frontend/src/views/panel/list/SaveToTemplate.vue b/frontend/src/views/panel/list/SaveToTemplate.vue index 2f1d332871..2a1350f6a1 100644 --- a/frontend/src/views/panel/list/SaveToTemplate.vue +++ b/frontend/src/views/panel/list/SaveToTemplate.vue @@ -1,7 +1,7 @@