Vue Web开发(七)
1. echarts介绍
echarts官方文档
首先我们先完成每个页面的路由,之前已经有home页面和user页面,缺少mail页面和其它选项下的page1和page2页面。在view文件夹下新建mail文件夹,新建index.vue,填充user页面的内容即可。在view下新建other文件夹,新建pageOne.vue和pageTwo.vue,页面内容简单填充即可。三个页面都要更改name属性,后面会用到,首字母大写。
cnpm i echarts@5.1.2安转指定版本依赖,在饼图的位置添加div,不需要在main.js中引入,只需要在home下的index.vue无版本引入。
(1)引入echarts
import * as echarts from 'echarts'
(2)展示echarts饼图
<el-card style="height:280px;"><div style="height:280px" ref="echarts"></div>
</el-card>
(3)更改mounted(){},data下包含四个图的数据,注意orderData下的第一个数据是date!!报错一直找不到是这个原因。这里用Object.keys()返回数组的属性而不包含属性值。keyArray就是一个key的集合(图例集合、数组属性集合),所以此处进行遍历。legend表示图例,就是keyArray。
mounted() {getData().then(res => {const {code, data} = res.dataif (code === 20000) {this.tableData = data.tableDataconst order = data.orderDataconst xData = order.dateconst keyArray = Object.keys(order.data[0])const series = []keyArray.forEach(key => {series.push({name: key,data: order.data.map(item => item[key]),type: 'line'})})const option = {xAxis: {data: xData},yAxis: {},legend: {data: keyArray},series:series}const myEcharts = echarts.init(this.$refs.echarts)myEcharts.setOption(option)}})}
1.1. 折线图实现
将type改为line
mounted() {getData().then(res => {const {code, data} = res.dataif (code === 20000) {this.tableData = data.tableDataconst order = data.orderDataconst xData = order.dateconst keyArray = Object.keys(order.data[0])const series = []keyArray.forEach(key => {series.push({name: key,data: order.data.map(item => item[key]),type: 'bar'})})const option = {xAxis: {data: xData},yAxis: {},legend: {data: keyArray},series:series}const myEcharts = echarts.init(this.$refs.echarts)myEcharts.setOption(option)}})}
效果图
1.2. 柱状图实现
src/views/home下的index.js。
<el-card class="graph-item1" ><div style="height:210px" ref='barEchartRef'></div></el-card>
mounted进行数据添加
//柱状图const userOption = {legend: {// 图例文字颜色textStyle: {color: "#333",},},grid: {left: "20%",},// 提示框tooltip: {trigger: "axis",},xAxis: {type: "category", // 类目轴data: 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"],series: [{name:'新增用户',data:data.userData.map(item=>item.new),type:'bar'},{name:'活跃用户',data:data.userData.map(item=>item.active),type:'bar'}],}const barEchart = echarts.init(this.$refs.barEchartRef)barEchart.setOption(userOption)
效果图
1.3. 饼图实现
原理其实跟柱状图一样,知识柱状图条件会多一些。
const picOption = {title: {//标题subtext: "",text: "饼图数据统计",top: 'top',left: 'center',textStyle: {fontSize: 11,}},legend: {itemHeight: 8,itemWidth: 8,// type: 'scroll',orient: 'horizontal', // verticalx: 'center',//可设定图例在左、右、居中y: 'bottom',//可设定图例在上、下、居中// padding:[0,50,0,0],//可设定图例[距上方距离,距右方距离,距下方距离,距左方距离]data: data.videoData,//circle:圆形 rect:矩形 roundRect:圆角矩形 triangle:角形// diamond:菱形 pin:水滴 arrow:箭头icon: 'rect',},tooltip: {//弹出框//trigger:触发类型,'item'数据项图形触发,主要在散点图,// 饼图等无类目轴的图表中使用。'axis'坐标轴触发,主要在柱状图,// 折线图等会使用类目轴的图表中使用。trigger: 'item',//triggerOn:提示框触发的条件,'mousemove'鼠标移动时触发。// 'click'鼠标点击时触发。'mousemove|click'同时鼠标移动和点击时触发。// 'none'不在 'mousemove' 或 'click' 时触发//triggerOn:"mousemove",//是否显示提示框浮层//showContent:true,//是否永远显示提示框内容//alwaysShowContent:false,//浮层显示的延迟,单位为 ms//showDelay:0,//浮层隐藏的延迟,单位为 ms//hideDelay:100,//鼠标是否可进入提示框浮层中//enterable:false,//是否将 tooltip 框限制在图表的区域内confine: true,//提示框浮层的移动动画过渡时间,单位是 s,设置为 0 的时候会紧跟着鼠标移动//transitionDuration:0.4,//提示框浮层的位置,默认不设置时位置会跟随鼠标的位置,[10, 10],回掉函数,// inside鼠标所在图形的内部中心位置,top、left、bottom、right// 鼠标所在图形上侧,左侧,下侧,右侧,//position:['50%', '50%'],//提示框浮层内容格式器,支持字符串模板和回调函数两种形式,// 模板变量有 {a}, {b},{c},{d},{e},分别表示系列名,数据名,数据值等//formatter:"{b0}: {c0}<br />{b1}: {c1}",// formatter: '{a} <br/>{b}: {c} ({d}%)'formatter: '{b} <br/> {c}件({d}%)',//标题背景色,//backgroundColor:"white",//边框颜色//borderColor:"#ccc",//边框线宽//borderWidth:0,//图例内边距,单位px 5 [5, 10] [5,10,5,10]padding: 4,//textStyle:文本样式textStyle: {fontSize: 10,}},series: [{name: '统计分析',type: 'pie',clickable: true,//是否开启点击minAngle: 2,//最小的扇区角度(0 ~ 360),防止某个值过小导致扇区太小影响交互avoidLabelOverlap: true,//是否启用防止标签重叠策略hoverAnimation: true,//是否开启 hover 在扇区上的放大动画效果。silent: false,//图形是否不响应和触发鼠标事件radius: ['30%', '50%'],//扇形环宽度center: ['50%', '50%'],labelLine: {normal: {length: 10, //第一条线length2: 8, //第二条线lineStyle: {width: 1, // 线条的宽度//线的颜色设置,如没有设置颜色则线条的颜色跟随饼状图的颜色//color: "#000",}}},label: {// formatter: '{b|{b}}\n \n {per|{d}%} ',formatter: '{b|{b}}',borderWidth: 20,borderRadius: 4,padding: [20, 40],normal: {//点击提示文字换行formatter(params) {let text = params.nameif (text.length <= 6) {return text = text + '\n' + params.percent + '%';} else if (text.length > 6 && text.length <= 12) {return text = `${text.slice(0, 6)}\n${text.slice(6)}`+ params.percent + '%'} else if (text.length > 12 && text.length <= 18) {return text = `${text.slice(0, 6)}\n${text.slice(6, 12)}\n${text.slice(12)}`+ params.percent + '%'} else if (text.length > 24 && text.length <= 30) {return text = `${text.slice(0, 6)}\n${text.slice(6, 12)}\n${text.slice(12, 18)}\n${text.slice(24)}`+ params.percent + '%'} else if (text.length > 30) {return text = `${text.slice(0, 6)}\n${text.slice(6, 12)}\n${text.slice(12, 18)}\n${text.slice(24, 30)}\n${text.slice(30)}`+ params.percent + '%'}},textStyle: {fontSize: 8},},rich: {//点击提示文字样式a: {color: '#6E7079',lineHeight: 22,align: 'center'},b: {color: '#4C5058',fontSize: 12,fontWeight: 'bold',lineHeight: 18,align: "bottom",font: "Xingkai SC",},c: {fontSize: 12,lineHeight: 30,color: '#63BF6A',align: "center"},d: {fontSize: 10,lineHeight: 12,color: '#4C5058',align: "top"}}},//data: pieModel.pieArr,//饼状图数据data: data.videoData.map((item, index) => {var fontColor = colorArr[(index % colorArr.length)]item.label = {color: fontColor//饼状图文字颜色}return item;}),itemStyle: {//扇形颜色color: function (params) {var index = params.dataIndex;return colorArr[(index % colorArr.length)];},}}]};const pieEchart = echarts.init(this.$refs.pieEchartRef)pieEchart.setOption(picOption)
效果图。
1.4. 折线图、柱状图、饼图图实现
效果图
完整代码
<template><el-row class="home-layout" :gutter="20"><!--用户布局--><el-col :span="9" class="left-section"><el-card shadow="hover"><div class="user-layout"><img class="user-header" :src="userImg"/><div class="user-info-layout"><p class="user-name">Admin</p><p class="user-nickname">超级管理员</p></div></div><div class="login-layout"><p class="login-time">上次登录时间:<span>2024-12-12</span></p><p class="login-loc">上次登录地点:<span>济南</span></p></div></el-card><!--列表展示--><el-card class="list-section"><el-table :data="tableData"><el-table-columnv-for="(val,key) in tableLabel":key="key":prop="key":label="val"></el-table-column></el-table></el-card></el-col><!--右侧布局--><el-col class="right-section" :span="15"><!--订单统计--><el-col :span="8" v-for="(item) in countData":key="item.name" :offset="0"><el-card class="order-section":body-style="{display:'flex', padding:0}"><div class="order-layout"><i class="order-icon" :class="'el-icon-'+item.icon":style="{background:item.color}"></i><div class="order-detail"><p class="order-num">¥{{item.value}}</p><p class="order-title">{{item.name}}</p></div></div></el-card></el-col><!--折线图--><el-card class="echars-line-layout"><div class="echars-line-graph" ref="lineEchartRef"></div></el-card><div class="graph-layout"><!--条形图--><el-card class="graph-item1"><div style="height:210px" ref='barEchartRef'></div></el-card><!--饼图--><el-card class="graph-item2"><div style="height:180px" ref='pieEchartRef'></div></el-card></div></el-col></el-row>
</template><script>//import {getMenu} from '../../api/data.js'import {getData} from '@/api/data'//引入echartsimport * as echarts from 'echarts'export default {name: "home",data() {return {userImg: require("../../assets/images/user.png"),tableData: [{name: "华为",todayBuy: 100,monthBuy: 300,totalBuy: 800,},{name: "荣耀",todayBuy: 100,monthBuy: 300,totalBuy: 800,},{name: "oppo",todayBuy: 100,monthBuy: 300,totalBuy: 800,},{name: "vivo",todayBuy: 100,monthBuy: 300,totalBuy: 800,},{name: "苹果",todayBuy: 100,monthBuy: 300,totalBuy: 800,},{name: "小米",todayBuy: 100,monthBuy: 300,totalBuy: 800,},{name: "三星",todayBuy: 100,monthBuy: 300,totalBuy: 800,},{name: "魅族",todayBuy: 100,monthBuy: 300,totalBuy: 800,}],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: "s-home",color: "#fbcc00",},{name: "本月收藏订单",value: 210,icon: "s-cooperation",color: "#ff4444",},{name: "本月未支付订单",value: 1234,icon: "s-shop",color: "#33cc87",},]}},mounted() {//===============// //接口请求一般在mounted下// const axios = require('axios');// // 上述请求也可以按以下方式完成(可选)// axios.get('/user', {// params: {// ID: 12345// }// }).then(function (response) {// console.log(response);// })// .catch(function (error) {// console.log(error);// })// .finally(function () {// // 总是会执行// });//===============// getMenu().then(res => {// console.log("post==",res)// })//===============// getData().then(res => {// console.log("getData",res)// })//===============将数据进行解构// getData().then(res => {// const { code,data } = res.data// if (code === 20000){// this.tableData = data.tableData// }// console.log(res)// })getData().then(res => {const {code, data} = res.dataif (code === 20000) {this.tableData = data.tableDataconst order = data.orderDataconst xData = order.dateconst keyArray = Object.keys(order.data[0])const series = []keyArray.forEach(key => {series.push({name: key,data: order.data.map(item => item[key]),type: 'line'})})const option = {xAxis: {data: xData},yAxis: {},legend: {data: keyArray},series: series}const lineEchart = echarts.init(this.$refs.lineEchartRef)lineEchart.setOption(option)//柱状图const userOption = {legend: {// 图例文字颜色textStyle: {color: "#333",},},grid: {left: "20%",},// 提示框tooltip: {trigger: "axis",},xAxis: {type: "category", // 类目轴data: 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"],series: [{name: '新增用户',data: data.userData.map(item => item.new),type: 'bar'},{name: '活跃用户',data: data.userData.map(item => item.active),type: 'bar'}],}const barEchart = echarts.init(this.$refs.barEchartRef)barEchart.setOption(userOption)let colorArr = ["#0f78f4","#dd536b","#9462e5","#a6a6a6","#e1bb22","#39c362","#3ed1cf",]const picOption = {title: {//标题subtext: "",text: "饼图数据统计",top: 'top',left: 'center',textStyle: {fontSize: 11,}},legend: {itemHeight: 8,itemWidth: 8,// type: 'scroll',orient: 'horizontal', // verticalx: 'center',//可设定图例在左、右、居中y: 'bottom',//可设定图例在上、下、居中// padding:[0,50,0,0],//可设定图例[距上方距离,距右方距离,距下方距离,距左方距离]data: data.videoData,//circle:圆形 rect:矩形 roundRect:圆角矩形 triangle:角形// diamond:菱形 pin:水滴 arrow:箭头icon: 'rect',},tooltip: {//弹出框//trigger:触发类型,'item'数据项图形触发,主要在散点图,// 饼图等无类目轴的图表中使用。'axis'坐标轴触发,主要在柱状图,// 折线图等会使用类目轴的图表中使用。trigger: 'item',//triggerOn:提示框触发的条件,'mousemove'鼠标移动时触发。// 'click'鼠标点击时触发。'mousemove|click'同时鼠标移动和点击时触发。// 'none'不在 'mousemove' 或 'click' 时触发//triggerOn:"mousemove",//是否显示提示框浮层//showContent:true,//是否永远显示提示框内容//alwaysShowContent:false,//浮层显示的延迟,单位为 ms//showDelay:0,//浮层隐藏的延迟,单位为 ms//hideDelay:100,//鼠标是否可进入提示框浮层中//enterable:false,//是否将 tooltip 框限制在图表的区域内confine: true,//提示框浮层的移动动画过渡时间,单位是 s,设置为 0 的时候会紧跟着鼠标移动//transitionDuration:0.4,//提示框浮层的位置,默认不设置时位置会跟随鼠标的位置,[10, 10],回掉函数,// inside鼠标所在图形的内部中心位置,top、left、bottom、right// 鼠标所在图形上侧,左侧,下侧,右侧,//position:['50%', '50%'],//提示框浮层内容格式器,支持字符串模板和回调函数两种形式,// 模板变量有 {a}, {b},{c},{d},{e},分别表示系列名,数据名,数据值等//formatter:"{b0}: {c0}<br />{b1}: {c1}",// formatter: '{a} <br/>{b}: {c} ({d}%)'formatter: '{b} <br/> {c}件({d}%)',//标题背景色,//backgroundColor:"white",//边框颜色//borderColor:"#ccc",//边框线宽//borderWidth:0,//图例内边距,单位px 5 [5, 10] [5,10,5,10]padding: 4,//textStyle:文本样式textStyle: {fontSize: 10,}},series: [{name: '统计分析',type: 'pie',clickable: true,//是否开启点击minAngle: 2,//最小的扇区角度(0 ~ 360),防止某个值过小导致扇区太小影响交互avoidLabelOverlap: true,//是否启用防止标签重叠策略hoverAnimation: true,//是否开启 hover 在扇区上的放大动画效果。silent: false,//图形是否不响应和触发鼠标事件radius: ['30%', '50%'],//扇形环宽度center: ['50%', '50%'],labelLine: {normal: {length: 10, //第一条线length2: 8, //第二条线lineStyle: {width: 1, // 线条的宽度//线的颜色设置,如没有设置颜色则线条的颜色跟随饼状图的颜色//color: "#000",}}},label: {// formatter: '{b|{b}}\n \n {per|{d}%} ',formatter: '{b|{b}}',borderWidth: 20,borderRadius: 4,padding: [20, 40],normal: {//点击提示文字换行formatter(params) {let text = params.nameif (text.length <= 6) {return text = text + '\n' + params.percent + '%';} else if (text.length > 6 && text.length <= 12) {return text = `${text.slice(0, 6)}\n${text.slice(6)}`+ params.percent + '%'} else if (text.length > 12 && text.length <= 18) {return text = `${text.slice(0, 6)}\n${text.slice(6, 12)}\n${text.slice(12)}`+ params.percent + '%'} else if (text.length > 24 && text.length <= 30) {return text = `${text.slice(0, 6)}\n${text.slice(6, 12)}\n${text.slice(12, 18)}\n${text.slice(24)}`+ params.percent + '%'} else if (text.length > 30) {return text = `${text.slice(0, 6)}\n${text.slice(6, 12)}\n${text.slice(12, 18)}\n${text.slice(24, 30)}\n${text.slice(30)}`+ params.percent + '%'}},textStyle: {fontSize: 8},},rich: {//点击提示文字样式a: {color: '#6E7079',lineHeight: 22,align: 'center'},b: {color: '#4C5058',fontSize: 12,fontWeight: 'bold',lineHeight: 18,align: "bottom",font: "Xingkai SC",},c: {fontSize: 12,lineHeight: 30,color: '#63BF6A',align: "center"},d: {fontSize: 10,lineHeight: 12,color: '#4C5058',align: "top"}}},//data: pieModel.pieArr,//饼状图数据data: data.videoData.map((item, index) => {var fontColor = colorArr[(index % colorArr.length)]item.label = {color: fontColor//饼状图文字颜色}return item;}),itemStyle: {//扇形颜色color: function (params) {var index = params.dataIndex;return colorArr[(index % colorArr.length)];},}}]};const pieEchart = echarts.init(this.$refs.pieEchartRef)pieEchart.setOption(picOption)}})}}
</script>
<style lang="less">.home-layout {height: 100%;padding: 10px 0;}/*用户模块*/.left-section {}.user-layout {display: flex;flex-direction: row;align-items: center;border-bottom: #999 solid 1px;padding: 0 0 10px;}.user-header {width: 80px;height: 80px;border-radius: 50%;}.user-info-layout {display: flex;flex-direction: column;margin-left: 20px;}.user-name {font-size: 18px;color: black;font-weight: 700;}.user-nickname {font-size: 18px;color: black;margin-top: 5px;font-weight: 700;}.login-layout {display: flex;flex-direction: column;margin-left: 20px;}.login-time {font-size: 17px;color: black;margin-top: 5px;}.login-loc {font-size: 17px;color: black;margin-top: 8px;}/*列表展示*/.list-section {margin: 15px 0;height: 470px;}/*订单统计*/.order-section {padding: 0 0;margin: 10px 0 10px;background-color: white;}.order-layout {display: flex;flex-direction: row;align-items: center;}.order-icon {display: flex;width: 65px;height: 65px;//border-radius: 50%;align-items: center;justify-content: center;}.order-detail {display: flex;flex-direction: column;justify-content: center;margin-left: 15px;}.order-num {color: #333333;font-size: 18px;}.order-title {color: #333;font-size: 18px;font-weight: 700;margin-top: 8px;}/*右侧布局*/.right-section {}/*图标布局*/.echars-line-layout {margin: 10px 0;}.echars-line-graph {height: 230px;}.graph-layout {display: flex;flex-direction: row;justify-content: center;align-items: center;margin: 10px 0;}.graph-item1 {flex: 1;height: 215px;margin-right: 5px;}.graph-item2 {flex: 1;height: 215px;margin-left: 5px;}
</style>
Echars折线图、柱状图、饼图基本使用示例下载
1.5. Echars图表封装
(1)在src/components下新建MyEcharts.vue文件
//src/components/MyEcharts.vue
<template><div ref="echartRef"></div>
</template><script>//引入echartsimport * as echarts from 'echarts'export default {props: {//判断图表类型(true:柱状图、折线图 false:饼状图)isAxisChart: {type: Boolean,default: true},//引入optionchartData: {type: Object,default () {return {xData: [],series: []}},},},//监听数据watch: {chartData: {handler: function() {this.initEchars()},deep: true //首次触发}},methods: {initEchars() {this.initEcharsData()if (this.echart) {this.echart.setOption(this.options)} else {this.echart = echarts.init(this.$refs.echartRef)this.echart.setOption(this.options)}},initEcharsData() {if (this.isAxisChart) {this.axisOption.xAxis.data = this.chartData.xDatathis.axisOption.series = this.chartData.series} else {this.normalOption.series = this.chartData.series}}},data() {return {axisOption: {legend: {// 图例文字颜色textStyle: {color: "#333",},},grid: {left: "20%",},// 提示框tooltip: {trigger: "axis",},xAxis: {type: "category", // 类目轴data: [],axisLine: {lineStyle: {color: "#17b3a3",},},axisLabel: {interval: 0,color: "#333",},},yAxis: [{type: "value",axisLine: {lineStyle: {color: "#17b3a3",},},}, ],color: ["#0f78f4", "#dd536b", "#9462e5","#a6a6a6", "#e1bb22", "#39c362", "#3ed1cf",],series: [],},normalOption: {tooltip: {trigger: "item",},color: ["#0f78f4", "#dd536b", "#9462e5","#a6a6a6", "#e1bb22", "#39c362", "#3ed1cf",],series: [],},echart: null}},//计算属性computed: {options() {return this.isAxisChart ? this.axisOption : this.normalOption}}}
</script>
<style>
</style>
(1)在src/views/home/index.vue
//src/views/home/index.vue
<template><el-row class="home-layout" :gutter="20"><!--用户布局--><el-col :span="9" class="left-section"><el-card shadow="hover"><div class="user-layout"><img class="user-header" :src="userImg"/><div class="user-info-layout"><p class="user-name">Admin</p><p class="user-nickname">超级管理员</p></div></div><div class="login-layout"><p class="login-time">上次登录时间:<span>2024-12-12</span></p><p class="login-loc">上次登录地点:<span>济南</span></p></div></el-card><!--列表展示--><el-card class="list-section"><el-table :data="tableData"><el-table-column v-for="(val,key) in tableLabel" :key="key" :prop="key" :label="val"></el-table-column></el-table></el-card></el-col><!--右侧布局--><el-col class="right-section" :span="15"><!--订单统计--><el-col :span="8" v-for="(item) in countData" :key="item.name" :offset="0"><el-card class="order-section" :body-style="{display:'flex', padding:0}"><div class="order-layout"><i class="order-icon" :class="'el-icon-'+item.icon" :style="{background:item.color}"></i><div class="order-detail"><p class="order-num">¥{{item.value}}</p><p class="order-title">{{item.name}}</p></div></div></el-card></el-col><!--折线图--><el-card class="echars-line-layout"><!--普通--><!-- <div class="echars-line-graph" ref="lineEchartRef"></div> --><!--封装--><echart class="echars-line-graph" :chartData="echartData.line"></echart></el-card><div class="graph-layout"><!--柱状图--><el-card class="graph-bar-layout"><!--普通--><!-- <div class="graph-bar-item" ref='barEchartRef'></div> --><!--封装--><echart class="graph-bar-item" :chartData="echartData.bar"></echart></el-card><!--饼图--><el-card class="graph-pie-layout"><!--普通--><!-- <div class="graph-pie-item" ref='barEchartRef'></div>--><!--封装--><echart class="graph-pie-item":chartData="echartData.pie" :isAxisChart="false"></echart></el-card></div></el-col></el-row>
</template><script>//import {getMenu} from '../../api/data.js'import {getData} from '@/api/data'//引入echartsimport * as echarts from 'echarts'import Echart from '../../components/MyEcharts.vue'export default {name: "home",components: {//加入组件Echart},data() {return {userImg: require("../../assets/images/user.png"),//图表echartData: {line: {xData: [],series: []},bar: {xData: [],series: []},pie: {series: []}},tableData: [{name: "华为",todayBuy: 100,monthBuy: 300,totalBuy: 800,},{name: "荣耀",todayBuy: 100,monthBuy: 300,totalBuy: 800,},{name: "oppo",todayBuy: 100,monthBuy: 300,totalBuy: 800,},{name: "vivo",todayBuy: 100,monthBuy: 300,totalBuy: 800,},{name: "苹果",todayBuy: 100,monthBuy: 300,totalBuy: 800,},{name: "小米",todayBuy: 100,monthBuy: 300,totalBuy: 800,},{name: "三星",todayBuy: 100,monthBuy: 300,totalBuy: 800,},{name: "魅族",todayBuy: 100,monthBuy: 300,totalBuy: 800,}],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: "s-home",color: "#fbcc00",},{name: "本月收藏订单",value: 210,icon: "s-cooperation",color: "#ff4444",},{name: "本月未支付订单",value: 1234,icon: "s-shop",color: "#33cc87",},]}},mounted() {//===============// //接口请求一般在mounted下// const axios = require('axios');// // 上述请求也可以按以下方式完成(可选)// axios.get('/user', {// params: {// ID: 12345// }// }).then(function (response) {// console.log(response);// })// .catch(function (error) {// console.log(error);// })// .finally(function () {// // 总是会执行// });//===============// getMenu().then(res => {// console.log("post==",res)// })//===============// getData().then(res => {// console.log("getData",res)// })//===============将数据进行解构// getData().then(res => {// const { code,data } = res.data// if (code === 20000){// this.tableData = data.tableData// }// console.log(res)// })getData().then(res => {const {code,data} = res.dataif (code === 20000) {this.tableData = data.tableDataconst order = data.orderDataconst xData = order.dateconst keyArray = Object.keys(order.data[0])const series = []keyArray.forEach(key => {series.push({name: key,data: order.data.map(item => item[key]),type: 'line'})})//折线图//=====普通=====// const option = {// xAxis: {// data: xData// },// yAxis: {},// legend: {// data: keyArray// },// series: series// }// const lineEchart = echarts.init(this.$refs.lineEchartRef)// lineEchart.setOption(option)//=====封装=====this.echartData.line.xData = xDatathis.echartData.line.series = series//柱状图//=====普通=====// const userOption = {// legend: {// // 图例文字颜色// textStyle: {// color: "#333",// },// },// grid: {// left: "20%",// },// // 提示框// tooltip: {// trigger: "axis",// },// xAxis: {// type: "category", // 类目轴// data: 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"],// series: [{// name: '新增用户',// data: data.userData.map(item => item.new),// type: 'bar'// },// {// name: '活跃用户',// data: data.userData.map(item => item.active),// type: 'bar'// }// ],// }// const barEchart = echarts.init(this.$refs.barEchartRef)// barEchart.setOption(userOption)//饼图图//=====普通=====this.echartData.bar.xData = data.userData.map(item => item.date)this.echartData.bar.series = [{name: '新增用户',data: data.userData.map(item => item.new),type: 'bar'},{name: '活跃用户',data: data.userData.map(item => item.active),type: 'bar'}]//=====封装=====// let colorArr = [// "#0f78f4",// "#dd536b",// "#9462e5",// "#a6a6a6",// "#e1bb22",// "#39c362",// "#3ed1cf",// ]// const pieOption = {// title: { //标题// subtext: "",// text: "饼图数据统计",// top: 'top',// left: 'center',// textStyle: {// fontSize: 11,// }// },// legend: {// itemHeight: 8,// itemWidth: 8,// // type: 'scroll',// orient: 'horizontal', // vertical// x: 'center', //可设定图例在左、右、居中// y: 'bottom', //可设定图例在上、下、居中// // padding:[0,50,0,0],//可设定图例[距上方距离,距右方距离,距下方距离,距左方距离]// data: data.videoData,// //circle:圆形 rect:矩形 roundRect:圆角矩形 triangle:角形// // diamond:菱形 pin:水滴 arrow:箭头// icon: 'rect',// },// tooltip: { //弹出框// //trigger:触发类型,'item'数据项图形触发,主要在散点图,// // 饼图等无类目轴的图表中使用。'axis'坐标轴触发,主要在柱状图,// // 折线图等会使用类目轴的图表中使用。// trigger: 'item',// //triggerOn:提示框触发的条件,'mousemove'鼠标移动时触发。// // 'click'鼠标点击时触发。'mousemove|click'同时鼠标移动和点击时触发。// // 'none'不在 'mousemove' 或 'click' 时触发// //triggerOn:"mousemove",// //是否显示提示框浮层// //showContent:true,// //是否永远显示提示框内容// //alwaysShowContent:false,// //浮层显示的延迟,单位为 ms// //showDelay:0,// //浮层隐藏的延迟,单位为 ms// //hideDelay:100,// //鼠标是否可进入提示框浮层中// //enterable:false,// //是否将 tooltip 框限制在图表的区域内// confine: true,// //提示框浮层的移动动画过渡时间,单位是 s,设置为 0 的时候会紧跟着鼠标移动// //transitionDuration:0.4,// //提示框浮层的位置,默认不设置时位置会跟随鼠标的位置,[10, 10],回掉函数,// // inside鼠标所在图形的内部中心位置,top、left、bottom、right// // 鼠标所在图形上侧,左侧,下侧,右侧,// //position:['50%', '50%'],// //提示框浮层内容格式器,支持字符串模板和回调函数两种形式,// // 模板变量有 {a}, {b},{c},{d},{e},分别表示系列名,数据名,数据值等// //formatter:"{b0}: {c0}<br />{b1}: {c1}",// // formatter: '{a} <br/>{b}: {c} ({d}%)'// formatter: '{b} <br/> {c}件({d}%)',// //标题背景色,// //backgroundColor:"white",// //边框颜色// //borderColor:"#ccc",// //边框线宽// //borderWidth:0,// //图例内边距,单位px 5 [5, 10] [5,10,5,10]// padding: 4,// //textStyle:文本样式// textStyle: {// fontSize: 10,// }// },// series: [{// name: '统计分析',// type: 'pie',// clickable: true, //是否开启点击// minAngle: 2, //最小的扇区角度(0 ~ 360),防止某个值过小导致扇区太小影响交互// avoidLabelOverlap: true, //是否启用防止标签重叠策略// hoverAnimation: true, //是否开启 hover 在扇区上的放大动画效果。// silent: false, //图形是否不响应和触发鼠标事件// radius: ['30%', '50%'], //扇形环宽度// center: ['50%', '50%'],// labelLine: {// normal: {// length: 10, //第一条线// length2: 8, //第二条线// lineStyle: {// width: 1, // 线条的宽度// //线的颜色设置,如没有设置颜色则线条的颜色跟随饼状图的颜色// //color: "#000",// }// }// },// label: {// // formatter: '{b|{b}}\n \n {per|{d}%} ',// formatter: '{b|{b}}',// borderWidth: 20,// borderRadius: 4,// padding: [20, 40],// normal: {// //点击提示文字换行// formatter(params) {// let text = params.name// if (text.length <= 6) {// return text = text + '\n' + params.percent + '%';// } else if (text.length > 6 && text.length <= 12) {// return text = `${text.slice(0, 6)}\n${text.slice(6)}` +// params.percent + '%'// } else if (text.length > 12 && text.length <= 18) {// return text =// `${text.slice(0, 6)}\n${text.slice(6, 12)}\n${text.slice(12)}` +// params.percent + '%'// } else if (text.length > 24 && text.length <= 30) {// return text =// `${text.slice(0, 6)}\n${text.slice(6, 12)}\n${text.slice(12, 18)}\n${text.slice(24)}` +// params.percent + '%'// } else if (text.length > 30) {// return text =// `${text.slice(0, 6)}\n${text.slice(6, 12)}\n${text.slice(12, 18)}\n${text.slice(24, 30)}\n${text.slice(30)}` +// params.percent + '%'// }// },// textStyle: {// fontSize: 8// },// },// rich: { //点击提示文字样式// a: {// color: '#6E7079',// lineHeight: 22,// align: 'center'// },// b: {// color: '#4C5058',// fontSize: 12,// fontWeight: 'bold',// lineHeight: 18,// align: "bottom",// font: "Xingkai SC",// },// c: {// fontSize: 12,// lineHeight: 30,// color: '#63BF6A',// align: "center"// },// d: {// fontSize: 10,// lineHeight: 12,// color: '#4C5058',// align: "top"// }// }// },// //data: pieModel.pieArr,//饼状图数据// data: data.videoData.map((item, index) => {// var fontColor = colorArr[(index % colorArr.length)]// item.label = {// color: fontColor //饼状图文字颜色// }// return item;// }),// itemStyle: {// //扇形颜色// color: function (params) {// var index = params.dataIndex;// return colorArr[(index % colorArr.length)];// },// }// }]// };// const pieOption = {// tooltip: {// trigger: "item",// },// color: [// "#0f78f4",// "#dd536b",// "#9462e5",// "#a6a6a6",// "#e1bb22",// "#39c362",// "#3ed1cf",// ],// series: [// {// data:data.videoData,// type:'pie'// }// ],// }// const pieEchart = echarts.init(this.$refs.pieEchartRef)// pieEchart.setOption(pieOption)//=====封装=====this.echartData.pie.series= [{data:data.videoData,type:'pie'}]}})}}
</script>
<style lang="less">.home-layout {height: 100%;padding: 10px 0;}/*用户模块*/.left-section {}.user-layout {display: flex;flex-direction: row;align-items: center;border-bottom: #999 solid 1px;padding: 0 0 10px;}.user-header {width: 80px;height: 80px;border-radius: 50%;}.user-info-layout {display: flex;flex-direction: column;margin-left: 20px;}.user-name {font-size: 18px;color: black;font-weight: 700;}.user-nickname {font-size: 18px;color: black;margin-top: 5px;font-weight: 700;}.login-layout {display: flex;flex-direction: column;margin-left: 20px;}.login-time {font-size: 17px;color: black;margin-top: 5px;}.login-loc {font-size: 17px;color: black;margin-top: 8px;}/*列表展示*/.list-section {margin: 15px 0;height: 470px;}/*订单统计*/.order-section {padding: 0 0;margin: 10px 0 10px;background-color: white;}.order-layout {display: flex;flex-direction: row;align-items: center;}.order-icon {display: flex;width: 65px;height: 65px;//border-radius: 50%;align-items: center;justify-content: center;}.order-detail {display: flex;flex-direction: column;justify-content: center;margin-left: 15px;}.order-num {color: #333333;font-size: 18px;}.order-title {color: #333;font-size: 18px;font-weight: 700;margin-top: 8px;}/*右侧布局*/.right-section {}/*图标布局*/.echars-line-layout {margin: 10px 0;}.echars-line-graph {height: 230px;}.graph-layout {display: flex;flex-direction: row;justify-content: center;align-items: center;margin: 10px 0;}.graph-bar-layout {flex: 1;height: 215px;margin-right: 5px;}.graph-bar-item {height: 210px;}.graph-pie-layout {flex: 1;height: 215px;margin-left: 5px;}.graph-pie-item {height: 180px;}
</style>
效果图
VueWeb Echars图表折线图、柱状图、饼图封装示例下载
相关文章:
Vue Web开发(七)
1. echarts介绍 echarts官方文档 首先我们先完成每个页面的路由,之前已经有home页面和user页面,缺少mail页面和其它选项下的page1和page2页面。在view文件夹下新建mail文件夹,新建index.vue,填充user页面的内容即可。在view下新建…...
基于米尔全志T527开发板的OpenCV进行手势识别方案
本文将介绍基于米尔电子MYD-LT527开发板(米尔基于全志T527开发板)的OpenCV手势识别方案测试。 摘自优秀创作者-小火苗 米尔基于全志T527开发板 一、软件环境安装 1.安装OpenCV sudo apt-get install libopencv-dev python3-opencv 2.安装pip sudo apt…...
洛谷 P10483 小猫爬山 完整题解
一、题目查看 P10483 小猫爬山 - 洛谷 二、解题思路 我们将采取递归 剪枝的思想: sum数组存放每辆车当前载重。 每次新考虑一只小猫时,我们尝试把它放进每个可以放进的缆车中(需要回溯) for (int i 0; i < k; i) {if (sum[i]…...
Vmware的网络适配器的NAT模式和桥接模式有何区别?如何给Uubunt系统添加桥接网卡?
Vmware的网络适配器的NAT模式和桥接模式有何区别? 如何给Uubunt系统添加桥接网卡? 步骤如下:...
Vue导出报表功能【动态表头+动态列】
安装依赖包 npm install -S file-saver npm install -S xlsx npm install -D script-loader创建export-excel.vue组件 代码内容如下(以element-ui样式代码示例): <template><el-button type"primary" click"Expor…...
6.2 Postman接口收发包
欢迎大家订阅【软件测试】 专栏,开启你的软件测试学习之旅! 文章目录 前言1 接口收发包的类比1.1 获取对方地址(填写接口URL)1.2 选择快递公司(设置HTTP方法)1.3 填写快递单(设置请求头域&#…...
UE4_贴花_贴花基础知识一
贴花可以将材料和各种材料元素投影到表面上。您可以使用它们来添加独特的效果。贴花 是一种可以投射到网格体(包括静态网格体和骨骼网格体)上的材质。无论这些网格体的移动性(Mobility)是静态(Static)还是可…...
代码随想录day13 二叉树:二叉树的遍历(前中后序)(递归、迭代)、102.二叉树的层序遍历
二叉树简单讲解及题目讲解 代码随想录 144.二叉树前序遍历 145.二叉树后序遍历 94.二叉树中序遍历 102.二叉树的层序遍历 题目 给你二叉树的根节点root, 完成二叉树的前中后序遍历 二叉树遍历–递归法 思路 了解过二叉树的定义和遍历规则, 那么完成此题并没有什么难度, 采用…...
Kafka - 消息乱序问题的常见解决方案和实现
文章目录 概述一、MQ消息乱序问题分析1.1 相同topic内的消息乱序1.2 不同topic的消息乱序 二、解决方案方案一: 顺序消息Kafka1. Kafka 顺序消息的实现1.1 生产者:确保同一业务主键的消息发送到同一个分区1.2 消费者:顺序消费消息 2. Kafka 顺…...
俏生元,融汇传统智慧与现代科技,解析药食同源健康奥秘
在追求健康生活的今天,药食同源的理念正逐渐成为现代人滋养身心的新选择。俏生元,一直以来注重女性健康和多元需求,正以它独特的视角和匠心产品,助推着药食同源健康滋养的风尚。 俏生元葛根红参丰韵膏 药食同源,匠心独…...
【CUDA】CUBLAS
【CUDA】CUBLAS 在深入了解之前,提前运行预热(warmup)和基准测试(benchmark runs) 是获得准确执行时间的关键。如果不进行预热运行,cuBLAS 的首次运行会有较大的开销(大约 45 毫秒)…...
泛型编程--
auto自动推导数据类型 函数模板 定义和调用 函数模板具体化 函数模板通用版本之外的一个特殊版本 函数模板 具体化函数 ,它们的声明和定义都可以分开写。 声明 定义 函数模板写变量 模板参数缺省 类成员函数作为函数模板 类构造函数是函数模板 函数模板重载 函数模…...
Linux USB开发整理和随笔
目录 1 概述 2 硬件原理基础 2.1 USB发展 2.2 USB的拓扑 2.3 硬件接口 2.4 USB总线协议 2.4.1 通信过程 2.4.2 概念关系 2.4.3 管道PIPE 2.4.4 传输 2.4.5 事务 2.4.6 包结构与类型 2.4.6.1 令牌包 2.4.6.2 数据包 2.4.6.3 握手包 2.5 描述符 2.5.1 设备描述符…...
【实验】【H3CNE邓方鸣】交换机端口安全实验+2024.12.11
实验来源:邓方鸣交换机端口安全实验 软件下载: 华三虚拟实验室: 华三虚拟实验室下载 wireshark:wireshark SecureCRT v8.7 版本: CRT下载分享与破解 文章目录 dot1x 开启802.1X身份验证 开启802.1X身份验证,需要在系统视图和接口视…...
使用任务队列TaskQueue和线程池ThreadPool技术实现自定义定时任务框架详解
前言 在桌面软件开发中,定时任务是一个常见的需求,比如定时清理日志、发送提醒邮件或执行数据备份等操作。在C#中有一个非常著名的定时任务处理库Hangfire,不过在我们深入了解Hangfire 之前,我们可以手动开发一个定时任务案例&am…...
在IDE中使用Git
我们在开发的时候肯定是经常使用IDE进行开发的,所以在IDE中使用Git也是非常常用的,接下来以IDEA为例,其他的VS code ,Pycharm等IDE都是一样的。 在IDEA中配置Git 1.打开IDEA 2.点击setting 3.直接搜索git 如果已经安装了会自…...
蓝桥杯新年题解 | 第15届蓝桥杯迎新篇
蓝桥杯新年题解 | 第15届蓝桥杯迎新篇 2024年的蓝桥杯即将拉开序幕!对于许多编程爱好者来说,这不仅是一次展示自我能力的舞台,更是一次学习和成长的机会。作为一名大一新生的小蓝,对蓝桥杯充满了期待,但面对初次参赛的…...
Docker Swarm实战
文章目录 1、docker swarm介绍2、docker swarm概念与架构2.1 架构2.2 概念 3、docker swarm集群部署3.1 容器镜像仓库 Harbor准备3.2 主机准备3.2.1 主机名3.2.2 IP地址3.2.3 主机名与IP地址解析3.3.4 主机时间同步3.2.5 主机安全设置 3.3 docker安装3.3.1 docker安装3.3.2 配置…...
磁盘空间占用分析工具-wiztree【推荐】
磁盘空间占用分析工具-wiztree【推荐】 如果你遇到过磁盘空间占满、找大文件困难、线上服务器空间飙升等一系列磁盘的问题,并且需要分析文件夹占用空间,传统的方法就是一个一个去看,属实太费劲,效率太低。 而“WizTree”便可解决…...
Vuex在uniapp中的使用
文章目录 一、Vuex概述 1.1 官方解释 1.2 大白话 1.3 组件间共享数据的方式 1.4 再看Vuex是什么 1.5 使用Vuex统一管理好处 二、状态管理 2.1 单页面状态管理 2.2 多页面状态管理 2.3 全局单例模式 2.4 管理哪些状态 三、Vuex的基本使用 3.1 安装 3.2 导入 3.3 创建store对象…...
【含开题报告+文档+PPT+源码】基于微信小程序的点餐系统的设计与实现
开题报告 随着互联网技术的日益成熟和消费者生活水平与需求层次的显著提升,外卖点餐平台在中国市场上迅速兴起并深深植根于民众日常生活的各个角落。这类平台的核心在于构建了一个基于互联网的强大订餐服务系统,它无缝整合了餐饮商户资源与广大消费者的…...
Elasticsearch02-安装7.x
零、文章目录 Elasticsearch02-安装7.x 1、Windows安装Elasticsearch (1)JDK安装 Elasticsearch是基于java开发的,所以需要安装JDK。我们安装的Elasticsearch版本是7.15,对应JDK至少1.8版本以上。也可以不安装jdk,…...
【数据库】选择题+填空+简答
1.关于冗余数据的叙述中,不正确的是() A.冗余的存在容易破坏数据库的完整新 B.冗余的存在给数据库的维护增加困难 C.不应该在数据库中存储任何冗余数据 D.冗余数据是指由基本数据导出的数据 C 2.最终用户使用的数据视图称为(&…...
Spark执行计划解析后是如何触发执行的?
在前一篇Spark SQL 执行计划解析源码分析中,笔者分析了Spark SQL 执行计划的解析,很多文章甚至Spark相关的书籍在讲完执行计划解析之后就开始进入讲解Stage切分和调度Task执行,每个概念之间没有强烈的关联,因此这中间总感觉少了点…...
渗透测试-前端验签绕过之SHA256+RSA
本文是高级前端加解密与验签实战的第2篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过SHA256RSA签名来爆破登录。 绕过 根据提示可以看出这次签名用了SHA2556和RSA两个技术进行加密。 查看源代码可以看到RSA公钥是通过请求服务…...
Maven完整技术汇总
额外知识点 IDE IDE是集成开发环境的缩写,它是一种软件应用程序,提供了编码、调试和部署软件的一站式解决方案。这些功能集成在一起,使开发人员能够在一个环境中完成整个软件开发过程,从编写代码到调试和测试,直到最终…...
NOI系列赛事LaTeX模板
NOI系列赛事 L a T e X LaTeX LaTeX 模板 照搬照抄: s y k s y k C C C syksykCCC syksykCCC 大佬写的,但是看得人不多。真的很好,比其他的板子优秀多了。现在我当一个校友搬运工,搬过来。 \documentclass[UTF8,a4paper]{ctex…...
JustTrustMe是什么
JustTrustMe是什么 JustTrustMe 是一个用于 Android 的 Xposed 模块,主要用于绕过应用程序的 SSL pinning(SSL 证书锁定)机制。SSL pinning 是一种安全措施,应用程序通过它来验证服务器返回的 SSL 证书是否与应用程序内置的证书匹…...
题解 - 工作分配
题目描述 在工厂里,如果每道工序让不同的工人来做,所要花费的时间往往不一样。精明的老板为了提高效率,总是把生产某一产品所需要的N道工序进行最佳搭配,使生产某一产品所花费的总时间最少。现在就给出N个工人分别做N道工序所要花…...
GLM-4-Plus初体验
引言:为什么高效的内容创作如此重要? 在当前竞争激烈的市场环境中,内容创作已成为品牌成功的重要支柱。无论是撰写营销文案、博客文章、社交媒体帖子,还是制作广告,优质的内容不仅能够帮助品牌吸引目标受众的注意力&a…...
【Python基础】Python知识库更新中。。。。
1、Python知识库简介 现阶段主要源于个人对 Python 编程世界的强烈兴趣探索,在深入钻研 Python 核心语法、丰富库函数应用以及多样化编程范式的基础上,逐步向外拓展延伸,深度挖掘其在数据分析、人工智能、网络开发等多个前沿领域的应用潜力&…...
【arm】程序跑飞,SWD端口不可用修复(N32G435CBL7)
项目场景: 国民N32G43X系列,烧录了一个测试程序,在DEBUG中不知什么原因挂掉,然后就无法连接SWD或JLINK。 问题描述 在SWD配置中不可见芯片型号,无法connect,无法烧录。但基本判断是芯片没有损坏。怀疑是程…...
C++如何读取包含空格在内的整行字符串s? ← getline(cin,s);
【问题描述】 问:请分析下面代码,在利用 cin 输入带空格的整行字符串时,会输出什么? #include <bits/stdc.h> using namespace std;int main() {string s;cin>>s;for(int i0; i<s.size(); i) {cout<<s[i];}…...
活动预告 | Microsoft 365 在线技术公开课:让组织针对 Microsoft Copilot 做好准备
课程介绍 通过Microsoft Learn免费参加Microsoft 365在线技术公开课,建立您需要的技能,以创造新的机会并加速您对Microsoft云技术的理解。参加我们举办的“让组织针对 Microsoft Copilot for Microsoft 365 做好准备” 在线技术公开课活动,学…...
tomcat被检测到目标URL存在htp host头攻击漏洞
AI越来越火了,我们想要不被淘汰就得主动拥抱。推荐一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站 Tomcat被检测到目标URL存在http host头攻击漏洞,这个漏洞复现一下就是黑客访问你的网站,之后中修改请求头中的host属…...
【使用webrtc-streamer解析rtsp视频流】
webrtc-streamer WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或&a…...
【数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
目录😋 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:编写一个程序实现单链表的基本运算。 相关知识 为了完成本关任务,你需要掌握:初始化线性表、销毁线性表、判定是否为空表、求线性…...
华为FreeBuds Pro 4丢了如何找回?(附查找功能使用方法)
华为FreeBuds Pro 4查找到底怎么用?华为FreeBuds Pro 4有星闪精确查找和离线查找,离线查找功能涵盖播放铃声、导航定位、星闪精确查找、上线通知、丢失模式、遗落提醒等。星闪精确查找是离线查找的子功能,当前仅华为FreeBuds Pro 4充电盒支持…...
直流开关电源技术及应用
文章目录 1. 开关电源概论1.1 开关电源稳压原理1.1.1 开关电源稳压原理 1. 开关电源概论 1.1 开关电源稳压原理 为了提高效率,必须使功率调整器件处于开关工作状态。 作为开关而言,导通时压降很小,几乎不消耗能量,关断时漏电流很…...
langchain 结构化输出
主要流程 1. 使用 Pydantic 定义结构化输出: 定义 AnswerWithJustification 类,用于描述输出的结构,包含以下字段: answer:答案内容(字符串类型)。justification:答案的理由或解释…...
开源Java快速自测工具,可以调用系统内任意一个方法
java快速测试框架,可以调到系统内任意一个方法,告别写单测和controller的困扰。 开源地址:https://gitee.com/missyouch/Easy-JTest 我们在开发时很多时候想要测试下自己的代码,特别是service层或者是更底层的代码,就…...
挺详细的记录electron【V 33.2.0】打包vue3项目为可执行程序
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、直接看效果 二、具体步骤 1.安装配置electron 1.将 electron 包安装到应用的开发依赖中。 2.安装electron-packager依赖(打包可执行文件&#…...
相比普通LED显示屏,强力巨彩软模组有哪些优势?
在科技技术的加持下,LED显示屏市场各类创新产品层出不穷,为市场带来了无限可能。其中,强力巨彩R系列H版(软模组)凭借其独特的技术优势,在行业内脱颖而出。那么,相比常规LED显示屏,强…...
操作系统(7)处理机调度
前言 操作系统中的处理机调度是一个核心概念,它涉及如何从就绪队列中选择进程并将处理机分配给它以运行,从而实现进程的并发执行。 一、调度的层次 高级调度(作业调度): 调度对象:作业(包含程序…...
【Spark】Spark的两种核心Shuffle工作原理详解
如果觉得这篇文章对您有帮助,别忘了点赞、分享或关注哦!您的一点小小支持,不仅能帮助更多人找到有价值的内容,还能鼓励我持续分享更多精彩的技术文章。感谢您的支持,让我们一起在技术的世界中不断进步! Sp…...
10.qml使用 shadereffect 实现高斯模糊
目录 高斯模糊sigma获取加权均值获取 高斯二维公式实现高斯一维公式实现使用总结 高斯模糊 高斯模糊应用领域我就不过多讲解,想了解自己去了解 高斯模糊有 一维公式 二维公式 当然我们图像是二维的 但是实际上二维公式用于计算那是消耗大量的算力的,…...
2024年12月GESPC++一级真题解析
一、单选题(每题2分,共30分) 题目123456789101112131415答案 C C D B B D B C C C D C D B D 1.2024 年 10 月 8 日,诺贝尔物理学奖 “ 意外地 ” 颁给了两位计算机科学家约翰 霍普菲尔德( John J. H…...
Nmap脚本参数详解
免责声明:使用本教程或工具,用户必须遵守所有适用的法律和法规,并且用户应自行承担所有风险和责任。 文章目录 一、 按脚本分类1. 检查身份验证机制2. 探测广播行为3. 登录爆破4. 默认脚本运行5. 网络资产发现6. Dos漏洞检测7. 漏洞利用8. 检…...
Rstudio-server的安装、配置、维护
一、安装Rstudio-server (1)安装R语言: sudo apt install r-base # 如果没有管理员权限无法操作 # 这样装上R默认在/usr/bin/R其实基本上的流程都可以参考posit的官网(也就是Rstudio的官网): https://posit.co/download/rstudio…...
2024ECCV|DiffBIR: 基于生成扩散先验进行盲图像恢复
文章标题:《DiffBIR: Towards Blind Image Restoration with Generative Diffusion Prior》 DiffBIR收录于2024ECCV,是中科院深圳先进技术研究院(董超等人)、上海AI Lab和香港中文大学联合发布的一项研究。 原文链接:h…...