diff --git a/packages/core/client/src/block-provider/KanbanBlockProvider.tsx b/packages/core/client/src/block-provider/KanbanBlockProvider.tsx index deb5de24bb..bd609eca7a 100644 --- a/packages/core/client/src/block-provider/KanbanBlockProvider.tsx +++ b/packages/core/client/src/block-provider/KanbanBlockProvider.tsx @@ -14,8 +14,8 @@ export const KanbanBlockContext = createContext({}); const useGroupField = (props) => { const { getCollectionField } = useCollectionManager(); const { groupField, collection } = props; - if (typeof groupField === 'string') { - return getCollectionField(`${collection}.${groupField}`); + if (typeof groupField === 'object') { + return getCollectionField(`${collection}.${groupField[0]}`); } if (groupField?.name) { return getCollectionField(groupField?.name); @@ -120,7 +120,13 @@ export const KanbanBlockProvider = (props) => { } return ( - + ); }; diff --git a/packages/core/client/src/board/Column.tsx b/packages/core/client/src/board/Column.tsx index ef5e6fbb47..fdc0df16b5 100644 --- a/packages/core/client/src/board/Column.tsx +++ b/packages/core/client/src/board/Column.tsx @@ -39,7 +39,7 @@ function Column({ allowAddCard, cardAdderPosition = 'top', }) { - const { fixedBlock, groupField, field } = useKanbanBlockContext(); + const { fixedBlock, groupField, associateCollectionField } = useKanbanBlockContext(); const { name } = useCollection(); const [headerHeight, setHeaderHeight] = useState(0); const [cardData, setCardData] = useState(children.cards); @@ -55,7 +55,7 @@ function Column({ if (children.value !== '__unknown__') { const filter = isAssociationField ? { - $and: [{ [groupField.name]: { id: { $eq: children.value } } }], + $and: [{ [groupField.name]: { [associateCollectionField[1]]: { $eq: children.value } } }], } : { $and: [{ [groupField.name]: { $eq: children.value } }], diff --git a/packages/core/client/src/schema-initializer/components/KanbanOptions.tsx b/packages/core/client/src/schema-initializer/components/KanbanOptions.tsx index 35da0e620c..2e8bf2e434 100644 --- a/packages/core/client/src/schema-initializer/components/KanbanOptions.tsx +++ b/packages/core/client/src/schema-initializer/components/KanbanOptions.tsx @@ -3,17 +3,20 @@ import { observer } from '@formily/react'; import React, { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { SchemaComponent } from '../../'; +import { useAPIClient } from '../../api-client'; export const KanbanOptions = observer((props) => { - const { groupField, collectionFields } = props; + const { groupField, collectionFields, getAssociateResource } = props; const [dataSource, setDataSource] = useState([]); const { t } = useTranslation(); + console.log(getAssociateResource); useEffect(() => { if (groupField) { const field = collectionFields.find((v) => { return v.name === groupField[0]; }); + console.log(field); if (['select', 'radioGroup'].includes(field.interface)) { const data = field.uiSchema.enum.map((v) => { return { @@ -21,6 +24,20 @@ export const KanbanOptions = observer((props) => { }; }); setDataSource(data); + } else { + const resource = getAssociateResource(field.target); + resource.list({ paginate: false }).then(({ data }) => { + const optionsData = data?.data.map((v) => { + return { + ...v, + value: v[groupField[1]], + label: v[groupField[1]], + }; + }); + setDataSource(optionsData); + }); + console.log(collectionFields); + console.log(groupField); } } }, [groupField]); diff --git a/packages/core/client/src/schema-initializer/items/KanbanBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/KanbanBlockInitializer.tsx index 82a136327e..b1e5bf3cc9 100644 --- a/packages/core/client/src/schema-initializer/items/KanbanBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/KanbanBlockInitializer.tsx @@ -16,6 +16,9 @@ export const KanbanBlockInitializer = (props) => { const { getCollectionFields, getCollectionFieldsOptions } = useCollectionManager(); const options: any = useContext(SchemaOptionsContext); const api = useAPIClient(); + const getAssociateResource = (collectionName) => { + return api.resource(collectionName); + }; return ( { const values = await FormDialog(t('Create kanban block'), () => { return ( @@ -59,7 +62,7 @@ export const KanbanBlockInitializer = (props) => { dependencies: ['groupField'], fulfill: { schema: { - 'x-component-props': '{{{collectionFields,...$form.values}}}', //任意层次属性都支持表达式 + 'x-component-props': '{{{getAssociateResource,collectionFields,...$form.values}}}', }, }, }, @@ -73,7 +76,7 @@ export const KanbanBlockInitializer = (props) => { }).open({ initialValues: {}, }); - const groupField=values.groupField?.[0]; + const groupField = values.groupField?.[0]; const sortName = `${groupField}_sort`; const exists = collectionFields?.find((field) => field.name === sortName); if (!exists) { @@ -88,9 +91,9 @@ export const KanbanBlockInitializer = (props) => { } insert( createKanbanBlockSchema({ - groupField: groupField, + groupField: values.groupField, collection: item.name, - columns:values.options, + columns: values.options, params: { sort: [sortName], paginate: false,