当前位置:   article > 正文

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

svg做三测单

更新: 代码开源 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个值。
例如
  1. {
  2. date: '2020-12-25',
  3. time: '03:00:00',
  4. code: ' 体温',
  5. value: '30'
  6. }

每日数据

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

打印

打印功能实现利用window print原生 api实现。核心思想是采用一个 iframe 标签,动态渲染出需要打印的 DOM范围。
  1. // 生成iframe代码
  2. function generateHtmlCodeInfo(option) {
  3. option = option || {}
  4. var id = 'iframeId'
  5. var style = `
  6. body {
  7. overflow: hidden;
  8. }
  9. `
  10. const code =
  11. `
  12. <html>
  13. <head>
  14. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  15. <meta name="viewport" content="width=device-width, initial-scale=1" />
  16. <script>
  17. function removeIframe(id) {
  18. var child = window.parent.document.getElementById(id)
  19. child.parentElement.removeChild(child)
  20. }
  21. </script>
  22. <script type="text/javascript">
  23. var insertFunc = ${option.insertFunc} || function () {}
  24. var events
  25. window.addEventListener('beforeprint', function(event) {
  26. console.log('beforeprint');
  27. });
  28. window.addEventListener('afterprint', (event) => {
  29. console.log('afterprint');
  30. // 清除iframe
  31. removeIframe('${id}')
  32. });
  33. var reportViewer
  34. function window_onload() {
  35. printtable()
  36. }
  37. function printtable() {
  38. setTimeout(() => {
  39. printtable()
  40. }, 10);
  41. }
  42. </script>
  43. <style>
  44. ${style}
  45. </style>
  46. </head>
  47. <body onload="window_onload()">
  48. <div id="report_holder"></div>
  49. </body>
  50. </html>`
  51. return {
  52. id,
  53. code
  54. }
  55. }
  56. // 生成打印iframe
  57. function htmlRuilangGenerateIframe(reportUrl, rowData, option) {
  58. var codeInfo = generateHtmlCodeInfo(reportUrl, rowData, option, keys)
  59. var iframe = document.createElement('iframe')
  60. iframe.setAttribute(
  61. 'style',
  62. 'position:absolute;width:0px;height:0px;border: 0;'
  63. )
  64. iframe.id = codeInfo.id
  65. document.body.appendChild(iframe)
  66. var ifrmaeDoc = iframe.contentWindow.document
  67. ifrmaeDoc.write(codeInfo.code)
  68. ifrmaeDoc.close()
  69. }

需要注意打印完成后需要清理 iframe元素,及时清理不必要的内存,也可以使用单例模式,选择复用一个iframe做打印功能,本次采用了打印后清理的方式。
使用了vue router的同学也可以选择直接指定 iframe地址,指向需要打印的页面。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/86066
推荐阅读
相关标签
  

闽ICP备14008679号