feat: Add administrator link in header in user center page

1. Add administrator link in header in user center page
2. Refactor overview component in user center
3. Refactor HeaderRightContent component
4. Add isUserCenterPage prop in containers

Change-Id: I03357e70d4fbe860740c3663f35aef63457835bb
This commit is contained in:
Jingwei.Zhang 2021-09-14 10:56:45 +08:00
parent 5d69f66eac
commit a647053b40
4 changed files with 72 additions and 60 deletions

View File

@ -152,13 +152,8 @@ class AvatarDropdown extends React.Component {
shape="circle" shape="circle"
icon={<UserOutlined />} icon={<UserOutlined />}
className={styles.avatar} className={styles.avatar}
onClick={() => { href="/user/center"
const { rootStore } = this.props;
rootStore.routing.push('/user/center');
}}
/> />
{/* <Avatar size="small" className={styles.avatar} src={currentUser.avatar} alt="avatar" /> */}
{/* <span className={styles.name}>{currentUser.name}</span> */}
</div> </div>
</HeaderDropdown> </HeaderDropdown>
); );

View File

@ -12,42 +12,43 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
import React from 'react'; import React, { PureComponent } from 'react';
import { Button, Col, Row } from 'antd'; import { Button, Col, Row } from 'antd';
import { isUserCenterPage } from 'utils';
import Avatar from './AvatarDropdown'; import Avatar from './AvatarDropdown';
import styles from './index.less'; import styles from './index.less';
// eslint-disable-next-line no-unused-vars export class GlobalHeaderRight extends PureComponent {
const gotoConsole = (type, props) => { get isAdminPage() {
const { rootStore } = props; const { isAdminPage = false } = this.props;
rootStore.clearData(); return isAdminPage;
if (type === 0) {
rootStore.routing.push('/base/overview');
} else {
rootStore.routing.push('/base/overview-admin');
} }
};
const GlobalHeaderRight = (props) => { get isUserCenterPage() {
const { const { isUserCenterPage = false } = this.props;
isAdminPage = false, return isUserCenterPage;
rootStore: { hasAdminPageRole = false } = {}, }
location: { pathname },
} = props; renderConsole() {
let linkRender = null; if (this.isAdminPage || this.isUserCenterPage) {
if (isAdminPage || isUserCenterPage(pathname)) { return (
linkRender = ( <Button
<Button type="link"
type="link" href="/base/overview"
href="/base/overview" className={styles['single-link']}
className={styles['single-link']} >
> {t('Console')}
{t('Console')} </Button>
</Button> );
); }
} else if (hasAdminPageRole) { return null;
linkRender = ( }
renderAdministrator() {
const { rootStore: { hasAdminPageRole = false } = {} } = this.props;
if (!hasAdminPageRole || this.isAdminPage) {
return null;
}
return (
<Button <Button
type="link" type="link"
href="/base/overview-admin" href="/base/overview-admin"
@ -58,21 +59,26 @@ const GlobalHeaderRight = (props) => {
); );
} }
return ( renderExtra() {
<div className={styles.right}> return null;
<Row }
justify="space-between"
align="middle" render() {
gutter={10} return (
// wrap={false} <div className={styles.right}>
> <Row justify="space-between" align="middle" gutter={10}>
<Col>{linkRender}</Col> <Col>
<Col> {this.renderConsole()}
<Avatar menu /> {this.renderAdministrator()}
</Col> </Col>
</Row> {this.renderExtra()}
</div> <Col>
); <Avatar menu />
}; </Col>
</Row>
</div>
);
}
}
export default GlobalHeaderRight; export default GlobalHeaderRight;

View File

@ -44,6 +44,11 @@ export class BaseLayout extends Component {
return isAdminPage(pathname); return isAdminPage(pathname);
} }
get isUserCenterPage() {
const { pathname } = this.props.location;
return isUserCenterPage(pathname);
}
get rootStore() { get rootStore() {
return this.props.rootStore; return this.props.rootStore;
} }
@ -65,11 +70,8 @@ export class BaseLayout extends Component {
} }
get originMenu() { get originMenu() {
const {
location: { pathname },
} = this.props;
let ret = []; let ret = [];
if (isUserCenterPage(pathname)) { if (this.isUserCenterPage) {
ret = renderUserMenu(i18n.t); ret = renderUserMenu(i18n.t);
} else if (this.isAdminPage) { } else if (this.isAdminPage) {
ret = renderAdminMenu(i18n.t); ret = renderAdminMenu(i18n.t);
@ -223,7 +225,11 @@ export class BaseLayout extends Component {
} }
renderHeader = () => ( renderHeader = () => (
<GlobalHeader {...this.props} isAdminPage={this.isAdminPage} /> <GlobalHeader
{...this.props}
isAdminPage={this.isAdminPage}
isUserCenterPage={this.isUserCenterPage}
/>
); );
render() { render() {

View File

@ -19,7 +19,7 @@ import globalUserStore from 'stores/keystone/user';
import ProfileIcon from 'asset/image/profile.svg'; import ProfileIcon from 'asset/image/profile.svg';
import styles from './styles.less'; import styles from './styles.less';
class Index extends Component { export class Overview extends Component {
componentDidMount() { componentDidMount() {
this.fetchData(); this.fetchData();
} }
@ -34,7 +34,7 @@ class Index extends Component {
renderInfoItem(item) { renderInfoItem(item) {
return ( return (
<Row className={styles.user_info_detail_item}> <Row className={styles.user_info_detail_item}>
<Col span={6}>{t(item.label)}</Col> <Col span={6}>{item.label}</Col>
<Col span={18}>{item.value}</Col> <Col span={18}>{item.value}</Col>
</Row> </Row>
); );
@ -75,13 +75,18 @@ class Index extends Component {
); );
} }
renderExtra() {
return null;
}
render() { render() {
return ( return (
<Layout.Content className={styles.content}> <Layout.Content className={styles.content}>
<Row className={styles.user_info_card}>{this.renderUserInfo()}</Row> <Row className={styles.user_info_card}>{this.renderUserInfo()}</Row>
{this.renderExtra()}
</Layout.Content> </Layout.Content>
); );
} }
} }
export default inject('rootStore')(observer(Index)); export default inject('rootStore')(observer(Overview));