diff --git a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java index 97b9343ee9..d37ef830d2 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java +++ b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java @@ -557,17 +557,11 @@ public class ChartDataManage { } else if (StringUtils.containsIgnoreCase(view.getType(), "quadrant")) { Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields), crossDs, dsMap); yAxis.addAll(extBubble); + if(ObjectUtils.isNotEmpty(view.getExtTooltip())){ + yAxis.addAll(new ArrayList<>(view.getExtTooltip())); + } Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields), crossDs, dsMap); querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view); - if (containDetailField(view) && ObjectUtils.isNotEmpty(viewFields)) { - detailFieldList.addAll(xAxis); - detailFieldList.addAll(viewFields); - - Dimension2SQLObj.dimension2sqlObj(sqlMeta, detailFieldList, transFields(allFields), crossDs, dsMap); - String originSql = SQLProvider.createQuerySQL(sqlMeta, false, needOrder, view); - String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + pageInfo.getPageSize() + " OFFSET " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() : ""); - detailFieldSql = originSql + limit; - } } else if (StringUtils.equalsIgnoreCase("bar-range", view.getType())) { sqlMeta.setChartType(view.getType()); Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields), crossDs, dsMap); @@ -791,7 +785,7 @@ public class ChartDataManage { } else if (StringUtils.containsIgnoreCase(view.getType(), "label")) { mapChart = ChartDataBuild.transLabelChartData(xAxis, yAxis, view, data, isDrill); } else if (StringUtils.containsIgnoreCase(view.getType(), "quadrant")) { - mapChart = ChartDataBuild.transQuadrantDataAntV(xAxis, yAxis, view, data, extBubble, isDrill); + mapChart = ChartDataBuild.transMixChartDataAntV(xAxis, yAxis, view, data, isDrill); } else if (StringUtils.equalsIgnoreCase(view.getType(), "bar-range")) { mapChart = ChartDataBuild.transBarRangeDataAntV(skipBarRange, barRangeDate, xAxisBase, xAxis, yAxis, view, data, isDrill); } else { 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 98e2410322..97ed061b71 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 @@ -532,6 +532,13 @@ public class DatasetDataManage { boolean crossDs = false; Map dsMap = null; + if (ObjectUtils.isNotEmpty(request.getSortId())) { + // 如果排序字段和查询字段显示字段不一致,则加入到查询列表中 + if (!request.getSortId().equals(request.getQueryId()) && !request.getSortId().equals(request.getDisplayId())) { + ids.add(request.getSortId()); + } + } + for (Long id : ids) { DatasetTableFieldDTO field = datasetTableFieldManage.selectById(id); if (field == null) { diff --git a/core/core-backend/src/main/java/io/dataease/template/manage/TemplateCenterManage.java b/core/core-backend/src/main/java/io/dataease/template/manage/TemplateCenterManage.java index fe5eb2797e..4d9bebc9b7 100644 --- a/core/core-backend/src/main/java/io/dataease/template/manage/TemplateCenterManage.java +++ b/core/core-backend/src/main/java/io/dataease/template/manage/TemplateCenterManage.java @@ -71,6 +71,9 @@ public class TemplateCenterManage { public String marketGet(String url, String accessKey) { HttpClientConfig config = new HttpClientConfig(); config.addHeader("API-Authorization", accessKey); + config.setConnectTimeout(5000); + config.setSocketTimeout(10000); + config.setConnectionRequestTimeout(5000); return HttpClientUtil.get(url, config); } diff --git a/core/core-backend/src/main/java/io/dataease/visualization/manage/CoreVisualizationManage.java b/core/core-backend/src/main/java/io/dataease/visualization/manage/CoreVisualizationManage.java index 212f1dc6c2..b53fe3f05a 100644 --- a/core/core-backend/src/main/java/io/dataease/visualization/manage/CoreVisualizationManage.java +++ b/core/core-backend/src/main/java/io/dataease/visualization/manage/CoreVisualizationManage.java @@ -109,6 +109,7 @@ public class CoreVisualizationManage { @XpackInteract(value = "visualizationResourceTree", before = false) public Long innerSave(DataVisualizationInfo visualizationInfo) { + visualizationInfo.setVersion(3); return preInnerSave(visualizationInfo); } @@ -123,7 +124,6 @@ public class CoreVisualizationManage { visualizationInfo.setCreateTime(System.currentTimeMillis()); visualizationInfo.setUpdateTime(System.currentTimeMillis()); visualizationInfo.setOrgId(AuthUtils.getUser().getDefaultOid()); - visualizationInfo.setVersion(3); mapper.insert(visualizationInfo); coreOptRecentManage.saveOpt(visualizationInfo.getId(), OptConstants.OPT_RESOURCE_TYPE.VISUALIZATION, OptConstants.OPT_TYPE.NEW); return visualizationInfo.getId(); diff --git a/core/core-backend/src/main/resources/db/migration/V2.7__ddl.sql b/core/core-backend/src/main/resources/db/migration/V2.7__ddl.sql index 8b725c028a..6b9223fe5e 100644 --- a/core/core-backend/src/main/resources/db/migration/V2.7__ddl.sql +++ b/core/core-backend/src/main/resources/db/migration/V2.7__ddl.sql @@ -15,7 +15,7 @@ INSERT INTO `core_sys_startup_job` VALUES ('chartFilterMerge', 'chartFilterMerge', 'ready'); COMMIT; - +TRUNCATE TABLE `xpack_setting_authentication`; ALTER TABLE `xpack_setting_authentication` ADD COLUMN `plugin_json` longtext NULL COMMENT '插件配置' AFTER `relational_ids`; ALTER TABLE `xpack_setting_authentication` @@ -41,3 +41,14 @@ CREATE TABLE `core_export_task` `params` longtext NOT NULL COMMENT '过滤参数', PRIMARY KEY (`id`) ) COMMENT='导出任务表'; + +DROP TABLE IF EXISTS `xpack_platform_token`; +CREATE TABLE `xpack_platform_token` +( + `id` int NOT NULL, + `token` varchar(255) NOT NULL, + `create_time` bigint NOT NULL, + `exp_time` bigint NOT NULL, + PRIMARY KEY (`id`) +); + diff --git a/core/core-frontend/package.json b/core/core-frontend/package.json index 673abee0e9..71aeda025a 100644 --- a/core/core-frontend/package.json +++ b/core/core-frontend/package.json @@ -25,7 +25,7 @@ "axios": "^1.3.3", "crypto-js": "^4.1.1", "dayjs": "^1.11.9", - "element-plus-secondary": "^0.5.8", + "element-plus-secondary": "^0.5.9", "element-resize-detector": "^1.2.4", "file-saver": "^2.0.5", "flv.js": "^1.6.2", diff --git a/core/core-frontend/src/assets/svg/bidirectional-bar-dark.svg b/core/core-frontend/src/assets/svg/bidirectional-bar-dark.svg new file mode 100644 index 0000000000..f95fe09fb2 --- /dev/null +++ b/core/core-frontend/src/assets/svg/bidirectional-bar-dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/core/core-frontend/src/assets/svg/bidirectional-bar.svg b/core/core-frontend/src/assets/svg/bidirectional-bar.svg new file mode 100644 index 0000000000..31f5b63283 --- /dev/null +++ b/core/core-frontend/src/assets/svg/bidirectional-bar.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/core/core-frontend/src/assets/svg/de-refresh.svg b/core/core-frontend/src/assets/svg/de-refresh.svg new file mode 100644 index 0000000000..76618ab91c --- /dev/null +++ b/core/core-frontend/src/assets/svg/de-refresh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/core/core-frontend/src/assets/svg/dv-scroll-text.svg b/core/core-frontend/src/assets/svg/dv-scroll-text.svg new file mode 100644 index 0000000000..897afecb9d --- /dev/null +++ b/core/core-frontend/src/assets/svg/dv-scroll-text.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/core/core-frontend/src/assets/svg/dv-style-scroll-speed.svg b/core/core-frontend/src/assets/svg/dv-style-scroll-speed.svg new file mode 100644 index 0000000000..e0634c53cb --- /dev/null +++ b/core/core-frontend/src/assets/svg/dv-style-scroll-speed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/core/core-frontend/src/assets/svg/flow-map-origin.svg b/core/core-frontend/src/assets/svg/flow-map-origin.svg new file mode 100644 index 0000000000..eaef7f8ea5 --- /dev/null +++ b/core/core-frontend/src/assets/svg/flow-map-origin.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/core-frontend/src/assets/svg/flow-map.svg b/core/core-frontend/src/assets/svg/flow-map.svg new file mode 100644 index 0000000000..6c691c031b --- /dev/null +++ b/core/core-frontend/src/assets/svg/flow-map.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/core-frontend/src/assets/svg/progress-bar-dark.svg b/core/core-frontend/src/assets/svg/progress-bar-dark.svg new file mode 100644 index 0000000000..2f0ea808ae --- /dev/null +++ b/core/core-frontend/src/assets/svg/progress-bar-dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/core/core-frontend/src/assets/svg/progress-bar.svg b/core/core-frontend/src/assets/svg/progress-bar.svg new file mode 100644 index 0000000000..c75e98a48a --- /dev/null +++ b/core/core-frontend/src/assets/svg/progress-bar.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/core/core-frontend/src/assets/svg/scroll-text.svg b/core/core-frontend/src/assets/svg/scroll-text.svg new file mode 100644 index 0000000000..5847b4ad02 --- /dev/null +++ b/core/core-frontend/src/assets/svg/scroll-text.svg @@ -0,0 +1 @@ + diff --git a/core/core-frontend/src/components/dashboard/DbToolbar.vue b/core/core-frontend/src/components/dashboard/DbToolbar.vue index a1a57a20a6..bf19c1b2d7 100644 --- a/core/core-frontend/src/components/dashboard/DbToolbar.vue +++ b/core/core-frontend/src/components/dashboard/DbToolbar.vue @@ -219,7 +219,7 @@ const openDataBoardSetting = () => { } const openMobileSetting = () => { - if (!dvInfo.value.id) { + if (!dvInfo.value.id || dvInfo.value.dataState === 'prepare') { ElMessage.warning('请先保存当前页面') return } diff --git a/core/core-frontend/src/components/dashboard/subject-setting/dashboard-style/OverallSetting.vue b/core/core-frontend/src/components/dashboard/subject-setting/dashboard-style/OverallSetting.vue index 253d01c4e5..5bd5f78327 100644 --- a/core/core-frontend/src/components/dashboard/subject-setting/dashboard-style/OverallSetting.vue +++ b/core/core-frontend/src/components/dashboard/subject-setting/dashboard-style/OverallSetting.vue @@ -91,7 +91,7 @@ diff --git a/core/core-frontend/src/components/data-visualization/DvToolbar.vue b/core/core-frontend/src/components/data-visualization/DvToolbar.vue index 506b1df64e..40dceb75cb 100644 --- a/core/core-frontend/src/components/data-visualization/DvToolbar.vue +++ b/core/core-frontend/src/components/data-visualization/DvToolbar.vue @@ -227,7 +227,7 @@ eventBus.on('clearCanvas', clearCanvas) > - + - + diff --git a/core/core-frontend/src/components/data-visualization/canvas/CanvasCore.vue b/core/core-frontend/src/components/data-visualization/canvas/CanvasCore.vue index ac6d7162b1..4a25678b42 100644 --- a/core/core-frontend/src/components/data-visualization/canvas/CanvasCore.vue +++ b/core/core-frontend/src/components/data-visualization/canvas/CanvasCore.vue @@ -1450,7 +1450,7 @@ defineExpose({ > { }) const boardMoveActive = computed(() => { - const CHARTS = ['map', 'bubble-map', 'table-info', 'table-normal', 'table-pivot'] + const CHARTS = ['flow-map', 'map', 'bubble-map', 'table-info', 'table-normal', 'table-pivot'] return CHARTS.includes(element.value.innerType) }) diff --git a/core/core-frontend/src/components/visualization/UserViewEnlarge.vue b/core/core-frontend/src/components/visualization/UserViewEnlarge.vue index 5437392cd6..e62685c9ad 100644 --- a/core/core-frontend/src/components/visualization/UserViewEnlarge.vue +++ b/core/core-frontend/src/components/visualization/UserViewEnlarge.vue @@ -8,7 +8,7 @@ trigger="click" >
- + = { render: 'antv', type: 'table-info', @@ -165,6 +166,7 @@ const pixelOptions = [ } ] const dialogInit = (canvasStyle, view, item, opt) => { + sourceViewType.value = view.type optType.value = opt dialogShow.value = true viewInfo.value = deepCopy(view) as DeepPartial @@ -193,7 +195,12 @@ const downloadViewImage = () => { const downloadViewDetails = () => { const viewDataInfo = dvMainStore.getViewDataDetails(viewInfo.value.id) const chartExtRequest = dvMainStore.getLastViewRequestInfo(viewInfo.value.id) - const chart = { ...viewInfo.value, chartExtRequest, data: viewDataInfo } + const chart = { + ...viewInfo.value, + chartExtRequest, + data: viewDataInfo, + type: sourceViewType.value + } exportLoading.value = true exportExcelDownload(chart, () => { console.log('aa') diff --git a/core/core-frontend/src/custom-component/common/CommonStyleSet.vue b/core/core-frontend/src/custom-component/common/CommonStyleSet.vue index b9e91abb43..ca3390a86b 100644 --- a/core/core-frontend/src/custom-component/common/CommonStyleSet.vue +++ b/core/core-frontend/src/custom-component/common/CommonStyleSet.vue @@ -84,7 +84,7 @@ @change="changeStyle" > @@ -266,12 +266,28 @@ const styleMounted = ref({ opacity: 1, fontSize: 22, activeFontSize: 22, + letterSpacing: 0, + scrollSpeed: 0, fontWeight: 'normal', fontStyle: 'normal', textAlign: 'center', color: '#000000' }) +const scrollSpeedList = [ + { name: '停止', value: 0 }, + { name: '1', value: 20 }, + { name: '2', value: 18 }, + { name: '3', value: 16 }, + { name: '4', value: 14 }, + { name: '5', value: 12 }, + { name: '6', value: 10 }, + { name: '7', value: 8 }, + { name: '8', value: 6 }, + { name: '9', value: 4 }, + { name: '10', value: 2 } +] + const opacitySizeList = [ { name: '0.1', value: 0.1 }, { name: '0.2', value: 0.2 }, @@ -310,6 +326,17 @@ const styleColorKeyArray = [ { value: 'backgroundColor', label: '背景色', width: 90, icon: 'dv-style-backgroundColor' } ] +const letterSpacingList = computed(() => { + const arr = [] + for (let i = 0; i <= 60; i = i + 1) { + arr.push({ + name: i + '', + value: i + }) + } + return arr +}) + const fontSizeList = computed(() => { const arr = [] for (let i = 10; i <= 60; i = i + 1) { @@ -351,6 +378,13 @@ const borderStyleList = [ //大小随画布缩放动态变化 const styleOptionMountedKeyArray = [ + { + value: 'letterSpacing', + label: '字间距', + customOption: letterSpacingList.value, + width: '90px', + icon: 'dv-style-letterSpacing' + }, { value: 'fontSize', label: '字体大小', @@ -369,6 +403,13 @@ const styleOptionMountedKeyArray = [ //大小不变 const styleOptionKeyArray = [ + { + value: 'scrollSpeed', + label: '滚动速度', + customOption: scrollSpeedList, + width: '90px', + icon: 'dv-style-scroll-speed' + }, { value: 'opacity', label: '不透明度', diff --git a/core/core-frontend/src/custom-component/component-group/MoreComGroup.vue b/core/core-frontend/src/custom-component/component-group/MoreComGroup.vue index e69b69294c..39cbaa2cdc 100644 --- a/core/core-frontend/src/custom-component/component-group/MoreComGroup.vue +++ b/core/core-frontend/src/custom-component/component-group/MoreComGroup.vue @@ -28,8 +28,8 @@ const props = defineProps({ }) const { dvModel } = toRefs(props) -const newComponent = () => { - eventBus.emit('handleNew', { componentName: 'DeTimeClock', innerType: 'DeTimeClock' }) +const newComponent = params => { + eventBus.emit('handleNew', { componentName: params, innerType: params }) } const handleDragStart = e => { @@ -42,17 +42,20 @@ const handleDragEnd = e => { @@ -60,5 +63,6 @@ const handleDragEnd = e => { diff --git a/core/core-frontend/src/custom-component/component-group/TextGroup.vue b/core/core-frontend/src/custom-component/component-group/TextGroup.vue index 234cfa46ef..04b099d5de 100644 --- a/core/core-frontend/src/custom-component/component-group/TextGroup.vue +++ b/core/core-frontend/src/custom-component/component-group/TextGroup.vue @@ -11,7 +11,7 @@ const props = defineProps({ }, dvModel: { type: String, - default: 'dv' + default: 'dataV' }, element: { type: Object, @@ -37,23 +37,27 @@ const handleDragEnd = e => { commonHandleDragEnd(e, dvModel.value) } -const newComponent = () => { - eventBus.emit('handleNew', { componentName: 'UserView', innerType: 'rich-text' }) +const newComponent = (componentName, innerType) => { + eventBus.emit('handleNew', { componentName: componentName, innerType: innerType }) } @@ -61,10 +65,6 @@ const newComponent = () => { diff --git a/core/core-frontend/src/custom-component/component-list.ts b/core/core-frontend/src/custom-component/component-list.ts index 33af3555eb..1b3ca4d3e4 100644 --- a/core/core-frontend/src/custom-component/component-list.ts +++ b/core/core-frontend/src/custom-component/component-list.ts @@ -253,8 +253,8 @@ const list = [ }, { component: 'DeVideo', - name: '媒体', - label: '媒体', + name: '视频', + label: '视频', innerType: 'DeVideo', editing: false, canvasActive: false, @@ -272,8 +272,8 @@ const list = [ }, { component: 'DeStreamMedia', - name: '媒体', - label: '媒体', + name: '流媒体', + label: '流媒体', innerType: 'DeStreamMedia', editing: false, canvasActive: false, @@ -386,7 +386,7 @@ const list = [ }, { component: 'CanvasBoard', - name: '图形', + name: '边框', label: '边框', propValue: '', icon: 'other_material_board', @@ -477,6 +477,29 @@ const list = [ headFontColor: '#000000', headFontActiveColor: '#000000' } + }, + { + component: 'ScrollText', + name: '跑马灯', + label: '跑马灯', + propValue: '双击编辑文字', + innerType: 'ScrollText', + icon: 'scroll-text', + x: 1, + y: 1, + sizeX: 36, + sizeY: 14, + style: { + width: 400, + height: 80, + fontSize: 14, + fontWeight: 400, + letterSpacing: 0, + color: '', + padding: 4, + verticalAlign: 'middle', + scrollSpeed: 0 + } } ] diff --git a/core/core-frontend/src/custom-component/de-frame/FrameLinks.vue b/core/core-frontend/src/custom-component/de-frame/FrameLinks.vue index a7838f85af..09d3592197 100644 --- a/core/core-frontend/src/custom-component/de-frame/FrameLinks.vue +++ b/core/core-frontend/src/custom-component/de-frame/FrameLinks.vue @@ -19,7 +19,7 @@ - + diff --git a/core/core-frontend/src/custom-component/indicator/DeIndicator.vue b/core/core-frontend/src/custom-component/indicator/DeIndicator.vue index b5f3b5d031..4e5778548a 100644 --- a/core/core-frontend/src/custom-component/indicator/DeIndicator.vue +++ b/core/core-frontend/src/custom-component/indicator/DeIndicator.vue @@ -93,9 +93,10 @@ const result = computed(() => { const indicatorColor = ref(DEFAULT_INDICATOR_STYLE.color) const thresholdColor = computed(() => { - let color = indicatorColor.value + let color: string = indicatorColor.value + let backgroundColor: string = DEFAULT_INDICATOR_STYLE.backgroundColor if (result.value === '-') { - return color + return { color, backgroundColor } } const value = result.value if ( @@ -107,42 +108,47 @@ const thresholdColor = computed(() => { for (let i = 0; i < senior.threshold.labelThreshold.length; i++) { let flag = false const t = senior.threshold.labelThreshold[i] - const tv = parseFloat(t.value) + const tv = t.value if (t.term === 'eq') { if (value === tv) { color = t.color + backgroundColor = t.backgroundColor flag = true } } else if (t.term === 'not_eq') { if (value !== tv) { color = t.color + backgroundColor = t.backgroundColor flag = true } } else if (t.term === 'lt') { if (value < tv) { color = t.color + backgroundColor = t.backgroundColor flag = true } } else if (t.term === 'gt') { if (value > tv) { color = t.color + backgroundColor = t.backgroundColor flag = true } } else if (t.term === 'le') { if (value <= tv) { color = t.color + backgroundColor = t.backgroundColor flag = true } } else if (t.term === 'ge') { if (value >= tv) { color = t.color + backgroundColor = t.backgroundColor flag = true } } else if (t.term === 'between') { - const min = parseFloat(t.min) - const max = parseFloat(t.max) - if (min <= value && value <= max) { + if (t.min <= value && value <= t.max) { color = t.color + backgroundColor = t.backgroundColor flag = true } } @@ -151,7 +157,7 @@ const thresholdColor = computed(() => { } } } - return color + return { color, backgroundColor } }) const formattedResult = computed(() => { @@ -175,11 +181,12 @@ const contentStyle = ref({ 'flex-direction': 'column', 'align-items': 'center', 'justify-content': 'center', - height: '100%' + height: '100%', + 'background-color': thresholdColor.value.backgroundColor }) const indicatorClass = ref({ - color: thresholdColor.value, + color: thresholdColor.value.color, 'font-size': DEFAULT_INDICATOR_STYLE.fontSize + 'px', 'font-family': defaultTo( CHART_FONT_FAMILY_MAP[DEFAULT_INDICATOR_STYLE.fontFamily], @@ -280,7 +287,7 @@ const renderChart = async view => { } indicatorClass.value = { - color: thresholdColor.value, + color: thresholdColor.value.color, 'font-size': indicator.fontSize + 'px', 'font-family': defaultTo( CHART_FONT_FAMILY_MAP[indicator.fontFamily], @@ -292,6 +299,7 @@ const renderChart = async view => { 'text-shadow': indicator.fontShadow ? '2px 2px 4px' : 'none', 'font-synthesis': 'weight style' } + contentStyle.value['background-color'] = thresholdColor.value.backgroundColor indicatorSuffixClass.value = { color: suffixColor, diff --git a/core/core-frontend/src/custom-component/scroll-text/Attr.vue b/core/core-frontend/src/custom-component/scroll-text/Attr.vue new file mode 100644 index 0000000000..6a368204bf --- /dev/null +++ b/core/core-frontend/src/custom-component/scroll-text/Attr.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/core/core-frontend/src/custom-component/scroll-text/Component.vue b/core/core-frontend/src/custom-component/scroll-text/Component.vue new file mode 100644 index 0000000000..32b2cfb962 --- /dev/null +++ b/core/core-frontend/src/custom-component/scroll-text/Component.vue @@ -0,0 +1,197 @@ + + + + + diff --git a/core/core-frontend/src/custom-component/v-query/QueryConditionConfiguration.vue b/core/core-frontend/src/custom-component/v-query/QueryConditionConfiguration.vue index 4eee3ecf30..b6eef02194 100644 --- a/core/core-frontend/src/custom-component/v-query/QueryConditionConfiguration.vue +++ b/core/core-frontend/src/custom-component/v-query/QueryConditionConfiguration.vue @@ -108,22 +108,11 @@ const isIndeterminate = ref(false) const datasetTree = shallowRef([]) const fields = ref() const parameters = ref([]) -const parametersFilter = computed(() => { - return parameters.value.filter(ele => { - if (curComponent.value.displayType === '2') { - return [2, 3].includes(ele.deType) - } - if (curComponent.value.displayType === '7') { - return [1, 7].includes(ele.deType) - } - return ele.deType === +curComponent.value.displayType - }) -}) const { queryElement } = toRefs(props) const getDetype = (id, arr) => { - return arr.find(ele => ele.id === id)?.deType + return arr.flat().find(ele => ele.id === id)?.deType } const visiblePopover = ref(false) const handleVisiblePopover = ev => { @@ -142,11 +131,19 @@ const showTypeError = computed(() => { if (!curComponent.value) return false if (!curComponent.value.checkedFields?.length) return false if (!fields.value?.length) return false + if (!!curComponent.value.parameters.length) { + const timeArr = curComponent.value.parameters.map(ele => ele.type[1]) + if (timeArr.length !== new Set(timeArr).size) { + return true + } + } let displayTypeField = null return curComponent.value.checkedFields.some(id => { const arr = fields.value.find(ele => ele.componentId === id) const checkId = curComponent.value.checkedFieldsMap?.[id] - const field = (arr?.list || []).find(ele => checkId === ele.id) + const field = Object.values(arr?.fields || {}) + .flat() + .find(ele => checkId === ele.id) if (!field) return false if (displayTypeField === null) { displayTypeField = field?.deType @@ -181,12 +178,32 @@ const handleCheckedFieldsChange = (value: string[]) => { const inputCom = ref() +const setParameters = () => { + const fieldArr = Object.values(curComponent.value.checkedFieldsMap).filter(ele => !!ele) + curComponent.value.parameters = fields.value + .map(ele => Object.values(ele?.fields || {}).flat()) + .flat() + .filter(ele => fieldArr.includes(ele.id) && !!ele.variableName) + nextTick(() => { + if (isTimeParameter.value) { + curComponent.value.timeGranularity = typeTimeMap[curComponent.value.parameters[0].type[1]] + } + + if (!!curComponent.value.parameters.length) { + curComponent.value.conditionType = 0 + } + }) + setType() +} + const setType = () => { if (curComponent.value.checkedFields?.length) { const [id] = curComponent.value.checkedFields const arr = fields.value.find(ele => ele.componentId === id) const checkId = curComponent.value.checkedFieldsMap?.[id] - const field = (arr?.list || []).find(ele => checkId === ele.id) + const field = Object.values(arr?.fields || {}) + .flat() + .find(ele => checkId === ele.id) if (field?.deType !== undefined) { let displayType = curComponent.value.displayType @@ -220,6 +237,47 @@ const setTypeChange = () => { }) } +const isTimeParameter = computed(() => { + return curComponent.value.parameters?.some(ele => ele.deType === 1 && !!ele.variableName) +}) + +const timeList = [ + { + label: '年', + value: 'year' + }, + { + label: '年月', + value: 'month' + }, + { + label: '年月日', + value: 'date' + }, + { + label: '年月日时分秒', + value: 'datetime' + } +] + +const typeTimeMap = { + 'DATETIME-YEAR': 'year', + 'YYYY-MM': 'month', + 'YYYY/MM': 'month', + 'YYYY-MM-DD': 'date', + 'YYYY/MM/DD': 'date', + 'YYYY-MM-DD HH:mm:ss': 'datetime', + 'YYYY/MM/DD HH:mm:ss': 'datetime' +} + +const timeParameterList = computed(() => { + if (!isTimeParameter.value) return timeList + const [_, y] = curComponent.value.parameters?.filter( + ele => ele.deType === 1 && !!ele.variableName + )[0].type + return timeList.filter(ele => ele.value === typeTimeMap[y]) +}) + const cancelClick = () => { visiblePopover.value = false dialogVisible.value = false @@ -542,7 +600,9 @@ const validate = () => { ele.checkedFields.some(id => { const arr = fields.value.find(itx => itx.componentId === id) const checkId = ele.checkedFieldsMap?.[id] - const field = (arr?.list || []).find(itx => checkId === itx.id) + const field = Object.values(arr?.fields || {}) + .flat() + .find(itx => checkId === itx.id) if (!field) return false if (displayTypeField === null) { displayTypeField = field?.deType @@ -642,14 +702,6 @@ const init = (queryId: string) => { const datasetMapKeyList = Object.keys(datasetMap) - nextTick(() => { - getSqlParams([ - ...new Set(datasetFieldList.value.map(ele => ele.tableId).filter(ele => !!ele)) - ]).then(res => { - parameters.value = res || [] - }) - }) - if (datasetFieldIdList.every(ele => datasetMapKeyList.includes(ele))) { fields.value = datasetFieldList.value .map(ele => { @@ -660,15 +712,14 @@ const init = (queryId: string) => { } const params = [...new Set(datasetFieldList.value.map(ele => ele.tableId).filter(ele => !!ele))] if (!params.length) return - getDsDetailsWithPerm(params) - .then(res => { - res - .filter(ele => !!ele) - .forEach(ele => { - const { dimensionList, quotaList } = ele.fields - ele.list = [...dimensionList, ...quotaList] - datasetMap[ele.id] = ele - }) + Promise.all([getDsDetailsWithPerm(params), getSqlParams(params)]) + .then(([dq, p]) => { + dq.filter(ele => !!ele).forEach(ele => { + ele.activelist = 'dimensionList' + ele.fields.parameterList = p.filter(itx => itx.datasetGroupId === ele.id) + ele.hasParameter = !!ele.fields.parameterList.length + datasetMap[ele.id] = ele + }) fields.value = datasetFieldList.value .map(ele => { if (!datasetMap[ele.tableId]) return null @@ -1169,9 +1220,10 @@ defineExpose({ > {{ field.name }} + @@ -1209,8 +1278,8 @@ defineExpose({ :className="`field-icon-${fieldType[ele.deType]}`" > - - {{ ele.name }} + + {{ ele.name || ele.variableName }}
@@ -1276,7 +1345,7 @@ defineExpose({
时间粒度
-