@ecan-bi/tools 1.0.19 → 1.0.20

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/utils/runCode.ts","../src/hooks/useVariablesInText.ts","../src/utils/util.ts","../src/utils/constant.ts","../src/indicator.ts","../src/hooks/useTransformChartDataByAttrKey.ts","../src/hooks/useTransformChartDataByAttrValue.ts","../src/hooks/useValueFormatter.ts","../src/utils/transformProps.ts","../src/index.ts"],"sourcesContent":["import dayjs from 'dayjs'\nconst runCode = (code: string, data?: { [key:string]: any }) => {\n const useFn = {\n dayjs,\n ...data\n }\n let paramsStr = ''\n const params: any = []\n for (const key in useFn) {\n paramsStr += `${key},`\n params.push(useFn[key])\n }\n paramsStr = paramsStr.replace(/,$/, '')\n const runFn = `function (${paramsStr}){return ${code}}`\n let result\n try {\n // eslint-disable-next-line no-new-func\n result = Function(`\"use strict\";return (${runFn})`)()(...params)\n } catch (e) {\n // console.error()\n return code\n }\n return result\n}\n\nexport default runCode\n","import runCode from '../utils/runCode'\nexport const useVariablesInText = (\n formatter: string = '',\n { textData, codeData }: { textData?: { [key:string]: any }, codeData?: { [key:string]: any } } = {},\n { useNewline = false, useSpace = false } = {}\n) => {\n // 引入全局变量\n const data = { ...textData }\n const variables = (formatter || '').match(/\\{(.+?)\\}/g)\n if (variables == null || variables.length === 0) {\n return formatter\n }\n for (let i = 0; i < variables.length; i++) {\n const variable = variables[i]\n let statement = variable.slice(1, -1).trim()\n const reg = /[\\u4e00-\\u9fa5a-z-_A-Z0-9]*/g\n const textVariables: any = statement.match(reg)\n for (let j = 0; j < textVariables.length; j++) {\n const textVariable = textVariables[j]\n const usedVariable = data[textVariable]\n if (usedVariable != null) {\n // 使用的变量\n statement = statement.replace(textVariable, usedVariable)\n }\n }\n if ((/\\(.*\\)/g).test(statement) || (/[+/\\\\*]/g).test(statement)) {\n statement = runCode(statement, codeData)\n }\n formatter = formatter.replace(variable, statement)\n }\n // 替换换行\n if (useNewline) {\n formatter = formatter?.replace(/\\n|\\\\n/g, '<br/>')\n }\n // 替换空格\n if (useSpace) {\n formatter = formatter?.replace(/\\s{2,}?/g, '&nbsp;&nbsp;')\n }\n // 千分位格式化\n formatter = formatter.replace(/Qfw\\((.*?)\\)/, (res, str) => textData?.Qfw ? textData?.Qfw(str) : str)\n return formatter\n}\n\nexport default useVariablesInText\n","import useVariablesInText from '../hooks/useVariablesInText'\r\nimport { unref } from 'vue'\r\n/**\r\n * 字符串1 中是否包含 字符串2 (会全部转成小写)\r\n * @param v1 字符串1\r\n * @param v2 字符串2\r\n * @constructor\r\n */\r\nexport const lowerCaseIncludes = (v1:any, v2:any): boolean => {\r\n if (typeof v1 === 'string' && typeof v2 === 'string') {\r\n return v1.toLocaleLowerCase().includes(v2.toLocaleLowerCase())\r\n } else if (typeof v1 === 'string' && Array.isArray(v2)) {\r\n const len = v2.length\r\n for (let i = 0; i < len; i++) {\r\n const s = v2[i]\r\n if (typeof s === 'string' && v1.toLocaleLowerCase().includes(s.toLocaleLowerCase())) {\r\n return true\r\n }\r\n }\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * 判断 key 是否在对象上\r\n * @param v\r\n * @param k\r\n */\r\nexport const hasOwn = (v: object, k: string | symbol): k is keyof typeof v => Object.prototype.hasOwnProperty.call(v, k)\r\n\r\nexport const getConditions = (conditions) => {\r\n const result: any = []\r\n for (const item of conditions) {\r\n if (item.conditions) {\r\n result.push(...getConditions(item.conditions))\r\n } else if (item?.dataType === 'component') {\r\n result.push(item)\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport function getFormatStep (format: string) {\r\n const value = format.split('-')\r\n let formatStep = ''\r\n if (value?.length) {\r\n switch (value[value.length - 1]) {\r\n case 'YYYY':\r\n formatStep = 'year'\r\n break\r\n case 'MM':\r\n formatStep = 'month'\r\n break\r\n case 'DD':\r\n formatStep = 'day'\r\n break\r\n default:\r\n break\r\n }\r\n }\r\n return formatStep\r\n}\r\n\r\nexport const handleFormatter = (formatter: string) => {\r\n return formatter.replace(/\\\\n/g, '\\n')\r\n}\r\n\r\n/**\r\n * 图表的图例格式化\r\n * @param format 表达式\r\n * @param textData 传入参数\r\n * @returns 显示的图例文本\r\n */\r\nexport const getLegendFormat = (format: string = '', textData: any) => {\r\n const variables = format.match(/\\{(.+?)\\}/g)\r\n // 换行符个数\r\n const lineBreakCount = format.split('\\n')?.length - 1\r\n let lineBreakStr = ''\r\n if (lineBreakCount) {\r\n for (let i = 0; i < lineBreakCount; i++) {\r\n lineBreakStr += '\\n'\r\n }\r\n }\r\n let text = format\r\n if (variables?.length) {\r\n for (const item of variables) {\r\n const str = useVariablesInText(\r\n item,\r\n {\r\n textData\r\n },\r\n {\r\n useNewline: false,\r\n useSpace: false\r\n }\r\n )\r\n if (str) {\r\n text = text.replace(item, str)\r\n }\r\n }\r\n return `${lineBreakStr}{text|${text}}`\r\n } else {\r\n return format\r\n }\r\n}\r\n\r\n// 千分位转换\r\nexport function formatQfw (str: string) {\r\n let result = ''\r\n let str1 = ''\r\n let str2 = ''\r\n let value = ''\r\n if (str.indexOf('.') > -1) {\r\n str1 = str.split('.')[0] // 千分位处理部分\r\n str2 = str.split('.')[1] // 小数值\r\n } else {\r\n str1 = str\r\n }\r\n let index = 0\r\n let len = 0\r\n len = str1.length - 1\r\n while (len >= 0) {\r\n index % 3 === 0 && index !== 0\r\n ? str1[len] === '-'\r\n ? (result += str1[len])\r\n : (result += ',' + str1[len])\r\n : (result += str1[len])\r\n len--\r\n index++\r\n }\r\n result = result\r\n .split('')\r\n .reverse()\r\n .join('')\r\n if (str.indexOf('.') > -1) {\r\n value = result + '.' + str2\r\n } else {\r\n value = result\r\n }\r\n return value\r\n}\r\n\r\n// 根据指标获取其他参数-用于条件查询\r\nexport async function getIndicatorParams ({ graphicConfig, request, INDICATOR_URL = '', PAGE_ID, dataSourceId }) {\r\n try {\r\n const { leftAxisList = [], rightAxisList = [], queryColumnList = [], indicators = [] } = unref(graphicConfig)\r\n const otherList = [...leftAxisList, ...rightAxisList, ...queryColumnList, ...indicators]\r\n const idMap: any = {}\r\n for (const item of otherList) {\r\n const { indexCode = '', parentId = '' } = item\r\n if (parentId && !hasOwn(item, 'calcType') && !idMap[parentId]) {\r\n idMap[parentId] = indexCode\r\n }\r\n }\r\n if (Object.keys(idMap)?.length) {\r\n const promiseList: any = []\r\n for (const id in idMap) {\r\n promiseList.push(\r\n new Promise((resolve, reject) => {\r\n request\r\n .post(\r\n `${INDICATOR_URL}/diagram/hrpIndexWithComplex`,\r\n {\r\n pageId: PAGE_ID,\r\n indexGuid: id,\r\n indexCode: idMap[id],\r\n dataSourceId\r\n }\r\n )\r\n .then((res: any) => {\r\n const { success, data = [] } = res.data\r\n if (success && data?.dataViewColumns?.length) {\r\n resolve(data.dataViewColumns)\r\n } else {\r\n reject(data)\r\n }\r\n })\r\n .catch((e) => {\r\n console.error(e)\r\n reject(e)\r\n })\r\n })\r\n )\r\n }\r\n const res = await Promise.all(promiseList)\r\n const resultList = res.reduce((a: any, b: any) =>\r\n a.filter((c: any) => b.find((v: any) => v.typeGuid === c.typeGuid))\r\n )\r\n return resultList.filter((v: any) => v.typeGuid)\r\n }\r\n } catch (err) { \r\n console.error(err)\r\n }\r\n return ([])\r\n}\r\n","export const MODEL_KEY_LIST = ['table', 'bar', 'combograph', 'line', 'pie', 'radar', 'scatter', 'list', 'circulate']\r\n","import { unref } from 'vue'\r\nimport dayjs from 'dayjs'\r\nimport { cloneDeep } from 'lodash-es'\r\nimport { hasOwn, lowerCaseIncludes, getConditions, getFormatStep } from './utils/util'\r\nimport { MODEL_KEY_LIST } from './utils/constant'\r\n\r\nlet modelValue = new Map()\r\nconst excludeAttr = [\r\n 'keyValue',\r\n 'conditionKey',\r\n 'conditionLabel',\r\n 'conditionName',\r\n 'conditionValueType',\r\n 'customValue',\r\n 'id',\r\n 'keyName'\r\n]\r\n\r\nconst getGlobalModel = (key: string) => {\r\n return modelValue.get(key)\r\n}\r\n\r\n// 日期计算\r\nconst getCalcWays = (data: { [key:string]:any }, props: { [key:string]: any } = {}) => {\r\n const { around, unit, id } = data\r\n let result = ''\r\n const { pageMode = '', componentList = [] } = props?.graphicConfig || {}\r\n let sTime: any = null\r\n let eTime: any = null\r\n if (pageMode === 'design') {\r\n const component: any = componentList?.find((v: { [key:string]:any }) => v.id === id)\r\n if (!component) {\r\n return []\r\n }\r\n const { interval, intervalUnit, startTime, endTime, operate, useCurrentTime } = component || {}\r\n if (useCurrentTime) {\r\n sTime = dayjs().subtract(interval, intervalUnit)\r\n eTime = dayjs()\r\n }\r\n if (startTime) {\r\n sTime = dayjs(startTime)\r\n }\r\n if (endTime) {\r\n eTime = dayjs(endTime)\r\n }\r\n if (operate) {\r\n const { type, value, mode } = operate\r\n switch (type) {\r\n case 'add':\r\n sTime = sTime ? sTime.add(value, mode) : sTime\r\n eTime = eTime ? eTime.add(value, mode) : eTime\r\n break\r\n case 'minus':\r\n sTime = sTime ? sTime.subtract(value, mode) : sTime\r\n eTime = eTime ? eTime.subtract(value, mode) : eTime\r\n }\r\n }\r\n } else {\r\n const model = getGlobalModel(id) || {}\r\n if (unref(model.startTime)) {\r\n sTime = dayjs(unref(model.startTime))\r\n }\r\n if (unref(model.endTime)) {\r\n eTime = dayjs(unref(model.endTime))\r\n }\r\n }\r\n if (sTime && eTime) {\r\n const diffValue = eTime.diff(sTime, unit.toLowerCase())\r\n result = `${around === 'before' ? '-' : ''}${diffValue + 1}`\r\n }\r\n return result ? [result] : []\r\n}\r\n\r\nconst handleParams = (params: any, type: string | undefined) => {\r\n if (type) {\r\n // 处理sqlConditions中的sqlConditon\r\n if (hasOwn(params, 'indexCode')) {\r\n params.hrpIndexCode = params.indexCode\r\n delete params.indexCode\r\n }\r\n if (hasOwn(params, 'indexCodeNum')) {\r\n params.hrpIndexCodeNum = params.indexCodeNum\r\n delete params.indexCodeNum\r\n }\r\n if (hasOwn(params, 'dataType')) {\r\n delete params.dataType\r\n }\r\n } else {\r\n const { calcWays = [], dateCalcTypes = [], activeKey, componentId = '' } = params\r\n if (activeKey === 5 && calcWays?.length && dateCalcTypes?.length && componentId) {\r\n const vals = calcWays[0].split('-')\r\n if (vals?.length > 1) {\r\n if (vals[0] === 'rangeValue') {\r\n // 范围差值\r\n params.calcWays = getCalcWays({\r\n around: vals[1],\r\n unit: dateCalcTypes[0],\r\n id: componentId\r\n })\r\n }\r\n }\r\n delete params.radioValue\r\n }\r\n if (hasOwn(params, 'dataType')) {\r\n if (params.fieldType === 'DATE') {\r\n params.label = params.fieldName\r\n }\r\n if (params.dataType === 'component') {\r\n if (params.fieldValue === 'PARENT') {\r\n let fieldVal = params.modelKey\r\n if (fieldVal && params.prop) {\r\n fieldVal += `-${params.prop}`\r\n }\r\n params.fieldValue = '${' + fieldVal + '}'\r\n } else {\r\n params.fieldValue = '${' + params.fieldValue + '}'\r\n }\r\n }\r\n delete params.dataType\r\n }\r\n if (hasOwn(params, 'activeKey')) {\r\n delete params.activeKey\r\n }\r\n if (hasOwn(params, 'radioValue')) {\r\n delete params.radioValue\r\n }\r\n if (hasOwn(params, 'indexCode')) {\r\n params.hrpIndexCode = params.indexCode\r\n delete params.indexCode\r\n }\r\n if (hasOwn(params, 'indexCodeNum')) {\r\n params.hrpIndexCodeNum = params.indexCodeNum\r\n delete params.indexCodeNum\r\n }\r\n if (params.dataType !== 'component' && params.useCurrentTime) {\r\n // 时间值为当前时间\r\n params.fieldValue = dayjs().format(params.dateFormat)\r\n }\r\n if (hasOwn(params, 'modelKey')) {\r\n delete params.modelKey\r\n }\r\n if (hasOwn(params, 'prop')) {\r\n delete params.prop\r\n }\r\n delete params.useCurrentTime\r\n }\r\n}\r\n\r\n// 递归格式化conditions的数据\r\nconst handleConditions = (list: { [key: string]: any } [], type?: string) => {\r\n const result: any = []\r\n if (list?.length) {\r\n cloneDeep(list).forEach((item) => {\r\n if (item.join && item.conditions) {\r\n const isSameLevel = !item.conditions.some((v: any) => v.join && v.conditions)\r\n item.conditions.forEach((cs: any, index: number) => {\r\n handleParams(cs, type)\r\n const joinParams: { [key: string]: any } = {}\r\n if (index < item.conditions.length - 1) {\r\n joinParams.join = item.join\r\n }\r\n if (isSameLevel) {\r\n result.push({\r\n ...joinParams,\r\n ...cs\r\n })\r\n } else {\r\n if (cs.join && cs.conditions) {\r\n const conKey = type ? 'sqlConditions' : 'conditions'\r\n result.push({\r\n [conKey]: handleConditions([cs], type),\r\n ...joinParams\r\n })\r\n } else {\r\n result.push({\r\n ...joinParams,\r\n ...cs\r\n })\r\n }\r\n }\r\n })\r\n } else {\r\n handleParams(item, type)\r\n result.push(item)\r\n }\r\n })\r\n }\r\n return result\r\n}\r\n\r\nconst handleIndicator = (indicator: { [key:string]: any } = {}, classification: any) => {\r\n if (indicator?.sortCpnts && classification) {\r\n const sortData = getCpntSortData(indicator)\r\n if (sortData) {\r\n classification.sort = sortData\r\n }\r\n }\r\n const {\r\n label,\r\n name,\r\n location,\r\n show,\r\n indexCode,\r\n indexCodeNum,\r\n calcType = 'COLUMN',\r\n builtInFormula,\r\n builtInValueSource,\r\n builtInCalcWay,\r\n formula,\r\n conditions,\r\n aggregate,\r\n distinct,\r\n dimByCount,\r\n dataTo\r\n } = indicator\r\n let conditionData\r\n if (conditions) {\r\n conditionData = handleConditions(conditions)\r\n }\r\n if (calcType === 'COMPONENT') {\r\n const componentField: any = {}\r\n setFieldValue(componentField, builtInValueSource)\r\n return {\r\n label: label.trim(),\r\n columnName: name,\r\n show,\r\n calcType,\r\n componentAlias: builtInCalcWay,\r\n componentValue: componentField.fieldValue || null\r\n }\r\n }\r\n const itemObj: any = {\r\n label: label.trim(),\r\n columnName: name,\r\n location,\r\n show,\r\n calcType: dataTo === '1' ? 'VIEW' : calcType,\r\n hrpIndexCode: indexCode,\r\n hrpIndexCodeNum: indexCodeNum,\r\n aggregate,\r\n builtInFormula,\r\n builtInValueSource,\r\n formula,\r\n conditions: conditionData\r\n }\r\n if (builtInFormula === 'DATE_OFFSET') {\r\n const list = builtInCalcWay.split('-')\r\n if (list?.length === 3) {\r\n let calcWays = list[0]\r\n if (list[2] === 'before' && list[0] !== '0') {\r\n calcWays = `-${list[0]}`\r\n }\r\n return {\r\n ...itemObj,\r\n calcWays: [calcWays],\r\n dateCalcTypes: [list[1]]\r\n }\r\n }\r\n } else {\r\n if (name === 'the_count') {\r\n itemObj.calcType = 'AGGREGATE'\r\n itemObj.distinct = !!distinct\r\n itemObj.typeGuid = dimByCount\r\n }\r\n return {\r\n ...itemObj,\r\n builtInCalcWay\r\n }\r\n }\r\n}\r\n\r\nconst handleSqlConditions = (graphicConfig: { [key:string]: any }) => {\r\n if (!graphicConfig) {\r\n return []\r\n }\r\n const controlList = cloneDeep(graphicConfig?.controlList || [])\r\n .filter((v: any) => v.conditionKey !== 'parentCode')\r\n const {\r\n classificationList = [],\r\n rowHeaderList = [],\r\n dimensionList = [],\r\n seriesList = [],\r\n leftAxisList = [],\r\n rightAxisList = [],\r\n queryColumnList = [],\r\n indicators = []\r\n } = graphicConfig\r\n handleControlList(controlList)\r\n const otherList = [\r\n ...classificationList,\r\n ...rowHeaderList,\r\n ...dimensionList,\r\n ...seriesList,\r\n ...leftAxisList,\r\n ...rightAxisList,\r\n ...queryColumnList,\r\n ...indicators\r\n ]\r\n const conditionList: any = []\r\n for (const ol of otherList) {\r\n const conditions = getConditions(ol?.conditions || [])\r\n if (conditions?.length) {\r\n const list = conditions\r\n .filter((v: any) => v?.dataType === 'component')\r\n .map((item: any) => {\r\n const params: any = {}\r\n if (item?.dateFormat) {\r\n params.format = item.dateFormat\r\n }\r\n if (item.fieldValue === 'PARENT') {\r\n // 使用父页面的组件\r\n params.id = 'PARENT'\r\n params.keyName = item.modelKey\r\n params.modelKey = item.modelKey\r\n params.prop = item.prop\r\n }\r\n return {\r\n conditionKey: item.fieldName,\r\n conditionLabel: item.fieldName,\r\n conditionName: item.fieldName,\r\n conditionValueType: item.fieldType,\r\n id: item.componentId,\r\n keyName: item.fieldValue,\r\n rule: item.rule,\r\n notGlobal: true,\r\n indexCode: item.indexCode,\r\n typeGuid: item.typeGuid,\r\n indexCodeNum: item.indexCodeNum,\r\n ...params\r\n }\r\n })\r\n if (list?.length) {\r\n for (const l of list) {\r\n if (!conditionList.find((cItem: any) => cItem.keyName === l.keyName)) {\r\n conditionList.push(l)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n const len = conditionList.length\r\n const sqlConditions = controlList\r\n for (let i = 0; i < len; i++) {\r\n const control = conditionList[i]\r\n if (control?.conditionKey === 'parentCode') {\r\n continue\r\n }\r\n const {\r\n id,\r\n keyName,\r\n prop,\r\n format: dateFormat,\r\n modelKey,\r\n dataType = 'component',\r\n customValue\r\n } = control\r\n const sqlCondition: { [key:string]: any } = getConditionItem(control)\r\n // console.log('model', model)\r\n setFieldValue(sqlCondition, id, { prop, dateFormat, modelKey, keyName })\r\n if (dataType === '') {\r\n sqlCondition.fieldValue = customValue || ''\r\n }\r\n sqlConditions.push(sqlCondition)\r\n }\r\n for (let j = sqlConditions.length - 1; j >= 0; j--) {\r\n const item = sqlConditions[j]\r\n if (!item.globalCondition) {\r\n const cond = getConditions(sqlConditions).find(v => v.alias === item.alias && v.globalCondition)\r\n if (cond) {\r\n sqlConditions.splice(j, 1)\r\n }\r\n }\r\n }\r\n return sqlConditions\r\n}\r\n\r\nfunction getConditionItem (control: { [key:string]:any }) {\r\n const {\r\n id,\r\n keyName,\r\n conditionLabel,\r\n conditionKey,\r\n conditionValueType,\r\n prop,\r\n rule = 'NONE',\r\n notGlobal = false,\r\n indexCode,\r\n typeGuid,\r\n indexCodeNum,\r\n dataType = 'component'\r\n } = control\r\n let alias = keyName || id\r\n if (alias && prop) {\r\n alias += `-${prop}`\r\n }\r\n let ruleValue = rule\r\n if (ruleValue === 'NONE') {\r\n if (['startTime', 'endTime'].includes(prop)) {\r\n ruleValue = prop === 'startTime' ? 'GREATER_EQUAL' : 'LESS_EQUAL'\r\n } else if (keyName?.includes('startTime')) {\r\n ruleValue = prop === 'GREATER_EQUAL'\r\n } else if (keyName?.includes('endTime')) {\r\n ruleValue = prop === 'LESS_EQUAL'\r\n } else {\r\n ruleValue = 'EQUAL'\r\n }\r\n }\r\n if (id === 'PARENT') {\r\n alias = control.modelKey\r\n if (alias && prop) {\r\n alias += `-${prop}`\r\n }\r\n ruleValue = rule\r\n }\r\n return {\r\n rule: ruleValue,\r\n label: conditionLabel,\r\n fieldName: conditionKey,\r\n fieldValue: '', // 在关联控件中取\r\n // dateFormat: 'YYYY-MM',\r\n valueType: conditionValueType,\r\n alias,\r\n globalCondition: !notGlobal,\r\n indexCode,\r\n typeGuid,\r\n indexCodeNum,\r\n dataType\r\n }\r\n}\r\n\r\nfunction handleControlList (controlList: { [key:string]:any }[]) {\r\n if (controlList?.length) {\r\n for (const control of controlList) {\r\n if (control?.conditions) {\r\n handleControlList(control.conditions)\r\n } else {\r\n const {\r\n id,\r\n keyName,\r\n prop,\r\n modelKey,\r\n format: dateFormat,\r\n dataType = 'component',\r\n customValue\r\n } = control\r\n let alias = keyName || id\r\n if (alias && prop) {\r\n alias += `-${prop}`\r\n }\r\n const sqlCondition: { [key:string]: any } = getConditionItem(control)\r\n setFieldValue(sqlCondition, id, { prop, dateFormat, modelKey, keyName })\r\n if (dataType === '') {\r\n sqlCondition.fieldValue = customValue || ''\r\n }\r\n for (const key in sqlCondition) {\r\n control[key] = sqlCondition[key]\r\n }\r\n for (const attr of excludeAttr) {\r\n delete control[attr]\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction handleVariableList (variableList: { [key: string]: any }[]) {\r\n const handleVarList: any = []\r\n if (variableList?.length) {\r\n for (const item of variableList) {\r\n if (item.variableName) {\r\n const variableItem: any = {\r\n variateName: item.variableName,\r\n globalCondition: false,\r\n valueType: item.variableType,\r\n alias: item.keyName || ''\r\n }\r\n setFieldValue(variableItem, item.id, {\r\n dateFormat: item.format,\r\n prop: item.dateTypeValue,\r\n keyName: item.keyName,\r\n operateType: item.operateType,\r\n operateMode: item.operateMode,\r\n operateValue: item.operateValue\r\n })\r\n if (item.dataType === '') {\r\n variableItem.fieldValue = item.variableValue\r\n }\r\n if (item.format) {\r\n // 日期格式化\r\n variableItem.dateFormat = item.format\r\n }\r\n if (item.label) {\r\n variableItem.label = item.label\r\n }\r\n handleVarList.push(variableItem)\r\n }\r\n }\r\n }\r\n return handleVarList\r\n}\r\n\r\n// 设置sqlCondition的fieldValue值\r\nfunction setFieldValue (data: any, id: string, params?: any) {\r\n const { prop = '', dateFormat = '', modelKey = '', keyName = '', operateValue, operateMode, operateType } = params || {}\r\n const rKey = modelKey || keyName\r\n if (id === 'PARENT' && rKey && prop) {\r\n // @ts-ignore\r\n const record = window.config.record\r\n let propKey = prop\r\n let format = dateFormat\r\n const variables = (prop).match(/\\{(.+?)\\}/g)\r\n if (variables?.length) {\r\n const variable = variables[0].slice(1, -1).trim()\r\n propKey = prop.replace(variables[0], '')\r\n format = variable\r\n data.dateFormat = format\r\n }\r\n if (record && record[rKey]) {\r\n const recordValue = unref(record[rKey][propKey])\r\n if (dayjs.isDayjs(recordValue)) {\r\n data.fieldValue = recordValue.format(format || 'YYYY-MM-DD')\r\n } else {\r\n data.fieldValue = recordValue\r\n }\r\n }\r\n return\r\n }\r\n // 获取组件属性\r\n const model = getGlobalModel(id) || {}\r\n // console.log('model', model)\r\n const { value, format = 'YYYY-MM-DD', type = '', useCurrentTime, RECORD } = model || {}\r\n const customFormat = dateFormat || format\r\n if (lowerCaseIncludes(model.type, 'date')) {\r\n let dateValue\r\n if (useCurrentTime) {\r\n if (value) {\r\n dateValue = unref(value)\r\n } else {\r\n dateValue = dayjs()\r\n }\r\n } else {\r\n dateValue = unref(value)\r\n }\r\n if (operateValue && operateMode && operateType) {\r\n switch (operateType) {\r\n case 'add':\r\n dateValue = dateValue.add(operateValue, operateMode)\r\n break\r\n case 'minus':\r\n dateValue = dateValue.subtract(operateValue, operateMode)\r\n break\r\n }\r\n }\r\n data.fieldValue = dateValue?.format(customFormat)\r\n data.dateFormat = customFormat\r\n } else if (type === 'ecanRangePicker') {\r\n let propValue = prop\r\n if (!prop) {\r\n const knList = keyName && keyName.split('-')\r\n if (knList?.length) {\r\n propValue = knList[knList.length - 1]\r\n }\r\n }\r\n if (!propValue) {\r\n return\r\n }\r\n let _time: any = null\r\n if (unref(model[propValue])) {\r\n _time = dayjs(unref(model[propValue]))\r\n }\r\n\r\n if (operateValue && operateMode && operateType) {\r\n if (operateValue === 'rangeValue') {\r\n // 自定义偏移,目前只有范围差\r\n if (model.startTime && model.endTime) {\r\n const interval = unref(model.endTime).diff(unref(model.startTime), operateMode) + 1\r\n switch (operateType) {\r\n case 'add':\r\n _time = _time ? _time.add(interval, operateMode) : _time\r\n break\r\n case 'minus':\r\n _time = _time ? _time.subtract(interval, operateMode) : _time\r\n }\r\n }\r\n } else if (!isNaN(+operateValue)) {\r\n switch (operateType) {\r\n case 'add':\r\n _time = _time ? _time.add(operateValue, operateMode) : _time\r\n break\r\n case 'minus':\r\n _time = _time ? _time.subtract(operateValue, operateMode) : _time\r\n }\r\n }\r\n }\r\n\r\n if (_time) {\r\n data.fieldValue = _time?.format(customFormat)\r\n }\r\n if (propValue === 'rangeValue') {\r\n // 全局变量的日期范围间隔值计算\r\n if (model.startTime && model.endTime) {\r\n const step: any = getFormatStep(customFormat)\r\n if (step) {\r\n data.fieldValue = unref(model.endTime).diff(unref(model.startTime), step) + 1\r\n }\r\n }\r\n }\r\n data.dateFormat = customFormat\r\n } else if (lowerCaseIncludes(type, MODEL_KEY_LIST)) {\r\n if (modelKey && RECORD) {\r\n data.fieldValue = RECORD[modelKey]\r\n } else if (!modelKey && RECORD) {\r\n data.fieldValue = RECORD.value\r\n } else {\r\n data.fieldValue = unref(value)\r\n }\r\n } else {\r\n data.fieldValue = unref(value)\r\n }\r\n}\r\n\r\nconst handleSort = (sort: any) => {\r\n if (sort) {\r\n const sortData: any = Array.isArray(sort) ? cloneDeep(sort) : [cloneDeep(sort)]\r\n let type = ''\r\n let customOrderColumns = []\r\n const labels: any = []\r\n const columnNames: any = []\r\n const orders: any = []\r\n for (const item of sortData) {\r\n if (item.defaultCode) {\r\n item.label = item.columnName\r\n delete item.defaultCode\r\n }\r\n if (item.type === 'CUSTOM') {\r\n customOrderColumns = item.customOrderColumns\r\n }\r\n type = item.type\r\n labels.push(item.label)\r\n if (item.columnName?.includes('_ecanrepeat_')) {\r\n // 处理多个一样的指标或维度\r\n const list = item.columnName.split('_ecanrepeat_')\r\n columnNames.push(list[0])\r\n } else {\r\n columnNames.push(item.columnName)\r\n }\r\n orders.push(item.order)\r\n }\r\n if (type !== 'CUSTOM' && labels?.length > 1) {\r\n type = 'COMBINATION'\r\n }\r\n if (type === 'CUSTOM') {\r\n return {\r\n label: labels.join(','),\r\n columnName: columnNames.join(','),\r\n type,\r\n customOrderColumns\r\n }\r\n } else {\r\n return {\r\n label: labels.join(','),\r\n columnName: columnNames.join(','),\r\n order: orders.join(','),\r\n type\r\n }\r\n }\r\n } else {\r\n return sort\r\n }\r\n}\r\n\r\n// 获取关联控件排序的排序信息\r\nconst getCpntSortData = (data: any) => {\r\n const { sortCpnts = [] } = data\r\n let customSort: any\r\n let order = ''\r\n for (const id of sortCpnts) {\r\n const model = getGlobalModel(id) || {}\r\n const { type, RECORD } = model\r\n if (lowerCaseIncludes(type, 'image') && lowerCaseIncludes(RECORD?.value, ['asc', 'desc'])) {\r\n order = RECORD.value.toUpperCase()\r\n break\r\n }\r\n }\r\n if (order) {\r\n customSort = {\r\n label: data.label,\r\n columnName: data.name,\r\n order,\r\n type: 'NORMAL'\r\n }\r\n }\r\n return customSort\r\n}\r\n\r\nconst formatIndicatorParams = (props: any, otherParams: any = {}) => {\r\n const { graphicConfig, type, globalModel, isGroupTable = false } = props\r\n if (globalModel) {\r\n modelValue = globalModel\r\n }\r\n let pageId = props.pageId\r\n const isPivotTable = lowerCaseIncludes(type, 'pivottable')\r\n\r\n let {\r\n source,\r\n dataViewId,\r\n plugin = '1', // 插件类型\r\n layer, // 后台图表类型,值分0,1\r\n chartType, // 前端图表类型\r\n classificationList = [],\r\n rowHeaderList = [],\r\n dimensionList = [], // 文本组件的维度列表\r\n seriesList = [],\r\n leftAxisList = [],\r\n rightAxisList = [],\r\n queryColumnList = [],\r\n indicators = [],\r\n controlList = [],\r\n formFields = {},\r\n variableList = [],\r\n variableConditions = [],\r\n // dataSourceId, // 所属数据源ID\r\n idxLibMode, // 指标库模式, source= INDICATOR_LIB时候必填, NORMAL_YEAR_TABLE = 普通年表, WITH_DATE_DIM_TABLE = 带有时间维度表\r\n preview = false, // 预览开关\r\n edvDataSetId // 数据集id\r\n } = graphicConfig || {}\r\n\r\n let sqlConditions: any = []\r\n if (graphicConfig?.pageMode === 'design') {\r\n // relativeList 在设计模式下,由于联动无法直接获取,已经处理好数据直接获取\r\n sqlConditions = (graphicConfig.sqlConditions ?? []).map((v: any) => {\r\n const gParams: any = {}\r\n if (!hasOwn(v, 'globalCondition') && !v.join) {\r\n gParams.globalCondition = true\r\n }\r\n if (!v.join) {\r\n const ruleVaule = v.rule || 'EQUAL'\r\n gParams.rule = ruleVaule === 'NONE' ? 'EQUAL' : ruleVaule\r\n }\r\n return {\r\n ...v,\r\n ...gParams\r\n }\r\n })\r\n if (variableConditions?.length) {\r\n sqlConditions = sqlConditions.concat(variableConditions)\r\n }\r\n } else {\r\n sqlConditions = handleSqlConditions(graphicConfig)\r\n if (variableList?.length) {\r\n sqlConditions = sqlConditions.concat(handleVariableList(variableList))\r\n }\r\n }\r\n\r\n if (sqlConditions?.length) {\r\n const globalList = sqlConditions.filter((v: any) => v.globalCondition)\r\n const notGlobalList = sqlConditions.filter((v: any) => !v.globalCondition)\r\n if (globalList?.length > 1) {\r\n sqlConditions = [\r\n {\r\n join: '&&',\r\n conditions: globalList\r\n },\r\n ...notGlobalList\r\n ]\r\n }\r\n }\r\n\r\n // 把sqlConditions转成接口要求的数据格式\r\n if (sqlConditions?.length) {\r\n sqlConditions = handleConditions(sqlConditions, '1')\r\n }\r\n\r\n // 图类型,1=表 2=图\r\n if (layer == null) {\r\n if (lowerCaseIncludes(type, ['table', 'card']) || (lowerCaseIncludes(type, ['list', 'circulate']) && classificationList?.length > 1)) {\r\n layer = '1'\r\n } else if (lowerCaseIncludes(type, ['select', 'checkbox', 'radio'])) {\r\n layer = '3'\r\n } else {\r\n layer = '2'\r\n }\r\n }\r\n\r\n let classification\r\n const classifications: any = []\r\n let typeGuidString = ''\r\n if (\r\n Array.isArray(classificationList) &&\r\n classificationList.length > 0 &&\r\n (!['ecanList', 'ecanCirculate'].includes(type) || classificationList?.length === 1)\r\n ) {\r\n const len = classificationList.length\r\n for (let i = 0; i < len; i++) {\r\n const item = classificationList[i] || {}\r\n const {\r\n label = '',\r\n name = '',\r\n show = false,\r\n sort,\r\n customGroup,\r\n conditions,\r\n dateFormat,\r\n typeGuid = '',\r\n truncations = []\r\n } = item\r\n // 如果是 show 直接提取 classification,停止遍历\r\n if (show || len === 1) {\r\n typeGuidString = typeGuid\r\n classification = {\r\n label: label.trim(),\r\n columnName: name,\r\n show,\r\n sort: getCpntSortData(item) || handleSort(sort) || sort,\r\n customGroup,\r\n conditions: handleConditions(conditions),\r\n typeGuid\r\n }\r\n if (dateFormat) {\r\n classification.dateFormat = dateFormat\r\n }\r\n if (name === 'the_date' && !classification.dateFormat) {\r\n classification.dateFormat = 'YYYY-MM'\r\n }\r\n // truncation\r\n const truncation: any = {}\r\n if (Array.isArray(truncations) && truncations.length > 0) {\r\n const len = truncations.length\r\n for (let i = 0; i < len; i++) {\r\n const item = truncations[i] || {}\r\n const { rule = '', num = 0, name = '' } = item\r\n if (rule && num) {\r\n truncation.num = num\r\n truncation.rule = rule\r\n if (name) {\r\n truncation.otherGroupName = name\r\n }\r\n }\r\n }\r\n }\r\n if (Object.keys(truncation)?.length) {\r\n classification.truncation = truncation\r\n }\r\n if (lowerCaseIncludes(type, ['scatter', 'valueline'])) {\r\n classifications.push(classification)\r\n } else {\r\n break\r\n }\r\n }\r\n }\r\n }\r\n // seriesList (取第一项) => series\r\n let series\r\n if (Array.isArray(seriesList) && seriesList.length > 0) {\r\n const len = seriesList.length\r\n for (let i = 0; i < len; i++) {\r\n const item = seriesList[i] || {}\r\n const { label = '', name = '', show = false, sort, customGroup, conditions, typeGuid } = item\r\n // 如果是 show 直接提取 seriesList,停止遍历\r\n if (show || len === 1) {\r\n series = {\r\n label: label.trim(),\r\n columnName: name,\r\n show,\r\n sort: handleSort(sort),\r\n customGroup,\r\n conditions: handleConditions(conditions),\r\n typeGuid\r\n }\r\n break\r\n }\r\n }\r\n }\r\n\r\n // leftAxisList + rightAxisList + indicators => indicatorList\r\n const indicatorList: any = []\r\n leftAxisList?.forEach((leftAxis: { [key:string]: any }) => {\r\n leftAxis.location = 'LEFT'\r\n indicatorList.push(handleIndicator(leftAxis, classification))\r\n })\r\n rightAxisList?.forEach((rightAxis: { [key:string]: any }) => {\r\n rightAxis.location = 'RIGHT'\r\n indicatorList.push(handleIndicator(rightAxis, classification))\r\n })\r\n\r\n let indicatorsData = indicators\r\n if (otherParams?.pivotTableCal?.indicators?.length) {\r\n // 透视表全设计模式,替换设计态拖拽的指标\r\n indicatorsData = otherParams.pivotTableCal.indicators\r\n }\r\n indicatorsData?.forEach((indicator: { [key:string]: any }) => {\r\n indicator.location = 'LEFT'\r\n indicatorList.push(handleIndicator(indicator, classification))\r\n })\r\n\r\n // queryColumnList => queryColumns\r\n const queryColumns: any = []\r\n if (['ecanList', 'ecanCirculate'].includes(type) && classificationList?.length > 1) {\r\n queryColumnList = classificationList\r\n }\r\n if (otherParams?.pivotTableCal?.dimensions?.length) {\r\n // 透视表全设计模式,替换设计态拖拽的维度\r\n queryColumnList = otherParams.pivotTableCal.dimensions\r\n }\r\n queryColumnList?.forEach((queryColumn: { [key:string]: any }) => {\r\n const { label, name, location, show, indexCode, sort, typeGuid, indexCodeNum, dateFormat, conditions } = queryColumn\r\n let customSort = handleSort(sort)\r\n if (otherParams.sort) {\r\n // 表格的表头排序\r\n const { field, order } = otherParams.sort\r\n let indicator = indicatorList.find(v => v.label === field)\r\n if (!indicator && label === field) {\r\n indicator = queryColumn\r\n }\r\n if (indicator) {\r\n customSort = {\r\n columnName: indicator.columnName,\r\n label: otherParams.sort.field,\r\n order: order.toUpperCase(),\r\n type: 'NORMAL'\r\n }\r\n }\r\n }\r\n const itemObj: any = {\r\n label,\r\n columnName: name,\r\n location,\r\n show,\r\n sort: customSort,\r\n calcType: 'COLUMN',\r\n hrpIndexCode: indexCode,\r\n hrpIndexCodeNum: indexCodeNum,\r\n conditions: handleConditions(conditions),\r\n typeGuid\r\n }\r\n if (dateFormat) {\r\n itemObj.dateFormat = dateFormat\r\n }\r\n if (name === 'the_date' && !itemObj.dateFormat) {\r\n itemObj.dateFormat = 'YYYY-MM'\r\n }\r\n queryColumns.push(itemObj)\r\n })\r\n\r\n // 行表头\r\n let rowHeaders: any = []\r\n let resultRowHeaderList: any = []\r\n if (Array.isArray(rowHeaderList) && rowHeaderList.length > 0) {\r\n resultRowHeaderList = rowHeaderList\r\n } else if (Array.isArray(dimensionList) && dimensionList.length > 0) {\r\n resultRowHeaderList = dimensionList\r\n }\r\n if (resultRowHeaderList?.length) {\r\n const len = resultRowHeaderList.length\r\n for (let i = 0; i < len; i++) {\r\n const item = resultRowHeaderList[i] || {}\r\n const { label = '', name = '', show = false, sort, customGroup, conditions, truncations, typeGuid = '', dateFormat } = item\r\n let customSort = handleSort(sort)\r\n if (otherParams.sort) {\r\n // 表格的表头排序\r\n const { field, order } = otherParams.sort\r\n let indicator = indicatorList.find(v => v.label === field)\r\n if (!indicator && item.label === field) {\r\n indicator = item\r\n }\r\n if (indicator) {\r\n customSort = {\r\n columnName: indicator.columnName,\r\n label: otherParams.sort.field,\r\n order: order.toUpperCase(),\r\n type: 'NORMAL'\r\n }\r\n }\r\n }\r\n const itemObj: any = {\r\n label: label.trim(),\r\n columnName: name,\r\n show,\r\n sort: customSort,\r\n customGroup,\r\n conditions: handleConditions(conditions),\r\n typeGuid\r\n }\r\n if (dateFormat) {\r\n itemObj.dateFormat = dateFormat\r\n }\r\n if (name === 'the_date' && !itemObj.dateFormat) {\r\n itemObj.dateFormat = 'YYYY-MM'\r\n }\r\n // truncation\r\n const truncation: any = {}\r\n if (Array.isArray(truncations) && truncations.length > 0) {\r\n const len = truncations.length\r\n for (let i = 0; i < len; i++) {\r\n const item = truncations[i] || {}\r\n const { rule = '', num = 0, name = '' } = item\r\n if (rule && num) {\r\n truncation.num = num\r\n truncation.rule = rule\r\n if (name) {\r\n truncation.otherGroupName = name\r\n }\r\n }\r\n }\r\n }\r\n if (Object.keys(truncation)?.length) {\r\n itemObj.truncation = truncation\r\n }\r\n rowHeaders.push(itemObj)\r\n }\r\n }\r\n\r\n // 透视表指标排序要用到的\r\n let pivotColumnHeader: any = []\r\n let pivotColumnData: any\r\n // 透视表\r\n if (otherParams?.pivotTableCal) {\r\n let resultList: any = []\r\n const {\r\n calc = [],\r\n filter = [],\r\n truncations = [],\r\n sorts = [],\r\n aggregateMethod = [],\r\n rowDimensionKeys = [],\r\n colDimensionKeys = []\r\n } = otherParams.pivotTableCal\r\n // 计算\r\n indicatorList.push(...calc)\r\n // 筛选\r\n if (filter?.length) {\r\n for (const fl of filter) {\r\n const { type, ...flParams } = fl\r\n if (type === 'indicators') {\r\n // 指标筛选\r\n resultList = indicatorList\r\n } else if (type === 'dimension') {\r\n // 维度筛选\r\n resultList = queryColumns\r\n }\r\n const target = resultList.find((v: any) => v.columnName === fl.fieldName)\r\n if (target) {\r\n if (!target.conditions) {\r\n target.conditions = []\r\n }\r\n target.conditions.push(flParams)\r\n }\r\n }\r\n }\r\n // 取top\r\n if (truncations?.length) {\r\n for (const item of truncations) {\r\n const target = queryColumns.find(v => v.columnName === item.key)\r\n if (target) {\r\n target.truncation = {\r\n num: item.num,\r\n rule: item.rule\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 维度/指标排序\r\n if (sorts?.length) {\r\n for (const item of sorts) {\r\n const { fieldType, columnData, ...sortParams } = item\r\n if (fieldType === 'indicators') {\r\n // 指标排序\r\n resultList = indicatorList\r\n pivotColumnData = columnData\r\n } else if (fieldType === 'dimension') {\r\n // 维度排序\r\n resultList = queryColumns\r\n }\r\n const target = resultList.find(v => v.label === sortParams.label)\r\n if (target) {\r\n target.sort = {\r\n ...sortParams,\r\n columnName: target.columnName\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 聚合\r\n if (Object.keys(aggregateMethod)?.length) {\r\n for (const key in aggregateMethod) {\r\n const target = queryColumns.find(v => v.label === key)\r\n if (target && aggregateMethod[key]?.length) {\r\n target.aggregateMethod = aggregateMethod[key]\r\n }\r\n }\r\n }\r\n\r\n rowHeaders = []\r\n pivotColumnHeader = []\r\n for (const q of queryColumns) {\r\n if (rowDimensionKeys.includes(q.columnName)) {\r\n rowHeaders.push(q)\r\n } else if (colDimensionKeys.includes(q.columnName)) {\r\n pivotColumnHeader.push(q)\r\n }\r\n }\r\n }\r\n\r\n if (lowerCaseIncludes(type, ['text', 'proportion', 'counter'])) {\r\n chartType = 'zb'\r\n } else if (lowerCaseIncludes(type, ['valueline'])) {\r\n chartType = 'valueline'\r\n }\r\n\r\n // queryColumns 表格配置为空返回\r\n if (isGroupTable || type === 'card') {\r\n if (rowHeaders.length === 0 || indicatorList.length === 0) {\r\n return\r\n } else {\r\n chartType = 'grouptable'\r\n }\r\n } else if (layer === '1' && queryColumns.length === 0) {\r\n return\r\n // queryColumns 图表配置为空返回\r\n } else if (layer === '2' && indicatorList.length === 0) {\r\n return\r\n } else if (layer === '3' && ((!typeGuidString && source !== 'EDV_DATA_SET') || !formFields.labelField || !formFields.valueField)) {\r\n return\r\n } else if (layer === '3' && type === 'ecanDataSelect' && indicatorList.length === 0) {\r\n return\r\n }\r\n\r\n // 文本维度\r\n if (dimensionList?.length) {\r\n layer = '1'\r\n chartType = 'grouptable'\r\n }\r\n\r\n if (!pageId) {\r\n const { pathname } = (window as any)?.location\r\n if (pathname) {\r\n const list = pathname.split('/')\r\n if (list?.length) {\r\n pageId = list[list.length - 1]\r\n }\r\n }\r\n }\r\n\r\n let resultParams: any\r\n if (!lowerCaseIncludes(type, ['scatter', 'valueline']) && Object.keys(formFields)?.length) {\r\n const cascadeControl = getConditions(controlList).find((v: any) => v.conditionKey === 'parentCode')\r\n const someParams: any = {}\r\n if (cascadeControl) {\r\n const model = getGlobalModel(cascadeControl.id) || {}\r\n if (model?.itemCodes) {\r\n someParams.parentItemCodes = model.itemCodes\r\n } else {\r\n return\r\n }\r\n }\r\n if (type === 'ecanDataSelect') {\r\n someParams.indicatorList = indicatorList.filter(v => v.show)\r\n }\r\n if (source === 'EDV_DATA_SET') {\r\n someParams.edvDataSetId = edvDataSetId\r\n }\r\n resultParams = {\r\n url: '/diagram/formData',\r\n source,\r\n dataViewId,\r\n plugin: '4',\r\n layer,\r\n chartType: 'normalSelect',\r\n rangeIndexTypeGuid: typeGuidString,\r\n type: type === 'ecanDataSelect' ? 'normalSelectData' : 'normalSelect',\r\n labelField: formFields.labelField,\r\n valueField: formFields.valueField,\r\n pageId,\r\n sqlConditions,\r\n idxLibMode: 'WITH_DATE_DIM_TABLE',\r\n keyName: props.keyName,\r\n ...someParams\r\n }\r\n } else {\r\n let classParams = {}\r\n if (lowerCaseIncludes(type, ['scatter', 'valueline'])) {\r\n // 散点图多个维度\r\n classParams = {\r\n classifications\r\n }\r\n } else {\r\n classParams = {\r\n classification\r\n }\r\n }\r\n resultParams = {\r\n url: '/diagram',\r\n source,\r\n dataViewId,\r\n plugin: isPivotTable ? '5' : plugin,\r\n layer,\r\n chartType: isPivotTable ? 'pivot-table' : chartType,\r\n series,\r\n indicatorList,\r\n queryColumns: isGroupTable ? [] : queryColumns,\r\n pageFlag: true,\r\n pageId,\r\n edvDataSetId: edvDataSetId || '',\r\n sqlConditions: sqlConditions.map(v => {\r\n const { fieldValue } = v\r\n const params: any = {}\r\n if (fieldValue && Array.isArray(fieldValue)) {\r\n params.fieldValue = JSON.stringify(fieldValue)\r\n }\r\n return {\r\n ...v,\r\n ...params\r\n }\r\n }),\r\n idxLibMode,\r\n preview,\r\n rowHeaders,\r\n keyName: props.keyName,\r\n // 透视表指标排序相关入参\r\n columnData: pivotColumnData,\r\n columnHeaders: pivotColumnHeader,\r\n ...classParams,\r\n }\r\n }\r\n return resultParams\r\n}\r\n\r\nexport default {\r\n formatIndicatorParams\r\n}","interface DataItem {\n name: string | number\n value: string | number\n type?: string\n}\n\nexport type Data = DataItem []\n\nexport interface KeyTypeDataFieldNames {\n name: string\n types: {\n label: string\n value: string\n } []\n}\n\n/**\n * 图形转化数据\n * @param data 数据\n * @param dataFieldNames 字段映射\n */\nexport const useTransformChartDataByAttrKey = (data: Data = [], dataFieldNames: KeyTypeDataFieldNames) => {\n let { name = 'name', types = [] } = dataFieldNames || {}\n name = name?.trim() || name\n const set = new Set()\n const map = new Map<string, any []>()\n const dataLen = data.length\n const typesLen = types.length\n // 只有一条记录\n if (dataLen === 1) {\n const vs: any = []\n // data 为一个值取第一个\n for (let i = 0; i < typesLen; i++) {\n const type = types[i]\n const { label, value } = type\n const v = { ...data[0], value: data[0][value] }\n set.add(label)\n // 值列表\n vs.push(v)\n }\n const n = data[0][name] || ''\n map.set(n, vs)\n } else {\n for (let i = 0; i < dataLen; i++) {\n const item = data[i]\n const x = item[name]\n set.add(x)\n for (let j = 0; j < typesLen; j++) {\n const type = types[j]\n const { label, value } = type\n const v = { ...item, value: item[value] }\n if (map.has(label)) {\n const m: any = map.get(label)\n m.push(v)\n map.set(label, m)\n } else {\n map.set(label, [v])\n }\n }\n }\n }\n\n const dimensions = Array.from(set)\n const dataset: { [key:string]:any } [] = []\n for (const [name, data] of map) {\n dataset.push({\n name,\n data\n })\n }\n return {\n dimensions,\n dataset\n }\n}\n\nexport default useTransformChartDataByAttrKey\n","interface DataItem {\n name: string | number\n value: string | number\n type?: string\n}\n\nexport type Data = DataItem []\n\nexport interface ValueTypeDataFieldNames {\n name: string\n value: string\n type: string\n}\n\n/**\n * 图形转化数据\n * @param data 数据\n * @param dataFieldNames 字段映射\n */\nexport const useTransformChartDataByAttrValue = (data: Data, dataFieldNames?: ValueTypeDataFieldNames) => {\n let { name = 'name', value = 'value', type = 'type' } = dataFieldNames || {}\n // 处去字符串\n name = name?.trim()\n value = value?.trim()\n type = type?.trim()\n const set = new Set()\n const map = new Map()\n const len = data.length\n for (let i = 0; i < len; i++) {\n const item = data[i]\n // x轴\n const x = item[name] || ''\n // y轴\n const y = item[value] || ''\n // 系列(类型)\n const t = item[type] || ''\n set.add(x)\n if (map.has(t)) {\n const arr = map.get(t)\n // @ts-ignore\n arr.push({ name: x, value: y, ...item })\n map.set(t, arr)\n } else {\n // @ts-ignore\n map.set(t, [{ name: x, value: y, ...item }])\n }\n }\n const dimensions = Array.from(set)\n const dataset: { [key:string]:any } [] = []\n for (const [name, data] of map) {\n dataset.push({\n name,\n data\n })\n }\n return {\n dimensions,\n dataset\n }\n}\nexport default useTransformChartDataByAttrValue\n","import runCode from '../utils/runCode'\nexport const useValueFormatter = (formatter: string, value:string) => {\n if (formatter == null) return value\n const variables = (formatter).match(/\\{.*\\}/g)\n if (variables == null || variables.length === 0) {\n return value\n }\n const len = variables.length\n for (let i = 0; i < len; i++) {\n const variable = variables[i]\n if (variable == null || variable === '') break\n let statement = variable.slice(1, -1)?.trim()\n statement = statement?.replace(/value/g, value)\n try {\n let result = statement\n if ((/\\(.*\\)/g).test(statement) || (/[+/\\\\*]/g).test(statement)) {\n result = runCode(statement)\n }\n formatter = formatter.replace(variable, result)\n } catch (e) {\n formatter = formatter.replace(variable, statement)\n }\n }\n return formatter\n}\n\nexport default useValueFormatter\n","import { computed, unref } from 'vue'\r\nimport useVariablesInText from '../hooks/useVariablesInText'\r\nimport useValueFormatter from '../hooks/useValueFormatter'\r\nimport { handleFormatter, getLegendFormat, formatQfw } from './util'\r\nfunction getMarkLineData (chartsOptions: any) {\r\n if (chartsOptions.isShowMarkLine) {\r\n return {\r\n markLine: {\r\n data: [{ type: chartsOptions.markLineType }]\r\n }\r\n }\r\n } else {\r\n return {}\r\n }\r\n}\r\nconst getTransformProps = (chartsOptions, chartData, fontSize) => {\r\n switch (chartsOptions.type) {\r\n case 'bar':\r\n return getBarTransformProps(chartsOptions, chartData, fontSize)\r\n case 'line':\r\n return getLineTransformProps(chartsOptions, chartData, fontSize)\r\n case 'pie':\r\n return getPieTransformProps(chartsOptions, chartData, fontSize)\r\n case 'comboGraph':\r\n return getComboGraphTransformProps(chartsOptions, chartData, fontSize)\r\n default:\r\n return {}\r\n }\r\n}\r\n\r\nconst getBarTransformProps = (chartsOptions, chartData, fontSize) => {\r\n const yAxisLabelFormatter = chartsOptions.yAxisLabelFormatter\r\n const xAxisLabelFormatter = chartsOptions.xAxisLabelFormatter\r\n const { dimensions = [], dataset = [] } = chartData\r\n const series = computed(() => {\r\n const { gradientShow, gradientColors, gradientOffset, barBorderRadius } = chartsOptions\r\n const ds = dataset\r\n const len = ds.length\r\n const series: any = []\r\n for (let i = 0; i < len; i++) {\r\n const item = {\r\n ...ds[i],\r\n type: 'bar',\r\n barWidth: chartsOptions.barWidth,\r\n showBackground: chartsOptions.showBarBackground\r\n } as { [key: string]: any }\r\n const { isStack, stackColumns } = chartsOptions\r\n if (isStack && (stackColumns.includes(ds[i].name || !stackColumns))) {\r\n item.stack = 'stack'\r\n }\r\n item.label = {\r\n show: chartsOptions.labelShow,\r\n fontSize: chartsOptions.labelFontSize,\r\n position: chartsOptions.labelPosition,\r\n color: chartsOptions.labelColor,\r\n width: chartsOptions.labelWidth,\r\n overflow: chartsOptions.labelOverflow,\r\n formatter: (params) => {\r\n let formatter = ''\r\n let labelFormatter = chartsOptions.labelFormatter\r\n if (labelFormatter === '') {\r\n labelFormatter = '{c}'\r\n }\r\n const { seriesName, name, value, data } = params || {}\r\n formatter += useVariablesInText(\r\n labelFormatter,\r\n {\r\n textData: {\r\n name,\r\n value,\r\n a: seriesName,\r\n b: name,\r\n c: value || 0,\r\n ...data\r\n }\r\n },\r\n {\r\n useNewline: true,\r\n useSpace: true\r\n })\r\n return formatter\r\n }\r\n }\r\n item.itemStyle = {}\r\n if (gradientShow) {\r\n item.itemStyle = {\r\n color: {\r\n x: chartsOptions.isUseHorizontalAxis ? 1 : 0,\r\n y: 0,\r\n x2: 0,\r\n y2: chartsOptions.isUseHorizontalAxis ? 0 : 1,\r\n colorStops: [{\r\n offset: 0,\r\n color: chartsOptions.colors[i]\r\n }, {\r\n offset: gradientOffset,\r\n color: gradientColors[i]\r\n }, {\r\n offset: 1,\r\n color: gradientColors[i]\r\n }]\r\n }\r\n }\r\n }\r\n if (barBorderRadius) {\r\n const radius = barBorderRadius.split(',')\r\n if (radius?.length) {\r\n const radiusItems: any = []\r\n for (const rs of radius) {\r\n const value = parseFloat(rs)\r\n if (!isNaN(value)) {\r\n radiusItems.push(value)\r\n }\r\n }\r\n // item.itemStyle.borderRadius = radiusItems\r\n // echart4.4版本圆角属性名变更\r\n item.itemStyle.barBorderRadius = radiusItems\r\n }\r\n }\r\n if (chartsOptions.isShowMarkLine) {\r\n item.markLine = {\r\n data: [{ type: chartsOptions.markLineType }]\r\n }\r\n }\r\n series.push(item)\r\n }\r\n return series\r\n })\r\n const xAxisData = computed(() => {\r\n return dimensions.map((item) => {\r\n let result = {}\r\n if (item && typeof item === 'object') {\r\n result = {\r\n ...item,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n }\r\n } else {\r\n result = {\r\n value: item,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n }\r\n }\r\n return result\r\n })\r\n })\r\n return {\r\n tooltip: {\r\n trigger: 'axis',\r\n show: chartsOptions.tooltipShow,\r\n formatter: (params) => {\r\n const len = params.length\r\n let formatter = ''\r\n let tooltipFormatter = chartsOptions.tooltipFormatter\r\n // currentData = params[0]?.data\r\n if (tooltipFormatter === '') {\r\n tooltipFormatter = '{marker} {a} {c}'\r\n }\r\n for (let i = 0; i < len; i++) {\r\n const { marker, seriesName, name, value, data } = params[i] || {}\r\n if (i === 0) {\r\n let formatName = name\r\n if (typeof name === 'string' && name[0] === '0' && !isNaN(+name)) {\r\n formatName = (+name).toString()\r\n }\r\n formatter += `${useValueFormatter(xAxisLabelFormatter, formatName)}<br/>`\r\n }\r\n formatter += useVariablesInText(\r\n tooltipFormatter,\r\n {\r\n textData: {\r\n marker,\r\n name,\r\n value,\r\n Qfw: formatQfw,\r\n a: seriesName,\r\n b: name,\r\n c: value || 0,\r\n ...data\r\n }\r\n },\r\n {\r\n useNewline: true,\r\n useSpace: true\r\n }\r\n )\r\n formatter += '<br/>'\r\n }\r\n return formatter\r\n },\r\n // valueFormatter: (value) => {\r\n // return useVariablesInText(chartsOptions.tooltipValueFormatter as string, { value })\r\n // },\r\n textStyle: {\r\n color: chartsOptions.tooltipTextStyleColor,\r\n fontSize: fontSize\r\n },\r\n position: chartsOptions.tooltipPosition || undefined,\r\n backgroundColor: chartsOptions.tooltipBackgroundColor || '#fff'\r\n },\r\n legend: {\r\n type: chartsOptions.legendScroll ? 'scroll' : 'plain',\r\n width: chartsOptions.legendWidth,\r\n height: chartsOptions.legendHeight,\r\n show: chartsOptions.legendShow,\r\n orient: chartsOptions.legendOrient,\r\n top: chartsOptions.legendTop,\r\n left: chartsOptions.legendLeft,\r\n textStyle: {\r\n // lineHeight: parseFloat(chartsOptions.legendFontSize) + 8,\r\n rich: {\r\n text: {\r\n width: chartsOptions.legendTextWidth,\r\n color: chartsOptions.legendTextStyleColor,\r\n fontSize: chartsOptions.legendFontSize\r\n }\r\n }\r\n },\r\n itemHeight: chartsOptions.legendItemHeight,\r\n itemWidth: chartsOptions.legendItemWidth,\r\n itemGap: chartsOptions.legendItemGap,\r\n data: dataset.map((value, index) => {\r\n return {\r\n name: value.name,\r\n itemStyle: {\r\n color: chartsOptions.colors[index]\r\n },\r\n icon: chartsOptions.legendType\r\n }\r\n }),\r\n formatter: (name: string) => {\r\n return getLegendFormat(chartsOptions.legendFormatter, {\r\n name\r\n })\r\n }\r\n },\r\n xAxis: {\r\n type: chartsOptions.isUseHorizontalAxis ? 'value' : 'category',\r\n data: chartsOptions.isUseHorizontalAxis ? null : unref(xAxisData),\r\n inverse: chartsOptions.isUseHorizontalAxis ? chartsOptions.xAxisInverse : chartsOptions.axisInverse,\r\n minInterval: chartsOptions.xAxisMinInterval,\r\n splitLine: {\r\n show: chartsOptions.xAxisSplitLineShow,\r\n lineStyle: {\r\n color: chartsOptions.xAxisSplitLineStyleColor,\r\n type: chartsOptions.xAxisSplitLineType\r\n },\r\n interval: chartsOptions.xAxisSplitLineInterval\r\n },\r\n splitArea: {\r\n show: chartsOptions.xAxisSplitAreaShow\r\n },\r\n axisLabel: {\r\n color: chartsOptions.xAxisLabelColor,\r\n interval: chartsOptions.xAxisLabelInterval || 0,\r\n rotate: chartsOptions.xAxisLabelRotate,\r\n width: chartsOptions.xAxisLabelWidth,\r\n overflow: chartsOptions.xAxisLabelOverflow,\r\n fontSize: chartsOptions.xAxisLabelFontSize,\r\n formatter (value: string) {\r\n if (typeof value === 'string' && value[0] === '0' && !isNaN(+value)) {\r\n value = (+value).toString()\r\n }\r\n return useValueFormatter(xAxisLabelFormatter, value)\r\n }\r\n },\r\n axisLine: {\r\n show: chartsOptions.xAxisLineShow,\r\n lineStyle: {\r\n color: chartsOptions.xAxisLineStyleColor\r\n }\r\n },\r\n axisTick: {\r\n show: chartsOptions.xAxisTickShow\r\n },\r\n name: chartsOptions.xAxisName,\r\n nameTextStyle: {\r\n fontSize: chartsOptions.xAxisLabelFontSize,\r\n color: chartsOptions.xAxisLabelColor,\r\n align: 'left'\r\n },\r\n max: chartsOptions.xAxisMaxValue || null\r\n },\r\n yAxis: {\r\n type: chartsOptions.isUseHorizontalAxis ? 'category' : 'value',\r\n data: chartsOptions.isUseHorizontalAxis ? unref(dimensions) : null,\r\n inverse: chartsOptions.isUseHorizontalAxis ? chartsOptions.axisInverse : chartsOptions.yAxisInverse,\r\n minInterval: chartsOptions.yAxisMinInterval,\r\n splitLine: {\r\n show: chartsOptions.yAxisSplitLineShow,\r\n lineStyle: {\r\n color: chartsOptions.yAxisSplitLineStyleColor,\r\n type: chartsOptions.yAxisSplitLineType\r\n }\r\n },\r\n splitArea: {\r\n show: chartsOptions.yAxisSplitAreaShow\r\n },\r\n axisLabel: {\r\n show: chartsOptions.yAxisLabelShow,\r\n fontSize: chartsOptions.yAxisLabelFontSize,\r\n color: chartsOptions.yAxisLabelColor,\r\n rotate: chartsOptions.yAxisLabelRotate,\r\n width: chartsOptions.yAxisLabelWidth,\r\n overflow: chartsOptions.yAxisLabelOverflow,\r\n formatter (value: string) {\r\n return useValueFormatter(yAxisLabelFormatter, value)\r\n }\r\n },\r\n axisLine: {\r\n show: chartsOptions.yAxisLineAlwaysDisplay,\r\n lineStyle: {\r\n color: chartsOptions.yAxisLineStyleColor\r\n }\r\n },\r\n name: chartsOptions.yAxisName,\r\n nameTextStyle: {\r\n fontSize: chartsOptions.yAxisLabelFontSize,\r\n color: chartsOptions.yAxisLabelColor,\r\n align: 'right'\r\n },\r\n max: chartsOptions.yAxisMaxValue || null\r\n },\r\n series: unref(series)\r\n }\r\n}\r\n\r\nconst getLineTransformProps = (chartsOptions, chartData, fontSize) => {\r\n // console.log('xAxisName', chartsOptions, chartsOptions.xAxisName)\r\n const yAxisLabelFormatter = chartsOptions.yAxisLabelFormatter\r\n const xAxisLabelFormatter = chartsOptions.xAxisLabelFormatter\r\n const { dimensions = [], dataset = [] } = chartData\r\n const xAxisData = computed(() => {\r\n return dimensions.map((item) => {\r\n let result = {}\r\n if (item && typeof item === 'object') {\r\n result = {\r\n ...item,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n }\r\n } else {\r\n result = {\r\n value: item,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n }\r\n }\r\n return result\r\n })\r\n })\r\n const series = computed(() => {\r\n const temp = [] as { [key: string]: any }[]\r\n const len = dataset.length\r\n for (let i = 0; i < len; i++) {\r\n const shadowStyle: any = {}\r\n if (chartsOptions.shadowColor) {\r\n shadowStyle.shadowColor = chartsOptions.shadowColor\r\n shadowStyle.shadowBlur = chartsOptions.shadowBlur\r\n shadowStyle.shadowOffsetY = chartsOptions.shadowOffsetY\r\n shadowStyle.shadowOffsetX = chartsOptions.shadowOffsetX\r\n }\r\n temp.push({\r\n type: 'line',\r\n ...dataset[i],\r\n symbolSize: chartsOptions.symbolSize,\r\n smooth: chartsOptions.smooth,\r\n areaStyle: {\r\n color: chartsOptions.areaGradientShow\r\n ? {\r\n type: 'linear',\r\n x: 0,\r\n y: 0,\r\n x2: 0,\r\n y2: 1,\r\n colorStops: [{\r\n offset: 0,\r\n color: chartsOptions.colors[i]\r\n }, {\r\n offset: 1,\r\n color: chartsOptions.areaGradientColor || 'transparent'\r\n }],\r\n global: false\r\n }\r\n : chartsOptions.colors[i],\r\n opacity: chartsOptions.areaStyleOpacity\r\n },\r\n lineStyle: {\r\n width: chartsOptions.lineStyleWidth,\r\n ...shadowStyle\r\n },\r\n ...getMarkLineData(chartsOptions)\r\n })\r\n }\r\n return temp\r\n })\r\n return {\r\n tooltip: {\r\n trigger: 'axis',\r\n show: chartsOptions.tooltipShow,\r\n formatter: (params) => {\r\n const len = params.length\r\n let formatter = ''\r\n let tooltipFormatter = chartsOptions.tooltipFormatter\r\n if (tooltipFormatter === '') {\r\n tooltipFormatter = '{marker} {a} {c}'\r\n }\r\n for (let i = 0; i < len; i++) {\r\n const { marker, seriesName, name, value, data } = params[i] || {}\r\n if (i === 0) {\r\n formatter += `${name}<br/>`\r\n }\r\n formatter += useVariablesInText(\r\n tooltipFormatter,\r\n {\r\n textData: {\r\n marker,\r\n name,\r\n value,\r\n a: seriesName,\r\n b: name,\r\n c: value,\r\n ...data\r\n }\r\n },\r\n {\r\n useNewline: true,\r\n useSpace: true\r\n }\r\n )\r\n formatter += '<br/>'\r\n }\r\n return formatter\r\n },\r\n textStyle: {\r\n color: chartsOptions.tooltipTextStyleColor,\r\n fontSize: fontSize.value\r\n },\r\n position: chartsOptions.tooltipPosition || undefined,\r\n backgroundColor: chartsOptions.tooltipBackgroundColor || '#fff'\r\n },\r\n xAxis: {\r\n name: chartsOptions.xAxisName,\r\n type: 'category',\r\n data: unref(xAxisData),\r\n minInterval: chartsOptions.xAxisMinInterval,\r\n splitLine: {\r\n show: chartsOptions.xAxisSplitLineShow,\r\n lineStyle: {\r\n color: chartsOptions.xAxisSplitLineStyleColor\r\n }\r\n },\r\n axisLabel: {\r\n color: chartsOptions.xAxisLabelColor,\r\n interval: chartsOptions.xAxisLabelInterval || 0,\r\n rotate: chartsOptions.xAxisLabelRotate,\r\n width: chartsOptions.xAxisLabelWidth,\r\n overflow: chartsOptions.xAxisLabelOverflow,\r\n formatter (value: string) {\r\n return useValueFormatter(xAxisLabelFormatter, value)\r\n }\r\n },\r\n axisLine: {\r\n lineStyle: {\r\n color: chartsOptions.xAxisLineStyleColor\r\n }\r\n },\r\n axisTick: {\r\n show: chartsOptions.xAxisTickShow\r\n }\r\n },\r\n yAxis: {\r\n type: 'value',\r\n name: chartsOptions.yAxisName,\r\n minInterval: chartsOptions.yAxisMinInterval,\r\n splitLine: {\r\n show: chartsOptions.yAxisSplitLineShow,\r\n lineStyle: {\r\n color: chartsOptions.yAxisSplitLineStyleColor\r\n }\r\n },\r\n axisLabel: {\r\n fontSize: fontSize,\r\n color: chartsOptions.yAxisLabelColor,\r\n formatter (value: string) {\r\n return useValueFormatter(yAxisLabelFormatter, value)\r\n }\r\n },\r\n axisLine: {\r\n show: chartsOptions.yAxisLineAlwaysDisplay,\r\n lineStyle: {\r\n color: chartsOptions.yAxisLineStyleColor\r\n }\r\n }\r\n },\r\n // 图例\r\n legend: {\r\n show: chartsOptions.legendShow,\r\n orient: chartsOptions.legendOrient,\r\n top: chartsOptions.legendTop,\r\n left: chartsOptions.legendLeft,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n },\r\n series: unref(series)\r\n }\r\n}\r\n\r\nconst getPieTransformProps = (chartsOptions, chartData, fontSize) => {\r\n const { dataset = [] } = chartData\r\n let { data = [] } = dataset[0] || {}\r\n if (Array.isArray(chartsOptions.colors)) {\r\n const isUseLabelColors = chartsOptions.isUseLabelColors\r\n const colors = chartsOptions.colors\r\n data = data.map((item, index) => ({\r\n label: isUseLabelColors ? { color: colors[index] } : {},\r\n ...item\r\n }))\r\n }\r\n return {\r\n title: {\r\n text: chartsOptions.titleText,\r\n subtext: chartsOptions.titleSubtext,\r\n textStyle: {\r\n fontSize: chartsOptions.titleFontSize,\r\n fontWeight: chartsOptions.fontWeight,\r\n color: chartsOptions.titleColor\r\n },\r\n left: chartsOptions.textAlign || 'center'\r\n },\r\n // 提示\r\n tooltip: {\r\n show: chartsOptions.tooltipShow,\r\n trigger: chartsOptions.tooltipTrigger,\r\n formatter: (params) => {\r\n const { marker, seriesName, name, value, percent, data } = params || {}\r\n return useVariablesInText(\r\n chartsOptions.tooltipFormatter,\r\n {\r\n textData: {\r\n marker,\r\n name,\r\n value,\r\n percent,\r\n a: seriesName,\r\n b: name,\r\n c: value,\r\n d: percent,\r\n ...data\r\n }\r\n },\r\n {\r\n useNewline: true,\r\n useSpace: true\r\n }\r\n )\r\n },\r\n textStyle: {\r\n color: chartsOptions.tooltipTextStyleColor || '#333'\r\n },\r\n backgroundColor: chartsOptions.tooltipBackgroundColor || '#fff',\r\n borderColor: chartsOptions.tooltipBorderColor || '#eee'\r\n },\r\n // 图例\r\n legend: {\r\n show: chartsOptions.legendShow,\r\n orient: chartsOptions.legendOrient,\r\n top: chartsOptions.legendTop,\r\n left: chartsOptions.legendLeft,\r\n textStyle: {\r\n color: chartsOptions.legendTextStyleColor,\r\n fontSize: fontSize === 18 ? fontSize : chartsOptions.labelFontSize\r\n }\r\n },\r\n series: [\r\n {\r\n data,\r\n type: 'pie',\r\n radius: [chartsOptions.innerRadius, chartsOptions.outerRadius],\r\n center: [chartsOptions.centerLeft, chartsOptions.centerTop],\r\n roseType: chartsOptions.roseType,\r\n avoidLabelOverlap: false,\r\n minAngle: chartsOptions.minAngle,\r\n label: {\r\n show: chartsOptions.labelPosition !== 'center' && chartsOptions.labelShow,\r\n color: chartsOptions.labelColor,\r\n fontSize: fontSize === 18 ? fontSize : chartsOptions.labelFontSize,\r\n position: chartsOptions.labelPosition,\r\n formatter: handleFormatter(chartsOptions.labelFormatter)\r\n },\r\n labelLine: {\r\n show: chartsOptions.labelLineShow,\r\n length: chartsOptions.labelLineLength,\r\n length2: chartsOptions.labelLineLength2\r\n },\r\n emphasis: {\r\n itemStyle: {\r\n shadowBlur: 10,\r\n shadowOffsetX: 0,\r\n shadowColor: 'rgba(0, 0, 0, 0.5)'\r\n },\r\n label: {}\r\n }\r\n }\r\n ]\r\n }\r\n}\r\n\r\nconst getComboGraphTransformProps = (chartsOptions, chartData, fontSize) => {\r\n const { dimensions = [], dataset = [] } = chartData\r\n const xAxisData = computed(() => {\r\n return dimensions.map((item) => {\r\n let result = {}\r\n if (item && typeof item === 'object') {\r\n result = {\r\n ...item,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n }\r\n } else {\r\n result = {\r\n value: item,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n }\r\n }\r\n return result\r\n })\r\n })\r\n const series = computed(() => {\r\n const temp = [] as { [key: string]: any }[]\r\n const len = dataset.length\r\n const seriesTypes = chartsOptions.seriesTypes\r\n for (let i = 0; i < len; i++) {\r\n const seriesType = seriesTypes[i]\r\n const { type, axisIndex } = seriesType || {}\r\n let series = {\r\n type: type,\r\n yAxisIndex: axisIndex,\r\n ...dataset[i]\r\n } as { [key: string]: any }\r\n if (type === 'line') {\r\n const shadowStyle: any = {}\r\n if (chartsOptions.shadowColor) {\r\n shadowStyle.shadowColor = chartsOptions.shadowColor\r\n shadowStyle.shadowBlur = chartsOptions.shadowBlur\r\n shadowStyle.shadowOffsetY = chartsOptions.shadowOffsetY\r\n shadowStyle.shadowOffsetX = chartsOptions.shadowOffsetX\r\n }\r\n series = {\r\n ...series,\r\n symbolSize: chartsOptions.symbolSize,\r\n smooth: chartsOptions.smooth,\r\n itemStyle: {\r\n color: chartsOptions.colors[i]\r\n },\r\n areaStyle: {\r\n color: chartsOptions.areaGradientShow\r\n ? {\r\n type: 'linear',\r\n x: 0,\r\n y: 0,\r\n x2: 0,\r\n y2: 1,\r\n colorStops: [{\r\n offset: 0,\r\n color: chartsOptions.colors[i]\r\n }, {\r\n offset: 1,\r\n color: chartsOptions.areaGradientColor || 'transparent'\r\n }],\r\n global: false\r\n }\r\n : chartsOptions.colors[i],\r\n opacity: chartsOptions.areaStyleOpacity\r\n },\r\n lineStyle: {\r\n width: chartsOptions.lineStyleWidth,\r\n ...shadowStyle\r\n }\r\n }\r\n }\r\n if (type === 'bar') {\r\n const { gradientShow, gradientColors, gradientOffset } = chartsOptions\r\n const itemStyle: any = {}\r\n if (chartsOptions.barBorderRadius) {\r\n const radius = chartsOptions.barBorderRadius.split(',')\r\n if (radius?.length) {\r\n const radiusItems: any = []\r\n for (const rs of radius) {\r\n const value = parseFloat(rs)\r\n if (!isNaN(value)) {\r\n radiusItems.push(value)\r\n }\r\n }\r\n itemStyle.borderRadius = radiusItems\r\n }\r\n }\r\n if (gradientShow) {\r\n itemStyle.color = {\r\n x: 0,\r\n y: 0,\r\n x2: 0,\r\n y2: 1,\r\n colorStops: [{\r\n offset: 0,\r\n color: chartsOptions.colors[i]\r\n }, {\r\n offset: gradientOffset,\r\n color: gradientColors[i]\r\n }, {\r\n offset: 1,\r\n color: gradientColors[i]\r\n }]\r\n }\r\n }\r\n series = {\r\n ...series,\r\n barWidth: chartsOptions.barWidth,\r\n itemStyle\r\n }\r\n }\r\n if (chartsOptions.isShowMarkLine) {\r\n series.markLine = {\r\n data: [{ type: chartsOptions.markLineType }]\r\n }\r\n }\r\n temp.push(series)\r\n }\r\n return temp\r\n })\r\n const yAxis = computed(() => {\r\n const yAxis = chartsOptions.yAxis\r\n return yAxis?.map((axis, index) => {\r\n return {\r\n type: 'value',\r\n minInterval: chartsOptions.yAxisMinInterval,\r\n splitLine: {\r\n show: index === 0 ? chartsOptions.yAxisLeftSplitLineShow : chartsOptions.yAxisRightSplitLineShow,\r\n lineStyle: {\r\n color: chartsOptions.yAxisSplitLineStyleColor,\r\n type: index === 0 ? chartsOptions.yAxisLeftSplitLineType : chartsOptions.yAxisRightSplitLineType\r\n }\r\n },\r\n splitArea: {\r\n show: chartsOptions.yAxisSplitAreaShow\r\n },\r\n axisLabel: {\r\n fontSize: fontSize,\r\n show: chartsOptions.yAxisLabelShow,\r\n color: chartsOptions.yAxisLabelColor,\r\n formatter (value: string) {\r\n return useValueFormatter(axis.axisLabelFormatter, value)\r\n }\r\n },\r\n axisLine: {\r\n show: chartsOptions.yAxisLineAlwaysDisplay,\r\n lineStyle: {\r\n color: chartsOptions.yAxisLineStyleColor\r\n }\r\n },\r\n name: index === 0 ? chartsOptions.yAxisLeftName : chartsOptions.yAxisRightName,\r\n nameTextStyle: {\r\n fontSize: chartsOptions.yAxisLabelFontSize,\r\n color: chartsOptions.yAxisLabelColor,\r\n align: index === 0 ? 'right' : 'left'\r\n },\r\n max: chartsOptions.yAxisMaxValue || null\r\n }\r\n })\r\n })\r\n return {\r\n legend: {\r\n show: chartsOptions.legendShow,\r\n orient: chartsOptions.legendOrient,\r\n top: chartsOptions.legendTop,\r\n left: chartsOptions.legendLeft,\r\n textStyle: {\r\n color: chartsOptions.legendTextStyleColor,\r\n fontSize: fontSize\r\n }\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n show: chartsOptions.tooltipShow,\r\n formatter: (params) => {\r\n const len = params.length\r\n let formatter = ''\r\n let tooltipFormatter = chartsOptions.tooltipFormatter\r\n if (tooltipFormatter === '') {\r\n tooltipFormatter = '{marker} {a} {c}'\r\n }\r\n const seriesTypes = chartsOptions.seriesTypes\r\n for (let i = 0; i < len; i++) {\r\n const seriesType = seriesTypes[i]\r\n const { tooltipFormatter: _tooltipFormatter } = seriesType || {}\r\n const { marker, seriesName, name, value, data } = params[i] || {}\r\n if (i === 0) {\r\n formatter += `${name}<br/>`\r\n }\r\n formatter += useVariablesInText(\r\n // 如果系列有提示框组件就使用自定义,没有就用默认的\r\n _tooltipFormatter || tooltipFormatter,\r\n {\r\n textData: {\r\n marker,\r\n name,\r\n value,\r\n seriesName,\r\n a: seriesName,\r\n b: name,\r\n c: value,\r\n ...data\r\n }\r\n },\r\n {\r\n useNewline: true,\r\n useSpace: true\r\n }\r\n )\r\n formatter += '<br/>'\r\n }\r\n return formatter\r\n },\r\n textStyle: {\r\n color: chartsOptions.tooltipTextStyleColor || '#333',\r\n fontSize: fontSize\r\n },\r\n backgroundColor: chartsOptions.tooltipBackgroundColor || '#fff',\r\n borderColor: chartsOptions.tooltipBorderColor || '#eee'\r\n },\r\n xAxis: {\r\n name: chartsOptions.xAxisName,\r\n minInterval: chartsOptions.xAxisMinInterval,\r\n type: 'category',\r\n data: unref(xAxisData),\r\n splitLine: {\r\n show: chartsOptions.xAxisSplitLineShow,\r\n lineStyle: {\r\n color: chartsOptions.xAxisSplitLineStyleColor\r\n }\r\n },\r\n axisLabel: {\r\n color: chartsOptions.xAxisLabelColor,\r\n interval: chartsOptions.xAxisLabelInterval || 0,\r\n rotate: chartsOptions.xAxisLabelRotate,\r\n width: chartsOptions.xAxisLabelWidth,\r\n overflow: chartsOptions.xAxisLabelOverflow\r\n },\r\n axisLine: {\r\n lineStyle: {\r\n color: chartsOptions.xAxisLineStyleColor\r\n }\r\n },\r\n axisTick: {\r\n show: chartsOptions.xAxisTickShow\r\n }\r\n },\r\n yAxis: unref(yAxis),\r\n series: unref(series)\r\n }\r\n}\r\n\r\nconst getCommonTransformProps = (chartsOptions) => {\r\n return {\r\n title: {\r\n text: chartsOptions.titleText,\r\n subtext: chartsOptions.titleSubtext,\r\n textStyle: {\r\n fontSize: chartsOptions.titleFontSize,\r\n fontWeight: chartsOptions.fontWeight,\r\n color: chartsOptions.titleColor\r\n },\r\n left: chartsOptions.textAlign || 'center'\r\n },\r\n grid: {\r\n top: chartsOptions.gridTop,\r\n bottom: chartsOptions.gridBottom,\r\n left: chartsOptions.gridLeft,\r\n right: chartsOptions.gridRight,\r\n containLabel: chartsOptions.gridContainLabel\r\n },\r\n color: chartsOptions.colors\r\n }\r\n}\r\n\r\nconst transformProps = (chartsOptions, chartData, fontSize = 12) => {\r\n return {\r\n ...getCommonTransformProps(chartsOptions),\r\n ...getTransformProps(chartsOptions, chartData, fontSize)\r\n }\r\n}\r\nexport default transformProps\r\n","// 指标库相关内容\r\nimport indicators from './indicator'\r\n// 通用函数\r\nimport runCode from './utils/runCode'\r\n// 工作台专用\r\nimport useTransformChartDataByAttrKey from './hooks/useTransformChartDataByAttrKey'\r\nimport useTransformChartDataByAttrValue from './hooks/useTransformChartDataByAttrValue'\r\nimport useValueFormatter from './hooks/useValueFormatter'\r\nimport useVariablesInText from './hooks/useVariablesInText'\r\nimport transformProps from './utils/transformProps'\r\nimport { getIndicatorParams } from './utils/util'\r\n\r\nexport default {\r\n ...indicators,\r\n runCode,\r\n useTransformChartDataByAttrKey,\r\n useTransformChartDataByAttrValue,\r\n useValueFormatter,\r\n useVariablesInText,\r\n transformProps,\r\n getIndicatorParams\r\n}"],"names":["runCode","code","data","useFn","__spreadValues","dayjs","paramsStr","params","key","runFn","result","e","useVariablesInText","formatter","textData","codeData","useNewline","useSpace","variables","i","variable","statement","reg","textVariables","j","textVariable","usedVariable","res","str","lowerCaseIncludes","v1","v2","len","s","hasOwn","v","k","getConditions","conditions","item","getFormatStep","format","value","formatStep","handleFormatter","getLegendFormat","lineBreakCount","_a","lineBreakStr","text","formatQfw","str1","str2","index","getIndicatorParams","_0","__async","graphicConfig","request","INDICATOR_URL","PAGE_ID","dataSourceId","leftAxisList","rightAxisList","queryColumnList","indicators","unref","otherList","idMap","indexCode","parentId","promiseList","id","resolve","reject","success","a","b","c","err","MODEL_KEY_LIST","modelValue","excludeAttr","getGlobalModel","getCalcWays","props","around","unit","pageMode","componentList","sTime","eTime","component","interval","intervalUnit","startTime","endTime","operate","useCurrentTime","type","mode","model","diffValue","handleParams","calcWays","dateCalcTypes","activeKey","componentId","vals","fieldVal","handleConditions","list","cloneDeep","isSameLevel","cs","joinParams","conKey","handleIndicator","indicator","classification","sortData","getCpntSortData","label","name","location","show","indexCodeNum","calcType","builtInFormula","builtInValueSource","builtInCalcWay","formula","aggregate","distinct","dimByCount","dataTo","conditionData","componentField","setFieldValue","itemObj","__spreadProps","handleSqlConditions","controlList","classificationList","rowHeaderList","dimensionList","seriesList","handleControlList","conditionList","ol","l","cItem","sqlConditions","control","keyName","prop","dateFormat","modelKey","dataType","customValue","sqlCondition","getConditionItem","conditionLabel","conditionKey","conditionValueType","rule","notGlobal","typeGuid","alias","ruleValue","attr","handleVariableList","variableList","handleVarList","variableItem","operateValue","operateMode","operateType","rKey","record","propKey","recordValue","RECORD","customFormat","dateValue","propValue","knList","_time","step","handleSort","sort","customOrderColumns","labels","columnNames","orders","sortCpnts","customSort","order","formatIndicatorParams","otherParams","globalModel","isGroupTable","pageId","isPivotTable","source","dataViewId","plugin","layer","chartType","formFields","variableConditions","idxLibMode","preview","edvDataSetId","gParams","ruleVaule","globalList","notGlobalList","classifications","typeGuidString","customGroup","truncations","truncation","num","_b","series","indicatorList","leftAxis","rightAxis","indicatorsData","_d","_c","queryColumns","_f","_e","queryColumn","field","rowHeaders","resultRowHeaderList","_g","pivotColumnHeader","pivotColumnData","resultList","calc","filter","sorts","aggregateMethod","rowDimensionKeys","colDimensionKeys","fl","_h","flParams","__objRest","target","_i","fieldType","columnData","sortParams","_j","_k","q","pathname","resultParams","_l","cascadeControl","someParams","classParams","fieldValue","useTransformChartDataByAttrKey","dataFieldNames","types","set","map","dataLen","typesLen","vs","n","x","dimensions","dataset","useTransformChartDataByAttrValue","y","t","arr","useValueFormatter","getMarkLineData","chartsOptions","getTransformProps","chartData","fontSize","getBarTransformProps","getLineTransformProps","getPieTransformProps","getComboGraphTransformProps","yAxisLabelFormatter","xAxisLabelFormatter","computed","gradientShow","gradientColors","gradientOffset","barBorderRadius","ds","isStack","stackColumns","labelFormatter","seriesName","radius","radiusItems","rs","xAxisData","tooltipFormatter","marker","formatName","temp","shadowStyle","isUseLabelColors","colors","percent","seriesTypes","seriesType","axisIndex","itemStyle","yAxis","axis","_tooltipFormatter","getCommonTransformProps","transformProps"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/utils/runCode.ts","../src/hooks/useVariablesInText.ts","../src/utils/util.ts","../src/utils/constant.ts","../src/indicator.ts","../src/hooks/useTransformChartDataByAttrKey.ts","../src/hooks/useTransformChartDataByAttrValue.ts","../src/hooks/useValueFormatter.ts","../src/utils/transformProps.ts","../src/index.ts"],"sourcesContent":["import dayjs from 'dayjs'\nconst runCode = (code: string, data?: { [key:string]: any }) => {\n const useFn = {\n dayjs,\n ...data\n }\n let paramsStr = ''\n const params: any = []\n for (const key in useFn) {\n paramsStr += `${key},`\n params.push(useFn[key])\n }\n paramsStr = paramsStr.replace(/,$/, '')\n const runFn = `function (${paramsStr}){return ${code}}`\n let result\n try {\n // eslint-disable-next-line no-new-func\n result = Function(`\"use strict\";return (${runFn})`)()(...params)\n } catch (e) {\n // console.error()\n return code\n }\n return result\n}\n\nexport default runCode\n","import runCode from '../utils/runCode'\nexport const useVariablesInText = (\n formatter: string = '',\n { textData, codeData }: { textData?: { [key:string]: any }, codeData?: { [key:string]: any } } = {},\n { useNewline = false, useSpace = false } = {}\n) => {\n // 引入全局变量\n const data = { ...textData }\n const variables = (formatter || '').match(/\\{(.+?)\\}/g)\n if (variables == null || variables.length === 0) {\n return formatter\n }\n for (let i = 0; i < variables.length; i++) {\n const variable = variables[i]\n let statement = variable.slice(1, -1).trim()\n const reg = /[\\u4e00-\\u9fa5a-z-_A-Z0-9]*/g\n const textVariables: any = statement.match(reg)\n for (let j = 0; j < textVariables.length; j++) {\n const textVariable = textVariables[j]\n const usedVariable = data[textVariable]\n if (usedVariable != null) {\n // 使用的变量\n statement = statement.replace(textVariable, usedVariable)\n }\n }\n if ((/\\(.*\\)/g).test(statement) || (/[+/\\\\*]/g).test(statement)) {\n statement = runCode(statement, codeData)\n }\n formatter = formatter.replace(variable, statement)\n }\n // 替换换行\n if (useNewline) {\n formatter = formatter?.replace(/\\n|\\\\n/g, '<br/>')\n }\n // 替换空格\n if (useSpace) {\n formatter = formatter?.replace(/\\s{2,}?/g, '&nbsp;&nbsp;')\n }\n // 千分位格式化\n formatter = formatter.replace(/Qfw\\((.*?)\\)/, (res, str) => textData?.Qfw ? textData?.Qfw(str) : str)\n return formatter\n}\n\nexport default useVariablesInText\n","import useVariablesInText from '../hooks/useVariablesInText'\r\nimport { unref } from 'vue'\r\n/**\r\n * 字符串1 中是否包含 字符串2 (会全部转成小写)\r\n * @param v1 字符串1\r\n * @param v2 字符串2\r\n * @constructor\r\n */\r\nexport const lowerCaseIncludes = (v1:any, v2:any): boolean => {\r\n if (typeof v1 === 'string' && typeof v2 === 'string') {\r\n return v1.toLocaleLowerCase().includes(v2.toLocaleLowerCase())\r\n } else if (typeof v1 === 'string' && Array.isArray(v2)) {\r\n const len = v2.length\r\n for (let i = 0; i < len; i++) {\r\n const s = v2[i]\r\n if (typeof s === 'string' && v1.toLocaleLowerCase().includes(s.toLocaleLowerCase())) {\r\n return true\r\n }\r\n }\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * 判断 key 是否在对象上\r\n * @param v\r\n * @param k\r\n */\r\nexport const hasOwn = (v: object, k: string | symbol): k is keyof typeof v => Object.prototype.hasOwnProperty.call(v, k)\r\n\r\nexport const getConditions = (conditions) => {\r\n const result: any = []\r\n for (const item of conditions) {\r\n if (item.conditions) {\r\n result.push(...getConditions(item.conditions))\r\n } else if (item?.dataType === 'component') {\r\n result.push(item)\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport function getFormatStep (format: string) {\r\n const value = format.split('-')\r\n let formatStep = ''\r\n if (value?.length) {\r\n switch (value[value.length - 1]) {\r\n case 'YYYY':\r\n formatStep = 'year'\r\n break\r\n case 'MM':\r\n formatStep = 'month'\r\n break\r\n case 'DD':\r\n formatStep = 'day'\r\n break\r\n default:\r\n break\r\n }\r\n }\r\n return formatStep\r\n}\r\n\r\nexport const handleFormatter = (formatter: string) => {\r\n return formatter.replace(/\\\\n/g, '\\n')\r\n}\r\n\r\n/**\r\n * 图表的图例格式化\r\n * @param format 表达式\r\n * @param textData 传入参数\r\n * @returns 显示的图例文本\r\n */\r\nexport const getLegendFormat = (format: string = '', textData: any) => {\r\n const variables = format.match(/\\{(.+?)\\}/g)\r\n // 换行符个数\r\n const lineBreakCount = format.split('\\n')?.length - 1\r\n let lineBreakStr = ''\r\n if (lineBreakCount) {\r\n for (let i = 0; i < lineBreakCount; i++) {\r\n lineBreakStr += '\\n'\r\n }\r\n }\r\n let text = format\r\n if (variables?.length) {\r\n for (const item of variables) {\r\n const str = useVariablesInText(\r\n item,\r\n {\r\n textData\r\n },\r\n {\r\n useNewline: false,\r\n useSpace: false\r\n }\r\n )\r\n if (str) {\r\n text = text.replace(item, str)\r\n }\r\n }\r\n return `${lineBreakStr}{text|${text}}`\r\n } else {\r\n return format\r\n }\r\n}\r\n\r\n// 千分位转换\r\nexport function formatQfw (str: string) {\r\n let result = ''\r\n let str1 = ''\r\n let str2 = ''\r\n let value = ''\r\n if (str.indexOf('.') > -1) {\r\n str1 = str.split('.')[0] // 千分位处理部分\r\n str2 = str.split('.')[1] // 小数值\r\n } else {\r\n str1 = str\r\n }\r\n let index = 0\r\n let len = 0\r\n len = str1.length - 1\r\n while (len >= 0) {\r\n index % 3 === 0 && index !== 0\r\n ? str1[len] === '-'\r\n ? (result += str1[len])\r\n : (result += ',' + str1[len])\r\n : (result += str1[len])\r\n len--\r\n index++\r\n }\r\n result = result\r\n .split('')\r\n .reverse()\r\n .join('')\r\n if (str.indexOf('.') > -1) {\r\n value = result + '.' + str2\r\n } else {\r\n value = result\r\n }\r\n return value\r\n}\r\n\r\n// 根据指标获取其他参数-用于条件查询\r\nexport async function getIndicatorParams ({ graphicConfig, request, INDICATOR_URL = '', PAGE_ID, dataSourceId }) {\r\n try {\r\n const { leftAxisList = [], rightAxisList = [], queryColumnList = [], indicators = [] } = unref(graphicConfig)\r\n const otherList = [...leftAxisList, ...rightAxisList, ...queryColumnList, ...indicators]\r\n const idMap: any = {}\r\n for (const item of otherList) {\r\n const { indexCode = '', parentId = '' } = item\r\n if (parentId && !hasOwn(item, 'calcType') && !idMap[parentId]) {\r\n idMap[parentId] = indexCode\r\n }\r\n }\r\n if (Object.keys(idMap)?.length) {\r\n const promiseList: any = []\r\n for (const id in idMap) {\r\n promiseList.push(\r\n new Promise((resolve, reject) => {\r\n request\r\n .post(\r\n `${INDICATOR_URL}/diagram/hrpIndexWithComplex`,\r\n {\r\n pageId: PAGE_ID,\r\n indexGuid: id,\r\n indexCode: idMap[id],\r\n dataSourceId\r\n }\r\n )\r\n .then((res: any) => {\r\n const { success, data = [] } = res.data\r\n if (success && data?.dataViewColumns?.length) {\r\n resolve(data.dataViewColumns)\r\n } else {\r\n reject(data)\r\n }\r\n })\r\n .catch((e) => {\r\n console.error(e)\r\n reject(e)\r\n })\r\n })\r\n )\r\n }\r\n const res = await Promise.all(promiseList)\r\n const resultList = res.reduce((a: any, b: any) =>\r\n a.filter((c: any) => b.find((v: any) => v.typeGuid === c.typeGuid))\r\n )\r\n return resultList.filter((v: any) => v.typeGuid)\r\n }\r\n } catch (err) { \r\n console.error(err)\r\n }\r\n return ([])\r\n}\r\n","export const MODEL_KEY_LIST = ['table', 'bar', 'combograph', 'line', 'pie', 'radar', 'scatter', 'list', 'circulate']\r\n","import { unref } from 'vue'\r\nimport dayjs from 'dayjs'\r\nimport { cloneDeep } from 'lodash-es'\r\nimport { hasOwn, lowerCaseIncludes, getConditions, getFormatStep } from './utils/util'\r\nimport { MODEL_KEY_LIST } from './utils/constant'\r\n\r\nlet modelValue = new Map()\r\nconst excludeAttr = [\r\n 'keyValue',\r\n 'conditionKey',\r\n 'conditionLabel',\r\n 'conditionName',\r\n 'conditionValueType',\r\n 'customValue',\r\n 'id',\r\n 'keyName'\r\n]\r\n\r\nconst getGlobalModel = (key: string) => {\r\n return modelValue.get(key)\r\n}\r\n\r\n// 日期计算\r\nconst getCalcWays = (data: { [key:string]:any }, props: { [key:string]: any } = {}) => {\r\n const { around, unit, id } = data\r\n let result = ''\r\n const { pageMode = '', componentList = [] } = props?.graphicConfig || {}\r\n let sTime: any = null\r\n let eTime: any = null\r\n if (pageMode === 'design') {\r\n const component: any = componentList?.find((v: { [key:string]:any }) => v.id === id)\r\n if (!component) {\r\n return []\r\n }\r\n const { interval, intervalUnit, startTime, endTime, operate, useCurrentTime } = component || {}\r\n if (useCurrentTime) {\r\n sTime = dayjs().subtract(interval, intervalUnit)\r\n eTime = dayjs()\r\n }\r\n if (startTime) {\r\n sTime = dayjs(startTime)\r\n }\r\n if (endTime) {\r\n eTime = dayjs(endTime)\r\n }\r\n if (operate) {\r\n const { type, value, mode } = operate\r\n switch (type) {\r\n case 'add':\r\n sTime = sTime ? sTime.add(value, mode) : sTime\r\n eTime = eTime ? eTime.add(value, mode) : eTime\r\n break\r\n case 'minus':\r\n sTime = sTime ? sTime.subtract(value, mode) : sTime\r\n eTime = eTime ? eTime.subtract(value, mode) : eTime\r\n }\r\n }\r\n } else {\r\n const model = getGlobalModel(id) || {}\r\n if (unref(model.startTime)) {\r\n sTime = dayjs(unref(model.startTime))\r\n }\r\n if (unref(model.endTime)) {\r\n eTime = dayjs(unref(model.endTime))\r\n }\r\n }\r\n if (sTime && eTime) {\r\n const diffValue = eTime.diff(sTime, unit.toLowerCase())\r\n result = `${around === 'before' ? '-' : ''}${diffValue + 1}`\r\n }\r\n return result ? [result] : []\r\n}\r\n\r\nconst handleParams = (params: any, type: string | undefined) => {\r\n if (type) {\r\n // 处理sqlConditions中的sqlConditon\r\n if (hasOwn(params, 'indexCode')) {\r\n params.hrpIndexCode = params.indexCode\r\n delete params.indexCode\r\n }\r\n if (hasOwn(params, 'indexCodeNum')) {\r\n params.hrpIndexCodeNum = params.indexCodeNum\r\n delete params.indexCodeNum\r\n }\r\n if (hasOwn(params, 'dataType')) {\r\n delete params.dataType\r\n }\r\n } else {\r\n const { calcWays = [], dateCalcTypes = [], activeKey, componentId = '' } = params\r\n if (activeKey === 5 && calcWays?.length && dateCalcTypes?.length && componentId) {\r\n const vals = calcWays[0].split('-')\r\n if (vals?.length > 1) {\r\n if (vals[0] === 'rangeValue') {\r\n // 范围差值\r\n params.calcWays = getCalcWays({\r\n around: vals[1],\r\n unit: dateCalcTypes[0],\r\n id: componentId\r\n })\r\n }\r\n }\r\n delete params.radioValue\r\n }\r\n if (hasOwn(params, 'dataType')) {\r\n if (params.fieldType === 'DATE') {\r\n params.label = params.fieldName\r\n }\r\n if (params.dataType === 'component') {\r\n if (params.fieldValue === 'PARENT') {\r\n let fieldVal = params.modelKey\r\n if (fieldVal && params.prop) {\r\n fieldVal += `-${params.prop}`\r\n }\r\n params.fieldValue = '${' + fieldVal + '}'\r\n } else {\r\n params.fieldValue = '${' + params.fieldValue + '}'\r\n }\r\n }\r\n delete params.dataType\r\n }\r\n if (hasOwn(params, 'activeKey')) {\r\n delete params.activeKey\r\n }\r\n if (hasOwn(params, 'radioValue')) {\r\n delete params.radioValue\r\n }\r\n if (hasOwn(params, 'indexCode')) {\r\n params.hrpIndexCode = params.indexCode\r\n delete params.indexCode\r\n }\r\n if (hasOwn(params, 'indexCodeNum')) {\r\n params.hrpIndexCodeNum = params.indexCodeNum\r\n delete params.indexCodeNum\r\n }\r\n if (params.dataType !== 'component' && params.useCurrentTime) {\r\n // 时间值为当前时间\r\n params.fieldValue = dayjs().format(params.dateFormat)\r\n }\r\n if (hasOwn(params, 'modelKey')) {\r\n delete params.modelKey\r\n }\r\n if (hasOwn(params, 'prop')) {\r\n delete params.prop\r\n }\r\n delete params.useCurrentTime\r\n }\r\n}\r\n\r\n// 递归格式化conditions的数据\r\nconst handleConditions = (list: { [key: string]: any } [], type?: string) => {\r\n const result: any = []\r\n if (list?.length) {\r\n cloneDeep(list).forEach((item) => {\r\n if (item.join && item.conditions) {\r\n const isSameLevel = !item.conditions.some((v: any) => v.join && v.conditions)\r\n item.conditions.forEach((cs: any, index: number) => {\r\n handleParams(cs, type)\r\n const joinParams: { [key: string]: any } = {}\r\n if (index < item.conditions.length - 1) {\r\n joinParams.join = item.join\r\n }\r\n if (isSameLevel) {\r\n result.push({\r\n ...joinParams,\r\n ...cs\r\n })\r\n } else {\r\n if (cs.join && cs.conditions) {\r\n const conKey = type ? 'sqlConditions' : 'conditions'\r\n result.push({\r\n [conKey]: handleConditions([cs], type),\r\n ...joinParams\r\n })\r\n } else {\r\n result.push({\r\n ...joinParams,\r\n ...cs\r\n })\r\n }\r\n }\r\n })\r\n } else {\r\n handleParams(item, type)\r\n result.push(item)\r\n }\r\n })\r\n }\r\n return result\r\n}\r\n\r\nconst handleIndicator = (indicator: { [key:string]: any } = {}, classification: any) => {\r\n if (indicator?.sortCpnts && classification) {\r\n const sortData = getCpntSortData(indicator)\r\n if (sortData) {\r\n classification.sort = sortData\r\n }\r\n }\r\n const {\r\n label,\r\n name,\r\n location,\r\n show,\r\n indexCode,\r\n indexCodeNum,\r\n calcType = 'COLUMN',\r\n builtInFormula,\r\n builtInValueSource,\r\n builtInCalcWay,\r\n formula,\r\n conditions,\r\n aggregate,\r\n distinct,\r\n dimByCount,\r\n dataTo\r\n } = indicator\r\n let conditionData\r\n if (conditions) {\r\n conditionData = handleConditions(conditions)\r\n }\r\n if (calcType === 'COMPONENT') {\r\n const componentField: any = {}\r\n setFieldValue(componentField, builtInValueSource)\r\n return {\r\n label: label.trim(),\r\n columnName: name,\r\n show,\r\n calcType,\r\n componentAlias: builtInCalcWay,\r\n componentValue: componentField.fieldValue || null\r\n }\r\n }\r\n const itemObj: any = {\r\n label: label.trim(),\r\n columnName: name,\r\n location,\r\n show,\r\n calcType: dataTo === '1' ? 'VIEW' : calcType,\r\n hrpIndexCode: indexCode,\r\n hrpIndexCodeNum: indexCodeNum,\r\n aggregate,\r\n builtInFormula,\r\n builtInValueSource,\r\n formula,\r\n conditions: conditionData\r\n }\r\n if (builtInFormula === 'DATE_OFFSET') {\r\n const list = builtInCalcWay.split('-')\r\n if (list?.length === 3) {\r\n let calcWays = list[0]\r\n if (list[2] === 'before' && list[0] !== '0') {\r\n calcWays = `-${list[0]}`\r\n }\r\n return {\r\n ...itemObj,\r\n calcWays: [calcWays],\r\n dateCalcTypes: [list[1]]\r\n }\r\n }\r\n } else {\r\n if (name === 'the_count') {\r\n itemObj.calcType = 'AGGREGATE'\r\n itemObj.distinct = !!distinct\r\n itemObj.typeGuid = dimByCount\r\n }\r\n return {\r\n ...itemObj,\r\n builtInCalcWay\r\n }\r\n }\r\n}\r\n\r\nconst handleSqlConditions = (graphicConfig: { [key:string]: any }) => {\r\n if (!graphicConfig) {\r\n return []\r\n }\r\n const controlList = cloneDeep(graphicConfig?.controlList || [])\r\n .filter((v: any) => v.conditionKey !== 'parentCode')\r\n const {\r\n classificationList = [],\r\n rowHeaderList = [],\r\n dimensionList = [],\r\n seriesList = [],\r\n leftAxisList = [],\r\n rightAxisList = [],\r\n queryColumnList = [],\r\n indicators = []\r\n } = graphicConfig\r\n handleControlList(controlList)\r\n const otherList = [\r\n ...classificationList,\r\n ...rowHeaderList,\r\n ...dimensionList,\r\n ...seriesList,\r\n ...leftAxisList,\r\n ...rightAxisList,\r\n ...queryColumnList,\r\n ...indicators\r\n ]\r\n const conditionList: any = []\r\n for (const ol of otherList) {\r\n const conditions = getConditions(ol?.conditions || [])\r\n if (conditions?.length) {\r\n const list = conditions\r\n .filter((v: any) => v?.dataType === 'component')\r\n .map((item: any) => {\r\n const params: any = {}\r\n if (item?.dateFormat) {\r\n params.format = item.dateFormat\r\n }\r\n if (item.fieldValue === 'PARENT') {\r\n // 使用父页面的组件\r\n params.id = 'PARENT'\r\n params.keyName = item.modelKey\r\n params.modelKey = item.modelKey\r\n params.prop = item.prop\r\n }\r\n return {\r\n conditionKey: item.fieldName,\r\n conditionLabel: item.fieldName,\r\n conditionName: item.fieldName,\r\n conditionValueType: item.fieldType,\r\n id: item.componentId,\r\n keyName: item.fieldValue,\r\n rule: item.rule,\r\n notGlobal: true,\r\n indexCode: item.indexCode,\r\n typeGuid: item.typeGuid,\r\n indexCodeNum: item.indexCodeNum,\r\n ...params\r\n }\r\n })\r\n if (list?.length) {\r\n for (const l of list) {\r\n if (!conditionList.find((cItem: any) => cItem.keyName === l.keyName)) {\r\n conditionList.push(l)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n const len = conditionList.length\r\n const sqlConditions = controlList\r\n for (let i = 0; i < len; i++) {\r\n const control = conditionList[i]\r\n if (control?.conditionKey === 'parentCode') {\r\n continue\r\n }\r\n const {\r\n id,\r\n keyName,\r\n prop,\r\n format: dateFormat,\r\n modelKey,\r\n dataType = 'component',\r\n customValue\r\n } = control\r\n const sqlCondition: { [key:string]: any } = getConditionItem(control)\r\n // console.log('model', model)\r\n setFieldValue(sqlCondition, id, { prop, dateFormat, modelKey, keyName })\r\n if (dataType === '') {\r\n sqlCondition.fieldValue = customValue || ''\r\n }\r\n sqlConditions.push(sqlCondition)\r\n }\r\n for (let j = sqlConditions.length - 1; j >= 0; j--) {\r\n const item = sqlConditions[j]\r\n if (!item.globalCondition) {\r\n const cond = getConditions(sqlConditions).find(v => v.alias === item.alias && v.globalCondition)\r\n if (cond) {\r\n sqlConditions.splice(j, 1)\r\n }\r\n }\r\n }\r\n return sqlConditions\r\n}\r\n\r\nfunction getConditionItem (control: { [key:string]:any }) {\r\n const {\r\n id,\r\n keyName,\r\n conditionLabel,\r\n conditionKey,\r\n conditionValueType,\r\n prop,\r\n rule = 'NONE',\r\n notGlobal = false,\r\n indexCode,\r\n typeGuid,\r\n indexCodeNum,\r\n dataType = 'component'\r\n } = control\r\n let alias = keyName || id\r\n if (alias && prop) {\r\n alias += `-${prop}`\r\n }\r\n let ruleValue = rule\r\n if (ruleValue === 'NONE') {\r\n if (['startTime', 'endTime'].includes(prop)) {\r\n ruleValue = prop === 'startTime' ? 'GREATER_EQUAL' : 'LESS_EQUAL'\r\n } else if (keyName?.includes('startTime')) {\r\n ruleValue = prop === 'GREATER_EQUAL'\r\n } else if (keyName?.includes('endTime')) {\r\n ruleValue = prop === 'LESS_EQUAL'\r\n } else {\r\n ruleValue = 'EQUAL'\r\n }\r\n }\r\n if (id === 'PARENT') {\r\n alias = control.modelKey\r\n if (alias && prop) {\r\n alias += `-${prop}`\r\n }\r\n ruleValue = rule\r\n }\r\n return {\r\n rule: ruleValue,\r\n label: conditionLabel,\r\n fieldName: conditionKey,\r\n fieldValue: '', // 在关联控件中取\r\n // dateFormat: 'YYYY-MM',\r\n valueType: conditionValueType,\r\n alias,\r\n globalCondition: !notGlobal,\r\n indexCode,\r\n typeGuid,\r\n indexCodeNum,\r\n dataType\r\n }\r\n}\r\n\r\nfunction handleControlList (controlList: { [key:string]:any }[]) {\r\n if (controlList?.length) {\r\n for (const control of controlList) {\r\n if (control?.conditions) {\r\n handleControlList(control.conditions)\r\n } else {\r\n const {\r\n id,\r\n keyName,\r\n prop,\r\n modelKey,\r\n format: dateFormat,\r\n dataType = 'component',\r\n customValue\r\n } = control\r\n let alias = keyName || id\r\n if (alias && prop) {\r\n alias += `-${prop}`\r\n }\r\n const sqlCondition: { [key:string]: any } = getConditionItem(control)\r\n setFieldValue(sqlCondition, id, { prop, dateFormat, modelKey, keyName })\r\n if (dataType === '') {\r\n sqlCondition.fieldValue = customValue || ''\r\n }\r\n for (const key in sqlCondition) {\r\n control[key] = sqlCondition[key]\r\n }\r\n for (const attr of excludeAttr) {\r\n delete control[attr]\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction handleVariableList (variableList: { [key: string]: any }[]) {\r\n const handleVarList: any = []\r\n if (variableList?.length) {\r\n for (const item of variableList) {\r\n if (item.variableName) {\r\n const variableItem: any = {\r\n variateName: item.variableName,\r\n globalCondition: false,\r\n valueType: item.variableType,\r\n alias: item.keyName || ''\r\n }\r\n setFieldValue(variableItem, item.id, {\r\n dateFormat: item.format,\r\n prop: item.dateTypeValue,\r\n keyName: item.keyName,\r\n operateType: item.operateType,\r\n operateMode: item.operateMode,\r\n operateValue: item.operateValue\r\n })\r\n if (item.dataType === '') {\r\n variableItem.fieldValue = item.variableValue\r\n }\r\n if (item.format) {\r\n // 日期格式化\r\n variableItem.dateFormat = item.format\r\n }\r\n if (item.label) {\r\n variableItem.label = item.label\r\n }\r\n handleVarList.push(variableItem)\r\n }\r\n }\r\n }\r\n return handleVarList\r\n}\r\n\r\n// 设置sqlCondition的fieldValue值\r\nfunction setFieldValue (data: any, id: string, params?: any) {\r\n const { prop = '', dateFormat = '', modelKey = '', keyName = '', operateValue, operateMode, operateType } = params || {}\r\n const rKey = modelKey || keyName\r\n if (id === 'PARENT' && rKey && prop) {\r\n // @ts-ignore\r\n const record = window.config.record\r\n let propKey = prop\r\n let format = dateFormat\r\n const variables = (prop).match(/\\{(.+?)\\}/g)\r\n if (variables?.length) {\r\n const variable = variables[0].slice(1, -1).trim()\r\n propKey = prop.replace(variables[0], '')\r\n format = variable\r\n data.dateFormat = format\r\n }\r\n if (record && record[rKey]) {\r\n const recordValue = unref(record[rKey][propKey])\r\n if (dayjs.isDayjs(recordValue)) {\r\n data.fieldValue = recordValue.format(format || 'YYYY-MM-DD')\r\n } else {\r\n data.fieldValue = recordValue\r\n }\r\n }\r\n return\r\n }\r\n // 获取组件属性\r\n const model = getGlobalModel(id) || {}\r\n // console.log('model', model)\r\n const { value, format = 'YYYY-MM-DD', type = '', useCurrentTime, RECORD } = model || {}\r\n const customFormat = dateFormat || format\r\n if (lowerCaseIncludes(model.type, 'date')) {\r\n let dateValue\r\n if (useCurrentTime) {\r\n if (value) {\r\n dateValue = unref(value)\r\n } else {\r\n dateValue = dayjs()\r\n }\r\n } else {\r\n dateValue = unref(value)\r\n }\r\n if (operateValue && operateMode && operateType) {\r\n switch (operateType) {\r\n case 'add':\r\n dateValue = dateValue.add(operateValue, operateMode)\r\n break\r\n case 'minus':\r\n dateValue = dateValue.subtract(operateValue, operateMode)\r\n break\r\n }\r\n }\r\n data.fieldValue = dateValue?.format(customFormat)\r\n data.dateFormat = customFormat\r\n } else if (type === 'ecanRangePicker') {\r\n let propValue = prop\r\n if (!prop) {\r\n const knList = keyName && keyName.split('-')\r\n if (knList?.length) {\r\n propValue = knList[knList.length - 1]\r\n }\r\n }\r\n if (!propValue) {\r\n return\r\n }\r\n let _time: any = null\r\n if (unref(model[propValue])) {\r\n _time = dayjs(unref(model[propValue]))\r\n }\r\n\r\n if (operateValue && operateMode && operateType) {\r\n if (operateValue === 'rangeValue') {\r\n // 自定义偏移,目前只有范围差\r\n if (model.startTime && model.endTime) {\r\n const interval = unref(model.endTime).diff(unref(model.startTime), operateMode) + 1\r\n switch (operateType) {\r\n case 'add':\r\n _time = _time ? _time.add(interval, operateMode) : _time\r\n break\r\n case 'minus':\r\n _time = _time ? _time.subtract(interval, operateMode) : _time\r\n }\r\n }\r\n } else if (!isNaN(+operateValue)) {\r\n switch (operateType) {\r\n case 'add':\r\n _time = _time ? _time.add(operateValue, operateMode) : _time\r\n break\r\n case 'minus':\r\n _time = _time ? _time.subtract(operateValue, operateMode) : _time\r\n }\r\n }\r\n }\r\n\r\n if (_time) {\r\n data.fieldValue = _time?.format(customFormat)\r\n }\r\n if (propValue === 'rangeValue') {\r\n // 全局变量的日期范围间隔值计算\r\n if (model.startTime && model.endTime) {\r\n const step: any = getFormatStep(customFormat)\r\n if (step) {\r\n data.fieldValue = unref(model.endTime).diff(unref(model.startTime), step) + 1\r\n }\r\n }\r\n }\r\n data.dateFormat = customFormat\r\n } else if (lowerCaseIncludes(type, MODEL_KEY_LIST)) {\r\n if (modelKey && RECORD) {\r\n data.fieldValue = RECORD[modelKey]\r\n } else if (!modelKey && RECORD) {\r\n data.fieldValue = RECORD.value\r\n } else {\r\n data.fieldValue = unref(value)\r\n }\r\n } else {\r\n data.fieldValue = unref(value)\r\n }\r\n}\r\n\r\nconst handleSort = (sort: any) => {\r\n if (sort) {\r\n const sortData: any = Array.isArray(sort) ? cloneDeep(sort) : [cloneDeep(sort)]\r\n let type = ''\r\n let customOrderColumns = []\r\n const labels: any = []\r\n const columnNames: any = []\r\n const orders: any = []\r\n for (const item of sortData) {\r\n if (item.defaultCode) {\r\n item.label = item.columnName\r\n delete item.defaultCode\r\n }\r\n if (item.type === 'CUSTOM') {\r\n customOrderColumns = item.customOrderColumns\r\n }\r\n type = item.type\r\n labels.push(item.label)\r\n if (item.columnName?.includes('_ecanrepeat_')) {\r\n // 处理多个一样的指标或维度\r\n const list = item.columnName.split('_ecanrepeat_')\r\n columnNames.push(list[0])\r\n } else {\r\n columnNames.push(item.columnName)\r\n }\r\n orders.push(item.order)\r\n }\r\n if (type !== 'CUSTOM' && labels?.length > 1) {\r\n type = 'COMBINATION'\r\n }\r\n if (type === 'CUSTOM') {\r\n return {\r\n label: labels.join(','),\r\n columnName: columnNames.join(','),\r\n type,\r\n customOrderColumns\r\n }\r\n } else {\r\n return {\r\n label: labels.join(','),\r\n columnName: columnNames.join(','),\r\n order: orders.join(','),\r\n type\r\n }\r\n }\r\n } else {\r\n return sort\r\n }\r\n}\r\n\r\n// 获取关联控件排序的排序信息\r\nconst getCpntSortData = (data: any) => {\r\n const { sortCpnts = [] } = data\r\n let customSort: any\r\n let order = ''\r\n for (const id of sortCpnts) {\r\n const model = getGlobalModel(id) || {}\r\n const { type, RECORD } = model\r\n if (lowerCaseIncludes(type, 'image') && lowerCaseIncludes(RECORD?.value, ['asc', 'desc'])) {\r\n order = RECORD.value.toUpperCase()\r\n break\r\n }\r\n }\r\n if (order) {\r\n customSort = {\r\n label: data.label,\r\n columnName: data.name,\r\n order,\r\n type: 'NORMAL'\r\n }\r\n }\r\n return customSort\r\n}\r\n\r\nconst formatIndicatorParams = (props: any, otherParams: any = {}) => {\r\n const { graphicConfig, type, globalModel, isGroupTable = false } = props\r\n if (globalModel) {\r\n modelValue = globalModel\r\n }\r\n const isPivotTable = lowerCaseIncludes(type, 'pivottable')\r\n\r\n let {\r\n source,\r\n dataViewId,\r\n plugin = '1', // 插件类型\r\n layer, // 后台图表类型,值分0,1\r\n chartType, // 前端图表类型\r\n classificationList = [],\r\n rowHeaderList = [],\r\n dimensionList = [], // 文本组件的维度列表\r\n seriesList = [],\r\n leftAxisList = [],\r\n rightAxisList = [],\r\n queryColumnList = [],\r\n indicators = [],\r\n controlList = [],\r\n formFields = {},\r\n variableList = [],\r\n variableConditions = [],\r\n // dataSourceId, // 所属数据源ID\r\n idxLibMode, // 指标库模式, source= INDICATOR_LIB时候必填, NORMAL_YEAR_TABLE = 普通年表, WITH_DATE_DIM_TABLE = 带有时间维度表\r\n preview = false, // 预览开关\r\n edvDataSetId // 数据集id\r\n } = graphicConfig || {}\r\n\r\n let sqlConditions: any = []\r\n if (graphicConfig?.pageMode === 'design') {\r\n // relativeList 在设计模式下,由于联动无法直接获取,已经处理好数据直接获取\r\n sqlConditions = (graphicConfig.sqlConditions ?? []).map((v: any) => {\r\n const gParams: any = {}\r\n if (!hasOwn(v, 'globalCondition') && !v.join) {\r\n gParams.globalCondition = true\r\n }\r\n if (!v.join) {\r\n const ruleVaule = v.rule || 'EQUAL'\r\n gParams.rule = ruleVaule === 'NONE' ? 'EQUAL' : ruleVaule\r\n }\r\n return {\r\n ...v,\r\n ...gParams\r\n }\r\n })\r\n if (variableConditions?.length) {\r\n sqlConditions = sqlConditions.concat(variableConditions)\r\n }\r\n } else {\r\n sqlConditions = handleSqlConditions(graphicConfig)\r\n if (variableList?.length) {\r\n sqlConditions = sqlConditions.concat(handleVariableList(variableList))\r\n }\r\n }\r\n\r\n if (sqlConditions?.length) {\r\n const globalList = sqlConditions.filter((v: any) => v.globalCondition)\r\n const notGlobalList = sqlConditions.filter((v: any) => !v.globalCondition)\r\n if (globalList?.length > 1) {\r\n sqlConditions = [\r\n {\r\n join: '&&',\r\n conditions: globalList\r\n },\r\n ...notGlobalList\r\n ]\r\n }\r\n }\r\n\r\n // 把sqlConditions转成接口要求的数据格式\r\n if (sqlConditions?.length) {\r\n sqlConditions = handleConditions(sqlConditions, '1')\r\n }\r\n\r\n // 图类型,1=表 2=图\r\n if (layer == null) {\r\n if (lowerCaseIncludes(type, ['table', 'card']) || (lowerCaseIncludes(type, ['list', 'circulate']) && classificationList?.length > 1)) {\r\n layer = '1'\r\n } else if (lowerCaseIncludes(type, ['select', 'checkbox', 'radio'])) {\r\n layer = '3'\r\n } else {\r\n layer = '2'\r\n }\r\n }\r\n\r\n let classification\r\n const classifications: any = []\r\n let typeGuidString = ''\r\n if (\r\n Array.isArray(classificationList) &&\r\n classificationList.length > 0 &&\r\n (!['ecanList', 'ecanCirculate'].includes(type) || classificationList?.length === 1)\r\n ) {\r\n const len = classificationList.length\r\n for (let i = 0; i < len; i++) {\r\n const item = classificationList[i] || {}\r\n const {\r\n label = '',\r\n name = '',\r\n show = false,\r\n sort,\r\n customGroup,\r\n conditions,\r\n dateFormat,\r\n typeGuid = '',\r\n truncations = []\r\n } = item\r\n // 如果是 show 直接提取 classification,停止遍历\r\n if (show || len === 1) {\r\n typeGuidString = typeGuid\r\n classification = {\r\n label: label.trim(),\r\n columnName: name,\r\n show,\r\n sort: getCpntSortData(item) || handleSort(sort) || sort,\r\n customGroup,\r\n conditions: handleConditions(conditions),\r\n typeGuid\r\n }\r\n if (dateFormat) {\r\n classification.dateFormat = dateFormat\r\n }\r\n if (name === 'the_date' && !classification.dateFormat) {\r\n classification.dateFormat = 'YYYY-MM'\r\n }\r\n // truncation\r\n const truncation: any = {}\r\n if (Array.isArray(truncations) && truncations.length > 0) {\r\n const len = truncations.length\r\n for (let i = 0; i < len; i++) {\r\n const item = truncations[i] || {}\r\n const { rule = '', num = 0, name = '' } = item\r\n if (rule && num) {\r\n truncation.num = num\r\n truncation.rule = rule\r\n if (name) {\r\n truncation.otherGroupName = name\r\n }\r\n }\r\n }\r\n }\r\n if (Object.keys(truncation)?.length) {\r\n classification.truncation = truncation\r\n }\r\n if (lowerCaseIncludes(type, ['scatter', 'valueline'])) {\r\n classifications.push(classification)\r\n } else {\r\n break\r\n }\r\n }\r\n }\r\n }\r\n // seriesList (取第一项) => series\r\n let series\r\n if (Array.isArray(seriesList) && seriesList.length > 0) {\r\n const len = seriesList.length\r\n for (let i = 0; i < len; i++) {\r\n const item = seriesList[i] || {}\r\n const { label = '', name = '', show = false, sort, customGroup, conditions, typeGuid } = item\r\n // 如果是 show 直接提取 seriesList,停止遍历\r\n if (show || len === 1) {\r\n series = {\r\n label: label.trim(),\r\n columnName: name,\r\n show,\r\n sort: handleSort(sort),\r\n customGroup,\r\n conditions: handleConditions(conditions),\r\n typeGuid\r\n }\r\n break\r\n }\r\n }\r\n }\r\n\r\n // leftAxisList + rightAxisList + indicators => indicatorList\r\n const indicatorList: any = []\r\n leftAxisList?.forEach((leftAxis: { [key:string]: any }) => {\r\n leftAxis.location = 'LEFT'\r\n indicatorList.push(handleIndicator(leftAxis, classification))\r\n })\r\n rightAxisList?.forEach((rightAxis: { [key:string]: any }) => {\r\n rightAxis.location = 'RIGHT'\r\n indicatorList.push(handleIndicator(rightAxis, classification))\r\n })\r\n\r\n let indicatorsData = indicators\r\n if (otherParams?.pivotTableCal?.indicators?.length) {\r\n // 透视表全设计模式,替换设计态拖拽的指标\r\n indicatorsData = otherParams.pivotTableCal.indicators\r\n }\r\n indicatorsData?.forEach((indicator: { [key:string]: any }) => {\r\n indicator.location = 'LEFT'\r\n indicatorList.push(handleIndicator(indicator, classification))\r\n })\r\n\r\n // queryColumnList => queryColumns\r\n const queryColumns: any = []\r\n if (['ecanList', 'ecanCirculate'].includes(type) && classificationList?.length > 1) {\r\n queryColumnList = classificationList\r\n }\r\n if (otherParams?.pivotTableCal?.dimensions?.length) {\r\n // 透视表全设计模式,替换设计态拖拽的维度\r\n queryColumnList = otherParams.pivotTableCal.dimensions\r\n }\r\n queryColumnList?.forEach((queryColumn: { [key:string]: any }) => {\r\n const { label, name, location, show, indexCode, sort, typeGuid, indexCodeNum, dateFormat, conditions } = queryColumn\r\n let customSort = handleSort(sort)\r\n if (otherParams.sort) {\r\n // 表格的表头排序\r\n const { field, order } = otherParams.sort\r\n let indicator = indicatorList.find(v => v.label === field)\r\n if (!indicator && label === field) {\r\n indicator = queryColumn\r\n }\r\n if (indicator) {\r\n customSort = {\r\n columnName: indicator.columnName,\r\n label: otherParams.sort.field,\r\n order: order.toUpperCase(),\r\n type: 'NORMAL'\r\n }\r\n }\r\n }\r\n const itemObj: any = {\r\n label,\r\n columnName: name,\r\n location,\r\n show,\r\n sort: customSort,\r\n calcType: 'COLUMN',\r\n hrpIndexCode: indexCode,\r\n hrpIndexCodeNum: indexCodeNum,\r\n conditions: handleConditions(conditions),\r\n typeGuid\r\n }\r\n if (dateFormat) {\r\n itemObj.dateFormat = dateFormat\r\n }\r\n if (name === 'the_date' && !itemObj.dateFormat) {\r\n itemObj.dateFormat = 'YYYY-MM'\r\n }\r\n queryColumns.push(itemObj)\r\n })\r\n\r\n // 行表头\r\n let rowHeaders: any = []\r\n let resultRowHeaderList: any = []\r\n if (Array.isArray(rowHeaderList) && rowHeaderList.length > 0) {\r\n resultRowHeaderList = rowHeaderList\r\n } else if (Array.isArray(dimensionList) && dimensionList.length > 0) {\r\n resultRowHeaderList = dimensionList\r\n }\r\n if (resultRowHeaderList?.length) {\r\n const len = resultRowHeaderList.length\r\n for (let i = 0; i < len; i++) {\r\n const item = resultRowHeaderList[i] || {}\r\n const { label = '', name = '', show = false, sort, customGroup, conditions, truncations, typeGuid = '', dateFormat } = item\r\n let customSort = handleSort(sort)\r\n if (otherParams.sort) {\r\n // 表格的表头排序\r\n const { field, order } = otherParams.sort\r\n let indicator = indicatorList.find(v => v.label === field)\r\n if (!indicator && item.label === field) {\r\n indicator = item\r\n }\r\n if (indicator) {\r\n customSort = {\r\n columnName: indicator.columnName,\r\n label: otherParams.sort.field,\r\n order: order.toUpperCase(),\r\n type: 'NORMAL'\r\n }\r\n }\r\n }\r\n const itemObj: any = {\r\n label: label.trim(),\r\n columnName: name,\r\n show,\r\n sort: customSort,\r\n customGroup,\r\n conditions: handleConditions(conditions),\r\n typeGuid\r\n }\r\n if (dateFormat) {\r\n itemObj.dateFormat = dateFormat\r\n }\r\n if (name === 'the_date' && !itemObj.dateFormat) {\r\n itemObj.dateFormat = 'YYYY-MM'\r\n }\r\n // truncation\r\n const truncation: any = {}\r\n if (Array.isArray(truncations) && truncations.length > 0) {\r\n const len = truncations.length\r\n for (let i = 0; i < len; i++) {\r\n const item = truncations[i] || {}\r\n const { rule = '', num = 0, name = '' } = item\r\n if (rule && num) {\r\n truncation.num = num\r\n truncation.rule = rule\r\n if (name) {\r\n truncation.otherGroupName = name\r\n }\r\n }\r\n }\r\n }\r\n if (Object.keys(truncation)?.length) {\r\n itemObj.truncation = truncation\r\n }\r\n rowHeaders.push(itemObj)\r\n }\r\n }\r\n\r\n // 透视表指标排序要用到的\r\n let pivotColumnHeader: any = []\r\n let pivotColumnData: any\r\n // 透视表\r\n if (otherParams?.pivotTableCal) {\r\n let resultList: any = []\r\n const {\r\n calc = [],\r\n filter = [],\r\n truncations = [],\r\n sorts = [],\r\n aggregateMethod = [],\r\n rowDimensionKeys = [],\r\n colDimensionKeys = []\r\n } = otherParams.pivotTableCal\r\n // 计算\r\n indicatorList.push(...calc)\r\n // 筛选\r\n if (filter?.length) {\r\n for (const fl of filter) {\r\n const { type, ...flParams } = fl\r\n if (type === 'indicators') {\r\n // 指标筛选\r\n resultList = indicatorList\r\n } else if (type === 'dimension') {\r\n // 维度筛选\r\n resultList = queryColumns\r\n }\r\n const target = resultList.find((v: any) => v.columnName === fl.fieldName)\r\n if (target) {\r\n if (!target.conditions) {\r\n target.conditions = []\r\n }\r\n target.conditions.push(flParams)\r\n }\r\n }\r\n }\r\n // 取top\r\n if (truncations?.length) {\r\n for (const item of truncations) {\r\n const target = queryColumns.find(v => v.columnName === item.key)\r\n if (target) {\r\n target.truncation = {\r\n num: item.num,\r\n rule: item.rule\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 维度/指标排序\r\n if (sorts?.length) {\r\n for (const item of sorts) {\r\n const { fieldType, columnData, ...sortParams } = item\r\n if (fieldType === 'indicators') {\r\n // 指标排序\r\n resultList = indicatorList\r\n pivotColumnData = columnData\r\n } else if (fieldType === 'dimension') {\r\n // 维度排序\r\n resultList = queryColumns\r\n }\r\n const target = resultList.find(v => v.label === sortParams.label)\r\n if (target) {\r\n target.sort = {\r\n ...sortParams,\r\n columnName: target.columnName\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 聚合\r\n if (Object.keys(aggregateMethod)?.length) {\r\n for (const key in aggregateMethod) {\r\n const target = queryColumns.find(v => v.label === key)\r\n if (target && aggregateMethod[key]?.length) {\r\n target.aggregateMethod = aggregateMethod[key]\r\n }\r\n }\r\n }\r\n\r\n rowHeaders = []\r\n pivotColumnHeader = []\r\n for (const q of queryColumns) {\r\n if (rowDimensionKeys.includes(q.columnName)) {\r\n rowHeaders.push(q)\r\n } else if (colDimensionKeys.includes(q.columnName)) {\r\n pivotColumnHeader.push(q)\r\n }\r\n }\r\n }\r\n\r\n if (lowerCaseIncludes(type, ['text', 'proportion', 'counter'])) {\r\n chartType = 'zb'\r\n } else if (lowerCaseIncludes(type, ['valueline'])) {\r\n chartType = 'valueline'\r\n }\r\n\r\n // queryColumns 表格配置为空返回\r\n if (isGroupTable || type === 'card') {\r\n if (rowHeaders.length === 0 || indicatorList.length === 0) {\r\n return\r\n } else {\r\n chartType = 'grouptable'\r\n }\r\n } else if (layer === '1' && queryColumns.length === 0) {\r\n return\r\n // queryColumns 图表配置为空返回\r\n } else if (layer === '2' && indicatorList.length === 0) {\r\n return\r\n } else if (layer === '3' && ((!typeGuidString && source !== 'EDV_DATA_SET') || !formFields.labelField || !formFields.valueField)) {\r\n return\r\n } else if (layer === '3' && type === 'ecanDataSelect' && indicatorList.length === 0) {\r\n return\r\n }\r\n\r\n // 文本维度\r\n if (dimensionList?.length) {\r\n layer = '1'\r\n chartType = 'grouptable'\r\n }\r\n\r\n let resultParams: any\r\n if (!lowerCaseIncludes(type, ['scatter', 'valueline']) && Object.keys(formFields)?.length) {\r\n const cascadeControl = getConditions(controlList).find((v: any) => v.conditionKey === 'parentCode')\r\n const someParams: any = {}\r\n if (cascadeControl) {\r\n const model = getGlobalModel(cascadeControl.id) || {}\r\n if (model?.itemCodes) {\r\n someParams.parentItemCodes = model.itemCodes\r\n } else {\r\n return\r\n }\r\n }\r\n if (type === 'ecanDataSelect') {\r\n someParams.indicatorList = indicatorList.filter(v => v.show)\r\n }\r\n if (source === 'EDV_DATA_SET') {\r\n someParams.edvDataSetId = edvDataSetId\r\n }\r\n resultParams = {\r\n url: '/diagram/formData',\r\n source,\r\n dataViewId,\r\n plugin: '4',\r\n layer,\r\n chartType: 'normalSelect',\r\n rangeIndexTypeGuid: typeGuidString,\r\n type: type === 'ecanDataSelect' ? 'normalSelectData' : 'normalSelect',\r\n labelField: formFields.labelField,\r\n valueField: formFields.valueField,\r\n sqlConditions,\r\n idxLibMode: 'WITH_DATE_DIM_TABLE',\r\n keyName: props.keyName,\r\n ...someParams\r\n }\r\n } else {\r\n let classParams = {}\r\n if (lowerCaseIncludes(type, ['scatter', 'valueline'])) {\r\n // 散点图多个维度\r\n classParams = {\r\n classifications\r\n }\r\n } else {\r\n classParams = {\r\n classification\r\n }\r\n }\r\n resultParams = {\r\n url: '/diagram',\r\n source,\r\n dataViewId,\r\n plugin: isPivotTable ? '5' : plugin,\r\n layer,\r\n chartType: isPivotTable ? 'pivot-table' : chartType,\r\n series,\r\n indicatorList,\r\n queryColumns: isGroupTable ? [] : queryColumns,\r\n pageFlag: true,\r\n edvDataSetId: edvDataSetId || '',\r\n sqlConditions: sqlConditions.map(v => {\r\n const { fieldValue } = v\r\n const params: any = {}\r\n if (fieldValue && Array.isArray(fieldValue)) {\r\n params.fieldValue = JSON.stringify(fieldValue)\r\n }\r\n return {\r\n ...v,\r\n ...params\r\n }\r\n }),\r\n idxLibMode,\r\n preview,\r\n rowHeaders,\r\n keyName: props.keyName,\r\n // 透视表指标排序相关入参\r\n columnData: pivotColumnData,\r\n columnHeaders: pivotColumnHeader,\r\n ...classParams,\r\n }\r\n }\r\n return resultParams\r\n}\r\n\r\nexport default {\r\n formatIndicatorParams\r\n}","interface DataItem {\n name: string | number\n value: string | number\n type?: string\n}\n\nexport type Data = DataItem []\n\nexport interface KeyTypeDataFieldNames {\n name: string\n types: {\n label: string\n value: string\n } []\n}\n\n/**\n * 图形转化数据\n * @param data 数据\n * @param dataFieldNames 字段映射\n */\nexport const useTransformChartDataByAttrKey = (data: Data = [], dataFieldNames: KeyTypeDataFieldNames) => {\n let { name = 'name', types = [] } = dataFieldNames || {}\n name = name?.trim() || name\n const set = new Set()\n const map = new Map<string, any []>()\n const dataLen = data.length\n const typesLen = types.length\n // 只有一条记录\n if (dataLen === 1) {\n const vs: any = []\n // data 为一个值取第一个\n for (let i = 0; i < typesLen; i++) {\n const type = types[i]\n const { label, value } = type\n const v = { ...data[0], value: data[0][value] }\n set.add(label)\n // 值列表\n vs.push(v)\n }\n const n = data[0][name] || ''\n map.set(n, vs)\n } else {\n for (let i = 0; i < dataLen; i++) {\n const item = data[i]\n const x = item[name]\n set.add(x)\n for (let j = 0; j < typesLen; j++) {\n const type = types[j]\n const { label, value } = type\n const v = { ...item, value: item[value] }\n if (map.has(label)) {\n const m: any = map.get(label)\n m.push(v)\n map.set(label, m)\n } else {\n map.set(label, [v])\n }\n }\n }\n }\n\n const dimensions = Array.from(set)\n const dataset: { [key:string]:any } [] = []\n for (const [name, data] of map) {\n dataset.push({\n name,\n data\n })\n }\n return {\n dimensions,\n dataset\n }\n}\n\nexport default useTransformChartDataByAttrKey\n","interface DataItem {\n name: string | number\n value: string | number\n type?: string\n}\n\nexport type Data = DataItem []\n\nexport interface ValueTypeDataFieldNames {\n name: string\n value: string\n type: string\n}\n\n/**\n * 图形转化数据\n * @param data 数据\n * @param dataFieldNames 字段映射\n */\nexport const useTransformChartDataByAttrValue = (data: Data, dataFieldNames?: ValueTypeDataFieldNames) => {\n let { name = 'name', value = 'value', type = 'type' } = dataFieldNames || {}\n // 处去字符串\n name = name?.trim()\n value = value?.trim()\n type = type?.trim()\n const set = new Set()\n const map = new Map()\n const len = data.length\n for (let i = 0; i < len; i++) {\n const item = data[i]\n // x轴\n const x = item[name] || ''\n // y轴\n const y = item[value] || ''\n // 系列(类型)\n const t = item[type] || ''\n set.add(x)\n if (map.has(t)) {\n const arr = map.get(t)\n // @ts-ignore\n arr.push({ name: x, value: y, ...item })\n map.set(t, arr)\n } else {\n // @ts-ignore\n map.set(t, [{ name: x, value: y, ...item }])\n }\n }\n const dimensions = Array.from(set)\n const dataset: { [key:string]:any } [] = []\n for (const [name, data] of map) {\n dataset.push({\n name,\n data\n })\n }\n return {\n dimensions,\n dataset\n }\n}\nexport default useTransformChartDataByAttrValue\n","import runCode from '../utils/runCode'\nexport const useValueFormatter = (formatter: string, value:string) => {\n if (formatter == null) return value\n const variables = (formatter).match(/\\{.*\\}/g)\n if (variables == null || variables.length === 0) {\n return value\n }\n const len = variables.length\n for (let i = 0; i < len; i++) {\n const variable = variables[i]\n if (variable == null || variable === '') break\n let statement = variable.slice(1, -1)?.trim()\n statement = statement?.replace(/value/g, value)\n try {\n let result = statement\n if ((/\\(.*\\)/g).test(statement) || (/[+/\\\\*]/g).test(statement)) {\n result = runCode(statement)\n }\n formatter = formatter.replace(variable, result)\n } catch (e) {\n formatter = formatter.replace(variable, statement)\n }\n }\n return formatter\n}\n\nexport default useValueFormatter\n","import { computed, unref } from 'vue'\r\nimport useVariablesInText from '../hooks/useVariablesInText'\r\nimport useValueFormatter from '../hooks/useValueFormatter'\r\nimport { handleFormatter, getLegendFormat, formatQfw } from './util'\r\nfunction getMarkLineData (chartsOptions: any) {\r\n if (chartsOptions.isShowMarkLine) {\r\n return {\r\n markLine: {\r\n data: [{ type: chartsOptions.markLineType }]\r\n }\r\n }\r\n } else {\r\n return {}\r\n }\r\n}\r\nconst getTransformProps = (chartsOptions, chartData, fontSize) => {\r\n switch (chartsOptions.type) {\r\n case 'bar':\r\n return getBarTransformProps(chartsOptions, chartData, fontSize)\r\n case 'line':\r\n return getLineTransformProps(chartsOptions, chartData, fontSize)\r\n case 'pie':\r\n return getPieTransformProps(chartsOptions, chartData, fontSize)\r\n case 'comboGraph':\r\n return getComboGraphTransformProps(chartsOptions, chartData, fontSize)\r\n default:\r\n return {}\r\n }\r\n}\r\n\r\nconst getBarTransformProps = (chartsOptions, chartData, fontSize) => {\r\n const yAxisLabelFormatter = chartsOptions.yAxisLabelFormatter\r\n const xAxisLabelFormatter = chartsOptions.xAxisLabelFormatter\r\n const { dimensions = [], dataset = [] } = chartData\r\n const series = computed(() => {\r\n const { gradientShow, gradientColors, gradientOffset, barBorderRadius } = chartsOptions\r\n const ds = dataset\r\n const len = ds.length\r\n const series: any = []\r\n for (let i = 0; i < len; i++) {\r\n const item = {\r\n ...ds[i],\r\n type: 'bar',\r\n barWidth: chartsOptions.barWidth,\r\n showBackground: chartsOptions.showBarBackground\r\n } as { [key: string]: any }\r\n const { isStack, stackColumns } = chartsOptions\r\n if (isStack && (stackColumns.includes(ds[i].name || !stackColumns))) {\r\n item.stack = 'stack'\r\n }\r\n item.label = {\r\n show: chartsOptions.labelShow,\r\n fontSize: chartsOptions.labelFontSize,\r\n position: chartsOptions.labelPosition,\r\n color: chartsOptions.labelColor,\r\n width: chartsOptions.labelWidth,\r\n overflow: chartsOptions.labelOverflow,\r\n formatter: (params) => {\r\n let formatter = ''\r\n let labelFormatter = chartsOptions.labelFormatter\r\n if (labelFormatter === '') {\r\n labelFormatter = '{c}'\r\n }\r\n const { seriesName, name, value, data } = params || {}\r\n formatter += useVariablesInText(\r\n labelFormatter,\r\n {\r\n textData: {\r\n name,\r\n value,\r\n a: seriesName,\r\n b: name,\r\n c: value || 0,\r\n ...data\r\n }\r\n },\r\n {\r\n useNewline: true,\r\n useSpace: true\r\n })\r\n return formatter\r\n }\r\n }\r\n item.itemStyle = {}\r\n if (gradientShow) {\r\n item.itemStyle = {\r\n color: {\r\n x: chartsOptions.isUseHorizontalAxis ? 1 : 0,\r\n y: 0,\r\n x2: 0,\r\n y2: chartsOptions.isUseHorizontalAxis ? 0 : 1,\r\n colorStops: [{\r\n offset: 0,\r\n color: chartsOptions.colors[i]\r\n }, {\r\n offset: gradientOffset,\r\n color: gradientColors[i]\r\n }, {\r\n offset: 1,\r\n color: gradientColors[i]\r\n }]\r\n }\r\n }\r\n }\r\n if (barBorderRadius) {\r\n const radius = barBorderRadius.split(',')\r\n if (radius?.length) {\r\n const radiusItems: any = []\r\n for (const rs of radius) {\r\n const value = parseFloat(rs)\r\n if (!isNaN(value)) {\r\n radiusItems.push(value)\r\n }\r\n }\r\n // item.itemStyle.borderRadius = radiusItems\r\n // echart4.4版本圆角属性名变更\r\n item.itemStyle.barBorderRadius = radiusItems\r\n }\r\n }\r\n if (chartsOptions.isShowMarkLine) {\r\n item.markLine = {\r\n data: [{ type: chartsOptions.markLineType }]\r\n }\r\n }\r\n series.push(item)\r\n }\r\n return series\r\n })\r\n const xAxisData = computed(() => {\r\n return dimensions.map((item) => {\r\n let result = {}\r\n if (item && typeof item === 'object') {\r\n result = {\r\n ...item,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n }\r\n } else {\r\n result = {\r\n value: item,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n }\r\n }\r\n return result\r\n })\r\n })\r\n return {\r\n tooltip: {\r\n trigger: 'axis',\r\n show: chartsOptions.tooltipShow,\r\n formatter: (params) => {\r\n const len = params.length\r\n let formatter = ''\r\n let tooltipFormatter = chartsOptions.tooltipFormatter\r\n // currentData = params[0]?.data\r\n if (tooltipFormatter === '') {\r\n tooltipFormatter = '{marker} {a} {c}'\r\n }\r\n for (let i = 0; i < len; i++) {\r\n const { marker, seriesName, name, value, data } = params[i] || {}\r\n if (i === 0) {\r\n let formatName = name\r\n if (typeof name === 'string' && name[0] === '0' && !isNaN(+name)) {\r\n formatName = (+name).toString()\r\n }\r\n formatter += `${useValueFormatter(xAxisLabelFormatter, formatName)}<br/>`\r\n }\r\n formatter += useVariablesInText(\r\n tooltipFormatter,\r\n {\r\n textData: {\r\n marker,\r\n name,\r\n value,\r\n Qfw: formatQfw,\r\n a: seriesName,\r\n b: name,\r\n c: value || 0,\r\n ...data\r\n }\r\n },\r\n {\r\n useNewline: true,\r\n useSpace: true\r\n }\r\n )\r\n formatter += '<br/>'\r\n }\r\n return formatter\r\n },\r\n // valueFormatter: (value) => {\r\n // return useVariablesInText(chartsOptions.tooltipValueFormatter as string, { value })\r\n // },\r\n textStyle: {\r\n color: chartsOptions.tooltipTextStyleColor,\r\n fontSize: fontSize\r\n },\r\n position: chartsOptions.tooltipPosition || undefined,\r\n backgroundColor: chartsOptions.tooltipBackgroundColor || '#fff'\r\n },\r\n legend: {\r\n type: chartsOptions.legendScroll ? 'scroll' : 'plain',\r\n width: chartsOptions.legendWidth,\r\n height: chartsOptions.legendHeight,\r\n show: chartsOptions.legendShow,\r\n orient: chartsOptions.legendOrient,\r\n top: chartsOptions.legendTop,\r\n left: chartsOptions.legendLeft,\r\n textStyle: {\r\n // lineHeight: parseFloat(chartsOptions.legendFontSize) + 8,\r\n rich: {\r\n text: {\r\n width: chartsOptions.legendTextWidth,\r\n color: chartsOptions.legendTextStyleColor,\r\n fontSize: chartsOptions.legendFontSize\r\n }\r\n }\r\n },\r\n itemHeight: chartsOptions.legendItemHeight,\r\n itemWidth: chartsOptions.legendItemWidth,\r\n itemGap: chartsOptions.legendItemGap,\r\n data: dataset.map((value, index) => {\r\n return {\r\n name: value.name,\r\n itemStyle: {\r\n color: chartsOptions.colors[index]\r\n },\r\n icon: chartsOptions.legendType\r\n }\r\n }),\r\n formatter: (name: string) => {\r\n return getLegendFormat(chartsOptions.legendFormatter, {\r\n name\r\n })\r\n }\r\n },\r\n xAxis: {\r\n type: chartsOptions.isUseHorizontalAxis ? 'value' : 'category',\r\n data: chartsOptions.isUseHorizontalAxis ? null : unref(xAxisData),\r\n inverse: chartsOptions.isUseHorizontalAxis ? chartsOptions.xAxisInverse : chartsOptions.axisInverse,\r\n minInterval: chartsOptions.xAxisMinInterval,\r\n splitLine: {\r\n show: chartsOptions.xAxisSplitLineShow,\r\n lineStyle: {\r\n color: chartsOptions.xAxisSplitLineStyleColor,\r\n type: chartsOptions.xAxisSplitLineType\r\n },\r\n interval: chartsOptions.xAxisSplitLineInterval\r\n },\r\n splitArea: {\r\n show: chartsOptions.xAxisSplitAreaShow\r\n },\r\n axisLabel: {\r\n color: chartsOptions.xAxisLabelColor,\r\n interval: chartsOptions.xAxisLabelInterval || 0,\r\n rotate: chartsOptions.xAxisLabelRotate,\r\n width: chartsOptions.xAxisLabelWidth,\r\n overflow: chartsOptions.xAxisLabelOverflow,\r\n fontSize: chartsOptions.xAxisLabelFontSize,\r\n formatter (value: string) {\r\n if (typeof value === 'string' && value[0] === '0' && !isNaN(+value)) {\r\n value = (+value).toString()\r\n }\r\n return useValueFormatter(xAxisLabelFormatter, value)\r\n }\r\n },\r\n axisLine: {\r\n show: chartsOptions.xAxisLineShow,\r\n lineStyle: {\r\n color: chartsOptions.xAxisLineStyleColor\r\n }\r\n },\r\n axisTick: {\r\n show: chartsOptions.xAxisTickShow\r\n },\r\n name: chartsOptions.xAxisName,\r\n nameTextStyle: {\r\n fontSize: chartsOptions.xAxisLabelFontSize,\r\n color: chartsOptions.xAxisLabelColor,\r\n align: 'left'\r\n },\r\n max: chartsOptions.xAxisMaxValue || null\r\n },\r\n yAxis: {\r\n type: chartsOptions.isUseHorizontalAxis ? 'category' : 'value',\r\n data: chartsOptions.isUseHorizontalAxis ? unref(dimensions) : null,\r\n inverse: chartsOptions.isUseHorizontalAxis ? chartsOptions.axisInverse : chartsOptions.yAxisInverse,\r\n minInterval: chartsOptions.yAxisMinInterval,\r\n splitLine: {\r\n show: chartsOptions.yAxisSplitLineShow,\r\n lineStyle: {\r\n color: chartsOptions.yAxisSplitLineStyleColor,\r\n type: chartsOptions.yAxisSplitLineType\r\n }\r\n },\r\n splitArea: {\r\n show: chartsOptions.yAxisSplitAreaShow\r\n },\r\n axisLabel: {\r\n show: chartsOptions.yAxisLabelShow,\r\n fontSize: chartsOptions.yAxisLabelFontSize,\r\n color: chartsOptions.yAxisLabelColor,\r\n rotate: chartsOptions.yAxisLabelRotate,\r\n width: chartsOptions.yAxisLabelWidth,\r\n overflow: chartsOptions.yAxisLabelOverflow,\r\n formatter (value: string) {\r\n return useValueFormatter(yAxisLabelFormatter, value)\r\n }\r\n },\r\n axisLine: {\r\n show: chartsOptions.yAxisLineAlwaysDisplay,\r\n lineStyle: {\r\n color: chartsOptions.yAxisLineStyleColor\r\n }\r\n },\r\n name: chartsOptions.yAxisName,\r\n nameTextStyle: {\r\n fontSize: chartsOptions.yAxisLabelFontSize,\r\n color: chartsOptions.yAxisLabelColor,\r\n align: 'right'\r\n },\r\n max: chartsOptions.yAxisMaxValue || null\r\n },\r\n series: unref(series)\r\n }\r\n}\r\n\r\nconst getLineTransformProps = (chartsOptions, chartData, fontSize) => {\r\n // console.log('xAxisName', chartsOptions, chartsOptions.xAxisName)\r\n const yAxisLabelFormatter = chartsOptions.yAxisLabelFormatter\r\n const xAxisLabelFormatter = chartsOptions.xAxisLabelFormatter\r\n const { dimensions = [], dataset = [] } = chartData\r\n const xAxisData = computed(() => {\r\n return dimensions.map((item) => {\r\n let result = {}\r\n if (item && typeof item === 'object') {\r\n result = {\r\n ...item,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n }\r\n } else {\r\n result = {\r\n value: item,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n }\r\n }\r\n return result\r\n })\r\n })\r\n const series = computed(() => {\r\n const temp = [] as { [key: string]: any }[]\r\n const len = dataset.length\r\n for (let i = 0; i < len; i++) {\r\n const shadowStyle: any = {}\r\n if (chartsOptions.shadowColor) {\r\n shadowStyle.shadowColor = chartsOptions.shadowColor\r\n shadowStyle.shadowBlur = chartsOptions.shadowBlur\r\n shadowStyle.shadowOffsetY = chartsOptions.shadowOffsetY\r\n shadowStyle.shadowOffsetX = chartsOptions.shadowOffsetX\r\n }\r\n temp.push({\r\n type: 'line',\r\n ...dataset[i],\r\n symbolSize: chartsOptions.symbolSize,\r\n smooth: chartsOptions.smooth,\r\n areaStyle: {\r\n color: chartsOptions.areaGradientShow\r\n ? {\r\n type: 'linear',\r\n x: 0,\r\n y: 0,\r\n x2: 0,\r\n y2: 1,\r\n colorStops: [{\r\n offset: 0,\r\n color: chartsOptions.colors[i]\r\n }, {\r\n offset: 1,\r\n color: chartsOptions.areaGradientColor || 'transparent'\r\n }],\r\n global: false\r\n }\r\n : chartsOptions.colors[i],\r\n opacity: chartsOptions.areaStyleOpacity\r\n },\r\n lineStyle: {\r\n width: chartsOptions.lineStyleWidth,\r\n ...shadowStyle\r\n },\r\n ...getMarkLineData(chartsOptions)\r\n })\r\n }\r\n return temp\r\n })\r\n return {\r\n tooltip: {\r\n trigger: 'axis',\r\n show: chartsOptions.tooltipShow,\r\n formatter: (params) => {\r\n const len = params.length\r\n let formatter = ''\r\n let tooltipFormatter = chartsOptions.tooltipFormatter\r\n if (tooltipFormatter === '') {\r\n tooltipFormatter = '{marker} {a} {c}'\r\n }\r\n for (let i = 0; i < len; i++) {\r\n const { marker, seriesName, name, value, data } = params[i] || {}\r\n if (i === 0) {\r\n formatter += `${name}<br/>`\r\n }\r\n formatter += useVariablesInText(\r\n tooltipFormatter,\r\n {\r\n textData: {\r\n marker,\r\n name,\r\n value,\r\n a: seriesName,\r\n b: name,\r\n c: value,\r\n ...data\r\n }\r\n },\r\n {\r\n useNewline: true,\r\n useSpace: true\r\n }\r\n )\r\n formatter += '<br/>'\r\n }\r\n return formatter\r\n },\r\n textStyle: {\r\n color: chartsOptions.tooltipTextStyleColor,\r\n fontSize: fontSize.value\r\n },\r\n position: chartsOptions.tooltipPosition || undefined,\r\n backgroundColor: chartsOptions.tooltipBackgroundColor || '#fff'\r\n },\r\n xAxis: {\r\n name: chartsOptions.xAxisName,\r\n type: 'category',\r\n data: unref(xAxisData),\r\n minInterval: chartsOptions.xAxisMinInterval,\r\n splitLine: {\r\n show: chartsOptions.xAxisSplitLineShow,\r\n lineStyle: {\r\n color: chartsOptions.xAxisSplitLineStyleColor\r\n }\r\n },\r\n axisLabel: {\r\n color: chartsOptions.xAxisLabelColor,\r\n interval: chartsOptions.xAxisLabelInterval || 0,\r\n rotate: chartsOptions.xAxisLabelRotate,\r\n width: chartsOptions.xAxisLabelWidth,\r\n overflow: chartsOptions.xAxisLabelOverflow,\r\n formatter (value: string) {\r\n return useValueFormatter(xAxisLabelFormatter, value)\r\n }\r\n },\r\n axisLine: {\r\n lineStyle: {\r\n color: chartsOptions.xAxisLineStyleColor\r\n }\r\n },\r\n axisTick: {\r\n show: chartsOptions.xAxisTickShow\r\n }\r\n },\r\n yAxis: {\r\n type: 'value',\r\n name: chartsOptions.yAxisName,\r\n minInterval: chartsOptions.yAxisMinInterval,\r\n splitLine: {\r\n show: chartsOptions.yAxisSplitLineShow,\r\n lineStyle: {\r\n color: chartsOptions.yAxisSplitLineStyleColor\r\n }\r\n },\r\n axisLabel: {\r\n fontSize: fontSize,\r\n color: chartsOptions.yAxisLabelColor,\r\n formatter (value: string) {\r\n return useValueFormatter(yAxisLabelFormatter, value)\r\n }\r\n },\r\n axisLine: {\r\n show: chartsOptions.yAxisLineAlwaysDisplay,\r\n lineStyle: {\r\n color: chartsOptions.yAxisLineStyleColor\r\n }\r\n }\r\n },\r\n // 图例\r\n legend: {\r\n show: chartsOptions.legendShow,\r\n orient: chartsOptions.legendOrient,\r\n top: chartsOptions.legendTop,\r\n left: chartsOptions.legendLeft,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n },\r\n series: unref(series)\r\n }\r\n}\r\n\r\nconst getPieTransformProps = (chartsOptions, chartData, fontSize) => {\r\n const { dataset = [] } = chartData\r\n let { data = [] } = dataset[0] || {}\r\n if (Array.isArray(chartsOptions.colors)) {\r\n const isUseLabelColors = chartsOptions.isUseLabelColors\r\n const colors = chartsOptions.colors\r\n data = data.map((item, index) => ({\r\n label: isUseLabelColors ? { color: colors[index] } : {},\r\n ...item\r\n }))\r\n }\r\n return {\r\n title: {\r\n text: chartsOptions.titleText,\r\n subtext: chartsOptions.titleSubtext,\r\n textStyle: {\r\n fontSize: chartsOptions.titleFontSize,\r\n fontWeight: chartsOptions.fontWeight,\r\n color: chartsOptions.titleColor\r\n },\r\n left: chartsOptions.textAlign || 'center'\r\n },\r\n // 提示\r\n tooltip: {\r\n show: chartsOptions.tooltipShow,\r\n trigger: chartsOptions.tooltipTrigger,\r\n formatter: (params) => {\r\n const { marker, seriesName, name, value, percent, data } = params || {}\r\n return useVariablesInText(\r\n chartsOptions.tooltipFormatter,\r\n {\r\n textData: {\r\n marker,\r\n name,\r\n value,\r\n percent,\r\n a: seriesName,\r\n b: name,\r\n c: value,\r\n d: percent,\r\n ...data\r\n }\r\n },\r\n {\r\n useNewline: true,\r\n useSpace: true\r\n }\r\n )\r\n },\r\n textStyle: {\r\n color: chartsOptions.tooltipTextStyleColor || '#333'\r\n },\r\n backgroundColor: chartsOptions.tooltipBackgroundColor || '#fff',\r\n borderColor: chartsOptions.tooltipBorderColor || '#eee'\r\n },\r\n // 图例\r\n legend: {\r\n show: chartsOptions.legendShow,\r\n orient: chartsOptions.legendOrient,\r\n top: chartsOptions.legendTop,\r\n left: chartsOptions.legendLeft,\r\n textStyle: {\r\n color: chartsOptions.legendTextStyleColor,\r\n fontSize: fontSize === 18 ? fontSize : chartsOptions.labelFontSize\r\n }\r\n },\r\n series: [\r\n {\r\n data,\r\n type: 'pie',\r\n radius: [chartsOptions.innerRadius, chartsOptions.outerRadius],\r\n center: [chartsOptions.centerLeft, chartsOptions.centerTop],\r\n roseType: chartsOptions.roseType,\r\n avoidLabelOverlap: false,\r\n minAngle: chartsOptions.minAngle,\r\n label: {\r\n show: chartsOptions.labelPosition !== 'center' && chartsOptions.labelShow,\r\n color: chartsOptions.labelColor,\r\n fontSize: fontSize === 18 ? fontSize : chartsOptions.labelFontSize,\r\n position: chartsOptions.labelPosition,\r\n formatter: handleFormatter(chartsOptions.labelFormatter)\r\n },\r\n labelLine: {\r\n show: chartsOptions.labelLineShow,\r\n length: chartsOptions.labelLineLength,\r\n length2: chartsOptions.labelLineLength2\r\n },\r\n emphasis: {\r\n itemStyle: {\r\n shadowBlur: 10,\r\n shadowOffsetX: 0,\r\n shadowColor: 'rgba(0, 0, 0, 0.5)'\r\n },\r\n label: {}\r\n }\r\n }\r\n ]\r\n }\r\n}\r\n\r\nconst getComboGraphTransformProps = (chartsOptions, chartData, fontSize) => {\r\n const { dimensions = [], dataset = [] } = chartData\r\n const xAxisData = computed(() => {\r\n return dimensions.map((item) => {\r\n let result = {}\r\n if (item && typeof item === 'object') {\r\n result = {\r\n ...item,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n }\r\n } else {\r\n result = {\r\n value: item,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n }\r\n }\r\n return result\r\n })\r\n })\r\n const series = computed(() => {\r\n const temp = [] as { [key: string]: any }[]\r\n const len = dataset.length\r\n const seriesTypes = chartsOptions.seriesTypes\r\n for (let i = 0; i < len; i++) {\r\n const seriesType = seriesTypes[i]\r\n const { type, axisIndex } = seriesType || {}\r\n let series = {\r\n type: type,\r\n yAxisIndex: axisIndex,\r\n ...dataset[i]\r\n } as { [key: string]: any }\r\n if (type === 'line') {\r\n const shadowStyle: any = {}\r\n if (chartsOptions.shadowColor) {\r\n shadowStyle.shadowColor = chartsOptions.shadowColor\r\n shadowStyle.shadowBlur = chartsOptions.shadowBlur\r\n shadowStyle.shadowOffsetY = chartsOptions.shadowOffsetY\r\n shadowStyle.shadowOffsetX = chartsOptions.shadowOffsetX\r\n }\r\n series = {\r\n ...series,\r\n symbolSize: chartsOptions.symbolSize,\r\n smooth: chartsOptions.smooth,\r\n itemStyle: {\r\n color: chartsOptions.colors[i]\r\n },\r\n areaStyle: {\r\n color: chartsOptions.areaGradientShow\r\n ? {\r\n type: 'linear',\r\n x: 0,\r\n y: 0,\r\n x2: 0,\r\n y2: 1,\r\n colorStops: [{\r\n offset: 0,\r\n color: chartsOptions.colors[i]\r\n }, {\r\n offset: 1,\r\n color: chartsOptions.areaGradientColor || 'transparent'\r\n }],\r\n global: false\r\n }\r\n : chartsOptions.colors[i],\r\n opacity: chartsOptions.areaStyleOpacity\r\n },\r\n lineStyle: {\r\n width: chartsOptions.lineStyleWidth,\r\n ...shadowStyle\r\n }\r\n }\r\n }\r\n if (type === 'bar') {\r\n const { gradientShow, gradientColors, gradientOffset } = chartsOptions\r\n const itemStyle: any = {}\r\n if (chartsOptions.barBorderRadius) {\r\n const radius = chartsOptions.barBorderRadius.split(',')\r\n if (radius?.length) {\r\n const radiusItems: any = []\r\n for (const rs of radius) {\r\n const value = parseFloat(rs)\r\n if (!isNaN(value)) {\r\n radiusItems.push(value)\r\n }\r\n }\r\n itemStyle.borderRadius = radiusItems\r\n }\r\n }\r\n if (gradientShow) {\r\n itemStyle.color = {\r\n x: 0,\r\n y: 0,\r\n x2: 0,\r\n y2: 1,\r\n colorStops: [{\r\n offset: 0,\r\n color: chartsOptions.colors[i]\r\n }, {\r\n offset: gradientOffset,\r\n color: gradientColors[i]\r\n }, {\r\n offset: 1,\r\n color: gradientColors[i]\r\n }]\r\n }\r\n }\r\n series = {\r\n ...series,\r\n barWidth: chartsOptions.barWidth,\r\n itemStyle\r\n }\r\n }\r\n if (chartsOptions.isShowMarkLine) {\r\n series.markLine = {\r\n data: [{ type: chartsOptions.markLineType }]\r\n }\r\n }\r\n temp.push(series)\r\n }\r\n return temp\r\n })\r\n const yAxis = computed(() => {\r\n const yAxis = chartsOptions.yAxis\r\n return yAxis?.map((axis, index) => {\r\n return {\r\n type: 'value',\r\n minInterval: chartsOptions.yAxisMinInterval,\r\n splitLine: {\r\n show: index === 0 ? chartsOptions.yAxisLeftSplitLineShow : chartsOptions.yAxisRightSplitLineShow,\r\n lineStyle: {\r\n color: chartsOptions.yAxisSplitLineStyleColor,\r\n type: index === 0 ? chartsOptions.yAxisLeftSplitLineType : chartsOptions.yAxisRightSplitLineType\r\n }\r\n },\r\n splitArea: {\r\n show: chartsOptions.yAxisSplitAreaShow\r\n },\r\n axisLabel: {\r\n fontSize: fontSize,\r\n show: chartsOptions.yAxisLabelShow,\r\n color: chartsOptions.yAxisLabelColor,\r\n formatter (value: string) {\r\n return useValueFormatter(axis.axisLabelFormatter, value)\r\n }\r\n },\r\n axisLine: {\r\n show: chartsOptions.yAxisLineAlwaysDisplay,\r\n lineStyle: {\r\n color: chartsOptions.yAxisLineStyleColor\r\n }\r\n },\r\n name: index === 0 ? chartsOptions.yAxisLeftName : chartsOptions.yAxisRightName,\r\n nameTextStyle: {\r\n fontSize: chartsOptions.yAxisLabelFontSize,\r\n color: chartsOptions.yAxisLabelColor,\r\n align: index === 0 ? 'right' : 'left'\r\n },\r\n max: chartsOptions.yAxisMaxValue || null\r\n }\r\n })\r\n })\r\n return {\r\n legend: {\r\n show: chartsOptions.legendShow,\r\n orient: chartsOptions.legendOrient,\r\n top: chartsOptions.legendTop,\r\n left: chartsOptions.legendLeft,\r\n textStyle: {\r\n color: chartsOptions.legendTextStyleColor,\r\n fontSize: fontSize\r\n }\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n show: chartsOptions.tooltipShow,\r\n formatter: (params) => {\r\n const len = params.length\r\n let formatter = ''\r\n let tooltipFormatter = chartsOptions.tooltipFormatter\r\n if (tooltipFormatter === '') {\r\n tooltipFormatter = '{marker} {a} {c}'\r\n }\r\n const seriesTypes = chartsOptions.seriesTypes\r\n for (let i = 0; i < len; i++) {\r\n const seriesType = seriesTypes[i]\r\n const { tooltipFormatter: _tooltipFormatter } = seriesType || {}\r\n const { marker, seriesName, name, value, data } = params[i] || {}\r\n if (i === 0) {\r\n formatter += `${name}<br/>`\r\n }\r\n formatter += useVariablesInText(\r\n // 如果系列有提示框组件就使用自定义,没有就用默认的\r\n _tooltipFormatter || tooltipFormatter,\r\n {\r\n textData: {\r\n marker,\r\n name,\r\n value,\r\n seriesName,\r\n a: seriesName,\r\n b: name,\r\n c: value,\r\n ...data\r\n }\r\n },\r\n {\r\n useNewline: true,\r\n useSpace: true\r\n }\r\n )\r\n formatter += '<br/>'\r\n }\r\n return formatter\r\n },\r\n textStyle: {\r\n color: chartsOptions.tooltipTextStyleColor || '#333',\r\n fontSize: fontSize\r\n },\r\n backgroundColor: chartsOptions.tooltipBackgroundColor || '#fff',\r\n borderColor: chartsOptions.tooltipBorderColor || '#eee'\r\n },\r\n xAxis: {\r\n name: chartsOptions.xAxisName,\r\n minInterval: chartsOptions.xAxisMinInterval,\r\n type: 'category',\r\n data: unref(xAxisData),\r\n splitLine: {\r\n show: chartsOptions.xAxisSplitLineShow,\r\n lineStyle: {\r\n color: chartsOptions.xAxisSplitLineStyleColor\r\n }\r\n },\r\n axisLabel: {\r\n color: chartsOptions.xAxisLabelColor,\r\n interval: chartsOptions.xAxisLabelInterval || 0,\r\n rotate: chartsOptions.xAxisLabelRotate,\r\n width: chartsOptions.xAxisLabelWidth,\r\n overflow: chartsOptions.xAxisLabelOverflow\r\n },\r\n axisLine: {\r\n lineStyle: {\r\n color: chartsOptions.xAxisLineStyleColor\r\n }\r\n },\r\n axisTick: {\r\n show: chartsOptions.xAxisTickShow\r\n }\r\n },\r\n yAxis: unref(yAxis),\r\n series: unref(series)\r\n }\r\n}\r\n\r\nconst getCommonTransformProps = (chartsOptions) => {\r\n return {\r\n title: {\r\n text: chartsOptions.titleText,\r\n subtext: chartsOptions.titleSubtext,\r\n textStyle: {\r\n fontSize: chartsOptions.titleFontSize,\r\n fontWeight: chartsOptions.fontWeight,\r\n color: chartsOptions.titleColor\r\n },\r\n left: chartsOptions.textAlign || 'center'\r\n },\r\n grid: {\r\n top: chartsOptions.gridTop,\r\n bottom: chartsOptions.gridBottom,\r\n left: chartsOptions.gridLeft,\r\n right: chartsOptions.gridRight,\r\n containLabel: chartsOptions.gridContainLabel\r\n },\r\n color: chartsOptions.colors\r\n }\r\n}\r\n\r\nconst transformProps = (chartsOptions, chartData, fontSize = 12) => {\r\n return {\r\n ...getCommonTransformProps(chartsOptions),\r\n ...getTransformProps(chartsOptions, chartData, fontSize)\r\n }\r\n}\r\nexport default transformProps\r\n","// 指标库相关内容\r\nimport indicators from './indicator'\r\n// 通用函数\r\nimport runCode from './utils/runCode'\r\n// 工作台专用\r\nimport useTransformChartDataByAttrKey from './hooks/useTransformChartDataByAttrKey'\r\nimport useTransformChartDataByAttrValue from './hooks/useTransformChartDataByAttrValue'\r\nimport useValueFormatter from './hooks/useValueFormatter'\r\nimport useVariablesInText from './hooks/useVariablesInText'\r\nimport transformProps from './utils/transformProps'\r\nimport { getIndicatorParams } from './utils/util'\r\n\r\nexport default {\r\n ...indicators,\r\n runCode,\r\n useTransformChartDataByAttrKey,\r\n useTransformChartDataByAttrValue,\r\n useValueFormatter,\r\n useVariablesInText,\r\n transformProps,\r\n getIndicatorParams\r\n}"],"names":["runCode","code","data","useFn","__spreadValues","dayjs","paramsStr","params","key","runFn","result","e","useVariablesInText","formatter","textData","codeData","useNewline","useSpace","variables","i","variable","statement","reg","textVariables","j","textVariable","usedVariable","res","str","lowerCaseIncludes","v1","v2","len","s","hasOwn","v","k","getConditions","conditions","item","getFormatStep","format","value","formatStep","handleFormatter","getLegendFormat","lineBreakCount","_a","lineBreakStr","text","formatQfw","str1","str2","index","getIndicatorParams","_0","__async","graphicConfig","request","INDICATOR_URL","PAGE_ID","dataSourceId","leftAxisList","rightAxisList","queryColumnList","indicators","unref","otherList","idMap","indexCode","parentId","promiseList","id","resolve","reject","success","a","b","c","err","MODEL_KEY_LIST","modelValue","excludeAttr","getGlobalModel","getCalcWays","props","around","unit","pageMode","componentList","sTime","eTime","component","interval","intervalUnit","startTime","endTime","operate","useCurrentTime","type","mode","model","diffValue","handleParams","calcWays","dateCalcTypes","activeKey","componentId","vals","fieldVal","handleConditions","list","cloneDeep","isSameLevel","cs","joinParams","conKey","handleIndicator","indicator","classification","sortData","getCpntSortData","label","name","location","show","indexCodeNum","calcType","builtInFormula","builtInValueSource","builtInCalcWay","formula","aggregate","distinct","dimByCount","dataTo","conditionData","componentField","setFieldValue","itemObj","__spreadProps","handleSqlConditions","controlList","classificationList","rowHeaderList","dimensionList","seriesList","handleControlList","conditionList","ol","l","cItem","sqlConditions","control","keyName","prop","dateFormat","modelKey","dataType","customValue","sqlCondition","getConditionItem","conditionLabel","conditionKey","conditionValueType","rule","notGlobal","typeGuid","alias","ruleValue","attr","handleVariableList","variableList","handleVarList","variableItem","operateValue","operateMode","operateType","rKey","record","propKey","recordValue","RECORD","customFormat","dateValue","propValue","knList","_time","step","handleSort","sort","customOrderColumns","labels","columnNames","orders","sortCpnts","customSort","order","formatIndicatorParams","otherParams","globalModel","isGroupTable","isPivotTable","source","dataViewId","plugin","layer","chartType","formFields","variableConditions","idxLibMode","preview","edvDataSetId","gParams","ruleVaule","globalList","notGlobalList","classifications","typeGuidString","customGroup","truncations","truncation","num","_b","series","indicatorList","leftAxis","rightAxis","indicatorsData","_d","_c","queryColumns","_f","_e","queryColumn","field","rowHeaders","resultRowHeaderList","_g","pivotColumnHeader","pivotColumnData","resultList","calc","filter","sorts","aggregateMethod","rowDimensionKeys","colDimensionKeys","fl","_h","flParams","__objRest","target","_i","fieldType","columnData","sortParams","_j","_k","q","resultParams","_l","cascadeControl","someParams","classParams","fieldValue","useTransformChartDataByAttrKey","dataFieldNames","types","set","map","dataLen","typesLen","vs","n","x","m","dimensions","dataset","useTransformChartDataByAttrValue","y","t","arr","useValueFormatter","getMarkLineData","chartsOptions","getTransformProps","chartData","fontSize","getBarTransformProps","getLineTransformProps","getPieTransformProps","getComboGraphTransformProps","yAxisLabelFormatter","xAxisLabelFormatter","computed","gradientShow","gradientColors","gradientOffset","barBorderRadius","ds","isStack","stackColumns","labelFormatter","seriesName","radius","radiusItems","rs","xAxisData","tooltipFormatter","marker","formatName","temp","shadowStyle","isUseLabelColors","colors","percent","seriesTypes","seriesType","axisIndex","itemStyle","yAxis","axis","_tooltipFormatter","getCommonTransformProps","transformProps"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,MAAMA,KAAU,CAACC,GAAcC,MAAiC;AAC9D,QAAMC,IAAQC,EAAA;AAAA,IACZ,OAAAC;AAAA,KACGH;AAEL,MAAII,IAAY;AAChB,QAAMC,IAAc,CAAA;AACpB,aAAWC,KAAOL;AAChB,IAAAG,KAAa,GAAGE,CAAG,KACZD,EAAA,KAAKJ,EAAMK,CAAG,CAAC;AAEZ,EAAAF,IAAAA,EAAU,QAAQ,MAAM,EAAE;AACtC,QAAMG,IAAQ,aAAaH,CAAS,YAAYL,CAAI;AAChD,MAAAS;AACA,MAAA;AAEF,IAAAA,IAAS,SAAS,wBAAwBD,CAAK,GAAG,EAAE,EAAE,GAAGF,CAAM;AAAA,WACxDI,GAAG;AAEH,WAAAV;AAAA,EACT;AACO,SAAAS;AACT,GCtBaE,KAAqB,CAChCC,IAAoB,IACpB,EAAE,UAAAC,GAAU,UAAAC,EAAS,IAA4E,IACjG,EAAE,YAAAC,IAAa,IAAO,UAAAC,IAAW,GAAM,IAAI,CAAA,MACxC;AAEG,QAAAf,IAAOE,EAAA,IAAKU,IACZI,KAAaL,KAAa,IAAI,MAAM,YAAY;AACtD,MAAIK,KAAa,QAAQA,EAAU,WAAW;AACrC,WAAAL;AAET,WAASM,IAAI,GAAGA,IAAID,EAAU,QAAQC,KAAK;AACnC,UAAAC,IAAWF,EAAUC,CAAC;AAC5B,QAAIE,IAAYD,EAAS,MAAM,GAAG,EAAE,EAAE;AACtC,UAAME,IAAM,gCACNC,IAAqBF,EAAU,MAAMC,CAAG;AAC9C,aAASE,IAAI,GAAGA,IAAID,EAAc,QAAQC,KAAK;AACvC,YAAAC,IAAeF,EAAcC,CAAC,GAC9BE,IAAexB,EAAKuB,CAAY;AACtC,MAAIC,KAAgB,SAENL,IAAAA,EAAU,QAAQI,GAAcC,CAAY;AAAA,IAE5D;AACA,KAAK,UAAW,KAAKL,CAAS,KAAM,WAAY,KAAKA,CAAS,OAChDA,IAAArB,GAAQqB,GAAWN,CAAQ,IAE7BF,IAAAA,EAAU,QAAQO,GAAUC,CAAS;AAAA,EACnD;AAEA,SAAIL,MACUH,IAAAA,KAAA,gBAAAA,EAAW,QAAQ,WAAW,WAGxCI,MACUJ,IAAAA,KAAA,gBAAAA,EAAW,QAAQ,YAAY,kBAG7CA,IAAYA,EAAU,QAAQ,gBAAgB,CAACc,GAAKC,MAAQd,KAAA,QAAAA,EAAU,MAAMA,KAAA,gBAAAA,EAAU,IAAIc,KAAOA,CAAG,GAC7Ff;AACT,GCjCagB,IAAoB,CAACC,GAAQC,MAAoB;AAC5D,MAAI,OAAOD,KAAO,YAAY,OAAOC,KAAO;AAC1C,WAAOD,EAAG,kBAAkB,EAAE,SAASC,EAAG,mBAAmB;MACpD,OAAOD,KAAO,YAAY,MAAM,QAAQC,CAAE,GAAG;AACtD,UAAMC,IAAMD,EAAG;AACf,aAASZ,IAAI,GAAGA,IAAIa,GAAKb,KAAK;AACtB,YAAAc,IAAIF,EAAGZ,CAAC;AACV,UAAA,OAAOc,KAAM,YAAYH,EAAG,oBAAoB,SAASG,EAAE,kBAAkB,CAAC;AACzE,eAAA;AAAA,IAEX;AAAA,EACF;AACO,SAAA;AACT,GAOaC,IAAS,CAACC,GAAWC,MAA4C,OAAO,UAAU,eAAe,KAAKD,GAAGC,CAAC,GAE1GC,KAAgB,CAACC,MAAe;AAC3C,QAAM5B,IAAc,CAAA;AACpB,aAAW6B,KAAQD;AACjB,IAAIC,EAAK,aACP7B,EAAO,KAAK,GAAG2B,GAAcE,EAAK,UAAU,CAAC,KACpCA,KAAA,gBAAAA,EAAM,cAAa,eAC5B7B,EAAO,KAAK6B,CAAI;AAGb,SAAA7B;AACT;AAEO,SAAS8B,GAAeC,GAAgB;AACvC,QAAAC,IAAQD,EAAO,MAAM,GAAG;AAC9B,MAAIE,IAAa;AACjB,MAAID,KAAA,QAAAA,EAAO;AACT,YAAQA,EAAMA,EAAM,SAAS,CAAC,GAAG;AAAA,MAC/B,KAAK;AACU,QAAAC,IAAA;AACb;AAAA,MACF,KAAK;AACU,QAAAA,IAAA;AACb;AAAA,MACF,KAAK;AACU,QAAAA,IAAA;AACb;AAAA,IAGJ;AAEK,SAAAA;AACT;AAEa,MAAAC,KAAkB,CAAC/B,MACvBA,EAAU,QAAQ,QAAQ;AAAA,CAAI,GAS1BgC,KAAkB,CAACJ,IAAiB,IAAI3B,MAAkB;;AAC/D,QAAAI,IAAYuB,EAAO,MAAM,YAAY,GAErCK,MAAiBC,IAAAN,EAAO,MAAM;AAAA,CAAI,MAAjB,gBAAAM,EAAoB,UAAS;AACpD,MAAIC,IAAe;AACnB,MAAIF;AACF,aAAS3B,IAAI,GAAGA,IAAI2B,GAAgB3B;AAClB,MAAA6B,KAAA;AAAA;AAGpB,MAAIC,IAAOR;AACX,MAAIvB,KAAA,QAAAA,EAAW,QAAQ;AACrB,eAAWqB,KAAQrB,GAAW;AAC5B,YAAMU,IAAMhB;AAAA,QACV2B;AAAA,QACA;AAAA,UACE,UAAAzB;AAAA,QACF;AAAA,QACA;AAAA,UACE,YAAY;AAAA,UACZ,UAAU;AAAA,QACZ;AAAA,MAAA;AAEF,MAAIc,MACKqB,IAAAA,EAAK,QAAQV,GAAMX,CAAG;AAAA,IAEjC;AACO,WAAA,GAAGoB,CAAY,SAASC,CAAI;AAAA,EAAA;AAE5B,WAAAR;AAEX;AAGO,SAASS,GAAWtB,GAAa;AACtC,MAAIlB,IAAS,IACTyC,IAAO,IACPC,IAAO,IACPV,IAAQ;AACZ,EAAId,EAAI,QAAQ,GAAG,IAAI,MACrBuB,IAAOvB,EAAI,MAAM,GAAG,EAAE,CAAC,GACvBwB,IAAOxB,EAAI,MAAM,GAAG,EAAE,CAAC,KAEhBuB,IAAAvB;AAET,MAAIyB,IAAQ,GACRrB,IAAM;AAEV,OADAA,IAAMmB,EAAK,SAAS,GACbnB,KAAO;AACZ,IAAAqB,IAAQ,MAAM,KAAKA,MAAU,IACzBF,EAAKnB,CAAG,MAAM,MACXtB,KAAUyC,EAAKnB,CAAG,IAClBtB,KAAU,MAAMyC,EAAKnB,CAAG,IAC1BtB,KAAUyC,EAAKnB,CAAG,GACvBA,KACAqB;AAEF,SAAA3C,IAASA,EACN,MAAM,EAAE,EACR,UACA,KAAK,EAAE,GACNkB,EAAI,QAAQ,GAAG,IAAI,KACrBc,IAAQhC,IAAS,MAAM0C,IAEfV,IAAAhC,GAEHgC;AACT;AAGsB,SAAAY,GAAoBC,GAAuE;AAAA,SAAAC,GAAA,4BAAvE,EAAE,eAAAC,GAAe,SAAAC,GAAS,eAAAC,IAAgB,IAAI,SAAAC,GAAS,cAAAC,KAAgB;;AAC3G,QAAA;AACF,YAAM,EAAE,cAAAC,IAAe,IAAI,eAAAC,IAAgB,CAAA,GAAI,iBAAAC,IAAkB,IAAI,YAAAC,IAAa,CAAG,EAAA,IAAIC,EAAMT,CAAa,GACtGU,IAAY,CAAC,GAAGL,GAAc,GAAGC,GAAe,GAAGC,GAAiB,GAAGC,CAAU,GACjFG,IAAa,CAAA;AACnB,iBAAW7B,KAAQ4B,GAAW;AAC5B,cAAM,EAAE,WAAAE,IAAY,IAAI,UAAAC,IAAW,OAAO/B;AACtC,QAAA+B,KAAY,CAACpC,EAAOK,GAAM,UAAU,KAAK,CAAC6B,EAAME,CAAQ,MAC1DF,EAAME,CAAQ,IAAID;AAAA,MAEtB;AACA,WAAItB,IAAA,OAAO,KAAKqB,CAAK,MAAjB,QAAArB,EAAoB,QAAQ;AAC9B,cAAMwB,IAAmB,CAAA;AACzB,mBAAWC,KAAMJ;AACH,UAAAG,EAAA;AAAA,YACV,IAAI,QAAQ,CAACE,GAASC,MAAW;AAE5B,cAAAhB,EAAA;AAAA,gBACC,GAAGC,CAAa;AAAA,gBAChB;AAAA,kBACE,QAAQC;AAAA,kBACR,WAAWY;AAAA,kBACX,WAAWJ,EAAMI,CAAE;AAAA,kBACnB,cAAAX;AAAA,gBACF;AAAA,cAAA,EAED,KAAK,CAAClC,MAAa;;AAClB,sBAAM,EAAE,SAAAgD,GAAS,MAAAzE,IAAO,CAAC,EAAA,IAAMyB,EAAI;AAC/B,gBAAAgD,OAAW5B,IAAA7C,KAAA,gBAAAA,EAAM,oBAAN,QAAA6C,EAAuB,UACpC0B,EAAQvE,EAAK,eAAe,IAE5BwE,EAAOxE,CAAI;AAAA,cACb,CACD,EACA,MAAM,CAACS,MAAM;AACZ,wBAAQ,MAAMA,CAAC,GACf+D,EAAO/D,CAAC;AAAA,cAAA,CACT;AAAA,YAAA,CACJ;AAAA,UAAA;AAOL,gBAJY,MAAM,QAAQ,IAAI4D,CAAW,GAClB;AAAA,UAAO,CAACK,GAAQC,MACrCD,EAAE,OAAO,CAACE,MAAWD,EAAE,KAAK,CAAC1C,MAAWA,EAAE,aAAa2C,EAAE,QAAQ,CAAC;AAAA,QAAA,EAElD,OAAO,CAAC3C,MAAWA,EAAE,QAAQ;AAAA,MACjD;AAAA,aACO4C,GAAK;AACZ,cAAQ,MAAMA,CAAG;AAAA,IACnB;AACA,WAAQ;EACV;AAAA;AClMa,MAAAC,KAAiB,CAAC,SAAS,OAAO,cAAc,QAAQ,OAAO,SAAS,WAAW,QAAQ,WAAW;ACMnH,IAAIC,yBAAiB;AACrB,MAAMC,KAAc;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEMC,KAAiB,CAAC3E,MACfyE,GAAW,IAAIzE,CAAG,GAIrB4E,KAAc,CAAClF,GAA4BmF,IAA+B,OAAO;AACrF,QAAM,EAAE,QAAAC,GAAQ,MAAAC,GAAM,IAAAf,EAAA,IAAOtE;AAC7B,MAAIQ,IAAS;AACP,QAAA,EAAE,UAAA8E,IAAW,IAAI,eAAAC,IAAgB,CAAG,EAAA,KAAIJ,KAAA,gBAAAA,EAAO,kBAAiB;AACtE,MAAIK,IAAa,MACbC,IAAa;AACjB,MAAIH,MAAa,UAAU;AACzB,UAAMI,IAAiBH,KAAA,gBAAAA,EAAe,KAAK,CAACtD,MAA4BA,EAAE,OAAOqC;AACjF,QAAI,CAACoB;AACH,aAAO;AAEH,UAAA,EAAE,UAAAC,GAAU,cAAAC,GAAc,WAAAC,GAAW,SAAAC,GAAS,SAAAC,GAAS,gBAAAC,EAAA,IAAmBN,KAAa;AAW7F,QAVIM,MACFR,IAAQrF,EAAM,EAAE,SAASwF,GAAUC,CAAY,GAC/CH,IAAQtF,EAAM,IAEZ0F,MACFL,IAAQrF,EAAM0F,CAAS,IAErBC,MACFL,IAAQtF,EAAM2F,CAAO,IAEnBC,GAAS;AACX,YAAM,EAAE,MAAAE,GAAM,OAAAzD,GAAO,MAAA0D,EAAA,IAASH;AAC9B,cAAQE,GAAM;AAAA,QACZ,KAAK;AACH,UAAAT,IAAQA,KAAQA,EAAM,IAAIhD,GAAO0D,CAAI,GACrCT,IAAQA,KAAQA,EAAM,IAAIjD,GAAO0D,CAAI;AACrC;AAAA,QACF,KAAK;AACH,UAAAV,IAAQA,KAAQA,EAAM,SAAShD,GAAO0D,CAAI,GAC1CT,IAAQA,KAAQA,EAAM,SAASjD,GAAO0D,CAAI;AAAA,MAC9C;AAAA,IACF;AAAA,EAAA,OACK;AACL,UAAMC,IAAQlB,GAAeX,CAAE,KAAK,CAAA;AAChC,IAAAN,EAAMmC,EAAM,SAAS,MACvBX,IAAQrF,EAAM6D,EAAMmC,EAAM,SAAS,CAAC,IAElCnC,EAAMmC,EAAM,OAAO,MACrBV,IAAQtF,EAAM6D,EAAMmC,EAAM,OAAO,CAAC;AAAA,EAEtC;AACA,MAAIX,KAASC,GAAO;AAClB,UAAMW,IAAYX,EAAM,KAAKD,GAAOH,EAAK,aAAa;AACtD,IAAA7E,IAAS,GAAG4E,MAAW,WAAW,MAAM,EAAE,GAAGgB,IAAY,CAAC;AAAA,EAC5D;AACA,SAAO5F,IAAS,CAACA,CAAM,IAAI;AAC7B,GAEM6F,KAAe,CAAChG,GAAa4F,MAA6B;AAC9D,MAAIA;AAEE,IAAAjE,EAAO3B,GAAQ,WAAW,MAC5BA,EAAO,eAAeA,EAAO,WAC7B,OAAOA,EAAO,YAEZ2B,EAAO3B,GAAQ,cAAc,MAC/BA,EAAO,kBAAkBA,EAAO,cAChC,OAAOA,EAAO,eAEZ2B,EAAO3B,GAAQ,UAAU,KAC3B,OAAOA,EAAO;AAAA,OAEX;AACC,UAAA,EAAE,UAAAiG,IAAW,CAAI,GAAA,eAAAC,IAAgB,CAAA,GAAI,WAAAC,GAAW,aAAAC,IAAc,GAAO,IAAApG;AAC3E,QAAImG,MAAc,MAAKF,KAAA,QAAAA,EAAU,YAAUC,KAAA,QAAAA,EAAe,WAAUE,GAAa;AAC/E,YAAMC,IAAOJ,EAAS,CAAC,EAAE,MAAM,GAAG;AAC9B,OAAAI,KAAA,gBAAAA,EAAM,UAAS,KACbA,EAAK,CAAC,MAAM,iBAEdrG,EAAO,WAAW6E,GAAY;AAAA,QAC5B,QAAQwB,EAAK,CAAC;AAAA,QACd,MAAMH,EAAc,CAAC;AAAA,QACrB,IAAIE;AAAA,MAAA,CACL,IAGL,OAAOpG,EAAO;AAAA,IAChB;AACI,QAAA2B,EAAO3B,GAAQ,UAAU,GAAG;AAI1B,UAHAA,EAAO,cAAc,WACvBA,EAAO,QAAQA,EAAO,YAEpBA,EAAO,aAAa;AAClB,YAAAA,EAAO,eAAe,UAAU;AAClC,cAAIsG,IAAWtG,EAAO;AAClB,UAAAsG,KAAYtG,EAAO,SACTsG,KAAA,IAAItG,EAAO,IAAI,KAEtBA,EAAA,aAAa,OAAOsG,IAAW;AAAA,QAAA;AAE/B,UAAAtG,EAAA,aAAa,OAAOA,EAAO,aAAa;AAGnD,aAAOA,EAAO;AAAA,IAChB;AACI,IAAA2B,EAAO3B,GAAQ,WAAW,KAC5B,OAAOA,EAAO,WAEZ2B,EAAO3B,GAAQ,YAAY,KAC7B,OAAOA,EAAO,YAEZ2B,EAAO3B,GAAQ,WAAW,MAC5BA,EAAO,eAAeA,EAAO,WAC7B,OAAOA,EAAO,YAEZ2B,EAAO3B,GAAQ,cAAc,MAC/BA,EAAO,kBAAkBA,EAAO,cAChC,OAAOA,EAAO,eAEZA,EAAO,aAAa,eAAeA,EAAO,mBAE5CA,EAAO,aAAaF,EAAA,EAAQ,OAAOE,EAAO,UAAU,IAElD2B,EAAO3B,GAAQ,UAAU,KAC3B,OAAOA,EAAO,UAEZ2B,EAAO3B,GAAQ,MAAM,KACvB,OAAOA,EAAO,MAEhB,OAAOA,EAAO;AAAA,EAChB;AACF,GAGMuG,KAAmB,CAACC,GAAiCZ,MAAkB;AAC3E,QAAMzF,IAAc,CAAA;AACpB,SAAIqG,KAAA,QAAAA,EAAM,UACRC,GAAUD,CAAI,EAAE,QAAQ,CAACxE,MAAS;AAC5B,QAAAA,EAAK,QAAQA,EAAK,YAAY;AAC1B,YAAA0E,IAAc,CAAC1E,EAAK,WAAW,KAAK,CAACJ,MAAWA,EAAE,QAAQA,EAAE,UAAU;AAC5E,MAAAI,EAAK,WAAW,QAAQ,CAAC2E,GAAS7D,MAAkB;AAClD,QAAAkD,GAAaW,GAAIf,CAAI;AACrB,cAAMgB,IAAqC,CAAA;AAI3C,YAHI9D,IAAQd,EAAK,WAAW,SAAS,MACnC4E,EAAW,OAAO5E,EAAK,OAErB0E;AACF,UAAAvG,EAAO,KAAKN,IAAA,IACP+G,IACAD,EACJ;AAAA,iBAEGA,EAAG,QAAQA,EAAG,YAAY;AACtB,gBAAAE,IAASjB,IAAO,kBAAkB;AACxC,UAAAzF,EAAO,KAAKN,EAAA;AAAA,YACV,CAACgH,CAAM,GAAGN,GAAiB,CAACI,CAAE,GAAGf,CAAI;AAAA,aAClCgB,EACJ;AAAA,QAAA;AAED,UAAAzG,EAAO,KAAKN,IAAA,IACP+G,IACAD,EACJ;AAAA,MAEL,CACD;AAAA,IAAA;AAED,MAAAX,GAAahE,GAAM4D,CAAI,GACvBzF,EAAO,KAAK6B,CAAI;AAAA,EAClB,CACD,GAEI7B;AACT,GAEM2G,KAAkB,CAACC,IAAmC,IAAIC,MAAwB;AAClF,MAAAD,KAAA,QAAAA,EAAW,aAAaC,GAAgB;AACpC,UAAAC,IAAWC,GAAgBH,CAAS;AAC1C,IAAIE,MACFD,EAAe,OAAOC;AAAA,EAE1B;AACM,QAAA;AAAA,IACJ,OAAAE;AAAA,IACA,MAAAC;AAAA,IACA,UAAAC;AAAA,IACA,MAAAC;AAAA,IACA,WAAAxD;AAAA,IACA,cAAAyD;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,gBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,YAAA7F;AAAA,IACA,WAAA8F;AAAA,IACA,UAAAC;AAAA,IACA,YAAAC;AAAA,IACA,QAAAC;AAAA,EACE,IAAAjB;AACA,MAAAkB;AAIJ,MAHIlG,MACFkG,IAAgB1B,GAAiBxE,CAAU,IAEzCyF,MAAa,aAAa;AAC5B,UAAMU,IAAsB,CAAA;AAC5B,WAAAC,GAAcD,GAAgBR,CAAkB,GACzC;AAAA,MACL,OAAOP,EAAM,KAAK;AAAA,MAClB,YAAYC;AAAA,MACZ,MAAAE;AAAA,MACA,UAAAE;AAAA,MACA,gBAAgBG;AAAA,MAChB,gBAAgBO,EAAe,cAAc;AAAA,IAAA;AAAA,EAEjD;AACA,QAAME,IAAe;AAAA,IACnB,OAAOjB,EAAM,KAAK;AAAA,IAClB,YAAYC;AAAA,IACZ,UAAAC;AAAA,IACA,MAAAC;AAAA,IACA,UAAUU,MAAW,MAAM,SAASR;AAAA,IACpC,cAAc1D;AAAA,IACd,iBAAiByD;AAAA,IACjB,WAAAM;AAAA,IACA,gBAAAJ;AAAA,IACA,oBAAAC;AAAA,IACA,SAAAE;AAAA,IACA,YAAYK;AAAA,EAAA;AAEd,MAAIR,MAAmB,eAAe;AAC9B,UAAAjB,IAAOmB,EAAe,MAAM,GAAG;AACjC,SAAAnB,KAAA,gBAAAA,EAAM,YAAW,GAAG;AAClB,UAAAP,IAAWO,EAAK,CAAC;AACrB,aAAIA,EAAK,CAAC,MAAM,YAAYA,EAAK,CAAC,MAAM,QAC3BP,IAAA,IAAIO,EAAK,CAAC,CAAC,KAEjB6B,EAAAxI,EAAA,IACFuI,IADE;AAAA,QAEL,UAAU,CAACnC,CAAQ;AAAA,QACnB,eAAe,CAACO,EAAK,CAAC,CAAC;AAAA,MAAA;AAAA,IAE3B;AAAA,EAAA;AAEA,WAAIY,MAAS,gBACXgB,EAAQ,WAAW,aACXA,EAAA,WAAW,CAAC,CAACN,GACrBM,EAAQ,WAAWL,IAEdM,EAAAxI,EAAA,IACFuI,IADE;AAAA,MAEL,gBAAAT;AAAA,IAAA;AAGN,GAEMW,KAAsB,CAACpF,MAAyC;AACpE,MAAI,CAACA;AACH,WAAO;AAET,QAAMqF,IAAc9B,IAAUvD,KAAA,gBAAAA,EAAe,gBAAe,CAAE,CAAA,EAC3D,OAAO,CAACtB,MAAWA,EAAE,iBAAiB,YAAY,GAC/C;AAAA,IACJ,oBAAA4G,IAAqB,CAAC;AAAA,IACtB,eAAAC,IAAgB,CAAC;AAAA,IACjB,eAAAC,IAAgB,CAAC;AAAA,IACjB,YAAAC,IAAa,CAAC;AAAA,IACd,cAAApF,IAAe,CAAC;AAAA,IAChB,eAAAC,IAAgB,CAAC;AAAA,IACjB,iBAAAC,IAAkB,CAAC;AAAA,IACnB,YAAAC,IAAa,CAAC;AAAA,EACZ,IAAAR;AACJ,EAAA0F,GAAkBL,CAAW;AAC7B,QAAM3E,IAAY;AAAA,IAChB,GAAG4E;AAAA,IACH,GAAGC;AAAA,IACH,GAAGC;AAAA,IACH,GAAGC;AAAA,IACH,GAAGpF;AAAA,IACH,GAAGC;AAAA,IACH,GAAGC;AAAA,IACH,GAAGC;AAAA,EAAA,GAECmF,IAAqB,CAAA;AAC3B,aAAWC,KAAMlF,GAAW;AAC1B,UAAM7B,IAAaD,IAAcgH,KAAA,gBAAAA,EAAI,eAAc,CAAE,CAAA;AACrD,QAAI/G,KAAA,QAAAA,EAAY,QAAQ;AAChB,YAAAyE,IAAOzE,EACV,OAAO,CAACH,OAAWA,KAAA,gBAAAA,EAAG,cAAa,WAAW,EAC9C,IAAI,CAACI,MAAc;AAClB,cAAMhC,IAAc,CAAA;AACpB,eAAIgC,KAAA,QAAAA,EAAM,eACRhC,EAAO,SAASgC,EAAK,aAEnBA,EAAK,eAAe,aAEtBhC,EAAO,KAAK,UACZA,EAAO,UAAUgC,EAAK,UACtBhC,EAAO,WAAWgC,EAAK,UACvBhC,EAAO,OAAOgC,EAAK,OAEdnC,EAAA;AAAA,UACL,cAAcmC,EAAK;AAAA,UACnB,gBAAgBA,EAAK;AAAA,UACrB,eAAeA,EAAK;AAAA,UACpB,oBAAoBA,EAAK;AAAA,UACzB,IAAIA,EAAK;AAAA,UACT,SAASA,EAAK;AAAA,UACd,MAAMA,EAAK;AAAA,UACX,WAAW;AAAA,UACX,WAAWA,EAAK;AAAA,UAChB,UAAUA,EAAK;AAAA,UACf,cAAcA,EAAK;AAAA,WAChBhC;AAAA,MACL,CACD;AACH,UAAIwG,KAAA,QAAAA,EAAM;AACR,mBAAWuC,KAAKvC;AACV,UAACqC,EAAc,KAAK,CAACG,MAAeA,EAAM,YAAYD,EAAE,OAAO,KACjEF,EAAc,KAAKE,CAAC;AAAA,IAI5B;AAAA,EACF;AACA,QAAMtH,IAAMoH,EAAc,QACpBI,IAAgBV;AACtB,WAAS3H,IAAI,GAAGA,IAAIa,GAAKb,KAAK;AACtB,UAAAsI,IAAUL,EAAcjI,CAAC;AAC3B,SAAAsI,KAAA,gBAAAA,EAAS,kBAAiB;AAC5B;AAEI,UAAA;AAAA,MACJ,IAAAjF;AAAA,MACA,SAAAkF;AAAA,MACA,MAAAC;AAAA,MACA,QAAQC;AAAA,MACR,UAAAC;AAAA,MACA,UAAAC,IAAW;AAAA,MACX,aAAAC;AAAA,IACE,IAAAN,GACEO,IAAsCC,GAAiBR,CAAO;AAEpE,IAAAf,GAAcsB,GAAcxF,GAAI,EAAE,MAAAmF,GAAM,YAAAC,GAAY,UAAAC,GAAU,SAAAH,GAAS,GACnEI,MAAa,OACfE,EAAa,aAAaD,KAAe,KAE3CP,EAAc,KAAKQ,CAAY;AAAA,EACjC;AACA,WAASxI,IAAIgI,EAAc,SAAS,GAAGhI,KAAK,GAAGA,KAAK;AAC5C,UAAAe,IAAOiH,EAAchI,CAAC;AACxB,IAACe,EAAK,mBACKF,GAAcmH,CAAa,EAAE,KAAK,CAAKrH,MAAAA,EAAE,UAAUI,EAAK,SAASJ,EAAE,eAAe,KAE/EqH,EAAA,OAAOhI,GAAG,CAAC;AAAA,EAG/B;AACO,SAAAgI;AACT;AAEA,SAASS,GAAkBR,GAA+B;AAClD,QAAA;AAAA,IACJ,IAAAjF;AAAA,IACA,SAAAkF;AAAA,IACA,gBAAAQ;AAAA,IACA,cAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,MAAAT;AAAA,IACA,MAAAU,IAAO;AAAA,IACP,WAAAC,IAAY;AAAA,IACZ,WAAAjG;AAAA,IACA,UAAAkG;AAAA,IACA,cAAAzC;AAAA,IACA,UAAAgC,IAAW;AAAA,EACT,IAAAL;AACJ,MAAIe,IAAQd,KAAWlF;AACvB,EAAIgG,KAASb,MACXa,KAAS,IAAIb,CAAI;AAEnB,MAAIc,IAAYJ;AAChB,SAAII,MAAc,WACZ,CAAC,aAAa,SAAS,EAAE,SAASd,CAAI,IAC5Bc,IAAAd,MAAS,cAAc,kBAAkB,eAC5CD,KAAA,QAAAA,EAAS,SAAS,eAC3Be,IAAYd,MAAS,kBACZD,KAAA,QAAAA,EAAS,SAAS,aAC3Be,IAAYd,MAAS,eAETc,IAAA,UAGZjG,MAAO,aACTgG,IAAQf,EAAQ,UACZe,KAASb,MACXa,KAAS,IAAIb,CAAI,KAEPc,IAAAJ,IAEP;AAAA,IACL,MAAMI;AAAA,IACN,OAAOP;AAAA,IACP,WAAWC;AAAA,IACX,YAAY;AAAA;AAAA;AAAA,IAEZ,WAAWC;AAAA,IACX,OAAAI;AAAA,IACA,iBAAiB,CAACF;AAAA,IAClB,WAAAjG;AAAA,IACA,UAAAkG;AAAA,IACA,cAAAzC;AAAA,IACA,UAAAgC;AAAA,EAAA;AAEJ;AAEA,SAASX,GAAmBL,GAAqC;AAC/D,MAAIA,KAAA,QAAAA,EAAa;AACf,eAAWW,KAAWX;AACpB,UAAIW,KAAA,QAAAA,EAAS;AACX,QAAAN,GAAkBM,EAAQ,UAAU;AAAA,WAC/B;AACC,cAAA;AAAA,UACJ,IAAAjF;AAAA,UACA,SAAAkF;AAAA,UACA,MAAAC;AAAA,UACA,UAAAE;AAAA,UACA,QAAQD;AAAA,UACR,UAAAE,IAAW;AAAA,UACX,aAAAC;AAAA,QACE,IAAAN,GAKEO,IAAsCC,GAAiBR,CAAO;AACpE,QAAAf,GAAcsB,GAAcxF,GAAI,EAAE,MAAAmF,GAAM,YAAAC,GAAY,UAAAC,GAAU,SAAAH,GAAS,GACnEI,MAAa,OACfE,EAAa,aAAaD,KAAe;AAE3C,mBAAWvJ,KAAOwJ;AACR,UAAAP,EAAAjJ,CAAG,IAAIwJ,EAAaxJ,CAAG;AAEjC,mBAAWkK,KAAQxF;AACjB,iBAAOuE,EAAQiB,CAAI;AAAA,MAEvB;AAGN;AAEA,SAASC,GAAoBC,GAAwC;AACnE,QAAMC,IAAqB,CAAA;AAC3B,MAAID,KAAA,QAAAA,EAAc;AAChB,eAAWrI,KAAQqI;AACjB,UAAIrI,EAAK,cAAc;AACrB,cAAMuI,IAAoB;AAAA,UACxB,aAAavI,EAAK;AAAA,UAClB,iBAAiB;AAAA,UACjB,WAAWA,EAAK;AAAA,UAChB,OAAOA,EAAK,WAAW;AAAA,QAAA;AAEX,QAAAmG,GAAAoC,GAAcvI,EAAK,IAAI;AAAA,UACnC,YAAYA,EAAK;AAAA,UACjB,MAAMA,EAAK;AAAA,UACX,SAASA,EAAK;AAAA,UACd,aAAaA,EAAK;AAAA,UAClB,aAAaA,EAAK;AAAA,UAClB,cAAcA,EAAK;AAAA,QAAA,CACpB,GACGA,EAAK,aAAa,OACpBuI,EAAa,aAAavI,EAAK,gBAE7BA,EAAK,WAEPuI,EAAa,aAAavI,EAAK,SAE7BA,EAAK,UACPuI,EAAa,QAAQvI,EAAK,QAE5BsI,EAAc,KAAKC,CAAY;AAAA,MACjC;AAAA;AAGG,SAAAD;AACT;AAGA,SAASnC,GAAexI,GAAWsE,GAAYjE,GAAc;AAC3D,QAAM,EAAE,MAAAoJ,IAAO,IAAI,YAAAC,IAAa,IAAI,UAAAC,IAAW,IAAI,SAAAH,IAAU,IAAI,cAAAqB,GAAc,aAAAC,GAAa,aAAAC,EAAY,IAAI1K,KAAU,CAAA,GAChH2K,IAAOrB,KAAYH;AACrB,MAAAlF,MAAO,YAAY0G,KAAQvB,GAAM;AAE7B,UAAAwB,IAAS,OAAO,OAAO;AAC7B,QAAIC,IAAUzB,GACVlH,IAASmH;AACP,UAAA1I,IAAayI,EAAM,MAAM,YAAY;AAC3C,QAAIzI,KAAA,QAAAA,EAAW,QAAQ;AACf,YAAAE,IAAWF,EAAU,CAAC,EAAE,MAAM,GAAG,EAAE,EAAE;AAC3C,MAAAkK,IAAUzB,EAAK,QAAQzI,EAAU,CAAC,GAAG,EAAE,GACvCuB,IAASrB,GACTlB,EAAK,aAAauC;AAAAA,IACpB;AACI,QAAA0I,KAAUA,EAAOD,CAAI,GAAG;AAC1B,YAAMG,IAAcnH,EAAMiH,EAAOD,CAAI,EAAEE,CAAO,CAAC;AAC3C,MAAA/K,EAAM,QAAQgL,CAAW,IAC3BnL,EAAK,aAAamL,EAAY,OAAO5I,KAAU,YAAY,IAE3DvC,EAAK,aAAamL;AAAA,IAEtB;AACA;AAAA,EACF;AAEA,QAAMhF,IAAQlB,GAAeX,CAAE,KAAK,CAAA,GAE9B,EAAE,OAAA9B,GAAO,QAAAD,IAAS,cAAc,MAAA0D,IAAO,IAAI,gBAAAD,GAAgB,QAAAoF,EAAA,IAAWjF,KAAS,IAC/EkF,IAAe3B,KAAcnH;AACnC,MAAIZ,EAAkBwE,EAAM,MAAM,MAAM,GAAG;AACrC,QAAAmF;AAUA,QATAtF,IACExD,IACF8I,IAAYtH,EAAMxB,CAAK,IAEvB8I,IAAYnL,EAAM,IAGpBmL,IAAYtH,EAAMxB,CAAK,GAErBqI,KAAgBC,KAAeC;AACjC,cAAQA,GAAa;AAAA,QACnB,KAAK;AACS,UAAAO,IAAAA,EAAU,IAAIT,GAAcC,CAAW;AACnD;AAAA,QACF,KAAK;AACS,UAAAQ,IAAAA,EAAU,SAAST,GAAcC,CAAW;AACxD;AAAA,MACJ;AAEG,IAAA9K,EAAA,aAAasL,KAAA,gBAAAA,EAAW,OAAOD,IACpCrL,EAAK,aAAaqL;AAAA,EAAA,WACTpF,MAAS,mBAAmB;AACrC,QAAIsF,IAAY9B;AAChB,QAAI,CAACA,GAAM;AACT,YAAM+B,IAAShC,KAAWA,EAAQ,MAAM,GAAG;AAC3C,MAAIgC,KAAA,QAAAA,EAAQ,WACED,IAAAC,EAAOA,EAAO,SAAS,CAAC;AAAA,IAExC;AACA,QAAI,CAACD;AACH;AAEF,QAAIE,IAAa;AAKb,QAJAzH,EAAMmC,EAAMoF,CAAS,CAAC,MACxBE,IAAQtL,EAAM6D,EAAMmC,EAAMoF,CAAS,CAAC,CAAC,IAGnCV,KAAgBC,KAAeC;AACjC,UAAIF,MAAiB;AAEf,YAAA1E,EAAM,aAAaA,EAAM,SAAS;AAC9B,gBAAAR,IAAW3B,EAAMmC,EAAM,OAAO,EAAE,KAAKnC,EAAMmC,EAAM,SAAS,GAAG2E,CAAW,IAAI;AAClF,kBAAQC,GAAa;AAAA,YACnB,KAAK;AACH,cAAAU,IAAQA,KAAQA,EAAM,IAAI9F,GAAUmF,CAAW;AAC/C;AAAA,YACF,KAAK;AACH,cAAAW,IAAQA,KAAQA,EAAM,SAAS9F,GAAUmF,CAAW;AAAA,UACxD;AAAA,QACF;AAAA,iBACS,CAAC,MAAM,CAACD,CAAY;AAC7B,gBAAQE,GAAa;AAAA,UACnB,KAAK;AACH,YAAAU,IAAQA,KAAQA,EAAM,IAAIZ,GAAcC,CAAW;AACnD;AAAA,UACF,KAAK;AACH,YAAAW,IAAQA,KAAQA,EAAM,SAASZ,GAAcC,CAAW;AAAA,QAC5D;AAAA;AAOJ,QAHIW,MACGzL,EAAA,aAAayL,KAAA,gBAAAA,EAAO,OAAOJ,KAE9BE,MAAc,gBAEZpF,EAAM,aAAaA,EAAM,SAAS;AAC9B,YAAAuF,IAAYpJ,GAAc+I,CAAY;AAC5C,MAAIK,MACG1L,EAAA,aAAagE,EAAMmC,EAAM,OAAO,EAAE,KAAKnC,EAAMmC,EAAM,SAAS,GAAGuF,CAAI,IAAI;AAAA,IAEhF;AAEF,IAAA1L,EAAK,aAAaqL;AAAA,EACT;AAAA,IAAA1J,EAAkBsE,GAAMnB,EAAc,IAC3C6E,KAAYyB,IACTpL,EAAA,aAAaoL,EAAOzB,CAAQ,IACxB,CAACA,KAAYyB,IACtBpL,EAAK,aAAaoL,EAAO,QAEpBpL,EAAA,aAAagE,EAAMxB,CAAK,IAG1BxC,EAAA,aAAagE,EAAMxB,CAAK;AAEjC;AAEA,MAAMmJ,KAAa,CAACC,MAAc;;AAChC,MAAIA,GAAM;AACF,UAAAtE,IAAgB,MAAM,QAAQsE,CAAI,IAAI9E,GAAU8E,CAAI,IAAI,CAAC9E,GAAU8E,CAAI,CAAC;AAC9E,QAAI3F,IAAO,IACP4F,IAAqB,CAAA;AACzB,UAAMC,IAAc,CAAA,GACdC,IAAmB,CAAA,GACnBC,IAAc,CAAA;AACpB,eAAW3J,KAAQiF,GAAU;AAU3B,UATIjF,EAAK,gBACPA,EAAK,QAAQA,EAAK,YAClB,OAAOA,EAAK,cAEVA,EAAK,SAAS,aAChBwJ,IAAqBxJ,EAAK,qBAE5B4D,IAAO5D,EAAK,MACLyJ,EAAA,KAAKzJ,EAAK,KAAK,IAClBQ,IAAAR,EAAK,eAAL,QAAAQ,EAAiB,SAAS,iBAAiB;AAE7C,cAAMgE,IAAOxE,EAAK,WAAW,MAAM,cAAc;AACrC,QAAA0J,EAAA,KAAKlF,EAAK,CAAC,CAAC;AAAA,MAAA;AAEZ,QAAAkF,EAAA,KAAK1J,EAAK,UAAU;AAE3B,MAAA2J,EAAA,KAAK3J,EAAK,KAAK;AAAA,IACxB;AAIA,WAHI4D,MAAS,aAAY6F,KAAA,gBAAAA,EAAQ,UAAS,MACjC7F,IAAA,gBAELA,MAAS,WACJ;AAAA,MACL,OAAO6F,EAAO,KAAK,GAAG;AAAA,MACtB,YAAYC,EAAY,KAAK,GAAG;AAAA,MAChC,MAAA9F;AAAA,MACA,oBAAA4F;AAAA,IAAA,IAGK;AAAA,MACL,OAAOC,EAAO,KAAK,GAAG;AAAA,MACtB,YAAYC,EAAY,KAAK,GAAG;AAAA,MAChC,OAAOC,EAAO,KAAK,GAAG;AAAA,MACtB,MAAA/F;AAAA,IAAA;AAAA,EAEJ;AAEO,WAAA2F;AAEX,GAGMrE,KAAkB,CAACvH,MAAc;AACrC,QAAM,EAAE,WAAAiM,IAAY,GAAO,IAAAjM;AACvB,MAAAkM,GACAC,IAAQ;AACZ,aAAW7H,KAAM2H,GAAW;AAC1B,UAAM9F,IAAQlB,GAAeX,CAAE,KAAK,CAAA,GAC9B,EAAE,MAAA2B,GAAM,QAAAmF,EAAW,IAAAjF;AACrB,QAAAxE,EAAkBsE,GAAM,OAAO,KAAKtE,EAAkByJ,KAAA,gBAAAA,EAAQ,OAAO,CAAC,OAAO,MAAM,CAAC,GAAG;AACjF,MAAAe,IAAAf,EAAO,MAAM;AACrB;AAAA,IACF;AAAA,EACF;AACA,SAAIe,MACWD,IAAA;AAAA,IACX,OAAOlM,EAAK;AAAA,IACZ,YAAYA,EAAK;AAAA,IACjB,OAAAmM;AAAA,IACA,MAAM;AAAA,EAAA,IAGHD;AACT,GAEME,KAAwB,CAACjH,GAAYkH,IAAmB,OAAO;;AACnE,QAAM,EAAE,eAAA9I,GAAe,MAAA0C,GAAM,aAAAqG,GAAa,cAAAC,IAAe,GAAU,IAAApH;AACnE,EAAImH,MACWvH,KAAAuH;AAET,QAAAE,IAAe7K,EAAkBsE,GAAM,YAAY;AAErD,MAAA;AAAA,IACF,QAAAwG;AAAA,IACA,YAAAC;AAAA,IACA,QAAAC,IAAS;AAAA;AAAA,IACT,OAAAC;AAAA;AAAA,IACA,WAAAC;AAAA;AAAA,IACA,oBAAAhE,IAAqB,CAAC;AAAA,IACtB,eAAAC,IAAgB,CAAC;AAAA,IACjB,eAAAC,IAAgB,CAAC;AAAA;AAAA,IACjB,YAAAC,IAAa,CAAC;AAAA,IACd,cAAApF,IAAe,CAAC;AAAA,IAChB,eAAAC,IAAgB,CAAC;AAAA,IACjB,iBAAAC,IAAkB,CAAC;AAAA,IACnB,YAAAC,IAAa,CAAC;AAAA,IACd,aAAA6E,IAAc,CAAC;AAAA,IACf,YAAAkE,IAAa,CAAC;AAAA,IACd,cAAApC,IAAe,CAAC;AAAA,IAChB,oBAAAqC,IAAqB,CAAC;AAAA;AAAA,IAEtB,YAAAC;AAAA;AAAA,IACA,SAAAC,KAAU;AAAA;AAAA,IACV,cAAAC;AAAA;AAAA,EAAA,IACE3J,KAAiB,CAAA,GAEjB+F,IAAqB,CAAA;AA2BzB,OA1BI/F,KAAA,gBAAAA,EAAe,cAAa,YAE9B+F,MAAiBzG,KAAAU,EAAc,kBAAd,OAAAV,KAA+B,CAAA,GAAI,IAAI,CAACZ,MAAW;AAClE,UAAMkL,IAAe,CAAA;AAIjB,QAHA,CAACnL,EAAOC,GAAG,iBAAiB,KAAK,CAACA,EAAE,SACtCkL,EAAQ,kBAAkB,KAExB,CAAClL,EAAE,MAAM;AACL,YAAAmL,IAAYnL,EAAE,QAAQ;AACpB,MAAAkL,EAAA,OAAOC,MAAc,SAAS,UAAUA;AAAA,IAClD;AACO,WAAAlN,IAAA,IACF+B,IACAkL;AAAA,EACL,CACD,GACGJ,KAAA,QAAAA,EAAoB,WACNzD,IAAAA,EAAc,OAAOyD,CAAkB,OAGzDzD,IAAgBX,GAAoBpF,CAAa,GAC7CmH,KAAA,QAAAA,EAAc,WAChBpB,IAAgBA,EAAc,OAAOmB,GAAmBC,CAAY,CAAC,KAIrEpB,KAAA,QAAAA,EAAe,QAAQ;AACzB,UAAM+D,IAAa/D,EAAc,OAAO,CAACrH,MAAWA,EAAE,eAAe,GAC/DqL,IAAgBhE,EAAc,OAAO,CAACrH,MAAW,CAACA,EAAE,eAAe;AACrE,KAAAoL,KAAA,gBAAAA,EAAY,UAAS,MACP/D,IAAA;AAAA,MACd;AAAA,QACE,MAAM;AAAA,QACN,YAAY+D;AAAA,MACd;AAAA,MACA,GAAGC;AAAA,IAAA;AAAA,EAGT;AAGA,EAAIhE,KAAA,QAAAA,EAAe,WACDA,IAAA1C,GAAiB0C,GAAe,GAAG,IAIjDsD,KAAS,SACPjL,EAAkBsE,GAAM,CAAC,SAAS,MAAM,CAAC,KAAMtE,EAAkBsE,GAAM,CAAC,QAAQ,WAAW,CAAC,MAAK4C,KAAA,gBAAAA,EAAoB,UAAS,IACxH+D,IAAA,MACCjL,EAAkBsE,GAAM,CAAC,UAAU,YAAY,OAAO,CAAC,IACxD2G,IAAA,MAEAA,IAAA;AAIR,MAAAvF;AACJ,QAAMkG,KAAuB,CAAA;AAC7B,MAAIC,KAAiB;AACrB,MACE,MAAM,QAAQ3E,CAAkB,KAChCA,EAAmB,SAAS,MAC3B,CAAC,CAAC,YAAY,eAAe,EAAE,SAAS5C,CAAI,MAAK4C,KAAA,gBAAAA,EAAoB,YAAW,IACjF;AACA,UAAM/G,IAAM+G,EAAmB;AAC/B,aAAS5H,IAAI,GAAGA,IAAIa,GAAKb,KAAK;AAC5B,YAAMoB,IAAOwG,EAAmB5H,CAAC,KAAK,CAAA,GAChC;AAAA,QACJ,OAAAuG,IAAQ;AAAA,QACR,MAAAC,IAAO;AAAA,QACP,MAAAE,IAAO;AAAA,QACP,MAAAiE;AAAA,QACA,aAAA6B;AAAA,QACA,YAAArL;AAAA,QACA,YAAAsH;AAAA,QACA,UAAAW,IAAW;AAAA,QACX,aAAAqD,IAAc,CAAC;AAAA,MACb,IAAArL;AAEA,UAAAsF,KAAQ7F,MAAQ,GAAG;AACJ,QAAA0L,KAAAnD,GACAhD,IAAA;AAAA,UACf,OAAOG,EAAM,KAAK;AAAA,UAClB,YAAYC;AAAA,UACZ,MAAAE;AAAA,UACA,MAAMJ,GAAgBlF,CAAI,KAAKsJ,GAAWC,CAAI,KAAKA;AAAA,UACnD,aAAA6B;AAAA,UACA,YAAY7G,GAAiBxE,CAAU;AAAA,UACvC,UAAAiI;AAAA,QAAA,GAEEX,MACFrC,EAAe,aAAaqC,IAE1BjC,MAAS,cAAc,CAACJ,EAAe,eACzCA,EAAe,aAAa;AAG9B,cAAMsG,IAAkB,CAAA;AACxB,YAAI,MAAM,QAAQD,CAAW,KAAKA,EAAY,SAAS,GAAG;AACxD,gBAAM5L,IAAM4L,EAAY;AACxB,mBAASzM,IAAI,GAAGA,IAAIa,GAAKb,KAAK;AAC5B,kBAAMoB,IAAOqL,EAAYzM,CAAC,KAAK,CAAA,GACzB,EAAE,MAAAkJ,IAAO,IAAI,KAAAyD,IAAM,GAAG,MAAAnG,IAAO,GAAOpF,IAAAA;AAC1C,YAAI8H,KAAQyD,MACVD,EAAW,MAAMC,GACjBD,EAAW,OAAOxD,GACd1C,MACFkG,EAAW,iBAAiBlG;AAAAA,UAGlC;AAAA,QACF;AAIA,aAHIoG,KAAA,OAAO,KAAKF,CAAU,MAAtB,QAAAE,GAAyB,WAC3BxG,EAAe,aAAasG,IAE1BhM,EAAkBsE,GAAM,CAAC,WAAW,WAAW,CAAC;AAClD,UAAAsH,GAAgB,KAAKlG,CAAc;AAAA;AAEnC;AAAA,MAEJ;AAAA,IACF;AAAA,EACF;AAEI,MAAAyG;AACJ,MAAI,MAAM,QAAQ9E,CAAU,KAAKA,EAAW,SAAS,GAAG;AACtD,UAAMlH,IAAMkH,EAAW;AACvB,aAAS/H,IAAI,GAAGA,IAAIa,GAAKb,KAAK;AAC5B,YAAMoB,IAAO2G,EAAW/H,CAAC,KAAK,CAAA,GACxB,EAAE,OAAAuG,IAAQ,IAAI,MAAAC,IAAO,IAAI,MAAAE,IAAO,IAAO,MAAAiE,GAAM,aAAA6B,GAAa,YAAArL,GAAY,UAAAiI,EAAA,IAAahI;AAErF,UAAAsF,KAAQ7F,MAAQ,GAAG;AACZ,QAAAgM,KAAA;AAAA,UACP,OAAOtG,EAAM,KAAK;AAAA,UAClB,YAAYC;AAAA,UACZ,MAAAE;AAAA,UACA,MAAMgE,GAAWC,CAAI;AAAA,UACrB,aAAA6B;AAAA,UACA,YAAY7G,GAAiBxE,CAAU;AAAA,UACvC,UAAAiI;AAAA,QAAA;AAEF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,QAAM0D,IAAqB,CAAA;AACb,EAAAnK,KAAA,QAAAA,EAAA,QAAQ,CAACoK,MAAoC;AACzD,IAAAA,EAAS,WAAW,QACpBD,EAAc,KAAK5G,GAAgB6G,GAAU3G,CAAc,CAAC;AAAA,EAAA,IAE/CxD,KAAA,QAAAA,EAAA,QAAQ,CAACoK,MAAqC;AAC3D,IAAAA,EAAU,WAAW,SACrBF,EAAc,KAAK5G,GAAgB8G,GAAW5G,CAAc,CAAC;AAAA,EAAA;AAG/D,MAAI6G,KAAiBnK;AACjB,GAAAoK,MAAAC,KAAA/B,KAAA,gBAAAA,EAAa,kBAAb,gBAAA+B,GAA4B,eAA5B,QAAAD,GAAwC,WAE1CD,KAAiB7B,EAAY,cAAc,aAE7B6B,MAAA,QAAAA,GAAA,QAAQ,CAAC9G,MAAqC;AAC5D,IAAAA,EAAU,WAAW,QACrB2G,EAAc,KAAK5G,GAAgBC,GAAWC,CAAc,CAAC;AAAA,EAAA;AAI/D,QAAMgH,IAAoB,CAAA;AACtB,EAAA,CAAC,YAAY,eAAe,EAAE,SAASpI,CAAI,MAAK4C,KAAA,gBAAAA,EAAoB,UAAS,MAC7D/E,IAAA+E,KAEhByF,MAAAC,KAAAlC,KAAA,gBAAAA,EAAa,kBAAb,gBAAAkC,GAA4B,eAA5B,QAAAD,GAAwC,WAE1CxK,IAAkBuI,EAAY,cAAc,aAE7BvI,KAAA,QAAAA,EAAA,QAAQ,CAAC0K,MAAuC;AACzD,UAAA,EAAE,OAAAhH,GAAO,MAAAC,GAAM,UAAAC,GAAU,MAAAC,GAAM,WAAAxD,GAAW,MAAAyH,GAAM,UAAAvB,GAAU,cAAAzC,GAAc,YAAA8B,GAAY,YAAAtH,EAAA,IAAeoM;AACrG,QAAAtC,IAAaP,GAAWC,CAAI;AAChC,QAAIS,EAAY,MAAM;AAEpB,YAAM,EAAE,OAAAoC,GAAO,OAAAtC,MAAUE,EAAY;AACrC,UAAIjF,IAAY2G,EAAc,KAAK,CAAK9L,MAAAA,EAAE,UAAUwM,CAAK;AACrD,MAAA,CAACrH,KAAaI,MAAUiH,MACdrH,IAAAoH,IAEVpH,MACW8E,IAAA;AAAA,QACX,YAAY9E,EAAU;AAAA,QACtB,OAAOiF,EAAY,KAAK;AAAA,QACxB,OAAOF,EAAM,YAAY;AAAA,QACzB,MAAM;AAAA,MAAA;AAAA,IAGZ;AACA,UAAM1D,IAAe;AAAA,MACnB,OAAAjB;AAAA,MACA,YAAYC;AAAA,MACZ,UAAAC;AAAA,MACA,MAAAC;AAAA,MACA,MAAMuE;AAAA,MACN,UAAU;AAAA,MACV,cAAc/H;AAAA,MACd,iBAAiByD;AAAA,MACjB,YAAYhB,GAAiBxE,CAAU;AAAA,MACvC,UAAAiI;AAAA,IAAA;AAEF,IAAIX,MACFjB,EAAQ,aAAaiB,IAEnBjC,MAAS,cAAc,CAACgB,EAAQ,eAClCA,EAAQ,aAAa,YAEvB4F,EAAa,KAAK5F,CAAO;AAAA,EAAA;AAI3B,MAAIiG,KAAkB,CAAA,GAClBC,IAA2B,CAAA;AAM/B,MALI,MAAM,QAAQ7F,CAAa,KAAKA,EAAc,SAAS,IACnC6F,IAAA7F,IACb,MAAM,QAAQC,CAAa,KAAKA,EAAc,SAAS,MAC1C4F,IAAA5F,IAEpB4F,KAAA,QAAAA,EAAqB,QAAQ;AAC/B,UAAM7M,IAAM6M,EAAoB;AAChC,aAAS1N,IAAI,GAAGA,IAAIa,GAAKb,KAAK;AAC5B,YAAMoB,IAAOsM,EAAoB1N,CAAC,KAAK,CAAA,GACjC,EAAE,OAAAuG,IAAQ,IAAI,MAAAC,IAAO,IAAI,MAAAE,IAAO,IAAO,MAAAiE,GAAM,aAAA6B,GAAa,YAAArL,GAAY,aAAAsL,GAAa,UAAArD,IAAW,IAAI,YAAAX,EAAe,IAAArH;AACnH,UAAA6J,IAAaP,GAAWC,CAAI;AAChC,UAAIS,EAAY,MAAM;AAEpB,cAAM,EAAE,OAAAoC,GAAO,OAAAtC,MAAUE,EAAY;AACrC,YAAIjF,IAAY2G,EAAc,KAAK,CAAK9L,MAAAA,EAAE,UAAUwM,CAAK;AACzD,QAAI,CAACrH,KAAa/E,EAAK,UAAUoM,MACnBrH,IAAA/E,IAEV+E,MACW8E,IAAA;AAAA,UACX,YAAY9E,EAAU;AAAA,UACtB,OAAOiF,EAAY,KAAK;AAAA,UACxB,OAAOF,EAAM,YAAY;AAAA,UACzB,MAAM;AAAA,QAAA;AAAA,MAGZ;AACA,YAAM1D,IAAe;AAAA,QACnB,OAAOjB,EAAM,KAAK;AAAA,QAClB,YAAYC;AAAA,QACZ,MAAAE;AAAA,QACA,MAAMuE;AAAA,QACN,aAAAuB;AAAA,QACA,YAAY7G,GAAiBxE,CAAU;AAAA,QACvC,UAAAiI;AAAA,MAAA;AAEF,MAAIX,MACFjB,EAAQ,aAAaiB,IAEnBjC,MAAS,cAAc,CAACgB,EAAQ,eAClCA,EAAQ,aAAa;AAGvB,YAAMkF,IAAkB,CAAA;AACxB,UAAI,MAAM,QAAQD,CAAW,KAAKA,EAAY,SAAS,GAAG;AACxD,cAAM5L,IAAM4L,EAAY;AACxB,iBAASzM,IAAI,GAAGA,IAAIa,GAAKb,KAAK;AAC5B,gBAAMoB,IAAOqL,EAAYzM,CAAC,KAAK,CAAA,GACzB,EAAE,MAAAkJ,IAAO,IAAI,KAAAyD,KAAM,GAAG,MAAAnG,KAAO,GAAOpF,IAAAA;AAC1C,UAAI8H,KAAQyD,OACVD,EAAW,MAAMC,IACjBD,EAAW,OAAOxD,GACd1C,OACFkG,EAAW,iBAAiBlG;AAAAA,QAGlC;AAAA,MACF;AACA,OAAImH,KAAA,OAAO,KAAKjB,CAAU,MAAtB,QAAAiB,GAAyB,WAC3BnG,EAAQ,aAAakF,IAEvBe,GAAW,KAAKjG,CAAO;AAAA,IACzB;AAAA,EACF;AAGA,MAAIoG,KAAyB,CAAA,GACzBC;AAEJ,MAAIzC,KAAA,QAAAA,EAAa,eAAe;AAC9B,QAAI0C,IAAkB,CAAA;AAChB,UAAA;AAAA,MACJ,MAAAC,IAAO,CAAC;AAAA,MACR,QAAAC,IAAS,CAAC;AAAA,MACV,aAAAvB,IAAc,CAAC;AAAA,MACf,OAAAwB,IAAQ,CAAC;AAAA,MACT,iBAAAC,IAAkB,CAAC;AAAA,MACnB,kBAAAC,IAAmB,CAAC;AAAA,MACpB,kBAAAC,IAAmB,CAAC;AAAA,IAAA,IAClBhD,EAAY;AAIhB,QAFc0B,EAAA,KAAK,GAAGiB,CAAI,GAEtBC,KAAA,QAAAA,EAAQ;AACV,iBAAWK,KAAML,GAAQ;AACvB,cAA8BM,KAAAD,GAAtB,QAAArJ,MAAsBsJ,IAAbC,IAAAC,GAAaF,IAAb,CAAT;AACR,QAAItJ,MAAS,eAEE8I,IAAAhB,IACJ9H,MAAS,gBAEL8I,IAAAV;AAET,cAAAqB,IAASX,EAAW,KAAK,CAAC9M,MAAWA,EAAE,eAAeqN,EAAG,SAAS;AACxE,QAAII,MACGA,EAAO,eACVA,EAAO,aAAa,KAEfA,EAAA,WAAW,KAAKF,CAAQ;AAAA,MAEnC;AAGF,QAAI9B,KAAA,QAAAA,EAAa;AACf,iBAAWrL,KAAQqL,GAAa;AAC9B,cAAMgC,IAASrB,EAAa,KAAK,OAAKpM,EAAE,eAAeI,EAAK,GAAG;AAC/D,QAAIqN,MACFA,EAAO,aAAa;AAAA,UAClB,KAAKrN,EAAK;AAAA,UACV,MAAMA,EAAK;AAAA,QAAA;AAAA,MAGjB;AAIF,QAAI6M,KAAA,QAAAA,EAAO;AACT,iBAAW7M,KAAQ6M,GAAO;AACxB,cAAiDS,KAAAtN,GAAzC,aAAAuN,GAAW,YAAAC,MAA8BF,IAAfG,IAAAL,GAAeE,IAAf,CAA1B,aAAW;AACnB,QAAIC,MAAc,gBAEHb,IAAAhB,GACKe,KAAAe,KACTD,MAAc,gBAEVb,IAAAV;AAEf,cAAMqB,IAASX,EAAW,KAAK,OAAK9M,EAAE,UAAU6N,EAAW,KAAK;AAChE,QAAIJ,MACFA,EAAO,OAAOhH,EAAAxI,EAAA,IACT4P,IADS;AAAA,UAEZ,YAAYJ,EAAO;AAAA,QAAA;AAAA,MAGzB;AAIF,SAAIK,KAAA,OAAO,KAAKZ,CAAe,MAA3B,QAAAY,GAA8B;AAChC,iBAAWzP,KAAO6O,GAAiB;AACjC,cAAMO,IAASrB,EAAa,KAAK,CAAKpM,MAAAA,EAAE,UAAU3B,CAAG;AACrD,QAAIoP,OAAUM,KAAAb,EAAgB7O,CAAG,MAAnB,QAAA0P,GAAsB,YAC3BN,EAAA,kBAAkBP,EAAgB7O,CAAG;AAAA,MAEhD;AAGF,IAAAoO,KAAa,CAAA,GACbG,KAAoB,CAAA;AACpB,eAAWoB,KAAK5B;AACd,MAAIe,EAAiB,SAASa,EAAE,UAAU,IACxCvB,GAAW,KAAKuB,CAAC,IACRZ,EAAiB,SAASY,EAAE,UAAU,KAC/CpB,GAAkB,KAAKoB,CAAC;AAAA,EAG9B;AASI,MAPAtO,EAAkBsE,GAAM,CAAC,QAAQ,cAAc,SAAS,CAAC,IAC/C4G,IAAA,OACHlL,EAAkBsE,GAAM,CAAC,WAAW,CAAC,MAClC4G,IAAA,cAIVN,KAAgBtG,MAAS,QAAQ;AACnC,QAAIyI,GAAW,WAAW,KAAKX,EAAc,WAAW;AACtD;AAEY,IAAAlB,IAAA;AAAA,EAEL,OAAA;AAAA,QAAAD,MAAU,OAAOyB,EAAa,WAAW;AAClD;AAES,QAAAzB,MAAU,OAAOmB,EAAc,WAAW;AACnD;AACS,QAAAnB,MAAU,QAAS,CAACY,MAAkBf,MAAW,kBAAmB,CAACK,EAAW,cAAc,CAACA,EAAW;AACnH;QACSF,MAAU,OAAO3G,MAAS,oBAAoB8H,EAAc,WAAW;AAChF;AAAA;AAIF,EAAIhF,KAAA,QAAAA,EAAe,WACT6D,IAAA,KACIC,IAAA;AAGV,MAAAqD;AACJ,MAAI,CAACvO,EAAkBsE,GAAM,CAAC,WAAW,WAAW,CAAC,OAAKkK,KAAA,OAAO,KAAKrD,CAAU,MAAtB,QAAAqD,GAAyB,SAAQ;AACnF,UAAAC,IAAiBjO,GAAcyG,CAAW,EAAE,KAAK,CAAC3G,MAAWA,EAAE,iBAAiB,YAAY,GAC5FoO,IAAkB,CAAA;AACxB,QAAID,GAAgB;AAClB,YAAMjK,IAAQlB,GAAemL,EAAe,EAAE,KAAK,CAAA;AACnD,UAAIjK,KAAA,QAAAA,EAAO;AACT,QAAAkK,EAAW,kBAAkBlK,EAAM;AAAA;AAEnC;AAAA,IAEJ;AACA,IAAIF,MAAS,qBACXoK,EAAW,gBAAgBtC,EAAc,OAAO,CAAA9L,MAAKA,EAAE,IAAI,IAEzDwK,MAAW,mBACb4D,EAAW,eAAenD,KAEbgD,KAAAhQ,EAAA;AAAA,MACb,KAAK;AAAA,MACL,QAAAuM;AAAA,MACA,YAAAC;AAAA,MACA,QAAQ;AAAA,MACR,OAAAE;AAAA,MACA,WAAW;AAAA,MACX,oBAAoBY;AAAA,MACpB,MAAMvH,MAAS,mBAAmB,qBAAqB;AAAA,MACvD,YAAY6G,EAAW;AAAA,MACvB,YAAYA,EAAW;AAAA,MACvB,eAAAxD;AAAA,MACA,YAAY;AAAA,MACZ,SAASnE,EAAM;AAAA,OACZkL;AAAA,EACL,OACK;AACL,QAAIC,IAAc,CAAA;AAClB,IAAI3O,EAAkBsE,GAAM,CAAC,WAAW,WAAW,CAAC,IAEpCqK,IAAA;AAAA,MACZ,iBAAA/C;AAAA,IAAA,IAGY+C,IAAA;AAAA,MACZ,gBAAAjJ;AAAA,IAAA,GAGW6I,KAAAhQ,EAAA;AAAA,MACb,KAAK;AAAA,MACL,QAAAuM;AAAA,MACA,YAAAC;AAAA,MACA,QAAQF,IAAe,MAAMG;AAAA,MAC7B,OAAAC;AAAA,MACA,WAAWJ,IAAe,gBAAgBK;AAAA,MAC1C,QAAAiB;AAAA,MACA,eAAAC;AAAA,MACA,cAAcxB,IAAe,CAAA,IAAK8B;AAAA,MAClC,UAAU;AAAA,MACV,cAAcnB,MAAgB;AAAA,MAC9B,eAAe5D,EAAc,IAAI,CAAKrH,MAAA;AAC9B,cAAA,EAAE,YAAAsO,EAAe,IAAAtO,GACjB5B,IAAc,CAAA;AACpB,eAAIkQ,KAAc,MAAM,QAAQA,CAAU,MACjClQ,EAAA,aAAa,KAAK,UAAUkQ,CAAU,IAExCrQ,IAAA,IACF+B,IACA5B;AAAA,MACL,CACD;AAAA,MACD,YAAA2M;AAAA,MACA,SAAAC;AAAA,MACA,YAAAyB;AAAA,MACA,SAASvJ,EAAM;AAAA;AAAA,MAEf,YAAY2J;AAAA,MACZ,eAAeD;AAAA,OACZyB;AAAA,EAEP;AACO,SAAAJ;AACT,GAEenM,KAAA;AAAA,EACb,uBAAAqI;AACF,GC7qCaoE,KAAiC,CAACxQ,IAAa,IAAIyQ,MAA0C;AACpG,MAAA,EAAE,MAAAhJ,IAAO,QAAQ,OAAAiJ,IAAQ,CAAA,EAAG,IAAID,KAAkB;AAC/C,EAAAhJ,KAAAA,KAAA,gBAAAA,EAAM,WAAUA;AACjB,QAAAkJ,wBAAU,OACVC,wBAAU,OACVC,IAAU7Q,EAAK,QACf8Q,IAAWJ,EAAM;AAEvB,MAAIG,MAAY,GAAG;AACjB,UAAME,IAAU,CAAA;AAEhB,aAAS9P,IAAI,GAAGA,IAAI6P,GAAU7P,KAAK;AAC3B,YAAAgF,IAAOyK,EAAMzP,CAAC,GACd,EAAE,OAAAuG,GAAO,OAAAhF,EAAU,IAAAyD,GACnBhE,IAAIyG,EAAAxI,EAAA,IAAKF,EAAK,CAAC,IAAX,EAAc,OAAOA,EAAK,CAAC,EAAEwC,CAAK;AAC5C,MAAAmO,EAAI,IAAInJ,CAAK,GAEbuJ,EAAG,KAAK9O,CAAC;AAAA,IACX;AACA,UAAM+O,IAAIhR,EAAK,CAAC,EAAEyH,CAAI,KAAK;AACvB,IAAAmJ,EAAA,IAAII,GAAGD,CAAE;AAAA,EAAA;AAEb,aAAS9P,IAAI,GAAGA,IAAI4P,GAAS5P,KAAK;AAC1B,YAAAoB,IAAOrC,EAAKiB,CAAC,GACbgQ,IAAI5O,EAAKoF,CAAI;AACnB,MAAAkJ,EAAI,IAAIM,CAAC;AACT,eAAS3P,IAAI,GAAGA,IAAIwP,GAAUxP,KAAK;AAC3B,cAAA2E,IAAOyK,EAAMpP,CAAC,GACd,EAAE,OAAAkG,GAAO,OAAAhF,EAAU,IAAAyD,GACnBhE,IAAIyG,EAAAxI,EAAA,IAAKmC,IAAL,EAAW,OAAOA,EAAKG,CAAK;AAClC,YAAAoO,EAAI,IAAIpJ,CAAK,GAAG;AACZ,gBAAA0J,IAASN,EAAI,IAAIpJ,CAAK;AAC5B,UAAA0J,EAAE,KAAKjP,CAAC,GACJ2O,EAAA,IAAIpJ,GAAO0J,CAAC;AAAA,QAAA;AAEhB,UAAAN,EAAI,IAAIpJ,GAAO,CAACvF,CAAC,CAAC;AAAA,MAEtB;AAAA,IACF;AAGI,QAAAkP,IAAa,MAAM,KAAKR,CAAG,GAC3BS,IAAmC,CAAA;AACzC,aAAW,CAAC3J,GAAMzH,CAAI,KAAK4Q;AACzB,IAAAQ,EAAQ,KAAK;AAAA,MACX,MAAA3J;AAAAA,MACA,MAAAzH;AAAAA,IAAA,CACD;AAEI,SAAA;AAAA,IACL,YAAAmR;AAAA,IACA,SAAAC;AAAA,EAAA;AAEJ,GCvDaC,KAAmC,CAACrR,GAAYyQ,MAA6C;AACpG,MAAA,EAAE,MAAAhJ,IAAO,QAAQ,OAAAjF,IAAQ,SAAS,MAAAyD,IAAO,OAAA,IAAWwK,KAAkB;AAE1E,EAAAhJ,IAAOA,KAAA,gBAAAA,EAAM,QACbjF,IAAQA,KAAA,gBAAAA,EAAO,QACfyD,IAAOA,KAAA,gBAAAA,EAAM;AACP,QAAA0K,wBAAU,OACVC,wBAAU,OACV9O,IAAM9B,EAAK;AACjB,WAASiB,IAAI,GAAGA,IAAIa,GAAKb,KAAK;AACtB,UAAAoB,IAAOrC,EAAKiB,CAAC,GAEbgQ,IAAI5O,EAAKoF,CAAI,KAAK,IAElB6J,IAAIjP,EAAKG,CAAK,KAAK,IAEnB+O,IAAIlP,EAAK4D,CAAI,KAAK;AAEpB,QADJ0K,EAAI,IAAIM,CAAC,GACLL,EAAI,IAAIW,CAAC,GAAG;AACR,YAAAC,IAAMZ,EAAI,IAAIW,CAAC;AAEjB,MAAAC,EAAA,KAAKtR,EAAA,EAAE,MAAM+Q,GAAG,OAAOK,KAAMjP,EAAM,GACnCuO,EAAA,IAAIW,GAAGC,CAAG;AAAA,IAAA;AAGV,MAAAZ,EAAA,IAAIW,GAAG,CAACrR,EAAA,EAAE,MAAM+Q,GAAG,OAAOK,KAAMjP,EAAM,CAAC;AAAA,EAE/C;AACM,QAAA8O,IAAa,MAAM,KAAKR,CAAG,GAC3BS,IAAmC,CAAA;AACzC,aAAW,CAAC3J,GAAMzH,CAAI,KAAK4Q;AACzB,IAAAQ,EAAQ,KAAK;AAAA,MACX,MAAA3J;AAAAA,MACA,MAAAzH;AAAAA,IAAA,CACD;AAEI,SAAA;AAAA,IACL,YAAAmR;AAAA,IACA,SAAAC;AAAA,EAAA;AAEJ,GC1DaK,KAAoB,CAAC9Q,GAAmB6B,MAAiB;;AACpE,MAAI7B,KAAa;AAAa,WAAA6B;AACxB,QAAAxB,IAAaL,EAAW,MAAM,SAAS;AAC7C,MAAIK,KAAa,QAAQA,EAAU,WAAW;AACrC,WAAAwB;AAET,QAAMV,IAAMd,EAAU;AACtB,WAASC,IAAI,GAAGA,IAAIa,GAAKb,KAAK;AACtB,UAAAC,IAAWF,EAAUC,CAAC;AACxB,QAAAC,KAAY,QAAQA,MAAa;AAAI;AACzC,QAAIC,KAAY0B,IAAA3B,EAAS,MAAM,GAAG,EAAE,MAApB,gBAAA2B,EAAuB;AAC3B,IAAA1B,IAAAA,KAAA,gBAAAA,EAAW,QAAQ,UAAUqB;AACrC,QAAA;AACF,UAAIhC,IAASW;AACb,OAAK,UAAW,KAAKA,CAAS,KAAM,WAAY,KAAKA,CAAS,OAC5DX,IAASV,GAAQqB,CAAS,IAEhBR,IAAAA,EAAU,QAAQO,GAAUV,CAAM;AAAA,aACvCC,GAAG;AACE,MAAAE,IAAAA,EAAU,QAAQO,GAAUC,CAAS;AAAA,IACnD;AAAA,EACF;AACO,SAAAR;AACT;ACpBA,SAAS+Q,GAAiBC,GAAoB;AAC5C,SAAIA,EAAc,iBACT;AAAA,IACL,UAAU;AAAA,MACR,MAAM,CAAC,EAAE,MAAMA,EAAc,cAAc;AAAA,IAC7C;AAAA,EAAA,IAGK;AAEX;AACA,MAAMC,KAAoB,CAACD,GAAeE,GAAWC,MAAa;AAChE,UAAQH,EAAc,MAAM;AAAA,IAC1B,KAAK;AACI,aAAAI,GAAqBJ,GAAeE,GAAWC,CAAQ;AAAA,IAChE,KAAK;AACI,aAAAE,GAAsBL,GAAeE,GAAWC,CAAQ;AAAA,IACjE,KAAK;AACI,aAAAG,GAAqBN,GAAeE,GAAWC,CAAQ;AAAA,IAChE,KAAK;AACI,aAAAI,GAA4BP,GAAeE,GAAWC,CAAQ;AAAA,IACvE;AACE,aAAO;EACX;AACF,GAEMC,KAAuB,CAACJ,GAAeE,GAAWC,MAAa;AACnE,QAAMK,IAAsBR,EAAc,qBACpCS,IAAsBT,EAAc,qBACpC,EAAE,YAAAR,IAAa,IAAI,SAAAC,IAAU,OAAOS,GACpC/D,IAASuE,GAAS,MAAM;AAC5B,UAAM,EAAE,cAAAC,GAAc,gBAAAC,GAAgB,gBAAAC,GAAgB,iBAAAC,MAAoBd,GACpEe,IAAKtB,GACLtP,IAAM4Q,EAAG,QACT5E,IAAc,CAAA;AACpB,aAAS7M,IAAI,GAAGA,IAAIa,GAAKb,KAAK;AAC5B,YAAMoB,IAAOqG,EAAAxI,EAAA,IACRwS,EAAGzR,CAAC,IADI;AAAA,QAEX,MAAM;AAAA,QACN,UAAU0Q,EAAc;AAAA,QACxB,gBAAgBA,EAAc;AAAA,MAAA,IAE1B,EAAE,SAAAgB,GAAS,cAAAC,EAAiB,IAAAjB;AA0DlC,UAzDIgB,KAAYC,EAAa,SAASF,EAAGzR,CAAC,EAAE,QAAQ,CAAC2R,CAAY,MAC/DvQ,EAAK,QAAQ,UAEfA,EAAK,QAAQ;AAAA,QACX,MAAMsP,EAAc;AAAA,QACpB,UAAUA,EAAc;AAAA,QACxB,UAAUA,EAAc;AAAA,QACxB,OAAOA,EAAc;AAAA,QACrB,OAAOA,EAAc;AAAA,QACrB,UAAUA,EAAc;AAAA,QACxB,WAAW,CAACtR,MAAW;AACrB,cAAIM,IAAY,IACZkS,IAAiBlB,EAAc;AACnC,UAAIkB,MAAmB,OACJA,IAAA;AAEnB,gBAAM,EAAE,YAAAC,GAAY,MAAArL,IAAM,OAAAjF,IAAO,MAAAxC,GAAK,IAAIK,KAAU;AACvC,iBAAAM,KAAAD;AAAA,YACXmS;AAAA,YACA;AAAA,cACE,UAAU3S,EAAA;AAAA,gBACR,MAAAuH;AAAA,gBACA,OAAAjF;AAAA,gBACA,GAAGsQ;AAAA,gBACH,GAAGrL;AAAA,gBACH,GAAGjF,MAAS;AAAA,iBACTxC;AAAA,YAEP;AAAA,YACA;AAAA,cACE,YAAY;AAAA,cACZ,UAAU;AAAA,YACZ;AAAA,UAAA,GACKW;AAAA,QACT;AAAA,MAAA,GAEF0B,EAAK,YAAY,IACbiQ,MACFjQ,EAAK,YAAY;AAAA,QACf,OAAO;AAAA,UACL,GAAGsP,EAAc,sBAAsB,IAAI;AAAA,UAC3C,GAAG;AAAA,UACH,IAAI;AAAA,UACJ,IAAIA,EAAc,sBAAsB,IAAI;AAAA,UAC5C,YAAY,CAAC;AAAA,YACX,QAAQ;AAAA,YACR,OAAOA,EAAc,OAAO1Q,CAAC;AAAA,UAAA,GAC5B;AAAA,YACD,QAAQuR;AAAA,YACR,OAAOD,EAAetR,CAAC;AAAA,UAAA,GACtB;AAAA,YACD,QAAQ;AAAA,YACR,OAAOsR,EAAetR,CAAC;AAAA,UAAA,CACxB;AAAA,QACH;AAAA,MAAA,IAGAwR,GAAiB;AACb,cAAAM,IAASN,EAAgB,MAAM,GAAG;AACxC,YAAIM,KAAA,QAAAA,EAAQ,QAAQ;AAClB,gBAAMC,IAAmB,CAAA;AACzB,qBAAWC,KAAMF,GAAQ;AACjB,kBAAAvQ,IAAQ,WAAWyQ,CAAE;AACvB,YAAC,MAAMzQ,CAAK,KACdwQ,EAAY,KAAKxQ,CAAK;AAAA,UAE1B;AAGA,UAAAH,EAAK,UAAU,kBAAkB2Q;AAAA,QACnC;AAAA,MACF;AACA,MAAIrB,EAAc,mBAChBtP,EAAK,WAAW;AAAA,QACd,MAAM,CAAC,EAAE,MAAMsP,EAAc,cAAc;AAAA,MAAA,IAG/C7D,EAAO,KAAKzL,CAAI;AAAA,IAClB;AACOyL,WAAAA;AAAAA,EAAA,CACR,GACKoF,IAAYb,GAAS,MAClBlB,EAAW,IAAI,CAAC9O,MAAS;AAC9B,QAAI7B,IAAS,CAAA;AACT,WAAA6B,KAAQ,OAAOA,KAAS,WACjB7B,IAAAkI,EAAAxI,EAAA,IACJmC,IADI;AAAA,MAEP,WAAW;AAAA,QACT,UAAAyP;AAAA,MACF;AAAA,IAAA,KAGOtR,IAAA;AAAA,MACP,OAAO6B;AAAA,MACP,WAAW;AAAA,QACT,UAAAyP;AAAA,MACF;AAAA,IAAA,GAGGtR;AAAA,EAAA,CACR,CACF;AACM,SAAA;AAAA,IACL,SAAS;AAAA,MACP,SAAS;AAAA,MACT,MAAMmR,EAAc;AAAA,MACpB,WAAW,CAACtR,MAAW;AACrB,cAAMyB,IAAMzB,EAAO;AACnB,YAAIM,IAAY,IACZwS,IAAmBxB,EAAc;AAErC,QAAIwB,MAAqB,OACJA,IAAA;AAErB,iBAASlS,IAAI,GAAGA,IAAIa,GAAKb,KAAK;AACtB,gBAAA,EAAE,QAAAmS,GAAQ,YAAAN,GAAY,MAAArL,GAAM,OAAAjF,GAAO,MAAAxC,MAASK,EAAOY,CAAC,KAAK;AAC/D,cAAIA,MAAM,GAAG;AACX,gBAAIoS,IAAa5L;AACb,YAAA,OAAOA,KAAS,YAAYA,EAAK,CAAC,MAAM,OAAO,CAAC,MAAM,CAACA,CAAI,MAC/C4L,KAAA,CAAC5L,GAAM,aAEvB9G,KAAa,GAAG8Q,GAAkBW,GAAqBiB,CAAU,CAAC;AAAA,UACpE;AACa,UAAA1S,KAAAD;AAAA,YACXyS;AAAA,YACA;AAAA,cACE,UAAUjT,EAAA;AAAA,gBACR,QAAAkT;AAAA,gBACA,MAAA3L;AAAA,gBACA,OAAAjF;AAAA,gBACA,KAAKQ;AAAA,gBACL,GAAG8P;AAAA,gBACHrL;AAAA,gBACA,GAAGjF,KAAS;AAAA,iBACTxC;AAAA,YAEP;AAAA,YACA;AAAA,cACE,YAAY;AAAA,cACZ,UAAU;AAAA,YACZ;AAAA,UAAA,GAEWW,KAAA;AAAA,QACf;AACO,eAAAA;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAIA,WAAW;AAAA,QACT,OAAOgR,EAAc;AAAA,QACrB,UAAAG;AAAA,MACF;AAAA,MACA,UAAUH,EAAc,mBAAmB;AAAA,MAC3C,iBAAiBA,EAAc,0BAA0B;AAAA,IAC3D;AAAA,IACA,QAAQ;AAAA,MACN,MAAMA,EAAc,eAAe,WAAW;AAAA,MAC9C,OAAOA,EAAc;AAAA,MACrB,QAAQA,EAAc;AAAA,MACtB,MAAMA,EAAc;AAAA,MACpB,QAAQA,EAAc;AAAA,MACtB,KAAKA,EAAc;AAAA,MACnB,MAAMA,EAAc;AAAA,MACpB,WAAW;AAAA;AAAA,QAET,MAAM;AAAA,UACJ,MAAM;AAAA,YACJ,OAAOA,EAAc;AAAA,YACrB,OAAOA,EAAc;AAAA,YACrB,UAAUA,EAAc;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAYA,EAAc;AAAA,MAC1B,WAAWA,EAAc;AAAA,MACzB,SAASA,EAAc;AAAA,MACvB,MAAMP,EAAQ,IAAI,CAAC5O,GAAOW,OACjB;AAAA,QACL,MAAMX,EAAM;AAAA,QACZ,WAAW;AAAA,UACT,OAAOmP,EAAc,OAAOxO,CAAK;AAAA,QACnC;AAAA,QACA,MAAMwO,EAAc;AAAA,MAAA,EAEvB;AAAA,MACD,WAAW,CAAClK,MACH9E,GAAgBgP,EAAc,iBAAiB;AAAA,QACpD,MAAAlK;AAAA,MAAA,CACD;AAAA,IAEL;AAAA,IACA,OAAO;AAAA,MACL,MAAMkK,EAAc,sBAAsB,UAAU;AAAA,MACpD,MAAMA,EAAc,sBAAsB,OAAO3N,EAAMkP,CAAS;AAAA,MAChE,SAASvB,EAAc,sBAAsBA,EAAc,eAAeA,EAAc;AAAA,MACxF,aAAaA,EAAc;AAAA,MAC3B,WAAW;AAAA,QACT,MAAMA,EAAc;AAAA,QACpB,WAAW;AAAA,UACT,OAAOA,EAAc;AAAA,UACrB,MAAMA,EAAc;AAAA,QACtB;AAAA,QACA,UAAUA,EAAc;AAAA,MAC1B;AAAA,MACA,WAAW;AAAA,QACT,MAAMA,EAAc;AAAA,MACtB;AAAA,MACA,WAAW;AAAA,QACT,OAAOA,EAAc;AAAA,QACrB,UAAUA,EAAc,sBAAsB;AAAA,QAC9C,QAAQA,EAAc;AAAA,QACtB,OAAOA,EAAc;AAAA,QACrB,UAAUA,EAAc;AAAA,QACxB,UAAUA,EAAc;AAAA,QACxB,UAAWnP,GAAe;AACpB,iBAAA,OAAOA,KAAU,YAAYA,EAAM,CAAC,MAAM,OAAO,CAAC,MAAM,CAACA,CAAK,MACvDA,KAAA,CAACA,GAAO,aAEZiP,GAAkBW,GAAqB5P,CAAK;AAAA,QACrD;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR,MAAMmP,EAAc;AAAA,QACpB,WAAW;AAAA,UACT,OAAOA,EAAc;AAAA,QACvB;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR,MAAMA,EAAc;AAAA,MACtB;AAAA,MACA,MAAMA,EAAc;AAAA,MACpB,eAAe;AAAA,QACb,UAAUA,EAAc;AAAA,QACxB,OAAOA,EAAc;AAAA,QACrB,OAAO;AAAA,MACT;AAAA,MACA,KAAKA,EAAc,iBAAiB;AAAA,IACtC;AAAA,IACA,OAAO;AAAA,MACL,MAAMA,EAAc,sBAAsB,aAAa;AAAA,MACvD,MAAMA,EAAc,sBAAsB3N,EAAMmN,CAAU,IAAI;AAAA,MAC9D,SAASQ,EAAc,sBAAsBA,EAAc,cAAcA,EAAc;AAAA,MACvF,aAAaA,EAAc;AAAA,MAC3B,WAAW;AAAA,QACT,MAAMA,EAAc;AAAA,QACpB,WAAW;AAAA,UACT,OAAOA,EAAc;AAAA,UACrB,MAAMA,EAAc;AAAA,QACtB;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT,MAAMA,EAAc;AAAA,MACtB;AAAA,MACA,WAAW;AAAA,QACT,MAAMA,EAAc;AAAA,QACpB,UAAUA,EAAc;AAAA,QACxB,OAAOA,EAAc;AAAA,QACrB,QAAQA,EAAc;AAAA,QACtB,OAAOA,EAAc;AAAA,QACrB,UAAUA,EAAc;AAAA,QACxB,UAAWnP,GAAe;AACjB,iBAAAiP,GAAkBU,GAAqB3P,CAAK;AAAA,QACrD;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR,MAAMmP,EAAc;AAAA,QACpB,WAAW;AAAA,UACT,OAAOA,EAAc;AAAA,QACvB;AAAA,MACF;AAAA,MACA,MAAMA,EAAc;AAAA,MACpB,eAAe;AAAA,QACb,UAAUA,EAAc;AAAA,QACxB,OAAOA,EAAc;AAAA,QACrB,OAAO;AAAA,MACT;AAAA,MACA,KAAKA,EAAc,iBAAiB;AAAA,IACtC;AAAA,IACA,QAAQ3N,EAAM8J,CAAM;AAAA,EAAA;AAExB,GAEMkE,KAAwB,CAACL,GAAeE,GAAWC,MAAa;AAEpE,QAAMK,IAAsBR,EAAc,qBACpCS,IAAsBT,EAAc,qBACpC,EAAE,YAAAR,IAAa,IAAI,SAAAC,IAAU,OAAOS,GACpCqB,IAAYb,GAAS,MAClBlB,EAAW,IAAI,CAAC9O,MAAS;AAC9B,QAAI7B,IAAS,CAAA;AACT,WAAA6B,KAAQ,OAAOA,KAAS,WACjB7B,IAAAkI,EAAAxI,EAAA,IACJmC,IADI;AAAA,MAEP,WAAW;AAAA,QACT,UAAAyP;AAAA,MACF;AAAA,IAAA,KAGOtR,IAAA;AAAA,MACP,OAAO6B;AAAA,MACP,WAAW;AAAA,QACT,UAAAyP;AAAA,MACF;AAAA,IAAA,GAGGtR;AAAA,EAAA,CACR,CACF,GACKsN,IAASuE,GAAS,MAAM;AAC5B,UAAMiB,IAAO,CAAA,GACPxR,IAAMsP,EAAQ;AACpB,aAASnQ,IAAI,GAAGA,IAAIa,GAAKb,KAAK;AAC5B,YAAMsS,IAAmB,CAAA;AACzB,MAAI5B,EAAc,gBAChB4B,EAAY,cAAc5B,EAAc,aACxC4B,EAAY,aAAa5B,EAAc,YACvC4B,EAAY,gBAAgB5B,EAAc,eAC1C4B,EAAY,gBAAgB5B,EAAc,gBAE5C2B,EAAK,KAAKpT,EAAAwI,EAAAxI,EAAA;AAAA,QACR,MAAM;AAAA,SACHkR,EAAQnQ,CAAC,IAFJ;AAAA,QAGR,YAAY0Q,EAAc;AAAA,QAC1B,QAAQA,EAAc;AAAA,QACtB,WAAW;AAAA,UACT,OAAOA,EAAc,mBACjB;AAAA,YACE,MAAM;AAAA,YACN,GAAG;AAAA,YACH,GAAG;AAAA,YACH,IAAI;AAAA,YACJ,IAAI;AAAA,YACJ,YAAY,CAAC;AAAA,cACX,QAAQ;AAAA,cACR,OAAOA,EAAc,OAAO1Q,CAAC;AAAA,YAAA,GAC5B;AAAA,cACD,QAAQ;AAAA,cACR,OAAO0Q,EAAc,qBAAqB;AAAA,YAAA,CAC3C;AAAA,YACD,QAAQ;AAAA,UAAA,IAEVA,EAAc,OAAO1Q,CAAC;AAAA,UAC1B,SAAS0Q,EAAc;AAAA,QACzB;AAAA,QACA,WAAWzR,EAAA;AAAA,UACT,OAAOyR,EAAc;AAAA,WAClB4B;AAAA,UAEF7B,GAAgBC,CAAa,EACjC;AAAA,IACH;AACO,WAAA2B;AAAA,EAAA,CACR;AACM,SAAA;AAAA,IACL,SAAS;AAAA,MACP,SAAS;AAAA,MACT,MAAM3B,EAAc;AAAA,MACpB,WAAW,CAACtR,MAAW;AACrB,cAAMyB,IAAMzB,EAAO;AACnB,YAAIM,IAAY,IACZwS,IAAmBxB,EAAc;AACrC,QAAIwB,MAAqB,OACJA,IAAA;AAErB,iBAASlS,IAAI,GAAGA,IAAIa,GAAKb,KAAK;AACtB,gBAAA,EAAE,QAAAmS,GAAQ,YAAAN,GAAY,MAAArL,GAAM,OAAAjF,GAAO,MAAAxC,MAASK,EAAOY,CAAC,KAAK;AAC/D,UAAIA,MAAM,MACRN,KAAa,GAAG8G,CAAI,UAET9G,KAAAD;AAAA,YACXyS;AAAA,YACA;AAAA,cACE,UAAUjT,EAAA;AAAA,gBACR,QAAAkT;AAAA,gBACA,MAAA3L;AAAA,gBACA,OAAAjF;AAAA,gBACA,GAAGsQ;AAAA,gBACHrL;AAAA,gBACA,GAAGjF;AAAA,iBACAxC;AAAA,YAEP;AAAA,YACA;AAAA,cACE,YAAY;AAAA,cACZ,UAAU;AAAA,YACZ;AAAA,UAAA,GAEWW,KAAA;AAAA,QACf;AACO,eAAAA;AAAA,MACT;AAAA,MACA,WAAW;AAAA,QACT,OAAOgR,EAAc;AAAA,QACrB,UAAUG,EAAS;AAAA,MACrB;AAAA,MACA,UAAUH,EAAc,mBAAmB;AAAA,MAC3C,iBAAiBA,EAAc,0BAA0B;AAAA,IAC3D;AAAA,IACA,OAAO;AAAA,MACL,MAAMA,EAAc;AAAA,MACpB,MAAM;AAAA,MACN,MAAM3N,EAAMkP,CAAS;AAAA,MACrB,aAAavB,EAAc;AAAA,MAC3B,WAAW;AAAA,QACT,MAAMA,EAAc;AAAA,QACpB,WAAW;AAAA,UACT,OAAOA,EAAc;AAAA,QACvB;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT,OAAOA,EAAc;AAAA,QACrB,UAAUA,EAAc,sBAAsB;AAAA,QAC9C,QAAQA,EAAc;AAAA,QACtB,OAAOA,EAAc;AAAA,QACrB,UAAUA,EAAc;AAAA,QACxB,UAAWnP,GAAe;AACjB,iBAAAiP,GAAkBW,GAAqB5P,CAAK;AAAA,QACrD;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR,WAAW;AAAA,UACT,OAAOmP,EAAc;AAAA,QACvB;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR,MAAMA,EAAc;AAAA,MACtB;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,MAAMA,EAAc;AAAA,MACpB,aAAaA,EAAc;AAAA,MAC3B,WAAW;AAAA,QACT,MAAMA,EAAc;AAAA,QACpB,WAAW;AAAA,UACT,OAAOA,EAAc;AAAA,QACvB;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT,UAAAG;AAAA,QACA,OAAOH,EAAc;AAAA,QACrB,UAAWnP,GAAe;AACjB,iBAAAiP,GAAkBU,GAAqB3P,CAAK;AAAA,QACrD;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR,MAAMmP,EAAc;AAAA,QACpB,WAAW;AAAA,UACT,OAAOA,EAAc;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAEA,QAAQ;AAAA,MACN,MAAMA,EAAc;AAAA,MACpB,QAAQA,EAAc;AAAA,MACtB,KAAKA,EAAc;AAAA,MACnB,MAAMA,EAAc;AAAA,MACpB,WAAW;AAAA,QACT,UAAAG;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ9N,EAAM8J,CAAM;AAAA,EAAA;AAExB,GAEMmE,KAAuB,CAACN,GAAeE,GAAWC,MAAa;AACnE,QAAM,EAAE,SAAAV,IAAU,GAAO,IAAAS;AACrB,MAAA,EAAE,MAAA7R,IAAO,CAAC,EAAA,IAAMoR,EAAQ,CAAC,KAAK;AAClC,MAAI,MAAM,QAAQO,EAAc,MAAM,GAAG;AACvC,UAAM6B,IAAmB7B,EAAc,kBACjC8B,IAAS9B,EAAc;AAC7B,IAAA3R,IAAOA,EAAK,IAAI,CAACqC,GAAMc,MAAWjD,EAAA;AAAA,MAChC,OAAOsT,IAAmB,EAAE,OAAOC,EAAOtQ,CAAK,EAAA,IAAM,CAAC;AAAA,OACnDd,EACH;AAAA,EACJ;AACO,SAAA;AAAA,IACL,OAAO;AAAA,MACL,MAAMsP,EAAc;AAAA,MACpB,SAASA,EAAc;AAAA,MACvB,WAAW;AAAA,QACT,UAAUA,EAAc;AAAA,QACxB,YAAYA,EAAc;AAAA,QAC1B,OAAOA,EAAc;AAAA,MACvB;AAAA,MACA,MAAMA,EAAc,aAAa;AAAA,IACnC;AAAA;AAAA,IAEA,SAAS;AAAA,MACP,MAAMA,EAAc;AAAA,MACpB,SAASA,EAAc;AAAA,MACvB,WAAW,CAACtR,MAAW;AACf,cAAA,EAAE,QAAA+S,GAAQ,YAAAN,GAAY,MAAArL,GAAM,OAAAjF,GAAO,SAAAkR,GAAS,MAAA1T,EAAAA,IAASK,KAAU;AAC9D,eAAAK;AAAA,UACLiR,EAAc;AAAA,UACd;AAAA,YACE,UAAUzR,EAAA;AAAA,cACR,QAAAkT;AAAA,cACA,MAAA3L;AAAA,cACA,OAAAjF;AAAA,cACA,SAAAkR;AAAA,cACA,GAAGZ;AAAA,cACH,GAAGrL;AAAA,cACH,GAAGjF;AAAA,cACH,GAAGkR;AAAA,eACA1T;AAAAA,UAEP;AAAA,UACA;AAAA,YACE,YAAY;AAAA,YACZ,UAAU;AAAA,UACZ;AAAA,QAAA;AAAA,MAEJ;AAAA,MACA,WAAW;AAAA,QACT,OAAO2R,EAAc,yBAAyB;AAAA,MAChD;AAAA,MACA,iBAAiBA,EAAc,0BAA0B;AAAA,MACzD,aAAaA,EAAc,sBAAsB;AAAA,IACnD;AAAA;AAAA,IAEA,QAAQ;AAAA,MACN,MAAMA,EAAc;AAAA,MACpB,QAAQA,EAAc;AAAA,MACtB,KAAKA,EAAc;AAAA,MACnB,MAAMA,EAAc;AAAA,MACpB,WAAW;AAAA,QACT,OAAOA,EAAc;AAAA,QACrB,UAAUG,MAAa,KAAKA,IAAWH,EAAc;AAAA,MACvD;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN;AAAA,QACE,MAAA3R;AAAA,QACA,MAAM;AAAA,QACN,QAAQ,CAAC2R,EAAc,aAAaA,EAAc,WAAW;AAAA,QAC7D,QAAQ,CAACA,EAAc,YAAYA,EAAc,SAAS;AAAA,QAC1D,UAAUA,EAAc;AAAA,QACxB,mBAAmB;AAAA,QACnB,UAAUA,EAAc;AAAA,QACxB,OAAO;AAAA,UACL,MAAMA,EAAc,kBAAkB,YAAYA,EAAc;AAAA,UAChE,OAAOA,EAAc;AAAA,UACrB,UAAUG,MAAa,KAAKA,IAAWH,EAAc;AAAA,UACrD,UAAUA,EAAc;AAAA,UACxB,WAAWjP,GAAgBiP,EAAc,cAAc;AAAA,QACzD;AAAA,QACA,WAAW;AAAA,UACT,MAAMA,EAAc;AAAA,UACpB,QAAQA,EAAc;AAAA,UACtB,SAASA,EAAc;AAAA,QACzB;AAAA,QACA,UAAU;AAAA,UACR,WAAW;AAAA,YACT,YAAY;AAAA,YACZ,eAAe;AAAA,YACf,aAAa;AAAA,UACf;AAAA,UACA,OAAO,CAAC;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,EAAA;AAEJ,GAEMO,KAA8B,CAACP,GAAeE,GAAWC,MAAa;AAC1E,QAAM,EAAE,YAAAX,IAAa,IAAI,SAAAC,IAAU,OAAOS,GACpCqB,IAAYb,GAAS,MAClBlB,EAAW,IAAI,CAAC9O,MAAS;AAC9B,QAAI7B,IAAS,CAAA;AACT,WAAA6B,KAAQ,OAAOA,KAAS,WACjB7B,IAAAkI,EAAAxI,EAAA,IACJmC,IADI;AAAA,MAEP,WAAW;AAAA,QACT,UAAAyP;AAAA,MACF;AAAA,IAAA,KAGOtR,IAAA;AAAA,MACP,OAAO6B;AAAA,MACP,WAAW;AAAA,QACT,UAAAyP;AAAA,MACF;AAAA,IAAA,GAGGtR;AAAA,EAAA,CACR,CACF,GACKsN,IAASuE,GAAS,MAAM;AAC5B,UAAMiB,IAAO,CAAA,GACPxR,IAAMsP,EAAQ,QACduC,IAAchC,EAAc;AAClC,aAAS1Q,IAAI,GAAGA,IAAIa,GAAKb,KAAK;AACtB,YAAA2S,IAAaD,EAAY1S,CAAC,GAC1B,EAAE,MAAAgF,GAAM,WAAA4N,MAAcD,KAAc,CAAA;AAC1C,UAAI9F,IAAS5N,EAAA;AAAA,QACX,MAAA+F;AAAA,QACA,YAAY4N;AAAA,SACTzC,EAAQnQ,CAAC;AAEd,UAAIgF,MAAS,QAAQ;AACnB,cAAMsN,IAAmB,CAAA;AACzB,QAAI5B,EAAc,gBAChB4B,EAAY,cAAc5B,EAAc,aACxC4B,EAAY,aAAa5B,EAAc,YACvC4B,EAAY,gBAAgB5B,EAAc,eAC1C4B,EAAY,gBAAgB5B,EAAc,gBAE5C7D,IAASpF,EAAAxI,EAAA,IACJ4N,IADI;AAAA,UAEP,YAAY6D,EAAc;AAAA,UAC1B,QAAQA,EAAc;AAAA,UACtB,WAAW;AAAA,YACT,OAAOA,EAAc,OAAO1Q,CAAC;AAAA,UAC/B;AAAA,UACA,WAAW;AAAA,YACT,OAAO0Q,EAAc,mBACjB;AAAA,cACE,MAAM;AAAA,cACN,GAAG;AAAA,cACH,GAAG;AAAA,cACH,IAAI;AAAA,cACJ,IAAI;AAAA,cACJ,YAAY,CAAC;AAAA,gBACX,QAAQ;AAAA,gBACR,OAAOA,EAAc,OAAO1Q,CAAC;AAAA,cAAA,GAC5B;AAAA,gBACD,QAAQ;AAAA,gBACR,OAAO0Q,EAAc,qBAAqB;AAAA,cAAA,CAC3C;AAAA,cACD,QAAQ;AAAA,YAAA,IAEVA,EAAc,OAAO1Q,CAAC;AAAA,YAC1B,SAAS0Q,EAAc;AAAA,UACzB;AAAA,UACA,WAAWzR,EAAA;AAAA,YACT,OAAOyR,EAAc;AAAA,aAClB4B;AAAA,QACL;AAAA,MAEJ;AACA,UAAItN,MAAS,OAAO;AAClB,cAAM,EAAE,cAAAqM,GAAc,gBAAAC,GAAgB,gBAAAC,EAAA,IAAmBb,GACnDmC,IAAiB,CAAA;AACvB,YAAInC,EAAc,iBAAiB;AACjC,gBAAMoB,IAASpB,EAAc,gBAAgB,MAAM,GAAG;AACtD,cAAIoB,KAAA,QAAAA,EAAQ,QAAQ;AAClB,kBAAMC,IAAmB,CAAA;AACzB,uBAAWC,KAAMF,GAAQ;AACjB,oBAAAvQ,IAAQ,WAAWyQ,CAAE;AACvB,cAAC,MAAMzQ,CAAK,KACdwQ,EAAY,KAAKxQ,CAAK;AAAA,YAE1B;AACA,YAAAsR,EAAU,eAAed;AAAA,UAC3B;AAAA,QACF;AACA,QAAIV,MACFwB,EAAU,QAAQ;AAAA,UAChB,GAAG;AAAA,UACH,GAAG;AAAA,UACH,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,YAAY,CAAC;AAAA,YACX,QAAQ;AAAA,YACR,OAAOnC,EAAc,OAAO1Q,CAAC;AAAA,UAAA,GAC5B;AAAA,YACD,QAAQuR;AAAA,YACR,OAAOD,EAAetR,CAAC;AAAA,UAAA,GACtB;AAAA,YACD,QAAQ;AAAA,YACR,OAAOsR,EAAetR,CAAC;AAAA,UAAA,CACxB;AAAA,QAAA,IAGL6M,IAASpF,EAAAxI,EAAA,IACJ4N,IADI;AAAA,UAEP,UAAU6D,EAAc;AAAA,UACxB,WAAAmC;AAAA,QAAA;AAAA,MAEJ;AACA,MAAInC,EAAc,mBAChB7D,EAAO,WAAW;AAAA,QAChB,MAAM,CAAC,EAAE,MAAM6D,EAAc,cAAc;AAAA,MAAA,IAG/C2B,EAAK,KAAKxF,CAAM;AAAA,IAClB;AACO,WAAAwF;AAAA,EAAA,CACR,GACKS,IAAQ1B,GAAS,MAAM;AAC3B,UAAM0B,IAAQpC,EAAc;AAC5B,WAAOoC,KAAAA,gBAAAA,EAAO,IAAI,CAACC,GAAM7Q,OAChB;AAAA,MACL,MAAM;AAAA,MACN,aAAawO,EAAc;AAAA,MAC3B,WAAW;AAAA,QACT,MAAMxO,MAAU,IAAIwO,EAAc,yBAAyBA,EAAc;AAAA,QACzE,WAAW;AAAA,UACT,OAAOA,EAAc;AAAA,UACrB,MAAMxO,MAAU,IAAIwO,EAAc,yBAAyBA,EAAc;AAAA,QAC3E;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT,MAAMA,EAAc;AAAA,MACtB;AAAA,MACA,WAAW;AAAA,QACT,UAAAG;AAAA,QACA,MAAMH,EAAc;AAAA,QACpB,OAAOA,EAAc;AAAA,QACrB,UAAWnP,GAAe;AACjB,iBAAAiP,GAAkBuC,EAAK,oBAAoBxR,CAAK;AAAA,QACzD;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR,MAAMmP,EAAc;AAAA,QACpB,WAAW;AAAA,UACT,OAAOA,EAAc;AAAA,QACvB;AAAA,MACF;AAAA,MACA,MAAMxO,MAAU,IAAIwO,EAAc,gBAAgBA,EAAc;AAAA,MAChE,eAAe;AAAA,QACb,UAAUA,EAAc;AAAA,QACxB,OAAOA,EAAc;AAAA,QACrB,OAAOxO,MAAU,IAAI,UAAU;AAAA,MACjC;AAAA,MACA,KAAKwO,EAAc,iBAAiB;AAAA,IAAA;AAAA,EAEvC,CACF;AACM,SAAA;AAAA,IACL,QAAQ;AAAA,MACN,MAAMA,EAAc;AAAA,MACpB,QAAQA,EAAc;AAAA,MACtB,KAAKA,EAAc;AAAA,MACnB,MAAMA,EAAc;AAAA,MACpB,WAAW;AAAA,QACT,OAAOA,EAAc;AAAA,QACrB,UAAAG;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,SAAS;AAAA,MACT,MAAMH,EAAc;AAAA,MACpB,WAAW,CAACtR,MAAW;AACrB,cAAMyB,IAAMzB,EAAO;AACnB,YAAIM,IAAY,IACZwS,IAAmBxB,EAAc;AACrC,QAAIwB,MAAqB,OACJA,IAAA;AAErB,cAAMQ,IAAchC,EAAc;AAClC,iBAAS1Q,IAAI,GAAGA,IAAIa,GAAKb,KAAK;AACtB,gBAAA2S,IAAaD,EAAY1S,CAAC,GAC1B,EAAE,kBAAkBgT,MAAsBL,KAAc,CAAA,GACxD,EAAE,QAAAR,GAAQ,YAAAN,GAAY,MAAArL,GAAM,OAAAjF,GAAO,MAAAxC,MAASK,EAAOY,CAAC,KAAK;AAC/D,UAAIA,MAAM,MACRN,KAAa,GAAG8G,CAAI,UAET9G,KAAAD;AAAA;AAAA,YAEXuT,KAAqBd;AAAA,YACrB;AAAA,cACE,UAAUjT,EAAA;AAAA,gBACR,QAAAkT;AAAA,gBACA,MAAA3L;AAAA,gBACA,OAAAjF;AAAA,gBACA,YAAAsQ;AAAA,gBACA,GAAGA;AAAA,gBACH,GAAGrL;AAAA,gBACH,GAAGjF;AAAA,iBACAxC;AAAA,YAEP;AAAA,YACA;AAAA,cACE,YAAY;AAAA,cACZ,UAAU;AAAA,YACZ;AAAA,UAAA,GAEWW,KAAA;AAAA,QACf;AACO,eAAAA;AAAA,MACT;AAAA,MACA,WAAW;AAAA,QACT,OAAOgR,EAAc,yBAAyB;AAAA,QAC9C,UAAAG;AAAA,MACF;AAAA,MACA,iBAAiBH,EAAc,0BAA0B;AAAA,MACzD,aAAaA,EAAc,sBAAsB;AAAA,IACnD;AAAA,IACA,OAAO;AAAA,MACL,MAAMA,EAAc;AAAA,MACpB,aAAaA,EAAc;AAAA,MAC3B,MAAM;AAAA,MACN,MAAM3N,EAAMkP,CAAS;AAAA,MACrB,WAAW;AAAA,QACT,MAAMvB,EAAc;AAAA,QACpB,WAAW;AAAA,UACT,OAAOA,EAAc;AAAA,QACvB;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT,OAAOA,EAAc;AAAA,QACrB,UAAUA,EAAc,sBAAsB;AAAA,QAC9C,QAAQA,EAAc;AAAA,QACtB,OAAOA,EAAc;AAAA,QACrB,UAAUA,EAAc;AAAA,MAC1B;AAAA,MACA,UAAU;AAAA,QACR,WAAW;AAAA,UACT,OAAOA,EAAc;AAAA,QACvB;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR,MAAMA,EAAc;AAAA,MACtB;AAAA,IACF;AAAA,IACA,OAAO3N,EAAM+P,CAAK;AAAA,IAClB,QAAQ/P,EAAM8J,CAAM;AAAA,EAAA;AAExB,GAEMoG,KAA0B,CAACvC,OACxB;AAAA,EACL,OAAO;AAAA,IACL,MAAMA,EAAc;AAAA,IACpB,SAASA,EAAc;AAAA,IACvB,WAAW;AAAA,MACT,UAAUA,EAAc;AAAA,MACxB,YAAYA,EAAc;AAAA,MAC1B,OAAOA,EAAc;AAAA,IACvB;AAAA,IACA,MAAMA,EAAc,aAAa;AAAA,EACnC;AAAA,EACA,MAAM;AAAA,IACJ,KAAKA,EAAc;AAAA,IACnB,QAAQA,EAAc;AAAA,IACtB,MAAMA,EAAc;AAAA,IACpB,OAAOA,EAAc;AAAA,IACrB,cAAcA,EAAc;AAAA,EAC9B;AAAA,EACA,OAAOA,EAAc;AAAA,IAInBwC,KAAiB,CAACxC,GAAeE,GAAWC,IAAW,OACpD5R,IAAA,IACFgU,GAAwBvC,CAAa,IACrCC,GAAkBD,GAAeE,GAAWC,CAAQ,ICr3B5C3O,KAAAuF,EAAAxI,EAAA,IACV6D,KADU;AAAA,EAEb,SAAAjE;AAAA,EACA,gCAAA0Q;AAAA,EACA,kCAAAa;AAAA,EACA,mBAAAI;AAAA,EACA,oBAAA/Q;AAAA,EACA,gBAAAyT;AAAA,EACA,oBAAA/Q;AACF;"}