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.
427 lines
11 KiB
Vue
427 lines
11 KiB
Vue
|
|
<template>
|
|
<div>
|
|
<el-form-item
|
|
:label-width="labelWidth"
|
|
label="边框"
|
|
>
|
|
<el-input
|
|
v-model="title"
|
|
clearable
|
|
read-only
|
|
placeholder="请选择边框"
|
|
@focus="init"
|
|
>
|
|
<template slot="append">
|
|
<el-button
|
|
size="small"
|
|
type="primary"
|
|
@click="init"
|
|
>
|
|
选择
|
|
</el-button>
|
|
</template>
|
|
</el-input>
|
|
<BorderSelect
|
|
v-model="config.type"
|
|
ref="BorderSelect"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item
|
|
:label-width="labelWidth"
|
|
label="上边距"
|
|
>
|
|
<el-input-number
|
|
v-model="config.padding[0]"
|
|
class="bs-el-input-number"
|
|
:min="0"
|
|
:step="1"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item
|
|
:label-width="labelWidth"
|
|
label="右边距"
|
|
>
|
|
<el-input-number
|
|
v-model="config.padding[1]"
|
|
class="bs-el-input-number"
|
|
:min="0"
|
|
:step="1"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item
|
|
:label-width="labelWidth"
|
|
label="下边距"
|
|
>
|
|
<el-input-number
|
|
v-model="config.padding[2]"
|
|
class="bs-el-input-number"
|
|
:min="0"
|
|
:step="1"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item
|
|
:label-width="labelWidth"
|
|
label="左边距"
|
|
>
|
|
<el-input-number
|
|
v-model="config.padding[3]"
|
|
class="bs-el-input-number"
|
|
:min="0"
|
|
:step="1"
|
|
/>
|
|
</el-form-item>
|
|
<div v-if="config.type">
|
|
<el-form-item
|
|
:label-width="labelWidth"
|
|
label="是否显示标题"
|
|
v-if="config.type!='GcBorder16'"
|
|
>
|
|
<el-switch
|
|
v-model="config.isTitle"
|
|
class="bs-el-switch"
|
|
:active-value="true"
|
|
:inactive-value="false"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item
|
|
v-if="config.isTitle&&config.type!='GcBorder11'"
|
|
:label-width="labelWidth"
|
|
label="标题高度"
|
|
>
|
|
<el-input-number
|
|
v-model="config.titleHeight"
|
|
class="bs-el-input-number"
|
|
:min="0"
|
|
:step="1"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item
|
|
v-if="config.isTitle&&config.type!='GcBorder11'"
|
|
:label-width="labelWidth"
|
|
label="标题字体大小"
|
|
>
|
|
<el-input-number
|
|
v-model="config.fontSize"
|
|
class="bs-el-input-number"
|
|
:min="0"
|
|
:step="1"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item
|
|
v-if="config.isTitle&&config.type!='GcBorder11'"
|
|
:label-width="labelWidth"
|
|
label="标题颜色"
|
|
>
|
|
<el-color-picker
|
|
v-model="config.fontColor"
|
|
popper-class="bs-el-color-picker"
|
|
class="bs-el-color-picker"
|
|
show-alpha
|
|
/>
|
|
</el-form-item>
|
|
<!-- <el-form-item
|
|
v-if="config.type=='GcBorder15'"
|
|
:label-width="labelWidth"
|
|
label="外侧边框线宽度"
|
|
>
|
|
<el-input-number
|
|
v-model="borderWidth"
|
|
class="bs-el-input-number"
|
|
:step="1"
|
|
:min="0"
|
|
:max="100000"
|
|
/>
|
|
</el-form-item> -->
|
|
<div
|
|
v-for="(setting, settingIndex) in list.setting"
|
|
:key="settingIndex+1"
|
|
>
|
|
<el-form-item
|
|
:label="setting.type=== 'padding' ? '' : setting.label"
|
|
:label-width="labelWidth"
|
|
>
|
|
<el-input
|
|
v-if="setting.type === 'input'"
|
|
v-model="config[setting.field]"
|
|
:placeholder="`请输入${setting.label}`"
|
|
clearable
|
|
/>
|
|
<el-input
|
|
v-model="config[setting.field]"
|
|
v-else-if="setting.type === 'background'"
|
|
clearable
|
|
placeholder="选择或输入链接"
|
|
>
|
|
<template slot="append">
|
|
<el-button
|
|
size="small"
|
|
type="primary"
|
|
@click="initCard"
|
|
>
|
|
选择
|
|
</el-button>
|
|
</template>
|
|
</el-input>
|
|
<el-button
|
|
v-else-if="setting.type === 'move'"
|
|
type="primary"
|
|
@click="initMove(config.imgUrl)"
|
|
>
|
|
图形切割
|
|
</el-button>
|
|
<el-select
|
|
v-else-if="setting.type === 'select'"
|
|
v-model="config[setting.field]"
|
|
popper-class="bs-el-select"
|
|
class="bs-el-select"
|
|
:placeholder="`请选择${setting.label}`"
|
|
:multiple="setting.multiple"
|
|
clearable
|
|
>
|
|
<el-option
|
|
v-for="(opt, optIndex) in setting.options"
|
|
:key="optIndex"
|
|
:label="opt.label"
|
|
:value="opt.value"
|
|
/>
|
|
</el-select>
|
|
<template v-else-if="setting.type === 'colorSelect'">
|
|
<color-select
|
|
v-model="colorScheme"
|
|
@update="updateColorScheme"
|
|
/>
|
|
<div
|
|
style="
|
|
display: flex;
|
|
align-items: center;
|
|
flex-wrap: wrap;
|
|
"
|
|
class="color-picker-box"
|
|
>
|
|
<el-color-picker
|
|
v-for="(colorItem, colorItemIndex) in colors"
|
|
:key="colorItemIndex"
|
|
v-model="setting.value[colorItemIndex]"
|
|
popper-class="bs-el-color-picker"
|
|
show-alpha
|
|
class="start-color"
|
|
/>
|
|
<span
|
|
class="el-icon-circle-plus-outline"
|
|
style="color: #007aff; font-size: 20px"
|
|
@click="addColor"
|
|
/>
|
|
<span
|
|
v-if="colors.length"
|
|
class="el-icon-remove-outline"
|
|
style="color: #ea0b30; font-size: 20px"
|
|
@click="delColor()"
|
|
/>
|
|
</div>
|
|
</template>
|
|
<el-color-picker
|
|
v-else-if="setting.type === 'colorPicker'"
|
|
v-model="config[setting.field]"
|
|
popper-class="bs-el-color-picker"
|
|
class="bs-el-color-picker"
|
|
show-alpha
|
|
/>
|
|
<BorderColorSetting
|
|
v-else-if="setting.type === 'gradual'"
|
|
v-model="config[setting.field]"
|
|
/>
|
|
<el-input-number
|
|
v-else-if="setting.type === 'inputNumber'"
|
|
v-model="config[setting.field]"
|
|
class="bs-el-input-number"
|
|
:step="setting.step || 1"
|
|
:min="setting.min || 0"
|
|
:max="setting.max || 100000"
|
|
/>
|
|
<el-radio-group
|
|
v-else-if="setting.type === 'radio'"
|
|
v-model="config[setting.field]"
|
|
class="bs-el-radio-group"
|
|
>
|
|
<template v-for="(opt, optIndex) in setting.options">
|
|
<el-radio-button
|
|
:key="optIndex"
|
|
:label="opt.value"
|
|
>
|
|
{{ opt.label }}
|
|
</el-radio-button>
|
|
</template>
|
|
</el-radio-group>
|
|
<el-switch
|
|
v-else-if="setting.type === 'switch'"
|
|
v-model="config[setting.field]"
|
|
class="bs-el-switch"
|
|
:active-value="setting.active"
|
|
:inactive-value="setting.inactive"
|
|
/>
|
|
<el-slider
|
|
v-else-if="setting.type === 'slider'"
|
|
v-model="config[setting.field]"
|
|
:min="0"
|
|
:max="1"
|
|
:step="0.01"
|
|
/>
|
|
<PaddingSetting
|
|
v-else-if="setting.type === 'padding'"
|
|
v-model="config[setting.field]"
|
|
/>
|
|
</el-form-item>
|
|
</div>
|
|
<SourceDialog ref="SourceDialog" @getImg='changeImg' />
|
|
<MoveDialog @getArray='changeBorder' ref="MoveDialog"/>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
import _ from 'lodash'
|
|
import plotList from 'data-room-ui/BorderComponents/settingList.js'
|
|
import BorderColorSetting from 'data-room-ui/BigScreenDesign/RightSetting/BorderColorSetting/index.vue'
|
|
import ColorSelect from 'data-room-ui/ColorMultipleSelect/index.vue'
|
|
import BorderSelect from 'data-room-ui/BorderSelect/index.vue'
|
|
import SourceDialog from '../SourceDialog/index.vue'
|
|
import MoveDialog from './MoveDialog/index.vue'
|
|
export default {
|
|
name: '',
|
|
components: {
|
|
BorderSelect,
|
|
ColorSelect,
|
|
BorderColorSetting,
|
|
SourceDialog,
|
|
MoveDialog
|
|
},
|
|
props: {
|
|
bigTitle:{
|
|
type: String,
|
|
default: ''
|
|
},
|
|
config: {
|
|
type: Object,
|
|
default: () => ({
|
|
type: '',
|
|
titleHeight: 0,
|
|
fontSize: 0,
|
|
h: 0,
|
|
})
|
|
},
|
|
labelWidth: {
|
|
type: String,
|
|
default: '100px'
|
|
}
|
|
},
|
|
watch:{
|
|
// borderWidth:{
|
|
// handler (val) {
|
|
// this.config.borderWidth=val
|
|
// }
|
|
// },
|
|
'config.type':{
|
|
handler (val) {
|
|
this.config.isTitle=this.list.isTitle
|
|
plotList[Symbol.iterator]=function*(){
|
|
let keys=Object.keys(plotList)
|
|
for(let k of keys){
|
|
yield [k,plotList[k]]
|
|
}
|
|
}
|
|
for(let [key,value] of plotList){
|
|
if(value.padding&&val==value.type){
|
|
this.config.padding=[...value.padding]
|
|
}
|
|
if(value.type==this.config.type){
|
|
value.setting.forEach((item)=>{
|
|
this.$set(this.config,item.field,item.value)
|
|
})
|
|
}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
computed:{
|
|
title:{
|
|
set(){
|
|
this.config.type=''
|
|
this.config.padding=[16,16,16,16]
|
|
},
|
|
get(){
|
|
plotList[Symbol.iterator]=function*(){
|
|
let keys=Object.keys(plotList)
|
|
for(let k of keys){
|
|
yield [k,plotList[k]]
|
|
}
|
|
}
|
|
let name
|
|
for(let [key,value] of plotList){
|
|
if(value.type==this.config.type){
|
|
name=value.name
|
|
}
|
|
}
|
|
return name
|
|
}
|
|
},
|
|
list(){
|
|
plotList[Symbol.iterator]=function*(){
|
|
let keys=Object.keys(plotList)
|
|
for(let k of keys){
|
|
yield [k,plotList[k]]
|
|
}
|
|
}
|
|
let obj={}
|
|
for(let [key,value] of plotList){
|
|
if(value.type==this.config.type){
|
|
obj={setting:value.setting,isTitle:value.isTitle}
|
|
}
|
|
}
|
|
return obj
|
|
}
|
|
},
|
|
data () {
|
|
return {
|
|
// borderWidth:0
|
|
}
|
|
},
|
|
mounted () {
|
|
// if(this.config.borderWidth){
|
|
// this.borderWidth=this.config.borderWidth
|
|
// }
|
|
},
|
|
methods: {
|
|
changeBorder(val){
|
|
this.$set(this.config,'borderArray',val)
|
|
},
|
|
changeImg(val){
|
|
this.$set(this.config,'imgUrl',val.url)
|
|
},
|
|
init(){
|
|
this.$refs.BorderSelect.init()
|
|
},
|
|
initCard(){
|
|
this.$refs.SourceDialog.init()
|
|
},
|
|
initMove(val){
|
|
this.$refs.MoveDialog.init(val,this.config.borderArray)
|
|
}
|
|
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
::v-deep .el-color-picker__trigger {
|
|
border-color: var(--bs-el-border);
|
|
}
|
|
::v-deep .el-input--suffix .el-input__inner{
|
|
padding-right: 10px !important;
|
|
}
|
|
.color-picker-box{
|
|
::v-deep .el-color-picker__trigger {
|
|
width: 27px!important;
|
|
}
|
|
}
|
|
</style>
|