Browse Source

Merge branch 'master' of github.com:gcpaas/DataRoom

liu.tao3 1 year ago
parent
commit
7f01fc4191
75 changed files with 1942 additions and 285 deletions
  1. 1 1
      DataRoom/dataroom-core/pom.xml
  2. 5 0
      DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/constant/PageDesignConstant.java
  3. 52 3
      DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/biz/component/service/impl/BizComponentServiceImpl.java
  4. 58 0
      DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/chart/components/ScreenDateTimePickerChart.java
  5. 10 5
      DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/chart/controller/ChartDataController.java
  6. 51 2
      DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/manage/service/impl/DataRoomPageServiceImpl.java
  7. 53 0
      DataRoom/dataroom-core/src/main/resources/chart/mock/sales.json
  8. 2 2
      DataRoom/dataroom-server/pom.xml
  9. 2 2
      DataRoom/pom.xml
  10. 451 0
      data-room-ui/packages/BasicComponents/DateTimePicker/index.vue
  11. 242 0
      data-room-ui/packages/BasicComponents/DateTimePicker/setting.vue
  12. 59 0
      data-room-ui/packages/BasicComponents/DateTimePicker/settingConfig.js
  13. 4 1
      data-room-ui/packages/BasicComponents/LinkChart/index.vue
  14. 6 11
      data-room-ui/packages/BasicComponents/Select/index.vue
  15. 4 1
      data-room-ui/packages/BasicComponents/Texts/index.vue
  16. 1 1
      data-room-ui/packages/BasicComponents/ThemeSelect/index.vue
  17. 25 14
      data-room-ui/packages/BasicComponents/TimePicker/index.vue
  18. 0 12
      data-room-ui/packages/BasicComponents/TimePicker/setting.vue
  19. 4 4
      data-room-ui/packages/BigScreenDesign/DataViewDialog/index.vue
  20. 1 1
      data-room-ui/packages/BigScreenDesign/OverallSetting/index.vue
  21. 16 0
      data-room-ui/packages/BigScreenDesign/PageDesignTop.vue
  22. 4 1
      data-room-ui/packages/BigScreenDesign/RightSetting/DataSetting.vue
  23. 1 0
      data-room-ui/packages/BigScreenList/CatalogEditForm.vue
  24. 2 1
      data-room-ui/packages/BigScreenMag/SideMenu.vue
  25. 16 17
      data-room-ui/packages/BorderComponents/GcBorder14/index.vue
  26. 39 35
      data-room-ui/packages/BorderComponents/GcBorder7/index.vue
  27. 2 1
      data-room-ui/packages/ComponentList/CatalogEditForm.vue
  28. 26 1
      data-room-ui/packages/DataSetManagement/src/CategroyEditForm.vue
  29. 4 0
      data-room-ui/packages/DataSetManagement/src/OriginalEditForm.vue
  30. 495 79
      data-room-ui/packages/Echarts/3D图/3D分组柱状图.js
  31. 1 1
      data-room-ui/packages/Echarts/3D图/3D基础柱状图.js
  32. 23 13
      data-room-ui/packages/EchartsRender/index.vue
  33. 12 1
      data-room-ui/packages/G2Plots/折线图/基础折线图.js
  34. 12 1
      data-room-ui/packages/G2Plots/折线图/基础折线点图.js
  35. 12 1
      data-room-ui/packages/G2Plots/折线图/基础曲线图.js
  36. 12 1
      data-room-ui/packages/G2Plots/折线图/多折线动画图.js
  37. 12 1
      data-room-ui/packages/G2Plots/折线图/多折线图.js
  38. 12 1
      data-room-ui/packages/G2Plots/折线图/多阶梯折线图.js
  39. 12 1
      data-room-ui/packages/G2Plots/折线图/折线趋势填充图.js
  40. 1 1
      data-room-ui/packages/G2Plots/折线图/迷你基础折线图.js
  41. 1 1
      data-room-ui/packages/G2Plots/折线图/迷你面积图.js
  42. 12 1
      data-room-ui/packages/G2Plots/条形图/分组条形图.js
  43. 18 7
      data-room-ui/packages/G2Plots/条形图/基础条形图.js
  44. 12 1
      data-room-ui/packages/G2Plots/柱状图/分组柱状图.js
  45. 12 1
      data-room-ui/packages/G2Plots/柱状图/圆角柱状图.js
  46. 12 1
      data-room-ui/packages/G2Plots/柱状图/基础柱状图.js
  47. 12 1
      data-room-ui/packages/G2Plots/柱状图/堆叠柱状图.js
  48. 1 1
      data-room-ui/packages/G2Plots/漏斗图/分面漏斗图.js
  49. 1 1
      data-room-ui/packages/G2Plots/漏斗图/对比漏斗图.js
  50. 1 1
      data-room-ui/packages/G2Plots/矩形树图/基础矩形树图.js
  51. 1 1
      data-room-ui/packages/G2Plots/词云图/词云图.js
  52. 1 1
      data-room-ui/packages/G2Plots/进度图/仪表盘.js
  53. 1 1
      data-room-ui/packages/G2Plots/进度图/圆角进度条.js
  54. 1 1
      data-room-ui/packages/G2Plots/进度图/水波图.js
  55. 1 1
      data-room-ui/packages/G2Plots/进度图/矩形水波图.js
  56. 1 1
      data-room-ui/packages/G2Plots/进度图/进度仪表盘.js
  57. 1 1
      data-room-ui/packages/G2Plots/进度图/进度指标环图.js
  58. 1 1
      data-room-ui/packages/G2Plots/进度图/进度条.js
  59. 1 1
      data-room-ui/packages/G2Plots/进度图/进度环图.js
  60. 1 1
      data-room-ui/packages/G2Plots/进度图/钻石水波图.js
  61. 1 1
      data-room-ui/packages/G2Plots/雷达图/分组雷达图.js
  62. 9 7
      data-room-ui/packages/G2Plots/雷达图/基础雷达图.js
  63. 15 3
      data-room-ui/packages/G2Plots/面积图/基础面积图.js
  64. 12 1
      data-room-ui/packages/G2Plots/面积图/堆叠面积图.js
  65. 13 1
      data-room-ui/packages/G2Plots/面积图/渐变色面积图.js
  66. 2 1
      data-room-ui/packages/G2Plots/饼图/基础环图.js
  67. 3 2
      data-room-ui/packages/G2Plots/饼图/基础饼图.js
  68. 1 1
      data-room-ui/packages/G2Plots/饼图/玫瑰图.js
  69. 2 2
      data-room-ui/packages/SourceMag/SideMenu.vue
  70. 0 0
      data-room-ui/packages/assets/images/bigScreenIcon/svg/23dateTimePicker.svg
  71. 3 2
      data-room-ui/packages/js/config/basicComponentsConfig.js
  72. 18 16
      data-room-ui/packages/js/store/actions.js
  73. 10 1
      data-room-ui/packages/js/utils/datasetConfigService.js
  74. 12 0
      data-room-ui/packages/js/utils/getComponentConfig.js
  75. 4 4
      doc/docker/application-docker.yml

+ 1 - 1
DataRoom/dataroom-core/pom.xml

@@ -6,7 +6,7 @@
     <parent>
     <parent>
         <groupId>com.gccloud</groupId>
         <groupId>com.gccloud</groupId>
         <artifactId>dataroom</artifactId>
         <artifactId>dataroom</artifactId>
-        <version>1.0.1.2023091801.Alpha</version>
+        <version>1.0.1.2023092201.Alpha</version>
     </parent>
     </parent>
 
 
     <artifactId>dataroom-core</artifactId>
     <artifactId>dataroom-core</artifactId>

+ 5 - 0
DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/constant/PageDesignConstant.java

@@ -172,6 +172,11 @@ public interface PageDesignConstant {
              */
              */
             String ECHARTS_COMPONENT = "echartsComponent";
             String ECHARTS_COMPONENT = "echartsComponent";
 
 
+            /**
+             * 日期时间选择
+             */
+            String DATE_TIME_PICKER = "dateTimePicker";
+
 
 
         }
         }
     }
     }

+ 52 - 3
DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/biz/component/service/impl/BizComponentServiceImpl.java

@@ -11,6 +11,7 @@ import com.gccloud.dataroom.core.utils.CodeGenerateUtils;
 import com.gccloud.common.exception.GlobalException;
 import com.gccloud.common.exception.GlobalException;
 import com.gccloud.common.vo.PageVO;
 import com.gccloud.common.vo.PageVO;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -165,29 +166,77 @@ public class BizComponentServiceImpl extends ServiceImpl<DataRoomBizComponentDao
             FileOutputStream outputStream = new FileOutputStream(filePath);
             FileOutputStream outputStream = new FileOutputStream(filePath);
             outputStream.write(imageBytes);
             outputStream.write(imageBytes);
             outputStream.close();
             outputStream.close();
-            log.info("大屏封面保存至:{}", filePath);
+            log.info("组业务件封面保存至:{}", filePath);
         } catch (IOException e) {
         } catch (IOException e) {
             log.error(ExceptionUtils.getStackTrace(e));
             log.error(ExceptionUtils.getStackTrace(e));
         }
         }
         return fileUrl;
         return fileUrl;
     }
     }
 
 
+    public static final String COPY_SUFFIX = "-副本";
+
     @Override
     @Override
     public String copy(String code) {
     public String copy(String code) {
         BizComponentEntity copyFrom = this.getInfoByCode(code);
         BizComponentEntity copyFrom = this.getInfoByCode(code);
         if (copyFrom == null) {
         if (copyFrom == null) {
             throw new GlobalException("源业务组件不存在");
             throw new GlobalException("源业务组件不存在");
         }
         }
+        String oldCode = copyFrom.getCode();
         copyFrom.setId(null);
         copyFrom.setId(null);
-        copyFrom.setName(copyFrom.getName() + "_复制");
+        String oldName = copyFrom.getName();
+        // 检查是否有 -副本,有的话从-副本开始,后面全部去掉
+        if (oldName.contains(COPY_SUFFIX)) {
+            oldName = oldName.substring(0, oldName.indexOf(COPY_SUFFIX));
+            if (StringUtils.isBlank(oldName)) {
+                oldName = "组件";
+            }
+        }
+        copyFrom.setName(oldName + COPY_SUFFIX);
+        int i = 1;
         while(this.checkName(null, copyFrom.getName())) {
         while(this.checkName(null, copyFrom.getName())) {
-            copyFrom.setName(copyFrom.getName() + "_复制");
+            copyFrom.setName(oldName + COPY_SUFFIX + i);
+            i++;
         }
         }
         copyFrom.setCode(CodeGenerateUtils.generate("bizComponent"));
         copyFrom.setCode(CodeGenerateUtils.generate("bizComponent"));
+        boolean copy = this.copyCoverPicture(oldCode, copyFrom.getCode());
+        if (!copy) {
+            copyFrom.setCoverPicture(null);
+        } else {
+            copyFrom.setCoverPicture("cover" + File.separator + copyFrom.getCode() + ".png");
+        }
         this.save(copyFrom);
         this.save(copyFrom);
         return copyFrom.getCode();
         return copyFrom.getCode();
     }
     }
 
 
+
+    /**
+     * 复制封面文件
+     * @param oldFileName
+     * @param newFileName
+     * @return
+     */
+    private boolean copyCoverPicture(String oldFileName, String newFileName) {
+        if (StringUtils.isBlank(oldFileName)) {
+            return false;
+        }
+        String basePath = bigScreenConfig.getFile().getBasePath() + File.separator;
+        String oldFile = basePath + "cover" + File.separator + oldFileName + ".png";
+        // 检查文件是否存在
+        File file = new File(oldFile);
+        if (!file.exists() || !file.isFile()) {
+            return false;
+        }
+        // 复制一份
+        String newFilePath = basePath + "cover" + File.separator + newFileName + ".png";
+        try {
+            FileUtils.copyFile(file, new File(newFilePath));
+            return true;
+        } catch (IOException e) {
+            log.error(ExceptionUtils.getStackTrace(e));
+        }
+        return false;
+    }
+
     @Override
     @Override
     public void delete(String id) {
     public void delete(String id) {
         if (StringUtils.isBlank(id)) {
         if (StringUtils.isBlank(id)) {

+ 58 - 0
DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/chart/components/ScreenDateTimePickerChart.java

@@ -0,0 +1,58 @@
+package com.gccloud.dataroom.core.module.chart.components;
+
+import com.gccloud.dataroom.core.constant.PageDesignConstant;
+import com.gccloud.dataroom.core.module.chart.bean.Chart;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * 日期时间选择
+ * @author hongyang
+ * @version 1.0
+ * @date 2023/09/14 16:44
+ */
+@Data
+public class ScreenDateTimePickerChart extends Chart {
+    
+    @ApiModelProperty(notes = "组件类型")
+    private String type = PageDesignConstant.BigScreen.Type.DATE_TIME_PICKER;
+
+    @ApiModelProperty(notes = "个性化")
+    private Customize customize = new Customize();
+
+    @Data
+    public static class Customize {
+
+        @ApiModelProperty(notes = "值")
+        private String value;
+
+        @ApiModelProperty(notes = "选择框背景颜色")
+        private String bgColor;
+
+        @ApiModelProperty(notes = "选择框文字颜色")
+        private String fontColor;
+
+        @ApiModelProperty(notes = "选择框文字大小")
+        private Integer fontSize;
+
+        @ApiModelProperty(notes = "显示类型 year/month/date/week/ datetime/datetimerange/daterange")
+        private String type;
+
+        @ApiModelProperty(notes = "时间格式化类型:Date 对象(default),时间戳(timestamp),自定义(custom)")
+        private String formatType;
+
+        @ApiModelProperty(notes = "绑定值的格式")
+        private String valueFormat;
+
+        @ApiModelProperty(notes = "占位提示")
+        private String placeholder;
+
+        @ApiModelProperty(notes = "下拉框")
+        private Map<String, Object> dropDownBox;
+
+    }
+
+
+}

+ 10 - 5
DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/chart/controller/ChartDataController.java

@@ -17,10 +17,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.MediaType;
 import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.util.List;
 import java.util.List;
@@ -61,7 +58,7 @@ public class ChartDataController {
     }
     }
 
 
     @PostMapping("/chart")
     @PostMapping("/chart")
-    @ApiOperation(value = "图表数据", position = 10, notes = "获取指定图表的数据(通过配置)", produces = MediaType.APPLICATION_JSON_VALUE)
+    @ApiOperation(value = "图表数据", position = 20, notes = "获取指定图表的数据(通过配置)", produces = MediaType.APPLICATION_JSON_VALUE)
     public R<ChartDataVO> getChartData(@RequestBody ChartDataSearchDTO chartDataSearchDTO) {
     public R<ChartDataVO> getChartData(@RequestBody ChartDataSearchDTO chartDataSearchDTO) {
         PageEntity pageEntity = pageService.getByCode(chartDataSearchDTO.getPageCode());
         PageEntity pageEntity = pageService.getByCode(chartDataSearchDTO.getPageCode());
         AssertUtils.isTrue(pageEntity != null, "页面不存在");
         AssertUtils.isTrue(pageEntity != null, "页面不存在");
@@ -70,6 +67,14 @@ public class ChartDataController {
         return getChartData(chartDataSearchDTO, config, chart);
         return getChartData(chartDataSearchDTO, config, chart);
     }
     }
 
 
+    @GetMapping("/mock/{type}")
+    @ApiOperation(value = "图表模拟数据", position = 30, notes = "获取指定类型的图表模拟数据", produces = MediaType.APPLICATION_JSON_VALUE)
+    public R<ChartDataVO> getMockData(@PathVariable String type) {
+        ChartDataVO mockData = ChartMockData.getMockData(type);
+        return R.success(mockData);
+    }
+
+
     /**
     /**
      * 获取图表数据
      * 获取图表数据
      * @param chartDataSearchDTO
      * @param chartDataSearchDTO

+ 51 - 2
DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/manage/service/impl/DataRoomPageServiceImpl.java

@@ -25,6 +25,7 @@ import com.gccloud.common.vo.PageVO;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -143,6 +144,35 @@ public class DataRoomPageServiceImpl extends ServiceImpl<DataRoomPageDao, PageEn
         return fileUrl;
         return fileUrl;
     }
     }
 
 
+
+    /**
+     * 复制封面文件
+     * @param oldFileName
+     * @param newFileName
+     * @return
+     */
+    private boolean copyCoverPicture(String oldFileName, String newFileName) {
+        if (StringUtils.isBlank(oldFileName)) {
+            return false;
+        }
+        String basePath = bigScreenConfig.getFile().getBasePath() + File.separator;
+        String oldFile = basePath + "cover" + File.separator + oldFileName + ".png";
+        // 检查文件是否存在
+        File file = new File(oldFile);
+        if (!file.exists() || !file.isFile()) {
+            return false;
+        }
+        // 复制一份
+        String newFilePath = basePath + "cover" + File.separator + newFileName + ".png";
+        try {
+            FileUtils.copyFile(file, new File(newFilePath));
+            return true;
+        } catch (IOException e) {
+            log.error(ExceptionUtils.getStackTrace(e));
+        }
+        return false;
+    }
+
     @Override
     @Override
     public String addByTemplate(DataRoomPageDTO bigScreenPageDTO) {
     public String addByTemplate(DataRoomPageDTO bigScreenPageDTO) {
         if (StringUtils.isBlank(bigScreenPageDTO.getPageTemplateId())) {
         if (StringUtils.isBlank(bigScreenPageDTO.getPageTemplateId())) {
@@ -266,16 +296,29 @@ public class DataRoomPageServiceImpl extends ServiceImpl<DataRoomPageDao, PageEn
         PAGE_ENTITY_CACHE.invalidate(bigScreenEntity.getCode());
         PAGE_ENTITY_CACHE.invalidate(bigScreenEntity.getCode());
     }
     }
 
 
+
+    public static final String COPY_SUFFIX = "-副本";
+
     @Override
     @Override
     public String copy(PageEntity screenEntity) {
     public String copy(PageEntity screenEntity) {
         DataRoomPageDTO config = (DataRoomPageDTO) screenEntity.getConfig();
         DataRoomPageDTO config = (DataRoomPageDTO) screenEntity.getConfig();
         screenEntity.setId(null);
         screenEntity.setId(null);
+        String oldCode = screenEntity.getCode();
         screenEntity.setCode(CodeGenerateUtils.generate(screenEntity.getType()));
         screenEntity.setCode(CodeGenerateUtils.generate(screenEntity.getType()));
         int i = 1;
         int i = 1;
         String oldName = screenEntity.getName();
         String oldName = screenEntity.getName();
-        screenEntity.setName(oldName + "_复制");
+        // 检查是否有 -副本,有的话从-副本开始,后面全部去掉
+        if (oldName.contains(COPY_SUFFIX)) {
+            oldName = oldName.substring(0, oldName.indexOf(COPY_SUFFIX));
+            if (StringUtils.isBlank(oldName)) {
+                oldName = "大屏";
+            }
+        }
+        screenEntity.setName(oldName + COPY_SUFFIX);
         while (checkNameRepeat(screenEntity)) {
         while (checkNameRepeat(screenEntity)) {
-            screenEntity.setName(oldName + "_复制" + i++);
+           // 如果重复,采取 -副本1,-副本2的方式
+            screenEntity.setName(oldName + COPY_SUFFIX + i);
+            i++;
         }
         }
         config.setName(screenEntity.getName());
         config.setName(screenEntity.getName());
         config.setCode(screenEntity.getCode());
         config.setCode(screenEntity.getCode());
@@ -283,6 +326,12 @@ public class DataRoomPageServiceImpl extends ServiceImpl<DataRoomPageDao, PageEn
         for (Chart chart : chartList) {
         for (Chart chart : chartList) {
             chart.setCode(CodeGenerateUtils.generate(chart.getType() == null ? "chart" : chart.getType()));
             chart.setCode(CodeGenerateUtils.generate(chart.getType() == null ? "chart" : chart.getType()));
         }
         }
+        boolean copy = this.copyCoverPicture(oldCode, screenEntity.getCode());
+        if (!copy) {
+            screenEntity.setCoverPicture(null);
+        } else {
+            screenEntity.setCoverPicture("cover" + File.separator + screenEntity.getCode() + ".png");
+        }
         this.save(screenEntity);
         this.save(screenEntity);
         dataRoomExtendClient.afterAdd(screenEntity.getCode());
         dataRoomExtendClient.afterAdd(screenEntity.getCode());
         return screenEntity.getCode();
         return screenEntity.getCode();

+ 53 - 0
DataRoom/dataroom-core/src/main/resources/chart/mock/sales.json

@@ -0,0 +1,53 @@
+{
+  "success": false,
+  "data": [
+    {
+      "month": "2022-1",
+      "sales": 47
+    },
+    {
+      "month": "2022-2",
+      "sales": 64
+    },
+    {
+      "month": "2022-3",
+      "sales": 27
+    },
+    {
+      "month": "2022-4",
+      "sales": 44
+    },
+    {
+      "month": "2022-5",
+      "sales": 90
+    },
+    {
+      "month": "2022-6",
+      "sales": 83
+    },
+    {
+      "month": "2022-7",
+      "sales": 37
+    },
+    {
+      "month": "2022-8",
+      "sales": 86
+    },
+    {
+      "month": "2022-9",
+      "sales": 98
+    },
+    {
+      "month": "2022-10",
+      "sales": 84
+    },
+    {
+      "month": "2022-11",
+      "sales": 35
+    },
+    {
+      "month": "2022-12",
+      "sales": 73
+    }
+  ]
+}

+ 2 - 2
DataRoom/dataroom-server/pom.xml

@@ -6,7 +6,7 @@
     <parent>
     <parent>
         <groupId>com.gccloud</groupId>
         <groupId>com.gccloud</groupId>
         <artifactId>dataroom</artifactId>
         <artifactId>dataroom</artifactId>
-        <version>1.0.1.2023091801.Alpha</version>
+        <version>1.0.1.2023092201.Alpha</version>
     </parent>
     </parent>
 
 
     <artifactId>dataroom-server</artifactId>
     <artifactId>dataroom-server</artifactId>
@@ -29,7 +29,7 @@
         <dependency>
         <dependency>
             <groupId>com.gccloud</groupId>
             <groupId>com.gccloud</groupId>
             <artifactId>dataroom-core</artifactId>
             <artifactId>dataroom-core</artifactId>
-            <version>1.0.1.2023091801.Alpha</version>
+            <version>1.0.1.2023092201.Alpha</version>
         </dependency>
         </dependency>
 
 
         <dependency>
         <dependency>

+ 2 - 2
DataRoom/pom.xml

@@ -12,7 +12,7 @@
 
 
     <groupId>com.gccloud</groupId>
     <groupId>com.gccloud</groupId>
     <artifactId>dataroom</artifactId>
     <artifactId>dataroom</artifactId>
-    <version>1.0.1.2023091801.Alpha</version>
+    <version>1.0.1.2023092201.Alpha</version>
 
 
     <packaging>pom</packaging>
     <packaging>pom</packaging>
     <description>基于G2Plot、Echarts的大屏设计服务端,具备设计、预览能力,支持MySQL、Oracle、PostgreSQL、Groovy等数据集接入
     <description>基于G2Plot、Echarts的大屏设计服务端,具备设计、预览能力,支持MySQL、Oracle、PostgreSQL、Groovy等数据集接入
@@ -60,7 +60,7 @@
         <clickhouse.version>0.3.2</clickhouse.version>
         <clickhouse.version>0.3.2</clickhouse.version>
         <commons-io.version>2.2</commons-io.version>
         <commons-io.version>2.2</commons-io.version>
         <okhttp3.version>4.9.1</okhttp3.version>
         <okhttp3.version>4.9.1</okhttp3.version>
-        <dataset.core.version>1.0.1.2023092101.Alpha</dataset.core.version>
+        <dataset.core.version>1.0.1.2023092201.Alpha</dataset.core.version>
     </properties>
     </properties>
 
 
     <dependencies>
     <dependencies>

+ 451 - 0
data-room-ui/packages/BasicComponents/DateTimePicker/index.vue

@@ -0,0 +1,451 @@
+<template>
+  <el-date-picker
+    :key="config.customize.type"
+    v-model="config.customize.value"
+    :picker-options="config.customize.pickerOptions"
+    :type="config.customize.type"
+    clearable
+    :class="['basic-component-date-picker', `date-picker-${config.code}`]"
+    :popper-class="'basic-component-date-picker date-picker-popper-' + config.code"
+    :value-format="config.customize.valueFormat"
+    size="large"
+    @focus="focusEvent"
+    @change="changeValue"
+    @mouseenter.native="mouseenter"
+  />
+</template>
+
+<script>
+import cloneDeep from 'lodash/cloneDeep'
+import commonMixins from 'data-room-ui/js/mixins/commonMixins'
+import linkageMixins from 'data-room-ui/js/mixins/linkageMixins'
+import { settingToTheme } from 'data-room-ui/js/utils/themeFormatting'
+import { mapState } from 'vuex'
+window.dataSetFields = []
+export default {
+  name: 'BasicComponentSelect',
+  components: {},
+  mixins: [commonMixins, linkageMixins],
+  props: {
+    // 组件配置
+    config: {
+      type: Object,
+      default: () => ({})
+    }
+  },
+  data () {
+    return {
+      innerConfig: {}
+    }
+  },
+  computed: {
+    ...mapState({
+      chartList: state => state.bigScreen.pageInfo.chartList
+    }),
+    isPreview () {
+      return (this.$route.path === window?.BS_CONFIG?.routers?.previewUrl) || (this.$route.path === '/big-screen/preview')
+    }
+  },
+  watch: {
+    config: {
+      handler: function (val) {
+        if (val && val.customize && val.customize.formatType === 'custom') {
+          // 解决时间格式化类型为自定义时,时间格式化类型和时间格式化值数据类型不匹配的问题
+          this.$nextTick(() => {
+            this.value = toString(this.value)
+          })
+        }
+      },
+      deep: true
+    }
+  },
+  created () { },
+  mounted () {
+    if (!this.isPreview) {
+      document.querySelector(`.date-picker-${this.config.code}`).style.pointerEvents = 'none'
+    }
+    this.changeStyle(this.config)
+  },
+  beforeDestroy () {
+  },
+  methods: {
+    dataFormatting (config, data) {
+      config.option.data = []
+      return config
+    },
+    changeStyle (config) {
+      config = { ...this.config, ...config }
+      // 样式改变时更新主题配置
+      config.theme = settingToTheme(cloneDeep(config), this.customTheme)
+      this.changeChartConfig(config)
+      this.innerConfig = config
+      // 时间选择器元素
+      const { bgColor, fontColor, fontSize } = config.customize
+      this.$nextTick(() => {
+        const timePickerEl = document.querySelector(`.date-picker-${config.code}`)
+        timePickerEl.style.backgroundColor = bgColor
+        // 时间选择器输入框元素
+        const timePickerInput = timePickerEl.querySelector('.el-input__inner')
+        if (timePickerInput) {
+        // 时间选择器输入框背景颜色
+          timePickerInput.style.backgroundColor = bgColor
+          // 时间选择器输入框字体颜色
+          timePickerInput.style.color = fontColor
+          // 时间选择器输入框字体大小
+          timePickerInput.style.fontSize = fontSize + 'px'
+        }
+        // 时间范围选择器输入框元素
+        const timePickerRangeInput = timePickerEl.querySelectorAll('.el-range-input')
+        if (timePickerRangeInput.length > 0) {
+        // 连接符
+          const timePickerRangeSeparator = timePickerEl.querySelector('.el-range-separator')
+          if (timePickerRangeSeparator) {
+            // 宽度和字体大小保持一致
+            timePickerRangeSeparator.style.width = fontSize + 'px'
+            timePickerRangeSeparator.style.color = fontColor
+            timePickerRangeSeparator.style.fontSize = fontSize + 'px'
+          }
+          timePickerRangeInput.forEach((el) => {
+          // 时间范围选择器输入框背景颜色
+            el.style.backgroundColor = bgColor
+            // 时间范围选择器输入框字体颜色
+            el.style.color = fontColor
+            // 时间范围选择器输入框字体大小
+            el.style.fontSize = fontSize + 'px'
+          })
+        }
+        // 时间选择器图标
+        const timePickerIcon = timePickerEl.querySelector('.el-input__icon')
+        if (timePickerIcon) {
+          timePickerIcon.style.width = fontSize + 'px'
+          timePickerIcon.style.fontSize = fontSize + 'px'
+        }
+      })
+    },
+    // 组件联动
+    changeValue (val) {
+      this.linkage({ [this.config.code]: val })
+    },
+    focusEvent () {
+      this.$nextTick(() => {
+        const { code } = this.innerConfig
+        const { bgColor, fontColor, hoverFontColor, hoverBgColor, selectedFontColor, rangeBgColor, inputBgColor } = this.innerConfig.customize.dropDownBox
+        const timePickerPopper = document.querySelector(`.date-picker-popper-${code}`)
+        if (timePickerPopper) {
+          // 去除边框
+          timePickerPopper.style.border = 'none'
+          // 确保下拉项的箭头颜色与下拉框的背景颜色保持一致
+          timePickerPopper.style.color = bgColor
+        }
+        // 下拉项元素
+        const pickerDropdownPanleContent = document.querySelector(`.date-picker-popper-${code}`)
+        if (pickerDropdownPanleContent) {
+          // 文字颜色
+          pickerDropdownPanleContent.style.color = fontColor
+          // 背景颜色
+          pickerDropdownPanleContent.style.backgroundColor = bgColor
+          // 下拉项添加var变量
+          const dropdown = pickerDropdownPanleContent.style
+          dropdown.setProperty('--fontColor', fontColor)
+          dropdown.setProperty('--hoverFontColor', hoverFontColor)
+          dropdown.setProperty('--bgColor', bgColor)
+          dropdown.setProperty('--inputBgColor', inputBgColor)
+          dropdown.setProperty('--selectedFontColor', selectedFontColor)
+          dropdown.setProperty('--hoverBgColor', hoverBgColor)
+          dropdown.setProperty('--rangeBgColor', rangeBgColor)
+          // 选中项字体颜色
+          const selectedEl = pickerDropdownPanleContent.querySelector('.selected')
+          if (selectedEl) {
+            selectedEl.style.color = selectedFontColor
+          }
+          // 选择过的,需要将选中颜色重置
+          const pickerItemEl = document.querySelectorAll(`.date-picker-popper-${code} .el-time-spinner__item`)
+          pickerItemEl.forEach((el) => {
+            el.style.color = fontColor
+          })
+        }
+      })
+    },
+    mouseenter () {
+      if (this.config.customize.value) {
+        setTimeout(() => {
+          // 清空图标
+          const timePickerCloseIcon = document.querySelector(`.date-picker-${this.innerConfig.code} .el-icon-circle-close`)
+          if (timePickerCloseIcon) {
+            timePickerCloseIcon.style.fontSize = this.innerConfig.customize.fontSize + 'px'
+          }
+        }, 25)
+      }
+    }
+  }
+
+}
+</script>
+
+<style lang="scss">
+.basic-component-date-picker {
+  color: '';
+  // 清空图标
+  .el-icon-circle-close {
+    display: flex ;
+    align-items: center ;
+  }
+
+  // 时间选择器
+  .el-icon-time {
+    display: flex ;
+    align-items: center ;
+  }
+
+  .el-time-panel {
+    border: none ;
+    background-color: var(--bgColor) ;
+  }
+
+  // 选择日期 时间区域
+  .el-date-picker__time-header {
+    border-bottom: var(--bgColor) ;
+
+    .el-input__inner {
+      border: none ;
+      // 添加一点阴影
+      box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.1) ;
+      color: var(--fontColor) ;
+      background-color: var(--inputBgColor) ;
+    }
+
+  }
+
+  // 头部,修改文字颜色和图标颜色
+  .el-date-picker__header {
+    color: var(--fontColor) ;
+
+    .el-date-picker__header-label {
+      color: var(--fontColor) ;
+    }
+
+    // 左右箭头图标颜色
+    .el-picker-panel__icon-btn {
+      color: var(--fontColor) ;
+    }
+  }
+  // datetimerange
+  .el-date-range-picker__time-header {
+    border-color: var(--fontColor);
+
+    // 中间箭头图标颜色
+    .el-icon-arrow-right {
+      color: var(--fontColor) ;
+    }
+    // 时间选择器输入框
+    .el-input__inner{
+      border: none;
+      color: var(--fontColor);
+      // 添加一点阴影
+      background-color: var(--inputBgColor) ;
+      box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.1) ;
+    }
+  }
+  // datetimerange
+  .el-picker-panel__content{
+    .el-icon-d-arrow-left{
+      color: var(--fontColor) ;
+      &:after{
+        color: var(--fontColor) ;
+      }
+    }
+    .el-icon-arrow-left{
+      color: var(--fontColor) ;
+      &:after{
+        color: var(--fontColor) ;
+      }
+    }
+    .el-icon-d-arrow-right{
+      color: var(--fontColor) ;
+      &:after{
+        color: var(--fontColor) ;
+      }
+    }
+    .el-icon-arrow-right{
+      color: var(--fontColor) ;
+      &:after{
+        color: var(--fontColor) ;
+      }
+    }
+  }
+  .el-date-range-picker__content.is-left{
+    border-color: var(--fontColor) ;
+  }
+  .el-date-table{
+    th{
+      border-color: var(--fontColor) ;
+    }
+    td{
+      div{
+        color: var(--fontColor) ;
+        &:hover{
+          color: var(--hoverFontColor) ;
+        }
+      }
+    }
+  }
+
+  // 范围选择器背景颜色
+  .in-range {
+    div {
+      // 下拉范围选中背景颜色
+      background-color: var(--rangeBgColor) !important;
+    }
+  }
+
+  .today {
+    span {
+      color: var(--selectedFontColor) !important;
+    }
+  }
+
+  .el-time-panel__content::before {
+    content: "";
+    top: 50%;
+    position: absolute;
+    margin-top: -15px;
+    height: 32px;
+    z-index: 1;
+    left: 0;
+    right: 0;
+    box-sizing: border-box;
+    padding-top: 6px;
+    text-align: left;
+    border-top: 1px solid var(--fontColor);
+    border-bottom: 1px solid var(--fontColor);
+  }
+  // 脚部
+  .el-picker-panel__footer {
+    border-color: var(--fontColor);
+    background-color: var(--bgColor) ;
+
+    // 清空按钮
+    .el-picker-panel__link-btn {
+      span {
+        color: var(--fontColor) ;
+      }
+    }
+
+    // 确定按钮
+    .el-button--default {
+      border: none ;
+      color: var(--fontColor) ;
+      background-color: var(--bgColor) ;
+    }
+
+    .is-disabled {
+      span {
+        color: #999 ;
+      }
+    }
+  }
+
+  .el-time-spinner {
+    margin-bottom: 0px ;
+
+    .el-time-spinner__item {
+      &:hover {
+        color: var(--hoverFontColor) ;
+        background-color: var(--hoverBgColor) ;
+      }
+    }
+
+    .active {
+      color: var(--selectedFontColor) ;
+
+      &:hover {
+        color: var(--selectedFontColor) ;
+        background-color: transparent ;
+      }
+    }
+  }
+
+  .popper__arrow {
+    bottom: -6px ;
+    border-bottom-color: var(--bgColor) !important;
+
+    &::after {
+      bottom: 0px ;
+      border-bottom-color: var(--bgColor) !important;
+    }
+  }
+
+  .cancel {
+    color: var(--fontColor) ;
+  }
+
+  .confirm {
+    color: var(--selectedFontColor);
+  }
+
+  .el-time-panel__footer {
+    border-top: 1px solid var(--fontColor) ;
+    .cancel {
+      span {
+        color: var(--fontColor) ;
+      }
+    }
+
+    // 确定按钮
+    .confirm {
+      border: none ;
+      color: var(--fontColor) ;
+      background-color: var(--bgColor) ;
+    }
+  }
+  // 年选择器
+  .el-year-table {
+    a{
+      color: var(--fontColor) ;
+      &:hover{
+        color: var(--hoverFontColor) ;
+      }
+    }
+  }
+  // 月选择器
+  .el-month-table {
+    a{
+      color: var(--fontColor) ;
+      &:hover{
+        color: var(--hoverFontColor) ;
+      }
+    }
+  }
+}
+</style>
+
+<style lang="scss" scoped>
+.basic-component-date-picker {
+  width: 100%;
+  height: 100%;
+
+  // 范围时间选择器连接符
+  ::v-deep .el-range-separator {
+    display: flex !important;
+    align-items: center !important;
+  }
+
+  .el-input--mini ::v-deep .el-input__inner {
+    height: 100% !important;
+    line-height: 100% !important;
+  }
+
+  .el-tag.el-tag--info {
+    color: var(--bs-el-text) !important;
+  }
+
+}
+
+::v-deep .el-input__inner {
+  height: 100% !important;
+  line-height: 100% !important;
+}
+::v-deep .el-range-input{
+  width: 45% !important;
+}
+</style>

+ 242 - 0
data-room-ui/packages/BasicComponents/DateTimePicker/setting.vue

@@ -0,0 +1,242 @@
+<template>
+  <div class="bs-setting-wrap">
+    <el-form
+      ref="form"
+      :model="config"
+      label-width="100px"
+      label-position="left"
+      class="setting-body bs-el-form"
+    >
+      <div>
+        <slot name="top" />
+        <el-form
+          :model="config.customize"
+          label-position="left"
+          class="setting-body bs-el-form"
+          label-width="100px"
+        >
+          <SettingTitle>位置</SettingTitle>
+          <div class="lc-field-body">
+            <PosWhSetting :config="config" />
+          </div>
+          <SettingTitle>基础</SettingTitle>
+          <div class="lc-field-body">
+            <!-- 选择器背景颜色 -->
+            <el-form-item label="背景颜色">
+              <ColorPicker
+                v-model="config.customize.bgColor"
+                :predefine="predefineThemeColors"
+              />
+            </el-form-item>
+            <!-- 字体大小 -->
+            <el-form-item label="字体大小">
+              <el-input-number
+                v-model="config.customize.fontSize"
+                class="bs-el-input-number"
+                :min="12"
+                :max="100"
+              />
+            </el-form-item>
+            <!-- 字体颜色 -->
+            <el-form-item label="字体颜色">
+              <ColorPicker
+                v-model="config.customize.fontColor"
+                :predefine="predefineThemeColors"
+              />
+            </el-form-item>
+          </div>
+          <SettingTitle>下拉项</SettingTitle>
+          <!-- 选择器下拉框背景颜色 -->
+          <div class="lc-field-body">
+            <el-form-item label="背景颜色">
+              <ColorPicker
+                v-model="config.customize.dropDownBox.bgColor"
+                :predefine="predefineThemeColors"
+              />
+            </el-form-item>
+            <el-form-item label="字体颜色">
+              <ColorPicker
+                v-model="config.customize.dropDownBox.fontColor"
+                :predefine="predefineThemeColors"
+              />
+            </el-form-item>
+            <!-- 下拉项悬浮背景颜色 -->
+            <el-form-item label="悬浮颜色">
+              <ColorPicker
+                v-model="config.customize.dropDownBox.hoverBgColor"
+                :predefine="predefineThemeColors"
+              />
+            </el-form-item>
+            <!-- 下拉项悬浮字体颜色 -->
+            <el-form-item label="悬浮字体颜色">
+              <ColorPicker
+                v-model="config.customize.dropDownBox.hoverFontColor"
+                :predefine="predefineThemeColors"
+              />
+            </el-form-item>
+            <!-- 激活项文字颜色 -->
+            <el-form-item label="选中项文字颜色">
+              <ColorPicker
+                v-model="config.customize.dropDownBox.selectedFontColor"
+                :predefine="predefineThemeColors"
+              />
+            </el-form-item>
+            <!-- 选中范围背景颜色 -->
+            <el-form-item
+              v-if="['daterange','datetimerange'].includes(config.customize.type)"
+              label="范围背景颜色"
+            >
+              <ColorPicker
+                v-model="config.customize.dropDownBox.rangeBgColor"
+                :predefine="predefineThemeColors"
+              />
+            </el-form-item>
+          </div>
+          <SettingTitle>时间格式</SettingTitle>
+          <div class="lc-field-body">
+            <el-form-item label="显示类型">
+              <el-select
+                v-model="config.customize.type"
+                class="bs-el-select"
+                popper-class="bs-el-select"
+              >
+                <el-option
+                  v-for="(type) in displayTypeOptions"
+                  :key="type.value"
+                  :label="type.label"
+                  :value="type.value"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="时间格式化类型">
+              <el-select
+                v-model="config.customize.formatType"
+                class="bs-el-select"
+                popper-class="bs-el-select"
+                clearable
+                @change="selectFormatType"
+              >
+                <el-option
+                  v-for="(type) in formatTypeOptions"
+                  :key="type.value"
+                  :label="type.label"
+                  :value="type.value"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item
+              v-if="config.customize.formatType === 'custom'"
+              label="自定义时间格式"
+            >
+              <!-- year/month/date/week/ datetime/datetimerange/daterange -->
+              <div class="time-format-description">
+                <el-input
+                  v-model="config.customize.valueFormat"
+                  placeholder="例如:yyyy-MM-dd HH:mm:ss"
+                  clearable
+                />
+                <!-- HH表示小时(24小时制),mm表示分钟,ss表示秒 -->
+                <el-tooltip
+                  content="时间格式示例:yyyy表示年份,MM表示月份,dd表示日期,HH表示小时(24小时制),mm表示分钟,ss表示秒,具体可参考Element-UI官网的日期选择器的时间格式化部分"
+                  placement="top"
+                >
+                  <span
+                    class="el-icon-question"
+                    style="color:#9e9e9e"
+                  />
+                </el-tooltip>
+              </div>
+            </el-form-item>
+          </div>
+        </el-form>
+      </div>
+    </el-form>
+  </div>
+</template>
+<script>
+import SettingTitle from 'data-room-ui/SettingTitle/index.vue'
+import ColorPicker from 'data-room-ui/ColorPicker/index.vue'
+import PosWhSetting from 'data-room-ui/BigScreenDesign/RightSetting/PosWhSetting.vue'
+export default {
+  name: 'Border14Setting',
+  components: {
+    ColorPicker,
+    PosWhSetting,
+    SettingTitle
+  },
+  props: {
+    config: {
+      type: Object,
+      required: true
+    },
+    predefineThemeColors: {
+      type: Array,
+      default: () => {
+        return [
+          '#007aff',
+          '#1aa97b',
+          '#ff4d53',
+          '#1890FF',
+          '#DF0E1B',
+          '#0086CC',
+          '#2B74CF',
+          '#00BC9D',
+          '#ED7D32'
+        ]
+      }
+    }
+  },
+  data () {
+    return {
+      hour: 'HH',
+      minute: 'mm',
+      second: 'ss',
+      // 时间格式化类型选项
+      formatTypeOptions: [
+        { label: 'Date 对象', value: 'default' },
+        { label: '时间戳', value: 'timestamp' },
+        { label: '自定义', value: 'custom' }
+      ],
+      // 时间显示类型选项 :year/month/date/week/ datetime/datetimerange/daterange
+      displayTypeOptions: [
+        { label: '年', value: 'year' },
+        { label: '月', value: 'month' },
+        { label: '日', value: 'date' },
+        { label: '周', value: 'week' },
+        { label: '日期时间', value: 'datetime' },
+        { label: '日期时间范围', value: 'datetimerange' },
+        { label: '日期范围', value: 'daterange' }
+      ]
+    }
+  },
+  watch: {},
+  mounted () {},
+  methods: {
+    selectFormatType (type) {
+      if (type === 'default') {
+        this.config.customize.value = ''
+        this.config.customize.valueFormat = ''
+      } else if (type === 'timestamp') {
+        this.config.customize.value = 0
+        this.config.customize.valueFormat = 'timestamp'
+      } else if (type === 'custom') {
+        this.config.customize.valueFormat = 'yyyy-MM-dd HH:mm:ss'
+      }
+    }
+  }
+}
+</script>
+
+  <style lang="scss" scoped>
+  .lc-field-body {
+    width: 97%;
+    padding: 16px;
+  }
+  .time-format-description{
+    display: flex;
+    align-items: center;
+    .el-tooltip{
+      margin-left: 5px;
+    }
+  }
+  </style>

+ 59 - 0
data-room-ui/packages/BasicComponents/DateTimePicker/settingConfig.js

@@ -0,0 +1,59 @@
+
+import { commonConfig, displayOption } from 'data-room-ui/js/config'
+
+export const settingConfig = {
+  // text内容
+  text: '时间选择器',
+  // 设置面板属性的显隐
+  displayOption: {
+    ...displayOption,
+    dataAllocation: { enable: true },
+    dataSourceType: { enable: false },
+    params: { enable: false }
+  }
+}
+
+const customConfig = {
+  type: 'dateTimePicker',
+  // 名称
+  title: '日期时间选择器',
+  root: {
+    version: '2023092101'
+  },
+  // 自定义属性
+  customize: {
+    value: '',
+    // 选择框背景颜色
+    bgColor: '#35393F',
+    // 选择框文字颜色
+    fontColor: '#FFFFFF',
+    // 选择框文字大小
+    fontSize: 20,
+    // 显示类型 year/month/date/week/ datetime/datetimerange/daterange
+    type: 'datetime',
+    // 时间格式化类型:Date 对象(default),时间戳(timestamp),自定义(custom)
+    formatType: 'default',
+    // 绑定值的格式
+    valueFormat: '',
+    // 下拉框
+    dropDownBox: {
+      // 下拉框背景颜色
+      bgColor: '#35393F',
+      // 下拉框输入框背景颜色
+      inputBgColor: '#2C3036',
+      // 下拉框字体颜色
+      fontColor: '#FFFFFF',
+      // 下拉项hover背景颜色
+      hoverBgColor: '#6A7E9D',
+      // 下拉项hover字体颜色
+      hoverFontColor: '#FFFFFF',
+      // 下拉项激活文字颜色
+      selectedFontColor: '#00BFFF',
+      // 范围时间选择器选中范围颜色
+      rangeBgColor: '#409EFF'
+    }
+  }
+}
+export const dataConfig = {
+  ...commonConfig(customConfig)
+}

+ 4 - 1
data-room-ui/packages/BasicComponents/LinkChart/index.vue

@@ -76,9 +76,12 @@ export default {
 <style lang="scss" scoped>
 <style lang="scss" scoped>
   .bs-design-wrap{
   .bs-design-wrap{
     width: 100%;
     width: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
   }
   }
   .content-box{
   .content-box{
-    text-align: center;
+    //text-align: center;
     /* 将背景设为渐变 */
     /* 将背景设为渐变 */
     /*background-image: -webkit-linear-gradient(left, #6294F7, #C85D14);*/
     /*background-image: -webkit-linear-gradient(left, #6294F7, #C85D14);*/
     /* 规定背景绘制区域 */
     /* 规定背景绘制区域 */

+ 6 - 11
data-room-ui/packages/BasicComponents/Select/index.vue

@@ -116,7 +116,7 @@ export default {
     // 组件联动
     // 组件联动
     selectChange (val) {
     selectChange (val) {
       if (val) {
       if (val) {
-        this.linkage(this.config.option.data.find(item => item[this.config.dataSource.metricField] === val))
+        this.linkage(this.optionData.find(item => item[this.config.dataSource.metricField] === val))
       }
       }
     },
     },
     visibleChange (val) {
     visibleChange (val) {
@@ -171,8 +171,12 @@ export default {
     background-color: transparent !important;
     background-color: transparent !important;
   }
   }
   .popper__arrow{
   .popper__arrow{
+    bottom: -6px !important;
+    border-top-color:var(--color) !important;
     border-bottom-color:var(--color) !important;
     border-bottom-color:var(--color) !important;
     &::after{
     &::after{
+      bottom: 0px !important;
+      border-top-color:var(--color) !important;
       border-bottom-color:var(--color) !important;
       border-bottom-color:var(--color) !important;
     }
     }
   }
   }
@@ -195,7 +199,7 @@ export default {
     //  选择器输入框样式
     //  选择器输入框样式
     .el-input__inner {
     .el-input__inner {
       height: 100% !important;
       height: 100% !important;
-      border-color: var(--bs-el-border) !important;
+      border-color: none !important;
     }
     }
   }
   }
   .el-select-dropdown__item.hover,
   .el-select-dropdown__item.hover,
@@ -203,17 +207,8 @@ export default {
     color: var(--dropDownHoverFontColor) !important;
     color: var(--dropDownHoverFontColor) !important;
     background-color: var(--dropDownHoverBackgroundColor) !important;
     background-color: var(--dropDownHoverBackgroundColor) !important;
   }
   }
-
   .el-tag.el-tag--info {
   .el-tag.el-tag--info {
     color: var(--bs-el-text) !important;
     color: var(--bs-el-text) !important;
   }
   }
-
-  .popper__arrow {
-    bottom: 0 !important;
-
-    &:after {
-      bottom: 0 !important;
-    }
-  }
 }
 }
 </style>
 </style>

+ 4 - 1
data-room-ui/packages/BasicComponents/Texts/index.vue

@@ -50,9 +50,12 @@ export default {
 <style lang="scss" scoped>
 <style lang="scss" scoped>
   .bs-design-wrap{
   .bs-design-wrap{
     width: 100%;
     width: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
   }
   }
   .content-box{
   .content-box{
-    text-align: center;
+    //text-align: center;
     /* 将背景设为渐变 */
     /* 将背景设为渐变 */
     /*background-image: -webkit-linear-gradient(left, #6294F7, #C85D14);*/
     /*background-image: -webkit-linear-gradient(left, #6294F7, #C85D14);*/
     /* 规定背景绘制区域 */
     /* 规定背景绘制区域 */

+ 1 - 1
data-room-ui/packages/BasicComponents/ThemeSelect/index.vue

@@ -11,7 +11,7 @@
         class="el-dropdown-link content-box"
         class="el-dropdown-link content-box"
         :style="{'font-size': config.customize.fontSize +'px','font-weight': +config.customize.fontWeight,'background-image': `-webkit-linear-gradient(${config.customize.color})`}"
         :style="{'font-size': config.customize.fontSize +'px','font-weight': +config.customize.fontWeight,'background-image': `-webkit-linear-gradient(${config.customize.color})`}"
       >
       >
-        暗黑主题
+        主题切换
       </div>
       </div>
       <el-dropdown-menu
       <el-dropdown-menu
         slot="dropdown"
         slot="dropdown"

+ 25 - 14
data-room-ui/packages/BasicComponents/TimePicker/index.vue

@@ -4,8 +4,8 @@
     :picker-options="config.customize.pickerOptions"
     :picker-options="config.customize.pickerOptions"
     placeholder="选择时间"
     placeholder="选择时间"
     clearable
     clearable
-    :class="['basic-component-time-select', `time-picker-${config.code}`]"
-    :popper-class="'basic-component-time-select time-picker-popper-' + config.code"
+    :class="['basic-component-time-picker', `time-picker-${config.code}`]"
+    :popper-class="'basic-component-time-picker time-picker-popper-' + config.code"
     :value-format="config.customize.valueFormat"
     :value-format="config.customize.valueFormat"
     @focus="focusEvent"
     @focus="focusEvent"
     @change="changeValue"
     @change="changeValue"
@@ -15,7 +15,6 @@
 
 
 <script>
 <script>
 import cloneDeep from 'lodash/cloneDeep'
 import cloneDeep from 'lodash/cloneDeep'
-import { EventBus } from 'data-room-ui/js/utils/eventBus'
 import commonMixins from 'data-room-ui/js/mixins/commonMixins'
 import commonMixins from 'data-room-ui/js/mixins/commonMixins'
 import linkageMixins from 'data-room-ui/js/mixins/linkageMixins'
 import linkageMixins from 'data-room-ui/js/mixins/linkageMixins'
 import { getDataSetDetails } from 'data-room-ui/js/api/bigScreenApi'
 import { getDataSetDetails } from 'data-room-ui/js/api/bigScreenApi'
@@ -62,16 +61,11 @@ export default {
   created () { },
   created () { },
   mounted () {
   mounted () {
     if (!this.isPreview) {
     if (!this.isPreview) {
-      document.querySelector(`.time-picker-${this.config.code}`).style.pointerEvents = 'none'
+      // document.querySelector(`.time-picker-${this.config.code}`).style.pointerEvents = 'none'
     }
     }
     this.changeStyle(this.config)
     this.changeStyle(this.config)
-    EventBus.$on('changeBusinessKey', () => {
-      window.dataSetFields = []
-    })
-  },
-  beforeDestroy () {
-    EventBus.$off('changeBusinessKey')
   },
   },
+  beforeDestroy () { },
   methods: {
   methods: {
     dataFormatting (config, data) {
     dataFormatting (config, data) {
       // 数据返回成功则赋值
       // 数据返回成功则赋值
@@ -183,7 +177,7 @@ export default {
 </script>
 </script>
 
 
 <style lang="scss">
 <style lang="scss">
-.basic-component-time-select {
+.basic-component-time-picker {
   color: '';
   color: '';
 
 
   // 清空图标
   // 清空图标
@@ -193,8 +187,9 @@ export default {
     display: flex !important;
     display: flex !important;
     align-items: center !important;
     align-items: center !important;
   }
   }
+
   // 时间选择器
   // 时间选择器
-  .el-icon-time{
+  .el-icon-time {
     display: flex !important;
     display: flex !important;
     align-items: center !important;
     align-items: center !important;
   }
   }
@@ -219,6 +214,22 @@ export default {
     }
     }
   }
   }
 
 
+  .el-time-panel__content::before {
+    content: "";
+    top: 50%;
+    position: absolute;
+    margin-top: -15px;
+    height: 32px;
+    z-index: 1;
+    left: 0;
+    right: 0;
+    box-sizing: border-box;
+    padding-top: 6px;
+    text-align: left;
+    border-top: 1px solid var(--dropDownFontColor);
+    border-bottom: 1px solid var(--dropDownFontColor);
+  }
+
   .popper__arrow {
   .popper__arrow {
     border-bottom-color: var(--dropDownBackgroundColor) !important;
     border-bottom-color: var(--dropDownBackgroundColor) !important;
 
 
@@ -237,13 +248,13 @@ export default {
   }
   }
 
 
   .el-time-panel__footer {
   .el-time-panel__footer {
-    border-top: 1px solid var(--dropDownFontColor) !important;
+    border-color: 1px solid var(--dropDownFontColor) !important;
   }
   }
 }
 }
 </style>
 </style>
 
 
 <style lang="scss" scoped>
 <style lang="scss" scoped>
-.basic-component-time-select {
+.basic-component-time-picker {
   width: 100%;
   width: 100%;
   height: 100%;
   height: 100%;
 
 

+ 0 - 12
data-room-ui/packages/BasicComponents/TimePicker/setting.vue

@@ -170,18 +170,6 @@ export default {
         { label: 'Date 对象', value: 'default' },
         { label: 'Date 对象', value: 'default' },
         { label: '时间戳', value: 'timestamp' },
         { label: '时间戳', value: 'timestamp' },
         { label: '自定义', value: 'custom' }
         { label: '自定义', value: 'custom' }
-      ],
-      hourOptions: [
-        { label: '24小时制,不补0', value: 'H' },
-        { label: '24小时制,补0', value: 'HH' }
-      ],
-      minuteOptions: [
-        { label: '分钟,不补0', value: 'm' },
-        { label: '分钟,补0', value: 'mm' }
-      ],
-      secondOptions: [
-        { label: '秒,不补0', value: 's' },
-        { label: '秒,补0', value: 'ss' }
       ]
       ]
     }
     }
   },
   },

+ 4 - 4
data-room-ui/packages/BigScreenDesign/DataViewDialog/index.vue

@@ -9,6 +9,7 @@
     <el-dialog
     <el-dialog
       :close-on-click-modal="false"
       :close-on-click-modal="false"
       title="数据查看"
       title="数据查看"
+      width="60%"
       :visible.sync="formVisible"
       :visible.sync="formVisible"
       :append-to-body="false"
       :append-to-body="false"
       class="bs-dialog-wrap bs-el-dialog"
       class="bs-dialog-wrap bs-el-dialog"
@@ -18,7 +19,6 @@
           ref="table"
           ref="table"
           v-loading="loading"
           v-loading="loading"
           class="bs-table bs-el-table"
           class="bs-table bs-el-table"
-          height="300"
           :data="dataList"
           :data="dataList"
         >
         >
           <el-table-column
           <el-table-column
@@ -220,11 +220,11 @@ export default {
 .bs-data-view-dialog{
 .bs-data-view-dialog{
   /deep/.el-dialog__body{
   /deep/.el-dialog__body{
     background-color: var(--bs-background-2) !important;
     background-color: var(--bs-background-2) !important;
-    height: 500px!important;
     overflow-y: auto!important;
     overflow-y: auto!important;
+    max-height: calc(90vh - 500px) !important;
   }
   }
   .table-box{
   .table-box{
-    max-height: 500px; /* 设置最大高度,根据需要调整 */
+    height: 100%;
     overflow-y: auto; /* 当内容溢出时显示垂直滚动条 */
     overflow-y: auto; /* 当内容溢出时显示垂直滚动条 */
   }
   }
   .dialog-footer{
   .dialog-footer{
@@ -248,7 +248,7 @@ export default {
     color: #bcc9d4;
     color: #bcc9d4;
   }
   }
   .el-table--scrollable-y /deep/.el-table__body-wrapper{
   .el-table--scrollable-y /deep/.el-table__body-wrapper{
-    overflow-y: hidden;
+    //overflow-y: hidden;
   }
   }
   /* 修改滚动条的样式 */
   /* 修改滚动条的样式 */
   /deep/.el-dialog__body::-webkit-scrollbar {
   /deep/.el-dialog__body::-webkit-scrollbar {

+ 1 - 1
data-room-ui/packages/BigScreenDesign/OverallSetting/index.vue

@@ -321,7 +321,7 @@ export default {
       return this.form.customTheme === 'light' ? 'lightBgColor' : 'bgColor'
       return this.form.customTheme === 'light' ? 'lightBgColor' : 'bgColor'
     },
     },
     currentBg () {
     currentBg () {
-      return this.form.customTheme === 'light' ? 'lightBgColor' : 'bg'
+      return this.form.customTheme === 'light' ? 'lightBg' : 'bg'
     },
     },
     dsValue () {
     dsValue () {
       return this.form.cacheDataSets?.map(dSet => ({
       return this.form.cacheDataSets?.map(dSet => ({

+ 16 - 0
data-room-ui/packages/BigScreenDesign/PageDesignTop.vue

@@ -13,10 +13,12 @@
       <span style="margin-right:8px;font-size:12px">缩放</span>
       <span style="margin-right:8px;font-size:12px">缩放</span>
       <el-input-number
       <el-input-number
         class="bs-el-input-number"
         class="bs-el-input-number"
+        ref="zoomInput"
         style="margin-right:10px"
         style="margin-right:10px"
         :value="zoom"
         :value="zoom"
         :min="1"
         :min="1"
         label="描述文字"
         label="描述文字"
+        :controls="true"
         @change="changeZoom"
         @change="changeZoom"
       />
       />
       <CusBtn
       <CusBtn
@@ -219,6 +221,12 @@ export default {
       )
       )
     }
     }
   },
   },
+  mounted() {
+    this.$refs.zoomInput.$el.addEventListener('mousewheel', this.handleMouseWheel);
+  },
+  beforeDestroy() {
+    this.$refs.zoomInput.$el.removeEventListener('mousewheel', this.handleMouseWheel);
+  },
   methods: {
   methods: {
     ...mapActions({
     ...mapActions({
       initLayout: 'bigScreen/initLayout'
       initLayout: 'bigScreen/initLayout'
@@ -230,6 +238,14 @@ export default {
       undoTimeLine: 'bigScreen/undoTimeLine',
       undoTimeLine: 'bigScreen/undoTimeLine',
       saveTimeLine: 'bigScreen/saveTimeLine'
       saveTimeLine: 'bigScreen/saveTimeLine'
     }),
     }),
+    handleMouseWheel() {
+      const delta = Math.sign(event.deltaY);
+      // 限制最小缩放比例为10
+      if (this.zoom <= 10 && delta > 0) return;
+      event.preventDefault();
+      let zoom1 = this.zoom - delta
+      this.$emit('changeZoom', zoom1)
+    },
     changeZoom (val) {
     changeZoom (val) {
       this.$emit('changeZoom', val)
       this.$emit('changeZoom', val)
     },
     },

+ 4 - 1
data-room-ui/packages/BigScreenDesign/RightSetting/DataSetting.vue

@@ -57,7 +57,10 @@
                 v-model="config.dataHandler"
                 v-model="config.dataHandler"
                 type="textarea"
                 type="textarea"
                 :rows="5"
                 :rows="5"
-                placeholder="请输入数据处理脚本"
+                placeholder="示例:
+data.forEach(item => {
+// 数据处理
+})"
               />
               />
             </el-form-item>
             </el-form-item>
           </div>
           </div>

+ 1 - 0
data-room-ui/packages/BigScreenList/CatalogEditForm.vue

@@ -155,6 +155,7 @@ export default {
   data () {
   data () {
     const validateName = (rule, value, callback) => {
     const validateName = (rule, value, callback) => {
       this.$dataRoomAxios.post('/bigScreen/type/nameRepeat', {
       this.$dataRoomAxios.post('/bigScreen/type/nameRepeat', {
+        id: this.currentCatalog.id,
         name: value,
         name: value,
         type: this.catalogType
         type: this.catalogType
       }, true).then((r) => {
       }, true).then((r) => {

+ 2 - 1
data-room-ui/packages/BigScreenMag/SideMenu.vue

@@ -126,6 +126,7 @@ export default {
   data () {
   data () {
     const validateName = (rule, value, callback) => {
     const validateName = (rule, value, callback) => {
       this.$dataRoomAxios.post('/bigScreen/type/nameRepeat', {
       this.$dataRoomAxios.post('/bigScreen/type/nameRepeat', {
+        id: this.currentCatalog.id,
         name: value,
         name: value,
         type: this.type || 'bigScreenCatalog'
         type: this.type || 'bigScreenCatalog'
       }, true).then((r) => {
       }, true).then((r) => {
@@ -234,7 +235,7 @@ export default {
     },
     },
     // 删除目录
     // 删除目录
     catalogDel (catalog) {
     catalogDel (catalog) {
-      this.$confirm('确定删除该目录?', '提示', {
+      this.$confirm('分组删除后,分组下的大屏会被归纳至全部中,确定删除该分组?', '提示', {
         confirmButtonText: '确定',
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         cancelButtonText: '取消',
         type: 'warning',
         type: 'warning',

+ 16 - 17
data-room-ui/packages/BorderComponents/GcBorder14/index.vue

@@ -14,20 +14,22 @@
         border: ${width}px solid ${color};
         border: ${width}px solid ${color};
         opacity: ${opacity/ 100};
         opacity: ${opacity/ 100};
         background-image: linear-gradient(${gradientDirection}, ${
         background-image: linear-gradient(${gradientDirection}, ${
-          gradientColor0 ? gradientColor0 : gradientColor1
-        } , ${gradientColor1 ? gradientColor1 : gradientColor0})
+        gradientColor0 ? gradientColor0 : gradientColor1
+      } , ${gradientColor1 ? gradientColor1 : gradientColor0})
       `"
       `"
     >
     >
-    <div class="element"
-      v-if="config.border.isTitle"
-      :style="`
+      <div
+        v-if="config.border.isTitle"
+        class="element"
+        :style="`
       color:${fontColor};
       color:${fontColor};
       font-size:${config.border.fontSize}px;
       font-size:${config.border.fontSize}px;
       line-height:${config.border.titleHeight}px;
       line-height:${config.border.titleHeight}px;
       height:${config.border.titleHeight};
       height:${config.border.titleHeight};
       padding:0 0 0 20px`"
       padding:0 0 0 20px`"
       >
       >
-      {{config.title}}</div>
+        {{ config.title }}
+      </div>
     </div>
     </div>
   </div>
   </div>
 </template>
 </template>
@@ -50,32 +52,29 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
-     fontColor () {
+    fontColor () {
       return this.config.border.fontColor ? this.config.border.fontColor
       return this.config.border.fontColor ? this.config.border.fontColor
         : '#fff'
         : '#fff'
     },
     },
-     color () {
+    color () {
       return this.config.border.borderColor || ''
       return this.config.border.borderColor || ''
     },
     },
     width () {
     width () {
       return this.config.border.borderWidth || 2
       return this.config.border.borderWidth || 2
     },
     },
     gradientColor0 () {
     gradientColor0 () {
-      console.log(this.config.border.gradientColor)
-      if(this.config.border.gradientColor){
-        return this.config.border.gradientColor[0] ||this.config.border.gradientColor[1]
-      }else{
+      if (this.config.border.gradientColor) {
+        return this.config.border.gradientColor[0] || this.config.border.gradientColor[1]
+      } else {
         return 'transparent'
         return 'transparent'
       }
       }
     },
     },
     gradientColor1 () {
     gradientColor1 () {
-      console.log(this.config.border.gradientColor)
-      if(this.config.border.gradientColor){
-        return this.config.border.gradientColor[1] ||this.config.border.gradientColor[0]
-      }else{
+      if (this.config.border.gradientColor) {
+        return this.config.border.gradientColor[1] || this.config.border.gradientColor[0]
+      } else {
         return 'transparent'
         return 'transparent'
       }
       }
-
     },
     },
     radiusLeftTop () {
     radiusLeftTop () {
       return this.config.border.radiusLeftTop || 2
       return this.config.border.radiusLeftTop || 2

+ 39 - 35
data-room-ui/packages/BorderComponents/GcBorder7/index.vue

@@ -3,22 +3,24 @@
     style="width: 100%;height: 100%"
     style="width: 100%;height: 100%"
     class="bs-design-wrap"
     class="bs-design-wrap"
   >
   >
-     <dv-border-box-7
+    <dv-border-box-7
       :id="'dataV' + config.code"
       :id="'dataV' + config.code"
-      :background-color="(config.border.gradientColor&&(config.border.gradientColor[0]||config.border.gradientColor[1]))?`url(#${borderBgId})`:'transparent'"
-      :color='borderColor'
       :key="updateKey"
       :key="updateKey"
+      :background-color="(config.border.gradientColor&&(config.border.gradientColor[0]||config.border.gradientColor[1]))?`url(#${borderBgId})`:'transparent'"
+      :color="borderColor"
     >
     >
-    <div class="element"
-    v-if="config.border.isTitle"
-    :style="`
+      <div
+        v-if="config.border.isTitle"
+        class="element"
+        :style="`
     color:${color};
     color:${color};
     font-size:${config.border.fontSize}px;
     font-size:${config.border.fontSize}px;
     line-height:${config.border.titleHeight}px;
     line-height:${config.border.titleHeight}px;
     height:${config.border.titleHeight};
     height:${config.border.titleHeight};
     padding:0 0 0 20px`"
     padding:0 0 0 20px`"
-    >
-    {{config.title}}</div>
+      >
+        {{ config.title }}
+      </div>
     </dv-border-box-7>
     </dv-border-box-7>
   </div>
   </div>
 </template>
 </template>
@@ -41,7 +43,7 @@ export default {
   },
   },
   data () {
   data () {
     return {
     return {
-    borderBgId: `borderBg${this.config.code}`
+      borderBgId: `borderBg${this.config.code}`
     }
     }
   },
   },
   computed: {
   computed: {
@@ -57,50 +59,52 @@ export default {
     color () {
     color () {
       return this.config.border.fontColor ? this.config.border.fontColor
       return this.config.border.fontColor ? this.config.border.fontColor
         : '#fff'
         : '#fff'
-    },
+    }
   },
   },
   watch: {
   watch: {
-    updateKey:{
+    updateKey: {
       handler (val) {
       handler (val) {
-        this.$nextTick(()=>{
+        this.$nextTick(() => {
           this.changeColor()
           this.changeColor()
         })
         })
       },
       },
       deep: true
       deep: true
     },
     },
-    'config.border.gradientColor':{
-         handler (val) {
-          this.changeColor()
-      },immediate: true
+    'config.border.gradientColor': {
+      handler (val) {
+        this.changeColor()
+      },
+      immediate: true
     },
     },
-    'config.border.gradientDirection':{
-         handler (val) {
-          this.changeColor()
-      },immediate: true
+    'config.border.gradientDirection': {
+      handler (val) {
+        this.changeColor()
+      },
+      immediate: true
     },
     },
-    'config.border.opacity':{
-         handler (val) {
-          this.changeColor()
-      },immediate: true
+    'config.border.opacity': {
+      handler (val) {
+        this.changeColor()
+      },
+      immediate: true
     }
     }
   },
   },
   mounted () {
   mounted () {
     this.changeColor()
     this.changeColor()
   },
   },
   methods: {
   methods: {
-     changeColor(){
-      if(!this.config.border.opacity){
-              this.config.border.opacity=100
-        }
-        console.log(this.config.border.gradientColor)
-      if(!this.config.border.gradientColor) return
+    changeColor () {
+      if (!this.config.border.opacity) {
+        this.config.border.opacity = 100
+      }
+      if (!this.config.border.gradientColor) return
       if (document.querySelector(`#dataV${this.config.code}`)) {
       if (document.querySelector(`#dataV${this.config.code}`)) {
-          const borderElement = document.querySelector(`#dataV${this.config.code}`).querySelector('.border') || document.querySelector(`#dataV${this.config.code}`)?.querySelector('.dv-border-svg-container')
-          if (borderElement) {
-              borderElement.style.opacity = (this.config.border.opacity / 100)
-              borderElement.style.background = `linear-gradient(${this.config.border.gradientDirection},${this.config.border.gradientColor[0]?this.config.border.gradientColor[0]:this.config.border.gradientColor[1]}, ${this.config.border.gradientColor[1]?this.config.border.gradientColor[1]:this.config.border.gradientColor[0]})`
-          }
+        const borderElement = document.querySelector(`#dataV${this.config.code}`).querySelector('.border') || document.querySelector(`#dataV${this.config.code}`)?.querySelector('.dv-border-svg-container')
+        if (borderElement) {
+          borderElement.style.opacity = (this.config.border.opacity / 100)
+          borderElement.style.background = `linear-gradient(${this.config.border.gradientDirection},${this.config.border.gradientColor[0] ? this.config.border.gradientColor[0] : this.config.border.gradientColor[1]}, ${this.config.border.gradientColor[1] ? this.config.border.gradientColor[1] : this.config.border.gradientColor[0]})`
         }
         }
+      }
     }
     }
   }
   }
 }
 }

+ 2 - 1
data-room-ui/packages/ComponentList/CatalogEditForm.vue

@@ -154,6 +154,7 @@ export default {
     // 检验分组名称是否重复
     // 检验分组名称是否重复
     const validateName = (rule, value, callback) => {
     const validateName = (rule, value, callback) => {
       this.$dataRoomAxios.post('/bigScreen/type/nameRepeat', {
       this.$dataRoomAxios.post('/bigScreen/type/nameRepeat', {
+        id: this.currentCatalog.id,
         name: value,
         name: value,
         type: this.catalogType
         type: this.catalogType
       }, true).then((r) => {
       }, true).then((r) => {
@@ -245,7 +246,7 @@ export default {
     },
     },
     // 删除目录
     // 删除目录
     catalogDel (catalog) {
     catalogDel (catalog) {
-      this.$confirm('确定删除该分组?', '提示', {
+      this.$confirm('分组删除后,分组下的组件会被归纳至全部中,确定删除该分组?', '提示', {
         confirmButtonText: '确定',
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         cancelButtonText: '取消',
         type: 'warning',
         type: 'warning',

+ 26 - 1
data-room-ui/packages/DataSetManagement/src/CategroyEditForm.vue

@@ -51,6 +51,7 @@
 
 
 <script>
 <script>
 import { categoryAdd, categoryUpdate } from 'data-room-ui/js/utils/datasetConfigService'
 import { categoryAdd, categoryUpdate } from 'data-room-ui/js/utils/datasetConfigService'
+import { categoryNameRepeat } from "../../js/utils/datasetConfigService";
 export default {
 export default {
   name: 'CategroyEditForm',
   name: 'CategroyEditForm',
   props: {
   props: {
@@ -60,6 +61,29 @@ export default {
     }
     }
   },
   },
   data () {
   data () {
+    const nameRepeatCheck = (rule, value, callback) => {
+      let parentId = ''
+      if (this.nodeFlag) {
+        // 新增节点
+        if (this.radio === 0) {
+          // 新增同级
+          parentId = this.nodeData.parentId
+        } else {
+          // 新增子级
+          parentId = this.nodeData.id
+        }
+      }
+      categoryNameRepeat({
+        ...this.dataForm,
+        parentId
+      }).then(res => {
+        if (res) {
+          callback(new Error('分组名称已存在'))
+        } else {
+          callback()
+        }
+      })
+    }
     return {
     return {
       type: 'dataset',
       type: 'dataset',
       dataForm: {
       dataForm: {
@@ -73,7 +97,8 @@ export default {
       nodeFlag: false,
       nodeFlag: false,
       rules: {
       rules: {
         name: [
         name: [
-          { required: true, message: '分组名称不能为空', trigger: 'blur' }
+          { required: true, message: '分组名称不能为空', trigger: 'blur' },
+          { validator: nameRepeatCheck, trigger: 'blur' }
         ]
         ]
       },
       },
       nodeData: {}
       nodeData: {}

+ 4 - 0
data-room-ui/packages/DataSetManagement/src/OriginalEditForm.vue

@@ -229,6 +229,7 @@
                 >
                 >
                   <el-radio-group
                   <el-radio-group
                     v-model="dataForm.repeatStatus"
                     v-model="dataForm.repeatStatus"
+                    @change="repeatStatusChange"
                     class="bs-el-radio-group"
                     class="bs-el-radio-group"
                     :disabled="!isEdit"
                     :disabled="!isEdit"
                   >
                   >
@@ -850,6 +851,9 @@ export default {
       if (!this.dataForm.tableName) return
       if (!this.dataForm.tableName) return
       this.queryAllField()
       this.queryAllField()
     },
     },
+    repeatStatusChange () {
+      this.getPreViewData()
+    },
     /**
     /**
      * 获取原始表字段列表
      * 获取原始表字段列表
      */
      */

+ 495 - 79
data-room-ui/packages/Echarts/3D图/3D分组柱状图.js

@@ -39,58 +39,437 @@ const setting = [
     tabName: 'data'
     tabName: 'data'
   },
   },
   {
   {
-    label: '柱子顶部颜色',
-    type: 'colorPicker', // 设置组件类型
-    field: 'seriesCustom_barTopColor', // 字段
-    optionField: 'seriesCustom.barTopColor', // 对应options中的字段
-    value: '#2DB1EF',
+    label: '柱子宽度',
+    type: 'inputNumber', // 设置组件类型
+    field: 'seriesCustom_barWidth', // 字段
+    optionField: 'seriesCustom.barWidth', // 对应options中的字段
+    value: 20,
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'graph'
     groupName: 'graph'
   },
   },
+  // {
+  //   label: '柱子顶部颜色',
+  //   type: 'colorPicker', // 设置组件类型
+  //   field: 'seriesCustom_barTopColor', // 字段
+  //   optionField: 'seriesCustom.barTopColor', // 对应options中的字段
+  //   value: '#2DB1EF',
+  //   tabName: 'custom',
+  //   groupName: 'graph'
+  // },
+  // {
+  //   label: '柱子颜色1',
+  //   type: 'colorPicker', // 设置组件类型
+  //   field: 'seriesCustom_barColor1', // 字段
+  //   optionField: 'seriesCustom.barColor1', // 对应options中的字段
+  //   value: '#115ba6',
+  //   tabName: 'custom',
+  //   groupName: 'graph'
+  // },
+  // {
+  //   label: '柱子颜色2',
+  //   type: 'colorPicker', // 设置组件类型
+  //   field: 'seriesCustom_barColor2', // 字段
+  //   optionField: 'seriesCustom.barColor2', // 对应options中的字段
+  //   value: '#1db0dd',
+  //   tabName: 'custom',
+  //   groupName: 'graph'
+  // },
+  // {
+  //   label: '柱子底部颜色',
+  //   type: 'colorPicker', // 设置组件类型
+  //   field: 'seriesCustom_barBottomColor', // 字段
+  //   optionField: 'seriesCustom.barBottomColor', // 对应options中的字段
+  //   value: '#187dcb',
+  //   tabName: 'custom',
+  //   groupName: 'graph'
+  // },
+  // {
+  //   label: '柱子背景顶部颜色',
+  //   type: 'colorPicker', // 设置组件类型
+  //   field: 'seriesCustom_shadowTopColor', // 字段
+  //   optionField: 'seriesCustom.shadowTopColor', // 对应options中的字段
+  //   value: '#142f5a',
+  //   tabName: 'custom',
+  //   groupName: 'graph'
+  // },
+  // {
+  //   label: '柱子背景颜色',
+  //   type: 'colorPicker', // 设置组件类型
+  //   field: 'seriesCustom_shadowColor', // 字段
+  //   optionField: 'seriesCustom.shadowColor', // 对应options中的字段
+  //   value: '#041133',
+  //   tabName: 'custom',
+  //   groupName: 'graph'
+  // },
   {
   {
-    label: '柱子颜色1',
-    type: 'colorPicker', // 设置组件类型
-    field: 'seriesCustom_barColor1', // 字段
-    optionField: 'seriesCustom.barColor1', // 对应options中的字段
-    value: '#115ba6',
+    label: '数据标签',
+    type: 'switch', // 设置组件类型
+    field: 'series_barColor_label_show', // 字段
+    optionField: 'series.barColor.label.show', // 对应options中的字段
+    value: 0,
+    active: 1,
+    inactive: 0,
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'graph'
     groupName: 'graph'
   },
   },
   {
   {
-    label: '柱子颜色2',
-    type: 'colorPicker', // 设置组件类型
-    field: 'seriesCustom_barColor2', // 字段
-    optionField: 'seriesCustom.barColor2', // 对应options中的字段
-    value: '#1db0dd',
+    label: '数据标签位置',
+    type: 'select', // 设置组件类型
+    field: 'series_barColor_label_position', // 字段
+    optionField: 'series.barColor.label.position', // 对应options中的字段
+    // 是否多选
+    multiple: false,
+    value: 'inside',
     tabName: 'custom',
     tabName: 'custom',
+    options: [
+      {
+        label: '顶部',
+        value: 'top'
+      },
+      {
+        label: '居中',
+        value: 'inside'
+      },
+      {
+        label: '底部',
+        value: 'bottom'
+      }
+    ],
     groupName: 'graph'
     groupName: 'graph'
   },
   },
   {
   {
-    label: '柱子底部颜色',
+    label: '数据标签颜色',
     type: 'colorPicker', // 设置组件类型
     type: 'colorPicker', // 设置组件类型
-    field: 'seriesCustom_barBottomColor', // 字段
-    optionField: 'seriesCustom.barBottomColor', // 对应options中的字段
-    value: '#187dcb',
+    field: 'series_barColor_label_color', // 字段
+    optionField: 'series.barColor.label.color', // 对应options中的字段
+    value: '#ffffff',
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'graph'
     groupName: 'graph'
   },
   },
   {
   {
-    label: '柱子背景顶部颜色',
-    type: 'colorPicker', // 设置组件类型
-    field: 'seriesCustom_shadowTopColor', // 字段
-    optionField: 'seriesCustom.shadowTopColor', // 对应options中的字段
-    value: '#142f5a',
+    label: '数据标签大小',
+    // 设置组件类型
+    type: 'inputNumber',
+    // 字段
+    field: 'series_barColor_label_fontSize',
+    // 对应options中的字段
+    optionField: 'series.barColor.label.fontSize',
+    value: 12,
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'graph'
     groupName: 'graph'
   },
   },
+  // 网格线
   {
   {
-    label: '柱子背景颜色',
-    type: 'colorPicker', // 设置组件类型
-    field: 'seriesCustom_shadowColor', // 字段
-    optionField: 'seriesCustom.shadowColor', // 对应options中的字段
-    value: '#041133',
+    label: '分隔线',
+    type: 'switch',
+    field: 'yAxis_splitLine_show',
+    optionField: 'yAxis.splitLine.show',
+    value: 0,
+    active: 1,
+    inactive: 0,
     tabName: 'custom',
     tabName: 'custom',
-    groupName: 'graph'
+    groupName: 'grid'
+  },
+  {
+    label: '宽度',
+    type: 'inputNumber',
+    field: 'yAxis_splitLine_lineStyle_width',
+    optionField: 'yAxis.splitLine.lineStyle.width',
+    value: 1,
+    tabName: 'custom',
+    groupName: 'grid'
+  },
+  {
+    label: '颜色',
+    type: 'colorPicker',
+    field: 'yAxis_splitLine_lineStyle_color',
+    optionField: 'yAxis.splitLine.lineStyle.color',
+    value: '#fff',
+    tabName: 'custom',
+    groupName: 'grid'
+  },
+  // x轴 xAxis
+  {
+    label: '显示',
+    type: 'switch',
+    field: 'xAxis_show',
+    optionField: 'xAxis.show',
+    value: 0,
+    active: 1,
+    inactive: 0,
+    tabName: 'custom',
+    groupName: 'xAxis'
+  },
+  {
+    label: '轴线显示',
+    type: 'switch',
+    field: 'xAxis_axisLine_show',
+    optionField: 'xAxis.axisLine.show',
+    value: 0,
+    active: 1,
+    inactive: 0,
+    tabName: 'custom',
+    groupName: 'xAxis'
+  },
+  {
+    label: '轴线颜色',
+    type: 'colorPicker',
+    field: 'xAxis_axisLine_lineStyle_color',
+    optionField: 'xAxis.axisLine.lineStyle.color',
+    // 是否多选
+    multiple: false,
+    value: '#333',
+    tabName: 'custom',
+    groupName: 'xAxis'
+  },
+  {
+    label: '标签显示',
+    type: 'switch',
+    field: 'xAxis_axisLabel_show',
+    optionField: 'xAxis.axisLabel.show',
+    value: 1,
+    active: 1,
+    inactive: 0,
+    tabName: 'custom',
+    groupName: 'xAxis'
+  },
+  {
+    label: '标签颜色',
+    type: 'colorPicker',
+    field: 'xAxis_axisLabel_textStyle_color',
+    optionField: 'xAxis.axisLabel.textStyle.color',
+    // 是否多选
+    multiple: false,
+    value: '#8C8C8C',
+    tabName: 'custom',
+    groupName: 'xAxis'
+  },
+  {
+    label: '标签大小',
+    type: 'inputNumber',
+    field: 'xAxis_axisLabel_textStyle_fontSize',
+    optionField: 'xAxis.axisLabel.textStyle.fontSize',
+    value: 14,
+    tabName: 'custom',
+    groupName: 'xAxis'
+  },
+  {
+    label: '标签距离',
+    type: 'inputNumber',
+    field: 'xAxis_axisLabel_margin',
+    optionField: 'xAxis.axisLabel.margin',
+    value: 30,
+    tabName: 'custom',
+    groupName: 'xAxis'
+  },
+  {
+    label: '标题',
+    type: 'input',
+    field: 'xAxis_name',
+    optionField: 'xAxis.name',
+    value: '',
+    tabName: 'custom',
+    groupName: 'xAxis'
+  },
+  {
+    label: '标题颜色',
+    type: 'colorPicker',
+    field: 'xAxis_nameTextStyle_color',
+    optionField: 'xAxis.nameTextStyle.color',
+    // 是否多选
+    multiple: false,
+    value: '#8C8C8C',
+    tabName: 'custom',
+    groupName: 'xAxis'
+  },
+  {
+    label: '标题大小',
+    type: 'inputNumber',
+    field: 'xAxis_nameTextStyle_fontSize',
+    optionField: 'xAxis.nameTextStyle.fontSize',
+    value: 12,
+    tabName: 'custom',
+    groupName: 'xAxis'
+  },
+  {
+    label: '标题位置',
+    type: 'select',
+    field: 'xAxis_nameLocation',
+    optionField: 'xAxis.nameLocation',
+    value: 'start',
+    tabName: 'custom',
+    options: [
+      {
+        label: '左',
+        value: 'start'
+      },
+      {
+        label: '中',
+        value: 'center'
+      },
+      {
+        label: '右',
+        value: 'end'
+      }],
+    groupName: 'xAxis'
+  },
+  // Y轴 yAxis
+  {
+    label: '显示',
+    type: 'switch',
+    field: 'yAxis_show',
+    optionField: 'yAxis.show',
+    value: 1,
+    active: 1,
+    inactive: 0,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
+  {
+    label: '轴线显示',
+    type: 'switch',
+    field: 'yAxis_axisLine_show',
+    optionField: 'yAxis.axisLine.show',
+    value: 1,
+    active: 1,
+    inactive: 0,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
+  {
+    label: '轴线颜色',
+    type: 'colorPicker',
+    field: 'yAxis_axisLine_lineStyle_color',
+    optionField: 'yAxis.axisLine.lineStyle.color',
+    // 是否多选
+    multiple: false,
+    value: '#333',
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
+  {
+    label: '刻度显示',
+    type: 'switch',
+    field: 'yAxis_axisTick_show',
+    optionField: 'yAxis.axisTick.show',
+    value: 1,
+    active: 1,
+    inactive: 0,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
+  {
+    label: '刻度颜色',
+    type: 'colorPicker',
+    field: 'yAxis_axisTick_lineStyle_color',
+    optionField: 'yAxis.axisTick.lineStyle.color',
+    // 是否多选
+    multiple: false,
+    value: '#fff',
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
+  {
+    label: '刻度宽度',
+    type: 'inputNumber',
+    field: 'yAxis_axisTick_lineStyle_width',
+    optionField: 'yAxis.axisTick.lineStyle.width',
+    // 是否多选
+    multiple: false,
+    value: 1,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
+  {
+    label: '标签显示',
+    type: 'switch',
+    field: 'yAxis_axisLabel_show',
+    optionField: 'yAxis.axisLabel.show',
+    value: 1,
+    active: 1,
+    inactive: 0,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
+  {
+    label: '标签颜色',
+    type: 'colorPicker',
+    field: 'yAxis_axisLabel_textStyle_color',
+    optionField: 'yAxis.axisLabel.textStyle.color',
+    // 是否多选
+    multiple: false,
+    value: '#8C8C8C',
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
+  {
+    label: '标签大小',
+    type: 'inputNumber',
+    field: 'yAxis_axisLabel_textStyle_fontSize',
+    optionField: 'yAxis.axisLabel.textStyle.fontSize',
+    value: 14,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
+  {
+    label: '标签距离',
+    type: 'inputNumber',
+    field: 'yAxis_axisLabel_margin',
+    optionField: 'yAxis.axisLabel.margin',
+    value: 10,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
+  {
+    label: '标题',
+    type: 'input',
+    field: 'yAxis_name',
+    optionField: 'yAxis.name',
+    value: '',
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
+  {
+    label: '标题颜色',
+    type: 'colorPicker',
+    field: 'yAxis_nameTextStyle_color',
+    optionField: 'yAxis.nameTextStyle.color',
+    // 是否多选
+    multiple: false,
+    value: '#8C8C8C',
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
+  {
+    label: '标题大小',
+    type: 'inputNumber',
+    field: 'yAxis_nameTextStyle_fontSize',
+    optionField: 'yAxis.nameTextStyle.fontSize',
+    value: 12,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
+  {
+    label: '标题位置',
+    type: 'select',
+    field: 'yAxis_nameLocation',
+    optionField: 'yAxis.nameLocation',
+    value: 'end',
+    tabName: 'custom',
+    options: [
+      {
+        label: '下',
+        value: 'start'
+      },
+      {
+        label: '中',
+        value: 'center'
+      },
+      {
+        label: '上',
+        value: 'end'
+      }],
+    groupName: 'yAxis'
   }
   }
 ]
 ]
 
 
@@ -100,7 +479,6 @@ const optionHandler = ''
 // 数据处理脚本
 // 数据处理脚本
 const dataHandler = ''
 const dataHandler = ''
 
 
-// 图表配置 new Line('domName', option)
 const xData = ['本年话务总量', '本年人工话务量', '每万客户呼入量', '每万客户呼入量'
 const xData = ['本年话务总量', '本年人工话务量', '每万客户呼入量', '每万客户呼入量'
 ]
 ]
 const yData1 = [300, 1230, 425, 1200]
 const yData1 = [300, 1230, 425, 1200]
@@ -122,7 +500,7 @@ const option = {
   },
   },
   graphic: {
   graphic: {
     type: 'group',
     type: 'group',
-    bottom: '8%',
+    bottom: '5%',
     left: '10%',
     left: '10%',
     z: 100,
     z: 100,
     children: [
     children: [
@@ -131,7 +509,7 @@ const option = {
         left: 0,
         left: 0,
         bottom: 0,
         bottom: 0,
         shape: {
         shape: {
-          width: 400,
+          width: 418 * 0.9,
           height: 10
           height: 10
         },
         },
         style: {
         style: {
@@ -144,7 +522,7 @@ const option = {
         bottom: 10,
         bottom: 10,
         shape: {
         shape: {
           // 左上、右上、右下、左下
           // 左上、右上、右下、左下
-          points: [[40, -50], [360, -50], [400, 0], [0, 0]]
+          points: [[418 / 10, -320 / 6], [418 - 418 / 6, -320 / 6], [418 * 0.9, 0], [0, 0]]
         },
         },
         style: {
         style: {
           fill: '#303256'
           fill: '#303256'
@@ -154,23 +532,30 @@ const option = {
   },
   },
   xAxis: [
   xAxis: [
     {
     {
+      show: true,
+      name: '',
       type: 'category',
       type: 'category',
       data: xData,
       data: xData,
-      // 坐标轴刻度设置:x轴数据展示
+      nameTextStyle: {
+        color: '',
+        fontSize: 12
+      },
+      nameLocation: '',
+      // 坐标轴刻度设置
       axisTick: {
       axisTick: {
-        show: true,
+        show: false,
         alignWithLabel: true
         alignWithLabel: true
       },
       },
-      // 横坐标颜色
-      nameTextStyle: {
-        color: '#82b0ec'
-      },
       // 是否显示坐标轴的轴线
       // 是否显示坐标轴的轴线
       axisLine: {
       axisLine: {
-        show: false
+        show: false,
+        lineStyle: {
+          color: '#333'
+        }
       },
       },
       // 坐标轴刻度标签
       // 坐标轴刻度标签
       axisLabel: {
       axisLabel: {
+        show: true,
         textStyle: {
         textStyle: {
           fontSize: 10,
           fontSize: 10,
           color: 'rgb(40, 129, 170)'
           color: 'rgb(40, 129, 170)'
@@ -179,6 +564,7 @@ const option = {
       }
       }
     },
     },
     {
     {
+      show: false,
       type: 'category',
       type: 'category',
       axisLine: {
       axisLine: {
         show: false
         show: false
@@ -198,36 +584,62 @@ const option = {
       data: xData
       data: xData
     }
     }
   ],
   ],
-  yAxis: [
-    {
-      show: true, // y轴文本标签显示
-      type: 'value',
-      axisLabel: {
-        textStyle: {
-          color: 'rgb(40, 129, 170)'
-        }
-      },
-      // 分隔线
-      splitLine: {
-        show: false // yAxis.show配置为true时,该配置才有效
+  yAxis: {
+    name: '',
+    nameTextStyle: {
+      color: '',
+      fontSize: 12
+    },
+    nameLocation: 'end',
+    show: true,
+    type: 'value',
+    axisLabel: {
+      show: true,
+      textStyle: {
+        color: '#fff',
+        fontSize: 12
       },
       },
-      // y轴轴线是否显示
-      axisLine: {
-        show: true
+      margin: 10
+    },
+    axisTick: {
+      show: true,
+      lineStyle: {
+        color: '#fff',
+        width: 1
+      }
+    },
+    // 分隔线
+    splitLine: {
+      show: false, // yAxis.show配置为true时,该配置才有效
+      lineStyle: {
+        color: '#fff',
+        width: 1
+      }
+    },
+    // y轴轴线是否显示
+    axisLine: {
+      show: true,
+      lineStyle: {
+        color: '#fff'
       }
       }
     }
     }
-  ],
+  },
   seriesCustom: {
   seriesCustom: {
-    barTopColor: '#2DB1EF',
-    barBottomColor: '#187dcb',
-    barColor1: '#115ba6',
-    barColor2: '#1db0dd',
-    shadowColor: '#041133',
-    shadowTopColor: '#142f5a'
+    barWidth: 30,
+    // 顶部菱形颜色
+    barTopColor: ['#2DB1EF'],
+    // 底部菱形颜色
+    barBottomColor: ['#187dcb'],
+    // 柱子颜色
+    barColor: ['#1db0dd'],
+    // 阴影柱子颜色
+    shadowColor: ['#041133'],
+    // 阴影柱子顶部颜色
+    shadowTopColor: ['#142f5a']
   },
   },
   series: [
   series: [
     {
     {
-      name: 'y1柱子顶部',
+      id: 'barTopColor1',
       type: 'pictorialBar',
       type: 'pictorialBar',
       tooltip: { show: false },
       tooltip: { show: false },
       symbol: 'diamond',
       symbol: 'diamond',
@@ -240,7 +652,7 @@ const option = {
       data: yData1
       data: yData1
     },
     },
     {
     {
-      name: 'y2柱子顶部',
+      id: 'barTopColor2',
       type: 'pictorialBar',
       type: 'pictorialBar',
       tooltip: { show: false },
       tooltip: { show: false },
       symbol: 'diamond',
       symbol: 'diamond',
@@ -253,10 +665,10 @@ const option = {
       data: yData2
       data: yData2
     },
     },
     {
     {
-      name: 'y1',
+      id: ' barColor1',
       type: 'bar',
       type: 'bar',
       barGap: '20%',
       barGap: '20%',
-      30: 30,
+      barWidth: 30,
       itemStyle: {
       itemStyle: {
         normal: {
         normal: {
           color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
           color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
@@ -275,17 +687,19 @@ const option = {
         }
         }
       },
       },
       label: {
       label: {
-        show: false
+        show: true,
+        position: 'inside',
+        color: '#fff'
       },
       },
       zlevel: 2,
       zlevel: 2,
       z: 12,
       z: 12,
       data: yData1
       data: yData1
     },
     },
     {
     {
-      name: 'y2',
+      id: 'barColor2',
       type: 'bar',
       type: 'bar',
       // barGap: '60%',
       // barGap: '60%',
-      30: 30,
+      barWidth: 30,
       itemStyle: {
       itemStyle: {
         normal: {
         normal: {
           color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
           color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
@@ -304,14 +718,16 @@ const option = {
         }
         }
       },
       },
       label: {
       label: {
-        show: false
+        show: true,
+        position: 'inside',
+        color: '#fff'
       },
       },
       zlevel: 2,
       zlevel: 2,
       z: 12,
       z: 12,
       data: yData2
       data: yData2
     },
     },
     {
     {
-      name: 'y1柱子底部',
+      id: 'barBottomColor1',
       type: 'pictorialBar',
       type: 'pictorialBar',
       tooltip: { show: false },
       tooltip: { show: false },
       symbol: 'diamond',
       symbol: 'diamond',
@@ -323,7 +739,7 @@ const option = {
       data: yData1
       data: yData1
     },
     },
     {
     {
-      name: 'y2柱子底部',
+      id: 'barBottomColor2',
       type: 'pictorialBar',
       type: 'pictorialBar',
       tooltip: { show: false },
       tooltip: { show: false },
       symbol: 'diamond',
       symbol: 'diamond',
@@ -335,14 +751,14 @@ const option = {
       data: yData2
       data: yData2
     },
     },
     {
     {
-      name: '背景柱子1',
+      id: 'shadowColor1',
       type: 'bar',
       type: 'bar',
       tooltip: { show: false },
       tooltip: { show: false },
       xAxisIndex: 1,
       xAxisIndex: 1,
       barGap: '20%',
       barGap: '20%',
       data: maxData1,
       data: maxData1,
       zlevel: 1,
       zlevel: 1,
-      30: 30,
+      barWidth: 30,
       itemStyle: {
       itemStyle: {
         normal: {
         normal: {
           color: 'rgba(9, 44, 76,.8)'
           color: 'rgba(9, 44, 76,.8)'
@@ -350,14 +766,14 @@ const option = {
       }
       }
     },
     },
     {
     {
-      name: '背景柱子2',
+      id: 'shadowColor2',
       type: 'bar',
       type: 'bar',
       tooltip: { show: false },
       tooltip: { show: false },
       xAxisIndex: 1,
       xAxisIndex: 1,
       barGap: '20%',
       barGap: '20%',
       data: maxData2,
       data: maxData2,
       zlevel: 1,
       zlevel: 1,
-      30: 30,
+      barWidth: 30,
       itemStyle: {
       itemStyle: {
         normal: {
         normal: {
           color: 'rgba(16, 56, 70,.8)'
           color: 'rgba(16, 56, 70,.8)'
@@ -365,7 +781,7 @@ const option = {
       }
       }
     },
     },
     {
     {
-      name: 'y1背景柱子顶部',
+      id: 'shadowTopColor1',
       type: 'pictorialBar',
       type: 'pictorialBar',
       tooltip: { show: false },
       tooltip: { show: false },
       symbol: 'diamond',
       symbol: 'diamond',
@@ -378,7 +794,7 @@ const option = {
       data: maxData1
       data: maxData1
     },
     },
     {
     {
-      name: 'y2背景柱子顶部',
+      id: 'shadowTopColor2',
       type: 'pictorialBar',
       type: 'pictorialBar',
       tooltip: { show: false },
       tooltip: { show: false },
       symbol: 'diamond',
       symbol: 'diamond',

+ 1 - 1
data-room-ui/packages/Echarts/3D图/3D基础柱状图.js

@@ -86,7 +86,7 @@ const setting = [
     type: 'switch', // 设置组件类型
     type: 'switch', // 设置组件类型
     field: 'series_barColor_label_show', // 字段
     field: 'series_barColor_label_show', // 字段
     optionField: 'series.barColor.label.show', // 对应options中的字段
     optionField: 'series.barColor.label.show', // 对应options中的字段
-    value: 0,
+    value: 1,
     active: 1,
     active: 1,
     inactive: 0,
     inactive: 0,
     tabName: 'custom',
     tabName: 'custom',

+ 23 - 13
data-room-ui/packages/EchartsRender/index.vue

@@ -195,29 +195,39 @@ export default {
               }
               }
             })
             })
           } else if (optionField[0] === 'series') {
           } else if (optionField[0] === 'series') {
-            // 存储要修改的series对象
-            let changeObject = {}
-            // 存储改变后的series对象
-            let changedObject = {}
+            let changeObject = []
+            let beforeChange = []
+            // 如果要配置数据标签相关信息
             optionField.forEach((field, index) => {
             optionField.forEach((field, index) => {
               if (index === 0) {
               if (index === 0) {
                 option = option[field]
                 option = option[field]
               } else if (index === 1) {
               } else if (index === 1) {
-                // 根据id找到对应的type
-                changeObject = option.find(obj => obj.id === field)
-                changedObject = changeObject
-                option = option.filter(obj => obj.id !== field)
+                // 筛选出需要修改的series对象
+                changeObject = option.filter(item => item.id.includes(field))
+                beforeChange = [...changeObject]
+                option = option.filter(item => !(item.id.includes(field)))
               } else if (index === optionField.length - 1) {
               } else if (index === optionField.length - 1) {
-                // 数据配置时,必须有值才更新
                 if ((set.tabName === type && type === 'data' && set.value) || (set.tabName === type && type === 'custom')) {
                 if ((set.tabName === type && type === 'data' && set.value) || (set.tabName === type && type === 'custom')) {
-                  changeObject[field] = set.value
+                  changeObject.map(item => {
+                    item[field] = set.value
+                  })
                 }
                 }
               } else {
               } else {
-                changeObject = changeObject[field]
+                const changeResult = []
+                changeObject.forEach(item => {
+                  const result = { ...item[field] }
+                  changeResult.push(result)
+                })
+                changeObject = [...changeResult]
               }
               }
             })
             })
-            changeObject = { ...changeObject, ...changedObject }
-            option.push(changeObject)
+            // 合并修改后的series对象
+            changeObject.forEach(
+              (item, index) => {
+                beforeChange[index].label = _.cloneDeep(item)
+                option.push(beforeChange[index])
+              }
+            )
           } else {
           } else {
             optionField.forEach((field, index) => {
             optionField.forEach((field, index) => {
               if (index === optionField.length - 1) {
               if (index === optionField.length - 1) {

+ 12 - 1
data-room-ui/packages/G2Plots/折线图/基础折线图.js

@@ -4,7 +4,7 @@
  * @Author: xing.heng
  * @Author: xing.heng
  */
  */
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Line'
 const category = 'Line'
 // 标题
 // 标题
@@ -359,6 +359,17 @@ const setting = [
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'yAxis'
     groupName: 'yAxis'
   },
   },
+  {
+    label: '标题过长时旋转',
+    type: 'switch',
+    field: 'yAxis_title_autoRotate',
+    optionField: 'yAxis.title.autoRotate',
+    value: true,
+    active: true,
+    inactive: false,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
   {
   {
     label: '标题位置',
     label: '标题位置',
     type: 'select',
     type: 'select',

+ 12 - 1
data-room-ui/packages/G2Plots/折线图/基础折线点图.js

@@ -5,7 +5,7 @@
  */
  */
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Line'
 const category = 'Line'
 // 标题
 // 标题
@@ -350,6 +350,17 @@ const setting = [
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'yAxis'
     groupName: 'yAxis'
   },
   },
+  {
+    label: '标题过长时旋转',
+    type: 'switch',
+    field: 'yAxis_title_autoRotate',
+    optionField: 'yAxis.title.autoRotate',
+    value: true,
+    active: true,
+    inactive: false,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
   {
   {
     label: '标题位置',
     label: '标题位置',
     type: 'select',
     type: 'select',

+ 12 - 1
data-room-ui/packages/G2Plots/折线图/基础曲线图.js

@@ -5,7 +5,7 @@
  */
  */
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Line'
 const category = 'Line'
 // 标题
 // 标题
@@ -250,6 +250,17 @@ const setting = [
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'yAxis'
     groupName: 'yAxis'
   },
   },
+  {
+    label: '标题过长时旋转',
+    type: 'switch',
+    field: 'yAxis_title_autoRotate',
+    optionField: 'yAxis.title.autoRotate',
+    value: true,
+    active: true,
+    inactive: false,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
   {
   {
     label: '标题位置',
     label: '标题位置',
     type: 'select',
     type: 'select',

+ 12 - 1
data-room-ui/packages/G2Plots/折线图/多折线动画图.js

@@ -5,7 +5,7 @@
  */
  */
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Line'
 const category = 'Line'
 // 标题
 // 标题
@@ -365,6 +365,17 @@ const setting = [
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'yAxis'
     groupName: 'yAxis'
   },
   },
+  {
+    label: '标题过长时旋转',
+    type: 'switch',
+    field: 'yAxis_title_autoRotate',
+    optionField: 'yAxis.title.autoRotate',
+    value: true,
+    active: true,
+    inactive: false,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
   {
   {
     label: '标题位置',
     label: '标题位置',
     type: 'select',
     type: 'select',

+ 12 - 1
data-room-ui/packages/G2Plots/折线图/多折线图.js

@@ -5,7 +5,7 @@
  */
  */
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Line'
 const category = 'Line'
 // 标题
 // 标题
@@ -327,6 +327,17 @@ const setting = [
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'yAxis'
     groupName: 'yAxis'
   },
   },
+  {
+    label: '标题过长时旋转',
+    type: 'switch',
+    field: 'yAxis_title_autoRotate',
+    optionField: 'yAxis.title.autoRotate',
+    value: true,
+    active: true,
+    inactive: false,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
   {
   {
     label: '标题位置',
     label: '标题位置',
     type: 'select',
     type: 'select',

+ 12 - 1
data-room-ui/packages/G2Plots/折线图/多阶梯折线图.js

@@ -1,6 +1,6 @@
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Line'
 const category = 'Line'
 // 标题
 // 标题
@@ -323,6 +323,17 @@ const setting = [
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'yAxis'
     groupName: 'yAxis'
   },
   },
+  {
+    label: '标题过长时旋转',
+    type: 'switch',
+    field: 'yAxis_title_autoRotate',
+    optionField: 'yAxis.title.autoRotate',
+    value: true,
+    active: true,
+    inactive: false,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
   {
   {
     label: '标题位置',
     label: '标题位置',
     type: 'select',
     type: 'select',

+ 12 - 1
data-room-ui/packages/G2Plots/折线图/折线趋势填充图.js

@@ -5,7 +5,7 @@
  */
  */
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Line'
 const category = 'Line'
 // 标题
 // 标题
@@ -379,6 +379,17 @@ const setting = [
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'yAxis'
     groupName: 'yAxis'
   },
   },
+  {
+    label: '标题过长时旋转',
+    type: 'switch',
+    field: 'yAxis_title_autoRotate',
+    optionField: 'yAxis.title.autoRotate',
+    value: true,
+    active: true,
+    inactive: false,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
   {
   {
     label: '标题位置',
     label: '标题位置',
     type: 'select',
     type: 'select',

+ 1 - 1
data-room-ui/packages/G2Plots/折线图/迷你基础折线图.js

@@ -5,7 +5,7 @@
  */
  */
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'TinyLine'
 const category = 'TinyLine'
 // 标题
 // 标题

+ 1 - 1
data-room-ui/packages/G2Plots/折线图/迷你面积图.js

@@ -5,7 +5,7 @@
  */
  */
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'TinyArea'
 const category = 'TinyArea'
 // 标题
 // 标题

+ 12 - 1
data-room-ui/packages/G2Plots/条形图/分组条形图.js

@@ -5,7 +5,7 @@
  */
  */
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Bar'
 const category = 'Bar'
 // 标题
 // 标题
@@ -341,6 +341,17 @@ const setting = [
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'yAxis'
     groupName: 'yAxis'
   },
   },
+  {
+    label: '标题过长时旋转',
+    type: 'switch',
+    field: 'yAxis_title_autoRotate',
+    optionField: 'yAxis.title.autoRotate',
+    value: true,
+    active: true,
+    inactive: false,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
   {
   {
     label: '标题位置',
     label: '标题位置',
     type: 'select',
     type: 'select',

+ 18 - 7
data-room-ui/packages/G2Plots/条形图/基础条形图.js

@@ -5,7 +5,7 @@
  */
  */
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Bar'
 const category = 'Bar'
 // 标题
 // 标题
@@ -329,6 +329,17 @@ const setting = [
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'yAxis'
     groupName: 'yAxis'
   },
   },
+  {
+    label: '标题过长时旋转',
+    type: 'switch',
+    field: 'yAxis_title_autoRotate',
+    optionField: 'yAxis.title.autoRotate',
+    value: true,
+    active: true,
+    inactive: false,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
   {
   {
     label: '标题位置',
     label: '标题位置',
     type: 'select',
     type: 'select',
@@ -468,7 +479,7 @@ const setting = [
     value: true,
     value: true,
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'yAxis'
     groupName: 'yAxis'
-  },
+  }
 ]
 ]
 
 
 // 模拟数据
 // 模拟数据
@@ -481,15 +492,15 @@ const data = [
 ]
 ]
 
 
 // 配置处理脚本
 // 配置处理脚本
-const optionHandler = 'option.yAxis.grid.line.style.lineDash = [4,setting.find(settingItem=>settingItem.field === \'yAxis_grid_line_style_lineDash\').value]'
+const optionHandler = 'option.yAxis.grid.line.style.lineDash = [4,setting.find(settingItem=>settingItem.field === \'yAxis_grid_line_style_lineDash\').value]' +
+  '\noption.legend = option.legendEnable ? {position: setting.find(settingItem=>settingItem.field === \'legendPosition\').value} : false;' +
+  '\nconst radiusNum = setting.find(settingItem=>settingItem.field === \'radiusNum\').value; option.barStyle.radius = [radiusNum,radiusNum,0,0]'
 
 
 // 数据处理脚本
 // 数据处理脚本
 const dataHandler = 'const yFieldValue = setting.find(settingItem=>settingItem.field === \'yField\').value\n' +
 const dataHandler = 'const yFieldValue = setting.find(settingItem=>settingItem.field === \'yField\').value\n' +
   'if (yFieldValue) {\n' +
   'if (yFieldValue) {\n' +
   '  option.seriesField = yFieldValue\n' +
   '  option.seriesField = yFieldValue\n' +
-  '}' +
-  '\noption.legend = option.legendEnable ? {position: setting.find(settingItem=>settingItem.field === \'legendPosition\').value} : false;' +
-  '\nconst radiusNum = setting.find(settingItem=>settingItem.field === \'radiusNum\').value; option.barStyle.radius = [radiusNum,radiusNum,0,0]'
+  '}'
 
 
 // 图表配置 new Line('domName', option)
 // 图表配置 new Line('domName', option)
 const option = {
 const option = {
@@ -602,7 +613,7 @@ const option = {
         lineWidth: 1
         lineWidth: 1
       }
       }
     }
     }
-  },
+  }
 }
 }
 
 
 export default {
 export default {

+ 12 - 1
data-room-ui/packages/G2Plots/柱状图/分组柱状图.js

@@ -5,7 +5,7 @@
  */
  */
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Column'
 const category = 'Column'
 // 标题
 // 标题
@@ -365,6 +365,17 @@ const setting = [
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'yAxis'
     groupName: 'yAxis'
   },
   },
+  {
+    label: '标题过长时旋转',
+    type: 'switch',
+    field: 'yAxis_title_autoRotate',
+    optionField: 'yAxis.title.autoRotate',
+    value: true,
+    active: true,
+    inactive: false,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
   {
   {
     label: '标题位置',
     label: '标题位置',
     type: 'select',
     type: 'select',

+ 12 - 1
data-room-ui/packages/G2Plots/柱状图/圆角柱状图.js

@@ -5,7 +5,7 @@
  */
  */
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Column'
 const category = 'Column'
 // 标题
 // 标题
@@ -365,6 +365,17 @@ const setting = [
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'yAxis'
     groupName: 'yAxis'
   },
   },
+  {
+    label: '标题过长时旋转',
+    type: 'switch',
+    field: 'yAxis_title_autoRotate',
+    optionField: 'yAxis.title.autoRotate',
+    value: true,
+    active: true,
+    inactive: false,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
   {
   {
     label: '标题位置',
     label: '标题位置',
     type: 'select',
     type: 'select',

+ 12 - 1
data-room-ui/packages/G2Plots/柱状图/基础柱状图.js

@@ -5,7 +5,7 @@
  */
  */
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Column'
 const category = 'Column'
 // 标题
 // 标题
@@ -286,6 +286,17 @@ const setting = [
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'yAxis'
     groupName: 'yAxis'
   },
   },
+  {
+    label: '标题过长时旋转',
+    type: 'switch',
+    field: 'yAxis_title_autoRotate',
+    optionField: 'yAxis.title.autoRotate',
+    value: true,
+    active: true,
+    inactive: false,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
   {
   {
     label: '标题位置',
     label: '标题位置',
     type: 'select',
     type: 'select',

+ 12 - 1
data-room-ui/packages/G2Plots/柱状图/堆叠柱状图.js

@@ -5,7 +5,7 @@
  */
  */
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Column'
 const category = 'Column'
 // 标题
 // 标题
@@ -365,6 +365,17 @@ const setting = [
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'yAxis'
     groupName: 'yAxis'
   },
   },
+  {
+    label: '标题过长时旋转',
+    type: 'switch',
+    field: 'yAxis_title_autoRotate',
+    optionField: 'yAxis.title.autoRotate',
+    value: true,
+    active: true,
+    inactive: false,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
   {
   {
     label: '标题位置',
     label: '标题位置',
     type: 'select',
     type: 'select',

+ 1 - 1
data-room-ui/packages/G2Plots/漏斗图/分面漏斗图.js

@@ -1,6 +1,6 @@
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Funnel'
 const category = 'Funnel'
 // 标题
 // 标题

+ 1 - 1
data-room-ui/packages/G2Plots/漏斗图/对比漏斗图.js

@@ -1,6 +1,6 @@
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Funnel'
 const category = 'Funnel'
 // 标题
 // 标题

+ 1 - 1
data-room-ui/packages/G2Plots/矩形树图/基础矩形树图.js

@@ -1,6 +1,6 @@
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Treemap'
 const category = 'Treemap'
 // 标题
 // 标题

+ 1 - 1
data-room-ui/packages/G2Plots/词云图/词云图.js

@@ -1,6 +1,6 @@
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'WordCloud'
 const category = 'WordCloud'
 // 标题
 // 标题

+ 1 - 1
data-room-ui/packages/G2Plots/进度图/仪表盘.js

@@ -1,6 +1,6 @@
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Gauge'
 const category = 'Gauge'
 // 标题
 // 标题

+ 1 - 1
data-room-ui/packages/G2Plots/进度图/圆角进度条.js

@@ -1,6 +1,6 @@
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Progress'
 const category = 'Progress'
 // 标题
 // 标题

+ 1 - 1
data-room-ui/packages/G2Plots/进度图/水波图.js

@@ -1,6 +1,6 @@
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Liquid'
 const category = 'Liquid'
 // 标题
 // 标题

+ 1 - 1
data-room-ui/packages/G2Plots/进度图/矩形水波图.js

@@ -1,6 +1,6 @@
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023090801'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Liquid'
 const category = 'Liquid'
 // 标题
 // 标题

+ 1 - 1
data-room-ui/packages/G2Plots/进度图/进度仪表盘.js

@@ -1,6 +1,6 @@
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Gauge'
 const category = 'Gauge'
 // 标题
 // 标题

+ 1 - 1
data-room-ui/packages/G2Plots/进度图/进度指标环图.js

@@ -1,5 +1,5 @@
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'RingProgress'
 const category = 'RingProgress'
 // 标题
 // 标题

+ 1 - 1
data-room-ui/packages/G2Plots/进度图/进度条.js

@@ -1,6 +1,6 @@
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Progress'
 const category = 'Progress'
 // 标题
 // 标题

+ 1 - 1
data-room-ui/packages/G2Plots/进度图/进度环图.js

@@ -1,5 +1,5 @@
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'RingProgress'
 const category = 'RingProgress'
 // 标题
 // 标题

+ 1 - 1
data-room-ui/packages/G2Plots/进度图/钻石水波图.js

@@ -1,6 +1,6 @@
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Liquid'
 const category = 'Liquid'
 // 标题
 // 标题

+ 1 - 1
data-room-ui/packages/G2Plots/雷达图/分组雷达图.js

@@ -1,6 +1,6 @@
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Radar'
 const category = 'Radar'
 // 标题
 // 标题

+ 9 - 7
data-room-ui/packages/G2Plots/雷达图/基础雷达图.js

@@ -1,6 +1,6 @@
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092202'
 // 分类
 // 分类
 const category = 'Radar'
 const category = 'Radar'
 // 标题
 // 标题
@@ -145,9 +145,9 @@ const setting = [
   {
   {
     label: '数据点颜色',
     label: '数据点颜色',
     type: 'colorPicker', // 设置组件类型
     type: 'colorPicker', // 设置组件类型
-    field: 'point_color', // 字段
-    optionField: 'point.color', // 对应options中的字段
-    value: '#ffffff',
+    field: 'point_style_fill', // 字段
+    optionField: 'point.style.fill', // 对应options中的字段
+    value: '#fff',
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'graph'
     groupName: 'graph'
   },
   },
@@ -159,7 +159,7 @@ const setting = [
     value: 2,
     value: 2,
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'graph'
     groupName: 'graph'
-  },
+  }
   // 边距 padding
   // 边距 padding
 ]
 ]
 
 
@@ -185,7 +185,7 @@ const option = {
   xField: 'name',
   xField: 'name',
   yField: 'star',
   yField: 'star',
   smooth: false,
   smooth: false,
-  color: 'l(90) 0:#648ff7 1:#648ff7',
+  color: 'l(0) 0:#648ff7 1:#648ff7',
   theme: {
   theme: {
     styleSheet: {
     styleSheet: {
       backgroundColor: ''
       backgroundColor: ''
@@ -210,7 +210,9 @@ const option = {
   },
   },
   // 开启辅助点
   // 开启辅助点
   point: {
   point: {
-    color: '',
+    style: {
+      fill: '#fff'
+    },
     shape: '',
     shape: '',
     size: 2
     size: 2
   },
   },

+ 15 - 3
data-room-ui/packages/G2Plots/面积图/基础面积图.js

@@ -5,7 +5,7 @@
  */
  */
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Area'
 const category = 'Area'
 // 标题
 // 标题
@@ -372,6 +372,17 @@ const setting = [
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'yAxis'
     groupName: 'yAxis'
   },
   },
+  {
+    label: '标题过长时旋转',
+    type: 'switch',
+    field: 'yAxis_title_autoRotate',
+    optionField: 'yAxis.title.autoRotate',
+    value: true,
+    active: true,
+    inactive: false,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
   {
   {
     label: '标题位置',
     label: '标题位置',
     type: 'select',
     type: 'select',
@@ -464,7 +475,7 @@ const setting = [
     value: '#d0d0d0',
     value: '#d0d0d0',
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'yAxis'
     groupName: 'yAxis'
-  },
+  }
   // 边距 padding
   // 边距 padding
 ]
 ]
 
 
@@ -490,7 +501,7 @@ const optionHandler = '  let pointEnable = setting.find(settingItem=>settingItem
   '    option.point = {shape: pointEnable}\n' +
   '    option.point = {shape: pointEnable}\n' +
   '    let pointColor = setting.find(settingItem=>settingItem.field === \'point_color\').value\n' +
   '    let pointColor = setting.find(settingItem=>settingItem.field === \'point_color\').value\n' +
   '    option.point.color = pointColor\n' +
   '    option.point.color = pointColor\n' +
-  '  option.point.size =  setting.find(settingItem=>settingItem.field === \'point_size\').value\n'  +
+  '  option.point.size =  setting.find(settingItem=>settingItem.field === \'point_size\').value\n' +
   '};' +
   '};' +
   'option.yAxis.grid.line.style.lineDash = [4,setting.find(settingItem=>settingItem.field === \'yAxis_grid_line_style_lineDash\').value]'
   'option.yAxis.grid.line.style.lineDash = [4,setting.find(settingItem=>settingItem.field === \'yAxis_grid_line_style_lineDash\').value]'
 
 
@@ -506,6 +517,7 @@ const option = {
   yField: 'scales',
   yField: 'scales',
   smooth: false,
   smooth: false,
   startOnZero: true,
   startOnZero: true,
+  isStack: false,
   areaStyle: {
   areaStyle: {
     fill: 'l(0) 0:#3e5bdb 1:#3e5bdb'
     fill: 'l(0) 0:#3e5bdb 1:#3e5bdb'
   },
   },

+ 12 - 1
data-room-ui/packages/G2Plots/面积图/堆叠面积图.js

@@ -5,7 +5,7 @@
  */
  */
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Area'
 const category = 'Area'
 // 标题
 // 标题
@@ -330,6 +330,17 @@ const setting = [
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'yAxis'
     groupName: 'yAxis'
   },
   },
+  {
+    label: '标题过长时旋转',
+    type: 'switch',
+    field: 'yAxis_title_autoRotate',
+    optionField: 'yAxis.title.autoRotate',
+    value: true,
+    active: true,
+    inactive: false,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
   {
   {
     label: '标题位置',
     label: '标题位置',
     type: 'select',
     type: 'select',

+ 13 - 1
data-room-ui/packages/G2Plots/面积图/渐变色面积图.js

@@ -5,7 +5,7 @@
  */
  */
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Area'
 const category = 'Area'
 // 标题
 // 标题
@@ -276,6 +276,17 @@ const setting = [
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'yAxis'
     groupName: 'yAxis'
   },
   },
+  {
+    label: '标题过长时旋转',
+    type: 'switch',
+    field: 'yAxis_title_autoRotate',
+    optionField: 'yAxis.title.autoRotate',
+    value: true,
+    active: true,
+    inactive: false,
+    tabName: 'custom',
+    groupName: 'yAxis'
+  },
   {
   {
     label: '标题位置',
     label: '标题位置',
     type: 'select',
     type: 'select',
@@ -473,6 +484,7 @@ const option = {
   yField: 'scales',
   yField: 'scales',
   smooth: false,
   smooth: false,
   startOnZero: true,
   startOnZero: true,
+  isStack: false,
   areaStyle: {
   areaStyle: {
     fill: 'l(270) 0:#ffffff 1:#1890ff'
     fill: 'l(270) 0:#ffffff 1:#1890ff'
   },
   },

+ 2 - 1
data-room-ui/packages/G2Plots/饼图/基础环图.js

@@ -1,6 +1,6 @@
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Pie'
 const category = 'Pie'
 // 标题
 // 标题
@@ -114,6 +114,7 @@ const setting = [
     value: 0.6,
     value: 0.6,
     tabName: 'custom',
     tabName: 'custom',
     step: 0.1,
     step: 0.1,
+    max: 1,
     groupName: 'graph'
     groupName: 'graph'
   },
   },
   {
   {

+ 3 - 2
data-room-ui/packages/G2Plots/饼图/基础饼图.js

@@ -1,6 +1,6 @@
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Pie'
 const category = 'Pie'
 // 标题
 // 标题
@@ -114,6 +114,7 @@ const setting = [
     value: '0.6',
     value: '0.6',
     tabName: 'custom',
     tabName: 'custom',
     step: 0.1,
     step: 0.1,
+    max: 1,
     groupName: 'graph'
     groupName: 'graph'
   },
   },
   {
   {
@@ -193,7 +194,7 @@ const setting = [
     value: '#595959',
     value: '#595959',
     tabName: 'custom',
     tabName: 'custom',
     groupName: 'legend'
     groupName: 'legend'
-  },
+  }
 ]
 ]
 
 
 // 模拟数据
 // 模拟数据

+ 1 - 1
data-room-ui/packages/G2Plots/饼图/玫瑰图.js

@@ -1,6 +1,6 @@
 
 
 // 配置版本号
 // 配置版本号
-const version = '2023071001'
+const version = '2023092201'
 // 分类
 // 分类
 const category = 'Rose'
 const category = 'Rose'
 // 标题
 // 标题

+ 2 - 2
data-room-ui/packages/SourceMag/SideMenu.vue

@@ -127,6 +127,7 @@ export default {
   data () {
   data () {
     const validateName = (rule, value, callback) => {
     const validateName = (rule, value, callback) => {
       this.$dataRoomAxios.post('/bigScreen/type/nameRepeat', {
       this.$dataRoomAxios.post('/bigScreen/type/nameRepeat', {
+        id: this.currentCatalog.id,
         name: value,
         name: value,
         type: 'resourceCatalog'
         type: 'resourceCatalog'
       }, true).then((r) => {
       }, true).then((r) => {
@@ -175,7 +176,6 @@ export default {
         name: '',
         name: '',
         id: '',
         id: '',
         code: '',
         code: '',
-        orderNum: 0
       },
       },
       formRules: {
       formRules: {
         name: [
         name: [
@@ -265,7 +265,7 @@ export default {
     },
     },
     // 删除目录
     // 删除目录
     catalogDel (catalog) {
     catalogDel (catalog) {
-      this.$confirm('确定删除该分组?', '提示', {
+      this.$confirm('分组删除后,分组下的资源会被归纳至全部中,确定删除该分组?', '提示', {
         confirmButtonText: '确定',
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         cancelButtonText: '取消',
         type: 'warning',
         type: 'warning',

File diff suppressed because it is too large
+ 0 - 0
data-room-ui/packages/assets/images/bigScreenIcon/svg/23dateTimePicker.svg


+ 3 - 2
data-room-ui/packages/js/config/basicComponentsConfig.js

@@ -32,7 +32,8 @@ const typeList = [
   'themeSwitcher',
   'themeSwitcher',
   'themeSelect',
   'themeSelect',
   'select',
   'select',
-  'timePicker'
+  'timePicker',
+  'dateTimePicker'
 ]
 ]
 let basicConfigList = []
 let basicConfigList = []
 basicConfigList = typeList.map((type) => {
 basicConfigList = typeList.map((type) => {
@@ -45,7 +46,7 @@ basicConfigList = basicConfigList.map((item) => {
 export function basicComponentsConfig (item) {
 export function basicComponentsConfig (item) {
   return {
   return {
     ...item,
     ...item,
-    border:{type:'',titleHeight:60,fontSize:30,isTitle:true,padding:[0,0,0,0]},
+    border: { type: '', titleHeight: 60, fontSize: 30, isTitle: true, padding: [0, 0, 0, 0] },
     option: cloneDeep(setModules[item.type]),
     option: cloneDeep(setModules[item.type]),
     ...cloneDeep(dataModules[item.type])
     ...cloneDeep(dataModules[item.type])
   }
   }

+ 18 - 16
data-room-ui/packages/js/store/actions.js

@@ -14,35 +14,37 @@ export default {
   initLayout ({ commit, dispatch }, code) {
   initLayout ({ commit, dispatch }, code) {
     return new Promise(resolve => {
     return new Promise(resolve => {
       getScreenInfo(code).then(data => {
       getScreenInfo(code).then(data => {
+        // 配置兼容
+        const pageInfo = handleResData(data)
         // 兼容边框配置
         // 兼容边框配置
-        data.chartList.forEach((item) => {
+        pageInfo.chartList.forEach((item) => {
           if (!item.border) {
           if (!item.border) {
-            item.border={type:'',titleHeight:60,fontSize:30,isTitle:true,padding:[0,0,0,0]}
+            item.border = { type: '', titleHeight: 60, fontSize: 30, isTitle: true, padding: [0, 0, 0, 0] }
           }
           }
-          if(!item.border.padding){
-            item.border.padding=[0,0,0,0]
+          if (!item.border.padding) {
+            item.border.padding = [0, 0, 0, 0]
           }
           }
-          if (item.type == 'customComponent'){
-            plotSettings[Symbol.iterator]=function*(){
-              let keys=Object.keys(plotSettings)
-              for(let k of keys){
-                yield [k,plotSettings[k]]
+          if (item.type == 'customComponent') {
+            plotSettings[Symbol.iterator] = function * () {
+              const keys = Object.keys(plotSettings)
+              for (const k of keys) {
+                yield [k, plotSettings[k]]
               }
               }
             }
             }
-            for(let [key,value] of plotSettings){
+            for (const [key, value] of plotSettings) {
               if (item.name == value.name) {
               if (item.name == value.name) {
-                const settings=JSON.parse(JSON.stringify(value.setting))
-                item.setting=settings.map((x)=>{
-                  const index=item.setting.findIndex(y=>y.field==x.field)
+                const settings = JSON.parse(JSON.stringify(value.setting))
+                item.setting = settings.map((x) => {
+                  const index = item.setting.findIndex(y => y.field == x.field)
                   x.field = item.setting[index].field
                   x.field = item.setting[index].field
-                  x.value=item.setting[index].value
+                  x.value = item.setting[index].value
                   return x
                   return x
-               })
+                })
               }
               }
             }
             }
           }
           }
         })
         })
-        const pageInfo = handleResData(data)
+
         // 改变页面数据
         // 改变页面数据
         commit('changePageInfo', pageInfo)
         commit('changePageInfo', pageInfo)
         commit('changeZIndex', pageInfo.chartList)
         commit('changeZIndex', pageInfo.chartList)

+ 10 - 1
data-room-ui/packages/js/utils/datasetConfigService.js

@@ -117,6 +117,14 @@ const categoryUpdate = (params = {}, flag = false) => Vue.prototype.$dataRoomAxi
  */
  */
 const categoryRemove = (id = '-1', flag = false) => Vue.prototype.$dataRoomAxios.post(`/category/delete/${id}`, {}, flag)
 const categoryRemove = (id = '-1', flag = false) => Vue.prototype.$dataRoomAxios.post(`/category/delete/${id}`, {}, flag)
 
 
+
+/**
+ * 分类名称校验
+ * @param params
+ * @param flag
+ */
+const categoryNameRepeat = (params = {}, flag = false) => Vue.prototype.$dataRoomAxios.post('/category/checkRepeat', params, flag)
+
 export {
 export {
   datasetPage,
   datasetPage,
   datasetList,
   datasetList,
@@ -132,5 +140,6 @@ export {
   categoryAdd,
   categoryAdd,
   categoryUpdate,
   categoryUpdate,
   categoryRemove,
   categoryRemove,
-  datasetCheck
+  datasetCheck,
+  categoryNameRepeat
 }
 }

+ 12 - 0
data-room-ui/packages/js/utils/getComponentConfig.js

@@ -273,6 +273,18 @@ export default function getComponentConfig (type) {
         y: 0,
         y: 0,
         type
         type
       }
       }
+    case 'dateTimePicker':
+      return {
+        name: '日期时间选择器',
+        title: '日期时间选择器',
+        icon: Icon.getNameList()[23],
+        className: 'com.gccloud.dataroom.core.module.chart.components.ScreenTimePickerChart',
+        w: 260,
+        h: 80,
+        x: 0,
+        y: 0,
+        type
+      }
     default:
     default:
       return {}
       return {}
   }
   }

+ 4 - 4
doc/docker/application-docker.yml

@@ -1,8 +1,8 @@
+server:
+  port: 8081
+  servlet:
+    context-path:
 spring:
 spring:
-  server:
-    port: 8081
-    servlet:
-      context-path:
   resources:
   resources:
     static-locations: classpath:/static/,classpath:/META-INF/resources/,classpath:/META-INF/resources/webjars/,file:${gc.starter.file.basePath},file:${gc.starter.file.uiPath}
     static-locations: classpath:/static/,classpath:/META-INF/resources/,classpath:/META-INF/resources/webjars/,file:${gc.starter.file.basePath},file:${gc.starter.file.uiPath}
   mvc:
   mvc:

Some files were not shown because too many files changed in this diff