yh-report 1.2.21 → 2.0.1

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":"report-run.vue_vue_type_style_index_0_lang-edf7216b.mjs","sources":["../api/dataSource.ts","../api/chartsOption.ts","../component/view-item/chart-item.vue","../../../node_modules/dayjs/dayjs.min.js","../libs/render.ts","../component/view-item/report-conditions.vue","../../../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","../component/view-item/chart-view-item.vue","../component/report-run.vue"],"sourcesContent":["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 {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","!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}));","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","<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","!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 @click=\"searchHandler\">\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","<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"],"names":["datasourceId","res","url","data","_a","chartData","outData","source","seriesData","xAisData","yAisData","type","datas","i","key","sData","item","fun","yData","chartRef","commonChart","props","val","resize","loading","setOutData","insertDataToCfg","init","expose","t","e","module","this","n","r","s","u","a","o","c","f","h","d","l","$","y","m","v","g","D","p","S","_","w","O","b","M","k","styleObj","styleAttr","value","numberDecimal","numberUseGrouping","rounded","parts","currencySymbol","integerPart","decimalPart","formatted","isPromille","scientificNotation","digits","date","dateObj","timestamp","numValue","formatType","formatOptions","todayStart","todayEnd","thismonthStart","thismonthEnd","threemonthStart","threemonthEnd","thisYearStart","thisYearEnd","params","paramsConfig","config2pc","pc","param","dataType","dateType","selectorId","name","columnName","defaultValue","isNull","isDate","componentName","placeholerPrefix","ElementType","paramValue","endParam","endParamValue","emits","valueChangeHandler","index","changeHandler","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","str","startIndex","quote","closed","start","termination","args","separator_count","arg","prop","test","consequent","alternate","newTest","match","config","cell","isError","result","expressionInput","needResult","expression","cleanExpression","parsed","err","rangeMatch","objectVal","propertyVal","startCell","endCell","startCol","startABCMatch","startRow","startNummatch","endCol","endABCMatch","endRow","endNummatch","values","row","col","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","colIndex","gIndex","text","gIndexData","preGIndex","preKey","preGIndexData","newGDatas","flag","gIndexKey","groupLen","newRowItem","newRows","rowBaseCols","newCells","childrenLen","newCell","fillCell","laskGroupKeys","dataKey","groupKey","kvs","kv","isMatch","mergeRow","mergeCol","targetCell","fillCells","newConfig","loopGroupCols","loopCol","colItem","colData","colCells","rowItems","rowIndex","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","chartItemRef","suspendStyle","widthUnit","heightUnit","detailLoading","statementName","viewWrapper","chartViewItemRef","configs","id","getDetail","remoteOptions","showBackTop","handleUpdateData"],"mappings":"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","x_google_ignoreList":[3,6,8]}