[開源]快速開發(fā)平臺(低代碼開發(fā)平臺),本框架永遠(yuǎn)免費,永久全開源(開源 低代碼開發(fā)平臺)
一、開源項目簡介
fhs-Framework是一個基于Springboot Springcloud Mybatis Plus sa-token vue elementui 的快速開發(fā)平臺(低代碼開發(fā)平臺),本框架永遠(yuǎn)免費,永久全開源。
FHS-Framwork是一個集成了國內(nèi)外諸多優(yōu)秀開源項目的快速開發(fā)平臺,除了在常規(guī)快速開發(fā)平臺提供 用戶,角色,權(quán)限,菜單,字典,審計日志,代碼生成器 還擁有可以讓您更少寫SQL和前端代碼的翻譯服務(wù)以及PAGEX服務(wù)。
二、開源協(xié)議
使用Apache-2.0開源協(xié)議
三、界面展示
四、功能概述
系統(tǒng)管理
- 部門管理
- 用戶管理
- 角色管理
- 字典管理
- 菜單管理
- 代碼生成
- 登錄日志
五、技術(shù)選型
基于Springboot Springcloud Mybatis Plus sa-token vue elementui。
用到的國產(chǎn)組件集
- Mybatis Plus
- Sa-Token
- Validate-Springboot-Starter
- SpringCloud Alibaba
- ip2region
- knife4j
和其他框架差異化特性
– ????翻譯組件
????????翻譯組件可以只通過注解把你表里的id轉(zhuǎn)換為名稱,把你的字典碼轉(zhuǎn)換為字典注釋(比如0轉(zhuǎn)換為男1轉(zhuǎn)換為女)。
– ????All in One模式 開發(fā) 微服務(wù)模式部署
????????微服務(wù)開發(fā)對于電腦內(nèi)存要求比較高,調(diào)試個東西要啟動好多個微服務(wù)還要啟動網(wǎng)關(guān),調(diào)用鏈路復(fù)雜的點一下不知道調(diào)用到誰那里去了,要解決還要自己機器跑nacos,fhs 首創(chuàng),all in one 模式開發(fā),微服務(wù)模式部署,在開發(fā)環(huán)境直接把所有的模塊集成到一個springBoot項目啟動,部署的時候又使用微服務(wù) 網(wǎng)關(guān)模式部署 參考:fhs_app/fhs_app_all_in_one 和 fhs_app/fhs_app_basics的做法 即可實現(xiàn)。
– ????更簡單的微服務(wù)調(diào)用
???????? 傳統(tǒng)微服務(wù)玩法是第一我定義一個fegin api接口,然后寫一個controller ,在寫一個service實現(xiàn) 需要三個步驟,fhs 集成了easy cloud,只需要在service層給對應(yīng)的方法上加@CloudMethod 即可完成接口暴露,哪個微服務(wù)用到直接 Autowired service接口即可。
– ????更好用的校驗框架
????????集成了validate-springboot-starter,在兼容hibernate Validator和javax validation的同時,支持了更多自定義玩法。 內(nèi)置常用驗證規(guī)則:比如手機號驗證,正則驗證,ip,郵箱,長度,范圍,數(shù)字,小數(shù),中國車牌號,身份證,長度, url, 圖書ISBN編號,文件后綴,文件大小 等常用驗證規(guī)則
– ????JSON驅(qū)動的VUE 列表和表單組件
????????avue今年又獲得了GVP,證明了越來越多的前端程序員開始接受JSON驅(qū)動來寫VUE 頁面,fhs 也將組件封裝為JSON驅(qū)動的組件,比如簡單的CRUD,就可以這么寫:
<template> <pagex-crudForm :namespace="namespace" :title="title" :crudSett="crudSett" :formSett="formSett" :idFieldName="idFieldName" > </pagex-crudForm></template><script>export default { name: "Dict", data() { return { namespace:'dictGroup', title:'字典分組', idFieldName:'groupId',//主鍵 crudSett:{ // 列表配置 api: '/basic/ms/dictGroup/pagerAdvance', //列表接口 sortSett: [{//排序 "direction": "DESC", "property": "updateTime" }], buttons: [//列表上的按鈕 { title: '新增', name: 'add', code: "add", type: 'primary', size: 'mini', icon: 'el-icon-plus', // 支持寫click 自定義點擊事件,新增組件會自帶事件 } ], columns: [ {label: '分組名稱', name: 'groupName'},//列 分組名稱 {//分組編碼列,點擊之后跳轉(zhuǎn)到字典項列表 label: '分組編碼', name: 'groupCode', type: 'formart', formart: "<label style='cursor:pointer'>${groupCode}</label>",//格式化顯示效果 click: function (_row) { this.$router.push({path: '/dict/type/data/',query:{groupCode: _row.groupCode}}); } }, { label: '操作',//操作列 name: 'operation', type: 'textBtn', textBtn: [ { title: "編輯", type: "bottom", size: 'mini' }, { title: "詳情", type: "success", size: 'mini' }, { title: "刪除", type: "danger", size: 'mini', api: '/basic/ms/dictGroup/' } ], } ], filters: [//過濾條件 {label: '分組名稱:', name: 'groupName', placeholder: "分組名稱", type: 'text', operation: 'like'},//like 是后臺過濾規(guī)則,模糊匹配 支持> < != between like 等等 {label: '分組編碼:', name: 'groupCode', placeholder: "分組編碼", type: 'text', operation: 'like'} ], }, formSett:{// 表單 addApi: '/basic/ms/dictGroup/',//新增表單的url,默認(rèn)的post updateApi: '/basic/ms/dictGroup/',//修改表單的url 默認(rèn)是post data:{ //這里寫默認(rèn)值,比如groupName:'默認(rèn)編碼' }, controls:[//表單字段 { type: 'text', name: 'groupName', label: '分組名稱', rule: 'required', placeholder: '請輸入分組名稱' }, { type: 'text', name: 'groupCode', label: '分組編碼', rule: 'required', placeholder: '請輸入分組編碼' } ] }, } }, methods: { //自定義方法 }};</script>
– ????Mybatis Plus查詢增強
Mybatis的wrapper是我見過特別好的查詢api設(shè)計,但是條件稍微多一點就寫的很長,我們通過APT技術(shù)(類似lombok對po進行編譯時增強),對PO進行增強,使用PO來替代原生Wrapper構(gòu)造,和activeRecord配合起來簡直不要太美。上demo:
//有po定義如下:@Data@Wrapperable //增強注解 類似lombok的@data 注解@TableName("user")public class User { @TableId("user_id") private Integer userId; @TableField("name") private String name; @TableField("age") private Integer age; @TableField("sex") private String sex;} @GetMapping("/one") public User one() { return User.newOBJ().nameLike("小").one(); } @GetMapping("/oneField") public User oneField() { //這里只查id和name2個字段 return User.newOBJ().nameLike("小").one(new String[]{User.USERID, User.NAME}); } @GetMapping("/list") public List<User> list() { return User.newOBJ().ageBetween(10, 25).list(); } @GetMapping("/listField") public List<User> listField() { return User.newOBJ().ageBetween(10, 20).list(new String[]{User.USERID, User.NAME}); } @GetMapping("/delete") public int delete() { return User.newOBJ().ageBetween(50, 80).delete(); } @GetMapping("/count") public Long count() { return User.newOBJ().ageBetween(10,26).count(); } @GetMapping("/update") public int update() { User user = User.newOBJ(); user.setAge(19); //把小明的年齡改為19 return user.nameEQ("小明").update(); }
class和提示已經(jīng)支持自動生成的方法有:
bean2Wrapper,list,list(String[] fields),one,one(String[] fileds),count,delete,update,newOBJ
已經(jīng)支持的wrapper相關(guān)操作方法有:
eq,neq,ge,gt,le,lt,like,notLike,likeLeft,likeRight,in,notIn,between,orderByAsc,orderByDesc,isNull,notNull
千萬注意:
本功能和lombok一樣需要搭配idea插件使用,不然class雖然增強了但是idea 無法識別這些方法報錯,但是不影響運行,我們提供了配套的idea插件。
要求idea版本為 2021.2.2 以及 以上。 并且idea加入以下配置:setting-Build,Execution,Deployment-Compiler Shared build process VM 的value設(shè)置為 option -Djps.track.ap.dependencies=false
六、源碼地址
私信回復(fù):低代碼開發(fā)平臺
或訪問一飛開源:https://code.exmay.com/