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.
154 lines
4.4 KiB
154 lines
4.4 KiB
<template> |
|
<view |
|
class="mix-btn-content" |
|
:class="{ |
|
disabled: loading || disabled || dead, |
|
}" |
|
:style="[ |
|
{marginTop: marginTop} |
|
]" |
|
@click="confirm" |
|
> |
|
<image v-if="loading" class="loading-icon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAE3UlEQVRoQ82Z7ZEQNwyGrQoCFQQqgFRAqCBcBSEVQCqAqyBJBTkqACoAKsilAo4KQioQ8+zIO16tvbaWM4P/7lrSq2/JkiYeVX2SUnpmLP4SkTez2MkswgbitaN/MQvMTCBo/xcH5IOI/DxDeWEgqvq0cJfLloZV9X1K6VEEiKo+NNpvo5YLAYm4SxSIqt5JKf2TUrqXUvosIncjlosCqbnLTUrpJxH5XDI+AeRlSumF0Qi7YBTIn4VblXLjYgiynggQVcUKWAOrcB6LCK45fKJAYPixQh1rYBWss5wgELIbqZrzSkSIw9AJATEBW1Z5IyIXUSCqShZ7Z/f+Tyk9LBUyiuYMEMyP5n+oMFldYtQiqopLka04OxedBsSsgun/rjC5EZH7o65lqTzT+WTW2CSN00CKtgKCtBXVoGtoHL6/iciVql6llH51glAflliwdEu85QBf7vUEt8SQvPttXMv5a6YJcUy+BrIJUvp2yX9JnQ1apeuVsdZNtwacvi1nx02744GUubwUDuvAGAutpm9ofRXKwOQMdJWta0L9VzAg4123rKGqWBbZyJr5/C4iyLQcD+R5SumPA/NilZci8qpwDx/43cbQ3COncZQD390xRVAkfX8G/+elUj0Q/JWYeNDxVf5BI9cmFFpHW6vWB3ydTEWq3cWFWQyF+nrywRS5i9tq+rVsgtlqKbaUsav9HiD/XVWxABbKSYBfqC9YoJkMmnXEtIJf5sGoJlM3SEeBWOdLhS/jgOuXxKfv5TzdbkE010ETviWH1m0C8YnmrVlhky1biukCyRct8AD0Y0Hs1lzL6hf0yYpPpzaNlqlyYL+PMht1szP/DVvkDPFveWcBYnHg24mWHPRTSx35no5YtqADjZxmEYsQqf1rsYJSy/R7RJaO4BIgrbbkUCYRmeKWqkrrMgoiy7gA6bUlNUCfRMTn+681xnJfVdFwr7PwvC4AAnqWCrU6UROOKvtkZsayVD+qGGL2ZnUPA5QntRYR1jTNLnWU84z/pvj5DEF7NMNArKmjraZ1oAM+NZp6wcwjyFb/nnHbYSCWFmmtyyBfR9eexnrf3ZBGzKKkoT4L2l0gB8MN92c2jdCnNGym0pZCjtp4NM9scLQsO72+aRRDBKcclHMQrssscthN7IAUQ74fbkrerG4gfusPN8afoc63TEyFKK661amNumz9WmmYGsKQ4/e8xA7AYUJr300AqsodVkMIVxt3SSjw8fWtutWJLB92A79VYt/ibLYb1suxh1rrj1sV7fbGpelt7IZHOQdxh9XSSnMECAM/brQrhJUlGzKsQFz7s8aT3Su3L4eLa/sfi+dnhw2fXdZy7Uo3Dip7LVzvXnYtt43cZLhKs9p9SrBxI7t1ex3Uy/XO5MSRb/83a88OEHo8rJxdhonzcUSG8t9uHWkRVlWSQrk429WUIyAWX34ZPrT/rcl0CkjjLXHnGj0gBqZ8NK0+441Y6SwQ1p1lq1IN1kEgfhl+qsiGgVSCtPnKNALErFI+QRym43CL0mghCNDyTYPfmhoMAMG6BH5uTcLviCGLVBYVh69Mo0BqhTW6EwgBMYb5rb078gaBlC8B4a46DMTAEKDXvZ4qAiS7Mu3L1MFqJAVWpr4ytYa1HOF5yiKjDFq91uj9yH9TgZgbLiPB7O3LF2dInShyDo35AAAAAElFTkSuQmCC"></image> |
|
<text v-if="icon" class="mix-icon" :class="icon" :style="{fontSize: iconSize + 'rpx'}"></text> |
|
<text class="mix-text">{{ text }}</text> |
|
</view> |
|
</template> |
|
|
|
<script> |
|
/** |
|
* 按钮组件 |
|
* @prop text 按钮显示文字 |
|
* @prop icon 按钮图标 |
|
* @prop iconSize 按钮显示文字 |
|
* @prop isConfirm 点击后是否处理loading状态 |
|
* @prop disabled 按钮禁用 |
|
* @prop marginTop 按钮上边距 |
|
*/ |
|
let stopTimer = null; |
|
export default { |
|
name: 'MixButton', |
|
data() { |
|
return { |
|
dead: false, |
|
loading: false |
|
}; |
|
}, |
|
props: { |
|
text: { |
|
type: String, |
|
default: '提交' |
|
}, |
|
icon: { |
|
type: String, |
|
default: '' |
|
}, |
|
iconSize: { |
|
type: Number, |
|
default: 32 |
|
}, |
|
isConfirm: { |
|
type: Boolean, |
|
default: true |
|
}, |
|
disabled: { |
|
type: Boolean, |
|
default: false |
|
}, |
|
marginTop: { |
|
type: String, |
|
default: '0rpx' |
|
} |
|
}, |
|
methods: { |
|
stop(){ |
|
if(stopTimer){ |
|
clearTimeout(stopTimer); |
|
stopTimer = null; |
|
} |
|
this.loading = false; |
|
}, |
|
death(){ |
|
this.loading = false; |
|
this.dead = true; |
|
}, |
|
confirm(){ |
|
if(this.dead){ |
|
return; |
|
} |
|
if(this.loading || this.disabled){ |
|
return; |
|
} |
|
if(this.isConfirm){ |
|
this.loading = true; |
|
|
|
stopTimer = setTimeout(()=>{ |
|
this.loading = false; |
|
clearTimeout(stopTimer); |
|
stopTimer = null; |
|
}, 10000) |
|
} |
|
this.$emit('onConfirm'); |
|
} |
|
} |
|
} |
|
</script> |
|
|
|
<style scoped lang='scss'> |
|
.mix-btn-content{ |
|
display: flex; |
|
align-items: center; |
|
justify-content: center; |
|
width: 610rpx; |
|
height: 88rpx; |
|
margin: 0 auto; |
|
font-size: 32rpx; |
|
color: #fff; |
|
border-radius: 100rpx; |
|
background-color: $base-color; |
|
position: relative; |
|
|
|
&:after{ |
|
content: ''; |
|
position: absolute; |
|
left: 50%; |
|
top: 25%; |
|
transform: translateX(-50%); |
|
width: 85%; |
|
height: 85%; |
|
background: linear-gradient(131deg, rgba(255,115,138,1) 0%, rgba(255,83,111,1) 100%); |
|
border-radius: 100rpx; |
|
opacity: 0.4; |
|
filter:blur(10rpx); |
|
} |
|
&.disabled { |
|
opacity: .65; |
|
} |
|
.mix-text{ |
|
position: relative; |
|
z-index: 1; |
|
} |
|
.mix-icon{ |
|
position: relative; |
|
z-index: 1; |
|
margin-right: 8rpx; |
|
} |
|
.loading-icon{ |
|
width: 34rpx; |
|
height: 34rpx; |
|
transform-origin:50% 50%; |
|
margin-right: 16rpx; |
|
animation: rotate 2s linear infinite; |
|
position: relative; |
|
z-index: 1; |
|
} |
|
} |
|
@keyframes rotate{ |
|
from { |
|
transform:rotate(0deg) |
|
} |
|
to { |
|
transform:rotate(360deg) |
|
} |
|
} |
|
</style>
|
|
|