{"version":3,"file":"autoPage.mjs","sources":["../../../../../src/components/preview/autoPage.ts"],"sourcesContent":["import {\n    downloadImg2Base64,\n    generateUUID,\n    parse,\n    replaceSpacesOutsideHTMLTags,\n    stringify\n} from '@myprint/design/utils/utils';\nimport { px2unit, unit2px } from '@myprint/design/utils/devicePixelRatio';\nimport { nextTick, reactive, Ref } from 'vue-demi';\nimport {\n    FormatterVariable,\n    MyElement,\n    Panel,\n    PreviewContainerWrapper,\n    PreviewContext,\n    PreviewWrapper,\n    RuntimeElementOption,\n    TableCellElement\n} from '@myprint/design/types/entity';\nimport { element2PreviewWrapper, formatter } from '@myprint/design/utils/elementUtil';\nimport numberUtil from '@myprint/design/utils/numberUtil';\nimport {\n    lastHeadList,\n    previewRowStatisticsList,\n    previewTableStatisticsList,\n    statisticsData\n} from '@myprint/design/utils/table/dataTable';\nimport { isEmpty } from 'lodash';\n\nexport async function autoPage(previewEl: Ref<HTMLDivElement[] | undefined>, pageList: Array<PreviewContainerWrapper>, panel: Panel, previewDataList?: any[]) {\n    if (previewDataList == null) {\n        previewDataList = [{}];\n    }\n    const variable = {\n        pageIndex: 0,\n        pageSize: 0,\n        nowDate: new Date()\n    } as FormatterVariable;\n\n    // 初始化element offsetTop\n    let offsetLastElementTop = 0;\n    const fixedPreviewElementList: PreviewWrapper[] = [];\n    const previewElementList: PreviewWrapper[] = [];\n\n    let previewContext = {\n        currentPreview: undefined!,\n        autoPageIs: false,\n        previewData: {},\n        panel: panel,\n        pageList: [],\n        currentPage: undefined! as any,\n        top: 0,\n        bottom: panel.height, // 单位 mm\n        pagingRepetition: true\n    } as PreviewContext;\n    // 处理elementWrapper\n    for (let myElement of previewContext.panel.elementList) {\n        handleElement(myElement);\n    }\n\n    if (previewContext.panel.pageHeader) {\n        handleElement(previewContext.panel.pageHeader);\n    }\n    if (previewContext.panel.pageFooter) {\n        handleElement(previewContext.panel.pageFooter);\n    }\n\n    function handleElement(myElement: MyElement) {\n        const previewElement = element2PreviewWrapper(myElement);\n        if (previewElement.previewWrapperList != null && previewElement.previewWrapperList.length > 0) {\n            for (let i = previewElement.previewWrapperList.length - 1; i >= 0; i--) {\n                const pageNumPreviewElement = previewElement.previewWrapperList[i];\n                // 处理嵌套 pageNum\n                if (pageNumPreviewElement.option.fixed) {\n                    pageNumPreviewElement.x = pageNumPreviewElement.x + previewElement.x;\n                    pageNumPreviewElement.y = pageNumPreviewElement.y + previewElement.y;\n\n                    fixedPreviewElementList.push(pageNumPreviewElement);\n                    previewElement.previewWrapperList.splice(i, 1);\n                }\n            }\n        }\n        // if (elementTypeContainerList.includes(previewElement.type)) {\n        // previewElement.previewWrapperList = [];\n        // }\n\n        if (previewElement.option.fixed) {\n            fixedPreviewElementList.push(previewElement);\n        } else {\n            previewElementList.push(previewElement);\n        }\n    }\n\n    // 排序\n    previewElementList.sort((o1, o2) => {\n        return o1.y - o2.y;\n    });\n\n    // 计算每个元素距离上个元素的距离\n    for (let previewWrapper of previewElementList) {\n        previewWrapper.offsetLastElementTop = numberUtil.subScale(previewWrapper.y, offsetLastElementTop);\n        offsetLastElementTop = numberUtil.sumScale(previewWrapper.y, previewWrapper.height);\n    }\n\n    for (let previewData of previewDataList) {\n        previewContext.previewData = previewData;\n        // 固定高度 表格分页打印\n        while (previewContext.pagingRepetition) {\n            previewContext.pagingRepetition = false;\n            previewContext.currentPreview = undefined!;\n\n            await newPage();\n            await installPreviewElement(previewElementList);\n        }\n\n        previewContext.pagingRepetition = true;\n    }\n\n    previewContext.autoPageIs = false;\n    variable.pageSize = pageList.length;\n    // 每页设置页码\n    // 组装固定元素\n    for (let i = 0; i < pageList.length; i++) {\n        previewContext.currentPage = pageList[i];\n        variable.pageIndex = i + 1;\n        await installPreviewElement(fixedPreviewElementList);\n    }\n\n    // 所有的都处理完，如果是自动高度，要重新计算一下高度\n    if (panel.pageSize == 'AutoHeight') {\n        await nextTick();\n        const lastElementChild = previewEl.value![0].lastElementChild;\n        if (lastElementChild) {\n            const rect = lastElementChild.getBoundingClientRect();\n            pageList[0].height = px2unit(rect.bottom, panel);\n            panel.runtimeOption.printRealHeight = pageList[0].height;\n        }\n    }\n\n    async function installPreviewElement(previewElementList: PreviewWrapper[]) {\n        for (let i = 0; i < previewElementList.length; i++) {\n            const oldPreviewWrapper = previewElementList[i];\n            let previewWrapper = element2PreviewWrapper(previewElementList[i]);\n\n            // 计算顶部需不需要偏移\n            if (!previewWrapper.option.fixed) {\n                // 页面顶部有偏移\n                // debugger\n                if (previewContext.currentPage.offsetTop > 0 && previewContext.currentPreview) {\n                    if (previewContext.currentPreview.heightIs) {\n                        previewWrapper.y = previewContext.currentPreview.y + previewContext.currentPreview.height + previewWrapper.offsetLastElementTop;\n                    } else {\n                        // debugger\n                        previewWrapper.y = numberUtil.sumScale(previewContext.currentPage.offsetTop, previewWrapper.offsetLastElementTop);\n                    }\n\n                }\n\n                // 判断需不需要分页\n                // console.log(await isNeedNewPage(previewWrapper.y, previewContext.bottom));\n                // console.log(await isNeedNewPage(previewWrapper.y + previewWrapper.height, previewContext.bottom));\n                if (previewWrapper.type != 'PageFooter'\n                    && previewContext.currentPage.previewWrapperList.length > 0\n                    && (await isNeedNewPage(previewWrapper.y, previewContext.bottom) || await isNeedNewPage(previewWrapper.y + previewWrapper.height, previewContext.bottom))) {\n                    previewWrapper.y = 1;\n                    previewContext.currentPage!.offsetTop = 1;\n                }\n            }\n\n            if (previewWrapper.option.fixed && previewWrapper.option.displayStrategy != undefined) {\n                switch (previewWrapper.option.displayStrategy) {\n                    case 'firstPage':\n                        if (variable.pageIndex != 1) {\n                            continue;\n                        }\n                        break;\n                    case 'lastPage':\n                        if (variable.pageIndex != variable.pageSize) {\n                            continue;\n                        }\n                        break;\n                    case 'none':\n                        continue;\n                    case 'oddPage':\n                        if (variable.pageIndex % 2 != 1) {\n                            continue;\n                        }\n                        break;\n                    case 'evenPage':\n                        if (variable.pageIndex % 2 != 0) {\n                            continue;\n                        }\n                        break;\n                }\n            }\n\n            previewContext.currentPreview = previewWrapper;\n\n            // 需要data\n            let previewDataTmp: any;\n\n            if (previewWrapper.field) {\n                // 打印数据\n                previewDataTmp = previewContext.previewData[previewWrapper.field];\n            }\n\n            if (!previewDataTmp) {\n                // 格式化数据\n                previewDataTmp = formatter(previewWrapper, variable);\n            }\n\n            if (!previewDataTmp) {\n                // 设计数据\n                previewDataTmp = previewWrapper.data;\n            }\n\n            if (previewWrapper.type == 'Image') {\n                previewWrapper.data = previewDataTmp;\n                // 如果是图片地址，则下载下来\n                if (!isEmpty(previewWrapper.data) && (previewWrapper.data as string).startsWith('http')) {\n                    // 网络图片，下载下来\n                    try {\n                        previewWrapper.data = await downloadImg2Base64(previewWrapper.data);\n                    } catch (e: any) {\n                        previewWrapper.data = '图片加载错误';\n                    }\n                }\n                previewContext.currentPage.previewWrapperList.push(previewWrapper);\n                await nextTick();\n            } else if (previewWrapper.type == 'Text' || previewWrapper.type == 'PageNum' || previewWrapper.type == 'TextTime') {\n\n                if (previewWrapper.type == 'PageNum') {\n                    previewWrapper = element2PreviewWrapper(previewWrapper);\n                    previewContext.currentPreview = previewWrapper;\n                    previewElementList[i] = previewWrapper;\n                }\n\n                if (previewWrapper.contentType == 'Text') {\n                    if (previewDataTmp) {\n                        previewDataTmp = replaceSpacesOutsideHTMLTags(previewDataTmp);\n                    }\n                    await autoTextElement(previewDataTmp, true);\n                }\n\n                previewWrapper.data = previewDataTmp;\n                if (previewWrapper.contentType == 'QrCode') {\n                    previewContext.currentPage.previewWrapperList.push(previewWrapper);\n                    await nextTick();\n                }\n                if (previewWrapper.contentType == 'Barcode') {\n                    previewContext.currentPage.previewWrapperList.push(previewWrapper);\n                    await nextTick();\n                }\n            } else if (previewWrapper.type == 'DataTable') {\n                let tableRowIndex = 0;\n                await autoTableRow(previewContext, previewDataTmp, tableRowIndex);\n            } else if (previewWrapper.type == 'Container') {\n                previewContext.currentPage.previewWrapperList.push(previewWrapper);\n                const tmpPage = previewContext.currentPage;\n                previewContext.currentPage = previewWrapper;\n                previewWrapper.previewWrapperList = [];\n                await installPreviewElement(oldPreviewWrapper.previewWrapperList);\n                previewContext.currentPage = tmpPage;\n            } else if (previewWrapper.type == 'PageHeader') {\n                previewContext.currentPage.previewWrapperList.push(previewWrapper);\n                const tmpPage = previewContext.currentPage;\n                previewContext.currentPage = previewWrapper;\n                previewWrapper.previewWrapperList = [];\n                await installPreviewElement(oldPreviewWrapper.previewWrapperList);\n                previewContext.currentPage = tmpPage;\n            } else if (previewWrapper.type == 'PageFooter') {\n                previewContext.currentPage.previewWrapperList.push(previewWrapper);\n                const tmpPage = previewContext.currentPage;\n                previewContext.currentPage = previewWrapper;\n                previewWrapper.previewWrapperList = [];\n                await installPreviewElement(oldPreviewWrapper.previewWrapperList);\n                previewContext.currentPage = tmpPage;\n            } else {\n                previewContext.currentPage.previewWrapperList.push(previewWrapper);\n            }\n\n            if (!previewContext.currentPreview.heightIs) {\n                // 重新计算顶部偏移\n                previewContext.currentPage.offsetTop = (await computeBottom(previewContext.currentPreview))!;\n            }\n\n            previewContext.currentPreview = previewWrapper;\n        }\n    }\n\n    async function autoTextElement(previewData: string, first: boolean) {\n        let previewWrapper = previewContext.currentPreview;\n        previewWrapper.data = previewData;\n        previewWrapper.heightIs = false;\n        previewContext.currentPage.previewWrapperList.push(previewWrapper);\n        await nextTick();\n        const height = previewWrapper.target.clientHeight;\n\n        /**\n         * 非自动高度\n         */\n        if (previewWrapper.option.autoTextHeight == null || !previewWrapper.option.autoTextHeight) {\n            previewWrapper.heightIs = true;\n            return false;\n        }\n\n        if (first && height < previewWrapper.runtimeOption.height) {\n            previewWrapper.heightIs = true;\n            // console.log('小')\n            return false;\n        } else {\n            // console.log('大')\n        }\n\n        // console.log(height)\n        if (previewWrapper.y + px2unit(height, panel) < previewContext.bottom) {\n            return false;\n        } else {\n            // console.log(previewWrapper)\n        }\n\n        let mid = await binary_search(previewWrapper, previewData, 1, previewData.length);\n        // console.log(mid)\n\n        if (mid > 0 && mid < previewData.length) {\n            // console.log('文本分页');\n            if (previewContext.autoPageIs) {\n                await newPage();\n                previewContext.currentPreview = element2PreviewWrapper(previewWrapper);\n                // previewWrapper.element = previewWrapper\n                previewContext.currentPreview.y = previewContext.top;\n                // console.log(previewWrapper)\n                await autoTextElement(previewData.substring(mid + 1, previewData.length), false);\n                return true;\n            }\n            // data.currentPage.offsetTop = computeBottom({previewWrapper: previewWrapper} as PreviewWrapper)\n        }\n\n        return false;\n    }\n\n    async function autoTableRow(previewContext: PreviewContext, previewDataList: Array<any>, index: number) {\n        if (previewDataList == null) {\n            previewDataList = [];\n        }\n        let previewWrapper = previewContext.currentPreview;\n        if (previewWrapper.option.tableHeightType == 'AUTO') {\n            previewWrapper.heightIs = false;\n        }\n\n        previewContext.currentPage.previewWrapperList.push(previewWrapper);\n        await nextTick();\n        const table = previewWrapper.target;\n        if (!table) {\n            return false;\n        }\n        const tableHeadList = [...previewWrapper.tableHeadList];\n        const headList = lastHeadList(tableHeadList);\n        const bodyList = previewWrapper.tableBodyList[0];\n        if (previewWrapper.statisticsList == null) {\n            previewWrapper.statisticsList = [];\n        }\n        const tableStatisticsList = [...previewWrapper.statisticsList];\n        const tableStatisticsSize = tableStatisticsList.length;\n        let statisticsListWrapper: Record<number, any[]> = {};\n        let tableStaticsListWrapper: Record<number, any[]> = {};\n        if (previewWrapper.tableHeadHiddenIs) {\n            previewWrapper.tableHeadList.length = 0;\n            for (let j = 0; j < bodyList.length; j++) {\n                bodyList[j].runtimeOption.width = headList[j].runtimeOption.width;\n            }\n\n            // 设置第一行的宽度<不然表格宽度有问题\n        }\n        previewWrapper.tableBodyList.length = 0;\n        previewWrapper.statisticsList.length = 0;\n        if (index < previewDataList.length) {\n            previewTableStatisticsList(tableStatisticsList, previewWrapper.statisticsList, statisticsListWrapper, headList);\n        }\n        const previewDataTmpList: any[] = [];\n        let i = index;\n        for (; i < previewDataList.length + tableStatisticsSize; i++) {\n            const rowList: TableCellElement[] = [];\n            if (i < previewDataList.length) {\n                const previewData = previewDataList[i];\n                previewDataTmpList.push(previewData);\n                // 序号\n                if (!previewData['autoIncrement']) {\n                    previewData['autoIncrement'] = i + 1;\n                }\n                for (let j = 0; j < headList.length; j++) {\n                    const head = headList[j];\n                    bodyList[j].data = previewData[head.field!];\n                    rowList.push(element2PreviewWrapper(bodyList[j]));\n                }\n\n                previewWrapper.tableBodyList.push(rowList);\n            } else {\n                // debugger\n                // 计算\n                const tableStatisticsIndex = i - previewDataList.length;\n                const rowList = [...tableStatisticsList[tableStatisticsIndex]];\n                let hasCell = previewRowStatisticsList(rowList, tableStaticsListWrapper, headList, 'tableStatisticsIs');\n                if (hasCell) {\n                    previewWrapper.statisticsList.push(rowList);\n                }\n            }\n\n            await nextTick();\n            // console.log(table.height())\n\n            if (previewWrapper.option.tableHeightType == 'FIXED') {\n                // 固定高度\n                if (table.childNodes[1].clientHeight > unit2px(previewWrapper.height, panel)) {\n                    if (i == index) {\n                        previewWrapper.previewTableRowIndex = i + 1;\n                        previewContext.pagingRepetition = true;\n                    } else {\n                        previewWrapper.tableBodyList.pop();\n                        previewDataTmpList.pop();\n                        previewWrapper.previewTableRowIndex = i;\n                        previewContext.pagingRepetition = true;\n                    }\n                    statisticsData(previewDataTmpList, statisticsListWrapper);\n                    if (i >= previewDataList.length) {\n                        statisticsData(previewDataList, tableStaticsListWrapper);\n                    }\n                    previewDataTmpList.pop();\n                    break;\n                }\n            }\n\n            if (await isNeedNewPage(unit2px(previewWrapper.y, panel) + table.clientHeight, unit2px(previewContext.bottom, panel))) {\n                // 删除刚才创建的\n                previewWrapper.tableBodyList.pop();\n                previewDataTmpList.pop();\n                // 统计\n                statisticsData(previewDataTmpList, statisticsListWrapper);\n                // if (i >= previewDataList.length) {\n                //     statisticsData(previewDataList, tableStaticsListWrapper);\n                // }\n                previewContext.currentPreview = element2PreviewWrapper(previewWrapper);\n                previewWrapper = previewContext.currentPreview;\n                if (!previewWrapper.option.tablePageHeadIs) {\n                    previewWrapper.tableHeadHiddenIs = true;\n                }\n                previewWrapper.tableHeadList = [...tableHeadList];\n                previewWrapper.statisticsList = [...tableStatisticsList];\n                previewWrapper.runtimeOption = parse(stringify(previewWrapper.runtimeOption, 'parent'), {} as RuntimeElementOption);\n                previewWrapper.tableBodyList = [bodyList];\n                previewWrapper.y = previewContext.top + 1;\n                await autoTableRow(previewContext, previewDataList, i);\n                // data.currentPage.offsetTop = await computeBottom({previewWrapper: previewWrapper} as PreviewWrapper)\n                break;\n            }\n        }\n\n        if (i >= previewDataList.length) {\n            statisticsData(previewDataTmpList, statisticsListWrapper);\n        }\n        statisticsData(previewDataList, tableStaticsListWrapper);\n    }\n\n    /**\n     * 单位 px\n     */\n    async function isNeedNewPage(y: number | undefined, bottom: number | undefined, callback?: () => void) {\n\n        if (!previewContext.autoPageIs) {\n            return false;\n        }\n        if (previewContext.panel.pageSize == 'AutoHeight') {\n            return false;\n        }\n\n        // 为啥+1\n        if (y! > bottom! + 1) {\n            if (callback) {\n                callback();\n            }\n            await newPage();\n            return true;\n        }\n        return false;\n    }\n\n    async function newPage() {\n        previewContext.currentPage = reactive({\n            id: generateUUID(),\n            width: previewContext.panel.width,\n            height: previewContext.panel.height,\n            offsetTop: 0,\n            previewWrapperList: []\n        } as any);\n        previewContext.pageList.push(previewContext.currentPage);\n        previewContext.autoPageIs = true;\n        pageList.push(previewContext.currentPage!);\n        // 处理页头，页脚\n\n        await nextTick();\n        // getPanelDiv();\n\n        if (previewContext.panel.pageHeader) {\n            let preview = previewContext.panel.pageHeader as PreviewWrapper;\n            previewContext.currentPage!.previewWrapperList!.push(preview);\n            previewContext.top = (await computeBottom(preview))!;\n        }\n        if (previewContext.panel.pageFooter) {\n            let preview = previewContext.panel.pageFooter as PreviewWrapper;\n            previewContext.currentPage!.previewWrapperList!.push(preview);\n            previewContext.bottom = (await computeTop(preview))!;\n        }\n    }\n\n    async function computeBottom(previewWrapper: PreviewWrapper) {\n        await nextTick();\n        if (!previewWrapper.target) {\n            return;\n        }\n        const div = previewWrapper.target;\n        // debugger\n        return numberUtil.toFixed(px2unit(numberUtil.sumScale(div.offsetTop, div.offsetHeight), panel));\n    }\n\n    async function computeTop(previewWrapper: PreviewWrapper) {\n        await nextTick();\n        if (!previewWrapper.target) {\n            return;\n        }\n        const div = previewWrapper.target;\n        // console.log(div.offsetTop);\n        return numberUtil.toFixed(px2unit(div.offsetTop, panel));\n    }\n\n    async function computeTextHeight(previewWrapper: PreviewWrapper, previewDataTmp: any) {\n        previewWrapper.data = previewDataTmp;\n        await nextTick();\n        const itemRef = previewWrapper.target;\n        // console.log(div)\n        if (!itemRef) {\n            // debugger\n            return;\n        }\n        const height = previewWrapper.target.clientHeight;\n        return previewWrapper.y + px2unit(height, panel) < previewContext.bottom;\n    }\n\n    async function binary_search(previewWrapper: PreviewWrapper, previewData: string, low: number, height: number): Promise<any> {\n        if (low > height) {\n            // console.log(\"low > height\")\n            return -1;\n        }\n        const mid = Math.floor((height + low) / 2);\n        let isH = await computeTextHeight(previewWrapper, previewData.substring(0, mid + 2));\n        let isL = await computeTextHeight(previewWrapper, previewData.substring(0, mid + 1));\n        // console.log(data.substring(0, mid + 1))\n        // console.log(mid)\n        // if (!isH && !isL) {\n        //   return -1\n        // }\n        if (isL && !isH) {\n            // console.log('返回');\n            return mid;\n        } else if (!isH) {\n            height = mid - 1;\n            // console.log('减少', height);\n            return binary_search(previewWrapper, previewData, low, height);\n        } else if (isL) {\n            low = mid + 1;\n            // console.log('增加', low);\n            return binary_search(previewWrapper, previewData, low, height);\n        } else {\n            return -1;\n        }\n    }\n}\n\n\n\n"],"names":["numberUtil","previewElementList","previewContext","previewDataList","rowList"],"mappings":"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"}