diff --git a/src/components/Authorized/Authorized.tsx b/src/components/Authorized/Authorized.tsx index d91b7b55..4f6d2b4e 100644 --- a/src/components/Authorized/Authorized.tsx +++ b/src/components/Authorized/Authorized.tsx @@ -1,14 +1,14 @@ import React from 'react'; import { Result } from 'antd'; -import check, { IAuthorityType } from './CheckPermissions'; +import check from './CheckPermissions'; +import type { IAuthorityType } from './CheckPermissions'; +import type AuthorizedRoute from './AuthorizedRoute'; +import type Secured from './Secured'; -import AuthorizedRoute from './AuthorizedRoute'; -import Secured from './Secured'; - -interface AuthorizedProps { +type AuthorizedProps = { authority: IAuthorityType; noMatch?: React.ReactNode; -} +}; type IAuthorizedType = React.FunctionComponent & { Secured: typeof Secured; diff --git a/src/components/Authorized/AuthorizedRoute.tsx b/src/components/Authorized/AuthorizedRoute.tsx index c2eb08e5..751a3440 100644 --- a/src/components/Authorized/AuthorizedRoute.tsx +++ b/src/components/Authorized/AuthorizedRoute.tsx @@ -2,15 +2,15 @@ import { Redirect, Route } from 'umi'; import React from 'react'; import Authorized from './Authorized'; -import { IAuthorityType } from './CheckPermissions'; +import type { IAuthorityType } from './CheckPermissions'; -interface AuthorizedRouteProps { +type AuthorizedRouteProps = { currentAuthority: string; component: React.ComponentClass; render: (props: any) => React.ReactNode; redirectPath: string; authority: IAuthorityType; -} +}; const AuthorizedRoute: React.SFC = ({ component: Component, diff --git a/src/components/Authorized/PromiseRender.tsx b/src/components/Authorized/PromiseRender.tsx index 25f2597e..f8f15c83 100644 --- a/src/components/Authorized/PromiseRender.tsx +++ b/src/components/Authorized/PromiseRender.tsx @@ -4,15 +4,15 @@ import isEqual from 'lodash/isEqual'; import { isComponentClass } from './Secured'; // eslint-disable-next-line import/no-cycle -interface PromiseRenderProps { +type PromiseRenderProps = { ok: T; error: K; promise: Promise; -} +}; -interface PromiseRenderState { +type PromiseRenderState = { component: React.ComponentClass | React.FunctionComponent; -} +}; export default class PromiseRender extends React.Component< PromiseRenderProps, @@ -22,11 +22,14 @@ export default class PromiseRender extends React.Component< component: () => null, }; - componentDidMount() { + componentDidMount(): void { this.setRenderComponent(this.props); } - shouldComponentUpdate = (nextProps: PromiseRenderProps, nextState: PromiseRenderState) => { + shouldComponentUpdate = ( + nextProps: PromiseRenderProps, + nextState: PromiseRenderState, + ): boolean => { const { component } = this.state; if (!isEqual(nextProps, this.props)) { this.setRenderComponent(nextProps); @@ -36,7 +39,7 @@ export default class PromiseRender extends React.Component< }; // set render Component : ok or error - setRenderComponent(props: PromiseRenderProps) { + setRenderComponent(props: PromiseRenderProps): void { const ok = this.checkIsInstantiation(props.ok); const error = this.checkIsInstantiation(props.error); props.promise diff --git a/src/components/GlobalHeader/AvatarDropdown.tsx b/src/components/GlobalHeader/AvatarDropdown.tsx index 7bf78f59..cf39ae2c 100644 --- a/src/components/GlobalHeader/AvatarDropdown.tsx +++ b/src/components/GlobalHeader/AvatarDropdown.tsx @@ -1,16 +1,17 @@ import { LogoutOutlined, SettingOutlined, UserOutlined } from '@ant-design/icons'; import { Avatar, Menu, Spin } from 'antd'; import React from 'react'; -import { history, ConnectProps, connect } from 'umi'; -import { ConnectState } from '@/models/connect'; -import { CurrentUser } from '@/models/user'; +import type { ConnectProps } from 'umi'; +import { history, connect } from 'umi'; +import type { ConnectState } from '@/models/connect'; +import type { CurrentUser } from '@/models/user'; import HeaderDropdown from '../HeaderDropdown'; import styles from './index.less'; -export interface GlobalHeaderRightProps extends Partial { +export type GlobalHeaderRightProps = { currentUser?: CurrentUser; menu?: boolean; -} +} & Partial; class AvatarDropdown extends React.Component { onMenuClick = (event: { diff --git a/src/components/GlobalHeader/NoticeIconView.tsx b/src/components/GlobalHeader/NoticeIconView.tsx index 825d3088..e0461a8b 100644 --- a/src/components/GlobalHeader/NoticeIconView.tsx +++ b/src/components/GlobalHeader/NoticeIconView.tsx @@ -1,21 +1,22 @@ import React, { Component } from 'react'; -import { connect, ConnectProps } from 'umi'; +import type { ConnectProps } from 'umi'; +import { connect } from 'umi'; import { Tag, message } from 'antd'; import groupBy from 'lodash/groupBy'; import moment from 'moment'; -import { NoticeItem } from '@/models/global'; -import { CurrentUser } from '@/models/user'; -import { ConnectState } from '@/models/connect'; +import type { NoticeItem } from '@/models/global'; +import type { CurrentUser } from '@/models/user'; +import type { ConnectState } from '@/models/connect'; import NoticeIcon from '../NoticeIcon'; import styles from './index.less'; -export interface GlobalHeaderRightProps extends Partial { +export type GlobalHeaderRightProps = { notices?: NoticeItem[]; currentUser?: CurrentUser; fetchingNotices?: boolean; onNoticeVisibleChange?: (visible: boolean) => void; onNoticeClear?: (tabName?: string) => void; -} +} & Partial; class GlobalHeaderRight extends Component { componentDidMount() { @@ -52,9 +53,7 @@ class GlobalHeaderRight extends Component { } }; - getNoticeData = (): { - [key: string]: NoticeItem[]; - } => { + getNoticeData = (): Record => { const { notices = [] } = this.props; if (!notices || notices.length === 0 || !Array.isArray(notices)) { @@ -96,10 +95,8 @@ class GlobalHeaderRight extends Component { return groupBy(newNotices, 'type'); }; - getUnreadData = (noticeData: { [key: string]: NoticeItem[] }) => { - const unreadMsg: { - [key: string]: number; - } = {}; + getUnreadData = (noticeData: Record) => { + const unreadMsg: Record = {}; Object.keys(noticeData).forEach((key) => { const value = noticeData[key]; diff --git a/src/components/GlobalHeader/RightContent.tsx b/src/components/GlobalHeader/RightContent.tsx index 3926d881..c22c2f04 100644 --- a/src/components/GlobalHeader/RightContent.tsx +++ b/src/components/GlobalHeader/RightContent.tsx @@ -1,16 +1,18 @@ import { Tooltip, Tag } from 'antd'; -import { Settings as ProSettings } from '@ant-design/pro-layout'; +import type { Settings as ProSettings } from '@ant-design/pro-layout'; import { QuestionCircleOutlined } from '@ant-design/icons'; import React from 'react'; -import { connect, ConnectProps, SelectLang } from 'umi'; -import { ConnectState } from '@/models/connect'; +import type { ConnectProps } from 'umi'; +import { connect, SelectLang } from 'umi'; +import type { ConnectState } from '@/models/connect'; import Avatar from './AvatarDropdown'; import HeaderSearch from '../HeaderSearch'; import styles from './index.less'; -export interface GlobalHeaderRightProps extends Partial, Partial { +export type GlobalHeaderRightProps = { theme?: ProSettings['navTheme'] | 'realDark'; -} +} & Partial & + Partial; const ENVTagColor = { dev: 'orange', diff --git a/src/components/HeaderDropdown/index.tsx b/src/components/HeaderDropdown/index.tsx index cc60727d..45af90ae 100644 --- a/src/components/HeaderDropdown/index.tsx +++ b/src/components/HeaderDropdown/index.tsx @@ -1,16 +1,14 @@ -import { DropDownProps } from 'antd/es/dropdown'; +import type { DropDownProps } from 'antd/es/dropdown'; import { Dropdown } from 'antd'; import React from 'react'; import classNames from 'classnames'; import styles from './index.less'; -declare type OverlayFunc = () => React.ReactNode; - -export interface HeaderDropdownProps extends Omit { +export type HeaderDropdownProps = { overlayClassName?: string; - overlay: React.ReactNode | OverlayFunc | any; + overlay: React.ReactNode | (() => React.ReactNode) | any; placement?: 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topCenter' | 'topRight' | 'bottomCenter'; -} +} & Omit; const HeaderDropdown: React.FC = ({ overlayClassName: cls, ...restProps }) => ( diff --git a/src/components/HeaderSearch/index.tsx b/src/components/HeaderSearch/index.tsx index 290d4313..55be2c60 100644 --- a/src/components/HeaderSearch/index.tsx +++ b/src/components/HeaderSearch/index.tsx @@ -1,13 +1,13 @@ import { SearchOutlined } from '@ant-design/icons'; import { AutoComplete, Input } from 'antd'; import useMergeValue from 'use-merge-value'; -import { AutoCompleteProps } from 'antd/es/auto-complete'; +import type { AutoCompleteProps } from 'antd/es/auto-complete'; import React, { useRef } from 'react'; import classNames from 'classnames'; import styles from './index.less'; -export interface HeaderSearchProps { +export type HeaderSearchProps = { onSearch?: (value?: string) => void; onChange?: (value?: string) => void; onVisibleChange?: (b: boolean) => void; @@ -18,7 +18,7 @@ export interface HeaderSearchProps { open?: boolean; defaultValue?: string; value?: string; -} +}; const HeaderSearch: React.FC = (props) => { const { @@ -38,7 +38,7 @@ const HeaderSearch: React.FC = (props) => { onChange: props.onChange, }); - const [searchMode, setSearchMode] = useMergeValue(defaultOpen || false, { + const [searchMode, setSearchMode] = useMergeValue(defaultOpen ?? false, { value: props.open, onChange: onVisibleChange, }); diff --git a/src/components/NoticeIcon/NoticeList.tsx b/src/components/NoticeIcon/NoticeList.tsx index 7c1b6abb..135a36e5 100644 --- a/src/components/NoticeIcon/NoticeList.tsx +++ b/src/components/NoticeIcon/NoticeList.tsx @@ -2,10 +2,10 @@ import { Avatar, List } from 'antd'; import React from 'react'; import classNames from 'classnames'; -import { NoticeIconData } from './index'; +import type { NoticeIconData } from './index'; import styles from './NoticeList.less'; -export interface NoticeIconTabProps { +export type NoticeIconTabProps = { count?: number; name?: string; showClear?: boolean; @@ -21,7 +21,7 @@ export interface NoticeIconTabProps { viewMoreText?: string; list: NoticeIconData[]; onViewMore?: (e: any) => void; -} +}; const NoticeList: React.SFC = ({ data = [], onClick, @@ -67,7 +67,9 @@ const NoticeList: React.SFC = ({ onClick && onClick(item)} + onClick={() => { + onClick?.(item); + }} > []; -} +}; const NoticeIcon: React.FC & { Tab: typeof NoticeList; @@ -73,9 +74,15 @@ const NoticeIcon: React.FC & { clearText={clearText} viewMoreText={viewMoreText} data={list} - onClear={(): void => onClear && onClear(title, tabKey)} - onClick={(item): void => onItemClick && onItemClick(item, child.props)} - onViewMore={(event): void => onViewMore && onViewMore(child.props, event)} + onClear={(): void => { + onClear?.(title, tabKey); + }} + onClick={(item): void => { + onItemClick?.(item, child.props); + }} + onViewMore={(event): void => { + onViewMore?.(child.props, event); + }} showClear={showClear} showViewMore={showViewMore} title={title} diff --git a/src/global.tsx b/src/global.tsx index 5e355036..f38bb76b 100644 --- a/src/global.tsx +++ b/src/global.tsx @@ -57,7 +57,7 @@ if (pwa) { description: useIntl().formatMessage({ id: 'app.pwa.serviceworker.updated.hint' }), btn, key, - onClose: async () => {}, + onClose: async () => null, }); }); } else if ('serviceWorker' in navigator && isHttps) { diff --git a/src/layouts/BasicLayout.tsx b/src/layouts/BasicLayout.tsx index 308f318c..c7559ccb 100644 --- a/src/layouts/BasicLayout.tsx +++ b/src/layouts/BasicLayout.tsx @@ -3,19 +3,20 @@ * You can view component api by: * https://github.com/ant-design/ant-design-pro-layout */ -import ProLayout, { +import type { MenuDataItem, BasicLayoutProps as ProLayoutProps, Settings, - DefaultFooter, } from '@ant-design/pro-layout'; +import ProLayout, { DefaultFooter } from '@ant-design/pro-layout'; import React, { useEffect, useMemo, useRef } from 'react'; -import { Link, useIntl, connect, Dispatch, history } from 'umi'; +import type { Dispatch } from 'umi'; +import { Link, useIntl, connect, history } from 'umi'; import { GithubOutlined } from '@ant-design/icons'; import { Result, Button } from 'antd'; import Authorized from '@/utils/Authorized'; import RightContent from '@/components/GlobalHeader/RightContent'; -import { ConnectState } from '@/models/connect'; +import type { ConnectState } from '@/models/connect'; import { getMatchMenu } from '@umijs/route-utils'; import logo from '../assets/logo.svg'; @@ -31,20 +32,16 @@ const noMatch = ( } /> ); -export interface BasicLayoutProps extends ProLayoutProps { - breadcrumbNameMap: { - [path: string]: MenuDataItem; - }; +export type BasicLayoutProps = { + breadcrumbNameMap: Record; route: ProLayoutProps['route'] & { authority: string[]; }; settings: Settings; dispatch: Dispatch; -} +} & ProLayoutProps; export type BasicLayoutContext = { [K in 'location']: BasicLayoutProps[K] } & { - breadcrumbNameMap: { - [path: string]: MenuDataItem; - }; + breadcrumbNameMap: Record; }; /** * use Authorized check all menu item diff --git a/src/layouts/SecurityLayout.tsx b/src/layouts/SecurityLayout.tsx index a5a13784..78219378 100644 --- a/src/layouts/SecurityLayout.tsx +++ b/src/layouts/SecurityLayout.tsx @@ -1,18 +1,19 @@ import React from 'react'; import { PageLoading } from '@ant-design/pro-layout'; -import { Redirect, connect, ConnectProps } from 'umi'; +import type { ConnectProps } from 'umi'; +import { Redirect, connect } from 'umi'; import { stringify } from 'querystring'; -import { ConnectState } from '@/models/connect'; -import { CurrentUser } from '@/models/user'; +import type { ConnectState } from '@/models/connect'; +import type { CurrentUser } from '@/models/user'; -interface SecurityLayoutProps extends ConnectProps { +type SecurityLayoutProps = { loading?: boolean; currentUser?: CurrentUser; -} +} & ConnectProps; -interface SecurityLayoutState { +type SecurityLayoutState = { isReady: boolean; -} +}; class SecurityLayout extends React.Component { state: SecurityLayoutState = { diff --git a/src/layouts/UserLayout.tsx b/src/layouts/UserLayout.tsx index ef99e333..87a140c9 100644 --- a/src/layouts/UserLayout.tsx +++ b/src/layouts/UserLayout.tsx @@ -1,16 +1,16 @@ -import { DefaultFooter, MenuDataItem, getMenuData, getPageTitle } from '@ant-design/pro-layout'; +import type { MenuDataItem } from '@ant-design/pro-layout'; +import { DefaultFooter, getMenuData, getPageTitle } from '@ant-design/pro-layout'; import { Helmet, HelmetProvider } from 'react-helmet-async'; -import { Link, SelectLang, useIntl, ConnectProps, connect, FormattedMessage } from 'umi'; +import type { ConnectProps } from 'umi'; +import { Link, SelectLang, useIntl, connect, FormattedMessage } from 'umi'; import React from 'react'; -import { ConnectState } from '@/models/connect'; +import type { ConnectState } from '@/models/connect'; import logo from '../assets/logo.svg'; import styles from './UserLayout.less'; -export interface UserLayoutProps extends Partial { - breadcrumbNameMap: { - [path: string]: MenuDataItem; - }; -} +export type UserLayoutProps = { + breadcrumbNameMap: Record; +} & Partial; const UserLayout: React.FC = (props) => { const { diff --git a/src/models/connect.d.ts b/src/models/connect.d.ts index 30101dc0..60fe8e1d 100644 --- a/src/models/connect.d.ts +++ b/src/models/connect.d.ts @@ -1,13 +1,13 @@ -import { MenuDataItem, Settings as ProSettings } from '@ant-design/pro-layout'; +import type { MenuDataItem, Settings as ProSettings } from '@ant-design/pro-layout'; import { GlobalModelState } from './global'; import { UserModelState } from './user'; -import { StateType } from './login'; +import type { StateType } from './login'; export { GlobalModelState, UserModelState }; -export interface Loading { +export type Loading = { global: boolean; - effects: { [key: string]: boolean | undefined }; + effects: Record; models: { global?: boolean; menu?: boolean; @@ -15,16 +15,16 @@ export interface Loading { user?: boolean; login?: boolean; }; -} +}; -export interface ConnectState { +export type ConnectState = { global: GlobalModelState; loading: Loading; settings: ProSettings; user: UserModelState; login: StateType; -} +}; -export interface Route extends MenuDataItem { +export type Route = { routes?: Route[]; -} +} & MenuDataItem; diff --git a/src/models/global.ts b/src/models/global.ts index c7a30342..c9e78baf 100644 --- a/src/models/global.ts +++ b/src/models/global.ts @@ -1,21 +1,21 @@ -import { Reducer, Effect } from 'umi'; +import type { Reducer, Effect } from 'umi'; -import { NoticeIconData } from '@/components/NoticeIcon'; +import type { NoticeIconData } from '@/components/NoticeIcon'; import { queryNotices } from '@/services/user'; -import { ConnectState } from './connect.d'; +import type { ConnectState } from './connect.d'; -export interface NoticeItem extends NoticeIconData { +export type NoticeItem = { id: string; type: string; status: string; -} +} & NoticeIconData; -export interface GlobalModelState { +export type GlobalModelState = { collapsed: boolean; notices: NoticeItem[]; -} +}; -export interface GlobalModelType { +export type GlobalModelType = { namespace: 'global'; state: GlobalModelState; effects: { @@ -28,7 +28,7 @@ export interface GlobalModelType { saveNotices: Reducer; saveClearedNotices: Reducer; }; -} +}; const GlobalModel: GlobalModelType = { namespace: 'global', diff --git a/src/models/login.ts b/src/models/login.ts index 173fc072..b08880d5 100644 --- a/src/models/login.ts +++ b/src/models/login.ts @@ -1,18 +1,19 @@ import { stringify } from 'querystring'; -import { history, Reducer, Effect } from 'umi'; +import type { Reducer, Effect } from 'umi'; +import { history } from 'umi'; import { fakeAccountLogin } from '@/services/login'; import { setAuthority } from '@/utils/authority'; import { getPageQuery } from '@/utils/utils'; import { message } from 'antd'; -export interface StateType { +export type StateType = { status?: 'ok' | 'error'; type?: string; currentAuthority?: 'user' | 'guest' | 'admin'; -} +}; -export interface LoginModelType { +export type LoginModelType = { namespace: string; state: StateType; effects: { @@ -22,7 +23,7 @@ export interface LoginModelType { reducers: { changeLoginStatus: Reducer; }; -} +}; const Model: LoginModelType = { namespace: 'login', diff --git a/src/models/setting.ts b/src/models/setting.ts index 37a4ea7c..351ab16c 100644 --- a/src/models/setting.ts +++ b/src/models/setting.ts @@ -1,13 +1,14 @@ -import { Reducer } from 'umi'; -import defaultSettings, { DefaultSettings } from '../../config/defaultSettings'; +import type { Reducer } from 'umi'; +import type { DefaultSettings } from '../../config/defaultSettings'; +import defaultSettings from '../../config/defaultSettings'; -export interface SettingModelType { +export type SettingModelType = { namespace: 'settings'; state: DefaultSettings; reducers: { changeSetting: Reducer; }; -} +}; const updateColorWeak: (colorWeak: boolean) => void = (colorWeak) => { const root = document.getElementById('root'); diff --git a/src/models/user.ts b/src/models/user.ts index ff5160df..bec54fa6 100644 --- a/src/models/user.ts +++ b/src/models/user.ts @@ -1,8 +1,8 @@ -import { Effect, Reducer } from 'umi'; +import type { Effect, Reducer } from 'umi'; import { queryCurrent, query as queryUsers } from '@/services/user'; -export interface CurrentUser { +export type CurrentUser = { avatar?: string; name?: string; title?: string; @@ -14,13 +14,13 @@ export interface CurrentUser { }[]; userid?: string; unreadCount?: number; -} +}; -export interface UserModelState { +export type UserModelState = { currentUser?: CurrentUser; -} +}; -export interface UserModelType { +export type UserModelType = { namespace: 'user'; state: UserModelState; effects: { @@ -31,7 +31,7 @@ export interface UserModelType { saveCurrentUser: Reducer; changeNotifyCount: Reducer; }; -} +}; const UserModel: UserModelType = { namespace: 'user', diff --git a/src/pages/404.tsx b/src/pages/404.tsx index 7e65e2b4..301e1739 100644 --- a/src/pages/404.tsx +++ b/src/pages/404.tsx @@ -2,7 +2,7 @@ import { Button, Result } from 'antd'; import React from 'react'; import { history } from 'umi'; -const NoFoundPage: React.FC<{}> = () => ( +const NoFoundPage: React.FC = () => ( { +export type FormValueType = { target?: string; template?: string; type?: string; time?: string; frequency?: string; -} +} & Partial; -export interface UpdateFormProps { +export type UpdateFormProps = { onCancel: (flag?: boolean, formVals?: FormValueType) => void; onSubmit: (values: FormValueType) => Promise; updateModalVisible: boolean; values: Partial; -} +}; const UpdateForm: React.FC = (props) => { const intl = useIntl(); @@ -46,7 +46,9 @@ const UpdateForm: React.FC = (props) => { })} visible={props.updateModalVisible} footer={submitter} - onCancel={() => props.onCancel()} + onCancel={() => { + props.onCancel(); + }} > {dom} diff --git a/src/pages/ListTableList/data.d.ts b/src/pages/ListTableList/data.d.ts index 90e13d36..1c402789 100644 --- a/src/pages/ListTableList/data.d.ts +++ b/src/pages/ListTableList/data.d.ts @@ -1,4 +1,4 @@ -export interface TableListItem { +export type TableListItem = { key: number; disabled?: boolean; href: string; @@ -11,26 +11,26 @@ export interface TableListItem { updatedAt: Date; createdAt: Date; progress: number; -} +}; -export interface TableListPagination { +export type TableListPagination = { total: number; pageSize: number; current: number; -} +}; -export interface TableListData { +export type TableListData = { list: TableListItem[]; pagination: Partial; -} +}; -export interface TableListParams { +export type TableListParams = { status?: string; name?: string; desc?: string; key?: number; pageSize?: number; currentPage?: number; - filter?: { [key: string]: any[] }; - sorter?: { [key: string]: any }; -} + filter?: Record; + sorter?: Record; +}; diff --git a/src/pages/ListTableList/index.tsx b/src/pages/ListTableList/index.tsx index 606e3bcf..ff7e1c32 100644 --- a/src/pages/ListTableList/index.tsx +++ b/src/pages/ListTableList/index.tsx @@ -3,11 +3,14 @@ import { Button, message, Input, Drawer } from 'antd'; import React, { useState, useRef } from 'react'; import { useIntl, FormattedMessage } from 'umi'; import { PageContainer, FooterToolbar } from '@ant-design/pro-layout'; -import ProTable, { ProColumns, ActionType } from '@ant-design/pro-table'; +import type { ProColumns, ActionType } from '@ant-design/pro-table'; +import ProTable from '@ant-design/pro-table'; import { ModalForm, ProFormText, ProFormTextArea } from '@ant-design/pro-form'; -import ProDescriptions, { ProDescriptionsItemProps } from '@ant-design/pro-descriptions'; -import UpdateForm, { FormValueType } from './components/UpdateForm'; -import { TableListItem } from './data.d'; +import type { ProDescriptionsItemProps } from '@ant-design/pro-descriptions'; +import ProDescriptions from '@ant-design/pro-descriptions'; +import type { FormValueType } from './components/UpdateForm'; +import UpdateForm from './components/UpdateForm'; +import type { TableListItem } from './data.d'; import { queryRule, updateRule, addRule, removeRule } from './service'; /** @@ -72,7 +75,7 @@ const handleRemove = async (selectedRows: TableListItem[]) => { } }; -const TableList: React.FC<{}> = () => { +const TableList: React.FC = () => { /** * 新建窗口的弹窗 */ @@ -223,14 +226,22 @@ const TableList: React.FC<{}> = () => { labelWidth: 120, }} toolBarRender={() => [ - , ]} request={(params, sorter, filter) => queryRule({ ...params, sorter, filter })} columns={columns} rowSelection={{ - onChange: (_, selectedRows) => setSelectedRows(selectedRows), + onChange: (_, selectedRows) => { + setSelectedRows(selectedRows); + }, }} /> {selectedRowsState?.length > 0 && ( diff --git a/src/pages/ListTableList/service.ts b/src/pages/ListTableList/service.ts index e008a6db..59fddc64 100644 --- a/src/pages/ListTableList/service.ts +++ b/src/pages/ListTableList/service.ts @@ -1,5 +1,5 @@ import request from '@/utils/request'; -import { TableListParams, TableListItem } from './data.d'; +import type { TableListParams, TableListItem } from './data.d'; export async function queryRule(params?: TableListParams) { return request('/api/rule', { diff --git a/src/pages/Welcome.tsx b/src/pages/Welcome.tsx index 0c640e93..20cd9646 100644 --- a/src/pages/Welcome.tsx +++ b/src/pages/Welcome.tsx @@ -4,7 +4,7 @@ import { Card, Alert, Typography } from 'antd'; import { useIntl, FormattedMessage } from 'umi'; import styles from './Welcome.less'; -const CodePreview: React.FC<{}> = ({ children }) => ( +const CodePreview: React.FC = ({ children }) => (
     
       {children}
diff --git a/src/pages/user/login/index.tsx b/src/pages/user/login/index.tsx
index 31b09592..e407a5ba 100644
--- a/src/pages/user/login/index.tsx
+++ b/src/pages/user/login/index.tsx
@@ -10,18 +10,20 @@ import {
 import { Alert, Space, message, Tabs } from 'antd';
 import React, { useState } from 'react';
 import ProForm, { ProFormCaptcha, ProFormCheckbox, ProFormText } from '@ant-design/pro-form';
-import { connect, Dispatch, useIntl, FormattedMessage } from 'umi';
-import { StateType } from '@/models/login';
-import { getFakeCaptcha, LoginParamsType } from '@/services/login';
-import { ConnectState } from '@/models/connect';
+import { useIntl, connect, FormattedMessage } from 'umi';
+import { getFakeCaptcha } from '@/services/login';
+import type { Dispatch } from 'umi';
+import type { StateType } from '@/models/login';
+import type { LoginParamsType } from '@/services/login';
+import type { ConnectState } from '@/models/connect';
 
 import styles from './index.less';
 
-interface LoginProps {
+export type LoginProps = {
   dispatch: Dispatch;
   userLogin: StateType;
   submitting?: boolean;
-}
+};
 
 const LoginMessage: React.FC<{
   content: string;
@@ -65,8 +67,9 @@ const Login: React.FC = (props) => {
             },
           },
         }}
-        onFinish={async (values) => {
+        onFinish={(values) => {
           handleSubmit(values);
+          return Promise.resolve();
         }}
       >
         
@@ -191,17 +194,18 @@ const Login: React.FC = (props) => {
                 id: 'pages.login.captcha.placeholder',
                 defaultMessage: '请输入验证码',
               })}
-              captchaTextRender={(timing, count) =>
-                timing
-                  ? `${count} ${intl.formatMessage({
-                      id: 'pages.getCaptchaSecondText',
-                      defaultMessage: '获取验证码',
-                    })}`
-                  : intl.formatMessage({
-                      id: 'pages.login.phoneLogin.getVerificationCode',
-                      defaultMessage: '获取验证码',
-                    })
-              }
+              captchaTextRender={(timing, count) => {
+                if (timing) {
+                  return `${count} ${intl.formatMessage({
+                    id: 'pages.getCaptchaSecondText',
+                    defaultMessage: '获取验证码',
+                  })}`;
+                }
+                return intl.formatMessage({
+                  id: 'pages.login.phoneLogin.getVerificationCode',
+                  defaultMessage: '获取验证码',
+                });
+              }}
               name="captcha"
               rules={[
                 {
diff --git a/src/service-worker.js b/src/service-worker.js
index 03b3d519..6874fe81 100644
--- a/src/service-worker.js
+++ b/src/service-worker.js
@@ -56,14 +56,16 @@ addEventListener('message', (event) => {
   if (replyPort && message && message.type === 'skip-waiting') {
     event.waitUntil(
       self.skipWaiting().then(
-        () =>
+        () => {
           replyPort.postMessage({
             error: null,
-          }),
-        (error) =>
+          });
+        },
+        (error) => {
           replyPort.postMessage({
             error,
-          }),
+          });
+        },
       ),
     );
   }
diff --git a/src/services/login.ts b/src/services/login.ts
index 5c694dff..d37e269e 100644
--- a/src/services/login.ts
+++ b/src/services/login.ts
@@ -1,11 +1,11 @@
 import request from '@/utils/request';
 
-export interface LoginParamsType {
+export type LoginParamsType = {
   userName: string;
   password: string;
   mobile: string;
   captcha: string;
-}
+};
 
 export async function fakeAccountLogin(params: LoginParamsType) {
   return request('/api/login/account', {
diff --git a/src/typings.d.ts b/src/typings.d.ts
index eb1d9553..70a4220f 100644
--- a/src/typings.d.ts
+++ b/src/typings.d.ts
@@ -13,13 +13,14 @@ declare module '*.tiff';
 declare module 'omit.js';
 
 // google analytics interface
-interface GAFieldsObject {
+type GAFieldsObject = {
   eventCategory: string;
   eventAction: string;
   eventLabel?: string;
   eventValue?: number;
   nonInteraction?: boolean;
-}
+};
+
 interface Window {
   ga: (
     command: 'send',
@@ -29,7 +30,7 @@ interface Window {
   reloadAuthorized: () => void;
 }
 
-declare let ga: Function;
+declare let ga: () => void;
 
 // preview.pro.ant.design only do not use in your production ;
 // preview.pro.ant.design 专用环境变量,请不要在你的项目中使用它。