diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/IndicatorHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/IndicatorHandler.java index e39125fcb5..8ff6b8c71d 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/IndicatorHandler.java +++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/IndicatorHandler.java @@ -10,6 +10,7 @@ import org.springframework.stereotype.Component; import java.util.List; import java.util.Map; +import java.util.Objects; @Component public class IndicatorHandler extends YoyChartHandler { @@ -36,23 +37,19 @@ public class IndicatorHandler extends YoyChartHandler { var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis); var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis); var allFields = (List) filterResult.getContext().get("allFields"); - ChartViewFieldDTO chartViewFieldDTO = yAxis.get(0); - ChartFieldCompareDTO compareCalc = chartViewFieldDTO.getCompareCalc(); + ChartViewFieldDTO yAxisChartViewFieldDTO = yAxis.get(0); + ChartFieldCompareDTO compareCalc = yAxisChartViewFieldDTO.getCompareCalc(); boolean isYoy = org.apache.commons.lang3.StringUtils.isNotEmpty(compareCalc.getType()) && !org.apache.commons.lang3.StringUtils.equalsIgnoreCase(compareCalc.getType(), "none"); if (isYoy) { xAxis.clear(); // 设置维度字段,从同环比中获取用户选择的字段 - xAxis.addAll(allFields.stream().filter(i -> org.springframework.util.StringUtils.endsWithIgnoreCase(i.getId().toString(), yAxis.get(0).getCompareCalc().getField().toString())).toList()); + xAxis.addAll(allFields.stream().filter(i -> org.springframework.util.StringUtils.endsWithIgnoreCase(i.getId().toString(), compareCalc.getField().toString())).toList()); xAxis.get(0).setSort("desc"); - if (org.springframework.util.StringUtils.endsWithIgnoreCase("month_mom", compareCalc.getType())) { - xAxis.get(0).setDateStyle("y_M"); - } - if (org.springframework.util.StringUtils.endsWithIgnoreCase("day_mom", compareCalc.getType())) { + if(Objects.isNull(compareCalc.getCustom())){ xAxis.get(0).setDateStyle("y_M_d"); - } - if (org.springframework.util.StringUtils.endsWithIgnoreCase("year_mom", compareCalc.getType())) { - xAxis.get(0).setDateStyle("y"); + }else{ + xAxis.get(0).setDateStyle(compareCalc.getCustom().getTimeType()); } } formatResult.getAxisMap().put(ChartAxis.xAxis, xAxis); diff --git a/core/core-backend/src/main/java/io/dataease/chart/dao/auto/entity/CoreChartView.java b/core/core-backend/src/main/java/io/dataease/chart/dao/auto/entity/CoreChartView.java index a3444089e9..7b35082b79 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/dao/auto/entity/CoreChartView.java +++ b/core/core-backend/src/main/java/io/dataease/chart/dao/auto/entity/CoreChartView.java @@ -137,7 +137,7 @@ public class CoreChartView implements Serializable { private Long updateTime; /** - * 缩略图 + * 缩略图 */ private String snapshot; @@ -206,6 +206,16 @@ public class CoreChartView implements Serializable { */ private Boolean aggregate; + private String flowMapStartName; + + private String flowMapEndName; + + /** + * 颜色维度field + */ + private String extColor; + + public Long getId() { return id; } @@ -510,6 +520,30 @@ public class CoreChartView implements Serializable { this.aggregate = aggregate; } + public String getFlowMapStartName() { + return flowMapStartName; + } + + public void setFlowMapStartName(String flowMapStartName) { + this.flowMapStartName = flowMapStartName; + } + + public String getFlowMapEndName() { + return flowMapEndName; + } + + public void setFlowMapEndName(String flowMapEndName) { + this.flowMapEndName = flowMapEndName; + } + + public String getExtColor() { + return extColor; + } + + public void setExtColor(String extColor) { + this.extColor = extColor; + } + @Override public String toString() { return "CoreChartView{" + @@ -551,6 +585,9 @@ public class CoreChartView implements Serializable { ", copyFrom = " + copyFrom + ", copyId = " + copyId + ", aggregate = " + aggregate + + ", flowMapStartName=" + flowMapStartName + + ", flowMapEndName=" + flowMapEndName + + ", extColor=" + extColor + "}"; } } diff --git a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartViewManege.java b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartViewManege.java index 5f20b8780d..7fe8b9576f 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartViewManege.java +++ b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartViewManege.java @@ -329,6 +329,9 @@ public class ChartViewManege { record.setDrillFields(objectMapper.writeValueAsString(dto.getDrillFields())); record.setCustomFilter(objectMapper.writeValueAsString(dto.getCustomFilter())); record.setViewFields(objectMapper.writeValueAsString(dto.getViewFields())); + record.setFlowMapStartName(objectMapper.writeValueAsString(dto.getFlowMapStartName())); + record.setFlowMapEndName(objectMapper.writeValueAsString(dto.getFlowMapEndName())); + record.setExtColor(objectMapper.writeValueAsString(dto.getExtColor())); return record; } @@ -354,6 +357,9 @@ public class ChartViewManege { dto.setDrillFields(JsonUtil.parseList(record.getDrillFields(), tokenType)); dto.setCustomFilter(JsonUtil.parseObject(record.getCustomFilter(), FilterTreeObj.class)); dto.setViewFields(JsonUtil.parseList(record.getViewFields(), tokenType)); + dto.setFlowMapStartName(JsonUtil.parseList(record.getFlowMapStartName(), tokenType)); + dto.setFlowMapEndName(JsonUtil.parseList(record.getFlowMapEndName(), tokenType)); + dto.setExtColor(JsonUtil.parseList(record.getExtColor(), tokenType)); return dto; diff --git a/core/core-backend/src/main/resources/db/desktop/V2.10__ddl.sql b/core/core-backend/src/main/resources/db/desktop/V2.10__ddl.sql index 1f85815ebd..e3710f0e31 100644 --- a/core/core-backend/src/main/resources/db/desktop/V2.10__ddl.sql +++ b/core/core-backend/src/main/resources/db/desktop/V2.10__ddl.sql @@ -12,5 +12,13 @@ ALTER TABLE `visualization_outer_params_target_view_info` MODIFY COLUMN `target_view_id` varchar(50) NULL DEFAULT NULL COMMENT '联动视图ID/联动过滤项ID' , ADD COLUMN `target_ds_id` varchar(50) NULL COMMENT '联动数据集id/联动过滤组件id' ; + +alter table `core_chart_view` + add flow_map_start_name longtext comment '流向地图起点名称field'; +alter table `core_chart_view` + add flow_map_end_name longtext comment '流向地图终点名称field'; +alter table `core_chart_view` + add ext_color longtext comment '颜色维度field'; + update visualization_outer_params_target_view_info tvi INNER JOIN core_chart_view ccv on tvi.target_view_id = ccv.id set tvi.target_ds_id = ccv.table_id diff --git a/core/core-backend/src/main/resources/db/migration/V2.10__ddl.sql b/core/core-backend/src/main/resources/db/migration/V2.10__ddl.sql index 8e15ad470b..0ed36649c2 100644 --- a/core/core-backend/src/main/resources/db/migration/V2.10__ddl.sql +++ b/core/core-backend/src/main/resources/db/migration/V2.10__ddl.sql @@ -61,5 +61,12 @@ ALTER TABLE `visualization_outer_params_target_view_info` MODIFY COLUMN `target_view_id` varchar(50) NULL DEFAULT NULL COMMENT '联动视图ID/联动过滤项ID' , ADD COLUMN `target_ds_id` varchar(50) NULL COMMENT '联动数据集id/联动过滤组件id' ; +alter table `core_chart_view` + add flow_map_start_name longtext comment '流向地图起点名称field'; +alter table `core_chart_view` + add flow_map_end_name longtext comment '流向地图终点名称field'; +alter table `core_chart_view` + add ext_color longtext comment '颜色维度field'; + update visualization_outer_params_target_view_info tvi INNER JOIN core_chart_view ccv on tvi.target_view_id = ccv.id set tvi.target_ds_id = ccv.table_id diff --git a/core/core-frontend/src/components/data-visualization/canvas/ContextMenuDetails.vue b/core/core-frontend/src/components/data-visualization/canvas/ContextMenuDetails.vue index 91d0e726c1..9dac63bb6d 100644 --- a/core/core-frontend/src/components/data-visualization/canvas/ContextMenuDetails.vue +++ b/core/core-frontend/src/components/data-visualization/canvas/ContextMenuDetails.vue @@ -11,6 +11,7 @@ import { ElDivider } from 'element-plus-secondary' import eventBus from '@/utils/eventBus' import { getCurInfo } from '@/store/modules/data-visualization/common' import { useEmitt } from '@/hooks/web/useEmitt' +import { XpackComponent } from '@/components/plugin' const dvMainStore = dvMainStoreWithOut() const copyStore = copyStoreWithOut() const lockStore = lockStoreWithOut() @@ -245,6 +246,11 @@ const editQueryCriteria = () => {
  • 下移一层
  • 置于顶层
  • 置于底层
  • +
  • - + - + { :base-url="aiBaseUrl" >
    -
    +
    diff --git a/core/core-frontend/src/store/modules/appearance.ts b/core/core-frontend/src/store/modules/appearance.ts index 31c94c3f02..a755618e4a 100644 --- a/core/core-frontend/src/store/modules/appearance.ts +++ b/core/core-frontend/src/store/modules/appearance.ts @@ -12,8 +12,11 @@ interface AppearanceState { customColor?: string navigateBg?: string navigate?: string + mobileLogin?: string + mobileLoginBg?: string help?: string showAi?: string + showCopilot?: string showDoc?: string showAbout?: string bg?: string @@ -36,9 +39,12 @@ export const useAppearanceStore = defineStore('appearanceStore', { customColor: '', navigateBg: '', navigate: '', + mobileLogin: '', + mobileLoginBg: '', help: '', showDoc: '0', showAi: '0', + showCopilot: '0', showAbout: '0', bg: '', login: '', @@ -60,6 +66,18 @@ export const useAppearanceStore = defineStore('appearanceStore', { } return null }, + getMobileLogin(): string { + if (this.mobileLogin) { + return baseUrl + this.mobileLogin + } + return null + }, + getMobileLoginBg(): string { + if (this.mobileLoginBg) { + return baseUrl + this.mobileLoginBg + } + return null + }, getHelp(): string { return this.help }, @@ -117,6 +135,9 @@ export const useAppearanceStore = defineStore('appearanceStore', { getShowAi(): boolean { return isBtnShow(this.showAi) }, + getShowCopilot(): boolean { + return isBtnShow(this.showCopilot) + }, getShowDoc(): boolean { return isBtnShow(this.showDoc) }, @@ -128,6 +149,12 @@ export const useAppearanceStore = defineStore('appearanceStore', { setNavigate(data: string) { this.navigate = data }, + setMobileLogin(data: string) { + this.mobileLogin = data + }, + setMobileLoginBg(data: string) { + this.mobileLoginBg = data + }, setHelp(data: string) { this.help = data }, @@ -177,8 +204,11 @@ export const useAppearanceStore = defineStore('appearanceStore', { return } this.navigate = data.navigate + this.mobileLogin = data.mobileLogin + this.mobileLoginBg = data.mobileLoginBg this.help = data.help this.showAi = data.showAi + this.showCopilot = data.showCopilot this.showDoc = data.showDoc this.showAbout = data.showAbout this.navigateBg = data.navigateBg diff --git a/core/core-frontend/src/views/about/index.vue b/core/core-frontend/src/views/about/index.vue index c436f51dfa..64fac972ed 100644 --- a/core/core-frontend/src/views/about/index.vue +++ b/core/core-frontend/src/views/about/index.vue @@ -81,7 +81,10 @@ const setLicense = lic => { dynamicCardClass.value = 'about-card-medium' } } - +const removeDistributeModule = () => { + const key = 'xpack-model-distributed' + localStorage.removeItem(key) +} const importLic = file => { const reader = new FileReader() reader.onload = function (e) { @@ -93,6 +96,7 @@ const importLic = file => { reader.readAsText(file) } const validateHandler = (param, success) => { + removeDistributeModule() validateApi(param).then(success) } const getLicense = result => { diff --git a/core/core-frontend/src/views/chart/components/editor/drag-item/QuotaItem.vue b/core/core-frontend/src/views/chart/components/editor/drag-item/QuotaItem.vue index 7cb7e1b1d0..7b069feba5 100644 --- a/core/core-frontend/src/views/chart/components/editor/drag-item/QuotaItem.vue +++ b/core/core-frontend/src/views/chart/components/editor/drag-item/QuotaItem.vue @@ -402,7 +402,7 @@ onMounted(() => { --> { + const checkedField = state.fieldList.filter(ele => ele.id === compareItem.value.compareCalc.field) + if (checkedField && checkedField.length > 0) { + checkedField[0].dateStyle = state.dateFormatter + if (!compareItem.value.compareCalc.custom) { + compareItem.value.compareCalc.custom = { timeType: 'y_M_d' } + } + compareItem.value.compareCalc.custom.timeType = state.dateFormatter + } + initCompareType() +} + +const initDateFormatter = () => { + const timeType = compareItem.value.compareCalc.custom?.timeType + if (isIndicator.value && timeType) { + state.dateFormatter = timeType + changeDateFormatter() + } +} + watch( () => props.chart, () => { initFieldList() initCompareType() + initDateFormatter() }, { deep: true } ) @@ -109,15 +137,6 @@ const initCompareType = () => { } else { state.compareList = [] } - if (isIndicator.value) { - state.compareList = [ - { name: 'day_mom', value: 'day_mom' }, - { name: 'month_mom', value: 'month_mom' }, - { name: 'year_mom', value: 'year_mom' }, - { name: 'month_yoy', value: 'month_yoy' }, - { name: 'year_yoy', value: 'year_yoy' } - ] - } // 如果没有选中一个同环比类型,则默认选中第一个 if ( (!compareItem.value.compareCalc.type || @@ -136,9 +155,9 @@ const fieldFormatter = field => { return field.name + '(' + t('chart.' + field.dateStyle) + ')' } } - initFieldList() initCompareType() +initDateFormatter()