From 87224715c3983227866f148d858276c1234f77e0 Mon Sep 17 00:00:00 2001 From: zhang Date: Mon, 23 Oct 2023 14:42:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E6=96=87=E6=9C=AC?= =?UTF-8?q?=E7=9C=81=E7=95=A5=E7=BB=84=E4=BB=B6=20(#3180)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 增加文本省略组件 * refactor: 重构文本省略组件 * feat: 增加远程懒加载下拉树功能 --- src/components/EllipsisText/index.ts | 4 + .../EllipsisText/src/EllipsisText.vue | 133 +++++++++++++++ src/components/EllipsisText/src/Tooltip.vue | 158 ++++++++++++++++++ src/components/EllipsisText/src/_utils.ts | 40 +++++ .../Form/src/components/ApiTreeSelect.vue | 22 ++- src/locales/lang/en/routes/demo.json | 1 + src/locales/lang/zh-CN/routes/demo.json | 1 + src/router/routes/modules/demo/feat.ts | 8 + src/views/demo/feat/ellipsis/index.vue | 47 ++++++ src/views/demo/form/index.vue | 43 +++++ 10 files changed, 454 insertions(+), 3 deletions(-) create mode 100644 src/components/EllipsisText/index.ts create mode 100644 src/components/EllipsisText/src/EllipsisText.vue create mode 100644 src/components/EllipsisText/src/Tooltip.vue create mode 100644 src/components/EllipsisText/src/_utils.ts create mode 100644 src/views/demo/feat/ellipsis/index.vue diff --git a/src/components/EllipsisText/index.ts b/src/components/EllipsisText/index.ts new file mode 100644 index 00000000..35f9fd13 --- /dev/null +++ b/src/components/EllipsisText/index.ts @@ -0,0 +1,4 @@ +import { withInstall } from '@/utils'; +import ellipsisText from './src/EllipsisText.vue'; + +export const EllipsisText = withInstall(ellipsisText); diff --git a/src/components/EllipsisText/src/EllipsisText.vue b/src/components/EllipsisText/src/EllipsisText.vue new file mode 100644 index 00000000..9cd5de53 --- /dev/null +++ b/src/components/EllipsisText/src/EllipsisText.vue @@ -0,0 +1,133 @@ + + + + diff --git a/src/components/EllipsisText/src/Tooltip.vue b/src/components/EllipsisText/src/Tooltip.vue new file mode 100644 index 00000000..01d8ad58 --- /dev/null +++ b/src/components/EllipsisText/src/Tooltip.vue @@ -0,0 +1,158 @@ + + + + diff --git a/src/components/EllipsisText/src/_utils.ts b/src/components/EllipsisText/src/_utils.ts new file mode 100644 index 00000000..8e6a1e4c --- /dev/null +++ b/src/components/EllipsisText/src/_utils.ts @@ -0,0 +1,40 @@ +// cancelAnimationFrame +export const cancelAnimationFrame = window.cancelAnimationFrame; +// 使用 requestAnimationFrame 模拟 setTimeout 和 setInterval +export function rafTimeout(fn: Function, delay = 0, interval = false): object { + const requestAnimationFrame = + typeof window !== 'undefined' ? window.requestAnimationFrame : () => {}; + let start: any = null; + function timeElapse(timestamp: number) { + /* + timestamp参数:与performance.now()的返回值相同,它表示requestAnimationFrame() 开始去执行回调函数的时刻 + */ + if (!start) { + start = timestamp; + } + const elapsed = timestamp - start; + if (elapsed >= delay) { + fn(); // 执行目标函数func + if (interval) { + // 使用间歇调用 + start = null; + raf.id = requestAnimationFrame(timeElapse); + } + } else { + raf.id = requestAnimationFrame(timeElapse); + } + } + const raf = { + // 引用类型保存,方便获取 requestAnimationFrame()方法返回的 ID. + id: requestAnimationFrame(timeElapse), + }; + return raf; +} +// 用于取消 rafTimeout 函数 +export function cancelRaf(raf: { id: number }): void { + const cancelAnimationFrame = + typeof window !== 'undefined' ? window.cancelAnimationFrame : () => {}; + if (raf && raf.id) { + cancelAnimationFrame(raf.id); + } +} diff --git a/src/components/Form/src/components/ApiTreeSelect.vue b/src/components/Form/src/components/ApiTreeSelect.vue index ab9c18e5..4a33a54b 100644 --- a/src/components/Form/src/components/ApiTreeSelect.vue +++ b/src/components/Form/src/components/ApiTreeSelect.vue @@ -1,5 +1,10 @@