搜索结果列表页面开发

This commit is contained in:
付民康
2025-03-12 18:41:20 +08:00
commit 7cebe8fc00
739 changed files with 88149 additions and 0 deletions

View File

@@ -0,0 +1,79 @@
<template>
<div class="g-fold-ellipsis" :class="{ fold: !isFold }" ref="RefDev">
<span class="g-fold-ellipsis-text" :style="{ width: textWidth }" :class="{ 'whitespace-normal': !isFold }">
<slot></slot>
</span>
<span class="g-fold-ellipsis-switch" v-if="visible" @click="isFold = !isFold">
<d-icon :name="isFold ? 'icon-chevron-down' : 'icon-chevron-up'" class="cursor-pointer"></d-icon>
</span>
</div>
</template>
<script lang="ts" setup>
defineOptions({ name: 'FoldEllipsis' });
import { ref, onMounted } from 'vue';
defineProps<{
content: string;
}>();
const isFold = ref(true);
const visible = ref(false);
const textWidth = ref('auto');
const RefDev = ref();
const resolveFold = () => {
const el = RefDev.value;
if (!el) return;
const containerHeight = el.clientHeight;
const containerWidth = el.clientWidth;
const parentWidth = el.parentElement.offsetWidth || el.parentElement.clientWidth;
// 创建一个临时元素
const tempElement = document.createElement('span');
tempElement.style.visibility = 'hidden';
tempElement.style.position = 'absolute';
tempElement.style.whiteSpace = 'wrap';
const style = window.getComputedStyle(el);
tempElement.style.width = containerWidth + 'px';
tempElement.style.fontSize = style.fontSize;
tempElement.style.fontFamily = style.fontFamily;
tempElement.style.lineHeight = style.lineHeight;
tempElement.style.letterSpacing = style.letterSpacing;
tempElement.style.wordBreak = style.wordBreak;
tempElement.textContent = el.textContent;
document.body.appendChild(tempElement);
const textHeight = tempElement.clientHeight;
// 移除临时元素
document.body.removeChild(tempElement);
if (el.offsetLeft + el.offsetWidth < parentWidth - 10) return;
if (textHeight > containerHeight) {
visible.value = true;
textWidth.value = containerWidth - 20 + 'px';
}
};
onMounted(() => {
setTimeout(() => resolveFold(), 300);
});
</script>
<style lang="scss" scoped>
.g-fold-ellipsis {
line-height: 20px;
@apply inline-flex items-center overflow-hidden text-ellipsis;
&.fold {
@apply items-start;
.g-fold-ellipsis-text{
@apply whitespace-pre-wrap;
}
}
}
.g-fold-ellipsis-text {
@apply overflow-hidden text-ellipsis inline-block;
}
.g-fold-ellipsis-switch {
@apply inline-block align-middle h-[16px] w-[20px] p-0 bg-CG200 text-center rounded cursor-pointer active:bg-CG300;
}
</style>