ny
昨天 282fbc6488f4e8ceb5fda759f963ee88fbf7b999
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<script lang="ts" setup>
import { inject } from 'vue';
 
import { ScrollContainer } from '@jnpf/ui';
 
import emptyImage from '#/assets/images/portal/dashboardNodata.png';
 
import Parser from '../../Design/components/Parser.vue';
import { noNeedMaskList } from '../../Design/helper/dataMap';
 
defineProps({
  layout: { type: Array as PropType<any[]>, default: () => [] },
  mask: { type: Boolean, default: false },
  detailed: { type: Boolean, default: false },
  enabledLock: { type: Number, default: 1 },
});
const emit = defineEmits(['register', 'layoutUpdatedEvent']);
const emitter: any = inject('emitter');
function movedEvent() {
  emit('layoutUpdatedEvent');
}
function resizedEvent(i, item) {
  emitter.emit(`eChart${i}`);
  const loop = (data) => {
    if (data.children && item.children.length) {
      data.children.map((ele) => {
        if (ele.jnpfKey) emitter.emit(`eChart${ele.i}`);
        if (ele.children && ele.children.length) loop(ele);
        return ele;
      });
    }
  };
  loop(item);
  movedEvent();
}
</script>
<template>
  <ScrollContainer class="layout-area jnpf-basic-portal !p-0">
    <template v-if="layout.length">
      <grid-layout :layout="layout" :row-height="40">
        <grid-item
          v-for="item in layout"
          :x="item.x"
          :y="item.y"
          :w="item.w"
          :h="item.h"
          :i="item.i"
          :key="item.i"
          :max-h="item.maxH"
          :min-h="item.minH"
          :min-w="item.minW"
          :max-w="item.maxW"
          @resized="resizedEvent(item.i, item)"
          @moved="movedEvent"
          :static="!!enabledLock">
          <Parser :item="item" :detailed="true" />
          <div class="mask" v-if="mask && !noNeedMaskList.includes(item.jnpfKey)"></div>
        </grid-item>
      </grid-layout>
    </template>
    <div class="portal-layout-nodata" v-else>
      <jnpf-empty :image="emptyImage" />
    </div>
  </ScrollContainer>
</template>
<style lang="scss" scoped>
.layout-area {
  height: 100%;
 
  :deep(.ant-card) {
    width: 100%;
    height: 100%;
 
    .el-card__body {
      padding: 0;
    }
  }
}
</style>