Эх сурвалжийг харах

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

liu.tao3 1 жил өмнө
parent
commit
581eb9d4aa
49 өөрчлөгдсөн 498 нэмэгдсэн , 459 устгасан
  1. 1 1
      DataRoom/dataroom-core/pom.xml
  2. 8 0
      DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/manage/controller/DataRoomPageController.java
  3. 31 1
      DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/map/service/impl/DataRoomMapServiceImpl.java
  4. 2 2
      DataRoom/dataroom-server/pom.xml
  5. 1 1
      DataRoom/pom.xml
  6. 40 34
      README.md
  7. BIN
      data-room-ui/example/remoteComponents/tabTable/component.png
  8. 0 82
      data-room-ui/example/remoteComponents/tabTable/config.js
  9. 0 107
      data-room-ui/example/remoteComponents/tabTable/index.vue
  10. 57 42
      data-room-ui/package-lock.json
  11. 2 1
      data-room-ui/package.json
  12. 19 0
      data-room-ui/packages/BasicComponents/DateTimePicker/index.vue
  13. 2 2
      data-room-ui/packages/BasicComponents/DateTimePicker/setting.vue
  14. 0 1
      data-room-ui/packages/BasicComponents/Marquee/index.vue
  15. 1 52
      data-room-ui/packages/BasicComponents/Tables/index.vue
  16. 2 0
      data-room-ui/packages/BigScreenDesign/ComponentDialog/index.vue
  17. 5 0
      data-room-ui/packages/BigScreenDesign/RightSetting/DataSetting.vue
  18. 1 1
      data-room-ui/packages/BigScreenList/CatalogEditForm.vue
  19. 23 2
      data-room-ui/packages/BigScreenList/EditForm.vue
  20. 1 1
      data-room-ui/packages/BigScreenList/index.vue
  21. 2 2
      data-room-ui/packages/BigScreenMag/SideMenu.vue
  22. 1 1
      data-room-ui/packages/BigScreenManagement/addDialog.vue
  23. 4 4
      data-room-ui/packages/BizComponent/Preview.vue
  24. 8 8
      data-room-ui/packages/BizComponent/index.vue
  25. 7 4
      data-room-ui/packages/Borders/Border15/index.vue
  26. 1 1
      data-room-ui/packages/ComponentList/CatalogEditForm.vue
  27. 25 3
      data-room-ui/packages/ComponentList/EditForm.vue
  28. 1 0
      data-room-ui/packages/ComponentList/index.vue
  29. 2 1
      data-room-ui/packages/DataSetLabelManagement/src/LabelSelect.vue
  30. 3 5
      data-room-ui/packages/DataSetManagement/src/CategroyEditForm.vue
  31. 9 3
      data-room-ui/packages/DataSetManagement/src/CustomEditForm.vue
  32. 82 45
      data-room-ui/packages/DataSetManagement/src/HttpEditForm.vue
  33. 10 3
      data-room-ui/packages/DataSetManagement/src/JsEditForm.vue
  34. 10 3
      data-room-ui/packages/DataSetManagement/src/JsonEditForm.vue
  35. 9 2
      data-room-ui/packages/DataSetManagement/src/OriginalEditForm.vue
  36. 20 6
      data-room-ui/packages/DataSetManagement/src/ScriptEditForm.vue
  37. 15 5
      data-room-ui/packages/DataSetManagement/src/StoredProcedureEditForm.vue
  38. 4 4
      data-room-ui/packages/DataSetManagement/src/TypeTree.vue
  39. 1 0
      data-room-ui/packages/DataSourceManagement/src/index.vue
  40. 5 2
      data-room-ui/packages/MapDataManagement/src/AddForm.vue
  41. 5 2
      data-room-ui/packages/MapDataManagement/src/EditForm.vue
  42. 52 7
      data-room-ui/packages/MapDataManagement/src/index.vue
  43. 2 2
      data-room-ui/packages/RemoteComponents/remoteComponentsList.js
  44. 1 2
      data-room-ui/packages/Render/RenderCard.vue
  45. 2 2
      data-room-ui/packages/Render/index.vue
  46. 3 3
      data-room-ui/packages/SourceMag/SideMenu.vue
  47. 2 0
      data-room-ui/packages/assets/style/bsTheme.scss
  48. 8 8
      data-room-ui/packages/js/utils/getComponentConfig.js
  49. 8 1
      data-room-ui/packages/js/utils/mapDataService.js

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

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

+ 8 - 0
DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/manage/controller/DataRoomPageController.java

@@ -189,4 +189,12 @@ public class DataRoomPageController {
         }
         return R.success(bgList);
     }
+
+    @ApiPermission
+    @PostMapping("/name/repeat")
+    @ApiOperation(value = "大屏/组件名称是否重复", position = 60, produces = MediaType.APPLICATION_JSON_VALUE)
+    public R<Boolean> nameRepeat(@RequestBody PageEntity pageEntity) {
+        boolean repeat = bigScreenPageService.checkNameRepeat(pageEntity);
+        return R.success(repeat);
+    }
 }

+ 31 - 1
DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/map/service/impl/DataRoomMapServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gccloud.common.exception.GlobalException;
 import com.gccloud.common.utils.BeanConvertUtils;
 import com.gccloud.common.utils.JSON;
+import com.gccloud.common.utils.QueryWrapperUtils;
 import com.gccloud.dataroom.core.module.map.dto.DataRoomMapRepeatDTO;
 import com.gccloud.dataroom.core.module.map.vo.DataRoomMapVO;
 import com.gccloud.dataroom.core.module.map.vo.MapChildVO;
@@ -23,6 +24,7 @@ import org.springframework.stereotype.Service;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -38,9 +40,37 @@ public class DataRoomMapServiceImpl extends ServiceImpl<DataRoomMapDao, DataRoom
 
     @Override
     public List<DataRoomMapVO> getList(MapSearchDTO searchDTO) {
-        return this.baseMapper.getList(searchDTO);
+        if (StringUtils.isNotBlank(searchDTO.getSearchKey())) {
+            searchDTO.setParentId(null);
+        }
+        LambdaQueryWrapper<DataRoomMapEntity> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.select(DataRoomMapEntity::getParentId);
+        List<DataRoomMapEntity> list = this.list(queryWrapper);
+        Set<String> parentIds = list.stream().map(DataRoomMapEntity::getParentId).collect(Collectors.toSet());
+
+        LambdaQueryWrapper<DataRoomMapEntity> wrapper = QueryWrapperUtils.wrapperLike(new LambdaQueryWrapper<>(), searchDTO.getSearchKey(), DataRoomMapEntity::getName, DataRoomMapEntity::getMapCode);
+        wrapper.eq(searchDTO.getLevel() != null, DataRoomMapEntity::getLevel, searchDTO.getLevel());
+        wrapper.eq(StringUtils.isNotBlank(searchDTO.getParentId()), DataRoomMapEntity::getParentId, searchDTO.getParentId());
+        wrapper.eq(searchDTO.getUploadedGeoJson() != null, DataRoomMapEntity::getUploadedGeoJson, searchDTO.getUploadedGeoJson());
+        List<DataRoomMapEntity> entityList = this.list(wrapper);
+        List<String> idList = entityList.stream().map(DataRoomMapEntity::getId).collect(Collectors.toList());
+        List<DataRoomMapVO> voList = Lists.newArrayList();
+        for (DataRoomMapEntity entity : entityList) {
+            // 如果地图的直接父级也在列表中,那么不返回该地图
+            if (idList.contains(entity.getParentId())) {
+                continue;
+            }
+            DataRoomMapVO mapVO = BeanConvertUtils.convert(entity, DataRoomMapVO.class);
+            mapVO.setHasChildren(parentIds.contains(entity.getId()));
+            voList.add(mapVO);
+
+        }
+        return voList;
+//        return this.baseMapper.getList(searchDTO);
     }
 
+
+
     @Override
     public List<DataRoomMapVO> getAvailableTree(Integer level) {
         // 根据层级,如果某个地图的某个子级(或子级的子级...)也符合该层级,那么把该地图也返回

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

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

+ 1 - 1
DataRoom/pom.xml

@@ -12,7 +12,7 @@
 
     <groupId>com.gccloud</groupId>
     <artifactId>dataroom</artifactId>
-    <version>1.0.1.2023092201.Alpha</version>
+    <version>1.0.1.2023092701.Alpha</version>
 
     <packaging>pom</packaging>
     <description>基于G2Plot、Echarts的大屏设计服务端,具备设计、预览能力,支持MySQL、Oracle、PostgreSQL、Groovy等数据集接入

+ 40 - 34
README.md

@@ -1,24 +1,23 @@
 <div align="center">
   <h1>DataRoom</h1>
-  <strong>简单、免费的开源大屏设计器</strong>
+  <strong>简单、免费、开源的大屏设计器</strong>
 </div>
-
 <p align="center">
     <img alt="stars" src="https://gitee.com/gcpaas/DataRoom/badge/star.svg?theme=dark">
     <img alt="forks" src="https://gitee.com/gcpaas/DataRoom/badge/fork.svg?theme=dark">
     <img alt="GitHub license" src="https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg">
-    <img alt="npm" src="https://img.shields.io/npm/v/@gcpaas/data-room-ui">
-    <img alt="Maven Central" src="https://img.shields.io/maven-central/v/com.gccloud/dataroom-core">
-    <img alt="Company" src="https://img.shields.io/badge/Author-科大国创云网科技有限公司-blue.svg">
+    <img alt="Company" src="https://img.shields.io/badge/公司-科大国创云网科技有限公司-blue.svg">
+    <a href="http://gcpaas.gccloud.com"><img src="https://img.shields.io/badge/%E9%A2%84%E8%A7%88-演示环境-yellow" alt="预览"></a>
 </p>
+🔥DataRoom是一款基于SpringBoot、MyBatisPlus、Vue、ElementUI、G2Plot、Echarts等技术栈的大屏设计器,具备大屏设计、预览能力,支持MySQL、Oracle、PostgreSQL、SQLServer、ElasticSearch、JSON、JS、HTTP、Groovy等数据集接入,使用简单,完全免费,代码开源。<br/>
 
-🔥DataRoom是一款基于SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echarts等技术栈的大屏设计器,具备大屏设计、预览能力,支持MySQL、Oracle、PostgreSQL、MSSQL、JSON、JS、HTTP、Groovy等数据集接入,使用简单,完全免费,代码开源。
+**最新版本**   <img alt="npm" src="https://img.shields.io/npm/v/@gcpaas/data-room-ui"><img alt="Maven Central" src="https://img.shields.io/maven-central/v/com.gccloud/dataroom-core">
 
-## 效果图
+## 功能介绍
 
 ### 1. 大屏管理
 
-进行大屏【新增】、【编辑】、【设计】、【预览】、【复制】、【删除】操作
+支持大屏【新增】、【编辑】、【设计】、【预览】、【复制】、【删除】操作
 
 <br>
 
@@ -49,7 +48,9 @@
 
 <img alt="logo" src="./doc/images/数据源.png" height="200">
 
-### 4. 数据集
+
+
+### 5. 数据集
 
 支持原始数据集、自助数据集、存储过程数据集、JSON数据集、脚本数据集、JS脚本数据集、HTTP数据集多种方式接入数据
 
@@ -60,61 +61,66 @@
 <img alt="logo" src="./doc/images/数据集2.png"   height="200">
 
 
+
+
 ## 优势
 
-✅ 一站式大屏解决方案,从<span style='color:red'>**数据接入**</span>-><span style='color:red'>**大屏设计**</span>-><span style='color:red'>**大屏预览**</span>-><span style='color:red'>**生产使用**</span><br/>
-✅ 支持<span style='color:red'>**多种数据集接入**</span>,满足大多数数据接入需求<br/>
+✅ 一站式大屏解决方案,从<span style='color:red'>**数据接入**</span>-><span style='color:red'>**数据清洗处理**</span>-><span style='color:red'>**大屏设计**</span>-><span style='color:red'>**大屏预览**</span>-><span style='color:red'>**大屏发布上线**</span><br/>
+✅ 支持<span style='color:red'>**多种数据集接入**</span>,如:原始数据集、自助数据集(支持多表关联)、存储过程、JSON(静态数据)、JS脚本、Groovy脚本、ElasticSearch、HTTP接口,满足大多数数据接入需求<br/>
 ✅ 支持大屏🔥<span style='color:red'>**独立部署**</span>,不对原有工程产生影响,适用于老项目<br/>
-✅ 支持大屏🔥<span style='color:red'>**嵌入式集成**</span>,与项目无缝融合,引入依赖包即可,无其他系统框架依赖,减少运维成本,适用于新项目<br/>
-✅ 支持🔥<span style='color:red'>**组件在线、离线开发**</span>,在线开发简单组件、离线开发复杂组件<br/>
+✅ 支持大屏🔥<span style='color:red'>**嵌入式集成**</span>,引入依赖包即可,与项目无缝融合,无其他系统框架依赖,减少运维成本,适用于新项目<br/>
+✅ 支持🔥<span style='color:red'>**组件在线、离线开发**</span>,在线开发业务组件、离线开发系统组件,轻松解决图表不满足需求问题<br/>
 ✅ 支持自定义接口权限、数据权限,轻松对接🔥<span style='color:red'>**Shiro、Security**</span>等认证框架,保证大屏数据安全<br/>
 
 <br/>
 
 ## 特性
 
-| 特性                                                         | 支持 |
-| :----------------------------------------------------------- | ---- |
-| 支持大屏、设计、预览、导出图片、项目集成                     | ✅          |
+| 特性                                                         | |
+| --- | :-- |
+| 支持大屏、设计、预览、导出图片                     | ✅        |
 | 支持图层上下调整,支持置于顶层、置于底层                     | ✅    |
-| 支持画布组件框选、组合、取消组合、锁定、批量删除、复制功能   | ✅    |
-| 支持文本、图片、轮播表、排名表、翻牌器、基础表格、倒计时、系统时间、外链基础组件 | ✅    |
-| 支持折线图、梯形图、柱状图、面积图、条形图、饼图、环图、水波图、仪表盘、进度条、词云图、雷达图、漏斗图等图表组件 | ✅    |
-| 支持15种边框组件,具备动画、渐变色设置                       | ✅    |
+| 支持画布组件任意框选、组合、取消组合、锁定、批量删除、复制功能 | ✅    |
+| 支持多组件框选后对齐,如:左对齐、右对齐、上对齐、下对齐、中部对齐、水平均分、垂直均分 | ✅ |
+| 支持文本、超链接、时间选择器、输入框、按钮、Tab标签、图片、轮播表、播放器、排名表、翻牌器、基础表格、倒计时、系统时间、外链集成、主题切换基础组件 | ✅    |
+| 支持折线图、柱状图、面积图、条形图、饼图、环图、水波图、仪表盘、进度条、词云图、雷达图、漏斗图、梯形图、中国地图、飞线图等图表组件 | ✅    |
+| 支持组件库,包含系统组件、业务组件、自定义组件,在线编辑器二次开发业务或自定义图表组件 | ✅ |
+| 支持图表数据定时刷新能力 | ✅ |
+| 支持15种边框组件,具备动画、渐变色设置                     | ✅    |
 | 支持10多种修饰组件,具备动画、渐变色设置                     | ✅    |
-| 支持资源管理,包含LOGO、3D图标、2D图标、修饰条、背景图等上百个大屏设计资源,资源支持自定义上传 | ✅    |
-| 支持组件管理,包含系统组件、自定义组件、业务组件,组件支持二次开发 | ✅    |
+| 支持资源库,包含LOGO、3D图标、2D图标、修饰条、背景图等上百个大屏设计资源,资源支持自定义上传 | ✅    |
 | 支持多种数据源,目前支持MySQL、PostgreSQL、Oracle、ClickHouse数据库 | ✅    |
-| 支持多种数据集,目前支持原始数据集、自助数据集、存储过程数据集、JSON数据集、JS数据集、脚本数据集、HTTP数据集,接入不同来源数据 | ✅    |
-| 支持自定义权限、具备自定义接口权限、数据权限,保证大屏数据安全 | ✅    |
-| 支持组件自定义规范,按照规范开发自己的大屏组件,满足特殊需求,如:接入three.js | ✅    |
+| 支持多种数据集,目前支持原始数据集、自助数据集(支持多表关联)、存储过程数据集、JSON数据集(静态数据)、JS数据集、Groovy脚本数据集、ElasticSearch数据集、HTTP数据集,接入不同数据来源 | ✅    |
+| 支持自定义接口权限、数据权限,可对接项目已有权限管理完成对大屏的安全管控 | ✅    |
+| 支持老项目外链集成、新项目依赖包集成 | ✅    |
 
 <br/>
 
 ## 快速开始
 
-> 如果你想源码启动,[👉 请点击这里](https://www.yuque.com/chuinixiongkou/bigscreen/ofy1bqhqgua1fu0f)
+1️⃣ 如果你想源码启动体验,[请点击这里](https://www.yuque.com/chuinixiongkou/bigscreen/ofy1bqhqgua1fu0f)
+
+2️⃣ 如果你想使用Docker启动体验 ,[请点击这里](https://www.yuque.com/chuinixiongkou/bigscreen/ahhq3i7zxea46ox2)
 
-> 如果你想使用Docker启动 ,[👉 请点击这里](https://www.yuque.com/chuinixiongkou/bigscreen/ahhq3i7zxea46ox2)
+3️⃣ 如果你想将大屏集成到项目中,[请点击这里](https://www.yuque.com/chuinixiongkou/bigscreen/ofy1bqhqgua1fu0f)
 
-> 如果你想将大屏集成到项目中,[👉 请点击这里](https://www.yuque.com/chuinixiongkou/bigscreen/ofy1bqhqgua1fu0f)
+4️⃣ 如果你想设计一个大屏,[请点击这里](https://www.yuque.com/chuinixiongkou/bigscreen/ofy1bqhqgua1fu0f)
 
-> 如果你想设计一个大屏,[👉 请点击这里](https://www.yuque.com/chuinixiongkou/bigscreen/ofy1bqhqgua1fu0f)
+5️⃣ 如果你想独立部署大屏,[请点击这里](https://www.yuque.com/chuinixiongkou/bigscreen/xd78cw7t12q7kfbl#gGrS2)
 
 <br/>
 
 ## 演示环境
 
-演示环境会不定期进行更新,请不要在演示环境中放入生产数据 <a href="http://gcpaas.gccloud.com/bigScreen" target="_blank">立即在线使用</a>
+演示环境会不定时进行更新  <a href="http://gcpaas.gccloud.com/bigScreen" target="_blank">点击立即体验</a><span style='color:red;font-style: italic'>**(请不要在演示环境中放入生产数据)**</span>
 
 <br/>
 
 ## 常见问题
 
-* [使用手册、二次开发、部署手册、常见问题](https://www.yuque.com/chuinixiongkou/bigscreen/index)
-* [代码仓库(GitHub)](https://github.com/gcpaas/DataRoom)、[代码仓库(码云)](https://gitee.com/gcpaas/DataRoom)
-
-<br/>
+⚠️&nbsp;&nbsp;[使用手册、二次开发、部署手册、常见问题](https://www.yuque.com/chuinixiongkou/bigscreen/index)<br/>
+⚠️&nbsp;&nbsp;[(码云仓库](https://gitee.com/gcpaas/DataRoom)<br/>
+⚠️&nbsp;&nbsp;[GitHub仓库](https://github.com/gcpaas/DataRoom)<br/>
 
 ## 生态插件
 

BIN
data-room-ui/example/remoteComponents/tabTable/component.png


+ 0 - 82
data-room-ui/example/remoteComponents/tabTable/config.js

@@ -1,82 +0,0 @@
-const title = 'tab表格'
-// 右侧配置项
-const setting = [
-  {
-    label: '维度',
-    // 设置组件类型, select / input / colorPicker
-    type: 'select',
-    // 字段
-    field: 'xField',
-    optionField: 'xField', // 对应options中的字段
-    // 是否多选
-    multiple: false,
-    // 绑定的值
-    value: '',
-    // tab页。 data: 数据, custom: 自定义
-    tabName: 'data'
-  },
-  {
-    label: '指标',
-    // 设置组件类型
-    type: 'select',
-    // 字段
-    field: 'yField',
-    // 对应options中的字段
-    optionField: 'yField',
-    // 是否多选
-    multiple: false,
-    value: '',
-    tabName: 'data'
-  },
-  {
-    label: '用户名',
-    // 设置组件类型, select / input / colorPicker
-    type: 'input',
-    // 字段
-    field: 'customize_username',
-    optionField: 'customize.username', // 对应options中的字段
-    // 是否多选
-    multiple: false,
-    // 绑定的值
-    value: '',
-    // tab页。 data: 数据, custom: 自定义
-    tabName: 'custom'
-  },
-  {
-    label: '手机号',
-    // 设置组件类型, select / input / colorPicker
-    type: 'input',
-    // 字段
-    field: 'customize_phone',
-    optionField: 'customize.phone', // 对应options中的字段
-    // 是否多选
-    multiple: false,
-    // 绑定的值
-    value: '',
-    // tab页。 data: 数据, custom: 自定义
-    tabName: 'custom'
-  }
-]
-
-// 模拟数据
-const data = []
-
-const option = {
-  // 数据
-  data: data,
-  // 数据的字段相关属性
-  xField: '',
-  yField: '',
-  seriesField: '',
-  // 自定义组件其他属性
-  customize: {
-    username: '张三',
-    phone: '123456789'
-  }
-}
-
-export default {
-  title,
-  option,
-  setting
-}

+ 0 - 107
data-room-ui/example/remoteComponents/tabTable/index.vue

@@ -1,107 +0,0 @@
-<template>
-  <div class="tab-table-wrap">
-    <el-tabs
-      v-model="activeName"
-      @tab-click="handleClick"
-    >
-      <el-tab-pane
-        label="城市管理"
-        name="first"
-      >
-        <el-table
-          :data="tableData"
-          style="width: 100%"
-        >
-          <el-table-column
-            prop="name"
-            label="城市"
-            width="180"
-          />
-          <el-table-column
-            prop="number"
-            label="数量"
-          />
-        </el-table>
-        <el-tab-pane
-          label="用户信息"
-          name="second"
-        >
-          <el-descriptions title="用户信息">
-            <el-descriptions-item label="用户名">
-              {{ customize.username }}
-            </el-descriptions-item>
-            <el-descriptions-item label="手机号">
-              {{ customize.phone }}
-            </el-descriptions-item>
-          </el-descriptions>
-        </el-tab-pane>
-        <el-tab-pane
-          label="角色管理"
-          name="third"
-        >
-          角色管理
-        </el-tab-pane>
-        <el-tab-pane
-          label="定时任务补偿"
-          name="fourth"
-        >
-          定时任务补偿
-        </el-tab-pane>
-      </el-tab-pane>
-    </el-tabs>
-  </div>
-</template>
-<script>
-export default {
-  data () {
-    return {
-      activeName: 'first'
-    }
-  },
-  props: {
-    config: {
-      type: Object,
-      default: () => ({})
-    }
-  },
-
-  computed: {
-    option () {
-      return this.config.option
-    },
-    optionData () {
-      return this.option.data
-    },
-    customize () {
-      return this.option.customize
-    },
-    tableData () {
-      if (this.optionData && this.optionData.length) {
-        return this.optionData.map((item) => ({
-          name: item[this.option.xField],
-          number: item[this.option.yField]
-        }))
-      }
-      return []
-    }
-  },
-  methods: {
-    handleClick (tab, event) {
-    },
-    linkage (row) {
-      this.$emit('linkage', row)
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-  .tab-table-wrap {
-    padding: 16px;
-    font-size: 20px;
-    position: absolute;
-    width: 100%;
-    height: 100%;
-    background: #fff;
-  }
-</style>

+ 57 - 42
data-room-ui/package-lock.json

@@ -1,6 +1,6 @@
 {
   "name": "@gcpaas/data-room-ui",
-  "version": "1.0.1-2023091801-Alpha",
+  "version": "1.0.1-2023092702-Alpha",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
@@ -3377,6 +3377,27 @@
         "whatwg-fetch": "^3.6.2"
       },
       "dependencies": {
+        "@vue/vue-loader-v15": {
+          "version": "npm:vue-loader@15.10.2",
+          "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.2.tgz",
+          "integrity": "sha512-ndeSe/8KQc/nlA7TJ+OBhv2qalmj1s+uBs7yHDRFaAXscFTApBzY9F1jES3bautmgWjDlDct0fw8rPuySDLwxw==",
+          "dev": true,
+          "requires": {
+            "@vue/component-compiler-utils": "^3.1.0",
+            "hash-sum": "^1.0.2",
+            "loader-utils": "^1.1.0",
+            "vue-hot-reload-api": "^2.3.0",
+            "vue-style-loader": "^4.1.0"
+          },
+          "dependencies": {
+            "hash-sum": {
+              "version": "1.0.2",
+              "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
+              "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
+              "dev": true
+            }
+          }
+        },
         "acorn-walk": {
           "version": "8.2.0",
           "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
@@ -3448,6 +3469,26 @@
             "tapable": "^2.0.0"
           }
         },
+        "json5": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+          "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+          "dev": true,
+          "requires": {
+            "minimist": "^1.2.0"
+          }
+        },
+        "loader-utils": {
+          "version": "1.4.2",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
+          "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^1.0.1"
+          }
+        },
         "ms": {
           "version": "2.1.2",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -3682,47 +3723,6 @@
         "lodash": "^4.17.4"
       }
     },
-    "@vue/vue-loader-v15": {
-      "version": "npm:vue-loader@15.10.2",
-      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.2.tgz",
-      "integrity": "sha512-ndeSe/8KQc/nlA7TJ+OBhv2qalmj1s+uBs7yHDRFaAXscFTApBzY9F1jES3bautmgWjDlDct0fw8rPuySDLwxw==",
-      "dev": true,
-      "requires": {
-        "@vue/component-compiler-utils": "^3.1.0",
-        "hash-sum": "^1.0.2",
-        "loader-utils": "^1.1.0",
-        "vue-hot-reload-api": "^2.3.0",
-        "vue-style-loader": "^4.1.0"
-      },
-      "dependencies": {
-        "hash-sum": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
-          "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
-          "dev": true
-        },
-        "json5": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-          "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
-          "dev": true,
-          "requires": {
-            "minimist": "^1.2.0"
-          }
-        },
-        "loader-utils": {
-          "version": "1.4.2",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
-          "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
-          "dev": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^1.0.1"
-          }
-        }
-      }
-    },
     "@vue/vue2-jest": {
       "version": "27.0.0",
       "resolved": "https://registry.npmjs.org/@vue/vue2-jest/-/vue2-jest-27.0.0.tgz",
@@ -9286,6 +9286,21 @@
         "globule": "^1.0.0"
       }
     },
+    "gc-vue-draggable-resizable": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/gc-vue-draggable-resizable/-/gc-vue-draggable-resizable-1.0.1.tgz",
+      "integrity": "sha512-NBww5DvwuSPQrMLcimfZcXKsXKUkQxYj/Rd+58cZraBvK5dGkc50pamOrh62Fm9mu9v6x/pa8qxABIFC60SM3w==",
+      "requires": {
+        "core-js": "^2.6.11"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "2.6.12",
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
+          "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
+        }
+      }
+    },
     "gensync": {
       "version": "1.0.0-beta.2",
       "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",

+ 2 - 1
data-room-ui/package.json

@@ -1,6 +1,6 @@
 {
   "name": "@gcpaas/data-room-ui",
-  "version": "1.0.1-2023092601-Alpha",
+  "version": "1.0.1-2023092702-Alpha",
   "description": "自定义大屏",
   "author": "gcpaas",
   "license": "MIT",
@@ -58,6 +58,7 @@
     "echarts": "^5.2.2",
     "element-ui": "2.15.6",
     "es6-promise": "4.2.8",
+    "gc-vue-draggable-resizable": "^1.0.1",
     "html-to-image": "1.11.11",
     "image-conversion": "^2.1.1",
     "insert-css": "^2.0.0",

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

@@ -395,10 +395,12 @@ export default {
   .popper__arrow {
     bottom: -6px ;
     border-bottom-color: var(--bgColor) !important;
+    border-top-color: var(--bgColor) !important;
 
     &::after {
       bottom: 0px ;
       border-bottom-color: var(--bgColor) !important;
+      border-top-color: var(--bgColor) !important;
     }
   }
 
@@ -443,6 +445,23 @@ export default {
       }
     }
   }
+  // 上月 下月 字体颜色置灰
+  .prev-month{
+  span{
+    color: #999 !important;
+    &:hover{
+      color: var(--hoverFontColor) !important;
+    }
+  }
+  }
+  .next-month{
+    span{
+      color: #999 !important;
+      &:hover{
+      color: var(--hoverFontColor) !important;
+    }
+    }
+  }
 }
 </style>
 

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

@@ -61,12 +61,12 @@
               />
             </el-form-item>
             <!-- 下拉项悬浮背景颜色 -->
-            <el-form-item label="悬浮颜色">
+            <!-- <el-form-item label="悬浮背景颜色">
               <ColorPicker
                 v-model="config.customize.dropDownBox.hoverBgColor"
                 :predefine="predefineThemeColors"
               />
-            </el-form-item>
+            </el-form-item> -->
             <!-- 下拉项悬浮字体颜色 -->
             <el-form-item label="悬浮字体颜色">
               <ColorPicker

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

@@ -207,7 +207,6 @@ export default {
   mixins: [paramsMixins, commonMixins, linkageMixins],
   mounted () {
     this.chartInit()
-    // 如果点击了生成图片,则先关闭动画
     EventBus.$on('stopMarquee', () => {
       this.isAnimate = false
     })

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

@@ -123,7 +123,6 @@ export default {
     EventBus.$off('dragSelectChange')
   },
   methods: {
-
     cellStyle ({ row, column, rowIndex, columnIndex }) {
       const bodyBackgroundColor = {
         light: '#ffffff',
@@ -169,60 +168,10 @@ export default {
       if (config.code === this.activeCode) {
         this.changeActiveItemConfig(config)
       }
-      // const config = cloneDeep(oldConfig)
-      // if (this.customTheme === 'custom') {
-      //   this.headerCellStyleToObj()
-      //   this.cellStyleToObj()
-      // }
-      // if (this.customTheme === 'custom') {
-      //   this.headerCellStyleToObj()
-      //   this.cellStyleToObj()
-      // }
-      // if (config.customize.stripe) {
-      //   const trs = document
-      //     .getElementById(this.config.code)
-      //     ?.querySelectorAll('tr.el-table__row--striped')
-      //   if (trs) {
-      //     trs.forEach(tr => {
-      //       tr.style.opacity = '0.9'
-      //     // 透明度
-      //     // const overlay = document.createElement("div");
-      //     // overlay.classList.add("overlay");
-      //     // // 将蒙版添加到容器中
-      //     // tr.appendChild(overlay);
-      //     })
-      //   }
-      // } else {
-      //   const trs = document
-      //     .getElementById(config.code)
-      //     ?.querySelectorAll('tr.el-table__row--striped')
-      //   if (trs) {
-      //     trs.forEach(tr => {
-      //       tr.style.opacity = '1'
-      //     // 透明度
-      //     // const overlay = document.createElement("div");
-      //     // overlay.classList.add("overlay");
-      //     // // 将蒙版添加到容器中
-      //     // tr.appendChild(overlay);
-      //     })
-      //   }
-      // // document.querySelectorAll(".overlay").forEach(overlay => {
-      // //   overlay.remove();
-      // // });
-      // }
-      // this.chartInit();
-      // if (config.customize.evenRowBackgroundColor && !config.customize.oddRowBackgroundColor) {
-      //   config.customize.oddRowBackgroundColor = config.customize.bodyBackgroundColor
-      // } else if (!config.customize.evenRowBackgroundColor && config.customize.oddRowBackgroundColor) {
-      //   config.customize.evenRowBackgroundColor = config.customize.bodyBackgroundColor
-      // } else if (!(!config.customize.evenRowBackgroundColor && !config.customize.oddRowBackgroundColor)) {
-      //   config.customize.bodyBackgroundColor = ''
-      // }
-      // this.updateKey = new Date().getTime()
       return config
     },
     dataFormatting (config, data) {
-      config.option.tableData = data?.data
+      config.option.tableData = data?.data && data.data.length > 0 ? data.data : []
       const filteredData = {}
       const columnData = data?.columnData || {}
       const dimensionFieldList = config.dataSource.dimensionFieldList || []

+ 2 - 0
data-room-ui/packages/BigScreenDesign/ComponentDialog/index.vue

@@ -22,6 +22,7 @@
                 class="bs-el-select"
                 popper-class="bs-el-select"
                 placeholder="请选择分组"
+                filterable
                 clearable
                 @change="reSearch"
               >
@@ -145,6 +146,7 @@
                 class="bs-el-select"
                 popper-class="bs-el-select"
                 placeholder="请选择分组"
+                filterable
                 clearable
                 @change="reSearch"
               >

+ 5 - 0
data-room-ui/packages/BigScreenDesign/RightSetting/DataSetting.vue

@@ -750,10 +750,12 @@ export default {
           this.fieldsList = res.fields
           // 初始化时以组件本来的参数设置为主
           if (type === 'initial') {
+            let deleteKeys = []
             for (const key in this.config.dataSource.params) {
               const param = res?.params?.find(field => field.name === key)
               // 如果组件参数在数据集中找不到,说明参数已经被删除,不需要再显示
               if (param) {
+                deleteKeys.push(key)
                 this.params.push({
                   name: key,
                   value: this.config.dataSource.params[key],
@@ -762,6 +764,9 @@ export default {
                 })
               }
             }
+            deleteKeys.forEach(key => {
+              delete this.config.dataSource.params[key]
+            })
           } else {
             this.params = res.params
           }

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

@@ -79,7 +79,7 @@
     </el-dialog>
     <!-- 新增或编辑目录弹窗 -->
     <el-dialog
-      :title="currentCatalog.code ? '编辑分组':'新分组'"
+      :title="currentCatalog.code ? '编辑分组':'新分组'"
       :visible.sync="catalogVisible"
       custom-class="bs-el-dialog"
       width="30%"

+ 23 - 2
data-room-ui/packages/BigScreenList/EditForm.vue

@@ -173,7 +173,28 @@ export default {
       },
       dataFormRules: {
         name: [
-          { required: true, message: '名称不能为空', trigger: 'blur' }
+          { required: true, message: '名称不能为空', trigger: 'blur' },
+          // 名称重复自定义校验
+          {
+            validator: (rule, value, callback) => {
+              if (value) {
+                this.$dataRoomAxios.post('/bigScreen/design/name/repeat', {
+                  name: value,
+                  type: this.type,
+                  id: this.dataForm.id
+                }).then((resp) => {
+                  if (resp) {
+                    callback(new Error('名称已存在'))
+                  } else {
+                    callback()
+                  }
+                })
+              } else {
+                callback()
+              }
+            },
+            trigger: 'change'
+          }
         ]
       },
       sureLoading: false,
@@ -313,7 +334,7 @@ export default {
         addOrUpdateHandel(form)
           .then((code) => {
             this.formVisible = false
-            const message = this.dataForm.code ? '更新成功' : '新成功'
+            const message = this.dataForm.code ? '更新成功' : '新成功'
             this.$message.success(message)
             this.$emit('refreshData', form, this.dataForm.id)
             if (isToDesign) {

+ 1 - 1
data-room-ui/packages/BigScreenList/index.vue

@@ -39,7 +39,7 @@
             <div class="add-big-screen-card">
               <div class="add-big-screen-card-inner">
                 <div class="add-big-screen-card-text">
-                  新{{ type === 'bigScreenCatalog' ? '大屏' : '组件' }}
+                  新{{ type === 'bigScreenCatalog' ? '大屏' : '组件' }}
                 </div>
               </div>
             </div>

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

@@ -53,11 +53,11 @@
       @click="catalogAdd"
     >
       <i class="el-icon-plus" />
-      <div>新分组</div>
+      <div>新分组</div>
     </div>
     <!-- 新增或编辑目录弹窗 -->
     <el-dialog
-      :title="currentCatalog.code ? '编辑分组':'新分组'"
+      :title="currentCatalog.code ? '编辑分组':'新分组'"
       :visible.sync="catalogVisible"
       custom-class="bs-el-dialog"
       width="30%"

+ 1 - 1
data-room-ui/packages/BigScreenManagement/addDialog.vue

@@ -381,7 +381,7 @@ export default {
         addOrUpdateHandel(form)
           .then((code) => {
             this.formVisible = false
-            const message = this.dataForm.code ? '更新成功' : '新成功'
+            const message = this.dataForm.code ? '更新成功' : '新成功'
             this.$message.success(message)
             this.$emit('refreshData', form, this.dataForm.id)
             if (isToDesign) {

+ 4 - 4
data-room-ui/packages/BizComponent/Preview.vue

@@ -41,8 +41,8 @@ export default {
         let title = ''
         // eslint-disable-next-line prefer-const, no-unused-vars
         let data = []
-        let g2Plots=g2Plot
-        let echarts = _echarts
+        const g2Plots = g2Plot
+        const echarts = _echarts
         // eslint-disable-next-line prefer-const
         let settingContent = this.settingContentInner?.replaceAll('const ', '')
         // 去掉 export default及后面代码
@@ -53,7 +53,7 @@ export default {
           option,
           setting,
           echarts,
-          g2Plots,
+          g2Plots
         }
       },
       set (val) {}
@@ -78,7 +78,7 @@ export default {
       loading: false,
       remoteComponent: null,
       vueContentInner: this.vueContent,
-      settingContentInner: this.settingContent?.replaceAll('const ', ''),
+      settingContentInner: this.settingContent?.replaceAll('const ', '')
     }
   },
   created () {

+ 8 - 8
data-room-ui/packages/BizComponent/index.vue

@@ -54,11 +54,11 @@
                 3D组件
               </div>
             </div>
-            <div class="upload-btn">
+            <!-- <div class="upload-btn">
               <CusBtn @click="upload('vueContent')">
                 上传
               </CusBtn>
-            </div>
+            </div> -->
           </div>
           <div class="code-tab-content">
             <!-- <MonacoEditor
@@ -78,11 +78,11 @@
             <div class="code-tab">
               组件配置
             </div>
-            <div class="upload-btn">
+            <!-- <div class="upload-btn">
               <CusBtn @click="upload('settingContent')">
                 上传
               </CusBtn>
-            </div>
+            </div> -->
           </div>
           <div class="code-tab-content">
             <!-- <MonacoEditor
@@ -306,10 +306,10 @@ export default {
 
       })
     },
-    upload (type) {
-      this.currentContentType = type
-      this.$refs[`${this.currentContentType}File`].click()
-    },
+    // upload (type) {
+    //   this.currentContentType = type
+    //   this.$refs[`${this.currentContentType}File`].click()
+    // },
     handleBatchUpload (source) {
       const file = source.target.files
       const reader = new FileReader() // 新建一个FileReader

+ 7 - 4
data-room-ui/packages/Borders/Border15/index.vue

@@ -14,11 +14,13 @@
         } , ${gradientColor1 ? gradientColor1 : gradientColor0})`,
         'font-size': fontSize + 'px',
         'font-weight': fontWeight,
-        opacity: opacity / 100,
+        opacity: opacity === 0 ? 0 : opacity / 100 ,
         color: fontColor
       }"
     >
-      {{ text }}
+      <span>
+        {{ text }}
+      </span>
     </div>
   </div>
 </template>
@@ -67,11 +69,12 @@ export default {
       return this.config.customize.fontColor || '#fff'
     },
     opacity () {
-      return this.config.customize.opacity || 100
+      return (this.config.customize.opacity === 0 || this.config.customize.opacity) ? this.config.customize.opacity : 100
     }
   },
   watch: {},
-  mounted () {},
+  mounted () {
+  },
   methods: {}
 }
 </script>

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

@@ -83,7 +83,7 @@
     </el-dialog>
     <!-- 新增或编辑目录弹窗 -->
     <el-dialog
-      :title="currentCatalog.code ? '编辑分组' : '新分组'"
+      :title="currentCatalog.code ? '编辑分组' : '新分组'"
       :visible.sync="catalogVisible"
       custom-class="bs-el-dialog"
       width="30%"

+ 25 - 3
data-room-ui/packages/ComponentList/EditForm.vue

@@ -208,7 +208,29 @@ export default {
       },
       dataFormRules: {
         name: [
-          { required: true, message: '名称不能为空', trigger: 'blur' }
+          { required: true, message: '名称不能为空', trigger: 'blur' },
+          // 组件名称判重
+          // 名称重复自定义校验
+          {
+            validator: (rule, value, callback) => {
+              if (value) {
+                this.$dataRoomAxios.post('/bigScreen/design/name/repeat', {
+                  name: value,
+                  type: this.type,
+                  id: this.dataForm.id
+                }).then((resp) => {
+                  if (resp) {
+                    callback(new Error('名称已存在'))
+                  } else {
+                    callback()
+                  }
+                })
+              } else {
+                callback()
+              }
+            },
+            trigger: 'change'
+          }
         ]
       },
       sureLoading: false,
@@ -375,7 +397,7 @@ export default {
         addOrUpdateHandel(form)
           .then((code) => {
             this.formVisible = false
-            const message = this.dataForm.code ? '更新成功' : '新成功'
+            const message = this.dataForm.code ? '更新成功' : '新成功'
             this.$message.success(message)
             this.$emit('refreshData', form, this.dataForm.id)
             if (isToDesign) {
@@ -431,7 +453,7 @@ export default {
         addOrUpdateHandel(form)
           .then((code) => {
             this.formVisible = false
-            const message = this.dataForm.code ? '更新成功' : '新成功'
+            const message = this.dataForm.code ? '更新成功' : '新成功'
             this.$message.success(message)
             this.$emit('refreshData', form, this.dataForm.id)
             if (isToDesign) {

+ 1 - 0
data-room-ui/packages/ComponentList/index.vue

@@ -8,6 +8,7 @@
           class="bs-el-select"
           popper-class="bs-el-select"
           placeholder="请选择分组"
+          filterable
           clearable
           @change="reSearch"
         >

+ 2 - 1
data-room-ui/packages/DataSetLabelManagement/src/LabelSelect.vue

@@ -51,6 +51,7 @@
               clearable
               class="bs-el-input"
               placeholder="请输入标签名称"
+              @clear="getDataList"
             />
           </el-form-item>
           <el-form-item
@@ -278,7 +279,7 @@ export default {
         labelName: '',
         labelType: ''
       },
-      sizeLabel: 20,
+      sizeLabel: 10,
       labelTypeList: [],
       labelCheckLoading: false
     }

+ 3 - 5
data-room-ui/packages/DataSetManagement/src/CategroyEditForm.vue

@@ -50,8 +50,7 @@
 </template>
 
 <script>
-import { categoryAdd, categoryUpdate } from 'data-room-ui/js/utils/datasetConfigService'
-import { categoryNameRepeat } from "../../js/utils/datasetConfigService";
+import { categoryAdd, categoryUpdate, categoryNameRepeat } from 'data-room-ui/js/utils/datasetConfigService'
 export default {
   name: 'CategroyEditForm',
   props: {
@@ -154,9 +153,8 @@ export default {
             id = this.dataForm.id
             parentId = this.nodeData.parentId
           }
-
           const params = {
-            id: id,
+            id: this.dataForm.id,
             name: this.dataForm.name,
             parentId: parentId,
             type: this.type,
@@ -164,7 +162,7 @@ export default {
           }
           if (id) {
             categoryUpdate(params).then((r) => {
-              params.id = r
+              // params.id = r
               this.$message.success('保存成功')
               this.cancel()
               try {

+ 9 - 3
data-room-ui/packages/DataSetManagement/src/CustomEditForm.vue

@@ -11,7 +11,7 @@
           <template slot="content">
             <div class="page-header">
               <div class="page-header-left">
-                {{ !isEdit ? '自助数据集详情' : dataForm.id ? '自助数据集编辑' : '自助数据集新增' }}
+                {{ !isEdit ? '自助数据集详情' : dataForm.id ? '编辑自助数据集' : '新增自助数据集' }}
               </div>
               <div class="page-header-right">
                 <el-button
@@ -120,7 +120,7 @@
             <el-row :gutter="20">
               <el-col :span="12">
                 <el-form-item
-                  label="描述"
+                  label="备注"
                   prop="remark"
                 >
                   <el-input
@@ -1244,7 +1244,7 @@ export default {
           this.$message.warning('参数名称不可以与字段名相同!')
           this.passTest = false
         } else {
-          if (val) this.$message.success('运行成功')
+          if (val) this.$message.success('脚本执行通过')
           this.exception = ''
           this.msg = ''
           this.passTest = true
@@ -1425,4 +1425,10 @@ export default {
     background: var(--bs-el-background-1);
   }
 }
+.bs-el-select{
+  width: 100% !important;
+}
+::v-deep .el-input__inner{
+  width: 100% !important;
+}
 </style>

+ 82 - 45
data-room-ui/packages/DataSetManagement/src/HttpEditForm.vue

@@ -9,12 +9,12 @@
           <template slot="content">
             <div class="page-header">
               <div class="page-header-left">
-                {{ !isEdit ? 'HTTP数据集详情' : dataForm.id ? 'HTTP数据集编辑' : 'HTTP数据集新增' }}
+                {{ !isEdit ? 'HTTP数据集详情' : dataForm.id ? '编辑HTTP数据集' : '新增HTTP数据集' }}
               </div>
               <div class="page-header-right">
                 <el-button
                   class="bs-el-button-default"
-                  @click="openNewWindow('https://www.yuque.com/chuinixiongkou/bigscreen/groovy_dataset')"
+                  @click="openNewWindow('https://www.yuque.com/chuinixiongkou/bigscreen/htag6vmt5oin15ib')"
                 >
                   帮助
                 </el-button>
@@ -49,7 +49,7 @@
             <el-row :gutter="20">
               <el-col :span="12">
                 <el-form-item
-                  label="名称"
+                  label="数据集名称"
                   prop="name"
                 >
                   <el-input
@@ -63,6 +63,7 @@
               <el-col :span="12">
                 <el-form-item
                   label="分组"
+                  prop="typeId"
                 >
                   <el-select
                     ref="selectParentName"
@@ -70,6 +71,7 @@
                     class="bs-el-select"
                     popper-class="bs-el-select"
                     placeholder="请选择分组"
+                    filterable
                     clearable
                     :disabled="!isEdit"
                     @clear="clearType"
@@ -114,7 +116,7 @@
             <el-row :gutter="20">
               <el-col :span="12">
                 <el-form-item
-                  label="描述"
+                  label="备注"
                   prop="remark"
                 >
                   <el-input
@@ -147,11 +149,12 @@
                 </el-form-item>
               </el-col>
             </el-row>
-            <el-row :gutter="20">
-              <el-col :span="21">
+            <el-row>
+              <el-col :span="24">
                 <el-form-item
                   label="请求地址"
                   prop="config.url"
+                  class="bs-el-input-url"
                 >
                   <el-input
                     v-model="dataForm.config.url"
@@ -190,7 +193,7 @@
                   <LabelSelect
                     :dataset-id="datasetId"
                     :id-list="dataForm.labelIds"
-                    @commit="(ids) =>{dataForm.labelIds = ids}"
+                    @commit="(ids) => { dataForm.labelIds = ids }"
                   />
                 </el-form-item>
               </el-col>
@@ -239,7 +242,7 @@
                   label-width="0px"
                 >
                   <el-row
-                    v-for="(item,index) in dataForm.config.headers"
+                    v-for="(item, index) in dataForm.config.headers"
                     :key="index"
                     :gutter="10"
                     :span="24"
@@ -247,7 +250,7 @@
                     <el-col :span="11">
                       <el-form-item
                         label="键"
-                        :prop="'config.headers.'+index+'.key'"
+                        :prop="'config.headers.' + index + '.key'"
                         label-width="50px"
                         :rules="rules.key"
                       >
@@ -263,7 +266,7 @@
                     <el-col :span="11">
                       <el-form-item
                         label="值"
-                        :prop="'config.headers.'+index+'.value'"
+                        :prop="'config.headers.' + index + '.value'"
                         label-width="50px"
                         :rules="rules.value"
                       >
@@ -310,19 +313,18 @@
                 <el-form-item
                   prop="config.params"
                   label-width="0px"
-                  :rules="dataForm.config.method==='get'?rules.params:[{ required: false}]"
+                  :rules="dataForm.config.method === 'get' ? rules.params : [{ required: false }]"
                 >
                   <el-row
-                    v-for="(item,index) in dataForm.config.params"
+                    v-for="(item, index) in dataForm.config.params"
                     :key="index"
                     :gutter="10"
                     :span="24"
-                    style="margin-top: 10px"
                   >
                     <el-col :span="11">
                       <el-form-item
                         label="键"
-                        :prop="'config.params.'+index+'.key'"
+                        :prop="'config.params.' + index + '.key'"
                         label-width="50px"
                         :rules="rules.key"
                       >
@@ -338,7 +340,7 @@
                     <el-col :span="11">
                       <el-form-item
                         label="值"
-                        :prop="'config.params.'+index+'.value'"
+                        :prop="'config.params.' + index + '.value'"
                         label-width="50px"
                         :rules="rules.value"
                       >
@@ -391,11 +393,13 @@
                     v-model="dataForm.config.body"
                     class="bs-el-input"
                     type="textarea"
-                    :autosize="{ minRows: 10, maxRows: 10}"
+                    :autosize="{ minRows: 10, maxRows: 10 }"
                     clearable
                   />
                   <div class="bs-codemirror-bottom-text">
-                    <strong>请求体设置规则: 请在脚本中直接输入请求体内容,如涉及变量,请按照${XX}格式进行设置<br> 例如:<span style="color: red;">{"name":${name}}</span>
+                    <strong>请求体设置规则: 请在脚本中直接输入请求体内容,如涉及变量,请按照${XX}格式进行设置<br> 例如:<span
+                      style="color: red;"
+                    >{"name":${name}}</span>
                     </strong>
                   </div>
                 </el-form-item>
@@ -409,19 +413,25 @@
                   label-width="0px"
                 >
                   <codemirror
-                    v-if="activeName==='reqScript'"
+                    v-if="activeName === 'reqScript'"
                     v-model.trim="dataForm.config.requestScript"
                     :options="codemirrorOption"
                     class="code"
                   />
-                  <div
-                    class="bs-codemirror-bottom-text"
-                  >
+                  <div class="bs-codemirror-bottom-text">
                     <strong>请求脚本设置规则: 请求脚本已经内置参数req,可参考下面的示例进行配置:
-                      <br> 如修改请求地址中对应参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red;">req.url.age=17</span>
-                      <br> 如修改请求头中对应参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red;">req.headers.name='tom'</span>
-                      <br> 如修改请求参数中对应参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red;">req.params.age=17</span>
-                      <br> 如修改请求体中对应参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red;">req.data='{"name":"223"}'</span>
+                      <br> 如修改请求地址中对应参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span
+                        style="color: red;"
+                      >req.url.age=17</span>
+                      <br> 如修改请求头中对应参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span
+                        style="color: red;"
+                      >req.headers.name='tom'</span>
+                      <br> 如修改请求参数中对应参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span
+                        style="color: red;"
+                      >req.params.age=17</span>
+                      <br> 如修改请求体中对应参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span
+                        style="color: red;"
+                      >req.data='{"name":"223"}'</span>
                     </strong>
                   </div>
                 </el-form-item>
@@ -435,7 +445,7 @@
                   label-width="0px"
                 >
                   <codemirror
-                    v-if="activeName==='respScript'"
+                    v-if="activeName === 'respScript'"
                     v-model.trim="dataForm.config.responseScript"
                     :options="codemirrorOption"
                     class="code"
@@ -444,7 +454,8 @@
                     v-if="dataForm.config.requestType === 'frontend'"
                     class="bs-codemirror-bottom-text"
                   >
-                    <strong>响应脚本设置规则: 接口返回数据已经内置到参数resp中,可直接使用,但是必须要返回设置后的数据。<br> 例如:<span style="color: red;">return resp.data</span>
+                    <strong>响应脚本设置规则: 接口返回数据已经内置到参数resp中,可直接使用,但是必须要返回设置后的数据。<br> 例如:<span style="color: red;">return
+                      resp.data</span>
                     </strong>
                   </div>
                   <div
@@ -503,9 +514,9 @@
                   @click="openParamsSetDialog(false)"
                 >
                   <span>{{ param.name }}</span>&nbsp;<span
-                  v-show="param.remark"
-                  style="color: #909399;"
-                >
+                    v-show="param.remark"
+                    style="color: #909399;"
+                  >
                     ({{ param.remark }})
                   </span>
                   <el-button
@@ -530,9 +541,7 @@
                   配置
                 </el-button>
               </div>
-              <div
-                class="field-wrap bs-field-wrap bs-scrollbar"
-              >
+              <div class="field-wrap bs-field-wrap bs-scrollbar">
                 <div
                   v-for="(field, key) in outputFieldList"
                   :key="key"
@@ -597,9 +606,7 @@
         v-if="!isEdit"
         class="dataPreView"
       >
-        <el-tabs
-          v-model="activeName"
-        >
+        <el-tabs v-model="activeName">
           <el-tab-pane
             v-loading="tableLoading"
             label="数据预览"
@@ -804,6 +811,9 @@ export default {
           { required: true, message: '请输入数据集名称', trigger: 'blur' },
           { validator: validateName, trigger: 'blur' }
         ],
+        typeId: [
+          { required: true, message: '请选择分组', trigger: 'blur' }
+        ],
         'config.requestType': [
           { required: true, message: '请选择调用方式', trigger: 'change' }
         ],
@@ -1135,7 +1145,7 @@ export default {
           this.dataPreviewList = res && Array.isArray(res) ? res : [{ ...res }]
           // 获取数据后更新输出字段
           this.updateOoutputFieldList(this.dataPreviewList)
-          this.$message.success('解析并执行成功')
+          this.$message.success('脚本执行通过')
         }).catch((e) => {
           // 未成功获取数据时,清空数据预览和输出字段
           this.dataPreviewList = []
@@ -1153,7 +1163,7 @@ export default {
           this.dataPreviewList = res.data && Array.isArray(res.data) ? res.data : [{ ...res.data }]
           // 获取数据后更新输出字段
           this.updateOoutputFieldList(this.dataPreviewList)
-          this.$message.success('解析并执行成功')
+          this.$message.success('脚本执行通过')
         }).catch((e) => {
           // 未成功获取数据时,清空数据预览和输出字段
           this.dataPreviewList = []
@@ -1384,28 +1394,34 @@ export default {
 .tree-box {
   padding: 0;
 }
-.tabs-box{
+
+.tabs-box {
   margin-left: 45px;
 }
-.add-btn{
+
+.add-btn {
   width: 100%;
   text-align: center;
   border: 1px dashed #696A6E;
   color: #fff;
-  &:hover{
+
+  &:hover {
     cursor: pointer;
     border: 1px dashed var(--bs-el-color-primary);
     color: var(--bs-el-color-primary);
   }
 }
-.delete-btn{
+
+.delete-btn {
   color: rgb(228, 116, 112);
-  &:hover{
+
+  &:hover {
     cursor: pointer;
   }
 }
-.preview-table{
-  max-height: 300px!important;
+
+.preview-table {
+  max-height: 300px !important;
 }
 
 /*滚动条样式*/
@@ -1414,8 +1430,29 @@ export default {
   border-radius: 4px;
   height: 4px;
 }
+
 ::v-deep ::-webkit-scrollbar-thumb {
   background: #fff !important;
   border-radius: 10px;
 }
+::v-deep .el-input__inner{
+  width: 230px !important;
+}
+.bs-el-select{
+  width: 100% !important;
+}
+::v-deep .el-input__inner{
+  width: 100% !important;
+}
+.bs-el-input-url{
+  // ::v-deep .el-form-item__content{
+  //   width: calc(100%) !important;
+  // }
+  .bs-el-input-url{
+    width: 100% !important;
+  }
+  ::v-deep .el-input__inner{
+    width:100% !important;
+  }
+}
 </style>

+ 10 - 3
data-room-ui/packages/DataSetManagement/src/JsEditForm.vue

@@ -9,12 +9,12 @@
           <template slot="content">
             <div class="page-header">
               <div class="page-header-left">
-                {{ !isEdit ? 'JS数据集详情' : dataForm.id ? 'JS数据集编辑' : 'JS数据集新增' }}
+                {{ !isEdit ? 'JS数据集详情' : dataForm.id ? '编辑JS数据集' : '新增JS数据集' }}
               </div>
               <div class="page-header-right">
                 <el-button
                   class="bs-el-button-default"
-                  @click="openNewWindow('https://www.yuque.com/chuinixiongkou/bigscreen/groovy_dataset')"
+                  @click="openNewWindow('https://www.yuque.com/chuinixiongkou/bigscreen/kv26b7ytvvbq7twi')"
                 >
                   帮助
                 </el-button>
@@ -118,7 +118,7 @@
             <el-row :gutter="20">
               <el-col :span="12">
                 <el-form-item
-                  label="描述"
+                  label="备注"
                   prop="remark"
                 >
                   <el-input
@@ -933,4 +933,11 @@ export default {
 .tree-box {
   padding: 0;
 }
+
+.bs-el-select{
+  width: 100% !important;
+}
+::v-deep .el-input__inner{
+  width: 100% !important;
+}
 </style>

+ 10 - 3
data-room-ui/packages/DataSetManagement/src/JsonEditForm.vue

@@ -10,7 +10,7 @@
           <template slot="content">
             <div class="page-header">
               <div class="page-header-left">
-                {{ !isEdit ? 'JSON数据集详情' : dataForm.id ? 'JSON数据集编辑' : 'JSON数据集新增' }}
+                {{ !isEdit ? 'JSON数据集详情' : dataForm.id ? '编辑JSON数据集' : '新增JSON数据集' }}
               </div>
               <div class="page-header-right">
                 <el-button
@@ -119,7 +119,7 @@
             <el-row :gutter="20">
               <el-col :span="12">
                 <el-form-item
-                  label="描述"
+                  label="备注"
                   prop="remark"
                 >
                   <el-input
@@ -646,7 +646,7 @@ export default {
         this.buildFieldDesc()
       }
       if (this.passTest && !initAnalysis) {
-        this.$message.success('JSON解析通过')
+        this.$message.success('脚本执行通过')
       }
       this.structurePreviewListCopy = cloneDeep(this.structurePreviewList)
     },
@@ -843,4 +843,11 @@ export default {
   height: 100% !important;
   margin-bottom: 0 !important;
 }
+
+.bs-el-select{
+  width: 100% !important;
+}
+::v-deep .el-input__inner{
+  width: 100% !important;
+}
 </style>

+ 9 - 2
data-room-ui/packages/DataSetManagement/src/OriginalEditForm.vue

@@ -10,7 +10,7 @@
           <template slot="content">
             <div class="page-header">
               <div class="page-header-left">
-                {{ !isEdit ? '原始数据集详情' : dataForm.id ? '原始数据集编辑' : '原始数据集新增' }}
+                {{ !isEdit ? '原始数据集详情' : dataForm.id ? '编辑原始数据集' : '新增原始数据集' }}
               </div>
               <div class="page-header-right">
                 <el-button
@@ -229,9 +229,9 @@
                 >
                   <el-radio-group
                     v-model="dataForm.repeatStatus"
-                    @change="repeatStatusChange"
                     class="bs-el-radio-group"
                     :disabled="!isEdit"
+                    @change="repeatStatusChange"
                   >
                     <el-radio :label="1">
@@ -1104,4 +1104,11 @@ export default {
 ::v-deep .el-loading-spinner{
   top: 75%;
 }
+
+.bs-el-select{
+  width: 100% !important;
+}
+::v-deep .el-input__inner{
+  width: 100% !important;
+}
 </style>

+ 20 - 6
data-room-ui/packages/DataSetManagement/src/ScriptEditForm.vue

@@ -10,7 +10,7 @@
           <template slot="content">
             <div class="page-header">
               <div class="page-header-left">
-                {{ !isEdit ? '脚本数据集详情' : dataForm.id ? '脚本数据集编辑' : '脚本数据集新增' }}
+                {{ !isEdit ? '脚本数据集详情' : dataForm.id ? '编辑脚本数据集' : '新增脚本数据集' }}
               </div>
               <div class="page-header-right">
                 <el-button
@@ -119,7 +119,7 @@
             <el-row :gutter="20">
               <el-col :span="12">
                 <el-form-item
-                  label="描述"
+                  label="备注"
                   prop="remark"
                 >
                   <el-input
@@ -180,7 +180,14 @@
           >
             <div>
               <el-button-group>
-                <el-button plain type="primary" class="bs-el-button-default" @click="example('es')">ES案例</el-button>
+                <el-button
+                  plain
+                  type="primary"
+                  class="bs-el-button-default"
+                  @click="example('es')"
+                >
+                  ES案例
+                </el-button>
               </el-button-group>
               <div class="code-out">
                 <codemirror
@@ -978,14 +985,14 @@ return ElasticsearchDsService.query(host, port, username, password, path, dsl);
     /**
      * 获取脚本案例
      */
-    example(type) {
+    example (type) {
       this.exampleVisible = true
       this.currentExample = this.exampleList[type]
     },
-    useExample() {
+    useExample () {
       this.dataForm.script = this.currentExample
       this.exampleVisible = false
-    },
+    }
   }
 }
 </script>
@@ -1151,4 +1158,11 @@ return ElasticsearchDsService.query(host, port, username, password, path, dsl);
   height: 100% !important;
   margin-bottom: 0 !important;
 }
+
+.bs-el-select{
+  width: 100% !important;
+}
+::v-deep .el-input__inner{
+  width: 100% !important;
+}
 </style>

+ 15 - 5
data-room-ui/packages/DataSetManagement/src/StoredProcedureEditForm.vue

@@ -11,7 +11,7 @@
           <template slot="content">
             <div class="page-header">
               <div class="page-header-left">
-                {{ !isEdit ? '存储过程数据集详情' : dataForm.id ? '存储过程数据集编辑' : '存储过程数据集新增' }}
+                {{ !isEdit ? '存储过程数据集详情' : dataForm.id ? '编辑存储过程数据集' : '新增存储过程数据集' }}
               </div>
               <div class="page-header-right">
                 <el-button
@@ -120,7 +120,7 @@
             <el-row :gutter="20">
               <el-col :span="12">
                 <el-form-item
-                  label="描述"
+                  label="备注"
                   prop="remark"
                 >
                   <el-input
@@ -798,9 +798,13 @@ export default {
       for (let i = 0; i < this.sourceList.length; i++) {
         if (this.sourceList[i].id === v) {
           if (this.sourceList[i].sourceType === 'sqlserver') {
-            this.dataForm.sqlProcess = 'exec '
+            if (this.dataForm.sqlProcess === 'call ') {
+              this.dataForm.sqlProcess = 'exec '
+            }
           } else {
-            this.dataForm.sqlProcess = 'call '
+            if (this.dataForm.sqlProcess === 'exec ') {
+              this.dataForm.sqlProcess = 'call '
+            }
           }
         }
       }
@@ -1048,7 +1052,7 @@ export default {
           this.$message.warning('参数名称不可以与字段名相同!')
           this.passTest = false
         } else {
-          if (val) this.$message.success('运行成功')
+          if (val) this.$message.success('脚本执行通过')
           this.exception = ''
           this.msg = ''
           this.passTest = true
@@ -1222,4 +1226,10 @@ export default {
   height: 100% !important;
   margin-bottom: 0 !important;
 }
+.bs-el-select{
+  width: 100% !important;
+}
+::v-deep .el-input__inner{
+  width: 100% !important;
+}
 </style>

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

@@ -236,7 +236,7 @@ export default {
         this.$refs.categroyEditForm.dialogFormVisible = true
         this.$refs.categroyEditForm.init({ parentId: 0 }, true)
         this.$refs.categroyEditForm.radio = 0
-        this.$refs.categroyEditForm.title = '分组新增'
+        this.$refs.categroyEditForm.title = '新增分组'
       })
     },
     addDiyDom (treeId, treeNode) {
@@ -389,7 +389,7 @@ export default {
           this.$refs.categroyEditForm.type = 'dataset'
           this.$refs.categroyEditForm.dialogFormVisible = true
           this.$refs.categroyEditForm.init(this.rightClickForm.org, false)
-          this.$refs.categroyEditForm.title = '分组编辑'
+          this.$refs.categroyEditForm.title = '编辑分组'
         })
         return
       }
@@ -400,7 +400,7 @@ export default {
           this.$refs.categroyEditForm.dialogFormVisible = true
           this.$refs.categroyEditForm.init(this.rightClickForm.org, true, editType)
           this.$refs.categroyEditForm.radio = 0
-          this.$refs.categroyEditForm.title = '分组新增'
+          this.$refs.categroyEditForm.title = '新增分组'
         })
         return
       }
@@ -411,7 +411,7 @@ export default {
           this.$refs.categroyEditForm.dialogFormVisible = true
           this.$refs.categroyEditForm.init(this.rightClickForm.org, true, editType)
           this.$refs.categroyEditForm.radio = 1
-          this.$refs.categroyEditForm.title = '分组新增'
+          this.$refs.categroyEditForm.title = '新增分组'
         })
       }
     },

+ 1 - 0
data-room-ui/packages/DataSourceManagement/src/index.vue

@@ -13,6 +13,7 @@
             placeholder="请输入数据源名称"
             clearable
             maxlength="200"
+            @clear="searchData"
           />
         </el-form-item>
         <el-form-item class="filter-item">

+ 5 - 2
data-room-ui/packages/MapDataManagement/src/AddForm.vue

@@ -178,7 +178,7 @@ export default {
       return !this.isEmpty(this.mapForm.geoJson)
     },
     outRangeLabel() {
-      return `级别${this.mapForm.level}`;
+      return `级别${this.mapForm.level + 1}`;
     }
   },
   data () {
@@ -289,7 +289,10 @@ export default {
           geoJson: geoJson
         }).then(res => {
           this.mapFormVisible = false
-          this.$emit('refresh')
+          this.$emit('refresh', {
+            id: res,
+            parentId: this.mapForm.parentId
+          })
         })
       })
     },

+ 5 - 2
data-room-ui/packages/MapDataManagement/src/EditForm.vue

@@ -176,7 +176,7 @@ export default {
       return !this.isWhitespace(this.mapForm.geoJson) && this.mapForm.uploadedGeoJson === 0
     },
     outRangeLabel() {
-      return `级别${this.mapForm.level}`;
+      return `级别${this.mapForm.level + 1}`;
     }
   },
   data () {
@@ -286,7 +286,10 @@ export default {
           geoJson: geoJson
         }).then(res => {
           this.mapFormVisible = false
-          this.$emit('refresh')
+          this.$emit('refresh', {
+            id: this.mapForm.id,
+            parentId: this.mapForm.parentId
+          })
         })
       })
     },

+ 52 - 7
data-room-ui/packages/MapDataManagement/src/index.vue

@@ -144,11 +144,11 @@
     </div>
     <add-form
       ref="addForm"
-      @refresh="getDataList"
+      @refresh="refreshData"
     />
     <edit-form
       ref="editForm"
-      @refresh="getDataList"
+      @refresh="refreshData"
     />
     <el-dialog
       :close-on-click-modal="false"
@@ -195,7 +195,7 @@
 
 <script>
 import table from 'data-room-ui/js/utils/table.js'
-import {mapList, mapDelete, uploadGeoJson, mapCascadeDelete} from 'data-room-ui/js/utils/mapDataService'
+import {mapList, mapDelete, uploadGeoJson, mapCascadeDelete, mapInfo} from 'data-room-ui/js/utils/mapDataService'
 import AddForm from "./AddForm"
 import EditForm from "./EditForm"
 import vueJsonViewer from 'vue-json-viewer'
@@ -218,6 +218,7 @@ export default {
       searchLoading: false,
       geoJsonVisible: false,
       lazyResolveIds: [],
+      lazyResolveMap: new Map(),
       searchForm: {
         searchKey: '',
         level: null,
@@ -270,6 +271,7 @@ export default {
       })
     },
     getDataList() {
+      this.lazyResolveMap.clear()
       this.searchLoading = true
       this.loadingText = '正在加载地图数据...'
       mapList(this.searchForm).then(res => {
@@ -284,14 +286,47 @@ export default {
         this.$refs.table.store.states.treeData[this.lazyResolveIds[i]].expanded = false
       }
     },
+    /**
+     * 新增、删除、修改等操作成功后刷新数据,不改变展开状态
+     * @param cbObj
+     */
+    refreshData(cbObj) {
+      let parentId = cbObj.parentId
+      if (this.lazyResolveMap.get(parentId)) {
+        // 刷新父节点
+        const { data, treeNode, resolve } = this.lazyResolveMap.get(parentId)
+        // debugger
+        this.$set(this.$refs.table.store.states.lazyTreeNodeMap, parentId, [])
+        this.load(data, treeNode, resolve)
+        return
+      }
+      if (parentId === '0' || parentId === 0) {
+        // 刷新根节点
+        this.getDataList()
+        return
+      }
+      mapInfo(parentId).then((res) => {
+        parentId = res.parentId
+        if (this.lazyResolveMap.get(parentId)) {
+          // 刷新父节点的父节点
+          const { data, treeNode, resolve } = this.lazyResolveMap.get(parentId)
+          this.$set(this.$refs.table.store.states.lazyTreeNodeMap, parentId, [])
+          this.load(data, treeNode, resolve)
+        } else {
+          // 刷新根节点
+          this.getDataList()
+        }
+      })
+    },
     getMoreLevel(level) {
-      return '级别' + level
+      return '级别' + (level + 1)
     },
     addMap() {
       this.$refs.addForm.mapFormVisible = true
       this.$refs.addForm.init()
     },
     load(data, treeNode, resolve) {
+      this.lazyResolveMap.set(data.id, { data, treeNode, resolve })
       this.lazyResolveIds.push(data.id)
       mapList({
         parentId: data.id
@@ -314,7 +349,10 @@ export default {
               type: 'success',
               message: '删除成功'
             })
-            this.getDataList()
+            this.refreshData({
+              id: map.id,
+              parentId: map.parentId
+            })
           } else {
             this.deleteMapCascade(map)
           }
@@ -351,7 +389,10 @@ export default {
             type: 'success',
             message: '删除成功'
           })
-          this.getDataList()
+          this.refreshData({
+            id: map.id,
+            parentId: map.parentId
+          })
         }).catch(() => {
         })
       }).catch(() => {
@@ -414,7 +455,11 @@ export default {
           message: '上传成功'
         })
         this.geoJsonVisible = false
-        this.getDataList()
+        // 刷新
+        this.refreshData({
+          id: this.currentMap.id,
+          parentId: this.currentMap.parentId
+        })
       }).catch(err => {
         this.$message({
           type: 'error',

+ 2 - 2
data-room-ui/packages/RemoteComponents/remoteComponentsList.js

@@ -32,7 +32,7 @@ export function getRemoteComponents (comList) {
       title: config.title,
       icon: null,
       img: config.img,
-      border:{type:'',titleHeight:60,fontSize:16,isTitle:true,padding:[16,16,16,16]},
+      border: { type: '', titleHeight: 60, fontSize: 16, isTitle: true, padding: [16, 16, 16, 16] },
       className:
         'com.gccloud.dataroom.core.module.chart.components.RemoteComponentChart',
       w: 450,
@@ -64,7 +64,7 @@ export function getRemoteComponentConfig (code, name) {
     title: name,
     icon: null,
     img: null,
-    border:{type:'',titleHeight:60,fontSize:16,isTitle:true,padding:[16,16,16,16]},
+    border: { type: '', titleHeight: 60, fontSize: 16, isTitle: true, padding: [16, 16, 16, 16] },
     className:
       'com.gccloud.dataroom.core.module.chart.components.RemoteComponentChart',
     w: 450,

+ 1 - 2
data-room-ui/packages/Render/RenderCard.vue

@@ -17,7 +17,7 @@
     <div
       class="render-item-wrap"
       :style="
-      `height:calc(100% - ${(config.border&&config.title&&config.border.type&&config.border.type!='GcBorder11'&&config.border.isTitle)?config.border.titleHeight:0}px);
+        `height:calc(100% - ${(config.border&&config.title&&config.border.type&&config.border.type!='GcBorder11'&&config.border.isTitle)?config.border.titleHeight:0}px);
       padding-top:${config.border?config.border.padding[0]:0}px;
       padding-right:${config.border?config.border.padding[1]:0}px;
       padding-bottom:${config.border?config.border.padding[2]:0}px;
@@ -45,7 +45,6 @@ import CustomComponent from '../PlotRender/index.vue'
 import EchartsComponent from '../EchartsRender/index.vue'
 import Svgs from '../Svgs/index.vue'
 import RemoteComponent from 'data-room-ui/RemoteComponents/index.vue'
-import cloneDeep from 'lodash/cloneDeep'
 const components = {}
 for (const key in pcComponent) {
   if (Object.hasOwnProperty.call(pcComponent, key)) {

+ 2 - 2
data-room-ui/packages/Render/index.vue

@@ -82,8 +82,8 @@ import RenderCard from './RenderCard.vue'
 import Configuration from './Configuration.vue'
 // import _ from 'lodash'
 import cloneDeep from 'lodash/cloneDeep'
-import vdr from 'vue-draggable-resizable-gorkys'
-import 'vue-draggable-resizable-gorkys/dist/VueDraggableResizable.css'
+import vdr from 'gc-vue-draggable-resizable'
+import 'gc-vue-draggable-resizable/dist/VueDraggableResizable.css'
 import { randomString } from '../js/utils'
 import { compile } from 'tiny-sass-compiler/dist/tiny-sass-compiler.esm-browser.prod.js'
 import plotList, { getCustomPlots } from '../G2Plots/plotList'

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

@@ -62,11 +62,11 @@
       @click="catalogAdd"
     >
       <i class="el-icon-plus" />
-      <div>新分组</div>
+      <div>新分组</div>
     </div>
     <!-- 新增或编辑目录弹窗 -->
     <el-dialog
-      :title="currentCatalog.code ? '编辑分组' : '新分组'"
+      :title="currentCatalog.code ? '编辑分组' : '新分组'"
       :visible.sync="catalogVisible"
       custom-class="bs-el-dialog"
       width="30%"
@@ -175,7 +175,7 @@ export default {
         // 选中目录
         name: '',
         id: '',
-        code: '',
+        code: ''
       },
       formRules: {
         name: [

+ 2 - 0
data-room-ui/packages/assets/style/bsTheme.scss

@@ -16,6 +16,7 @@
 // input
 .bs-el-input {
   .el-input__inner {
+    font-family:-apple-system, BlinkMacSystemFont, segoe ui, Roboto, helvetica neue, Arial, noto sans, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji;
     border: none !important;
     color: var(--bs-el-text) !important;
     background: var(--bs-background-1) !important;
@@ -23,6 +24,7 @@
   }
 
   .el-textarea__inner {
+    font-family:-apple-system, BlinkMacSystemFont, segoe ui, Roboto, helvetica neue, Arial, noto sans, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji;
     color: var(--bs-el-text) !important;
     background: var(--bs-el-background-1) !important;
     border-color: var(--bs-el-border) !important;

+ 8 - 8
data-room-ui/packages/js/utils/getComponentConfig.js

@@ -182,8 +182,8 @@ export default function getComponentConfig (type) {
         title: '输入框',
         icon: Icon.getNameList()[13],
         className: 'com.gccloud.dataroom.core.module.chart.components.ScreenInputChart',
-        w: 180,
-        h: 40,
+        w: 450,
+        h: 60,
         x: 0,
         y: 0,
         type
@@ -255,8 +255,8 @@ export default function getComponentConfig (type) {
         title: '选择器',
         icon: Icon.getNameList()[21],
         className: 'com.gccloud.dataroom.core.module.chart.components.ScreenSelectChart',
-        w: 180,
-        h: 80,
+        w: 450,
+        h: 60,
         x: 0,
         y: 0,
         type
@@ -267,8 +267,8 @@ export default function getComponentConfig (type) {
         title: '时间选择器',
         icon: Icon.getNameList()[22],
         className: 'com.gccloud.dataroom.core.module.chart.components.ScreenTimePickerChart',
-        w: 180,
-        h: 80,
+        w: 200,
+        h: 60,
         x: 0,
         y: 0,
         type
@@ -279,8 +279,8 @@ export default function getComponentConfig (type) {
         title: '日期时间选择器',
         icon: Icon.getNameList()[23],
         className: 'com.gccloud.dataroom.core.module.chart.components.ScreenDateTimePickerChart',
-        w: 260,
-        h: 80,
+        w: 500,
+        h: 60,
         x: 0,
         y: 0,
         type

+ 8 - 1
data-room-ui/packages/js/utils/mapDataService.js

@@ -66,6 +66,12 @@ const repeatCheck = (params = {}, flag = false) => Vue.prototype.$dataRoomAxios.
  */
 const nameRepeatCheck = (params = {}, flag = false) => Vue.prototype.$dataRoomAxios.post('/bigScreen/map/repeat/name', params, flag)
 
+/**
+ * 根据父编码解析父级json中的子级
+ * @param id
+ */
+const mapInfo = (id = '-1') => Vue.prototype.$dataRoomAxios.get(`/bigScreen/map/info/${id}`)
+
 export {
   mapList,
   mapAdd,
@@ -75,5 +81,6 @@ export {
   getMapChildFromGeoJson,
   uploadGeoJson,
   repeatCheck,
-  nameRepeatCheck
+  nameRepeatCheck,
+  mapInfo
 }