web-base-pc/src/components/performance.vue

285 lines
8.8 KiB
Vue
Raw Normal View History

2025-03-23 09:23:38 +08:00
<template>
<div>
<div class="styles">
<el-form >
<el-col :span="12">
<el-select v-model="texts"
@change="selectTime"
placeholder="">
<el-option v-for="item in deliList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-col>
</el-form>
</div>
<div class="right-lines">
<div class="item-s" v-for="item in list">
<div>{{item.name}}</div>
<div class="bg-color" :style="{backgroundColor:`${item.color}`}"></div>
</div>
</div>
<!-- <div class="lines"></div>-->
<div class="flex-s">
<div id="main1" style="width: 100%;margin-top: 10px" :style="myChartStyle"></div>
</div>
</div>
</template>
<script>
import * as echarts from "echarts";
import {getDayType, getIndexAddAchieve, getMemberRecommend} from "@/api/index";
import {formatSeconds} from "@/util/common";
export default {
name: "recommendTime",
data(){
return{
2025-04-01 19:23:51 +08:00
list:[{"name":'左区首购',"color":"#FF5151"},
{"name":'左区复购',"color":"#BB0909"},
{"name":'右区首购',"color":"#FFAE36"},
{"name":'右区复购',"color":"#935801"}
2025-03-23 09:23:38 +08:00
],
texts:'',
2025-04-01 19:23:51 +08:00
deliList:[{"label":'近七日',"value":7},{"label":'近十四日',"value":14},{"label":'近三十日',"value":30}],
2025-03-23 09:23:38 +08:00
myChartStyle: {
float: "center",
width: "700px",
height: "550px",
paddingTop: "0",
// margin: "20px",
}, //图表样式
sexData: [
{
data: [150, 230, 224, 218, 135, 147, 260],
type: 'line',
color:'#FE9A02',
label: {
show: false,
position:'right',
},
},
],
}
},
mounted() {
this.selected();
},
methods:{
selectTime(data) {
this.texts =data
this.getData();
},
selected() {
getDayType().then((res)=>{
this.deliList = res.data
this.ageChart(res.data);
this.getData(res.data[0].value);
this.texts = res.data[0].label
})
},
getData(value) {
getIndexAddAchieve({"dayType":this.texts || value}).then((res)=>{
this.ageChart(res.data);
})
},
ageChart(data) {
var myChart = echarts.init(document.getElementById('main1'));
let time =[];
let time1 =[];
let arr1 = [];
let arr2 = [];
let arr3 = [];
let arr4 = [];
data.forEach((item)=>{
if(item.settleDate){
// let time1=item.settleDate.split("-");
// let json = time1[1]+'-'+time1[2]
time.push(item.settleDate)
}
arr1.push(item.repANewPv)
arr2.push(item.repBNewPv)
arr3.push(item.bNewPv)
arr4.push(item.aNewPv)
})
console.error(time)
var option = {
title: {
2025-04-01 19:23:51 +08:00
text: '业绩(万)'
2025-03-23 09:23:38 +08:00
},
tooltip: {
// _8:function (params){
// return `<div style="text-align: center;color: #fff">`+params[0].axisValue+'<br/>'+ '<span style="">'+params[0].value + `</span>`
// },
// backgroundColor: '#FF5151',
// trigger: 'axis',
// axisPointer: {
// type: 'shadow'
// }
},
legend: {
// left: "right",\\
top: "70px",
right: "30px",
width: "auto",
orient: 'vertical',
itemHeight: 21,
itemWidth:39
},
grid: {
left: '0%',
right: '4%',
bottom: '3%',
containLabel: true
},
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", //虚线
width: 2
}
}
},
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">
::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: 12px;
}
.item-s{
padding-bottom: 10px;
display: flex;
line-height: 24px;
}
.bg-color{
width: 40px;
height: 22px;
border-radius: 2px;
margin-left: 5px;
}
.flex-s{
display: flex;
justify-content: center;
align-items: center;
width: 850px;
}
.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);
}
</style>