think-vuele

基于VueElementUI框架进行整合二次开发的一个框架.提供一些elementUI没有的或当时没有的控件.优化了或简化了便于2B软件开发的一些控件

demo:http://vuele.tennetcn.com

github:https://github.com/chfree/think-vuele

element-ui的控件库是el+控件名的方式进行使用。tennetcn-ui是以tc开头使用的控件库,如果你想用回el,只需前缀将tc改为el即可,只是tc提供的扩展属性和方法回调就不起作用了。

体验一下你会喜欢,欢迎提出改进

安装

npm i tennetcn-ui -S

如果安装了tennetcn-ui则自动依赖element-ui

引用

你可以像Element-UI样整个 Tennetcn-UI引入,或是根据需要仅引入部分组件。我们先介绍如何引入完整的 Tennetcn-UI

完整引入

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保持一致。

Block

一个容器块控件,将一个页面的里面特定功能的区域进行分组显示。提供最大化、最小化、全屏显示的基础特性

More

折叠容器,项目中对更多信息展示时,可以用到。本质是对el-collapse的一个简单改造。

Icon

elementui已经提供了图标组件,此处完全是将另外的字体图标库font-awesomeremixicon给放在此处供参考使用,不做强制依赖。

InputMoney

源码来自于github,kevinongko/vue-numeric在此像大神kevinongko致以谢意。

此控件作者使用的是标准的input,我改成了tc-input,也就是tc支持的和el支持的,inputMoney都支持,比如典型的tc-form中进行disabled的时候,表单中的控件全部进行disabled

此控件的功能是,输入的金额是科学计数金额,可以带金额符号,可以自定义几位分隔符,但v-model的值,就是普通的数字。当然kevinongko大神本身就提供了很多控制特性,结合elementui就更厉害了。

InputPhone

手机号规则验证,基础的只是正则宽松验证中国的手机号,还要一种是提供全球的验证。也来源一个github的开源验证库catamphetamine/libphonenumber-js.基于这个开源验证库有一个很炫酷的示例demoLouisMazel/vue-phone-number-input.

此控件的具体使用规则见示例文档

InputTag

这个控件element-ui一直没有提供很好的官方控件,翻遍github后找到一款比较合适的,最开始的想法是直接依赖,然后进行标签封装,后面遇到各种bug无法解决,索性拉下来源码进行,进行自己修改,且与element-ui进行融合。相信我,你使用起来绝对满意。

此控件在此感谢JohMun大神的JohMun/vue-tags-input开源奉献。

AceEditor

一个在线的代码编辑器功能,支持的语言还挺多,对于vue版本网上有很多封装支持。这个是单独自己的,提供了一些简便操作,且与elementform进行了融合。不做强制依赖,属于dev引入。

CodeDisplay

有了AceEditor对于htmlcssjs如果不能实时显示结果,那也挺不好玩的,所以做了一个实时显示代码的功能。感谢iview作者大佬在掘金小册贡献的代码。

Loading

网上看到了一个loading效果的纯css3特效,不能放过啊,直接改成了vue标签使用,提供了相关参数。

LetterAvatar

avatar在el的某个版本才提供,此控件也是参照了github源码eliep/vue-avatar

Clamp

文本截断,当某个文本控件显示的内容过多就不太友好了,当前用样式可以控制,显示成...之类的。但总要有点追求,让用户体验更好。

此控件参考了github上的大神Justineo的代码库Justineo/vue-clamp

eltip提示融合,扩展了tip提示;优化了收起展开的功能。可以试用一下,你肯定会喜欢。

Skeleton

骨架屏,一般在移动端用的多一点,且很多骨架屏的文章都是智能骨架屏,根据内容区域自动计算loading区域。我这个比较简单,且是来自于github上大神michalsnikmichalsnik/vue-content-placeholders

进行了重新封装,提供了2B软件特有的field区域封装;且与dialog进行集成。

优化的相关控件

element-ui已经做的很好了,提供了非常便捷的属性和事件,但是对于2B软件来说,对于一个控件重复的赋相同的值,当领导突然说要统一改改的时候,就不好了,所以此优化并不是element-ui做得不好,而是有针对性的进行优化,便于统一调用。

Button

这个组件真是没有什么可优化的。但这个我只做了一小步,但这很重要,特别是在做e2e的测试的时候;比如我们使用cypress进行e2e测试,界面上一堆按钮,我们开发的时候,很少说会特意给按钮取一个名字或id,这时候,你就没法区分按钮叫什么,如果你用了这个优化过的按钮,就会多一个固定属性

<tc-button @click="add" />
// 结果 html
<button vevent="bound_add" ... />

具体实现可以看看源码的vevent-mixin.js的实现

Select

每次用觉得很繁琐,每次都要进行v-foroption循环。我给select加了一个provider属性。只用定义好标准的数据源格式,然后绑定到select标签上即可,至于选择判断,那是v-model双向绑定的事情。

[{"id":"","text":"","value":""}]

RadioGroup

select一样,自己循环数据源太麻烦,只需要定义一个数据源属性即可。数据源格式与select一致。

CheckboxGroup

radioGroup

Input

非常常见,与button一样,在e2e的测试上,我们很少会给控件取名,但基本都会给v-model属性

<tc-input v-model="user.name" />
// 结果html
<input vname="user_name" ... />

具体实现参见源码vname-mixin.js混入

input控件另外还扩展了正则的支持,说支持是多余,js对正则本身就支持,但是我们要写一大堆的校验取值什么的吧?此控件对此进行了统一简化,且提供了常用的正则表达式类型输入,比如正整数、自然数等。你只用传入支持的正则类型或正则,会自动过滤掉输入的非法内容。具体请前往示例文档体验。

InputNumber

数字输入框提供了+-操作符,多支持了vname-mixin混入,支持了input的正则和正则类型参数

Form

此控件没什么好优化的,纯属臆想下的无聊之作,不知是否有真实的业务场景。

在设计表单的时候,我们会把新增、编辑、查看放一个页面,用参数控制只读,然后底下一个保存一个关闭,当查看的时候,直接把formdisabled设置为true即可,但关闭按钮不应该禁用对吧。此时只要在对应的button上加一个forceEnabled属性来控制强制启用就行.

DatePicker

日期控件,对于日期范围的控制,比如开始时间不能大于结束时间这种,官方提供的那种选择模式不太好像,就提供了此想法。遗憾的是如此简易的用法,遇到一些数据刷新上的问题,暂未解决。

<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>

Table

使用频率非常之高了,对于大数据量的加载网上评论说el的不是太理想,我这个也是基于el的,我的优化点不在于大数据量的优化。主要有以下几点

  • json定义列
  • 第一列序号参数化
  • checkbox参数控制
  • 单选多选参数控制
  • 选择和选中同步控制
  • 提供获取选中值的方法暴露

TreeTable

最初elementui是没有表格树,我的实现是另外一个思路,后续el提供了后,就在后续版本沿用了el的,只是重新定义了名字。但支持上面Table的扩展点。

EditTable

Table扩展而来,提供可以直接在表格内进行数据编辑的功能。网上可编辑的表格,有两种模式,一是点击行,则编辑行。一是直接全表格可编辑。我的实现两种模式可参数控制。

表格的编辑类型支持input\select\date

EditTreeTable

可以编辑的表格树控件,TreeTableEditTable结合而来。

Pager

el官方提供的分页插件,名字太长了,比较难记,我就简化了。且优化了传入参数,只需要一个pager对象即可.

另外对回调函数进行了改造,多了一个pager-change,当pageIndexpageSize发生变化时触发,不然代码里面都是一个分页组件两次监听,因为我们大多数时候监听就是直接调用后端方法,至于是index变化还是size变化我们很少关心.

{
"pageIndex": 1,
"pageSize": 20,
"totalCount": 100
}

MessageBox

el官方弄一个弹窗提示,传入参数太多,进行了简化

Dialog

2B软件用弹窗的应该还是很多的吧,当然有的做法是开tab页。有一次一个同事说tab页的做法是对用户体验的不尊重,一个系统,如果要在Atab页查看数据,在到Btab页进行后续操作,那是否是用户体验没有设计好了?当然这个还是看软件决策者怎么决定。

对于dialog的优化如下:

  • 优化了title,看上去更像一个窗口
  • 提供了openopenedloading支持
  • 提供了openopenedskeleton骨架屏的支持
  • 宽高百分比的支持
  • dialog底部固定条支持
  • 提供了更多的钩子函数比如openopenedcloseclosedbeforeClose

工具组件

常用工具包

非常基础的工具包,当前你也可以选择其他优化的开源工具组件包,这里面只是内置的常用的。

import { xxx } from 'tennetcn-ui/lib/utils'

随机数

import { random } from 'tennetcn-ui/lib/utils'

提供多种样式的随机数,范围、大小、浮点等,总有满足你的随机需求。

正则

常用正则提供,以及简便方式调用。

Element没更新了?Element没更新,基于El的扩展库更新的更多相关文章

  1. 为什么我的子线程更新了 UI 没报错?借此,纠正一些Android 程序员的一个知识误区

    开门见山: 这个误区是:子线程不能更新 UI ,其应该分类讨论,而不是绝对的. 半小时前,我的 XRecyclerView 群里面,一位群友私聊我,问题是: 为什么我的子线程更新了 UI 没报错? 我 ...

  2. [原创] 【2014.12.02更新网盘链接】基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装

    [原创] [2014.12.02更新网盘链接]基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装 joinlidong 发表于 2014-11-29 14:25:50 ...

  3. org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element

    org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element(识别不到想要的元素) 想获取 ...

  4. ios pod库更新到1.0或1.0.1之正确修改podfile文件

    今天看到cocopods都更新到1.0.1了,之前什么时候更新到的1.0都没发现,刚刚更新一下之后,立马出现了一大堆的错误. 如果没有更新的话,建议不要更新!!!书写麻烦了! 现在记录如何一步一步去除 ...

  5. listview前几个item的图片怎么是空白的、listview更新了ui不起作用、在handler里更新了UI不起作用

    不是不起作用,不信你可以在更新ui代码附近加输出的log,说明程序是跑到那里了.但是未达到我们的想要的效果. 我们知道在listview里更新UI,listview的适配器Adapter里有个getV ...

  6. GitHub学习三-远程版本库更新与提交

    1.远程版本库更新 一般来说,将本地与远程相关联之后,首先将数据从远程更新下来再上传比较好. 输入 git pull origin master 如果新建版本库的话勾选了初始化包含readme.md, ...

  7. VS2012 扩展和更新里 插件状态 为禁用 的解决办法!

    在vs2012 里安装完插件,重启VS,结果 插件没有加载,查看 扩展和更新,里面显示禁用,如图: 解决方法: 点击界面上 “启用每用户扩展的加载” 蓝色文字,弹出如下界面: 选中 以管理员运行时加载 ...

  8. 元素无法定位问题 NoSuchElementException: Message: no such element: Unable to locate element 解决方法

    定位网页上某个按钮时,总是报错元素定位不到,具体如下:NoSuchElementException: Message: no such element: Unable to locate elemen ...

  9. collection库更新1.4.0版本

    collection库更新1.4.0版本 collection库一直在使用中,周末集合github上的反馈以及contributor的修改,更新了1.4.0版本. 这个版本做了几个事情: 增加了三种类 ...

随机推荐

  1. nodejs日常总结

    1.node -v 查看当前node版本 2.npm root -g 查看npm安装路径(还有通过npm安装的vue-cli的路径) 默认: /usr/local/lib/node_modules r ...

  2. hexo NexT主题首页title链接的优化

    在默认设置下,文章链接都会改变,不利于搜索引擎收录,也不利于分享 更改index.swig文件 文件路径是your-hexo-sitethemesnextlayout,将下面代码 1 {% block ...

  3. Oil Deposits(油田)(DFS)

    题目: The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. G ...

  4. mac电脑终端使用scp上传/下载文件/文件夹

    1.从服务器下载文件到本地电脑 1 scp -r remote_username@remote_ip:remote_folder local_folder 例如: 1 scp -r root@106. ...

  5. water

    webchacking.kr 第5题 打开题目发现了两个按钮,分别是Login和join 打开Login发现url是http://webhacking.kr/challenge/web/web-05/ ...

  6. C++与引用1

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  7. win10 pycharm调试技巧 Debug

    1.设置断点 2.调试方法对比 step into:单步执行,遇到子函数就进入并且继续单步执行(简而言之,进入子函数): step over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行 ...

  8. 国产数据库适配publiccms开源项目

    金仓数据库适配 操作说明: 一.在程序的所有实体层添加schema=”public”(这里的public是根据数据库定义的模式) 二.切换数据库,修改配置文件cms.properties里面的cms. ...

  9. [红日安全]Web安全Day8 - XXE实战攻防

    本文由红日安全成员: ruanruan 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了 ...

  10. vue-router03 vue-cli

    1.钩子: next讲解: next()进行路由跳转 next(false)取消路由跳转 beforeRouteEnter (to, from, next) { next(vm => { // ...