update ColorPicker

This commit is contained in:
梁灏 2017-08-18 17:33:19 +08:00
parent 8105945f4f
commit 4109bbc6c1
3 changed files with 85 additions and 48 deletions

View file

@ -2,13 +2,13 @@
<div style="margin: 100px;">
{{ color }}
<!--<Input placeholder="请输入..." size="large" style="width: 50px;"></Input>-->
<!--<color-picker placement="bottom-start" size="large"></color-picker>-->
<Date-picker transfer type="date" placeholder="选择日期" size="large" style="width: 200px"></Date-picker>
<color-picker v-model="color" placement="bottom-start" size="large"></color-picker>
<Date-picker transfer type="date" placeholder="选择日期" style="width: 200px"></Date-picker>
<color-picker :transfer="true" ref="xxx" v-model="color" format="rgb" alpha :recommend="true"></color-picker>
<color-picker v-model="color2" :alpha="false" :recommend="false"></color-picker>
<color-picker v-model="color2" format="hsv" :alpha="true" :recommend="false"></color-picker>
<!--<Date-picker type="date" placeholder="选择日期" style="width: 200px"></Date-picker>-->
<!--<color-picker placement="bottom-start" size="small"></color-picker>-->
<!--<Date-picker type="date" placeholder="选择日期" size="small" style="width: 200px"></Date-picker>-->
<color-picker v-model="color" placement="bottom-start" size="small"></color-picker>
<Date-picker type="date" placeholder="选择日期" size="small" style="width: 200px"></Date-picker>
<Button @click="setColor">set color</Button>
</div>
</template>
@ -17,7 +17,7 @@
props: {},
data () {
return {
color: 'rgba(255,255,255,.85)',
color: 'rgba(12,34,255,.85)',
color2: ''
};
},

View file

@ -1,17 +1,26 @@
<template>
<Dropdown :class="classes" class-name="ivu-transfer-" ref="picker" trigger="click" :transfer="transfer" :placement="placement" @on-visible-change="handleToggleVisible">
<div :class="wrapClasses">
<div :class="classes" v-clickoutside="handleClose">
<div ref="reference" @click="toggleVisible" :class="wrapClasses">
<i class="ivu-icon ivu-icon-arrow-down-b ivu-input-icon ivu-input-icon-normal"></i>
<div :class="inputClasses">
<div :class="[prefixCls + '-color']">
<div :class="[prefixCls + '-color-empty']" v-show="value === '' && !visible">
<Icon type="ios-close-empty"></Icon>
<i class="ivu-icon ivu-icon-ios-close-empty"></i>
</div>
<div v-show="value || visible" :style="{backgroundColor: displayedColor}"></div>
</div>
</div>
</div>
<Dropdown-menu slot="list">
<transition :name="transition">
<Drop
v-show="visible"
@click.native="handleTransferClick"
:class="{ [prefixCls + '-transfer']: transfer }"
class-name="ivu-transfer-no-max-height"
:placement="placement"
ref="drop"
:data-transfer="transfer"
v-transfer-dom>
<div :class="[prefixCls + '-picker']">
<div :class="[prefixCls + '-picker-wrapper']">
<div :class="[prefixCls + '-picker-panel']">
@ -39,18 +48,19 @@
<Confirm @on-pick-success="handleSuccess" @on-pick-clear="handleClear"></Confirm>
</div>
</div>
</Dropdown-menu>
</Dropdown>
</Drop>
</transition>
</div>
</template>
<script>
import tinycolor from 'tinycolor2';
import Icon from '../icon/icon.vue';
import Dropdown from '../dropdown/dropdown.vue';
import DropdownMenu from '../dropdown/dropdown-menu.vue';
import clickoutside from '../../directives/clickoutside';
import TransferDom from '../../directives/transfer-dom';
import Drop from '../../components/select/dropdown.vue';
import RecommendColors from './recommend-colors.vue';
import Confirm from '../date-picker/base/confirm.vue';
import Saturation from './saturation.vue';
import Hue from './hue.vue';
import Alpha from './alpha.vue';
@ -111,7 +121,8 @@
export default {
name: 'ColorPicker',
components: { Icon, Dropdown, DropdownMenu, Confirm, RecommendColors, Saturation, Hue, Alpha },
components: { Drop, Confirm, RecommendColors, Saturation, Hue, Alpha },
directives: { clickoutside, TransferDom },
props: {
value: {
type: String
@ -142,7 +153,8 @@
size: {
validator (value) {
return oneOf(value, ['small', 'large', 'default']);
}
},
default: 'default'
},
placement: {
validator (value) {
@ -160,6 +172,7 @@
val: _colorChange(this.value),
prefixCls: prefixCls,
visible: false,
disableCloseUnderTransfer: false, // transfer Drop
recommendedColor: [
'#2d8cf0',
'#19be6b',
@ -189,6 +202,13 @@
};
},
computed: {
transition () {
if (this.placement === 'bottom-start' || this.placement === 'bottom' || this.placement === 'bottom-end') {
return 'slide-up';
} else {
return 'fade';
}
},
saturationColors: {
get () {
return this.val;
@ -266,11 +286,30 @@
value (newVal) {
this.val = _colorChange(newVal);
},
visible () {
visible (val) {
this.val = _colorChange(this.value);
if (val) {
this.$refs.drop.update();
} else {
this.$refs.drop.destroy();
}
}
},
methods: {
// transfer Drop
handleTransferClick () {
if (this.transfer) this.disableCloseUnderTransfer = true;
},
handleClose () {
if (this.disableCloseUnderTransfer) {
this.disableCloseUnderTransfer = false;
return false;
}
this.visible = false;
},
toggleVisible () {
this.visible = !this.visible;
},
childChange (data) {
this.colorChange(data);
},
@ -300,18 +339,15 @@
return data;
}
},
handleToggleVisible (visible) {
this.visible = visible;
},
handleSuccess () {
const color = this.formatColor;
this.$emit('input', color);
this.$emit('on-change', color);
this.$refs.picker.handleClose();
this.handleClose();
},
handleClear () {
this.$emit('input', '');
this.$refs.picker.handleClose();
this.handleClose();
},
handleSelectColor (color) {
this.val = _colorChange(color);

View file

@ -1,6 +1,7 @@
@color-picker-prefix-cls: ~"@{css-prefix}color-picker";
.@{color-picker-prefix-cls} {
display: inline-block;
& .@{select-dropdown-prefix-cls} {
padding: 0;
}