diff --git a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java index f575012f4c..20b92d03e0 100644 --- a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java +++ b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java @@ -211,7 +211,7 @@ public class DatasetDataManage { } public Long getDatasetTotal(Long datasetGroupId) throws Exception { - DatasetGroupInfoDTO dto = datasetGroupManage.get(datasetGroupId, null); + DatasetGroupInfoDTO dto = datasetGroupManage.getForCount(datasetGroupId); if (StringUtils.equalsIgnoreCase(dto.getNodeType(), "dataset")) { return getDatasetTotal(dto); } diff --git a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetGroupManage.java b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetGroupManage.java index ae5d7e6628..eb8906f0aa 100644 --- a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetGroupManage.java +++ b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetGroupManage.java @@ -346,6 +346,30 @@ public class DatasetGroupManage { } } + public DatasetGroupInfoDTO getForCount(Long id) throws Exception { + CoreDatasetGroup coreDatasetGroup = coreDatasetGroupMapper.selectById(id); + if (coreDatasetGroup == null) { + return null; + } + DatasetGroupInfoDTO dto = new DatasetGroupInfoDTO(); + BeanUtils.copyBean(dto, coreDatasetGroup); + if (StringUtils.equalsIgnoreCase(dto.getNodeType(), "dataset")) { + dto.setUnion(JsonUtil.parseList(coreDatasetGroup.getInfo(), new TypeReference<>() { + })); + // 获取field + List dsFields = datasetTableFieldManage.selectByDatasetGroupId(id); + List allFields = dsFields.stream().map(ele -> { + DatasetTableFieldDTO datasetTableFieldDTO = new DatasetTableFieldDTO(); + BeanUtils.copyBean(datasetTableFieldDTO, ele); + datasetTableFieldDTO.setFieldShortName(ele.getDataeaseName()); + return datasetTableFieldDTO; + }).collect(Collectors.toList()); + + dto.setAllFields(allFields); + } + return dto; + } + public DatasetGroupInfoDTO get(Long id, String type) throws Exception { CoreDatasetGroup coreDatasetGroup = coreDatasetGroupMapper.selectById(id); if (coreDatasetGroup == null) { diff --git a/core/core-backend/src/main/java/io/dataease/menu/manage/MenuManage.java b/core/core-backend/src/main/java/io/dataease/menu/manage/MenuManage.java index 7081cead3c..87f7a08b88 100644 --- a/core/core-backend/src/main/java/io/dataease/menu/manage/MenuManage.java +++ b/core/core-backend/src/main/java/io/dataease/menu/manage/MenuManage.java @@ -11,7 +11,6 @@ import io.dataease.menu.dao.auto.mapper.CoreMenuMapper; import io.dataease.utils.BeanUtils; import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; -import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Component; import java.util.ArrayList; @@ -19,8 +18,6 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import static io.dataease.constant.CacheConstant.OrgCacheConstant.CORE_MENU_CACHE; - @Component public class MenuManage { @@ -39,7 +36,7 @@ public class MenuManage { return convertTree(treeNodes); } -// @Cacheable(cacheNames = CORE_MENU_CACHE, key = "'-dataease-'") + // @Cacheable(cacheNames = CORE_MENU_CACHE, key = "'-dataease-'") public List coreMenus() { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.orderByAsc("menu_sort"); @@ -67,7 +64,7 @@ public class MenuManage { if (CollectionUtil.isNotEmpty(children = menuTreeNode.getChildren())) { vo.setChildren(convertTree(children)); } - if (CollectionUtil.isNotEmpty(children) || menuTreeNode.getType() != 1) { + if (CollectionUtil.isNotEmpty(vo.getChildren()) || menuTreeNode.getType() != 1) { result.add(vo); } } @@ -91,6 +88,14 @@ public class MenuManage { } private boolean isXpackMenu(CoreMenu coreMenu) { - return coreMenu.getId().equals(7L) || coreMenu.getPid().equals(7L) || coreMenu.getId().equals(14L) || coreMenu.getId().equals(17L) || coreMenu.getId().equals(18L); + return coreMenu.getId().equals(7L) + || coreMenu.getPid().equals(7L) + || coreMenu.getId().equals(14L) + || coreMenu.getId().equals(17L) + || coreMenu.getId().equals(18L) + || coreMenu.getId().equals(21L) + || coreMenu.getPid().equals(21L) + || coreMenu.getId().equals(25L) + || coreMenu.getId().equals(26L); } } diff --git a/core/core-backend/src/main/java/io/dataease/system/manage/SysParameterManage.java b/core/core-backend/src/main/java/io/dataease/system/manage/SysParameterManage.java index 48bbbada2f..29198b5241 100644 --- a/core/core-backend/src/main/java/io/dataease/system/manage/SysParameterManage.java +++ b/core/core-backend/src/main/java/io/dataease/system/manage/SysParameterManage.java @@ -64,7 +64,7 @@ public class SysParameterManage { public Map groupVal(String groupKey) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.likeLeft("pkey", groupKey); + queryWrapper.like("pkey", groupKey); List sysSettings = coreSysSettingMapper.selectList(queryWrapper); if (!CollectionUtils.isEmpty(sysSettings)) { return sysSettings.stream().collect(Collectors.toMap(CoreSysSetting::getPkey, CoreSysSetting::getPval)); diff --git a/core/core-backend/src/main/java/io/dataease/template/manage/TemplateMarketManage.java b/core/core-backend/src/main/java/io/dataease/template/manage/TemplateMarketManage.java index e780399556..4acc7b8c34 100644 --- a/core/core-backend/src/main/java/io/dataease/template/manage/TemplateMarketManage.java +++ b/core/core-backend/src/main/java/io/dataease/template/manage/TemplateMarketManage.java @@ -1,10 +1,10 @@ package io.dataease.template.manage; -import com.fasterxml.jackson.core.type.TypeReference; import io.dataease.api.template.dto.TemplateManageFileDTO; import io.dataease.api.template.dto.TemplateMarketDTO; -import io.dataease.api.template.request.TemplateMarketSearchRequest; -import io.dataease.api.template.response.MarketBaseResponse; +import io.dataease.api.template.response.*; +import io.dataease.api.template.vo.MarketApplicationSpecVO; +import io.dataease.api.template.vo.MarketMetaDataVO; import io.dataease.api.template.vo.TemplateCategoryVO; import io.dataease.exception.DEException; import io.dataease.system.manage.SysParameterManage; @@ -16,6 +16,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Map; @@ -28,8 +29,12 @@ import java.util.stream.Collectors; public class TemplateMarketManage { private final static String POSTS_API = "/api/content/posts?page=0&size=2000"; + + private final static String POSTS_API_V2 = "/apis/api.store.halo.run/v1alpha1/applications?keyword=&priceMode=&sort=latestReleaseTimestamp%2Cdesc&type=THEME&deVersion=V2&templateType=&label=&page=1&size=2000"; private final static String CATEGORIES_API = "/api/content/categories"; + private final static String TEMPLATE_META_DATA_URL = "/upload/meta_data.json"; + @Resource private SysParameterManage sysParameterManage; @@ -41,7 +46,7 @@ public class TemplateMarketManage { if (StringUtils.isNotEmpty(templateUrl)) { String sufUrl = sysParameterManage.groupVal("template.").get("template.url"); String templateInfo = HttpClientUtil.get(sufUrl + templateUrl, null); - return JsonUtil.parseObject(templateInfo,TemplateManageFileDTO.class); + return JsonUtil.parseObject(templateInfo, TemplateManageFileDTO.class); } else { return null; } @@ -57,26 +62,46 @@ public class TemplateMarketManage { return HttpClientUtil.get(url, config); } - public MarketBaseResponse searchTemplate(TemplateMarketSearchRequest request) { + public MarketBaseResponse searchTemplate() { try { - Map templateParams = sysParameterManage.groupVal("template."); - String result = marketGet(templateParams.get("template.url") + POSTS_API, templateParams.get("template.accessKey")); - TypeReference> market = new TypeReference<>() { - }; - List postsResult = JsonUtil.parseList(result,market); - return new MarketBaseResponse(templateParams.get("template.url"), postsResult); + Map templateParams = sysParameterManage.groupVal("template."); + String result = marketGet(templateParams.get("template.url") + POSTS_API_V2, null); + MarketTemplateV2BaseResponse postsResult = JsonUtil.parseObject(result, MarketTemplateV2BaseResponse.class); + return baseResponseV2Trans(postsResult, templateParams.get("template.url")); } catch (Exception e) { DEException.throwException(e); } return null; } - public List getCategories() { - Map templateParams = sysParameterManage.groupVal("template."); + private MarketBaseResponse baseResponseV2Trans(MarketTemplateV2BaseResponse v2BaseResponse, String url) { + Map categoriesMap = getCategoriesBaseV2(); + List contents = new ArrayList<>(); + v2BaseResponse.getItems().stream().forEach(marketTemplateV2ItemResult -> { + MarketApplicationSpecVO spec = marketTemplateV2ItemResult.getApplication().getSpec(); + contents.add(new TemplateMarketDTO(spec.getReadmeName(), spec.getDisplayName(), spec.getScreenshots().get(0).getUrl(), spec.getLinks().get(0).getUrl(), categoriesMap.get(spec.getLabel()))); + }); + return new MarketBaseResponse(url, contents); + } + + public MarketBaseResponse searchTemplateV1() { + try { + Map templateParams = sysParameterManage.groupVal("template."); + String result = marketGet(templateParams.get("template.url") + POSTS_API, templateParams.get("template.accessKey")); + MarketTemplateBaseResponse postsResult = JsonUtil.parseObject(result, MarketTemplateBaseResponse.class); + MarketBaseResponse response = new MarketBaseResponse(templateParams.get("template.url"), postsResult.getData().getContent()); + return response; + } catch (Exception e) { + DEException.throwException(e); + } + return null; + } + + public List getCategoriesV1() { + Map templateParams = sysParameterManage.groupVal("template."); String resultStr = marketGet(templateParams.get("template.url") + CATEGORIES_API, templateParams.get("template.accessKey")); - TypeReference> market = new TypeReference<>() { - }; - List categories = JsonUtil.parseList(resultStr,market); + MarketCategoryBaseResponse categoryBaseResponse = JsonUtil.parseObject(resultStr, MarketCategoryBaseResponse.class); + List categories = categoryBaseResponse.getData(); if (CollectionUtils.isNotEmpty(categories)) { return categories.stream().filter(item -> !"应用系列".equals(item.getName())).sorted(Comparator.comparing(TemplateCategoryVO::getPriority)).map(TemplateCategoryVO::getName).collect(Collectors.toList()); } else { @@ -84,4 +109,23 @@ public class TemplateMarketManage { } } + + public List getCategories() { + return getCategoriesV2().stream().map(MarketMetaDataVO::getLabel) + .collect(Collectors.toList()); + } + + public Map getCategoriesBaseV2() { + Map categories = getCategoriesV2().stream() + .collect(Collectors.toMap(MarketMetaDataVO::getSlug, MarketMetaDataVO::getLabel)); + return categories; + } + + public List getCategoriesV2() { + Map templateParams = sysParameterManage.groupVal("template."); + String resultStr = marketGet(templateParams.get("template.url") + TEMPLATE_META_DATA_URL, null); + MarketMetaDataBaseResponse metaData = JsonUtil.parseObject(resultStr, MarketMetaDataBaseResponse.class); + List categories = metaData.getLabels(); + return categories; + } } diff --git a/core/core-backend/src/main/java/io/dataease/template/service/TemplateMarketService.java b/core/core-backend/src/main/java/io/dataease/template/service/TemplateMarketService.java new file mode 100644 index 0000000000..f390346e04 --- /dev/null +++ b/core/core-backend/src/main/java/io/dataease/template/service/TemplateMarketService.java @@ -0,0 +1,31 @@ +package io.dataease.template.service; + +import io.dataease.api.template.TemplateMarketApi; +import io.dataease.api.template.response.MarketBaseResponse; +import io.dataease.template.manage.TemplateMarketManage; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author : WangJiaHao + * @date : 2023/11/17 13:20 + */ +@RestController +@RequestMapping("/templateMarket") +public class TemplateMarketService implements TemplateMarketApi { + + @Resource + private TemplateMarketManage templateMarketManage; + @Override + public MarketBaseResponse searchTemplate() { + return templateMarketManage.searchTemplate(); + } + + @Override + public List categories() { + return templateMarketManage.getCategories(); + } +} diff --git a/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java b/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java index b64f6410a0..a4474aeb86 100644 --- a/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java +++ b/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java @@ -255,8 +255,8 @@ public class DataVisualizationServer implements DataVisualizationApi { templateData = templateFileInfo.getComponentData(); dynamicData = templateFileInfo.getDynamicData(); staticResource = templateFileInfo.getStaticResource(); - name = request.getName(); - dvType = request.getType(); + name = templateFileInfo.getName(); + dvType = templateFileInfo.getDvType(); } // 解析动态数据 Map dynamicDataMap = JsonUtil.parseObject(dynamicData, Map.class); diff --git a/core/core-backend/src/main/resources/application-standalone.yml b/core/core-backend/src/main/resources/application-standalone.yml index 87971ae75d..44c824b268 100644 --- a/core/core-backend/src/main/resources/application-standalone.yml +++ b/core/core-backend/src/main/resources/application-standalone.yml @@ -1,6 +1,6 @@ spring: datasource: - url: jdbc:mysql://localhost:3306/dataease?autoReconnect=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false + url: jdbc:mysql://localhost:3306/dataease?autoReconnect=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true username: root password: 123456 messages: diff --git a/core/core-backend/src/main/resources/i18n/core_zh_CN.properties b/core/core-backend/src/main/resources/i18n/core_zh_CN.properties index 0aa7d104fe..af0608789c 100644 --- a/core/core-backend/src/main/resources/i18n/core_zh_CN.properties +++ b/core/core-backend/src/main/resources/i18n/core_zh_CN.properties @@ -18,6 +18,12 @@ i18n_menu.datasource=\u6570\u636E\u6E90 i18n_menu.user=\u7528\u6237\u7BA1\u7406 i18n_menu.org=\u7EC4\u7EC7\u7BA1\u7406 i18n_menu.auth=\u6743\u9650\u914D\u7F6E +i18n_menu.sync=\u540C\u6B65\u7BA1\u7406 +i18n_menu.summary=\u6982\u89C8 +i18n_menu.ds=\u6570\u636E\u6E90\u7BA1\u7406 +i18n_menu.task=\u4EFB\u52A1\u7BA1\u7406 +i18n_menu.embedded=\u5D4C\u5165\u5F0F\u7BA1\u7406 +i18n_menu.platform=\u5E73\u53F0\u5BF9\u63A5 i18n_field_name_repeat=\u6709\u91CD\u590D\u5B57\u6BB5\u540D\uFF1A i18n_pid_not_eq_id=\u79FB\u52A8\u76EE\u6807\u4E0D\u80FD\u662F\u81EA\u5DF1\u6216\u5B50\u76EE\u5F55 i18n_ds_name_exists=\u8BE5\u5206\u7EC4\u4E0B\u540D\u79F0\u91CD\u590D diff --git a/core/core-frontend/src/api/templateMarket.ts b/core/core-frontend/src/api/templateMarket.ts new file mode 100644 index 0000000000..d68173a385 --- /dev/null +++ b/core/core-frontend/src/api/templateMarket.ts @@ -0,0 +1,13 @@ +import request from '@/config/axios' + +export function searchMarket() { + return request.get({ + url: '/templateMarket/search' + }) +} + +export function getCategories() { + return request.get({ + url: '/templateMarket/categories' + }) +} diff --git a/core/core-frontend/src/api/templateMarket/index.js b/core/core-frontend/src/api/templateMarket/index.js deleted file mode 100644 index 81d500c4fb..0000000000 --- a/core/core-frontend/src/api/templateMarket/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import request from '@/config/axios' - -export function searchMarket(data) { - return request.post({ - url: '/template/market/search', - data - }) -} - -export function getCategories() { - return request.post({ - url: '/template/market/categories' - }) -} diff --git a/core/core-frontend/src/assets/svg/dv-use-template.svg b/core/core-frontend/src/assets/svg/dv-use-template.svg new file mode 100644 index 0000000000..cae26306a8 --- /dev/null +++ b/core/core-frontend/src/assets/svg/dv-use-template.svg @@ -0,0 +1,3 @@ + + + diff --git a/core/core-frontend/src/assets/svg/embedded.svg b/core/core-frontend/src/assets/svg/embedded.svg new file mode 100644 index 0000000000..251744ab6e --- /dev/null +++ b/core/core-frontend/src/assets/svg/embedded.svg @@ -0,0 +1,4 @@ + + + + diff --git a/core/core-frontend/src/assets/svg/platform.svg b/core/core-frontend/src/assets/svg/platform.svg new file mode 100644 index 0000000000..5ebbc21ab9 --- /dev/null +++ b/core/core-frontend/src/assets/svg/platform.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/core/core-frontend/src/assets/svg/sync.svg b/core/core-frontend/src/assets/svg/sync.svg new file mode 100644 index 0000000000..ce1fb9cc4a --- /dev/null +++ b/core/core-frontend/src/assets/svg/sync.svg @@ -0,0 +1,3 @@ + + + diff --git a/core/core-frontend/src/components/data-visualization/ComponentToolBar.vue b/core/core-frontend/src/components/data-visualization/ComponentToolBar.vue index e2e8a46874..efe0566bfc 100644 --- a/core/core-frontend/src/components/data-visualization/ComponentToolBar.vue +++ b/core/core-frontend/src/components/data-visualization/ComponentToolBar.vue @@ -6,7 +6,7 @@ import { snapshotStoreWithOut } from '@/store/modules/data-visualization/snapsho import { changeSizeWithScale } from '@/utils/changeComponentsSizeWithScale' import { useEmitt } from '@/hooks/web/useEmitt' const dvMainStore = dvMainStoreWithOut() -const { canvasStyleData } = storeToRefs(dvMainStore) +const { canvasStyleData, editMode } = storeToRefs(dvMainStore) const snapshotStore = snapshotStoreWithOut() const scale = ref(60) @@ -42,6 +42,9 @@ const reposition = () => { let lastWheelNum = 0 const handleMouseWheel = e => { + if (editMode.value === 'preview') { + return + } let dvMain = document.getElementById('dv-main-center') let dvMainLeftSlide = document.getElementById('dv-main-left-sidebar') let areaLeftWidth = dvMainLeftSlide.clientWidth @@ -86,6 +89,7 @@ onUnmounted(() => { :min="10" :max="200" :controls="false" + @change="handleScaleChange()" class="scale-input-number" > diff --git a/core/core-frontend/src/components/visualization/LinkageSet.vue b/core/core-frontend/src/components/visualization/LinkageSet.vue index abd0040dc6..836f2cc9e5 100644 --- a/core/core-frontend/src/components/visualization/LinkageSet.vue +++ b/core/core-frontend/src/components/visualization/LinkageSet.vue @@ -101,7 +101,7 @@ style="width: 100%" > import { queryVisualizationJumpInfo } from '@/api/visualization/linkJump' -import { reactive, ref, nextTick, watch } from 'vue' +import { reactive, ref, nextTick, watch, computed } from 'vue' import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain' import { storeToRefs } from 'pinia' import { ElMessage } from 'element-plus-secondary' @@ -379,6 +379,22 @@ const linkageFieldAdaptor = async data => { } } } + +const sourceLinkageInfoFilter = computed(() => { + if (state.sourceLinkageInfo.targetViewFields) { + const curCheckAllAxisStr = + JSON.stringify(state.curLinkageViewInfo.xAxis) + + JSON.stringify(state.curLinkageViewInfo.xAxisExt) + + JSON.stringify(state.curLinkageViewInfo.yAxis) + + JSON.stringify(state.curLinkageViewInfo.yAxisExt) + return state.sourceLinkageInfo.targetViewFields.filter(item => + curCheckAllAxisStr.includes(item.id) + ) + } else { + return [] + } +}) + const targetViewCheckedChange = data => { nextTick(() => { linkageInfoTree.value.setCurrentKey(data.targetViewId) diff --git a/core/core-frontend/src/custom-component/rich-text/DeRichTextView.vue b/core/core-frontend/src/custom-component/rich-text/DeRichTextView.vue index 863bf1324d..e590d2f28a 100644 --- a/core/core-frontend/src/custom-component/rich-text/DeRichTextView.vue +++ b/core/core-frontend/src/custom-component/rich-text/DeRichTextView.vue @@ -335,7 +335,6 @@ const calcData = (view: Chart, callback) => { } const initCurFields = chartDetails => { - curFields.value = [] dataRowFiledName.value = [] dataRowSelect.value = {} dataRowNameSelect.value = {} @@ -347,10 +346,12 @@ const initCurFields = chartDetails => { JSON.stringify(chartDetails.yAxisExt) chartDetails.data.sourceFields.forEach(field => { if (checkAllAxisStr.indexOf(field.id) > -1) { - curFields.value.push(field) dataRowFiledName.value.push(`[${field.name}]`) } }) + if (checkAllAxisStr.indexOf('"记录数*"') > -1) { + dataRowFiledName.value.push(`[记录数*]`) + } // Get the corresponding relationship between id and value const nameIdMap = chartDetails.data.fields.reduce((pre, next) => { pre[next['dataeaseName']] = next['id'] diff --git a/core/core-frontend/src/locales/zh-CN.ts b/core/core-frontend/src/locales/zh-CN.ts index f9e2b9c626..56060dafd4 100644 --- a/core/core-frontend/src/locales/zh-CN.ts +++ b/core/core-frontend/src/locales/zh-CN.ts @@ -952,6 +952,7 @@ export default { field_can_not_empty: '字段不能为空', conditions_can_not_empty: '字段的条件不能为空,若无条件,请直接删除该字段', remark: '备注', + remark_placeholder: '备注限制50个字符', remark_show: '显示备注', remark_edit: '编辑备注', remark_bg_color: '背景填充', diff --git a/core/core-frontend/src/utils/RemoteJs.ts b/core/core-frontend/src/utils/RemoteJs.ts new file mode 100644 index 0000000000..289fca8935 --- /dev/null +++ b/core/core-frontend/src/utils/RemoteJs.ts @@ -0,0 +1,22 @@ +export const loadScript = (url: string, jsId?: string) => { + return new Promise(function (resolve, reject) { + const scriptId = jsId || 'de-fit2cloud-script-id' + let dom = document.getElementById(scriptId) + if (dom) { + dom.parentElement?.removeChild(dom) + dom = null + } + const script = document.createElement('script') + + script.id = scriptId + script.onload = function () { + return resolve(null) + } + script.onerror = function () { + return reject(new Error('Load script from '.concat(url, ' failed'))) + } + script.src = url + const head = document.head || document.getElementsByTagName('head')[0] + ;(document.body || head).appendChild(script) + }) +} diff --git a/core/core-frontend/src/views/chart/components/editor/editor-senior/Senior.vue b/core/core-frontend/src/views/chart/components/editor/editor-senior/Senior.vue index 2a3bf7f9c1..68f8f8b4f1 100644 --- a/core/core-frontend/src/views/chart/components/editor/editor-senior/Senior.vue +++ b/core/core-frontend/src/views/chart/components/editor/editor-senior/Senior.vue @@ -18,9 +18,8 @@ import { storeToRefs } from 'pinia' import { BASE_VIEW_CONFIG } from '../util/chart' import { cloneDeep, defaultsDeep } from 'lodash-es' const dvMainStore = dvMainStoreWithOut() -const { dvInfo } = storeToRefs(dvMainStore) -const { nowPanelTrackInfo, nowPanelJumpInfo } = storeToRefs(dvMainStore) +const { nowPanelTrackInfo, nowPanelJumpInfo, dvInfo } = storeToRefs(dvMainStore) const { t } = useI18n() const linkJumpRef = ref(null) @@ -154,7 +153,7 @@ const noSenior = computed(() => { const linkJumpActiveChange = () => { // 直接触发刷新 const params = { - sourceDvId: chart.value.sceneId, + sourceDvId: dvInfo.value.id, sourceViewId: chart.value.id, activeStatus: chart.value.jumpActive } @@ -164,7 +163,7 @@ const linkJumpActiveChange = () => { } const linkageActiveChange = () => { const params = { - dvId: chart.value.sceneId, + dvId: dvInfo.value.id, sourceViewId: chart.value.id, activeStatus: chart.value.linkageActive } diff --git a/core/core-frontend/src/views/chart/components/editor/editor-style/components/TitleSelector.vue b/core/core-frontend/src/views/chart/components/editor/editor-style/components/TitleSelector.vue index feea8b5fc1..dbefb8cb04 100644 --- a/core/core-frontend/src/views/chart/components/editor/editor-style/components/TitleSelector.vue +++ b/core/core-frontend/src/views/chart/components/editor/editor-style/components/TitleSelector.vue @@ -358,7 +358,14 @@ watch( >
- +
+ + diff --git a/core/core-frontend/src/views/template-market/component/TemplateMarketItem.vue b/core/core-frontend/src/views/template-market/component/TemplateMarketItem.vue new file mode 100644 index 0000000000..875cf09070 --- /dev/null +++ b/core/core-frontend/src/views/template-market/component/TemplateMarketItem.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/core/core-frontend/src/views/template-market/component/TemplateMarketPreviewItem.vue b/core/core-frontend/src/views/template-market/component/TemplateMarketPreviewItem.vue new file mode 100644 index 0000000000..9d6d83ae1e --- /dev/null +++ b/core/core-frontend/src/views/template-market/component/TemplateMarketPreviewItem.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/core/core-frontend/src/views/template-market/index.vue b/core/core-frontend/src/views/template-market/index.vue index 0f35a0f8bf..cd1a58a484 100644 --- a/core/core-frontend/src/views/template-market/index.vue +++ b/core/core-frontend/src/views/template-market/index.vue @@ -1,35 +1,382 @@ - diff --git a/de-xpack b/de-xpack index a6f7aa3f64..91e4019972 160000 --- a/de-xpack +++ b/de-xpack @@ -1 +1 @@ -Subproject commit a6f7aa3f644fe258d9ed14cca420c3f6c4aeb1cd +Subproject commit 91e4019972ec96f7f672bb5da2156f54ca9d72ea diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/chart/dto/ChartDimensionDTO.java b/sdk/api/api-base/src/main/java/io/dataease/api/chart/dto/ChartDimensionDTO.java index f93adb5f7b..6f27787ddd 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/chart/dto/ChartDimensionDTO.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/chart/dto/ChartDimensionDTO.java @@ -1,5 +1,7 @@ package io.dataease.api.chart.dto; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; /** @@ -7,6 +9,7 @@ import lombok.Data; */ @Data public class ChartDimensionDTO { + @JsonSerialize(using = ToStringSerializer.class) private Long id; private String value; } diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/lark/api/LarkApi.java b/sdk/api/api-base/src/main/java/io/dataease/api/lark/api/LarkApi.java new file mode 100644 index 0000000000..c608ee94a6 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/lark/api/LarkApi.java @@ -0,0 +1,21 @@ +package io.dataease.api.lark.api; + +import io.dataease.api.lark.dto.LarkTokenRequest; +import io.dataease.api.lark.vo.LarkInfoVO; +import io.dataease.api.lark.dto.LarkSettingCreator; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +public interface LarkApi { + + @GetMapping("/info") + LarkInfoVO info(); + + @PostMapping("/create") + void save(@RequestBody LarkSettingCreator creator); + + @PostMapping("/token") + String larkToken(@RequestBody LarkTokenRequest request); + +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/lark/dto/LarkSettingCreator.java b/sdk/api/api-base/src/main/java/io/dataease/api/lark/dto/LarkSettingCreator.java new file mode 100644 index 0000000000..94eb9d369d --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/lark/dto/LarkSettingCreator.java @@ -0,0 +1,17 @@ +package io.dataease.api.lark.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class LarkSettingCreator implements Serializable { + + private String appId; + + private String appSecret; + + private String callBack; + + private Boolean enable; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/lark/dto/LarkTokenRequest.java b/sdk/api/api-base/src/main/java/io/dataease/api/lark/dto/LarkTokenRequest.java new file mode 100644 index 0000000000..cb7ac21437 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/lark/dto/LarkTokenRequest.java @@ -0,0 +1,13 @@ +package io.dataease.api.lark.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class LarkTokenRequest implements Serializable { + + private String code; + + private String state; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/lark/vo/LarkInfoVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/lark/vo/LarkInfoVO.java new file mode 100644 index 0000000000..4b24e66e79 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/lark/vo/LarkInfoVO.java @@ -0,0 +1,19 @@ +package io.dataease.api.lark.vo; + + + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class LarkInfoVO implements Serializable { + + private String appId; + + private String appSecret; + + private String callBack; + + private Boolean enable; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/TemplateMarketApi.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/TemplateMarketApi.java index c1b0751175..867333cbf0 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/template/TemplateMarketApi.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/TemplateMarketApi.java @@ -14,8 +14,8 @@ import java.util.List; */ public interface TemplateMarketApi { - @PostMapping("/search") - MarketBaseResponse searchTemplate(@RequestBody TemplateMarketSearchRequest request); + @GetMapping("/search") + MarketBaseResponse searchTemplate(); @GetMapping("/categories") List categories(); diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/dto/TemplateMarketDTO.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/dto/TemplateMarketDTO.java index 1e2e1d0991..1505228cc3 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/template/dto/TemplateMarketDTO.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/dto/TemplateMarketDTO.java @@ -3,10 +3,15 @@ package io.dataease.api.template.dto; import io.dataease.api.template.vo.MarketCategoryVO; import io.dataease.api.template.vo.MarketMetasVO; import lombok.Data; +import lombok.NoArgsConstructor; +import org.apache.commons.lang3.ArrayUtils; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; @Data +@NoArgsConstructor public class TemplateMarketDTO { private String id; private String title; @@ -18,4 +23,12 @@ public class TemplateMarketDTO { private Boolean showFlag = true; private List categories; private MarketMetasVO metas; + + public TemplateMarketDTO(String id, String title,String themeRepo,String templateUrl,String categoryName) { + this.id = id; + this.title = title; + this.categories = Arrays.asList(new MarketCategoryVO(categoryName),new MarketCategoryVO("全部")); + this.metas = new MarketMetasVO(templateUrl); + this.thumbnail = themeRepo; + } } diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketBaseResponse.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketBaseResponse.java index 5a791e1116..bbd5381917 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketBaseResponse.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketBaseResponse.java @@ -1,6 +1,7 @@ package io.dataease.api.template.response; import io.dataease.api.template.dto.TemplateMarketDTO; +import lombok.Data; import java.util.List; @@ -8,6 +9,7 @@ import java.util.List; * @author : WangJiaHao * @date : 2023/11/6 17:43 */ +@Data public class MarketBaseResponse { private String baseUrl; @@ -21,4 +23,6 @@ public class MarketBaseResponse { this.contents = contents; } + + } diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketCategoryBaseResponse.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketCategoryBaseResponse.java new file mode 100644 index 0000000000..a96bec7db8 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketCategoryBaseResponse.java @@ -0,0 +1,16 @@ +package io.dataease.api.template.response; + +import io.dataease.api.template.vo.TemplateCategoryVO; +import lombok.Data; + +import java.util.List; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +@Data +public class MarketCategoryBaseResponse { + private List data; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketMetaDataBaseResponse.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketMetaDataBaseResponse.java new file mode 100644 index 0000000000..1ac58140d9 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketMetaDataBaseResponse.java @@ -0,0 +1,21 @@ +package io.dataease.api.template.response; + +import io.dataease.api.template.vo.MarketMetaDataVO; +import lombok.Data; + +import java.util.List; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +@Data +public class MarketMetaDataBaseResponse { + + private List deVersion; + + private List templateTypes; + + private List labels; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateBaseResponse.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateBaseResponse.java new file mode 100644 index 0000000000..79ffc7f099 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateBaseResponse.java @@ -0,0 +1,17 @@ +package io.dataease.api.template.response; + +import io.dataease.api.template.dto.TemplateMarketDTO; +import lombok.Data; + +import java.util.List; + +/** + * @author : WangJiaHao + * @date : 2023/11/17 13:41 + */ +@Data +public class MarketTemplateBaseResponse { + + private MarketTemplateInnerResult data; + +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateInnerResult.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateInnerResult.java new file mode 100644 index 0000000000..6012a89ddb --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateInnerResult.java @@ -0,0 +1,17 @@ +package io.dataease.api.template.response; + +import io.dataease.api.template.dto.TemplateMarketDTO; +import lombok.Data; + +import java.util.List; + +/** + * @author : WangJiaHao + * @date : 2023/11/17 13:41 + */ +@Data +public class MarketTemplateInnerResult { + + private List content; + +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateV2BaseResponse.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateV2BaseResponse.java new file mode 100644 index 0000000000..24cde5b02d --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateV2BaseResponse.java @@ -0,0 +1,16 @@ +package io.dataease.api.template.response; + +import lombok.Data; + +import java.util.List; + +/** + * @author : WangJiaHao + * @date : 2023/11/17 13:41 + */ +@Data +public class MarketTemplateV2BaseResponse { + + private List items; + +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateV2ItemResult.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateV2ItemResult.java new file mode 100644 index 0000000000..ca07c4889e --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateV2ItemResult.java @@ -0,0 +1,15 @@ +package io.dataease.api.template.response; + +import io.dataease.api.template.vo.MarketApplicationVO; +import lombok.Data; + +/** + * @author : WangJiaHao + * @date : 2023/11/17 13:41 + */ +@Data +public class MarketTemplateV2ItemResult { + + private MarketApplicationVO application; + +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecLinkVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecLinkVO.java new file mode 100644 index 0000000000..fbaf7ff794 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecLinkVO.java @@ -0,0 +1,16 @@ +package io.dataease.api.template.vo; + +import lombok.Data; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +@Data +public class MarketApplicationSpecLinkVO { + + private String name; + + private String url; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecScreenshotBaseVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecScreenshotBaseVO.java new file mode 100644 index 0000000000..33c808c426 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecScreenshotBaseVO.java @@ -0,0 +1,13 @@ +package io.dataease.api.template.vo; + +import lombok.Data; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +@Data +public class MarketApplicationSpecScreenshotBaseVO { + private String url; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecVO.java new file mode 100644 index 0000000000..f30e1d73ac --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecVO.java @@ -0,0 +1,30 @@ +package io.dataease.api.template.vo; + +import lombok.Data; + +import java.util.List; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +@Data +public class MarketApplicationSpecVO { + + private String displayName; + + private String type; + + private String deVersion; + + private String templateType; + + private String label; + + private String readmeName; + + private List screenshots; + + private List links; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationVO.java new file mode 100644 index 0000000000..22ac987851 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationVO.java @@ -0,0 +1,13 @@ +package io.dataease.api.template.vo; + +import lombok.Data; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +@Data +public class MarketApplicationVO { + private MarketApplicationSpecVO spec; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketCategoryVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketCategoryVO.java index 3c086909d7..6552cec19c 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketCategoryVO.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketCategoryVO.java @@ -1,6 +1,7 @@ package io.dataease.api.template.vo; import lombok.Data; +import lombok.NoArgsConstructor; /** * Author: wangjiahao @@ -8,8 +9,13 @@ import lombok.Data; * Description: */ @Data +@NoArgsConstructor public class MarketCategoryVO { private String id; private String name; private String slug; + + public MarketCategoryVO(String name) { + this.name = name; + } } diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketMetaDataVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketMetaDataVO.java new file mode 100644 index 0000000000..b1be8f3bf3 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketMetaDataVO.java @@ -0,0 +1,15 @@ +package io.dataease.api.template.vo; + +import lombok.Data; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +@Data +public class MarketMetaDataVO { + private String slug; + private String value; + private String label; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketMetasVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketMetasVO.java index d568615ba2..1a9f86e44c 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketMetasVO.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketMetasVO.java @@ -1,6 +1,7 @@ package io.dataease.api.template.vo; import lombok.Data; +import lombok.NoArgsConstructor; /** * Author: wangjiahao @@ -8,6 +9,11 @@ import lombok.Data; * Description: */ @Data +@NoArgsConstructor public class MarketMetasVO { private String theme_repo; + + public MarketMetasVO(String theme_repo) { + this.theme_repo = theme_repo; + } } diff --git a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/embedded/api/EmbeddedApi.java b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/embedded/api/EmbeddedApi.java new file mode 100644 index 0000000000..0ebe6015ab --- /dev/null +++ b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/embedded/api/EmbeddedApi.java @@ -0,0 +1,33 @@ +package io.dataease.api.permissions.embedded.api; + +import io.dataease.api.permissions.embedded.dto.EmbeddedCreator; +import io.dataease.api.permissions.embedded.dto.EmbeddedEditor; +import io.dataease.api.permissions.embedded.dto.EmbeddedResetRequest; +import io.dataease.api.permissions.embedded.vo.EmbeddedGridVO; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +public interface EmbeddedApi { + + @GetMapping("/queryGrid") + List queryGrid(); + + @PostMapping("/create") + void create(@RequestBody EmbeddedCreator creator); + + @PostMapping("/edit") + void edit(@RequestBody EmbeddedEditor editor); + + @PostMapping("/delete/{id}") + void delete(@PathVariable("id") Long id); + + @PostMapping("/reset") + void reset(@RequestBody EmbeddedResetRequest request); + + @GetMapping("/domainList") + List domainList(); +} diff --git a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/embedded/dto/EmbeddedCreator.java b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/embedded/dto/EmbeddedCreator.java new file mode 100644 index 0000000000..13f09cb844 --- /dev/null +++ b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/embedded/dto/EmbeddedCreator.java @@ -0,0 +1,13 @@ +package io.dataease.api.permissions.embedded.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class EmbeddedCreator implements Serializable { + + private String name; + + private String domain; +} diff --git a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/embedded/dto/EmbeddedEditor.java b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/embedded/dto/EmbeddedEditor.java new file mode 100644 index 0000000000..8227621660 --- /dev/null +++ b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/embedded/dto/EmbeddedEditor.java @@ -0,0 +1,15 @@ +package io.dataease.api.permissions.embedded.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class EmbeddedEditor implements Serializable { + + private Long id; + + private String name; + + private String domain; +} diff --git a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/embedded/dto/EmbeddedResetRequest.java b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/embedded/dto/EmbeddedResetRequest.java new file mode 100644 index 0000000000..fb74fc6e47 --- /dev/null +++ b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/embedded/dto/EmbeddedResetRequest.java @@ -0,0 +1,13 @@ +package io.dataease.api.permissions.embedded.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class EmbeddedResetRequest implements Serializable { + + private Long id; + + private String appSecret; +} diff --git a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/embedded/vo/EmbeddedGridVO.java b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/embedded/vo/EmbeddedGridVO.java new file mode 100644 index 0000000000..0d0cb68d37 --- /dev/null +++ b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/embedded/vo/EmbeddedGridVO.java @@ -0,0 +1,22 @@ +package io.dataease.api.permissions.embedded.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class EmbeddedGridVO implements Serializable { + + @JsonSerialize(using= ToStringSerializer.class) + private Long id; + + private String name; + + private String appId; + + private String appSecret; + + private String domain; +} diff --git a/sdk/common/src/main/java/io/dataease/auth/interceptor/CorsConfig.java b/sdk/common/src/main/java/io/dataease/auth/interceptor/CorsConfig.java index 9fb219f88b..63c5164187 100644 --- a/sdk/common/src/main/java/io/dataease/auth/interceptor/CorsConfig.java +++ b/sdk/common/src/main/java/io/dataease/auth/interceptor/CorsConfig.java @@ -1,6 +1,7 @@ package io.dataease.auth.interceptor; import io.dataease.constant.AuthConstant; +import jakarta.annotation.Resource; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.web.bind.annotation.RestController; @@ -13,16 +14,20 @@ import java.util.List; @Configuration public class CorsConfig implements WebMvcConfigurer { + @Resource(name = "deCorsInterceptor") + private CorsInterceptor corsInterceptor; + @Value("#{'${dataease.origin-list}'.split(',')}") private List originList; @Override public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(new CorsInterceptor(originList)).addPathPatterns("/**"); + corsInterceptor.addOriginList(originList); + registry.addInterceptor(corsInterceptor).addPathPatterns("/**"); } @Override public void configurePathMatch(PathMatchConfigurer configurer) { - configurer.addPathPrefix(AuthConstant.DE_API_PREFIX, c -> c.isAnnotationPresent(RestController.class)); + configurer.addPathPrefix(AuthConstant.DE_API_PREFIX, c -> c.isAnnotationPresent(RestController.class) && c.getPackageName().startsWith("io.dataease")); } } diff --git a/sdk/common/src/main/java/io/dataease/auth/interceptor/CorsInterceptor.java b/sdk/common/src/main/java/io/dataease/auth/interceptor/CorsInterceptor.java index 2df181c17d..f37bb2eecb 100644 --- a/sdk/common/src/main/java/io/dataease/auth/interceptor/CorsInterceptor.java +++ b/sdk/common/src/main/java/io/dataease/auth/interceptor/CorsInterceptor.java @@ -1,27 +1,73 @@ package io.dataease.auth.interceptor; +import cn.hutool.core.util.ReflectUtil; +import io.dataease.utils.CommonBeanFactory; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; +import java.util.ArrayList; import java.util.List; +@Component("deCorsInterceptor") public class CorsInterceptor implements HandlerInterceptor { - private List originList; + private final List originList; + + private final List busiOriginList = new ArrayList<>(); + + private Class aClass; + + private Object bean; + public CorsInterceptor(List originList) { this.originList = originList; } + public void addOriginList(List list) { + List strings = list.stream().filter(item -> !originList.contains(item)).toList(); + originList.addAll(strings); + } + + + public void addOriginList() { + String className = "io.dataease.api.permissions.embedded.api.EmbeddedApi"; + String methodName = "domainList"; + if (ObjectUtils.isEmpty(aClass)) { + try { + aClass = Class.forName(className); + } catch (ClassNotFoundException e) { + return; + } + } + if (ObjectUtils.isEmpty(bean)) { + bean = CommonBeanFactory.getBean(aClass); + } + if (ObjectUtils.isNotEmpty(bean)) { + Object result = ReflectUtil.invoke(bean, methodName); + if (ObjectUtils.isNotEmpty(result)) { + List list = (List) result; + if (CollectionUtils.isNotEmpty(list)) { + List strings = list.stream().filter(item -> !busiOriginList.contains(item)).toList(); + busiOriginList.addAll(strings); + } + + } + } + } + @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - + addOriginList(); String origin = request.getHeader("Origin"); boolean embedded = StringUtils.startsWithAny(request.getRequestURI(), "/assets/", "/js/"); - if ((StringUtils.isNotBlank(origin) && originList.contains(origin)) || embedded) { + if ((StringUtils.isNotBlank(origin) && originList.contains(origin)) || busiOriginList.contains(origin) || embedded) { response.setHeader("Access-Control-Allow-Origin", embedded ? "*" : origin); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS"); diff --git a/sdk/common/src/main/java/io/dataease/utils/HttpClientUtil.java b/sdk/common/src/main/java/io/dataease/utils/HttpClientUtil.java index 9fd9e1e168..6f6f0125e2 100755 --- a/sdk/common/src/main/java/io/dataease/utils/HttpClientUtil.java +++ b/sdk/common/src/main/java/io/dataease/utils/HttpClientUtil.java @@ -148,7 +148,7 @@ public class HttpClientUtil { public static String post(String url, String json, HttpClientConfig config) { CloseableHttpClient httpClient = null; try { - buildHttpClient(url); + httpClient = buildHttpClient(url); HttpPost httpPost = new HttpPost(url); if (config == null) { config = new HttpClientConfig(); diff --git a/sdk/common/src/main/java/io/dataease/utils/WhitelistUtils.java b/sdk/common/src/main/java/io/dataease/utils/WhitelistUtils.java index 0a4e5c7834..c56e56197a 100644 --- a/sdk/common/src/main/java/io/dataease/utils/WhitelistUtils.java +++ b/sdk/common/src/main/java/io/dataease/utils/WhitelistUtils.java @@ -14,10 +14,13 @@ public class WhitelistUtils { "/dekey", "/index.html", "/model", + "/deApi", "/demo.html", "/swagger-resources", "/doc.html", "/panel.html", + "/lark/info", + "/lark/token", "/setting/authentication/status", "/"); @@ -33,6 +36,7 @@ public class WhitelistUtils { || StringUtils.startsWithAny(requestURI, "/static-resource/") || StringUtils.startsWithAny(requestURI, "/share/proxyInfo") || StringUtils.startsWithAny(requestURI, "/xpackComponent/content/") + || StringUtils.startsWithAny(requestURI, "/platform/") || StringUtils.startsWithAny(requestURI, "/map/"); } }