本小程序面对社区使用,服务对象为社区患病病人、独居老人,家属、医生和社区可获得相应呼救信息,医生和社区也可以利用该小程序进行病人信息的相关管理。
一、登录页面
用户分为病人,家属,医生/社区,不同用户可使用的功能不同,可以通过身份证号登录
判断不同用户是通过数据库中的信息判断,数据库可使用微信小程序里的云数据库,也可通过MySQL导入
// pages/login/login.js
const db = wx.cloud.database();
const app = getApp(); // 获取小程序实例对象
Page({
data: {
inputAccount: "", // 用于存储用户输入的账号
userInfo: ''
},
// 监听用户输入账号的函数
onInput(event) {
this.setData({
inputAccount: event.detail.value, // 将用户输入的账号存储到data中
});
},
onLoad()
{
this.setData({
userInfo: app.globalData.userInfo
})
},
// 点击按钮跳转到另一个页面的函数
navigateToAnotherPage: function () {
// 当按钮被点击时,跳转至另一个页面
wx.navigateTo({
url: '/pages/userselect/userselect' // 替换为实际要跳转的页面路径
});
},
// 查询账号是否存在的函数
log() {
const inputAccount = this.data.inputAccount;
// 将输入的账号值存储到小程序实例对象的全局数据中(globalData)
app.globalData.inputAccount = inputAccount;
// 查询数据库
db.collection('users').where({
ID: String(inputAccount) // 将输入的账号转换为字符串类型
}).get({
success: res => {
if (res.data.length > 0) {
// 账号存在,根据身份跳转至不同页面
const classify = res.data[0].classify;
if (classify === 'patient') {
// 跳转至患者页面
wx.navigateTo({
url: '/pages/help/help', // 患者页面的路径
});
} else if (classify === 'dependent') {
// 跳转至家属页面
wx.navigateTo({
url: '/pages/dependent/dependent', // 家属页面的路径
});
} else if (classify === 'doctor') {
// 跳转至医生页面
wx.navigateTo({
url: '/pages/message/message', // 医生页面的路径
});
}
} else {
// 账号不存在
console.log('账号不存在');
wx.showToast({
title: "不存在该用户", icon: "none"
})
}
},
fail: err => {
console.error('查询失败:', err);
}
});
}
});
二、注册功能
如相应用户信息未在数据库中,可以通过注册功能实现用户注册
不同的身份选择相应的按钮
病人不可以自行注册,主要是考虑到该小程序面对独居老人和患病病人使用,这些人的信息由家属或医生/社区导入到数据库中
// pages/userselect/userselect.js
Page({
// 点击按钮1,跳转到家属注册页面
navigateToPage1: function () {
wx.navigateTo({
url: '/pages/famreg/famreg' // 替换为家属注册页面的路径
});
},
// 点击按钮2,跳转到医生注册页面
navigateToPage2: function () {
wx.navigateTo({
url: '/pages/docreg/docreg' // 替换为医生注册页面的路径
});
}
});
三、家属注册
// pages/famreg/famreg.js
Page({
data: {
classify: "dependent", // 默认classify信息,默认值为"dependent"
name: "",
ID: "",
age: "",
address: "",
tel1: "",
},
// 监听输入框输入姓名
bindNameInput(event) {
this.setData({
name: event.detail.value,
});
},
// 监听输入框输入身份证号
bindIDInput(event) {
this.setData({
ID: event.detail.value,
});
},
// 监听输入框输入年龄
bindAgeInput(event) {
this.setData({
age: event.detail.value,
});
},
// 监听输入框输入地址
bindAddressInput(event) {
this.setData({
address: event.detail.value,
});
},
// 监听输入框输入电话号码
bindTel1Input(event) {
this.setData({
tel1: event.detail.value,
});
},
// 点击保存按钮,将用户信息保存到数据库中
onSaveToDatabase() {
const db = wx.cloud.database();
const user = {
classify: this.data.classify,
name: this.data.name,
ID: this.data.ID,
age: this.data.age,
address: this.data.address,
tel1: this.data.tel1,
med: "", // 默认med信息,可以在需要的时候修改
sick: "", // 默认sick信息,可以在需要的时候修改
};
db.collection('users').where({
ID: String(this.data.ID) // 将输入的账号转换为字符串类型
}).get({
success: res => {
if (res.data.length > 0) {
wx.showToast({
title: "已存在该用户", icon: "none"
})
}
else {
db.collection('users')
.add({
data: user,
})
.then((res) => {
console.log("保存成功", res);
wx.showToast({ title: "保存成功", icon: "success" })
// 保存成功后,清空输入框内的数据
this.setData({
classify: "dependent", // 重置为默认值
name: "",
ID: "",
age: "",
address: "",
tel1: "",
})
})
}
},
fail: err => {
console.error('查询失败:', err);
}
});
}
});
四、医生注册
// pages/docreg/docreg.js
Page({
data: {
classify: "doctor", // 默认classify信息,默认值为"doctor"
name: "",
ID: "",
age: "",
address: "",
tel1: "",
},
// 监听输入框输入姓名
bindNameInput(event) {
this.setData({
name: event.detail.value,
});
},
// 监听输入框输入身份证号
bindIDInput(event) {
this.setData({
ID: event.detail.value,
});
},
// 监听输入框输入年龄
bindAgeInput(event) {
this.setData({
age: event.detail.value,
});
},
// 监听输入框输入地址
bindAddressInput(event) {
this.setData({
address: event.detail.value,
});
},
// 监听输入框输入电话号码
bindTel1Input(event) {
this.setData({
tel1: event.detail.value,
});
},
// 点击保存按钮,将用户信息保存到数据库中
onSaveToDatabase() {
const db = wx.cloud.database();
const user = {
classify: this.data.classify,
name: this.data.name,
ID: this.data.ID,
age: this.data.age,
address: this.data.address,
tel1: this.data.tel1,
med: "", // 默认med信息,可以在需要的时候修改
sick: "", // 默认sick信息,可以在需要的时候修改
};
db.collection('users').where({
ID: String(this.data.ID) // 将输入的账号转换为字符串类型
}).get({
success: res => {
if (res.data.length > 0) {
wx.showToast({
title: "已存在该用户", icon: "none"
})
}
else {
db.collection('users')
.add({
data: user,
})
.then((res) => {
console.log("保存成功", res);
wx.showToast({ title: "保存成功", icon: "success" })
// 保存成功后,清空输入框内的数据
this.setData({
classify: "doctor", // 重置为默认值
name: "",
ID: "",
age: "",
address: "",
tel1: "",
})
})
}
},
fail: err => {
console.error('查询失败:', err);
}
});
}
});
五、病人呼救
病人点击一键呼救按钮,会将当前地址、病史、用药史、家庭住址等信息发给医生/社区
同时会拨打紧急联系人电话
// pages/help/help.js
const app = getApp();
const db = wx.cloud.database();
Page({
data: {
datavalue: "", // 数据值
idvalue: "", // ID 值
local: "", // 添加 local 属性以存储用户选择的位置信息
},
// 跳转到依赖页面的事件处理函数
soscall() {
wx.makePhoneCall({
phoneNumber: this.data.datavalue.tel,
success: (res) => {
console.log('拨打电话成功');
},
fail: (err) => {
console.error('拨打电话失败', err);
}
});
},
onLoad(options) {
// 页面加载时,获取全局变量 inputAccount
this.setData({
idvalue: app.globalData.inputAccount,
});
// 查询数据库以获取用户数据
db.collection('users').where({
ID: String(this.data.idvalue),
}).get({
success: res => {
console.log(res);
// 检查是否返回数据
if (res.data.length > 0) {
this.setData({
datavalue: res.data[0], // 将查询到的数据设置到 datavalue 属性中
});
}
},
fail: err => {
console.error('获取用户数据失败:', err);
},
});
},
// 获取用户位置信息
sendToBUser: function () {
wx.chooseLocation({
success: res => {
console.log(res);
this.setData({
local: res.address, // 将用户选择的地址信息设置到 local 属性中
});
const currentTime = new Date().getTime(); // 添加以获取当前时间的代码
const userAccount = this.data.idvalue;
const dataToSend = {
address: this.data.datavalue.address,
sick: this.data.datavalue.sick,
med: this.data.datavalue.med,
name: this.data.datavalue.name,
};
// 将数据存储到数据库中,包括位置信息
db.collection('user_data').add({
data: {
sendAccount: userAccount,
address: dataToSend.address,
sick: dataToSend.sick,
med: dataToSend.med,
name: dataToSend.name,
nowAddress: this.data.local, // 将用户选择的地址信息存储到数据库中
time: currentTime, // 添加以存储当前时间的代码
},
success: res => {
console.log('发送成功', res);
wx.showToast({
title: '发送成功',
icon: 'success',
duration: 2000,
});
},
fail: err => {
console.error('发送失败', err);
wx.showToast({
title: '发送失败',
icon: 'none',
duration: 2000,
});
},
});
},
fail: err => {
console.error('选择位置信息失败', err);
},
});
},
});
六、家属界面
家属可以增加和更改病人信息,包括病人姓名、身份证号、家庭住址、年龄
// pages/dependent/dependent.js
Page({
// Button 1: 点击按钮跳转到第一个页面,即添加用户页面
gotoNextPage1: function() {
wx.navigateTo({
url: '/pages/addUser/addUser' // 跳转到添加用户页面的路径
});
},
// Button 2: 点击按钮跳转到第二个页面,即修改用户信息页面
gotoNextPage2: function() {
wx.navigateTo({
url: '/pages/changeUser/changeUser' // 跳转到修改用户信息页面的路径
});
},
});
七、医生界面
医生可以增加和更改病人病史、用药信息
// pages/message/message.js
Page({
// 点击按钮1,跳转到第一个页面
gotoNextPage1: function() {
wx.navigateTo({
url: '/pages/getData/getData' // 第一个页面的路径
});
},
// 点击按钮2,跳转到第二个页面
gotoNextPage2: function() {
wx.navigateTo({
url: '/pages/doctor/doctor' // 第二个页面的路径
});
},
// 点击按钮3,跳转到第三个页面
gotoNextPage3: function() {
wx.navigateTo({
url: '/pages/docadd/docadd' // 第三个页面的路径
});
},
});
八、增加病人信息
// pages/addUser/addUser.js
Page({
data: {
classify: "patient", // 默认classify信息,默认值为"patient"
name: "",
ID: "",
age: "",
address: "",
tel1: "",
},
// 监听输入框输入姓名
bindNameInput(event) {
this.setData({
name: event.detail.value,
});
},
// 监听输入框输入身份证号
bindIDInput(event) {
this.setData({
ID: event.detail.value,
});
},
// 监听输入框输入年龄
bindAgeInput(event) {
this.setData({
age: event.detail.value,
});
},
// 监听输入框输入地址
bindAddressInput(event) {
this.setData({
address: event.detail.value,
});
},
// 监听输入框输入电话号码
bindTel1Input(event) {
this.setData({
tel1: event.detail.value,
});
},
// 点击保存按钮,将用户信息保存到数据库中
onSaveToDatabase() {
const db = wx.cloud.database();
const user = {
classify: this.data.classify,
name: this.data.name,
ID: this.data.ID,
age: this.data.age,
address: this.data.address,
tel1: this.data.tel1,
med: "", // 默认med信息,可以在需要的时候修改
sick: "", // 默认sick信息,可以在需要的时候修改
};
db.collection('users').where({
ID: String(this.data.ID) // 将输入的账号转换为字符串类型
}).get({
success: res => {
if (res.data.length > 0) {
wx.showToast({
title: "已存在该用户", icon: "none"
})
}
else {
db.collection('users')
.add({
data: user,
})
.then((res) => {
console.log("保存成功", res);
wx.showToast({ title: "保存成功", icon: "success" })
// 保存成功后,清空输入框内的数据
this.setData({
classify: "patient", // 重置为默认值
name: "",
ID: "",
age: "",
address: "",
tel1: "",
})
})
}
},
fail: err => {
console.error('查询失败:', err);
}
});
}
});
九、修改病人信息
// pages/changeUser/changeUser.js
Page({
data: {
ID: '',
age: '',
address: '',
tel1: '',
},
// 监听输入框输入身份证号
onInputID(event) {
this.setData({
ID: event.detail.value,
});
},
// 监听输入框输入年龄
onInputAge(event) {
this.setData({
age: event.detail.value,
});
},
// 监听输入框输入地址
onInputAddress(event) {
this.setData({
address: event.detail.value,
});
},
// 监听输入框输入电话号码
onInputTel1(event) {
this.setData({
tel1: event.detail.value,
});
},
// 点击提交按钮,将修改后的用户信息保存到数据库中
onSubmit() {
const db = wx.cloud.database();
db.collection('users').where({
ID: String(this.data.ID) // 将输入的账号转换为字符串类型
}).get({
success: res => {
if (res.data.length > 0) {
db.collection('users') .where({
ID: this.data.ID, // 查询特定ID的记录
})
.update({
data: {
age: this.data.age, // 修改年龄为输入的年龄
address: this.data.address, // 修改地址为输入的地址
tel1: this.data.tel1, // 修改电话号码为输入的电话号码
},
})
.then((res) => {
console.log('修改成功', res);
wx.showToast({ title: '修改成功', icon: 'success' });
})}
else {
console.log("不存在该病人")
wx.showToast({
title: '不存在该病人',icon: 'none'
})
}
},
fail: err => {
console.error('查询失败:', err);
}
});
}
});
十、医生/社区获取最新呼救请求
当病人呼救时,呼救信息会发到医生/社区
//pages/getData/getData.js
const db = wx.cloud.database();
const dataCollection = db.collection('user_data');
Page({
data: {
latestData: [], // 存储最新的4条数据
},
onLoad: function () {
// 页面加载时,初始化按钮信息
this.updateButtons();
},
onShow: function () {
// 页面显示时,监听数据库变化
this.startListening();
},
onHide: function () {
// 页面隐藏时,停止监听数据库变化
this.stopListening();
},
startListening: function () {
// 监听数据库集合变化
const self = this;
this.dataListener = db.collection('user_data')
.orderBy('time', 'desc') // Sort by time in descending order
.limit(5) // Limit to 5 records
.watch({
onChange: function (snapshot) {
self.updateButtons();
},
onError: function (err) {
console.error('监听数据库变化失败:', err);
}
});
},
stopListening: function () {
// 停止监听数据库集合变化
if (this.dataListener) {
this.dataListener.close();
this.dataListener = null;
}
},
updateButtons: function () {
// 获取数据库中最新的5条数据,并更新按钮信息
dataCollection.orderBy('time', 'desc') // Sort by time in descending order
.limit(4) // Limit to 4 records
.get({
success: (res) => {
this.setData({
latestData: res.data
});
},
fail: (err) => {
console.error('获取最新数据失败:', err);
}
});
},
onButtonClick: function (event) {
// 点击按钮后,获取按钮对应的数据并进行处理
const index = event.currentTarget.dataset.index;
if (this.data.latestData[index]) {
const data = this.data.latestData[index];
// 在这里可以根据需要处理获取到的数据
console.log('按钮', index + 1, '对应的最新数据:', data);
// 跳转到新页面并传递数据
wx.navigateTo({
url: '/pages/dataDetail/dataDetail?data=' + JSON.stringify(data),
});
}
},
});
十一、医生获取呼救病人详细信息
当点击按钮,可看到相应病人的详细信息,包括当前地址、病史、用药史、家庭住址等信息
// pages/dataDetail/dataDetail.js
Page({
data: {
data: {}, // 存储按钮对应的数据
},
onLoad: function (options) {
// 从上个页面传递过来的数据
const data = JSON.parse(options.data);
this.setData({
data: data,
});
},
});