Commit d411992d07dd1f193844cf862982152154c92491

Authored by Aresn
Committed by GitHub
2 parents 8249a857 a7dc3691

Merge pull request #4353 from icarusion/ColorPicker-add-editable-prop

ColorPicker add editable prop
examples/routers/color-picker.vue
1 1 <template>
2 2 <div style="margin: 100px;">
3   - {{color}}
4   - <!--<Input placeholder="请输入..." size="large" style="width: 50px;"></Input>-->
5   - <color-picker
6   - v-model="color"
7   - placement="bottom-start"
8   - @on-change="c1"
9   - @on-active-change="c2"></color-picker>
10   - <Input value="hello" style="display: inline-block" />
11   - <Date-picker
12   - type="date"
13   - placeholder="选择日期"
14   - style="width: 200px"></Date-picker>
15   - <color-picker
16   - ref="xxx"
17   - v-model="color"
18   - :recommend="true"
19   - format="rgb"
20   - alpha
21   - @on-change="onChange"
22   - @on-active-change="onActiveChange"></color-picker>
23   - <color-picker
24   - v-model="color2"
25   - :alpha="true"
26   - :recommend="false"
27   - format="hsv"></color-picker>
28   - <!--<Date-picker type="date" placeholder="选择日期" style="width: 200px"></Date-picker>-->
29   - <color-picker
30   - v-model="color"
31   - placement="bottom-start"
32   - ></color-picker>
33   - <Date-picker
34   - type="date"
35   - placeholder="选择日期"
36   - style="width: 200px"></Date-picker>
37   - <color-picker
38   - ref="yyy"
39   - :colors="colors"
40   - v-model="color"
41   - format="rgb"
42   - alpha></color-picker>
43   - <Button @click="setColor">set color</Button>
44   -
45   - <br><br><br><br>
46   - {{openState}}
47   - <ColorPicker
48   - v-model="color7"
49   - :hue="false"
50   - @on-open-change="onOpenChange"></ColorPicker>
51   - <ColorPicker
52   - v-model="color7"
53   - :hue="false"
54   - :hide-drop-down="hideDropDown"
55   - @on-open-change="onOpenChange"></ColorPicker>
56   -
57   - <br><br><br><br>
58   - <ColorPicker
59   - v-model="color7"
60   - disabled></ColorPicker>
  3 + {{ color1 }}
  4 + <ColorPicker v-model="color1" />
  5 + <ColorPicker v-model="color2" :editable="false"/>
61 6 </div>
62 7 </template>
63   -
64 8 <script>
65   -export default {
66   - props: {},
67   -
68   - data() {
69   - return {
70   - color: 'rgba(12,34,255,.85)',
71   - color2: '',
72   - color7: '#19be6b',
73   - openState: false,
74   - colors: [
75   - '#2d8cf0',
76   - '#19be6b',
77   - '#ff9900',
78   - '#ed3f14',
79   - '#00b5ff',
80   - '#19c919',
81   - '#f9e31c',
82   - '#ea1a1a',
83   - '#9b1dea',
84   - '#00c2b1',
85   - '#ac7a33',
86   - '#1d35ea',
87   - '#8bc34a',
88   - '#f16b62',
89   - '#ea4ca3',
90   - '#0d94aa',
91   - '#febd79',
92   - '#5d4037',
93   - '#00bcd4',
94   - '#f06292',
95   - '#cddc39',
96   - '#607d8b',
97   - '#000000',
98   - '#ffffff',
99   - '#2d8cf0',
100   - '#19be6b',
101   - '#ff9900',
102   - '#ed3f14',
103   - '#00b5ff',
104   - '#19c919',
105   - '#f9e31c',
106   - '#ea1a1a',
107   - '#9b1dea',
108   - '#00c2b1',
109   - '#ac7a33',
110   - '#1d35ea',
111   - '#8bc34a',
112   - '#f16b62',
113   - '#ea4ca3',
114   - '#0d94aa',
115   - '#febd79',
116   - '#5d4037',
117   - ],
118   - hideDropDown: false,
119   - };
120   - },
121   -
122   - computed: {},
123   -
124   - mounted() {
125   - setInterval(this.toggleShowHide, 2000);
126   - },
127   -
128   - methods: {
129   - setColor() {
130   - this.color = '#26bc77';
131   - },
132   - c1(d) {
133   - console.log(d);
134   - },
135   - c2(d) {
136   - console.log(d);
137   - },
138   - onOpenChange(state) {
139   - this.openState = state;
140   - },
141   - onChange(d) {
142   - console.log(d);
143   - },
144   - onActiveChange(d) {
145   - console.log(d);
146   - },
147   - toggleShowHide() {
148   - this.hideDropDown = !this.hideDropDown;
149   - },
150   - },
151   -};
  9 + export default {
  10 + data () {
  11 + return {
  12 + color1: '#19be6b',
  13 + color2: ''
  14 + };
  15 + }
  16 + };
152 17 </script>
... ...
src/components/color-picker/color-picker.vue
... ... @@ -82,7 +82,12 @@
82 82 @picker-color="handleSelectColor"></recommend-colors>
83 83 </div>
84 84 <div :class="[prefixCls + '-confirm']">
85   - <span :class="[prefixCls + '-confirm-color']">{{formatColor}}</span>
  85 + <span :class="confirmColorClasses">
  86 + <template v-if="editable">
  87 + <i-input :value="formatColor" size="small" @on-enter="handleEditColor" @on-blur="handleEditColor"></i-input>
  88 + </template>
  89 + <template v-else>{{formatColor}}</template>
  90 + </span>
86 91 <i-button
87 92 ref="clear"
88 93 :tabindex="0"
... ... @@ -118,6 +123,7 @@ import RecommendColors from &#39;./recommend-colors.vue&#39;;
118 123 import Saturation from './saturation.vue';
119 124 import Hue from './hue.vue';
120 125 import Alpha from './alpha.vue';
  126 +import iInput from '../input/input.vue';
121 127 import Locale from '../../mixins/locale';
122 128 import {oneOf} from '../../utils/assist';
123 129 import Emitter from '../../mixins/emitter';
... ... @@ -127,7 +133,7 @@ import {changeColor, toRGBAString} from &#39;./utils&#39;;
127 133 export default {
128 134 name: 'ColorPicker',
129 135  
130   - components: {Drop, RecommendColors, Saturation, Hue, Alpha},
  136 + components: {Drop, RecommendColors, Saturation, Hue, Alpha, iInput},
131 137  
132 138 directives: {clickOutside, TransferDom},
133 139  
... ... @@ -209,6 +215,10 @@ export default {
209 215 type: String,
210 216 default: undefined,
211 217 },
  218 + editable: {
  219 + type: Boolean,
  220 + default: true
  221 + },
212 222 },
213 223  
214 224 data() {
... ... @@ -334,6 +344,14 @@ export default {
334 344  
335 345 return saturationColors.hex;
336 346 },
  347 + confirmColorClasses () {
  348 + return [
  349 + `${this.prefixCls}-confirm-color`,
  350 + {
  351 + [`${this.prefixCls}-confirm-color-editable`]: this.editable
  352 + }
  353 + ];
  354 + }
337 355 },
338 356  
339 357 watch: {
... ... @@ -419,6 +437,10 @@ export default {
419 437 this.val = changeColor(color);
420 438 this.$emit('on-active-change', this.formatColor);
421 439 },
  440 + handleEditColor (event) {
  441 + const value = event.target.value;
  442 + this.handleSelectColor(value);
  443 + },
422 444 handleFirstTab(event) {
423 445 if (event.shiftKey) {
424 446 event.preventDefault();
... ...
src/styles/components/color-picker.less
... ... @@ -289,6 +289,10 @@
289 289 position: absolute;
290 290 top: 11px;
291 291 left: 8px;
  292 +
  293 + &-editable{
  294 + top: 8px;
  295 + }
292 296 }
293 297 }
294 298 }
... ...