myprint-design
Version:
操作简单,组件丰富的一站式打印解决方案打印设计器
1 lines • 27.9 kB
Source Map (JSON)
{"version":3,"file":"utils.mjs","sources":["../../../../src/utils/utils.ts"],"sourcesContent":["import { clearEventBubble } from './event';\nimport { MyElement, TableCellElement } from '@myprint/design/types/entity';\nimport { displayRatio } from '@myprint/design/utils/devicePixelRatio';\n// @ts-ignore\nimport * as mittInit from 'mitt';\nimport { Emitter } from 'mitt';\nimport { fontList } from '@myprint/design/constants/common';\nimport { EventTypes } from '@myprint/design/types/eventType';\nimport { findFromLeftCell } from '@myprint/design/utils/table/dataTable';\n\nlet collapsePanelZIndex = 1000;\n\nexport const mitt = mittInit.default() as Emitter<EventTypes>;\n\nexport function sortColumn(myElement: MyElement, baseColIndex: number, row: number, sourceIndex: number, targetIndex: number) {\n const col = baseColIndex;\n const diffCol = targetIndex - sourceIndex;\n // console.log(col, targetCol);\n // console.log(myElement.tableHeadList, baseColIndex, row, col, targetCol);\n // const source = myElement.tableHeadList[sourceIndex];\n // 删除原来的\n // console.log(myElement.tableHeadList[row]);\n const baseCell = myElement.tableHeadList[row][col];\n const { cell: targetCell, col: targetCol } = findFromLeftCell(myElement.tableHeadList, row, baseColIndex, diffCol)!;\n // console.log(targetCell, targetCol);\n // console.log(baseCell, targetColTmp);\n const colspan = baseCell.colspan;\n const targetColspan = targetCell.colspan;\n // console.log(myElement.tableHeadList);\n changeTableList(myElement.tableHeadList, row, col, targetCol, colspan, targetColspan);\n changeTableList(myElement.tableBodyList, 0, col, targetCol, colspan, targetColspan);\n // console.log(myElement.tableHeadList);\n\n // myElement.headList.splice(targetIndex, 0, source);\n\n // for (let bodyRowList of myElement.bodyList) {\n //\n // const source = bodyRowList[sourceIndex];\n // bodyRowList.splice(sourceIndex, 1);\n //\n // bodyRowList.splice(targetIndex, 0, source);\n // }\n\n // for (let i = 0; i < arr.length; i++) {\n // console.log(arr[i])\n // arr[i].option.sort = i;\n // }\n}\n\nfunction changeTableList(list: any[][], row: number, col: number, targetCol: number, colspan: number, targetColspan: number) {\n\n const cacheSourceCellList: TableCellElement[][] = [];\n for (let i = row; i < list.length; i++) {\n const rowList = list[i];\n const cacheSourceCellListTmp: TableCellElement[] = [];\n for (let j = 0; j < colspan; j++) {\n cacheSourceCellListTmp.push(rowList[col]);\n rowList.splice(col, 1);\n }\n cacheSourceCellList.push(cacheSourceCellListTmp);\n }\n // 新位置插入\n // debugger\n for (let i = row; i < list.length; i++) {\n const rowList = list[i];\n for (let j = 0; j < colspan; j++) {\n const skipColSpan = targetCol > col ? (targetColspan - 1) - (colspan - 1) : 0;\n rowList.splice(targetCol + skipColSpan + j, 0, cacheSourceCellList[i - row][j]);\n }\n }\n}\n\nexport function click(ev: any, realFun: () => void) {\n clearEventBubble(ev);\n realFun();\n}\n\nexport function parse<T>(str: string, target: T): T {\n let targetObj: any = JSON.parse(str);\n return to(targetObj, target);\n}\n\n\nexport function to<T>(source: any, target: T): T {\n return Object.assign(target as any, source);\n}\n\nexport function trend0(num: number) {\n return num < 0 ? 0 : num;\n}\n\nexport function trend1(num: number) {\n return num < 1 ? 1 : num;\n}\n\nexport function getRatio() {\n return displayRatio;\n}\n\nexport function mm2pxNoScale(mm: number) {\n // 获取每毫米的像素值\n return mm * displayRatio;\n}\n\n\nexport function stringify(obj: any, ...ignore: any[]) {\n return JSON.stringify(obj, (key, value) => {\n if (ignore.includes(key)) return undefined;\n return value;\n });\n}\n\nexport function getCollapsePanelZIndex(zIndex: number) {\n if (zIndex == collapsePanelZIndex) {\n return zIndex;\n }\n return ++collapsePanelZIndex;\n}\n\nexport function rgbaToHex(rgba: string) {\n const rgbaValues = rgba.match(/\\d+/g)!;\n const r = Math.round(parseInt(rgbaValues[0]));\n const g = Math.round(parseInt(rgbaValues[1]));\n const b = Math.round(parseInt(rgbaValues[2]));\n\n const hexR = r.toString(16).padStart(2, '0');\n const hexG = g.toString(16).padStart(2, '0');\n const hexB = b.toString(16).padStart(2, '0');\n let hexA = '';\n if (rgbaValues[3]) {\n hexA = parseFloat(rgbaValues[3]).toString(16).padStart(2, '0');\n }\n\n return '#' + hexR + hexG + hexB + hexA;\n}\n\nlet printCssStyleCache: any = undefined;\n\nexport function printCssStyle() {\n if (printCssStyleCache) {\n return printCssStyleCache;\n }\n\n let cssRuleList =\n `\n @media print {\n body {\n -webkit-print-color-adjust: exact;\n print-color-adjust: exact;\n }\n }\n\n.display-flex {\n display: flex;\n}\n\n.display-flex-wrap {\n flex-wrap: wrap;\n}\n\n.display-flex-column {\n display: flex;\n flex-direction: column;\n}\n\n.my-print-text_container {\n width: 100%;\n height: 100%;\n display: flex;\n outline: 0;\n box-sizing: border-box;\n vertical-align: top;\n word-break: break-all;\n flex-grow: 1;\n}\n\n.my-print-barcode_svg_wrapper {\n width: 100%;\n max-width: 100%;\n height: 100%;\n}\n\n.my-print-text_content {\n vertical-align: top;\n word-break: break-all;\n box-sizing: border-box;\n outline: 0;\n flex-grow: 1;\n}\n\n.my-print-horizontal-line__wrapper {\n width: 100%;\n word-break: break-all;\n cursor: move;\n outline: none;\n}\n\n.my-print-horizontal-line {\n cursor: move;\n position: absolute;\n}\n\n.my-print-rect__wrapper {\n word-break: break-all;\n border: 1px #000 solid;\n box-sizing: border-box;\n position: absolute;\n cursor: text;\n}\n\n.my-print-dotted-rect__wrapper {\n word-break: break-all;\n outline: #000 dotted;\n position: absolute;\n cursor: text;\n}\n\n.my-print-table {\n text-indent: initial;\n border-collapse: collapse;\n border-spacing: 0;\n padding: 0;\n word-break: break-all;\n box-sizing: border-box;\n outline: none;\n}\n\n.my-print-columnHead {\n position: relative;\n word-break: break-all;\n height: 100%;\n\n box-sizing: border-box;\n padding: 0;\n}\n\n.my-print-columnHead__content {\n height: 100%;\n}\n\n.my-print-container {\n width: var(--design-width);\n max-width: var(--design-width);\n height: var(--design-height);\n max-height: var(--design-height);\n}\n\n.my-print-table-column_body {\n word-break: break-all;\n text-align: center;\n box-sizing: border-box;\n overflow: hidden;\n padding: 0;\n}\n\n.my-print-container_over {\n z-index: 1;\n opacity: 0.6;\n background: var(--page-header-drop-color);\n outline: 4px solid var(--drag-h-color);\n}\n\n.my-print-preview-wrap {\n position: absolute;\n}\n\n.my-print-preview-wrap_container {\n}\n\n.my-print-print_hidden {\n position: absolute;\n top: -99999px;\n}\n\n.my-print-preview-panel__wrap {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.my-print-preview-panel__content {\n position: relative;\n\n}\n\n.my-print-preview-panel__content_page {\n position: relative;\n overflow: hidden;\n //box-sizing: border-box;\n background: white;\n}\n\n.my-print-draw_panel {\n width: 100%;\n height: 100%;\n}\n\n.my-print-draw_panel_img {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n\n.my-print-chart {\n position: absolute;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n overflow: visible;\n}\n`;\n // let styleSheets = document.styleSheets;\n // // console.log(styleSheets)\n // for (let i = 0; i < styleSheets.length; i++) {\n // let styleSheet = styleSheets[i];\n // let cssRules = styleSheet.cssRules || styleSheet.rules;\n // // let isCss = false\n // for (let j = 0; j < cssRules.length; j++) {\n // let cssRule = cssRules[j];\n // let selectorText = (cssRule as CSSStyleRule).selectorText;\n // if (selectorText && selectorText.startsWith('.my-print-')) {\n // // console.log(cssRule.cssText)\n // cssRuleList = cssRuleList + cssRule.cssText;\n // }\n // }\n // }\n return printCssStyleCache = cssRuleList;\n}\n\nexport function download(blob: Blob, fileName: string) {\n // 创建一个 URL 对象\n const blobUrl = URL.createObjectURL(blob);\n\n // 创建一个 <a> 元素用于下载\n const a = document.createElement('a');\n a.href = blobUrl;\n a.download = fileName;\n // 将 <a> 元素添加到 DOM 并触发点击事件以下载文件\n document.body.appendChild(a);\n a.click();\n\n // 移除 <a> 元素并释放 URL 对象\n document.body.removeChild(a);\n URL.revokeObjectURL(blobUrl);\n}\n\nexport function downloadImg2Base64(url: string) {\n return new Promise((resolve, reject) => {\n fetch(url)\n .then(res => {\n const contentType = res.headers.get('content-type');\n if (contentType!.includes('image/svg+xml')) {\n res.blob()\n .then(blob => {\n blob2Base64(blob)\n .then(resolve);\n });\n } else {\n res.blob()\n .then(blob => {\n blob2Base64(blob)\n .then(resolve);\n });\n }\n }).catch(e => {\n reject(e);\n });\n });\n}\n\nexport function isBlob(obj: any) {\n return obj instanceof Blob;\n}\n\nexport function isArrayBuffer(obj: any) {\n return obj instanceof ArrayBuffer;\n}\n\nexport function isUint8Array(obj: any) {\n return obj instanceof Uint8Array;\n}\n\nexport function arrayBuffer2Base64(buffer: ArrayBuffer) {\n const bytes = new Uint8Array(buffer);\n let binary = '';\n\n // 将每个字节转换为相应的二进制字符\n bytes.forEach((byte) => {\n binary += String.fromCharCode(byte);\n });\n // 使用btoa()将二进制字符串编码为Base64\n return btoa(binary);\n}\n\nexport function uint8Array2Base64(bytes: Uint8Array) {\n let binary = '';\n\n // 将每个字节转换为相应的二进制字符\n bytes.forEach((byte) => {\n binary += String.fromCharCode(byte);\n });\n // 使用btoa()将二进制字符串编码为Base64\n return btoa(binary);\n}\n\nexport function blob2Base64(blob: Blob) {\n return new Promise<string>((resolve, _reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(blob);\n });\n}\n\nexport function getFontFamilyName(val: string) {\n for (let fontListElement of fontList) {\n for (let downList of fontListElement) {\n if (val == downList.value) {\n return downList.label;\n }\n }\n }\n\n return '默认';\n}\n\n/**\n * 路径压缩\n * @param points\n * @param epsilon\n */\nexport function douglasPeucker(points, epsilon) {\n if (points.length <= 2) {\n return points;\n }\n\n let dMax = 0;\n let index = 0;\n\n const end = points.length - 1;\n\n for (let i = 1; i < end; i++) {\n const d = perpendicularDistance(points[i], points[0], points[end]);\n\n if (d > dMax) {\n index = i;\n dMax = d;\n }\n }\n\n if (dMax > epsilon) {\n const firstPart = douglasPeucker(points.slice(0, index + 1), epsilon);\n const secondPart = douglasPeucker(points.slice(index, end + 1), epsilon);\n\n return firstPart.slice(0, -1).concat(secondPart);\n } else {\n return [points[0], points[end]];\n }\n}\n\nfunction perpendicularDistance(point, lineStart, lineEnd) {\n const [x, y] = point;\n const [startX, startY] = lineStart;\n const [endX, endY] = lineEnd;\n\n const A = x - startX;\n const B = y - startY;\n const C = endX - startX;\n const D = endY - startY;\n\n const dot = A * C + B * D;\n const lenSq = C * C + D * D;\n let param = -1;\n\n if (lenSq !== 0) {\n param = dot / lenSq;\n }\n\n let xx, yy;\n\n if (param < 0) {\n xx = startX;\n yy = startY;\n } else if (param > 1) {\n xx = endX;\n yy = endY;\n } else {\n xx = startX + param * C;\n yy = startY + param * D;\n }\n\n const dx = x - xx;\n const dy = y - yy;\n\n return Math.sqrt(dx * dx + dy * dy);\n}\n\n// 函数类型\nexport function isFunction(func: any) {\n return typeof func === 'function' || Object.prototype.toString.call(func) === '[object Function]';\n}\n\nexport function _defaultVal(val, _default) {\n return val ? val : _default;\n}\n\nexport function n2br(val: any) {\n return typeof val === 'string' ? val.replaceAll('\\n', '<br>') : val;\n}\n\n\nexport function br2n(val: any) {\n return typeof val === 'string' ? val.replaceAll('<br>', '\\n') : val;\n}\n\nexport function replaceSpacesOutsideHTMLTags(input) {\n // 匹配所有 HTML 标签\n const regex = /<[^>]*>/g;\n\n // 保存所有匹配的 HTML 标签\n const tags = input.match(regex) || [];\n\n // 用占位符替换掉 HTML 标签\n let tempStr = input.replace(regex, '__HTML_TAG__');\n\n // 替换占位符以外的空格为 \n tempStr = tempStr.replace(/ /g, ' ');\n\n // 将占位符替换回原来的 HTML 标签\n tags.forEach(tag => {\n tempStr = tempStr.replace('__HTML_TAG__', tag);\n });\n\n return tempStr;\n}\n\n\n/**\n * 使用requestAnimationFrame实现的延迟setTimeout或间隔setInterval调用函数。\n *\n * @param fn 要执行的函数。\n * @param delay 延迟的时间,单位为ms,默认为0,表示不延迟立即执行。\n * @param interval 是否间隔执行,如果为true,则在首次执行后,以delay为间隔持续执行。\n * @returns 返回一个对象,包含一个id属性,该id为requestAnimationFrame的调用ID,可用于取消动画帧。\n */\nexport function rafTimeout(fn: Function, delay = 0, interval = false): object {\n let start: number | null = null; // 记录动画开始的时间戳\n function timeElapse(timestamp: number) {\n // 定义动画帧回调函数\n /*\n timestamp参数:与performance.now()的返回值相同,它表示requestAnimationFrame() 开始去执行回调函数的时刻\n */\n if (!start) {\n // 如果还没有开始时间,则以当前时间为开始时间\n start = timestamp;\n }\n const elapsed = timestamp - start;\n if (elapsed >= delay) {\n try {\n fn(); // 执行目标函数\n } catch (error) {\n console.error('Error executing rafTimeout function:', error);\n }\n if (interval) {\n // 如果需要间隔执行,则重置开始时间并继续安排下一次动画帧\n start = timestamp;\n raf.id = requestAnimationFrame(timeElapse);\n }\n } else {\n raf.id = requestAnimationFrame(timeElapse);\n }\n }\n\n interface AnimationFrameID {\n id: number;\n }\n\n // 创建一个对象用于存储动画帧的ID,并初始化动画帧\n const raf: AnimationFrameID = {\n id: requestAnimationFrame(timeElapse)\n };\n return raf;\n}\n\n/**\n * 用于取消 rafTimeout 函数\n *\n * @param raf - 包含请求动画帧ID的对象。该ID是由requestAnimationFrame返回的。\n * 该函数旨在取消之前通过requestAnimationFrame请求的动画帧。\n * 如果传入的raf对象或其id无效,则会打印警告。\n */\nexport function cancelRaf(raf: { id: number }): void {\n if (raf && raf.id && typeof raf.id === 'number') {\n cancelAnimationFrame(raf.id);\n } else {\n // console.warn('cancelRaf received an invalid id:', raf);\n }\n}\n\nexport function generateUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n const r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n"],"names":[],"mappings":"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"}