<template>
<el-tooltip :disabled="showTooltip" :placement="placement">
<template #content>
<span v-if="content || text">{{ content || text }}</span>
<span v-else><slot></slot></span>
</template>
<div :class="lineNumber > 1 ? 'text-ellipsis-multiple' : 'u-line-1'" @mouseenter.stop="onMouseEnter">
<slot>{{ text }}</slot>
</div>
</el-tooltip>
</template>
<script setup>
import { ref } from "vue";
let props = defineProps({
text: {
type: String,
default: ""
},
placement: {
type: String,
default: "bottom"
},
content: {
type: String,
default: ""
},
lineNumber: {
type: Number,
default: 1
}
});
let showTooltip = ref(false);
function onMouseEnter(e) {
const dom = e.target;
showTooltip.value = !(dom.offsetWidth < dom.scrollWidth || dom.offsetHeight < dom.scrollHeight);
}
</script>
<style lang="scss" scoped>
//单行省略号
.u-line-1 {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
//多行文本文字超过行数限制后显示省略号
.text-ellipsis-multiple {
word-break: break-all;
text-overflow: ellipsis;
overflow: hidden;
display: -ms-flexbox;
display: -moz-box;
display: -webkit-box;
-webkit-box-orient: vertical;
-moz-box-orient: vertical;
-webkit-line-clamp: v-bind("props.lineNumber");
}
</style>