JinZHouXiYiJi_DaPin2/examples/components/ToolBar/ToolBarItem.vue

49 lines
1.2 KiB
Vue

<template>
<n-tooltip>
<template #trigger>
<n-button quaternary size="small" :title="label" @click="action"> <IconComponent /></n-button>
</template>
<span>{{ label }}</span>
</n-tooltip>
<n-divider v-if="divider" vertical />
</template>
<script lang="ts" setup>
import { isString } from 'lodash-es'
import { NButton, NDivider, NTooltip } from 'naive-ui'
import type { ComponentOptions, VNode } from 'vue'
import { computed, getCurrentInstance, h } from 'vue'
import type { iconNode, ToolBarItemType } from './type'
const props = withDefaults(
defineProps<{
label: string
action: (e: MouseEvent) => void
disable?: (e: MouseEvent) => void
icon: string | Function
divider?: boolean | undefined
children?: ToolBarItemType[]
otherShow?: VNode
isButton?: boolean
}>(),
{
disable: () => false,
div: false,
isButton: true
}
)
const instance = getCurrentInstance()
const XIcon = instance!.appContext.components['XIcon']
const IconComponent = computed<ComponentOptions>(() =>
isString(props.icon)
? h(XIcon, {
name: props.icon,
size: 24
})
: (props.icon as iconNode)()
)
</script>
<style lang="less" scoped></style>