123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- <!--
- * @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>
|