初始化
This commit is contained in:
@@ -0,0 +1,356 @@
|
||||
<template>
|
||||
<div class="bs-setting-wrap">
|
||||
<el-form
|
||||
ref="form"
|
||||
:model="config"
|
||||
:rules="customRules"
|
||||
label-width="120px"
|
||||
label-position="left"
|
||||
class="setting-body bs-el-form"
|
||||
>
|
||||
<SettingTitle>基础</SettingTitle>
|
||||
<div class="lc-field-body">
|
||||
<el-form-item
|
||||
label="标题"
|
||||
label-width="120px"
|
||||
>
|
||||
<el-input
|
||||
v-model="config.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<SettingTitle>边框</SettingTitle>
|
||||
<div class="lc-field-body">
|
||||
<BorderSetting
|
||||
v-if="config.border"
|
||||
label-width="120px"
|
||||
:config="config.border"
|
||||
:big-title="config.title"
|
||||
/>
|
||||
</div>
|
||||
<SettingTitle>位置</SettingTitle>
|
||||
<div class="lc-field-body">
|
||||
<PosWhSetting
|
||||
label-width="120px"
|
||||
:config="config"
|
||||
/>
|
||||
</div>
|
||||
<SettingTitle>旋转</SettingTitle>
|
||||
<div class="lc-field-body">
|
||||
<RotateSetting
|
||||
:config="config"
|
||||
/>
|
||||
</div>
|
||||
<template v-for="group in groupList">
|
||||
<div :key="group.groupName">
|
||||
<SettingTitle> {{ group.groupName | filterGroupName }}</SettingTitle>
|
||||
<div class="lc-field-body">
|
||||
<div
|
||||
v-for="(setting, settingIndex) in group.list"
|
||||
:key="settingIndex+1"
|
||||
>
|
||||
<el-form-item
|
||||
:label="['padding','appendPadding'].includes(setting.type)? '' : setting.label"
|
||||
:label-width="['padding','appendPadding'].includes(setting.type)? '0px' :'120px'"
|
||||
>
|
||||
<el-input
|
||||
v-if="setting.type === 'input'"
|
||||
v-model="setting.value"
|
||||
:placeholder="`请输入${setting.label}`"
|
||||
clearable
|
||||
/>
|
||||
<el-select
|
||||
v-else-if="setting.type === 'select'"
|
||||
v-model="setting.value"
|
||||
popper-class="bs-el-select"
|
||||
class="bs-el-select"
|
||||
:placeholder="`请选择${setting.label}`"
|
||||
:filterable="setting.filterable"
|
||||
: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="setting.value"
|
||||
@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="setting.value"
|
||||
popper-class="bs-el-color-picker"
|
||||
class="bs-el-color-picker"
|
||||
show-alpha
|
||||
/>
|
||||
<!-- 渐变色设置 -->
|
||||
<GradualSetting
|
||||
v-else-if="setting.type === 'gradual'"
|
||||
v-model="setting.value"
|
||||
/>
|
||||
<el-input-number
|
||||
v-else-if="setting.type === 'inputNumber'"
|
||||
v-model="setting.value"
|
||||
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="setting.value"
|
||||
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="setting.value"
|
||||
class="bs-el-switch"
|
||||
:active-value="setting.active"
|
||||
:inactive-value="setting.inactive"
|
||||
/>
|
||||
<el-slider
|
||||
v-else-if="setting.type === 'slider'"
|
||||
v-model="setting.value"
|
||||
:min="0"
|
||||
:max="1"
|
||||
:step="0.01"
|
||||
/>
|
||||
<PaddingSetting
|
||||
v-else-if="setting.type === 'appendPadding'"
|
||||
v-model="setting.value"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<!-- </div> -->
|
||||
</el-form>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import BorderSetting from 'data-room-ui/BigScreenDesign/RightSetting/BorderSetting.vue'
|
||||
import SettingTitle from 'data-room-ui/SettingTitle/index.vue'
|
||||
import { chartSettingMixins } from 'data-room-ui/js/mixins/chartSettingMixins'
|
||||
import ColorSelect from 'data-room-ui/ColorMultipleSelect/index.vue'
|
||||
// import ColorPicker from 'data-room-ui/ColorPicker/index.vue'
|
||||
import PaddingSetting from 'data-room-ui/BigScreenDesign/RightSetting/PaddingSetting/index.vue'
|
||||
import GradualSetting from 'data-room-ui/BigScreenDesign/RightSetting/GradualSetting/index.vue'
|
||||
import PosWhSetting from 'data-room-ui/BigScreenDesign/RightSetting/PosWhSetting.vue'
|
||||
import RotateSetting from 'data-room-ui/BigScreenDesign/RightSetting/RotateSetting.vue'
|
||||
export default {
|
||||
name: 'CustomComponentSetting',
|
||||
components: {
|
||||
ColorSelect,
|
||||
// ColorPicker,
|
||||
PaddingSetting,
|
||||
GradualSetting,
|
||||
PosWhSetting,
|
||||
BorderSetting,
|
||||
SettingTitle,
|
||||
RotateSetting
|
||||
},
|
||||
mixins: [chartSettingMixins],
|
||||
data () {
|
||||
return {
|
||||
groupList: []
|
||||
}
|
||||
},
|
||||
filters: {
|
||||
filterGroupName (val) {
|
||||
const settingGroup = {
|
||||
basic: '基础',
|
||||
position: '位置',
|
||||
graph: '图表',
|
||||
grid: '网格线',
|
||||
legend: '图例',
|
||||
xAxis: 'X轴',
|
||||
yAxis: 'Y轴',
|
||||
padding: '边距',
|
||||
appendPadding: '内边距',
|
||||
other: '其他'
|
||||
|
||||
}
|
||||
return settingGroup[val]
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
config: {
|
||||
get () {
|
||||
return this.$store.state.bigScreen.activeItemConfig
|
||||
},
|
||||
set (val) {
|
||||
this.$store.commit('bigScreen/changeActiveItemConfig', val)
|
||||
}
|
||||
},
|
||||
appCode: {
|
||||
get () {
|
||||
return this.$store.state.bigScreen.pageInfo.appCode
|
||||
}
|
||||
},
|
||||
pageCode () {
|
||||
return this.$route.query.code
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
groupList: {
|
||||
// 1、原数组,2、修改后的数组只包含custom,3、合并的时候xy的配置必须放在最前面
|
||||
handler (val) {
|
||||
const setList = [].concat(...val.map(item => item.list))
|
||||
const newSetList = [...this.config.setting, ...setList]
|
||||
let newArr = [] // 存新数组
|
||||
const hash = {}
|
||||
newArr = newSetList.reduce(function (acc, cru, index) {
|
||||
if (!hash[cru.field]) {
|
||||
hash[cru.field] = { index: index }
|
||||
acc.push(cru)
|
||||
} else {
|
||||
acc.splice(hash[cru.field].index, 1, cru)
|
||||
}
|
||||
return acc
|
||||
}, [])
|
||||
this.$store.commit('bigScreen/changeActiveItemConfig', { ...this.config, setting: newArr })
|
||||
},
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
this.init()
|
||||
const groupNameList = []
|
||||
this.config.setting.filter(
|
||||
(item) => item.tabName === 'custom'
|
||||
).forEach(item => {
|
||||
if (item.tabName === 'custom' && item.groupName) {
|
||||
if (!groupNameList.includes(item.groupName)) {
|
||||
groupNameList.push(item.groupName)
|
||||
this.groupList.push({
|
||||
groupName: item.groupName,
|
||||
list: [item]
|
||||
})
|
||||
} else {
|
||||
this.groupList.find(group => group.groupName === item.groupName).list.push(item)
|
||||
}
|
||||
} else {
|
||||
if (this.groupList.find(group => group.groupName === 'other')) {
|
||||
this.groupList.find(group => group.groupName === 'other').list.push(item)
|
||||
} else {
|
||||
this.groupList.push({
|
||||
groupName: 'other',
|
||||
list: [item]
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
for (let i = 0; i < this.groupList.length; i++) {
|
||||
if (this.groupList[i].groupName === 'other') {
|
||||
const otherObject = this.groupList.splice(i, 1)[0]
|
||||
this.groupList.push(otherObject)
|
||||
break
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
init () {
|
||||
this.config = this.$store.state.bigScreen.activeItemConfig
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import '../../assets/style/settingWrap.scss';
|
||||
@import '../../assets/style/bsTheme.scss';
|
||||
|
||||
// 筛选条件的按钮样式
|
||||
.add-filter-box {
|
||||
position: relative;
|
||||
|
||||
.add-filter {
|
||||
margin-left: 90px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.add-filter-btn {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.lc-field-body {
|
||||
padding:12px 16px;
|
||||
}
|
||||
.el-form-item{
|
||||
margin-bottom: 6px !important;
|
||||
}
|
||||
.lc-field-title {
|
||||
position: relative;
|
||||
padding-left: 12px;
|
||||
line-height: 30px;
|
||||
height: 30px;
|
||||
margin-bottom: 12px;
|
||||
&:after {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
content: '';
|
||||
width: 4px;
|
||||
height: 14px;
|
||||
background-color: var(--bs-el-color-primary);
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .el-color-picker__trigger {
|
||||
border-color: var(--bs-el-border);
|
||||
}
|
||||
.color-picker-box{
|
||||
::v-deep .el-color-picker__trigger {
|
||||
width: 27px!important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user