You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
495 lines
9.6 KiB
495 lines
9.6 KiB
<template> |
|
<button class="tui-btn" :class="[plain ? 'tui-' + type + '-outline' : 'tui-btn-' + (type || 'primary'), getDisabledClass(disabled, type, plain), getShapeClass(shape, plain), getShadowClass(type, shadow, plain), bold ? 'tui-text-bold' : '', link ? 'tui-btn__link' : '']" :hover-class="getHoverClass(disabled, type, plain)" :style="{ width: width, height: height, lineHeight: height, fontSize: size + 'rpx', margin: margin }" :loading="loading" :form-type="formType" :open-type="openType" @getuserinfo="bindgetuserinfo" @getphonenumber="bindgetphonenumber" @contact="bindcontact" @error="binderror" :disabled="disabled" @tap="handleClick"> |
|
<slot></slot> |
|
</button> |
|
</template> |
|
|
|
<script> |
|
export default { |
|
name: 'tui-button', |
|
props: { |
|
//样式类型 primary, white, danger, warning, green,blue, gray,black,brown,gray-primary,gray-danger,gray-warning,gray-green |
|
type: { |
|
type: String, |
|
default: 'primary', |
|
}, |
|
//是否加阴影 |
|
shadow: { |
|
type: Boolean, |
|
default: false, |
|
}, |
|
// 宽度 rpx或 % |
|
width: { |
|
type: String, |
|
default: '100%', |
|
}, |
|
//高度 rpx |
|
height: { |
|
type: String, |
|
default: '96rpx', |
|
}, |
|
//字体大小 rpx |
|
size: { |
|
type: Number, |
|
default: 32, |
|
}, |
|
bold: { |
|
type: Boolean, |
|
default: false, |
|
}, |
|
margin: { |
|
type: String, |
|
default: '0', |
|
}, |
|
//形状 circle(圆角), square(默认方形),rightAngle(平角) |
|
shape: { |
|
type: String, |
|
default: 'square', |
|
}, |
|
plain: { |
|
type: Boolean, |
|
default: false, |
|
}, |
|
//link样式,去掉边框,结合plain一起使用 |
|
link: { |
|
type: Boolean, |
|
default: false, |
|
}, |
|
disabled: { |
|
type: Boolean, |
|
default: false, |
|
}, |
|
//禁用后背景是否为灰色 (非空心button生效) |
|
disabledGray: { |
|
type: Boolean, |
|
default: false, |
|
}, |
|
loading: { |
|
type: Boolean, |
|
default: false, |
|
}, |
|
formType: { |
|
type: String, |
|
default: '', |
|
}, |
|
openType: { |
|
type: String, |
|
default: '', |
|
}, |
|
index: { |
|
type: [Number, String], |
|
default: 0, |
|
}, |
|
//是否需要阻止重复点击【默认200ms】 |
|
preventClick: { |
|
type: Boolean, |
|
default: false, |
|
}, |
|
}, |
|
data() { |
|
return { |
|
time: 0, |
|
} |
|
}, |
|
methods: { |
|
handleClick() { |
|
if (this.disabled) return |
|
if (this.preventClick) { |
|
if (new Date().getTime() - this.time <= 200) return |
|
this.time = new Date().getTime() |
|
setTimeout(() => { |
|
this.time = 0 |
|
}, 200) |
|
} |
|
this.$emit('click', { |
|
index: Number(this.index), |
|
}) |
|
}, |
|
bindgetuserinfo({ detail = {} } = {}) { |
|
this.$emit('getuserinfo', detail) |
|
}, |
|
bindcontact({ detail = {} } = {}) { |
|
this.$emit('contact', detail) |
|
}, |
|
bindgetphonenumber({ detail = {} } = {}) { |
|
this.$emit('getphonenumber', detail) |
|
}, |
|
binderror({ detail = {} } = {}) { |
|
this.$emit('error', detail) |
|
}, |
|
getShadowClass: function(type, shadow, plain) { |
|
let className = '' |
|
if (shadow && type != 'white' && !plain) { |
|
className = 'tui-shadow-' + type |
|
} |
|
return className |
|
}, |
|
getDisabledClass: function(disabled, type, plain) { |
|
let className = '' |
|
if (disabled && type != 'white' && type.indexOf('-') == -1) { |
|
let classVal = this.disabledGray ? 'tui-gray-disabled' : 'tui-dark-disabled' |
|
className = plain ? 'tui-dark-disabled-outline' : classVal |
|
} |
|
return className |
|
}, |
|
getShapeClass: function(shape, plain) { |
|
let className = '' |
|
if (shape == 'circle') { |
|
className = plain ? 'tui-outline-fillet' : 'tui-fillet' |
|
} else if (shape == 'rightAngle') { |
|
className = plain ? 'tui-outline-rightAngle' : 'tui-rightAngle' |
|
} |
|
return className |
|
}, |
|
getHoverClass: function(disabled, type, plain) { |
|
let className = '' |
|
if (!disabled) { |
|
className = plain ? 'tui-outline-hover' : 'tui-' + (type || 'primary') + '-hover' |
|
} |
|
return className |
|
}, |
|
}, |
|
} |
|
</script> |
|
|
|
<style scoped> |
|
.tui-btn-primary { |
|
background: #5677fc !important; |
|
color: #fff; |
|
} |
|
|
|
.tui-shadow-primary { |
|
box-shadow: 0 10rpx 14rpx 0 rgba(86, 119, 252, 0.2); |
|
} |
|
|
|
.tui-btn-danger { |
|
background: #eb0909 !important; |
|
color: #fff; |
|
} |
|
|
|
.tui-shadow-danger { |
|
box-shadow: 0 10rpx 14rpx 0 rgba(235, 9, 9, 0.2); |
|
} |
|
|
|
.tui-btn-warning { |
|
background: #fc872d !important; |
|
color: #fff; |
|
} |
|
|
|
.tui-shadow-warning { |
|
box-shadow: 0 10rpx 14rpx 0 rgba(252, 135, 45, 0.2); |
|
} |
|
|
|
.tui-btn-green { |
|
background: #07c160 !important; |
|
color: #fff; |
|
} |
|
|
|
.tui-shadow-green { |
|
box-shadow: 0 10rpx 14rpx 0 rgba(7, 193, 96, 0.2); |
|
} |
|
|
|
.tui-btn-blue { |
|
background: #007aff !important; |
|
color: #fff; |
|
} |
|
|
|
.tui-shadow-blue { |
|
box-shadow: 0 10rpx 14rpx 0 rgba(0, 122, 255, 0.2); |
|
} |
|
|
|
.tui-btn-white { |
|
background: #fff !important; |
|
color: #333 !important; |
|
} |
|
|
|
.tui-btn-gray { |
|
background: #bfbfbf !important; |
|
color: #fff !important; |
|
} |
|
|
|
.tui-btn-black { |
|
background: #333 !important; |
|
color: #fff !important; |
|
} |
|
.tui-btn-brown { |
|
background: #ac9157 !important; |
|
color: #fff !important; |
|
} |
|
|
|
.tui-btn-gray-black { |
|
background: #f2f2f2 !important; |
|
color: #333; |
|
} |
|
|
|
.tui-btn-gray-primary { |
|
background: #f2f2f2 !important; |
|
color: #5677fc !important; |
|
} |
|
|
|
.tui-gray-primary-hover { |
|
background: #d9d9d9 !important; |
|
} |
|
|
|
.tui-btn-gray-green { |
|
background: #f2f2f2 !important; |
|
color: #07c160 !important; |
|
} |
|
|
|
.tui-gray-green-hover { |
|
background: #d9d9d9 !important; |
|
} |
|
|
|
.tui-btn-gray-danger { |
|
background: #f2f2f2 !important; |
|
color: #eb0909 !important; |
|
} |
|
|
|
.tui-gray-danger-hover { |
|
background: #d9d9d9 !important; |
|
} |
|
|
|
.tui-btn-gray-warning { |
|
background: #f2f2f2 !important; |
|
color: #fc872d !important; |
|
} |
|
|
|
.tui-gray-warning-hover { |
|
background: #d9d9d9 !important; |
|
} |
|
|
|
.tui-shadow-gray { |
|
box-shadow: 0 10rpx 14rpx 0 rgba(191, 191, 191, 0.2); |
|
} |
|
|
|
.tui-hover-gray { |
|
background: #f7f7f9 !important; |
|
} |
|
|
|
.tui-black-hover { |
|
background: #555 !important; |
|
color: #e5e5e5 !important; |
|
} |
|
.tui-brown-hover { |
|
background: #a37f49 !important; |
|
color: #e5e5e5 !important; |
|
} |
|
|
|
/* button start*/ |
|
|
|
.tui-btn { |
|
width: 100%; |
|
position: relative; |
|
border: 0 !important; |
|
border-radius: 6rpx; |
|
padding-left: 0; |
|
padding-right: 0; |
|
overflow: visible; |
|
} |
|
|
|
.tui-btn::after { |
|
content: ''; |
|
position: absolute; |
|
width: 200%; |
|
height: 200%; |
|
transform-origin: 0 0; |
|
transform: scale(0.5, 0.5) translateZ(0); |
|
box-sizing: border-box; |
|
left: 0; |
|
top: 0; |
|
border-radius: 12rpx; |
|
border: 0; |
|
} |
|
|
|
.tui-text-bold { |
|
font-weight: bold; |
|
} |
|
|
|
.tui-btn-white::after { |
|
border: 1px solid #bfbfbf; |
|
} |
|
|
|
.tui-white-hover { |
|
background: #e5e5e5 !important; |
|
color: #2e2e2e !important; |
|
} |
|
|
|
.tui-dark-disabled { |
|
opacity: 0.6 !important; |
|
color: #fafbfc !important; |
|
} |
|
|
|
.tui-dark-disabled-outline { |
|
opacity: 0.5 !important; |
|
} |
|
|
|
.tui-gray-disabled { |
|
background: #f3f3f3 !important; |
|
color: #919191 !important; |
|
box-shadow: none; |
|
} |
|
|
|
.tui-outline-hover { |
|
opacity: 0.5; |
|
} |
|
|
|
.tui-primary-hover { |
|
background: #4a67d6 !important; |
|
color: #e5e5e5 !important; |
|
} |
|
|
|
.tui-primary-outline::after { |
|
border: 1px solid #5677fc !important; |
|
} |
|
|
|
.tui-primary-outline { |
|
color: #5677fc !important; |
|
background: transparent; |
|
} |
|
|
|
.tui-danger-hover { |
|
background: #c80808 !important; |
|
color: #e5e5e5 !important; |
|
} |
|
|
|
.tui-danger-outline { |
|
color: #eb0909 !important; |
|
background: transparent; |
|
} |
|
|
|
.tui-danger-outline::after { |
|
border: 1px solid #eb0909 !important; |
|
} |
|
|
|
.tui-warning-hover { |
|
background: #d67326 !important; |
|
color: #e5e5e5 !important; |
|
} |
|
|
|
.tui-warning-outline { |
|
color: #fc872d !important; |
|
background: transparent; |
|
} |
|
|
|
.tui-warning-outline::after { |
|
border: 1px solid #fc872d !important; |
|
} |
|
|
|
.tui-green-hover { |
|
background: #06ad56 !important; |
|
color: #e5e5e5 !important; |
|
} |
|
|
|
.tui-green-outline { |
|
color: #07c160 !important; |
|
background: transparent; |
|
} |
|
|
|
.tui-green-outline::after { |
|
border: 1px solid #07c160 !important; |
|
} |
|
|
|
.tui-blue-hover { |
|
background: #0062cc !important; |
|
color: #e5e5e5 !important; |
|
} |
|
|
|
.tui-blue-outline { |
|
color: #007aff !important; |
|
background: transparent; |
|
} |
|
|
|
.tui-blue-outline::after { |
|
border: 1px solid #007aff !important; |
|
} |
|
|
|
/* #ifndef APP-NVUE */ |
|
.tui-btn-gradual { |
|
background: linear-gradient(90deg, rgb(255, 89, 38), rgb(240, 14, 44)) !important; |
|
color: #fff !important; |
|
} |
|
|
|
.tui-shadow-gradual { |
|
box-shadow: 0 10rpx 14rpx 0 rgba(235, 9, 9, 0.15); |
|
} |
|
|
|
/* #endif */ |
|
|
|
.tui-gray-hover { |
|
background: #a3a3a3 !important; |
|
color: #898989; |
|
} |
|
|
|
/* #ifndef APP-NVUE */ |
|
.tui-gradual-hover { |
|
background: linear-gradient(90deg, #d74620, #cd1225) !important; |
|
color: #fff !important; |
|
} |
|
|
|
/* #endif */ |
|
|
|
.tui-gray-outline { |
|
color: #999 !important; |
|
background: transparent !important; |
|
} |
|
|
|
.tui-white-outline { |
|
color: #fff !important; |
|
background: transparent !important; |
|
} |
|
|
|
.tui-black-outline { |
|
background: transparent !important; |
|
color: #333 !important; |
|
} |
|
|
|
.tui-gray-outline::after { |
|
border: 1px solid #ccc !important; |
|
} |
|
|
|
.tui-white-outline::after { |
|
border: 1px solid #fff !important; |
|
} |
|
|
|
.tui-black-outline::after { |
|
border: 1px solid #333 !important; |
|
} |
|
|
|
.tui-brown-outline { |
|
color: #ac9157 !important; |
|
background: transparent; |
|
} |
|
.tui-brown-outline::after { |
|
border: 1px solid #ac9157 !important; |
|
} |
|
|
|
/*圆角 */ |
|
|
|
.tui-fillet { |
|
border-radius: 50rpx; |
|
} |
|
|
|
.tui-btn-white.tui-fillet::after { |
|
border-radius: 98rpx; |
|
} |
|
|
|
.tui-outline-fillet::after { |
|
border-radius: 98rpx; |
|
} |
|
|
|
/*平角*/ |
|
.tui-rightAngle { |
|
border-radius: 0; |
|
} |
|
|
|
.tui-btn-white.tui-rightAngle::after { |
|
border-radius: 0; |
|
} |
|
|
|
.tui-outline-rightAngle::after { |
|
border-radius: 0; |
|
} |
|
.tui-btn__link::after { |
|
border: 0 !important; |
|
} |
|
</style>
|
|
|