一、基础页面
1.请求数据
数据 http://localhost:5000/manage/user/list
1 | { |
请求所有列表Api
1 | // 请求所有用户列表 |
2.静态页面 user.jsx
1 | import React,{Component} from 'react' |
效果:
3. 显示所属角色名,初级
{title:'所属角色',dataIndex:'role_id',
render:(role_id) => this.state.roles.find(role => role._id===role_id).name //name取自roles.name
}
1 | initColumns=()=>{ |
3. 2显示所属角色名,高级
思路:
- 写一个函数,把状态里的roles[]数据转换成以role._id为键名,role.name为键值的字典
- 调用1步函数生成字典
- 引用字典
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44//【1】把状态里的roles[]数据转换成以role._id为键名,role.name为键值的字典
initRoleNames=(roles)=>{
const roleNames=roles.reduce((pre,role)=>{
pre[role._id]=role.name
return pre
},{})
//保存到this
this.roleNames=roleNames
}
initColumns=()=>{
this.columns=[
{title:'用户名',dataIndex:'username'},
{title:'邮箱',dataIndex:'email'},
{title:'电话',dataIndex:'phone'},
{title:'注册时间',dataIndex:'create_time',render:formateDate}, //完整写法:render:()=>{formateDate('create_time')}
{title:'所属角色',dataIndex:'role_id',
render:(role_id)=>this.roleNames[role_id] //【3】根据Id展示字典里对应角色名
},
{
title:'操作',
render:()=>(
<span>
<LinkButton onClick={() => this.showUpdate()}>修改</LinkButton>
<LinkButton onClick={() => this.deleteUser()}>删除</LinkButton>
</span>)
}
]
}
//获取用户列表
getUsers=async()=>{
const result=await reqUsers()
if (result.status===0){
const {users,roles}=result.data
this.initRoleNames(roles)//【2】把获取的角色数据传过去,生成roleNames的字典
this.setState({
users,
roles
})
}
}效果:所属角色展示对应名字
二、删除用户功能
0. api请求
1
2// 删除指定用户
export const reqUserDel=(userId)=>ajax(BASE+'/manage/user/delete',{userId},'POST')1.antd支持: 用 Modal.confirm() 快捷弹出确认框
https://3x.ant.design/components/modal-cn/1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import { Modal, Button } from 'antd';
const { confirm } = Modal;
function showConfirm() {
confirm({
title: 'Do you Want to delete these items?',
content: 'Some descriptions',
onOk() {
console.log('OK');
},
onCancel() {
console.log('Cancel');
},
});
}2.实现:快捷弹窗删除用户
1 | import {reqUsers,reqUserDel} from '../../../api' //【1】reqUserDel |
效果:在用户后点删除效果:
三、添加用户功能
1.user.jsx静态及向子组件传函数
1 | import AddForm from './add-form' //【5】引入添加表单内容 |
2.add-form.jsx静态及基础验证、向父组件传值
1 | import React,{PureComponent} from 'react' |
效果:点创建用户弹出如下
3.功能实现:api添加接口
1 | //添加用户 |
4.功能实现user.jsx
1 | import {reqUsers,reqUserDel,reqUserAdd} from '../../../api' //【0】reqUserAdd |
5. add-form.jsx接收父组件传过来的角色,表单验证完善,邮箱,手机号等正则较验证,
1 | import React,{PureComponent} from 'react' |
效果:验证都通过后才能提交添加用户请求
四、用户更新(修改)
1.api请求函数
1 | http://localhost:5000/manage/user/update |
因为和添加用户用的请求参数都是一样的,所以合用一个请求
1 | //添加/修改用户(如果存在._id说明是更新就用update拼接路径,否则就是添加用户) |
2. user.jsx
1 | //表格的列数据指定 |
3.add-form.jsx
1 | static propTypes={ |
效果:修改完成
五、菜单权限管理
left/index.jsx
1 | import React,{Component} from 'react' |
效果:退出重新登录别的账户会根据权限显示其对应菜单
2.设置如果是自己的角色权限成功后,要求重新登录,以加载对应左导航role/index.jsx
1 | import memoryUtils from '../../../utils/memoryUtils' //引入记忆模块用于显示用户名 |
效果:如果设置的是自己的角色权限,成功后,将强制退出,并提示’当前用户角色权限成功,请重新登录’
六、优化
1.如果是修改用户,则不显示密码框 user/add-form.jsx
1 | {//如果是修改用户,则不显示密码框(接口未提供密码修改) |