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);
}