/consult-patient-vue3

vue3+ts开发问诊项目

Primary LanguageVueMIT LicenseMIT

快速开始

# 安装依赖
pnpm i

# 运行项目
pnpm dev

# 打包
pnpm build

项目笔记

以下为我本人在开发项目过程中做的一些记录,希望对你有所帮助。

移动端适配

  • 安装插件 pnpm i postcss-px-to-viewport -D
  • 配置 创建postcss.config.js文件
    module.exports = {
    plugins: {
      'postcss-px-to-viewport': {
        viewportWidth: 375
      }
    }
    }
    

自定义主题

  • 在main.scss中
      // 全局css变量 使用场景:项目主题
      :root {
        --main-color: red;
      }
      //局部css变量 使用场景:组件变量
      .footer {
        --footer-color: green;
      }
    
  • 使用 color: var(--main-color);

用户仓库和持久化

  • 设置用户信息类型(参考后端返回的字段)
  • 实现仓库,用户状态,设置用户,删除用户
  • 进行测试
  • 持久化 pnpm i pinia-plugin-persistedstate

仓库统一管理

  • pinia独立维护 初始化代码在main.ts中,仓库代码在stores中,代码分散职能不单一 优化:由stores统一维护,在stores/index.ts中完成pinia初始化,交付main.ts使用
  • 仓库统一导出 使用一个仓库 import { useUserStore } from './stores/user' 不同仓库路径不一致 优化:由stores/index.ts 统一导出,导入路径统一 ./stores,而且维护仓库在stores/modules中

请求工具-axios配置 文件 utils/request.ts

  • axios配置 创建axios实例 基准地址,超时时间 请求拦截器 携带token 响应拦截器 业务失败处理,摘取核心响应数据,401处理
  • 请求函数 函数封装 简化传参逻辑 添加类型 设置响应数据类型

封装请求工具函数 不用传配置对象 不用区分data和params函数内判断

登录

  • 创建登录组件
  • 配置路由
  • 设置路由出口 App.vue

组件自动注册 使用Vant组件比较麻烦,需要先导入组件才可使用 如何实现? 安装组件:pnpm add unplugin-vue-components -D 配置 vite.config.ts 优化点:

  • 解决类型声明文件重复
  • 解决样式引入重复

CpNavBar封装

  • 结构与样式 基于Vant组件二次封装,实现组件结构,覆盖组件样式 固定定位,左侧箭头,标题,右侧文字
  • 功能实现 支持标题和右侧文字,提供右侧文件按钮事件,实现返回功能 回退功能:有访问记录就正常回退 router.back() 没有访问历史记录就跳转到首页 router.push('/')
  • 组件类型 提供组件类型文件,让组件有类型提示

登录

  • 重置样式
  • 准备页面
  • 定制表单

表单校验

  • 校验手机号
  • 校验密码
  • 表单整体校验
  • 勾选协议进行校验

密码登录

  • 登录API函数
  • 进行登录
  • 存储用户信息
  • 成功提示
  • 是否有回跳地址 如果有,根据地址回跳,如果没有,跳转到个人中心

短信登录

  • 切换界面 标题和按钮切换 表单项切换
  • 发送短信验证码 发送前校验 验证码API函数 发送&提示 倒计时&展示
  • 验证码校验
  • 短信登录 短信登录API 合并短信登录

图标组件-打包svg地图 图片格式是png的:合成精灵图,根据定位使用 图片格式是svg的:是xml格式,打包成svg地图,通过ID使用,一次加载,动态使用图片无需import 安装插件 pnpm install vite-plugin-svg-icons -D 配置vite.config.ts

使用svg实现登录输入密码是否可见

Tabbar组件

  • tabbar组件
  • 支持路由切换
  • 自定义图标
  • 图标切换

访问权限控制

  • 全局前置守卫变化 next现在可选,next() 放行,next('/login') 跳转到指定路由(重定向) 返回 false 取消 返回true | undefined 放行 返回路由地址(对象格式)重定向
  • 访问权限控制实现 路由跳转 没有token且不在白名单 重定向到登录,否则放行

动态设置页面标题

  • 路由配置元信息meta中定义标题
  • 路由全局后置守卫设置标题给页面,扩展元信息类型

布局容器-加载进度,切换页面的时候现实进度条

  • 开启进度条 beforeEach
  • 结束进度条 afterEach

个人中心

  • 用户信息类型
  • 用户信息展示 准备基础结构 定义API函数 获取数据 完成渲染
  • 快捷工具 准备基础结构 初始化数据 完成渲染
  • 退出登录

家庭档案

  • 患者列表 路由和组件结构 定义患者类型 患者列表API 获取数据渲染
  • 添加患者 v-model语法糖 子组件::modelValue和@update:modelValue 封装单选组件 组件结构 渲染选项(动态设置可选选项) 选中和切换功能 支持v-model 侧滑添加弹窗 popup组件 nav支持关闭 准备表单 表单数据绑定 修改类型 数据绑定 支持复选框 重置表单 表单校验 表单项校验 提交时校验 性别确认提示
    实现添加 添加患者API 进行提交
  • 编辑患者 回填表单 区分标题 编辑患者API 合并编辑
  • 删除患者 删除按钮 删除患者API函数 进行删除

首页

  • 搭建页面 组件基础结构 知识列表Tab
  • 列表加载更多效果 卡片&列表 VanList组件 模拟加载更多
  • 知识列表数据类型 响应数据类型 请求参数类型 props类型
  • 知识列表加载功能 知识列表API 准备查询参数 加载列表数据 知识卡片渲染
  • 推荐关注医生 提取组件,定义组件基本结构 van-swipe应用 添加医生卡片基本结构 去除指示器,关闭无缝滚动,色值一次滚动一个卡片
  • 实现适配 适配分析 VueUse实现 扩展原生实现 需求:在375宽度设备,滚动宽带为50 在其它设备需要等比例设置滚动的宽度 scrollWidth = 150 / 375 * deviceWidth 就可以适配
  • 推荐医生展示 医生TS类型 获取医生API 数据和渲染
  • 实现关注医生 关注TS类型 关注API 关注&取消
  • 逻辑复用 封装关注逻辑 实现关注医生 实现关注文章

极速问诊

  • 选择极速问诊 定义问诊仓库 提供记录函数 记录问诊类型
  • 选择问诊级别 准备路由组件 提供记录函数 记录问诊级别
  • 选择科室 准备组件 类型&科室API 渲染&切换 记录问诊科室
  • 填写病情描述 路由组件结构 准备单选按钮 准备表单数据 绑定表单数据 保存数据
  • 选择就诊患者 改造家庭档案 界面兼容 选中患者效果 默认选中效果 记录患者ID
  • 支付问诊费用 获取数据 路由与组件 预支付类型 预支付API 患者详情API 获取数据 生成订单 控制抽屉 生成订单API 实现生成订单 清理&记录订单ID
  • 用户引导 阻止用户返回上页 阻止关闭抽屉 刷新页面后提示
  • 进行支付 支付地址API 获取支付地址&跳转支付 处理支付失败

问诊室

  • 组件拆分 状态栏 操作栏 消息卡片
  • websocket 网络通信协议,和http协议一样,http协议通信只能由客户端发起,不能双向通信 socket.io-client:基于websocket的即时通讯的解决方案,提供后端即时通讯服务,前端连接后端JS库 怎么使用? 服务端提供服务 客户端:怎么建立连接?发消息?收消息?断开连接?
  • 建立连接 初始化Socket 携带token 参数订单ID 绑定常规事件 断开连接
  • 通讯规则与默认消息
  • 默认消息-处理数据 分析数据结构 添加数据类型 转换消息列表 渲染消息 传递数据给组件 展示患者卡片 预览图片 通用消息和提示
  • 接诊状态-订单数据 订单状态枚举 订单详情类型 订单详情API 初始化&状态变更
  • 接诊状态 控制组件 控制状态栏 控制操作栏
  • 文字聊天 发送文字 操作栏传递文字 诊室接收文字 socket发送文字
  • 图片聊天 操作栏提交图片 诊室接收并发送 渲染图片消息
  • 聊天记录 默认看最新消息 实现下拉刷新 记录消息时间 通知服务器 loading&提示
  • 查看处方 医生开处方&渲染 原始处方API 预览原始处方
  • 评价医生 - 结束消息和评价消息 展示结束问诊消息 展示评价卡片组件 收集评价信息

问诊记录

  • 搭建页面 问诊item组件 问诊list组件 问诊记录页面 传入订单类型
  • 加载数据 参数和响应类型 定义问诊记录API 加载问诊记录效果
  • 渲染Item组件 展示基本信息 区别展示操作按钮 更多操作
  • 取消订单 取消订单API函数 取消订单逻辑 使用取消逻辑
  • 删除订单 删除订单API函数 删除订单逻辑 使用删除逻辑
  • 问诊详情 准备路由和组件 加上骨架屏 渲染信息 提取filter函数
  • 展示操作按钮 待支付倒计时 根据状态展示按钮

药品订单

  • 支付信息 预支付信息类型 预支付&地址API 预支付&地址数据 展示页面信息
  • 完成支付 生成药品订单API 生成订单 改造支付抽屉组件 实现药品支付
  • 支付信息 路由与组件布局 药品订单详情类型 药品订单详情API 获取数据渲染
  • 订单详情 路由与组件布局 提取订单详情逻辑 提取药品订单组件 展示订单详情页面
  • 使用高德地图 得到key和jscode 使用jscode加载 初始化地图 配置风格和缩放
  • 绘制起点终点当前运输标记 绘制起点标记 提取创建标记函数 绘制终点运输标记 定位当前运输位置