本文介绍: Vue-Vben-Admin一个基于 Vue3.0、Vite、 Ant-Design-Vue、TypeScript后台整体封装度很高,拓展性也很强,没有在精简版上进行开发,主要还是通过这套框架去熟悉一下 TypeScript 以及学习框架本身一些好的写法思想。…

最近使用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',...]

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

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

接口请求

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

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

 // 这里逻辑可以根据项目进行修改
 const hasSuccess = data &amp;&amp; Reflect.has(data, 'error_code') &amp;&amp; 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 以及框架本身,所以没有在 vuevbenadmin-thin 精简版本上进行开发。代码上也删除了一部分相关示例、无用文件功能,刚使用类型语言,还存在不足的地方,后续会继续学习并对代码进行优化

原文地址:https://blog.csdn.net/m0_51767575/article/details/126478927

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_47432.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注