Vue2后台管理系统(数据可视化)

Vue2尚硅谷后台管理系统自学笔记



一、数据可视化

1、canvas
  • 大小设置
<!-- 不支持css样式,样式修改不了画布的宽高,只能在标签中设置,可以不用加单位 -->
    <canvas width="700" height="800"></canvas>
  • 获取上下文
let canvas = document.querySelector('canvas');
    // 获取canvas中的上下文
    let ctx = canvas.getContext('2d');
  • 绘制线段
// 绘制线段
    // 起点设置
    ctx.moveTo(50, 50);
    // 设置其他带点,连线顺序是由上到下
    ctx.lineTo(50, 100);
    ctx.lineTo(100, 50);
    // 设置图像的填充的颜色
    ctx.fillStyle = "red";
    ctx.fill();
    // 设置线段的颜色和宽度
    ctx.strokeStyle = 'purple';
    ctx.lineWidth = "10";
    // 可以设置起点与终点连接在一起
    ctx.closePath();
    // stroke方法绘制线段
    ctx.stroke();
  • 绘制矩形
// 绘制矩形  参数 x,y,w,h 矩形的位置:x,y,宽度:w,h
    // 第一种方法:
    ctx.strokeRect(100, 200, 100, 100);
    // 第二种:可以填充颜色
    ctx.fillStyle = 'skyblue';
    ctx.fill();
    ctx.fillRect(300, 100, 100, 100);
  • 绘制圆形
// 绘制圆形
    ctx.beginPath();
    // 绘制圆形的方法:x ,y,r,起始弧度,结束弧度,是否逆时针绘制true逆时针,false顺时针
    // 2*PI*弧度=360    1弧度=57°左右
    ctx.arc(400, 400, 50, 0, 1 * Math.PI, false);
    // 设置填充颜色
    ctx.fillStyle = 'red';
    ctx.fill();
    // 绘制圆形
    ctx.stroke();
  • 擦除画布
// 擦除画布 (x,y,清除的w,清除的h)
    ctx.clearRect(0, 0, 600, 400);
    // 清除部分画布
    ctx.clearRect(100, 200, 50, 100);
  • 绘制文字
    // 设置文字大小、颜色
    ctx.font = '20px 微软雅黑';
    ctx.fillStyle = 'red';
    // 绘制文字 (文字,x,y)
    ctx.fillText('数据可视化', 50, 20);
2、svg矢量图绘制

此节也较为简单,且和上面相似,直接上代码吧,一看就懂

<!-- svg可以使用类名 -->
    <svg class="box">
        <!-- x和y就是点的坐标,stroke设置线条颜色-->
        <!-- fill属性:设置填充颜色,fill-opacity:设置填充颜色透明度 -->
        <!-- 画直线 -->
        <line x1="100" y1="100" x2="200" y2="200" stroke="red"></line>
        <!-- 画折现 :多个点坐标用逗号隔开-->
        <polyline points="300 300,50 100,120 400" fill-opacity="0" stroke="blue"></polyline>
        <!-- 绘制矩阵 -->
        <rect x="400" y="400" width="150" height="50"></rect>
        <!-- 绘制圆形|椭圆 -->
        <circle cx="300" cy="96" r="50" style="fill:black"></circle>
        <ellipse cx="500" cy="500" rx="100" ry="50" style="fill:black"></ellipse>
        <!-- 多边形 -->
        <polygon points="600 100,300 400,750 100" stroke="red" fill-opacity="0"></polygon>
        <!-- 绘制任意图形 -->
        <!-- M:起点 L:点 Z:首尾连接 -->
        <path fill-opacity="0" stroke="red" d="
        M 10 10
        L 20 400
        L 30 300
        L 40 200
        L 50 500
        Z"></path>
3、echarts的基本使用

基本使用步骤:

  1. 引入echarts依赖包(bootCDN)
<!-- 引入echarts依赖包 -->
    <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.3.3/echarts.js"></script>
  1. 准备一个容器
<!-- 准备容器 -->
    <div class="box"></div>
  1. 对该容器初始化echarts
 // 基于准备好的DOM初始化echarts实例
    let dom = document.querySelector('.box');
    // 初始化echarts
    let mycharts = echarts.init(dom);
  1. 配置相关配置项
// 指定图标的配置项和数据等
    mycharts.setOption({
   ...})
  1. 每个图表对应一个容器和他自己的配置项(即想要创建多个图标,需要重复1-4步骤)
  2. 在一个容器上画出多种类型的图表(series: [],配置项中每个对象对应一种图表)
    在这里插入图片描述

完整html和js代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 映入echarts依赖包 -->
    <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.3.3/echarts.js"></script>
    <style>
        * {
     
            margin: 0;
            padding: 0;
        }

        .box {
     
            width: 800px;
            height: 800px;
        }
    </style>

</head>

<body>
    <!-- 准备容器 -->
    <div class="box"></div>
</body>

</html>
<script>
    // 基于准备好的DOM初始化echarts实例
    let dom = document.querySelector('.box');
    // 初始化echarts
    let mycharts = echarts.init(dom);
    // 指定图标的配置项和数据等
    mycharts.setOption({
     
        // 图表的标题相关配置
        title: {
     
            // 主标题设置
            text: '数据可视化',
            // 主标题的样式
            textStyle: {
     
                color: 'red'
            },
            // 小标题
            subtext: 'echarts基本使用',
            // 小标题的样式
            subtextStyle: {
     
                color: 'blue'
            },
            // 设置标题的位置
            left: 'center'
        },
        // x周的相关配置项
        xAxis: {
     
            // 数据名
            data: ['衣服', '直播', '游戏', '电影']
        },
        // x周的相关配置项
        yAxis: {
     
            // 显示y轴线
            axisLine: {
     
                show: true,
            },
            // 显示y刻度
            axisTick: {
     
                show: true,
            }
        },
        // 其他相关配置:图标类型、数据量等
        series: [
            // 每个对象代表一个图表
            // 柱状图
            {
     
                // 图表类型:bar(柱状图)、pie(饼状图)、line(折线图)、scatter(散点图)
                type: 'bar',
                // 图表的数据
                data: [10, 20, 30, 40],
                color: 'blue'
            },
            // 饼图
            {
     
                type: 'pie',
                // 饼图的数据可以设置名字对应对象
                data: [
                    {
      name: 'a', value: 10 },
                    {
      name: 'b', value: 30 },
                    {
      name: 'c', value: 40 },
                ],
                // 可以设置饼图的宽、高、半径、位置
                width: 150,
                height: 150,
                left: 150,
                top: 100,
                radius: 15,
            },
            // 折现图
            {
     
                type: 'line',
                data: [10, 20, 30, 40, 10, 20, 30, 40],
                color: 'red'
            }
        ]
    })
</script>
4、echarts其他配置:
  • 数据集dataset(可以统一定义数据)
// 配置数据
    let data = [
        ['衣服', 10, 28, 'x', 33],
        ['直播', 30, 39, 'y', 12],
        ['游戏', 4, 46, 'z', 20],
        ['电影', 50, 77, 't', 55],
    ]

注:dataset是配置项,需要写在setOption中

// 设置数据集
        dataset: {
   
            // 数据源
            source: data
        },

注:encode相当于每个图的data,所以是写在配置项series中,每个图只有一个encode数据

// 设置数据
        encode: {
   
            // y轴数据,是数据集的第几列(列数从0开始)
            y: 1,
        }
// 饼图的数据,需要有名字和数据
        encode: {
   
            itemName: 3,
            value: 4
        }
5、echarts其他组件

在这里插入图片描述

  • 提示框
// 提示框
        tooltip: {
   
            textStyle: {
   
                color: 'red'
            }
        },
  • 切换图标类型
// 切换图标类型
        legend: {
   
            data: ["柱状图", "饼图", "折线图"]
        },
  • 图表的右上角缩放等按钮

// 对图表的缩放等按钮的操作
        toolbox: {
   
            show: true,
            feature: {
   
                dataZoom: {
   
                    yAxisIndex: "none"
                },
                dataView: {
   
                    readOnly: false
                },
                magicType: {
   
                    type: ["line", "bar"]
                },
                restore: {
   },
                saveAsImage: {
   }
            }
        },
  • 区域缩放
// 区域缩放
        dataZoom: [
            // x轴
            {
   
                id: 'dataZoomX',
                type: 'slider',
                xAxisIndex: [0],
                filterMode: 'filter'
            },
            // y轴
            {
   
                id: 'dataZoomY',
                type: 'slider',
                yAxisIndex: [0],
                filterMode: 'empty'
            }
        ],
  • 调增图表布局,相对画布的位置
// 调增图表布局
        grid: {
   
            left: 20,
            top: 20
        }
6、双坐标系

1、其实就是在将配置项xAxis或yAxis写成数组
2、然后数组中添加对象,每个对象代表一个坐标系,两个对象:左右坐标系。

yAxis: [
            {
   
                // 显示y轴线
                axisLine: {
   
                    show: true,
                },
                // 显示y刻度
                axisTick: {
   
                    show: true,
                }
            },
            {
   
                // 显示y轴线
                axisLine: {
   
                    show: true,
                },
                // 显示y刻度
                axisTick: {
   
                    show: true,
                },
            }
        ],

3、配置图表对应左右哪个坐标:yAxisIndex: 0,(0是yAxis的坐标索引)
注:yAxisIndex写在一个配置项series的对象里。

二、Home首页开发

1、顶部四个数据card
  1. 展现效果
    在这里插入图片描述
  2. 思路:
    (1)在主页路由大组件里,创建出头部Card子组件作为头部的大容器。
    (2)在大Card中容器中,后三个小card所展示的charts图表都有自己的组件,如图:
    在这里插入图片描述
    (3)Detail组件作为存放内容的主要组件,一个小card的结构在Detail组件中。
    (4)具体每个card的内容不同,是通过在Card的index中使用具名插槽将不同内容插入形成。
  3. 代码如下:
  • dashboard组件(首页容器)
<template>
  <div>
    <Card />
  </div>
</template>

<script>
import Card from "./Card";
export default {
     
  name: "Dashboard",
  components: {
     
    Card,
  },
};
</script>
  • Card组件
<template>
  <div>
    <el-row :gutter="10">
      <!-- 第一个card -->
      <el-col :span="6">
        <el-card>
          <Detail title="总销售额" count="¥ 126560">
            <template slot="charts">
              <span>周同比 56.67%</span>
              <i class="el-icon-caret-top" style="color: rgb(225, 54, 20)"></i>
              <span>日同比 19.16%</span>
              <i
                class="el-icon-caret-bottom"
                style="color: rgb(37, 207, 56)"
              ></i>
            
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值