Ver código fonte

商品价格曲线优化v1.9.5

jwyu 1 ano atrás
pai
commit
0f1f33a2a4

+ 11 - 2
src/views/dataEntry_manage/mixins/chartPublic.js

@@ -1557,7 +1557,7 @@ export const chartSetMixin = {
       //x轴
       let xAxis = {
         ...scatterXAxis,
-        categories: this.commodityXData.map(_ =>_.Name),
+        categories: this.commodityXData.filter(_=>_.IsHide===0).map(_ =>_.Name),
         tickWidth: 1,
         labels: {
           style: {
@@ -1738,7 +1738,16 @@ export const chartSetMixin = {
             return item
           }
         })
-        return arr;
+
+        // 根据设置的x轴显示隐藏去除值
+        let temArr=[]
+        this.commodityXData.forEach((i,index)=>{
+          if(i.IsHide!==1){
+            temArr.push(arr[index])
+          }
+        })
+
+        return temArr;
     },
 
     /* 获取图表详情后赋值柱状图数据 */

+ 166 - 20
src/views/futures_manage/chartEditor.vue

@@ -112,7 +112,12 @@
 						/>
 					</el-form-item>
 					<el-form-item label="日期基准" prop="basisEdb">
-						<el-select placeholder="请选择日期基准" v-model="chartInfo.basisEdb" style="width: 90%">
+						<el-select 
+							placeholder="请选择日期基准" 
+							v-model="chartInfo.basisEdb" 
+							style="width: 90%"
+							@change="handleBasisEdbChange"
+						>
 							<el-option 
 								v-for="item in tableData" 
 								:key="item.EdbInfoId"
@@ -129,7 +134,7 @@
 				<div class="targetset-cont">
 					<!-- 选择的指标模块 -->
 					<div class="basis-edb-wrap" v-if="tableData.length>0">
-						<div class="label-btn">横坐标设置</div>
+						<div class="label-btn" @click="isShowxAxisSet=true">横坐标设置</div>
 						<div 
 							class="item-basis-edb" 
 							v-for="item,index in tableData" 
@@ -141,7 +146,7 @@
 									class="icon" 
 									:src="item.isHide?require('@/assets/img/icons/eyes-hide-active.png') : require('@/assets/img/icons/eyes-show-active.png')" 
 									alt=""
-									@click="handleChangeBasisEdbHide(item)"
+									@click="handleChangeBasisEdbHide(item,index)"
 								>
 								<img class="icon" src="~@/assets/img/icons/delete-red.png" alt="" @click="handleBasisEdbDel(index,item)">
 							</div>
@@ -223,6 +228,12 @@
 		:data="profitInfo"
 		@ensure="setProfitBack"
 	/>
+	<!-- 横坐标设置 -->
+	<xAxisSet 
+		:isShow.sync="isShowxAxisSet"
+		:opts="xAxisList"
+		@change="handleXAxisDataChange"
+	/>
   </div>
 </template>
 
@@ -233,8 +244,9 @@ import { chartSetMixin } from '@/views/dataEntry_manage/mixins/chartPublic';
 import Chart from '@/views/dataEntry_manage/components/chart';
 import barOption from '@/views/dataEntry_manage/components/barOptionSection.vue';
 import plateProfitDia from './components/plateProfitDia.vue';
+import xAxisSet from './components/xAxisSet.vue';
 export default {
-  components: { Chart,barOption,plateProfitDia },
+  components: { Chart,barOption,plateProfitDia,xAxisSet },
 	directives: {
     drag(el, bindings) {
       el.onmousedown = function (e) {
@@ -315,11 +327,21 @@ export default {
 			profitInfo: {
 				list: [],
 				formula: ''
-			}
+			},
 
+			// 横坐标设置
+			isShowxAxisSet:false,
+			xAxisList:[],
     };
   },
   methods: {
+		// 刷新数据
+		handleRefreshChartData(){
+			// 价格曲线判断 this.chartInfo.futures_id
+			if(this.chartInfo.Source===2&&!this.chartInfo.futures_id) return
+			this.tableData.length && this.$refs.BarOptRef.getBarData();
+			console.log('刷新图表');
+		},
 
 		/* 获取图表详情 */
 		getChartInfo() {
@@ -328,7 +350,7 @@ export default {
         })
         .then((res) => {
           if (res.Ret !== 200) return;
-					const { ChartInfo,BarChartInfo,EdbInfoList,DataResp } = res.Data;
+					const { ChartInfo,BarChartInfo,EdbInfoList,DataResp,XDataList } = res.Data;
 
           this.chartInfo = ChartInfo.Source===5 ? {
 						...ChartInfo,
@@ -338,12 +360,27 @@ export default {
 					} : {
 						...ChartInfo,
 						classify: ChartInfo.ChartClassifyId,
-						futures_id: BarChartInfo.EdbInfoIdList.find(_ => _.Source===2).EdbInfoId
+						futures_id: BarChartInfo.EdbInfoIdList.find(_ => _.Source===2).EdbInfoId,
+						basisEdb:BarChartInfo.BaseEdbInfoId
 					};
 
-					this.search_txt = EdbInfoList[0].EdbInfoId;
-					this.tableData = [EdbInfoList[0]];
-					this.searchOptions = this.tableData;
+					// this.tableData = [EdbInfoList[0]];
+					this.tableData=EdbInfoList.filter(_e=>_e.Source).map((_e,index)=>{
+						return{
+							EdbInfoId:_e.EdbInfoId,
+							EdbName:XDataList[index].Name,
+							EdbNameEn:XDataList[index].NameEn,
+							isHide:XDataList[index].IsHide?true:false
+						}
+					})
+					this.xAxisList=XDataList.map((_item,index)=>{
+						return {
+							..._item,
+							// 判断是否为选择的指标
+							EdbInfoId:EdbInfoList[index]&&EdbInfoList[index].Source?EdbInfoList[index].EdbInfoId:0,
+						}
+					})
+
 
 					this.initDateOptions = ChartInfo.Source===5 ? {
 						DateList: DataResp.Extra.DateList,
@@ -368,39 +405,106 @@ export default {
 			} 
 
 			this.tableData.push({...edb,isHide:false});
+			console.log(this.xAxisList);
+			// 向横坐标配置项中插入值
+			if(this.xAxisList.length){
+				const index=this.xAxisList.findIndex(i=>i.EdbInfoId===0)
+				console.log(index);
+				if(index!=-1){
+					this.xAxisList.splice(index,0,{
+						EdbInfoId:edb.EdbInfoId,
+						IsHide:0,
+						Name:edb.EdbName,
+						NameEn:edb.EdbNameEn
+					})
+				}else{
+					this.xAxisList.push({
+						EdbInfoId:edb.EdbInfoId,
+						IsHide:0,
+						Name:edb.EdbName,
+						NameEn:edb.EdbNameEn
+					})
+				}
+			}
+			
+			
+			this.search_txt=''
+			this.search_page = 1;
+			this.searchOptions=[]
 			if(!this.chartInfo.basisEdb){
 				this.chartInfo.basisEdb=this.tableData[0].EdbInfoId
 			}
-			this.commodityChartData.length && this.chartInfo.futures_id && this.$refs.BarOptRef.getBarData();
+			this.handleRefreshChartData()
 		},
 
 		// 选择的指标显示隐藏状态改变
-		handleChangeBasisEdbHide(item){
+		handleChangeBasisEdbHide(item,index){
 			item.isHide=!item.isHide
+			this.xAxisList[index].IsHide=item.isHide?1:0
+			this.handleRefreshChartData()
 		},
 		// 删除选择的指标
 		async handleBasisEdbDel(index,item){
 			if(this.tableData.length===1){
 
-				await this.$confirm('现货指标全部删除后,图表会被清楚,确认操作吗?','提示',{
+				await this.$confirm('现货指标全部删除后,图表会被清,确认操作吗?','提示',{
 					type:'warning'
 				})
 			}
+			
+			this.tableData.splice(index,1)
+			this.xAxisList.splice(index,1)
 			if(this.chartInfo.basisEdb===item.EdbInfoId){
 				this.chartInfo.basisEdb=''
+				this.xAxisList=[]
+				return
 			}
-			this.tableData.splice(index,1)
+			this.handleRefreshChartData()
+		},
+		// 横坐标设置修改回调
+		handleXAxisDataChange(arr){
+			console.log('横坐标修改回调',arr);
+			this.xAxisList=arr
+			// 修改tableData
+			const temArr=this.tableData.filter(_e=>arr.some(_i=>_i.EdbInfoId===_e.EdbInfoId))
+			console.log(temArr)
+
+			temArr.forEach(item=>{
+				arr.forEach(_item=>{
+					if(_item.EdbInfoId===item.EdbInfoId){
+						item.isHide=_item.IsHide?true:false
+					}
+				})
+			})
+
+			this.tableData=temArr
+			if(temArr.length===0){
+				this.chartInfo.basisEdb=''
+				this.xAxisList=[]
+				return
+			}
+			this.handleRefreshChartData()
+			
 		},
 
 		/* 选择期货 */
 		changeFuturesHandle(val) {
 			if(!val) return
-			this.commodityChartData.length && this.tableData.length && this.$refs.BarOptRef.getBarData();
+			this.handleRefreshChartData()
+		},
+
+		// 日期基准变更
+		handleBasisEdbChange(val){
+			if(!val) return
+			this.handleRefreshChartData()
 		},
 
     /* 获取数据 */
 		async getPreviewData({sort,dateList}) {
-			if(!dateList.length) this.commodityChartData = [];
+			if(!dateList.length) {
+				this.commodityChartData = []
+				this.xAxisList=[]
+			};
 			if(!this.tableData.length || !dateList.length) return
 
 			this.chartInfo.Source===2
@@ -411,6 +515,13 @@ export default {
 
 		/* 价格曲线预览 */
 		async getCommodityPreview(dateList) {
+			const xDataListArr=this.xAxisList.map(_item=>{
+				return {
+					Name:_item.Name,
+					NameEn:_item.NameEn,
+					IsHide:_item.IsHide
+				}
+			})
 			let params = {
 				EdbInfoIdList: [
 					...this.tableData.map(_ => ({EdbInfoId: _.EdbInfoId,Name:'',Source: 1})),
@@ -423,6 +534,8 @@ export default {
 					Name: '',
 					Color: _.Color
 				})),
+				BaseEdbInfoId:this.chartInfo.basisEdb,
+				XDataList:xDataListArr||[]
 			}
 
 			const res = await futuresInterface.getChartData(params);
@@ -432,6 +545,13 @@ export default {
 			this.commodityEdbList = EdbInfoList;
 			this.commodityChartData = YDataList;
 			this.commodityXData = XDataList;
+			this.xAxisList=XDataList.map((_item,index)=>{
+				return {
+					..._item,
+					// 判断是否为选择的指标
+					EdbInfoId:EdbInfoList[index]&&EdbInfoList[index].Source?EdbInfoList[index].EdbInfoId:0,
+				}
+			})
 
 			//初始状态设置上下限极值
 			if(!this.chartInfo.LeftMin) {
@@ -448,11 +568,18 @@ export default {
 		async getProfitPreview(dateList) {
 			if(!this.profitInfo.list.length) return this.$message.warning(this.$t('ToolBox.CommodityPriceChart.tips_msg04')||'请先设置盘面利润配置')
 
+			const xDataListArr=this.xAxisList.map(_item=>{
+				return {
+					Name:_item.Name,
+					NameEn:_item.NameEn,
+					IsHide:_item.IsHide
+				}
+			})
 			const { list,formula } = this.profitInfo;
 			let params = {
 				FutureGoodEdbInfoIdList: list,
 				CalculateFormula: formula,
-				BaseEdbInfoId: this.tableData[0].EdbInfoId,
+				BaseEdbInfoId: this.chartInfo.basisEdb,
 				DateList: dateList.map(_ => ({
 					Type: _.Type,
 					Date: _.Date,
@@ -460,7 +587,10 @@ export default {
 					Name: '',
 					Color: _.Color
 				})),
+				EdbInfoIdList:this.tableData.map(i=>i.EdbInfoId),
+				XDataList:xDataListArr||[]
 			}
+			console.log('刷新利润曲线');
 
 			const res = await futuresInterface.previewProfitData(params);
 			if(res.Ret !== 200) return
@@ -471,6 +601,13 @@ export default {
 			this.commodityEdbList = EdbInfoList;
 			this.commodityChartData = YDataList;
 			this.commodityXData = XDataList;
+			this.xAxisList=XDataList.map((_item,index)=>{
+				return {
+					..._item,
+					// 判断是否为选择的指标
+					EdbInfoId:EdbInfoList[index]&&EdbInfoList[index].Source?EdbInfoList[index].EdbInfoId:0,
+				}
+			})
 			this.chartInfo = {
 				...this.chartInfo,
 				ProfitName,
@@ -563,13 +700,20 @@ export default {
 		
 		/* 商品价格曲线保存 */
 		async handleSaveCommodity(public_param) {
+			const xDataListArr=this.xAxisList.map(_item=>{
+				return {
+					Name:_item.Name,
+					NameEn:_item.NameEn,
+					IsHide:_item.IsHide
+				}
+			})
 			let params =  {
 				...public_param,
 				LeftMin: String(this.chartLimit.min),
 				LeftMax: String(this.chartLimit.max),
 				BarChartInfo: {
 					EdbInfoIdList: [
-						...this.tableData.map(_ => ({EdbInfoId: _.EdbInfoId,Name:'',Source: 1})),
+						...this.tableData.map(_ => ({EdbInfoId: _.EdbInfoId,Source: 1})),
 						{ EdbInfoId: this.chartInfo.futures_id,Name: '',Source: 2 }
 					],
 					DateList: this.$refs.BarOptRef.dateList.map(item => ({
@@ -578,8 +722,10 @@ export default {
 						Value: item.Value,
 						Name: '',
 						Color: item.Color
-					}))
-				}
+					})),
+					BaseEdbInfoId:this.chartInfo.basisEdb,
+					XDataList:xDataListArr||[]
+				},
 			}
 
 			const { Ret,Data } = this.chart_code

+ 2 - 1
src/views/futures_manage/commodityChartBase.vue

@@ -717,7 +717,8 @@ export default {
 					ProfitNameEn: res.Data.DataResp.ProfitNameEn,
 					ProfitName: res.Data.DataResp.ProfitName,
 				} : res.Data.ChartInfo;
-				this.tableData = [res.Data.EdbInfoList[0]]
+				// this.tableData = [res.Data.EdbInfoList[0]]
+				this.tableData=res.Data.EdbInfoList.filter(_e=>_e.Source)
 				this.initCommodityData(res.Data)
 			})
 		},

+ 135 - 0
src/views/futures_manage/components/xAxisSet.vue

@@ -0,0 +1,135 @@
+<template>
+  <el-dialog
+    :visible.sync="isShow"
+    :close-on-click-modal="false"
+    :modal-append-to-body="true"
+		append-to-body
+    title="横坐标设置"
+    @close="cancelHandle"
+    custom-class="xAxis-set-dialog"
+    center
+    width="800px"
+    top="8vh"
+    v-dialogDrag
+  >
+    <div class="list-wrap">
+      <ul class="list-box">
+        <li v-for="item,index in arr" :key="`${item.EdbInfoId}_${index}`" class="item">
+          <el-input v-model="item.label"></el-input>
+          <img
+            class="icon"
+            :src="
+              item.IsHide
+                ? require('@/assets/img/icons/eyes-hide-active.png')
+                : require('@/assets/img/icons/eyes-show-active.png')
+            "
+            alt=""
+            @click="handleChangeBasisEdbHide(item, index)"
+          />
+					<i class="el-icon-error" style="color:#f00;margin-left:5px" v-if="item.EdbInfoId" @click="handleBasisEdbDel(index,item)"></i>
+        </li>
+      </ul>
+			<div class="btns">
+				<el-button type="primary" plain @click="cancelHandle">取消</el-button>
+				<el-button type="primary" @click="handleSave">保存</el-button>
+			</div>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+export default {
+  props: {
+    isShow: {
+      type: Boolean,
+    },
+    opts: []
+  },
+  watch: {
+    isShow(n) {
+      console.log('isShow', this.opts);
+      if (n) {
+        const arr = this.opts || []
+        this.arr = arr.map(item => {
+          return {
+						...item,
+            label: this.$i18n.locale == 'zh' ? item.Name : item.NameEn,
+          }
+        })
+      }
+    }
+  },
+  data() {
+    return {
+      arr: []
+    }
+  },
+  methods: {
+    cancelHandle() {
+      this.$emit('update:isShow', false);
+    },
+
+		handleSave(){
+			this.arr.forEach(item => {
+				if(this.$i18n.locale == 'zh'){
+					item.Name=item.label
+				}else{
+					item.NameEn=item.label
+				}
+			});
+			this.$emit('change',this.arr)
+			this.cancelHandle()
+		},
+
+		handleChangeBasisEdbHide(item,index){
+			item.IsHide=item.IsHide?0:1
+		},
+
+		handleBasisEdbDel(item,index){
+			const count=this.arr.filter(i=>i.EdbInfoId)
+			if(count.length===1){
+				this.$confirm('现货指标全部删除后,图表会被清除,确认操作吗?','提示',{
+					type:'warning'
+				}).then(()=>{
+					this.arr.splice(index,1)
+				}).catch(()=>{})
+				return 
+			}
+			this.arr.splice(index,1)
+		}
+
+
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+.list-wrap{
+	.list-box{
+		display: flex;
+		flex-wrap: wrap;
+		gap: 20px 0;
+		.item{
+			width: 50%;
+			padding: 0 10px;
+			display: flex;
+			align-items: center;
+			box-sizing: border-box;
+			.el-input{
+				width: 300px;
+			}
+			.icon{
+				width: 16px;
+				height: 16px;
+				margin-left: 10px;
+				display: block;
+			}
+		}
+	}
+	.btns{
+		margin-top: 20px;
+		padding: 30px 0;
+		text-align: center;
+	}
+}
+</style>

+ 2 - 1
src/views/mychart_manage/components/chartDetailDia.vue

@@ -661,7 +661,8 @@ export default {
             //雷达图
             this.chartInfo.ChartType === 11 && this.initRadarData(res.Data);
           }else if([2,5].includes(this.chartInfo.Source)) {
-            this.tableData = [res.Data.EdbInfoList[0]];
+            // this.tableData = [res.Data.EdbInfoList[0]];
+            this.tableData=res.Data.EdbInfoList.filter(_e=>_e.Source)
             this.chartInfo = res.Data.ChartInfo.Source===5 ? {
               ...res.Data.ChartInfo,
               ProfitNameEn: res.Data.DataResp.ProfitNameEn,

+ 9 - 2
src/views/ppt_manage/mixins/mixins.js

@@ -852,7 +852,7 @@ export default {
       //x轴
       let xAxis = {
         ...scatterXAxis,
-        categories: this.commodityXData.map(_ =>_.Name),
+        categories: this.commodityXData.filter(_=>_.IsHide===0).map(_ =>_.Name),
         tickWidth: 1,
         labels: {
           y: 14,
@@ -1033,7 +1033,14 @@ export default {
             return item
           }
         })
-        return arr;
+        // 根据设置的x轴显示隐藏去除值
+        let temArr=[]
+        this.commodityXData.forEach((i,index)=>{
+          if(i.IsHide!==1){
+            temArr.push(arr[index])
+          }
+        })
+        return temArr;
     },
 
     /* 商品价格曲线获取详情赋值 */