uniapp开发项目|基于uniapp实现社区老年人健康医疗信息服务系统

作者主页:编程指南针

作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助

收藏点赞不迷路  关注作者有好处

文末获取源码 

项目编号:BS-XCX-023

一,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后端开发技术:springboot+mybatis-plus

前端开发技术:uniapp开发+微信小程序+Vue

二,项目简介

本课题主要设计关于社区老年人健康医疗信息服务平台,实现对社区老人的健康和医疗信息的整合,为社区养老提供更好的服务。中国目前已经进入人口老龄化的阶段,60岁以上老人人口占比高达18%以上,随着家庭子女的减少,社区养老会逐渐演变成日后养老的主流趋势。而对于老人来讲,个人身心健康的发展以及医疗职障的实行是养老中的关键。基于这样一种大背景,本次开发设计了针对社区老人使用的健康医疗信息服务平台,对解决社区老人的健康和医疗的需求,有一定的帮助。

对于本次设计的社区老年人健康医疗信息服务平台来讲,主要是通过软件开发技术来开发和实现一个基于微信小程序形式的老人健康和医疗服务系统,使得社区的老年人用户可以通过手机微信小程序进行注册登录,完成在线健康体检预约、体检结果的档案查询,完成在线就诊预约、个人病历信息的查询,可以在线查询健康养生的相关知识信息,实现在线咨询,在线预约志工的功能。同时为平台运营人员提供了后台数据服务和管理的基本功能,实现对人员和健康医疗信息的数据管理。

本次系统的的开发设计要技术上主要运用JAVA后台开发技术和微信小程序前端开发技术共同开发实现,采用前后端分离的方式来开发实现。系统提供了供前端老人用户使用的前端操作界面,以及提供后台管理员使用的后台管理界面,后台服务接口采用SpringBoot框架技术开发实现,同时集成Mybatis-plus 持久层框架完成数据持久化,业务数据存储采用MYSQL5.7进行数据存储,后台管理的前端页面使用Vue框架和ElementUI组件布局,基于Nodejs运行。系统功能完整,界面简洁大方,适合老年人使用。

社区老年人健康医疗信息服务平台的功能性分析,主要首先分析系统的使用用户角色,再根据每个用户角色的需要,来分析出其需要的功能性模块要求,在这个基础上来进行相关性的功能设计,才能符合各类不同角色的功能需要。社区老年人健康医疗信息服务平台的用户经过分析主要有两类用户,一类是前端用户,主要是在实现在线信息的查看、健康和医疗的在线预约、志工预约上门服务等;另一类是后台管理用户,主要是实现管理系统平的基本信息,像用户的信息管理、健康档案的信息管理、医疗预约的信息管理、健康相关知识的管理等。

概要设计部分主要是展示一下本系统的基本抽象设计,通过展示系统功能模块设计和数据库概念模型 ,来展示一下系统需求分析的结果,简单来讲,概要设计就是对用户需求分析一个抽象层面的体现。

本课题是社区老年人健康医疗信息服务平台,通过走访大量的社区工作人员,阅读大量文献并参考同类的信息平台,来分析系统的基本功能性需求。经过分析确定系统的用户主要分为前端使用用户和后台管理用户两类,前端用户的主要功能包含有:用户在线注册与登录、在线预约体检、就诊预约、公告信息的查看、养生信息的浏览查看以及个人中心管理。后台管理用户的主要功能包含有:用户信息管理模块、个人信息管理模块、业务数据信息管理、养生知识信息管理、数据统计信息等。

社区老年人健康医疗信息服务平台具体的系统功能结构图如下图

三,系统展示

小程序端用户注册登录

 

健康养生列表

 

 

 在线体检预约

 就诊预约

志工预约

 

个人中心

 

 后台管理用户登录

用户管理

数据统计

 

 平台公告管理

轮播图管理

 

 咨询管理

其它功能展示略 

四,核心代码展示

package com.project.demo.controller.base;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.project.demo.service.base.BaseService;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import javax.persistence.Query;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 */
@Slf4j
public class BaseController<E, S extends BaseService<E>> {

    @Setter
    protected S service;


    @PostMapping("/add")
    @Transactional
    public Map<String, Object> add(HttpServletRequest request) throws IOException {
        service.insert(service.readBody(request.getReader()));
        return success(1);
    }

    @Transactional
    public Map<String, Object> addMap(Map<String,Object> map){
        service.insert(map);
        return success(1);
    }

    @PostMapping("/set")
	@Transactional
    public Map<String, Object> set(HttpServletRequest request) throws IOException {
        service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));
        return success(1);
    }


    @RequestMapping(value = "/del")
    @Transactional
    public Map<String, Object> del(HttpServletRequest request) {
        service.delete(service.readQuery(request), service.readConfig(request));
        return success(1);
    }

    @RequestMapping("/get_obj")
    public Map<String, Object> obj(HttpServletRequest request) {
        Query select = service.select(service.readQuery(request), service.readConfig(request));
        List resultList = select.getResultList();
        if (resultList.size() > 0) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("obj",resultList.get(0));
            return success(jsonObject);
        } else {
            return success(null);
        }
    }


    @RequestMapping("/get_list")
    public Map<String, Object> getList(HttpServletRequest request) {
        Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
        return success(map);
    }

    @RequestMapping("/list_group")
    public Map<String, Object> listGroup(HttpServletRequest request) {
        List<Map<String,Object>> list = service.selectToList(service.readQuery(request), service.readConfig(request));
        Map<String,Object> map = new HashMap<>();
        map.put("list",list);
        Map<String,Object> result = new HashMap<>();
        result.put("result",map);
        return result;
    }

    @RequestMapping("/bar_group")
    public Map<String, Object> barGroup(HttpServletRequest request) {
        Map<String, Object> map = service.selectBarGroup(service.readQuery(request), service.readConfig(request));
        return success(map);
    }

    @RequestMapping(value = {"/count_group", "/count"})
    public Map<String, Object> count(HttpServletRequest request) {
        Query count = service.count(service.readQuery(request), service.readConfig(request));
        return success(count.getResultList());
    }

    @RequestMapping(value = {"/sum_group", "/sum"})
    public Map<String, Object> sum(HttpServletRequest request) {
        Query count = service.sum(service.readQuery(request), service.readConfig(request));
        return success(count.getResultList());
    }

    @RequestMapping(value = {"/avg_group", "/avg"})
	public Map<String, Object> avg(HttpServletRequest request) {
        Query count = service.avg(service.readQuery(request), service.readConfig(request));
        return success(count.getResultList());
    }


    @PostMapping("/upload")
    public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {
        log.info("进入方法");
        if (file.isEmpty()) {
            return error(30000, "没有选择文件");
        }
        try {
            //判断有没路径,没有则创建
            String filePath = System.getProperty("user.dir") + "/src/main/resources/static/";
            File targetDir = new File(filePath);
            if (!targetDir.exists() && !targetDir.isDirectory()) {
                if (targetDir.mkdirs()) {
                    log.info("创建目录成功");
                } else {
                    log.error("创建目录失败");
                }
            }
//            String path = ResourceUtils.getURL("classpath:").getPath() + "static/upload/";
//            String filePath = path.replace('/', '\\').substring(1, path.length());
            String fileName = file.getOriginalFilename();
            File dest = new File(filePath + fileName);
            log.info("文件路径:{}", dest.getPath());
            log.info("文件名:{}", dest.getName());
            file.transferTo(dest);
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("url", "/api/upload/" + fileName);
            return success(jsonObject);
        } catch (IOException e) {
            log.info("上传失败:{}", e.getMessage());
        }
        return error(30000, "上传失败");
    }

    public Map<String, Object> success(Object o) {
        Map<String, Object> map = new HashMap<>();
        if (o == null) {
            map.put("result", null);
            return map;
        }
        if (o instanceof List) {
            if (((List) o).size() == 1) {
               o =  ((List) o).get(0);
                map.put("result", o);
            }else {
                String jsonString = JSONObject.toJSONString(o);
                JSONArray objects = service.covertArray(JSONObject.parseArray(jsonString));
                map.put("result", objects);
            }
        } else if (o instanceof Integer || o instanceof String) {
            map.put("result", o);
        } else {
            String jsonString = JSONObject.toJSONString(o);
            JSONObject jsonObject = JSONObject.parseObject(jsonString);
            JSONObject j = service.covertObject(jsonObject);
            map.put("result", j);
        }
        return map;
    }

    public Map<String, Object> error(Integer code, String message) {
        Map<String, Object> map = new HashMap<>();
        map.put("error", new HashMap<String, Object>(4) {
   
   {
            put("code", code);
            put("message", message);
        }});
        return map;
    }
}

<template>
  <view class="page_article" id="article_list">
    <template v-if="$check_action('/article/list', 'get')">
      <!-- 搜索栏 -->
      <uni-search-bar
        placeholder="搜索文章"
        @confirm="search"
        @cancel="cancel"
        cancelText="取消"
        @input="input($event, 'title')"
      >
        <uni-icons slot="searchIcon" color="#999999" size="18" type="home" />
      </uni-search-bar>
	  <view style="padding: 10px;">
      <uni-data-select
        @change="searchType"
        v-model="query.type"
        :localdata="types"
      ></uni-data-select>
	  </view>
      <!-- 文章列表 -->
      <list_article
        style="background-color: #fff"
        :list="list"
        class="mb"
      ></list_article>
      <!-- /文章列表 -->
      <uni-pagination
        style="padding: 10px"
        title="分页器"
        show-icon="true"
        :total="count"
        :pageSize="query.size"
        :current="query.page"
        @change="page_change"
      ></uni-pagination>
    </template>
  </view>
</template>

<script>
import list_article from "@/components/diy/list_article.vue";
import bar_orderby from "@/components/diy/bar_orderby.vue";
import list_tab from "@/components/diy/list_tab.vue";
import mixin from "@/libs/mixins/page.js";

export default {
  mixins: [mixin],
  components: {
    list_article,
    bar_orderby,
    list_tab,
  },
  data() {
    return {
      url_get_list: "~/api/article/get_list?like=0",
      list: [],
      query: {
        title: "",
        page: 1,
        size: 4,
        type: "",
      },
      list_orderby: [
        {
          name: "点击量",
          direction: "",
          command_asc: "`hits` asc",
          command_desc: "`hits` desc",
        },
        {
          name: "日期",
          direction: "",
          command_asc: "`create_time` asc",
          command_desc: "`create_time` desc",
        },
      ],
      // 分类
      types: [{
        value: "",
        text: "全部"
      }],
    };
  },
  methods: {
    /**
     * 添加文章过滤
     */
    get_article_type() {
      this.$get(
        "~/api/article_type/get_list",
        {
          page: 1,
          size: 0,
        },
        (res) => {
          if (res.result) {
            let list = res.result.list;
            list.map((obj) => {
              this.types.push({
                value: obj.name,
                text: obj.name
              });
            });
            console.log(this.types);
          }
        }
      );
    },

    /**
     * 下拉商品筛选选择
     */
    filter_item(name) {
      if (name.name == "全部") {
        this.query = {
          page: 1,
          size: 4,
        };
        this.get_list();
      } else {
        this.query.type = name.name;
        this.search();
      }
    },
    input(e, key) {
      this.query[key] = e.value;
    },
    search() {
      this.query.page = 1;
      this.get_list();
    },
    searchType(v){
      this.query.type = v;
      this.query.page = 1;
      this.get_list();
    },
    cancel() {
      console.log("eer");
      this.query.title = "";
      this.search();
    },
    // 控制排序
    handleOrderby(o) {
      // console.log(o);
      // 取出对应的orderby

      // 重置其他排序的direction
      this.list_orderby.map((val) => {
        if (val.name !== o.text) {
          return (val.direction = "");
        }
      });

      // 找到对应的排序项,发送排序请求
      var obj_orderby = this.list_orderby.find((val) => val.name === o.text);
      if (o.direction === "") {
        this.query.orderby = "";
        this.search();
      } else if (o.direction === "up") {
        this.query.orderby = obj_orderby.command_desc;
        this.search();
      } else if (o.direction === "down") {
        this.query.orderby = obj_orderby.command_asc;
        this.search();
      }
    },
  },
  mounted() {
    this.get_article_type();
  },
};
</script>

<style scoped>
#article_list {
}

#article_list .pager {
  margin-top: 1rem;
}

#article_list .list_orderby {
  display: flex;
  justify-content: flex-end;
  background-color: #ffffff;
  border-top: 5px double #ccc;
  border-bottom: 5px double #ccc;
  margin-right: -1px;
}

#article_list .list_orderby .bar_orderby {
  border-left: 1px solid #ccc;
}
#article_list .warp_article {
  background-color: #fff;
}

#article_list .tab_view {
  background-color: #ffffff;
  margin: 0 auto;
}

#article_list .dropdown_article {
  line-height: 40px;
}
.article_page_down {
  padding-bottom: 60px;
}
</style>

五,相关作品展示

基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目

基于Nodejs、Vue等前端技术开发的前端实战项目

基于微信小程序和安卓APP应用开发的相关作品

基于51单片机等嵌入式物联网开发应用

基于各类算法实现的AI智能应用

基于大数据实现的各类数据管理和推荐系统

 

 

猜你喜欢

转载自blog.csdn.net/whirlwind526/article/details/131414256