react+antdUI后台管理项目--二级菜单+登录界面
UI库gitee地址: 速度快
https://ant-design.gitee.io/components/button-cn/
侧边栏二级菜单
侧边栏组件渲染
src/views/index/SliderMemu.jsx
src/views/index/index.jsx
重新设计侧边栏数据
import {
HomeOutlined,
PictureOutlined,
UnorderedListOutlined
} from '@ant-design/icons';
const menus = [
{
title: '首页',
path: '/home',
icon: HomeOutlined
},
{
title: '轮播图管理',
path: '/banner',
icon: PictureOutlined,
children: [
{
title: '轮播图列表',
path: '/banner/list',
icon: HomeOutlined
},
]
},
{
title: '分类管理',
path: '/category',
icon: UnorderedListOutlined,
children: [
{
title: '分类列表',
path: '/category/list',
icon: HomeOutlined
},
]
},
{
title: '产品管理',
path: '/product',
icon: UnorderedListOutlined,
children: [
{
title: '产品列表',
path: '/product/list',
icon: HomeOutlined
},
]
},
{
title: '用户管理',
path: '/users',
icon: UnorderedListOutlined,
children: [
{
title: '用户列表',
path: '/users/list',
icon: HomeOutlined
},
{
title: '用户权限',
path: '/users/permission',
icon: HomeOutlined
},
]
},
{
title: '购物车管理',
path: '/cart',
icon: UnorderedListOutlined,
children: [
{
title: '购物车列表',
path: '/cart/list',
icon: HomeOutlined
},
]
},
{
title: '订单管理',
path: '/order',
icon: UnorderedListOutlined,
children: [
{
title: '订单列表',
path: '/order/list',
icon: HomeOutlined
},
]
},
{
title: '地址管理',
path: '/address',
icon: UnorderedListOutlined,
children: [
{
title: '地址列表',
path: '/address/list',
icon: HomeOutlined
},
]
}
]
export default menus;
添加用户权限管理的页面
修改路由
测试效果
- 疑问: 当你刷新页面之后,选中的效果消失了
参照Menu组件API,发现了以下的属性
如果要根据用户的权限渲染列表
import {
HomeOutlined,
PictureOutlined,
UnorderedListOutlined
} from '@ant-design/icons';
const menus = [
{
title: '首页',
path: '/home',
icon: HomeOutlined,
permission: 1 // 所有用户可见
},
{
title: '轮播图管理',
path: '/banner',
icon: PictureOutlined,
permission: 2, // 管理员可见
children: [
{
title: '轮播图列表',
path: '/banner/list',
icon: HomeOutlined,
permission: 2, // 管理员可见
},
]
},
{
title: '分类管理',
path: '/category',
icon: UnorderedListOutlined,
permission: 2, // 管理员可见
children: [
{
title: '分类列表',
path: '/category/list',
icon: HomeOutlined,
permission: 2, // 管理员可见
},
]
},
{
title: '产品管理',
path: '/product',
icon: UnorderedListOutlined,
permission: 2, // 管理员可见
children: [
{
title: '产品列表',
path: '/product/list',
icon: HomeOutlined,
permission: 2, // 管理员可见
},
]
},
{
title: '用户管理',
path: '/users',
icon: UnorderedListOutlined,
permission: 2, // 管理员可见
children: [
{
title: '用户列表',
path: '/users/list',
icon: HomeOutlined,
permission: 2, // 管理员可见
},
{
title: '用户权限',
path: '/users/permission',
icon: HomeOutlined,
permission: 3, // 超级管理员可见
},
]
},
{
title: '购物车管理',
path: '/cart',
icon: UnorderedListOutlined,
permission: 2, // 管理员可见
children: [
{
title: '购物车列表',
path: '/cart/list',
icon: HomeOutlined,
permission: 2, // 管理员可见
},
]
},
{
title: '订单管理',
path: '/order',
icon: UnorderedListOutlined,
permission: 2, // 管理员可见
children: [
{
title: '订单列表',
path: '/order/list',
icon: HomeOutlined,
permission: 2, // 管理员可见
},
]
},
{
title: '地址管理',
path: '/address',
icon: UnorderedListOutlined,
permission: 2, // 管理员可见
children: [
{
title: '地址列表',
path: '/address/list',
icon: HomeOutlined,
permission: 2, // 管理员可见
},
]
}
]
export default menus;
- 本地存储一个字段 roleType, 值为1
渲染列表时判断 权限
修改本地的roleType,刷新查看效果
为了代码的严谨性,需要在index.jsx中设置权限
未登录显示登陆页面
假设本地有一个字段 isLogin 为 true
src/App.js
封装头部组件
疑问? 这段代码是什么意思
var a = <div>11111</div> jsx
babel-loader 解析
import React from 'react'
var a = React.cleateElement('div', null, '11111')
- 修改小图标的位置
审查元素得知 content组件信息如下
-
引入下拉菜单 - 点击 组件
-
改造右上角
-
实现退出功能
登陆页面
设计登陆的页面一
设计登陆页面二
https://developer.aliyun.com/mirror/npm/package/react-particles-js
https://blog.csdn.net/csdn_yudong/article/details/53128570
https://github.com/VincentGarreau/particles.js
cnpm i react-particles-js -S
- 设计登陆的表单
- 流程
后端管理员账户的设置
在 node接口的中设计管理员账户集合
day01/admin-app/sql/col/admins.js
routes/users.js 设计登陆接口
router.post('/login', function(req, res, next) {
const { username, password } = req.body
sql.find(Admin, { username, password }).then(data => {
if (data.length === 0) {
res.send({
code: '10010',
message: '用户名和密码不匹配'
})
} else {
// 用户名和密码正确
// 判断当前用户的登陆状态,如果是已登录 给前端传递标识,如果是未登录状态,也传递信息
if (data[0].loginState === 1) { // 已登录
// 前端可以提醒用户 该账户已经登陆,是不是继续登陆(单点登陆)
res.send({
code: '10101',
message: '已有账户登陆了',
data: {
username,
roleName: data[0].roleName,
roleType: data[0].roleType
}
})
} else {
// 未登录 ---- 更新状态为已登录
sql.update(Admin, { username, password }, { $set: { loginState: 1}}).then(() => {
// 更新完毕,前端发送内容
res.send({
code: '11111',
message: '登陆成功',
data: {
username,
roleName: data[0].roleName,
roleType: data[0].roleType
}
})
})
}
}
})
});
生成接口文档
修改端口号
运行命令生成接口文档 ---- 不生成在 apidoc,生成到 admindoc
apidoc -i routes/ -o public/admindoc
前端调用接口
cnpm i axios -S
- 设置信息不匹配提示信息
已登录的提示
--------------------------------------------------------------------文章来自吴大勋(大勋哥)链接

浙公网安备 33010602011771号