index.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <template>
  2. <div class="basic-component-input">
  3. <span
  4. v-if="config.customize.showTitle"
  5. class="title-left"
  6. :style="{ marginRight: config.customize.titleStyle.marginRight + 'px', fontSize: config.customize.titleStyle.fontSize + 'px', color: config.customize.titleStyle.color }"
  7. >
  8. {{ config.customize.title }}
  9. </span>
  10. <el-input
  11. :id="`el-input-${config.code}`"
  12. v-model="config.customize.value"
  13. type="text"
  14. resize="both"
  15. class="input"
  16. :placeholder="config.customize.placeholderStyle.placeholder"
  17. :style="{ backgroundColor: config.customize.backgroundStyle.backgroundColor }"
  18. >
  19. <i
  20. v-if="config.customize.icon.position === 'left' && config.customize.icon.name"
  21. slot="prefix"
  22. class="el-input__icon"
  23. :class="config.customize.icon.position === 'left' ? config.customize.icon.name : ''"
  24. />
  25. <i
  26. v-if="config.customize.icon.position === 'right' && config.customize.icon.name"
  27. slot="suffix"
  28. class="el-input__icon"
  29. :class="config.customize.icon.position === 'right' ? config.customize.icon.name : ''"
  30. />
  31. </el-input>
  32. </div>
  33. </template>
  34. <script>
  35. import commonMixins from 'data-room-ui/js/mixins/commonMixins'
  36. import linkageMixins from 'data-room-ui/js/mixins/linkageMixins'
  37. import {settingToTheme} from "data-room-ui/js/utils/themeFormatting";
  38. import _ from "lodash";
  39. export default {
  40. name: 'BasicComponentInput',
  41. mixins: [commonMixins, linkageMixins],
  42. props: {
  43. // 卡片的属性
  44. config: {
  45. type: Object,
  46. default: () => ({})
  47. }
  48. },
  49. data () {
  50. return { }
  51. },
  52. watch: {
  53. 'config.customize.value': {
  54. handler (val) {
  55. this.$store.commit('bigScreen/changeActiveItemConfig', { ...this.config, customize: { ...this.config.customize, value: this.config.customize.value } })
  56. }
  57. }
  58. },
  59. mounted () {
  60. this.chartInit()
  61. // this.changeStyle()
  62. },
  63. methods: {
  64. changeStyle (config) {
  65. config = { ...this.config, ...config }
  66. const input = document.querySelector(`#el-input-${config.code}`)
  67. // const inputIcon = input.querySelector(`.${this.config.customize.icon.name}`)
  68. input.style.backgroundColor = config.customize.backgroundStyle.backgroundColor
  69. input.style.fontSize = config.customize.inputStyle.fontSize + 'px'
  70. input.style.color = config.customize.inputStyle.color
  71. input.style.borderColor = config.customize.borderStyle.borderColor
  72. input.style.borderWidth = config.customize.borderStyle.borderWidth + 'px'
  73. input.style.borderStyle = config.customize.borderStyle.borderStyle
  74. input.style.borderRadius = config.customize.borderStyle.borderRadius + 'px'
  75. // inputIcon.style.fontSize = this.config.customize.inputStyle.fontSize + 'px'
  76. if (config.customize.icon.name) {
  77. const inputIcon = document.querySelector(`.${config.customize.icon.name}`)
  78. inputIcon.style.fontSize = config.customize.inputStyle.fontSize + 'px'
  79. }
  80. // 样式改变时更新主题配置
  81. config.theme = settingToTheme(_.cloneDeep(config), this.customTheme)
  82. this.changeChartConfig(config)
  83. // if (config.code === this.activeCode) {
  84. // this.changeActiveItemConfig(config)
  85. // }
  86. }
  87. }
  88. }
  89. </script>
  90. <style lang="scss" scoped>
  91. .basic-component-input {
  92. width: 100%;
  93. display: flex;
  94. .title-left {
  95. display: block;
  96. white-space: nowrap;
  97. align-self: center;
  98. }
  99. // .title-top{
  100. // display: block;
  101. // text-align: center;
  102. // white-space: nowrap;
  103. // }
  104. .el-input {
  105. height: 100%;
  106. width: 100%;
  107. ::v-deep .el-input__inner {
  108. height: 100%;
  109. width: 100%;
  110. background-color:#151a26;
  111. border: 1px solid #DCDFE6;
  112. }
  113. }
  114. }
  115. </style>