基于Vue
和ElementUI
框架进行整合二次开发的一个框架.提供一些elementUI
没有的或当时没有的控件.优化了或简化了便于2B软件开发的一些控件css
demo:http://vuele.tennetcn.comhtml
github:https://github.com/chfree/think-vuelevue
element-ui
的控件库是el
+控件名的方式进行使用。tennetcn-ui
是以tc
开头使用的控件库,若是你想用回el
,只需前缀将tc
改成el
便可,只是tc
提供的扩展属性和方法回调就不起做用了。node
体验一下你会喜欢,欢迎提出改进css3
npm i tennetcn-ui -S
若是安装了tennetcn-ui则自动依赖element-uigit
你能够像Element-UI
样整个 Tennetcn-UI
引入,或是根据须要仅引入部分组件。咱们先介绍如何引入完整的 Tennetcn-UI
。github
完整引入正则表达式
import Vue from 'vue'; import TennetcnUI from 'tennetcn-ui'; import 'element-ui/lib/theme-chalk/index.css'; import App from './App.vue'; Vue.use(TennetcnUI); new Vue({ el: '#app', render: h => h(App) });
相对于element-ui
多加的控件,有些也不是本身彻底手写,大部分来自于github
,进行了统一的封装调用,与element-ui
的控件进行交互融合,且样式上尽可能与element-ui
保持一致。npm
一个容器块控件,将一个页面的里面特定功能的区域进行分组显示。提供最大化、最小化、全屏显示的基础特性element-ui
折叠容器,项目中对更多信息展现时,能够用到。本质是对el-collapse的一个简单改造。
elementui
已经提供了图标组件,此处彻底是将另外的字体图标库font-awesome
、remixicon
给放在此处供参考使用,不作强制依赖。
源码来自于github
,kevinongko/vue-numeric
在此像大神kevinongko
致以谢意。
此控件做者使用的是标准的input
,我改为了tc-input
,也就是tc
支持的和el
支持的,inputMoney
都支持,好比典型的tc-form
中进行disabled
的时候,表单中的控件所有进行disabled
此控件的功能是,输入的金额是科学计数金额,能够带金额符号,能够自定义几位分隔符,但v-model的值,就是普通的数字。固然kevinongko
大神自己就提供了不少控制特性,结合elementui
就更厉害了。
手机号规则验证,基础的只是正则宽松验证中国的手机号,还要一种是提供全球的验证。也来源一个github的开源验证库catamphetamine/libphonenumber-js
.基于这个开源验证库有一个很炫酷的示例demoLouisMazel/vue-phone-number-input
.
此控件的具体使用规则见示例文档
这个控件element-ui
一直没有提供很好的官方控件,翻遍github
后找到一款比较合适的,最开始的想法是直接依赖,而后进行标签封装,后面遇到各类bug没法解决,索性拉下来源码进行,进行本身修改,且与element-ui
进行融合。相信我,你使用起来绝对满意。
此控件在此感谢JohMun
大神的JohMun/vue-tags-input
开源奉献。
一个在线的代码编辑器功能,支持的语言还挺多,对于vue
版本网上有不少封装支持。这个是单独本身的,提供了一些简便操做,且与element
的form
进行了融合。不作强制依赖,属于dev
引入。
有了AceEditor
对于html
、css
、js
若是不能实时显示结果,那也挺很差玩的,因此作了一个实时显示代码的功能。感谢iview
做者大佬在掘金小册贡献的代码。
网上看到了一个loading
效果的纯css3
特效,不能放过啊,直接改为了vue
标签使用,提供了相关参数。
avatar在el的某个版本才提供,此控件也是参照了github源码eliep/vue-avatar
文本截断,当某个文本控件显示的内容过多就不太友好了,当前用样式能够控制,显示成...之类的。但总要有点追求,让用户体验更好。
此控件参考了github
上的大神Justineo
的代码库Justineo/vue-clamp
与el
的tip
提示融合,扩展了tip
提示;优化了收起展开的功能。能够试用一下,你确定会喜欢。
骨架屏,通常在移动端用的多一点,且不少骨架屏的文章都是智能骨架屏,根据内容区域自动计算loading
区域。我这个比较简单,且是来自于github
上大神michalsnik
的michalsnik/vue-content-placeholders
进行了从新封装,提供了2B
软件特有的field
区域封装;且与dialog
进行集成。
element-ui
已经作的很好了,提供了很是便捷的属性和事件,可是对于2B软件来讲,对于一个控件重复的赋相同的值,当领导忽然说要统一改改的时候,就很差了,因此此优化并非element-ui
作得很差,而是有针对性的进行优化,便于统一调用。
这个组件真是没有什么可优化的。但这个我只作了一小步,但这很重要,特别是在作e2e
的测试的时候;好比咱们使用cypress进行e2e
测试,界面上一堆按钮,咱们开发的时候,不多说会特地给按钮取一个名字或id,这时候,你就无法区分按钮叫什么,若是你用了这个优化过的按钮,就会多一个固定属性
<tc-button @click="add" /> // 结果 html <button vevent="bound_add" ... />
具体实现能够看看源码的vevent-mixin.js
的实现
每次用以为很繁琐,每次都要进行v-for
的option
循环。我给select
加了一个provider
属性。只用定义好标准的数据源格式,而后绑定到select
标签上便可,至于选择判断,那是v-model
双向绑定的事情。
[{"id":"","text":"","value":""}]
与select
同样,本身循环数据源太麻烦,只须要定义一个数据源属性便可。数据源格式与select
一致。
同radioGroup
很是常见,与button
同样,在e2e
的测试上,咱们不多会给控件取名,但基本都会给v-model
属性
<tc-input v-model="user.name" /> // 结果html <input vname="user_name" ... />
具体实现参见源码vname-mixin.js
混入
input
控件另外还扩展了正则的支持,说支持是多余,js对正则自己就支持,可是咱们要写一大堆的校验取值什么的吧?此控件对此进行了统一简化,且提供了经常使用的正则表达式类型输入,好比正整数、天然数等。你只用传入支持的正则类型或正则,会自动过滤掉输入的非法内容。具体请前往示例文档体验。
数字输入框提供了+-操做符
,多支持了vname-mixin
混入,支持了input
的正则和正则类型参数
此控件没什么好优化的,纯属臆想下的无聊之做,不知是否有真实的业务场景。
在设计表单的时候,咱们会把新增、编辑、查看放一个页面,用参数控制只读,而后底下一个保存一个关闭,当查看的时候,直接把form
的disabled
设置为true
便可,但关闭按钮不该该禁用对吧。此时只要在对应的button
上加一个forceEnabled
属性来控制强制启用就行.
日期控件,对于日期范围的控制,好比开始时间不能大于结束时间这种,官方提供的那种选择模式不太好像,就提供了此想法。遗憾的是如此简易的用法,遇到一些数据刷新上的问题,暂未解决。
<tc-form> <tc-form-item label="开始时间"> <tc-date-picker v-model="date1" less-than="date2" /> </tc-form-item> <tc-form-item label="结束时间"> <tc-date-picker v-model="date2" greater-than="date1" /> </tc-form-item> </tc-form>
使用频率很是之高了,对于大数据量的加载网上评论说el
的不是太理想,我这个也是基于el
的,个人优化点不在于大数据量的优化。主要有如下几点
json
定义列checkbox
参数控制最初elementui
是没有表格树,个人实现是另一个思路,后续el
提供了后,就在后续版本沿用了el
的,只是从新定义了名字。但支持上面Table
的扩展点。
由Table
扩展而来,提供能够直接在表格内进行数据编辑的功能。网上可编辑的表格,有两种模式,一是点击行,则编辑行。一是直接全表格可编辑。个人实现两种模式可参数控制。
表格的编辑类型支持input
\select
\date
能够编辑的表格树控件,TreeTable
和EditTable
结合而来。
el
官方提供的分页插件,名字太长了,比较难记,我就简化了。且优化了传入参数,只须要一个pager
对象便可.
另外对回调函数进行了改造,多了一个pager-change
,当pageIndex
和pageSize
发生变化时触发,否则代码里面都是一个分页组件两次监听,由于咱们大多数时候监听就是直接调用后端方法,至因而index
变化仍是size
变化咱们不多关心.
{ "pageIndex": 1, "pageSize": 20, "totalCount": 100 }
el
官方弄一个弹窗提示,传入参数太多,进行了简化
2B软件用弹窗的应该仍是不少的吧,固然有的作法是开tab页。有一次一个同事说tab
页的作法是对用户体验的不尊重,一个系统,若是要在Atab
页查看数据,在到Btab
页进行后续操做,那是不是用户体验没有设计好了?固然这个仍是看软件决策者怎么决定。
对于dialog的优化以下:
title
,看上去更像一个窗口open
到opened
的loading
支持open
到opened
的skeleton
骨架屏的支持dialog
底部固定条支持open
、opened
、close
、closed
、beforeClose
等很是基础的工具包,当前你也能够选择其余优化的开源工具组件包,这里面只是内置的经常使用的。
import { xxx } from 'tennetcn-ui/lib/utils'
import { random } from 'tennetcn-ui/lib/utils'
提供多种样式的随机数,范围、大小、浮点等,总有知足你的随机需求。
经常使用正则提供,以及简便方式调用。