|
@@ -1,6 +1,6 @@
|
|
// 图渲染逻辑模块
|
|
// 图渲染逻辑模块
|
|
|
|
|
|
-import {onMounted,ref,nextTick} from 'vue'
|
|
|
|
|
|
+import {onMounted,ref,nextTick,reactive} from 'vue'
|
|
import {chartDefaultOpts,scatterXAxis,basicYAxis,basicXAxis,leadUnitEnMap,relevanceUnitEnMap} from './config'
|
|
import {chartDefaultOpts,scatterXAxis,basicYAxis,basicXAxis,leadUnitEnMap,relevanceUnitEnMap} from './config'
|
|
import Highcharts from 'highcharts/highstock';
|
|
import Highcharts from 'highcharts/highstock';
|
|
import Boost from 'highcharts/modules/boost'
|
|
import Boost from 'highcharts/modules/boost'
|
|
@@ -25,7 +25,54 @@ let chartData=ref(null)//图的所有数据
|
|
let LangType=ref('zh')//当前图表显示的语言版本
|
|
let LangType=ref('zh')//当前图表显示的语言版本
|
|
let RenderDomId=ref('')//图表渲染的domid
|
|
let RenderDomId=ref('')//图表渲染的domid
|
|
let options=ref(null)//渲染图的数据
|
|
let options=ref(null)//渲染图的数据
|
|
|
|
+const axisLimitState = reactive({//极值数据
|
|
|
|
+ leftIndex:-1,//左侧上下限对应下标
|
|
|
|
+ rightIndex: -1, //右侧上下限对应下标
|
|
|
|
+ rightTwoIndex: -1,//右2上下限对应下标
|
|
|
|
+
|
|
|
|
+ hasLeftAxis:false,
|
|
|
|
+ hasRightAxis:false,
|
|
|
|
+ hasRightTwoAxis:false,
|
|
|
|
+ hasXAxis:false,
|
|
|
|
+ leftMin:0,
|
|
|
|
+ leftMax:0,
|
|
|
|
+ rightMin:0,
|
|
|
|
+ rightMax:0,
|
|
|
|
+ rightTwoMin:0,
|
|
|
|
+ rightTwoMax:0,
|
|
|
|
+ xMin:0,
|
|
|
|
+ xMax:0,
|
|
|
|
+})
|
|
|
|
+
|
|
|
|
+export function useChartRender(){
|
|
|
|
+ return {
|
|
|
|
+ options,
|
|
|
|
+ axisLimitState,
|
|
|
|
+ chartRender,
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
export function chartRender({data,renderId,lang='zh',changeLangIsCheck,showChartTitle=true}){
|
|
export function chartRender({data,renderId,lang='zh',changeLangIsCheck,showChartTitle=true}){
|
|
|
|
+ // 初始化掉极值数据
|
|
|
|
+ axisLimitState.leftIndex=-1
|
|
|
|
+ axisLimitState.rightIndex=-1
|
|
|
|
+ axisLimitState.rightTwoIndex=-1
|
|
|
|
+
|
|
|
|
+ axisLimitState.hasLeftAxis=false
|
|
|
|
+ axisLimitState.hasRightAxis=false
|
|
|
|
+ axisLimitState.hasRightTwoAxis=false
|
|
|
|
+ axisLimitState.hasXAxis=false
|
|
|
|
+
|
|
|
|
+ axisLimitState.leftMin=0
|
|
|
|
+ axisLimitState.leftMax=0
|
|
|
|
+ axisLimitState.rightMin=0
|
|
|
|
+ axisLimitState.rightMax=0
|
|
|
|
+ axisLimitState.rightTwoMin=0
|
|
|
|
+ axisLimitState.rightTwoMax=0
|
|
|
|
+ axisLimitState.xMin=0
|
|
|
|
+ axisLimitState.xMax=0
|
|
|
|
+
|
|
|
|
+
|
|
let chartOpt={}
|
|
let chartOpt={}
|
|
LangType.value=lang
|
|
LangType.value=lang
|
|
RenderDomId.value=renderId
|
|
RenderDomId.value=renderId
|
|
@@ -62,6 +109,8 @@ export function chartRender({data,renderId,lang='zh',changeLangIsCheck,showChart
|
|
? chartOpt.series.every(_ => _.type === 'scatter') || chartOpt.series.some(_ => _.chartType === 'linear')
|
|
? chartOpt.series.every(_ => _.type === 'scatter') || chartOpt.series.some(_ => _.chartType === 'linear')
|
|
: false ;
|
|
: false ;
|
|
is_linear ?ChartIns=Highcharts.chart(RenderDomId.value,options.value) : ChartIns=Highcharts.stockChart(RenderDomId.value,options.value);
|
|
is_linear ?ChartIns=Highcharts.chart(RenderDomId.value,options.value) : ChartIns=Highcharts.stockChart(RenderDomId.value,options.value);
|
|
|
|
+
|
|
|
|
+ return ChartIns
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -300,6 +349,10 @@ function setSplineOpt(e){
|
|
let temYLeftIndex=data.findIndex((item) => item.IsAxis===1)
|
|
let temYLeftIndex=data.findIndex((item) => item.IsAxis===1)
|
|
let temYRightIndex=data.findIndex((item) => !item.IsAxis)
|
|
let temYRightIndex=data.findIndex((item) => !item.IsAxis)
|
|
let temYRightTwoIndex = data.findIndex((item) => item.IsAxis===2)
|
|
let temYRightTwoIndex = data.findIndex((item) => item.IsAxis===2)
|
|
|
|
+ axisLimitState.leftIndex=temYLeftIndex
|
|
|
|
+ axisLimitState.rightIndex=temYRightIndex
|
|
|
|
+ axisLimitState.rightTwoIndex=temYRightTwoIndex
|
|
|
|
+
|
|
|
|
|
|
let minAndMaxTimeTemArr=[]//存放所有指标的最大最小时间
|
|
let minAndMaxTimeTemArr=[]//存放所有指标的最大最小时间
|
|
|
|
|
|
@@ -421,15 +474,25 @@ function setSplineOpt(e){
|
|
|
|
|
|
yAxis.forEach(item=>{
|
|
yAxis.forEach(item=>{
|
|
if(item.IsAxis===1){//左轴
|
|
if(item.IsAxis===1){//左轴
|
|
|
|
+ axisLimitState.hasLeftAxis=true
|
|
|
|
+ axisLimitState.leftMin=data[temYLeftIndex].MinData
|
|
|
|
+ axisLimitState.leftMax=data[temYLeftIndex].MaxData
|
|
|
|
|
|
// item.min=getAxisMaxOrMin(temYLeftArr,'min')
|
|
// item.min=getAxisMaxOrMin(temYLeftArr,'min')
|
|
// item.max=getAxisMaxOrMin(temYLeftArr,'max')
|
|
// item.max=getAxisMaxOrMin(temYLeftArr,'max')
|
|
item.min=data[temYLeftIndex].MinData
|
|
item.min=data[temYLeftIndex].MinData
|
|
item.max=data[temYLeftIndex].MaxData
|
|
item.max=data[temYLeftIndex].MaxData
|
|
}else if (item.IsAxis===2){ // 右2轴
|
|
}else if (item.IsAxis===2){ // 右2轴
|
|
|
|
+ axisLimitState.hasRightTwoAxis=true
|
|
|
|
+ axisLimitState.rightTwoMin=data[temYRightTwoIndex].MinData
|
|
|
|
+ axisLimitState.rightTwoMax=data[temYRightTwoIndex].MaxData
|
|
|
|
+
|
|
item.min=data[temYRightTwoIndex].MinData
|
|
item.min=data[temYRightTwoIndex].MinData
|
|
item.max=data[temYRightTwoIndex].MaxData
|
|
item.max=data[temYRightTwoIndex].MaxData
|
|
}else{
|
|
}else{
|
|
|
|
+ axisLimitState.hasRightAxis=true
|
|
|
|
+ axisLimitState.rightMin=data[temYRightIndex].MinData
|
|
|
|
+ axisLimitState.rightMax=data[temYRightIndex].MaxData
|
|
|
|
|
|
// item.min=getAxisMaxOrMin(temYRightArr,'min')
|
|
// item.min=getAxisMaxOrMin(temYRightArr,'min')
|
|
// item.max=getAxisMaxOrMin(temYRightArr,'max')
|
|
// item.max=getAxisMaxOrMin(temYRightArr,'max')
|
|
@@ -449,6 +512,10 @@ function setSplineOpt(e){
|
|
|
|
|
|
//季节图
|
|
//季节图
|
|
function setSeasonOpt(e){
|
|
function setSeasonOpt(e){
|
|
|
|
+ axisLimitState.leftIndex=0
|
|
|
|
+ axisLimitState.rightIndex=-1
|
|
|
|
+ axisLimitState.rightTwoIndex=-1
|
|
|
|
+
|
|
let chartData={}
|
|
let chartData={}
|
|
const data=e.EdbInfoList[0]
|
|
const data=e.EdbInfoList[0]
|
|
const calendarType=e.ChartInfo.Calendar||'公历'
|
|
const calendarType=e.ChartInfo.Calendar||'公历'
|
|
@@ -633,6 +700,10 @@ function setSeasonOpt(e){
|
|
chartData.series=series
|
|
chartData.series=series
|
|
chartData.yAxis=yAxis
|
|
chartData.yAxis=yAxis
|
|
chartData.rangeSelector=rangeSelector
|
|
chartData.rangeSelector=rangeSelector
|
|
|
|
+ // 设置坐标轴极值
|
|
|
|
+ axisLimitState.hasLeftAxis=true
|
|
|
|
+ axisLimitState.leftMin=Number(data.MinData)
|
|
|
|
+ axisLimitState.leftMax=Number(data.MaxData)
|
|
|
|
|
|
// 季节图x轴显示月/日
|
|
// 季节图x轴显示月/日
|
|
let xAxis={
|
|
let xAxis={
|
|
@@ -740,6 +811,10 @@ function setStackOrCombinChart(e){
|
|
temYRightTwoIndex = [3,4].includes(e.ChartInfo.ChartType)
|
|
temYRightTwoIndex = [3,4].includes(e.ChartInfo.ChartType)
|
|
? -1
|
|
? -1
|
|
: data.findIndex((item) => item.IsAxis===2);
|
|
: data.findIndex((item) => item.IsAxis===2);
|
|
|
|
+
|
|
|
|
+ axisLimitState.leftIndex=temYLeftIndex
|
|
|
|
+ axisLimitState.rightIndex=temYRightIndex
|
|
|
|
+ axisLimitState.rightTwoIndex=temYRightTwoIndex
|
|
|
|
|
|
let dynamic_title = item.EdbName;
|
|
let dynamic_title = item.EdbName;
|
|
let dynamic_arr = newData.filter(
|
|
let dynamic_arr = newData.filter(
|
|
@@ -854,12 +929,24 @@ function setStackOrCombinChart(e){
|
|
|
|
|
|
yAxis.forEach(item=>{
|
|
yAxis.forEach(item=>{
|
|
if(item.IsAxis === 1){//左轴
|
|
if(item.IsAxis === 1){//左轴
|
|
|
|
+ axisLimitState.hasLeftAxis=true
|
|
|
|
+ axisLimitState.leftMin=data[temYLeftIndex].MinData
|
|
|
|
+ axisLimitState.leftMax=data[temYLeftIndex].MaxData
|
|
|
|
+
|
|
item.min=data[temYLeftIndex].MinData
|
|
item.min=data[temYLeftIndex].MinData
|
|
item.max=data[temYLeftIndex].MaxData
|
|
item.max=data[temYLeftIndex].MaxData
|
|
}else if (item.IsAxis===2){ // 右2轴
|
|
}else if (item.IsAxis===2){ // 右2轴
|
|
|
|
+ axisLimitState.hasRightTwoAxis=true
|
|
|
|
+ axisLimitState.rightTwoMin=data[temYRightTwoIndex].MinData
|
|
|
|
+ axisLimitState.rightTwoMax=data[temYRightTwoIndex].MaxData
|
|
|
|
+
|
|
item.min=data[temYRightTwoIndex].MinData
|
|
item.min=data[temYRightTwoIndex].MinData
|
|
item.max=data[temYRightTwoIndex].MaxData
|
|
item.max=data[temYRightTwoIndex].MaxData
|
|
}else{
|
|
}else{
|
|
|
|
+ axisLimitState.hasRightAxis=true
|
|
|
|
+ axisLimitState.rightMin=data[temYRightIndex].MinData
|
|
|
|
+ axisLimitState.rightMax=data[temYRightIndex].MaxData
|
|
|
|
+
|
|
item.min=data[temYRightIndex].MinData
|
|
item.min=data[temYRightIndex].MinData
|
|
item.max=data[temYRightIndex].MaxData
|
|
item.max=data[temYRightIndex].MaxData
|
|
}
|
|
}
|
|
@@ -876,6 +963,10 @@ function setStackOrCombinChart(e){
|
|
|
|
|
|
/* 散点图 第一个指标值为x轴 第二个指标为y轴*/
|
|
/* 散点图 第一个指标值为x轴 第二个指标为y轴*/
|
|
function setScatterOptions(data){
|
|
function setScatterOptions(data){
|
|
|
|
+ axisLimitState.leftIndex=0
|
|
|
|
+ axisLimitState.rightIndex=-1
|
|
|
|
+ axisLimitState.rightTwoIndex=-1
|
|
|
|
+
|
|
const dataList=data.EdbInfoList
|
|
const dataList=data.EdbInfoList
|
|
const { ChartInfo } = data;
|
|
const { ChartInfo } = data;
|
|
|
|
|
|
@@ -1095,11 +1186,18 @@ function initBarData(data){
|
|
|
|
|
|
let xData = XEdbIdValue.map(_ => EdbInfoList.find(edb => edb.EdbInfoId===_).EdbAliasName)
|
|
let xData = XEdbIdValue.map(_ => EdbInfoList.find(edb => edb.EdbInfoId===_).EdbAliasName)
|
|
// console.log(xData)
|
|
// console.log(xData)
|
|
|
|
+ axisLimitState.leftIndex=-1
|
|
|
|
+ axisLimitState.rightIndex=-1
|
|
|
|
+ axisLimitState.rightTwoIndex=-1
|
|
|
|
|
|
barDateList.value = YDataList;
|
|
barDateList.value = YDataList;
|
|
barXData.value = xData;
|
|
barXData.value = xData;
|
|
barEdbData.value = EdbInfoList;
|
|
barEdbData.value = EdbInfoList;
|
|
|
|
|
|
|
|
+ axisLimitState.hasLeftAxis=true
|
|
|
|
+ axisLimitState.leftMin=Number(ChartInfo.LeftMin)
|
|
|
|
+ axisLimitState.leftMax=Number(ChartInfo.LeftMax)
|
|
|
|
+
|
|
axisLimitData.leftMin=Number(ChartInfo.LeftMin)
|
|
axisLimitData.leftMin=Number(ChartInfo.LeftMin)
|
|
axisLimitData.leftMax=Number(ChartInfo.LeftMax)
|
|
axisLimitData.leftMax=Number(ChartInfo.LeftMax)
|
|
|
|
|
|
@@ -1113,9 +1211,13 @@ const commodityXData = ref([]);//商品价格图的x轴
|
|
const commodityEdbList = ref([]);//商品价格图的表格数据 只用于取值
|
|
const commodityEdbList = ref([]);//商品价格图的表格数据 只用于取值
|
|
/* 商品价格曲线设置 绘图逻辑同奇怪柱形图*/
|
|
/* 商品价格曲线设置 绘图逻辑同奇怪柱形图*/
|
|
const setCommodityChart = (leftMin,leftMax) => {
|
|
const setCommodityChart = (leftMin,leftMax) => {
|
|
-
|
|
|
|
|
|
+ axisLimitState.leftIndex=-1
|
|
|
|
+ axisLimitState.rightIndex=-1
|
|
|
|
+ axisLimitState.rightTwoIndex=-1
|
|
|
|
+
|
|
let seriesData = [];
|
|
let seriesData = [];
|
|
const data = _.cloneDeep(commodityChartData.value);
|
|
const data = _.cloneDeep(commodityChartData.value);
|
|
|
|
+ console.log(data);
|
|
|
|
|
|
//x轴
|
|
//x轴
|
|
let xAxis = {
|
|
let xAxis = {
|
|
@@ -1263,11 +1365,15 @@ function filterInvalidData(item){
|
|
return arr;
|
|
return arr;
|
|
}
|
|
}
|
|
function initCommodityData(data){
|
|
function initCommodityData(data){
|
|
- const { XDataList,YDataList,EdbInfoList,ChartInfo } = data;
|
|
|
|
|
|
+ const { XDataList,YDataList,EdbInfoList,ChartInfo,DataResp } = data;
|
|
|
|
|
|
commodityEdbList.value = EdbInfoList;
|
|
commodityEdbList.value = EdbInfoList;
|
|
- commodityChartData.value = YDataList;
|
|
|
|
- commodityXData.value = XDataList;
|
|
|
|
|
|
+ commodityChartData.value = ChartInfo.Source===5?DataResp.YDataList:YDataList
|
|
|
|
+ commodityXData.value = ChartInfo.Source===5?DataResp.XDataList:XDataList
|
|
|
|
+
|
|
|
|
+ axisLimitState.hasLeftAxis=true
|
|
|
|
+ axisLimitState.leftMin=Number(ChartInfo.LeftMin)
|
|
|
|
+ axisLimitState.leftMax=Number(ChartInfo.LeftMax)
|
|
|
|
|
|
return setCommodityChart(ChartInfo.LeftMin,ChartInfo.LeftMax);
|
|
return setCommodityChart(ChartInfo.LeftMin,ChartInfo.LeftMax);
|
|
}
|
|
}
|
|
@@ -1275,6 +1381,9 @@ function initCommodityData(data){
|
|
|
|
|
|
//相关性图表
|
|
//相关性图表
|
|
function initRelevanceChart(data){
|
|
function initRelevanceChart(data){
|
|
|
|
+ axisLimitState.leftIndex=-1
|
|
|
|
+ axisLimitState.rightIndex=-1
|
|
|
|
+ axisLimitState.rightTwoIndex=-1
|
|
// 处理X轴
|
|
// 处理X轴
|
|
let xAxis={
|
|
let xAxis={
|
|
categories: data.XEdbIdValue,
|
|
categories: data.XEdbIdValue,
|
|
@@ -1390,12 +1499,23 @@ function initRelevanceChart(data){
|
|
|
|
|
|
/* 截面散点图设置 sectionScatterData */
|
|
/* 截面散点图设置 sectionScatterData */
|
|
function setSectionScatterChart({DataResp}) {
|
|
function setSectionScatterChart({DataResp}) {
|
|
|
|
+ axisLimitState.leftIndex=-1
|
|
|
|
+ axisLimitState.rightIndex=-1
|
|
|
|
+ axisLimitState.rightTwoIndex=-1
|
|
|
|
+
|
|
const { DataList,XName,XNameEn,XUnitName,XUnitNameEn,YName,YNameEn,YUnitName,YUnitNameEn } = DataResp;
|
|
const { DataList,XName,XNameEn,XUnitName,XUnitNameEn,YName,YNameEn,YUnitName,YUnitNameEn } = DataResp;
|
|
const leftMin=Number(DataResp.YMinValue)
|
|
const leftMin=Number(DataResp.YMinValue)
|
|
const leftMax=Number(DataResp.YMaxValue)
|
|
const leftMax=Number(DataResp.YMaxValue)
|
|
const xMin=Number(DataResp.XMinValue)
|
|
const xMin=Number(DataResp.XMinValue)
|
|
const xMax=Number(DataResp.XMaxValue)
|
|
const xMax=Number(DataResp.XMaxValue)
|
|
|
|
|
|
|
|
+ axisLimitState.hasLeftAxis=true
|
|
|
|
+ axisLimitState.hasXAxis=true
|
|
|
|
+ axisLimitState.leftMin=leftMin
|
|
|
|
+ axisLimitState.leftMax=leftMax
|
|
|
|
+ axisLimitState.xMin=xMin
|
|
|
|
+ axisLimitState.xMax=xMax
|
|
|
|
+
|
|
//y轴
|
|
//y轴
|
|
let yAxis = {
|
|
let yAxis = {
|
|
...basicYAxis,
|
|
...basicYAxis,
|