项目介绍 :
Spring Boot + SpringMVC + MyBatis+ Mysql + druid +HTML+CSS+JavaScrip+ Layui 开发的社区物业管理系统
运行环境:
最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
IDE环境:
Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以
内置功能
技术栈
- 数据库:MySQL 5.7.33
- 后端技术:SpringBoot 2.3.0,MyBatisPlus
- 数据连接池:Druid
- 前端技术:Layui,Ajax,Json等
- Web容器:Apache Tomcat 8
- 项目管理工具:Maven 3.6.0
- 版本控制工具:Git
- 开发工具:IDEA
管理员角色包含以下功能:
- 管理员登录
- 车位收费管理
- 物业收费管理
- 投诉信息管理
- 报修信息管理
- 楼宇管理
- 房屋管理
- 业主管理
- 车位管理
- 抄表管理
- 用户管理
- 报修统计分析
业主角色包含以下功能
- 业主登录
- 车位费查询
- 物业费查询
- 我的投诉列表
- 我的报修列表
数据库设计
预览项目
登录模块
物业收费管理
业主管理
车位管理
投诉信息管理
楼宇管理
车位收费管理
保修信息管理
保修统计分析
用户管理控制层:
/**
* <p>
* 前端控制器
* </p>
*
* @author
* @since 2020-10-28
*/
@Api(tags = {""})
@RestController
@RequestMapping("/userinfo")
public class UserinfoController {
private Logger log = LoggerFactory.getLogger(getClass());
@Resource
private IUserinfoService userinfoService;
@Resource
private IOwnerService ownerService;
@RequestMapping("/queryUserInfoAll")
public JsonObject queryUserInfoAll(@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "15") Integer limit,
Userinfo userinfo){
JsonObject object=new JsonObject();
PageInfo<Userinfo> pageInfo= userinfoService.findUserinfoAll(page,limit,userinfo);
object.setCode(0);
object.setMsg("ok");
object.setCount(pageInfo.getTotal());
object.setData(pageInfo.getList());
return object;
}
@ApiOperation(value = "删除")
@RequestMapping("/deleteByIds")
public R delete(String ids){
List<String> list= Arrays.asList(ids.split(","));
//遍历遍历进行删除
for(String id:list){
Userinfo user = userinfoService.findById(Long.parseLong(id));
ownerService.deleteOwnerUserByUserName(user.getUsername());
userinfoService.delete(Long.parseLong(id));
}
return R.ok();
}
@ApiOperation(value = "新增")
@RequestMapping("/add")
public R add(@RequestBody Userinfo userinfo){
userinfoService.add(userinfo);
return R.ok();
}
@ApiOperation(value = "更新")
@RequestMapping("/update")
public R update(String oldPwd,String newPwd,Integer id){
//根据id获取当前的数据记录
Userinfo user=userinfoService.findById(new Long(id));
if(oldPwd.equals(user.getPassword())){//输入的老密码和原密码一致
user.setPassword(newPwd);
userinfoService.updateData(user);
return R.ok();
}else{
return R.fail("两次密码不一致");
}
}
@ApiOperation(value = "查询分页数据")
@ApiImplicitParams({
@ApiImplicitParam(name = "page", value = "页码"),
@ApiImplicitParam(name = "pageCount", value = "每页条数")
})
@GetMapping()
public IPage<Userinfo> findListByPage(@RequestParam Integer page,
@RequestParam Integer pageCount){
return userinfoService.findListByPage(page, pageCount);
}
@ApiOperation(value = "id查询")
@GetMapping("{id}")
public Userinfo findById(@PathVariable Long id){
return userinfoService.findById(id);
}
}
用户信息主页
<div class="layuimini-container layuimini-page-anim">
<div class="layuimini-main layui-form">
<div class="demoTable">
用户类型:
<div class="layui-inline">
<select name="type" id="type" lay-verify="required" lay-search="">
<option value="">请选择用户类型</option>
<option value="1">管理员</option>
<option value="0">业主</option>
</select>
</div>
<button class="layui-btn" data-type="reload">搜索</button>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 添加 </button>
<button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete"> 删除 </button>
</div>
</script>
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
<script type="text/html" id="currentTableBar">
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">修改密码</a>
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
</script>
</div>
</div>
<script>
layui.use(['form', 'table','miniPage','element'], function () {
var $ = layui.jquery,
form = layui.form,
table = layui.table,
element=layui.element;
miniPage = layui.miniPage;
table.render({
elem: '#currentTableId',
url: 'userinfo/queryUserInfoAll',
toolbar: '#toolbarDemo',
defaultToolbar: ['filter', 'exports', 'print', {
title: '提示',
layEvent: 'LAYTABLE_TIPS',
icon: 'layui-icon-tips'
}],
cols: [[
{type: "checkbox", width: 50},
//{field: 'id', width: 80, title: 'ID', sort: true},
{field: 'username',width: 100, title: '用户名'},
{field: 'status', width: 80, title: '状态',
templet:function(res){
if(res.type=='1'){
return '<span class="layui-badge layui-bg-green">管理员</span>';
}else{
return '<span class="layui-badge layui-bg-orange">业主</span>';
}
}},
{title: '操作', minWidth: 150, toolbar: '#currentTableBar', align: "center"}
]],
limits: [10, 15, 20, 25, 50, 100],
limit: 15,
page: true,
id:'testReload',
skin: 'line'
});
var $ = layui.$, active = {
reload: function(){
var type = $('#type');
//执行重载
table.reload('testReload', {
page: {
curr: 1 //重新从第 1 页开始
}
,where: {
type:type.val()
}
}, 'data');
}
};
$('.demoTable .layui-btn').on('click', function(){
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
form.render('select');//让下拉框在页面上显示
/**
* toolbar事件监听
*/
table.on('toolbar(currentTableFilter)', function (obj) {
if (obj.event === 'add') { // 监听添加操作
var content = miniPage.getHrefContent('page/base/admin/add.html');
var openWH = miniPage.getOpenWidthHeight();
var index = layer.open({
title: '添加管理员',
type: 1,
shade: 0.2,
maxmin:true,
shadeClose: true,
area: [openWH[0] + 'px', openWH[1] + 'px'],
offset: [openWH[2] + 'px', openWH[3] + 'px'],
content: content,
});
$(window).on("resize", function () {
layer.full(index);
});
} else if (obj.event === 'delete') { // 监听删除操作
var checkStatus = table.checkStatus(obj.config.id)
, data = checkStatus.data;
/**
* 首先判断是否选择信息,如果没有提示
* 如果有
* 1、获取选中的id集合
* 2、通过ajax请求发送id集合,进行业务处理
*/
if(data.length==0){
layer.msg("请选要删除的记录信息");
}else{
//获取删除id的集合
var ids=getCheckId(data);
layer.confirm("确定是否删除?",function(index){
deleteByIds(ids,index);
})
}
// layer.alert(JSON.stringify(data));
}
});
/**
* 获取批量删除选中的id集合
*/
function getCheckId(data){
var arr=new Array();
for(var i=0;i<data.length;i++){
arr.push(data[i].id);
}
return arr.join(",");
};
/**
* 删除功能的实现
*/
function deleteByIds(ids,index){
$.ajax({
url:"userinfo/deleteByIds",
type:"POST",
data:{"ids":ids},
success:function(result){
if(result.code==200){
layer.msg("删除成功",{
icon:6,
time:500
},function(){
parent.window.location.reload();//重新页面
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
});
}else{
layer.msg("删除失败");
}
}
})
return false;
};
//监听表格复选框选择
table.on('checkbox(currentTableFilter)', function (obj) {
console.log(obj)
});
table.on('tool(currentTableFilter)', function (obj) {
var data = obj.data;
if (obj.event === 'edit') {
//修改密码
var content = miniPage.getHrefContent('page/base/admin/edit.html');
var openWH = miniPage.getOpenWidthHeight();
var index = layer.open({
title: '修改密码',
type: 1,
shade: 0.2,
maxmin:true,
shadeClose: true,
area: ['60%','60%'],
content: content,
});
$("#userId").val(data.id);
$(window).on("resize", function () {
layer.full(index);
});
return false;
} else if (obj.event === 'delete') {
layer.confirm('确定是否删除', function (index) {
//调用删除功能即可
deleteByIds(data.id,index);
layer.close(index);
});
}
});
});
</script>
创作不易,源码非无偿提供,需要获取源码的私信博主