feat: support multiple entries (#1104)

Reviewed-on: daoyoucloud/tachybase#1104
This commit is contained in:
sealday 2024-06-03 17:03:13 +08:00
parent f3100030d7
commit b01ed166be
62 changed files with 126 additions and 134 deletions

View File

@ -90,6 +90,14 @@ export class Application {
return this.pluginManager; return this.pluginManager;
} }
get adminUrl() {
if (this.name === 'main') {
return '/admin/';
} else {
return `/apps/${this.name}/admin/`;
}
}
constructor(protected options: ApplicationOptions = {}) { constructor(protected options: ApplicationOptions = {}) {
this.initRequireJs(); this.initRequireJs();
define(this, { define(this, {

View File

@ -1,10 +1,10 @@
import { Application, BuildinPlugin } from '@tachybase/client'; import { Application, BuiltInPlugin } from '@tachybase/client';
export const app = new Application({ export const app = new Application({
apiClient: { apiClient: {
baseURL: process.env.API_BASE_URL, baseURL: process.env.API_BASE_URL,
}, },
plugins: [BuildinPlugin], plugins: [BuiltInPlugin],
}); });
export default app.getRootComponent(); export default app.getRootComponent();

View File

@ -1,4 +1,5 @@
import { useContext } from 'react'; import { useContext } from 'react';
import type { Application } from '../Application'; import type { Application } from '../Application';
import { ApplicationContext } from '../context'; import { ApplicationContext } from '../context';

View File

@ -4,8 +4,8 @@ import { Spin } from 'antd';
import { useRequest } from '../../../api-client'; import { useRequest } from '../../../api-client';
import { SchemaComponent, SchemaComponentContext } from '../../../schema-component'; import { SchemaComponent, SchemaComponentContext } from '../../../schema-component';
import { MenuItemsProvider } from '../Configuration/MenuItemsProvider'; import { MenuItemsProvider } from './MenuItemsProvider';
import { PermissionProvider, SettingCenterPermissionProvider } from '../Configuration/PermisionProvider'; import { PermissionProvider, SettingCenterPermissionProvider } from './PermisionProvider';
import { roleSchema } from './schemas/roles'; import { roleSchema } from './schemas/roles';
const AvailableActionsContext = createContext([]); const AvailableActionsContext = createContext([]);

View File

@ -5,10 +5,11 @@ import { getSubAppName } from '@tachybase/sdk';
import { DisconnectOutlined, LoadingOutlined } from '@ant-design/icons'; import { DisconnectOutlined, LoadingOutlined } from '@ant-design/icons';
import { Button, Modal, Result, Spin } from 'antd'; import { Button, Modal, Result, Spin } from 'antd';
import { createStyles } from 'antd-style'; import { createStyles } from 'antd-style';
import { useTranslation } from 'react-i18next';
import { Navigate, useNavigate } from 'react-router-dom'; import { Navigate, useNavigate } from 'react-router-dom';
import { useAPIClient } from '../api-client'; import { useAPIClient } from '../api-client';
import { Application } from '../application'; import { Application, useApp } from '../application';
import { Plugin } from '../application/Plugin'; import { Plugin } from '../application/Plugin';
import { BlockSchemaComponentPlugin } from '../block-provider'; import { BlockSchemaComponentPlugin } from '../block-provider';
import { CollectionPlugin } from '../collection-manager'; import { CollectionPlugin } from '../collection-manager';
@ -248,21 +249,23 @@ const AppMaintainingDialog = observer(
export const AppNotFound = () => { export const AppNotFound = () => {
const navigate = useNavigate(); const navigate = useNavigate();
const { t } = useTranslation();
const app = useApp();
return ( return (
<Result <Result
status="404" status="404"
title="404" title="404"
subTitle="Sorry, the page you visited does not exist." subTitle={t('Sorry, the page you visited does not exist.')}
extra={ extra={
<Button onClick={() => navigate('/', { replace: true })} type="primary"> <Button onClick={() => (location.href = app.adminUrl)} type="primary">
Back Home {t('Back Home')}
</Button> </Button>
} }
/> />
); );
}; };
export class BuildinPlugin extends Plugin { export class BuiltInPlugin extends Plugin {
async afterAdd() { async afterAdd() {
this.app.addComponents({ this.app.addComponents({
AppSpin, AppSpin,

View File

@ -9,9 +9,9 @@ import { useTranslation } from 'react-i18next';
import { useNavigate, useParams } from 'react-router-dom'; import { useNavigate, useParams } from 'react-router-dom';
import { useRequest } from '../../api-client'; import { useRequest } from '../../api-client';
import { useACLRoleContext } from '../../buildin-plugin/acl';
import { i18n } from '../../i18n'; import { i18n } from '../../i18n';
import { useToken } from '../../style'; import { useToken } from '../../style';
import { useACLRoleContext } from '../acl';
import { SwitchAction } from './PluginCard'; import { SwitchAction } from './PluginCard';
import { useStyles } from './style'; import { useStyles } from './style';
import { IPluginData } from './types'; import { IPluginData } from './types';

View File

@ -2,8 +2,8 @@ import React from 'react';
import { ADMIN_SETTINGS_PATH } from '../../application'; import { ADMIN_SETTINGS_PATH } from '../../application';
import { Plugin } from '../../application/Plugin'; import { Plugin } from '../../application/Plugin';
import { SystemSettingsPane } from '../../buildin-plugin/system-settings';
import { BlockTemplatesPane } from '../../schema-templates'; import { BlockTemplatesPane } from '../../schema-templates';
import { SystemSettingsPane } from '../system-settings';
import { PluginManager } from './PluginManager'; import { PluginManager } from './PluginManager';
import { PluginManagerLink, SettingsCenterDropdown } from './PluginManagerLink'; import { PluginManagerLink, SettingsCenterDropdown } from './PluginManagerLink';
import { AdminSettingsLayout } from './PluginSetting'; import { AdminSettingsLayout } from './PluginSetting';

View File

@ -2,7 +2,7 @@ import React, { createContext, ReactNode, useContext, useMemo } from 'react';
import { UseRequestOptions, UseRequestService } from '../../api-client'; import { UseRequestOptions, UseRequestService } from '../../api-client';
import { withDynamicSchemaProps } from '../../application/hoc'; import { withDynamicSchemaProps } from '../../application/hoc';
import { ACLCollectionProvider } from '../../buildin-plugin/acl'; import { ACLCollectionProvider } from '../../built-in/acl';
import { Designable, useDesignable } from '../../schema-component'; import { Designable, useDesignable } from '../../schema-component';
import { AssociationProvider, CollectionManagerProvider, CollectionOptions, CollectionProvider } from '../collection'; import { AssociationProvider, CollectionManagerProvider, CollectionOptions, CollectionProvider } from '../collection';
import { CollectionRecord } from '../collection-record'; import { CollectionRecord } from '../collection-record';

View File

@ -33,7 +33,7 @@ export const useCollectMenuItems = () => {
*/ */
export const useMenuItem = () => { export const useMenuItem = () => {
const list = useRef<any[]>([]); const list = useRef<any[]>([]);
const renderItems = useRef<() => JSX.Element>(null); const renderItems = useRef<() => ReactNode>(null);
const shouldRerender = useRef(false); const shouldRerender = useRef(false);
const Component = useCallback(({ limitCount }: { limitCount?: number }) => { const Component = useCallback(({ limitCount }: { limitCount?: number }) => {

View File

@ -3,7 +3,7 @@ import 'antd/dist/reset.css';
import './global.less'; import './global.less';
export * from '@emotion/css'; export * from '@emotion/css';
export * from './buildin-plugin/acl'; export * from './built-in/acl';
export * from './api-client'; export * from './api-client';
export * from './appInfo'; export * from './appInfo';
export * from './application'; export * from './application';
@ -14,7 +14,7 @@ export * from './collection-manager';
export * from './common'; export * from './common';
export * from './style/css-variable'; export * from './style/css-variable';
export * from './data-source'; export * from './data-source';
export * from './buildin-plugin/document-title'; export * from './built-in/document-title';
export * from './filter-provider'; export * from './filter-provider';
export * from './flag-provider'; export * from './flag-provider';
export * from './style/theme'; export * from './style/theme';
@ -22,9 +22,9 @@ export * from './hooks';
export * from './i18n'; export * from './i18n';
export * from './icon'; export * from './icon';
export { default as locale } from './locale'; export { default as locale } from './locale';
export * from './buildin-plugin'; export * from './built-in';
export * from './buildin-plugin/pinned-list'; export * from './built-in/pinned-list';
export * from './buildin-plugin/pm'; export * from './built-in/pm';
export * from './powered-by'; export * from './powered-by';
export * from './record-provider'; export * from './record-provider';
export * from './route-switch'; export * from './route-switch';
@ -35,7 +35,7 @@ export * from './schema-settings';
export * from './schema-templates'; export * from './schema-templates';
export * from './style'; export * from './style';
export type { CustomToken } from './style/theme'; export type { CustomToken } from './style/theme';
export * from './buildin-plugin/system-settings'; export * from './built-in/system-settings';
export * from './testUtils'; export * from './testUtils';
export * from './user'; export * from './user';
export * from './variables'; export * from './variables';

View File

@ -930,5 +930,7 @@
"Designer properties": "设计属性", "Designer properties": "设计属性",
"Load": "加载", "Load": "加载",
"Dump": "存储", "Dump": "存储",
"Sorry, the page you visited does not exist.": "对不起,您访问的页面不存在。",
"Back Home": "回到主页",
"Chang on Parent": "选择父级" "Chang on Parent": "选择父级"
} }

View File

@ -10,7 +10,7 @@ import { useTranslation } from 'react-i18next';
import { StablePopover, useActionContext } from '../..'; import { StablePopover, useActionContext } from '../..';
import { useDesignable } from '../../'; import { useDesignable } from '../../';
import { withDynamicSchemaProps } from '../../../application/hoc/withDynamicSchemaProps'; import { withDynamicSchemaProps } from '../../../application/hoc/withDynamicSchemaProps';
import { useACLActionParamsContext } from '../../../buildin-plugin/acl'; import { useACLActionParamsContext } from '../../../built-in/acl';
import { Icon } from '../../../icon'; import { Icon } from '../../../icon';
import { RecordProvider, useRecord } from '../../../record-provider'; import { RecordProvider, useRecord } from '../../../record-provider';
import { useLocalVariables, useVariables } from '../../../variables'; import { useLocalVariables, useVariables } from '../../../variables';

View File

@ -5,7 +5,7 @@ import { observer, RecursionField, useField, useFieldSchema } from '@tachybase/s
import { createStyles } from 'antd-style'; import { createStyles } from 'antd-style';
import cx from 'classnames'; import cx from 'classnames';
import { ACLCollectionProvider, useACLActionParamsContext } from '../../../buildin-plugin/acl'; import { ACLCollectionProvider, useACLActionParamsContext } from '../../../built-in/acl';
import { CollectionProvider_deprecated } from '../../../collection-manager'; import { CollectionProvider_deprecated } from '../../../collection-manager';
import { useAssociationFieldContext, useInsertSchema } from './hooks'; import { useAssociationFieldContext, useInsertSchema } from './hooks';
import schema from './schema'; import schema from './schema';

View File

@ -4,7 +4,7 @@ import { observer, RecursionField, SchemaOptionsContext, useField, useFieldSchem
import { createStyles } from 'antd-style'; import { createStyles } from 'antd-style';
import { ACLCollectionProvider, useACLActionParamsContext } from '../../../buildin-plugin/acl'; import { ACLCollectionProvider, useACLActionParamsContext } from '../../../built-in/acl';
import { CollectionProvider_deprecated } from '../../../collection-manager'; import { CollectionProvider_deprecated } from '../../../collection-manager';
import { FormItem, useSchemaOptionsContext } from '../../../schema-component'; import { FormItem, useSchemaOptionsContext } from '../../../schema-component';
import Select from '../select/Select'; import Select from '../select/Select';

View File

@ -7,7 +7,7 @@ import cx from 'classnames';
import { useApp } from '../../../application'; import { useApp } from '../../../application';
import { useFormActiveFields } from '../../../block-provider/hooks/useFormActiveFields'; import { useFormActiveFields } from '../../../block-provider/hooks/useFormActiveFields';
import { ACLCollectionFieldProvider } from '../../../buildin-plugin/acl'; import { ACLCollectionFieldProvider } from '../../../built-in/acl';
import { Collection_deprecated } from '../../../collection-manager'; import { Collection_deprecated } from '../../../collection-manager';
import { CollectionFieldProvider, useContextConfigSetting } from '../../../data-source'; import { CollectionFieldProvider, useContextConfigSetting } from '../../../data-source';
import { GeneralSchemaDesigner } from '../../../schema-settings'; import { GeneralSchemaDesigner } from '../../../schema-settings';

View File

@ -11,12 +11,13 @@ import {
} from '@tachybase/schema'; } from '@tachybase/schema';
import { error } from '@tachybase/utils/client'; import { error } from '@tachybase/utils/client';
import { Menu as AntdMenu, MenuProps } from 'antd'; import { MoreOutlined } from '@ant-design/icons';
import { Menu as AntdMenu, Button, Dropdown, MenuProps } from 'antd';
import { createPortal } from 'react-dom'; import { createPortal } from 'react-dom';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { createDesignable, DndContext, SortableItem, useDesignable, useDesigner } from '../..'; import { createDesignable, DndContext, SortableItem, useDesignable, useDesigner } from '../..';
import { Icon, useAPIClient, useSchemaInitializerRender } from '../../../'; import { css, Icon, useAPIClient, useSchemaInitializerRender, useToken } from '../../../';
import { useCollectMenuItems, useMenuItem } from '../../../hooks/useMenuItem'; import { useCollectMenuItems, useMenuItem } from '../../../hooks/useMenuItem';
import { useProps } from '../../hooks/useProps'; import { useProps } from '../../hooks/useProps';
import { useMenuTranslation } from './locale'; import { useMenuTranslation } from './locale';
@ -47,10 +48,11 @@ const HeaderMenu = ({
}) => { }) => {
const { Component, getMenuItems } = useMenuItem(); const { Component, getMenuItems } = useMenuItem();
const { styles } = useStyles(); const { styles } = useStyles();
const { token } = useToken();
const items = useMemo(() => { const items = useMemo(() => {
const designerBtn = { const designerBtn = {
key: 'x-designer-button', key: 'x-designer-button',
style: { padding: '0 8px', order: 9999 }, style: { padding: '0 8px', order: -1 },
label: render({ label: render({
'data-testid': 'schema-initializer-Menu-header', 'data-testid': 'schema-initializer-Menu-header',
style: { background: 'none' }, style: { background: 'none' },
@ -66,55 +68,68 @@ const HeaderMenu = ({
} }
return result; return result;
}, [children, designable]); }, [children, designable, getMenuItems, render]);
return ( return (
<> <div style={{ display: 'flex' }}>
<Component /> <div style={{ flex: 1 }}></div>
<AntdMenu <div
{...others} className={css`
className={styles.headerMenuClass} .ant-btn {
onSelect={(info: any) => { border: 0;
const s = schema.properties?.[info.key]; height: 46px;
width: 46px;
if (!s) { border-radius: 0;
return; background: none;
} color: rgba(255, 255, 255, 0.65);
&:hover {
if (mode === 'mix') { background: none !important;
if (s['x-component'] !== 'Menu.SubMenu') {
onSelect?.(info);
} else {
const menuItemSchema = findMenuItem(s);
if (!menuItemSchema) {
return onSelect?.(info);
}
setLoading(true);
const keys = findKeysByUid(schema, menuItemSchema['x-uid']);
setDefaultSelectedKeys(keys);
setTimeout(() => {
setLoading(false);
}, 100);
onSelect?.({
key: menuItemSchema.name,
item: {
props: {
schema: menuItemSchema,
},
},
});
} }
} else {
onSelect?.(info);
} }
}} `}
mode={mode === 'mix' ? 'horizontal' : mode} >
defaultOpenKeys={defaultOpenKeys} <Dropdown
defaultSelectedKeys={defaultSelectedKeys} menu={{
selectedKeys={selectedKeys} items,
items={items} onClick(info) {
/> const s = schema.properties?.[info.key];
</> if (!s) {
return;
}
if (mode === 'mix') {
if (s['x-component'] !== 'Menu.SubMenu') {
onSelect?.(info);
} else {
const menuItemSchema = findMenuItem(s);
if (!menuItemSchema) {
return onSelect?.(info);
}
setLoading(true);
const keys = findKeysByUid(schema, menuItemSchema['x-uid']);
setDefaultSelectedKeys(keys);
setTimeout(() => {
setLoading(false);
}, 100);
onSelect?.({
key: menuItemSchema.name,
item: {
props: {
schema: menuItemSchema,
},
},
});
}
} else {
onSelect?.(info);
}
},
}}
>
<Button icon={<MoreOutlined style={{ color: token.colorTextHeaderMenu }} />} />
</Dropdown>
<Component />
</div>
</div>
); );
}; };

View File

@ -13,8 +13,8 @@ import { useSearchParams } from 'react-router-dom';
import { FormDialog } from '..'; import { FormDialog } from '..';
import { useToken } from '../__builtins__'; import { useToken } from '../__builtins__';
import { useAppSpin } from '../../../application/hooks/useAppSpin'; import { useAppSpin } from '../../../application/hooks/useAppSpin';
import { useStyles as useAClStyles } from '../../../buildin-plugin/acl/style'; import { useStyles as useAClStyles } from '../../../built-in/acl/style';
import { useDocumentTitle } from '../../../buildin-plugin/document-title'; import { useDocumentTitle } from '../../../built-in/document-title';
import { FilterBlockProvider } from '../../../filter-provider/FilterProvider'; import { FilterBlockProvider } from '../../../filter-provider/FilterProvider';
import { Icon } from '../../../icon'; import { Icon } from '../../../icon';
import { useGetAriaLabelOfSchemaInitializer } from '../../../schema-initializer/hooks/useGetAriaLabelOfSchemaInitializer'; import { useGetAriaLabelOfSchemaInitializer } from '../../../schema-initializer/hooks/useGetAriaLabelOfSchemaInitializer';

View File

@ -4,7 +4,7 @@ import { Navigate, useLocation } from 'react-router-dom';
import { ReturnTypeOfUseRequest, useRequest } from '../api-client'; import { ReturnTypeOfUseRequest, useRequest } from '../api-client';
import { useAppSpin } from '../application/hooks/useAppSpin'; import { useAppSpin } from '../application/hooks/useAppSpin';
import { useACLRoleContext } from '../buildin-plugin/acl'; import { useACLRoleContext } from '../built-in/acl';
import { useCompile } from '../schema-component'; import { useCompile } from '../schema-component';
export const CurrentUserContext = createContext<ReturnTypeOfUseRequest>(null); export const CurrentUserContext = createContext<ReturnTypeOfUseRequest>(null);

View File

@ -8,10 +8,7 @@
], ],
"main": "dist/server/index.js", "main": "dist/server/index.js",
"devDependencies": { "devDependencies": {
"@ant-design/cssinjs": "^1.11.1",
"@ant-design/icons": "~5.3.6", "@ant-design/icons": "~5.3.6",
"@ant-design/pro-layout": "^7.16.11",
"@formily/antd-v5": "1.x",
"@react-pdf/renderer": "^3.3.2", "@react-pdf/renderer": "^3.3.2",
"@tachybase/components": "workspace:*", "@tachybase/components": "workspace:*",
"@tachybase/schema": "workspace:*", "@tachybase/schema": "workspace:*",

View File

@ -9,6 +9,7 @@ import {
SchemaComponent, SchemaComponent,
useACLRoleContext, useACLRoleContext,
useAdminSchemaUid, useAdminSchemaUid,
useApp,
useDocumentTitle, useDocumentTitle,
useRequest, useRequest,
useSystemSettings, useSystemSettings,
@ -194,6 +195,7 @@ export const InternalAdminLayout = () => {
const sideMenuRef = useRef<HTMLDivElement>(); const sideMenuRef = useRef<HTMLDivElement>();
const result = useSystemSettings(); const result = useSystemSettings();
const params = useParams<{ name?: string }>(); const params = useParams<{ name?: string }>();
const app = useApp();
const { token } = useToken(); const { token } = useToken();
const pageStyle = usePageStyle(); const pageStyle = usePageStyle();
@ -255,7 +257,11 @@ export const InternalAdminLayout = () => {
padding: 0; padding: 0;
align-items: center; align-items: center;
padding: 0 12px 0 12px; padding: 0 12px 0 12px;
cursor: pointer;
`} `}
onClick={() => {
location.href = app.adminUrl;
}}
> >
<img <img
className={css` className={css`

View File

@ -1,4 +1,4 @@
import { Application, BuildinPlugin, Plugin } from '@tachybase/client'; import { Application, BuiltInPlugin, Plugin } from '@tachybase/client';
const getCurrentTimezone = () => { const getCurrentTimezone = () => {
const timezoneOffset = new Date().getTimezoneOffset() / -60; const timezoneOffset = new Date().getTimezoneOffset() / -60;
@ -22,7 +22,7 @@ export class TachyBaseClientPresetPlugin extends Plugin {
config.headers['X-Timezone'] = getCurrentTimezone(); config.headers['X-Timezone'] = getCurrentTimezone();
return config; return config;
}); });
await this.app.pm.add(BuildinPlugin); await this.app.pm.add(BuiltInPlugin);
} }
} }

View File

@ -1562,18 +1562,9 @@ importers:
specifier: workspace:* specifier: workspace:*
version: link:../../../core/utils version: link:../../../core/utils
devDependencies: devDependencies:
'@ant-design/cssinjs':
specifier: ^1.11.1
version: 1.18.2(react-dom@18.2.0)(react@18.2.0)
'@ant-design/icons': '@ant-design/icons':
specifier: ~5.3.6 specifier: ~5.3.6
version: 5.3.6(react-dom@18.2.0)(react@18.2.0) version: 5.3.6(react-dom@18.2.0)(react@18.2.0)
'@ant-design/pro-layout':
specifier: ^7.16.11
version: 7.17.16(antd@5.16.1)(react-dom@18.2.0)(react@18.2.0)
'@formily/antd-v5':
specifier: 1.x
version: 1.2.0(@types/react-dom@18.2.25)(@types/react@18.2.79)(antd@5.16.1)(react-dom@18.2.0)(react-is@18.3.1)(react@18.2.0)(typescript@4.9.5)
'@react-pdf/renderer': '@react-pdf/renderer':
specifier: ^3.3.2 specifier: ^3.3.2
version: 3.3.8(react@18.2.0) version: 3.3.8(react@18.2.0)
@ -5060,6 +5051,7 @@ packages:
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.2.0)
swr: 2.2.4(react@18.2.0) swr: 2.2.4(react@18.2.0)
warning: 4.0.3 warning: 4.0.3
dev: false
/@ant-design/pro-provider@2.13.5(antd@5.16.1)(react-dom@18.2.0)(react@18.2.0): /@ant-design/pro-provider@2.13.5(antd@5.16.1)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-ZVmzY2cq4nUvgmAlfgyCAaSZYV2l3n/upIQPXPj8sYcT+N/Pt1CeSVkkgW6By3EqokF6apWdIFU7hZMK2rNhrg==} resolution: {integrity: sha512-ZVmzY2cq4nUvgmAlfgyCAaSZYV2l3n/upIQPXPj8sYcT+N/Pt1CeSVkkgW6By3EqokF6apWdIFU7hZMK2rNhrg==}
@ -5076,6 +5068,7 @@ packages:
react: 18.2.0 react: 18.2.0
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.2.0)
swr: 2.2.4(react@18.2.0) swr: 2.2.4(react@18.2.0)
dev: false
/@ant-design/pro-utils@2.15.2(antd@5.16.1)(react-dom@18.2.0)(react@18.2.0): /@ant-design/pro-utils@2.15.2(antd@5.16.1)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-kzMT658CGrQqoihKPlZhbnRioovwMhM59vqqVXuT6A+IuyxJhs5pxN73C6sN2+ZoeYCo/Gewnfn9v1/2vHU2Zg==} resolution: {integrity: sha512-kzMT658CGrQqoihKPlZhbnRioovwMhM59vqqVXuT6A+IuyxJhs5pxN73C6sN2+ZoeYCo/Gewnfn9v1/2vHU2Zg==}
@ -5096,6 +5089,7 @@ packages:
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.2.0)
safe-stable-stringify: 2.4.3 safe-stable-stringify: 2.4.3
swr: 2.2.4(react@18.2.0) swr: 2.2.4(react@18.2.0)
dev: false
/@ant-design/react-slick@1.1.2(react@18.2.0): /@ant-design/react-slick@1.1.2(react@18.2.0):
resolution: {integrity: sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==} resolution: {integrity: sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==}
@ -8118,18 +8112,6 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@dnd-kit/sortable@7.0.2(@dnd-kit/core@6.1.0)(react@18.2.0):
resolution: {integrity: sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA==}
peerDependencies:
'@dnd-kit/core': ^6.0.7
react: '>=16.8.0'
dependencies:
'@dnd-kit/core': 6.1.0(react-dom@18.2.0)(react@18.2.0)
'@dnd-kit/utilities': 3.2.2(react@18.2.0)
react: 18.2.0
tslib: 2.6.2
dev: true
/@dnd-kit/sortable@8.0.0(@dnd-kit/core@6.1.0)(react@18.2.0): /@dnd-kit/sortable@8.0.0(@dnd-kit/core@6.1.0)(react@18.2.0):
resolution: {integrity: sha512-U3jk5ebVXe1Lr7c2wU7SBZjcWdQP+j7peHJfCspnA81enlu88Mgd7CC8Q+pub9ubP7eKVETzJW+IBAhsqbSu/g==} resolution: {integrity: sha512-U3jk5ebVXe1Lr7c2wU7SBZjcWdQP+j7peHJfCspnA81enlu88Mgd7CC8Q+pub9ubP7eKVETzJW+IBAhsqbSu/g==}
peerDependencies: peerDependencies:
@ -9393,40 +9375,6 @@ packages:
/@floating-ui/utils@0.2.1: /@floating-ui/utils@0.2.1:
resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==}
/@formily/antd-v5@1.2.0(@types/react-dom@18.2.25)(@types/react@18.2.79)(antd@5.16.1)(react-dom@18.2.0)(react-is@18.3.1)(react@18.2.0)(typescript@4.9.5):
resolution: {integrity: sha512-6K1fV7pwvy7j5KoO/5dEe5llosann7211I/bH/WJkLQtDSDK+XLFUQ4/lU7CdNpwHMrspzXS3lF82EM3hGyM8w==}
engines: {npm: '>=3.0.0'}
peerDependencies:
'@types/react': '>=16.8.0 || >=17.0.0'
'@types/react-dom': '>=16.8.0 || >=17.0.0'
antd: ^5.13.0
react: '>=16.8.0 || >=17.0.0'
react-dom: '>=16.8.0'
react-is: '>=16.8.0 || >=17.0.0'
dependencies:
'@ant-design/cssinjs': 1.20.0(react-dom@18.2.0)(react@18.2.0)
'@ant-design/icons': 5.3.6(react-dom@18.2.0)(react@18.2.0)
'@dnd-kit/core': 6.1.0(react-dom@18.2.0)(react@18.2.0)
'@dnd-kit/sortable': 7.0.2(@dnd-kit/core@6.1.0)(react@18.2.0)
'@formily/core': 2.2.27
'@formily/grid': 2.2.27(typescript@4.9.5)
'@formily/json-schema': 2.2.27(typescript@4.9.5)
'@formily/react': 2.2.27(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react-is@18.3.1)(react@18.2.0)(typescript@4.9.5)
'@formily/reactive': 2.2.27
'@formily/reactive-react': 2.2.27(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react-is@18.3.1)(react@18.2.0)
'@formily/shared': 2.2.27
'@types/react': 18.2.79
'@types/react-dom': 18.2.25
antd: 5.16.1(react-dom@18.2.0)(react@18.2.0)
classnames: 2.5.1
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
react-is: 18.3.1
react-sticky-box: 1.0.2(react@18.2.0)
transitivePeerDependencies:
- typescript
dev: true
/@formily/core@2.2.27: /@formily/core@2.2.27:
resolution: {integrity: sha512-f8e4f/WlimOA7zN1ARmiRKMlIpsIH00XxT7NWAE7EV3DO2B6sq6gSq9GDc5JLwHqhiyJBAIPzUdfmIpRLwPxyQ==} resolution: {integrity: sha512-f8e4f/WlimOA7zN1ARmiRKMlIpsIH00XxT7NWAE7EV3DO2B6sq6gSq9GDc5JLwHqhiyJBAIPzUdfmIpRLwPxyQ==}
engines: {npm: '>=3.0.0'} engines: {npm: '>=3.0.0'}
@ -9444,6 +9392,7 @@ packages:
'@formily/reactive': 2.2.27 '@formily/reactive': 2.2.27
'@juggle/resize-observer': 3.4.0 '@juggle/resize-observer': 3.4.0
typescript: 4.9.5 typescript: 4.9.5
dev: false
/@formily/json-schema@2.2.27(typescript@4.9.5): /@formily/json-schema@2.2.27(typescript@4.9.5):
resolution: {integrity: sha512-YqtpPp9bmXO28iw10ZLT5KCAqipr2SwPrzfskUJ/Oa8O3xZi64+9TMVPylX73cBe49lVaOgFiQPNAljLudeveg==} resolution: {integrity: sha512-YqtpPp9bmXO28iw10ZLT5KCAqipr2SwPrzfskUJ/Oa8O3xZi64+9TMVPylX73cBe49lVaOgFiQPNAljLudeveg==}
@ -9455,6 +9404,7 @@ packages:
'@formily/reactive': 2.2.27 '@formily/reactive': 2.2.27
'@formily/shared': 2.2.27 '@formily/shared': 2.2.27
typescript: 4.9.5 typescript: 4.9.5
dev: false
/@formily/json-schema@2.2.27(typescript@5.4.5): /@formily/json-schema@2.2.27(typescript@5.4.5):
resolution: {integrity: sha512-YqtpPp9bmXO28iw10ZLT5KCAqipr2SwPrzfskUJ/Oa8O3xZi64+9TMVPylX73cBe49lVaOgFiQPNAljLudeveg==} resolution: {integrity: sha512-YqtpPp9bmXO28iw10ZLT5KCAqipr2SwPrzfskUJ/Oa8O3xZi64+9TMVPylX73cBe49lVaOgFiQPNAljLudeveg==}
@ -9501,6 +9451,7 @@ packages:
react-is: 18.3.1 react-is: 18.3.1
transitivePeerDependencies: transitivePeerDependencies:
- typescript - typescript
dev: false
/@formily/reactive-react@2.2.27(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react-is@18.3.1)(react@18.2.0): /@formily/reactive-react@2.2.27(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react-is@18.3.1)(react@18.2.0):
resolution: {integrity: sha512-LJefK/9g8MorhGexMiVF+FVWyMR/Vc4C63Djrj08XeXtTF0NUNUUKVBT1eZqmtdRHJSyDE7SSgUmpxcXP7QmQQ==} resolution: {integrity: sha512-LJefK/9g8MorhGexMiVF+FVWyMR/Vc4C63Djrj08XeXtTF0NUNUUKVBT1eZqmtdRHJSyDE7SSgUmpxcXP7QmQQ==}
@ -9524,6 +9475,7 @@ packages:
react: 18.2.0 react: 18.2.0
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.2.0)
react-is: 18.3.1 react-is: 18.3.1
dev: false
/@formily/reactive@2.2.27: /@formily/reactive@2.2.27:
resolution: {integrity: sha512-ksdA4uIw3WMo0FmHcGsyqZgPwhujVgtXqxiWPSV+Tc2eEoJrInZhr15Q0IeTQ6glMh8izNsb19YK+PphBHwXGg==} resolution: {integrity: sha512-ksdA4uIw3WMo0FmHcGsyqZgPwhujVgtXqxiWPSV+Tc2eEoJrInZhr15Q0IeTQ6glMh8izNsb19YK+PphBHwXGg==}
@ -9781,6 +9733,7 @@ packages:
/@juggle/resize-observer@3.4.0: /@juggle/resize-observer@3.4.0:
resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
dev: false
/@koa/cors@3.4.3: /@koa/cors@3.4.3:
resolution: {integrity: sha512-WPXQUaAeAMVaLTEFpoq3T2O1C+FstkjJnDQqy95Ck1UdILajsRhu6mhJ8H2f4NFPRBoCNN+qywTJfq/gGki5mw==} resolution: {integrity: sha512-WPXQUaAeAMVaLTEFpoq3T2O1C+FstkjJnDQqy95Ck1UdILajsRhu6mhJ8H2f4NFPRBoCNN+qywTJfq/gGki5mw==}
@ -13598,6 +13551,7 @@ packages:
/@umijs/route-utils@4.0.1: /@umijs/route-utils@4.0.1:
resolution: {integrity: sha512-+1ixf1BTOLuH+ORb4x8vYMPeIt38n9q0fJDwhv9nSxrV46mxbLF0nmELIo9CKQB2gHfuC4+hww6xejJ6VYnBHQ==} resolution: {integrity: sha512-+1ixf1BTOLuH+ORb4x8vYMPeIt38n9q0fJDwhv9nSxrV46mxbLF0nmELIo9CKQB2gHfuC4+hww6xejJ6VYnBHQ==}
dev: false
/@umijs/server@4.1.10: /@umijs/server@4.1.10:
resolution: {integrity: sha512-BDR+4+ieSkq/+J0ZRhLo78z5aWS0CTphzRhHvSUNtrgjz7XJljizUaBLXUy7aerVwnWOoYCleGF9vUg386Jh7g==} resolution: {integrity: sha512-BDR+4+ieSkq/+J0ZRhLo78z5aWS0CTphzRhHvSUNtrgjz7XJljizUaBLXUy7aerVwnWOoYCleGF9vUg386Jh7g==}
@ -13664,6 +13618,7 @@ packages:
react: '*' react: '*'
dependencies: dependencies:
react: 18.2.0 react: 18.2.0
dev: false
/@umijs/utils@3.5.20: /@umijs/utils@3.5.20:
resolution: {integrity: sha512-Y0i27zZTCKoqdHHyTuebO/GOIY4gGLUwDFs1eoH+m4etPn+uRq0iax9KJOkelmax2K3YLsT4KbRwM1enlSsv3A==} resolution: {integrity: sha512-Y0i27zZTCKoqdHHyTuebO/GOIY4gGLUwDFs1eoH+m4etPn+uRq0iax9KJOkelmax2K3YLsT4KbRwM1enlSsv3A==}
@ -15749,6 +15704,7 @@ packages:
/client-only@0.0.1: /client-only@0.0.1:
resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
dev: false
/clipboardy@2.3.0: /clipboardy@2.3.0:
resolution: {integrity: sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==} resolution: {integrity: sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==}
@ -22755,6 +22711,7 @@ packages:
/omit.js@2.0.2: /omit.js@2.0.2:
resolution: {integrity: sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==} resolution: {integrity: sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==}
dev: false
/on-exit-leak-free@0.2.0: /on-exit-leak-free@0.2.0:
resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==}
@ -23176,6 +23133,7 @@ packages:
/path-to-regexp@2.4.0: /path-to-regexp@2.4.0:
resolution: {integrity: sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==} resolution: {integrity: sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==}
dev: false
/path-to-regexp@6.2.1: /path-to-regexp@6.2.1:
resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==}
@ -25631,6 +25589,7 @@ packages:
dependencies: dependencies:
react: 18.2.0 react: 18.2.0
resize-observer-polyfill: 1.5.1 resize-observer-polyfill: 1.5.1
dev: false
/react-to-print@2.14.15(react-dom@18.2.0)(react@18.2.0): /react-to-print@2.14.15(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-SKnwOzU2cJ8eaAkoJO7+gNhvfEDmm+Y34IdcHsjtHioUevUPhprqbVtvNJlZ2JkGJ8ExK2QNWM9pXECTDR5D8w==} resolution: {integrity: sha512-SKnwOzU2cJ8eaAkoJO7+gNhvfEDmm+Y34IdcHsjtHioUevUPhprqbVtvNJlZ2JkGJ8ExK2QNWM9pXECTDR5D8w==}
@ -27572,6 +27531,7 @@ packages:
client-only: 0.0.1 client-only: 0.0.1
react: 18.2.0 react: 18.2.0
use-sync-external-store: 1.2.0(react@18.2.0) use-sync-external-store: 1.2.0(react@18.2.0)
dev: false
/symbol-tree@3.2.4: /symbol-tree@3.2.4:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}