Java项目:养老院管理系统(java+Springboot+Maven+mybatis+Vue+ Element UI+mysql)

项目介绍 :

Spring Boot + SpringMVC + MyBatis+ Mysql + druid + Vue 开发的前后端分离的社区养老院管理系统

运行环境:

最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。

IDE环境:

Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以

适用于:

由于本程序规模不大,可供课程设计,毕业设计学习演示之用

内置功能

管理员角色包含以下功能:

  1. 管理员登录
  2. 用户管理
  3. 床位类型管理
  4. 床位管理
  5. 护工管理
  6. 老人管理
  7. 预约登记管理
  8. 来访登记管理
  9. 健康记录管理
  10. 费用管理
  11. 外出记录管理

护工角色包含以下功能

  1. 护工登录
  2. 床位类型查看
  3. 床位查看
  4. 护工查看
  5. 老人查看
  6. 健康信息上报管理
  7. 费用查看等功能
项目预览

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
用户管理控制层:

package com.laowangjava.nursinghome.controller;

import com.github.pagehelper.PageInfo;
import com.laowangjava.nursinghome.entity.User;
import com.laowangjava.nursinghome.service.UserService;
import com.laowangjava.nursinghome.util.request.PageRequest;
import com.laowangjava.nursinghome.util.response.Result;
import com.laowangjava.nursinghome.util.response.ResultTable;


import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;

/**
 * 用户表(User)表控制层
 *
 * @author 老王
 * @since 2022-03-21 16:02:42
 */
@RestController
@RequestMapping("admin/user")
public class UserController extends ResultController {


    /**
     * 服务对象
     */
    @Resource
    private UserService userService;


    /**
     * 查询User列表
     *
     * @param user        筛选条件
     * @param pageRequest 分页对象
     * @return 查询结果
     */
    @GetMapping("/data")
    public ResultTable list(User user, PageRequest pageRequest) {
        PageInfo<User> pageInfo = userService.selectUserPage(user, pageRequest);

        return pageTable(pageInfo.getList(), pageInfo.getTotal());
    }


    /**
     * 新增保存User
     */

    @PostMapping("/save")
    public Result save(@RequestBody User user) {
        User dbUser = userService.selectUserByAccountName(user.getAccountName());
        if (dbUser != null) {
            return failure("添加失败,账号已存在,请重新输入!");
        }
        int result = userService.insertUser(user);
        return decide(result);
    }

    /**
     * 获取要修改User信息
     */
    @GetMapping("/getUser")
    public Result getUser(Integer userId) {
        User user = userService.selectUserById(userId);
        return successData(user);
    }

    /**
     * 修改保存User
     */
    @PutMapping("/update")
    public Result update(@RequestBody User user) {
        User dbUser = userService.selectUserByAccountName(user.getAccountName());
        if (dbUser != null && !dbUser.getUserId().equals(user.getUserId())) {
            return failure("修改失败,账号已存在,请重新输入!");
        }
        int result = userService.updateUser(user);
        return decide(result);
    }

    /**
     * 批量删除User
     */
    @DeleteMapping("/batchRemove/{ids}")
    public Result batchRemove(@PathVariable Integer[] ids) {
        return decide(userService.deleteUserByIds(ids));
    }


}


用户信息主页

<template>
  <div class="app-container">
    <div class="filter-container">
      <!--搜索条件-->
      <el-form ref="queryForm" :model="queryParams" :inline="true" size="small" label-width="68px">
        <el-form-item label="用户名称" prop="accountName">
          <el-input v-model="queryParams.accountName" size="small" placeholder="请输入用户名称" clearable @keyup.enter.native="handleQuery" />
        </el-form-item>
        <el-form-item label="姓名" prop="userName">
          <el-input v-model="queryParams.userName" size="small" placeholder="请输入用户名称" clearable @keyup.enter.native="handleQuery" />
        </el-form-item>

        <el-button class="filter-item" type="primary" size="small" icon="el-icon-search" @click="handleQuery">
          搜索
        </el-button>
        <el-button icon="el-icon-refresh" size="small" @click="resetQuery">重置</el-button>
      </el-form>

      <el-row :gutter="10" class="mb8">
        <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-plus" plain size="small" @click="handleCreate">
          新增
        </el-button>
        <el-button class="filter-item" style="margin-left: 10px;" type="danger" icon="el-icon-delete" plain size="small" @click="handleDelete">
          批量删除
        </el-button>
      </el-row>

    </div>
    <!-- 用户列表-->
    <el-table :key="tableKey" v-loading="listLoading" :data="list" style="width: 100%; margin-top: 10px" @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="50" align="center" />
      <el-table-column label="编号" prop="userId" align="center" width="80">
        <template slot-scope="{row}">
          <span>{{ row.userId }}</span>
        </template>
      </el-table-column>
      <el-table-column label="用户名" width="150px" align="center">
        <template slot-scope="{row}">
          <span>{{ row.accountName }}</span>
        </template>
      </el-table-column>
      <el-table-column label="姓名" width="150px" align="center">
        <template slot-scope="{row}">
          <span>{{ row.userName }}</span>
        </template>
      </el-table-column>
      <el-table-column label="出生日期" width="150px" align="center">
        <template slot-scope="{row}">
          <span>{{ row.birthdate }}</span>
        </template>
      </el-table-column>
      <el-table-column label="性别" width="150px" align="center">
        <template slot-scope="{row}">
          <span>{{ row.sex === 1 ? "女" : "男" }}</span>
        </template>
      </el-table-column>
      <el-table-column label="联系方式" width="110px" align="center">
        <template slot-scope="{row}">
          <span>{{ row.phone }}</span>
        </template>
      </el-table-column>
      <el-table-column label="角色类型" width="150px" align="center">
        <template slot-scope="{row}">
          <span>{{ row.roleType === 1 ? "护工" : "管理员" }}</span>
        </template>
      </el-table-column>

      <el-table-column label="操作" align="center" width="230" class-name="small-padding fixed-width">
        <template slot-scope="{row,$index}">
          <el-button type="primary" size="mini" @click="handleUpdate(row)">
            编辑
          </el-button>
          <el-button v-if="row.status!='deleted'" size="mini" type="danger" @click="handleDelete(row)">
            删除
          </el-button>
        </template>
      </el-table-column>
    </el-table>

    <!-- 分页插件-->
    <pagination v-show="total>0" :total="total" :page.sync="queryParams.page" :limit.sync="queryParams.limit" @pagination="getList" />

    <!-- 添加或修改用户配置对话框 -->
    <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
      <el-form ref="form" :rules="rules" :model="form" label-width="80px" size="small">
        <el-row>
          <el-col :span="12">
            <el-form-item label="用户名" prop="accountName">
              <el-input v-model="form.accountName" placeholder="请输入用户名" maxlength="20" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item v-if="form.password == undefined" label="用户密码" prop="password">
              <el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="60" show-password />
            </el-form-item>
          </el-col>
        </el-row>

        <el-row>
          <el-col :span="12">
            <el-form-item label="姓名" prop="userName">
              <el-input v-model="form.userName" placeholder="请输入姓名" maxlength="20" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="出生日期" prop="birthdate">
              <el-date-picker v-model="form.birthdate" value-format="yyyy-MM-dd" type="date" placeholder="请输入出生日期" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="性别">
              <el-radio-group v-model="form.sex">
                <el-radio v-for="item in sexArr" :key="item.value" :label="item.value">{{ item.key }}
                </el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="电话" prop="phone">
              <el-input v-model="form.phone" placeholder="请输入电话" />
            </el-form-item>
          </el-col>
        </el-row>

        <el-row>
          <el-col :span="12">
            <el-form-item label="qq" prop="qq">
              <el-input v-model="form.qq" placeholder="请输入qq" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="微信" prop="weChat">
              <el-input v-model="form.weChat" placeholder="请输入微信" />
            </el-form-item>
          </el-col>
        </el-row>

        <el-row>
          <el-col :span="12">
            <el-form-item label="籍贯" prop="nativePlace">
              <el-input v-model="form.nativePlace" placeholder="请输入籍贯" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="家庭住址" prop="homeAddress">
              <el-input v-model="form.homeAddress" placeholder="请输入家庭住址" />
            </el-form-item>
          </el-col>
        </el-row>

        <el-form-item label="身份类型">
          <el-radio-group v-model="form.roleType">
            <el-radio v-for="item in roleTypeArr" :key="item.value" :label="item.value">{{ item.key }}
            </el-radio>
          </el-radio-group>
        </el-form-item>

        <el-form-item label="备注">
          <el-input v-model="form.remark" :autosize="{ minRows: 2, maxRows: 4}" type="textarea" placeholder="请输入备注" />
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" size="small" @click="submitForm">
          确认
        </el-button>
        <el-button size="small" @click="cancel">
          取消
        </el-button>

      </div>
    </el-dialog>

    <el-dialog :visible.sync="dialogPvVisible" title="Reading statistics">
      <el-table :data="pvData" border fit highlight-current-row style="width: 100%">
        <el-table-column prop="key" label="Channel" />
        <el-table-column prop="pv" label="Pv" />
      </el-table>
      <span slot="footer" class="dialog-footer">
        <el-button type="primary" @click="dialogPvVisible = false">Confirm</el-button>
      </span>
    </el-dialog>
  </div>
</template>

<script>
import { userList, createUser, getUser, updateUser, deletUser } from '@/api/user';

export default {
    name: 'User',
    components: {},
    data() {
        return {
            tableKey: 0,
            // 用户表格数据
            list: null,
            // 总条数
            total: 0,
            // 选中数组
            ids: [],
            // 遮罩层
            listLoading: true,
            // 查询参数
            queryParams: {
                page: 1,
                limit: 10,
                accountName: undefined,
                userName: undefined
            },
            sexArr: [{ key: '男', value: 0 }, { key: '女', value: 1 }],
            roleTypeArr: [{ key: '管理员', value: 0 }, { key: '护工', value: 1 }],
            form: {
                id: undefined,
                accountName: undefined,
                password: undefined,
                userName: undefined,
                birthdate: new Date(),
                sex: 1,
                phone: undefined,
                qq: undefined,
                weChat: undefined,
                nativePlace: undefined,
                homeAddress: undefined,
                roleType: 1,
                remark: undefined
            },
            // 是否显示弹出层
            open: false,
            // 弹出层标题
            title: '',
            dialogPvVisible: false,
            pvData: [],
            rules: {
                accountName: [
                    { required: true, message: '用户名不能为空', trigger: 'blur' },
                    { min: 2, max: 20, message: '用户名称长度必须介于 220 之间', trigger: 'blur' }
                ],
                password: [{ required: true, message: '密码不能为空', trigger: 'blur' }],
                userName: [
                    { required: true, message: '姓名不能为空', trigger: 'blur' },
                    { min: 2, max: 20, message: '用户名称长度必须介于 220 之间', trigger: 'blur' }
                ],
                birthdate: [{ required: true, message: '出生日期不能为空', trigger: 'blur' }],

                phone: [
                    {
                        pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
                        message: '请输入正确的手机号码',
                        trigger: 'blur'
                    }
                ]
            },
            downloadLoading: false
        };
    },
    created() {
        this.getList();
    },
    methods: {
        /** 查询用户列表 */
        getList() {
            this.listLoading = true;
            userList(this.queryParams).then(response => {
                this.list = response.data;
                this.total = response.count;

                // Just to simulate the time of the request
                setTimeout(() => {
                    this.listLoading = false;
                }, 0.1 * 1000);
            });
        },
        /** 重置按钮操作 */
        resetQuery() {
            this.resetForm('queryForm');
            this.handleQuery();
        },
        /** 搜索按钮操作 */
        handleQuery() {
            this.queryParams.page = 1;
            this.getList();
        },
        /** 表单重置 */
        reset() {
            this.form = {
                id: undefined,
                accountName: undefined,
                password: undefined,
                userName: undefined,
                birthdate: new Date(),
                sex: 1,
                phone: undefined,
                qq: undefined,
                weChat: undefined,
                nativePlace: undefined,
                homeAddress: undefined,
                roleType: 1,
                remark: undefined
            };
            this.resetForm('form');
        },
        /** 新增按钮操作 */
        handleCreate() {
            this.reset();
            this.open = true;
            this.title = '添加用户';
        },
        /** 修改按钮操作 */
        handleUpdate(row) {
            // 重置
            this.reset();
            // 获取用户id
            const userId = row.userId;
            getUser(userId).then(response => {
                this.form = response.data;
                this.open = true;
                this.title = '修改用户';
                this.form.password = '';
            });
        },
        /** 取消按钮操作 */
        cancel() {
            this.open = false;
            this.reset();
        },
        /** 多选框选中数据 */
        handleSelectionChange(selection) {
            this.ids = selection.map(item => item.userId);
        },
        /** 提交按钮 */
        submitForm: function () {
            this.$refs['form'].validate(valid => {
                if (valid) {
                    if (this.form.userId != undefined) {
                        updateUser(this.form).then(response => {
                            if (response.success) {
                                this.$modal.msgSuccess(response.msg);
                                this.open = false;
                                this.getList();
                            } else {
                                this.$modal.msgError(response.msg);
                            }
                        });
                    } else {
                        createUser(this.form).then(response => {
                            if (response.success) {
                                this.$modal.msgSuccess(response.msg);
                                this.open = false;
                                this.getList();
                            } else {
                                this.$modal.msgError(response.msg);
                            }
                        });
                    }
                }
            });
        },

        /** 删除按钮操作 */
        handleDelete(row) {
            const userIds = row.userId || this.ids;
            this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function () {
                return deletUser(userIds);
            }).then(() => {
                this.getList();
                this.$modal.msgSuccess('删除成功');
            }).catch(() => {
            });
        }
    }
};
</script>

创作不易,源码非无偿提供,需要获取源码的私信博主

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: Java是一种编程语言,Vue是一种前端框架,Spring Boot是一种后端框架,Maven是一种构建工具,MyBatis是一种ORM框架,MySQL是一种关系型数据库。这些技术可以一起使用来开发Web应用程序。 ### 回答2: JavaVueSpringBootMavenMyBatisMySQL 是现代软件开发中常见的工具和技术。Java 是一门强大的编程语言,非常适合构建企业级应用程序。Vue 是一种现代的 JavaScript 框架,用于构建可交互的单页应用程序。SpringBoot 是一种基于 Spring 框架的服务端开发解决方案,可用于构建 RESTful Web 服务或基于微服务体系结构的应用程序。Maven 是一个构建工具,可用于自动化构建和管理软件项目的依赖项。MyBatis 是一个数据持久化框架,可以方便地将 Java 应用程序连接到各种关系型数据库中。MySQL 是一个流行的、开源的关系型数据库管理系统,是许多 Web 应用程序的默认选择。 在软件开发中,JavaVueSpringBootMavenMyBatisMySQL 可以相互配合使用,以构建跨平台、云端部署、高效稳定的应用程序。JavaSpringBoot 可用于构建 Web 服务和 RESTful API,而 VueSpringBoot 可用于构建面向用户的 Web 应用程序。Maven 可用于管理项目依赖项和自动化构建过程,而 MyBatis 可以方便地将数据从数据库中提取并转换为对象。MySQL 可用于存储应用程序生成的数据。 总之,在软件开发中,选择适合您团队和项目需求的工具和技术非常重要。JavaVueSpringBootMavenMyBatisMySQL 已经得到了广泛的应用和实践验证,并且可以帮助您轻松地构建高效、可靠和安全的应用程序。 ### 回答3: Java是一种面向对象的高级编程语言,被广泛使用于开发各种应用程序,从桌面应用程序到企业级应用程序。它具有强大的编程能力、跨平台兼容性和开源社区的支持。Java中有很多库、框架和工具,可以简化编程任务并提高应用程序的性能和稳定性。 Vue是一个流行的JavaScript前端框架,用于构建用户界面。它被设计为轻量级、高效和灵活,可以用来建立单页应用程序和大型复杂应用程序。Vue提供了许多有用的工具和组件,可以帮助开发人员快速建立优秀的用户界面。 Spring Boot是一个基于Spring框架的轻量级应用程序开发框架,目的是简化企业级应用程序的开发过程。Spring Boot具有自动配置、快速启动、简单的部署和许多其他特性,可以快速构建高性能应用程序。它还具有用于构建RESTful API和微服务的功能。 Maven是一个强大的项目管理和构建工具,用于构建Java应用程序。Maven可以帮助开发人员自动化项目构建过程,并可以帮助组织项目结构和管理库依赖。Maven具有许多插件和工具,可以帮助开发人员编译、测试和打包应用程序。 MyBatis是一个流行的Java持久层框架,用于简化与关系型数据库的交互。它使用SQL映射文件将Java对象映射到数据库表中,提供了一种简单而强大的方式来处理数据库操作。MyBatis还提供了许多有用的特性,如动态SQL、事务管理和缓存。 MySQL是一个开源的关系型数据库管理系统,被广泛使用于Web应用程序和企业级应用程序。MySQL具有可靠的性能、高度可扩展性和广泛的API支持,可以处理大型数据集和高并发访问。它还拥有丰富的特性和工具,支持多种编程语言和操作系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java水泥工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值