Merge pull request #630 from dataease/dev

Dev
This commit is contained in:
fit2cloudrd 2021-08-16 13:23:43 +08:00 committed by GitHub
commit 60d1caedb1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
55 changed files with 4377 additions and 1300 deletions

View File

@ -44,9 +44,9 @@ public class ShiroServiceImpl implements ShiroService {
//验证链接
filterChainDefinitionMap.put("/api/link/validate**", ANON);
filterChainDefinitionMap.put("/api/map/areaEntitys/**", ANON);
filterChainDefinitionMap.put("/**/*.json", ANON);
filterChainDefinitionMap.put("/system/ui/**", ANON);
filterChainDefinitionMap.put("/**/*.js", ANON);
filterChainDefinitionMap.put("/**/*.css", ANON);

View File

@ -13,12 +13,14 @@ public class Datasource implements Serializable {
private String type;
private String createBy;
private Long createTime;
private Long updateTime;
private String createBy;
private String status;
private String configuration;
private static final long serialVersionUID = 1L;

View File

@ -384,76 +384,6 @@ public class DatasourceExample {
return (Criteria) this;
}
public Criteria andCreateByIsNull() {
addCriterion("create_by is null");
return (Criteria) this;
}
public Criteria andCreateByIsNotNull() {
addCriterion("create_by is not null");
return (Criteria) this;
}
public Criteria andCreateByEqualTo(String value) {
addCriterion("create_by =", value, "createBy");
return (Criteria) this;
}
public Criteria andCreateByNotEqualTo(String value) {
addCriterion("create_by <>", value, "createBy");
return (Criteria) this;
}
public Criteria andCreateByGreaterThan(String value) {
addCriterion("create_by >", value, "createBy");
return (Criteria) this;
}
public Criteria andCreateByGreaterThanOrEqualTo(String value) {
addCriterion("create_by >=", value, "createBy");
return (Criteria) this;
}
public Criteria andCreateByLessThan(String value) {
addCriterion("create_by <", value, "createBy");
return (Criteria) this;
}
public Criteria andCreateByLessThanOrEqualTo(String value) {
addCriterion("create_by <=", value, "createBy");
return (Criteria) this;
}
public Criteria andCreateByLike(String value) {
addCriterion("create_by like", value, "createBy");
return (Criteria) this;
}
public Criteria andCreateByNotLike(String value) {
addCriterion("create_by not like", value, "createBy");
return (Criteria) this;
}
public Criteria andCreateByIn(List<String> values) {
addCriterion("create_by in", values, "createBy");
return (Criteria) this;
}
public Criteria andCreateByNotIn(List<String> values) {
addCriterion("create_by not in", values, "createBy");
return (Criteria) this;
}
public Criteria andCreateByBetween(String value1, String value2) {
addCriterion("create_by between", value1, value2, "createBy");
return (Criteria) this;
}
public Criteria andCreateByNotBetween(String value1, String value2) {
addCriterion("create_by not between", value1, value2, "createBy");
return (Criteria) this;
}
public Criteria andCreateTimeIsNull() {
addCriterion("create_time is null");
return (Criteria) this;
@ -573,6 +503,146 @@ public class DatasourceExample {
addCriterion("update_time not between", value1, value2, "updateTime");
return (Criteria) this;
}
public Criteria andCreateByIsNull() {
addCriterion("create_by is null");
return (Criteria) this;
}
public Criteria andCreateByIsNotNull() {
addCriterion("create_by is not null");
return (Criteria) this;
}
public Criteria andCreateByEqualTo(String value) {
addCriterion("create_by =", value, "createBy");
return (Criteria) this;
}
public Criteria andCreateByNotEqualTo(String value) {
addCriterion("create_by <>", value, "createBy");
return (Criteria) this;
}
public Criteria andCreateByGreaterThan(String value) {
addCriterion("create_by >", value, "createBy");
return (Criteria) this;
}
public Criteria andCreateByGreaterThanOrEqualTo(String value) {
addCriterion("create_by >=", value, "createBy");
return (Criteria) this;
}
public Criteria andCreateByLessThan(String value) {
addCriterion("create_by <", value, "createBy");
return (Criteria) this;
}
public Criteria andCreateByLessThanOrEqualTo(String value) {
addCriterion("create_by <=", value, "createBy");
return (Criteria) this;
}
public Criteria andCreateByLike(String value) {
addCriterion("create_by like", value, "createBy");
return (Criteria) this;
}
public Criteria andCreateByNotLike(String value) {
addCriterion("create_by not like", value, "createBy");
return (Criteria) this;
}
public Criteria andCreateByIn(List<String> values) {
addCriterion("create_by in", values, "createBy");
return (Criteria) this;
}
public Criteria andCreateByNotIn(List<String> values) {
addCriterion("create_by not in", values, "createBy");
return (Criteria) this;
}
public Criteria andCreateByBetween(String value1, String value2) {
addCriterion("create_by between", value1, value2, "createBy");
return (Criteria) this;
}
public Criteria andCreateByNotBetween(String value1, String value2) {
addCriterion("create_by not between", value1, value2, "createBy");
return (Criteria) this;
}
public Criteria andStatusIsNull() {
addCriterion("`status` is null");
return (Criteria) this;
}
public Criteria andStatusIsNotNull() {
addCriterion("`status` is not null");
return (Criteria) this;
}
public Criteria andStatusEqualTo(String value) {
addCriterion("`status` =", value, "status");
return (Criteria) this;
}
public Criteria andStatusNotEqualTo(String value) {
addCriterion("`status` <>", value, "status");
return (Criteria) this;
}
public Criteria andStatusGreaterThan(String value) {
addCriterion("`status` >", value, "status");
return (Criteria) this;
}
public Criteria andStatusGreaterThanOrEqualTo(String value) {
addCriterion("`status` >=", value, "status");
return (Criteria) this;
}
public Criteria andStatusLessThan(String value) {
addCriterion("`status` <", value, "status");
return (Criteria) this;
}
public Criteria andStatusLessThanOrEqualTo(String value) {
addCriterion("`status` <=", value, "status");
return (Criteria) this;
}
public Criteria andStatusLike(String value) {
addCriterion("`status` like", value, "status");
return (Criteria) this;
}
public Criteria andStatusNotLike(String value) {
addCriterion("`status` not like", value, "status");
return (Criteria) this;
}
public Criteria andStatusIn(List<String> values) {
addCriterion("`status` in", values, "status");
return (Criteria) this;
}
public Criteria andStatusNotIn(List<String> values) {
addCriterion("`status` not in", values, "status");
return (Criteria) this;
}
public Criteria andStatusBetween(String value1, String value2) {
addCriterion("`status` between", value1, value2, "status");
return (Criteria) this;
}
public Criteria andStatusNotBetween(String value1, String value2) {
addCriterion("`status` not between", value1, value2, "status");
return (Criteria) this;
}
}
public static class Criteria extends GeneratedCriteria {

View File

@ -6,9 +6,10 @@
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="desc" jdbcType="VARCHAR" property="desc" />
<result column="type" jdbcType="VARCHAR" property="type" />
<result column="create_by" jdbcType="VARCHAR" property="createBy" />
<result column="create_time" jdbcType="BIGINT" property="createTime" />
<result column="update_time" jdbcType="BIGINT" property="updateTime" />
<result column="create_by" jdbcType="VARCHAR" property="createBy" />
<result column="status" jdbcType="VARCHAR" property="status" />
</resultMap>
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.dataease.base.domain.Datasource">
<result column="configuration" jdbcType="LONGVARCHAR" property="configuration" />
@ -72,7 +73,7 @@
</where>
</sql>
<sql id="Base_Column_List">
id, `name`, `desc`, `type`, create_by, create_time, update_time
id, `name`, `desc`, `type`, create_time, update_time, create_by, `status`
</sql>
<sql id="Blob_Column_List">
configuration
@ -127,11 +128,13 @@
</delete>
<insert id="insert" parameterType="io.dataease.base.domain.Datasource">
insert into datasource (id, `name`, `desc`,
`type`, create_by, create_time,
update_time, configuration)
`type`, create_time, update_time,
create_by, `status`, configuration
)
values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{desc,jdbcType=VARCHAR},
#{type,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT},
#{updateTime,jdbcType=BIGINT}, #{configuration,jdbcType=LONGVARCHAR})
#{type,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT},
#{createBy,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR}, #{configuration,jdbcType=LONGVARCHAR}
)
</insert>
<insert id="insertSelective" parameterType="io.dataease.base.domain.Datasource">
insert into datasource
@ -148,15 +151,18 @@
<if test="type != null">
`type`,
</if>
<if test="createBy != null">
create_by,
</if>
<if test="createTime != null">
create_time,
</if>
<if test="updateTime != null">
update_time,
</if>
<if test="createBy != null">
create_by,
</if>
<if test="status != null">
`status`,
</if>
<if test="configuration != null">
configuration,
</if>
@ -174,15 +180,18 @@
<if test="type != null">
#{type,jdbcType=VARCHAR},
</if>
<if test="createBy != null">
#{createBy,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
#{createTime,jdbcType=BIGINT},
</if>
<if test="updateTime != null">
#{updateTime,jdbcType=BIGINT},
</if>
<if test="createBy != null">
#{createBy,jdbcType=VARCHAR},
</if>
<if test="status != null">
#{status,jdbcType=VARCHAR},
</if>
<if test="configuration != null">
#{configuration,jdbcType=LONGVARCHAR},
</if>
@ -209,15 +218,18 @@
<if test="record.type != null">
`type` = #{record.type,jdbcType=VARCHAR},
</if>
<if test="record.createBy != null">
create_by = #{record.createBy,jdbcType=VARCHAR},
</if>
<if test="record.createTime != null">
create_time = #{record.createTime,jdbcType=BIGINT},
</if>
<if test="record.updateTime != null">
update_time = #{record.updateTime,jdbcType=BIGINT},
</if>
<if test="record.createBy != null">
create_by = #{record.createBy,jdbcType=VARCHAR},
</if>
<if test="record.status != null">
`status` = #{record.status,jdbcType=VARCHAR},
</if>
<if test="record.configuration != null">
configuration = #{record.configuration,jdbcType=LONGVARCHAR},
</if>
@ -232,9 +244,10 @@
`name` = #{record.name,jdbcType=VARCHAR},
`desc` = #{record.desc,jdbcType=VARCHAR},
`type` = #{record.type,jdbcType=VARCHAR},
create_by = #{record.createBy,jdbcType=VARCHAR},
create_time = #{record.createTime,jdbcType=BIGINT},
update_time = #{record.updateTime,jdbcType=BIGINT},
create_by = #{record.createBy,jdbcType=VARCHAR},
`status` = #{record.status,jdbcType=VARCHAR},
configuration = #{record.configuration,jdbcType=LONGVARCHAR}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
@ -246,9 +259,10 @@
`name` = #{record.name,jdbcType=VARCHAR},
`desc` = #{record.desc,jdbcType=VARCHAR},
`type` = #{record.type,jdbcType=VARCHAR},
create_by = #{record.createBy,jdbcType=VARCHAR},
create_time = #{record.createTime,jdbcType=BIGINT},
update_time = #{record.updateTime,jdbcType=BIGINT}
update_time = #{record.updateTime,jdbcType=BIGINT},
create_by = #{record.createBy,jdbcType=VARCHAR},
`status` = #{record.status,jdbcType=VARCHAR}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
@ -265,15 +279,18 @@
<if test="type != null">
`type` = #{type,jdbcType=VARCHAR},
</if>
<if test="createBy != null">
create_by = #{createBy,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=BIGINT},
</if>
<if test="updateTime != null">
update_time = #{updateTime,jdbcType=BIGINT},
</if>
<if test="createBy != null">
create_by = #{createBy,jdbcType=VARCHAR},
</if>
<if test="status != null">
`status` = #{status,jdbcType=VARCHAR},
</if>
<if test="configuration != null">
configuration = #{configuration,jdbcType=LONGVARCHAR},
</if>
@ -285,9 +302,10 @@
set `name` = #{name,jdbcType=VARCHAR},
`desc` = #{desc,jdbcType=VARCHAR},
`type` = #{type,jdbcType=VARCHAR},
create_by = #{createBy,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=BIGINT},
update_time = #{updateTime,jdbcType=BIGINT},
create_by = #{createBy,jdbcType=VARCHAR},
`status` = #{status,jdbcType=VARCHAR},
configuration = #{configuration,jdbcType=LONGVARCHAR}
where id = #{id,jdbcType=VARCHAR}
</update>
@ -296,9 +314,10 @@
set `name` = #{name,jdbcType=VARCHAR},
`desc` = #{desc,jdbcType=VARCHAR},
`type` = #{type,jdbcType=VARCHAR},
create_by = #{createBy,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=BIGINT},
update_time = #{updateTime,jdbcType=BIGINT}
update_time = #{updateTime,jdbcType=BIGINT},
create_by = #{createBy,jdbcType=VARCHAR},
`status` = #{status,jdbcType=VARCHAR}
where id = #{id,jdbcType=VARCHAR}
</update>
</mapper>

View File

@ -24,7 +24,7 @@
</select>
<select id="queryUnion" resultMap="BaseResultMapDTO">
select id , name , `desc` ,`type` , configuration ,create_time ,update_time,
select id , name , `desc` ,`type` , configuration ,create_time ,update_time, status,
get_auths(id,'link',#{userId}) as `privileges`
from (select GET_V_AUTH_MODEL_ID_P_USE (#{userId}, 'link') cids) t,datasource
<where>

View File

@ -34,9 +34,16 @@
<select id="query" parameterType="io.dataease.base.mapper.ext.query.GridExample" resultMap="BaseResultMap">
select u.*,u.user_id as id, d.pid, d.name as dept_name
from sys_user u
left join sys_dept d on d.dept_id = u.dept_id
SELECT DISTINCT
u.*,
u.user_id AS id,
d.pid,
d.NAME AS dept_name
FROM
sys_user u
LEFT JOIN sys_dept d ON d.dept_id = u.dept_id
LEFT JOIN sys_users_roles sur ON sur.user_id = u.user_id
LEFT JOIN sys_role r ON r.role_id = sur.role_id
<if test="_parameter != null">
<include refid="io.dataease.base.mapper.ext.query.GridSql.gridCondition" />

View File

@ -46,21 +46,24 @@ public class ExcelReaderUtil {
ExcelXlsReader excelXls=new ExcelXlsReader();
excelXls.process(inputStream);
System.out.println(excelXls.totalSheets.size());
System.out.println(excelXls.totalSheets.get(0).getSheetName());
System.out.println(excelXls.totalSheets.get(0).getExcelLable());
for (TableFiled field : excelXls.totalSheets.get(0).getFields()) {
System.out.println(new Gson().toJson(field));
}
System.out.println(excelXls.totalSheets.get(0).getData().get(0));
System.out.println(excelXls.totalSheets.get(0).getData().get(1));
System.out.println(excelXls.totalSheets.get(0).getData().get(2));
} else if (fileName.endsWith(EXCEL07_EXTENSION)) {//处理excel2007文件
ExcelXlsxReader excelXlsxReader = new ExcelXlsxReader();
excelXlsxReader.process(inputStream);
System.out.println(excelXlsxReader.totalSheets.size());
System.out.println(excelXlsxReader.totalSheets.get(0).getSheetName());
for (TableFiled field : excelXlsxReader.totalSheets.get(0).getFields()) {
System.out.println(excelXlsxReader.totalSheets.get(1).getExcelLable());
for (TableFiled field : excelXlsxReader.totalSheets.get(1).getFields()) {
System.out.println(new Gson().toJson(field));
}
System.out.println(excelXlsxReader.totalSheets.get(0).getData().get(0));
System.out.println(excelXlsxReader.totalSheets.get(0).getData().get(1));
System.out.println(excelXlsxReader.totalSheets.get(0).getData().get(2));
} else {
throw new Exception("文件格式错误fileName的扩展名只能是xls或xlsx。");
@ -68,7 +71,7 @@ public class ExcelReaderUtil {
}
public static void main(String[] args) throws Exception {
String file ="下单渠道.xlsx";
String file ="赤收管理 2.xlsx";
ExcelReaderUtil.readExcel(file, new FileInputStream("/Users/taojinlong/Desktop/" + file));
}
}

View File

@ -300,9 +300,9 @@ public class ExcelXlsReader implements HSSFListener {
}
lastColumnNumber = -1;
if(!totalSheets.stream().map(ExcelSheetData::getSheetName).collect(Collectors.toList()).contains(sheetName)){
if(!totalSheets.stream().map(ExcelSheetData::getExcelLable).collect(Collectors.toList()).contains(sheetName)){
ExcelSheetData excelSheetData = new ExcelSheetData();
excelSheetData.setSheetName(sheetName);
excelSheetData.setExcelLable(sheetName);
excelSheetData.setData(new ArrayList<>());
excelSheetData.setFields(new ArrayList<>());
totalSheets.add(excelSheetData);
@ -322,10 +322,10 @@ public class ExcelXlsReader implements HSSFListener {
if (flag && curRow != 0) { //该行不为空行且该行不是第一行发送第一行为列名不需要
if(!totalSheets.stream().map(ExcelSheetData::getSheetName).collect(Collectors.toList()).contains(sheetName)){
if(!totalSheets.stream().map(ExcelSheetData::getExcelLable).collect(Collectors.toList()).contains(sheetName)){
ExcelSheetData excelSheetData = new ExcelSheetData();
excelSheetData.setData(new ArrayList<>(data));
excelSheetData.setSheetName(sheetName);
excelSheetData.setExcelLable(sheetName);
excelSheetData.setFields(new ArrayList<>(fields));
List<String> tmp = new ArrayList<>(cellList);
excelSheetData.getData().add(tmp);
@ -333,7 +333,7 @@ public class ExcelXlsReader implements HSSFListener {
totalSheets.add(excelSheetData);
}else {
List<String> tmp = new ArrayList<>(cellList);
totalSheets.stream().filter(s->s.getSheetName().equalsIgnoreCase(sheetName)).collect(Collectors.toList()).get(0).getData().add(tmp);
totalSheets.stream().filter(s->s.getExcelLable().equalsIgnoreCase(sheetName)).collect(Collectors.toList()).get(0).getData().add(tmp);
totalRows++;
}
}

View File

@ -19,8 +19,6 @@ import org.xml.sax.helpers.XMLReaderFactory;
import java.io.InputStream;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author y
@ -148,6 +146,7 @@ public class ExcelXlsxReader extends DefaultHandler {
parser.setContentHandler(this);
XSSFReader.SheetIterator sheets = (XSSFReader.SheetIterator) xssfReader.getSheetsData();
while (sheets.hasNext()) { //遍历sheet
curRow = 1; //标记初始行为第一行
fields.clear();
data.clear();
@ -157,7 +156,7 @@ public class ExcelXlsxReader extends DefaultHandler {
ExcelSheetData excelSheetData = new ExcelSheetData();
excelSheetData.setData(new ArrayList<>(data));
excelSheetData.setSheetName(sheets.getSheetName());
excelSheetData.setExcelLable(sheets.getSheetName());
excelSheetData.setFields(new ArrayList<>(fields));
totalSheets.add(excelSheetData);
@ -248,17 +247,14 @@ public class ExcelXlsxReader extends DefaultHandler {
} else if ("v".equals(name)) {
//v => 单元格的值如果单元格是字符串则v标签的值为该字符串在SST中的索引
String value = this.getDataValue(lastIndex.trim(), "");//根据索引值获取对应的单元格值
if (preRef == null) {
String regEx="[^0-9]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(ref);
if(curCol < Integer.valueOf(m.replaceAll("").trim()) -1 ){
preRef = "A" + curRow;
if(!preRef.equalsIgnoreCase(ref)){
cellList.add(curCol, "");
curCol++;
}
preRef = ref;
}
//补全单元格之间的空单元格
if (!"A".equals(preRef.substring(0, 1)) && curRow==1 && preRef.equalsIgnoreCase(ref)) {
throw new RuntimeException(Translator.get("i18n_excel_empty_column"));
@ -288,14 +284,6 @@ public class ExcelXlsxReader extends DefaultHandler {
if (curRow == 1) {
maxRef = ref;
}
//补全一行尾部可能缺失的单元格
if (maxRef != null) {
int len = countNullCell(maxRef, ref);
for (int i = 0; i <= len; i++) {
cellList.add(curCol, "");
curCol++;
}
}
if(curRow>1){
List<String> tmp = new ArrayList<>(cellList);
this.getData().add(tmp);

View File

@ -7,6 +7,7 @@ import io.dataease.base.domain.DatasetTableIncrementalConfig;
import io.dataease.controller.request.dataset.DataSetTableRequest;
import io.dataease.datasource.dto.TableFiled;
import io.dataease.dto.dataset.DataSetTableDTO;
import io.dataease.dto.dataset.ExcelFileData;
import io.dataease.service.dataset.DataSetTableService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -37,8 +38,12 @@ public class DataSetTableController {
@ApiOperation("更新")
@PostMapping("update")
public DatasetTable save(@RequestBody DataSetTableRequest datasetTable) throws Exception {
return dataSetTableService.save(datasetTable);
public void save(@RequestBody DataSetTableRequest datasetTable) throws Exception {
if(datasetTable.getType().equalsIgnoreCase("excel")){
dataSetTableService.saveExcel(datasetTable);
}else {
dataSetTableService.save(datasetTable);
}
}
@ApiOperation("删除")
@ -121,8 +126,8 @@ public class DataSetTableController {
@ApiOperation("excel上传")
@PostMapping("excel/upload")
public Map<String, Object> excelUpload(@RequestParam("file") MultipartFile file, @RequestParam("tableId") String tableId) throws Exception {
return dataSetTableService.excelSaveAndParse(file, tableId);
public ExcelFileData excelUpload(@RequestParam("file") MultipartFile file, @RequestParam("tableId") String tableId, @RequestParam("editType") Integer editType ) throws Exception {
return dataSetTableService.excelSaveAndParse(file, tableId, editType);
}
@ApiOperation("检测doris")

View File

@ -2,6 +2,7 @@ package io.dataease.controller.request.dataset;
import io.dataease.base.domain.DatasetTable;
import io.dataease.datasource.dto.TableFiled;
import io.dataease.dto.dataset.ExcelSheetData;
import lombok.Getter;
import lombok.Setter;
@ -23,4 +24,6 @@ public class DataSetTableRequest extends DatasetTable {
private Boolean isRename;
private List<String> typeFilter;
private List<TableFiled> fields;
private List<ExcelSheetData> sheets;
private boolean mergeSheet = false;
}

View File

@ -57,6 +57,7 @@ public class DatasourceService {
datasource.setCreateBy(String.valueOf(AuthUtils.getUser().getUsername()));
datasourceMapper.insertSelective(datasource);
handleConnectionPool(datasource, "add");
checkAndUpdateDatasourceStatus(datasource);
return datasource;
}
@ -111,6 +112,7 @@ public class DatasourceService {
datasource.setUpdateTime(System.currentTimeMillis());
datasourceMapper.updateByPrimaryKeySelective(datasource);
handleConnectionPool(datasource, "edit");
checkAndUpdateDatasourceStatus(datasource);
}
public void validate(Datasource datasource) throws Exception {
@ -200,4 +202,25 @@ public class DatasourceService {
DEException.throwException(Translator.get("i18n_ds_name_exists"));
}
}
public void updateDatasourceStatus(){
List<Datasource> datasources = datasourceMapper.selectByExampleWithBLOBs(new DatasourceExample());
datasources.forEach(datasource -> {
checkAndUpdateDatasourceStatus(datasource);
});
}
private void checkAndUpdateDatasourceStatus(Datasource datasource){
try {
DatasourceProvider datasourceProvider = ProviderFactory.getProvider(datasource.getType());
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(datasource);
datasourceProvider.checkStatus(datasourceRequest);
datasource.setStatus("Success");
datasourceMapper.updateByPrimaryKeySelective(datasource);
} catch (Exception e) {
datasource.setStatus("Error");
datasourceMapper.updateByPrimaryKeySelective(datasource);
}
}
}

View File

@ -14,7 +14,7 @@ import java.util.List;
public class DataTableInfoDTO {
private String table;
private String sql;
private List<String> sheets;
private List<ExcelSheetData> excelSheetDataList;
private String data;// file path
private List<DataTableInfoCustomUnion> list;
}

View File

@ -0,0 +1,16 @@
package io.dataease.dto.dataset;
import io.dataease.datasource.dto.TableFiled;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class ExcelFileData {
private String excelId;
private String excelLable;
private List<ExcelSheetData> sheets;
private String path;
private boolean isSheet = false;
}

View File

@ -4,10 +4,18 @@ import io.dataease.datasource.dto.TableFiled;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class ExcelSheetData {
private String sheetName;
private String excelLable;
private List<List<String>> data;
private List<TableFiled> fields;
private boolean isSheet = true;
private List<Map<String, Object>> jsonArray;
private String datasetName;
private String sheetExcelId;
private String sheetId;
private String path;
private String fieldsMd5;
}

View File

@ -34,7 +34,8 @@ public class MapUtils {
public static String formatCode(String code) {
return code.substring(3);
// return code.substring(3);
return code;
}
/*public static List<Map<String, Object>> readCodeList( ) {
@ -68,7 +69,7 @@ public class MapUtils {
AreaEntity china = root();
maps.parallelStream().forEach(map -> {
maps.stream().forEach(map -> {
// maps.stream().forEach(map -> {
String province_code = map.get(Constants.PROVINCE_CODE).toString();
String city_code = map.get(Constants.CITY_CODE).toString();

View File

@ -696,11 +696,15 @@ public class ChartViewService {
String stackColumn = row[xAxis.size()];
if (StringUtils.equals(ss.getName(), stackColumn)) {
StringBuilder a = new StringBuilder();
for (int j = 0; j < xAxis.size(); j++) {
if (j == xAxis.size() - 1) {
a.append(row[j]);
} else {
a.append(row[j]).append("\n");
if (isDrill) {
a.append(row[xAxis.size() - 1]);
} else {
for (int j = 0; j < xAxis.size(); j++) {
if (j == xAxis.size() - 1) {
a.append(row[j]);
} else {
a.append(row[j]).append("\n");
}
}
}
if (StringUtils.equals(a.toString(), x.get(i))) {

View File

@ -100,13 +100,7 @@ public class DataSetTableService {
}
private void extractData(DataSetTableRequest datasetTable) throws Exception {
if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "excel")) {
commonThreadPool.addTask(() -> {
extractDataService.extractExcelData(datasetTable.getId(), "all_scope", "初始导入");
});
return;
}
if (StringUtils.isNotEmpty(datasetTable.getSyncType()) && datasetTable.getSyncType().equalsIgnoreCase("sync_now")) {
if (datasetTable.getMode() == 1 && StringUtils.isNotEmpty(datasetTable.getSyncType()) && datasetTable.getSyncType().equalsIgnoreCase("sync_now")) {
DataSetTaskRequest dataSetTaskRequest = new DataSetTaskRequest();
DatasetTableTask datasetTableTask = new DatasetTableTask();
datasetTableTask.setTableId(datasetTable.getId());
@ -121,6 +115,109 @@ public class DataSetTableService {
}
}
public void saveExcel(DataSetTableRequest datasetTable)throws Exception {
if (StringUtils.isEmpty(datasetTable.getId())) {
if(datasetTable.isMergeSheet()){
Map<String, List<ExcelSheetData>> map = datasetTable.getSheets().stream().collect(Collectors.groupingBy(ExcelSheetData::getFieldsMd5));
for (String s : map.keySet()) {
DataSetTableRequest sheetTable = new DataSetTableRequest();
BeanUtils.copyBean(sheetTable, datasetTable);
sheetTable.setId(UUID.randomUUID().toString());
sheetTable.setCreateBy(AuthUtils.getUser().getUsername());
sheetTable.setCreateTime(System.currentTimeMillis());
List<ExcelSheetData> excelSheetDataList = map.get(s);
sheetTable.setName(excelSheetDataList.get(0).getDatasetName());
checkName(sheetTable);
excelSheetDataList.forEach(excelSheetData -> {
String[] fieldArray = excelSheetData.getFields().stream().map(TableFiled::getFieldName).toArray(String[]::new);
if (checkIsRepeat(fieldArray)) {
DataEaseException.throwException(Translator.get("i18n_excel_field_repeat"));
}
excelSheetData.setData(null);
excelSheetData.setJsonArray(null);
});
DataTableInfoDTO info = new DataTableInfoDTO();
info.setExcelSheetDataList(excelSheetDataList);
sheetTable.setInfo(new Gson().toJson(info));
int insert = datasetTableMapper.insert(sheetTable);
if (insert == 1) {
saveExcelTableField(sheetTable.getId(), excelSheetDataList.get(0).getFields(), true);
commonThreadPool.addTask(() -> {
extractDataService.extractExcelData(sheetTable.getId(), "all_scope", "初始导入", null);
});
}
}
}else {
for (ExcelSheetData sheet : datasetTable.getSheets()) {
String[] fieldArray = sheet.getFields().stream().map(TableFiled::getFieldName).toArray(String[]::new);
if (checkIsRepeat(fieldArray)) {
DataEaseException.throwException(Translator.get("i18n_excel_field_repeat"));
}
DataSetTableRequest sheetTable = new DataSetTableRequest();
BeanUtils.copyBean(sheetTable, datasetTable);
sheetTable.setId(UUID.randomUUID().toString());
sheetTable.setCreateBy(AuthUtils.getUser().getUsername());
sheetTable.setCreateTime(System.currentTimeMillis());
sheetTable.setName(sheet.getDatasetName());
checkName(sheetTable);
sheet.setData(null);
sheet.setJsonArray(null);
List<ExcelSheetData> excelSheetDataList = new ArrayList<>();
excelSheetDataList.add(sheet);
DataTableInfoDTO info = new DataTableInfoDTO();
info.setExcelSheetDataList(excelSheetDataList);
sheetTable.setInfo(new Gson().toJson(info));
int insert = datasetTableMapper.insert(sheetTable);
if (insert == 1) {
saveExcelTableField(sheetTable.getId(), sheet.getFields(), true);
commonThreadPool.addTask(() -> {
extractDataService.extractExcelData(sheetTable.getId(), "all_scope", "初始导入", null);
});
}
}
}
return;
}
List<ExcelSheetData> excelSheetDataList = new ArrayList<>();
List<String> oldFields = datasetTable.getSheets().get(0).getFields().stream().map(TableFiled::getRemarks).collect(Collectors.toList());
for (ExcelSheetData sheet : datasetTable.getSheets()) {
//替换时
if(datasetTable.getEditType() == 0){
List<String> newFields = sheet.getFields().stream().map(TableFiled::getRemarks).collect(Collectors.toList());
if (!oldFields.equals(newFields)) {
DataEaseException.throwException(Translator.get("i18n_excel_colume_change"));
}
oldFields = newFields;
}
String[] fieldArray = sheet.getFields().stream().map(TableFiled::getFieldName).toArray(String[]::new);
if (checkIsRepeat(fieldArray)) {
DataEaseException.throwException(Translator.get("i18n_excel_field_repeat"));
}
sheet.setData(null);
sheet.setJsonArray(null);
excelSheetDataList.add(sheet);
}
DataTableInfoDTO info = new DataTableInfoDTO();
info.setExcelSheetDataList(excelSheetDataList);
datasetTable.setInfo(new Gson().toJson(info));
int update = datasetTableMapper.updateByPrimaryKeySelective(datasetTable);
// 替換時先不刪除旧字段同步成功后再删除
if (update == 1) {
if (datasetTable.getEditType() == 0) {
commonThreadPool.addTask(() -> {
extractDataService.extractExcelData(datasetTable.getId(), "all_scope", "替换", saveExcelTableField(datasetTable.getId(), datasetTable.getSheets().get(0).getFields(), false));
});
} else if (datasetTable.getEditType() == 1) {
commonThreadPool.addTask(() -> {
extractDataService.extractExcelData(datasetTable.getId(), "add_scope", "追加", null);
});
}
}
}
public DatasetTable save(DataSetTableRequest datasetTable) throws Exception {
checkName(datasetTable);
if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "sql")) {
@ -143,22 +240,11 @@ public class DataSetTableService {
if (datasetTable.getIsRename() == null || !datasetTable.getIsRename()) {
// 更新数据和字段
if (update == 1) {
if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "sql") || StringUtils.equalsIgnoreCase(datasetTable.getType(), "custom")) {
if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "sql") || StringUtils.equalsIgnoreCase(datasetTable.getType(), "custom") ) {
// 删除所有字段重新抽象
dataSetTableFieldsService.deleteByTableId(datasetTable.getId());
saveTableField(datasetTable);
}
if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "excel")) {
if (datasetTable.getEditType() == 0) {
commonThreadPool.addTask(() -> {
extractDataService.extractExcelData(datasetTable.getId(), "all_scope", "替换");
});
} else if (datasetTable.getEditType() == 1) {
commonThreadPool.addTask(() -> {
extractDataService.extractExcelData(datasetTable.getId(), "add_scope", "追加");
});
}
}
}
}
}
@ -810,6 +896,34 @@ public class DataSetTableService {
}
}
public List<DatasetTableField> saveExcelTableField(String datasetTableId, List<TableFiled> fields, boolean insert){
List<DatasetTableField> datasetTableFields = new ArrayList<>();
if (CollectionUtils.isNotEmpty(fields)) {
for (int i = 0; i < fields.size(); i++) {
TableFiled filed = fields.get(i);
DatasetTableField datasetTableField = DatasetTableField.builder().build();
datasetTableField.setTableId(datasetTableId);
datasetTableField.setOriginName(filed.getFieldName());
datasetTableField.setName(filed.getRemarks());
datasetTableField.setDataeaseName(DorisTableUtils.columnName(filed.getFieldName()));
datasetTableField.setType(filed.getFieldType());
datasetTableField.setDeType(transFieldType(filed.getFieldType()));
datasetTableField.setDeExtractType(transFieldType(filed.getFieldType()));
datasetTableField.setSize(filed.getFieldSize());
datasetTableField.setChecked(true);
datasetTableField.setColumnIndex(i);
datasetTableField.setLastSyncTime(System.currentTimeMillis());
datasetTableField.setExtField(0);
datasetTableField.setGroupType(datasetTableField.getDeType() < 2 ? "d" : "q");
if(insert){
dataSetTableFieldsService.save(datasetTableField);
}
datasetTableFields.add(datasetTableField);
}
}
return datasetTableFields;
}
public void saveTableField(DatasetTable datasetTable) throws Exception {
Datasource ds = datasourceMapper.selectByPrimaryKey(datasetTable.getDataSourceId());
DataSetTableRequest dataSetTableRequest = new DataSetTableRequest();
@ -828,11 +942,6 @@ public class DataSetTableService {
datasourceRequest.setQuery(sqlAsTable);
fields = datasourceProvider.fetchResultField(datasourceRequest);
} else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "excel")) {
/*DataTableInfoDTO dataTableInfoDTO = new Gson().fromJson(dataSetTableRequest.getInfo(), DataTableInfoDTO.class);
String path = dataTableInfoDTO.getData();
File file = new File(path);
Map<String, Object> map = parseExcel(path.substring(path.lastIndexOf("/") + 1), new FileInputStream(file), false);
fields = (List<TableFiled>) map.get("fields");*/
fields = dataSetTableRequest.getFields();
} else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "custom")) {
if (datasetTable.getMode() == 1) {
@ -1038,9 +1147,6 @@ public class DataSetTableService {
}
private void checkName(DatasetTable datasetTable) {
// if (StringUtils.isEmpty(datasetTable.getId()) && StringUtils.equalsIgnoreCase("db", datasetTable.getType())) {
// return;
// }
DatasetTableExample datasetTableExample = new DatasetTableExample();
DatasetTableExample.Criteria criteria = datasetTableExample.createCriteria();
if (StringUtils.isNotEmpty(datasetTable.getId())) {
@ -1069,11 +1175,13 @@ public class DataSetTableService {
return map;
}
public Map<String, Object> excelSaveAndParse(MultipartFile file, String tableId) throws Exception {
public ExcelFileData excelSaveAndParse(MultipartFile file, String tableId, Integer editType) throws Exception {
String filename = file.getOriginalFilename();
// parse file
Map<String, Object> fileMap = parseExcel2(filename, file.getInputStream(), true);
if (StringUtils.isNotEmpty(tableId)) {
List<ExcelSheetData> excelSheetDataList = parseExcel2(filename, file.getInputStream(), true);
List<ExcelSheetData> retrunSheetDataList = new ArrayList<>();
if (StringUtils.isNotEmpty(tableId) && editType == 1 ) {
List<DatasetTableField> datasetTableFields = dataSetTableFieldsService.getFieldsByTableId(tableId);
datasetTableFields.sort((o1, o2) -> {
if (o1.getColumnIndex() == null) {
@ -1084,64 +1192,80 @@ public class DataSetTableService {
}
return o1.getColumnIndex().compareTo(o2.getColumnIndex());
});
List<TableFiled> fields = (List<TableFiled>) fileMap.get("fields");
List<String> newFields = fields.stream().map(TableFiled::getRemarks).collect(Collectors.toList());
List<String> oldFields = datasetTableFields.stream().map(DatasetTableField::getOriginName).collect(Collectors.toList());
if (!oldFields.equals(newFields)) {
for (ExcelSheetData excelSheetData : excelSheetDataList) {
List<TableFiled> fields = excelSheetData.getFields();
List<String> newFields = fields.stream().map(TableFiled::getRemarks).collect(Collectors.toList());
if (oldFields.equals(newFields)) {
retrunSheetDataList.add(excelSheetData);
}
}
if (retrunSheetDataList.size() == 0) {
DataEaseException.throwException(Translator.get("i18n_excel_colume_change"));
}
}else {
retrunSheetDataList = excelSheetDataList;
}
// save file
String filePath = saveFile(file);
Map<String, Object> map = new HashMap<>(fileMap);
map.put("path", filePath);
return map;
String excelId = UUID.randomUUID().toString();
String filePath = saveFile(file, excelId);
ExcelFileData excelFileData = new ExcelFileData();
excelFileData.setExcelLable(filename);
excelFileData.setExcelId(excelId);
excelFileData.setPath(filePath);
filename = filename.substring(0, filename.lastIndexOf('.'));
if(retrunSheetDataList.size() == 1){
retrunSheetDataList.get(0).setDatasetName(filename);
retrunSheetDataList.get(0).setSheetExcelId(excelId);
retrunSheetDataList.get(0).setSheetId(UUID.randomUUID().toString());
retrunSheetDataList.get(0).setPath(filePath);
}else {
for (ExcelSheetData excelSheetData : retrunSheetDataList) {
excelSheetData.setDatasetName(filename + "-" + excelSheetData.getExcelLable());
excelSheetData.setSheetExcelId(excelId);
excelSheetData.setSheetId(UUID.randomUUID().toString());
excelSheetData.setPath(filePath);
}
}
excelFileData.setSheets(retrunSheetDataList);
return excelFileData;
}
private Map<String, Object> parseExcel2(String filename, InputStream inputStream, boolean isPreview) throws Exception {
private List<ExcelSheetData> parseExcel2(String filename, InputStream inputStream, boolean isPreview) throws Exception {
List<ExcelSheetData> excelSheetDataList = new ArrayList<>();
String suffix = filename.substring(filename.lastIndexOf(".") + 1);
List<TableFiled> fields = new ArrayList<>();
List<List<String>> data = new ArrayList<>();
List<Map<String, Object>> jsonArray = new ArrayList<>();
List<String> sheets = new ArrayList<>();
if (StringUtils.equalsIgnoreCase(suffix, "xls")) {
ExcelXlsReader excelXlsReader = new ExcelXlsReader();
excelXlsReader.process(inputStream);
fields = excelXlsReader.totalSheets.get(0).getFields();
data = excelXlsReader.totalSheets.get(0).getData();
sheets = excelXlsReader.totalSheets.stream().map(ExcelSheetData::getSheetName).collect(Collectors.toList());
excelSheetDataList = excelXlsReader.totalSheets;
}
if (StringUtils.equalsIgnoreCase(suffix, "xlsx")) {
ExcelXlsxReader excelXlsxReader = new ExcelXlsxReader();
excelXlsxReader.process(inputStream);
fields = excelXlsxReader.totalSheets.get(0).getFields();
data = excelXlsxReader.totalSheets.get(0).getData();
sheets = excelXlsxReader.totalSheets.stream().map(ExcelSheetData::getSheetName).collect(Collectors.toList());
}
String[] fieldArray = fields.stream().map(TableFiled::getFieldName).toArray(String[]::new);
// 校验excel字段是否重名
if (checkIsRepeat(fieldArray)) {
DataEaseException.throwException(Translator.get("i18n_excel_field_repeat"));
}
if (CollectionUtils.isNotEmpty(data)) {
jsonArray = data.stream().map(ele -> {
Map<String, Object> map = new HashMap<>();
for (int i = 0; i < ele.size(); i++) {
map.put(fieldArray[i], ele.get(i));
}
return map;
}).collect(Collectors.toList());
excelSheetDataList = excelXlsxReader.totalSheets;
}
inputStream.close();
excelSheetDataList.forEach(excelSheetData -> {
List<List<String>> data = excelSheetData.getData();
String[] fieldArray = excelSheetData.getFields().stream().map(TableFiled::getFieldName).toArray(String[]::new);
List<Map<String, Object>> jsonArray = new ArrayList<>();
if (CollectionUtils.isNotEmpty(data)) {
jsonArray = data.stream().map(ele -> {
Map<String, Object> map = new HashMap<>();
for (int i = 0; i < ele.size(); i++) {
map.put(fieldArray[i], ele.get(i));
}
return map;
}).collect(Collectors.toList());
}
excelSheetData.setFieldsMd5(Md5Utils.md5(StringUtils.join(fieldArray, ",")));
excelSheetData.setJsonArray(jsonArray);
});
Map<String, Object> map = new HashMap<>();
map.put("fields", fields);
map.put("data", jsonArray);
map.put("sheets", sheets);
return map;
return excelSheetDataList;
}
private Map<String, Object> parseExcel(String filename, InputStream inputStream, boolean isPreview) throws Exception {
@ -1387,16 +1511,15 @@ public class DataSetTableService {
return "";
}
private String saveFile(MultipartFile file) throws Exception {
private String saveFile(MultipartFile file, String fileNameUUID) throws Exception {
String filename = file.getOriginalFilename();
String suffix = filename.substring(filename.lastIndexOf(".") + 1);
filename = Md5Utils.md5(filename.substring(0, filename.length() - suffix.length()));
String dirPath = path + AuthUtils.getUser().getUsername() + "/";
File p = new File(dirPath);
if (!p.exists()) {
p.mkdirs();
}
String filePath = dirPath + filename + "." + suffix;
String filePath = dirPath + fileNameUUID + "." + suffix;
File f = new File(filePath);
FileOutputStream fileOutputStream = new FileOutputStream(f);
fileOutputStream.write(file.getBytes());
@ -1419,7 +1542,6 @@ public class DataSetTableService {
@Resource
private UtilMapper utilMapper;
@QuartzScheduled(cron = "0 0/3 * * * ?")
public void updateDatasetTableStatus() {
List<QrtzSchedulerState> qrtzSchedulerStates = qrtzSchedulerStateMapper.selectByExample(null);
List<String> activeQrtzInstances = qrtzSchedulerStates.stream().filter(qrtzSchedulerState -> qrtzSchedulerState.getLastCheckinTime() + qrtzSchedulerState.getCheckinInterval() + 1000 > utilMapper.currentTimestamp()).map(QrtzSchedulerStateKey::getInstanceName).collect(Collectors.toList());

View File

@ -17,6 +17,7 @@ import io.dataease.datasource.provider.ProviderFactory;
import io.dataease.datasource.request.DatasourceRequest;
import io.dataease.datasource.service.DatasourceService;
import io.dataease.dto.dataset.DataTableInfoDTO;
import io.dataease.dto.dataset.ExcelSheetData;
import io.dataease.exception.DataEaseException;
import io.dataease.listener.util.CacheUtils;
import io.dataease.provider.QueryProvider;
@ -150,7 +151,7 @@ public class ExtractDataService {
}
}
public void extractExcelData(String datasetTableId, String type, String ops) {
public void extractExcelData(String datasetTableId, String type, String ops, List<DatasetTableField> datasetTableFields) {
Datasource datasource = new Datasource();
datasource.setType("excel");
DatasetTable datasetTable = getDatasetTable(datasetTableId);
@ -160,7 +161,9 @@ public class ExtractDataService {
}
UpdateType updateType = UpdateType.valueOf(type);
DatasetTableTaskLog datasetTableTaskLog = new DatasetTableTaskLog();
List<DatasetTableField> datasetTableFields = dataSetTableFieldsService.list(DatasetTableField.builder().tableId(datasetTable.getId()).build());
if(datasetTableFields == null){
datasetTableFields = dataSetTableFieldsService.list(DatasetTableField.builder().tableId(datasetTable.getId()).build());
}
datasetTableFields.sort((o1, o2) -> {
if (o1.getColumnIndex() == null) {
return -1;
@ -185,6 +188,12 @@ public class ExtractDataService {
saveSucessLog(datasetTableTaskLog);
// sendWebMsg(datasetTable, null, true);
updateTableStatus(datasetTableId, datasetTable, JobStatus.Completed, execTime);
if(ops.equalsIgnoreCase("替换")){
dataSetTableFieldsService.deleteByTableId(datasetTable.getId());
datasetTableFields.forEach(datasetTableField -> {
dataSetTableFieldsService.save(datasetTableField);
});
}
} catch (Exception e) {
saveErrorLog(datasetTableId, null, e);
// sendWebMsg(datasetTable, null, false);
@ -192,7 +201,9 @@ public class ExtractDataService {
dropDorisTable(DorisTableUtils.dorisTmpName(DorisTableUtils.dorisName(datasetTableId)));
} finally {
deleteFile("all_scope", datasetTableId);
// deleteFile(new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class).getData());
for (ExcelSheetData excelSheetData : new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class).getExcelSheetDataList()) {
deleteFile(excelSheetData.getPath());
}
}
break;
@ -213,6 +224,9 @@ public class ExtractDataService {
} finally {
deleteFile("incremental_add", datasetTableId);
deleteFile("incremental_delete", datasetTableId);
for (ExcelSheetData excelSheetData : new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class).getExcelSheetDataList()) {
deleteFile(excelSheetData.getPath());
}
}
break;
}
@ -831,18 +845,30 @@ public class ExtractDataService {
private StepMeta excelInputStep(String Info, List<DatasetTableField> datasetTableFields){
DataTableInfoDTO dataTableInfoDTO = new Gson().fromJson(Info, DataTableInfoDTO.class);
String suffix = dataTableInfoDTO.getData().substring(dataTableInfoDTO.getData().lastIndexOf(".") + 1);
List<ExcelSheetData> excelSheetDataList = dataTableInfoDTO.getExcelSheetDataList();
String suffix = excelSheetDataList.get(0).getPath().substring(excelSheetDataList.get(0).getPath().lastIndexOf(".") + 1);
ExcelInputMeta excelInputMeta = new ExcelInputMeta();
List<String> sheetNames = new ArrayList<>();
List<String> files = new ArrayList<>();
for (ExcelSheetData excelSheetData : excelSheetDataList) {
if(!sheetNames.contains(excelSheetData.getExcelLable())){
sheetNames.add(excelSheetData.getExcelLable());
}
if(!files.contains(excelSheetData.getPath())){
files.add(excelSheetData.getPath());
}
}
if (StringUtils.equalsIgnoreCase(suffix, "xlsx")) {
excelInputMeta.setSpreadSheetType(SpreadSheetType.SAX_POI);
excelInputMeta.setSheetName(new String[]{dataTableInfoDTO.getSheets().get(0)});
excelInputMeta.setSheetName(sheetNames.toArray(new String[sheetNames.size()]));
}
if (StringUtils.equalsIgnoreCase(suffix, "xls")) {
excelInputMeta.setSpreadSheetType(SpreadSheetType.JXL);
excelInputMeta.setSheetName(new String[]{dataTableInfoDTO.getSheets().get(0)});
excelInputMeta.setSheetName(sheetNames.toArray(new String[sheetNames.size()]));
}
excelInputMeta.setPassword("Encrypted");
excelInputMeta.setFileName(new String[]{dataTableInfoDTO.getData()});
excelInputMeta.setFileName( files.toArray(new String[files.size()]));
excelInputMeta.setStartsWithHeader(true);
excelInputMeta.setIgnoreEmptyRows(true);
ExcelInputField[] fields = new ExcelInputField[datasetTableFields.size()];

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,174 @@
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`
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`
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 ) 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`
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`
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`
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`
FROM
`dataset_table` UNION ALL
SELECT
`chart_group`.`id` AS `id`,
`chart_group`.`name` AS `name`,
`chart_group`.`name` AS `label`,
IF
( isnull( `chart_group`.`pid` ), '0', `chart_group`.`pid` ) AS `pid`,
'spine' AS `node_type`,
'chart' AS `model_type`,
`chart_group`.`type` AS `model_inner_type`,
'source' AS `auth_type`,
`chart_group`.`create_by` AS `create_by`
FROM
`chart_group` UNION ALL
SELECT
`chart_view`.`id` AS `id`,
`chart_view`.`name` AS `name`,
`chart_view`.`name` AS `label`,
`chart_view`.`scene_id` AS `pid`,
'leaf' AS `node_type`,
'chart' AS `model_type`,
`chart_view`.`type` AS `model_inner_type`,
'source' AS `auth_type`,
`chart_view`.`create_by` AS `create_by`
FROM
`chart_view` 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`
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`
FROM
`sys_menu`
WHERE
(sys_menu.i_frame !=1 or sys_menu.i_frame is null) 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`
FROM
`plugin_sys_menu`
WHERE
(plugin_sys_menu.i_frame !=1 or plugin_sys_menu.i_frame is null);

View File

@ -64,7 +64,7 @@
<!--要生成的数据库表 -->
<table tableName="chart_view"/>
<table tableName="datasource"/>
<!-- <table tableName="sys_dict_item"/>-->
<!-- <table tableName="dataset_table_field"/>-->
<!-- <table tableName="v_chart">-->

View File

@ -1155,7 +1155,9 @@ export default {
this.resizing = false
await this.conflictCheck()
this.$emit('refLineParams', refLine)
this.$emit('resizestop', this.left, this.top, this.width, this.height)
// this.$emit('resizestop', this.left, this.top, this.width, this.height)
// private
// this.$emit('resizestop')
}
if (this.dragging) {
this.dragging = false
@ -1484,6 +1486,12 @@ export default {
style.rotate = this.rotate
// this.hasMove = true
this.$store.commit('setShapeStyle', style)
// resize
const self = this
setTimeout(function() {
self.$emit('resizestop')
}, 200)
},
mountedFunction() {
// private

View File

@ -7,6 +7,8 @@
import Preview from './Preview'
import { uuid } from 'vue-uuid'
import { findOne } from '@/api/panel/panel'
import { getPanelAllLinkageInfo } from '@/api/panel/linkage'
export default {
components: { Preview },
@ -24,6 +26,10 @@ export default {
id: response.data.id,
name: response.data.name
}
//
getPanelAllLinkageInfo(this.panelId).then(rsp => {
this.$store.commit('setNowPanelTrackInfo', rsp.data)
})
this.$store.dispatch('panel/setPanelInfo', data)
})
},

View File

@ -11,7 +11,7 @@
<el-dropdown-item icon="el-icon-download" @click.native="bottomComponent">{{ $t('panel.bottomComponent') }}</el-dropdown-item>
<el-dropdown-item icon="el-icon-arrow-up" @click.native="upComponent">{{ $t('panel.upComponent') }}</el-dropdown-item>
<el-dropdown-item icon="el-icon-arrow-down" @click.native="downComponent">{{ $t('panel.downComponent') }}</el-dropdown-item>
<el-dropdown-item icon="el-icon-link" @click.native="linkageSetting">联动设置</el-dropdown-item>
<el-dropdown-item v-if="'view'===curComponent.type" icon="el-icon-link" @click.native="linkageSetting">{{ $t('panel.linkage_setting') }}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>

View File

@ -37,6 +37,7 @@
:linkage-active="linkageSettingStatus&&item===curLinkageView"
@refLineParams="getRefLineParams"
@showViewDetails="showViewDetails(index)"
@resizestop="resizestop(index,item)"
>
<component
:is="item.component"
@ -620,6 +621,11 @@ export default {
},
showViewDetails(index) {
this.$refs.wrapperChild[index].openChartDetailsDialog()
},
resizestop(index, item) {
if (item.type === 'view') {
this.$refs.wrapperChild[index].chartResize()
}
}
}
}

View File

@ -16,9 +16,10 @@
{{ $t('chart.chart_error_tips') }}
</div>
</div>
<chart-component v-if="requestStatus==='success'&&chart.type && !chart.type.includes('table') && !chart.type.includes('text')" :ref="element.propValue.id" class="chart-class" :chart="chart" :track-menu="trackMenu" @onChartClick="chartClick" />
<table-normal v-if="requestStatus==='success'&&chart.type && chart.type.includes('table')" :ref="element.propValue.id" :chart="chart" class="table-class" />
<label-normal v-if="requestStatus==='success'&&chart.type && chart.type.includes('text')" :ref="element.propValue.id" :chart="chart" class="table-class" />
<chart-component v-if="httpRequest.status &&chart.type && !chart.type.includes('table') && !chart.type.includes('text')" :ref="element.propValue.id" class="chart-class" :chart="chart" :track-menu="trackMenu" @onChartClick="chartClick" />
<!-- <chart-component :ref="element.propValue.id" class="chart-class" :chart="chart" :track-menu="trackMenu" @onChartClick="chartClick" />-->
<table-normal v-if="httpRequest.status &&chart.type && chart.type.includes('table')" :ref="element.propValue.id" :chart="chart" class="table-class" />
<label-normal v-if="httpRequest.status && chart.type && chart.type.includes('text')" :ref="element.propValue.id" :chart="chart" class="table-class" />
<div style="position: absolute;left: 20px;bottom:14px;">
<drill-path :drill-filters="drillFilters" @onDrillJump="drillJump" />
</div>
@ -41,7 +42,7 @@ import eventBus from '@/components/canvas/utils/eventBus'
import { deepCopy } from '@/components/canvas/utils/utils'
import { getToken, getLinkToken } from '@/utils/auth'
import DrillPath from '@/views/chart/view/DrillPath'
import { areaMapping } from '@/api/map/map'
export default {
name: 'UserView',
components: { ChartComponent, TableNormal, LabelNormal, DrillPath },
@ -85,7 +86,12 @@ export default {
message: null,
drillClickDimensionList: [],
drillFilters: [],
drillFields: []
drillFields: [],
places: [],
httpRequest: {
status: true,
msg: ''
}
}
},
computed: {
@ -111,7 +117,7 @@ export default {
trackMenu() {
const trackMenuInfo = []
let linkageCount = 0
this.chart.data.fields && this.chart.data.fields.forEach(item => {
this.chart.data && this.chart.data.fields && this.chart.data.fields.forEach(item => {
const sourceInfo = this.chart.id + '#' + item.id
if (this.nowPanelTrackInfo[sourceInfo]) {
linkageCount++
@ -122,6 +128,9 @@ export default {
console.log('trackMenuInfo' + JSON.stringify(trackMenuInfo))
return trackMenuInfo
},
chartType() {
return this.chart.type
},
...mapState([
'canvasStyleData',
'nowPanelTrackInfo'
@ -135,8 +144,13 @@ export default {
},
linkageFilters: {
handler(newVal, oldVal) {
debugger
isChange(newVal, oldVal) && this.getData(this.element.propValue.viewId)
// isChange(newVal, oldVal) && this.getData(this.element.propValue.viewId)
if (isChange(newVal, oldVal)) {
// if (this.chart.type === 'map') {
// this.doMapLink(newVal)
// }
this.getData(this.element.propValue.viewId)
}
},
deep: true
},
@ -148,12 +162,13 @@ export default {
},
deep: true
},
//
//
outStyle: {
handler(newVal, oldVla) {
if (this.$refs[this.element.propValue.id]) {
this.$refs[this.element.propValue.id].chartResize()
}
//
// if (this.$refs[this.element.propValue.id]) {
// this.$refs[this.element.propValue.id].chartResize()
// }
},
deep: true
},
@ -162,6 +177,11 @@ export default {
if (val1 > 0) {
this.getData(this.element.propValue.viewId)
}
},
'chartType': function(newVal, oldVal) {
if (newVal === 'map' && newVal !== oldVal) {
this.initAreas()
}
}
},
@ -169,6 +189,7 @@ export default {
this.refId = uuid.v1
// this.filter.filter = this.$store.getters.conditions
this.getData(this.element.propValue.viewId)
// this.initAreas()
},
mounted() {
},
@ -207,7 +228,9 @@ export default {
// 使viewInfo 使viewData
let method = viewData
if (!getToken() && getLinkToken()) {
const token = this.$store.getters.token || getToken()
const linkToken = this.$store.getters.linkToken || getLinkToken()
if (!token && linkToken) {
method = viewInfo
}
@ -216,7 +239,6 @@ export default {
if (response.success) {
this.chart = response.data
this.chart.drillFields = this.chart.drillFields ? JSON.parse(this.chart.drillFields) : []
debugger
if (!response.data.drill) {
this.drillClickDimensionList.splice(this.drillClickDimensionList.length - 1, 1)
}
@ -225,12 +247,15 @@ export default {
this.requestStatus = 'merging'
this.mergeStyle()
this.requestStatus = 'success'
this.httpRequest.status = true
} else {
this.requestStatus = 'error'
this.message = response.message
}
return true
}).catch(err => {
this.httpRequest.status = err.response.data.success
this.httpRequest.msg = err.response.data.message
this.requestStatus = 'error'
if (err && err.response && err.response.data) {
this.message = err.response.data.message
@ -259,19 +284,117 @@ export default {
},
chartClick(param) {
debugger
if (this.drillClickDimensionList.length < this.chart.drillFields.length - 1) {
this.chart.type === 'map' && this.sendToChildren(param)
this.drillClickDimensionList.push({ dimensionList: param.data.dimensionList })
this.getData(this.element.propValue.viewId)
}
},
resetDrill() {
const length = this.drillClickDimensionList.length
this.drillClickDimensionList = []
if (this.chart.type === 'map') {
this.backToParent(0, length)
}
},
drillJump(index) {
const length = this.drillClickDimensionList.length
this.drillClickDimensionList = this.drillClickDimensionList.slice(0, index)
if (this.chart.type === 'map') {
this.backToParent(index, length)
}
this.getData(this.element.propValue.viewId)
},
//
backToParent(index, length) {
if (length <= 0) return
const times = length - 1 - index
let temp = times
let tempNode = this.currentAcreaNode
while (temp >= 0) {
tempNode = this.findEntityByCode(tempNode.pcode, this.places)
temp--
}
this.currentAcreaNode = tempNode
const current = this.$refs[this.element.propValue.id]
current && current.registerDynamicMap && current.registerDynamicMap(this.currentAcreaNode.code)
// this.$refs.dynamicChart && this.$refs.dynamicChart.registerDynamicMap && this.$refs.dynamicChart.registerDynamicMap(this.currentAcreaNode.code)
},
//
sendToChildren(param) {
const length = param.data.dimensionList.length
const name = param.data.dimensionList[length - 1].value
let aCode = null
if (this.currentAcreaNode) {
aCode = this.currentAcreaNode.code
}
// const aCode = this.currentAcreaNode ? this.currentAcreaNode.code : null
const customAttr = JSON.parse(this.chart.customAttr)
const currentNode = this.findEntityByCode(aCode || customAttr.areaCode, this.places)
if (currentNode && currentNode.children && currentNode.children.length > 0) {
const nextNode = currentNode.children.find(item => item.name === name)
// this.view.customAttr.areaCode = nextNode.code
this.currentAcreaNode = nextNode
const current = this.$refs[this.element.propValue.id]
current && current.registerDynamicMap && current.registerDynamicMap(nextNode.code)
}
},
findEntityByCode(code, array) {
if (array === null || array.length === 0) array = this.places
for (let index = 0; index < array.length; index++) {
const node = array[index]
if (node.code === code) return node
if (node.children && node.children.length > 0) {
const temp = this.findEntityByCode(code, node.children)
if (temp) return temp
}
}
},
initAreas() {
// let mapping
// if ((mapping = localStorage.getItem('areaMapping')) !== null) {
// this.places = JSON.parse(mapping)
// return
// }
Object.keys(this.places).length === 0 && areaMapping().then(res => {
this.places = res.data
// localStorage.setItem('areaMapping', JSON.stringify(res.data))
})
},
doMapLink(linkFilters) {
if (!linkFilters && linkFilters.length === 0) return
const value = linkFilters[0].value
if (!value && value.length === 0) return
const name = value[0]
if (!name) return
const areaNode = this.findEntityByname(name, [])
if (!areaNode) return
const current = this.$refs[this.element.propValue.id]
current && current.registerDynamicMap && current.registerDynamicMap(areaNode.code)
},
// areaCode
findEntityByname(name, array) {
if (array === null || array.length === 0) array = this.places
for (let index = 0; index < array.length; index++) {
const node = array[index]
if (node.name === name) return node
if (node.children && node.children.length > 0) {
const temp = this.findEntityByname(name, node.children)
if (temp) return temp
}
}
},
// chart
chartResize() {
if (this.$refs[this.element.propValue.id]) {
this.$refs[this.element.propValue.id].chartResize()
}
}
}
}

View File

@ -4,10 +4,6 @@
class="ms-aside-container"
:style="{'margin-left': !asideHidden ? 0 : '-' + width}"
>
<!--<div v-if="enableAsideHidden" class="hiddenBottom" @click="asideHidden = !asideHidden">-->
<!--<i v-if="!asideHidden" class="el-icon-arrow-left"/>-->
<!--<i v-if="asideHidden" class="el-icon-arrow-right"/>-->
<!--</div>-->
<slot />
<de-horizontal-drag-bar v-if="showDragBar" />
</el-aside>

View File

@ -1006,7 +1006,12 @@ export default {
field_manage: 'Field Manage',
edit_calc_field: 'Edit calc field',
calc_field: 'Calc Field',
show_sql: 'Show SQL'
show_sql: 'Show SQL',
ple_select_excel: 'Please select excel file to import',
merge: 'Merge',
no_merge: 'Dont Merge',
merge_msg: 'If the fields in the data table are consistent, merge them into one data set?',
merge_title: 'Merge data'
},
datasource: {
datasource: 'Data Source',
@ -1038,7 +1043,8 @@ export default {
oracle_service_name: 'Service Name',
get_schema: 'Get Schema',
schema: 'Database Schema',
please_choose_schema: 'Please select Schema'
please_choose_schema: 'Please select Schema',
in_valid: 'Invalid datasource'
},
pblink: {
key_pwd: 'Please enter the password to open the link',
@ -1139,6 +1145,7 @@ export default {
bottomComponent: 'Bottom Component',
upComponent: 'Up One Level',
downComponent: 'Down One Level',
linkage_setting: 'Linkage Setting',
open_aided_design: 'Open Component Aided Design',
close_aided_design: 'Close Component Aided Design',
open_style_design: 'Open Style Design',

View File

@ -1006,7 +1006,12 @@ export default {
field_manage: '字段管理',
edit_calc_field: '編輯計算字段',
calc_field: '計算字段',
show_sql: '顯示SQL'
show_sql: '顯示SQL',
ple_select_excel: '請選擇要導入的 Excel',
merge: '合併',
no_merge: '不合併',
merge_msg: '數據表中存在自斷一直的情況,是否合併到一個數據集中?',
merge_title: '合併數據'
},
datasource: {
datasource: '數據源',
@ -1038,7 +1043,8 @@ export default {
oracle_service_name: '服務名',
get_schema: '獲取 Schema',
schema: '數據庫 Schema',
please_choose_schema: '請選擇數據庫 Schema'
please_choose_schema: '請選擇數據庫 Schema',
in_valid: '無效數據源'
},
pblink: {
key_pwd: '請輸入密碼打開鏈接',
@ -1139,6 +1145,7 @@ export default {
bottomComponent: '置底',
upComponent: '上移',
downComponent: '下移',
linkage_setting: '联动设置',
open_aided_design: '打開組件輔助設計',
close_aided_design: '關閉組件輔助設計',
open_style_design: '打開樣式設計',

View File

@ -1006,7 +1006,12 @@ export default {
field_manage: '字段管理',
edit_calc_field: '编辑计算字段',
calc_field: '计算字段',
show_sql: '显示SQL'
show_sql: '显示SQL',
ple_select_excel: '请选择要导入的 Excel',
merge: '合并',
no_merge: '不合并',
merge_msg: '数据表中存在字段一致的情况,是否合并到一个数据集中?',
merge_title: '合并数据'
},
datasource: {
datasource: '数据源',
@ -1040,7 +1045,8 @@ export default {
get_schema: '获取 Schema',
schema: '数据库 Schema',
please_choose_schema: '请选择数据库 Schema',
edit_datasource_msg: '修改数据源信息,可能会导致改数据源下的数据集不可用,确认修改?'
edit_datasource_msg: '修改数据源信息,可能会导致改数据源下的数据集不可用,确认修改?',
in_valid: '无效数据源'
},
pblink: {
key_pwd: '请输入密码打开链接',
@ -1141,6 +1147,7 @@ export default {
bottomComponent: '置底',
upComponent: '上移',
downComponent: '下移',
linkage_setting: '联动设置',
open_aided_design: '打开组件辅助设计',
close_aided_design: '关闭组件辅助设计',
open_style_design: '打开样式设计',

View File

@ -4,6 +4,7 @@ const getters = {
size: state => state.app.size,
device: state => state.app.device,
token: state => state.user.token,
linkToken: state => state.user.linkToken,
avatar: state => state.user.avatar,
name: state => state.user.name,
introduction: state => state.user.introduction,

View File

@ -18,7 +18,8 @@ const getDefaultState = () => {
// 当前用户拥有哪些资源权限
permissions: [],
language: getLanguage(),
uiInfo: null
uiInfo: null,
linkToken: null
}
}
@ -31,6 +32,9 @@ const mutations = {
SET_TOKEN: (state, token) => {
state.token = token
},
SET_LINK_TOKEN: (state, linkToken) => {
state.linkToken = linkToken
},
SET_NAME: (state, name) => {
state.name = name
},
@ -165,6 +169,9 @@ const actions = {
commit('SET_LANGUAGE', language)
router.go(0)
})
},
setLinkToken({ commit }, linkToken) {
commit('SET_LINK_TOKEN', linkToken)
}
}

View File

@ -34,6 +34,10 @@ service.interceptors.request.use(
if ((linkToken = getLinkToken()) !== null) {
config.headers[LinkTokenKey] = linkToken
}
if (!linkToken) {
linkToken = store.getters.linkToken
config.headers[LinkTokenKey] = linkToken
}
if (i18n.locale) {
const lang = i18n.locale.replace('_', '-')
@ -92,6 +96,7 @@ const checkAuth = response => {
if (response.headers[LinkTokenKey.toLocaleLowerCase()] || (response.config.headers && response.config.headers[LinkTokenKey.toLocaleLowerCase()])) {
const linkToken = response.headers[LinkTokenKey.toLocaleLowerCase()] || response.config.headers[LinkTokenKey.toLocaleLowerCase()]
setLinkToken(linkToken)
store.dispatch('user/setLinkToken', linkToken)
}
// 许可状态改变 刷新页面
// if (response.headers['lic-status']) {

View File

@ -618,7 +618,8 @@ export const BASE_MAP = {
calculable: true,
inRange: {
color: ['lightskyblue', 'yellow', 'orangered']
}
},
right: 0
},
// legend: {},
series: [

View File

@ -33,14 +33,24 @@ export function baseMapOption(chart_option, chart) {
}
// visualMap
const valueArr = chart.data.series[0].data
const values = []
valueArr.forEach(function(ele) {
values.push(ele.value)
})
chart_option.visualMap.min = Math.min(...values)
chart_option.visualMap.max = Math.max(...values)
if (valueArr && valueArr.length > 0) {
const values = []
valueArr.forEach(function(ele) {
values.push(ele.value)
})
chart_option.visualMap.min = Math.min(...values)
chart_option.visualMap.max = Math.max(...values)
if (chart_option.visualMap.min === chart_option.visualMap.max) {
chart_option.visualMap.min = 0
}
} else {
chart_option.visualMap.min = 0
chart_option.visualMap.max = 0
}
// color
if (customAttr.color && customAttr.color.colors) {
chart_option.visualMap.inRange.color = customAttr.color.colors
chart_option.visualMap.inRange.colorAlpha = customAttr.color.alpha / 100
}
for (let i = 0; i < valueArr.length; i++) {
// const y = {

View File

@ -55,7 +55,9 @@ export default {
left: '0px',
top: '0px'
},
pointParam: null
pointParam: null,
downOrUp: false
}
},
@ -143,19 +145,13 @@ export default {
const customAttr = JSON.parse(chart.customAttr)
if (!customAttr.areaCode) return
if (this.currentGeoJson) {
this.initMapChart(this.currentGeoJson, chart)
return
}
if (this.$store.getters.geoMap[customAttr.areaCode]) {
this.currentGeoJson = this.$store.getters.geoMap[customAttr.areaCode]
this.initMapChart(this.currentGeoJson, chart)
const json = this.$store.getters.geoMap[customAttr.areaCode]
this.initMapChart(json, chart)
return
}
geoJson(customAttr.areaCode).then(res => {
// this.initMapChart(res.data, chart)
this.initMapChart(res, chart)
this.$store.dispatch('map/setGeo', {
@ -163,16 +159,38 @@ export default {
value: res
// value: res.data
})
// this.currentGeoJson = res.data
this.currentGeoJson = res
})
return
}
this.myEcharts(chart_option)
},
registerDynamicMap(areaCode) {
this.downOrUp = true
if (this.$store.getters.geoMap[areaCode]) {
const json = this.$store.getters.geoMap[areaCode]
this.$echarts.registerMap('MAP', json)
console.log('开始切换地图:' + areaCode)
return
}
geoJson(areaCode).then(res => {
this.$echarts.registerMap('MAP', res)
console.log('开始切换地图:' + areaCode)
this.$store.dispatch('map/setGeo', {
key: areaCode,
value: res
})
}).catch(() => {
this.downOrUp = true
})
},
initMapChart(geoJson, chart) {
// this.$echarts.registerMap('HK', geoJson)
this.$echarts.getMap('MAP') || this.$echarts.registerMap('MAP', geoJson)
if (!this.$echarts.getMap('MAP') || !this.downOrUp) {
console.log('开始初始化地图:')
this.$echarts.registerMap('MAP', geoJson)
}
// this.$echarts.getMap('MAP') || this.$echarts.registerMap('MAP', geoJson)
const base_json = JSON.parse(JSON.stringify(BASE_MAP))
const chart_option = baseMapOption(base_json, chart)
this.myEcharts(chart_option)

View File

@ -10,26 +10,6 @@
</el-form-item>
</el-form>
</el-col>
<!-- <div style="width: 100%">-->
<!-- <el-popover-->
<!-- placement="right"-->
<!-- width="400"-->
<!-- trigger="click"-->
<!-- >-->
<!-- <el-col>-->
<!-- <el-form ref="colorForm" :model="colorForm" label-width="80px" size="mini">-->
<!-- <el-form-item :label="$t('chart.color')" class="form-item">-->
<!-- <colorPicker v-model="colorForm.color" style="margin-top: 6px;cursor: pointer;z-index: 1004;border: solid 1px black" @change="changeBackgroundStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.not_alpha')" class="form-item form-item-slider">-->
<!-- <el-slider v-model="colorForm.alpha" show-input :show-input-controls="false" input-size="mini" @change="changeBackgroundStyle" />-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </el-col>-->
<!-- <el-button slot="reference" :disabled="param && !hasDataPermission('manage',param.privileges)" size="mini" class="shape-item">{{ $t('chart.background') }}<i class="el-icon-setting el-icon&#45;&#45;right" /></el-button>-->
<!-- </el-popover>-->
<!-- </div>-->
</div>
</template>

View File

@ -47,71 +47,6 @@
</div>
</el-form>
</el-col>
<!-- <div style="width: 100%">-->
<!-- <el-popover-->
<!-- v-model="isSetting"-->
<!-- placement="right"-->
<!-- width="400"-->
<!-- trigger="click"-->
<!-- >-->
<!-- <el-col>-->
<!-- <el-form ref="legendForm" :model="legendForm" label-width="80px" size="mini">-->
<!-- &lt;!&ndash; <el-form-item :label="$t('chart.show')" class="form-item">&ndash;&gt;-->
<!-- &lt;!&ndash; <el-checkbox v-model="legendForm.show" @change="changeLegendStyle">{{ $t('chart.show') }}</el-checkbox>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-form-item>&ndash;&gt;-->
<!-- <el-form-item :label="$t('chart.icon')" class="form-item">-->
<!-- <el-select v-model="legendForm.icon" :placeholder="$t('chart.icon')" @change="changeLegendStyle">-->
<!-- <el-option-->
<!-- v-for="item in iconSymbolOptions"-->
<!-- :key="item.value"-->
<!-- :label="item.name"-->
<!-- :value="item.value"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.orient')" class="form-item">-->
<!-- <el-radio-group v-model="legendForm.orient" size="mini" @change="changeLegendStyle">-->
<!-- <el-radio-button label="horizontal">{{ $t('chart.horizontal') }}</el-radio-button>-->
<!-- <el-radio-button label="vertical">{{ $t('chart.vertical') }}</el-radio-button>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.text_fontsize')" class="form-item">-->
<!-- <el-select v-model="legendForm.textStyle.fontSize" :placeholder="$t('chart.text_fontsize')" size="mini" @change="changeLegendStyle">-->
<!-- <el-option v-for="option in fontSize" :key="option.value" :label="option.name" :value="option.value" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.text_color')" class="form-item">-->
<!-- <colorPicker v-model="legendForm.textStyle.color" style="margin-top: 6px;cursor: pointer;z-index: 999;border: solid 1px black" @change="changeLegendStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.text_h_position')" class="form-item">-->
<!-- <el-radio-group v-model="legendForm.hPosition" size="mini" @change="changeLegendStyle">-->
<!-- <el-radio-button label="left">{{ $t('chart.text_pos_left') }}</el-radio-button>-->
<!-- <el-radio-button label="center">{{ $t('chart.text_pos_center') }}</el-radio-button>-->
<!-- <el-radio-button label="right">{{ $t('chart.text_pos_right') }}</el-radio-button>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.text_v_position')" class="form-item">-->
<!-- <el-radio-group v-model="legendForm.vPosition" size="mini" @change="changeLegendStyle">-->
<!-- <el-radio-button label="top">{{ $t('chart.text_pos_top') }}</el-radio-button>-->
<!-- <el-radio-button label="center">{{ $t('chart.text_pos_center') }}</el-radio-button>-->
<!-- <el-radio-button label="bottom">{{ $t('chart.text_pos_bottom') }}</el-radio-button>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </el-col>-->
<!-- <el-button slot="reference" size="mini" class="shape-item" :disabled="!legendForm.show || !hasDataPermission('manage',param.privileges)">-->
<!-- {{ $t('chart.legend') }}<i class="el-icon-setting el-icon&#45;&#45;right" />-->
<!-- <el-switch-->
<!-- v-model="legendForm.show"-->
<!-- :disabled="!hasDataPermission('manage',param.privileges)"-->
<!-- class="switch-style"-->
<!-- @click.stop.native-->
<!-- @change="changeLegendStyle"-->
<!-- />-->
<!-- </el-button>-->
<!-- </el-popover>-->
<!-- </div>-->
</div>
</template>

View File

@ -41,59 +41,6 @@
</el-form-item>
</el-form>
</el-col>
<!-- <div style="width: 100%">-->
<!-- <el-popover-->
<!-- placement="right"-->
<!-- width="400"-->
<!-- trigger="click"-->
<!-- >-->
<!-- <el-col>-->
<!-- <el-form ref="splitForm" :model="splitForm" label-width="80px" size="mini">-->
<!-- <el-form-item :label="$t('chart.name')" class="form-item">-->
<!-- <el-checkbox v-model="splitForm.name.show" @change="changeSplitStyle">{{ $t('chart.show') }}</el-checkbox>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.color')" class="form-item">-->
<!-- <colorPicker v-model="splitForm.name.color" style="margin-top: 6px;cursor: pointer;z-index: 1004;border: solid 1px black" @change="changeSplitStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.text_fontsize')" class="form-item form-item-slider">-->
<!-- <el-select v-model="splitForm.name.fontSize" :placeholder="$t('chart.text_fontsize')" @change="changeSplitStyle">-->
<!-- <el-option v-for="option in fontSize" :key="option.value" :label="option.name" :value="option.value" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.axis_line')" class="form-item">-->
<!-- <el-checkbox v-model="splitForm.axisLine.show" @change="changeSplitStyle">{{ $t('chart.show') }}</el-checkbox>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.axis_color')" class="form-item">-->
<!-- <colorPicker v-model="splitForm.axisLine.lineStyle.color" style="margin-top: 6px;cursor: pointer;z-index: 1004;border: solid 1px black" @change="changeSplitStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.axis_label')" class="form-item">-->
<!-- <el-checkbox v-model="splitForm.axisLabel.show" @change="changeSplitStyle">{{ $t('chart.show') }}</el-checkbox>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.axis_label_color')" class="form-item">-->
<!-- <colorPicker v-model="splitForm.axisLabel.color" style="margin-top: 6px;cursor: pointer;z-index: 1004;border: solid 1px black" @change="changeSplitStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.label_fontsize')" class="form-item form-item-slider">-->
<!-- <el-select v-model="splitForm.axisLabel.fontSize" :placeholder="$t('chart.label_fontsize')" @change="changeSplitStyle">-->
<!-- <el-option v-for="option in fontSize" :key="option.value" :label="option.name" :value="option.value" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.split_line')" class="form-item">-->
<!-- <el-checkbox v-model="splitForm.splitLine.show" @change="changeSplitStyle">{{ $t('chart.show') }}</el-checkbox>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.split_color')" class="form-item">-->
<!-- <colorPicker v-model="splitForm.splitLine.lineStyle.color" style="margin-top: 6px;cursor: pointer;z-index: 1004;border: solid 1px black" @change="changeSplitStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.shadow')" class="form-item">-->
<!-- <el-checkbox v-model="splitForm.splitArea.show" @change="changeSplitStyle">{{ $t('chart.show') }}</el-checkbox>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </el-col>-->
<!-- <el-button slot="reference" :disabled="!hasDataPermission('manage',param.privileges)" size="mini" class="shape-item">-->
<!-- {{ $t('chart.split') }}<i class="el-icon-setting el-icon&#45;&#45;right" />-->
<!-- </el-button>-->
<!-- </el-popover>-->
<!-- </div>-->
</div>
</template>

View File

@ -45,69 +45,6 @@
</div>
</el-form>
</el-col>
<!-- <div style="width: 100%">-->
<!-- <el-popover-->
<!-- v-model="isSetting"-->
<!-- placement="right"-->
<!-- width="400"-->
<!-- trigger="click"-->
<!-- >-->
<!-- <el-col>-->
<!-- <el-form ref="titleForm" :model="titleForm" label-width="80px" size="mini">-->
<!-- &lt;!&ndash; <el-form-item :label="$t('chart.show')" class="form-item">&ndash;&gt;-->
<!-- &lt;!&ndash; <el-checkbox v-model="titleForm.show" @change="changeTitleStyle">{{ $t('chart.show') }}</el-checkbox>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-form-item>&ndash;&gt;-->
<!-- <el-form-item :label="$t('chart.title')" class="form-item">-->
<!-- <el-input-->
<!-- v-model="titleForm.title"-->
<!-- size="mini"-->
<!-- :placeholder="$t('chart.title')"-->
<!-- clearable-->
<!-- @blur="changeTitleStyle"-->
<!-- @input="inputOnInput($event)"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.text_fontsize')" class="form-item">-->
<!-- <el-select v-model="titleForm.fontSize" :placeholder="$t('chart.text_fontsize')" size="mini" @change="changeTitleStyle">-->
<!-- <el-option v-for="option in fontSize" :key="option.value" :label="option.name" :value="option.value" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.text_color')" class="form-item">-->
<!-- <colorPicker v-model="titleForm.color" style="margin-top: 6px;cursor: pointer;z-index: 999;border: solid 1px black" @change="changeTitleStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.text_h_position')" class="form-item">-->
<!-- <el-radio-group v-model="titleForm.hPosition" size="mini" @change="changeTitleStyle">-->
<!-- <el-radio-button label="left">{{ $t('chart.text_pos_left') }}</el-radio-button>-->
<!-- <el-radio-button label="center">{{ $t('chart.text_pos_center') }}</el-radio-button>-->
<!-- <el-radio-button label="right">{{ $t('chart.text_pos_right') }}</el-radio-button>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- <el-form-item v-show="chart.type && !chart.type.includes('table')" :label="$t('chart.text_v_position')" class="form-item">-->
<!-- <el-radio-group v-model="titleForm.vPosition" size="mini" @change="changeTitleStyle">-->
<!-- <el-radio-button label="top">{{ $t('chart.text_pos_top') }}</el-radio-button>-->
<!-- <el-radio-button label="center">{{ $t('chart.text_pos_center') }}</el-radio-button>-->
<!-- <el-radio-button label="bottom">{{ $t('chart.text_pos_bottom') }}</el-radio-button>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.text_style')" class="form-item">-->
<!-- <el-checkbox v-model="titleForm.isItalic" @change="changeTitleStyle">{{ $t('chart.italic') }}</el-checkbox>-->
<!-- <el-checkbox v-model="titleForm.isBolder" @change="changeTitleStyle">{{ $t('chart.bolder') }}</el-checkbox>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </el-col>-->
<!-- <el-button slot="reference" size="mini" class="shape-item" :disabled="!titleForm.show || !hasDataPermission('manage',param.privileges)">-->
<!-- {{ $t('chart.title') }}<i class="el-icon-setting el-icon&#45;&#45;right" />-->
<!-- <el-switch-->
<!-- v-model="titleForm.show"-->
<!-- :disabled="!hasDataPermission('manage',param.privileges)"-->
<!-- class="switch-style"-->
<!-- @click.stop.native-->
<!-- @change="changeTitleStyle"-->
<!-- />-->
<!-- </el-button>-->
<!-- </el-popover>-->
<!-- </div>-->
</div>
</template>

View File

@ -66,90 +66,6 @@
</div>
</el-form>
</el-col>
<!-- <div style="width: 100%">-->
<!-- <el-popover-->
<!-- v-model="isSetting"-->
<!-- placement="right"-->
<!-- width="400"-->
<!-- trigger="click"-->
<!-- >-->
<!-- <el-col>-->
<!-- <el-form ref="axisForm" :model="axisForm" label-width="80px" size="mini">-->
<!-- &lt;!&ndash; <el-form-item :label="$t('chart.show')" class="form-item">&ndash;&gt;-->
<!-- &lt;!&ndash; <el-checkbox v-model="axisForm.show" @change="changeXAxisStyle">{{ $t('chart.show') }}</el-checkbox>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-form-item>&ndash;&gt;-->
<!-- <el-form-item :label="$t('chart.position')" class="form-item">-->
<!-- <el-radio-group v-model="axisForm.position" size="mini" @change="changeXAxisStyle">-->
<!-- <el-radio-button label="top">{{ $t('chart.text_pos_top') }}</el-radio-button>-->
<!-- <el-radio-button label="bottom">{{ $t('chart.text_pos_bottom') }}</el-radio-button>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.name')" class="form-item">-->
<!-- <el-input v-model="axisForm.name" size="mini" @blur="changeXAxisStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.rotate')" class="form-item form-item-slider">-->
<!-- <el-slider v-model="axisForm.axisLabel.rotate" show-input :show-input-controls="false" :min="-90" :max="90" input-size="mini" @change="changeXAxisStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.axis_name_color')" class="form-item">-->
<!-- <colorPicker v-model="axisForm.nameTextStyle.color" style="margin-top: 6px;cursor: pointer;z-index: 1004;border: solid 1px black" @change="changeXAxisStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.axis_name_fontsize')" class="form-item form-item-slider">-->
<!-- <el-select v-model="axisForm.nameTextStyle.fontSize" :placeholder="$t('chart.axis_name_fontsize')" @change="changeXAxisStyle">-->
<!-- <el-option v-for="option in fontSize" :key="option.value" :label="option.name" :value="option.value" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-divider />-->
<!-- <el-form-item :label="$t('chart.axis_show')" class="form-item">-->
<!-- <el-checkbox v-model="axisForm.splitLine.show" @change="changeXAxisStyle">{{ $t('chart.axis_show') }}</el-checkbox>-->
<!-- </el-form-item>-->
<!-- <span v-show="axisForm.splitLine.show">-->
<!-- <el-form-item :label="$t('chart.axis_color')" class="form-item">-->
<!-- <colorPicker v-model="axisForm.splitLine.lineStyle.color" style="margin-top: 6px;cursor: pointer;z-index: 1004;border: solid 1px black" @change="changeXAxisStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.axis_width')" class="form-item form-item-slider">-->
<!-- <el-slider v-model="axisForm.splitLine.lineStyle.width" :min="1" :max="10" show-input :show-input-controls="false" input-size="mini" @change="changeXAxisStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.axis_type')" class="form-item">-->
<!-- <el-radio-group v-model="axisForm.splitLine.lineStyle.type" size="mini" @change="changeXAxisStyle">-->
<!-- <el-radio-button label="solid">{{ $t('chart.axis_type_solid') }}</el-radio-button>-->
<!-- <el-radio-button label="dashed">{{ $t('chart.axis_type_dashed') }}</el-radio-button>-->
<!-- <el-radio-button label="dotted">{{ $t('chart.axis_type_dotted') }}</el-radio-button>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- </span>-->
<!-- <el-divider />-->
<!-- <el-form-item :label="$t('chart.axis_label_show')" class="form-item">-->
<!-- <el-checkbox v-model="axisForm.axisLabel.show" @change="changeXAxisStyle">{{ $t('chart.axis_label_show') }}</el-checkbox>-->
<!-- </el-form-item>-->
<!-- <span v-show="axisForm.axisLabel.show">-->
<!-- <el-form-item :label="$t('chart.axis_label_color')" class="form-item">-->
<!-- <colorPicker v-model="axisForm.axisLabel.color" style="margin-top: 6px;cursor: pointer;z-index: 1004;border: solid 1px black" @change="changeXAxisStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.axis_label_fontsize')" class="form-item form-item-slider">-->
<!-- <el-select v-model="axisForm.axisLabel.fontSize" :placeholder="$t('chart.axis_label_fontsize')" @change="changeXAxisStyle">-->
<!-- <el-option v-for="option in fontSize" :key="option.value" :label="option.name" :value="option.value" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </span>-->
<!-- <el-divider />-->
<!-- <el-form-item :label="$t('chart.content_formatter')" class="form-item">-->
<!-- <el-input v-model="axisForm.axisLabel.formatter" type="textarea" :autosize="{ minRows: 4, maxRows: 4}" @blur="changeXAxisStyle" />-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </el-col>-->
<!-- <el-button slot="reference" size="mini" class="shape-item" :disabled="!axisForm.show || !hasDataPermission('manage',param.privileges)">-->
<!-- {{ $t('chart.xAxis') }}<i class="el-icon-setting el-icon&#45;&#45;right" />-->
<!-- <el-switch-->
<!-- v-model="axisForm.show"-->
<!-- :disabled="!hasDataPermission('manage',param.privileges)"-->
<!-- class="switch-style"-->
<!-- @click.stop.native-->
<!-- @change="changeXAxisStyle"-->
<!-- />-->
<!-- </el-button>-->
<!-- </el-popover>-->
<!-- </div>-->
</div>
</template>

View File

@ -66,90 +66,6 @@
</div>
</el-form>
</el-col>
<!-- <div style="width: 100%">-->
<!-- <el-popover-->
<!-- v-model="isSetting"-->
<!-- placement="right"-->
<!-- width="400"-->
<!-- trigger="click"-->
<!-- >-->
<!-- <el-col>-->
<!-- <el-form ref="axisForm" :model="axisForm" label-width="80px" size="mini">-->
<!-- &lt;!&ndash; <el-form-item :label="$t('chart.show')" class="form-item">&ndash;&gt;-->
<!-- &lt;!&ndash; <el-checkbox v-model="axisForm.show" @change="changeYAxisStyle">{{ $t('chart.show') }}</el-checkbox>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-form-item>&ndash;&gt;-->
<!-- <el-form-item :label="$t('chart.position')" class="form-item">-->
<!-- <el-radio-group v-model="axisForm.position" size="mini" @change="changeYAxisStyle">-->
<!-- <el-radio-button label="left">{{ $t('chart.text_pos_left') }}</el-radio-button>-->
<!-- <el-radio-button label="right">{{ $t('chart.text_pos_right') }}</el-radio-button>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.name')" class="form-item">-->
<!-- <el-input v-model="axisForm.name" size="mini" @blur="changeYAxisStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.rotate')" class="form-item form-item-slider">-->
<!-- <el-slider v-model="axisForm.axisLabel.rotate" show-input :show-input-controls="false" :min="-90" :max="90" input-size="mini" @change="changeYAxisStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.axis_name_color')" class="form-item">-->
<!-- <colorPicker v-model="axisForm.nameTextStyle.color" style="margin-top: 6px;cursor: pointer;z-index: 1004;border: solid 1px black" @change="changeYAxisStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.axis_name_fontsize')" class="form-item form-item-slider">-->
<!-- <el-select v-model="axisForm.nameTextStyle.fontSize" :placeholder="$t('chart.axis_name_fontsize')" @change="changeYAxisStyle">-->
<!-- <el-option v-for="option in fontSize" :key="option.value" :label="option.name" :value="option.value" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-divider />-->
<!-- <el-form-item :label="$t('chart.axis_show')" class="form-item">-->
<!-- <el-checkbox v-model="axisForm.splitLine.show" @change="changeYAxisStyle">{{ $t('chart.axis_show') }}</el-checkbox>-->
<!-- </el-form-item>-->
<!-- <span v-show="axisForm.splitLine.show">-->
<!-- <el-form-item :label="$t('chart.axis_color')" class="form-item">-->
<!-- <colorPicker v-model="axisForm.splitLine.lineStyle.color" style="margin-top: 6px;cursor: pointer;z-index: 1004;border: solid 1px black" @change="changeYAxisStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.axis_width')" class="form-item form-item-slider">-->
<!-- <el-slider v-model="axisForm.splitLine.lineStyle.width" :min="1" :max="10" show-input :show-input-controls="false" input-size="mini" @change="changeYAxisStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.axis_type')" class="form-item">-->
<!-- <el-radio-group v-model="axisForm.splitLine.lineStyle.type" size="mini" @change="changeYAxisStyle">-->
<!-- <el-radio-button label="solid">{{ $t('chart.axis_type_solid') }}</el-radio-button>-->
<!-- <el-radio-button label="dashed">{{ $t('chart.axis_type_dashed') }}</el-radio-button>-->
<!-- <el-radio-button label="dotted">{{ $t('chart.axis_type_dotted') }}</el-radio-button>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- </span>-->
<!-- <el-divider />-->
<!-- <el-form-item :label="$t('chart.axis_label_show')" class="form-item">-->
<!-- <el-checkbox v-model="axisForm.axisLabel.show" @change="changeYAxisStyle">{{ $t('chart.axis_label_show') }}</el-checkbox>-->
<!-- </el-form-item>-->
<!-- <span v-show="axisForm.axisLabel.show">-->
<!-- <el-form-item :label="$t('chart.axis_label_color')" class="form-item">-->
<!-- <colorPicker v-model="axisForm.axisLabel.color" style="margin-top: 6px;cursor: pointer;z-index: 1004;border: solid 1px black" @change="changeYAxisStyle" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.axis_label_fontsize')" class="form-item form-item-slider">-->
<!-- <el-select v-model="axisForm.axisLabel.fontSize" :placeholder="$t('chart.axis_label_fontsize')" @change="changeYAxisStyle">-->
<!-- <el-option v-for="option in fontSize" :key="option.value" :label="option.name" :value="option.value" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </span>-->
<!-- <el-divider />-->
<!-- <el-form-item :label="$t('chart.content_formatter')" class="form-item">-->
<!-- <el-input v-model="axisForm.axisLabel.formatter" type="textarea" :autosize="{ minRows: 4, maxRows: 4}" @blur="changeYAxisStyle" />-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </el-col>-->
<!-- <el-button slot="reference" size="mini" class="shape-item" :disabled="!axisForm.show || !hasDataPermission('manage',param.privileges)">-->
<!-- {{ $t('chart.yAxis') }}<i class="el-icon-setting el-icon&#45;&#45;right" />-->
<!-- <el-switch-->
<!-- v-model="axisForm.show"-->
<!-- :disabled="!hasDataPermission('manage',param.privileges)"-->
<!-- class="switch-style"-->
<!-- @click.stop.native-->
<!-- @change="changeYAxisStyle"-->
<!-- />-->
<!-- </el-button>-->
<!-- </el-popover>-->
<!-- </div>-->
</div>
</template>

View File

@ -42,58 +42,6 @@
</el-form-item>
</el-form>
</el-col>
<!-- <div style="width: 100%">-->
<!-- <el-popover-->
<!-- placement="right"-->
<!-- width="400"-->
<!-- trigger="click"-->
<!-- >-->
<!-- <el-col>-->
<!-- <el-form ref="colorForm" :model="colorForm" label-width="80px" size="mini">-->
<!-- <div v-if="sourceType==='view' || sourceType==='panelEchart'">-->
<!-- <el-form-item v-show="chart.type && !chart.type.includes('table') && !chart.type.includes('text')" :label="$t('chart.color_case')" class="form-item">-->
<!-- <el-select v-model="colorForm.value" :placeholder="$t('chart.pls_slc_color_case')" size="mini" @change="changeColorCase">-->
<!-- <el-option v-for="option in colorCases" :key="option.value" :label="option.name" :value="option.value" style="display: flex;align-items: center;">-->
<!-- <div style="float: left">-->
<!-- <span v-for="(c,index) in option.colors" :key="index" :style="{width: '20px',height: '20px',float: 'left',backgroundColor: c}" />-->
<!-- </div>-->
<!-- <span style="margin-left: 4px;">{{ option.name }}</span>-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item v-show="(chart.type && chart.type.includes('text')) || sourceType==='panelTable'" :label="$t('chart.dimension_color')" class="form-item">-->
<!-- <colorPicker v-model="colorForm.dimensionColor" style="margin-top: 6px;cursor: pointer;z-index: 1003;border: solid 1px black" @change="changeColorCase" />-->
<!-- </el-form-item>-->
<!-- <el-form-item v-show="(chart.type && chart.type.includes('text')) || sourceType==='panelTable'" :label="$t('chart.quota_color')" class="form-item">-->
<!-- <colorPicker v-model="colorForm.quotaColor" style="margin-top: 6px;cursor: pointer;z-index: 1004;border: solid 1px black" @change="changeColorCase" />-->
<!-- </el-form-item>-->
<!-- </div>-->
<!-- <div v-if="sourceType==='view' || sourceType==='panelTable'">-->
<!-- <el-form-item v-show="(chart.type && chart.type.includes('table')) || sourceType==='panelTable'" :label="$t('chart.table_header_bg')" class="form-item">-->
<!-- <colorPicker v-model="colorForm.tableHeaderBgColor" style="margin-top: 6px;cursor: pointer;z-index: 1002;border: solid 1px black" @change="changeColorCase" />-->
<!-- </el-form-item>-->
<!-- <el-form-item v-show="(chart.type && chart.type.includes('table')) || sourceType==='panelTable'" :label="$t('chart.table_item_bg')" class="form-item">-->
<!-- <colorPicker v-model="colorForm.tableItemBgColor" style="margin-top: 6px;cursor: pointer;z-index: 1003;border: solid 1px black" @change="changeColorCase" />-->
<!-- </el-form-item>-->
<!-- <el-form-item v-show="(chart.type && chart.type.includes('table')) || sourceType==='panelTable'" :label="$t('chart.table_item_font_color')" class="form-item">-->
<!-- <colorPicker v-model="colorForm.tableFontColor" style="margin-top: 6px;cursor: pointer;z-index: 1004;border: solid 1px black" @change="changeColorCase" />-->
<!-- </el-form-item>-->
<!-- &lt;!&ndash; 暂时不支持该功能&ndash;&gt;-->
<!-- &lt;!&ndash; <el-form-item v-show="(chart.type && chart.type.includes('table')) || sourceType==='panelTable'" :label="$t('chart.stripe')" class="form-item">&ndash;&gt;-->
<!-- &lt;!&ndash; <el-checkbox v-model="colorForm.tableStripe" @change="changeColorCase">{{ $t('chart.stripe') }}</el-checkbox>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-form-item>&ndash;&gt;-->
<!-- </div>-->
<!-- <el-form-item v-show="chart.type && !chart.type.includes('text')" :label="$t('chart.not_alpha')" class="form-item form-item-slider">-->
<!-- <el-slider v-model="colorForm.alpha" show-input :show-input-controls="false" input-size="mini" @change="changeColorCase" />-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </el-col>-->
<!-- <el-button slot="reference" :disabled="param && !hasDataPermission('manage',param.privileges)" size="mini" class="shape-item">{{ $t('chart.color') }}<i class="el-icon-setting el-icon&#45;&#45;right" /></el-button>-->
<!-- </el-popover>-->
<!-- </div>-->
</div>
</template>

View File

@ -61,85 +61,6 @@
</el-form-item>
</el-form>
</el-col>
<!-- <div style="width: 100%">-->
<!-- <el-popover-->
<!-- v-model="isSetting"-->
<!-- placement="right"-->
<!-- width="400"-->
<!-- trigger="click"-->
<!-- >-->
<!-- <el-col>-->
<!-- <el-form v-show="chart.type && !chart.type.includes('gauge')" ref="labelForm" :model="labelForm" label-width="80px" size="mini">-->
<!-- &lt;!&ndash; <el-form-item :label="$t('chart.show')" class="form-item">&ndash;&gt;-->
<!-- &lt;!&ndash; <el-checkbox v-model="labelForm.show" @change="changeLabelAttr">{{ $t('chart.show') }}</el-checkbox>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-form-item>&ndash;&gt;-->
<!-- <el-form-item :label="$t('chart.pie_label_line_show')" class="form-item">-->
<!-- <el-checkbox v-model="labelForm.labelLine.show" @change="changeLabelAttr">{{ $t('chart.pie_label_line_show') }}</el-checkbox>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.text_fontsize')" class="form-item">-->
<!-- <el-select v-model="labelForm.fontSize" :placeholder="$t('chart.text_fontsize')" size="mini" @change="changeLabelAttr">-->
<!-- <el-option v-for="option in fontSize" :key="option.value" :label="option.name" :value="option.value" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.text_color')" class="form-item">-->
<!-- <colorPicker v-model="labelForm.color" style="margin-top: 6px;cursor: pointer;z-index: 999;border: solid 1px black" @change="changeLabelAttr" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.label_position')" class="form-item">-->
<!-- <el-select v-model="labelForm.position" :placeholder="$t('chart.label_position')" @change="changeLabelAttr">-->
<!-- <el-option v-for="option in labelPosition" :key="option.value" :label="option.name" :value="option.value" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item class="form-item">-->
<!-- <span slot="label">-->
<!-- <span class="span-box">-->
<!-- <span>{{ $t('chart.content_formatter') }}</span>-->
<!-- <el-tooltip class="item" effect="dark" placement="bottom">-->
<!-- <div slot="content">-->
<!-- 字符串模板 模板变量有<br>{a}系列名<br>{b}数据名<br>{c}数据值<br>{d}百分比用于饼图等-->
<!-- </div>-->
<!-- <i class="el-icon-info" style="cursor: pointer;" />-->
<!-- </el-tooltip>-->
<!-- </span>-->
<!-- </span>-->
<!-- <el-input v-model="labelForm.formatter" type="textarea" :autosize="{ minRows: 4, maxRows: 4}" @blur="changeLabelAttr" />-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- <el-form v-show="chart.type && chart.type.includes('gauge')" ref="labelForm" :model="labelForm" label-width="80px" size="mini">-->
<!-- <el-form-item :label="$t('chart.show')" class="form-item">-->
<!-- <el-checkbox v-model="labelForm.show" @change="changeLabelAttr">{{ $t('chart.show') }}</el-checkbox>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.text_fontsize')" class="form-item">-->
<!-- <el-select v-model="labelForm.fontSize" :placeholder="$t('chart.text_fontsize')" size="mini" @change="changeLabelAttr">-->
<!-- <el-option v-for="option in fontSize" :key="option.value" :label="option.name" :value="option.value" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.text_color')" class="form-item">-->
<!-- <colorPicker v-model="labelForm.color" style="margin-top: 6px;cursor: pointer;z-index: 999;border: solid 1px black" @change="changeLabelAttr" />-->
<!-- </el-form-item>-->
<!-- <el-form-item class="form-item">-->
<!-- <span slot="label">-->
<!-- <span class="span-box">-->
<!-- <span>{{ $t('chart.content_formatter') }}</span>-->
<!-- </span>-->
<!-- </span>-->
<!-- <el-input v-model="labelForm.gaugeFormatter" type="textarea" :autosize="{ minRows: 4, maxRows: 4}" @blur="changeLabelAttr" />-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </el-col>-->
<!-- <el-button slot="reference" size="mini" class="shape-item" :disabled="!labelForm.show || !hasDataPermission('manage',param.privileges)">-->
<!-- {{ $t('chart.label') }}<i class="el-icon-setting el-icon&#45;&#45;right" />-->
<!-- <el-switch-->
<!-- v-model="labelForm.show"-->
<!-- :disabled="!hasDataPermission('manage',param.privileges)"-->
<!-- class="switch-style"-->
<!-- @click.stop.native-->
<!-- @change="changeLabelAttr"-->
<!-- />-->
<!-- </el-button>-->
<!-- </el-popover>-->
<!-- </div>-->
</div>
</template>

View File

@ -161,150 +161,6 @@
</el-form-item>
</el-form>
</el-col>
<!-- <el-popover-->
<!-- placement="right"-->
<!-- width="400"-->
<!-- trigger="click"-->
<!-- >-->
<!-- <el-col>-->
<!-- <el-form v-show="chart.type && chart.type.includes('bar')" ref="sizeFormBar" :model="sizeForm" label-width="80px" size="mini">-->
<!-- <el-form-item :label="$t('chart.adapt')" class="form-item">-->
<!-- <el-checkbox v-model="sizeForm.barDefault" @change="changeBarSizeCase">{{ $t('chart.adapt') }}</el-checkbox>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.bar_width')" class="form-item form-item-slider">-->
<!-- <el-slider v-model="sizeForm.barWidth" :disabled="sizeForm.barDefault" show-input :show-input-controls="false" input-size="mini" :min="1" :max="80" @change="changeBarSizeCase" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.bar_gap')" class="form-item form-item-slider">-->
<!-- <el-slider v-model="sizeForm.barGap" :disabled="sizeForm.barDefault" show-input :show-input-controls="false" input-size="mini" :min="0" :max="5" :step="0.1" @change="changeBarSizeCase" />-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- <el-form v-show="chart.type && chart.type.includes('line')" ref="sizeFormLine" :model="sizeForm" label-width="80px" size="mini">-->
<!-- <el-form-item :label="$t('chart.line_width')" class="form-item form-item-slider">-->
<!-- <el-slider v-model="sizeForm.lineWidth" show-input :show-input-controls="false" input-size="mini" :min="0" :max="10" @change="changeBarSizeCase" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.line_type')" class="form-item">-->
<!-- <el-radio-group v-model="sizeForm.lineType" @change="changeBarSizeCase">-->
<!-- <el-radio-button label="solid">{{ $t('chart.line_type_solid') }}</el-radio-button>-->
<!-- <el-radio-button label="dashed">{{ $t('chart.line_type_dashed') }}</el-radio-button>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.line_symbol')" class="form-item">-->
<!-- <el-select v-model="sizeForm.lineSymbol" :placeholder="$t('chart.line_symbol')" @change="changeBarSizeCase">-->
<!-- <el-option-->
<!-- v-for="item in lineSymbolOptions"-->
<!-- :key="item.value"-->
<!-- :label="item.name"-->
<!-- :value="item.value"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.line_symbol_size')" class="form-item form-item-slider">-->
<!-- <el-slider v-model="sizeForm.lineSymbolSize" show-input :show-input-controls="false" input-size="mini" :min="0" :max="20" @change="changeBarSizeCase" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.line_smooth')" class="form-item">-->
<!-- <el-checkbox v-model="sizeForm.lineSmooth" @change="changeBarSizeCase">{{ $t('chart.line_smooth') }}</el-checkbox>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.line_area')" class="form-item">-->
<!-- <el-checkbox v-model="sizeForm.lineArea" @change="changeBarSizeCase">{{ $t('chart.show') }}</el-checkbox>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- <el-form v-show="chart.type && chart.type.includes('pie')" ref="sizeFormPie" :model="sizeForm" label-width="80px" size="mini">-->
<!-- <el-form-item :label="$t('chart.pie_inner_radius')" class="form-item form-item-slider">-->
<!-- <el-slider v-model="sizeForm.pieInnerRadius" show-input :show-input-controls="false" input-size="mini" :min="0" :max="100" @change="changeBarSizeCase" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.pie_outer_radius')" class="form-item form-item-slider">-->
<!-- <el-slider v-model="sizeForm.pieOuterRadius" show-input :show-input-controls="false" input-size="mini" :min="0" :max="100" @change="changeBarSizeCase" />-->
<!-- </el-form-item>-->
<!-- <span v-show="chart.type && chart.type.includes('pie-rose')">-->
<!-- <el-form-item :label="$t('chart.rose_type')" class="form-item">-->
<!-- <el-radio-group v-model="sizeForm.pieRoseType" size="mini" @change="changeBarSizeCase">-->
<!-- <el-radio-button label="radius">{{ $t('chart.radius_mode') }}</el-radio-button>-->
<!-- <el-radio-button label="area">{{ $t('chart.area_mode') }}</el-radio-button>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.rose_radius')" class="form-item form-item-slider">-->
<!-- <el-slider v-model="sizeForm.pieRoseRadius" show-input :show-input-controls="false" input-size="mini" :min="0" :max="100" @change="changeBarSizeCase" />-->
<!-- </el-form-item>-->
<!-- </span>-->
<!-- </el-form>-->
<!-- <el-form v-show="chart.type && chart.type.includes('funnel')" ref="sizeFormPie" :model="sizeForm" label-width="80px" size="mini">-->
<!-- <el-form-item :label="$t('chart.funnel_width')" class="form-item form-item-slider">-->
<!-- <el-slider v-model="sizeForm.funnelWidth" show-input :show-input-controls="false" input-size="mini" :min="0" :max="100" @change="changeBarSizeCase" />-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- <el-form v-show="chart.type && chart.type.includes('radar')" ref="sizeFormPie" :model="sizeForm" label-width="80px" size="mini">-->
<!-- <el-form-item :label="$t('chart.shape')" class="form-item">-->
<!-- <el-radio-group v-model="sizeForm.radarShape" size="mini" @change="changeBarSizeCase">-->
<!-- <el-radio-button label="polygon">{{ $t('chart.polygon') }}</el-radio-button>-->
<!-- <el-radio-button label="circle">{{ $t('chart.circle') }}</el-radio-button>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- <el-form v-show="chart.type && chart.type.includes('table')" ref="sizeFormPie" :model="sizeForm" label-width="100px" size="mini">-->
<!-- <el-form-item :label="$t('chart.table_title_fontsize')" class="form-item">-->
<!-- <el-select v-model="sizeForm.tableTitleFontSize" :placeholder="$t('chart.table_title_fontsize')" @change="changeBarSizeCase">-->
<!-- <el-option v-for="option in fontSize" :key="option.value" :label="option.name" :value="option.value" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.table_item_fontsize')" class="form-item">-->
<!-- <el-select v-model="sizeForm.tableItemFontSize" :placeholder="$t('chart.table_item_fontsize')" @change="changeBarSizeCase">-->
<!-- <el-option v-for="option in fontSize" :key="option.value" :label="option.name" :value="option.value" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.table_title_height')" class="form-item">-->
<!-- <el-slider v-model="sizeForm.tableTitleHeight" :min="36" :max="100" show-input :show-input-controls="false" input-size="mini" @change="changeBarSizeCase" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.table_item_height')" class="form-item">-->
<!-- <el-slider v-model="sizeForm.tableItemHeight" :min="36" :max="100" show-input :show-input-controls="false" input-size="mini" @change="changeBarSizeCase" />-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- <el-form v-show="chart.type && chart.type.includes('gauge')" ref="sizeFormGauge" :model="sizeForm" label-width="100px" size="mini">-->
<!-- <el-form-item :label="$t('chart.min')" class="form-item form-item-slider">-->
<!-- <el-input-number v-model="sizeForm.gaugeMin" size="mini" @change="changeBarSizeCase" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.max')" class="form-item form-item-slider">-->
<!-- <el-input-number v-model="sizeForm.gaugeMax" size="mini" @change="changeBarSizeCase" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.start_angle')" class="form-item form-item-slider">-->
<!-- <el-slider v-model="sizeForm.gaugeStartAngle" show-input :show-input-controls="false" input-size="mini" :min="-360" :max="360" @change="changeBarSizeCase" />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.end_angle')" class="form-item form-item-slider">-->
<!-- <el-slider v-model="sizeForm.gaugeEndAngle" show-input :show-input-controls="false" input-size="mini" :min="-360" :max="360" @change="changeBarSizeCase" />-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- <el-form v-show="chart.type && chart.type.includes('text')" ref="sizeFormPie" :model="sizeForm" label-width="100px" size="mini">-->
<!-- <el-form-item :label="$t('chart.dimension_show')" class="form-item">-->
<!-- <el-checkbox v-model="sizeForm.dimensionShow" @change="changeBarSizeCase">{{ $t('chart.show') }}</el-checkbox>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.dimension_font_size')" class="form-item">-->
<!-- <el-select v-model="sizeForm.dimensionFontSize" :placeholder="$t('chart.dimension_font_size')" @change="changeBarSizeCase">-->
<!-- <el-option v-for="option in fontSize" :key="option.value" :label="option.name" :value="option.value" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.quota_show')" class="form-item">-->
<!-- <el-checkbox v-model="sizeForm.quotaShow" @change="changeBarSizeCase">{{ $t('chart.show') }}</el-checkbox>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.quota_font_size')" class="form-item">-->
<!-- <el-select v-model="sizeForm.quotaFontSize" :placeholder="$t('chart.quota_font_size')" @change="changeBarSizeCase">-->
<!-- <el-option v-for="option in fontSize" :key="option.value" :label="option.name" :value="option.value" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.space_split')" class="form-item">-->
<!-- <el-input-number v-model="sizeForm.spaceSplit" size="mini" @change="changeBarSizeCase" />-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </el-col>-->
<!-- <el-button slot="reference" :disabled="!hasDataPermission('manage',param.privileges)" size="mini" class="shape-item">{{ $t('chart.size') }}<i class="el-icon-setting el-icon&#45;&#45;right" /></el-button>-->
<!-- </el-popover>-->
</div>
</template>

View File

@ -49,73 +49,6 @@
</div>
</el-form>
</el-col>
<!-- <div style="width: 100%">-->
<!-- <el-popover-->
<!-- v-model="isSetting"-->
<!-- placement="right"-->
<!-- width="400"-->
<!-- trigger="click"-->
<!-- >-->
<!-- <el-col>-->
<!-- <el-form ref="tooltipForm" :model="tooltipForm" label-width="80px" size="mini">-->
<!-- &lt;!&ndash; <el-form-item :label="$t('chart.show')" class="form-item">&ndash;&gt;-->
<!-- &lt;!&ndash; <el-checkbox v-model="tooltipForm.show" @change="changeTooltipAttr">{{ $t('chart.show') }}</el-checkbox>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-form-item>&ndash;&gt;-->
<!-- <el-form-item :label="$t('chart.trigger_position')" class="form-item">-->
<!-- <el-radio-group v-model="tooltipForm.trigger" size="mini" @change="changeTooltipAttr">-->
<!-- <el-radio-button label="item">{{ $t('chart.tooltip_item') }}</el-radio-button>-->
<!-- <el-radio-button label="axis">{{ $t('chart.tooltip_axis') }}</el-radio-button>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.text_fontsize')" class="form-item">-->
<!-- <el-select v-model="tooltipForm.textStyle.fontSize" :placeholder="$t('chart.text_fontsize')" size="mini" @change="changeTooltipAttr">-->
<!-- <el-option v-for="option in fontSize" :key="option.value" :label="option.name" :value="option.value" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="$t('chart.text_color')" class="form-item">-->
<!-- <colorPicker v-model="tooltipForm.textStyle.color" style="margin-top: 6px;cursor: pointer;z-index: 999;border: solid 1px black" @change="changeTooltipAttr" />-->
<!-- </el-form-item>-->
<!-- <el-form-item class="form-item">-->
<!-- <span slot="label">-->
<!-- <span class="span-box">-->
<!-- <span>{{ $t('chart.content_formatter') }}</span>-->
<!-- <el-tooltip class="item" effect="dark" placement="bottom">-->
<!-- <div slot="content">-->
<!-- 模板变量有 {a}, {b}{c}{d}{e}分别表示系列名数据名数据值等-->
<!-- <br>-->
<!-- trigger 'axis' 的时候会有多个系列的数据此时可以通过 {a0}, {a1}, {a2} 这种后面加索引的方式表示系列的索引-->
<!-- <br>-->
<!-- 不同图表类型下的 {a}{b}{c}{d} 含义不一样 其中变量{a}, {b}, {c}, {d}在不同图表类型下代表数据含义为-->
<!-- <br><br>-->
<!-- 折线区域柱状条形K线图 : {a}系列名称{b}类目值{c}数值, {d}-->
<!-- <br>-->
<!-- 散点图气泡 : {a}系列名称{b}数据名称{c}数值数组, {d}-->
<!-- <br>-->
<!-- 地图 : {a}系列名称{b}区域名称{c}合并数值, {d}-->
<!-- <br>-->
<!-- 饼图仪表板漏斗图: {a}系列名称{b}数据项名称{c}数值, {d}百分比-->
<!-- </div>-->
<!-- <i class="el-icon-info" style="cursor: pointer;" />-->
<!-- </el-tooltip>-->
<!-- </span>-->
<!-- </span>-->
<!-- <el-input v-model="tooltipForm.formatter" type="textarea" :autosize="{ minRows: 4, maxRows: 4}" :placeholder="$t('chart.formatter_plc')" @blur="changeTooltipAttr" />-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </el-col>-->
<!-- <el-button slot="reference" size="mini" class="shape-item" :disabled="!tooltipForm.show || !hasDataPermission('manage',param.privileges)">-->
<!-- {{ $t('chart.tooltip') }}<i class="el-icon-setting el-icon&#45;&#45;right" />-->
<!-- <el-switch-->
<!-- v-model="tooltipForm.show"-->
<!-- :disabled="!hasDataPermission('manage',param.privileges)"-->
<!-- class="switch-style"-->
<!-- @click.stop.native-->
<!-- @change="changeTooltipAttr"-->
<!-- />-->
<!-- </el-button>-->
<!-- </el-popover>-->
<!-- </div>-->
</div>
</template>

View File

@ -483,7 +483,7 @@
<el-col style="height: 100%;min-width: 500px;border-top: 1px solid #E6E6E6;">
<el-row style="width: 100%;height: 100%;" class="padding-lr">
<div ref="imageWrapper" style="height: 100%">
<chart-component v-if="httpRequest.status && chart.type && !chart.type.includes('table') && !chart.type.includes('text')" :chart-id="chart.id" :chart="chart" class="chart-class" @onChartClick="chartClick" />
<chart-component v-if="httpRequest.status && chart.type && !chart.type.includes('table') && !chart.type.includes('text')" ref="dynamicChart" :chart-id="chart.id" :chart="chart" class="chart-class" @onChartClick="chartClick" />
<table-normal v-if="httpRequest.status && chart.type && chart.type.includes('table')" :chart="chart" class="table-class" />
<label-normal v-if="httpRequest.status && chart.type && chart.type.includes('text')" :chart="chart" class="table-class" />
<div v-if="!httpRequest.status" class="chart-error-class">
@ -572,7 +572,7 @@
<p style="margin-top: 10px;color:#F56C6C;font-size: 12px;">{{ $t('chart.change_ds_tip') }}</p>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="closeChangeChart">{{ $t('chart.cancel') }}</el-button>
<el-button type="primary" size="mini" :disabled="!table || !table.id || !changeTable || !changeTable.id" @click="changeChart">{{ $t('chart.confirm') }}</el-button>
<el-button type="primary" size="mini" :disabled="!changeTable || !changeTable.id" @click="changeChart">{{ $t('chart.confirm') }}</el-button>
</div>
</el-dialog>
@ -711,7 +711,8 @@ export default {
},
moveId: -1,
chart: {
id: 'echart'
id: 'echart',
type: null
},
dimensionFilterEdit: false,
dimensionItem: {},
@ -754,23 +755,31 @@ export default {
// this.getData(this.$store.state.chart.viewId)
// return this.$store.state.chart.viewId
// }
chartType() {
return this.chart.type
}
},
watch: {
'param': function() {
this.resetDrill()
if (this.param.optType === 'new') {
//
} else {
this.resetDrill()
this.getData(this.param.id)
}
},
searchField(val) {
this.fieldFilter(val)
},
'chartType': function(newVal, oldVal) {
if (newVal === 'map' && newVal !== oldVal) {
this.initAreas()
}
}
},
created() {
// this.get(this.$store.state.chart.viewId);
this.initAreas()
// this.initAreas()
},
mounted() {
// this.get(this.$store.state.chart.viewId);
@ -821,6 +830,9 @@ export default {
return
}
view.tableId = this.view.tableId
if (view.type === 'map' && view.xaxis.length > 1) {
view.xaxis = [view.xaxis[0]]
}
view.xaxis.forEach(function(ele) {
// if (!ele.summary || ele.summary === '') {
// ele.summary = 'sum'
@ -838,6 +850,9 @@ export default {
ele.filter = []
}
})
if (view.type === 'map' && view.yaxis.length > 1) {
view.yaxis = [view.yaxis[0]]
}
view.yaxis.forEach(function(ele) {
if (!ele.summary || ele.summary === '') {
if (ele.id === 'count' || ele.deType === 0 || ele.deType === 1) {
@ -909,8 +924,8 @@ export default {
// this.get(response.data.id);
// this.getData(response.data.id)
this.resetDrill()
if (getData) {
this.resetDrill()
this.getData(response.data.id)
} else {
this.getChart(response.data.id)
@ -925,67 +940,6 @@ export default {
})
},
// saveSnapshot() {
// if (this.view.title && this.view.title.length > 50) {
// this.$warning(this.$t('chart.title_limit'))
// return
// }
// if (this.loading) {
// return
// }
// this.loading = true
// html2canvas(this.$refs.imageWrapper).then(canvas => {
// const snapshot = canvas.toDataURL('image/jpeg', 0.1) // 0.1
// if (snapshot !== '') {
// const view = JSON.parse(JSON.stringify(this.view))
// view.id = this.view.id
// view.sceneId = this.view.sceneId
// view.name = this.view.name ? this.view.name : this.table.name
// view.tableId = this.view.tableId
// view.xaxis.forEach(function(ele) {
// // if (!ele.summary || ele.summary === '') {
// // ele.summary = 'sum'
// // }
// if (!ele.sort || ele.sort === '') {
// ele.sort = 'none'
// }
// if (!ele.filter) {
// ele.filter = []
// }
// })
// view.yaxis.forEach(function(ele) {
// if (!ele.summary || ele.summary === '') {
// if (ele.id === 'count') {
// ele.summary = 'count'
// } else {
// ele.summary = 'sum'
// }
// }
// if (!ele.sort || ele.sort === '') {
// ele.sort = 'none'
// }
// if (!ele.filter) {
// ele.filter = []
// }
// })
// if (view.type.startsWith('pie') || view.type.startsWith('funnel') || view.type.startsWith('gauge')) {
// if (view.yaxis.length > 1) {
// view.yaxis.splice(1, view.yaxis.length)
// }
// }
// view.xaxis = JSON.stringify(view.xaxis)
// view.yaxis = JSON.stringify(view.yaxis)
// view.customAttr = JSON.stringify(view.customAttr)
// view.customStyle = JSON.stringify(view.customStyle)
// view.customFilter = JSON.stringify(view.customFilter)
// view.snapshot = snapshot
// post('/chart/view/save', view).then(response => {
// this.loading = false
// this.$success(this.$t('commons.save_success'))
// })
// }
// })
// },
closeEdit() {
if (this.view.title && this.view.title.length > 50) {
this.$warning(this.$t('chart.title_limit'))
@ -1023,7 +977,7 @@ export default {
if (!response.data.drill) {
this.drillClickDimensionList.splice(this.drillClickDimensionList.length - 1, 1)
}
this.drillFilters = JSON.parse(JSON.stringify(response.data.drillFilters))
this.drillFilters = JSON.parse(JSON.stringify(response.data.drillFilters ? response.data.drillFilters : []))
}).catch(err => {
this.resetView()
this.resetDrill()
@ -1067,74 +1021,6 @@ export default {
}
},
//
// start1(e) {
// // console.log(e)
// e.clone.className = 'item'
// e.item.className = 'item'
// },
// end1(e) {
// // console.log(e)
// e.clone.className = 'item'
// e.item.className = 'item'
// this.refuseMove(e)
// this.removeCheckedKey(e)
// this.save(true)
// },
//
// start2(e) {
// console.log(e)
// },
// end2(e) {
// // console.log(e)
// this.removeDuplicateKey(e)
// this.save(true)
// },
// removeCheckedKey(e) {
// const that = this
// const xItems = this.view.xaxis.filter(function(m) {
// return m.id === that.moveId
// })
// const yItems = this.view.yaxis.filter(function(m) {
// return m.id === that.moveId
// })
// if (xItems && xItems.length > 1) {
// this.view.xaxis.splice(e.newDraggableIndex, 1)
// }
// if (yItems && yItems.length > 1) {
// this.view.yaxis.splice(e.newDraggableIndex, 1)
// }
// },
// refuseMove(e) {
// const that = this
// const xItems = this.dimension.filter(function(m) {
// return m.id === that.moveId
// })
// const yItems = this.quota.filter(function(m) {
// return m.id === that.moveId
// })
// if (xItems && xItems.length > 1) {
// this.dimension.splice(e.newDraggableIndex, 1)
// }
// if (yItems && yItems.length > 1) {
// this.quota.splice(e.newDraggableIndex, 1)
// }
// },
// removeDuplicateKey(e) {
// const that = this
// const xItems = this.dimension.filter(function(m) {
// return m.id === that.moveId
// })
// const yItems = this.quota.filter(function(m) {
// return m.id === that.moveId
// })
// if (xItems && xItems.length > 1) {
// this.dimension.splice(e.newDraggableIndex, 1)
// }
// if (yItems && yItems.length > 1) {
// this.quota.splice(e.newDraggableIndex, 1)
// }
// },
// move
onMove(e, originalEvent) {
// console.log(e)
@ -1368,6 +1254,7 @@ export default {
this.view.customFilter = []
this.view.extStack = []
this.view.extBubble = []
this.view.drillFields = []
}
this.save(true, 'chart', false)
},
@ -1411,11 +1298,17 @@ export default {
}
},
addXaxis(e) {
if (this.view.type === 'map' && this.view.xaxis.length > 1) {
this.view.xaxis = [this.view.xaxis[0]]
}
this.dragCheckType(this.view.xaxis, 'd')
this.dragMoveDuplicate(this.view.xaxis, e)
this.save(true)
},
addYaxis(e) {
if (this.view.type === 'map' && this.view.yaxis.length > 1) {
this.view.yaxis = [this.view.yaxis[0]]
}
this.dragCheckType(this.view.yaxis, 'q')
this.dragMoveDuplicate(this.view.yaxis, e)
this.save(true)
@ -1444,14 +1337,14 @@ export default {
},
initAreas() {
let mapping
if ((mapping = localStorage.getItem('areaMapping')) !== null) {
this.places = JSON.parse(mapping)
return
}
// let mapping
// if ((mapping = localStorage.getItem('areaMapping')) !== null) {
// this.places = JSON.parse(mapping)
// return
// }
Object.keys(this.places).length === 0 && areaMapping().then(res => {
this.places = res.data
localStorage.setItem('areaMapping', JSON.stringify(res.data))
// localStorage.setItem('areaMapping', JSON.stringify(res.data))
})
},
@ -1513,18 +1406,95 @@ export default {
chartClick(param) {
if (this.drillClickDimensionList.length < this.view.drillFields.length - 1) {
this.drillClickDimensionList.push({ dimensionList: param.data.dimensionList })
this.getData(this.param.id)
// const isSwitch = (this.chart.type === 'map' && this.sendToChildren(param))
if (this.chart.type === 'map') {
if (this.sendToChildren(param)) {
this.drillClickDimensionList.push({ dimensionList: param.data.dimensionList })
this.getData(this.param.id)
}
} else {
this.drillClickDimensionList.push({ dimensionList: param.data.dimensionList })
this.getData(this.param.id)
}
}
},
resetDrill() {
const length = this.drillClickDimensionList.length
this.drillClickDimensionList = []
if (this.chart.type === 'map') {
this.backToParent(0, length)
this.currentAcreaNode = null
}
},
drillJump(index) {
const length = this.drillClickDimensionList.length
this.drillClickDimensionList = this.drillClickDimensionList.slice(0, index)
if (this.chart.type === 'map') {
this.backToParent(index, length)
}
this.getData(this.param.id)
},
//
backToParent(index, length) {
if (length <= 0) return
const times = length - 1 - index
let temp = times
let tempNode = this.currentAcreaNode
while (temp >= 0) {
tempNode = this.findEntityByCode(tempNode.pcode, this.places)
temp--
}
this.currentAcreaNode = tempNode
this.$refs.dynamicChart && this.$refs.dynamicChart.registerDynamicMap && this.$refs.dynamicChart.registerDynamicMap(this.currentAcreaNode.code)
},
//
sendToChildren(param) {
const length = param.data.dimensionList.length
const name = param.data.dimensionList[length - 1].value
let aCode = null
if (this.currentAcreaNode) {
aCode = this.currentAcreaNode.code
}
// const aCode = this.currentAcreaNode ? this.currentAcreaNode.code : null
const currentNode = this.findEntityByCode(aCode || this.view.customAttr.areaCode, this.places)
if (currentNode && currentNode.children && currentNode.children.length > 0) {
const nextNode = currentNode.children.find(item => item.name === name)
if (!nextNode || !nextNode.code) return null
// this.view.customAttr.areaCode = nextNode.code
this.currentAcreaNode = nextNode
this.$refs.dynamicChart && this.$refs.dynamicChart.registerDynamicMap && this.$refs.dynamicChart.registerDynamicMap(nextNode.code)
return nextNode
}
},
// areaCode
// findEntityByname(name, array) {
// if (array === null || array.length === 0) array = this.places
// for (let index = 0; index < array.length; index++) {
// const node = array[index]
// if (node.name === name) return node
// if (node.children && node.children.length > 0) {
// const temp = this.findEntityByname(name, node.children)
// if (temp) return temp
// }
// }
// }
findEntityByCode(code, array) {
if (array === null || array.length === 0) array = this.places
for (let index = 0; index < array.length; index++) {
const node = array[index]
if (node.code === code) return node
if (node.children && node.children.length > 0) {
const temp = this.findEntityByCode(code, node.children)
if (temp) return temp
}
}
}
}
}
</script>

View File

@ -9,115 +9,132 @@
<el-button size="mini" @click="cancel">
{{ $t('dataset.cancel') }}
</el-button>
<el-button :disabled="!name || fileList.length === 0" size="mini" type="primary" @click="save">
<el-button size="mini" type="primary" @click="save">
{{ $t('dataset.confirm') }}
</el-button>
</el-row>
</el-row>
<el-divider />
<el-row>
<el-row>
<el-col style="width: 500px;">
<el-form :inline="true" size="mini" class="row-style">
<el-form-item class="form-item">
<el-input v-show="!param.tableId" v-model="name" :placeholder="$t('commons.name')" />
</el-form-item>
<el-form-item class="form-item">
<el-upload
:action="baseUrl+'dataset/table/excel/upload'"
:multiple="false"
:show-file-list="false"
:file-list="fileList"
:data="param"
accept=".xls,.xlsx,"
:before-upload="beforeUpload"
:on-success="uploadSuccess"
:on-error="uploadFail"
name="file"
:headers="headers"
>
<el-button size="mini" type="primary" :disabled="uploading">
<span v-if="!uploading" style="font-size: 12px;">{{ $t('dataset.upload_file') }}</span>
<span v-if="uploading" style="font-size: 12px;"><i class="el-icon-loading" /> {{ $t('dataset.uploading') }}</span>
</el-button>
</el-upload>
</el-form-item>
</el-form>
</el-col>
</el-row>
</el-row>
<el-row style="margin-top: 10px;">
<el-card class="box-card dataPreview" shadow="never">
<div slot="header" class="clearfix">
<span>{{ $t('dataset.data_preview') }}</span>
<span style="font-size: 12px;color: #3d4d66;">{{ $t('dataset.preview_100_data') }}</span>
</div>
<div class="text item">
<ux-grid
ref="plxTable"
size="mini"
style="width: 100%;"
:height="height"
:checkbox-config="{highlight: true}"
:width-resize="true"
>
<ux-table-column
v-for="field in fields"
:key="field.fieldName"
min-width="200px"
:field="field.fieldName"
:title="field.remarks"
:resizable="true"
>
<template slot="header" slot-scope="scope">
<span v-if="!param.tableId" style="display: flex;align-items: center;">
<span style="display: inline-block;font-size: 12px;">
<div style="display: inline-block;">
<el-select v-model="field.fieldType" size="mini" style="display: inline-block;width: 120px;">
<el-option
v-for="item in fieldOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
<span style="float: left">
<svg-icon v-if="item.value === 'TEXT'" icon-class="field_text" class="field-icon-text" />
<svg-icon v-if="item.value === 'DATETIME'" icon-class="field_time" class="field-icon-time" />
<svg-icon v-if="item.value === 'LONG' || item.value === 'DOUBLE'" icon-class="field_value" class="field-icon-value" />
</span>
<span style="float: left; color: #8492a6; font-size: 12px">{{ item.label }}</span>
</el-option>
</el-select>
<el-container>
<el-aside width="200px" >
<el-row>
<el-col style="width: 200px;">
<el-form :inline="true" size="mini" class="row-style">
<el-form-item class="form-item">
<el-upload
:action="baseUrl+'dataset/table/excel/upload'"
:multiple="false"
:show-file-list="false"
:file-list="fileList"
:data="param"
accept=".xls,.xlsx,"
:before-upload="beforeUpload"
:on-success="uploadSuccess"
:on-error="uploadFail"
name="file"
:headers="headers"
>
<el-button size="mini" type="primary" :disabled="uploading">
<span v-if="!uploading" style="font-size: 12px;">{{ $t('dataset.upload_file') }}</span>
<span v-if="uploading" style="font-size: 12px;"><i class="el-icon-loading" /> {{ $t('dataset.uploading') }}</span>
</el-button>
</el-upload>
</el-form-item>
</el-form>
</el-col>
</el-row>
<el-tree ref="tree"
:data="excelData"
node-key="excelId"
:props="props"
show-checkbox
highlight-current
@node-click="handleNodeClick"
@check-change="handleCheckChange">
</el-tree>
</el-aside>
<el-container>
<el-header style="text-align: left;" height="30px">
<el-row>
<el-col style="width: 500px;">
<el-form :inline="true" size="mini" class="row-style">
<el-form-item class="form-item" :label="$t('dataset.name')" v-show="!param.tableId">
<el-input v-model="sheetObj.datasetName" :placeholder="$t('commons.name')" @change="changeDatasetName" />
</el-form-item>
<el-form-item>
<div>
<span>{{ $t('dataset.data_preview') }}</span>
<span style="font-size: 12px;color: #3d4d66;">{{ $t('dataset.preview_100_data') }}</span>
</div>
<!-- <span style="margin-left: 8px;">-->
<!-- <span v-if="field.fieldType === 'TEXT'">-->
<!-- <svg-icon v-if="field.fieldType === 'TEXT'" icon-class="field_text" class="field-icon-text" />-->
<!-- <span class="field-class">{{ $t('dataset.text') }}</span>-->
<!-- </span>-->
<!-- <span v-if="field.fieldType === 'DATETIME'">-->
<!-- <svg-icon v-if="field.fieldType === 'DATETIME'" icon-class="field_time" class="field-icon-time" />-->
<!-- <span class="field-class">{{ $t('dataset.time') }}</span>-->
<!-- </span>-->
<!-- <span v-if="field.fieldType === 'LONG' || field.fieldType === 'DOUBLE'">-->
<!-- <svg-icon v-if="field.fieldType === 'LONG' || field.fieldType === 'DOUBLE'" icon-class="field_value" class="field-icon-value" />-->
<!-- <span v-if="field.fieldType === 'LONG'" class="field-class">{{ $t('dataset.value') }}</span>-->
<!-- <span v-if="field.fieldType === 'DOUBLE'" class="field-class">{{ $t('dataset.value') + '(' + $t('dataset.float') + ')' }}</span>-->
<!-- </span>-->
<!-- </span>-->
</span>
<span style="font-size: 12px;margin-left: 10px;">
{{ field.remarks }}
</span>
</span>
<span v-else style="font-size: 12px;">
{{ field.remarks }}
</span>
</template>
</ux-table-column>
</ux-grid>
</div>
</el-card>
</el-form-item>
</el-form>
</el-col>
</el-row>
</el-header>
<el-main>
<div class="text item" >
<ux-grid
ref="plxTable"
size="mini"
style="width: 100%;"
:height="height"
:checkbox-config="{highlight: true}"
:width-resize="true"
>
<ux-table-column
v-for="field in sheetObj.fields"
:key="field.fieldName"
min-width="200px"
:field="field.fieldName"
:title="field.remarks"
:resizable="true"
>
<template slot="header" slot-scope="scope">
<span style="display: flex;align-items: center;">
<span style="display: inline-block;font-size: 12px;">
<div style="display: inline-block;">
<el-select v-model="field.fieldType" size="mini" style="display: inline-block;width: 120px;" @change="changeDatasetName">
<el-option
v-for="item in fieldOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
<span style="float: left">
<svg-icon v-if="item.value === 'TEXT'" icon-class="field_text" class="field-icon-text" />
<svg-icon v-if="item.value === 'DATETIME'" icon-class="field_time" class="field-icon-time" />
<svg-icon v-if="item.value === 'LONG' || item.value === 'DOUBLE'" icon-class="field_value" class="field-icon-value" />
</span>
<span style="float: left; color: #8492a6; font-size: 12px">{{ item.label }}</span>
</el-option>
</el-select>
</div>
</span>
<span style="font-size: 12px;margin-left: 10px;">
{{ field.remarks }}
</span>
</span>
<!-- <span v-else style="font-size: 12px;">-->
<!-- {{ field.remarks }}-->
<!-- </span>-->
</template>
</ux-table-column>
</ux-grid>
</div>
</el-main>
</el-container>
</el-container>
</el-row>
</el-row>
</el-col>
@ -140,12 +157,15 @@ export default {
tableId: {
type: String,
default: null
},
editType: {
type: Number,
default: 0
}
},
data() {
return {
name: '',
fields: [],
sheetObj: {datasetName: " ", fields: []},
sheets: [],
data: [],
mode: '1',
@ -160,13 +180,18 @@ export default {
{ label: this.$t('dataset.time'), value: 'DATETIME' },
{ label: this.$t('dataset.value'), value: 'LONG' },
{ label: this.$t('dataset.value') + '(' + this.$t('dataset.float') + ')', value: 'DOUBLE' }
]
],
props: {
label: 'excelLable',
children: 'sheets'
},
count: 1,
excelData: []
}
},
watch: {
},
mounted() {
// this.initDataSource()
window.onresize = () => {
this.calHeight()
}
@ -176,13 +201,33 @@ export default {
if (!this.param.tableId) {
this.param.tableId = ''
}
if (!this.param.editType) {
this.param.editType = 0
}
},
methods: {
// initDataSource() {
// listDatasource().then(response => {
// this.options = response.data
// })
// },
handleCheckChange(data, checked, indeterminate) {
},
handleNodeClick(data) {
if(data.sheet){
this.sheetObj = data
this.fields = data.fields
this.jsonArray = data.jsonArray
const datas = this.jsonArray
this.$refs.plxTable.reloadData(datas)
}
},
changeDatasetName(){
for(var i=0;i<this.excelData.length;i++){
if(this.excelData[i].excelId==this.sheetObj.sheetExcelId){
for(var j=0;j<this.excelData[i].sheets.length;j++){
if(this.excelData[i].sheets[j].excelId==this.sheetObj.sheetId){
this.excelData[i].sheets[j] = this.sheetObj
}
}
}
}
},
calHeight() {
const that = this
setTimeout(function() {
@ -204,7 +249,6 @@ export default {
this.data = []
const datas = this.data
this.$refs.plxTable.reloadData(datas)
this.name = ''
this.fileList = []
this.uploading = false
this.$message({
@ -214,52 +258,59 @@ export default {
})
},
uploadSuccess(response, file, fileList) {
this.path = response.data.path
this.fields = response.data.fields
this.sheets = response.data.sheets
if (this.sheets.length > 1) {
this.$warning(this.$t('dataset.sheet_warn'))
}
this.data = response.data.data
const datas = this.data
this.$refs.plxTable.reloadData(datas)
if (file.name.lastIndexOf('.') > 0) {
this.name = file.name.substring(0, file.name.lastIndexOf('.'))
}
this.excelData.push(response.data)
this.fileList = fileList
this.uploading = false
},
save() {
if (!this.name || this.name === '') {
this.$message({
showClose: true,
message: this.$t('dataset.pls_input_name'),
type: 'error'
})
var validate = true;
var selectedSheet = []
var sheetFileMd5 = []
var selectNode = this.$refs.tree.getCheckedNodes()
for(var i=0;i<selectNode.length;i++){
if(selectNode[i].sheet){
if (!selectNode[i].datasetName || selectNode[i].datasetName === '') {
validate = false
this.$message({
showClose: true,
message: this.$t('dataset.pls_input_name'),
type: 'error'
})
return
}
if (selectNode[i].datasetName.length > 50) {
validate = false
this.$message({
showClose: true,
message: this.$t('dataset.char_can_not_more_50'),
type: 'error'
})
return
}
selectedSheet.push(selectNode[i])
sheetFileMd5.push(selectNode[i].fieldsMd5)
}
}
if(selectedSheet.length == 0){
this.$message.warning(this.$t('dataset.ple_select_excel'))
return
}
if (this.name.length > 50) {
this.$message({
showClose: true,
message: this.$t('dataset.char_can_not_more_50'),
type: 'error'
})
return
if(!validate){
return;
}
let table = {}
if (!this.param.tableId) {
table = {
id: this.param.tableId,
name: this.name,
sceneId: this.param.id,
dataSourceId: null,
type: 'excel',
sheets: selectedSheet,
mode: parseInt(this.mode),
// info: '{"data":"' + this.path + '"}',
info: JSON.stringify({ data: this.path, sheets: [this.sheets[0]] }),
fields: this.fields
editType: 0
}
} else {
table = {
@ -268,22 +319,42 @@ export default {
sceneId: this.param.id,
dataSourceId: null,
type: 'excel',
sheets: selectedSheet,
mode: parseInt(this.mode),
// info: '{"data":"' + this.path + '"}',
info: JSON.stringify({ data: this.path, sheets: [this.sheets[0]] }),
editType: this.param.editType ? this.param.editType : 0
}
}
post('/dataset/table/update', table).then(response => {
// this.$store.dispatch('dataset/setSceneData', new Date().getTime())
this.$emit('saveSuccess', table)
this.cancel()
})
if(new Set(sheetFileMd5).size !== sheetFileMd5.length && !this.param.tableId){
this.$confirm(this.$t('dataset.merge_msg'), this.$t('dataset.merge_title'), {
confirmButtonText: this.$t('dataset.merge'),
cancelButtonText: this.$t('dataset.no_merge'),
type: 'info'
}).then(() => {
table.mergeSheet = true
post('/dataset/table/update', table).then(response => {
this.$emit('saveSuccess', table)
this.cancel()
})
}).catch(action => {
if(action == 'cancle'){
return
}
table.mergeSheet = false
post('/dataset/table/update', table).then(response => {
this.$emit('saveSuccess', table)
this.cancel()
})
});
}else {
post('/dataset/table/update', table).then(response => {
this.$emit('saveSuccess', table)
this.cancel()
})
}
},
cancel() {
this.dataReset()
// this.$router.push('/dataset/home')
if (this.param.tableId) {
this.$emit('switchComponent', { name: 'ViewTable', param: this.param.table })
} else {
@ -337,4 +408,14 @@ export default {
.dataPreview>>>.el-card__body{
padding:10px;
}
.el-header {
background-color: rgb(241, 243, 248);
color: #333;
line-height: 30px;
}
.el-main {
padding: 0px
}
</style>

View File

@ -1,7 +1,7 @@
<template>
<div style="height: 100%;">
<link-error v-if="showIndex===0" :resource-id="resourceId" />
<link-pwd v-if="showIndex===1" :resource-id="resourceId" />
<link-pwd v-if="showIndex===1" :resource-id="resourceId" @fresh-token="refreshToken" />
<link-view v-if="showIndex===2" :resource-id="resourceId" />
</div>
</template>
@ -49,6 +49,9 @@ export default {
this.showError()
})
},
refreshToken() {
this.loadInit()
},
//
showError() {

View File

@ -96,7 +96,8 @@ export default {
if (!res.data) {
this.msg = this.$t('pblink.pwd_error')
} else {
window.location.reload()
// window.location.reload()
this.$emit('fresh-token')
}
})
})

View File

@ -8,6 +8,8 @@
import { loadResource } from '@/api/link'
import { uuid } from 'vue-uuid'
import Preview from '@/components/canvas/components/Editor/Preview'
import { getPanelAllLinkageInfo } from '@/api/panel/linkage'
export default {
name: 'LinkView',
components: { Preview },
@ -29,6 +31,10 @@ export default {
methods: {
setPanelInfo() {
loadResource(this.resourceId).then(res => {
//
getPanelAllLinkageInfo(this.resourceId).then(rsp => {
this.$store.commit('setNowPanelTrackInfo', rsp.data)
})
this.$store.commit('setComponentData', this.resetID(JSON.parse(res.data.panelData)))
// this.$store.commit('setComponentData', JSON.parse(res.data.panelData))
this.$store.commit('setCanvasStyle', JSON.parse(res.data.panelStyle))

View File

@ -267,7 +267,7 @@ export default {
height: 24px;
position: relative;
flex-shrink: 0;
font-size: 24px;
font-size: 24px!important;
margin: auto;
font-family: fineui;
font-style: normal;

View File

@ -37,13 +37,22 @@
>
<span slot-scope="{ node, data }" class="custom-tree-node-list father">
<span style="display: flex;flex: 1;width: 0;">
<span v-if="data.type !== 'folder'">
<span v-if="data.type !== 'folder' && data.status !== 'Error'">
<svg-icon icon-class="datasource" class="ds-icon-scene" />
</span>
<span v-if="data.status === 'Error'">
<svg-icon icon-class="exclamationmark" class="ds-icon-scene" />
<el-tooltip v-if="data.status === 'Error'" style="margin-left: 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;" effect="dark" :content="$t('datasource.in_valid')" placement="right">
<el-button type="text" > {{ data.name }} </el-button>
</el-tooltip>
</span>
<span v-if="data.type === 'folder'">
<i class="el-icon-folder" />
</span>
<span style="margin-left: 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">{{ data.name }}</span>
<span v-if=" data.status !== 'Error'" style="margin-left: 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">
{{ data.name }}
</span>
</span>
<span class="child">
<span v-if="data.type ==='folder'" @click.stop>
@ -67,24 +76,6 @@
@click="_handleDelete(data)"
/>
</span>
<!-- <el-dropdown trigger="click" size="small" @command="clickFileMore">
<span class="el-dropdown-link">
<el-button
icon="el-icon-more"
type="text"
size="small"
/>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item icon="el-icon-edit" :command="beforeClickFile('edit',data,node)">
{{ $t('panel.edit') }}
</el-dropdown-item>
<el-dropdown-item icon="el-icon-delete" :command="beforeClickFile('delete',data,node)">
{{ $t('panel.delete') }}
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown> -->
</span>
</span>
</span>

View File

@ -208,8 +208,9 @@ export default {
{ label: this.$t('commons.disable'), value: '0' }
],
multiple: false
}
// { field: 'deptId', label: '', component: conditionTable }
},
{ field: 'd.name', label: this.$t('commons.organization'), component: 'DeComplexInput' },
{ field: 'r.name', label: this.$t('commons.role'), component: 'DeComplexInput' }
]
},
paginationConfig: {