PVE的优化与温度监控(三)—数据界面精简美化

PVE虚拟化平台之开启温度显示方法 阅读详情
AI摘要

文章围绕PVE的优化与温度监控展开,指出恩山大佬展示源码方式不够DIY,不能自主选择监控数据。提出优化需求,即确定所需参数单独归类、按需显示。还介绍了代码操作,如通过mobaxterm拉取地址文件,可根据需求调整温度、关注CPU状态及修改nvme和sata信息。

首先阅读源码,恩山大佬的方式是全部展示,但是有很多数据是我们在快速管理页面根本不需要注意的数据,但是恩山大佬的显示方式不够DIY 并不能够自己任意选择需要监控的数据,就想某种monitor软件一样,可以在电脑的副屏展示很多参数。

如果通过这篇文章来操作优化:PVE的优化与温度监控(一)-优快云博客文章浏览阅读143次。【代码】G37-14 软路由小主机中PVE8.x 的优化与温度监控。https://blog.youkuaiyun.com/KeyBordkiller/article/details/143882846?spm=1001.2014.3001.5501

 那么你应该看到的状态是这样的:

对个人来说过于冗余,不够直观迅速 

修改后

需求:确定需要的参数并单独归类,按需打开显示。

1.代码

地址文件通过mobaxterm直接拉下来:

/usr/share/pve-manager/js/pvemanagerlib.js

1.1根据需求调整需要的温度 

{
    itemId: 'thermal',
    colspan: 2,
    printBar: false,
    title: gettext('温度'),
    textField: 'thermalstatus',
    renderer: function(value) {
		//cpu
		const p0 = value.match(/Package id 0.*?\+([\d\.]+)?/)[1];
        //const c0 = value.match(/Core 0.*?\+([\d\.]+)?/)[1];
        //const c1 = value.match(/Core 1.*?\+([\d\.]+)?/)[1];
        //const c2 = value.match(/Core 2.*?\+([\d\.]+)?/)[1];
        //const c3 = value.match(/Core 3.*?\+([\d\.]+)?/)[1];
		
		//board
        
		//NVMe
        const NVMe_t_composite = value.match(/Composite.*?\+([\d\.]+)?/)[1];
        //const NVMe_t_Sensor1 = value.match(/Sensor 1.*?\+([\d\.]+)?/)[1];
		//const NVMe_t_Sensor2 = value.match(/Sensor 2.*?\+([\d\.]+)?/)[1];
		
		//fan
        const cpu_fan = value.match(/(?<=:\s+)([1-9]\d*)(?=\s+RPM)/)[1];
        return `CPU: ${p0}℃ | NVMe: ${NVMe_t_composite}℃ | 风扇:${cpu_fan} RPM `
    }
},

关联文件及代码:

/usr/share/perl5/PVE/API2/Nodes.pm
$res->{thermalstatus} = `sensors -A`;

 1.2cpu性能只需要cpu的状态即可

	{
		  itemId: 'cpumhz',
		  colspan: 2,
		  printBar: false,
		  title: gettext('CPU状态'),
		  textField: 'cpuFreq',
		  renderer:function(v){
			//return v;
			/*console.log(v);
			let m = v.match(/(?<=^cpu[^\d]+)\d+/img);
			let m2 = m.map( e => ( e / 1000 ).toFixed(1) );
			m2 = m2.join(' | ');*/
			
			let gov = v.match(/(?<=^gov:).+/im)[0].toUpperCase();
			
			/*let min = (v.match(/(?<=^min:).+/im)[0]);
			if ( min !== 'none' ) {
				min=(min/1000000).toFixed(1);
			}
			
			let max = (v.match(/(?<=^max:).+/im)[0])
			if ( max !== 'none' ) {
				max=(max/1000000).toFixed(1);
			}
			
			let watt= v.match(/(?<=^pkgwatt:)[\d.]+$/im);
			watt = watt? " | 功耗: " + (watt[0]/1).toFixed(1) + 'W' : '';*/
			
			//return `${m2} | MAX: ${max}GHz| MIN: ${min}GHz ${watt} | CPU性能: ${gov}`
			return `CPU性能: ${gov}`
		 }
	},

 1.3nvme 和sata信息简单进行修改即可

		{
			  itemId: 'nvme00',
			  colspan: 2,
			  printBar: false,
			  title: gettext('NVMe'),
			  textField: 'nvme0',
			  renderer:function(value){
				//return value;
				try{
					let  v = JSON.parse(value);
					//名字
					let model = v.model_name;
					if (! model) {
						return '找不到硬盘,直通或已被卸载';
					}
					// 温度
					let temp = v.temperature?.current;
					temp = ( temp !== undefined ) ? " | " + temp + '°C' : '' ;
					
					// 通电时间
					let pot = v.power_on_time?.hours;
					let poth = v.power_cycle_count;
					
					pot = ( pot !== undefined ) ? (" | 通电: " + pot + '时' + ( poth ? ',次: '+ poth : '' )) : '';
					
					// 读写
					let log = v.nvme_smart_health_information_log;
					let rw=''
					let health=''
					if (log) {
						let read = log.data_units_read;
						let write = log.data_units_written;
						read = read ? (log.data_units_read / 1956882).toFixed(1) + 'T' : '';
						write = write ? (log.data_units_written / 1956882).toFixed(1) + 'T' : '';
						if (read && write) {
							rw = ' | R/W: ' + read + '/' + write;
						}
						//let pu = log.percentage_used;
						//let me = log.media_errors;
						/*if ( pu !== undefined ) {
							health = ' | 健康: ' + ( 100 - pu ) + '%'
							if ( me !== undefined ) {
								health += ',0E: ' + me
							}
						}*/
					}

					// smart状态
					let smart = v.smart_status?.passed;
					if (smart === undefined ) {
						smart = '';
					} else {
						smart = ' | SMART: ' + (smart ? '正常' : '警告!');
					}
					
					
					let t = model  + temp + health  + smart;
					//console.log(t);
					return t;
				}catch(e){
					return '无法获得有效消息';
				};

			 }
		},
		{
			itemId: 'sd00',
			colspan: 2,
			printBar: false,
			title: gettext('HDD'),
			textField: 'sd0',
			renderer:function(value){
			  //return value;
			  try{
				  let  v = JSON.parse(value);
				  console.log(v)
				  if (v.standy === true) {
					  return '休眠中'
				  }
				  
				  //名字
				  let model = v.model_name;
				  if (! model) {
					  return '找不到硬盘,直通或已被卸载';
				  }
				  // 温度
				  let temp = v.temperature?.current;
				  temp = ( temp !== undefined ) ? " | 温度: " + temp + '°C' : '' ;
				  
				  // 通电时间
				  let pot = v.power_on_time?.hours;
				  let poth = v.power_cycle_count;
				  
				  pot = ( pot !== undefined ) ? (" | 通电: " + pot + '时' + ( poth ? ',次: '+ poth : '' )) : '';
				  
				  // smart状态
				  let smart = v.smart_status?.passed;
				  if (smart === undefined ) {
					  smart = '';
				  } else {
					  smart = ' | SMART: ' + (smart ? '正常' : '警告!');
				  }
				  
				  
				  //let t = model + temp  + pot + smart;
				  let t = model + temp  + smart;
				  //console.log(t);
				  return t;
			  }catch(e){
				  return '无法获得有效消息';
			  };
		   }
	  },		{
			  itemId: 'nvme00',
			  colspan: 2,
			  printBar: false,
			  title: gettext('NVMe'),
			  textField: 'nvme0',
			  renderer:function(value){
				//return value;
				try{
					let  v = JSON.parse(value);
					//名字
					let model = v.model_name;
					if (! model) {
						return '找不到硬盘,直通或已被卸载';
					}
					// 温度
					let temp = v.temperature?.current;
					temp = ( temp !== undefined ) ? " | " + temp + '°C' : '' ;
					
					// 通电时间
					let pot = v.power_on_time?.hours;
					let poth = v.power_cycle_count;
					
					pot = ( pot !== undefined ) ? (" | 通电: " + pot + '时' + ( poth ? ',次: '+ poth : '' )) : '';
					
					// 读写
					let log = v.nvme_smart_health_information_log;
					let rw=''
					let health=''
					if (log) {
						let read = log.data_units_read;
						let write = log.data_units_written;
						read = read ? (log.data_units_read / 1956882).toFixed(1) + 'T' : '';
						write = write ? (log.data_units_written / 1956882).toFixed(1) + 'T' : '';
						if (read && write) {
							rw = ' | R/W: ' + read + '/' + write;
						}
						//let pu = log.percentage_used;
						//let me = log.media_errors;
						/*if ( pu !== undefined ) {
							health = ' | 健康: ' + ( 100 - pu ) + '%'
							if ( me !== undefined ) {
								health += ',0E: ' + me
							}
						}*/
					}

					// smart状态
					let smart = v.smart_status?.passed;
					if (smart === undefined ) {
						smart = '';
					} else {
						smart = ' | SMART: ' + (smart ? '正常' : '警告!');
					}
					
					
					let t = model  + temp + health  + smart;
					//console.log(t);
					return t;
				}catch(e){
					return '无法获得有效消息';
				};

			 }
		},
		{
			itemId: 'sd00',
			colspan: 2,
			printBar: false,
			title: gettext('HDD'),
			textField: 'sd0',
			renderer:function(value){
			  //return value;
			  try{
				  let  v = JSON.parse(value);
				  console.log(v)
				  if (v.standy === true) {
					  return '休眠中'
				  }
				  
				  //名字
				  let model = v.model_name;
				  if (! model) {
					  return '找不到硬盘,直通或已被卸载';
				  }
				  // 温度
				  let temp = v.temperature?.current;
				  temp = ( temp !== undefined ) ? " | 温度: " + temp + '°C' : '' ;
				  
				  // 通电时间
				  let pot = v.power_on_time?.hours;
				  let poth = v.power_cycle_count;
				  
				  pot = ( pot !== undefined ) ? (" | 通电: " + pot + '时' + ( poth ? ',次: '+ poth : '' )) : '';
				  
				  // smart状态
				  let smart = v.smart_status?.passed;
				  if (smart === undefined ) {
					  smart = '';
				  } else {
					  smart = ' | SMART: ' + (smart ? '正常' : '警告!');
				  }
				  
				  
				  //let t = model + temp  + pot + smart;
				  let t = model + temp  + smart;
				  //console.log(t);
				  return t;
			  }catch(e){
				  return '无法获得有效消息';
			  };
		   }
	  },

:

告别单调!手把手教你用Xftp美化PVE 8.3.5管理界面(Logo/标题一键改) 本文详细介绍了如何使用Xftp工具对PVE 8.3.5管理界面进行个性化页面修改,包括替换LOGO和修改导航栏标题等操作。通过图形化界面操作,无需复杂命令,即可快速实现界面美化,提升管理体验。适合希望定制PVE界面的用户参考。 阅读详情

相关推荐

PVEDiscordDark:Proxmox Web UI的类似于Discord的深色主题

Proxmox Web UI的黑暗主题, 灵感来自Discord的配色方案。 一切都是黑暗的,包括图表,上下文菜单以及两者之间的所有内容! 眼睛不需要油炸。 现在,主题运行其自己JavaScript代码,该代码为某些组件(和图表)的颜色打补丁。 这种方法比以前使用的方法更好,更安全。 安装 通过CLI实用程序完成安装。 在为Web UI服务的PVE节点上运行以下命令: ~# wget https://raw.githubusercontent.com/Weilbyte/PVEDiscordDark/master/PVEDiscordDark.sh ~# bash PVEDiscordDark.sh install 或者这个单线 bash <(curl -s https://raw.githubusercontent.com/Weilbyte/PVEDiscordDark/maste

Proxmox ve(PVE) 显示CPU和硬盘温度、UPS信息

PVE显示CPU温度,PVE显示硬盘温度,PVE显示UPS信息

取个名字太难了a的博客 3万+

PyTorch实战:5步搞定QAT量化感知训练(附避坑指南)

本文详细介绍了在PyTorch中实施量化感知训练(QAT)的五步实战流程。通过环境准备、模型融合、伪量化节点与STE原理剖析、校准微调训练、模型转换与导出等步骤,帮助开发者有效压缩模型以适配移动端与边缘设备部署,并提供了关键的超参数设置与常见问题避坑指南。

weixin_29083373的博客 418

PVE7.4显示CPU和硬盘温度

PVE显示CPU温度和硬盘温度 先来个最终效果图 安装PVE系统 这个不用讲了,网上大把教程,傻瓜式安装 修改配置文件 首先备份需要修改的文件 cp /usr/share/perl5/PVE/API2/Nodes.pm /usr/share/perl5/PVE/API2/Nodes.pm.bak cp /usr/share/pve-manager/js/pvemanagerlib.js /usr/share/pve-manager/js/pvemanagerlib.js.bak 修改Nodes.pm文件

u013693304的博客 2万+

kaggle项目:纽约出租车行程时间NYC Taxi Trip Duration

纽约出租车形成时间预测(NYC Taxi Trip Duration)是Kaggle中的一个Playground竞赛。比赛数据集基于2016年纽约市黄色出租车行程记录数据,需要建立一个模型,根据单个行程属性,预测测试集中每次行程的持续时间。Kaggle项目模型XGBoost,评价指标RMSLE。

weixin_42113929的博客 2790

蠕虫病毒代码(纯属参考,请勿用于非法事件)

1.介绍蠕虫病毒 蠕虫病毒是一种常见的计算机病毒,是无须计算机使用者干预即可运行的独立程序,它通过不停的获得网络中存在漏洞的计算机上的部分或全部控制权来进行传播。 计算机病毒是指编制或者在计算机程序中插入的破坏计算机功能或者破坏数据和恶意篡改系统. 影响计算机使用并且能够自我复制的一组计算机指令或者程序代码 中文名:蠕虫病毒 传染方式:网络和电子邮件 外文名:Worm virus 类型:计算机病毒 2.代码(建议使用虚拟机,否则你的计算机将会就地报废,使用时要关闭电脑病毒保护,否则程序会...

Kenny20211105的博客 2万+

PVE的优化与温度监控(二)—无法识别移动硬盘S.M.A.R.T信息的思考并解决

解决pve界面中磁盘选项卡下可移动磁盘,有smart 功能却显示为unknown的状态,涉及一定的pve后端perl源码

KeyBordkiller的博客 2988

CANape快速上手

文章帮助记录CANape学习过程。

小弱鸡的博客 1万+

PVE Tools终极指南:5分钟完成Proxmox VE复杂配置的完整教程

Proxmox VE是一款功能强大的开源虚拟化平台,但对于许多新手用户来说,复杂的命令行配置常常让人望而却步。今天我要介绍一个革命性的工具——PVE Tools,它能将原本需要数小时的配置工作简化为几分钟的图形化操作。这个一站式管理工具脚本让Proxmox VE的管理变得前所未有的简单高效。 ## 🚀 为什么你需要PVE Tools? 如果你曾经为配置Proxmox VE的各种功能而头疼,那

gitblog_00249的博客 220

【RT-DETR涨点改进】全网独家首发、特征融合改进篇 | AAAI 2026 | 引入CDEM交叉动态增强模块,双向引导和融合,在低光图像增强中有效提升了图像的亮度,提升小目标和暗目标的检测准确率

本文提出了一种基于CDEM(交叉动态增强模块)改进的rtdetr网络模型,有效提升了在低光和复杂环境下的目标检测性能。CDEM模块通过动态增强亮度与色彩特征,改善图像输入质量,增强细节和对比度。该模块具有轻量级结构,易于集成到现有模型中,能够显著提升小目标和暗目标的检测准确率与鲁棒性。文章详细介绍了CDEM模块的结构原理、实现方法,并提供了完整的代码实现和配置指南,包括三种改进版本的YAML配置文件。实验结果表明,该方法在图像增强和目标检测任务中均取得了优异性能。

Ai缝合怪、助力小伙伴高效发论文 143

6、基于深度强化学习的无人机路径规划

本文介绍了一种结合人工势场法的改进DQN深度强化学习算法在无人机路径规划中的应用。通过设计合理的网络结构、状态空间、动作空间和融合引力-斥力机制的奖励函数,实现了无人机在复杂环境中的自主避障与目标导向飞行。采用轻量级神经网络提升实时性,并在Gazebo仿真环境中进行训练与测试,结果表明该算法具有快速收敛、高成功率和良好适应性。实验评估指标包括损失函数、最大Q值和任务成功率,验证了方法的有效性。文章还探讨了其在物流配送、农业植保和环境监测等领域的应用前景,并展望了多无人机协同与复杂环境适应性等未来研究方向。

html8的博客 238

PVE Tools:Proxmox VE一站式管理工具,5分钟完成复杂配置

PVE Tools是一款专为Proxmox VE虚拟化平台设计的全能管理工具脚本,通过图形化界面简化了Proxmox VE的各种复杂配置任务。这个开源工具集让系统管理员和技术爱好者能够快速完成邮件配置、Samba/NFS共享、硬件直通、嵌套虚拟化等高级功能,将原本需要数小时的命令行操作简化为几分钟的图形化配置。 ## 项目概述与价值主张 你是否曾经因为配置Proxmox VE的各种功能而感到头

gitblog_00505的博客 271

Vue3 - Vite运行打包时Uncaught ReferenceError: process is not defined(解决vue3+vite报错process is not defined)

vue3,vite,vue3+vite报错,process,UncaughtReferenceError:processisnotdefined,浏览器控制台报错processisnotdefined解决方法,vue3如何解决报错,vite报错怎么办,前端打包UncaughtReferenceError:processisnotdefined,npmrunbuild打包报错,vite打包时出现错误,vue3打包运行找不到process,热更新会报错UncaughtRefer

🏆 前端领域优质创作者 7737

Proxmox VE终极管理神器:5分钟搞定复杂配置的完整指南

你是否还在为Proxmox VE的复杂配置而头疼?从邮件服务器设置到硬件直通,从存储共享到性能优化,每一个功能都需要记忆复杂的命令、编辑多个配置文件。现在,这一切都将成为过去!PVE Tools——这个专为Proxmox VE设计的全能管理工具脚本,将彻底改变你的虚拟化管理体验。通过图形化界面,它把原本需要数小时甚至数天的命令行操作简化为几分钟的点击配置,让即使是虚拟化新手也能轻松驾驭专业级功能。

gitblog_00026的博客 187

Android系统开发面试指南:系统Launcher岗位解析

本文针对上海礼聪Android系统开发岗位(侧重系统Launcher、充电/电池/USB底层开发)提供面试指南。内容涵盖应用开发(启动流程优化)、系统底层(充电状态机、USBOTG)、编程能力(线程安全LRU实现)、问题排查(ANR分析)及沟通协作等核心考点。通过5类典型问题及技术深度解析,帮助候选人系统准备,重点考察Framework源码理解、系统调试能力和工程思维。建议结合PowerManagerService等模块源码和systrace工具进行实践准备,同时注重技术表达与协作能力的展现。

郑伟强dev的专栏 934

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

如何快速掌握Proxmox VE:新手必备的终极配置指南

还在为Proxmox VE复杂的配置而头疼吗?每次搭建虚拟化环境都要面对繁琐的命令行操作、各种配置文件修改,是不是感觉学习曲线太陡峭?别担心,今天我要向你介绍一个能让Proxmox VE配置变得简单高效的神器——pvetools脚本工具集。 pvetools是一款专为Proxmox VE设计的自动化配置工具,它通过图形化界面将原本需要几十条命令的复杂操作简化为"一键完成"。无论你是刚接触Prox

gitblog_00893的博客 195

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Proxmox VE配置太复杂?这个神器脚本让你3分钟搞定所有难题!

还在为Proxmox VE的复杂配置而头疼吗?你是不是也曾被邮件告警、Samba共享、硬件直通这些专业设置搞得焦头烂额?今天我要分享一个让我工作效率提升10倍的神器——pvetools脚本工具集,它能让你用最简单的方式搞定所有PVE配置难题! ## 痛点分析:为什么PVE配置让人望而却步? 作为一名PVE新手,你一定遇到过这些问题: 1. **邮件告警配置**:需要手动编辑多个配置文件,SM

gitblog_01198的博客 165

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

3分钟搞定Proxmox VE!pvetools终极工具集让虚拟化管理简单如画

Proxmox VE虚拟化管理神器pvetools,一键自动化配置让运维效率飙升!作为专为Proxmox VE设计的开源脚本工具集,pvetools将复杂的邮件配置、Samba共享、NFS挂载、ZFS管理、嵌套虚拟化、Docker部署和硬件直通等高级操作简化为可视化菜单操作,即使是Linux新手也能轻松驾驭企业级虚拟化平台。 ## 🎯 为什么你需要pvetools? ### 告别复杂命令,拥

gitblog_00849的博客 243

PVE全新安装后个人优化步骤

PVE Debian

Walking__Dead的博客 1万+

Proxmox ve(PVE) 显示CPU温度、NVME硬盘温度、主板温度(三种方式)

安装Influxdb监控PVE主机温度

站在知识源头搞技术 5162

PVE(8.3.5)的入门探索(五)——pve个性化页面修改

本文介绍了如何通过修改文件内容来美化PVE(Proxmox Virtual Environment)的Web页面,以缓解长时间使用后的视觉疲劳。

2401_87817752的博客 2109

PVE7.2 显示CPU温度和频率

PVE7.2 显示CPU温度和频率 给自己留着保存用,仅供参考

ldt0621的博客 1万+

打造炫酷的Proxmox VE 监控界面

打造炫酷的Proxmox VE 监控界面 今天终于把Proxmox VE(简称PVE)从6.1版本升级到PVE 6.4版本,在Web管理后台对比PVE 6.4与 PVE 6.1,看新增哪些功能?在数据中心的菜单项里,多了一个度量服务器(Metric Server),中文显示“公制服务器”,翻译得怪怪的。 挡不住好奇,点进去看看,原来是添加远程数据统计服务器InfluxDB或者Graphite。 既然可以添加InfluxDB,那么在此基础上,整合Grafana,岂不是可以打造一个很炫酷的PV

linux硬派运维 6954

【亲测免费】 探索Proxmox虚拟环境的温度监控新境界 —— pve-mods项目深度解析

探索Proxmox虚拟环境的温度监控新境界 —— pve-mods项目深度解析 在数据中心管理和运维的领域里,细节决定成败。今天,我们来探索一款为Proxmox Virtual Environment(简称PVE)量身定做的开源增强工具——pve-mods,它将为您的服务器管理带来革命性的可视化温度监控体验。 项目介绍 pve-mods,是一个创新项目,其核心目标在于整合lm-sensors的强大...

gitblog_00079的博客 1758

新手小白用PVE安装部署自己的家庭网络服务器1--PVE的安装和优化设置

NAS是什么?看上去是不是很高端?但其实大可不用感觉有多复杂。在我看来,对于大多数新手来说,没有大容量和重要文件资料存储的情况下,NAS就是一台可以7*24小时专为自己服务的家庭服务器。它可以有很多功能,可以是你的家庭“科学”网关、可以是你的下载器、文件共享服务器等等。一台机器,实现多种不同系统的功能。本人也是一个新手玩家,做这个文章一方面记录一下自己部署家庭服务器的过程,一方面也希望可以通过一个新手的角度,帮助到更多刚入坑或者想入坑的朋友。

莫若天穹的博客 1万+

PVE8最新安装使用指南、优化Proxmox VE 8.1

Proxmox ve(PVE)安装、优化教程

Dd_w606的博客 1万+
上一篇: PVE的优化与温度监控(二)—可移动硬盘盒无法显示信息的解决方案(一)
下一篇: PVE的优化与温度监控(二)—无法识别移动硬盘S.M.A.R.T信息的思考并解决
KeyboardKillers
博客等级 码龄9年 8419粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值