企业级Vue3管理后台+可视化

3 阅读20分钟

推广文章:path-less-sys 企业级Vue3管理后台模板

🌟 项目简介

path-less-sys 是一款基于 Vue 3 开发的企业级管理后台模板,集成了后台管理系统、可视化页面设计器和流程设计器,为企业应用开发提供一站式解决方案。它采用现代化技术栈,提供了丰富的功能模块,帮助开发者快速构建高质量的企业管理系统。

🚀 核心功能

1. 后台管理系统

  • 用户管理:完整的用户生命周期管理,支持用户创建、编辑、删除和状态控制
  • 权限管理:基于角色的访问控制(RBAC),支持动态路由和按钮级权限控制
  • 部门管理:灵活的组织架构管理,支持多级部门结构
  • 菜单管理:可视化菜单配置,支持动态路由生成
  • 日志管理:详细的操作日志记录和查询
  • 数据字典:统一的数据字典管理,支持多语言

🎨 可视化设计器生态

1. 工作流设计器(已基本实现)

工作流设计器基于 Vue3 和 draw2d_native 开发,提供了完整的流程设计和编排能力,适用于工作流引擎、业务流程管理等场景。它采用了现代化的架构设计,结合了主流大厂流程编排方案的优点,为企业级应用提供了高效、灵活的流程设计解决方案。

大厂流程编排方案对比
特性维度工作流设计器阿里巴巴CompileFlow字节跳动FlowGramActiviti/Flowable
技术栈Vue3 + draw2dJava未知Java
设计模式可视化拖拽设计代码/DSL定义可视化设计可视化设计
执行方式前端渲染编译执行解释执行解释执行
BPMN支持部分支持不支持不支持完全支持
性能表现前端渲染性能极高中高中等
扩展性高(组件化设计)
易用性中(需编程)中(配置复杂)
AI能力集成规划中
适用场景前端流程设计后端高并发流程AI Bot开发企业级BPM系统
核心功能
  • BPMN 2.0 标准支持:符合国际流程设计规范,支持多种 BPMN 节点类型
  • 拖拽式流程编排:直观的流程节点拖拽和连接,支持复杂流程设计
  • 丰富的节点类型
    • 事件节点(开始事件、结束事件、中间事件)
    • 任务节点(人工任务、服务任务、脚本任务)
    • 网关节点(条件分支、并行网关、包容网关)
    • 数据对象节点(流程中的数据存储)
  • 可视化属性配置:详细的节点和流程属性配置面板
  • 实时流程验证:设计过程中自动验证流程的合法性
  • 流程导入导出:支持 JSON 格式的流程数据导入导出
  • 画布操作:支持画布缩放、平移、节点对齐等操作
  • 多语言支持:内置中英文支持,支持自定义语言扩展
  • 流程版本管理:支持流程设计版本控制
技术架构
┌─────────────────────────────────────────────────────────┐
│                     工作流设计器                         │
├─────────────────┬─────────────────┬─────────────────────┤
│   Vue3 组件     │  draw2d_native  │   流程配置系统       │
│   (视图层)     │  (渲染引擎)    │   (业务层)         │
├─────────────────┼─────────────────┼─────────────────────┤
│ - 响应式状态    │ - 图形渲染       │ - 节点管理          │
│ - 组件通信      │ - 事件处理       │ - 属性配置          │
│ - 生命周期管理  │ - 画布操作       │ - 流程导入导出      │
└─────────────────┴─────────────────┴─────────────────────┘
          │                │                 │
          └────────────────┼─────────────────┘
                           ▼
                ┌───────────────────┐
                │   核心设计器       │
                │  WorkflowDesigner  │
                └───────────────────┘
                           │
                           ▼
                ┌───────────────────┐
                │   生命周期管理     │
                │   LIFE_CYCLE_EVENTS│
                └───────────────────┘
技术实现

工作流设计器采用模块化架构,基于 Vue3 和 draw2d_native 开发,主要包括以下核心模块:

  • 节点面板:提供丰富的 BPMN 节点类型,支持拖拽添加到画布
  • 画布区域:draw2d 画布,支持节点拖拽、连线创建、画布缩放平移等操作
  • 属性面板:动态生成节点和连线的属性配置表单
  • 工具栏:提供画布操作、流程导入导出等功能按钮
  • 事件系统:处理节点选择、连线创建、属性变更等事件

设计器采用响应式设计,支持实时更新和双向数据绑定,提供了完整的流程设计和编排能力。

扩展能力

工作流设计器提供了强大的扩展能力,支持多种扩展方式,方便开发者根据业务需求进行定制和扩展:

1. 自定义节点开发

工作流设计器支持灵活的自定义节点扩展,您可以根据业务需求创建各种类型的节点:

<template>
  <div class="custom-html-node">
    <h3>{{ title }}</h3>
    <div class="content">{{ content }}</div>
  </div>
</template>

<script setup>
const props = defineProps({
  userData: {
    type: Object,
    default: () => ({})
  },
  figure: {
    type: Object,
    default: null
  }
});

const title = computed(() => props.userData?.title || '自定义节点');
const content = computed(() => props.userData?.content || '这是一个HTML自定义节点');
</script>

<style scoped>
.custom-html-node {
  padding: 10px;
  border: 2px solid #409EFF;
  border-radius: 8px;
  background-color: #fff;
  min-width: 150px;
  min-height: 80px;
}

.custom-html-node h3 {
  margin: 0 0 5px 0;
  color: #409EFF;
  font-size: 14px;
}
</style>
注册自定义节点
const customNodes = computed(() => [
  {
    type: 'HtmlTask',
    text: 'HTML自定义节点',
    component: CustomHtmlNode,
    attr: {
      width: 200,
      height: 80,
      resizable: true
    }
  }
]);
2. 自定义属性字段

工作流设计器支持扩展自定义属性字段,以满足特定的业务需求:

const customFields = computed(() => ({
  SWITCH: {
    component: FieldSwitch,
    props: {},
    events: {}
  },
  COLOR_PICKER: {
    component: ColorPicker,
    props: {
      showText: true
    },
    events: {
      change: (value) => console.log('颜色变化:', value)
    }
  },
  JSON_EDITOR: {
    component: JsonEditor,
    props: {
      mode: 'code',
      theme: 'monokai'
    },
    events: {}
  }
}));
3. 生命周期钩子扩展

工作流设计器提供了丰富的生命周期钩子,可以在流程设计的各个阶段进行扩展:

// 注册生命周期钩子
const registerHooks = () => {
  // 初始化后钩子
  designer.on('afterInit', () => {
    console.log('流程编辑器初始化完成');
  }, { blockAble: true });

  // 节点添加前钩子
  designer.on('beforeAddNode', ({ emitter, event }) => {
    // 可以在这里进行节点添加前的验证和处理
    return true; // 返回false可以阻止节点添加
  }, { blockAble: true });

  // 节点删除前钩子
  designer.on('beforeRemoveNode', ({ figure }) => {
    if (figure.bpmnType === 'StartEvent') {
      message.warning('开始节点不允许删除');
      return false; // 阻止删除开始节点
    }
    return true;
  }, { blockAble: true });

  // 节点选择钩子
  designer.on('selectedNode', ({ figure }) => {
    console.log('选中节点:', figure.id);
  });

  // 连线创建钩子
  designer.on('lineCreated', ({ line }) => {
    console.log('连线创建:', line.id);
  });
};
4. 自定义工具栏

您可以根据业务需求自定义流程编辑器的工具栏:

const toolbarButtons = {
  getDefaultButtons() {
    return [
      {
        key: 'save',
        text: '保存',
        icon: 'save',
        onClick: () => saveProcess()
      },
      {
        key: 'export',
        text: '导出',
        icon: 'export',
        onClick: () => exportProcess()
      },
      {
        key: 'import',
        text: '导入',
        icon: 'import',
        onClick: () => importProcess()
      },
      {
        key: 'zoomIn',
        text: '放大',
        icon: 'zoom-in',
        onClick: () => zoomIn()
      },
      {
        key: 'zoomOut',
        text: '缩小',
        icon: 'zoom-out',
        onClick: () => zoomOut()
      },
      {
        key: 'validate',
        text: '验证',
        icon: 'check-circle',
        onClick: () => validateProcess()
      }
    ];
  }
};
5. 多语言扩展

工作流设计器支持多语言扩展,您可以添加自定义语言包:

// 自定义语言包
const customLang = {
  'process.common.StartEvent': '开始事件',
  'process.common.EndEvent': '结束事件',
  'process.common.UserTask': '用户任务',
  'process.common.ServiceTask': '服务任务',
  // 更多自定义翻译...
};

// 注册自定义语言
app.config.globalProperties.$getLangText = (key, defaultText) => {
  return customLang[key] || defaultText || key;
};
6. 流程验证扩展

您可以扩展流程验证功能,确保设计的流程符合业务规则:

const validateProcess = () => {
  const processData = editor.exportProcess();
  const errors = [];
  
  // 检查是否有开始节点
  const hasStartNode = processData.figures.some(node => node.bpmnType === 'StartEvent');
  if (!hasStartNode) {
    errors.push('流程必须包含开始节点');
  }
  
  // 检查是否有结束节点
  const hasEndNode = processData.figures.some(node => node.bpmnType === 'EndEvent');
  if (!hasEndNode) {
    errors.push('流程必须包含结束节点');
  }
  
  // 检查每个节点是否都有连接
  processData.figures.forEach(node => {
    if (node.bpmnType !== 'StartEvent' && node.bpmnType !== 'EndEvent') {
      const hasIncoming = processData.lines.some(line => line.target === node.id);
      const hasOutgoing = processData.lines.some(line => line.source === node.id);
      
      if (!hasIncoming) {
        errors.push(`节点 ${node.config.name} 没有入连接`);
      }
      
      if (!hasOutgoing) {
        errors.push(`节点 ${node.config.name} 没有出连接`);
      }
    }
  });
  
  return errors;
};
7. 与后端集成

工作流设计器可以轻松与后端服务集成,实现流程的持久化和执行:

// 保存流程到后端
const saveProcess = async () => {
  const processData = editor.exportProcess();
  try {
    const response = await axios.post('/api/process/save', {
      processData,
      processName: '自定义流程',
      processDesc: '这是一个使用工作流设计器设计的流程'
    });
    message.success('流程保存成功');
    return response.data;
  } catch (error) {
    message.error('流程保存失败: ' + error.message);
    throw error;
  }
};

// 从后端加载流程
const loadProcess = async (processId) => {
  try {
    const response = await axios.get(`/api/process/${processId}`);
    editor.importProcess(response.data.processData);
    message.success('流程加载成功');
  } catch (error) {
    message.error('流程加载失败: ' + error.message);
    throw error;
  }
};
最佳实践

1. 节点设计原则

  • 单一职责:每个节点只负责一个特定的业务功能
  • 可复用性:设计通用的节点类型,便于在不同流程中复用
  • 可配置性:提供丰富的配置选项,适应不同的业务场景
  • 可视化友好:节点的外观应直观反映其功能和状态

2. 流程设计建议

  • 清晰的流程结构:使用网关合理组织流程分支和合并
  • 完整的生命周期:确保流程有明确的开始和结束节点
  • 适当的节点粒度:节点的粒度应适中,既不过于细化也不过于粗糙
  • 良好的命名规范:为节点和流程提供清晰、有意义的名称

3. 性能优化

  • 合理使用自定义节点:避免过度复杂的自定义节点,影响渲染性能
  • 优化流程规模:对于大型流程,考虑分页或分层设计
  • 减少不必要的计算:在自定义节点中避免频繁的重计算
  • 合理使用缓存:对于不经常变化的数据,使用缓存提高性能

4. 扩展性设计

  • 使用生命周期钩子:通过生命周期钩子扩展功能,避免修改核心代码
  • 模块化设计:将自定义功能封装为独立的模块,便于维护和升级
  • 遵循开放封闭原则:对扩展开放,对修改封闭
  • 提供清晰的扩展文档:为其他开发者提供详细的扩展指南

5. 团队协作最佳实践

  • 统一的命名规范:团队成员应遵循一致的节点和流程命名规范
  • 流程模板复用:创建常用流程模板,提高团队设计效率
  • 版本控制:使用流程版本管理功能,跟踪流程设计变更
  • 定期代码审查:对自定义节点和扩展进行定期代码审查,确保质量

6. 安全性考虑

  • 权限控制:对流程设计和操作进行适当的权限控制
  • 数据加密:敏感流程数据在传输和存储时应进行加密
  • 输入验证:对用户输入的流程配置进行严格验证,防止恶意数据
  • 审计日志:记录流程设计和修改的详细日志,便于追溯
应用场景

工作流设计器适用于多种业务场景,包括:

  • 企业工作流:审批流程、请假流程、报销流程等
  • 业务流程编排:微服务调用编排、API集成流程
  • 自动化流程:定时任务流程、事件触发流程
  • 数据处理流程:数据ETL流程、数据分析流程
  • AI流程编排:AI模型调用流程、智能决策流程
  • 供应链管理:采购流程、订单处理流程
  • 客户服务流程:投诉处理流程、售后服务流程
  • 项目管理流程:任务分配流程、进度跟踪流程
未来发展方向
  • 完善BPMN标准支持:逐步实现完整的BPMN 2.0标准支持
  • AI能力集成:引入AI辅助设计、智能推荐等功能
  • 前后端一体化:提供完整的流程设计-执行解决方案
  • 流程版本管理:完善的流程设计版本控制
  • 流程监控与分析:实时监控流程执行状态,提供数据分析

2. 页面设计器(持续完善中)

页面设计器是一个基于 Vue 3 + Vite 开发的现代化可视化页面构建工具,提供直观的拖拽式设计体验和丰富的组件库,帮助开发者快速构建高质量的企业级页面。

核心功能
  • 拖拽式组件布局:所见即所得的设计体验,支持组件拖拽、调整大小和对齐
  • 响应式布局:支持多种响应式布局模式,适配不同屏幕尺寸
  • 丰富的组件库:包含基础组件、表单组件、布局组件、数据组件、图表组件等
  • 实时预览:设计过程中实时查看效果,所见即所得
  • 数据绑定:支持组件与数据源的绑定,实现动态数据展示
  • 历史记录:支持撤销/重做操作,方便设计过程中的调整
  • 导出与导入:支持页面配置的导出和导入,便于复用和分享
  • 多语言支持:内置国际化支持,可切换多种语言
技术栈
  • 前端框架:Vue 3
  • 构建工具:Vite
  • 状态管理:Pinia
  • UI 组件库:Ant Design Vue
  • 样式方案:Less
  • 类型系统:TypeScript
  • 图标库:Ant Design Icons
画布操作
  • 平移:按住空格键 + 鼠标左键或鼠标中键拖动
  • 缩放:使用鼠标滚轮或缩放控件
  • 网格:支持显示/隐藏网格,以及网格吸附功能
  • 标尺:显示水平和垂直标尺,支持点击标尺快速定位
组件库

包含以下几类组件:

  • 基础组件:按钮、文本、图片、链接、分割线等
  • 表单组件:输入框、文本域、数字输入、选择器、复选框、日期选择器等
  • 布局组件:容器、卡片、标签页、折叠面板、网格布局等
  • 数据组件:表格、列表、树、分页等
  • 图表组件:折线图、柱状图、饼图、仪表盘等
  • 导航组件:菜单、下拉菜单、面包屑等
  • 反馈组件:弹窗、抽屉、通知、加载状态等
  • AI 组件:AI 文本生成、AI 图像生成、AI 翻译等
当前实现功能
  • 拖拽式组件布局:所见即所得的设计体验,支持组件拖拽、调整大小和对齐
  • 丰富的组件库:包含基础表单组件、高级组件、布局组件、图表组件等
  • 实时预览:设计过程中实时查看效果
  • 属性配置面板:详细的组件属性配置
  • 响应式设计:支持不同屏幕尺寸的自适应布局
  • 主题切换:支持多种主题风格切换
  • 历史记录:支持撤销/重做操作
完善计划
  • 组件库扩展:增加更多行业特定组件,如金融、电商、教育等领域组件
  • 模板系统:提供丰富的页面模板,支持快速创建常用页面
  • 版本管理:完善的页面设计版本控制,支持版本对比和回滚
  • 代码生成:支持生成可导出的前端代码,便于二次开发
  • 性能优化:提升大型页面的设计性能,支持更多组件同时编辑
  • 数据源管理:完善的数据源配置和管理功能
  • 高级交互设计:支持复杂交互逻辑的可视化配置
  • 移动端适配:优化移动端页面设计体验
开发指南
组件开发
  • 在组件目录下创建组件文件,遵循 Vue 3 的 Composition API 风格
  • 组件命名使用 PascalCase 格式,添加必要的类型定义
  • 组件样式使用 scoped 属性进行样式隔离,遵循 BEM 命名规范
  • 使用 CSS 变量进行主题定制,支持动态主题切换
状态管理
  • 使用 Pinia 进行状态管理,每个 store 负责特定领域的状态
  • 遵循单一职责原则,保持 store 的简洁和可维护性
样式开发
  • 使用 Less 预处理器,支持嵌套和变量
  • 组件样式使用 scoped 属性,避免样式冲突
  • 使用 CSS 变量定义主题颜色和尺寸,便于主题定制
应用场景

页面设计器适用于多种业务场景,包括:

  • 企业管理系统页面:快速构建管理后台的各种页面
  • 数据可视化页面:设计各种数据报表和仪表盘
  • 营销活动页面:快速创建营销活动的落地页
  • 移动端页面:设计适配移动端的响应式页面
  • 表单页面:构建各种复杂的表单页面
  • 门户首页:设计企业门户网站的首页和栏目页面
  • 内部工具页面:快速构建内部使用的各种工具页面
  • 原型设计:作为产品原型设计工具,快速验证设计理念

3. 未来规划设计器

3.1 打印设计器(后期规划)
  • 用途:用于设计各类打印模板,如发票、报表、标签等
  • 核心功能(规划中):
    • 精确的打印布局设计
    • 动态数据源绑定
    • 打印预览和模拟
    • 支持多种打印格式
    • 条形码和二维码生成
3.2 大屏设计器(后期规划)
  • 用途:用于设计数据可视化大屏、监控面板等
  • 核心功能(规划中):
    • 大屏布局设计
    • 丰富的图表和可视化组件
    • 实时数据连接
    • 多数据源支持
    • 大屏模板库
    • 发布和部署功能

4. 可视化设计器生态架构

所有设计器共享统一的技术架构和核心组件,包括:

4.1 共享核心模块
  • 拖拽引擎:统一的拖拽处理机制
  • 属性面板:可复用的属性配置组件
  • 事件系统:设计器内部事件通信
  • 插件系统:统一的插件扩展机制
  • 状态管理:基于 Pinia 的状态管理
4.2 技术架构
可视化设计器生态
├── 核心引擎层
│   ├── 拖拽引擎
│   ├── 属性配置引擎
│   ├── 渲染引擎
│   └── 事件系统
├── 设计器层
│   ├── 工作流设计器
│   ├── 页面设计器
│   ├── 打印设计器(后期规划)
│   └── 大屏设计器(后期规划)
├── 组件库层
│   ├── 基础组件
│   ├── 高级组件
│   ├── 行业组件
│   └── 自定义组件
└── 工具链层
    ├── 模板管理
    ├── 版本控制
    ├── 协作工具
    └── 部署工具
4.3 设计器间的协同
  • 设计器嵌入:支持在一个设计器中嵌入另一个设计器
  • 数据共享:设计器间的数据和组件共享
  • 统一发布:支持将多个设计器的成果统一发布
  • 跨设计器协作:支持不同设计器之间的协作开发

4. AI 机器人管理

  • 多模型支持:集成百度文心一言、DeepSeek 等多种 AI 模型
  • 机器人创建与管理:支持创建不同类型的 AI 机器人(客服、助手、开发等)
  • 智能问答:实时智能问答系统,支持流式传输和打字机效果
  • 聊天历史:完整的聊天记录保存和管理

🛠️ 技术架构与核心代码实现

前端技术栈

  • 框架:Vue 3
  • 组件库:Ant Design Vue 4
  • 状态管理:Pinia
  • 路由:Vue Router 4
  • 构建工具:Vite
  • CSS 预处理器:Less
  • 语言:JavaScript (ESM)
  • 拖拽库:SortableJS
  • 代码编辑器:Monaco Editor

后端技术栈

  • 运行环境:Node.js
  • Web 框架:Express
  • ORM:Sequelize
  • 数据库:MySQL
  • 认证机制:JWT(JSON Web Token)
  • API 风格:RESTful API + SSE(Server-Sent Events)
  • 缓存:Redis
  • 实时通信:Socket.io

后台系统核心代码结构

// 后端服务器核心代码(server.js)
const express = require('express');
const cors = require('cors');
const http = require('http');
const { Server } = require('socket.io');
const db = require('./models');
const routes = require('./routes');

// 创建Express应用
const app = express();

// 配置中间件
app.use(cors());
app.use(express.json({ limit: '50mb' }));
app.use(express.urlencoded({ extended: true, limit: '50mb' }));

// API网关中间件
app.use(apiGatewayMiddleware);

// 挂载路由
app.use('/api/v1', routes);

// WebSocket服务器
const server = http.createServer(app);
const io = new Server(server, {
  cors: {
    origin: '*',
    methods: ['GET', 'POST']
  }
});

// 初始化数据库连接
db.sequelize.authenticate()
  .then(() => {
    console.log('数据库连接成功');
    // 启动服务器
    server.listen(process.env.PORT || 8080, () => {
      console.log(`服务器运行在 http://localhost:${process.env.PORT || 8080}`);
    });
  })
  .catch(err => {
    console.error('数据库连接失败:', err);
  });

可视化前端架构设计

页面设计器采用模块化架构,核心组件包括:

画布组件核心实现

<!-- 画布组件核心代码 -->
<template>
  <div class="designer-canvas" ref="canvasRef">
    <!-- 组件拖拽区域 -->
    <div 
      class="canvas-content"
      :style="canvasStyle"
      @drop="handleDrop"
      @dragover.prevent
      @dragenter.prevent
    >
      <!-- 渲染当前表单组件 -->
      <component
        v-for="component in components"
        :key="component.id"
        :is="component.type"
        :component="component"
        :selected="selectedComponentId === component.id"
        @select="handleComponentSelect"
        @update="handleComponentUpdate"
      />
      
      <!-- 拖拽提示线 -->
      <div v-if="showDropLine" class="drop-line" :style="dropLineStyle" />
    </div>
  </div>
</template>

<script setup>
import { ref, computed, onMounted } from 'vue'
import { useDesignerStore } from '@/store/designer'
import Sortable from 'sortablejs'

const designerStore = useDesignerStore()
const canvasRef = ref(null)
const selectedComponentId = ref(null)
const showDropLine = ref(false)
const dropLineStyle = ref({})

// 组件列表
const components = computed(() => designerStore.components)

// 初始化拖拽功能
onMounted(() => {
  if (canvasRef.value) {
    // 初始化SortableJS,实现组件拖拽排序
    Sortable.create(canvasRef.value.querySelector('.canvas-content'), {
      animation: 150,
      ghostClass: 'ghost-component',
      onEnd: (evt) => {
        // 更新组件顺序
        designerStore.reorderComponent(evt.oldIndex, evt.newIndex)
      }
    })
  }
})

// 处理组件拖拽放置
const handleDrop = (evt) => {
  evt.preventDefault()
  const componentType = evt.dataTransfer.getData('component-type')
  if (componentType) {
    // 创建新组件
    designerStore.addComponent({
      type: componentType,
      x: evt.offsetX,
      y: evt.offsetY,
      properties: {}
    })
  }
}

// 组件选择和更新处理
const handleComponentSelect = (componentId) => {
  selectedComponentId.value = componentId
  designerStore.selectComponent(componentId)
}

const handleComponentUpdate = (componentId, updates) => {
  designerStore.updateComponent(componentId, updates)
}
</script>

插件系统核心实现

// 插件管理器核心代码
import { ref, computed } from 'vue'
import { defineStore } from 'pinia'

export const usePluginStore = defineStore('plugins', () => {
  // 插件列表
  const plugins = ref([])
  // 已启用的插件
  const enabledPlugins = ref([])
  // 插件上下文
  const pluginContext = ref(null)

  // 初始化插件上下文
  const initPluginContext = (designerContext) => {
    pluginContext.value = {
      // 注册组件API
      registerComponent: (componentConfig) => {
        designerContext.registerComponent(componentConfig)
      },
      // 注册规则API
      registerRule: (ruleConfig) => {
        designerContext.registerRule(ruleConfig)
      },
      // 注册工具栏按钮API
      registerToolbarButton: (buttonConfig) => {
        designerContext.registerToolbarButton(buttonConfig)
      },
      // 插件配置API
      getConfig: (pluginId) => {
        return plugins.value.find(p => p.id === pluginId)?.config || {}
      },
      setConfig: (pluginId, config) => {
        const plugin = plugins.value.find(p => p.id === pluginId)
        if (plugin) {
          plugin.config = { ...plugin.config, ...config }
        }
      }
    }
  }

  // 加载插件
  const loadPlugins = async () => {
    try {
      // 从插件目录加载插件
      const pluginModules = import.meta.glob('@/plugins/**/*.js')
      
      for (const [path, module] of Object.entries(pluginModules)) {
        const plugin = await module()
        if (plugin.default) {
          plugins.value.push(plugin.default)
        }
      }
      
      // 初始化并启用插件
      await initializePlugins()
    } catch (error) {
      console.error('加载插件失败:', error)
    }
  }

  // 初始化插件
  const initializePlugins = async () => {
    for (const plugin of plugins.value) {
      if (plugin.enabled) {
        await enablePlugin(plugin.id)
      }
    }
  }

  // 启用插件
  const enablePlugin = async (pluginId) => {
    const plugin = plugins.value.find(p => p.id === pluginId)
    if (plugin && !enabledPlugins.value.includes(pluginId)) {
      try {
        // 调用插件的初始化方法
        if (plugin.init) {
          await plugin.init(pluginContext.value)
        }
        enabledPlugins.value.push(pluginId)
        plugin.enabled = true
      } catch (error) {
        console.error(`启用插件 ${pluginId} 失败:`, error)
      }
    }
  }

  // 禁用插件
  const disablePlugin = async (pluginId) => {
    const plugin = plugins.value.find(p => p.id === pluginId)
    if (plugin && enabledPlugins.value.includes(pluginId)) {
      try {
        // 调用插件的销毁方法
        if (plugin.destroy) {
          await plugin.destroy(pluginContext.value)
        }
        enabledPlugins.value = enabledPlugins.value.filter(id => id !== pluginId)
        plugin.enabled = false
      } catch (error) {
        console.error(`禁用插件 ${pluginId} 失败:`, error)
      }
    }
  }

  return {
    plugins,
    enabledPlugins,
    initPluginContext,
    loadPlugins,
    enablePlugin,
    disablePlugin
  }
})

✨ 核心优势

1. 现代化技术栈

基于 Vue 3 生态构建,采用最新的前端技术和最佳实践,确保系统的高性能和可维护性。使用 Vite 作为构建工具,提供极速的开发体验和优化的生产构建。

2. 完整的功能体系

从用户管理到 AI 集成,提供了企业级应用所需的全部核心功能,开发者可以直接基于此进行二次开发,大大减少开发时间和成本。

3. 持续扩展能力

3.1 插件系统扩展机制

path-less-sys 设计了完整的插件系统,支持多种扩展点,开发者可以轻松扩展系统功能:

  • 组件扩展:添加自定义表单组件,丰富组件库
  • 规则扩展:自定义验证规则、条件显示规则等
  • 工具栏扩展:添加自定义工具栏按钮和操作
  • 属性编辑器扩展:为自定义组件添加专属属性编辑器
  • 导出格式扩展:支持新的表单导出格式
3.2 插件开发示例
// 自定义组件插件示例
import { definePlugin } from '@/plugins/utils'
import CustomChart from './components/CustomChart.vue'
import customValidator from './rules/custom-validator.js'

// 定义插件
export default definePlugin({
  // 插件元信息
  metadata: {
    id: 'custom-chart-plugin',
    name: '自定义图表插件',
    description: '提供自定义图表组件和验证规则',
    version: '1.0.0',
    author: 'Your Name'
  },
  
  // 初始化插件
  async init(pluginContext) {
    console.log('自定义图表插件初始化')
    
    // 注册自定义图表组件
    pluginContext.registerComponent({
      type: 'custom-chart',
      name: '自定义图表',
      icon: 'icon-chart',
      category: 'advanced',
      component: CustomChart,
      schema: {
        type: 'object',
        properties: {
          chartType: {
            type: 'string',
            title: '图表类型',
            enum: ['line', 'bar', 'pie'],
            default: 'line'
          },
          dataSource: {
            type: 'string',
            title: '数据源',
            description: '图表数据源配置'
          }
        }
      }
    })
    
    // 注册自定义验证规则
    pluginContext.registerRule({
      type: 'custom-validator',
      name: '自定义验证器',
      description: '验证输入值是否满足特定条件',
      handler: customValidator
    })
    
    // 注册自定义工具栏按钮
    pluginContext.registerToolbarButton({
      id: 'export-chart-data',
      name: '导出图表数据',
      icon: 'icon-export',
      action: () => {
        // 导出图表数据逻辑
        console.log('导出图表数据')
      }
    })
  },
  
  // 销毁插件
  async destroy(pluginContext) {
    console.log('自定义图表插件销毁')
    // 清理资源
  }
})
3.3 组件库扩展

系统支持通过插件方式扩展组件库,开发者可以:

  • 创建基于 BaseComponent 的自定义组件
  • 定义组件的属性 schema,自动生成属性面板
  • 实现组件的渲染逻辑和交互行为
  • 支持组件的条件显示和验证规则
3.4 自定义规则引擎

系统提供了灵活的规则引擎,支持:

  • 条件规则:基于字段值的条件判断
  • 验证规则:自定义表单验证逻辑
  • 计算规则:基于其他字段计算当前字段值
  • 联动规则:多字段之间的联动效果

4. 优秀的用户体验

采用 Ant Design Vue 组件库,提供了美观、易用的界面,支持主题切换和响应式布局。智能问答系统支持流式传输,提供了流畅的 AI 交互体验。

5. 强大的可视化设计能力

集成了页面设计器和流程设计器,支持拖拽式操作和实时预览,使非技术人员也能参与应用开发,提高开发效率。

📦 快速开始

安装依赖

npm install

启动开发服务器

npm run dev

访问应用

打开浏览器访问:http://localhost:3001

🎯 适用场景

  • 企业管理系统:适合构建各类企业内部管理系统,如 CRM、ERP、OA 等
  • 后台管理平台:为各类应用提供统一的后台管理界面
  • 低代码平台:基于可视化设计器构建低代码开发平台
  • AI 应用集成:快速集成 AI 功能到现有应用
  • 中大型 Web 应用:适合构建复杂度较高的 Web 应用

🔮 未来规划

  • 完善插件系统的实际实现
  • 增强 AI 功能的集成深度
  • 提供更多行业模板和示例
  • 优化性能和安全性
  • 支持更多 AI 模型和服务提供商

🤝 社区与贡献

path-less-sys 是一个开源项目,欢迎开发者参与贡献和反馈。你可以通过以下方式参与:

  • 提交 Issue 和建议
  • 贡献代码和功能
  • 分享使用经验和案例
  • 参与讨论和交流

📄 许可证

本项目采用专有许可证,虽然开源,但商用需收费。详细信息请查看项目 LICENSE 文件。


path-less-sys 是一款功能全面、技术先进的企业级管理后台模板,它结合了现代前端技术和 AI 智能功能,为企业应用开发提供了强大的基础。无论是快速构建原型还是开发复杂的企业系统,path-less-sys 都能为你提供高效、可靠的解决方案。

如果你正在寻找一款基于 Vue 3 的企业级管理后台模板,不妨试试 path-less-sys,相信它会给你带来惊喜!

🌟 项目地址:gitee.com/NBegin/path…

欢迎 Star ⭐ 支持,关注项目最新动态!