• Vue2项目练手——通用后台管理项目第四节


    数据的请求

    mock数据模拟实战

    mock官方文档
    前端用来模拟后端接口的工具,通过拦截前端发起的请求,自己定义一些数据

    npm i mockjs

    在这里插入图片描述

    文件目录

    在这里插入图片描述

    src/api/mock.js

    import Mock from 'mockjs'
    import homeApi from "@/api/mockServeData/home";
    
    /*//定义请求拦截
    Mock.mock('/api/home/getData',function (){
        //拦截到请求后处理的逻辑
        console.log("拦截到了")
    })*/
    //定义请求拦截
    Mock.mock('/api/home/getData',homeApi.getStatisticalData())
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    src/api/mockServeData/home.js

    // mock数据模拟
    import Mock from 'mockjs'
    
    // 图表数据
    let List = []
    export default {
        getStatisticalData: () => {
            //Mock.Random.float 产生随机数100到8000之间 保留小数 最小0位 最大0位
            for (let i = 0; i < 7; i++) {
                List.push(
                    Mock.mock({
                        苹果: Mock.Random.float(100, 8000, 0, 0),
                        vivo: Mock.Random.float(100, 8000, 0, 0),
                        oppo: Mock.Random.float(100, 8000, 0, 0),
                        魅族: Mock.Random.float(100, 8000, 0, 0),
                        三星: Mock.Random.float(100, 8000, 0, 0),
                        小米: Mock.Random.float(100, 8000, 0, 0)
                    })
                )
            }
            return {
                code: 20000,
                data: {
                    // 饼图
                    videoData: [
                        {
                            name: '小米',
                            value: 2999
                        },
                        {
                            name: '苹果',
                            value: 5999
                        },
                        {
                            name: 'vivo',
                            value: 1500
                        },
                        {
                            name: 'oppo',
                            value: 1999
                        },
                        {
                            name: '魅族',
                            value: 2200
                        },
                        {
                            name: '三星',
                            value: 4500
                        }
                    ],
                    // 柱状图
                    userData: [
                        {
                            date: '周一',
                            new: 5,
                            active: 200
                        },
                        {
                            date: '周二',
                            new: 10,
                            active: 500
                        },
                        {
                            date: '周三',
                            new: 12,
                            active: 550
                        },
                        {
                            date: '周四',
                            new: 60,
                            active: 800
                        },
                        {
                            date: '周五',
                            new: 65,
                            active: 550
                        },
                        {
                            date: '周六',
                            new: 53,
                            active: 770
                        },
                        {
                            date: '周日',
                            new: 33,
                            active: 170
                        }
                    ],
                    // 折线图
                    orderData: {
                        date: ['20191001', '20191002', '20191003', '20191004', '20191005', '20191006', '20191007'],
                        data: List
                    },
                    tableData: [
                        {
                            name: 'oppo',
                            todayBuy: 500,
                            monthBuy: 3500,
                            totalBuy: 22000
                        },
                        {
                            name: 'vivo',
                            todayBuy: 300,
                            monthBuy: 2200,
                            totalBuy: 24000
                        },
                        {
                            name: '苹果',
                            todayBuy: 800,
                            monthBuy: 4500,
                            totalBuy: 65000
                        },
                        {
                            name: '小米',
                            todayBuy: 1200,
                            monthBuy: 6500,
                            totalBuy: 45000
                        },
                        {
                            name: '三星',
                            todayBuy: 300,
                            monthBuy: 2000,
                            totalBuy: 34000
                        },
                        {
                            name: '魅族',
                            todayBuy: 350,
                            monthBuy: 3000,
                            totalBuy: 22000
                        }
                    ]
                }
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136

    main.js

    import Vue from 'vue'
    import App from './App.vue'
    import VueRouter from "vue-router";
    import router from "@/router";
    import ElementUI from 'element-ui';
    import 'element-ui/lib/theme-chalk/index.css'
    import store from '@/store'
    //引入mock模拟
    import '@/api/mock'
    
    Vue.config.productionTip = false
    Vue.use(VueRouter)
    Vue.use(ElementUI)
    new Vue({
      store,
      router,
      render: h => h(App),
    }).$mount('#app')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    首页组件布局

    可视化图表

    可视化图表布局

    Home.vue
    <template>
      <div>
        <el-row>
          <el-col :span="8" style="padding-right: 10px">
            <el-card class="box-card">
              <div class="user">
                <img src="@/assets/user.webp" alt="">
                <div class="userinfo">
                  <p class="name">Adminp>
                  <p class="access">超级管理员p>
                div>
              div>
              <div class="login-info">
                <p>上次登录的时间:<span>2023-08-30span>p>
                <p>上次登录的地点:<span>北京span>p>
              div>
            el-card>
            <el-card style="margin-top: 20px;height: 460px;">
              <el-table
                  :data="tableData"
                  style="width: 100%;">
                <el-table-column v-for="(val,key) in tableLabel" :prop="key" :label="val" />
              el-table>
            el-card>
          el-col>
          <el-col :span="16" style="padding-left: 10px">
            <div class="num">
              <el-card v-for="item in countData" :key="item.name" :body-style="{display:'flex',padding:0}">
                <i class="icon" :class="`el-icon-${item.icon}`" :style="{background:item.color}">i>
                <div class="detail">
                  <p class="price">¥{{item.value}}p>
                  <p class="desc">{{item.name}}p>
                div>
              el-card>
            div>
            <el-card style="height: 280px">
    
            el-card>
            <div class="graph">
              <el-card style="height: 260px;">el-card>
              <el-card style="height: 260px;">el-card>
            div>
          el-col>
        el-row>
      div>
    
    template>
    
    <script>
    import {getData} from "@/api";
    export default {
      name: "Home",
      data(){
        return{
          tableData:[],
          tableLabel:{
            name:'课程',
            todayBuy:'今日购买',
            monthBuy:'本月购买',
            totalBuy:'总共购买'
          },
          countData:[
            {
              name: "今日支付订单",
              value: 1234,
              icon: "success",
              color: "#2ec7c9",
            },
            {
              name: "今日收藏订单",
              value: 210,
              icon: "star-on",
              color: "#ffb980",
            },
            {
              name: "今日未支付订单",
              value: 1234,
              icon: "s-goods",
              color: "#5ab1ef",
            },
            {
              name: "本月支付订单",
              value: 1234,
              icon: "success",
              color: "#2ec7c9",
            },
            {
              name: "本月收藏订单",
              value: 210,
              icon: "star-on",
              color: "#ffb980",
            },
            {
              name: "本月未支付订单",
              value: 1234,
              icon: "s-goods",
              color: "#5ab1ef",
            },
          ],
        }
      },
      mounted(){
        getData().then(({data})=>{
          console.log(data)
          // data.data
          const {tableData}=data.data
          this.tableData=tableData
        })
      }
    }
    script>
    
    <style scoped lang="less">
    .user{
      display: flex;
      align-items: center;
      padding-bottom: 20px;
      margin-bottom: 20px;
      border-bottom: 1px solid #ccc;
      img{
        margin-right: 40px;
        width: 150px;
        height: 150px;
        border-radius: 50%;
      }
      .userinfo{
        .name{
          font-size: 32px;
          margin-bottom: 10px;
        }
        .access{
          color: #999;
        }
      }
    }
    .login-info{
      p{
        line-height: 28px;
        font-size: 14px;
        color: #999;
        span{
          color: #666;
          margin-left: 60px;
        }
      }
    }
    .num{
      display: flex;
      flex-wrap: wrap;
      justify-content: space-between;
      .icon{
        width: 80px;
        height: 80px;
        color: #fff;
        line-height: 80px;
        text-align: center;
        font-size: 30px;
      }
      .detail{
        margin-left: 15px;
        display: flex;
        flex-direction: column;
        justify-content: center;
        .price{
          font-size: 30px;
          margin-bottom: 10px;
          line-height: 30px;
        }
        .desc{
          color: #999;
          font-size: 14px;
          text-align: center;
        }
      }
      .el-card{
        margin-bottom: 20px;
        width: 32%;
      }
    }
    .graph{
      display: flex;
      margin-top: 20px;
      justify-content: space-between;
      .el-card{
        width: 48%;
      }
    }
    style>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189

    请添加图片描述

    echarts表

    安装echarts

    npm i echarts@5.1.2

    请添加图片描述

    Home.vue
    1. 折线图
    mounted(){
        getData().then(({data})=>{
          console.log(data)
          // data.data
          const {tableData}=data.data
          this.tableData=tableData
    
          //折线图
          //   基于准备好的dom,初始化echarts实例
          const echarts1 = echarts.init(this.$refs.echarts1)
          //   指定图表的配置项和数据
          var lineOption={}
          //   处理数据
          const {orderData,userData,videoData}=data.data
          const xAxis=orderData.date
          const xMore=Object.keys(orderData.data[0])
          lineOption.xAxis={data:xAxis}
          lineOption.yAxis={
            type: "value",
            axisLine: {
              lineStyle: {
                color: "#17b3a3",
              },
            },
          }
          lineOption.legend={
            data:xMore
          }
          lineOption.tooltip={
            trigger:'axis'
          }
          lineOption.series=[]
          console.log(lineOption)
          xMore.forEach(key=>{
            lineOption.series.push({
              name:key,
              data:orderData.data.map(item=>item[key]),
              type:'line'
            })
          })
          // console.log(lineOption)
          //   使用刚指定的配置项和数据显示图表
          echarts1.setOption(lineOption)
        })
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
            <el-card style="height: 280px">
    
              <div ref="echarts1" style="height: 280px">div>
            el-card>
    
    • 1
    • 2
    • 3
    • 4
    1. 柱状图:
              <el-card style="height: 260px;">
    
                <div ref="echarts2" style="height: 260px;">div>
              el-card>
    
    • 1
    • 2
    • 3
    • 4
     //柱状图
          const echarts2 = echarts.init(this.$refs.echarts2)
          var barOption={
            legend: {
              // 图例文字颜色
              textStyle: {
                color: "#333",
              },
            },
            grid: {
              left: "20%",
            },
            // 提示框
            tooltip: {
              trigger: "axis",
            },
            xAxis: {
              type: "category", // 类目轴
              data: userData.map(item=>item.date),
              axisLine: {
                lineStyle: {
                  color: "#17b3a3",
                },
              },
              axisLabel: {
                interval: 0,
                color: "#333",
              },
            },
            yAxis: [
              {
                type: "value",
                axisLine: {
                  lineStyle: {
                    color: "#17b3a3",
                  },
                },
              },
            ],
            color: ["#2ec7c9", "#b6a2de", "#5ab1ef", "#ffb980", "#d87a80", "#8d98b3"],
            series: [
              {
                name:"新增用户",
                data:userData.map(item=>item.new),
                type:'bar'
              },
              {
                name:"活跃用户",
                data:userData.map(item=>item.active),
                type:'bar'
              }
            ],
          }
    
          echarts2.setOption(barOption)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    1. 饼状图
              <el-card style="height: 260px;">
    
                <div ref="echarts3" style="height: 240px">div>
              el-card>
    
    • 1
    • 2
    • 3
    • 4
    //饼状图
          const echarts3=echarts.init(this.$refs.echarts3)
    
          var pieOption = {
                tooltip: {
                  trigger: "item",
                },
                color: [
                  "#0f78f4",
                  "#dd536b",
                  "#9462e5",
                  "#a6a6a6",
                  "#e1bb22",
                  "#39c362",
                  "#3ed1cf",
                ],
                series: [
                  {
                    data:videoData,
                    type:'pie'
                  }
                ],
              }
              echarts3.setOption(pieOption)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    全部代码:

    <template>
      <div>
        <el-row>
          <el-col :span="8" style="padding-right: 10px">
            <el-card class="box-card">
              <div class="user">
                <img src="@/assets/user.webp" alt="">
                <div class="userinfo">
                  <p class="name">Adminp>
                  <p class="access">超级管理员p>
                div>
              div>
              <div class="login-info">
                <p>上次登录的时间:<span>2023-08-30span>p>
                <p>上次登录的地点:<span>北京span>p>
              div>
            el-card>
            <el-card style="margin-top: 20px;height: 460px;">
              <el-table
                  :data="tableData"
                  style="width: 100%;">
                <el-table-column v-for="(val,key) in tableLabel" :prop="key" :label="val" />
              el-table>
            el-card>
          el-col>
          <el-col :span="16" style="padding-left: 10px">
            <div class="num">
              <el-card v-for="item in countData" :key="item.name" :body-style="{display:'flex',padding:0}">
                <i class="icon" :class="`el-icon-${item.icon}`" :style="{background:item.color}">i>
                <div class="detail">
                  <p class="price">¥{{item.value}}p>
                  <p class="desc">{{item.name}}p>
                div>
              el-card>
            div>
            <el-card style="height: 280px">
    
              <div ref="echarts1" style="height: 280px">div>
            el-card>
            <div class="graph">
              <el-card style="height: 260px;">
    
                <div ref="echarts2" style="height: 260px;">div>
              el-card>
              <el-card style="height: 260px;">
    
                <div ref="echarts3" style="height: 240px">div>
              el-card>
            div>
          el-col>
        el-row>
      div>
    
    template>
    
    <script>
    import {getData} from "@/api";
    import * as echarts from 'echarts'
    export default {
      name: "Home",
      data(){
        return{
          tableData:[],
          tableLabel:{
            name:'课程',
            todayBuy:'今日购买',
            monthBuy:'本月购买',
            totalBuy:'总共购买'
          },
          countData:[
            {
              name: "今日支付订单",
              value: 1234,
              icon: "success",
              color: "#2ec7c9",
            },
            {
              name: "今日收藏订单",
              value: 210,
              icon: "star-on",
              color: "#ffb980",
            },
            {
              name: "今日未支付订单",
              value: 1234,
              icon: "s-goods",
              color: "#5ab1ef",
            },
            {
              name: "本月支付订单",
              value: 1234,
              icon: "success",
              color: "#2ec7c9",
            },
            {
              name: "本月收藏订单",
              value: 210,
              icon: "star-on",
              color: "#ffb980",
            },
            {
              name: "本月未支付订单",
              value: 1234,
              icon: "s-goods",
              color: "#5ab1ef",
            },
          ],
        }
      },
      mounted(){
        getData().then(({data})=>{
          console.log(data)
          // data.data
          const {tableData}=data.data
          this.tableData=tableData
    
          //   基于准备好的dom,初始化echarts实例
          const echarts1 = echarts.init(this.$refs.echarts1)
          //   指定图表的配置项和数据
          var lineOption={}
          //   处理数据
          const {orderData,userData,videoData}=data.data
          const xAxis=orderData.date
          const xMore=Object.keys(orderData.data[0])
          lineOption.xAxis={data:xAxis}
          lineOption.yAxis={
            type: "value",
            axisLine: {
              lineStyle: {
                color: "#17b3a3",
              },
            },
          }
          lineOption.legend={
            data:xMore
          }
          lineOption.tooltip={
            trigger:'axis'
          }
          lineOption.series=[]
          console.log(lineOption)
          xMore.forEach(key=>{
            lineOption.series.push({
              name:key,
              data:orderData.data.map(item=>item[key]),
              type:'line'
            })
          })
          // console.log(lineOption)
          //   使用刚指定的配置项和数据显示图表
          echarts1.setOption(lineOption)
    
          //柱状图
          const echarts2 = echarts.init(this.$refs.echarts2)
          var barOption={
            legend: {
              // 图例文字颜色
              textStyle: {
                color: "#333",
              },
            },
            grid: {
              left: "20%",
            },
            // 提示框
            tooltip: {
              trigger: "axis",
            },
            xAxis: {
              type: "category", // 类目轴
              data: userData.map(item=>item.date),
              axisLine: {
                lineStyle: {
                  color: "#17b3a3",
                },
              },
              axisLabel: {
                interval: 0,
                color: "#333",
              },
            },
            yAxis: [
              {
                type: "value",
                axisLine: {
                  lineStyle: {
                    color: "#17b3a3",
                  },
                },
              },
            ],
            color: ["#2ec7c9", "#b6a2de", "#5ab1ef", "#ffb980", "#d87a80", "#8d98b3"],
            series: [
              {
                name:"新增用户",
                data:userData.map(item=>item.new),
                type:'bar'
              },
              {
                name:"活跃用户",
                data:userData.map(item=>item.active),
                type:'bar'
              }
            ],
          }
    
          echarts2.setOption(barOption)
    
    
          //饼状图
          const echarts3=echarts.init(this.$refs.echarts3)
    
          var pieOption = {
                tooltip: {
                  trigger: "item",
                },
                color: [
                  "#0f78f4",
                  "#dd536b",
                  "#9462e5",
                  "#a6a6a6",
                  "#e1bb22",
                  "#39c362",
                  "#3ed1cf",
                ],
                series: [
                  {
                    data:videoData,
                    type:'pie'
                  }
                ],
              }
              echarts3.setOption(pieOption)
    
        })
      }
    }
    script>
    
    <style scoped lang="less">
    .user{
      display: flex;
      align-items: center;
      padding-bottom: 20px;
      margin-bottom: 20px;
      border-bottom: 1px solid #ccc;
      img{
        margin-right: 40px;
        width: 150px;
        height: 150px;
        border-radius: 50%;
      }
      .userinfo{
        .name{
          font-size: 32px;
          margin-bottom: 10px;
        }
        .access{
          color: #999;
        }
      }
    }
    .login-info{
      p{
        line-height: 28px;
        font-size: 14px;
        color: #999;
        span{
          color: #666;
          margin-left: 60px;
        }
      }
    }
    .num{
      display: flex;
      flex-wrap: wrap;
      justify-content: space-between;
      .icon{
        width: 80px;
        height: 80px;
        color: #fff;
        line-height: 80px;
        text-align: center;
        font-size: 30px;
      }
      .detail{
        margin-left: 15px;
        display: flex;
        flex-direction: column;
        justify-content: center;
        .price{
          font-size: 30px;
          margin-bottom: 10px;
          line-height: 30px;
        }
        .desc{
          color: #999;
          font-size: 14px;
          text-align: center;
        }
      }
      .el-card{
        margin-bottom: 20px;
        width: 32%;
      }
    }
    .graph{
      display: flex;
      margin-top: 20px;
      justify-content: space-between;
      .el-card{
        width: 48%;
      }
    }
    style>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271
    • 272
    • 273
    • 274
    • 275
    • 276
    • 277
    • 278
    • 279
    • 280
    • 281
    • 282
    • 283
    • 284
    • 285
    • 286
    • 287
    • 288
    • 289
    • 290
    • 291
    • 292
    • 293
    • 294
    • 295
    • 296
    • 297
    • 298
    • 299
    • 300
    • 301
    • 302
    • 303
    • 304
    • 305
    • 306
    • 307
    • 308
    • 309
    • 310
    • 311
    • 312
    • 313
    • 314
    • 315
    • 316
    • 317

    在这里插入图片描述

  • 相关阅读:
    Python3 - Docker图像化管理工具之Portainer
    LeetCode_88_合并两个有序数组
    我为什么开始写技术博客
    使用YOLOv5的backbone网络识别图像天气 - P9
    STM32物联网项目-SPI FLASH编程
    Go语言读取文件内容
    CSS——过渡、形变、动画
    硬核 | Redis 布隆(Bloom Filter)过滤器原理与实战
    JWT的优点、构成及搭建
    英语CN专刊《英语教师》简介及投稿须知
  • 原文地址:https://blog.csdn.net/qq_34306228/article/details/132608764