Vue2图片输入框组件 - vueimginputer实战指南

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:Vueimginputer是一个基于Vue.js 2的组件库,旨在简化Web应用中的图片上传和预览功能。该组件允许开发者创建可复用的图片输入框,通过定义好的模板、数据、方法和生命周期钩子等来轻松处理图片上传和展示。本实战指南将介绍如何通过Vueimginputer组件实现图片上传,包括组件的安装、注册、属性配置和事件监听,以及如何通过源代码和示例项目来快速理解和上手。
Vue2

1. Vue.js介绍

1.1 Vue.js概述

Vue.js 是一套用于构建用户界面的渐进式JavaScript框架,以数据驱动和组件化的思想为基础。它易于上手,同时保持足够的灵活性和扩展性,使得开发者可以逐步引入更多的功能。

1.2 核心特性

  • 响应式 : Vue的双向数据绑定使得数据更改能够立即反映到视图上。
  • 组件化 : 通过独立的组件构建复杂的界面,使得代码更易于维护。
  • 虚拟DOM : 通过高效的DOM更新机制,提高渲染效率。

1.3 Vue.js版本与社区

Vue.js经历了多个版本的迭代,从1.x到2.x再到未来的3.x,每一个新版本都在性能和易用性上有所提升。其活跃的社区和丰富的插件生态系统,使得Vue.js应用的开发更加高效。

随着章节的深入,我们将探讨Vue.js的更多高级功能,以及如何将这些功能应用于实际开发中。

2. Vueimginputer组件功能

2.1 组件设计理念

2.1.1 满足图片输入需求的必要性

在现代Web应用中,图片输入是一个普遍存在的需求。用户需要上传图片进行分享、保存、编辑或进行其他形式的数据处理。Vueimginputer作为一个专门为Vue.js框架打造的图片输入组件,其设计初衷就是为了提供一个简便、直观且功能丰富的图片处理接口。通过构建这样的组件,开发者可以在其Vue.js项目中轻松实现图片的上传、预览和编辑等功能,从而提升用户体验并加速开发过程。

2.1.2 用户界面与体验优化

用户体验是产品成功与否的关键因素之一,而组件的用户界面设计又是影响用户体验的重要组成部分。Vueimginputer在设计过程中,特别注重简洁和直观的交互设计,以提供流畅的用户体验。它支持拖放上传、直观的图片预览以及多种图片编辑工具,从而降低用户操作的门槛,并减少用户的学习成本。这样,即使是对于非技术背景的用户,也可以轻松地进行图片输入操作。

2.2 组件功能特点

2.2.1 多格式图片支持

在多格式图片支持方面,Vueimginputer不仅支持常见的图片格式如JPEG、PNG、GIF等,还可以通过配置支持更多格式,使得组件的适用场景更加广泛。为了确保图片能够在不同浏览器和设备上正确显示,组件内置了相应的文件类型检测机制。当用户尝试上传不被支持的格式时,组件会给出清晰的提示信息,引导用户选择正确的图片文件,避免上传过程中可能出现的错误。

2.2.2 便捷的图片上传操作

为了提升上传效率和用户体验,Vueimginputer提供了一个简洁的上传界面,用户可以直接从文件系统拖拽图片到指定区域进行上传,或通过点击上传按钮选择文件。该组件支持上传进度显示,并且当上传多个文件时,用户可以实时监控每张图片的上传状态。这样的设计不仅提高了上传效率,同时也为用户提供了更为直观的交互体验。

2.2.3 图片预览与编辑功能

图片预览功能允许用户在上传图片之前查看图片内容,这有助于用户确保所选图片为所需内容。Vueimginputer支持多图片预览,用户可以快速浏览整个图片库,以便选择或删除不需要的图片。此外,该组件还提供了基本的图片编辑工具,如裁剪、旋转和调整图片大小等。这些工具的集成,使得用户可以在不离开当前页面的情况下对图片进行初步处理,大幅提升了工作效率和使用便捷性。

2.2.4 表格展示组件功能参数

功能 描述 兼容性
拖放上传 支持用户拖拽文件直接上传
文件类型检查 检查上传文件是否符合预设格式
上传进度显示 显示当前上传进度
多文件上传 同时上传多个图片文件
图片预览 在上传前预览图片内容
图片编辑工具 提供基础的图片裁剪、旋转和调整大小功能

2.2.5 代码块展示组件配置方法

// 引入Vueimginputer组件
import Vueimginputer from 'vueimginputer';

export default {
  components: {
    Vueimginputer
  },
  methods: {
    handleUpload(file) {
      // 处理上传逻辑
      console.log('开始上传文件:', file);
      // 伪代码,实际需要调用后端API进行上传
      // uploadApi.uploadFile(file);
    }
  }
};

在以上代码块中, Vueimginputer 组件被引入并注册到Vue实例中。之后,可以在模板中使用该组件,并通过 handleUpload 方法处理文件上传逻辑。组件内部会对文件进行检查,并触发相应的事件,以便开发者在调用后端API之前进行适当的处理。

3. Vue组件结构与特性

3.1 模板定义

3.1.1 HTML模板的基本构成

Vue.js 使用基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定到底层 Vue 实例的数据。模板是 Vue 组件的核心之一,它通过简单的插值表达式和指令,将组件的数据以直观的方式展示在页面上。

<div id="app">
  <h1>{{ message }}</h1>
  <input v-model="message">
</div>

上述代码中的 {{ message }} 是一个插值表达式,它将文本节点和数据对象中的 message 属性双向绑定。 v-model 是 Vue 的一个指令,用于在表单元素上创建双向数据绑定。

3.1.2 模板中的数据绑定和事件绑定

数据绑定是 Vue.js 的核心特性之一,它让数据和视图之间的关系保持动态和同步。在模板中绑定数据时,可以使用不同的语法:

  • 插值表达式 {{ }} :用于文本插值,将数据的值显示在 DOM 中。
  • v-bind 指令:用于属性绑定,动态绑定 HTML 属性到数据属性上。
  • v-model 指令:用于表单元素的双向绑定,适用于输入、选择、文本区域等。

事件绑定使用 v-on 指令,可以监听 DOM 事件并运行一些 JavaScript 代码。简写为 @ 符号。

<button v-on:click="increment">Add 1</button>

以上代码表示,当按钮被点击时,会触发 increment 方法,该方法应当在 Vue 实例的 methods 选项中定义。

3.2 数据管理

3.2.1 Vue的响应式数据原理

Vue.js 的响应式系统是基于 ES5 的 Object.defineProperty 方法。这个方法允许我们在对象上定义新的属性,并为这些属性提供 getter 和 setter。Vue 利用这些 getter 和 setter 来追踪依赖,并在属性变化时派发更新。

Object.defineProperty(obj, 'newKey', {
  get: function() {
    return value;
  },
  set: function(newValue) {
    value = newValue;
    // 触发更新
  }
});

当数据对象 obj newKey 属性被访问时, getter 会被调用,当它被修改时, setter 会执行。Vue 使用这个机制来观察数据对象的变化,并且做出相应的 DOM 更新。

3.2.2 组件内部状态的管理策略

在 Vue.js 中,每个组件都有自己的作用域,并且有自己的数据、计算属性和方法。组件内部状态的管理,可以遵循以下策略:

  • 数据封装 :组件应当保持其数据的私有性,这意味着组件的数据应当定义在其 data 函数中。
  • 计算属性 :使用计算属性来处理复杂的逻辑,并且根据依赖进行缓存。
  • 方法 :在组件的 methods 对象中定义方法,用以封装需要的操作。
  • 状态管理插件 :对于跨组件的状态共享,可以使用 Vuex 等状态管理库。

3.3 方法编写

3.3.1 JavaScript在Vue中的应用

Vue.js 提供了强大的 JavaScript 集成,使得开发者可以利用 JavaScript 的功能来增强 Vue 组件。你可以在组件的 methods 中定义方法,并在模板中通过 v-on 指令调用。

var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  },
  methods: {
    reverseMessage: function () {
      this.message = this.message.split('').reverse().join('');
    }
  }
});

在上述示例中,我们定义了一个 reverseMessage 方法,它将数据中的 message 反转。在模板中,可以使用 {{ }} v-on 来引用或调用这个方法。

3.3.2 自定义方法的实现与调用

实现 Vue 组件中的自定义方法时,应遵循以下最佳实践:

  • 方法命名清晰 :确保方法名有意义,能够反映其功能。
  • 单一职责原则 :每个方法应当只负责一个功能。
  • 方法复用 :在多个地方使用相同逻辑时,考虑抽离成方法。
  • 作用域访问 :注意 Vue 实例中的 this 上下文,确保方法可以正确访问数据和其他方法。
methods: {
  updateMessage: function (newMessage) {
    this.message = newMessage;
  }
}

在模板中,你可以这样调用 updateMessage 方法:

<input v-model="messageInput" @keyup.enter="updateMessage(messageInput)">

上述代码表示,当输入框中的内容通过回车键确认时,会调用 updateMessage 方法更新 message

3.4 生命周期钩子应用

3.4.1 各生命周期钩子的时机和作用

Vue 实例有一个完整的生命周期,每个实例从创建到销毁都会经历一系列的生命周期钩子。这允许开发者在不同阶段添加代码,例如初始化数据、挂载实例到 DOM、更新数据、销毁实例等。

以下是一些常用的生命周期钩子:

  • created :实例创建完成后立即调用。在这一步,实例已完成数据观测 (data observer),属性和方法的运算, watch/event 事件回调。
  • mounted :实例被挂载到 DOM 上后调用。
  • beforeDestroy :实例销毁之前调用。在这一步,实例仍然完全可用。
var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  },
  created() {
    console.log('实例创建完成');
  },
  mounted() {
    console.log('实例已挂载');
  },
  beforeDestroy() {
    console.log('实例即将销毁');
  }
});

3.4.2 钩子中数据处理和DOM操作的实践

在 Vue 的生命周期钩子中进行数据处理和 DOM 操作时,要注意以下几点:

  • 数据操作时机 :在 created mounted 中进行数据处理,可以确保数据的正确性。
  • DOM 操作 :在 mounted 钩子之后操作 DOM,因为这时 Vue 已经完成 DOM 的插入和更新。
mounted() {
  // DOM 已经准备好
  this.$nextTick(function() {
    // 修改 DOM 或访问 DOM 元素
  });
}

this.$nextTick 是 Vue 提供的实例方法,用于在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。

请注意,这只是一个章节的一部分内容。根据你的要求,整个第三章的输出内容需要2000字以上,而第三章下的每个二级章节(如本示例中的3.1模板定义和3.2数据管理)需要1000字以上。在提供完整的章节内容时,请确保遵循这样的字数要求,以及章节的连贯性和深度。

4. Vueimginputer组件使用方法

4.1 安装与注册

4.1.1 介绍npm和yarn包管理器

在Vue项目中,npm(Node Package Manager)和yarn是两种常用的包管理工具,它们用于安装和管理项目依赖。npm是Node.js自带的包管理器,而yarn是一个快速、可靠和安全的依赖管理工具。

使用npm时,依赖信息会被保存在 package.json 文件中,通过 npm install 命令自动安装这些依赖。npm的更新机制为补丁升级(~)和版本升级 (^)。

yarn具有更快的安装速度,通过锁文件 yarn.lock 确保项目依赖的版本一致。使用yarn时,依赖信息同样会被保存在 package.json 中,但会通过 yarn add 命令安装依赖。yarn的添加指令与npm略有不同,例如直接安装依赖模块为 yarn add <package> ,而不是 npm install <package>

4.1.2 Vueimginputer的安装步骤

要在项目中安装Vueimginputer组件,你可以使用npm或yarn来完成。以下是如何使用两种包管理器安装Vueimginputer组件的详细步骤。

假设你正在使用npm,首先打开终端或命令提示符,然后在你的Vue项目根目录中运行以下命令:

npm install vueimginputer --save

安装完成后,在你的Vue组件中注册和使用Vueimginputer组件。首先,在组件的 <script> 标签中引入Vueimginputer:

import Vueimginputer from 'vueimginputer';
import 'vueimginputer/dist/vueimginputer.css';

export default {
  components: {
    Vueimginputer
  },
  // 其他组件选项...
};

确保在使用前已经安装了该组件。如果使用yarn,安装命令如下:

yarn add vueimginputer

安装依赖后,按照上述相同的方式在组件中引入和注册Vueimginputer。

4.2 属性配置

4.2.1 常用属性介绍和用法

Vueimginputer组件提供了一系列的属性,以满足不同的使用场景需求。以下是一些常用的属性及其介绍和用法示例。

  • v-model : 双向数据绑定,可以将选定的图片与组件的值关联起来。
    html <vueimginputer v-model="selectedImage"></vueimginputer>

  • multiple : 允许多选图片。

html <vueimginputer multiple></vueimginputer>

  • accept : 定义可以接受的图片格式。

html <vueimginputer accept="image/png, image/jpeg"></vueimginputer>

  • limit : 设置上传图片的数量限制。

html <vueimginputer limit="3"></vueimginputer>

4.2.2 高级配置项的详细说明

除了常用的属性,Vueimginputer还提供了一些高级配置项,帮助开发者更精细地控制组件的行为。这些配置项主要包括但不限于:

  • onFileSelected : 一个事件钩子,当文件被选中后触发,可以用来执行特定的逻辑。

javascript // 在组件中使用 onFileSelected methods: { handleFileSelected(files) { // 处理文件逻辑 } }

  • onUploadStart : 在图片上传开始时触发的事件。

javascript // 在组件中使用 onUploadStart methods: { handleUploadStart() { // 开始上传的逻辑 } }

  • onUploadSuccess : 图片上传成功后触发的事件。

javascript // 在组件中使用 onUploadSuccess methods: { handleUploadSuccess(response) { // 上传成功的逻辑处理 } }

4.3 事件监听

4.3.1 事件监听机制及应用场景

事件监听是Vue中非常重要的机制之一,它允许组件在特定时刻响应用户的操作或程序的某些变化。在Vueimginputer组件中,可以通过监听各种事件来实现更复杂的交互功能。

事件监听的机制包括事件绑定和事件处理函数的实现。对于Vueimginputer组件来说,常见的事件有:

  • change : 当用户选择文件后触发。
  • upload : 当文件开始上传时触发。
  • success : 当文件上传成功后触发。
  • error : 当文件上传出错时触发。

通过绑定这些事件,你可以实现例如上传进度条、错误处理、成功回调等场景。

4.3.2 典型事件处理函数的编写与调试

下面给出一个示例,展示如何为Vueimginputer组件编写和调试一个 change 事件的处理函数。

假设你希望在用户选择文件后立即显示一个提示信息:

<template>
  <vueimginputer @change="handleChange"></vueimginputer>
</template>

<script>
export default {
  methods: {
    handleChange(event) {
      const files = event.target.files;
      if (files.length > 0) {
        alert('文件已选择:' + files[0].name);
      }
    }
  }
};
</script>

在上面的代码中,我们绑定了 change 事件到 handleChange 方法,并在该方法内检查是否成功选择了文件。如果选择了文件,就使用 alert 函数显示一个弹窗提示信息。这是一个非常基础的事件处理应用。

你可以通过类似的方式为其他事件编写处理函数,并使用浏览器的开发者工具进行调试,确保事件按预期触发和处理。

5. Vueimginputer实战案例分析

5.1 案例构建环境准备

5.1.1 项目搭建基础

在进行Vueimginputer组件的实战案例分析之前,首先需要搭建一个适合的开发环境。这里我们将使用Vue CLI来创建一个新的Vue.js项目。Vue CLI是一个基于Vue.js进行快速开发的完整系统,它提供了一套完整的功能,包括热重载、保存时格式化以及项目构建和测试等。

执行以下命令来安装Vue CLI(如果还未安装):

npm install -g @vue/cli
# 或者
yarn global add @vue/cli

安装完成后,创建一个新项目:

vue create vueimginputer-case-study

接下来,按照提示选择需要的配置,或者直接选择默认配置。创建完毕后,进入项目文件夹:

cd vueimginputer-case-study

安装Vueimginputer组件:

npm install vueimginputer
# 或者
yarn add vueimginputer

5.1.2 Vueimginputer集成步骤

集成Vueimginputer组件到项目中非常简单。首先需要在主文件 main.js 中引入并注册该组件:

import Vue from 'vue';
import App from './App.vue';
import VueImgInputer from 'vueimginputer';

Vue.config.productionTip = false;
Vue.use(VueImgInputer);

new Vue({
  render: h => h(App),
}).$mount('#app');

此时,Vueimginputer已经作为全局组件可用。在任何组件内,你都可以直接通过 <vue-img-inputer> 标签来使用它。

App.vue 文件中使用 <vue-img-inputer> 组件:

<template>
  <div id="app">
    <vue-img-inputer></vue-img-inputer>
  </div>
</template>

<script>
export default {
  name: 'App',
};
</script>

至此,Vueimginputer已经成功集成到我们的Vue.js项目中。接下来,我们将进一步探讨如何实现图片上传功能以及如何进行优化与扩展。

5.2 案例功能实现

5.2.1 图片上传功能的实现

要实现图片上传功能,我们需要设置 <vue-img-inputer> 组件的 accept on-change 属性。 accept 属性指定了可以上传的文件类型,而 on-change 是一个事件监听器,用于处理文件选择的变化。

<template>
  <div id="app">
    <vue-img-inputer
      accept="image/*"
      :on-change="handleImageChange"
    ></vue-img-inputer>
  </div>
</template>

<script>
export default {
  name: 'App',
  methods: {
    handleImageChange(files) {
      // files 是一个数组,包含选中的所有文件
      const imageFile = files[0];
      // 这里可以添加上传文件的逻辑代码
      console.log('Selected Image:', imageFile);
    }
  }
};
</script>

5.2.2 图片预览与编辑的实现

图片预览功能是由Vueimginputer组件自动实现的,用户选择文件后,组件会直接在页面上展示选中的图片。编辑功能则可以通过一些额外的配置来实现,比如裁剪、旋转等。

可以通过设置 preview 属性来定制图片预览的样式,例如:

<vue-img-inputer
  :preview="{ width: '200px', height: '200px' }"
></vue-img-inputer>

以上代码设置了预览图片的宽度和高度。如果需要更复杂的编辑功能,Vueimginputer可能需要与第三方库结合使用,比如Cropper.js来实现裁剪功能。

<vue-img-inputer
  :on-after-read="handleAfterRead"
></vue-img-inputer>
methods: {
  handleAfterRead(file) {
    // 使用Cropper.js进行图片编辑
    const image = document.getElementById('image');
    const cropper = new Cropper(image, {
      aspectRatio: 1 / 1,
      // 其他配置项...
    });
  }
}

5.3 案例优化与扩展

5.3.1 性能优化的实践

在Vue项目中进行性能优化是一个重要的话题。对于Vueimginputer组件,我们可以采取以下措施进行优化:

  • 懒加载 :对于大型项目,图片上传功能可能会导致大量的资源请求,从而影响页面的加载速度。可以使用图片懒加载库来优化加载时间,例如使用 v-lazy-image 组件。
<vue-img-inputer>
  <template v-slot:default="{ image }">
    <v-lazy-image :src="image.url"></v-lazy-image>
  </template>
</vue-img-inputer>
  • 组件缓存 :如果图片上传功能包含在一个使用 <keep-alive> 缓存的路由内,用户在切换路由时,可以避免组件重新加载。
<keep-alive>
  <router-view />
</keep-alive>

5.3.2 可复用性增强的策略

在多个项目或组件中使用相同的功能时,可复用性是非常重要的。为了提高Vueimginputer的可复用性,可以考虑以下几点:

  • 组件抽象 :创建一个具有通用性的上传组件,该组件封装了Vueimginputer,提供简单的属性和事件监听接口,可以在不同的项目中复用。

  • 插槽使用 :通过插槽(slots),允许用户自定义上传组件的某些部分,如预览区域、上传按钮等,提供了更强的灵活性和定制性。

<vue-img-inputer>
  <template v-slot:preview>
    <!-- 自定义预览区域 -->
    <div class="custom-preview">
      <!-- 这里可以使用更复杂的组件来自定义预览 -->
    </div>
  </template>
</vue-img-inputer>

通过这些策略,我们不仅能够提高开发效率,还可以确保项目的代码质量和可维护性。

以上所述,已经完成了Vueimginputer实战案例的构建和功能实现。在实践中,根据项目的具体需求,可能还需要进行更深入的定制和优化。通过不断的学习和实践,我们可以将Vueimginputer组件的功能发挥到极致,从而提升开发体验和用户满意度。

6. Vueimginputer性能优化策略

6.1 前端性能优化概述

在Web开发中,性能优化是保证用户体验的重要一环。前端性能优化可以从多个方面入手,如减少资源加载时间、优化DOM操作、合理使用缓存等。具体到Vueimginputer组件,我们可以从以下几个层面来探讨性能优化策略。

6.2 减少组件的初始加载大小

Vueimginputer作为一个图片输入组件,其优化可以从减少组件的初始加载大小开始。这可以通过以下几个步骤来实现:

  • Tree Shaking : 确保Vueimginputer在生产环境中使用了支持tree shaking的打包工具,如Webpack,并在构建时排除那些未使用的代码。
  • 按需引入 : 如果组件提供了多种功能,开发者可以选择性地引入需要的功能,而不是整个组件。
// 使用ES6的import语法进行按需加载
import { Vueimginputer } from 'vueimginputer';
import 'vueimginputer/dist/vueimginputer.css';

Vue.use(Vueimginputer);
  • 资源压缩 : 图片资源往往占用了较大的空间,可以使用工具对图片进行压缩,并利用Vueimginputer的懒加载特性,按需加载图片资源。

6.3 DOM操作优化

在Vue中,我们通常不需要手动操作DOM,但有时候一些细微的性能问题可能就需要我们关注DOM操作的效率。以下是一些优化策略:

  • 避免在模板中使用v-for时绑定键 : 当使用v-for列表渲染时,避免使用index作为key,因为这会导致不必要的DOM操作。
  • 利用虚拟DOM : Vue的虚拟DOM机制可以有效地减少真实DOM的操作次数,我们应该尽量使用响应式数据更新视图。

6.4 缓存策略

合理使用缓存可以极大提升应用性能,减少网络请求次数。针对Vueimginputer组件,我们可以采取以下缓存策略:

  • 本地缓存 : 对于已经上传的图片,可以通过本地存储或IndexedDB进行缓存,避免重复上传。
  • CDN缓存 : 如果组件中使用了外部资源,比如样式表或脚本,应尽可能使用CDN并设置合理的缓存策略。
// 示例:设置HTTP缓存头
const http = require('http');
const fs = require('fs');

http.createServer(function (req, res) {
  res.setHeader('Cache-Control', 'public, max-age=3600');
  // 其他响应头...
  fs.readFile('./image.jpg', function (err, data) {
    if (err) {
      // 错误处理...
    }
    res.writeHead(200);
    res.end(data);
  });
}).listen(8080);

6.5 分析与监控

为了确保性能优化的有效性,我们需要对应用进行性能分析和监控。这可以借助Vue Devtools进行组件级别的性能分析,使用Lighthouse等工具进行全页面的性能审计。

  • Vue Devtools : 安装Vue Devtools扩展,可以通过开发者工具查看组件的渲染次数和性能瓶颈。
  • Lighthouse : 运行Lighthouse来分析应用的性能、可访问性、渐进式Web应用等特性,并根据其提供的报告进行优化。

总结,Vueimginputer组件的性能优化策略需要从减少加载大小、优化DOM操作、合理使用缓存以及性能分析监控等多个方面综合考虑。通过这些措施,我们可以提升组件的性能,进而增强整个应用的用户体验。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:Vueimginputer是一个基于Vue.js 2的组件库,旨在简化Web应用中的图片上传和预览功能。该组件允许开发者创建可复用的图片输入框,通过定义好的模板、数据、方法和生命周期钩子等来轻松处理图片上传和展示。本实战指南将介绍如何通过Vueimginputer组件实现图片上传,包括组件的安装、注册、属性配置和事件监听,以及如何通过源代码和示例项目来快速理解和上手。


本文还有配套的精品资源,点击获取
menu-r.4af5f7ec.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值