From 19cbcd1e9404bebba2ac66765b53e44ed4f1a25d Mon Sep 17 00:00:00 2001 From: chenos Date: Fri, 23 Jul 2021 12:34:15 +0800 Subject: [PATCH] updates... --- nodemon.json | 2 +- packages/app/src/pages/index.tsx | 67 ++++++-- .../src/components/admin-layout/datatable.tsx | 2 +- .../src/components/admin-layout/index.tsx | 2 +- .../src/components/schema-renderer/index.tsx | 3 +- packages/client/src/schemas/add-new/index.tsx | 107 ++++++------- .../client/src/schemas/array-table/index.tsx | 63 ++++++++ .../src/schemas/database-field/index.tsx | 44 ++++-- .../database-field/interfaces/attachment.ts | 28 ++++ .../database-field/interfaces/checkbox.ts | 28 ++++ .../interfaces/checkboxGroup.ts | 30 ++++ .../database-field/interfaces/chinaRegion.ts | 31 ++++ .../database-field/interfaces/createdAt.ts | 31 ++++ .../database-field/interfaces/createdBy.ts | 32 ++++ .../database-field/interfaces/datetime.ts | 29 ++++ .../database-field/interfaces/email.ts | 29 ++++ .../schemas/database-field/interfaces/icon.ts | 24 +++ .../database-field/interfaces/index.ts | 30 ++-- .../database-field/interfaces/linkTo.ts | 29 ++++ .../database-field/interfaces/markdown.ts | 27 ++++ .../interfaces/multipleSelect.ts | 31 ++++ .../database-field/interfaces/number.ts | 28 ++++ .../database-field/interfaces/password.ts | 28 ++++ .../database-field/interfaces/percent.ts | 28 ++++ .../database-field/interfaces/phone.ts | 29 ++++ .../interfaces/properties/index.ts | 147 ++++++++++++++++++ .../database-field/interfaces/radioGroup.ts | 29 ++++ .../database-field/interfaces/select.ts | 131 +--------------- .../database-field/interfaces/string.ts | 37 +---- .../database-field/interfaces/subTable.ts | 39 +---- .../database-field/interfaces/textarea.ts | 39 +---- .../schemas/database-field/interfaces/time.ts | 28 ++++ .../database-field/interfaces/types.ts | 24 +++ .../database-field/interfaces/updatedAt.ts | 31 ++++ .../database-field/interfaces/updatedBy.ts | 32 ++++ .../client/src/schemas/menu/defaultSchemas.ts | 1 + packages/client/src/schemas/menu/index.tsx | 24 ++- packages/client/src/schemas/table/index.tsx | 7 +- .../plugin-ui-schema/src/actions/index.ts | 10 +- .../src/collections/ui_schemas.ts | 5 + .../plugin-ui-schema/src/models/ui-schema.ts | 3 + 41 files changed, 1031 insertions(+), 338 deletions(-) create mode 100644 packages/client/src/schemas/array-table/index.tsx create mode 100644 packages/client/src/schemas/database-field/interfaces/attachment.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/checkbox.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/checkboxGroup.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/chinaRegion.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/createdAt.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/createdBy.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/datetime.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/email.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/icon.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/linkTo.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/markdown.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/multipleSelect.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/number.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/password.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/percent.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/phone.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/properties/index.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/radioGroup.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/time.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/types.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/updatedAt.ts create mode 100644 packages/client/src/schemas/database-field/interfaces/updatedBy.ts diff --git a/nodemon.json b/nodemon.json index 51695bfc20..8652250f21 100644 --- a/nodemon.json +++ b/nodemon.json @@ -1,6 +1,6 @@ { "watch": ["packages/", ".env"], - "ignore": ["packages/app"], + "ignore": ["packages/app", "packages/client"], "ext": "ts", "exec": "ts-node -r dotenv/config ./packages/api/src/index.ts" } \ No newline at end of file diff --git a/packages/app/src/pages/index.tsx b/packages/app/src/pages/index.tsx index 71da229f09..4cbe7d211a 100644 --- a/packages/app/src/pages/index.tsx +++ b/packages/app/src/pages/index.tsx @@ -1,21 +1,60 @@ -import React, { useEffect } from 'react'; +import 'antd/dist/antd.css' +import { useRequest } from 'ahooks'; import { Spin } from 'antd'; +import React, { useMemo } from 'react'; import { - RouteSwitch, - useGlobalAction, - loadBlocks, - loadTemplates, - templates, + MemoryRouter as Router, +} from 'react-router-dom'; +import { + createRouteSwitch, + AdminLayout, + AuthLayout, + RouteSchemaRenderer, } from '@nocobase/client'; +import { UseRequestProvider } from 'ahooks'; +import { extend } from 'umi-request'; -loadBlocks(); -loadTemplates(); +const request = extend({ + prefix: 'http://localhost:23003/api/', + timeout: 1000, +}); + +// console.log = () => {} + +const RouteSwitch = createRouteSwitch({ + components: { + AdminLayout, + AuthLayout, + RouteSchemaRenderer, + }, +}); + +const App = () => { + const { data, loading } = useRequest('routes:getAccessible', { + formatResult: (result) => result?.data, + }); + + if (loading) { + return + } + + return ( +
+ {/* */} + + {/* */} +
+ ); +}; export default function IndexPage() { - const { data, loading } = useGlobalAction('routes:getAccessible'); - console.log({ data }); - if (loading) { - return ; - } - return ; + return ( + request(service), + }} + > + + + ); } diff --git a/packages/client/src/components/admin-layout/datatable.tsx b/packages/client/src/components/admin-layout/datatable.tsx index feaa9ded20..e04eddf516 100644 --- a/packages/client/src/components/admin-layout/datatable.tsx +++ b/packages/client/src/components/admin-layout/datatable.tsx @@ -1,4 +1,4 @@ -import { SchemaRenderer } from '@nocobase/client/lib'; +import { SchemaRenderer } from '../../'; import React from 'react'; export default () => { diff --git a/packages/client/src/components/admin-layout/index.tsx b/packages/client/src/components/admin-layout/index.tsx index 6931420550..c320081b13 100644 --- a/packages/client/src/components/admin-layout/index.tsx +++ b/packages/client/src/components/admin-layout/index.tsx @@ -92,7 +92,7 @@ function LayoutWithMenu({ schema }) { theme={'light'} width={200} > - + {activeKey && } diff --git a/packages/client/src/components/schema-renderer/index.tsx b/packages/client/src/components/schema-renderer/index.tsx index 4c95a686a1..a036bc7f95 100644 --- a/packages/client/src/components/schema-renderer/index.tsx +++ b/packages/client/src/components/schema-renderer/index.tsx @@ -19,9 +19,10 @@ import { useMemo } from 'react'; import { CodeOutlined } from '@ant-design/icons'; import Editor from '@monaco-editor/react'; -import { ArrayCollapse, ArrayTable, FormLayout, FormItem as FormilyFormItem } from '@formily/antd'; +import { ArrayCollapse, FormLayout, FormItem as FormilyFormItem } from '@formily/antd'; import { Space, Card, Modal, Spin } from 'antd'; +import { ArrayTable } from '../../schemas/array-table'; import { Action } from '../../schemas/action'; import { AddNew } from '../../schemas/add-new'; import { Cascader } from '../../schemas/cascader'; diff --git a/packages/client/src/schemas/add-new/index.tsx b/packages/client/src/schemas/add-new/index.tsx index 7f463ec1cb..9416ee1d34 100644 --- a/packages/client/src/schemas/add-new/index.tsx +++ b/packages/client/src/schemas/add-new/index.tsx @@ -727,58 +727,61 @@ AddNew.FormItem = observer((props: any) => { - {options.map((option) => ( - - {option.children.map((item) => ( - { - setVisible(false); - const values = await FormDialog(`新增字段`, () => { - return ( - - - - ); - }).open({ - initialValues: { - ...item.default, - key: uid(), - name: `f_${uid()}`, - }, - }); - await createCollectionField(resource.name, values); - await refresh(); - let data: ISchema = cloneDeep(values.uiSchema); - data['name'] = values.name; - data['referenceKey'] = data['key']; - data['key'] = uid(); - if (isGridBlock(schema)) { - path.pop(); - path.pop(); - data = generateGridBlock(data); - } else if (isGrid(schema)) { - data = generateGridBlock(data); - } - if (data) { - let s; - if (isGrid(schema)) { - s = appendChild(data, [...path]); - } else if (defaultAction === 'insertAfter') { - s = insertAfter(data, [...path]); - } else { - s = insertBefore(data, [...path]); - } - await createSchema(s); - } - }} - > - {item.title} - - ))} - - ))} + {options.map( + (option) => + option.children.length > 0 && ( + + {option.children.map((item) => ( + { + setVisible(false); + const values = await FormDialog(`新增字段`, () => { + return ( + + + + ); + }).open({ + initialValues: { + ...item.default, + key: uid(), + name: `f_${uid()}`, + }, + }); + await createCollectionField(resource.name, values); + await refresh(); + let data: ISchema = cloneDeep(values.uiSchema); + data['name'] = values.name; + data['referenceKey'] = data['key']; + data['key'] = uid(); + if (isGridBlock(schema)) { + path.pop(); + path.pop(); + data = generateGridBlock(data); + } else if (isGrid(schema)) { + data = generateGridBlock(data); + } + if (data) { + let s; + if (isGrid(schema)) { + s = appendChild(data, [...path]); + } else if (defaultAction === 'insertAfter') { + s = insertAfter(data, [...path]); + } else { + s = insertBefore(data, [...path]); + } + await createSchema(s); + } + }} + > + {item.title} + + ))} + + ), + )} {/* */} { + if (isValid(defaultValue)) return defaultValue; + if (Array.isArray(schema?.items)) + return getDefaultValue(defaultValue, schema.items[0]); + if (schema?.items?.type === 'array') return []; + if (schema?.items?.type === 'boolean') return true; + if (schema?.items?.type === 'date') return ''; + if (schema?.items?.type === 'datetime') return ''; + if (schema?.items?.type === 'number') return 0; + if (schema?.items?.type === 'object') return {}; + if (schema?.items?.type === 'string') return ''; + return null; +}; + +ArrayTable.Addition = (props: any) => { + const { randomValue } = props; + const self = useField(); + const array = Table.useArray(); + const prefixCls = usePrefixCls('formily-array-base'); + if (!array) return null; + if (array.field?.pattern !== 'editable') return null; + return ( + + ); +}; + +export default ArrayTable; diff --git a/packages/client/src/schemas/database-field/index.tsx b/packages/client/src/schemas/database-field/index.tsx index 72636f0419..67aa9524cb 100644 --- a/packages/client/src/schemas/database-field/index.tsx +++ b/packages/client/src/schemas/database-field/index.tsx @@ -39,7 +39,11 @@ import Modal from 'antd/lib/modal/Modal'; import { clone, cloneDeep, get } from 'lodash'; import { useEffect } from 'react'; import { useRequest } from 'ahooks'; -import { createOrUpdateCollection, deleteCollection, useCollectionContext } from '..'; +import { + createOrUpdateCollection, + deleteCollection, + useCollectionContext, +} from '..'; export const DatabaseCollection = observer((props) => { const field = useField(); @@ -84,6 +88,10 @@ export const DatabaseCollection = observer((props) => {