跳转到内容

极速问诊

刀刀

1/2/2025

0 字

0 分钟

枚举定义

枚举的作用是表示一组明确可选的值,和字面量类型配合联合类型类似。

枚举可以定义一组常量,使用该类型后,约定只能使用这组常量中的其中一个。

tsx
// 创建枚举类型
enum Direction { Up, Down, Left, Right }

// 使用枚举类型
const changeDirection = (direction: Direction) => {
  console.log(direction)
}

// 调用函数时,需要应该传入:枚举 Direction 成员的任意一个
// 类似于 JS 中的对象,直接通过 点(.)语法 访问枚举的成员
changeDirection(Direction.Up)
  • 通过枚举访问其成员,成员的值是什么?
    • 默认从 0 开始自增的数值
  • 可以修改其成员的值吗?
    • Up = 10 , 后面是从 10 开始自增
  • 成员的值可以使用字符串吗?
    • Up = 'Up' 可以,但是后面的值都需要使用字符串。
  • 如果这组可选值语义很高,如 topic | knowledge | doc | disease ,使用字面量配合联合类型更简单些

⚠ 注意

更推荐使用 ts 文件定义枚举而不是使用 .d.ts ,枚举的值经常需要在运行的时候使用,d.ts 不参与运行。

全部可选

用户输入信息是一步步输入的,因此需要信息全部修改为可选状态。TypeScript 中 Required 转换为全部必须;Partial 转换为全部可选 两个内置的泛型类型。

Vue3 hook 变量存储

Vue3 状态管理仓库比起使用 Vuex,更推荐使用 Pinia 。通过 hook 的思想导出变量和方法供外部使用。示例代码如下:

js
import { defineComponent } from 'vue';
import { useStore } from 'pinia';

export default defineComponent({
  setup() {
    const store = useStore();

    return {
      count: store.count,
    };
  },
});

在项目中,问诊信息分为多个页面获取,把整体变量放到 Pinia 中,依次导出变量属性修改的函数,需要使用的地方 导入 使用即可。

代码示例
js
import type { ConsultType } from '@/enums'
import type { PartialConsult } from '@/types/consult'
import { defineStore } from 'pinia'
import { ref } from 'vue'

export const useConsultStore = defineStore(
    'cp-consult',
    () => {
        const consult = ref<PartialConsult>({})
        // 设置问诊类型
        const setType = (type: ConsultType) => (consult.value.type = type)
        // 设置极速问诊类型
        const setIllnessType = (type: 0 | 1) => (consult.value.illnessType = type)
        // 设置科室
        const setDep = (id: string) => (consult.value.depId = id)
        // 设置病情描述
        const setIllness = (
            illness: Pick<PartialConsult, 'illnessDesc' | 'illnessTime' | 'consultFlag' | 'pictures'>
        ) => {
            consult.value.illnessDesc = illness.illnessDesc
            consult.value.illnessTime = illness.illnessTime
            consult.value.consultFlag = illness.consultFlag
            consult.value.pictures = illness.pictures
        }
        // 设置患者
        const setPatient = (id: string) => (consult.value.patientId = id)
        // 设置优惠券
        const setCoupon = (id?: string) => (consult.value.couponId = id)
        // 清空记录
        const clear = () => (consult.value = {})
        return { consult, setType, setIllnessType, setDep, setIllness, setPatient, setCoupon, clear }
    },
    {
        persist: true
    }
)

websocket

如何使用客户端js库?

shell
pnpm add socket.io-client

如何建立连接?

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

如何确定连接成功?

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

如何发送消息?

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

如何接收消息?

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

如何关闭连接?

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

小结:sockt.io 在前端使用的js库需要知道哪些内容?

  • 如何建立链接 io('地址')
  • 连接成功的事件 connect
  • 如何发消息 emit + 事件
  • 如何收消息 on + 事件
  • 如果关闭连接 close()