Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
dataease
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
njgzx
dataease
Commits
b68888bc
Unverified
提交
b68888bc
authored
9月 03, 2021
作者:
fit2cloud-chenyw
提交者:
GitHub
9月 03, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'dev' into pr@dev@feat_theme_switch
上级
9a69f8a2
a90de21b
全部展开
显示空白字符变更
内嵌
并排
正在显示
62 个修改的文件
包含
710 行增加
和
137 行删除
+710
-137
PanelPdfTemplate.java
...c/main/java/io/dataease/base/domain/PanelPdfTemplate.java
+22
-0
PanelPdfTemplateExample.java
...java/io/dataease/base/domain/PanelPdfTemplateExample.java
+0
-0
PanelPdfTemplateMapper.java
.../java/io/dataease/base/mapper/PanelPdfTemplateMapper.java
+37
-0
PanelPdfTemplateMapper.xml
...n/java/io/dataease/base/mapper/PanelPdfTemplateMapper.xml
+0
-0
ExtPanelViewMapper.xml
...n/java/io/dataease/base/mapper/ext/ExtPanelViewMapper.xml
+2
-2
DeTypeConstants.java
...n/java/io/dataease/commons/constants/DeTypeConstants.java
+2
-1
PanelPdfTemplateController.java
...dataease/controller/panel/PanelPdfTemplateController.java
+33
-0
JdbcProvider.java
...in/java/io/dataease/datasource/provider/JdbcProvider.java
+3
-0
DorisConstants.java
.../main/java/io/dataease/provider/doris/DorisConstants.java
+2
-0
DorisQueryProvider.java
...n/java/io/dataease/provider/doris/DorisQueryProvider.java
+12
-2
MySQLConstants.java
.../main/java/io/dataease/provider/mysql/MySQLConstants.java
+2
-0
MysqlQueryProvider.java
...n/java/io/dataease/provider/mysql/MysqlQueryProvider.java
+12
-2
OracleQueryProvider.java
...java/io/dataease/provider/oracle/OracleQueryProvider.java
+20
-4
PgConstants.java
...nd/src/main/java/io/dataease/provider/pg/PgConstants.java
+2
-0
PgQueryProvider.java
...rc/main/java/io/dataease/provider/pg/PgQueryProvider.java
+0
-0
SqlserverQueryProvider.java
...o/dataease/provider/sqlserver/SqlserverQueryProvider.java
+33
-21
PanelGroupService.java
...ain/java/io/dataease/service/panel/PanelGroupService.java
+13
-1
PanelPdfTemplateService.java
...va/io/dataease/service/panel/PanelPdfTemplateService.java
+27
-0
V25__add_auth.sql
backend/src/main/resources/db/migration/V25__add_auth.sql
+0
-0
V26__de1.3.sql
backend/src/main/resources/db/migration/V26__de1.3.sql
+15
-19
generatorConfig.xml
backend/src/main/resources/generatorConfig.xml
+1
-1
package.json
frontend/package.json
+2
-1
pdfTemplate.js
frontend/src/api/panel/pdfTemplate.js
+11
-0
index.vue
frontend/src/components/DeDrag/index.vue
+1
-1
ContextMenu.vue
...d/src/components/canvas/components/Editor/ContextMenu.vue
+6
-6
Preview.vue
frontend/src/components/canvas/components/Editor/Preview.vue
+1
-1
SettingMenu.vue
...d/src/components/canvas/components/Editor/SettingMenu.vue
+6
-6
index.vue
frontend/src/components/canvas/components/Editor/index.vue
+11
-11
FilterTextAttr.vue
frontend/src/components/canvas/components/FilterTextAttr.vue
+1
-2
RectangleAttr.vue
frontend/src/components/canvas/components/RectangleAttr.vue
+1
-1
TextAttr.vue
frontend/src/components/canvas/components/TextAttr.vue
+1
-1
Toolbar.vue
frontend/src/components/canvas/components/Toolbar.vue
+4
-4
VText.vue
frontend/src/components/canvas/custom-component/VText.vue
+1
-0
index.vue
frontend/src/components/canvas/index.vue
+1
-1
snapshot.js
frontend/src/components/canvas/store/snapshot.js
+5
-0
DeDate.vue
frontend/src/components/widget/DeWidget/DeDate.vue
+1
-1
DeNumberRange.vue
frontend/src/components/widget/DeWidget/DeNumberRange.vue
+2
-2
DeSelect.vue
frontend/src/components/widget/DeWidget/DeSelect.vue
+1
-1
DeSelectGrid.vue
frontend/src/components/widget/DeWidget/DeSelectGrid.vue
+1
-1
PDF.svg
frontend/src/icons/svg/PDF.svg
+2
-0
en.js
frontend/src/lang/en.js
+6
-1
tw.js
frontend/src/lang/tw.js
+6
-1
zh.js
frontend/src/lang/zh.js
+6
-1
main.js
frontend/src/main.js
+3
-0
index.scss
frontend/src/styles/index.scss
+8
-0
StringUtils.js
frontend/src/utils/StringUtils.js
+7
-0
chart.js
frontend/src/views/chart/chart/chart.js
+12
-0
common.js
frontend/src/views/chart/chart/common/common.js
+24
-0
ChartComponent.vue
frontend/src/views/chart/components/ChartComponent.vue
+4
-1
XAxisSelector.vue
.../views/chart/components/component-style/XAxisSelector.vue
+33
-0
YAxisSelector.vue
.../views/chart/components/component-style/YAxisSelector.vue
+33
-0
index.vue
frontend/src/views/panel/AssistComponent/index.vue
+1
-1
BackgroundSelector.vue
...ws/panel/SubjectSetting/PanelStyle/BackgroundSelector.vue
+1
-1
ComponentGap.vue
...rc/views/panel/SubjectSetting/PanelStyle/ComponentGap.vue
+1
-1
SubjectTemplateItem.vue
...s/panel/SubjectSetting/PreSubject/SubjectTemplateItem.vue
+1
-1
index.vue
frontend/src/views/panel/SubjectSetting/index.vue
+1
-1
index.vue
frontend/src/views/panel/edit/index.vue
+7
-6
PDFExportTemplate.vue
frontend/src/views/panel/export/PDFExportTemplate.vue
+32
-0
PDFPreExport.vue
frontend/src/views/panel/export/PDFPreExport.vue
+113
-0
date.js
frontend/src/views/panel/export/date.js
+30
-0
PanelList.vue
frontend/src/views/panel/list/PanelList.vue
+21
-0
PanelViewShow.vue
frontend/src/views/panel/list/PanelViewShow.vue
+63
-29
没有找到文件。
backend/src/main/java/io/dataease/base/domain/PanelPdfTemplate.java
0 → 100644
浏览文件 @
b68888bc
package
io
.
dataease
.
base
.
domain
;
import
java.io.Serializable
;
import
lombok.Data
;
@Data
public
class
PanelPdfTemplate
implements
Serializable
{
private
String
id
;
private
String
name
;
private
Long
createTime
;
private
String
createUser
;
private
Integer
sort
;
private
String
templateContent
;
private
static
final
long
serialVersionUID
=
1L
;
}
\ No newline at end of file
backend/src/main/java/io/dataease/base/domain/PanelPdfTemplateExample.java
0 → 100644
浏览文件 @
b68888bc
差异被折叠。
点击展开。
backend/src/main/java/io/dataease/base/mapper/PanelPdfTemplateMapper.java
0 → 100644
浏览文件 @
b68888bc
package
io
.
dataease
.
base
.
mapper
;
import
io.dataease.base.domain.PanelPdfTemplate
;
import
io.dataease.base.domain.PanelPdfTemplateExample
;
import
java.util.List
;
import
org.apache.ibatis.annotations.Param
;
public
interface
PanelPdfTemplateMapper
{
long
countByExample
(
PanelPdfTemplateExample
example
);
int
deleteByExample
(
PanelPdfTemplateExample
example
);
int
deleteByPrimaryKey
(
String
id
);
int
insert
(
PanelPdfTemplate
record
);
int
insertSelective
(
PanelPdfTemplate
record
);
List
<
PanelPdfTemplate
>
selectByExampleWithBLOBs
(
PanelPdfTemplateExample
example
);
List
<
PanelPdfTemplate
>
selectByExample
(
PanelPdfTemplateExample
example
);
PanelPdfTemplate
selectByPrimaryKey
(
String
id
);
int
updateByExampleSelective
(
@Param
(
"record"
)
PanelPdfTemplate
record
,
@Param
(
"example"
)
PanelPdfTemplateExample
example
);
int
updateByExampleWithBLOBs
(
@Param
(
"record"
)
PanelPdfTemplate
record
,
@Param
(
"example"
)
PanelPdfTemplateExample
example
);
int
updateByExample
(
@Param
(
"record"
)
PanelPdfTemplate
record
,
@Param
(
"example"
)
PanelPdfTemplateExample
example
);
int
updateByPrimaryKeySelective
(
PanelPdfTemplate
record
);
int
updateByPrimaryKeyWithBLOBs
(
PanelPdfTemplate
record
);
int
updateByPrimaryKey
(
PanelPdfTemplate
record
);
}
\ No newline at end of file
backend/src/main/java/io/dataease/base/mapper/PanelPdfTemplateMapper.xml
0 → 100644
浏览文件 @
b68888bc
差异被折叠。
点击展开。
backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelViewMapper.xml
浏览文件 @
b68888bc
...
...
@@ -17,7 +17,7 @@
<where>
FIND_IN_SET(chart_group.id,cids)
</where>
order by
create_time de
sc
order by
`type` desc,name a
sc
</select>
...
...
@@ -27,7 +27,7 @@
<where>
FIND_IN_SET(chart_view.id,cids)
</where>
order by
create_time de
sc
order by
`type` desc,name a
sc
</select>
...
...
backend/src/main/java/io/dataease/commons/constants/DeTypeConstants.java
浏览文件 @
b68888bc
...
...
@@ -7,6 +7,7 @@ public class DeTypeConstants {
public
final
static
Integer
DE_INT
=
2
;
public
final
static
Integer
DE_FLOAT
=
3
;
public
final
static
Integer
DE_BOOL
=
4
;
public
final
static
Integer
DE_Binary
=
5
;
public
final
static
Integer
DE_LOCATION
=
5
;
public
final
static
Integer
DE_BINARY
=
6
;
}
backend/src/main/java/io/dataease/controller/panel/PanelPdfTemplateController.java
0 → 100644
浏览文件 @
b68888bc
package
io
.
dataease
.
controller
.
panel
;
import
com.github.xiaoymin.knife4j.annotations.ApiSupport
;
import
io.dataease.base.domain.PanelPdfTemplate
;
import
io.dataease.service.panel.PanelPdfTemplateService
;
import
io.swagger.annotations.Api
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.Resource
;
import
java.util.List
;
/**
* Author: wangjiahao
* Date: 2021-03-05
* Description:
*/
@Api
(
tags
=
"仪表板:PDF导出模板"
)
@ApiSupport
(
order
=
170
)
@RestController
@RequestMapping
(
"pdf-template"
)
public
class
PanelPdfTemplateController
{
@Resource
private
PanelPdfTemplateService
panelPdfTemplateService
;
@GetMapping
(
"queryAll"
)
public
List
<
PanelPdfTemplate
>
queryAll
(){
return
panelPdfTemplateService
.
queryAll
();
}
}
backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java
浏览文件 @
b68888bc
...
...
@@ -528,6 +528,9 @@ public class JdbcProvider extends DatasourceProvider {
return
"show tables;"
;
case
sqlServer:
SqlServerConfigration
sqlServerConfigration
=
new
Gson
().
fromJson
(
datasourceRequest
.
getDatasource
().
getConfiguration
(),
SqlServerConfigration
.
class
);
if
(
StringUtils
.
isEmpty
(
sqlServerConfigration
.
getSchema
())){
throw
new
Exception
(
Translator
.
get
(
"i18n_schema_is_empty"
));
}
return
"SELECT TABLE_NAME FROM DATABASE.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = 'DS_SCHEMA' ;"
.
replace
(
"DATABASE"
,
sqlServerConfigration
.
getDataBase
())
.
replace
(
"DS_SCHEMA"
,
sqlServerConfigration
.
getSchema
());
...
...
backend/src/main/java/io/dataease/provider/doris/DorisConstants.java
浏览文件 @
b68888bc
...
...
@@ -19,6 +19,8 @@ public class DorisConstants extends SQLConstants {
public
static
final
String
FROM_UNIXTIME
=
"FROM_UNIXTIME(%s,'%s')"
;
public
static
final
String
STR_TO_DATE
=
"STR_TO_DATE(%s,'%s')"
;
public
static
final
String
CAST
=
"CAST(%s AS %s)"
;
public
static
final
String
DEFAULT_DATE_FORMAT
=
"%Y-%m-%d %H:%i:%S"
;
...
...
backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java
浏览文件 @
b68888bc
...
...
@@ -686,9 +686,14 @@ public class DorisQueryProvider extends QueryProvider {
originName
=
String
.
format
(
DorisConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
field
.
getDataeaseName
());
}
if
(
field
.
getDeType
()
==
1
&&
field
.
getDeExtractType
()
!=
1
)
{
if
(
field
.
getDeType
()
==
1
)
{
if
(
field
.
getDeExtractType
()
==
0
||
field
.
getDeExtractType
()
==
5
||
field
.
getDeExtractType
()
==
1
)
{
whereName
=
String
.
format
(
DorisConstants
.
STR_TO_DATE
,
originName
,
DorisConstants
.
DEFAULT_DATE_FORMAT
);
}
if
(
field
.
getDeExtractType
()
==
2
||
field
.
getDeExtractType
()
==
3
)
{
String
cast
=
String
.
format
(
DorisConstants
.
CAST
,
originName
,
DorisConstants
.
DEFAULT_INT_FORMAT
)
+
"/1000"
;
whereName
=
String
.
format
(
DorisConstants
.
FROM_UNIXTIME
,
cast
,
DorisConstants
.
DEFAULT_DATE_FORMAT
);
}
}
else
if
(
field
.
getDeType
()
==
0
)
{
whereName
=
String
.
format
(
DorisConstants
.
CAST
,
originName
,
DorisConstants
.
VARCHAR
);
}
else
{
...
...
@@ -738,9 +743,14 @@ public class DorisQueryProvider extends QueryProvider {
originName
=
String
.
format
(
DorisConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
field
.
getDataeaseName
());
}
if
(
field
.
getDeType
()
==
1
&&
field
.
getDeExtractType
()
!=
1
)
{
if
(
field
.
getDeType
()
==
1
)
{
if
(
field
.
getDeExtractType
()
==
0
||
field
.
getDeExtractType
()
==
5
||
field
.
getDeExtractType
()
==
1
)
{
whereName
=
String
.
format
(
DorisConstants
.
STR_TO_DATE
,
originName
,
DorisConstants
.
DEFAULT_DATE_FORMAT
);
}
if
(
field
.
getDeExtractType
()
==
2
||
field
.
getDeExtractType
()
==
3
)
{
String
cast
=
String
.
format
(
DorisConstants
.
CAST
,
originName
,
DorisConstants
.
DEFAULT_INT_FORMAT
)
+
"/1000"
;
whereName
=
String
.
format
(
DorisConstants
.
FROM_UNIXTIME
,
cast
,
DorisConstants
.
DEFAULT_DATE_FORMAT
);
}
}
else
if
(
field
.
getDeType
()
==
0
)
{
whereName
=
String
.
format
(
DorisConstants
.
CAST
,
originName
,
DorisConstants
.
VARCHAR
);
}
else
{
...
...
backend/src/main/java/io/dataease/provider/mysql/MySQLConstants.java
浏览文件 @
b68888bc
...
...
@@ -19,6 +19,8 @@ public class MySQLConstants extends SQLConstants {
public
static
final
String
FROM_UNIXTIME
=
"FROM_UNIXTIME(%s,'%s')"
;
public
static
final
String
STR_TO_DATE
=
"STR_TO_DATE(%s,'%s')"
;
public
static
final
String
CAST
=
"CAST(%s AS %s)"
;
public
static
final
String
DEFAULT_DATE_FORMAT
=
"%Y-%m-%d %H:%i:%S"
;
...
...
backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java
浏览文件 @
b68888bc
...
...
@@ -671,9 +671,14 @@ public class MysqlQueryProvider extends QueryProvider {
}
else
{
originName
=
String
.
format
(
MySQLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
field
.
getOriginName
());
}
if
(
field
.
getDeType
()
==
1
&&
field
.
getDeExtractType
()
!=
1
)
{
if
(
field
.
getDeType
()
==
1
)
{
if
(
field
.
getDeExtractType
()
==
0
||
field
.
getDeExtractType
()
==
5
)
{
whereName
=
String
.
format
(
MySQLConstants
.
STR_TO_DATE
,
originName
,
MySQLConstants
.
DEFAULT_DATE_FORMAT
);
}
if
(
field
.
getDeExtractType
()
==
2
||
field
.
getDeExtractType
()
==
3
)
{
String
cast
=
String
.
format
(
MySQLConstants
.
CAST
,
originName
,
MySQLConstants
.
DEFAULT_INT_FORMAT
)
+
"/1000"
;
whereName
=
String
.
format
(
MySQLConstants
.
FROM_UNIXTIME
,
cast
,
MySQLConstants
.
DEFAULT_DATE_FORMAT
);
}
}
else
{
whereName
=
originName
;
}
...
...
@@ -721,9 +726,14 @@ public class MysqlQueryProvider extends QueryProvider {
originName
=
String
.
format
(
MySQLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
field
.
getOriginName
());
}
if
(
field
.
getDeType
()
==
1
&&
field
.
getDeExtractType
()
!=
1
)
{
if
(
field
.
getDeType
()
==
1
)
{
if
(
field
.
getDeExtractType
()
==
0
||
field
.
getDeExtractType
()
==
5
)
{
whereName
=
String
.
format
(
MySQLConstants
.
STR_TO_DATE
,
originName
,
MySQLConstants
.
DEFAULT_DATE_FORMAT
);
}
if
(
field
.
getDeExtractType
()
==
2
||
field
.
getDeExtractType
()
==
3
)
{
String
cast
=
String
.
format
(
MySQLConstants
.
CAST
,
originName
,
MySQLConstants
.
DEFAULT_INT_FORMAT
)
+
"/1000"
;
whereName
=
String
.
format
(
MySQLConstants
.
FROM_UNIXTIME
,
cast
,
MySQLConstants
.
DEFAULT_DATE_FORMAT
);
}
}
else
{
whereName
=
originName
;
}
...
...
backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java
浏览文件 @
b68888bc
...
...
@@ -645,7 +645,7 @@ public class OracleQueryProvider extends QueryProvider {
stringBuilder
.
append
(
" \""
).
append
(
f
.
getOriginName
()).
append
(
"\""
);
return
stringBuilder
.
toString
();
}).
toArray
(
String
[]::
new
);
return
MessageFormat
.
format
(
"SELECT {0} FROM {1} ORDER BY null"
,
StringUtils
.
join
(
array
,
","
),
" ("
+
sqlFix
(
sql
)
+
") DE_TMP "
);
return
MessageFormat
.
format
(
"SELECT {0} FROM {1} ORDER BY null"
,
StringUtils
.
join
(
array
,
","
),
" ("
+
sqlFix
(
sql
)
+
") DE_TMP "
);
}
public
String
transMysqlFilterTerm
(
String
term
)
{
...
...
@@ -706,9 +706,14 @@ public class OracleQueryProvider extends QueryProvider {
originName
=
String
.
format
(
OracleConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
field
.
getOriginName
());
}
if
(
field
.
getDeType
()
==
1
&&
field
.
getDeExtractType
()
!=
1
)
{
if
(
field
.
getDeType
()
==
1
)
{
if
(
field
.
getDeExtractType
()
==
0
||
field
.
getDeExtractType
()
==
5
)
{
whereName
=
String
.
format
(
OracleConstants
.
TO_DATE
,
originName
,
OracleConstants
.
DEFAULT_DATE_FORMAT
);
}
if
(
field
.
getDeExtractType
()
==
2
||
field
.
getDeExtractType
()
==
3
)
{
String
cast
=
String
.
format
(
OracleConstants
.
CAST
,
originName
,
OracleConstants
.
DEFAULT_INT_FORMAT
)
+
"/1000"
;
whereName
=
String
.
format
(
OracleConstants
.
FROM_UNIXTIME
,
cast
,
OracleConstants
.
DEFAULT_DATE_FORMAT
);
}
}
else
{
whereName
=
originName
;
}
...
...
@@ -720,9 +725,13 @@ public class OracleQueryProvider extends QueryProvider {
whereValue
=
"('"
+
StringUtils
.
join
(
value
,
"','"
)
+
"')"
;
}
else
if
(
StringUtils
.
containsIgnoreCase
(
request
.
getTerm
(),
"like"
))
{
whereValue
=
"'%"
+
value
+
"%'"
;
}
else
{
if
(
field
.
getDeType
()
==
1
)
{
whereValue
=
String
.
format
(
OracleConstants
.
TO_DATE
,
"'"
+
value
+
"'"
,
OracleConstants
.
DEFAULT_DATE_FORMAT
);
}
else
{
whereValue
=
String
.
format
(
OracleConstants
.
WHERE_VALUE_VALUE
,
value
);
}
}
list
.
add
(
SQLObj
.
builder
()
.
whereField
(
whereName
)
.
whereTermAndValue
(
whereTerm
+
whereValue
)
...
...
@@ -756,9 +765,14 @@ public class OracleQueryProvider extends QueryProvider {
originName
=
String
.
format
(
OracleConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
field
.
getOriginName
());
}
if
(
field
.
getDeType
()
==
1
&&
field
.
getDeExtractType
()
!=
1
)
{
if
(
field
.
getDeType
()
==
1
)
{
if
(
field
.
getDeExtractType
()
==
0
||
field
.
getDeExtractType
()
==
5
)
{
whereName
=
String
.
format
(
OracleConstants
.
TO_DATE
,
originName
,
OracleConstants
.
DEFAULT_DATE_FORMAT
);
}
if
(
field
.
getDeExtractType
()
==
2
||
field
.
getDeExtractType
()
==
3
)
{
String
cast
=
String
.
format
(
OracleConstants
.
CAST
,
originName
,
OracleConstants
.
DEFAULT_INT_FORMAT
)
+
"/1000"
;
whereName
=
String
.
format
(
OracleConstants
.
FROM_UNIXTIME
,
cast
,
OracleConstants
.
DEFAULT_DATE_FORMAT
);
}
}
else
{
whereName
=
originName
;
}
...
...
@@ -772,7 +786,9 @@ public class OracleQueryProvider extends QueryProvider {
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
String
startTime
=
simpleDateFormat
.
format
(
new
Date
(
Long
.
parseLong
(
value
.
get
(
0
))));
String
endTime
=
simpleDateFormat
.
format
(
new
Date
(
Long
.
parseLong
(
value
.
get
(
1
))));
whereValue
=
String
.
format
(
OracleConstants
.
WHERE_BETWEEN
,
startTime
,
endTime
);
String
st
=
String
.
format
(
OracleConstants
.
TO_DATE
,
"'"
+
startTime
+
"'"
,
OracleConstants
.
DEFAULT_DATE_FORMAT
);
String
et
=
String
.
format
(
OracleConstants
.
TO_DATE
,
"'"
+
endTime
+
"'"
,
OracleConstants
.
DEFAULT_DATE_FORMAT
);
whereValue
=
st
+
" AND "
+
et
;
}
else
{
whereValue
=
String
.
format
(
OracleConstants
.
WHERE_BETWEEN
,
value
.
get
(
0
),
value
.
get
(
1
));
}
...
...
backend/src/main/java/io/dataease/provider/pg/PgConstants.java
浏览文件 @
b68888bc
...
...
@@ -19,6 +19,8 @@ public class PgConstants extends SQLConstants {
public
static
final
String
FROM_UNIXTIME
=
"to_timestamp(%s)"
;
public
static
final
String
TO_DATE
=
"to_date(%s,'%s')"
;
public
static
final
String
CAST
=
"CAST(%s AS %s)"
;
public
static
final
String
DEFAULT_DATE_FORMAT
=
"'YYYY-MM-DD HH24:MI:SS'"
;
...
...
backend/src/main/java/io/dataease/provider/pg/PgQueryProvider.java
浏览文件 @
b68888bc
差异被折叠。
点击展开。
backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java
浏览文件 @
b68888bc
...
...
@@ -13,6 +13,7 @@ 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
;
...
...
@@ -73,7 +74,7 @@ public class SqlserverQueryProvider extends QueryProvider {
case
"TINYINT"
:
return
DeTypeConstants
.
DE_BOOL
;
// 布尔
case
"TIMESTAMP"
:
return
DeTypeConstants
.
DE_B
inary
;
// 二进制
return
DeTypeConstants
.
DE_B
INARY
;
// 二进制
default
:
return
DeTypeConstants
.
DE_STRING
;
}
...
...
@@ -91,7 +92,7 @@ public class SqlserverQueryProvider extends QueryProvider {
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
SqlServerSQLConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
.
build
();
setSchema
(
tableObj
,
ds
);
setSchema
(
tableObj
,
ds
);
List
<
SQLObj
>
xFields
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
fields
))
{
...
...
@@ -173,7 +174,7 @@ public class SqlserverQueryProvider extends QueryProvider {
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
SqlServerSQLConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
.
build
();
setSchema
(
tableObj
,
ds
);
setSchema
(
tableObj
,
ds
);
List
<
SQLObj
>
xFields
=
new
ArrayList
<>();
List
<
SQLObj
>
xWheres
=
new
ArrayList
<>();
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
...
...
@@ -270,7 +271,7 @@ public class SqlserverQueryProvider extends QueryProvider {
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
SqlServerSQLConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
.
build
();
setSchema
(
tableObj
,
ds
);
setSchema
(
tableObj
,
ds
);
List
<
SQLObj
>
xFields
=
new
ArrayList
<>();
List
<
SQLObj
>
xWheres
=
new
ArrayList
<>();
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
...
...
@@ -388,7 +389,7 @@ public class SqlserverQueryProvider extends QueryProvider {
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
SqlServerSQLConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
.
build
();
setSchema
(
tableObj
,
ds
);
setSchema
(
tableObj
,
ds
);
List
<
SQLObj
>
xFields
=
new
ArrayList
<>();
List
<
SQLObj
>
xWheres
=
new
ArrayList
<>();
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
...
...
@@ -588,11 +589,11 @@ public class SqlserverQueryProvider extends QueryProvider {
stringBuilder
.
append
(
"\""
).
append
(
f
.
getOriginName
()).
append
(
"\" AS "
).
append
(
f
.
getDataeaseName
());
return
stringBuilder
.
toString
();
}).
toArray
(
String
[]::
new
);
if
(
ds
!=
null
)
{
if
(
ds
!=
null
)
{
String
schema
=
new
Gson
().
fromJson
(
ds
.
getConfiguration
(),
JdbcDTO
.
class
).
getSchema
();
String
tableWithSchema
=
String
.
format
(
SqlServerSQLConstants
.
KEYWORD_TABLE
,
schema
)
+
"."
+
String
.
format
(
SqlServerSQLConstants
.
KEYWORD_TABLE
,
table
);
return
MessageFormat
.
format
(
"SELECT {0} FROM {1} "
,
StringUtils
.
join
(
array
,
","
),
tableWithSchema
);
}
else
{
}
else
{
return
MessageFormat
.
format
(
"SELECT {0} FROM {1} "
,
StringUtils
.
join
(
array
,
","
),
table
);
}
}
...
...
@@ -651,9 +652,15 @@ public class SqlserverQueryProvider extends QueryProvider {
String
whereTerm
=
transMysqlFilterTerm
(
request
.
getTerm
());
String
whereValue
=
""
;
String
originName
=
String
.
format
(
SqlServerSQLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
field
.
getOriginName
());
if
(
field
.
getDeType
()
==
DeTypeConstants
.
DE_TIME
&&
field
.
getDeExtractType
()
!=
DeTypeConstants
.
DE_TIME
)
{
if
(
field
.
getDeType
()
==
1
)
{
if
(
field
.
getDeExtractType
()
==
0
||
field
.
getDeExtractType
()
==
5
)
{
whereName
=
String
.
format
(
SqlServerSQLConstants
.
STRING_TO_DATE
,
originName
);
}
if
(
field
.
getDeExtractType
()
==
2
||
field
.
getDeExtractType
()
==
3
)
{
String
cast
=
String
.
format
(
SqlServerSQLConstants
.
LONG_TO_DATE
,
originName
+
"/1000"
);
whereName
=
String
.
format
(
SqlServerSQLConstants
.
FROM_UNIXTIME
,
cast
);
}
}
else
{
whereName
=
originName
;
}
...
...
@@ -692,9 +699,14 @@ public class SqlserverQueryProvider extends QueryProvider {
String
whereValue
=
""
;
String
originName
=
String
.
format
(
SqlServerSQLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
field
.
getOriginName
());
if
(
field
.
getDeType
()
==
1
&&
field
.
getDeExtractType
()
!=
1
)
{
if
(
field
.
getDeType
()
==
1
)
{
if
(
field
.
getDeExtractType
()
==
0
||
field
.
getDeExtractType
()
==
5
)
{
whereName
=
String
.
format
(
SqlServerSQLConstants
.
STRING_TO_DATE
,
originName
);
}
if
(
field
.
getDeExtractType
()
==
2
||
field
.
getDeExtractType
()
==
3
)
{
String
cast
=
String
.
format
(
SqlServerSQLConstants
.
LONG_TO_DATE
,
originName
+
"/1000"
);
whereName
=
String
.
format
(
SqlServerSQLConstants
.
FROM_UNIXTIME
,
cast
);
}
}
else
{
whereName
=
originName
;
}
...
...
@@ -744,30 +756,30 @@ public class SqlserverQueryProvider extends QueryProvider {
case
"y"
:
return
"CONVERT(varchar(100), datepart(yy, "
+
originField
+
"))"
;
case
"y_M"
:
if
(
split
.
equalsIgnoreCase
(
"-"
))
{
if
(
split
.
equalsIgnoreCase
(
"-"
))
{
return
"substring( convert(varchar,"
+
originField
+
",120),1,7)"
;
}
else
{
return
"replace("
+
"substring( convert(varchar,"
+
originField
+
",120),1,7), '-','/')"
;
}
else
{
return
"replace("
+
"substring( convert(varchar,"
+
originField
+
",120),1,7), '-','/')"
;
}
case
"y_M_d"
:
if
(
split
.
equalsIgnoreCase
(
"-"
))
{
if
(
split
.
equalsIgnoreCase
(
"-"
))
{
return
"CONVERT(varchar(100), "
+
originField
+
", 23)"
;
}
else
{
}
else
{
return
"CONVERT(varchar(100), "
+
originField
+
", 111)"
;
}
case
"H_m_s"
:
return
"CONVERT(varchar(100), "
+
originField
+
", 8)"
;
case
"y_M_d_H_m"
:
if
(
split
.
equalsIgnoreCase
(
"-"
))
{
if
(
split
.
equalsIgnoreCase
(
"-"
))
{
return
"substring( convert(varchar,"
+
originField
+
",120),1,16)"
;
}
else
{
return
"replace("
+
"substring( convert(varchar,"
+
originField
+
",120),1,16), '-','/')"
;
}
else
{
return
"replace("
+
"substring( convert(varchar,"
+
originField
+
",120),1,16), '-','/')"
;
}
case
"y_M_d_H_m_s"
:
if
(
split
.
equalsIgnoreCase
(
"-"
))
{
if
(
split
.
equalsIgnoreCase
(
"-"
))
{
return
"convert(varchar,"
+
originField
+
",120)"
;
}
else
{
return
"replace("
+
"convert(varchar,"
+
originField
+
",120), '-','/')"
;
}
else
{
return
"replace("
+
"convert(varchar,"
+
originField
+
",120), '-','/')"
;
}
default
:
return
"convert(varchar,"
+
originField
+
",120)"
;
...
...
@@ -790,7 +802,7 @@ public class SqlserverQueryProvider extends QueryProvider {
String
cast
=
String
.
format
(
SqlServerSQLConstants
.
STRING_TO_DATE
,
originField
);
fieldName
=
transDateFormat
(
x
.
getDateStyle
(),
x
.
getDatePattern
(),
cast
);
}
else
{
// 数值转时间
String
cast
=
String
.
format
(
SqlServerSQLConstants
.
LONG_TO_DATE
,
originField
+
"/1000"
);
String
cast
=
String
.
format
(
SqlServerSQLConstants
.
LONG_TO_DATE
,
originField
+
"/1000"
);
fieldName
=
transDateFormat
(
x
.
getDateStyle
(),
x
.
getDatePattern
(),
cast
);
}
}
else
{
...
...
backend/src/main/java/io/dataease/service/panel/PanelGroupService.java
浏览文件 @
b68888bc
...
...
@@ -103,7 +103,19 @@ public class PanelGroupService {
newDefaultPanel
.
setCreateBy
(
AuthUtils
.
getUser
().
getUsername
());
checkPanelName
(
newDefaultPanel
.
getName
(),
newDefaultPanel
.
getPid
(),
PanelConstants
.
OPT_TYPE_INSERT
,
newDefaultPanel
.
getId
());
panelGroupMapper
.
insertSelective
(
newDefaultPanel
);
}
else
{
}
else
if
(
"copy"
.
equals
(
request
.
getOptType
()))
{
panelId
=
UUID
.
randomUUID
().
toString
();
// 复制模板
PanelGroupWithBLOBs
newPanel
=
panelGroupMapper
.
selectByPrimaryKey
(
request
.
getId
());
// 插入校验
if
(
StringUtils
.
isNotEmpty
(
request
.
getName
()))
{
checkPanelName
(
request
.
getName
(),
newPanel
.
getPid
(),
PanelConstants
.
OPT_TYPE_INSERT
,
request
.
getId
());
}
newPanel
.
setName
(
request
.
getName
());
newPanel
.
setId
(
panelId
);
newPanel
.
setCreateBy
(
AuthUtils
.
getUser
().
getUsername
());
panelGroupMapper
.
insertSelective
(
newPanel
);
}
else
{
// 更新
if
(
StringUtils
.
isNotEmpty
(
request
.
getName
()))
{
checkPanelName
(
request
.
getName
(),
request
.
getPid
(),
PanelConstants
.
OPT_TYPE_UPDATE
,
request
.
getId
());
...
...
backend/src/main/java/io/dataease/service/panel/PanelPdfTemplateService.java
0 → 100644
浏览文件 @
b68888bc
package
io
.
dataease
.
service
.
panel
;
import
io.dataease.base.domain.PanelPdfTemplate
;
import
io.dataease.base.domain.PanelPdfTemplateExample
;
import
io.dataease.base.mapper.PanelPdfTemplateMapper
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.util.List
;
/**
* Author: wangjiahao
* Date: 9/1/21
* Description:
*/
@Service
public
class
PanelPdfTemplateService
{
@Resource
private
PanelPdfTemplateMapper
panelPdfTemplateMapper
;
public
List
<
PanelPdfTemplate
>
queryAll
(){
PanelPdfTemplateExample
example
=
new
PanelPdfTemplateExample
();
example
.
setOrderByClause
(
"sort asc"
);
return
panelPdfTemplateMapper
.
selectByExampleWithBLOBs
(
example
);
}
}
backend/src/main/resources/db/migration/V25__add_auth.sql
浏览文件 @
b68888bc
差异被折叠。
点击展开。
backend/src/main/resources/db/migration/V26__de1.3.sql
浏览文件 @
b68888bc
...
...
@@ -6,25 +6,6 @@ INSERT INTO `sys_msg_type` VALUES (7, 0, 'i18n_msg_type_ds_invalid', 'datasource
INSERT
INTO
`sys_msg_type`
VALUES
(
8
,
7
,
'i18n_msg_type_ds_invalid'
,
'datasource'
,
'to-msg-ds'
);
COMMIT
;
-- ----------------------------
-- Table structure for system_parameter
-- ----------------------------
...
...
@@ -55,3 +36,18 @@ INSERT INTO `system_parameter` VALUES ('ui.topMenuColor', NULL, 'text', 7);
INSERT
INTO
`system_parameter`
VALUES
(
'ui.topMenuTextActiveColor'
,
NULL
,
'text'
,
10
);
INSERT
INTO
`system_parameter`
VALUES
(
'ui.topMenuTextColor'
,
NULL
,
'text'
,
9
);
COMMIT
;
-- ----------------------------
-- Table structure for panel_pdf_template
-- ----------------------------
DROP
TABLE
IF
EXISTS
`panel_pdf_template`
;
CREATE
TABLE
`panel_pdf_template`
(
`id`
varchar
(
50
)
NOT
NULL
COMMENT
'id'
,
`name`
varchar
(
255
)
DEFAULT
NULL
COMMENT
'模板名称'
,
`create_time`
bigint
(
13
)
DEFAULT
NULL
COMMENT
'创建时间'
,
`create_user`
varchar
(
255
)
DEFAULT
NULL
COMMENT
'创建人'
,
`template_content`
longtext
COMMENT
'模板内容'
,
`sort`
int
(
8
)
DEFAULT
NULL
COMMENT
'排序'
,
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
backend/src/main/resources/generatorConfig.xml
浏览文件 @
b68888bc
...
...
@@ -64,7 +64,7 @@
<!--要生成的数据库表 -->
<table
tableName=
"
datasourc
e"
/>
<table
tableName=
"
panel_pdf_templat
e"
/>
<!-- <table tableName="sys_dict_item"/>-->
<!-- <table tableName="dataset_table_field"/>-->
<!-- <table tableName="v_chart">-->
...
...
frontend/package.json
浏览文件 @
b68888bc
...
...
@@ -42,9 +42,10 @@
"vue-axios"
:
"3.2.4"
,
"vue-clipboard2"
:
"0.3.1"
,
"vue-codemirror"
:
"^4.0.6"
,
"vue-fullscreen"
:
"^2.5.
1
"
,
"vue-fullscreen"
:
"^2.5.
2
"
,
"vue-i18n"
:
"7.3.2"
,
"vue-router"
:
"3.0.6"
,
"vue-to-pdf"
:
"^1.0.0"
,
"vue-uuid"
:
"2.0.2"
,
"vuedraggable"
:
"^2.24.3"
,
"vuex"
:
"3.1.0"
,
...
...
frontend/src/api/panel/pdfTemplate.js
0 → 100644
浏览文件 @
b68888bc
import
request
from
'@/utils/request'
export
function
queryAll
()
{
return
request
({
url
:
'/pdf-template/queryAll'
,
method
:
'get'
,
loading
:
true
,
timeout
:
30000
})
}
frontend/src/components/DeDrag/index.vue
浏览文件 @
b68888bc
...
...
@@ -1176,7 +1176,7 @@ export default {
if
(
this
.
canvasStyleData
.
auxiliaryMatrix
)
{
this
.
recordMatrixCurStyle
()
}
this
.
hasMove
&&
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
hasMove
&&
this
.
$store
.
commit
(
'recordSnapshot'
,
'handleUp'
)
// 记录snapshot后 移动已记录设置为false
this
.
hasMove
=
false
...
...
frontend/src/components/canvas/components/Editor/ContextMenu.vue
浏览文件 @
b68888bc
...
...
@@ -87,13 +87,13 @@ export default {
paste
()
{
this
.
$store
.
commit
(
'paste'
,
true
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'paste'
)
},
deleteComponent
()
{
this
.
deleteCurCondition
()
this
.
$store
.
commit
(
'deleteComponent'
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'deleteComponent'
)
this
.
$store
.
commit
(
'setCurComponent'
,
{
component
:
null
,
index
:
null
})
},
...
...
@@ -106,22 +106,22 @@ export default {
upComponent
()
{
this
.
$store
.
commit
(
'upComponent'
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'upComponent'
)
},
downComponent
()
{
this
.
$store
.
commit
(
'downComponent'
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'downComponent'
)
},
topComponent
()
{
this
.
$store
.
commit
(
'topComponent'
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'topComponent'
)
},
bottomComponent
()
{
this
.
$store
.
commit
(
'bottomComponent'
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'bottomComponent'
)
}
}
}
...
...
frontend/src/components/canvas/components/Editor/Preview.vue
浏览文件 @
b68888bc
<
template
>
<div
id=
"canvasInfoTemp"
:style=
"customStyle"
class=
"bg"
@
mouseup=
"deselectCurComponent"
@
mousedown=
"handleMouseDown"
>
<div
id=
"canvasInfoTemp"
ref=
"canvasInfoTemp"
:style=
"customStyle"
class=
"bg"
@
mouseup=
"deselectCurComponent"
@
mousedown=
"handleMouseDown"
>
<el-row
v-if=
"componentDataShow.length===0"
style=
"height: 100%;"
class=
"custom-position"
>
{{
$t
(
'panel.panelNull'
)
}}
</el-row>
...
...
frontend/src/components/canvas/components/Editor/SettingMenu.vue
浏览文件 @
b68888bc
...
...
@@ -86,13 +86,13 @@ export default {
paste
()
{
this
.
$store
.
commit
(
'paste'
,
true
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'paste'
)
},
deleteComponent
()
{
this
.
deleteCurCondition
()
this
.
$store
.
commit
(
'deleteComponent'
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'deleteComponent'
)
this
.
$store
.
commit
(
'setCurComponent'
,
{
component
:
null
,
index
:
null
})
},
...
...
@@ -105,22 +105,22 @@ export default {
upComponent
()
{
this
.
$store
.
commit
(
'upComponent'
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'upComponent'
)
},
downComponent
()
{
this
.
$store
.
commit
(
'downComponent'
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'downComponent'
)
},
topComponent
()
{
this
.
$store
.
commit
(
'topComponent'
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'topComponent'
)
},
bottomComponent
()
{
this
.
$store
.
commit
(
'bottomComponent'
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'bottomComponent'
)
},
linkageSetting
()
{
debugger
...
...
frontend/src/components/canvas/components/Editor/index.vue
浏览文件 @
b68888bc
...
...
@@ -292,17 +292,17 @@ export default {
},
deep
:
true
},
canvasStyleData
:
{
handler
(
newVal
,
oldVla
)
{
// 第一次变化 不需要 重置边界 待改进
if
(
this
.
changeIndex
++
>
0
)
{
this
.
resizeParentBounds
()
this
.
$store
.
state
.
styleChangeTimes
++
}
// this.changeScale()
},
deep
:
true
},
//
canvasStyleData: {
//
handler(newVal, oldVla) {
//
// 第一次变化 不需要 重置边界 待改进
//
if (this.changeIndex++ > 0) {
// //
this.resizeParentBounds()
//
this.$store.state.styleChangeTimes++
//
}
//
// this.changeScale()
//
},
//
deep: true
//
},
componentData
:
{
handler
(
newVal
,
oldVla
)
{
// console.log('11111')
...
...
frontend/src/components/canvas/components/FilterTextAttr.vue
浏览文件 @
b68888bc
...
...
@@ -154,8 +154,7 @@ export default {
}
},
styleChange
()
{
debugger
this
.
$store
.
state
.
styleChangeTimes
++
this
.
$store
.
commit
(
'recordStyleChange'
)
}
}
}
...
...
frontend/src/components/canvas/components/RectangleAttr.vue
浏览文件 @
b68888bc
...
...
@@ -206,7 +206,7 @@ export default {
}
},
styleChange
()
{
this
.
$store
.
state
.
styleChangeTimes
++
this
.
$store
.
commit
(
'recordStyleChange'
)
}
}
}
...
...
frontend/src/components/canvas/components/TextAttr.vue
浏览文件 @
b68888bc
...
...
@@ -189,7 +189,7 @@ export default {
}
},
styleChange
()
{
this
.
$store
.
state
.
styleChangeTimes
++
this
.
$store
.
commit
(
'recordStyleChange'
)
}
}
}
...
...
frontend/src/components/canvas/components/Toolbar.vue
浏览文件 @
b68888bc
...
...
@@ -214,12 +214,12 @@ export default {
compose
()
{
this
.
$store
.
commit
(
'compose'
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'compose'
)
},
decompose
()
{
this
.
$store
.
commit
(
'decompose'
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'decompose'
)
},
undo
()
{
...
...
@@ -267,7 +267,7 @@ export default {
}
})
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'handleFileChange'
)
}
img
.
src
=
fileResult
...
...
@@ -306,7 +306,7 @@ export default {
clearCanvas
()
{
this
.
$store
.
commit
(
'setComponentData'
,
[])
this
.
$store
.
commit
(
'setCanvasStyle'
,
DEFAULT_COMMON_CANVAS_STYLE_STRING
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'clearCanvas'
)
},
handlePreviewChange
()
{
...
...
frontend/src/components/canvas/custom-component/VText.vue
浏览文件 @
b68888bc
...
...
@@ -67,6 +67,7 @@ export default {
methods
:
{
handleInput
(
e
)
{
this
.
$emit
(
'input'
,
this
.
element
,
e
.
target
.
innerHTML
)
this
.
$store
.
commit
(
'recordStyleChange'
)
},
handleKeydown
(
e
)
{
...
...
frontend/src/components/canvas/index.vue
浏览文件 @
b68888bc
...
...
@@ -96,7 +96,7 @@ export default {
component
.
style
.
left
=
e
.
offsetX
component
.
id
=
generateID
()
this
.
$store
.
commit
(
'addComponent'
,
{
component
})
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'handleDrop'
)
},
handleDragOver
(
e
)
{
...
...
frontend/src/components/canvas/store/snapshot.js
浏览文件 @
b68888bc
...
...
@@ -52,6 +52,11 @@ export default {
refreshSaveStatus
(
state
)
{
state
.
changeTimes
=
0
state
.
lastSaveSnapshotIndex
=
deepCopy
(
state
.
snapshotIndex
)
},
recordStyleChange
(
state
)
{
if
(
state
.
curComponent
)
{
state
.
styleChangeTimes
++
}
}
}
}
frontend/src/components/widget/DeWidget/DeDate.vue
浏览文件 @
b68888bc
...
...
@@ -86,7 +86,7 @@ export default {
}
},
styleChange
()
{
this
.
$store
.
state
.
styleChangeTimes
++
this
.
$store
.
commit
(
'recordStyleChange'
)
}
}
}
...
...
frontend/src/components/widget/DeWidget/DeNumberRange.vue
浏览文件 @
b68888bc
...
...
@@ -142,7 +142,7 @@ export default {
}
this
.
setCondition
()
this
.
styleChange
(
)
this
.
$store
.
commit
(
'recordStyleChange'
)
})
},
setCondition
()
{
...
...
@@ -177,7 +177,7 @@ export default {
}
},
styleChange
()
{
this
.
$store
.
state
.
styleChangeTimes
++
this
.
$store
.
commit
(
'recordStyleChange'
)
}
}
}
...
...
frontend/src/components/widget/DeWidget/DeSelect.vue
浏览文件 @
b68888bc
...
...
@@ -104,7 +104,7 @@ export default {
this
.
inDraw
&&
this
.
$store
.
commit
(
'addViewFilter'
,
param
)
},
styleChange
()
{
this
.
$store
.
state
.
styleChangeTimes
++
this
.
$store
.
commit
(
'recordStyleChange'
)
}
}
...
...
frontend/src/components/widget/DeWidget/DeSelectGrid.vue
浏览文件 @
b68888bc
...
...
@@ -211,7 +211,7 @@ export default {
// return data[this.defaultProp.label].indexOf(value) !== -1
// },
styleChange
()
{
this
.
$store
.
state
.
styleChangeTimes
++
this
.
$store
.
commit
(
'recordStyleChange'
)
}
}
...
...
frontend/src/icons/svg/PDF.svg
0 → 100644
浏览文件 @
b68888bc
<?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=
"1630573390175"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"2229"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"200"
height=
"200"
><defs><style
type=
"text/css"
></style></defs><path
d=
"M1024 140.8V128c0-19.2-25.6-38.4-44.8-38.4H608V0h-70.4L0 96v832c179.2 32 352 64 531.2 96h70.4v-96h352c19.2 0 44.8 0 57.6-12.8 12.8-19.2 12.8-44.8 12.8-70.4v-704zM326.4 537.6c-25.6 12.8-51.2 12.8-83.2 12.8v128l-64-6.4V313.6c57.6 0 128-25.6 179.2 19.2 51.2 64 38.4 172.8-32 204.8zM985.6 896h-384V128h384v768z"
fill=
"#A33639"
p-id=
"2230"
></path><path
d=
"M953.6 832v-51.2h-352V832zM652.8 697.6h300.8v44.8H652.8z m0-160h300.8v44.8H652.8z m0 83.2h300.8v44.8H652.8z m128-332.8c-6.4 25.6-19.2 57.6-32 83.2-64 25.6-64 44.8-64 51.2 0 6.4 6.4 12.8 12.8 19.2h12.8c19.2 0 38.4-19.2 57.6-57.6 25.6-12.8 51.2-19.2 76.8-25.6 12.8 12.8 32 19.2 51.2 19.2 12.8 0 32 0 32-25.6 0-6.4-6.4-25.6-32-25.6-12.8 0-25.6 0-38.4 6.4-19.2-12.8-32-32-38.4-51.2 12.8-38.4 12.8-64 6.4-70.4-6.4-6.4-12.8-6.4-19.2-6.4-6.4 0-19.2 6.4-19.2 12.8-32 19.2-12.8 57.6-6.4 70.4zM704 422.4c6.4-6.4 12.8-12.8 25.6-19.2-6.4 6.4-19.2 12.8-25.6 19.2zM883.2 352c12.8 0 19.2 6.4 19.2 6.4h-12.8c-6.4 0-12.8 0-19.2-6.4h12.8z m-70.4-6.4c-12.8 6.4-25.6 6.4-38.4 12.8 6.4-12.8 12.8-25.6 19.2-44.8 6.4 12.8 12.8 25.6 19.2 32zM787.2 224s6.4 0 0 0c6.4 12.8 6.4 25.6 6.4 32-6.4-12.8-6.4-19.2-6.4-32z m-544 153.6v115.2c19.2 0 51.2 0 64-25.6 12.8-25.6 12.8-51.2 0-76.8-12.8-19.2-38.4-12.8-64-12.8z"
fill=
"#A33639"
p-id=
"2231"
></path></svg>
\ No newline at end of file
frontend/src/lang/en.js
浏览文件 @
b68888bc
...
...
@@ -849,7 +849,12 @@ export default {
custom_case
:
'Custom'
,
last_layer
:
'This Is The Last Layer'
,
radar_size
:
'Size'
,
chart_mix
:
'Mix'
chart_mix
:
'Mix'
,
axis_value
:
'Axis Value'
,
axis_value_min
:
'Min'
,
axis_value_max
:
'Max'
,
axis_value_split
:
'Split'
,
axis_auto
:
'Auto'
},
dataset
:
{
sheet_warn
:
'There are multiple sheet pages, and the first one is extracted by default'
,
...
...
frontend/src/lang/tw.js
浏览文件 @
b68888bc
...
...
@@ -848,7 +848,12 @@ export default {
custom_case
:
'自定義'
,
last_layer
:
'當前已經是最後一級'
,
radar_size
:
'大小'
,
chart_mix
:
'組合圖'
chart_mix
:
'組合圖'
,
axis_value
:
'軸值'
,
axis_value_min
:
'最小值'
,
axis_value_max
:
'最大值'
,
axis_value_split
:
'間隔'
,
axis_auto
:
'自動'
},
dataset
:
{
sheet_warn
:
'有多個sheet頁面,默認抽取第一個'
,
...
...
frontend/src/lang/zh.js
浏览文件 @
b68888bc
...
...
@@ -848,7 +848,12 @@ export default {
custom_case
:
'自定义'
,
last_layer
:
'当前已经是最后一级'
,
radar_size
:
'大小'
,
chart_mix
:
'组合图'
chart_mix
:
'组合图'
,
axis_value
:
'轴值'
,
axis_value_min
:
'最小值'
,
axis_value_max
:
'最大值'
,
axis_value_split
:
'间隔'
,
axis_auto
:
'自动'
},
dataset
:
{
sheet_warn
:
'有多个 Sheet 页,默认抽取第一个'
,
...
...
frontend/src/main.js
浏览文件 @
b68888bc
...
...
@@ -77,6 +77,9 @@ Vue.component('DeComplexInput', DeComplexInput)
Vue
.
component
(
'DeComplexSelect'
,
DeComplexSelect
)
Vue
.
config
.
productionTip
=
false
import
vueToPdf
from
'vue-to-pdf'
Vue
.
use
(
vueToPdf
)
Vue
.
prototype
.
hasDataPermission
=
function
(
pTarget
,
pSource
)
{
if
(
this
.
$store
.
state
.
user
.
user
.
isAdmin
)
{
return
true
...
...
frontend/src/styles/index.scss
浏览文件 @
b68888bc
...
...
@@ -277,6 +277,14 @@ div:focus {
margin
:
0
2px
1px
0
;
}
.ds-icon-pdf
{
width
:
20px
;
height
:
20px
;
margin-right
:
5px
;
color
:
#0a7be0
;
}
.ds-icon-scene
{
width
:
13px
;
height
:
13px
;
...
...
frontend/src/utils/StringUtils.js
0 → 100644
浏览文件 @
b68888bc
// 替换所有 标准模板格式 为 $panelName$
export
function
pdfTemplateReplaceAll
(
content
,
source
,
target
)
{
const
pattern
=
'
\\
$'
+
source
+
'
\\
$'
content
=
content
.
replace
(
new
RegExp
(
pattern
,
'gm'
),
target
)
return
content
}
frontend/src/views/chart/chart/chart.js
浏览文件 @
b68888bc
...
...
@@ -107,6 +107,12 @@ export const DEFAULT_XAXIS_STYLE = {
width
:
1
,
style
:
'solid'
}
},
axisValue
:
{
auto
:
true
,
min
:
null
,
max
:
null
,
split
:
null
}
}
export
const
DEFAULT_YAXIS_STYLE
=
{
...
...
@@ -131,6 +137,12 @@ export const DEFAULT_YAXIS_STYLE = {
width
:
1
,
style
:
'solid'
}
},
axisValue
:
{
auto
:
true
,
min
:
null
,
max
:
null
,
split
:
null
}
}
export
const
DEFAULT_BACKGROUND_COLOR
=
{
...
...
frontend/src/views/chart/chart/common/common.js
浏览文件 @
b68888bc
...
...
@@ -65,6 +65,18 @@ export function componentStyle(chart_option, chart) {
if
(
!
customStyle
.
xAxis
.
show
)
{
chart_option
.
xAxis
.
axisLabel
.
show
=
false
}
// 轴值设置
delete
chart_option
.
xAxis
.
min
delete
chart_option
.
xAxis
.
max
delete
chart_option
.
xAxis
.
split
if
(
chart
.
type
.
includes
(
'horizontal'
))
{
if
(
customStyle
.
xAxis
.
axisValue
&&
!
customStyle
.
xAxis
.
axisValue
.
auto
)
{
customStyle
.
xAxis
.
axisValue
.
min
&&
(
chart_option
.
xAxis
.
min
=
parseFloat
(
customStyle
.
xAxis
.
axisValue
.
min
))
customStyle
.
xAxis
.
axisValue
.
max
&&
(
chart_option
.
xAxis
.
max
=
parseFloat
(
customStyle
.
xAxis
.
axisValue
.
max
))
customStyle
.
xAxis
.
axisValue
.
split
&&
(
chart_option
.
xAxis
.
interval
=
parseFloat
(
customStyle
.
xAxis
.
axisValue
.
split
))
}
}
}
if
(
customStyle
.
yAxis
&&
(
chart
.
type
.
includes
(
'bar'
)
||
chart
.
type
.
includes
(
'line'
)
||
chart
.
type
.
includes
(
'scatter'
)
||
chart
.
type
===
'chart-mix'
))
{
chart_option
.
yAxis
.
show
=
customStyle
.
yAxis
.
show
...
...
@@ -80,6 +92,18 @@ export function componentStyle(chart_option, chart) {
if
(
!
customStyle
.
yAxis
.
show
)
{
chart_option
.
yAxis
.
axisLabel
.
show
=
false
}
// 轴值设置
delete
chart_option
.
yAxis
.
min
delete
chart_option
.
yAxis
.
max
delete
chart_option
.
yAxis
.
split
if
(
!
chart
.
type
.
includes
(
'horizontal'
))
{
if
(
customStyle
.
yAxis
.
axisValue
&&
!
customStyle
.
yAxis
.
axisValue
.
auto
)
{
customStyle
.
yAxis
.
axisValue
.
min
&&
(
chart_option
.
yAxis
.
min
=
parseFloat
(
customStyle
.
yAxis
.
axisValue
.
min
))
customStyle
.
yAxis
.
axisValue
.
max
&&
(
chart_option
.
yAxis
.
max
=
parseFloat
(
customStyle
.
yAxis
.
axisValue
.
max
))
customStyle
.
yAxis
.
axisValue
.
split
&&
(
chart_option
.
yAxis
.
interval
=
parseFloat
(
customStyle
.
yAxis
.
axisValue
.
split
))
}
}
}
if
(
customStyle
.
split
&&
chart
.
type
.
includes
(
'radar'
))
{
chart_option
.
radar
.
name
=
customStyle
.
split
.
name
...
...
frontend/src/views/chart/components/ChartComponent.vue
浏览文件 @
b68888bc
...
...
@@ -155,7 +155,7 @@ export default {
}
else
if
(
chart
.
type
===
'chart-mix'
)
{
chart_option
=
baseMixOption
(
JSON
.
parse
(
JSON
.
stringify
(
BASE_MIX
)),
chart
)
}
console
.
log
(
JSON
.
stringify
(
chart_option
))
//
console.log(JSON.stringify(chart_option))
if
(
chart
.
type
===
'map'
)
{
const
customAttr
=
JSON
.
parse
(
chart
.
customAttr
)
...
...
@@ -241,7 +241,10 @@ export default {
trackClick
(
trackAction
)
{
const
param
=
this
.
pointParam
if
(
!
param
||
!
param
.
data
||
!
param
.
data
.
dimensionList
)
{
// 地图提示没有关联字段 其他没有维度信息的 直接返回
if
(
this
.
chart
.
type
===
'map'
)
{
this
.
$warning
(
this
.
$t
(
'panel.no_drill_field'
))
}
return
}
const
linkageParam
=
{
...
...
frontend/src/views/chart/components/component-style/XAxisSelector.vue
浏览文件 @
b68888bc
...
...
@@ -23,6 +23,36 @@
<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=
"changeXAxisStyle"
>
{{
$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=
"changeXAxisStyle"
/>
</el-form-item>
<el-form-item
:label=
"$t('chart.axis_value_max')"
class=
"form-item"
>
<el-input
v-model=
"axisForm.axisValue.max"
@
blur=
"changeXAxisStyle"
/>
</el-form-item>
<el-form-item
:label=
"$t('chart.axis_value_split')"
class=
"form-item"
>
<el-input
v-model=
"axisForm.axisValue.split"
@
blur=
"changeXAxisStyle"
/>
</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=
"changeXAxisStyle"
>
{{
$t
(
'chart.axis_show'
)
}}
</el-checkbox>
...
...
@@ -120,6 +150,9 @@ export default {
if
(
!
this
.
axisForm
.
nameTextStyle
)
{
this
.
axisForm
.
nameTextStyle
=
JSON
.
parse
(
JSON
.
stringify
(
DEFAULT_XAXIS_STYLE
.
nameTextStyle
))
}
if
(
!
this
.
axisForm
.
axisValue
)
{
this
.
axisForm
.
axisValue
=
JSON
.
parse
(
JSON
.
stringify
(
DEFAULT_XAXIS_STYLE
.
axisValue
))
}
}
}
},
...
...
frontend/src/views/chart/components/component-style/YAxisSelector.vue
浏览文件 @
b68888bc
...
...
@@ -23,6 +23,36 @@
<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>
...
...
@@ -120,6 +150,9 @@ export default {
if
(
!
this
.
axisForm
.
nameTextStyle
)
{
this
.
axisForm
.
nameTextStyle
=
JSON
.
parse
(
JSON
.
stringify
(
DEFAULT_YAXIS_STYLE
.
nameTextStyle
))
}
if
(
!
this
.
axisForm
.
axisValue
)
{
this
.
axisForm
.
axisValue
=
JSON
.
parse
(
JSON
.
stringify
(
DEFAULT_YAXIS_STYLE
.
axisValue
))
}
}
}
},
...
...
frontend/src/views/panel/AssistComponent/index.vue
浏览文件 @
b68888bc
...
...
@@ -115,7 +115,7 @@ export default {
}
})
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'handleFileChange'
)
}
img
.
src
=
fileResult
...
...
frontend/src/views/panel/SubjectSetting/PanelStyle/BackgroundSelector.vue
浏览文件 @
b68888bc
...
...
@@ -80,7 +80,7 @@ export default {
const
canvasStyleData
=
deepCopy
(
this
.
canvasStyleData
)
canvasStyleData
.
panel
=
this
.
panel
this
.
$store
.
commit
(
'setCanvasStyle'
,
canvasStyleData
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'commitStyle'
)
},
onChangeType
()
{
this
.
commitStyle
()
...
...
frontend/src/views/panel/SubjectSetting/PanelStyle/ComponentGap.vue
浏览文件 @
b68888bc
...
...
@@ -44,7 +44,7 @@ export default {
const
canvasStyleData
=
deepCopy
(
this
.
canvasStyleData
)
canvasStyleData
.
panel
=
this
.
panel
this
.
$store
.
commit
(
'setCanvasStyle'
,
canvasStyleData
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'onChangePanelStyle'
)
}
}
}
...
...
frontend/src/views/panel/SubjectSetting/PreSubject/SubjectTemplateItem.vue
浏览文件 @
b68888bc
...
...
@@ -189,7 +189,7 @@ export default {
},
subjectChange
()
{
this
.
$store
.
commit
(
'setCanvasStyle'
,
JSON
.
parse
(
this
.
subjectItem
.
details
))
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'subjectChange'
)
bus
.
$emit
(
'onSubjectChange'
)
},
templateEdit
()
{
...
...
frontend/src/views/panel/SubjectSetting/index.vue
浏览文件 @
b68888bc
...
...
@@ -135,7 +135,7 @@ export default {
chart
.
customFilter
=
JSON
.
stringify
(
this
.
chart
.
customFilter
)
canvasStyleData
.
chart
=
chart
this
.
$store
.
commit
(
'setCanvasStyle'
,
canvasStyleData
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'save'
)
}
}
}
...
...
frontend/src/views/panel/edit/index.vue
浏览文件 @
b68888bc
...
...
@@ -311,6 +311,7 @@ export default {
this
.
init
(
newVal
.
id
)
},
'$store.state.styleChangeTimes'
()
{
// console.log('styleChangeTimes' + this.$store.state.styleChangeTimes)
if
(
this
.
$store
.
state
.
styleChangeTimes
>
0
)
{
this
.
destroyTimeMachine
()
this
.
recordStyleChange
(
this
.
$store
.
state
.
styleChangeTimes
)
...
...
@@ -383,7 +384,7 @@ export default {
// this.$store.commit('setComponentData', this.resetID(JSON.parse(response.data.panelData)))
const
panelStyle
=
JSON
.
parse
(
response
.
data
.
panelStyle
)
this
.
$store
.
commit
(
'setCanvasStyle'
,
panelStyle
)
this
.
$store
.
commit
(
'recordSnapshot'
)
// 记录快照
this
.
$store
.
commit
(
'recordSnapshot'
,
'init'
)
// 记录快照
// 刷新联动信息
getPanelAllLinkageInfo
(
panelId
).
then
(
rsp
=>
{
this
.
$store
.
commit
(
'setNowPanelTrackInfo'
,
rsp
.
data
)
...
...
@@ -493,7 +494,7 @@ export default {
component
.
style
.
left
=
this
.
getPositionX
(
e
.
layerX
)
component
.
id
=
newComponentId
this
.
$store
.
commit
(
'addComponent'
,
{
component
})
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'handleDrop'
)
this
.
clearCurrentInfo
()
// // 文字组件
...
...
@@ -545,7 +546,7 @@ export default {
// this.$store.commit('addComponent', { component })
this
.
$store
.
commit
(
'setComponentWithId'
,
component
)
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'sureFilter'
)
this
.
cancelFilter
()
},
reFreshComponent
(
component
)
{
...
...
@@ -625,7 +626,7 @@ export default {
}
})
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'handleFileChange'
)
}
img
.
src
=
fileResult
...
...
@@ -677,7 +678,7 @@ export default {
component
.
style
.
left
=
600
component
.
id
=
newComponentId
this
.
$store
.
commit
(
'addComponent'
,
{
component
})
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'newViewInfo'
)
this
.
clearCurrentInfo
()
this
.
$store
.
commit
(
'setCurComponent'
,
{
component
:
component
,
index
:
this
.
componentData
.
length
-
1
})
...
...
@@ -703,7 +704,7 @@ export default {
recordStyleChange
(
index
)
{
this
.
timeMachine
=
setTimeout
(()
=>
{
if
(
index
===
this
.
$store
.
state
.
styleChangeTimes
)
{
this
.
$store
.
commit
(
'recordSnapshot'
)
this
.
$store
.
commit
(
'recordSnapshot'
,
'recordStyleChange'
)
this
.
$store
.
state
.
styleChangeTimes
=
0
}
this
.
destroyTimeMachine
()
...
...
frontend/src/views/panel/export/PDFExportTemplate.vue
0 → 100644
浏览文件 @
b68888bc
<
template
>
<div
style=
"margin-top: 5px"
>
<div>
导出时间:$TIME$
</div>
<div
contenteditable=
"true"
>
可以输入内容
</div>
<div>
<img
width=
"100%"
src=
"$snapshot$"
>
</div>
</div>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
}
},
computed
:
{
},
watch
:
{
},
mounted
()
{
},
methods
:
{
}
}
</
script
>
<
style
scoped
>
</
style
>
frontend/src/views/panel/export/PDFPreExport.vue
0 → 100644
浏览文件 @
b68888bc
<
template
>
<el-row>
<el-row
class=
"export_body_class"
>
<div
id=
"exportPdf"
ref=
"exportPdf"
>
<div
class=
"export_body_inner_class"
v-html=
"templateContentChange"
/>
</div>
</el-row>
<el-row
class=
"root_class"
>
<el-button
size=
"mini"
@
click=
"cancel()"
>
{{
$t
(
'commons.cancel'
)
}}
</el-button>
<el-button
type=
"primary"
size=
"mini"
@
click=
"save()"
>
导出PDF
</el-button>
</el-row>
</el-row>
</
template
>
<
script
>
import
JsPDF
from
'jspdf'
import
html2canvas
from
'html2canvasde'
import
{
formatTimeToStr
}
from
'./date.js'
import
{
pdfTemplateReplaceAll
}
from
'@/utils/StringUtils.js'
export
default
{
name
:
'PDFPreExport'
,
props
:
{
panelName
:
{
type
:
String
,
required
:
false
},
snapshot
:
{
type
:
String
,
required
:
true
},
templateContent
:
{
type
:
String
,
required
:
true
}
},
data
()
{
return
{
activeName
:
''
,
templateContentChange
:
''
,
time
:
''
,
varsInfo
:
{
panelName
:
this
.
panelName
,
snapshot
:
this
.
snapshot
,
userName
:
this
.
$store
.
state
.
user
.
user
.
name
},
timeInfo
:
[
'yyyy-MM-dd'
,
'yyyy-MM-dd hh:mm:ss'
]
}
},
computed
:
{
},
watch
:
{
templateContent
(
newVal
,
oldVla
)
{
this
.
initContent
()
}
},
mounted
()
{
var
date
=
new
Date
()
var
_this
=
this
_this
.
timeInfo
.
forEach
(
timeFormat
=>
{
_this
.
varsInfo
[
timeFormat
]
=
formatTimeToStr
(
date
,
timeFormat
)
})
this
.
initContent
()
},
methods
:
{
initContent
()
{
this
.
templateContentChange
=
this
.
templateContent
for
(
const
[
key
,
value
]
of
Object
.
entries
(
this
.
varsInfo
))
{
this
.
templateContentChange
=
pdfTemplateReplaceAll
(
this
.
templateContentChange
,
key
,
value
)
}
},
cancel
()
{
this
.
$emit
(
'closePreExport'
)
},
save
()
{
const
_this
=
this
html2canvas
(
document
.
getElementById
(
'exportPdf'
)).
then
(
function
(
canvas
)
{
const
contentWidth
=
canvas
.
width
const
contentHeight
=
canvas
.
height
const
pageData
=
canvas
.
toDataURL
(
'image/jpeg'
,
1.0
)
const
PDF
=
new
JsPDF
(
'p'
,
'pt'
,
[
contentWidth
,
contentHeight
])
PDF
.
addImage
(
pageData
,
'JPEG'
,
0
,
0
,
contentWidth
,
contentHeight
)
PDF
.
save
(
_this
.
panelName
+
'.pdf'
)
}
)
}
}
}
</
script
>
<
style
scoped
>
.root_class
{
margin
:
15px
0px
5px
;
text-align
:
center
;
}
.export_body_class
{
border
:
1px
solid
#dcdfe6
;
height
:
500px
;
overflow-y
:
auto
;
}
.export_body_inner_class
{
margin
:
10px
;
}
</
style
>
frontend/src/views/panel/export/date.js
0 → 100644
浏览文件 @
b68888bc
// 对Date的扩展,将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
// (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
Date
.
prototype
.
Format
=
function
(
fmt
)
{
var
o
=
{
'M+'
:
this
.
getMonth
()
+
1
,
// 月份
'd+'
:
this
.
getDate
(),
// 日
'h+'
:
this
.
getHours
(),
// 小时
'm+'
:
this
.
getMinutes
(),
// 分
's+'
:
this
.
getSeconds
(),
// 秒
'q+'
:
Math
.
floor
((
this
.
getMonth
()
+
3
)
/
3
),
// 季度
'S'
:
this
.
getMilliseconds
()
// 毫秒
}
if
(
/
(
y+
)
/
.
test
(
fmt
))
{
fmt
=
fmt
.
replace
(
RegExp
.
$1
,
(
this
.
getFullYear
()
+
''
).
substr
(
4
-
RegExp
.
$1
.
length
))
}
for
(
var
k
in
o
)
{
if
(
new
RegExp
(
'('
+
k
+
')'
).
test
(
fmt
))
{
fmt
=
fmt
.
replace
(
RegExp
.
$1
,
(
RegExp
.
$1
.
length
===
1
)
?
(
o
[
k
])
:
((
'00'
+
o
[
k
]).
substr
((
''
+
o
[
k
]).
length
)))
}
}
return
fmt
}
export
function
formatTimeToStr
(
times
,
pattern
)
{
var
d
=
new
Date
(
times
).
Format
(
'yyyy-MM-dd hh:mm:ss'
)
if
(
pattern
)
{
d
=
new
Date
(
times
).
Format
(
pattern
)
}
return
d
.
toLocaleString
()
}
frontend/src/views/panel/list/PanelList.vue
浏览文件 @
b68888bc
...
...
@@ -109,6 +109,9 @@
<el-dropdown-item
v-if=
"data.nodeType==='panel'"
icon=
"el-icon-share"
:command=
"beforeClickMore('share',data,node)"
>
{{
$t
(
'panel.share'
)
}}
</el-dropdown-item>
<el-dropdown-item
v-if=
"data.nodeType==='panel'"
icon=
"el-icon-document-copy"
:command=
"beforeClickMore('copy',data,node)"
>
{{
$t
(
'panel.copy'
)
}}
</el-dropdown-item>
<el-dropdown-item
v-if=
"data.nodeType==='panel'"
icon=
"el-icon-paperclip"
:command=
"beforeClickMore('link',data,node)"
>
{{
$t
(
'panel.create_public_links'
)
}}
</el-dropdown-item>
...
...
@@ -306,11 +309,16 @@ export default {
this
.
lastActiveNodeData
.
name
=
panelInfo
.
name
return
}
// 复制后的仪表板 放在父节点下面
if
(
this
.
editPanel
.
optType
===
'copy'
)
{
this
.
lastActiveNode
.
parent
.
data
.
children
.
push
(
panelInfo
)
}
else
{
if
(
!
this
.
lastActiveNodeData
.
children
)
{
this
.
$set
(
this
.
lastActiveNodeData
,
'children'
,
[])
}
this
.
lastActiveNodeData
.
children
.
push
(
panelInfo
)
this
.
lastActiveNode
.
expanded
=
true
}
this
.
activeNodeAndClick
(
panelInfo
)
}
else
{
this
.
tree
(
this
.
groupForm
)
...
...
@@ -367,6 +375,18 @@ export default {
}
}
break
case
'copy'
:
this
.
editPanel
=
{
visible
:
true
,
titlePre
:
this
.
$t
(
'panel.copy'
),
optType
:
'copy'
,
panelInfo
:
{
id
:
param
.
data
.
id
,
name
:
param
.
data
.
name
,
optType
:
'copy'
}
}
break
}
switch
(
param
.
type
)
{
case
'folder'
:
...
...
@@ -388,6 +408,7 @@ export default {
clickMore
(
param
)
{
switch
(
param
.
optType
)
{
case
'copy'
:
case
'toDefaultPanel'
:
case
'rename'
:
this
.
showEditPanel
(
param
)
...
...
frontend/src/views/panel/list/PanelViewShow.vue
浏览文件 @
b68888bc
...
...
@@ -54,7 +54,7 @@
</el-row>
<!-- 仪表板预览区域-->
<el-row
class=
"panel-design-preview"
>
<div
ref=
"imageWrapper"
style=
"width: 100%;height: 100%"
>
<div
id=
"imageWrapper"
ref=
"imageWrapper"
style=
"width: 100%;height: 100%"
>
<fullscreen
style=
"height: 100%;background: #f7f8fa;overflow-y: auto"
:fullscreen
.
sync=
"fullscreen"
>
<Preview
v-if=
"showMain"
:in-screen=
"!fullscreen"
:show-type=
"canvasStyleData.selfAdaption?'full':'width'"
/>
</fullscreen>
...
...
@@ -75,9 +75,31 @@
>
<save-to-template
:template-info=
"templateInfo"
@
closeSaveDialog=
"closeSaveDialog"
/>
</el-dialog>
<el-dialog
v-if=
"pdfExportShow"
:title=
"'['+panelInfo.name+']'+'PDF导出'"
:visible
.
sync=
"pdfExportShow"
width=
"70%"
:destroy-on-close=
"true"
class=
"dialog-css2"
>
<span
style=
"position: absolute;right: 70px;top:15px"
>
<svg-icon
icon-class=
"PDF"
class=
"ds-icon-pdf"
/>
<el-select
v-model=
"pdfTemplateSelectedIndex"
:placeholder=
"'切换PDF模板'"
@
change=
"changePdfTemplate()"
>
<el-option
v-for=
"(item, index) in pdfTemplateAll"
:key=
"index"
:label=
"item.name"
:value=
"index"
/>
</el-select>
</span>
<PDFPreExport
:snapshot=
"snapshotInfo"
:panel-name=
"panelInfo.name"
:template-content=
"pdfTemplateContent"
@
closePreExport=
"closePreExport"
/>
</el-dialog>
</el-row>
</
template
>
<
script
>
import
PDFPreExport
from
'@/views/panel/export/PDFPreExport'
import
Preview
from
'@/components/canvas/components/Editor/Preview'
import
SaveToTemplate
from
'@/views/panel/list/SaveToTemplate'
import
{
mapState
}
from
'vuex'
...
...
@@ -85,10 +107,11 @@ import html2canvas from 'html2canvasde'
import
FileSaver
from
'file-saver'
import
{
enshrineList
,
saveEnshrine
,
deleteEnshrine
}
from
'@/api/panel/enshrine'
import
bus
from
'@/utils/bus'
import
JsPDF
from
'jspdf'
import
{
queryAll
}
from
'@/api/panel/pdfTemplate'
export
default
{
name
:
'PanelViewShow'
,
components
:
{
Preview
,
SaveToTemplate
},
components
:
{
Preview
,
SaveToTemplate
,
PDFPreExport
},
props
:
{
activeTab
:
{
type
:
String
,
...
...
@@ -98,11 +121,16 @@ export default {
data
()
{
return
{
showMain
:
true
,
pdfTemplateSelectedIndex
:
0
,
pdfTemplateContent
:
''
,
templateInfo
:
{},
pdfTemplateAll
:
[],
templateSaveTitle
:
'保存为模板'
,
templateSaveShow
:
false
,
hasStar
:
false
,
fullscreen
:
false
fullscreen
:
false
,
pdfExportShow
:
false
,
snapshotInfo
:
''
}
},
computed
:
{
...
...
@@ -133,8 +161,15 @@ export default {
}
},
mounted
()
{
this
.
initPdfTemplate
()
},
methods
:
{
initPdfTemplate
()
{
queryAll
().
then
(
res
=>
{
this
.
pdfTemplateAll
=
res
.
data
this
.
changePdfTemplate
()
})
},
clickFullscreen
()
{
this
.
fullscreen
=
true
},
...
...
@@ -144,7 +179,7 @@ export default {
},
saveToTemplate
()
{
this
.
templateSaveShow
=
true
html2canvas
(
this
.
$refs
.
imageWrapper
).
then
(
canvas
=>
{
html2canvas
(
document
.
getElementById
(
'canvasInfoTemp'
)
).
then
(
canvas
=>
{
const
snapshot
=
canvas
.
toDataURL
(
'image/jpeg'
,
0.1
)
// 0.2是图片质量
if
(
snapshot
!==
''
)
{
this
.
templateInfo
=
{
...
...
@@ -162,7 +197,7 @@ export default {
})
},
downloadToTemplate
()
{
html2canvas
(
this
.
$refs
.
imageWrapper
).
then
(
canvas
=>
{
html2canvas
(
document
.
getElementById
(
'canvasInfoTemp'
)
).
then
(
canvas
=>
{
const
snapshot
=
canvas
.
toDataURL
(
'image/jpeg'
,
0.1
)
// 0.2是图片质量
if
(
snapshot
!==
''
)
{
this
.
templateInfo
=
{
...
...
@@ -180,34 +215,17 @@ export default {
},
downloadAsPDF
()
{
html2canvas
(
this
.
$refs
.
imageWrapper
).
then
(
canvas
=>
{
const
contentWidth
=
canvas
.
width
const
contentHeight
=
canvas
.
height
const
pageHeight
=
contentWidth
/
592.28
*
841.89
let
leftHeight
=
contentHeight
let
position
=
0
const
imgWidth
=
595.28
const
imgHeight
=
592.28
/
contentWidth
*
contentHeight
const
pageData
=
canvas
.
toDataURL
(
'image/jpeg'
,
1.0
)
const
PDF
=
new
JsPDF
(
''
,
'pt'
,
'a4'
)
if
(
leftHeight
<
pageHeight
)
{
PDF
.
addImage
(
pageData
,
'JPEG'
,
0
,
0
,
imgWidth
,
imgHeight
)
}
else
{
while
(
leftHeight
>
0
)
{
PDF
.
addImage
(
pageData
,
'JPEG'
,
0
,
position
,
imgWidth
,
imgHeight
)
leftHeight
-=
pageHeight
position
-=
841.89
if
(
leftHeight
>
0
)
{
PDF
.
addPage
()
}
}
html2canvas
(
document
.
getElementById
(
'canvasInfoTemp'
)).
then
(
canvas
=>
{
const
snapshot
=
canvas
.
toDataURL
(
'image/jpeg'
,
1
)
// 0.2是图片质量
if
(
snapshot
!==
''
)
{
this
.
snapshotInfo
=
snapshot
this
.
pdfExportShow
=
true
}
PDF
.
save
(
'PDF-test'
+
'.pdf'
)
})
},
refreshTemplateInfo
()
{
this
.
templateInfo
=
{}
html2canvas
(
this
.
$refs
.
imageWrapper
).
then
(
canvas
=>
{
html2canvas
(
document
.
getElementById
(
'canvasInfoTemp'
)
).
then
(
canvas
=>
{
const
snapshot
=
canvas
.
toDataURL
(
'image/jpeg'
,
0.1
)
// 0.2是图片质量
if
(
snapshot
!==
''
)
{
this
.
templateInfo
=
{
...
...
@@ -244,6 +262,12 @@ export default {
if
(
this
.
activeTab
!==
'PanelList'
)
{
bus
.
$emit
(
'panle_start_list_refresh'
,
isStar
)
}
},
changePdfTemplate
()
{
this
.
pdfTemplateContent
=
this
.
pdfTemplateAll
[
this
.
pdfTemplateSelectedIndex
].
templateContent
},
closePreExport
()
{
this
.
pdfExportShow
=
false
}
}
...
...
@@ -303,4 +327,14 @@ export default {
flex-flow
:
row
nowrap
;
color
:
#9ea6b2
;
}
.dialog-css2
::v-deep
.el-dialog__title
{
font-size
:
14px
!important
;
}
.dialog-css2
::v-deep
.el-dialog__header
{
padding
:
20px
20px
0
!important
;
}
.dialog-css2
::v-deep
.el-dialog__body
{
padding
:
0px
20px
!important
;
}
</
style
>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论