3328350766
6 天以前 761eb03d6b3bebd0b197179564c84d89d3d12a0d
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<template>
  <div
    style="width: 100%;height: 100%"
    class="bs-design-wrap"
  >
    <dv-border-box-7
      :id="'dataV' + config.code"
      :key="updateKey"
      :background-color="(config.border.gradientColor&&(config.border.gradientColor[0]||config.border.gradientColor[1]))?`url(#${borderBgId})`:'transparent'"
      :color="borderColor"
    >
      <div
        v-if="config.border.isTitle"
        class="element"
        :style="`
    color:${color};
    font-size:${config.border.fontSize}px;
    line-height:${config.border.titleHeight}px;
    height:${config.border.titleHeight};
    padding:0 0 0 20px`"
      >
        {{ config.title }}
      </div>
    </dv-border-box-7>
  </div>
</template>
<script>
import { refreshComponentMixin } from 'data-room-ui/js/mixins/refreshComponent'
import DvBorderBox7 from '@jiaminghi/data-view/lib/components/borderBox7/src/main.vue'
import '@jiaminghi/data-view/lib/components/borderBox7/src/main.css'
export default {
  name: 'Border7',
  components: {
    DvBorderBox7
  },
  mixins: [refreshComponentMixin],
  props: {
    // 卡片的属性
    config: {
      type: Object,
      default: () => ({})
    }
  },
  data () {
    return {
      borderBgId: `borderBg${this.config.code}`
    }
  },
  computed: {
    borderColor () {
      return this.config.border.borderMainColor ||
        this.config.border.borderSecondaryColor
        ? [
            this.config.border.borderMainColor,
            this.config.border.borderSecondaryColor
          ]
        : null
    },
    color () {
      return this.config.border.fontColor ? this.config.border.fontColor
        : '#fff'
    }
  },
  watch: {
    updateKey: {
      handler (val) {
        this.$nextTick(() => {
          this.changeColor()
        })
      },
      deep: true
    },
    'config.border.gradientColor': {
      handler (val) {
        this.changeColor()
      },
      immediate: true
    },
    'config.border.gradientDirection': {
      handler (val) {
        this.changeColor()
      },
      immediate: true
    },
    'config.border.opacity': {
      handler (val) {
        this.changeColor()
      },
      immediate: true
    }
  },
  mounted () {
    this.changeColor()
  },
  methods: {
    changeColor () {
      if (!this.config.border.opacity) {
        this.config.border.opacity = 100
      }
      if (!this.config.border.gradientColor) return
      if (document.querySelector(`#dataV${this.config.code}`)) {
        const borderElement = document.querySelector(`#dataV${this.config.code}`).querySelector('.border') || document.querySelector(`#dataV${this.config.code}`)?.querySelector('.dv-border-svg-container')
        if (borderElement) {
          borderElement.style.opacity = (this.config.border.opacity / 100)
          borderElement.style.background = `linear-gradient(${this.config.border.gradientDirection},${this.config.border.gradientColor[0] ? this.config.border.gradientColor[0] : this.config.border.gradientColor[1]}, ${this.config.border.gradientColor[1] ? this.config.border.gradientColor[1] : this.config.border.gradientColor[0]})`
        }
      }
    }
  }
}
</script>
 
<style lang="scss" scoped>
.bs-design-wrap {
  position: absolute;
  width: 100%;
  height: 100%;
  // padding: 0 16px;
  background-color: transparent;
  border-radius: 4px;
  box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.1);
  box-sizing: border-box;
}
 
/*滚动条样式*/
::v-deep ::-webkit-scrollbar {
  width: 4px;
  border-radius: 4px;
  height: 4px;
}
 
::v-deep ::-webkit-scrollbar-thumb {
  background: #dddddd !important;
  border-radius: 10px;
}
</style>