index.vue 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <template>
  2. <div class="border-color">
  3. <el-input
  4. v-model="localValue"
  5. :placeholder="placeholder"
  6. clearable
  7. />
  8. <el-color-picker
  9. slot="append"
  10. v-model="localValue"
  11. popper-class="bs-el-color-picker"
  12. show-alpha
  13. :predefine="predefineColors"
  14. />
  15. </div>
  16. </template>
  17. <script>
  18. export default {
  19. name: 'ColorPicker',
  20. props: {
  21. value: {
  22. type: String,
  23. default: ''
  24. }, // v-model 绑定的值
  25. placeholder: {
  26. type: String,
  27. default: ''
  28. }, // 输入框的占位文本
  29. predefineColors: { // 预定义的主题颜色
  30. type: Array,
  31. default: () => [
  32. '#007aff',
  33. '#1aa97b',
  34. '#ff4d53',
  35. '#1890FF',
  36. '#DF0E1B',
  37. '#0086CC',
  38. '#2B74CF',
  39. '#00BC9D',
  40. '#ED7D32'
  41. ]
  42. }
  43. },
  44. data () {
  45. return {
  46. localValue: this.value
  47. }
  48. },
  49. watch: {
  50. value (newValue) {
  51. this.localValue = newValue
  52. },
  53. localValue (newValue) {
  54. this.$emit('input', newValue)
  55. }
  56. }
  57. }
  58. </script>
  59. <style lang="scss"></style>
  60. <style lang="scss" scoped>
  61. .border-color {
  62. display: flex;
  63. ::v-deep .el-input {
  64. width: auto;
  65. position: relative;
  66. margin-right: 5px;
  67. .el-input__inner {
  68. height: 32.5px;
  69. }
  70. }
  71. .el-input-group__append {
  72. width: 32.5px;
  73. height: 32.5px;
  74. background-color: var(--bs-background-1);
  75. .el-color-picker--mini {
  76. position: absolute;
  77. top: 1px;
  78. left: 7px;
  79. }
  80. }
  81. ::v-deep .el-color-picker__trigger {
  82. width: 32.5px;
  83. height: 32.5px;
  84. border-color: var(--bs-el-border);
  85. background-color: var(--bs-background-1);
  86. }
  87. }
  88. </style>