import store from '@store'; import {CLEAR_MAIN_SUIT} from '@store/types/mainSuit'; import {CLEAR_CURRENT_ILL} from '@store/types/currentIll'; import {CLEAROTHERHISTORY} from '@store/types/otherHistory'; import {CLEARCHECKBODY} from '@store/types/checkBody'; import {clearAssistData,addAssistLabel} from '@store/actions/assistCheck'; import {clearAllLabel,addLabel} from '@store/actions/inspect'; import {CLEAR_ALL_DIAG} from '@store/types/diagnosticList'; import {CLEAR_ALL_PUSH_MESSAGE, SET_TIPS,BILLING_ADVICE} from '@store/types/pushMessage'; import {ISREAD, SETREADDITEMS} from "../store/types/homePage"; import {CLEAR_FIRST_MAIN_DIAG, CLEAR_ALL_TREAT} from "../store/types/treat"; import {tabChange} from '@store/actions/tabTemplate'; import {CLEAR_ASSESS_RESULT_VALUE} from '@types/assessResult'; import config from '@config/index.js'; import up from '@images/up.png'; import down from '@images/down.png'; /*** * 工具函数 * * ***/ const ARR = "Array"; const NUMBER = "Number"; const STRING = "String"; const OBJECT = "Object"; const UNDEFINED = "Undefined"; const NULL = "Null"; const BOOLEAN = "Boolean"; const qs = require('qs'); // 数据类型判断 const Type = { typeConstant: { 'array': ARR, 'number': NUMBER, 'string': STRING, 'object': OBJECT, 'undefined': UNDEFINED, 'null': NULL, 'boolean': BOOLEAN }, tolower: (str)=> { if(typeof str !== "string") { return ""; } return str.toLowerCase(); }, checkType: (el, type)=> { type = Type.tolower(type); type = Type.typeConstant[type]; return Object.prototype.toString.call(el) === "[object "+ type +"]"; } } // 计算字符串长度,该长度将一个中文字算作2个字符长度 const regexp = { ch: (str)=> {//匹配中文 if(typeof str !== "string") { return ""; } return str.match(/[\u4e00-\u9fa5]/g) || ""; }, chLen: function (str) {//中文长度 return regexp.ch(str).length; }, strLen: function (str) {//字符串长度(一个中文当作两个英文字母) if(typeof str !== "string") { return 0; } return str.length + regexp.chLen(str); } } //判断是否空对象或未定义 const isUndefined = function (str) { if(str === 0 || str === "") { return false; } return (Type.checkType(str, 'null') || Type.checkType(str, 'undefined')); } //sessionStorage方法封装 const Storage = { session: { get: function (name) { return JSON.parse(sessionStorage.getItem(name)); }, set: function (name, data) { sessionStorage.setItem(name, JSON.stringify(data)); }, remove: function (name) { sessionStorage.removeItem(name); }, clear: function () { sessionStorage.clear(); } } }; //localStorage方法封装 const storageLocal = { set: function (name, data) { if(!data) { return; } if(typeof data !== 'string') { data = JSON.stringify(data); } localStorage.setItem(name, data); }, get: function (name) { return localStorage.getItem(name); }, remove: function (name) { localStorage.removeItem(name); }, clear: function () { localStorage.clear(); } }; const nullFn = ()=>{}; //是否为空 const isNull = (item)=>{ return String(item)=== "" || String(item)==="null" || String(item)==="undefined"; }; const isNotNull = (item)=>{ return !(isNull(item)); }; //判断是否为ie浏览器 const isIE = () => { //ie? if (!!window.ActiveXObject || "ActiveXObject" in window){ return true; } else{ return false; } } const deepClone = (data)=>{ return JSON.parse(JSON.stringify(data)||null)||{}; }; const getUrlArgObject = (parm) => { let query = window.location.search; let args = qs.parse(query.substr(1)); return args[parm];//返回对象 } const getAllDataList =(baseList) =>{ //获取所有模块结构化的数据 let jsonData = {}; //月经史公式 const other = baseList.otherHistory; jsonData.lis = {}; jsonData.chief = baseList.mainSuit.data; //主诉 jsonData.present = baseList.currentIll.data; //现病史 jsonData.other = other.data; //其他史 jsonData.otherHistoryIsEmpty = other.isEmpty; jsonData['yjs_1'] = other['yjs_1']; jsonData['yjs_2'] = other['yjs_2']; jsonData['yjs_3'] = other['yjs_3']; jsonData['yjs_4'] = other['yjs_4']; jsonData.vital = baseList.checkBody.data; //查体 jsonData.checkBodyIsEmpty = baseList.checkBody.isEmpty; jsonData.lis.labelList = baseList.inspect.labelList; //化验 jsonData.lis.getExcelDataList = baseList.inspect.getExcelDataList; //化验导入 jsonData.checkedListImport = baseList.assistCheck.checkedListImport; //辅检导入 jsonData.pacs = baseList.assistCheck.assistLabel; //辅检 jsonData.diag = baseList.diagnosticList.diagnosticList; //诊断 jsonData.advice = baseList.pushMessage.advice; //医嘱 jsonData.mainSuitSelecteds = baseList.mainSuit.selecteds; //主诉选中状态保存 jsonData.currentIllSelecteds = baseList.currentIll.selecteds; //主诉选中状态保存 jsonData.otherHistorySelecteds = baseList.otherHistory.selecteds; //主诉选中状态保存 jsonData.checkBodySelecteds = baseList.checkBody.selecteds; //主诉选中状态保存 jsonData.addItems = baseList.homePage.addItems||{}; jsonData.mainsuitIds = baseList.mainSuit.mainIds; //主诉去重 jsonData.mainChronicDesease = baseList.mainSuit.chronicDesease; //主诉慢病{} jsonData.diagChronicMagItem = baseList.diagnosticList.chronicMagItem; //诊断慢病{} jsonData.currentIds = baseList.currentIll.symptomIds; //现病史去重 jsonData.isFirstMainDiag = baseList.treat.isFirstMainDiag; //治疗方案 // console.log(jsonData,'结构化数据获取') return jsonData; } const getAllDataStringList =(baseList) =>{ //获取所有模块文本的数据 let jsonDataString = {}; jsonDataString.lis = {}; let chiefData = [],presentData=[],otherData=[],vitalData=[]; if(baseList.mainSuit.saveText.length == 1 && baseList.mainSuit.saveText[0].trim() == ''){ chiefData = [] }else{ chiefData = baseList.mainSuit.saveText } if(baseList.currentIll.saveText.length == 1 && baseList.currentIll.saveText[0].trim() == ''){ presentData = [] }else{ presentData = baseList.currentIll.saveText } const oText = baseList.otherHistory.saveText; if(oText.length == 1 && oText[0] && oText[0].trim() == ''){ otherData = [] }else{ otherData = baseList.otherHistory.saveText } if(baseList.checkBody.saveText.length == 1 && baseList.checkBody.saveText[0].trim() == ''){ vitalData = [] }else{ vitalData = baseList.checkBody.saveText } jsonDataString = { 'chief' : JSON.stringify(chiefData), 'present' : JSON.stringify(presentData), 'other' : JSON.stringify(otherData), 'vital' : JSON.stringify(vitalData), 'lis' : baseList.inspect.inspectStrPlus, 'pacs' : baseList.assistCheck.dataString, 'diag' : baseList.diagnosticList.diagnosticStr, 'advice' : baseList.pushMessage.AdviceStr } // console.log(JSON.stringify(chiefData),chiefData,'文本模式数据获取') return jsonDataString; } /** * * @param {回读数据} reData * @param {回读数据是历史病历'history',还是模板'template'} type * @param {什么操作,回读'push'还是清空'clear'} action * @param {引用的话是保存时候的文本类型,编辑的时候是当前页面设置的文本类型} whichSign */ const pushAllDataList =(whichSign,action,reData,type) =>{ //回读清空所有的数据 if(action == 'clear'){ //清空 const block = Object.assign(JSON.parse(config.textLabel),{full:true});//空白时保留一个自由文本标签 store.dispatch({type: CLEAR_MAIN_SUIT,data:[],saveText:[],selecteds:[],editClear:true,mainIds:[],mainTailIds:[],clearAction:true,symptomFeature:[],chronicDesease:null}); store.dispatch({type: CLEAR_CURRENT_ILL,data:[],saveText:[],selecteds:[],editClear:true,symptomIds:[]}); store.dispatch({type: CLEAROTHERHISTORY,data:[block],isEmpty:true,saveText:[],selecteds:[],editClear:true,yjs_1:'',yjs_2:'',yjs_3:'',yjs_4:''}); store.dispatch({type: CLEARCHECKBODY,data:[block],isEmpty:true,saveText:[],selecteds:[]}); store.dispatch(clearAssistData([],'',[])); store.dispatch(clearAllLabel([],[],'')); store.dispatch({ type: SET_TIPS, tips: {} }) store.dispatch({ type: CLEAR_ALL_DIAG, data:[], saveText:'', mainSuitStr: '', chronicMagItem:null }); store.dispatch({ type: CLEAR_ALL_PUSH_MESSAGE, data:{}, saveText:'', }); store.dispatch({ type:CLEAR_FIRST_MAIN_DIAG, flag:true }); store.dispatch({ type: CLEAR_ALL_TREAT, }); //清空已选的指标推送数据及填的值 store.dispatch({ type: CLEAR_ASSESS_RESULT_VALUE, }); store.dispatch({//推送重置 type: BILLING_ADVICE, determine:[], doubt:[], possible:[], vigilant: [], likely:[], lab: [], pacs:[], setPushEmergency:[], setPushEmergencyIdx:'' }); storageLocal.remove('emrParam'); // Notify.success('页面已清空') }else{ if (whichSign == 0) { let dataJson = JSON.parse(reData.dataJson); //其他史data const oData = dataJson.other; const onlyOneText = oData.length==1&&oData[0].tagType==8&&!(oData[0].name||oData[0].value); if(type == 'template'){ //结构化模板回读 let dataJsonStr = JSON.parse(reData.preview); // console.log(dataJson,dataJsonStr,'结构化模板引用') store.dispatch({ type: CLEAR_MAIN_SUIT, data:dataJson.chief, selecteds:dataJson.mainSuitSelecteds?dataJson.mainSuitSelecteds:[], saveText:JSON.parse(dataJsonStr.chief), mainIds:dataJson.mainsuitIds?dataJson.mainsuitIds:[], chronicDesease:dataJson.mainChronicDesease, }); store.dispatch({ type: CLEAR_CURRENT_ILL, data:dataJson.present, selecteds:dataJson.currentIllSelecteds?dataJson.currentIllSelecteds:[], saveText:JSON.parse(dataJsonStr.present), symptomIds:dataJson.currentIds?dataJson.currentIds:[] }); store.dispatch({ type: CLEAROTHERHISTORY, data:dataJson.other, yjs_1:dataJson.yjs_1, yjs_2:dataJson.yjs_2, yjs_3:dataJson.yjs_3, yjs_4:dataJson.yjs_4, selecteds:dataJson.otherHistorySelecteds?dataJson.otherHistorySelecteds:[], isEmpty:onlyOneText?true:false,//dataJson.otherHistoryIsEmpty, saveText:JSON.parse(dataJsonStr.other), editClear:dataJson.other.length>0?false:true }); store.dispatch({ type: CLEARCHECKBODY, data:dataJson.vital, selecteds:dataJson.checkBodySelecteds?dataJson.checkBodySelecteds:[], isEmpty:dataJson.checkBodyIsEmpty, saveText:JSON.parse(dataJsonStr.vital) }); store.dispatch(clearAllLabel( dataJson.lis.labelList, dataJson.lis.getExcelDataList, dataJsonStr.lis.split('-')[0], dataJsonStr.lis.split('-')[1] )); store.dispatch(clearAssistData(dataJson.pacs,dataJsonStr.pacs,dataJson.checkedListImport||[])); store.dispatch({ type: CLEAR_ALL_DIAG, data:dataJson.diag, saveText:dataJsonStr.diag, chronicMagItem:dataJson.diagChronicMagItem }); store.dispatch({ type: CLEAR_ALL_PUSH_MESSAGE, data:dataJson.advice, saveText:dataJsonStr.advice }); store.dispatch({ type:SETREADDITEMS, data:dataJson.addItems }); store.dispatch({ type:CLEAR_FIRST_MAIN_DIAG, flag:dataJson.isFirstMainDiag }); //tab跳回辅助信息 store.dispatch(tabChange('0')); }else{ //结构化历史病历回读 /*let dataJson = JSON.parse(reData.dataJson);*/ let dataJsonStr = reData.detailList; // console.log(dataJsonStr,'结构化历史病历回读') // console.log(dataJson.mainSuitSelecteds,7887) store.dispatch({ type: CLEAR_MAIN_SUIT, data:dataJson.chief, selecteds:dataJson.mainSuitSelecteds?dataJson.mainSuitSelecteds:[], saveText:dataJsonStr[0].content ? JSON.parse(dataJsonStr[0].content) :[], mainIds:dataJson.mainsuitIds?dataJson.mainsuitIds:[], chronicDesease:dataJson.mainChronicDesease, }); store.dispatch({ type: CLEAR_CURRENT_ILL, data:dataJson.present, selecteds:dataJson.currentIllSelecteds?dataJson.currentIllSelecteds:[], saveText:dataJsonStr[1].content ? JSON.parse(dataJsonStr[1].content):[], symptomIds:dataJson.currentIds?dataJson.currentIds:[] }); store.dispatch({ type: CLEAROTHERHISTORY, data:dataJson.other, yjs_1:dataJson.yjs_1, yjs_2:dataJson.yjs_2, yjs_3:dataJson.yjs_3, yjs_4:dataJson.yjs_4, selecteds:dataJson.otherHistorySelecteds?dataJson.otherHistorySelecteds:[], saveText:dataJsonStr[2].content ? JSON.parse(dataJsonStr[2].content):[], isEmpty:onlyOneText?true:false,//dataJson.otherHistoryIsEmpty,回读回来后判断是否只有一个空标签,是的话要使用模板 editClear:dataJson.other.length>0?false:true }); store.dispatch({ type: CLEARCHECKBODY, data:dataJson.vital, selecteds:dataJson.checkBodySelecteds?dataJson.checkBodySelecteds:[], isEmpty:dataJson.checkBodyIsEmpty, saveText:dataJsonStr[3].content ? JSON.parse(dataJsonStr[3].content):[] }); store.dispatch(clearAllLabel( dataJson.lis.labelList, dataJson.lis.getExcelDataList, dataJsonStr[4].content ? dataJsonStr[4].content.split('-')[0] :'', dataJsonStr[4].content ? dataJsonStr[4].content.split('-')[1] :'' )); store.dispatch(clearAssistData( dataJson.pacs, dataJsonStr[5].content ? dataJsonStr[5].content:'', dataJson.checkedListImport||[] )); store.dispatch({ type: CLEAR_ALL_DIAG, data:dataJson.diag, saveText:dataJsonStr[6].content ? dataJsonStr[6].content:'', chronicMagItem:dataJson.diagChronicMagItem }); store.dispatch({ type: CLEAR_ALL_PUSH_MESSAGE, data:dataJson.advice, saveText:dataJsonStr[7].content ? dataJsonStr[7].content:'' }); store.dispatch({ type:SETREADDITEMS, data:dataJson.addItems }); store.dispatch({ type:CLEAR_FIRST_MAIN_DIAG, flag:dataJson.isFirstMainDiag }); } } else { if(type == 'template'){ //纯文本模板回读 let dataJson = JSON.parse(reData.dataJson); let dataJsonStr = JSON.parse(reData.preview); // console.log(dataJson,dataJsonStr,'纯文本模板引用') store.dispatch({ //主诉文本框 type: CLEAR_MAIN_SUIT, data:[], saveText:JSON.parse(dataJsonStr.chief) }); store.dispatch({ type: CLEAR_CURRENT_ILL, data:[], saveText:JSON.parse(dataJsonStr.present) }); store.dispatch({ type: CLEAROTHERHISTORY, data:[], isEmpty:dataJson.otherHistoryIsEmpty, saveText:JSON.parse(dataJsonStr.other) }); store.dispatch({ type: CLEARCHECKBODY, data:dataJson.vital, isEmpty:dataJson.checkBodyIsEmpty, saveText:JSON.parse(dataJsonStr.vital) }); store.dispatch(clearAllLabel( dataJson.lis.labelList, dataJson.lis.getExcelDataList, dataJsonStr.lis.split('-')[0], dataJsonStr.lis.split('-')[1] )); store.dispatch(clearAssistData(dataJson.pacs,dataJsonStr.pacs,dataJson.checkedListImport||[])); store.dispatch({ type: CLEAR_ALL_DIAG, data:dataJson.diag, saveText:dataJsonStr.diag }); store.dispatch({ type: CLEAR_ALL_PUSH_MESSAGE, data:dataJson.advice, saveText:dataJsonStr.advice, }); store.dispatch({ type:SETREADDITEMS, data:dataJson.addItems }); store.dispatch({ type:CLEAR_FIRST_MAIN_DIAG, flag:dataJson.isFirstMainDiag }); //tab跳回辅助信息 store.dispatch(tabChange('0')); }else{ //纯文本历史病历回读 let dataJson = JSON.parse(reData.dataJson); let dataJsonStr = reData.detailList; // console.log(dataJson,dataJsonStr,'纯文本历史病历回读') if(!dataJson && !dataJsonStr && !reData.sign){ return; } store.dispatch({ type: CLEAR_MAIN_SUIT, data:[], saveText:dataJsonStr[0].content ? JSON.parse(dataJsonStr[0].content) :[] }); store.dispatch({ type: CLEAR_CURRENT_ILL, data:[], saveText:dataJsonStr[1].content ? JSON.parse(dataJsonStr[1].content) :[] }); store.dispatch({ type: CLEAROTHERHISTORY, data:[], isEmpty:dataJson.otherHistoryIsEmpty, saveText:dataJsonStr[2].content ? JSON.parse(dataJsonStr[2].content) :[] }); store.dispatch({ type: CLEARCHECKBODY, data:dataJson.vital, isEmpty:dataJson.checkBodyIsEmpty, saveText:dataJsonStr[3].content ? JSON.parse(dataJsonStr[3].content):[] }); store.dispatch(clearAllLabel( dataJson.lis.labelList, dataJson.lis.getExcelDataList, dataJsonStr[4].content ? dataJsonStr[4].content.split('-')[0] :'', dataJsonStr[4].content ? dataJsonStr[4].content.split('-')[1]:'' )); store.dispatch(clearAssistData( dataJson.pacs, dataJsonStr[5].content ? dataJsonStr[5].content:'', dataJson.checkedListImport||[] )); store.dispatch({ type: CLEAR_ALL_DIAG, data:dataJson.diag, saveText:dataJsonStr[6].content ? dataJsonStr[6].content:'' }); store.dispatch({ type: CLEAR_ALL_PUSH_MESSAGE, data:dataJson.advice, saveText:dataJsonStr[7].content ? dataJsonStr[7].content:'' }); store.dispatch({ type:SETREADDITEMS, data:dataJson.addItems }); store.dispatch({ type:CLEAR_FIRST_MAIN_DIAG, flag:dataJson.isFirstMainDiag }); } } } store.dispatch({ type:ISREAD }); } function filterArr(arr){ let tmpArr = arr.filter((item)=>{ if(item){ return item } }); return tmpArr.join("").replace(/\s/g,''); } function filterDataArr(arrTmp){ //数据处理 let tmpArr = []; tmpArr = arrTmp.map((it,i)=>{ //连续的标点符号保留第一个 if(!it)return ''; if(!it.match(config.punctuationReg)&&!arrTmp[i-1]){ //只有标点符号或者前一个标签无值是(说明本标点灰显,不显示在预览中) return ''; } return it.replace(config.punReg,function(word){ return word.substr(0,1); }); }); return trimDots(tmpArr.join('')); //去掉开头的标点符号,最后的标点保留第一个,中间连续的保留第一个 } //其他史预览数据处理-月经史 function filterOtherDataArr(arrTmp,jsonArr){ let tmpArr = []; let index1 = jsonArr.findIndex((item)=>{ return item.formulaCode=='yjs_1'; }); let index2 = jsonArr.findIndex((item)=>{ return item.formulaCode=='yjs_2'; }); let index3 = jsonArr.findIndex((item)=>{ return item.formulaCode=='yjs_3'; }); let index4 = jsonArr.findIndex((item)=>{ return item.formulaCode=='yjs_4'; }); if(index1==-1&&index2==-1&&index3==-1&&index4==-1){//无月经史 return {str1:filterDataArr(arrTmp),str2:''}; } tmpArr = arrTmp.map((it,i)=>{ //连续的标点符号保留第一个 if(!it.match(config.punctuationReg)&&!arrTmp[i-1]||[index1,index2,index3,index4].includes(i)){ //只有标点符号或者前一个标签无值是(说明本标点灰显,不显示在预览中) return ''; } return it.replace(config.punReg,function(word){ return word.substr(0,1); }); }); const splitNum = [index1,index2,index3,index4].find((i)=>i!=-1); const str1 = [...tmpArr].splice(0,splitNum).join(""); const str2 = [...tmpArr].splice(splitNum).join(""); return {str1:trimDots(str1),str2:trimDots(str2),index:index1}; } //去掉开头的标点符号,最后的标点保留第一个,中间连续的保留第一个 function trimDots(str){ return str.replace(config.punReg,function(word){ return word.substr(0,1); }).replace(/^[,,.。::"“??”;;、!!\s]+/,''); } //标签间连续标点只保留一个,保留前面一个 function formatContinueDots(data){ let arr=[]; arr=data&&data.filter((it,i)=>{ if(i==0||(it.name&&(it.name.match(config.punctuationReg))||(data[i-1].name&&data[i-1].name.match(config.punctuationReg)))){ return it; } if(!it.name){ //主诉现病史病情变化 return it; } }); return arr; } // 取消默认行为 function preventDefault(event) { if (event.preventDefault) { event.preventDefault(); } else { event.returnValue = false; } } //ie8添加解除事件兼容 function windowEventHandler(type,func,dom){ let win = dom?dom:window; if(win.addEventListener){ win.addEventListener(type, func); }else{ win.attachEvent('on'+type,func); } } function windowRemoveEventHandler(type,func,dom){ let win = dom?dom:window; if(win.addEventListener){ win.removeEventListener(type, func); }else{ win.detachEvent('on'+type,func); } } //禁止回车事件 function handleEnter(event){ event = event?event:window.event; if(event.keyCode==13){return false;} } //获取病例输入的内容 function getEMRParams(){ const state = store.getState(); const {message} = state.patInfo; const {mainSuit,currentIll,otherHistory,checkBody,inspect,assistCheck,diagnosticList} = state; //console.log('message', message) const main = filterDataArr(mainSuit.saveText)||'', current=filterDataArr(currentIll.saveText)||'', other = filterDataArr(otherHistory.saveText)||'', vital = filterDataArr(checkBody.saveText)||'', lis = inspect.pushItem, //化验推送所需数据 pacs = assistCheck.dataString||'', dis=diagnosticList.diagnosticStrNoType||'', advice = '', diseaeId = []; const age = message.patientAge; const sex = message.sex; const patientId = message.patientId //病人id,取上次用药 const hosCode = message.hospitalCode return {main,current,other,vital,lis,pacs,dis,advice,diseaeId,sex,age, patientId, hosCode}; }; function didPushParamChange(){ const emrData = getEMRParams(); const oldParams = storageLocal.get('emrParam'); const newParams = JSON.stringify({ age: emrData.age, diag: emrData.dis, lis: emrData.lis, other: emrData.other, pacs: emrData.pacs, sex: emrData.sex, vital:emrData.vital, symptom: emrData.current + emrData.main, hosCode:emrData.hosCode }); if(newParams == oldParams){ return false; } return true; } //判断页面所有数据是否为空 function isAllClear(jsonData,jsonStr,baseList){ if ( //结构化和文本数据都为空 JSON.stringify(jsonData.advice) == '{}' && jsonData.chief.length < 1 && jsonData.present.length < 1 && // jsonData.other.length < 1 && (jsonData.other.length > 0 ? baseList.otherHistory.isEmpty : true) && //jsonData.vital.length < 1 && (jsonData.vital.length > 0 ? baseList.checkBody.isEmpty : true) && jsonData.diag.length < 1 && jsonData.checkedListImport.length < 1 && jsonData.pacs.length < 1 && jsonData.lis.labelList.length < 1 && jsonData.lis.getExcelDataList.length < 1 && filterDataArr(JSON.parse(jsonStr.chief)) == '' && filterDataArr(JSON.parse(jsonStr.present)) == '' && filterDataArr(JSON.parse(jsonStr.other)) == '' && //这里都是filterDataArr不是filterArr,要去符号的 filterDataArr(JSON.parse(jsonStr.vital)) == '' ) { return false; }else{ return true; } } //判断除主诉外页面数据是否为空--慢病模板 function ifOtherClear(jsonData,jsonStr,baseList){ if ( //结构化和文本数据都为空 JSON.stringify(jsonData.advice) == '{}' && jsonData.present.length < 1 && (jsonData.other.length > 0 ? baseList.otherHistory.isEmpty : true) && (jsonData.vital.length > 0 ? baseList.checkBody.isEmpty : true) && jsonData.diag.length < 1 && jsonData.pacs.length < 1 && jsonData.lis.labelList.length < 1 && jsonData.lis.getExcelDataList.length < 1 && filterDataArr(JSON.parse(jsonStr.present)) == '' && filterDataArr(JSON.parse(jsonStr.other)) == '' && //这里都是filterDataArr不是filterArr,要去符号的 filterDataArr(JSON.parse(jsonStr.vital)) == '' ) { return false; }else{ return true; } } function normalVal(min,max){ if(!min&&!max){ return null; }else if(min&&max){ return `正常值: (${min}~${max})` }else if(!min && max){ return `正常值: (<${max})` }else if(min && !max){ return `正常值: (>${min})` } } /** * * @param {弹窗显示位置是否往下设置} stic */ function getPageCoordinate(event,stic){//获取鼠标点击的位置 let e = event || window.event; var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; var scrollY = document.documentElement.scrollTop || document.body.scrollTop; var x = e.pageX || (e.clientX + scrollX); var y = (e.pageY+(stic?25:0)) || (e.clientY + scrollY + (stic?25:0));//弹窗位置偏下25 let obj = { boxLeft : x , boxTop : y+18 } return obj; } function timestampToTime(timestamp) { //excel导入2019年5月1日会转换成时间戳 var date = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000 var Y = date.getFullYear() + '-'; var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-'; var D = date.getDate() + ' '; var h = date.getHours() + ':'; var m = date.getMinutes() + ':'; var s = date.getSeconds(); return Y+M+D+h+m+s; } /** * * @param {需要年月日传个true,不需要不传或者false} flg */ function getCurrentDate(flg,con){ let link = con?con:'-' let myDate = new Date(); let year = myDate.getFullYear(); //获取完整的年份(4位,1970-????) let mon = myDate.getMonth()-0+1; //获取当前月份(0-11,0代表1月) let day = myDate.getDate(); //获取当前日(1-31) let date = ''; if(flg){ var h = myDate.getHours(); var m = myDate.getMinutes(); var s = myDate.getSeconds(); date = year+link+mon.toString().padStart(2,'0')+link+day.toString().padStart(2,'0')+' '+h.toString().padStart(2,'0')+':'+m.toString().padStart(2,'0')+':'+s.toString().padStart(2,'0'); }else{ date = year+link+mon.toString().padStart(2,'0')+link+day.toString().padStart(2,'0'); } return date; } function inspectAndAssist(){ const state = store.getState(); let mainType = state.typeConfig.typeConfig if(mainType == 1){return}//文本模式不放化验辅检的模板 let tmpAll = state.homePage.allModules; let tmpInspected = state.inspect.labelList; let tmpAssisted = state.assistCheck.assistLabel; let tmpInspect = [],tmpAssist = [],assayArr = [],tmpDetail=[],checkArr = []; for(let i = 0;i < tmpAll.length;i++){ let tmpItem = tmpAll[i]; if(tmpItem.type == 5){ tmpInspect = tmpItem.moduleDetailDTOList || [] }else if(tmpItem.type == 6){ tmpAssist = tmpItem.moduleDetailDTOList || [] } } for(let i = 0;i < tmpInspect.length;i++){//化验数据处理 let tmpObj = { //添加化验 details: [], name: '', questionId: '', showType: 1, uniqueName:'' } if (tmpInspect[i].controlType == 0) { tmpDetail = tmpInspect[i].questionMapping }else if(tmpInspect[i].controlType == 1 || tmpInspect[i].controlType == 6){ tmpDetail = new Array(tmpInspect[i]) } tmpObj.questionId = tmpInspect[i].id tmpObj.name = tmpInspect[i].name tmpObj.details = tmpDetail tmpObj.uniqueName = tmpInspect[i].uniqueName || '' assayArr.push(tmpObj) } for(let i = 0;i < tmpAssist.length;i++){//辅检数据处理 let tmpObj = { //添加辅检 name: '', questionId: '', showType: 1, time:getCurrentDate(1), value:'' } tmpObj.questionId = tmpAssist[i].id tmpObj.name = tmpAssist[i].name checkArr.push(tmpObj) } if(assayArr.length>0 && tmpInspected.length == 0){//化验 store.dispatch(addLabel(assayArr)) } if(checkArr.length > 0 && tmpAssisted.length == 0){//辅检 store.dispatch(addAssistLabel(checkArr)) } } function readyKeepHistory(){ let baseList = store.getState(); let jsonStr = getAllDataStringList(baseList); if(filterDataArr(JSON.parse(jsonStr.chief)) == ''){ return 1;//主诉不能为空 }else if(!jsonStr.diag || jsonStr.diag.trim().length < 1){ return 2;//诊断不能为空 }else{ return 3; } } //评估图表数据转换 function parseChartData(indexData){ let arr=[],obj={},temp={}; let nameArr=[],nameObj={}; if(!indexData){ return []; } indexData.indexData.map((it)=>{ temp=indexData.indexConfigData.find((i)=>{return it.itemName==i.indexUnique}); arr=obj[temp.groupType]||[]; nameArr=nameObj[temp.groupType]||[]; obj[temp.groupType]=[...arr,it]; nameObj[temp.groupType]=[...nameArr,it.itemName]; }); //nameObj,obj; return {nameObj,obj}; } //函数类工具,对函数进行操作 返回函数 //延时操作 function debounce(func, delay) { let timer = null; return function (...args) { if (timer) { clearTimeout(timer); } timer = setTimeout(() => { func.apply(this, args); }, delay); } } // 时间戳转换日期 function dateParser(timestamp,link = '-'){ let time = new Date(timestamp); let year = time.getFullYear(); let month = time.getMonth()+1; let date = time.getDate(); let hour = time.getHours().toString().padStart(2,'0'); let minute = time.getMinutes().toString().padStart(2,'0'); let second = time.getSeconds().toString().padStart(2,'0'); // let result = year+link+month+link+date; let result = year+link+(month<10?"0"+month:month)+link+(date<10?"0"+date:date)+' '+hour+':'+minute+':'+second; return result; } //时间搓转换年龄 function getAge(time){ const birthday = new Date(time), year = birthday.getFullYear(), month = birthday.getMonth() + 1, day = birthday.getDate(), now = new Date(), now_year = now.getFullYear(), now_month = now.getMonth() + 1, now_day = now.getDate(); let age= now_year - year; if (now_month > month) { age += 1; } else if (now_month === month) { if (now_day >= day) { age += 1; } } return age; }; //获取URL参数-返回json对象 function parseUrl(url){ const r = url.substr(1).split("&"), obj = {}; r.forEach((v) => { const index = v.indexOf('='); if (index > -1) { obj[v.substring(0, index)] = v.substring(index + 1); } }); return obj; } //获取组合组件已填文字填入saveText function getSaveText(data){//console.log(data) const arr = data.questionMapping.map((it)=>{ return it.value?(it.labelPrefix||'')+(it.value||'')+(it.labelSuffix||''):''; }); return arr.join(''); } //添加自由文本标签 function notTextLabel(label){ return +label.tagType!==8; } /* * 给标签组添加自由文本标签 * 入参:arr源数组, * noPre是否不添加前置文本标签,默认false即添加 * noEnd是否不添加后置文本标签,默认false即添加 * 出参:newArr添加自由文本标签后的数据Array, * saveText添加自由文本后对应的预览数据Array, * */ function fullfillText(arr,noPre=false,noEnd=false){ let newArr =[], pre={}, textLabel={}, notText = true, saveText=[], tempText = '', value = '', cNum = 0; Array.isArray(arr)&&arr.map((it,i)=>{ notText = notTextLabel(it); cNum = i; value = it.value||''; textLabel = JSON.parse(config.textLabel); //n个显示的标签最后一个标签后面要落关标,所以+1 if(i===0){ //第一个标签不是文本标签时在前面添加文本标签 if(!noPre&¬Text){ newArr.push(textLabel); saveText.push(''); } newArr.push(it); if(it.tagType != 3){ //非血压类组合标签 tempText = value?it.labelPrefix+value+it.labelSuffix:''; tempText = notText?tempText:it.value||it.name; }else{ tempText = getSaveText(it); } saveText.push(tempText); // 模板只有一个标签时第一项后面也要加空标签 if(arr.length==1&¬Text){ newArr.push(JSON.parse(config.textLabel)); saveText.push(''); } }else{ pre = arr[i-1]; //如果本身不是文本标签且前面一个也不是文本标签,该标签前面添加文本标签 if(notTextLabel(pre)&¬Text){ newArr.push(textLabel,it); if(it.tagType != 3) { tempText = value ? it.labelPrefix + value + it.labelSuffix : ''; }else{ tempText = getSaveText(it); } saveText.push("",tempText); }else{ //本身是或者前面是文本标签时,前面不添加文本标签 newArr.push(it); if(it.tagType != 3) { tempText = value ? it.labelPrefix + value + it.labelSuffix : ''; tempText = notText ? tempText : (it.value || it.value == "" ? it.value : it.name); }else{ tempText = getSaveText(it); } saveText.push(tempText); } if(notText&&!noEnd&&i===arr.length-1){//最后一个非文本标签,后面添加一个文本标签 //不能用上面的变量textLabel,因为上一个if可能也进了,这样就是同一个对象,值改变时会同步 newArr.push(JSON.parse(config.textLabel)); saveText.push(""); } } }); return {newArr,saveText}; }; /* * 查体添加自由文本标签函数 * 默认标签直接添加, * 前config.showCheckNum个源数据标签默认显示,剩余隐藏收起 * 入参:arr源数组, * noPre是否不添加前置文本标签,默认false即添加 * noEnd是否不添加后置文本标签,默认false即添加 * showInCheck是否默认在查体中展开 * 出参:newArr添加自由文本标签后的数据Array, * saveText添加自由文本后对应的预览数据Array, * checkHiddenDefault查体是否全部标签展开 * * */ function checkFullfillText(arr,noPre=false,noEnd=false){ let newArr =[], pre={}, textLabel={}, notText = true, saveText=[], tempText = '', value = '', item={}, checkHiddenDefault=false; arr&&arr.map((it,i)=>{ notText = notTextLabel(it); value = it.value||''; //textLabel = i==0?JSON.parse(config.textLabel):Object.assign({},JSON.parse(config.textLabel),{showInCheck:true}); //n个显示的标签最后一个标签后面要落关标,所以+1 //_textLabel = !ifEmpty&&cNumconfig.showCheckNum&&+it.tagType===1&&(+it.controlType===0||+it.controlType===1)){ if(it.questionDetailList.find((it)=>it.defaultSelect=='1')){ checkHiddenDefault=true; } } //如果本身不是文本标签且前面一个也不是文本标签,该标签前面添加文本标签 if(notTextLabel(pre)&¬Text){ textLabel = Object.assign(JSON.parse(config._textLabel),{showInCheck:i-1config.showCheckNum?false:true}); newArr.push(_text); saveText.push(""); } } }); return {newArr,saveText,checkHiddenDefault}; } //获取标签index,入参:病例项index+标签index+标签内index function getLabelIndex(index){ let ikey = index.split('-')[1]; return ikey; }; function getWindowInnerHeight(){ if(window.innerHeight!=undefined){ return window.innerHeight; }else{ let by = document.body, ele = document.documentElement; return Math.min(by.clientHeight,ele.clientHeight); } }; function getWindowInnerWidth(){ let width = window.innerWidth || document.body.clientWidth || document.documentElement.clientWidth return width }; function getIds(data){ let ids = []; data&&data.forEach((it,i)=>{ ids.push(it.id); }) return ids; } /** * * @param {日期相关} info * @param {时间是否包含时分秒} flg * @param {连接符} con */ function getCalendarDate(info,flg,con) { let date = ''; let time = flg?flg:false; let conect = con?con:'-'; if(time){ date = info.year + conect + (info.month).toString().padStart(2,'0') + conect + (info.day).toString().padStart(2,'0') + ' '+(info.hour).toString().padStart(2,'0')+':'+(info.minute).toString().padStart(2,'0')+':'+(info.second).toString().padStart(2,'0'); }else{ date = info.year + conect + (info.month < 10 ? '0' + info.month : info.month) + conect + (info.day < 10 ? '0' + info.day : info.day); } return date; } // 导出 function downloadExportedData(data, fileName) { // var blob = new Blob([data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'}); //type表示xlsx类型 var blob = new Blob([data], {type: 'application/vnd.ms-excel'}); //type表示xlsx类型 var downloadElement = document.createElement('a'); var href = window.URL.createObjectURL(blob); //创建下载的链接 downloadElement.href = href; downloadElement.download = fileName; //下载后文件名 document.body.appendChild(downloadElement); downloadElement.click(); //点击下载 document.body.removeChild(downloadElement); //下载完成移除元素 window.URL.revokeObjectURL(href); } function getStatusImg(type,val,status){ if(type == 0){//正常 return {val} }else if(type == 1){//异常(表单输入的话非数字显示为异常) return {val} } if(status == 1){ if(type == 2){ return {val} }else if(type == 3){ return {val} } }else{ if(type == 2){ return {val} }else if(type == 3){ return {val} } } } //键值对转换 function parseNameVal(arr){ let obj = {}; Array.isArray(arr)&&arr.map((it)=>{ obj[it.code]=it.value; }); return obj; } //化验数据处理 function getStringPlus(dataList){ let strPlus = ''; dataList && dataList.map((item)=>{ if(item.detailName){ let strTmp = item.name + ',' + item.detailName + ',' + (item.otherValue ? item.otherValue : (item.value + item.units)) +';' strPlus += strTmp; }else{ let strTmp = item.name+';' strPlus += strTmp; } }) return strPlus; } /** * * @param {data1} excel导入的数据 getExcelDataList * @param {data2} 填写单数据 labelList */ function getPushList(data1,data2){ //推送数据 let tmpArr1 = []; let tmpArr2 = []; let totalTmpArr = []; const now = dateParser(new Date()); data1.length>0 && data1.map((items)=>{ //excel导入的数据拼接 items.lisExcelRes.map((item)=>{ item.lisExcelItem.map((part)=>{ let tmpObj = {}; tmpObj.name = part.mealName || '';//套餐名 tmpObj.detailName = part.itemName || '';//化验项名 tmpObj.uniqueName = part.uniqueName || '';//公表名称 tmpObj.source = '1';//数据来源 tmpObj.maxValue = part.max || ''; tmpObj.minValue = part.min || ''; tmpObj.time = part.time ||now; tmpObj.units = part.unit || '';//单位 tmpObj.value = (part.value-0) === (part.value-0) ? part.value:'';//值 tmpObj.otherValue = (part.value-0) === (part.value-0) ?'':part.value; //阴性阳性 tmpArr1.push(tmpObj); }) }) }) data2.length>0 && data2.map((item)=>{ //填写单数据拼接 item.details && item.details.map((val)=>{ if(val.value != undefined && val.value != ''){ let tmpObj = {}; tmpObj.name = item.name || ''; tmpObj.detailName = val.name || ''; tmpObj.uniqueName = val.uniqueName || '';//公表名称 tmpObj.source = '0'; //数据来源 tmpObj.maxValue = val.maxValue ? val.maxValue : ''; tmpObj.minValue = val.minValue ? val.minValue : ''; tmpObj.time = val.time || now; tmpObj.units = val.labelSuffix || ''; tmpObj.value = (val.value-0) === (val.value-0) ? val.value:''; tmpObj.otherValue = (val.value-0) === (val.value-0) ?'':val.value; tmpArr2.push(tmpObj); } }) }) totalTmpArr = tmpArr1.concat(tmpArr2); return totalTmpArr; } function getPushLists(data1,data2){ //推送数据 let tmpArr1 = []; let tmpArr2 = []; let totalTmpArr = []; data1.length>0 && data1.map((items)=>{ //excel导入的数据拼接 items.lisExcelRes.map((item)=>{ item.lisExcelItem.map((part)=>{ let tmpObj = {}; tmpObj.name = part.mealName || '';//套餐名 tmpObj.detailName = part.itemName || '';//化验项名 tmpObj.uniqueName = part.uniqueName || '';//公表名称 tmpObj.source = '1';//数据来源 tmpObj.maxValue = part.max || ''; tmpObj.minValue = part.min || ''; tmpObj.units = part.unit || '';//单位 tmpObj.value = (part.value-0) === (part.value-0) ? part.value:'';//值 tmpObj.otherValue = (part.value-0) === (part.value-0) ?'':part.value; //阴性阳性 tmpArr1.push(tmpObj); }) }) }) data2.length>0 && data2.map((item)=>{ //填写单数据拼接 if(item.show){ item.details.map((val)=>{ if(val.value != undefined && val.value != ''){ let tmpObj = {}; tmpObj.name = item.name || ''; tmpObj.detailName = val.name || ''; tmpObj.uniqueName = val.uniqueName || '';//公表名称 tmpObj.source = '0'; //数据来源 tmpObj.maxValue = val.maxValue ? val.maxValue : ''; tmpObj.minValue = val.minValue ? val.minValue : ''; tmpObj.units = val.labelSuffix || ''; tmpObj.value = (val.value-0) === (val.value-0) ? val.value:''; tmpObj.otherValue = (val.value-0) === (val.value-0) ?'':val.value; tmpArr2.push(tmpObj); } }) }else{ let tmpObj = {}; tmpObj.name = item.name; tmpArr2.push(tmpObj); } }) totalTmpArr = tmpArr1.concat(tmpArr2); return totalTmpArr; } function getAllString(checkedListImport,assistLabel){ let tmpImportLis = [],tmpString=''; for(let i = 0;i < checkedListImport.length;i++){ for(let j = 0;j < checkedListImport[i].length;j++){ tmpImportLis.push(checkedListImport[i][j]) } } let tempArr = tmpImportLis.concat(assistLabel) for (let i = 0; i < tempArr.length; i++) { let tmpVal = tempArr[i].value ? tempArr[i].value.trim() : tempArr[i].value; tmpString += (tempArr[i].name + (tmpVal ? (':' + tmpVal) + ', ' : ': ') + (tempArr[i].time ? '报告日期:' + tempArr[i].time : '') + ';') } return tmpString; } module.exports = { checkType: Type.checkType, getIds, getWindowInnerWidth, getWindowInnerHeight, getLabelIndex, fullfillText, checkFullfillText, parseUrl, getAge, dateParser, debounce, regexp, isUndefined, Storage, nullFn, isNotNull, isNull, deepClone, isIE, storageLocal, getUrlArgObject, getAllDataList, getAllDataStringList, pushAllDataList, filterArr, filterDataArr, filterOtherDataArr, preventDefault, handleEnter, didPushParamChange, getEMRParams, windowEventHandler, isAllClear, normalVal, getPageCoordinate, windowRemoveEventHandler, timestampToTime, formatContinueDots, inspectAndAssist, getCurrentDate, ifOtherClear, readyKeepHistory, parseChartData, getCalendarDate, downloadExportedData, getStatusImg, parseNameVal, getStringPlus, getPushLists, getPushList, getAllString };