diff --git a/src/components/GlobalFooter/index.less b/src/components/GlobalFooter/index.less new file mode 100644 index 0000000000000000000000000000000000000000..e4b3dfd473270f061cc59a92e68640aa0f7ae228 --- /dev/null +++ b/src/components/GlobalFooter/index.less @@ -0,0 +1,29 @@ +@import '~antd/lib/style/themes/default.less'; + +.globalFooter { + margin: 48px 0 24px 0; + padding: 0 16px; + text-align: center; + + .links { + margin-bottom: 8px; + + a { + color: @text-color-secondary; + transition: all 0.3s; + + &:not(:last-child) { + margin-right: 40px; + } + + &:hover { + color: @text-color; + } + } + } + + .copyright { + color: @text-color-secondary; + font-size: @font-size-base; + } +} diff --git a/src/components/GlobalFooter/index.tsx b/src/components/GlobalFooter/index.tsx new file mode 100644 index 0000000000000000000000000000000000000000..01166243a70ac0acd8a974b665b3dd87e9a3d574 --- /dev/null +++ b/src/components/GlobalFooter/index.tsx @@ -0,0 +1,40 @@ +import React from 'react'; +import classNames from 'classnames'; +import styles from './index.less'; + +export interface GlobalFooterProps { + links?: Array<{ + key?: string; + title: React.ReactNode; + href: string; + blankTarget?: boolean; + }>; + copyright?: React.ReactNode; + style?: React.CSSProperties; + className?: string; +} + +const GlobalFooter: React.SFC = ({ className, links, copyright }) => { + const clsString = classNames(styles.globalFooter, className); + return ( + + ); +}; + +export default GlobalFooter; diff --git a/src/components/HeaderSearch/demo/basic.md b/src/components/HeaderSearch/demo/basic.md deleted file mode 100644 index 2139207c026ba26da47c5ef7191abf1dc4b81a98..0000000000000000000000000000000000000000 --- a/src/components/HeaderSearch/demo/basic.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -order: 0 -title: 全局搜索 ---- - -通常放置在导航工具条右侧。(点击搜索图标预览效果) - -````jsx -import HeaderSearch from 'ant-design-pro/lib/HeaderSearch'; - -ReactDOM.render( -
- { - console.log('input', value); // eslint-disable-line - }} - onPressEnter={(value) => { - console.log('enter', value); // eslint-disable-line - }} - /> -
-, mountNode); -```` diff --git a/src/components/HeaderSearch/index.en-US.md b/src/components/HeaderSearch/index.en-US.md deleted file mode 100644 index 9f2b5e8a46078d20bd1efea91efcca4d76f09e5e..0000000000000000000000000000000000000000 --- a/src/components/HeaderSearch/index.en-US.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: HeaderSearch -subtitle: -cols: 1 -order: 8 ---- - -Usually placed as an entry to the global search, placed on the right side of the navigation toolbar. - -## API - -参数 | 说明 | 类型 | 默认值 -----|------|-----|------ -placeholder | placeholder text | string | - -dataSource | current list of prompts | string[] | - -onSearch | Called when searching items. | function(value) | - -onChange | Called when select an option or input value change, or value of input is changed | function(value) | - -onSelect | Called when a option is selected. param is option's value and option instance. | function(value) | - -onPressEnter | Callback when pressing Enter | function(value) | - -onVisibleChange | Show or hide the callback of the text box | function(value) |- -defaultOpen | The input box is displayed for the first time. | boolean | false -open | The input box is displayed | boolean |false \ No newline at end of file diff --git a/src/components/HeaderSearch/index.zh-CN.md b/src/components/HeaderSearch/index.zh-CN.md deleted file mode 100644 index 83e74887f48f92ed380b274cec6c89d883962153..0000000000000000000000000000000000000000 --- a/src/components/HeaderSearch/index.zh-CN.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: HeaderSearch -subtitle: 顶部搜索框 -cols: 1 -order: 8 ---- - -通常作为全局搜索的入口,放置在导航工具条右侧。 - -## API - -参数 | 说明 | 类型 | 默认值 -----|------|-----|------ -placeholder | 占位文字 | string | - -dataSource | 当前提示内容列表 | string[] | - -onSearch | 搜索补全项的时候调用 | function(value) | - -onChange | 选中 option,或 input 的 value 变化时,调用此函数 | function(value) | - -onSelect | 被选中时调用,参数为选中项的 value 值 | function(value) | - -onPressEnter | 按下回车时的回调 | function(value) | - -onVisibleChange | 显示或隐藏文本框的回调 | function(value) |- -defaultOpen | 输入框首次显示是否显示 | boolean | false -open | 控制输入框是否显示 | boolean |false \ No newline at end of file diff --git a/src/layouts/UserLayout.tsx b/src/layouts/UserLayout.tsx index 2ac6a81f97b9c85ba5eabc925c5d07feee468b36..9f3fd1dc56a97abc0344044551c2888a22b171f6 100644 --- a/src/layouts/UserLayout.tsx +++ b/src/layouts/UserLayout.tsx @@ -1,8 +1,7 @@ import SelectLang from '@/components/SelectLang'; -import { MenuDataItem } from '@/components/SiderMenu'; +import GlobalFooter from '@/components/GlobalFooter'; import { ConnectProps, ConnectState } from '@/models/connect'; import getPageTitle from '@/utils/getPageTitle'; -import { GlobalFooter } from 'ant-design-pro'; import { Icon } from 'antd'; import { connect } from 'dva'; import React, { Component, Fragment } from 'react'; @@ -11,6 +10,7 @@ import { formatMessage } from 'umi-plugin-locale'; import Link from 'umi/link'; import logo from '../assets/logo.svg'; import styles from './UserLayout.less'; +import { MenuDataItem } from '@ant-design/pro-layout'; const links = [ { @@ -79,6 +79,6 @@ class UserLayout extends Component { } export default connect(({ menu: menuModel }: ConnectState) => ({ - menuData: menuModel.menuData, + menuDaDocumentTitleta: menuModel.menuData, breadcrumbNameMap: menuModel.breadcrumbNameMap, }))(UserLayout); diff --git a/src/models/global.ts b/src/models/global.ts index 2a68a2ac7e8a8e866f55a0385639be31f375ffa5..5f1d2bd71a8625429befa0fce0192c083bfa38dc 100644 --- a/src/models/global.ts +++ b/src/models/global.ts @@ -2,7 +2,7 @@ import { queryNotices } from '@/services/user'; import { Subscription } from 'dva'; import { Reducer } from 'redux'; import { Effect } from './connect'; -import { NoticeIconData } from 'ant-design-pro/lib/NoticeIcon/NoticeIconTab'; +import { NoticeIconData } from '@/components/NoticeIcon'; export interface NoticeItem extends NoticeIconData { id: string; @@ -107,12 +107,14 @@ const GlobalModel: GlobalModelType = { }, saveNotices(state, { payload }) { return { + collapsed: false, ...state, notices: payload, }; }, saveClearedNotices(state, { payload }) { return { + collapsed: false, ...state, notices: state.notices.filter(item => item.type !== payload), }; diff --git a/src/models/menu.ts b/src/models/menu.ts index 3f94e964637cbbdd08228059da2abc36820555ee..57e1bd95a2880356ed70fd6bd255ad72179b23e9 100644 --- a/src/models/menu.ts +++ b/src/models/menu.ts @@ -1,4 +1,4 @@ -import { MenuDataItem, Route } from '@/components/SiderMenu'; +import { MenuDataItem } from '@ant-design/pro-layout'; import Authorized from '@/utils/Authorized'; import { Effect } from 'dva'; import isEqual from 'lodash/isEqual'; @@ -10,7 +10,7 @@ import defaultSettings from '../../config/defaultSettings'; // Conversion router to menu. function formatter( - data: Route[], + data: MenuDataItem[], parentAuthority?: string[] | string, parentName?: string, ): MenuDataItem[] {