vue+element-ui Cascader 级联选择器 父级、子级 如何通过后端返回数据绑定其数据源呢且遇到无法选中值的问题解决办法?

vue+element UI 使用el-cascader实现全选功能 vue+element UI 使用el-cascader实现全选、半选、不选等功能 阅读详情

最终效果图如下:在这里插入图片描述

这里是后端返回的数据格式:
注释: 后端返回的json数据父级与子级必须要有层级关系
在这里插入图片描述
1. 通过后端返回数据绑定其级联数据源的值(父、子级同时展示 )

  html代码块
  <el-cascader v-model="consult.catalog"
   :options="options"
   :props="props"
   collapse-tags
   clearable>
    //自定义显示列
	<template slot-scope="{ node,data }">
		//显示的十大分类名称以及材料名称
	    <span>{{data.fileNumber}}、{{ data.fileType}}</span>
	</template>
</el-cascader>

js代码块

 data() {
    return {
      options:[],
      //poops 是用来绑定数据源的
      props: {
        multiple:true,          //这里设置为多选模式
        value: "id",
        label: "fileType",      //展示的lable名字
        children:"children"    //展示子级
      },
      consult: {
       catalog:[],//目录
      },
    }
}
methods:{
     list(){
	     request({
	        url: '/borrower/queryCatalog',
	        method: 'get',
	        params: {
	          eid: this.consult.browerid,
	          pid: this.consult.Brotype
	        }
	      }).then(res => {
	        if (res.data.code == 200) {
	          //给options进行赋值
	          this.options = this.getTreeData(res.data.data);
	          console.log('this.options', this.options );
	        } else if (res.data.code == 201) {
	          this.options = []
	        } else {
	          this.$message({message: '接口异常!', type: 'error'})
	        }
	      })
     },
     //递归判断列表,把最后的children设为undefined
     getTreeData(data){
      for(var i=0;i<data.length;i++){
        if(data[i].children.length<1){
          // children若为空数组,则将children设为undefined
          data[i].children=undefined;
        }else {
          // children若不为空数组,则继续 递归调用 本方法
          this.getTreeData(data[i].children);
        }
      }
      return data;
    },
}

1.到这里会出现问题bug: el-cascader控件 最后一级出现空白 暂无数据的解决方法
在这里插入图片描述我这里是用递归来进行实现的,可以看上方代码块的 this.getTreeData()这个方法就可以,使用之后你就会发现期待的效果图已经实现啦!

element-ui 级联选择器cascader动态加载的问题 前段时间项目里有一个树状单位结构的需求,第一反应就是用elementui里的cascader 级联选择器来做。 本来以为是通过接口直接获取到所有单位树后配置一下就可以了,看了需求文档后发现原来是要通过动态加载的方式来获取。 需求: 1.进入页面之后根据当前的单位Id调用第一个接口来获取第一级的单位,并默认展示。 2.如果当前单位有下级单位则显示箭头,点击调用第二个接口获取下级单位。 很快啊,看着elementui官方文档,写了一个简单的demo,如下: <template> <di 阅读详情

相关推荐

Element UI级联选择器el-cascader数据绑定与回显实战指南

在Vue.js前端开发中,表单组件的数据绑定是核心基础。级联选择器作为处理层级数据(如省市区、商品分类)的常用组件,其数据流动机制涉及v-model双向绑定、props配置映射等关键概念。理解组件内部的数据契约(即v-model绑定的是由各级节点value组成的路径数组)是解决实际问题的技术关键,这直接关系到表单提交、数据回显等工程实践场景的稳定性。本文聚焦Element UI的el-cascader组件,通过剖析其数据绑定原理,结合change事件应用、懒加载优化等热词,系统讲解如何正确处理值的获取与设置

weixin_29007135的博客 326

记: vue element Cascader 级联选择器 子级全选则传父级, 子级未全选则传子级

在思否一位大佬的评论中学到的, 但是忘记在哪个帖子了… 需求: 级联选择器中 子级全选则传父级key, 子级未全选则传子级key element Cascader 级联选择器 中有一个方法: getCheckedNodes() let CheckedNodes = this.$refs.region.getCheckedNodes() CheckedNodes = CheckedNodes.filter(option => !(option.parent && option.pa.

weixin_45945615的博客 7782

别再手动拼接下拉框了!Element UI el-cascader 级联选择器实战避坑指南

本文详细解析了Element UI中el-cascader级联选择器的实战应用与优化技巧,帮助开发者告别手动拼接下拉框的低效做法。通过对比传统多选下拉框方案,展示el-cascader在代码精简、功能扩展和维护便利性上的优势,并提供动态加载、搜索优化等高级用法,助力提升后台管理系统开发效率。

weixin_30376083的博客 441

elementui Cascader 级联选择使用心得

Element cascader遇到的问题

codingLeader的博客 4620

ElementPlus级联选择器避坑指南:解决el-cascader单选多选混合使用的常见问题

本文深入解析了ElementPlus级联选择器el-cascader在实现‘一级单选、二级多选’混合模式时遇到的常见问题与挑战。通过对比事件拦截过滤与利用checkStrictly自定义模型两种核心方案,提供了清晰的解决思路、实战代码示例及性能优化技巧,并最终指导如何将其封装为可复用的HybridCascader组件,帮助开发者高效避坑。

uran的专栏 889

【Vue3 第十五章】组件中的双向绑定

组件中的双向绑定、参数、修饰符

前端知识分享喵 5547

Element-UI中Cascader 级联选择器使用

Element-UI的级联组件官方文档 <el-cascader v-model="value" :options="options" :props="{ expandTrigger: 'hover' }" @change="handleChange"></el-cascader> 说明: options:绑定数据源 props:数据配...

caicsama的博客 5949

vue运用之el-cascader组件

el-cascader 是 Element UI 的级联选择器组件。以下是一些常见的 el-cascader 问题以及对应的案例代码。

日常笔记/总结/系列知识梳理 1674

Element级联选择器Cascader使用(保存、回显)

环境 版本 idea 2020.1 Element-UI 2.13.2 vue 2.6.11 官方文档 https://element.eleme.cn/#/zh-CN/component/cascader 业务场景 业务需求要给设备选择存放位置,用select做四级联动比价麻烦,选择用级联选择器。后端表结构分为库房、库区、存放区、存储位置四个字段存储,所以前端需要处理一下。 整合 主要部分代码 v-model 回显数据源(设置默认值) :...

真是适合睡觉的天气 7371

麒麟V10 ARM环境离线部署MySQL:从依赖缺失到服务自启的完整避坑指南

本文详细介绍了在麒麟V10 ARM环境下离线部署MySQL的完整流程,包括依赖缺失解决方案、目录配置、服务自启设置及性能调优。特别针对国产操作系统和ARM架构的兼容性问题,提供了实用的避坑指南和优化建议,帮助用户高效完成MySQL部署与维护。

weixin_28741413的博客 409

从零搭建风电场:手把手教你用WAsP+WindPRO完成风资源评估全流程

本文详细介绍了从零开始搭建风电场的全流程,重点讲解如何使用WAsP和WindPRO进行风资源评估和风场布局优化。内容包括软件配置、数据采集规范、风图谱建模实战、机组选型策略以及常见问题解决方案,帮助工程师掌握风电开发的核心技术,提升项目成功率。

year5的博客 371

Element UI级联选择:Cascader多级联动选择器

Element UI级联选择器(Cascader)是一个功能强大的多级联动选择组件,特别适用于处理具有清晰层级结构的数据集合。本文将深入探讨Cascader组件的核心功能、实现原理、使用技巧以及高级应用场景,帮助开发者充分发挥其在实际项目中的价值。 ## 组件概述与核心价值 Cascader组件通过层级展示和联动选择的方式,解决了传统下拉选择器在处理多级数据时的局限性。它允许用户从多层级选项中...

gitblog_00496的博客 1212

5款免费二进制编辑器横向评测:从HxD到ImHex谁更适合你?

本文对5款免费二进制编辑软件进行深度横向评测,包括HxD、wxHexEditor、010 Editor、ImHex和GNU Emacs,涵盖从轻量级到专业级的各种需求。评测基于文件处理能力、编辑功能、分析工具等核心维度,为开发者、逆向工程师和安全研究人员提供实用选择指南,帮助用户根据具体场景选择最适合的二进制编辑工具。

weixin_29278805的博客 371

element ui更新后 Cascader 级联选择器的一些问题

问题如下: 1、选择器选择后不能自动收回 2、父子节点不关联选择时,label之前出现圆圈 3、点击label不能起作用,必须点击前面的圆圈 同问题二的图 解决方案: 1、问题1解决方案个人发现与其他博主的方案不太一样,解释如下: 在cascader 标签上加一个 :key来标记,并且不断更新该key值,代码如下: <el-cascader v-model="selectedKeys" :key="cascaderKey" :options="p

nie_daniel的博客 1658

Mininet 2.2.1 图形可视化界面使用注意事项

前言 关于mininet的安装,网上教程不少,大致可以参考以下这篇文章: https://blog.csdn.net/linyixiao88/article/details/65651390 安装的时候,也可以不必根据上面这篇文章这么麻烦,直接sudo apt-get install mininet,即可。 Mininet可视化 Mininet 2.2.0以上版本内置了...

裕东方的博客 4191

基于Python的信用卡欺诈检测机器学习案例报告

当今时代,在线支付已成为一种高效便捷的支付方式,我们可以突破时间和空间的限制,输入我们的信用卡各项信息就可以完成在线支付。但随之而来的是这种支付方式也具备一定的风险性,我们无法辨别对方是否是恶意套取我们资金的非法分子。当信用卡信息数据泄露导致金钱失窃并最终失去客户忠诚度和公司声誉时,组织、消费者、银行和商家都会面临风险。2017 年,未经授权的信用卡操作达到了惊人的 1670 万受害者。此外,据美国联邦贸易委员会 (FTC) 报告,2017 年信用卡欺诈索赔数量比上一年高出 40%。

weixin_45673389的博客 6693

element-UI级联选择器(Cascader)获取label值

<el-cascader ref="cascaderAddr" :options="addressOptions" change-on-select v-model="form.areaCode" @blur="handleAddressFun" ></el-cascader> <script> const thsAreaCode='' // 拼接 三级联动地址代码 // 三级地址选择 handleAddressFun: function(e,for.

weixin_55959870的博客 3211

人工智能发展史(从起步到磅礴)以及浪潮阶段

随机森林是将多个有差异的弱学习器(决策树)Bagging并行组合,通过建立多个的拟合较好且有差异模型去组合决策,以优化泛化性能的一种集成学习方法。从论文里可以了解到,GPT-1具有1.17个参数,采用了12层的Transformer 解码器结构,使用5GB的无标注文本数据,在8个GPU上训练了一个月,然后再进行人工监督的微调。训练相结合的理念(该方法在当时计算力上还是有很多挑战,基本上都是和链式求导的梯度算法相关的),这也解决了单层感知器不能做非线性分类的问题,开启了神经网络新一轮的高潮。

xiao77224li的博客 7505

vue-pure-admin级联选择器:Cascader多级联动选择

还在为复杂的多级数据选择而烦恼吗?vue-pure-admin基于Element Plus的Cascader组件,提供了强大的多级联动选择功能,从简单的省市区选择到复杂的业务数据层级选择,都能轻松应对。本文将深入解析vue-pure-admin中Cascader组件的使用技巧和最佳实践。 ## 为什么选择Cascader级联选择器? 在多级数据选择场景中,传统的下拉选择器往往显得力不从心。Ca...

gitblog_00889的博客 965

Python爬虫实战:全自动采集银行理财产品收益率数据

本文通过Playwright动态爬虫技术,成功实现了对银行理财产品收益率数据的实时采集,并通过 Pandas 数据清洗、SQLite 存储、调度自动化等模块,构建了一个可扩展的银行理财数据抓取系统。理财非儿戏,数据做决策。掌握银行收益信息是我们迈向理性投资的第一步。希望这套工具对你有所帮助!

2201_76125261的博客 1155

SKUA-GOCAD入门教程-第六节

DisplayElements窗口是用于浏览和处理项目数据的工具,包含多个数据浏览器,如模型列表、对象、未分类对象、属性数据及资源数据。

江洋大葱的博客 983

element ui级联选择器props的配置

为什么要配置el-cascader的props? 如果配置了这个选项,请求回来的数据,根本不用你去递归处理,只需要把响应的数据赋值给数据源cateList 代码如下: <el-cascader v-model="cateValue" :options="cateList" :props="cateListProps" > </el-cascader> data中: cateList: [], //数据源 cateListProps:

weixin_38547641的博客 6312

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Element-ui中Cascader级联选择props配置项

<el-cascader v-model="addForm.goods_cat" :options="cateList" :props="cateProps" @change="handleChange" ></el-cascader> cateProps:{ expandTrigger: 'hover', label:'cat_name', value:'cat_id', .

Allurewuhui的博客 3343

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

彻底解决Element-UI el-cascader数据回显失败:原理、场景与实战

在Vue.js前端开发中,表单数据回显是构建编辑功能的基石,它直接关系到数据绑定与视图同步的准确性。其原理在于,前端框架通过响应式系统,将模型数据映射到视图组件,当数据变更时自动更新UI。这一机制的技术价值在于提升开发效率与用户体验,确保数据状态的一致性。在实际应用场景中,级联选择器这类复杂表单组件的数据回显尤为关键,尤其是在处理树形结构数据时。本文聚焦于Element-UI的el-cascader组件,针对其常见的回显失败问题,深入剖析了由**数据异步加载**时机不当和**v-model绑定值**与opt

weixin_34315485的博客 500

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Error in callback for watcher "options": "TypeError: Cannot read property 'level' of null TypeError

弄了一个动态cascader级联选择器,发现切换数据源的时候报错,网上看到这个文章完美解决https://blog.csdn.net/weixin_43043994/article/details/100303097 问题怎么出现的上面文章写的很清楚,解决方法就是重新加载组件。两个方法一个加v-if,一个加key <template> <el-cascader ...

小码蚁 2万+

Element-UI级联选择组件的默认值回显问题

这篇文章主要向大家介绍Element-UI级联选择组件的默认值回显问题,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。 Element-UI级联选择器Cascader,经过v-model保存选择项的值,数据类型为数组,数组元素为所选不一样级别选项的值。Vue示例代码以下:html html部分: <el-cascader v-model="editForm.goods_cat" :options="cateList" :props="props" @change="handleC

白菜的博客 1717
上一篇: vue el-date-picker组件 选中时获取当前日期时间带时分秒
下一篇: Vue中的发射事件:this.$bus.$emit与监听事件:this.$bus.$on
猫巷·
博客等级 码龄7年 1290粉丝 42原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值