|
@@ -42,6 +42,15 @@ import Highcharts from 'highcharts';
|
|
import { defaultOpts, seasonOptions } from '@/utils/chartOptions';
|
|
import { defaultOpts, seasonOptions } from '@/utils/chartOptions';
|
|
import moment from 'moment';
|
|
import moment from 'moment';
|
|
|
|
|
|
|
|
+const scatterXAxis = {
|
|
|
|
+ tickPosition: 'inside',
|
|
|
|
+ lineColor: '#bfbfbf',
|
|
|
|
+ tickColor: '#bfbfbf',
|
|
|
|
+ tickLength:5,
|
|
|
|
+ ordinal: false,
|
|
|
|
+ type: 'linear',
|
|
|
|
+}
|
|
|
|
+
|
|
export default defineComponent({
|
|
export default defineComponent({
|
|
components: {
|
|
components: {
|
|
chart,
|
|
chart,
|
|
@@ -149,7 +158,6 @@ export default defineComponent({
|
|
1: 'spline',
|
|
1: 'spline',
|
|
3: 'areaspline',
|
|
3: 'areaspline',
|
|
4: 'column',
|
|
4: 'column',
|
|
- 5: 'scatter',
|
|
|
|
};
|
|
};
|
|
let chartStyle = chartTypeMap[chartInfo.ChartType];
|
|
let chartStyle = chartTypeMap[chartInfo.ChartType];
|
|
|
|
|
|
@@ -172,6 +180,13 @@ export default defineComponent({
|
|
fontSize: '10px',
|
|
fontSize: '10px',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
+ title: {
|
|
|
|
+ text: sameSideIndex !== index ? '' : `单位:${item.Unit}`,
|
|
|
|
+ align: 'high',
|
|
|
|
+ rotation: 0,
|
|
|
|
+ y: -15,
|
|
|
|
+ offset: 0,
|
|
|
|
+ },
|
|
opposite: item.IsAxis === 0,
|
|
opposite: item.IsAxis === 0,
|
|
reversed: item.IsOrder,
|
|
reversed: item.IsOrder,
|
|
min: Number(chartData[sameSideIndex].MinData),
|
|
min: Number(chartData[sameSideIndex].MinData),
|
|
@@ -321,6 +336,13 @@ export default defineComponent({
|
|
},
|
|
},
|
|
x: -5,
|
|
x: -5,
|
|
},
|
|
},
|
|
|
|
+ title: {
|
|
|
|
+ text: `单位:${chartData.Unit}`,
|
|
|
|
+ align: 'high',
|
|
|
|
+ rotation: 0,
|
|
|
|
+ y: -15,
|
|
|
|
+ offset: 0,
|
|
|
|
+ },
|
|
max: Number(chartData.MaxData),
|
|
max: Number(chartData.MaxData),
|
|
min: Number(chartData.MinData),
|
|
min: Number(chartData.MinData),
|
|
...defaultOpts.yAxis,
|
|
...defaultOpts.yAxis,
|
|
@@ -365,6 +387,13 @@ export default defineComponent({
|
|
},
|
|
},
|
|
x: -5,
|
|
x: -5,
|
|
},
|
|
},
|
|
|
|
+ title: {
|
|
|
|
+ text: `单位:${chartData.Unit}`,
|
|
|
|
+ align: 'high',
|
|
|
|
+ rotation: 0,
|
|
|
|
+ y: -15,
|
|
|
|
+ offset: 0,
|
|
|
|
+ },
|
|
max: Number(chartData.MaxData),
|
|
max: Number(chartData.MaxData),
|
|
min: Number(chartData.MinData),
|
|
min: Number(chartData.MinData),
|
|
...defaultOpts.yAxis,
|
|
...defaultOpts.yAxis,
|
|
@@ -452,12 +481,132 @@ export default defineComponent({
|
|
};
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /* 散点图 第一个指标值为x轴 第二个指标为y轴*/
|
|
|
|
+ const setScatterChartOptions = () => {
|
|
|
|
+ const { dataList,chartInfo } = state;
|
|
|
|
+
|
|
|
|
+ // 取2个指标中日期相同的数据
|
|
|
|
+ const real_data: any[] = [];
|
|
|
|
+ let tmpData_date: any = {};//用来取点对应的日期
|
|
|
|
+ let data1 = _.cloneDeep(dataList)[0].DataList || [];
|
|
|
|
+ let data2 = _.cloneDeep(dataList)[1].DataList || [];
|
|
|
|
+ data1.forEach((_item: IParams) => {
|
|
|
|
+ data2.forEach((_item2: IParams) => {
|
|
|
|
+ if(_item.DataTimestamp === _item2.DataTimestamp) {
|
|
|
|
+ //日期
|
|
|
|
+ let itemIndex =_item.Value + "_" +_item2.Value
|
|
|
|
+ if(tmpData_date[itemIndex]) {
|
|
|
|
+ tmpData_date[itemIndex].push( moment(_item.DataTimestamp).format('YYYY/MM/DD'))
|
|
|
|
+ } else {
|
|
|
|
+ tmpData_date[itemIndex] = [moment(_item.DataTimestamp).format('YYYY/MM/DD')]
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //值
|
|
|
|
+ real_data.push({
|
|
|
|
+ x: _item.Value,
|
|
|
|
+ y: _item2.Value
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ })
|
|
|
|
+ real_data.sort((x,y) => x-y);
|
|
|
|
+
|
|
|
|
+ //悬浮窗 拼接日期 原始指标名称
|
|
|
|
+ let tooltip = {
|
|
|
|
+ formatter: function() {
|
|
|
|
+ const that: any = this;
|
|
|
|
+ return `<strong>${ tmpData_date[that.x+'_'+that.y].length > 4 ? tmpData_date[that.x+'_'+that.y].slice(0,4).join()+'...' : tmpData_date[that.x+'_'+that.y].join() }</strong><br>
|
|
|
|
+ ${dataList[0].EdbName}: <span style="font-weight: 600"> ${that.x}</span><br>
|
|
|
|
+ ${dataList[1].EdbName}: <span style="font-weight: 600"> ${that.y}</span>
|
|
|
|
+ `
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const { IsOrder,ChartColor } = dataList[0];
|
|
|
|
+ //y轴
|
|
|
|
+ let yAxis = {
|
|
|
|
+ title: {
|
|
|
|
+ text: `单位:${dataList[1].Unit}`,
|
|
|
|
+ align: 'high',
|
|
|
|
+ rotation: 0,
|
|
|
|
+ y: -15,
|
|
|
|
+ offset: 0,
|
|
|
|
+ },
|
|
|
|
+ labels: {
|
|
|
|
+ formatter: function (ctx: any) {
|
|
|
|
+ return ctx.value;
|
|
|
|
+ },
|
|
|
|
+ align: 'center',
|
|
|
|
+ },
|
|
|
|
+ opposite: false,
|
|
|
|
+ reversed: IsOrder,
|
|
|
|
+ min: Number(dataList[0].MinData),
|
|
|
|
+ max: Number(dataList[0].MaxData),
|
|
|
|
+ tickWidth: 1,
|
|
|
|
+ tickLength: 5,
|
|
|
|
+ lineWidth: 1,
|
|
|
|
+ lineColor: '#bfbfbf',
|
|
|
|
+ tickColor: '#bfbfbf',
|
|
|
|
+ offset: 0,
|
|
|
|
+ visible: true,
|
|
|
|
+ gridLineWidth: 0,
|
|
|
|
+ tickPosition: 'inside',
|
|
|
|
+ endOnTick: false,
|
|
|
|
+ startOnTick: false,
|
|
|
|
+ showLastLabel: true,
|
|
|
|
+ tickPixelInterval: 50
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //数据列
|
|
|
|
+ let series: any = {
|
|
|
|
+ data: [],
|
|
|
|
+ type: 'scatter',
|
|
|
|
+ name: `${chartInfo.ChartName}${IsOrder ? '(逆序)' : ''}`,
|
|
|
|
+ color: ChartColor,
|
|
|
|
+ lineWidth: 0
|
|
|
|
+ }
|
|
|
|
+ real_data.forEach(_ => {
|
|
|
|
+ series.data.push([_.x,_.y])
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ state.options = {
|
|
|
|
+ title: {
|
|
|
|
+ text:''
|
|
|
|
+ },
|
|
|
|
+ series: [ series ],
|
|
|
|
+ yAxis,
|
|
|
|
+ xAxis: {
|
|
|
|
+ ...scatterXAxis,
|
|
|
|
+ title: {
|
|
|
|
+ text: `单位:${dataList[0].Unit}`,
|
|
|
|
+ align: 'high',
|
|
|
|
+ rotation: 0,
|
|
|
|
+ x: 0,
|
|
|
|
+ offset: 20,
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ tooltip
|
|
|
|
+ }
|
|
|
|
+ console.log(state.options)
|
|
|
|
+ }
|
|
|
|
+
|
|
/* 设置options */
|
|
/* 设置options */
|
|
const setOptions = () => {
|
|
const setOptions = () => {
|
|
// ChartType: 1曲线图 2季节图 3面积图 4柱状图 5散点图 6组合图 季节图中公历和农历数据结构不同
|
|
// ChartType: 1曲线图 2季节图 3面积图 4柱状图 5散点图 6组合图 季节图中公历和农历数据结构不同
|
|
- state.chartInfo.ChartType === 2
|
|
|
|
- ? setSeasonOptions()
|
|
|
|
- : setDefaultLineOptions();
|
|
|
|
|
|
+ const { chartInfo } = state;
|
|
|
|
+ // state.chartInfo.ChartType === 2
|
|
|
|
+ // ? setSeasonOptions()
|
|
|
|
+ // : setDefaultLineOptions();
|
|
|
|
+ const chartSetMap: any = {
|
|
|
|
+ 1: setDefaultLineOptions,
|
|
|
|
+ 2: setSeasonOptions,
|
|
|
|
+ 3: setDefaultLineOptions,
|
|
|
|
+ 4: setDefaultLineOptions,
|
|
|
|
+ 5: setScatterChartOptions,
|
|
|
|
+ 6: setDefaultLineOptions
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ chartSetMap[chartInfo.ChartType]()
|
|
};
|
|
};
|
|
|
|
|
|
/* 分享链接 */
|
|
/* 分享链接 */
|