Authored by 王涛

AJ功能优化

package com.anjiplus.template.gaea.business.modules.dataset.service.impl;
import cn.hutool.json.JSONUtil;
... ... @@ -42,8 +41,8 @@ import java.util.Map;
import java.util.stream.Collectors;
/**
* @desc DataSet 数据集服务实现
* @author Raod
* @desc DataSet 数据集服务实现
* @date 2021-03-18 12:11:31.150755900
**/
@Service
... ... @@ -99,11 +98,7 @@ public class DataSetServiceImpl implements DataSetService {
public DataSetDto getDetailSet(DataSetDto dto, String setCode) {
//查询参数
List<DataSetParam> dataSetParamList = dataSetParamService.list(
new QueryWrapper<DataSetParam>()
.lambda()
.eq(DataSetParam::getSetCode, setCode)
);
List<DataSetParam> dataSetParamList = dataSetParamService.list(new QueryWrapper<DataSetParam>().lambda().eq(DataSetParam::getSetCode, setCode));
List<DataSetParamDto> dataSetParamDtoList = new ArrayList<>();
dataSetParamList.forEach(dataSetParam -> {
DataSetParamDto dataSetParamDto = new DataSetParamDto();
... ... @@ -114,12 +109,7 @@ public class DataSetServiceImpl implements DataSetService {
//数据转换
List<DataSetTransform> dataSetTransformList = dataSetTransformService.list(
new QueryWrapper<DataSetTransform>()
.lambda()
.eq(DataSetTransform::getSetCode, setCode)
.orderByAsc(DataSetTransform::getOrderNum)
);
List<DataSetTransform> dataSetTransformList = dataSetTransformService.list(new QueryWrapper<DataSetTransform>().lambda().eq(DataSetTransform::getSetCode, setCode).orderByAsc(DataSetTransform::getOrderNum));
List<DataSetTransformDto> dataSetTransformDtoList = new ArrayList<>();
dataSetTransformList.forEach(dataSetTransform -> {
DataSetTransformDto dataSetTransformDto = new DataSetTransformDto();
... ... @@ -134,22 +124,22 @@ public class DataSetServiceImpl implements DataSetService {
boolean isObj = JSONUtil.isJsonObj(caseResult);
JSONArray jsonArray = null;
JSONObject jsonObject = null;
if(isObj){
if (isObj) {
JSONObject result = JSONObject.parseObject(caseResult);
Object data = result.get("data");
if (data instanceof JSONObject) {
jsonObject = (JSONObject)data;
jsonObject = (JSONObject) data;
} else {
jsonArray = jsonObject.getJSONArray("data");
jsonObject = jsonArray.getJSONObject(0);
}
} else {
jsonArray = JSONArray.parseArray(caseResult);
jsonObject = jsonArray.getJSONObject(0);
jsonArray = JSONArray.parseArray(caseResult);
jsonObject = jsonArray.getJSONObject(0);
}
dto.setSetParamList(jsonObject.keySet());
} catch (Exception e) {
log.error("error",e);
log.error("error", e);
}
}
return dto;
... ... @@ -215,18 +205,10 @@ public class DataSetServiceImpl implements DataSetService {
deleteById(id);
//2.删除查询参数
dataSetParamService.delete(
new QueryWrapper<DataSetParam>()
.lambda()
.eq(DataSetParam::getSetCode, setCode)
);
dataSetParamService.delete(new QueryWrapper<DataSetParam>().lambda().eq(DataSetParam::getSetCode, setCode));
//3.删除数据转换
dataSetTransformService.delete(
new QueryWrapper<DataSetTransform>()
.lambda()
.eq(DataSetTransform::getSetCode, setCode)
);
dataSetTransformService.delete(new QueryWrapper<DataSetTransform>().lambda().eq(DataSetTransform::getSetCode, setCode));
}
/**
... ... @@ -242,51 +224,61 @@ public class DataSetServiceImpl implements DataSetService {
String setCode = dto.getSetCode();
//1.获取数据集、参数替换、数据转换
DataSetDto dataSetDto = detailSet(setCode);
log.info("数据集详情:{}",dataSetDto);
log.info("数据集详情:{}", dataSetDto);
String dynSentence = dataSetDto.getDynSentence();
//2.获取数据源
DataSource dataSource;
if (StringUtils.isNotBlank(dataSetDto.getSetType())
&& dataSetDto.getSetType().equals(SetTypeEnum.HTTP.getCodeValue())) {
if (StringUtils.isNotBlank(dataSetDto.getSetType()) && dataSetDto.getSetType().equals(SetTypeEnum.HTTP.getCodeValue())) {
//http不需要数据源,兼容已有的逻辑,将http所需要的数据塞进DataSource
dataSource = new DataSource();
dataSource.setSourceConfig(dynSentence);
dataSource.setSourceType(JdbcConstants.HTTP);
String body = JSONObject.parseObject(dynSentence).getString("body");
JSONObject jsonObject = JSONObject.parseObject(dynSentence);
String body = jsonObject.getString("body");
if (StringUtils.isNotBlank(body)) {
dynSentence = body;
}else {
// 替换动态参数,body中的内容与传入的参数比较,有相同的key则替换
Map<String, Object> contextData = dto.getContextData();
if (contextData != null && !contextData.isEmpty()) {
JSONObject bodyObj = jsonObject.getJSONObject("body");
bodyObj.forEach((k, v) -> {
Object o = contextData.get(k);
if (o != null) {
bodyObj.put(k, o);
}
});
dynSentence = bodyObj.toJSONString();
} else{
dynSentence = body;
}
} else {
dynSentence = "{}";
}
}else {
dataSource = dataSourceService.selectOne("source_code", dataSetDto.getSourceCode());
} else {
dataSource = dataSourceService.selectOne("source_code", dataSetDto.getSourceCode());
}
log.info("数据源详情:{}",dataSource);
log.info("数据源详情:{}", dataSource);
//3.参数替换
//3.1参数校验
log.info("参数校验替换前:{}", dto.getContextData());
// log.info("参数校验替换前:{}", dto.getContextData());
boolean verification = dataSetParamService.verification(dataSetDto.getDataSetParamDtoList(), dto.getContextData());
if (!verification) {
throw BusinessExceptionBuilder.build(ResponseCode.RULE_FIELDS_CHECK_ERROR);
}
dynSentence = dataSetParamService.transform(dto.getContextData(), dynSentence);
log.info("参数校验替换后:{}", dynSentence);
// log.info("参数校验替换后:{}", dynSentence);
//4.获取数据
DataSourceDto dataSourceDto = new DataSourceDto();
BeanUtils.copyProperties(dataSource, dataSourceDto);
dataSourceDto.setDynSentence(dynSentence);
dataSourceDto.setContextData(dto.getContextData());
//获取total,判断contextData中是否传入分页参数
if (null != dto.getContextData()
&& dto.getContextData().containsKey("pageNumber")
&& dto.getContextData().containsKey("pageSize")) {
if (null != dto.getContextData() && dto.getContextData().containsKey("pageNumber") && dto.getContextData().containsKey("pageSize")) {
long total = dataSourceService.total(dataSourceDto, dto);
originalDataDto.setTotal(total);
}
log.info("获取的数据:{}", dataSourceDto);
List<JSONObject> data = dataSourceService.execute(dataSourceDto);
//5.数据转换
List<JSONObject> transform = dataSetTransformService.transform(dataSetDto.getDataSetTransformDtoList(), data);
... ... @@ -314,12 +306,12 @@ public class DataSetServiceImpl implements DataSetService {
String body = JSONObject.parseObject(dynSentence).getString("body");
if (StringUtils.isNotBlank(body)) {
dynSentence = body;
}else {
} else {
dynSentence = "{}";
}
}else {
dataSource = dataSourceService.selectOne("source_code", sourceCode);
} else {
dataSource = dataSourceService.selectOne("source_code", sourceCode);
}
//3.参数替换
... ... @@ -360,18 +352,13 @@ public class DataSetServiceImpl implements DataSetService {
@Override
public List<DataSet> queryAllDataSet() {
LambdaQueryWrapper<DataSet> wrapper = Wrappers.lambdaQuery();
wrapper.select(DataSet::getSetCode, DataSet::getSetName, DataSet::getSetDesc, DataSet::getId)
.eq(DataSet::getEnableFlag, Enabled.YES.getValue());
wrapper.select(DataSet::getSetCode, DataSet::getSetName, DataSet::getSetDesc, DataSet::getId).eq(DataSet::getEnableFlag, Enabled.YES.getValue());
wrapper.orderByDesc(DataSet::getUpdateTime);
return dataSetMapper.selectList(wrapper);
}
public void dataSetParamBatch(List<DataSetParamDto> dataSetParamDtoList,String setCode){
dataSetParamService.delete(
new QueryWrapper<DataSetParam>()
.lambda()
.eq(DataSetParam::getSetCode, setCode)
);
public void dataSetParamBatch(List<DataSetParamDto> dataSetParamDtoList, String setCode) {
dataSetParamService.delete(new QueryWrapper<DataSetParam>().lambda().eq(DataSetParam::getSetCode, setCode));
if (null == dataSetParamDtoList || dataSetParamDtoList.size() <= 0) {
return;
}
... ... @@ -388,12 +375,8 @@ public class DataSetServiceImpl implements DataSetService {
}
public void dataSetTransformBatch(List<DataSetTransformDto> dataSetTransformDtoList,String setCode){
dataSetTransformService.delete(
new QueryWrapper<DataSetTransform>()
.lambda()
.eq(DataSetTransform::getSetCode, setCode)
);
public void dataSetTransformBatch(List<DataSetTransformDto> dataSetTransformDtoList, String setCode) {
dataSetTransformService.delete(new QueryWrapper<DataSetTransform>().lambda().eq(DataSetTransform::getSetCode, setCode));
if (null == dataSetTransformDtoList || dataSetTransformDtoList.size() <= 0) {
return;
}
... ... @@ -412,10 +395,11 @@ public class DataSetServiceImpl implements DataSetService {
/**
* dataSetParamDtoList转map
*
* @param dataSetParamDtoList
* @return
*/
public Map<String, Object> setContextData(List<DataSetParamDto> dataSetParamDtoList){
public Map<String, Object> setContextData(List<DataSetParamDto> dataSetParamDtoList) {
Map<String, Object> map = new HashMap<>();
if (null != dataSetParamDtoList && dataSetParamDtoList.size() > 0) {
dataSetParamDtoList.forEach(dataSetParamDto -> map.put(dataSetParamDto.getParamName(), dataSetParamDto.getSampleItem()));
... ...
... ... @@ -323,6 +323,7 @@ public class DataSourceServiceImpl implements DataSourceService {
ResponseEntity<Object> exchange;
List<JSONObject> result = new ArrayList<>();
try {
log.info("== 发送请求:\n\t\t apiUrl:{}\n\t\t httpMethod:{}\n\t\t entity:{}\n\t\t ",apiUrl, httpMethod, dto.getDynSentence());
exchange = restTemplate.exchange(apiUrl, httpMethod, entity, Object.class);
} catch (HttpClientErrorException error) {
int rawStatusCode = error.getRawStatusCode();
... ...
... ... @@ -4,8 +4,11 @@ const prodEnv = require('./prod.env')
module.exports = merge(prodEnv, {
NODE_ENV: '"development"',
BASE_API: '"http://192.168.0.59:9095"',
MONITOR_GATEWAY: '"http://192.168.0.59:8080"'
BASE_API: '"https://69.12.93.116:8089"',
MONITOR_GATEWAY: '"https://69.12.93.116:8080"'
// BASE_API: '"http://127.0.0.1:8089"',
// MONITOR_GATEWAY: '"http://127.0.0.1:8080"'
/*BASE_API: '"http://192.168.0.75:9095"',
MONITOR_GATEWAY: '"http://192.168.0.75:8080"'*/
/* BASE_API: '"https://192.168.0.248:8089"',
... ...
... ... @@ -23,6 +23,11 @@ import 'echarts/lib/component/tooltip'
// import 'echarts-gl'
Vue.component('v-chart', ECharts)
import echartsbd from 'echarts';
Vue.prototype.$echarts=echartsbd;
Vue.use(echartsbd)
// anji component
import anjiCrud from '@/components/AnjiPlus/anji-crud/anji-crud'
import anjiSelect from '@/components/AnjiPlus/anji-select'
... ...
export default {
data() {
return {
options: {},
optionsSetUp: {},
optionsPosition: {},
optionsData: {},
id: (new Date()).getTime(),
}
},
props: {
value: Object,
ispreview: Boolean
},
watch: {
value: {
handler(val) {
this.options = val;
this.optionsSetUp = val.setup;
this.optionsPosition = val.position;
this.reloadChart();
},
deep: true
}
},
mounted() {
this.options = this.value;
this.optionsSetUp = this.value.setup;
this.optionsPosition = this.value.position;
},
methods: {
/**
* 获取x天后的日期
* @param day
* @returns {string} yyyy-MM-mm
*/
getData(day) {
var doHandMonth = (month) => {
var m = month
if (month.toString().length == 1) {
m = "0" + month
}
return m
}
var today = new Date()
var targetday = today.getTime() + 1000 * 60 * 60 * 24 * day
today.setTime(targetday)
var tYear = today.getFullYear()
var tMonth = today.getMonth()
var tDate = today.getDate()
tMonth = doHandMonth(tMonth + 1)
tDate = doHandMonth(tDate)
return tYear + "-" + tMonth + "-" + tDate
},
/**
* 获取URL所有的参数
*/
getUrlParam() {
let url = window.location.href;
let arrObj = url.split("?");
let params = Object.create(null)
if (arrObj.length > 1) {
arrObj = arrObj[1].split("&");
arrObj.forEach(item => {
item = item.split("=");
params[item[0]] = item[1]
})
}
return params;
},
/**
* 请求接口数据
* @returns {Promise<unknown>}
*/
handlerData(params) {
let that = this;
const optionsData = this.value.data;
if (optionsData.dynamicData) {
let contextData = optionsData.dynamicData.contextData;
// 合并url参数
let paramsObj = that.getUrlParam();
if (paramsObj) {
for (let key of Object.keys(paramsObj)) {
let paramVal = paramsObj[key];
contextData[key] = paramVal;
}
}
// 合并自定义的参数
if (params) {
for (let key of Object.keys(params)) {
let paramVal = params[key];
contextData[key] = paramVal;
}
}
}
return new Promise(async (resolve) => {
that.queryEchartsData(
optionsData.dynamicData,
optionsData.refreshTime,
that.optionsSetup,
optionsData.isRefresh
).then(res => {
let data = res[0];
if (data && (data.code == 200 || data.code == 0)) {
resolve(data);
} else if (data && data.code == 401) {
console.log('token过期,请重新登录!', data);
}
});
})
},
}
}
... ...
/**
* 积木报表按钮跳转到积木报表
*/
export const monitorAjButton = {
code: 'monitor-aj-button',
type: 'html',
label: 'AJ报表',
icon: 'iconbiaoge',
options: {
setup: [
{
type: 'el-input-text',
label: '图层名称',
name: 'layerName',
required: false,
placeholder: '',
value: 'AJ报表按钮',
},
{
type: 'el-input-text',
label: '按钮文本',
name: 'buttonText',
required: false,
placeholder: '',
value: '报表',
},
{
type: 'el-input-text',
label: '报表编号',
name: 'ajCode',
required: false,
placeholder: '',
value: ''
},
{
type: 'el-input-text',
label: '指标Id',
name: 'kpiId',
required: false,
placeholder: '',
value: ''
},
{
type: 'el-input-text',
label: 'flag',
name: 'flag',
required: false,
placeholder: '',
value: ''
}
],
data: [],
position: [
{
type: 'el-input-number',
label: '左边距',
name: 'left',
required: false,
placeholder: '',
value: 0,
},
{
type: 'el-input-number',
label: '上边距',
name: 'top',
required: false,
placeholder: '',
value: 0,
},
{
type: 'el-input-number',
label: '宽度',
name: 'width',
required: false,
placeholder: '该容器在1920px大屏中的宽度',
value: 30,
},
{
type: 'el-input-number',
label: '高度',
name: 'height',
required: false,
placeholder: '该容器在1080px大屏中的高度',
value: 30,
},
],
}
}
... ...
/**
* 忙时分析页面
*/
export const monitorJimuButton = {
code: 'monitor-busy-analysis',
type: 'html',
label: '忙时分析报表',
icon: 'iconbiaoge',
options: {
setup: [
{
type: 'el-input-text',
label: '图层名称',
name: 'layerName',
required: false,
placeholder: '',
value: '忙时分析报表',
},
{
type: 'el-input-text',
label: '按钮文本',
name: 'buttonText',
required: false,
placeholder: '',
value: '报表',
},
{
type: 'el-input-text',
label: '报表编号',
name: 'reportCode',
required: false,
placeholder: '',
value: ''
},
{
type: 'el-input-text',
label: '指标Id',
name: 'kpiId',
required: false,
placeholder: '',
value: ''
},
{
type: 'el-input-text',
label: 'flag',
name: 'flag',
required: false,
placeholder: '',
value: ''
}
],
data: [],
position: [
{
type: 'el-input-number',
label: '左边距',
name: 'left',
required: false,
placeholder: '',
value: 0,
},
{
type: 'el-input-number',
label: '上边距',
name: 'top',
required: false,
placeholder: '',
value: 0,
},
{
type: 'el-input-number',
label: '宽度',
name: 'width',
required: false,
placeholder: '该容器在1920px大屏中的宽度',
value: 30,
},
{
type: 'el-input-number',
label: '高度',
name: 'height',
required: false,
placeholder: '该容器在1080px大屏中的高度',
value: 30,
},
],
}
}
... ...
/**
* 三点图
*/
export const monitorCustomScatterWeight = {
code: 'monitor-custom-scatter-weight',
type: 'chart',
label: '散点图',
icon: 'iconduidietu',
options: {
// 配置
setup: [
{
type: 'el-input-text',
label: '图层名称',
name: 'layerName',
required: false,
placeholder: '',
value: '散点图',
},
{
type: 'el-switch',
label: '是否刷新',
name: 'isRefresh',
relactiveDom: 'dataType',
relactiveDomValue: 'dynamicData',
value: false
},
{
type: 'el-switch',
label: '竖展示',
name: 'verticalShow',
required: false,
placeholder: '',
value: false,
},
{
type: 'vue-color',
label: '背景颜色',
name: 'background',
required: false,
placeholder: '',
value: ''
},
{
type: 'el-select',
label: 'kpiId',
name: 'kpiId',
required: false,
placeholder: '',
selectOptions: [
{code: 'KPI449F5365', name: 'KPI449F5365(文件系统使用率)'},
{code: 'KPI97373ED0', name: 'KPI97373ED0(磁盘IO读速率)'},
{code: 'KPI95378FE0', name: 'KPI95378FE0(磁盘IO写速率)'},
{code: 'KPI66BD013F', name: 'KPI66BD013F(磁盘IO处理时间)'},
{code: 'KPI3E6ED38B', name: 'KPI3E6ED38B(磁盘IO响应时间)'}
],
value: 'KPI449F5365',
},
[
{
name: '折线设置',
list: [
{
type: 'el-switch',
label: '标记点',
name: 'markPoint',
required: false,
placeholder: '',
value: true,
},
{
type: 'el-slider',
label: '点大小',
name: 'pointSize',
required: false,
placeholder: '',
value: 6,
},
{
type: 'el-switch',
label: '平滑曲线',
name: 'smoothCurve',
required: false,
placeholder: '',
value: true,
},
{
type: 'el-switch',
label: '面积堆积',
name: 'area',
required: false,
placeholder: '',
value: true,
},
{
type: 'el-slider',
label: '面积厚度',
name: 'areaThickness',
required: false,
placeholder: '',
value: 5,
},
{
type: 'el-slider',
label: '线条宽度',
name: 'lineWidth',
required: false,
placeholder: '',
value: 1,
},
],
},
{
name: '标题设置',
list: [
{
type: 'el-switch',
label: '标题',
name: 'isNoTitle',
required: false,
placeholder: '',
value: true,
},
{
type: 'el-input-text',
label: '标题',
name: 'titleText',
required: false,
placeholder: '',
value: '文件系统使用率',
},
{
type: 'vue-color',
label: '字体颜色',
name: 'textColor',
required: false,
placeholder: '',
value: '#1e9fff'
},
{
type: 'el-select',
label: '字体粗细',
name: 'textFontWeight',
required: false,
placeholder: '',
selectOptions: [
{code: 'normal', name: '正常'},
{code: 'bold', name: '粗体'},
{code: 'bolder', name: '特粗体'},
{code: 'lighter', name: '细体'}
],
value: 'bold'
},
{
type: 'el-input-number',
label: '字体大小',
name: 'textFontSize',
required: false,
placeholder: '',
value: 16
},
{
type: 'el-select',
label: '字体位置',
name: 'textAlign',
required: false,
placeholder: '',
selectOptions: [
{code: 'center', name: '居中'},
{code: 'left', name: '左对齐'},
{code: 'right', name: '右对齐'},
],
value: 'left'
},
{
type: 'el-input-text',
label: '副标题',
name: 'subText',
required: false,
placeholder: '',
value: ''
},
{
type: 'vue-color',
label: '字体颜色',
name: 'subTextColor',
required: false,
placeholder: '',
value: 'rgba(30, 144, 255, 1)'
},
{
type: 'el-select',
label: '字体粗细',
name: 'subTextFontWeight',
required: false,
placeholder: '',
selectOptions: [
{code: 'normal', name: '正常'},
{code: 'bold', name: '粗体'},
{code: 'bolder', name: '特粗体'},
{code: 'lighter', name: '细体'}
],
value: 'normal'
},
{
type: 'el-input-number',
label: '字体大小',
name: 'subTextFontSize',
required: false,
placeholder: '',
value: 20
},
],
},
{
name: 'X轴设置',
list: [
{
type: 'el-switch',
label: '显示',
name: 'hideX',
required: false,
placeholder: '',
value: true,
},
{
type: 'el-input-text',
label: 'X轴别名',
name: 'xName',
required: false,
placeholder: '',
value: ''
},
{
type: 'vue-color',
label: '别名颜色',
name: 'xNameColor',
required: false,
placeholder: '',
value: '#fff'
},
{
type: 'el-input-number',
label: '别名字号',
name: 'xNameFontSize',
required: false,
placeholder: '',
value: 14
},
{
type: 'el-switch',
label: '轴反转',
name: 'reversalX',
required: false,
placeholder: '',
value: false
},
{
type: 'el-slider',
label: '文字角度',
name: 'textAngleX',
required: false,
placeholder: '',
value: 0
},
{
type: 'el-input-number',
label: '文字间隔',
name: 'textInterval',
required: false,
placeholder: '',
value: ''
},
{
type: 'vue-color',
label: '文字颜色',
name: 'Xcolor',
required: false,
placeholder: '',
value: '#666',
},
{
type: 'el-input-number',
label: '文字字号',
name: 'fontSizeX',
required: false,
placeholder: '',
value: 14,
},
{
type: 'vue-color',
label: '轴颜色',
name: 'lineColorX',
required: false,
placeholder: '',
value: '#c9c9c9',
},
{
type: 'el-switch',
label: '分割线显示',
name: 'isShowSplitLineX',
require: false,
placeholder: '',
value: false,
},
{
type: 'vue-color',
label: '分割线颜色',
name: 'splitLineColorX',
required: false,
placeholder: '',
value: '#fff',
},
{
type: 'el-switch',
label: '分割区显示',
name: 'splitArea',
require: false,
placeholder: '',
value: true,
},
{
type: 'vue-color',
label: '分割区颜色',
name: 'splitAreaColor',
required: false,
placeholder: '',
value: 'rgba(200,200,200,0.1)',
},
],
},
{
name: 'Y轴设置',
list: [
{
type: 'el-switch',
label: '显示',
name: 'isShowY',
require: false,
placeholder: '',
value: true,
},
{
type: 'el-input-text',
label: 'Y轴别名',
name: 'textNameY',
require: false,
placeholder: '',
value: ''
},
{
type: 'vue-color',
label: '别名颜色',
name: 'NameColorY',
required: false,
placeholder: '',
value: '#fff',
},
{
type: 'el-input-number',
label: '别名字号',
name: 'NameFontSizeY',
required: false,
placeholder: '',
value: 14,
},
{
type: 'el-switch',
label: '轴反转',
name: 'reversalY',
required: false,
placeholder: '',
value: false
},
{
type: 'el-slider',
label: '文字角度',
name: 'textAngleY',
required: false,
placeholder: '',
value: 0
},
{
type: 'vue-color',
label: '文字颜色',
name: 'colorY',
required: false,
placeholder: '',
value: '#666',
},
{
type: 'el-input-number',
label: '文字字号',
name: 'fontSizeY',
required: false,
placeholder: '',
value: 14,
},
{
type: 'vue-color',
label: '轴颜色',
name: 'lineColorY',
required: false,
placeholder: '',
value: '#c9c9c9',
}, {
type: 'el-switch',
label: '分割线显示',
name: 'isShowSplitLineY',
require: false,
placeholder: '',
value: false,
}, {
type: 'vue-color',
label: '分割线颜色',
name: 'splitLineColorY',
required: false,
placeholder: '',
value: '#fff',
}
],
},
{
name: '数值设定',
list: [
{
type: 'el-switch',
label: '显示',
name: 'isShow',
required: false,
placeholder: '',
value: false
},
{
type: 'el-input-number',
label: '字体大小',
name: 'fontSize',
required: false,
placeholder: '',
value: 14
},
{
type: 'vue-color',
label: '字体颜色',
name: 'subTextColor',
required: false,
placeholder: '',
value: '#666'
},
{
type: 'el-select',
label: '字体粗细',
name: 'fontWeight',
required: false,
placeholder: '',
selectOptions: [
{code: 'normal', name: '正常'},
{code: 'bold', name: '粗体'},
{code: 'bolder', name: '特粗体'},
{code: 'lighter', name: '细体'}
],
value: 'normal'
},
],
},
{
name: '提示语设置',
list: [
{
type: 'el-input-number',
label: '字体大小',
name: 'tipsFontSize',
required: false,
placeholder: '',
value: 16
},
{
type: 'vue-color',
label: '字体颜色',
name: 'lineColor',
required: false,
placeholder: '',
},
],
},
{
name: '坐标轴边距设置',
list: [
{
type: 'el-slider',
label: '左边距(像素)',
name: 'marginLeft',
required: false,
placeholder: '',
value: 10,
}, {
type: 'el-slider',
label: '顶边距(像素)',
name: 'marginTop',
required: false,
placeholder: '',
value: 50,
}, {
type: 'el-slider',
label: '右边距(像素)',
name: 'marginRight',
required: false,
placeholder: '',
value: 40,
}, {
type: 'el-slider',
label: '底边距(像素)',
name: 'marginBottom',
required: false,
placeholder: '',
value: 10,
},
],
},
{
name: '图例操作',
list: [
{
type: 'el-switch',
label: '显示',
name: 'isShowLegend',
required: false,
placeholder: '',
value: true,
},
{
type: 'el-switch',
label: '图例文字显示',
name: 'isShowLegendText',
required: false,
placeholder: '',
value: false,
},
{
type: 'vue-color',
label: '字体颜色',
name: 'lengedColor',
required: false,
placeholder: '',
value: '#666',
},
{
type: 'el-input-number',
label: '字体大小',
name: 'lengedFontSize',
required: false,
placeholder: '',
value: 14,
},
{
type: 'el-input-number',
label: '图例宽度',
name: 'lengedWidth',
required: false,
placeholder: '',
value: 15,
},
{
type: 'el-select',
label: '横向位置',
name: 'lateralPosition',
required: false,
placeholder: '',
selectOptions: [
{code: 'center', name: '居中'},
{code: 'left', name: '左对齐'},
{code: 'right', name: '右对齐'},
],
value: 'center'
},
{
type: 'el-select',
label: '纵向位置',
name: 'longitudinalPosition',
required: false,
placeholder: '',
selectOptions: [
{code: 'top', name: '顶部'},
{code: 'bottom', name: '底部'},
],
value: 'top'
},
{
type: 'el-select',
label: '布局前置',
name: 'layoutFront',
required: false,
placeholder: '',
selectOptions: [
{code: 'vertical', name: '竖排'},
{code: 'horizontal', name: '横排'},
],
value: 'horizontal'
},
],
},
{
name: '自定义配色',
list: [
{
type: 'customColor',
label: '',
name: 'customColor',
required: false,
value: [{color: '#facf5b'}, {color: '#C04DD8'}, {color: '#F5A1EB'}, {color: '#F36093'},
{color: '#C2E74D'},{color:'#3DC3FF'},{color:'#B850ED'}],
},
],
},
],
],
// 数据
data: [
{
type: 'el-radio-group',
label: '数据类型',
name: 'dataType',
require: false,
placeholder: '',
selectValue: true,
selectOptions: [
{
code: 'staticData',
name: '静态数据',
},
{
code: 'dynamicData',
name: '动态数据',
},
],
value: 'staticData',
},
{
type: 'el-input-number',
label: '刷新时间(毫秒)',
name: 'refreshTime',
relactiveDom: 'dataType',
relactiveDomValue: 'dynamicData',
value: 5000
},
{
type: 'el-button',
label: '静态数据',
name: 'staticData',
required: false,
placeholder: '静态数据源',
relactiveDom: 'dataType',
relactiveDomValue: 'staticData',
value: [{
"year": 2022,
"month": 4,
"day": 28,
"hour": 10,
"kpiName": "内存分配率",
"kpiUnit": "%",
"valMin": 67.94,
"valAvg": 67.94,
"valMax": 67.94
}],
},
{
type: 'dycustComponents',
label: '',
name: 'dynamicData',
required: false,
placeholder: '动态数据源',
relactiveDom: 'dataType',
relactiveDomValue: 'dynamicData',
chartType: '',
dictKey: 'STACK_PROPERTIES',
value: '',
},
],
// 坐标
position: [
{
type: 'el-input-number',
label: '左边距',
name: 'left',
required: false,
placeholder: '',
value: 0,
},
{
type: 'el-input-number',
label: '上边距',
name: 'top',
required: false,
placeholder: '',
value: 0,
},
{
type: 'el-input-number',
label: '宽度',
name: 'width',
required: false,
placeholder: '该容器在1920px大屏中的宽度',
value: 400,
},
{
type: 'el-input-number',
label: '高度',
name: 'height',
required: false,
placeholder: '该容器在1080px大屏中的高度',
value: 200,
},
],
}
}
... ...
/**
* 积木报表按钮跳转到积木报表
*/
export const monitorJimuButton = {
code: 'monitor-jimu-button',
type: 'html',
label: '积木报表',
icon: 'iconbiaoge',
options: {
setup: [
{
type: 'el-input-text',
label: '图层名称',
name: 'layerName',
required: false,
placeholder: '',
value: '积木报表按钮',
},
{
type: 'el-input-text',
label: '按钮文本',
name: 'buttonText',
required: false,
placeholder: '',
value: '报表',
},
{
type: 'el-input-text',
label: '报表编号',
name: 'reportCode',
required: false,
placeholder: '',
value: ''
},
{
type: 'el-input-text',
label: '指标Id',
name: 'kpiId',
required: false,
placeholder: '',
value: ''
},
{
type: 'el-input-text',
label: 'flag',
name: 'flag',
required: false,
placeholder: '',
value: ''
}
],
data: [],
position: [
{
type: 'el-input-number',
label: '左边距',
name: 'left',
required: false,
placeholder: '',
value: 0,
},
{
type: 'el-input-number',
label: '上边距',
name: 'top',
required: false,
placeholder: '',
value: 0,
},
{
type: 'el-input-number',
label: '宽度',
name: 'width',
required: false,
placeholder: '该容器在1920px大屏中的宽度',
value: 30,
},
{
type: 'el-input-number',
label: '高度',
name: 'height',
required: false,
placeholder: '该容器在1080px大屏中的高度',
value: 30,
},
],
}
}
... ...
... ... @@ -57,6 +57,9 @@ import {monitorTablePage} from "./echartsConfigJson/monitorConfigJson/monitor-ta
import {monitorButtonExport} from "./echartsConfigJson/monitorConfigJson/monitor-button-export";
import {monitorCustomBarLineChartArray} from "./echartsConfigJson/monitorConfigJson/monitor-custom-bar-line-chart-array";
import {monitorJimuButton} from "./echartsConfigJson/monitorConfigJson/monitor-jimu-button";
import {monitorAjButton} from "./echartsConfigJson/monitorConfigJson/monitor-aj-button";
import {monitorCustomScatterWeight} from "./echartsConfigJson/monitorConfigJson/monitor-custom-scatter-weight";
export const {widgetTool,monitor} = {
widgetTool : [
... ... @@ -132,6 +135,12 @@ export const {widgetTool,monitor} = {
//分页表格
monitorTablePage,
//导出
monitorButtonExport
monitorButtonExport,
// 积木报表按钮,弹框展示
monitorJimuButton,
// AJ报表按钮,弹框展示
monitorAjButton,
// 散点图
monitorCustomScatterWeight
]
}
... ...
... ... @@ -15,7 +15,7 @@
</div>
</div>
<div class="wave-title" :style="subTitleStyle" v-if="index==0">当前使用率</div>
<div class="wave-title" :style="subTitleStyle" v-if="index==1">使用增长率</div>
<div class="wave-title" :style="subTitleStyle" v-if="index==1">{{getIndex2Name()}}</div>
</div>
</div>
... ... @@ -26,6 +26,7 @@
<script>
var per = 60;
import {mapGetters} from "vuex";
export default {
name: "customLiquidFillChart",//百分比图参考:https://www.makeapie.com/editor.html?c=xFkzKG-bpl
components: {},
... ... @@ -121,6 +122,11 @@ export default {
};
},
computed: {
//月季度年按钮通过vuex接收值
...mapGetters(['buttonVals']),
buttonVal(){
return this.buttonVals;
},
styleObj() {
return {
position: this.ispreview ? "absolute" : "static",
... ... @@ -226,6 +232,22 @@ export default {
this.editorOptions();
},
deep: true
},
//监听月季度年按钮切换值
buttonVal:{
handler(val){
// TODO 在存储页面中获取不到,暂时注释掉
//if(this.optionsSetup.isVuex){
let optionsData=this.optionsData;
if(this.optionsData.dataType=="dynamicData"){
//改变参数值-月季度年,重新加载动态数据
this.optionsData.dynamicData.contextData.dataScope=val;
// this.editorOptions();
}
//}
},
deep:true
}
},
created() {
... ... @@ -239,7 +261,21 @@ export default {
},
methods: {
/**
* 获取使用增长率名称
*/
getIndex2Name(){
switch (this.optionsData.dynamicData.contextData.dataScope) {
case 'month':
return "月使用增长率"
case 'quarter':
return '季度使用增长率';
case 'year':
return '年使用增长率';
default:
return "使用增长率"
}
},
editorOptions() {
this.setOptionsData();
},
... ...
<template>
<div :style="styleObj">
<el-button type="primary" size="small" plain @click="openJimuReport">{{optionsSetUp.buttonText}}</el-button>
</div>
</template>
<script>
export default {
name: "monitorAjButton",
data() {
return {
options: {},
optionsSetUp: {},
optionsPosition: {},
optionsData: {},
}
},
components: {},
props: {
value: Object,
ispreview: Boolean
},
computed: {
styleObj() {
const allStyle = this.optionsPosition;
return {
position: this.ispreview ? "absolute" : "static",
width: allStyle.width + "px",
height: allStyle.height + "px",
left: allStyle.left + "px",
top: allStyle.top + "px",
'background-repeat': 'no-repeat',
'background-size': 'contain'
};
},
},
watch: {
value: {
handler(val) {
this.options = val;
this.optionsSetUp = val.setup;
this.optionsPosition = val.position;
// this.handlerData();
},
deep: true
}
},
mounted() {
this.options = this.value;
this.optionsSetUp = this.value.setup;
this.optionsPosition = this.value.position;
},
methods: {
openJimuReport() {
let resId = this.$route.query.resId;
let kpiId = this.optionsSetUp.kpiId;
let flag = this.optionsSetUp.flag;
let reportCode = this.optionsSetUp.ajCode;
let title = this.optionsSetUp.buttonText;
let param = {
type: 'openAJ',
data: {
resId: resId,
kpiId: kpiId,
flag: flag,
reportCode:reportCode,
title:title
}
}
window.parent.postMessage(param, '*')
}
},
}
</script>
<style scoped lang="scss">
.info-title {
padding: 15px;
display: flex;
align-items: center;
}
.icon-title {
margin-right: 5px;
}
</style>
... ...
<template>
<div>
<div :id="id" :style="styleObj"></div>
</div>
</template>
<script>
import commonWeight from '@/mixins/commonWeight'
export default {
name: "monitorCustomScatterWeight",
mixins: [commonWeight],
data() {
return {
chartInfo: null,
scatterWeightOptions: {
title: {
text: '',
subtext: ''
},
grid: {
left: '3%',
right: '7%',
bottom: '7%',
containLabel: true
},
tooltip: {
showDelay: 0,
formatter: function (params) {
return (
params.seriesName +
'<br/>' + params.name + ' ' + params.value[2] + ' :<br/>' +
'最大' + params.value[2] + ': ' + params.value[3] + '% ' + '<br/>' +
'最小' + params.value[2] + ': ' + params.value[4] + '% ' + '<br/>' +
'平均' + params.value[2] + ': ' + params.value[5] + '% ' + '<br/>'
);
},
axisPointer: {
show: true,
type: 'cross',
lineStyle: {
type: 'dashed',
width: 1
}
}
},
toolbox: {
feature: {
dataZoom: {},
brush: {
type: ['rect', 'polygon', 'clear']
}
}
},
brush: {},
legend: {
data: ['忙时', '闲时'],
left: 'center',
bottom: 10
},
xAxis: [
{
data: []/*['2022-5-13 10:00:00', '2022-5-13 11:00:00', '2022-5-13 12:00:00']*/,
scale: true,
axisLabel: {
formatter: function (v) {
return v;
}
},
splitLine: {
show: false
}
}
],
yAxis: [
{
data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23],
scale: true,
axisLabel: {
formatter: '{value} 时'
},
splitLine: {
show: false
}
}
],
series: [
{
name: '忙时',
type: 'scatter',
emphasis: {
focus: 'series'
},
data: [
/*['2022-5-13 10:00:00', 10, 'CPU使用率', 100, 111, 120],
['2022-5-13 10:00:00', 11, 'CPU使用率', 100, 111, 120],
['2022-5-13 10:00:00', 12, 'CPU使用率', 100, 111, 120],*/
]
},
{
name: '闲时',
type: 'scatter',
emphasis: {
focus: 'series'
},
data: [
/*['2022-5-13 11:00:00', 20, 'CPU使用率', 100, 111, 120],
['2022-5-13 12:00:00', 21, 'CPU使用率', 100, 111, 120],
['2022-5-13 10:00:00', 22, 'CPU使用率', 100, 111, 120],*/
]
}
]
}
}
},
components: {},
computed: {
styleObj() {
const allStyle = this.optionsPosition;
return {
width: allStyle.width + "px",
height: allStyle.height + "px"
};
},
},
mounted() {
this.initChart();
},
methods: {
/**
* 重新加载图表
*
* */
reloadChart() {
if (this.chartInfo) {
// 重新加载数据
this.getChartData();
// 重新设置数据、
this.chartInfo.setOption(this.scatterWeightOptions);
// 刷新图表大小
this.chartInfo.resize();
}
},
/**
* 获取图表数据
*/
getChartData() {
let that = this;
var startTime = that.getData(-30) + " 00:00:00";
var endTime = that.getData(0) + " 23:59:59";
// 默认条件
let defaultParams = {
indexName: 'calculation-search',
startTime: startTime,
endTime: endTime,
pageSize: 1000
}
that.handlerData(defaultParams).then((res) => {
let list = res.data;
let busyArr = [];
let idleArr = [];
let xAxis = [];
if (list) {
list.map(function (v) {
let time = `${v.year}-${v.month}-${v.day} ${v.hour}:00:00`;
let arr = [time, v.hour, v.kpiName, v.valMax, v.valMin, v.valAvg];
xAxis.push(time);
if (v.isBusy) {
// 忙时点
busyArr.push(arr);
} else {
idleArr.push(arr);
}
});
that.scatterWeightOptions.xAxis[0].data = xAxis;
that.scatterWeightOptions.series[0].data = busyArr;
that.scatterWeightOptions.series[1].data = idleArr;
}
}).catch((e) => {
console.log('处理错误', e);
let date = new Date();
let year = date.getFullYear(); //获取当前年
let month = date.getMonth() + 1; //获取当前月
let day = date.getDate(); //获取当前日
let ymd = `${year}-${month}-${day}`;
for (let i = 0; i < 24; i++) {
xAxis.push(`${ymd} ${i}:00:00`);
}
that.scatterWeightOptions.xAxis[0].data = xAxis;
that.scatterWeightOptions.series[0].data = busyArr;
that.scatterWeightOptions.series[1].data = idleArr;
})
},
initChart() {
let that = this;
that.getChartData();
setTimeout(function () {
var myChart = that.$echarts.init(document.getElementById(that.id));
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(that.scatterWeightOptions);
that.chartInfo = myChart;
}, 1000);
}
}
}
</script>
<style scoped>
</style>
... ...
<template>
<div :style="styleObj">
<el-button type="primary" size="small" plain @click="openJimuReport">{{optionsSetUp.buttonText}}</el-button>
</div>
</template>
<script>
export default {
name: "monitorJimuButton",
data() {
return {
options: {},
optionsSetUp: {},
optionsPosition: {},
optionsData: {},
}
},
components: {},
props: {
value: Object,
ispreview: Boolean
},
computed: {
styleObj() {
const allStyle = this.optionsPosition;
return {
position: this.ispreview ? "absolute" : "static",
width: allStyle.width + "px",
height: allStyle.height + "px",
left: allStyle.left + "px",
top: allStyle.top + "px",
'background-repeat': 'no-repeat',
'background-size': 'contain'
};
},
},
watch: {
value: {
handler(val) {
this.options = val;
this.optionsSetUp = val.setup;
this.optionsPosition = val.position;
// this.handlerData();
},
deep: true
}
},
mounted() {
this.options = this.value;
this.optionsSetUp = this.value.setup;
this.optionsPosition = this.value.position;
},
methods: {
openJimuReport() {
let resId = this.$route.query.resId;
let kpiId = this.optionsSetUp.kpiId;
let flag = this.optionsSetUp.flag;
let reportCode = this.optionsSetUp.reportCode;
let title = this.optionsSetUp.buttonText;
let param = {
type: 'openJimu',
data: {
resId: resId,
kpiId: kpiId,
flag: flag,
reportCode:reportCode,
title:title
}
}
window.parent.postMessage(param, '*')
}
},
}
</script>
<style scoped lang="scss">
.info-title {
padding: 15px;
display: flex;
align-items: center;
}
.icon-title {
margin-right: 5px;
}
</style>
... ...
<template>
<div :id="id" :style="styleObj"></div>
</template>
<script>
export default {
name: "busyAnalysisPage",
data() {
return {
options: {},
optionsSetUp: {},
optionsPosition: {},
optionsData: {},
id:(new Date()).getTime(),
chartInfo:null,
scatterWeightOptions: {
title: {
text: '散点图',
subtext: '二级标题描述'
},
grid: {
left: '3%',
right: '7%',
bottom: '7%',
containLabel: true
},
tooltip: {
showDelay: 0,
formatter: function (params) {
if (params.value.length > 1) {
return (
params.seriesName +
' :<br/>' +
params.value[0] +
'cm ' +
params.value[1] +
'kg '
);
} else {
return (
params.seriesName +
' :<br/>' +
params.name +
' : ' +
params.value +
'kg '
);
}
},
axisPointer: {
show: true,
type: 'cross',
lineStyle: {
type: 'dashed',
width: 1
}
}
},
toolbox: {
feature: {
dataZoom: {},
brush: {
type: ['rect', 'polygon', 'clear']
}
}
},
brush: {},
legend: {
data: ['Female', 'Male'],
left: 'center',
bottom: 10
},
xAxis: [
{
type: 'value',
scale: true,
axisLabel: {
formatter: '{value} cm'
},
splitLine: {
show: false
}
}
],
yAxis: [
{
type: 'value',
scale: true,
axisLabel: {
formatter: '{value} kg'
},
splitLine: {
show: false
}
}
],
series: [
{
name: 'Female',
type: 'scatter',
emphasis: {
focus: 'series'
},
// prettier-ignore
data: [[161.2, 51.6], [167.5, 59.0], [159.5, 49.2], [157.0, 63.0], [155.8, 53.6],
[170.0, 59.0], [159.1, 47.6], [166.0, 69.8], [176.2, 66.8], [160.2, 75.2],
[172.5, 55.2], [170.9, 54.2], [172.9, 62.5], [153.4, 42.0], [160.0, 50.0],
[147.2, 49.8], [168.2, 49.2], [175.0, 73.2], [157.0, 47.8], [167.6, 68.8],
[159.5, 50.6], [175.0, 82.5], [166.8, 57.2], [176.5, 87.8], [170.2, 72.8],
[174.0, 54.5], [173.0, 59.8], [179.9, 67.3], [170.5, 67.8], [160.0, 47.0],
[154.4, 46.2], [162.0, 55.0], [176.5, 83.0], [160.0, 54.4], [152.0, 45.8],
[162.1, 53.6], [170.0, 73.2], [160.2, 52.1], [161.3, 67.9], [166.4, 56.6],
[168.9, 62.3], [163.8, 58.5], [167.6, 54.5], [160.0, 50.2], [161.3, 60.3],
[167.6, 58.3], [165.1, 56.2], [160.0, 50.2], [170.0, 72.9], [157.5, 59.8],
[167.6, 61.0], [160.7, 69.1], [163.2, 55.9], [152.4, 46.5], [157.5, 54.3],
[168.3, 54.8], [180.3, 60.7], [165.5, 60.0], [165.0, 62.0], [164.5, 60.3],
[156.0, 52.7], [160.0, 74.3], [163.0, 62.0], [165.7, 73.1], [161.0, 80.0],
[162.0, 54.7], [166.0, 53.2], [174.0, 75.7], [172.7, 61.1], [167.6, 55.7],
[151.1, 48.7], [164.5, 52.3], [163.5, 50.0], [152.0, 59.3], [169.0, 62.5],
[164.0, 55.7], [161.2, 54.8], [155.0, 45.9], [170.0, 70.6], [176.2, 67.2],
[170.0, 69.4], [162.5, 58.2], [170.3, 64.8], [164.1, 71.6], [169.5, 52.8],
[163.2, 59.8], [154.5, 49.0], [159.8, 50.0], [173.2, 69.2], [170.0, 55.9],
[161.4, 63.4], [169.0, 58.2], [166.2, 58.6], [159.4, 45.7], [162.5, 52.2],
[159.0, 48.6], [162.8, 57.8], [159.0, 55.6], [179.8, 66.8], [162.9, 59.4],
[161.0, 53.6], [151.1, 73.2], [168.2, 53.4], [168.9, 69.0], [173.2, 58.4],
[171.8, 56.2], [178.0, 70.6], [164.3, 59.8], [163.0, 72.0], [168.5, 65.2],
[166.8, 56.6], [172.7, 105.2], [163.5, 51.8], [169.4, 63.4], [167.8, 59.0],
[159.5, 47.6], [167.6, 63.0], [161.2, 55.2], [160.0, 45.0], [163.2, 54.0],
[162.2, 50.2], [161.3, 60.2], [149.5, 44.8], [157.5, 58.8], [163.2, 56.4],
[172.7, 62.0], [155.0, 49.2], [156.5, 67.2], [164.0, 53.8], [160.9, 54.4],
[162.8, 58.0], [167.0, 59.8], [160.0, 54.8], [160.0, 43.2], [168.9, 60.5],
[158.2, 46.4], [156.0, 64.4], [160.0, 48.8], [167.1, 62.2], [158.0, 55.5],
[167.6, 57.8], [156.0, 54.6], [162.1, 59.2], [173.4, 52.7], [159.8, 53.2],
[170.5, 64.5], [159.2, 51.8], [157.5, 56.0], [161.3, 63.6], [162.6, 63.2],
[160.0, 59.5], [168.9, 56.8], [165.1, 64.1], [162.6, 50.0], [165.1, 72.3],
[166.4, 55.0], [160.0, 55.9], [152.4, 60.4], [170.2, 69.1], [162.6, 84.5],
[170.2, 55.9], [158.8, 55.5], [172.7, 69.5], [167.6, 76.4], [162.6, 61.4],
[167.6, 65.9], [156.2, 58.6], [175.2, 66.8], [172.1, 56.6], [162.6, 58.6],
[160.0, 55.9], [165.1, 59.1], [182.9, 81.8], [166.4, 70.7], [165.1, 56.8],
[177.8, 60.0], [165.1, 58.2], [175.3, 72.7], [154.9, 54.1], [158.8, 49.1],
[172.7, 75.9], [168.9, 55.0], [161.3, 57.3], [167.6, 55.0], [165.1, 65.5],
[175.3, 65.5], [157.5, 48.6], [163.8, 58.6], [167.6, 63.6], [165.1, 55.2],
[165.1, 62.7], [168.9, 56.6], [162.6, 53.9], [164.5, 63.2], [176.5, 73.6],
[168.9, 62.0], [175.3, 63.6], [159.4, 53.2], [160.0, 53.4], [170.2, 55.0],
[162.6, 70.5], [167.6, 54.5], [162.6, 54.5], [160.7, 55.9], [160.0, 59.0],
[157.5, 63.6], [162.6, 54.5], [152.4, 47.3], [170.2, 67.7], [165.1, 80.9],
[172.7, 70.5], [165.1, 60.9], [170.2, 63.6], [170.2, 54.5], [170.2, 59.1],
[161.3, 70.5], [167.6, 52.7], [167.6, 62.7], [165.1, 86.3], [162.6, 66.4],
[152.4, 67.3], [168.9, 63.0], [170.2, 73.6], [175.2, 62.3], [175.2, 57.7],
[160.0, 55.4], [165.1, 104.1], [174.0, 55.5], [170.2, 77.3], [160.0, 80.5],
[167.6, 64.5], [167.6, 72.3], [167.6, 61.4], [154.9, 58.2], [162.6, 81.8],
[175.3, 63.6], [171.4, 53.4], [157.5, 54.5], [165.1, 53.6], [160.0, 60.0],
[174.0, 73.6], [162.6, 61.4], [174.0, 55.5], [162.6, 63.6], [161.3, 60.9],
[156.2, 60.0], [149.9, 46.8], [169.5, 57.3], [160.0, 64.1], [175.3, 63.6],
[169.5, 67.3], [160.0, 75.5], [172.7, 68.2], [162.6, 61.4], [157.5, 76.8],
[176.5, 71.8], [164.4, 55.5], [160.7, 48.6], [174.0, 66.4], [163.8, 67.3]
],
markArea: {
silent: true,
itemStyle: {
color: 'transparent',
borderWidth: 1,
borderType: 'dashed'
},
data: [
[
{
name: 'Female Data Range',
xAxis: 'min',
yAxis: 'min'
},
{
xAxis: 'max',
yAxis: 'max'
}
]
]
},
markPoint: {
data: [
{type: 'max', name: 'Max'},
{type: 'min', name: 'Min'}
]
},
markLine: {
lineStyle: {
type: 'solid'
},
data: [{type: 'average', name: 'AVG'}, {xAxis: 160}]
}
},
{
name: 'Male',
type: 'scatter',
emphasis: {
focus: 'series'
},
// prettier-ignore
data: [[174.0, 65.6], [175.3, 71.8], [193.5, 80.7], [186.5, 72.6], [187.2, 78.8],
[181.5, 74.8], [184.0, 86.4], [184.5, 78.4], [175.0, 62.0], [184.0, 81.6],
[180.0, 76.6], [177.8, 83.6], [192.0, 90.0], [176.0, 74.6], [174.0, 71.0],
[184.0, 79.6], [192.7, 93.8], [171.5, 70.0], [173.0, 72.4], [176.0, 85.9],
[176.0, 78.8], [180.5, 77.8], [172.7, 66.2], [176.0, 86.4], [173.5, 81.8],
[178.0, 89.6], [180.3, 82.8], [180.3, 76.4], [164.5, 63.2], [173.0, 60.9],
[183.5, 74.8], [175.5, 70.0], [188.0, 72.4], [189.2, 84.1], [172.8, 69.1],
[170.0, 59.5], [182.0, 67.2], [170.0, 61.3], [177.8, 68.6], [184.2, 80.1],
[186.7, 87.8], [171.4, 84.7], [172.7, 73.4], [175.3, 72.1], [180.3, 82.6],
[182.9, 88.7], [188.0, 84.1], [177.2, 94.1], [172.1, 74.9], [167.0, 59.1],
[169.5, 75.6], [174.0, 86.2], [172.7, 75.3], [182.2, 87.1], [164.1, 55.2],
[163.0, 57.0], [171.5, 61.4], [184.2, 76.8], [174.0, 86.8], [174.0, 72.2],
[177.0, 71.6], [186.0, 84.8], [167.0, 68.2], [171.8, 66.1], [182.0, 72.0],
[167.0, 64.6], [177.8, 74.8], [164.5, 70.0], [192.0, 101.6], [175.5, 63.2],
[171.2, 79.1], [181.6, 78.9], [167.4, 67.7], [181.1, 66.0], [177.0, 68.2],
[174.5, 63.9], [177.5, 72.0], [170.5, 56.8], [182.4, 74.5], [197.1, 90.9],
[180.1, 93.0], [175.5, 80.9], [180.6, 72.7], [184.4, 68.0], [175.5, 70.9],
[180.6, 72.5], [177.0, 72.5], [177.1, 83.4], [181.6, 75.5], [176.5, 73.0],
[175.0, 70.2], [174.0, 73.4], [165.1, 70.5], [177.0, 68.9], [192.0, 102.3],
[176.5, 68.4], [169.4, 65.9], [182.1, 75.7], [179.8, 84.5], [175.3, 87.7],
[184.9, 86.4], [177.3, 73.2], [167.4, 53.9], [178.1, 72.0], [168.9, 55.5],
[157.2, 58.4], [180.3, 83.2], [170.2, 72.7], [177.8, 64.1], [172.7, 72.3],
[165.1, 65.0], [186.7, 86.4], [165.1, 65.0], [174.0, 88.6], [175.3, 84.1],
[185.4, 66.8], [177.8, 75.5], [180.3, 93.2], [180.3, 82.7], [177.8, 58.0],
[177.8, 79.5], [177.8, 78.6], [177.8, 71.8], [177.8, 116.4], [163.8, 72.2],
[188.0, 83.6], [198.1, 85.5], [175.3, 90.9], [166.4, 85.9], [190.5, 89.1],
[166.4, 75.0], [177.8, 77.7], [179.7, 86.4], [172.7, 90.9], [190.5, 73.6],
[185.4, 76.4], [168.9, 69.1], [167.6, 84.5], [175.3, 64.5], [170.2, 69.1],
[190.5, 108.6], [177.8, 86.4], [190.5, 80.9], [177.8, 87.7], [184.2, 94.5],
[176.5, 80.2], [177.8, 72.0], [180.3, 71.4], [171.4, 72.7], [172.7, 84.1],
[172.7, 76.8], [177.8, 63.6], [177.8, 80.9], [182.9, 80.9], [170.2, 85.5],
[167.6, 68.6], [175.3, 67.7], [165.1, 66.4], [185.4, 102.3], [181.6, 70.5],
[172.7, 95.9], [190.5, 84.1], [179.1, 87.3], [175.3, 71.8], [170.2, 65.9],
[193.0, 95.9], [171.4, 91.4], [177.8, 81.8], [177.8, 96.8], [167.6, 69.1],
[167.6, 82.7], [180.3, 75.5], [182.9, 79.5], [176.5, 73.6], [186.7, 91.8],
[188.0, 84.1], [188.0, 85.9], [177.8, 81.8], [174.0, 82.5], [177.8, 80.5],
[171.4, 70.0], [185.4, 81.8], [185.4, 84.1], [188.0, 90.5], [188.0, 91.4],
[182.9, 89.1], [176.5, 85.0], [175.3, 69.1], [175.3, 73.6], [188.0, 80.5],
[188.0, 82.7], [175.3, 86.4], [170.5, 67.7], [179.1, 92.7], [177.8, 93.6],
[175.3, 70.9], [182.9, 75.0], [170.8, 93.2], [188.0, 93.2], [180.3, 77.7],
[177.8, 61.4], [185.4, 94.1], [168.9, 75.0], [185.4, 83.6], [180.3, 85.5],
[174.0, 73.9], [167.6, 66.8], [182.9, 87.3], [160.0, 72.3], [180.3, 88.6],
[167.6, 75.5], [186.7, 101.4], [175.3, 91.1], [175.3, 67.3], [175.9, 77.7],
[175.3, 81.8], [179.1, 75.5], [181.6, 84.5], [177.8, 76.6], [182.9, 85.0],
[177.8, 102.5], [184.2, 77.3], [179.1, 71.8], [176.5, 87.9], [188.0, 94.3],
[174.0, 70.9], [167.6, 64.5], [170.2, 77.3], [167.6, 72.3], [188.0, 87.3],
[174.0, 80.0], [176.5, 82.3], [180.3, 73.6], [167.6, 74.1], [188.0, 85.9],
[180.3, 73.2], [167.6, 76.3], [183.0, 65.9], [183.0, 90.9], [179.1, 89.1],
[170.2, 62.3], [177.8, 82.7], [179.1, 79.1], [190.5, 98.2], [177.8, 84.1],
[180.3, 83.2], [180.3, 83.2]
],
markArea: {
silent: true,
itemStyle: {
color: 'transparent',
borderWidth: 1,
borderType: 'dashed'
},
data: [
[
{
name: 'Male Data Range',
xAxis: 'min',
yAxis: 'min'
},
{
xAxis: 'max',
yAxis: 'max'
}
]
]
},
markPoint: {
data: [
{type: 'max', name: 'Max'},
{type: 'min', name: 'Min'}
]
},
markLine: {
lineStyle: {
type: 'solid'
},
data: [{type: 'average', name: 'Average'}, {xAxis: 170}]
}
}
]
}
}
},
components: {},
props: {
value: Object,
ispreview: Boolean
},
computed: {
styleObj() {
const allStyle = this.optionsPosition;
return {
width: allStyle.width + "px",
height: allStyle.height + "px"
};
},
},
watch: {
value: {
handler(val) {
this.options = val;
this.optionsSetUp = val.setup;
this.optionsPosition = val.position;
this.resizeChart();
},
deep: true
}
},
mounted() {
this.options = this.value;
this.optionsSetUp = this.value.setup;
this.optionsPosition = this.value.position;
this.loadData();
},
methods: {
resizeChart(){
debugger
if(this.chartInfo){
this.chartInfo.resize();
}
},
loadData() {
let that = this;
setTimeout(function () {
var myChart = that.$echarts.init(document.getElementById(that.id));
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(that.scatterWeightOptions);
that.chartInfo = myChart;
}, 1000);
}
}
}
</script>
<style scoped>
</style>
... ...
... ... @@ -60,6 +60,10 @@ import monitorTreeShape from "./monitor/treeShape";
import monitorTablePage from "./monitor/tablePage";
import monitorButtonExport from "./monitor/buttonExport";
import monitorJimuButton from "./monitor/monitorJimuButton";
import monitorAjButton from "./monitor/monitorAjButton";
import monitorCustomScatterWeight from "./monitor/monitorCustomScatterWeight.vue";
export default {
name: "WidgetTemp",
components: {
... ... @@ -110,7 +114,10 @@ export default {
monitorSystemInformation,
monitorTreeShape,
monitorTablePage,
monitorButtonExport
monitorButtonExport,
monitorJimuButton,
monitorAjButton,
monitorCustomScatterWeight
},
model: {
prop: "value",
... ...
... ... @@ -71,6 +71,10 @@ import monitorTreeShape from "./monitor/treeShape";
import monitorTablePage from "./monitor/tablePage";
import monitorButtonExport from "./monitor/buttonExport";
import monitorJimuButton from "./monitor/monitorJimuButton";
import monitorAjButton from "./monitor/monitorAjButton";
import monitorCustomScatterWeight from "./monitor/monitorCustomScatterWeight";
export default {
name: "Widget",
components: {
... ... @@ -120,7 +124,10 @@ export default {
monitorSystemInformation,
monitorTreeShape,
monitorTablePage,
monitorButtonExport
monitorButtonExport,
monitorJimuButton,
monitorAjButton,
monitorCustomScatterWeight
},
model: {
prop: "value",
... ...