基于 vue element ui 封装的 X轴标题 Y轴标题 自定义插槽

在这里插入图片描述
子组件

<template>
  <div id="tableXY1">
    <table style="width: 100%" class="myTable">
      <tr v-for="(item,index) in column" :key="index">
        <td class="column" :style="{background: item.colorBJ ? item.colorBJ:'#ebeef5'}">
          <span :style="{color: item.colorText ? item.colorText: '#000000'}">
            {{ item.title }}
          </span>
        </td>
        <td class="column" v-for="(itemData,indexData) in tableData" :key="indexData">
          <div v-if="item.value === 'action'">
            <el-button :type="itemAction.showType" @click="handClick(itemAction.clickMethods,itemData)" v-for="(itemAction,indexAction) in item.action" :key="indexAction">{{ itemAction.clickName }}</el-button>
          </div>
          <div v-else>
            <div v-if="item.slot" style="display: inline-flex;">
              <div class="slotMain" v-for="(itemSlot,indexSlot) in item.slot" :key="indexSlot">
                <div v-if="itemSlot.type=== 'button'">
                  <el-button :type="itemSlot.showType" @click="handClick(itemSlot.clickMethods,itemData)">{{ itemSlot.clickName }}</el-button>
                </div>
              </div>
              <div class="slotMain">{{ itemData[item.value] }}</div>
            </div>
            <div v-else>{{ itemData[item.value] }}</div>
          </div>
        </td>
      </tr>
    </table>
  </div>
</template>

<script>
export default {
  name: 'TableXY1',
  props: {
    column: {
      type: Array,
      default: function () {
        return [];
      }
    },
    tableData: {
      type: Array,
      default: function () {
        return [];
      }
    }
  },
  data () {
    return {};
  },
  methods: {
    handClick (methods, row) {
      this.$emit('handClick', methods, row);
    }
  }
};
</script>

<style lang="less">
#tableXY1{
  .myTable {
    border-collapse: collapse;
    margin: 0 auto;
    text-align: center;
  }

  .myTable td, .myTable th {
    border: 1px solid #cad9ea;
    color: #666;
    height: 60px;
    line-height: 60px;
  }
  .slotMain{
    padding:0 4px;
  }
  }
</style>

父组件

<template>
    <tableXY :column="column" :table-data="tableData1" @handClick="handClick" />
</template>
<script>
export default {
  components: { tableXY },
  name: 'Index',
  data () {
    return {
      column: [
        {
          title: '', // 第一个单元格展示的 title
          colorBJ: 'black',
          value: 'nameX' //   第一个对象固定 横轴 标题
        },
        {
          title: '左侧1', // 必传  左侧标题
          value: 'aaaa', // 必传   左侧标题  对应的value
          colorText: '#ffffff', // 非必传  左侧标题当前单元格  字体颜色
          colorBJ: 'red', // 非必传  左侧标题当前单元格 背景颜色
          slot: [ // 自定义必须传数组 暂时只支持 button   非必传
            {
              type: 'button', // 自定义模板类型
              showType: '', // 按钮显示类型  以element  按钮类型 为准
              clickName: '复制', // 按钮展示汉字
              clickMethods: 'copyMethods' // 按钮回调 方法名
            }
          ]
        },
        {
          title: '左侧2',
          colorBJ: 'blue',
          value: 'cccc'
        },
        {
          title: '左侧3',
          value: 'eeee'
        },
        {
          title: '操作', // 操作列  单写  按以下格式  暂时只支持button
          value: 'action', // 必传
          action: [
            {
              type: 'button',
              showType: '',
              clickName: '删除',
              clickMethods: 'delMethods'
            }
          ]
        }
      ],
      tableData1: [
        {
          nameX: '11111',
          aaaa: '值1',
          bbbb: '值b',
          cccc: '值c',
          dddd: '值d',
          eeee: '值e',
          ffff: '值f'
        },
        {
          nameX: '12222',
          aaaa: '值11',
          bbbb: '值bb',
          cccc: '值cc',
          dddd: '值dd',
          eeee: '值ee',
          ffff: '值ff'
        }
      ]
    };
  },
  methods: {
	    handClick (methods, row) {
      		console.log(methods, row);
   		 },
    },
};
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值