From 9acf4e29844e1f71245bf0a5ea2abdf9f90a4388 Mon Sep 17 00:00:00 2001 From: smallchill Date: Sun, 20 Oct 2019 22:55:46 +0800 Subject: [PATCH] =?UTF-8?q?:tada:=202.5.2.RELEASE=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E4=B8=AD=E5=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/router.config.js | 9 +- package.json | 2 +- src/components/GlobalHeader/RightContent.js | 8 +- src/components/PageHeader/index.js | 10 +- src/layouts/Header.js | 7 +- src/locales/en-US/menu.js | 1 + src/locales/en-US/settings.js | 8 + src/locales/zh-CN/menu.js | 1 + src/locales/zh-CN/settings.js | 8 + src/locales/zh-TW/menu.js | 1 + src/locales/zh-TW/settings.js | 8 + src/pages/Account/Settings/BaseView.js | 286 +++++++++++--------- src/pages/Account/Settings/PasswordView.js | 98 +++++++ src/pages/Dashboard/Workplace.js | 9 +- src/pages/Login/Login.js | 3 + src/services/user.js | 11 + 16 files changed, 319 insertions(+), 151 deletions(-) create mode 100644 src/pages/Account/Settings/PasswordView.js diff --git a/config/router.config.js b/config/router.config.js index 39d7cf3..e8d1306 100644 --- a/config/router.config.js +++ b/config/router.config.js @@ -52,18 +52,19 @@ export default [ }, { path: '/account/settings', - component: './Account/Settings/Info', + //component: './Account/Settings/Info', routes: [ { path: '/account/settings', redirect: '/account/settings/base' }, { path: '/account/settings/base', component: './Account/Settings/BaseView' }, - { path: '/account/settings/security', component: './Account/Settings/SecurityView' }, - { path: '/account/settings/binding', component: './Account/Settings/BindingView' }, + { path: '/account/settings/password', component: './Account/Settings/PasswordView' }, + //{ path: '/account/settings/security', component: './Account/Settings/SecurityView' }, + //{ path: '/account/settings/binding', component: './Account/Settings/BindingView' }, { path: '/account/settings/notification', component: './Account/Settings/NotificationView', }, ], - }, + } ], }, { diff --git a/package.json b/package.json index 2f3c96d..d7aa275 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sword", - "version": "2.5.1", + "version": "2.5.2", "description": "An out-of-box UI solution for enterprise applications", "private": true, "scripts": { diff --git a/src/components/GlobalHeader/RightContent.js b/src/components/GlobalHeader/RightContent.js index 497ca50..4fe012e 100644 --- a/src/components/GlobalHeader/RightContent.js +++ b/src/components/GlobalHeader/RightContent.js @@ -96,14 +96,14 @@ export default class GlobalHeaderRight extends PureComponent { selectedKeys={[]} onClick={onMenuClick} > - - - - + + + + diff --git a/src/components/PageHeader/index.js b/src/components/PageHeader/index.js index 5d47b34..f9813e1 100644 --- a/src/components/PageHeader/index.js +++ b/src/components/PageHeader/index.js @@ -52,10 +52,12 @@ export default class PageHeader extends PureComponent {
{logo &&
{logo}
}
-
- {title &&

{title}

} - {action &&
{action}
} -
+ {title && ( +
+

{title}

+ {action &&
{action}
} +
+ )}
{content &&
{content}
} {extraContent &&
{extraContent}
} diff --git a/src/layouts/Header.js b/src/layouts/Header.js index 18a09f6..69571c5 100644 --- a/src/layouts/Header.js +++ b/src/layouts/Header.js @@ -62,8 +62,11 @@ class HeaderView extends React.Component { return; } if (key === 'userinfo') { - message.success('即将开放'); - // router.push('/account/settings/base'); + router.push('/account/settings/base'); + return; + } + if (key === 'password') { + router.push('/account/settings/password'); return; } if (key === 'triggerError') { diff --git a/src/locales/en-US/menu.js b/src/locales/en-US/menu.js index 2e58201..40e9282 100644 --- a/src/locales/en-US/menu.js +++ b/src/locales/en-US/menu.js @@ -35,6 +35,7 @@ export default { 'menu.exception.trigger': 'Trigger', 'menu.account': 'Account', 'menu.account.center': 'Account Center', + 'menu.account.password': 'Modify Password', 'menu.account.settings': 'Account Settings', 'menu.account.trigger': 'Trigger Error', 'menu.account.logout': 'Logout', diff --git a/src/locales/en-US/settings.js b/src/locales/en-US/settings.js index 822dd00..0e8318b 100644 --- a/src/locales/en-US/settings.js +++ b/src/locales/en-US/settings.js @@ -9,6 +9,8 @@ export default { 'app.settings.basic.email-message': 'Please input your email!', 'app.settings.basic.nickname': 'Nickname', 'app.settings.basic.nickname-message': 'Please input your Nickname!', + 'app.settings.basic.realname': 'Realname', + 'app.settings.basic.realname-message': 'Please input your Realname!', 'app.settings.basic.profile': 'Personal profile', 'app.settings.basic.profile-message': 'Please input your personal profile!', 'app.settings.basic.profile-placeholder': 'Brief introduction to yourself', @@ -21,6 +23,12 @@ export default { 'app.settings.basic.phone': 'Phone Number', 'app.settings.basic.phone-message': 'Please input your phone!', 'app.settings.basic.update': 'Update Information', + 'app.settings.password.old': 'Old Password', + 'app.settings.password.old-message': 'Please input your Old Password!', + 'app.settings.password.new': 'New Password', + 'app.settings.password.new-message': 'Please input your new Password!', + 'app.settings.password.new1': 'New Password1', + 'app.settings.password.new1-message': 'Please comfirm your new Password!', 'app.settings.security.strong': 'Strong', 'app.settings.security.medium': 'Medium', 'app.settings.security.weak': 'Weak', diff --git a/src/locales/zh-CN/menu.js b/src/locales/zh-CN/menu.js index 833d436..f8cee1d 100644 --- a/src/locales/zh-CN/menu.js +++ b/src/locales/zh-CN/menu.js @@ -35,6 +35,7 @@ export default { 'menu.exception.trigger': '触发错误', 'menu.account': '个人页', 'menu.account.center': '个人中心', + 'menu.account.password': '密码修改', 'menu.account.settings': '个人设置', 'menu.account.trigger': '触发报错', 'menu.account.logout': '退出登录', diff --git a/src/locales/zh-CN/settings.js b/src/locales/zh-CN/settings.js index df8af43..be7f3c5 100644 --- a/src/locales/zh-CN/settings.js +++ b/src/locales/zh-CN/settings.js @@ -9,6 +9,8 @@ export default { 'app.settings.basic.email-message': '请输入您的邮箱!', 'app.settings.basic.nickname': '昵称', 'app.settings.basic.nickname-message': '请输入您的昵称!', + 'app.settings.basic.realname': '姓名', + 'app.settings.basic.realname-message': '请输入您的姓名!', 'app.settings.basic.profile': '个人简介', 'app.settings.basic.profile-message': '请输入个人简介!', 'app.settings.basic.profile-placeholder': '个人简介', @@ -21,6 +23,12 @@ export default { 'app.settings.basic.phone': '联系电话', 'app.settings.basic.phone-message': '请输入您的联系电话!', 'app.settings.basic.update': '更新基本信息', + 'app.settings.password.old': '旧密码', + 'app.settings.password.old-message': '请输入你的旧密码!', + 'app.settings.password.new': '新密码', + 'app.settings.password.new-message': '请输入你的新密码!', + 'app.settings.password.new1': '确认密码', + 'app.settings.password.new1-message': '请输入你的确认密码!', 'app.settings.security.strong': '强', 'app.settings.security.medium': '中', 'app.settings.security.weak': '弱', diff --git a/src/locales/zh-TW/menu.js b/src/locales/zh-TW/menu.js index fecae2a..68ed137 100644 --- a/src/locales/zh-TW/menu.js +++ b/src/locales/zh-TW/menu.js @@ -35,6 +35,7 @@ export default { 'menu.exception.trigger': '觸發錯誤', 'menu.account': '個人頁', 'menu.account.center': '個人中心', + 'menu.account.password': '密碼修改', 'menu.account.settings': '個人設置', 'menu.account.trigger': '觸發報錯', 'menu.account.logout': '退出登錄', diff --git a/src/locales/zh-TW/settings.js b/src/locales/zh-TW/settings.js index dd45151..66acea6 100644 --- a/src/locales/zh-TW/settings.js +++ b/src/locales/zh-TW/settings.js @@ -9,6 +9,8 @@ export default { 'app.settings.basic.email-message': '請輸入您的郵箱!', 'app.settings.basic.nickname': '昵稱', 'app.settings.basic.nickname-message': '請輸入您的昵稱!', + 'app.settings.basic.realname': '姓名', + 'app.settings.basic.realname-message': '請輸入您的姓名!', 'app.settings.basic.profile': '個人簡介', 'app.settings.basic.profile-message': '請輸入個人簡介!', 'app.settings.basic.profile-placeholder': '個人簡介', @@ -21,6 +23,12 @@ export default { 'app.settings.basic.phone': '聯系電話', 'app.settings.basic.phone-message': '請輸入您的聯系電話!', 'app.settings.basic.update': '更新基本信息', + 'app.settings.password.old': '舊密碼', + 'app.settings.password.old-message': '請輸入妳的舊密碼!', + 'app.settings.password.new': '新密碼', + 'app.settings.password.new-message': '請輸入妳的新密碼!', + 'app.settings.password.new1': '確認密碼', + 'app.settings.password.new1-message': '請輸入妳的確認密碼!', 'app.settings.security.strong': '強', 'app.settings.security.medium': '中', 'app.settings.security.weak': '弱', diff --git a/src/pages/Account/Settings/BaseView.js b/src/pages/Account/Settings/BaseView.js index 388a835..045948d 100644 --- a/src/pages/Account/Settings/BaseView.js +++ b/src/pages/Account/Settings/BaseView.js @@ -1,106 +1,161 @@ -import React, { Component, Fragment } from 'react'; -import { formatMessage, FormattedMessage } from 'umi/locale'; -import { Form, Input, Upload, Select, Button } from 'antd'; -import { connect } from 'dva'; -import styles from './BaseView.less'; -import GeographicView from './GeographicView'; -import PhoneView from './PhoneView'; -// import { getTimeDistance } from '@/utils/utils'; +import React, { Component } from 'react'; +import { formatMessage } from 'umi/locale'; +import { Form, Input, Upload, Button, message, Icon, Card } from 'antd'; +import Panel from '../../../components/Panel'; +import { getUserInfo, update } from '../../../services/user'; +import { getToken } from '../../../utils/authority'; const FormItem = Form.Item; -const { Option } = Select; -// 头像组件 方便以后独立,增加裁剪之类的功能 -const AvatarView = ({ avatar }) => ( - -
- -
-
- avatar -
- -
- -
-
-
-); - -const validatorGeographic = (rule, value, callback) => { - const { province, city } = value; - if (!province.key) { - callback('Please input your province!'); - } - if (!city.key) { - callback('Please input your city!'); - } - callback(); -}; - -const validatorPhone = (rule, value, callback) => { - const values = value.split('-'); - if (!values[0]) { - callback('Please input your area code!'); - } - if (!values[1]) { - callback('Please input your phone number!'); - } - callback(); -}; - -@connect(({ user }) => ({ - currentUser: user.currentUser, -})) @Form.create() class BaseView extends Component { + state = { + userId: '', + avatar: '', + loading: false, + }; + componentDidMount() { this.setBaseInfo(); } setBaseInfo = () => { - const { currentUser, form } = this.props; - Object.keys(form.getFieldsValue()).forEach(key => { - const obj = {}; - obj[key] = currentUser[key] || null; - form.setFieldsValue(obj); + const { form } = this.props; + getUserInfo().then(resp => { + if (resp.success) { + const userInfo = resp.data; + Object.keys(form.getFieldsValue()).forEach(key => { + const obj = {}; + obj[key] = userInfo[key] || null; + form.setFieldsValue(obj); + }); + this.setState({ userId: userInfo.id, avatar: userInfo.avatar }); + } else { + message.error(resp.msg || '获取数据失败'); + } }); }; - getAvatarURL() { - const { currentUser } = this.props; - if (currentUser.avatar) { - return currentUser.avatar; + beforeUpload = file => { + const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png'; + if (!isJpgOrPng) { + message.error('You can only upload JPG/PNG file!'); } - const url = 'https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png'; - return url; - } + const isLt2M = file.size / 1024 / 1024 < 2; + if (!isLt2M) { + message.error('Image must smaller than 2MB!'); + } + return isJpgOrPng && isLt2M; + }; - getViewDom = ref => { - this.view = ref; + handleChange = info => { + if (info.file.status === 'uploading') { + this.setState({ loading: true }); + return; + } + if (info.file.status === 'done') { + this.setState({ loading: false, avatar: info.file.response.data.link }); + } + }; + + handleSubmit = e => { + e.preventDefault(); + const { form } = this.props; + const { userId, avatar } = this.state; + form.validateFieldsAndScroll((err, values) => { + if (!err) { + const params = { + id: userId, + ...values, + avatar, + }; + update(params).then(resp => { + if (resp.success) { + message.success(resp.msg); + } else { + message.error(resp.msg || '提交失败'); + } + }); + } + }); }; render() { const { form: { getFieldDecorator }, } = this.props; + + const { avatar, loading } = this.state; + + const formItemLayout = { + labelCol: { + xs: { span: 24 }, + sm: { span: 7 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 12 }, + md: { span: 10 }, + }, + }; + + const uploadProp = { + action: '/api/blade-resource/oss/endpoint/put-file', + headers: { + 'Blade-Auth': getToken(), + }, + }; + + const uploadButton = ( +
+ +
上传头像
+
+ ); + + const action = ( + + ); + return ( -
-
-
- - {getFieldDecorator('email', { + + + + + {getFieldDecorator('avatar', { rules: [ { required: true, - message: formatMessage({ id: 'app.settings.basic.email-message' }, {}), + message: formatMessage({ id: 'app.settings.basic.avatar' }, {}), }, ], - })()} + })( + + {avatar ? ( + avatar + ) : ( + uploadButton + )} + + )} - + {getFieldDecorator('name', { rules: [ { @@ -110,81 +165,42 @@ class BaseView extends Component { ], })()} - - {getFieldDecorator('profile', { + + {getFieldDecorator('realName', { rules: [ { required: true, - message: formatMessage({ id: 'app.settings.basic.profile-message' }, {}), - }, - ], - })( - - )} - - - {getFieldDecorator('country', { - rules: [ - { - required: true, - message: formatMessage({ id: 'app.settings.basic.country-message' }, {}), - }, - ], - })( - - )} - - - {getFieldDecorator('geographic', { - rules: [ - { - required: true, - message: formatMessage({ id: 'app.settings.basic.geographic-message' }, {}), - }, - { - validator: validatorGeographic, - }, - ], - })()} - - - {getFieldDecorator('address', { - rules: [ - { - required: true, - message: formatMessage({ id: 'app.settings.basic.address-message' }, {}), + message: formatMessage({ id: 'app.settings.basic.realname-message' }, {}), }, ], })()} - + {getFieldDecorator('phone', { rules: [ { required: true, message: formatMessage({ id: 'app.settings.basic.phone-message' }, {}), }, - { validator: validatorPhone }, ], - })()} + })()} - - -
-
- -
-
+ + {getFieldDecorator('email', { + rules: [ + { + required: true, + message: formatMessage({ id: 'app.settings.basic.email-message' }, {}), + }, + ], + })()} + + + + ); } } diff --git a/src/pages/Account/Settings/PasswordView.js b/src/pages/Account/Settings/PasswordView.js new file mode 100644 index 0000000..1e0e23d --- /dev/null +++ b/src/pages/Account/Settings/PasswordView.js @@ -0,0 +1,98 @@ +import React, { Component } from 'react'; +import { formatMessage } from 'umi/locale'; +import { Form, Input, Button, Card, message } from 'antd'; +import Panel from '../../../components/Panel'; +import { updatePassword } from '../../../services/user'; + +const FormItem = Form.Item; + +@Form.create() +class PasswordView extends Component { + handleSubmit = e => { + e.preventDefault(); + const { form } = this.props; + form.validateFieldsAndScroll((err, values) => { + if (!err) { + updatePassword(values).then(resp => { + if (resp.success) { + message.success(resp.msg); + } + }); + } + }); + }; + + render() { + const { + form: { getFieldDecorator }, + } = this.props; + + const formItemLayout = { + labelCol: { + xs: { span: 24 }, + sm: { span: 7 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 12 }, + md: { span: 10 }, + }, + }; + + const action = ( + + ); + + return ( + +
+ + + {getFieldDecorator('oldPassword', { + rules: [ + { + required: true, + message: formatMessage({ id: 'app.settings.password.old-message' }, {}), + }, + ], + })()} + + + {getFieldDecorator('newPassword', { + rules: [ + { + required: true, + message: formatMessage({ id: 'app.settings.password.new-message' }, {}), + }, + ], + })()} + + + {getFieldDecorator('newPassword1', { + rules: [ + { + required: true, + message: formatMessage({ id: 'app.settings.password.new1-message' }, {}), + }, + ], + })()} + + +
+
+ ); + } +} + +export default PasswordView; diff --git a/src/pages/Dashboard/Workplace.js b/src/pages/Dashboard/Workplace.js index e739ff4..97d4fc9 100644 --- a/src/pages/Dashboard/Workplace.js +++ b/src/pages/Dashboard/Workplace.js @@ -103,7 +103,14 @@ class Workplace extends PureComponent { - + + +
1.增加个人中心,支持用户信息自定义修改
+
2.增加网关鉴权配置示例
+
3.token的SIGN_KEY修改为一致
+
4.admin模块增加对seata服务的过滤
+
5.blade-tool增加部分工具类方法
+
1.增加网关动态鉴权
2.secure安全模块token校验默认关闭,交由网关处理
diff --git a/src/pages/Login/Login.js b/src/pages/Login/Login.js index de53b19..e790394 100644 --- a/src/pages/Login/Login.js +++ b/src/pages/Login/Login.js @@ -122,6 +122,7 @@ class LoginPage extends Component { {tenantMode ? (