Browse Source

上下限功能调整

cxmo 1 year ago
parent
commit
a3cd04a343

+ 74 - 12
src/views/dataEntry_manage/addChart.vue

@@ -209,7 +209,7 @@
 										<el-checkbox v-model="item.IsOrder">逆序</el-checkbox>
 										<el-checkbox v-model="item.IsOrder">逆序</el-checkbox>
 									</li>
 									</li>
 									<li>
 									<li>
-										<el-radio-group v-model="item.IsAxis" size="mini" @change="EdbAxisChange">
+										<el-radio-group v-model="item.IsAxis" size="mini">
 											<el-radio-button :label="1">左轴</el-radio-button>
 											<el-radio-button :label="1">左轴</el-radio-button>
 											<el-radio-button :label="0">右轴</el-radio-button>
 											<el-radio-button :label="0">右轴</el-radio-button>
 
 
@@ -416,21 +416,20 @@
 							</h2>
 							</h2>
 
 
 							<Chart :options="options" :chartInfo="chartInfo" ref="chartRef"/>
 							<Chart :options="options" :chartInfo="chartInfo" ref="chartRef"/>
-							<div class="range-cont left" v-if="leftIndex != -1">
+							<!-- <div class="range-cont left" v-if="leftIndex != -1">
 								<el-input
 								<el-input
 									style="width: 60px; display: block"
 									style="width: 60px; display: block"
 									size="mini"
 									size="mini"
 									type="number"
 									type="number"
 									placeholder="上限"
 									placeholder="上限"
-									v-model="leftLimitData[0]"
-									@change="changeAxisLimit"
+									v-model="tableData[leftIndex].MaxData"
 								/>
 								/>
 								<el-input
 								<el-input
 									class="min-data-input"
 									class="min-data-input"
 									size="mini"
 									size="mini"
 									type="number"
 									type="number"
 									placeholder="下限"
 									placeholder="下限"
-									v-model="leftLimitData[1]"
+									v-model="tableData[leftIndex].MinData"
 								/>
 								/>
 							</div>
 							</div>
 							<div class="range-cont right" v-if="rightIndex != -1">
 							<div class="range-cont right" v-if="rightIndex != -1">
@@ -439,33 +438,90 @@
 									size="mini"
 									size="mini"
 									type="number"
 									type="number"
 									placeholder="上限"
 									placeholder="上限"
-									v-model="rightLimitData[0]"
+									v-model="tableData[rightIndex].MaxData"
 								/>
 								/>
 								<el-input
 								<el-input
 									class="min-data-input"
 									class="min-data-input"
 									size="mini"
 									size="mini"
 									type="number"
 									type="number"
 									placeholder="下限"
 									placeholder="下限"
-									v-model="rightLimitData[1]"
+									v-model="tableData[rightIndex].MinData"
 								/>
 								/>
 							</div>
 							</div>
-							<!-- 右2上下限设置 -->
 							<div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
 							<div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
 								<el-input
 								<el-input
 									style="width: 60px; display: block"
 									style="width: 60px; display: block"
 									size="mini"
 									size="mini"
 									type="number"
 									type="number"
 									placeholder="上限"
 									placeholder="上限"
-									v-model="rightTwoLimitData[0]"
+									v-model="tableData[rightTwoIndex].MaxData"
 								/>
 								/>
 								<el-input
 								<el-input
 									class="min-data-input"
 									class="min-data-input"
 									size="mini"
 									size="mini"
 									type="number"
 									type="number"
 									placeholder="下限"
 									placeholder="下限"
-									v-model="rightTwoLimitData[1]"
+									v-model="tableData[rightTwoIndex].MinData"
 								/>
 								/>
-							</div>
+							</div> -->
+							<!-- 需求:曲线图、堆积柱状图、组合图加入新指标时上下限自动调整 -->
+							<template v-if="![7,10].includes(chartInfo.ChartType)">
+								<div class="range-cont left" v-if="leftIndex != -1">
+									<el-input
+										style="width: 60px; display: block"
+										size="mini"
+										type="number"
+										placeholder="上限"
+										v-model="leftLimitData[0]"
+										@change="changeAxisLimit"
+									/>
+									<el-input
+										class="min-data-input"
+										size="mini"
+										type="number"
+										placeholder="下限"
+										v-model="leftLimitData[1]"
+										@change="changeAxisLimit"
+									/>
+								</div>
+								<div class="range-cont right" v-if="rightIndex != -1">
+									<el-input
+										style="width: 60px; display: block"
+										size="mini"
+										type="number"
+										placeholder="上限"
+										v-model="rightLimitData[0]"
+										@change="changeAxisLimit"
+									/>
+									<el-input
+										class="min-data-input"
+										size="mini"
+										type="number"
+										placeholder="下限"
+										v-model="rightLimitData[1]"
+										@change="changeAxisLimit"
+									/>
+								</div>
+								<!-- 右2上下限设置 -->
+								<div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
+									<el-input
+										style="width: 60px; display: block"
+										size="mini"
+										type="number"
+										placeholder="上限"
+										v-model="rightTwoLimitData[0]"
+										@change="changeAxisLimit"
+									/>
+									<el-input
+										class="min-data-input"
+										size="mini"
+										type="number"
+										placeholder="下限"
+										v-model="rightTwoLimitData[1]"
+										@change="changeAxisLimit"
+									/>
+								</div>
+							</template>
 
 
 							<!-- 后续新图专用上下限 和其他数据依赖不公用 柱形图 截面散点-->
 							<!-- 后续新图专用上下限 和其他数据依赖不公用 柱形图 截面散点-->
 							<template v-if="[7,10].includes(chartInfo.ChartType)">	
 							<template v-if="[7,10].includes(chartInfo.ChartType)">	
@@ -693,7 +749,7 @@ export default {
 					}else {
 					}else {
 						//拼接标题
 						//拼接标题
 						this.chartInfo.ChartName =  this.sameOptionType.includes(this.chartInfo.ChartType) ? newval.map((item,index) => index === newval.length-1 ? item.EdbName : `${item.EdbName}和`).join('') : `${newval[0].EdbName}季节性`;
 						this.chartInfo.ChartName =  this.sameOptionType.includes(this.chartInfo.ChartType) ? newval.map((item,index) => index === newval.length-1 ? item.EdbName : `${item.EdbName}和`).join('') : `${newval[0].EdbName}季节性`;
-						this.calcYAxislimit()
+						this.EdbAxisChange()
 						this.setAddChartDefault();
 						this.setAddChartDefault();
 						this.setChartOptionHandle(newval);
 						this.setChartOptionHandle(newval);
 					}
 					}
@@ -766,6 +822,12 @@ export default {
 							MinData: Number(item.MinData)
 							MinData: Number(item.MinData)
 						})
 						})
 					)
 					)
+					let hasLimitChange = false
+					//如果是 曲线图 堆积柱状图 组合图 需检测上下限是否修改
+					if([1,4,6].includes(this.chartInfo.ChartType)){
+						const limitSame= this.getLimitInfo()
+						hasLimitChange = !limitSame
+					}
 
 
 					const { ChartType,ChartName,ChartThemeId,SourcesFrom,Instructions,MarkersLines,MarkersAreas,ChartThemeStyle } = this.chartInfo;
 					const { ChartType,ChartName,ChartThemeId,SourcesFrom,Instructions,MarkersLines,MarkersAreas,ChartThemeStyle } = this.chartInfo;
 					let public_param = {
 					let public_param = {

+ 1 - 0
src/views/dataEntry_manage/editChart.vue

@@ -760,6 +760,7 @@ export default {
 					this.chartInfo.ChartType === 10 && this.initSectionScatterData(res.Data);
 					this.chartInfo.ChartType === 10 && this.initSectionScatterData(res.Data);
 					
 					
 					this.getThemeList();
 					this.getThemeList();
+					this.getLimitData()
 
 
         });
         });
 		},
 		},

+ 46 - 5
src/views/dataEntry_manage/mixins/addOreditMixin.js

@@ -884,7 +884,9 @@ export default {
 		},
 		},
 		/* 指标切换左右轴*/
 		/* 指标切换左右轴*/
 		EdbAxisChange(){
 		EdbAxisChange(){
-			this.calcYAxislimit()
+			//若用户没有修改过,则计算y轴的上下限
+			if(!this.chartInfo.hasLimitChange)
+				this.calcYAxislimit()
 		},
 		},
 		/* 计算y轴上下限 */
 		/* 计算y轴上下限 */
 		calcYAxislimit(){
 		calcYAxislimit(){
@@ -894,7 +896,7 @@ export default {
 			const rightTwoData = this.tableData.filter(i=>i.IsAxis===2).map(i=>[Number(i.MinData),Number(i.MaxData)])
 			const rightTwoData = this.tableData.filter(i=>i.IsAxis===2).map(i=>[Number(i.MinData),Number(i.MaxData)])
 			//计算最大最小值
 			//计算最大最小值
 			if(leftData.length){
 			if(leftData.length){
-				const {Max,Min} = this.calcLimit([...leftData,...this.leftLimitData].flat())
+				const {Max,Min} = this.calcLimit(leftData.flat())
 				this.leftLimitData = [Max,Min]
 				this.leftLimitData = [Max,Min]
 			}else{
 			}else{
 				this.leftLimitData = [0,0]
 				this.leftLimitData = [0,0]
@@ -924,10 +926,49 @@ export default {
 			}
 			}
 		},
 		},
 		changeAxisLimit(){
 		changeAxisLimit(){
-			if(this.chartInfo.Source === 1&&this.chartInfo.ChartType===1){
-				this.setAddChartDefault();
-				this.setChartOptionHandle(this.tableData);
+			this.setAddChartDefault();
+			this.setChartOptionHandle(this.tableData);
+		},
+		//判断用户有没有手动更改过上下限
+		getLimitInfo(){
+			const leftData = this.tableData.filter(i=>i.IsAxis===1).map(i=>[Number(i.MinData),Number(i.MaxData)])
+			const rightData = this.tableData.filter(i=>!i.IsAxis).map(i=>[Number(i.MinData),Number(i.MaxData)])
+			const rightTwoData = this.tableData.filter(i=>i.IsAxis===2).map(i=>[Number(i.MinData),Number(i.MaxData)])
+			let leftLimitSame=false,rightLimitSame=false,rightTwoLimitSame=false
+			//若每个轴的最大值和最小值不一致,则认为是更改过
+			if(leftData.length){
+				const {Max,Min} = this.calcLimit(leftData.flat())
+				leftLimitSame = Max===this.leftLimitData[0]&&Min===this.leftLimitData[1]
 			}
 			}
+			if(rightData.length){
+				const {Max,Min} = this.calcLimit(rightData.flat())
+				rightLimitSame = Max===this.rightLimitData[0]&&Min===this.rightLimitData[1]
+			}
+			if(rightTwoData.length){
+				const {Max,Min} = this.calcLimit(rightTwoData.flat())
+				rightTwoLimitSame = Max===this.rightTwoLimitData[0]&&Min===this.rightTwoLimitData[1]
+			}
+			let limitSame = leftLimitSame&&rightLimitSame&&rightTwoLimitSame
+			return limitSame
+		},
+		//编辑图表-获取接口的上下限数据赋值
+		getLimitData(){
+			/* const {
+				//左右轴极值字段 
+			} = this.chartInfo
+			this.leftLimitData = []
+			this.rightLimitData = []
+			this.rightTwoLimitData = []
+			//若右二轴的上下限均为0,则不管用户有没有修改过,都重新赋值
+			if(this.rightTwoLimitData[0]===0&&this.rightTwoLimitData[1]===0){
+				const rightTwoData = this.tableData.filter(i=>i.IsAxis===2).map(i=>[Number(i.MinData),Number(i.MaxData)])
+				if(rightTwoData.length){
+					const {Max,Min} = this.calcLimit(rightTwoData.flat())
+					this.rightTwoLimitData = [Max,Min]
+				}else{
+					this.rightTwoLimitData = [0,0]
+				}
+			} */
 		}
 		}
 	}
 	}
 }
 }

+ 29 - 3
src/views/dataEntry_manage/mixins/chartPublic.js

@@ -586,7 +586,7 @@ export const chartSetMixin = {
           (i) => i.IsAxis === item.IsAxis
           (i) => i.IsAxis === item.IsAxis
         );
         );
         
         
-        //在添加编辑页,min max为重新计算过的min max 其他页面不管
+        //添加编辑页和其他页面取值不同
         const isCalcLimit = ['/addchart','/editchart'].includes(this.$route.path)
         const isCalcLimit = ['/addchart','/editchart'].includes(this.$route.path)
         let minLimit = 0,maxLimit = 0
         let minLimit = 0,maxLimit = 0
         if(isCalcLimit){
         if(isCalcLimit){
@@ -597,6 +597,15 @@ export const chartSetMixin = {
             }
             }
             minLimit = limitMap[item.IsAxis][1]||0
             minLimit = limitMap[item.IsAxis][1]||0
             maxLimit = limitMap[item.IsAxis][0]||0
             maxLimit = limitMap[item.IsAxis][0]||0
+        }else{
+            //其他页面直接获取图表详情的上下限值
+            /* const limitMap = {
+                0:this.chartInfo.rightLimitData||[],
+                1:this.chartInfo.leftLimitData||[],
+                2:this.chartInfo.rightTwoLimitData||[]
+            }
+            minLimit = limitMap[item.IsAxis][1]||0
+            maxLimit = limitMap[item.IsAxis][0]||0 */
         }
         }
 
 
         //y轴
         //y轴
@@ -776,6 +785,23 @@ export const chartSetMixin = {
         ? -1
         ? -1
         : newval.findIndex((item) => item.IsAxis===2);
         : newval.findIndex((item) => item.IsAxis===2);
 
 
+        //在添加编辑页,min max为重新计算过的min max 其他页面不管
+        const isCalcLimit = ['/addchart','/editchart'].includes(this.$route.path)
+        let minLimit = 0,maxLimit = 0
+        //如果该图表没标记过
+        if(isCalcLimit&&!this.chartInfo.hasLimitEdit){
+            const limitMap = {
+                0:this.rightLimitData||[],
+                1:this.leftLimitData||[],
+                2:this.rightTwoLimitData||[]
+            }
+            if(limitMap[chartData[sameSideIndex].IsAxis]){
+                const arr = limitMap[chartData[sameSideIndex].IsAxis]
+                minLimit = arr[1]||0
+                maxLimit = arr[0]||0
+            }
+        }
+        
         //y轴
         //y轴
         let yItem = {
         let yItem = {
           ...basicYAxis,
           ...basicYAxis,
@@ -806,8 +832,8 @@ export const chartSetMixin = {
           },
           },
           opposite: [0,2].includes(item.IsAxis),
           opposite: [0,2].includes(item.IsAxis),
           reversed: item.IsOrder,
           reversed: item.IsOrder,
-          min: Number(chartData[sameSideIndex].MinData),
-          max: Number(chartData[sameSideIndex].MaxData),
+          min: (isCalcLimit&&!this.chartInfo.hasLimitEdit)?Number(minLimit):Number(chartData[sameSideIndex].MinData),
+          max: (isCalcLimit&&!this.chartInfo.hasLimitEdit)?Number(maxLimit):Number(chartData[sameSideIndex].MaxData),
           tickWidth: 1,
           tickWidth: 1,
           visible: serie_yIndex === index && sameSideIndex ===index,
           visible: serie_yIndex === index && sameSideIndex ===index,
           plotBands: this.setAxisPlotAreas(item.IsAxis),
           plotBands: this.setAxisPlotAreas(item.IsAxis),