<template> <div class="bs-setting-wrap"> <el-form ref="form" :model="config" label-width="90px" label-position="left" class="setting-body bs-el-form" > <SettingTitle>标题</SettingTitle> <div class="lc-field-body"> <el-form-item label="标题" label-width="100px" > <el-input v-model="config.title" placeholder="请输入标题" clearable /> </el-form-item> </div> <SettingTitle>位置</SettingTitle> <div class="lc-field-body"> <PosWhSetting :config="config" /> </div> <SettingTitle v-if="config.border">边框</SettingTitle> <div class="lc-field-body"> <BorderSetting v-if="config.border" label-width="100px" :config="config.border" :bigTitle='config.title' /> </div> <!-- <SettingTitle>旋转</SettingTitle> <div class="lc-field-body"> <RotateSetting :config="config" /> </div> --> <SettingTitle>基础</SettingTitle> <div class="lc-field-body"> <el-form-item label="是否显示地名" label-width="100px" > <el-switch v-model="config.customize.mapName" class="bs-el-switch" active-color="#007aff" /> </el-form-item> <el-form-item label="地图级别" label-width="100px" > <el-select v-model="config.customize.level" popper-class="bs-el-select" class="bs-el-select" @change="changeLevel()" > <el-option v-for="level in levelList" :key="level.value" :label="level.label" :value="level.value" /> </el-select> </el-form-item> <el-form-item label="地图" label-width="100px" > <el-cascader ref="cascade" v-model="config.customize.mapId" popper-class="bs-el-cascader" :options="mapTree" :props="{ value: 'id', label: 'name', children: 'children', emitPath: false }" @change="mapSelect"> <template slot-scope="{ node, data }"> <span style="float: left">{{ data.name }}</span> <span v-if="data.disabled" style="float: right; color: #8492a6; font-size: 13px"> 未配置 </span> </template> </el-cascader> </el-form-item> <el-form-item label="是否开启下钻" label-width="100px" > <el-switch v-model="config.customize.down" class="bs-el-switch" active-color="#007aff" /> </el-form-item> <el-form-item v-if="config.customize.down" label="允许下钻层级" label-width="100px" > <el-select v-model="config.customize.downLevel" popper-class="bs-el-select" class="bs-el-select"> <el-option v-for="level in downLevelList" :key="level.value" :label="level.label" :value="level.value" /> </el-select> </el-form-item> <el-form-item label="比例" label-width="100px" > <el-slider v-model="config.customize.zoom" class="bs-el-slider-dark" :step="0.1" :min="0.1" :max="5" ></el-slider> </el-form-item> <el-form-item label="中心点横向偏移" label-width="100px" > <el-slider class="bs-el-slider-dark" v-model="config.customize.center1" :step="1" :min="1" :max="100" ></el-slider> </el-form-item> <el-form-item label="中心点纵向偏移" label-width="100px" > <el-slider class="bs-el-slider-dark" v-model="config.customize.center2" :step="1" :min="1" :max="100" ></el-slider> </el-form-item> <el-form-item v-if="config.customize.down" label="头部字体颜色" label-width="100px" > <ColorPicker v-model="config.customize.fontGraphicColor" :predefine-colors="predefineThemeColors" /> </el-form-item> <el-form-item v-if="config.customize.down" label="头部字体大小" label-width="100px" > <el-input-number v-model="config.customize.fontSize" placeholder="请输入字体大小" controls-position="right" :step="1" /> </el-form-item> <el-form-item label="地图背景色" label-width="100px" > <ColorPicker v-model="config.customize.backgroundColor" :predefine-colors="predefineThemeColors" /> </el-form-item> <el-form-item label="地图分割线颜色" label-width="100px" > <ColorPicker v-model="config.customize.mapLineColor" :predefine-colors="predefineThemeColors" /> </el-form-item> <el-form-item label="地图分割块颜色" label-width="100px" > <ColorPicker v-model="config.customize.areaColor" :predefine-colors="predefineThemeColors" /> </el-form-item> <el-form-item label="是否打点" label-width="100px" > <el-switch v-model="config.customize.scatter" class="bs-el-switch" active-color="#007aff" /> </el-form-item> <el-form-item v-if="config.customize.scatter" label="打点图背景色" label-width="100px" > <ColorPicker v-model="config.customize.scatterBackgroundColor" :predefine-colors="predefineThemeColors" /> </el-form-item> <el-form-item v-if="config.customize.scatter" label="打点图文字颜色" label-width="100px" > <ColorPicker v-model="config.customize.scatterColor" :predefine-colors="predefineThemeColors" /> </el-form-item> <el-form-item v-if="!config.customize.scatter" label="悬浮框背景色" label-width="100px" > <ColorPicker v-model="config.customize.tooltipBackgroundColor" :predefine-colors="predefineThemeColors" /> </el-form-item> <el-form-item v-if="!config.customize.scatter" label="悬浮框边框色" label-width="100px" > <ColorPicker v-model="config.customize.borderColor" :predefine-colors="predefineThemeColors" /> </el-form-item> <el-form-item label="是否开启筛选" label-width="100px" > <el-switch v-model="config.customize.visual" class="bs-el-switch" active-color="#007aff" /> </el-form-item> <el-form-item v-if="config.customize.visual" label="数值范围" label-width="100px" > <el-input-number v-model="config.customize.range[0]" placeholder="请输入最小值" controls-position="right" :step="1" /> - <el-input-number v-model="config.customize.range[1]" controls-position="right" placeholder="请输入最大值" :step="1" /> </el-form-item> <el-form-item v-if="config.customize.visual" label="配色方案" label-width="100px" > <color-select v-model="config.customize.rangeColor" @update="updateColorScheme" /> <div style=" display: flex; align-items: center; height: 42px; flex-wrap: wrap; " > <el-color-picker v-for="(colorItem, index) in colors" :key="index" v-model="config.customize.rangeColor[index]" show-alpha popper-class="bs-el-color-picker" class="start-color bs-el-color-picker" /> <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> </el-form-item> </div> </el-form> </div> </template> <script> 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 BorderSetting from 'data-room-ui/BigScreenDesign/RightSetting/BorderSetting.vue' import PosWhSetting from 'data-room-ui/BigScreenDesign/RightSetting/PosWhSetting.vue' import RotateSetting from 'data-room-ui/BigScreenDesign/RightSetting/RotateSetting.vue' import {predefineColors} from "data-room-ui/js/utils/colorList"; export default { name: 'BarSetting', components: { ColorSelect, ColorPicker, PosWhSetting, SettingTitle, BorderSetting, RotateSetting }, mixins: [chartSettingMixins], props: {}, data () { return { mapList: [], predefineThemeColors: predefineColors, mapTree: [], currentMap: {}, levelList: [ {value: '0', label: '世界'}, {value: '1', label: '国家'}, {value: '2', label: '省份'}, {value: '3', label: '城市'}, {value: '4', label: '区县'} ], // 旧版本地图等级,该数据用于兼容旧版本 oldLevelMap: { 'world' : '0', 'country' : '1', 'province' : '2', }, downLevelList: [ {value: 1, label: '下钻一层'}, {value: 2, label: '下钻两层'}, {value: 3, label: '下钻三层'}, {value: 4, label: '下钻四层'}, {value: 5, label: '下钻五层'} ], } }, computed: { config: { get () { return this.$store.state.bigScreen.activeItemConfig }, set (val) { this.$store.state.bigScreen.activeItemConfig = val } } }, watch: {}, mounted () { this.getMapTree() }, methods: { getMapTree() { const levelConst = ['0', '1', '2', '3', '4'] if (!levelConst.includes(this.config.customize.level)) { this.config.customize.level = this.oldLevelMap[this.config.customize.level] || '0' } this.$dataRoomAxios.get(`${window.BS_CONFIG?.httpConfigs?.baseURL}/bigScreen/map/tree/${this.config.customize.level}`).then((res) => { this.mapTree = res }) }, mapSelect (mapId) { let mapData = this.$refs['cascade'].getCheckedNodes()[0].data this.currentMap = mapData }, changeMap(val){ this.config.customize.scope=val.slice(0,-5) }, changeLevel () { this.getMapTree() }, delColor () { this.colors = [] this.config.customize.rangeColor = [] }, addColor () { this.colors.push('') }, updateColorScheme (colors) { this.colors = [...colors] this.config.customize.rangeColor = [...colors] } } } </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; } ::v-deep.bs-el-slider-dark { .el-slider__runway { background-color: var(--bs-el-background-1) !important; } } </style>