在很多项目开发中,我们为了使用方便,一般都会封装一些自定义组件来简化界面的显示处理,例如参照字典的下拉列表显示,是我们项目中经常用到的功能之一,本篇随笔介绍在Vue&Element前端项目中如何使用自定义封装的字典显示处理。

1、字典内容管理

我们在系统中,往往维护着一些系统常用到的字典信息,在我各个框架中都有一个通用的字典管理模块,对于Vue&Element前端项目,也是一样,我们也需要对它进行管理,方便前端使用。本篇随笔介绍的内容适用于ABP开发框架的Vue&Element前端,微信框架和Bootstrap框架中的Vue&Element前端内容。

字典项目一般包括项目大类,字典项的管理,字典项包括显示内容和值,两者可以不一样,也可以一样,如下所示

或者如下所示

字典大类和字典项目的表设计图如下所示。

字典大类由PID构建无穷级的树结构,而字典项目则通过Name和Value来记录显示内容和值内容。

2、后端WebAPI的数据提供

在建立相关的数据表存储数据外,我们后端也需要提供相应的Web API来给各前端提供数据处理,对于显示处理,我们定义了一个适合于Select组件和Tree组件的数据结构,主要就是提供id和label的属性,如下代码所示。

  1. /// <summary>
  2. /// 通用树节点的定义
  3. /// </summary>
  4. [Serializable]
  5. public class TreeNodeItem
  6. {
  7. /// <summary>
  8. /// 默认构造函数
  9. /// </summary>
  10. public TreeNodeItem()
  11. {
  12. }
  13.  
  14. /// <summary>
  15. /// 构造函数
  16. /// </summary>
  17. public TreeNodeItem(CListItem item) :this()
  18. {
  19. this.Label = item.Text;
  20. this.Id = item.Value;
  21. }
  22.  
  23. /// <summary>
  24. /// 参数化构造CListItem对象
  25. /// </summary>
  26. /// <param name="label">显示的内容</param>
  27. /// <param name="id">实际的值内容</param>
  28. /// <param name="key">存储额外的键</param>
  29. public TreeNodeItem(string id, string label, string key = null) : this()
  30. {
  31. this.Id = id;
  32. this.Label = label;
  33. this.Key = key;
  34. }
  35.  
  36. /// <summary>
  37. /// 参数化构造CListItem对象
  38. /// </summary>
  39. /// <param name="label">显示的内容</param>
  40. /// <param name="id">实际的值内容</param>
  41. /// <param name="key">存储额外的键</param>
  42. public TreeNodeItem(int id, string label, string key = null) : this()
  43. {
  44. this.Id = id.ToString();
  45. this.Label = label;
  46. this.Key = key;
  47. }
  48.  
  49. /// <summary>
  50. /// 参数化构造CListItem对象
  51. /// </summary>
  52. /// <param name="text">显示的内容</param>
  53. public TreeNodeItem(string text) : this()
  54. {
  55. this.Id = text;
  56. this.Label = text;
  57. }
  58.  
  59. /// <summary>
  60. /// 实际值内容
  61. /// </summary>
  62. public string Id { get; set; }
  63.  
  64. /// <summary>
  65. /// 显示内容
  66. /// </summary>
  67. public string Label { get; set; }
  68.  
  69. /// <summary>
  70. /// 用于存储额外的键
  71. /// </summary>
  72. public string Key { get; set; }
  73.  
  74. /// <summary>
  75. /// 子节点集合
  76. /// </summary>
  77. [JsonProperty(NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore)]
  78. public List<TreeNodeItem> children { get; set; }
  79.  
  80. /// <summary>
  81. /// 返回显示的内容
  82. /// </summary>
  83. /// <returns></returns>
  84. public override string ToString()
  85. {
  86. return Label.ToString();
  87. }
  88. }

有了这些数据结构,我们可以在Web API的控制器中提供相应的数据了。

而对于ABP框架后端,它们的调用方式也是类似的。

后端API执行返回的JSON数据结构如下所示。

有了这些数据,就需要在前端进行显示即可。

3、Element 前端组件显示

Vue&Element的前端,需要调用后端接口的时候,需要对API类进行一个简单的封装,这样可以方便通过类的方式进行访问后端接口。

前端界面组件中需要用到这个API调用的时候,import进来即可。

  1. // 引入API模块类方法
  2. import dictdata from '@/api/system/dictdata'

有了提供的数据结构和API的封装,我们可以在前端进行展示了,我们来看看Element的Select组件例子代码

  1. <template>
  2. <el-select v-model="value" placeholder="请选择">
  3. <el-option
  4. v-for="item in options"
  5. :key="item.value"
  6. :label="item.label"
  7. :value="item.value">
  8. </el-option>
  9. </el-select>
  10. </template>
  11.  
  12. <script>
  13. export default {
  14. data() {
  15. return {
  16. options: [{
  17. value: '选项1',
  18. label: '黄金糕'
  19. }, {
  20. value: '选项2',
  21. label: '双皮奶'
  22. }, {
  23. value: '选项3',
  24. label: '蚵仔煎'
  25. }, {
  26. value: '选项4',
  27. label: '龙须面'
  28. }, {
  29. value: '选项5',
  30. label: '北京烤鸭'
  31. }],
  32. value: ''
  33. }
  34. }
  35. }
  36. </script>

如果我们每次都需要用这个原始组件来进行展示,那么就需要编写很多代码,我们希望在编写显示字典列表的代码时候,尽量减少代码,因此我们定义了字典组件,用于接收两个数据参数,一个是字典大类名称,通过字典大类名称获取字典列表,并绑定的select组件中;另一个则是标准的集合列表。

我们来看看使用的界面效果和实际代码。

而使用代码如下所示。

  1. <el-form-item label="付款方式" prop="payType">
  2. <my-dictdata v-model="searchForm.status" type-name="付款方式" />
  3. </el-form-item>

上面通过type-name来声明字典大类,从而由组件逻辑实现数据源的绑定处理。

另一种方式就是绑定数据列表,通过options变量进行绑定,如下所示。

  1. <el-form-item label="表单分类" prop="category">
  2. <my-dictdata v-model="searchForm.category" :options="FormCategorys" />
  3. </el-form-item>

而其中这个数据源则可以在页面或者组件中实现获取即可。

4、自定义组件处理

上面介绍了如何实现自定义字典组件,那么字典组件如何自定义处理呢,我们来看看一般的处理如下。

  1. <template>
  2. <el-select v-model="keyword" filterable :clearable="clearable" :multiple="multiple" :disabled="disabled"
  3. :placeholder="placeholder" @change="change">
  4. <el-option v-for="(item, index) in dictItems" :key="index" :label="item.label" :value="item.id">
  5. <span style="float: left;color:yello;">
  6. <i class="el-icon-tickets" style="color:blue;" />
  7. {{ item.label }}
  8. </span>
  9. </el-option>
  10. </el-select>
  11. </template>

不过上面这种对于字符型的数据显示没问题,如果对于包含数值型的选项赋值,则会出现不匹配的问题,因此我们改进一下上面的选项处理代码,以便适应字符型和数值型的绑定值处理。

  1. <template>
  2. <el-select v-model="keyword" filterable :clearable="clearable" :multiple="multiple" :disabled="disabled"
  3. :placeholder="placeholder" @change="change">
  4. <template v-for="(item, index) in dictItems">
  5. <el-option v-if="typeof(keyword)=='string'" :key="index" :label="item.label" :value="'' + item.id" />
  6. <el-option v-else-if="typeof(keyword)=='number'" :key="index" :label="item.label"
  7. :value="('' + item.id).trim() == '' ? '' : parseInt(item.id)" />
  8. <el-option v-else :key="index" :label="item.label" :value="item.id" />
  9. </template>
  10. </el-select>
  11. </template>

以上代码通过判断选项绑定的值类型,从而进行相应的处理,避免数据格式不一致的问题。

而其中的字典列表,这是通过判断prop参数进行获取处理的。

加载的时候,获取数据进行显示绑定即可。

以上就是我们进行用到的字典处理过程,包括后端提供数据API、前端对API的封装,以及组件封装,然后就是界面组件的调用,这种方式极大的提高了自定义组件的使用效率,简化代码,一旦我们封装好自定义组件,使用起来非常方便。

在Vue&Element前端项目中,对于字典列表的显示处理的更多相关文章

  1. 在Vue&Element前端项目中,使用FastReport + pdf.js生成并展示自定义报表

    在我的<FastReport报表随笔>介绍过各种FastReport的报表设计和使用,FastReport报表可以弹性的独立设计格式,并可以在Asp.net网站上.Winform端上使用, ...

  2. 在Vue前端项目中,附件展示的自定义组件开发

    在Vue前端界面中,自定义组件很重要,也很方便,我们一般是把一些通用的界面模块进行拆分,创建自己的自定义组件,这样操作可以大大降低页面的代码量,以及提高功能模块的开发效率,本篇随笔继续介绍在Vue&a ...

  3. 循序渐进VUE+Element 前端应用开发(12)--- 整合ABP框架的前端登录处理

    VUE+Element 前端是一个纯粹的前端处理,前面介绍了很多都是Vue+Element开发的基础,从本章随笔开始,就需要进入深水区了,需要结合ABP框架使用(如果不知道,请自行补习一下我的随笔:A ...

  4. 循序渐进VUE+Element 前端应用开发(13)--- 前端API接口的封装处理

    在前面随笔<循序渐进VUE+Element 前端应用开发(12)--- 整合ABP框架的前端登录处理>介绍了一个系统最初接触到的前端登录处理的实现,但往往对整个系统来说,一般会有很多业务对 ...

  5. VUE+Element 前端应用开发框架功能介绍

    前面介绍了很多ABP系列的文章<ABP框架使用>,一步一步的把我们日常开发中涉及到的Web API服务构建.登录日志和操作审计日志.字典管理模块.省份城市的信息维护.权限管理模块中的组织机 ...

  6. 循序渐进VUE+Element 前端应用开发(7)--- 介绍一些常规的JS处理函数

    在我们使用VUE+Element 处理界面的时候,往往碰到需要利用JS集合处理的各种方法,如Filter.Map.reduce等方法,也可以设计到一些对象属性赋值等常规的处理或者递归的处理方法,以前对 ...

  7. 循序渐进VUE+Element 前端应用开发(9)--- 界面语言国际化的处理

    我们开发的系统,一般可以不用考虑语言国际化的问题,大多数系统一般是给本国人使用的,而且直接使用中文开发界面会更加迅速 一些,不过框架最好能够支持国际化的处理,以便在需要的时候,可以花点时间来实现多语言 ...

  8. 循序渐进VUE+Element 前端应用开发(11)--- 图标的维护和使用

    在VUE+Element 前端应用中,图标是必不可少点缀界面的元素,因此整合一些常用的图标是非常必要的,还好Element界面组件里面提供了很多常见的图标,不过数量不是很多,应该是300个左右吧,因此 ...

  9. 循序渐进VUE+Element 前端应用开发(14)--- 根据ABP后端接口实现前端界面展示

    在前面随笔<循序渐进VUE+Element 前端应用开发(12)--- 整合ABP框架的前端登录处理>简单的介绍了一个结合ABP后端的登陆接口实现前端系统登陆的功能,本篇随笔继续深化这一主 ...

随机推荐

  1. Python - 面向对象编程 - __call__()

    __call()__ 的作用 使得类实例对象可以像普通函数那样被调用 实际栗子 from typing import Callable class PoloBlog: def __init__(sel ...

  2. Linux上项目部署在home目录中无法访问的问题

    在Linux上开发一个Web项目,使用nginx作为Web服务器.在nginx的配置文件中添加一个server,root路径写的是放在home目录中的项目目录的路径.打开浏览器访问,提示错误:403 ...

  3. Axis <=1.4 RCE 复现

    1.环境搭建 在idea 上新建项目,然后用tomcat运行即可 2.漏洞复现 2.1 freemarker.template.utility.Execute 如果项目里面没有freemarker 就 ...

  4. 利用协程爬网页,自动切换io 精典案例:

    首先Python提供的协程库gevent好像并不能知道那些程序使用了io  所以要加一个补丁,mondey,以下同步和异步各爬一次的案例 : , from urllib import requesti ...

  5. 什么是maven与maven的使用过程(例如在idea创建maven工程(重点讲讲idea创建使用maven管理的web工程,并且部署到tomcat上))

    什么是maven与maven的使用过程(例如在idea创建maven工程) (重点讲讲idea创建使用maven管理的web工程项目,并且部署到tomcat服务器上) 一.什么是maven? 1, M ...

  6. Spring系列-SpringBase+IOC

    Spring 一.前言 Thinking is more important than learning 本文主要讲述spring 以及它的 IOC原理 代码地址:https://gitee.com/ ...

  7. easyx小游戏

    #include "stdafx.h" int main(){ srand(time(NULL)); initgraph(640,480); int user_x=20,user_ ...

  8. 【Python】python 2.7.16 x64 百度网盘

    倒霉官网下载太慢,下好了分享出来,也给自己留一个备份. 链接:点这里提取码:znaf PS: py2.7版本 for win 64位

  9. 学习PHP中好玩的Gmagick图像操作扩展的使用

    在 PHP 的图像处理领域,要说最出名的 GD 库为什么好,那就是因为它不需要额外安装的别的什么图像处理工具,而且是随 PHP 源码一起发布的,只需要在安装 PHP 的时候添加上编译参数就可以了. G ...

  10. Git 访问慢 解决办法

    1. 查询Git最快的IP 通过 https://www.ipaddress.com/ 这个网站来获取当前github最新的ip分别获取以下两个域名的IP地址: 可以在访问git网站使用F12查询哪个 ...