<!--
 * @description: 图层列表
 * @Author: xing.heng
 * @Date: 2023/3/16 11:32
-->
<template>
  <div class="layer-list-wrap">
    <draggable
      v-model="chartList"
      :options="{ group: 'chart' }"
      @change="change"
    >
      <div
        v-for="(chart) in chartList"
        :key="chart.code"
        :class="{
          'layer-list-item': true,
          'layer-list-item-hover': chart.code === hoverCode,
          'layer-list-item-active': chart.code === activeCode
        }"
        @mouseenter.stop="changeHoverCode(chart.code)"
        @click.stop="changeActiveCode(chart.code)"
        @contextmenu="onContextmenu($event, chart)"
      >
        <div class="layer-list-item-icon el-icon-rank" />
        <div
          class="layer-list-item-name"
          :title="chart.title"
        >
          {{ chart.title }}
        </div>
      </div>
    </draggable>
    <el-empty
      v-if="!chartList.length"
      :image-size="90"
      description="未拖拽任何组件"
    />
  </div>
</template>
<script>
import { mapMutations, mapState } from 'vuex'
import draggable from 'vuedraggable'

import chartContextMenu from 'data-room-ui/js/mixins/chartContextMenu'
export default {
  name: 'LayerList',
  components: {
    draggable
  },
  mixins: [chartContextMenu],
  props: {},
  data () {
    return {
    }
  },
  computed: {
    ...mapState({
      chartList: state => state.bigScreen.pageInfo.chartList,
      activeCode: state => state.bigScreen.activeCode,
      activeItemConfig: state => state.bigScreen.activeItemConfig
    }),
    chartList: {
      get () {
        return this.$store.state.bigScreen.pageInfo.chartList
      },
      set (val) {
        this.changeLayout(val)
      }
    }
  },
  mounted () {},
  methods: {
    ...mapMutations({
      changeLayout: 'bigScreen/changeLayout',
      changeZIndex: 'bigScreen/changeZIndex',
      changeHoverCode: 'bigScreen/changeHoverCode',
      changeActiveCode: 'bigScreen/changeActiveCode'
    }),
    change (e) {
      this.changeZIndex(this.chartList)
    },
    changeActive (code) {
      this.changeActiveCode(code)
      this.$emit('openRightPanel')
    }
  }
}
</script>

<style lang="scss" scoped>
@import '../../BigScreenDesign/fonts/iconfont.css';
.layer-list-wrap {
  width: 100%;
  height: 100%;
  overflow: auto;

  .layer-list-item {
    width: 100%;
    height: 40px;
    display: flex;
    align-items: center;
    padding: 0 10px;
    cursor: move;

    &-icon {
      width: 20px;
      height: 20px;
      margin-right: 16px;
      display: flex;
      align-items: center;
    }

    &-name {
      font-size: 14px;
      color: #fff;
      // 超出省略
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }

    &-hover {
      background-color: #007aff80;
    }
    &-active {
      background-color: #007aff;
    }
  }
}
</style>