# laymini-admin **Repository Path**: kkzfl/laymini-admin ## Basic Information - **Project Name**: laymini-admin - **Description**: 基于layuimini的一个简单的后台管理前后端不分离框架,主体技术mybatisplus+sa_token+springboot+freemarker - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: http://wangijun.com:8001/layuiadmin/ - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-04-05 - **Last Updated**: 2025-04-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # laymini-admin #### 前言 项目基本功能已经完善。 #### 介绍 基于layuimini的一个简单的后台管理前后端不分离框架,主体技术mybatisplus+sa_token+springboot+freemarker, #### 演示地址 [演示地址](http://wangijun.com:8001/layuiadmin/) **演示地址可能有延迟,体验最新建议clone到本地查看** **如果不小心把演示环境弄坏了,可以提个issues,我将很快解决。** #### 计划 - 基础的RABC权限校验 ---已完成 - 基础的后台管理功能 ---已完成 - 集成Quartz ---已完成 - 集成多租户 ---目前项目中多租户是以机构为租户。不同机构之间的数据是隔离的,样例为**订单管理**功能。目前用的是in查询来实现的。 - 机构表中是否展示子集字段,主要用途在于,如果设置此机构不展示子集数据,则该部门用户只能查看相同机构用户创建的数据。 - 如果机构下无子机构,设置展示或不展示,没有任何影响。 - 集成XXL-JOB ---需要构建多模块应用(可能需要开新坑), - 基于SaTokenSso增加SSO单点登录样例 ---需要构建多模块应用,已实现,点击查看[sso-demo](https://gitee.com/wlf213/sso-demo) #### 项目特点 - 安全,url白名单机制,只有在菜单表中维护过的url才可允许访问,否则皆为无权限页面。(提供开发特权,开发时不进行权限校验。) - 全局异常捕获,交互友好,非Ajax请求未登录或无权限时会跳转到登录页或无权限页面。 - 全局日期格式处理友好,配置Jackson,解决大数字JSON化时到前端精度丢失的问题。 - FreeMarker数字处理,自定义数字金额格式化,保证浮点数小数点不丢失。同时自定义了金额格式化。具体参考`com.wlf.admin.common.freemarker.FreemarkerConfig`类源码。 - 零SQL+全单表操作+缓存 - 零中间件,有且只有数据库 - 代码干净整洁,二次开发,或者用来学习皆可。 - 永久开源免费 **关于零SQL** - 个人观点,使用条件构造期构造的单表SQL无需维护。 - 如果单表查询出现问题,排查问题顺序应该是, - 代码是否有问题, - 能不能使用缓存解决, - 数据库是不是设计的有问题,比如忘加索引。 - 不是不会写复杂的SQL,复杂SQL解决的问题往往比带来的问题要多得多,一边解耦,一边SQL写的各种关联,这,真的合理? - 单表查询优点很多,缺点可能是有些程序员喜欢在For循环里调用未加缓存的查询SQL的方法。一定程度会影响程序执行效率。但这种情况优化起来也非常简单。 **关于缓存** - 在全单表操作的情况下,缓存还是比较好处理的。 - (不大幅度魔改框架,可以省略不看)关于一些权限的缓存依旧会加重心智负担,但一般开发无需过多担心,因为开发者已经完善。 - 总结双刃剑。用的好,程序的响应速度能得到大大的提升,用不好,就是各种未及时刷新缓存,各种取到脏数据。 **关于未来** 问:为什么前端要使用Layui,而不是顺应时代潮流的Vue? 答:没有最好的,只有合适的,如果Layui能把你的需求写了,就没有必要非要上Vue,因为上了Vue基本就说明需要前后端分离了。且Vue开发需要对程序员的要求会变多。 (小声bb,纯Vue我也写了个前端管理框架[wlf-admin](https://gitee.com/wlf213/wlf-admin) (未提供后端),混合Vue我也写了个框架,[sa-admin-server](https://gitee.com/wlf213/sa-admin-server)包括前后端。) 如果此项目适合你的需求,或者解决了你的问题,希望给我点个免费的star #### 软件架构 **后端** - springBoot - mybatisPlus - sa-Token - freeMarker - mysql **前端** - jquery - layui - layuimini #### 代码结构 ![目录说明](./img/img_8.png) #### 项目预览 ##### 登陆验证码 ![验证码](img/img_9.png) ##### 菜单管理 ![菜单管理](./img/img.png) ##### 用户管理 ![用户管理](./img/img_1.png) ##### 角色管理 ![角色管理](./img/img_2.png) ##### 机构管理 ![机构管理](./img/img_3.png) ##### 任务管理 ![任务管理](./img/img_4.png) ##### Cron表达式 ![Cron表达式](./img/img_5.png) ##### 订单管理 ![订单管理](./img/img_6.png) ##### 多级菜单 ![多级菜单](./img/img_7.png) #### 本地开发说明 前言: - 一般遇到数据库错误,请先备份数据,然后删除`ddl_history`表,重新运行项目即可。 - 此操作会删除改系统所用到的表,然后重建,非该系统用的表,不会删除。本质上是执行`db\init.sql`文件。文件中执行的SQL语句是先删除在重建。 - 第一次运行无数据库时,可能会报一个关于`Sys_Map`的异常,无须过多关注,库表正常建立后再次运行就不报错了。 #### 使用说明 1. 创建`layuimini_admin`数据库,修改数据库连接配置。 2. 启动项目即可,项目表结构以及初始数据将自动生成。 3. 无报错的情况,项目即正常启动。(遇到问题可在`issues`反馈) **后记** 如果项目操作过程中报一些table不存在等异常,请删除`ddl_history`表重新启动项目,或者查看`src/main/resources/db/init.sql` 中,自己手动维护,数据库表 #### 常见问题 ##### freemarker_implicit.ftl是什么文件, 答:主要是给IDEA做代码提示,以及代码跳转用的,里面包括了笔者注入的一些工具类,在此文件配置后,在模版文件中使用,便可得到代码提示。 ##### FreemarkerConfig 此配置文件做了什么, 答: 1. 注入静态方法类,可以在模版中使用静态方法。默认注入了,Hutool的`DateUtil`,和SaToken的`StpUtil`。前者用来处理时间,后者用来处理权限校验。 2. 注入了`SysConfig`,可以在模版中直接使用此类中的配置信息。 3. 注入了`HasPerm`,权限校验方法,结合模版中的if标签使用。 4. 设置了全局日期格式为`yyyy-MM-dd HH:mm:ss` 5. 设置了全局数字格式为`#.########`,增加了自定义的数字格式化,使用方法为`${x?string.@amt}` 6. 对于`LocalDateUtil`的处理,目前是借助注入的`DateUtil`,使用方法为`${dateUtil.dete(x)}` 转化为`Date`,一般使用方法`${dateUtil.dete(x)?datetime}` #### 打包部署 **Linux平台** - 方式一:把`lib`文件夹和打包出来的`laymini-admin-0.0.1.jar`文件复制到服务器上同一目录, 在目录下执行,`java -jar laymini-admin-0.0.1.jar`启动即可。无依赖的上的变动,仅需上传,`laymini-admin-0.0.1.jar`文件重启即可完成更新,无需上传庞大的依赖库。 - 方式二:上传layuimini-admin-0.0.1-all.zip到服务器上并解压,使用解压文件中的`run.sh`文件来启动应用, - 命令: - `sh run.sh start` 启动应用 - `sh run.sh stop` 停止应用 - `sh run.sh restart` 重启应用 - `sh run.sh status` 查看应用状态 **Win平台** 双击`start.bat`文件即可,停止应用即关闭win窗口即可(不建议),建议Ctrl+C来停止应用。 #### 问题反馈 加我为好友,备注`Gitee`,然后拉你进群 ![](./img/img_10.jpg) #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request