diff --git a/README.md b/README.md
index 0af2e887db..4352dd9327 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,6 @@
-
@@ -13,23 +12,21 @@
DataEase 是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务的改进与优化。DataEase 支持丰富的数据源连接,能够通过拖拉拽方式快速制作图表,并可以方便的与他人分享。
-
-
**DataEase 的功能包括:**
-- 图表展示:支持 PC 端、移动端、大屏;
-- 图表制作:支持丰富的图表类型(Apache ECharts / AntV)、支持拖拉拽方式快速制作仪表板;
-- 数据引擎:支持直连模式、本地模式(基于 Apache Doris / Kettle 实现);
+- 图表展示:支持 PC 端、移动端、大屏及嵌入式使用场景;
+- 图表制作:支持丰富的图表类型、支持拖拉拽方式快速制作仪表板;
+- 数据引擎:基于 Apache Calcite,实现统一的 SQL 解析、验证、优化和执行;
- 数据连接:支持数据仓库/数据湖、OLAP 数据库、OLTP 数据库、Excel 数据文件、API 等各种数据源。
-## DataEase 的优势
+**DataEase 的优势:**
- 开源开放:零门槛,线上快速获取和安装;快速获取用户反馈、按月发布新版本;
- 简单易用:极易上手,通过鼠标点击和拖拽即可完成分析;
-- 秒级响应:集成 Apache Doris,超大数据量下秒级查询返回延时;
+- 全场景支持:多平台支持、多种嵌入式方案支持;
- 安全分享:支持多种数据分享方式,确保数据安全。
-## DataEase 支持的数据源
+**DataEase 支持的数据源:**
@@ -37,36 +34,18 @@ DataEase 是开源的数据可视化分析工具,帮助用户快速分析数
-
-
-
-
-
-
-## DataEase 模板市场
-
-- [模板市场](https://dataease.io/templates/)
-
-
-
## 快速开始
-**在线体验**
-
-- 环境地址:
-- 用户名:demo
-- 密码:dataease
-
**一键安装**
仅需两步快速安装 DataEase:
@@ -83,17 +62,13 @@ 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 的技术栈
- 前端:[Vue.js](https://vuejs.org/)、[Element](https://element.eleme.cn/)
-- 图库:[Apache ECharts](https://github.com/apache/echarts)、[AntV](https://antv.vision/zh)
+- 图库:[AntV](https://antv.vision/zh)
- 后端:[Spring Boot](https://spring.io/projects/spring-boot)
- 中间件:[MySQL](https://www.mysql.com/)
-- 数据处理:[Kettle](https://github.com/pentaho/pentaho-kettle)、[Apache Doris](https://github.com/apache/doris/)
+- 数据处理:[Apache Calcite](https://github.com/apache/calcite/)
- 基础设施:[Docker](https://www.docker.com/)
## Star History
diff --git a/core/core-frontend/src/locales/zh-CN.ts b/core/core-frontend/src/locales/zh-CN.ts
index 325315cf9f..f647db8531 100644
--- a/core/core-frontend/src/locales/zh-CN.ts
+++ b/core/core-frontend/src/locales/zh-CN.ts
@@ -951,6 +951,7 @@ export default {
field_can_not_empty: '字段不能为空',
conditions_can_not_empty: '字段的条件不能为空,若无条件,请直接删除该字段',
remark: '备注',
+ remark_show: '显示备注',
remark_edit: '编辑备注',
remark_bg_color: '背景填充',
quota_font_family: '值字体',
diff --git a/core/core-frontend/src/views/chart/components/editor/editor-style/components/MiscSelector.vue b/core/core-frontend/src/views/chart/components/editor/editor-style/components/MiscSelector.vue
index bf0f2dd0dc..b8e56891ec 100644
--- a/core/core-frontend/src/views/chart/components/editor/editor-style/components/MiscSelector.vue
+++ b/core/core-frontend/src/views/chart/components/editor/editor-style/components/MiscSelector.vue
@@ -199,7 +199,7 @@ const getQuotaField = id => {
}
const isValidField = field => {
- return field.id !== 'count' && field.deType !== 0 && field.deType !== 1 && field.deType !== 5
+ return field.id !== '-1' && state.quotaData.findIndex(ele => ele.id === field.id) !== -1
}
onMounted(() => {
@@ -282,27 +282,25 @@ onMounted(() => {
-
-
-
-
-
-
- {{ item.name }}
-
+
+
+
+ {{ item.name }}
@@ -311,8 +309,8 @@ onMounted(() => {
@@ -375,27 +373,25 @@ onMounted(() => {
-
-
-
-
-
-
- {{ item.name }}
-
+
+
+
+ {{ item.name }}
@@ -519,8 +515,9 @@ onMounted(() => {
{
flex-direction: row;
justify-content: space-between;
}
+
:deep(.dynamic-item) {
width: 100px !important;
}
}
+
.field-item {
float: left;
color: #8492a6;
font-size: 12px;
}
+
.margin-bottom-8 {
margin-bottom: 8px !important;
}
+
.series-select-option {
display: flex;
align-items: center;
justify-content: start;
padding: 0 11px;
}
+
+.invalid-field {
+ ::v-deep(.ed-input__wrapper) {
+ box-shadow: 0 0 0 1px rgb(245, 74, 69) inset !important;
+ }
+}
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 178d77c595..feea8b5fc1 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
@@ -1,5 +1,5 @@
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('chart.bolder') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('chart.italic') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('chart.text_pos_left') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('chart.text_pos_center') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('chart.text_pos_right') }}
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- {{ t('chart.bolder') }}
-
-
-
-
-
-
-
+ {{ t('chart.font_shadow') }}
-
-
- {{ t('chart.italic') }}
-
-
-
-
-
-
-
+ {{ t('chart.remark_show') }}
-
-
-
-
-
-
-
-
- {{ t('chart.text_pos_left') }}
-
-
-
-
-
-
-
-
-
-
-
- {{ t('chart.text_pos_center') }}
-
-
-
-
-
-
-
-
-
-
-
- {{ t('chart.text_pos_right') }}
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
-
- {{ t('chart.font_shadow') }}
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core/core-frontend/src/views/chart/components/editor/index.vue b/core/core-frontend/src/views/chart/components/editor/index.vue
index 50743ba206..d4e6d92910 100644
--- a/core/core-frontend/src/views/chart/components/editor/index.vue
+++ b/core/core-frontend/src/views/chart/components/editor/index.vue
@@ -1088,7 +1088,7 @@ const onRefreshChange = val => {
{{ view.title }}
-
+
diff --git a/core/core-frontend/src/views/chart/components/views/index.vue b/core/core-frontend/src/views/chart/components/views/index.vue
index 8626c69479..bac2b3e34f 100644
--- a/core/core-frontend/src/views/chart/components/views/index.vue
+++ b/core/core-frontend/src/views/chart/components/views/index.vue
@@ -101,6 +101,10 @@ const snapshotStore = snapshotStoreWithOut()
const state = reactive({
initReady: true, //curComponent 切换期间 不接收外部的calcData 和 renderChart 事件
title_show: true,
+ title_remark: {
+ show: false,
+ remark: ''
+ },
title_class: {
fontSize: '18px',
color: '#303133',
@@ -240,6 +244,9 @@ const initTitle = () => {
customStyle.background.alpha
)
}
+
+ state.title_remark.show = customStyle.text.remarkShow
+ state.title_remark.remark = customStyle.text.remark
}
}
@@ -563,8 +570,16 @@ const toolTip = computed(() => {
+
+
+
+
+
+
+
+
diff --git a/core/core-frontend/src/views/visualized/data/datasource/form/EditorDetail.vue b/core/core-frontend/src/views/visualized/data/datasource/form/EditorDetail.vue
index 813dc642bd..ffea6854cb 100644
--- a/core/core-frontend/src/views/visualized/data/datasource/form/EditorDetail.vue
+++ b/core/core-frontend/src/views/visualized/data/datasource/form/EditorDetail.vue
@@ -131,6 +131,7 @@ const initForm = type => {
if (type === 'oracle') {
form.value.configuration.connectionType = 'sid'
}
+
form.value.type = type
setTimeout(() => {
dsForm.value.clearValidate()