@boteteam/utils 0.0.34 → 0.0.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +175 -9
  2. package/dist/cjs/aiGenerateFill.d.ts +2 -0
  3. package/dist/cjs/aiGenerateFill.js +44 -0
  4. package/dist/cjs/aiGenerateFill.js.map +7 -0
  5. package/dist/cjs/copyToClipboard.d.ts +6 -0
  6. package/dist/cjs/copyToClipboard.js +55 -0
  7. package/dist/cjs/copyToClipboard.js.map +7 -0
  8. package/dist/cjs/dealStorageData.d.ts +35 -0
  9. package/dist/cjs/dealStorageData.js +331 -0
  10. package/dist/cjs/dealStorageData.js.map +7 -0
  11. package/dist/cjs/docchainContextFill.d.ts +2 -0
  12. package/dist/cjs/docchainContextFill.js +38 -0
  13. package/dist/cjs/docchainContextFill.js.map +7 -0
  14. package/dist/cjs/formatModule/formatModuleData.js +53 -10
  15. package/dist/cjs/formatModule/formatModuleData.js.map +2 -2
  16. package/dist/cjs/formatModule/helpers/formatDescriptionsProps.js +13 -2
  17. package/dist/cjs/formatModule/helpers/formatDescriptionsProps.js.map +3 -3
  18. package/dist/cjs/formatModule/helpers/formatEchartLineProps.js +12 -5
  19. package/dist/cjs/formatModule/helpers/formatEchartLineProps.js.map +3 -3
  20. package/dist/cjs/formatModule/helpers/formatEchartPieProps.d.ts +1 -0
  21. package/dist/cjs/formatModule/helpers/formatEchartPieProps.js +26 -2
  22. package/dist/cjs/formatModule/helpers/formatEchartPieProps.js.map +3 -3
  23. package/dist/cjs/formatModule/helpers/formatFormProps.js +11 -0
  24. package/dist/cjs/formatModule/helpers/formatFormProps.js.map +3 -3
  25. package/dist/cjs/formatModule/helpers/formatHighCodeProps.js +3 -0
  26. package/dist/cjs/formatModule/helpers/formatHighCodeProps.js.map +2 -2
  27. package/dist/cjs/formatModule/helpers/formatImageProps.js +9 -3
  28. package/dist/cjs/formatModule/helpers/formatImageProps.js.map +2 -2
  29. package/dist/cjs/getClassPrefix.d.ts +2 -0
  30. package/dist/cjs/getClassPrefix.js +43 -0
  31. package/dist/cjs/getClassPrefix.js.map +7 -0
  32. package/dist/cjs/http.d.ts +10 -0
  33. package/dist/cjs/http.js +18 -0
  34. package/dist/cjs/http.js.map +2 -2
  35. package/dist/cjs/index.d.ts +10 -2
  36. package/dist/cjs/index.js +33 -4
  37. package/dist/cjs/index.js.map +3 -3
  38. package/dist/cjs/onCallSkillEvent.d.ts +21 -0
  39. package/dist/cjs/onCallSkillEvent.js +81 -0
  40. package/dist/cjs/onCallSkillEvent.js.map +7 -0
  41. package/dist/cjs/treeUtils.js +1 -1
  42. package/dist/cjs/treeUtils.js.map +2 -2
  43. package/dist/cjs/unitConversion.d.ts +2 -0
  44. package/dist/cjs/unitConversion.js +45 -0
  45. package/dist/cjs/unitConversion.js.map +7 -0
  46. package/dist/cjs/watermark.d.ts +0 -28
  47. package/dist/cjs/watermark.js +4 -277
  48. package/dist/cjs/watermark.js.map +2 -2
  49. package/dist/esm/aiGenerateFill.d.ts +2 -0
  50. package/dist/esm/aiGenerateFill.js +17 -0
  51. package/dist/esm/aiGenerateFill.js.map +1 -0
  52. package/dist/esm/copyToClipboard.d.ts +6 -0
  53. package/dist/esm/copyToClipboard.js +23 -0
  54. package/dist/esm/copyToClipboard.js.map +1 -0
  55. package/dist/esm/dealStorageData.d.ts +35 -0
  56. package/dist/esm/dealStorageData.js +441 -0
  57. package/dist/esm/dealStorageData.js.map +1 -0
  58. package/dist/esm/docchainContextFill.d.ts +2 -0
  59. package/dist/esm/docchainContextFill.js +17 -0
  60. package/dist/esm/docchainContextFill.js.map +1 -0
  61. package/dist/esm/formatModule/formatModuleData.js +58 -11
  62. package/dist/esm/formatModule/formatModuleData.js.map +1 -1
  63. package/dist/esm/formatModule/helpers/formatDescriptionsProps.js +20 -3
  64. package/dist/esm/formatModule/helpers/formatDescriptionsProps.js.map +1 -1
  65. package/dist/esm/formatModule/helpers/formatEchartLineProps.js +12 -5
  66. package/dist/esm/formatModule/helpers/formatEchartLineProps.js.map +1 -1
  67. package/dist/esm/formatModule/helpers/formatEchartPieProps.d.ts +1 -0
  68. package/dist/esm/formatModule/helpers/formatEchartPieProps.js +30 -5
  69. package/dist/esm/formatModule/helpers/formatEchartPieProps.js.map +1 -1
  70. package/dist/esm/formatModule/helpers/formatFormProps.js +8 -0
  71. package/dist/esm/formatModule/helpers/formatFormProps.js.map +1 -1
  72. package/dist/esm/formatModule/helpers/formatHighCodeProps.js +6 -1
  73. package/dist/esm/formatModule/helpers/formatHighCodeProps.js.map +1 -1
  74. package/dist/esm/formatModule/helpers/formatImageProps.js +9 -3
  75. package/dist/esm/formatModule/helpers/formatImageProps.js.map +1 -1
  76. package/dist/esm/getClassPrefix.d.ts +2 -0
  77. package/dist/esm/getClassPrefix.js +15 -0
  78. package/dist/esm/getClassPrefix.js.map +1 -0
  79. package/dist/esm/http.d.ts +10 -0
  80. package/dist/esm/http.js +90 -58
  81. package/dist/esm/http.js.map +1 -1
  82. package/dist/esm/index.d.ts +10 -2
  83. package/dist/esm/index.js +9 -3
  84. package/dist/esm/index.js.map +1 -1
  85. package/dist/esm/onCallSkillEvent.d.ts +21 -0
  86. package/dist/esm/onCallSkillEvent.js +90 -0
  87. package/dist/esm/onCallSkillEvent.js.map +1 -0
  88. package/dist/esm/treeUtils.js +1 -3
  89. package/dist/esm/treeUtils.js.map +1 -1
  90. package/dist/esm/unitConversion.d.ts +2 -0
  91. package/dist/esm/unitConversion.js +21 -0
  92. package/dist/esm/unitConversion.js.map +1 -0
  93. package/dist/esm/watermark.d.ts +0 -28
  94. package/dist/esm/watermark.js +2 -411
  95. package/dist/esm/watermark.js.map +1 -1
  96. package/dist/umd/index.min.js +1 -1
  97. package/dist/umd/index.min.js.map +1 -1
  98. package/package.json +8 -3
@@ -1 +1 @@
1
- {"version":3,"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","catch","_catch","delegateYield","asyncGeneratorStep","gen","reject","_next","_throw","key","info","error","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","escapeXml","str","replace","getVariableRealValue","sessionInfo","getUserInfoFromStorage","contextParams","getContextParamsFromStorage","clientIp","getClientIp","now","Date","systemMatch","match","systemKey","year","getFullYear","month","String","getMonth","padStart","day","getDate","hours","getHours","minutes","getMinutes","seconds","getSeconds","concat","sessionMatch","sessionKey","userId","userName","realName","contextParamsMatch","contextParamsKey","generateWatermarkStyle","styles","color","fontSize","opacity","transform","angle","whiteSpace","lineHeight","_userStores$state","window","userStoresStr","sessionStorage","getItem","localStorage","userStores","JSON","parse","userInfo","state","console","warn","contextParamsStr","getClientIpFromStorage","cachedIp","setClientIpToStorage","ip","setItem","fetchClientIp","_fetchClientIp","_callee","ipServices","_i","_ipServices","serviceUrl","response","contentType","data","defaultIp","_callee$","_context","fetch","headers","Accept","ok","get","includes","json","query","origin","text","trim","test","t0","parseContentVariables","content","variableRegex","cachedSessionInfo","cachedContextParams","contextParamsRead","variableKey","getVariableRealValueWithCache","generateWatermarkBase64","config","styleConfig","layout","realContent","textLines","split","filter","line","encodeURIComponent","horizontalSpacing","verticalSpacing","escapedColor","textHeight","startY","tspanElements","map","index","escapedLine","join","svgContent"],"sources":["../../src/watermark.ts"],"sourcesContent":["/**\n * 水印工具函数\n */\n\nimport type { CSSProperties } from 'react';\n\nexport interface WatermarkStyles {\n color: string;\n opacity: number;\n fontSize: number;\n angle: number;\n}\n\nexport interface WatermarkLayout {\n density: string;\n horizontalSpacing: number;\n verticalSpacing: number;\n arrangement: string;\n}\n\n/**\n * 水印行配置\n */\nexport interface WatermarkRow {\n enabled: boolean;\n variable?: string;\n text?: string;\n}\n\nexport interface WatermarkConfig {\n content: string;\n styles: WatermarkStyles;\n layout: WatermarkLayout;\n rows?: WatermarkRow[]; // 可选,用于向后兼容\n}\n\n/**\n * 上下文变量类型\n */\nexport interface ContextVariable {\n code: string;\n name: string;\n}\n\n/**\n * 会话信息类型\n */\nexport interface SessionInfo {\n userId?: string;\n userName?: string;\n realName?: string;\n}\n\n/**\n * XML 转义\n */\nexport function escapeXml(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n}\n\n/**\n * 根据 key 获取变量的真实值\n * @param key 变量 key,支持格式:${system.now}、${system.today}、${system.ip}、${session.userId}、${session.userName}、${session.realName}、${contextParams.xxx}\n */\nexport function getVariableRealValue(\n key: string,\n): string {\n // 从 sessionStorage 获取用户信息\n const sessionInfo = getUserInfoFromStorage();\n \n // 从 storage 获取 contextParams\n const contextParams = getContextParamsFromStorage();\n \n // 获取客户端 IP(从缓存读取,如果没有则返回默认值)\n const clientIp = getClientIp();\n\n const now = new Date();\n\n // 处理 ${system.xxx} 格式\n const systemMatch = key.match(/^\\$\\{system\\.(\\w+)\\}$/);\n if (systemMatch) {\n const systemKey = systemMatch[1];\n switch (systemKey) {\n case 'now': {\n // 当前时间:格式为 YYYY-MM-DD HH:mm:ss\n const year = now.getFullYear();\n const month = String(now.getMonth() + 1).padStart(2, '0');\n const day = String(now.getDate()).padStart(2, '0');\n const hours = String(now.getHours()).padStart(2, '0');\n const minutes = String(now.getMinutes()).padStart(2, '0');\n const seconds = String(now.getSeconds()).padStart(2, '0');\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n }\n case 'today': {\n // 当前日期:格式为 YYYY-MM-DD\n const year = now.getFullYear();\n const month = String(now.getMonth() + 1).padStart(2, '0');\n const day = String(now.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n case 'ip':\n return clientIp;\n default:\n return '';\n }\n }\n\n // 处理 ${session.xxx} 格式\n const sessionMatch = key.match(/^\\$\\{session\\.(\\w+)\\}$/);\n if (sessionMatch) {\n const sessionKey = sessionMatch[1];\n switch (sessionKey) {\n case 'userId':\n return sessionInfo.userId || '';\n case 'userName':\n return sessionInfo.userName || '';\n case 'realName':\n return sessionInfo.realName || '';\n default:\n return '';\n }\n }\n\n // 处理 ${contextParams.xxx} 格式\n const contextParamsMatch = key.match(/^\\$\\{contextParams\\.(\\w+)\\}$/);\n if (contextParamsMatch) {\n const contextParamsKey = contextParamsMatch[1];\n if (contextParams && typeof contextParams === 'object') {\n const value = contextParams[contextParamsKey];\n // 如果值是 null 或 undefined,返回空字符串;否则转换为字符串\n return value != null ? String(value) : '';\n }\n return '';\n }\n return '';\n}\n\n/**\n * 生成水印样式对象\n * @param styles 样式配置\n */\nexport function generateWatermarkStyle(styles: WatermarkStyles): CSSProperties {\n return {\n color: styles.color,\n fontSize: `${styles.fontSize}px`,\n opacity: styles.opacity / 100,\n transform: `rotate(${styles.angle}deg)`,\n whiteSpace: 'nowrap' as const,\n lineHeight: 1.2,\n };\n}\n\n/**\n * 从 storage 获取用户信息(优先从 sessionStorage,其次从 localStorage)\n */\nfunction getUserInfoFromStorage(): SessionInfo {\n try {\n if (typeof window === 'undefined') {\n return {};\n }\n\n // 优先从 sessionStorage 读取,如果没有则从 localStorage 读取\n let userStoresStr = null;\n if (window.sessionStorage) {\n userStoresStr = window.sessionStorage.getItem('userStores');\n }\n if (!userStoresStr && window.localStorage) {\n userStoresStr = window.localStorage.getItem('userStores');\n }\n\n if (!userStoresStr) {\n return {};\n }\n\n const userStores = JSON.parse(userStoresStr);\n const userInfo = userStores?.state?.userInfo;\n if (!userInfo) {\n return {};\n }\n return {\n userId: userInfo.userId || '',\n userName: userInfo.userName || '',\n realName: userInfo.realName || '',\n };\n } catch (e) {\n console.warn('Failed to get user info from storage:', e);\n return {};\n }\n}\n\n/**\n * 从 storage 获取 contextParams(优先从 sessionStorage,其次从 localStorage)\n */\nfunction getContextParamsFromStorage(): { [key: string]: any } | null {\n try {\n if (typeof window === 'undefined') {\n return null;\n }\n\n // 优先从 sessionStorage 读取,如果没有则从 localStorage 读取\n let contextParamsStr = null;\n if (window.sessionStorage) {\n contextParamsStr = window.sessionStorage.getItem('contextParams');\n }\n if (!contextParamsStr && window.localStorage) {\n contextParamsStr = window.localStorage.getItem('contextParams');\n }\n\n if (!contextParamsStr) {\n return null;\n }\n\n return JSON.parse(contextParamsStr) || null;\n } catch (e) {\n console.warn('Failed to get contextParams from storage:', e);\n return null;\n }\n}\n\n/**\n * 从 storage 获取缓存的客户端 IP\n */\nfunction getClientIpFromStorage(): string | null {\n try {\n if (typeof window === 'undefined') {\n return null;\n }\n\n // 优先从 sessionStorage 读取,如果没有则从 localStorage 读取\n let cachedIp = null;\n if (window.sessionStorage) {\n cachedIp = window.sessionStorage.getItem('clientIp');\n }\n if (!cachedIp && window.localStorage) {\n cachedIp = window.localStorage.getItem('clientIp');\n }\n\n return cachedIp;\n } catch (e) {\n console.warn('Failed to get client IP from storage:', e);\n return null;\n }\n}\n\n/**\n * 缓存客户端 IP 到 storage\n */\nfunction setClientIpToStorage(ip: string): void {\n try {\n if (typeof window === 'undefined') {\n return;\n }\n\n // 优先保存到 sessionStorage,同时保存到 localStorage 作为备份\n if (window.sessionStorage) {\n window.sessionStorage.setItem('clientIp', ip);\n }\n if (window.localStorage) {\n window.localStorage.setItem('clientIp', ip);\n }\n } catch (e) {\n console.warn('Failed to save client IP to storage:', e);\n }\n}\n\n/**\n * 异步获取客户端 IP(通过第三方 API)\n * @returns Promise<string> 返回客户端 IP 地址\n */\nexport async function fetchClientIp(): Promise<string> {\n // 先检查缓存\n const cachedIp = getClientIpFromStorage();\n if (cachedIp) {\n return cachedIp;\n }\n\n // 尝试多个 IP 查询服务(按优先级)\n const ipServices = [\n 'https://api.ipify.org?format=json',\n 'https://api.ip.sb/ip',\n 'https://api.ipify.org',\n ];\n\n for (const serviceUrl of ipServices) {\n try {\n const response = await fetch(serviceUrl, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n },\n });\n\n if (response.ok) {\n let ip: string;\n const contentType = response.headers.get('content-type');\n \n if (contentType && contentType.includes('application/json')) {\n const data = await response.json();\n ip = data.ip || data.query || data.origin || '';\n } else {\n ip = (await response.text()).trim();\n }\n\n // 验证 IP 格式\n if (ip && /^(\\d{1,3}\\.){3}\\d{1,3}$/.test(ip)) {\n // 缓存 IP\n setClientIpToStorage(ip);\n return ip;\n }\n }\n } catch (e) {\n // 继续尝试下一个服务(静默失败)\n }\n }\n\n // 所有服务都失败,返回默认值\n const defaultIp = '127.0.0.1';\n console.warn('Failed to fetch client IP, using default:', defaultIp);\n return defaultIp;\n}\n\n/**\n * 获取客户端 IP(同步方法,从缓存读取)\n * @returns string 返回客户端 IP 地址,如果缓存中没有则返回默认值 '127.0.0.1'\n */\nexport function getClientIp(): string {\n const cachedIp = getClientIpFromStorage();\n if (cachedIp) {\n return cachedIp;\n }\n\n // 如果没有缓存,尝试异步获取(不阻塞当前调用)\n // 下次调用时会使用缓存的 IP\n if (typeof window !== 'undefined') {\n fetchClientIp().catch(() => {\n // 静默失败,不影响当前调用\n });\n }\n\n return '127.0.0.1';\n}\n\n/**\n * 解析 content 中的所有变量并替换为真实值\n * @param content 原始内容,可能包含变量如 ${system.now}、${session.userId}、${contextParams.userName} 等\n */\nexport function parseContentVariables(\n content: string,\n): string {\n // 匹配所有变量:${system.xxx}、${session.xxx} 或 ${contextParams.xxx}\n const variableRegex = /\\$\\{(system|session|contextParams)\\.(\\w+)\\}/g;\n \n // 缓存 storage 读取结果,避免在解析多个变量时重复读取\n let cachedSessionInfo: SessionInfo | null = null;\n let cachedContextParams: { [key: string]: any } | null = null;\n let contextParamsRead = false; // 标记是否已读取 contextParams\n \n return content.replace(variableRegex, (match, type, key) => {\n const variableKey = `\\${${type}.${key}}`;\n \n // 对于需要 storage 数据的变量类型,使用缓存\n if (type === 'session' && cachedSessionInfo === null) {\n cachedSessionInfo = getUserInfoFromStorage();\n }\n if (type === 'contextParams' && !contextParamsRead) {\n cachedContextParams = getContextParamsFromStorage();\n contextParamsRead = true;\n }\n \n // 如果变量需要 session 或 contextParams,使用缓存的版本\n if (type === 'session' || type === 'contextParams') {\n return getVariableRealValueWithCache(variableKey, cachedSessionInfo, cachedContextParams);\n }\n \n // 其他类型(system)直接调用\n return getVariableRealValue(variableKey);\n });\n}\n\n/**\n * 带缓存的变量值获取(内部使用)\n */\nfunction getVariableRealValueWithCache(\n key: string,\n sessionInfo: SessionInfo | null,\n contextParams: { [key: string]: any } | null\n): string {\n // 获取客户端 IP(从缓存读取,如果没有则返回默认值)\n const clientIp = getClientIp();\n const now = new Date();\n\n // 处理 ${system.xxx} 格式\n const systemMatch = key.match(/^\\$\\{system\\.(\\w+)\\}$/);\n if (systemMatch) {\n const systemKey = systemMatch[1];\n switch (systemKey) {\n case 'now': {\n const year = now.getFullYear();\n const month = String(now.getMonth() + 1).padStart(2, '0');\n const day = String(now.getDate()).padStart(2, '0');\n const hours = String(now.getHours()).padStart(2, '0');\n const minutes = String(now.getMinutes()).padStart(2, '0');\n const seconds = String(now.getSeconds()).padStart(2, '0');\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n }\n case 'today': {\n const year = now.getFullYear();\n const month = String(now.getMonth() + 1).padStart(2, '0');\n const day = String(now.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n case 'ip':\n return clientIp;\n default:\n return '';\n }\n }\n\n // 处理 ${session.xxx} 格式\n const sessionMatch = key.match(/^\\$\\{session\\.(\\w+)\\}$/);\n if (sessionMatch) {\n const sessionKey = sessionMatch[1];\n if (sessionInfo) {\n switch (sessionKey) {\n case 'userId':\n return sessionInfo.userId || '';\n case 'userName':\n return sessionInfo.userName || '';\n case 'realName':\n return sessionInfo.realName || '';\n default:\n return '';\n }\n }\n return '';\n }\n\n // 处理 ${contextParams.xxx} 格式\n const contextParamsMatch = key.match(/^\\$\\{contextParams\\.(\\w+)\\}$/);\n if (contextParamsMatch) {\n const contextParamsKey = contextParamsMatch[1];\n if (contextParams && typeof contextParams === 'object') {\n const value = contextParams[contextParamsKey];\n return value != null ? String(value) : '';\n }\n return '';\n }\n return '';\n}\n\n/**\n * 生成水印的 base64 数据 URL\n * 当前环境localStore中存有数据 :key=userStores value={\"state\":{\"userInfo\":{\"token\":\"16fe343c-78ae-4fd8-93eb-410256dd483b\",\"userId\":\"1\",\"userName\":\"admin\",\"phoneNo\":\"13800138002\",\"email\":\"admin@localhost.com\",\"realName\":\"admin2\",\"defaultTenantId\":\"0\",\"avatar\":\"./images/avatar/img-user-avatar-10.png\",\"userIcon\":\"./images/avatar/img-user-avatar-10.png\"},\"currentTenantId\":\"1273556018761138176\",\"userSelectedBotOrder\":[\"1211941633166168064\",\"1212229286675095552\"],\"activeSession\":null},\"version\":0}\n * config参考: {\"enabled\":true,\"content\":\"测试水印 ${session.userId}\",\"styles\":{\"color\":\"#999999\",\"opacity\":20,\"fontSize\":16,\"angle\":-15},\"layout\":{\"density\":\"medium\",\"horizontalSpacing\":100,\"verticalSpacing\":100,\"arrangement\":\"tile\"}}\n */\nexport function generateWatermarkBase64(\n config: WatermarkConfig,\n): string {\n const { styles: styleConfig, layout, content } = config;\n\n // 解析 content 中的所有变量并替换为真实值\n const realContent = parseContentVariables(content || '');\n \n // 处理多行文本(按换行符分割,保留非空行)\n const textLines = realContent.split('\\n').filter(line => line.trim() !== '');\n \n // 如果没有有效文本,使用空字符串\n if (textLines.length === 0) {\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${layout.horizontalSpacing}\" height=\"${layout.verticalSpacing}\"></svg>`)}`;\n }\n \n const escapedColor = escapeXml(styleConfig.color);\n const lineHeight = styleConfig.fontSize * 1.2; // 行高为字体大小的1.2倍\n \n // 计算文本总高度\n const textHeight = textLines.length * lineHeight;\n // 垂直居中:从垂直间距的中心位置开始,向上偏移文本高度的一半\n const startY = layout.verticalSpacing / 2 - textHeight / 2 + lineHeight;\n\n // 使用 tspan 来显示多行文本\n const tspanElements = textLines.map((line: string, index: number) => {\n const escapedLine = escapeXml(line);\n const y = startY + index * lineHeight;\n return `<tspan x=\"10\" y=\"${y}\">${escapedLine}</tspan>`;\n }).join('');\n\n const svgContent = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${layout.horizontalSpacing}\" height=\"${layout.verticalSpacing}\">\n <text\n font-size=\"${styleConfig.fontSize}\"\n fill=\"${escapedColor}\"\n fill-opacity=\"${styleConfig.opacity / 100}\"\n transform=\"rotate(${styleConfig.angle} ${layout.horizontalSpacing / 2} ${layout.verticalSpacing / 2})\"\n >\n ${tspanElements}\n </text>\n </svg>\n `.replace(/\\s+/g, ' ');\n\n // 使用 encodeURIComponent 而不是 btoa,以支持中文字符\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgContent)}`;\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["parseContentVariables","escapeXml","str","replace","generateWatermarkStyle","styles","color","fontSize","concat","opacity","transform","angle","whiteSpace","lineHeight","generateWatermarkBase64","config","styleConfig","layout","content","realContent","textLines","split","filter","line","trim","length","encodeURIComponent","horizontalSpacing","verticalSpacing","escapedColor","textHeight","startY","tspanElements","map","index","escapedLine","y","join","svgContent"],"sources":["../../src/watermark.ts"],"sourcesContent":["/**\n * 水印工具函数\n */\n\nimport type { CSSProperties } from 'react';\nimport { parseContentVariables } from './dealStorageData';\n\nexport interface WatermarkStyles {\n color: string;\n opacity: number;\n fontSize: number;\n angle: number;\n}\n\nexport interface WatermarkLayout {\n density: string;\n horizontalSpacing: number;\n verticalSpacing: number;\n arrangement: string;\n}\n\n/**\n * 水印行配置\n */\nexport interface WatermarkRow {\n enabled: boolean;\n variable?: string;\n text?: string;\n}\n\nexport interface WatermarkConfig {\n content: string;\n styles: WatermarkStyles;\n layout: WatermarkLayout;\n rows?: WatermarkRow[]; // 可选,用于向后兼容\n}\n\n/**\n * 上下文变量类型\n */\nexport interface ContextVariable {\n code: string;\n name: string;\n}\n\n/**\n * XML 转义\n */\nexport function escapeXml(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n}\n\n/**\n * 生成水印样式对象\n * @param styles 样式配置\n */\nexport function generateWatermarkStyle(styles: WatermarkStyles): CSSProperties {\n return {\n color: styles.color,\n fontSize: `${styles.fontSize}px`,\n opacity: styles.opacity / 100,\n transform: `rotate(${styles.angle}deg)`,\n whiteSpace: 'nowrap' as const,\n lineHeight: 1.2,\n };\n}\n\n/**\n * 生成水印的 base64 数据 URL\n * 当前环境localStore中存有数据 :key=userStores value={\"state\":{\"userInfo\":{\"token\":\"16fe343c-78ae-4fd8-93eb-410256dd483b\",\"userId\":\"1\",\"userName\":\"admin\",\"phoneNo\":\"13800138002\",\"email\":\"admin@localhost.com\",\"realName\":\"admin2\",\"defaultTenantId\":\"0\",\"avatar\":\"./images/avatar/img-user-avatar-10.png\",\"userIcon\":\"./images/avatar/img-user-avatar-10.png\"},\"currentTenantId\":\"1273556018761138176\",\"userSelectedBotOrder\":[\"1211941633166168064\",\"1212229286675095552\"],\"activeSession\":null},\"version\":0}\n * config参考: {\"enabled\":true,\"content\":\"测试水印 ${session.userId}\",\"styles\":{\"color\":\"#999999\",\"opacity\":20,\"fontSize\":16,\"angle\":-15},\"layout\":{\"density\":\"medium\",\"horizontalSpacing\":100,\"verticalSpacing\":100,\"arrangement\":\"tile\"}}\n */\nexport function generateWatermarkBase64(\n config: WatermarkConfig,\n): string {\n const { styles: styleConfig, layout, content } = config;\n\n // 解析 content 中的所有变量并替换为真实值\n const realContent = parseContentVariables(content || '');\n \n // 处理多行文本(按换行符分割,保留非空行)\n const textLines = realContent.split('\\n').filter(line => line.trim() !== '');\n \n // 如果没有有效文本,使用空字符串\n if (textLines.length === 0) {\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${layout.horizontalSpacing}\" height=\"${layout.verticalSpacing}\"></svg>`)}`;\n }\n \n const escapedColor = escapeXml(styleConfig.color);\n const lineHeight = styleConfig.fontSize * 1.2; // 行高为字体大小的1.2倍\n \n // 计算文本总高度\n const textHeight = textLines.length * lineHeight;\n // 垂直居中:从垂直间距的中心位置开始,向上偏移文本高度的一半\n const startY = layout.verticalSpacing / 2 - textHeight / 2 + lineHeight;\n\n // 使用 tspan 来显示多行文本\n const tspanElements = textLines.map((line: string, index: number) => {\n const escapedLine = escapeXml(line);\n const y = startY + index * lineHeight;\n return `<tspan x=\"10\" y=\"${y}\">${escapedLine}</tspan>`;\n }).join('');\n\n const svgContent = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${layout.horizontalSpacing}\" height=\"${layout.verticalSpacing}\">\n <text\n font-size=\"${styleConfig.fontSize}\"\n fill=\"${escapedColor}\"\n fill-opacity=\"${styleConfig.opacity / 100}\"\n transform=\"rotate(${styleConfig.angle} ${layout.horizontalSpacing / 2} ${layout.verticalSpacing / 2})\"\n >\n ${tspanElements}\n </text>\n </svg>\n `.replace(/\\s+/g, ' ');\n\n // 使用 encodeURIComponent 而不是 btoa,以支持中文字符\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgContent)}`;\n}\n"],"mappings":"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"}