# lowcode-gateway **Repository Path**: george_ren/lowcode-gateway ## Basic Information - **Project Name**: lowcode-gateway - **Description**: Flexi 拖拽式低代码工具,配合 AI,快速生成 uni-app 、PC 前后端项目。支持 RuoYi 框架。 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 30291 - **Created**: 2025-03-30 - **Last Updated**: 2025-04-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Flexi 低代码工具 本工具是 Flexi 框架的一部分,Flexi 命名取自 flexible, 把灵活性作为第一设计原则。 本工具聚焦 2 个问题: 1. 为主流的关系型数据库生成 CURD 代码,包括Java、Vue,并可以在 RuoYi 框架中使用。这跟 RuoYi 框架很相似,但也有些增强 RuoYi 框架默认基于 Mysql 生成,使用基于 Mysql mapper 模板的替换。而 Flexi 基于 MybatisGenerator 生成,支持多种主流数据库 RuoYi 框架对表关系支持欠缺,最多支持主子表这种一对多的强关系。而 Flexi 支持多对多的表关系 2. 拖拽式设计前端页面(可配合 AI 使用),方便地绑定后端接口的数据,并生成前端页面(PC、uniapp) 随着 AI 的迅猛发展,低代码的方式最终可能被 AI 零代码取代,建议大家拥抱 AI ## 主要灵感来源 - RuoYi 框架:RuoYi 框架提供了代码生成功能,可以快速生成管理后台的前后端代码。但是, - RuoYi 框架是基于模板替换实现的,所以默认是基于 Mysql 的,如果想要使用 SqlServer 、Oracle 等其他数据库,需要使用单独的适配版 - RuoYi 框架在表关系的处理上,最多能够生成主子表类型,对于 一对多、多对多关系支持较差,还是需要再写代码 - RuoYi-App 框架没有提供 uniapp 的代码生成功能,几乎所有业务功能都得需要写代码 - diygw 低代码、可视化 uniapp2.0 等 拖拽设计平台(没用过的话可以自己搜索看看)。 - 这些平台类似于先使用拖拽,把设计图用画布的形式展示出来,通过绑定样式、API 等进行数据绑定,最后再导出整个项目的源代码,由于作者对画布了解不足,所以并没有采用这种方式 - 如果用户不是程序员,那么这些平台确实能有一定的帮助。但如果用户本身就是程序员,那么可能还需要额外的学习成本来学习平台的使用,可能觉得麻烦 - Cursor + claude3.7 - AI 写代码的能力确实很强,Flexi 低代码工具的初衷是想做一个类似于拖拽设计的工具,通过拖拽组合组件来形成页面,减少代码量,但是 AI 的出现,使得作者一度怀疑拖拽设计是否还存在价值。作者目前的推荐是,使用 AI 生成代码,使用拖拽进行少量的微调 - Cursor 等 AI IDE 确实非常好,通过设计图生成单纯的前端页面已经很棒了。但是如果是前后端代码都让 AI 来写,可能需要进行多轮对话,对于前后端一体化的大型项目,可能有些吃力(这里作者说的不一定是对的,因为作者相信 AI 有足够的能力去完全生成一个前后端配合的项目,未来可能真的不需要写代码了) - Cursor 重度使用的话,是需要付费的,Trae 作为替代,目前还赶不上 Cursor的效果好 ## 主要界面截图 ![image-20250404154808595](image-20250404154808595.png) ![Xnip2025-04-27_14-27-50.jpg](Xnip2025-04-27_14-27-50.jpg) ## 演示地址 这里提供一个演示地址供大家快速体验功能,但真正使用时,应该把代码生成到本地才行,所以实际使用时请使用本地部署。 ## 交流群 QQ 群:1032180858 ## 本地运行项目 1、下载代码到本地 ``` git clone https://gitee.com/renjianzhi/lowcode-gateway.git ``` 2、在 `ruoyi-admin/src/main/resources/application-lowcode.yml` 中配置 appid、服务器地址,如果没有 appid,联系QQ 535170096 获取 3、运行项目(同 RuoYi-Vue 的启动方式) 可参考 https://doc.ruoyi.vip/ruoyi-vue/document/hjbs.html 4、增加 Flexi 提供的菜单 ``` INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (2000, 'UI 设计', 0, 0, 'design', null, null, '', 1, 0, 'M', '0', '0', '', 'server', 'admin', '2025-03-30 12:05:56', 'admin', '2025-03-30 12:08:09', ''); INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (2001, '方案列表', 2000, 1, 'scheme', 'design/index', null, '', 1, 0, 'C', '0', '0', '', 'form', 'admin', '2025-03-30 12:11:01', 'admin', '2025-04-01 07:03:43', ''); INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (2002, '设计器', 2000, 1, 'designer', 'design/designer', null, '', 1, 0, 'C', '1', '0', null, '#', 'admin', '2025-03-31 14:22:35', '', null, ''); INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (2003, '物料管理', 2000, 1, 'material', 'design_material/index', null, '', 1, 0, 'C', '1', '0', null, '#', 'admin', '2025-04-01 06:25:57', '', null, ''); INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (2005, '代码生成', 0, 0, 'flexi_gen', null, null, '', 1, 0, 'M', '0', '0', '', 'code', 'admin', '2025-04-26 08:34:21', 'admin', '2025-04-27 01:19:05', ''); INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (2006, '扫描/导入表', 2005, 1, 'scan', 'gen/scan', null, '', 1, 0, 'C', '0', '0', '', 'eye-open', 'admin', '2025-04-26 08:38:07', 'admin', '2025-04-26 08:43:29', ''); INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (2007, '生成列表', 2005, 1, 'index', 'gen/index', null, 'genIndex', 1, 0, 'C', '0', '0', '', 'list', 'admin', '2025-04-27 00:27:11', 'admin', '2025-04-27 01:18:16', ''); INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (2008, '新增/编辑', 2005, 10, 'add', 'gen/add_edit', null, 'genAddEdit', 1, 0, 'C', '1', '0', '', '#', 'admin', '2025-04-27 01:14:26', 'admin', '2025-04-27 01:16:55', ''); INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (2009, '列编辑', 2005, 11, 'columns', 'gen/columns', null, 'GenColumns', 1, 0, 'C', '1', '0', null, '#', 'admin', '2025-04-27 01:56:14', '', null, ''); INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (2010, '代码对比', 2005, 13, 'diff', 'gen/diff', null, 'genDiff', 1, 0, 'C', '1', '0', null, '#', 'admin', '2025-04-27 03:35:16', '', null, ''); INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (2011, 'SQL生成', 2005, 3, 'sql', 'gen/sql', null, '', 1, 0, 'C', '0', '0', null, 'code', 'admin', '2025-04-27 03:37:32', '', null, ''); INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (2012, '表关系', 2005, 4, 'relation', 'gen_relation/index', null, '', 1, 0, 'C', '0', '0', null, 'tree', 'admin', '2025-04-27 03:39:19', '', null, ''); ``` 5、增加几个表 ``` create table flexi_gen ( id int auto_increment comment '主键id' primary key, create_by bigint null comment '创建人', create_time datetime null comment '创建时间', update_by bigint null comment '更新人', update_time datetime null comment '更新时间', catalog_name varchar(255) null comment 'catalog', schema_name varchar(255) null comment 'schema', table_name varchar(255) null comment '表名', table_remarks varchar(255) null comment '表注释', table_type tinyint default 1 null comment '表类型(1=单表,2=树表,3=主子表)', table_pk_name varchar(255) null comment '表主键名', class_name varchar(255) null comment 'Java 实体类名', package_name varchar(255) null comment 'Java 包名', module_name varchar(255) null comment 'Java 模块名', gen_path varchar(255) null comment '后端生成 base 路径', gen_fe_type tinyint default 1 null comment '前端生成类型(1=panjiachen)', business_name varchar(255) null comment '业务名', mbg_type tinyint null comment 'mbg类型(1=标准版,2=简洁版)', mbg_big_decimal bit null comment 'mbg小数使用 BigDecimal', mbg_jsr_310 bit null comment 'mbg时间使用 JSR 310', mbg_root_class varchar(255) null comment 'mbg 实体基类', table_pk_type varchar(255) null comment '表主键类型', gen_java_type tinyint default 1 null comment '后端生成类型(1=flexi,2=ruoyi)', data_real_delete bit default b'1' null comment '数据删除', fe_gen_path varchar(255) null comment '前端生成路径', gen_fe_ui_type int default 2 not null comment '前端UI 类型(1=单页面弹窗式,2=多页面跳转式)', mbg_generated_key varchar(20) default 'JDBC,true,post' not null comment 'mbg key生成' ) comment '代码生成表'; create table flexi_gen_column ( id int auto_increment comment '主键id' primary key, create_by bigint null comment '创建人', create_time datetime null comment '创建时间', update_by bigint null comment '更新人', update_time datetime null comment '更新时间', gen_id int null comment '生成 id', name varchar(255) null comment '列名', remarks varchar(255) null comment '列注释', type varchar(255) null comment '列类型', size int null comment '列大小', auto_increment bit null comment '自增', default_value varchar(255) null comment '默认值', nullable bit null comment '可以为 null', java_type varchar(255) null comment 'Java 类型', java_name varchar(255) null comment 'Java 属性名', list_show bit null comment '列表展示', add_show bit null comment '新增展示', modify_show bit null comment '修改展示', searchable bit default b'0' null comment '可搜索', search_type varchar(255) null comment '搜索类型', fe_type varchar(255) null comment '前端表单类型', dict_name varchar(255) null comment '字典值名称', ignore_status bit null comment '忽略此列', fe_required bit default b'0' not null comment '前端必填', default_java_name varchar(255) null comment '默认 Java 名称', default_java_type varchar(255) null comment '默认 Java 类型', fe_order int default 10000 not null comment '前端展示顺序', fe_initial_value varchar(255) null comment '前端输入默认值', fe_list_width int null comment '前端列表展示宽度', fe_list_render varchar(255) null comment '前端列表自定义渲染函数' ) comment '代码生成表字段信息'; create table flexi_gen_relation ( id int auto_increment comment '主键id' primary key, create_by bigint null comment '创建人', create_time datetime null comment '创建时间', update_by bigint null comment '更新人', update_time datetime null comment '更新时间', source_table varchar(255) null comment '源表', target_table varchar(255) null comment '关联表', type int null comment '关系类型', relation_table varchar(255) null comment '多对多关系表', relation_keys varchar(255) null comment '外键', readonly bit default b'0' not null comment '只读模式' ) comment '关系表'; ``` ## 使用文档 [UI 设计使用文档](doc/UI设计使用文档.md) [代码生成使用文档](doc/代码生成使用文档.md)