@platox/pivot-table 0.0.64 → 0.0.66
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.
- package/es/dashboard-workbench/components/add-module-modal/add-statistics-modal/custome-data.js +4 -0
- package/es/dashboard-workbench/components/add-module-modal/add-statistics-modal/custome-data.js.map +1 -1
- package/es/dashboard-workbench/components/module-content/chart-module/index.js.map +1 -1
- package/es/dashboard-workbench/utils/index.js +4 -0
- package/es/dashboard-workbench/utils/index.js.map +1 -1
- package/package.json +2 -2
- package/umd/pivot-table.umd.cjs +41 -41
package/es/dashboard-workbench/components/add-module-modal/add-statistics-modal/custome-data.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custome-data.js","sources":["../../../../../packages/dashboard-workbench/components/add-module-modal/add-statistics-modal/custome-data.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useEffect, useRef, useState } from 'react'\nimport { Button, Divider, Form, Select, Space } from 'antd'\nimport { useTranslation } from 'react-i18next'\nimport { ConditionListItem } from '@platox/pivot-table/components/add-module-modal/components/condition-modal/interface'\nimport { useAppContext } from '../../../context'\nimport { EnumDataApi, FieldItem } from '../../../types'\nimport { ModuleData } from '../../module-content'\nimport ConditionModal from '../components/condition-modal'\n\nexport type StatisticsCustomeDataTypes = {\n conditionData?: {\n conditionList: ConditionListItem[]\n conditionType: 'all' | 'any'\n }\n dataSourceId?: string\n statisticalMethod?: string\n statisticalType?: 'sum' | 'max' | 'min' | 'avg'\n field: string\n}\n\ninterface CustomDataProps {\n selectModuleData?: ModuleData\n onAllValuesChange?: ((values: any) => void) | undefined\n enumDataApi?: EnumDataApi\n}\nconst CustomData: React.FC<CustomDataProps> = ({\n selectModuleData,\n onAllValuesChange,\n enumDataApi,\n}) => {\n const { globalData } = useAppContext()\n const { t } = useTranslation()\n\n /* ============================== split =============================== */\n const [fieldOptions, setFieldOptions] = useState<FieldItem[]>()\n const [numberFieldOptions, setNumberFieldOptions] = useState<FieldItem[]>()\n\n const getFieldOptions = (name?: string) => {\n const list = globalData?.sourceData?.find(item => item.value === name)?.fields\n setFieldOptions(list)\n setNumberFieldOptions(list?.filter(item => item.type === 'int' || item.type === 'float'))\n }\n\n /* ============================== split =============================== */\n const [form] = Form.useForm()\n\n const initialValues = {\n dataSourceId: '',\n statisticalMethod: 'recordTotal',\n field: '',\n }\n\n const allValuesChange = () => {\n setTimeout(() => {\n onAllValuesChange?.({\n ...form.getFieldsValue(),\n conditionData: conditionDataRef.current,\n })\n })\n }\n /* ============================== split =============================== */\n\n const [isModalOpen, setIsModalOpen] = useState(false)\n const conditionDataRef = useRef()\n const [conditionData, setConditionData] = useState<any>({\n conditionList: [],\n conditionType: 'all',\n })\n const [conditionDataNum, setConditionDataNum] = useState(0)\n\n const setCondition = (val: any) => {\n setConditionData(val)\n conditionDataRef.current = val\n setConditionDataNum(val?.conditionList?.length || 0)\n }\n /* ============================== split =============================== */\n\n useEffect(() => {\n if (selectModuleData?.customData) {\n const customData = selectModuleData.customData\n form.setFieldsValue(customData)\n getFieldOptions(customData?.dataSourceId)\n } else {\n const currSourceData = globalData?.sourceData?.[0]\n form.setFieldsValue({\n ...initialValues,\n dataSourceId: currSourceData?.value,\n })\n getFieldOptions(currSourceData?.value)\n allValuesChange()\n }\n setCondition(selectModuleData?.customData?.conditionData)\n }, [selectModuleData, globalData])\n\n return (\n <>\n <Form form={form} name=\"customData\" layout=\"vertical\" initialValues={initialValues}>\n <Form.Item<StatisticsCustomeDataTypes> label={t('dataSource')} name=\"dataSourceId\">\n <Select\n options={globalData?.sourceData}\n onChange={val => {\n form.setFieldsValue({\n statisticalMethod: 'recordTotal',\n })\n getFieldOptions(val)\n allValuesChange()\n }}\n />\n </Form.Item>\n\n <Form.Item<StatisticsCustomeDataTypes> label={t('dataRange')}>\n <Button\n style={{ marginLeft: '-15px' }}\n onClick={() => {\n setIsModalOpen(true)\n }}\n type=\"link\"\n >\n {t('filterData')}\n </Button>\n {conditionDataNum > 0 ? `${t('selectNcondition', { n: conditionDataNum })}` : null}\n </Form.Item>\n\n <Divider style={{ borderColor: '#e2e2e2', marginTop: 0 }} />\n\n <Form.Item<StatisticsCustomeDataTypes>\n label={t('statisticstMethods')}\n name=\"statisticalMethod\"\n >\n <Select\n onChange={val => {\n form.setFieldsValue({\n field: val === 'fieldValue' ? numberFieldOptions?.[0].value : '',\n statisticalType: 'sum',\n })\n allValuesChange()\n }}\n options={[\n { value: 'recordTotal', label: t('statisticstRecordNum') },\n { value: 'fieldValue', label: t('statisticstFieldVal') },\n ]}\n />\n </Form.Item>\n\n <Form.Item<StatisticsCustomeDataTypes> dependencies={['statisticalMethod']}>\n {({ getFieldValue }) =>\n getFieldValue('statisticalMethod') === 'fieldValue' ? (\n <Form.Item label={t('selectField')}>\n <Space.Compact>\n <Form.Item noStyle name=\"field\">\n <Select\n style={{ width: '100px' }}\n onChange={() => {\n allValuesChange()\n }}\n options={numberFieldOptions}\n />\n </Form.Item>\n <Form.Item name=\"statisticalType\" noStyle>\n <Select\n style={{ width: '100px' }}\n onChange={() => {\n allValuesChange()\n }}\n options={[\n {\n value: 'sum',\n label: t('sumVal'),\n },\n {\n value: 'max',\n label: t('maxVal'),\n },\n {\n value: 'min',\n label: t('minVal'),\n },\n {\n value: 'avg',\n label: t('averageVal'),\n },\n ]}\n />\n </Form.Item>\n </Space.Compact>\n </Form.Item>\n ) : null\n }\n </Form.Item>\n </Form>\n\n <ConditionModal\n open={isModalOpen}\n value={conditionData}\n fieldOptions={fieldOptions}\n enumDataApi={enumDataApi}\n onClose={() => {\n setIsModalOpen(false)\n }}\n onOk={val => {\n setCondition(val)\n allValuesChange()\n }}\n />\n </>\n )\n}\nexport default CustomData\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"custome-data.js","sources":["../../../../../packages/dashboard-workbench/components/add-module-modal/add-statistics-modal/custome-data.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useEffect, useRef, useState } from 'react'\nimport { Button, Divider, Form, Select, Space } from 'antd'\nimport { useTranslation } from 'react-i18next'\nimport { ConditionListItem } from '@platox/pivot-table/components/add-module-modal/components/condition-modal/interface'\nimport { useAppContext } from '../../../context'\nimport { EnumDataApi, FieldItem } from '../../../types'\nimport { ModuleData } from '../../module-content'\nimport ConditionModal from '../components/condition-modal'\n\nexport type StatisticsCustomeDataTypes = {\n conditionData?: {\n conditionList: ConditionListItem[]\n conditionType: 'all' | 'any'\n }\n dataSourceId?: string\n statisticalMethod?: string\n statisticalType?: 'sum' | 'max' | 'min' | 'avg'\n field: string\n}\n\ninterface CustomDataProps {\n selectModuleData?: ModuleData\n onAllValuesChange?: ((values: any) => void) | undefined\n enumDataApi?: EnumDataApi\n}\nconst CustomData: React.FC<CustomDataProps> = ({\n selectModuleData,\n onAllValuesChange,\n enumDataApi,\n}) => {\n const { globalData } = useAppContext()\n const { t } = useTranslation()\n\n /* ============================== split =============================== */\n const [fieldOptions, setFieldOptions] = useState<FieldItem[]>()\n const [numberFieldOptions, setNumberFieldOptions] = useState<FieldItem[]>()\n\n const getFieldOptions = (name?: string) => {\n const list = globalData?.sourceData?.find(item => item.value === name)?.fields\n setFieldOptions(list)\n setNumberFieldOptions(list?.filter(item => item.type === 'int' || item.type === 'float'))\n }\n\n /* ============================== split =============================== */\n const [form] = Form.useForm()\n\n const initialValues = {\n dataSourceId: '',\n statisticalMethod: 'recordTotal',\n field: '',\n }\n\n const allValuesChange = () => {\n setTimeout(() => {\n onAllValuesChange?.({\n ...form.getFieldsValue(),\n conditionData: conditionDataRef.current,\n })\n })\n }\n /* ============================== split =============================== */\n\n const [isModalOpen, setIsModalOpen] = useState(false)\n const conditionDataRef = useRef()\n const [conditionData, setConditionData] = useState<any>({\n conditionList: [],\n conditionType: 'all',\n })\n const [conditionDataNum, setConditionDataNum] = useState(0)\n\n const setCondition = (val: any) => {\n setConditionData(val)\n conditionDataRef.current = val\n setConditionDataNum(val?.conditionList?.length || 0)\n }\n /* ============================== split =============================== */\n\n useEffect(() => {\n if (selectModuleData?.customData) {\n const customData = selectModuleData.customData\n form.setFieldsValue(customData)\n getFieldOptions(customData?.dataSourceId)\n } else {\n const currSourceData = globalData?.sourceData?.[0]\n form.setFieldsValue({\n ...initialValues,\n dataSourceId: currSourceData?.value,\n })\n getFieldOptions(currSourceData?.value)\n allValuesChange()\n }\n setCondition(selectModuleData?.customData?.conditionData)\n }, [selectModuleData, globalData])\n\n return (\n <>\n <Form form={form} name=\"customData\" layout=\"vertical\" initialValues={initialValues}>\n <Form.Item<StatisticsCustomeDataTypes> label={t('dataSource')} name=\"dataSourceId\">\n <Select\n options={globalData?.sourceData}\n onChange={val => {\n form.setFieldsValue({\n statisticalMethod: 'recordTotal',\n })\n getFieldOptions(val)\n allValuesChange()\n setCondition({\n conditionList: [],\n conditionType: 'all',\n })\n }}\n />\n </Form.Item>\n\n <Form.Item<StatisticsCustomeDataTypes> label={t('dataRange')}>\n <Button\n style={{ marginLeft: '-15px' }}\n onClick={() => {\n setIsModalOpen(true)\n }}\n type=\"link\"\n >\n {t('filterData')}\n </Button>\n {conditionDataNum > 0 ? `${t('selectNcondition', { n: conditionDataNum })}` : null}\n </Form.Item>\n\n <Divider style={{ borderColor: '#e2e2e2', marginTop: 0 }} />\n\n <Form.Item<StatisticsCustomeDataTypes>\n label={t('statisticstMethods')}\n name=\"statisticalMethod\"\n >\n <Select\n onChange={val => {\n form.setFieldsValue({\n field: val === 'fieldValue' ? numberFieldOptions?.[0].value : '',\n statisticalType: 'sum',\n })\n allValuesChange()\n }}\n options={[\n { value: 'recordTotal', label: t('statisticstRecordNum') },\n { value: 'fieldValue', label: t('statisticstFieldVal') },\n ]}\n />\n </Form.Item>\n\n <Form.Item<StatisticsCustomeDataTypes> dependencies={['statisticalMethod']}>\n {({ getFieldValue }) =>\n getFieldValue('statisticalMethod') === 'fieldValue' ? (\n <Form.Item label={t('selectField')}>\n <Space.Compact>\n <Form.Item noStyle name=\"field\">\n <Select\n style={{ width: '100px' }}\n onChange={() => {\n allValuesChange()\n }}\n options={numberFieldOptions}\n />\n </Form.Item>\n <Form.Item name=\"statisticalType\" noStyle>\n <Select\n style={{ width: '100px' }}\n onChange={() => {\n allValuesChange()\n }}\n options={[\n {\n value: 'sum',\n label: t('sumVal'),\n },\n {\n value: 'max',\n label: t('maxVal'),\n },\n {\n value: 'min',\n label: t('minVal'),\n },\n {\n value: 'avg',\n label: t('averageVal'),\n },\n ]}\n />\n </Form.Item>\n </Space.Compact>\n </Form.Item>\n ) : null\n }\n </Form.Item>\n </Form>\n\n <ConditionModal\n open={isModalOpen}\n value={conditionData}\n fieldOptions={fieldOptions}\n enumDataApi={enumDataApi}\n onClose={() => {\n setIsModalOpen(false)\n }}\n onOk={val => {\n setCondition(val)\n allValuesChange()\n }}\n />\n </>\n )\n}\nexport default CustomData\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../packages/dashboard-workbench/components/module-content/chart-module/index.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { message, Spin } from 'antd'\nimport { useDebounceEffect, useMemoizedFn, useSize } from 'ahooks'\nimport { EChartsOption, LabelFormatterCallback } from 'echarts'\nimport { t } from 'i18next'\nimport { groupBy, isNumber } from 'lodash-es'\nimport {\n ChartCustomDataType,\n ChartCustomeStylesTypes,\n TimeGroupInterval,\n} from '@platox/pivot-table/components/add-module-modal/add-chart-modal/interface'\nimport { useAppContext } from '../../../context'\nimport { FieldItem, ModuleDataApi } from '../../../types'\nimport { getTransformValue } from '../../../utils'\nimport { ChartType } from '../../add-module-modal/add-chart-modal/interface'\nimport { ConditionBlock } from '../../add-module-modal/components/condition-modal/interface'\nimport { mapConditionsToPostgrest } from '../utils'\nimport BaseChart from './base-chart'\nimport Empty from './Empty'\nimport { getChartConfig, getGrid, getSerie } from './utils'\n\ninterface ChartModuleProps {\n customData?: ChartCustomDataType\n customeStyle?: ChartCustomeStylesTypes\n onChange?: (val: unknown) => void\n moduleDataApi?: ModuleDataApi\n width?: number\n height?: number\n}\n\nconst ChartModule: React.FC<ChartModuleProps> = ({\n moduleDataApi,\n customData,\n customeStyle,\n width = 2,\n height = 2,\n}) => {\n const { globalData, globalFilterCondition } = useAppContext()\n\n /* ============================== split =============================== */\n let matchGlobalFilterCondition = useMemo(() => {\n let matchGlobalFilterCondition = globalFilterCondition?.find(\n item => item?.dataSourceId === customData?.dataSourceId\n )\n return matchGlobalFilterCondition\n }, [globalFilterCondition, customData?.dataSourceId])\n\n const [chartData, setChartData] = useState<any>()\n const [loading, setloading] = useState<any>()\n\n const fetchChartData = useMemoizedFn(async () => {\n setChartData([])\n if (customData) {\n // 调用方法\n setloading(true)\n let queryString = ''\n const newXAxisField = customData?.xAxis === 'tags' ? 'tag' : customData?.xAxis\n const newGroupField = customData?.groupField === 'tags' ? 'tag' : customData?.groupField\n\n if (!customData.isGroup) {\n if (customData.yAxis === 'recordTotal') {\n queryString += `select=${newXAxisField},id.count()`\n }\n\n if (customData.yAxis === 'fieldValue' && customData?.yAxisField) {\n queryString += `select=${newXAxisField},${customData?.yAxisField}.${customData?.yAxisFieldType}()`\n }\n } else {\n if (customData.yAxis === 'recordTotal') {\n queryString += `select=${newXAxisField},${newGroupField},id.count()`\n }\n if (customData.yAxis === 'fieldValue' && customData?.yAxisField) {\n queryString += `select=${newXAxisField},${newGroupField},${customData?.yAxisField}.${customData?.yAxisFieldType}()`\n }\n }\n\n // 筛选\n let conditionBlockList = []\n if ((matchGlobalFilterCondition?.conditionList?.length ?? 0) > 0) {\n conditionBlockList.push(matchGlobalFilterCondition)\n }\n if ((customData?.conditionData?.conditionList?.length ?? 0) > 0) {\n conditionBlockList.push(customData?.conditionData)\n }\n if (conditionBlockList.length > 0) {\n let DSLStr = mapConditionsToPostgrest(conditionBlockList as ConditionBlock[])\n queryString += !!DSLStr ? `&${DSLStr}` : ''\n }\n\n if (customData?.dataSourceId) {\n moduleDataApi?.({\n id: customData?.dataSourceId,\n query: queryString,\n })\n .then((res: any) => {\n if (!res.success) {\n message.error(res.message)\n return\n }\n\n setChartData(res.data)\n })\n .finally(() => {\n setloading(false)\n })\n }\n } else {\n setChartData([])\n }\n })\n\n useDebounceEffect(\n () => {\n if (customData) {\n fetchChartData()\n }\n },\n [\n customData?.dataSourceId,\n customData?.conditionData,\n customData?.sortField,\n customData?.sortOrder,\n customData?.xAxis,\n customData?.yAxis,\n customData?.yAxisField,\n customData?.yAxisFieldType,\n customData?.isGroup,\n customData?.groupField,\n matchGlobalFilterCondition,\n ],\n { wait: 60 }\n )\n\n /* ============================== split =============================== */\n const fieldOptions = useMemo(() => {\n let ret = globalData?.sourceData?.find(item => item.value === customData?.dataSourceId)?.fields\n return ret\n }, [globalData, customData?.dataSourceId])\n\n const chartOptions = useMemo(() => {\n if (customData && chartData && customData.type && chartData.length > 0) {\n const getChartOptions = (_chartData: any) => {\n const getFieldVal = ({\n item,\n field,\n timeGroupInterval,\n }: {\n item: any\n field: any\n timeGroupInterval?: TimeGroupInterval\n }) => {\n return getTransformValue({\n fieldOptions,\n val: item[field],\n field: field,\n fieldMap: globalData?.fieldMap,\n timeGroupInterval,\n })\n }\n const getFieldLabel = (field: string) => {\n const fieldData = fieldOptions?.find(item => item.value === field)\n return fieldData?.label\n }\n\n const isTimeField = (fieldName: string) => {\n return fieldOptions?.find(item => item.value === fieldName)?.type === 'timestamp'\n }\n\n const mapping = {\n tags: 'tag', //后端数据名不一致\n }\n const newXAxisField =\n mapping[customData?.xAxis as keyof typeof mapping] ?? customData?.xAxis\n const newGroupField =\n mapping[customData?.groupField as keyof typeof mapping] ?? customData?.groupField\n\n //规避bug: 前端操作合并了id不同 name相同的数据 这边吧所有数据都按照name 合并下 让看上去是对比\n let groupData = groupBy(_chartData, item => {\n const category = getFieldVal({\n item: item,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n return category\n })\n let chartData = Object.keys(groupData).map(key => {\n let groupList = groupData[key]\n let mergeObj = groupList.reduce((acc, item) => {\n Object.keys(item).forEach(k => {\n let value = item[k]\n if (isNumber(value)) {\n acc[k] = acc?.[k] ? acc[k] + value : value\n } else {\n acc[k] = value\n }\n })\n return acc\n }, {})\n return mergeObj\n })\n\n const categories = new Set<string>() //x轴数据\n const stackCategories = new Set<string>() //分组类别\n const valueGroups: Record<string, Record<string, number>> = {} // 分组下的y轴数据\n const valueCounts: Record<string, number> = {} //没有分组下的y轴数据\n\n chartData.forEach((item: any) => {\n const category = getFieldVal({\n item: item,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n\n const val =\n customData.yAxis === 'recordTotal' ? item?.count : item[customData?.yAxisFieldType] || 0\n\n const key = category ?? t('unknown')\n valueCounts[key] = val\n\n if (customData?.isGroup && customData?.groupField) {\n const stackCategory = getFieldVal({\n item: item,\n field: newGroupField,\n })\n\n const key = category ?? t('unknown')\n\n stackCategories.add(stackCategory)\n\n if (!valueGroups[stackCategory]) {\n valueGroups[stackCategory] = {}\n }\n valueGroups[stackCategory][key] = val\n }\n })\n\n // 计算百分比\n const valuePercentages: Record<string, number> = {} //没有分组下的y轴数据百分比\n const valueGroupPercentages: Record<string, Record<string, number>> = {} //分组下的y轴数据百分比\n if (customData?.isGroup && customData?.groupField) {\n const totalPerCategory: Record<string, number> = {}\n\n Object.keys(valueGroups).forEach(stackCategory => {\n Object.entries(valueGroups[stackCategory]).forEach(([key, val]) => {\n totalPerCategory[key] = (totalPerCategory[key] || 0) + val\n })\n })\n\n Object.keys(valueGroups).forEach(stackCategory => {\n valueGroupPercentages[stackCategory] = {}\n Object.entries(valueGroups[stackCategory]).forEach(([key, val]) => {\n const total = totalPerCategory[key] || 1 // 防止除以 0\n valueGroupPercentages[stackCategory][key] = (val / total) * 100\n })\n })\n } else {\n Object.entries(valueCounts).forEach(([key, val]) => {\n const total = val || 1 // 防止除以 0\n valuePercentages[key] = (val / total) * 100\n })\n }\n\n // 排序\n let sortField = customData?.sortField ?? 'xAxis'\n let sortOrder = customData?.sortOrder ?? 'asc'\n\n const sortedChartData = [...chartData].sort((a, b) => {\n let valA, valB\n\n switch (sortField) {\n case 'xAxis':\n valA = getFieldVal({\n item: a,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n valB = getFieldVal({\n item: b,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n break\n\n case 'yAxisField':\n valA =\n customData.yAxis === 'recordTotal' ? a?.count : a[customData?.yAxisFieldType] || 0\n valB =\n customData.yAxis === 'recordTotal' ? b?.count : b[customData?.yAxisFieldType] || 0\n break\n case 'recordValue':\n default:\n break\n }\n\n const orderMultiplier = sortOrder === 'asc' ? 1 : -1\n if (valA > valB) return 1 * orderMultiplier\n if (valA < valB) return -1 * orderMultiplier\n return 0\n })\n\n const sortedCategories = sortedChartData.map(item =>\n getFieldVal({\n item,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n )\n categories.clear()\n sortedCategories.forEach(cat => categories.add(cat))\n\n // display range 实现\n if (\n !isTimeField(customData?.xAxis) &&\n customData.displayRange !== 'ALL' &&\n !!customData.displayRange //兼容旧版本 没有displayRange\n ) {\n // 按照个数排序 1>0\n let sortedByCountCategories = Array.from(categories).sort((a, b) => {\n return valueCounts[b] - valueCounts[a]\n })\n\n // 提取符合条件的categories\n let ableCategories: string[] = []\n let [pos, count] = customData.displayRange.split('_')\n if (pos === 'TOP') {\n ableCategories = sortedByCountCategories.slice(0, Number(count))\n } else {\n ableCategories = sortedByCountCategories.slice(-Number(count))\n }\n\n // 从 categories 过滤掉不符合条件的数据 保留categories的排序\n Array.from(categories).forEach(item => {\n if (!ableCategories.includes(item)) {\n categories.delete(item)\n }\n return item\n })\n }\n\n // 标签\n const formatter: LabelFormatterCallback = data => {\n if (customData?.isGroup && customData?.groupField) {\n return data?.value == 0 ? '' : `${data?.value}`\n } else {\n return `${data?.value}`\n }\n }\n const label = {\n show: customData?.chartOptions?.includes('label'),\n position: 'top',\n formatter,\n }\n const labels = Array.from(categories) //x轴label\n const stackLabels = Array.from(stackCategories) //分组数据\n\n // series\n const series = []\n const chartConfig = getChartConfig({\n type: customData?.type as ChartType,\n categories: labels,\n }) as any\n\n const formatValue = v => {\n if (isNumber(v)) {\n return Math.floor(v * 100) / 100\n } else {\n return v\n }\n }\n\n if (customData?.isGroup && customData?.groupField) {\n stackLabels.forEach(stackCategory => {\n const data = ['chart-bar-percentage', 'chart-strip-bar-percentage'].includes(\n customData.type\n )\n ? labels.map(label => formatValue(valueGroupPercentages[stackCategory][label] || 0))\n : labels.map(label => formatValue(valueGroups[stackCategory][label] || 0))\n // 组合图\n let type = customData.type\n let yAxisPos = 'left'\n if (type == ChartType['chartCombination']) {\n let matchCombinationChartConfig = (customData?.groupFieldConfig ?? []).find(\n item =>\n getFieldVal({\n item: {\n [newGroupField]: item?.value,\n },\n field: newGroupField,\n }) == stackCategory\n )\n type = matchCombinationChartConfig?.config?.chartType ?? ChartType['ChartBar']\n yAxisPos = matchCombinationChartConfig?.config?.yAxisPos ?? 'left'\n }\n\n let seriesItem = getSerie({\n type: type,\n data,\n label,\n name: stackCategory,\n isGroup: customData?.isGroup,\n groupField: customData?.groupField,\n labels,\n })\n\n seriesItem.yAxisIndex = yAxisPos == 'left' ? 0 : 1\n series.push(seriesItem)\n })\n } else {\n const data = ['chart-bar-percentage', 'chart-strip-bar-percentage'].includes(\n customData.type\n )\n ? labels.map(label => formatValue(valuePercentages[label]?.toFixed(2) || 0)) // 使用百分比数据\n : labels.map(label => formatValue(valueCounts[label] || 0))\n\n //组合图\n let type = customData.type\n let yAxisPos = 'left'\n if (type == ChartType['chartCombination']) {\n type = customData?.yAxisFieldConfig?.chartType ?? ChartType['ChartBar']\n } else {\n yAxisPos = customData?.yAxisFieldConfig?.yAxisPos ?? 'left'\n }\n\n let seriesItem = getSerie({\n type: customData.type,\n data,\n label,\n name:\n customData.yAxis === 'recordTotal'\n ? t('pb.statisticsText')\n : getFieldLabel(customData?.yAxisField),\n isGroup: customData?.isGroup,\n groupField: customData?.groupField,\n labels,\n })\n\n seriesItem.yAxisIndex = yAxisPos == 'left' ? 0 : 1\n series.push(seriesItem)\n }\n\n // misc\n const grids = getGrid({ series, chartConfig, width, customeStyle })\n const isShowLegend = customData?.chartOptions?.includes('legend')\n\n let isLeftYAxisShow = series.some(item => item?.yAxisIndex == 0)\n let isRightYAxisShow = series.some(item => item?.yAxisIndex == 1)\n let yAxisConfig = {\n ...chartConfig.yAxis,\n axisTick: {\n show: customData?.chartOptions?.includes('axis'),\n },\n axisLine: {\n show: customData?.chartOptions?.includes('axis'),\n },\n axisLabel: {\n show: customData?.chartOptions?.includes('label'),\n formatter: (value: string) => {\n return value.length > 15 ? `${value.slice(0, 15)}...` : value // 截断并添加 \"...\"\n },\n hideOverlap: true,\n ...chartConfig.yAxis?.axisLabel,\n },\n splitLine: {\n show: customData?.chartOptions?.includes('splitLine'), // 不显示x轴网格线\n },\n }\n\n const options: EChartsOption = {\n legend: {\n type: 'scroll',\n left: 'center',\n right: 'center',\n top: '0',\n show: isShowLegend,\n itemWidth: 12,\n itemHeight: 12,\n data: series?.map((item: any) => item?.name || '') || [],\n },\n grid: {\n top: grids.top,\n left: grids.left,\n right: grids.right,\n bottom: grids.bottom,\n },\n graphic: {\n elements: [\n {\n type: 'text',\n left: 'center',\n bottom: '10px',\n style: {\n text: customeStyle?.xtitle || '',\n fill: '#333', // 文本颜色\n fontSize: 12,\n fontWeight: 'bold',\n },\n },\n {\n type: 'text',\n left: '10px',\n top: 'center',\n style: {\n text: customeStyle?.ytitle || '',\n fill: '#333', // 文本颜色\n fontSize: 12,\n fontWeight: 'bold',\n },\n rotation: Math.PI / 2,\n },\n ],\n },\n xAxis: {\n ...chartConfig.xAxis,\n axisTick: {\n show: customData?.chartOptions?.includes('axis'),\n },\n axisLine: {\n show: customData?.chartOptions?.includes('axis'),\n },\n axisLabel: {\n show: customData?.chartOptions?.includes('label'),\n rotate: grids.axisLabelRotate, // 使标签倾斜,调整为合适的角度\n interval: 'auto', // 自动隐藏\n formatter: (value: string) => {\n return value.length > 15 ? `${value.slice(0, 15)}...` : value // 截断并添加 \"...\"\n },\n ...(chartConfig.xAxis?.axisLabel ?? {}),\n },\n splitLine: {\n show: customData?.chartOptions?.includes('splitLine'), // 不显示x轴网格线\n },\n },\n yAxis: [\n {\n show: isLeftYAxisShow,\n ...yAxisConfig,\n },\n {\n show: isRightYAxisShow,\n ...yAxisConfig,\n },\n ],\n series: series,\n tooltip: {\n trigger: 'item', // 触发方式:鼠标悬浮在坐标轴上\n axisPointer: {\n type: 'shadow', // 阴影指示器,鼠标悬停时显示柱状图的阴影\n },\n appendTo: 'body',\n },\n }\n\n return options\n }\n\n return getChartOptions(chartData)\n } else {\n return null\n }\n }, [\n customData?.sortField,\n customData?.sortOrder,\n customData?.type,\n customData?.chartOptions,\n customData?.timeGroupInterval,\n customData?.groupFieldConfig,\n customData?.yAxisFieldConfig,\n customData?.displayRange,\n // customData,\n customeStyle,\n chartData,\n width,\n height,\n fieldOptions,\n ])\n\n /* ============================== split =============================== */\n const echartRef = useRef<any>()\n const containerRef = useRef<HTMLDivElement>(null)\n const size = useSize(containerRef)\n\n useEffect(() => {\n if (!!size) {\n echartRef?.current?.resize()\n }\n }, [size])\n\n const isLoading = loading\n const isEmpyt = !loading && !chartOptions\n const isOk = !isLoading && !!chartOptions\n return (\n <div style={{ width: '100%', height: '100%' }} ref={containerRef}>\n {isLoading && (\n <Spin\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n spinning={loading}\n />\n )}\n {isEmpyt && <Empty />}\n {isOk && <BaseChart echartRef={echartRef} options={chartOptions ?? {}} />}\n </div>\n )\n}\n\nexport default React.memo(ChartModule)\n"],"names":["matchGlobalFilterCondition","_a","chartData","key","label","_b","BaseChart"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../packages/dashboard-workbench/components/module-content/chart-module/index.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { message, Spin } from 'antd'\nimport { useDebounceEffect, useMemoizedFn, useSize } from 'ahooks'\nimport { EChartsOption, LabelFormatterCallback } from 'echarts'\nimport { t } from 'i18next'\nimport { groupBy, isNumber } from 'lodash-es'\nimport {\n ChartCustomDataType,\n ChartCustomeStylesTypes,\n TimeGroupInterval,\n} from '@platox/pivot-table/components/add-module-modal/add-chart-modal/interface'\nimport { useAppContext } from '../../../context'\nimport { FieldItem, ModuleDataApi } from '../../../types'\nimport { getTransformValue } from '../../../utils'\nimport { ChartType } from '../../add-module-modal/add-chart-modal/interface'\nimport { ConditionBlock } from '../../add-module-modal/components/condition-modal/interface'\nimport { mapConditionsToPostgrest } from '../utils'\nimport BaseChart from './base-chart'\nimport Empty from './Empty'\nimport { getChartConfig, getGrid, getSerie } from './utils'\n\ninterface ChartModuleProps {\n customData?: ChartCustomDataType\n customeStyle?: ChartCustomeStylesTypes\n onChange?: (val: unknown) => void\n moduleDataApi?: ModuleDataApi\n width?: number\n height?: number\n}\n\nconst ChartModule: React.FC<ChartModuleProps> = ({\n moduleDataApi,\n customData,\n customeStyle,\n width = 2,\n height = 2,\n}) => {\n const { globalData, globalFilterCondition } = useAppContext()\n\n /* ============================== split =============================== */\n let matchGlobalFilterCondition = useMemo(() => {\n let matchGlobalFilterCondition = globalFilterCondition?.find(\n item => item?.dataSourceId === customData?.dataSourceId\n )\n return matchGlobalFilterCondition\n }, [globalFilterCondition, customData?.dataSourceId])\n\n const [chartData, setChartData] = useState<any>()\n const [loading, setloading] = useState<any>()\n\n const fetchChartData = useMemoizedFn(async () => {\n setChartData([])\n if (customData) {\n // 调用方法\n setloading(true)\n let queryString = ''\n const newXAxisField = customData?.xAxis === 'tags' ? 'tag' : customData?.xAxis\n const newGroupField = customData?.groupField === 'tags' ? 'tag' : customData?.groupField\n\n if (!customData.isGroup) {\n if (customData.yAxis === 'recordTotal') {\n queryString += `select=${newXAxisField},id.count()`\n }\n\n if (customData.yAxis === 'fieldValue' && customData?.yAxisField) {\n queryString += `select=${newXAxisField},${customData?.yAxisField}.${customData?.yAxisFieldType}()`\n }\n } else {\n if (customData.yAxis === 'recordTotal') {\n queryString += `select=${newXAxisField},${newGroupField},id.count()`\n }\n if (customData.yAxis === 'fieldValue' && customData?.yAxisField) {\n queryString += `select=${newXAxisField},${newGroupField},${customData?.yAxisField}.${customData?.yAxisFieldType}()`\n }\n }\n\n // 筛选\n let conditionBlockList = []\n if ((matchGlobalFilterCondition?.conditionList?.length ?? 0) > 0) {\n conditionBlockList.push(matchGlobalFilterCondition)\n }\n if ((customData?.conditionData?.conditionList?.length ?? 0) > 0) {\n conditionBlockList.push(customData?.conditionData)\n }\n if (conditionBlockList.length > 0) {\n let DSLStr = mapConditionsToPostgrest(conditionBlockList as ConditionBlock[])\n queryString += !!DSLStr ? `&${DSLStr}` : ''\n }\n\n if (customData?.dataSourceId) {\n moduleDataApi?.({\n id: customData?.dataSourceId,\n query: queryString,\n })\n .then((res: any) => {\n if (!res.success) {\n message.error(res.message)\n return\n }\n\n setChartData(res.data)\n })\n .finally(() => {\n setloading(false)\n })\n }\n } else {\n setChartData([])\n }\n })\n\n useDebounceEffect(\n () => {\n if (customData) {\n fetchChartData()\n }\n },\n [\n customData?.dataSourceId,\n customData?.conditionData,\n customData?.sortField,\n customData?.sortOrder,\n customData?.xAxis,\n customData?.yAxis,\n customData?.yAxisField,\n customData?.yAxisFieldType,\n customData?.isGroup,\n customData?.groupField,\n matchGlobalFilterCondition,\n ],\n { wait: 60 }\n )\n\n /* ============================== split =============================== */\n const fieldOptions = useMemo(() => {\n let ret = globalData?.sourceData?.find(item => item.value === customData?.dataSourceId)?.fields\n return ret\n }, [globalData, customData?.dataSourceId])\n\n const chartOptions = useMemo(() => {\n if (customData && chartData && customData.type && chartData.length > 0) {\n const getChartOptions = (_chartData: any) => {\n const getFieldVal = ({\n item,\n field,\n timeGroupInterval,\n }: {\n item: any\n field: any\n timeGroupInterval?: TimeGroupInterval\n }) => {\n return getTransformValue({\n fieldOptions,\n val: item[field],\n field: field,\n fieldMap: globalData?.fieldMap,\n timeGroupInterval,\n })\n }\n const getFieldLabel = (field: string) => {\n const fieldData = fieldOptions?.find(item => item.value === field)\n return fieldData?.label\n }\n\n const isTimeField = (fieldName: string) => {\n return fieldOptions?.find(item => item.value === fieldName)?.type === 'timestamp'\n }\n\n const mapping = {\n tags: 'tag', //后端数据名不一致\n }\n const newXAxisField =\n mapping[customData?.xAxis as keyof typeof mapping] ?? customData?.xAxis\n const newGroupField =\n mapping[customData?.groupField as keyof typeof mapping] ?? customData?.groupField\n\n //规避bug: 前端操作合并了id不同 name相同的数据 这边吧所有数据都按照name 合并下 让看上去是对比\n let groupData = groupBy(_chartData, item => {\n const category = getFieldVal({\n item: item,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n return category\n })\n let chartData = Object.keys(groupData).map(key => {\n let groupList = groupData[key]\n let mergeObj = groupList.reduce((acc, item) => {\n Object.keys(item).forEach(k => {\n let value = item[k]\n if (isNumber(value)) {\n acc[k] = acc?.[k] ? acc[k] + value : value\n } else {\n acc[k] = value\n }\n })\n return acc\n }, {})\n return mergeObj\n })\n\n const categories = new Set<string>() //x轴数据\n const stackCategories = new Set<string>() //分组类别\n const valueGroups: Record<string, Record<string, number>> = {} // 分组下的y轴数据\n const valueCounts: Record<string, number> = {} //没有分组下的y轴数据\n\n chartData.forEach((item: any) => {\n const category = getFieldVal({\n item: item,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n const val =\n customData.yAxis === 'recordTotal' ? item?.count : item[customData?.yAxisFieldType] || 0\n\n const key = category ?? t('unknown')\n valueCounts[key] = val\n\n if (customData?.isGroup && customData?.groupField) {\n const stackCategory = getFieldVal({\n item: item,\n field: newGroupField,\n })\n\n const key = category ?? t('unknown')\n\n stackCategories.add(stackCategory)\n\n if (!valueGroups[stackCategory]) {\n valueGroups[stackCategory] = {}\n }\n valueGroups[stackCategory][key] = val\n }\n })\n\n // 计算百分比\n const valuePercentages: Record<string, number> = {} //没有分组下的y轴数据百分比\n const valueGroupPercentages: Record<string, Record<string, number>> = {} //分组下的y轴数据百分比\n if (customData?.isGroup && customData?.groupField) {\n const totalPerCategory: Record<string, number> = {}\n\n Object.keys(valueGroups).forEach(stackCategory => {\n Object.entries(valueGroups[stackCategory]).forEach(([key, val]) => {\n totalPerCategory[key] = (totalPerCategory[key] || 0) + val\n })\n })\n\n Object.keys(valueGroups).forEach(stackCategory => {\n valueGroupPercentages[stackCategory] = {}\n Object.entries(valueGroups[stackCategory]).forEach(([key, val]) => {\n const total = totalPerCategory[key] || 1 // 防止除以 0\n valueGroupPercentages[stackCategory][key] = (val / total) * 100\n })\n })\n } else {\n Object.entries(valueCounts).forEach(([key, val]) => {\n const total = val || 1 // 防止除以 0\n valuePercentages[key] = (val / total) * 100\n })\n }\n\n // 排序\n let sortField = customData?.sortField ?? 'xAxis'\n let sortOrder = customData?.sortOrder ?? 'asc'\n\n const sortedChartData = [...chartData].sort((a, b) => {\n let valA, valB\n\n switch (sortField) {\n case 'xAxis':\n valA = getFieldVal({\n item: a,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n valB = getFieldVal({\n item: b,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n break\n\n case 'yAxisField':\n valA =\n customData.yAxis === 'recordTotal' ? a?.count : a[customData?.yAxisFieldType] || 0\n valB =\n customData.yAxis === 'recordTotal' ? b?.count : b[customData?.yAxisFieldType] || 0\n break\n case 'recordValue':\n default:\n break\n }\n\n const orderMultiplier = sortOrder === 'asc' ? 1 : -1\n if (valA > valB) return 1 * orderMultiplier\n if (valA < valB) return -1 * orderMultiplier\n return 0\n })\n\n const sortedCategories = sortedChartData.map(item =>\n getFieldVal({\n item,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n )\n categories.clear()\n sortedCategories.forEach(cat => categories.add(cat))\n\n // display range 实现\n if (\n !isTimeField(customData?.xAxis) &&\n customData.displayRange !== 'ALL' &&\n !!customData.displayRange //兼容旧版本 没有displayRange\n ) {\n // 按照个数排序 1>0\n let sortedByCountCategories = Array.from(categories).sort((a, b) => {\n return valueCounts[b] - valueCounts[a]\n })\n\n // 提取符合条件的categories\n let ableCategories: string[] = []\n let [pos, count] = customData.displayRange.split('_')\n if (pos === 'TOP') {\n ableCategories = sortedByCountCategories.slice(0, Number(count))\n } else {\n ableCategories = sortedByCountCategories.slice(-Number(count))\n }\n\n // 从 categories 过滤掉不符合条件的数据 保留categories的排序\n Array.from(categories).forEach(item => {\n if (!ableCategories.includes(item)) {\n categories.delete(item)\n }\n return item\n })\n }\n\n // 标签\n const formatter: LabelFormatterCallback = data => {\n if (customData?.isGroup && customData?.groupField) {\n return data?.value == 0 ? '' : `${data?.value}`\n } else {\n return `${data?.value}`\n }\n }\n const label = {\n show: customData?.chartOptions?.includes('label'),\n position: 'top',\n formatter,\n }\n const labels = Array.from(categories) //x轴label\n const stackLabels = Array.from(stackCategories) //分组数据\n\n // series\n const series = []\n const chartConfig = getChartConfig({\n type: customData?.type as ChartType,\n categories: labels,\n }) as any\n\n const formatValue = v => {\n if (isNumber(v)) {\n return Math.floor(v * 100) / 100\n } else {\n return v\n }\n }\n\n if (customData?.isGroup && customData?.groupField) {\n stackLabels.forEach(stackCategory => {\n const data = ['chart-bar-percentage', 'chart-strip-bar-percentage'].includes(\n customData.type\n )\n ? labels.map(label => formatValue(valueGroupPercentages[stackCategory][label] || 0))\n : labels.map(label => formatValue(valueGroups[stackCategory][label] || 0))\n // 组合图\n let type = customData.type\n let yAxisPos = 'left'\n if (type == ChartType['chartCombination']) {\n let matchCombinationChartConfig = (customData?.groupFieldConfig ?? []).find(\n item =>\n getFieldVal({\n item: {\n [newGroupField]: item?.value,\n },\n field: newGroupField,\n }) == stackCategory\n )\n type = matchCombinationChartConfig?.config?.chartType ?? ChartType['ChartBar']\n yAxisPos = matchCombinationChartConfig?.config?.yAxisPos ?? 'left'\n }\n\n let seriesItem = getSerie({\n type: type,\n data,\n label,\n name: stackCategory,\n isGroup: customData?.isGroup,\n groupField: customData?.groupField,\n labels,\n })\n\n seriesItem.yAxisIndex = yAxisPos == 'left' ? 0 : 1\n series.push(seriesItem)\n })\n } else {\n const data = ['chart-bar-percentage', 'chart-strip-bar-percentage'].includes(\n customData.type\n )\n ? labels.map(label => formatValue(valuePercentages[label]?.toFixed(2) || 0)) // 使用百分比数据\n : labels.map(label => formatValue(valueCounts[label] || 0))\n\n //组合图\n let type = customData.type\n let yAxisPos = 'left'\n if (type == ChartType['chartCombination']) {\n type = customData?.yAxisFieldConfig?.chartType ?? ChartType['ChartBar']\n } else {\n yAxisPos = customData?.yAxisFieldConfig?.yAxisPos ?? 'left'\n }\n\n let seriesItem = getSerie({\n type: customData.type,\n data,\n label,\n name:\n customData.yAxis === 'recordTotal'\n ? t('pb.statisticsText')\n : getFieldLabel(customData?.yAxisField),\n isGroup: customData?.isGroup,\n groupField: customData?.groupField,\n labels,\n })\n\n seriesItem.yAxisIndex = yAxisPos == 'left' ? 0 : 1\n series.push(seriesItem)\n }\n\n // misc\n const grids = getGrid({ series, chartConfig, width, customeStyle })\n const isShowLegend = customData?.chartOptions?.includes('legend')\n\n let isLeftYAxisShow = series.some(item => item?.yAxisIndex == 0)\n let isRightYAxisShow = series.some(item => item?.yAxisIndex == 1)\n let yAxisConfig = {\n ...chartConfig.yAxis,\n axisTick: {\n show: customData?.chartOptions?.includes('axis'),\n },\n axisLine: {\n show: customData?.chartOptions?.includes('axis'),\n },\n axisLabel: {\n show: customData?.chartOptions?.includes('label'),\n formatter: (value: string) => {\n return value.length > 15 ? `${value.slice(0, 15)}...` : value // 截断并添加 \"...\"\n },\n hideOverlap: true,\n ...chartConfig.yAxis?.axisLabel,\n },\n splitLine: {\n show: customData?.chartOptions?.includes('splitLine'), // 不显示x轴网格线\n },\n }\n\n const options: EChartsOption = {\n legend: {\n type: 'scroll',\n left: 'center',\n right: 'center',\n top: '0',\n show: isShowLegend,\n itemWidth: 12,\n itemHeight: 12,\n data: series?.map((item: any) => item?.name || '') || [],\n },\n grid: {\n top: grids.top,\n left: grids.left,\n right: grids.right,\n bottom: grids.bottom,\n },\n graphic: {\n elements: [\n {\n type: 'text',\n left: 'center',\n bottom: '10px',\n style: {\n text: customeStyle?.xtitle || '',\n fill: '#333', // 文本颜色\n fontSize: 12,\n fontWeight: 'bold',\n },\n },\n {\n type: 'text',\n left: '10px',\n top: 'center',\n style: {\n text: customeStyle?.ytitle || '',\n fill: '#333', // 文本颜色\n fontSize: 12,\n fontWeight: 'bold',\n },\n rotation: Math.PI / 2,\n },\n ],\n },\n xAxis: {\n ...chartConfig.xAxis,\n axisTick: {\n show: customData?.chartOptions?.includes('axis'),\n },\n axisLine: {\n show: customData?.chartOptions?.includes('axis'),\n },\n axisLabel: {\n show: customData?.chartOptions?.includes('label'),\n rotate: grids.axisLabelRotate, // 使标签倾斜,调整为合适的角度\n interval: 'auto', // 自动隐藏\n formatter: (value: string) => {\n return value.length > 15 ? `${value.slice(0, 15)}...` : value // 截断并添加 \"...\"\n },\n ...(chartConfig.xAxis?.axisLabel ?? {}),\n },\n splitLine: {\n show: customData?.chartOptions?.includes('splitLine'), // 不显示x轴网格线\n },\n },\n yAxis: [\n {\n show: isLeftYAxisShow,\n ...yAxisConfig,\n },\n {\n show: isRightYAxisShow,\n ...yAxisConfig,\n },\n ],\n series: series,\n tooltip: {\n trigger: 'item', // 触发方式:鼠标悬浮在坐标轴上\n axisPointer: {\n type: 'shadow', // 阴影指示器,鼠标悬停时显示柱状图的阴影\n },\n appendTo: 'body',\n },\n }\n\n return options\n }\n\n return getChartOptions(chartData)\n } else {\n return null\n }\n }, [\n customData?.sortField,\n customData?.sortOrder,\n customData?.type,\n customData?.chartOptions,\n customData?.timeGroupInterval,\n customData?.groupFieldConfig,\n customData?.yAxisFieldConfig,\n customData?.displayRange,\n // customData,\n customeStyle,\n chartData,\n width,\n height,\n fieldOptions,\n ])\n\n /* ============================== split =============================== */\n const echartRef = useRef<any>()\n const containerRef = useRef<HTMLDivElement>(null)\n const size = useSize(containerRef)\n\n useEffect(() => {\n if (!!size) {\n echartRef?.current?.resize()\n }\n }, [size])\n\n const isLoading = loading\n const isEmpyt = !loading && !chartOptions\n const isOk = !isLoading && !!chartOptions\n return (\n <div style={{ width: '100%', height: '100%' }} ref={containerRef}>\n {isLoading && (\n <Spin\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n spinning={loading}\n />\n )}\n {isEmpyt && <Empty />}\n {isOk && <BaseChart echartRef={echartRef} options={chartOptions ?? {}} />}\n </div>\n )\n}\n\nexport default React.memo(ChartModule)\n"],"names":["matchGlobalFilterCondition","_a","chartData","key","label","_b","BaseChart"],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import dayjs from "dayjs";
|
|
2
|
+
import { isNil } from "lodash-es";
|
|
2
3
|
const getTransformValue = ({
|
|
3
4
|
val,
|
|
4
5
|
field,
|
|
@@ -40,6 +41,9 @@ const getTransformValue = ({
|
|
|
40
41
|
}
|
|
41
42
|
}
|
|
42
43
|
newVal = Array.isArray(newVal) ? newVal.join(",") : newVal;
|
|
44
|
+
if (isNil(newVal)) {
|
|
45
|
+
newVal = `Null`;
|
|
46
|
+
}
|
|
43
47
|
return newVal;
|
|
44
48
|
};
|
|
45
49
|
const findChangedItems = (newLayout, oldLayout) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../packages/dashboard-workbench/utils/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Layout } from 'react-grid-layout'\nimport dayjs from 'dayjs'\nimport { TimeGroupInterval } from '../components/add-module-modal/add-chart-modal/interface'\nimport { FieldItem } from '../types'\n\nexport const getTransformValue = ({\n val,\n field,\n fieldOptions,\n fieldMap,\n timeGroupInterval,\n}: {\n val: any\n field: any\n fieldOptions?: FieldItem[]\n fieldMap?: Record<string, string> //枚举的翻译\n timeGroupInterval?: TimeGroupInterval // 时间汇总 xAxis 是time的时候有效\n}) => {\n const fieldData = fieldOptions?.find(item => item.value === field)\n let newVal = val\n if (fieldData?.type === 'enum' && fieldData?.enum && fieldData?.enum?.length > 0) {\n const label = fieldData?.enum?.find(enumItem => enumItem.value === val)?.label\n newVal = label ? fieldMap?.[label] || label : val\n }\n if (fieldData?.type === 'timestamp') {\n let format = 'YYYY-MM-DD'\n switch (timeGroupInterval) {\n case 'day':\n format = 'YYYY-MM-DD'\n newVal = val ? dayjs(val).format(format) : ''\n break\n case 'week':\n const startDate = val ? dayjs(val).startOf('week').format('YYYY-MM-DD') : ''\n const endDate = val ? dayjs(val).endOf('week').format('YYYY-MM-DD') : ''\n newVal = val ? `${startDate}~${endDate}` : ''\n break\n case 'month':\n format = 'YYYY-MM'\n newVal = val ? dayjs(val).format(format) : ''\n break\n case 'year':\n format = 'YYYY'\n newVal = val ? dayjs(val).format(format) : ''\n break\n default:\n format = 'YYYY-MM-DD'\n newVal = val ? dayjs(val).format(format) : ''\n break\n }\n }\n\n //这玩意好像还会是数组\n newVal = Array.isArray(newVal) ? newVal.join(',') : newVal\n\n return newVal\n}\n\nexport const findChangedItems = (newLayout: Layout[], oldLayout: Layout[]) => {\n return newLayout.filter(newItem => {\n const oldItem = oldLayout.find(item => item.i === newItem.i)\n return (\n oldItem &&\n (oldItem.x !== newItem.x ||\n oldItem.y !== newItem.y ||\n oldItem.w !== newItem.w ||\n oldItem.h !== newItem.h)\n )\n })\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../packages/dashboard-workbench/utils/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Layout } from 'react-grid-layout'\nimport dayjs from 'dayjs'\nimport { isNil } from 'lodash-es'\nimport { TimeGroupInterval } from '../components/add-module-modal/add-chart-modal/interface'\nimport { FieldItem } from '../types'\n\nexport const getTransformValue = ({\n val,\n field,\n fieldOptions,\n fieldMap,\n timeGroupInterval,\n}: {\n val: any\n field: any\n fieldOptions?: FieldItem[]\n fieldMap?: Record<string, string> //枚举的翻译\n timeGroupInterval?: TimeGroupInterval // 时间汇总 xAxis 是time的时候有效\n}) => {\n const fieldData = fieldOptions?.find(item => item.value === field)\n let newVal = val\n if (fieldData?.type === 'enum' && fieldData?.enum && fieldData?.enum?.length > 0) {\n const label = fieldData?.enum?.find(enumItem => enumItem.value === val)?.label\n newVal = label ? fieldMap?.[label] || label : val\n }\n if (fieldData?.type === 'timestamp') {\n let format = 'YYYY-MM-DD'\n switch (timeGroupInterval) {\n case 'day':\n format = 'YYYY-MM-DD'\n newVal = val ? dayjs(val).format(format) : ''\n break\n case 'week':\n const startDate = val ? dayjs(val).startOf('week').format('YYYY-MM-DD') : ''\n const endDate = val ? dayjs(val).endOf('week').format('YYYY-MM-DD') : ''\n newVal = val ? `${startDate}~${endDate}` : ''\n break\n case 'month':\n format = 'YYYY-MM'\n newVal = val ? dayjs(val).format(format) : ''\n break\n case 'year':\n format = 'YYYY'\n newVal = val ? dayjs(val).format(format) : ''\n break\n default:\n format = 'YYYY-MM-DD'\n newVal = val ? dayjs(val).format(format) : ''\n break\n }\n }\n\n //这玩意好像还会是数组\n newVal = Array.isArray(newVal) ? newVal.join(',') : newVal\n\n // https://applink.larksuite.com/client/todo/detail?guid=b5c44575-b66c-4c77-85eb-514a42a18330&suite_entity_num=t106725\n if (isNil(newVal)) {\n newVal = `Null`\n }\n\n return newVal\n}\n\nexport const findChangedItems = (newLayout: Layout[], oldLayout: Layout[]) => {\n return newLayout.filter(newItem => {\n const oldItem = oldLayout.find(item => item.i === newItem.i)\n return (\n oldItem &&\n (oldItem.x !== newItem.x ||\n oldItem.y !== newItem.y ||\n oldItem.w !== newItem.w ||\n oldItem.h !== newItem.h)\n )\n })\n}\n"],"names":[],"mappings":";;AAOO,MAAM,oBAAoB,CAAC;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMM;;AACJ,QAAM,YAAY,6CAAc,KAAK,CAAQ,SAAA,KAAK,UAAU;AAC5D,MAAI,SAAS;AACT,OAAA,uCAAW,UAAS,WAAU,uCAAW,WAAQ,4CAAW,SAAX,mBAAiB,UAAS,GAAG;AAC1E,UAAA,SAAQ,kDAAW,SAAX,mBAAiB,KAAK,cAAY,SAAS,UAAU,SAArD,mBAA2D;AACzE,aAAS,SAAQ,qCAAW,WAAU,QAAQ;AAAA,EAAA;AAE5C,OAAA,uCAAW,UAAS,aAAa;AACnC,QAAI,SAAS;AACb,YAAQ,mBAAmB;AAAA,MACzB,KAAK;AACM,iBAAA;AACT,iBAAS,MAAM,MAAM,GAAG,EAAE,OAAO,MAAM,IAAI;AAC3C;AAAA,MACF,KAAK;AACG,cAAA,YAAY,MAAM,MAAM,GAAG,EAAE,QAAQ,MAAM,EAAE,OAAO,YAAY,IAAI;AACpE,cAAA,UAAU,MAAM,MAAM,GAAG,EAAE,MAAM,MAAM,EAAE,OAAO,YAAY,IAAI;AACtE,iBAAS,MAAM,GAAG,SAAS,IAAI,OAAO,KAAK;AAC3C;AAAA,MACF,KAAK;AACM,iBAAA;AACT,iBAAS,MAAM,MAAM,GAAG,EAAE,OAAO,MAAM,IAAI;AAC3C;AAAA,MACF,KAAK;AACM,iBAAA;AACT,iBAAS,MAAM,MAAM,GAAG,EAAE,OAAO,MAAM,IAAI;AAC3C;AAAA,MACF;AACW,iBAAA;AACT,iBAAS,MAAM,MAAM,GAAG,EAAE,OAAO,MAAM,IAAI;AAC3C;AAAA,IAAA;AAAA,EACJ;AAIF,WAAS,MAAM,QAAQ,MAAM,IAAI,OAAO,KAAK,GAAG,IAAI;AAGhD,MAAA,MAAM,MAAM,GAAG;AACR,aAAA;AAAA,EAAA;AAGJ,SAAA;AACT;AAEa,MAAA,mBAAmB,CAAC,WAAqB,cAAwB;AACrE,SAAA,UAAU,OAAO,CAAW,YAAA;AACjC,UAAM,UAAU,UAAU,KAAK,UAAQ,KAAK,MAAM,QAAQ,CAAC;AAC3D,WACE,YACC,QAAQ,MAAM,QAAQ,KACrB,QAAQ,MAAM,QAAQ,KACtB,QAAQ,MAAM,QAAQ,KACtB,QAAQ,MAAM,QAAQ;AAAA,EAAA,CAE3B;AACH;"}
|
package/package.json
CHANGED