Commit f4b6db9e authored by superman's avatar superman

1.3.3

parent c52926c0
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -131,6 +131,7 @@ export default class HeaderOperation extends Component { ...@@ -131,6 +131,7 @@ export default class HeaderOperation extends Component {
<ul> <ul>
<li><a href="javascript:void('退出');" onClick={handleExit}>退出</a></li> <li><a href="javascript:void('退出');" onClick={handleExit}>退出</a></li>
<li><Link to="/my/modifyPassword">修改密码</Link></li> <li><Link to="/my/modifyPassword">修改密码</Link></li>
<li><Link to={'/my/' + user.id}>个人信息</Link></li>
</ul> </ul>
) : null; ) : null;
......
...@@ -36,7 +36,7 @@ export default class App extends Component { ...@@ -36,7 +36,7 @@ export default class App extends Component {
const styles = require('./App.less'); const styles = require('./App.less');
const menu = [ const menu = [
{ {
id:'business', id: 'business',
title: '业务管理', title: '业务管理',
icon: 'mail', icon: 'mail',
items: [ items: [
...@@ -73,9 +73,9 @@ export default class App extends Component { ...@@ -73,9 +73,9 @@ export default class App extends Component {
to: '/withdraw/audits', to: '/withdraw/audits',
cn: '提现审核', cn: '提现审核',
en: 'Withdraw Money' en: 'Withdraw Money'
},{ }, {
to:'/authInfo/audits', to: '/authInfo/audits',
cn:'身份认证审核', cn: '身份认证审核',
en: 'Auth Audits' en: 'Auth Audits'
} }
] ]
...@@ -95,7 +95,7 @@ export default class App extends Component { ...@@ -95,7 +95,7 @@ export default class App extends Component {
} }
] ]
}, { }, {
id:'base', id: 'base',
title: '基础功能', title: '基础功能',
icon: 'folder', icon: 'folder',
items: [ items: [
...@@ -110,8 +110,13 @@ export default class App extends Component { ...@@ -110,8 +110,13 @@ export default class App extends Component {
] ]
} }
] ]
}, { }];
id:'admin',
const {user, location:{pathname}} = this.props;
if (user && user.authorities && user.authorities['ROLE_ADMIN']) {
menu.push({
id: 'admin',
title: '管理员', title: '管理员',
icon: 'folder', icon: 'folder',
items: [ items: [
...@@ -139,9 +144,43 @@ export default class App extends Component { ...@@ -139,9 +144,43 @@ export default class App extends Component {
] ]
} }
] ]
}]; })
}
const {user, location:{pathname}} = this.props; menu.push({
id: 'setting',
title: '设置',
icon: 'setting',
items: [
{
title: '个人信息',
items: [
{
to: '/my/modifyPassword',
cn: '修改密码',
en: 'Modify Password'
}, {
to: '/my/' + (user && user.id || ''),
cn: '个人资料',
en: 'Profile setting'
}, {
onClick: (e)=> {
e.preventDefault();
this.props.dispatch({
type: 'LOGIN_REQUEST',
replace: this.props.history.replace
});
this.props.dispatch({
type: 'LOGOUT'
});
},
cn: '退出',
en: 'Exit System'
}
]
}
]
});
const logo = require('./images/logo.png'); const logo = require('./images/logo.png');
...@@ -157,13 +196,13 @@ export default class App extends Component { ...@@ -157,13 +196,13 @@ export default class App extends Component {
<Menu mode="inline" defaultOpenKeys={['sub1']}> <Menu mode="inline" defaultOpenKeys={['sub1']}>
{user && user.token && {user && user.token &&
menu.map((submenu, si)=> menu.map((submenu, si)=>
<SubMenu key={'submenu'+si} title={ <SubMenu key={'submenu' + si} title={
<span><Icon type={submenu.icon} /><span>{submenu.title}</span></span> <span><Icon type={submenu.icon}/><span>{submenu.title}</span></span>
}> }>
{submenu.items.map((menus, mi)=> {submenu.items.map((menus, mi)=>
<MenuItemGroup key={'menu-item-group-'+si+'-'+ mi} title={menus.title}> <MenuItemGroup key={'menu-item-group-' + si + '-' + mi} title={menus.title}>
{menus.items.map((item, ii)=> {menus.items.map((item, ii)=>
<Menu.Item key={[si, mi,ii].join('-')}> <Menu.Item key={[si, mi, ii].join('-')}>
<MenuItemContent {...item}/> <MenuItemContent {...item}/>
</Menu.Item> </Menu.Item>
)} )}
...@@ -193,14 +232,22 @@ class MenuItemContent extends Component { ...@@ -193,14 +232,22 @@ class MenuItemContent extends Component {
} }
render() { render() {
const {to, cn, en} = this.props; const {to, cn, en, onClick} = this.props;
return ( return (
<Link to={to}> onClick ?
<span> <a href={"javascript:void('" + cn + "');"} onClick={onClick}>
<span className="cn">{cn}</span> <span>
<span className="en">{en}</span> <span className="cn">{cn}</span>
</span> <span className="en">{en}</span>
</Link> </span>
</a>
:
<Link to={to}>
<span>
<span className="cn">{cn}</span>
<span className="en">{en}</span>
</span>
</Link>
); );
} }
} }
......
...@@ -119,6 +119,12 @@ export default class EditItem extends Component { ...@@ -119,6 +119,12 @@ export default class EditItem extends Component {
} }
}) })
} }
if(data.name){
if(!/^ROLE_/g.test(data.name)){
data.name = 'ROLE_' + data.name;
}
data.name = (data.name+'').toUpperCase();
}
console.log(data); console.log(data);
this.props.dispatch({ this.props.dispatch({
type: data.id ? 'UPDATE_AUTHORITY_ITEM' : 'CREATE_AUTHORITY_ITEM', type: data.id ? 'UPDATE_AUTHORITY_ITEM' : 'CREATE_AUTHORITY_ITEM',
...@@ -253,46 +259,50 @@ export default class EditItem extends Component { ...@@ -253,46 +259,50 @@ export default class EditItem extends Component {
hasCancel={!isCreate}/> hasCancel={!isCreate}/>
</Col> </Col>
<Col span="12"> {
<Tree checkable={isEdit} params.id !== 'ROLE_ADMIN' &&
defaultExpandAll={true} <Col span="12">
checkedKeys={this.state.checkedKeys} <Tree checkable={isEdit}
onCheck={(checkedKeys)=> { defaultExpandAll={true}
this.setState({checkedKeys}); checkedKeys={this.state.checkedKeys}
}}> onCheck={(checkedKeys)=> {
{ this.setState({checkedKeys});
Object.keys(this.state.resourcesCategoryMap).map((key, index)=> }}>
<Tree.TreeNode className="resource-category" key={'c-' + key} {
title={key}> Object.keys(this.state.resourcesCategoryMap).map((key, index)=>
{ <Tree.TreeNode className="resource-category" key={'c-' + key}
this.state.resourcesCategoryMap[key].map(res=> title={key}>
<Tree.TreeNode className="resource-item" {
key={ this.state.resourcesCategoryMap[key].map(res=>
res.action.length === 1 ? res.action &&
('a-' + res.controllerName + '-' + res.action[0].value) : <Tree.TreeNode className="resource-item"
('r-' + res.id) key={
} res.action.length === 1 ?
title={ ('a-' + res.controllerName + '-' + res.action[0].value) :
res.description + ( ('r-' + res.id)
res.action.length === 1 ? ' - ' + res.action[0].label : '' }
) title={
}> res.description + (
{ res.action.length === 1 ? ' - ' + res.action[0].label : ''
res.action.length > 1 && res.action.map(action=> )
<Tree.TreeNode className="resource-action" }>
key={'a-' + res.controllerName + '-' + action.value} {
title={action.label}/> res.action.length > 1 && res.action.map(action=>
) <Tree.TreeNode className="resource-action"
} key={'a-' + res.controllerName + '-' + action.value}
</Tree.TreeNode> title={action.label}/>
) )
} }
</Tree.TreeNode> </Tree.TreeNode>
) )
} }
</Tree> </Tree.TreeNode>
)
}
</Tree>
</Col> </Col>
}
</Row> </Row>
</Form> </Form>
} }
......
...@@ -93,7 +93,7 @@ export default class List extends Component { ...@@ -93,7 +93,7 @@ export default class List extends Component {
dispatch dispatch
} = this.props; } = this.props;
const handleRemove = (id)=>{ const handleRemove = (id)=> {
dispatch({ dispatch({
type: 'DELETE_AUTHORITY_ITEM', type: 'DELETE_AUTHORITY_ITEM',
id id
...@@ -131,17 +131,23 @@ export default class List extends Component { ...@@ -131,17 +131,23 @@ export default class List extends Component {
render: (status)=>( render: (status)=>(
<span>{enableStatusToString(status)}</span> <span>{enableStatusToString(status)}</span>
) )
},{ }, {
title: '操作', title: '操作',
key: 'operation', key: 'operation',
width: 120, width: 120,
className: 'tac', className: 'tac',
render: (text, record)=>( render: (text, record)=>(
<Popconfirm title="确定要删除这个角色吗?" (record.name === 'ROLE_ADMIN' || record.name === 'ROLE_USER' || record.name === 'ROLE_DEFAULT') ?
onClick={e=>{e.preventDefault();e.stopPropagation();}} ''
onConfirm={handleRemove.bind(this, record.name )} > :
<a href="javascript:void('删除')">删除</a> <Popconfirm title="确定要删除这个角色吗?"
</Popconfirm> onClick={e=> {
e.preventDefault();
e.stopPropagation();
}}
onConfirm={handleRemove.bind(this, record.name)}>
<a href="javascript:void('删除')">删除</a>
</Popconfirm>
) )
} }
]; ];
...@@ -171,11 +177,12 @@ export default class List extends Component { ...@@ -171,11 +177,12 @@ export default class List extends Component {
const buttons = [{ const buttons = [{
key:'add', key: 'add',
link:'/admin/authorities/create', link: '/admin/authorities/create',
onClick:()=>{} onClick: ()=> {
},{ }
key:'filter', }, {
key: 'filter',
}]; }];
const operation = ( const operation = (
...@@ -183,7 +190,6 @@ export default class List extends Component { ...@@ -183,7 +190,6 @@ export default class List extends Component {
); );
const header = ( const header = (
<MainHeader breadcrumb={['角色管理', '角色列表']} <MainHeader breadcrumb={['角色管理', '角色列表']}
title="角色列表" title="角色列表"
...@@ -199,7 +205,7 @@ export default class List extends Component { ...@@ -199,7 +205,7 @@ export default class List extends Component {
{ {
cates && cates &&
<Cascader options={cates} placeholder="请选产品类目" {...filterFormItemStyle} <Cascader options={cates} placeholder="请选产品类目" {...filterFormItemStyle}
{...getFieldProps('categoryId')} {...getFieldProps('categoryId')}
/> />
} }
</Form.Item> </Form.Item>
...@@ -235,10 +241,10 @@ export default class List extends Component { ...@@ -235,10 +241,10 @@ export default class List extends Component {
return ( return (
<Layout header={header}> <Layout header={header}>
<Table className="list-table" columns={columns} <Table className="list-table" columns={columns}
dataSource={Array.isArray(items)?items:[]} dataSource={Array.isArray(items) ? items : []}
loading={loading} loading={loading}
pagination={pagination} pagination={pagination}
scroll={{ y: window.innerHeight-(this.state.filterVisible? 203 :150) }} scroll={{y: window.innerHeight - (this.state.filterVisible ? 203 : 150)}}
onRowClick={this.handleRowClick.bind(this)} onRowClick={this.handleRowClick.bind(this)}
/> />
</Layout> </Layout>
......
...@@ -2,10 +2,19 @@ import React, {Component, PropTypes} from 'react'; ...@@ -2,10 +2,19 @@ import React, {Component, PropTypes} from 'react';
const Home = ({location}) => { const Home = ({location}) => {
const styles = require('./Home.less');
return ( return (
<div style={{padding: '20px 50px 20px 100px'}}> <div className={styles.home}>
<h1 style={{marginBottom: 50}}>欢迎使用枢纽科技后台</h1> <h1 style={{marginBottom: 50}}>欢迎使用枢纽科技后台</h1>
<h3>2016-08-18 更新 1.3.3</h3>
<p>
1. 菜单栏增加"设置"; "管理员"菜单只分配给管理员角色。<br/>
2. 修复Window下, 报单审核照片下载文件扩展名缺失。<br/>
3. 创建角色时, 角色ID强制"ROLE_"开头<br/>
4. ROLE_ADMIN, ROLE_USER, ROLE_DEFAULT 三个角色不允许删除<br/>
</p>
<h3>2016-08-17 更新 1.3.2</h3> <h3>2016-08-17 更新 1.3.2</h3>
<p> <p>
1. 报单审核列表页 下载审核成功的照片 1. 报单审核列表页 下载审核成功的照片
......
.home {
padding: 20px 50px 20px 100px;
h1 {
font-size: 24px !important;
}
h3 {
margin-top: 30px !important;
color: #666 !important;
}
p {
margin-top: 10px !important;
color: #888 !important;
}
}
...@@ -84,9 +84,6 @@ export default class List extends Component { ...@@ -84,9 +84,6 @@ export default class List extends Component {
// } // }
render() { render() {
console.log('render');
const {total, items, loading, history:{replace}, location:{pathname, query}} = this.props; const {total, items, loading, history:{replace}, location:{pathname, query}} = this.props;
const {selectedRowKeys} = this.state; const {selectedRowKeys} = this.state;
...@@ -128,7 +125,7 @@ export default class List extends Component { ...@@ -128,7 +125,7 @@ export default class List extends Component {
} }
const iframe = document.createElement('iframe'); const iframe = document.createElement('iframe');
const ids = selectedRowKeys.join(','); const ids = selectedRowKeys.join(',');
iframe.src = '/zip/' + name + '?id=' + ids; iframe.src = '/zip/' + name + '.zip?id=' + ids;
document.body.appendChild(iframe); document.body.appendChild(iframe);
setTimeout(()=> { setTimeout(()=> {
document.body.removeChild(iframe); document.body.removeChild(iframe);
...@@ -202,7 +199,7 @@ export default class List extends Component { ...@@ -202,7 +199,7 @@ export default class List extends Component {
<a href="javascript:void('下载');" onClick={e=>{ <a href="javascript:void('下载');" onClick={e=>{
e.stopPropagation(); e.stopPropagation();
const iframe = document.createElement('iframe'); const iframe = document.createElement('iframe');
iframe.src = '/zip/' + record.id + '?id=' + record.id; iframe.src = '/zip/' + record.id + '.zip?id=' + record.id;
document.body.appendChild(iframe); document.body.appendChild(iframe);
setTimeout(()=> { setTimeout(()=> {
document.body.removeChild(iframe); document.body.removeChild(iframe);
......
...@@ -108,10 +108,10 @@ export default class PassItem extends Component { ...@@ -108,10 +108,10 @@ export default class PassItem extends Component {
} }
}]; }];
if(audit && audit.status == 1){ if (audit && audit.status == 1) {
buttons.unshift({ buttons.unshift({
key:'edit', key: 'edit',
onClick:e=> { onClick: e=> {
e.preventDefault(); e.preventDefault();
this.setState({isEdit: !this.state.isEdit}) this.setState({isEdit: !this.state.isEdit})
} }
...@@ -253,6 +253,18 @@ export default class PassItem extends Component { ...@@ -253,6 +253,18 @@ export default class PassItem extends Component {
}}> }}>
<Icon type="rollback"/>返回 <Icon type="rollback"/>返回
</Button> </Button>
{
audit.status == 9 &&
<Button style={{marginLeft:'1em'}} type="ghost" onClick={e=>{
e.stopPropagation();
const iframe = document.createElement('iframe');
iframe.src = '/zip/' + params.id + '.zip?id=' + params.id;
document.body.appendChild(iframe);
setTimeout(()=> {
document.body.removeChild(iframe);
}, 1000);
}}>下载</Button>
}
</Form.Item> </Form.Item>
</Col> </Col>
<Col span="12"> <Col span="12">
......
...@@ -22,7 +22,7 @@ import { ...@@ -22,7 +22,7 @@ import {
import Layout from '../../components/Layout/Layout'; import Layout from '../../components/Layout/Layout';
import MainHeader from '../../components/MainHeader/MainHeader'; import MainHeader from '../../components/MainHeader/MainHeader';
import HeaderOperation,{DetailOperations} from '../../components/HeaderOperation/HeaderOperation'; import HeaderOperation, {DetailOperations} from '../../components/HeaderOperation/HeaderOperation';
import { import {
...@@ -87,12 +87,11 @@ export default class EditItem extends Component { ...@@ -87,12 +87,11 @@ export default class EditItem extends Component {
render() { render() {
const {item, loading, form:{getFieldProps}, location:{query}, isEdit, dispatch} = this.props; const {item, loading, form:{getFieldProps}, location:{query}, isEdit, dispatch} = this.props;
const header = ( const header = (
<MainHeader breadcrumb={['权限管理', '权限资源详情']} <MainHeader breadcrumb={['权限管理', '权限资源详情']}
title={'权限资源详情' + (isEdit ? ' - 编辑' : '')} title={'权限资源详情' + (isEdit ? ' - 编辑' : '')}
operation={<HeaderOperation buttons={item && DetailOperations('RESOURCE', item.id, isEdit, dispatch)} />} operation={<HeaderOperation
buttons={item ? DetailOperations('RESOURCE', item.id, isEdit, dispatch) : []}/>}
/> />
); );
...@@ -107,7 +106,7 @@ export default class EditItem extends Component { ...@@ -107,7 +106,7 @@ export default class EditItem extends Component {
{ {
isEdit ? isEdit ?
<Select <Select
style={{width:200}} {...getFieldProps('category', {initialValue: item.category})}> style={{width: 200}} {...getFieldProps('category', {initialValue: item.category})}>
<Select.Option value="业务管理">业务管理</Select.Option> <Select.Option value="业务管理">业务管理</Select.Option>
<Select.Option value="基础功能">基础功能</Select.Option> <Select.Option value="基础功能">基础功能</Select.Option>
<Select.Option value="系统管理">系统管理</Select.Option> <Select.Option value="系统管理">系统管理</Select.Option>
...@@ -143,14 +142,14 @@ export default class EditItem extends Component { ...@@ -143,14 +142,14 @@ export default class EditItem extends Component {
<Form.Item label="Actions" {...smallFormItemLayout}> <Form.Item label="Actions" {...smallFormItemLayout}>
{ {
resourceActions(item.actionMask).map(({label, value})=> resourceActions(item.actionMask).map(({label, value})=>
<span key={value} style={{marginRight:'1em'}}>{label}</span> <span key={value} style={{marginRight: '1em'}}>{label}</span>
) )
} }
</Form.Item> </Form.Item>
<Form.Item label="创建时间" {...smallFormItemLayout}> <Form.Item label="创建时间" {...smallFormItemLayout}>
{item.dateCreated && formatDateTime(item.dateCreated)} {item.dateCreated && formatDateTime(item.dateCreated)}
</Form.Item> </Form.Item>
<Form.Item {...footerFormSubmitLayout} style={{marginTop:30}}> <Form.Item {...footerFormSubmitLayout} style={{marginTop: 30}}>
{ {
isEdit ? isEdit ?
<Button type="primary" onClick={this.handleSubmit.bind(this)} <Button type="primary" onClick={this.handleSubmit.bind(this)}
...@@ -158,25 +157,25 @@ export default class EditItem extends Component { ...@@ -158,25 +157,25 @@ export default class EditItem extends Component {
<Icon type="save"/>保存 <Icon type="save"/>保存
</Button> </Button>
: :
<Button type="primary" onClick={e=>{ <Button type="primary" onClick={e=> {
e.preventDefault(); e.preventDefault();
this.props.dispatch({ this.props.dispatch({
type:'UPDATE_RESOURCE' type: 'UPDATE_RESOURCE'
}); });
}}> }}>
<Icon type="edit"/>编辑 <Icon type="edit"/>编辑
</Button> </Button>
} }
<Button onClick={e=>{ <Button onClick={e=> {
e.preventDefault(); e.preventDefault();
isEdit ? isEdit ?
this.props.dispatch({ this.props.dispatch({
type: 'CANCEL_UPDATE_RESOURCE' type: 'CANCEL_UPDATE_RESOURCE'
}) : }) :
this.props.history.goBack(); this.props.history.goBack();
}} }}
style={{marginLeft:'1em'}}> style={{marginLeft: '1em'}}>
<Icon type="rollback"/> <Icon type="rollback"/>
{isEdit ? '取消' : '返回'} {isEdit ? '取消' : '返回'}
</Button> </Button>
......
...@@ -39,19 +39,23 @@ import { ...@@ -39,19 +39,23 @@ import {
item: state.user.item, item: state.user.item,
isEdit: state.user.isEdit, isEdit: state.user.isEdit,
authorities: state.authority.items, authorities: state.authority.items,
isAdmin: /^\/admin\//.test(location.pathname)
})) }))
@Form.create() @Form.create()
export default class EditItem extends Component { export default class EditItem extends Component {
constructor() { constructor() {
super(...arguments); super(...arguments);
this.state = { this.state = {
authoritiesCheckedValues: [] authoritiesCheckedValues: [],
} }
} }
componentDidMount() { componentDidMount() {
console.log(this.props.isAdmin);
this.fetchItem(this.props.params.id); this.fetchItem(this.props.params.id);
this.fetchAuthorityList(); if (this.props.isAdmin) {
this.fetchAuthorityList();
}
}; };
componentWillReceiveProps(nextProps) { componentWillReceiveProps(nextProps) {
...@@ -79,30 +83,38 @@ export default class EditItem extends Component { ...@@ -79,30 +83,38 @@ export default class EditItem extends Component {
handleSubmit(e) { handleSubmit(e) {
e.preventDefault(); e.preventDefault();
const data = this.props.form.getFieldsValue(); const {form, params, dispatch, isAdmin} = this.props;
data.id = this.props.params.id; const data = form.getFieldsValue();
if (isNaN(data.status)) { data.id = params.id;
Object.keys(USER_STATUS).forEach(key=> {
if (USER_STATUS[key] === data.status) { if (isAdmin) {
data.status = key; if (isNaN(data.status)) {
return false; Object.keys(USER_STATUS).forEach(key=> {
} if (USER_STATUS[key] === data.status) {
}) data.status = key;
return false;
}
})
}
data.authorities = this.state.authoritiesCheckedValues.join();
} }
data.authorities = this.state.authoritiesCheckedValues.join();
console.log(data); console.log(data);
this.props.dispatch({ dispatch({
type: 'UPDATE_USER_ITEM', type: 'UPDATE_USER_ITEM',
item: data item: data
}); });
} }
render() { render() {
const {item, loading, form:{getFieldProps}, location:{query}, isEdit, authorities, dispatch, history} = this.props; const {isAdmin, item, loading, form:{getFieldProps}, location:{query}, isEdit, authorities, dispatch, history} = this.props;
const breadcrumb = isAdmin ? ['用户管理', '用户详情'] : ['我的','个人信息'];
const title = isAdmin ? '用户详情' : '个人信息';
const header = ( const header = (
<MainHeader breadcrumb={['用户管理', '用户详情']} <MainHeader breadcrumb={breadcrumb}
title={'用户详情' + (isEdit ? ' - 编辑' : '')} title={title + (isEdit ? ' - 编辑' : '')}
operation={<HeaderOperation history={history} operation={<HeaderOperation history={history}
buttons={item && DetailOperations('USER', item.id, isEdit, dispatch)}/>} buttons={item && DetailOperations('USER', item.id, isEdit, dispatch)}/>}
/> />
...@@ -134,55 +146,63 @@ export default class EditItem extends Component { ...@@ -134,55 +146,63 @@ export default class EditItem extends Component {
<Form.Item label="用户名" {...smallFormItemLayout}> <Form.Item label="用户名" {...smallFormItemLayout}>
{ item.username } { item.username }
</Form.Item> </Form.Item>
<Form.Item label="状态" {...smallFormItemLayout}> {
{ isAdmin ?
isEdit ? <div>
<Select <Form.Item label="状态" {...smallFormItemLayout}>
placeholder="请选择状态" {...getFieldProps('status', {initialValue: userStatusToString(item.status)})} > {
<Select.Option value="0">未激活</Select.Option> isEdit ?
<Select.Option value="1">已激活</Select.Option> <Select
</Select> placeholder="请选择状态" {...getFieldProps('status', {initialValue: userStatusToString(item.status)})} >
: <Select.Option value="0">未激活</Select.Option>
(typeof item.status !== 'undefined' ? userStatusToString(item.status) : NULL) <Select.Option value="1">已激活</Select.Option>
} </Select>
</Form.Item> :
<Form.Item label="角色" {...smallFormItemLayout}> (typeof item.status !== 'undefined' ? userStatusToString(item.status) : NULL)
{ isEdit ? }
<Checkbox.Group options={authorities} </Form.Item>
value={this.state.authoritiesCheckedValues} <Form.Item label="角色" {...smallFormItemLayout}>
onChange={(checkedValues)=> { { isEdit ?
this.setState({ <Checkbox.Group options={authorities}
authoritiesCheckedValues: checkedValues value={this.state.authoritiesCheckedValues}
}) onChange={(checkedValues)=> {
}}/> this.setState({
authoritiesCheckedValues: checkedValues
})
}}/>
:
(userAuthorities.length ? userAuthorities.join(',') : NULL)
}
</Form.Item>
</div>
: :
(userAuthorities.length ? userAuthorities.join(',') : NULL) <div>
} <Form.Item label="昵称" {...smallFormItemLayout}>
</Form.Item> {
<Form.Item label="昵称" {...smallFormItemLayout}> isEdit ?
{ <Input {...getFieldProps('nick', {initialValue: item.nick})} />
isEdit ? :
<Input {...getFieldProps('nick', {initialValue: item.nick})} /> item.nick || NULL
: }
item.nick || NULL </Form.Item>
} <Form.Item label="E-mail" {...smallFormItemLayout}>
</Form.Item> {
<Form.Item label="E-mail" {...smallFormItemLayout}> isEdit ?
{ <Input {...getFieldProps('email', {initialValue: item.email})} />
isEdit ? :
<Input {...getFieldProps('email', {initialValue: item.email})} /> item.email || NULL
: }
item.email || NULL </Form.Item>
} <Form.Item label="手机号" {...smallFormItemLayout}>
</Form.Item> {
<Form.Item label="手机号" {...smallFormItemLayout}> isEdit ?
{ <Input {...getFieldProps('mobile', {initialValue: item.mobile})} />
isEdit ? :
<Input {...getFieldProps('mobile', {initialValue: item.mobile})} /> item.mobile || NULL
: }
item.mobile || NULL </Form.Item>
} </div>
</Form.Item> }
<Form.Item label="注册时间" {...smallFormItemLayout}> <Form.Item label="注册时间" {...smallFormItemLayout}>
{item.dateCreated && formatDateTime(item.dateCreated)} {item.dateCreated && formatDateTime(item.dateCreated)}
</Form.Item> </Form.Item>
...@@ -225,32 +245,3 @@ export default class EditItem extends Component { ...@@ -225,32 +245,3 @@ export default class EditItem extends Component {
); );
} }
} }
// <Button type="ghost" onClick={e=>{e.preventDefault(); this.setState({isEdit: !this.state.isEdit})}}>
// <Icon type="edit"/>
// </Button>
// <Form.Item {...footerFormSubmitLayout} style={{marginTop:30}}>
// {
// isEdit ?
// <Button type="primary" onClick={this.handleSubmit.bind(this, -1)}
// loading={loading}>
// <Icon type="save"/>修改
// </Button>
// :
// item.status ?
// <Button type="primary" onClick={this.handleSubmit.bind(this, 0)}
// loading={loading}>
// <Icon type="save"/>禁用
// </Button>
// :
// <Button type="primary" onClick={this.handleSubmit.bind(this, 1)}
// loading={loading}>
// <Icon type="save"/>激活
// </Button>
// }
// <Button onClick={e=>{e.preventDefault(); this.props.history.goBack();}}
// style={{marginLeft:'1em'}}>
// <Icon type="rollback"/>返回
// </Button>
// </Form.Item>
...@@ -15,7 +15,7 @@ export default class Register extends Component { ...@@ -15,7 +15,7 @@ export default class Register extends Component {
componentWillReceiveProps(nextProps) { componentWillReceiveProps(nextProps) {
if (nextProps.created) { if (nextProps.created) {
// this.props.history.replace('/login'); this.props.history.replace('/login');
} }
} }
......
...@@ -36,7 +36,8 @@ ...@@ -36,7 +36,8 @@
border-color: @primary-color; border-color: @primary-color;
} }
&:focus { &:focus {
box-shadow: 0 0 0 2px rgba(76, 150, 137, 0.2); box-shadow: none;
//box-shadow: 0 0 0 2px rgba(76, 150, 137, 0.2);
} }
} }
.ant-btn-group { .ant-btn-group {
...@@ -141,8 +142,6 @@ ...@@ -141,8 +142,6 @@
} }
} }
} }
.tac { .tac {
......
...@@ -72,6 +72,7 @@ export default (store)=> { ...@@ -72,6 +72,7 @@ export default (store)=> {
</Route> </Route>
<Route path="my"> <Route path="my">
<Route path="modifyPassword" component={Containers.ModifyPassword}/> <Route path="modifyPassword" component={Containers.ModifyPassword}/>
<Route path=":id" component={Containers.UsersItem}/>
</Route> </Route>
</Route> </Route>
<Route path="/login" component={Containers.Login}/> <Route path="/login" component={Containers.Login}/>
......
import {takeLatest} from 'redux-saga'; import {takeLatest} from 'redux-saga';
import {take, call, put, fork, cancel, race} from 'redux-saga/effects'; import {take, call, put, fork, cancel, race} from 'redux-saga/effects';
import {fetch, create, fetchList, fetchItem, updateItem, modifyPassword} from '../services/user'; import {
fetch, create, modifyPassword,
fetchList, fetchItem, updateItem
} from '../services/user';
import {message} from 'antd'; import {message} from 'antd';
import {watchIndex, watchShow, watchCreate, watchEdit, watch} from './RESTful'; import {watchIndex, watchShow, watchEdit, watch} from './RESTful';
function* authorize(username, password, replace) { function* authorize(username, password, replace) {
try { try {
const user = yield call(fetch, username, password); const user = yield call(fetch, username, password);
if (user && user.username && user.token) { if (user && user.username && user.token) {
user.authorities = user.authorities ? user.authorities.split(',').reduce((s,a)=>{s[a]=a; return s},{}) : {};
sessionStorage.setItem('user', JSON.stringify({ sessionStorage.setItem('user', JSON.stringify({
time: Date.now(), time: Date.now(),
data: user data: user
...@@ -46,7 +50,8 @@ export default function*() { ...@@ -46,7 +50,8 @@ export default function*() {
yield fork(watchShow(ID, fetchItem)); yield fork(watchShow(ID, fetchItem));
yield fork(watchEdit(ID, updateItem)); yield fork(watchEdit(ID, updateItem));
yield fork(watch('CREATE_USER', create, '创建用户')); yield fork(watch('CREATE_USER', create, '注册'));
yield fork(watch('MODIFY_USER_PASSWORD', modifyPassword, '修改密码')); yield fork(watch('MODIFY_USER_PASSWORD', modifyPassword, '修改密码'));
} }
...@@ -14,28 +14,37 @@ export async function create(data) { ...@@ -14,28 +14,37 @@ export async function create(data) {
body: serialize(data) body: serialize(data)
}); });
} }
export async function modifyPassword(data) {
return xFetch('/api/users/' + data.username, {
method: 'PATCH',
body: serialize(data)
});
}
export async function fetchList(query) { export async function fetchList(query) {
return xFetch('/api/admin/users' + '?' + serialize({s: 30, ...query})); return xFetch('/api/admin/users' + '?' + serialize({s: 30, ...query}));
} }
export async function fetchItem(id) { export async function fetchItem(id) {
return xFetch('/api/admin/users/' + id); let url = /^\/admin\//.test(location.pathname) ? '/api/admin/users/' + id : '/api/users/' + id;
return xFetch(url);
} }
export async function updateItem(data) { export async function updateItem(data) {
return xFetch('/api/admin/users/' + data.id, { let url;
if(/^\/admin\//.test(location.pathname)){
url = '/api/admin/users/' + data.id;
}else{
url = '/api/users/' + data.id;
}
return xFetch(url, {
method: 'PUT', method: 'PUT',
body: serialize(data) body: serialize(data)
}) })
} }
export async function modifyPassword(data) {
return xFetch('/api/users/' + data.username, {
method: 'PATCH',
body: serialize(data)
});
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment