UNPKG

easy-element-ui

Version:

base on Element-UI

1,264 lines (1,150 loc) 31.5 kB
# easy-element-ui #### Author: Shinn #### Email: 164888051@qq.com <br> #### This package was based on Element-UI.2.5.10 <br> ## Make sure you understand Element-UI before using it For easy and fast Html page development, <br> This library refers to the design idea of E-charts Options, <br> Now, you can use the library by configuring Json parameters, <br> To render your background application page, And monitor the Change and Click events of each component in real time,<br> Don't worry about component configuration of Element-UI <br> When you develop background level pages in the future, you will often have less than 100 lines of page code, <br> You only need to introduce one component to render the entire page, <br> If the page is long, you can put the prop json object information of the form or table, <br> Put it into a separate js file and import it via import. <br> Easy to adjust layout and modify page elements. <br> ## 使用前请确认您对 Element-UI 有所了解 <br> 为了方便和快速开发 Html 页面,<br> 本库参考了 E-charts Options 的设计思想,<br> 现在,你可以使用本库通过配置Json参数的方式,<br> 来渲染您的后台级应用页面, 并实时监听每个组件的 Change Click 事件,<br> 无需去关心 Element-UI 的组件配置<br> 当你未来开发后台级页面时,往往可让你页面代码不足 100 行,<br> 只需要引入一个组件即可渲染整个页面,<br> 如果页面很长,可以将 form table prop json 对象信息,<br> 放到一个单独的 js 文件,通过 import 引入即可,<br> 方便调整布局,和修改页面元素。 <br> #### 目前已封装进 CommonForm 的组件为: #### 如果有特殊需求,可配合 slot 组件进行自定义开发,slot 可以嵌套任何组件,理论上满足一切需求,若使用 slot 组件,change 和 click 事件监听需要自己实现 <br> <pre> Radio 单选框 Checkbox 多选框 Input 输入框 InputNumber 计数器 Select 选择器 Cascader 级联选择器 Switch 开关 Slider 滑块 TimePicker 时间选择器 DatePicker 日期选择器 DateTimePicker 日期时间选择器 Upload 上传 Text 文本组件 Slot 自定义组件 </pre> <br> ## For Update Info <br> <details> <summary>Version Update Notes</summary> ```javascript v1.2.7 CommonForm 修复在日期组件中,disabledDate不填写报错的问题 v1.2.6 CommonForm 所有组件show属性现在可以为函数类型,用于判断是否显示 date相关组件中的data属性里新增disabledDate:(item, index, time)=>boolean,用于判断日历显示的每一个时间点是否禁止点击,true为禁止,false为可点击 CommonTable type=button时 button新增show,show可以为boolean类型,也可以为(btnItem,tableIndex,tableItem)=>boolean函数类型,用于判断按钮是否显示 button新增disabled,disabled可以为boolean类型,也可以为(btnItem,tableIndex,tableItem)=>boolean函数类型,用于判断按钮是否禁用 button删除condition属性 v1.2.5 CommonForm select组件添加远程搜索功能 v1.2.4 CommonForm 修改组件错别字 v1.2.2 CommonForm select组件 新增filteralbe auto_create属性 v1.2.1 CommonForm 每个子组件的id值 不在需要必填,不填时将默认生成随机id v1.1.9 CommonTable prop 补充相关说明文档 v1.1.8 CommonTable 新增show_overflow_tooltip,用于设置column文字是否单行显示 v1.1.7 CommonTable 新增empty_text,设置没有数据时显示的提示文字, 新增fixed,用于固定某个列的位置 新增sort_method,用于自定义排序方法 新增resizable,用于控制是否可以手动改变列的宽度 新增align,设置对齐方式 v1.1.5 CommonTable 新增column_key,用于配合onFilterChange,监听事件触发对应的列 v1.1.4 CommonTable 新增table_rate控制table的尺寸大小 medium,small,mini 新增filters 新增filter-method 新增filter-multiple 新增事件onFilterChange v1.1.1 CommonForm Input组件新增show_password属性,用于显示/隐藏密码 v1.1.0 CommonForm 新增方法values() =>返回form_prop数组中以value为key的对象,方便操作每一个元素的具体属性,调用方式为this.$refs["common-form"].values() v1.0.26 CommonForm 新增组件类型datetime_picker v1.0.25 CommonForm prop新增属性show 控制组件的显示和隐藏 v1.0.24 CommonTableView新增方法 clearAll() //清除所有已选状态 refreshTableSelectState() //更新当前页的选中状态 v1.0.21 Select组件 添加multiple,调整data结构,请重新调整Select data数据结构 v1.0.20 CommonTableView 添加 sortable属性,支持默认排序 修复Select组件 options disabled失效的问题 v1.0.19 调整ReadMe document v1.0.10 所有组件支持自定义Style, 但不是所有Style都会生效, 某些样式仍需要通过::v-deep or /deep/ or >>> 等命令 通过样式穿透强制修改 删除了部分设置,统一都有Style配置 All components support custom Style, But not all styles work, Some styles still require the command ::v-deep or /deep/ or >>> Force changes through style penetration Deleted some Settings, unified all have the Style configuration ``` </details> <br> ## How to use? <br> ``` import ElementUI from "element-ui"; import "element-ui/lib/theme-chalk/index.css"; import EasyElementUI from "easy-element-ui" Vue.use(ElementUI); Vue.use(EasyElementUI) ``` <br/> ## CommonForm <br> <details> <summary>Event Listener Detals</summary> ```javascript changeUploadState(obj); //obj=>{item_id,obj,value}上传组件各状态监听 changeValue(obj); //obj=>{item_id,obj,value}组件中 value 改变的事件 clickButton(obj); //obj=>{item_id,child_id,obj}组件中按钮的点击事件 ``` </details> <br> <details> <summary>Methods Details</summary> ```javascript validate(); values(); //获取form_prop数组以value为key的对象,方便操作对应元素 //example: this.$refs[your_common_form_ref_name].validate().then((res) => { console.log(res); //res is- true or false }); ``` </details> <br> <details> <summary>Props Details</summary> ```javascript form_ref_name: { //默认form的ref名称 type: String, default: "common-form", }, form_item_span: { //默认一个组件占据的span的大小 type: Number, default: 12, }, label_position: { //form_label的显示位置 type: String, default: "left", //left right top }, label_end: { //form_label的结尾添加字符 type: String, default: "", }, label_width: { //form_label的默认宽度 默认70 可修改 type: Number, default: 70, }, form_value: { //整个页面对应的value,与form_prop一一对应 type: Object, default: () => {}, }, form_prop: { //整个页面的组件结构树及参数列表,必填 type: Array, default: [], } form_column_style: { //自定义Style type: Object, default: () => {}, } ``` </details> <br> <details> <summary>FormProp Details</summary> ```javascript //数组中的每个对象都是一个组件,最外层属性是所有组件通用的属性, //data是组件特有的属性 //所有id改为非必填 不填id时将自动生成id [ { //输入框 通用属性 Common propertys id: 1, //【非】必填 不可重复 可以是任何数据类型 id不存在时 将自动生成id label: "name",//form_label_name type: "input", //必填 value: "name", //对应 form_value 里的 key place_holder: "",//默认提示文字 span: 12,//宽度,采用24栅格模式 offset: 0,//间隔多少格 show:true,//不传或者true 为显示组件 否则隐藏组件 show:()=>{//show属性也可以是函数 用于判断是否显示 /** * 判断逻辑 */ return true }, label_width: 100,//form_label的宽度 required: false,//if require=true, then rule will be unused rule: [ //当你配置了rule,require属性将失效 //配置方法请参考标准化rule配置规则,自行搜索寻找教程 { required:true. trigger: "change", validator: (rule, value, callback) => { if (value.length == 2) { callback(new Error("error")); } else { callback(); } }, }, ], rule_description:"",//require=true时,修改默认错误提示文案 break: true, //true 代表之后的组件需要另起一行 newline style: { //自定义style,将作用于组件本身 border: "1px solid #f00", "padding-bottom": "20px", }, form_item_style:{ //form-item-style,将作用于form_item,也就是form_label+组件 "margin-bottom": "20px", "padding-bottom": "20px", border: "1px solid #0f0", }, //data里的所有属性都是,该组件独享属性,后续组件都如此 data: { type: "text", show_password:false,//是否显示密码 autosize: true, //{ minRows: 2, maxRows: 6 } pre_icon: "el-icon-search", disabled: false, max_length: 200, //输入长度 clearable: false, slot_custom_append: true, //自定义组件样式 slot_custom_prepend: true, slot_custom_append_name: "", slot_custom_prepend_name: "", //如果自定义组件样式,下面属性全部失效 slot_append: true, //后面添加组件 默认button slot_prepend: true, ///前面添加组件 默认button slot_append_icon: "el-icon-search", slot_append_name: "Search", slot_append_style:{}, slot_prepend_icon: "el-icon-search", slot_prepend_name: "Search", slot_prepend_style:{}, press_action: "", //点击事件发起方 append或prepend }, }, { //选择框 id: 2, label: "state", value: "state", type: "select", data: [ remote_method: //远程搜索方法 (query) => { this.$refs["common-form"].values()["state"].data.list = [ { id: 1, label: "1", value: "1" }, { id: 2, label: "2", value: "2" }, { id: 3, label: "3", value: "3" }, ]; }, remote: true,//是否开启远程搜索 disabled:false, list: [ { id: 1, label: "true", value: "true" }, { id: 2, label: "false", value: "false", disabled: false }, ], filterable:true,//是否支持搜索 allow_create:false,//是否支持创建 multiple: true, ], }, { //开关选择器 id: 3, label: "switch", value: "switch", type: "switch", data: { disabled: false, }, }, { //按钮 id: 4, type: "button", data: [ { id: 1, label: "Search", type: "primary", //primary danger warning info null disabled: false, style:{'font-size':'20px'} }, { id: 2, label: "Reset" }, ], }, { //时间范围选择器 id: 5, label: "time", value: "datetimerange", type: "datetimerange", data: { start: "Start Time", end: "End Time", separator: "-", disabled: false, disabledDate:(item, index, time)=>boolean,//判断日历上的是否可点击,true为禁止点击 }, }, { //日期范围选择器 id: 6, label: "time", value: "daterange", type: "daterange", data: { start: "Start Time", end: "End Time", separator: "-", disabled: false, disabledDate:(item, index, time)=>boolean,//判断日历上的是否可点击,true为禁止点击 }, }, { //日期选择器 id: 7, label: "time", value: "date", type: "date", disabled: false, data:{ disabledDate:(item, index, time)=>boolean,//判断日历上的是否可点击,true为禁止点击 } }, { //插槽 id: 8, type: "slot", slot_name: "slot1", data:{ //custom value } }, { //单选-圆钮 id: 9, label: "radio", type: "radio", data: [ { id: 1, label: "option 1", value: "1", style: {}, disabled: false }, ], }, { //单选-按钮 id: 9, label: "radiobutton", type: "radiobutton", data: [ { id: 1, label: "option 1", value: "1", style: {}, disabled: false }, ], }, { //多选-圆钮 id: 10, label: "checkbox", type: "checkbox", value:[], data: [{ id: 1, label: "option 1", value: "1", disabled: false ,style: {} }], }, { //多选-按钮 id: 11, label: "checkboxbutton", type: "checkboxbutton", value:[], data: [{ id: 1, label: "option 1", value: "1", disabled: false,style: {} }], }, { //数字选择器 id: 12, type: "number", data: { disabled: false, min: 1, max: 10, step: 2, precision: 3, //小数点 精度 position: "right", //加减号位置 }, }, { //输入框-输入建议 id: 13, label: "auto-complete", type: "input-auto-complete", data: { disabled: false, trigger_on_focus: false, placement: "top", pre_icon: "el-icon-search", clearable: false, max_length: 10, list: [ { value: "1" }, { value: "2" }, { value: "4" }, { value: "5" }, ], }, }, { //多层级单/多选框 id: 14, label: "cascader", type: "cascader", data: { clearable: true, trigger: "click", //层级展现方式 click|hover show_all_levels: true, //是否选中节点显示完整路径 multiple: true, //是否启动多选 collapse_tags: false, //是否折叠显示结果 strict: true, //是否启动单选 disabled: false, list: [ { value: "zhinan", label: "指南", disabled: true, children: [ { disabled: true, value: "1", label: "1", }, { value: "2", label: "2", }, ], }, ], }, }, { id: 15, type: "slider", label: "test", value: "test", data: { disabled: false, min: 0, max: 100, step: 10, //步长 disabled: false, show_tooltip: true, //是否显示提示框 show_stops: true, //是否显示停顿点 show_input: false, //是否显示输入框 vertical: false, //横竖模式 range: true, //范围模式 height: 200, //如果是范围模式 此值必填 marks: { 0: "0°C", 8: "8°C", 37: "37°C", 50: { style: { color: "#1989FA", }, label: this.$createElement("strong", "50%"), }, }, format_tooltip: (val) => val * 10, //tooltip显示文字的格式化 }, }, { //时间选择器(hour:minute:second) id:16, type: "time", label: "Time", value: new Date(2022, 11, 22, 18, 0), data:{ disabled: false, selectableRange:'00:00:00 - 23:59:59', } }, { //文本组件 id:17, type: "text", label: "text", value: "", }, { //上传组件 id:18, type:"upload", label:"upload", data:{ disabled: false, auto_upload:true, action:"url", multiple:true, disabled:false, limit:1, file_list:"" button_name:"", button_style:{}, tip:"", tip_style:{} } }, { id:19, type: "time_picker", label: "time_picker", value: "", data: { disabled: false, selectableRange: { start: "00:00", step: "00:01", end: "24:00", }, }, }, { id:20, type: "time_picker_range", label: "time_picker_range", value: "", data: { start: "Start Time", end: "End Time", separator: "-", disabled: false, }, }, { id:21, type: "datetime_picker", label: "datetime_picker", value: "", data: { disabledDate:(item, index, time)=>boolean,//判断日历上的是否可点击,true为禁止点击 picker_options:{ //详见element-ui官方文档 }, disabled: false, }, }, ] ``` </details> <br> <details> <summary>CommmonForm Example</summary> ```javascript <template> <CommonForm ref="common-form" :form_prop="form_prop" :form_value="form_value" :form_item_span="7" label_position="left" label_end=":" > </CommonForm> </template> form_value = { name: "", number: "", state: "", text: "", cascader: "", auto: "", date: "", checkbox: [], datetime: [], daterange: [], radio: "", switch: true, time: "", //new Date(2022, 11, 22, 18, 0) } form_prop: [ { id: 1, type: "input", label: "Name", value: "name", label_width: 70, required: true, form_item_style: { "margin-bottom": "20px", }, style: { "font-size": "20px", }, data: [ { id: 1, label: "true", value: "true" }, { id: 2, label: "false", value: "false" }, ], }, { id: 2, type: "select", label: "State", value: "state", required: true, offset: 1, form_item_style: { border: "1px solid #f00", "padding-bottom": "20px", }, data: [ list: [ { id: 1, label: "true", value: "true" }, { id: 2, label: "false", value: "false", disabled: false }, ], multiple: true, ], }, { id: 3, type: "button", break: true, required: true, style: { position: "relative", left: "-20px", }, data: [ { id: 1, label: "Search", type: "primary", style: { "font-weight": "bold" }, }, { id: 2, label: "Reset", type: "default", style: { color: "#f00" }, }, ], }, { id: 4, type: "datetimerange", label: "Alert Time", value: "datetime", label_width: 100, required: true, data: { separator: "-", }, }, { id: 5, type: "time", label: "Time", value: "time", offset: 1, required: true, }, { id: 8, type: "daterange", label: "Date Range", value: "daterange", label_width: 120, offset: 1, required: true, data: { separator: "-", }, }, { id: 6, type: "text", label: "Text", style: { "font-size": "20px", }, value: "This is a paragraph,This is a paragraph,This is a paragraph,This is a paragraph,This is a paragraph,This is a paragraph,", }, { id: 7, type: "switch", label: "switch", value: "switch", offset: 1, required: true, }, { id: 9, type: "date", label: "date", value: "date", offset: 1, required: true, }, { id: 10, label: "radio", type: "radio", value: "radio", offset: 1, required: true, data: [ { id: 1, label: "option 1", value: "1", style: {}, }, { id: 2, label: "option 2", value: "2", style: {}, }, ], }, { id: 11, label: "checkbox", type: "checkbox", value: "checkbox", offset: 1, label_width: 100, required: true, break: true, data: [ { id: 1, label: "option 1", value: "1", disabled: false, style: {}, }, { id: 2, label: "option 2", value: "2", disabled: false, style: {}, }, ], }, { id: 12, type: "number", value: "number", required: true, label: "number", data: { min: 1, max: 10, step: 2, precision: 3, //小数点 精度 position: "right", //加减号位置 }, }, { id: 13, label: "auto-complete", type: "input-auto-complete", value: "auto", label_width: 150, offset: 1, required: true, data: { disabled: false, trigger_on_focus: false, placement: "top", pre_icon: "el-icon-search", clearable: false, max_length: 10, list: [ { value: "1" }, { value: "2" }, { value: "4" }, { value: "5" }, ], }, }, { //多层级单/多选框 id: 14, label: "cascader", type: "cascader", value: "cascader", offset: 1, required: true, label_width: 100, data: { clearable: true, trigger: "click", //层级展现方式 click|hover show_all_levels: true, //是否选中节点显示完整路径 multiple: true, //是否启动多选 collapse_tags: false, //是否折叠显示结果 strict: true, //是否启动单选 disabled: false, list: [ { value: "zhinan", label: "指南", disabled: true, children: [ { disabled: true, value: "1", label: "1", }, { value: "2", label: "2", }, ], }, ], }, }, ], ``` </details> <br> ## CommonTableView <br> <details> <summary>Event Listener Details</summary> ```javascript onClickButton(obj); //obj->{id,row} 按钮点击事件监听 onPageChange(v); //页面切换事件 onFilterChange(obj); //筛选菜单事件监听 onRowClick(obj); //某一行被点击的事件 ``` </details> <br> <details> <summary>Methods Details</summary> ```javascript init(array); //set select values clearAll(); //清除所有已选状态 setCurrentRow(row); //设置table的单选状态,不传row则取消当前高亮选中 refreshTableSelectState(); //更新当前页的选中状态 ``` </details> <br> <details> <summary>Props Details</summary> ```javascript table_page: { //当前页码 type: Number, default: 1, }, table_size: { //每页条数 type: Number, default: 10, }, table_total: { //总条数 type: Number, default: 0, }, empty_text: { type: String, default: "", }, page_button_count: { //翻页组件 最多显示几个页码按钮 type: Number, default: 7, //center left right }, page_position: { //翻页组件的显示位置 type: String, default: "center", //center left right }, show_page: { //是否显示page组件 type: Boolean, default: false, }, table_highlight_current_row: { //是否高亮当前行 type: Boolean, default: false, }, key_name: { //多选,收集的值 对应list里的key type: String, default: "id", }, table_select_list: { //默认选择数据 内容需与key_name的值对应 用于自动更新 type: Array, default: [], }, table_rate: { //表格的尺寸大小 type: String, default: "medium", }, table_ref_name: { //默认table的ref名称 type: String, default: "base-common-table", }, table_max_height: { //最大高度 默认auto type: String, default: "auto", }, table_stripe: { //是否显示stripe type: Boolean, default: true, }, table_border: { //是否显示Tableview的边框 type: Boolean, default: true, }, table_list: { //list数据 type: Array, default: [], }, table_prop: { //table渲染list type: Array, default: [], }, ``` </details> <br> <details> <summary>TableProp Details</summary> ```javascript { id: 1, label: "Operation",//form_label_name type: "button",//button select text slot 4种组件类型 一般设置属性只对text和slot生效 min_width:200, width:200, sortable:false,//是否开启排序 resizable:true,//是否可以拖动列的宽度 column_key:"test",//一般这个值配合filter相关功能使用 fixed:"left",// true, left, right align:"",//left/center/right show_overflow_tooltip:false,//文字过多时,显示tooltip slot_name: "slot1",//if you want to use slot, please set its name 如果使用了type=slot 需要设置slot_name 区分column filters: [ //当前列 弹出的筛选菜单数组 { text: "2016-05-01", value: "2016-05-01" }, { text: "2016-05-02", value: "2016-05-02" }, { text: "2016-05-03", value: "2016-05-03" }, { text: "2016-05-04", value: "2016-05-04" }, ], filterMultiple: false, //是否支持多选 filterHandler: (value, row, column) => { //选中后 的处理逻辑 return true; }, sort_method:(a,b)=>{ return true }, data: { style: { //单元格Style样式 "font-size": "14px", "margin-right": "10px", }, list: [ //type=button,设置按钮及其样式 { id: 1, label: "Manager", font_size: "14px", show:true,//是否显示 show:(btnItem,tableIndex,tableItem)=>{//是否显示 return true; }, disabled:true,//是否禁用 disabled:(btnItem,tableIndex,tableItem)=>{//是否禁用 return true; }, style: {}, }, { id: 2, label: "Ignore" }, { id: 3, label: "Delete", type: "delete" }, ], } } ``` </details> <br> <details> <summary>CommonTableView Example</summary> ```javascript <template> <CommonTableView ref="common-table" style="margin-top: 20px" :table_prop="table_prop" :table_list="table_list" :table_select_list.sync="table_select_list" :table_page="table_page" :table_total="table_total" :table_size="table_size" :show_page="true" > <template v-slot:slot1="scope"> <div>{{ scope }}</div> </template> <template v-slot:slot2="scope"> <div>{{ scope }}</div> </template> </CommonTableView> </template> table_page: 1, table_size:10, table_total: 0, table_select_list: [], table_list: [ { id: 1, name: "name", test: "a" }, { id: 2, name: "name", test: "dfdffdf" }, { id: 3, name: "name", test: "<font color='#ff0000'>tecst</font>" }, { id: 4, name: "name", test: "123", }, ], table_prop: [ { id: 0, type: "select" }, { id: 1, prop: "test", label: "Alert Time" }, { id: 2, prop: "test", label: "Alert Content", min_width: 200 }, { id: 3, prop: "test", label: "Level" }, { id: 4, prop: "test", label: "Device Ip" }, { id: 5, prop: "name", label: "Project" }, { id: 6, prop: "test", label: "Group" }, { id: 7, prop: "test", label: "Type", type: "slot", slot_name: "slot2", }, { id: 8, prop: "test", label: "Log File", type: "slot", slot_name: "slot1", }, { id: 9, label: "Operation", type: "button", width: 190, data: { style: { "font-size": "14px", "margin-right": "10px", }, list: [ { id: 1, label: "Manager", style: { color: "#ff0000", }, }, { id: 2, label: "Ignore" }, { id: 3, label: "Delete" }, ], }, } ], ``` </details> <br> ## Other Methods <br> <details> <summary>Methods</summary> ```javascript setLang("cn") //cn中文 en英文 setLog(true or false) // show Log ``` </details