新出炉的element UI(表单,表格,和菜单)组件二次封装----elme-ui

2,213 阅读4分钟

距离上一次写文章已经很久了,不知道时间都去哪了。曾经写过一个element表格,表单的组件的文章,但是当时写的组件可能没那么全面,有些地方还考虑不周的地方,所以这两天重新整理了一下,然后重新发了一个npm包,感兴趣的小伙伴可以去去github或者npm上看源码,这里我只介绍用法建议安装1.1.1版本的(这个版本只有这三个组件),未来我会将这个UI当成我的一个组件库,里面更新一些我写过的组件。 6.1版本更新,修复一些bug,新增一些组件的传参,提高组件的使用范围

安装

cnpm install elme-ui@1.1.1 -S  //建议安装1.1.1
cnpm install elme-ui -S

引用

全局注册:
    在main.js中
        import ElmeUi from 'elme-ui'
        Vue.use(ElmeUi)
eg:我现在写的只能是全局安装的,到后期我优化下

使用

目前包含
    form组件(包含input,select,textarea,checkbox,radio,time,citypicker,image,password)
    menu组件(支持无限极,icon)
    table组件(集成axios,pagenation)

form组件:

它接收5个参数,分别是reform(elform的ref属性),labelWidth(label宽度),labelPosition(label的位置),reformRule(表单校验规则)和formData(表单数据,此参数为必填参数,其他的都有默认值)

    //elform的ref属性:可以用this.$refs[reform]来进行一些不一样的操作
    reform: {
      type: String,
      default: function() {
        return "alform";
      }
    },
    // label宽度:即文本内容的宽度
    labelWidth: {
      type: String,
      default: function() {
        return "110px";
      }
    },
    // label的位置
    labelPosition: {
      type: String,
      default: function() {
        return "right";
      }
    },
    //校验规则:和element的一样,所有带校验规则的字段都为必填字段
    reformRule: {
      type: Object,
      default: function() {
        return {};
      }
    },
    // 表单数据
    formData: {
      type: Array,
      default: function() {
        return [
          {
            name: "输入框", // 文字label
            type: "input", // input,select,textarea,checkbox,radio,time,citypicker,image,password
            maxlength:30, // 输入长度限制
            hide:false,// 是否显示
            field: "id", // 字段名称
            isshow: false, // 是否展示
            width: false, // 文本宽度
            value:'', //默认值, 这个属性在1.0.5以后就不在支持了,
            disabled: false, // 是否禁用
            placeholder: "请输入", // placeholder提示
            multiple: false, // 是否多选,基于select,checkbox
            filterable: false, // 是否多选,基于select
            options:[//type 为select,checkbox,radio
                {
                    label:'选项',//选项的文字描述
                    value:'0'//选项值
                }
            ]
            ajax: {
              //动态获取接口数据,基于select,checkbox,radio
              method: "get", //请求方式
              url: "www.xx.cn", //接口地址
              data: {}, //请求参数
              label: "label", //下拉选择框的选择文字
              value: "value", //下拉选择的值
              callback: function(data) {
                //接口返回数据层级处理
                return data;
              }
            }
          }
        ];
      }
    }
  

页面上使用:


<elmeForm :formData="formData" ref="reform" labelWidth="90px" v-model="formValue"></elmeForm>
<!--js-->

formValue:{
    id:''//这个属性与formData里的field值是一样的,默认为空,即表单的值默认为空,你穿有值,表单就有默认值
}

<!--当你要提交表单时-->
let validate = this.$refs.reform.submitForm();
当你表单校验不通过时,这个validate为false,通过为true

menu组件:

它接收的参数有menuList(它包含着菜单的层级关系),excludeList(剔除高亮的router),onlyOne(是否只展开一个),textColor(菜单的文字颜色(仅支持 hex 格式)),backgroundColor(菜单的背景色),activeColor(当前激活菜单的文字颜色)


menuList: {
  type: Array,
  default: function() {
    return [
      {
        img: require('../../assets/images/workbench.png'),//图片路径,用require的方式引用,icon与img是二选一的
        icon: 'icon-peizhi',//阿里的iconfont,icon与img是二选一的,
        index: "workbench",//路由地址
        show: true,//是否显示
        title: "工作台"//菜单标题
        children:[//子菜单可以无限嵌套
          {
            icon: '巴拉巴拉',
            index: "巴拉巴拉",
            show: true,
            title: "巴拉巴拉",
            children:[]
          }
        ]
      }
    ];
  }
},
// 一般用在你的路由下还有二级页面,而你希望你路由跳转的你的二级页面,且当前还是父级页面的高亮
excludeList:{
  type: Array,
  default: function() {
    return [];
  }
  // eg:['member'],那么,当你跳转到member页面的时候,高亮的菜单不会变,还是你之前选择的菜单
},
// 是否只展开一个
onlyOne: {
  type: Boolean,
  default: function() {
    return false;
  }
},
// 菜单的文字颜色(仅支持 hex 格式)
textColor: {
  type: String,
  default: function() {
    return "#303133";
  }
},
// 菜单的背景色(仅支持 hex 格式)
backgroundColor: {
  type: String,
  default: function() {
    return "#ffffff";
  }
},
// 当前激活菜单的文字颜色(仅支持 hex 格式)
activeColor: {
  type: String,
  default: function() {
    return "#409EFF";
  }
}


页面上使用时:

    <elme-menu :menuList="menuList"></elme-menu>
    <!--eg:注意布局,外面在套个div,现在是百分百宽高的-->

table组件:

终于到了表格组件啦,它接收6个参数,分别是:refresh(表格刷新),border(表格边框),paginationJson(表格的分页配置),tableSerach(表格搜索条件),tableAjax(表格的ajax请求),tableData(表格的参数配置)

 // 表格刷新,建议传时间戳,因为每次监听到这个值不一样,表格会刷新
refresh: "",
//表格边框线
border: {
  type: Boolean,
  default: function() {
    return true;
  }
},
// 分页配置
paginationJson: {
  type: Object,
  default: function() {
    return {
      pageSize: [10, 20, 50, 100],//每页多少条
      pageAlign: "right",//对齐方式
      ispagination: true,//是否展示分页
      layout: "total, sizes,jumper, prev, pager, next"//分页布局
    };
  }
},
// 表格的搜索条件
tableSerach: {},
// 表格AJAX请求配置
tableAjax: {
  type: Object,
  default: function() {
    return {
      url: "",//请求地址
      method: "post",//请求方式,目前仅支持post的data方式提交数据,get的params方式
      pageKey:'pageNum',//字段兼容处理,页数字段名称
      sizeKey:'pageSize',//字段兼容处理,条数字段名称
      data: {
        pageNum: 1,
        pageSize: 15
      },
      callback: function(data) {
        //<!--axios请求后的回调,用于处理各种层级及字段不一的情况-->
        return {
            tData:data.list
            total:data.total
        };
      }
    };
  }
},
// table表参数配置
tableData: {
  type: Object,
  default: function() {
    return {
      // 表头配置
      tHead: [
        {
            name: "账号",//表格这一列的标题
            field: "id",//表格这一列的字段名称
            noData: "--",//无数据的兼容处理
            type: "function",//目前支持function(字段处理),image(图片类型),btnList(横向按钮),selectBtns(下拉按钮)
            width:'250px',//不写为自适应宽度
            isHide:false,//是否隐藏
            align:'center',//对齐方式
            callback:function(cell,rowData){//类型为function,btnList,selectBtns时
                //如果为btnList,selectBtns,那么return的数据因为数组:
                //let arr = [
                //    {
                //      type: "reset",//点击的类型,用于区分不同的按钮点击
                //      label:'<span>重置</span>'
                //    }
                //];
                return cell
            }
        }
      ],
      // 配置是否显示多选框
      isMultiple: false,
      // 配置是否显示排序
      isRank: true
    };
  }
}

除了这6个参数外,table组件还有一个点击事件,


tableClick(obj) {
  console.log(obj)//obj.rowData为这一行的数据
  if (obj.type === "reset") {
    //这是重置类型的点击事件
    //进行一些交互与增删改查操作
  } 
}

在页面上使用:


<elme-table
  :tableSerach="tableSerach"
  :refresh="refresh"
  :tableData="tableData"
  :tableAjax="tableAjax"
  @tableClick="tableClick"
></elme-table>

在基本上介绍完啦,比较帅的小伙伴,点个赞啊,哈哈哈