表格封装-某列可加链接、某列根据状态码变色

表格封装-某列可加链接、某列根据状态码变色

<template>
  <div>
    <el-table
      stripe
      :header-cell-style="{background: '#EDF1F5'}"
      :data='tableData'
      @selection-change="handleSelectionChange"
      >
      <!--多选列-->
      <el-table-column
        v-if='selectionShow'
        type="selection"
        width="50"
        align="center"
        highlight-current-row>
      </el-table-column>
      <!--主要内容部分-->
      <el-table-column
        v-for="(item, index) in tableHead"
        :header-align="item.headerAlign"
        :align="item.align"
        :key="index"
        :prop="item.prop"
        :label="item.label">
        <template slot-scope="scope">
        <!-- 判断某一列是否需要加a标签链接跳转-->
          <div v-if="item.hasHref==true"><a :href="item.href" style="color:#66b1ff">{{scope.row[item.prop]}}</a>
          </div>
           <!-- 判断某一列状态码需要改变颜色-->
          <div v-else-if="item.prop=='statusText'">
            <span v-if="scope.row.status==1" style="color:#67C23A">{{scope.row[item.prop]}}</span>
            <span v-else style="color:#F56C6C">{{scope.row[item.prop]}}</span>
          </div>
          <!-- 其他列-->
          <div v-else>{{scope.row[item.prop]}} 000{{scope.row.status}}</div>
        </template>
      </el-table-column>
      <!--操作列-->
      <el-table-column
        align="center"
        v-if="buttonListShow"
        :fixed="addBtnList.fixed"
        :label=addBtnList.label
        :min-width="addBtnList.width">
        <template slot-scope="scope">
          <el-button
            v-for="(item,index) in addBtnList.list"
            :key="index"
            v-show="exchangeBtn(item.showBtn,scope)"
            @click="clkCall(item.methods,scope)"
            type="text"
            size="small" :title="item.title">
            <span>{{item.title}}</span>
          </el-button>
          <el-button  type="text" size="small" @click="delData(scope)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
    <!--分页-->
    <div class="pagebox">
      <div class="pagelist" v-if="pageShow">
        <el-pagination
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
          :layout="pgconfig.layout"
          :background="pgconfig.background"
          :disabled="pgconfig.disabled"
          :hide-on-single-page="pgconfig.hideSingle"
          :popper-class="pgconfig.popperClass"
          :prev-text="pgconfig.prevText"
          :next-text="pgconfig.nextText"
          :current-page="pgconfig.currentPage"
          :page-sizes="pgconfig.pageSizes"
          :page-size="pgconfig.pageSize"
          :total="pgconfig.total">
        </el-pagination>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  props:{
    selectionShow: Boolean, // 是否显示多选列
    indexLabel: null, // 排序列名称
    indexWidth: null, // 排序列宽度
    tableHead: Array,  // 表头数据
    tableData: Array, // 表格数据
    addBtnList: null,  // 操作列配置项
    buttonListShow: Boolean,   // 是否显示操作列
    pageShow: Boolean,
    pgconfig: null,   // 分页

  },
  data(){
    return{

    }
  },
  watch: {
    // 监听表格数据
    tableData: {
      handler(val, oldVal) {
        this.tableData= val
      }
    },
    // 监听表头数据
    tableHead: {
      handler(val, oldVal) {
        this.tableHead= val
      }
    }
  },
  mounted(){
    //this.initData()
  },
  methods:{
    // 全选
    handleSelectionChange(val) {
      this.SelectCurrentData = val
      this.$emit('handleSelectionChange', val)
    },
    // 判断操作列按钮显示、隐藏
    exchangeBtn(itemshowBtn,scope){
      if(eval(itemshowBtn)){
        return true
      }
    },
    // 操作列 按钮方法
    clkCall(methodsWords,scope) {
      let el = event.currentTarget;
      this.$emit('clkCallBk', methodsWords,scope,el)
      // console.log(el)
    },
    // 删除方法
    delData(){
      console.log('删除')
      this.$confirm('确定删除此数据?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(({ value }) => {
        this.$message({
          type: 'success',
          message: '删除成功!'
        });
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '取消删除'
        });
      });
    },
    // 分页
    handleSizeChange(pageSize) {
      this.$emit("getPagesize", pageSize)
      this.$emit('fatherMethod') // 调用父页面方法请求后台数据
      this.pgconfig.pageSize = pageSize;    //动态改变
    },
    handleCurrentChange(currentPage) {
      this.$emit("getCurrentpage", currentPage)
      this.$emit('fatherMethod') // 调用父页面方法请求后台数据
      this.pgconfig.currentPage = currentPage;    //动态改变
    },
  }

}
</script>
<style scoped>
.pagebox {
  padding:50px 0 20px 0;
  clear: both;
  background:#fff;
  text-align: right;
}
.pagelist {
  display: inline-block;

}
</style>

表格组件使用DEMO

<template>
  <el-card :body-style="screenHeight" style="margin:10px;text-align:left;padding:10px!important">
    <el-row :gutter="24">
      <new-table
        :tableData="tableData"
        :tableHead="tableHead"
        :selectionShow=true
        :indexShow=true
        indexLabel="序号"
        indexWidth="50"
        :buttonListShow=true
        :addBtnList="addBtnList"
        :pageShow=true
        :pgconfig="pgconfig"
        @clkCallBk="listenCall"
        @handleSelectionChange="handleSelectionChange">
      </new-table>
    </el-row>
  </el-card>
</template>
<script>
import newTable from '@comm/components/lcdp/table'
export default {
  components:{
    newTable
  },
  data() {
    return {
      // 表头数据
      tableHead: [
        {
          width: 150,
          label: '日期',
          prop: 'date',
          align: 'center',   // 列对齐方式
          headerAlign: 'center',   // 列头对其方式

        },
        {
          width: 150,
          label: '姓名',
          prop: 'name',
          align: 'center',
          headerAlign: 'center',
          hasHref:true, // 是否加链接
          href:'javascript:void(0)',
        },
        {
          width: 100,
          label: '状态',
          prop: 'statusText',
          align: 'center',
          headerAlign: 'center',
        },
      ],
      // 表格基础数据
      tableData: [
        {
          date: '2016-05-02',
          name: '王小虎',
          status: 1,
          statusText:'已同步'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          status: 0,
          statusText:'未同步'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          status: 0,
          statusText:'未同步'
        },
      ],
      buttonListShow: true,  // 是否显示操作列
      // 操作列数据
      addBtnList: {
        label: '操作',
        width: 120,
        list: [
          {
            title: '查看',
            icon: 'el-icon-circle-plus-outline',
            methods: 'check',  // 按钮方法
            showBtn: true  // 是否显示按钮
          },
          {
            title: '编辑',
            icon: 'el-icon-edit',
            methods: 'edit',
            showBtn: true
          },
        ]
      },
      // 全选数据
      multipleSelection:null,
      // 分页
      pgconfig:{
        //以下参数为分页控件配置属性
        layout:'total,prev,pager,next,sizes,slot',
        background:true,
        disabled:false,
        hideSingle:false,   // 当只有一页时是否隐藏分页
        pageSizes: [20,50,100,200],
        //以下三个参数应由查询结果返回
        total: 100,
        pageSize:20,
        currentPage: 1,
      },
    }
  },
  methods:{
    // 表格全选
    handleSelectionChange(val) {
      console.log(this.multipleSelection = val)
      // alert('我是多选方法')
    },
    // 操作列按钮方法
    listenCall(methodsWords,scope,el) {
      console.log('methodsWords', methodsWords,scope,el)
      this[methodsWords](scope,el)
    },
    // 调用查看方法
    check(scope,el) {
      console.log(scope,el)
      alert('查看')
    },
    // 调用编辑方法
    edit(scope,el) {
      console.log(scope,el)
      alert('编辑')
    },
    // 调用删除方法
    del(scope,el) {
      console.log(scope,el)
      alert('删除')
    },
  }

}
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值