| 
									
										
										
										
											2025-03-23 09:29:40 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | <template> | 
					
						
							|  |  |  |  |   <div class="width-auto"> | 
					
						
							|  |  |  |  |     <view class="titleF"> | 
					
						
							|  |  |  |  |       <view class="title"> | 
					
						
							| 
									
										
										
										
											2025-04-01 21:35:18 +08:00
										 |  |  |  |         <!-- {{'活跃会员对比'}} --> | 
					
						
							| 
									
										
										
										
											2025-03-23 09:29:40 +08:00
										 |  |  |  |       </view> | 
					
						
							|  |  |  |  |       <picker :range="dateTypeList" | 
					
						
							|  |  |  |  |               :value="index" | 
					
						
							|  |  |  |  |               range-key="label" | 
					
						
							|  |  |  |  |               @change="bindPickerChange"> | 
					
						
							|  |  |  |  |         <view class="mClass"> | 
					
						
							|  |  |  |  |           <view>{{dataName}}</view> | 
					
						
							|  |  |  |  |           <u-icon name="arrow-down" | 
					
						
							|  |  |  |  |                   color="#999"></u-icon> | 
					
						
							|  |  |  |  |         </view> | 
					
						
							|  |  |  |  |       </picker> | 
					
						
							|  |  |  |  |     </view> | 
					
						
							|  |  |  |  |     <div class="flex-s"> | 
					
						
							|  |  |  |  |       <div id="mounthData2" | 
					
						
							|  |  |  |  |            style="width: 700rpx;height: 600rpx;" | 
					
						
							|  |  |  |  |            :style="myChartStyle"></div> | 
					
						
							|  |  |  |  |     </div> | 
					
						
							|  |  |  |  |     <div class="right-lines"> | 
					
						
							|  |  |  |  |             <div class="item-s" v-for="item in list"> | 
					
						
							|  |  |  |  |                 | 
					
						
							|  |  |  |  |                 <div class="bg-color" :style="{backgroundColor:`${item.color}`}"></div> | 
					
						
							|  |  |  |  |                 <div>{{item.name}}</div> | 
					
						
							|  |  |  |  |             </div> | 
					
						
							|  |  |  |  |         </div> | 
					
						
							|  |  |  |  |   </div> | 
					
						
							|  |  |  |  | </template> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | <script> | 
					
						
							|  |  |  |  | import * as echarts from 'echarts' | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | import * as api from '@/config/activity.js' | 
					
						
							|  |  |  |  | export default { | 
					
						
							|  |  |  |  |   data() { | 
					
						
							|  |  |  |  |     return { | 
					
						
							| 
									
										
										
										
											2025-04-01 21:35:18 +08:00
										 |  |  |  |       list:[{"name":'左区首购',"color":"#FF5151"}, | 
					
						
							|  |  |  |  |                 {"name":'左区复购',"color":"#BB0909"}, | 
					
						
							|  |  |  |  |                 {"name":'右区首购',"color":"#FFAE36"}, | 
					
						
							|  |  |  |  |                 {"name":'右区复购',"color":"#935801"} | 
					
						
							| 
									
										
										
										
											2025-03-23 09:29:40 +08:00
										 |  |  |  |             ], | 
					
						
							|  |  |  |  |       dataName: '', | 
					
						
							|  |  |  |  |       index: 0, | 
					
						
							|  |  |  |  |       myChartStyle: { | 
					
						
							|  |  |  |  |         float: 'center', | 
					
						
							|  |  |  |  |         width: '690rpx', | 
					
						
							|  |  |  |  |         height: '750rpx', | 
					
						
							|  |  |  |  |         paddingTop: '0', | 
					
						
							|  |  |  |  |       }, | 
					
						
							|  |  |  |  |       dateTypeList: [], | 
					
						
							|  |  |  |  |       dateType: 1, | 
					
						
							|  |  |  |  |       whatMounth: '', | 
					
						
							|  |  |  |  |       mounthList: [ | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |           value: 1, | 
					
						
							|  |  |  |  |           label: '1月', | 
					
						
							|  |  |  |  |         }, | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |           value: 2, | 
					
						
							|  |  |  |  |           label: '2月', | 
					
						
							|  |  |  |  |         }, | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |           value: 3, | 
					
						
							|  |  |  |  |           label: '3月', | 
					
						
							|  |  |  |  |         }, | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |           value: 4, | 
					
						
							|  |  |  |  |           label: '4月', | 
					
						
							|  |  |  |  |         }, | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |           value: 5, | 
					
						
							|  |  |  |  |           label: '5月', | 
					
						
							|  |  |  |  |         }, | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |           value: 6, | 
					
						
							|  |  |  |  |           label: '6月', | 
					
						
							|  |  |  |  |         }, | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |           value: 7, | 
					
						
							|  |  |  |  |           label: '7月', | 
					
						
							|  |  |  |  |         }, | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |           value: 8, | 
					
						
							|  |  |  |  |           label: '8月', | 
					
						
							|  |  |  |  |         }, | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |           value: 9, | 
					
						
							|  |  |  |  |           label: '9月', | 
					
						
							|  |  |  |  |         }, | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |           value: 10, | 
					
						
							|  |  |  |  |           label: '10月', | 
					
						
							|  |  |  |  |         }, | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |           value: 11, | 
					
						
							|  |  |  |  |           label: '11月', | 
					
						
							|  |  |  |  |         }, | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |           value: 12, | 
					
						
							|  |  |  |  |           label: '12月', | 
					
						
							|  |  |  |  |         }, | 
					
						
							|  |  |  |  |       ], | 
					
						
							|  |  |  |  |       // margin: "20px",
 | 
					
						
							|  |  |  |  |       //
 | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |   }, | 
					
						
							|  |  |  |  |   mounted() { | 
					
						
							|  |  |  |  |     this.getDayType() | 
					
						
							|  |  |  |  |     // this.upDateCover()
 | 
					
						
							|  |  |  |  |     // this.drawChart()
 | 
					
						
							|  |  |  |  |   }, | 
					
						
							|  |  |  |  |   methods: { | 
					
						
							|  |  |  |  |     bindPickerChange(e) { | 
					
						
							|  |  |  |  |       this.dateType = e.detail.value + 1 | 
					
						
							|  |  |  |  |       this.dateTypeList.forEach((item) => { | 
					
						
							|  |  |  |  |         if (this.dateType == item.value) { | 
					
						
							|  |  |  |  |           this.dataName = item.label | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |       }) | 
					
						
							|  |  |  |  |       setTimeout(() => { | 
					
						
							|  |  |  |  |         this.upDateCover(this.dateType) | 
					
						
							|  |  |  |  |       }, 50) | 
					
						
							|  |  |  |  |     }, | 
					
						
							|  |  |  |  |     getDayType() { | 
					
						
							|  |  |  |  |       api.getDayType().then((res) => { | 
					
						
							|  |  |  |  |         this.dateTypeList = res.data | 
					
						
							|  |  |  |  |         this.dataName = res.data[0].label | 
					
						
							|  |  |  |  |         this.upDateCover(res.data[0].value) | 
					
						
							|  |  |  |  |       }) | 
					
						
							|  |  |  |  |     }, | 
					
						
							|  |  |  |  |     upDateCover(value) { | 
					
						
							|  |  |  |  |       api.getIndexAddAchieve({"dayType": value}).then((res) => { | 
					
						
							|  |  |  |  |         let time = [] | 
					
						
							|  |  |  |  |         let arr1 = [] | 
					
						
							|  |  |  |  |         let arr2 = [] | 
					
						
							|  |  |  |  |         let arr3 = [] | 
					
						
							|  |  |  |  |         let arr4 = [] | 
					
						
							|  |  |  |  |         res.data.forEach((item) => { | 
					
						
							|  |  |  |  |           if (item.settleDate) { | 
					
						
							|  |  |  |  |             time.push(item.settleDate) | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           arr1.push(item.repANewPv) | 
					
						
							|  |  |  |  |           arr2.push(item.repBNewPv) | 
					
						
							|  |  |  |  |           arr3.push(item.bNewPv) | 
					
						
							|  |  |  |  |           arr4.push(item.aNewPv) | 
					
						
							|  |  |  |  |         }) | 
					
						
							|  |  |  |  |         this.drawChart(arr1, arr2, arr3, arr4, time) | 
					
						
							|  |  |  |  |       }) | 
					
						
							|  |  |  |  |     }, | 
					
						
							|  |  |  |  |     drawChart(arr1, arr2, arr3, arr4, time) { | 
					
						
							|  |  |  |  |       // 基于准备好的dom,初始化echarts实例  这个和上面的main对应
 | 
					
						
							|  |  |  |  |       var myChart = echarts.init(document.getElementById('mounthData2')) | 
					
						
							|  |  |  |  |       // 指定图表的配置项和数据
 | 
					
						
							|  |  |  |  |       let option = { | 
					
						
							|  |  |  |  |         title: { | 
					
						
							|  |  |  |  |           text: '', | 
					
						
							| 
									
										
										
										
											2025-04-01 21:35:18 +08:00
										 |  |  |  |           subtext: '业绩(万)', | 
					
						
							| 
									
										
										
										
											2025-03-23 09:29:40 +08:00
										 |  |  |  |         }, | 
					
						
							|  |  |  |  |         tooltip: {}, | 
					
						
							|  |  |  |  |         legend: { | 
					
						
							|  |  |  |  |           top: 'bottom', | 
					
						
							|  |  |  |  |           bottom: '5%', | 
					
						
							|  |  |  |  |         }, | 
					
						
							|  |  |  |  |         xAxis: { | 
					
						
							|  |  |  |  |           type: 'category', | 
					
						
							|  |  |  |  |           data: time, | 
					
						
							|  |  |  |  |           axisLine: { | 
					
						
							|  |  |  |  |             show: true, | 
					
						
							|  |  |  |  |             lineStyle: { | 
					
						
							|  |  |  |  |               color: '#333', | 
					
						
							|  |  |  |  |               width: '1', // 坐标轴线线宽
 | 
					
						
							|  |  |  |  |               type: 'solid', // 坐标轴线线的类型(solid实线类型;dashed虚线类型;dotted点状类型)
 | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |           }, | 
					
						
							|  |  |  |  |           axisTick: { | 
					
						
							|  |  |  |  |             show: true, // 是否显示坐标轴刻度
 | 
					
						
							|  |  |  |  |             inside: true, // 坐标轴刻度是否朝内,默认朝外
 | 
					
						
							|  |  |  |  |             length: 5, // 坐标轴刻度的长度
 | 
					
						
							|  |  |  |  |             lineStyle: { | 
					
						
							|  |  |  |  |               color: '#FFF', // 刻度线的颜色
 | 
					
						
							|  |  |  |  |               width: 10, // 坐标轴刻度线宽
 | 
					
						
							|  |  |  |  |               type: 'solid', // 坐标轴线线的类型(solid实线类型;dashed虚线类型;dotted点状类型)
 | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |           }, | 
					
						
							|  |  |  |  |           splitLine: { | 
					
						
							|  |  |  |  |             show: false, | 
					
						
							|  |  |  |  |           }, | 
					
						
							|  |  |  |  |           axisLabel: { | 
					
						
							|  |  |  |  |             type: 'category', | 
					
						
							|  |  |  |  |             interval: 0, | 
					
						
							|  |  |  |  |             textStyle: { | 
					
						
							|  |  |  |  |               color: '#000', | 
					
						
							|  |  |  |  |               fontSize: '10', | 
					
						
							|  |  |  |  |               itemSize: '', | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |             formatter: function (data) { | 
					
						
							|  |  |  |  |               return data | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |           }, | 
					
						
							|  |  |  |  |         }, | 
					
						
							|  |  |  |  |         yAxis: { | 
					
						
							|  |  |  |  |           type: 'value', | 
					
						
							|  |  |  |  |           splitLine: { | 
					
						
							|  |  |  |  |             show: true, | 
					
						
							|  |  |  |  |             lineStyle: { | 
					
						
							|  |  |  |  |               color: '#CCCCCC', | 
					
						
							|  |  |  |  |               type: 'dashed', //虚线
 | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |           }, | 
					
						
							|  |  |  |  |         }, | 
					
						
							|  |  |  |  |         series: [ | 
					
						
							|  |  |  |  |           { | 
					
						
							|  |  |  |  |             data: arr4, | 
					
						
							|  |  |  |  |             type: 'line', | 
					
						
							|  |  |  |  |             color: '#FF5151', | 
					
						
							|  |  |  |  |             label: { | 
					
						
							|  |  |  |  |               show: false, | 
					
						
							|  |  |  |  |               position: 'right', | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |             formatter: function (data) { | 
					
						
							|  |  |  |  |               console.error(data) | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |           }, | 
					
						
							|  |  |  |  |           { | 
					
						
							|  |  |  |  |             data: arr1, | 
					
						
							|  |  |  |  |             type: 'line', | 
					
						
							|  |  |  |  |             color: '#BB0909', | 
					
						
							|  |  |  |  |             label: { | 
					
						
							|  |  |  |  |               show: false, | 
					
						
							|  |  |  |  |               position: 'right', | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |           }, | 
					
						
							|  |  |  |  |           { | 
					
						
							|  |  |  |  |             data: arr3, | 
					
						
							|  |  |  |  |             type: 'line', | 
					
						
							|  |  |  |  |             color: '#FE9A02', | 
					
						
							|  |  |  |  |             label: { | 
					
						
							|  |  |  |  |               show: false, | 
					
						
							|  |  |  |  |               position: 'right', | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |           }, | 
					
						
							|  |  |  |  |           { | 
					
						
							|  |  |  |  |             data: arr2, | 
					
						
							|  |  |  |  |             type: 'line', | 
					
						
							|  |  |  |  |             color: '#935801', | 
					
						
							|  |  |  |  |             label: { | 
					
						
							|  |  |  |  |               show: false, | 
					
						
							|  |  |  |  |               position: 'right', | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |           }, | 
					
						
							|  |  |  |  |         ], | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       // 使用刚指定的配置项和数据显示图表。
 | 
					
						
							|  |  |  |  |       myChart.setOption(option) | 
					
						
							|  |  |  |  |     }, | 
					
						
							|  |  |  |  |   }, | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | </script> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | <style scoped lang="scss"> | 
					
						
							|  |  |  |  | .width-auto { | 
					
						
							|  |  |  |  |   width: 100%; | 
					
						
							|  |  |  |  |   position: relative; | 
					
						
							|  |  |  |  |   height: 950rpx; | 
					
						
							|  |  |  |  |   background-color: #fff; | 
					
						
							|  |  |  |  |   width: 690rpx; | 
					
						
							|  |  |  |  |   border-radius: 20rpx; | 
					
						
							|  |  |  |  |   margin: 20rpx auto; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | .title { | 
					
						
							|  |  |  |  |   height: 80rpx; | 
					
						
							|  |  |  |  |   line-height: 80rpx; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   margin-top: 10rpx; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ::v-deep .el-select .el-input .el-select__caret { | 
					
						
							|  |  |  |  |   color: #333; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | .lines { | 
					
						
							|  |  |  |  |   width: 2px; | 
					
						
							|  |  |  |  |   height: 470px; | 
					
						
							|  |  |  |  |   opacity: 1; | 
					
						
							|  |  |  |  |   background: #979797; | 
					
						
							|  |  |  |  |   position: absolute; | 
					
						
							|  |  |  |  |   bottom: 50px; | 
					
						
							|  |  |  |  |   left: 50%; | 
					
						
							|  |  |  |  |   margin-left: -110px; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | .right-lines { | 
					
						
							|  |  |  |  |   position: absolute; | 
					
						
							|  |  |  |  |   // right: 80px;
 | 
					
						
							|  |  |  |  |   // top: 140px;
 | 
					
						
							|  |  |  |  |   color: #999; | 
					
						
							|  |  |  |  |   font-size: 10px; | 
					
						
							|  |  |  |  |   display: flex; | 
					
						
							|  |  |  |  |   justify-content: center; /* 水平居中 */ | 
					
						
							|  |  |  |  |    align-items: center;     /* 垂直居中 */ | 
					
						
							|  |  |  |  |   // width: 100%;
 | 
					
						
							|  |  |  |  |   left: 0; | 
					
						
							|  |  |  |  |   right: 0; | 
					
						
							|  |  |  |  |   margin: 0 auto; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | .item-s { | 
					
						
							|  |  |  |  |   // padding-bottom: 10px;
 | 
					
						
							|  |  |  |  |   display: flex; | 
					
						
							|  |  |  |  |   // line-height: 24px;
 | 
					
						
							|  |  |  |  |   align-items: center;  | 
					
						
							|  |  |  |  |   margin-right: 10rpx; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | .bg-color { | 
					
						
							|  |  |  |  |   width: 20px; | 
					
						
							|  |  |  |  |   height: 10px; | 
					
						
							|  |  |  |  |   border-radius: 2px; | 
					
						
							|  |  |  |  |   margin-right: 10rpx; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | .flex-s { | 
					
						
							|  |  |  |  |   // display: flex;
 | 
					
						
							|  |  |  |  |   // justify-content: center;
 | 
					
						
							|  |  |  |  |   // align-items: center;
 | 
					
						
							|  |  |  |  |   // width: 700px;
 | 
					
						
							|  |  |  |  |   // padding: 0 20rpx;
 | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | .styles { | 
					
						
							|  |  |  |  |   position: absolute; | 
					
						
							|  |  |  |  |   right: -30px; | 
					
						
							|  |  |  |  |   z-index: 111; | 
					
						
							|  |  |  |  |   top: 60px; | 
					
						
							|  |  |  |  |   /*background: rgba(0,0,0,0.05);*/ | 
					
						
							|  |  |  |  |   /*border-radius: 4px 4px 4px 4px;*/ | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ::v-deep .el-select .el-input__inner { | 
					
						
							|  |  |  |  |   border: none; | 
					
						
							|  |  |  |  |   background: rgba(0, 0, 0, 0.05); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | .titleF { | 
					
						
							|  |  |  |  |   display: flex; | 
					
						
							|  |  |  |  |   border-bottom: 10rpx solid #f3f3f3; | 
					
						
							|  |  |  |  |   align-items: center; | 
					
						
							|  |  |  |  |   justify-content: space-between; | 
					
						
							|  |  |  |  |   padding: 20rpx 30rpx; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | .mClass { | 
					
						
							|  |  |  |  |   display: flex; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | </style> |