236 lines
6.1 KiB
Vue
236 lines
6.1 KiB
Vue
![]() |
<template>
|
|||
|
<div class="market-charts" :style="{ height: height }">
|
|||
|
<custom-echart-line-line :chart-data="chartsData.valData" height="100%" :option="chartsData.option" />
|
|||
|
</div>
|
|||
|
</template>
|
|||
|
<script setup>
|
|||
|
import { ref, reactive, onMounted, computed } from 'vue';
|
|||
|
|
|||
|
const props = defineProps({
|
|||
|
height: {
|
|||
|
type: String,
|
|||
|
default: '200px',
|
|||
|
},
|
|||
|
});
|
|||
|
const legendData = reactive(['苹果', '小麦', '白菜']);
|
|||
|
let linearColors = reactive([
|
|||
|
[
|
|||
|
{ offset: 0, color: 'rgba(15, 155, 179,0.1)' },
|
|||
|
{ offset: 0.6, color: 'rgba(15, 155, 179,0.5)' },
|
|||
|
{ offset: 1, color: 'rgba(15, 155, 179,1)' },
|
|||
|
],
|
|||
|
[
|
|||
|
{ offset: 0, color: 'rgba(106, 202, 55,0.1)' },
|
|||
|
{ offset: 0.6, color: 'rgba(106, 202, 55,0.5)' },
|
|||
|
{ offset: 1, color: 'rgba(106, 202, 55,1)' },
|
|||
|
],
|
|||
|
[
|
|||
|
{ offset: 0, color: 'rgba(141, 76, 181,0.1)' },
|
|||
|
{ offset: 0.6, color: 'rgba(141, 76, 181,0.5)' },
|
|||
|
{ offset: 1, color: 'rgba(141, 76, 181,1)' },
|
|||
|
],
|
|||
|
]);
|
|||
|
const lineColors = reactive(['#0f9bb3', '#6aca37', '#8d4cb5']);
|
|||
|
|
|||
|
const currentYear = ref(new Date().getFullYear() + 1);
|
|||
|
const xPoint = computed(() => {
|
|||
|
let list = [];
|
|||
|
console.info('111', currentYear.value);
|
|||
|
let minYear = currentYear.value - 10;
|
|||
|
for (let i = minYear; i < currentYear.value; i++) {
|
|||
|
list.push(i);
|
|||
|
}
|
|||
|
|
|||
|
return list;
|
|||
|
});
|
|||
|
|
|||
|
let numList = reactive([10, 100, 80]);
|
|||
|
const dataNum = (num) => {
|
|||
|
let data = [];
|
|||
|
if (xPoint.value && xPoint.value.length && xPoint.value.length > 0 && num) {
|
|||
|
xPoint.value.forEach((n) => {
|
|||
|
let numVal = Number(Number(n) * 0.1 + num + Math.random() * 100).toFixed(2);
|
|||
|
data.push(numVal);
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
return data;
|
|||
|
};
|
|||
|
|
|||
|
const series = () => {
|
|||
|
let list = [];
|
|||
|
|
|||
|
if (legendData && legendData.length && legendData.length > 0) {
|
|||
|
// console.info('legendData', legendData);
|
|||
|
|
|||
|
legendData.forEach((m, index) => {
|
|||
|
let val = {
|
|||
|
name: m,
|
|||
|
type: 'line',
|
|||
|
symbol: 'none', // 默认是空心圆(中间是白色的),改成实心圆
|
|||
|
smooth: true,
|
|||
|
lineStyle: {
|
|||
|
normal: {
|
|||
|
width: 1,
|
|||
|
color: lineColors[index], // 线条颜色
|
|||
|
},
|
|||
|
},
|
|||
|
areaStyle: {
|
|||
|
normal: {
|
|||
|
//线性渐变,前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是‘true’,则该四个值是绝对像素位置。
|
|||
|
color: {
|
|||
|
type: 'linear', // 线性渐变
|
|||
|
x: 0,
|
|||
|
y: 0,
|
|||
|
x2: 0,
|
|||
|
y2: 1,
|
|||
|
colorStops: linearColors[index],
|
|||
|
global: false, // 默认为 false
|
|||
|
},
|
|||
|
},
|
|||
|
},
|
|||
|
data: [],
|
|||
|
};
|
|||
|
val.data = dataNum(numList[index]);
|
|||
|
list.push(val);
|
|||
|
});
|
|||
|
}
|
|||
|
return list;
|
|||
|
};
|
|||
|
|
|||
|
const chartsData = reactive({
|
|||
|
option: {
|
|||
|
backgroundColor: 'transparent',
|
|||
|
grid: {
|
|||
|
left: 20,
|
|||
|
right: 20,
|
|||
|
bottom: '5%',
|
|||
|
top: '20%',
|
|||
|
containLabel: true,
|
|||
|
},
|
|||
|
tooltip: {
|
|||
|
trigger: 'axis',
|
|||
|
borderWidth: 1,
|
|||
|
borderColor: {
|
|||
|
type: 'linear',
|
|||
|
x: 0,
|
|||
|
y: 0,
|
|||
|
x2: 0,
|
|||
|
y2: 1,
|
|||
|
colorStops: [
|
|||
|
{
|
|||
|
offset: 0,
|
|||
|
color: 'rgba(85, 149, 233, .6)', // 0% 处的颜色
|
|||
|
},
|
|||
|
{
|
|||
|
offset: 1,
|
|||
|
color: 'rgba(85, 149, 233, 0)', // 100% 处的颜色
|
|||
|
},
|
|||
|
],
|
|||
|
global: false, // 缺省为 false
|
|||
|
},
|
|||
|
padding: [0, 8, 0, 8],
|
|||
|
textStyle: {
|
|||
|
color: '#fff',
|
|||
|
},
|
|||
|
axisPointer: {
|
|||
|
lineStyle: {
|
|||
|
type: 'dashed',
|
|||
|
color: 'rgba(255, 255, 255, .6)',
|
|||
|
},
|
|||
|
},
|
|||
|
extraCssText: 'box-shadow: 2px 2px 16px 1px rgba(0, 39, 102, 0.16)',
|
|||
|
formatter: function (params) {
|
|||
|
let content = `<div style='font-size: 14px; color: #666;text-align:left'>${params[0].name}</div>`;
|
|||
|
if (Array.isArray(params)) {
|
|||
|
for (let i = 0; i < params.length; i++) {
|
|||
|
content += `
|
|||
|
<div style='display: flex; align-items: center;color: #666;'>
|
|||
|
<div style='width: 10px; height: 10px;border-radius:4px;background: ${params[i].color}; margin-right: 8px;'></div>
|
|||
|
<div style='font-size: 12px; margin-right: 8px;'>${params[i].seriesName}</div>
|
|||
|
<div style='font-size: 14px;'>${params[i].value}</div>
|
|||
|
</div>
|
|||
|
`;
|
|||
|
}
|
|||
|
}
|
|||
|
return content;
|
|||
|
},
|
|||
|
},
|
|||
|
legend: {
|
|||
|
show: true,
|
|||
|
data: Array.from(legendData),
|
|||
|
left: 'center', // 距离左侧10%的位置
|
|||
|
top: '0', // 垂直居中
|
|||
|
itemWidth: 15, // 图例标记的宽度
|
|||
|
itemHeight: 8, // 图例标记的高度
|
|||
|
textStyle: {
|
|||
|
fontSize: 10, // 图例文字的字体大小
|
|||
|
color: '#333', // 图例文字的颜色
|
|||
|
},
|
|||
|
},
|
|||
|
xAxis: {
|
|||
|
type: 'category',
|
|||
|
boundaryGap: false,
|
|||
|
axisLabel: {
|
|||
|
interval: 0, // 设置为 1,表示『隔一个标签显示一个标签』
|
|||
|
textStyle: {
|
|||
|
color: '#666',
|
|||
|
fontStyle: 'normal',
|
|||
|
fontSize: 10,
|
|||
|
},
|
|||
|
},
|
|||
|
axisTick: {
|
|||
|
show: false,
|
|||
|
},
|
|||
|
axisLine: {
|
|||
|
// 坐标轴轴线相关设置
|
|||
|
lineStyle: {
|
|||
|
color: 'rgba(77, 128, 254, 1)',
|
|||
|
},
|
|||
|
},
|
|||
|
splitLine: {
|
|||
|
show: false,
|
|||
|
},
|
|||
|
data: xPoint.value,
|
|||
|
},
|
|||
|
yAxis: {
|
|||
|
type: 'value',
|
|||
|
name: ' ',
|
|||
|
nameTextStyle: {
|
|||
|
color: '#666',
|
|||
|
fontSize: 14,
|
|||
|
padding: [0, 0, 0, -30],
|
|||
|
},
|
|||
|
axisLabel: {
|
|||
|
interval: 0, // 设置为 1,表示『隔一个标签显示一个标签』
|
|||
|
textStyle: {
|
|||
|
color: '#666',
|
|||
|
fontStyle: 'normal',
|
|||
|
fontSize: 12,
|
|||
|
},
|
|||
|
},
|
|||
|
axisTick: {
|
|||
|
show: false,
|
|||
|
},
|
|||
|
axisLine: {
|
|||
|
// 坐标轴轴线相关设置
|
|||
|
lineStyle: {
|
|||
|
color: 'rgba(77, 128, 254, 0.2)',
|
|||
|
},
|
|||
|
},
|
|||
|
splitLine: {
|
|||
|
show: false,
|
|||
|
},
|
|||
|
},
|
|||
|
series: series(),
|
|||
|
},
|
|||
|
});
|
|||
|
|
|||
|
onMounted(() => {});
|
|||
|
</script>
|
|||
|
<style lang="scss" scoped>
|
|||
|
.market-charts-charts {
|
|||
|
height: 100%;
|
|||
|
}
|
|||
|
</style>
|