Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
dataease
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
zhu
dataease
Commits
f2daa5b2
Unverified
提交
f2daa5b2
authored
9月 08, 2021
作者:
fit2cloud-chenyw
提交者:
GitHub
9月 08, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'dev' into pr@dev@feat_ldap
上级
db3e8f60
fbb8ee65
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
34 个修改的文件
包含
953 行增加
和
93 行删除
+953
-93
ChartView.java
backend/src/main/java/io/dataease/base/domain/ChartView.java
+9
-12
ChartViewWithBLOBs.java
...main/java/io/dataease/base/domain/ChartViewWithBLOBs.java
+5
-3
ChartViewMapper.xml
...src/main/java/io/dataease/base/mapper/ChartViewMapper.xml
+22
-7
QueryProvider.java
...end/src/main/java/io/dataease/provider/QueryProvider.java
+4
-0
DorisQueryProvider.java
...n/java/io/dataease/provider/doris/DorisQueryProvider.java
+77
-0
MysqlQueryProvider.java
...n/java/io/dataease/provider/mysql/MysqlQueryProvider.java
+77
-0
OracleQueryProvider.java
...java/io/dataease/provider/oracle/OracleQueryProvider.java
+77
-0
PgQueryProvider.java
...rc/main/java/io/dataease/provider/pg/PgQueryProvider.java
+78
-0
SqlserverQueryProvider.java
...o/dataease/provider/sqlserver/SqlserverQueryProvider.java
+70
-1
ChartViewService.java
...main/java/io/dataease/service/chart/ChartViewService.java
+20
-0
DataSetTableService.java
...java/io/dataease/service/dataset/DataSetTableService.java
+22
-17
V26__de1.3.sql
backend/src/main/resources/db/migration/V26__de1.3.sql
+2
-0
generatorConfig.xml
backend/src/main/resources/generatorConfig.xml
+3
-1
messages_en_US.properties
backend/src/main/resources/i18n/messages_en_US.properties
+1
-0
messages_zh_CN.properties
backend/src/main/resources/i18n/messages_zh_CN.properties
+1
-0
messages_zh_TW.properties
backend/src/main/resources/i18n/messages_zh_TW.properties
+1
-0
UserView.vue
frontend/src/components/canvas/custom-component/UserView.vue
+1
-1
table-info.svg
frontend/src/icons/svg/table-info.svg
+1
-0
table-normal.svg
frontend/src/icons/svg/table-normal.svg
+1
-1
en.js
frontend/src/lang/en.js
+10
-2
tw.js
frontend/src/lang/tw.js
+10
-2
zh.js
frontend/src/lang/zh.js
+10
-2
chart.js
frontend/src/views/chart/chart/chart.js
+40
-3
common.js
frontend/src/views/chart/chart/common/common.js
+60
-1
mix.js
frontend/src/views/chart/chart/mix/mix.js
+2
-0
YAxisExtSelector.vue
...ews/chart/components/component-style/YAxisExtSelector.vue
+220
-0
QuotaExtItem.vue
...end/src/views/chart/components/drag-item/QuotaExtItem.vue
+0
-0
QuotaItem.vue
frontend/src/views/chart/components/drag-item/QuotaItem.vue
+6
-4
SizeSelector.vue
...nd/src/views/chart/components/shape-attr/SizeSelector.vue
+2
-2
TableNormal.vue
frontend/src/views/chart/components/table/TableNormal.vue
+112
-30
Group.vue
frontend/src/views/chart/group/Group.vue
+3
-0
ChartEdit.vue
frontend/src/views/chart/view/ChartEdit.vue
+0
-0
PDFPreExport.vue
frontend/src/views/panel/export/PDFPreExport.vue
+4
-3
PanelViewShow.vue
frontend/src/views/panel/list/PanelViewShow.vue
+2
-1
没有找到文件。
backend/src/main/java/io/dataease/base/domain/ChartView.java
浏览文件 @
f2daa5b2
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
;
@ApiModelProperty
(
"场景ID"
)
private
String
sceneId
;
@ApiModelProperty
(
"表ID"
)
private
String
tableId
;
@ApiModelProperty
(
"类型"
)
private
String
type
;
@ApiModelProperty
(
"标题"
)
private
String
title
;
@ApiModelProperty
(
"创建者"
)
private
String
createBy
;
@ApiModelProperty
(
"创建时间"
)
private
Long
createTime
;
@ApiModelProperty
(
"更新时间"
)
private
Long
updateTime
;
@ApiModelProperty
(
"样式优先级"
)
private
String
stylePriority
;
private
static
final
long
serialVersionUID
=
1L
;
...
...
backend/src/main/java/io/dataease/base/domain/ChartViewWithBLOBs.java
浏览文件 @
f2daa5b2
...
...
@@ -15,15 +15,17 @@ public class ChartViewWithBLOBs extends ChartView implements Serializable {
private
String
xAxis
;
@ApiModelProperty
(
"y轴"
)
private
String
yAxis
;
@ApiModelProperty
(
"副y轴"
)
private
String
yAxisExt
;
@ApiModelProperty
(
"堆叠"
)
private
String
extStack
;
@ApiModelProperty
(
"气泡"
)
private
String
extBubble
;
@ApiModelProperty
(
"
客户端
属性"
)
@ApiModelProperty
(
"
图形
属性"
)
private
String
customAttr
;
@ApiModelProperty
(
"
客户端
样式"
)
@ApiModelProperty
(
"
组件
样式"
)
private
String
customStyle
;
@ApiModelProperty
(
"
客户端
过滤条件"
)
@ApiModelProperty
(
"过滤条件"
)
private
String
customFilter
;
@ApiModelProperty
(
"下钻字段"
)
private
String
drillFields
;
...
...
backend/src/main/java/io/dataease/base/mapper/ChartViewMapper.xml
浏览文件 @
f2daa5b2
...
...
@@ -16,6 +16,7 @@
<resultMap
extends=
"BaseResultMap"
id=
"ResultMapWithBLOBs"
type=
"io.dataease.base.domain.ChartViewWithBLOBs"
>
<result
column=
"x_axis"
jdbcType=
"LONGVARCHAR"
property=
"xAxis"
/>
<result
column=
"y_axis"
jdbcType=
"LONGVARCHAR"
property=
"yAxis"
/>
<result
column=
"y_axis_ext"
jdbcType=
"LONGVARCHAR"
property=
"yAxisExt"
/>
<result
column=
"ext_stack"
jdbcType=
"LONGVARCHAR"
property=
"extStack"
/>
<result
column=
"ext_bubble"
jdbcType=
"LONGVARCHAR"
property=
"extBubble"
/>
<result
column=
"custom_attr"
jdbcType=
"LONGVARCHAR"
property=
"customAttr"
/>
...
...
@@ -87,7 +88,7 @@
style_priority
</sql>
<sql
id=
"Blob_Column_List"
>
x_axis, y_axis, ext_stack, ext_bubble, custom_attr, custom_style, custom_filter,
x_axis, y_axis,
y_axis_ext,
ext_stack, ext_bubble, custom_attr, custom_style, custom_filter,
drill_fields, snapshot
</sql>
<select
id=
"selectByExampleWithBLOBs"
parameterType=
"io.dataease.base.domain.ChartViewExample"
resultMap=
"ResultMapWithBLOBs"
>
...
...
@@ -143,16 +144,16 @@
table_id, `type`, title,
create_by, create_time, update_time,
style_priority, x_axis, y_axis,
ext_stack, ext_bubble, custom_attr
,
custom_
style, custom_filter, drill_fields
,
snapshot)
y_axis_ext, ext_stack, ext_bubble
,
custom_
attr, custom_style, custom_filter
,
drill_fields,
snapshot)
values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{sceneId,jdbcType=VARCHAR},
#{tableId,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}, #{title,jdbcType=VARCHAR},
#{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT},
#{stylePriority,jdbcType=VARCHAR}, #{xAxis,jdbcType=LONGVARCHAR}, #{yAxis,jdbcType=LONGVARCHAR},
#{
extStack,jdbcType=LONGVARCHAR}, #{extBubble,jdbcType=LONGVARCHAR}, #{customAttr
,jdbcType=LONGVARCHAR},
#{custom
Style,jdbcType=LONGVARCHAR}, #{customFilter,jdbcType=LONGVARCHAR}, #{drillFields
,jdbcType=LONGVARCHAR},
#{snapshot,jdbcType=LONGVARCHAR})
#{
yAxisExt,jdbcType=LONGVARCHAR}, #{extStack,jdbcType=LONGVARCHAR}, #{extBubble
,jdbcType=LONGVARCHAR},
#{custom
Attr,jdbcType=LONGVARCHAR}, #{customStyle,jdbcType=LONGVARCHAR}, #{customFilter
,jdbcType=LONGVARCHAR},
#{
drillFields,jdbcType=LONGVARCHAR}, #{
snapshot,jdbcType=LONGVARCHAR})
</insert>
<insert
id=
"insertSelective"
parameterType=
"io.dataease.base.domain.ChartViewWithBLOBs"
>
insert into chart_view
...
...
@@ -193,6 +194,9 @@
<if
test=
"yAxis != null"
>
y_axis,
</if>
<if
test=
"yAxisExt != null"
>
y_axis_ext,
</if>
<if
test=
"extStack != null"
>
ext_stack,
</if>
...
...
@@ -252,6 +256,9 @@
<if
test=
"yAxis != null"
>
#{yAxis,jdbcType=LONGVARCHAR},
</if>
<if
test=
"yAxisExt != null"
>
#{yAxisExt,jdbcType=LONGVARCHAR},
</if>
<if
test=
"extStack != null"
>
#{extStack,jdbcType=LONGVARCHAR},
</if>
...
...
@@ -320,6 +327,9 @@
<if
test=
"record.yAxis != null"
>
y_axis = #{record.yAxis,jdbcType=LONGVARCHAR},
</if>
<if
test=
"record.yAxisExt != null"
>
y_axis_ext = #{record.yAxisExt,jdbcType=LONGVARCHAR},
</if>
<if
test=
"record.extStack != null"
>
ext_stack = #{record.extStack,jdbcType=LONGVARCHAR},
</if>
...
...
@@ -360,6 +370,7 @@
style_priority = #{record.stylePriority,jdbcType=VARCHAR},
x_axis = #{record.xAxis,jdbcType=LONGVARCHAR},
y_axis = #{record.yAxis,jdbcType=LONGVARCHAR},
y_axis_ext = #{record.yAxisExt,jdbcType=LONGVARCHAR},
ext_stack = #{record.extStack,jdbcType=LONGVARCHAR},
ext_bubble = #{record.extBubble,jdbcType=LONGVARCHAR},
custom_attr = #{record.customAttr,jdbcType=LONGVARCHAR},
...
...
@@ -423,6 +434,9 @@
<if
test=
"yAxis != null"
>
y_axis = #{yAxis,jdbcType=LONGVARCHAR},
</if>
<if
test=
"yAxisExt != null"
>
y_axis_ext = #{yAxisExt,jdbcType=LONGVARCHAR},
</if>
<if
test=
"extStack != null"
>
ext_stack = #{extStack,jdbcType=LONGVARCHAR},
</if>
...
...
@@ -460,6 +474,7 @@
style_priority = #{stylePriority,jdbcType=VARCHAR},
x_axis = #{xAxis,jdbcType=LONGVARCHAR},
y_axis = #{yAxis,jdbcType=LONGVARCHAR},
y_axis_ext = #{yAxisExt,jdbcType=LONGVARCHAR},
ext_stack = #{extStack,jdbcType=LONGVARCHAR},
ext_bubble = #{extBubble,jdbcType=LONGVARCHAR},
custom_attr = #{customAttr,jdbcType=LONGVARCHAR},
...
...
backend/src/main/java/io/dataease/provider/QueryProvider.java
浏览文件 @
f2daa5b2
...
...
@@ -38,6 +38,10 @@ 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
getSQLTableInfo
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
Datasource
ds
);
public
abstract
String
getSQLAsTmpTableInfo
(
String
sql
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
Datasource
ds
);
public
abstract
String
getSQLStack
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extStack
,
Datasource
ds
);
public
abstract
String
getSQLAsTmpStack
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extStack
);
...
...
backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java
浏览文件 @
f2daa5b2
...
...
@@ -281,6 +281,83 @@ public class DorisQueryProvider extends QueryProvider {
return
st
.
render
();
}
@Override
public
String
getSQLTableInfo
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
Datasource
ds
)
{
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
<>();
if
(
CollectionUtils
.
isNotEmpty
(
xAxis
))
{
for
(
int
i
=
0
;
i
<
xAxis
.
size
();
i
++)
{
ChartViewFieldDTO
x
=
xAxis
.
get
(
i
);
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
x
.
getExtField
())
&&
x
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
x
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
x
.
getExtField
())
&&
x
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
DorisConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
x
.
getDataeaseName
());
}
else
{
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
>
customWheres
=
transCustomFilterList
(
tableObj
,
customFilter
);
// 处理仪表板字段过滤
List
<
SQLObj
>
extWheres
=
transExtFilterList
(
tableObj
,
extFilterRequestList
);
// 构建sql所有参数
List
<
SQLObj
>
fields
=
new
ArrayList
<>();
fields
.
addAll
(
xFields
);
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
);
STGroup
stg
=
new
STGroupFile
(
SQLConstants
.
SQL_TEMPLATE
);
ST
st_sql
=
stg
.
getInstanceOf
(
"previewSql"
);
st_sql
.
add
(
"isGroup"
,
false
);
if
(
CollectionUtils
.
isNotEmpty
(
xFields
))
st_sql
.
add
(
"groups"
,
xFields
);
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
(
"previewSql"
);
st
.
add
(
"isGroup"
,
false
);
SQLObj
tableSQL
=
SQLObj
.
builder
()
.
tableName
(
String
.
format
(
DorisConstants
.
BRACKETS
,
sql
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
1
))
.
build
();
if
(
CollectionUtils
.
isNotEmpty
(
orders
))
st
.
add
(
"orders"
,
orders
);
if
(
ObjectUtils
.
isNotEmpty
(
tableSQL
))
st
.
add
(
"table"
,
tableSQL
);
return
st
.
render
();
}
@Override
public
String
getSQLAsTmpTableInfo
(
String
sql
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
Datasource
ds
)
{
return
getSQLTableInfo
(
"("
+
sqlFix
(
sql
)
+
")"
,
xAxis
,
customFilter
,
extFilterRequestList
,
null
);
}
@Override
public
String
getSQLAsTmp
(
String
sql
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
)
{
return
getSQL
(
"("
+
sql
+
")"
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
,
null
);
...
...
backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java
浏览文件 @
f2daa5b2
...
...
@@ -270,6 +270,83 @@ public class MysqlQueryProvider extends QueryProvider {
return
st
.
render
();
}
@Override
public
String
getSQLTableInfo
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
Datasource
ds
)
{
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
<>();
if
(
CollectionUtils
.
isNotEmpty
(
xAxis
))
{
for
(
int
i
=
0
;
i
<
xAxis
.
size
();
i
++)
{
ChartViewFieldDTO
x
=
xAxis
.
get
(
i
);
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
x
.
getExtField
())
&&
x
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
x
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
x
.
getExtField
())
&&
x
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
MySQLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
x
.
getOriginName
());
}
else
{
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
>
customWheres
=
transCustomFilterList
(
tableObj
,
customFilter
);
// 处理仪表板字段过滤
List
<
SQLObj
>
extWheres
=
transExtFilterList
(
tableObj
,
extFilterRequestList
);
// 构建sql所有参数
List
<
SQLObj
>
fields
=
new
ArrayList
<>();
fields
.
addAll
(
xFields
);
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
);
STGroup
stg
=
new
STGroupFile
(
SQLConstants
.
SQL_TEMPLATE
);
ST
st_sql
=
stg
.
getInstanceOf
(
"previewSql"
);
st_sql
.
add
(
"isGroup"
,
false
);
if
(
CollectionUtils
.
isNotEmpty
(
xFields
))
st_sql
.
add
(
"groups"
,
xFields
);
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
(
"previewSql"
);
st
.
add
(
"isGroup"
,
false
);
SQLObj
tableSQL
=
SQLObj
.
builder
()
.
tableName
(
String
.
format
(
MySQLConstants
.
BRACKETS
,
sql
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
1
))
.
build
();
if
(
CollectionUtils
.
isNotEmpty
(
orders
))
st
.
add
(
"orders"
,
orders
);
if
(
ObjectUtils
.
isNotEmpty
(
tableSQL
))
st
.
add
(
"table"
,
tableSQL
);
return
st
.
render
();
}
@Override
public
String
getSQLAsTmpTableInfo
(
String
sql
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
Datasource
ds
)
{
return
getSQLTableInfo
(
"("
+
sqlFix
(
sql
)
+
")"
,
xAxis
,
customFilter
,
extFilterRequestList
,
null
);
}
@Override
public
String
getSQLAsTmp
(
String
sql
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
)
{
...
...
backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java
浏览文件 @
f2daa5b2
...
...
@@ -304,6 +304,83 @@ public class OracleQueryProvider extends QueryProvider {
return
st
.
render
();
}
@Override
public
String
getSQLTableInfo
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
Datasource
ds
)
{
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
<>();
if
(
CollectionUtils
.
isNotEmpty
(
xAxis
))
{
for
(
int
i
=
0
;
i
<
xAxis
.
size
();
i
++)
{
ChartViewFieldDTO
x
=
xAxis
.
get
(
i
);
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
x
.
getExtField
())
&&
x
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
x
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
x
.
getExtField
())
&&
x
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
OracleConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
x
.
getOriginName
());
}
else
{
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
>
customWheres
=
transCustomFilterList
(
tableObj
,
customFilter
);
// 处理仪表板字段过滤
List
<
SQLObj
>
extWheres
=
transExtFilterList
(
tableObj
,
extFilterRequestList
);
// 构建sql所有参数
List
<
SQLObj
>
fields
=
new
ArrayList
<>();
fields
.
addAll
(
xFields
);
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
);
STGroup
stg
=
new
STGroupFile
(
SQLConstants
.
SQL_TEMPLATE
);
ST
st_sql
=
stg
.
getInstanceOf
(
"previewSql"
);
st_sql
.
add
(
"isGroup"
,
false
);
if
(
CollectionUtils
.
isNotEmpty
(
xFields
))
st_sql
.
add
(
"groups"
,
xFields
);
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
(
"previewSql"
);
st
.
add
(
"isGroup"
,
false
);
SQLObj
tableSQL
=
SQLObj
.
builder
()
.
tableName
(
String
.
format
(
OracleConstants
.
BRACKETS
,
sql
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
1
))
.
build
();
if
(
CollectionUtils
.
isNotEmpty
(
orders
))
st
.
add
(
"orders"
,
orders
);
if
(
ObjectUtils
.
isNotEmpty
(
tableSQL
))
st
.
add
(
"table"
,
tableSQL
);
return
st
.
render
();
}
@Override
public
String
getSQLAsTmpTableInfo
(
String
sql
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
Datasource
ds
)
{
return
getSQLTableInfo
(
"("
+
sqlFix
(
sql
)
+
")"
,
xAxis
,
customFilter
,
extFilterRequestList
,
null
);
}
@Override
public
String
getSQLAsTmp
(
String
sql
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
)
{
return
getSQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
,
null
);
...
...
backend/src/main/java/io/dataease/provider/pg/PgQueryProvider.java
浏览文件 @
f2daa5b2
...
...
@@ -293,6 +293,84 @@ public class PgQueryProvider extends QueryProvider {
return
st
.
render
();
}
@Override
public
String
getSQLTableInfo
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
Datasource
ds
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
PgConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
.
build
();
setSchema
(
tableObj
,
ds
);
List
<
SQLObj
>
xFields
=
new
ArrayList
<>();
List
<
SQLObj
>
xWheres
=
new
ArrayList
<>();
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
xAxis
))
{
for
(
int
i
=
0
;
i
<
xAxis
.
size
();
i
++)
{
ChartViewFieldDTO
x
=
xAxis
.
get
(
i
);
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
x
.
getExtField
())
&&
x
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
x
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
x
.
getExtField
())
&&
x
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
PgConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
x
.
getOriginName
());
}
else
{
originField
=
String
.
format
(
PgConstants
.
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
>
customWheres
=
transCustomFilterList
(
tableObj
,
customFilter
);
// 处理仪表板字段过滤
List
<
SQLObj
>
extWheres
=
transExtFilterList
(
tableObj
,
extFilterRequestList
);
// 构建sql所有参数
List
<
SQLObj
>
fields
=
new
ArrayList
<>();
fields
.
addAll
(
xFields
);
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
);
STGroup
stg
=
new
STGroupFile
(
SQLConstants
.
SQL_TEMPLATE
);
ST
st_sql
=
stg
.
getInstanceOf
(
"previewSql"
);
st_sql
.
add
(
"isGroup"
,
false
);
if
(
CollectionUtils
.
isNotEmpty
(
xFields
))
st_sql
.
add
(
"groups"
,
xFields
);
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
(
"previewSql"
);
st
.
add
(
"isGroup"
,
false
);
SQLObj
tableSQL
=
SQLObj
.
builder
()
.
tableName
(
String
.
format
(
PgConstants
.
BRACKETS
,
sql
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
1
))
.
build
();
if
(
CollectionUtils
.
isNotEmpty
(
orders
))
st
.
add
(
"orders"
,
orders
);
if
(
ObjectUtils
.
isNotEmpty
(
tableSQL
))
st
.
add
(
"table"
,
tableSQL
);
return
st
.
render
();
}
@Override
public
String
getSQLAsTmpTableInfo
(
String
sql
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
Datasource
ds
)
{
return
getSQLTableInfo
(
"("
+
sqlFix
(
sql
)
+
")"
,
xAxis
,
customFilter
,
extFilterRequestList
,
null
);
}
@Override
public
String
getSQLAsTmp
(
String
sql
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
)
{
...
...
backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java
浏览文件 @
f2daa5b2
...
...
@@ -13,7 +13,6 @@ import io.dataease.dto.chart.ChartViewFieldDTO;
import
io.dataease.dto.sqlObj.SQLObj
;
import
io.dataease.provider.QueryProvider
;
import
io.dataease.provider.SQLConstants
;
import
io.dataease.provider.mysql.MySQLConstants
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.apache.commons.lang3.StringUtils
;
...
...
@@ -259,6 +258,76 @@ public class SqlserverQueryProvider extends QueryProvider {
return
st
.
render
();
}
@Override
public
String
getSQLTableInfo
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
Datasource
ds
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
SqlServerSQLConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
.
build
();
setSchema
(
tableObj
,
ds
);
List
<
SQLObj
>
xFields
=
new
ArrayList
<>();
List
<
SQLObj
>
xWheres
=
new
ArrayList
<>();
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
xAxis
))
{
for
(
int
i
=
0
;
i
<
xAxis
.
size
();
i
++)
{
ChartViewFieldDTO
x
=
xAxis
.
get
(
i
);
String
originField
=
String
.
format
(
SqlServerSQLConstants
.
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
>
customWheres
=
transCustomFilterList
(
tableObj
,
customFilter
);
// 处理仪表板字段过滤
List
<
SQLObj
>
extWheres
=
transExtFilterList
(
tableObj
,
extFilterRequestList
);
// 构建sql所有参数
List
<
SQLObj
>
fields
=
new
ArrayList
<>();
fields
.
addAll
(
xFields
);
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
);
STGroup
stg
=
new
STGroupFile
(
SQLConstants
.
SQL_TEMPLATE
);
ST
st_sql
=
stg
.
getInstanceOf
(
"previewSql"
);
st_sql
.
add
(
"isGroup"
,
false
);
if
(
CollectionUtils
.
isNotEmpty
(
xFields
))
st_sql
.
add
(
"groups"
,
xFields
);
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
(
"previewSql"
);
st
.
add
(
"isGroup"
,
false
);
SQLObj
tableSQL
=
SQLObj
.
builder
()
.
tableName
(
String
.
format
(
SqlServerSQLConstants
.
BRACKETS
,
sql
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
1
))
.
build
();
if
(
CollectionUtils
.
isNotEmpty
(
orders
))
st
.
add
(
"orders"
,
orders
);
if
(
ObjectUtils
.
isNotEmpty
(
tableSQL
))
st
.
add
(
"table"
,
tableSQL
);
return
st
.
render
();
}
@Override
public
String
getSQLAsTmpTableInfo
(
String
sql
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
Datasource
ds
)
{
return
getSQLTableInfo
(
"("
+
sqlFix
(
sql
)
+
")"
,
xAxis
,
customFilter
,
extFilterRequestList
,
null
);
}
@Override
public
String
getSQLAsTmp
(
String
sql
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
)
{
...
...
backend/src/main/java/io/dataease/service/chart/ChartViewService.java
浏览文件 @
f2daa5b2
...
...
@@ -184,6 +184,11 @@ public class ChartViewService {
}.
getType
());
List
<
ChartViewFieldDTO
>
yAxis
=
new
Gson
().
fromJson
(
view
.
getYAxis
(),
new
TypeToken
<
List
<
ChartViewFieldDTO
>>()
{
}.
getType
());
if
(
StringUtils
.
equalsIgnoreCase
(
view
.
getType
(),
"chart-mix"
))
{
List
<
ChartViewFieldDTO
>
yAxisExt
=
new
Gson
().
fromJson
(
view
.
getYAxisExt
(),
new
TypeToken
<
List
<
ChartViewFieldDTO
>>()
{
}.
getType
());
yAxis
.
addAll
(
yAxisExt
);
}
List
<
ChartViewFieldDTO
>
extStack
=
new
Gson
().
fromJson
(
view
.
getExtStack
(),
new
TypeToken
<
List
<
ChartViewFieldDTO
>>()
{
}.
getType
());
List
<
ChartViewFieldDTO
>
extBubble
=
new
Gson
().
fromJson
(
view
.
getExtBubble
(),
new
TypeToken
<
List
<
ChartViewFieldDTO
>>()
{
...
...
@@ -210,6 +215,13 @@ public class ChartViewService {
BeanUtils
.
copyBean
(
dto
,
view
);
return
dto
;
}
}
else
if
(
StringUtils
.
equalsIgnoreCase
(
"table-info"
,
view
.
getType
()))
{
yAxis
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isEmpty
(
xAxis
))
{
ChartViewDTO
dto
=
new
ChartViewDTO
();
BeanUtils
.
copyBean
(
dto
,
view
);
return
dto
;
}
}
else
{
if
(
CollectionUtils
.
isEmpty
(
xAxis
)
&&
CollectionUtils
.
isEmpty
(
yAxis
))
{
ChartViewDTO
dto
=
new
ChartViewDTO
();
...
...
@@ -321,6 +333,8 @@ public class ChartViewService {
datasourceRequest
.
setQuery
(
qp
.
getSQLStack
(
dataTableInfoDTO
.
getTable
(),
xAxis
,
yAxis
,
customFilter
,
extFilterList
,
extStack
,
ds
));
}
else
if
(
StringUtils
.
containsIgnoreCase
(
view
.
getType
(),
"scatter"
))
{
datasourceRequest
.
setQuery
(
qp
.
getSQLScatter
(
dataTableInfoDTO
.
getTable
(),
xAxis
,
yAxis
,
customFilter
,
extFilterList
,
extBubble
,
ds
));
}
else
if
(
StringUtils
.
equalsIgnoreCase
(
"table-info"
,
view
.
getType
()))
{
datasourceRequest
.
setQuery
(
qp
.
getSQLTableInfo
(
dataTableInfoDTO
.
getTable
(),
xAxis
,
customFilter
,
extFilterList
,
ds
));
}
else
{
datasourceRequest
.
setQuery
(
qp
.
getSQL
(
dataTableInfoDTO
.
getTable
(),
xAxis
,
yAxis
,
customFilter
,
extFilterList
,
ds
));
}
...
...
@@ -331,6 +345,8 @@ public class ChartViewService {
datasourceRequest
.
setQuery
(
qp
.
getSQLAsTmpStack
(
dataTableInfoDTO
.
getSql
(),
xAxis
,
yAxis
,
customFilter
,
extFilterList
,
extStack
));
}
else
if
(
StringUtils
.
containsIgnoreCase
(
view
.
getType
(),
"scatter"
))
{
datasourceRequest
.
setQuery
(
qp
.
getSQLAsTmpScatter
(
dataTableInfoDTO
.
getSql
(),
xAxis
,
yAxis
,
customFilter
,
extFilterList
,
extBubble
));
}
else
if
(
StringUtils
.
equalsIgnoreCase
(
"table-info"
,
view
.
getType
()))
{
datasourceRequest
.
setQuery
(
qp
.
getSQLAsTmpTableInfo
(
dataTableInfoDTO
.
getSql
(),
xAxis
,
customFilter
,
extFilterList
,
ds
));
}
else
{
datasourceRequest
.
setQuery
(
qp
.
getSQLAsTmp
(
dataTableInfoDTO
.
getSql
(),
xAxis
,
yAxis
,
customFilter
,
extFilterList
));
}
...
...
@@ -344,6 +360,8 @@ public class ChartViewService {
datasourceRequest
.
setQuery
(
qp
.
getSQLAsTmpStack
(
sql
,
xAxis
,
yAxis
,
customFilter
,
extFilterList
,
extStack
));
}
else
if
(
StringUtils
.
containsIgnoreCase
(
view
.
getType
(),
"scatter"
))
{
datasourceRequest
.
setQuery
(
qp
.
getSQLAsTmpScatter
(
sql
,
xAxis
,
yAxis
,
customFilter
,
extFilterList
,
extBubble
));
}
else
if
(
StringUtils
.
equalsIgnoreCase
(
"table-info"
,
view
.
getType
()))
{
datasourceRequest
.
setQuery
(
qp
.
getSQLAsTmpTableInfo
(
sql
,
xAxis
,
customFilter
,
extFilterList
,
ds
));
}
else
{
datasourceRequest
.
setQuery
(
qp
.
getSQLAsTmp
(
sql
,
xAxis
,
yAxis
,
customFilter
,
extFilterList
));
}
...
...
@@ -374,6 +392,8 @@ public class ChartViewService {
datasourceRequest
.
setQuery
(
qp
.
getSQLStack
(
tableName
,
xAxis
,
yAxis
,
customFilter
,
extFilterList
,
extStack
,
ds
));
}
else
if
(
StringUtils
.
containsIgnoreCase
(
view
.
getType
(),
"scatter"
))
{
datasourceRequest
.
setQuery
(
qp
.
getSQLScatter
(
tableName
,
xAxis
,
yAxis
,
customFilter
,
extFilterList
,
extBubble
,
ds
));
}
else
if
(
StringUtils
.
equalsIgnoreCase
(
"table-info"
,
view
.
getType
()))
{
datasourceRequest
.
setQuery
(
qp
.
getSQLTableInfo
(
tableName
,
xAxis
,
customFilter
,
extFilterList
,
ds
));
}
else
{
datasourceRequest
.
setQuery
(
qp
.
getSQL
(
tableName
,
xAxis
,
yAxis
,
customFilter
,
extFilterList
,
ds
));
}
...
...
backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java
浏览文件 @
f2daa5b2
package
io
.
dataease
.
service
.
dataset
;
import
com.fit2cloud.quartz.anno.QuartzScheduled
;
import
com.google.gson.Gson
;
import
io.dataease.base.domain.*
;
import
io.dataease.base.mapper.*
;
...
...
@@ -115,9 +114,9 @@ public class DataSetTableService {
}
}
public
void
saveExcel
(
DataSetTableRequest
datasetTable
)
throws
Exception
{
public
void
saveExcel
(
DataSetTableRequest
datasetTable
)
throws
Exception
{
if
(
StringUtils
.
isEmpty
(
datasetTable
.
getId
()))
{
if
(
datasetTable
.
isMergeSheet
())
{
if
(
datasetTable
.
isMergeSheet
())
{
Map
<
String
,
List
<
ExcelSheetData
>>
map
=
datasetTable
.
getSheets
().
stream
().
collect
(
Collectors
.
groupingBy
(
ExcelSheetData:
:
getFieldsMd5
));
for
(
String
s
:
map
.
keySet
())
{
DataSetTableRequest
sheetTable
=
new
DataSetTableRequest
();
...
...
@@ -147,7 +146,7 @@ public class DataSetTableService {
});
}
}
}
else
{
}
else
{
for
(
ExcelSheetData
sheet
:
datasetTable
.
getSheets
())
{
String
[]
fieldArray
=
sheet
.
getFields
().
stream
().
map
(
TableFiled:
:
getFieldName
).
toArray
(
String
[]::
new
);
if
(
checkIsRepeat
(
fieldArray
))
{
...
...
@@ -183,7 +182,7 @@ public class DataSetTableService {
List
<
String
>
oldFields
=
datasetTable
.
getSheets
().
get
(
0
).
getFields
().
stream
().
map
(
TableFiled:
:
getRemarks
).
collect
(
Collectors
.
toList
());
for
(
ExcelSheetData
sheet
:
datasetTable
.
getSheets
())
{
//替换时,
if
(
datasetTable
.
getEditType
()
==
0
)
{
if
(
datasetTable
.
getEditType
()
==
0
)
{
List
<
String
>
newFields
=
sheet
.
getFields
().
stream
().
map
(
TableFiled:
:
getRemarks
).
collect
(
Collectors
.
toList
());
if
(!
oldFields
.
equals
(
newFields
))
{
DataEaseException
.
throwException
(
Translator
.
get
(
"i18n_excel_colume_change"
));
...
...
@@ -240,7 +239,7 @@ public class DataSetTableService {
if
(
datasetTable
.
getIsRename
()
==
null
||
!
datasetTable
.
getIsRename
())
{
// 更新数据和字段
if
(
update
==
1
)
{
if
(
StringUtils
.
equalsIgnoreCase
(
datasetTable
.
getType
(),
"sql"
)
||
StringUtils
.
equalsIgnoreCase
(
datasetTable
.
getType
(),
"custom"
)
)
{
if
(
StringUtils
.
equalsIgnoreCase
(
datasetTable
.
getType
(),
"sql"
)
||
StringUtils
.
equalsIgnoreCase
(
datasetTable
.
getType
(),
"custom"
))
{
// 删除所有字段,重新抽象
dataSetTableFieldsService
.
deleteByTableId
(
datasetTable
.
getId
());
saveTableField
(
datasetTable
);
...
...
@@ -251,7 +250,7 @@ public class DataSetTableService {
return
datasetTable
;
}
public
void
alter
(
DataSetTableRequest
request
)
throws
Exception
{
public
void
alter
(
DataSetTableRequest
request
)
throws
Exception
{
checkName
(
request
);
datasetTableMapper
.
updateByPrimaryKeySelective
(
request
);
}
...
...
@@ -804,6 +803,9 @@ public class DataSetTableService {
if
(
StringUtils
.
equals
(
dto
.
getTargetTableId
(),
dataTableInfoCustomUnion
.
getTableId
()))
{
DatasetTableField
sourceField
=
dataSetTableFieldsService
.
get
(
dto
.
getSourceTableFieldId
());
DatasetTableField
targetField
=
dataSetTableFieldsService
.
get
(
dto
.
getTargetTableFieldId
());
if
(
ObjectUtils
.
isEmpty
(
sourceField
)
||
ObjectUtils
.
isEmpty
(
targetField
))
{
DEException
.
throwException
(
Translator
.
get
(
"i18n_dataset_field_delete"
));
}
join
.
append
(
convertUnionTypeToSQL
(
dto
.
getSourceUnionRelation
()))
.
append
(
DorisTableUtils
.
dorisName
(
dto
.
getTargetTableId
()))
.
append
(
" ON "
)
...
...
@@ -861,6 +863,9 @@ public class DataSetTableService {
if
(
StringUtils
.
equals
(
dto
.
getTargetTableId
(),
dataTableInfoCustomUnion
.
getTableId
()))
{
DatasetTableField
sourceField
=
dataSetTableFieldsService
.
get
(
dto
.
getSourceTableFieldId
());
DatasetTableField
targetField
=
dataSetTableFieldsService
.
get
(
dto
.
getTargetTableFieldId
());
if
(
ObjectUtils
.
isEmpty
(
sourceField
)
||
ObjectUtils
.
isEmpty
(
targetField
))
{
DEException
.
throwException
(
Translator
.
get
(
"i18n_dataset_field_delete"
));
}
DatasetTable
sourceTable
=
datasetTableMapper
.
selectByPrimaryKey
(
dto
.
getSourceTableId
());
String
sourceTableName
=
new
Gson
().
fromJson
(
sourceTable
.
getInfo
(),
DataTableInfoDTO
.
class
).
getTable
();
DatasetTable
targetTable
=
datasetTableMapper
.
selectByPrimaryKey
(
dto
.
getTargetTableId
());
...
...
@@ -901,7 +906,7 @@ public class DataSetTableService {
}
}
public
List
<
DatasetTableField
>
saveExcelTableField
(
String
datasetTableId
,
List
<
TableFiled
>
fields
,
boolean
insert
){
public
List
<
DatasetTableField
>
saveExcelTableField
(
String
datasetTableId
,
List
<
TableFiled
>
fields
,
boolean
insert
)
{
List
<
DatasetTableField
>
datasetTableFields
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
fields
))
{
for
(
int
i
=
0
;
i
<
fields
.
size
();
i
++)
{
...
...
@@ -920,7 +925,7 @@ public class DataSetTableService {
datasetTableField
.
setLastSyncTime
(
System
.
currentTimeMillis
());
datasetTableField
.
setExtField
(
0
);
datasetTableField
.
setGroupType
(
datasetTableField
.
getDeType
()
<
2
?
"d"
:
"q"
);
if
(
insert
)
{
if
(
insert
)
{
dataSetTableFieldsService
.
save
(
datasetTableField
);
}
datasetTableFields
.
add
(
datasetTableField
);
...
...
@@ -1120,11 +1125,11 @@ public class DataSetTableService {
.
replace
(
currentUpdateTime
,
Long
.
valueOf
(
System
.
currentTimeMillis
()).
toString
());
datasourceRequest
.
setQuery
(
qp
.
wrapSql
(
sql
));
List
<
String
>
sqlFileds
=
new
ArrayList
<>();
try
{
try
{
datasourceProvider
.
fetchResultField
(
datasourceRequest
).
stream
().
map
(
TableFiled:
:
getFieldName
).
forEach
(
filed
->
{
sqlFileds
.
add
(
filed
);
});
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
DataEaseException
.
throwException
(
Translator
.
get
(
"i18n_check_sql_error"
)
+
e
.
getMessage
());
}
...
...
@@ -1137,11 +1142,11 @@ public class DataSetTableService {
.
replace
(
currentUpdateTime
,
Long
.
valueOf
(
System
.
currentTimeMillis
()).
toString
());
datasourceRequest
.
setQuery
(
qp
.
wrapSql
(
sql
));
List
<
String
>
sqlFileds
=
new
ArrayList
<>();
try
{
try
{
datasourceProvider
.
fetchResultField
(
datasourceRequest
).
stream
().
map
(
TableFiled:
:
getFieldName
).
forEach
(
filed
->
{
sqlFileds
.
add
(
filed
);
});
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
DataEaseException
.
throwException
(
Translator
.
get
(
"i18n_check_sql_error"
)
+
e
.
getMessage
());
}
...
...
@@ -1186,7 +1191,7 @@ public class DataSetTableService {
List
<
ExcelSheetData
>
excelSheetDataList
=
parseExcel2
(
filename
,
file
.
getInputStream
(),
true
);
List
<
ExcelSheetData
>
retrunSheetDataList
=
new
ArrayList
<>();
if
(
StringUtils
.
isNotEmpty
(
tableId
)
&&
editType
==
1
)
{
if
(
StringUtils
.
isNotEmpty
(
tableId
)
&&
editType
==
1
)
{
List
<
DatasetTableField
>
datasetTableFields
=
dataSetTableFieldsService
.
getFieldsByTableId
(
tableId
);
datasetTableFields
.
stream
().
filter
(
datasetTableField
->
datasetTableField
.
getExtField
()
==
0
).
collect
(
Collectors
.
toList
());
datasetTableFields
.
sort
((
o1
,
o2
)
->
{
...
...
@@ -1210,7 +1215,7 @@ public class DataSetTableService {
if
(
retrunSheetDataList
.
size
()
==
0
)
{
DataEaseException
.
throwException
(
Translator
.
get
(
"i18n_excel_colume_change"
));
}
}
else
{
}
else
{
retrunSheetDataList
=
excelSheetDataList
;
}
...
...
@@ -1223,12 +1228,12 @@ public class DataSetTableService {
excelFileData
.
setPath
(
filePath
);
filename
=
filename
.
substring
(
0
,
filename
.
lastIndexOf
(
'.'
));
if
(
retrunSheetDataList
.
size
()
==
1
)
{
if
(
retrunSheetDataList
.
size
()
==
1
)
{
retrunSheetDataList
.
get
(
0
).
setDatasetName
(
filename
);
retrunSheetDataList
.
get
(
0
).
setSheetExcelId
(
excelId
);
retrunSheetDataList
.
get
(
0
).
setId
(
UUID
.
randomUUID
().
toString
());
retrunSheetDataList
.
get
(
0
).
setPath
(
filePath
);
}
else
{
}
else
{
for
(
ExcelSheetData
excelSheetData
:
retrunSheetDataList
)
{
excelSheetData
.
setDatasetName
(
filename
+
"-"
+
excelSheetData
.
getExcelLable
());
excelSheetData
.
setSheetExcelId
(
excelId
);
...
...
backend/src/main/resources/db/migration/V26__de1.3.sql
浏览文件 @
f2daa5b2
...
...
@@ -51,3 +51,5 @@ CREATE TABLE `panel_pdf_template` (
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
ALTER
TABLE
`chart_view`
ADD
COLUMN
`y_axis_ext`
LONGTEXT
COMMENT
'副轴'
AFTER
`y_axis`
;
UPDATE
`chart_view`
SET
`y_axis_ext`
=
'[]'
;
backend/src/main/resources/generatorConfig.xml
浏览文件 @
f2daa5b2
...
...
@@ -64,7 +64,9 @@
<!--要生成的数据库表 -->
<table
tableName=
"sys_user"
/>
<table
tableName=
"chart_view"
/>
<!-- <table tableName="sys_dict_item"/>-->
<!-- <table tableName="dataset_table_field"/>-->
<!-- <table tableName="v_chart">-->
...
...
backend/src/main/resources/i18n/messages_en_US.properties
浏览文件 @
f2daa5b2
...
...
@@ -283,3 +283,4 @@ i18n_change_task_status_error=Suspension is not allowed. The task status is:
i18n_Stopped
=
END
i18n_Exec
=
Running
i18n_no_trigger
=
The current setting does not trigger task generation.
i18n_dataset_field_delete
=
Union field deleted,please set again and redo.
backend/src/main/resources/i18n/messages_zh_CN.properties
浏览文件 @
f2daa5b2
...
...
@@ -282,4 +282,5 @@ i18n_change_task_status_error=不允许暂停,任务状态为:
i18n_Stopped
=
执行结束
i18n_Exec
=
运行中
i18n_no_trigger
=
当前设置没有触发任务生成
i18n_dataset_field_delete
=
该自定义数据集有关联字段被删除,请重新确认关联关系并重做该数据集
backend/src/main/resources/i18n/messages_zh_TW.properties
浏览文件 @
f2daa5b2
...
...
@@ -285,3 +285,4 @@ i18n_change_task_status_error=不允許暫停,任務狀態為:
i18n_Stopped
=
執行結束
i18n_Exec
=
運行中
i18n_no_trigger
=
当前设置没有触发任务生成 當前設置沒有觸發任務生成.
i18n_dataset_field_delete
=
該自定義數據集有關聯字段被刪除,請重新確認關聯關系並重做該數據集
frontend/src/components/canvas/custom-component/UserView.vue
浏览文件 @
f2daa5b2
...
...
@@ -18,7 +18,7 @@
</div>
<chart-component
v-if=
"httpRequest.status &&chart.type && !chart.type.includes('table') && !chart.type.includes('text')"
:ref=
"element.propValue.id"
class=
"chart-class"
:chart=
"chart"
:track-menu=
"trackMenu"
@
onChartClick=
"chartClick"
/>
<!--
<chart-component
:ref=
"element.propValue.id"
class=
"chart-class"
:chart=
"chart"
:track-menu=
"trackMenu"
@
onChartClick=
"chartClick"
/>
-->
<table-normal
v-if=
"httpRequest.status &&chart.type && chart.type.includes('table')"
:ref=
"element.propValue.id"
:chart=
"chart"
class=
"table-class"
/>
<table-normal
v-if=
"httpRequest.status &&chart.type && chart.type.includes('table')"
:ref=
"element.propValue.id"
:
show-summary=
"chart.type === 'table-normal'"
:
chart=
"chart"
class=
"table-class"
/>
<label-normal
v-if=
"httpRequest.status && chart.type && chart.type.includes('text')"
:ref=
"element.propValue.id"
:chart=
"chart"
class=
"table-class"
/>
<div
style=
"position: absolute;left: 20px;bottom:14px;"
>
<drill-path
:drill-filters=
"drillFilters"
@
onDrillJump=
"drillJump"
/>
...
...
frontend/src/icons/svg/table-info.svg
0 → 100644
浏览文件 @
f2daa5b2
<svg
t=
"1630896296862"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"2121"
width=
"200"
height=
"200"
><path
d=
"M85.333333 170.666667h853.333334v170.666666H85.333333z"
p-id=
"2122"
></path><path
d=
"M85.333333 384h256v128H85.333333zM384 384h256v128H384zM682.666667 384h256v128H682.666667zM85.333333 725.333333h256v128H85.333333zM384 725.333333h256v128H384zM682.666667 725.333333h256v128H682.666667z"
opacity=
".6"
p-id=
"2123"
></path><path
d=
"M85.333333 554.666667h256v128H85.333333zM384 554.666667h256v128H384zM682.666667 554.666667h256v128H682.666667z"
p-id=
"2124"
></path></svg>
frontend/src/icons/svg/table-normal.svg
浏览文件 @
f2daa5b2
<
?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
t=
"1619335647805"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"859"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"200"
height=
"200"
><defs><style
type=
"text/css"
></style></defs><path
d=
"M975.920762 0H72.46019C45.884952 0 24.380952 24.576 24.380952 54.979048v889.660952C24.380952 975.043048 45.884952 999.619048 72.46019 999.619048h903.460572C1002.496 999.619048 1024 975.043048 1024 944.64V54.979048C1024 24.576 1002.496 0 975.920762 0zM338.066286 925.988571H89.965714v-194.243047h248.100572v194.218666z m0-258.925714H89.965714v-194.243047h248.100572v194.218666z m0-258.925714H89.965714V213.991619h248.100572v194.096762z m310.174476 517.851428H400.14019v-194.243047h248.100572v194.218666z m0-258.925714H400.14019v-194.243047h248.100572v194.218666z m0-258.925714H400.14019V213.991619h248.100572v194.096762zM958.415238 925.988571H710.314667v-194.243047H958.415238v194.218666z m0-258.925714H710.314667v-194.243047H958.415238v194.218666z m0-258.925714H710.314667V213.991619H958.415238v194.096762z"
p-id=
"860
"
></path></svg>
<
svg
t=
"1630896178915"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"1969"
width=
"200"
height=
"200"
><path
d=
"M85.333333 170.666667h853.333334v170.666666H85.333333zM85.333333 384h170.666667v469.333333H85.333333z"
p-id=
"1970"
></path><path
d=
"M298.666667 384h640v128H298.666667z"
opacity=
".6"
p-id=
"1971"
></path><path
d=
"M298.666667 554.666667h298.666666v128H298.666667zM640 554.666667h298.666667v128H640z"
p-id=
"1972"
></path><path
d=
"M298.666667 725.333333h298.666666v128H298.666667zM640 725.333333h298.666667v128H640z"
opacity=
".6"
p-id=
"1973
"
></path></svg>
frontend/src/lang/en.js
浏览文件 @
f2daa5b2
...
...
@@ -746,7 +746,8 @@ export default {
filter_condition
:
'Filter Condition'
,
filter_field_can_null
:
'Filter field must choose'
,
preview_100_data
:
'Preview 100 rows'
,
chart_table_normal
:
'Detail Table'
,
chart_table_normal
:
'Summary Table'
,
chart_table_info
:
'Detail Table'
,
chart_card
:
'KPI Card'
,
chart_bar
:
'Base Bar'
,
chart_bar_stack
:
'Stack Bar'
,
...
...
@@ -854,7 +855,14 @@ export default {
axis_value_min
:
'Min'
,
axis_value_max
:
'Max'
,
axis_value_split
:
'Split'
,
axis_auto
:
'Auto'
axis_auto
:
'Auto'
,
table_info_switch
:
'Switch detail table will clear dimensions'
,
drag_block_value_axis_main
:
'Main Axis Value'
,
drag_block_value_axis_ext
:
'Ext Axis Value'
,
yAxis_main
:
'Main Vertical Axis'
,
yAxis_ext
:
'Ext Vertical Axis'
,
total
:
'Total'
,
items
:
'Items'
},
dataset
:
{
sheet_warn
:
'There are multiple sheet pages, and the first one is extracted by default'
,
...
...
frontend/src/lang/tw.js
浏览文件 @
f2daa5b2
...
...
@@ -745,7 +745,8 @@ export default {
filter_condition
:
'過濾條件'
,
filter_field_can_null
:
'過濾字段必填'
,
preview_100_data
:
'預覽前100條記錄'
,
chart_table_normal
:
'明細表'
,
chart_table_normal
:
'匯總表'
,
chart_table_info
:
'明細表'
,
chart_card
:
'指標卡'
,
chart_bar
:
'基礎柱狀圖'
,
chart_bar_stack
:
'堆疊柱狀圖'
,
...
...
@@ -853,7 +854,14 @@ export default {
axis_value_min
:
'最小值'
,
axis_value_max
:
'最大值'
,
axis_value_split
:
'間隔'
,
axis_auto
:
'自動'
axis_auto
:
'自動'
,
table_info_switch
:
'明細表切換將清空維度'
,
drag_block_value_axis_main
:
'主軸值'
,
drag_block_value_axis_ext
:
'副軸值'
,
yAxis_main
:
'主縱軸'
,
yAxis_ext
:
'副縱軸'
,
total
:
'共'
,
items
:
'條數據'
},
dataset
:
{
sheet_warn
:
'有多個sheet頁面,默認抽取第一個'
,
...
...
frontend/src/lang/zh.js
浏览文件 @
f2daa5b2
...
...
@@ -777,7 +777,8 @@ export default {
filter_condition
:
'过滤条件'
,
filter_field_can_null
:
'过滤字段必填'
,
preview_100_data
:
'预览前100条记录'
,
chart_table_normal
:
'明细表'
,
chart_table_normal
:
'汇总表'
,
chart_table_info
:
'明细表'
,
chart_card
:
'指标卡'
,
chart_bar
:
'基础柱状图'
,
chart_bar_stack
:
'堆叠柱状图'
,
...
...
@@ -885,7 +886,14 @@ export default {
axis_value_min
:
'最小值'
,
axis_value_max
:
'最大值'
,
axis_value_split
:
'间隔'
,
axis_auto
:
'自动'
axis_auto
:
'自动'
,
table_info_switch
:
'明细表切换将清空维度'
,
drag_block_value_axis_main
:
'主轴值'
,
drag_block_value_axis_ext
:
'副轴值'
,
yAxis_main
:
'主纵轴'
,
yAxis_ext
:
'副纵轴'
,
total
:
'共'
,
items
:
'条数据'
},
dataset
:
{
sheet_warn
:
'有多个 Sheet 页,默认抽取第一个'
,
...
...
frontend/src/views/chart/chart/chart.js
浏览文件 @
f2daa5b2
...
...
@@ -145,6 +145,36 @@ export const DEFAULT_YAXIS_STYLE = {
split
:
null
}
}
export
const
DEFAULT_YAXIS_EXT_STYLE
=
{
show
:
true
,
position
:
'right'
,
name
:
''
,
nameTextStyle
:
{
color
:
'#333333'
,
fontSize
:
12
},
axisLabel
:
{
show
:
true
,
color
:
'#333333'
,
fontSize
:
'12'
,
rotate
:
0
,
formatter
:
'{value}'
},
splitLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#cccccc'
,
width
:
1
,
style
:
'solid'
}
},
axisValue
:
{
auto
:
true
,
min
:
null
,
max
:
null
,
split
:
null
}
}
export
const
DEFAULT_BACKGROUND_COLOR
=
{
color
:
'#ffffff'
,
alpha
:
0
...
...
@@ -586,6 +616,7 @@ export const BASE_CHART_STRING = {
legend
:
DEFAULT_LEGEND_STYLE
,
xAxis
:
DEFAULT_XAXIS_STYLE
,
yAxis
:
DEFAULT_YAXIS_STYLE
,
yAxisExt
:
DEFAULT_YAXIS_EXT_STYLE
,
background
:
DEFAULT_BACKGROUND_COLOR
}),
customFilter
:
'[]'
...
...
@@ -609,6 +640,7 @@ export const BASE_CHART = {
legend
:
DEFAULT_LEGEND_STYLE
,
xAxis
:
DEFAULT_XAXIS_STYLE
,
yAxis
:
DEFAULT_YAXIS_STYLE
,
yAxisExt
:
DEFAULT_YAXIS_EXT_STYLE
,
background
:
DEFAULT_BACKGROUND_COLOR
},
customFilter
:
[]
...
...
@@ -771,9 +803,14 @@ export const BASE_MIX = {
xAxis
:
{
data
:
[]
},
yAxis
:
{
type
:
'value'
},
yAxis
:
[
{
type
:
'value'
},
{
type
:
'value'
}
],
series
:
[],
dataZoom
:
[
{
...
...
frontend/src/views/chart/chart/common/common.js
浏览文件 @
f2daa5b2
import
{
hexColorToRGBA
}
from
'@/views/chart/chart/util'
import
{
DEFAULT_YAXIS_EXT_STYLE
}
from
'@/views/chart/chart/chart'
export
function
componentStyle
(
chart_option
,
chart
)
{
const
padding
=
'8px'
...
...
@@ -50,6 +51,9 @@ export function componentStyle(chart_option, chart) {
chart_option
.
legend
.
orient
=
customStyle
.
legend
.
orient
chart_option
.
legend
.
icon
=
customStyle
.
legend
.
icon
chart_option
.
legend
.
textStyle
=
customStyle
.
legend
.
textStyle
if
(
chart
.
type
===
'treemap'
)
{
chart_option
.
legend
.
show
=
false
}
}
if
(
customStyle
.
xAxis
&&
(
chart
.
type
.
includes
(
'bar'
)
||
chart
.
type
.
includes
(
'line'
)
||
chart
.
type
.
includes
(
'scatter'
)
||
chart
.
type
===
'chart-mix'
))
{
chart_option
.
xAxis
.
show
=
customStyle
.
xAxis
.
show
...
...
@@ -78,7 +82,7 @@ export function componentStyle(chart_option, chart) {
}
}
}
if
(
customStyle
.
yAxis
&&
(
chart
.
type
.
includes
(
'bar'
)
||
chart
.
type
.
includes
(
'line'
)
||
chart
.
type
.
includes
(
'scatter'
)
||
chart
.
type
===
'chart-mix'
))
{
if
(
customStyle
.
yAxis
&&
(
chart
.
type
.
includes
(
'bar'
)
||
chart
.
type
.
includes
(
'line'
)
||
chart
.
type
.
includes
(
'scatter'
)))
{
chart_option
.
yAxis
.
show
=
customStyle
.
yAxis
.
show
chart_option
.
yAxis
.
position
=
customStyle
.
yAxis
.
position
chart_option
.
yAxis
.
name
=
customStyle
.
yAxis
.
name
...
...
@@ -105,6 +109,61 @@ export function componentStyle(chart_option, chart) {
}
}
}
if
(
customStyle
.
yAxis
&&
chart
.
type
===
'chart-mix'
)
{
chart_option
.
yAxis
[
0
].
show
=
customStyle
.
yAxis
.
show
chart_option
.
yAxis
[
0
].
position
=
customStyle
.
yAxis
.
position
chart_option
.
yAxis
[
0
].
name
=
customStyle
.
yAxis
.
name
chart_option
.
yAxis
[
0
].
axisLabel
=
customStyle
.
yAxis
.
axisLabel
chart_option
.
yAxis
[
0
].
splitLine
=
customStyle
.
yAxis
.
splitLine
chart_option
.
yAxis
[
0
].
nameTextStyle
=
customStyle
.
yAxis
.
nameTextStyle
chart_option
.
yAxis
[
0
].
axisLabel
.
showMaxLabel
=
true
chart_option
.
yAxis
[
0
].
axisLabel
.
showMinLabel
=
true
if
(
!
customStyle
.
yAxis
.
show
)
{
chart_option
.
yAxis
[
0
].
axisLabel
.
show
=
false
}
// 轴值设置
delete
chart_option
.
yAxis
[
0
].
min
delete
chart_option
.
yAxis
[
0
].
max
delete
chart_option
.
yAxis
[
0
].
split
if
(
!
chart
.
type
.
includes
(
'horizontal'
))
{
if
(
customStyle
.
yAxis
.
axisValue
&&
!
customStyle
.
yAxis
.
axisValue
.
auto
)
{
customStyle
.
yAxis
.
axisValue
.
min
&&
(
chart_option
.
yAxis
[
0
].
min
=
parseFloat
(
customStyle
.
yAxis
.
axisValue
.
min
))
customStyle
.
yAxis
.
axisValue
.
max
&&
(
chart_option
.
yAxis
[
0
].
max
=
parseFloat
(
customStyle
.
yAxis
.
axisValue
.
max
))
customStyle
.
yAxis
.
axisValue
.
split
&&
(
chart_option
.
yAxis
[
0
].
interval
=
parseFloat
(
customStyle
.
yAxis
.
axisValue
.
split
))
}
}
// axis ext
!
customStyle
.
yAxisExt
&&
(
customStyle
.
yAxisExt
=
JSON
.
parse
(
JSON
.
stringify
(
DEFAULT_YAXIS_EXT_STYLE
)))
chart_option
.
yAxis
[
1
].
show
=
customStyle
.
yAxisExt
.
show
chart_option
.
yAxis
[
1
].
position
=
customStyle
.
yAxisExt
.
position
chart_option
.
yAxis
[
1
].
name
=
customStyle
.
yAxisExt
.
name
chart_option
.
yAxis
[
1
].
axisLabel
=
customStyle
.
yAxisExt
.
axisLabel
chart_option
.
yAxis
[
1
].
splitLine
=
customStyle
.
yAxisExt
.
splitLine
chart_option
.
yAxis
[
1
].
nameTextStyle
=
customStyle
.
yAxisExt
.
nameTextStyle
chart_option
.
yAxis
[
1
].
axisLabel
.
showMaxLabel
=
true
chart_option
.
yAxis
[
1
].
axisLabel
.
showMinLabel
=
true
if
(
!
customStyle
.
yAxisExt
.
show
)
{
chart_option
.
yAxis
[
1
].
axisLabel
.
show
=
false
}
// 轴值设置
delete
chart_option
.
yAxis
[
1
].
min
delete
chart_option
.
yAxis
[
1
].
max
delete
chart_option
.
yAxis
[
1
].
split
if
(
!
chart
.
type
.
includes
(
'horizontal'
))
{
if
(
customStyle
.
yAxisExt
.
axisValue
&&
!
customStyle
.
yAxisExt
.
axisValue
.
auto
)
{
customStyle
.
yAxisExt
.
axisValue
.
min
&&
(
chart_option
.
yAxis
[
1
].
min
=
parseFloat
(
customStyle
.
yAxisExt
.
axisValue
.
min
))
customStyle
.
yAxisExt
.
axisValue
.
max
&&
(
chart_option
.
yAxis
[
1
].
max
=
parseFloat
(
customStyle
.
yAxisExt
.
axisValue
.
max
))
customStyle
.
yAxisExt
.
axisValue
.
split
&&
(
chart_option
.
yAxis
[
1
].
interval
=
parseFloat
(
customStyle
.
yAxisExt
.
axisValue
.
split
))
}
}
}
if
(
customStyle
.
split
&&
chart
.
type
.
includes
(
'radar'
))
{
chart_option
.
radar
.
name
=
customStyle
.
split
.
name
chart_option
.
radar
.
splitNumber
=
customStyle
.
split
.
splitNumber
...
...
frontend/src/views/chart/chart/mix/mix.js
浏览文件 @
f2daa5b2
...
...
@@ -4,6 +4,7 @@ import { componentStyle } from '../common/common'
export
function
baseMixOption
(
chart_option
,
chart
)
{
// 处理shape attr
let
customAttr
=
{}
const
yAxis
=
JSON
.
parse
(
chart
.
yaxis
)
if
(
chart
.
customAttr
)
{
customAttr
=
JSON
.
parse
(
chart
.
customAttr
)
if
(
customAttr
.
color
)
{
...
...
@@ -68,6 +69,7 @@ export function baseMixOption(chart_option, chart) {
y
.
label
=
customAttr
.
label
}
chart_option
.
legend
.
data
.
push
(
y
.
name
)
i
>=
yAxis
.
length
?
(
y
.
yAxisIndex
=
1
)
:
(
y
.
yAxisIndex
=
0
)
chart_option
.
series
.
push
(
y
)
}
}
...
...
frontend/src/views/chart/components/component-style/YAxisExtSelector.vue
0 → 100644
浏览文件 @
f2daa5b2
<
template
>
<div
style=
"width: 100%"
>
<el-col>
<el-form
ref=
"axisForm"
:model=
"axisForm"
label-width=
"80px"
size=
"mini"
:disabled=
"!hasDataPermission('manage',param.privileges)"
>
<el-form-item
:label=
"$t('chart.show')"
class=
"form-item"
>
<el-checkbox
v-model=
"axisForm.show"
@
change=
"changeYAxisStyle"
>
{{
$t
(
'chart.show'
)
}}
</el-checkbox>
</el-form-item>
<div
v-show=
"axisForm.show"
>
<el-form-item
:label=
"$t('chart.position')"
class=
"form-item"
>
<el-radio-group
v-model=
"axisForm.position"
size=
"mini"
@
change=
"changeYAxisStyle"
>
<el-radio-button
label=
"left"
>
{{
$t
(
'chart.text_pos_left'
)
}}
</el-radio-button>
<el-radio-button
label=
"right"
>
{{
$t
(
'chart.text_pos_right'
)
}}
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item
:label=
"$t('chart.name')"
class=
"form-item"
>
<el-input
v-model=
"axisForm.name"
size=
"mini"
@
blur=
"changeYAxisStyle"
/>
</el-form-item>
<el-form-item
:label=
"$t('chart.axis_name_color')"
class=
"form-item"
>
<el-color-picker
v-model=
"axisForm.nameTextStyle.color"
class=
"color-picker-style"
@
change=
"changeYAxisStyle"
/>
</el-form-item>
<el-form-item
:label=
"$t('chart.axis_name_fontsize')"
class=
"form-item"
>
<el-select
v-model=
"axisForm.nameTextStyle.fontSize"
:placeholder=
"$t('chart.axis_name_fontsize')"
@
change=
"changeYAxisStyle"
>
<el-option
v-for=
"option in fontSize"
:key=
"option.value"
:label=
"option.name"
:value=
"option.value"
/>
</el-select>
</el-form-item>
<span
v-show=
"chart.type && !chart.type.includes('horizontal')"
>
<el-divider
/>
<el-form-item
class=
"form-item"
>
<span
slot=
"label"
>
<span
class=
"span-box"
>
<span>
{{
$t
(
'chart.axis_value'
)
}}
</span>
<el-tooltip
class=
"item"
effect=
"dark"
placement=
"bottom"
>
<div
slot=
"content"
>
最小值、最大值、间隔均为数值类型;若不填,则该项视为自动。
<br>
请确保填写数值能正确计算,否则将无法正常显示轴值。
</div>
<i
class=
"el-icon-info"
style=
"cursor: pointer;"
/>
</el-tooltip>
</span>
</span>
<el-checkbox
v-model=
"axisForm.axisValue.auto"
@
change=
"changeYAxisStyle"
>
{{
$t
(
'chart.axis_auto'
)
}}
</el-checkbox>
</el-form-item>
<span
v-show=
"!axisForm.axisValue.auto"
>
<el-form-item
:label=
"$t('chart.axis_value_min')"
class=
"form-item"
>
<el-input
v-model=
"axisForm.axisValue.min"
@
blur=
"changeYAxisStyle"
/>
</el-form-item>
<el-form-item
:label=
"$t('chart.axis_value_max')"
class=
"form-item"
>
<el-input
v-model=
"axisForm.axisValue.max"
@
blur=
"changeYAxisStyle"
/>
</el-form-item>
<el-form-item
:label=
"$t('chart.axis_value_split')"
class=
"form-item"
>
<el-input
v-model=
"axisForm.axisValue.split"
@
blur=
"changeYAxisStyle"
/>
</el-form-item>
</span>
</span>
<el-divider
/>
<el-form-item
:label=
"$t('chart.axis_show')"
class=
"form-item"
>
<el-checkbox
v-model=
"axisForm.splitLine.show"
@
change=
"changeYAxisStyle"
>
{{
$t
(
'chart.axis_show'
)
}}
</el-checkbox>
</el-form-item>
<span
v-show=
"axisForm.splitLine.show"
>
<el-form-item
:label=
"$t('chart.axis_color')"
class=
"form-item"
>
<el-color-picker
v-model=
"axisForm.splitLine.lineStyle.color"
class=
"el-color-picker"
@
change=
"changeYAxisStyle"
/>
</el-form-item>
<el-form-item
:label=
"$t('chart.axis_width')"
class=
"form-item form-item-slider"
>
<el-slider
v-model=
"axisForm.splitLine.lineStyle.width"
:min=
"1"
:max=
"10"
show-input
:show-input-controls=
"false"
input-size=
"mini"
@
change=
"changeYAxisStyle"
/>
</el-form-item>
<el-form-item
:label=
"$t('chart.axis_type')"
class=
"form-item"
>
<el-radio-group
v-model=
"axisForm.splitLine.lineStyle.type"
size=
"mini"
@
change=
"changeYAxisStyle"
>
<el-radio-button
label=
"solid"
>
{{
$t
(
'chart.axis_type_solid'
)
}}
</el-radio-button>
<el-radio-button
label=
"dashed"
>
{{
$t
(
'chart.axis_type_dashed'
)
}}
</el-radio-button>
<el-radio-button
label=
"dotted"
>
{{
$t
(
'chart.axis_type_dotted'
)
}}
</el-radio-button>
</el-radio-group>
</el-form-item>
</span>
<el-divider
/>
<el-form-item
:label=
"$t('chart.axis_label_show')"
class=
"form-item"
>
<el-checkbox
v-model=
"axisForm.axisLabel.show"
@
change=
"changeYAxisStyle"
>
{{
$t
(
'chart.axis_label_show'
)
}}
</el-checkbox>
</el-form-item>
<span
v-show=
"axisForm.axisLabel.show"
>
<el-form-item
:label=
"$t('chart.axis_label_color')"
class=
"form-item"
>
<el-color-picker
v-model=
"axisForm.axisLabel.color"
class=
"el-color-picker"
@
change=
"changeYAxisStyle"
/>
</el-form-item>
<el-form-item
:label=
"$t('chart.axis_label_rotate')"
class=
"form-item form-item-slider"
>
<el-slider
v-model=
"axisForm.axisLabel.rotate"
show-input
:show-input-controls=
"false"
:min=
"-90"
:max=
"90"
input-size=
"mini"
@
change=
"changeYAxisStyle"
/>
</el-form-item>
<el-form-item
:label=
"$t('chart.axis_label_fontsize')"
class=
"form-item"
>
<el-select
v-model=
"axisForm.axisLabel.fontSize"
:placeholder=
"$t('chart.axis_label_fontsize')"
@
change=
"changeYAxisStyle"
>
<el-option
v-for=
"option in fontSize"
:key=
"option.value"
:label=
"option.name"
:value=
"option.value"
/>
</el-select>
</el-form-item>
</span>
<el-divider
/>
<el-form-item
:label=
"$t('chart.content_formatter')"
class=
"form-item"
>
<el-input
v-model=
"axisForm.axisLabel.formatter"
type=
"textarea"
:autosize=
"
{ minRows: 4, maxRows: 4}" @blur="changeYAxisStyle" />
</el-form-item>
</div>
</el-form>
</el-col>
</div>
</
template
>
<
script
>
import
{
DEFAULT_YAXIS_EXT_STYLE
}
from
'../../chart/chart'
export
default
{
name
:
'YAxisExtSelector'
,
props
:
{
param
:
{
type
:
Object
,
required
:
true
},
chart
:
{
type
:
Object
,
required
:
true
}
},
data
()
{
return
{
axisForm
:
JSON
.
parse
(
JSON
.
stringify
(
DEFAULT_YAXIS_EXT_STYLE
)),
isSetting
:
false
,
fontSize
:
[]
}
},
watch
:
{
'chart'
:
{
handler
:
function
()
{
this
.
initData
()
}
}
},
mounted
()
{
this
.
init
()
this
.
initData
()
},
methods
:
{
initData
()
{
const
chart
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
chart
))
if
(
chart
.
customStyle
)
{
// if (!chart.customStyle.yAxisExt) {
// chart.customStyle.yAxisExt = JSON.parse(JSON.stringify(DEFAULT_YAXIS_EXT_STYLE))
// }
let
customStyle
=
null
if
(
Object
.
prototype
.
toString
.
call
(
chart
.
customStyle
)
===
'[object Object]'
)
{
customStyle
=
JSON
.
parse
(
JSON
.
stringify
(
chart
.
customStyle
))
}
else
{
customStyle
=
JSON
.
parse
(
chart
.
customStyle
)
}
if
(
customStyle
.
yAxisExt
)
{
this
.
axisForm
=
customStyle
.
yAxisExt
if
(
!
this
.
axisForm
.
splitLine
)
{
this
.
axisForm
.
splitLine
=
JSON
.
parse
(
JSON
.
stringify
(
DEFAULT_YAXIS_EXT_STYLE
.
splitLine
))
}
if
(
!
this
.
axisForm
.
nameTextStyle
)
{
this
.
axisForm
.
nameTextStyle
=
JSON
.
parse
(
JSON
.
stringify
(
DEFAULT_YAXIS_EXT_STYLE
.
nameTextStyle
))
}
if
(
!
this
.
axisForm
.
axisValue
)
{
this
.
axisForm
.
axisValue
=
JSON
.
parse
(
JSON
.
stringify
(
DEFAULT_YAXIS_EXT_STYLE
.
axisValue
))
}
}
}
},
init
()
{
const
arr
=
[]
for
(
let
i
=
6
;
i
<=
40
;
i
=
i
+
2
)
{
arr
.
push
({
name
:
i
+
''
,
value
:
i
+
''
})
}
this
.
fontSize
=
arr
},
changeYAxisStyle
()
{
if
(
!
this
.
axisForm
.
show
)
{
this
.
isSetting
=
false
}
this
.
$emit
(
'onChangeYAxisForm'
,
this
.
axisForm
)
}
}
}
</
script
>
<
style
scoped
>
.el-divider--horizontal
{
margin
:
10px
0
}
.shape-item
{
padding
:
6px
;
border
:
none
;
width
:
100%
;
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
}
.form-item-slider
>>>
.el-form-item__label
{
font-size
:
12px
;
line-height
:
38px
;
}
.form-item
>>>
.el-form-item__label
{
font-size
:
12px
;
}
.el-select-dropdown__item
{
padding
:
0
20px
;
}
span
{
font-size
:
12px
}
.el-form-item
{
margin-bottom
:
6px
;
}
.switch-style
{
position
:
absolute
;
right
:
10px
;
margin-top
:
-4px
;
}
.color-picker-style
{
cursor
:
pointer
;
z-index
:
1003
;
}
</
style
>
frontend/src/views/chart/components/drag-item/QuotaExtItem.vue
0 → 100644
浏览文件 @
f2daa5b2
差异被折叠。
点击展开。
frontend/src/views/chart/components/drag-item/QuotaItem.vue
浏览文件 @
f2daa5b2
...
...
@@ -13,7 +13,7 @@
<svg-icon
v-if=
"item.sort === 'desc'"
icon-class=
"sort-desc"
class-name=
"field-icon-sort"
/>
</span>
<span
class=
"item-span-style"
:title=
"item.name"
>
{{
item
.
name
}}
</span>
<span
v-if=
"item.summary"
class=
"summary-span"
>
{{
$t
(
'chart.'
+
item
.
summary
)
}}
</span>
<span
v-if=
"
chart.type !== 'table-info' &&
item.summary"
class=
"summary-span"
>
{{
$t
(
'chart.'
+
item
.
summary
)
}}
</span>
</el-tag>
<el-dropdown
v-else
trigger=
"click"
size=
"mini"
@
command=
"clickItem"
>
<span
class=
"el-dropdown-link"
>
...
...
@@ -30,7 +30,7 @@
<svg-icon
v-if=
"item.sort === 'desc'"
icon-class=
"sort-desc"
class-name=
"field-icon-sort"
/>
</span>
<span
class=
"item-span-style"
:title=
"item.name"
>
{{
item
.
name
}}
</span>
<span
v-if=
"item.summary"
class=
"summary-span"
>
{{
$t
(
'chart.'
+
item
.
summary
)
}}
</span>
<span
v-if=
"
chart.type !== 'table-info' &&
item.summary"
class=
"summary-span"
>
{{
$t
(
'chart.'
+
item
.
summary
)
}}
</span>
<i
class=
"el-icon-arrow-down el-icon--right"
style=
"position: absolute;top: 6px;right: 10px;"
/>
</el-tag>
<el-dropdown-menu
slot=
"dropdown"
>
...
...
@@ -50,7 +50,7 @@
</el-dropdown-menu>
</el-dropdown>
</el-dropdown-item>
<el-dropdown-item
divided
>
<el-dropdown-item
v-show=
"chart.type !== 'table-info'"
:divided=
"chart.type === 'chart-mix'"
>
<el-dropdown
placement=
"right-start"
size=
"mini"
style=
"width: 100%"
@
command=
"summary"
>
<span
class=
"el-dropdown-link inner-dropdown-menu"
>
<span>
...
...
@@ -87,7 +87,7 @@
<!--
</el-dropdown-menu>
-->
<!--
</el-dropdown>
-->
<!--
</el-dropdown-item>
-->
<el-dropdown-item
divided
>
<el-dropdown-item
:divided=
"chart.type !== 'table-info'"
>
<el-dropdown
placement=
"right-start"
size=
"mini"
style=
"width: 100%"
@
command=
"sort"
>
<span
class=
"el-dropdown-link inner-dropdown-menu"
>
<span>
...
...
@@ -220,10 +220,12 @@ export default {
},
removeItem
()
{
this
.
item
.
index
=
this
.
index
this
.
item
.
removeType
=
'quota'
this
.
$emit
(
'onQuotaItemRemove'
,
this
.
item
)
},
editFilter
()
{
this
.
item
.
index
=
this
.
index
this
.
item
.
filterType
=
'quota'
this
.
$emit
(
'editItemFilter'
,
this
.
item
)
}
}
...
...
frontend/src/views/chart/components/shape-attr/SizeSelector.vue
浏览文件 @
f2daa5b2
...
...
@@ -94,10 +94,10 @@
<el-option
v-for=
"option in fontSize"
:key=
"option.value"
:label=
"option.name"
:value=
"option.value"
/>
</el-select>
</el-form-item>
<el-form-item
:label=
"$t('chart.table_title_height')"
class=
"form-item"
>
<el-form-item
:label=
"$t('chart.table_title_height')"
class=
"form-item
form-item-slider
"
>
<el-slider
v-model=
"sizeForm.tableTitleHeight"
:min=
"36"
:max=
"100"
show-input
:show-input-controls=
"false"
input-size=
"mini"
@
change=
"changeBarSizeCase"
/>
</el-form-item>
<el-form-item
:label=
"$t('chart.table_item_height')"
class=
"form-item"
>
<el-form-item
:label=
"$t('chart.table_item_height')"
class=
"form-item
form-item-slider
"
>
<el-slider
v-model=
"sizeForm.tableItemHeight"
:min=
"36"
:max=
"100"
show-input
:show-input-controls=
"false"
input-size=
"mini"
@
change=
"changeBarSizeCase"
/>
</el-form-item>
</el-form>
...
...
frontend/src/views/chart/components/table/TableNormal.vue
浏览文件 @
f2daa5b2
<
template
>
<div
ref=
"tableContainer"
:style=
"bg_class"
style=
"padding: 8px;width: 100%;height: 100%;overflow: hidden;"
>
<p
v-show=
"title_show"
ref=
"title"
:style=
"title_class"
>
{{
chart
.
title
}}
</p>
<ux-grid
ref=
"plxTable"
size=
"mini"
style=
"width: 100%;"
:height=
"height"
:checkbox-config=
"
{highlight: true}"
:width-resize="true"
:header-row-style="table_header_class"
:row-style="getRowStyle"
class="table-class"
:class="chart.id"
:show-summary="showSummary"
:summary-method="summaryMethod"
>
<ux-table-column
v-for=
"field in fields"
:key=
"field.dataeaseName"
:field=
"field.dataeaseName"
:resizable=
"true"
sortable
:title=
"field.name"
<el-row
style=
"height: 100%;"
>
<p
v-show=
"title_show"
ref=
"title"
:style=
"title_class"
>
{{
chart
.
title
}}
</p>
<ux-grid
ref=
"plxTable"
size=
"mini"
style=
"width: 100%;"
:height=
"height"
:checkbox-config=
"
{highlight: true}"
:width-resize="true"
:header-row-style="table_header_class"
:row-style="getRowStyle"
class="table-class"
:class="chart.id"
:show-summary="showSummary"
:summary-method="summaryMethod"
>
<!--
<template
slot=
"header"
>
-->
<!--
<span>
{{
field
.
name
}}
</span>
-->
<!--
</
template
>
-->
</ux-table-column>
</ux-grid>
<ux-table-column
v-for=
"field in fields"
:key=
"Math.random()"
:field=
"field.dataeaseName"
:resizable=
"true"
sortable
:title=
"field.name"
>
<!--
<template
slot=
"header"
>
-->
<!--
<span>
{{
field
.
name
}}
</span>
-->
<!--
</
template
>
-->
</ux-table-column>
</ux-grid>
<el-row
v-show=
"chart.type === 'table-info'"
class=
"table-page"
>
<span
class=
"total-style"
>
{{ $t('chart.total') }}
<span>
{{ chart.data.tableRow.length }}
</span>
{{ $t('chart.items') }}
</span>
<el-pagination
small
:current-page=
"currentPage.page"
:page-sizes=
"[10,20,50,100]"
:page-size=
"currentPage.pageSize"
:pager-count=
"5"
layout=
"sizes, prev, pager, next"
:total=
"currentPage.show"
class=
"page-style"
@
current-change=
"pageClick"
@
size-change=
"pageChange"
/>
</el-row>
</el-row>
</div>
</template>
...
...
@@ -91,7 +113,12 @@ export default {
height
:
'36px'
},
title_show
:
true
,
borderRadius
:
'0px'
borderRadius
:
'0px'
,
currentPage
:
{
page
:
1
,
pageSize
:
10
,
show
:
0
}
}
},
computed
:
{
...
...
@@ -137,9 +164,17 @@ export default {
if
(
this
.
chart
.
data
)
{
this
.
fields
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
chart
.
data
.
fields
))
datas
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
chart
.
data
.
tableRow
))
if
(
this
.
chart
.
type
===
'table-info'
)
{
// 计算分页
this
.
currentPage
.
show
=
datas
.
length
const
pageStart
=
(
this
.
currentPage
.
page
-
1
)
*
this
.
currentPage
.
pageSize
const
pageEnd
=
pageStart
+
this
.
currentPage
.
pageSize
datas
=
datas
.
slice
(
pageStart
,
pageEnd
)
}
}
else
{
this
.
fields
=
[]
datas
=
[]
this
.
resetPage
()
}
this
.
$refs
.
plxTable
.
reloadData
(
datas
)
this
.
$nextTick
(()
=>
{
...
...
@@ -152,11 +187,19 @@ export default {
calcHeightRightNow
()
{
this
.
$nextTick
(()
=>
{
if
(
this
.
$refs
.
tableContainer
)
{
let
pageHeight
=
0
if
(
this
.
chart
.
type
===
'table-info'
)
{
pageHeight
=
36
}
const
currentHeight
=
this
.
$refs
.
tableContainer
.
offsetHeight
const
tableMaxHeight
=
currentHeight
-
this
.
$refs
.
title
.
offsetHeight
-
16
const
tableMaxHeight
=
currentHeight
-
this
.
$refs
.
title
.
offsetHeight
-
16
-
pageHeight
let
tableHeight
if
(
this
.
chart
.
data
)
{
tableHeight
=
(
this
.
chart
.
data
.
tableRow
.
length
+
2
)
*
36
if
(
this
.
chart
.
type
===
'table-info'
)
{
tableHeight
=
(
this
.
currentPage
.
pageSize
+
2
)
*
36
-
pageHeight
}
else
{
tableHeight
=
(
this
.
chart
.
data
.
tableRow
.
length
+
2
)
*
36
-
pageHeight
}
}
else
{
tableHeight
=
0
}
...
...
@@ -279,6 +322,24 @@ export default {
resetHeight
()
{
this
.
height
=
100
},
pageChange
(
val
)
{
this
.
currentPage
.
pageSize
=
val
this
.
init
()
},
pageClick
(
val
)
{
this
.
currentPage
.
page
=
val
this
.
init
()
},
resetPage
()
{
this
.
currentPage
=
{
page
:
1
,
pageSize
:
10
,
show
:
0
}
}
}
}
...
...
@@ -292,4 +353,25 @@ export default {
max-height
:
none
!important
;
line-height
:
normal
!important
;
}
.table-page
{
position
:
absolute
;
bottom
:
0
;
display
:
flex
;
align-items
:
center
;
justify-content
:
flex-end
;
width
:
100%
;
overflow
:
hidden
;
}
.page-style
{
margin-right
:
auto
;
}
.total-style
{
flex
:
1
;
font-size
:
12px
;
color
:
#606266
;
white-space
:
nowrap
;
}
.page-style
>>>
.el-input__inner
{
height
:
24px
;
}
</
style
>
frontend/src/views/chart/group/Group.vue
浏览文件 @
f2daa5b2
...
...
@@ -327,6 +327,7 @@ import {
DEFAULT_TOOLTIP
,
DEFAULT_XAXIS_STYLE
,
DEFAULT_YAXIS_STYLE
,
DEFAULT_YAXIS_EXT_STYLE
,
DEFAULT_BACKGROUND_COLOR
,
DEFAULT_SPLIT
}
from
'../chart/chart'
...
...
@@ -739,11 +740,13 @@ export default {
legend
:
DEFAULT_LEGEND_STYLE
,
xAxis
:
DEFAULT_XAXIS_STYLE
,
yAxis
:
DEFAULT_YAXIS_STYLE
,
yAxisExt
:
DEFAULT_YAXIS_EXT_STYLE
,
background
:
DEFAULT_BACKGROUND_COLOR
,
split
:
DEFAULT_SPLIT
})
view
.
xaxis
=
JSON
.
stringify
([])
view
.
yaxis
=
JSON
.
stringify
([])
view
.
yaxisExt
=
JSON
.
stringify
([])
view
.
extStack
=
JSON
.
stringify
([])
view
.
customFilter
=
JSON
.
stringify
([])
view
.
drillFields
=
JSON
.
stringify
([])
...
...
frontend/src/views/chart/view/ChartEdit.vue
浏览文件 @
f2daa5b2
差异被折叠。
点击展开。
frontend/src/views/panel/export/PDFPreExport.vue
浏览文件 @
f2daa5b2
...
...
@@ -42,7 +42,8 @@ export default {
varsInfo
:
{
panelName
:
this
.
panelName
,
snapshot
:
this
.
snapshot
,
userName
:
this
.
$store
.
state
.
user
.
user
.
name
userName
:
this
.
$store
.
state
.
user
.
user
.
userName
,
nickName
:
this
.
$store
.
state
.
user
.
user
.
nickName
},
timeInfo
:
[
'yyyy-MM-dd'
,
...
...
@@ -85,7 +86,7 @@ export default {
const
contentWidth
=
canvas
.
width
const
contentHeight
=
canvas
.
height
const
pageData
=
canvas
.
toDataURL
(
'image/jpeg'
,
1.0
)
const
PDF
=
new
JsPDF
(
'
p'
,
'pt
'
,
[
contentWidth
,
contentHeight
])
const
PDF
=
new
JsPDF
(
'
l'
,
'px
'
,
[
contentWidth
,
contentHeight
])
PDF
.
addImage
(
pageData
,
'JPEG'
,
0
,
0
,
contentWidth
,
contentHeight
)
PDF
.
save
(
_this
.
panelName
+
'.pdf'
)
}
...
...
@@ -103,7 +104,7 @@ export default {
}
.export_body_class
{
border
:
1px
solid
#dcdfe6
;
height
:
500px
;
height
:
65vh
;
overflow-y
:
auto
;
}
...
...
frontend/src/views/panel/list/PanelViewShow.vue
浏览文件 @
f2daa5b2
...
...
@@ -79,7 +79,8 @@
v-if=
"pdfExportShow"
:title=
"'['+panelInfo.name+']'+'PDF导出'"
:visible
.
sync=
"pdfExportShow"
width=
"70%"
width=
"80%"
:top=
"'8vh'"
:destroy-on-close=
"true"
class=
"dialog-css2"
>
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论