diff --git a/core/core-backend/src/main/java/io/gisbi/application/appcode/controller/ProjectExportController.java b/core/core-backend/src/main/java/io/gisbi/application/appcode/controller/ProjectExportController.java index 52b881f..b26ec4b 100644 --- a/core/core-backend/src/main/java/io/gisbi/application/appcode/controller/ProjectExportController.java +++ b/core/core-backend/src/main/java/io/gisbi/application/appcode/controller/ProjectExportController.java @@ -15,6 +15,9 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.nodes.Node; +import org.yaml.snakeyaml.nodes.Tag; +import org.yaml.snakeyaml.representer.Representer; import java.io.*; import java.nio.file.Files; @@ -146,8 +149,8 @@ public class ProjectExportController { if (spring.containsKey("datasource")) { Map datasource = (Map) spring.get("datasource"); datasource.put("url", "jdbc:mysql://localhost:3306/newdb"); - datasource.put("username", "root"); - datasource.put("password", "123456"); + datasource.put("username", "roor"); + datasource.put("password", "sadfa123456"); } } @@ -163,13 +166,18 @@ public class ProjectExportController { // 写回 YAML 文件 DumperOptions options = new DumperOptions(); options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - // 美化输出格式 - options.setPrettyFlow(true); // 缩进两个空格 options.setIndent(2); - +// 将String类型转换为PLAIN样式 +// Representer representer = new Representer(options) { +// @Override +// protected Node representScalar(Tag tag, String value, DumperOptions.ScalarStyle style) { +// // 使用 PLAIN 样式(无引号) +// return super.representScalar(tag, value, DumperOptions.ScalarStyle.PLAIN); +// } +// }; +// Yaml newYaml = new Yaml(representer,options); Yaml newYaml = new Yaml(options); - try (Writer writer = new FileWriter(configPath)) { newYaml.dump(root, writer); } diff --git a/core/core-backend/src/main/java/io/gisbi/application/appcode/service/DatabaseService.java b/core/core-backend/src/main/java/io/gisbi/application/appcode/service/DatabaseService.java index 9246ce8..8ee88a4 100644 --- a/core/core-backend/src/main/java/io/gisbi/application/appcode/service/DatabaseService.java +++ b/core/core-backend/src/main/java/io/gisbi/application/appcode/service/DatabaseService.java @@ -46,16 +46,19 @@ public class DatabaseService { // 1. 获取所有要导出的表名 List tables = Arrays.asList("app_application", "app_dictionary", "app_menu", "app_module", - "app_organization", "app_role", "app_role_menu", "app_role_users", "app_user", "area", + "app_optlog", "app_organization", "app_role", "app_role_menu", "app_role_users", "app_user", "area", "core_chart_view", "core_dataset_group", "core_dataset_table", "core_dataset_table_field", - "core_datasource", "core_de_engine", "core_driver", "data_visualization_info", - "visualization_background", "visualization_background_image", "visualization_link_jump", - "visualization_link_jump_info", "visualization_link_jump_target_view_info", "visualization_linkage", - "visualization_linkage_field", "visualization_outer_params", "visualization_outer_params_info", + "core_datasource", "core_de_engine", "core_driver", "core_sys_setting", "data_visualization_info", + "snapshot_core_chart_view", "snapshot_visualization_link_jump", "snapshot_visualization_link_jump_info", + "snapshot_visualization_link_jump_target_view_info", "snapshot_visualization_linkage", + "snapshot_visualization_linkage_field", "snapshot_visualization_outer_params_info", + "snapshot_visualization_outer_params_target_view_info", "visualization_background", + "visualization_background_image", "visualization_link_jump", "visualization_link_jump_info", + "visualization_link_jump_target_view_info", "visualization_linkage", "visualization_linkage_field", + "visualization_outer_params", "visualization_outer_params_info", "visualization_outer_params_target_view_info", "visualization_subject"); for (String table : tables) { - // 2. 获取建表语句 String createSql = getCreateTableSql(table); if ("app_application".equals(table)) { @@ -103,7 +106,7 @@ public class DatabaseService { // 3. 获取数据插入语句 List insertSqls = getInsertSqls(table, conditions); result.add(new TableData(table, createSql, insertSqls)); - } else if ("core_chart_view".equals(table)) { + } else if ("core_chart_view".equals(table) || "snapshot_core_chart_view".equals(table)) { List dataVisualizationInfos = dataVisualizationInfoMapper.selectList(new LambdaQueryWrapper().eq(DataVisualizationInfo::getAppId, id).select(DataVisualizationInfo::getId)); @@ -120,7 +123,7 @@ public class DatabaseService { // 3. 获取数据插入语句 List insertSqls = getInsertSqls(table, conditions); result.add(new TableData(table, createSql, insertSqls)); - } else if ("visualization_link_jump".equals(table)) { + } else if ("visualization_link_jump".equals(table) || "snapshot_visualization_link_jump".equals(table)) { List dataVisualizationInfos = dataVisualizationInfoMapper.selectList(new LambdaQueryWrapper().eq(DataVisualizationInfo::getAppId, id).select(DataVisualizationInfo::getId)); @@ -138,7 +141,7 @@ public class DatabaseService { List insertSqls = getInsertSqls(table, conditions); result.add(new TableData(table, createSql, insertSqls)); - } else if ("visualization_link_jump_info".equals(table)) { + } else if ("visualization_link_jump_info".equals(table) || "snapshot_visualization_link_jump_info".equals(table)) { List ids = visualizationLinkJumpMapper.selectLinkJumpIds(id); List conditions = new ArrayList<>(); if (!ids.isEmpty()) { @@ -151,7 +154,8 @@ public class DatabaseService { // 3. 获取数据插入语句 List insertSqls = getInsertSqls(table, conditions); result.add(new TableData(table, createSql, insertSqls)); - } else if ("visualization_link_jump_target_view_info".equals(table)) { + } else if ("visualization_link_jump_target_view_info".equals(table) || + "snapshot_visualization_link_jump_target_view_info".equals(table)) { List dvInfoIds = visualizationLinkJumpInfoMapper.selectInfoIds(id); List conditions = new ArrayList<>(); if (!dvInfoIds.isEmpty()) { @@ -164,7 +168,7 @@ public class DatabaseService { // 3. 获取数据插入语句 List insertSqls = getInsertSqls(table, conditions); result.add(new TableData(table, createSql, insertSqls)); - }else if ("visualization_linkage".equals(table)) { + } else if ("visualization_linkage".equals(table)) { List viewIds = coreChartViewMapper.selectChatViewIds(id); List conditions = new ArrayList<>(); if (!viewIds.isEmpty()) { @@ -177,7 +181,7 @@ public class DatabaseService { // 3. 获取数据插入语句 List insertSqls = getInsertSqls(table, conditions); result.add(new TableData(table, createSql, insertSqls)); - }else if ("visualization_linkage_field".equals(table)) { + } else if ("visualization_linkage_field".equals(table)) { List linkageIds = visualizationLinkageMapper.selectLinkageIds(id); List conditions = new ArrayList<>(); if (!linkageIds.isEmpty()) { @@ -190,7 +194,7 @@ public class DatabaseService { // 3. 获取数据插入语句 List insertSqls = getInsertSqls(table, conditions); result.add(new TableData(table, createSql, insertSqls)); - }else if ("visualization_outer_params".equals(table)) { + } else if ("visualization_outer_params".equals(table) || "snapshot_visualization_outer_params".equals(table)) { List dataVisualizationInfos = dataVisualizationInfoMapper.selectList(new LambdaQueryWrapper().eq(DataVisualizationInfo::getAppId, id).select(DataVisualizationInfo::getId)); List conditions = new ArrayList<>(); @@ -206,7 +210,7 @@ public class DatabaseService { // 3. 获取数据插入语句 List insertSqls = getInsertSqls(table, conditions); result.add(new TableData(table, createSql, insertSqls)); - }else if ("visualization_outer_params_info".equals(table)) { + } else if ("visualization_outer_params_info".equals(table) || "snapshot_visualization_outer_params_info".equals(table)) { List outerParamIds = visualizationOuterParamsMapper.selectOuterParamIds(id); List conditions = new ArrayList<>(); if (!outerParamIds.isEmpty()) { @@ -219,7 +223,8 @@ public class DatabaseService { // 3. 获取数据插入语句 List insertSqls = getInsertSqls(table, conditions); result.add(new TableData(table, createSql, insertSqls)); - }else if ("visualization_outer_params_target_view_info".equals(table)) { + } else if ("visualization_outer_params_target_view_info".equals(table) || + "snapshot_visualization_outer_params_target_view_info".equals(table)) { List paramsInfoIds = visualizationOuterParamsInfoMapper.selectParamsInfoIds(id); List conditions = new ArrayList<>(); if (!paramsInfoIds.isEmpty()) { diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/MenuServiceImpl.java b/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/MenuServiceImpl.java index b0d8857..0d6b9e8 100644 --- a/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/MenuServiceImpl.java +++ b/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/MenuServiceImpl.java @@ -225,7 +225,7 @@ public class MenuServiceImpl extends ServiceImpl implements IM String parentId = currentMenu.getParentid(); QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("parentid", parentId); + wrapper.eq("parentid", parentId).eq("app_id",currentMenu.getAppId()); wrapper.orderByAsc("orderno"); List siblings = menuMapper.selectList(wrapper); @@ -267,7 +267,7 @@ public class MenuServiceImpl extends ServiceImpl implements IM // 获取新父级下的最大序号 QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("parentid", targetParentId); + wrapper.eq("parentid", targetParentId).eq("app_id",menu.getAppId()); wrapper.select("orderno","code"); wrapper.orderByDesc("orderno"); List list = menuMapper.selectList(wrapper); diff --git a/core/core-backend/src/main/java/io/gisbi/visualization/server/FileType.java b/core/core-backend/src/main/java/io/gisbi/visualization/server/FileType.java index 6a0b366..8cadd1c 100644 --- a/core/core-backend/src/main/java/io/gisbi/visualization/server/FileType.java +++ b/core/core-backend/src/main/java/io/gisbi/visualization/server/FileType.java @@ -15,7 +15,12 @@ public enum FileType { /** * GIF */ - GIF("47494638", "gif"); + GIF("47494638", "gif"), + + /** + * GLB (Binary GLTF) + */ + GLB("676C5446", "glb"); private String value = ""; private String ext = ""; @@ -37,4 +42,4 @@ public enum FileType { return value; } -} \ No newline at end of file +} diff --git a/core/core-backend/src/main/resources/application-standalone.yml b/core/core-backend/src/main/resources/application-standalone.yml index 076b356..491ee21 100644 --- a/core/core-backend/src/main/resources/application-standalone.yml +++ b/core/core-backend/src/main/resources/application-standalone.yml @@ -1,8 +1,9 @@ spring: datasource: - url: jdbc:mysql://121.37.111.42:3306/dataease?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true +# url: jdbc:mysql://121.37.111.42:3306/dataease?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true + url: jdbc:mysql://192.168.1.58:3306/dataease?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true username: root - password: mysql_F8ysiK@2024 + password: 123456 #mysql_F8ysiK@2024 messages: basename: i18n/lic,i18n/core,i18n/permissions,i18n/xpack,i18n/sync flyway: @@ -12,7 +13,11 @@ spring: locations: classpath:db/migration baseline-on-migrate: true out-of-order: true - + servlet: + multipart: + enabled: true + max-file-size: 50MB # 单个文件最大 + max-request-size: 100MB # 每次请求总文件最大 mybatis-plus: mapper-locations: classpath:mybatis/*.xml diff --git a/core/core-frontend/config/dev.ts b/core/core-frontend/config/dev.ts index 4fe7742..6bb8c2c 100644 --- a/core/core-frontend/config/dev.ts +++ b/core/core-frontend/config/dev.ts @@ -2,13 +2,13 @@ export default { server: { proxy: { '/api/f': { - target: 'http://192.168.1.58:8100', + target: 'http://192.168.1.20:8100', changeOrigin: true, rewrite: path => path.replace(/^\/api\/f/, 'de2api') }, // 使用 proxy 实例 '/api': { - target: 'http://192.168.1.58:8100', + target: 'http://192.168.1.20:8100', changeOrigin: true, rewrite: path => path.replace(/^\/api/, 'de2api') } diff --git a/core/core-frontend/src/components/data-visualization/canvas/Shape.vue b/core/core-frontend/src/components/data-visualization/canvas/Shape.vue index 750bb22..26ade8f 100644 --- a/core/core-frontend/src/components/data-visualization/canvas/Shape.vue +++ b/core/core-frontend/src/components/data-visualization/canvas/Shape.vue @@ -386,7 +386,8 @@ const boardMoveActive = computed(() => { 'symbolic-map', 'heat-map', 't-heatmap', - 'circle-packing' + 'circle-packing', + 'three-map' ] return element.value.isPlugin || CHARTS.includes(element.value.innerType) }) diff --git a/core/core-frontend/src/components/three-display/index.vue b/core/core-frontend/src/components/three-display/index.vue new file mode 100644 index 0000000..8539e24 --- /dev/null +++ b/core/core-frontend/src/components/three-display/index.vue @@ -0,0 +1,273 @@ + + + + + \ No newline at end of file diff --git a/core/core-frontend/src/components/visualization/SettingMenu.vue b/core/core-frontend/src/components/visualization/SettingMenu.vue index 33c51bd..9138e07 100644 --- a/core/core-frontend/src/components/visualization/SettingMenu.vue +++ b/core/core-frontend/src/components/visualization/SettingMenu.vue @@ -176,7 +176,8 @@ const state = reactive({ 'word-cloud', 'flow-map', 'bidirectional-bar', - 'symbolic-map' + 'symbolic-map', + 'three-map' ], linkageExcludeViewType: [ 'richTextView', @@ -187,7 +188,8 @@ const state = reactive({ 'word-cloud', 'flow-map', 'bidirectional-bar', - 'symbolic-map' + 'symbolic-map', + 'three-map' ], copyData: null, hyperlinksSetVisible: false, diff --git a/core/core-frontend/src/components/visualization/UserViewEnlarge.vue b/core/core-frontend/src/components/visualization/UserViewEnlarge.vue index 3a3ac3f..3020ec6 100644 --- a/core/core-frontend/src/components/visualization/UserViewEnlarge.vue +++ b/core/core-frontend/src/components/visualization/UserViewEnlarge.vue @@ -422,7 +422,7 @@ const openMessageLoading = cb => { }) } // 地图 -const mapChartTypes = ['bubble-map', 'flow-map', 'heat-map', 'map', 'symbolic-map'] +const mapChartTypes = ['bubble-map', 'flow-map', 'heat-map', 'map', 'symbolic-map','three-map'] const htmlToImage = () => { downLoading.value = mapChartTypes.includes(viewInfo.value.type) ? false : true useEmitt().emitter.emit('renderChart-' + viewInfo.value.id) diff --git a/core/core-frontend/src/components/visualization/ViewTrackBar.vue b/core/core-frontend/src/components/visualization/ViewTrackBar.vue index 3d1d5ce..1f4031c 100644 --- a/core/core-frontend/src/components/visualization/ViewTrackBar.vue +++ b/core/core-frontend/src/components/visualization/ViewTrackBar.vue @@ -1,26 +1,12 @@