# admin_server_template **Repository Path**: luoye_lj/admin_server_template ## Basic Information - **Project Name**: admin_server_template - **Description**: 管理平台构建模板 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-02-05 - **Last Updated**: 2025-01-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # admin_server_template #### 介绍 管理平台构建模板,后端使用spring boot及使用thymeleaf作为页面模板语言,前端使用bootstrap以及sb-admin-2框架。特点是相对于使用前后端分离的项目足够简单,方便二次开发,并且能够很好的适配手机等移动设备。 #### 软件架构 后端:spring boot+mysql+mybatis+thymeleaf 前端:jquery+bootstrap+sb-admin-2 #### 安装教程 1. 安装mysql数据库 2. 安装java 3. 安装idea等开发IDE #### 使用说明 1. 下载或拉取项目代码 2. 修改项目目录为你需要的名称 3. 用idea等IDE打开项目 4. 准备一个mysql数据库,新建一个数据库,例如:db_test 5. 执行项目src目录下的some.sql文件中的sql语句初始化数据库 6. 修改配置文件 src / main / resources / application-dev.yml,将里面的数据库配置改为刚创建的数据库 7. 修改配置文件 src / main / resources / application-dev.yml中的应用名称等其他配置 8. 执行maven的插件spring-boot的命令:spring-boot:run或者直接运行ServiceApplication中的main方法 9. 打开浏览器,访问:http://localhost:12001(端口没改的话) 10. 初始化了一个开发人员角色的用户,用户名:dev,密码:111111 11. 代码生成: (1)、新建数据库表 (2)、修改com.luoye.lj.wstool.CodeGenerator的main方法中数据库配置,并运行这个main方法,根据提示输入要生成代码的数据库表名并回车 (3)、需要注意的是表和字段的COMMENT将作为前端显示的相关名称 ,以及可以通过COMMENT来控制和定制代码的生成,具体使用方式参考后面的专门说明。 12. 代码生成分别在com.luoye.lj.controller、com.luoye.lj.dao、com.luoye.lj.service以及com.luoye.lj.pojo这几个包下面创建相应的Java代码 13. 前端页面生成在目录 src/main/resources/templates/bll 下 14. 代码生成工具会自动添加权限和菜单内容,但需要在浏览器中手动将权限加入到相关的角色,这样才能访问生成的表功能 15. 由于所有代码都是按照规约进行自动生成的,所以有定制化的内容需要修改生成的代码。 16. 打包部署: (1)、使用maven的打包命令进行打包 > 切换到项目根目录,使用如下命令(当然你也可以直接用idea等IDE的maven插件进行打包): ```shel mvn clean && mvn compile && mvn package ``` (2)、直接用Java命令运行生成的jar包 > 当然你可以将配置文件放到程序运行目录,具体细节可以参考spring boot ```shell java -jar xxxx.jar ``` #### 前端数据加载工具datagrid说明 一个例子: ```javascript $("#data").datagrid("load",{ url:"[[@{/bll/test/search}]]", data:data, showDetail:true, detailDialogTitle:"测试详情", colResizeEnable:true, showFieldSelect:true, fields:[ {name: "id", autoHidden: true, text: "自增编号", inTable: true}, {name: "name", autoHidden: true,wordWrap:false, text: "名字", inTable: true}, {name: "userPwd", autoHidden: true, text: "密码", inTable: true}, {name: "addTime", autoHidden: true, text: "添加时间", inTable: true}, {name: "price", autoHidden: true, text: "价格", inTable: true}, {name: "count", autoHidden: true, text: "数量", inTable: true,render:function(row,index,allIndex){ return ""+allIndex+""; }} ], autoHideOperation:false, operations:[ {name:"edit",text:"修改",handler:function(row){ $("#menu_examine_lable").html("修改【一个测试】"); $("#postUrl").val("[[@{/bll/test/modify}]]"); $("#id_edit").val(row.id); $("#name_edit").val(row.name); $("#userPwd_edit").val(row.userPwd); $("#addTime_edit").val(row.addTime); $("#price_edit").val(row.price); $("#count_edit").val(row.count); $("#edit_body").modal("show"); }}, {name:"remove",text:"删除",handler:function(row,preRow,nextRow){ if (confirm("确定要删除吗?")) { var postUrl = "[[@{/bll/test/delete}]]"; var data = {id: row.id, '_csrf':csrfToken}; $.doSubmit({ submitUrl: postUrl, data: data, callBack: function (response) { var redata = $.parseJSON(response); if (redata.ok) { if(preRow==null&&nextRow==null){ search(); }else { $("#data").datagrid("reload"); } } else { alert(redata.msg); } }, webContext: '${webContext}' }); } }} ], contextMenus:[ {name:"edit",text:"编辑",icon:"edit",handler:function (row,preRow,nextRow) { alert(row) }}, {name:"delete",text:"删除",icon:"delete",handler:function (row,preRow,nextRow) { alert(row) }} ], webContext:webContext, beforeRender:function(redata){ //数据渲染前执行 }, afterRender:function(redata){ //数据渲染后执行 }, afterLoad:function(){ //数据加载后执行 } }); ``` > 1. data是装载数据的div的id > 2. load是调用数据加载方法,同时还有reload是重新加载当前页面,loadLastPage是加载最后一页数据 > 3. showDetail是否显示查看详情的按钮,默认:true > 4. detailDialogTitle数据详情对话框的标题,默认:详情 > 5. colResizeEnable列是否能拖动,默认:false > 6. fields展示的字段 > - name字段名称,和后端传过来的相同则展示该字段的值 > - autoHidden标识在用手机等小屏幕查看时,该字段是否自动隐藏 > - wordWrap标识是否自动换行 > - text表头列标题 > - inTable是否在表格中展示 > - render数据展示方式,表格中将展示这个方法return的内容。参数row是这一行的数据,index是当前页编号,allIndex是整个数据的编号 > 7. autoHideOperation在手机等小屏幕设备是否隐藏操作列表,默认:true > 8. operations行数据操作方法列表 > - name操作名字 > - text按钮显示的文字 > - handler点击操作按钮后的处理方法,参数row是这一行的数据,preRow前一行数据,nextRow下一行数据 > 9. contextMenus右击行数据操作方法列表 > - name操作名字 > - text按钮显示的文字 > - icon图标 > - handler点击操作按钮后的处理方法,参数row是这一行的数据,preRow前一行数据,nextRow下一行数据 > 10. webContext上下文环境,固定填webContext就好了 > 11. beforeRender数据渲染前执行的方法,比如往某行数据中加个字段 > 12. afterRender数据渲染后执行的方法 > 13. afterLoad整个数据加载完后执行的方法,比如可以在这里去做一些统计性的数据展示 > 14. showFieldSelect是否显示字段选择组件,默认为true #### 通过数据库表字段的COMMENT来控制和定制代码 当数据库表字段的Comment是以下json内容时,代码生成时会根据该json内容的定义来生成代码 ```json { "text":"密码", "desc":"密码", "search":true, "inTable":true, "autoHide":false, "maxlength": 10, "enumItems":[ { "value":"0", "text":"男" }, { "value":"1", "text":"女" } ], "relatedEntity":{ "tableName":"t_test", "valueColumn":"t_name", "textColumn":"t_user_pwd" }, "notNull":true, "edit":true, "statistic":true } ``` > 1、text:展示在表头、搜索、编辑等地方的该字段的文本 > > 2、desc:展示在导出excel的表头,以及导入导出时,字段选择的列表 > > 3、search:该字段是否作为搜索条件 > > 4、inTable:是否在界面上表格中展示 > > 5、autoHide:在手机等小屏幕设备上是否自动隐藏 > > 6、enumItems:取值枚举,设置了这个值,则在搜索和编辑模块中,该字段的录入框将以下来选择框的形式展示,并且列出这里列出的枚举值 > > - value:下拉选择项的值,也是最终提交到后台并保存的数据库的值 > - text:展示的文本,用于显示 > > 7、relatedEntity:关联的表,也就是该字段的值来源于这里设置的表里面的某条记录 > > - tableName:关联的表名 > - valueColumn:值列,用于关联的关联表的列 > - textColumn:文本列,用于展示在界面上 > > 8、notNull:是否不能为空,主要用于确定下拉列表中是否放一个空值的选项 > > 9、edit:是否需要编辑,比如添加时间,就可以在数据库设置自动写入记录创建时的时间,这里设置为false,这样界面上就不会出现添加时间的编辑 > > 10、statistic:用于标识在统计时是否参与统计 > > 11、maxlength:编辑时,输入框可输入文字的最大数量,enumItems或者relatedEntity不为空时无效 #### 通过数据库表的COMMENT来控制和定制代码 当数据库表的Comment是以下json内容时,代码生成时会根据该json内容的定义来生成代码 ```json { "text":"测试", "desc":"测试", "menuText":"测试管理", "titleText":"测试管理", "showStatistic":true, "exportExcel":false, "exportExcelStatistic":true, "importExcel":false, "detail":true, "add":false, "edit":false, "copy":false, "remove":false } ``` > 1、text:文本 > > 2、desc:描述 > > 3、menuText:用于菜单栏展示的文本 > > 4、titleText:用于展示在界面标题位置的文本 > > 5、showStatistic:界面上是否展示统计模块 > > 6、exportExcel:是否提供导出数据功能 > > 7、exportExcelStatistic:具备导出功能时,是否导出统计 > > 8、importExcel:是否提供数据导入功能 > > 9、detail:界面上数据表格是否提供查看详情功能 > > 10、add:是否提供新增记录功能 > > 11、edit:是否提供编辑功能 > > 12、copy:是否提供复制记录功能 > > 13、remove:是否提供删除记录功能 #### 一些自定义配置说明 ```yaml app: title: Alot Admin #展示在登陆界面和主页面左上角的项目名称 import-excel: max-size: 10 #单位k 数据导入时,上传的excel大小限制 file.save.dir: d:/test #上传文件的存放目录 ``` 另:统一的图片上传路径:/system/file/upload/image #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)