vue-echarts配置项详解

news2024/11/18 9:38:49

起因

最近接手了一个vue3项目,echarts用的是"vue-echarts": “^6.0.0”,每次查看文档的时候痛苦不已,找一个配置要花费大量时间,所以这篇文章,主要就是为了记录比较常见的一些配置。

主要会写三种图的配置项:圆环图、直线图、柱状图

效果图:

image.png

image.png

使用vue-echarts

在package.json中的dependencies里面加一行"vue-echarts": “^6.0.0”,然后npm install,进行安装,这是最简单的。

npm(推荐方式)

npm install echarts vue-echarts

CDN

在 HTML 文件按如下方式依次引入 echarts 和 vue-echarts:

<script src="https://cdn.jsdelivr.net/npm/echarts@4.1.0/dist/echarts.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@4.0.2"></script>

在main.js中引入

import VueCharts from 'vue-echarts'
app.component('app-chart', VueCharts) //使用的时候用<app-chart></app-chart>

官方文档(写的不详细,很多都是让跳转到echarts官网,再去查找)vue-echarts官网地址点这里

圆环图

image.png

<template>
  <div>
    <app-chart :option="state.pieOption" style="height: 300px;" :autoresize="true"></app-chart>
  </div>
</template>
<script setup>
import { reactive, onMounted } from 'vue'
const state = reactive({
  pieOption: {},
})
onMounted(() => {
  getCostSubItemAnalysis()
})
const getCostSubItemAnalysis= () => {
  state.loading = true
  proxy.$apollo.query().then(res => {
    if (!res.loading && res.data) {
      state.costSubItemData = res.data.getCostSubItemAnalysis
      getPieChart(state.costSubItemData.subItems) //从接口中请求到数据
    }
  }).finally(() => {
    state.loading = false
  })
}
const getPieChart = (chartData) => {
  let newArr = []
  let legendWidth = 46 //该参数是为了让左侧图例文字对齐,给了文字宽度
  let totalLeft = '67%' //圆环中间总额距离左边的距离
  chartData?.forEach((item, index) => { //传过来的数据剔除为0的数据
    if (item.cost !== 0) newArr.push(item)
  })
  let total = 0  //计算总额
  newArr = newArr?.map(item => {
    total += Number(item.cost.toFixed(2)) //总额相加保留两位小数
    if (item.name.length > 6) legendWidth = 86 //如果图例名称大于六个文字,宽度给86,否则给46
    if (total >= 10000) totalLeft = '66%' //如果总额大于10000,圆环中间总额距离左边的距离为66%,否则为67%
    return { value: item.cost.toFixed(2), name: resource[item.name] ? resource[item.name] : item.name }
  })
  state.pieOption = {
    color: ['#4C66CE', '#F8D849', '#40CBCA', '#42AB7F', '#386F95', '#E2646C'], // 圆环图图例、每区域颜色
    legend: { // 图例
      orient: 'vertical',// 布局方式,默认为水平布局,可选为:'horizontal' ¦ 'vertical'
      x: 'left',// 水平安放位置,默认为全图居中,可选为:'center' ¦ 'left' ¦ 'right'¦ {number}(x坐标,单位px)
      y: 'center',// 垂直安放位置,默认为全图顶端,可选为:'top' ¦ 'bottom' ¦ 'center'¦ {number}(y坐标,单位px)
      itemWidth: 6,// 图例图形宽度
      itemHeight: 6,// 图例图形高度
      itemGap: 8,// 图例每项之间的间隔。横向布局时为水平间隔,纵向布局时为纵向间隔。
      icon: 'circle', // 图例项的icon,ECharts 提供的标记类型包括'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none',可以通过 'image://url' 设置为图片,其中 URL 为图片的链接,或者 dataURI。
      textStyle: {// 图例的公用文本样式
        color: '#999999', //文字的颜色
        fontSize: 14, //文字的大小
        fontWeight: 400, //文字的字重
        rich: { // 在 rich 里面,可以自定义富文本样式。利用富文本样式,可以在标签中做出非常丰富的效果,在文本中,可以对部分文本采用 rich 中定义样式,这里需要在文本中使用标记符号:`{styleName|text content text content}` 标记样式名。注意,换行仍是使用 '\n'。
          a: {//styleName
            width: legendWidth,
            color: '#666666'
          },
          b: {
            color: '#999999'
          },
          c: {
            color: '#999999'
          }
        }
      },
      formatter: function (name) {
        let total = 0
        let tarValue = null
        for (let i = 0; i < newArr.length; i++) {
          total += Number(newArr[i].value || 0)
          if (name === newArr[i].name) {
            tarValue = Number(newArr[i].value || 0)
          }
        }
        const p = (Number(tarValue / total) * 100).toFixed(2)
        var arr = [
          '{a|' + name + '}',
          '{b|' + tarValue + '}',
          '{c|' + p + '%}'
        ]
        return arr.join('  ')
      }
    },
    graphic: { // graphic 是原生图形元素组件。可以支持的图形元素包括:image, text, circle, sector, ring, polygon, polyline, rect, line, bezierCurve, arc, group,
      type: 'text',// 用这个在圆环中间显示总金额
      left: totalLeft, //距离容器左边的距离
      top: '48%',
      style: {
        text: total.toFixed(2) + '元', // 总金额保留两位小数
        fontSize: 16, // 总金额字体大小
        color: '#333',
        fontWeight: 400
      }
    },
    series: [
      {
        type: 'pie', // 图表类型  bar:柱状图   line:折线图   pie:饼图
        radius: ['50%', '56%'], // 饼图的半径。可以为如下类型:number:直接指定外半径值。string:例如,'20%',表示外半径为可视区尺寸(容器高宽中较小一项)的 20% 长度。Array.<number|string>:数组的第一项是内半径,第二项是外半径。每一项遵从上述 number string 的描述。
        center: ['74%', '50%'], // 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标。支持设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度。
        avoidLabelOverlap: false, // 是否启用防止标签重叠策略,默认开启,在标签拥挤重叠的情况下会挪动各个标签的位置,防止标签间的重叠。
        minAngle: 1,//最小的角度,防止出现为0时,样式出错的情况
        itemStyle: { // 图形样式
          borderColor: '#fff', // 图形的描边颜色。支持的颜色格式同 color,不支持回调函数。
          borderWidth: 0, // 描边线宽。为 0 时无描边。
          borderRadius: 10 // 用于指定饼图扇形区块的内外圆角半径,支持设置固定数值或者相对于扇形区块的半径的百分比值
        },
        label: { // 饼图图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。
          normal: {
            show: false,
            formatter: '{name|{b}}\n\n{value|{c}} {money|元}', // 标签内容格式器,支持字符串模板和回调函数两种形式,字符串模板与回调函数返回的字符串均支持用 \n 换行。
            position: 'center',
            width: 130,
            lineHight: 30,
            backgroundColor: '#ffffff',
            rich: {
              name: {
                fontSize: 16,
                color: '#333',
                fontWeight: 400
              },
              value: {
                fontSize: 20,
                color: 'inherit',
                fontWeight: 600
              },
              money: {
                fontSize: 12,
                color: 'inherit',
                fontWeight: 600
              }
            }
          },
          show: false,
          position: 'center' // 标签的位置,可选:'outside',饼图扇区外侧,通过视觉引导线连到相应的扇区。'inside'饼图扇区内部。'inner' 同 'inside'。'center'在饼图中心位置。
        },
        emphasis: { // 高亮状态的扇区和标签样式
          label: {
            show: true,
            fontSize: 16,
            fontWeight: '400'
          }
        },
        labelLine: { // 标签的视觉引导线配置
          show: false
        },
        labelLayout: function (params) { // 标签的统一布局配置。该配置项是在每个系列默认的标签布局基础上,统一调整标签的(x, y)位置,标签对齐等属性以实现想要的标签布局效果。
          const isLeft = params.labelRect.x < 50
          const points = params.labelLinePoints
          if (!points) return
          points[2][0] = isLeft
            ? params.labelRect.x
            : params.labelRect.x + params.labelRect.width
          return {
            labelLinePoints: points // 默认引导线的位置,目前只有饼图(pie)和漏斗图(funnel)有默认标签位置,如果没有该值则为 null
          }
        },
        data: newArr?.map(item => { // 系列中的数据内容数组。数组项可以为单个数值
          return {
            name: item.name,
            value: item.value
          }
        })
      }
    ]
  }
}
</script>

折线图

image.png

<template>
  <div>
    <app-chart :option="state.option" style="height: 350px;" :autoresize="true"></app-chart>
  </div>
</template>
<script setup>
import { reactive, onMounted } from 'vue'
const state = reactive({
  option: {},
})
onMounted(() => {
  getCostSubItemAnalysis()
})
const getCostSubItemAnalysis= () => {
  state.loading = true
  proxy.$apollo.query().then(res => {
    if (!res.loading && res.data) {
      state.costSubItemData = res.data.getCostSubItemAnalysis
      getLineChart(state.costSubItemData.trend) //从接口中请求到数据
    }
  }).finally(() => {
    state.loading = false
  })
}
const getLineChart= (chartData) => {
  if (!chartData.series) chartData.series = []
  const maxArr = []
  const legend = []
  const series = chartData.series?.map(item => {
    const lineData = []
    item.data.forEach(subitem => {
      lineData.push(Math.abs(subitem)) // Math.abs计算一个数的绝对值
    })
    maxArr.push(Math.max.apply(null, lineData))
    legend.push({
      name: resource[item.name] ? resource[item.name] : item.name
    })
    return {
      name: resource[item.name] ? resource[item.name] : item.name,
      type: 'line',
      smooth: true,
      symbol: item.data.length > 1 ? 'none' : 'circle',
      data: item.data.map(subitem => subitem.toFixed(2))
    }
  })
  let max = 0
  max = Math.ceil(Math.max.apply(null, maxArr) * 1.2) > 0 ? Math.ceil(Math.max.apply(null, maxArr) * 1.2) : 3
  state.option = {
    color: ['#4C66CE', '#F8D849', '#40CBCA', '#42AB7F', '#386F95', '#E2646C'],
    grid: { // 直角坐标系内绘图网格,单个 grid 内最多可以放置上下两个 X 轴,左右两个 Y 轴. 可以在网格上绘制折线图,柱状图,散点图(气泡图)。
      left: '36px', // grid 组件离容器左侧的距离。
      right: '36px',
      top: '24px',
      bottom: '48px',
      containLabel: true //grid 区域是否包含坐标轴的刻度标签
    },
    legend: {// 下方图例
      itemWidth: 8,
      itemHeight: 8,
      icon: 'circle',
      data: legend,
      left: 'center',
      bottom: '0',
      itemGap: 30,
      textStyle: {
        color: '#999999',
        fontSize: 12,
        fontWeight: 400
      }
    },
    tooltip: { // 提示框组件
      trigger: 'axis' // 触发类型。可选:'item'数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。'axis'坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。'none'什么都不触发。
    },
    xAxis: {
      axisLine: { // x轴线设置
        lineStyle: {
          type: 'solid',
          color: '#E9E9EB', // x线的颜色
          width: '1' // 坐标线的宽度
        }
      },
      axisLabel: { // x轴字体颜色
        textStyle: {
          color: '#999999'
        }
      },
      axisTick: { // 去掉x轴刻度
        show: false
      },
      type: 'category', // 坐标轴类型。可选:'value' 数值轴,适用于连续数据。'category' 类目轴,适用于离散的类目数据。为该类型时类目数据可自动从 series.data 或 dataset.source 中取,或者可通过 xAxis.data 设置类目数据。'time' 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同,例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。'log' 对数轴。适用于对数数据。
      data: chartData.xAxis?.map(item => {
        return props.periodType === 'day'
        ? moment(item * 1000).format('yyyy-MM-DD') : props.periodType === 'quarter'
        ? moment(item * 1000).format('yyyy') + '-' + transferDate[moment(item * 1000).format('MM')] : props.periodType === 'month'
        ? moment(item * 1000).format('yyyy-MM') : moment(item * 1000).format('yyyy')
      })
    },
    yAxis: {
      type: 'value',
      max: formatIntervalandMax(max, 3).max, // 坐标轴刻度最大值
      interval: formatIntervalandMax(max, 3).interval, // 强制设置坐标轴分割间隔
      axisLabel: {// 坐标轴刻度标签的相关设置
        formatter: (value) => {
          return value >= 1000 ? `${value / 1000}k` : `${value}`
        },
        textStyle: { // y轴字体颜色
          color: '#999999'
        }
      },
      splitLine: { // 保留网格线
        show: true,
        lineStyle: {
          type: 'solid',
          color: '#E5E6EB', // y线的颜色
          width: '1' // 坐标线的宽度
        }
      }
    },
    series: series
  }
}
</script>

重叠(堆叠)柱状图

image.png

<template>
  <div>
    <app-chart :option="state.barOption" style="height: 380px;" :autoresize="true"></app-chart>
  </div>
</template>
<script setup>
import { reactive, onMounted } from 'vue'
const state = reactive({
  barOption: {}
})
onMounted(() => {
  getCostTrend()
})
const getCostTrend = () => {
  state.loading = true
  proxy.$apollo.query().then(res => {
    if (!res.loading && res.data) {
      state.loading = false
      state.resourceAnalysisData = res.data.getCostDynamicResourceAnalysis //从接口中请求到数据
     getBarChart(state.lineCost.trend)
    }
  }).finally(() => {
    state.loading = false
  })
}

const getBarChart = (chartData) => {
  const lineData = []
  const onDemand = [] // 后付费的数据
  const reserved = [] // 先付费的数据
  const total = [] // 总额的数据

  chartData.series[0]?.data.forEach(item => {
    lineData.push(Math.abs(item.total))
    onDemand.push(item.onDemand.toFixed(2))
    reserved.push(item.reserved.toFixed(2))
    total.push((item.onDemand + item.reserved).toFixed(2))
  })
  const series = [
    {
      barGap: '-100%', //不同系列的柱间距离,为百分比(如 '30%',表示柱子宽度的 30%)。如果想要两个系列的柱子重叠,可以设置 barGap 为 '-100%'。这在用柱子做背景的时候有用。
      name: '总数',
      stack: 'total', //数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置。
      type: 'bar', 
      barWidth: '8px', //柱条的宽度,不设时自适应。
      itemStyle: {
        color: '#40CBCA',//柱条的颜色
        barBorderRadius: 5 //柱条的圆角半径,单位px,支持传入数组分别指定 4 个圆角半径。
      },
      data: total
    },
    {
      barGap: '-100%',
      name: '后付费',
      type: 'bar',
      barWidth: '8px',
      itemStyle: {
        color: '#40CBCA',
        barBorderRadius: 5
      },
      data: onDemand
    },
    {
      name: '预付费',
      type: 'bar',
      barWidth: '8px',
      showBackground: true, //是否显示柱条的背景色。
      backgroundStyle: { // 每一个柱条的背景样式。需要将 showBackground 设置为 true 时才有效。
        color: '#F2F3F7'
      },
      itemStyle: {
        color: '#4C66CE',
        barBorderRadius: 5
      },
      data: reserved
    }
  ]
  let max = 0
  max = Math.ceil(Math.max.apply(null, lineData) * 1.2) > 0 ? Math.ceil(Math.max.apply(null, lineData) * 1.2) : 3 // 计算y轴刻度最大值
  state.barOption = {
    legend: { //设置图例样式
      selectedMode: false, // 图例禁止点击
      itemWidth: 8,
      itemHeight: 8,
      icon: 'circle',
      data: ['预付费', '后付费'],
      left: 'center',
      bottom: '0',
      itemGap: 30,
      textStyle: {
        color: '#999999',
        fontSize: 12,
        fontWeight: 400
      }
    },
    grid: { // 直角坐标系内绘图网格,单个 grid 内最多可以放置上下两个 X 轴,左右两个 Y 轴. 可以在网格上绘制折线图,柱状图,散点图(气泡图)。
      left: '20px',
      right: '20px',
      top: '20px',
      bottom: '40px',
      containLabel: true,// grid 区域是否包含坐标轴的刻度标签
      show: true,
      borderWidth: '1', // 网格的边框线宽
      borderColor: '#E9E9EB' // 网格的边框颜色
    },
    tooltip: {// 提示框组件
      trigger: 'axis' // 触发类型。可选:'item'数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。'axis'坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。'none'什么都不触发。
      axisPointer: { // 坐标轴指示器配置项
        type: 'shadow' //指示器类型。可选'line' 直线指示器'shadow' 阴影指示器'none' 无指示器'cross' 十字准星指示器。其实是种简写,表示启用两个正交的轴的 axisPointer。
      },
      formatter: function (params) {
        let total = 0
        let axisValue = ''
        params.splice(0, 1)
        params.forEach(item => {
          total += Number(item.value)
          axisValue = item.axisValue
        })
        let tooltipVal = `<div>${axisValue}</div><div>当前总金额 -- ¥${total.toFixed(2)}</div>`
        params.forEach(item => {
          tooltipVal += `<div>${item.marker}<span style="margin-left: 4px;">${item.seriesName}</span><span style="margin-left: 16px; display: inline-block; min-width: 100px;">¥${item.value}</span><span>${total ? (Number(item.value) / total * 100).toFixed(2) + '%' : '--'}</span></div>`
        })
        return tooltipVal
      }
    },
    xAxis: {
      type: 'category',
      axisLabel: {
        textStyle: {
          color: '#999999'
        }
      },
      axisTick: { // 刻度
        show: false
      },
      axisLine: { // 轴线
        lineStyle: {
          color: '#E9E9EB',
          width: 1
        }
      },
      data: chartData.xAxis.map(item => {
        return props.periodType === 'day'
        ? moment(item * 1000).format('yyyy-MM-DD') : props.periodType === 'quarter'
        ? moment(item * 1000).format('yyyy') + '-' + transferDate[moment(item * 1000).format('MM')] : props.periodType === 'month'
        ? moment(item * 1000).format('yyyy-MM') : moment(item * 1000).format('yyyy')
      })
    },
    yAxis: {
      max: formatIntervalandMax(max, 3).max, //y轴刻度最大值
      interval: formatIntervalandMax(max, 3).interval, // 强制设置坐标轴分割间隔
      type: 'value', // 坐标轴类型。可选:'value' 数值轴,适用于连续数据。'category' 类目轴,适用于离散的类目数据。为该类型时类目数据可自动从 series.data 或 dataset.source 中取,或者可通过 xAxis.data 设置类目数据。'time' 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同,例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。'log' 对数轴。适用于对数数据。
      axisLabel: {
        formatter: (value) => {
          return value >= 1000 ? `${value / 1000}k` : `${value}`
        },
        textStyle: { // y轴字体颜色
          color: '#999999'
        }
      }
    },
    series: series
  }
}
</script>

柱状图

image.png

<template>
  <div>
    <app-chart :option="state.option" style="height: 380px;" :autoresize="true"></app-chart>
  </div>
</template>
<script setup>
import { reactive, onMounted } from 'vue'
const state = reactive({
  option: {}
})
onMounted(() => {
  getCostDynamicResourceAnalysis()
})
const getCostDynamicResourceAnalysis = () => {
  state.loading = true
  proxy.$apollo.query().then(res => {
    if (!res.loading && res.data) {
      state.loading = false
      state.resourceAnalysisData = res.data.getCostDynamicResourceAnalysis //从接口中请求到数据
      getLineChart(state.resourceAnalysisData.trend)
    }
  }).finally(() => {
    state.loading = false
  })
}

const getLineChart = (chartData) => {
  let max = 0
  const lineData = []
  chartData.series[0]?.data.forEach(item => {
    lineData.push(Math.abs(item))
  })
  max = Math.ceil(Math.max.apply(null, lineData) * 1.2) > 0 ? Math.ceil(Math.max.apply(null, lineData) * 1.2) : 3
  state.option = {
    grid: {
      left: '20px',
      right: '20px',
      top: '20px',
      bottom: '40px',
      containLabel: true,
      show: true,
      borderWidth: '1',
      borderColor: '#E9E9EB'
    },
    tooltip: {
      trigger: 'axis',
      axisPointer: { //坐标轴指示器配置项
        type: 'shadow' //指示器类型。可选'line' 直线指示器'shadow' 阴影指示器'none' 无指示器'cross' 十字准星指示器。其实是种简写,表示启用两个正交的轴的 axisPointer。
      }
    },
    xAxis: {
      type: 'category',
      axisLabel: {// x轴字体颜色
        textStyle: {
          color: '#999999'
        }
      },
      axisTick: { // 刻度
        show: false
      },
      axisLine: { // 轴线
        lineStyle: {
          color: '#E9E9EB',
          width: 1
        }
      },
      data: chartData.xAxis.map(item => {
        return props.periodType === 'day'
        ? moment(item * 1000).format('yyyy-MM-DD') : props.periodType === 'quarter'
        ? moment(item * 1000).format('yyyy') + '-' + transferDate[moment(item * 1000).format('MM')] : props.periodType === 'month'
        ? moment(item * 1000).format('yyyy-MM') : moment(item * 1000).format('yyyy')
      })
    },
    yAxis: {
      max: formatIntervalandMax(max, 3).max,//y轴刻度最大值
      interval: formatIntervalandMax(max, 3).interval,// 强制设置坐标轴分割间隔
      type: 'value', // 坐标轴类型。可选:'value' 数值轴,适用于连续数据。'category' 类目轴,适用于离散的类目数据。为该类型时类目数据可自动从 series.data 或 dataset.source 中取,或者可通过 xAxis.data 设置类目数据。'time' 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同,例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。'log' 对数轴。适用于对数数据。
      axisLabel: {// y轴字体颜色
        textStyle: {
          color: '#999999'
        }
      }
    },
    series: [
      {
        data: chartData.series[0]?.data.map(item => item.toFixed(2)),
        type: 'bar',
        barWidth: '8px', 
        showBackground: true,
        backgroundStyle: {
          color: '#F2F3F7'
        },
        itemStyle: {
          color: '#4C66CE',
          barBorderRadius: 5
        }
      }
    ]
  }
}
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/803917.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

libcomposite: Unknown symbol config_group_init (err 0)

加载libcomposite.ko 失败 问题描述 如图&#xff0c;在做USB OTG 设备模式的时候需要用到libcomposite.ko驱动&#xff0c;加载失败了。 原因&解决方法 有一个依赖叫configfs.ko的驱动没有安装。可以从内核代码的fs/configfs/configfs.ko中找到这个驱动。先加载confi…

Linux学习之自定义函数

函数是把一些重复使用的命令封装成一个集合&#xff0c;之后可以使用函数名调用。 定义函数的格式如下&#xff1a; function 函数名() {指令集&#xff08;若干条语句&#xff09; return n }要是直接在Shell中直接定义函数&#xff0c;那么直接在Shell中直接使用函数名 参数…

建筑工地为什么要做人员定位?解读技术背后的安全与效益

建筑工地是一个复杂而危险的环境&#xff0c;人员安全一直是行业亟待解决的难题。为了确保工人的安全&#xff0c;并提高工地的管理效率&#xff0c;越来越多的建筑工地开始采用人员定位技术。 对此&#xff0c;华安联大便和各位朋友一起深入探讨人员定位技术的优势和功能&…

C++(14):重载运算与类型转换

当运算符被用于类类型的对象时&#xff0c;允许我们为其指定新的含义&#xff1b;同时&#xff0c;也能自定义类类型之间的转换规则。和内置类型的转换一样&#xff0c;类类型转换隐式地将一种类型的对象转换成另一种我们所需类型的对象。 当运算符作用于类类型的运算对象时&a…

一、创建自己的docker python容器环境;支持新增python包并更新容器;离线打包、加载image

1、创建自己的docker python容器环境 参考&#xff1a;https://blog.csdn.net/weixin_42357472/article/details/118991485 首先写Dockfile&#xff0c;注意不要有txt等后缀 Dockfile # 使用 Python 3.9 镜像作为基础 FROM python:3.9# 设置工作目录 WORKDIR /app# 复制当前…

了解网络层

网络层 1. 概述2. 网络层提供的两种服务2.1 面向连接的虚电路服务2.2 无连接的数据报服务2.3 虚电路服务 VS 数据报服务 3. IPv4地址及其应用3.1 分类编址的IPv4地址3.1.1 A类地址3.1.2 B类地址3.1.3 C类地址 3.2 划分子网的IPv4地址3.3 无分类编址的IPv4地址3.4 IPv4地址的应用…

出海品牌整合营销指南:打造全球化成功的关键策略

随着全球化的不断深入&#xff0c;越来越多的企业开始将目光投向海外市场&#xff0c;希望在国际舞台上展现自己的实力和魅力。然而&#xff0c;出海市场的竞争激烈&#xff0c;如何在陌生的土地上建立起品牌影响力&#xff0c;成为摆在出海企业面前的一大难题。在这样的背景下…

TD1850多用表校准系统参考标准

参考标准 分类 标准名称 国家标准 GB/T 13978-2008 数字多用表 GB/T 15637-2012 数字多用表校准仪通用规范 计量法规 JJF 1075-2015 钳形电流表校准规范 JJF 1284-2011 交直流电表校验仪校准规范 JJF 1587-2016 数字多用表校准规范 JJG 124-2005 电流表、电压表、功率表及…

苍穹外卖day02项目日志

1. 描述清楚新增员工的实现流程 1.1需求分析与设计 参考产品原型&#xff0c;设计表和接口。 1.1.1设计表 看员工管理的产品原型&#xff1a; 有员工姓名、账号、手机号、账号状态、最后操作时间等。 注意&#xff0c;操作一栏不是字段&#xff0c;其中的启用禁用才是。 再…

沦为囚犯的“烟草女王”卢平的管理口诀:大胆设计,小心求证

沦为囚犯的“烟草女王”卢平的管理口诀&#xff1a; 大胆设计&#xff0c;小心求证 卢平是当初是湖南烟草界女强人 大致2003年听到了一句话 在管理知识稀缺的年代 当初听了有点小激动 趣讲大白话&#xff1a;管理口诀有意思 【趣讲信息科技239期】 ***************************…

面试了一个在字节工作2年的“大佬”,我蚌埠住了

昨天面试了一位在字节跳动工作2年多的开发&#xff0c;简历上写的工作截止时间是“至今”。特意问了一下&#xff0c;才知道实际是六月份已经不在职了。面试也就进行了十多分钟&#xff0c;但想跟大家分享一些站在选人的视角如何看待面试中的一些问题。 先说说面试 首先肯定是…

不断学习和提高写作水平,使公文写作更加得心应手和高效精准

不断学习和提高写作水平&#xff0c;积累经验和技巧&#xff0c;是提高公文写作能力的重要方法。 具体来说&#xff0c;可以采取以下几个方面的工作&#xff1a; 1.学习范例&#xff1a;阅读优秀的公文范例&#xff0c;学习其写作技巧和语言风格&#xff0c;以丰富自己的写作经…

低代码开发平台源码

什么是低代码开发平台&#xff1f; 低代码来源于英文“Low Code&#xff0c;它意指一种快速开发的方式&#xff0c;使用最少的代码、以最快的速度来交付应用程序。通俗的来说&#xff0c;就是所需代码数量低&#xff0c;开发人员门槛低&#xff0c;操作难度低。一般采用简单的图…

如何将 LoRaWAN 用于比赛场景

如何将 LoRaWAN 用于比赛场景 关键词 LoRaWAN 实时上报 下行同步 不丢包 组播 应用场景 学生/运动员比赛&#xff0c;射击比武&#xff0c;同步采集等 摘要 为了将 LoRaWAN 应用于&#xff1a;比赛&#xff0c;比武&#xff0c;同步采集等场景&#xff0c;应对下行同步和…

cURL error 1: Protocol “https“ not supported or disabled in libcurl

1、php项目composer update报错 2、curl -V检查 发现curl已经支持了https了 3、php版本检查 4、php插件检查 插件也已经含有openssl组件了 5、phpinfo检查 curl是否开启ssl 定位到问题所在&#xff0c;php7.4的 curl扩展不支持 https 需要重装 php7.4的curl扩展 6、curl下载 下…

Feign API模块导入的两种方式

说明&#xff1a;在微服务框架中&#xff0c;会把其他微服务用到的FeignClient统一放到一个模块里面&#xff0c;称为FeignAPI&#xff0c;其他微服务需要使用FeignClient&#xff0c;引入FeignClient的Maven坐标就可以使用。 但是只引入FeignAPI的坐标还不行&#xff0c;Feig…

【分布式】分布式唯一 ID 的 几种生成方案以及优缺点snowflake优化方案

在互联网的业务系统中&#xff0c;涉及到各种各样的ID&#xff0c;如在支付系统中就会有支付ID、退款ID等。那一般生成ID都有哪些解决方案呢&#xff1f;特别是在复杂的分布式系统业务场景中&#xff0c;我们应该采用哪种适合自己的解决方案是十分重要的。下面我们一一来列举一…

数字化新时代,VR全景拍摄与制作

导语&#xff1a; 随着科技的飞速发展&#xff0c;数字化图片正在引领新的时代潮流。在这个数字化图片的新时代&#xff0c;VR全景拍摄与制作技术正以其独特的特点和无限的优势&#xff0c;成为数字影像领域的一颗璀璨明星。让我们深入了解VR全景拍摄与制作的特点和优势&#…

PLC绝对值指令ABS()

在C语言里,ABS()指令属于基础指令,博途PLC系统也有绝对值指令。对于S7-200SMART PLC则需要自行构造,下面给出SMART PLC的绝对值指令ABS()。 1、S7-SMART PLC绝对值指令 2、STL代码 SUBROUTINE_BLOCK ABS:SBR3 TITLE=ABS()函数 VAR_INPUT x:REAL; END_VAR VAR_OUTPUT y:RE…

市值超300亿美金,SaaS独角兽Veeva如何讲好中国故事?

“全球前50的药企&#xff0c;有47家正在使用Veeva。” 提到Veeva Systems&#xff08;以下简称“Veeva”&#xff09;&#xff0c;可能很多人并不熟悉。但是生命科学业内人士都知道&#xff0c;Veeva是全球头部的行业SaaS服务商。以“为生命科学行业构建行业云”为使命&#x…