Appearance
指令集:v-copy / v-debounce / v-longpress / v-context-menu
组件库内置四个高频指令,app.use(Vue3EpBizLib) 时随 bizDirectivesPlugin 批量注册;按需导入时也可单独 app.directive('copy', vCopy)。与既有 v-auth(权限指令,随 BizAuthButton 导出)互补。
v-copy 点击复制
vue
<template>
<!-- 点击复制,成功 ElMessage 提示 -->
<el-button v-copy="orderNo">复制单号</el-button>
<!-- 静默复制(不弹提示) -->
<span v-copy.silent="token">token</span>
</template>v-debounce 点击防抖
冷却式防抖:执行一次后冷却期内忽略后续点击(提交 / 查询按钮防连点)。
vue
<template>
<el-button type="primary" v-debounce="save">保存</el-button>
<!-- 自定义冷却间隔 -->
<el-button v-debounce="{ handler: search, delay: 500 }">搜索</el-button>
</template>v-longpress 长按触发
按住达到时长触发一次(默认 500ms),抬起 / 移出 / 取消即中止;按压等待期间抑制右键菜单。
vue
<template>
<div v-longpress="startRecord">按住说话</div>
<div v-longpress="{ handler: showActions, duration: 800 }">长按 800ms 弹出操作</div>
</template>v-context-menu 右键菜单
宿主元素右键弹出 BizContextMenu;传函数时弹出瞬间求值,菜单项可随宿主数据动态生成。
vue
<script setup lang="ts">
import type { BizContextMenuItem } from 'vue3-ep-biz-lib'
const items: BizContextMenuItem[] = [
{ key: 'refresh', label: '刷新' },
{ key: 'delete', label: '删除', danger: true, divided: true },
]
</script>
<template>
<tr v-context-menu="items">...</tr>
<tr v-context-menu="() => menuOf(row)">...</tr>
</template>注册方式
ts
// 全量(app.use 已含指令注册)
import Vue3EpBizLib from 'vue3-ep-biz-lib'
app.use(Vue3EpBizLib)
// 按需
import { vCopy, vDebounce, vLongpress, vContextMenu } from 'vue3-ep-biz-lib'
app.directive('copy', vCopy)
app.directive('debounce', vDebounce)
app.directive('longpress', vLongpress)
app.directive('context-menu', vContextMenu)