Reviewed-on: daoyoucloud/tachybase#763 Co-authored-by: wjh <wwwjh0710@163.com> Co-committed-by: wjh <wwwjh0710@163.com>
This commit is contained in:
		
							parent
							
								
									b5b7ce6b8c
								
							
						
					
					
						commit
						78f75f8254
					
				
							
								
								
									
										6
									
								
								.changeset/five-ligers-hang.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.changeset/five-ligers-hang.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
			
		||||
---
 | 
			
		||||
"@hera/plugin-approval-mobile": patch
 | 
			
		||||
"tachybase": patch
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
添加mobile审计模块
 | 
			
		||||
							
								
								
									
										2
									
								
								packages/plugins/@hera/plugin-approval-mobile/.npmignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								packages/plugins/@hera/plugin-approval-mobile/.npmignore
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
/node_modules
 | 
			
		||||
/src
 | 
			
		||||
							
								
								
									
										1
									
								
								packages/plugins/@hera/plugin-approval-mobile/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								packages/plugins/@hera/plugin-approval-mobile/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
# @hera/plugin-approval-mobile
 | 
			
		||||
							
								
								
									
										2
									
								
								packages/plugins/@hera/plugin-approval-mobile/client.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								packages/plugins/@hera/plugin-approval-mobile/client.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
export * from './dist/client';
 | 
			
		||||
export { default } from './dist/client';
 | 
			
		||||
							
								
								
									
										1
									
								
								packages/plugins/@hera/plugin-approval-mobile/client.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								packages/plugins/@hera/plugin-approval-mobile/client.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
module.exports = require('./dist/client/index.js');
 | 
			
		||||
							
								
								
									
										24
									
								
								packages/plugins/@hera/plugin-approval-mobile/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								packages/plugins/@hera/plugin-approval-mobile/package.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,24 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "@hera/plugin-approval-mobile",
 | 
			
		||||
  "version": "0.21.12",
 | 
			
		||||
  "main": "dist/server/index.js",
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@ant-design/icons": "5.x",
 | 
			
		||||
    "@nocobase/schema": "workspace:*",
 | 
			
		||||
    "@types/lodash": "^4.17.0",
 | 
			
		||||
    "antd": "5.16.1",
 | 
			
		||||
    "antd-mobile": "^5.35.0",
 | 
			
		||||
    "antd-mobile-icons": "^0.3.0",
 | 
			
		||||
    "classnames": "^2.3.1",
 | 
			
		||||
    "lodash": "4.17.21",
 | 
			
		||||
    "react-i18next": "^11.15.1"
 | 
			
		||||
  },
 | 
			
		||||
  "peerDependencies": {
 | 
			
		||||
    "@nocobase/client": "workspace:*",
 | 
			
		||||
    "@nocobase/server": "workspace:*",
 | 
			
		||||
    "@nocobase/test": "workspace:*",
 | 
			
		||||
    "@nocobase/utils": "workspace:*"
 | 
			
		||||
  },
 | 
			
		||||
  "description.zh-CN": "提供定制化的移动端页面审批的功能。",
 | 
			
		||||
  "displayName.zh-CN": "移动端:审批"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										2
									
								
								packages/plugins/@hera/plugin-approval-mobile/server.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								packages/plugins/@hera/plugin-approval-mobile/server.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
export * from './dist/server';
 | 
			
		||||
export { default } from './dist/server';
 | 
			
		||||
							
								
								
									
										1
									
								
								packages/plugins/@hera/plugin-approval-mobile/server.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								packages/plugins/@hera/plugin-approval-mobile/server.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
module.exports = require('./dist/server/index.js');
 | 
			
		||||
@ -0,0 +1,51 @@
 | 
			
		||||
import {
 | 
			
		||||
  SchemaInitializerItem,
 | 
			
		||||
  SchemaInitializerMenu,
 | 
			
		||||
  useSchemaInitializer,
 | 
			
		||||
  useSchemaInitializerItem,
 | 
			
		||||
} from '@nocobase/client';
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import { ISchema } from '@nocobase/schema';
 | 
			
		||||
import { Toast } from 'antd-mobile';
 | 
			
		||||
import { CalendarOutline } from 'antd-mobile-icons';
 | 
			
		||||
 | 
			
		||||
export const ApprovalBlockInitializer = () => {
 | 
			
		||||
  const { insert } = useSchemaInitializer();
 | 
			
		||||
  const itemConfig = useSchemaInitializerItem();
 | 
			
		||||
  const onCreateBlockSchema = async ({ item }) => {
 | 
			
		||||
    const schema: ISchema = {
 | 
			
		||||
      type: 'void',
 | 
			
		||||
      name: item.name,
 | 
			
		||||
      title: item.title,
 | 
			
		||||
      'x-toolbar': 'BlockSchemaToolbar',
 | 
			
		||||
      'x-settings': 'ApprovalSettings',
 | 
			
		||||
      'x-component': item.itemComponent,
 | 
			
		||||
      'x-component-props': {},
 | 
			
		||||
    };
 | 
			
		||||
    insert(schema);
 | 
			
		||||
  };
 | 
			
		||||
  return (
 | 
			
		||||
    <SchemaInitializerItem
 | 
			
		||||
      {...itemConfig}
 | 
			
		||||
      title="Approval"
 | 
			
		||||
      icon={<CalendarOutline />}
 | 
			
		||||
      items={ApprovalInitializerItem}
 | 
			
		||||
      onClick={onCreateBlockSchema}
 | 
			
		||||
    ></SchemaInitializerItem>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const ApprovalInitializerItem = [
 | 
			
		||||
  {
 | 
			
		||||
    type: 'item',
 | 
			
		||||
    name: 'initiations',
 | 
			
		||||
    title: '发起',
 | 
			
		||||
    itemComponent: 'InitiationsBlock',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    type: 'item',
 | 
			
		||||
    title: '审批',
 | 
			
		||||
    name: 'todos',
 | 
			
		||||
    itemComponent: 'TodosBlock',
 | 
			
		||||
  },
 | 
			
		||||
];
 | 
			
		||||
@ -0,0 +1,17 @@
 | 
			
		||||
import { SchemaSettings } from '@nocobase/client';
 | 
			
		||||
import _ from 'lodash';
 | 
			
		||||
 | 
			
		||||
export const ApprovalSettings = new SchemaSettings({
 | 
			
		||||
  name: 'ApprovalSettings',
 | 
			
		||||
  items: [
 | 
			
		||||
    {
 | 
			
		||||
      name: 'divider',
 | 
			
		||||
      type: 'divider',
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      name: 'delete',
 | 
			
		||||
      type: 'remove',
 | 
			
		||||
      sort: 100,
 | 
			
		||||
    },
 | 
			
		||||
  ],
 | 
			
		||||
});
 | 
			
		||||
@ -0,0 +1,65 @@
 | 
			
		||||
import { BlockItem, css } from '@nocobase/client';
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import { AutoCenter, Card, SearchBar, Selector, Space } from 'antd-mobile';
 | 
			
		||||
import { TeamFill } from 'antd-mobile-icons';
 | 
			
		||||
 | 
			
		||||
export const InitiationsBlock = () => {
 | 
			
		||||
  return (
 | 
			
		||||
    <BlockItem>
 | 
			
		||||
      <div style={{ padding: '10px' }}>
 | 
			
		||||
        <SearchBar placeholder="请输入内容" clearable style={{ '--background': '#ffffff' }} />
 | 
			
		||||
        <Card
 | 
			
		||||
          className={css`
 | 
			
		||||
            overflow: hidden;
 | 
			
		||||
            margin-top: 20px;
 | 
			
		||||
            .adm-card-body {
 | 
			
		||||
              padding: 0;
 | 
			
		||||
            }
 | 
			
		||||
          `}
 | 
			
		||||
          style={{ padding: '0', backgroundColor: '#f3f3f3' }}
 | 
			
		||||
        >
 | 
			
		||||
          <Selector
 | 
			
		||||
            style={{ '--color': '#ffffff', '--gap': '1px' }}
 | 
			
		||||
            columns={3}
 | 
			
		||||
            showCheckMark={false}
 | 
			
		||||
            options={[
 | 
			
		||||
              {
 | 
			
		||||
                value: '1',
 | 
			
		||||
                label: (
 | 
			
		||||
                  <div style={{ display: 'flex', flexDirection: 'column', alignContent: 'center' }}>
 | 
			
		||||
                    <div>
 | 
			
		||||
                      <TeamFill />
 | 
			
		||||
                    </div>
 | 
			
		||||
                    11111
 | 
			
		||||
                  </div>
 | 
			
		||||
                ),
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                value: '2',
 | 
			
		||||
                label: (
 | 
			
		||||
                  <div style={{ display: 'flex', flexDirection: 'column', alignContent: 'center' }}>
 | 
			
		||||
                    <div>
 | 
			
		||||
                      <TeamFill />
 | 
			
		||||
                    </div>
 | 
			
		||||
                    11111
 | 
			
		||||
                  </div>
 | 
			
		||||
                ),
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                value: '3',
 | 
			
		||||
                label: (
 | 
			
		||||
                  <div style={{ display: 'flex', flexDirection: 'column', alignContent: 'center' }}>
 | 
			
		||||
                    <div>
 | 
			
		||||
                      <TeamFill />
 | 
			
		||||
                    </div>
 | 
			
		||||
                    11111
 | 
			
		||||
                  </div>
 | 
			
		||||
                ),
 | 
			
		||||
              },
 | 
			
		||||
            ]}
 | 
			
		||||
          />
 | 
			
		||||
        </Card>
 | 
			
		||||
      </div>
 | 
			
		||||
    </BlockItem>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
@ -0,0 +1,79 @@
 | 
			
		||||
import { BlockItem, SchemaComponent, css } from '@nocobase/client';
 | 
			
		||||
import { Divider, SearchBar, Space, Tabs } from 'antd-mobile';
 | 
			
		||||
import React, { useState } from 'react';
 | 
			
		||||
import { TabApplicantType } from './component/TabApplicantType';
 | 
			
		||||
import { TabTemplateType } from './component/TabTemplateType';
 | 
			
		||||
import { TabReachDataType } from './component/TabReachDataType';
 | 
			
		||||
import { TabBatchProcessingType } from './component/TabBatchProcessingType';
 | 
			
		||||
import { TabApprovalType } from './component/TabApprovalType';
 | 
			
		||||
import { TabReadingType } from './component/TabReadingType';
 | 
			
		||||
import { TabApprovalItem } from './component/TabApprovalItem';
 | 
			
		||||
import { useFieldSchema } from '@nocobase/schema';
 | 
			
		||||
 | 
			
		||||
export const TodosBlock = () => {
 | 
			
		||||
  const fieldSchema = useFieldSchema();
 | 
			
		||||
  fieldSchema['x-component-props'] = fieldSchema['x-component-props']?.['approvalKey']
 | 
			
		||||
    ? fieldSchema['x-component-props']
 | 
			
		||||
    : (() => {
 | 
			
		||||
        fieldSchema['x-component-props']['approvalKey'] = 'pending';
 | 
			
		||||
        return fieldSchema['x-component-props'];
 | 
			
		||||
      })();
 | 
			
		||||
  const props = fieldSchema['x-component-props'];
 | 
			
		||||
  return (
 | 
			
		||||
    <BlockItem>
 | 
			
		||||
      <SearchBar placeholder="搜索人名,标题、内容" clearable style={{ '--background': '#ffffff', padding: '10px' }} />
 | 
			
		||||
      <Tabs
 | 
			
		||||
        onChange={(key) => {
 | 
			
		||||
          props['approvalKey'] = key;
 | 
			
		||||
        }}
 | 
			
		||||
        style={{ '--title-font-size': '12px', backgroundColor: '#ffffff', marginTop: '10px' }}
 | 
			
		||||
      >
 | 
			
		||||
        <Tabs.Tab title="待处理" key="pending">
 | 
			
		||||
          <Space justify="evenly" style={spaceStyle}>
 | 
			
		||||
            {/* 模版类型 */}
 | 
			
		||||
            <TabTemplateType />
 | 
			
		||||
            {/* 申请人 */}
 | 
			
		||||
            <TabApplicantType />
 | 
			
		||||
            {/* 到达日期 */}
 | 
			
		||||
            <TabReachDataType />
 | 
			
		||||
            {/* 批量处理 */}
 | 
			
		||||
            <TabBatchProcessingType />
 | 
			
		||||
          </Space>
 | 
			
		||||
          <TabApprovalItem />
 | 
			
		||||
        </Tabs.Tab>
 | 
			
		||||
        <Tabs.Tab title="已处理" key="processed">
 | 
			
		||||
          <Space justify="evenly" style={spaceStyle}>
 | 
			
		||||
            {/* 阅读状态 */}
 | 
			
		||||
            <TabReadingType />
 | 
			
		||||
            {/* 审批状态 */}
 | 
			
		||||
            <TabApprovalType />
 | 
			
		||||
            {/* 模版类型 */}
 | 
			
		||||
            <TabTemplateType />
 | 
			
		||||
            {/* 申请人 */}
 | 
			
		||||
            <TabApplicantType />
 | 
			
		||||
            {/* 到达日期 */}
 | 
			
		||||
            <TabReachDataType />
 | 
			
		||||
          </Space>
 | 
			
		||||
          <TabApprovalItem />
 | 
			
		||||
        </Tabs.Tab>
 | 
			
		||||
        <Tabs.Tab title="抄送我" key="duplicate">
 | 
			
		||||
          <Space justify="evenly" style={spaceStyle}>
 | 
			
		||||
            {/* 阅读状态 */}
 | 
			
		||||
            <TabReadingType />
 | 
			
		||||
            {/* 审批状态 */}
 | 
			
		||||
            <TabApprovalType />
 | 
			
		||||
            {/* 模版类型 */}
 | 
			
		||||
            <TabTemplateType />
 | 
			
		||||
            {/* 申请人 */}
 | 
			
		||||
            <TabApplicantType />
 | 
			
		||||
            {/* 到达日期 */}
 | 
			
		||||
            <TabReachDataType />
 | 
			
		||||
          </Space>
 | 
			
		||||
          <TabApprovalItem />
 | 
			
		||||
        </Tabs.Tab>
 | 
			
		||||
      </Tabs>
 | 
			
		||||
    </BlockItem>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const spaceStyle = { width: '100%', fontSize: '10px', color: '#8e8e8e' };
 | 
			
		||||
@ -0,0 +1,36 @@
 | 
			
		||||
import { useFieldSchema } from '@nocobase/schema';
 | 
			
		||||
import { Picker, Space } from 'antd-mobile';
 | 
			
		||||
import { DownOutline } from 'antd-mobile-icons';
 | 
			
		||||
import React, { useState } from 'react';
 | 
			
		||||
 | 
			
		||||
export const TabApplicantType = () => {
 | 
			
		||||
  const [visible, setVisible] = useState(false);
 | 
			
		||||
  return (
 | 
			
		||||
    <Space>
 | 
			
		||||
      <Space
 | 
			
		||||
        onClick={() => {
 | 
			
		||||
          setVisible(true);
 | 
			
		||||
        }}
 | 
			
		||||
      >
 | 
			
		||||
        申请人
 | 
			
		||||
        <DownOutline />
 | 
			
		||||
      </Space>
 | 
			
		||||
      <Picker
 | 
			
		||||
        columns={columns}
 | 
			
		||||
        visible={visible}
 | 
			
		||||
        onClose={() => {
 | 
			
		||||
          setVisible(false);
 | 
			
		||||
        }}
 | 
			
		||||
      />
 | 
			
		||||
    </Space>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const columns = [
 | 
			
		||||
  [
 | 
			
		||||
    { label: '111', value: '1' },
 | 
			
		||||
    { label: '222', value: '2' },
 | 
			
		||||
    { label: '333', value: '3' },
 | 
			
		||||
    { label: '444', value: '4' },
 | 
			
		||||
  ],
 | 
			
		||||
];
 | 
			
		||||
@ -0,0 +1,70 @@
 | 
			
		||||
import { connect, useFieldSchema } from '@nocobase/schema';
 | 
			
		||||
import { Badge, Empty, List, Space, Tag } from 'antd-mobile';
 | 
			
		||||
import React from 'react';
 | 
			
		||||
 | 
			
		||||
export const TabApprovalItem = () => {
 | 
			
		||||
  const fieldSchema = useFieldSchema();
 | 
			
		||||
  const props = fieldSchema['x-component-props'];
 | 
			
		||||
  const blockData = props.approvalKey === 'duplicate' ? [] : data;
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <div style={{ marginTop: '10px' }}>
 | 
			
		||||
      {blockData.length ? (
 | 
			
		||||
        <List style={{ '--font-size': '12px' }}>
 | 
			
		||||
          {blockData.map((item, index) => {
 | 
			
		||||
            return (
 | 
			
		||||
              <List.Item key={index}>
 | 
			
		||||
                <Badge color="#6ac3ff" content={Badge.dot} style={{ '--right': '100%' }}>
 | 
			
		||||
                  <Space block>
 | 
			
		||||
                    {item.title}
 | 
			
		||||
                    <Tag color="primary" fill="outline">
 | 
			
		||||
                      审批中
 | 
			
		||||
                    </Tag>
 | 
			
		||||
                  </Space>
 | 
			
		||||
                </Badge>
 | 
			
		||||
                <Space block> xxxx:{item.context}</Space>
 | 
			
		||||
                <Space block> xxxx:{item.price}</Space>
 | 
			
		||||
                <Space block> xxxx:{item.context}</Space>
 | 
			
		||||
              </List.Item>
 | 
			
		||||
            );
 | 
			
		||||
          })}
 | 
			
		||||
        </List>
 | 
			
		||||
      ) : (
 | 
			
		||||
        <Empty description="暂无数据" />
 | 
			
		||||
      )}
 | 
			
		||||
    </div>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const data = [
 | 
			
		||||
  {
 | 
			
		||||
    title: 'xx-xxxxx的申请',
 | 
			
		||||
    context: 'xxxxxxxxx',
 | 
			
		||||
    price: 'xxxxxxx',
 | 
			
		||||
    type: '1',
 | 
			
		||||
    status: '1',
 | 
			
		||||
    date: '2024-01-08',
 | 
			
		||||
    read: false,
 | 
			
		||||
    applicantId: 9,
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'xx-xxxxx的申请',
 | 
			
		||||
    context: 'xxxxxxxxx',
 | 
			
		||||
    price: 'xxxxxxx',
 | 
			
		||||
    type: '2',
 | 
			
		||||
    status: '2',
 | 
			
		||||
    date: '2024-01-09',
 | 
			
		||||
    read: true,
 | 
			
		||||
    applicantId: 10,
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'xx-xxxxx的申请',
 | 
			
		||||
    context: 'xxxxxxxxx',
 | 
			
		||||
    price: 'xxxxxxx',
 | 
			
		||||
    type: '3',
 | 
			
		||||
    status: '3',
 | 
			
		||||
    date: '2024-01-010',
 | 
			
		||||
    read: false,
 | 
			
		||||
    applicantId: 11,
 | 
			
		||||
  },
 | 
			
		||||
];
 | 
			
		||||
@ -0,0 +1,36 @@
 | 
			
		||||
import { Picker, Space } from 'antd-mobile';
 | 
			
		||||
import { DownOutline } from 'antd-mobile-icons';
 | 
			
		||||
import React, { useState } from 'react';
 | 
			
		||||
 | 
			
		||||
export const TabApprovalType = () => {
 | 
			
		||||
  const [visible, setVisible] = useState(false);
 | 
			
		||||
  return (
 | 
			
		||||
    <>
 | 
			
		||||
      <Space
 | 
			
		||||
        onClick={() => {
 | 
			
		||||
          setVisible(true);
 | 
			
		||||
        }}
 | 
			
		||||
      >
 | 
			
		||||
        审批状态
 | 
			
		||||
        <DownOutline />
 | 
			
		||||
      </Space>
 | 
			
		||||
      <Picker
 | 
			
		||||
        columns={columns}
 | 
			
		||||
        visible={visible}
 | 
			
		||||
        onClose={() => {
 | 
			
		||||
          setVisible(false);
 | 
			
		||||
        }}
 | 
			
		||||
      />
 | 
			
		||||
    </>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const columns = [
 | 
			
		||||
  [
 | 
			
		||||
    { label: '全部', value: '0' },
 | 
			
		||||
    { label: '审批中', value: '1' },
 | 
			
		||||
    { label: '已通过', value: '2' },
 | 
			
		||||
    { label: '已驳回', value: '3' },
 | 
			
		||||
    { label: '已撤销', value: '4' },
 | 
			
		||||
  ],
 | 
			
		||||
];
 | 
			
		||||
@ -0,0 +1,12 @@
 | 
			
		||||
import { Space } from 'antd-mobile';
 | 
			
		||||
import { FillinOutline } from 'antd-mobile-icons';
 | 
			
		||||
import React from 'react';
 | 
			
		||||
 | 
			
		||||
export const TabBatchProcessingType = () => {
 | 
			
		||||
  return (
 | 
			
		||||
    <Space>
 | 
			
		||||
      <FillinOutline />
 | 
			
		||||
      批量处理
 | 
			
		||||
    </Space>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
@ -0,0 +1,31 @@
 | 
			
		||||
import { Picker, Space } from 'antd-mobile';
 | 
			
		||||
import { DownOutline } from 'antd-mobile-icons';
 | 
			
		||||
import React, { useState } from 'react';
 | 
			
		||||
 | 
			
		||||
export const TabReachDataType = () => {
 | 
			
		||||
  const [visible, setVisible] = useState(false);
 | 
			
		||||
  return (
 | 
			
		||||
    <>
 | 
			
		||||
      <Space>
 | 
			
		||||
        到达日期
 | 
			
		||||
        <DownOutline />
 | 
			
		||||
      </Space>
 | 
			
		||||
      <Picker
 | 
			
		||||
        columns={columns}
 | 
			
		||||
        visible={visible}
 | 
			
		||||
        onClose={() => {
 | 
			
		||||
          setVisible(false);
 | 
			
		||||
        }}
 | 
			
		||||
      />
 | 
			
		||||
    </>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const columns = [
 | 
			
		||||
  [
 | 
			
		||||
    { label: '全部', value: '1' },
 | 
			
		||||
    { label: '近7日', value: '2' },
 | 
			
		||||
    { label: '近30日', value: '3' },
 | 
			
		||||
    { label: '自定义区间', value: '4' },
 | 
			
		||||
  ],
 | 
			
		||||
];
 | 
			
		||||
@ -0,0 +1,30 @@
 | 
			
		||||
import { Picker, Space } from 'antd-mobile';
 | 
			
		||||
import { DownOutline } from 'antd-mobile-icons';
 | 
			
		||||
import React, { useState } from 'react';
 | 
			
		||||
 | 
			
		||||
export const TabReadingType = () => {
 | 
			
		||||
  const [visible, setVisible] = useState(false);
 | 
			
		||||
  return (
 | 
			
		||||
    <>
 | 
			
		||||
      <Space>
 | 
			
		||||
        阅读状态
 | 
			
		||||
        <DownOutline />
 | 
			
		||||
      </Space>
 | 
			
		||||
      <Picker
 | 
			
		||||
        columns={columns}
 | 
			
		||||
        visible={visible}
 | 
			
		||||
        onClose={() => {
 | 
			
		||||
          setVisible(false);
 | 
			
		||||
        }}
 | 
			
		||||
      />
 | 
			
		||||
    </>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const columns = [
 | 
			
		||||
  [
 | 
			
		||||
    { label: '全部', value: '1' },
 | 
			
		||||
    { label: '已读', value: '2' },
 | 
			
		||||
    { label: '未读', value: '3' },
 | 
			
		||||
  ],
 | 
			
		||||
];
 | 
			
		||||
@ -0,0 +1,37 @@
 | 
			
		||||
import { Picker, Space } from 'antd-mobile';
 | 
			
		||||
import { DownOutline } from 'antd-mobile-icons';
 | 
			
		||||
import React, { useState } from 'react';
 | 
			
		||||
 | 
			
		||||
export const TabTemplateType = () => {
 | 
			
		||||
  const [visible, setVisible] = useState(false);
 | 
			
		||||
  return (
 | 
			
		||||
    <>
 | 
			
		||||
      <Space
 | 
			
		||||
        onClick={() => {
 | 
			
		||||
          setVisible(true);
 | 
			
		||||
        }}
 | 
			
		||||
      >
 | 
			
		||||
        模版类型
 | 
			
		||||
        <DownOutline />
 | 
			
		||||
      </Space>
 | 
			
		||||
      <Picker
 | 
			
		||||
        columns={columns}
 | 
			
		||||
        visible={visible}
 | 
			
		||||
        onClose={() => {
 | 
			
		||||
          setVisible(false);
 | 
			
		||||
        }}
 | 
			
		||||
      />
 | 
			
		||||
    </>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const columns = [
 | 
			
		||||
  [
 | 
			
		||||
    { label: '全部', value: '0' },
 | 
			
		||||
    { label: '入职申请', value: '1' },
 | 
			
		||||
    { label: '转正申请', value: '2' },
 | 
			
		||||
    { label: '调用申请', value: '3' },
 | 
			
		||||
    { label: '离职申请', value: '4' },
 | 
			
		||||
    { label: 'xxx申请', value: '5' },
 | 
			
		||||
  ],
 | 
			
		||||
];
 | 
			
		||||
@ -0,0 +1,24 @@
 | 
			
		||||
import { Plugin } from '@nocobase/client';
 | 
			
		||||
import { ApprovalBlockInitializer } from './ApprovalBlockInitializer';
 | 
			
		||||
import { ApprovalSettings } from './ApprovalSettings';
 | 
			
		||||
import { TodosBlock } from './TodosBlock';
 | 
			
		||||
import { InitiationsBlock } from './InitiationsBlock';
 | 
			
		||||
 | 
			
		||||
class PluginApproval extends Plugin {
 | 
			
		||||
  async load() {
 | 
			
		||||
    this.app.addComponents({
 | 
			
		||||
      ApprovalBlockInitializer,
 | 
			
		||||
      InitiationsBlock,
 | 
			
		||||
      TodosBlock,
 | 
			
		||||
    });
 | 
			
		||||
    this.app.schemaSettingsManager.add(ApprovalSettings);
 | 
			
		||||
    this.app.schemaInitializerManager.addItem('mobilePage:addBlock', 'otherBlocks.approval', {
 | 
			
		||||
      title: 'Approval',
 | 
			
		||||
      name: 'approval',
 | 
			
		||||
      type: 'item',
 | 
			
		||||
      Component: 'ApprovalBlockInitializer',
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default PluginApproval;
 | 
			
		||||
@ -0,0 +1,15 @@
 | 
			
		||||
import { useApp, tval as nTval, i18n } from '@nocobase/client';
 | 
			
		||||
 | 
			
		||||
const NAMESPACE = '@hera/plugin-mobile';
 | 
			
		||||
 | 
			
		||||
export const useTranslation = (): any => {
 | 
			
		||||
  const { i18n } = useApp();
 | 
			
		||||
  const t = (key: string, props = {}) => i18n.t(key, { ns: NAMESPACE, ...props });
 | 
			
		||||
  return { t };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const tval = (key: string) => nTval(key, { ns: NAMESPACE });
 | 
			
		||||
 | 
			
		||||
export function lang(key: string) {
 | 
			
		||||
  return i18n.t(key, { ns: NAMESPACE });
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,14 @@
 | 
			
		||||
import { Plugin } from '@nocobase/client';
 | 
			
		||||
import PluginApproval from './approval';
 | 
			
		||||
 | 
			
		||||
export class PluginApprovalMobileClient extends Plugin {
 | 
			
		||||
  async afterAdd() {
 | 
			
		||||
    this.pm.add(PluginApproval);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  async beforeLoad() {}
 | 
			
		||||
 | 
			
		||||
  async load() {}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default PluginApprovalMobileClient;
 | 
			
		||||
@ -0,0 +1,2 @@
 | 
			
		||||
export * from './server';
 | 
			
		||||
export { default } from './server';
 | 
			
		||||
@ -0,0 +1 @@
 | 
			
		||||
export { default } from './plugin';
 | 
			
		||||
@ -0,0 +1,19 @@
 | 
			
		||||
import { Plugin } from '@nocobase/server';
 | 
			
		||||
 | 
			
		||||
export class PluginApprovalMobileServer extends Plugin {
 | 
			
		||||
  async afterAdd() {}
 | 
			
		||||
 | 
			
		||||
  async beforeLoad() {}
 | 
			
		||||
 | 
			
		||||
  async load() {}
 | 
			
		||||
 | 
			
		||||
  async install() {}
 | 
			
		||||
 | 
			
		||||
  async afterEnable() {}
 | 
			
		||||
 | 
			
		||||
  async afterDisable() {}
 | 
			
		||||
 | 
			
		||||
  async remove() {}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default PluginApprovalMobileServer;
 | 
			
		||||
							
								
								
									
										161
									
								
								pnpm-lock.yaml
									
									
									
									
									
								
							
							
						
						
									
										161
									
								
								pnpm-lock.yaml
									
									
									
									
									
								
							@ -1340,6 +1340,49 @@ importers:
 | 
			
		||||
        specifier: ^6.26.0
 | 
			
		||||
        version: 6.35.2
 | 
			
		||||
 | 
			
		||||
  packages/plugins/@hera/plugin-approval-mobile:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@nocobase/client':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../../core/client
 | 
			
		||||
      '@nocobase/server':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../../core/server
 | 
			
		||||
      '@nocobase/test':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../../core/test
 | 
			
		||||
      '@nocobase/utils':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../../core/utils
 | 
			
		||||
    devDependencies:
 | 
			
		||||
      '@ant-design/icons':
 | 
			
		||||
        specifier: 5.x
 | 
			
		||||
        version: 5.3.6(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      '@nocobase/schema':
 | 
			
		||||
        specifier: workspace:*
 | 
			
		||||
        version: link:../../../core/schema
 | 
			
		||||
      '@types/lodash':
 | 
			
		||||
        specifier: ^4.17.0
 | 
			
		||||
        version: 4.17.0
 | 
			
		||||
      antd:
 | 
			
		||||
        specifier: 5.16.1
 | 
			
		||||
        version: 5.16.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      antd-mobile:
 | 
			
		||||
        specifier: ^5.35.0
 | 
			
		||||
        version: 5.35.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      antd-mobile-icons:
 | 
			
		||||
        specifier: ^0.3.0
 | 
			
		||||
        version: 0.3.0
 | 
			
		||||
      classnames:
 | 
			
		||||
        specifier: ^2.3.1
 | 
			
		||||
        version: 2.5.1
 | 
			
		||||
      lodash:
 | 
			
		||||
        specifier: 4.17.21
 | 
			
		||||
        version: 4.17.21
 | 
			
		||||
      react-i18next:
 | 
			
		||||
        specifier: ^11.15.1
 | 
			
		||||
        version: 11.18.6(i18next@22.5.1)(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
  packages/plugins/@hera/plugin-audit-logs:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@nocobase/client':
 | 
			
		||||
@ -9377,7 +9420,7 @@ packages:
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      react: '>=16.3.0'
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.23.6
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      hoist-non-react-statics: 3.3.2
 | 
			
		||||
      react: 18.1.0
 | 
			
		||||
      react-is: 16.13.1
 | 
			
		||||
@ -9388,7 +9431,7 @@ packages:
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      react: '>=16.3.0'
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.23.6
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      hoist-non-react-statics: 3.3.2
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-is: 16.13.1
 | 
			
		||||
@ -9396,7 +9439,7 @@ packages:
 | 
			
		||||
  /@manypkg/find-root@1.1.0:
 | 
			
		||||
    resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.0
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      '@types/node': 20.12.7
 | 
			
		||||
      find-up: 4.1.0
 | 
			
		||||
      fs-extra: 8.1.0
 | 
			
		||||
@ -10123,7 +10166,7 @@ packages:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      '@ctrl/tinycolor': 3.6.1
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -10134,7 +10177,7 @@ packages:
 | 
			
		||||
      react-dom: '>=16.9.0'
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -10153,7 +10196,7 @@ packages:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -10166,7 +10209,7 @@ packages:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -10181,7 +10224,7 @@ packages:
 | 
			
		||||
      '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      '@rc-component/trigger': 2.1.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -10192,12 +10235,12 @@ packages:
 | 
			
		||||
      react: '>=16.9.0'
 | 
			
		||||
      react-dom: '>=16.9.0'
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.0
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
    dev: false
 | 
			
		||||
@ -10221,13 +10264,13 @@ packages:
 | 
			
		||||
  /@react-pdf/fns@2.2.1:
 | 
			
		||||
    resolution: {integrity: sha512-s78aDg0vDYaijU5lLOCsUD+qinQbfOvcNeaoX9AiE7+kZzzCo6B/nX+l48cmt9OosJmvZvE9DWR9cLhrhOi2pA==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.0
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@react-pdf/font@2.4.4:
 | 
			
		||||
    resolution: {integrity: sha512-yjK5eSY+LcbxS0m+sOYln8GdgIbUgti4xjwf14kx8OSsOMJQJyHFALHMh2cLcKJR9yZeqVDo1FwCsY6gw1yCkg==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.0
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      '@react-pdf/types': 2.4.1
 | 
			
		||||
      cross-fetch: 3.1.8
 | 
			
		||||
      fontkit: 2.0.2
 | 
			
		||||
@ -10239,7 +10282,7 @@ packages:
 | 
			
		||||
  /@react-pdf/image@2.3.4:
 | 
			
		||||
    resolution: {integrity: sha512-IE34l7gfTdaxXe3XR9240xMZsFdxF1myIwmEWK28XoeTaucUPAUyOiNcFSGRT59vNuZVBuakYz3BlGGrkvAPVQ==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.0
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      '@react-pdf/png-js': 2.3.1
 | 
			
		||||
      cross-fetch: 3.1.8
 | 
			
		||||
      jay-peg: 1.0.1
 | 
			
		||||
@ -10250,7 +10293,7 @@ packages:
 | 
			
		||||
  /@react-pdf/layout@3.11.2:
 | 
			
		||||
    resolution: {integrity: sha512-5EiHJ+Eb0odqnkWll9pWbTp+dwH1QRm7mOXDMiklqIWK98eI7e3cEae5Dgr0TtdnB7KgPW9Tvul2CwRJTwq54A==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.0
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      '@react-pdf/fns': 2.2.1
 | 
			
		||||
      '@react-pdf/image': 2.3.4
 | 
			
		||||
      '@react-pdf/pdfkit': 3.1.6
 | 
			
		||||
@ -10269,7 +10312,7 @@ packages:
 | 
			
		||||
  /@react-pdf/pdfkit@3.1.6:
 | 
			
		||||
    resolution: {integrity: sha512-U96VVhphniDBsLbmeJHgEml15nng8cr90mmEfPATh98gsqg6wev0avBr4k9XPjLdaN1f2xTXD4VdlaMYJZ+n7Q==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.0
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      '@react-pdf/png-js': 2.3.1
 | 
			
		||||
      browserify-zlib: 0.2.0
 | 
			
		||||
      crypto-js: 4.2.0
 | 
			
		||||
@ -10291,7 +10334,7 @@ packages:
 | 
			
		||||
  /@react-pdf/render@3.4.3:
 | 
			
		||||
    resolution: {integrity: sha512-9LL059vfwrK1gA0uIA4utpQ/pUH9EW/yia4bb7pCoARs8IlupY5UP265jgax15ua0p+MdUwShZzQ9rilu7kGsw==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.0
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      '@react-pdf/fns': 2.2.1
 | 
			
		||||
      '@react-pdf/primitives': 3.1.1
 | 
			
		||||
      '@react-pdf/textkit': 4.4.1
 | 
			
		||||
@ -10328,7 +10371,7 @@ packages:
 | 
			
		||||
  /@react-pdf/stylesheet@4.2.4:
 | 
			
		||||
    resolution: {integrity: sha512-CgRfDzeMtnV0GL7zSn381NubmgwqKhFKcK1YrWX3azl/KWVh52jjFd3HWi6dvcETNT862mjWz5MnExe4WOBJXA==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.0
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      '@react-pdf/fns': 2.2.1
 | 
			
		||||
      '@react-pdf/types': 2.4.1
 | 
			
		||||
      color-string: 1.9.1
 | 
			
		||||
@ -10340,7 +10383,7 @@ packages:
 | 
			
		||||
  /@react-pdf/textkit@4.4.1:
 | 
			
		||||
    resolution: {integrity: sha512-Jl9wdTqIvJ5pX+vAGz0EOhP7ut5Two9H6CzTKo/YYPeD79cM2yTXF3JzTERBC28y7LR0Waq9D2LHQjI+b/EYUQ==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.0
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      '@react-pdf/fns': 2.2.1
 | 
			
		||||
      bidi-js: 1.0.3
 | 
			
		||||
      hyphen: 1.10.4
 | 
			
		||||
@ -12779,7 +12822,7 @@ packages:
 | 
			
		||||
  /@umijs/history@5.3.1:
 | 
			
		||||
    resolution: {integrity: sha512-/e0cEGrR2bIWQD7pRl3dl9dcyRGeC9hoW0OCvUTT/hjY0EfUrkd6G8ZanVghPMpDuY5usxq9GVcvrT8KNXLWvA==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.23.6
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      query-string: 6.14.1
 | 
			
		||||
 | 
			
		||||
  /@umijs/lint@4.1.8(eslint@8.55.0)(stylelint@14.16.1)(typescript@5.4.4):
 | 
			
		||||
@ -17059,7 +17102,7 @@ packages:
 | 
			
		||||
  /dom-helpers@5.2.1:
 | 
			
		||||
    resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.0
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      csstype: 3.1.3
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
@ -19658,7 +19701,7 @@ packages:
 | 
			
		||||
  /history@5.3.0:
 | 
			
		||||
    resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.23.6
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
 | 
			
		||||
  /hmac-drbg@1.0.1:
 | 
			
		||||
    resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==}
 | 
			
		||||
@ -20150,6 +20193,7 @@ packages:
 | 
			
		||||
 | 
			
		||||
  /ip@2.0.0:
 | 
			
		||||
    resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==}
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /is-absolute@1.0.0:
 | 
			
		||||
@ -24880,10 +24924,10 @@ packages:
 | 
			
		||||
      react: '>=16.9.0'
 | 
			
		||||
      react-dom: '>=16.9.0'
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.0
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      dom-align: 1.12.4
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
      resize-observer-polyfill: 1.5.1
 | 
			
		||||
@ -24900,7 +24944,7 @@ packages:
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-select: 14.13.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-tree: 5.8.5(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -24912,7 +24956,7 @@ packages:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -24925,7 +24969,7 @@ packages:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -24939,7 +24983,7 @@ packages:
 | 
			
		||||
      '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -24953,7 +24997,7 @@ packages:
 | 
			
		||||
      '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -24966,7 +25010,7 @@ packages:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      '@rc-component/trigger': 2.1.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -24993,7 +25037,7 @@ packages:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      async-validator: 4.2.5
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -25008,7 +25052,7 @@ packages:
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-dialog: 9.4.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -25034,7 +25078,7 @@ packages:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -25050,7 +25094,7 @@ packages:
 | 
			
		||||
      rc-input: 1.4.5(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-menu: 9.13.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-textarea: 1.6.3(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -25091,7 +25135,7 @@ packages:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -25116,7 +25160,7 @@ packages:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -25146,7 +25190,7 @@ packages:
 | 
			
		||||
      dayjs: 1.11.10
 | 
			
		||||
      rc-overflow: 1.3.2(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -25158,7 +25202,7 @@ packages:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -25171,7 +25215,7 @@ packages:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -25197,7 +25241,7 @@ packages:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -25208,12 +25252,12 @@ packages:
 | 
			
		||||
      react: '*'
 | 
			
		||||
      react-dom: '*'
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.0
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-overflow: 1.3.2(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-trigger: 5.3.4(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-virtual-list: 3.11.4(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
@ -25263,7 +25307,7 @@ packages:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -25276,7 +25320,7 @@ packages:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -25288,7 +25332,7 @@ packages:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -25303,7 +25347,7 @@ packages:
 | 
			
		||||
      '@rc-component/context': 1.4.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-virtual-list: 3.11.4(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
@ -25321,7 +25365,7 @@ packages:
 | 
			
		||||
      rc-menu: 9.13.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -25376,7 +25420,7 @@ packages:
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-select: 14.13.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-tree: 5.8.5(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -25402,10 +25446,10 @@ packages:
 | 
			
		||||
      react: '*'
 | 
			
		||||
      react-dom: '*'
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.0
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-virtual-list: 3.11.4(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
@ -25449,11 +25493,11 @@ packages:
 | 
			
		||||
      react: '>=16.9.0'
 | 
			
		||||
      react-dom: '>=16.9.0'
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.0
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-align: 4.0.15(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
    dev: true
 | 
			
		||||
@ -25466,7 +25510,7 @@ packages:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
 | 
			
		||||
@ -25502,7 +25546,7 @@ packages:
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      classnames: 2.5.1
 | 
			
		||||
      rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0)
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
      react-dom: 18.2.0(react@18.2.0)
 | 
			
		||||
    dev: false
 | 
			
		||||
@ -25616,7 +25660,7 @@ packages:
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      react: '>=16.13.1'
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.0
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
@ -25640,7 +25684,7 @@ packages:
 | 
			
		||||
      react: ^16.6.0 || ^17.0.0 || ^18.0.0
 | 
			
		||||
      react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.23.6
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      invariant: 2.2.4
 | 
			
		||||
      prop-types: 15.8.1
 | 
			
		||||
      react: 18.1.0
 | 
			
		||||
@ -25654,7 +25698,7 @@ packages:
 | 
			
		||||
      react: ^16.6.0 || ^17.0.0 || ^18.0.0
 | 
			
		||||
      react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.23.6
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      invariant: 2.2.4
 | 
			
		||||
      prop-types: 15.8.1
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
@ -25772,7 +25816,7 @@ packages:
 | 
			
		||||
      react: '>=16.3.0'
 | 
			
		||||
      react-dom: '>=16.3.0'
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.0
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      '@popperjs/core': 2.11.8
 | 
			
		||||
      '@restart/hooks': 0.4.15(react@18.2.0)
 | 
			
		||||
      '@types/warning': 3.0.3
 | 
			
		||||
@ -27177,6 +27221,7 @@ packages:
 | 
			
		||||
  /smart-buffer@4.2.0:
 | 
			
		||||
    resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
 | 
			
		||||
    engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /smartwrap@2.0.2:
 | 
			
		||||
@ -29129,7 +29174,7 @@ packages:
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      react: '>=15.0.0'
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/runtime': 7.24.0
 | 
			
		||||
      '@babel/runtime': 7.24.4
 | 
			
		||||
      '@types/react': 18.2.75
 | 
			
		||||
      invariant: 2.2.4
 | 
			
		||||
      react: 18.2.0
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user