From 58fd0a56bf0b512ec06cb530a25aefda8e9565e8 Mon Sep 17 00:00:00 2001 From: junjun Date: Thu, 3 Mar 2022 18:30:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A7=86=E5=9B=BE=E9=AB=98=E7=BA=A7?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/base/domain/ChartView.java | 37 ++- .../base/domain/ChartViewExample.java | 282 ++++++++-------- .../base/domain/ChartViewWithBLOBs.java | 27 +- .../dataease/base/mapper/ChartViewMapper.xml | 131 ++++---- .../base/mapper/ext/ExtChartViewMapper.xml | 309 ++++++++++-------- .../main/resources/db/migration/V33__1.9.sql | 2 + .../src/main/resources/generatorConfig.xml | 4 +- frontend/src/lang/en.js | 12 +- frontend/src/lang/tw.js | 12 +- frontend/src/lang/zh.js | 12 +- .../src/views/chart/chart/bar/bar_antv.js | 8 +- frontend/src/views/chart/chart/chart.js | 4 + .../views/chart/chart/common/common_antv.js | 17 + .../src/views/chart/chart/line/line_antv.js | 17 +- .../views/chart/chart/scatter/scatter_antv.js | 14 +- .../chart/components/senior/AssistLine.vue | 172 ++++++++++ .../chart/components/senior/FunctionCfg.vue | 101 ++++++ .../senior/dialog/AssistLineEdit.vue | 148 +++++++++ frontend/src/views/chart/group/Group.vue | 7 +- frontend/src/views/chart/view/ChartEdit.vue | 62 +++- 20 files changed, 1000 insertions(+), 378 deletions(-) create mode 100644 backend/src/main/resources/db/migration/V33__1.9.sql create mode 100644 frontend/src/views/chart/components/senior/AssistLine.vue create mode 100644 frontend/src/views/chart/components/senior/FunctionCfg.vue create mode 100644 frontend/src/views/chart/components/senior/dialog/AssistLineEdit.vue diff --git a/backend/src/main/java/io/dataease/base/domain/ChartView.java b/backend/src/main/java/io/dataease/base/domain/ChartView.java index 569746859c..dd6a16307b 100644 --- a/backend/src/main/java/io/dataease/base/domain/ChartView.java +++ b/backend/src/main/java/io/dataease/base/domain/ChartView.java @@ -1,39 +1,42 @@ package io.dataease.base.domain; import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class ChartView implements Serializable { + @ApiModelProperty("ID") private String id; - + @ApiModelProperty("名称") private String name; - - private String title; - - private String sceneId; - + @ApiModelProperty("数据集ID") private String tableId; - + @ApiModelProperty("图表类型") private String type; - + @ApiModelProperty("渲染方式") private String render; - + @ApiModelProperty("展示结果数量") private Integer resultCount; - + @ApiModelProperty("展示结果") private String resultMode; - + @ApiModelProperty("标题") + private String title; + @ApiModelProperty("场景ID") + private String sceneId; + @ApiModelProperty("创建人") private String createBy; - + @ApiModelProperty("创建时间") private Long createTime; - + @ApiModelProperty("更新时间") private Long updateTime; - + @ApiModelProperty("样式优先级") private String stylePriority; - + @ApiModelProperty("public or private") private String chartType; - + @ApiModelProperty("是否插件") private Boolean isPlugin; private static final long serialVersionUID = 1L; -} \ No newline at end of file +} diff --git a/backend/src/main/java/io/dataease/base/domain/ChartViewExample.java b/backend/src/main/java/io/dataease/base/domain/ChartViewExample.java index 51a45711b1..f4d44ca52a 100644 --- a/backend/src/main/java/io/dataease/base/domain/ChartViewExample.java +++ b/backend/src/main/java/io/dataease/base/domain/ChartViewExample.java @@ -244,146 +244,6 @@ public class ChartViewExample { return (Criteria) this; } - public Criteria andTitleIsNull() { - addCriterion("title is null"); - return (Criteria) this; - } - - public Criteria andTitleIsNotNull() { - addCriterion("title is not null"); - return (Criteria) this; - } - - public Criteria andTitleEqualTo(String value) { - addCriterion("title =", value, "title"); - return (Criteria) this; - } - - public Criteria andTitleNotEqualTo(String value) { - addCriterion("title <>", value, "title"); - return (Criteria) this; - } - - public Criteria andTitleGreaterThan(String value) { - addCriterion("title >", value, "title"); - return (Criteria) this; - } - - public Criteria andTitleGreaterThanOrEqualTo(String value) { - addCriterion("title >=", value, "title"); - return (Criteria) this; - } - - public Criteria andTitleLessThan(String value) { - addCriterion("title <", value, "title"); - return (Criteria) this; - } - - public Criteria andTitleLessThanOrEqualTo(String value) { - addCriterion("title <=", value, "title"); - return (Criteria) this; - } - - public Criteria andTitleLike(String value) { - addCriterion("title like", value, "title"); - return (Criteria) this; - } - - public Criteria andTitleNotLike(String value) { - addCriterion("title not like", value, "title"); - return (Criteria) this; - } - - public Criteria andTitleIn(List values) { - addCriterion("title in", values, "title"); - return (Criteria) this; - } - - public Criteria andTitleNotIn(List values) { - addCriterion("title not in", values, "title"); - return (Criteria) this; - } - - public Criteria andTitleBetween(String value1, String value2) { - addCriterion("title between", value1, value2, "title"); - return (Criteria) this; - } - - public Criteria andTitleNotBetween(String value1, String value2) { - addCriterion("title not between", value1, value2, "title"); - return (Criteria) this; - } - - public Criteria andSceneIdIsNull() { - addCriterion("scene_id is null"); - return (Criteria) this; - } - - public Criteria andSceneIdIsNotNull() { - addCriterion("scene_id is not null"); - return (Criteria) this; - } - - public Criteria andSceneIdEqualTo(String value) { - addCriterion("scene_id =", value, "sceneId"); - return (Criteria) this; - } - - public Criteria andSceneIdNotEqualTo(String value) { - addCriterion("scene_id <>", value, "sceneId"); - return (Criteria) this; - } - - public Criteria andSceneIdGreaterThan(String value) { - addCriterion("scene_id >", value, "sceneId"); - return (Criteria) this; - } - - public Criteria andSceneIdGreaterThanOrEqualTo(String value) { - addCriterion("scene_id >=", value, "sceneId"); - return (Criteria) this; - } - - public Criteria andSceneIdLessThan(String value) { - addCriterion("scene_id <", value, "sceneId"); - return (Criteria) this; - } - - public Criteria andSceneIdLessThanOrEqualTo(String value) { - addCriterion("scene_id <=", value, "sceneId"); - return (Criteria) this; - } - - public Criteria andSceneIdLike(String value) { - addCriterion("scene_id like", value, "sceneId"); - return (Criteria) this; - } - - public Criteria andSceneIdNotLike(String value) { - addCriterion("scene_id not like", value, "sceneId"); - return (Criteria) this; - } - - public Criteria andSceneIdIn(List values) { - addCriterion("scene_id in", values, "sceneId"); - return (Criteria) this; - } - - public Criteria andSceneIdNotIn(List values) { - addCriterion("scene_id not in", values, "sceneId"); - return (Criteria) this; - } - - public Criteria andSceneIdBetween(String value1, String value2) { - addCriterion("scene_id between", value1, value2, "sceneId"); - return (Criteria) this; - } - - public Criteria andSceneIdNotBetween(String value1, String value2) { - addCriterion("scene_id not between", value1, value2, "sceneId"); - return (Criteria) this; - } - public Criteria andTableIdIsNull() { addCriterion("table_id is null"); return (Criteria) this; @@ -724,6 +584,146 @@ public class ChartViewExample { return (Criteria) this; } + public Criteria andTitleIsNull() { + addCriterion("title is null"); + return (Criteria) this; + } + + public Criteria andTitleIsNotNull() { + addCriterion("title is not null"); + return (Criteria) this; + } + + public Criteria andTitleEqualTo(String value) { + addCriterion("title =", value, "title"); + return (Criteria) this; + } + + public Criteria andTitleNotEqualTo(String value) { + addCriterion("title <>", value, "title"); + return (Criteria) this; + } + + public Criteria andTitleGreaterThan(String value) { + addCriterion("title >", value, "title"); + return (Criteria) this; + } + + public Criteria andTitleGreaterThanOrEqualTo(String value) { + addCriterion("title >=", value, "title"); + return (Criteria) this; + } + + public Criteria andTitleLessThan(String value) { + addCriterion("title <", value, "title"); + return (Criteria) this; + } + + public Criteria andTitleLessThanOrEqualTo(String value) { + addCriterion("title <=", value, "title"); + return (Criteria) this; + } + + public Criteria andTitleLike(String value) { + addCriterion("title like", value, "title"); + return (Criteria) this; + } + + public Criteria andTitleNotLike(String value) { + addCriterion("title not like", value, "title"); + return (Criteria) this; + } + + public Criteria andTitleIn(List values) { + addCriterion("title in", values, "title"); + return (Criteria) this; + } + + public Criteria andTitleNotIn(List values) { + addCriterion("title not in", values, "title"); + return (Criteria) this; + } + + public Criteria andTitleBetween(String value1, String value2) { + addCriterion("title between", value1, value2, "title"); + return (Criteria) this; + } + + public Criteria andTitleNotBetween(String value1, String value2) { + addCriterion("title not between", value1, value2, "title"); + return (Criteria) this; + } + + public Criteria andSceneIdIsNull() { + addCriterion("scene_id is null"); + return (Criteria) this; + } + + public Criteria andSceneIdIsNotNull() { + addCriterion("scene_id is not null"); + return (Criteria) this; + } + + public Criteria andSceneIdEqualTo(String value) { + addCriterion("scene_id =", value, "sceneId"); + return (Criteria) this; + } + + public Criteria andSceneIdNotEqualTo(String value) { + addCriterion("scene_id <>", value, "sceneId"); + return (Criteria) this; + } + + public Criteria andSceneIdGreaterThan(String value) { + addCriterion("scene_id >", value, "sceneId"); + return (Criteria) this; + } + + public Criteria andSceneIdGreaterThanOrEqualTo(String value) { + addCriterion("scene_id >=", value, "sceneId"); + return (Criteria) this; + } + + public Criteria andSceneIdLessThan(String value) { + addCriterion("scene_id <", value, "sceneId"); + return (Criteria) this; + } + + public Criteria andSceneIdLessThanOrEqualTo(String value) { + addCriterion("scene_id <=", value, "sceneId"); + return (Criteria) this; + } + + public Criteria andSceneIdLike(String value) { + addCriterion("scene_id like", value, "sceneId"); + return (Criteria) this; + } + + public Criteria andSceneIdNotLike(String value) { + addCriterion("scene_id not like", value, "sceneId"); + return (Criteria) this; + } + + public Criteria andSceneIdIn(List values) { + addCriterion("scene_id in", values, "sceneId"); + return (Criteria) this; + } + + public Criteria andSceneIdNotIn(List values) { + addCriterion("scene_id not in", values, "sceneId"); + return (Criteria) this; + } + + public Criteria andSceneIdBetween(String value1, String value2) { + addCriterion("scene_id between", value1, value2, "sceneId"); + return (Criteria) this; + } + + public Criteria andSceneIdNotBetween(String value1, String value2) { + addCriterion("scene_id not between", value1, value2, "sceneId"); + return (Criteria) this; + } + public Criteria andCreateByIsNull() { addCriterion("create_by is null"); return (Criteria) this; @@ -1207,4 +1207,4 @@ public class ChartViewExample { this(condition, value, secondValue, null); } } -} \ No newline at end of file +} diff --git a/backend/src/main/java/io/dataease/base/domain/ChartViewWithBLOBs.java b/backend/src/main/java/io/dataease/base/domain/ChartViewWithBLOBs.java index d928332ac5..f0492a42d3 100644 --- a/backend/src/main/java/io/dataease/base/domain/ChartViewWithBLOBs.java +++ b/backend/src/main/java/io/dataease/base/domain/ChartViewWithBLOBs.java @@ -1,6 +1,8 @@ package io.dataease.base.domain; import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; @@ -9,27 +11,30 @@ import lombok.ToString; @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) public class ChartViewWithBLOBs extends ChartView implements Serializable { + @ApiModelProperty("x轴") private String xAxis; - + @ApiModelProperty("x副轴") private String xAxisExt; - + @ApiModelProperty("y轴") private String yAxis; - + @ApiModelProperty("y副轴") private String yAxisExt; - + @ApiModelProperty("堆叠字段") private String extStack; - + @ApiModelProperty("气泡大小字段") private String extBubble; - + @ApiModelProperty("图形属性") private String customAttr; - + @ApiModelProperty("组件样式") private String customStyle; - + @ApiModelProperty("过滤器字段") private String customFilter; - + @ApiModelProperty("下钻字段") private String drillFields; - + @ApiModelProperty("高级设置") + private String senior; + @ApiModelProperty("视图截图快照") private String snapshot; private static final long serialVersionUID = 1L; -} \ No newline at end of file +} diff --git a/backend/src/main/java/io/dataease/base/mapper/ChartViewMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ChartViewMapper.xml index d7e9404ad0..c8d1f5c55f 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ChartViewMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ChartViewMapper.xml @@ -4,13 +4,13 @@ - - + + @@ -29,6 +29,7 @@ + @@ -90,12 +91,12 @@ - id, `name`, title, scene_id, table_id, `type`, render, result_count, result_mode, + id, `name`, table_id, `type`, render, result_count, result_mode, title, scene_id, create_by, create_time, update_time, style_priority, chart_type, is_plugin - x_axis, x_axis_ext, y_axis, y_axis_ext, ext_stack, ext_bubble, custom_attr, custom_style, - custom_filter, drill_fields, snapshot + x_axis, x_axis_ext, y_axis, y_axis_ext, ext_stack, ext_bubble, custom_attr, custom_style, + custom_filter, drill_fields, senior, snapshot - select - chart_view.* - from chart_view where id = #{id} + select chart_view.* + from chart_view + where id = #{id} - INSERT INTO chart_view ( - `id`, - `name`, - `scene_id`, - `table_id`, - `type`, - `title`, - `x_axis`, - `x_axis_ext`, - `y_axis`, - `custom_attr`, - `custom_style`, - `custom_filter`, - `drill_fields`, - `create_by`, - `create_time`, - `update_time`, - `snapshot`, - `style_priority`, - `ext_stack`, - `ext_bubble`, - `y_axis_ext`, - `render`, - `result_count`, - `result_mode`, - `chart_type` - ) SELECT - #{newChartId}, - GET_CHART_VIEW_COPY_NAME ( #{oldChartId} ), - #{panelId}, - `table_id`, - `type`, - GET_CHART_VIEW_COPY_NAME ( #{oldChartId} ), - `x_axis`, - `x_axis_ext`, - `y_axis`, - `custom_attr`, - `custom_style`, - `custom_filter`, - `drill_fields`, - `create_by`, - `create_time`, - `update_time`, - `snapshot`, - `style_priority`, - `ext_stack`, - `ext_bubble`, - `y_axis_ext`, - `render`, - `result_count`, - `result_mode`, - 'private' - FROM - chart_view - WHERE - id = #{oldChartId} + INSERT INTO chart_view (`id`, + `name`, + `scene_id`, + `table_id`, + `type`, + `title`, + `x_axis`, + `x_axis_ext`, + `y_axis`, + `custom_attr`, + `custom_style`, + `custom_filter`, + `drill_fields`, + `create_by`, + `create_time`, + `update_time`, + `snapshot`, + `style_priority`, + `ext_stack`, + `ext_bubble`, + `y_axis_ext`, + `render`, + `result_count`, + `result_mode`, + `chart_type`, + `senior`) + SELECT #{newChartId}, + GET_CHART_VIEW_COPY_NAME(#{oldChartId}), + #{panelId}, + `table_id`, + `type`, + GET_CHART_VIEW_COPY_NAME(#{oldChartId}), + `x_axis`, + `x_axis_ext`, + `y_axis`, + `custom_attr`, + `custom_style`, + `custom_filter`, + `drill_fields`, + `create_by`, + `create_time`, + `update_time`, + `snapshot`, + `style_priority`, + `ext_stack`, + `ext_bubble`, + `y_axis_ext`, + `render`, + `result_count`, + `result_mode`, + 'private', + `senior` + FROM chart_view + WHERE id = #{oldChartId} - - INSERT INTO chart_view ( - id, - `name`, - title, - scene_id, - table_id, - `type`, - render, - result_count, - result_mode, - create_by, - create_time, - update_time, - style_priority, - chart_type, - is_plugin, - x_axis, - x_axis_ext, - y_axis, - y_axis_ext, - ext_stack, - ext_bubble, - custom_attr, - custom_style, - custom_filter, - drill_fields, - SNAPSHOT - ) SELECT - pv_copy.chart_view_id AS id, - `name`, - title, - pv_copy.panel_id AS scene_id, - table_id, - `type`, - render, - result_count, - result_mode, - create_by, - create_time, - update_time, - style_priority, - chart_type, - is_plugin, - x_axis, - x_axis_ext, - y_axis, - y_axis_ext, - ext_stack, - ext_bubble, - custom_attr, - custom_style, - custom_filter, - drill_fields, - SNAPSHOT - FROM - ( - SELECT - panel_id, - copy_from_view, - chart_view_id - FROM - panel_view - WHERE - copy_id = #{copyId} - ) pv_copy - LEFT JOIN chart_view ON chart_view.id = pv_copy.copy_from_view + + INSERT INTO chart_view (id, + `name`, + title, + scene_id, + table_id, + `type`, + render, + result_count, + result_mode, + create_by, + create_time, + update_time, + style_priority, + chart_type, + is_plugin, + x_axis, + x_axis_ext, + y_axis, + y_axis_ext, + ext_stack, + ext_bubble, + custom_attr, + custom_style, + custom_filter, + drill_fields, + SNAPSHOT) + SELECT pv_copy.chart_view_id AS id, + `name`, + title, + pv_copy.panel_id AS scene_id, + table_id, + `type`, + render, + result_count, + result_mode, + create_by, + create_time, + update_time, + style_priority, + chart_type, + is_plugin, + x_axis, + x_axis_ext, + y_axis, + y_axis_ext, + ext_stack, + ext_bubble, + custom_attr, + custom_style, + custom_filter, + drill_fields, + SNAPSHOT + FROM ( + SELECT panel_id, + copy_from_view, + chart_view_id + FROM panel_view + WHERE copy_id = #{copyId} + ) pv_copy + LEFT JOIN chart_view ON chart_view.id = pv_copy.copy_from_view - delete chart_view from (select GET_CHART_GROUP_WITH_CHILDREN(#{pid}) cids) t,chart_view where FIND_IN_SET(chart_view.id,cids) and chart_type='public' + delete + chart_view from (select GET_CHART_GROUP_WITH_CHILDREN( + #{pid} + ) + cids + ) + t, + chart_view + where + FIND_IN_SET + ( + chart_view + . + id, + cids + ) + and + chart_type + = + 'public' - delete chart_group from (select GET_CHART_GROUP_WITH_CHILDREN(#{pid}) cids) t,chart_group where FIND_IN_SET(chart_group.id,cids) + delete + chart_group from (select GET_CHART_GROUP_WITH_CHILDREN( + #{pid} + ) + cids + ) + t, + chart_group + where + FIND_IN_SET + ( + chart_group + . + id, + cids + ) diff --git a/backend/src/main/resources/db/migration/V33__1.9.sql b/backend/src/main/resources/db/migration/V33__1.9.sql new file mode 100644 index 0000000000..d182498b0b --- /dev/null +++ b/backend/src/main/resources/db/migration/V33__1.9.sql @@ -0,0 +1,2 @@ +ALTER TABLE `chart_view` ADD COLUMN `senior` LONGTEXT COMMENT '高级' AFTER `drill_fields`; +UPDATE `chart_view` SET `senior` = '{}'; diff --git a/backend/src/main/resources/generatorConfig.xml b/backend/src/main/resources/generatorConfig.xml index f50178f11f..887d67ee08 100644 --- a/backend/src/main/resources/generatorConfig.xml +++ b/backend/src/main/resources/generatorConfig.xml @@ -60,8 +60,8 @@ - - + +
diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 0b8b52bd60..c5c1abbefa 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -1029,7 +1029,17 @@ export default { table_item_align: 'Body Align', table_align_left: 'Left', table_align_center: 'Center', - table_align_right: 'Right' + table_align_right: 'Right', + senior: 'Senior', + senior_cfg: 'Senior Config', + function_cfg: 'Function Config', + analyse_cfg: 'Analyse', + slider: 'Slider', + slider_range: 'Range', + chart_no_senior: 'This chart type not support senior config,please look forward to.', + assist_line: 'Assist Line', + field_fixed: 'Fixed', + line_type_dotted: 'Dotted' }, dataset: { sheet_warn: 'There are multiple sheet pages, and the first one is extracted by default', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 16b9565570..ba3d1b8d64 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -1029,7 +1029,17 @@ export default { table_item_align: '表格對齊方式', table_align_left: '左對齊', table_align_center: '居中', - table_align_right: '右對齊' + table_align_right: '右對齊', + senior: '高級', + senior_cfg: '高級設置', + function_cfg: '功能設置', + analyse_cfg: '分析預警', + slider: '縮略軸', + slider_range: '默認範圍', + chart_no_senior: '當前圖表類型暫無高級配置,敬請期待', + assist_line: '輔助線', + field_fixed: '固定值', + line_type_dotted: '點' }, dataset: { sheet_warn: '有多個 Sheet 頁,默認抽取第一個', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index e8f9ffebca..d14d9aa389 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -1032,7 +1032,17 @@ export default { table_item_align: '表格对齐方式', table_align_left: '左对齐', table_align_center: '居中', - table_align_right: '右对齐' + table_align_right: '右对齐', + senior: '高级', + senior_cfg: '高级设置', + function_cfg: '功能设置', + analyse_cfg: '分析预警', + slider: '缩略轴', + slider_range: '默认范围', + chart_no_senior: '当前图表类型暂无高级配置,敬请期待', + assist_line: '辅助线', + field_fixed: '固定值', + line_type_dotted: '点' }, dataset: { sheet_warn: '有多个 Sheet 页,默认抽取第一个', diff --git a/frontend/src/views/chart/chart/bar/bar_antv.js b/frontend/src/views/chart/chart/bar/bar_antv.js index ded5f4bffa..6d0c33e91a 100644 --- a/frontend/src/views/chart/chart/bar/bar_antv.js +++ b/frontend/src/views/chart/chart/bar/bar_antv.js @@ -1,5 +1,5 @@ import { Column, Bar } from '@antv/g2plot' -import { getTheme, getLabel, getTooltip, getLegend, getXAxis, getYAxis, getPadding } from '@/views/chart/chart/common/common_antv' +import { getTheme, getLabel, getTooltip, getLegend, getXAxis, getYAxis, getPadding, getSlider } from '@/views/chart/chart/common/common_antv' export function baseBarOptionAntV(plot, container, chart, action, isGroup, isStack) { // theme @@ -13,6 +13,8 @@ export function baseBarOptionAntV(plot, container, chart, action, isGroup, isSta const yAxis = getYAxis(chart) // data const data = chart.data.datas + // config + const slider = getSlider(chart) // options const options = { theme: theme, @@ -26,6 +28,7 @@ export function baseBarOptionAntV(plot, container, chart, action, isGroup, isSta legend: legend, xAxis: xAxis, yAxis: yAxis, + slider: slider, interactions: [ { type: 'element-active', cfg: { @@ -108,6 +111,8 @@ export function hBaseBarOptionAntV(plot, container, chart, action, isGroup, isSt const yAxis = getYAxis(chart) // data const data = chart.data.datas + // config + const slider = getSlider(chart) // options const options = { theme: theme, @@ -121,6 +126,7 @@ export function hBaseBarOptionAntV(plot, container, chart, action, isGroup, isSt legend: legend, xAxis: xAxis, yAxis: yAxis, + slider: slider, interactions: [ { type: 'element-active', cfg: { diff --git a/frontend/src/views/chart/chart/chart.js b/frontend/src/views/chart/chart/chart.js index df770bd6e8..d7d62bcdee 100644 --- a/frontend/src/views/chart/chart/chart.js +++ b/frontend/src/views/chart/chart/chart.js @@ -240,6 +240,10 @@ export const DEFAULT_SPLIT = { show: true } } +export const DEFAULT_FUNCTION_CFG = { + sliderShow: false, + sliderRange: [0, 10] +} // chart config export const BASE_BAR = { title: { diff --git a/frontend/src/views/chart/chart/common/common_antv.js b/frontend/src/views/chart/chart/common/common_antv.js index 331a3e45dc..86a5d6c3e3 100644 --- a/frontend/src/views/chart/chart/common/common_antv.js +++ b/frontend/src/views/chart/chart/common/common_antv.js @@ -435,3 +435,20 @@ function transAxisPosition(chart, axis) { return axis.position } } + +export function getSlider(chart) { + let senior = {} + let cfg = false + if (chart.senior) { + senior = JSON.parse(chart.senior) + if (senior.functionCfg) { + if (senior.functionCfg.sliderShow) { + cfg = { + start: parseInt(senior.functionCfg.sliderRange[0]) / 100, + end: parseInt(senior.functionCfg.sliderRange[1]) / 100 + } + } + } + } + return cfg +} diff --git a/frontend/src/views/chart/chart/line/line_antv.js b/frontend/src/views/chart/chart/line/line_antv.js index 66e8c9b84c..d3fde91e1f 100644 --- a/frontend/src/views/chart/chart/line/line_antv.js +++ b/frontend/src/views/chart/chart/line/line_antv.js @@ -1,5 +1,14 @@ import { Line, Area } from '@antv/g2plot' -import { getTheme, getLabel, getTooltip, getLegend, getXAxis, getYAxis, getPadding } from '@/views/chart/chart/common/common_antv' +import { + getTheme, + getLabel, + getTooltip, + getLegend, + getXAxis, + getYAxis, + getPadding, + getSlider +} from '@/views/chart/chart/common/common_antv' export function baseLineOptionAntV(plot, container, chart, action) { // theme @@ -13,6 +22,8 @@ export function baseLineOptionAntV(plot, container, chart, action) { const yAxis = getYAxis(chart) // data const data = chart.data.datas + // config + const slider = getSlider(chart) // options const options = { point: {}, @@ -27,6 +38,7 @@ export function baseLineOptionAntV(plot, container, chart, action) { legend: legend, xAxis: xAxis, yAxis: yAxis, + slider: slider, interactions: [ { type: 'element-active', cfg: { @@ -100,6 +112,8 @@ export function baseAreaOptionAntV(plot, container, chart, action) { const yAxis = getYAxis(chart) // data const data = chart.data.datas + // config + const slider = getSlider(chart) // options const options = { point: {}, @@ -114,6 +128,7 @@ export function baseAreaOptionAntV(plot, container, chart, action) { legend: legend, xAxis: xAxis, yAxis: yAxis, + slider: slider, interactions: [ { type: 'element-active', cfg: { diff --git a/frontend/src/views/chart/chart/scatter/scatter_antv.js b/frontend/src/views/chart/chart/scatter/scatter_antv.js index 70592c85dd..274c4497d0 100644 --- a/frontend/src/views/chart/chart/scatter/scatter_antv.js +++ b/frontend/src/views/chart/chart/scatter/scatter_antv.js @@ -1,4 +1,13 @@ -import { getTheme, getLabel, getTooltip, getLegend, getXAxis, getYAxis, getPadding } from '@/views/chart/chart/common/common_antv' +import { + getTheme, + getLabel, + getTooltip, + getLegend, + getXAxis, + getYAxis, + getPadding, + getSlider +} from '@/views/chart/chart/common/common_antv' import { Scatter } from '@antv/g2plot' @@ -14,6 +23,8 @@ export function baseScatterOptionAntV(plot, container, chart, action) { const yAxis = getYAxis(chart) // data const data = chart.data.datas + // config + const slider = getSlider(chart) // options const options = { theme: theme, @@ -27,6 +38,7 @@ export function baseScatterOptionAntV(plot, container, chart, action) { legend: legend, xAxis: xAxis, yAxis: yAxis, + slider: slider, pieStyle: { lineWidth: 0 }, diff --git a/frontend/src/views/chart/components/senior/AssistLine.vue b/frontend/src/views/chart/components/senior/AssistLine.vue new file mode 100644 index 0000000000..13d523bbbb --- /dev/null +++ b/frontend/src/views/chart/components/senior/AssistLine.vue @@ -0,0 +1,172 @@ + + + + + diff --git a/frontend/src/views/chart/components/senior/FunctionCfg.vue b/frontend/src/views/chart/components/senior/FunctionCfg.vue new file mode 100644 index 0000000000..242b66233a --- /dev/null +++ b/frontend/src/views/chart/components/senior/FunctionCfg.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/frontend/src/views/chart/components/senior/dialog/AssistLineEdit.vue b/frontend/src/views/chart/components/senior/dialog/AssistLineEdit.vue new file mode 100644 index 0000000000..27b0449355 --- /dev/null +++ b/frontend/src/views/chart/components/senior/dialog/AssistLineEdit.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/frontend/src/views/chart/group/Group.vue b/frontend/src/views/chart/group/Group.vue index 5b89b3b00c..613c4d3e61 100644 --- a/frontend/src/views/chart/group/Group.vue +++ b/frontend/src/views/chart/group/Group.vue @@ -308,7 +308,8 @@ import { DEFAULT_YAXIS_STYLE, DEFAULT_YAXIS_EXT_STYLE, DEFAULT_BACKGROUND_COLOR, - DEFAULT_SPLIT + DEFAULT_SPLIT, + DEFAULT_FUNCTION_CFG } from '../chart/chart' export default { @@ -764,6 +765,10 @@ export default { background: DEFAULT_BACKGROUND_COLOR, split: DEFAULT_SPLIT }) + view.senior = JSON.stringify({ + functionCfg: DEFAULT_FUNCTION_CFG, + assistLine: [] + }) view.stylePriority = 'view' // 默认样式优先级视图 view.xaxis = JSON.stringify([]) view.xaxisExt = JSON.stringify([]) diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue index 84f8c778c6..1dcc6b0841 100644 --- a/frontend/src/views/chart/view/ChartEdit.vue +++ b/frontend/src/views/chart/view/ChartEdit.vue @@ -810,6 +810,35 @@ + + +
+ + {{ $t('chart.senior_cfg') }} + + + + + + + + {{ $t('chart.analyse_cfg') }} + + + + + + +
+
+ {{ $t('chart.chart_no_senior') }} +
+
+
@@ -1006,6 +1035,7 @@ import DatasetChartDetail from '../../dataset/common/DatasetChartDetail' import { DEFAULT_BACKGROUND_COLOR, DEFAULT_COLOR_CASE, + DEFAULT_FUNCTION_CFG, DEFAULT_LABEL, DEFAULT_LEGEND_STYLE, DEFAULT_SIZE, @@ -1052,9 +1082,13 @@ import { compareItem } from '@/views/chart/chart/compare' import ChartComponentS2 from '@/views/chart/components/ChartComponentS2' import DimensionExtItem from '@/views/chart/components/drag-item/DimensionExtItem' import PluginCom from '@/views/system/plugin/PluginCom' +import FunctionCfg from '@/views/chart/components/senior/FunctionCfg' +import AssistLine from '@/views/chart/components/senior/AssistLine' export default { name: 'ChartEdit', components: { + AssistLine, + FunctionCfg, DimensionExtItem, ChartComponentS2, CompareEdit, @@ -1138,6 +1172,10 @@ export default { background: DEFAULT_BACKGROUND_COLOR, split: DEFAULT_SPLIT }, + senior: { + functionCfg: DEFAULT_FUNCTION_CFG, + assistLine: [] + }, customFilter: [], render: 'antv', isPlugin: false @@ -1446,6 +1484,7 @@ export default { view.extStack = JSON.stringify(view.extStack) view.drillFields = JSON.stringify(view.drillFields) view.extBubble = JSON.stringify(view.extBubble) + view.senior = JSON.stringify(view.senior) delete view.data return view }, @@ -1471,6 +1510,7 @@ export default { this.view.customAttr = view.customAttr ? JSON.parse(view.customAttr) : {} this.view.customStyle = view.customStyle ? JSON.parse(view.customStyle) : {} this.view.customFilter = view.customFilter ? JSON.parse(view.customFilter) : {} + this.view.senior = view.senior ? JSON.parse(view.senior) : {} // 将视图传入echart组件 this.chart = response.data this.data = response.data.data @@ -1505,6 +1545,7 @@ export default { view.customAttr = JSON.stringify(this.view.customAttr) view.customStyle = JSON.stringify(this.view.customStyle) view.customFilter = JSON.stringify(this.view.customFilter) + view.senior = JSON.stringify(this.view.senior) view.data = this.data this.chart = view }, @@ -1556,6 +1597,7 @@ export default { this.view.customAttr = this.view.customAttr ? JSON.parse(this.view.customAttr) : {} this.view.customStyle = this.view.customStyle ? JSON.parse(this.view.customStyle) : {} this.view.customFilter = this.view.customFilter ? JSON.parse(this.view.customFilter) : {} + this.view.senior = this.view.senior ? JSON.parse(this.view.senior) : {} // 将视图传入echart组件 this.chart = response.data this.data = response.data.data @@ -1600,6 +1642,7 @@ export default { this.view.customAttr = this.view.customAttr ? JSON.parse(this.view.customAttr) : {} this.view.customStyle = this.view.customStyle ? JSON.parse(this.view.customStyle) : {} this.view.customFilter = this.view.customFilter ? JSON.parse(this.view.customFilter) : {} + this.view.senior = this.view.senior ? JSON.parse(this.view.senior) : {} // 将视图传入echart组件 this.chart = response.data @@ -1703,6 +1746,16 @@ export default { this.calcStyle() }, + onFunctionCfgChange(val) { + this.view.senior.functionCfg = val + this.calcStyle() + }, + + onAssistLineChange(val) { + this.view.senior.assistLine = val + this.calcStyle() + }, + showDimensionEditFilter(item) { this.dimensionItem = JSON.parse(JSON.stringify(item)) this.dimensionFilterEdit = true @@ -2379,7 +2432,7 @@ export default { .tab-header > > > .el-tabs__item { font-size: 12px; - padding: 0 60px!important; + padding: 0 40px!important; } .blackTheme .tab-header > > > .el-tabs__item { @@ -2576,4 +2629,11 @@ export default { margin-left: 4px; } + .no-senior { + width: 100%; + text-align: center; + font-size: 12px; + margin-top: 40px; + } +