基于node.js和Vue3的医院信息管理挂号系统

news2024/11/26 11:57:38

        随着时代的发展,无线互联网技术的应用和普及给人们的生活带来了极大的改变,现在信息技术不仅可以提高我们的工作效率,还能有效的规避一些错误风险,节约人力成本。我国国民一方面对健康的要求越来越重视了,另一方面现代人的健康问题日益严重,所以医院信息管理也不再是可有可无的事情了。针对传统医院管理模式中,医院各个部门的协调缓慢、在医院办理业务耗费大量时间排队、部门间数据的存储和查看费时费力等一系列问题。设计医院信息管理系统亟待解决目前我国各大医院存在的这些问题。

        医院信息管理系统是典型的管理信息系统(HIS),其开发主要包括后台数据库的开发与维护、其中包括前端应用程序的开发。以前需要建立一个具有强大数据一致性、完整性和数据安全性的数据库。在后者中,应用程序必须具备所有功能并易于使用。使用计算机管理患者和医生与人工管理相比,具有检索速度快、检索方便、可靠性高、存储容量大、安全性好、使用寿命长、成本低等无可比拟的优点,这些优点可以大大提高患者及医生信息管理的效率,大大提高医疗设施财务管理的科学化、正规化管理和尖端科学技术,这是提升服务的重要条件。

 

 

实现的功能:

管理员、医生、用户三种角色;

管理员对整个系统进行管理,包括医生管理、药品管理、科室管理、公告管理等;

医生实现了患者管理、药品管理、住院人员管理等功能;

用户可以自行注册登录,可以进行自助挂号、查看病历等;

 

用到的技术:

后端 node.js,MySQL数据库;

前端 Vue3。

部分代码展示

function login() {
  if (nick.value == '' || pass.value == '') {
    common.err('请填写用户ID和密码')
    return
  }
  common.request({
    data: {
      nickName: nick.value,
      password: window.btoa(pass.value)
    },
    url: common.urlMap.login,
    success: function (res) {
      if (res.data.code == 200) {
        try {
          user.value = res.data.data
          getUserData()
          localStorage.setItem('userInfo', JSON.stringify(res.data.data))
        } catch (e) {
          user.value.uid = ''
          localStorage.removeItem('userInfo')
        }
      } else {
        common.err(res.data.msg)
      }
    },
    fail: function (res) {
      common.err('网络异常')
    }
  })
}
function getUserData() {
  common.request({
    loading: false,
    url: common.urlMap.findSysUser,
    data: { uid: user.value.uid },
    success: function (res) {
      if (res.data.code == 200) {
        if (res.data.data) {
          userItem = res.data.data
        }
      }
    },
    fail: function (res) {
      common.err('网络异常')
    }
  })
}
function logOut() {
  localStorage.removeItem('userInfo')
  user.value.uid = ''
  common.request({
    url: common.urlMap.logout
  })
}
function jumpManager() {
  if (user.value.type == 1) {
    window.location.href = '/public/pages/index.html'
  } else if (user.value.type == 2) {
    window.location.href = '/public/pages/index2.html'
  } else {
    location.href = '/public/pages/view/manager/myInfo.html'
  }
}

function getTypeName(typeId) {
  for (let i = 0; i < typeList.value.length; i++) {
    if (typeList[i].id == typeId) {
      return typeList[i].groupName
    }
  }
  return ''
}
function listenPage(id) {
  window.location.href = './view/manager/bookItem.html?id=' + id
}
function resign() {
  reNick = ''
  pass1.value = ''
  pass2.value = ''
  showRe.value = true
}
function resignSub() {
  addUser.value.nickName = addUser.value.nickName.replace(/\s/g, '')

  if (!addUser.value.nickName || !pass1.value || !pass2.value) {
    common.err('请填写完整')
    return
  }

  if (pass1.value != pass2.value) {
    common.err('两次密码不一致')
    return
  }

  if (pass1.value.length > 12 || pass1.value.length < 6) {
    common.err('密码长度应为6-12位')
    return
  }

  addUser.value.password = btoa(pass1.value)

  if (addUser.value.uid) {
    common.request({
      url: common.urlMap.editSysUser,
      data: addUser.value,
      success: function (res) {
        if (res.data.code == 200) {
          common.msg('修改成功,请重新登录')
          showRe.value = false
          user.value.uid = ''
        } else {
          common.msg(res.data.msg)
        }
      },
      fail: function (res) {
        common.err('网络异常')
      }
    })
  } else {
    common.request({
      headers: {
        'content-type': 'application/x-www-form-urlencoded'
      },
      data: addUser.value,
      url: common.urlMap.regist,
      success: function (res) {
        if (res.data.code == 200) {
          common.msg('注册成功,请登录')
          showRe.value = false
        } else {
          common.err(res.data.msg)
        }
      },
      fail: function (res) {
        common.err('网络异常')
      }
    })
  }
}
function addOrder() {
  var textArr = ['realName', 'nickName', 'subId', 'docId', 'orderPrice', 'orderTime']
  for (var key in order.value) {
    if (!order.value[key] && textArr.indexOf(key) > -1) {
      common.err('请填写完整')
      return
    }
  }

  if (order.value.orderTime.getTime() < new Date().getTime()) {
    common.err('预约时间应晚于当前时间')
    return
  }

  var cutDate = getDateStr('yyyy-MM-dd', order.value.orderTime)

  var begin = new Date(cutDate + ' ' + timeRange[0])
  var end = new Date(cutDate + ' ' + timeRange[1])

  if (
    order.value.orderTime.getTime() > end.getTime() ||
    order.value.orderTime.getTime() < begin.getTime()
  ) {
    common.err('预约时间不在医师值班时间内')
    return
  }
  order.value.orderTime = getDateStr('yyyy-MM-dd hh:mm', order.value.orderTime)

  common.request({
    loading: false,
    url: common.urlMap.addNmOrder,
    data: order.value,
    success: function (res) {
      common.msg(res.data.msg)
      if (res.data.code == 200) {
        pay.value = true
        showOrder.value = false
      }
    },
    fail: function (res) {
      common.err('网络异常')
    }
  })
}
function getOrder(item) {
  if (user.value.type != 3) {
    common.err('仅患者可挂号')
    return
  }

  if (!user.value.uid) {
    common.err('挂号前请登录')
    return
  }

  order.value = {
    realName: user.value.realName,
    nickName: user.value.nickName,
    title: '挂号预约',
    state: '0',
    type: '0',
    subId: item.id,
    docId: '',
    orderPrice: 10,
    creater: user.value.uid,
    validFlag: 1,
    userId: '',
    orderTime: new Date()
  }
  showOrder.value = true
  changeSub2(item.id)
  common.request({
    loading: false,
    url: common.urlMap.findSysUserList,
    data: {
      validFlag: 1,
      type: 4,
      pid: user.value.uid
    },
    success: function (res) {
      //common.msg(res.data.msg);
      if (res.data.code == 200) {
        userList.value = res.data.data
      }
    },
    fail: function (res) {
      common.err('网络异常')
    }
  })
}
function changeSub(e) {
  changeSub2(e)
  order.value.docId = ''
}
function changeDoc(e) {
  var emp = {
    workTime: '',
    job: ''
  }
  hotList.value.map(function (item) {
    if (item.uid == e) {
      emp = item
    }
  })
  if (emp) {
    order.value.orderPrice = emp.job == '医师' ? 10 : 30
  }
  orderTime = new Date(getDateStr('yyyy-MM-dd', new Date()) + ' ' + emp.workTime.split('-')[0])
  timeRange = emp.workTime.split('-')
}

function getDateStr(fmt, date) {
  // author: meizz
  var o = {
    'M+': date.getMonth() + 1, // 月份
    'd+': date.getDate(), // 日
    'h+': date.getHours(), // 小时
    'm+': date.getMinutes(), // 分
    's+': date.getSeconds(), // 秒
    'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
    S: date.getMilliseconds() // 毫秒
  }
  if (/(y+)/.test(fmt))
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  for (var k in o)
    if (new RegExp('(' + k + ')').test(fmt))
      fmt = fmt.replace(
        RegExp.$1,
        RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
      )
  return fmt
}

function changeSub2(sub) {
  hotList2.value = []
  for (let i = 0; i < hotList.value.length; i++) {
    if (hotList.value[i].sub == sub) {
      hotList2.value.push(hotList.value[i])
    }
  }
}

function wr() {
  pay.value = false
  showOrder.value = false
}

getGroupList()
getTopBar()
getDoctor()
user.value = common.getUserInfo()
</script>

<template>
  <div>
    <div id="app" v-cloak>
      <div class="top-bar bg-white">
        <div class="top-logo" style="padding-left: calc(50% - 560px)">
          <img width="50px" height="50px" src="../../../public/logo.png" />
          <div style="padding-left: 10px">
            <span style="color: #ff9c0a">糯 </span><span class="text-blue">米 </span
            ><span style="color: white">医 院</span>
          </div>
        </div>
        <div class="v-flex v-c-center" style="padding-right: calc(50% - 560px)">
          <el-avatar size="medium" :src="picPath + (user.uid ? 'nuoMi.png' : 'unknow.png')" />
          <div class="text-shadow text-blue" style="padding-left: 15px">{{
            user.uid ? user.nickName + '[' + getUserType(user.type) + ']' : '未登录'
          }}</div>
        </div>
      </div>

      <div class="tab-list" style="padding-left: calc(50% - 560px)">
        <div class="tab-item">首页</div>
      </div>

 

基于node.js和Vue3医疗医院信息管理挂号系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/750201.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【imarkdown】一个轻量级markdown图片链接转换器

imarkdown imarkdown是一个轻量级markdown图片链接转换器&#xff0c;你可以轻松地对图片链接进行本地到图片服务器、图片服务器到本地、图片服务器到图片服务器的转换。 因为语雀转markdown的时候图片存在防外链行为&#xff0c;如果想要把转出的markdown发表在其他平台&…

电子电路基础知识--电阻

视频教程 薄膜电阻 &#xff08;包括碳膜电阻、合成碳膜电阻、金属氧化膜电阻、玻璃釉膜电阻&#xff09;… 碳膜电阻 气态碳氢化合物在高温和真空中分解&#xff0c;碳沉积在蜜挂或者瓷管上&#xff0c;形成一层结晶碳膜。改变碳膜厚度和用刻槽的方法变更碳膜的长度&#…

驱动 day10 作业

要求&#xff1a;platform驱动实现 现象&#xff1a; test.c应用程序 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #in…

Edge浏览器和Google浏览器占用内存情况

最近发现适用edge浏览器看视频时&#xff0c;或者打开多个网页&#xff0c;电脑就会变得非常卡顿&#xff0c;打开任务管理器发现内存占用较多&#xff0c;网上也有人说edge浏览器确实占用内存较多。但是给出的解决方案是更新windows系统&#xff0c;这个方法显然不能接受&…

Modbus tcp转ETHERCAT网关modbus tcp功能码

远创智控YC-ECT-TCP网关能够连接到Modbus tcp总线和ETHERCAT总线中&#xff0c;实现两种不同协议设备之间的通讯。这个网关能够大大提高工业生产的效率和生产效益&#xff0c;让生产变得更加智能化。远创智控YC-ECT-TCP 是自主研发的一款 ETHERCAT 从站功能的通讯网关。该产品主…

渗透专题丨Vulnhub-Tr0ll2靶机打靶

确认目标机IP&#xff1a;192.168.38.140 进行端口扫描&#xff1a; 查看一下版本&#xff1a; 没有查到关键信息&#xff0c;以80端口作为突破&#xff1a; 拿到提示信息&#xff1a; 接下来尝试ftp登录&#xff0c;根据提示信息&#xff1a; 登录之后&#xff0c;拿到lmao.z…

线性电源,开关电源

稳压器是如何工作的&#xff1f; 稳压器是这样一种电路&#xff1a;无论输入电压或负载条件如何变化&#xff0c;它都能产生并保持固定的输出电压。 稳压器&#xff08;VR&#xff09;将来自电源的电压保持在其他电气组件相容的范围之内。它最常用于DC / DC电源转换&#xff…

基于亚博K210开发板——串口中断以及开启双核任务

文章目录 开发板实验目的实验准备硬件原理图软件对应SDK对应的头文件 uart.huart.h接口函数高速通用异步收发传输器(UARTHS)对应的头文件 uarths.huarths.h接口函数板级对应的头文件 bsp.hbsp.h接口函数 实验代码实验结果效果 开发板 亚博K210开发板 实验目的 本实验配置串…

vue3中的excel表导出功能(选中导出或导出所有,也可支持vue2)

1.安装模块 npm install xlsx file-saver -S 2.文件导入 import * as XLSX from "xlsx"; import FileSaver from "file-saver" 3.整体代码(可选中导出或导出所有) <template><div><el-button type"warning" click"down&quo…

apt-get install命令

在Linux系统中&#xff0c;apt-get命令默认安装包的位置是在/usr目录下。具体来说&#xff0c;安装的可执行文件会存储在/usr/bin目录下&#xff0c;而库文件会存储在/usr/lib目录下。同时&#xff0c;相应的配置文件和文档等也会存储在/usr/share目录下。 举例&#xff0c;ap…

【计算机系统概论Yale.patt】第三章

文章目录 3.数字逻辑3.1 MOS管3.1.1 p型MOS晶体管3.1.2 n型MOS晶体管 3.2 逻辑门3.2.1 非门——反相器3.2.2 或非门、或门或非门或门 3.2.3 与非门、与门3.2.4 逻辑门符号表示逻辑门的数电表达式摩根定律 3.3 逻辑结构3.3.1 组合逻辑译码器多路复用器全加器可编程逻辑阵列 3.3.…

20230713-------通过platform实现阻塞IO来驱动按键控制LED灯的亮灭

需添加的设备树节点 myplatform{ compatible "hqyj,myplatform"; reg<0X12345678 0X400>; interrupt-parent<&gpiof>; interrupts<9 0>; //9表示引用中断父节点时的索引信息 0表示默认设置 led1<&gpioe 10 0>;pdev.c #include …

linux 安装pytorch3d的坑

事实上&#xff0c;只要按照官方文档的说明就可以完美安装。其中坑的地方在于conda的管理可能会导致下载的版本不符合你的要求&#xff08;例如下载成了cpu版本、下载的cuda版本&#xff09;而同样尝试使用源码编译以及其他方式下载库都会导致同样的问题&#xff0c;这里主要的…

【动手学深度学习】层和块

层和块 简单介绍 块&#xff1a;描述单个层&#xff0c;由多个层组成的组件或整个模型本身。使用块进行抽象的一个好处是可以将一些块组合成更大的组件&#xff0c;这一过程通常是递归的 简单入门 import torch from torch import nn from torch.nn import functional as F# …

【分布式系统案例课】计数服务之需求收集和总架构设计

面试题 对B站视频观看量进行实时的计数 技术问题是一个比较普遍的问题&#xff0c;比如对头条作者的粉丝或者是对获赞进行计数。或者是对企业的业务指标进行计数&#xff0c;例如注册登录下单数这些等。 需求澄清 问题一&#xff1a;用户点击观察视频之后&#xff0c;这个数量…

Gateway网关组件(在Spring Cloud整合Gateway(idea19版本))

Spring Cloud Gateway官网:Spring Cloud Gateway 局域网中就有网关这个概念&#xff0c;局域网接收数据或发送数据都要通过网关&#xff0c;比如使用VMware虚拟机软件搭建虚拟机集群的时候&#xff0c;往往我们需要选择IP段中的⼀个IP作为网关地址,网关可以对请求进行控制,提升…

Shell第三章——循环语句与函数

循环&#xff1a;重复执行一段代码的结构&#xff0c;通过循环可以在满足一定的条件之下多次执行相同的代码。 循环语句&#xff1a;包换循环体&#xff0c;代码的总结构&#xff0c;循环条件&#xff0c;当循环条件满足时&#xff0c;循环体的代码才会执行&#xff0c;条件不…

RabbitMQ-同步和异步通讯、安装和入门案例、SpringAMQP(5个消息发送接收Demo,jackson消息转换器)

文章目录 1.初识MQ1.1.同步和异步通讯1.1.1.同步通讯1.1.2.异步通讯 1.2.技术对比&#xff1a; 2.快速入门2.1.安装RabbitMQ2.2.RabbitMQ消息模型2.3.导入Demo工程2.4.入门案例2.4.1.publisher实现2.4.2.consumer实现 2.5.总结 3.SpringAMQP3.1.Basic Queue 简单队列模型3.1.1.…

【设计模式】23种设计模式——工厂模式(原理讲解+应用场景介绍+案例介绍+Java代码实现)

工厂模式 需求了解 看一个披萨的项目&#xff1a;要便于披萨种类的扩展&#xff0c;要便于维护 披萨的种类很多(比如 GreekPizz、CheesePizz 等)披萨的制作有 prepare&#xff08;准备材料&#xff09;,bake&#xff08;烘焙&#xff09;,cut&#xff08;切割&#xff09;,b…

Hive SQL 迁移 Flink SQL 在快手的实践

摘要&#xff1a;本文整理自快手数据架构工程师张芒&#xff0c;阿里云工程师刘大龙&#xff0c;在 Flink Forward Asia 2022 生产实践专场的分享。本篇内容主要分为四个部分&#xff1a; Flink 流批一体引擎 Flink Batch 生产实践 核心优化解读 未来规划 点击查看原文视频…