美文网首页
Element中el-table和MessageBox组件的二次

Element中el-table和MessageBox组件的二次

作者: Komorebi9 | 来源:发表于2019-07-12 16:20 被阅读0次

[Talk is cheap. Show me the code]
不想看理论知识请直接移步最后代码示例。

一、封装目的

在使用ElementUI过程中,发现一些组件的代码量还是过多,并且项目中频繁使用,所以就对组件进行了二次封装,并记录在博客中,欢迎共同讨论学习。

二、代码示例

2.1 MessageBox的封装
/**
   * 封装 在一个叫commonFn的公共服务里面
   * @param {*弹窗提示信息} msgContent
   * @param {*弹窗标题} msgTitle
   * @param {*弹窗类型:
   * 'warning',
   * 'success ',
   * 'info',
   * 'error'
   * 四种类型
   * } msgType
   */
    MessageBox(
    msgContent = '此操作将永久删除此条数据, 是否继续?',
    msgTitle = '提示信息',
    msgType = 'warning') {
    var msgBox = MessageBox.confirm(msgContent, msgTitle, {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: msgType
    })
        return msgBox
     }

/**
   * 哪里需要在哪里调用即可。
   *common是一个公共的函数服务,链式调用即可。
   *参数与封装的相对应。
   */
   commonFn.MessageBox('ds', '23', 'success').then(()=> {
     console.log('确认回调')
   }).catch(() => {
     console.log('取消回调')
   })
   
2.2 el-table表格的封装

el-table组件封装,这个是同事有封装过得,我在原有的基础上进行了一定的改动,代码量比较多,很多参数ElementUI上都有,详情参加:Element中文教程

  <el-table
      :key="tableKey"
      :data="list"
      stripe
      fit
      highlight-current-row
      tooltip-effect="light"
      style="width: 100%;"
      :cell-style="{'vertical-align':'left','padding':'6px'}"
      @selection-change="handleSelectionChange"
      @cell-click="handleColumn"
      @select="selectBox"
      @select-all="selectBoxAll"
    >
      <el-table-column
        v-if="carlist"
        type="selection"
        width="55"
      />
      <el-table-column
        v-for="(item,i) in tableColumu"
        :key="i"
        :label="item.label"
        :prop="item.field"
        :min-width="item.width"
        :formatter="formatterParmas"
      >
        <template slot-scope="scope">
          <span v-if="item.field==='address_type'">{{ scope.row[item.field] | addressTypeFilter }}</span>
          <span v-else-if="item.field==='is_default'">
            <el-checkbox v-model="scope.row[item.field]" true-label="1" false-label="0" disabled />
          </span>
          <span v-else-if="item.field==='source'">
            {{ scope.row[item.field]|sourceFilter(scope.row[item.field]) }}
          </span>
          <span v-else-if="item.field==='audit_status'">
            <span v-if="scope.row[item.field]=='0'" style="color:#FFAA00">待审核</span>
            <span v-if="scope.row[item.field]=='1'" style="color:#F34B4B">审核拒绝</span>
            <span v-if="scope.row[item.field]=='2'" style="color:#6BCE41">审核通过</span>
          </span>

          <span v-else-if="item.field==='org_type'">
            <span v-if="scope.row[item.field]=='0'">承运商</span>
            <span v-if="scope.row[item.field]=='1'">货主</span>
            <span v-if="scope.row[item.field]=='2'">货主/承运商</span>
          </span>
          <span v-else-if="item.field==='accountant'">{{ scope.row[item.field]==='1' ? '是' : '否' }}</span>
          <span v-else>{{ scope.row[item.field] }}</span>
        </template>
      </el-table-column>
      <el-table-column fixed="right" :label="tableOption.label" min-width="200" align="center">
        <template slot-scope="scope">
          <el-button v-for="(item,i) in tableOption.options" :key="i" type="text" class="link-type" @click="handelBtn(item.methods,scope.row)">{{ item.label }}</el-button>
        </template>
      </el-table-column>
    </el-table>

使用:

image image image

这里其实是Vue组件的正常传参,调用。

部分情况说明:

image image image

我这里使用了三种方法对后台的数据进行处理,个人感觉是可以优化的,根据情况只使用一种比较好。
欢迎小伙伴在评论区说出自己的想法

如果有任何关于本文的意见,欢迎在文章下方留言,我会在看到的第一时间回复。

相关文章

网友评论

      本文标题:Element中el-table和MessageBox组件的二次

      本文链接:https://www.haomeiwen.com/subject/cclykctx.html