Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
dataease
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
zhu
dataease
Commits
769b7bc2
提交
769b7bc2
authored
2月 14, 2022
作者:
wangjiahao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: 视图归属于仪表板,去掉视图菜单
上级
ecf1be44
隐藏空白字符变更
内嵌
并排
正在显示
22 个修改的文件
包含
519 行增加
和
149 行删除
+519
-149
ExtChartViewMapper.java
.../java/io/dataease/base/mapper/ext/ExtChartViewMapper.java
+1
-1
ExtChartViewMapper.xml
...n/java/io/dataease/base/mapper/ext/ExtChartViewMapper.xml
+5
-3
ExtPanelGroupMapper.java
...java/io/dataease/base/mapper/ext/ExtPanelGroupMapper.java
+2
-0
ExtPanelGroupMapper.xml
.../java/io/dataease/base/mapper/ext/ExtPanelGroupMapper.xml
+17
-0
ExtVAuthModelMapper.java
...java/io/dataease/base/mapper/ext/ExtVAuthModelMapper.java
+4
-1
ExtVAuthModelMapper.xml
.../java/io/dataease/base/mapper/ext/ExtVAuthModelMapper.xml
+167
-98
TreeUtils.java
...nd/src/main/java/io/dataease/commons/utils/TreeUtils.java
+4
-0
ChartViewController.java
...ava/io/dataease/controller/chart/ChartViewController.java
+3
-3
PanelGroupController.java
...va/io/dataease/controller/panel/PanelGroupController.java
+7
-0
VAuthModelRequest.java
...aease/controller/request/authModel/VAuthModelRequest.java
+6
-0
VAuthModelDTO.java
...rc/main/java/io/dataease/dto/authModel/VAuthModelDTO.java
+8
-0
ChartViewService.java
...main/java/io/dataease/service/chart/ChartViewService.java
+2
-2
PanelGroupService.java
...ain/java/io/dataease/service/panel/PanelGroupService.java
+39
-1
V32__1.8.sql
backend/src/main/resources/db/migration/V32__1.8.sql
+198
-2
messages_en_US.properties
backend/src/main/resources/i18n/messages_en_US.properties
+2
-2
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
chart.js
frontend/src/api/chart/chart.js
+3
-3
panel.js
frontend/src/api/panel/panel.js
+8
-0
copy.js
frontend/src/components/canvas/store/copy.js
+1
-1
index.vue
frontend/src/views/panel/ViewSelect/index.vue
+11
-28
index.vue
frontend/src/views/panel/edit/index.vue
+29
-4
没有找到文件。
backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.java
浏览文件 @
769b7bc2
...
@@ -14,7 +14,7 @@ public interface ExtChartViewMapper {
...
@@ -14,7 +14,7 @@ public interface ExtChartViewMapper {
ChartViewDTO
searchOne
(
ChartViewRequest
request
);
ChartViewDTO
searchOne
(
ChartViewRequest
request
);
void
chartCopy
(
@Param
(
"newChartId"
)
String
newChartId
,
@Param
(
"oldChartId"
)
String
oldChartId
);
void
chartCopy
(
@Param
(
"newChartId"
)
String
newChartId
,
@Param
(
"oldChartId"
)
String
oldChartId
,
@Param
(
"panelId"
)
String
panelId
);
@Select
(
"select id from chart_view where table_id = #{tableId}"
)
@Select
(
"select id from chart_view where table_id = #{tableId}"
)
List
<
String
>
allViewIds
(
@Param
(
"tableId"
)
String
tableId
);
List
<
String
>
allViewIds
(
@Param
(
"tableId"
)
String
tableId
);
...
...
backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.xml
浏览文件 @
769b7bc2
...
@@ -109,11 +109,12 @@
...
@@ -109,11 +109,12 @@
`y_axis_ext`,
`y_axis_ext`,
`render`,
`render`,
`result_count`,
`result_count`,
`result_mode`
`result_mode`,
`chart_type`
) SELECT
) SELECT
#{newChartId},
#{newChartId},
GET_CHART_VIEW_COPY_NAME ( #{oldChartId} ),
GET_CHART_VIEW_COPY_NAME ( #{oldChartId} ),
`scene_id`
,
#{panelId}
,
`table_id`,
`table_id`,
`type`,
`type`,
GET_CHART_VIEW_COPY_NAME ( #{oldChartId} ),
GET_CHART_VIEW_COPY_NAME ( #{oldChartId} ),
...
@@ -133,7 +134,8 @@
...
@@ -133,7 +134,8 @@
`y_axis_ext`,
`y_axis_ext`,
`render`,
`render`,
`result_count`,
`result_count`,
`result_mode`
`result_mode`,
'private'
FROM
FROM
chart_view
chart_view
WHERE
WHERE
...
...
backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelGroupMapper.java
浏览文件 @
769b7bc2
...
@@ -19,5 +19,7 @@ public interface ExtPanelGroupMapper {
...
@@ -19,5 +19,7 @@ public interface ExtPanelGroupMapper {
void
copyPanelView
(
@Param
(
"pid"
)
String
panelId
);
void
copyPanelView
(
@Param
(
"pid"
)
String
panelId
);
//移除未使用的视图
void
removeUselessViews
(
@Param
(
"panelId"
)
String
panelId
);
}
}
backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelGroupMapper.xml
浏览文件 @
769b7bc2
...
@@ -178,4 +178,21 @@
...
@@ -178,4 +178,21 @@
panel_id = #{panelId}
panel_id = #{panelId}
</insert>
</insert>
<delete
id=
"removeUselessViews"
>
DELETE
FROM
chart_view
WHERE
chart_view.chart_type = 'private'
AND chart_view.scene_id = #{panelId}
AND id NOT IN (
SELECT
panel_view.chart_view_id
FROM
panel_view
WHERE
panel_view.panel_id = #{panelId}
)
</delete>
</mapper>
</mapper>
backend/src/main/java/io/dataease/base/mapper/ext/ExtVAuthModelMapper.java
浏览文件 @
769b7bc2
...
@@ -8,6 +8,9 @@ import java.util.List;
...
@@ -8,6 +8,9 @@ import java.util.List;
public
interface
ExtVAuthModelMapper
{
public
interface
ExtVAuthModelMapper
{
List
<
VAuthModelDTO
>
queryAuthModel
(
@Param
(
"record"
)
VAuthModelRequest
record
);
List
<
VAuthModelDTO
>
queryAuthModel
(
@Param
(
"record"
)
VAuthModelRequest
record
);
List
<
VAuthModelDTO
>
queryAuthModelViews
(
@Param
(
"record"
)
VAuthModelRequest
record
);
List
<
VAuthModelDTO
>
queryAuthViewsOriginal
(
@Param
(
"record"
)
VAuthModelRequest
record
);
}
}
backend/src/main/java/io/dataease/base/mapper/ext/ExtVAuthModelMapper.xml
浏览文件 @
769b7bc2
...
@@ -4,106 +4,175 @@
...
@@ -4,106 +4,175 @@
<resultMap
extends=
"io.dataease.base.mapper.VAuthModelMapper.ResultMapWithBLOBs"
id=
"ExtResultMap"
<resultMap
extends=
"io.dataease.base.mapper.VAuthModelMapper.ResultMapWithBLOBs"
id=
"ExtResultMap"
type=
"io.dataease.dto.authModel.VAuthModelDTO"
>
type=
"io.dataease.dto.authModel.VAuthModelDTO"
>
<result
column=
"privileges"
jdbcType=
"VARCHAR"
property=
"privileges"
/>
<result
column=
"privileges"
jdbcType=
"VARCHAR"
property=
"privileges"
/>
<result
column=
"inner_id"
jdbcType=
"VARCHAR"
property=
"innerId"
/>
</resultMap>
</resultMap>
<select
id=
"queryAuthModel"
resultMap=
"ExtResultMap"
>
<select
id=
"queryAuthModel"
resultMap=
"ExtResultMap"
>
SELECT
SELECT
v_auth_model.id,
v_auth_model.id,
v_auth_model.name,
v_auth_model.name,
v_auth_model.label,
v_auth_model.label,
v_auth_model.pid,
v_auth_model.pid,
v_auth_model.node_type,
v_auth_model.node_type,
v_auth_model.model_type,
v_auth_model.model_type,
v_auth_model.model_inner_type,
v_auth_model.model_inner_type,
v_auth_model.auth_type,
v_auth_model.auth_type,
v_auth_model.create_by,
v_auth_model.create_by,
v_auth_model.level,
v_auth_model.level,
v_auth_model.mode,
v_auth_model.mode,
v_auth_model.data_source_id,
v_auth_model.data_source_id,
authInfo.PRIVILEGES AS `privileges`
authInfo.PRIVILEGES AS `privileges`
FROM
FROM
( SELECT GET_V_AUTH_MODEL_ID_P_USE ( #{record.userId}, #{record.modelType} ) cids ) t,
( SELECT GET_V_AUTH_MODEL_ID_P_USE ( #{record.userId}, #{record.modelType} ) cids ) t,
v_auth_model
v_auth_model
LEFT JOIN (
LEFT JOIN (
SELECT
SELECT
auth_source,
auth_source,
group_concat( DISTINCT sys_auth_detail.privilege_extend ) AS `privileges`
group_concat( DISTINCT sys_auth_detail.privilege_extend ) AS `privileges`
FROM
FROM
(
(
`sys_auth`
`sys_auth`
LEFT JOIN `sys_auth_detail` ON ((
LEFT JOIN `sys_auth_detail` ON ((
`sys_auth`.`id` = `sys_auth_detail`.`auth_id`
`sys_auth`.`id` = `sys_auth_detail`.`auth_id`
)))
)))
WHERE
WHERE
sys_auth_detail.privilege_value = 1
sys_auth_detail.privilege_value = 1
AND sys_auth.auth_source_type = #{record.modelType}
AND sys_auth.auth_source_type = #{record.modelType}
AND (
AND (
(
(
sys_auth.auth_target_type = 'dept'
sys_auth.auth_target_type = 'dept'
AND sys_auth.auth_target IN ( SELECT dept_id FROM sys_user WHERE user_id = #{record.userId} )
AND sys_auth.auth_target IN ( SELECT dept_id FROM sys_user WHERE user_id = #{record.userId} )
)
)
OR (
OR (
sys_auth.auth_target_type = 'user'
sys_auth.auth_target_type = 'user'
AND sys_auth.auth_target = #{record.userId}
AND sys_auth.auth_target = #{record.userId}
)
)
OR (
OR (
sys_auth.auth_target_type = 'role'
sys_auth.auth_target_type = 'role'
AND sys_auth.auth_target IN ( SELECT role_id FROM sys_users_roles WHERE user_id = #{record.userId} )
AND sys_auth.auth_target IN ( SELECT role_id FROM sys_users_roles WHERE user_id = #{record.userId} )
)
)
)
)
GROUP BY
GROUP BY
`sys_auth`.`auth_source`
`sys_auth`.`auth_source`
) authInfo ON v_auth_model.id = authInfo.auth_source
) authInfo ON v_auth_model.id = authInfo.auth_source
WHERE
WHERE
FIND_IN_SET( v_auth_model.id, cids )
FIND_IN_SET( v_auth_model.id, cids )
<if
test=
"record.id != null"
>
<if
test=
"record.id != null"
>
and v_auth_model.id = #{record.id,jdbcType=VARCHAR}
and v_auth_model.id = #{record.id,jdbcType=VARCHAR}
</if>
</if>
<if
test=
"record.pid != null"
>
<if
test=
"record.pid != null"
>
and v_auth_model.pid = #{record.pid,jdbcType=VARCHAR}
and v_auth_model.pid = #{record.pid,jdbcType=VARCHAR}
</if>
</if>
<if
test=
"record.nodeType != null"
>
<if
test=
"record.nodeType != null"
>
and v_auth_model.node_type = #{record.nodeType,jdbcType=VARCHAR}
and v_auth_model.node_type = #{record.nodeType,jdbcType=VARCHAR}
</if>
</if>
<if
test=
"record.modelType != null"
>
<if
test=
"record.modelType != null"
>
and v_auth_model.model_type = #{record.modelType,jdbcType=VARCHAR}
and v_auth_model.model_type = #{record.modelType,jdbcType=VARCHAR}
</if>
</if>
<if
test=
"record.modelInnerType != null"
>
<if
test=
"record.modelInnerType != null"
>
and v_auth_model.model_inner_type = #{record.modelInnerType,jdbcType=VARCHAR}
and v_auth_model.model_inner_type = #{record.modelInnerType,jdbcType=VARCHAR}
</if>
</if>
<if
test=
"record.authType != null"
>
<if
test=
"record.authType != null"
>
and v_auth_model.auth_type = #{record.authType,jdbcType=VARCHAR}
and v_auth_model.auth_type = #{record.authType,jdbcType=VARCHAR}
</if>
</if>
<if
test=
"record.createBy != null"
>
<if
test=
"record.createBy != null"
>
and v_auth_model.create_by = #{record.createBy,jdbcType=VARCHAR}
and v_auth_model.create_by = #{record.createBy,jdbcType=VARCHAR}
</if>
</if>
<if
test=
"record.level != null"
>
<if
test=
"record.level != null"
>
and v_auth_model.`level` = #{record.level,jdbcType=BIGINT}
and v_auth_model.`level` = #{record.level,jdbcType=BIGINT}
</if>
</if>
<if
test=
"record.mode != null"
>
<if
test=
"record.mode != null"
>
<if
test=
"record.mode == 0"
>
<if
test=
"record.mode == 0"
>
and v_auth_model.`mode` = 0
and v_auth_model.`mode` = 0
</if>
</if>
<if
test=
'record.mode == 1 and record.modelType != null and record.modelType == "dataset"'
>
<if
test=
'record.mode == 1 and record.modelType != null and record.modelType == "dataset"'
>
and (v_auth_model.`mode` = 1 or (v_auth_model.`model_inner_type` = 'group' and v_auth_model.model_type = 'dataset'))
and (v_auth_model.`mode` = 1 or (v_auth_model.`model_inner_type` = 'group' and v_auth_model.model_type =
</if>
'dataset'))
</if>
</if>
<if
test=
"record.dataSourceId != null"
>
</if>
and v_auth_model.data_source_id = #{record.dataSourceId,jdbcType=VARCHAR}
<if
test=
"record.dataSourceId != null"
>
</if>
and v_auth_model.data_source_id = #{record.dataSourceId,jdbcType=VARCHAR}
<if
test=
"record.name != null"
>
</if>
and v_auth_model.`name` = #{record.name,jdbcType=LONGVARCHAR}
<if
test=
"record.name != null"
>
</if>
and v_auth_model.`name` = #{record.name,jdbcType=LONGVARCHAR}
<if
test=
"record.label != null"
>
</if>
and v_auth_model.`label` = #{record.label,jdbcType=LONGVARCHAR}
<if
test=
"record.label != null"
>
</if>
and v_auth_model.`label` = #{record.label,jdbcType=LONGVARCHAR}
<if
test=
"record.modelInnerTypeArray != null and record.modelInnerTypeArray.size() > 0"
>
</if>
and v_auth_model.model_inner_type in
<if
test=
"record.modelInnerTypeArray != null and record.modelInnerTypeArray.size() > 0"
>
<foreach
collection=
"record.modelInnerTypeArray"
item=
"item"
separator=
","
open=
"("
close=
")"
>
and v_auth_model.model_inner_type in
#{item}
<foreach
collection=
"record.modelInnerTypeArray"
item=
"item"
separator=
","
open=
"("
close=
")"
>
</foreach>
#{item}
</if>
</foreach>
ORDER BY v_auth_model.node_type desc, CONVERT(v_auth_model.label using gbk) asc
</if>
</select>
ORDER BY v_auth_model.node_type desc, CONVERT(v_auth_model.label using gbk) asc
</select>
<select
id=
"queryAuthModelViews"
resultMap=
"ExtResultMap"
>
SELECT
panel_view.id,
chart_view.id as 'inner_id',
chart_view.NAME,
chart_view.NAME AS 'label',
panel_view.panel_id AS pid,
chart_view.type as 'model_inner_type',
'leaf' AS node_type,
'view' AS model_type
FROM
panel_view
LEFT JOIN chart_view ON panel_view.chart_view_id = chart_view.id
<where>
<if
test=
"record.pids != null and record.pids.size() > 0"
>
and panel_view.panel_id in
<foreach
collection=
"record.pids"
item=
"item"
separator=
","
open=
"("
close=
")"
>
#{item}
</foreach>
</if>
</where>
ORDER BY CONVERT(chart_view.name using gbk) asc
</select>
<select
id=
"queryAuthViewsOriginal"
resultMap=
"ExtResultMap"
>
select * from (
SELECT
chart_group.id,
chart_group.id AS 'inner_id',
chart_group.NAME,
chart_group.NAME AS 'label',
chart_group.pid AS pid,
chart_group.type AS 'model_inner_type',
'spine' AS node_type,
'view' AS model_type
FROM
chart_group
UNION ALL
SELECT
panel_view.id,
chart_view.id AS 'inner_id',
chart_view.NAME,
chart_view.NAME AS 'label',
chart_view.scene_id AS pid,
chart_view.type AS 'model_inner_type',
'leaf' AS node_type,
'view' AS model_type
FROM
panel_view
LEFT JOIN chart_view ON panel_view.chart_view_id = chart_view.id
<where>
chart_view.chart_type ='public'
<if
test=
"record.pids != null and record.pids.size() > 0"
>
and panel_view.panel_id in
<foreach
collection=
"record.pids"
item=
"item"
separator=
","
open=
"("
close=
")"
>
#{item}
</foreach>
</if>
</where>
) viewsOriginal
ORDER BY viewsOriginal.node_type desc, CONVERT(viewsOriginal.label using gbk) asc
</select>
</mapper>
</mapper>
backend/src/main/java/io/dataease/commons/utils/TreeUtils.java
浏览文件 @
769b7bc2
...
@@ -2,6 +2,7 @@ package io.dataease.commons.utils;
...
@@ -2,6 +2,7 @@ package io.dataease.commons.utils;
import
io.dataease.commons.model.ITreeBase
;
import
io.dataease.commons.model.ITreeBase
;
import
org.springframework.util.Assert
;
import
org.springframework.util.Assert
;
import
org.springframework.util.CollectionUtils
;
import
java.util.*
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
...
@@ -18,6 +19,9 @@ public class TreeUtils{
...
@@ -18,6 +19,9 @@ public class TreeUtils{
*/
*/
public
static
<
T
extends
ITreeBase
>
List
<
T
>
mergeTree
(
List
<
T
>
tree
,
String
...
rootPid
)
{
public
static
<
T
extends
ITreeBase
>
List
<
T
>
mergeTree
(
List
<
T
>
tree
,
String
...
rootPid
)
{
Assert
.
notNull
(
rootPid
,
"Root Pid cannot be null"
);
Assert
.
notNull
(
rootPid
,
"Root Pid cannot be null"
);
if
(
CollectionUtils
.
isEmpty
(
tree
)){
return
null
;
}
List
<
T
>
result
=
new
ArrayList
<>();
List
<
T
>
result
=
new
ArrayList
<>();
// 构建id-节点map映射
// 构建id-节点map映射
Map
<
String
,
T
>
treePidMap
=
tree
.
stream
().
collect
(
Collectors
.
toMap
(
T:
:
getId
,
t
->
t
));
Map
<
String
,
T
>
treePidMap
=
tree
.
stream
().
collect
(
Collectors
.
toMap
(
T:
:
getId
,
t
->
t
));
...
...
backend/src/main/java/io/dataease/controller/chart/ChartViewController.java
浏览文件 @
769b7bc2
...
@@ -72,9 +72,9 @@ public class ChartViewController {
...
@@ -72,9 +72,9 @@ public class ChartViewController {
}
}
@ApiOperation
(
"复制"
)
@ApiOperation
(
"复制"
)
@PostMapping
(
"chartCopy/{id}"
)
@PostMapping
(
"chartCopy/{id}
/{panelId}
"
)
public
String
chartCopy
(
@PathVariable
String
id
)
{
public
String
chartCopy
(
@PathVariable
String
id
,
@PathVariable
String
panelId
)
{
return
chartViewService
.
chartCopy
(
id
);
return
chartViewService
.
chartCopy
(
id
,
panelId
);
}
}
@ApiIgnore
@ApiIgnore
...
...
backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java
浏览文件 @
769b7bc2
...
@@ -9,6 +9,7 @@ import io.dataease.commons.constants.DePermissionType;
...
@@ -9,6 +9,7 @@ import io.dataease.commons.constants.DePermissionType;
import
io.dataease.commons.constants.ResourceAuthLevel
;
import
io.dataease.commons.constants.ResourceAuthLevel
;
import
io.dataease.controller.handler.annotation.I18n
;
import
io.dataease.controller.handler.annotation.I18n
;
import
io.dataease.controller.request.panel.PanelGroupRequest
;
import
io.dataease.controller.request.panel.PanelGroupRequest
;
import
io.dataease.dto.authModel.VAuthModelDTO
;
import
io.dataease.dto.panel.PanelGroupDTO
;
import
io.dataease.dto.panel.PanelGroupDTO
;
import
io.dataease.service.panel.PanelGroupService
;
import
io.dataease.service.panel.PanelGroupService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
...
@@ -70,5 +71,11 @@ public class PanelGroupController {
...
@@ -70,5 +71,11 @@ public class PanelGroupController {
return
panelGroupService
.
findOne
(
id
);
return
panelGroupService
.
findOne
(
id
);
}
}
@ApiOperation
(
"仪表板视图信息"
)
@PostMapping
(
"/queryPanelViewTree"
)
@I18n
public
List
<
VAuthModelDTO
>
queryPanelViewTree
(){
return
panelGroupService
.
queryPanelViewTree
();
}
}
}
backend/src/main/java/io/dataease/controller/request/authModel/VAuthModelRequest.java
浏览文件 @
769b7bc2
...
@@ -14,9 +14,15 @@ import java.util.List;
...
@@ -14,9 +14,15 @@ import java.util.List;
public
class
VAuthModelRequest
extends
VAuthModelDTO
{
public
class
VAuthModelRequest
extends
VAuthModelDTO
{
private
String
userId
;
private
String
userId
;
private
String
privileges
;
private
String
privileges
;
private
Integer
datasetMode
;
private
Integer
datasetMode
;
private
boolean
clearEmptyDir
;
private
boolean
clearEmptyDir
;
private
List
<
String
>
modelInnerTypeArray
;
private
List
<
String
>
modelInnerTypeArray
;
private
List
<
String
>
pids
;
}
}
backend/src/main/java/io/dataease/dto/authModel/VAuthModelDTO.java
浏览文件 @
769b7bc2
...
@@ -17,5 +17,13 @@ public class VAuthModelDTO extends VAuthModelWithBLOBs implements ITreeBase<VAu
...
@@ -17,5 +17,13 @@ public class VAuthModelDTO extends VAuthModelWithBLOBs implements ITreeBase<VAu
private
String
privileges
;
private
String
privileges
;
private
List
<
VAuthModelDTO
>
children
;
private
List
<
VAuthModelDTO
>
children
;
private
long
allLeafs
=
0
l
;
private
long
allLeafs
=
0
l
;
private
String
innerId
;
public
String
toString
(){
return
this
.
getId
();
}
}
}
backend/src/main/java/io/dataease/service/chart/ChartViewService.java
浏览文件 @
769b7bc2
...
@@ -1684,9 +1684,9 @@ public class ChartViewService {
...
@@ -1684,9 +1684,9 @@ public class ChartViewService {
return
chartViewMapper
.
selectByPrimaryKey
(
id
);
return
chartViewMapper
.
selectByPrimaryKey
(
id
);
}
}
public
String
chartCopy
(
String
id
)
{
public
String
chartCopy
(
String
id
,
String
panelId
)
{
String
newChartId
=
UUID
.
randomUUID
().
toString
();
String
newChartId
=
UUID
.
randomUUID
().
toString
();
extChartViewMapper
.
chartCopy
(
newChartId
,
id
);
extChartViewMapper
.
chartCopy
(
newChartId
,
id
,
panelId
);
return
newChartId
;
return
newChartId
;
}
}
...
...
backend/src/main/java/io/dataease/service/panel/PanelGroupService.java
浏览文件 @
769b7bc2
...
@@ -3,12 +3,16 @@ package io.dataease.service.panel;
...
@@ -3,12 +3,16 @@ package io.dataease.service.panel;
import
io.dataease.base.domain.*
;
import
io.dataease.base.domain.*
;
import
io.dataease.base.mapper.ChartViewMapper
;
import
io.dataease.base.mapper.ChartViewMapper
;
import
io.dataease.base.mapper.PanelGroupMapper
;
import
io.dataease.base.mapper.PanelGroupMapper
;
import
io.dataease.base.mapper.VAuthModelMapper
;
import
io.dataease.base.mapper.ext.ExtPanelGroupMapper
;
import
io.dataease.base.mapper.ext.ExtPanelGroupMapper
;
import
io.dataease.base.mapper.ext.ExtPanelLinkJumpMapper
;
import
io.dataease.base.mapper.ext.ExtPanelLinkJumpMapper
;
import
io.dataease.base.mapper.ext.ExtVAuthModelMapper
;
import
io.dataease.commons.constants.PanelConstants
;
import
io.dataease.commons.constants.PanelConstants
;
import
io.dataease.commons.utils.AuthUtils
;
import
io.dataease.commons.utils.AuthUtils
;
import
io.dataease.commons.utils.TreeUtils
;
import
io.dataease.commons.utils.TreeUtils
;
import
io.dataease.controller.request.authModel.VAuthModelRequest
;
import
io.dataease.controller.request.panel.PanelGroupRequest
;
import
io.dataease.controller.request.panel.PanelGroupRequest
;
import
io.dataease.dto.authModel.VAuthModelDTO
;
import
io.dataease.dto.chart.ChartViewDTO
;
import
io.dataease.dto.chart.ChartViewDTO
;
import
io.dataease.dto.panel.PanelGroupDTO
;
import
io.dataease.dto.panel.PanelGroupDTO
;
import
io.dataease.exception.DataEaseException
;
import
io.dataease.exception.DataEaseException
;
...
@@ -28,6 +32,7 @@ import java.util.ArrayList;
...
@@ -28,6 +32,7 @@ import java.util.ArrayList;
import
java.util.List
;
import
java.util.List
;
import
java.util.Optional
;
import
java.util.Optional
;
import
java.util.UUID
;
import
java.util.UUID
;
import
java.util.stream.Collectors
;
/**
/**
* Author: wangjiahao
* Author: wangjiahao
...
@@ -59,7 +64,10 @@ public class PanelGroupService {
...
@@ -59,7 +64,10 @@ public class PanelGroupService {
private
PanelViewService
panelViewService
;
private
PanelViewService
panelViewService
;
@Resource
@Resource
private
ExtPanelLinkJumpMapper
extPanelLinkJumpMapper
;
private
ExtPanelLinkJumpMapper
extPanelLinkJumpMapper
;
@Resource
private
ExtVAuthModelMapper
extVAuthModelMapper
;
@Resource
private
VAuthModelMapper
vAuthModelMapper
;
public
List
<
PanelGroupDTO
>
tree
(
PanelGroupRequest
panelGroupRequest
)
{
public
List
<
PanelGroupDTO
>
tree
(
PanelGroupRequest
panelGroupRequest
)
{
String
userId
=
String
.
valueOf
(
AuthUtils
.
getUser
().
getUserId
());
String
userId
=
String
.
valueOf
(
AuthUtils
.
getUser
().
getUserId
());
...
@@ -157,6 +165,9 @@ public class PanelGroupService {
...
@@ -157,6 +165,9 @@ public class PanelGroupService {
if
(!
CollectionUtils
.
isNotEmpty
(
panelGroupDTOList
))
{
if
(!
CollectionUtils
.
isNotEmpty
(
panelGroupDTOList
))
{
DataEaseException
.
throwException
(
"未查询到用户对应的资源权限,请尝试刷新重新保存"
);
DataEaseException
.
throwException
(
"未查询到用户对应的资源权限,请尝试刷新重新保存"
);
}
}
//移除没有用到的仪表板私有视图
extPanelGroupMapper
.
removeUselessViews
(
panelId
);
return
panelGroupDTOList
.
get
(
0
);
return
panelGroupDTOList
.
get
(
0
);
}
}
...
@@ -214,4 +225,31 @@ public class PanelGroupService {
...
@@ -214,4 +225,31 @@ public class PanelGroupService {
return
chartViewDTOList
;
return
chartViewDTOList
;
}
}
public
List
<
VAuthModelDTO
>
queryPanelViewTree
(){
List
<
VAuthModelDTO
>
result
=
new
ArrayList
<>();
VAuthModelRequest
panelRequest
=
new
VAuthModelRequest
();
panelRequest
.
setUserId
(
String
.
valueOf
(
AuthUtils
.
getUser
().
getUserId
()));
panelRequest
.
setModelType
(
"panel"
);
List
<
VAuthModelDTO
>
panelResult
=
extVAuthModelMapper
.
queryAuthModel
(
panelRequest
);
// 获取仪表板下面的视图
if
(
CollectionUtils
.
isNotEmpty
(
panelResult
)){
result
.
addAll
(
panelResult
);
List
<
String
>
panelIds
=
panelResult
.
stream
().
map
(
VAuthModelDTO:
:
getId
).
collect
(
Collectors
.
toList
());
VAuthModelRequest
viewRequest
=
new
VAuthModelRequest
();
viewRequest
.
setPids
(
panelIds
);
List
<
VAuthModelDTO
>
viewResult
=
extVAuthModelMapper
.
queryAuthModelViews
(
viewRequest
);
if
(
CollectionUtils
.
isNotEmpty
(
viewResult
)){
result
.
addAll
(
viewResult
);
}
result
=
TreeUtils
.
mergeTree
(
panelResult
,
"panel_list"
);
// 原有视图的目录结构
List
<
VAuthModelDTO
>
viewOriginal
=
extVAuthModelMapper
.
queryAuthViewsOriginal
(
viewRequest
);
if
(
CollectionUtils
.
isNotEmpty
(
viewOriginal
)
&&
viewOriginal
.
size
()>
1
){
result
.
addAll
(
TreeUtils
.
mergeTree
(
viewOriginal
,
"public_chart"
));
}
}
return
result
;
}
}
}
backend/src/main/resources/db/migration/V32__1.8.sql
浏览文件 @
769b7bc2
ALTER
TABLE
`chart_view`
ADD
COLUMN
`x_axis_ext`
LONGTEXT
COMMENT
'table-row'
AFTER
`x_axis`
;
ALTER
TABLE
`chart_view`
ADD
COLUMN
`x_axis_ext`
LONGTEXT
COMMENT
'table-row'
AFTER
`x_axis`
;
UPDATE
`chart_view`
SET
`x_axis_ext`
=
'[]'
;
UPDATE
`chart_view`
SET
`x_axis_ext`
=
'[]'
;
\ No newline at end of file
INSERT
INTO
`chart_group`
(
`id`
,
`name`
,
`pid`
,
`level`
,
`type`
,
`create_by`
,
`create_time`
)
VALUES
(
'0'
,
'i18n_public_chart'
,
'public_chart'
,
-
1
,
'group'
,
'admin'
,
NULL
);
ALTER
TABLE
`chart_view`
MODIFY
COLUMN
`scene_id`
varchar
(
50
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_general_ci
NOT
NULL
COMMENT
'场景ID chart_type为privat的时候 是仪表板id'
AFTER
`title`
,
ADD
COLUMN
`chart_type`
varchar
(
255
)
NULL
DEFAULT
'public'
COMMENT
'视图类型 public 公共 历史可复用的视图,private 私有 专属某个仪表板'
AFTER
`style_priority`
;
delete
from
sys_auth_detail
where
auth_id
in
(
select
id
from
sys_auth
where
auth_source_type
=
'chart'
);
delete
from
sys_auth
where
auth_source_type
=
'chart'
;
DROP
TRIGGER
`new_auth_chart_view`
;
DROP
TRIGGER
`delete_auth_chart_view`
;
delete
from
sys_menu
where
menu_id
=
'10'
;
DROP
VIEW
IF
EXISTS
`v_auth_model`
;
CREATE
ALGORITHM
=
UNDEFINED
SQL
SECURITY
DEFINER
VIEW
`v_auth_model`
AS
SELECT
`sys_user`
.
`user_id`
AS
`id`
,
`sys_user`
.
`username`
AS
`name`
,
`sys_user`
.
`username`
AS
`label`
,
'0'
AS
`pid`
,
'leaf'
AS
`node_type`
,
'user'
AS
`model_type`
,
'user'
AS
`model_inner_type`
,
'target'
AS
`auth_type`
,
`sys_user`
.
`create_by`
AS
`create_by`
,
0
AS
`level`
,
0
AS
`mode`
,
'0'
AS
`data_source_id`
FROM
`sys_user`
WHERE
(
`sys_user`
.
`is_admin`
<>
1
)
UNION
ALL
SELECT
`sys_role`
.
`role_id`
AS
`id`
,
`sys_role`
.
`name`
AS
`name`
,
`sys_role`
.
`name`
AS
`label`
,
'0'
AS
`pid`
,
'leaf'
AS
`node_type`
,
'role'
AS
`model_type`
,
'role'
AS
`model_inner_type`
,
'target'
AS
`auth_type`
,
`sys_role`
.
`create_by`
AS
`create_by`
,
0
AS
`level`
,
0
AS
`mode`
,
'0'
AS
`data_source_id`
FROM
`sys_role`
UNION
ALL
SELECT
`sys_dept`
.
`dept_id`
AS
`id`
,
`sys_dept`
.
`name`
AS
`name`
,
`sys_dept`
.
`name`
AS
`lable`
,(
cast
(
`sys_dept`
.
`pid`
AS
CHAR
charset
utf8mb4
)
COLLATE
utf8mb4_general_ci
)
AS
`pid`
,
IF
((
`sys_dept`
.
`sub_count`
=
0
),
'leaf'
,
'spine'
)
AS
`node_type`
,
'dept'
AS
`model_type`
,
'dept'
AS
`model_inner_type`
,
'target'
AS
`auth_type`
,
`sys_dept`
.
`create_by`
AS
`create_by`
,
0
AS
`level`
,
0
AS
`mode`
,
'0'
AS
`data_source_id`
FROM
`sys_dept`
UNION
ALL
SELECT
`datasource`
.
`id`
AS
`id`
,
`datasource`
.
`name`
AS
`NAME`
,
`datasource`
.
`name`
AS
`label`
,
'0'
AS
`pid`
,
'leaf'
AS
`node_type`
,
'link'
AS
`model_type`
,
`datasource`
.
`type`
AS
`model_inner_type`
,
'source'
AS
`auth_type`
,
`datasource`
.
`create_by`
AS
`create_by`
,
0
AS
`level`
,
0
AS
`mode`
,
'0'
AS
`data_source_id`
FROM
`datasource`
UNION
ALL
SELECT
`dataset_group`
.
`id`
AS
`id`
,
`dataset_group`
.
`name`
AS
`NAME`
,
`dataset_group`
.
`name`
AS
`lable`
,
IF
(
isnull
(
`dataset_group`
.
`pid`
),
'0'
,
`dataset_group`
.
`pid`
)
AS
`pid`
,
'spine'
AS
`node_type`
,
'dataset'
AS
`model_type`
,
`dataset_group`
.
`type`
AS
`model_inner_type`
,
'source'
AS
`auth_type`
,
`dataset_group`
.
`create_by`
AS
`create_by`
,
`dataset_group`
.
`level`
AS
`level`
,
0
AS
`mode`
,
'0'
AS
`data_source_id`
FROM
`dataset_group`
UNION
ALL
SELECT
`dataset_table`
.
`id`
AS
`id`
,
`dataset_table`
.
`name`
AS
`NAME`
,
`dataset_table`
.
`name`
AS
`lable`
,
`dataset_table`
.
`scene_id`
AS
`pid`
,
'leaf'
AS
`node_type`
,
'dataset'
AS
`model_type`
,
`dataset_table`
.
`type`
AS
`model_inner_type`
,
'source'
AS
`auth_type`
,
`dataset_table`
.
`create_by`
AS
`create_by`
,
0
AS
`level`
,
`dataset_table`
.
`mode`
AS
`mode`
,
`dataset_table`
.
`data_source_id`
AS
`data_source_id`
FROM
`dataset_table`
UNION
ALL
SELECT
`panel_group`
.
`id`
AS
`id`
,
`panel_group`
.
`name`
AS
`NAME`
,
`panel_group`
.
`name`
AS
`label`
,(
CASE
`panel_group`
.
`id`
WHEN
'panel_list'
THEN
'0'
WHEN
'default_panel'
THEN
'0'
ELSE
`panel_group`
.
`pid`
END
)
AS
`pid`
,
IF
((
`panel_group`
.
`node_type`
=
'folder'
),
'spine'
,
'leaf'
)
AS
`node_type`
,
'panel'
AS
`model_type`
,
`panel_group`
.
`panel_type`
AS
`model_inner_type`
,
'source'
AS
`auth_type`
,
`panel_group`
.
`create_by`
AS
`create_by`
,
0
AS
`level`
,
0
AS
`mode`
,
'0'
AS
`data_source_id`
FROM
`panel_group`
UNION
ALL
SELECT
`sys_menu`
.
`menu_id`
AS
`menu_id`
,
`sys_menu`
.
`title`
AS
`name`
,
`sys_menu`
.
`title`
AS
`label`
,
`sys_menu`
.
`pid`
AS
`pid`
,
IF
((
`sys_menu`
.
`sub_count`
>
0
),
'spine'
,
'leaf'
)
AS
`node_type`
,
'menu'
AS
`model_type`
,(
CASE
`sys_menu`
.
`type`
WHEN
0
THEN
'folder'
WHEN
1
THEN
'menu'
WHEN
2
THEN
'button'
END
)
AS
`model_inner_type`
,
'source'
AS
`auth_type`
,
`sys_menu`
.
`create_by`
AS
`create_by`
,
0
AS
`level`
,
0
AS
`mode`
,
'0'
AS
`data_source_id`
FROM
`sys_menu`
WHERE
((
`sys_menu`
.
`i_frame`
<>
1
)
OR
isnull
(
`sys_menu`
.
`i_frame`
))
UNION
ALL
SELECT
`plugin_sys_menu`
.
`menu_id`
AS
`menu_id`
,
`plugin_sys_menu`
.
`title`
AS
`name`
,
`plugin_sys_menu`
.
`title`
AS
`label`
,
`plugin_sys_menu`
.
`pid`
AS
`pid`
,
IF
((
`plugin_sys_menu`
.
`sub_count`
>
0
),
'spine'
,
'leaf'
)
AS
`node_type`
,
'menu'
AS
`model_type`
,(
CASE
`plugin_sys_menu`
.
`type`
WHEN
0
THEN
'folder'
WHEN
1
THEN
'menu'
WHEN
2
THEN
'button'
END
)
AS
`model_inner_type`
,
'source'
AS
`auth_type`
,
`plugin_sys_menu`
.
`create_by`
AS
`create_by`
,
0
AS
`level`
,
0
AS
`mode`
,
'0'
AS
`data_source_id`
FROM
`plugin_sys_menu`
WHERE
((
`plugin_sys_menu`
.
`i_frame`
<>
1
)
OR
isnull
(
`plugin_sys_menu`
.
`i_frame`
));
backend/src/main/resources/i18n/messages_en_US.properties
浏览文件 @
769b7bc2
...
@@ -118,4 +118,5 @@ i18n_calc_field_error=Field expression error
...
@@ -118,4 +118,5 @@ i18n_calc_field_error=Field expression error
i18n_cp_exist
=
Column permission of the same type already exists
i18n_cp_exist
=
Column permission of the same type already exists
connection_failed
=
Connection Failed
connection_failed
=
Connection Failed
theme_name_repeat
=
name of theme has been existed
theme_name_repeat
=
name of theme has been existed
theme_name_empty
=
name can not be empty
theme_name_empty
=
name can not be empty
\ No newline at end of file
i18n_public_chart
=
Public Chart
backend/src/main/resources/i18n/messages_zh_CN.properties
浏览文件 @
769b7bc2
...
@@ -118,3 +118,4 @@ i18n_cp_exist=已有同类型的列权限存在
...
@@ -118,3 +118,4 @@ i18n_cp_exist=已有同类型的列权限存在
connection_failed
=
连接失败
connection_failed
=
连接失败
theme_name_repeat
=
名称已存在
theme_name_repeat
=
名称已存在
theme_name_empty
=
名称不能为空
theme_name_empty
=
名称不能为空
i18n_public_chart
=
存量视图
backend/src/main/resources/i18n/messages_zh_TW.properties
浏览文件 @
769b7bc2
...
@@ -119,3 +119,4 @@ i18n_cp_exist=已有同類型的列權限存在
...
@@ -119,3 +119,4 @@ i18n_cp_exist=已有同類型的列權限存在
connection_failed
=
連接失敗
connection_failed
=
連接失敗
theme_name_repeat
=
名稱已存在
theme_name_repeat
=
名稱已存在
theme_name_empty
=
名稱不能為空
theme_name_empty
=
名稱不能為空
i18n_public_chart
=
存量视图
frontend/src/api/chart/chart.js
浏览文件 @
769b7bc2
...
@@ -28,11 +28,11 @@ export function getChartTree(data) {
...
@@ -28,11 +28,11 @@ export function getChartTree(data) {
})
})
}
}
export
function
chartCopy
(
id
)
{
export
function
chartCopy
(
id
,
panelId
)
{
return
request
({
return
request
({
url
:
'/chart/view/chartCopy/'
+
id
,
url
:
'/chart/view/chartCopy/'
+
id
+
'/'
+
panelId
,
method
:
'post'
,
method
:
'post'
,
loading
:
tru
e
loading
:
fals
e
})
})
}
}
export
function
chartGroupTree
(
data
)
{
export
function
chartGroupTree
(
data
)
{
...
...
frontend/src/api/panel/panel.js
浏览文件 @
769b7bc2
...
@@ -154,3 +154,11 @@ export function initPanelData(panelId, callback) {
...
@@ -154,3 +154,11 @@ export function initPanelData(panelId, callback) {
callback
(
response
)
callback
(
response
)
})
})
}
}
export
function
queryPanelViewTree
()
{
return
request
({
url
:
'/panel/group/queryPanelViewTree'
,
method
:
'post'
})
}
frontend/src/components/canvas/store/copy.js
浏览文件 @
769b7bc2
...
@@ -47,7 +47,7 @@ export default {
...
@@ -47,7 +47,7 @@ export default {
// 如果是用户视图 测先进行底层复制
// 如果是用户视图 测先进行底层复制
if
(
data
.
type
===
'view'
)
{
if
(
data
.
type
===
'view'
)
{
chartCopy
(
data
.
propValue
.
viewId
).
then
(
res
=>
{
chartCopy
(
data
.
propValue
.
viewId
,
state
.
panel
.
panelInfo
.
id
).
then
(
res
=>
{
const
newView
=
deepCopy
(
data
)
const
newView
=
deepCopy
(
data
)
newView
.
id
=
uuid
.
v1
()
newView
.
id
=
uuid
.
v1
()
newView
.
propValue
.
viewId
=
res
.
data
newView
.
propValue
.
viewId
=
res
.
data
...
...
frontend/src/views/panel/ViewSelect/index.vue
浏览文件 @
769b7bc2
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
<el-col
v-loading=
"loading"
>
<el-col
v-loading=
"loading"
>
<el-row
style=
"margin-top: 5px"
>
<el-row
style=
"margin-top: 5px"
>
<el-row
style=
"margin-left: 5px;margin-right: 5px"
>
<el-row
style=
"margin-left: 5px;margin-right: 5px"
>
<el-col
:span=
"
selectModel ? 23 : 16
"
>
<el-col
:span=
"
23
"
>
<el-input
<el-input
v-model=
"templateFilterText"
v-model=
"templateFilterText"
:placeholder=
"$t('panel.filter_keywords')"
:placeholder=
"$t('panel.filter_keywords')"
...
@@ -11,9 +11,9 @@
...
@@ -11,9 +11,9 @@
prefix-icon=
"el-icon-search"
prefix-icon=
"el-icon-search"
/>
/>
</el-col>
</el-col>
<
el-col
v-if=
"!selectModel"
:span=
"7"
>
<
!--
<el-col
v-if=
"!selectModel"
:span=
"7"
>
--
>
<el-button
type=
"primary"
size=
"mini"
style=
"float: right"
@
click=
"newChart"
>
新建
</el-button
>
<!--
<el-button
type=
"primary"
size=
"mini"
style=
"float: right"
@
click=
"newChart"
>
新建
</el-button>
--
>
<
/el-col
>
<
!--
</el-col>
--
>
</el-row>
</el-row>
<el-row
style=
"margin-top: 5px"
>
<el-row
style=
"margin-top: 5px"
>
...
@@ -31,46 +31,35 @@
...
@@ -31,46 +31,35 @@
:filter-node-method=
"filterNode"
:filter-node-method=
"filterNode"
:highlight-current=
"true"
:highlight-current=
"true"
@
node-drag-start=
"handleDragStart"
@
node-drag-start=
"handleDragStart"
@
node-click=
"nodeClick"
@
check=
"checkChanged"
@
check=
"checkChanged"
@
node-drag-end=
"dragEnd"
@
node-drag-end=
"dragEnd"
>
>
<span
slot-scope=
"
{ node, data }" class="custom-tree-node">
<span
slot-scope=
"
{ node, data }" class="custom-tree-node">
<span>
<span>
<span
v-if=
"data.
type==='scene'||data.type==='group
'"
>
<span
v-if=
"data.
modelType==='panel'|| data.nodeType === 'spine
'"
>
<el-button
<el-button
icon=
"el-icon-folder"
icon=
"el-icon-folder"
type=
"text"
type=
"text"
/>
/>
</span>
</span>
<span
v-else
>
<span
v-else
>
<svg-icon
:icon-class=
"data.
t
ype"
style=
"width: 14px;height: 14px"
/>
<svg-icon
:icon-class=
"data.
modelInnerT
ype"
style=
"width: 14px;height: 14px"
/>
</span>
</span>
<span
style=
"margin-left: 6px;font-size: 14px"
>
{{
data
.
name
}}
</span>
<span
style=
"margin-left: 6px;font-size: 14px"
>
{{
data
.
name
}}
</span>
</span>
</span>
</span>
</span>
</el-tree>
</el-tree>
</el-row>
</el-row>
<!--
<el-row
v-if=
"detailItem&&detailItem.snapshot"
class=
"detail-class"
>
-->
<!--
<el-card
class=
"filter-card-class"
>
-->
<!--
<div
slot=
"header"
class=
"button-div-class"
>
-->
<!--
<span>
{{
detailItem
.
name
}}
</span>
-->
<!--
</div>
-->
<!--
<img
draggable=
"false"
class=
"view-list-thumbnails"
:src=
"detailItem.snapshot"
alt=
""
>
-->
<!--
</el-card>
-->
<!--
</el-row>
-->
</el-row>
</el-row>
</el-col>
</el-col>
</
template
>
</
template
>
<
script
>
<
script
>
import
{
tree
,
findOne
}
from
'@/api/panel/view'
import
componentList
from
'@/components/canvas/custom-component/component-list'
import
componentList
from
'@/components/canvas/custom-component/component-list'
import
{
deepCopy
}
from
'@/components/canvas/utils/utils'
import
{
deepCopy
}
from
'@/components/canvas/utils/utils'
import
eventBus
from
'@/components/canvas/utils/eventBus'
import
eventBus
from
'@/components/canvas/utils/eventBus'
import
{
mapState
}
from
'vuex'
import
{
mapState
}
from
'vuex'
import
{
queryPanelViewTree
}
from
'@/api/panel/panel'
export
default
{
export
default
{
name
:
'ViewSelect'
,
name
:
'ViewSelect'
,
...
@@ -113,15 +102,9 @@ export default {
...
@@ -113,15 +102,9 @@ export default {
if
(
!
value
)
return
true
if
(
!
value
)
return
true
return
data
.
name
.
indexOf
(
value
)
!==
-
1
return
data
.
name
.
indexOf
(
value
)
!==
-
1
},
},
nodeClick
(
data
,
node
)
{
findOne
(
data
.
id
).
then
(
res
=>
{
this
.
detailItem
=
res
.
data
})
},
loadData
()
{
loadData
()
{
const
param
=
{}
this
.
loading
=
true
this
.
loading
=
true
tree
(
param
).
then
(
res
=>
{
queryPanelViewTree
(
).
then
(
res
=>
{
const
nodeDatas
=
res
.
data
const
nodeDatas
=
res
.
data
if
(
this
.
selectModel
)
{
if
(
this
.
selectModel
)
{
this
.
setParentDisable
(
nodeDatas
)
this
.
setParentDisable
(
nodeDatas
)
...
@@ -135,7 +118,7 @@ export default {
...
@@ -135,7 +118,7 @@ export default {
ev
.
dataTransfer
.
effectAllowed
=
'copy'
ev
.
dataTransfer
.
effectAllowed
=
'copy'
const
dataTrans
=
{
const
dataTrans
=
{
type
:
'view'
,
type
:
'view'
,
id
:
node
.
data
.
id
id
:
node
.
data
.
i
nnerI
d
}
}
ev
.
dataTransfer
.
setData
(
'componentInfo'
,
JSON
.
stringify
(
dataTrans
))
ev
.
dataTransfer
.
setData
(
'componentInfo'
,
JSON
.
stringify
(
dataTrans
))
eventBus
.
$emit
(
'startMoveIn'
)
eventBus
.
$emit
(
'startMoveIn'
)
...
@@ -146,7 +129,7 @@ export default {
...
@@ -146,7 +129,7 @@ export default {
},
},
// 判断节点能否被拖拽
// 判断节点能否被拖拽
allowDrag
(
draggingNode
)
{
allowDrag
(
draggingNode
)
{
if
(
draggingNode
.
data
.
type
===
'scene'
||
draggingNode
.
data
.
type
===
'group
'
)
{
if
(
draggingNode
.
data
.
modelType
===
'panel'
||
draggingNode
.
data
.
nodeType
===
'spine
'
)
{
return
false
return
false
}
else
{
}
else
{
return
true
return
true
...
@@ -171,7 +154,7 @@ export default {
...
@@ -171,7 +154,7 @@ export default {
},
},
setParentDisable
(
nodes
)
{
setParentDisable
(
nodes
)
{
nodes
.
forEach
(
node
=>
{
nodes
.
forEach
(
node
=>
{
if
(
node
.
type
===
'group
'
)
{
if
(
node
.
modelType
===
'panel'
||
node
.
nodeType
===
'spine
'
)
{
node
.
disabled
=
true
node
.
disabled
=
true
}
}
if
(
node
.
children
&&
node
.
children
.
length
>
0
)
{
if
(
node
.
children
&&
node
.
children
.
length
>
0
)
{
...
...
frontend/src/views/panel/edit/index.vue
浏览文件 @
769b7bc2
...
@@ -25,7 +25,7 @@
...
@@ -25,7 +25,7 @@
<div
style=
"width: 60px;height: 100%;overflow: hidden auto;position: relative;margin: 0px auto; font-size: 14px"
>
<div
style=
"width: 60px;height: 100%;overflow: hidden auto;position: relative;margin: 0px auto; font-size: 14px"
>
<!-- 视图图表 start -->
<!-- 视图图表 start -->
<div
class=
"button-div-class"
style=
" width: 24px;height: 24px;text-align: center;line-height: 1;position: relative;margin: 16px auto 0px;"
>
<div
class=
"button-div-class"
style=
" width: 24px;height: 24px;text-align: center;line-height: 1;position: relative;margin: 16px auto 0px;"
>
<el-button
:class=
"show&&showIndex===0? 'button-show':'button-closed'"
circle
class=
"el-icon-circle-plus-outline"
size=
"mini"
@
click=
"showPanel(0
)"
/>
<el-button
circle
class=
"el-icon-circle-plus-outline"
size=
"mini"
@
click=
"newChart(
)"
/>
</div>
</div>
<div
class=
"button-text"
style=
"position: relative; margin: 18px auto 16px;"
>
<div
class=
"button-text"
style=
"position: relative; margin: 18px auto 16px;"
>
<div
style=
"max-width: 100%;text-align: center;white-space: nowrap;text-overflow: ellipsis;position: relative;flex-shrink: 0;"
>
<div
style=
"max-width: 100%;text-align: center;white-space: nowrap;text-overflow: ellipsis;position: relative;flex-shrink: 0;"
>
...
@@ -66,6 +66,21 @@
...
@@ -66,6 +66,21 @@
<div
style=
"width: 60px;height: 1px;line-height: 1px;text-align: center;white-space: pre;text-overflow: ellipsis;position: relative;flex-shrink: 0;"
/>
<div
style=
"width: 60px;height: 1px;line-height: 1px;text-align: center;white-space: pre;text-overflow: ellipsis;position: relative;flex-shrink: 0;"
/>
</div>
</div>
<!-- 其他组件 end -->
<!-- 其他组件 end -->
<!-- 视图复用 start -->
<div
class=
"button-div-class"
style=
" width: 24px;height: 24px;text-align: center;line-height: 1;position: relative;margin: 16px auto 0px;"
>
<el-button
:class=
"show&&showIndex===0? 'button-show':'button-closed'"
circle
class=
"el-icon-copy-document"
size=
"mini"
@
click=
"showPanel(0)"
/>
</div>
<div
class=
"button-text"
style=
"position: relative; margin: 18px auto 16px;"
>
<div
style=
"max-width: 100%;text-align: center;white-space: nowrap;text-overflow: ellipsis;position: relative;flex-shrink: 0;"
>
<!--
{{
$t
(
'panel.view'
)
}}
-->
复用
</div>
</div>
<div
style=
"height: 1px; position: relative; margin: 0px auto;background-color:#E6E6E6;"
>
<div
style=
"width: 60px;height: 1px;line-height: 1px;text-align: center;white-space: pre;text-overflow: ellipsis;position: relative;flex-shrink: 0;"
/>
</div>
<!-- 视图复用 end -->
</div>
</div>
</div>
</div>
</de-aside-container>
</de-aside-container>
...
@@ -228,7 +243,7 @@ import elementResizeDetectorMaker from 'element-resize-detector'
...
@@ -228,7 +243,7 @@ import elementResizeDetectorMaker from 'element-resize-detector'
import
AssistComponent
from
'@/views/panel/AssistComponent'
import
AssistComponent
from
'@/views/panel/AssistComponent'
import
PanelTextEditor
from
'@/components/canvas/custom-component/PanelTextEditor'
import
PanelTextEditor
from
'@/components/canvas/custom-component/PanelTextEditor'
import
ChartGroup
from
'@/views/chart/group/Group'
import
ChartGroup
from
'@/views/chart/group/Group'
import
{
searchAdviceSceneId
}
from
'@/api/chart/chart'
import
{
chartCopy
,
searchAdviceSceneId
}
from
'@/api/chart/chart'
// 引入样式
// 引入样式
import
'@/components/canvas/assets/iconfont/iconfont.css'
import
'@/components/canvas/assets/iconfont/iconfont.css'
import
'@/components/canvas/styles/animate.css'
import
'@/components/canvas/styles/animate.css'
...
@@ -628,8 +643,18 @@ export default {
...
@@ -628,8 +643,18 @@ export default {
component
.
id
=
newComponentId
component
.
id
=
newComponentId
// 新拖入的组件矩阵状态 和仪表板当前的矩阵状态 保持一致
// 新拖入的组件矩阵状态 和仪表板当前的矩阵状态 保持一致
component
.
auxiliaryMatrix
=
this
.
canvasStyleData
.
auxiliaryMatrix
component
.
auxiliaryMatrix
=
this
.
canvasStyleData
.
auxiliaryMatrix
this
.
$store
.
commit
(
'addComponent'
,
{
component
})
this
.
$store
.
commit
(
'recordSnapshot'
,
'handleDrop'
)
// 视图统一调整为复制
if
(
componentInfo
.
type
===
'view'
)
{
chartCopy
(
component
.
propValue
.
viewId
,
this
.
panelInfo
.
id
).
then
(
res
=>
{
component
.
propValue
.
viewId
=
res
.
data
this
.
$store
.
commit
(
'addComponent'
,
{
component
})
this
.
$store
.
commit
(
'recordSnapshot'
,
'handleDrop'
)
})
}
else
{
this
.
$store
.
commit
(
'addComponent'
,
{
component
})
this
.
$store
.
commit
(
'recordSnapshot'
,
'handleDrop'
)
}
this
.
clearCurrentInfo
()
this
.
clearCurrentInfo
()
},
},
clearCurrentInfo
()
{
clearCurrentInfo
()
{
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论