封装echarts成vue component
封装echarts成vue component EChartsLineComponent
文章目录
- 封装echarts成vue component EChartsLineComponent
- 封装说明
- 重写重点
- EChartsLineComponent的源码
- 使用说明
- 调用EChartsLineComponent示例源码
封装说明
为了减少一些公共代码和方便使用echarts的line图形,有限制条件的封装echats中的line类型的图,该Component名称为EChartsLineComponent。
重写重点
-
以
dateset属性中的source来判断图形是否包含数据,意味着需要通过dataset,source的方式配置数据。初始化option是要定义datasource,source属性,否则不能正常使用该EChartsLineComponent。option:{dataset: {// 第一行为表头,第一个元素为X轴,其后为Y轴元素// 第二行为具体数据点source: []} }同时,在定义的
option中需要先确认数据每条线显示的效果,即配置series属性。option:{series: [{type: 'line',smooth: true,},{type: 'line',smooth: true,}] } -
定义了空数据的展示效果,舍弃了有数据状态下的
grid属性。

-
增加了窗口自适应写法,并确定初始化图标高度为
400px,宽度100%。
EChartsLineComponent的源码
<template><div :id="chartId" :style="{ width: width, height: height }"></div>
</template><script>
import * as echarts from 'echarts';export default {name: 'EChartsLineComponent',props: {chartId: {type: String,required: true},width: {type: String,default: '100%'},height: {type: String,default: '400px'},option: {type: Object,required: true},},data() {return {chartInstance: null,noDataOption: {title: {show: true,text: '暂无数据',left: 'center', // 水平居中top: 'center', // 垂直居中},xAxis: {show: false,},yAxis: {show: false,},grid: {show: true,shadowColor: 'rgba(0, 0, 0, 0.5)',shadowBlur: 10}},};},watch: {option: {handler(newOption, oldOption) {if (this.chartInstance) {// todo 需要细化明确数据变成空的定义 变化中if (newOption.dataset.source.length === 0) {this.updateAxisShow(newOption, false)this.chartInstance.clear();this.noDataOption.title.show = truethis.noDataOption.grid.show = truethis.chartInstance.setOption(this.noDataOption);} else {newOption.title = {show: false}newOption.grid = {show: false}this.updateAxisShow(newOption, true)this.chartInstance.setOption(newOption);}} else {this.init()}},deep: true}},mounted() {this.init()// todo 需要细化明确数据变成空的定义 -- 初始化时if (this.chartInstance.getOption().dataset[0].source.length === 0) {this.updateAxisShow(this.chartInstance.getOption(), false);this.chartInstance.clear();this.chartInstance.setOption(this.noDataOption);}window.addEventListener('resize', this.handleResize);},beforeDestroy() {window.removeEventListener('resize', this.handleResize);if (this.chartInstance) {this.chartInstance.dispose();}},methods: {init() {this.chartInstance = echarts.init(document.getElementById(this.chartId), {renderer: 'svg'});this.chartInstance.setOption(this.option);window.addEventListener('resize', this.handleResize);},handleResize() {if (this.chartInstance) {this.chartInstance.resize();}},updateAxisShow(newOption, value) {if (newOption.yAxis.length) {this.noDataOption.yAxis = []for (let i = 0; i < newOption.yAxis.length; i++) {this.noDataOption.yAxis.push({"show": value})newOption.yAxis[i].show = value}} else {this.noDataOption.yAxis = {"show": value}newOption.yAxis.show = value}if (newOption.xAxis.length) {this.noDataOption.xAxis = []for (let i = 0; i < newOption.xAxis.length; i++) {this.noDataOption.xAxis.push({"show": value})newOption.xAxis[i].show = value}} else {this.noDataOption.xAxis = {"show": value}newOption.xAxis.show = value}},}
};
</script>
使用说明
调用EChartsLineComponent示例源码
<template><sn-page><sd-search-pane ref="searchPane":model="searchModel":options="searchOptions":rules="searchRules":span="3":hide-cancel="true"@handle-query="handleQuery"/><div><div class="title">CPU内核情况</div><EChartsComponent chart-id="CPUUsedChart" :option="CPUUsedChartOption"></EChartsComponent><div class="title">内存情况</div><EChartsComponent chart-id="MemoryUsedChart" :option="MemoryUsedChartOption"></EChartsComponent><div class="title">资源pending情况</div><EChartsComponent chart-id="PendingChart" :option="PendingChartOption"></EChartsComponent><div class="title">APP情况</div><EChartsComponent chart-id="APPChart" :option="APPChartChartOption"></EChartsComponent><div class="title">Container情况</div><EChartsComponent chart-id="ContainerUsedChart" :option="ContainerUsedChartOption"></EChartsComponent></div></sn-page>
</template><script>
export default {data(vm) {return {searchModel: {clusterName: "",queueName: "",time: []},searchOptions: {clusterName: {label: "集群",type: "select",span: 6,props: {clearable: true,filterable: true},on: {change(val) {val && vm.getQueue()},clear() {vm.clearQueue()}},children: []},queueName: {label: "队列",type: "select",span: 6,props: {clearable: true,filterable: true},children: []},time: {label: "时间",type: "date-picker",span: 9,props: {clearable: true,type: "datetimerange",rangeSeparator: "到",format: "yyyy-MM-dd HH:mm","value-format": "yyyy-MM-dd HH:mm",pickerOptions: {shortcuts: [{text: '最近3小时',onClick(picker) {const end = new Date();const start = new Date();start.setTime(start.getTime() - 3600 * 1000 * 3);picker.$emit('pick', [start, end]);}}, {text: '最近1天',onClick(picker) {const end = new Date();const start = new Date();start.setTime(start.getTime() - 3600 * 1000 * 24);picker.$emit('pick', [start, end]);}}, {text: '最近3天',onClick(picker) {const end = new Date();const start = new Date();start.setTime(start.getTime() - 3600 * 1000 * 24 * 3);picker.$emit('pick', [start, end]);}}]}}}},searchRules: {clusterName: [{required: true,message: "请选择集群",trigger: "change"}],queueName: [{required: true,message: "请选择队列",trigger: "change"}],time: [{required: true,message: "请选择时间",trigger: "change"}]},CPUUsedChartOption: {legend: {top: "bottom",},tooltip: {trigger: 'axis',},toolbox: {show: true,feature: {saveAsImage: {show: true}}},dataset: {// 第一行为表头,第一个元素为X轴,其后为Y轴元素// 第二行为具体数据点source: []},xAxis: {show: true,type: 'category',boundaryGap: false,},yAxis: {type: "value",name: "数量",splitLine: {show: true},axisLabel: {show: true,fontSize: 16,}},series: [{type: 'line',lineStyle: {width: 3, // 设置线条宽度为4type: 'dashed', // 设置为虚线},smoothMonotone: "x",smooth: true,},{type: 'line',smoothMonotone: "x",smooth: true,},{type: 'line',lineStyle: {width: 3, // 设置线条宽度为4type: 'dashed', // 设置为虚线},smoothMonotone: "x",smooth: true,}]},MemoryUsedChartOption: {legend: {top: "bottom",},tooltip: {trigger: 'axis',},toolbox: {show: true,feature: {saveAsImage: {show: true}}},dataset: {// 第一行为表头,第一个元素为X轴,其后为Y轴元素// 第二行为具体数据点source: []},xAxis: {show: true,type: 'category',boundaryGap: false,},yAxis: {type: "value",name: "大小",splitLine: {show: true},axisLabel: {show: true,fontSize: 16,}},series: [{type: 'line',lineStyle: {width: 3, // 设置线条宽度为4type: 'dashed', // 设置为虚线},smoothMonotone: "x",smooth: true,},{type: 'line',smoothMonotone: "x",smooth: true,},{type: 'line',lineStyle: {width: 3, // 设置线条宽度为4type: 'dashed', // 设置为虚线},smoothMonotone: "x",smooth: true,}]},PendingChartOption: {legend: {top: "bottom",},tooltip: {trigger: 'axis',},toolbox: {show: true,feature: {saveAsImage: {show: true}}},dataset: {// 第一行为表头,第一个元素为X轴,其后为Y轴元素// 第二行为具体数据点source: []},xAxis: {show: true,type: 'category',boundaryGap: false,},yAxis: [{type: "value",name: "大小",splitLine: {show: true},axisLabel: {show: true,fontSize: 16,}},{type: "value",name: "数量",splitLine: {show: true},axisLabel: {show: true,fontSize: 16,}}],series: [{type: 'line',yAxisIndex: 0,smooth: true,},{type: 'line',yAxisIndex: 1,smooth: true,},]},APPChartChartOption: {legend: {top: "bottom",},tooltip: {trigger: 'axis',},toolbox: {show: true,feature: {saveAsImage: {show: true}}},dataset: {// 第一行为表头,第一个元素为X轴,其后为Y轴元素// 第二行为具体数据点source: []},xAxis: {show: true,type: 'category',boundaryGap: false,},yAxis: {type: "value",name: "数量",splitLine: {show: true},axisLabel: {show: true,fontSize: 16,}},series: [{type: 'line',lineStyle: {width: 3, // 设置线条宽度为4type: 'dashed', // 设置为虚线},smooth: true,},{type: 'line',smooth: true,},{type: 'line',smooth: true,},{type: 'line',smooth: true,},{type: 'line',smooth: true,},{type: 'line',smooth: true,},{type: 'line',smooth: true,},{type: 'line',smooth: true,},]},ContainerUsedChartOption: {legend: {top: "bottom",},tooltip: {trigger: 'axis',},toolbox: {show: true,feature: {saveAsImage: {show: true}}},dataset: {// 第一行为表头,第一个元素为X轴,其后为Y轴元素// 第二行为具体数据点source: []},xAxis: {show: true,type: 'category',boundaryGap: false,},yAxis: {type: "value",name: "数量",splitLine: {show: true},axisLabel: {show: true, fontSize: 16,}},series: [{type: 'line',smoothMonotone: "x",smooth: true,},{type: 'line',smoothMonotone: "x",smooth: true,},]}};},methods: {handleRes(res, title) {if (res.code === 0) {this.$message({type: 'success',message: title + res.msg})} else {this.$message({type: 'error',message: title + res.msg})}},getCPUUsed() {this.$get({api: 'api/v2/manager/yarn/metric/getQueueMetricMaxValue',params: {metrics: "AllocatedVCores,MaxShareVCores,MinShareVCores",clusterName: this.searchModel.clusterName,queueName: this.searchModel.queueName,startTime: this.searchModel.time[0],endTime: this.searchModel.time[1]}}, res => {this.handleRes(res,"CPU内核情况")this.CPUUsedChartOption.dataset.source = res.data})},getMemoryUsed() {this.$get({api: 'api/v2/manager/yarn/metric/getQueueMetricMaxValue',params: {clusterName: this.searchModel.clusterName,queueName: this.searchModel.queueName,metrics: "AllocatedMB,MaxShareMB,MinShareMB",startTime: this.searchModel.time[0],endTime: this.searchModel.time[1]}}, res => {this.handleRes(res,"内存情况")this.MemoryUsedChartOption.dataset.source = res.data})},getPending() {this.$get({api: 'api/v2/manager/yarn/metric/getQueueMetricMaxValue',params: {clusterName: this.searchModel.clusterName,queueName: this.searchModel.queueName,metrics: "PendingMB,PendingVCores",startTime: this.searchModel.time[0],endTime: this.searchModel.time[1]}}, res => {this.handleRes(res,"资源pending情况")this.PendingChartOption.dataset.source = res.data})},getAPP() {this.$get({api: 'api/v2/manager/yarn/metric/getQueueMetricMaxValue',params: {clusterName: this.searchModel.clusterName,queueName: this.searchModel.queueName,metrics: "MaxApps,AppsSubmitted,AppsRunning,AppsPending,AppsCompleted,AppsKilled,AppsFailed",startTime: this.searchModel.time[0],endTime: this.searchModel.time[1]}}, res => {this.handleRes(res,"APP情况")this.APPChartChartOption.dataset.source = res.data})},getContainerUsed() {this.$get({api: 'api/v2/manager/yarn/metric/getQueueMetricMaxValue',params: {clusterName: this.searchModel.clusterName,queueName: this.searchModel.queueName,metrics: "AllocatedContainers,PendingContainers",startTime: this.searchModel.time[0],endTime: this.searchModel.time[1]}}, res => {this.handleRes(res,"Container情况")this.ContainerUsedChartOption.dataset.source = res.data})},handleQuery() {this.$refs.searchPane.validate(valid => {if (valid) {// 几张图就几个请求this.getCPUUsed();this.getMemoryUsed();this.getPending();this.getAPP();this.getContainerUsed();}});},getQueue() {this.$get({api: 'api/v2/manager/yarn/monitor/listYarnQueue',params: {yarnCluster: this.searchModel.clusterName}}, res => {this.searchOptions.queueName.children = res.data.map(item => {return {label: item, value: item}})})},},mounted() {},created() {this.$get({api: 'api/v2/manager/yarn/monitor/listYarnCluster'}, res => {this.searchOptions.clusterName.children = res.data.map(item => {return {label: item, value: item}})})this.CPUUsedChartOption.dataset.source = [['metricDate', 'AllocatedVCores', 'MaxShareVCores', 'MinShareVCores'],['2024-12-5', 50, 100, 1900],['2024-12-6', 50, 100, 1900],['2024-12-7', 50, 100, 1900],['2024-12-8', 50, 100, 1900],['2024-12-9', 50, 100, 1900],['2024-12-10', 50, 100, 1900]];this.MemoryUsedChartOption.dataset.source = [['metricDate', 'AllocatedMB', 'MaxShareMB', 'MinShareMB'],['2024-12-5', 50, 100, 1900],['2024-12-6', 50, 100, 1900],['2024-12-7', 50, 100, 1900],['2024-12-8', 50, 100, 1900],['2024-12-9', 50, 100, 1900],['2024-12-10', 50, 100, 1900]];this.APPChartChartOption.dataset.source = [['metricDate', 'MaxApps', 'AppsSubmitted', 'AppsRunning', 'AppsPending', 'AppsCompleted', 'AppsKilled', 'AppsFailed'],['2024-12-5', 2000, 100, 1900, 50, 200, 1600, 1],['2024-12-6', 2000, 100, 1900, 50, 200, 1600, 0],['2024-12-7', 2000, 100, 1900, 50, 200, 1700, 0],['2024-12-8', 2000, 100, 1900, 50, 200, 1800, 0],['2024-12-9', 2000, 100, 1900, 50, 200, 2200, 0],['2024-12-10', 2000, 100, 1900, 50, 200, 1800, 0]];this.PendingChartOption.dataset.source = [['metricDate', 'PendingMB', 'PendingVCores'],['2024-12-5', 50, 0],['2024-12-6', 50, 100],['2024-12-7', 0, 100],['2024-12-8', 10, 60],['2024-12-9', 50, 100],['2024-12-10', 0, 0]];this.ContainerUsedChartOption.dataset.source = [['metricDate', 'AllocatedContainers', 'PendingContainers'],['2024-12-5', 50, 100],['2024-12-6', 50, 100],['2024-12-7', 50, 100],['2024-12-8', 50, 10000],['2024-12-9', 50, 1000],['2024-12-10', 50, 100900]];},beforeDestroy() {}
};
</script><style>
.title {display: flex;justify-content: center; /* 水平居中 */align-items: center; /* 垂直居中 */font-size: 20px;font-weight: bold;margin-top: 20px;
}
</style>相关文章:
封装echarts成vue component
封装echarts成vue component EChartsLineComponent 文章目录 封装echarts成vue component EChartsLineComponent封装说明重写重点EChartsLineComponent的源码 使用说明调用EChartsLineComponent示例源码 封装说明 为了减少一些公共代码和方便使用echarts的line图形,…...
uniapp Stripe 支付
引入 Stripe npm install stripe/stripe-js import { loadStripe } from stripe/stripe-js; Stripe 提供两种不同类型组件 Payment Element 和 Card Element:如果你使用的是 Payment Element,它是一个更高级别的组件,能够自动处理多种支…...
Windows onnxruntime编译openvino
理论上来说,可以直接访问 ONNXRuntime Releases 下载 dll 文件,然后从官方文档中下载缺少的头文件以直接调用,但我没有尝试过。 1. 下载 OpenVINO 包 从官网下载 OpenVINO 的安装包并放置在 C:\Program Files (x86) 路径下,例如…...
vue3+TS+vite中Echarts的安装与使用
概述 技术栈:Vue3TsViteEcharts 简述:图文详解,教你如何在Vue项目中引入Echarts,封装Echarts组件,并实现常用Echats图列 文章目录 一,效果图 二,引入Echarts 2.1安装Echarts 2.2main.ts中引…...
期末算法分析程序填空题
目录 5-1 最小生成树(普里姆算法) 5-2 快速排序(分治法) 输入样例: 输出样例: 5-3 归并排序(递归法) 输入样例: 输出样例: 5-4 求解编辑距离问题(动态规划法)…...
搭建android开发环境 android studio
1、环境介绍 在进行安卓开发时,需要掌握java,需要安卓SDK,需要一款编辑器,还需要软件的测试环境(真机或虚拟机)。 早起开发安卓app,使用的是eclipse加安卓SDK,需要自行搭建。 目前开…...
R语言6种将字符转成数字的方法,写在新年来临之际
咱们临床研究中,拿到数据后首先要对数据进行清洗,把数据变成咱们想要的格式,才能进行下一步分析,其中数据中的字符转成数字是个重要的内容,因为字符中常含有特殊符号,不利于分析,转成数字后才能…...
RocketMQ学习笔记(持续更新中......)
目录 1. 单机搭建 2. 测试RocketMQ 3. 集群搭建 4. 集群启动 5. RocketMQ-DashBoard搭建 6. 不同类型消息发送 1.同步消息 2. 异步消息发送 3. 单向发送消息 7. 消费消息 1. 单机搭建 1. 先从rocketmq官网下载二进制包,ftp上传至linux服务器,…...
强化学习的基础概念
这节课会介绍一些基本的概念,并结合例子讲解。 在马尔科夫决策框架下介绍这些概念 本博客是基于西湖大学强化学习课程的视屏进行笔记的,这是链接: 课程链接 目录 强化学习的基本概念 state和state space Action和Action Space State transiti…...
excel怎么删除右边无限列(亲测有效)
excel怎么删除右边无限列(亲测有效) 网上很多只用第1步的,删除了根本没用,还是存在,但是隐藏后取消隐藏却是可以的。 找到右边要删除的列的第一个空白列,选中整个列按“ctrlshift>(向右的小箭头)”&am…...
STM32-笔记23-超声波传感器HC-SR04
一、简介 HC-SR04 工作参数: • 探测距离:2~600cm • 探测精度:0.1cm1% • 感应角度:<15 • 输出方式:GPIO • 工作电压:DC 3~5.5V • 工作电流:5.3mA • 工作温度:-40~85℃ 怎么…...
Linux | Ubuntu零基础安装学习cURL文件传输工具
目录 介绍 检查安装包 下载安装 手册 介绍 cURL是一个利用URL语法在命令行下工作的文件传输工具,首次发行于1997年12。cURL支持多种协议,包括FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3…...
什么是 GPT?Transformer 工作原理的动画展示
大家读完觉得有意义记得关注和点赞!!! 目录 1 图解 “Generative Pre-trained Transformer”(GPT) 1.1 Generative:生成式 1.1.1 可视化 1.1.2 生成式 vs. 判别式(译注) 1.2 Pr…...
SpringCloudAlibaba实战入门之路由网关Gateway过滤器(十三)
承接上篇,我们知道除了断言,还有一个重要的功能是过滤器,本节课我们就讲一下常见的网关过滤器及其一般使用。 一、Filter介绍 类似SpringMVC里面的的拦截器Interceptor,Servlet的过滤器。“pre”和“post”分别会在请求被执行前调用和被执行后调用,用来修改请求和响应信…...
电路仿真软件PSIM简介
在从事开关电源相关产品开发的工程师或者正在学习开关电源的学习者,常常会用到各种仿真软件进行电路的仿真,不仅可以快速验证电路参数,还能清楚知道各器件的工作状态。 现在的电路仿真软件很多,例如matlab、Multisim、Simplis&…...
C语言:调试的概念和调试器的选择
所谓调试(Dubug),就是跟踪程序的运行过程,从而发现程序的逻辑错误(思路错误),或者隐藏的缺陷(Bug)。 在调试的过程中,我们可以监控程序的每一个细节ÿ…...
25. C++继承 1 (继承的概念与基础使用, 继承的复制兼容规则,继承的作用域)
⭐上篇模板文章:24. C模板 2 (非类型模板参数,模板的特化与模板的分离编译)-CSDN博客 ⭐本篇代码:c学习 橘子真甜/c-learning-of-yzc - 码云 - 开源中国 (gitee.com) ⭐标⭐是比较重要的部分 目录 一. 继承的基础使用 1.1 继承的格式 1.2 …...
git 退出编辑模式
在使用 Git 时,有时需要进入编辑器来输入提交信息或进行其他编辑操作。不同的系统和配置可能会导致使用不同的编辑器。以下是几种常见 Git 编辑器的退出方法: Vim 编辑器: 保存并退出: 按下 Esc 键退出编辑模式。输入 :w…...
内容营销与传统营销方式有哪些差别?
在互联网高度发达的当下,碎片化的信息接收方式,让用户对于营销信息拥有较高的敏感度。这一现状,也使得众多传统营销方式正在逐渐失效。想要稳定推广效率,内容营销是当下不少品牌的共同选择。接下来,就让我们来了解下内…...
EasyExcel(读取操作和填充操作)
文章目录 1.准备Read.xlsx(具有两个sheet)2.读取第一个sheet中的数据1.模板2.方法3.结果 3.读取所有sheet中的数据1.模板2.方法3.结果 EasyExcel填充1.简单填充1.准备 Fill01.xlsx2.无模版3.方法4.结果 2.列表填充1.准备 Fill02.xlsx2.模板3.方法4.结果 …...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
