vue 绘制体温单与三测单组件 实现前端js打印

2023-11-04

更新: 代码开源 https://github.com/mydaoyuan/my-development   

有帮助请帮忙点个 start 。企鹅:1534815114

新上 麻醉单 和 患者时间轴 在下面地址就可以看到。

------------------------------------------------------------

新的一个版本完全重写了体温单,完全使用svg绘制。 访问地址: 新版三测单

特点:

  • 纯svg开发,兼容各类主流框架,如 react 、Vue、 angular、 jsp 、HTML等等
  • 开箱即用,数据抽离,直接对接接口数据即可引入
  • 支持打印,可以选pdf 或者图片下载
  • 灵活二开自定义字段配置化 :直接修改配置即可进行自定义扩展字段,代码注释齐全
  • 支持自定义尺寸。

更新线条================================================================ 

在线访问地址: 三测单体温单体温图

本文介绍如何使用 vue 绘制 体温单(又名三测单)

体温单

体温单又称为三测单,是电子病历的一部分。医院体温单绘制主要用于记录患者的生命体征及有关情况,内容包括患者姓名、年龄、性别、科别、床号、入院日期、住院号、日期、住院天数、手术后天数、脉搏、呼吸、体温、血压、出入量、大便次数、体重、身高、页码等。一周(7天)一张,每天记录6次病人信息。

组件使用vue 技术栈开发,使用d3进行图表渲染。

体温单数据结构

数据机构方面主要分为3大块。分别为患者信息数据、图表展示数据、每日数据展示。

患者信息

患者信息只有一份,所以使用简单的keyvalue形式存储即可,例如: {name:'患者名称’, hospital: '测试医院名称’},在vue中获取数据进行渲染即可。

图表展示

图表数据存储了每一次记录的数据方便绘制图表,我们需要知道每个绘制点的坐标信息,坐标信息由X轴时间, Y轴数值构成,所以我们必须包含时间和数值两个字段,再加上一个类型字段,就可以把图表的所有数据塞入一个List中,一起渲染。
例如体温 一周就是 7 * 6 = 42条数据。每条数据里面包含了 日期、时间、类型、类型数值这4个值。
例如
{
    date: '2020-12-25',
    time: '03:00:00',
    code: ' 体温',
    value: '30'
}

每日数据

每日数据和图表数据类似,都是需要重复渲染的,所以也需要一个List进行保存,按照时间纬度区分。
例如:
{
    date: '2020-12-25',
    times: null,
    code:  '体重',
    value: ’86'
}

打印

打印功能实现利用window print原生 api实现。核心思想是采用一个 iframe 标签,动态渲染出需要打印的 DOM范围。
// 生成iframe代码
function generateHtmlCodeInfo(option) {
    option = option || {}
    var id = 'iframeId'
    var style = `
body {
overflow: hidden;
}
`
    const code =
        `
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<script>
function removeIframe(id) {
var child = window.parent.document.getElementById(id)
child.parentElement.removeChild(child)
}
</script>
<script type="text/javascript">
var insertFunc = ${option.insertFunc} || function () {}
var events
window.addEventListener('beforeprint', function(event) {
console.log('beforeprint');
});
window.addEventListener('afterprint', (event) => {
console.log('afterprint');
// 清除iframe
removeIframe('${id}')
});
var reportViewer
function window_onload() {
printtable()
}

function printtable() {
setTimeout(() => {
printtable()
}, 10);
}
</script>
<style>
${style}
</style>
</head>
<body onload="window_onload()">
<div id="report_holder"></div>
</body>
</html>`

    return {
        id,
        code
    }
}

// 生成打印iframe
function htmlRuilangGenerateIframe(reportUrl, rowData, option) {
    var codeInfo = generateHtmlCodeInfo(reportUrl, rowData, option, keys)
    var iframe = document.createElement('iframe')
    iframe.setAttribute(
        'style',
        'position:absolute;width:0px;height:0px;border: 0;'
    )
    iframe.id = codeInfo.id
    document.body.appendChild(iframe)
    var ifrmaeDoc = iframe.contentWindow.document
    ifrmaeDoc.write(codeInfo.code)
    ifrmaeDoc.close()
}

需要注意打印完成后需要清理 iframe元素,及时清理不必要的内存,也可以使用单例模式,选择复用一个iframe做打印功能,本次采用了打印后清理的方式。
使用了vue router的同学也可以选择直接指定 iframe地址,指向需要打印的页面。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue 绘制体温单与三测单组件 实现前端js打印 的相关文章

  • Google reCaptcha 永远加载

    我在我的网站上使用 Google 的 reCaptcha 2 0 它曾经运行良好 但自从我向公众开放我的网站并获得了更多用户后 recaptcha 不再适用于大多数用户 它加载得很好 但一旦用户单击 我不是机器人 复选框 它会永远加载并且从
  • 使用 npm 作为构建工具连接文件

    我最近发现我可以使用 npm 作为任务运行程序 而不是 gulp 或 grunt 到目前为止 一切都很棒 lint stylus jade uglify watch 等 但串联部分 我似乎无法实现 gulp 是这样的 gulp task s
  • 无法填充名为“status”的数组

    我正在尝试做一些非常简单的事情 在 Javascript 中初始化一个数组 而且它在 Google Chrome 中不起作用 这是代码 status for i 0 i lt 8 i status i false alert status
  • 获取请求的客户端 IP 地址而不是 Cloudflare 的 IP 地址

    Cloudflare 会更改传入请求的 IP 地址 因为 Cloudflare 是我的网站和互联网之间的中间件 代理 我该怎么办获取请求的初始IP地址 而不是 Cloudflare 的 IP 地址 我听说过mod cloudflare但是这
  • jQuery 验证日期范围问题

    我的代码中有很多地方有成对的相关开始和结束日期字段 范围 我需要验证开始日期早于结束日期 我正在使用 jQuery 验证插件 这是我的代码 http jsfiddle net jinglesthula dESz2 http jsfiddle
  • 如何在提交表单之前删除自动数字格式?

    我正在使用 jQuery 插件自动数字 http www decorplanit com plugin 但是当我提交表单时 我无法删除之前字段上的格式POST 我尝试使用 input autonumeric destroy 和其他方法 但它
  • 光滑的旋转木马不工作

    我一直在尝试简单地实现 Slick Carousel 的工作 我已按照 Git 页面上的说明进行操作 https github com kenwheeler slick https github com kenwheeler slick 这
  • Typescript:如何在自定义过滤器中使用角度 $filter

    如何在自定义过滤器中使用 Angular filter 如何注入 filter依赖 module Filters export class CustomFilter public static Factory return function
  • TRACKER:错误TRK0005:无法找到:“CL.exe”。该系统找不到指定的文件

    我尝试在 Windows 8 上的 Node js 项目中执行以下命令 npm 安装 电子邮件受保护 cdn cgi l email protection 但我收到一个错误 我不知道如何处理 TRACKER 错误TRK0005 无法找到 C
  • Rails 递归地包含 javascripts 资源文件夹

    我了解如何将一个 JavaScript 文件添加到 Rails 资产管道中 只需添加 require filename 到 application js 但是如何在一个文件夹下包含多个 javascript 文件 vendor assets
  • JavaScript:从 JavaScript 调用锚标记的点击事件

    我有一个带有锚标记的页面 在我的 JavaScript 中 我设置HREF锚标记的属性基于一些 if else 条件动态变化 现在我想以编程方式调用锚标记的单击事件 我使用了下面的代码 但没有成功 var proxyImgSrc CostM
  • EJS在JS onload函数中访问express变量

    我知道你可以像这样获取 ejs 文件中变量的值 h1 h1 如果我要在同一个 ejs 页面的 onload javascript 函数中使用相同的标题变量 我将如何使用它 例如 这个函数产生一个控制台错误说 未捕获的语法错误 意外的标识符
  • 如何将函数传递给 JavaScript Web Worker

    我想通过一个 或多个 函数传递postMessage 给网络工作者 因为我无法引用常规文件 为了启动 Web Worker 我将一个对象 URL 从 Blob 创建 传递给Worker构造函数 然后我传递一条消息 但到目前为止还没有在消息中
  • 如何检查元素的内容是否为空,如果是,则在 jquery 中删除该元素

    我目前正在尝试选择某个 div 内没有内容的任何 h2 元素并将其删除 这是我的 html 代码 div class skipToContainer h2 class vidSkipTo Hello h2 h2 class vidSkipT
  • 在 HTML5 中将两个图像合并到一个画布上

    我正在使用 HTML5 canvas 元素 假设我有 2 个 ImageData 对象 我想将它们组合起来放在一张画布上 假设我不关心这些图像如何组合 两个 ImageData 对象具有完全相同的像素数和形状 组合两个图像的最佳方式是什么
  • Phonegap facebook 插件:android 的各种问题

    我正在尝试将 Phonegap 3 1 与 Phonegap facebook plugin 集成 以使我的应用程序能够使用 facebook 登录 https github com phonegap phonegap facebook p
  • 如何生成 JavaScript 堆栈跟踪? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 关于如何以跨浏览器的方式在 javascript 中生成堆栈跟踪有什么建议吗 较新的浏览器 Chrome 和 Firefox 公开了一个允
  • 父指令属性更改时子指令不会更新

    这是对这两个问题的后续 在父指令和子指令之间传递参数 https stackoverflow com questions 42814530 pass argument between parent and child directives
  • Javascript:更改输入值时设置光标位置

    当您输入公式时 我试图在我的应用程序中重现类似于 Microsoft Excel Google Sheets 的用户体验 并且您可以使用不同的公式和变量来自动完成下拉菜单 为此 在验证自动完成功能后 我希望能够控制光标的位置 例如 如果我输
  • 如何修复nodejs Express服务器中的“MulterError:意外字段”?

    我正在设置一个服务器来从客户端上传 zip 文件 服务器运行express和multer来执行此操作 上传文件时 服务器抛出 MulterError 意外字段 错误 我无法弄清楚是什么导致了它 我尝试过使用 png 图像 效果很好 但对于

随机推荐

  • C语言文件读写命令

    C语言把磁盘文件看成是字符 或字节 的序列 按照存储信息的形式来说 文件主要是有文本文件和二进制文件 文本文件由一个个字符组成 每个字节存放一个ASCII码制 代表一个字符 二进制文件把内存中的数据按其在内存中的存储形式原样放入磁盘空间 二
  • Linux编程基础之文本文件末尾自动加换行

    目录 前言 hello txt 文件内容 证明 总结 前言 操作系统 Fedora 文本文件末尾会自动加换行 利用 off t oldpos lseek fd 0 SEEK END 指针定位会到最后一个字符 都是换行符 后面一位 相当于什么
  • c++基础学习

    创建c 程序 include
  • ISCC2023全国大学生网络信息安全竞赛

    竞赛入口 http www isclab org cn 1 竞赛简介 信息安全已涉及到国家政治 经济 文化 社会和生态文明的建设 信息系统越发展到它的高级阶段 人们对其依赖性就越强 从某种程度上讲其越容易遭受攻击 遭受攻击的后果越严重 网络
  • linux创建新用户

    1 添加用户 adduser test 设置密码 passwd test 2 添加root权限 1 chmod 755 etc sudoers vi etc sudoers 文件 找到下面一行 把前面的注释 去掉 Allows people
  • 数据集市项目的总结

    本人毕业就在某银行信用卡中心工作 做了数据集市项目 据说投资3000万 后来在阿里做数据产品经理的工作 想把过去的工作总结一下 不管成功和失败 都是一种经历 于是有了下面的文字
  • 使用二分法实现在一个有序列表中查找指定的元素

    二分法是一种快速查找的方法 时间复杂度低 逻辑简单易懂 总的来说就是不断的除以2除以2 例如需要查找有序数组arr里面的某个关键字key的位置 那么首先确认arr的中位数或者中点center 下面分为三种情况 1假如arr center g
  • es多字段分组去重统计

    es多字段分组去重统计 oracle中sql select a1 b1 from dual group by a1 b1 或 select DISTINCT a1 b1 from dual es分组去重统计 话不多说 直接贴代码 Terms
  • 【云原生之kubernetes】kubernetes集群下ConfigMap使用方法

    云原生之kubernetes kubernetes集群下ConfigMap使用方法 一 ConfigMap介绍 1 ConfigMap介绍 2 ConfigMap特点 二 生成一个ConfigMap示例 1 命令生成 2 configmap
  • uboot学习之Makefile之配置过程

    uboot 1 1 6源码分析 分析配置过程 1 安装交叉编译工具arm linux gcc 否则编译报错 2 执行make canmb config MKCONFIG a canmb ppc mpc5xxx canmb 1 MKCONFI
  • 自动化测试入门

    1 初识自动化测试 如果以前没有做过自动化测试 那么就不了解自动化测试 可能会觉得自动化测试比较神秘 但是 我们在日常的计算机操作中 可能会碰到一些自动化处理的过程 这些过程和自动化测试比较接近 例如 Windows操作系统的控制面板中 有
  • windows 控制台通过密码连接redis

    Redis 访问密码设置 1 修改密码 打开redis conf文件 先使用字符匹配查找到requirepass foobared对应的位置 然后修改foobared成自己想要的密码 并删除当前行前面的 注释 然后保存退出 2 重启redi
  • Vulkan-NCNN 编译

    首先安装一些依赖 sudo install build essentials git cmake libprotobuf dev protobuf compiler libvulkan dev glslang tools vulkan to
  • 第28章 案例开发

    第28章 案例开发 视频讲解 23分钟 对于JavaScript初学者来说 尝试开发小型的难度适中的应用程序或游戏 能够培养学习乐趣 激发开发热情 本章将通过两个相对复杂的案例 帮助读者上机进行JavaScript实战训练 为日后的开发实习
  • Region拆分逻辑

    Table of Contents Region拆分 拆分前提 获取拆分点 执行拆分 回滚操作 Region拆分 Region的拆分逻辑是通过CompactSplitThread线程的requestSplit方法来触发的 每当执行Memst
  • 【论文阅读 - AAAI 2019】Abstractive Summarization: A Survey of the State of the Art

    Abstractive Summarization A Survey of the State of the Art Conference AAAI 2019 Authors Hui Lin Vincent Ng Human Languag
  • overpass-turbo下载铁路线

    overpass turbo This has been generated by the overpass turbo wizard The original search was road out json rel 198494 out
  • 打印 request 参数

    Enumeration parameterNames request getParameterNames while parameterNames hasMoreElements Object param parameterNames ne
  • Linux 命令总结

    目录操作 命令名 功能描述 使用举例 mkdir 创建一个目录 mkdir dirname rmdir 删除一个目录 rmdir dirname mvdir 移动或重命名一个目录 mvdir dir1 dir2 cd 改变当前目录 cd d
  • vue 绘制体温单与三测单组件 实现前端js打印

    更新 代码开源 https github com mydaoyuan my development 有帮助请帮忙点个 start 企鹅 1534815114 新上 麻醉单 和 患者时间轴 在下面地址就可以看到 新的一个版本完全重写了体温单