diff --git a/packages/runtime/CHANGELOG.md b/packages/runtime/CHANGELOG.md index 54e5c7a5687987ee06e5272cc24dd1f61908624f..ab259b68e3f973a939a413c76d75bb783bbc35c9 100644 --- a/packages/runtime/CHANGELOG.md +++ b/packages/runtime/CHANGELOG.md @@ -12,6 +12,10 @@ - 修复重复器1对1表单新建更新默认值无效的问题,修复树部件文档生成报错的问题 - 修复表格远程聚合计算异常,未适配数值类型与值为空的场景 +### Added + +- 新增屏幕截图组件和工具类 + ## [0.7.41-alpha.43] - 2025-12-04 ### Added diff --git a/packages/runtime/src/interface/api/util/i-api-file-util.ts b/packages/runtime/src/interface/api/util/i-api-file-util.ts index 7c2327a7fb144b1c329bba921eaaafa1052fc4ef..cfa0accf20da72483610462cf85fe7ff4adfbe59 100644 --- a/packages/runtime/src/interface/api/util/i-api-file-util.ts +++ b/packages/runtime/src/interface/api/util/i-api-file-util.ts @@ -222,11 +222,20 @@ export interface IApiFileUtil { ): Promise; /** - * 图片压缩 - * @param file 原始文件 - * @param maxW 最大宽度(默认 1280) - * @param quality 压缩质量 0~1(默认 0.8) - * @returns Promise 压缩后的新文件 + * @description 图片压缩 + * @param {File} file 原始文件 + * @param {number} maxW 最大宽度(默认 1280) + * @param {number} quality 压缩质量 0~1(默认 0.8) + * @returns {*} {Promise} 压缩后的新文件 + * @memberof IApiFileUtil */ compressImg(file: File, maxW: number, quality: number): Promise; + + /** + * @description base64转Blob对象 + * @param {string} base64 base64 字符串 + * @returns {*} {Blob} Blob对象 + * @memberof IApiFileUtil + */ + base64ToBlob(base64: string): Blob; } diff --git a/packages/runtime/src/interface/api/util/i-api-screen-shot-util.ts b/packages/runtime/src/interface/api/util/i-api-screen-shot-util.ts new file mode 100644 index 0000000000000000000000000000000000000000..605da0230d6f9da0b19f250a4cf92bb0e21446fe --- /dev/null +++ b/packages/runtime/src/interface/api/util/i-api-screen-shot-util.ts @@ -0,0 +1,18 @@ +/** + * @description 屏幕截图工具类 + * @export + * @interface IApiScreenShotUtil + */ +export interface IApiScreenShotUtil { + /** + * @description 元素截图 + * @param {HTMLElement} element 需要截图的元素 + * @param {{ container?: HTMLElement; itemClassName?: string }} opts 如果需针对dom内部滚动容器截图,则需配置:滚动容器,滚动容器项类名,用以排除非可视区元素 + * @returns {*} {(Promise)} 图片(png格式) base64 字符串 + * @memberof IApiScreenShotUtil + */ + onScreenShot( + element: HTMLElement, + opts: { container?: HTMLElement; itemClassName?: string }, + ): Promise; +} diff --git a/packages/runtime/src/interface/api/util/index.ts b/packages/runtime/src/interface/api/util/index.ts index 549a41bd8e0e4609a32ec9a732aced53462ee7f1..13233730c53d047c0ef8c1c84c05c6ea6def0df6 100644 --- a/packages/runtime/src/interface/api/util/index.ts +++ b/packages/runtime/src/interface/api/util/index.ts @@ -43,3 +43,4 @@ export type { IApiJsonRepairOption, IApiJsonRepairResult, } from './i-api-json-util'; +export type { IApiScreenShotUtil } from './i-api-screen-shot-util'; diff --git a/packages/runtime/src/interface/util/i-screen-shot-util/i-screen-shot-util.ts b/packages/runtime/src/interface/util/i-screen-shot-util/i-screen-shot-util.ts new file mode 100644 index 0000000000000000000000000000000000000000..d328dc0d93cb618d33c094c05cc3be7ecfd1b1e8 --- /dev/null +++ b/packages/runtime/src/interface/util/i-screen-shot-util/i-screen-shot-util.ts @@ -0,0 +1,9 @@ +import { IApiScreenShotUtil } from '../../api'; + +/** + * @description 屏幕截图工具类 + * @export + * @interface IScreenShotUtil + * @extends {IApiScreenShotUtil} + */ +export interface IScreenShotUtil extends IApiScreenShotUtil {} diff --git a/packages/runtime/src/interface/util/index.ts b/packages/runtime/src/interface/util/index.ts index de2e2c224f8661a338a07418ad408a63967f590a..e8f72adc13dfeffedde700f874683988e50e5ea6 100644 --- a/packages/runtime/src/interface/util/index.ts +++ b/packages/runtime/src/interface/util/index.ts @@ -41,3 +41,4 @@ export type { IAIChatUtil, } from './i-ai-chat-util/i-ai-chat-util'; export type { IJsonUtil } from './i-json-util/i-json-util'; +export type { IScreenShotUtil } from './i-screen-shot-util/i-screen-shot-util'; diff --git a/packages/runtime/src/types.ts b/packages/runtime/src/types.ts index 0250fdaa70c97e69d70699439e78773d74db4f30..6229ba5d99a1673d24e237394334e264988b9b53 100644 --- a/packages/runtime/src/types.ts +++ b/packages/runtime/src/types.ts @@ -22,6 +22,7 @@ import { IQrcodeUtil, IInLineAIUtil, IAIChatUtil, + IScreenShotUtil, } from './interface'; import { LogicSchedulerCenter } from './logic-scheduler'; import { RegisterCenter } from './register/register-center'; @@ -265,6 +266,13 @@ declare module '@ibiz-template/core' { * AI聊天工具类 */ aiChatUtil: IAIChatUtil; + + /** + * @description 屏幕截图工具类 + * @type {IScreenShotUtil} + * @memberof IBizSys + */ + screenShotUtil: IScreenShotUtil; } interface IEnvironment { diff --git a/packages/runtime/src/utils/file-util/file-util.ts b/packages/runtime/src/utils/file-util/file-util.ts index b87f74b876ab34b23efd4468df865a86a0a6e6bc..fbeb1a6ec507d94e54df426cb3fdafabaed5b4e4 100644 --- a/packages/runtime/src/utils/file-util/file-util.ts +++ b/packages/runtime/src/utils/file-util/file-util.ts @@ -562,4 +562,20 @@ export class FileUtil implements IApiFileUtil { }; }); }; + + /** + * @description base64字符串转Blob对象 + * @param {string} base64 + * @returns {*} {Blob} + * @memberof FileUtil + */ + base64ToBlob(base64: string): Blob { + const binStr = atob(base64.split(',')[1]); + const len = binStr.length; + const arr = new Uint8Array(len); + for (let i = 0; i < len; i++) { + arr[i] = binStr.charCodeAt(i); + } + return new Blob([arr]); + } }