info.vue 2.18 KB
<template>
  <div class="tableInfo">
    <el-dropdown trigger="click" :hide-on-click="false">
      <el-button
        type="primary"
        icon="el-icon-edit"
        size="medium"
        circle
      ></el-button>
      <el-dropdown-menu slot="dropdown">
        <el-checkbox-group v-model="checkList">
          <el-dropdown-item
            v-for="(item, index) in infoData"
            :key="index"
            v-if="!item.type"
            class="dropItem"
          >
            <el-checkbox
              :label="item.name"
              :checked="true"
              @change="checkChange"
            ></el-checkbox>
            <span class="itemRight">
              <i class="el-icon-caret-top" @click.stop="top(index)"></i>
              <i class="el-icon-caret-bottom" @click.stop="bottom(index)"></i>
            </span>
          </el-dropdown-item>
        </el-checkbox-group>
      </el-dropdown-menu>
    </el-dropdown>
  </div>
</template>

<script>
export default {
  props: { infoData: { type: Array, default: null } },
  inheritAttrs: false,
  data() {
    return {
      checkList: [],
    };
  },
  methods: {
    checkChange(val) {
      this.$emit("checkChange", { type: val });
    },
    top(val) {
      this.$emit("top", val);
    },
    bottom(val) {
      this.$emit("bottom", val);
    },
  },
  created() {},
};
</script>

<style scope lang="scss">
.itemRight {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  height: 34px;
  width: 24px;
  vertical-align: middle;
  cursor: pointer;
  overflow: initial;
  position: relative;
  .el-icon-caret-bottom,
  .el-icon-caret-top {
    width: 0;
    height: 0;
    border: solid 5px transparent;
    position: absolute;
    left: 10px;
  }
  .el-icon-caret-bottom {
    bottom: 12px;
  }
  .el-icon-caret-top {
    top: 5px;
  }
}
.dropItem {
  display: flex;
  justify-content: space-between;
}
</style>

<style>
.tableInfo {
  position: fixed;
  right: 30px;
  bottom: 40px;
  z-index: 99999999;
}
</style>