Go+Vben Admin框架初体验

最近刚使用TypeScript,就尝试用Vben框架( Vue3.0、Vite、 Ant-Design-Vue、TypeScript )练练手,配合后端完成了一些基础功能,想学习go的小伙伴可以看看零基础搭建Gin框架。后台包括权限控制、角色管理、账号管理、菜单管理等,项目环境准备、工具配置可以参考官方文档,以下是个人示例链接,完整版Demo和源码可以直接到官方文档查看。

示例网站: https://admin.gva.jassue.cn/
源码地址: https://github.com/Mattlinxy/gin-admin-frontend

权限控制

权限控制区分为前端控制路由(角色权限、路由映射)、后端控制路由。

在 src/settings/projectSetting 下,找到permissionMode属性更改权限控制模式,切换权限模式时都需要清除一下浏览器缓存。

 permissionMode: PermissionModeEnum.BACK,

这里主要是以后端控制权限为主,在官方示例的基础上进行调整,对后端响应的数据通过递归方式进行二次加工,转化为路由对应的数据格式,代码保留了官方对于不同方式权限控制的写法,可以根据具体需求对代码进行调整,具体配置项可以查看文档 权限相关 内容。

详细代码见: src/store/modules/routes

getAsyncRoutes(asyncRoutes: AsyncRoutes[]): AppRouteRecordRaw[] {
  const routeMap: AppRouteRecordRaw[] = [];
  asyncRoutes.forEach((item) => {
    const temp: AppRouteRecordRaw = {
      path: item.route,
      // 同重定向路径,由后端直接返回
      name: this.setRouteName(item.route),
      component: item.compo,
      meta: {
        title: item.name,
        icon: item.icon,
      },
      // 可在创建时输入重定向路径后,由后端直接返回,就无需进行任何转化
      redirect: this.setRedirectPath(item),
      children: [],
    };
    if (item.children?.length > 0) {
      temp.children = this.getAsyncRoutes(item.children);
    }
    routeMap.push(temp);
  });
  return routeMap;
},

按钮权限只要按照规定格式稍加处理,返回权限标识数组集合。

this.permCode = btn_list.map((item) => item.auth_key); // ['ADMIN_VIEW','ROLE_UPDATE',...]

文档提供了指令方式和函数方式进行权限控制,这里是通过指令v-auth去控制页面上的权限,切换权限模式后,按钮级权限都需要自己根据需求去重新定义,保障页面按钮的正常显示,参考文档:颗粒度权限

<a-button v-auth="'MENU_CREATE'" type="primary" @click="handleCreate"> 新增菜单 </a-button>

接口请求

在 src/utils/http/axios 下,根据接口返回参数进行修改,这里有对成功接口进行统一判断,判断errorMessageMode参数不为none时,统一提示操作成功。如果具体见:接口请求

 //  这里 code,result,message为 后台统一的字段,需要在 types.ts内修改为项目自己的接口返回格式
 const { error_code, data: result, message } = data;

 // 这里逻辑可以根据项目进行修改
 const hasSuccess = data && Reflect.has(data, 'error_code') && error_code === ResultEnum.SUCCESS;
 if (hasSuccess) {
   if (options.errorMessageMode !== 'none') {
     createMessage.success('操作成功');
   }
   return result;
 }

对于不希望成功就显示提示信息的接口,就可以在定义接口时,加上errorMessageMode配置项,来避免统一提示,也可以自定义提示。

export const getMenuList = (params?: MenuParams) =>
  defHttp.post<MenuListGetResultModel>({ url: Api.MenuList, params }, { errorMessageMode: 'none' });

接口统一存放在 src/api/ 目录下面管理,具体定义示例可以查看 src/api/system 目录下文件。

数据渲染

在 xxx.data.ts 文件下事先定义好页面需要使用到的字段,以账号管理模块为例:

src/views/system/account/account.data.ts

// 表格数据定义
export const columns: BasicColumn[] = [...]
// 搜索字段定义
export const searchFormSchema: FormSchema[] = [...]
// 新增、编辑模态框字段定义
export const accountFormSchema: FormSchema[] = [...]

对于不能直接使用的值,可以通过customRender配置项进行自定义

{
  title: '角色',
  dataIndex: 'role_id',
  width: 200,
  customRender: ({ record }) => {
    return h('span', record.role.name);
 },

新增、修改模态框需要区别显示字段和文本时,可以在 src/views/system/account/index,通过updateSchema方法进行配置

updateSchema([
  {
    field: 'username',
    show: !unref(isUpdate),
  },
  {
    field: 'password',
    required: !unref(isUpdate),
  },
]);

这套框架整体封装度还是很高的,拓展性也很强,值得我们去学习。我主要还是想通过这套框架去熟悉一下 TypeScript 以及框架本身,所以没有在 vue-vben-admin-thin 精简版本上进行开发。代码上也删除了一部分相关示例、无用文件及功能,刚使用强类型语言,还存在不足的地方,后续会继续学习并对代码进行优化。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
H-ui.admin是用H-ui前端框架开发的轻量级网站后台模版 采用源生html语言,完全免费,简单灵活,兼容性好 让您快速搭建中小型网站后台 程序员的的福音 \根目录 │ _blank.html 空白页(每次我们都拿空白页去创建,这样比较干净!) │ _footer.html 页脚公共代码片段 │ _header.html 头部公共代码片段 │ _meta.html meta公共代码片段 │ robots.txt 搜索引擎爬虫配置文件 │ login.html 管理员登陆 │ index.html 首页(主框架) │ welcome.html 我的桌面(默认永远打开的页面) │ member-开头的 用户相关 │ artice-开头的 资讯相关 │ picture-开头的 图片相关 │ product-开头的 产品相关 │ page-开头的 页面相关 │ system-开头的 系统相关 │ admin-开头的 管理员相关 │ charts-开头的 统计相关 …… ├─css │ H-ui.reset.css H-ui.reset css │ H-ui.css h-ui CSS │ H-ui.min.css h-ui CSS 压缩版 │ H-ui.login.css H-ui.admin后台登录样式 │ H-ui.admin.css H-ui.admin样式 │ style.css 写你自己的样式 │ ├─images UI相关的图片素材 │ ├─js │ H-ui.js H-ui核心脚本 │ H-ui.admin.js 本站相关的js ├─lib │ jquery jQuery类库(v1.9.1) │ bootstrapSwitch 开关控件 │ Hui-iconfont_v1.0 阿里图标字体库(H-ui定制) │ font-awesome 字体库文件 │ icheck 单选框、复选框控件 │ laypage laypage 翻页插件 │ layer layer弹出层插件 │ laytpl JavaScript模板引擎 │ My97DatePicker 日期插件 │ Validform 表单验证插件 │ zepto zepto库 │ ueditor 百度编辑器 │ Highcharts 图表插件 │ dataTables 表格排序,检索插件 │ WebUploader 百度文件上传组件 │ lightbox2 图片预览组件 │ │ html5.js html5插件,让低版本IE支持html5元素 │ DD_belatedPNG_0.0.8a-min.js 解决IE6png透明 │ swfobject.js Flash插件 │ expressInstall.swf 检查flash插件 │ unslider.min.js Unslider图片滚动效果插件 │ stickUp.min.js 让页面元素"固定"位置 │ respond.min.js 让IE兼容media │ Echo.js 图片延迟加载插件 │ colpick.js 颜色插件 │ handlebars.js js模版引擎 │ waterfall.min.js 瀑布流插件 └─temp 测试数据、图片
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值