diff --git a/backend/src/main/java/io/dataease/base/domain/PanelGroup.java b/backend/src/main/java/io/dataease/base/domain/PanelGroup.java index c52283a0f6..f93131545f 100644 --- a/backend/src/main/java/io/dataease/base/domain/PanelGroup.java +++ b/backend/src/main/java/io/dataease/base/domain/PanelGroup.java @@ -21,5 +21,13 @@ public class PanelGroup implements Serializable { private String panelType; + private String source; + + private String extend1; + + private String extend2; + + private String remark; + private static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/base/domain/PanelGroupExample.java b/backend/src/main/java/io/dataease/base/domain/PanelGroupExample.java index 51d02347ed..0455d45715 100644 --- a/backend/src/main/java/io/dataease/base/domain/PanelGroupExample.java +++ b/backend/src/main/java/io/dataease/base/domain/PanelGroupExample.java @@ -643,6 +643,286 @@ public class PanelGroupExample { addCriterion("panel_type not between", value1, value2, "panelType"); return (Criteria) this; } + + public Criteria andSourceIsNull() { + addCriterion("`source` is null"); + return (Criteria) this; + } + + public Criteria andSourceIsNotNull() { + addCriterion("`source` is not null"); + return (Criteria) this; + } + + public Criteria andSourceEqualTo(String value) { + addCriterion("`source` =", value, "source"); + return (Criteria) this; + } + + public Criteria andSourceNotEqualTo(String value) { + addCriterion("`source` <>", value, "source"); + return (Criteria) this; + } + + public Criteria andSourceGreaterThan(String value) { + addCriterion("`source` >", value, "source"); + return (Criteria) this; + } + + public Criteria andSourceGreaterThanOrEqualTo(String value) { + addCriterion("`source` >=", value, "source"); + return (Criteria) this; + } + + public Criteria andSourceLessThan(String value) { + addCriterion("`source` <", value, "source"); + return (Criteria) this; + } + + public Criteria andSourceLessThanOrEqualTo(String value) { + addCriterion("`source` <=", value, "source"); + return (Criteria) this; + } + + public Criteria andSourceLike(String value) { + addCriterion("`source` like", value, "source"); + return (Criteria) this; + } + + public Criteria andSourceNotLike(String value) { + addCriterion("`source` not like", value, "source"); + return (Criteria) this; + } + + public Criteria andSourceIn(List values) { + addCriterion("`source` in", values, "source"); + return (Criteria) this; + } + + public Criteria andSourceNotIn(List values) { + addCriterion("`source` not in", values, "source"); + return (Criteria) this; + } + + public Criteria andSourceBetween(String value1, String value2) { + addCriterion("`source` between", value1, value2, "source"); + return (Criteria) this; + } + + public Criteria andSourceNotBetween(String value1, String value2) { + addCriterion("`source` not between", value1, value2, "source"); + return (Criteria) this; + } + + public Criteria andExtend1IsNull() { + addCriterion("extend1 is null"); + return (Criteria) this; + } + + public Criteria andExtend1IsNotNull() { + addCriterion("extend1 is not null"); + return (Criteria) this; + } + + public Criteria andExtend1EqualTo(String value) { + addCriterion("extend1 =", value, "extend1"); + return (Criteria) this; + } + + public Criteria andExtend1NotEqualTo(String value) { + addCriterion("extend1 <>", value, "extend1"); + return (Criteria) this; + } + + public Criteria andExtend1GreaterThan(String value) { + addCriterion("extend1 >", value, "extend1"); + return (Criteria) this; + } + + public Criteria andExtend1GreaterThanOrEqualTo(String value) { + addCriterion("extend1 >=", value, "extend1"); + return (Criteria) this; + } + + public Criteria andExtend1LessThan(String value) { + addCriterion("extend1 <", value, "extend1"); + return (Criteria) this; + } + + public Criteria andExtend1LessThanOrEqualTo(String value) { + addCriterion("extend1 <=", value, "extend1"); + return (Criteria) this; + } + + public Criteria andExtend1Like(String value) { + addCriterion("extend1 like", value, "extend1"); + return (Criteria) this; + } + + public Criteria andExtend1NotLike(String value) { + addCriterion("extend1 not like", value, "extend1"); + return (Criteria) this; + } + + public Criteria andExtend1In(List values) { + addCriterion("extend1 in", values, "extend1"); + return (Criteria) this; + } + + public Criteria andExtend1NotIn(List values) { + addCriterion("extend1 not in", values, "extend1"); + return (Criteria) this; + } + + public Criteria andExtend1Between(String value1, String value2) { + addCriterion("extend1 between", value1, value2, "extend1"); + return (Criteria) this; + } + + public Criteria andExtend1NotBetween(String value1, String value2) { + addCriterion("extend1 not between", value1, value2, "extend1"); + return (Criteria) this; + } + + public Criteria andExtend2IsNull() { + addCriterion("extend2 is null"); + return (Criteria) this; + } + + public Criteria andExtend2IsNotNull() { + addCriterion("extend2 is not null"); + return (Criteria) this; + } + + public Criteria andExtend2EqualTo(String value) { + addCriterion("extend2 =", value, "extend2"); + return (Criteria) this; + } + + public Criteria andExtend2NotEqualTo(String value) { + addCriterion("extend2 <>", value, "extend2"); + return (Criteria) this; + } + + public Criteria andExtend2GreaterThan(String value) { + addCriterion("extend2 >", value, "extend2"); + return (Criteria) this; + } + + public Criteria andExtend2GreaterThanOrEqualTo(String value) { + addCriterion("extend2 >=", value, "extend2"); + return (Criteria) this; + } + + public Criteria andExtend2LessThan(String value) { + addCriterion("extend2 <", value, "extend2"); + return (Criteria) this; + } + + public Criteria andExtend2LessThanOrEqualTo(String value) { + addCriterion("extend2 <=", value, "extend2"); + return (Criteria) this; + } + + public Criteria andExtend2Like(String value) { + addCriterion("extend2 like", value, "extend2"); + return (Criteria) this; + } + + public Criteria andExtend2NotLike(String value) { + addCriterion("extend2 not like", value, "extend2"); + return (Criteria) this; + } + + public Criteria andExtend2In(List values) { + addCriterion("extend2 in", values, "extend2"); + return (Criteria) this; + } + + public Criteria andExtend2NotIn(List values) { + addCriterion("extend2 not in", values, "extend2"); + return (Criteria) this; + } + + public Criteria andExtend2Between(String value1, String value2) { + addCriterion("extend2 between", value1, value2, "extend2"); + return (Criteria) this; + } + + public Criteria andExtend2NotBetween(String value1, String value2) { + addCriterion("extend2 not between", value1, value2, "extend2"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } } public static class Criteria extends GeneratedCriteria { diff --git a/backend/src/main/java/io/dataease/base/mapper/PanelGroupMapper.xml b/backend/src/main/java/io/dataease/base/mapper/PanelGroupMapper.xml index 1e6d5bf97b..0e6fc9a125 100644 --- a/backend/src/main/java/io/dataease/base/mapper/PanelGroupMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/PanelGroupMapper.xml @@ -10,6 +10,10 @@ + + + + @@ -74,7 +78,8 @@ - id, `name`, pid, `level`, node_type, create_by, create_time, panel_type + id, `name`, pid, `level`, node_type, create_by, create_time, panel_type, `source`, + extend1, extend2, remark panel_style, panel_data @@ -130,12 +135,14 @@ insert into panel_group (id, `name`, pid, `level`, node_type, create_by, - create_time, panel_type, panel_style, - panel_data) + create_time, panel_type, `source`, + extend1, extend2, remark, + panel_style, panel_data) values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{pid,jdbcType=VARCHAR}, #{level,jdbcType=INTEGER}, #{nodeType,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, - #{createTime,jdbcType=BIGINT}, #{panelType,jdbcType=VARCHAR}, #{panelStyle,jdbcType=LONGVARCHAR}, - #{panelData,jdbcType=LONGVARCHAR}) + #{createTime,jdbcType=BIGINT}, #{panelType,jdbcType=VARCHAR}, #{source,jdbcType=VARCHAR}, + #{extend1,jdbcType=VARCHAR}, #{extend2,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR}, + #{panelStyle,jdbcType=LONGVARCHAR}, #{panelData,jdbcType=LONGVARCHAR}) insert into panel_group @@ -164,6 +171,18 @@ panel_type, + + `source`, + + + extend1, + + + extend2, + + + remark, + panel_style, @@ -196,6 +215,18 @@ #{panelType,jdbcType=VARCHAR}, + + #{source,jdbcType=VARCHAR}, + + + #{extend1,jdbcType=VARCHAR}, + + + #{extend2,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR}, + #{panelStyle,jdbcType=LONGVARCHAR}, @@ -237,6 +268,18 @@ panel_type = #{record.panelType,jdbcType=VARCHAR}, + + `source` = #{record.source,jdbcType=VARCHAR}, + + + extend1 = #{record.extend1,jdbcType=VARCHAR}, + + + extend2 = #{record.extend2,jdbcType=VARCHAR}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + panel_style = #{record.panelStyle,jdbcType=LONGVARCHAR}, @@ -258,6 +301,10 @@ create_by = #{record.createBy,jdbcType=VARCHAR}, create_time = #{record.createTime,jdbcType=BIGINT}, panel_type = #{record.panelType,jdbcType=VARCHAR}, + `source` = #{record.source,jdbcType=VARCHAR}, + extend1 = #{record.extend1,jdbcType=VARCHAR}, + extend2 = #{record.extend2,jdbcType=VARCHAR}, + remark = #{record.remark,jdbcType=VARCHAR}, panel_style = #{record.panelStyle,jdbcType=LONGVARCHAR}, panel_data = #{record.panelData,jdbcType=LONGVARCHAR} @@ -273,7 +320,11 @@ node_type = #{record.nodeType,jdbcType=VARCHAR}, create_by = #{record.createBy,jdbcType=VARCHAR}, create_time = #{record.createTime,jdbcType=BIGINT}, - panel_type = #{record.panelType,jdbcType=VARCHAR} + panel_type = #{record.panelType,jdbcType=VARCHAR}, + `source` = #{record.source,jdbcType=VARCHAR}, + extend1 = #{record.extend1,jdbcType=VARCHAR}, + extend2 = #{record.extend2,jdbcType=VARCHAR}, + remark = #{record.remark,jdbcType=VARCHAR} @@ -302,6 +353,18 @@ panel_type = #{panelType,jdbcType=VARCHAR}, + + `source` = #{source,jdbcType=VARCHAR}, + + + extend1 = #{extend1,jdbcType=VARCHAR}, + + + extend2 = #{extend2,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR}, + panel_style = #{panelStyle,jdbcType=LONGVARCHAR}, @@ -320,6 +383,10 @@ create_by = #{createBy,jdbcType=VARCHAR}, create_time = #{createTime,jdbcType=BIGINT}, panel_type = #{panelType,jdbcType=VARCHAR}, + `source` = #{source,jdbcType=VARCHAR}, + extend1 = #{extend1,jdbcType=VARCHAR}, + extend2 = #{extend2,jdbcType=VARCHAR}, + remark = #{remark,jdbcType=VARCHAR}, panel_style = #{panelStyle,jdbcType=LONGVARCHAR}, panel_data = #{panelData,jdbcType=LONGVARCHAR} where id = #{id,jdbcType=VARCHAR} @@ -332,7 +399,11 @@ node_type = #{nodeType,jdbcType=VARCHAR}, create_by = #{createBy,jdbcType=VARCHAR}, create_time = #{createTime,jdbcType=BIGINT}, - panel_type = #{panelType,jdbcType=VARCHAR} + panel_type = #{panelType,jdbcType=VARCHAR}, + `source` = #{source,jdbcType=VARCHAR}, + extend1 = #{extend1,jdbcType=VARCHAR}, + extend2 = #{extend2,jdbcType=VARCHAR}, + remark = #{remark,jdbcType=VARCHAR} where id = #{id,jdbcType=VARCHAR} \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartGroupMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartGroupMapper.xml index 1485f0a0d7..111ae9cab0 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartGroupMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartGroupMapper.xml @@ -11,7 +11,7 @@ select - id, `name`, pid, `level`, `type`, create_by, create_time,`name` as label, + id, `name`, ifnull(pid,0) as pid, `level`, `type`, create_by, create_time,`name` as label, get_auths(id,'dataset',#{userId}) as `privileges` from (select GET_V_AUTH_MODEL_ID_P_USE (#{userId}, 'dataset') cids) t,dataset_group diff --git a/backend/src/main/java/io/dataease/commons/constants/PanelConstants.java b/backend/src/main/java/io/dataease/commons/constants/PanelConstants.java index 6d89f20521..0f952ea6cb 100644 --- a/backend/src/main/java/io/dataease/commons/constants/PanelConstants.java +++ b/backend/src/main/java/io/dataease/commons/constants/PanelConstants.java @@ -24,5 +24,14 @@ public class PanelConstants { public final static String PANEL_NODE_TYPE_PANEL = "panel"; + public final static String OPT_TYPE_INSERT="insert"; + + public final static String OPT_TYPE_UPDATE="update"; + + public final static String PANEL_GATHER_DEFAULT_PANEL = "default_panel"; + + public final static String PANEL_GATHER_PANEL_LIST = "panel_list"; + + } diff --git a/backend/src/main/java/io/dataease/commons/model/ITreeBase.java b/backend/src/main/java/io/dataease/commons/model/ITreeBase.java new file mode 100644 index 0000000000..67e1f08c7c --- /dev/null +++ b/backend/src/main/java/io/dataease/commons/model/ITreeBase.java @@ -0,0 +1,23 @@ +package io.dataease.commons.model; + +import java.util.List; + +/** + * Author: wangjiahao + * Date: 2021-05-24 + * Description: + */ +public interface ITreeBase { + + String getId(); + + void setId(String id); + + String getPid(); + + void setPid(String pid); + + List getChildren(); + + void setChildren(List children); +} diff --git a/backend/src/main/java/io/dataease/commons/utils/TreeUtils.java b/backend/src/main/java/io/dataease/commons/utils/TreeUtils.java new file mode 100644 index 0000000000..a85c6a6e22 --- /dev/null +++ b/backend/src/main/java/io/dataease/commons/utils/TreeUtils.java @@ -0,0 +1,53 @@ +package io.dataease.commons.utils; + +import io.dataease.commons.model.ITreeBase; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.util.Assert; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * Author: wangjiahao + * Date: 2021-05-24 + * Description:树构建工具 + */ +public class TreeUtils{ + + /** + * Description: rootPid 是根节点PID + */ + public static List mergeTree(List tree,String ... rootPid) { + Assert.notNull(rootPid, "Root Pid cannot be null"); + List result = new ArrayList<>(); + // 构建id-节点map映射 + Map treePidMap = tree.stream().collect(Collectors.toMap(T::getId, t -> t)); + tree.stream().forEach(node -> { + // 判断根节点 + if (Arrays.asList(rootPid).contains(node.getPid())) { + result.add(node); + } else { + //找到父元素 + T parentNode = treePidMap.get(node.getPid()); + if(parentNode==null){ + // 可能出现 rootPid 更高的节点 这个操作相当于截断 + return; + } + if (parentNode.getChildren() == null) { + parentNode.setChildren(new ArrayList()); + } + parentNode.getChildren().add(node); + } + }); + return result; + } + + /** + * Description: rootPid 是根节点PID 档期那默认是0 + */ + public static List mergeTree(List tree) { + return mergeTree(tree,"0"); + } + +} diff --git a/backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java b/backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java index 8079c55fd6..1699555b09 100644 --- a/backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java +++ b/backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java @@ -1,7 +1,9 @@ package io.dataease.controller.panel; import io.dataease.base.domain.DatasetGroup; +import io.dataease.base.domain.PanelGroup; import io.dataease.base.domain.PanelGroupWithBLOBs; +import io.dataease.controller.handler.annotation.I18n; import io.dataease.controller.request.dataset.DataSetGroupRequest; import io.dataease.controller.request.panel.PanelGroupRequest; import io.dataease.dto.dataset.DataSetGroupDTO; @@ -28,18 +30,18 @@ public class PanelGroupController { @PostMapping("/tree") public List tree(@RequestBody PanelGroupRequest request) { - request.setLevel(0); return panelGroupService.tree(request); } @PostMapping("/defaultTree") public List defaultTree(@RequestBody PanelGroupRequest request) { - return panelGroupService.getDefaultTree(request); + return panelGroupService.defaultTree(request); } @PostMapping("/save") - public PanelGroupDTO save(@RequestBody PanelGroupRequest request) { - return panelGroupService.save(request); + @I18n + public PanelGroup saveOrUpdate(@RequestBody PanelGroupRequest request) { + return panelGroupService.saveOrUpdate(request); } @PostMapping("/deleteCircle/{id}") diff --git a/backend/src/main/java/io/dataease/controller/sys/SysAuthController.java b/backend/src/main/java/io/dataease/controller/sys/SysAuthController.java index 853c6cacad..d21b9735a3 100644 --- a/backend/src/main/java/io/dataease/controller/sys/SysAuthController.java +++ b/backend/src/main/java/io/dataease/controller/sys/SysAuthController.java @@ -36,6 +36,7 @@ public class SysAuthController { @ApiOperation("查询视图") @PostMapping("/authModels") + @I18n public List authModels(@RequestBody BaseTreeRequest request){ return sysAuthService.searchAuthModelTree(request); } diff --git a/backend/src/main/java/io/dataease/dto/chart/ChartGroupDTO.java b/backend/src/main/java/io/dataease/dto/chart/ChartGroupDTO.java index 8bf22b540c..0a5f4c8d23 100644 --- a/backend/src/main/java/io/dataease/dto/chart/ChartGroupDTO.java +++ b/backend/src/main/java/io/dataease/dto/chart/ChartGroupDTO.java @@ -1,13 +1,14 @@ package io.dataease.dto.chart; import io.dataease.base.domain.DatasetGroup; +import io.dataease.commons.model.ITreeBase; import lombok.Data; import java.util.List; @Data -public class ChartGroupDTO extends DatasetGroup { +public class ChartGroupDTO extends DatasetGroup implements ITreeBase { private String label; private List children; diff --git a/backend/src/main/java/io/dataease/dto/dataset/DataSetGroupDTO.java b/backend/src/main/java/io/dataease/dto/dataset/DataSetGroupDTO.java index f6e71c08ee..c096646b73 100644 --- a/backend/src/main/java/io/dataease/dto/dataset/DataSetGroupDTO.java +++ b/backend/src/main/java/io/dataease/dto/dataset/DataSetGroupDTO.java @@ -1,6 +1,7 @@ package io.dataease.dto.dataset; import io.dataease.base.domain.DatasetGroup; +import io.dataease.commons.model.ITreeBase; import lombok.Data; import java.util.List; @@ -10,7 +11,7 @@ import java.util.List; * @Date 2021/2/20 8:17 下午 */ @Data -public class DataSetGroupDTO extends DatasetGroup { +public class DataSetGroupDTO extends DatasetGroup implements ITreeBase { private String label; private List children; diff --git a/backend/src/main/java/io/dataease/dto/panel/PanelGroupDTO.java b/backend/src/main/java/io/dataease/dto/panel/PanelGroupDTO.java index 836940835f..ea0037b069 100644 --- a/backend/src/main/java/io/dataease/dto/panel/PanelGroupDTO.java +++ b/backend/src/main/java/io/dataease/dto/panel/PanelGroupDTO.java @@ -1,8 +1,7 @@ package io.dataease.dto.panel; -import io.dataease.base.domain.PanelGroup; import io.dataease.base.domain.PanelGroupWithBLOBs; -import io.dataease.dto.chart.ChartViewDTO; +import io.dataease.commons.model.ITreeBase; import lombok.Data; import java.util.ArrayList; @@ -14,14 +13,15 @@ import java.util.List; * Description: */ @Data -public class PanelGroupDTO extends PanelGroupWithBLOBs { +public class PanelGroupDTO extends PanelGroupWithBLOBs implements ITreeBase { private String label; - private List children; - private Boolean leaf; private String privileges; + private List children = new ArrayList<>(); + + } diff --git a/backend/src/main/java/io/dataease/service/chart/ChartGroupService.java b/backend/src/main/java/io/dataease/service/chart/ChartGroupService.java index 46d9045038..c5dd35107e 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartGroupService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartGroupService.java @@ -5,6 +5,7 @@ import io.dataease.base.mapper.ChartGroupMapper; import io.dataease.base.mapper.ext.ExtChartGroupMapper; import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.BeanUtils; +import io.dataease.commons.utils.TreeUtils; import io.dataease.controller.request.chart.ChartGroupRequest; import io.dataease.controller.request.dataset.DataSetTableRequest; import io.dataease.dto.chart.ChartGroupDTO; @@ -71,29 +72,11 @@ public class ChartGroupService { } public List tree(ChartGroupRequest chartGroup) { + chartGroup.setLevel(null); chartGroup.setUserId(String.valueOf(AuthUtils.getUser().getUserId())); - if (chartGroup.getLevel() == null) { - chartGroup.setLevel(0); - } List treeInfo = extChartGroupMapper.search(chartGroup); - getAll(treeInfo, chartGroup); - return treeInfo; - } - - public void getAll(List list, ChartGroupRequest chartGroup) { - for (ChartGroupDTO obj : list) { - ChartGroupRequest newChartGroup = new ChartGroupRequest(); - newChartGroup.setUserId(String.valueOf(AuthUtils.getUser().getUserId())); - newChartGroup.setName(chartGroup.getName()); - newChartGroup.setType(chartGroup.getType()); - newChartGroup.setPid(obj.getId()); - newChartGroup.setSort(chartGroup.getSort()); - List treeInfo = extChartGroupMapper.search(newChartGroup); - obj.setChildren(treeInfo); - if (CollectionUtils.isNotEmpty(treeInfo)) { - getAll(treeInfo, chartGroup); - } - } + List result = TreeUtils.mergeTree(treeInfo); + return result; } public List getAllId(List list, List ids) { diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java index 92a88605dd..d3b31b2b58 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java @@ -7,6 +7,7 @@ import io.dataease.base.mapper.DatasetGroupMapper; import io.dataease.base.mapper.ext.ExtDataSetGroupMapper; import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.BeanUtils; +import io.dataease.commons.utils.TreeUtils; import io.dataease.controller.request.dataset.DataSetGroupRequest; import io.dataease.controller.request.dataset.DataSetTableRequest; import io.dataease.dto.dataset.DataSetGroupDTO; @@ -84,29 +85,11 @@ public class DataSetGroupService { } public List tree(DataSetGroupRequest datasetGroup) { + datasetGroup.setLevel(null); datasetGroup.setUserId(String.valueOf(AuthUtils.getUser().getUserId())); - if (datasetGroup.getLevel() == null) { - datasetGroup.setLevel(0); - } List treeInfo = extDataSetGroupMapper.search(datasetGroup); - getAll(treeInfo, datasetGroup); - return treeInfo; - } - - public void getAll(List list, DataSetGroupRequest datasetGroup) { - for (DataSetGroupDTO obj : list) { - DataSetGroupRequest newDataSetGroup = new DataSetGroupRequest(); - newDataSetGroup.setUserId(String.valueOf(AuthUtils.getUser().getUserId())); - newDataSetGroup.setName(datasetGroup.getName()); - newDataSetGroup.setType(datasetGroup.getType()); - newDataSetGroup.setPid(obj.getId()); - newDataSetGroup.setSort(datasetGroup.getSort()); - List treeInfo = extDataSetGroupMapper.search(newDataSetGroup); - obj.setChildren(treeInfo); - if (CollectionUtils.isNotEmpty(treeInfo)) { - getAll(treeInfo, datasetGroup); - } - } + List result = TreeUtils.mergeTree(treeInfo); + return result; } public List getAllId(List list, List ids) { diff --git a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java index 749db10384..64f4073923 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -9,11 +9,13 @@ import io.dataease.base.mapper.ext.ExtPanelGroupMapper; import io.dataease.commons.constants.PanelConstants; import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.BeanUtils; +import io.dataease.commons.utils.TreeUtils; import io.dataease.controller.request.panel.PanelGroupRequest; import io.dataease.dto.chart.ChartViewDTO; import io.dataease.dto.dataset.DataSetGroupDTO; import io.dataease.dto.panel.PanelDesignDTO; import io.dataease.dto.panel.PanelGroupDTO; +import io.dataease.i18n.Translator; import io.dataease.service.chart.ChartViewService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -55,52 +57,69 @@ public class PanelGroupService { private ShareService shareService; @Resource private PanelLinkService panelLinkService; + public List tree(PanelGroupRequest panelGroupRequest) { String userId = String.valueOf(AuthUtils.getUser().getUserId()); panelGroupRequest.setUserId(userId); List panelGroupDTOList = extPanelGroupMapper.panelGroupList(panelGroupRequest); - getTreeChildren(panelGroupDTOList,userId); - return panelGroupDTOList; + List result = TreeUtils.mergeTree(panelGroupDTOList,"panel_list"); + return result; } - public void getTreeChildren(List parentPanelGroupDTO,String userId) { - Optional.ofNullable(parentPanelGroupDTO).ifPresent(parent -> parent.forEach(panelGroupDTO -> { - List panelGroupDTOChildren = extPanelGroupMapper.panelGroupList(new PanelGroupRequest(panelGroupDTO.getId(),userId)); - panelGroupDTO.setChildren(panelGroupDTOChildren); - getTreeChildren(panelGroupDTOChildren,userId); - })); + public List defaultTree(PanelGroupRequest panelGroupRequest) { + String userId = String.valueOf(AuthUtils.getUser().getUserId()); + panelGroupRequest.setUserId(userId); + List panelGroupDTOList = extPanelGroupMapper.panelGroupList(panelGroupRequest); + List result = TreeUtils.mergeTree(panelGroupDTOList,"default_panel"); + return result; } - public List getDefaultTree(PanelGroupRequest panelGroupRequest) { - return extPanelGroupMapper.panelGroupListDefault(panelGroupRequest); - } - - - public PanelGroupDTO save(PanelGroupRequest request) { - if (StringUtils.isEmpty(request.getId())) { - request.setId(UUID.randomUUID().toString()); + public PanelGroup saveOrUpdate(PanelGroupRequest request) { + String panelId = request.getId(); + if (StringUtils.isEmpty(panelId)) { + // 新建 + checkPanelName(request.getName(), request.getPid(), PanelConstants.OPT_TYPE_INSERT, null); + panelId = UUID.randomUUID().toString(); + request.setId(panelId); request.setCreateTime(System.currentTimeMillis()); request.setCreateBy(AuthUtils.getUser().getUsername()); panelGroupMapper.insert(request); + } else if ("toDefaultPanel".equals(request.getOptType())) { + panelId = UUID.randomUUID().toString(); + // 转存为默认仪表盘 + PanelGroupWithBLOBs newDefaultPanel = panelGroupMapper.selectByPrimaryKey(request.getId()); + newDefaultPanel.setPanelType(PanelConstants.PANEL_TYPE_SYSTEM); + newDefaultPanel.setNodeType(PanelConstants.PANEL_NODE_TYPE_PANEL); + newDefaultPanel.setName(request.getName()); + newDefaultPanel.setId(panelId); + newDefaultPanel.setPid(PanelConstants.PANEL_GATHER_DEFAULT_PANEL); + newDefaultPanel.setLevel(0); + newDefaultPanel.setSource(request.getId()); + checkPanelName(newDefaultPanel.getName(), newDefaultPanel.getPid(), PanelConstants.OPT_TYPE_INSERT, newDefaultPanel.getId()); + panelGroupMapper.insertSelective(newDefaultPanel); } else { - // 复制为默认仪表盘 - if("toDefaultPanel".equals(request.getOptType())){ - PanelGroupWithBLOBs newDefaultPanel = panelGroupMapper.selectByPrimaryKey(request.getId()); - newDefaultPanel.setPanelType(PanelConstants.PANEL_TYPE_SYSTEM); - newDefaultPanel.setNodeType(PanelConstants.PANEL_NODE_TYPE_PANEL); - newDefaultPanel.setName(request.getName()); - newDefaultPanel.setId(UUID.randomUUID().toString()); - newDefaultPanel.setPid(null); - newDefaultPanel.setLevel(0); - panelGroupMapper.insertSelective(newDefaultPanel); - }else{ - panelGroupMapper.updateByPrimaryKeySelective(request); + // 更新 + if (StringUtils.isNotEmpty(request.getName())) { + checkPanelName(request.getName(), request.getPid(), PanelConstants.OPT_TYPE_UPDATE, request.getId()); } + panelGroupMapper.updateByPrimaryKeySelective(request); + } + return panelGroupMapper.selectByPrimaryKey(panelId); + } + + + private void checkPanelName(String name, String pid, String optType, String id) { + PanelGroupExample groupExample = new PanelGroupExample(); + if (PanelConstants.OPT_TYPE_INSERT.equalsIgnoreCase(optType)) { + groupExample.createCriteria().andPidEqualTo(pid).andNameEqualTo(name); + } else if (PanelConstants.OPT_TYPE_UPDATE.equalsIgnoreCase(optType)) { + groupExample.createCriteria().andPidEqualTo(pid).andNameEqualTo(name).andIdNotEqualTo(id); + } + + List checkResult = panelGroupMapper.selectByExample(groupExample); + if (CollectionUtils.isNotEmpty(checkResult)) { + throw new RuntimeException(Translator.get("i18n_same_folder_can_not_repeat")); } - PanelGroupDTO panelGroupDTO = new PanelGroupDTO(); - BeanUtils.copyBean(panelGroupDTO, request); - panelGroupDTO.setLabel(request.getName()); - return panelGroupDTO; } @@ -118,7 +137,6 @@ public class PanelGroupService { } - public List getUsableViews(String panelId) throws Exception { List chartViewDTOList = new ArrayList<>(); List allChartView = chartViewMapper.selectByExample(null); diff --git a/backend/src/main/resources/db/migration/V2__dataease_ddl.sql b/backend/src/main/resources/db/migration/V2__dataease_ddl.sql index 1356b3fb77..baa2b50456 100644 --- a/backend/src/main/resources/db/migration/V2__dataease_ddl.sql +++ b/backend/src/main/resources/db/migration/V2__dataease_ddl.sql @@ -310,19 +310,24 @@ CREATE TABLE `panel_design` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='仪表盘和组件的关联关系 组件分为普通视图和系统组件'; DROP TABLE IF EXISTS `panel_group`; -CREATE TABLE `panel_group` ( - `id` varchar(50) NOT NULL, - `name` varchar(255) DEFAULT NULL COMMENT '名称', - `pid` varchar(255) DEFAULT NULL COMMENT '父级id', - `level` int(10) DEFAULT NULL COMMENT '层级', - `node_type` varchar(255) DEFAULT NULL COMMENT '节点类型 folder or panel 目录或者文件夹', - `create_by` varchar(255) DEFAULT NULL COMMENT '创建人', - `create_time` bigint(13) DEFAULT NULL COMMENT '创建时间', - `panel_type` varchar(255) DEFAULT NULL COMMENT '仪表盘类型 system 系统内置 self 用户自建 ', - `panel_style` longtext COMMENT 'panel 样式', - `panel_data` longtext COMMENT 'panel 数据', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `panel_group` ( + `id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称', + `pid` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '父级id', + `level` int(10) NULL DEFAULT NULL COMMENT '层级', + `node_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '节点类型 folder or panel 目录或者文件夹', + `create_by` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` bigint(13) NULL DEFAULT NULL COMMENT '创建时间', + `panel_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '仪表盘类型 system 系统内置 self 用户自建 ', + `panel_style` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT 'panel 样式', + `panel_data` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT 'panel 数据', + `source` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据来源 导入 或者 其他仪表盘另存', + `extend1` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `extend2` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci; + DROP TABLE IF EXISTS `panel_view`; CREATE TABLE `panel_view` ( diff --git a/backend/src/main/resources/db/migration/V3__init_data.sql b/backend/src/main/resources/db/migration/V3__init_data.sql index bfa26e0fd0..ab4c859edc 100644 --- a/backend/src/main/resources/db/migration/V3__init_data.sql +++ b/backend/src/main/resources/db/migration/V3__init_data.sql @@ -108,12 +108,8 @@ INSERT INTO `system_parameter`(`param_key`, `param_value`, `type`, `sort`) VALUE INSERT INTO `system_parameter`(`param_key`, `param_value`, `type`, `sort`) VALUES ('ui.title', '', 'text', 5); BEGIN; -INSERT INTO `panel_group` VALUES ('1001', '飞致云', NULL, 0, 'folder', NULL, NULL, 'self', NULL, NULL); -INSERT INTO `panel_group` VALUES ('1c78bc65-ea38-40bc-ad73-738a9b386379', '测试仪表盘1', '1001', 1, 'panel', NULL, 1615961778552, NULL, NULL, NULL); -INSERT INTO `panel_group` VALUES ('2003', '默认仪表盘1', NULL, NULL, 'panel', NULL, NULL, 'system', NULL, NULL); -INSERT INTO `panel_group` VALUES ('2004', '默认仪表盘2', NULL, NULL, 'panel', NULL, NULL, 'system', NULL, NULL); -INSERT INTO `panel_group` VALUES ('8ff64eb1-a96a-4218-85cd-01b437d21f2e', '测试仪表盘2', '1001', 1, 'panel', NULL, 1615200099827, NULL, NULL, NULL); -INSERT INTO `panel_group` VALUES ('d15f816d-46b7-4859-8ec8-2b19918dc772', 'TSEE', '1001', 1, 'folder', NULL, 1616403978419, NULL, NULL, NULL); +INSERT INTO `panel_group`(`id`, `name`, `pid`, `level`, `node_type`, `create_by`, `create_time`, `panel_type`, `panel_style`, `panel_data`, `source`, `extend1`, `extend2`, `remark`) VALUES ('default_panel', 'i18n_default_panel', '0', -1, 'folder', 'admin', NULL, 'system', NULL, NULL, NULL, NULL, NULL, '系统内置 默认仪表盘'); +INSERT INTO `panel_group`(`id`, `name`, `pid`, `level`, `node_type`, `create_by`, `create_time`, `panel_type`, `panel_style`, `panel_data`, `source`, `extend1`, `extend2`, `remark`) VALUES ('panel_list', 'i18n_panel_list', '0', -1, 'folder', 'admin', NULL, 'self', NULL, NULL, NULL, NULL, NULL, '系统内置 仪表盘列表'); COMMIT; diff --git a/backend/src/main/resources/db/migration/V5__auth.sql b/backend/src/main/resources/db/migration/V5__auth.sql index 9f1d2f678e..2babcf323a 100644 --- a/backend/src/main/resources/db/migration/V5__auth.sql +++ b/backend/src/main/resources/db/migration/V5__auth.sql @@ -63,7 +63,7 @@ COMMIT; -- View structure for v_auth_model -- ---------------------------- DROP VIEW IF EXISTS `v_auth_model`; -CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `v_auth_model` AS select `sys_user`.`user_id` AS `id`,`sys_user`.`username` AS `name`,`sys_user`.`username` AS `label`,'0' AS `pid`,'leaf' AS `node_type`,'user' AS `model_type`,'user' AS `model_inner_type`,'target' AS `auth_type`,`sys_user`.`create_by` AS `create_by` from `sys_user` union all select `sys_role`.`role_id` AS `id`,`sys_role`.`name` AS `name`,`sys_role`.`name` AS `label`,'0' AS `pid`,'leaf' AS `node_type`,'role' AS `model_type`,'role' AS `model_inner_type`,'target' AS `auth_type`,`sys_role`.`create_by` AS `create_by` from `sys_role` union all select `sys_dept`.`dept_id` AS `id`,`sys_dept`.`name` AS `name`,`sys_dept`.`name` AS `lable`,cast(`sys_dept`.`pid` as char charset utf8mb4) AS `pid`,if((`sys_dept`.`sub_count` = 0),'leaf','spine') AS `node_type`,'dept' AS `model_type`,'dept' AS `model_inner_type`,'target' AS `auth_type`,`sys_dept`.`create_by` AS `create_by` from `sys_dept` union all select `datasource`.`id` AS `id`,`datasource`.`name` AS `NAME`,`datasource`.`name` AS `label`,'0' AS `pid`,'leaf' AS `node_type`,'link' AS `model_type`,`datasource`.`type` AS `model_inner_type`,'source' AS `auth_type`,`datasource`.`create_by` AS `create_by` from `datasource` union all select `dataset_group`.`id` AS `id`,`dataset_group`.`name` AS `NAME`,`dataset_group`.`name` AS `lable`,if(isnull(`dataset_group`.`pid`),'0',`dataset_group`.`pid`) AS `pid`,'spine' AS `node_type`,'dataset' AS `model_type`,`dataset_group`.`type` AS `model_inner_type`,'source' AS `auth_type`,`dataset_group`.`create_by` AS `create_by` from `dataset_group` union all select `dataset_table`.`id` AS `id`,`dataset_table`.`name` AS `NAME`,`dataset_table`.`name` AS `lable`,`dataset_table`.`scene_id` AS `pid`,'leaf' AS `node_type`,'dataset' AS `model_type`,`dataset_table`.`type` AS `model_inner_type`,'source' AS `auth_type`,`dataset_table`.`create_by` AS `create_by` from `dataset_table` union all select `chart_group`.`id` AS `id`,`chart_group`.`name` AS `name`,`chart_group`.`name` AS `label`,if(isnull(`chart_group`.`pid`),'0',`chart_group`.`pid`) AS `pid`,'spine' AS `node_type`,'chart' AS `model_type`,`chart_group`.`type` AS `model_inner_type`,'source' AS `auth_type`,`chart_group`.`create_by` AS `create_by` from `chart_group` union all select `chart_view`.`id` AS `id`,`chart_view`.`name` AS `name`,`chart_view`.`name` AS `label`,`chart_view`.`scene_id` AS `pid`,'leaf' AS `node_type`,'chart' AS `model_type`,`chart_view`.`type` AS `model_inner_type`,'source' AS `auth_type`,`chart_view`.`create_by` AS `create_by` from `chart_view` union all select `panel_group`.`id` AS `id`,`panel_group`.`name` AS `NAME`,`panel_group`.`name` AS `label`,if(isnull(`panel_group`.`pid`),'0',`panel_group`.`pid`) AS `pid`,if((`panel_group`.`node_type` = 'folder'),'spine','leaf') AS `node_type`,'panel' AS `model_type`,`panel_group`.`panel_type` AS `model_inner_type`,'source' AS `auth_type`,`panel_group`.`create_by` AS `create_by` from `panel_group` where (`panel_group`.`panel_type` = 'self'); +CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `v_auth_model` AS select `sys_user`.`user_id` AS `id`,`sys_user`.`username` AS `name`,`sys_user`.`username` AS `label`,'0' AS `pid`,'leaf' AS `node_type`,'user' AS `model_type`,'user' AS `model_inner_type`,'target' AS `auth_type`,`sys_user`.`create_by` AS `create_by` from `sys_user` union all select `sys_role`.`role_id` AS `id`,`sys_role`.`name` AS `name`,`sys_role`.`name` AS `label`,'0' AS `pid`,'leaf' AS `node_type`,'role' AS `model_type`,'role' AS `model_inner_type`,'target' AS `auth_type`,`sys_role`.`create_by` AS `create_by` from `sys_role` union all select `sys_dept`.`dept_id` AS `id`,`sys_dept`.`name` AS `name`,`sys_dept`.`name` AS `lable`,cast(`sys_dept`.`pid` as char charset utf8mb4) AS `pid`,if((`sys_dept`.`sub_count` = 0),'leaf','spine') AS `node_type`,'dept' AS `model_type`,'dept' AS `model_inner_type`,'target' AS `auth_type`,`sys_dept`.`create_by` AS `create_by` from `sys_dept` union all select `datasource`.`id` AS `id`,`datasource`.`name` AS `NAME`,`datasource`.`name` AS `label`,'0' AS `pid`,'leaf' AS `node_type`,'link' AS `model_type`,`datasource`.`type` AS `model_inner_type`,'source' AS `auth_type`,`datasource`.`create_by` AS `create_by` from `datasource` union all select `dataset_group`.`id` AS `id`,`dataset_group`.`name` AS `NAME`,`dataset_group`.`name` AS `lable`,if(isnull(`dataset_group`.`pid`),'0',`dataset_group`.`pid`) AS `pid`,'spine' AS `node_type`,'dataset' AS `model_type`,`dataset_group`.`type` AS `model_inner_type`,'source' AS `auth_type`,`dataset_group`.`create_by` AS `create_by` from `dataset_group` union all select `dataset_table`.`id` AS `id`,`dataset_table`.`name` AS `NAME`,`dataset_table`.`name` AS `lable`,`dataset_table`.`scene_id` AS `pid`,'leaf' AS `node_type`,'dataset' AS `model_type`,`dataset_table`.`type` AS `model_inner_type`,'source' AS `auth_type`,`dataset_table`.`create_by` AS `create_by` from `dataset_table` union all select `chart_group`.`id` AS `id`,`chart_group`.`name` AS `name`,`chart_group`.`name` AS `label`,if(isnull(`chart_group`.`pid`),'0',`chart_group`.`pid`) AS `pid`,'spine' AS `node_type`,'chart' AS `model_type`,`chart_group`.`type` AS `model_inner_type`,'source' AS `auth_type`,`chart_group`.`create_by` AS `create_by` from `chart_group` union all select `chart_view`.`id` AS `id`,`chart_view`.`name` AS `name`,`chart_view`.`name` AS `label`,`chart_view`.`scene_id` AS `pid`,'leaf' AS `node_type`,'chart' AS `model_type`,`chart_view`.`type` AS `model_inner_type`,'source' AS `auth_type`,`chart_view`.`create_by` AS `create_by` from `chart_view` union all select `panel_group`.`id` AS `id`,`panel_group`.`name` AS `NAME`,`panel_group`.`name` AS `label`,(case `panel_group`.`id` when 'panel_list' then '0' when 'default_panel' then '0' else `panel_group`.`pid` end) AS `pid`,if((`panel_group`.`node_type` = 'folder'),'spine','leaf') AS `node_type`,'panel' AS `model_type`,`panel_group`.`panel_type` AS `model_inner_type`,'source' AS `auth_type`,`panel_group`.`create_by` AS `create_by` from `panel_group`; -- ---------------------------- -- View structure for v_auth_privilege diff --git a/backend/src/main/resources/generatorConfig.xml b/backend/src/main/resources/generatorConfig.xml index 6c1bc0b05e..f86ecb6989 100644 --- a/backend/src/main/resources/generatorConfig.xml +++ b/backend/src/main/resources/generatorConfig.xml @@ -64,7 +64,7 @@ - + @@ -74,6 +74,7 @@ +
diff --git a/backend/src/main/resources/i18n/messages_en_US.properties b/backend/src/main/resources/i18n/messages_en_US.properties index 607fc32bdb..4271da9eb0 100644 --- a/backend/src/main/resources/i18n/messages_en_US.properties +++ b/backend/src/main/resources/i18n/messages_en_US.properties @@ -232,3 +232,6 @@ i18n_name_cant_repeat_same_group=Name is already exists in the same group i18n_chart_count=Count* i18n_excel_have_merge_region=Excel has merged region i18n_cron_expression_error=Cron expression error +i18n_same_folder_can_not_repeat=Same Folder Can Not Repeat +i18n_default_panel=Default Panel +i18n_panel_list=Panel List diff --git a/backend/src/main/resources/i18n/messages_zh_CN.properties b/backend/src/main/resources/i18n/messages_zh_CN.properties index 1b4009ca68..2262059625 100644 --- a/backend/src/main/resources/i18n/messages_zh_CN.properties +++ b/backend/src/main/resources/i18n/messages_zh_CN.properties @@ -233,3 +233,6 @@ i18n_name_cant_repeat_same_group=同一分组下名称不能重复 i18n_chart_count=记录数* i18n_excel_have_merge_region=Excel存在合并单元格 i18n_cron_expression_error=Cron表达式校验错误 +i18n_same_folder_can_not_repeat=相同的目录下名称不能重复 +i18n_default_panel=默认仪表盘 +i18n_panel_list=仪表盘列表 diff --git a/backend/src/main/resources/i18n/messages_zh_TW.properties b/backend/src/main/resources/i18n/messages_zh_TW.properties index 4aae1e49a6..4b3dea3692 100644 --- a/backend/src/main/resources/i18n/messages_zh_TW.properties +++ b/backend/src/main/resources/i18n/messages_zh_TW.properties @@ -233,3 +233,6 @@ i18n_name_cant_repeat_same_group=同一分組下名稱不能重復 i18n_chart_count=記錄數* i18n_excel_have_merge_region=Excel存在合並單元格 i18n_cron_expression_error=Cron表達式校驗錯誤 +i18n_same_folder_can_not_repeat=相同的目录下名称不能重复 +i18n_default_panel=默认仪表盘 +i18n_panel_list=仪表盘列表 diff --git a/frontend/src/api/panel/panel.js b/frontend/src/api/panel/panel.js index 32579aa5af..f5c5f8c1c3 100644 --- a/frontend/src/api/panel/panel.js +++ b/frontend/src/api/panel/panel.js @@ -69,6 +69,13 @@ export function panelSave(data) { data }) } +export function findOne(id) { + return request({ + url: 'panel/group/findOne/' + id, + method: 'get', + loading: true + }) +} export function getTable(id) { return request({ diff --git a/frontend/src/components/canvas/components/Toolbar.vue b/frontend/src/components/canvas/components/Toolbar.vue index 397f850eb6..188be0928d 100644 --- a/frontend/src/components/canvas/components/Toolbar.vue +++ b/frontend/src/components/canvas/components/Toolbar.vue @@ -160,7 +160,7 @@ export default { handleFileChange(e) { const file = e.target.files[0] if (!file.type.includes('image')) { - toast(this.$t('panel.picture_limit')) + toast('只能插入图片') return } @@ -209,7 +209,7 @@ export default { panelData: JSON.stringify(this.componentData) } post('panel/group/save', requestInfo, () => {}) - this.$message.success(this.$t('commons.save_success')) + this.$message.success('保存成功') }, clearCanvas() { this.$store.commit('setComponentData', []) diff --git a/frontend/src/store/modules/panel.js b/frontend/src/store/modules/panel.js index 2ceede7424..2b2692b3c3 100644 --- a/frontend/src/store/modules/panel.js +++ b/frontend/src/store/modules/panel.js @@ -8,7 +8,8 @@ const getDefaultState = () => { preStyle: null }, canvasStyleDataTemp: null, // 页面全局临时存储数据 - componentDataTemp: null // 画布组件临时存储数据 + componentDataTemp: null, // 画布组件临时存储数据 + mainActiveName: 'PanelMain' } } @@ -18,6 +19,9 @@ const mutations = { setPanelName: (state, panelName) => { state.panelName = panelName }, + setMainActiveName: (state, mainActiveName) => { + state.mainActiveName = mainActiveName + }, setPanelInfo: (state, panelInfo) => { state.panelInfo = panelInfo }, @@ -33,6 +37,9 @@ const actions = { setPanelName({ commit }, panelName) { commit('setPanelName', panelName) }, + setMainActiveName({ commit }, mainActiveName) { + commit('setMainActiveName', mainActiveName) + }, setPanelInfo({ commit }, panelInfo) { commit('setPanelInfo', panelInfo) }, diff --git a/frontend/src/views/panel/edit/index.vue b/frontend/src/views/panel/edit/index.vue index 69bef7f6e5..339b056d8b 100644 --- a/frontend/src/views/panel/edit/index.vue +++ b/frontend/src/views/panel/edit/index.vue @@ -140,6 +140,7 @@ import { uuid } from 'vue-uuid' import Toolbar from '@/components/canvas/components/Toolbar' import { get } from '@/api/panel/panel' import PreviewFullScreen from '@/components/canvas/components/Editor/PreviewFullScreen' +import Preview from '@/components/canvas/components/Editor/Preview' // 引入样式 import '@/components/canvas/assets/iconfont/iconfont.css' @@ -160,7 +161,8 @@ export default { Toolbar, FilterDialog, SubjectSetting, - PreviewFullScreen + PreviewFullScreen, + Preview }, data() { return { @@ -350,8 +352,6 @@ export default { }, deselectCurComponent(e) { - console.log('deselectCurComponent123') - if (!this.isClickComponent) { this.$store.commit('setCurComponent', { component: null, index: null }) } diff --git a/frontend/src/views/panel/index.vue b/frontend/src/views/panel/index.vue index 554a49c54a..2a7e0ae40e 100644 --- a/frontend/src/views/panel/index.vue +++ b/frontend/src/views/panel/index.vue @@ -1,7 +1,10 @@ @@ -20,23 +23,29 @@ export default { data() { return { component: PanelMain, + componentName: 'PanelMain', param: {} } }, mounted() { bus.$on('PanelSwitchComponent', (c) => { this.param = c.param - switch (c.name) { - case 'PanelEdit': - this.component = PanelEdit - break - case 'ChartEdit': - this.component = ChartEdit - break - default: - this.component = PanelMain - break - } + this.componentName = c.name + this.$store.dispatch('panel/setMainActiveName', c.name) + // switch (c.name) { + // case 'PanelEdit': + // this.component = PanelEdit + // this.componentName = 'PanelEdit' + // break + // case 'ChartEdit': + // this.component = ChartEdit + // this.componentName = 'ChartEdit' + // break + // default: + // this.component = PanelMain + // this.componentName = 'PanelMain' + // break + // } }) }, methods: { diff --git a/frontend/src/views/panel/list/PanelList.vue b/frontend/src/views/panel/list/PanelList.vue index 1d09174aa7..92860fa0dd 100644 --- a/frontend/src/views/panel/list/PanelList.vue +++ b/frontend/src/views/panel/list/PanelList.vue @@ -8,6 +8,7 @@ :default-expanded-keys="expandedArray" :data="defaultData" node-key="id" + highlight-current :expand-on-click-node="true" @node-click="nodeClick" > @@ -19,7 +20,7 @@ {{ data.name }} - + @@ -158,7 +160,7 @@ - + @@ -170,7 +172,7 @@ import LinkGenerate from '@/views/link/generate' import { uuid } from 'vue-uuid' import bus from '@/utils/bus' import EditPanel from './EditPanel' -import { addGroup, delGroup, groupTree, defaultTree, get } from '@/api/panel/panel' +import { addGroup, delGroup, groupTree, defaultTree, findOne } from '@/api/panel/panel' import { DEFAULT_COLOR_CASE, DEFAULT_SIZE, @@ -299,7 +301,7 @@ export default { groupForm: { name: null, pid: null, - level: 0, + panelType: 'self', nodeType: null, children: [], sort: 'node_type desc,name asc' @@ -350,7 +352,11 @@ export default { switch (param.optType) { case 'new': this.editPanel.titlePre = this.$t('commons.create') - this.editPanel.panelInfo.name = this.$t('panel.panelAdd') + if (param.type === 'folder') { + this.editPanel.panelInfo.name = this.$t('panel.groupAdd') + } else { + this.editPanel.panelInfo.name = this.$t('panel.panelAdd') + } this.editPanel.panelInfo.pid = param.data.id this.editPanel.panelInfo.level = param.data.level + 1 this.editPanel.panelInfo.panelType = 'self' @@ -358,7 +364,7 @@ export default { case 'newFirstFolder': this.editPanel.titlePre = this.$t('commons.create') this.editPanel.panelInfo.name = '' - this.editPanel.panelInfo.pid = null + this.editPanel.panelInfo.pid = 'panel_list' this.editPanel.panelInfo.level = 0 this.editPanel.panelInfo.panelType = 'self' break @@ -369,6 +375,7 @@ export default { titlePre: this.$t('commons.edit'), panelInfo: { id: param.data.id, + pid: param.data.pid, name: param.data.name } } @@ -497,7 +504,7 @@ export default { this.groupForm = { name: null, pid: null, - level: 0, + panelType: 'self', nodeType: null, children: [], sort: 'node_type desc,name asc' @@ -520,7 +527,7 @@ export default { nodeClick(data, node) { if (data.nodeType === 'panel') { // 加载视图数据 - get('panel/group/findOne/' + data.id).then(response => { + findOne(data.id).then(response => { this.$store.commit('setComponentData', this.resetID(JSON.parse(response.data.panelData))) // this.$store.commit('setComponentData', sourceInfo.type === 'custom' ? sourceInfo : this.resetID(sourceInfo)) const temp = JSON.parse(response.data.panelStyle) @@ -558,6 +565,7 @@ export default { this.authVisible = false }, edit(data) { + debugger this.$store.dispatch('panel/setPanelInfo', data) bus.$emit('PanelSwitchComponent', { name: 'PanelEdit' }) }, @@ -576,6 +584,9 @@ export default { }) } return data + }, + newPanelSave(id) { + } } } diff --git a/frontend/src/views/panel/list/PanelViewShow.vue b/frontend/src/views/panel/list/PanelViewShow.vue index bff2cf7f9d..2c3be41bfd 100644 --- a/frontend/src/views/panel/list/PanelViewShow.vue +++ b/frontend/src/views/panel/list/PanelViewShow.vue @@ -40,7 +40,7 @@
- +
@@ -84,6 +84,9 @@ export default { panelInfo() { return this.$store.state.panel.panelInfo }, + mainActiveName() { + return this.$store.state.panel.mainActiveName + }, ...mapState([ 'componentData', 'canvasStyleData'