Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
dataease
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
zhu
dataease
Commits
a8e6e2d0
提交
a8e6e2d0
authored
7月 21, 2021
作者:
junjie
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: 堆叠图支持堆叠项
上级
13ccfb20
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
16 个修改的文件
包含
634 行增加
和
76 行删除
+634
-76
ChartViewWithBLOBs.java
...main/java/io/dataease/base/domain/ChartViewWithBLOBs.java
+2
-0
ChartViewMapper.xml
...src/main/java/io/dataease/base/mapper/ChartViewMapper.xml
+20
-5
QueryProvider.java
...end/src/main/java/io/dataease/provider/QueryProvider.java
+13
-0
DorisQueryProvider.java
...n/java/io/dataease/provider/doris/DorisQueryProvider.java
+98
-0
MysqlQueryProvider.java
...n/java/io/dataease/provider/mysql/MysqlQueryProvider.java
+117
-0
OracleQueryProvider.java
...java/io/dataease/provider/oracle/OracleQueryProvider.java
+100
-2
SqlserverQueryProvider.java
...o/dataease/provider/sqlserver/SqlserverQueryProvider.java
+10
-0
ChartViewService.java
...main/java/io/dataease/service/chart/ChartViewService.java
+0
-0
V16__alter_chart_view.sql
...src/main/resources/db/migration/V16__alter_chart_view.sql
+4
-0
generatorConfig.xml
backend/src/main/resources/generatorConfig.xml
+4
-4
en.js
frontend/src/lang/en.js
+1
-0
tw.js
frontend/src/lang/tw.js
+2
-1
zh.js
frontend/src/lang/zh.js
+2
-1
ChartDragItem.vue
...nd/src/views/chart/components/drag-item/ChartDragItem.vue
+152
-0
Group.vue
frontend/src/views/chart/group/Group.vue
+3
-0
ChartEdit.vue
frontend/src/views/chart/view/ChartEdit.vue
+106
-63
没有找到文件。
backend/src/main/java/io/dataease/base/domain/ChartViewWithBLOBs.java
浏览文件 @
a8e6e2d0
...
@@ -13,6 +13,8 @@ public class ChartViewWithBLOBs extends ChartView implements Serializable {
...
@@ -13,6 +13,8 @@ public class ChartViewWithBLOBs extends ChartView implements Serializable {
private
String
yAxis
;
private
String
yAxis
;
private
String
extStack
;
private
String
customAttr
;
private
String
customAttr
;
private
String
customStyle
;
private
String
customStyle
;
...
...
backend/src/main/java/io/dataease/base/mapper/ChartViewMapper.xml
浏览文件 @
a8e6e2d0
...
@@ -16,6 +16,7 @@
...
@@ -16,6 +16,7 @@
<resultMap
extends=
"BaseResultMap"
id=
"ResultMapWithBLOBs"
type=
"io.dataease.base.domain.ChartViewWithBLOBs"
>
<resultMap
extends=
"BaseResultMap"
id=
"ResultMapWithBLOBs"
type=
"io.dataease.base.domain.ChartViewWithBLOBs"
>
<result
column=
"x_axis"
jdbcType=
"LONGVARCHAR"
property=
"xAxis"
/>
<result
column=
"x_axis"
jdbcType=
"LONGVARCHAR"
property=
"xAxis"
/>
<result
column=
"y_axis"
jdbcType=
"LONGVARCHAR"
property=
"yAxis"
/>
<result
column=
"y_axis"
jdbcType=
"LONGVARCHAR"
property=
"yAxis"
/>
<result
column=
"ext_stack"
jdbcType=
"LONGVARCHAR"
property=
"extStack"
/>
<result
column=
"custom_attr"
jdbcType=
"LONGVARCHAR"
property=
"customAttr"
/>
<result
column=
"custom_attr"
jdbcType=
"LONGVARCHAR"
property=
"customAttr"
/>
<result
column=
"custom_style"
jdbcType=
"LONGVARCHAR"
property=
"customStyle"
/>
<result
column=
"custom_style"
jdbcType=
"LONGVARCHAR"
property=
"customStyle"
/>
<result
column=
"custom_filter"
jdbcType=
"LONGVARCHAR"
property=
"customFilter"
/>
<result
column=
"custom_filter"
jdbcType=
"LONGVARCHAR"
property=
"customFilter"
/>
...
@@ -84,7 +85,7 @@
...
@@ -84,7 +85,7 @@
style_priority
style_priority
</sql>
</sql>
<sql
id=
"Blob_Column_List"
>
<sql
id=
"Blob_Column_List"
>
x_axis, y_axis, custom_attr, custom_style, custom_filter, snapshot
x_axis, y_axis,
ext_stack,
custom_attr, custom_style, custom_filter, snapshot
</sql>
</sql>
<select
id=
"selectByExampleWithBLOBs"
parameterType=
"io.dataease.base.domain.ChartViewExample"
resultMap=
"ResultMapWithBLOBs"
>
<select
id=
"selectByExampleWithBLOBs"
parameterType=
"io.dataease.base.domain.ChartViewExample"
resultMap=
"ResultMapWithBLOBs"
>
select
select
...
@@ -139,14 +140,14 @@
...
@@ -139,14 +140,14 @@
table_id, `type`, title,
table_id, `type`, title,
create_by, create_time, update_time,
create_by, create_time, update_time,
style_priority, x_axis, y_axis,
style_priority, x_axis, y_axis,
custom_attr, custom_style, custom_filter
,
ext_stack, custom_attr, custom_style
,
snapshot)
custom_filter,
snapshot)
values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{sceneId,jdbcType=VARCHAR},
values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{sceneId,jdbcType=VARCHAR},
#{tableId,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}, #{title,jdbcType=VARCHAR},
#{tableId,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}, #{title,jdbcType=VARCHAR},
#{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT},
#{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT},
#{stylePriority,jdbcType=VARCHAR}, #{xAxis,jdbcType=LONGVARCHAR}, #{yAxis,jdbcType=LONGVARCHAR},
#{stylePriority,jdbcType=VARCHAR}, #{xAxis,jdbcType=LONGVARCHAR}, #{yAxis,jdbcType=LONGVARCHAR},
#{
customAttr,jdbcType=LONGVARCHAR}, #{customStyle,jdbcType=LONGVARCHAR}, #{customFilter
,jdbcType=LONGVARCHAR},
#{
extStack,jdbcType=LONGVARCHAR}, #{customAttr,jdbcType=LONGVARCHAR}, #{customStyle
,jdbcType=LONGVARCHAR},
#{snapshot,jdbcType=LONGVARCHAR})
#{
customFilter,jdbcType=LONGVARCHAR}, #{
snapshot,jdbcType=LONGVARCHAR})
</insert>
</insert>
<insert
id=
"insertSelective"
parameterType=
"io.dataease.base.domain.ChartViewWithBLOBs"
>
<insert
id=
"insertSelective"
parameterType=
"io.dataease.base.domain.ChartViewWithBLOBs"
>
insert into chart_view
insert into chart_view
...
@@ -187,6 +188,9 @@
...
@@ -187,6 +188,9 @@
<if
test=
"yAxis != null"
>
<if
test=
"yAxis != null"
>
y_axis,
y_axis,
</if>
</if>
<if
test=
"extStack != null"
>
ext_stack,
</if>
<if
test=
"customAttr != null"
>
<if
test=
"customAttr != null"
>
custom_attr,
custom_attr,
</if>
</if>
...
@@ -237,6 +241,9 @@
...
@@ -237,6 +241,9 @@
<if
test=
"yAxis != null"
>
<if
test=
"yAxis != null"
>
#{yAxis,jdbcType=LONGVARCHAR},
#{yAxis,jdbcType=LONGVARCHAR},
</if>
</if>
<if
test=
"extStack != null"
>
#{extStack,jdbcType=LONGVARCHAR},
</if>
<if
test=
"customAttr != null"
>
<if
test=
"customAttr != null"
>
#{customAttr,jdbcType=LONGVARCHAR},
#{customAttr,jdbcType=LONGVARCHAR},
</if>
</if>
...
@@ -296,6 +303,9 @@
...
@@ -296,6 +303,9 @@
<if
test=
"record.yAxis != null"
>
<if
test=
"record.yAxis != null"
>
y_axis = #{record.yAxis,jdbcType=LONGVARCHAR},
y_axis = #{record.yAxis,jdbcType=LONGVARCHAR},
</if>
</if>
<if
test=
"record.extStack != null"
>
ext_stack = #{record.extStack,jdbcType=LONGVARCHAR},
</if>
<if
test=
"record.customAttr != null"
>
<if
test=
"record.customAttr != null"
>
custom_attr = #{record.customAttr,jdbcType=LONGVARCHAR},
custom_attr = #{record.customAttr,jdbcType=LONGVARCHAR},
</if>
</if>
...
@@ -327,6 +337,7 @@
...
@@ -327,6 +337,7 @@
style_priority = #{record.stylePriority,jdbcType=VARCHAR},
style_priority = #{record.stylePriority,jdbcType=VARCHAR},
x_axis = #{record.xAxis,jdbcType=LONGVARCHAR},
x_axis = #{record.xAxis,jdbcType=LONGVARCHAR},
y_axis = #{record.yAxis,jdbcType=LONGVARCHAR},
y_axis = #{record.yAxis,jdbcType=LONGVARCHAR},
ext_stack = #{record.extStack,jdbcType=LONGVARCHAR},
custom_attr = #{record.customAttr,jdbcType=LONGVARCHAR},
custom_attr = #{record.customAttr,jdbcType=LONGVARCHAR},
custom_style = #{record.customStyle,jdbcType=LONGVARCHAR},
custom_style = #{record.customStyle,jdbcType=LONGVARCHAR},
custom_filter = #{record.customFilter,jdbcType=LONGVARCHAR},
custom_filter = #{record.customFilter,jdbcType=LONGVARCHAR},
...
@@ -387,6 +398,9 @@
...
@@ -387,6 +398,9 @@
<if
test=
"yAxis != null"
>
<if
test=
"yAxis != null"
>
y_axis = #{yAxis,jdbcType=LONGVARCHAR},
y_axis = #{yAxis,jdbcType=LONGVARCHAR},
</if>
</if>
<if
test=
"extStack != null"
>
ext_stack = #{extStack,jdbcType=LONGVARCHAR},
</if>
<if
test=
"customAttr != null"
>
<if
test=
"customAttr != null"
>
custom_attr = #{customAttr,jdbcType=LONGVARCHAR},
custom_attr = #{customAttr,jdbcType=LONGVARCHAR},
</if>
</if>
...
@@ -415,6 +429,7 @@
...
@@ -415,6 +429,7 @@
style_priority = #{stylePriority,jdbcType=VARCHAR},
style_priority = #{stylePriority,jdbcType=VARCHAR},
x_axis = #{xAxis,jdbcType=LONGVARCHAR},
x_axis = #{xAxis,jdbcType=LONGVARCHAR},
y_axis = #{yAxis,jdbcType=LONGVARCHAR},
y_axis = #{yAxis,jdbcType=LONGVARCHAR},
ext_stack = #{extStack,jdbcType=LONGVARCHAR},
custom_attr = #{customAttr,jdbcType=LONGVARCHAR},
custom_attr = #{customAttr,jdbcType=LONGVARCHAR},
custom_style = #{customStyle,jdbcType=LONGVARCHAR},
custom_style = #{customStyle,jdbcType=LONGVARCHAR},
custom_filter = #{customFilter,jdbcType=LONGVARCHAR},
custom_filter = #{customFilter,jdbcType=LONGVARCHAR},
...
...
backend/src/main/java/io/dataease/provider/QueryProvider.java
浏览文件 @
a8e6e2d0
...
@@ -36,10 +36,23 @@ public abstract class QueryProvider {
...
@@ -36,10 +36,23 @@ public abstract class QueryProvider {
public
abstract
String
getSQLAsTmp
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
);
public
abstract
String
getSQLAsTmp
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
);
public
abstract
String
getSQLStack
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extStack
);
public
abstract
String
getSQLAsTmpStack
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extStack
);
public
abstract
String
searchTable
(
String
table
);
public
abstract
String
searchTable
(
String
table
);
public
abstract
String
getSQLSummary
(
String
table
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
);
public
abstract
String
getSQLSummary
(
String
table
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
);
/**
* 单指标汇总
*
* @param sql
* @param yAxis
* @param customFilter
* @param extFilterRequestList
* @return
*/
public
abstract
String
getSQLSummaryAsTmp
(
String
sql
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
);
public
abstract
String
getSQLSummaryAsTmp
(
String
sql
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
);
public
abstract
String
wrapSql
(
String
sql
);
public
abstract
String
wrapSql
(
String
sql
);
...
...
backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java
浏览文件 @
a8e6e2d0
...
@@ -263,6 +263,104 @@ public class DorisQueryProvider extends QueryProvider {
...
@@ -263,6 +263,104 @@ public class DorisQueryProvider extends QueryProvider {
return
getSQL
(
"("
+
sql
+
")"
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
);
return
getSQL
(
"("
+
sql
+
")"
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
);
}
}
@Override
public
String
getSQLStack
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extStack
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
DorisConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
.
build
();
List
<
SQLObj
>
xFields
=
new
ArrayList
<>();
List
<
SQLObj
>
xWheres
=
new
ArrayList
<>();
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
List
<
ChartViewFieldDTO
>
xList
=
new
ArrayList
<>();
xList
.
addAll
(
xAxis
);
xList
.
addAll
(
extStack
);
if
(
CollectionUtils
.
isNotEmpty
(
xList
))
{
for
(
int
i
=
0
;
i
<
xList
.
size
();
i
++)
{
ChartViewFieldDTO
x
=
xList
.
get
(
i
);
String
originField
=
String
.
format
(
DorisConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
x
.
getDataeaseName
());
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
i
);
// 处理横轴字段
xFields
.
add
(
getXFields
(
x
,
originField
,
fieldAlias
));
// 处理横轴过滤
xWheres
.
addAll
(
getXWheres
(
x
,
originField
,
fieldAlias
));
// 处理横轴排序
if
(
StringUtils
.
isNotEmpty
(
x
.
getSort
())
&&
!
StringUtils
.
equalsIgnoreCase
(
x
.
getSort
(),
"none"
))
{
xOrders
.
add
(
SQLObj
.
builder
()
.
orderField
(
originField
)
.
orderAlias
(
fieldAlias
)
.
orderDirection
(
x
.
getSort
())
.
build
());
}
}
}
List
<
SQLObj
>
yFields
=
new
ArrayList
<>();
List
<
SQLObj
>
yWheres
=
new
ArrayList
<>();
List
<
SQLObj
>
yOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
yAxis
))
{
for
(
int
i
=
0
;
i
<
yAxis
.
size
();
i
++)
{
ChartViewFieldDTO
y
=
yAxis
.
get
(
i
);
String
originField
=
String
.
format
(
DorisConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
y
.
getDataeaseName
());
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_Y_PREFIX
,
i
);
// 处理纵轴字段
yFields
.
add
(
getYFields
(
y
,
originField
,
fieldAlias
));
// 处理纵轴过滤
yWheres
.
addAll
(
getYWheres
(
y
,
originField
,
fieldAlias
));
// 处理纵轴排序
if
(
StringUtils
.
isNotEmpty
(
y
.
getSort
())
&&
!
StringUtils
.
equalsIgnoreCase
(
y
.
getSort
(),
"none"
))
{
yOrders
.
add
(
SQLObj
.
builder
()
.
orderField
(
originField
)
.
orderAlias
(
fieldAlias
)
.
orderDirection
(
y
.
getSort
())
.
build
());
}
}
}
// 处理视图中字段过滤
List
<
SQLObj
>
customWheres
=
transCustomFilterList
(
tableObj
,
customFilter
);
// 处理仪表板字段过滤
List
<
SQLObj
>
extWheres
=
transExtFilterList
(
tableObj
,
extFilterRequestList
);
// 构建sql所有参数
List
<
SQLObj
>
fields
=
new
ArrayList
<>();
fields
.
addAll
(
xFields
);
fields
.
addAll
(
yFields
);
List
<
SQLObj
>
wheres
=
new
ArrayList
<>();
wheres
.
addAll
(
xWheres
);
if
(
customWheres
!=
null
)
wheres
.
addAll
(
customWheres
);
if
(
extWheres
!=
null
)
wheres
.
addAll
(
extWheres
);
List
<
SQLObj
>
groups
=
new
ArrayList
<>();
groups
.
addAll
(
xFields
);
// 外层再次套sql
List
<
SQLObj
>
orders
=
new
ArrayList
<>();
orders
.
addAll
(
xOrders
);
orders
.
addAll
(
yOrders
);
List
<
SQLObj
>
aggWheres
=
new
ArrayList
<>();
aggWheres
.
addAll
(
yWheres
);
STGroup
stg
=
new
STGroupFile
(
SQLConstants
.
SQL_TEMPLATE
);
ST
st_sql
=
stg
.
getInstanceOf
(
"querySql"
);
if
(
CollectionUtils
.
isNotEmpty
(
xFields
))
st_sql
.
add
(
"groups"
,
xFields
);
if
(
CollectionUtils
.
isNotEmpty
(
yFields
))
st_sql
.
add
(
"aggregators"
,
yFields
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
if
(
ObjectUtils
.
isNotEmpty
(
tableObj
))
st_sql
.
add
(
"table"
,
tableObj
);
String
sql
=
st_sql
.
render
();
ST
st
=
stg
.
getInstanceOf
(
"querySql"
);
SQLObj
tableSQL
=
SQLObj
.
builder
()
.
tableName
(
String
.
format
(
DorisConstants
.
BRACKETS
,
sql
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
1
))
.
build
();
if
(
CollectionUtils
.
isNotEmpty
(
aggWheres
))
st
.
add
(
"filters"
,
aggWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
orders
))
st
.
add
(
"orders"
,
orders
);
if
(
ObjectUtils
.
isNotEmpty
(
tableSQL
))
st
.
add
(
"table"
,
tableSQL
);
return
st
.
render
();
}
@Override
public
String
getSQLAsTmpStack
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extStack
)
{
return
getSQLStack
(
"("
+
table
+
")"
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
,
extStack
);
}
@Override
@Override
public
String
searchTable
(
String
table
)
{
public
String
searchTable
(
String
table
)
{
return
"SELECT table_name FROM information_schema.TABLES WHERE table_name ='"
+
table
+
"'"
;
return
"SELECT table_name FROM information_schema.TABLES WHERE table_name ='"
+
table
+
"'"
;
...
...
backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java
浏览文件 @
a8e6e2d0
...
@@ -254,6 +254,123 @@ public class MysqlQueryProvider extends QueryProvider {
...
@@ -254,6 +254,123 @@ public class MysqlQueryProvider extends QueryProvider {
return
getSQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
);
return
getSQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
);
}
}
@Override
public
String
getSQLStack
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extStack
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
MySQLConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
.
build
();
List
<
SQLObj
>
xFields
=
new
ArrayList
<>();
List
<
SQLObj
>
xWheres
=
new
ArrayList
<>();
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
List
<
ChartViewFieldDTO
>
xList
=
new
ArrayList
<>();
xList
.
addAll
(
xAxis
);
xList
.
addAll
(
extStack
);
if
(
CollectionUtils
.
isNotEmpty
(
xList
))
{
for
(
int
i
=
0
;
i
<
xList
.
size
();
i
++)
{
ChartViewFieldDTO
x
=
xList
.
get
(
i
);
String
originField
=
String
.
format
(
MySQLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
x
.
getOriginName
());
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
i
);
// 处理横轴字段
xFields
.
add
(
getXFields
(
x
,
originField
,
fieldAlias
));
// 处理横轴过滤
xWheres
.
addAll
(
getXWheres
(
x
,
originField
,
fieldAlias
));
// 处理横轴排序
if
(
StringUtils
.
isNotEmpty
(
x
.
getSort
())
&&
!
StringUtils
.
equalsIgnoreCase
(
x
.
getSort
(),
"none"
))
{
xOrders
.
add
(
SQLObj
.
builder
()
.
orderField
(
originField
)
.
orderAlias
(
fieldAlias
)
.
orderDirection
(
x
.
getSort
())
.
build
());
}
}
}
List
<
SQLObj
>
yFields
=
new
ArrayList
<>();
List
<
SQLObj
>
yWheres
=
new
ArrayList
<>();
List
<
SQLObj
>
yOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
yAxis
))
{
for
(
int
i
=
0
;
i
<
yAxis
.
size
();
i
++)
{
ChartViewFieldDTO
y
=
yAxis
.
get
(
i
);
String
originField
=
String
.
format
(
MySQLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
y
.
getOriginName
());
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_Y_PREFIX
,
i
);
// 处理纵轴字段
yFields
.
add
(
getYFields
(
y
,
originField
,
fieldAlias
));
// 处理纵轴过滤
yWheres
.
addAll
(
getYWheres
(
y
,
originField
,
fieldAlias
));
// 处理纵轴排序
if
(
StringUtils
.
isNotEmpty
(
y
.
getSort
())
&&
!
StringUtils
.
equalsIgnoreCase
(
y
.
getSort
(),
"none"
))
{
yOrders
.
add
(
SQLObj
.
builder
()
.
orderField
(
originField
)
.
orderAlias
(
fieldAlias
)
.
orderDirection
(
y
.
getSort
())
.
build
());
}
}
}
List
<
SQLObj
>
stackFields
=
new
ArrayList
<>();
List
<
SQLObj
>
stackOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
extStack
))
{
for
(
int
i
=
0
;
i
<
extStack
.
size
();
i
++)
{
ChartViewFieldDTO
stack
=
extStack
.
get
(
i
);
String
originField
=
String
.
format
(
MySQLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
stack
.
getOriginName
());
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
i
);
// 处理横轴字段
stackFields
.
add
(
getXFields
(
stack
,
originField
,
fieldAlias
));
// 处理横轴排序
if
(
StringUtils
.
isNotEmpty
(
stack
.
getSort
())
&&
!
StringUtils
.
equalsIgnoreCase
(
stack
.
getSort
(),
"none"
))
{
stackOrders
.
add
(
SQLObj
.
builder
()
.
orderField
(
originField
)
.
orderAlias
(
fieldAlias
)
.
orderDirection
(
stack
.
getSort
())
.
build
());
}
}
}
// 处理视图中字段过滤
List
<
SQLObj
>
customWheres
=
transCustomFilterList
(
tableObj
,
customFilter
);
// 处理仪表板字段过滤
List
<
SQLObj
>
extWheres
=
transExtFilterList
(
tableObj
,
extFilterRequestList
);
// 构建sql所有参数
List
<
SQLObj
>
fields
=
new
ArrayList
<>();
fields
.
addAll
(
xFields
);
fields
.
addAll
(
yFields
);
List
<
SQLObj
>
wheres
=
new
ArrayList
<>();
wheres
.
addAll
(
xWheres
);
if
(
customWheres
!=
null
)
wheres
.
addAll
(
customWheres
);
if
(
extWheres
!=
null
)
wheres
.
addAll
(
extWheres
);
List
<
SQLObj
>
groups
=
new
ArrayList
<>();
groups
.
addAll
(
xFields
);
// 外层再次套sql
List
<
SQLObj
>
orders
=
new
ArrayList
<>();
orders
.
addAll
(
xOrders
);
orders
.
addAll
(
yOrders
);
List
<
SQLObj
>
aggWheres
=
new
ArrayList
<>();
aggWheres
.
addAll
(
yWheres
);
STGroup
stg
=
new
STGroupFile
(
SQLConstants
.
SQL_TEMPLATE
);
ST
st_sql
=
stg
.
getInstanceOf
(
"querySql"
);
if
(
CollectionUtils
.
isNotEmpty
(
xFields
))
st_sql
.
add
(
"groups"
,
xFields
);
if
(
CollectionUtils
.
isNotEmpty
(
yFields
))
st_sql
.
add
(
"aggregators"
,
yFields
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
if
(
ObjectUtils
.
isNotEmpty
(
tableObj
))
st_sql
.
add
(
"table"
,
tableObj
);
String
sql
=
st_sql
.
render
();
ST
st
=
stg
.
getInstanceOf
(
"querySql"
);
SQLObj
tableSQL
=
SQLObj
.
builder
()
.
tableName
(
String
.
format
(
MySQLConstants
.
BRACKETS
,
sql
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
1
))
.
build
();
if
(
CollectionUtils
.
isNotEmpty
(
aggWheres
))
st
.
add
(
"filters"
,
aggWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
orders
))
st
.
add
(
"orders"
,
orders
);
if
(
ObjectUtils
.
isNotEmpty
(
tableSQL
))
st
.
add
(
"table"
,
tableSQL
);
return
st
.
render
();
}
@Override
public
String
getSQLAsTmpStack
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extStack
)
{
return
getSQLStack
(
"("
+
sqlFix
(
table
)
+
")"
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
,
extStack
);
}
@Override
@Override
public
String
searchTable
(
String
table
)
{
public
String
searchTable
(
String
table
)
{
return
"SELECT table_name FROM information_schema.TABLES WHERE table_name ='"
+
table
+
"'"
;
return
"SELECT table_name FROM information_schema.TABLES WHERE table_name ='"
+
table
+
"'"
;
...
...
backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java
浏览文件 @
a8e6e2d0
...
@@ -107,8 +107,7 @@ public class OracleQueryProvider extends QueryProvider {
...
@@ -107,8 +107,7 @@ public class OracleQueryProvider extends QueryProvider {
}
}
private
List
<
SQLObj
>
xFields
(
String
table
,
List
<
DatasetTableField
>
fields
)
{
private
List
<
SQLObj
>
xFields
(
String
table
,
List
<
DatasetTableField
>
fields
){
SQLObj
tableObj
=
SQLObj
.
builder
()
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
OracleConstants
.
KEYWORD_TABLE
,
table
))
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
OracleConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
OracleConstants
.
ALIAS_FIX
,
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
)))
.
tableAlias
(
String
.
format
(
OracleConstants
.
ALIAS_FIX
,
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
)))
...
@@ -155,6 +154,7 @@ public class OracleQueryProvider extends QueryProvider {
...
@@ -155,6 +154,7 @@ public class OracleQueryProvider extends QueryProvider {
}
}
return
xFields
;
return
xFields
;
}
}
private
String
sqlColumn
(
List
<
SQLObj
>
xFields
)
{
private
String
sqlColumn
(
List
<
SQLObj
>
xFields
)
{
String
[]
array
=
xFields
.
stream
().
map
(
f
->
{
String
[]
array
=
xFields
.
stream
().
map
(
f
->
{
return
f
.
getFieldAlias
();
return
f
.
getFieldAlias
();
...
@@ -287,6 +287,104 @@ public class OracleQueryProvider extends QueryProvider {
...
@@ -287,6 +287,104 @@ public class OracleQueryProvider extends QueryProvider {
return
getSQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
);
return
getSQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
);
}
}
@Override
public
String
getSQLStack
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extStack
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
OracleConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
OracleConstants
.
ALIAS_FIX
,
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
)))
.
build
();
List
<
SQLObj
>
xFields
=
new
ArrayList
<>();
List
<
SQLObj
>
xWheres
=
new
ArrayList
<>();
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
List
<
ChartViewFieldDTO
>
xList
=
new
ArrayList
<>();
xList
.
addAll
(
xAxis
);
xList
.
addAll
(
extStack
);
if
(
CollectionUtils
.
isNotEmpty
(
xList
))
{
for
(
int
i
=
0
;
i
<
xList
.
size
();
i
++)
{
ChartViewFieldDTO
x
=
xList
.
get
(
i
);
String
originField
=
String
.
format
(
OracleConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
x
.
getOriginName
());
String
fieldAlias
=
String
.
format
(
OracleConstants
.
ALIAS_FIX
,
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
i
));
// 处理横轴字段
xFields
.
add
(
getXFields
(
x
,
originField
,
fieldAlias
));
// 处理横轴过滤
xWheres
.
addAll
(
getXWheres
(
x
,
originField
,
fieldAlias
));
// 处理横轴排序
if
(
StringUtils
.
isNotEmpty
(
x
.
getSort
())
&&
!
StringUtils
.
equalsIgnoreCase
(
x
.
getSort
(),
"none"
))
{
xOrders
.
add
(
SQLObj
.
builder
()
.
orderField
(
originField
)
.
orderAlias
(
fieldAlias
)
.
orderDirection
(
x
.
getSort
())
.
build
());
}
}
}
List
<
SQLObj
>
yFields
=
new
ArrayList
<>();
List
<
SQLObj
>
yWheres
=
new
ArrayList
<>();
List
<
SQLObj
>
yOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
yAxis
))
{
for
(
int
i
=
0
;
i
<
yAxis
.
size
();
i
++)
{
ChartViewFieldDTO
y
=
yAxis
.
get
(
i
);
String
originField
=
String
.
format
(
OracleConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
y
.
getOriginName
());
String
fieldAlias
=
String
.
format
(
OracleConstants
.
ALIAS_FIX
,
String
.
format
(
SQLConstants
.
FIELD_ALIAS_Y_PREFIX
,
i
));
// 处理纵轴字段
yFields
.
add
(
getYFields
(
y
,
originField
,
fieldAlias
));
// 处理纵轴过滤
yWheres
.
addAll
(
getYWheres
(
y
,
originField
,
fieldAlias
));
// 处理纵轴排序
if
(
StringUtils
.
isNotEmpty
(
y
.
getSort
())
&&
!
StringUtils
.
equalsIgnoreCase
(
y
.
getSort
(),
"none"
))
{
yOrders
.
add
(
SQLObj
.
builder
()
.
orderField
(
originField
)
.
orderAlias
(
fieldAlias
)
.
orderDirection
(
y
.
getSort
())
.
build
());
}
}
}
// 处理视图中字段过滤
List
<
SQLObj
>
customWheres
=
transCustomFilterList
(
tableObj
,
customFilter
);
// 处理仪表板字段过滤
List
<
SQLObj
>
extWheres
=
transExtFilterList
(
tableObj
,
extFilterRequestList
);
// 构建sql所有参数
List
<
SQLObj
>
fields
=
new
ArrayList
<>();
fields
.
addAll
(
xFields
);
fields
.
addAll
(
yFields
);
List
<
SQLObj
>
wheres
=
new
ArrayList
<>();
wheres
.
addAll
(
xWheres
);
if
(
customWheres
!=
null
)
wheres
.
addAll
(
customWheres
);
if
(
extWheres
!=
null
)
wheres
.
addAll
(
extWheres
);
List
<
SQLObj
>
groups
=
new
ArrayList
<>();
groups
.
addAll
(
xFields
);
// 外层再次套sql
List
<
SQLObj
>
orders
=
new
ArrayList
<>();
orders
.
addAll
(
xOrders
);
orders
.
addAll
(
yOrders
);
List
<
SQLObj
>
aggWheres
=
new
ArrayList
<>();
aggWheres
.
addAll
(
yWheres
);
STGroup
stg
=
new
STGroupFile
(
SQLConstants
.
SQL_TEMPLATE
);
ST
st_sql
=
stg
.
getInstanceOf
(
"querySql"
);
if
(
CollectionUtils
.
isNotEmpty
(
xFields
))
st_sql
.
add
(
"groups"
,
xFields
);
if
(
CollectionUtils
.
isNotEmpty
(
yFields
))
st_sql
.
add
(
"aggregators"
,
yFields
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
if
(
ObjectUtils
.
isNotEmpty
(
tableObj
))
st_sql
.
add
(
"table"
,
tableObj
);
String
sql
=
st_sql
.
render
();
ST
st
=
stg
.
getInstanceOf
(
"querySql"
);
SQLObj
tableSQL
=
SQLObj
.
builder
()
.
tableName
(
String
.
format
(
OracleConstants
.
BRACKETS
,
sql
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
1
))
.
build
();
if
(
CollectionUtils
.
isNotEmpty
(
aggWheres
))
st
.
add
(
"filters"
,
aggWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
orders
))
st
.
add
(
"orders"
,
orders
);
if
(
ObjectUtils
.
isNotEmpty
(
tableSQL
))
st
.
add
(
"table"
,
tableSQL
);
return
st
.
render
();
}
@Override
public
String
getSQLAsTmpStack
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extStack
)
{
return
getSQLStack
(
"("
+
sqlFix
(
table
)
+
")"
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
,
extStack
);
}
@Override
@Override
public
String
searchTable
(
String
table
)
{
public
String
searchTable
(
String
table
)
{
return
"SELECT table_name FROM information_schema.TABLES WHERE table_name ='"
+
table
+
"'"
;
return
"SELECT table_name FROM information_schema.TABLES WHERE table_name ='"
+
table
+
"'"
;
...
...
backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java
浏览文件 @
a8e6e2d0
...
@@ -271,6 +271,16 @@ public class SqlserverQueryProvider extends QueryProvider {
...
@@ -271,6 +271,16 @@ public class SqlserverQueryProvider extends QueryProvider {
return
getSQL
(
" ("
+
sqlFix
(
sql
)
+
") AS tmp "
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
);
return
getSQL
(
" ("
+
sqlFix
(
sql
)
+
") AS tmp "
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
);
}
}
@Override
public
String
getSQLStack
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extStack
)
{
return
null
;
}
@Override
public
String
getSQLAsTmpStack
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extStack
)
{
return
null
;
}
@Override
@Override
public
String
searchTable
(
String
table
)
{
public
String
searchTable
(
String
table
)
{
return
"SELECT table_name FROM information_schema.TABLES WHERE table_name ='"
+
table
+
"'"
;
return
"SELECT table_name FROM information_schema.TABLES WHERE table_name ='"
+
table
+
"'"
;
...
...
backend/src/main/java/io/dataease/service/chart/ChartViewService.java
浏览文件 @
a8e6e2d0
差异被折叠。
点击展开。
backend/src/main/resources/db/migration/V16__alter_chart_view.sql
0 → 100644
浏览文件 @
a8e6e2d0
ALTER
TABLE
`chart_view`
ADD
COLUMN
`ext_stack`
LONGTEXT
COMMENT
'堆叠项'
AFTER
`y_axis`
;
UPDATE
`chart_view`
SET
`ext_stack`
=
'[]'
;
\ No newline at end of file
backend/src/main/resources/generatorConfig.xml
浏览文件 @
a8e6e2d0
...
@@ -64,7 +64,7 @@
...
@@ -64,7 +64,7 @@
<!--要生成的数据库表 -->
<!--要生成的数据库表 -->
<!-- <table tableName="datasource"/>--
>
<table
tableName=
"chart_view"
/
>
<!-- <table tableName="sys_dict"/>-->
<!-- <table tableName="sys_dict"/>-->
<!-- <table tableName="sys_dict_item"/>-->
<!-- <table tableName="sys_dict_item"/>-->
<!-- <table tableName="dataset_table_field"/>-->
<!-- <table tableName="dataset_table_field"/>-->
...
@@ -74,9 +74,9 @@
...
@@ -74,9 +74,9 @@
<!-- </table>-->
<!-- </table>-->
<!-- <table tableName="v_dataset"/>-->
<!-- <table tableName="v_dataset"/>-->
<!-- <table tableName="sys_auth_detail"/>-->
<!-- <table tableName="sys_auth_detail"/>-->
<table
tableName=
"dataset_table_task"
>
<!-- <table tableName="dataset_table_task">--
>
<columnOverride
column=
"extra_data"
javaType=
"java.lang.String"
jdbcType=
"VARCHAR"
/
>
<!-- <columnOverride column="extra_data" javaType="java.lang.String" jdbcType="VARCHAR" />--
>
</table
>
<!-- </table>--
>
</context>
</context>
...
...
frontend/src/lang/en.js
浏览文件 @
a8e6e2d0
...
@@ -819,6 +819,7 @@ export default {
...
@@ -819,6 +819,7 @@ export default {
drag_block_funnel_split
:
'Funnel Split'
,
drag_block_funnel_split
:
'Funnel Split'
,
drag_block_radar_length
:
'Branch Length'
,
drag_block_radar_length
:
'Branch Length'
,
drag_block_radar_label
:
'Branch Label'
,
drag_block_radar_label
:
'Branch Label'
,
stack_item
:
'Stack Item'
,
map_range
:
'Map range'
,
map_range
:
'Map range'
,
select_map_range
:
'Please select map range'
,
select_map_range
:
'Please select map range'
,
area
:
'Area'
area
:
'Area'
...
...
frontend/src/lang/tw.js
浏览文件 @
a8e6e2d0
...
@@ -821,7 +821,8 @@ export default {
...
@@ -821,7 +821,8 @@ export default {
drag_block_radar_label
:
'分支標簽'
,
drag_block_radar_label
:
'分支標簽'
,
map_range
:
'地圖範圍'
,
map_range
:
'地圖範圍'
,
select_map_range
:
'請選擇地圖範圍'
,
select_map_range
:
'請選擇地圖範圍'
,
area
:
'地區'
area
:
'地區'
,
stack_item
:
'堆疊項'
},
},
dataset
:
{
dataset
:
{
sheet_warn
:
'有多個sheet頁面,默認抽取第一個'
,
sheet_warn
:
'有多個sheet頁面,默認抽取第一個'
,
...
...
frontend/src/lang/zh.js
浏览文件 @
a8e6e2d0
...
@@ -821,7 +821,8 @@ export default {
...
@@ -821,7 +821,8 @@ export default {
drag_block_radar_label
:
'分支标签'
,
drag_block_radar_label
:
'分支标签'
,
map_range
:
'地图范围'
,
map_range
:
'地图范围'
,
select_map_range
:
'请选择地图范围'
,
select_map_range
:
'请选择地图范围'
,
area
:
'地区'
area
:
'地区'
,
stack_item
:
'堆叠项'
},
},
dataset
:
{
dataset
:
{
sheet_warn
:
'有多个 Sheet 页,默认抽取第一个'
,
sheet_warn
:
'有多个 Sheet 页,默认抽取第一个'
,
...
...
frontend/src/views/chart/components/drag-item/ChartDragItem.vue
0 → 100644
浏览文件 @
a8e6e2d0
<
template
>
<span>
<el-tag
v-if=
"!hasDataPermission('manage',param.privileges)"
size=
"small"
class=
"item-axis"
>
<span
style=
"float: left"
>
<svg-icon
v-if=
"item.deType === 0"
icon-class=
"field_text"
class=
"field-icon-text"
/>
<svg-icon
v-if=
"item.deType === 1"
icon-class=
"field_time"
class=
"field-icon-time"
/>
<svg-icon
v-if=
"item.deType === 2 || item.deType === 3"
icon-class=
"field_value"
class=
"field-icon-value"
/>
<svg-icon
v-if=
"item.deType === 5"
icon-class=
"field_location"
class=
"field-icon-location"
/>
</span>
<span
class=
"item-span-style"
:title=
"item.name"
>
{{
item
.
name
}}
</span>
</el-tag>
<el-dropdown
v-else
trigger=
"click"
size=
"mini"
@
command=
"clickItem"
>
<span
class=
"el-dropdown-link"
>
<el-tag
size=
"small"
class=
"item-axis"
>
<span
style=
"float: left"
>
<svg-icon
v-if=
"item.deType === 0"
icon-class=
"field_text"
class=
"field-icon-text"
/>
<svg-icon
v-if=
"item.deType === 1"
icon-class=
"field_time"
class=
"field-icon-time"
/>
<svg-icon
v-if=
"item.deType === 2 || item.deType === 3"
icon-class=
"field_value"
class=
"field-icon-value"
/>
<svg-icon
v-if=
"item.deType === 5"
icon-class=
"field_location"
class=
"field-icon-location"
/>
</span>
<span
class=
"item-span-style"
:title=
"item.name"
>
{{
item
.
name
}}
</span>
<i
class=
"el-icon-arrow-down el-icon--right"
style=
"position: absolute;top: 6px;right: 10px;"
/>
</el-tag>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item>
<el-dropdown
placement=
"right-start"
size=
"mini"
style=
"width: 100%"
@
command=
"sort"
>
<span
class=
"el-dropdown-link inner-dropdown-menu"
>
<span>
<i
class=
"el-icon-sort"
/>
<span>
{{
$t
(
'chart.sort'
)
}}
</span>
<span
class=
"summary-span"
>
(
{{
$t
(
'chart.'
+
item
.
sort
)
}}
)
</span>
</span>
<i
class=
"el-icon-arrow-right el-icon--right"
/>
</span>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item
:command=
"beforeSort('none')"
>
{{
$t
(
'chart.none'
)
}}
</el-dropdown-item>
<el-dropdown-item
:command=
"beforeSort('asc')"
>
{{
$t
(
'chart.asc'
)
}}
</el-dropdown-item>
<el-dropdown-item
:command=
"beforeSort('desc')"
>
{{
$t
(
'chart.desc'
)
}}
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</el-dropdown-item>
<el-dropdown-item
icon=
"el-icon-delete"
divided
:command=
"beforeClickItem('remove')"
>
<span>
{{
$t
(
'chart.delete'
)
}}
</span>
</el-dropdown-item>
</el-dropdown-menu>
</span>
</el-dropdown>
</span>
</
template
>
<
script
>
export
default
{
name
:
'ChartDragItem'
,
props
:
{
param
:
{
type
:
Object
,
required
:
true
},
item
:
{
type
:
Object
,
required
:
true
},
index
:
{
type
:
Number
,
required
:
true
}
},
data
()
{
return
{
}
},
mounted
()
{
},
methods
:
{
clickItem
(
param
)
{
if
(
!
param
)
{
return
}
switch
(
param
.
type
)
{
case
'remove'
:
this
.
removeItem
()
break
default
:
break
}
},
beforeClickItem
(
type
)
{
return
{
type
:
type
}
},
sort
(
param
)
{
// console.log(param)
this
.
item
.
sort
=
param
.
type
this
.
$emit
(
'onItemChange'
,
this
.
item
)
},
beforeSort
(
type
)
{
return
{
type
:
type
}
},
removeItem
()
{
this
.
item
.
index
=
this
.
index
this
.
$emit
(
'onItemRemove'
,
this
.
item
)
}
}
}
</
script
>
<
style
scoped
>
.item-axis
{
padding
:
1px
6px
;
margin
:
0
3px
2px
3px
;
text-align
:
left
;
height
:
24px
;
line-height
:
22px
;
display
:
flex
;
border-radius
:
4px
;
box-sizing
:
border-box
;
white-space
:
nowrap
;
width
:
159px
;
}
.item-axis
:hover
{
background-color
:
#fdfdfd
;
cursor
:
pointer
;
}
span
{
font-size
:
12px
;
}
.summary-span
{
margin-left
:
4px
;
color
:
#878d9f
;
;
}
.inner-dropdown-menu
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
width
:
100%
}
.item-span-style
{
display
:
inline-block
;
width
:
100px
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
overflow
:
hidden
;
}
</
style
>
frontend/src/views/chart/group/Group.vue
浏览文件 @
a8e6e2d0
...
@@ -741,6 +741,9 @@ export default {
...
@@ -741,6 +741,9 @@ export default {
background
:
DEFAULT_BACKGROUND_COLOR
,
background
:
DEFAULT_BACKGROUND_COLOR
,
split
:
DEFAULT_SPLIT
split
:
DEFAULT_SPLIT
})
})
view
.
xaxis
=
JSON
.
stringify
([])
view
.
yaxis
=
JSON
.
stringify
([])
view
.
extStack
=
JSON
.
stringify
([])
view
.
customFilter
=
JSON
.
stringify
([])
view
.
customFilter
=
JSON
.
stringify
([])
post
(
'/chart/view/save'
,
view
).
then
(
response
=>
{
post
(
'/chart/view/save'
,
view
).
then
(
response
=>
{
this
.
closeCreateChart
()
this
.
closeCreateChart
()
...
...
frontend/src/views/chart/view/ChartEdit.vue
浏览文件 @
a8e6e2d0
...
@@ -286,6 +286,26 @@
...
@@ -286,6 +286,26 @@
</transition-group>
</transition-group>
</draggable>
</draggable>
</el-row>
</el-row>
<el-row
v-if=
"chart.type.includes('stack')"
class=
"padding-lr"
style=
"margin-top: 6px;"
>
<span
style=
"width: 80px;text-align: right;"
>
<span
v-if=
"chart.type.includes('stack')"
>
{{
$t
(
'chart.stack_item'
)
}}
</span>
/
<span>
{{
$t
(
'chart.dimension'
)
}}
</span>
</span>
<draggable
v-model=
"view.extStack"
:disabled=
"!hasDataPermission('manage',param.privileges)"
group=
"drag"
animation=
"300"
:move=
"onMove"
style=
"padding:2px 0 0 0;width:100%;min-height: 32px;border-radius: 4px;border: 1px solid #DCDFE6;overflow-x: auto;display: flex;align-items: center;background-color: white;"
@
add=
"addStack"
>
<transition-group
class=
"draggable-group"
>
<chart-drag-item
v-for=
"(item,index) in view.extStack"
:key=
"item.id"
:param=
"param"
:index=
"index"
:item=
"item"
@
onItemChange=
"stackItemChange"
@
onItemRemove=
"stackItemRemove"
/>
</transition-group>
</draggable>
</el-row>
<div
class=
"padding-lr filter-class"
style=
"margin-top: 6px;"
>
<div
class=
"padding-lr filter-class"
style=
"margin-top: 6px;"
>
<span>
{{
$t
(
'chart.result_filter'
)
}}
</span>
<span>
{{
$t
(
'chart.result_filter'
)
}}
</span>
<!--
<el-button
:disabled=
"!hasDataPermission('manage',param.privileges)"
size=
"mini"
class=
"filter-btn-class"
@
click=
"showResultFilter"
>
-->
<!--
<el-button
:disabled=
"!hasDataPermission('manage',param.privileges)"
size=
"mini"
class=
"filter-btn-class"
@
click=
"showResultFilter"
>
-->
...
@@ -458,6 +478,7 @@ import draggable from 'vuedraggable'
...
@@ -458,6 +478,7 @@ import draggable from 'vuedraggable'
import
DimensionItem
from
'../components/drag-item/DimensionItem'
import
DimensionItem
from
'../components/drag-item/DimensionItem'
import
QuotaItem
from
'../components/drag-item/QuotaItem'
import
QuotaItem
from
'../components/drag-item/QuotaItem'
import
FilterItem
from
'../components/drag-item/FilterItem'
import
FilterItem
from
'../components/drag-item/FilterItem'
import
ChartDragItem
from
'../components/drag-item/ChartDragItem'
import
ResultFilterEditor
from
'../components/filter/ResultFilterEditor'
import
ResultFilterEditor
from
'../components/filter/ResultFilterEditor'
import
ChartComponent
from
'../components/ChartComponent'
import
ChartComponent
from
'../components/ChartComponent'
import
bus
from
'@/utils/bus'
import
bus
from
'@/utils/bus'
...
@@ -489,7 +510,7 @@ import QuotaFilterEditor from '../components/filter/QuotaFilterEditor'
...
@@ -489,7 +510,7 @@ import QuotaFilterEditor from '../components/filter/QuotaFilterEditor'
import
DimensionFilterEditor
from
'../components/filter/DimensionFilterEditor'
import
DimensionFilterEditor
from
'../components/filter/DimensionFilterEditor'
import
TableNormal
from
'../components/table/TableNormal'
import
TableNormal
from
'../components/table/TableNormal'
import
LabelNormal
from
'../components/normal/LabelNormal'
import
LabelNormal
from
'../components/normal/LabelNormal'
import
html2canvas
from
'html2canvasde'
//
import html2canvas from 'html2canvasde'
import
TableSelector
from
'./TableSelector'
import
TableSelector
from
'./TableSelector'
import
FieldEdit
from
'../../dataset/data/FieldEdit'
import
FieldEdit
from
'../../dataset/data/FieldEdit'
import
{
areaMapping
}
from
'@/api/map/map'
import
{
areaMapping
}
from
'@/api/map/map'
...
@@ -518,7 +539,8 @@ export default {
...
@@ -518,7 +539,8 @@ export default {
ChartComponent
,
ChartComponent
,
QuotaItem
,
QuotaItem
,
DimensionItem
,
DimensionItem
,
draggable
draggable
,
ChartDragItem
},
},
props
:
{
props
:
{
param
:
{
param
:
{
...
@@ -693,6 +715,11 @@ export default {
...
@@ -693,6 +715,11 @@ export default {
ele
.
filter
=
[]
ele
.
filter
=
[]
}
}
})
})
view
.
extStack
.
forEach
(
function
(
ele
)
{
if
(
!
ele
.
sort
||
ele
.
sort
===
''
)
{
ele
.
sort
=
'none'
}
})
if
(
view
.
type
.
startsWith
(
'pie'
)
||
view
.
type
.
startsWith
(
'funnel'
)
||
view
.
type
.
startsWith
(
'text'
)
||
view
.
type
.
startsWith
(
'gauge'
))
{
if
(
view
.
type
.
startsWith
(
'pie'
)
||
view
.
type
.
startsWith
(
'funnel'
)
||
view
.
type
.
startsWith
(
'text'
)
||
view
.
type
.
startsWith
(
'gauge'
))
{
if
(
view
.
yaxis
.
length
>
1
)
{
if
(
view
.
yaxis
.
length
>
1
)
{
view
.
yaxis
.
splice
(
1
,
view
.
yaxis
.
length
)
view
.
yaxis
.
splice
(
1
,
view
.
yaxis
.
length
)
...
@@ -714,6 +741,7 @@ export default {
...
@@ -714,6 +741,7 @@ export default {
view
.
customAttr
=
JSON
.
stringify
(
view
.
customAttr
)
view
.
customAttr
=
JSON
.
stringify
(
view
.
customAttr
)
view
.
customStyle
=
JSON
.
stringify
(
view
.
customStyle
)
view
.
customStyle
=
JSON
.
stringify
(
view
.
customStyle
)
view
.
customFilter
=
JSON
.
stringify
(
view
.
customFilter
)
view
.
customFilter
=
JSON
.
stringify
(
view
.
customFilter
)
view
.
extStack
=
JSON
.
stringify
(
view
.
extStack
)
post
(
'/chart/view/save'
,
view
).
then
(
response
=>
{
post
(
'/chart/view/save'
,
view
).
then
(
response
=>
{
// this.get(response.data.id);
// this.get(response.data.id);
// this.getData(response.data.id)
// this.getData(response.data.id)
...
@@ -733,67 +761,67 @@ export default {
...
@@ -733,67 +761,67 @@ export default {
})
})
},
},
saveSnapshot
()
{
//
saveSnapshot() {
if
(
this
.
view
.
title
&&
this
.
view
.
title
.
length
>
50
)
{
//
if (this.view.title && this.view.title.length > 50) {
this
.
$warning
(
this
.
$t
(
'chart.title_limit'
))
//
this.$warning(this.$t('chart.title_limit'))
return
//
return
}
//
}
if
(
this
.
loading
)
{
//
if (this.loading) {
return
//
return
}
//
}
this
.
loading
=
true
//
this.loading = true
html2canvas
(
this
.
$refs
.
imageWrapper
).
then
(
canvas
=>
{
//
html2canvas(this.$refs.imageWrapper).then(canvas => {
const
snapshot
=
canvas
.
toDataURL
(
'image/jpeg'
,
0.1
)
// 0.1是图片质量
//
const snapshot = canvas.toDataURL('image/jpeg', 0.1) // 0.1是图片质量
if
(
snapshot
!==
''
)
{
//
if (snapshot !== '') {
const
view
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
view
))
//
const view = JSON.parse(JSON.stringify(this.view))
view
.
id
=
this
.
view
.
id
//
view.id = this.view.id
view
.
sceneId
=
this
.
view
.
sceneId
//
view.sceneId = this.view.sceneId
view
.
name
=
this
.
view
.
name
?
this
.
view
.
name
:
this
.
table
.
name
//
view.name = this.view.name ? this.view.name : this.table.name
view
.
tableId
=
this
.
view
.
tableId
//
view.tableId = this.view.tableId
view
.
xaxis
.
forEach
(
function
(
ele
)
{
//
view.xaxis.forEach(function(ele) {
// if (!ele.summary || ele.summary === '') {
//
// if (!ele.summary || ele.summary === '') {
// ele.summary = 'sum'
//
// ele.summary = 'sum'
// }
//
// }
if
(
!
ele
.
sort
||
ele
.
sort
===
''
)
{
//
if (!ele.sort || ele.sort === '') {
ele
.
sort
=
'none'
//
ele.sort = 'none'
}
//
}
if
(
!
ele
.
filter
)
{
//
if (!ele.filter) {
ele
.
filter
=
[]
//
ele.filter = []
}
//
}
})
//
})
view
.
yaxis
.
forEach
(
function
(
ele
)
{
//
view.yaxis.forEach(function(ele) {
if
(
!
ele
.
summary
||
ele
.
summary
===
''
)
{
//
if (!ele.summary || ele.summary === '') {
if
(
ele
.
id
===
'count'
)
{
//
if (ele.id === 'count') {
ele
.
summary
=
'count'
//
ele.summary = 'count'
}
else
{
//
} else {
ele
.
summary
=
'sum'
//
ele.summary = 'sum'
}
//
}
}
//
}
if
(
!
ele
.
sort
||
ele
.
sort
===
''
)
{
//
if (!ele.sort || ele.sort === '') {
ele
.
sort
=
'none'
//
ele.sort = 'none'
}
//
}
if
(
!
ele
.
filter
)
{
//
if (!ele.filter) {
ele
.
filter
=
[]
//
ele.filter = []
}
//
}
})
//
})
if
(
view
.
type
.
startsWith
(
'pie'
)
||
view
.
type
.
startsWith
(
'funnel'
)
||
view
.
type
.
startsWith
(
'gauge'
))
{
//
if (view.type.startsWith('pie') || view.type.startsWith('funnel') || view.type.startsWith('gauge')) {
if
(
view
.
yaxis
.
length
>
1
)
{
//
if (view.yaxis.length > 1) {
view
.
yaxis
.
splice
(
1
,
view
.
yaxis
.
length
)
//
view.yaxis.splice(1, view.yaxis.length)
}
//
}
}
//
}
view
.
xaxis
=
JSON
.
stringify
(
view
.
xaxis
)
//
view.xaxis = JSON.stringify(view.xaxis)
view
.
yaxis
=
JSON
.
stringify
(
view
.
yaxis
)
//
view.yaxis = JSON.stringify(view.yaxis)
view
.
customAttr
=
JSON
.
stringify
(
view
.
customAttr
)
//
view.customAttr = JSON.stringify(view.customAttr)
view
.
customStyle
=
JSON
.
stringify
(
view
.
customStyle
)
//
view.customStyle = JSON.stringify(view.customStyle)
view
.
customFilter
=
JSON
.
stringify
(
view
.
customFilter
)
//
view.customFilter = JSON.stringify(view.customFilter)
view
.
snapshot
=
snapshot
//
view.snapshot = snapshot
post
(
'/chart/view/save'
,
view
).
then
(
response
=>
{
//
post('/chart/view/save', view).then(response => {
this
.
loading
=
false
//
this.loading = false
this
.
$success
(
this
.
$t
(
'commons.save_success'
))
//
this.$success(this.$t('commons.save_success'))
})
//
})
}
//
}
})
//
})
},
//
},
closeEdit
()
{
closeEdit
()
{
if
(
this
.
view
.
title
&&
this
.
view
.
title
.
length
>
50
)
{
if
(
this
.
view
.
title
&&
this
.
view
.
title
.
length
>
50
)
{
this
.
$warning
(
this
.
$t
(
'chart.title_limit'
))
this
.
$warning
(
this
.
$t
(
'chart.title_limit'
))
...
@@ -813,6 +841,7 @@ export default {
...
@@ -813,6 +841,7 @@ export default {
this
.
view
=
JSON
.
parse
(
JSON
.
stringify
(
response
.
data
))
this
.
view
=
JSON
.
parse
(
JSON
.
stringify
(
response
.
data
))
this
.
view
.
xaxis
=
this
.
view
.
xaxis
?
JSON
.
parse
(
this
.
view
.
xaxis
)
:
[]
this
.
view
.
xaxis
=
this
.
view
.
xaxis
?
JSON
.
parse
(
this
.
view
.
xaxis
)
:
[]
this
.
view
.
yaxis
=
this
.
view
.
yaxis
?
JSON
.
parse
(
this
.
view
.
yaxis
)
:
[]
this
.
view
.
yaxis
=
this
.
view
.
yaxis
?
JSON
.
parse
(
this
.
view
.
yaxis
)
:
[]
this
.
view
.
extStack
=
this
.
view
.
extStack
?
JSON
.
parse
(
this
.
view
.
extStack
)
:
[]
this
.
view
.
customAttr
=
this
.
view
.
customAttr
?
JSON
.
parse
(
this
.
view
.
customAttr
)
:
{}
this
.
view
.
customAttr
=
this
.
view
.
customAttr
?
JSON
.
parse
(
this
.
view
.
customAttr
)
:
{}
this
.
view
.
customStyle
=
this
.
view
.
customStyle
?
JSON
.
parse
(
this
.
view
.
customStyle
)
:
{}
this
.
view
.
customStyle
=
this
.
view
.
customStyle
?
JSON
.
parse
(
this
.
view
.
customStyle
)
:
{}
this
.
view
.
customFilter
=
this
.
view
.
customFilter
?
JSON
.
parse
(
this
.
view
.
customFilter
)
:
{}
this
.
view
.
customFilter
=
this
.
view
.
customFilter
?
JSON
.
parse
(
this
.
view
.
customFilter
)
:
{}
...
@@ -1254,6 +1283,20 @@ export default {
...
@@ -1254,6 +1283,20 @@ export default {
delete
resultNode
.
children
delete
resultNode
.
children
}
}
return
resultNode
return
resultNode
},
addStack
(
e
)
{
this
.
dragCheckType
(
this
.
dimensionData
,
'd'
)
if
(
this
.
view
.
extStack
&&
this
.
view
.
extStack
.
length
>
1
)
{
this
.
view
.
extStack
=
[
this
.
view
.
extStack
[
0
]]
}
this
.
save
(
true
)
},
stackItemChange
(
item
)
{
this
.
save
(
true
)
},
stackItemRemove
(
item
)
{
this
.
view
.
extStack
.
splice
(
item
.
index
,
1
)
this
.
save
(
true
)
}
}
}
}
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论