yh-report 2.0.4 → 2.0.6

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-56784c64.mjs","sources":["../types.ts","../libs/validateAndCompleteOptions.ts","../libs/chartReportDefaultOption.ts","../api/form.ts","../../../node_modules/dayjs/dayjs.min.js","../libs/util.ts","../component/view-item/report-conditions.vue","../api/dataSource.ts","../libs/render.ts","../../../node_modules/dayjs/locale/zh-cn.js","../libs/index.ts","../../../node_modules/jsep/dist/jsep.js","../libs/jsep.ts","../component/view-item/report-view-item.vue","../api/chartsOption.ts","../component/view-item/chart-item.vue","../component/view-item/chart-view-item.vue","../component/report-run.vue","../index.ts"],"sourcesContent":["export enum DataParamDateTypes {\n YEAR = 'year',\n MONTH = 'month',\n WEEK = 'week',\n DATE = 'date',\n DATETIME = 'datetime',\n}\n/** 数据源筛选 */\nexport interface DataParam {\n /** 数据源Key值,筛选时匹配数据源用(多数据源场景) */\n key: string;\n columnName: string;\n name: string;\n defaultValue: any;\n dataType: DataSourceColumnDataType;\n selectorId?: string;\n type: string; // 'LIKE' | 'IN' | 'GT' | 'GT_EQ' | 'EQ' | 'LT' | 'LT_EQ' | 'LT_GT_EQ';\n isNull: boolean;\n isShow: boolean;\n}\n\n/** 数据源字段 */\nexport interface DataColumns {\n columnName: string;\n name: string;\n dataType: string;\n selectorId: string;\n description: string;\n}\n\nexport interface StatementData {\n source: {\n /** 数据键,数据源的id从sourceData 取数据用 */\n key?: string;\n /** 数据请求地址,获取筛选后的数据 */\n url?: string;\n /** 数据源名称 */\n name?: string;\n /** 数据源字段 */\n columns: DataColumns[];\n }[];\n /** 是否对数据源进行分页 */\n pagination?: boolean;\n /** 分页条数 */\n pageSize?: number;\n /** 分页下拉数据 */\n pageSizes?: string;\n /** 数据使用前的处理函数的函数体 */\n processData?: '';\n /** 静态数据 */\n staticData?: any[];\n}\n\nexport enum CellType {\n /** 行 */\n ROW = 'row',\n /** 列 */\n COL = 'col',\n /** 单元格 */\n CELL = 'cell',\n /** 表头 */\n HEAD = 'head',\n /** 文本 */\n TEXT = 'text',\n /** 图标 */\n ICON = 'icon',\n /** 函数 */\n FUN = 'fun',\n /** 图片 */\n IMAGE = 'img',\n /** 字段 */\n FIELD = 'field',\n}\n\nexport enum FormatType {\n /** 文本 */\n TEXT = 'text',\n /** 数值 */\n NUMBER = 'number',\n /** 货币 */\n CURRENCY = 'currency',\n /** 百分比 */\n PERCENT = 'percent',\n /** 千分比 */\n PROMILLE = 'promille',\n /** 科学计数 */\n SCIENTIFIC = 'scientific',\n /** 日期 */\n DATETIME = 'datetime',\n /** 字符串模板 */\n STRING = 'string',\n}\n\nexport interface CellStyle {\n /** 背景色 */\n backgroundColor?: string;\n /** 字体颜色 */\n color?: string;\n /** 文本对齐方式 */\n textAlign?: string;\n /** 文本垂直对齐方式 */\n verticalAlign?: string;\n /** 字体粗细 */\n fontWeight?: 'normal' | 'bold';\n /** 字体大小 */\n fontSize?: number;\n /** 字体 */\n fontFamily?: string;\n}\n\nexport interface Cell {\n /** 单元格类型 */\n type?: CellType;\n /** 格式化方式 */\n format?: FormatType;\n /** 格式化格式 */\n formatType?: any;\n /** 列跨度 */\n colSpan?: number;\n /** 行跨度 */\n rowSpan?: number;\n /** 合并目标 */\n mergeTarget?: [number, number];\n /** 列索引 */\n col?: number;\n /** 行索引 */\n row?: number;\n /** 单元格内容 */\n text?: string;\n /** 自定义字符串渲染 */\n fun?: string;\n /** 自定义渲染函数 */\n customRender?: string;\n /** 单元格数据 */\n data?: any;\n /** 渲染时:列数据 */\n colData?: any;\n /** 渲染时:行数据 */\n rowData?: any;\n /** 是否分组 */\n isGroup?: boolean;\n /** 行列组合数据 */\n isRowColCombine?: boolean;\n /** 行列组合交叉单元格设计列渲染键名 */\n combineKeys?: string[];\n /** 行列组合交叉单元格设计列渲染值 */\n combineValues?: any[];\n /** 单元格样式 */\n style?: CellStyle;\n}\n\nexport interface GroupHeap extends Cell {\n children?: GroupHeap[];\n}\n\nexport interface Head {\n /** 行高度/列宽度 */\n size: number;\n /** 是否悬浮 */\n isFixed?: boolean | 'left' | 'right';\n /** 数据源键值 (StatementData.srouce.key 字段) */\n data?: string;\n /** 数据下标 */\n dataIndex?: number;\n /** 是否循环数据源 */\n loop?: boolean;\n /** 排序标志 */\n index?: number;\n}\n\n/** 图表数据配置接口 */\nexport interface ChartOption {\n data: {\n source: {\n /** 数据键,数据源的id从sourceData 取数据用 */\n key?: string;\n /** 数据请求地址,获取筛选后的数据 */\n url?: string;\n /** 数据源名称 */\n name?: string;\n /** 数据源字段 */\n columns: DataColumns[];\n }[];\n };\n /** X 轴数据处理函数 */\n xAisData: string;\n /** Y 轴数据处理函数 */\n yAisData: string;\n /** 数据处理函数 */\n seriesData: string;\n /** 图表名 */\n name: string;\n /** 图表图标 */\n icon: string;\n /** 图表类型 */\n type: string;\n /** id */\n id: string;\n /** fixed固定定位后,距离视口左侧的距离 */\n left: number;\n /** fixed固定定位后,距离视口顶部的距离 */\n top: number;\n /** 平滑 */\n smooth: boolean;\n /** 显示点 */\n symbol: string;\n /** 显示标签 */\n showLabel: boolean;\n /** 面积图 */\n areaStyle: string;\n /** 标签颜色 */\n labelColor: string;\n /** 标签位置 */\n labelPosition: string;\n /** 环形图 */\n radius: boolean;\n /** 宽度单位 */\n widthUnit: 'px' | '%';\n /** 宽 */\n width: Number;\n /** 高度单位 */\n heightUnit: 'px' | '%';\n /** 高 */\n height: Number;\n /** 悬浮 */\n isSuspend: boolean;\n /** 数据是否分组 */\n groupBy: boolean;\n /** 数据是否排序 */\n orderBy: 'ASC' | 'DESC' | 'NONE';\n /** 数据处理中截取数据长度 */\n cutLength: number;\n /** 垂直轴 层级 */\n zIndex: number;\n /** 图表配置 */\n option: any;\n}\n/** 数据表配置 */\nexport interface StatementOption {\n id: string;\n /** 报表类型 */\n type: string;\n /** 单元格配置 */\n config: Cell[][];\n /** 行配置 */\n rowConfig: Head[];\n /** 列配置 */\n colConfig: Head[];\n /** 宽度类型 */\n widthType: 'px' | '%';\n /** 报表宽度 */\n width: number;\n /** 是否占据内容高度,单报表适用 */\n fullHeight: boolean;\n /** 报表高度 */\n height: number;\n /** 是否展示数据 */\n seriesEnable: boolean;\n /** 数据列头 */\n seriesHeadText: string;\n /** 冻结行列数 */\n frozen: {\n rowCount: 0;\n colCount: 0;\n trailingColCount: 0;\n trailingRowCount: 0;\n };\n /** 报表筛选条件 */\n params: DataParam[];\n /** 报表主题设置 */\n theme: 'blue' | 'green' | 'gray' | 'dark' | 'red';\n /** 报表数据设置 */\n data: StatementData;\n}\n\n/** 报表/图表配置 */\nexport type Options = StatementOption & ChartOption;\n\n/** 数据表类型 */\nexport enum StatementType {\n /** 数据报表 */\n DATA = 1,\n}\n\n/** 数据表存储数据对象 */\nexport interface Statement {\n id?: string;\n name: string;\n code: string;\n description: string;\n options: Options[];\n}\n\n/** 数据源访问级别 */\nexport enum DataSourceAccessLevel {\n /** 组织机构 */\n ORG,\n /** 用户 */\n USER,\n /** 用户或部门领导 */\n USER_OR_LEADER,\n /** 租户 */\n CLIENT,\n /** 所有 */\n ALL,\n /** 仅系统 */\n SYSTEM,\n}\n\n/** 布尔值字符串字面量 */\nexport enum BooleanStr {\n /** false 不是 */\n N,\n /** true 是 */\n Y,\n}\n\n/** 数据源接口 */\nexport interface DataSource {\n /** 所属模块 */\n SYS_MODULE_ID: string;\n /** 所属模块名称 */\n _SYS_MODULE_ID_NAME: string;\n /** 数据源ID */\n SYS_DATASOURCE_ID: string;\n /** 数据源名称 */\n NAME: string;\n /** 数据源描述 */\n DESCRIPTION: string;\n /** 数据源关联表名 */\n TABLE_NAME: string;\n /** 访问地址 */\n URL: string;\n /** 是否树型结构 */\n IS_TREE: BooleanStr;\n /** 访问级别 */\n ACCESS_LEVEL: DataSourceAccessLevel;\n}\n\n/** 数据源字段数据类型 */\nexport enum DataSourceColumnDataType {\n /** 字符 */\n STRING,\n /** 正整数 */\n PLONG,\n /** 整数 */\n LONG,\n /** 浮点 */\n DOUBLE,\n /** 文本 */\n TEXT,\n /** 是否 */\n BOOL,\n /** 日期 */\n DATE,\n /** 时间 */\n TIME,\n /** 日期时间 */\n DATETIME,\n /** 密码 */\n PASSWORD,\n /** ID */\n ID,\n /** 列表 */\n LIST,\n /** 表 */\n TABLE,\n /** 下拉树 */\n TREE,\n /** 图片 */\n IMG,\n /** 弹窗 */\n OPEN,\n /** 子查询 */\n SQL,\n /** 颜色 */\n COLOR,\n /** 代码编辑器 */\n EDITOR,\n}\n\n/** 数据源字段 */\nexport interface DataSourceColumn {\n /** 字段键 */\n COLUMN_NAME: string;\n /** 字段名 */\n NAME: string;\n /** 数据类型 */\n DATA_TYPE: DataSourceColumnDataType;\n /** 小数位数 */\n C_FIXED: 0;\n /** 数据长度 */\n C_LENGTH: 32;\n /** 描述 */\n DESCRIPTION: null;\n /** 数据源列ID */\n SYS_DATASOURCE_COLUMN_ID: '7FF63853240B4A349C05F0856E9C5458';\n /** 数据源ID */\n SYS_DATASOURCE_ID: '096551D3229341418188B46918297A8B';\n /** 下拉数据ID */\n SYS_SELECTOR_ID: null;\n}\n\n/** 图表数据 */\nexport interface TypeItem {\n /** 图表名 */\n name: string;\n /** 图表图标 */\n icon: string;\n /** 图表类型 */\n type: string;\n}\n","import {defaultReport} from './chartReportDefaultOption';\nimport {Statement, StatementOption, CellType, FormatType, Cell, Head} from '../types';\n\nconst defaultCell: Cell = {\n type: CellType.TEXT,\n format: FormatType.TEXT,\n formatType: {\n date: '',\n numberDecimal: '',\n numberUseGrouping: '',\n currencySymbol: '',\n scientificNotation: '',\n },\n style: {},\n colSpan: 1,\n rowSpan: 1,\n col: 1,\n row: 1,\n text: '',\n data: undefined,\n};\n\nconst defaultRow: Head = {\n size: 25,\n data: undefined,\n loop: false,\n index: 0,\n};\n\nconst defaultCol: Head = {\n size: 80,\n data: undefined,\n loop: false,\n index: 0,\n};\n\nlet isComplete = false;\nfunction validateAndCompleteOptions(statement: Partial<Statement>): {isComplete: boolean; data: Statement} {\n /** 是否有补全 */\n isComplete = false;\n const completedStatement: Statement = {\n ...statement,\n // @ts-ignore\n options:\n statement.options?.map((option) => {\n if (option.type === 'report') {\n return validateAndCompleteStatementOption(option as Partial<StatementOption>);\n } else {\n return option;\n }\n }) || [],\n };\n\n return {\n isComplete,\n data: completedStatement,\n };\n}\n\nexport function validateAndCompleteStatementOption(option: Partial<StatementOption>): StatementOption {\n if (Object.keys(defaultReport).length !== Object.keys(option).length) {\n isComplete = true;\n }\n const completedOption: StatementOption = {\n ...defaultReport,\n ...option,\n id: `report-${Date.now()}`\n };\n\n // 处理 rowConfig 和 colConfig 的默认值\n if (completedOption.rowConfig.length === 0) {\n isComplete = true;\n completedOption.rowConfig = Array.from({length: 5}, (_, index) => ({\n size: 25,\n data: undefined,\n loop: false,\n index,\n }));\n }\n\n if (completedOption.colConfig.length === 0) {\n isComplete = true;\n completedOption.colConfig = Array.from({length: 10}, (_, index) => ({\n ...defaultCol,\n }));\n }\n\n // 确保 config 的长度与 rowConfig 和 colConfig 匹配\n const rowLength = completedOption.rowConfig.length;\n const colLength = completedOption.colConfig.length;\n isComplete = completedOption.config.length !== rowLength;\n completedOption.config = completedOption.config\n .map((row, rowIndex) => {\n isComplete = row.length !== colLength;\n return row\n .slice(0, colLength)\n .map((item, colIndex) => {\n isComplete = Object.keys(item).length !== Object.keys(defaultCell).length;\n return {\n ...defaultCell,\n ...item,\n row: rowIndex,\n col: colIndex,\n };\n })\n .concat(\n Array.from({length: colLength - row.length}, (_, index) => ({\n ...defaultCell,\n row: rowIndex,\n col: row.length + index, // 填充列时,列索引从当前行已有列数开始\n }))\n );\n })\n .concat(\n Array.from({length: rowLength - completedOption.config.length}, (_, rowIndexOffset) => {\n const newRow = completedOption.config.length + rowIndexOffset; // 新增行的行索引\n return Array(colLength)\n .fill(0)\n .map((_, colIndex) => ({\n ...defaultCell,\n row: newRow,\n col: colIndex,\n }));\n })\n );\n\n completedOption.rowConfig = completedOption.rowConfig.map((row) => {\n isComplete = Object.keys(row).length !== Object.keys(defaultRow).length;\n return {\n ...defaultRow,\n ...row,\n };\n });\n\n completedOption.colConfig = completedOption.colConfig.map((col) => {\n isComplete = Object.keys(col) !== Object.keys(defaultCol);\n return {\n ...defaultCol,\n ...col,\n };\n });\n\n return completedOption;\n}\n\nexport default validateAndCompleteOptions;\n","import {ref, computed} from 'vue';\nimport type {ChartOption, StatementOption, TypeItem} from '../types';\nimport {cloneDeep} from 'lodash-es';\nimport {validateAndCompleteStatementOption} from './validateAndCompleteOptions';\n\n/** 设计器左侧可拖拽列表 */\nexport const TypeItems = ref<TypeItem[]>([\n {\n name: '报表',\n icon: 'icon-table',\n type: 'report',\n },\n {\n name: '折线图',\n icon: 'icon-linechart',\n type: 'line',\n },\n {\n name: '条形图',\n icon: 'icon-align-left',\n type: 'rowBar',\n },\n {\n name: '柱状图',\n icon: 'icon-barchart',\n type: 'bar',\n },\n {\n name: '饼状图',\n icon: 'icon-piechart',\n type: 'pie',\n },\n {\n name: '散点图',\n icon: 'icon-chart-bubble',\n type: 'scatter',\n },\n {\n name: '雷达图',\n icon: 'icon-radarchart',\n type: 'radar',\n },\n {\n name: '矩形树图',\n icon: 'icon-s-grid',\n type: 'treemap',\n },\n {\n name: '自定义标签',\n icon: 'icon-books',\n type: 'label',\n },\n]);\n\nexport const ItemTypes = computed(() => {\n return TypeItems.value.map((item) => item.type);\n});\n\nconst colors = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272'];\nexport const renderItem = (params, api) => {\n const dataIndex = params.dataIndex;\n const value = api.value();\n let name = api.value(1);\n if (Array.isArray(name)) {\n name = name.map((str) => String.fromCharCode(str)).join('');\n }\n const containerWidth = api.getWidth(); // 获取容器宽度\n const containerHeight = api.getHeight();\n // 从调色盘获取颜色(自动循环)\n const color = colors[dataIndex % 6];\n\n // 动态计算宽度(考虑间距)\n const itemCount = params.dataInsideLength; // 获取数据总数\n let spacing = containerWidth * 0.01;\n if (spacing < 10) {\n spacing = 10;\n }\n if (spacing > 15) {\n spacing = 15;\n }\n let rectHeight = containerHeight * 0.5;\n if (rectHeight < 60) {\n rectHeight = 60;\n }\n const rectWidth = (containerWidth - spacing * 2 - spacing * (itemCount - 1)) / itemCount;\n\n // 调整其他参数\n const borderRadius = 8;\n\n // 位置计算\n const xPos = spacing + dataIndex * (rectWidth + spacing);\n const yPos = (api.getHeight() - rectHeight) / 2;\n\n return {\n type: 'group',\n children: [\n {\n type: 'rect',\n shape: {\n x: xPos,\n y: yPos,\n width: rectWidth,\n height: rectHeight,\n r: borderRadius,\n },\n style: {\n fill: color,\n stroke: '#fff',\n lineWidth: 1,\n shadowBlur: 4,\n shadowColor: 'rgba(0,0,0,0.1)',\n },\n },\n {\n type: 'text',\n style: {\n text: `${name}\\n\\n${value}`,\n fill: '#fff', // 自动反色可改为:echarts.color.lift(color, 0.8)\n fontSize: 14,\n fontWeight: 'bold',\n align: 'center',\n verticalAlign: 'middle',\n },\n position: [xPos + rectWidth / 2, yPos + rectHeight / 2],\n },\n ],\n };\n};\n\nexport const chartsOption = {\n line: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Line',\n },\n tooltip: {\n trigger: 'axis',\n },\n legend: {\n top: '8%',\n },\n grid: {\n left: '3%',\n right: '9%',\n top: '20%',\n bottom: '3%',\n containLabel: true,\n },\n xAxis: {\n name: '天',\n type: 'category',\n boundaryGap: false,\n data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],\n },\n yAxis: {\n name: '值',\n type: 'value',\n },\n dataZoom: [\n {\n type: 'inside',\n start: 0,\n end: 100,\n },\n ],\n series: [\n {\n name: 'Email',\n type: 'line',\n stack: 'Total',\n data: [120, 132, 101, 134, 90, 230, 210],\n },\n {\n name: 'Union',\n type: 'line',\n stack: 'Total',\n data: [220, 182, 191, 234, 290, 330, 310],\n },\n {\n name: 'Video',\n type: 'line',\n stack: 'Total',\n data: [150, 232, 201, 154, 190, 330, 410],\n },\n ],\n },\n rowBar: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Bar',\n },\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'shadow',\n },\n },\n legend: {\n top: '8%',\n },\n grid: {\n left: '3%',\n right: '9%',\n top: '20%',\n bottom: '3%',\n containLabel: true,\n },\n yAxis: {\n name: '天',\n type: 'category',\n axisTick: {\n alignWithLabel: true,\n },\n data: ['2012', '2013', '2014', '2015', '2016'],\n },\n xAxis: {\n name: '值',\n type: 'value',\n },\n dataZoom: [\n {\n type: 'inside',\n start: 0,\n end: 100,\n },\n ],\n series: [\n {\n name: 'Forest',\n type: 'bar',\n barGap: 0,\n emphasis: {\n focus: 'series',\n },\n data: [320, 332, 301, 334, 390],\n },\n {\n name: 'Steppe',\n type: 'bar',\n emphasis: {\n focus: 'series',\n },\n data: [220, 182, 191, 234, 290],\n },\n {\n name: 'Desert',\n type: 'bar',\n emphasis: {\n focus: 'series',\n },\n data: [150, 232, 201, 154, 190],\n },\n ],\n },\n bar: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Bar',\n },\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'shadow',\n },\n },\n legend: {\n top: '8%',\n },\n grid: {\n left: '3%',\n right: '9%',\n top: '20%',\n bottom: '3%',\n containLabel: true,\n },\n xAxis: {\n name: '天',\n type: 'category',\n axisTick: {\n alignWithLabel: true,\n },\n data: ['2012', '2013', '2014', '2015', '2016'],\n },\n yAxis: {\n name: '值',\n type: 'value',\n },\n dataZoom: [\n {\n type: 'inside',\n start: 0,\n end: 100,\n },\n ],\n series: [\n {\n name: 'Forest',\n type: 'bar',\n barGap: 0,\n emphasis: {\n focus: 'series',\n },\n data: [320, 332, 301, 334, 390],\n },\n {\n name: 'Steppe',\n type: 'bar',\n emphasis: {\n focus: 'series',\n },\n data: [220, 182, 191, 234, 290],\n },\n {\n name: 'Desert',\n type: 'bar',\n emphasis: {\n focus: 'series',\n },\n data: [150, 232, 201, 154, 190],\n },\n ],\n },\n pie: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Pie',\n },\n tooltip: {\n trigger: 'item',\n },\n legend: {\n top: '8%',\n },\n xAxis: {\n show: false,\n },\n yAxis: {\n show: false,\n },\n series: [\n {\n name: 'Access From',\n type: 'pie',\n radius: '50%',\n top: '10%',\n data: [\n {value: 1048, name: 'Search'},\n {value: 735, name: 'Direct'},\n {value: 580, name: 'Email'},\n {value: 484, name: 'Union'},\n {value: 300, name: 'Video'},\n ],\n labelLine: {\n show: true,\n },\n emphasis: {\n itemStyle: {\n shadowBlur: 10,\n shadowOffsetX: 0,\n shadowColor: 'rgba(0, 0, 0, 0.5)',\n },\n },\n },\n ],\n },\n scatter: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Scatter',\n },\n tooltip: {},\n legend: {\n top: '8%',\n data: ['1990', '2015'],\n },\n grid: {\n left: '5%',\n right: '5%',\n top: '20%',\n bottom: '3%',\n containLabel: true,\n },\n xAxis: {\n splitLine: {\n lineStyle: {\n type: 'dashed',\n },\n },\n },\n yAxis: {\n splitLine: {\n lineStyle: {\n type: 'dashed',\n },\n },\n scale: true,\n },\n dataZoom: [\n {\n type: 'inside',\n start: 0,\n end: 100,\n },\n ],\n series: [\n {\n name: '1990',\n data: [\n [1516, 68],\n [13670, 74.7],\n [28599, 75],\n [29476, 77.1],\n [31476, 75.4],\n [28666, 78.1],\n [1777, 57.7],\n [29550, 79.1],\n [2076, 67.9],\n [12087, 72],\n [24021, 75.4],\n [43296, 76.8],\n [10088, 70.8],\n [19349, 69.6],\n [10670, 67.3],\n [26424, 75.7],\n [37062, 75.4],\n ],\n type: 'scatter',\n symbolSize: 20,\n emphasis: {\n focus: 'series',\n label: {\n show: true,\n position: 'top',\n },\n },\n itemStyle: {\n shadowBlur: 10,\n shadowColor: 'rgba(0, 0, 0, 0.2)',\n shadowOffsetY: 5,\n },\n },\n {\n name: '2015',\n data: [\n [13334, 76.9],\n [21291, 78.5],\n [38923, 80.8],\n [37599, 81.9],\n [44053, 81.1],\n [42182, 82.8],\n [5903, 66.8],\n [36162, 83.5],\n [1390, 71.4],\n [34644, 80.7],\n [34186, 80.6],\n [64304, 81.6],\n [24787, 77.3],\n [23038, 73.13],\n [19360, 76.5],\n [38225, 81.4],\n [53354, 79.1],\n ],\n type: 'scatter',\n symbolSize: 20,\n emphasis: {\n focus: 'series',\n label: {\n show: true,\n position: 'top',\n },\n },\n itemStyle: {\n shadowBlur: 10,\n shadowColor: 'rgba(0, 0, 0, 0.2)',\n shadowOffsetY: 5,\n },\n },\n ],\n },\n radar: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Radar',\n },\n tooltip: {\n trigger: 'axis',\n },\n legend: {\n top: '8%',\n data: ['Budget', 'Spending'],\n },\n radar: {\n indicator: [{name: 'Sales'}, {name: 'Administration'}, {name: 'Technology'}, {name: 'Customer'}, {name: 'Development'}, {name: 'Marketing'}],\n radius: 80,\n },\n series: [\n {\n name: 'Radar',\n type: 'radar',\n tooltip: {\n trigger: 'item',\n },\n areaStyle: {},\n data: [\n {\n value: [4200, 3000, 20000, 35000, 50000, 18000],\n name: 'Budget',\n },\n {\n value: [5000, 14000, 28000, 26000, 42000, 21000],\n name: 'Spending',\n },\n ],\n },\n ],\n },\n treemap: {\n backgroundColor: '#fff',\n title: {\n show: false,\n },\n legend: {\n show: false,\n },\n grid: {\n left: '0px',\n right: '0px',\n top: '0px',\n bottom: '0px',\n },\n series: [\n {\n type: 'treemap',\n label: {\n fontSize: 50,\n },\n width: '100%',\n height: '100%',\n breadcrumb: {\n show: false,\n },\n data: [\n {\n name: '标签',\n value: 20,\n },\n ],\n symbol: 'none',\n areaStyle: null,\n },\n ],\n },\n label: {\n backgroundColor: '#fff',\n title: {\n show: false,\n },\n legend: {\n show: false,\n },\n grid: {\n left: '0px',\n right: '0px',\n top: '0px',\n bottom: '0px',\n },\n xAxis: {\n show: false,\n type: 'category',\n data: [],\n },\n yAxis: {\n show: false,\n type: 'category',\n data: [],\n },\n series: [\n {\n type: 'custom',\n renderItem,\n data: [\n [20, '标签1:20'],\n [35, '标签2: 35'],\n [15, '标签3: 15'],\n ],\n },\n ],\n },\n};\n\nexport const defaultChart: ChartOption = {\n type: 'chart',\n data: {\n source: [],\n },\n xAisData: '',\n yAisData: '',\n name: '',\n icon: '',\n id: '',\n left: 0,\n top: 0,\n smooth: false,\n symbol: '',\n showLabel: false,\n areaStyle: '',\n labelColor: '',\n labelPosition: '',\n radius: false,\n widthUnit: 'px',\n width: 600,\n heightUnit: 'px',\n height: 400,\n isSuspend: false,\n zIndex: 0,\n option: undefined,\n seriesData: '',\n groupBy: false,\n orderBy: 'NONE',\n cutLength: 5,\n};\n\nexport const defaultReport: StatementOption = {\n id: '',\n type: 'report',\n config: [],\n widthType: 'px',\n width: 600,\n fullHeight: false,\n height: 400,\n seriesEnable: true,\n seriesHeadText: '#',\n frozen: {\n rowCount: 0,\n colCount: 0,\n trailingColCount: 0,\n trailingRowCount: 0,\n },\n params: [],\n theme: 'blue',\n data: {\n source: [],\n pagination: true,\n pageSize: 10,\n processData: '',\n },\n rowConfig: [],\n colConfig: [],\n};\n\nexport const setXAxisData = (selectedChart, sourceData) => {\n let {option: chartConfigForm} = selectedChart;\n let {xDataId: value} = chartConfigForm;\n let localData, xKey;\n if (value.length === 3) {\n if (sourceData && sourceData[value[0]]) {\n localData = sourceData[value[0]][value[1]];\n }\n xKey = value[2];\n } else {\n localData = sourceData[value[0]];\n xKey = value[1];\n }\n if (!localData) {\n return chartConfigForm;\n }\n let data: any[] = [];\n if (selectedChart.groupBy) {\n let dataSet = new Set();\n localData.forEach((item) => {\n dataSet.add(item[xKey]);\n });\n data = [...dataSet];\n } else {\n data = localData.map((item) => item[xKey]);\n }\n if (selectedChart.type == 'rowBar') {\n chartConfigForm.yAxis.data = data;\n } else if (['line', 'bar'].includes(selectedChart.type)) {\n chartConfigForm.xAxis.data = data;\n } else if (selectedChart.type == 'radar') {\n chartConfigForm.radar.indicator = data;\n }\n return chartConfigForm;\n};\n\nexport const setYAxisData = (selectedChart, sourceData) => {\n let {option: chartConfigForm} = selectedChart;\n let {yDataId: value} = chartConfigForm;\n let xData: any[] = [],\n xKey = '';\n if (chartConfigForm.xDataId) {\n if (chartConfigForm.xDataId.length === 3) {\n if (sourceData && sourceData[chartConfigForm.xDataId[0]]) {\n xData = sourceData[chartConfigForm.xDataId[0]][chartConfigForm.xDataId[1]];\n }\n xKey = chartConfigForm.xDataId[2];\n } else {\n xData = sourceData[chartConfigForm.xDataId[0]];\n xKey = chartConfigForm.xDataId[1];\n }\n }\n if (xData) {\n if (selectedChart.groupBy) {\n let dataSet = new Set();\n xData.forEach((item) => {\n dataSet.add(item[xKey]);\n });\n xData = [...dataSet];\n } else {\n xData = xData.map((item) => item[xKey]);\n }\n }\n\n if (selectedChart.type == 'radar') {\n chartConfigForm.series[0].data = [];\n for (let item of value) {\n let yData, yKey;\n if (item.length === 3) {\n if (sourceData[item[0]]) {\n yData = sourceData[item[0]][item[1]];\n }\n yKey = item[2];\n } else {\n yData = sourceData[item[0]];\n yKey = item[1];\n }\n let data: any[] = [];\n if (selectedChart.groupBy && xData) {\n let dataObj: any = {};\n yData.forEach((el) => {\n let xVal = el[xKey];\n let yVal = el[yKey];\n if (xVal && !isNaN(yVal)) {\n if (!dataObj[xVal]) {\n dataObj[xVal] = 0;\n }\n dataObj[xVal] = yVal;\n }\n });\n data = xData.map((xVal) => {\n return dataObj[xVal];\n });\n } else {\n data = yData.map((el) => el[yKey]);\n }\n if (selectedChart.orderBy && selectedChart.orderBy !== 'NONE') {\n data = data.sort((a, b) => {\n if (selectedChart.orderBy === 'ASC') {\n return a - b;\n } else {\n return b - a;\n }\n });\n\n if (!isNaN(selectedChart.cutLength) && selectedChart.cutLength > 0) {\n data = data.slice(0, selectedChart.cutLength);\n }\n }\n chartConfigForm.series[0].data.push({\n value: data,\n });\n }\n } else if (selectedChart.type == 'treemap') {\n if (value && value.length) {\n let [id, key] = value[0];\n if (sourceData[id][0]) {\n let val = sourceData[id][0][key];\n if (val) {\n let name = chartConfigForm.series[0].data[0]['name'].split(':')[0];\n chartConfigForm.series[0].data[0]['name'] = `${name}:${val}`;\n }\n }\n }\n } else {\n let serieCopy = cloneDeep(chartConfigForm.series);\n if (value.length) {\n chartConfigForm.series = [];\n }\n for (let i = 0; i < value.length; i++) {\n let item = value[i];\n let yData, yKey;\n if (item.length === 3) {\n if (sourceData[item[0]]) {\n yData = sourceData[item[0]][item[1]];\n }\n yKey = item[2];\n } else {\n yData = sourceData[item[0]];\n yKey = item[1];\n }\n let serie = cloneDeep(serieCopy[0]);\n serie.data = [];\n let data: any[] = [];\n if (yData && xKey && xData) {\n switch (selectedChart.type) {\n case 'line':\n case 'rowBar':\n case 'bar':\n if (selectedChart.groupBy) {\n let dataObj: any = {};\n yData.forEach((el) => {\n let xVal = el[xKey];\n let yVal = el[yKey];\n if (xVal && !isNaN(yVal)) {\n if (!dataObj[xVal]) {\n dataObj[xVal] = 0;\n }\n dataObj[xVal] = yVal;\n }\n });\n data = xData.map((xVal) => {\n return dataObj[xVal];\n });\n } else {\n data = yData.map((el) => el[yKey]);\n }\n if (selectedChart.orderBy && selectedChart.orderBy !== 'NONE') {\n data = data.sort((a, b) => {\n if (selectedChart.orderBy === 'ASC') {\n return a - b;\n } else {\n return b - a;\n }\n });\n\n if (!isNaN(selectedChart.cutLength) && selectedChart.cutLength > 0) {\n data = data.slice(0, selectedChart.cutLength);\n }\n }\n break;\n case 'pie':\n if (selectedChart.groupBy) {\n let dataObj: any = {};\n yData.forEach((el) => {\n let xVal = el[xKey];\n let yVal = el[yKey];\n if (xVal && !isNaN(yVal)) {\n if (!dataObj[xVal]) {\n dataObj[xVal] = 0;\n }\n dataObj[xVal] = yVal;\n }\n });\n data = xData.map((xVal) => {\n return {value: dataObj[xVal], name: xVal};\n });\n } else {\n data = yData.map((el) => {\n return {value: el[yKey], name: el[xKey]};\n });\n }\n if (selectedChart.orderBy && selectedChart.orderBy !== 'NONE') {\n data = data.sort((a, b) => {\n if (selectedChart.orderBy === 'ASC') {\n return a - b;\n } else {\n return b - a;\n }\n });\n\n if (!isNaN(selectedChart.cutLength) && selectedChart.cutLength > 0) {\n data = data.slice(0, selectedChart.cutLength);\n }\n }\n break;\n case 'scatter':\n if (selectedChart.groupBy) {\n let dataObj: any = {};\n yData.forEach((el) => {\n let xVal = el[xKey];\n let yVal = el[yKey];\n if (xVal && !isNaN(yVal)) {\n if (!dataObj[xVal]) {\n dataObj[xVal] = 0;\n }\n dataObj[xVal] = yVal;\n }\n });\n data = xData.map((xVal) => {\n return [xVal, dataObj[xVal]];\n });\n } else {\n data = yData.map((el) => {\n return [el[xKey], el[yKey]];\n });\n }\n if (selectedChart.orderBy && selectedChart.orderBy !== 'NONE') {\n data = data.sort((a, b) => {\n if (selectedChart.orderBy === 'ASC') {\n return a - b;\n } else {\n return b - a;\n }\n });\n\n if (!isNaN(selectedChart.cutLength) && selectedChart.cutLength > 0) {\n data = data.slice(0, selectedChart.cutLength);\n }\n }\n break;\n case 'label':\n if (selectedChart.groupBy) {\n let dataObj: any = {};\n yData.forEach((el) => {\n let xVal = el[xKey];\n let yVal = el[yKey];\n if (xVal && !isNaN(yVal)) {\n if (!dataObj[xVal]) {\n dataObj[xVal] = 0;\n }\n dataObj[xVal] = yVal;\n }\n });\n data = xData.map((xVal) => {\n const codes = xVal ? xVal.split('').map((str) => str.charCodeAt()) : [];\n return [dataObj[xVal], codes];\n });\n } else {\n data = yData.map((el) => {\n const codes = el[xKey] ? el[xKey].split('').map((str) => str.charCodeAt()) : [];\n\n return [el[yKey], codes];\n });\n }\n if (selectedChart.orderBy && selectedChart.orderBy !== 'NONE') {\n data = data.sort((a, b) => {\n if (selectedChart.orderBy === 'ASC') {\n return a - b;\n } else {\n return b - a;\n }\n });\n\n if (!isNaN(selectedChart.cutLength) && selectedChart.cutLength > 0) {\n data = data.slice(0, selectedChart.cutLength);\n }\n }\n serie.renderItem = renderItem;\n break;\n }\n serie.data = data;\n }\n chartConfigForm.series.push(serie);\n }\n }\n return chartConfigForm;\n};\n\nexport function getReportDefaultOption(type) {\n if (type === 'report') {\n return validateAndCompleteStatementOption(defaultReport);\n } else {\n let option = cloneDeep(defaultChart);\n option.id = `${type}-${Date.now()}`;\n option.type = type;\n option.option = chartsOption[type];\n return option;\n }\n}\nexport default TypeItems;\n","// @ts-ignore\nimport axios from '@/libs/api.request.js';\nimport {ChartOption, Statement, StatementOption} from '../types';\nimport {ItemTypes} from '../libs/chartReportDefaultOption';\nimport {ElMessage} from 'element-plus';\nimport {useRouter} from 'vue-router';\n\n/** 获取报表列表数据 */\nexport function getList(listForm): Promise<Statement[]> {\n // @ts-ignore\n return axios.request({\n url: 'sysReport/list',\n method: 'post',\n type: 'form',\n data: listForm,\n });\n}\n\nexport interface ConfigStatement extends Statement {\n remoteOptions: (StatementOption & ChartOption)[];\n}\n\n/** 获取报表数据 */\nexport function getConfig(id): Promise<ConfigStatement> {\n // @ts-ignore\n return axios\n .request({\n url: 'sysReport/config',\n method: 'post',\n params: {\n id,\n },\n })\n .then((res) => {\n let info = JSON.parse(res.data.info);\n let {id, name, code, description, config, chartConfig} = info;\n let remoteOptions: any[] = [];\n if (config) {\n config = JSON.parse(config);\n if (Array.isArray(config) && config.length) {\n if (config[0].type === 'tableSheet') {\n ElMessage.error('当前报表版本不支持老版本数据,请等待老版本数据转换工具上线');\n const router = useRouter();\n router.back();\n throw new Error('当前报表版本不支持老版本数据,请等待老版本数据转换工具上线');\n } else {\n config = config.map((item) => {\n if (!ItemTypes.value.includes(item.type)) {\n item.type = 'report';\n }\n return item;\n });\n remoteOptions = remoteOptions.concat(config);\n }\n }\n }\n if (chartConfig) {\n chartConfig = JSON.parse(chartConfig);\n if (Array.isArray(chartConfig)) {\n chartConfig.forEach((config) => {\n if (!config.data) {\n config.data = {source: []};\n }\n });\n remoteOptions = remoteOptions.concat(chartConfig);\n }\n }\n\n return Promise.resolve({\n id,\n name,\n code,\n description,\n remoteOptions,\n });\n });\n}\n\n/** 保存报表数据 */\nexport function save(form) {\n return axios.request({\n url: 'sysReport/save',\n method: 'post',\n type: 'json',\n data: form,\n });\n}\n\n/** 保存报表数据 */\nexport function del(id) {\n return axios.request({\n url: 'sysReport/delete',\n method: 'post',\n type: 'form',\n data: {id},\n });\n}\n\n/** 创建报表时的默认数据 */\n\nexport const defaultData: any[] = [\n {\n name: '张三',\n sex: '男',\n age: 18,\n },\n {\n name: '李四',\n sex: '男',\n age: 18,\n },\n {\n name: '王舞',\n sex: '女',\n age: 16,\n },\n {\n name: '赵柳',\n sex: '女',\n age: 17,\n },\n];\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","/**\n * 复制文本\n * @param {string} str 要复制的文本\n * @returns {Promise<void>}\n */\nexport function copyString(str) {\n if (navigator.clipboard && window.isSecureContext) {\n navigator.clipboard.writeText(str);\n return Promise.resolve();\n } else {\n let textArea = document.createElement('textarea');\n textArea.value = str;\n textArea.style.position = 'absolute';\n textArea.style.opacity = '0';\n textArea.style.left = '-200%';\n textArea.style.top = '-200%';\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n let flag = document.execCommand('copy');\n textArea.remove();\n if (flag) {\n return Promise.resolve();\n } else {\n return Promise.reject(new Error('copy error'));\n }\n }\n}\n\nexport function isColorLight(color) {\n let rgb;\n if (color.startsWith('#')) {\n color = color.slice(1).toUpperCase();\n\n if (color.length === 3) {\n color = color\n .split('')\n .map((char) => char + char)\n .join('');\n }\n rgb = color.match(/.{2}/g).map((hex) => parseInt(hex, 16));\n } else if (color.startsWith('rgb(')) {\n const rgbMatch = color.match(/\\d+/g);\n rgb = rgbMatch.map((num) => parseInt(num, 10));\n } else {\n console.error('Invalid color format');\n return false;\n }\n const luminance = (0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]) / 255;\n return luminance > 0.5;\n}\n\n/**\n * 根据数据类型,获取表单配置\n */\nexport function componentTransition(dataType, dateType = 'date') {\n let componentName = 'ElInput';\n let placeholerPrefix = '筛选';\n let type = '';\n switch (dataType) {\n case 'STRING':\n componentName = 'ElInput';\n placeholerPrefix = '筛选';\n type = 'text';\n break;\n case 'LIST':\n componentName = 'ElSelect';\n placeholerPrefix = '请选择';\n break;\n case 'TABLE':\n componentName = 'ElSelect';\n placeholerPrefix = '请选择';\n break;\n case 'TREE':\n componentName = 'ElTreeSelect';\n placeholerPrefix = '请选择';\n break;\n case 'EDITOR':\n componentName = 'ElInput';\n placeholerPrefix = '筛选';\n type = 'textarea';\n break;\n case 'BOOL':\n componentName = 'ElSwitch';\n placeholerPrefix = '请选择';\n break;\n case 'LONG':\n componentName = 'ElInputNumber';\n placeholerPrefix = '筛选';\n break;\n case 'PLONG':\n componentName = 'ElInputNumber';\n placeholerPrefix = '筛选';\n break;\n case 'DOUBLE':\n componentName = 'ElInputNumber';\n placeholerPrefix = '筛选';\n break;\n case 'DATE':\n componentName = 'ElDatePicker';\n placeholerPrefix = '请选择';\n type = dateType;\n break;\n case 'DATETIME':\n componentName = 'ElDatePicker';\n placeholerPrefix = '请选择';\n type = dateType;\n break;\n case 'TIME':\n componentName = 'ElTimePicker';\n placeholerPrefix = '请选择';\n type = 'time';\n break;\n case 'TEXT':\n componentName = 'ElInput';\n placeholerPrefix = '筛选';\n type = 'text';\n break;\n case 'COLOR':\n componentName = 'ElColorPicker';\n placeholerPrefix = '请选择';\n break;\n default:\n componentName = 'ElInput';\n placeholerPrefix = '筛选';\n type = 'text';\n break;\n }\n return {componentName, placeholerPrefix, type};\n}\n\nexport function getEnumOptions<T extends Record<string, any>>(enumObj: T, filters: string[] = []) {\n return Object.keys(enumObj)\n .filter((key) => !filters.includes(enumObj[key as keyof T]))\n .map((key) => ({\n value: enumObj[key as keyof T],\n label: key,\n }));\n}\n","<template>\n <div class=\"yh-statement-view-conditions\">\n <el-form inline>\n <el-form-item\n :label=\"item.name\"\n v-for=\"item in paramsConfig\"\n :style=\"item.columnName.indexOf('end_') > -1 ? {marginLeft: '-22px'} : {}\"\n v-show=\"item.isShow\">\n <component\n :is=\"item.formItemType\"\n :model-value=\"item.value\"\n :type=\"item.type\"\n clearable\n :placeholder=\"item.placeholder\"\n @update:modelValue=\"valueChangeHandler($event, item)\"\n v-if=\"item.formItemType === 'ElSelect'\">\n <template>\n <el-option\n v-for=\"option in item.optionData\"\n :label=\"option.label\"\n :value=\"option.value\"></el-option>\n </template>\n </component>\n <component\n :is=\"item.formItemType\"\n :model-value=\"item.value\"\n :type=\"item.type\"\n clearable\n value-format=\"YYYY-MM-DD HH:mm:ss\"\n :placeholder=\"item.placeholder\"\n @blur=\"changeHandler(item)\"\n @keyup.enter=\"changeHandler(item)\"\n @update:modelValue=\"valueChangeHandler($event, item)\"\n v-else></component>\n </el-form-item>\n </el-form>\n <slot name=\"search\"></slot>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport {nextTick, ref, watch} from 'vue';\nimport {ElForm, ElFormItem, ElInput, ElSelect, ElOption, ElTreeSelect, ElSwitch, ElInputNumber, ElDatePicker, ElTimePicker, ElColorPicker} from 'element-plus';\nimport dayjs from 'dayjs';\nimport {componentTransition} from '../../libs/util';\n// @ts-ignore\nimport axios from '@/libs/api.request.js';\nimport {DataParam, DataSourceColumnDataType} from '../../types';\nimport {cloneDeep} from 'lodash-es';\n\ninterface conditionDataParams extends DataParam {\n optionData?: {label: string; value: any}[];\n placeholder: string;\n value: any;\n formItemType: string;\n}\n\ninterface Param {\n name: string;\n value: any;\n type: string;\n isNull: boolean;\n}\n\nconst props = defineProps<{\n config: conditionDataParams[];\n}>();\n\nconst emits = defineEmits<{\n (e: 'change', val: any);\n}>();\n\nconst todayStart = dayjs().startOf('day').format('YYYY-MM-DD HH:mm:ss');\nconst todayEnd = dayjs().endOf('day').format('YYYY-MM-DD HH:mm:ss');\nconst thismonthStart = dayjs().startOf('month').format('YYYY-MM-DD HH:mm:ss');\nconst thismonthEnd = dayjs().endOf('month').format('YYYY-MM-DD HH:mm:ss');\nconst threemonthStart = dayjs().add(-2, 'month').startOf('month').format('YYYY-MM-DD HH:mm:ss');\nconst threemonthEnd = dayjs().endOf('month').format('YYYY-MM-DD HH:mm:ss');\nconst thisYearStart = dayjs().startOf('year').format('YYYY-MM-DD HH:mm:ss');\nconst thisYearEnd = dayjs().endOf('year').format('YYYY-MM-DD HH:mm:ss');\n\nconst params = ref<Param[]>([]);\nconst paramsConfig = ref<conditionDataParams[]>([]);\n\nwatch(\n () => props.config,\n () => {\n config2pc();\n },\n {\n immediate: true,\n deep: true,\n }\n);\n\nfunction config2pc() {\n let pc: conditionDataParams[] = [];\n params.value = [];\n if (props.config && props.config.length) {\n for (let i = 0; i < props.config.length; i++) {\n const param = cloneDeep(props.config[i]);\n let {dataType, dateType, type, selectorId, name, columnName, defaultValue, isNull} = param;\n let isDate = [DataSourceColumnDataType.DATE, DataSourceColumnDataType.DATETIME].includes(dataType);\n const {componentName, placeholerPrefix, type: ElementType} = componentTransition(dataType, dateType);\n param.formItemType = componentName;\n param.placeholder = placeholerPrefix + name || columnName;\n if (ElementType) {\n param.type = ElementType;\n }\n param.optionData = [];\n let paramValue = defaultValue || '';\n if (isDate) {\n switch (defaultValue) {\n case 'today':\n paramValue = todayStart;\n break;\n case 'thisMonth':\n paramValue = thismonthStart;\n break;\n case 'threeMonth':\n paramValue = threemonthStart;\n break;\n case 'thisYear':\n paramValue = thisYearStart;\n break;\n }\n }\n param.value = paramValue;\n params.value.push({\n name: columnName,\n value: paramValue,\n type,\n isNull,\n });\n if (selectorId) {\n axios\n .request({\n url: `/windowDesign/getSelectorList?selectorId=${selectorId}`,\n method: 'POST',\n })\n .then((data) => {\n if (data.data && data.data.data) {\n param.optionData = data.data.data.map(({name, value}) => {\n return {\n label: name,\n value,\n };\n });\n }\n });\n }\n pc.push(param);\n if (type === 'LT_GT_EQ') {\n param.placeholder = placeholerPrefix + '开始';\n // 范围查询需要添加一个结束字段\n const endParam = cloneDeep(param);\n endParam.name = '-';\n endParam.columnName = `end_${columnName}`;\n endParam.placeholder = placeholerPrefix + '结束';\n let endParamValue = defaultValue || '';\n if (isDate) {\n switch (defaultValue) {\n case 'today':\n endParamValue = todayEnd;\n break;\n case 'thisMonth':\n endParamValue = thismonthEnd;\n break;\n case 'threeMonth':\n endParamValue = threemonthEnd;\n break;\n case 'thisYear':\n endParamValue = thisYearEnd;\n break;\n }\n }\n params.value.push({\n name: `end_${columnName}`,\n value: endParamValue,\n type,\n isNull,\n });\n if (selectorId) {\n axios\n .request({\n url: `/windowDesign/getSelectorList?selectorId=${selectorId}`,\n method: 'POST',\n })\n .then((data) => {\n if (data.data && data.data.data) {\n endParam.optionData = data.data.data.map(({name, value}) => {\n return {\n label: name,\n value,\n };\n });\n }\n });\n }\n pc.push(endParam);\n }\n }\n if (props.config.map((item) => item.isNull).includes(true)) {\n nextTick(() => {\n emits('change', params.value);\n });\n }\n }\n paramsConfig.value = pc;\n}\n\nfunction valueChangeHandler(val, param) {\n let index = params.value.findIndex((item) => {\n return item.name === param.columnName;\n });\n param.value = val;\n params.value[index].value = val;\n if (['ElSelect', 'ElTreeSelect', 'ElSwitch', 'ElDatePicker', 'ElTimePicker', 'ElColorPicker'].includes(param.formItemType)) {\n emits('change', params.value);\n }\n}\n\nfunction changeHandler(item) {\n if (['ElInput', 'ElInputNumber'].includes(item.formItemType)) {\n emits('change', params.value);\n }\n}\n</script>\n<style lang=\"scss\">\n.yh-statement-view-conditions {\n display: flex;\n .el-form-item {\n margin-right: 8px;\n margin-bottom: 8px;\n }\n}\n</style>\n","import axios from '@/libs/api.request.js';\n\nexport function getDateSourceList() {\n return axios.request({\n url: '/windowDesign/getDatasourceList',\n method: 'POST',\n });\n}\n\nexport const columnTypeName = {\n STRING: '字符',\n PLONG: '正整数',\n LONG: '整数',\n DOUBLE: '浮点',\n TEXT: '文本',\n BOOL: '是否',\n DATE: '日期',\n TIME: '时间',\n DATETIME: '日期时间',\n PASSWORD: '密码',\n ID: 'ID',\n LIST: '列表',\n TABLE: '表',\n TREE: '下拉树',\n IMG: '图片',\n OPEN: '弹窗',\n SQL: '子查询',\n COLOR: '颜色',\n EDITOR: '代码编辑器',\n};\n\nexport function getDateSourceColumns(datasourceId) {\n return axios\n .request({\n url: '/windowDesign/getColumns',\n method: 'POST',\n data: {\n datasourceId,\n },\n })\n .then((res) => {\n if (res.data && res.data.data) {\n return Promise.resolve(res.data.data);\n } else {\n return Promise.resolve([]);\n }\n });\n}\n\nexport interface dataParam {\n name?: string;\n value?: any;\n type?: string;\n isNull?: boolean;\n}\n\nexport interface SourceDataParam {\n pageSize?: number;\n pageNumber?: number;\n params?: dataParam[];\n}\n\nexport function getDateSourceData(\n url: string,\n data: SourceDataParam = {\n pageNumber: 1,\n pageSize: 100,\n }\n) {\n return axios\n .request({\n url: `/report/data/${url}`,\n type: 'json',\n method: 'POST',\n data,\n })\n .then((res) => {\n if (res?.data && res.data?.data) {\n return Promise.resolve(res.data);\n } else {\n return Promise.resolve([]);\n }\n });\n}\n\nexport function getSelectorList() {\n return axios.request({\n url: `windowDesign/getSelectorList`,\n method: 'POST',\n });\n}\n\nexport function getListData() {}\n","import {CellStyle, FormatType} from '../types';\nimport dayjs from 'dayjs';\n\n/** 渲染单元格样式 */\nexport function renderCellStyle(styleObj: CellStyle) {\n let styleAttr = '';\n Object.keys(styleObj).forEach((key) => {\n let value = styleObj[key];\n if (value) {\n switch (key) {\n case 'color':\n styleAttr += `color:${styleObj[key]};`;\n break;\n case 'backgroundColor':\n styleAttr += `background-color:${styleObj[key]};`;\n break;\n case 'fontWeight':\n styleAttr += `font-weight:${styleObj[key]};`;\n break;\n case 'fontSize':\n styleAttr += `font-size:${styleObj[key]}px;`;\n break;\n case 'textAlign':\n styleAttr += `text-align:${styleObj[key]};`;\n break;\n case 'verticalAlign':\n styleAttr += `vertical-align:${styleObj[key]};`;\n break;\n case 'fontFamily':\n styleAttr += `font-family:${styleObj[key]};`;\n break;\n default:\n break;\n }\n }\n });\n return styleAttr;\n}\n\n//#region 单元格内容格式化\nfunction formatNumber(value, {numberDecimal, numberUseGrouping} = {} as any) {\n if (typeof value === 'string') {\n value = value.replace(/,/g, ''); // 移除已有千分符\n value = parseFloat(value);\n } else {\n value = parseFloat(value);\n }\n if (isNaN(value)) value = 0;\n\n const rounded = numberDecimal === 0 ? Math.round(value) : value.toFixed(numberDecimal);\n\n if (numberUseGrouping) {\n const parts = rounded.toString().split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return parts.join('.');\n } else {\n return rounded;\n }\n}\n\nfunction formatCurrency(value, {numberDecimal, currencySymbol, numberUseGrouping} = {} as any) {\n if (typeof value === 'string') {\n value = value.replace(/,/g, ''); // 移除已有千分符 [[8]]\n value = parseFloat(value);\n } else {\n value = parseFloat(value);\n }\n if (isNaN(value)) throw new Error('Invalid number input');\n\n const rounded = numberDecimal === 0 ? Math.round(value) : parseFloat(value.toFixed(numberDecimal));\n\n let [integerPart, decimalPart] = rounded.toString().split('.');\n\n if (numberUseGrouping) {\n integerPart = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n\n let formatted = `${currencySymbol}${integerPart}`;\n if (numberDecimal > 0) {\n formatted += `.${decimalPart}`;\n }\n\n return formatted;\n}\n\nfunction formatPercentage(value, {numberDecimal} = {} as any, isPromille = false) {\n if (typeof value === 'string') {\n value = value.replace(/,/g, ''); // 移除已有千分符\n value = parseFloat(value);\n } else {\n value = parseFloat(value);\n }\n if (isNaN(value)) return value;\n\n const rounded = numberDecimal === 0 ? Math.round(value) : value.toFixed(numberDecimal);\n\n if (isPromille) {\n return `${rounded}‰`;\n } else {\n return `${rounded}%`;\n }\n}\n\nfunction formatScientific(value, {scientificNotation = 'e', digits = 6} = {}) {\n if (typeof value === 'string') {\n value = value.replace(/,/g, '');\n value = parseFloat(value);\n } else {\n value = parseFloat(value);\n }\n\n // 如果转换失败,返回原始值\n if (isNaN(value)) return value;\n\n // 生成科学计数法字符串并替换指数符号\n const sciStr = value.toExponential(digits);\n return sciStr.replace(/e/, scientificNotation);\n}\n\nfunction formatDatetime(value, {date = 'YYYY-MM-DD HH:mm:ss'} = {}) {\n if (value == null) return value; // 处理 null/undefined\n\n let dateObj;\n\n if (typeof value === 'number') {\n // 处理数字时间戳(自动识别秒/毫秒)\n const timestamp = value < 10000000000 ? value * 1000 : value;\n dateObj = dayjs(timestamp);\n } else if (typeof value === 'string') {\n // 尝试转换为数字时间戳\n const numValue = Number(value);\n if (!isNaN(numValue)) {\n const timestamp = numValue < 10000000000 ? numValue * 1000 : numValue;\n dateObj = dayjs(timestamp);\n } else {\n // 按字符串解析日期\n dateObj = dayjs(value);\n }\n } else {\n return value; // 非字符串/数字直接返回\n }\n\n return dateObj.isValid() ? dateObj.format(date) : value;\n}\n\n/**\n * 格式化单元格值\n * @param value - 要格式化的值\n * @param formatType - 格式化类型\n * @param formatOptions - 格式化选项\n */\nexport function formatCellValue(value: string, formatType: FormatType, formatOptions: any) {\n switch (formatType) {\n case 'number':\n return formatNumber(value, formatOptions);\n case 'currency':\n return formatCurrency(value, formatOptions);\n case 'percent':\n return formatPercentage(value, formatOptions, false);\n case 'promille':\n return formatPercentage(value, formatOptions, true);\n case 'scientific':\n return formatScientific(value, formatOptions);\n case 'datetime':\n return formatDatetime(value, formatOptions);\n default:\n return value;\n }\n}\n\n//#endregion\n","!function(e,_){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=_(require(\"dayjs\")):\"function\"==typeof define&&define.amd?define([\"dayjs\"],_):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_locale_zh_cn=_(e.dayjs)}(this,(function(e){\"use strict\";function _(e){return e&&\"object\"==typeof e&&\"default\"in e?e:{default:e}}var t=_(e),d={name:\"zh-cn\",weekdays:\"星期日_星期一_星期二_星期三_星期四_星期五_星期六\".split(\"_\"),weekdaysShort:\"周日_周一_周二_周三_周四_周五_周六\".split(\"_\"),weekdaysMin:\"日_一_二_三_四_五_六\".split(\"_\"),months:\"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月\".split(\"_\"),monthsShort:\"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),ordinal:function(e,_){return\"W\"===_?e+\"周\":e+\"日\"},weekStart:1,yearStart:4,formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY年M月D日\",LLL:\"YYYY年M月D日Ah点mm分\",LLLL:\"YYYY年M月D日ddddAh点mm分\",l:\"YYYY/M/D\",ll:\"YYYY年M月D日\",lll:\"YYYY年M月D日 HH:mm\",llll:\"YYYY年M月D日dddd HH:mm\"},relativeTime:{future:\"%s内\",past:\"%s前\",s:\"几秒\",m:\"1 分钟\",mm:\"%d 分钟\",h:\"1 小时\",hh:\"%d 小时\",d:\"1 天\",dd:\"%d 天\",M:\"1 个月\",MM:\"%d 个月\",y:\"1 年\",yy:\"%d 年\"},meridiem:function(e,_){var t=100*e+_;return t<600?\"凌晨\":t<900?\"早上\":t<1100?\"上午\":t<1300?\"中午\":t<1800?\"下午\":\"晚上\"}};return t.default.locale(d,null,!0),d}));","import {StatementOption} from '../types';\nimport {defaultData} from '../api/form';\nimport {cloneDeep} from 'lodash-es';\nimport dayjs from 'dayjs';\nimport zhCn from 'dayjs/locale/zh-cn';\ndayjs.locale(zhCn);\nimport axios from '@/libs/api.request.js';\n\nexport function listDataStr2Arr(str) {\n return str.split(',').map((data) => {\n let [id, name, url] = data.split(':');\n return {\n id,\n name,\n url,\n };\n });\n}\n\nexport async function getProcessData(processData, data, params) {\n try {\n const fun = (function (axios, dayjs) {\n return eval(\n `async (allData, params) => {\n ${processData}\n }`\n );\n })(axios, dayjs);\n return await fun.call(this, data, params);\n } catch (error) {\n console.error(error);\n return data;\n }\n}\n","/**\n * @implements {IHooks}\n */\nclass Hooks {\n\t/**\n\t * @callback HookCallback\n\t * @this {*|Jsep} this\n\t * @param {Jsep} env\n\t * @returns: void\n\t */\n\t/**\n\t * Adds the given callback to the list of callbacks for the given hook.\n\t *\n\t * The callback will be invoked when the hook it is registered for is run.\n\t *\n\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t *\n\t * @param {string|object} name The name of the hook, or an object of callbacks keyed by name\n\t * @param {HookCallback|boolean} callback The callback function which is given environment variables.\n\t * @param {?boolean} [first=false] Will add the hook to the top of the list (defaults to the bottom)\n\t * @public\n\t */\n\tadd(name, callback, first) {\n\t\tif (typeof arguments[0] != 'string') {\n\t\t\t// Multiple hook callbacks, keyed by name\n\t\t\tfor (let name in arguments[0]) {\n\t\t\t\tthis.add(name, arguments[0][name], arguments[1]);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t(Array.isArray(name) ? name : [name]).forEach(function (name) {\n\t\t\t\tthis[name] = this[name] || [];\n\n\t\t\t\tif (callback) {\n\t\t\t\t\tthis[name][first ? 'unshift' : 'push'](callback);\n\t\t\t\t}\n\t\t\t}, this);\n\t\t}\n\t}\n\n\t/**\n\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t *\n\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t *\n\t * @param {string} name The name of the hook.\n\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t * @public\n\t */\n\trun(name, env) {\n\t\tthis[name] = this[name] || [];\n\t\tthis[name].forEach(function (callback) {\n\t\t\tcallback.call(env && env.context ? env.context : env, env);\n\t\t});\n\t}\n}\n\n/**\n * @implements {IPlugins}\n */\nclass Plugins {\n\tconstructor(jsep) {\n\t\tthis.jsep = jsep;\n\t\tthis.registered = {};\n\t}\n\n\t/**\n\t * @callback PluginSetup\n\t * @this {Jsep} jsep\n\t * @returns: void\n\t */\n\t/**\n\t * Adds the given plugin(s) to the registry\n\t *\n\t * @param {object} plugins\n\t * @param {string} plugins.name The name of the plugin\n\t * @param {PluginSetup} plugins.init The init function\n\t * @public\n\t */\n\tregister(...plugins) {\n\t\tplugins.forEach((plugin) => {\n\t\t\tif (typeof plugin !== 'object' || !plugin.name || !plugin.init) {\n\t\t\t\tthrow new Error('Invalid JSEP plugin format');\n\t\t\t}\n\t\t\tif (this.registered[plugin.name]) {\n\t\t\t\t// already registered. Ignore.\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tplugin.init(this.jsep);\n\t\t\tthis.registered[plugin.name] = plugin;\n\t\t});\n\t}\n}\n\n// JavaScript Expression Parser (JSEP) 1.4.0\n\nclass Jsep {\n\t/**\n\t * @returns {string}\n\t */\n\tstatic get version() {\n\t\t// To be filled in by the template\n\t\treturn '1.4.0';\n\t}\n\n\t/**\n\t * @returns {string}\n\t */\n\tstatic toString() {\n\t\treturn 'JavaScript Expression Parser (JSEP) v' + Jsep.version;\n\t};\n\n\t// ==================== CONFIG ================================\n\t/**\n\t * @method addUnaryOp\n\t * @param {string} op_name The name of the unary op to add\n\t * @returns {Jsep}\n\t */\n\tstatic addUnaryOp(op_name) {\n\t\tJsep.max_unop_len = Math.max(op_name.length, Jsep.max_unop_len);\n\t\tJsep.unary_ops[op_name] = 1;\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method jsep.addBinaryOp\n\t * @param {string} op_name The name of the binary op to add\n\t * @param {number} precedence The precedence of the binary op (can be a float). Higher number = higher precedence\n\t * @param {boolean} [isRightAssociative=false] whether operator is right-associative\n\t * @returns {Jsep}\n\t */\n\tstatic addBinaryOp(op_name, precedence, isRightAssociative) {\n\t\tJsep.max_binop_len = Math.max(op_name.length, Jsep.max_binop_len);\n\t\tJsep.binary_ops[op_name] = precedence;\n\t\tif (isRightAssociative) {\n\t\t\tJsep.right_associative.add(op_name);\n\t\t}\n\t\telse {\n\t\t\tJsep.right_associative.delete(op_name);\n\t\t}\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method addIdentifierChar\n\t * @param {string} char The additional character to treat as a valid part of an identifier\n\t * @returns {Jsep}\n\t */\n\tstatic addIdentifierChar(char) {\n\t\tJsep.additional_identifier_chars.add(char);\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method addLiteral\n\t * @param {string} literal_name The name of the literal to add\n\t * @param {*} literal_value The value of the literal\n\t * @returns {Jsep}\n\t */\n\tstatic addLiteral(literal_name, literal_value) {\n\t\tJsep.literals[literal_name] = literal_value;\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeUnaryOp\n\t * @param {string} op_name The name of the unary op to remove\n\t * @returns {Jsep}\n\t */\n\tstatic removeUnaryOp(op_name) {\n\t\tdelete Jsep.unary_ops[op_name];\n\t\tif (op_name.length === Jsep.max_unop_len) {\n\t\t\tJsep.max_unop_len = Jsep.getMaxKeyLen(Jsep.unary_ops);\n\t\t}\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeAllUnaryOps\n\t * @returns {Jsep}\n\t */\n\tstatic removeAllUnaryOps() {\n\t\tJsep.unary_ops = {};\n\t\tJsep.max_unop_len = 0;\n\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeIdentifierChar\n\t * @param {string} char The additional character to stop treating as a valid part of an identifier\n\t * @returns {Jsep}\n\t */\n\tstatic removeIdentifierChar(char) {\n\t\tJsep.additional_identifier_chars.delete(char);\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeBinaryOp\n\t * @param {string} op_name The name of the binary op to remove\n\t * @returns {Jsep}\n\t */\n\tstatic removeBinaryOp(op_name) {\n\t\tdelete Jsep.binary_ops[op_name];\n\n\t\tif (op_name.length === Jsep.max_binop_len) {\n\t\t\tJsep.max_binop_len = Jsep.getMaxKeyLen(Jsep.binary_ops);\n\t\t}\n\t\tJsep.right_associative.delete(op_name);\n\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeAllBinaryOps\n\t * @returns {Jsep}\n\t */\n\tstatic removeAllBinaryOps() {\n\t\tJsep.binary_ops = {};\n\t\tJsep.max_binop_len = 0;\n\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeLiteral\n\t * @param {string} literal_name The name of the literal to remove\n\t * @returns {Jsep}\n\t */\n\tstatic removeLiteral(literal_name) {\n\t\tdelete Jsep.literals[literal_name];\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeAllLiterals\n\t * @returns {Jsep}\n\t */\n\tstatic removeAllLiterals() {\n\t\tJsep.literals = {};\n\n\t\treturn Jsep;\n\t}\n\t// ==================== END CONFIG ============================\n\n\n\t/**\n\t * @returns {string}\n\t */\n\tget char() {\n\t\treturn this.expr.charAt(this.index);\n\t}\n\n\t/**\n\t * @returns {number}\n\t */\n\tget code() {\n\t\treturn this.expr.charCodeAt(this.index);\n\t};\n\n\n\t/**\n\t * @param {string} expr a string with the passed in express\n\t * @returns Jsep\n\t */\n\tconstructor(expr) {\n\t\t// `index` stores the character number we are currently at\n\t\t// All of the gobbles below will modify `index` as we move along\n\t\tthis.expr = expr;\n\t\tthis.index = 0;\n\t}\n\n\t/**\n\t * static top-level parser\n\t * @returns {jsep.Expression}\n\t */\n\tstatic parse(expr) {\n\t\treturn (new Jsep(expr)).parse();\n\t}\n\n\t/**\n\t * Get the longest key length of any object\n\t * @param {object} obj\n\t * @returns {number}\n\t */\n\tstatic getMaxKeyLen(obj) {\n\t\treturn Math.max(0, ...Object.keys(obj).map(k => k.length));\n\t}\n\n\t/**\n\t * `ch` is a character code in the next three functions\n\t * @param {number} ch\n\t * @returns {boolean}\n\t */\n\tstatic isDecimalDigit(ch) {\n\t\treturn (ch >= 48 && ch <= 57); // 0...9\n\t}\n\n\t/**\n\t * Returns the precedence of a binary operator or `0` if it isn't a binary operator. Can be float.\n\t * @param {string} op_val\n\t * @returns {number}\n\t */\n\tstatic binaryPrecedence(op_val) {\n\t\treturn Jsep.binary_ops[op_val] || 0;\n\t}\n\n\t/**\n\t * Looks for start of identifier\n\t * @param {number} ch\n\t * @returns {boolean}\n\t */\n\tstatic isIdentifierStart(ch) {\n\t\treturn (ch >= 65 && ch <= 90) || // A...Z\n\t\t\t(ch >= 97 && ch <= 122) || // a...z\n\t\t\t(ch >= 128 && !Jsep.binary_ops[String.fromCharCode(ch)]) || // any non-ASCII that is not an operator\n\t\t\t(Jsep.additional_identifier_chars.has(String.fromCharCode(ch))); // additional characters\n\t}\n\n\t/**\n\t * @param {number} ch\n\t * @returns {boolean}\n\t */\n\tstatic isIdentifierPart(ch) {\n\t\treturn Jsep.isIdentifierStart(ch) || Jsep.isDecimalDigit(ch);\n\t}\n\n\t/**\n\t * throw error at index of the expression\n\t * @param {string} message\n\t * @throws\n\t */\n\tthrowError(message) {\n\t\tconst error = new Error(message + ' at character ' + this.index);\n\t\terror.index = this.index;\n\t\terror.description = message;\n\t\tthrow error;\n\t}\n\n\t/**\n\t * Run a given hook\n\t * @param {string} name\n\t * @param {jsep.Expression|false} [node]\n\t * @returns {?jsep.Expression}\n\t */\n\trunHook(name, node) {\n\t\tif (Jsep.hooks[name]) {\n\t\t\tconst env = { context: this, node };\n\t\t\tJsep.hooks.run(name, env);\n\t\t\treturn env.node;\n\t\t}\n\t\treturn node;\n\t}\n\n\t/**\n\t * Runs a given hook until one returns a node\n\t * @param {string} name\n\t * @returns {?jsep.Expression}\n\t */\n\tsearchHook(name) {\n\t\tif (Jsep.hooks[name]) {\n\t\t\tconst env = { context: this };\n\t\t\tJsep.hooks[name].find(function (callback) {\n\t\t\t\tcallback.call(env.context, env);\n\t\t\t\treturn env.node;\n\t\t\t});\n\t\t\treturn env.node;\n\t\t}\n\t}\n\n\t/**\n\t * Push `index` up to the next non-space character\n\t */\n\tgobbleSpaces() {\n\t\tlet ch = this.code;\n\t\t// Whitespace\n\t\twhile (ch === Jsep.SPACE_CODE\n\t\t|| ch === Jsep.TAB_CODE\n\t\t|| ch === Jsep.LF_CODE\n\t\t|| ch === Jsep.CR_CODE) {\n\t\t\tch = this.expr.charCodeAt(++this.index);\n\t\t}\n\t\tthis.runHook('gobble-spaces');\n\t}\n\n\t/**\n\t * Top-level method to parse all expressions and returns compound or single node\n\t * @returns {jsep.Expression}\n\t */\n\tparse() {\n\t\tthis.runHook('before-all');\n\t\tconst nodes = this.gobbleExpressions();\n\n\t\t// If there's only one expression just try returning the expression\n\t\tconst node = nodes.length === 1\n\t\t ? nodes[0]\n\t\t\t: {\n\t\t\t\ttype: Jsep.COMPOUND,\n\t\t\t\tbody: nodes\n\t\t\t};\n\t\treturn this.runHook('after-all', node);\n\t}\n\n\t/**\n\t * top-level parser (but can be reused within as well)\n\t * @param {number} [untilICode]\n\t * @returns {jsep.Expression[]}\n\t */\n\tgobbleExpressions(untilICode) {\n\t\tlet nodes = [], ch_i, node;\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tch_i = this.code;\n\n\t\t\t// Expressions can be separated by semicolons, commas, or just inferred without any\n\t\t\t// separators\n\t\t\tif (ch_i === Jsep.SEMCOL_CODE || ch_i === Jsep.COMMA_CODE) {\n\t\t\t\tthis.index++; // ignore separators\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Try to gobble each expression individually\n\t\t\t\tif (node = this.gobbleExpression()) {\n\t\t\t\t\tnodes.push(node);\n\t\t\t\t\t// If we weren't able to find a binary expression and are out of room, then\n\t\t\t\t\t// the expression passed in probably has too much\n\t\t\t\t}\n\t\t\t\telse if (this.index < this.expr.length) {\n\t\t\t\t\tif (ch_i === untilICode) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tthis.throwError('Unexpected \"' + this.char + '\"');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn nodes;\n\t}\n\n\t/**\n\t * The main parsing function.\n\t * @returns {?jsep.Expression}\n\t */\n\tgobbleExpression() {\n\t\tconst node = this.searchHook('gobble-expression') || this.gobbleBinaryExpression();\n\t\tthis.gobbleSpaces();\n\n\t\treturn this.runHook('after-expression', node);\n\t}\n\n\t/**\n\t * Search for the operation portion of the string (e.g. `+`, `===`)\n\t * Start by taking the longest possible binary operations (3 characters: `===`, `!==`, `>>>`)\n\t * and move down from 3 to 2 to 1 character until a matching binary operation is found\n\t * then, return that binary operation\n\t * @returns {string|boolean}\n\t */\n\tgobbleBinaryOp() {\n\t\tthis.gobbleSpaces();\n\t\tlet to_check = this.expr.substr(this.index, Jsep.max_binop_len);\n\t\tlet tc_len = to_check.length;\n\n\t\twhile (tc_len > 0) {\n\t\t\t// Don't accept a binary op when it is an identifier.\n\t\t\t// Binary ops that start with a identifier-valid character must be followed\n\t\t\t// by a non identifier-part valid character\n\t\t\tif (Jsep.binary_ops.hasOwnProperty(to_check) && (\n\t\t\t\t!Jsep.isIdentifierStart(this.code) ||\n\t\t\t\t(this.index + to_check.length < this.expr.length && !Jsep.isIdentifierPart(this.expr.charCodeAt(this.index + to_check.length)))\n\t\t\t)) {\n\t\t\t\tthis.index += tc_len;\n\t\t\t\treturn to_check;\n\t\t\t}\n\t\t\tto_check = to_check.substr(0, --tc_len);\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * This function is responsible for gobbling an individual expression,\n\t * e.g. `1`, `1+2`, `a+(b*2)-Math.sqrt(2)`\n\t * @returns {?jsep.BinaryExpression}\n\t */\n\tgobbleBinaryExpression() {\n\t\tlet node, biop, prec, stack, biop_info, left, right, i, cur_biop;\n\n\t\t// First, try to get the leftmost thing\n\t\t// Then, check to see if there's a binary operator operating on that leftmost thing\n\t\t// Don't gobbleBinaryOp without a left-hand-side\n\t\tleft = this.gobbleToken();\n\t\tif (!left) {\n\t\t\treturn left;\n\t\t}\n\t\tbiop = this.gobbleBinaryOp();\n\n\t\t// If there wasn't a binary operator, just return the leftmost node\n\t\tif (!biop) {\n\t\t\treturn left;\n\t\t}\n\n\t\t// Otherwise, we need to start a stack to properly place the binary operations in their\n\t\t// precedence structure\n\t\tbiop_info = { value: biop, prec: Jsep.binaryPrecedence(biop), right_a: Jsep.right_associative.has(biop) };\n\n\t\tright = this.gobbleToken();\n\n\t\tif (!right) {\n\t\t\tthis.throwError(\"Expected expression after \" + biop);\n\t\t}\n\n\t\tstack = [left, biop_info, right];\n\n\t\t// Properly deal with precedence using [recursive descent](http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm)\n\t\twhile ((biop = this.gobbleBinaryOp())) {\n\t\t\tprec = Jsep.binaryPrecedence(biop);\n\n\t\t\tif (prec === 0) {\n\t\t\t\tthis.index -= biop.length;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tbiop_info = { value: biop, prec, right_a: Jsep.right_associative.has(biop) };\n\n\t\t\tcur_biop = biop;\n\n\t\t\t// Reduce: make a binary expression from the three topmost entries.\n\t\t\tconst comparePrev = prev => biop_info.right_a && prev.right_a\n\t\t\t\t? prec > prev.prec\n\t\t\t\t: prec <= prev.prec;\n\t\t\twhile ((stack.length > 2) && comparePrev(stack[stack.length - 2])) {\n\t\t\t\tright = stack.pop();\n\t\t\t\tbiop = stack.pop().value;\n\t\t\t\tleft = stack.pop();\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.BINARY_EXP,\n\t\t\t\t\toperator: biop,\n\t\t\t\t\tleft,\n\t\t\t\t\tright\n\t\t\t\t};\n\t\t\t\tstack.push(node);\n\t\t\t}\n\n\t\t\tnode = this.gobbleToken();\n\n\t\t\tif (!node) {\n\t\t\t\tthis.throwError(\"Expected expression after \" + cur_biop);\n\t\t\t}\n\n\t\t\tstack.push(biop_info, node);\n\t\t}\n\n\t\ti = stack.length - 1;\n\t\tnode = stack[i];\n\n\t\twhile (i > 1) {\n\t\t\tnode = {\n\t\t\t\ttype: Jsep.BINARY_EXP,\n\t\t\t\toperator: stack[i - 1].value,\n\t\t\t\tleft: stack[i - 2],\n\t\t\t\tright: node\n\t\t\t};\n\t\t\ti -= 2;\n\t\t}\n\n\t\treturn node;\n\t}\n\n\t/**\n\t * An individual part of a binary expression:\n\t * e.g. `foo.bar(baz)`, `1`, `\"abc\"`, `(a % 2)` (because it's in parenthesis)\n\t * @returns {boolean|jsep.Expression}\n\t */\n\tgobbleToken() {\n\t\tlet ch, to_check, tc_len, node;\n\n\t\tthis.gobbleSpaces();\n\t\tnode = this.searchHook('gobble-token');\n\t\tif (node) {\n\t\t\treturn this.runHook('after-token', node);\n\t\t}\n\n\t\tch = this.code;\n\n\t\tif (Jsep.isDecimalDigit(ch) || ch === Jsep.PERIOD_CODE) {\n\t\t\t// Char code 46 is a dot `.` which can start off a numeric literal\n\t\t\treturn this.gobbleNumericLiteral();\n\t\t}\n\n\t\tif (ch === Jsep.SQUOTE_CODE || ch === Jsep.DQUOTE_CODE) {\n\t\t\t// Single or double quotes\n\t\t\tnode = this.gobbleStringLiteral();\n\t\t}\n\t\telse if (ch === Jsep.OBRACK_CODE) {\n\t\t\tnode = this.gobbleArray();\n\t\t}\n\t\telse {\n\t\t\tto_check = this.expr.substr(this.index, Jsep.max_unop_len);\n\t\t\ttc_len = to_check.length;\n\n\t\t\twhile (tc_len > 0) {\n\t\t\t\t// Don't accept an unary op when it is an identifier.\n\t\t\t\t// Unary ops that start with a identifier-valid character must be followed\n\t\t\t\t// by a non identifier-part valid character\n\t\t\t\tif (Jsep.unary_ops.hasOwnProperty(to_check) && (\n\t\t\t\t\t!Jsep.isIdentifierStart(this.code) ||\n\t\t\t\t\t(this.index + to_check.length < this.expr.length && !Jsep.isIdentifierPart(this.expr.charCodeAt(this.index + to_check.length)))\n\t\t\t\t)) {\n\t\t\t\t\tthis.index += tc_len;\n\t\t\t\t\tconst argument = this.gobbleToken();\n\t\t\t\t\tif (!argument) {\n\t\t\t\t\t\tthis.throwError('missing unaryOp argument');\n\t\t\t\t\t}\n\t\t\t\t\treturn this.runHook('after-token', {\n\t\t\t\t\t\ttype: Jsep.UNARY_EXP,\n\t\t\t\t\t\toperator: to_check,\n\t\t\t\t\t\targument,\n\t\t\t\t\t\tprefix: true\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tto_check = to_check.substr(0, --tc_len);\n\t\t\t}\n\n\t\t\tif (Jsep.isIdentifierStart(ch)) {\n\t\t\t\tnode = this.gobbleIdentifier();\n\t\t\t\tif (Jsep.literals.hasOwnProperty(node.name)) {\n\t\t\t\t\tnode = {\n\t\t\t\t\t\ttype: Jsep.LITERAL,\n\t\t\t\t\t\tvalue: Jsep.literals[node.name],\n\t\t\t\t\t\traw: node.name,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse if (node.name === Jsep.this_str) {\n\t\t\t\t\tnode = { type: Jsep.THIS_EXP };\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (ch === Jsep.OPAREN_CODE) { // open parenthesis\n\t\t\t\tnode = this.gobbleGroup();\n\t\t\t}\n\t\t}\n\n\t\tif (!node) {\n\t\t\treturn this.runHook('after-token', false);\n\t\t}\n\n\t\tnode = this.gobbleTokenProperty(node);\n\t\treturn this.runHook('after-token', node);\n\t}\n\n\t/**\n\t * Gobble properties of of identifiers/strings/arrays/groups.\n\t * e.g. `foo`, `bar.baz`, `foo['bar'].baz`\n\t * It also gobbles function calls:\n\t * e.g. `Math.acos(obj.angle)`\n\t * @param {jsep.Expression} node\n\t * @returns {jsep.Expression}\n\t */\n\tgobbleTokenProperty(node) {\n\t\tthis.gobbleSpaces();\n\n\t\tlet ch = this.code;\n\t\twhile (ch === Jsep.PERIOD_CODE || ch === Jsep.OBRACK_CODE || ch === Jsep.OPAREN_CODE || ch === Jsep.QUMARK_CODE) {\n\t\t\tlet optional;\n\t\t\tif (ch === Jsep.QUMARK_CODE) {\n\t\t\t\tif (this.expr.charCodeAt(this.index + 1) !== Jsep.PERIOD_CODE) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\toptional = true;\n\t\t\t\tthis.index += 2;\n\t\t\t\tthis.gobbleSpaces();\n\t\t\t\tch = this.code;\n\t\t\t}\n\t\t\tthis.index++;\n\n\t\t\tif (ch === Jsep.OBRACK_CODE) {\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.MEMBER_EXP,\n\t\t\t\t\tcomputed: true,\n\t\t\t\t\tobject: node,\n\t\t\t\t\tproperty: this.gobbleExpression()\n\t\t\t\t};\n\t\t\t\tif (!node.property) {\n\t\t\t\t\tthis.throwError('Unexpected \"' + this.char + '\"');\n\t\t\t\t}\n\t\t\t\tthis.gobbleSpaces();\n\t\t\t\tch = this.code;\n\t\t\t\tif (ch !== Jsep.CBRACK_CODE) {\n\t\t\t\t\tthis.throwError('Unclosed [');\n\t\t\t\t}\n\t\t\t\tthis.index++;\n\t\t\t}\n\t\t\telse if (ch === Jsep.OPAREN_CODE) {\n\t\t\t\t// A function call is being made; gobble all the arguments\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.CALL_EXP,\n\t\t\t\t\t'arguments': this.gobbleArguments(Jsep.CPAREN_CODE),\n\t\t\t\t\tcallee: node\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if (ch === Jsep.PERIOD_CODE || optional) {\n\t\t\t\tif (optional) {\n\t\t\t\t\tthis.index--;\n\t\t\t\t}\n\t\t\t\tthis.gobbleSpaces();\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.MEMBER_EXP,\n\t\t\t\t\tcomputed: false,\n\t\t\t\t\tobject: node,\n\t\t\t\t\tproperty: this.gobbleIdentifier(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (optional) {\n\t\t\t\tnode.optional = true;\n\t\t\t} // else leave undefined for compatibility with esprima\n\n\t\t\tthis.gobbleSpaces();\n\t\t\tch = this.code;\n\t\t}\n\n\t\treturn node;\n\t}\n\n\t/**\n\t * Parse simple numeric literals: `12`, `3.4`, `.5`. Do this by using a string to\n\t * keep track of everything in the numeric literal and then calling `parseFloat` on that string\n\t * @returns {jsep.Literal}\n\t */\n\tgobbleNumericLiteral() {\n\t\tlet number = '', ch, chCode;\n\n\t\twhile (Jsep.isDecimalDigit(this.code)) {\n\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t}\n\n\t\tif (this.code === Jsep.PERIOD_CODE) { // can start with a decimal marker\n\t\t\tnumber += this.expr.charAt(this.index++);\n\n\t\t\twhile (Jsep.isDecimalDigit(this.code)) {\n\t\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\t}\n\t\t}\n\n\t\tch = this.char;\n\n\t\tif (ch === 'e' || ch === 'E') { // exponent marker\n\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\tch = this.char;\n\n\t\t\tif (ch === '+' || ch === '-') { // exponent sign\n\t\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\t}\n\n\t\t\twhile (Jsep.isDecimalDigit(this.code)) { // exponent itself\n\t\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\t}\n\n\t\t\tif (!Jsep.isDecimalDigit(this.expr.charCodeAt(this.index - 1)) ) {\n\t\t\t\tthis.throwError('Expected exponent (' + number + this.char + ')');\n\t\t\t}\n\t\t}\n\n\t\tchCode = this.code;\n\n\t\t// Check to make sure this isn't a variable name that start with a number (123abc)\n\t\tif (Jsep.isIdentifierStart(chCode)) {\n\t\t\tthis.throwError('Variable names cannot start with a number (' +\n\t\t\t\tnumber + this.char + ')');\n\t\t}\n\t\telse if (chCode === Jsep.PERIOD_CODE || (number.length === 1 && number.charCodeAt(0) === Jsep.PERIOD_CODE)) {\n\t\t\tthis.throwError('Unexpected period');\n\t\t}\n\n\t\treturn {\n\t\t\ttype: Jsep.LITERAL,\n\t\t\tvalue: parseFloat(number),\n\t\t\traw: number\n\t\t};\n\t}\n\n\t/**\n\t * Parses a string literal, staring with single or double quotes with basic support for escape codes\n\t * e.g. `\"hello world\"`, `'this is\\nJSEP'`\n\t * @returns {jsep.Literal}\n\t */\n\tgobbleStringLiteral() {\n\t\tlet str = '';\n\t\tconst startIndex = this.index;\n\t\tconst quote = this.expr.charAt(this.index++);\n\t\tlet closed = false;\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tlet ch = this.expr.charAt(this.index++);\n\n\t\t\tif (ch === quote) {\n\t\t\t\tclosed = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse if (ch === '\\\\') {\n\t\t\t\t// Check for all of the common escape codes\n\t\t\t\tch = this.expr.charAt(this.index++);\n\n\t\t\t\tswitch (ch) {\n\t\t\t\t\tcase 'n': str += '\\n'; break;\n\t\t\t\t\tcase 'r': str += '\\r'; break;\n\t\t\t\t\tcase 't': str += '\\t'; break;\n\t\t\t\t\tcase 'b': str += '\\b'; break;\n\t\t\t\t\tcase 'f': str += '\\f'; break;\n\t\t\t\t\tcase 'v': str += '\\x0B'; break;\n\t\t\t\t\tdefault : str += ch;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstr += ch;\n\t\t\t}\n\t\t}\n\n\t\tif (!closed) {\n\t\t\tthis.throwError('Unclosed quote after \"' + str + '\"');\n\t\t}\n\n\t\treturn {\n\t\t\ttype: Jsep.LITERAL,\n\t\t\tvalue: str,\n\t\t\traw: this.expr.substring(startIndex, this.index),\n\t\t};\n\t}\n\n\t/**\n\t * Gobbles only identifiers\n\t * e.g.: `foo`, `_value`, `$x1`\n\t * Also, this function checks if that identifier is a literal:\n\t * (e.g. `true`, `false`, `null`) or `this`\n\t * @returns {jsep.Identifier}\n\t */\n\tgobbleIdentifier() {\n\t\tlet ch = this.code, start = this.index;\n\n\t\tif (Jsep.isIdentifierStart(ch)) {\n\t\t\tthis.index++;\n\t\t}\n\t\telse {\n\t\t\tthis.throwError('Unexpected ' + this.char);\n\t\t}\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tch = this.code;\n\n\t\t\tif (Jsep.isIdentifierPart(ch)) {\n\t\t\t\tthis.index++;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\ttype: Jsep.IDENTIFIER,\n\t\t\tname: this.expr.slice(start, this.index),\n\t\t};\n\t}\n\n\t/**\n\t * Gobbles a list of arguments within the context of a function call\n\t * or array literal. This function also assumes that the opening character\n\t * `(` or `[` has already been gobbled, and gobbles expressions and commas\n\t * until the terminator character `)` or `]` is encountered.\n\t * e.g. `foo(bar, baz)`, `my_func()`, or `[bar, baz]`\n\t * @param {number} termination\n\t * @returns {jsep.Expression[]}\n\t */\n\tgobbleArguments(termination) {\n\t\tconst args = [];\n\t\tlet closed = false;\n\t\tlet separator_count = 0;\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tthis.gobbleSpaces();\n\t\t\tlet ch_i = this.code;\n\n\t\t\tif (ch_i === termination) { // done parsing\n\t\t\t\tclosed = true;\n\t\t\t\tthis.index++;\n\n\t\t\t\tif (termination === Jsep.CPAREN_CODE && separator_count && separator_count >= args.length){\n\t\t\t\t\tthis.throwError('Unexpected token ' + String.fromCharCode(termination));\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse if (ch_i === Jsep.COMMA_CODE) { // between expressions\n\t\t\t\tthis.index++;\n\t\t\t\tseparator_count++;\n\n\t\t\t\tif (separator_count !== args.length) { // missing argument\n\t\t\t\t\tif (termination === Jsep.CPAREN_CODE) {\n\t\t\t\t\t\tthis.throwError('Unexpected token ,');\n\t\t\t\t\t}\n\t\t\t\t\telse if (termination === Jsep.CBRACK_CODE) {\n\t\t\t\t\t\tfor (let arg = args.length; arg < separator_count; arg++) {\n\t\t\t\t\t\t\targs.push(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (args.length !== separator_count && separator_count !== 0) {\n\t\t\t\t// NOTE: `&& separator_count !== 0` allows for either all commas, or all spaces as arguments\n\t\t\t\tthis.throwError('Expected comma');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst node = this.gobbleExpression();\n\n\t\t\t\tif (!node || node.type === Jsep.COMPOUND) {\n\t\t\t\t\tthis.throwError('Expected comma');\n\t\t\t\t}\n\n\t\t\t\targs.push(node);\n\t\t\t}\n\t\t}\n\n\t\tif (!closed) {\n\t\t\tthis.throwError('Expected ' + String.fromCharCode(termination));\n\t\t}\n\n\t\treturn args;\n\t}\n\n\t/**\n\t * Responsible for parsing a group of things within parentheses `()`\n\t * that have no identifier in front (so not a function call)\n\t * This function assumes that it needs to gobble the opening parenthesis\n\t * and then tries to gobble everything within that parenthesis, assuming\n\t * that the next thing it should see is the close parenthesis. If not,\n\t * then the expression probably doesn't have a `)`\n\t * @returns {boolean|jsep.Expression}\n\t */\n\tgobbleGroup() {\n\t\tthis.index++;\n\t\tlet nodes = this.gobbleExpressions(Jsep.CPAREN_CODE);\n\t\tif (this.code === Jsep.CPAREN_CODE) {\n\t\t\tthis.index++;\n\t\t\tif (nodes.length === 1) {\n\t\t\t\treturn nodes[0];\n\t\t\t}\n\t\t\telse if (!nodes.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn {\n\t\t\t\t\ttype: Jsep.SEQUENCE_EXP,\n\t\t\t\t\texpressions: nodes,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.throwError('Unclosed (');\n\t\t}\n\t}\n\n\t/**\n\t * Responsible for parsing Array literals `[1, 2, 3]`\n\t * This function assumes that it needs to gobble the opening bracket\n\t * and then tries to gobble the expressions as arguments.\n\t * @returns {jsep.ArrayExpression}\n\t */\n\tgobbleArray() {\n\t\tthis.index++;\n\n\t\treturn {\n\t\t\ttype: Jsep.ARRAY_EXP,\n\t\t\telements: this.gobbleArguments(Jsep.CBRACK_CODE)\n\t\t};\n\t}\n}\n\n// Static fields:\nconst hooks = new Hooks();\nObject.assign(Jsep, {\n\thooks,\n\tplugins: new Plugins(Jsep),\n\n\t// Node Types\n\t// ----------\n\t// This is the full set of types that any JSEP node can be.\n\t// Store them here to save space when minified\n\tCOMPOUND: 'Compound',\n\tSEQUENCE_EXP: 'SequenceExpression',\n\tIDENTIFIER: 'Identifier',\n\tMEMBER_EXP: 'MemberExpression',\n\tLITERAL: 'Literal',\n\tTHIS_EXP: 'ThisExpression',\n\tCALL_EXP: 'CallExpression',\n\tUNARY_EXP: 'UnaryExpression',\n\tBINARY_EXP: 'BinaryExpression',\n\tARRAY_EXP: 'ArrayExpression',\n\n\tTAB_CODE: 9,\n\tLF_CODE: 10,\n\tCR_CODE: 13,\n\tSPACE_CODE: 32,\n\tPERIOD_CODE: 46, // '.'\n\tCOMMA_CODE: 44, // ','\n\tSQUOTE_CODE: 39, // single quote\n\tDQUOTE_CODE: 34, // double quotes\n\tOPAREN_CODE: 40, // (\n\tCPAREN_CODE: 41, // )\n\tOBRACK_CODE: 91, // [\n\tCBRACK_CODE: 93, // ]\n\tQUMARK_CODE: 63, // ?\n\tSEMCOL_CODE: 59, // ;\n\tCOLON_CODE: 58, // :\n\n\n\t// Operations\n\t// ----------\n\t// Use a quickly-accessible map to store all of the unary operators\n\t// Values are set to `1` (it really doesn't matter)\n\tunary_ops: {\n\t\t'-': 1,\n\t\t'!': 1,\n\t\t'~': 1,\n\t\t'+': 1\n\t},\n\n\t// Also use a map for the binary operations but set their values to their\n\t// binary precedence for quick reference (higher number = higher precedence)\n\t// see [Order of operations](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)\n\tbinary_ops: {\n\t\t'||': 1, '??': 1,\n\t\t'&&': 2, '|': 3, '^': 4, '&': 5,\n\t\t'==': 6, '!=': 6, '===': 6, '!==': 6,\n\t\t'<': 7, '>': 7, '<=': 7, '>=': 7,\n\t\t'<<': 8, '>>': 8, '>>>': 8,\n\t\t'+': 9, '-': 9,\n\t\t'*': 10, '/': 10, '%': 10,\n\t\t'**': 11,\n\t},\n\n\t// sets specific binary_ops as right-associative\n\tright_associative: new Set(['**']),\n\n\t// Additional valid identifier chars, apart from a-z, A-Z and 0-9 (except on the starting char)\n\tadditional_identifier_chars: new Set(['$', '_']),\n\n\t// Literals\n\t// ----------\n\t// Store the values to return for the various literals we may encounter\n\tliterals: {\n\t\t'true': true,\n\t\t'false': false,\n\t\t'null': null\n\t},\n\n\t// Except for `this`, which is special. This could be changed to something like `'self'` as well\n\tthis_str: 'this',\n});\nJsep.max_unop_len = Jsep.getMaxKeyLen(Jsep.unary_ops);\nJsep.max_binop_len = Jsep.getMaxKeyLen(Jsep.binary_ops);\n\n// Backward Compatibility:\nconst jsep = expr => (new Jsep(expr)).parse();\nconst stdClassProps = Object.getOwnPropertyNames(class Test{});\nObject.getOwnPropertyNames(Jsep)\n\t.filter(prop => !stdClassProps.includes(prop) && jsep[prop] === undefined)\n\t.forEach((m) => {\n\t\tjsep[m] = Jsep[m];\n\t});\njsep.Jsep = Jsep; // allows for const { Jsep } = require('jsep');\n\nconst CONDITIONAL_EXP = 'ConditionalExpression';\n\nvar ternary = {\n\tname: 'ternary',\n\n\tinit(jsep) {\n\t\t// Ternary expression: test ? consequent : alternate\n\t\tjsep.hooks.add('after-expression', function gobbleTernary(env) {\n\t\t\tif (env.node && this.code === jsep.QUMARK_CODE) {\n\t\t\t\tthis.index++;\n\t\t\t\tconst test = env.node;\n\t\t\t\tconst consequent = this.gobbleExpression();\n\n\t\t\t\tif (!consequent) {\n\t\t\t\t\tthis.throwError('Expected expression');\n\t\t\t\t}\n\n\t\t\t\tthis.gobbleSpaces();\n\n\t\t\t\tif (this.code === jsep.COLON_CODE) {\n\t\t\t\t\tthis.index++;\n\t\t\t\t\tconst alternate = this.gobbleExpression();\n\n\t\t\t\t\tif (!alternate) {\n\t\t\t\t\t\tthis.throwError('Expected expression');\n\t\t\t\t\t}\n\t\t\t\t\tenv.node = {\n\t\t\t\t\t\ttype: CONDITIONAL_EXP,\n\t\t\t\t\t\ttest,\n\t\t\t\t\t\tconsequent,\n\t\t\t\t\t\talternate,\n\t\t\t\t\t};\n\n\t\t\t\t\t// check for operators of higher priority than ternary (i.e. assignment)\n\t\t\t\t\t// jsep sets || at 1, and assignment at 0.9, and conditional should be between them\n\t\t\t\t\tif (test.operator && jsep.binary_ops[test.operator] <= 0.9) {\n\t\t\t\t\t\tlet newTest = test;\n\t\t\t\t\t\twhile (newTest.right.operator && jsep.binary_ops[newTest.right.operator] <= 0.9) {\n\t\t\t\t\t\t\tnewTest = newTest.right;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tenv.node.test = newTest.right;\n\t\t\t\t\t\tnewTest.right = env.node;\n\t\t\t\t\t\tenv.node = test;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.throwError('Expected :');\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n};\n\n// Add default plugins:\n\njsep.plugins.register(ternary);\n\nexport { Jsep, jsep as default };\n","/**\n * 表达式解析器模块\n * @remarks\n * 提供Excel风格的表达式解析功能,支持自定义运算符和函数\n * 支持单元格引用、范围选择和公式计算\n */\nimport jsep from 'jsep';\nimport {Cell, CellType, FormatType} from '../types';\nimport {formatCellValue} from './render';\n\n// @ts-ignore\njsep.addBinaryOp('=', 0, (left, right) => {\n return left === right;\n});\n// @ts-ignore\njsep.addBinaryOp('<>', 0, (left, right) => {\n return left !== right;\n});\n// @ts-ignore\njsep.addBinaryOp('>', 0, (left, right) => {\n return left > right;\n});\n// @ts-ignore\njsep.addBinaryOp('<', 0, (left, right) => {\n return left < right;\n});\n// @ts-ignore\njsep.addBinaryOp('>=', 0, (left, right) => {\n return left >= right;\n});\n// @ts-ignore\njsep.addBinaryOp('<=', 0, (left, right) => {\n return left <= right;\n});\n\nlet innerConfig: Record<string, Cell[]> = {};\nlet needComputedCell = new Map<string, Cell>();\n\nfunction changeConfig(config: Cell[][]) {\n config.flat().forEach((cell) => {\n let key = `${cell.row}:${cell.col}`;\n if (cell.type === CellType.FUN) {\n needComputedCell.set(key, cell);\n }\n if (cell.colSpan !== 0 && cell.rowSpan !== 0) {\n if (cell.type === CellType.FIELD && cell.format === FormatType.STRING && cell.fun && (cell.colData || cell.rowData)) {\n let data = {\n ...cell.colData,\n ...cell.rowData,\n };\n cell.text = cell.fun.replace(/\\$\\{([a-zA-Z0-9\\_\\-]+)\\}/g, (match, key) => {\n key = key.toUpperCase();\n return data[key] ?? match;\n });\n }\n if (cell.format) {\n cell.text = formatCellValue(cell.text || '', cell.format, cell.formatType);\n }\n if (cell.customRender) {\n let data = {\n ...cell.colData,\n ...cell.rowData,\n };\n const fun = (function () {\n return eval(\n `async (cell,data) => {\n ${cell.customRender}\n }`\n );\n })();\n cell = fun.call(this, cell, data);\n }\n }\n if (!innerConfig[key]) {\n innerConfig[key] = [cell];\n } else {\n innerConfig[key].push(cell);\n }\n });\n}\n\nexport function computeCell(config: Cell[][]) {\n changeConfig(config);\n Array.from(needComputedCell.values()).forEach((cell) => {\n if (cell.type === CellType.FUN && cell.fun) {\n const {isError, result} = parseExpression(cell.fun, true);\n if (!isError) {\n cell.text = result;\n cell.type = CellType.TEXT;\n }\n }\n });\n innerConfig = {};\n needComputedCell = new Map();\n}\n\n/**\n * 解析并执行表达式\n * @param expressionInput - 包含表达式的输入对象\n * @param outputDiv - 输出结果的DOM元素\n * @param parsedTreeOutput - 解析树输出的DOM元素\n */\nexport function parseExpression(\n expressionInput: string,\n needResult: boolean = false\n): {\n isError: boolean;\n result: any;\n} {\n try {\n const expression = expressionInput.trim();\n\n if (!expression) {\n throw new Error('请输入一个表达式');\n }\n\n // 如果以等号开头,则去掉等号\n const cleanExpression = expression.startsWith('=') ? expression.slice(1) : expression;\n\n // 解析表达式\n const parsed = jsep(cleanExpression);\n let result: any = null;\n if (needResult) result = evaluateExpression(parsed);\n return {\n isError: false,\n result,\n };\n } catch (err) {\n console.error(err);\n return {\n isError: true,\n result: err.message,\n };\n }\n}\n\n/**\n * 评估表达式节点\n * @param node - 待评估的AST节点\n * @returns 计算结果\n */\nfunction evaluateExpression(node: any): any {\n if (!node) {\n throw new Error('空节点');\n }\n\n switch (node.type) {\n case 'Literal':\n if (typeof node.value === 'string') {\n const rangeMatch = node.value.match(/^(['\"]?)([A-Z]+\\d+):([A-Z]+\\d+)\\1$/i);\n if (rangeMatch) {\n return getRangeValues(rangeMatch[2], rangeMatch[3]); // 返回范围数组\n }\n }\n return node.value;\n\n case 'Identifier':\n // 检查是否是单元格引用\n if (/^[A-Z]+\\d+$/.test(node.name)) {\n return getCellValue(node.name);\n }\n throw new Error(`未定义的标识符: ${node.name}`);\n\n case 'BinaryExpression':\n const left = evaluateExpression(node.left);\n const right = evaluateExpression(node.right);\n\n switch (node.operator) {\n case '+':\n return left + right;\n case '-':\n return left - right;\n case '*':\n return left * right;\n case '/':\n return left / right;\n case '^':\n return Math.pow(left, right);\n case '=':\n return left === right ? 1 : 0;\n case '<>':\n return left !== right ? 1 : 0;\n case '>':\n return left > right ? 1 : 0;\n case '<':\n return left < right ? 1 : 0;\n case '>=':\n return left >= right ? 1 : 0;\n case '<=':\n return left <= right ? 1 : 0;\n default:\n throw new Error(`不支持的操作符: ${node.operator}`);\n }\n\n case 'CallExpression':\n return evaluateFunction(node.callee.name, node.arguments);\n\n case 'MemberExpression':\n // 处理范围引用如\"A1:B10\"\n if (node.computed && node.property && node.property.type === 'Literal') {\n const value = node.property.value;\n const rangeMatch = value.match(/^(['\"]?)([A-Z]+\\d+):([A-Z]+\\d+)\\1$/i);\n if (rangeMatch) {\n return getRangeValues(rangeMatch[2], rangeMatch[3]); // 传递起始和结束单元格\n }\n }\n\n // 处理普通单元格引用作为对象属性访问\n const objectVal = evaluateExpression(node.object);\n const propertyVal = node.computed ? evaluateExpression(node.property) : node.property.name;\n\n if (typeof objectVal === 'object' && objectVal !== null) {\n return objectVal[propertyVal];\n }\n\n throw new Error(`无法获取非对象值的属性: ${propertyVal}`);\n\n default:\n throw new Error(`不支持的节点类型: ${node.type}`);\n }\n}\n\n/**\n * 获取范围内的所有单元格值\n * @param startCell - 区域开始单元格\n * @param endCell - 区域结束单元格\n * @returns 扁平化的单元格值数组\n */\nfunction getRangeValues(startCell: string, endCell: string): any[] {\n let startCol = -1;\n const startABCMatch = startCell.match(/[A-Z]+/);\n if (startABCMatch) startCol = columnToNumber(startABCMatch[0]);\n let startRow = -1;\n const startNummatch = startCell.match(/\\d+/);\n if (startNummatch) startRow = parseInt(startNummatch[0]) - 1;\n let endCol = -1;\n const endABCMatch = endCell.match(/[A-Z]+/);\n if (endABCMatch) endCol = columnToNumber(endABCMatch[0]);\n let endRow = -1;\n const endNummatch = endCell.match(/\\d+/);\n if (endNummatch) endRow = parseInt(endNummatch[0]) - 1;\n\n const values: any[] = [];\n\n for (let row = startRow; row <= endRow; row++) {\n for (let col = startCol; col <= endCol; col++) {\n const cellRef = `${row}:${col}`;\n values.push(...getCellValue(cellRef));\n }\n }\n\n return values;\n}\n\n/**\n * 函数执行器\n * @param funcName - 函数名称\n * @param args - 函数参数列表\n * @returns 计算结果\n */\nfunction evaluateFunction(funcName: string, args: any[]): any {\n const evaluatedArgs = args.map((arg) => evaluateExpression(arg));\n\n switch (funcName.toUpperCase()) {\n case 'SUM':\n return evaluatedArgs.flat().reduce((sum, num) => {\n const val = parseFloat(num);\n return sum + (isNaN(val) ? 0 : val);\n }, 0);\n\n case 'AVERAGE':\n case 'AVG':\n const flatArgs = evaluatedArgs.flat();\n const numericArgs = flatArgs.filter((num) => !isNaN(parseFloat(num)));\n return numericArgs.length > 0 ? numericArgs.reduce((sum, num) => sum + parseFloat(num), 0) / numericArgs.length : 0;\n\n case 'IF':\n if (evaluatedArgs.length !== 3) {\n throw new Error(`IF函数需要3个参数,但提供了${evaluatedArgs.length}个`);\n }\n return Boolean(evaluatedArgs[0]) ? evaluatedArgs[1] : evaluatedArgs[2];\n\n case 'NOW':\n return new Date().toLocaleString();\n\n case 'TODAY':\n const today = new Date();\n return `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`;\n\n case 'MAX':\n return Math.max(\n ...evaluatedArgs\n .flat()\n .map(Number)\n .filter((n) => !isNaN(n))\n );\n\n case 'MIN':\n return Math.min(\n ...evaluatedArgs\n .flat()\n .map(Number)\n .filter((n) => !isNaN(n))\n );\n\n case 'COUNT':\n return evaluatedArgs.flat().length;\n\n case 'CONCATENATE':\n case 'TEXTJOIN':\n return evaluatedArgs.map(String).join('');\n\n default:\n throw new Error(`不支持的函数: ${funcName}`);\n }\n}\n\n/**\n * 获取单个单元格的值\n * @param cellRef - 单元格引用(如\"A1\")\n * @returns 单元格的值\n */\nfunction getCellValue(cellRef: string): any {\n try {\n return innerConfig[cellRef].map((item) => item.text);\n } catch (e) {\n console.warn(`无法解析单元格: ${cellRef}`, e);\n }\n return [];\n}\n\n/**\n * 将列字母转换为数字(如A->1, B->2, Z->26, AA->27)\n * @param col - 列字母\n * @returns 对应的数字\n */\nfunction columnToNumber(col: string): number {\n let num = 0;\n for (let i = 0; i < col.length; i++) {\n num = num * 26 + (col.charCodeAt(i) - 64) - 1;\n }\n return num;\n}\n\n/**\n * 将列数字转换为字母(如1->A, 27->AA)\n * @param num - 列数字\n * @returns 对应的列字母\n */\nfunction numberToColumn(num: number): string {\n let letters = '';\n while (num > 0) {\n num--;\n letters = String.fromCharCode(65 + (num % 26)) + letters;\n num = Math.floor(num / 26);\n }\n return letters;\n}\n","<template>\n <div\n class=\"yh-report-view-container\"\n :style=\"style\">\n <!-- v-if=\"hasParams\" -->\n <statement-conditions\n :config=\"props.config.params\"\n @change=\"changeParams\">\n <template #search>\n <el-button\n type=\"primary\"\n v-if=\"hasParams\"\n @click=\"searchHandler\">\n 搜索\n </el-button>\n <!-- <el-button\n text\n type=\"primary\"\n @click=\"exportHandler\">\n 导出\n </el-button> -->\n </template>\n </statement-conditions>\n <div\n v-loading=\"tableLoading\"\n class=\"yh-statement-table-container\"\n ref=\"statementTableRef\">\n <table ref=\"tableBodyRef\"></table>\n </div>\n <el-pagination\n v-if=\"isPagination\"\n v-model:pageSize=\"pagination.pageSize\"\n v-model:current-page=\"pagination.pageIndex\"\n :page-sizes=\"pagination.pageSizes\"\n :total=\"pagination.total\"\n layout=\"total, jumper, prev, pager, next, sizes\"></el-pagination>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport statementConditions from './report-conditions.vue';\nimport {ref, computed, onMounted, reactive, watch, render, shallowRef, nextTick} from 'vue';\nimport {CellType, FormatType, Head, StatementOption, Cell} from '../../types';\nimport {cloneDeep} from 'lodash-es';\nimport dayjs from 'dayjs';\nimport {SourceDataParam, dataParam, getDateSourceData} from '../../api/dataSource';\nimport {renderCellStyle, formatCellValue} from '../../libs/render';\nimport {getProcessData} from '../../libs/index';\nimport {computeCell} from '../../libs/jsep';\n\nconst props = defineProps<{\n config: StatementOption;\n index: number;\n}>();\n\nconst emits = defineEmits(['updateData']);\n\nconst statementTableRef = ref();\nconst tableBodyRef = ref<HTMLElement>();\n\nconst style = computed(() => {\n return {\n width: props.config.widthType === '%' ? `calc(${props.config.width}% - 10px)` : `${props.config.width - 10}px`,\n height: props.config.fullHeight ? 'calc(100% - 8px)' : `${props.config.height}px`,\n };\n});\n\n//#region 分页及筛选参数相关逻辑\nconst isPagination = computed(() => {\n if (props.config && props.config.data) {\n return !!props.config.data.pagination;\n } else {\n return false;\n }\n});\n\nconst hasParams = computed(() => {\n return props.config.params && Array.isArray(props.config.params) && props.config.params.length > 0;\n});\n\nconst pagination = reactive({\n pageSize: 100,\n pageSizes: [10, 20, 50, 100, 200, 10000],\n pageIndex: 1,\n total: 0,\n});\n\nconst params = ref<dataParam[]>([]);\n\nfunction changeParams(val) {\n params.value = val;\n pagination.pageIndex = 1;\n renderHandler();\n}\n\n/** 是否完成报表初次加载 */\nlet inited = false;\nwatch(\n () => [pagination.pageSize, pagination.pageIndex],\n (val, oldVal) => {\n if (val && oldVal) {\n let [newPageSize, newPageIndex] = val;\n let [oldPageSize, oldPageIndex] = val;\n if (newPageSize !== oldPageSize) {\n pagination.pageIndex = 1;\n }\n if (inited) {\n renderHandler();\n }\n }\n },\n {\n immediate: true,\n deep: true,\n }\n);\n\nfunction searchHandler() {\n pagination.pageIndex = 1;\n renderHandler();\n}\n// #endregion\n\nconst tableLoading = ref(false);\n\nfunction getLoopItem(config: Head[]) {\n let loopItem = config.reduce((acc, item) => {\n if (item.loop) {\n acc.push(item);\n }\n return acc;\n }, [] as Head[]);\n return loopItem;\n}\n\nfunction transpose(matrix) {\n const rows = matrix.length;\n const cols = matrix[0].length;\n const transposed: any[] = [];\n\n for (let j = 0; j < cols; j++) {\n transposed[j] = [];\n for (let i = 0; i < rows; i++) {\n transposed[j][i] = matrix[i][j];\n }\n }\n\n return transposed;\n}\n\nfunction getGroupMinChildrenLength(groupData, key, maxGroupIndex, hasRowColCombine, groupIndexs) {\n if (hasRowColCombine) {\n let index = groupIndexs.findIndex((item) => item === maxGroupIndex);\n maxGroupIndex = groupIndexs[index - 1];\n }\n let keyTree = groupData[key];\n let lastChildrenKey = `${maxGroupIndex}-${keyTree.join('-')}`;\n let minChildrenLength = Object.keys(groupData)\n .filter((key) => key.indexOf(lastChildrenKey) > -1)\n .map((key) => groupData[key])\n .reduce((acc, item) => {\n return acc + item.length;\n }, 0);\n\n return minChildrenLength;\n}\n\nfunction findMaxLessThan(arr, num) {\n const lessThanNum = arr.filter((n) => n < num);\n\n if (lessThanNum.length === 0) {\n return null;\n }\n\n return Math.max(...lessThanNum);\n}\n\nfunction loopGroupRows(row, loopRow, config, tableData) {\n loopRow.forEach((rowItem) => {\n let rowData = tableData[rowItem.data];\n let rowCells = config[rowItem.index];\n let groupIndexs: number[] = [];\n rowCells.forEach((cell, colIndex) => {\n if (cell.type === CellType.FIELD && cell.data && cell.isGroup) {\n groupIndexs.push(colIndex);\n }\n });\n\n let groupData = {};\n groupIndexs.forEach((gIndex, index) => {\n if (!groupData[gIndex]) {\n groupData[gIndex] = new Set();\n }\n let gCell = rowCells[gIndex];\n let key = gCell.data.replace('row:', '').toUpperCase();\n if (index === 0) {\n rowData.forEach((data) => {\n if (key) {\n let text = data[key];\n if (text) {\n const gIndexData = `${gIndex}-${text}`;\n if (!groupData[gIndexData]) {\n groupData[gIndexData] = [data];\n } else {\n groupData[gIndexData].push(data);\n }\n groupData[gIndex].add(text);\n groupData[text] = [text];\n }\n }\n });\n } else {\n let preGIndex = gIndex - 1;\n let preKeys = Array.from(groupData[preGIndex]) as string[];\n preKeys.forEach((preKey) => {\n const preGIndexData = `${preGIndex}-${preKey}`;\n let gDatas = groupData[preGIndexData];\n let newGDatas = gDatas\n .map((data) => {\n if (key) {\n let text = data[key];\n if (text) {\n let flag = false;\n const gIndexData = `${gIndex}-${preKey}-${text}`;\n const gIndexKey = `${preKey}-${text}`;\n if (!groupData[gIndexData]) {\n groupData[gIndexData] = [data];\n } else {\n groupData[gIndexData].push(data);\n }\n if (!groupData[gIndex].has(gIndexKey)) {\n flag = true;\n }\n groupData[gIndex].add(gIndexKey);\n groupData[gIndexKey] = groupData[preKey].concat([text]);\n if (flag) {\n return text;\n } else {\n return null;\n }\n }\n }\n })\n .filter((item) => !!item);\n groupData[preGIndexData] = newGDatas;\n });\n }\n });\n // }\n //#endregion\n\n //#region根据分组信息循环单元格和列配置\n let groupLen = 1;\n let maxGroupIndex = Math.max(...groupIndexs);\n const hasRowColCombine = rowCells.some((cell) => cell.isRowColCombine);\n if (groupIndexs.length > 0) {\n if (hasRowColCombine) {\n groupLen = groupData[maxGroupIndex].size;\n } else {\n groupLen = Array.from(groupData[maxGroupIndex]).reduce((acc, item) => {\n let data = groupData[`${maxGroupIndex}-${item}`];\n return acc + data.length;\n }, 0) as number;\n }\n } else {\n groupLen = rowData.length;\n }\n const newRowItem = {\n ...rowItem,\n loop: false,\n };\n const newRows = Array.from({length: groupLen}, () => cloneDeep(newRowItem));\n row.splice(rowItem.index, 1, ...newRows);\n const rowBaseCols = Array.from({length: rowCells.length}, () => [] as Cell[]);\n rowCells.forEach((cell, colIndex) => {\n let newCells = rowBaseCols[colIndex];\n if (groupIndexs.includes(colIndex)) {\n let keys = Array.from(groupData[cell.col]) as string[];\n keys.forEach((key, index) => {\n let childrenLen = hasRowColCombine && colIndex === maxGroupIndex ? 1 : getGroupMinChildrenLength(groupData, key, maxGroupIndex, hasRowColCombine, groupIndexs);\n let data = groupData[key];\n let text = data[groupData[key].length - 1];\n\n let newCell = {\n ...cell,\n text,\n rowSpan: childrenLen,\n rowData: data,\n };\n newCells.push(newCell);\n let fillCell = {\n ...cell,\n text,\n type: '',\n colSpan: 0,\n rowSpan: 0,\n };\n for (let i = 0; i < childrenLen - 1; i++) {\n newCells.push(fillCell);\n }\n });\n } else {\n if (cell.data) {\n let laskGroupKeys: string[] = groupData[maxGroupIndex] ? Array.from(groupData[maxGroupIndex]) : [];\n let dataKey = cell.data.replace('row:', '').toUpperCase();\n if (cell.isRowColCombine) {\n if (laskGroupKeys.length) {\n laskGroupKeys.forEach((groupKey, index) => {\n let datas = groupData[`${maxGroupIndex}-${groupKey}`];\n let kvs = cell.combineKeys.map((key, index) => {\n const val = cell.combineValues[index];\n return {\n key,\n val,\n };\n });\n const result = datas.filter((data) => {\n return kvs.every((kv) => {\n return data[kv.key] === kv.val;\n });\n });\n\n let newCell = {\n ...cell,\n };\n delete newCell.combineKeys;\n delete newCell.combineValues;\n delete newCell.isRowColCombine;\n\n if (result && result.length) {\n const res = result[0];\n newCell.text = res[dataKey];\n newCell.rowData = res;\n } else {\n newCell.text = '';\n newCell.rowData = {};\n }\n newCells.push(newCell);\n });\n } else {\n rowData.forEach((data) => {\n let kvs = cell.combineKeys.map((key, index) => {\n const val = cell.combineValues[index];\n return {\n key,\n val,\n };\n });\n\n let isMatch = kvs.every((kv) => {\n return data[kv.key] === kv.val;\n });\n let newCell = {\n ...cell,\n };\n delete newCell.combineKeys;\n delete newCell.combineValues;\n delete newCell.isRowColCombine;\n\n if (isMatch) {\n newCell.text = data[dataKey];\n newCell.rowData = data;\n } else {\n newCell.text = '';\n }\n newCells.push(newCell);\n });\n }\n } else {\n if (laskGroupKeys.length) {\n laskGroupKeys.forEach((groupKey, index) => {\n let datas = groupData[`${maxGroupIndex}-${groupKey}`];\n datas.forEach((data) => {\n let newCell = {\n ...cell,\n };\n delete newCell.combineKeys;\n delete newCell.combineValues;\n delete newCell.isRowColCombine;\n\n if (data[dataKey]) {\n newCell.text = data[dataKey];\n newCell.rowData = data;\n } else {\n newCell.text = '';\n }\n newCells.push(newCell);\n });\n });\n } else {\n rowData.forEach((data) => {\n let newCell = {\n ...cell,\n };\n delete newCell.combineKeys;\n delete newCell.combineValues;\n delete newCell.isRowColCombine;\n\n if (data[dataKey]) {\n newCell.text = data[dataKey];\n newCell.rowData = data;\n } else {\n newCell.text = '';\n }\n newCells.push(newCell);\n });\n }\n }\n } else {\n const newCell = {\n ...cell,\n rowData: rowData[0],\n };\n if (cell.rowSpan === 0 && cell.mergeTarget && cell.mergeTarget.length === 2) {\n let [mergeRow, mergeCol] = cell.mergeTarget;\n let targetCell = config\n .reduce((acc, item) => {\n return acc.concat(item);\n }, [])\n .filter((item) => {\n return item.row === mergeRow && item.col === mergeCol;\n })[0];\n if (targetCell) {\n targetCell.rowSpan += groupLen - 1;\n }\n } else {\n newCell.rowSpan += groupLen - 1;\n }\n const fillCell = {\n ...cell,\n type: '',\n colSpan: 0,\n rowSpan: 0,\n };\n delete newCell.isRowColCombine;\n let fillCells = Array.from({length: groupLen - 1}, () => cloneDeep(fillCell));\n newCells.push(newCell, ...fillCells);\n }\n }\n });\n const newConfig = transpose(rowBaseCols);\n config.splice(rowItem.index, 1, ...newConfig);\n //#endregion\n });\n}\n\nfunction loopGroupCols(col, loopCol, config, tableData) {\n loopCol.forEach((colItem) => {\n let colData = tableData[colItem.data];\n //#region 获取当前列的单元格\n let colCells: any = [];\n let groupIndexs: number[] = [];\n config.forEach((rowItems, rowIndex) => {\n let cell = rowItems[colItem.index];\n if (cell.type === CellType.FIELD && cell.data && cell.isGroup) {\n groupIndexs.push(rowIndex);\n }\n colCells.push(cell);\n });\n\n let groupData = {};\n groupIndexs.forEach((gIndex, index) => {\n if (!groupData[gIndex]) {\n groupData[gIndex] = new Set();\n }\n let gCell = colCells[gIndex];\n let key = gCell.data.replace('col:', '').toUpperCase();\n if (index === 0) {\n colData.forEach((data) => {\n if (key) {\n let text = data[key];\n if (text) {\n const gIndexData = `${gIndex}-${text}`;\n if (!groupData[gIndexData]) {\n groupData[gIndexData] = [data];\n } else {\n groupData[gIndexData].push(data);\n }\n groupData[gIndex].add(text);\n groupData[text] = [text];\n groupData[`${text}-data`] = [data];\n }\n }\n });\n } else {\n let preGIndex = groupIndexs[index - 1];\n let preKeys = Array.from(groupData[preGIndex]) as string[];\n preKeys.forEach((preKey) => {\n const preGIndexData = `${preGIndex}-${preKey}`;\n let gDatas = groupData[preGIndexData];\n let newGDatas = gDatas\n .map((data) => {\n if (key) {\n let text = data[key];\n if (text) {\n let flag = false;\n const gIndexData = `${gIndex}-${preKey}-${text}`;\n const gIndexKey = `${preKey}-${text}`;\n if (!groupData[gIndexData]) {\n groupData[gIndexData] = [data];\n } else {\n groupData[gIndexData].push(data);\n }\n if (!groupData[gIndexKey + '-data']) {\n groupData[gIndexKey + '-data'] = [data];\n } else {\n groupData[gIndexKey + '-data'].push(data);\n }\n if (!groupData[gIndex].has(gIndexKey)) {\n flag = true;\n }\n groupData[gIndex].add(gIndexKey);\n groupData[gIndexKey] = groupData[preKey].concat([text]);\n if (flag) {\n return text;\n } else {\n return null;\n }\n }\n }\n })\n .filter((item) => !!item);\n groupData[preGIndexData] = newGDatas;\n });\n }\n });\n //#endregion\n\n //#region 根据分组信息循环单元格和列配置\n let groupLen = 1;\n let maxGroupIndex = Math.max(...groupIndexs);\n let minGroupIndex = Math.min(...groupIndexs);\n const hasRowColCombine = colCells.some((cell) => cell.isRowColCombine);\n if (groupIndexs.length > 0) {\n if (hasRowColCombine) {\n groupLen = groupData[maxGroupIndex].size;\n } else {\n groupLen = Array.from(groupData[maxGroupIndex]).reduce((acc, item) => {\n let data = groupData[`${maxGroupIndex}-${item}`];\n return acc + data.length;\n }, 0) as number;\n }\n } else {\n groupLen = colData.length;\n }\n for (let rowIndex = 0; rowIndex < colCells.length; rowIndex++) {\n const cell = colCells[rowIndex];\n if (rowIndex === 0) {\n const newColItem = {\n ...colItem,\n loop: false,\n };\n const newCols = Array.from({length: groupLen}, () => cloneDeep(newColItem));\n col.splice(colItem.index, 1, ...newCols);\n }\n let rows = config[cell.row];\n if (rows && Array.isArray(rows)) {\n let newCells: Cell[] = [];\n if (groupIndexs.includes(rowIndex)) {\n let keys = Array.from(groupData[cell.row]) as string[];\n keys.forEach((key, index) => {\n let childrenLen = hasRowColCombine && rowIndex === maxGroupIndex ? 1 : getGroupMinChildrenLength(groupData, key, maxGroupIndex, hasRowColCombine, groupIndexs);\n let text = groupData[key][groupData[key].length - 1];\n\n let newCell = {\n ...cell,\n text,\n colSpan: childrenLen,\n colData: groupData[key + '-data'],\n };\n newCells.push(newCell);\n if (childrenLen > 1) {\n let fillCell = {\n ...cell,\n text,\n type: '',\n colSpan: 0,\n rowSpan: 0,\n };\n for (let i = 0; i < childrenLen - 1; i++) {\n newCells.push(fillCell);\n }\n }\n });\n rows.splice(cell.col, 1, ...newCells);\n } else {\n if (rowIndex > minGroupIndex && rowIndex < maxGroupIndex) {\n let parentIndex = findMaxLessThan(groupIndexs, rowIndex);\n if (parentIndex !== null) {\n let newRows = config[parentIndex].slice(colItem.index, colItem.index + groupLen);\n newRows = newRows.map((item) => {\n let colData = item.colData;\n if (Array.isArray(colData)) {\n colData = colData[0];\n }\n return {\n ...cell,\n colData,\n colSpan: item.colSpan,\n rowSpan: item.rowSpan,\n };\n });\n\n rows.splice(colItem.index, 1, ...newRows);\n continue;\n }\n }\n if (cell.data) {\n let laskGroupKeys: string[] = groupData[maxGroupIndex] ? Array.from(groupData[maxGroupIndex]) : [];\n let dataKey = cell.data.replace('col:', '').toUpperCase();\n if (cell.isRowColCombine) {\n let combineKeys = groupIndexs.map((index) => {\n let cell = colCells[index];\n return cell.data.replace('col:', '').toUpperCase();\n });\n let newCells: Cell[] = [];\n laskGroupKeys.forEach((key, index) => {\n let newCell = {\n ...cell,\n combineKeys,\n combineValues: groupData[key],\n };\n newCells.push(newCell);\n });\n rows.splice(cell.col, 1, ...newCells);\n } else {\n if (laskGroupKeys.length) {\n laskGroupKeys.forEach((groupKey, index) => {\n let datas = groupData[`${maxGroupIndex}-${groupKey}`];\n let newCells: Cell[] = [];\n datas.forEach((data) => {\n let newCell = {\n ...cell,\n };\n delete newCell.combineKeys;\n delete newCell.combineValues;\n delete newCell.isRowColCombine;\n\n if (data[dataKey]) {\n newCell.text = data[dataKey];\n newCell.colData = data;\n } else {\n newCell.text = '';\n }\n newCells.push(newCell);\n });\n rows.splice(cell.col, 1, ...newCells);\n });\n } else {\n let newCells: Cell[] = [];\n colData.forEach((data) => {\n let newCell = {\n ...cell,\n };\n delete newCell.combineKeys;\n delete newCell.combineValues;\n delete newCell.isRowColCombine;\n\n if (data[dataKey]) {\n newCell.text = data[dataKey];\n newCell.colData = data;\n } else {\n newCell.text = '';\n }\n newCells.push(newCell);\n });\n rows.splice(cell.col, 1, ...newCells);\n }\n }\n } else {\n const newCell = {\n ...cell,\n colData: colData[0],\n };\n if (cell.colSpan === 0 && cell.mergeTarget && cell.mergeTarget.length === 2 && cell.row === cell.mergeTarget[0]) {\n let [mergeRow, mergeCol] = cell.mergeTarget;\n\n let targetCell = config\n .reduce((acc, item) => {\n return acc.concat(item);\n }, [])\n .filter((item) => {\n return item.row === mergeRow && item.col === mergeCol;\n })[0];\n if (targetCell) {\n targetCell.colSpan += groupLen - 1;\n }\n } else if (!Array.isArray(cell.mergeTarget) || cell.mergeTarget.length !== 2) {\n newCell.colSpan = groupLen;\n }\n const fillCell = {\n ...cell,\n colSpan: 0,\n rowSpan: 0,\n };\n\n let fillCells = Array.from({length: groupLen - 1}, () => cloneDeep(fillCell));\n rows.splice(cell.col, 1, newCell, ...fillCells);\n }\n }\n }\n }\n //#endregion\n });\n}\nfunction renderReport(tableData) {\n if (props.config && tableBodyRef.value) {\n tableBodyRef.value.innerHTML = '';\n console.time('transformConfig');\n let {rowConfig, colConfig, config} = cloneDeep(props.config);\n let cells = {};\n let loopCols = getLoopItem(colConfig);\n let loopRows = getLoopItem(rowConfig);\n if (loopCols) {\n loopGroupCols(colConfig, loopCols, config, tableData);\n }\n if (loopRows) {\n loopGroupRows(rowConfig, loopRows, config, tableData);\n }\n computeCell(config);\n console.timeEnd('transformConfig');\n console.time('renderReportByDom');\n // config.forEach((item) => {\n // console.dir(item);\n // });\n renderReportByDom(rowConfig, colConfig, config, tableBodyRef);\n console.timeEnd('renderReportByDom');\n }\n}\n\n//#region DOM 渲染 相关函数\nfunction renderColgroup(cols) {\n const colgroup = document.createElement('colgroup');\n let widthCount = 0;\n cols.forEach((col) => {\n const colEl = document.createElement('col');\n widthCount += col.size;\n colEl.style.width = `${col.size}px`;\n colgroup.appendChild(colEl);\n });\n if (tableBodyRef.value) {\n tableBodyRef.value.style.width = `${widthCount}px`;\n }\n return colgroup;\n}\nfunction renderCell(row, cell) {\n const td = document.createElement('td');\n td.setAttribute('data-cell-config', `${cell.row}-${cell.col}`);\n td.setAttribute('rowspan', cell.rowSpan);\n td.setAttribute('colspan', cell.colSpan);\n let text = '';\n switch (cell.type) {\n case 'icon':\n td.innerHTML = `<i class=\"iconfont ${cell.data}\"></i>`;\n break;\n case 'image':\n td.innerHTML = `<img src=\"${cell.data}\" alt=\"\">`;\n break;\n default:\n text = cell.text !== undefined && cell.text !== null ? cell.text : '';\n break;\n }\n if ([CellType.TEXT, CellType.FIELD, CellType.ICON, CellType.FUN].includes(cell.type)) {\n if (cell.style) {\n td.setAttribute('style', renderCellStyle(cell.style));\n }\n }\n td.innerText = text;\n return td;\n}\nfunction renderReportByDom(rowConfig, colConfig, config, tableBodyRef) {\n const colgroup = renderColgroup(colConfig);\n tableBodyRef.value.appendChild(colgroup);\n let fixedHeight = 0;\n\n const fragment = document.createDocumentFragment();\n for (let rowIndex = 0; rowIndex < rowConfig.length; rowIndex++) {\n const rowItem = rowConfig[rowIndex];\n const tr = document.createElement('tr');\n if (rowItem.isFixed) {\n tr.style.top = `${fixedHeight - 1}px`;\n tr.classList.add('fixed-row');\n }\n fixedHeight += rowItem.size;\n tr.style.height = `${rowItem.size}px`;\n for (let colIndex = 0; colIndex < colConfig.length; colIndex++) {\n const cell = config[rowIndex][colIndex];\n if (rowItem && cell) {\n const td = renderCell(rowItem, cell);\n td.setAttribute('data-cell-data', `${rowIndex}-${colIndex}`);\n if (cell.rowSpan === 0 || cell.colSpan === 0) {\n } else {\n tr.appendChild(td);\n }\n }\n }\n fragment.appendChild(tr);\n }\n tableBodyRef.value.appendChild(fragment);\n}\n//#endregion\n\nasync function renderHandler() {\n tableLoading.value = true;\n let remoteData = await getRemoteData();\n let rawData = toUpdateData(remoteData);\n if (props.config.data.processData) {\n rawData = await getProcessData(props.config.data.processData, rawData, params.value);\n }\n renderReport(rawData);\n tableLoading.value = false;\n}\n\nfunction toUpdateData(remoteData) {\n let rData = {};\n if (!Array.isArray(remoteData)) {\n remoteData = [remoteData];\n }\n remoteData.map(({key, data}) => {\n let d = data.filter((item) => item);\n rData[key] = d;\n });\n emits('updateData', {\n key: props.config.id,\n data: rData,\n });\n return rData;\n}\nasync function getRemoteData() {\n if (props.config.data.source) {\n let reqData: SourceDataParam = {};\n if (hasParams.value) {\n reqData.params = cloneDeep(params.value);\n }\n if (isPagination.value) {\n reqData.pageSize = pagination.pageSize;\n reqData.pageNumber = pagination.pageIndex;\n }\n let resData: any[] = [];\n for (let i = 0; i < props.config.data.source.length; i++) {\n const {key, url} = props.config.data.source[i];\n if (url) {\n const res = await getDateSourceData(url, reqData);\n resData.push({key, data: res.data});\n if (isPagination.value) {\n pagination.total = res.count || res.data.length;\n }\n }\n }\n return resData;\n } else {\n return [];\n }\n}\n\nasync function initHandler() {\n if (props.config.data.pagination) {\n if (props.config.data.pageSize !== undefined) {\n pagination.pageSize = !isNaN(props.config.data.pageSize) ? props.config.data.pageSize : 10;\n }\n if (props.config.data.pageSizes !== undefined) {\n let pageSizes = props.config.data.pageSizes.split(',').map((item) => parseInt(item));\n pagination.pageSizes = Array.isArray(pageSizes) ? pageSizes : [10, 20, 50, 100, 200];\n }\n }\n inited = true;\n}\n\nonMounted(async () => {\n initHandler();\n});\n</script>\n","import {cloneDeep} from 'lodash-es';\nimport {getDateSourceData} from './dataSource';\nimport {setXAxisData, setYAxisData} from '../libs/chartReportDefaultOption';\n\nexport const chartsOption = {\n line: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Line',\n },\n tooltip: {\n trigger: 'axis',\n },\n legend: {\n top: '8%',\n },\n grid: {\n left: '3%',\n right: '9%',\n top: '20%',\n bottom: '3%',\n containLabel: true,\n },\n xAxis: {\n name: '天',\n type: 'category',\n boundaryGap: false,\n data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],\n },\n yAxis: {\n name: '值',\n type: 'value',\n },\n dataZoom: [\n {\n type: 'inside',\n start: 0,\n end: 100,\n },\n ],\n series: [\n {\n name: 'Email',\n type: 'line',\n stack: 'Total',\n data: [120, 132, 101, 134, 90, 230, 210],\n },\n {\n name: 'Union',\n type: 'line',\n stack: 'Total',\n data: [220, 182, 191, 234, 290, 330, 310],\n },\n {\n name: 'Video',\n type: 'line',\n stack: 'Total',\n data: [150, 232, 201, 154, 190, 330, 410],\n },\n ],\n },\n rowBar: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Bar',\n },\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'shadow',\n },\n },\n legend: {\n top: '8%',\n },\n grid: {\n left: '3%',\n right: '9%',\n top: '20%',\n bottom: '3%',\n containLabel: true,\n },\n yAxis: {\n name: '天',\n type: 'category',\n axisTick: {\n alignWithLabel: true,\n },\n data: ['2012', '2013', '2014', '2015', '2016'],\n },\n xAxis: {\n name: '值',\n type: 'value',\n },\n dataZoom: [\n {\n type: 'inside',\n start: 0,\n end: 100,\n },\n ],\n series: [\n {\n name: 'Forest',\n type: 'bar',\n barGap: 0,\n emphasis: {\n focus: 'series',\n },\n data: [320, 332, 301, 334, 390],\n },\n {\n name: 'Steppe',\n type: 'bar',\n emphasis: {\n focus: 'series',\n },\n data: [220, 182, 191, 234, 290],\n },\n {\n name: 'Desert',\n type: 'bar',\n emphasis: {\n focus: 'series',\n },\n data: [150, 232, 201, 154, 190],\n },\n ],\n },\n bar: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Bar',\n },\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'shadow',\n },\n },\n legend: {\n top: '8%',\n },\n grid: {\n left: '3%',\n right: '9%',\n top: '20%',\n bottom: '3%',\n containLabel: true,\n },\n xAxis: {\n name: '天',\n type: 'category',\n axisTick: {\n alignWithLabel: true,\n },\n data: ['2012', '2013', '2014', '2015', '2016'],\n },\n yAxis: {\n name: '值',\n type: 'value',\n },\n dataZoom: [\n {\n type: 'inside',\n start: 0,\n end: 100,\n },\n ],\n series: [\n {\n name: 'Forest',\n type: 'bar',\n barGap: 0,\n emphasis: {\n focus: 'series',\n },\n data: [320, 332, 301, 334, 390],\n },\n {\n name: 'Steppe',\n type: 'bar',\n emphasis: {\n focus: 'series',\n },\n data: [220, 182, 191, 234, 290],\n },\n {\n name: 'Desert',\n type: 'bar',\n emphasis: {\n focus: 'series',\n },\n data: [150, 232, 201, 154, 190],\n },\n ],\n },\n pie: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Pie',\n },\n tooltip: {\n trigger: 'item',\n },\n legend: {\n top: '8%',\n },\n xAxis: {\n show: false,\n },\n yAxis: {\n show: false,\n },\n series: [\n {\n name: 'Access From',\n type: 'pie',\n radius: '50%',\n top: '10%',\n data: [\n {value: 1048, name: 'Search'},\n {value: 735, name: 'Direct'},\n {value: 580, name: 'Email'},\n {value: 484, name: 'Union'},\n {value: 300, name: 'Video'},\n ],\n labelLine: {\n show: true,\n },\n emphasis: {\n itemStyle: {\n shadowBlur: 10,\n shadowOffsetX: 0,\n shadowColor: 'rgba(0, 0, 0, 0.5)',\n },\n },\n },\n ],\n },\n scatter: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Scatter',\n },\n tooltip: {},\n legend: {\n top: '8%',\n data: ['1990', '2015'],\n },\n grid: {\n left: '5%',\n right: '5%',\n top: '20%',\n bottom: '3%',\n containLabel: true,\n },\n xAxis: {\n splitLine: {\n lineStyle: {\n type: 'dashed',\n },\n },\n },\n yAxis: {\n splitLine: {\n lineStyle: {\n type: 'dashed',\n },\n },\n scale: true,\n },\n dataZoom: [\n {\n type: 'inside',\n start: 0,\n end: 100,\n },\n ],\n series: [\n {\n name: '1990',\n data: [\n [1516, 68],\n [13670, 74.7],\n [28599, 75],\n [29476, 77.1],\n [31476, 75.4],\n [28666, 78.1],\n [1777, 57.7],\n [29550, 79.1],\n [2076, 67.9],\n [12087, 72],\n [24021, 75.4],\n [43296, 76.8],\n [10088, 70.8],\n [19349, 69.6],\n [10670, 67.3],\n [26424, 75.7],\n [37062, 75.4],\n ],\n type: 'scatter',\n symbolSize: 20,\n emphasis: {\n focus: 'series',\n label: {\n show: true,\n position: 'top',\n },\n },\n itemStyle: {\n shadowBlur: 10,\n shadowColor: 'rgba(0, 0, 0, 0.2)',\n shadowOffsetY: 5,\n },\n },\n {\n name: '2015',\n data: [\n [13334, 76.9],\n [21291, 78.5],\n [38923, 80.8],\n [37599, 81.9],\n [44053, 81.1],\n [42182, 82.8],\n [5903, 66.8],\n [36162, 83.5],\n [1390, 71.4],\n [34644, 80.7],\n [34186, 80.6],\n [64304, 81.6],\n [24787, 77.3],\n [23038, 73.13],\n [19360, 76.5],\n [38225, 81.4],\n [53354, 79.1],\n ],\n type: 'scatter',\n symbolSize: 20,\n emphasis: {\n focus: 'series',\n label: {\n show: true,\n position: 'top',\n },\n },\n itemStyle: {\n shadowBlur: 10,\n shadowColor: 'rgba(0, 0, 0, 0.2)',\n shadowOffsetY: 5,\n },\n },\n ],\n },\n radar: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Radar',\n },\n tooltip: {\n trigger: 'axis',\n },\n legend: {\n top: '8%',\n data: ['Budget', 'Spending'],\n },\n radar: {\n indicator: [{name: 'Sales'}, {name: 'Administration'}, {name: 'Technology'}, {name: 'Customer'}, {name: 'Development'}, {name: 'Marketing'}],\n radius: 80,\n },\n series: [\n {\n name: 'Radar',\n type: 'radar',\n tooltip: {\n trigger: 'item',\n },\n areaStyle: {},\n data: [\n {\n value: [4200, 3000, 20000, 35000, 50000, 18000],\n name: 'Budget',\n },\n {\n value: [5000, 14000, 28000, 26000, 42000, 21000],\n name: 'Spending',\n },\n ],\n },\n ],\n },\n};\n\nexport const chartsTypeList = ['line', 'rowBar', 'bar', 'scatter', 'treemap', 'label'];\n\nexport const getChartData = async (chartData, outData) => {\n const {\n data: {source},\n seriesData,\n xAisData,\n yAisData,\n type,\n } = chartData;\n let datas: any = {\n ...outData,\n };\n for (let i = 0; i < source.length; i++) {\n const {key, url} = source[i];\n const data = (await getDateSourceData(url, {})).data;\n datas[key] = data;\n }\n if (Object.keys(datas).length === 0) {\n return false;\n }\n if (seriesData) {\n const fun = new Function('allData', seriesData);\n const sData = fun(datas);\n chartData.option.series.forEach((item) => {\n item.data = sData;\n });\n } else {\n chartData.option = setYAxisData(chartData, datas);\n }\n if (chartsTypeList.includes(type)) {\n if (xAisData) {\n const fun = new Function('allData', xAisData);\n chartData.option.xAxis.data = fun(datas);\n } else {\n chartData.option = setXAxisData(chartData, datas);\n }\n if (yAisData) {\n const fun = new Function('allData', yAisData);\n const yData = fun(datas);\n chartData.option.yAxis.data = yData;\n }\n }\n};\n","<template>\n <div\n ref=\"chartRef\"\n v-loading=\"loading\"\n element-loading-text=\"正在加载数据......\"\n class=\"chart chart-common\"></div>\n</template>\n\n<script setup>\nimport {ref, computed, watch, onMounted, onUnmounted, nextTick, render} from 'vue';\nimport * as echarts from 'echarts';\nimport {getChartData} from '../../api/chartsOption';\nimport {cloneDeep} from 'lodash-es';\nimport {renderItem} from '../../libs/chartReportDefaultOption';\n\nconst props = defineProps({\n chartData: {\n type: Object,\n require: true,\n },\n isView: {\n type: Boolean,\n default: false,\n },\n});\n\nconst chartRef = ref();\nconst outData = ref(null);\nlet commonChart = null;\n\n// watch(\n// () => props.outData,\n// (val) => {\n// if (val && Object.keys(val) > 0) {\n// const chartData = cloneDeep(props.chartData);\n// insertDataToCfg(chartData);\n// }\n// },\n// {deep: true, immediate: true}\n// );\n\nwatch(\n () => props.chartData.option,\n (val) => {\n if (commonChart) {\n commonChart.setOption(val, {\n notMerge: true,\n });\n }\n },\n {deep: true}\n);\n\nwatch(\n () => props.chartData.isSuspend,\n (val) => {\n if (val) {\n resize();\n }\n },\n {deep: true}\n);\n\nconst loading = ref(false);\n\nconst setOutData = (data) => {\n outData.value = data;\n if (data && Object.keys(data).length > 0) {\n const chartData = cloneDeep(props.chartData);\n insertDataToCfg(chartData);\n }\n};\nconst insertDataToCfg = async (chartData) => {\n if (props.isView) {\n await getChartData(chartData, outData.value);\n }\n if (chartData.type === 'label') {\n chartData.option.series.forEach((item) => {\n item.renderItem = renderItem;\n });\n }\n commonChart.setOption(chartData.option);\n loading.value = false;\n};\nconst init = async () => {\n loading.value = true;\n commonChart = echarts.init(chartRef.value);\n let chartData = cloneDeep(props.chartData);\n await insertDataToCfg(chartData);\n};\n\nconst resize = () => {\n nextTick(() => {\n commonChart.resize();\n });\n};\n\ndefineExpose({\n setOutData,\n});\n\nonMounted(() => {\n init();\n window.addEventListener('resize', resize);\n});\nonUnmounted(() => {\n window.removeEventListener('resize', resize);\n});\n</script>\n\n<style lang=\"scss\" scoped>\n.chart-common {\n width: 100%;\n height: 100%;\n}\n</style>\n","<template>\n <div\n class=\"yh-report-view-container chart-view-item\"\n :style=\"suspendStyle\">\n <chart-item\n is-view\n ref=\"chartItemRef\"\n :chart-data=\"props.config\"></chart-item>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport {computed, watch, ref} from 'vue';\nimport {ChartOption} from '../../types';\nimport chartItem from './chart-item.vue';\n\nconst props = defineProps<{\n index: number;\n config: ChartOption;\n outData: any;\n}>();\n\nconst chartItemRef = ref();\n\nwatch(\n () => props.outData,\n (val) => {\n console.log('chart-view-item:', val);\n },\n {deep: true}\n);\n\nconst suspendStyle = computed(() => {\n let widthUnit = props.config.widthUnit || 'px';\n let heightUnit = props.config.heightUnit || 'px';\n if (props.config.isSuspend) {\n let style: any = {\n position: 'absolute',\n left: props.config.left + 'px',\n top: props.config.top + 'px',\n zIndex: 100,\n\n height: props.config.height + heightUnit,\n };\n if (widthUnit === '%') {\n style.width = `calc( ${props.config.width}${widthUnit} - 10px)`;\n } else {\n // @ts-ignore\n style.width = `${props.config.width - 10}${widthUnit}`;\n }\n\n return style;\n } else {\n let style: any = {\n height: props.config.height + heightUnit,\n };\n if (widthUnit === '%') {\n style.width = `calc( ${props.config.width}${widthUnit} - 10px)`;\n } else {\n // @ts-ignore\n style.width = `${props.config.width - 10}${widthUnit}`;\n }\n\n return style;\n }\n});\n\nconst setOutData = (outData) => {\n chartItemRef.value?.setOutData(outData);\n};\n\ndefineExpose({\n setOutData,\n});\n</script>\n<style lang=\"scss\"></style>\n","<template>\n <div class=\"yh-statement-table-title\">{{ statementName }}</div>\n <section\n class=\"yh-report-viewer-wrapper\"\n ref=\"viewWrapper\"\n v-loading=\"detailLoading\"\n v-if=\"!isError\">\n <template v-for=\"(config, index) in configs\">\n <report-view-item\n v-if=\"config.type === 'report'\"\n :index=\"index\"\n :config=\"config\"\n @update-data=\"handleUpdateData\"></report-view-item>\n <chart-view-item\n v-else\n :config=\"config\"\n ref=\"chartViewItemRef\"\n :index=\"index\"></chart-view-item>\n </template>\n <div\n class=\"back-top\"\n v-show=\"showBackTop\">\n <i class=\"iconfont icon-backtop\"></i>\n </div>\n </section>\n <el-empty\n v-else\n class=\"yh-statement-table-viewer-container\"\n description=\"获取配置时出现错误\">\n <el-button\n type=\"primary\"\n @click=\"$router.back()\">\n 返回\n </el-button>\n </el-empty>\n</template>\n<script setup lang=\"ts\">\nimport {onMounted, ref, reactive, watch} from 'vue';\nimport {ElButton, ElEmpty} from 'element-plus';\nimport {getConfig} from '../api/form';\nimport reportViewItem from './view-item/report-view-item.vue';\nimport chartViewItem from './view-item/chart-view-item.vue';\n\nconst props = withDefaults(\n defineProps<{\n id: string;\n }>(),\n {}\n);\n\nconst emits = defineEmits(['updateData']);\n\nconst statementScrollbar = ref();\nconst detailLoading = ref(false);\nconst isError = ref(false);\nconst statementName = ref('');\n\n/** 报表容器的Ref引用 */\nconst viewWrapper = ref<HTMLElement>();\nconst chartViewItemRef = ref();\n\nconst configs = ref<any[]>([]);\nconst outData = {};\n\nwatch(\n () => props.id,\n (id) => {\n getDetail(id);\n }\n);\n\nfunction getDetail(id) {\n if (id) {\n isError.value = false;\n detailLoading.value = true;\n getConfig(id)\n .then(async ({name, remoteOptions}) => {\n statementName.value = name;\n configs.value = remoteOptions;\n })\n .finally(() => {\n detailLoading.value = false;\n });\n } else {\n isError.value = true;\n }\n}\n\nconst showBackTop = ref(false);\n\nfunction backTop() {\n statementScrollbar.value.scrollTo(0, 0);\n}\n\nfunction scrollHandler({scrollTop}) {\n let offset = statementScrollbar.value.wrapRef.offsetHeight;\n let top = scrollTop;\n if (top > offset / 2) {\n showBackTop.value = true;\n } else {\n showBackTop.value = false;\n }\n}\n\nfunction handleUpdateData(data) {\n outData[data.key] = data.data;\n chartViewItemRef.value?.forEach((item) => {\n item.setOutData(outData);\n });\n}\n\nonMounted(() => {\n getDetail(props.id);\n});\n</script>\n<style lang=\"scss\">\n.yh-report-viewer-wrapper {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n align-content: flex-start;\n position: relative;\n overflow: auto;\n scrollbar-width: auto;\n scrollbar-color: auto;\n box-sizing: border-box;\n padding: 8px 8px 8px 0px;\n .yh-report-view-container {\n background-color: #fff;\n padding: 8px 8px;\n box-sizing: border-box;\n margin-left: 8px;\n margin-bottom: 8px;\n display: flex;\n flex-direction: column;\n &.chart-view-item {\n padding: 0;\n }\n .yh-report-conditions {\n position: relative;\n z-index: 100;\n display: flex;\n padding-bottom: 8px;\n .el-form {\n flex: 1;\n }\n .el-form-item {\n margin-bottom: 8px;\n }\n }\n .yh-statement-table-container {\n flex: 1;\n overflow: auto;\n position: relative;\n &::-webkit-scrollbar-track {\n background-color: var(--el-bg-color-page);\n }\n &::-webkit-scrollbar {\n width: 4px;\n }\n &::-webkit-scrollbar-thumb {\n border-radius: 0;\n }\n $tableBorder: 1px solid #ccc;\n table {\n table-layout: fixed;\n min-width: 100%;\n border-collapse: collapse;\n border-left: $tableBorder;\n border-top: $tableBorder;\n background-color: #f9f9f9;\n font-family: Arial, sans-serif;\n font-size: 14px;\n color: #333;\n\n tr {\n td {\n min-height: 40px;\n text-align: center;\n overflow: hidden;\n border-right: $tableBorder;\n border-bottom: $tableBorder;\n box-sizing: border-box;\n transition: background-color 0.3s;\n &.head-td {\n font-weight: 600;\n color: #fff;\n background-color: #666 !important;\n }\n }\n\n &:nth-child(even) td {\n background-color: #f1f1f1;\n }\n\n &:hover td:not(.head-td) {\n background-color: #e0e0e0;\n }\n &.fixed-row {\n position: sticky;\n z-index: 1;\n td {\n background-color: #f9f9f9;\n box-shadow: 0 0 1px 0 #ccc;\n }\n &:nth-child(even) td {\n background-color: #f1f1f1;\n }\n }\n }\n }\n }\n .el-pagination {\n padding-top: 8px;\n box-sizing: border-box;\n justify-content: flex-end;\n }\n }\n}\n</style>\n","import {Router} from 'vue-router';\nimport {Pinia} from 'pinia';\nimport {defineComponent, h} from 'vue';\nimport './statementDesign.scss';\nimport statementRun from './component/report-run.vue';\n\nexport default {\n install(\n app,\n config: {\n router: Router;\n pinia: Pinia;\n isAdmin?: boolean;\n }\n ) {\n let {router, pinia, isAdmin = false} = config;\n // 管理后台才添加报表管理的,要不然只提供预览的详情页\n if (isAdmin) {\n router.addRoute('Index', {\n path: 'statement/list',\n name: '报表列表',\n meta: {\n id: 'Statement',\n title: '报表列表',\n icon: 'iconfont icon-s-grid',\n },\n component: () => import('./StatementList.vue'),\n });\n router.addRoute('Index', {\n path: 'statement/design/:id',\n name: '报表设计',\n meta: {\n id: 'StatementDesign',\n title: '报表设计',\n icon: 'iconfont icon-s-grid',\n },\n component: () => import('./StatementDesign.vue'),\n });\n }\n router.addRoute('Index', {\n path: 'statement/detail/:id',\n name: '后台报表查看',\n meta: {\n id: 'StatementDetail',\n title: '后台报表查看',\n icon: 'iconfont icon-s-grid',\n },\n component: () => import('./StatementDetail.vue'),\n });\n router.addRoute({\n path: '/statementdetail/:id',\n name: '报表查看',\n meta: {\n id: 'StatementDetail',\n title: '报表查看',\n icon: 'iconfont icon-s-grid',\n },\n component: () => import('./StatementDetail.vue'),\n });\n },\n};\n\nlet dynamicReportIndex = 0;\nexport function dynamicReportView(name) {\n dynamicReportIndex++;\n return async () => {\n return Promise.resolve(\n defineComponent({\n name: name || `report${dynamicReportIndex}`,\n data() {\n return {\n id: '',\n };\n },\n activated() {\n document.querySelector('.main-container')?.classList.add('statement-design-main');\n },\n deactivated() {\n document.querySelector('.main-container')?.classList.add('statement-design-main');\n },\n render(e) {\n return h('section', {class: 'statement-detail-container'}, [h(statementRun, {id: this.id})]);\n },\n mounted() {\n this.id = this.$route.fullPath.replace('/innerStatementdetail/', '');\n },\n })\n );\n };\n}\n"],"names":["CellType","FormatType","DataSourceColumnDataType","DataSourceColumnDataType2","statement","completedStatement","_a","option","completedOption","_","index","rowLength","colLength","row","rowIndex","item","colIndex","rowIndexOffset","newRow","col","params","api","dataIndex","value","name","str","containerWidth","containerHeight","color","itemCount","spacing","rectHeight","rectWidth","borderRadius","xPos","yPos","selectedChart","sourceData","chartConfigForm","localData","xKey","data","dataSet","xData","yData","yKey","dataObj","el","xVal","yVal","a","b","id","key","val","serieCopy","i","serie","codes","type","listForm","res","info","code","description","config","chartConfig","remoteOptions","form","t","e","module","this","n","r","s","u","o","c","f","h","d","l","$","y","M","m","v","g","D","p","S","w","O","k","textArea","flag","dataType","dateType","componentName","placeholerPrefix","todayStart","todayEnd","thismonthStart","thismonthEnd","threemonthStart","threemonthEnd","thisYearStart","thisYearEnd","paramsConfig","props","config2pc","pc","param","selectorId","columnName","defaultValue","isNull","isDate","ElementType","paramValue","endParam","endParamValue","emits","valueChangeHandler","changeHandler","datasourceId","url","styleObj","styleAttr","numberDecimal","numberUseGrouping","rounded","parts","currencySymbol","integerPart","decimalPart","formatted","isPromille","scientificNotation","digits","date","dateObj","timestamp","numValue","formatType","formatOptions","require$$0","error","callback","first","env","jsep","plugins","plugin","op_name","precedence","isRightAssociative","char","literal_name","literal_value","expr","obj","ch","op_val","message","node","nodes","untilICode","ch_i","to_check","tc_len","biop","prec","stack","biop_info","left","right","cur_biop","comparePrev","prev","argument","optional","number","chCode","startIndex","quote","closed","start","termination","args","separator_count","arg","prop","test","consequent","alternate","newTest","match","cell","isError","result","expressionInput","needResult","expression","cleanExpression","parsed","err","rangeMatch","objectVal","propertyVal","startCell","endCell","startCol","startABCMatch","startRow","startNummatch","endCol","endABCMatch","endRow","endNummatch","values","cellRef","funcName","evaluatedArgs","sum","num","numericArgs","today","statementTableRef","tableBodyRef","style","isPagination","hasParams","pagination","changeParams","renderHandler","inited","oldVal","newPageSize","newPageIndex","oldPageSize","oldPageIndex","searchHandler","tableLoading","getLoopItem","acc","transpose","matrix","rows","cols","transposed","j","getGroupMinChildrenLength","groupData","maxGroupIndex","hasRowColCombine","groupIndexs","keyTree","lastChildrenKey","findMaxLessThan","arr","lessThanNum","loopGroupRows","loopRow","tableData","rowItem","rowData","rowCells","gIndex","text","gIndexData","preGIndex","preKey","preGIndexData","newGDatas","gIndexKey","groupLen","newRowItem","newRows","rowBaseCols","newCells","childrenLen","newCell","fillCell","laskGroupKeys","dataKey","groupKey","datas","kvs","kv","isMatch","mergeRow","mergeCol","targetCell","fillCells","newConfig","loopGroupCols","loopCol","colItem","colData","colCells","rowItems","minGroupIndex","newColItem","newCols","parentIndex","combineKeys","renderReport","rowConfig","colConfig","loopCols","loopRows","renderReportByDom","renderColgroup","colgroup","widthCount","colEl","renderCell","td","fixedHeight","fragment","tr","remoteData","getRemoteData","rawData","toUpdateData","rData","reqData","resData","initHandler","pageSizes","chartData","outData","source","seriesData","xAisData","yAisData","sData","fun","chartRef","commonChart","resize","loading","setOutData","insertDataToCfg","init","expose","chartItemRef","suspendStyle","widthUnit","heightUnit","detailLoading","statementName","viewWrapper","chartViewItemRef","configs","getDetail","showBackTop","handleUpdateData","app","router","pinia","isAdmin","statementRun"],"mappings":"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","x_google_ignoreList":[4,9,11]}