diff --git a/packages/core/client/src/schema-component/antd/form-item/FormItem.tsx b/packages/core/client/src/schema-component/antd/form-item/FormItem.tsx index bd6c9690f..696b567ec 100644 --- a/packages/core/client/src/schema-component/antd/form-item/FormItem.tsx +++ b/packages/core/client/src/schema-component/antd/form-item/FormItem.tsx @@ -204,7 +204,7 @@ FormItem.Designer = (props) => { }} /> )} - {validateSchema && ( + {form && !form?.readPretty && validateSchema && ( { }} /> )} - {form && !form?.readPretty && collectionField?.interface !== 'o2m' && ( + {form && !form?.readPretty && collectionField?.interface !== 'o2m' && fieldSchema?.['x-component-props']?.['pattern-disable'] != true && ( { const field = useField(); const fieldSchema = useFieldSchema(); const fields = useFormItemInitializerFields({ readPretty: true, block: 'Kanban' }); + const associationFields = useAssociatedFormItemInitializerFields({readPretty: true, block: 'Kanban'}); + + const items: any = [{ + type: 'itemGroup', + title: t('Display fields'), + children: fields, + }]; + if (associationFields.length > 0) { + items.push({ + type: 'divider', + }, { + type: 'itemGroup', + title: t('Display association fields'), + children: associationFields, + }) + } + if (!designable) { return null; } @@ -87,21 +104,7 @@ export const KanbanCardDesigner = (props: any) => { dn.loadAPIClientEvents(); dn.insertBeforeEnd(schema); }} - items={[ - { - type: 'itemGroup', - title: t('Display fields'), - children: fields, - }, - { - type: 'divider', - }, - { - type: 'itemGroup', - title: t('Display association fields'), - children: useAssociatedFormItemInitializerFields({readPretty: true, block: 'Kanban'}), - }, - ]} + items={items} component={} /> diff --git a/packages/core/client/src/schema-initializer/buttons/FormItemInitializers.tsx b/packages/core/client/src/schema-initializer/buttons/FormItemInitializers.tsx index 7de8564a8..2c2b6f195 100644 --- a/packages/core/client/src/schema-initializer/buttons/FormItemInitializers.tsx +++ b/packages/core/client/src/schema-initializer/buttons/FormItemInitializers.tsx @@ -1,23 +1,33 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; import { SchemaInitializer } from '../SchemaInitializer'; -import { gridRowColWrap, useFormItemInitializerFields } from '../utils'; +import { gridRowColWrap, useAssociatedFormItemInitializerFields, useFormItemInitializerFields } from '../utils'; +import { union } from 'lodash'; // 表单里配置字段 export const FormItemInitializers = (props: any) => { const { t } = useTranslation(); const { insertPosition, component } = props; + const associationFields = useAssociatedFormItemInitializerFields({readPretty: true, block: 'Form'}); + return ( 0 ? [{ + type: 'divider', + }, { + type: 'itemGroup', + title: t('Display association fields'), + children: associationFields, + }] : [], + [{ type: 'divider', }, { @@ -35,7 +45,7 @@ export const FormItemInitializers = (props: any) => { }, }, }, - ]} + ])} insertPosition={insertPosition} component={component} title={component ? null : t('Configure fields')} diff --git a/packages/core/client/src/schema-initializer/buttons/ReadPrettyFormItemInitializers.tsx b/packages/core/client/src/schema-initializer/buttons/ReadPrettyFormItemInitializers.tsx index 7e13fedf2..278ad53a2 100644 --- a/packages/core/client/src/schema-initializer/buttons/ReadPrettyFormItemInitializers.tsx +++ b/packages/core/client/src/schema-initializer/buttons/ReadPrettyFormItemInitializers.tsx @@ -1,22 +1,32 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; import { SchemaInitializer } from '../SchemaInitializer'; -import { gridRowColWrap, useFormItemInitializerFields } from '../utils'; +import { gridRowColWrap, useAssociatedFormItemInitializerFields, useFormItemInitializerFields } from '../utils'; +import { union } from 'lodash'; export const ReadPrettyFormItemInitializers = (props: any) => { const { t } = useTranslation(); const { insertPosition, component } = props; + const associationFields = useAssociatedFormItemInitializerFields({readPretty: true, block: 'Form'}); + return ( 0 ? [{ + type: 'divider', + }, { + type: 'itemGroup', + title: t('Display association fields'), + children: associationFields, + }] : [], + [{ type: 'divider', }, { @@ -34,7 +44,7 @@ export const ReadPrettyFormItemInitializers = (props: any) => { }, }, }, - ]} + ])} insertPosition={insertPosition} component={component} title={component ? null : t('Configure fields')} diff --git a/packages/core/client/src/schema-initializer/utils.ts b/packages/core/client/src/schema-initializer/utils.ts index af634a892..666f56455 100644 --- a/packages/core/client/src/schema-initializer/utils.ts +++ b/packages/core/client/src/schema-initializer/utils.ts @@ -193,10 +193,11 @@ export const useAssociatedFormItemInitializerFields = (options?: any) => { const { getInterface, getCollectionFields } = useCollectionManager(); const form = useForm(); const { readPretty = form.readPretty, block = 'Form' } = options || {}; + const interfaces = block === 'Form' ? ['m2o'] : ['o2o', 'oho', 'obo', 'm2o'] const groups = fields ?.filter((field) => { - return ['o2o', 'oho', 'obo', 'm2o'].includes(field.interface); + return interfaces.includes(field.interface); }) ?.map((field) => { const subFields = getCollectionFields(field.target); @@ -210,7 +211,9 @@ export const useAssociatedFormItemInitializerFields = (options?: any) => { // title: subField?.uiSchema?.title || subField.name, 'x-designer': 'FormItem.Designer', 'x-component': 'CollectionField', + 'x-read-pretty': readPretty, 'x-component-props': { + 'pattern-disable': block === 'Form' && readPretty, }, 'x-decorator': 'FormItem', 'x-collection-field': `${name}.${field.name}.${subField.name}`,