You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
klhis/hcemr/emrBasePage.html

994 lines
43 KiB

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>HCEmrViewLib Demo</title>
<script type="text/javascript" src="./HCEmrViewLib.min.js?v=5"></script>
<script type="text/javascript" src="./WatEvent.js?v=2"></script>
<script src="./select/js/jquery_3.3.1.min.js"></script>
<script language="javascript" type="text/javascript" src="./layer/layer.js"></script>
<script type="text/javascript">
// 数据元类型
var TItemStyle = {
Null: -1,
Image: -2, // 图片
Table: -3, // 表格
Tab: -4, // TAB键
Line: -5, // 直线
Express: -6, // 公式
Vector: -7, // 矢量图
Domain: -8, // 域
PageBreak: -9, // 分页
CheckBox: -10, // 勾选框
Gif: -11, // GIF动画
Control: -12, // 控件
Edit: -13, // Edit 文本框
Combobox: -14, // Combobox 下拉弹出框
QRCode: -15, // 二维码
BarCode: -16, // 一维码
Fraction: -17, // 分数
DateTimePicker: -18, // 日期时间控件
RadioGroup: -19, // RadioGroup 单选、多选控件
SupSubScript: -20, // 同时上下标
Button: -21, // 按钮控件
FloatLine: -101, // 浮动直线
FloatBarCode: -102, // 浮动一维码
Custom: -1000
}
// 数据元属性
var TDeProp = {
Index: "Index", // 唯一索引
Code: "Code", // 编码
Name: "Name", // 名称
Frmtp: "Frmtp", // 类别,见TDeFrmtp枚举
Unit: "Unit", // 单位
HideUnit: "HdUnit", // 是否隐藏单位,比如血压的收缩压不显示单位
PreFormat: "PRFMT", // 表示格式
Raw: "Raw", // 原始数据
CMV: "CMV", // 受控词汇表(值域代码)
CMVVCode: "CMVVCode", // 受控词汇编码(值编码)
Trace: "Trace", // 痕迹信息
Secret: "Secret", // 是否属于隐私信息
}
// 数据元类型
var TDeFrmtp = {
Radio: "RS", // 单选
Multiselect: "MS", // 多选
Number: "N", // 数值
String: "S", // 文本
Date: "D", // 日期
Time: "T", // 时间
DateTime: "DT" // 日期和时间
}
// 痕迹样式
var TStyleExtra = {
None: 0, // 无
Del: 1, // 删除
Add: 2 // 添加
}
var TGroupProp = {
Index: "Index",
Name: "Name",
SubType: "RT",
Propertys: "Propertys"
}
var emrView;
function getBase64ByUrl (src, callback, outputFormat) {
var xhr = new XMLHttpRequest();
xhr.open("GET", src, true);
xhr.responseType = "arraybuffer";
xhr.onload = function(e) {
if (xhr.status == 200) {
var uInt8Array = new Uint8Array(xhr.response);
var i = uInt8Array.length;
var binaryString = new Array(i);
while (i--)
binaryString[i] = String.fromCharCode(uInt8Array[i]);
var data = binaryString.join('');
var base64 = window.btoa(data);
var dataUrl = "data:" + (outputFormat || "image/png") + ";base64," + base64;
callback.call(this, dataUrl);
}
}
xhr.send();
}
function getFileAsBytes(src, callback) {
var xhr = new XMLHttpRequest();
xhr.open("GET", src, true);
xhr.responseType = "arraybuffer";
xhr.onload = function(e) {
if (xhr.status == 200) {
var vBytes = new Uint8Array(xhr.response);
callback.call(this, vBytes);
}
}
xhr.send();
}
function load() {
emrView = new THCEmrViewLib({
hcServer: "http://127.0.0.1:12880/", // HC服务端IP
//hcServer: "http://139.9.152.193:12880/", // HC服务端IP
//hcServer: "http://123.206.99.69:12880/", // HC服务端IP
//hcServer: "http://192.168.1.122:12880/",
//hcServer: "http://192.168.5.104:12880/",
//hcServer: "http://192.168.20.100:12880/",
//hcServer: "http://192.168.20.100:12880/", // HC服务端IP
baseUrl: "./", // 编辑器需要的资源路径
el: "divHCEmrView", // 编辑器父容器的ID
defaultFontSize: "小四", // 编辑器默认字号,默认小四
defaultFontFamily: "宋体", // 编辑器默认字体,默认宋体
paperSize: "A4", // 纸张大小
paperOrientation: 0, // 纸张方向 0纵向 1横向,默认0
designMode: true, // 是否设计模式,也可以使用emrView.designMode = true;
// multItemEditValue: true, // 多选数据元选项上屏后,再次点击直接编辑内容,使用右键菜单重新选择
//deUnDoneColor: "#FF8C00", // 没选过选项或没写过内容时数据元背景色
//deDoneColor: "#AFEEEE", // 填写或选择过选项的数据元背景色
//deHotColor: "#87CEFA", // 鼠标移动上去时的颜色
// 工具条
toolBar: {
visible: true, // 是否整体显示顶部工具条,也可以使用emrView.toolBar.visible = false;
//height: 35, // 设置工具栏高度
// 文件按钮
btnFile: {
visible: 1
},
// 打印按钮
btnPrint: {
visible: true,
},
// 外部自定义按钮
// btnCustoms: [
// {
// text: "保存关键词",
// exec: function() {
// console.log("保存关键词");
// var steamData = emrView.SaveToLiteBytes();
// var emrData = new EmrToWatData("B","saveLiteByte",steamData);
// watEvents.emrToWatEvent(emrData);
// }
// }
// ]
},
// 右键菜单中添加自定义菜单
contextMenu: [
// {
// // 菜单名
// text: "添加诊断",
// // 菜单点击事件
// exec: function() {
// appendLine("点击了菜单:添加诊断");
// emrView.InsertText("添加诊断");
// },
// },
// {
// text: "插入数据从HIS",
// exec: function() { appendLine("点击了菜单:插入数据从HIS"); },
// // 子菜单
// subMenu: [
// {
// text: "插入检查",
// exec: function() {
// appendLine("点击了菜单:插入检查");
// emrView.InsertText("插入检查");
// },
// },
// {
// text: "插入医嘱",
// exec: function() {
// appendLine("点击了菜单:插入医嘱");
// emrView.InsertText("插入医嘱");
// },
// }
// ]
// }
],
// 事件
event: {
// 编辑器状态变化时触发:从未修改状态变为修改状态,或从修改状态变为未修改状态,
onChangedSwitch: function() {
if (emrView.IsChanged){
}else{
}
},
onCaretItemChanged: function() {
},
// 点击了编辑器工具栏上的保存按钮时触发
onSave: function() {
feedbackEmrStreamToWat();
},
// 鼠标点击数据元触发,如果数据元的信息有变化,可以这里重新赋值
onPopupGetDeItemInfo: function(item) {
var data = new EmrToWatData("S","DeItemInfo","{"+item.ToJSONString()+"}");
watEvents.emrToWatEvent(data);
//return watEvents.getDeItemDomain(data,watEvents.url);
///if (item.Index == "495") { // 性别
// 点击数据元时,给数据元通过item.Index重新同步最新信息的机会,响应此事件,需要返回frmtp,数值类的需要返回单位deunit,单选多选要返回选项值域domainid
//item.SetValue(TDeProp.Frmtp, TDeFrmtp.Radio);
//item.SetValue(TDeProp.CMV, "271"); // 值域,271是数据库里性别元素的值域代码,实际可以通过e.index判断是哪个数据元,返回类别,如果是单选或多选类型同时要返回值域
//item.SetValue(TDeProp.Frmtp, TDeFrmtp.Number); // 类别,RS:单选 MS:多选 N:数值 S:文本 D:日期 T:时间 DT:日期时间
//item.SetValue(TDeProp.Unit, "岁,月,天,小时"); // 数值类的要传递单位
//}
},
// 编辑器中插入了新的Item时触发,也可创建后赋值emrView.OnInserItemSync
onSectionInsertItem: function(section, data, item) {
if (item.StyleNo == TItemStyle.RadioGroup)
item.OnSetItemChecked = function(radiogroup) {
//console.log("radiogroup 有选项勾选状态变化");
let viewData = emrView.InnerView.ActiveSectionTopLevelData();
if (viewData) {
//if (viewData.Script != "")
{
let vItemNo = viewData.GetItemNo(radiogroup);
//vFn = new Function("view", "data", "itemNo", "action", viewData.Script);
vFn = new Function("view", "data", "itemNo", "action",
"if (action == 0) { " +
"let vDomainInfo = data.GetItemDomain(itemNo);" +
"let curDeGroupIndex = data.Items[vDomainInfo.beginNo].Index;"+
"for (let i = vDomainInfo.beginNo + 1; i < vDomainInfo.endNo; i++) {" +
"if (data.Items[i].StyleNo == -19 &&i != itemNo && !data.Items[i].MultSelect ){" + // -19可根据脚本运行环境决定是否替换为THCStyle.RadioGroup或TItemStyle.RadioGroup
"let vDomainInfoTemp = data.GetItemDomain(i);" +
"if (vDomainInfoTemp.beginNo >= 0 && data.Items[vDomainInfoTemp.beginNo].Index == curDeGroupIndex ) {" +
"data.Items[i].SetAllChecked(false);" +
"}"+
"}" +
"}" +
"}"
);
try {
vFn(emrView, viewData, vItemNo, 0);
} catch (e) {
console.log(e.message); // 显示脚本错误信息
}
vFn = null;
}
}
}
},
// 单选或多选数据元获鼠标点击后,显示选项时触发,可在这里把选项传递到编辑器中
onPopupGetDeItemDomain: function(cmv) {
//appendLine("onPopupGetDeItemDomain 选项类数据元点击时请求选项 参数:" + cmv);
console.log("onPopupGetDeItemDomain 选项类数据元点击时请求选项 参数:" + cmv);
var data = new EmrToWatData("S","EMR004",cmv);//编辑器初始化完成
var vs = watEvents.getDeItemDomain(data,watEvents.url);
//var vs = '{"cv": [{"value": "皮疹", "code": "1", "id": 689, "py": "PZ", "content": ""},'
// + '{"value": "皮下出血", "code": "2", "id": 690, "py": "PZCX", "content": ""}'
// + ']}';
return vs;
// if (cmv == 271) { // 值域ID,271是性别值域ID
// var vs = '{"cv": [{"value": "男性", "code": "1", "id": 3681, "py": "NX", "content": ""},'
// + '{"value": "女性", "code": "2", "id": 3682, "py": "NX", "content": ""},'
// + '{"value": "未知(描述原因)", "code": "9", "id": 3683, "py": "WZ", "content": "..."}'
// + ']}';
// return JSON.parse(vs);
// } else if (cmv == 299) {
// var vs = '{"cv": [{"value": "静脉无曲张", "code": "1", "id": 681, "py": "JMWQZ", "content": ""},'
// + '{"value": "静脉曲张(有曲张描述血流方向)", "code": "2", "id": 682, "py": "JMQZ", "content": ""}'
// + ']}';
// return JSON.parse(vs);
// } else if (cmv == 272) {
// var vs = '{"cv": [{"value": "皮疹", "code": "1", "id": 689, "py": "PZ", "content": ""},'
// + '{"value": "皮下出血", "code": "2", "id": 690, "py": "PZCX", "content": ""}'
// + ']}';
// return JSON.parse(vs);
// }
},
// 数据元选项有扩展内容时,获取扩展内容
onPopupGetDomainItemExtraLib: function(item, cvvid) {
var data = new EmrToWatData("S","getLiteByte",item.Index);//编辑器初始化完成
watEvents.getLiteByte(data,watEvents.url);
},
// 当编辑器在加载文档或插入了新的Item时触发,便于外部替换数据元的值
onInserItemSync: function(sender, data, item) {
},
// 当编辑器中的Combobox控件点击了下拉按钮,显示选项时触发
onDeComboboxPopup: function(cmbxItem) {
if (cmbxItem.Index == 495) { // 是性别
if (!cmbxItem.SaveItem) { // combobox自己没有保存选项
if (cmbxItem.Items.count > 0)
cmbxItem.Clear();
cmbxItem.AddItem("男", "1");
cmbxItem.AddItem("女", "2");
}
}
},
// 判断当前情况下是否能编辑,此事件在引起内容变化的时候触发,较频繁,所以不要写复杂的业务
onCanEdit: function(data) {
if (emrView.EditProcIndex != "") // 当前指定了要编辑的病程
return emrView.CaretProcInfo.Index == emrView.EditProcIndex; // 光标所在病程和当前允许编辑的病程Index相同
else
return true;
},
// 数据元右键菜单中的 更新引用 点击后触发的事件
onDeItemGetSyncValue: function(item) {
if (item.Index == "494") // 姓名
return "李四福";
},
// 点了打印并在浏览器里显示了要打印的文件
onPrinted: function(type) {
// type 0打印全部或1-n页,1按行续打,2选中范围续打
},
onInitialization: function(){
var jsonData = new EmrToWatData("S","EMR001","emr001");//编辑器初始化完成
feedbackDataToWat(JSON.stringify(jsonData));
},
// 编辑器双击事件,查看属性
onDblClick: function() {
//var deGroupCode = emrView.GetCaretDeGroupProperty(TDeProp.Code);
//var deGroupIndex = emrView.GetCaretDeGroupProperty(TDeProp.Index);
var deGroupInfo = emrView.GetCaretDeGroupProperty(TDeProp.Index);
if (deGroupInfo != "") {
var propertys = emrView.GetCaretDeGroupProperty("Propertys","json");//json对象
var data = new EmrToWatData("S","DeGroupInfo",propertys);
watEvents.emrToWatEvent(data);
}
},
}
});
// 向工具栏中添加按钮
// emrView.AddToolButton(
// [
// {
// text: "自定义",
// exec: function() {
// alert("点击了自定义按钮2");
// }
// }
// ]
// );
// 向编辑器的右键菜单中添加菜单
emrView.AddContextMenu(
[
{
text: "保存关键词",
exec: function() {
var steamData = emrView.SaveToLiteBytes();
var emrData = new EmrToWatData("B","saveLiteByte",steamData);
watEvents.emrToWatEvent(emrData);
}
},
{
text:"删除病程标识",
exec:function(){
emrView.InnerView.DeleteAllProcMark();
}
}
]
);
// 插入普通文本
// emrView.InsertText("姓名:");
// // 插入性别数据元,如果有赋值onInserItemSync方法,会在其中替换为实际的患者姓名
// var vDeItem = emrView.InsertDeItem({
// Index: "494",
// Name: "姓名",
// });
// //vDeItem.SetValue(); // 设置数据元的属性
// // 插入DeCombobox示例
// var vDeCombobox = emrView.InsertDeCombobox({
// Index: "4955",
// Name: "性别",
// Static: true, // 是否只能通过选项赋值(不能输入内容),true是,false否
// ReadOnly: false, // 是否只读,只读后不能修改内容
// SaveItem: true, // 是否保存选项(保存选项会增加文件体积)
// PrintOnlyText: true, // 打印时只打印文字,不打印按钮
// Items: [ // 插入时添加选项,注意如果要将选项保存到病历文件中,需要设置vDeCombobx.SaveItem = true;
// {
// Text: "男性",
// TextValue: "1",
// Checked: true,
// },
// {
// Text: "女性",
// TextValue: "2",
// Checked: false,
// },
// ]
// });
// 插入RadioGroup示例
// var vDeRadioGroup = emrView.InsertDeRadioGroup({
// Index: "495",
// Name: "性别",
// Style: "Radio", // Radio:圆点 CheckBox:勾选
// MultSelect: "0", // 单选or多选 0单选 1多选
// AutoSize: false, // 根据内容自动计大小
// Columes: 2, // 以几列显示
// ColumnAlign: true, // 列自动对齐
// ItemHit: true, // 点击文件就算选中 false点击圆点或勾选框才算选中
// Width: 300,
// Items: [ // 选项
// {
// Text: "未知的性别",
// TextValue: "0",
// Checked: false,
// },
// {
// Text: "男",
// TextValue: "1",
// Checked: true,
// },
// {
// Text: "女",
// TextValue: "2",
// Checked: false,
// },
// {
// Text: "未说明的性别",
// TextValue: "9",
// Checked: false,
// }
// ]
// });
// 插入表格示例
// var vDeTable = emrView.InsertDeTable({
// RowCount: 3,
// ColCount: 3,
// Rows: [ // 行s
// { // 第1行
// Cells: [ // 列s
// { // 第1列
// Text: "第一行第一列"
// },
// {
// },
// {
// Text: "第一行第三列"
// }
// ]
// },
// {
// },
// {
// Cells: [
// {
// Text: "第三行第一列"
// }
// ]
// }
// ]
// });
// var vMuDeItem = emrView.InsertDeItem({
// Index: "201", // 数据元唯一ID
// Name: "皮疹及出血", // 数据元名称
// Text: "有皮疹、皮下出血", // 默认内容,注意设置默认内容后数据元的是否填写过值为true 如果想置为false,需要设置 AllocValue: "0"
// Frmtp: TDeFrmtp.Multiselect, // 多选
// CMV: "272", // 值域ID
// CMVVCode: "1,2", // 选择的选项Code,以英文逗号分隔
// ItemMutex: "1", // 多选时选项互拆
// });
}
function applyTextStyle(style) {
// 设置选中的文本设置样式
emrView.ApplyTextStyle(style);
}
function applyParaAlignHorz(align) {
// 设置当前光标所在的段水平对齐
emrView.ApplyParaAlignHorz(align);
}
function LoadFromBytes(bytes) { // 二进制数组
// 加载文件,文件数据是byte数组
emrView.LoadFromBytes(bytes);
}
function saveToStream() {
// 保存文件,返回文件数据的byte数组
return emrView.SaveToStream();
}
function insertDeItem() {
// 插入数据元
emrView.InsertDeItem(
// {
// Index: "499",
// Name: "静脉曲张",
// //Text: "静脉无曲张",
// //CMVVCode: "1",
// Frmtp: TDeFrmtp.Multiselect,
// CMV: "299"
// }
{
"CMV": "1000000062",
// "CMVVCode": "",
// "code": "",
"Frmtp": "MS",
// "hideUnit": "",
"Index": "1000000062",
"Name": "皮肤颜色",
// "preFormat": "",
// "raw": "",
// "secret": "",
// "trace": "",
// "unit": ""
}
);
}
function getDeItemText(index) {
// 获取指定index的数据元的内容
// var vInfo = emrView.GetDeItemText(index);
// if (vInfo.result) { // 取到了
// appendLine("取到数据元内容:" + vInfo.text); // 取到的内容
// console.log(vInfo);
// }else{
// appendLine("未取到数据元内容");
// }
// console.log("emrView.getDeItem:"+emrView.getDeItem(index));
}
function getDeItemProperty(index, propName) {
// 获取指定index的数据元的指定属性内容
var vInfo = emrView.GetDeItemProperty(index, propName);
if (vInfo.result) // 取到了
console.log("取到数据元属性:" + vInfo.text); // 取到的内容
else
console.log("未取到数据元属性内容");
}
function insertDeGroup(index, name) {
// 插入数据组
emrView.InsertDeGroup({
Index: index,
Name: name,
});
}
function setDeGroupText(index, s) {
emrView.SetDeGroupText(index, s);
}
function getDeGroupText(index) {
console.log(index + "数据组内容:" + emrView.GetDeGroupText(index));
}
function insertDeImage(index, name) {
// 仅插入空白占位图片,实际业务中再替换成相应的图片
emrView.InsertDeImage({
Index: index,
Name: name
});
// 直接插入图片
// getBase64ByUrl("./image/qm.png", function(base64) {
// emrView.InsertDeImage({
// Index: index,
// Name: name,
// Base64: base64,
// ImageType: "png"
// });
// });
}
function setSignatureGraphic(index) {
// 替换签名图片
getBase64ByUrl("./image/qm.png", function(base64) {
emrView.SetDeImage({
Index: index,
Base64: base64
});
});
}
/* 遍历编辑器中的数据元时,每遍历到一个数据元触发
此方法参数使用编辑器内置的原生Item对象,注意相关的属性大小写
*/
function traverseFun(data, itemNo, tag, domainStack, stop) {
let vItem = data.Items[itemNo];
let dataElement = new Object();
if (vItem.StyleNo == -8) { // 数据组
if (vItem.IsProcBegin)
console.log("病程开始--------唯一标识:" + vItem.Index);
else if (vItem.IsProcEnd){
console.log("病程结束--------唯一标识:" + vItem.Index);
}
else if (vItem.MarkType == 0){
console.log("数据组开始--------Index:" + vItem.Index);
dataElement.Index = vItem.Index;
dataElement.Code = vItem.Code;
dataElement.Name = vItem.Name;
dataElement.DataType="1";
emrView._emrDataElement.push(dataElement);
}
else{
console.log("数据组结束--------Index:" + vItem.Index);
}
} else if (vItem.StyleNo > -1) { // 文本
if (vItem.IsElement){
dataElement.Index = vItem.Index;
dataElement.Code = vItem.Code;
dataElement.Name = vItem.Name;
dataElement.Frmtp = vItem.Frmtp;
dataElement.Format = vItem.GetValue('Format');
dataElement.DataType="0";
emrView._emrDataElement.push(dataElement);
}
else
console.log("自然文本 Text:" + vItem.Text); // 原生Item文本属性Text(大写T开始)
} else if(vItem.StyleNo == -19){//radioGroup
dataElement.Index = vItem.Index;
dataElement.Code = vItem.Code;
dataElement.Name = vItem.GetValue("Name");
dataElement.DataType="2";
emrView._emrDataElement.push(dataElement);
// let tList = vItem.FItems;
// for(let i =0 ;i<tList.length;i++){
// if(tList[i].FChecked == true){//被选中
// dataElement.SelectedValue= tList[i].TextValue;
// }
// }
}
}
// 遍历编辑器中的数据元
function traverseElement() {
/*emrView.TraverseElement(fun, areas, tag)需要3个参数
fun表示每遍历到一个元素时触发的事件
areas是个集合,表示要遍历的文档区域,集合的成员是1:页眉、2:正文、4:页脚,areas为null时表示全部区域(正文,页眉,页脚)
tag遍历标识,用于区域本次遍历是完成什么业务,可根据需要赋值
*/
console.log("开始遍历文档-----------------------------");
let vAreas = new Set([]);
// vAreas.add(1);
vAreas.add(2);
// vAreas.add(4);
emrView._emrDataElement = new Array();
emrView.TraverseElement(traverseFun, vAreas, 0);
console.log(emrView._emrDataElement);
}
// 插入病程
function insertProc() {
getFileAsBytes("./file/首次病程记录.hcf", function(bytes) {
if (bytes.length == 0)
return;
// 病程时间,实际业务应该取服务端时间
var vDate = new Date();
var vDateTime = vDate.getFullYear() + (vDate.getMonth() + 1).toString()
+ vDate.getDate() + vDate.getHours() + vDate.getMinutes() + vDate.getSeconds();
// 病程属性,可添加病程控制相关的属性,每个属性是一个键值对,多个属性以\r\n分隔
var vPropertys = TGroupProp.Name + "=首次病程记录\r\nuser=jt\r\ndt=" + vDateTime; // 用户jt,日期vDateTime
// 病程唯一ID,这里使用了当前时间,实际业务使用时可换为业务里的病程唯一ID生成规则
var vProcIndex = vDateTime;
// 在指定的病程(ID为vBeforProcIndex)前面插入新病程,如为""表示在最后插入病程
var vBeforProcIndex = "";
// 当前病历是否没有病程,即要插入的病程是否为整个病历的第一个病程
var vFirstProc = emrView.ProcCount == 0;
emrView.ReadOnly = false; // 病历切换为非只读
// 插入病程标识
if (emrView.InsertProc(vProcIndex, vPropertys, vBeforProcIndex)) { // 插入病程标识成功
console.log("插入病程,标识为:" + vProcIndex);
emrView.EditProcIndex = vProcIndex; // 当前编辑的病程为新插入的病程
emrView.SetProcBytes(vProcIndex, bytes); // 设置当前病程的内容s
if (vFirstProc) { // 是整个病历的第一个病程
emrView.BeginUpdate(); // 开启批量更新,提高效率
try {
emrView.LoadHeaderFromBytes(bytes); // 加载页眉
emrView.LoadFooterFromBytes(bytes); // 加载页脚
} finally {
emrView.EndUpdate();
}
}
}
emrView.ClearUndo(); // 清空撤销记录,防止用户把新插入的病程撤销了
});
}
// 取指定Inex的病程内容
function getProc() {
var procIndex = document.getElementById("procIndex").value;
//var text = emrView.GetProcAsText(procIndex); // 返回病程内容文本
//var bytes = emrView.GetProcAsBytes(procIndex); // 返回病程内容Byte数组(二进制)
var html = emrView.GetProcAsHtml(procIndex); // 返回病程内容Html格式
var vWindow = window.open("", "", "width=" + emrView.ActiveSection.PaperWidthPix);
vWindow.document.write(html);
vWindow.focus();
}
// 编辑光标处病程
function editCaretProc() {
emrView.EditProcIndex = emrView.CaretProcInfo.Index;
}
// 取病程属性信息
function getProcProperty() {
var procIndex = document.getElementById("procIndex").value;
// 取病程所有属性信息
//appendLine("病程" + procIndex + "的属性信息:" + emrView.GetProcProperty(procIndex, TGroupProp.Propertys));
// 取病程Name属性
console.log("病程" + procIndex + "的属性信息:" + emrView.GetProcProperty(procIndex, TGroupProp.Name));
}
// 开启关闭痕迹
function setTrace() {
emrView.Trace = !emrView.Trace;
if (emrView.Trace)
document.getElementById("btnTrace").innerHTML = "关闭留痕";
else
document.getElementById("btnTrace").innerHTML = "开启留痕";
}
// 在留痕模式下,对新痕迹添加痕迹信息
function setTraceInfo() {
// 痕迹时间,实际业务应该取服务端时间
var vDate = new Date();
var vDateTime = vDate.getFullYear() + "-" + (vDate.getMonth() + 1).toString()
+ "-" + vDate.getDate() + " " + vDate.getHours() + ":" + vDate.getMinutes() + ":" + vDate.getSeconds();
var vDeItem;
if (emrView.Trace) { // 当前是留痕模式
let vAreas = new Set([]);
vAreas.add(2);
emrView.TraverseElement(
function (data, itemNo, tag, domainStack, stop) {
vDeItem = data.Items[itemNo];
if (vDeItem.StyleNo > -1) { // 是文本
switch (vDeItem.StyleEx) {
case TStyleExtra.None: {
if (vDeItem.GetValue(TDeProp.Trace) != "")
vDeItem.SetValue(TDeProp.Trace, "");
}
break;
case TStyleExtra.Del: {
if (vDeItem.GetValue(TDeProp.Trace) == "") // 新的删除痕迹
vDeItem.SetValue(TDeProp.Trace, "荆通(jt " + vDateTime + ")删除");
}
break;
case TStyleExtra.Add: {
if (vDeItem.GetValue(TDeProp.Trace) == "") // 新的添加痕迹
vDeItem.SetValue(TDeProp.Trace, "荆通(jt " + vDateTime + ")添加");
}
break;
}
}
},
vAreas, 0);
}
else
console.log("当前不是留痕模式");
}
/**------------------------------------------------------------xgf 2020年7月23日 10:18:45 begin -------------------------------------------------**/
function GetQueryString(name){
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if(r!=null){
return unescape(r[2]);
}
return null;
}
function feedbackDataToWat(data){
return window.parent.top.DxURLPage.action(GetQueryString('strwinid'),GetQueryString('strctrid'),data);
}
//病历二进制数据返回给平台
function feedbackEmrStreamToWat(asyn){
var steamData = saveToStream();
var emrData = new EmrToWatData("B","saveEMRByte",steamData);
watEvents.emrToWatEvent(emrData,asyn);
}
//病历xml数据返回给平台
function feedbackEmrXmlToWat(){
var xmlData = emrView.SaveToXml();
console.log(xmlData);
var emrData = new EmrToWatData("B","saveEMRXml",xmlData);
watEvents.emrToWatEvent(emrData);
}
function watResultToIFrame(data){
var jsonData = JSON.parse(data);
console.log("平台传入的数据event:"+jsonData.event);
// console.log("平台传入的数据data:"+jsonData.data);
watEvents.watToEMREvent(jsonData);
}
//数据传递对象
/**
接受平台数据
dataType:"",//数据类型,
event:""//数据来源,类别。业务类别,emr001=编辑器init完成。
data:{}
**/
function EmrToWatData(dataType,event,data){
this.dataType = dataType;//
this.event = event;
this.data = data;
}
function InsertDeCombobox(){
emrView.InsertDeCombobox({
Index: "495",
Name: "性别",
Static: true, // 是否只能通过选项赋值(不能输入内容),true是,false否
ReadOnly: false, // 是否只读,只读后不能修改内容
SaveItem: true, // 是否保存选项(保存选项会增加文件体积)
PrintOnlyText: true, // 打印时只打印文字,不打印按钮
Items: [ // 插入时添加选项,注意如果要将选项保存到病历文件中,需要设置vDeCombobx.SaveItem = true;
{
Text: "男性",
TextValue: "1",
Checked: true,
},
{
Text: "女性",
TextValue: "2",
Checked: false,
},
]
})
}
function InsertDeRadioGroup(){
emrView.InsertDeRadioGroup({
Index: "495",
Name: "性别",
Style: "CheckBox", // Radio:圆点 CheckBox:勾选
MultSelect: "0", // 单选or多选 0单选 1多选
AutoSize: true, // 根据内容自动计大小
Columes: 2, // 以几列显示
ColumnAlign: true, // 列自动对齐
ItemHit: true, // 点击文件就算选中 false点击圆点或勾选框才算选中
Width: 300,
Items: [ // 选项
{
Text: "未知的性别",
TextValue: "0",
Checked: false,
},
{
Text: "男",
TextValue: "1",
Checked: true,
},
{
Text: "女",
TextValue: "2",
Checked: false,
},
{
Text: "未说明的性别",
TextValue: "9",
Checked: false,
}
]
});
}
function InsertDeCheckBox(){
emrView.InsertDeCheckBox(
{
Index: "495",
Name: "性别",
Style: "CheckBox", // Radio:圆点 CheckBox:勾选
Static: true, // 是否只能通过选项赋值(不能输入内容),true是,false否
ReadOnly: false, // 是否只读,只读后不能修改内容
SaveItem: true, // 是否保存选项(保存选项会增加文件体积)
PrintOnlyText: true, // 打印时只打印文字,不打印按钮
Items: [ // 插入时添加选项,注意如果要将选项保存到病历文件中,需要设置vDeCombobx.SaveItem = true;
{
Text: "男性",
TextValue: "1",
Checked: true,
},
{
Text: "女性",
TextValue: "2",
Checked: false,
},
]
}
);
}
// const interval=1000*60;
// var t_time = setTimeout(function(){
// if(emrView.IsChanged){
// console.log(new Date());
// var steamData = emrView.SaveToBytes();
// var emrData = new EmrToWatData("B","saveEMRByte",steamData);
// window.parent.top.DxURLPage.action(GetQueryString('strwinid'),GetQueryString('strctrid'),JSON.stringify(emrData));
// setTimeout(arguments.callee,interval)
// }
// },interval);
// console.log(t_time);
/**------------------------------------------------------------xgf 2020年7月23日 10:18:45 end -------------------------------------------------**/
</script>
</head>
<body style="height: 100%;" onload="load()">
<div id="divHCEmrView" style="left: 2px; top: 0px; position: fixed; width: 100%; height:100%; background: lightgray;"></div>
</body>
</html>