互联网时代,形形色色的H5
应用、小程序……各种C端B端业务都少不了中后台管理系统,市面上有antd
、iview
等各种UI
框架组件库,但是一个管理台往往涉及到公司统一的登录、权限管理、统一的请求处理、数据管理、自动化测试、甚至还有国际化等场景,如果从零搭建,这些都是我们需要考虑的,但是这些其实是和业务解耦的,所以本着以后再次创建管理台时不想复制粘贴,于是选用了新鲜出炉的Fes.js 2.0
来构建。
关于Fes.js
Fes.js
是基于最新 Vue3 + webpack5
的前端应用框架,通过插件化提供了统一的布局、登录、权限管理、Vuex
、国际化等能力,关于fes.js
更多了解可以参考官方文档。话不多说,下面就来带你从零搭建一个开箱即用的中后台管理系统。
准备
首先确保本地Node版本是12.0.0
以上(也别12了,都1202年了,秦朝都灭亡了,升级最新吧)~
如果你喜欢用yarn
,那就用以下三部曲:
1.创建模板
yarn create @fesjs/fes-app fes-demo
根据自己的需求选择创建PC或H5项目,创建完项目后cd
到刚刚创建的目录:cd fes-demo
,然后继续下一步。
2.安装依赖
yarn
3.运行开发环境
yarn dev
如果你喜欢用npm
(你怕毛),那就用以下三部曲:
# 创建模板
npx @fesjs/create-fes-app fes-demo
# 安装依赖
npm install
# 运行
npm run dev
初见
执行完以上操作之后,在浏览器访问:http://127.0.0.1:8080, 我们就可以看到初始的系统界面了,如下图:
开干
新建页面
接下来我们试着新建几个页面,在pages
目录下新建以下目录和文件:
├─pages
│ ├─order
| └─ list.vue
| └─ detail.vue
│ └─product
| └─ list.vue
fes
会根据我们的目录结构自动生成Vue
的routes
,如果想知道生成的路由具体结构可以在src\.fes\core\routes\routes.js
文件中查看。
页面配置
页面新建之后,我们来配置一下页面的name
及title
等相关信息,这里我们以pages/product/list.vue
文件为例,代码如下:
// src/pages/product/list.vue
<template>
<div>...</div>
</template>
<config>
{
"name": "productManage",
"title": "产品管理"
}
</config>
<script>
import { ref, reactive, toRaw } from 'vue';
...
</script>
配置菜单和权限
页面配置好了之后,在根目录的.fes.js
文件中配置一下菜单和权限,.fes.js
文件为项目基础配置文件,详情可参考官网文档,这里我们修改内容如下:
export default {
... // 其他配置略
access: {
roles: {
superAdmin: ["/", "/product/list", "/order/list", "/order/detail"],
admin: ["/", "/product/list"]
}
},
layout: {
...
menus: [
{
name: 'index'
},
{
name: 'productManage' // 产品管理
},
{
name: 'orderManage', // 订单管理
title: '订单管理',
children: [
{
name: 'orderList' // 订单列表
}
]
}
]
}
...
};
可以看到,这里我们设置了两个角色,超级管理员(superAdmin
)和普通管理员(admin
),超级管理员比普通管理员可以访问更多的页面,在页面渲染前通过setRole
这个方法设定角色为superAdmin
(超级管理员),这里参考app.js
的代码如下:
import { access } from '@fesjs/fes';
export const beforeRender = {
loading: <PageLoading />,
action() {
const { setRole } = access;
return new Promise((resolve) => {
setTimeout(() => {
setRole('superAdmin'); // 设定角色
resolve({
userName: 'Hello, World!'
});
}, 1000);
});
}
};
同时,menus
中的name
要与页面配置的name
相匹配,比如menus
中【产品管理】那一项配置的name: 'productManage'
需要和具体页面文件src/pages/product/list.vue
文件中<config></config>
的name
相匹配。
根据配置好的menus
,以及设置对应的权限后我们就可以看到以下界面:
到这里我们完成了常见的新建页面、菜单、权限等场景的开发,是不是觉得很简单?
接下来我们简单看看其他一些常见的开发配置场景~
常见配置问题FAQ
1.UI组件库按需加载怎么配?
这里以ant-design-vue
为例,在 .fes.js
中增加如下配置:
export default {
...
extraBabelPlugins: [
['import', { libraryName: 'ant-design-vue', libraryDirectory: 'es', style: 'css' }]
],
...
};
将babel
的配置Copy过来就行,简单So easy~
2.HTTP请求怎么玩?
import { request } from '@fesjs/fes';
export default {
add: (data, option) => request('/api/product/add', data, option),
getList: (data, option) => request('/api/product/list', data, option)
};
更多玩法可参考request插件文档。
3.统一的请求处理在哪配置?
比如想要对接口相应的数据做统一处理,可以添加responseDataAdaptor
这个钩子函数,参数data
就是接口返回的报文部分,又比如对接口的code
进行统一处理,可以添加errorHandler
。
示例:
假如后端返回的JSON
数据如下:
{
"code": "8888",
"msg": "未登录或登录态过期,请重新登录"
}
那么在app.js
中做如下配置:
import { getRouter } from '@fesjs/fes';
export const request = {
responseDataAdaptor: (data) => {
// data.code = data.retCode;
return data;
},
errorHandler: {
8888: (err) => {
const router = getRouter();
alert('登录态过期,请重新登录');
router.push('/account/login');
}
}
};
以上配置中8888
对应的是接口code
字段返回的值,如果接口返回的code
字段叫别的名称,比如叫retCode
,可以在responseDataAdaptor
进行转换,如:data.code = data.retCode;
。
4.支持移动端应用的开发吗?
Fes.js
同时支持 PC 和移动端的开发,同时为 PC 和移动端提供了一些标配的能力。例如 PC 端的布局、权限管理、国际化等;移动端的屏幕适配、1px 问题、hover 态等,相信在初始化应用的时候你已经看到了,PC or H5 任你选~
5.文件引入别名配置
在.fes.js
中添加如下配置:
alias: {
'@common': 'src/common/',
'@utils': 'src/utils/',
'@images': 'src/images/',
'@services': 'src/services/'
}
文件中导入方式:
import xxx from '@/common/xxx.js';
6.换个Logo?
在.fes.js
文件中添加Logo字段,换成你的图片路径(可以是一个完整的图片链接)就行了,需要注意的是如果这个Logo是本地的,需要将Logo文件拷贝到public
目录下(如果没有,自行在项目根目录建立一个public
目录),public
目录可以放置一些其他不需要经过webpack
打包的文件。
这里在public
目录中新建了一个img
目录,并将Logo图片放入,那么Logo路径配置如下:
export default {
...
layout: {
title: 'xx管理系统',
logo: './img/logo.png',
...
},
...
};
最后,如果还想了解更多的开发场景配置,可以自己参考官方文档一点点体验。
结语
经过在一个新的内部管理系统实践fes.js
,整体下来感觉还是能够提升很大的开发效率,很多常见的开发场景都可以通过插件化添加,省去自己一点点编码的时间。不过fes 2.0
刚刚新鲜出炉,还有很多的开发场景待支持,希望后续能够出更多的插件,提供更多的能力。
参考链接
- Fes.js官网文档:winixt.gitee.io/fesjs/zh/
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!