diff --git a/packages/core/client/src/schema-settings/LinkageRules/ValueDynamicComponent.tsx b/packages/core/client/src/schema-settings/LinkageRules/ValueDynamicComponent.tsx index 9851620cbb..5fd7647838 100644 --- a/packages/core/client/src/schema-settings/LinkageRules/ValueDynamicComponent.tsx +++ b/packages/core/client/src/schema-settings/LinkageRules/ValueDynamicComponent.tsx @@ -8,6 +8,7 @@ */ import { Input, Select } from 'antd'; +import { css } from '@emotion/css'; import React, { useCallback, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useFormBlockContext } from '../../block-provider/FormBlockProvider'; @@ -47,7 +48,7 @@ export const ValueDynamicComponent = (props: ValueDynamicComponentProps) => { blockCollectionName: collectionName, }); const constantStyle = useMemo(() => { - return { minWidth: 150, maxWidth: 430, marginLeft: 5 }; + return { minWidth: 150, maxWidth: 430 }; }, []); const handleChangeOfConstant = useCallback( (value) => { @@ -73,7 +74,7 @@ export const ValueDynamicComponent = (props: ValueDynamicComponentProps) => { [collectionName, mode, setValue], ); const textAreaStyle = useMemo(() => { - return { minWidth: 460 }; + return { minWidth: 460, borderRadius: 0 }; }, []); const compatScope = useMemo(() => { return compatOldVariables(scope, { @@ -83,7 +84,16 @@ export const ValueDynamicComponent = (props: ValueDynamicComponentProps) => { const modeMap = { // 常量 constant: ( -
+
{React.createElement(DynamicComponent, { value: fieldValue?.value, schema, @@ -140,7 +150,7 @@ export const ValueDynamicComponent = (props: ValueDynamicComponentProps) => { onChange={(value) => { setMode(value); setValue({ - mode: value, + mode: fieldValue?.mode, }); }} > @@ -150,7 +160,7 @@ export const ValueDynamicComponent = (props: ValueDynamicComponentProps) => { ))} - {modeMap[mode]} + {modeMap[fieldValue?.mode || mode]} ); }; diff --git a/packages/core/client/src/schema-settings/LinkageRules/components/LinkageHeader.tsx b/packages/core/client/src/schema-settings/LinkageRules/components/LinkageHeader.tsx index 29a9643ac1..25557b0b97 100644 --- a/packages/core/client/src/schema-settings/LinkageRules/components/LinkageHeader.tsx +++ b/packages/core/client/src/schema-settings/LinkageRules/components/LinkageHeader.tsx @@ -27,7 +27,7 @@ const LinkageRulesTitle = (props) => { const value = array?.field?.value[index]; return ( { ev.stopPropagation(); diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/client/configure/schemas/configure.ts b/packages/plugins/@nocobase/plugin-data-visualization/src/client/configure/schemas/configure.ts index eab34e309a..2be9467865 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/client/configure/schemas/configure.ts +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/client/configure/schemas/configure.ts @@ -289,6 +289,12 @@ export const querySchema: ISchema = { }, }, }, + distinct: { + type: 'boolean', + 'x-decorator': 'FormItem', + 'x-component': 'Checkbox', + 'x-content': '{{t("Distinct")}}', + }, }, { required: true, diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/locale/en-US.json b/packages/plugins/@nocobase/plugin-data-visualization/src/locale/en-US.json index 88902e283b..7a6b127771 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/locale/en-US.json +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/locale/en-US.json @@ -94,5 +94,6 @@ "Aspect ratio": "Aspect ratio", "Fixed height": "Fixed height", "Show background": "Show background", - "Show padding": "Show padding" + "Show padding": "Show padding", + "Distinct": "Distinct" } diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/locale/zh-CN.json b/packages/plugins/@nocobase/plugin-data-visualization/src/locale/zh-CN.json index c1c9d272a7..563357e91f 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/locale/zh-CN.json +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/locale/zh-CN.json @@ -95,5 +95,6 @@ "Aspect ratio": "宽高比", "Fixed height": "固定高度", "Show background": "显示背景", - "Show padding": "显示内边距" + "Show padding": "显示内边距", + "Distinct": "去重" } diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/server/actions/query.ts b/packages/plugins/@nocobase/plugin-data-visualization/src/server/actions/query.ts index bbf9eaef90..7472136648 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/server/actions/query.ts +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/server/actions/query.ts @@ -19,6 +19,7 @@ type MeasureProps = { type?: string; aggregation?: string; alias?: string; + distinct?: boolean; }; type DimensionProps = { @@ -117,7 +118,7 @@ export const parseBuilder = async (ctx: Context, next: Next) => { let hasAgg = false; measures.forEach((measure: MeasureProps & { field: string }) => { - const { field, aggregation, alias } = measure; + const { field, aggregation, alias, distinct } = measure; const attribute = []; const col = sequelize.col(field); if (aggregation) { @@ -125,7 +126,7 @@ export const parseBuilder = async (ctx: Context, next: Next) => { throw new Error(`Invalid aggregation function: ${aggregation}`); } hasAgg = true; - attribute.push(sequelize.fn(aggregation, col)); + attribute.push(sequelize.fn(aggregation, distinct ? sequelize.fn('DISTINCT', col) : col)); } else { attribute.push(col); }