Merge branch 'dev' into pr@dev@fix_batch_operation

This commit is contained in:
wisonic-s 2022-11-04 11:41:14 +08:00
commit bfcf491c0e
61 changed files with 493 additions and 210 deletions

View File

@ -378,7 +378,7 @@
<configuration>
<encoding>UTF-8</encoding>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>

View File

@ -15,9 +15,9 @@ public class HttpClientConfig {
private Map<String, String> header = new HashMap<>();
// 设置连接超时时间单位毫秒
private int connectTimeout = 5000;
private int connectTimeout = 30000;
// 设置从connect Manager获取Connection 超时时间单位毫秒这个属性是新加的属性因为目前版本是可以共享连接池的
private int connectionRequestTimeout = 5000;
private int connectionRequestTimeout = 30000;
// 请求获取数据的超时时间单位毫秒 如果访问一个接口多少时间内无法返回数据就直接放弃此次调用
private int socketTimeout = 60000;

View File

@ -67,7 +67,12 @@ public class DataSetTableTaskController {
@PostMapping("list/{goPage}/{pageSize}")
public Pager<List<DataSetTaskDTO>> list(@RequestBody DatasetTableTask datasetTableTask, @PathVariable int goPage, @PathVariable int pageSize) {
Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
return PageUtils.setPageInfo(page, dataSetTableTaskService.list(datasetTableTask));
Pager<List<DataSetTaskDTO>> listPager = PageUtils.setPageInfo(page, dataSetTableTaskService.list(datasetTableTask));
List<DataSetTaskDTO> listObject = listPager.getListObject();
for (DataSetTaskDTO dto : listObject) {
dataSetTableTaskLogService.lastExecStatus(dto);
}
return listPager;
}
@ApiOperation("分页查询")

View File

@ -14,4 +14,6 @@ public class TemplateCategory {
private String name;
private String slug;
private Integer priority;
}

View File

@ -0,0 +1,14 @@
package io.dataease.ext;
import io.dataease.plugins.common.base.domain.PanelAppTemplateWithBLOBs;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import java.util.List;
@Mapper
public interface ExtPanelAppTemplateMapper {
List<PanelAppTemplateWithBLOBs> queryBaseInfo(@Param("nodeType") String nodeType , @Param("pid") String pid);
}

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="io.dataease.ext.ExtPanelAppTemplateMapper">
<select id="queryBaseInfo" resultType="io.dataease.plugins.common.base.domain.PanelAppTemplateWithBLOBs">
select id, `name`, node_type, `level`, pid, version, icon, update_time, update_user, create_time,
create_user,snapshot,datasource_info from panel_app_template
where 1=1
<if test="pid != null">
and pid = #{pid}
</if>
<if test="nodeType != null">
and node_type = #{nodeType}
</if>
</select>
</mapper>

View File

@ -3,15 +3,15 @@
<mapper namespace="io.dataease.ext.HomeMapper">
<select id="queryStore" resultType="io.dataease.mobile.dto.HomeItemDTO">
select
s.panel_group_id as id,
g.name as title,
s.create_time as `time`
select
s.panel_group_id as id,
g.name as title,
s.create_time as `time`
from( SELECT GET_V_AUTH_MODEL_ID_P_USE_MOBILE ( #{userId}, 'panel' ) cids ) t, panel_store s
inner join panel_group g
on s.panel_group_id = g.id
on s.panel_group_id = g.id
where s.user_id = #{userId}
and FIND_IN_SET( g.id, cids )
and FIND_IN_SET( g.id, cids )
<if test="lastTime != null">
and #{lastTime} > s.create_time
</if>
@ -20,25 +20,32 @@
<select id="queryShare" resultType="io.dataease.mobile.dto.HomeItemShareDTO">
select
distinct(s.panel_group_id) as id,
g.name as title,
s.create_time as `time`,
u.nick_name,
u.user_id
distinct(s.panel_group_id) as id,
g.name as title,
s.create_time as `time`,
u.nick_name,
u.user_id
from panel_share s
inner join panel_group g
on s.panel_group_id = g.id
on s.panel_group_id = g.id
left join sys_user u on u.username = IFNULL(s.granter,g.create_by)
where
g.mobile_layout = 1 and (
( s.target_id = #{userId} and s.type = 0 ) or
( s.target_id = #{deptId} and s.type = 2 ) or
( s.target_id in
<foreach collection="roleIds" item="roleId" open='(' separator=',' close=')'>
#{roleId}
</foreach>
and s.type = 1 )
)
g.mobile_layout = 1 and (
( s.target_id = #{userId} and s.type = 0 )
<if test="deptId != null">
or ( s.target_id = #{deptId} and s.type = 2 )
</if>
<if test="roleIds != null">
or
( s.target_id in
<foreach collection="roleIds" item="roleId" open='(' separator=',' close=')'>
#{roleId}
</foreach>
and s.type = 1 )
</if>
)
<if test="lastTime != null">
and #{lastTime} > s.create_time
</if>
@ -46,6 +53,4 @@
</select>
</mapper>

View File

@ -11,7 +11,9 @@ import io.dataease.mobile.dto.HomeItemDTO;
import io.dataease.mobile.dto.HomeItemShareDTO;
import io.dataease.ext.HomeMapper;
import io.dataease.mobile.dto.HomeRequest;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
@ -47,7 +49,10 @@ public class HomeService {
List<Long> roleIds = user.getRoles().stream().map(CurrentRoleDto::getId).collect(Collectors.toList());
param.put("deptId", deptId);
param.put("roleIds", roleIds);
if (CollectionUtils.isNotEmpty(roleIds)) {
param.put("roleIds", roleIds);
}
if (null != request.getLastTime()) {
param.put("lastTime", request.getLastTime());
}

View File

@ -34,6 +34,8 @@ import java.util.stream.Collectors;
@Service("apiProvider")
public class ApiProvider extends Provider {
private static String path = "['%s']";
@Resource
private SystemParameterService systemParameterService;
@ -198,10 +200,10 @@ public class ApiProvider extends Provider {
handleStr(apiDefinition, response, fields, rootPath);
}
for (JSONObject field : fields) {
if(field.containsKey("children") && CollectionUtils.isNotEmpty(field.getJSONArray("children"))){
if (field.containsKey("children") && CollectionUtils.isNotEmpty(field.getJSONArray("children"))) {
field.put("disabled", false);
}
if(field.containsKey("children") && CollectionUtils.isEmpty(field.getJSONArray("children"))){
if (field.containsKey("children") && CollectionUtils.isEmpty(field.getJSONArray("children"))) {
field.put("disabled", true);
}
}
@ -238,14 +240,14 @@ public class ApiProvider extends Provider {
array.add(StringUtils.isNotEmpty(jsonObject.getString(s)) ? jsonObject.getString(s) : "");
o.put("value", array);
}
o.put("jsonPath", rootPath + "." + s);
o.put("jsonPath", rootPath + "." + String.format(path, s));
setProperty(apiDefinition, o, s);
if (!hasItem(apiDefinition, fields, o)) {
fields.add(o);
}
} else if (StringUtils.isNotEmpty(value) && value.startsWith("{")) {
List<JSONObject> children = new ArrayList<>();
handleStr(apiDefinition, jsonObject.getString(s), children, rootPath + "." + s);
handleStr(apiDefinition, jsonObject.getString(s), children, rootPath + "." + String.format(path, s));
JSONObject o = new JSONObject();
o.put("children", children);
o.put("childrenDataType", "OBJECT");
@ -256,7 +258,7 @@ public class ApiProvider extends Provider {
}
} else {
JSONObject o = new JSONObject();
o.put("jsonPath", rootPath + "." + s);
o.put("jsonPath", rootPath + "." + String.format(path, s));
setProperty(apiDefinition, o, s);
JSONArray array = new JSONArray();
array.add(StringUtils.isNotEmpty(jsonObject.getString(s)) ? jsonObject.getString(s) : "");

View File

@ -89,8 +89,8 @@ public class JdbcProvider extends DefaultJdbcProvider {
}
DatabaseMetaData databaseMetaData = connection.getMetaData();
String tableNamePattern = datasourceRequest.getTable();
if(datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.mysql.name())){
if(databaseMetaData.getDriverMajorVersion() < 8){
if (datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.mysql.name())) {
if (databaseMetaData.getDriverMajorVersion() < 8) {
tableNamePattern = String.format(MySQLConstants.KEYWORD_TABLE, tableNamePattern);
}
}
@ -98,29 +98,36 @@ public class JdbcProvider extends DefaultJdbcProvider {
while (resultSet.next()) {
String tableName = resultSet.getString("TABLE_NAME");
String database;
if (datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.pg.name()) ||datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.ck.name()) || datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.impala.name())) {
String schema = resultSet.getString("TABLE_SCHEM");
if (datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.pg.name()) || datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.ck.name())
|| datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.impala.name())) {
database = resultSet.getString("TABLE_SCHEM");
} else {
database = resultSet.getString("TABLE_CAT");
}
if(datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.pg.name())){
if (tableName.equals(datasourceRequest.getTable()) && database.equalsIgnoreCase(getDsSchema(datasourceRequest))) {
TableField tableField = getTableFiled(resultSet, datasourceRequest);
list.add(tableField);
}
}else {
if (database != null) {
if (tableName.equals(datasourceRequest.getTable()) && database.equalsIgnoreCase(getDatabase(datasourceRequest))) {
TableField tableField = getTableFiled(resultSet, datasourceRequest);
list.add(tableField);
}
} else {
if (tableName.equals(datasourceRequest.getTable())) {
TableField tableField = getTableFiled(resultSet, datasourceRequest);
list.add(tableField);
}
}
}
if (datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.pg.name())) {
if (tableName.equals(datasourceRequest.getTable()) && database.equalsIgnoreCase(getDsSchema(datasourceRequest))) {
TableField tableField = getTableFiled(resultSet, datasourceRequest);
list.add(tableField);
}
} else if (datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.sqlServer.name())) {
if (tableName.equals(datasourceRequest.getTable()) && database.equalsIgnoreCase(getDatabase(datasourceRequest)) && schema.equalsIgnoreCase(getDsSchema(datasourceRequest))) {
TableField tableField = getTableFiled(resultSet, datasourceRequest);
list.add(tableField);
}
} else {
if (database != null) {
if (tableName.equals(datasourceRequest.getTable()) && database.equalsIgnoreCase(getDatabase(datasourceRequest))) {
TableField tableField = getTableFiled(resultSet, datasourceRequest);
list.add(tableField);
}
} else {
if (tableName.equals(datasourceRequest.getTable())) {
TableField tableField = getTableFiled(resultSet, datasourceRequest);
list.add(tableField);
}
}
}
}
resultSet.close();
@ -165,9 +172,9 @@ public class JdbcProvider extends DefaultJdbcProvider {
} else {
String size = resultSet.getString("COLUMN_SIZE");
if (size == null) {
if(dbType.equals("JSON") && datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.mysql.name())){
if (dbType.equals("JSON") && datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.mysql.name())) {
tableField.setFieldSize(65535);
}else {
} else {
tableField.setFieldSize(1);
}
@ -176,7 +183,7 @@ public class JdbcProvider extends DefaultJdbcProvider {
}
}
}
if(StringUtils.isNotEmpty(tableField.getFieldType()) && tableField.getFieldType().equalsIgnoreCase("DECIMAL")){
if (StringUtils.isNotEmpty(tableField.getFieldType()) && tableField.getFieldType().equalsIgnoreCase("DECIMAL")) {
tableField.setAccuracy(Integer.valueOf(resultSet.getString("DECIMAL_DIGITS")));
}
return tableField;
@ -746,16 +753,16 @@ public class JdbcProvider extends DefaultJdbcProvider {
}
@Override
public void checkConfiguration(Datasource datasource)throws Exception{
if (StringUtils.isEmpty(datasource.getConfiguration())){
public void checkConfiguration(Datasource datasource) throws Exception {
if (StringUtils.isEmpty(datasource.getConfiguration())) {
throw new Exception("Datasource configuration is empty");
}
try {
JdbcConfiguration jdbcConfiguration = new Gson().fromJson(datasource.getConfiguration(), JdbcConfiguration.class);
if(jdbcConfiguration.getQueryTimeout() < 0){
throw new Exception("Querytimeout cannot be less than zero." );
if (jdbcConfiguration.getQueryTimeout() < 0) {
throw new Exception("Querytimeout cannot be less than zero.");
}
}catch (Exception e){
} catch (Exception e) {
throw new Exception("Invalid configuration: " + e.getMessage());
}

View File

@ -170,7 +170,7 @@ public class DataSetTableService {
datasetTableTask.setTableId(datasetTable.getId());
datasetTableTask.setRate(ScheduleType.SIMPLE.toString());
datasetTableTask.setType("all_scope");
datasetTableTask.setName(datasetTable.getName() + " 更新设置");
datasetTableTask.setName(datasetTable.getName() + " 更新设置-" + System.currentTimeMillis());
datasetTableTask.setEnd("0");
datasetTableTask.setStatus(TaskStatus.Underway.name());
datasetTableTask.setStartTime(System.currentTimeMillis());

View File

@ -10,6 +10,7 @@ import io.dataease.controller.request.dataset.DataSetTableRequest;
import io.dataease.controller.request.panel.PanelAppTemplateApplyRequest;
import io.dataease.controller.request.panel.PanelAppTemplateRequest;
import io.dataease.controller.request.panel.PanelGroupRequest;
import io.dataease.ext.ExtPanelAppTemplateMapper;
import io.dataease.plugins.common.base.domain.*;
import io.dataease.plugins.common.base.mapper.PanelAppTemplateMapper;
import io.dataease.plugins.common.constants.DatasetType;
@ -19,6 +20,7 @@ import io.dataease.service.dataset.DataSetGroupService;
import io.dataease.service.dataset.DataSetTableFieldsService;
import io.dataease.service.dataset.DataSetTableService;
import io.dataease.service.datasource.DatasourceService;
import io.dataease.service.staticResource.StaticResourceService;
import org.apache.commons.lang3.StringUtils;
import org.pentaho.di.core.util.UUIDUtil;
import org.springframework.context.annotation.Lazy;
@ -31,6 +33,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static io.dataease.commons.constants.StaticResourceConstants.UPLOAD_URL_PREFIX;
/**
* Author: wangjiahao
* Date: 2022/9/8
@ -40,6 +44,8 @@ import java.util.Map;
public class PanelAppTemplateService {
private static Gson gson = new Gson();
@Resource
private ExtPanelAppTemplateMapper extPanelAppTemplateMapper;
@Resource
private PanelAppTemplateMapper panelAppTemplateMapper;
@Resource
@ -59,16 +65,11 @@ public class PanelAppTemplateService {
private PanelViewService panelViewService;
@Resource
private DataSetGroupService dataSetGroupService;
@Resource
private StaticResourceService staticResourceService;
public List<PanelAppTemplateWithBLOBs> list(PanelAppTemplateRequest request) {
PanelAppTemplateExample example = new PanelAppTemplateExample();
if (StringUtils.isNotEmpty(request.getPid())) {
example.createCriteria().andPidEqualTo(request.getPid());
}
if (StringUtils.isNotEmpty(request.getNodeType())) {
example.createCriteria().andNodeTypeEqualTo(request.getNodeType());
}
return panelAppTemplateMapper.selectByExampleWithBLOBs(example);
return extPanelAppTemplateMapper.queryBaseInfo(request.getNodeType(),request.getPid());
}
public void save(PanelAppTemplateRequest request) {
@ -80,6 +81,12 @@ public class PanelAppTemplateService {
if (StringUtils.isEmpty(requestTemplate.getNodeType())) {
requestTemplate.setNodeType("template");
}
if(StringUtils.isNotEmpty(request.getSnapshot())){
//Store static resource into the server
String snapshotName = "app-template-" + request.getId() + ".jpeg";
staticResourceService.saveSingleFileToServe(snapshotName, request.getSnapshot().replace("data:image/jpeg;base64,", ""));
requestTemplate.setSnapshot("/" + UPLOAD_URL_PREFIX + '/' + snapshotName);
}
panelAppTemplateMapper.insertSelective(requestTemplate);
}
@ -90,6 +97,12 @@ public class PanelAppTemplateService {
request.setUpdateTime(System.currentTimeMillis());
PanelAppTemplateWithBLOBs requestTemplate = new PanelAppTemplateWithBLOBs();
BeanUtils.copyBean(requestTemplate, request);
//Store static resource into the server
if(StringUtils.isNotEmpty(request.getSnapshot())){
String snapshotName = "app-template-" + request.getId() + ".jpeg";
staticResourceService.saveSingleFileToServe(snapshotName, request.getSnapshot().replace("data:image/jpeg;base64,", ""));
requestTemplate.setSnapshot("/" + UPLOAD_URL_PREFIX + '/' + snapshotName);
}
panelAppTemplateMapper.updateByPrimaryKeySelective(requestTemplate);
}
@ -180,11 +193,26 @@ public class PanelAppTemplateService {
public Map<String, String> applyDatasetField(List<DatasetTableField> datasetTableFieldsInfo, Map<String, String> datasetsRealMap) {
Map<String, String> datasetFieldsRealMap = new HashMap<>();
for (DatasetTableField datasetTableField : datasetTableFieldsInfo) {
String oldId = datasetTableField.getId();
datasetTableField.setTableId(datasetsRealMap.get(datasetTableField.getTableId()));
datasetTableField.setId(null);
DatasetTableField newTableField = dataSetTableFieldsService.save(datasetTableField);
datasetFieldsRealMap.put(oldId, newTableField.getId());
if(datasetTableField.getExtField()!=2){
String oldId = datasetTableField.getId();
datasetTableField.setTableId(datasetsRealMap.get(datasetTableField.getTableId()));
datasetTableField.setId(null);
DatasetTableField newTableField = dataSetTableFieldsService.save(datasetTableField);
datasetFieldsRealMap.put(oldId, newTableField.getId());
}
}
//数据集计算字段替换
for (DatasetTableField datasetTableField : datasetTableFieldsInfo) {
if(datasetTableField.getExtField()==2){
String oldId = datasetTableField.getId();
datasetTableField.setTableId(datasetsRealMap.get(datasetTableField.getTableId()));
datasetTableField.setId(null);
datasetFieldsRealMap.forEach((k, v) -> {
datasetTableField.setOriginName(datasetTableField.getOriginName().replaceAll(k, v));
});
DatasetTableField newTableField = dataSetTableFieldsService.save(datasetTableField);
datasetFieldsRealMap.put(oldId, newTableField.getId());
}
}
return datasetFieldsRealMap;
}

View File

@ -11,6 +11,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
* Author: wangjiahao
@ -20,19 +21,26 @@ import java.util.List;
@Service
public class PanelGroupExtendDataService {
private final static String transDataKey = "data" + "s";
@Resource
private PanelGroupExtendDataMapper panelGroupExtendDataMapper;
public ChartViewDTO getChartDataInfo(String viewId,ChartViewDTO view){
public ChartViewDTO getChartDataInfo(String viewId, ChartViewDTO view) {
Gson gson = new Gson();
PanelGroupExtendDataExample extendDataExample = new PanelGroupExtendDataExample();
extendDataExample.createCriteria().andViewIdEqualTo(viewId);
List<PanelGroupExtendData> extendDataList = panelGroupExtendDataMapper.selectByExampleWithBLOBs(extendDataExample);
if(CollectionUtils.isNotEmpty(extendDataList)){
ChartViewDTO chartViewTemplate = gson.fromJson(extendDataList.get(0).getViewDetails(),ChartViewDTO.class);
List<PanelGroupExtendData> extendDataList = panelGroupExtendDataMapper.selectByExampleWithBLOBs(extendDataExample);
if (CollectionUtils.isNotEmpty(extendDataList)) {
ChartViewDTO chartViewTemplate = gson.fromJson(extendDataList.get(0).getViewDetails(), ChartViewDTO.class);
Map<String, Object> dataInfo = chartViewTemplate.getData();
if (dataInfo.get(transDataKey) != null) {
dataInfo.put("data", dataInfo.get(transDataKey));
dataInfo.remove(transDataKey);
}
view.setData(chartViewTemplate.getData());
}else{
DataEaseException.throwException("模板缓存数据中未获取指定视图数据:"+viewId);
} else {
DataEaseException.throwException("模板缓存数据中未获取指定视图数据:" + viewId);
}
return view;
}

View File

@ -40,6 +40,7 @@ import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.pentaho.di.core.util.UUIDUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -621,9 +622,9 @@ public class PanelGroupService {
List<String[]> details = request.getDetails();
Integer[] excelTypes = request.getExcelTypes();
details.add(0, request.getHeader());
HSSFWorkbook wb = new HSSFWorkbook();
Workbook wb = new XSSFWorkbook();
//明细sheet
HSSFSheet detailsSheet = wb.createSheet("数据");
Sheet detailsSheet = wb.createSheet("数据");
//给单元格设置样式
CellStyle cellStyle = wb.createCellStyle();
@ -641,11 +642,11 @@ public class PanelGroupService {
if (CollectionUtils.isNotEmpty(details)) {
for (int i = 0; i < details.size(); i++) {
HSSFRow row = detailsSheet.createRow(i);
Row row = detailsSheet.createRow(i);
String[] rowData = details.get(i);
if (rowData != null) {
for (int j = 0; j < rowData.length; j++) {
HSSFCell cell = row.createCell(j);
Cell cell = row.createCell(j);
if (i == 0) {// 头部
cell.setCellValue(rowData[j]);
cell.setCellStyle(cellStyle);
@ -669,14 +670,14 @@ public class PanelGroupService {
}
if (StringUtils.isNotEmpty(snapshot)) {
//截图sheet 1px 2.33dx 0.48 dy 8*24 个单元格
HSSFSheet snapshotSheet = wb.createSheet("图表");
Sheet snapshotSheet = wb.createSheet("图表");
short reDefaultRowHeight = (short) Math.round(request.getSnapshotHeight() * 3.5 / 8);
int reDefaultColumnWidth = (int) Math.round(request.getSnapshotWidth() * 0.25 / 24);
snapshotSheet.setDefaultColumnWidth(reDefaultColumnWidth);
snapshotSheet.setDefaultRowHeight(reDefaultRowHeight);
//画图的顶级管理器一个sheet只能获取一个一定要注意这点i
HSSFPatriarch patriarch = snapshotSheet.createDrawingPatriarch();
Drawing patriarch = snapshotSheet.createDrawingPatriarch();
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, reDefaultColumnWidth, reDefaultColumnWidth, (short) 0, 0, (short) 8, 24);
anchor.setAnchorType(ClientAnchor.AnchorType.DONT_MOVE_DO_RESIZE);
patriarch.createPicture(anchor, wb.addPicture(Base64Utils.decodeFromString(snapshot.replace(DATA_URL_TITLE, "")), HSSFWorkbook.PICTURE_TYPE_JPEG));

View File

@ -17,6 +17,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
@ -76,7 +77,7 @@ public class TemplateMarketService {
String resultStr = marketGet(basicInfo.getTemplateMarketUlr()+CATEGORIES_API,basicInfo.getTemplateAccessKey());
List<TemplateCategory> categories = JSONObject.parseObject(resultStr).getJSONArray("data").toJavaList(TemplateCategory.class);
if(CollectionUtils.isNotEmpty(categories)){
return categories.stream().map(TemplateCategory :: getName).collect(Collectors.toList());
return categories.stream().sorted(Comparator.comparing(TemplateCategory::getPriority)).map(TemplateCategory :: getName).collect(Collectors.toList());
}else{
return null;
}

View File

@ -136,7 +136,7 @@ INSERT INTO `sys_auth` (`id`, `auth_source`, `auth_source_type`, `auth_target`,
DROP FUNCTION IF EXISTS `GET_V_AUTH_MODEL_WITH_CHILDREN`;
delimiter ;;
CREATE FUNCTION `GET_V_AUTH_MODEL_WITH_CHILDREN`(parentId longtext,modelType varchar(255))
RETURNS longtext CHARSET utf8mb4
RETURNS longtext CHARSET utf8mb4 COLLATE utf8mb4_general_ci
READS SQL DATA
BEGIN
@ -176,7 +176,7 @@ delimiter ;
DROP FUNCTION IF EXISTS `GET_V_AUTH_MODEL_WITH_PARENT`;
delimiter ;;
CREATE FUNCTION `GET_V_AUTH_MODEL_WITH_PARENT`(childrenId longtext,modelType varchar(255))
RETURNS longtext CHARSET utf8mb4
RETURNS longtext CHARSET utf8mb4 COLLATE utf8mb4_general_ci
READS SQL DATA
BEGIN

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -1,7 +1,7 @@
\u4E2A\u4EBA\u4FE1\u606F=Personal Information
\u4EEA\u8868\u677F=Dashboard
\u6A21\u677F\u5E02\u573A=Template Market
\u5E94\u7528\u5E02\u573A=App Market
\u5E94\u7528=Application
\u5E94\u7528\u7BA1\u7406=Applications
\u4FEE\u6539\u5BC6\u7801=Change Password
\u521B\u5EFA\u7528\u6237=Create User

View File

@ -1,7 +1,7 @@
\u4E2A\u4EBA\u4FE1\u606F=\u4E2A\u4EBA\u4FE1\u606F
\u4EEA\u8868\u677F=\u4EEA\u8868\u677F
\u6A21\u677F\u5E02\u573A=\u6A21\u677F\u5E02\u573A
\u5E94\u7528\u5E02\u573A=\u5E94\u7528\u5E02\u573A
\u5E94\u7528=\u5E94\u7528
\u5E94\u7528\u7BA1\u7406=\u5E94\u7528\u7BA1\u7406
\u4FEE\u6539\u5BC6\u7801=\u4FEE\u6539\u5BC6\u7801
\u521B\u5EFA\u7528\u6237=\u521B\u5EFA\u7528\u6237

View File

@ -1,7 +1,7 @@
\u4E2A\u4EBA\u4FE1\u606F=\u500B\u4EBA\u4FE1\u606F
\u4EEA\u8868\u677F=\u5100\u8868\u677F
\u6A21\u677F\u5E02\u573A=\u6A21\u677F\u5E02\u5834
\u5E94\u7528\u5E02\u573A=\u5E94\u7528\u5E02\u5834
\u5E94\u7528=\u5E94\u7528
\u5E94\u7528\u7BA1\u7406=\u5E94\u7528\u7BA1\u7406
\u4FEE\u6539\u5BC6\u7801=\u4FEE\u6539\u5BC6\u78BC
\u521B\u5EFA\u7528\u6237=\u5275\u5EFA\u7528\u6236

View File

@ -16,10 +16,13 @@ export function proxyInitPanelData(panelId, proxy, callback) {
name: response.data.name,
privileges: response.data.privileges,
proxy: proxy.userId,
sourcePanelName: response.data.sourcePanelName,
status: response.data.status,
createBy: response.data.createBy,
createTime: response.data.createTime,
creatorName: response.data.creatorName,
updateBy: response.data.updateBy,
updateName: response.data.updateName,
updateTime: response.data.updateTime
})
// 刷新联动信息

View File

@ -34,7 +34,7 @@
:style="{'height': panelHeight + 'px'}"
>
<Preview
:component-data="componentData"
:component-data="mainCanvasComponentData"
:canvas-style-data="canvasStyleData"
:panel-info="panelInfo"
:show-position="showPosition"
@ -85,6 +85,8 @@ export default {
},
data() {
return {
componentData: [],
canvasId: 'canvas-main',
visible: false,
placement: 'bottom',
transition: 'el-zoom-in-top',
@ -100,6 +102,9 @@ export default {
}
},
computed: {
mainCanvasComponentData() {
return this.componentData.filter(item => item.canvasId === this.canvasId)
},
popperClass() {
const _c = 'el-view-select-popper ' + this.popoverClass
return this.disabled ? _c + ' disabled ' : _c
@ -148,6 +153,7 @@ export default {
panelDataPrepare(JSON.parse(response.data.panelData), JSON.parse(response.data.panelStyle), rsp => {
this.viewLoaded = true
this.componentData = rsp.componentData
this.$store.commit('setPreviewComponentData', this.componentData)
this.canvasStyleData = rsp.componentStyle
this.loadOptions()
})

View File

@ -262,12 +262,22 @@ export default {
this._updateH()
this.$nextTick(() => {
on(document, 'mouseup', this._popoverHideFun)
this.bindScroll()
})
},
beforeDestroy() {
off(document, 'mouseup', this._popoverHideFun)
this.unbindScroll()
},
methods: {
bindScroll() {
window.onmousewheel = this._popoverHideFun
on(document, 'DOMMouseScroll', this._popoverHideFun)
},
unbindScroll() {
window.onmousewheel = null
off(document, 'DOMMouseScroll', this._popoverHideFun)
},
showPopover() {
this.$nextTick(() => {
this.$refs.input.focus()

View File

@ -6,6 +6,7 @@
<div
id="main-attr"
style="position: relative;"
@mousedown="mouseDown"
>
<div
v-if="attrShow('textAlign')"
@ -658,6 +659,9 @@ export default {
},
methods: {
mouseDown(e) {
e.stopPropagation()
},
init() {
if (this.styleInfo['opacity']) {
this.innerOpacity = this.styleInfo['opacity'] * 100

View File

@ -173,7 +173,7 @@
:append-to-body="true"
:destroy-on-close="true"
>
<UserViewMobileDialog
<user-view-mobile-dialog
v-if="mobileChartDetailsVisible"
:canvas-style-data="canvasStyleData"
:chart="showChartInfo"
@ -211,10 +211,11 @@ import DeRichTextView from '@/components/canvas/custom-component/DeRichTextView'
import Vue from 'vue'
import { formatterItem, valueFormatter } from '@/views/chart/chart/formatter'
import UserViewDialog from '@/components/canvas/custom-component/UserViewDialog'
import UserViewMobileDialog from '@/components/canvas/custom-component/UserViewMobileDialog'
export default {
name: 'UserView',
components: { UserViewDialog, DeRichTextView, LabelNormalText, PluginCom, ChartComponentS2, EditBarView, ChartComponent, TableNormal, LabelNormal, DrillPath, ChartComponentG2 },
components: { UserViewMobileDialog, UserViewDialog, DeRichTextView, LabelNormalText, PluginCom, ChartComponentS2, EditBarView, ChartComponent, TableNormal, LabelNormal, DrillPath, ChartComponentG2 },
props: {
canvasId: {
type: String,
@ -817,7 +818,6 @@ export default {
this.showChartInfo = this.chart
this.showChartTableInfo = tableChart
this.showChartInfoType = params.openType
this.chartDetailsVisible = true
if (this.terminal === 'pc') {
this.chartDetailsVisible = true
} else {

View File

@ -108,6 +108,8 @@ export default {
Vue.set(newView, 'needAdaptor', needAdaptor)
newView.id = uuid.v1()
newView.propValue.viewId = res.data
newView['canvasId'] = 'canvas-main'
newView['canvasPid'] = '0'
if (newView.filters && newView.filters.length) {
newView.filters = []
}

View File

@ -231,6 +231,10 @@ export function imgUrlTrans(url) {
}
}
export function getNowCanvasComponentData(canvasId) {
return store.state.componentData.filter(item => item.canvasId === canvasId)
export function getNowCanvasComponentData(canvasId, showPosition) {
if (showPosition && (showPosition.includes('email-task') || showPosition.includes('multiplexing'))) {
return store.state.previewComponentData.filter(item => item.canvasId === canvasId)
} else {
return store.state.componentData.filter(item => item.canvasId === canvasId)
}
}

View File

@ -1,6 +1,7 @@
<template>
<button
class="de-button"
type="button"
:disabled="buttonDisabled || loading"
:class="[
type ? 'de-button--' + type : '',

View File

@ -24,7 +24,7 @@
<span>{{ $t('denumberrange.split_placeholder') }}</span>
<el-form-item
prop="max"
style="padding-right: 0px;width: calc(50% - 6px) !important;"
style="padding-right: 0px;width: calc(50% - 4px) !important;"
>
<el-input
ref="de-number-range-max"

View File

@ -3,6 +3,10 @@
class="de-tabs-div"
:class="headClass"
>
<div
v-if="maskShow"
class="frame-mask edit-mask"
/>
<dataease-tabs
v-model="activeTabName"
type="card"
@ -76,6 +80,7 @@
:canvas-id="element.id+'-'+item.name"
:panel-info="panelInfo"
:in-screen="true"
:show-position="showPosition"
/>
</div>
@ -197,7 +202,7 @@
</el-dialog>
<text-attr
v-if="showAttr && curComponent.canvasId !== 'canvas-main'"
v-if="showAttr && curComponent.canvasId === activeCanvasId"
:canvas-id="curComponent.canvasId"
:scroll-left="scrollLeft"
:scroll-top="scrollTop"
@ -293,6 +298,12 @@ export default {
}
},
computed: {
activeCanvasId() {
return this.element.id + '-' + this.activeTabName
},
maskShow() {
return Boolean(this.$store.state.dragComponentInfo)
},
titleStyle() {
return {
fontSize: (this.element.style.fontSize || 16) + 'px'
@ -344,16 +355,32 @@ export default {
'pcComponentData'
]),
fontColor() {
return this.element && this.element.style && this.element.style.headFontColor || 'none'
if (this.element && this.element.style && this.element.style.headFontColor && typeof this.element.style.headFontColor === 'string') {
return this.element.style.headFontColor
} else {
return 'none'
}
},
activeColor() {
return this.element && this.element.style && this.element.style.headFontActiveColor || 'none'
if (this.element && this.element.style && this.element.style.headFontActiveColor && typeof this.element.style.headFontActiveColor === 'string') {
return this.element.style.headFontActiveColor
} else {
return 'none'
}
},
borderColor() {
return this.element && this.element.style && this.element.style.headBorderColor || 'none'
if (this.element && this.element.style && this.element.style.headBorderColor && typeof this.element.style.headBorderColor === 'string') {
return this.element.style.headBorderColor
} else {
return 'none'
}
},
borderActiveColor() {
return this.element && this.element.style && this.element.style.headBorderActiveColor || 'none'
if (this.element && this.element.style && this.element.style.headBorderActiveColor && typeof this.element.style.headBorderActiveColor === 'string') {
return this.element.style.headBorderActiveColor
} else {
return 'none'
}
},
titleValid() {
return !!this.textarea && !!this.textarea.trim()
@ -431,7 +458,7 @@ export default {
if (this.mobileLayoutStatus) {
return this.pcComponentData.filter(item => item.canvasId === tabCanvasId)
} else {
return getNowCanvasComponentData(tabCanvasId)
return getNowCanvasComponentData(tabCanvasId, this.showPosition)
}
},
setContentThemeStyle() {
@ -642,20 +669,40 @@ export default {
.canvas_move_in {
border-color: blueviolet;
}
::v-deep .el-tabs__nav{
::v-deep .el-tabs__nav {
width: 100%;
}
.tab-head-left ::v-deep .el-tabs__nav{
.tab-head-left ::v-deep .el-tabs__nav {
width: 100%;
text-align: left;
}
.tab-head-right ::v-deep .el-tabs__nav{
.tab-head-right ::v-deep .el-tabs__nav {
width: 100%;
text-align: right;
}
.tab-head-center ::v-deep .el-tabs__nav{
.tab-head-center ::v-deep .el-tabs__nav {
width: 100%;
text-align: center;
}
.frame-mask {
display: flex;
opacity: 0;
position:absolute;
top:0px;
z-index: 1;
display: flex;
align-items: center;
justify-content: center;
}
.edit-mask{
left: 0px;
height: 100%!important;
width: 100% !important;
}
</style>

View File

@ -24,8 +24,7 @@ const dialogPanel = {
const drawPanel = {
type: 'custom',
style: {
width: 500,
// height: 45.5,
width: 300,
height: 90,
fontSize: 14,
fontWeight: 500,

View File

@ -2629,6 +2629,7 @@ export default {
'I18N_USER_TEMPLATE_ERROR': 'Template file error',
'i18n_max_user_import_size': 'File size exceeds 10M',
app_template: {
execution_time: 'Execution time',
app_manager: 'Application management',
app_upload: 'Upload app',
no_apps: 'No apps',

View File

@ -2630,6 +2630,7 @@ export default {
'I18N_USER_TEMPLATE_ERROR': '模版錯誤',
'i18n_max_user_import_size': '文件最大不能超過10M',
app_template: {
execution_time: '执行时间',
app_manager: '應用管理',
app_upload: '上傳應用',
no_apps: '暫無應用',

View File

@ -2630,6 +2630,7 @@ export default {
'I18N_USER_TEMPLATE_ERROR': '模版错误',
'i18n_max_user_import_size': '文件最大不能超过10M',
app_template: {
execution_time: '执行时间',
app_manager: '应用管理',
app_upload: '上传应用',
no_apps: '暂无应用',

View File

@ -152,7 +152,8 @@ const data = {
width: 0,
height: 0
},
previewVisible: false
previewVisible: false,
previewComponentData: []
},
mutations: {
...animation.mutations,
@ -189,6 +190,14 @@ const data = {
state.canvasStyleData = style
},
setComponentFromList(state, playload) {
state.componentData.some((ele, index) => {
if (ele.id !== playload.id) return false
state.componentData.splice(index, 1, playload)
return true
})
},
setCurComponent(state, { component, index }) {
// 当前视图操作状态置空
if (component) {
@ -242,7 +251,9 @@ const data = {
setComponentData(state, componentData = []) {
Vue.set(state, 'componentData', componentData)
},
setPreviewComponentData(state, previewComponentData = []) {
Vue.set(state, 'previewComponentData', previewComponentData)
},
setComponentViewsData(state, componentViewsData = {}) {
Vue.set(state, 'componentViewsData', componentViewsData)
},
@ -639,6 +650,13 @@ const data = {
},
addCurMultiplexingComponent(state, { component, componentId }) {
if (componentId) {
if (component.type === 'custom-button' && component.serviceName === 'buttonSureWidget') {
const copyComponent = deepCopy(component)
copyComponent.options.attrs.customRange = false
copyComponent.options.attrs.filterIds = []
state.curMultiplexingComponents[componentId] = copyComponent
return
}
state.curMultiplexingComponents[componentId] = component
}
},

View File

@ -19,7 +19,10 @@
style="cursor: default;display: block;"
>
<div style="padding:6px 4px 0;margin: 0;">
<chart-title-update :chart-info="chartInfo" />
<chart-title-update
:title-class="title_class"
:chart-info="chartInfo"
/>
<title-remark
v-if="remarkCfg.show"
style="text-shadow: none!important;margin-left: 4px;"

View File

@ -19,7 +19,10 @@
style="cursor: default;display: block;"
>
<div style="padding:6px 4px 0;margin: 0;">
<chart-title-update :chart-info="chartInfo" />
<chart-title-update
:title-class="title_class"
:chart-info="chartInfo"
/>
<title-remark
v-if="remarkCfg.show"
style="text-shadow: none!important;margin-left: 4px;"
@ -480,13 +483,13 @@ export default {
height:100%;
}
.table-dom-info-drill{
height:calc(100% - 36px - 12px);
height:calc(100% - 36px - 24px);
}
.table-dom-info-drill-pull{
height:calc(100% - 12px);
height:calc(100% - 24px);
}
.table-dom-normal-drill{
height:calc(100% - 12px);
height:calc(100% - 24px);
}
.table-page{
display: flex;
@ -504,6 +507,7 @@ export default {
font-size: 12px;
color: #606266;
white-space:nowrap;
padding-left: 8px;
}
.page-style ::v-deep .el-input__inner{
height: 24px;

View File

@ -1,17 +1,33 @@
<template>
<el-input
<div
v-if="chartTitleEditer"
ref="chartTitle"
v-model.lazy="chartTitleUpdate"
v-clickoutside="lostFocus"
clearable
type="text"
class="chart-input-title"
@blur="changeEditStatus"
/>
class="ipnut-wrap"
>
<input
ref="chartTitle"
v-model="chartTitleUpdate"
type="text"
:style="inputStyle"
class="chart-input-title"
@blur="changeEditStatus"
>
<i
v-if="showClose"
class="el-icon-circle-close"
@mousedown.prevent
@click="chartTitleUpdate = ''"
/>
</div>
<p
v-else
style="overflow: hidden;white-space: pre;text-overflow: ellipsis;display: inline;min-width: 30px"
style="
overflow: hidden;
white-space: pre;
text-overflow: ellipsis;
display: inline;
min-width: 30px;
"
@click.stop="handleTitleEditer"
>{{ chart.title }}</p>
</template>
@ -32,13 +48,18 @@ export default {
chartInfo: {
type: Object,
default: () => {}
},
titleClass: {
type: Object,
default: () => {}
}
},
data() {
return {
chartTitleEditer: false,
chartTitleUpdate: '',
chart: {}
chart: {},
showClose: false
}
},
computed: {
@ -48,6 +69,10 @@ export default {
...mapState(['mobileLayoutStatus', 'previewVisible']),
panelInfo() {
return this.$store.state.panel.panelInfo
},
inputStyle() {
const { fontSize, color, fontWeight, fontStyle, fontFamily } = this.titleClass
return { fontSize, color, fontWeight, fontStyle, fontFamily, height: fontSize }
}
},
watch: {
@ -58,6 +83,9 @@ export default {
},
immediate: true,
deep: true
},
chartTitleUpdate(val) {
this.showClose = !!val
}
},
methods: {
@ -274,13 +302,17 @@ export default {
},
lostFocus() {
this.chartTitleEditer = false
this.showClose = false
},
handleTitleEditer() {
if (
this.mainActiveName !== 'PanelEdit' ||
this.mobileLayoutStatus ||
this.previewVisible
) { return }
) {
return
}
this.showClose = true
this.chartTitleEditer = true
this.chartTitleUpdate = this.chart.title
this.$nextTick(() => {
@ -322,15 +354,38 @@ export default {
? JSON.parse(chartView.customFilter)
: {}
chartView.senior = chartView.senior ? JSON.parse(chartView.senior) : {}
chartView.customStyle.text.title = this.chartTitleUpdate
this.$store.commit('recordViewEdit', {
viewId: this.chart.id,
hasEdit: true
})
const view = JSON.parse(JSON.stringify(chartView))
view.xaxis = JSON.stringify(chartView.xaxis)
view.viewFields = JSON.stringify(chartView.viewFields)
view.xaxisExt = JSON.stringify(chartView.xaxisExt)
view.yaxis = JSON.stringify(chartView.yaxis)
view.yaxisExt = JSON.stringify(chartView.yaxisExt)
view.extStack = JSON.stringify(chartView.extStack)
view.drillFields = JSON.stringify(chartView.drillFields)
view.extBubble = JSON.stringify(chartView.extBubble)
view.customAttr = JSON.stringify(chartView.customAttr)
view.customStyle = JSON.stringify(chartView.customStyle)
view.customFilter = JSON.stringify(chartView.customFilter)
view.senior = JSON.stringify(chartView.senior)
view.title = this.chartTitleUpdate
view.name = this.chartTitleUpdate
view.stylePriority = chartView.stylePriority
const viewSave = this.buildParam(chartView, true, 'chart', false, false)
if (!viewSave) return
viewEditSave(this.panelInfo.id, viewSave).then(() => {
this.chart.title = this.chartTitleUpdate
bus.$emit('aside-set-title', this.chart.title)
})
this.$store.commit('recordViewEdit', {
viewId: this.chart.id,
hasEdit: true
bus.$emit('view-in-cache', {
type: 'styleChange',
viewId: chartView.id,
viewInfo: view
})
})
}
@ -339,7 +394,17 @@ export default {
</script>
<style scoped lang="scss">
::v-deep.chart-input-title {
.ipnut-wrap {
min-width: 20%;
max-width: 50%;
display: flex;
align-items: center;
i {
cursor: pointer;
font-size: 12px;
}
}
.chart-input-title {
word-break: break-word;
font: 12px / 1.231 -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Arial,
'Microsoft YaHei', 'PingFang SC', sans-serif, 'Segoe UI Symbol';
@ -352,31 +417,16 @@ export default {
line-height: 26px;
padding-left: 10px;
padding-right: 10px;
background: transparent;
position: relative;
outline: none;
z-index: 5;
color: #182b50;
font-weight: 400;
font-family: inherit;
border: none;
background: transparent;
border-width: 0px 0px 1px;
border-image: initial;
border-bottom: 1px solid rgb(200, 203, 204);
z-index: 2;
height: 21px;
min-width: 20%;
max-width: 50%;
.el-input__inner {
height: 21px;
font-size: 12px;
color: #182b50;
font-weight: 400;
font-family: inherit;
border-radius: 0;
border: none;
line-height: 21px;
background: transparent;
}
.el-input__suffix {
.el-input__icon {
line-height: 21px;
}
}
}
</style>

View File

@ -11,7 +11,10 @@
style="cursor: default;display: block;"
>
<div>
<chart-title-update :chart-info="chartInfo" />
<chart-title-update
:title-class="title_class"
:chart-info="chartInfo"
/>
<title-remark
v-if="chart.render && chart.render === 'antv' && remarkCfg.show"
style="text-shadow: none!important;margin-left: 4px;"

View File

@ -18,7 +18,10 @@
style="cursor: default;display: block;"
>
<div>
<chart-title-update :chart-info="chartInfo" />
<chart-title-update
:title-class="title_class"
:chart-info="chartInfo"
/>
<title-remark
v-if="chart.render && chart.render === 'antv' && remarkCfg.show"
style="text-shadow: none!important;margin-left: 4px;"

View File

@ -50,8 +50,10 @@
<template
slot="header"
slot-scope="scope"
>
<el-input
:id="scope.$index"
v-model="keyWord"
size="mini"
placeholder="输入关键字搜索"

View File

@ -1854,11 +1854,11 @@ export default {
},
methods: {
setTitle(val) {
this.chart.name = val
this.chart.title = val
this.view.name = val
this.view.title = val
setTitle(title) {
this.view.customStyle.text = { ...this.view.customStyle.text, title }
this.view.title = title
this.view.name = title
this.calcStyle()
},
resetChartData() {
this.getChart(this.param.id)

View File

@ -26,6 +26,7 @@
@onChangeSplitForm="onChangeSplitForm"
@onTextChange="onTextChange"
@onLegendChange="onLegendChange"
@onMarginChange="onMarginChange"
/>
<el-row v-else>
<div class="view-selected-message-class">
@ -99,6 +100,9 @@ export default {
onLegendChange(val) {
this.batchOptChange('customStyle', 'legend', val)
},
onMarginChange(val) {
this.batchOptChange('customStyle', 'margin', val)
},
batchOptChange(custom, property, value) {
this.$store.commit('setChangeProperties', {
'custom': custom,

View File

@ -270,12 +270,12 @@ export default {
}
.info-title {
font-size: 12px;
color: var(--deTextPrimary, #1f2329);
margin-bottom: 4px !important;
color: var(--deTextSecondary, #646a73);
}
.info-content {
font-size: 14px;
color: var(--deTextSecondary, #646a73);
color: var(--deTextPrimary, #1f2329);
}
}

View File

@ -211,16 +211,16 @@
/>
</span>
</span>
<el-input
v-if="scope.row.deType === 1"
v-model="scope.row.dateFormat"
:placeholder="$t('dataset.date_format')"
size="small"
class="input-type"
:disabled="!hasDataPermission('manage', param.privileges)"
@blur="saveEdit(scope.row)"
@keyup.enter.native="saveEdit(scope.row)"
/>
<!-- <el-input-->
<!-- v-if="scope.row.deType === 1"-->
<!-- v-model="scope.row.dateFormat"-->
<!-- :placeholder="$t('dataset.date_format')"-->
<!-- size="small"-->
<!-- class="input-type"-->
<!-- :disabled="!hasDataPermission('manage', param.privileges)"-->
<!-- @blur="saveEdit(scope.row)"-->
<!-- @keyup.enter.native="saveEdit(scope.row)"-->
<!-- />-->
</template>
</el-table-column>
<el-table-column
@ -548,16 +548,16 @@
/>
</span>
</span>
<el-input
v-if="scope.row.deType === 1"
v-model="scope.row.dateFormat"
:placeholder="$t('dataset.date_format')"
size="small"
class="input-type"
:disabled="!hasDataPermission('manage', param.privileges)"
@blur="saveEdit(scope.row)"
@keyup.enter.native="saveEdit(scope.row)"
/>
<!-- <el-input-->
<!-- v-if="scope.row.deType === 1"-->
<!-- v-model="scope.row.dateFormat"-->
<!-- :placeholder="$t('dataset.date_format')"-->
<!-- size="small"-->
<!-- class="input-type"-->
<!-- :disabled="!hasDataPermission('manage', param.privileges)"-->
<!-- @blur="saveEdit(scope.row)"-->
<!-- @keyup.enter.native="saveEdit(scope.row)"-->
<!-- />-->
</template>
</el-table-column>
<el-table-column

View File

@ -172,6 +172,7 @@ export default {
this.currentPage.show = parseInt(this.form.row)
this.currentPage.pageSize = parseInt(this.form.row)
this.currentPage.page = 1
this.$refs.setCount?.doClose()
this.$emit('reSearch', { form: this.form, page: this.currentPage })
},
pageChange(val) {

View File

@ -3,10 +3,12 @@
<el-row style="margin: 6px 0 16px 0">
<el-col :span="12">
<deBtn
v-if="hasDataPermission('manage', param.privileges)"
secondary
icon="el-icon-plus"
@click="() => addTask()"
>{{ $t('dataset.add_task') }}</deBtn>
&nbsp;
</el-col>
<el-col
style="text-align: right"
@ -66,8 +68,15 @@
v-if="scope.row.lastExecStatus"
:class="[`de-${scope.row.lastExecStatus}-pre`, 'de-status']"
>{{
$t(`dataset.${scope.row.lastExecStatus.toLocaleLowerCase()}`)
}}
$t(`dataset.${scope.row.lastExecStatus.toLocaleLowerCase()}`)
}}
<svg-icon
v-if="scope.row.lastExecStatus === 'Error'"
style="cursor: pointer;"
icon-class="icon-maybe"
class="field-icon-location"
@click="showErrorMassage(scope.row.msg)"
/>
</span>
<span v-else>-</span>
</template>
@ -926,7 +935,7 @@ export default {
getIncrementalConfig() {
post('/dataset/table/incrementalConfig', { tableId: this.table.id }).then(response => {
this.incrementalConfig = response.data
if (this.incrementalConfig.incrementalAdd.length === 0 && this.incrementalConfig.incrementalDelete.length === 0) {
if (this.incrementalConfig?.incrementalAdd?.length === 0 && this.incrementalConfig?.incrementalDelete?.length === 0) {
this.incrementalUpdateType = 'incrementalAdd'
this.sql = ''
return

View File

@ -8,6 +8,7 @@
<span
class="title-text"
style="line-height: 26px"
:title="table.name"
>
{{ table.name }}
</span>
@ -396,6 +397,11 @@ export default {
font-weight: 500;
margin-right: 8px;
color: var(--deTextPrimary, #1f2329);
display: inline-block;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
max-width: 50%;
}
.de-tag {

View File

@ -41,7 +41,7 @@ import DeMainContainer from '@/components/dataease/DeMainContainer'
import DeContainer from '@/components/dataease/DeContainer'
import DeAsideContainer from '@/components/dataease/DeAsideContainer'
import { findOne } from '@/api/panel/panel'
import { deepCopy, getNowCanvasComponentData, panelDataPrepare } from '@/components/canvas/utils/utils'
import { deepCopy, panelDataPrepare } from '@/components/canvas/utils/utils'
import Preview from '@/components/canvas/components/Editor/Preview'
import MultiplexingView from '@/views/panel/ViewSelect/multiplexingView'
import { DEFAULT_COMMON_CANVAS_STYLE_STRING } from '@/views/panel/panel'
@ -75,7 +75,7 @@ export default {
},
computed: {
mainCanvasComponentData() {
return getNowCanvasComponentData(this.canvasId)
return this.componentData.filter(item => item.canvasId === this.canvasId)
}
},
watch: {
@ -105,6 +105,7 @@ export default {
_this.componentData = rsp.componentData
_this.canvasStyleData = rsp.componentStyle
_this.selectedPanel = params
_this.$store.commit('setPreviewComponentData', _this.componentData)
})
})
} else if (params.showType === 'view') {

View File

@ -65,7 +65,7 @@
append-to-body
class="de-dialog-form"
width="600px"
destroy-on-close="true"
:destroy-on-close="true"
>
<el-form
ref="templateEditForm"

View File

@ -8,7 +8,7 @@
:style="classImg"
>
<img
:src="model.snapshot"
:src="imgSrc"
alt=""
>
</div>
@ -82,8 +82,8 @@
</div>
</div>
</template>
<script>
import { imgUrlTrans } from '@/components/canvas/utils/utils'
export default {
props: {
showPosition: {
@ -101,6 +101,9 @@ export default {
}
},
computed: {
imgSrc() {
return imgUrlTrans(this.model.snapshot)
},
classBackground() {
return {
width: this.width + 'px',

View File

@ -13,7 +13,7 @@
class="market-main"
>
<el-row>
<el-col span="12">
<el-col :span="12">
<span class="title-left">{{ $t('app_template.app_manager') }}</span>
</el-col>
</el-row>
@ -54,7 +54,7 @@
width="80%"
top="5vh"
class="market-dialog-css"
append-to-body="true"
:append-to-body="true"
:destroy-on-close="true"
>
<el-form

View File

@ -137,7 +137,7 @@
show-overflow-tooltip
prop="applyTime"
sortable="custom"
:label="'应用时间'"
:label="$t('app_template.execution_time')"
>
<template #default="scope">
<span>{{ scope.row.applyTime | timestampFormatDate }}</span>

View File

@ -1154,6 +1154,7 @@ export default {
this.$store.commit('setComponentWithId', this.currentFilterCom)
this.$store.commit('recordSnapshot', 'sureFilter')
this.$store.commit('setCurComponent', { component: this.currentFilterCom, index: this.curComponentIndex })
this.$store.commit('setComponentFromList', this.currentFilterCom)
bus.$emit('reset-default-value', this.currentFilterCom.id)
this.closeFilter()
},

View File

@ -239,7 +239,7 @@ export default {
watch: {
'childViews.datasetParams': {
handler(newName, oldName) {
if (this.attrs.parameters.length > 0 && this.attrs.parameters[0].indexOf('|DE|') === -1) {
if (this.attrs.parameters?.length && this.attrs.parameters[0].indexOf('|DE|') === -1) {
const parameters = []
for (var i = 0; i < this.attrs.parameters.length; i++) {
if (this.attrs.parameters[i].indexOf('|DE|') === -1) {

View File

@ -13,7 +13,7 @@
class="market-main"
>
<el-row>
<el-col span="12">
<el-col :span="12">
<span class="title-left">{{ $t('panel.template_market') }}</span>
</el-col>
<el-col span="12">
@ -23,7 +23,7 @@
size="small"
class="title-right"
:placeholder="$t('panel.enter_template_name_tips')"
clearable="true"
:clearable="true"
/>
</el-col>
</el-row>
@ -88,7 +88,7 @@
:visible.sync="folderSelectShow"
width="600px"
class="market-dialog-css"
append-to-body="true"
:append-to-body="true"
:destroy-on-close="true"
>
<el-form

View File

@ -692,7 +692,7 @@ export default {
return newArr
},
setType() {
this.form.type = this.params.type
this.$set(this.form, 'type', this.params.type)
this.form.configuration = {
initialPoolSize: 5,
extraParams: '',

View File

@ -67,20 +67,19 @@
</div>
</div>
</div>
<div class="foot">
<el-button
class="btn normal"
<div class="de-foot">
<deBtn
secondary
@click="reset"
>{{
$t("commons.reset")
}}</el-button>
<el-button
}}</deBtn>
<deBtn
type="primary"
class="btn"
@click="search"
>{{
$t("commons.adv_search.search")
}}</el-button>
}}</deBtn>
</div>
</el-drawer>
</template>

View File

@ -255,7 +255,7 @@ export default {
},
methods: {
showError() {
const errKeys = ['WecomError', 'DingtalkError', 'LarkError']
const errKeys = ['WecomError', 'DingtalkError', 'LarkError', 'LarksuiteError']
errKeys.forEach(key => {
const msg = Cookies.get(key)
if (msg) {