功能:不清楚后端传过来的数据有多少组,动态接收不确定条数的折线图,展示的也可以是柱状图
<template><v-chart :options="option" :autoresize="true" theme="light"/></template><script>// 封装能动态接收摄像头评分的图表export default {props: {title: {// 图表标题type: String},color: {// 传给图例和图表的颜色type: Array},seriesNames: {// 图例或和统计图的名称,type: Array},xAxis: {// 图表的x轴数据,type: Array},seriesArr: {// 图表的整个series数据type: Array}},data () {return {option: {color: this.color,title: {text: this.title},tooltip: {trigger: 'axis'},legend: {data: this.seriesNames},grid: {top: '35%',left: '2%',right: '4%',},xAxis: {type: 'category',data: this.xAxis,boundaryGap: true,},yAxis: [{type: 'value',name: '分',axisLabel: {formatter: '{value}',textStyle: {color: 'rgba(255,255,255,.8)'}}},],series: this.seriesArr // 重要的数据,获取正确的格式即可}}},watch: { // 监听title: {handler (value) {this.option.title.text = value}},seriesNames: {deep: true,handler (val) {this.option.legend.data = val}},xAxis: {deep: true,handler (value) {this.option.xAxis.data = value}},seriesArr: { // 监听 将获取的值赋给seriesdeep: true,handler (value) {// console.log('监听是否得到数据', value) // 可正常打印this.option.series = valueconsole.log('series值:', this.option.series)}},},}</script><style lang="less" ></style>
<template><div class="center-chart charts-border"><!-- 评分表 --><score-lines:title="this.infoTitle":color="colorArr1":seriesNames="seriesNames1":xAxis="this.xAxis1":seriesArr="seriesArr"class="center-info-chart"/></div></template><script>import ScoreLines from '@/components/context/ScoreLines'import{reqCameraScore,reqCameraChannel} from '@/api'export default {components: {ScoreLines},data () {return {// 评分表colorArr1: ['#319aff', '#ff5c1e', '##fccb00', '#FF0087', '#1bd175'],seriesNames1: [],cameraScoreArr: [],xAxis1: [],seriesArr: []}},watch: {},mounted () {}destroyed () {window.removeEventListener('resize', this.resizeChart)},methods: {resizeChart () {// 头部 64,按钮组 64 信息统计占96,上下留8px间隔const height = (window.innerHeight - 128 - 104) / 2const chartArr = document.getElementsByClassName('center-info-chart')chartArr[0].style.height = height + 'px'chartArr[1].style.height = height + 'px'},async getData (span) {// 获取该场景下的摄像头idconst id = await reqCameraChannel({ category_code: this.category_code }) // 接口参数const checkoutId = id.category_map_channels.checkoutconsole.log('有几号:', checkoutId) // ['2','20']const title = []for (let i = 0; i < checkoutId.length; i++) {cameraTitle.push(checkoutId[i] + "号摄像头")}// console.log('名称', title)this.seriesNames1 = title// console.log('名称', this.seriesNames1) // 正确打印所有名称const scoreData = []for (let i = 0; i < checkoutId.length; i++) {scoreData[i] = await reqCameraScore({ span, channel_id: checkoutId[i] })}// console.log('该场景下的数组们:', scoreData) // 正常this.xAxis1 = getxAxisArr(scoreData[1], isToday)// console.log('x轴:', this.xAxis1) // 正常const dataArr = []for (let i = 0; i < scoreData.length; i++) {// 取出scoreData中每一个对象属性的评分值组成一个新的数组dataArr.push(Object.values(scoreData[i]))}// console.log('series 的 data 数组:', dataArr)// 处理数据 乘以100并保留一位小数for (let i = 0; i < dataArr.length; i++) {for (let j = 0; j < dataArr[i].length; j++) {dataArr[i][j] = (dataArr[i][j] * 100).toFixed(1)}}// console.log('series 的 data 数组:', dataArr)// this.seriesArr = dataArrconst allDataArr = []// 将数据转化为[{},{}]形式for (let i = 0; i < scoreData.length; i++) {allDataArr.push({ type: 'line', smooth: true, label: { show: false }, stack: 'Total', name: title[i], data: dataArr[i] })}this.seriesArr = allDataArr// console.log('series评分数组打印:', this.seriesArr)}}}</script><style lang="less"></style>


