Newer
Older
smartwell_front / src / components / TableContainer / index.vue
liyaguang 3 days ago 3 KB 细节修复
eslint-disable vue/component-name-in-template-casing
<script lang="ts" setup name="TableContainer">
import { Menu } from '@element-plus/icons-vue'
import configDialog from './configColumnsDialog.vue'
const props = defineProps({
  // 内边距
  padding: {
    type: String,
    default: '0',
  },
  titleShow: {
    type: Boolean,
    default: true,
  },
  title: {
    type: String,
    default: '数据列表',
  },
  isCenter: {
    type: Boolean,
    default: false,
  },
  isConfig: {
    type: Boolean,
    default: false,
  },
  configTitle: {
    type: String,
    default: '',
  },
  columns: {
    type: Array,
    default: () => ([]),
  },
  configColumns: {
    type: Array,
    default: () => ([]),
  },
  edit: {
    type: Function,
    default: () => { },
  },
})

// 配置显示列
const configRef = ref()
const config = () => {
  if (props.isConfig && props.configTitle) {
    configRef.value.initDialog({
      columns: props.columns, // 初始列
      title: props.configTitle, // 本地存储的
    })
  }
}
// 确认显示列
const confirmColumns = (columns: any) => {
  localStorage.setItem(props.configTitle, JSON.stringify(columns))
  props.edit(columns)
}

if (localStorage.getItem(props.configTitle)) {
  // console.log('有存储', props.configTitle)
  props.edit(JSON.parse((localStorage.getItem(props.configTitle) as string)))
}
else {
  // console.log('无存储', props.configTitle, props.columns)
  props.edit(props.columns.filter((item: any) => item.isRequired !== false))
  // console.log(props.columns.filter((item: any) => item.isRequired !== false), '1111')
}
</script>

<template>
  <config-dialog ref="configRef" @confirm="confirmColumns" />
  <div class="table-container">
    <div class="button-area">
      <div class="custom" style="display: flex;align-items: center;">
        <div v-if="titleShow" :class="props.isCenter ? 'title-center' : 'title-left'">
          <!-- <el-icon v-if="isConfig" :size="21" class="icon-menu" @click="config"> -->
            <!-- <Menu /> -->
             <img v-if="isConfig" class="icon-menu" src="../../assets/images/menu.png" style="width: 20px;height: 20px;margin-right: 5px;" alt="" srcset="" @click="config">
          <!-- </el-icon> -->
          <span>
            {{ title }}
          </span>
        </div>
        <div class="button-left">
          <slot name="btns-left" />
        </div>
      </div>
      <div class="button-right">
        <slot name="btns-right" />
      </div>
    </div>
    <div class="table-body">
      <slot />
    </div>
  </div>
</template>

<style lang="scss" scoped>
// 样式
.table-container {
  background-color: #fff;
  padding: 10px;
  margin-top: 10px;
  border-radius: 7px;

  .button-area {
    display: flex;
    justify-content: space-between;
    margin-bottom: 10px;
    align-items: center;

    .icon-menu {
      margin-right: 5px;

      &:hover {
        cursor: pointer;
      }
    }

    .title-left {
      margin-left: 5px;
      display: flex;
      align-items: center;
      height: 21px;
      vertical-align: center !important;
    }

    .title-center {
      margin-left: 5px;
      flex: 1;
      text-align: center;
    }

    .button-left {
      display: flex;
      justify-content: flex-start;
    }

    .button-right {
      display: flex;
      justify-content: flex-end;
    }
  }
}
</style>