@ecan-bi/tools 1.0.12 → 1.0.15

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 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 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 console.log('This is useValueFormatter')\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","dayjs","paramsStr","params","key","runFn","result","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","graphicConfig","request","INDICATOR_URL","PAGE_ID","dataSourceId","leftAxisList","rightAxisList","queryColumnList","indicators","unref","otherList","idMap","indexCode","parentId","promiseList","id","resolve","reject","success","e","a","b","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","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","series","indicatorList","leftAxis","rightAxis","indicatorsData","_c","_b","queryColumns","_e","_d","queryColumn","field","rowHeaders","resultRowHeaderList","_f","pivotColumnHeader","pivotColumnData","resultList","calc","filter","sorts","aggregateMethod","rowDimensionKeys","colDimensionKeys","fl","flParams","target","fieldType","columnData","sortParams","_g","_h","q","pathname","resultParams","_i","cascadeControl","someParams","classParams","fieldValue","useTransformChartDataByAttrKey","dataFieldNames","types","set","map","dataLen","typesLen","vs","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 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 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\nconst formatTest = () => {\r\n console.log('This is indicator')\r\n}\r\n\r\nexport default {\r\n formatIndicatorParams,\r\n formatTest\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 console.log('This is useValueFormatter')\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","formatTest","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":"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"}