您好,欢迎访问一九零五行业门户网

ElTableColumn扩展方法详解

这次给大家带来eltablecolumn扩展方法详解,eltablecolumn扩展的注意事项有哪些,下面就是实战案例,一起来看一下。
公司有一个新的需求,点击eltablecolumn的头部可以进行搜索,这个功能同事已经做出来了,但是使用有些不方便,自己就打算封装成一个组件,学习一下。
eltablecolumn本来是这个样子的:
要做成的是这个样子:
我直接就放代码了,挨着挨着说明太多了。
代码的结构:
组件
<!-- eltablecolumnpro.vue --> <template>    <el-table-column v-if="visible" :formatter="formatter" :align='align' :prop="prop" :header-align="headeralign" :label="label" :width="width" :render-header="renderheader" >      <template slot-scope="scope">       <slot :row="scope.row" :$index="scope.$index" >        <span>{{fomatmethod(scope.row[prop])}}</span>       </slot>      </template>    </el-table-column> </template> <script> import moment from moment; export default {  name: el-table-column-pro,  props: {   prop: {    type: string   },   label: {    type: string   },   width: {    type: number   },   rendertype: {    type: string,    validator: value => [date, input, select].includes(value)   },   placeholder: {    type: string   },   rederwidth: {    type: string,    default: 230px   },   param: {    type: string,    default:    },   startdate: {    type: string   },   enddate: {    type: string   },   selectlist: {    type: array   },   isclear: {    type: boolean,    default:true   },   visible: {    type: boolean,    default: true   },   filtericon: {    type: string,    default: el-icon-search   },   callback: {    type: function   },   formatter: {    type: function,    default:(row, column, cellvalue)=>cellvalue   },   align:{    type:string    },   headeralign:{    type:string   }  },  data() {   return {    formatd:this.filtericon   };  },    methods: {   fomatmethod(value){    return this.formatter('','',value)   },      renderheader(createelement, { column, $index }) {    switch (this.rendertype) {     case date:      return this.renderdate(createelement, { column, $index });     case input:      return this.rederinput(createelement, { column, $index });           case select:      return this.rederselect(createelement, { column, $index });          default:      return column.label;    }   },   rederinput(createelement, { column, $index }) {    return createelement(     p,     {      class: filters,      style: {       color: column.color      }     },     [      createelement(       el-popover,       {        props: {         placement: bottom,         width: 200,         trigger: click        }       },       [        createelement(el-input, {         props: {          placeholder: this.placeholder,          value: this.param         },         nativeon: {          keyup: event => {           if (event.keycode === 13) {            this.$emit(update:param, event.target.value);            this.callback && this.callback();           }          }         },         on: {          blur: event => {           this.$emit(update:param, event.target.value);           this.callback && this.callback();          }         }        }),        createelement(         span,         {          slot: reference         },         [          column.label,          createelement(i, {           class: this.filtericon,           style: {            marginleft: 4px           }          })         ]        )       ]      )     ]    );   },   rederselect(createelement, { column, $index }) {    return createelement(     p,     {      class: filters,      style: {       color: column.color      }     },     [      createelement(       el-popover,       {        props: {         placement: bottom,         width: 200,         trigger: click        }       },       [        createelement(         el-select,         {          props: {           placeholder: this.placeholder,           value: this.param,           clearable: this.isclear          },          on: {           input: value => {            this.$emit(update:param, value);            this.callback && this.callback();           }          }         },         [          this.selectlist.map(item => {           return createelement(el-option, {            props: {             value: item.value,             label: item.label            }           });          })         ]        ),        createelement(         span,         {          slot: reference         },         [          column.label,          createelement(i, {           class: this.filtericon,           style: {            marginleft: 4px           }          })         ]        )       ]      )     ]    );   },   renderdate(createelement, { column, $index }) {    return createelement(     p,     {      class: filters     },     [      createelement(       el-popover,       {        props: {         placement: bottom,         width: this.rederwidth,         trigger: click        }       },       [        createelement(el-date-picker, {         props: {          placeholder: this.placeholder,          value: this.value,          type: daterange,          rangeseparator:至,          startplaceholder:开始日期,          endplaceholder:结束日期,         },         style: {          width: this.rederwidth         },         on: {          input: value => {           if (value) {            const startdate = moment(value[0]).format(yyyy-mm-dd);            const enddate = moment(value[1]).format(yyyy-mm-dd);            this.$emit(update:startdate, startdate);            this.$emit(update:enddate, enddate);            this.callback && this.callback();           }          }         }        }),        createelement(         span,         {          slot: reference         },         [          column.label,          createelement(i, {           class: this.filtericon,           style: {            marginleft: 4px           }          })         ]        )       ]      )     ]    );   }  } }; </script> <!-- index.js --> import eltablecolumnpro from './eltablecolumnpro' eltablecolumnpro.install = function(vue) {  vue.component(eltablecolumnpro.name, eltablecolumnpro); }; export default eltablecolumnpro;
安装
import eltablecolumnpro from 'components/eltablecolumnpro/index'  ... ... ... vue.use(eltablecolumnpro)
使用
<el-table :data="bankflow" style="width:100%" stripe>     <el-table-column-pro :visible="showmore" prop="transactionid" label="流水号" :width="120"> </el-table-column-pro>     <el-table-column-pro prop="clientcode" label="客户代码 " :width="120" placeholder="请输入客户代码" :callback="requesttransactionlogs" rendertype="input" :param.sync="request_params.clientcode"> </el-table-column-pro>     <el-table-column-pro prop="eventtypename" label="事件 " placeholder="请选择事件" :selectlist="listeventenum" :callback="requesttransactionlogs" rendertype="select" :param.sync="request_params.event" :width="100"> </el-table-column-pro>     <el-table-column-pro prop="createtime" :callback="requesttransactionlogs" :startdate.sync="request_params.startdate" :enddate.sync="request_params.enddate" :formatter="$timeformat" label="时间" rendertype="date" :width="180" ></el-table-column-pro>  </el-table>
<el-table :data="lists.content" v-loading="loading" @row-dblclick="detail" >     <el-table-column-pro :width="120" prop="clientcode" label="客户代码 " align="center" header-align="center" placeholder="请输入客户代码" :callback="getlists" rendertype="input" :param.sync="params.clientcode"></el-table-column-pro>           <el-table-column-pro label="内容 " placeholder="请输入内容" :callback="getlists" rendertype="input" :param.sync="params.content">         <template slot-scope="scope">            <pre>{{scope.row.content}}</pre>         </template>     </el-table-column-pro>     <el-table-column-pro prop="username" :width="100" label="记录人 " align="center" header-align="center" placeholder="请输入记录人" :callback="getlists" rendertype="input" :param.sync="params.username"></el-table-column-pro>     <el-table-column prop="createtime" width="150" label="记录时间" align="center" header-align="center" :formatter="$datetimeformat"></el-table-column>  </el-table>
相信看了本文案例你已经掌握了方法,更多精彩请关注其它相关文章!
推荐阅读:
$http方法传递json参数步骤详解
vue把html字符串转化为html步骤详解
以上就是eltablecolumn扩展方法详解的详细内容。
其它类似信息

推荐信息