Skip to content

工具函数(新增)

本文档记录新增的前端工具函数。

clipboard — 剪贴板

复制文本到剪贴板。

copyToClipboard(text, onSuccess, onError)

底层复制方法,使用 navigator.clipboard API,带 execCommand 降级。

js
import { copyToClipboard } from '@/utils/clipboard'

copyToClipboard(
  'Hello World',
  () => console.log('复制成功'),
  (err) => console.error('复制失败', err)
)

copy(text, successMsg, errorMsg)

高级复制方法,成功后自动弹出 Naive UI 消息提示。

js
import { copy } from '@/utils/clipboard'

copy('复制的内容', '复制成功', '复制失败')

websocket — WebSocket 客户端

基于 SockJS + STOMP 的 WebSocket 客户端。

initWebSocketClient()

初始化并连接 WebSocket 服务。

js
import { initWebSocketClient, disconnectWebSocketClient } from '@/utils/websocket'

// 初始化连接
initWebSocketClient()

// 断开连接
disconnectWebSocketClient()

功能

  • 连接到 /ws 端点
  • 开发环境自动适配 VITE_HTTP_PROXY_TARGET
  • 订阅 /topic/auth 主题
  • 自动处理认证相关广播(踢出、替换、封禁)并自动登出

依赖

  • sockjs-client
  • @stomp/stompjs
  • @/store(useAuthStore, useUserStore)

watermark — 水印

全屏水印管理工具,基于 Naive UI NWatermark 组件。

createWatermark(options)

创建水印,返回 { destroy() }

js
import { createWatermark } from '@/utils/watermark'

const wm = createWatermark({
  content: '内部机密',
  fontSize: 16,
  fontColor: '#cccccc',
  rotate: -20,
  xGap: 200,
  yGap: 200,
  zIndex: 1000
})

// 销毁水印
wm.destroy()

setupWatermark()

获取水印管理器,支持 show/hide/update。

js
import { setupWatermark } from '@/utils/watermark'

const watermark = setupWatermark()

watermark.show({ content: '内部机密' })
watermark.hide()
watermark.update({ content: '新的水印' })

tab — 标签页管理

多标签页导航管理工具。

js
import {
  closePage,
  closeAndOpen,
  reloadPage,
  closeOtherPages,
  closeAllPages
} from '@/utils/tab'

// 关闭指定标签页
closePage('/user/list')

// 关闭并打开新页面
closeAndOpen('/old-path', '/new-path')

// 刷新当前页面
reloadPage('/user/list')

// 关闭其他页面
closeOtherPages('/user/list')

// 关闭所有页面
closeAllPages()

导出方法

方法说明
closePage(target)关闭指定标签页
closePages(targets)批量关闭标签页
closeAndOpen(closeTarget, openTarget)关闭旧页面,打开新页面
reloadPage(path)刷新指定页面
closeOtherPages(path)关闭除指定页面外的所有标签页
closeLeftPages(path)关闭左侧标签页
closeRightPages(path)关闭右侧标签页
closeAllPages()关闭所有标签页

echarts-theme — ECharts 主题

ECharts 主题配置,支持 CSS 变量集成和暗色模式。

getEChartsTheme()

获取完整的 ECharts 主题配置(从 CSS 变量派生)。

js
import { getEChartsTheme, chartPresets } from '@/utils/echarts-theme'

const theme = getEChartsTheme()
chart.setOption({ ...chartPresets.line, theme })

chartPresets

预置图表配置:

预设说明
line折线图
area面积图
bar柱状图
pie饼图
scatter散点图
radar雷达图
gauge仪表盘

getResponsiveConfig(containerWidth)

根据容器宽度返回响应式网格/标签配置。

其他方法

方法说明
generateGradientColor(color, alpha)生成渐变色(Hex → RGBA)
generateChartGradient(ctx, color, direction)创建线性渐变
toggleEChartsTheme(chartInstance)切换 ECharts 主题
applyThemeToChart(chartInstance, customTheme)应用自定义主题

responsive-font — 响应式字体

根据屏幕宽度自动缩放字体大小。

js
import { calculateFontScale, initResponsiveFont } from '@/utils/responsive-font'

// 手动计算
const scale = calculateFontScale()

// 自动初始化(带防抖 resize 监听)
initResponsiveFont(() => {
  console.log('字体缩放已更新')
})

断点

屏幕宽度缩放比例
≤ 768px0.8
≤ 1024px0.85
≤ 1440px0.9
> 1440px1.0

enum — 字典/枚举

字典数据获取、缓存和查找。

js
import { getEnum, getEnumLabel, batchGetEnum } from '@/utils/enum'

// 获取字典(自动缓存)
const items = await getEnum('user_status')

// 查找 Label
const label = getEnumLabel('user_status', 1)  // → "启用"

// 批量获取
const enums = await batchGetEnum(['user_status', 'user_type'])

导出方法

方法说明
getEnum(type, version, forceRefresh)获取字典数据
batchGetEnum(types)批量获取字典
getEnumLabel(type, value)根据值查找标签
getEnumValue(type, label)根据标签查找值
clearEnumCache(types)清除指定字典缓存
clearAllEnumCache()清除所有字典缓存

is — 类型检查

类型检查工具函数。

js
import { isString, isArray, isNumber, isEmpty, isUrl } from '@/utils/is'

isString('hello')    // true
isArray([1, 2, 3])   // true
isNumber(42)         // true
isEmpty({})          // true
isUrl('https://...') // true

导出方法

is(val, type), isDef, isUndef, isNull, isWhitespace, isObject, isArray, isString, isNumber, isBoolean, isDate, isRegExp, isFunction, isPromise, isElement, isWindow, isNullOrUndef, isNullOrWhitespace, isEmpty, ifNull(val, def), isUrl, isExternal, isServer, isClient


菜单数据处理工具,将原始菜单数据转为 Naive UI 菜单格式。

js
import { processMenuData, findActiveTopMenu, findMenuItem } from '@/utils/menu-utils'

const { topMenus, sideMenus } = processMenuData(rawMenuData)
const activeTop = findActiveTopMenu(topMenus, route)
const item = findMenuItem(topMenus, 'system-user')

导出方法

方法说明
processTopMenus(menuItems)处理顶级菜单,生成唯一 ID/Key,包装图标
processMenuData(menuItems)扁平化 subapp 类型,处理子项,转换图标为渲染函数
findActiveTopMenu(menus, route)查找当前路由对应的顶级菜单
findMenuItem(menuItems, key)递归查找指定 Key/ID 的菜单项

naiveTools — Naive UI 增强

Naive UI 离散 API 的全局化和增强。

功能

  • Message 增强 — 键值去重(防止重复弹出)、loading 状态支持
  • Dialog 增强 — 添加 NDialog.confirm() 快捷方法
  • 全局挂载window.$message, window.$dialog, window.$notification, window.$loadingBar, window.$loading, window.$copy, window.$imagePreview, window.$watermark, window.$homePath
  • 暗色模式 — 自动适配主题
  • Loading 服务 — 全屏 Loading 遮罩(show(), close(), service()

入口函数

js
import { setupNaiveDiscreteApi } from '@/utils/naiveTools'

// 在应用初始化时调用
setupNaiveDiscreteApi()