返回列表

xiaokeer-a-vue

基于若依框架的企业级后台管理系统前端,实现动态路由、按钮权限与配置化 CRUD 页面组件。

Vue 3Element PlusVitePiniaTypeScript

项目简介

xiaokeer-a-vue 是一个基于若依框架的企业级后台管理系统前端项目,采用 Vue 3 + Vite + Element Plus 技术栈。项目在若依框架基础上进行了深度定制,核心创新是实现了 XiaokeerElPageContainer 通用 CRUD 页面容器组件,通过配置化方式动态生成表单、表格和查询条件,大幅提升开发效率。

主要特性

  • 🔐 完善权限体系:路由权限 + 菜单权限 + 按钮权限 + 角色权限
  • 🛣️ 动态路由:后端返回菜单配置,前端动态注册路由
  • 📝 配置化 CRUD:一行代码生成完整 CRUD 页面
  • 🎨 多种数据视图:表格、分组列表、Excel、卡片四种展示模式
  • ⭐ 星星选择机制:单击单选、双击全选的交互设计
  • 📊 多种导入方式:表单新增、Excel 导入、图片识别新增

技术栈

类别技术
核心框架Vue 3.4
路由管理Vue Router 4.2
状态管理Pinia 2.1
构建工具Vite 5.0
UI 组件库Element Plus 2.4
HTTP 请求Axios
数据可视化ECharts
工具库@vueuse/core, Hutool

技术亮点

亮点一:动态路由 + 动态表单双重动态化

实现了两层动态化架构:

第一层: 动态路由
后端菜单 → 路由配置解析 → 动态注册路由

第二层: 动态表单
后端配置 → 字段结构解析 → 动态渲染页面

优势:新增业务表只需后端配置,前端零代码

亮点二:XiaokeerElPageContainer 配置化组件

高度抽象的通用 CRUD 页面容器组件:

<!-- 传统方式: 需要编写完整页面代码 -->
<template>
  <el-form>...</el-form>
  <el-table>...</el-table>
</template>

<!-- 本项目方式: 一行代码搞定 -->
<XiaokeerElPageContainer topic="sys_user" />

六大功能模块

模块功能说明
custom插槽扩展,支持父组件自定义内容
link展示关联的其他资源链接
insert表单新增、Excel导入、图片识别新增
events批量操作事件(服务端/前端事件)
query动态查询条件、分页、导出
data数据展示(表格/分组列表/Excel/卡片)

亮点三:按钮级权限控制

通过自定义指令实现按钮级权限:

// v-hasPermi 操作权限处理
export default {
  mounted(el, binding, vnode) {
    const { value } = binding;
    const permissions = useUserStore().permissions;

    const hasPermissions = permissions.some((permission) => {
      return (
        all_permission === permission || permissionFlag.includes(permission)
      );
    });

    if (!hasPermissions) {
      el.parentNode && el.parentNode.removeChild(el); // 无权限则移除元素
    }
  },
};

亮点四:星星选择机制

独特的交互设计,支持单选和批量选择:

<xiaokeer-n-click
  :click-event-array="[
    {
      clickCount: 2,
      event: () => {
        /* 双击全选 */
      },
    },
    {
      clickCount: 1,
      event: () => {
        /* 单击单选 */
      },
    },
  ]"
  :timeout="200"
>
  <StarFilled v-if="selectGet(row)===true" class="clazz" />
  <StarFilled v-else style="width: 30px;" />
</xiaokeer-n-click>

亮点五:动态表单渲染

根据后端返回的字段结构动态渲染不同类型的表单控件:

字段类型渲染方式样式特点
input文本显示绿色加粗
number数字显示黄色加粗,支持排序标记
time日期显示黄色斜体
jsonJSON 显示橙色加粗
select标签显示Element Tag 组件
files图片显示图片预览组件

亮点六:前后端事件统一管理

支持服务端事件和前端事件:

interfaceMap.value = [
  { type: 'serverIdsEvent', path: '/api/delete', name: '删除' },
  { type: 'frontIdsEvent', name: '自定义操作', value: (ids) => {...} }
]

相关链接