69 lines
2.0 KiB
JavaScript
69 lines
2.0 KiB
JavaScript
import { VantComponent } from '../common/component';
|
|
import { button } from '../mixins/button';
|
|
import { openType } from '../mixins/open-type';
|
|
VantComponent({
|
|
mixins: [button, openType],
|
|
classes: ['hover-class', 'loading-class'],
|
|
data: {
|
|
style: ''
|
|
},
|
|
props: {
|
|
icon: String,
|
|
plain: Boolean,
|
|
block: Boolean,
|
|
round: Boolean,
|
|
square: Boolean,
|
|
loading: Boolean,
|
|
hairline: Boolean,
|
|
disabled: Boolean,
|
|
loadingText: String,
|
|
customStyle: String,
|
|
loadingType: {
|
|
type: String,
|
|
value: 'circular'
|
|
},
|
|
type: {
|
|
type: String,
|
|
value: 'default'
|
|
},
|
|
size: {
|
|
type: String,
|
|
value: 'normal'
|
|
},
|
|
loadingSize: {
|
|
type: String,
|
|
value: '20px'
|
|
},
|
|
color: {
|
|
type: String,
|
|
observer(color) {
|
|
let style = '';
|
|
if (color) {
|
|
style += `color: ${this.data.plain ? color : 'white'};`;
|
|
if (!this.data.plain) {
|
|
// Use background instead of backgroundColor to make linear-gradient work
|
|
style += `background: ${color};`;
|
|
}
|
|
// hide border when color is linear-gradient
|
|
if (color.indexOf('gradient') !== -1) {
|
|
style += 'border: 0;';
|
|
}
|
|
else {
|
|
style += `border-color: ${color};`;
|
|
}
|
|
}
|
|
if (style !== this.data.style) {
|
|
this.setData({ style });
|
|
}
|
|
}
|
|
}
|
|
},
|
|
methods: {
|
|
onClick() {
|
|
if (!this.data.disabled && !this.data.loading) {
|
|
this.$emit('click');
|
|
}
|
|
}
|
|
}
|
|
});
|