李金
7 months ago
31 changed files with 1294 additions and 218 deletions
-
1package.json
-
17src/App.tsx
-
61src/components/config-provider/index.tsx
-
111src/components/icon/action/ActionIcon.tsx
-
37src/components/icon/action/Icons.tsx
-
8src/components/icon/action/index.tsx
-
37src/components/icon/action/style.ts
-
26src/components/icon/picker/Display.tsx
-
42src/components/icon/picker/IconRender.tsx
-
12src/components/icon/picker/index.tsx
-
15src/components/loading/FetchLoading.tsx
-
28src/components/loading/index.tsx
-
81src/components/loading/style.ts
-
11src/layout/RootLayout.tsx
-
127src/pages/system/menus/index.tsx
-
32src/pages/system/menus/store.ts
-
6src/routes.tsx
-
43src/service/base.ts
-
28src/service/system.ts
-
12src/store/route.ts
-
31src/store/system.ts
-
47src/store/user.ts
-
29src/theme/index.ts
-
15src/theme/themes/antdTheme.ts
-
19src/theme/themes/darkAlgorithm.ts
-
3src/theme/themes/index.ts
-
23src/theme/themes/token.ts
-
83src/types.d.ts
-
107src/utils/index.ts
-
33src/utils/uuid.ts
-
387yarn.lock
@ -0,0 +1,61 @@ |
|||
import { ConfigProvider as AntdConfigProvider } from 'antd' |
|||
import { AntdToken, ThemeAppearance, useAntdToken, useThemeMode } from 'antd-style' |
|||
import type { OverrideToken } from 'antd/es/theme/interface' |
|||
import type { FC, ReactNode } from 'react' |
|||
import { ThemeProvider, createProAntdTheme, getProToken } from '@/theme' |
|||
|
|||
export const useProAntdTheme = (appearance: ThemeAppearance) => { |
|||
const token = useAntdToken() |
|||
const themeConfig = createProAntdTheme(appearance) |
|||
|
|||
const controlToken: Partial<AntdToken> = { |
|||
colorBgContainer: token?.colorFillQuaternary, |
|||
colorBorder: 'transparent', |
|||
controlOutline: 'transparent', |
|||
} |
|||
|
|||
themeConfig.components = { |
|||
Input: controlToken, |
|||
InputNumber: controlToken, |
|||
Select: controlToken, |
|||
Tree: { |
|||
colorBgContainer: 'transparent', |
|||
}, |
|||
TreeSelect: controlToken, |
|||
} |
|||
|
|||
return themeConfig |
|||
} |
|||
|
|||
export interface ConfigProviderProps { |
|||
componentToken?: OverrideToken; |
|||
children: ReactNode; |
|||
} |
|||
|
|||
export const ConfigProvider: FC<ConfigProviderProps> = ({ children, componentToken }) => { |
|||
const { appearance, themeMode } = useThemeMode() |
|||
const proTheme = useProAntdTheme(appearance) |
|||
proTheme.components = { ...proTheme.components, ...componentToken } |
|||
|
|||
return ( |
|||
<AntdConfigProvider theme={proTheme}> |
|||
<ThemeProvider |
|||
appearance={appearance} |
|||
themeMode={themeMode} |
|||
// 以下都是自定义主题
|
|||
theme={createProAntdTheme} |
|||
customToken={getProToken} |
|||
> |
|||
{children} |
|||
</ThemeProvider> |
|||
</AntdConfigProvider> |
|||
) |
|||
} |
|||
|
|||
export const withProvider = (Component) => (props) => { |
|||
return ( |
|||
<ConfigProvider> |
|||
<Component {...props} /> |
|||
</ConfigProvider> |
|||
) |
|||
} |
@ -0,0 +1,111 @@ |
|||
import type { ButtonProps, TooltipProps } from 'antd' |
|||
import { Button, Tooltip } from 'antd' |
|||
import type { CSSProperties, FC } from 'react' |
|||
import { ConfigProvider } from '@/components/config-provider' |
|||
import { useStyles } from './style' |
|||
|
|||
/** |
|||
* @title 动作图标属性 |
|||
* @description 继承自 `Button` 组件所有属性,除了 `title`, `type` 和 `size` |
|||
*/ |
|||
export interface ActionIconProps extends Omit<ButtonProps, 'title' | 'size'> { |
|||
/** |
|||
* @title 鼠标类型 |
|||
*/ |
|||
cursor?: CSSProperties['cursor']; |
|||
/** |
|||
* @title 动作提示 |
|||
*/ |
|||
title?: TooltipProps['title']; |
|||
/** |
|||
* @title 提示位置 |
|||
*/ |
|||
placement?: TooltipProps['placement']; |
|||
/** |
|||
* @title 图标 |
|||
*/ |
|||
icon: ButtonProps['icon']; |
|||
/** |
|||
* @title 点击回调 |
|||
*/ |
|||
onClick?: ButtonProps['onClick']; |
|||
/** |
|||
* @title 图标尺寸 |
|||
*/ |
|||
size?: 'default' | 'large' | number; |
|||
/** |
|||
* @description 鼠标移入时候的延迟tooltip时间,默认 0.5 |
|||
* @default 0.5 |
|||
*/ |
|||
tooltipDelay?: number; |
|||
/** |
|||
* @description 是否展示小箭头,默认不展示 |
|||
* @default false |
|||
*/ |
|||
arrow?: boolean; |
|||
} |
|||
|
|||
const BaseActionIcon: FC<ActionIconProps> = ({ |
|||
placement, |
|||
title, |
|||
icon, |
|||
cursor, |
|||
onClick, |
|||
className, |
|||
arrow = false, |
|||
size = 'default', |
|||
tooltipDelay = 0.5, |
|||
...restProps |
|||
}) => { |
|||
const { styles, cx } = useStyles({ size }) |
|||
|
|||
const Icon = ( |
|||
<Button |
|||
icon={icon} |
|||
className={cx(styles.container, className)} |
|||
type={'text'} |
|||
style={{ cursor }} |
|||
size={typeof size === 'number' || size === 'default' ? 'middle' : size} |
|||
{...restProps} |
|||
onClick={onClick} |
|||
/> |
|||
) |
|||
|
|||
return ( |
|||
<> |
|||
{!title ? ( |
|||
Icon |
|||
) : ( |
|||
<Tooltip |
|||
arrow={arrow} |
|||
overlayClassName={styles.tooltip} |
|||
title={title} |
|||
mouseEnterDelay={tooltipDelay} |
|||
placement={placement} |
|||
> |
|||
{Icon} |
|||
</Tooltip> |
|||
)} |
|||
</> |
|||
) |
|||
} |
|||
|
|||
const ActionIcon = (props: ActionIconProps) => { |
|||
const { size } = props || {} |
|||
const { theme: token } = useStyles({ size }) |
|||
|
|||
return ( |
|||
<ConfigProvider |
|||
componentToken={{ |
|||
Button: { |
|||
colorText: token.colorTextTertiary, |
|||
colorBgTextHover: token.colorFillSecondary, |
|||
colorBgTextActive: token.colorFill, |
|||
}, |
|||
}} |
|||
> |
|||
<BaseActionIcon {...props} /> |
|||
</ConfigProvider> |
|||
) |
|||
} |
|||
export default ActionIcon |
@ -0,0 +1,37 @@ |
|||
import { DeleteFilled, EditFilled } from '@ant-design/icons' |
|||
import type { FC } from 'react' |
|||
|
|||
import type { ActionIconProps } from './ActionIcon' |
|||
import ActionIcon from './ActionIcon' |
|||
|
|||
export type IconsProps = Omit<ActionIconProps, 'icon'>; |
|||
|
|||
const HandleIcon = ( |
|||
<svg viewBox="0 0 20 20" width="16" fill="currentColor"> |
|||
<path |
|||
d="M7 2a2 2 0 1 0 .001 4.001A2 2 0 0 0 7 2zm0 6a2 2 0 1 0 .001 4.001A2 2 0 0 0 7 8zm0 6a2 2 0 1 0 .001 4.001A2 2 0 0 0 7 14zm6-8a2 2 0 1 0-.001-4.001A2 2 0 0 0 13 6zm0 2a2 2 0 1 0 .001 4.001A2 2 0 0 0 13 8zm0 6a2 2 0 1 0 .001 4.001A2 2 0 0 0 13 14z"/> |
|||
</svg> |
|||
) |
|||
|
|||
const CollapseIcon = ( |
|||
<svg width="10" viewBox="0 0 70 41" fill="currentColor"> |
|||
<path |
|||
d="M30.76 39.2402C31.885 40.3638 33.41 40.995 35 40.995C36.59 40.995 38.115 40.3638 39.24 39.2402L68.24 10.2402C69.2998 9.10284 69.8768 7.59846 69.8494 6.04406C69.822 4.48965 69.1923 3.00657 68.093 1.90726C66.9937 0.807959 65.5106 0.178263 63.9562 0.150837C62.4018 0.123411 60.8974 0.700397 59.76 1.76024L35 26.5102L10.24 1.76024C9.10259 0.700397 7.59822 0.123411 6.04381 0.150837C4.4894 0.178263 3.00632 0.807959 1.90702 1.90726C0.807714 3.00657 0.178019 4.48965 0.150593 6.04406C0.123167 7.59846 0.700153 9.10284 1.75999 10.2402L30.76 39.2402Z"/> |
|||
</svg> |
|||
) |
|||
|
|||
export const CollapseAction: FC<IconsProps> = (props) => ( |
|||
<ActionIcon icon={CollapseIcon} {...props} /> |
|||
) |
|||
|
|||
export const HandleAction: FC<IconsProps> = (props) => ( |
|||
<ActionIcon icon={HandleIcon} {...props} /> |
|||
) |
|||
|
|||
export const DeleteAction: FC<IconsProps> = (props) => ( |
|||
<ActionIcon icon={<DeleteFilled/>} {...props} /> |
|||
) |
|||
|
|||
export const EditAction: FC<IconsProps> = (props) => ( |
|||
<ActionIcon icon={<EditFilled/>} {...props} /> |
|||
) |
@ -0,0 +1,8 @@ |
|||
import ActionIcon from './ActionIcon' |
|||
|
|||
export { default as ActionIcon } from './ActionIcon' |
|||
export type { ActionIconProps } from './ActionIcon' |
|||
export * from './Icons' |
|||
// 内部使用统一图标语义
|
|||
export type { IconsProps } from './Icons' |
|||
export default ActionIcon |
@ -0,0 +1,37 @@ |
|||
import { createStyles } from '@/theme' |
|||
|
|||
export const useStyles = createStyles(({ token, css, cx, prefixCls }, { size, className }) => { |
|||
const prefix = `${prefixCls}-${token.proPrefix}-icon` |
|||
const sizeBoundary = |
|||
typeof size === 'number' |
|||
? css`
|
|||
width: ${size}px !important; |
|||
height: ${size}px !important; |
|||
`
|
|||
: '' |
|||
|
|||
const button = css`
|
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: center; |
|||
|
|||
&:hover { |
|||
color: ${token.colorText} !important; |
|||
} |
|||
|
|||
&:active { |
|||
scale: 0.8; |
|||
color: ${token.colorText}; |
|||
} |
|||
|
|||
transition: color 600ms ${token.motionEaseOut}, scale 400ms ${token.motionEaseOut}, |
|||
background-color 100ms ${token.motionEaseOut}; |
|||
`
|
|||
|
|||
return { |
|||
container: cx(prefix, button, sizeBoundary, className), |
|||
tooltip: css`
|
|||
pointer-events: none; |
|||
`,
|
|||
} |
|||
}) |
@ -0,0 +1,26 @@ |
|||
import { useToken } from '@/theme' |
|||
import React from 'react' |
|||
import Icon from '../index.tsx' |
|||
|
|||
const Display = () => { |
|||
const token = useToken() |
|||
const DefaultIcon = ( |
|||
<div |
|||
className={cx(css`
|
|||
width: 8px; |
|||
height: 8px; |
|||
border-radius: 50%; |
|||
background: ${token.colorFillContent}; |
|||
`)}
|
|||
/> |
|||
) |
|||
|
|||
return ( |
|||
<Icon |
|||
onClick={togglePanel} |
|||
icon={!icon ? DefaultIcon : <IconItem {...icon} />} |
|||
/> |
|||
) |
|||
} |
|||
|
|||
export default Display |
@ -0,0 +1,42 @@ |
|||
import type { FC } from 'react' |
|||
import { memo } from 'react' |
|||
import AntdIcons from '../contents/antdIcons' |
|||
import { customIconList, registerCustomIcon } from '../contents/customIcons' |
|||
|
|||
export interface IconRenderProps { |
|||
type: 'antd' | 'iconfont' | 'custom'; |
|||
componentName?: string; |
|||
props?: |
|||
| { |
|||
type?: string; |
|||
} |
|||
| any; |
|||
scriptUrl?: string; |
|||
} |
|||
|
|||
export interface IIconRender { |
|||
(props: IconRenderProps): JSX.Element; |
|||
|
|||
} |
|||
|
|||
const Render: FC<IconRenderProps> = memo( |
|||
({ type, componentName, props, scriptUrl }) => { |
|||
switch (type) { |
|||
case 'antd': |
|||
const Icon = AntdIcons[componentName] |
|||
return <Icon {...props} /> |
|||
|
|||
case 'iconfont': |
|||
const Iconfont = AntdIcons.createFromIconfontCN({ |
|||
scriptUrl, |
|||
}) |
|||
return <Iconfont {...props} /> |
|||
} |
|||
}, |
|||
) |
|||
|
|||
const IconIRender = Render as IIconRender |
|||
|
|||
IconIRender.registerCustomIcon = registerCustomIcon |
|||
|
|||
export default IconIRender |
@ -0,0 +1,12 @@ |
|||
import React from 'react' |
|||
|
|||
|
|||
const Index = () => { |
|||
return ( |
|||
<div> |
|||
|
|||
</div> |
|||
) |
|||
} |
|||
|
|||
export default Index |
@ -0,0 +1,15 @@ |
|||
import { useIsFetching, } from '@tanstack/react-query' |
|||
import Loading from './index.tsx' |
|||
|
|||
|
|||
const FetchLoading = () => { |
|||
|
|||
const isFetching = useIsFetching() |
|||
return ( |
|||
<> |
|||
<Loading loading={isFetching > 0}/> |
|||
</> |
|||
) |
|||
} |
|||
|
|||
export default FetchLoading |
@ -0,0 +1,28 @@ |
|||
import React from 'react' |
|||
import { useStyles } from './style.ts' |
|||
|
|||
interface ILoading { |
|||
loading: boolean, |
|||
className?: string |
|||
} |
|||
|
|||
export const Loading = ({ loading, className }: ILoading) => { |
|||
|
|||
const { styles, cx } = useStyles({ className }) |
|||
|
|||
return ( |
|||
<div className={cx(styles.container, styles.base, loading ? styles.visible : styles.hidden)}> |
|||
<div className={styles.centeredElement}> |
|||
<svg stroke="currentColor" fill="none" strokeWidth="0" viewBox="0 0 24 24" className={styles.svgIcon} |
|||
height="30px" width="30px" xmlns="http://www.w3.org/2000/svg"> |
|||
<path opacity="0.2" fillRule="evenodd" clipRule="evenodd" |
|||
d="M12 19C15.866 19 19 15.866 19 12C19 8.13401 15.866 5 12 5C8.13401 5 5 8.13401 5 12C5 15.866 8.13401 19 12 19ZM12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" |
|||
fill="currentColor"></path> |
|||
<path d="M2 12C2 6.47715 6.47715 2 12 2V5C8.13401 5 5 8.13401 5 12H2Z" fill="currentColor"></path> |
|||
</svg> |
|||
</div> |
|||
</div> |
|||
) |
|||
} |
|||
|
|||
export default Loading |
@ -0,0 +1,81 @@ |
|||
import { createStyles } from '@/theme' |
|||
|
|||
// Define styles using createStyles
|
|||
export const useStyles = createStyles(({ token, css, cx, prefixCls }, { className }) => { |
|||
const prefix = `${prefixCls}-${token.proPrefix}-loading` |
|||
|
|||
|
|||
return { |
|||
container: cx(prefix, className), |
|||
base: css`
|
|||
|
|||
--tw-translate-x: 0; |
|||
--tw-translate-y: -100%; |
|||
|
|||
position: fixed; |
|||
top: 0; |
|||
left: 0; |
|||
width: 100%; |
|||
height: 300px; |
|||
transition: all 300ms; |
|||
z-index: 1130; |
|||
background: radial-gradient(closest-side, rgba(0, 10, 40, 0.2) 0%, rgba(0, 0, 0, 0) 100%); |
|||
transform: translate(0, var(--tw-translate-y)) rotate(0) skew(0) skewY(0) scaleX(0) scaleY(0); |
|||
|
|||
&.dark { |
|||
height: 200px; |
|||
background-color: rgba(255, 255, 255, 0.1); |
|||
border-radius: 100%; |
|||
} |
|||
`,
|
|||
hidden: css`
|
|||
opacity: 0; |
|||
transform: translateY(-100%); |
|||
`,
|
|||
visible: css`
|
|||
opacity: 1; |
|||
transform: translateY(-35%); |
|||
`,
|
|||
centeredElement: css`
|
|||
--tw-shadow: 0 10px 15px -3px rgba(0, 0, 0, .05), 0 4px 6px -2px rgba(0, 0, 0, .03); |
|||
--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -2px var(--tw-shadow-color); |
|||
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); |
|||
padding: 0.5rem; |
|||
background-color: rgba(255, 255, 255, 0.8); |
|||
border-radius: 0.5rem; |
|||
--tw-translate-y: 30px; |
|||
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); |
|||
--tw-translate-x: -50%; |
|||
top: 50%; |
|||
left: 50%; |
|||
position: absolute; |
|||
`,
|
|||
svgIcon: css`
|
|||
display: block; |
|||
vertical-align: middle; |
|||
stroke: currentColor; |
|||
fill: none; |
|||
stroke-width: 0; |
|||
height: 30px; |
|||
width: 30px; |
|||
color: rgb(17 24 39 / var(--tw-text-opacity)); |
|||
font-size: 1.875rem; |
|||
line-height: 2.25rem; |
|||
animation-timeline: auto; |
|||
animation-range-start: normal; |
|||
animation-range-end: normal; |
|||
animation: 1s linear 0s infinite normal none running spin; |
|||
|
|||
@keyframes spin { |
|||
from { |
|||
transform: rotate(0deg); |
|||
} |
|||
to { |
|||
transform: rotate(360deg); |
|||
} |
|||
} |
|||
`
|
|||
} |
|||
}) |
|||
|
|||
|
@ -1,65 +1,98 @@ |
|||
import { useTranslation } from '@/i18n.ts' |
|||
import { FlattenData } from '@/types' |
|||
import { IMenu } from '@/types/menus' |
|||
import { flattenTree } from '@/utils' |
|||
import { PageContainer, ProCard } from '@ant-design/pro-components' |
|||
import { Button, Space, Tree } from 'antd' |
|||
import { Button, Form, Input, Space, Tree } from 'antd' |
|||
import { useAtom, useAtomValue } from 'jotai' |
|||
import { menuDataAtom, selectedMenuAtom, selectedMenuIdAtom } from '@/store/system.ts' |
|||
import { formatterMenuData } from '@/utils/uuid.ts' |
|||
import { useEffect, useRef } from 'react' |
|||
import { menuDataAtom, selectedMenuAtom, selectedMenuIdAtom } from './store.ts' |
|||
import { CloseOutlined, PlusOutlined } from '@ant-design/icons' |
|||
import { createLazyFileRoute } from '@tanstack/react-router' |
|||
import { createLazyFileRoute } from '@tanstack/react-router' |
|||
|
|||
const Menus = () => { |
|||
|
|||
const { data, isLoading } = useAtomValue(menuDataAtom) |
|||
const [ currentMenu, setCurrentMenu ] = useAtom(selectedMenuAtom) |
|||
const [ selectedKey, setSelectedKey ] = useAtom(selectedMenuIdAtom) |
|||
const { t } = useTranslation() |
|||
const { data = [], isLoading } = useAtomValue(menuDataAtom) |
|||
const [ currentMenu, setCurrentMenu ] = useAtom(selectedMenuAtom) |
|||
const [ selectedKey, setSelectedKey ] = useAtom(selectedMenuIdAtom) |
|||
const flattenMenusRef = useRef<FlattenData<IMenu>[]>([]) |
|||
|
|||
const treeData = formatterMenuData(data!) |
|||
useEffect(() => { |
|||
|
|||
return ( |
|||
<PageContainer |
|||
breadcrumbRender={false} title={false}> |
|||
<ProCard split={'vertical'} |
|||
style={{ |
|||
height: 'calc(100vh - 164px)', |
|||
overflow: 'auto', |
|||
}} |
|||
> |
|||
<ProCard title={'导航'} |
|||
colSpan={'350px'} |
|||
extra={ |
|||
<Space> |
|||
<Button type="primary" size={'small'} icon={<PlusOutlined/>} shape={'circle'}/> |
|||
<Button type="default" danger={true} size={'small'} icon={<CloseOutlined/>} |
|||
shape={'circle'}/> |
|||
if (data.length) { |
|||
flattenMenusRef.current = flattenTree<IMenu>(data) |
|||
console.log(flattenMenusRef.current) |
|||
} |
|||
|
|||
</Space> |
|||
} |
|||
loading={isLoading}> |
|||
<Tree treeData={treeData} |
|||
}, [ data ]) |
|||
|
|||
onSelect={(item) => { |
|||
setSelectedKey(item[0]) |
|||
setCurrentMenu( data?.find((menu) => menu.id === item[0])!) |
|||
}} |
|||
checkable={true} showIcon={true}/> |
|||
</ProCard> |
|||
<ProCard title={'配置'}> |
|||
return ( |
|||
<PageContainer |
|||
breadcrumbRender={false} title={false}> |
|||
<ProCard split={'vertical'} |
|||
style={{ |
|||
height: 'calc(100vh - 164px)', |
|||
overflow: 'auto', |
|||
}} |
|||
> |
|||
<ProCard title={'导航'} |
|||
colSpan={'350px'} |
|||
extra={ |
|||
<Space> |
|||
<Button type="primary" size={'small'} icon={<PlusOutlined/>} shape={'circle'}/> |
|||
<Button type="default" danger={true} size={'small'} icon={<CloseOutlined/>} |
|||
shape={'circle'}/> |
|||
|
|||
{selectedKey} |
|||
{ |
|||
JSON.stringify(currentMenu) |
|||
} |
|||
</Space> |
|||
} |
|||
loading={isLoading}> |
|||
<Tree treeData={data} |
|||
fieldNames={{ |
|||
title: 'title', |
|||
key: 'id' |
|||
}} |
|||
onSelect={(item) => { |
|||
console.log(item) |
|||
setSelectedKey(item[0]) |
|||
setCurrentMenu(flattenMenusRef.current?.find((menu) => menu.id === item[0])) |
|||
}} |
|||
checkable={true} |
|||
showIcon={false} |
|||
/> |
|||
</ProCard> |
|||
<ProCard title={'配置'} style={{ |
|||
overflowX: 'hidden' |
|||
}}> |
|||
|
|||
</ProCard> |
|||
<ProCard title={'按钮'} colSpan={7}> |
|||
<Form |
|||
initialValues={currentMenu} |
|||
labelCol={{ flex: '110px' }} |
|||
labelAlign="left" |
|||
labelWrap |
|||
wrapperCol={{ flex: 1 }} |
|||
colon={false} |
|||
style={{ maxWidth: 600 }} |
|||
> |
|||
<Form.Item label={t('system.menus.form.title', '菜单名称')} name={'title'}> |
|||
<Input/> |
|||
</Form.Item> |
|||
<Form.Item label={t('system.menus.form.parent', '上级菜单')}> |
|||
<Input/> |
|||
</Form.Item> |
|||
</Form> |
|||
|
|||
</ProCard> |
|||
</ProCard> |
|||
</PageContainer> |
|||
) |
|||
</ProCard> |
|||
<ProCard title={'按钮'} colSpan={7}> |
|||
|
|||
</ProCard> |
|||
</ProCard> |
|||
</PageContainer> |
|||
) |
|||
} |
|||
|
|||
export const Route = createLazyFileRoute("/system/menus")({ |
|||
component: Menus |
|||
export const Route = createLazyFileRoute('/system/menus')({ |
|||
component: Menus |
|||
}) |
|||
|
|||
|
@ -0,0 +1,32 @@ |
|||
import systemServ from '@/service/system.ts' |
|||
import { IPage, IPageResult, MenuItem } from '@/types' |
|||
import { IMenu } from '@/types/menus' |
|||
import { atomWithQuery } from 'jotai-tanstack-query' |
|||
import { atom } from 'jotai/index' |
|||
|
|||
export const menuPageAtom = atom<IPage>({}) |
|||
|
|||
export const menuDataAtom = atomWithQuery<IPageResult<IMenu[]>>((get) => { |
|||
|
|||
return { |
|||
queryKey: [ 'menus', get(menuPageAtom) ], |
|||
queryFn: async ({ queryKey: [ , page ] }) => { |
|||
return await systemServ.menus.list(page) |
|||
}, |
|||
select: (data) => { |
|||
return data.rows ?? [] |
|||
} |
|||
} |
|||
}) |
|||
|
|||
|
|||
export const selectedMenuIdAtom = atom<number>(0) |
|||
export const selectedMenuAtom = atom<MenuItem | unknown>(undefined) |
|||
export const byIdMenuAtom = atomWithQuery((get) => ({ |
|||
queryKey: [ 'selectedMenu', get(selectedMenuIdAtom) ], |
|||
queryFn: async ({ queryKey: [ , id ] }) => { |
|||
return await systemServ.menus.info(id as number) |
|||
}, |
|||
select: data => data.data, |
|||
})) |
|||
|
@ -1,31 +1,28 @@ |
|||
import { request, AxiosRequestConfig } from '@/request.ts' |
|||
import { IPage } from '@/types' |
|||
|
|||
type TPage = { |
|||
page: number |
|||
pageSize: number |
|||
} |
|||
|
|||
export const createCURD = <TParams, TResult>(api: string, options?: AxiosRequestConfig) => { |
|||
|
|||
return { |
|||
list: (params?: TParams & TPage) => { |
|||
return request.post<TResult[]>(api, { ...options, params }).then(data=>data.data) |
|||
}, |
|||
add: (data: TParams) => { |
|||
return request.post<TResult>(`${api}/add`, data, options) |
|||
}, |
|||
update: (id: number, data: TParams) => { |
|||
return request.put(`${api}/${id}`, data, options) |
|||
}, |
|||
delete: (id: number) => { |
|||
return request.delete(`${api}/delete`, { ...options, params: { id } }) |
|||
}, |
|||
batchDelete: (ids: number[]) => { |
|||
return request.delete(`${api}/deletes`, { ...options, params: { ids } }) |
|||
}, |
|||
info: (id: number) => { |
|||
return request.get<TResult>(`${api}/${id}`, options) |
|||
} |
|||
return { |
|||
list: (params?: TParams & IPage) => { |
|||
return request.post<TResult[]>(`${api}/list`, { ...options, params }).then(data => data.data) |
|||
}, |
|||
add: (data: TParams) => { |
|||
return request.post<TResult>(`${api}/add`, data, options) |
|||
}, |
|||
update: (id: number, data: TParams) => { |
|||
return request.put(`${api}/${id}`, data, options) |
|||
}, |
|||
delete: (id: number) => { |
|||
return request.delete(`${api}/delete`, { ...options, params: { id } }) |
|||
}, |
|||
batchDelete: (ids: number[]) => { |
|||
return request.delete(`${api}/deletes`, { ...options, params: { ids } }) |
|||
}, |
|||
info: (id: number) => { |
|||
return request.get<TResult>(`${api}/${id}`, options) |
|||
} |
|||
} |
|||
|
|||
} |
@ -0,0 +1,12 @@ |
|||
import { IRootContext } from '@/types' |
|||
import { atom } from 'jotai' |
|||
|
|||
export const routeContextAtom = atom<IRootContext>({}) |
|||
|
|||
export const updateRouteContextAtom = atom(null, (set, get, update) => { |
|||
console.log(update) |
|||
set(routeContextAtom, { |
|||
...get(routeContextAtom), |
|||
...update, |
|||
}) |
|||
}) |
@ -1,30 +1,47 @@ |
|||
import { appAtom } from '@/store/system.ts' |
|||
import { AxiosResponse } from 'axios' |
|||
import { atom } from 'jotai/index' |
|||
import { IAuth } from '@/types' |
|||
import { LoginRequest } from '@/types/login' |
|||
import { atomWithMutation } from 'jotai-tanstack-query' |
|||
import { atomWithMutation, atomWithQuery, queryClientAtom } from 'jotai-tanstack-query' |
|||
import systemServ from '@/service/system.ts' |
|||
import { isDev } from '@/utils' |
|||
import { formatMenuData, isDev } from '@/utils' |
|||
|
|||
export const authAtom = atom<IAuth>({ |
|||
isLogin: false, |
|||
authKey: [] |
|||
isLogin: false, |
|||
authKey: [] |
|||
}) |
|||
|
|||
const devLogin = { |
|||
username: 'SupperAdmin', |
|||
password: 'kk123456', |
|||
code: '123456' |
|||
username: 'SupperAdmin', |
|||
password: 'kk123456', |
|||
code: '123456' |
|||
} |
|||
export const loginFormAtom = atom<LoginRequest>({ |
|||
...(isDev ? devLogin : {}) |
|||
...(isDev ? devLogin : {}) |
|||
} as LoginRequest) |
|||
|
|||
export const loginAtom = atomWithMutation<any, LoginRequest>(() => ({ |
|||
mutationKey: [ 'login' ], |
|||
mutationFn: async (params) => { |
|||
return await systemServ.login(params) |
|||
}, |
|||
onSuccess: (data) => { |
|||
console.log('login success', data) |
|||
} |
|||
mutationKey: [ 'login' ], |
|||
mutationFn: async (params) => { |
|||
return await systemServ.login(params) |
|||
}, |
|||
onSuccess: () => { |
|||
// console.log('login success', data)
|
|||
} |
|||
})) |
|||
|
|||
export const userMenuDataAtom = atomWithQuery((get) => ({ |
|||
enabled: false, |
|||
queryKey: [ 'user_menus', get(appAtom).token ], |
|||
queryFn: async () => { |
|||
return await systemServ.user.menus() |
|||
}, |
|||
select: (data: AxiosResponse) => { |
|||
return formatMenuData(data.data.rows as any ?? []) |
|||
}, |
|||
initialData: () => { |
|||
const queryClient = get(queryClientAtom) |
|||
return queryClient.getQueryData([ 'user_menus', get(appAtom).token ]) |
|||
}, |
|||
})) |
@ -0,0 +1,29 @@ |
|||
import { createInstance } from 'antd-style' |
|||
import { ProThemeToken } from './themes' |
|||
|
|||
type ProToken = { |
|||
proPrefix: string; |
|||
}; |
|||
declare module 'antd-style' { |
|||
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|||
export interface CustomToken extends ProToken, ProThemeToken { |
|||
} |
|||
} |
|||
|
|||
const { createStyles, ThemeProvider } = createInstance<ProToken>({ |
|||
customToken: { |
|||
proPrefix: 'pro', |
|||
}, |
|||
}) |
|||
|
|||
export { |
|||
createGlobalStyle, |
|||
css, |
|||
cx, |
|||
injectGlobal, |
|||
keyframes, |
|||
useAntdToken as useToken, |
|||
type AntdToken, |
|||
} from 'antd-style' |
|||
export * from './themes' |
|||
export { ThemeProvider, createStyles } |
@ -0,0 +1,15 @@ |
|||
import { theme, ThemeConfig } from 'antd' |
|||
import { ThemeAppearance } from 'antd-style' |
|||
import { proDarkAlgorithm } from '@/theme' |
|||
|
|||
export const createProAntdTheme = (appearance: ThemeAppearance) => { |
|||
const themeConfig: ThemeConfig = { |
|||
algorithm: [ theme.compactAlgorithm ], |
|||
} |
|||
|
|||
if (appearance === 'dark') { |
|||
(themeConfig.algorithm as Array<any>).push(proDarkAlgorithm) |
|||
} |
|||
|
|||
return themeConfig |
|||
} |
@ -0,0 +1,19 @@ |
|||
import { theme } from 'antd' |
|||
import type { MappingAlgorithm } from 'antd/es/theme/interface' |
|||
|
|||
/** |
|||
* studio 暗色模式下算法 |
|||
* @param seedToken |
|||
* @param mapToken |
|||
*/ |
|||
export const proDarkAlgorithm: MappingAlgorithm = (seedToken, mapToken) => { |
|||
const mergeToken = theme.darkAlgorithm(seedToken, mapToken) |
|||
|
|||
return { |
|||
...mergeToken, |
|||
|
|||
colorBgLayout: '#20252b', |
|||
colorBgContainer: '#282c34', |
|||
colorBgElevated: '#32363e', |
|||
} |
|||
} |
@ -0,0 +1,3 @@ |
|||
export * from './antdTheme' |
|||
export * from './darkAlgorithm' |
|||
export * from './token' |
@ -0,0 +1,23 @@ |
|||
import { GetCustomToken } from 'antd-style' |
|||
|
|||
export interface ProThemeToken { |
|||
focusedOutlineColor: string; |
|||
colorTypeBoolean: string; |
|||
colorTypeNumber: string; |
|||
colorTypeString: string; |
|||
colorTypeBoolArray: string; |
|||
colorTypeNumberArray: string; |
|||
colorTypeStringArray: string; |
|||
} |
|||
|
|||
export const getProToken: GetCustomToken<ProThemeToken> = () => ({ |
|||
focusedOutlineColor: '#4c9ffe', |
|||
colorTypeBoolean: '#D8C152', |
|||
colorTypeNumber: '#5295C4', |
|||
colorTypeString: '#149E6D', |
|||
colorTypeBoolArray: '#D8C152', |
|||
colorTypeNumberArray: '#239BEF', |
|||
colorTypeStringArray: '#62AE8D', |
|||
}) |
|||
|
|||
export const themeToken = getProToken({} as any) |
@ -1,34 +1,93 @@ |
|||
import { IMenu } from '@/types/menus' |
|||
import { MenuItem } from '@/types' |
|||
import { FiledNames, FlattenData, MenuItem, TreeItem } from '@/types' |
|||
import { getIcon } from '@/components/icon' |
|||
import { TreeDataNode } from 'antd' |
|||
|
|||
//vite环境变量, 判断是否是开发环境
|
|||
export const isDev = import.meta.env.MODE === 'development' |
|||
|
|||
// 格式化菜单数据, 把children转换成routes
|
|||
export const formatMenuData = (data: IMenu[]) => { |
|||
const result: MenuItem[] = [] |
|||
for (const item of data) { |
|||
if (item.icon && typeof item.icon === 'string') { |
|||
item.icon = getIcon(item.icon as string, { size: '14', theme: 'filled' }) |
|||
} |
|||
if (!item.children || !item.children.length) { |
|||
result.push({ |
|||
...item, |
|||
key: item.name, |
|||
name: item.title |
|||
}) |
|||
} else { |
|||
const { children, name, ...other } = item |
|||
result.push({ |
|||
...other, |
|||
key: name, |
|||
name: other.title, |
|||
children: formatMenuData(children), |
|||
routes: formatMenuData(children), |
|||
}) |
|||
|
|||
} |
|||
const result: MenuItem[] = [] |
|||
for (const item of data) { |
|||
if (item.icon && typeof item.icon === 'string') { |
|||
item.icon = getIcon(item.icon as string, { size: '14', theme: 'filled' }) |
|||
} |
|||
return result |
|||
if (!item.children || !item.children.length) { |
|||
result.push({ |
|||
...item, |
|||
key: item.name, |
|||
name: item.title |
|||
}) |
|||
} else { |
|||
const { children, name, ...other } = item |
|||
result.push({ |
|||
...other, |
|||
key: name, |
|||
name: other.title, |
|||
children: formatMenuData(children), |
|||
routes: formatMenuData(children), |
|||
}) |
|||
|
|||
} |
|||
} |
|||
return result |
|||
} |
|||
|
|||
|
|||
//把MenuItem[]转换成antd树形结构
|
|||
export const formatterMenuData = (data: MenuItem[]): TreeDataNode[] => { |
|||
const result: TreeDataNode[] = [] |
|||
for (const item of data) { |
|||
if (item.children && item.children.length) { |
|||
const { children, ...other } = item |
|||
result.push({ |
|||
...other, |
|||
key: item.id!, |
|||
title: item.name!, |
|||
children: formatterMenuData(children), |
|||
}) |
|||
} else { |
|||
result.push({ |
|||
...item, |
|||
key: item.id!, |
|||
title: item.name!, |
|||
}) |
|||
} |
|||
} |
|||
return result |
|||
} |
|||
|
|||
//把tree转成平铺数组
|
|||
const defaultTreeFieldNames: FiledNames = { |
|||
key: 'id', |
|||
title: 'title', |
|||
children: 'children' |
|||
} |
|||
|
|||
export function flattenTree<T>(tree: TreeItem<T>[], fieldNames: { |
|||
key: string; |
|||
title: string; |
|||
children: string |
|||
} = defaultTreeFieldNames): FlattenData<T>[] { |
|||
const result: FlattenData<T>[] = [] |
|||
|
|||
function flattenRecursive(item: TreeItem<T>, level: number) { |
|||
const data: FlattenData<T> = { |
|||
...item, |
|||
key: item[fieldNames.key], |
|||
title: item[fieldNames.title], |
|||
level, |
|||
} |
|||
|
|||
result.push(data) |
|||
|
|||
if (item.children) { |
|||
item.children.forEach((child) => flattenRecursive(child, level + 1)) |
|||
} |
|||
} |
|||
|
|||
tree.forEach((item) => flattenRecursive(item, 0)) |
|||
|
|||
return result |
|||
} |
@ -234,7 +234,7 @@ |
|||
resize-observer-polyfill "^1.5.1" |
|||
throttle-debounce "^5.0.0" |
|||
|
|||
"@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": |
|||
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": |
|||
version "7.24.2" |
|||
resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" |
|||
integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== |
|||
@ -338,7 +338,7 @@ |
|||
dependencies: |
|||
"@babel/types" "^7.23.0" |
|||
|
|||
"@babel/helper-module-imports@^7.22.15": |
|||
"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.22.15": |
|||
version "7.24.3" |
|||
resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" |
|||
integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== |
|||
@ -486,7 +486,7 @@ |
|||
"@babel/helper-plugin-utils" "^7.24.0" |
|||
"@babel/plugin-syntax-typescript" "^7.24.1" |
|||
|
|||
"@babel/runtime@^7.10.1", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.16.7", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.6", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.4": |
|||
"@babel/runtime@^7.10.1", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.16.7", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.6", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.1", "@babel/runtime@^7.24.4": |
|||
version "7.24.4" |
|||
resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" |
|||
integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== |
|||
@ -579,16 +579,125 @@ |
|||
dependencies: |
|||
tslib "^2.0.0" |
|||
|
|||
"@emotion/babel-plugin@^11.11.0": |
|||
version "11.11.0" |
|||
resolved "https://registry.npmmirror.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c" |
|||
integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ== |
|||
dependencies: |
|||
"@babel/helper-module-imports" "^7.16.7" |
|||
"@babel/runtime" "^7.18.3" |
|||
"@emotion/hash" "^0.9.1" |
|||
"@emotion/memoize" "^0.8.1" |
|||
"@emotion/serialize" "^1.1.2" |
|||
babel-plugin-macros "^3.1.0" |
|||
convert-source-map "^1.5.0" |
|||
escape-string-regexp "^4.0.0" |
|||
find-root "^1.1.0" |
|||
source-map "^0.5.7" |
|||
stylis "4.2.0" |
|||
|
|||
"@emotion/cache@^11.11.0": |
|||
version "11.11.0" |
|||
resolved "https://registry.npmmirror.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" |
|||
integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== |
|||
dependencies: |
|||
"@emotion/memoize" "^0.8.1" |
|||
"@emotion/sheet" "^1.2.2" |
|||
"@emotion/utils" "^1.2.1" |
|||
"@emotion/weak-memoize" "^0.3.1" |
|||
stylis "4.2.0" |
|||
|
|||
"@emotion/css@^11.11.2": |
|||
version "11.11.2" |
|||
resolved "https://registry.npmmirror.com/@emotion/css/-/css-11.11.2.tgz#e5fa081d0c6e335352e1bc2b05953b61832dca5a" |
|||
integrity sha512-VJxe1ucoMYMS7DkiMdC2T7PWNbrEI0a39YRiyDvK2qq4lXwjRbVP/z4lpG+odCsRzadlR+1ywwrTzhdm5HNdew== |
|||
dependencies: |
|||
"@emotion/babel-plugin" "^11.11.0" |
|||
"@emotion/cache" "^11.11.0" |
|||
"@emotion/serialize" "^1.1.2" |
|||
"@emotion/sheet" "^1.2.2" |
|||
"@emotion/utils" "^1.2.1" |
|||
|
|||
"@emotion/hash@^0.8.0": |
|||
version "0.8.0" |
|||
resolved "https://registry.npmmirror.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" |
|||
integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== |
|||
|
|||
"@emotion/hash@^0.9.1": |
|||
version "0.9.1" |
|||
resolved "https://registry.npmmirror.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" |
|||
integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== |
|||
|
|||
"@emotion/memoize@^0.8.1": |
|||
version "0.8.1" |
|||
resolved "https://registry.npmmirror.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" |
|||
integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== |
|||
|
|||
"@emotion/react@^11.11.4": |
|||
version "11.11.4" |
|||
resolved "https://registry.npmmirror.com/@emotion/react/-/react-11.11.4.tgz#3a829cac25c1f00e126408fab7f891f00ecc3c1d" |
|||
integrity sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw== |
|||
dependencies: |
|||
"@babel/runtime" "^7.18.3" |
|||
"@emotion/babel-plugin" "^11.11.0" |
|||
"@emotion/cache" "^11.11.0" |
|||
"@emotion/serialize" "^1.1.3" |
|||
"@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" |
|||
"@emotion/utils" "^1.2.1" |
|||
"@emotion/weak-memoize" "^0.3.1" |
|||
hoist-non-react-statics "^3.3.1" |
|||
|
|||
"@emotion/serialize@^1.1.2", "@emotion/serialize@^1.1.3": |
|||
version "1.1.4" |
|||
resolved "https://registry.npmmirror.com/@emotion/serialize/-/serialize-1.1.4.tgz#fc8f6d80c492cfa08801d544a05331d1cc7cd451" |
|||
integrity sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ== |
|||
dependencies: |
|||
"@emotion/hash" "^0.9.1" |
|||
"@emotion/memoize" "^0.8.1" |
|||
"@emotion/unitless" "^0.8.1" |
|||
"@emotion/utils" "^1.2.1" |
|||
csstype "^3.0.2" |
|||
|
|||
"@emotion/server@^11.11.0": |
|||
version "11.11.0" |
|||
resolved "https://registry.npmmirror.com/@emotion/server/-/server-11.11.0.tgz#35537176a2a5ed8aed7801f254828e636ec3bd6e" |
|||
integrity sha512-6q89fj2z8VBTx9w93kJ5n51hsmtYuFPtZgnc1L8VzRx9ti4EU6EyvF6Nn1H1x3vcCQCF7u2dB2lY4AYJwUW4PA== |
|||
dependencies: |
|||
"@emotion/utils" "^1.2.1" |
|||
html-tokenize "^2.0.0" |
|||
multipipe "^1.0.2" |
|||
through "^2.3.8" |
|||
|
|||
"@emotion/sheet@^1.2.2": |
|||
version "1.2.2" |
|||
resolved "https://registry.npmmirror.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" |
|||
integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== |
|||
|
|||
"@emotion/unitless@^0.7.5": |
|||
version "0.7.5" |
|||
resolved "https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" |
|||
integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== |
|||
|
|||
"@emotion/unitless@^0.8.1": |
|||
version "0.8.1" |
|||
resolved "https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" |
|||
integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== |
|||
|
|||
"@emotion/use-insertion-effect-with-fallbacks@^1.0.1": |
|||
version "1.0.1" |
|||
resolved "https://registry.npmmirror.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963" |
|||
integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw== |
|||
|
|||
"@emotion/utils@^1.2.1": |
|||
version "1.2.1" |
|||
resolved "https://registry.npmmirror.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" |
|||
integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== |
|||
|
|||
"@emotion/weak-memoize@^0.3.1": |
|||
version "0.3.1" |
|||
resolved "https://registry.npmmirror.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" |
|||
integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== |
|||
|
|||
"@esbuild/[email protected]": |
|||
version "0.20.2" |
|||
resolved "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" |
|||
@ -1183,6 +1292,11 @@ |
|||
resolved "https://registry.npmmirror.com/@types/mockjs/-/mockjs-1.0.10.tgz#535e4bdc7c0e4658fc4b3696029d45ee6b053c8a" |
|||
integrity sha512-SXgrhajHG7boLv6oU93CcmdDm0HYRiceuz6b+7z+/2lCJPTWDv0V5YiwFHT2ejE4bQqgSXQiVPQYPWv7LGsK1g== |
|||
|
|||
"@types/parse-json@^4.0.0": |
|||
version "4.0.2" |
|||
resolved "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" |
|||
integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== |
|||
|
|||
"@types/prop-types@*": |
|||
version "15.7.12" |
|||
resolved "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" |
|||
@ -1366,6 +1480,21 @@ ansi-styles@^4.1.0: |
|||
dependencies: |
|||
color-convert "^2.0.1" |
|||
|
|||
antd-style@^3.6.2: |
|||
version "3.6.2" |
|||
resolved "https://registry.npmmirror.com/antd-style/-/antd-style-3.6.2.tgz#23eb6b61e9c04ab3c4e5dc60ef7b5c424c407fcc" |
|||
integrity sha512-p6tRV63+U9yp3T3DB4ope1Xs3VdkhNsPD+yiZMJnR57dclPQPtrNnrGBmdGwjWYP1HlzB1XS4JHqFAyMjvObHA== |
|||
dependencies: |
|||
"@ant-design/cssinjs" "^1.18.5" |
|||
"@babel/runtime" "^7.24.1" |
|||
"@emotion/cache" "^11.11.0" |
|||
"@emotion/css" "^11.11.2" |
|||
"@emotion/react" "^11.11.4" |
|||
"@emotion/serialize" "^1.1.3" |
|||
"@emotion/server" "^11.11.0" |
|||
"@emotion/utils" "^1.2.1" |
|||
use-merge-value "^1.2.0" |
|||
|
|||
antd@^5.16.1: |
|||
version "5.16.1" |
|||
resolved "https://registry.npmmirror.com/antd/-/antd-5.16.1.tgz#a258e73cac8c6e63c4ec44588e5474f0403cd33a" |
|||
@ -1462,6 +1591,15 @@ axios@^1.6.8: |
|||
form-data "^4.0.0" |
|||
proxy-from-env "^1.1.0" |
|||
|
|||
babel-plugin-macros@^3.1.0: |
|||
version "3.1.0" |
|||
resolved "https://registry.npmmirror.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" |
|||
integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== |
|||
dependencies: |
|||
"@babel/runtime" "^7.12.5" |
|||
cosmiconfig "^7.0.0" |
|||
resolve "^1.19.0" |
|||
|
|||
balanced-match@^1.0.0: |
|||
version "1.0.2" |
|||
resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" |
|||
@ -1504,6 +1642,11 @@ browserslist@^4.22.2: |
|||
node-releases "^2.0.14" |
|||
update-browserslist-db "^1.0.13" |
|||
|
|||
buffer-from@~0.1.1: |
|||
version "0.1.2" |
|||
resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-0.1.2.tgz#15f4b9bcef012044df31142c14333caf6e0260d0" |
|||
integrity sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg== |
|||
|
|||
bundle-require@^4.0.1: |
|||
version "4.0.2" |
|||
resolved "https://registry.npmmirror.com/bundle-require/-/bundle-require-4.0.2.tgz#65fc74ff14eabbba36d26c9a6161bd78fff6b29e" |
|||
@ -1632,6 +1775,11 @@ connect@^3.7.0: |
|||
parseurl "~1.3.3" |
|||
utils-merge "1.0.1" |
|||
|
|||
convert-source-map@^1.5.0: |
|||
version "1.9.0" |
|||
resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" |
|||
integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== |
|||
|
|||
convert-source-map@^2.0.0: |
|||
version "2.0.0" |
|||
resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" |
|||
@ -1644,6 +1792,22 @@ copy-to-clipboard@^3.3.3: |
|||
dependencies: |
|||
toggle-selection "^1.0.6" |
|||
|
|||
core-util-is@~1.0.0: |
|||
version "1.0.3" |
|||
resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" |
|||
integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== |
|||
|
|||
cosmiconfig@^7.0.0: |
|||
version "7.1.0" |
|||
resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" |
|||
integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== |
|||
dependencies: |
|||
"@types/parse-json" "^4.0.0" |
|||
import-fresh "^3.2.1" |
|||
parse-json "^5.0.0" |
|||
path-type "^4.0.0" |
|||
yaml "^1.10.0" |
|||
|
|||
cross-spawn@^7.0.2: |
|||
version "7.0.3" |
|||
resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" |
|||
@ -1716,6 +1880,13 @@ dot-case@^3.0.4: |
|||
no-case "^3.0.4" |
|||
tslib "^2.0.3" |
|||
|
|||
duplexer2@^0.1.2: |
|||
version "0.1.4" |
|||
resolved "https://registry.npmmirror.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" |
|||
integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== |
|||
dependencies: |
|||
readable-stream "^2.0.2" |
|||
|
|||
[email protected]: |
|||
version "1.1.1" |
|||
resolved "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" |
|||
@ -1731,6 +1902,13 @@ encodeurl@~1.0.2: |
|||
resolved "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" |
|||
integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== |
|||
|
|||
error-ex@^1.3.1: |
|||
version "1.3.2" |
|||
resolved "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" |
|||
integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== |
|||
dependencies: |
|||
is-arrayish "^0.2.1" |
|||
|
|||
esbuild@^0.20.1: |
|||
version "0.20.2" |
|||
resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" |
|||
@ -1940,6 +2118,11 @@ [email protected]: |
|||
statuses "~1.5.0" |
|||
unpipe "~1.0.0" |
|||
|
|||
find-root@^1.1.0: |
|||
version "1.1.0" |
|||
resolved "https://registry.npmmirror.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" |
|||
integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== |
|||
|
|||
find-up@^5.0.0: |
|||
version "5.0.0" |
|||
resolved "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" |
|||
@ -1986,6 +2169,11 @@ fsevents@~2.3.2, fsevents@~2.3.3: |
|||
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" |
|||
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== |
|||
|
|||
function-bind@^1.1.2: |
|||
version "1.1.2" |
|||
resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" |
|||
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== |
|||
|
|||
gensync@^1.0.0-beta.2: |
|||
version "1.0.0-beta.2" |
|||
resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" |
|||
@ -2061,7 +2249,14 @@ has-flag@^4.0.0: |
|||
resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" |
|||
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== |
|||
|
|||
hoist-non-react-statics@^3.3.2: |
|||
hasown@^2.0.0: |
|||
version "2.0.2" |
|||
resolved "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" |
|||
integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== |
|||
dependencies: |
|||
function-bind "^1.1.2" |
|||
|
|||
hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: |
|||
version "3.3.2" |
|||
resolved "https://registry.npmmirror.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" |
|||
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== |
|||
@ -2075,6 +2270,17 @@ html-parse-stringify@^3.0.1: |
|||
dependencies: |
|||
void-elements "3.1.0" |
|||
|
|||
html-tokenize@^2.0.0: |
|||
version "2.0.1" |
|||
resolved "https://registry.npmmirror.com/html-tokenize/-/html-tokenize-2.0.1.tgz#c3b2ea6e2837d4f8c06693393e9d2a12c960be5f" |
|||
integrity sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w== |
|||
dependencies: |
|||
buffer-from "~0.1.1" |
|||
inherits "~2.0.1" |
|||
minimist "~1.2.5" |
|||
readable-stream "~1.0.27-1" |
|||
through2 "~0.4.1" |
|||
|
|||
i18next-browser-languagedetector@^7.2.1: |
|||
version "7.2.1" |
|||
resolved "https://registry.npmmirror.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.1.tgz#1968196d437b4c8db847410c7c33554f6c448f6f" |
|||
@ -2115,11 +2321,16 @@ inflight@^1.0.4: |
|||
once "^1.3.0" |
|||
wrappy "1" |
|||
|
|||
inherits@2: |
|||
inherits@2, inherits@~2.0.1, inherits@~2.0.3: |
|||
version "2.0.4" |
|||
resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" |
|||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== |
|||
|
|||
is-arrayish@^0.2.1: |
|||
version "0.2.1" |
|||
resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" |
|||
integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== |
|||
|
|||
is-binary-path@~2.1.0: |
|||
version "2.1.0" |
|||
resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" |
|||
@ -2127,6 +2338,13 @@ is-binary-path@~2.1.0: |
|||
dependencies: |
|||
binary-extensions "^2.0.0" |
|||
|
|||
is-core-module@^2.13.0: |
|||
version "2.13.1" |
|||
resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" |
|||
integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== |
|||
dependencies: |
|||
hasown "^2.0.0" |
|||
|
|||
is-extglob@^2.1.1: |
|||
version "2.1.1" |
|||
resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" |
|||
@ -2149,6 +2367,16 @@ is-path-inside@^3.0.3: |
|||
resolved "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" |
|||
integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== |
|||
|
|||
[email protected]: |
|||
version "0.0.1" |
|||
resolved "https://registry.npmmirror.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" |
|||
integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== |
|||
|
|||
isarray@~1.0.0: |
|||
version "1.0.0" |
|||
resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" |
|||
integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== |
|||
|
|||
isexe@^2.0.0: |
|||
version "2.0.0" |
|||
resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" |
|||
@ -2186,6 +2414,11 @@ [email protected]: |
|||
resolved "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" |
|||
integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== |
|||
|
|||
json-parse-even-better-errors@^2.3.0: |
|||
version "2.3.1" |
|||
resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" |
|||
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== |
|||
|
|||
json-schema-traverse@^0.4.1: |
|||
version "0.4.1" |
|||
resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" |
|||
@ -2223,6 +2456,11 @@ levn@^0.4.1: |
|||
prelude-ls "^1.2.1" |
|||
type-check "~0.4.0" |
|||
|
|||
lines-and-columns@^1.1.6: |
|||
version "1.2.4" |
|||
resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" |
|||
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== |
|||
|
|||
load-tsconfig@^0.2.3: |
|||
version "0.2.5" |
|||
resolved "https://registry.npmmirror.com/load-tsconfig/-/load-tsconfig-0.2.5.tgz#453b8cd8961bfb912dea77eb6c168fe8cca3d3a1" |
|||
@ -2317,6 +2555,11 @@ minimatch@^9.0.4: |
|||
dependencies: |
|||
brace-expansion "^2.0.1" |
|||
|
|||
minimist@~1.2.5: |
|||
version "1.2.8" |
|||
resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" |
|||
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== |
|||
|
|||
mockjs@^1.1.0: |
|||
version "1.1.0" |
|||
resolved "https://registry.npmmirror.com/mockjs/-/mockjs-1.1.0.tgz#e6a0c378e91906dbaff20911cc0273b3c7d75b06" |
|||
@ -2334,6 +2577,14 @@ [email protected]: |
|||
resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" |
|||
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== |
|||
|
|||
multipipe@^1.0.2: |
|||
version "1.0.2" |
|||
resolved "https://registry.npmmirror.com/multipipe/-/multipipe-1.0.2.tgz#cc13efd833c9cda99f224f868461b8e1a3fd939d" |
|||
integrity sha512-6uiC9OvY71vzSGX8lZvSqscE7ft9nPupJ8fMjrCNRAUy2LREUW42UL+V/NTrogr6rFgRydUrCX4ZitfpSNkSCQ== |
|||
dependencies: |
|||
duplexer2 "^0.1.2" |
|||
object-assign "^4.1.0" |
|||
|
|||
nanoid@^3.3.7: |
|||
version "3.3.7" |
|||
resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" |
|||
@ -2362,11 +2613,16 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: |
|||
resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" |
|||
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== |
|||
|
|||
[email protected], object-assign@^4.1.1: |
|||
[email protected], object-assign@^4.1.0, object-assign@^4.1.1: |
|||
version "4.1.1" |
|||
resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" |
|||
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== |
|||
|
|||
object-keys@~0.4.0: |
|||
version "0.4.0" |
|||
resolved "https://registry.npmmirror.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" |
|||
integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw== |
|||
|
|||
omit.js@^2.0.2: |
|||
version "2.0.2" |
|||
resolved "https://registry.npmmirror.com/omit.js/-/omit.js-2.0.2.tgz#dd9b8436fab947a5f3ff214cb2538631e313ec2f" |
|||
@ -2427,6 +2683,16 @@ parent-module@^1.0.0: |
|||
dependencies: |
|||
callsites "^3.0.0" |
|||
|
|||
parse-json@^5.0.0: |
|||
version "5.2.0" |
|||
resolved "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" |
|||
integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== |
|||
dependencies: |
|||
"@babel/code-frame" "^7.0.0" |
|||
error-ex "^1.3.1" |
|||
json-parse-even-better-errors "^2.3.0" |
|||
lines-and-columns "^1.1.6" |
|||
|
|||
parseurl@~1.3.3: |
|||
version "1.3.3" |
|||
resolved "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" |
|||
@ -2455,6 +2721,11 @@ path-key@^3.1.0: |
|||
resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" |
|||
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== |
|||
|
|||
path-parse@^1.0.7: |
|||
version "1.0.7" |
|||
resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" |
|||
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== |
|||
|
|||
[email protected]: |
|||
version "2.4.0" |
|||
resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-2.4.0.tgz#35ce7f333d5616f1c1e1bfe266c3aba2e5b2e704" |
|||
@ -2499,6 +2770,11 @@ prettier@^3.1.1: |
|||
resolved "https://registry.npmmirror.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" |
|||
integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== |
|||
|
|||
process-nextick-args@~2.0.0: |
|||
version "2.0.1" |
|||
resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" |
|||
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== |
|||
|
|||
prop-types@^15.5.10: |
|||
version "15.8.1" |
|||
resolved "https://registry.npmmirror.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" |
|||
@ -2957,6 +3233,29 @@ reactcss@^1.2.3: |
|||
dependencies: |
|||
lodash "^4.0.1" |
|||
|
|||
readable-stream@^2.0.2: |
|||
version "2.3.8" |
|||
resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" |
|||
integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== |
|||
dependencies: |
|||
core-util-is "~1.0.0" |
|||
inherits "~2.0.3" |
|||
isarray "~1.0.0" |
|||
process-nextick-args "~2.0.0" |
|||
safe-buffer "~5.1.1" |
|||
string_decoder "~1.1.1" |
|||
util-deprecate "~1.0.1" |
|||
|
|||
readable-stream@~1.0.17, readable-stream@~1.0.27-1: |
|||
version "1.0.34" |
|||
resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" |
|||
integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== |
|||
dependencies: |
|||
core-util-is "~1.0.0" |
|||
inherits "~2.0.1" |
|||
isarray "0.0.1" |
|||
string_decoder "~0.10.x" |
|||
|
|||
readdirp@~3.6.0: |
|||
version "3.6.0" |
|||
resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" |
|||
@ -2979,6 +3278,15 @@ resolve-from@^4.0.0: |
|||
resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" |
|||
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== |
|||
|
|||
resolve@^1.19.0: |
|||
version "1.22.8" |
|||
resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" |
|||
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== |
|||
dependencies: |
|||
is-core-module "^2.13.0" |
|||
path-parse "^1.0.7" |
|||
supports-preserve-symlinks-flag "^1.0.0" |
|||
|
|||
reusify@^1.0.4: |
|||
version "1.0.4" |
|||
resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" |
|||
@ -3022,6 +3330,11 @@ run-parallel@^1.1.9: |
|||
dependencies: |
|||
queue-microtask "^1.2.2" |
|||
|
|||
safe-buffer@~5.1.0, safe-buffer@~5.1.1: |
|||
version "5.1.2" |
|||
resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" |
|||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== |
|||
|
|||
safe-stable-stringify@^2.4.3: |
|||
version "2.4.3" |
|||
resolved "https://registry.npmmirror.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" |
|||
@ -3080,6 +3393,11 @@ source-map-js@^1.2.0: |
|||
resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" |
|||
integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== |
|||
|
|||
source-map@^0.5.7: |
|||
version "0.5.7" |
|||
resolved "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" |
|||
integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== |
|||
|
|||
statuses@~1.5.0: |
|||
version "1.5.0" |
|||
resolved "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" |
|||
@ -3090,6 +3408,18 @@ string-convert@^0.2.0: |
|||
resolved "https://registry.npmmirror.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" |
|||
integrity sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A== |
|||
|
|||
string_decoder@~0.10.x: |
|||
version "0.10.31" |
|||
resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" |
|||
integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== |
|||
|
|||
string_decoder@~1.1.1: |
|||
version "1.1.1" |
|||
resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" |
|||
integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== |
|||
dependencies: |
|||
safe-buffer "~5.1.0" |
|||
|
|||
strip-ansi@^6.0.1: |
|||
version "6.0.1" |
|||
resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" |
|||
@ -3102,6 +3432,11 @@ strip-json-comments@^3.1.1: |
|||
resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" |
|||
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== |
|||
|
|||
[email protected]: |
|||
version "4.2.0" |
|||
resolved "https://registry.npmmirror.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" |
|||
integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== |
|||
|
|||
stylis@^4.0.13: |
|||
version "4.3.1" |
|||
resolved "https://registry.npmmirror.com/stylis/-/stylis-4.3.1.tgz#ed8a9ebf9f76fe1e12d462f5cc3c4c980b23a7eb" |
|||
@ -3121,6 +3456,11 @@ supports-color@^7.1.0: |
|||
dependencies: |
|||
has-flag "^4.0.0" |
|||
|
|||
supports-preserve-symlinks-flag@^1.0.0: |
|||
version "1.0.0" |
|||
resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" |
|||
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== |
|||
|
|||
swr@^2.0.0: |
|||
version "2.2.5" |
|||
resolved "https://registry.npmmirror.com/swr/-/swr-2.2.5.tgz#063eea0e9939f947227d5ca760cc53696f46446b" |
|||
@ -3139,6 +3479,19 @@ throttle-debounce@^5.0.0: |
|||
resolved "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.0.tgz#a17a4039e82a2ed38a5e7268e4132d6960d41933" |
|||
integrity sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg== |
|||
|
|||
through2@~0.4.1: |
|||
version "0.4.2" |
|||
resolved "https://registry.npmmirror.com/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b" |
|||
integrity sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ== |
|||
dependencies: |
|||
readable-stream "~1.0.17" |
|||
xtend "~2.1.1" |
|||
|
|||
through@^2.3.8: |
|||
version "2.3.8" |
|||
resolved "https://registry.npmmirror.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" |
|||
integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== |
|||
|
|||
tiny-invariant@^1.3.1: |
|||
version "1.3.3" |
|||
resolved "https://registry.npmmirror.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" |
|||
@ -3225,11 +3578,21 @@ uri-js@^4.2.2: |
|||
dependencies: |
|||
punycode "^2.1.0" |
|||
|
|||
use-merge-value@^1.2.0: |
|||
version "1.2.0" |
|||
resolved "https://registry.npmmirror.com/use-merge-value/-/use-merge-value-1.2.0.tgz#45410846c23e490f404c9cbd17d67db9c8c0efcd" |
|||
integrity sha512-DXgG0kkgJN45TcyoXL49vJnn55LehnrmoHc7MbKi+QDBvr8dsesqws8UlyIWGHMR+JXgxc1nvY+jDGMlycsUcw== |
|||
|
|||
use-sync-external-store@^1.2.0: |
|||
version "1.2.0" |
|||
resolved "https://registry.npmmirror.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" |
|||
integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== |
|||
|
|||
util-deprecate@~1.0.1: |
|||
version "1.0.2" |
|||
resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" |
|||
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== |
|||
|
|||
[email protected]: |
|||
version "1.0.1" |
|||
resolved "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" |
|||
@ -3289,6 +3652,13 @@ wrappy@1: |
|||
resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" |
|||
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== |
|||
|
|||
xtend@~2.1.1: |
|||
version "2.1.2" |
|||
resolved "https://registry.npmmirror.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" |
|||
integrity sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ== |
|||
dependencies: |
|||
object-keys "~0.4.0" |
|||
|
|||
yallist@^3.0.2: |
|||
version "3.1.1" |
|||
resolved "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" |
|||
@ -3299,6 +3669,11 @@ yallist@^4.0.0: |
|||
resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" |
|||
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== |
|||
|
|||
yaml@^1.10.0: |
|||
version "1.10.2" |
|||
resolved "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" |
|||
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== |
|||
|
|||
yocto-queue@^0.1.0: |
|||
version "0.1.0" |
|||
resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" |
|||
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue