tiny-rdm/frontend/src/components/common/IconButton.vue

78 lines
2.0 KiB
Vue
Raw Normal View History

2023-06-27 15:53:29 +08:00
<script setup>
import { computed } from 'vue'
import { NIcon } from 'naive-ui'
const emit = defineEmits(['click'])
const props = defineProps({
tooltip: String,
tTooltip: String,
type: String,
icon: [String, Object],
2023-06-27 15:53:29 +08:00
size: {
type: [Number, String],
default: 20,
},
color: {
type: String,
default: '',
2023-06-27 15:53:29 +08:00
},
strokeWidth: {
type: [Number, String],
default: 3,
},
loading: Boolean,
border: Boolean,
disabled: Boolean,
buttonStyle: [String, Object],
})
2023-06-27 15:53:29 +08:00
const hasTooltip = computed(() => {
return props.tooltip || props.tTooltip
})
</script>
<template>
<n-tooltip v-if="hasTooltip" :show-arrow="false">
2023-06-27 15:53:29 +08:00
<template #trigger>
<n-button
:color="props.color"
:disabled="disabled"
:focusable="false"
:loading="loading"
:style="props.buttonStyle"
:text="!border"
:type="type"
@click.prevent="emit('click')">
<template #icon>
<slot>
<n-icon :color="props.color || 'currentColor'" :size="props.size">
<component :is="props.icon" :stroke-width="props.strokeWidth" />
</n-icon>
</slot>
</template>
</n-button>
2023-06-27 15:53:29 +08:00
</template>
{{ props.tTooltip ? $t(props.tTooltip) : props.tooltip }}
</n-tooltip>
<n-button
v-else
:color="props.color"
:disabled="disabled"
:focusable="false"
:loading="loading"
:text="!border"
:type="type"
@click.prevent="emit('click')">
<template #icon>
<slot>
<n-icon :color="props.color || 'currentColor'" :size="props.size">
<component :is="props.icon" :stroke-width="props.strokeWidth" />
</n-icon>
</slot>
</template>
</n-button>
2023-06-27 15:53:29 +08:00
</template>
<style lang="scss"></style>