You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

170 lines
4.2 KiB
Vue

<template>
<div
:class="`bs-indexCard`"
style="width: 100%;height: 100%;position: relative;"
>
<div
:style="{
'background-image': `linear-gradient(${customize.gradientDirection}, ${
gradientColor0 ? gradientColor0 : gradientColor1
} , ${gradientColor1 ? gradientColor1 : gradientColor0})`,
'border-radius':customize.borderRadius + 'px',
border:`${customize.borderWidth}px solid ${customize.borderColor}`,
}"
class="content"
>
<div
:style="{
'margin-right':customize.distance + 'px'
}"
class="content-left"
>
<el-image
:style="{
width: customize.imgSize + 'px',
height: customize.imgSize + 'px',
}"
:src="customize.src?customize.src:imgUrl"
fit="contain"
/>
</div>
<div class="content-right">
<span
class="content-right-first"
:style="{
'font-family': config.customize.fontFamily,
'font-size': customize.firstSize + 'px',
'height':customize.firstSize + 'px',
color:customize.firstColor,
'font-weight':customize.firstWeight,
'margin-bottom':customize.lineDistance +'px'
}"
>
{{ optionData }}
<span
:style="{
'margin-left':'10px',
'font-size': customize.unitSize + 'px',
color:customize.unitColor,
}"
>
{{ unit }}
</span>
</span>
<span
:style="{
'font-size': customize.secondSize + 'px',
'height':customize.secondSize + 'px',
color:customize.secondColor,
'font-weight':customize.secondWeight,
}"
class="content-right-second"
>
{{ customize.secondLine }}
</span>
</div>
</div>
</div>
</template>
<script>
import commonMixins from 'data-room-ui/js/mixins/commonMixins'
import paramsMixins from 'data-room-ui/js/mixins/paramsMixins'
import linkageMixins from 'data-room-ui/js/mixins/linkageMixins'
export default {
name: 'Card',
components: {},
mixins: [paramsMixins, commonMixins, linkageMixins],
props: {
// 卡片的属性
config: {
type: Object,
default: () => ({})
}
},
data () {
return {
imgUrl: require('data-room-ui/assets/images/cardImg/cardicon.png'),
customClass: {}
}
},
watch: {},
mounted () {
},
computed: {
gradientColor0 () {
return this.config.customize.gradientColor0 || this.config.customize.gradientColor1 || 'transparent'
},
gradientColor1 () {
return this.config.customize.gradientColor1 || this.config.customize.gradientColor0 || 'transparent'
},
unit () {
return this.config?.customize.unit || ''
},
option () {
return this.config?.option
},
optionData () {
return this.option?.data || 80
},
customize () {
return this.config?.customize
}
},
methods: {
dataFormatting (config, data) {
let dataList = ''
if (data.success) {
if (data.data instanceof Array) {
dataList = config.dataSource.dimensionField
? data.data[0][config.dataSource.dimensionField]
: data.data[0].value
} else {
dataList = data.data[config.dataSource.dimensionField]
}
} else {
dataList = 80
}
config.option = {
...config.option,
data: dataList
}
return config
}
}
}
</script>
<style lang="scss" scoped>
.content{
display: flex;
flex-direction: row;
height: 100%;
width: 100%;
// background-color: aliceblue;
justify-content: center;
.content-left{
display: flex;
flex-direction: row;
height: 100%;
align-items: center;
}
.content-right{
display: flex;
flex-direction: column;
height: 100%;
justify-content: center;
}
.content-right-first{
display: flex;
flex-direction: row;
align-items: center;
padding-bottom: 5px;
}
.content-right-second{
display: flex;
flex-direction: row;
align-items: center;
}
}
</style>