最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 一键生成基于Vue3+Webpack5开箱即用的管理台

    正文概述 掘金(txBoy)   2021-03-22   510

    互联网时代,形形色色的H5应用、小程序……各种C端B端业务都少不了中后台管理系统,市面上有antdiview等各种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
    

    根据自己的需求选择创建PCH5项目,创建完项目后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, 我们就可以看到初始的系统界面了,如下图:

    一键生成基于Vue3+Webpack5开箱即用的管理台

    开干

    新建页面

    接下来我们试着新建几个页面,在pages目录下新建以下目录和文件:

    ├─pages
    │  ├─order
    |  	  └─ list.vue
    |     └─ detail.vue
    │  └─product
    |     └─ list.vue
    

    fes会根据我们的目录结构自动生成Vueroutes,如果想知道生成的路由具体结构可以在src\.fes\core\routes\routes.js 文件中查看。

    页面配置

    页面新建之后,我们来配置一下页面的nametitle等相关信息,这里我们以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,以及设置对应的权限后我们就可以看到以下界面:

    一键生成基于Vue3+Webpack5开箱即用的管理台

    到这里我们完成了常见的新建页面、菜单、权限等场景的开发,是不是觉得很简单?

    接下来我们简单看看其他一些常见的开发配置场景~

    常见配置问题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/

    起源地下载网 » 一键生成基于Vue3+Webpack5开箱即用的管理台

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元