mirror of
https://gitee.com/nocobase/nocobase.git
synced 2024-12-04 21:28:34 +08:00
fix: quickly create data tables and fields in the block
This commit is contained in:
parent
e41926e2b9
commit
8cfa623636
@ -25,9 +25,9 @@ export function useCollection(props: CollectionProviderProps) {
|
||||
if (collection) {
|
||||
fields = collection?.fields || [];
|
||||
}
|
||||
let sortableField = collection.sortable;
|
||||
if (collection.sortable && typeof collection.sortable === 'object') {
|
||||
sortableField = collection.sortable?.name;
|
||||
let sortableField = collection?.sortable;
|
||||
if (collection?.sortable && typeof collection?.sortable === 'object') {
|
||||
sortableField = collection?.sortable?.name;
|
||||
}
|
||||
return {
|
||||
sortableField,
|
||||
|
@ -451,6 +451,7 @@ AddNew.CardItem = observer((props: any) => {
|
||||
onClick={async (info) => {
|
||||
let data: ISchema;
|
||||
let collectionName = null;
|
||||
let isNew = false;
|
||||
if (['addNewTable', 'addNewForm'].includes(info.key)) {
|
||||
const values = await FormDialog(`新建数据表`, () => {
|
||||
return (
|
||||
@ -465,7 +466,7 @@ AddNew.CardItem = observer((props: any) => {
|
||||
},
|
||||
});
|
||||
await createOrUpdateCollection(values);
|
||||
await refresh();
|
||||
isNew = true;
|
||||
data = generateCardItemSchema(
|
||||
info.key === 'addNewTable' ? 'Table' : 'Form',
|
||||
);
|
||||
@ -507,6 +508,9 @@ AddNew.CardItem = observer((props: any) => {
|
||||
}
|
||||
await createSchema(s);
|
||||
}
|
||||
if (isNew) {
|
||||
await refresh();
|
||||
}
|
||||
}}
|
||||
>
|
||||
<Menu.ItemGroup title={'数据区块'}>
|
||||
@ -723,7 +727,6 @@ AddNew.FormItem = observer((props: any) => {
|
||||
},
|
||||
});
|
||||
await createCollectionField(collection?.name, values);
|
||||
await refresh();
|
||||
let data: ISchema = cloneDeep(values.uiSchema);
|
||||
data['name'] = values.name;
|
||||
data['referenceKey'] = data['key'];
|
||||
@ -746,6 +749,7 @@ AddNew.FormItem = observer((props: any) => {
|
||||
}
|
||||
await createSchema(s);
|
||||
}
|
||||
await refresh();
|
||||
}}
|
||||
>
|
||||
{item.title}
|
||||
@ -799,7 +803,7 @@ AddNew.FormItem = observer((props: any) => {
|
||||
{ghost ? (
|
||||
<PlusOutlined />
|
||||
) : (
|
||||
<Button type={'dashed'} icon={<PlusOutlined />}>
|
||||
<Button type={'dashed'} icon={<SettingOutlined />}>
|
||||
配置字段
|
||||
</Button>
|
||||
)}
|
||||
|
@ -8,11 +8,17 @@ import {
|
||||
useForm,
|
||||
} from '@formily/react';
|
||||
import { Pagination, Popover, Table as AntdTable } from 'antd';
|
||||
import { findIndex, forIn, range, set } from 'lodash';
|
||||
import { cloneDeep, findIndex, forIn, range, set } from 'lodash';
|
||||
import React, { Fragment, useEffect, useState } from 'react';
|
||||
import { useContext } from 'react';
|
||||
import { createContext } from 'react';
|
||||
import { useDesignable, updateSchema, removeSchema, createSchema } from '..';
|
||||
import {
|
||||
useDesignable,
|
||||
updateSchema,
|
||||
removeSchema,
|
||||
createSchema,
|
||||
createCollectionField,
|
||||
} from '..';
|
||||
import { uid } from '@formily/shared';
|
||||
import useRequest from '@ahooksjs/use-request';
|
||||
import { BaseResult } from '@ahooksjs/use-request/lib/types';
|
||||
@ -26,7 +32,7 @@ import {
|
||||
} from '@dnd-kit/sortable';
|
||||
import { CSS } from '@dnd-kit/utilities';
|
||||
import { Select, Dropdown, Menu, Switch, Button, Space } from 'antd';
|
||||
import { PlusOutlined } from '@ant-design/icons';
|
||||
import { PlusOutlined, SettingOutlined } from '@ant-design/icons';
|
||||
import './style.less';
|
||||
import {
|
||||
findPropertyByPath,
|
||||
@ -358,7 +364,7 @@ const useTableColumns = () => {
|
||||
function AddColumn() {
|
||||
const [visible, setVisible] = useState(false);
|
||||
const { appendChild, remove } = useDesignable();
|
||||
const { fields } = useCollectionContext();
|
||||
const { collection, fields, refresh } = useCollectionContext();
|
||||
const displayed = useDisplayedMapContext();
|
||||
|
||||
return (
|
||||
@ -406,7 +412,34 @@ function AddColumn() {
|
||||
<Menu.Item
|
||||
style={{ minWidth: 150 }}
|
||||
key={item.name}
|
||||
onClick={async () => {}}
|
||||
onClick={async () => {
|
||||
setVisible(false);
|
||||
const values = await FormDialog(`新增字段`, () => {
|
||||
return (
|
||||
<FormLayout layout={'vertical'}>
|
||||
<SchemaField schema={item} />
|
||||
</FormLayout>
|
||||
);
|
||||
}).open({
|
||||
initialValues: {
|
||||
interface: item.name,
|
||||
...item.default,
|
||||
key: uid(),
|
||||
name: `f_${uid()}`,
|
||||
},
|
||||
});
|
||||
await createCollectionField(collection?.name, values);
|
||||
const data = appendChild({
|
||||
type: 'void',
|
||||
'x-component': 'Table.Column',
|
||||
'x-component-props': {
|
||||
fieldName: values.name,
|
||||
},
|
||||
'x-designable-bar': 'Table.Column.DesignableBar',
|
||||
});
|
||||
await createSchema(data);
|
||||
await refresh();
|
||||
}}
|
||||
>
|
||||
{item.title}
|
||||
</Menu.Item>
|
||||
@ -417,7 +450,7 @@ function AddColumn() {
|
||||
</Menu>
|
||||
}
|
||||
>
|
||||
<Button type={'dashed'} icon={<PlusOutlined />}>
|
||||
<Button type={'dashed'} icon={<SettingOutlined />}>
|
||||
配置字段
|
||||
</Button>
|
||||
</Dropdown>
|
||||
@ -1518,7 +1551,9 @@ Table.Action.DesignableBar = () => {
|
||||
>
|
||||
<Select.Option value={'Action.Modal'}>对话框</Select.Option>
|
||||
<Select.Option value={'Action.Drawer'}>抽屉</Select.Option>
|
||||
<Select.Option value={'Action.Window'}>浏览器窗口</Select.Option>
|
||||
<Select.Option value={'Action.Window'}>
|
||||
浏览器窗口
|
||||
</Select.Option>
|
||||
</Select>{' '}
|
||||
内打开
|
||||
</Menu.Item>
|
||||
|
Loading…
Reference in New Issue
Block a user