• 微信小程序健康预约检查管理系统的开发与实现


    一,项目简介

          信息化技术在目前的中国,己得到普遍应用,涉及到民生的各个方面和角度,教育上的信息化应用、医疗上的信息改革、交通上的信息化普及等等,业己显示中国在向科技强国的方向前进。

        中国经济水平的提升也让中国人民的日子富裕起来了,富裕生活的开始也让老百姓的健康生活日益重视起来了,对健康知识的渴求,对健康体检的要求也越来越多。如何利用现代化技术手段,基于移动互联网技术,让老百姓更加方便快捷的获得健康知识,方便进行在线预约体检,这就是本系统要着重解决的问题。

        经过调查和走访研发的这套在线健康管理系统,采用微信小程序云开发实现,基于Mongodb数据库进行数据存储,前端使用微信小程序开发实现,后端基于Nodejs开发实现。系统前端用户主要实现查看新闻通知、体检知识、在线体检预约、查看我的预约、修改个人资料等。后台主要实现用户管理、内容管理、活动和预约管理、统计预约用户数等功能。这套系统的上线对于人们健康的管理和体检预约都有很大帮助。

    二,环境介绍

    开发工具:微信开发者工具

    开发方式:基于微信云开发实现

    数据库:Mongodb

    运行环境:NODEJ

    三,系统展示

    3.1 前端用户功能模块的展示

    3.1.1 前台首页展示

       健康管理系统的前端主要就是实现动态信息查询、体检知识学习、在线预约体检的相关功能。具体操作界面展示如下图3-1所示。

    图3-1 健康管理首页界面

    3.1.2 最新动态浏览模块

    前端用户进入健康管理系统进入动态浏览菜单即可查看管理员在后台发布的健康动态新闻信息,具体如下图3-2所示:

     图3-2 动态新闻浏览界面

    3.1.3体检知识浏览模块

        小程序健康管理系统前台用户登陆系统后可以点击首页或下面的体检知识菜单进入体检知识文章列表页面。具体展示界面如下图3-3所示。

     图3-3 体检知识列表界面

    3.1.4 体检套餐列表模块

        小程序健康管理系统前台用户登陆系统后,可以在首页点击进入体检预约模块进行在线预约。进入列表显示当前可以预约的体检套餐。相关体检展示操作界面如下图3-4所示。

     图3-4体检列表展示界面

    3.1.5在线预约体检功能模块

        小程序健康管理前台用户在预约体检的列表中选择要预约的体检套餐后进入预约界面,可以查看预约须知,然后进入预约时间选择时间段进行预约。在线预约如下图3-5、3-6、3-7所示。

     图4-5前台用户在线预约操作界面

     图4-6前台用户在线预约操作界面

        提交预约成功后,可显示预约信息并展示二维码,二维码可以供体检时管理员核销预约使用,具体展示如下:

    图3-7预约成功信息界面

    3.2后台功能模块的展示

    3.2.1用户登录功能

        小程序健康管理系统后台用户登陆后,方可授权进行相关信息的管理功能。登陆界面如下图3-11所示。

         

     图3-11后台用户登录操作界面

    3.2.2后台管理主界面

        小程序健康管理系统管理员用户登陆系统后,可以进入后台主界面管理菜单进行相应信息管理。主要包含用户管理、预约管理、内容管理、信息统计等相关功能,后台管理操作主界面如下图3-12所示:

     图3-12后台管理功能界面图

    四,核心代码展示

    1. const AdminBiz = require('../../../biz/admin_biz.js');
    2. const pageHelper = require('../../../helper/page_helper.js');
    3. Page({
    4. /**
    5. * 页面的初始数据
    6. */
    7. data: {
    8. formContent: [{
    9. type: 'text',
    10. val: '',
    11. }]
    12. },
    13. /**
    14. * 生命周期函数--监听页面加载
    15. */
    16. onLoad: async function (options) {
    17. if (!AdminBiz.isAdmin(this)) return;
    18. let parent = pageHelper.getPrevPage(2);
    19. if (!parent) return;
    20. let formContent = parent.data.formContent;
    21. if (formContent && formContent.length > 0)
    22. this.setData({
    23. formContent
    24. });
    25. },
    26. /**
    27. * 生命周期函数--监听页面初次渲染完成
    28. */
    29. onReady: function () {
    30. },
    31. /**
    32. * 生命周期函数--监听页面显示
    33. */
    34. onShow: function () {},
    35. /**
    36. * 生命周期函数--监听页面隐藏
    37. */
    38. onHide: function () {
    39. },
    40. /**
    41. * 生命周期函数--监听页面卸载
    42. */
    43. onUnload: function () {
    44. },
    45. /**
    46. * 页面相关事件处理函数--监听用户下拉动作
    47. */
    48. onPullDownRefresh: async function () {
    49. },
    50. model: function (e) {
    51. pageHelper.model(this, e);
    52. },
    53. bindSaveTap: function (e) {
    54. let parent = pageHelper.getPrevPage(2);
    55. if (!parent) return;
    56. parent.setData({
    57. formContent: this.data.formContent
    58. });
    59. },
    60. url: function (e) {
    61. pageHelper.url(e, this);
    62. },
    63. bindSaveTap: function (e) {
    64. let formContent = this.selectComponent("#contentEditor").getNodeList();
    65. let parent = pageHelper.getPrevPage(2);
    66. if (!parent) return;
    67. parent.setData({
    68. formContent
    69. }, () => {
    70. parent._setContentDesc();
    71. });
    72. wx.navigateBack({
    73. delta: 0,
    74. });
    75. }
    76. })

    1. const AdminBiz = require('../../../../biz/admin_biz.js');
    2. const pageHelper = require('../../../../helper/page_helper.js');
    3. const PassportBiz = require('../../../../biz/passport_biz.js');
    4. Page({
    5. /**
    6. * 页面的初始数据
    7. */
    8. data: {
    9. name: '',
    10. pwd: '',
    11. },
    12. /**
    13. * 生命周期函数--监听页面加载
    14. */
    15. onLoad: function (options) {
    16. AdminBiz.clearAdminToken();
    17. },
    18. /**
    19. * 生命周期函数--监听页面初次渲染完成
    20. */
    21. onReady: function () {
    22. },
    23. /**
    24. * 生命周期函数--监听页面显示
    25. */
    26. onShow: function () {},
    27. /**
    28. * 生命周期函数--监听页面隐藏
    29. */
    30. onHide: function () {
    31. },
    32. /**
    33. * 生命周期函数--监听页面卸载
    34. */
    35. onUnload: function () {
    36. },
    37. url: function (e) {
    38. pageHelper.url(e, this);
    39. },
    40. bindBackTap: function (e) {
    41. wx.reLaunch({
    42. url: pageHelper.fmtURLByPID('/pages/my/index/my_index'),
    43. });
    44. },
    45. bindLoginTap: async function (e) {
    46. return PassportBiz.adminLogin(this.data.name, this.data.pwd, this);
    47. }
    48. })
    1. const AdminBiz = require('../../../../biz/admin_biz.js');
    2. const pageHelper = require('../../../../helper/page_helper.js');
    3. const cloudHelper = require('../../../../helper/cloud_helper.js');
    4. Page({
    5. /**
    6. * 页面的初始数据
    7. */
    8. data: {},
    9. /**
    10. * 生命周期函数--监听页面加载
    11. */
    12. onLoad: async function (options) {
    13. if (!AdminBiz.isAdmin(this)) return;
    14. this._loadDetail();
    15. },
    16. /**
    17. * 页面相关事件处理函数--监听用户下拉动作
    18. */
    19. onPullDownRefresh: async function () {
    20. await this._loadDetail();
    21. wx.stopPullDownRefresh();
    22. },
    23. _loadDetail: async function () {
    24. let admin = AdminBiz.getAdminToken();
    25. this.setData({
    26. isLoad: true,
    27. admin
    28. });
    29. try {
    30. let opts = {
    31. title: 'bar'
    32. }
    33. let res = await cloudHelper.callCloudData('admin/home', {}, opts);
    34. this.setData({
    35. data: res
    36. });
    37. } catch (err) {
    38. console.log(err);
    39. }
    40. },
    41. /**
    42. * 生命周期函数--监听页面初次渲染完成
    43. */
    44. onReady: function () {
    45. },
    46. /**
    47. * 生命周期函数--监听页面显示
    48. */
    49. onShow: function () {
    50. },
    51. /**
    52. * 生命周期函数--监听页面隐藏
    53. */
    54. onHide: function () {
    55. },
    56. /**
    57. * 生命周期函数--监听页面卸载
    58. */
    59. onUnload: function () {
    60. },
    61. url: function (e) {
    62. pageHelper.url(e, this);
    63. },
    64. bindExitTap: function (e) {
    65. let callback = function () {
    66. AdminBiz.clearAdminToken();
    67. wx.reLaunch({
    68. url: pageHelper.fmtURLByPID('/pages/my/index/my_index'),
    69. });
    70. }
    71. pageHelper.showConfirm('您确认退出?', callback);
    72. },
    73. bindSettingTap: function (e) {
    74. let itemList = ['清除数据缓存'];
    75. wx.showActionSheet({
    76. itemList,
    77. success: async res => {
    78. switch (res.tapIndex) {
    79. case 0: { //清除缓存
    80. await this._clearCache();
    81. break;
    82. }
    83. }
    84. },
    85. fail: function (res) {}
    86. })
    87. },
    88. _clearCache: async function () {
    89. try {
    90. let opts = {
    91. title: '数据缓存清除中'
    92. }
    93. await cloudHelper.callCloudSumbit('admin/clear_cache', {}, opts).then(res => {
    94. pageHelper.showSuccToast('清除成功');
    95. });
    96. } catch (err) {
    97. console.error(err);
    98. }
    99. }
    100. })

    五,项目总结

           基于微信小程序开发实现这套健康管理系统,经过调研分析,得出需要两类用户角色,一类是系统的前端用户,一类是后端管理员用户。前端用户主要的需求是通过此平台获得最新的健康相关的知识推送,获得目前最新的健康相关的新闻动态,进行在线体检预约的操作等。后台管理员用户主要实现相关数据的的管理功能,一是实现新闻动态的管理操作,二是实现预约信息的发布管理,三是实现注册用户的信息管理功能,四是进行在线信息的查看统计等功能。

        经过对微信小程序健康管理系统的需求分析,总结出了系统各类用户角色需要的功能模块,进行了基本的功能模块设计,具体的各角色相关的功能模块如下图所示。

       前端用户可以通过分享的二维码扫描登陆系统,此时经过用户授权后会自动使用用户的微信账户注册登陆小程序。登陆小程序健康管理系统后可以进行如下功能操作:

    1. 个人资料维护:可以修改个人的相关资料信息,填写姓名、手机号、城市等相关信息。
    2. 动态浏览:可以浏览后台发布的健康新闻动态信息
    3. 体检知识浏览:可以浏览后台发布的体检知识和健康知识信息。
    4. 体检预约:可以根据自己的需要预约后台发布的体检,首先查询可预约的时间段,然后预约指定的时间去进行体检。
    5. 我的预约:可以查看自己的预约信息和记录,并可以进行取消操作,预约会生成预约码,去体检时可以根据预约码进行核销。

        后台用户登陆后可以进行健康管理系统的业务数据管理操作,主要可以进行的功能操作如下:

        1、用户管理:可以管理前端注册的小程序用户信息,进行相应的数据查看和导出操作。

        2、内容管理:在内容管理查获块,主要进行动态新闻和体检知识的发布、编辑、修改状态、预览和上首页的操作,上首页的功能类似于置顶操作。

        3、预约管理:可以发布新的预约信息,并可以对己发布的预约信息进行修改和状态的设置,同时可以查看前端小程序用户的预约信息,并可以进行预约核销操作。

        4、管理员操作日志:主要查看管理员的操作日志信息。

        5、信息统计管理:主要统计并查看预约数、用户数、文章数等相关信息。

  • 相关阅读:
    Qt 布局(QSplitter 类&QDockWidget 类) 总结
    表结构及索引设计
    Vue生命周期
    Linux 将 /home 目录与 / 根目录磁盘合并
    ChatGLM-6B的私有化部署
    Mysql--基础概念
    【C++】之类和对象 - 运算符重载
    javascript anchor()方法
    第一章 绪论
    Codeforces Round 901 (Div. 2)
  • 原文地址:https://blog.csdn.net/BS009/article/details/124969452