推广文章:path-less-sys 企业级Vue3管理后台模板
🌟 项目简介
path-less-sys 是一款基于 Vue 3 开发的企业级管理后台模板,集成了后台管理系统、可视化页面设计器和流程设计器,为企业应用开发提供一站式解决方案。它采用现代化技术栈,提供了丰富的功能模块,帮助开发者快速构建高质量的企业管理系统。
🚀 核心功能
1. 后台管理系统
- 用户管理:完整的用户生命周期管理,支持用户创建、编辑、删除和状态控制
- 权限管理:基于角色的访问控制(RBAC),支持动态路由和按钮级权限控制
- 部门管理:灵活的组织架构管理,支持多级部门结构
- 菜单管理:可视化菜单配置,支持动态路由生成
- 日志管理:详细的操作日志记录和查询
- 数据字典:统一的数据字典管理,支持多语言
🎨 可视化设计器生态
1. 工作流设计器(已基本实现)
工作流设计器基于 Vue3 和 draw2d_native 开发,提供了完整的流程设计和编排能力,适用于工作流引擎、业务流程管理等场景。它采用了现代化的架构设计,结合了主流大厂流程编排方案的优点,为企业级应用提供了高效、灵活的流程设计解决方案。
大厂流程编排方案对比
| 特性维度 | 工作流设计器 | 阿里巴巴CompileFlow | 字节跳动FlowGram | Activiti/Flowable |
|---|---|---|---|---|
| 技术栈 | Vue3 + draw2d | Java | 未知 | 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 ⭐ 支持,关注项目最新动态!