【Vue封装滚动表格组件】

该文章详细介绍了如何在Vue中创建一个自定义的滚动表格组件,包括数据绑定、列宽设置和样式设计,同时使用了``语法糖进行属性定义和方法处理。组件包含表头和内容区域,支持自动滚动功能。
摘要由CSDN通过智能技术生成
<template>
  <div class="swiper-table-box">
    <table class="box-table-th" :style="{ height:props.height_bt}" cellpadding="0" cellspacing="0">
      <tr>
        <td v-for="(item, index) in props.table_th" :key="index" :style="{ width: item.width }">
          {{ item.name }}
        </td>
      </tr>
    </table>
    <div  class="box-table-tr" :style="{height: height_content}">
          <table  cellspacing="0" cellpadding="0" style="border-collapse: separate; border-spacing: 0 6px">
            <tr  v-for="(item, index) in props.datas" :key="index">
              <td v-for="(option, k) in props.table_th" :key="k" :style="{ width: option.width }" :title="item[option.value]">
                <span>{{ item[option.value] }}</span>
              </td>
            </tr>
          </table>
      <!-- <p class="box-tips flex-row null-data">暂无数据</p> -->
    </div>
  </div>
</template>

<script setup>
import { ref, onMounted, markRaw,getCurrentInstance} from 'vue'
const props = defineProps({
    timer: {
      type: String,
      // 对象或数组默认值必须从一个工厂函数获取
      default: function () {
        return null;
      },
    },
    table_th: {
      type: Array,
      // 对象或数组默认值必须从一个工厂函数获取
      default: function () {
        return [
          {name:"c才",width:'50px',value:'ss'},
          {name:"6",width:'50px',value:'dd'},
          {name:"7",width:'50px',value:'bb'},
          {name:"8",width:'50px',value:'zz'},
          ];
      },
    },
    datas: {
      type: Array,
      // 对象或数组默认值必须从一个工厂函数获取
      default: function () {
        return [
            {ss:"我是谁",dd:"6666",bb:7777,zz:8888},
            {ss:"我是谁1",dd:"6666",bb:7777,zz:8888},
            {ss:"我是谁1",dd:"6666",bb:7777,zz:8888},
            {ss:"我是谁1",dd:"6666",bb:7777,zz:8888},
            {ss:"我是谁1",dd:"6666",bb:7777,zz:8888},
            {ss:"我是谁1",dd:"6666",bb:7777,zz:8888},
            {ss:"我是谁",dd:"6666",bb:7777,zz:8888},
            {ss:"我是谁",dd:"6666",bb:7777,zz:8888},
            {ss:"我是谁",dd:"6666",bb:7777,zz:8888},
           
        ];
      },
    },
    height_bt: {
      type: String,
      default: '36px',
    },
    height_content: {
      type: String,
      default: 'calc(100% - 40px)',
    },
})
const {proxy} = getCurrentInstance();
const vCarousel = {
     // update: function (el,binding) {
            //   clearInterval(binding.value.that.$store.state[binding.value.timer]);
            //   binding.value.that.$store.state[binding.value.timer]= setInterval(()=>{
            //        el.scrollTop++
            //        if ((el.scrollTop+el.offsetHeight)>=el.scrollHeight) {
            //           el.scrollTop=0
            //         }
            //   },50)
            //   el.onmouseenter=function(){
            //       clearInterval(binding.value.that.$store.state[binding.value.timer])
            //   },
            //   el.onmouseleave=function(){
            //       clearInterval(binding.value.that.$store.state[binding.value.timer])
            //       binding.value.that.$store.state[binding.value.timer]= setInterval(()=>{
            //         if (el.scrollTop+el.offsetHeight>=el.scrollHeight) {
            //           el.scrollTop=0
            //         }
            //         el.scrollTop++
            //       },50)
            //   }
            // }
}
</script>

<style lang="scss">
.swiper-table-box {
  height: 100%;
  box-sizing: border-box;
  padding: 8px 20px 0 20px;
  .box-table-th {
    width: 100%;
    background: url('/image/index/th_bg.png') no-repeat;
    background-size: 100% 100%;
    // margin-top:4px;
    tr td {
      color: #999;
      font-weight: 700;
      text-align: center;
      line-height: 36px;
    }
  }

  .box-table-tr {
    width: 100%;
    overflow: auto;
    &::-webkit-scrollbar {
      display: none; /* Chrome Safari */
    }
    table {
      width: 100%;
      table-layout: fixed;
    }
    tr {
      background: url('/image/index/tr_bg.png') no-repeat;
      background-size: 100% 100%;
      // margin-bottom:4px;
      height: 28px;
      line-height: 28px;
      // display: inline-block;
      // width: 100%;
      td {
        width: 20%;
        font-size: 14px;
        padding: 2% 0;
        color: #d2e7ff;
        text-align: center;
        cursor: pointer;
        text-overflow: ellipsis;
        overflow: hidden;
        white-space: nowrap;
      }
      &:hover td {
        background-color: rgba(47, 89, 155, 0.5);
      }
    }
    .bg-olor-tr {
      background: rgba(7, 52, 95, 0.5);
    }
  }
}

.box-tips {
  height: 100%;
  color: rgba(255, 255, 255, 0.5);
  font-size: 14px;
}

/* 告警颜色 */
.alert_border {
  border-radius: 3px;
  padding: 0 8px;
  display: inline;
}

.alert_red {
  color: #f07f6e !important;
}

.alert_yellow {
  color: #df9428 !important;
}

.alert_blue {
  color: #29d9db !important;
}

.alert_green {
  color: #34c470 !important;
}

.alert_border_blue {
  border: 1px solid #29d9db !important;
}

.alert_border_red {
  border: 1px solid #d23f51 !important;
}

.alert_border_yellow {
  border: 1px solid #df9428 !important;
}

.alert_border_white {
  border: 1px solid #fff;
  padding: 1px 8px;
  border-radius: 5px;
}
</style>

https://blog.csdn.net/zxczero/article/details/125613915?spm=1001.2014.3001.5502

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就躺了吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值