feat: multi app and plugins (#1020)
Reviewed-on: daoyoucloud/tachybase#1020
This commit is contained in:
		
							parent
							
								
									b545855729
								
							
						
					
					
						commit
						4e2a4cd9fe
					
				@ -54,6 +54,7 @@
 | 
			
		||||
    "@tachybase/cli": "workspace:*",
 | 
			
		||||
    "@tachybase/preset-hera-rental": "workspace:*",
 | 
			
		||||
    "@tachybase/preset-hera-sancongtou": "workspace:*",
 | 
			
		||||
    "@tachybase/preset-mini": "workspace:*",
 | 
			
		||||
    "@tachybase/preset-tachybase": "workspace:*",
 | 
			
		||||
    "@tachybase/test": "workspace:*",
 | 
			
		||||
    "@types/react": "^18.2.79",
 | 
			
		||||
 | 
			
		||||
@ -9,6 +9,7 @@
 | 
			
		||||
    "@tachybase/database": "workspace:*",
 | 
			
		||||
    "@tachybase/preset-hera-rental": "workspace:*",
 | 
			
		||||
    "@tachybase/preset-hera-sancongtou": "workspace:*",
 | 
			
		||||
    "@tachybase/preset-mini": "workspace:*",
 | 
			
		||||
    "@tachybase/preset-tachybase": "workspace:*",
 | 
			
		||||
    "@tachybase/server": "workspace:*"
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
@ -18,6 +18,49 @@ interface IPluginInfo extends IPluginCard {
 | 
			
		||||
  onClick: () => void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const SwitchAction = (props: IPluginData) => {
 | 
			
		||||
  const { name, enabled, builtIn, error, isCompatible } = props;
 | 
			
		||||
  const api = useAPIClient();
 | 
			
		||||
  const { t } = useTranslation();
 | 
			
		||||
  const { modal } = App.useApp();
 | 
			
		||||
  return (
 | 
			
		||||
    <Switch
 | 
			
		||||
      aria-label="enable"
 | 
			
		||||
      key={'enable'}
 | 
			
		||||
      size={'small'}
 | 
			
		||||
      disabled={builtIn || error}
 | 
			
		||||
      onChange={async (checked, e) => {
 | 
			
		||||
        e.stopPropagation();
 | 
			
		||||
        if (!isCompatible && checked) {
 | 
			
		||||
          message.error(t("Dependencies check failed, can't enable."));
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
        if (!checked) {
 | 
			
		||||
          modal.confirm({
 | 
			
		||||
            title: t('Are you sure to disable this plugin?'),
 | 
			
		||||
            onOk: async () => {
 | 
			
		||||
              await api.request({
 | 
			
		||||
                url: `pm:disable`,
 | 
			
		||||
                params: {
 | 
			
		||||
                  filterByTk: name,
 | 
			
		||||
                },
 | 
			
		||||
              });
 | 
			
		||||
            },
 | 
			
		||||
          });
 | 
			
		||||
        } else {
 | 
			
		||||
          await api.request({
 | 
			
		||||
            url: `pm:enable`,
 | 
			
		||||
            params: {
 | 
			
		||||
              filterByTk: name,
 | 
			
		||||
            },
 | 
			
		||||
          });
 | 
			
		||||
        }
 | 
			
		||||
      }}
 | 
			
		||||
      checked={!!enabled}
 | 
			
		||||
    ></Switch>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function PluginInfo(props: IPluginInfo) {
 | 
			
		||||
  const { data, onClick } = props;
 | 
			
		||||
  const app = useApp();
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,8 @@
 | 
			
		||||
export * from './PluginManagerLink';
 | 
			
		||||
import type { TableProps } from 'antd';
 | 
			
		||||
import { PageHeader } from '@ant-design/pro-layout';
 | 
			
		||||
import { useDebounce } from 'ahooks';
 | 
			
		||||
import { Button, Col, Divider, Input, List, Result, Row, Space, Spin, Tabs } from 'antd';
 | 
			
		||||
import { Button, Card, Col, Divider, Input, List, Result, Row, Space, Spin, Tabs, Table, Tag } from 'antd';
 | 
			
		||||
import _ from 'lodash';
 | 
			
		||||
import React, { useEffect, useMemo, useState } from 'react';
 | 
			
		||||
import { useTranslation } from 'react-i18next';
 | 
			
		||||
@ -11,10 +12,10 @@ import { css } from '@emotion/css';
 | 
			
		||||
import { useACLRoleContext } from '../acl/ACLProvider';
 | 
			
		||||
import { useRequest } from '../api-client';
 | 
			
		||||
import { useToken } from '../style';
 | 
			
		||||
import { PluginCard } from './PluginCard';
 | 
			
		||||
import { PluginAddModal } from './PluginForm/modal/PluginAddModal';
 | 
			
		||||
import { PluginCard, SwitchAction } from './PluginCard';
 | 
			
		||||
import { useStyles } from './style';
 | 
			
		||||
import { IPluginData } from './types';
 | 
			
		||||
import { fuzzysearch } from '@tachybase/utils/client';
 | 
			
		||||
 | 
			
		||||
export interface TData {
 | 
			
		||||
  data: IPluginData[];
 | 
			
		||||
@ -35,12 +36,46 @@ export interface AllowedActions {
 | 
			
		||||
  destroy: number[];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const columns: TableProps<IPluginData>['columns'] = [
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Name',
 | 
			
		||||
    dataIndex: 'name',
 | 
			
		||||
    key: 'name',
 | 
			
		||||
    render: (text) => <a>{text}</a>,
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Keywords',
 | 
			
		||||
    dataIndex: 'keywords',
 | 
			
		||||
    key: 'keywords',
 | 
			
		||||
    render: (keywords) => keywords?.map((keyword) => <Tag key={keyword}>{keyword}</Tag>),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Description',
 | 
			
		||||
    dataIndex: 'description',
 | 
			
		||||
    key: 'description',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Action',
 | 
			
		||||
    key: 'action',
 | 
			
		||||
    render: (_, record) => (
 | 
			
		||||
      <Space size="middle">
 | 
			
		||||
        <SwitchAction {...record} />
 | 
			
		||||
      </Space>
 | 
			
		||||
    ),
 | 
			
		||||
  },
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
const LocalPlugins = () => {
 | 
			
		||||
  const { t } = useTranslation();
 | 
			
		||||
  const { theme } = useStyles();
 | 
			
		||||
  const { data, loading, refresh } = useRequest<TData>({
 | 
			
		||||
    url: 'pm:list',
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  const [searchValue, setSearchValue] = useState('');
 | 
			
		||||
  const filteredList = (data?.data || []).filter(
 | 
			
		||||
    (data) => fuzzysearch(searchValue, data.name) || fuzzysearch(searchValue, data.description ?? ''),
 | 
			
		||||
  );
 | 
			
		||||
  const filterList = useMemo(() => {
 | 
			
		||||
    let list = data?.data || [];
 | 
			
		||||
    list = list.reverse();
 | 
			
		||||
@ -69,8 +104,6 @@ const LocalPlugins = () => {
 | 
			
		||||
  }, [data?.data]);
 | 
			
		||||
 | 
			
		||||
  const [filterIndex, setFilterIndex] = useState(0);
 | 
			
		||||
  const [isShowAddForm, setShowAddForm] = useState(false);
 | 
			
		||||
  const [searchValue, setSearchValue] = useState('');
 | 
			
		||||
  const [keyword, setKeyword] = useState(null);
 | 
			
		||||
  const debouncedSearchValue = useDebounce(searchValue, { wait: 100 });
 | 
			
		||||
 | 
			
		||||
@ -140,15 +173,7 @@ const LocalPlugins = () => {
 | 
			
		||||
  }
 | 
			
		||||
  return (
 | 
			
		||||
    <>
 | 
			
		||||
      <PluginAddModal
 | 
			
		||||
        isShow={isShowAddForm}
 | 
			
		||||
        onClose={(isRefresh) => {
 | 
			
		||||
          setShowAddForm(false);
 | 
			
		||||
          // if (isRefresh) refresh();
 | 
			
		||||
        }}
 | 
			
		||||
      />
 | 
			
		||||
 | 
			
		||||
      <div style={{ width: '100%' }}>
 | 
			
		||||
      {/* <div style={{ width: '100%' }}>
 | 
			
		||||
        <div
 | 
			
		||||
          style={{ marginBottom: theme.marginLG }}
 | 
			
		||||
          className={css`
 | 
			
		||||
@ -178,13 +203,6 @@ const LocalPlugins = () => {
 | 
			
		||||
              />
 | 
			
		||||
            </Space>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <Space>
 | 
			
		||||
              <Button onClick={() => setShowAddForm(true)} type="primary">
 | 
			
		||||
                {t('Add new')}
 | 
			
		||||
              </Button>
 | 
			
		||||
            </Space>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <Row style={{ width: '100%' }} wrap={false}>
 | 
			
		||||
          <Col flex="200px">
 | 
			
		||||
@ -222,8 +240,20 @@ const LocalPlugins = () => {
 | 
			
		||||
              ))}
 | 
			
		||||
            </div>
 | 
			
		||||
          </Col>
 | 
			
		||||
        </Row>
 | 
			
		||||
      </div>
 | 
			
		||||
        </Row> */}
 | 
			
		||||
      <Card
 | 
			
		||||
        style={{ marginTop: '8px' }}
 | 
			
		||||
        extra={
 | 
			
		||||
          <Input
 | 
			
		||||
            value={searchValue}
 | 
			
		||||
            placeholder="Search by name or descriptions"
 | 
			
		||||
            onChange={(e) => setSearchValue(e.target.value)}
 | 
			
		||||
          />
 | 
			
		||||
        }
 | 
			
		||||
      >
 | 
			
		||||
        <Table columns={columns} dataSource={filteredList} rowKey="id" />
 | 
			
		||||
      </Card>
 | 
			
		||||
      {/* </div> */}
 | 
			
		||||
    </>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
@ -251,37 +281,8 @@ export const PluginManager = () => {
 | 
			
		||||
 | 
			
		||||
  return snippets.includes('pm') ? (
 | 
			
		||||
    <div>
 | 
			
		||||
      <PageHeader
 | 
			
		||||
        className={styles.pageHeader}
 | 
			
		||||
        ghost={false}
 | 
			
		||||
        title={t('Plugin manager')}
 | 
			
		||||
        footer={
 | 
			
		||||
          <Tabs
 | 
			
		||||
            activeKey={tabName}
 | 
			
		||||
            onChange={(activeKey) => {
 | 
			
		||||
              navigate(`/admin/pm/list/${activeKey}`);
 | 
			
		||||
            }}
 | 
			
		||||
            items={[
 | 
			
		||||
              {
 | 
			
		||||
                key: 'local',
 | 
			
		||||
                label: t('Local'),
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                key: 'marketplace',
 | 
			
		||||
                label: t('Marketplace'),
 | 
			
		||||
              },
 | 
			
		||||
            ]}
 | 
			
		||||
          />
 | 
			
		||||
        }
 | 
			
		||||
      />
 | 
			
		||||
      <div className={styles.pageContent} style={{ display: 'flex', flexFlow: 'row wrap' }}>
 | 
			
		||||
        {React.createElement(
 | 
			
		||||
          {
 | 
			
		||||
            local: LocalPlugins,
 | 
			
		||||
            marketplace: MarketplacePlugins,
 | 
			
		||||
          }[tabName],
 | 
			
		||||
        )}
 | 
			
		||||
      </div>
 | 
			
		||||
      <PageHeader className={styles.pageHeader} ghost={false} title={t('Plugin manager')}></PageHeader>
 | 
			
		||||
      <LocalPlugins />
 | 
			
		||||
    </div>
 | 
			
		||||
  ) : (
 | 
			
		||||
    <Result status="404" title="404" subTitle="Sorry, the page you visited does not exist." />
 | 
			
		||||
 | 
			
		||||
@ -25,7 +25,6 @@ import {
 | 
			
		||||
} from '../../../';
 | 
			
		||||
import { Plugin } from '../../../application/Plugin';
 | 
			
		||||
import { useAppSpin } from '../../../application/hooks/useAppSpin';
 | 
			
		||||
import { Help } from '../../../user/Help';
 | 
			
		||||
import { VariablesProvider } from '../../../variables';
 | 
			
		||||
 | 
			
		||||
const filterByACL = (schema, options) => {
 | 
			
		||||
@ -338,23 +337,33 @@ export const InternalAdminLayout = (props: any) => {
 | 
			
		||||
          >
 | 
			
		||||
            <div
 | 
			
		||||
              className={css`
 | 
			
		||||
                width: 200px;
 | 
			
		||||
                display: inline-flex;
 | 
			
		||||
                flex-shrink: 0;
 | 
			
		||||
                color: #fff;
 | 
			
		||||
                padding: 0;
 | 
			
		||||
                align-items: center;
 | 
			
		||||
                padding: 0 12px 0 12px;
 | 
			
		||||
              `}
 | 
			
		||||
            >
 | 
			
		||||
              <img
 | 
			
		||||
                className={css`
 | 
			
		||||
                  padding: 0 16px;
 | 
			
		||||
                  object-fit: contain;
 | 
			
		||||
                  width: 100%;
 | 
			
		||||
                  height: 100%;
 | 
			
		||||
                  height: 28px;
 | 
			
		||||
                `}
 | 
			
		||||
                src={result?.data?.data?.logo?.url}
 | 
			
		||||
              />
 | 
			
		||||
              <h1
 | 
			
		||||
                className={css`
 | 
			
		||||
                  color: #fff;
 | 
			
		||||
                  height: 32px;
 | 
			
		||||
                  margin: 0 0 0 12px;
 | 
			
		||||
                  font-weight: 600;
 | 
			
		||||
                  font-size: 18px;
 | 
			
		||||
                  line-height: 32px;
 | 
			
		||||
                `}
 | 
			
		||||
              >
 | 
			
		||||
                {result?.data?.data?.title}
 | 
			
		||||
              </h1>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div
 | 
			
		||||
              className={css`
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								packages/presets/mini/.npmignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								packages/presets/mini/.npmignore
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
/node_modules
 | 
			
		||||
/src
 | 
			
		||||
							
								
								
									
										3
									
								
								packages/presets/mini/client.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								packages/presets/mini/client.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
export * from './src/client';
 | 
			
		||||
export { default } from './src/client';
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								packages/presets/mini/client.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								packages/presets/mini/client.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
module.exports = require('./lib/client/index.js');
 | 
			
		||||
							
								
								
									
										67
									
								
								packages/presets/mini/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								packages/presets/mini/package.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,67 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "@tachybase/preset-mini",
 | 
			
		||||
  "version": "0.21.24",
 | 
			
		||||
  "license": "Apache-2.0",
 | 
			
		||||
  "main": "./lib/server/index.js",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@hera/plugin-approval": "workspace:*",
 | 
			
		||||
    "@hera/plugin-audit-logs": "workspace:*",
 | 
			
		||||
    "@hera/plugin-core": "workspace:*",
 | 
			
		||||
    "@hera/plugin-homepage": "workspace:*",
 | 
			
		||||
    "@hera/plugin-rental": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-acl": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-action-bulk-edit": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-action-bulk-update": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-action-duplicate": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-action-print": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-api-doc": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-api-keys": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-auth": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-backup-restore": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-calendar": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-cas": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-china-region": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-client": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-collection-manager": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-custom-request": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-data-source-manager": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-data-visualization": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-error-handler": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-export": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-file-manager": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-formula-field": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-gantt": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-graph-collection-manager": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-iframe-block": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-import": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-kanban": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-localization-management": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-logger": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-map": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-mock-collections": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-multi-app-manager": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-multi-app-share-collection": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-oidc": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-saml": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-sequence-field": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-sms-auth": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-snapshot-field": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-theme-editor": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-ui-schema-storage": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-users": "workspace:*",
 | 
			
		||||
    "@nocobase/plugin-verification": "workspace:*",
 | 
			
		||||
    "@tachybase/client": "workspace:*",
 | 
			
		||||
    "@tachybase/plugin-external-data-source": "workspace:*",
 | 
			
		||||
    "@tachybase/plugin-mobile-client": "workspace:*",
 | 
			
		||||
    "@tachybase/plugin-system-settings": "workspace:*",
 | 
			
		||||
    "@tachybase/plugin-workflow": "workspace:*",
 | 
			
		||||
    "@tachybase/preset-tachybase": "workspace:*",
 | 
			
		||||
    "@tachybase/schema": "workspace:*",
 | 
			
		||||
    "@tachybase/server": "workspace:*",
 | 
			
		||||
    "cronstrue": "^2.11.0",
 | 
			
		||||
    "lodash": "4.17.21"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@types/lodash": "^4.17.0"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										3
									
								
								packages/presets/mini/server.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								packages/presets/mini/server.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
export * from './src/server';
 | 
			
		||||
export { default } from './src/server';
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								packages/presets/mini/server.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								packages/presets/mini/server.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
module.exports = require('./lib/server/index.js');
 | 
			
		||||
							
								
								
									
										3
									
								
								packages/presets/mini/src/client/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								packages/presets/mini/src/client/index.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
import { TachyBaseClientPresetPlugin } from '@tachybase/preset-tachybase/client';
 | 
			
		||||
 | 
			
		||||
export class PluginMini extends TachyBaseClientPresetPlugin {}
 | 
			
		||||
							
								
								
									
										1
									
								
								packages/presets/mini/src/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								packages/presets/mini/src/index.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
export { default } from './server';
 | 
			
		||||
							
								
								
									
										31
									
								
								packages/presets/mini/src/server/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								packages/presets/mini/src/server/index.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
			
		||||
import PresetTachyBase from '@tachybase/preset-tachybase';
 | 
			
		||||
import _ from 'lodash';
 | 
			
		||||
 | 
			
		||||
export class PluginMini extends PresetTachyBase {
 | 
			
		||||
  #builtInPlugins = [
 | 
			
		||||
    'data-source-manager',
 | 
			
		||||
    'error-handler',
 | 
			
		||||
    'collection-manager',
 | 
			
		||||
    'ui-schema-storage',
 | 
			
		||||
    'file-manager',
 | 
			
		||||
    'system-settings',
 | 
			
		||||
    'client',
 | 
			
		||||
    'auth',
 | 
			
		||||
    'verification',
 | 
			
		||||
    'users',
 | 
			
		||||
    'acl',
 | 
			
		||||
    'multi-app-manager',
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  #localPlugins = [];
 | 
			
		||||
 | 
			
		||||
  get builtInPlugins() {
 | 
			
		||||
    return this.#builtInPlugins;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  get localPlugins() {
 | 
			
		||||
    return this.#localPlugins;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default PluginMini;
 | 
			
		||||
							
								
								
									
										181
									
								
								pnpm-lock.yaml
									
									
									
									
									
								
							
							
						
						
									
										181
									
								
								pnpm-lock.yaml
									
									
									
									
									
								
							@ -55,6 +55,9 @@ importers:
 | 
			
		||||
      '@tachybase/preset-hera-sancongtou':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:packages/presets/sancongtou
 | 
			
		||||
      '@tachybase/preset-mini':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:packages/presets/mini
 | 
			
		||||
      '@tachybase/preset-tachybase':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:packages/presets/base
 | 
			
		||||
@ -176,6 +179,9 @@ importers:
 | 
			
		||||
      '@tachybase/preset-hera-sancongtou':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../presets/sancongtou
 | 
			
		||||
      '@tachybase/preset-mini':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../presets/mini
 | 
			
		||||
      '@tachybase/preset-tachybase':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../presets/base
 | 
			
		||||
@ -4217,6 +4223,181 @@ importers:
 | 
			
		||||
        specifier: ^4.17.0
 | 
			
		||||
        version: 4.17.0
 | 
			
		||||
 | 
			
		||||
  packages/presets/mini:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@hera/plugin-approval':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@hera/plugin-approval
 | 
			
		||||
      '@hera/plugin-audit-logs':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@hera/plugin-audit-logs
 | 
			
		||||
      '@hera/plugin-core':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@hera/plugin-core
 | 
			
		||||
      '@hera/plugin-homepage':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@hera/plugin-homepage
 | 
			
		||||
      '@hera/plugin-rental':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@hera/plugin-rental
 | 
			
		||||
      '@nocobase/plugin-acl':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-acl
 | 
			
		||||
      '@nocobase/plugin-action-bulk-edit':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-action-bulk-edit
 | 
			
		||||
      '@nocobase/plugin-action-bulk-update':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-action-bulk-update
 | 
			
		||||
      '@nocobase/plugin-action-duplicate':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-action-duplicate
 | 
			
		||||
      '@nocobase/plugin-action-print':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-action-print
 | 
			
		||||
      '@nocobase/plugin-api-doc':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-api-doc
 | 
			
		||||
      '@nocobase/plugin-api-keys':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-api-keys
 | 
			
		||||
      '@nocobase/plugin-auth':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-auth
 | 
			
		||||
      '@nocobase/plugin-backup-restore':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-backup-restore
 | 
			
		||||
      '@nocobase/plugin-calendar':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-calendar
 | 
			
		||||
      '@nocobase/plugin-cas':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-cas
 | 
			
		||||
      '@nocobase/plugin-china-region':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-china-region
 | 
			
		||||
      '@nocobase/plugin-client':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-client
 | 
			
		||||
      '@nocobase/plugin-collection-manager':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-collection-manager
 | 
			
		||||
      '@nocobase/plugin-custom-request':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-custom-request
 | 
			
		||||
      '@nocobase/plugin-data-source-manager':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-data-source-manager
 | 
			
		||||
      '@nocobase/plugin-data-visualization':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-data-visualization
 | 
			
		||||
      '@nocobase/plugin-error-handler':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-error-handler
 | 
			
		||||
      '@nocobase/plugin-export':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-export
 | 
			
		||||
      '@nocobase/plugin-file-manager':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-file-manager
 | 
			
		||||
      '@nocobase/plugin-formula-field':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-formula-field
 | 
			
		||||
      '@nocobase/plugin-gantt':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-gantt
 | 
			
		||||
      '@nocobase/plugin-graph-collection-manager':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-graph-collection-manager
 | 
			
		||||
      '@nocobase/plugin-iframe-block':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-iframe-block
 | 
			
		||||
      '@nocobase/plugin-import':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-import
 | 
			
		||||
      '@nocobase/plugin-kanban':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-kanban
 | 
			
		||||
      '@nocobase/plugin-localization-management':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-localization-management
 | 
			
		||||
      '@nocobase/plugin-logger':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-logger
 | 
			
		||||
      '@nocobase/plugin-map':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-map
 | 
			
		||||
      '@nocobase/plugin-mock-collections':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-mock-collections
 | 
			
		||||
      '@nocobase/plugin-multi-app-manager':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-multi-app-manager
 | 
			
		||||
      '@nocobase/plugin-multi-app-share-collection':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-multi-app-share-collection
 | 
			
		||||
      '@nocobase/plugin-oidc':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-oidc
 | 
			
		||||
      '@nocobase/plugin-saml':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-saml
 | 
			
		||||
      '@nocobase/plugin-sequence-field':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-sequence-field
 | 
			
		||||
      '@nocobase/plugin-sms-auth':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-sms-auth
 | 
			
		||||
      '@nocobase/plugin-snapshot-field':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-snapshot-field
 | 
			
		||||
      '@nocobase/plugin-theme-editor':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-theme-editor
 | 
			
		||||
      '@nocobase/plugin-ui-schema-storage':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-ui-schema-storage
 | 
			
		||||
      '@nocobase/plugin-users':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-users
 | 
			
		||||
      '@nocobase/plugin-verification':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@nocobase/plugin-verification
 | 
			
		||||
      '@tachybase/client':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../core/client
 | 
			
		||||
      '@tachybase/plugin-external-data-source':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@tachybase/plugin-external-data-source
 | 
			
		||||
      '@tachybase/plugin-mobile-client':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@tachybase/plugin-mobile-client
 | 
			
		||||
      '@tachybase/plugin-system-settings':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@tachybase/plugin-system-settings
 | 
			
		||||
      '@tachybase/plugin-workflow':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../plugins/@tachybase/plugin-workflow
 | 
			
		||||
      '@tachybase/preset-tachybase':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../base
 | 
			
		||||
      '@tachybase/schema':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../core/schema
 | 
			
		||||
      '@tachybase/server':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../core/server
 | 
			
		||||
      cronstrue:
 | 
			
		||||
        specifier: ^2.11.0
 | 
			
		||||
        version: 2.47.0
 | 
			
		||||
      lodash:
 | 
			
		||||
        specifier: 4.17.21
 | 
			
		||||
        version: 4.17.21
 | 
			
		||||
    devDependencies:
 | 
			
		||||
      '@types/lodash':
 | 
			
		||||
        specifier: ^4.17.0
 | 
			
		||||
        version: 4.17.0
 | 
			
		||||
 | 
			
		||||
  packages/presets/rental:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@hera/plugin-approval':
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user