8.vue3医疗在线问诊项目 - _问诊室模块-websocket学习 ==> 消息卡片、websocket、socket.io、约定通讯规则、建立连接

news2024/11/25 22:47:49

8.vue3医疗在线问诊项目 - _问诊室模块img-websocket学习 ==> 消息卡片、websocket、socket.io、约定通讯规则、建立连接

问诊室-路由与组件

目标:配置路由和分析结构

image-20221012183509186

1)路由配置

    {
      path: '/room',
      component: () => import('@/views/room/index.vue'),
      meta: { title: '问诊室' }
    },

问诊室-消息卡片

目标:了解问诊室消息卡片类型

组件 Room/components/RoomMessage.vue

  1. 病情描述
  <div class="msg msg-illness">
    <div class="patient van-hairline--bottom">
      <p>李富贵 男 31岁</p>
      <p>一周内 | 未去医院就诊</p>
    </div>
    <van-row>
      <van-col span="6">病情描述</van-col>
      <van-col span="18">头痛、头晕、恶心</van-col>
      <van-col span="6">图片</van-col>
      <van-col span="18">点击查看</van-col>
    </van-row>
  </div>
  1. 温馨提示-通知
  <div class="msg msg-tip">
    <div class="content">
      <span class="green">温馨提示:</span>
      <span>在线咨询不能代替面诊,医护人员建议仅供参考</span>
    </div>
  </div>
  1. 通知
  <div class="msg msg-tip">
    <div class="content">
      <span>医护人员正在赶来,请耐心等候</span>
    </div>
  </div>
  1. 发送文字
  <div class="msg msg-to">
    <div class="content">
      <div class="time">20:12</div>
      <div class="pao">大夫你好?</div>
    </div>
    <van-image src="https://yjy-oss-files.oss-cn-zhangjiakou.aliyuncs.com/tuxian/popular_3.jpg" />
  </div>
  1. 发送图片
  <div class="msg msg-to">
    <div class="content">
      <div class="time">20:12</div>
      <van-image
        fit="contain"
        src="https://yjy-oss-files.oss-cn-zhangjiakou.aliyuncs.com/tuxian/popular_3.jpg"
      />
    </div>
    <van-image src="https://yjy-oss-files.oss-cn-zhangjiakou.aliyuncs.com/tuxian/popular_3.jpg" />
  </div>
  1. 接收文字
  <div class="msg msg-from">
    <van-image src="https://yjy-oss-files.oss-cn-zhangjiakou.aliyuncs.com/tuxian/popular_3.jpg" />
    <div class="content">
      <div class="time">20:12</div>
      <div class="pao">哪里不舒服</div>
    </div>
  </div>
  1. 处方消息
  <div class="msg msg-recipe">
    <div class="content">
      <div class="head van-hairline--bottom">
        <div class="head-tit">
          <h3>电子处方</h3>
          <p>原始处方 <van-icon name="arrow"></van-icon></p>
        </div>
        <p>李富贵 男 31岁 血管性头痛</p>
        <p>开方时间:2022-01-15 14:21:42</p>
      </div>
      <div class="body">
        <div class="body-item" v-for="i in 2" :key="i">
          <div class="durg">
            <p>优赛明 维生素E乳</p>
            <p>口服,每次1袋,每天3次,用药3天</p>
          </div>
          <div class="num">x1</div>
        </div>
      </div>
      <div class="foot"><span>购买药品</span></div>
    </div>
  </div>
  1. 订单取消
  <div class="msg msg-tip msg-tip-cancel">
    <div class="content">
      <span>订单取消</span>
    </div>
  </div>

小结:

  • 知道问诊室大概有哪些消息卡片(类型)

问诊室-websocket

目标:认识websocket

什么是 websocket ? https://websocket.org/

  • 是一种网络通信协议,和 HTTP 协议 一样。

为什么需要websocket ?

  • 因为 HTTP 协议有一个缺陷:通信只能由客户端发起。

理解 websokect 通讯过程

了解 websocket api含义

// 创建ws实例,建立连接
var ws = new WebSocket("wss://javascript.info/article/websocket/demo/hello");

// 连接成功事件
ws.onopen = function(evt) { 
  console.log("Connection open ...");
  // 发送消息
  ws.send("Hello WebSockets!");
};
// 接受消息事件
ws.onmessage = function(evt) {
  console.log( "Received Message: " + evt.data);
  // 关闭连接  
  ws.close();
};
// 关闭连接事件
ws.onclose = function(evt) {
  console.log("Connection closed.");
};      

说明:我们项目中使用 socket.io-client 来实现客户端代码,它是基于 websocket 的库。

问诊室-socket.io使用

目的:掌握 socket.io 的基本使用

  1. socket.io 什么?
    • socket.io 是一个基于 WebSocket 的 CS(客户端-服务端)的实时通信库
    • 使用它可以在后端提供一个即时通讯服务
    • 它也提供一个 js 库,在前端可以去链接后端的 socket.io 创建的服务
    • 总结:它是一套基于 websocket 前后端即时通讯解决方案
  2. 我们需要掌握的客户端几个 api 的基本使用

如何使用客户端js库?

pnpm add socket.io-client

如何建立连接?

import { io } from 'socket.io-client'
// 参数1:不传默认是当前服务域名,开发中传入服务器地址
// 参数2:配置参数,根据需要再来介绍
const socket = io()

如何确定连接成功?

socket.on('connect', () => {
  // 建立连接成功
})

如何发送消息?

// chat message 发送消息事件,由后台约定,可变
socket.emit('chat message', '消息内容')

如何接收消息?

// chat message 接收消息事件,由后台约定,可变
socket.on('chat message', (ev) => {
  // ev 是服务器发送的消息
})

如何关闭连接?

// 离开组件需要使用
socket.close()

小结:

  • sockt.io 在前端使用的js库需要知道哪些内容?
    • 如何建立链接 io('地址')
    • 连接成功的事件 connect
    • 如何发消息 emit + 事件
    • 如何收消息 on + 事件
    • 如果关闭连接 close()

问诊室-通讯规则

知道前后端ws通信事件以及定义数据的类型

  1. 前后台约定通讯的一些事件

image-20220829154759024

chatMsgList 接收聊天记录

sendChatMsg 发送消息

receiveChatMsg 接收消息

statusChange 接收订单状态改变

  1. 前后台约定的消息数据的类型

enums/index.ts

// 消息类型
export enum MsgType {
  // 文字
  MsgText = 1,
  // 图片
  MsgImage = 4,
  // 患者
  CardPat = 21,
  // 处方
  CardPre = 22,
  // 未评价
  CardEvaForm = 23,
  // 已评价
  CardEva = 24,
  // 通用系统
  Notify = 31,
  // 温馨提示
  NotifyTip = 32,
  // 取消订单
  NotifyCancel = 33
}

// 处方状态
export enum PrescriptionStatus {
  // 未支付
  NotPayment = 1,
  // 已支付
  Payment = 2,
  // 无效
  Invalid = 3
}

// 问诊订单状态
export enum OrderType {
  // ----------------问诊订单------------------
  // 待支付
  ConsultPay = 1,
  // 待接诊
  ConsultWait = 2,
  // 咨询中
  ConsultChat = 3,
  // 已完成
  ConsultComplete = 4,
  // 已取消
  ConsultCancel = 5,
  // ----------------药品订单------------------
  // 待支付
  MedicinePay = 10,
  // 待发货
  MedicineSend = 11,
  // 待收货
  MedicineTake = 12,
  // 已完成
  MedicineComplete = 13,
  // 已取消
  MedicineCancel = 14
}

types/room.d.ts

import { MsgType, PrescriptionStatus } from '@/enums'
import type { Consult, Image } from './consult'
import type { Patient } from './user'

// 1. 聊天-消息中包含处方和药品类型
// 药品
export type Medical = {
  id: string
  name: string
  amount: string
  avatar: string
  specs: string
  // 用量
  usageDosag: string
  quantity: string
  // 是否是处方药
  prescriptionFlag: 0 | 1
}
// 处方
export type Prescription = {
  id: string
  orderId: string
  createTime: string
  name: string
  recordId: string
  gender: 0 | 1
  genderValue: string
  age: number
  // 诊断信息
  diagnosis: string
  status: PrescriptionStatus
  // 药品订单
  medicines: Medical[]
}

// 2. 聊天-评价医生
export type EvaluateDoc = {
  id?: string
  score?: number
  content?: string
  createTime?: string
  creator?: string
}

// 3. 聊天-消息类型
// 消息类型:聊天-接收对话信息api
export type Message = {
  id: string
  msgType: MsgType
  // 发消息的人ID
  from?: string
  fromAvatar?: string
  // 收消息的人ID
  to?: string
  toAvatar?: string
  createTime: string
  // 具体消息内容
  msg: {
    // 文字类型
    content?: string
    // 图片类型
    picture?: Image
    // 患者卡片
    consultRecord?: Consult & {
      patientInfo: Patient
    }
    // 处方信息
    prescription?: Prescription
    // 评价信息
    evaluateDoc?: EvaluateDoc
  }
  // 是否需要滚动
  notScroll?: boolean
}

// 消息分组:聊天-查询历史聊天记录api
export type TimeMessages = {
  createTime: string
  items: Message[]
  orderId: string
  sid: string
}

问诊室-建立连接

实现:问诊app和后台ws服务建立连接

步骤:

  • 安装 sokect.io-client 包
  • 在组件挂载完毕,进行socket连接
  • 监听连接成功,监听错误消息,监听关闭连接
  • 组件卸载关闭连接

代码:

  1. 安装 sokect.io-client 包
pnpm add sokect.io-client
  1. 建立连接

views/room/index.vue

import { onMounted, onUnmounted } from 'vue'
import { useUserStore } from '@/stores'
import { useRoute } from 'vue-router'
import { io, type Socket } from 'socket.io-client'
import { baseURL } from '@/utils/request'

const store = useUserStore()
const route = useRoute()

let socket: Socket

// 组件销毁时关闭连接
onUnmounted(() => {
  socket.close()
})

// 组件挂载建立连接
onMounted(async () => {
  // 建立链接,创建 socket.io 实例
  socket = io(baseURL, {
    auth: {
      token: `Bearer ${store.user?.token}``
    },
    query: {
      orderId: route.query.orderId
    }
  })

    // 如果连接建立成功就会执行这个函数
  socket.on('connect', () => {
    // 建立连接成功
    console.log('connect')
  })

    // 捕捉错误
  socket.on('error', (event) => {
    // 错误异常消息
    console.log('error')
  })

    // 断开连接时执行这里
  socket.on('disconnect', ()=> {
    // 已经断开连接
    console.log('disconnect')
  })
})

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

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

相关文章

UNIX网络编程卷一 学习笔记 第二十章 广播

本书迄今为止的所有例子都是单播&#xff1a;一个进程与另一个进程通信。TCP只支持单播寻址&#xff0c;而UDP和原始IP还支持其他寻址类型&#xff0c;下图比较了不同的寻址方式&#xff1a; IPv6往寻址体系中增加了任播&#xff08;anycasting&#xff09;方式。RFC 1546讲述…

章节5:04-shiro反序列化漏洞

章节5&#xff1a;04-shiro反序列化漏洞 复现环境 本地tomcat或Docker vulhub 基础环境&#xff1a; IDEA Maven Tomcat Burp JDK8版 01 Shiro介绍 Shiro Apache Shiro&#xff1a;开源安全框架 身份验证授权会话管理加密 本地代码 https://github.com/apache/shi…

Iptables防火墙策略

目录 一、iptables netfilter/iptables 关系 二、四表五链 三、iptables的安装 iptables 命令行配置方法 管理选项 一、iptables Linux 系统的防火墙——netfilter/iptables IP信息包过滤系统&#xff0c;它实际上由两个组件netfilter 和 iptables组成。 主要工作在网络…

MATLAB与大数据:如何应对海量数据的处理和分析

第一章&#xff1a;引言 在当今数字化时代&#xff0c;大数据已经成为了各行各业的核心资源之一。海量的数据源源不断地涌现&#xff0c;如何高效地处理和分析这些数据已经成为了许多企业和研究机构面临的重要挑战。作为一种功能强大的数学软件工具&#xff0c;MATLAB为我们提供…

深度剖析InnoDB存储结构

大家都知道 MySQL 的数据都是存储在物理磁盘上的&#xff0c;那具体是保存在哪个文件呢&#xff1f;我们首先要知道MySQL 存储的行为是由存储引擎实现的&#xff0c;不同的存储引擎保存的文件自然也不同。由于InnoDB 是我们常用的存储引擎&#xff0c;也是 MySQL 默认的存储引擎…

Spring Cloud Alibaba - Sentinel源码分析(二)

目录 一、Sentinel源码分析 1、时间窗算法 2、滑动时间窗算法 3、Sentinel滑动时间窗口算法源码解析 4、Sentinel滑动窗口数据统计源码解析 一、Sentinel源码分析 1、时间窗算法 时间窗算法&#xff0c;也可以称之为&#xff1a;固定时间窗算法 概念&#xff1a;固定时…

015:vue项目中常用的正则表达式

第015个 查看专栏目录: VUE — element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使用…

【RV1126】使用gpiolib框架

文章目录 史上最简单&#xff1a;增加GPIO控制功能是如何实现的呢&#xff1f;GPIOLIB框架Linux 驱动实现 控制引脚输出高低电平综合测试 这一套非常方便&#xff01; 史上最简单&#xff1a;增加GPIO控制功能 如果是想增加GPIO控制只需要修改设备树就可以做到&#xff01; …

谷粒商城第二天-项目环境搭建

目录 一、前言 二、学习的内容 一、虚拟平台的安装&#xff0c;远程连接虚拟机的工具的安装 二、Docker以及常用软件的安装 一、安装Docker&#xff1a; 二、安装相关软件 三、开发环境的统一 1. 这里就是调整Maven的下载依赖的地址&#xff0c;改用阿里云镜像地址 2. …

11.vue3医疗在线问诊项目 - _药品订单 ==> 支付页面、支付详情、支付结果、订单详情、物流信息、高德地图工具

11.vue3医疗在线问诊项目 - _药品订单 &#xff1e; 支付页面、支付详情、支付结果、订单详情、物流信息、高德地图工具 药品订单-支付页面-路由 目标&#xff1a;配置路由&#xff0c;分析药品支付组件结构 1&#xff09;路由与组件 {path: /medicine/pay,component: () >…

系列十一、MongoDB副本集

一、概述 MongoDB副本集&#xff08;Replica Set&#xff09;是有自动故障恢复功能的主从集群&#xff0c;有一个Primary节点和一个或者多个Secondary节点组成。副本集没有固定的主节点&#xff0c;当主节点发生故障时&#xff0c;整个集群会选举一个主节点 为系统提供服务以保…

大数据测试基本知识

常用大数据框架结构 1.大数据测试常用到的软件工具 工具推荐&#xff0c;对于测试数据构造工具有&#xff1a;Datafaker、DbSchema、Online test data generator等&#xff1b;ETL测试工具有&#xff1a;RightData、QuerySurge等&#xff1b;数据质量检查工具&#xff1a;great…

SpringBoot医药管理系统设计+第三稿+文档

博主介绍&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 项目名称 SpringBoot医药管理系统设计第三稿文档 视频演示 SpringBoot医药管理系统设计第三稿中期检查表ppt外文文献翻译文献综述开题任务书查重报告安装视频讲…

【计算机网络】第五章数据链路层-电子科技大学2023期末考试

第五章 数据链路层 学习目的 目的1&#xff1a;理解链路层服务的主要功能 差错检查、纠错 共享广播信道&#xff1a;多点接入问题(multiple access) 链路层寻址(link layer addressing) 局域网技术&#xff1a;Ethernet, VLANs 目的2&#xff1a;链路层技术的实现 点到点…

【Java入门】-- Java基础详解之【程序控制结构】

目录 1.程序流程控制介绍 2.顺序控制 3.分支控制if-else 4.嵌套分支 5.switch分支语句 6.for循环控制&#xff08;重点&#xff09; 7.while循环控制 8.do...while循环控制 9.多重循环控制&#xff08;重难点&#xff01;&#xff09; 10.跳转控制语句break 11.跳转…

计算机课程个性化内容推荐系统的设计与实现+文档等

博主介绍&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 项目名称 计算机课程个性化内容推荐系统的设计与实现文档等 视频演示 计算机课程个性化内容推荐系统的设计与实现 系统介绍 计算机课程个性化内容推荐系统的设…

Car Guide

文章目录 科目一第一章 机动车驾驶证申领和使用规定第一节 驾驶证的许可&#xff1f;种类和有效期第二节 驾驶证的申领第三节 驾驶证的使用第四节 驾驶考试第五节 违法记分制度 第二章 交通信号第一节 交通信号灯第二节 交通标志第三节 交通标线第四节 交警手势 第三章 道路交通…

Ansible之playbooks剧本

目录 一、playbooks1、playbooks简述2、playbooks剧本格式3、playbooks组成部分4、playbooks启动 二、playbook编写 apache 的yum安装部署剧本三、playbook编写 nginx 的yum安装并且能修改其监听端口的剧本四、 playbook的定义、引用变量1、基础变量的定义与引用2、引用fact信息…

Stable Diffusion webui 基础参数学习

哈喽&#xff0c;各位小伙伴们大家好&#xff0c;最近一直再研究人工智能类的生产力&#xff0c;不得不说随着时代科技的进步让人工智能也得到了突破性的发展。而小编前段时间玩画画也是玩的不可自拔&#xff0c;你能想想得到&#xff0c;一个完全不会画画的有一天也能创作出绘…

【计算机网络】第一章概论-电子科技大学2023期末考试

相关术语 URI&#xff1a;Uniform Resource Identifier 统一资源标识符&#xff0c;指的是一个资源 URL&#xff1a;Uniform Resource Location 统一资源定位符&#xff0c;URI的子集&#xff0c;用地址定为的方式指定一个资源 URN&#xff1a;Uniform Resource Name 统一资…