|
<template> |
|
<button |
|
class="button" |
|
:class="{ |
|
'disabled': disabled, |
|
'checked': !disabled && checked, |
|
'default': !disabled && type === 'default', |
|
'primary': !disabled && type === 'primary', |
|
'checkbox': !disabled && type === 'checkbox', |
|
'radio': !disabled && type === 'radio', |
|
'small': size === 'small', |
|
'first': first, |
|
'last': last, |
|
}" |
|
@click="handleClick()" |
|
> |
|
<slot></slot> |
|
</button> |
|
</template> |
|
|
|
<script lang="ts" setup> |
|
const props = withDefaults(defineProps<{ |
|
checked?: boolean |
|
disabled?: boolean |
|
type?: 'default' | 'primary' | 'checkbox' | 'radio' |
|
size?: 'small' | 'normal' |
|
first?: boolean |
|
last?: boolean |
|
}>(), { |
|
checked: false, |
|
disabled: false, |
|
type: 'default', |
|
size: 'normal', |
|
first: false, |
|
last: false, |
|
}) |
|
|
|
const emit = defineEmits<{ |
|
(event: 'click'): void |
|
}>() |
|
|
|
const handleClick = () => { |
|
if (props.disabled) return |
|
emit('click') |
|
} |
|
</script> |
|
|
|
<style lang="scss" scoped> |
|
.button { |
|
height: 32px; |
|
line-height: 32px; |
|
outline: 0; |
|
font-size: 13px; |
|
padding: 0 15px; |
|
text-align: center; |
|
color: $textColor; |
|
border-radius: $borderRadius; |
|
user-select: none; |
|
letter-spacing: 1px; |
|
cursor: pointer; |
|
|
|
&.small { |
|
height: 24px; |
|
line-height: 24px; |
|
padding: 0 7px; |
|
letter-spacing: 0; |
|
font-size: 12px; |
|
} |
|
|
|
&.default { |
|
background-color: #fff; |
|
border: 1px solid #d9d9d9; |
|
color: $textColor; |
|
|
|
&:hover { |
|
color: $themeColor; |
|
border-color: $themeColor; |
|
} |
|
} |
|
&.primary { |
|
background-color: $themeColor; |
|
border: 1px solid $themeColor; |
|
color: #fff; |
|
|
|
&:hover { |
|
background-color: $themeHoverColor; |
|
border-color: $themeHoverColor; |
|
} |
|
} |
|
&.checkbox, &.radio { |
|
background-color: #fff; |
|
border: 1px solid #d9d9d9; |
|
color: $textColor; |
|
|
|
&:not(.checked):hover { |
|
color: $themeColor; |
|
} |
|
} |
|
&.checked { |
|
color: #fff; |
|
background-color: $themeColor; |
|
border-color: $themeColor; |
|
|
|
&:hover { |
|
background-color: $themeHoverColor; |
|
border-color: $themeHoverColor; |
|
} |
|
} |
|
&.disabled { |
|
background-color: #f5f5f5; |
|
border: 1px solid #d9d9d9; |
|
color: #b7b7b7; |
|
cursor: default; |
|
} |
|
} |
|
</style> |