出售本站【域名】【外链】

首页 AI人工智能软件 qqAI人工智能 微信AI人工智能 抖音AI人工智能 快手AI人工智能 云控系统 手机AI人工智能

毕业设计:微信小程序健康管理系统的开发与实现

2023-03-03

名目编号:BS-XCX-006

一,名目简介

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

    中国经济水平的提升也让中国人民的日子富有起来了,富有糊口的初步也让老百姓的安康糊口日益器重起来了,对安康知识的渴求,对安康体检的要求也越来越多。如何操做现代化技术技能花腔,基于挪动互联网技术,让老百姓愈加便捷倏地的与得安康知识,便捷停行正在线预定体检,那便是原系统要着重处置惩罚惩罚的问题。

    颠终盘问拜访和走访研发的那套正在线安康打点系统,给取微信小步调云开发真现,基于Mongodb数据库停行数据存储,前端运用微信小步调开发真现,后端基于Nodejs开发真现。系统前端用户次要真现查察新闻通知、体检知识、正在线体检预定、查察我的预定、批改个人量料等。靠山次要真现用户打点、内容打点、流动和预定打点、统计预定用户数等罪能。那套系统的上线应付人们安康的打点和体检预定都有很大协助。

颠终对微信小步调安康打点系统的需求阐明,总结出了系统各种用户角色须要的罪能模块,停行了根柢的罪能模块设想,详细的各角色相关的罪能模块如下图3-1所示。

image

image.gif

编辑

图3-1 安康打点罪能构造图

   前端用户可以通偏激享的二维码扫描登陆系统,此时颠终用户授权后会主动运用用户的微信账户注册登陆小步调。登陆小步调安康打点系统后可以停行如下罪能收配:

个人量料维护:可以批改个人的相关量料信息,填写姓名、手机号、都市等相关信息。

动态阅读:可以阅读靠山发布的安康新闻动态信息

体检知识阅读:可以阅读靠山发布的体检知识和安康知识信息。

体检预定:可以依据原人的须要预定靠山发布的体检,首先查问可预定的光阳段,而后预定指定的光阳去停行体检。

我的预定:可以查察原人的预定信息和记录,并可以停行撤消收配,预定会生成预定码,去体检时可以依据预定码停行核销。

    靠山用户登陆后可以停行安康打点系统的业务数据打点收配,次要可以停行的罪能收配如下:

    1、用户打点:可以打点前端注册的小步调用户信息,停行相应的数据查察和导出收配。

    2、内容打点:正在内容打点查获块,次要停行动态新闻和体检知识的发布、编辑、批改形态、预览和上首页的收配,上首页的罪能类似于置顶收配。

    3、预定打点:可以发布新的预定信息,并可以对己发布的预定信息停行批改和形态的设置,同时可以查察前端小步调用户的预定信息,并可以停行预定核销收配。

    4、打点员收配日志:次要查照打点员的收配日志信息。

    5、信息统计打点:次要统计并查察预定数、用户数、文章数等相关信息。

 小步调安康打点系统的业务数据次要通过云开发平台的mongodb 数据库停行存储,数据库的构造按照于业务需求阐明抽像出相关的业求真体ER图,而后依据真体模型图转换为详细的表构造,那是系统阐明中很重要的一步,数据构造的设想干系到系统后期数据存储和查问的机能,对整个别系统影响较大,所以正在数据库阐明和设想要遵照基于的三大范式准则,下面来展示一下真体数据模型和详细的表构造信息。

   3.3.1 观念数据模型

依据微信点餐系统的罪能阐明,笼统出其相关业务数据真体的真体数据模型,详细展示如下:

1、打点员信息真体:次要阐明得出小步调靠山打点员的信息真体属性,次要有主键,名字,电话等相关信息构成,详细构造如下图所示:

      

image

image.gif

编辑

3-2 打点员信息真体

     2、用户信息真体:次要存储前端注册的用户信息,前端小步调用户运用微信注册登陆后可以正在系统中批改个人的根柢信息,次要包孕姓名、电话、都市等信息。

image

image.gif

编辑

3-3 用户信息真体

      3、新闻信息真体:次要存储打点员正在靠山发布的对于体检动态的相关内容,以及体检知识的相关信息,便于居民快捷通过手机与得安康相关的知识和体检知识,次要包孕题目、内容、形态等信息。

image

image.gif

编辑

3-4 新闻信息真体

      4、用户预定体检真体类:次要存储用户正在线预定体检信息,内容包孕用户编号、预定日期、初步光阳段、完毕光阳段、核验码等信息。

image

image.gif

编辑

3-5 预定信息真体

     5、打点员收配日志信息:次要存储打点员靠山收配的相关日志,以便于停行逃踪,次要包孕用户ID、收配类型、光阳、IP信息等

image

image.gif

编辑

3-6 打点员收配信息真体

    6、发布预定体检信息真体:次要存储打点员发布的预定体检的设置信息,次要包孕打点员编号,预定花式设置,分类编号,形态等信息。

image

image.gif

编辑

3-7 发布预定信息真体

二,环境引见

语言环境:Nodejs

数据库:Mongodb数据库

开发工具:IDEA或eclipse

微信小步调云开发

三,系统展示前端用户罪能模块的展示

3.1.1 前台首页展示

   安康打点系统的前端次要便是真现动态信息查问、体检知识进修、正在线预定体检的相关罪能。详细收配界面展示如下图4-1所示。

image

image.gif

编辑

图4-1 安康打点首页界面

3.1.2 最新动态阅读模块

前端用户进入安康打点系统进入动态阅读菜单便可查照打点员正在靠山发布的安康动态新闻信息,详细如下图4-2所示:

image

image.gif

编辑

图4-2 动态新闻阅读界面

3.1.3体检知识阅读模块

    小步调安康打点系统前台用户登陆系统后可以点击首页或下面的体检知识菜单进入体检知识文章列表页面。详细展示界面如下图4-3所示。

image

image.gif

编辑

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

3.1.4 体检套餐列表模块

    小步调安康打点系统前台用户登陆系统后,可以正在首页点击进入体检预定模块停行正在线预定。进入列表显示当前可以预定的体检套餐。相关体检展示收配界面如下图4-4所示。

image

image.gif

编辑

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

3.1.5正在线预定体检罪能模块

    小步调安康打点前台用户正在预定体检的列表被选择要预定的体检套餐后进入预定界面,可以查察预定须知,而后进入预定光阳选择光阳段停行预定。正在线预定如下图4-5、4-6、4-7所示。

image

image.gif

编辑

图4-5前台用户正在线预定收配界面

image

image.gif

编辑

图4-6前台用户正在线预定收配界面

    提交预定乐成后,可显示预定信息并展示二维码,二维码可以供体检时打点员核销预定运用,详细展示如下:

image

image.gif

编辑

图4-7预定乐成信息界面

3.1.6个人信息打点罪能模块

     正在我的罪能模块中次要可以停行个人信息的批改打点,个人预定信息的查问打点等罪能,详细展示如下图4-8所示:

image

image.gif

编辑

图4-8我的罪能模块

       点击个人信息批改可以批改个人信息,详细如下图4-9所示:

image

image.gif

编辑

图4-9个人量料批改罪能模块

点击我的预定可以查察个人预定的体检信息,可以查察详情以及撤消预定收配,详细展示如下图4-10所示:

image

image.gif

编辑

图4-10我的预定查察模块

3.2靠山罪能模块的展示

3.2.1用户登录罪能

    小步调安康打点系统靠山用户登陆后,方可授权停行相关信息的打点罪能。登陆界面如下图4-11所示。

image

image.gif

编辑

图4-11靠山用户登录收配界面

3.2.2靠山打点主界面

    小步调安康打点系统打点员用户登陆系统后,可以进入靠山主界面打点菜单停行相应信息打点。次要包孕用户打点、预定打点、内容打点、信息统计等相关罪能,靠山打点收配主界面如下图4-12所示:

image

image.gif

编辑

图4-12靠山打点罪能界面图

3.2.3 用户打点收配UI

    小步调安康打点员用户登陆系统后,可以对前端注册的用户信息停行相应的打点收配。此中次要包孕用户的查问、增除、导出量料、搜寻信息等罪能。用户信息打点收配界面如下图4-13所示。

image

image.gif

编辑

图4-13用户打点罪能UI界面

3.2.4 靠山餐品订单打点收配UI

    小步调安康打点系统打点员用户登陆系统后,可以对预定体检信息停行打点。此中次要包孕发布体检预定、设置批改体检预定、查察己预定名单、核销预定名单、设置停用体检预定等。体检预定信息打点收配界面如下图4-14所示。

image

image.gif

编辑

图4-14体检预定打点罪能UI界面

3.2.5 内容打点收配UI

    小步调安康打点员用户登陆系统后,可以对己发布的动态信息、体检知识停行打点收配,也可以发布新的文章内容并设置到首页展示。内容打点界面如下图4-15所示。

image

image.gif

编辑

图4-15内容打点罪能UI界面

3.2.6 日志打点收配UI

    小步调安康打点员用户登陆系统后,正在靠山可以分类查察用户的系统收配日志。日志收配打点界面如下图4-16所示。

image

image.gif

编辑

图4-16日志查察罪能UI界面

四,焦点代码展示

const AdminBiz = require('../../../../biz/admin_biz.js'); const pageHelper = require('../../../../helper/page_helper.js'); const cloudHelper = require('../../../../helper/cloud_helper.js'); Page({ /** * 页面的初始数据 */ data: {}, /** * 生命周期函数--监听页面加载 */ onLoad: async function (options) { if (!AdminBiz.isAdmin(this)) return; //设置搜寻菜单 await this._getSearchMenu(); }, /** * 生命周期函数--监听页面首次衬着完成 */ onReady: function () { }, /** * 生命周期函数--监听页面显示 */ onShow: async function () {}, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { }, url: async function (e) { pageHelper.url(e, this); }, bindCommListCmpt: function (e) { pageHelper.commListListener(this, e); }, bindDelTap: async function (e) { if (!AdminBiz.isAdmin(this)) return; let id = pageHelper.dataset(e, 'id'); let params = { id } let callback = async () => { try { let opts = { title: '增除中' } await cloudHelper.callCloudSumbit('admin/user_del', params, opts).then(res => { pageHelper.delListNode(id, this.data.dataList.list, 'USER_MINI_OPENID'); this.data.dataList.total--; this.setData({ dataList: this.data.dataList }); pageHelper.showSuccToast('增除乐成'); }); } catch (e) { console.log(e); } } pageHelper.showConfirm('确认增除?增除不陋习复', callback); }, bindStatusTap: async function (e) { if (!AdminBiz.isAdmin(this)) return; let id = pageHelper.dataset(e, 'id'); let status = pageHelper.dataset(e, 'status'); let params = { id, status } try { await cloudHelper.callCloudSumbit('admin/user_status', params).then(res => { pageHelper.modifyListNode(id, this.data.dataList.list, 'USER_STATUS', status, 'USER_MINI_OPENID'); this.setData({ dataList: this.data.dataList }); pageHelper.showSuccToast('设置乐成'); }); } catch (e) { console.log(e); } }, _getSearchMenu: async function () { let sortItems = []; let sortMenus = [{ label: '全副', type: '', value: '' }, { label: '一般', type: 'status', value: 1 }, { label: '注册光阳正序', type: 'sort', value: 'newasc' }, { label: '注册光阳倒序', type: 'sort', value: 'newdesc' }, ] this.setData({ sortItems, sortMenus }) } })

image.gif

const AdminNewsBiz = require('../../../../biz/admin_news_biz.js'); const AdminBiz = require('../../../../biz/admin_biz.js'); const pageHelper = require('../../../../helper/page_helper.js'); const cloudHelper = require('../../../../helper/cloud_helper.js'); Page({ /** * 页面的初始数据 */ data: {}, /** * 生命周期函数--监听页面加载 */ onLoad: async function (options) { if (!AdminBiz.isAdmin(this)) return; //设置搜寻菜单 await this._getSearchMenu(); }, /** * 生命周期函数--监听页面首次衬着完成 */ onReady: function () { }, /** * 生命周期函数--监听页面显示 */ onShow: async function () {}, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { }, url: async function (e) { pageHelper.url(e, this); }, bindCommListCmpt: function (e) { pageHelper.commListListener(this, e); }, bindSortTap: async function (e) { if (!AdminBiz.isAdmin(this)) return; let id = e.currentTarget.dataset.id; let sort = e.currentTarget.dataset.sort; if (!id || !sort) return; let params = { id, sort } try { await cloudHelper.callCloudSumbit('admin/news_sort', params).then(res => { pageHelper.modifyListNode(id, this.data.dataList.list, 'NEWS_HOME', sort); this.setData({ dataList: this.data.dataList }); }); } catch (e) { console.log(e); } }, _del: async function (id, that) { if (!AdminBiz.isAdmin(this)) return; if (!id) return; let params = { id } let callback = async () => { try { let opts = { title: '增除中' } await cloudHelper.callCloudSumbit('admin/news_del', params, opts).then(res => { pageHelper.delListNode(id, that.data.dataList.list, '_id'); that.data.dataList.total--; that.setData({ dataList: that.data.dataList }); pageHelper.showSuccToast('增除乐成'); }); } catch (e) { console.log(e); } } pageHelper.showConfirm('确认增除?增除不陋习复', callback); }, bindReviewTap: function (e) { let id = pageHelper.dataset(e, 'id'); wx.navigateTo({ url: pageHelper.fmtURLByPID('/pages/news/detail/news_detail?id=' + id), }); }, bindStatusSelectTap: async function (e) { if (!AdminBiz.isAdmin(this)) return; let itemList = ['启用', '停用', '增除']; let id = pageHelper.dataset(e, 'id'); wx.showActionSheet({ itemList, success: async res => { switch (res.tapIndex) { case 0: { //启用 await this._setStatus(id, 1, this); break; } case 1: { //进止 await this._setStatus(id, 0, this); break; } case 2: { //增除 await this._del(id, this); break; } } }, fail: function (res) {} }) }, _setStatus: async function (id, status, that) { status = Number(status); let params = { id, status } try { await cloudHelper.callCloudSumbit('admin/news_status', params).then(res => { pageHelper.modifyListNode(id, that.data.dataList.list, 'NEWS_STATUS', status, '_id'); that.setData({ dataList: that.data.dataList }); pageHelper.showSuccToast('设置乐成'); }); } catch (e) { console.log(e); } }, _getSearchMenu: async function () { let arr = await AdminNewsBiz.getCateList(); let sortItems = []; let sortMenus = [{ label: '全副', type: '', value: '' }, { label: '一般', type: 'status', value: 1 }, { label: '停用', type: 'status', value: 0 }, { label: '首页引荐', type: 'home', value: 0 } ] sortMenus = sortMenus.concat(arr); this.setData({ sortItems, sortMenus }) } })

image.gif

const AdminBiz = require('../../../../biz/admin_biz.js'); const AdminMeetBiz = require('../../../../biz/admin_meet_biz.js'); const pageHelper = require('../../../../helper/page_helper.js'); const cloudHelper = require('../../../../helper/cloud_helper.js'); Page({ /** * 页面的初始数据 */ data: {}, /** * 生命周期函数--监听页面加载 */ onLoad: async function (options) { if (!AdminBiz.isAdmin(this)) return; //设置搜寻菜单 await this._getSearchMenu(); }, /** * 生命周期函数--监听页面首次衬着完成 */ onReady: function () { }, /** * 生命周期函数--监听页面显示 */ onShow: async function () {}, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { }, url: async function (e) { pageHelper.url(e, this); }, bindCommListCmpt: function (e) { pageHelper.commListListener(this, e); }, bindScanTap: function (e) { let meetId = pageHelper.dataset(e, 'id'); let title = encodeURIComponent(pageHelper.dataset(e, 'title')); wx.navigateTo({ url: '../scan/admin_meet_scan?meetId=' + meetId + '&title=' + title, }); }, bindRecordSelectTap: async function (e) { let itemList = ['预定名单', '导着名单Excel文件', '打点员核销预定码', '用户自助签到码']; let meetId = pageHelper.dataset(e, 'id'); let title = encodeURIComponent(pageHelper.dataset(e, 'title')); wx.showActionSheet({ itemList, success: async res => { switch (res.tapIndex) { case 0: { //预定名单 wx.navigateTo({ url: '../record/admin_record_list?meetId=' + meetId + '&title=' + title, }); break; } case 1: { //导出 wx.navigateTo({ url: '../export/admin_join_export?meetId=' + meetId + '&title=' + title, }); break; } case 2: { //核验 this.bindScanTap(e); break; } case 3: { //自助签到码 pageHelper.showModal('请进入「预定名单->名单」, 查察某一时段的「用户自助签到码」') break; } } }, fail: function (res) {} }) }, bindMoreSelectTap: async function (e) { let itemList = ['预览']; let meetId = pageHelper.dataset(e, 'id'); wx.showActionSheet({ itemList, success: async res => { switch (res.tapIndex) { case 0: { //预览 wx.navigateTo({ url: pageHelper.fmtURLByPID('/pages/meet/detail/meet_detail?id=' + meetId), }); break; } } }, fail: function (res) {} }) }, bindStatusSelectTap: async function (e) { let itemList = ['启用', '进止预定 (用户可见)', '封锁 (用户不成见)', '增除', '置顶', '撤消置顶']; let meetId = pageHelper.dataset(e, 'id'); wx.showActionSheet({ itemList, success: async res => { switch (res.tapIndex) { case 0: { //启用 await this._setStatus(meetId, 1, this); break; } case 1: { //进止预定 await this._setStatus(meetId, 9, this); break; } case 2: { //封锁 await this._setStatus(meetId, 10, this); break; } case 3: { //增除 await this._del(meetId, this); break; } case 4: { //置顶 await this._setSort(meetId, 0, this); break; } case 5: { //撤消置顶 await this._setSort(meetId, 9999, this); break; } } }, fail: function (res) {} }) }, _setSort: async function (meetId, sort, that) { if (!AdminBiz.isAdmin(this)) return; if (!meetId) return; let params = { meetId, sort } try { await cloudHelper.callCloudSumbit('admin/meet_sort', params).then(res => { pageHelper.modifyListNode(meetId, that.data.dataList.list, 'MEET_ORDER', sort); that.setData({ dataList: that.data.dataList }); pageHelper.showSuccToast('设置乐成'); }); } catch (e) { console.log(e); } }, _del: async function (meetId, that) { if (!AdminBiz.isAdmin(this)) return; if (!meetId) return; let params = { meetId } let callback = async function () { try { let opts = { title: '增除中' } await cloudHelper.callCloudSumbit('admin/meet_del', params, opts).then(res => { pageHelper.delListNode(meetId, that.data.dataList.list, '_id'); that.data.dataList.total--; that.setData({ dataList: that.data.dataList }); pageHelper.showSuccToast('增除乐成'); }); } catch (e) { console.log(e); } } pageHelper.showConfirm('确认增除?增除不陋习复', callback); }, _setStatus: async function (meetId, status, that) { if (!AdminBiz.isAdmin(this)) return; if (!meetId) return; let params = { meetId, status } try { await cloudHelper.callCloudSumbit('admin/meet_status', params).then(res => { pageHelper.modifyListNode(meetId, that.data.dataList.list, 'MEET_STATUS', status, '_id'); that.setData({ dataList: that.data.dataList }); pageHelper.showSuccToast('设置乐成'); }); } catch (e) { console.log(e); } }, _getSearchMenu: async function () { let arr = await AdminMeetBiz.getTypeList(); let sortItems = []; let sortMenus = [{ label: '全副', type: '', value: '' }, { label: '运用中', type: 'status', value: 1 }, { label: '已进止', type: 'status', value: 9 }, { label: '已封锁', type: 'status', value: 10 }, ]; sortMenus = sortMenus.concat(arr); this.setData({ sortItems, sortMenus }) } })

image.gif

五,名目总结5.1 微信小步调云开发使用

微信云开发是微信团队结折腾讯云推出的专业的小步调开发效逸。开发者可以运用云开发快捷开发小步调、小游戏、公寡号网页等,并且本生打通微信开放才华。开发者无需搭建效逸器,可免鉴权间接运用平台供给的 API 停行业务开发。运用微信小步调云开发须要先注册而后运用。

    正在开发者工具的工具栏右侧上部,点击 【云开发】 按钮便可打开云开发控制台,依据提示开明云开发,并且创立一个新的云开发环境。

image

image.gif

编辑

6-1云开发收配收配

    每个环境互相断绝,领有惟一的环境 ID (拷贝此ID,背面配置会用到),包孕独立的数据库真例、存储空间、云函数配置等资源。

image

image.gif

编辑

6-2云开发收配收配

开明过申请到了云开发环境的ID,便可正在小步调中停行按官方文档配置开发。

5.2微信小步调开发者工具使用

腾讯为小步调开发人员供给了一个专业便捷的快捷构建工具,也便是咱们用到的那款小步调开发者工具。从微信小步调官网下载小步调开发者工具拆置后打开,须要运用开发者绑定小步调账户的微信扫描登录后打开。打开后的界面如下:

image

image.gif

编辑

6-3微信开发者工具收配

5.3 NODEJS技术开发使用

Nodejs技术最近几多年正在前后端别分隔发顶用的比较多,出格是一些前端开发人员,更喜爱联结Nodejs来停行项宗旨开发。它是基于Chrom的V8引擎来运止JS端效逸步调。本来JS次要定位于前端交互开发的脚原,如今却可以像PHP,JSP一样开发靠山效逸步调。原名目中对应的靠山打点罪能便是基于Nodejs来开发的靠山步调。下面是靠山步调的目录构造:

image

image.gif

编辑

6-4靠山系统目录构造

    此中package.json是配置的系统依赖的库,次要是正在启动时要加载一些js库以便开发运用。此中project目录下包孕controller,model,service三个目录,划分代表三层架构中的控制器,数据模型层,业务层,系统给取三层架构的方式来停行开发真现。

5.4 NPM包打点工具使用

靠山开发基于Nodejs开发使用时,须要下载相关的JS依赖库,以便开发运用,咱们罕用NPM停行依赖库的打点,须要正在原地拆置配置NPM环境,它相当于J ava中的Maven。原地拆置配置后可以运用命查察它能否拆置乐成:

image

image.gif

编辑

6-5 NPM版原查察

5.5 MongoDB数据库使用

原安康小步调打点系统的开发基于微信云开发真现,运用了微信云效逸器的数据库效逸来停行数据存储,它运用的是Mongodb数据库。点击微信开发者工具上面的云开发,可以进入原人申请的云效逸列表,选择数据库,可以查察相关的数据库表构造及数据:

image

image.gif

热门文章

推荐文章

友情链接: 永康物流网 本站外链出售 义乌物流网 本网站域名出售 手机靓号-号码网