UNPKG

sensitive-data-display

Version:

A Vue 3 component for displaying sensitive data with masking and toggle functionality

186 lines (142 loc) 4.91 kB
# Sensitive Data Display 一个用于脱敏展示敏感数据的Vue 3组件,支持多种脱敏模式和缓存策略。 > 📚 **完整文档**: [查看详细文档](./docs/README.md) ## 特性 - 🚀 **Vue 3 Composition API** - 完全支持Vue 3 - 🔒 **多种脱敏模式** - 服务端、客户端、自定义模式 - 📱 **内置脱敏规则** - 手机号、身份证、银行卡、邮箱等 - 💾 **灵活的缓存策略** - 内存、会话存储、本地存储 - 🎨 **可自定义样式** - 支持自定义脱敏字符和显示规则 -**TypeScript支持** - 完整的类型定义 ## 安装 ```bash npm install sensitive-data-display ``` ## 使用方法 ### 基础用法 ```vue <template> <SensitiveDataDisplay :value="phoneNumber" type="phone" mode="client" /> </template> <script setup> import { SensitiveDataDisplay } from 'sensitive-data-display'; import { ref } from 'vue'; const phoneNumber = ref('13812345678'); </script> ``` ### 使用Hooks ```vue <template> <SensitiveDataDisplayComponent :value="idCard" type="idCard" mode="server" :fetchFullData="fetchIdCardData" :dataId="userId" /> </template> <script setup> import { useSensitiveDataDisplay } from 'sensitive-data-display'; import { ref } from 'vue'; const { SensitiveDataDisplayComponent } = useSensitiveDataDisplay(); const idCard = ref('123456********1234'); const userId = ref(123); const fetchIdCardData = async () => { // 模拟API调用 return new Promise(resolve => { setTimeout(() => resolve('123456789012345678'), 1000); }); }; </script> ``` ### 自定义脱敏规则 ```vue <template> <SensitiveDataDisplay :value="customData" type="custom" :showStart="2" :showEnd="3" maskChar="#" /> </template> <script setup> import { SensitiveDataDisplay } from 'sensitive-data-display'; import { ref } from 'vue'; const customData = ref('ABCDEFGHIJKLMN'); </script> ``` ## API ### Props | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `value` | `string` | - | 原始敏感数据或已脱敏数据(必填) | | `mode` | `'server' \| 'client' \| 'custom'` | `'server'` | 脱敏模式 | | `type` | `'phone' \| 'idCard' \| 'bankCard' \| 'email' \| 'custom'` | `'custom'` | 脱敏类型 | | `showStart` | `number` | `3` | 自定义脱敏规则 - 显示前几位 | | `showEnd` | `number` | `4` | 自定义脱敏规则 - 显示后几位 | | `maskChar` | `string` | `'*'` | 自定义脱敏字符 | | `defaultVisible` | `boolean` | `false` | 是否默认显示完整内容 | | `fetchFullData` | `() => Promise<string>` | - | 获取完整数据的API函数(服务端模式必填) | | `dataId` | `string \| number` | - | 数据唯一标识(用于API请求参数) | | `cacheExpiry` | `number` | `10` | 缓存时效(分钟) | | `cacheStorage` | `'memory' \| 'session' \| 'local'` | `'memory'` | 缓存存储方式 | ### Events | 事件名 | 参数 | 说明 | |--------|------|------| | `toggleRequest` | `(currentVisible: boolean, dataId?: string \| number)` | 自定义模式下,用户点击切换按钮时触发 | ### Methods | 方法名 | 参数 | 说明 | |--------|------|------| | `setFullDataAndShow` | `(data: string)` | 设置完整数据并显示 | | `hideData` | - | 隐藏数据 | | `toggle` | - | 切换显示状态 | | `getVisibleState` | - | 获取当前显示状态 | | `clearCache` | - | 清除缓存 | ## 脱敏模式说明 ### 服务端模式 (`mode="server"`) - 数据在服务端加密,前端只显示脱敏数据 - 需要提供 `fetchFullData` 函数来获取完整数据 - 支持缓存机制,避免重复请求 ### 客户端模式 (`mode="client"`) - 数据在前端脱敏,原始数据存储在 `value`- 点击按钮直接切换显示状态 - 适用于数据已经在客户端的场景 ### 自定义模式 (`mode="custom"`) - 完全自定义脱敏逻辑 - 点击按钮触发 `toggleRequest` 事件 - 由父组件处理数据获取和显示逻辑 ## 缓存策略 ### 内存缓存 (`cacheStorage="memory"`) - 数据存储在组件状态中 - 页面刷新后失效 - 适用于临时数据 ### 会话存储 (`cacheStorage="session"`) - 数据存储在 `sessionStorage`- 浏览器标签页关闭后失效 - 适用于会话期间的数据 ### 本地存储 (`cacheStorage="local"`) - 数据存储在 `localStorage`- 浏览器关闭后仍然保留 - 适用于长期缓存的数据 ## 全局缓存清理 ```javascript import { clearAllSensitiveCache } from 'sensitive-data-display'; // 清理所有敏感数据缓存 clearAllSensitiveCache(); ``` ## 开发 ```bash # 安装依赖 npm install # 开发模式 npm run dev # 构建 npm run build ``` ## 许可证 MIT