Merge pull request #7080 from dataease/dev-v2

merge
This commit is contained in:
fit2cloudrd 2023-12-07 18:27:07 +08:00 committed by GitHub
commit f2b0cf359e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 116 additions and 98 deletions

View File

@ -6,11 +6,6 @@
<a href="https://github.com/dataease/dataease"><img src="https://img.shields.io/github/stars/dataease/dataease?color=%231890FF&style=flat-square" alt="Stars"></a>
</p>
|说明|
|------------------|
|此分支为 DataEase v2 版本的开发分支。DataEase v2 正在快速迭代中,如是在生产环境部署 DataEase建议使用 v1.18.* 的最新稳定版本。|
<hr/>
## 什么是 DataEase
DataEase 是开源的数据可视化分析工具帮助用户快速分析数据并洞察业务趋势从而实现业务的改进与优化。DataEase 支持丰富的数据源连接,能够通过拖拉拽方式快速制作图表,并可以方便的与他人分享。

View File

@ -498,4 +498,26 @@ public class DatasetGroupManage {
geFullName(parent.getPid(), fullName);
}
}
public List<DatasetTableDTO> getDetailWithPerm(List<Long> ids) {
var result = new ArrayList<DatasetTableDTO>();
if (CollectionUtil.isNotEmpty(ids)) {
var dsList = coreDatasetGroupMapper.selectBatchIds(ids);
if (CollectionUtil.isNotEmpty(dsList)) {
dsList.forEach(ds -> {
DatasetTableDTO dto = new DatasetTableDTO();
BeanUtils.copyBean(dto, ds);
var fields = datasetTableFieldManage.listFieldsWithPermissions(ds.getId());
List<DatasetTableFieldDTO> dimensionList = fields.stream().filter(ele -> StringUtils.equalsIgnoreCase(ele.getGroupType(), "d")).toList();
List<DatasetTableFieldDTO> quotaList = fields.stream().filter(ele -> StringUtils.equalsIgnoreCase(ele.getGroupType(), "q")).toList();
Map<String, List<DatasetTableFieldDTO>> map = new LinkedHashMap<>();
map.put("dimensionList", dimensionList);
map.put("quotaList", quotaList);
dto.setFields(map);
result.add(dto);
});
}
}
return result;
}
}

View File

@ -1,6 +1,9 @@
package io.dataease.dataset.manage;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.dataease.api.chart.dto.ColumnPermissionItem;
import io.dataease.auth.bo.TokenUserBO;
import io.dataease.dataset.dao.auto.entity.CoreDatasetTableField;
import io.dataease.dataset.dao.auto.mapper.CoreDatasetGroupMapper;
import io.dataease.dataset.dao.auto.mapper.CoreDatasetTableFieldMapper;
@ -9,6 +12,7 @@ import io.dataease.datasource.provider.CalciteProvider;
import io.dataease.dto.dataset.DatasetTableFieldDTO;
import io.dataease.exception.DEException;
import io.dataease.i18n.Translator;
import io.dataease.utils.AuthUtils;
import io.dataease.utils.BeanUtils;
import io.dataease.utils.IDUtils;
import jakarta.annotation.Resource;
@ -18,9 +22,7 @@ import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -187,6 +189,20 @@ public class DatasetTableFieldManage {
return map;
}
public List<DatasetTableFieldDTO> listFieldsWithPermissions(Long id) {
List<DatasetTableFieldDTO> fields = selectByDatasetGroupId(id);
Map<String, ColumnPermissionItem> desensitizationList = new HashMap<>();
Long userId = AuthUtils.getUser() == null ? null : AuthUtils.getUser().getUserId();
List<DatasetTableFieldDTO> tmp = permissionManage
.filterColumnPermissions(fields, desensitizationList, id, userId)
.stream()
.sorted(Comparator.comparing(DatasetTableFieldDTO::getGroupType))
.toList();
tmp.forEach(ele -> ele.setDesensitized(desensitizationList.containsKey(ele.getDataeaseName())));
return tmp;
}
public List<DatasetTableFieldDTO> transDTO(List<CoreDatasetTableField> list) {
return list.stream().map(ele -> {
DatasetTableFieldDTO dto = new DatasetTableFieldDTO();

View File

@ -53,6 +53,11 @@ public class DatasetFieldServer implements DatasetTableApi {
return datasetTableFieldManage.listByDQ(id);
}
@Override
public List<DatasetTableFieldDTO> listFieldsWithPermissions(Long id) {
return datasetTableFieldManage.listFieldsWithPermissions(id);
}
@Override
public List<String> multFieldValuesForPermissions(@RequestBody MultFieldValuesRequest multFieldValuesRequest) throws Exception {
return datasetDataManage.getFieldEnum(multFieldValuesRequest.getFieldIds());

View File

@ -77,4 +77,10 @@ public class DatasetTreeServer implements DatasetTreeApi {
public List<SqlVariableDetails> getSqlParams(List<Long> ids) throws Exception {
return datasetGroupManage.getSqlParams(ids);
}
@Override
public List<DatasetTableDTO> detailWithPerm(List<Long> ids) throws Exception {
return datasetGroupManage.getDetailWithPerm(ids);
}
}

View File

@ -3748,7 +3748,7 @@ CREATE TABLE QRTZ_JOB_DETAILS
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME, JOB_NAME, JOB_GROUP)
);
SET FOREIGN_KEY_CHECKS = 0;
CREATE TABLE QRTZ_TRIGGERS
(
SCHED_NAME VARCHAR(120) NOT NULL,
@ -3827,9 +3827,7 @@ CREATE TABLE QRTZ_BLOB_TRIGGERS
PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
);
CREATE TABLE QRTZ_CALENDARS
(
@ -3896,9 +3894,7 @@ CREATE TABLE `visualization_background`
`base_url` varchar(255) DEFAULT NULL,
`url` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
);
INSERT INTO `visualization_background` (`id`, `name`, `classification`, `content`, `remark`, `sort`, `upload_time`,
`base_url`, `url`)
@ -3947,11 +3943,7 @@ CREATE TABLE `visualization_background_image`
`base_url` varchar(255) DEFAULT NULL,
`url` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
);
-- ----------------------------
-- Table structure for visualization_subject
@ -3959,7 +3951,7 @@ CREATE TABLE `visualization_background_image`
DROP TABLE IF EXISTS `visualization_subject`;
CREATE TABLE `visualization_subject`
(
`id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`id` varchar(50) NOT NULL,
`name` varchar(255) DEFAULT NULL COMMENT '主题名称',
`type` varchar(255) DEFAULT NULL COMMENT '主题类型 system 系统主题self 自定义主题',
`details` longtext COMMENT '主题内容',
@ -3973,11 +3965,7 @@ CREATE TABLE `visualization_subject`
`delete_time` bigint DEFAULT NULL COMMENT '删除时间',
`delete_by` bigint DEFAULT NULL COMMENT '删除人',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
);
commit;
DROP TABLE IF EXISTS `core_dataset_table_sql_log`;
@ -3991,9 +3979,7 @@ CREATE TABLE `core_dataset_table_sql_log`
`sql` longtext NOT NULL COMMENT '详细信息',
`status` varchar(45) DEFAULT NULL COMMENT '状态',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE utf8mb4_0900_ai_ci;
);
INSERT INTO `visualization_subject` (`id`, `name`, `type`, `details`, `delete_flag`, `cover_url`, `create_num`,
@ -4024,9 +4010,7 @@ CREATE TABLE `core_store`
`resource_type` int NOT NULL COMMENT '资源类型',
`time` bigint NOT NULL COMMENT '收藏时间',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_general_ci;
);
-- ----------------------------
-- Table structure for xpack_share
@ -4044,9 +4028,7 @@ CREATE TABLE `xpack_share`
`oid` bigint NOT NULL COMMENT '组织ID',
`type` int NOT NULL COMMENT '业务类型',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_general_ci;
);
-- ----------------------------
-- Table structure for xpack_setting_authentication
@ -4061,25 +4043,8 @@ CREATE TABLE `xpack_setting_authentication`
`sync_time` bigint NOT NULL COMMENT '同步时间',
`relational_ids` varchar(255) DEFAULT NULL COMMENT '相关的ID',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_general_ci;
);
/*
Navicat Premium Data Transfer
Source Server : de2-qa-123.56.90.236
Source Server Type : MySQL
Source Server Version : 80100
Source Host : 123.56.90.236:3306
Source Schema : dataease
Target Server Type : MySQL
Target Server Version : 80100
File Encoding : 65001
Date: 22/09/2023 00:30:08
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
@ -4093,14 +4058,12 @@ CREATE TABLE `visualization_link_jump`
`id` bigint NOT NULL,
`source_dv_id` bigint DEFAULT NULL COMMENT '源仪表板ID',
`source_view_id` bigint DEFAULT NULL COMMENT '源视图ID',
`link_jump_info` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '跳转信息',
`link_jump_info` varchar(4000) DEFAULT NULL COMMENT '跳转信息',
`checked` tinyint(1) DEFAULT NULL COMMENT '是否启用',
`copy_from` bigint DEFAULT NULL,
`copy_id` bigint DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_general_ci;
);
-- ----------------------------
-- Table structure for visualization_link_jump_info
@ -4110,19 +4073,17 @@ CREATE TABLE `visualization_link_jump_info`
(
`id` bigint NOT NULL,
`link_jump_id` bigint DEFAULT NULL COMMENT 'link jump ID',
`link_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '关联类型 inner 内部仪表板outer 外部链接',
`jump_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '跳转类型 _blank 新开页面 _self 当前窗口',
`link_type` varchar(255) DEFAULT NULL COMMENT '关联类型 inner 内部仪表板outer 外部链接',
`jump_type` varchar(255) DEFAULT NULL COMMENT '跳转类型 _blank 新开页面 _self 当前窗口',
`target_dv_id` bigint DEFAULT NULL COMMENT '关联仪表板ID',
`source_field_id` bigint DEFAULT NULL COMMENT '字段ID',
`content` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '内容 linkType = outer时使用',
`content` varchar(4000) DEFAULT NULL COMMENT '内容 linkType = outer时使用',
`checked` tinyint(1) DEFAULT NULL COMMENT '是否可用',
`attach_params` tinyint(1) DEFAULT NULL COMMENT '是否附加点击参数',
`copy_from` bigint DEFAULT NULL,
`copy_id` bigint DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_general_ci;
);
-- ----------------------------
-- Table structure for visualization_link_jump_target_view_info
@ -4138,9 +4099,7 @@ CREATE TABLE `visualization_link_jump_target_view_info`
`copy_from` bigint DEFAULT NULL,
`copy_id` bigint DEFAULT NULL,
PRIMARY KEY (`target_id`) USING BTREE
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_general_ci;
);
-- ----------------------------
-- Table structure for visualization_linkage
@ -4160,9 +4119,7 @@ CREATE TABLE `visualization_linkage`
`copy_from` bigint DEFAULT NULL,
`copy_id` bigint DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
);
-- ----------------------------
-- Table structure for visualization_linkage_field
@ -4178,16 +4135,11 @@ CREATE TABLE `visualization_linkage_field`
`copy_from` bigint DEFAULT NULL,
`copy_id` bigint DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
SET FOREIGN_KEY_CHECKS = 1;
);
ALTER TABLE `core_datasource`
ADD COLUMN `update_by` bigint NULL COMMENT '变更人' AFTER `update_time`;
DROP TABLE IF EXISTS `core_ds_finish_page`;
CREATE TABLE `core_ds_finish_page`
(
@ -4205,9 +4157,7 @@ CREATE TABLE `core_opt_recent`
`opt_type` int DEFAULT NULL COMMENT '1 新建 2 修改',
`time` bigint NOT NULL COMMENT '收藏时间',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_general_ci;
);
-- ----------------------------
-- Table structure for core_sys_setting
@ -4221,6 +4171,4 @@ CREATE TABLE `core_sys_setting`
`type` varchar(255) NOT NULL COMMENT '类型',
`sort` int NOT NULL DEFAULT '0' COMMENT '顺序',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_general_ci;
);

View File

@ -14,7 +14,7 @@ CREATE TABLE `visualization_template` (
`template_data` longtext COMMENT 'template 数据',
`dynamic_data` longtext COMMENT '预存数据',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='模板表';
) COMMENT='模板表';
-- ----------------------------
-- Table structure for visualization_template_category
@ -32,7 +32,7 @@ CREATE TABLE `visualization_template_category` (
`snapshot` longtext COMMENT '缩略图',
`template_type` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='模板表';
) COMMENT='模板表';
-- ----------------------------
-- Table structure for visualization_template_category_map
@ -43,7 +43,7 @@ CREATE TABLE `visualization_template_category_map` (
`category_id` varchar(255) DEFAULT NULL COMMENT '名称',
`template_id` varchar(255) DEFAULT NULL COMMENT '父级id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='模板表';
) COMMENT='模板表';
-- ----------------------------
-- Table structure for visualization_template_extend_data
@ -57,7 +57,7 @@ CREATE TABLE `visualization_template_extend_data` (
`copy_from` varchar(255) DEFAULT NULL,
`copy_id` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
);
BEGIN;
INSERT INTO `core_menu`

View File

@ -15,6 +15,7 @@ export interface Field {
extField: number
checked: boolean
fieldShortName: string
desensitized: boolean
}
export interface ComponentInfo {

View File

@ -154,6 +154,11 @@ export const getDsDetails = async (data): Promise<DatasetDetail[]> => {
return res?.data
})
}
export const getDsDetailsWithPerm = async (data): Promise<DatasetDetail[]> => {
return request.post({ url: '/datasetTree/detailWithPerm', data }).then(res => {
return res?.data
})
}
export const getSqlParams = async (data): Promise<ParamsDetail[]> => {
return request.post({ url: '/datasetTree/getSqlParams', data }).then(res => {
return res?.data
@ -175,6 +180,10 @@ export const multFieldValuesForPermissions = (data = {}) => {
return request.post({ url: '/datasetField/multFieldValuesForPermissions', data })
}
export const listFieldsWithPermissions = (datasetId: number) => {
return request.get({ url: '/datasetField/listWithPermissions/' + datasetId })
}
export const saveRowPermission = (data = {}) => {
return request.post({ url: '/dataset/rowPermissions/save', data })
}

View File

@ -7,7 +7,7 @@ import { useI18n } from '@/hooks/web/useI18n'
import { fieldType } from '@/utils/attr'
import { ElMessage } from 'element-plus-secondary'
import type { DatasetDetail } from '@/api/dataset'
import { getDsDetails, getSqlParams } from '@/api/dataset'
import { getDsDetailsWithPerm, getSqlParams, listFieldsWithPermissions } from '@/api/dataset'
import EmptyBackground from '@/components/empty-background/src/EmptyBackground.vue'
import { cloneDeep } from 'lodash-es'
import Select from './Select.vue'
@ -391,7 +391,7 @@ const init = (queryId: string) => {
}
const params = [...new Set(datasetFieldList.value.map(ele => ele.tableId).filter(ele => !!ele))]
if (!params.length) return
getDsDetails(params)
getDsDetailsWithPerm(params)
.then(res => {
res
.filter(ele => !!ele)
@ -438,7 +438,7 @@ const handleCondition = item => {
curComponent.value = conditions.value.find(ele => ele.id === item.id)
multiple.value = curComponent.value.multiple
if (!curComponent.value.dataset.fields.length) {
if (!curComponent.value.dataset.fields.length && curComponent.value.dataset.id) {
getOptions(curComponent.value.dataset.id, curComponent.value)
}
datasetFieldList.value.forEach(ele => {
@ -468,12 +468,8 @@ const handleCondition = item => {
}
const getOptions = (id, component) => {
getDsDetails([id]).then(res => {
res.forEach(ele => {
if (!ele) return
const { dimensionList, quotaList } = ele.fields
component.dataset.fields = [...dimensionList, ...quotaList]
})
listFieldsWithPermissions(id).then(res => {
component.dataset.fields = res.data
})
}
@ -840,8 +836,12 @@ defineExpose({
:key="ele.id"
:label="ele.name"
:value="ele.id"
:disabled="ele.desensitized"
>
<div class="flex-align-center icon">
<div
class="flex-align-center icon"
:title="ele.desensitized ? '脱敏字段,不能被设置为查询条件' : ''"
>
<el-icon>
<Icon
:name="`field_${fieldType[ele.deType]}`"
@ -990,8 +990,12 @@ defineExpose({
:key="ele.id"
:label="ele.name"
:value="ele.id"
:disabled="ele.desensitized"
>
<div class="flex-align-center icon">
<div
class="flex-align-center icon"
:title="ele.desensitized ? '脱敏字段,不能被设置为查询条件' : ''"
>
<el-icon>
<Icon
:name="`field_${fieldType[ele.deType]}`"

@ -1 +1 @@
Subproject commit e584ed4e9f88eac8de7bd31c74eb32e91eb9279b
Subproject commit 391d9aa251594c2b310cdb81847aa9cd9a808e41

View File

@ -3,6 +3,7 @@ package io.dataease.api.dataset;
import io.dataease.api.dataset.dto.MultFieldValuesRequest;
import io.dataease.api.dataset.engine.SQLFunctionDTO;
import io.dataease.dto.dataset.DatasetTableFieldDTO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@ -37,6 +38,9 @@ public interface DatasetTableApi {
@PostMapping("listByDQ/{id}")
Map<String, List<DatasetTableFieldDTO>> listByDQ(@PathVariable Long id);
@GetMapping ("listWithPermissions/{id}")
List<DatasetTableFieldDTO> listFieldsWithPermissions(@PathVariable Long id);
@PostMapping("multFieldValuesForPermissions")
List<String> multFieldValuesForPermissions(@RequestBody MultFieldValuesRequest multFieldValuesRequest) throws Exception;

View File

@ -72,4 +72,7 @@ public interface DatasetTreeApi {
@PostMapping("getSqlParams")
List<SqlVariableDetails> getSqlParams(@RequestBody List<Long> ids) throws Exception;
@PostMapping("detailWithPerm")
List<DatasetTableDTO> detailWithPerm(@RequestBody List<Long> ids) throws Exception;
}

View File

@ -121,4 +121,9 @@ public class DatasetTableFieldDTO implements Serializable {
* 字段short name
*/
private String fieldShortName;
}
/**
* 是否脱敏
*/
private Boolean desensitized;
}