Merge branch 'main' of github.com:xiaoxian521/vue-pure-admin

This commit is contained in:
xiaoxian521 2022-04-19 11:42:54 +08:00
commit 14619588d4
7 changed files with 101 additions and 15 deletions

View File

@ -74,5 +74,6 @@ menus:
hsAntTabs: Imitate Antdv Tabs
hsAntAnchor: Imitate Antdv Anchor
hsAntTreeSelect: Imitate Antdv TreeSelector
list: List Page
listCard: Card List Page
hsList: List Page
hsListCard: Card List Page
hsDebounce: Debounce & Throttle

View File

@ -74,5 +74,6 @@ menus:
hsAntTabs: 仿antdv标签页
hsAntAnchor: 仿antdv锚点
hsAntTreeSelect: 仿antdv树型选择器
list: 列表页
listCard: 卡片列表页
hsList: 列表页
hsListCard: 卡片列表页
hsDebounce: 防抖节流

View File

@ -92,6 +92,15 @@ const ableRouter = {
title: $t("menus.hsAntTreeSelect"),
i18n: true
}
},
{
path: "/able/debounce",
name: "reDebounce",
component: () => import("/@/views/able/debounce.vue"),
meta: {
title: $t("menus.hsDebounce"),
i18n: true
}
}
]
};

View File

@ -7,7 +7,7 @@ const ableRouter = {
redirect: "/list/card",
meta: {
icon: "list-check",
title: $t("menus.list"),
title: $t("menus.hsList"),
i18n: true,
rank: 12
},
@ -18,7 +18,7 @@ const ableRouter = {
component: () => import("/@/views/list/card/index.vue"),
meta: {
icon: "card",
title: $t("menus.listCard"),
title: $t("menus.hsListCard"),
i18n: true,
showParent: true
}

View File

@ -1,12 +1,39 @@
import { unref } from "vue";
import type { Ref } from "vue";
type FunctionArgs<Args extends any[] = any[], Return = void> = (
...args: Args
) => Return;
type MaybeRef<T> = T | Ref<T>;
// 延迟函数
export const delay = (timeout: number) =>
new Promise(resolve => setTimeout(resolve, timeout));
// 防抖函数
export const debounce = (fn: () => Fn, timeout: number) => {
/**
*
* @param fn
* @param timeout
* @param immediate
* @returns
*/
export const debounce = <T extends FunctionArgs>(
fn: T,
timeout: MaybeRef<number> = 200,
immediate = false
) => {
let timmer: TimeoutHandle;
const wait = unref(timeout);
return () => {
timmer ? clearTimeout(timmer) : null;
timmer = setTimeout(fn, timeout);
timmer && clearTimeout(timmer);
if (immediate) {
if (!timmer) {
fn();
}
timmer = setTimeout(() => (timmer = null), wait);
} else {
timmer = setTimeout(fn, wait);
}
};
};

View File

@ -0,0 +1,52 @@
<script setup lang="ts">
import { ElMessage } from "element-plus";
import { debounce } from "/@/utils/debounce";
import { useDebounceFn, useThrottleFn } from "@vueuse/core";
const handle = () => {
ElMessage({
message: "恭喜你,这是一条成功消息",
type: "success"
});
};
const immediateDebounce = debounce(handle, 1000, true);
const debounceClick = useDebounceFn(handle, 1000);
const throttleClick = useThrottleFn(handle, 1000, false);
</script>
<template>
<div>
<el-card class="mb-5">
<template #header>
<div>防抖debounce</div>
</template>
<div class="mb-5">
所谓防抖就是指触发事件后在 n 秒内函数只能执行一次如果在 n
秒内又触发了事件则会重新计算函数执行时间
</div>
<el-button @click="immediateDebounce"
>连续点击我只会执行最后一次点击事件立即执行</el-button
>
<el-button @click="debounceClick"
>连续点击我只会执行最后一次点击事件延后执行</el-button
>
</el-card>
<el-card>
<template #header>
<div>节流throttle</div>
</template>
<div class="mb-5">
所谓节流就是指连续触发事件但是在 n
秒中只执行一次函数节流会稀释函数的执行频率
</div>
<el-button @click="throttleClick"
>连续点击我每一秒只会执行一次点击事件</el-button
>
</el-card>
</div>
</template>
<style scoped></style>

View File

@ -55,11 +55,7 @@ function onCloseTags() {
<template>
<el-card>
<template #header>
<div class="card-header">
<span class="font-medium"
>标签页复用超出限制自动关闭使用场景: 动态路由</span
>
</div>
<div>标签页复用超出限制自动关闭使用场景: 动态路由</div>
</template>
<el-button v-for="index in 6" :key="index" @click="toDetail(index)">
打开{{ index }}详情页