vue自定义提示框组件

Vue 自定义文字提示框 本文主要展示一个自定义文字提示框的具体代码,以及对应效果展示 阅读详情

不想要elementui的消息提示,自定义一个组件系统统一使用
一、写页面
vue (我放的目录是src/plugins/message.vue)(这里面使用elementui 里面icon 需要单独引入)

<template>
  <Transition name="down">
    <div>
      <!-- 成功显示 -->
      <div class="message_block message_sussess" v-if="type=='success'">
        <div class="message_icon sussess_text">
          <el-icon>
            <SuccessFilled />
          </el-icon>
          <i class="iconfont icon-warning"></i>
        </div>
        <div class="message_text sussess_text">{{text}}</div>
      </div>
      <!-- 失败显示 -->
      <div class="message_block message_error" v-else>
        <div class="message_icon error_text">
          <el-icon>
            <Close />
          </el-icon>
          <i class="iconfont icon-warning"></i>
        </div>
        <div class="message_text error_text">{{text}}</div>
      </div>
    </div>
  </Transition>
</template>
<script>
import { ref } from 'vue'
import { ArrowDown, SuccessFilled, CloseBold, Close } from "@element-plus/icons-vue";
export default {
  name: 'Message',
  props: {
    type: {
      type: String,
      default: 'success'
    },
    text: {
      type: String,
      default: '保存成功'
    }
  },
  components: {
    ArrowDown, SuccessFilled, CloseBold, Close
  },
}
</script>
<style scoped lang="scss">
.down {
  &-enter {
    &-from {
      transform: translate3d(0, -75px, 0);
      opacity: 0;
    }
    &-active {
      transition: all 0.5s;
    }
    &-to {
      transform: none;
      opacity: 1;
    }
  }
}
.message_block {
  width: 194px;
  min-height: 191px;
  height: auto;
  position: fixed;
  z-index: 9999;
  left: 53%;
  margin-left: -150px;
  top: 20%;
  padding: 0 25px;
  border: 1px solid #e4e4e4;
  border-radius: 8px 8px 8px 8px;

  padding-bottom: 10px;
  i {
    margin-right: 4px;
    vertical-align: middle;
  }
  .text {
    vertical-align: middle;
  }
  .message_text {
    font-size: 18px;
    text-align: center;
    overflow: hidden;
    margin-top: 16px;
  }
  .message_icon {
    text-align: center;
    margin-top: 29px;
    height: 70px;
    svg {
      width: 70px;
      height: 70px;
    }
  }
}

.message_sussess {
  background: linear-gradient(180deg, #ecfff4 0%, #ffffff 75%);
  box-shadow: 0px 0px 20px 0px rgba(93, 134, 116, 0.2);
  .sussess_text {
    color: #2ec081;
  }
}
.message_error {
  background: linear-gradient(180deg, #f193a4 0%, #ffffff 75%);
  box-shadow: 0px 0px 20px 0px rgba(204, 36, 36, 0.2);
  .error_text {
    color: red;
  }
}
</style>


js: (目录:src/plugins/message.js)

// 提供一个能够显示Message组件的函数
// 这个函数将来:导入直接使用,也可以挂载在vue实例原型上

import { createVNode, render } from "vue";
import MessageVue from "./message.vue";

// DOM容器
const div = document.createElement("div");
div.setAttribute("class", "xtx-msssage-container");
document.body.appendChild(div);

// 定时器标识
let timer = null;
let showTime = 3000;
export default ({ type, text, time }) => {
  // 渲染组件
  // 1. 导入消息提示组件
  // 2. 将消息提示组件编译为虚拟节点(dom节点)
  // createVNode(组件,属性对象(props))
  const vnode = createVNode(MessageVue, { type, text, time });
  if (time) {
    showTime = time;
  }
  // 3. 准备一个装载消息提示组件的DOM容器
  // 4. 将虚拟节点渲染再容器中
  // render(虚拟节点,DOM容器)
  render(vnode, div);
  // 5. 3s后销毁组件
  clearTimeout(timer);
  timer = setTimeout(() => {
    render(null, div);
  }, showTime);
};

二、注册
① 挂在全局
src/plugins/index.js

import tab from "./tab";
import auth from "./auth";
import cache from "./cache";
import modal from "./modal";
import download from "./download";
import messageVue from "./message";//引入js

export default function installPlugins(app) {
  // 页签操作
  app.config.globalProperties.$tab = tab;
  // 认证对象
  app.config.globalProperties.$auth = auth;
  // 缓存对象
  app.config.globalProperties.$cache = cache;
  // 模态框对象
  app.config.globalProperties.$modal = modal;
  // 下载文件
  app.config.globalProperties.$download = download;
  app.config.globalProperties.$messageVue = messageVue;//设置名称
}

(检查main.js 是否引入使用plugins/index.js、没有引入记得加入这两句)

import plugins from "./plugins"; // plugins
app.use(plugins);

三、使用
① vue文件使用

const { proxy } = getCurrentInstance();
//完成使用 type值有error和success默认success。time默认30000 这两个都选传
proxy.$messageVue({  text: '保存成功' })
//完成使用:
proxy.$messageVue({ type: 'error', text: res.message,time:2000 })

② js使用
我们是接口返回报错也统一使用这个提示弹窗
所以在request.js里面

import messageVue from "@/plugins/message.js";
//使用
messageVue({ type: "error", text: msg });
vue -提示框组件的封装 1、效果图: 2、子组件的封装 <template> <div class="toast" v-if="toastStatus"> <span class="desc">{{tips}}</span> </div> </template> <script> export default { n... 阅读详情

相关推荐

VUE 自定义弹框(确认框,提示框,列表框)

1。自定义确认框和提示框 根据传入的type来判断是确认框或提示框 <template> <transition name="confirm-fade"> <div v-if="isShowConfirm" class="my-confirm" @click.stop="clickFun('clickCancel')"> <div class="confirm-content-wrap" @click.stop>

liuye066的专栏 1万+

Vue消息提示框的使用

组件实例的$createElement属性是一个具有特殊功能的函数,作用与渲染函数的第一个参数相同,用来定义虚拟节点。第二个参数是几点元素的属性配置,例如class,style等等。第一个参数,为标签,即创建的节点元素的标签是什么。对话框内容的字体将会变成了绿色。dom元素上多了class属性。第三个元素是节点元素的内容。

Cool_Cool_123的博客 2275

Vue自定义组件:弹窗、输入框、提示框实战教程

在现代Web应用中,弹出框组件是用户交互的一个核心元素。Vue作为一种流行的前端JavaScript框架,提供了创建自定义组件的能力,这使得开发者可以构建出既美观又功能强大的弹出框组件来提升用户体验。自定义弹出框组件不仅可以实现标准的模态窗口功能,还可以扩展至复杂的表单验证、信息提示甚至集成第三方服务。设计Vue自定义弹出框组件时,首先需要考虑的是其可扩展性和灵活性。这意味着组件应当能够适应不同场景的需求,如表单输入、图片预览、确认操作等,并提供定制化的配置选项。

weixin_35829279的博客 1150

Vue2通知提醒框(Notification)

全局展示通知提醒信息,在系统四个角显示通知提醒信息。

Vue Amazing UI(Vue3 + TypeScript + Vite)组件库唯一开发维护者 1万+

WRF中使用ERA5再分析数据

   本人在做一些实例时,需要用到最新的ERA5再分析数据集,其中我下载的是ERA5 hourly data on pressure levels form 1979 to present和ERA5 hourly data on single levels from 1979 to present中的3天数据。 1、注册climate copernicus账号 下载ERA5数据前先要注册其账号 2、选择变量    WRF中对于气象数据的字段有具体的要求, ......

GIS 8172

SPSS_Process—简单&平行&链式中介模型

本篇文章介绍采用SPSS的插件Process对简单中介、链式中介、平行中介模型进行检验的操作方法及结果解读。

m0_54401011的博客 4万+

vue 弹出消息框

利用antd vue控件的静态方法得到想要的消息框,并确定在什么位置上弹出

qiulei_21的专栏 1913

实战指南:在UE5中高效集成Entt(ECS)框架

本文提供了一份在虚幻引擎5中高效集成Entt ECS框架的实战指南。针对UE5项目在处理大规模动态实体时的性能瓶颈,详细讲解了如何通过数据驱动的ECS架构进行优化。内容包括前期环境准备、核心构建步骤、创建首个ECS子系统以及与UE原生系统的数据同步技巧,旨在帮助开发者快速掌握集成方法,提升游戏逻辑的执行效率。

weixin_29002209的博客 158

vue自定义全局弹出询问框、输入框、提示框、toast(附源码)

早前写过一篇关于vue自定义弹出询问框、输入框、提示框的贴子,当时只是实现了组件化,组件需要在各个业务模板进行引用,不能全局化使用,不太方便,本次将其改进成了全局使用,具体的业务模块不需要引入组件,直接调用main.js注册的全局方法即可。遮罩层样式,自定义组件,子组件套用组件,子组件调用父组件方法,组件属性监听,输入框默认获得焦点,输入框数据双向绑定、组件注册。

gdgztt的专栏 6026

Cadence16.6安装教程

如需安装所需的软件,请到文章末尾处查看 安装步骤: 安装前先关闭杀毒软件和360卫士,注意安装路径不能有中文,安装包路径也不要有中文。 试装系统:win10 64bit 1.解压安装包(共5个压缩包,每个都要解压) 2.以管理员身份运行安装程序。 3.选择License Manager。 4.点击NEXT。 5.选择I accept,然后点击NEXT。 6.选择License Manage...

谢谢关注“小鱼教你模数电”,各平台同号 8万+

提升JVM性能:CMS垃圾回收器的优化分析与案例研究

本文介绍了CMS(Concurrent Mark-Sweep)垃圾回收器的工作原理、优缺点及常见问题,并通过具体案例分析了其优化策略。重点探讨了CMS的各个阶段,包括标记、并发清理和重标记,分析了可能导致性能瓶颈的因素如停顿时间过长和内存碎片化。文章还分享了调整垃圾回收参数、结合其他垃圾回收器以及内存优化等方法,帮助提高CMS的回收效率和性能。最后,文章展望了随着JVM发展,结合新一代垃圾回收器优化的趋势,助力Java应用在高并发环境下的性能提升。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 175万+

vue2.0 自定义 提示框(Toast)组件

1.自定义 提示框 组件 src / components / Toast / index.js /** * 自定义 提示框( Toast )组件 */ var Toast = {}; var showToast = false, // 存储toast显示状态 showLoad = false, // 存储loading显示状态 toastVM = null, // 存储toast ...

weixin_33712987的博客 2208

OpenHarness代码解读

Harness 是包裹在大模型之外、为其赋予完整执行能力的全套基础设施。模型负责提供智能与推理,Harness 则为模型提供感知、行动、记忆、工具与安全约束,使其从语言模型变成可自主完成复杂任务的实用智能体。我这里把向量数据库方案定义为:把对话片段、事件、偏好、工具结果等切成 memory chunks,做 embedding,存进向量库,查询时靠 ANN 相似度召回,再交给 LLM 读。AAAI 的综述类论文就明确指出,很多 LLM agent 的长期记忆就是这么做的。AAAI 期刊把文件系统方案。

qq_52053775的博客 188

Vue爬坑之旅(十四):vue自定义全局提示框组件

1、写一个提示框组件: message.vue &lt;template&gt; &lt;div&gt; &lt;!-- 全局提示框 --&gt; &lt;div v-show="visible &amp;&amp; type==1" class="dialog-tips dialog-center"&gt; &lt;div

帆酱的博客 3894

【漏洞复现】Apache Tomcat远程代码执行漏洞(CVE-2024-56337)

CVE-2024-56337是一个存在于Apache Tomcat中的TOCTOU(Time-of-Check Time-of-Use)竞争条件漏洞。此漏洞源于对先前漏洞(CVE-2024-50379)的不完整修复。若默认servlet是可写的(参数readonly设置值为false,该设置为非默认设置)表示不区分大小写文件系统,在负载下并发读取和上传同一文件可以绕过Tomcat的大小写检查。攻击者可以通过构造恶意请求上传含恶意JSP代码的文件,使其触发解析并执行这些文件,从而导致远程代码执行。

李同學AI安全 3197

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Vue2.0自定义提示框组件(Toast)

原创 https://www.cnblogs.com/crazycode2/p/7927473.html 效果图 一 、全局引入 main.js // 全局引入Toast import './components/Toast/toast.css'; import Toast from './components/Toast/index'; Vue.use(Toast); 二、页面调用 T...

qq_095的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

vue 自定义 提示框(Toast)组件

1.自定义 提示框 组件 src / components / Toast / index.js /** * 自定义 提示框( Toast )组件 */ var Toast = {}; var showToast = false, // 存储toast显示状态 showLoad = false, // 存储loading显示状态 toastVM = null, //...

weixin_30902675的博客 606

深度学习工具包 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")

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

vue3和vue2挂载实例到全局(自定义消息提示框组件)

模仿ElementUI消息提示框

黎小小的博客 1983

vue2.0 自定义 提示框(Toast)组件

1.自定义 提示框 组件 src / components / Toast / index.js /** * 自定义 提示框( Toast )组件 */ var Toast = {}; var showToast = false, // 存储toast显示状态 showLoad = false, // 存储loading显示状态 toastVM = null, // 存储toast v...

DemonL的专栏 1161

vue自定义全局组件 - 提示框组件

组件挂载在Vue原型上,通过调用方法显示隐藏提示框,并定义了三种状态:加载、警告及成功 定义组件Toast.vue <template> <div class="toast-container" :class="{ 'toast-none-icon': icon=='none' }" v-if="show"> <template v-if="icon!=='none'"> <!-- 加载loading --> <

Jester的博客 1335

vue项目自定义提示框

<!-- 弹框 --> <template> <div :visible="visible" ref="tipsBox" @update:visible="updateDialog" class="tipsBox"> <div ref="showPopover" class="tipsClass animated"> <...

qq_38502227的博客 1289

vue 创建提示框公共组件

//vue自制提示框(借鉴别人的) //创建组件 <template> <div class="app-toast" v-if="isShow" :class="{ info: type === 'info', success: type === 'success', wraning: type === 'wraning', danger: type === 'danger' }" > {

qq_45558474的博客 304

vue 2.6 新建全局提示框组件

1.新建提示框组件文件 bl-tips.vue。有问题或者开发需求 请联系 ai_002。2.新建导入js文件 tips.js。3.在全局mian.js 中引入。

weixin_38984353的博客 437

一个vue的全局提示框组件

<template> <!-- 全局提示框 --> <div v-show="visible" class="dialog-tips dialog-center"> <div>{{message}}</div> </div> </tem...

weixin_30312557的博客 310
上一篇: js秒为单位做倒计时
下一篇: vue等获取当前页面的url网址
一个打工仔的笔记
博客等级 码龄6年 1904粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值