123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- <template>
- <div class="basic-component-input">
- <span
- v-if="config.customize.showTitle"
- class="title-left"
- :style="{ marginRight: config.customize.titleStyle.marginRight + 'px', fontSize: config.customize.titleStyle.fontSize + 'px', color: config.customize.titleStyle.color }"
- >
- {{ config.customize.title }}
- </span>
- <el-input
- :id="`el-input-${config.code}`"
- v-model="config.customize.value"
- type="text"
- resize="both"
- class="input"
- :placeholder="config.customize.placeholderStyle.placeholder"
- :style="{ backgroundColor: config.customize.backgroundStyle.backgroundColor }"
- @input="handleInput"
- >
- <i
- v-if="config.customize.icon.position === 'left' && config.customize.icon.name"
- slot="prefix"
- class="el-input__icon"
- :class="config.customize.icon.position === 'left' ? config.customize.icon.name : ''"
- />
- <i
- v-if="config.customize.icon.position === 'right' && config.customize.icon.name"
- slot="suffix"
- class="el-input__icon"
- :class="config.customize.icon.position === 'right' ? config.customize.icon.name : ''"
- />
- </el-input>
- </div>
- </template>
- <script>
- import commonMixins from 'data-room-ui/js/mixins/commonMixins'
- import linkageMixins from 'data-room-ui/js/mixins/linkageMixins'
- import { settingToTheme } from 'data-room-ui/js/utils/themeFormatting'
- import _ from 'lodash'
- export default {
- name: 'BasicComponentInput',
- mixins: [commonMixins, linkageMixins],
- props: {
- // 卡片的属性
- config: {
- type: Object,
- default: () => ({})
- }
- },
- data () {
- return {
- timer: null
- }
- },
- watch: {
- 'config.customize': {
- handler () {
- this.changeStyle(this.config, true)
- },
- deep: true
- }
- },
- mounted () {
- this.chartInit()
- },
- beforeDestroy () {
- // 销毁时清除定时器
- clearTimeout(this.timer)
- },
- methods: {
- changeStyle (config, isUpdateTheme) {
- config = { ...this.config, ...config }
- const input = document.querySelector(`#el-input-${config.code}`)
- // const inputIcon = input.querySelector(`.${this.config.customize.icon.name}`)
- input.style.backgroundColor = config.customize.backgroundStyle.backgroundColor
- input.style.fontSize = config.customize.inputStyle.fontSize + 'px'
- input.style.color = config.customize.inputStyle.color
- input.style.borderColor = config.customize.borderStyle.borderColor
- input.style.borderWidth = config.customize.borderStyle.borderWidth + 'px'
- input.style.borderStyle = config.customize.borderStyle.borderStyle
- input.style.borderRadius = config.customize.borderStyle.borderRadius + 'px'
- // inputIcon.style.fontSize = this.config.customize.inputStyle.fontSize + 'px'
- if (config.customize.icon.name) {
- const inputIcon = document.querySelector(`.${config.customize.icon.name}`)
- inputIcon.style.fontSize = config.customize.inputStyle.fontSize + 'px'
- }
- // 只有样式改变时更新主题配置,切换主题时不需要保存
- if (!isUpdateTheme) {
- config.theme = settingToTheme(_.cloneDeep(config), this.customTheme)
- this.changeChartConfig(config)
- if (config.code === this.activeCode) {
- this.changeActiveItemConfig(config)
- }
- }
- },
- handleInput (val) {
- // 提供一个防抖的方法
- this.debounce(() => {
- this.linkage({ [this.config.code]: val })
- })
- },
- debounce (fn, delay = 500) {
- clearTimeout(this.timer)
- this.timer = setTimeout(() => {
- fn()
- }, delay)
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .basic-component-input {
- width: 100%;
- display: flex;
- .title-left {
- display: block;
- white-space: nowrap;
- align-self: center;
- }
- // .title-top{
- // display: block;
- // text-align: center;
- // white-space: nowrap;
- // }
- .el-input {
- height: 100%;
- width: 100%;
- ::v-deep .el-input__inner {
- height: 100%;
- width: 100%;
- background-color:#151a26;
- border: 1px solid #DCDFE6;
- }
- }
- }
- </style>
|