ZhangXianQiang
2024-03-07 38a50cb176a78aa5bf5b9f550eb1aab520b402a6
src/views/daoAnOffice/right/danger/dataTable.vue
@@ -11,12 +11,15 @@
    </div>
    <div class="table-container flex-1">
      <div class="table-content">
        <el-table class="data-table" ref="dataTable" :data="tableData" :highlight-current-row="false" :stripe="true"
        <el-table class="data-table body-table" ref="scrollTableOne" :data="tableData" :highlight-current-row="false"
          :stripe="true"
          :header-cell-style="{ backgroundColor: 'transparent', color: '#79A5E9', borderColor: '#29466A' }"
          :cell-style="{ color: '#79A5E9', borderColor: '#29466A', paddingTop: '10px', paddingBottom: '10px' }"
          :row-style="{ backgroundColor: 'transparent' }">
          <el-table-column prop="street" label="镇/街道" align="center" />
          <el-table-column label="发现数量" align="center">
            <template #default="scope">
              <div style="color: #6289E6;">
                {{ scope.row.num1 }}
@@ -25,6 +28,7 @@
          </el-table-column>
          <el-table-column label="下发通知书" align="center">
            <template #default="scope">
              <div style="color: #CFB249;">
                {{ scope.row.num2 }}
@@ -32,6 +36,7 @@
            </template>
          </el-table-column>
          <el-table-column label="处置数量" align="center">
            <template #default="scope">
              <div style="color: #2BB06D;">
                {{ scope.row.num3 }}
@@ -46,7 +51,7 @@
</template>
<script setup>
import { ref, onMounted, onUnmounted, nextTick, inject, watch } from 'vue';
import { ref, onUnmounted, inject, nextTick, watch, watchEffect } from 'vue';
const tableState = inject('tableState');
@@ -134,6 +139,12 @@
    num2: 5,
    num3: 2
  },
  {
    street: '奎光塔街道',
    num1: 12,
    num2: 5,
    num3: 2
  },
];
const changeSelect = (selectItem) => {
@@ -143,45 +154,72 @@
  selectItem.isActive = true;
}
let scrollTableOne = ref("");
// 处理表格滚动
let timer = null;
const dataTable = ref(null);
const tableNode = ref(null);
const scrollHeight = ref(null);
const scrollTop = ref(null);
const isBind = ref(false);
let scrollTimer = null;
// const clearScroll = () => {
//   clearInterval(timer);
//   timer = null;
// }
// 滚动
const scrollTable = () => {
  clearScroll();
  tableNode.value = scrollTableOne.value.$refs.bodyWrapper.getElementsByClassName(
    "el-scrollbar__wrap"
  )[0];
  scrollHeight.value = tableNode.value.scrollHeight;
  scrollTop.value = tableNode.value.scrollTop;
  // bindWheel(tableNode.value);
  scrollTimer = setInterval(() => {
    scrollTableOne.value.setScrollTop(scrollTop.value++);
    if (scrollTop.value >= scrollHeight.value - tableNode.value.offsetHeight) {
      scrollTop.value = 0;
      scrollTableOne.value.setScrollTop(0);
    }
  }, 50);
};
// const createScroll = () => {
//   clearScroll();
//   const table = dataTable.value.layout.table.refs;
const bindWheel = (dom) => {
  if(isBind.value) return;
  isBind.value = true;
  dom.addEventListener("mousewheel", () => {
    clearScroll();
    debounce(() => {
      scrollTable();
    }, 300)
  })
}
//   const tableWrapper = table.bodyWrapper.firstElementChild.firstElementChild;
//   console.log(tableWrapper);
//   timer = setInterval(() => {
//     tableWrapper.scrollTop += 1;
//     if (tableWrapper.clientHeight + tableWrapper.scrollTop >= tableWrapper.scrollHeight) {
//       tableWrapper.scrollTop = 0;
//     }
//   }, 100);
// }
// watch(tableState, (newValue) => {
//   console.log(newValue);
//   if (newValue) {
//     nextTick(() => {
//       setTimeout(() => {
//         createScroll();
//       }, 2000);
//     })
//   } else {
//     clearScroll();
//   }
// })
// onUnmounted(() => {
//   clearScroll();
// });
const clearScroll = (() => {
  clearInterval(scrollTimer);
});
// 防抖函数
let timeout;
function debounce(func, delay) {
  clearTimeout(timeout);
  timeout = setTimeout(func, delay);
}
watch(tableState, (newVal) => {
  if (newVal) {
    nextTick(() => {
      setTimeout(() => {
        scrollTable();
      }, 500);
    });
  } else {
    clearScroll();
  }
})
onUnmounted(() => {
  clearScroll();
});
</script>
<style lang="scss" scoped>
@@ -215,6 +253,8 @@
  font-size: 16px;
  color: #447ED6;
  margin-left: 20px;
  font-family: 'PingFang SC';
}
.select-item {
@@ -222,6 +262,8 @@
  height: 100%;
  border-bottom: 2px solid RGBA(98, 137, 230, 0);
  color: rgba(94, 134, 194, 1);
  font-family: 'PingFang SC';
}
.item-active {
@@ -235,6 +277,8 @@
  width: 100%;
  height: 100%;
  background: transparent;
  font-family: 'PingFang SC';
}
::v-deep .el-table__inner-wrapper::before {
@@ -253,4 +297,24 @@
.el-table__fixed-right {
  height: 100% !important;
}
</style>
.scroll-table {
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 85%;
  overflow: hidden;
}
// .head-table {
//   &:deep(.el-table__body-wrapper) {
//     display: none;
//   }
// }
// .body-table {
//   :deep(.el-table__header-wrapper) {
//     display: none;
//   }
// }</style>