|
|
@@ -1,7 +1,9 @@
|
|
|
<template>
|
|
|
<div>
|
|
|
- <el-form-item label="背景图" label-width="60px">
|
|
|
+ <el-form-item label="背景图" label-width="60px" style="position: relative">
|
|
|
<el-button type="primary" size="mini" @click="openSetBackgroundImage">设置背景图</el-button>
|
|
|
+
|
|
|
+ <div class="background-image" :style="computedBackgroundImage()"></div>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="背景色" label-width="60px">
|
|
|
<el-color-picker v-model="propertyObj.background_color" :show-alpha="true" @change="changeBackgroundColor" />
|
|
|
@@ -13,9 +15,13 @@
|
|
|
:disabled="!isEnable(propertyObj.is_border)"
|
|
|
placeholder="请选择边框样式"
|
|
|
style="width: 120px; margin-left: 10px"
|
|
|
+ popper-class="border-style"
|
|
|
@change="changeBorderStyle"
|
|
|
>
|
|
|
- <el-option v-for="item in borderStyleList" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
+ <el-option v-for="item in borderStyleList" :key="item.value" :label="item.label" :value="item.value">
|
|
|
+ {{ item.label }}
|
|
|
+ <span :style="{ borderStyle: item.value, borderWidth: item.value === 'double' ? '3px' : '1px' }"></span>
|
|
|
+ </el-option>
|
|
|
</el-select>
|
|
|
<el-color-picker
|
|
|
v-model="propertyObj.border_color"
|
|
|
@@ -29,8 +35,9 @@
|
|
|
:visible.sync="visible"
|
|
|
image-fill-mode="cover"
|
|
|
:is-resource="false"
|
|
|
- :position="propertyObj.background_image_position"
|
|
|
+ :position="propertyObj.background_position"
|
|
|
title="组件背景图"
|
|
|
+ type="component"
|
|
|
:url="propertyObj.background_image_url"
|
|
|
@setBackgroundImage="setBackgroundImage"
|
|
|
/>
|
|
|
@@ -119,11 +126,38 @@ export default {
|
|
|
|
|
|
this.$message.success('设置背景图成功');
|
|
|
},
|
|
|
+ computedBackgroundImage() {
|
|
|
+ const backgroundData = {};
|
|
|
+
|
|
|
+ if (Object.hasOwn(this.propertyObj, 'background_image_url')) {
|
|
|
+ // 保护性读取位置/大小值,避免 undefined 导致字符串 "undefined%"
|
|
|
+ const { background_position: pos } = this.propertyObj;
|
|
|
+ const widthPct = typeof pos.width === 'undefined' ? '' : pos.width;
|
|
|
+ const heightPct = typeof pos.height === 'undefined' ? '' : pos.height;
|
|
|
+ const leftPct = typeof pos.left === 'undefined' ? '' : pos.left;
|
|
|
+ const topPct = typeof pos.top === 'undefined' ? '' : pos.top;
|
|
|
+
|
|
|
+ backgroundData.backgroundImage = `url(${this.propertyObj.background_image_url})`;
|
|
|
+ backgroundData.backgroundSize = pos.image_mode === 'fill' ? '100% 100%' : `${widthPct}% ${heightPct}%`;
|
|
|
+ backgroundData.backgroundPosition = pos.image_mode === 'fill' ? '0% 0%' : `${leftPct}% ${topPct}%`;
|
|
|
+ backgroundData.backgroundRepeat = pos.image_mode === 'repeat' ? 'repeat' : 'no-repeat';
|
|
|
+ }
|
|
|
+ return backgroundData;
|
|
|
+ },
|
|
|
},
|
|
|
};
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
+.background-image {
|
|
|
+ position: absolute;
|
|
|
+ left: 96px;
|
|
|
+ display: inline-block;
|
|
|
+ width: 100px;
|
|
|
+ height: 100px;
|
|
|
+ border: $border;
|
|
|
+}
|
|
|
+
|
|
|
.border-setting {
|
|
|
:deep .el-form-item__content {
|
|
|
display: flex;
|
|
|
@@ -131,4 +165,19 @@ export default {
|
|
|
align-items: center;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+.border-style {
|
|
|
+ .el-select-dropdown__item {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+
|
|
|
+ span {
|
|
|
+ display: inline-block;
|
|
|
+ width: 12px;
|
|
|
+ height: 12px;
|
|
|
+ border-color: #000;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|