浏览代码

修改密码

魏超 5 年前
父节点
当前提交
3b32cfa105

+ 29
- 7
src/components/GlobalHeader/AvatarDropdown.jsx 查看文件

@@ -5,8 +5,15 @@ import { connect } from 'dva';
5 5
 import router from 'umi/router';
6 6
 import HeaderDropdown from '../HeaderDropdown';
7 7
 import styles from './index.less';
8
+import ShowPassword from './ShowPassword'
8 9
 
9 10
 class AvatarDropdown extends React.Component {
11
+
12
+  constructor(props) {
13
+    super()
14
+    this.state = { visible: false }
15
+  }
16
+
10 17
   onMenuClick = event => {
11 18
     const { key } = event;
12 19
 
@@ -22,9 +29,18 @@ class AvatarDropdown extends React.Component {
22 29
       return;
23 30
     }
24 31
 
32
+    if (key === 'updatePassword') {
33
+      this.setState({ visible: true })
34
+      return;
35
+    }
36
+
25 37
     router.push(`/account/${key}`);
26 38
   };
27 39
 
40
+  onCancel = (e) => {
41
+    this.setState({ visible: false })
42
+  }
43
+  
28 44
   render() {
29 45
     const {
30 46
       currentUser = {
@@ -48,7 +64,10 @@ class AvatarDropdown extends React.Component {
48 64
           </Menu.Item>
49 65
         )}
50 66
         {menu && <Menu.Divider />}
51
-
67
+        <Menu.Item key="updatePassword">
68
+          <Icon type="key" />
69
+          <FormattedMessage id="menu.account.updatePassword" defaultMessage="updatePassword" />
70
+        </Menu.Item>   
52 71
         <Menu.Item key="logout">
53 72
           <Icon type="logout" />
54 73
           <FormattedMessage id="menu.account.logout" defaultMessage="logout" />
@@ -56,12 +75,15 @@ class AvatarDropdown extends React.Component {
56 75
       </Menu>
57 76
     );
58 77
     return currentUser && currentUser.userName ? (
59
-      <HeaderDropdown overlay={menuHeaderDropdown}>
60
-        <span className={`${styles.action} ${styles.account}`}>
61
-          <Avatar size="small" className={styles.avatar} src={currentUser.channelImg} alt="avatar" />
62
-          <span className={styles.name}>{currentUser.userName}</span>
63
-        </span>
64
-      </HeaderDropdown>
78
+      <>
79
+        <HeaderDropdown overlay={menuHeaderDropdown}>
80
+          <span className={`${styles.action} ${styles.account}`}>
81
+            <Avatar size="small" className={styles.avatar} src={currentUser.channelImg} alt="avatar" />
82
+            <span className={styles.name}>{currentUser.userName}</span>
83
+          </span>
84
+        </HeaderDropdown>
85
+        <ShowPassword visible={this.state.visible} onCancel={(e) => this.onCancel(e)} />
86
+      </>  
65 87
     ) : (
66 88
       <Spin
67 89
         size="small"

+ 126
- 0
src/components/GlobalHeader/ShowPassword.jsx 查看文件

@@ -0,0 +1,126 @@
1
+import React, { Component } from 'react'
2
+import { Modal, Button, Form, Input, Icon, notification } from 'antd'
3
+import request from '../../utils/request'
4
+import apis from '../../services/apis'
5
+
6
+
7
+function passwodForm(props) {
8
+
9
+
10
+  const openNotificationWithIcon = (type, message) => {
11
+    notification[type]({
12
+      message,
13
+      description:
14
+        '',
15
+    });
16
+  }
17
+
18
+  function handleSubmit(e) {
19
+    e.preventDefault();
20
+    props.form.validateFieldsAndScroll((err, values) => {
21
+      // 两次密码比较
22
+      if (values.newPassword !== values.newPasswordToo) {
23
+        openNotificationWithIcon('error', '两次密码输入不一样,请重新输入')
24
+        return
25
+      }
26
+      if (!err) {
27
+        request({ ...apis.user.changePassword, params: { ...values } }).then(() => {
28
+          openNotificationWithIcon('success', '操作成功!')
29
+          props.form.resetFields()
30
+          props.onSuccess()
31
+        }).catch(error => {
32
+          // openNotificationWithIcon('error', error.message)
33
+        })
34
+      }
35
+    });
36
+  }
37
+
38
+  const { getFieldDecorator } = props.form
39
+  return (
40
+    <>
41
+      <Form labelCol={{ span: 7 }} wrapperCol={{ span: 12 }} onSubmit={(e) => handleSubmit(e)}>
42
+      <Form.Item label="请输入旧密码">
43
+            {getFieldDecorator('originalPassword', {
44
+              rules: [{ required: true, message: '请输入旧密码' }],
45
+            })(
46
+              <Input
47
+                prefix={<Icon type="lock" style={{ color: 'rgba(0,0,0,.25)' }} />}
48
+                type="password"
49
+                placeholder="Password"
50
+              />,
51
+            )}
52
+          </Form.Item>
53
+        <Form.Item label="新密码">
54
+            {getFieldDecorator('newPassword', {
55
+              rules: [{ required: true, message: '请输入新密码' }],
56
+            })(
57
+              <Input
58
+                prefix={<Icon type="lock" style={{ color: 'rgba(0,0,0,.25)' }} />}
59
+                type="password"
60
+                placeholder="Password"
61
+              />,
62
+            )}
63
+          </Form.Item>
64
+          <Form.Item label="确认新密码">
65
+            {getFieldDecorator('newPasswordToo', {
66
+              rules: [{ required: true, message: '请确认新密码' }],
67
+            })(
68
+              <Input
69
+                prefix={<Icon type="lock" style={{ color: 'rgba(0,0,0,.25)' }} />}
70
+                type="password"
71
+                placeholder="Password"
72
+              />,
73
+            )}
74
+          </Form.Item>
75
+          <Form.Item>
76
+            <Button type="primary" htmlType="submit">
77
+                确定
78
+            </Button>
79
+          </Form.Item>
80
+      </Form>
81
+    </>
82
+  )
83
+}
84
+
85
+const WrappedShowPasswordForm = Form.create({ name: 'passwodForm' })(passwodForm)
86
+
87
+export default class ShowPassword extends Component {
88
+
89
+  constructor(props) {
90
+    super(props)
91
+    this.state = { visible: false }
92
+  }
93
+
94
+  componentDidUpdate(prevProps) {
95
+    // 典型用法(不要忘记比较 props):
96
+    console.log('接收值: ', this.props.visible, prevProps.visible)
97
+    if (this.props.visible !== prevProps.visible) {
98
+      // eslint-disable-next-line react/no-did-update-set-state
99
+      this.setState({ visible: this.props.visible })
100
+    }
101
+  }
102
+
103
+  handleOk = e => {
104
+    console.log('关闭了')
105
+    this.props.onCancel()
106
+  };
107
+
108
+  handleCancel = e => {
109
+    console.log('关闭了')
110
+    this.props.onCancel()
111
+  };
112
+
113
+  render() {
114
+    return (
115
+      <>
116
+        <Modal
117
+          title="修改密码"
118
+          visible={this.state.visible}
119
+          onCancel={this.handleCancel}
120
+          footer={null}>
121
+          <WrappedShowPasswordForm onSuccess={(e) => this.handleCancel(e)} />
122
+        </Modal>
123
+      </>
124
+    );
125
+  }
126
+}

+ 2
- 1
src/locales/zh-CN/menu.js 查看文件

@@ -44,7 +44,8 @@ export default {
44 44
   'menu.account.trigger': '触发报错',
45 45
   'menu.account.logout': '退出登录',
46 46
   'menu.editor': '图形编辑器',
47
+  'menu.account.updatePassword': '修改密码',
47 48
   'menu.editor.flow': '流程编辑器',
48 49
   'menu.editor.mind': '脑图编辑器',
49
-  'menu.editor.koni': '拓扑编辑器',
50
+  'menu.editor.koni': '拓扑编辑器', 
50 51
 };

+ 1
- 1
src/pages/UserManage/index.jsx 查看文件

@@ -174,7 +174,7 @@ export default (props) => {
174 174
                       <Icon type="setting" key="rights" onClick={gotoDetail(member, 3)}/>
175 175
                     </Tooltip>,
176 176
                     <Tooltip title="重置密码">
177
-                      <Icon type="block" key="resetpass" onClick={editPassword(member)}/>
177
+                      <Icon type="block" key="resetpass" onClick={resetPassword(member)}/>
178 178
                     </Tooltip>
179 179
                   ]}
180 180
                 >