From 826328bf590899decdc69e9213d13d573b9982eb Mon Sep 17 00:00:00 2001 From: Katherine Date: Tue, 5 Aug 2025 20:30:11 +0800 Subject: [PATCH] fix: date variable issue in default value of date field in chart filter block (#7291) * fix: date variable issue in default value of date field in chart filter block * fix: bug * fix: bug --- .../antd/date-picker/DatePicker.tsx | 14 +++++++++++++- .../src/client/hooks/filter.ts | 2 +- .../src/client/hooks/useVariableOptions.ts | 9 +++++++++ .../src/client/settings/chartFilterItem.tsx | 18 +++++++++++++++++- 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/packages/core/client/src/schema-component/antd/date-picker/DatePicker.tsx b/packages/core/client/src/schema-component/antd/date-picker/DatePicker.tsx index 56e4831ccb5..7ea01345221 100644 --- a/packages/core/client/src/schema-component/antd/date-picker/DatePicker.tsx +++ b/packages/core/client/src/schema-component/antd/date-picker/DatePicker.tsx @@ -258,6 +258,15 @@ DatePicker.RangePicker = function RangePicker(props: any) { return ; }; +function toLocalNaiveISOString(dateString: string, format): string { + if (dateString && dateString.endsWith('Z')) { + const date = dayjs(dateString); + return date.format(format); + } + return dateString; +} + +//筛选区块的日期字段总是输出无时区 DatePicker.FilterWithPicker = function FilterWithPicker(props: any) { const { picker = 'date', format, showTime, timeFormat } = props; const isMobileMedia = isMobile(); @@ -332,7 +341,10 @@ DatePicker.FilterWithPicker = function FilterWithPicker(props: any) { field.value = null; }} /> - + ); }; diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/client/hooks/filter.ts b/packages/plugins/@nocobase/plugin-data-visualization/src/client/hooks/filter.ts index 9bcfb4c46d1..6dd0772f4fa 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/client/hooks/filter.ts +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/client/hooks/filter.ts @@ -67,7 +67,7 @@ export const useChartData = () => { const chartCollections: { [dataSource: string]: string[]; } = useMemo(() => { - return Object.values(charts) + return Object.values(charts || {}) .filter((chart) => chart) .reduce((mp, chart) => { const { dataSource, collection } = chart; diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/client/hooks/useVariableOptions.ts b/packages/plugins/@nocobase/plugin-data-visualization/src/client/hooks/useVariableOptions.ts index fd487fc1a8b..1530a9b0a92 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/client/hooks/useVariableOptions.ts +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/client/hooks/useVariableOptions.ts @@ -15,6 +15,7 @@ import { useDatetimeVariable, usePopupVariable, useURLSearchParamsVariable, + useExactDateVariable, } from '@nocobase/client'; import { useMemo } from 'react'; import { useFilterVariable } from './filter'; @@ -36,6 +37,11 @@ export const useGeneralVariableOptions = ( const { settings: popupRecordSettings, shouldDisplayPopupRecord } = usePopupVariable({ schema, }); + const { exactDateTimeSettings, shouldDisplayExactDate } = useExactDateVariable({ + operator, + schema, + noDisabled: true, + }); const result = useMemo( () => @@ -46,6 +52,7 @@ export const useGeneralVariableOptions = ( datetimeSettings, urlSearchParamsSettings, shouldDisplayPopupRecord && popupRecordSettings, + shouldDisplayExactDate && exactDateTimeSettings, ].filter(Boolean), [ datetimeSettings, @@ -55,6 +62,8 @@ export const useGeneralVariableOptions = ( apiTokenSettings, shouldDisplayPopupRecord, popupRecordSettings, + shouldDisplayExactDate, + exactDateTimeSettings, ], ); diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/client/settings/chartFilterItem.tsx b/packages/plugins/@nocobase/plugin-data-visualization/src/client/settings/chartFilterItem.tsx index 5c0607042e5..c60bd868481 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/client/settings/chartFilterItem.tsx +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/client/settings/chartFilterItem.tsx @@ -7,7 +7,7 @@ * For more information, please refer to: https://www.nocobase.com/agreement. */ -import React, { useContext } from 'react'; +import React, { useContext, useMemo } from 'react'; import { EditDescription, GeneralSchemaDesigner, @@ -31,6 +31,8 @@ import { SchemaSettings, useApp, useIsFileField, + FlagProvider, + SchemaComponentContext, } from '@nocobase/client'; import { useChartsTranslation } from '../locale'; import { Schema, useField, useFieldSchema, ISchema } from '@formily/react'; @@ -256,6 +258,13 @@ const EditDefaultValue = () => { const fieldSchema = useFieldSchema(); const { getTranslatedTitle } = useChartFilter(); const title = getTranslatedTitle(fieldSchema.title); + const { getField } = useCollection_deprecated(); + const { getCollectionJoinField, getCollectionFields, getAllCollectionsInheritChain } = + useCollectionManager_deprecated(); + const collectionField = useMemo( + () => getField(fieldSchema['name']) || getCollectionJoinField(fieldSchema['x-collection-field']), + [fieldSchema, getCollectionJoinField, getField], + ); return ( { dn.refresh(); setDefaultValue(field, variables, localVariables); }} + ModalContextProvider={(props: any) => { + return ( + + {props.children} + + ); + }} /> ); };