diff --git a/README.md b/README.md index 4352dd9327..ccdc83186e 100644 --- a/README.md +++ b/README.md @@ -6,24 +6,25 @@ Stars FOSSA Status

+ +|说明| +|------------------| +|此分支为 DataEase v2 版本的开发分支。DataEase v2 正在快速迭代中,如是在生产环境部署 DataEase,建议使用 v1.18.* 的最新稳定版本。|
## 什么是 DataEase? DataEase 是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务的改进与优化。DataEase 支持丰富的数据源连接,能够通过拖拉拽方式快速制作图表,并可以方便的与他人分享。 -**DataEase 的功能包括:** +**DataEase 的工作原理:** -- 图表展示:支持 PC 端、移动端、大屏及嵌入式使用场景; -- 图表制作:支持丰富的图表类型、支持拖拉拽方式快速制作仪表板; -- 数据引擎:基于 Apache Calcite,实现统一的 SQL 解析、验证、优化和执行; -- 数据连接:支持数据仓库/数据湖、OLAP 数据库、OLTP 数据库、Excel 数据文件、API 等各种数据源。 +![image](https://github.com/dataease/dataease/assets/41712985/68d46fac-985e-4d1d-8548-2baadf9cd2e8) **DataEase 的优势:** -- 开源开放:零门槛,线上快速获取和安装;快速获取用户反馈、按月发布新版本; +- 开源开放:零门槛,线上快速获取和安装,按月迭代; - 简单易用:极易上手,通过鼠标点击和拖拽即可完成分析; -- 全场景支持:多平台支持、多种嵌入式方案支持; +- 全场景支持:多平台安装和多样化嵌入支持; - 安全分享:支持多种数据分享方式,确保数据安全。 **DataEase 支持的数据源:** @@ -39,30 +40,11 @@ DataEase 是开源的数据可视化分析工具,帮助用户快速分析数 mongodb redshift DB2 - API TiDB StarRocks

-## 快速开始 - -**一键安装** - -仅需两步快速安装 DataEase: - -1. 准备一台不小于 8 G内存的 64位 Linux 主机; -2. 以 root 用户执行如下命令一键安装 DataEase。 - -```sh -curl -sSL https://dataease.oss-cn-hangzhou.aliyuncs.com/quick_start.sh | bash -``` - -**学习资料** - -- [在线文档](https://dataease.io/docs/) -- [社区论坛](https://bbs.fit2cloud.com/c/de/6) - -## DataEase 的技术栈 +**DataEase 的技术栈:** - 前端:[Vue.js](https://vuejs.org/)、[Element](https://element.eleme.cn/) - 图库:[AntV](https://antv.vision/zh) @@ -71,13 +53,12 @@ curl -sSL https://dataease.oss-cn-hangzhou.aliyuncs.com/quick_start.sh | bash - 数据处理:[Apache Calcite](https://github.com/apache/calcite/) - 基础设施:[Docker](https://www.docker.com/) -## Star History +## DataEase 快速入门 -[![Star History Chart](https://api.star-history.com/svg?repos=dataease/dataease&type=Date)](https://star-history.com/#dataease/dataease&Date) - -## FOSSA Status - -[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fdataease%2Fdataease.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fdataease%2Fdataease?ref=badge_large) +- 安装部署教程 +- 快速入门视频 +- 完整在线文档 +- 中文论坛支持 ## License 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 7aae62ade0..d74064398a 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 @@ -821,9 +821,11 @@ public class ChartDataManage { return list; } - String assistLine = (String) JsonUtil.toJSONString(senior.get("assistLine")); - List assistLines = JsonUtil.parseList(assistLine, new TypeReference<>() { - }); + var assistLineCfg = JsonUtil.parseObject((String) JsonUtil.toJSONString(senior.get("assistLineCfg")), ChartSeniorAssistCfgDTO.class); + if (null == assistLineCfg || !assistLineCfg.isEnable()) { + return list; + } + List assistLines = assistLineCfg.getAssistLine(); if (ObjectUtils.isEmpty(assistLines)) { return list; diff --git a/core/core-frontend/src/models/chart/chart-senior.d.ts b/core/core-frontend/src/models/chart/chart-senior.d.ts index dc16c49047..610b5f2467 100644 --- a/core/core-frontend/src/models/chart/chart-senior.d.ts +++ b/core/core-frontend/src/models/chart/chart-senior.d.ts @@ -9,7 +9,7 @@ declare interface ChartSenior { /** * 辅助线 */ - assistLine: AssistLine[] + assistLineCfg: ChartAssistLineCfg /** * 阈值 */ @@ -61,6 +61,19 @@ declare interface ChartFunctionCfg { /** * 辅助线设置 */ +declare interface ChartAssistLineCfg { + /** + * 是否启用 + */ + enable: boolean + /** + * 辅助线配置 + */ + assistLine: AssistLine[] +} +/** + * 辅助线 + */ declare interface AssistLine { /** * 辅助线名称 @@ -100,6 +113,10 @@ declare interface AssistLine { * 阈值设置 */ declare interface ChartThreshold { + /** + * 是否启用 + */ + enable: boolean /** * 仪表盘阈值: x,y,z */ 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 5dc2aaf5b5..eac2f1b597 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 @@ -5,7 +5,7 @@ import ScrollCfg from '@/views/chart/components/editor/editor-senior/components/ import AssistLine from '@/views/chart/components/editor/editor-senior/components/AssistLine.vue' import Threshold from '@/views/chart/components/editor/editor-senior/components/Threshold.vue' import CollapseSwitchItem from '@/components/collapse-switch-item/src/CollapseSwitchItem.vue' -import { computed, PropType, ref, toRefs } from 'vue' +import { computed, PropType, ref, toRefs, watch } from 'vue' import LinkJumpSet from '@/components/visualization/LinkJumpSet.vue' import LinkageSet from '@/components/visualization/LinkageSet.vue' import { canvasSave } from '@/utils/canvasUtils' @@ -15,6 +15,8 @@ import { updateLinkageActive } from '@/api/visualization/linkage' import { includesAny } from '../util/StringUtils' import { ElIcon, ElMessage } from 'element-plus-secondary' import { storeToRefs } from 'pinia' +import { BASE_VIEW_CONFIG } from '../util/chart' +import { cloneDeep, defaultsDeep } from 'lodash-es' const dvMainStore = dvMainStoreWithOut() const { dvInfo } = storeToRefs(dvMainStore) @@ -70,7 +72,12 @@ const props = defineProps({ }) const { chart, themes, properties, propertyInnerAll } = toRefs(props) - +watch( + () => chart.value?.senior, + () => { + chart.value.senior = defaultsDeep(chart.value?.senior || {}, cloneDeep(BASE_VIEW_CONFIG.senior)) + } +) const seniorCounts = computed(() => { let linkageCount = 0 let jumpCount = 0 @@ -187,11 +194,14 @@ const linkageActiveChange = () => { /> - { :property-inner="propertyInnerAll['assist-line']" @onAssistLineChange="onAssistLineChange" /> - + { /> - { :property-inner="propertyInnerAll['threshold']" @onThresholdChange="onThresholdChange" /> - + , required: true }, quotaData: { @@ -32,28 +33,26 @@ const quotaFields = computed>(() => { }) const state = reactive({ - assistLine: [], + assistLineCfg: { + enable: false, + assistLine: [] + }, editLineDialog: false, lineArr: [], quotaFields: [] }) watch( - () => props.chart, + () => props.chart.senior.assistLineCfg, () => { init() - } + }, + { deep: true } ) const changeAssistLine = () => { - let flag = false - const arr = state.assistLine.filter(ele => { - return ele.field === '1' - }) - if (arr && arr.length > 0) { - flag = true - } - emit('onAssistLineChange', { data: state.assistLine, requestData: flag }) + const flag = state.assistLineCfg.assistLine.findIndex(ele => ele.field === '1') !== -1 + emit('onAssistLineChange', { data: state.assistLineCfg, requestData: flag }) } const lineChange = val => { @@ -68,7 +67,6 @@ const closeEditLine = () => { } const changeLine = () => { - console.log(state.lineArr) // check line config for (let i = 0; i < state.lineArr.length; i++) { const ele = state.lineArr[i] @@ -96,35 +94,29 @@ const changeLine = () => { } } } - state.assistLine = JSON.parse(JSON.stringify(state.lineArr)) + state.assistLineCfg.assistLine = JSON.parse(JSON.stringify(state.lineArr)) changeAssistLine() closeEditLine() } function existField(line) { - return !!_.find(quotaFields.value, d => d.id === line.id) + return !!find(quotaFields.value, d => d.id === line.id) } const init = () => { const chart = JSON.parse(JSON.stringify(props.chart)) if (chart.senior) { - let senior = null - if (Object.prototype.toString.call(chart.senior) === '[object Object]') { - senior = JSON.parse(JSON.stringify(chart.senior)) - } else { - senior = JSON.parse(chart.senior) - } - if (senior.assistLine) { - for (let i = 0; i < senior.assistLine.length; i++) { - if (!senior.assistLine[i].fontSize) { - senior.assistLine[i].fontSize = '10' + const senior = chart.senior + if (senior.assistLineCfg?.assistLine) { + const assistLine = senior.assistLineCfg.assistLine + for (let i = 0; i < assistLine.length; i++) { + if (!assistLine[i].fontSize) { + assistLine[i].fontSize = 10 } } - state.assistLine = senior.assistLine - } else { - state.assistLine = [] + state.assistLineCfg = defaultsDeep(senior.assistLineCfg, DEFAULT_ASSIST_LINE_CFG) } - state.lineArr = JSON.parse(JSON.stringify(state.assistLine)) + state.lineArr = JSON.parse(JSON.stringify(state.assistLineCfg.assistLine)) } } @@ -141,16 +133,17 @@ onMounted(() => { 已设置