3
0
Fork 0
web-store-retail-h5/pages/mine/addNewPv/index.vue

358 lines
7.8 KiB
Vue
Raw Normal View History

2025-03-23 09:29:40 +08:00
<template>
<div class="width-auto">
<view class="titleF">
<view class="title">
<!-- {{'活跃会员对比'}} -->
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 {
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: '',
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>