@ecan-bi/tools 1.0.20 → 1.0.21

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 +0,0 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/utils/runCode.ts","../src/hooks/useVariablesInText.ts","../src/utils/util.ts","../src/utils/constant.ts","../src/indicator.ts","../src/hooks/useTransformChartDataByAttrKey.ts","../src/hooks/useTransformChartDataByAttrValue.ts","../src/hooks/useValueFormatter.ts","../src/utils/transformProps.ts","../src/index.ts"],"sourcesContent":["import dayjs from 'dayjs'\nconst runCode = (code: string, data?: { [key:string]: any }) => {\n const useFn = {\n dayjs,\n ...data\n }\n let paramsStr = ''\n const params: any = []\n for (const key in useFn) {\n paramsStr += `${key},`\n params.push(useFn[key])\n }\n paramsStr = paramsStr.replace(/,$/, '')\n const runFn = `function (${paramsStr}){return ${code}}`\n let result\n try {\n // eslint-disable-next-line no-new-func\n result = Function(`\"use strict\";return (${runFn})`)()(...params)\n } catch (e) {\n // console.error()\n return code\n }\n return result\n}\n\nexport default runCode\n","import runCode from '../utils/runCode'\nexport const useVariablesInText = (\n formatter: string = '',\n { textData, codeData }: { textData?: { [key:string]: any }, codeData?: { [key:string]: any } } = {},\n { useNewline = false, useSpace = false } = {}\n) => {\n // 引入全局变量\n const data = { ...textData }\n const variables = (formatter || '').match(/\\{(.+?)\\}/g)\n if (variables == null || variables.length === 0) {\n return formatter\n }\n for (let i = 0; i < variables.length; i++) {\n const variable = variables[i]\n let statement = variable.slice(1, -1).trim()\n const reg = /[\\u4e00-\\u9fa5a-z-_A-Z0-9]*/g\n const textVariables: any = statement.match(reg)\n for (let j = 0; j < textVariables.length; j++) {\n const textVariable = textVariables[j]\n const usedVariable = data[textVariable]\n if (usedVariable != null) {\n // 使用的变量\n statement = statement.replace(textVariable, usedVariable)\n }\n }\n if ((/\\(.*\\)/g).test(statement) || (/[+/\\\\*]/g).test(statement)) {\n statement = runCode(statement, codeData)\n }\n formatter = formatter.replace(variable, statement)\n }\n // 替换换行\n if (useNewline) {\n formatter = formatter?.replace(/\\n|\\\\n/g, '<br/>')\n }\n // 替换空格\n if (useSpace) {\n formatter = formatter?.replace(/\\s{2,}?/g, '&nbsp;&nbsp;')\n }\n // 千分位格式化\n formatter = formatter.replace(/Qfw\\((.*?)\\)/, (res, str) => textData?.Qfw ? textData?.Qfw(str) : str)\n return formatter\n}\n\nexport default useVariablesInText\n","import useVariablesInText from '../hooks/useVariablesInText'\r\nimport { unref } from 'vue'\r\n/**\r\n * 字符串1 中是否包含 字符串2 (会全部转成小写)\r\n * @param v1 字符串1\r\n * @param v2 字符串2\r\n * @constructor\r\n */\r\nexport const lowerCaseIncludes = (v1:any, v2:any): boolean => {\r\n if (typeof v1 === 'string' && typeof v2 === 'string') {\r\n return v1.toLocaleLowerCase().includes(v2.toLocaleLowerCase())\r\n } else if (typeof v1 === 'string' && Array.isArray(v2)) {\r\n const len = v2.length\r\n for (let i = 0; i < len; i++) {\r\n const s = v2[i]\r\n if (typeof s === 'string' && v1.toLocaleLowerCase().includes(s.toLocaleLowerCase())) {\r\n return true\r\n }\r\n }\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * 判断 key 是否在对象上\r\n * @param v\r\n * @param k\r\n */\r\nexport const hasOwn = (v: object, k: string | symbol): k is keyof typeof v => Object.prototype.hasOwnProperty.call(v, k)\r\n\r\nexport const getConditions = (conditions) => {\r\n const result: any = []\r\n for (const item of conditions) {\r\n if (item.conditions) {\r\n result.push(...getConditions(item.conditions))\r\n } else if (item?.dataType === 'component') {\r\n result.push(item)\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport function getFormatStep (format: string) {\r\n const value = format.split('-')\r\n let formatStep = ''\r\n if (value?.length) {\r\n switch (value[value.length - 1]) {\r\n case 'YYYY':\r\n formatStep = 'year'\r\n break\r\n case 'MM':\r\n formatStep = 'month'\r\n break\r\n case 'DD':\r\n formatStep = 'day'\r\n break\r\n default:\r\n break\r\n }\r\n }\r\n return formatStep\r\n}\r\n\r\nexport const handleFormatter = (formatter: string) => {\r\n return formatter.replace(/\\\\n/g, '\\n')\r\n}\r\n\r\n/**\r\n * 图表的图例格式化\r\n * @param format 表达式\r\n * @param textData 传入参数\r\n * @returns 显示的图例文本\r\n */\r\nexport const getLegendFormat = (format: string = '', textData: any) => {\r\n const variables = format.match(/\\{(.+?)\\}/g)\r\n // 换行符个数\r\n const lineBreakCount = format.split('\\n')?.length - 1\r\n let lineBreakStr = ''\r\n if (lineBreakCount) {\r\n for (let i = 0; i < lineBreakCount; i++) {\r\n lineBreakStr += '\\n'\r\n }\r\n }\r\n let text = format\r\n if (variables?.length) {\r\n for (const item of variables) {\r\n const str = useVariablesInText(\r\n item,\r\n {\r\n textData\r\n },\r\n {\r\n useNewline: false,\r\n useSpace: false\r\n }\r\n )\r\n if (str) {\r\n text = text.replace(item, str)\r\n }\r\n }\r\n return `${lineBreakStr}{text|${text}}`\r\n } else {\r\n return format\r\n }\r\n}\r\n\r\n// 千分位转换\r\nexport function formatQfw (str: string) {\r\n let result = ''\r\n let str1 = ''\r\n let str2 = ''\r\n let value = ''\r\n if (str.indexOf('.') > -1) {\r\n str1 = str.split('.')[0] // 千分位处理部分\r\n str2 = str.split('.')[1] // 小数值\r\n } else {\r\n str1 = str\r\n }\r\n let index = 0\r\n let len = 0\r\n len = str1.length - 1\r\n while (len >= 0) {\r\n index % 3 === 0 && index !== 0\r\n ? str1[len] === '-'\r\n ? (result += str1[len])\r\n : (result += ',' + str1[len])\r\n : (result += str1[len])\r\n len--\r\n index++\r\n }\r\n result = result\r\n .split('')\r\n .reverse()\r\n .join('')\r\n if (str.indexOf('.') > -1) {\r\n value = result + '.' + str2\r\n } else {\r\n value = result\r\n }\r\n return value\r\n}\r\n\r\n// 根据指标获取其他参数-用于条件查询\r\nexport async function getIndicatorParams ({ graphicConfig, request, INDICATOR_URL = '', PAGE_ID, dataSourceId }) {\r\n try {\r\n const { leftAxisList = [], rightAxisList = [], queryColumnList = [], indicators = [] } = unref(graphicConfig)\r\n const otherList = [...leftAxisList, ...rightAxisList, ...queryColumnList, ...indicators]\r\n const idMap: any = {}\r\n for (const item of otherList) {\r\n const { indexCode = '', parentId = '' } = item\r\n if (parentId && !hasOwn(item, 'calcType') && !idMap[parentId]) {\r\n idMap[parentId] = indexCode\r\n }\r\n }\r\n if (Object.keys(idMap)?.length) {\r\n const promiseList: any = []\r\n for (const id in idMap) {\r\n promiseList.push(\r\n new Promise((resolve, reject) => {\r\n request\r\n .post(\r\n `${INDICATOR_URL}/diagram/hrpIndexWithComplex`,\r\n {\r\n pageId: PAGE_ID,\r\n indexGuid: id,\r\n indexCode: idMap[id],\r\n dataSourceId\r\n }\r\n )\r\n .then((res: any) => {\r\n const { success, data = [] } = res.data\r\n if (success && data?.dataViewColumns?.length) {\r\n resolve(data.dataViewColumns)\r\n } else {\r\n reject(data)\r\n }\r\n })\r\n .catch((e) => {\r\n console.error(e)\r\n reject(e)\r\n })\r\n })\r\n )\r\n }\r\n const res = await Promise.all(promiseList)\r\n const resultList = res.reduce((a: any, b: any) =>\r\n a.filter((c: any) => b.find((v: any) => v.typeGuid === c.typeGuid))\r\n )\r\n return resultList.filter((v: any) => v.typeGuid)\r\n }\r\n } catch (err) { \r\n console.error(err)\r\n }\r\n return ([])\r\n}\r\n","export const MODEL_KEY_LIST = ['table', 'bar', 'combograph', 'line', 'pie', 'radar', 'scatter', 'list', 'circulate']\r\n","import { unref } from 'vue'\r\nimport dayjs from 'dayjs'\r\nimport { cloneDeep } from 'lodash-es'\r\nimport { hasOwn, lowerCaseIncludes, getConditions, getFormatStep } from './utils/util'\r\nimport { MODEL_KEY_LIST } from './utils/constant'\r\n\r\nlet modelValue = new Map()\r\nconst excludeAttr = [\r\n 'keyValue',\r\n 'conditionKey',\r\n 'conditionLabel',\r\n 'conditionName',\r\n 'conditionValueType',\r\n 'customValue',\r\n 'id',\r\n 'keyName'\r\n]\r\n\r\nconst getGlobalModel = (key: string) => {\r\n return modelValue.get(key)\r\n}\r\n\r\n// 日期计算\r\nconst getCalcWays = (data: { [key:string]:any }, props: { [key:string]: any } = {}) => {\r\n const { around, unit, id } = data\r\n let result = ''\r\n const { pageMode = '', componentList = [] } = props?.graphicConfig || {}\r\n let sTime: any = null\r\n let eTime: any = null\r\n if (pageMode === 'design') {\r\n const component: any = componentList?.find((v: { [key:string]:any }) => v.id === id)\r\n if (!component) {\r\n return []\r\n }\r\n const { interval, intervalUnit, startTime, endTime, operate, useCurrentTime } = component || {}\r\n if (useCurrentTime) {\r\n sTime = dayjs().subtract(interval, intervalUnit)\r\n eTime = dayjs()\r\n }\r\n if (startTime) {\r\n sTime = dayjs(startTime)\r\n }\r\n if (endTime) {\r\n eTime = dayjs(endTime)\r\n }\r\n if (operate) {\r\n const { type, value, mode } = operate\r\n switch (type) {\r\n case 'add':\r\n sTime = sTime ? sTime.add(value, mode) : sTime\r\n eTime = eTime ? eTime.add(value, mode) : eTime\r\n break\r\n case 'minus':\r\n sTime = sTime ? sTime.subtract(value, mode) : sTime\r\n eTime = eTime ? eTime.subtract(value, mode) : eTime\r\n }\r\n }\r\n } else {\r\n const model = getGlobalModel(id) || {}\r\n if (unref(model.startTime)) {\r\n sTime = dayjs(unref(model.startTime))\r\n }\r\n if (unref(model.endTime)) {\r\n eTime = dayjs(unref(model.endTime))\r\n }\r\n }\r\n if (sTime && eTime) {\r\n const diffValue = eTime.diff(sTime, unit.toLowerCase())\r\n result = `${around === 'before' ? '-' : ''}${diffValue + 1}`\r\n }\r\n return result ? [result] : []\r\n}\r\n\r\nconst handleParams = (params: any, type: string | undefined) => {\r\n if (type) {\r\n // 处理sqlConditions中的sqlConditon\r\n if (hasOwn(params, 'indexCode')) {\r\n params.hrpIndexCode = params.indexCode\r\n delete params.indexCode\r\n }\r\n if (hasOwn(params, 'indexCodeNum')) {\r\n params.hrpIndexCodeNum = params.indexCodeNum\r\n delete params.indexCodeNum\r\n }\r\n if (hasOwn(params, 'dataType')) {\r\n delete params.dataType\r\n }\r\n } else {\r\n const { calcWays = [], dateCalcTypes = [], activeKey, componentId = '' } = params\r\n if (activeKey === 5 && calcWays?.length && dateCalcTypes?.length && componentId) {\r\n const vals = calcWays[0].split('-')\r\n if (vals?.length > 1) {\r\n if (vals[0] === 'rangeValue') {\r\n // 范围差值\r\n params.calcWays = getCalcWays({\r\n around: vals[1],\r\n unit: dateCalcTypes[0],\r\n id: componentId\r\n })\r\n }\r\n }\r\n delete params.radioValue\r\n }\r\n if (hasOwn(params, 'dataType')) {\r\n if (params.fieldType === 'DATE') {\r\n params.label = params.fieldName\r\n }\r\n if (params.dataType === 'component') {\r\n if (params.fieldValue === 'PARENT') {\r\n let fieldVal = params.modelKey\r\n if (fieldVal && params.prop) {\r\n fieldVal += `-${params.prop}`\r\n }\r\n params.fieldValue = '${' + fieldVal + '}'\r\n } else {\r\n params.fieldValue = '${' + params.fieldValue + '}'\r\n }\r\n }\r\n delete params.dataType\r\n }\r\n if (hasOwn(params, 'activeKey')) {\r\n delete params.activeKey\r\n }\r\n if (hasOwn(params, 'radioValue')) {\r\n delete params.radioValue\r\n }\r\n if (hasOwn(params, 'indexCode')) {\r\n params.hrpIndexCode = params.indexCode\r\n delete params.indexCode\r\n }\r\n if (hasOwn(params, 'indexCodeNum')) {\r\n params.hrpIndexCodeNum = params.indexCodeNum\r\n delete params.indexCodeNum\r\n }\r\n if (params.dataType !== 'component' && params.useCurrentTime) {\r\n // 时间值为当前时间\r\n params.fieldValue = dayjs().format(params.dateFormat)\r\n }\r\n if (hasOwn(params, 'modelKey')) {\r\n delete params.modelKey\r\n }\r\n if (hasOwn(params, 'prop')) {\r\n delete params.prop\r\n }\r\n delete params.useCurrentTime\r\n }\r\n}\r\n\r\n// 递归格式化conditions的数据\r\nconst handleConditions = (list: { [key: string]: any } [], type?: string) => {\r\n const result: any = []\r\n if (list?.length) {\r\n cloneDeep(list).forEach((item) => {\r\n if (item.join && item.conditions) {\r\n const isSameLevel = !item.conditions.some((v: any) => v.join && v.conditions)\r\n item.conditions.forEach((cs: any, index: number) => {\r\n handleParams(cs, type)\r\n const joinParams: { [key: string]: any } = {}\r\n if (index < item.conditions.length - 1) {\r\n joinParams.join = item.join\r\n }\r\n if (isSameLevel) {\r\n result.push({\r\n ...joinParams,\r\n ...cs\r\n })\r\n } else {\r\n if (cs.join && cs.conditions) {\r\n const conKey = type ? 'sqlConditions' : 'conditions'\r\n result.push({\r\n [conKey]: handleConditions([cs], type),\r\n ...joinParams\r\n })\r\n } else {\r\n result.push({\r\n ...joinParams,\r\n ...cs\r\n })\r\n }\r\n }\r\n })\r\n } else {\r\n handleParams(item, type)\r\n result.push(item)\r\n }\r\n })\r\n }\r\n return result\r\n}\r\n\r\nconst handleIndicator = (indicator: { [key:string]: any } = {}, classification: any) => {\r\n if (indicator?.sortCpnts && classification) {\r\n const sortData = getCpntSortData(indicator)\r\n if (sortData) {\r\n classification.sort = sortData\r\n }\r\n }\r\n const {\r\n label,\r\n name,\r\n location,\r\n show,\r\n indexCode,\r\n indexCodeNum,\r\n calcType = 'COLUMN',\r\n builtInFormula,\r\n builtInValueSource,\r\n builtInCalcWay,\r\n formula,\r\n conditions,\r\n aggregate,\r\n distinct,\r\n dimByCount,\r\n dataTo\r\n } = indicator\r\n let conditionData\r\n if (conditions) {\r\n conditionData = handleConditions(conditions)\r\n }\r\n if (calcType === 'COMPONENT') {\r\n const componentField: any = {}\r\n setFieldValue(componentField, builtInValueSource)\r\n return {\r\n label: label.trim(),\r\n columnName: name,\r\n show,\r\n calcType,\r\n componentAlias: builtInCalcWay,\r\n componentValue: componentField.fieldValue || null\r\n }\r\n }\r\n const itemObj: any = {\r\n label: label.trim(),\r\n columnName: name,\r\n location,\r\n show,\r\n calcType: dataTo === '1' ? 'VIEW' : calcType,\r\n hrpIndexCode: indexCode,\r\n hrpIndexCodeNum: indexCodeNum,\r\n aggregate,\r\n builtInFormula,\r\n builtInValueSource,\r\n formula,\r\n conditions: conditionData\r\n }\r\n if (builtInFormula === 'DATE_OFFSET') {\r\n const list = builtInCalcWay.split('-')\r\n if (list?.length === 3) {\r\n let calcWays = list[0]\r\n if (list[2] === 'before' && list[0] !== '0') {\r\n calcWays = `-${list[0]}`\r\n }\r\n return {\r\n ...itemObj,\r\n calcWays: [calcWays],\r\n dateCalcTypes: [list[1]]\r\n }\r\n }\r\n } else {\r\n if (name === 'the_count') {\r\n itemObj.calcType = 'AGGREGATE'\r\n itemObj.distinct = !!distinct\r\n itemObj.typeGuid = dimByCount\r\n }\r\n return {\r\n ...itemObj,\r\n builtInCalcWay\r\n }\r\n }\r\n}\r\n\r\nconst handleSqlConditions = (graphicConfig: { [key:string]: any }) => {\r\n if (!graphicConfig) {\r\n return []\r\n }\r\n const controlList = cloneDeep(graphicConfig?.controlList || [])\r\n .filter((v: any) => v.conditionKey !== 'parentCode')\r\n const {\r\n classificationList = [],\r\n rowHeaderList = [],\r\n dimensionList = [],\r\n seriesList = [],\r\n leftAxisList = [],\r\n rightAxisList = [],\r\n queryColumnList = [],\r\n indicators = []\r\n } = graphicConfig\r\n handleControlList(controlList)\r\n const otherList = [\r\n ...classificationList,\r\n ...rowHeaderList,\r\n ...dimensionList,\r\n ...seriesList,\r\n ...leftAxisList,\r\n ...rightAxisList,\r\n ...queryColumnList,\r\n ...indicators\r\n ]\r\n const conditionList: any = []\r\n for (const ol of otherList) {\r\n const conditions = getConditions(ol?.conditions || [])\r\n if (conditions?.length) {\r\n const list = conditions\r\n .filter((v: any) => v?.dataType === 'component')\r\n .map((item: any) => {\r\n const params: any = {}\r\n if (item?.dateFormat) {\r\n params.format = item.dateFormat\r\n }\r\n if (item.fieldValue === 'PARENT') {\r\n // 使用父页面的组件\r\n params.id = 'PARENT'\r\n params.keyName = item.modelKey\r\n params.modelKey = item.modelKey\r\n params.prop = item.prop\r\n }\r\n return {\r\n conditionKey: item.fieldName,\r\n conditionLabel: item.fieldName,\r\n conditionName: item.fieldName,\r\n conditionValueType: item.fieldType,\r\n id: item.componentId,\r\n keyName: item.fieldValue,\r\n rule: item.rule,\r\n notGlobal: true,\r\n indexCode: item.indexCode,\r\n typeGuid: item.typeGuid,\r\n indexCodeNum: item.indexCodeNum,\r\n ...params\r\n }\r\n })\r\n if (list?.length) {\r\n for (const l of list) {\r\n if (!conditionList.find((cItem: any) => cItem.keyName === l.keyName)) {\r\n conditionList.push(l)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n const len = conditionList.length\r\n const sqlConditions = controlList\r\n for (let i = 0; i < len; i++) {\r\n const control = conditionList[i]\r\n if (control?.conditionKey === 'parentCode') {\r\n continue\r\n }\r\n const {\r\n id,\r\n keyName,\r\n prop,\r\n format: dateFormat,\r\n modelKey,\r\n dataType = 'component',\r\n customValue\r\n } = control\r\n const sqlCondition: { [key:string]: any } = getConditionItem(control)\r\n // console.log('model', model)\r\n setFieldValue(sqlCondition, id, { prop, dateFormat, modelKey, keyName })\r\n if (dataType === '') {\r\n sqlCondition.fieldValue = customValue || ''\r\n }\r\n sqlConditions.push(sqlCondition)\r\n }\r\n for (let j = sqlConditions.length - 1; j >= 0; j--) {\r\n const item = sqlConditions[j]\r\n if (!item.globalCondition) {\r\n const cond = getConditions(sqlConditions).find(v => v.alias === item.alias && v.globalCondition)\r\n if (cond) {\r\n sqlConditions.splice(j, 1)\r\n }\r\n }\r\n }\r\n return sqlConditions\r\n}\r\n\r\nfunction getConditionItem (control: { [key:string]:any }) {\r\n const {\r\n id,\r\n keyName,\r\n conditionLabel,\r\n conditionKey,\r\n conditionValueType,\r\n prop,\r\n rule = 'NONE',\r\n notGlobal = false,\r\n indexCode,\r\n typeGuid,\r\n indexCodeNum,\r\n dataType = 'component'\r\n } = control\r\n let alias = keyName || id\r\n if (alias && prop) {\r\n alias += `-${prop}`\r\n }\r\n let ruleValue = rule\r\n if (ruleValue === 'NONE') {\r\n if (['startTime', 'endTime'].includes(prop)) {\r\n ruleValue = prop === 'startTime' ? 'GREATER_EQUAL' : 'LESS_EQUAL'\r\n } else if (keyName?.includes('startTime')) {\r\n ruleValue = prop === 'GREATER_EQUAL'\r\n } else if (keyName?.includes('endTime')) {\r\n ruleValue = prop === 'LESS_EQUAL'\r\n } else {\r\n ruleValue = 'EQUAL'\r\n }\r\n }\r\n if (id === 'PARENT') {\r\n alias = control.modelKey\r\n if (alias && prop) {\r\n alias += `-${prop}`\r\n }\r\n ruleValue = rule\r\n }\r\n return {\r\n rule: ruleValue,\r\n label: conditionLabel,\r\n fieldName: conditionKey,\r\n fieldValue: '', // 在关联控件中取\r\n // dateFormat: 'YYYY-MM',\r\n valueType: conditionValueType,\r\n alias,\r\n globalCondition: !notGlobal,\r\n indexCode,\r\n typeGuid,\r\n indexCodeNum,\r\n dataType\r\n }\r\n}\r\n\r\nfunction handleControlList (controlList: { [key:string]:any }[]) {\r\n if (controlList?.length) {\r\n for (const control of controlList) {\r\n if (control?.conditions) {\r\n handleControlList(control.conditions)\r\n } else {\r\n const {\r\n id,\r\n keyName,\r\n prop,\r\n modelKey,\r\n format: dateFormat,\r\n dataType = 'component',\r\n customValue\r\n } = control\r\n let alias = keyName || id\r\n if (alias && prop) {\r\n alias += `-${prop}`\r\n }\r\n const sqlCondition: { [key:string]: any } = getConditionItem(control)\r\n setFieldValue(sqlCondition, id, { prop, dateFormat, modelKey, keyName })\r\n if (dataType === '') {\r\n sqlCondition.fieldValue = customValue || ''\r\n }\r\n for (const key in sqlCondition) {\r\n control[key] = sqlCondition[key]\r\n }\r\n for (const attr of excludeAttr) {\r\n delete control[attr]\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction handleVariableList (variableList: { [key: string]: any }[]) {\r\n const handleVarList: any = []\r\n if (variableList?.length) {\r\n for (const item of variableList) {\r\n if (item.variableName) {\r\n const variableItem: any = {\r\n variateName: item.variableName,\r\n globalCondition: false,\r\n valueType: item.variableType,\r\n alias: item.keyName || ''\r\n }\r\n setFieldValue(variableItem, item.id, {\r\n dateFormat: item.format,\r\n prop: item.dateTypeValue,\r\n keyName: item.keyName,\r\n operateType: item.operateType,\r\n operateMode: item.operateMode,\r\n operateValue: item.operateValue\r\n })\r\n if (item.dataType === '') {\r\n variableItem.fieldValue = item.variableValue\r\n }\r\n if (item.format) {\r\n // 日期格式化\r\n variableItem.dateFormat = item.format\r\n }\r\n if (item.label) {\r\n variableItem.label = item.label\r\n }\r\n handleVarList.push(variableItem)\r\n }\r\n }\r\n }\r\n return handleVarList\r\n}\r\n\r\n// 设置sqlCondition的fieldValue值\r\nfunction setFieldValue (data: any, id: string, params?: any) {\r\n const { prop = '', dateFormat = '', modelKey = '', keyName = '', operateValue, operateMode, operateType } = params || {}\r\n const rKey = modelKey || keyName\r\n if (id === 'PARENT' && rKey && prop) {\r\n // @ts-ignore\r\n const record = window.config.record\r\n let propKey = prop\r\n let format = dateFormat\r\n const variables = (prop).match(/\\{(.+?)\\}/g)\r\n if (variables?.length) {\r\n const variable = variables[0].slice(1, -1).trim()\r\n propKey = prop.replace(variables[0], '')\r\n format = variable\r\n data.dateFormat = format\r\n }\r\n if (record && record[rKey]) {\r\n const recordValue = unref(record[rKey][propKey])\r\n if (dayjs.isDayjs(recordValue)) {\r\n data.fieldValue = recordValue.format(format || 'YYYY-MM-DD')\r\n } else {\r\n data.fieldValue = recordValue\r\n }\r\n }\r\n return\r\n }\r\n // 获取组件属性\r\n const model = getGlobalModel(id) || {}\r\n // console.log('model', model)\r\n const { value, format = 'YYYY-MM-DD', type = '', useCurrentTime, RECORD } = model || {}\r\n const customFormat = dateFormat || format\r\n if (lowerCaseIncludes(model.type, 'date')) {\r\n let dateValue\r\n if (useCurrentTime) {\r\n if (value) {\r\n dateValue = unref(value)\r\n } else {\r\n dateValue = dayjs()\r\n }\r\n } else {\r\n dateValue = unref(value)\r\n }\r\n if (operateValue && operateMode && operateType) {\r\n switch (operateType) {\r\n case 'add':\r\n dateValue = dateValue.add(operateValue, operateMode)\r\n break\r\n case 'minus':\r\n dateValue = dateValue.subtract(operateValue, operateMode)\r\n break\r\n }\r\n }\r\n data.fieldValue = dateValue?.format(customFormat)\r\n data.dateFormat = customFormat\r\n } else if (type === 'ecanRangePicker') {\r\n let propValue = prop\r\n if (!prop) {\r\n const knList = keyName && keyName.split('-')\r\n if (knList?.length) {\r\n propValue = knList[knList.length - 1]\r\n }\r\n }\r\n if (!propValue) {\r\n return\r\n }\r\n let _time: any = null\r\n if (unref(model[propValue])) {\r\n _time = dayjs(unref(model[propValue]))\r\n }\r\n\r\n if (operateValue && operateMode && operateType) {\r\n if (operateValue === 'rangeValue') {\r\n // 自定义偏移,目前只有范围差\r\n if (model.startTime && model.endTime) {\r\n const interval = unref(model.endTime).diff(unref(model.startTime), operateMode) + 1\r\n switch (operateType) {\r\n case 'add':\r\n _time = _time ? _time.add(interval, operateMode) : _time\r\n break\r\n case 'minus':\r\n _time = _time ? _time.subtract(interval, operateMode) : _time\r\n }\r\n }\r\n } else if (!isNaN(+operateValue)) {\r\n switch (operateType) {\r\n case 'add':\r\n _time = _time ? _time.add(operateValue, operateMode) : _time\r\n break\r\n case 'minus':\r\n _time = _time ? _time.subtract(operateValue, operateMode) : _time\r\n }\r\n }\r\n }\r\n\r\n if (_time) {\r\n data.fieldValue = _time?.format(customFormat)\r\n }\r\n if (propValue === 'rangeValue') {\r\n // 全局变量的日期范围间隔值计算\r\n if (model.startTime && model.endTime) {\r\n const step: any = getFormatStep(customFormat)\r\n if (step) {\r\n data.fieldValue = unref(model.endTime).diff(unref(model.startTime), step) + 1\r\n }\r\n }\r\n }\r\n data.dateFormat = customFormat\r\n } else if (lowerCaseIncludes(type, MODEL_KEY_LIST)) {\r\n if (modelKey && RECORD) {\r\n data.fieldValue = RECORD[modelKey]\r\n } else if (!modelKey && RECORD) {\r\n data.fieldValue = RECORD.value\r\n } else {\r\n data.fieldValue = unref(value)\r\n }\r\n } else {\r\n data.fieldValue = unref(value)\r\n }\r\n}\r\n\r\nconst handleSort = (sort: any) => {\r\n if (sort) {\r\n const sortData: any = Array.isArray(sort) ? cloneDeep(sort) : [cloneDeep(sort)]\r\n let type = ''\r\n let customOrderColumns = []\r\n const labels: any = []\r\n const columnNames: any = []\r\n const orders: any = []\r\n for (const item of sortData) {\r\n if (item.defaultCode) {\r\n item.label = item.columnName\r\n delete item.defaultCode\r\n }\r\n if (item.type === 'CUSTOM') {\r\n customOrderColumns = item.customOrderColumns\r\n }\r\n type = item.type\r\n labels.push(item.label)\r\n if (item.columnName?.includes('_ecanrepeat_')) {\r\n // 处理多个一样的指标或维度\r\n const list = item.columnName.split('_ecanrepeat_')\r\n columnNames.push(list[0])\r\n } else {\r\n columnNames.push(item.columnName)\r\n }\r\n orders.push(item.order)\r\n }\r\n if (type !== 'CUSTOM' && labels?.length > 1) {\r\n type = 'COMBINATION'\r\n }\r\n if (type === 'CUSTOM') {\r\n return {\r\n label: labels.join(','),\r\n columnName: columnNames.join(','),\r\n type,\r\n customOrderColumns\r\n }\r\n } else {\r\n return {\r\n label: labels.join(','),\r\n columnName: columnNames.join(','),\r\n order: orders.join(','),\r\n type\r\n }\r\n }\r\n } else {\r\n return sort\r\n }\r\n}\r\n\r\n// 获取关联控件排序的排序信息\r\nconst getCpntSortData = (data: any) => {\r\n const { sortCpnts = [] } = data\r\n let customSort: any\r\n let order = ''\r\n for (const id of sortCpnts) {\r\n const model = getGlobalModel(id) || {}\r\n const { type, RECORD } = model\r\n if (lowerCaseIncludes(type, 'image') && lowerCaseIncludes(RECORD?.value, ['asc', 'desc'])) {\r\n order = RECORD.value.toUpperCase()\r\n break\r\n }\r\n }\r\n if (order) {\r\n customSort = {\r\n label: data.label,\r\n columnName: data.name,\r\n order,\r\n type: 'NORMAL'\r\n }\r\n }\r\n return customSort\r\n}\r\n\r\nconst formatIndicatorParams = (props: any, otherParams: any = {}) => {\r\n const { graphicConfig, type, globalModel, isGroupTable = false } = props\r\n if (globalModel) {\r\n modelValue = globalModel\r\n }\r\n const isPivotTable = lowerCaseIncludes(type, 'pivottable')\r\n\r\n let {\r\n source,\r\n dataViewId,\r\n plugin = '1', // 插件类型\r\n layer, // 后台图表类型,值分0,1\r\n chartType, // 前端图表类型\r\n classificationList = [],\r\n rowHeaderList = [],\r\n dimensionList = [], // 文本组件的维度列表\r\n seriesList = [],\r\n leftAxisList = [],\r\n rightAxisList = [],\r\n queryColumnList = [],\r\n indicators = [],\r\n controlList = [],\r\n formFields = {},\r\n variableList = [],\r\n variableConditions = [],\r\n // dataSourceId, // 所属数据源ID\r\n idxLibMode, // 指标库模式, source= INDICATOR_LIB时候必填, NORMAL_YEAR_TABLE = 普通年表, WITH_DATE_DIM_TABLE = 带有时间维度表\r\n preview = false, // 预览开关\r\n edvDataSetId // 数据集id\r\n } = graphicConfig || {}\r\n\r\n let sqlConditions: any = []\r\n if (graphicConfig?.pageMode === 'design') {\r\n // relativeList 在设计模式下,由于联动无法直接获取,已经处理好数据直接获取\r\n sqlConditions = (graphicConfig.sqlConditions ?? []).map((v: any) => {\r\n const gParams: any = {}\r\n if (!hasOwn(v, 'globalCondition') && !v.join) {\r\n gParams.globalCondition = true\r\n }\r\n if (!v.join) {\r\n const ruleVaule = v.rule || 'EQUAL'\r\n gParams.rule = ruleVaule === 'NONE' ? 'EQUAL' : ruleVaule\r\n }\r\n return {\r\n ...v,\r\n ...gParams\r\n }\r\n })\r\n if (variableConditions?.length) {\r\n sqlConditions = sqlConditions.concat(variableConditions)\r\n }\r\n } else {\r\n sqlConditions = handleSqlConditions(graphicConfig)\r\n if (variableList?.length) {\r\n sqlConditions = sqlConditions.concat(handleVariableList(variableList))\r\n }\r\n }\r\n\r\n if (sqlConditions?.length) {\r\n const globalList = sqlConditions.filter((v: any) => v.globalCondition)\r\n const notGlobalList = sqlConditions.filter((v: any) => !v.globalCondition)\r\n if (globalList?.length > 1) {\r\n sqlConditions = [\r\n {\r\n join: '&&',\r\n conditions: globalList\r\n },\r\n ...notGlobalList\r\n ]\r\n }\r\n }\r\n\r\n // 把sqlConditions转成接口要求的数据格式\r\n if (sqlConditions?.length) {\r\n sqlConditions = handleConditions(sqlConditions, '1')\r\n }\r\n\r\n // 图类型,1=表 2=图\r\n if (layer == null) {\r\n if (lowerCaseIncludes(type, ['table', 'card']) || (lowerCaseIncludes(type, ['list', 'circulate']) && classificationList?.length > 1)) {\r\n layer = '1'\r\n } else if (lowerCaseIncludes(type, ['select', 'checkbox', 'radio'])) {\r\n layer = '3'\r\n } else {\r\n layer = '2'\r\n }\r\n }\r\n\r\n let classification\r\n const classifications: any = []\r\n let typeGuidString = ''\r\n if (\r\n Array.isArray(classificationList) &&\r\n classificationList.length > 0 &&\r\n (!['ecanList', 'ecanCirculate'].includes(type) || classificationList?.length === 1)\r\n ) {\r\n const len = classificationList.length\r\n for (let i = 0; i < len; i++) {\r\n const item = classificationList[i] || {}\r\n const {\r\n label = '',\r\n name = '',\r\n show = false,\r\n sort,\r\n customGroup,\r\n conditions,\r\n dateFormat,\r\n typeGuid = '',\r\n truncations = []\r\n } = item\r\n // 如果是 show 直接提取 classification,停止遍历\r\n if (show || len === 1) {\r\n typeGuidString = typeGuid\r\n classification = {\r\n label: label.trim(),\r\n columnName: name,\r\n show,\r\n sort: getCpntSortData(item) || handleSort(sort) || sort,\r\n customGroup,\r\n conditions: handleConditions(conditions),\r\n typeGuid\r\n }\r\n if (dateFormat) {\r\n classification.dateFormat = dateFormat\r\n }\r\n if (name === 'the_date' && !classification.dateFormat) {\r\n classification.dateFormat = 'YYYY-MM'\r\n }\r\n // truncation\r\n const truncation: any = {}\r\n if (Array.isArray(truncations) && truncations.length > 0) {\r\n const len = truncations.length\r\n for (let i = 0; i < len; i++) {\r\n const item = truncations[i] || {}\r\n const { rule = '', num = 0, name = '' } = item\r\n if (rule && num) {\r\n truncation.num = num\r\n truncation.rule = rule\r\n if (name) {\r\n truncation.otherGroupName = name\r\n }\r\n }\r\n }\r\n }\r\n if (Object.keys(truncation)?.length) {\r\n classification.truncation = truncation\r\n }\r\n if (lowerCaseIncludes(type, ['scatter', 'valueline'])) {\r\n classifications.push(classification)\r\n } else {\r\n break\r\n }\r\n }\r\n }\r\n }\r\n // seriesList (取第一项) => series\r\n let series\r\n if (Array.isArray(seriesList) && seriesList.length > 0) {\r\n const len = seriesList.length\r\n for (let i = 0; i < len; i++) {\r\n const item = seriesList[i] || {}\r\n const { label = '', name = '', show = false, sort, customGroup, conditions, typeGuid } = item\r\n // 如果是 show 直接提取 seriesList,停止遍历\r\n if (show || len === 1) {\r\n series = {\r\n label: label.trim(),\r\n columnName: name,\r\n show,\r\n sort: handleSort(sort),\r\n customGroup,\r\n conditions: handleConditions(conditions),\r\n typeGuid\r\n }\r\n break\r\n }\r\n }\r\n }\r\n\r\n // leftAxisList + rightAxisList + indicators => indicatorList\r\n const indicatorList: any = []\r\n leftAxisList?.forEach((leftAxis: { [key:string]: any }) => {\r\n leftAxis.location = 'LEFT'\r\n indicatorList.push(handleIndicator(leftAxis, classification))\r\n })\r\n rightAxisList?.forEach((rightAxis: { [key:string]: any }) => {\r\n rightAxis.location = 'RIGHT'\r\n indicatorList.push(handleIndicator(rightAxis, classification))\r\n })\r\n\r\n let indicatorsData = indicators\r\n if (otherParams?.pivotTableCal?.indicators?.length) {\r\n // 透视表全设计模式,替换设计态拖拽的指标\r\n indicatorsData = otherParams.pivotTableCal.indicators\r\n }\r\n indicatorsData?.forEach((indicator: { [key:string]: any }) => {\r\n indicator.location = 'LEFT'\r\n indicatorList.push(handleIndicator(indicator, classification))\r\n })\r\n\r\n // queryColumnList => queryColumns\r\n const queryColumns: any = []\r\n if (['ecanList', 'ecanCirculate'].includes(type) && classificationList?.length > 1) {\r\n queryColumnList = classificationList\r\n }\r\n if (otherParams?.pivotTableCal?.dimensions?.length) {\r\n // 透视表全设计模式,替换设计态拖拽的维度\r\n queryColumnList = otherParams.pivotTableCal.dimensions\r\n }\r\n queryColumnList?.forEach((queryColumn: { [key:string]: any }) => {\r\n const { label, name, location, show, indexCode, sort, typeGuid, indexCodeNum, dateFormat, conditions } = queryColumn\r\n let customSort = handleSort(sort)\r\n if (otherParams.sort) {\r\n // 表格的表头排序\r\n const { field, order } = otherParams.sort\r\n let indicator = indicatorList.find(v => v.label === field)\r\n if (!indicator && label === field) {\r\n indicator = queryColumn\r\n }\r\n if (indicator) {\r\n customSort = {\r\n columnName: indicator.columnName,\r\n label: otherParams.sort.field,\r\n order: order.toUpperCase(),\r\n type: 'NORMAL'\r\n }\r\n }\r\n }\r\n const itemObj: any = {\r\n label,\r\n columnName: name,\r\n location,\r\n show,\r\n sort: customSort,\r\n calcType: 'COLUMN',\r\n hrpIndexCode: indexCode,\r\n hrpIndexCodeNum: indexCodeNum,\r\n conditions: handleConditions(conditions),\r\n typeGuid\r\n }\r\n if (dateFormat) {\r\n itemObj.dateFormat = dateFormat\r\n }\r\n if (name === 'the_date' && !itemObj.dateFormat) {\r\n itemObj.dateFormat = 'YYYY-MM'\r\n }\r\n queryColumns.push(itemObj)\r\n })\r\n\r\n // 行表头\r\n let rowHeaders: any = []\r\n let resultRowHeaderList: any = []\r\n if (Array.isArray(rowHeaderList) && rowHeaderList.length > 0) {\r\n resultRowHeaderList = rowHeaderList\r\n } else if (Array.isArray(dimensionList) && dimensionList.length > 0) {\r\n resultRowHeaderList = dimensionList\r\n }\r\n if (resultRowHeaderList?.length) {\r\n const len = resultRowHeaderList.length\r\n for (let i = 0; i < len; i++) {\r\n const item = resultRowHeaderList[i] || {}\r\n const { label = '', name = '', show = false, sort, customGroup, conditions, truncations, typeGuid = '', dateFormat } = item\r\n let customSort = handleSort(sort)\r\n if (otherParams.sort) {\r\n // 表格的表头排序\r\n const { field, order } = otherParams.sort\r\n let indicator = indicatorList.find(v => v.label === field)\r\n if (!indicator && item.label === field) {\r\n indicator = item\r\n }\r\n if (indicator) {\r\n customSort = {\r\n columnName: indicator.columnName,\r\n label: otherParams.sort.field,\r\n order: order.toUpperCase(),\r\n type: 'NORMAL'\r\n }\r\n }\r\n }\r\n const itemObj: any = {\r\n label: label.trim(),\r\n columnName: name,\r\n show,\r\n sort: customSort,\r\n customGroup,\r\n conditions: handleConditions(conditions),\r\n typeGuid\r\n }\r\n if (dateFormat) {\r\n itemObj.dateFormat = dateFormat\r\n }\r\n if (name === 'the_date' && !itemObj.dateFormat) {\r\n itemObj.dateFormat = 'YYYY-MM'\r\n }\r\n // truncation\r\n const truncation: any = {}\r\n if (Array.isArray(truncations) && truncations.length > 0) {\r\n const len = truncations.length\r\n for (let i = 0; i < len; i++) {\r\n const item = truncations[i] || {}\r\n const { rule = '', num = 0, name = '' } = item\r\n if (rule && num) {\r\n truncation.num = num\r\n truncation.rule = rule\r\n if (name) {\r\n truncation.otherGroupName = name\r\n }\r\n }\r\n }\r\n }\r\n if (Object.keys(truncation)?.length) {\r\n itemObj.truncation = truncation\r\n }\r\n rowHeaders.push(itemObj)\r\n }\r\n }\r\n\r\n // 透视表指标排序要用到的\r\n let pivotColumnHeader: any = []\r\n let pivotColumnData: any\r\n // 透视表\r\n if (otherParams?.pivotTableCal) {\r\n let resultList: any = []\r\n const {\r\n calc = [],\r\n filter = [],\r\n truncations = [],\r\n sorts = [],\r\n aggregateMethod = [],\r\n rowDimensionKeys = [],\r\n colDimensionKeys = []\r\n } = otherParams.pivotTableCal\r\n // 计算\r\n indicatorList.push(...calc)\r\n // 筛选\r\n if (filter?.length) {\r\n for (const fl of filter) {\r\n const { type, ...flParams } = fl\r\n if (type === 'indicators') {\r\n // 指标筛选\r\n resultList = indicatorList\r\n } else if (type === 'dimension') {\r\n // 维度筛选\r\n resultList = queryColumns\r\n }\r\n const target = resultList.find((v: any) => v.columnName === fl.fieldName)\r\n if (target) {\r\n if (!target.conditions) {\r\n target.conditions = []\r\n }\r\n target.conditions.push(flParams)\r\n }\r\n }\r\n }\r\n // 取top\r\n if (truncations?.length) {\r\n for (const item of truncations) {\r\n const target = queryColumns.find(v => v.columnName === item.key)\r\n if (target) {\r\n target.truncation = {\r\n num: item.num,\r\n rule: item.rule\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 维度/指标排序\r\n if (sorts?.length) {\r\n for (const item of sorts) {\r\n const { fieldType, columnData, ...sortParams } = item\r\n if (fieldType === 'indicators') {\r\n // 指标排序\r\n resultList = indicatorList\r\n pivotColumnData = columnData\r\n } else if (fieldType === 'dimension') {\r\n // 维度排序\r\n resultList = queryColumns\r\n }\r\n const target = resultList.find(v => v.label === sortParams.label)\r\n if (target) {\r\n target.sort = {\r\n ...sortParams,\r\n columnName: target.columnName\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 聚合\r\n if (Object.keys(aggregateMethod)?.length) {\r\n for (const key in aggregateMethod) {\r\n const target = queryColumns.find(v => v.label === key)\r\n if (target && aggregateMethod[key]?.length) {\r\n target.aggregateMethod = aggregateMethod[key]\r\n }\r\n }\r\n }\r\n\r\n rowHeaders = []\r\n pivotColumnHeader = []\r\n for (const q of queryColumns) {\r\n if (rowDimensionKeys.includes(q.columnName)) {\r\n rowHeaders.push(q)\r\n } else if (colDimensionKeys.includes(q.columnName)) {\r\n pivotColumnHeader.push(q)\r\n }\r\n }\r\n }\r\n\r\n if (lowerCaseIncludes(type, ['text', 'proportion', 'counter'])) {\r\n chartType = 'zb'\r\n } else if (lowerCaseIncludes(type, ['valueline'])) {\r\n chartType = 'valueline'\r\n }\r\n\r\n // queryColumns 表格配置为空返回\r\n if (isGroupTable || type === 'card') {\r\n if (rowHeaders.length === 0 || indicatorList.length === 0) {\r\n return\r\n } else {\r\n chartType = 'grouptable'\r\n }\r\n } else if (layer === '1' && queryColumns.length === 0) {\r\n return\r\n // queryColumns 图表配置为空返回\r\n } else if (layer === '2' && indicatorList.length === 0) {\r\n return\r\n } else if (layer === '3' && ((!typeGuidString && source !== 'EDV_DATA_SET') || !formFields.labelField || !formFields.valueField)) {\r\n return\r\n } else if (layer === '3' && type === 'ecanDataSelect' && indicatorList.length === 0) {\r\n return\r\n }\r\n\r\n // 文本维度\r\n if (dimensionList?.length) {\r\n layer = '1'\r\n chartType = 'grouptable'\r\n }\r\n\r\n let resultParams: any\r\n if (!lowerCaseIncludes(type, ['scatter', 'valueline']) && Object.keys(formFields)?.length) {\r\n const cascadeControl = getConditions(controlList).find((v: any) => v.conditionKey === 'parentCode')\r\n const someParams: any = {}\r\n if (cascadeControl) {\r\n const model = getGlobalModel(cascadeControl.id) || {}\r\n if (model?.itemCodes) {\r\n someParams.parentItemCodes = model.itemCodes\r\n } else {\r\n return\r\n }\r\n }\r\n if (type === 'ecanDataSelect') {\r\n someParams.indicatorList = indicatorList.filter(v => v.show)\r\n }\r\n if (source === 'EDV_DATA_SET') {\r\n someParams.edvDataSetId = edvDataSetId\r\n }\r\n resultParams = {\r\n url: '/diagram/formData',\r\n source,\r\n dataViewId,\r\n plugin: '4',\r\n layer,\r\n chartType: 'normalSelect',\r\n rangeIndexTypeGuid: typeGuidString,\r\n type: type === 'ecanDataSelect' ? 'normalSelectData' : 'normalSelect',\r\n labelField: formFields.labelField,\r\n valueField: formFields.valueField,\r\n sqlConditions,\r\n idxLibMode: 'WITH_DATE_DIM_TABLE',\r\n keyName: props.keyName,\r\n ...someParams\r\n }\r\n } else {\r\n let classParams = {}\r\n if (lowerCaseIncludes(type, ['scatter', 'valueline'])) {\r\n // 散点图多个维度\r\n classParams = {\r\n classifications\r\n }\r\n } else {\r\n classParams = {\r\n classification\r\n }\r\n }\r\n resultParams = {\r\n url: '/diagram',\r\n source,\r\n dataViewId,\r\n plugin: isPivotTable ? '5' : plugin,\r\n layer,\r\n chartType: isPivotTable ? 'pivot-table' : chartType,\r\n series,\r\n indicatorList,\r\n queryColumns: isGroupTable ? [] : queryColumns,\r\n pageFlag: true,\r\n edvDataSetId: edvDataSetId || '',\r\n sqlConditions: sqlConditions.map(v => {\r\n const { fieldValue } = v\r\n const params: any = {}\r\n if (fieldValue && Array.isArray(fieldValue)) {\r\n params.fieldValue = JSON.stringify(fieldValue)\r\n }\r\n return {\r\n ...v,\r\n ...params\r\n }\r\n }),\r\n idxLibMode,\r\n preview,\r\n rowHeaders,\r\n keyName: props.keyName,\r\n // 透视表指标排序相关入参\r\n columnData: pivotColumnData,\r\n columnHeaders: pivotColumnHeader,\r\n ...classParams,\r\n }\r\n }\r\n return resultParams\r\n}\r\n\r\nexport default {\r\n formatIndicatorParams\r\n}","interface DataItem {\n name: string | number\n value: string | number\n type?: string\n}\n\nexport type Data = DataItem []\n\nexport interface KeyTypeDataFieldNames {\n name: string\n types: {\n label: string\n value: string\n } []\n}\n\n/**\n * 图形转化数据\n * @param data 数据\n * @param dataFieldNames 字段映射\n */\nexport const useTransformChartDataByAttrKey = (data: Data = [], dataFieldNames: KeyTypeDataFieldNames) => {\n let { name = 'name', types = [] } = dataFieldNames || {}\n name = name?.trim() || name\n const set = new Set()\n const map = new Map<string, any []>()\n const dataLen = data.length\n const typesLen = types.length\n // 只有一条记录\n if (dataLen === 1) {\n const vs: any = []\n // data 为一个值取第一个\n for (let i = 0; i < typesLen; i++) {\n const type = types[i]\n const { label, value } = type\n const v = { ...data[0], value: data[0][value] }\n set.add(label)\n // 值列表\n vs.push(v)\n }\n const n = data[0][name] || ''\n map.set(n, vs)\n } else {\n for (let i = 0; i < dataLen; i++) {\n const item = data[i]\n const x = item[name]\n set.add(x)\n for (let j = 0; j < typesLen; j++) {\n const type = types[j]\n const { label, value } = type\n const v = { ...item, value: item[value] }\n if (map.has(label)) {\n const m: any = map.get(label)\n m.push(v)\n map.set(label, m)\n } else {\n map.set(label, [v])\n }\n }\n }\n }\n\n const dimensions = Array.from(set)\n const dataset: { [key:string]:any } [] = []\n for (const [name, data] of map) {\n dataset.push({\n name,\n data\n })\n }\n return {\n dimensions,\n dataset\n }\n}\n\nexport default useTransformChartDataByAttrKey\n","interface DataItem {\n name: string | number\n value: string | number\n type?: string\n}\n\nexport type Data = DataItem []\n\nexport interface ValueTypeDataFieldNames {\n name: string\n value: string\n type: string\n}\n\n/**\n * 图形转化数据\n * @param data 数据\n * @param dataFieldNames 字段映射\n */\nexport const useTransformChartDataByAttrValue = (data: Data, dataFieldNames?: ValueTypeDataFieldNames) => {\n let { name = 'name', value = 'value', type = 'type' } = dataFieldNames || {}\n // 处去字符串\n name = name?.trim()\n value = value?.trim()\n type = type?.trim()\n const set = new Set()\n const map = new Map()\n const len = data.length\n for (let i = 0; i < len; i++) {\n const item = data[i]\n // x轴\n const x = item[name] || ''\n // y轴\n const y = item[value] || ''\n // 系列(类型)\n const t = item[type] || ''\n set.add(x)\n if (map.has(t)) {\n const arr = map.get(t)\n // @ts-ignore\n arr.push({ name: x, value: y, ...item })\n map.set(t, arr)\n } else {\n // @ts-ignore\n map.set(t, [{ name: x, value: y, ...item }])\n }\n }\n const dimensions = Array.from(set)\n const dataset: { [key:string]:any } [] = []\n for (const [name, data] of map) {\n dataset.push({\n name,\n data\n })\n }\n return {\n dimensions,\n dataset\n }\n}\nexport default useTransformChartDataByAttrValue\n","import runCode from '../utils/runCode'\nexport const useValueFormatter = (formatter: string, value:string) => {\n if (formatter == null) return value\n const variables = (formatter).match(/\\{.*\\}/g)\n if (variables == null || variables.length === 0) {\n return value\n }\n const len = variables.length\n for (let i = 0; i < len; i++) {\n const variable = variables[i]\n if (variable == null || variable === '') break\n let statement = variable.slice(1, -1)?.trim()\n statement = statement?.replace(/value/g, value)\n try {\n let result = statement\n if ((/\\(.*\\)/g).test(statement) || (/[+/\\\\*]/g).test(statement)) {\n result = runCode(statement)\n }\n formatter = formatter.replace(variable, result)\n } catch (e) {\n formatter = formatter.replace(variable, statement)\n }\n }\n return formatter\n}\n\nexport default useValueFormatter\n","import { computed, unref } from 'vue'\r\nimport useVariablesInText from '../hooks/useVariablesInText'\r\nimport useValueFormatter from '../hooks/useValueFormatter'\r\nimport { handleFormatter, getLegendFormat, formatQfw } from './util'\r\nfunction getMarkLineData (chartsOptions: any) {\r\n if (chartsOptions.isShowMarkLine) {\r\n return {\r\n markLine: {\r\n data: [{ type: chartsOptions.markLineType }]\r\n }\r\n }\r\n } else {\r\n return {}\r\n }\r\n}\r\nconst getTransformProps = (chartsOptions, chartData, fontSize) => {\r\n switch (chartsOptions.type) {\r\n case 'bar':\r\n return getBarTransformProps(chartsOptions, chartData, fontSize)\r\n case 'line':\r\n return getLineTransformProps(chartsOptions, chartData, fontSize)\r\n case 'pie':\r\n return getPieTransformProps(chartsOptions, chartData, fontSize)\r\n case 'comboGraph':\r\n return getComboGraphTransformProps(chartsOptions, chartData, fontSize)\r\n default:\r\n return {}\r\n }\r\n}\r\n\r\nconst getBarTransformProps = (chartsOptions, chartData, fontSize) => {\r\n const yAxisLabelFormatter = chartsOptions.yAxisLabelFormatter\r\n const xAxisLabelFormatter = chartsOptions.xAxisLabelFormatter\r\n const { dimensions = [], dataset = [] } = chartData\r\n const series = computed(() => {\r\n const { gradientShow, gradientColors, gradientOffset, barBorderRadius } = chartsOptions\r\n const ds = dataset\r\n const len = ds.length\r\n const series: any = []\r\n for (let i = 0; i < len; i++) {\r\n const item = {\r\n ...ds[i],\r\n type: 'bar',\r\n barWidth: chartsOptions.barWidth,\r\n showBackground: chartsOptions.showBarBackground\r\n } as { [key: string]: any }\r\n const { isStack, stackColumns } = chartsOptions\r\n if (isStack && (stackColumns.includes(ds[i].name || !stackColumns))) {\r\n item.stack = 'stack'\r\n }\r\n item.label = {\r\n show: chartsOptions.labelShow,\r\n fontSize: chartsOptions.labelFontSize,\r\n position: chartsOptions.labelPosition,\r\n color: chartsOptions.labelColor,\r\n width: chartsOptions.labelWidth,\r\n overflow: chartsOptions.labelOverflow,\r\n formatter: (params) => {\r\n let formatter = ''\r\n let labelFormatter = chartsOptions.labelFormatter\r\n if (labelFormatter === '') {\r\n labelFormatter = '{c}'\r\n }\r\n const { seriesName, name, value, data } = params || {}\r\n formatter += useVariablesInText(\r\n labelFormatter,\r\n {\r\n textData: {\r\n name,\r\n value,\r\n a: seriesName,\r\n b: name,\r\n c: value || 0,\r\n ...data\r\n }\r\n },\r\n {\r\n useNewline: true,\r\n useSpace: true\r\n })\r\n return formatter\r\n }\r\n }\r\n item.itemStyle = {}\r\n if (gradientShow) {\r\n item.itemStyle = {\r\n color: {\r\n x: chartsOptions.isUseHorizontalAxis ? 1 : 0,\r\n y: 0,\r\n x2: 0,\r\n y2: chartsOptions.isUseHorizontalAxis ? 0 : 1,\r\n colorStops: [{\r\n offset: 0,\r\n color: chartsOptions.colors[i]\r\n }, {\r\n offset: gradientOffset,\r\n color: gradientColors[i]\r\n }, {\r\n offset: 1,\r\n color: gradientColors[i]\r\n }]\r\n }\r\n }\r\n }\r\n if (barBorderRadius) {\r\n const radius = barBorderRadius.split(',')\r\n if (radius?.length) {\r\n const radiusItems: any = []\r\n for (const rs of radius) {\r\n const value = parseFloat(rs)\r\n if (!isNaN(value)) {\r\n radiusItems.push(value)\r\n }\r\n }\r\n // item.itemStyle.borderRadius = radiusItems\r\n // echart4.4版本圆角属性名变更\r\n item.itemStyle.barBorderRadius = radiusItems\r\n }\r\n }\r\n if (chartsOptions.isShowMarkLine) {\r\n item.markLine = {\r\n data: [{ type: chartsOptions.markLineType }]\r\n }\r\n }\r\n series.push(item)\r\n }\r\n return series\r\n })\r\n const xAxisData = computed(() => {\r\n return dimensions.map((item) => {\r\n let result = {}\r\n if (item && typeof item === 'object') {\r\n result = {\r\n ...item,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n }\r\n } else {\r\n result = {\r\n value: item,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n }\r\n }\r\n return result\r\n })\r\n })\r\n return {\r\n tooltip: {\r\n trigger: 'axis',\r\n show: chartsOptions.tooltipShow,\r\n formatter: (params) => {\r\n const len = params.length\r\n let formatter = ''\r\n let tooltipFormatter = chartsOptions.tooltipFormatter\r\n // currentData = params[0]?.data\r\n if (tooltipFormatter === '') {\r\n tooltipFormatter = '{marker} {a} {c}'\r\n }\r\n for (let i = 0; i < len; i++) {\r\n const { marker, seriesName, name, value, data } = params[i] || {}\r\n if (i === 0) {\r\n let formatName = name\r\n if (typeof name === 'string' && name[0] === '0' && !isNaN(+name)) {\r\n formatName = (+name).toString()\r\n }\r\n formatter += `${useValueFormatter(xAxisLabelFormatter, formatName)}<br/>`\r\n }\r\n formatter += useVariablesInText(\r\n tooltipFormatter,\r\n {\r\n textData: {\r\n marker,\r\n name,\r\n value,\r\n Qfw: formatQfw,\r\n a: seriesName,\r\n b: name,\r\n c: value || 0,\r\n ...data\r\n }\r\n },\r\n {\r\n useNewline: true,\r\n useSpace: true\r\n }\r\n )\r\n formatter += '<br/>'\r\n }\r\n return formatter\r\n },\r\n // valueFormatter: (value) => {\r\n // return useVariablesInText(chartsOptions.tooltipValueFormatter as string, { value })\r\n // },\r\n textStyle: {\r\n color: chartsOptions.tooltipTextStyleColor,\r\n fontSize: fontSize\r\n },\r\n position: chartsOptions.tooltipPosition || undefined,\r\n backgroundColor: chartsOptions.tooltipBackgroundColor || '#fff'\r\n },\r\n legend: {\r\n type: chartsOptions.legendScroll ? 'scroll' : 'plain',\r\n width: chartsOptions.legendWidth,\r\n height: chartsOptions.legendHeight,\r\n show: chartsOptions.legendShow,\r\n orient: chartsOptions.legendOrient,\r\n top: chartsOptions.legendTop,\r\n left: chartsOptions.legendLeft,\r\n textStyle: {\r\n // lineHeight: parseFloat(chartsOptions.legendFontSize) + 8,\r\n rich: {\r\n text: {\r\n width: chartsOptions.legendTextWidth,\r\n color: chartsOptions.legendTextStyleColor,\r\n fontSize: chartsOptions.legendFontSize\r\n }\r\n }\r\n },\r\n itemHeight: chartsOptions.legendItemHeight,\r\n itemWidth: chartsOptions.legendItemWidth,\r\n itemGap: chartsOptions.legendItemGap,\r\n data: dataset.map((value, index) => {\r\n return {\r\n name: value.name,\r\n itemStyle: {\r\n color: chartsOptions.colors[index]\r\n },\r\n icon: chartsOptions.legendType\r\n }\r\n }),\r\n formatter: (name: string) => {\r\n return getLegendFormat(chartsOptions.legendFormatter, {\r\n name\r\n })\r\n }\r\n },\r\n xAxis: {\r\n type: chartsOptions.isUseHorizontalAxis ? 'value' : 'category',\r\n data: chartsOptions.isUseHorizontalAxis ? null : unref(xAxisData),\r\n inverse: chartsOptions.isUseHorizontalAxis ? chartsOptions.xAxisInverse : chartsOptions.axisInverse,\r\n minInterval: chartsOptions.xAxisMinInterval,\r\n splitLine: {\r\n show: chartsOptions.xAxisSplitLineShow,\r\n lineStyle: {\r\n color: chartsOptions.xAxisSplitLineStyleColor,\r\n type: chartsOptions.xAxisSplitLineType\r\n },\r\n interval: chartsOptions.xAxisSplitLineInterval\r\n },\r\n splitArea: {\r\n show: chartsOptions.xAxisSplitAreaShow\r\n },\r\n axisLabel: {\r\n color: chartsOptions.xAxisLabelColor,\r\n interval: chartsOptions.xAxisLabelInterval || 0,\r\n rotate: chartsOptions.xAxisLabelRotate,\r\n width: chartsOptions.xAxisLabelWidth,\r\n overflow: chartsOptions.xAxisLabelOverflow,\r\n fontSize: chartsOptions.xAxisLabelFontSize,\r\n formatter (value: string) {\r\n if (typeof value === 'string' && value[0] === '0' && !isNaN(+value)) {\r\n value = (+value).toString()\r\n }\r\n return useValueFormatter(xAxisLabelFormatter, value)\r\n }\r\n },\r\n axisLine: {\r\n show: chartsOptions.xAxisLineShow,\r\n lineStyle: {\r\n color: chartsOptions.xAxisLineStyleColor\r\n }\r\n },\r\n axisTick: {\r\n show: chartsOptions.xAxisTickShow\r\n },\r\n name: chartsOptions.xAxisName,\r\n nameTextStyle: {\r\n fontSize: chartsOptions.xAxisLabelFontSize,\r\n color: chartsOptions.xAxisLabelColor,\r\n align: 'left'\r\n },\r\n max: chartsOptions.xAxisMaxValue || null\r\n },\r\n yAxis: {\r\n type: chartsOptions.isUseHorizontalAxis ? 'category' : 'value',\r\n data: chartsOptions.isUseHorizontalAxis ? unref(dimensions) : null,\r\n inverse: chartsOptions.isUseHorizontalAxis ? chartsOptions.axisInverse : chartsOptions.yAxisInverse,\r\n minInterval: chartsOptions.yAxisMinInterval,\r\n splitLine: {\r\n show: chartsOptions.yAxisSplitLineShow,\r\n lineStyle: {\r\n color: chartsOptions.yAxisSplitLineStyleColor,\r\n type: chartsOptions.yAxisSplitLineType\r\n }\r\n },\r\n splitArea: {\r\n show: chartsOptions.yAxisSplitAreaShow\r\n },\r\n axisLabel: {\r\n show: chartsOptions.yAxisLabelShow,\r\n fontSize: chartsOptions.yAxisLabelFontSize,\r\n color: chartsOptions.yAxisLabelColor,\r\n rotate: chartsOptions.yAxisLabelRotate,\r\n width: chartsOptions.yAxisLabelWidth,\r\n overflow: chartsOptions.yAxisLabelOverflow,\r\n formatter (value: string) {\r\n return useValueFormatter(yAxisLabelFormatter, value)\r\n }\r\n },\r\n axisLine: {\r\n show: chartsOptions.yAxisLineAlwaysDisplay,\r\n lineStyle: {\r\n color: chartsOptions.yAxisLineStyleColor\r\n }\r\n },\r\n name: chartsOptions.yAxisName,\r\n nameTextStyle: {\r\n fontSize: chartsOptions.yAxisLabelFontSize,\r\n color: chartsOptions.yAxisLabelColor,\r\n align: 'right'\r\n },\r\n max: chartsOptions.yAxisMaxValue || null\r\n },\r\n series: unref(series)\r\n }\r\n}\r\n\r\nconst getLineTransformProps = (chartsOptions, chartData, fontSize) => {\r\n // console.log('xAxisName', chartsOptions, chartsOptions.xAxisName)\r\n const yAxisLabelFormatter = chartsOptions.yAxisLabelFormatter\r\n const xAxisLabelFormatter = chartsOptions.xAxisLabelFormatter\r\n const { dimensions = [], dataset = [] } = chartData\r\n const xAxisData = computed(() => {\r\n return dimensions.map((item) => {\r\n let result = {}\r\n if (item && typeof item === 'object') {\r\n result = {\r\n ...item,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n }\r\n } else {\r\n result = {\r\n value: item,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n }\r\n }\r\n return result\r\n })\r\n })\r\n const series = computed(() => {\r\n const temp = [] as { [key: string]: any }[]\r\n const len = dataset.length\r\n for (let i = 0; i < len; i++) {\r\n const shadowStyle: any = {}\r\n if (chartsOptions.shadowColor) {\r\n shadowStyle.shadowColor = chartsOptions.shadowColor\r\n shadowStyle.shadowBlur = chartsOptions.shadowBlur\r\n shadowStyle.shadowOffsetY = chartsOptions.shadowOffsetY\r\n shadowStyle.shadowOffsetX = chartsOptions.shadowOffsetX\r\n }\r\n temp.push({\r\n type: 'line',\r\n ...dataset[i],\r\n symbolSize: chartsOptions.symbolSize,\r\n smooth: chartsOptions.smooth,\r\n areaStyle: {\r\n color: chartsOptions.areaGradientShow\r\n ? {\r\n type: 'linear',\r\n x: 0,\r\n y: 0,\r\n x2: 0,\r\n y2: 1,\r\n colorStops: [{\r\n offset: 0,\r\n color: chartsOptions.colors[i]\r\n }, {\r\n offset: 1,\r\n color: chartsOptions.areaGradientColor || 'transparent'\r\n }],\r\n global: false\r\n }\r\n : chartsOptions.colors[i],\r\n opacity: chartsOptions.areaStyleOpacity\r\n },\r\n lineStyle: {\r\n width: chartsOptions.lineStyleWidth,\r\n ...shadowStyle\r\n },\r\n ...getMarkLineData(chartsOptions)\r\n })\r\n }\r\n return temp\r\n })\r\n return {\r\n tooltip: {\r\n trigger: 'axis',\r\n show: chartsOptions.tooltipShow,\r\n formatter: (params) => {\r\n const len = params.length\r\n let formatter = ''\r\n let tooltipFormatter = chartsOptions.tooltipFormatter\r\n if (tooltipFormatter === '') {\r\n tooltipFormatter = '{marker} {a} {c}'\r\n }\r\n for (let i = 0; i < len; i++) {\r\n const { marker, seriesName, name, value, data } = params[i] || {}\r\n if (i === 0) {\r\n formatter += `${name}<br/>`\r\n }\r\n formatter += useVariablesInText(\r\n tooltipFormatter,\r\n {\r\n textData: {\r\n marker,\r\n name,\r\n value,\r\n a: seriesName,\r\n b: name,\r\n c: value,\r\n ...data\r\n }\r\n },\r\n {\r\n useNewline: true,\r\n useSpace: true\r\n }\r\n )\r\n formatter += '<br/>'\r\n }\r\n return formatter\r\n },\r\n textStyle: {\r\n color: chartsOptions.tooltipTextStyleColor,\r\n fontSize: fontSize.value\r\n },\r\n position: chartsOptions.tooltipPosition || undefined,\r\n backgroundColor: chartsOptions.tooltipBackgroundColor || '#fff'\r\n },\r\n xAxis: {\r\n name: chartsOptions.xAxisName,\r\n type: 'category',\r\n data: unref(xAxisData),\r\n minInterval: chartsOptions.xAxisMinInterval,\r\n splitLine: {\r\n show: chartsOptions.xAxisSplitLineShow,\r\n lineStyle: {\r\n color: chartsOptions.xAxisSplitLineStyleColor\r\n }\r\n },\r\n axisLabel: {\r\n color: chartsOptions.xAxisLabelColor,\r\n interval: chartsOptions.xAxisLabelInterval || 0,\r\n rotate: chartsOptions.xAxisLabelRotate,\r\n width: chartsOptions.xAxisLabelWidth,\r\n overflow: chartsOptions.xAxisLabelOverflow,\r\n formatter (value: string) {\r\n return useValueFormatter(xAxisLabelFormatter, value)\r\n }\r\n },\r\n axisLine: {\r\n lineStyle: {\r\n color: chartsOptions.xAxisLineStyleColor\r\n }\r\n },\r\n axisTick: {\r\n show: chartsOptions.xAxisTickShow\r\n }\r\n },\r\n yAxis: {\r\n type: 'value',\r\n name: chartsOptions.yAxisName,\r\n minInterval: chartsOptions.yAxisMinInterval,\r\n splitLine: {\r\n show: chartsOptions.yAxisSplitLineShow,\r\n lineStyle: {\r\n color: chartsOptions.yAxisSplitLineStyleColor\r\n }\r\n },\r\n axisLabel: {\r\n fontSize: fontSize,\r\n color: chartsOptions.yAxisLabelColor,\r\n formatter (value: string) {\r\n return useValueFormatter(yAxisLabelFormatter, value)\r\n }\r\n },\r\n axisLine: {\r\n show: chartsOptions.yAxisLineAlwaysDisplay,\r\n lineStyle: {\r\n color: chartsOptions.yAxisLineStyleColor\r\n }\r\n }\r\n },\r\n // 图例\r\n legend: {\r\n show: chartsOptions.legendShow,\r\n orient: chartsOptions.legendOrient,\r\n top: chartsOptions.legendTop,\r\n left: chartsOptions.legendLeft,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n },\r\n series: unref(series)\r\n }\r\n}\r\n\r\nconst getPieTransformProps = (chartsOptions, chartData, fontSize) => {\r\n const { dataset = [] } = chartData\r\n let { data = [] } = dataset[0] || {}\r\n if (Array.isArray(chartsOptions.colors)) {\r\n const isUseLabelColors = chartsOptions.isUseLabelColors\r\n const colors = chartsOptions.colors\r\n data = data.map((item, index) => ({\r\n label: isUseLabelColors ? { color: colors[index] } : {},\r\n ...item\r\n }))\r\n }\r\n return {\r\n title: {\r\n text: chartsOptions.titleText,\r\n subtext: chartsOptions.titleSubtext,\r\n textStyle: {\r\n fontSize: chartsOptions.titleFontSize,\r\n fontWeight: chartsOptions.fontWeight,\r\n color: chartsOptions.titleColor\r\n },\r\n left: chartsOptions.textAlign || 'center'\r\n },\r\n // 提示\r\n tooltip: {\r\n show: chartsOptions.tooltipShow,\r\n trigger: chartsOptions.tooltipTrigger,\r\n formatter: (params) => {\r\n const { marker, seriesName, name, value, percent, data } = params || {}\r\n return useVariablesInText(\r\n chartsOptions.tooltipFormatter,\r\n {\r\n textData: {\r\n marker,\r\n name,\r\n value,\r\n percent,\r\n a: seriesName,\r\n b: name,\r\n c: value,\r\n d: percent,\r\n ...data\r\n }\r\n },\r\n {\r\n useNewline: true,\r\n useSpace: true\r\n }\r\n )\r\n },\r\n textStyle: {\r\n color: chartsOptions.tooltipTextStyleColor || '#333'\r\n },\r\n backgroundColor: chartsOptions.tooltipBackgroundColor || '#fff',\r\n borderColor: chartsOptions.tooltipBorderColor || '#eee'\r\n },\r\n // 图例\r\n legend: {\r\n show: chartsOptions.legendShow,\r\n orient: chartsOptions.legendOrient,\r\n top: chartsOptions.legendTop,\r\n left: chartsOptions.legendLeft,\r\n textStyle: {\r\n color: chartsOptions.legendTextStyleColor,\r\n fontSize: fontSize === 18 ? fontSize : chartsOptions.labelFontSize\r\n }\r\n },\r\n series: [\r\n {\r\n data,\r\n type: 'pie',\r\n radius: [chartsOptions.innerRadius, chartsOptions.outerRadius],\r\n center: [chartsOptions.centerLeft, chartsOptions.centerTop],\r\n roseType: chartsOptions.roseType,\r\n avoidLabelOverlap: false,\r\n minAngle: chartsOptions.minAngle,\r\n label: {\r\n show: chartsOptions.labelPosition !== 'center' && chartsOptions.labelShow,\r\n color: chartsOptions.labelColor,\r\n fontSize: fontSize === 18 ? fontSize : chartsOptions.labelFontSize,\r\n position: chartsOptions.labelPosition,\r\n formatter: handleFormatter(chartsOptions.labelFormatter)\r\n },\r\n labelLine: {\r\n show: chartsOptions.labelLineShow,\r\n length: chartsOptions.labelLineLength,\r\n length2: chartsOptions.labelLineLength2\r\n },\r\n emphasis: {\r\n itemStyle: {\r\n shadowBlur: 10,\r\n shadowOffsetX: 0,\r\n shadowColor: 'rgba(0, 0, 0, 0.5)'\r\n },\r\n label: {}\r\n }\r\n }\r\n ]\r\n }\r\n}\r\n\r\nconst getComboGraphTransformProps = (chartsOptions, chartData, fontSize) => {\r\n const { dimensions = [], dataset = [] } = chartData\r\n const xAxisData = computed(() => {\r\n return dimensions.map((item) => {\r\n let result = {}\r\n if (item && typeof item === 'object') {\r\n result = {\r\n ...item,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n }\r\n } else {\r\n result = {\r\n value: item,\r\n textStyle: {\r\n fontSize: fontSize\r\n }\r\n }\r\n }\r\n return result\r\n })\r\n })\r\n const series = computed(() => {\r\n const temp = [] as { [key: string]: any }[]\r\n const len = dataset.length\r\n const seriesTypes = chartsOptions.seriesTypes\r\n for (let i = 0; i < len; i++) {\r\n const seriesType = seriesTypes[i]\r\n const { type, axisIndex } = seriesType || {}\r\n let series = {\r\n type: type,\r\n yAxisIndex: axisIndex,\r\n ...dataset[i]\r\n } as { [key: string]: any }\r\n if (type === 'line') {\r\n const shadowStyle: any = {}\r\n if (chartsOptions.shadowColor) {\r\n shadowStyle.shadowColor = chartsOptions.shadowColor\r\n shadowStyle.shadowBlur = chartsOptions.shadowBlur\r\n shadowStyle.shadowOffsetY = chartsOptions.shadowOffsetY\r\n shadowStyle.shadowOffsetX = chartsOptions.shadowOffsetX\r\n }\r\n series = {\r\n ...series,\r\n symbolSize: chartsOptions.symbolSize,\r\n smooth: chartsOptions.smooth,\r\n itemStyle: {\r\n color: chartsOptions.colors[i]\r\n },\r\n areaStyle: {\r\n color: chartsOptions.areaGradientShow\r\n ? {\r\n type: 'linear',\r\n x: 0,\r\n y: 0,\r\n x2: 0,\r\n y2: 1,\r\n colorStops: [{\r\n offset: 0,\r\n color: chartsOptions.colors[i]\r\n }, {\r\n offset: 1,\r\n color: chartsOptions.areaGradientColor || 'transparent'\r\n }],\r\n global: false\r\n }\r\n : chartsOptions.colors[i],\r\n opacity: chartsOptions.areaStyleOpacity\r\n },\r\n lineStyle: {\r\n width: chartsOptions.lineStyleWidth,\r\n ...shadowStyle\r\n }\r\n }\r\n }\r\n if (type === 'bar') {\r\n const { gradientShow, gradientColors, gradientOffset } = chartsOptions\r\n const itemStyle: any = {}\r\n if (chartsOptions.barBorderRadius) {\r\n const radius = chartsOptions.barBorderRadius.split(',')\r\n if (radius?.length) {\r\n const radiusItems: any = []\r\n for (const rs of radius) {\r\n const value = parseFloat(rs)\r\n if (!isNaN(value)) {\r\n radiusItems.push(value)\r\n }\r\n }\r\n itemStyle.borderRadius = radiusItems\r\n }\r\n }\r\n if (gradientShow) {\r\n itemStyle.color = {\r\n x: 0,\r\n y: 0,\r\n x2: 0,\r\n y2: 1,\r\n colorStops: [{\r\n offset: 0,\r\n color: chartsOptions.colors[i]\r\n }, {\r\n offset: gradientOffset,\r\n color: gradientColors[i]\r\n }, {\r\n offset: 1,\r\n color: gradientColors[i]\r\n }]\r\n }\r\n }\r\n series = {\r\n ...series,\r\n barWidth: chartsOptions.barWidth,\r\n itemStyle\r\n }\r\n }\r\n if (chartsOptions.isShowMarkLine) {\r\n series.markLine = {\r\n data: [{ type: chartsOptions.markLineType }]\r\n }\r\n }\r\n temp.push(series)\r\n }\r\n return temp\r\n })\r\n const yAxis = computed(() => {\r\n const yAxis = chartsOptions.yAxis\r\n return yAxis?.map((axis, index) => {\r\n return {\r\n type: 'value',\r\n minInterval: chartsOptions.yAxisMinInterval,\r\n splitLine: {\r\n show: index === 0 ? chartsOptions.yAxisLeftSplitLineShow : chartsOptions.yAxisRightSplitLineShow,\r\n lineStyle: {\r\n color: chartsOptions.yAxisSplitLineStyleColor,\r\n type: index === 0 ? chartsOptions.yAxisLeftSplitLineType : chartsOptions.yAxisRightSplitLineType\r\n }\r\n },\r\n splitArea: {\r\n show: chartsOptions.yAxisSplitAreaShow\r\n },\r\n axisLabel: {\r\n fontSize: fontSize,\r\n show: chartsOptions.yAxisLabelShow,\r\n color: chartsOptions.yAxisLabelColor,\r\n formatter (value: string) {\r\n return useValueFormatter(axis.axisLabelFormatter, value)\r\n }\r\n },\r\n axisLine: {\r\n show: chartsOptions.yAxisLineAlwaysDisplay,\r\n lineStyle: {\r\n color: chartsOptions.yAxisLineStyleColor\r\n }\r\n },\r\n name: index === 0 ? chartsOptions.yAxisLeftName : chartsOptions.yAxisRightName,\r\n nameTextStyle: {\r\n fontSize: chartsOptions.yAxisLabelFontSize,\r\n color: chartsOptions.yAxisLabelColor,\r\n align: index === 0 ? 'right' : 'left'\r\n },\r\n max: chartsOptions.yAxisMaxValue || null\r\n }\r\n })\r\n })\r\n return {\r\n legend: {\r\n show: chartsOptions.legendShow,\r\n orient: chartsOptions.legendOrient,\r\n top: chartsOptions.legendTop,\r\n left: chartsOptions.legendLeft,\r\n textStyle: {\r\n color: chartsOptions.legendTextStyleColor,\r\n fontSize: fontSize\r\n }\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n show: chartsOptions.tooltipShow,\r\n formatter: (params) => {\r\n const len = params.length\r\n let formatter = ''\r\n let tooltipFormatter = chartsOptions.tooltipFormatter\r\n if (tooltipFormatter === '') {\r\n tooltipFormatter = '{marker} {a} {c}'\r\n }\r\n const seriesTypes = chartsOptions.seriesTypes\r\n for (let i = 0; i < len; i++) {\r\n const seriesType = seriesTypes[i]\r\n const { tooltipFormatter: _tooltipFormatter } = seriesType || {}\r\n const { marker, seriesName, name, value, data } = params[i] || {}\r\n if (i === 0) {\r\n formatter += `${name}<br/>`\r\n }\r\n formatter += useVariablesInText(\r\n // 如果系列有提示框组件就使用自定义,没有就用默认的\r\n _tooltipFormatter || tooltipFormatter,\r\n {\r\n textData: {\r\n marker,\r\n name,\r\n value,\r\n seriesName,\r\n a: seriesName,\r\n b: name,\r\n c: value,\r\n ...data\r\n }\r\n },\r\n {\r\n useNewline: true,\r\n useSpace: true\r\n }\r\n )\r\n formatter += '<br/>'\r\n }\r\n return formatter\r\n },\r\n textStyle: {\r\n color: chartsOptions.tooltipTextStyleColor || '#333',\r\n fontSize: fontSize\r\n },\r\n backgroundColor: chartsOptions.tooltipBackgroundColor || '#fff',\r\n borderColor: chartsOptions.tooltipBorderColor || '#eee'\r\n },\r\n xAxis: {\r\n name: chartsOptions.xAxisName,\r\n minInterval: chartsOptions.xAxisMinInterval,\r\n type: 'category',\r\n data: unref(xAxisData),\r\n splitLine: {\r\n show: chartsOptions.xAxisSplitLineShow,\r\n lineStyle: {\r\n color: chartsOptions.xAxisSplitLineStyleColor\r\n }\r\n },\r\n axisLabel: {\r\n color: chartsOptions.xAxisLabelColor,\r\n interval: chartsOptions.xAxisLabelInterval || 0,\r\n rotate: chartsOptions.xAxisLabelRotate,\r\n width: chartsOptions.xAxisLabelWidth,\r\n overflow: chartsOptions.xAxisLabelOverflow\r\n },\r\n axisLine: {\r\n lineStyle: {\r\n color: chartsOptions.xAxisLineStyleColor\r\n }\r\n },\r\n axisTick: {\r\n show: chartsOptions.xAxisTickShow\r\n }\r\n },\r\n yAxis: unref(yAxis),\r\n series: unref(series)\r\n }\r\n}\r\n\r\nconst getCommonTransformProps = (chartsOptions) => {\r\n return {\r\n title: {\r\n text: chartsOptions.titleText,\r\n subtext: chartsOptions.titleSubtext,\r\n textStyle: {\r\n fontSize: chartsOptions.titleFontSize,\r\n fontWeight: chartsOptions.fontWeight,\r\n color: chartsOptions.titleColor\r\n },\r\n left: chartsOptions.textAlign || 'center'\r\n },\r\n grid: {\r\n top: chartsOptions.gridTop,\r\n bottom: chartsOptions.gridBottom,\r\n left: chartsOptions.gridLeft,\r\n right: chartsOptions.gridRight,\r\n containLabel: chartsOptions.gridContainLabel\r\n },\r\n color: chartsOptions.colors\r\n }\r\n}\r\n\r\nconst transformProps = (chartsOptions, chartData, fontSize = 12) => {\r\n return {\r\n ...getCommonTransformProps(chartsOptions),\r\n ...getTransformProps(chartsOptions, chartData, fontSize)\r\n }\r\n}\r\nexport default transformProps\r\n","// 指标库相关内容\r\nimport indicators from './indicator'\r\n// 通用函数\r\nimport runCode from './utils/runCode'\r\n// 工作台专用\r\nimport useTransformChartDataByAttrKey from './hooks/useTransformChartDataByAttrKey'\r\nimport useTransformChartDataByAttrValue from './hooks/useTransformChartDataByAttrValue'\r\nimport useValueFormatter from './hooks/useValueFormatter'\r\nimport useVariablesInText from './hooks/useVariablesInText'\r\nimport transformProps from './utils/transformProps'\r\nimport { getIndicatorParams } from './utils/util'\r\n\r\nexport default {\r\n ...indicators,\r\n runCode,\r\n useTransformChartDataByAttrKey,\r\n useTransformChartDataByAttrValue,\r\n useValueFormatter,\r\n useVariablesInText,\r\n transformProps,\r\n getIndicatorParams\r\n}"],"names":["runCode","code","data","useFn","__spreadValues","dayjs","paramsStr","params","key","runFn","result","e","useVariablesInText","formatter","textData","codeData","useNewline","useSpace","variables","i","variable","statement","reg","textVariables","j","textVariable","usedVariable","res","str","lowerCaseIncludes","v1","v2","len","s","hasOwn","v","k","getConditions","conditions","item","getFormatStep","format","value","formatStep","handleFormatter","getLegendFormat","lineBreakCount","_a","lineBreakStr","text","formatQfw","str1","str2","index","getIndicatorParams","_0","__async","graphicConfig","request","INDICATOR_URL","PAGE_ID","dataSourceId","leftAxisList","rightAxisList","queryColumnList","indicators","unref","otherList","idMap","indexCode","parentId","promiseList","id","resolve","reject","success","a","b","c","err","MODEL_KEY_LIST","modelValue","excludeAttr","getGlobalModel","getCalcWays","props","around","unit","pageMode","componentList","sTime","eTime","component","interval","intervalUnit","startTime","endTime","operate","useCurrentTime","type","mode","model","diffValue","handleParams","calcWays","dateCalcTypes","activeKey","componentId","vals","fieldVal","handleConditions","list","cloneDeep","isSameLevel","cs","joinParams","conKey","handleIndicator","indicator","classification","sortData","getCpntSortData","label","name","location","show","indexCodeNum","calcType","builtInFormula","builtInValueSource","builtInCalcWay","formula","aggregate","distinct","dimByCount","dataTo","conditionData","componentField","setFieldValue","itemObj","__spreadProps","handleSqlConditions","controlList","classificationList","rowHeaderList","dimensionList","seriesList","handleControlList","conditionList","ol","l","cItem","sqlConditions","control","keyName","prop","dateFormat","modelKey","dataType","customValue","sqlCondition","getConditionItem","conditionLabel","conditionKey","conditionValueType","rule","notGlobal","typeGuid","alias","ruleValue","attr","handleVariableList","variableList","handleVarList","variableItem","operateValue","operateMode","operateType","rKey","record","propKey","recordValue","RECORD","customFormat","dateValue","propValue","knList","_time","step","handleSort","sort","customOrderColumns","labels","columnNames","orders","sortCpnts","customSort","order","otherParams","globalModel","isGroupTable","isPivotTable","source","dataViewId","plugin","layer","chartType","formFields","variableConditions","idxLibMode","preview","edvDataSetId","gParams","ruleVaule","globalList","notGlobalList","classifications","typeGuidString","customGroup","truncations","truncation","num","_b","series","indicatorList","leftAxis","rightAxis","indicatorsData","_d","_c","queryColumns","_f","_e","queryColumn","field","rowHeaders","resultRowHeaderList","_g","pivotColumnHeader","pivotColumnData","resultList","calc","filter","sorts","aggregateMethod","rowDimensionKeys","colDimensionKeys","fl","_h","flParams","__objRest","target","_i","fieldType","columnData","sortParams","_j","_k","q","resultParams","_l","cascadeControl","someParams","classParams","fieldValue","useTransformChartDataByAttrKey","dataFieldNames","types","set","map","dataLen","typesLen","vs","n","x","m","dimensions","dataset","useTransformChartDataByAttrValue","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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"}