# 实用工具使用指南 本文档介绍项目中基于 Naive UI 实现的实用工具功能,包括复制到剪贴板、图片预览和水印功能。 ## 目录 - [复制到剪贴板](#复制到剪贴板) - [图片预览](#图片预览) - [水印功能](#水印功能) - [全屏 Loading](#全屏-loading) --- ## 复制到剪贴板 ### 全局方法使用 #### 基础用法 ```javascript // 复制文本 window.$copy('要复制的文本内容') // 自定义成功和失败提示 window.$copy( '要复制的文本内容', '复制成功!', // 成功提示 '复制失败,请重试' // 失败提示 ) ``` ### 指令使用 #### 基础用法 ```vue ``` #### 配置选项 | 参数 | 类型 | 说明 | 默认值 | | -------------- | ------ | ------------------ | ---------- | | text | String | 要复制的文本内容 | - | | successMessage | String | 复制成功的提示消息 | '复制成功' | | errorMessage | String | 复制失败的提示消息 | '复制失败' | --- ## 图片预览 ### 全局方法使用 #### 预览单张图片 ```javascript // 预览单张图片 window.$imagePreview.show('https://example.com/image.jpg') ``` #### 预览多张图片 ```javascript // 预览图片列表 const images = [ 'https://example.com/image1.jpg', 'https://example.com/image2.jpg', 'https://example.com/image3.jpg' ] // 从第一张开始预览 window.$imagePreview.showList(images) // 从第二张开始预览(索引从 0 开始) window.$imagePreview.showList(images, 1) ``` ### 指令使用 #### 基础用法 ```vue ``` #### 注意事项 - `v-preview` 指令**仅支持 `` 元素** - 点击图片后会自动添加 `cursor: pointer` 样式 - 支持键盘操作(左右箭头切换图片,ESC 关闭预览) --- ## 水印功能 ### 全局方法使用 #### 显示全屏水印 ```javascript // 简单文本水印 window.$watermark.show('机密文件') // 完整配置 window.$watermark.show({ content: '内部资料', fontSize: 20, fontColor: 'rgba(255, 0, 0, .1)', width: 150, height: 80, xGap: 20, yGap: 80, rotate: -22, zIndex: 1000 }) // 图片水印 window.$watermark.show({ image: 'https://example.com/logo.png', imageWidth: 120, imageHeight: 60, imageOpacity: 0.3 }) ``` #### 隐藏水印 ```javascript window.$watermark.hide() ``` #### 更新水印 ```javascript // 更新水印内容 window.$watermark.update('新的水印内容') // 更新完整配置 window.$watermark.update({ content: '更新后的水印', fontSize: 18 }) ``` ### 指令使用 #### 基础用法 ```vue ``` ### 配置选项 | 参数 | 类型 | 说明 | 默认值 | | ------------ | ------- | ---------------------- | -------------------------- | | content | String | 水印文本内容 | '' | | image | String | 水印图片地址 | '' | | fontSize | Number | 字体大小 | 16 | | fontColor | String | 字体颜色(RGBA) | 'rgba(128, 128, 128, .15)' | | fontWeight | Number | 字体粗细 | 400 | | fontFamily | String | 字体家族 | - | | width | Number | 水印宽度 | 120 | | height | Number | 水印高度 | 64 | | xGap | Number | 水印水平间距 | 12 | | yGap | Number | 水印垂直间距 | 60 | | xOffset | Number | 水印水平偏移 | 0 | | yOffset | Number | 水印垂直偏移 | 0 | | rotate | Number | 水印旋转角度(度) | -22 | | zIndex | Number | 层级 | 全局: 1000, 指令: 1 | | fullscreen | Boolean | 是否全屏(仅全局方法) | true | | selectable | Boolean | 文本是否可选 | false | | imageWidth | Number | 图片宽度 | - | | imageHeight | Number | 图片高度 | - | | imageOpacity | Number | 图片透明度 | 1 | --- ## 全屏 Loading ### 使用方法 #### 显示 Loading ```javascript // 简单文本 window.$loading.show('加载中...') // 完整配置 window.$loading.show({ text: '数据加载中,请稍候...', background: '0, 0, 0, 0.8', // RGB + Alpha color: '#18a058', fontSize: '14px' }) ``` #### 关闭 Loading ```javascript window.$loading.close() ``` #### 异步操作示例 ```javascript async function fetchData() { window.$loading.show('正在获取数据...') try { const response = await fetch('/api/data') const data = await response.json() // 处理数据... } catch (error) { window.$message.error('获取数据失败') } finally { window.$loading.close() } } ``` ### v-loading 指令 ```vue ``` --- ## 实际应用场景 ### 场景 1:表格操作按钮 ```vue ``` ### 场景 2:产品图片展示 ```vue ``` ### 场景 3:敏感文档水印 ```vue ``` ### 场景 4:文件上传 ```vue ``` --- ## 兼容性说明 - **复制功能**:优先使用现代 Clipboard API,在不支持的浏览器中自动降级到 `document.execCommand('copy')` - **图片预览**:基于 Naive UI 的 `NImageGroup` 组件,支持所有 Naive UI 支持的浏览器 - **水印功能**:基于 Naive UI 的 `NWatermark` 组件,使用 Canvas 绘制 - **Loading**:支持现代浏览器,使用 CSS3 动画 --- ## 常见问题 ### Q: 复制功能在某些浏览器不工作? A: 请确保页面在 HTTPS 协议下运行,或者是 localhost。部分浏览器的 Clipboard API 仅在安全上下文中可用。 ### Q: v-preview 指令不生效? A: 请确保该指令仅用于 `` 元素上,其他元素不支持。 ### Q: 水印可以被删除吗? A: 虽然用户可以通过浏览器开发者工具删除水印元素,但这只是前端显示层的防护。重要数据应该在后端进行权限控制。 ### Q: 如何在路由切换时自动清除水印? A: 可以在路由守卫中调用 `window.$watermark.hide()`: ```javascript router.beforeEach((to, from, next) => { window.$watermark.hide() next() }) ``` --- ## 技术实现 - 基于 Vue 3 Composition API - 使用 Naive UI 组件库 - 支持 TypeScript(类型定义来自 Naive UI) - 单例模式管理全局实例 - 自动内存清理机制