tools.js 44 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241
  1. import store from '@store';
  2. import {CLEAR_MAIN_SUIT} from '@store/types/mainSuit';
  3. import {CLEAR_CURRENT_ILL} from '@store/types/currentIll';
  4. import {CLEAROTHERHISTORY} from '@store/types/otherHistory';
  5. import {CLEARCHECKBODY} from '@store/types/checkBody';
  6. import {clearAssistData,addAssistLabel} from '@store/actions/assistCheck';
  7. import {clearAllLabel,addLabel} from '@store/actions/inspect';
  8. import {CLEAR_ALL_DIAG} from '@store/types/diagnosticList';
  9. import {CLEAR_ALL_PUSH_MESSAGE, SET_TIPS} from '@store/types/pushMessage';
  10. import {ISREAD, SETREADDITEMS} from "../store/types/homePage";
  11. import {CLEAR_FIRST_MAIN_DIAG, CLEAR_ALL_TREAT} from "../store/types/treat";
  12. import {tabChange} from '@store/actions/tabTemplate';
  13. import {CLEAR_ASSESS_RESULT_VALUE} from '@types/assessResult';
  14. import config from '@config/index.js';
  15. import up from '@images/up.png';
  16. import down from '@images/down.png';
  17. /***
  18. * 工具函数
  19. *
  20. * ***/
  21. const ARR = "Array";
  22. const NUMBER = "Number";
  23. const STRING = "String";
  24. const OBJECT = "Object";
  25. const UNDEFINED = "Undefined";
  26. const NULL = "Null";
  27. const BOOLEAN = "Boolean";
  28. const qs = require('qs');
  29. // 数据类型判断
  30. const Type = {
  31. typeConstant: {
  32. 'array': ARR,
  33. 'number': NUMBER,
  34. 'string': STRING,
  35. 'object': OBJECT,
  36. 'undefined': UNDEFINED,
  37. 'null': NULL,
  38. 'boolean': BOOLEAN
  39. },
  40. tolower: (str)=> {
  41. if(typeof str !== "string") {
  42. return "";
  43. }
  44. return str.toLowerCase();
  45. },
  46. checkType: (el, type)=> {
  47. type = Type.tolower(type);
  48. type = Type.typeConstant[type];
  49. return Object.prototype.toString.call(el) === "[object "+ type +"]";
  50. }
  51. }
  52. // 计算字符串长度,该长度将一个中文字算作2个字符长度
  53. const regexp = {
  54. ch: (str)=> {//匹配中文
  55. if(typeof str !== "string") {
  56. return "";
  57. }
  58. return str.match(/[\u4e00-\u9fa5]/g) || "";
  59. },
  60. chLen: function (str) {//中文长度
  61. return regexp.ch(str).length;
  62. },
  63. strLen: function (str) {//字符串长度(一个中文当作两个英文字母)
  64. if(typeof str !== "string") {
  65. return 0;
  66. }
  67. return str.length + regexp.chLen(str);
  68. }
  69. }
  70. //判断是否空对象或未定义
  71. const isUndefined = function (str) {
  72. if(str === 0 || str === "") {
  73. return false;
  74. }
  75. return (Type.checkType(str, 'null') || Type.checkType(str, 'undefined'));
  76. }
  77. //sessionStorage方法封装
  78. const Storage = {
  79. session: {
  80. get: function (name) {
  81. return JSON.parse(sessionStorage.getItem(name));
  82. },
  83. set: function (name, data) {
  84. sessionStorage.setItem(name, JSON.stringify(data));
  85. },
  86. remove: function (name) {
  87. sessionStorage.removeItem(name);
  88. },
  89. clear: function () {
  90. sessionStorage.clear();
  91. }
  92. }
  93. };
  94. //localStorage方法封装
  95. const storageLocal = {
  96. set: function (name, data) {
  97. if(!data) {
  98. return;
  99. }
  100. if(typeof data !== 'string') {
  101. data = JSON.stringify(data);
  102. }
  103. localStorage.setItem(name, data);
  104. },
  105. get: function (name) {
  106. return localStorage.getItem(name);
  107. },
  108. remove: function (name) {
  109. localStorage.removeItem(name);
  110. },
  111. clear: function () {
  112. localStorage.clear();
  113. }
  114. };
  115. const nullFn = ()=>{};
  116. //是否为空
  117. const isNull = (item)=>{
  118. return String(item)=== "" || String(item)==="null" || String(item)==="undefined";
  119. };
  120. const isNotNull = (item)=>{
  121. return !(isNull(item));
  122. };
  123. //判断是否为ie浏览器
  124. const isIE = () => { //ie?
  125. if (!!window.ActiveXObject || "ActiveXObject" in window){
  126. return true;
  127. } else{
  128. return false;
  129. }
  130. }
  131. const deepClone = (data)=>{
  132. return JSON.parse(JSON.stringify(data)||null)||{};
  133. };
  134. const getUrlArgObject = (parm) => {
  135. let query = window.location.search;
  136. let args = qs.parse(query.substr(1));
  137. return args[parm];//返回对象
  138. }
  139. const getAllDataList =(baseList) =>{ //获取所有模块结构化的数据
  140. let jsonData = {};
  141. //月经史公式
  142. const other = baseList.otherHistory;
  143. jsonData.lis = {};
  144. jsonData.chief = baseList.mainSuit.data; //主诉
  145. jsonData.present = baseList.currentIll.data; //现病史
  146. jsonData.other = other.data; //其他史
  147. jsonData.otherHistoryIsEmpty = other.isEmpty;
  148. jsonData['yjs_1'] = other['yjs_1'];
  149. jsonData['yjs_2'] = other['yjs_2'];
  150. jsonData['yjs_3'] = other['yjs_3'];
  151. jsonData['yjs_4'] = other['yjs_4'];
  152. jsonData.vital = baseList.checkBody.data; //查体
  153. jsonData.checkBodyIsEmpty = baseList.checkBody.isEmpty;
  154. jsonData.lis.labelList = baseList.inspect.labelList; //化验
  155. jsonData.lis.getExcelDataList = baseList.inspect.getExcelDataList; //化验导入
  156. jsonData.pacs = baseList.assistCheck.assistLabel; //辅检
  157. jsonData.diag = baseList.diagnosticList.diagnosticList; //诊断
  158. jsonData.advice = baseList.pushMessage.advice; //医嘱
  159. jsonData.mainSuitSelecteds = baseList.mainSuit.selecteds; //主诉选中状态保存
  160. jsonData.currentIllSelecteds = baseList.currentIll.selecteds; //主诉选中状态保存
  161. jsonData.otherHistorySelecteds = baseList.otherHistory.selecteds; //主诉选中状态保存
  162. jsonData.checkBodySelecteds = baseList.checkBody.selecteds; //主诉选中状态保存
  163. jsonData.addItems = baseList.homePage.addItems||{};
  164. jsonData.mainsuitIds = baseList.mainSuit.mainIds; //主诉去重
  165. jsonData.mainChronicDesease = baseList.mainSuit.chronicDesease; //主诉慢病{}
  166. jsonData.diagChronicMagItem = baseList.diagnosticList.chronicMagItem; //诊断慢病{}
  167. jsonData.currentIds = baseList.currentIll.symptomIds; //现病史去重
  168. jsonData.isFirstMainDiag = baseList.treat.isFirstMainDiag; //治疗方案
  169. // console.log(jsonData,'结构化数据获取')
  170. return jsonData;
  171. }
  172. const getAllDataStringList =(baseList) =>{ //获取所有模块文本的数据
  173. let jsonDataString = {};
  174. jsonDataString.lis = {};
  175. let chiefData = [],presentData=[],otherData=[],vitalData=[];
  176. if(baseList.mainSuit.saveText.length == 1 && baseList.mainSuit.saveText[0].trim() == ''){
  177. chiefData = []
  178. }else{
  179. chiefData = baseList.mainSuit.saveText
  180. }
  181. if(baseList.currentIll.saveText.length == 1 && baseList.currentIll.saveText[0].trim() == ''){
  182. presentData = []
  183. }else{
  184. presentData = baseList.currentIll.saveText
  185. }
  186. const oText = baseList.otherHistory.saveText;
  187. if(oText.length == 1 && oText[0] && oText[0].trim() == ''){
  188. otherData = []
  189. }else{
  190. otherData = baseList.otherHistory.saveText
  191. }
  192. if(baseList.checkBody.saveText.length == 1 && baseList.checkBody.saveText[0].trim() == ''){
  193. vitalData = []
  194. }else{
  195. vitalData = baseList.checkBody.saveText
  196. }
  197. jsonDataString = {
  198. 'chief' : JSON.stringify(chiefData),
  199. 'present' : JSON.stringify(presentData),
  200. 'other' : JSON.stringify(otherData),
  201. 'vital' : JSON.stringify(vitalData),
  202. 'lis' : baseList.inspect.inspectStrPlus,
  203. 'pacs' : baseList.assistCheck.dataString,
  204. 'diag' : baseList.diagnosticList.diagnosticStr,
  205. 'advice' : baseList.pushMessage.AdviceStr
  206. }
  207. //console.log(jsonDataString,'文本模式数据获取')
  208. return jsonDataString;
  209. }
  210. /**
  211. *
  212. * @param {回读数据} reData
  213. * @param {回读数据是历史病历'history',还是模板'template'} type
  214. * @param {什么操作,回读'push'还是清空'clear'} action
  215. * @param {引用的话是保存时候的文本类型,编辑的时候是当前页面设置的文本类型} whichSign
  216. */
  217. const pushAllDataList =(whichSign,action,reData,type) =>{ //回读清空所有的数据
  218. if(action == 'clear'){ //清空
  219. const block = Object.assign(JSON.parse(config.textLabel),{full:true});//空白时保留一个自由文本标签
  220. store.dispatch({type: CLEAR_MAIN_SUIT,data:[],saveText:[],selecteds:[],editClear:true,mainIds:[],mainTailIds:[],clearAction:true,symptomFeature:[],chronicDesease:null});
  221. store.dispatch({type: CLEAR_CURRENT_ILL,data:[],saveText:[],selecteds:[],editClear:true,symptomIds:[]});
  222. store.dispatch({type: CLEAROTHERHISTORY,data:[block],isEmpty:true,saveText:[],selecteds:[],editClear:true,yjs_1:'',yjs_2:'',yjs_3:'',yjs_4:''});
  223. store.dispatch({type: CLEARCHECKBODY,data:[block],isEmpty:true,saveText:[],selecteds:[]});
  224. store.dispatch(clearAssistData([],''));
  225. store.dispatch(clearAllLabel([],[],''));
  226. store.dispatch({
  227. type: SET_TIPS,
  228. tips: {}
  229. })
  230. store.dispatch({
  231. type: CLEAR_ALL_DIAG,
  232. data:[],
  233. saveText:'',
  234. mainSuitStr: '',
  235. chronicMagItem:null
  236. });
  237. store.dispatch({
  238. type: CLEAR_ALL_PUSH_MESSAGE,
  239. data:{},
  240. saveText:'',
  241. });
  242. store.dispatch({
  243. type:CLEAR_FIRST_MAIN_DIAG,
  244. flag:true
  245. });
  246. store.dispatch({
  247. type: CLEAR_ALL_TREAT,
  248. });
  249. //清空已选的指标推送数据及填的值
  250. store.dispatch({
  251. type: CLEAR_ASSESS_RESULT_VALUE,
  252. });
  253. storageLocal.remove('emrParam');
  254. // Notify.success('页面已清空')
  255. }else{
  256. if (whichSign == 0) {
  257. let dataJson = JSON.parse(reData.dataJson);
  258. //其他史data
  259. const oData = dataJson.other;
  260. const onlyOneText = oData.length==1&&oData[0].tagType==8&&!(oData[0].name||oData[0].value);
  261. if(type == 'template'){ //结构化模板回读
  262. let dataJsonStr = JSON.parse(reData.preview);
  263. // console.log(dataJson,dataJsonStr,'结构化模板引用')
  264. store.dispatch({
  265. type: CLEAR_MAIN_SUIT,
  266. data:dataJson.chief,
  267. selecteds:dataJson.mainSuitSelecteds?dataJson.mainSuitSelecteds:[],
  268. saveText:JSON.parse(dataJsonStr.chief),
  269. mainIds:dataJson.mainsuitIds?dataJson.mainsuitIds:[],
  270. chronicDesease:dataJson.mainChronicDesease,
  271. });
  272. store.dispatch({
  273. type: CLEAR_CURRENT_ILL,
  274. data:dataJson.present,
  275. selecteds:dataJson.currentIllSelecteds?dataJson.currentIllSelecteds:[],
  276. saveText:JSON.parse(dataJsonStr.present),
  277. symptomIds:dataJson.currentIds?dataJson.currentIds:[]
  278. });
  279. store.dispatch({
  280. type: CLEAROTHERHISTORY,
  281. data:dataJson.other,
  282. yjs_1:dataJson.yjs_1,
  283. yjs_2:dataJson.yjs_2,
  284. yjs_3:dataJson.yjs_3,
  285. yjs_4:dataJson.yjs_4,
  286. selecteds:dataJson.otherHistorySelecteds?dataJson.otherHistorySelecteds:[],
  287. isEmpty:onlyOneText?true:false,//dataJson.otherHistoryIsEmpty,
  288. saveText:JSON.parse(dataJsonStr.other),
  289. editClear:dataJson.other.length>0?false:true
  290. });
  291. store.dispatch({
  292. type: CLEARCHECKBODY,
  293. data:dataJson.vital,
  294. selecteds:dataJson.checkBodySelecteds?dataJson.checkBodySelecteds:[],
  295. isEmpty:dataJson.checkBodyIsEmpty,
  296. saveText:JSON.parse(dataJsonStr.vital)
  297. });
  298. store.dispatch(clearAllLabel(
  299. dataJson.lis.labelList,
  300. dataJson.lis.getExcelDataList,
  301. dataJsonStr.lis.split('-')[0],
  302. dataJsonStr.lis.split('-')[1]
  303. ));
  304. store.dispatch(clearAssistData(dataJson.pacs,dataJsonStr.pacs));
  305. store.dispatch({
  306. type: CLEAR_ALL_DIAG,
  307. data:dataJson.diag,
  308. saveText:dataJsonStr.diag,
  309. chronicMagItem:dataJson.diagChronicMagItem
  310. });
  311. store.dispatch({
  312. type: CLEAR_ALL_PUSH_MESSAGE,
  313. data:dataJson.advice,
  314. saveText:dataJsonStr.advice
  315. });
  316. store.dispatch({
  317. type:SETREADDITEMS,
  318. data:dataJson.addItems
  319. });
  320. store.dispatch({
  321. type:CLEAR_FIRST_MAIN_DIAG,
  322. flag:dataJson.isFirstMainDiag
  323. });
  324. //tab跳回辅助信息
  325. store.dispatch(tabChange('0'));
  326. }else{ //结构化历史病历回读
  327. /*let dataJson = JSON.parse(reData.dataJson);*/
  328. let dataJsonStr = reData.detailList;
  329. // console.log(dataJson,dataJsonStr,'结构化历史病历回读')
  330. // console.log(dataJson.mainSuitSelecteds,7887)
  331. store.dispatch({
  332. type: CLEAR_MAIN_SUIT,
  333. data:dataJson.chief,
  334. selecteds:dataJson.mainSuitSelecteds?dataJson.mainSuitSelecteds:[],
  335. saveText:dataJsonStr[0].content ? JSON.parse(dataJsonStr[0].content) :[],
  336. mainIds:dataJson.mainsuitIds?dataJson.mainsuitIds:[],
  337. chronicDesease:dataJson.mainChronicDesease,
  338. });
  339. store.dispatch({
  340. type: CLEAR_CURRENT_ILL,
  341. data:dataJson.present,
  342. selecteds:dataJson.currentIllSelecteds?dataJson.currentIllSelecteds:[],
  343. saveText:dataJsonStr[1].content ? JSON.parse(dataJsonStr[1].content):[],
  344. symptomIds:dataJson.currentIds?dataJson.currentIds:[]
  345. });
  346. store.dispatch({
  347. type: CLEAROTHERHISTORY,
  348. data:dataJson.other,
  349. yjs_1:dataJson.yjs_1,
  350. yjs_2:dataJson.yjs_2,
  351. yjs_3:dataJson.yjs_3,
  352. yjs_4:dataJson.yjs_4,
  353. selecteds:dataJson.otherHistorySelecteds?dataJson.otherHistorySelecteds:[],
  354. saveText:dataJsonStr[2].content ? JSON.parse(dataJsonStr[2].content):[],
  355. isEmpty:onlyOneText?true:false,//dataJson.otherHistoryIsEmpty,回读回来后判断是否只有一个空标签,是的话要使用模板
  356. editClear:dataJson.other.length>0?false:true
  357. });
  358. store.dispatch({
  359. type: CLEARCHECKBODY,
  360. data:dataJson.vital,
  361. selecteds:dataJson.checkBodySelecteds?dataJson.checkBodySelecteds:[],
  362. isEmpty:dataJson.checkBodyIsEmpty,
  363. saveText:dataJsonStr[3].content ? JSON.parse(dataJsonStr[3].content):[]
  364. });
  365. store.dispatch(clearAllLabel(
  366. dataJson.lis.labelList,
  367. dataJson.lis.getExcelDataList,
  368. dataJsonStr[4].content ? dataJsonStr[4].content.split('-')[0] :'',
  369. dataJsonStr[4].content ? dataJsonStr[4].content.split('-')[1] :''
  370. ));
  371. store.dispatch(clearAssistData(
  372. dataJson.pacs,
  373. dataJsonStr[5].content ? dataJsonStr[5].content:''
  374. ));
  375. store.dispatch({
  376. type: CLEAR_ALL_DIAG,
  377. data:dataJson.diag,
  378. saveText:dataJsonStr[6].content ? dataJsonStr[6].content:'',
  379. chronicMagItem:dataJson.diagChronicMagItem
  380. });
  381. store.dispatch({
  382. type: CLEAR_ALL_PUSH_MESSAGE,
  383. data:dataJson.advice,
  384. saveText:dataJsonStr[7].content ? dataJsonStr[7].content:''
  385. });
  386. store.dispatch({
  387. type:SETREADDITEMS,
  388. data:dataJson.addItems
  389. });
  390. store.dispatch({
  391. type:CLEAR_FIRST_MAIN_DIAG,
  392. flag:dataJson.isFirstMainDiag
  393. });
  394. }
  395. } else {
  396. if(type == 'template'){ //纯文本模板回读
  397. let dataJson = JSON.parse(reData.dataJson);
  398. let dataJsonStr = JSON.parse(reData.preview);
  399. // console.log(dataJson,dataJsonStr,'纯文本模板引用')
  400. store.dispatch({ //主诉文本框
  401. type: CLEAR_MAIN_SUIT,
  402. data:[],
  403. saveText:JSON.parse(dataJsonStr.chief)
  404. });
  405. store.dispatch({
  406. type: CLEAR_CURRENT_ILL,
  407. data:[],
  408. saveText:JSON.parse(dataJsonStr.present)
  409. });
  410. store.dispatch({
  411. type: CLEAROTHERHISTORY,
  412. data:[],
  413. isEmpty:dataJson.otherHistoryIsEmpty,
  414. saveText:JSON.parse(dataJsonStr.other)
  415. });
  416. store.dispatch({
  417. type: CLEARCHECKBODY,
  418. data:dataJson.vital,
  419. isEmpty:dataJson.checkBodyIsEmpty,
  420. saveText:JSON.parse(dataJsonStr.vital)
  421. });
  422. store.dispatch(clearAllLabel(
  423. dataJson.lis.labelList,
  424. dataJson.lis.getExcelDataList,
  425. dataJsonStr.lis.split('-')[0],
  426. dataJsonStr.lis.split('-')[1]
  427. ));
  428. store.dispatch(clearAssistData(dataJson.pacs,dataJsonStr.pacs));
  429. store.dispatch({
  430. type: CLEAR_ALL_DIAG,
  431. data:dataJson.diag,
  432. saveText:dataJsonStr.diag
  433. });
  434. store.dispatch({
  435. type: CLEAR_ALL_PUSH_MESSAGE,
  436. data:dataJson.advice,
  437. saveText:dataJsonStr.advice,
  438. });
  439. store.dispatch({
  440. type:SETREADDITEMS,
  441. data:dataJson.addItems
  442. });
  443. store.dispatch({
  444. type:CLEAR_FIRST_MAIN_DIAG,
  445. flag:dataJson.isFirstMainDiag
  446. });
  447. //tab跳回辅助信息
  448. store.dispatch(tabChange('0'));
  449. }else{ //纯文本历史病历回读
  450. let dataJson = JSON.parse(reData.dataJson);
  451. let dataJsonStr = reData.detailList;
  452. // console.log(dataJson,dataJsonStr,'纯文本历史病历回读')
  453. if(!dataJson && !dataJsonStr && !reData.sign){
  454. return;
  455. }
  456. store.dispatch({
  457. type: CLEAR_MAIN_SUIT,
  458. data:[],
  459. saveText:dataJsonStr[0].content ? JSON.parse(dataJsonStr[0].content) :[]
  460. });
  461. store.dispatch({
  462. type: CLEAR_CURRENT_ILL,
  463. data:[],
  464. saveText:dataJsonStr[1].content ? JSON.parse(dataJsonStr[1].content) :[]
  465. });
  466. store.dispatch({
  467. type: CLEAROTHERHISTORY,
  468. data:[],
  469. isEmpty:dataJson.otherHistoryIsEmpty,
  470. saveText:dataJsonStr[2].content ? JSON.parse(dataJsonStr[2].content) :[]
  471. });
  472. store.dispatch({
  473. type: CLEARCHECKBODY,
  474. data:dataJson.vital,
  475. isEmpty:dataJson.checkBodyIsEmpty,
  476. saveText:dataJsonStr[3].content ? JSON.parse(dataJsonStr[3].content):[]
  477. });
  478. store.dispatch(clearAllLabel(
  479. dataJson.lis.labelList,
  480. dataJson.lis.getExcelDataList,
  481. dataJsonStr[4].content ? dataJsonStr[4].content.split('-')[0] :'',
  482. dataJsonStr[4].content ? dataJsonStr[4].content.split('-')[1]:''
  483. ));
  484. store.dispatch(clearAssistData(
  485. dataJson.pacs,
  486. dataJsonStr[5].content ? dataJsonStr[5].content:''
  487. ));
  488. store.dispatch({
  489. type: CLEAR_ALL_DIAG,
  490. data:dataJson.diag,
  491. saveText:dataJsonStr[6].content ? dataJsonStr[6].content:''
  492. });
  493. store.dispatch({
  494. type: CLEAR_ALL_PUSH_MESSAGE,
  495. data:dataJson.advice,
  496. saveText:dataJsonStr[7].content ? dataJsonStr[7].content:''
  497. });
  498. store.dispatch({
  499. type:SETREADDITEMS,
  500. data:dataJson.addItems
  501. });
  502. store.dispatch({
  503. type:CLEAR_FIRST_MAIN_DIAG,
  504. flag:dataJson.isFirstMainDiag
  505. });
  506. }
  507. }
  508. }
  509. store.dispatch({
  510. type:ISREAD
  511. });
  512. }
  513. function filterArr(arr){
  514. let tmpArr = arr.filter((item)=>{
  515. if(item){
  516. return item
  517. }
  518. });
  519. return tmpArr.join("").replace(/\s/g,'');
  520. }
  521. function filterDataArr(arrTmp){ //数据处理
  522. let tmpArr = [];
  523. tmpArr = arrTmp.map((it,i)=>{ //连续的标点符号保留第一个
  524. if(!it)return '';
  525. if(!it.match(config.punctuationReg)&&!arrTmp[i-1]){ //只有标点符号或者前一个标签无值是(说明本标点灰显,不显示在预览中)
  526. return '';
  527. }
  528. return it.replace(config.punReg,function(word){
  529. return word.substr(0,1);
  530. });
  531. });
  532. return trimDots(tmpArr.join('')); //去掉开头的标点符号,最后的标点保留第一个,中间连续的保留第一个
  533. }
  534. //其他史预览数据处理-月经史
  535. function filterOtherDataArr(arrTmp,jsonArr){
  536. let tmpArr = [];
  537. let index1 = jsonArr.findIndex((item)=>{
  538. return item.formulaCode=='yjs_1';
  539. });
  540. let index2 = jsonArr.findIndex((item)=>{
  541. return item.formulaCode=='yjs_2';
  542. });
  543. let index3 = jsonArr.findIndex((item)=>{
  544. return item.formulaCode=='yjs_3';
  545. });
  546. let index4 = jsonArr.findIndex((item)=>{
  547. return item.formulaCode=='yjs_4';
  548. });
  549. if(index1==-1&&index2==-1&&index3==-1&&index4==-1){//无月经史
  550. return {str1:filterDataArr(arrTmp),str2:''};
  551. }
  552. tmpArr = arrTmp.map((it,i)=>{ //连续的标点符号保留第一个
  553. if(!it.match(config.punctuationReg)&&!arrTmp[i-1]||[index1,index2,index3,index4].includes(i)){ //只有标点符号或者前一个标签无值是(说明本标点灰显,不显示在预览中)
  554. return '';
  555. }
  556. return it.replace(config.punReg,function(word){
  557. return word.substr(0,1);
  558. });
  559. });
  560. const splitNum = [index1,index2,index3,index4].find((i)=>i!=-1);
  561. const str1 = [...tmpArr].splice(0,splitNum).join("");
  562. const str2 = [...tmpArr].splice(splitNum).join("");
  563. return {str1:trimDots(str1),str2:trimDots(str2),index:index1};
  564. }
  565. //去掉开头的标点符号,最后的标点保留第一个,中间连续的保留第一个
  566. function trimDots(str){
  567. return str.replace(config.punReg,function(word){
  568. return word.substr(0,1);
  569. }).replace(/^[,,.。::"“??”;;、!!\s]+/,'');
  570. }
  571. //标签间连续标点只保留一个,保留前面一个
  572. function formatContinueDots(data){
  573. let arr=[];
  574. arr=data&&data.filter((it,i)=>{
  575. if(i==0||(it.name&&(it.name.match(config.punctuationReg))||(data[i-1].name&&data[i-1].name.match(config.punctuationReg)))){
  576. return it;
  577. }
  578. if(!it.name){ //主诉现病史病情变化
  579. return it;
  580. }
  581. });
  582. return arr;
  583. }
  584. // 取消默认行为
  585. function preventDefault(event) {
  586. if (event.preventDefault) {
  587. event.preventDefault();
  588. } else {
  589. event.returnValue = false;
  590. }
  591. }
  592. //ie8添加解除事件兼容
  593. function windowEventHandler(type,func,dom){
  594. let win = dom?dom:window;
  595. if(win.addEventListener){
  596. win.addEventListener(type, func);
  597. }else{
  598. win.attachEvent('on'+type,func);
  599. }
  600. }
  601. function windowRemoveEventHandler(type,func,dom){
  602. let win = dom?dom:window;
  603. if(win.addEventListener){
  604. win.removeEventListener(type, func);
  605. }else{
  606. win.detachEvent('on'+type,func);
  607. }
  608. }
  609. //禁止回车事件
  610. function handleEnter(event){
  611. event = event?event:window.event;
  612. if(event.keyCode==13){return false;}
  613. }
  614. //获取病例输入的内容
  615. function getEMRParams(){
  616. const state = store.getState();
  617. const {message} = state.patInfo;
  618. const {mainSuit,currentIll,otherHistory,checkBody,inspect,assistCheck,diagnosticList} = state;
  619. //console.log('message', message)
  620. const main = filterDataArr(mainSuit.saveText)||'',
  621. current=filterDataArr(currentIll.saveText)||'',
  622. other = filterDataArr(otherHistory.saveText)||'',
  623. vital = filterDataArr(checkBody.saveText)||'',
  624. lis = inspect.pushItem, //化验推送所需数据
  625. pacs = assistCheck.dataString||'',
  626. dis=diagnosticList.diagnosticStrNoType||'',
  627. advice = '',
  628. diseaeId = [];
  629. const age = message.patientAge;
  630. const sex = message.sex;
  631. const patientId = message.patientId //病人id,取上次用药
  632. const hosCode = message.hospitalCode
  633. return {main,current,other,vital,lis,pacs,dis,advice,diseaeId,sex,age, patientId, hosCode};
  634. };
  635. function didPushParamChange(){
  636. const emrData = getEMRParams();
  637. const oldParams = storageLocal.get('emrParam');
  638. const newParams = JSON.stringify({
  639. age: emrData.age,
  640. diag: emrData.dis,
  641. lis: emrData.lis,
  642. other: emrData.other,
  643. pacs: emrData.pacs,
  644. sex: emrData.sex,
  645. vital:emrData.vital,
  646. symptom: emrData.current + emrData.main,
  647. hosCode:emrData.hosCode
  648. });
  649. if(newParams == oldParams){
  650. return false;
  651. }
  652. return true;
  653. }
  654. //判断页面所有数据是否为空
  655. function isAllClear(jsonData,jsonStr,baseList){
  656. if ( //结构化和文本数据都为空
  657. JSON.stringify(jsonData.advice) == '{}' &&
  658. jsonData.chief.length < 1 &&
  659. jsonData.present.length < 1 &&
  660. // jsonData.other.length < 1 &&
  661. (jsonData.other.length > 0 ? baseList.otherHistory.isEmpty : true) &&
  662. //jsonData.vital.length < 1 &&
  663. (jsonData.vital.length > 0 ? baseList.checkBody.isEmpty : true) &&
  664. jsonData.diag.length < 1 &&
  665. jsonData.pacs.length < 1 &&
  666. jsonData.lis.labelList.length < 1 &&
  667. jsonData.lis.getExcelDataList.length < 1 &&
  668. filterDataArr(JSON.parse(jsonStr.chief)) == '' &&
  669. filterDataArr(JSON.parse(jsonStr.present)) == '' &&
  670. filterDataArr(JSON.parse(jsonStr.other)) == '' && //这里都是filterDataArr不是filterArr,要去符号的
  671. filterDataArr(JSON.parse(jsonStr.vital)) == ''
  672. ) {
  673. return false;
  674. }else{
  675. return true;
  676. }
  677. }
  678. //判断除主诉外页面数据是否为空--慢病模板
  679. function ifOtherClear(jsonData,jsonStr,baseList){
  680. if ( //结构化和文本数据都为空
  681. JSON.stringify(jsonData.advice) == '{}' &&
  682. jsonData.present.length < 1 &&
  683. (jsonData.other.length > 0 ? baseList.otherHistory.isEmpty : true) &&
  684. (jsonData.vital.length > 0 ? baseList.checkBody.isEmpty : true) &&
  685. jsonData.diag.length < 1 &&
  686. jsonData.pacs.length < 1 &&
  687. jsonData.lis.labelList.length < 1 &&
  688. jsonData.lis.getExcelDataList.length < 1 &&
  689. filterDataArr(JSON.parse(jsonStr.present)) == '' &&
  690. filterDataArr(JSON.parse(jsonStr.other)) == '' && //这里都是filterDataArr不是filterArr,要去符号的
  691. filterDataArr(JSON.parse(jsonStr.vital)) == ''
  692. ) {
  693. return false;
  694. }else{
  695. return true;
  696. }
  697. }
  698. function normalVal(min,max){
  699. if(min == ''&&max==''){
  700. return null;
  701. }else if(!isNaN(min) && !isNaN(max)){
  702. return `正常值: (${min}~${max})`
  703. }else if(!isNaN(min) && isNaN(max)){
  704. return `正常值: (>${min})`
  705. }else if(isNaN(min) && !isNaN(max)){
  706. return `正常值: (<${max})`
  707. }
  708. }
  709. /**
  710. *
  711. * @param {弹窗显示位置是否往下设置} stic
  712. */
  713. function getPageCoordinate(event,stic){//获取鼠标点击的位置
  714. let e = event || window.event;
  715. var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
  716. var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
  717. var x = e.pageX || (e.clientX + scrollX);
  718. var y = (e.pageY+(stic?25:0)) || (e.clientY + scrollY + (stic?25:0));//弹窗位置偏下25
  719. let obj = {
  720. boxLeft : x ,
  721. boxTop : y
  722. }
  723. return obj;
  724. }
  725. function timestampToTime(timestamp) { //excel导入2019年5月1日会转换成时间戳
  726. var date = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
  727. var Y = date.getFullYear() + '-';
  728. var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
  729. var D = date.getDate() + ' ';
  730. var h = date.getHours() + ':';
  731. var m = date.getMinutes() + ':';
  732. var s = date.getSeconds();
  733. return Y+M+D+h+m+s;
  734. }
  735. /**
  736. *
  737. * @param {需要年月日传个true,不需要不传或者false} flg
  738. */
  739. function getCurrentDate(flg,con){
  740. let link = con?con:'-'
  741. let myDate = new Date();
  742. let year = myDate.getFullYear(); //获取完整的年份(4位,1970-????)
  743. let mon = myDate.getMonth()-0+1; //获取当前月份(0-11,0代表1月)
  744. let day = myDate.getDate(); //获取当前日(1-31)
  745. let date = '';
  746. if(flg){
  747. var h = myDate.getHours();
  748. var m = myDate.getMinutes();
  749. var s = myDate.getSeconds();
  750. 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');
  751. }else{
  752. date = year+link+mon.toString().padStart(2,'0')+link+day.toString().padStart(2,'0');
  753. }
  754. return date;
  755. }
  756. function inspectAndAssist(){
  757. const state = store.getState();
  758. let mainType = state.typeConfig.typeConfig
  759. if(mainType == 1){return}//文本模式不放化验辅检的模板
  760. let tmpAll = state.homePage.allModules;
  761. let tmpInspected = state.inspect.labelList;
  762. let tmpAssisted = state.assistCheck.assistLabel;
  763. let tmpInspect = [],tmpAssist = [],assayArr = [],tmpDetail=[],checkArr = [];
  764. for(let i = 0;i < tmpAll.length;i++){
  765. let tmpItem = tmpAll[i];
  766. if(tmpItem.type == 5){
  767. tmpInspect = tmpItem.moduleDetailDTOList || []
  768. }else if(tmpItem.type == 6){
  769. tmpAssist = tmpItem.moduleDetailDTOList || []
  770. }
  771. }
  772. for(let i = 0;i < tmpInspect.length;i++){//化验数据处理
  773. let tmpObj = { //添加化验
  774. details: [],
  775. name: '',
  776. questionId: '',
  777. showType: 1,
  778. uniqueName:''
  779. }
  780. if (tmpInspect[i].controlType == 0) {
  781. tmpDetail = tmpInspect[i].questionMapping
  782. }else if(tmpInspect[i].controlType == 1 || tmpInspect[i].controlType == 6){
  783. tmpDetail = new Array(tmpInspect[i])
  784. }
  785. tmpObj.questionId = tmpInspect[i].id
  786. tmpObj.name = tmpInspect[i].name
  787. tmpObj.details = tmpDetail
  788. tmpObj.uniqueName = tmpInspect[i].uniqueName || ''
  789. assayArr.push(tmpObj)
  790. }
  791. for(let i = 0;i < tmpAssist.length;i++){//辅检数据处理
  792. let tmpObj = { //添加辅检
  793. name: '',
  794. questionId: '',
  795. showType: 1,
  796. time:getCurrentDate(),
  797. value:''
  798. }
  799. tmpObj.questionId = tmpAssist[i].id
  800. tmpObj.name = tmpAssist[i].name
  801. checkArr.push(tmpObj)
  802. }
  803. if(assayArr.length>0 && tmpInspected.length == 0){//化验
  804. store.dispatch(addLabel(assayArr))
  805. }
  806. if(checkArr.length > 0 && tmpAssisted.length == 0){//辅检
  807. store.dispatch(addAssistLabel(checkArr))
  808. }
  809. }
  810. function readyKeepHistory(){
  811. let baseList = store.getState();
  812. let jsonStr = getAllDataStringList(baseList);
  813. if(filterDataArr(JSON.parse(jsonStr.chief)) == ''){
  814. return 1;//主诉不能为空
  815. }else if(!jsonStr.diag || jsonStr.diag.trim().length < 1){
  816. return 2;//诊断不能为空
  817. }else{
  818. return 3;
  819. }
  820. }
  821. //评估图表数据转换
  822. function parseChartData(indexData){
  823. let arr=[],obj={},temp={};
  824. let nameArr=[],nameObj={};
  825. if(!indexData){
  826. return [];
  827. }
  828. indexData.indexData.map((it)=>{
  829. temp=indexData.indexConfigData.find((i)=>{return it.itemName==i.indexUnique});
  830. arr=obj[temp.groupType]||[];
  831. nameArr=nameObj[temp.groupType]||[];
  832. obj[temp.groupType]=[...arr,it];
  833. nameObj[temp.groupType]=[...nameArr,it.itemName];
  834. });
  835. //nameObj,obj;
  836. return {nameObj,obj};
  837. }
  838. //函数类工具,对函数进行操作 返回函数
  839. //延时操作
  840. function debounce(func, delay) {
  841. let timer = null;
  842. return function (...args) {
  843. if (timer) {
  844. clearTimeout(timer);
  845. }
  846. timer = setTimeout(() => {
  847. func.apply(this, args);
  848. }, delay);
  849. }
  850. }
  851. // 时间戳转换日期
  852. function dateParser(timestamp,link = '-'){
  853. let time = new Date(timestamp);
  854. let year = time.getFullYear();
  855. let month = time.getMonth()+1;
  856. let date = time.getDate();
  857. let hour = time.getHours().toString().padStart(2,'0');
  858. let minute = time.getMinutes().toString().padStart(2,'0');
  859. let second = time.getSeconds().toString().padStart(2,'0');
  860. // let result = year+link+month+link+date;
  861. let result = year+link+(month<10?"0"+month:month)+link+(date<10?"0"+date:date)+' '+hour+':'+minute+':'+second;
  862. return result;
  863. }
  864. //时间搓转换年龄
  865. function getAge(time){
  866. const birthday = new Date(time),
  867. year = birthday.getFullYear(),
  868. month = birthday.getMonth() + 1,
  869. day = birthday.getDate(),
  870. now = new Date(),
  871. now_year = now.getFullYear(),
  872. now_month = now.getMonth() + 1,
  873. now_day = now.getDate();
  874. let age= now_year - year;
  875. if (now_month > month) {
  876. age += 1;
  877. } else if (now_month === month) {
  878. if (now_day >= day) {
  879. age += 1;
  880. }
  881. }
  882. return age;
  883. };
  884. //获取URL参数-返回json对象
  885. function parseUrl(url){
  886. const r = url.substr(1).split("&"),
  887. obj = {};
  888. r.forEach((v) => {
  889. const index = v.indexOf('=');
  890. if (index > -1) {
  891. obj[v.substring(0, index)] = v.substring(index + 1);
  892. }
  893. });
  894. return obj;
  895. }
  896. //获取组合组件已填文字填入saveText
  897. function getSaveText(data){//console.log(data)
  898. const arr = data.questionMapping.map((it)=>{
  899. return it.value?(it.labelPrefix||'')+(it.value||'')+(it.labelSuffix||''):'';
  900. });
  901. return arr.join('');
  902. }
  903. //添加自由文本标签
  904. function notTextLabel(label){
  905. return +label.tagType!==8;
  906. }
  907. /*
  908. * 给标签组添加自由文本标签
  909. * 入参:arr源数组,
  910. * noPre是否不添加前置文本标签,默认false即添加
  911. * noEnd是否不添加后置文本标签,默认false即添加
  912. * 出参:newArr添加自由文本标签后的数据Array,
  913. * saveText添加自由文本后对应的预览数据Array,
  914. * */
  915. function fullfillText(arr,noPre=false,noEnd=false){
  916. let newArr =[],
  917. pre={},
  918. textLabel={},
  919. notText = true,
  920. saveText=[],
  921. tempText = '',
  922. value = '',
  923. cNum = 0;
  924. Array.isArray(arr)&&arr.map((it,i)=>{
  925. notText = notTextLabel(it);
  926. cNum = i;
  927. value = it.value||'';
  928. textLabel = JSON.parse(config.textLabel);
  929. //n个显示的标签最后一个标签后面要落关标,所以+1
  930. if(i===0){
  931. //第一个标签不是文本标签时在前面添加文本标签
  932. if(!noPre&&notText){
  933. newArr.push(textLabel);
  934. saveText.push('');
  935. }
  936. newArr.push(it);
  937. if(it.tagType != 3){ //非血压类组合标签
  938. tempText = value?it.labelPrefix+value+it.labelSuffix:'';
  939. tempText = notText?tempText:it.value||it.name;
  940. }else{
  941. tempText = getSaveText(it);
  942. }
  943. saveText.push(tempText);
  944. // 模板只有一个标签时第一项后面也要加空标签
  945. if(arr.length==1&&notText){
  946. newArr.push(JSON.parse(config.textLabel));
  947. saveText.push('');
  948. }
  949. }else{
  950. pre = arr[i-1];
  951. //如果本身不是文本标签且前面一个也不是文本标签,该标签前面添加文本标签
  952. if(notTextLabel(pre)&&notText){
  953. newArr.push(textLabel,it);
  954. if(it.tagType != 3) {
  955. tempText = value ? it.labelPrefix + value + it.labelSuffix : '';
  956. }else{
  957. tempText = getSaveText(it);
  958. }
  959. saveText.push("",tempText);
  960. }else{ //本身是或者前面是文本标签时,前面不添加文本标签
  961. newArr.push(it);
  962. if(it.tagType != 3) {
  963. tempText = value ? it.labelPrefix + value + it.labelSuffix : '';
  964. tempText = notText ? tempText : (it.value || it.value == "" ? it.value : it.name);
  965. }else{
  966. tempText = getSaveText(it);
  967. }
  968. saveText.push(tempText);
  969. }
  970. if(notText&&!noEnd&&i===arr.length-1){//最后一个非文本标签,后面添加一个文本标签
  971. //不能用上面的变量textLabel,因为上一个if可能也进了,这样就是同一个对象,值改变时会同步
  972. newArr.push(JSON.parse(config.textLabel));
  973. saveText.push("");
  974. }
  975. }
  976. });
  977. return {newArr,saveText};
  978. };
  979. /*
  980. * 查体添加自由文本标签函数
  981. * 默认标签直接添加,
  982. * 前config.showCheckNum个源数据标签默认显示,剩余隐藏收起
  983. * 入参:arr源数组,
  984. * noPre是否不添加前置文本标签,默认false即添加
  985. * noEnd是否不添加后置文本标签,默认false即添加
  986. * showInCheck是否默认在查体中展开
  987. * 出参:newArr添加自由文本标签后的数据Array,
  988. * saveText添加自由文本后对应的预览数据Array,
  989. * checkHiddenDefault查体是否全部标签展开
  990. *
  991. * */
  992. function checkFullfillText(arr,noPre=false,noEnd=false){
  993. let newArr =[],
  994. pre={},
  995. textLabel={},
  996. notText = true,
  997. saveText=[],
  998. tempText = '',
  999. value = '',
  1000. item={},
  1001. checkHiddenDefault=false;
  1002. arr&&arr.map((it,i)=>{
  1003. notText = notTextLabel(it);
  1004. value = it.value||'';
  1005. //textLabel = i==0?JSON.parse(config.textLabel):Object.assign({},JSON.parse(config.textLabel),{showInCheck:true});
  1006. //n个显示的标签最后一个标签后面要落关标,所以+1
  1007. //_textLabel = !ifEmpty&&cNum<config.showCheckNum+1?Object.assign({},JSON.parse(config._textLabel),{showInCheck:true}):JSON.parse(config._textLabel);
  1008. if(i===0){
  1009. textLabel = Object.assign({},JSON.parse(config.textLabel),{showInCheck:true});
  1010. //第一个标签不是文本标签时在前面添加文本标签
  1011. if(!noPre&&notText){
  1012. newArr.push(textLabel);
  1013. saveText.push('');
  1014. }
  1015. item = Object.assign({},it,{showInCheck:true});
  1016. newArr.push(item);
  1017. if(it.tagType != 3){
  1018. tempText = value?it.labelPrefix+value+it.labelSuffix:'';
  1019. tempText = notText?tempText:it.value||it.name;
  1020. }else{
  1021. tempText = getSaveText(it);
  1022. }
  1023. saveText.push(tempText);
  1024. // 模板只有一个标签时第一项后面也要加空标签
  1025. if(arr.length==1&&notText){
  1026. newArr.push(textLabel);
  1027. saveText.push('');
  1028. }
  1029. }else{
  1030. pre = arr[i-1];
  1031. item = i<config.showCheckNum?Object.assign({},it,{showInCheck:true}):it;
  1032. //判断单选项是否有默认选中,位置在隐藏区域时,查体所有标签展示
  1033. if(!checkHiddenDefault&&i>config.showCheckNum&&+it.tagType===1&&(+it.controlType===0||+it.controlType===1)){
  1034. if(it.questionDetailList.find((it)=>it.defaultSelect=='1')){
  1035. checkHiddenDefault=true;
  1036. }
  1037. }
  1038. //如果本身不是文本标签且前面一个也不是文本标签,该标签前面添加文本标签
  1039. if(notTextLabel(pre)&&notText){
  1040. textLabel = Object.assign(JSON.parse(config._textLabel),{showInCheck:i-1<config.showCheckNum?true:false});
  1041. newArr.push(textLabel,item);
  1042. if(it.tagType != 3) {
  1043. tempText = value ? it.labelPrefix + value + it.labelSuffix : '';
  1044. }else{
  1045. tempText = getSaveText(it);
  1046. }
  1047. saveText.push("",tempText);
  1048. }else{ //本身是或者前面是文本标签时,前面不添加文本标签
  1049. newArr.push(item);
  1050. if(it.tagType != 3) {
  1051. tempText = value ? it.labelPrefix + value + it.labelSuffix : '';
  1052. tempText = notText ? tempText : (it.value || it.value == "" ? it.value : it.name);
  1053. }else{
  1054. tempText = getSaveText(it);
  1055. }
  1056. saveText.push(tempText);
  1057. }
  1058. if(notText&&!noEnd&&i===arr.length-1){//最后一个非文本标签,后面添加一个文本标签
  1059. const _text = Object.assign(JSON.parse(config.textLabel),{showInCheck:arr.length>config.showCheckNum?false:true});
  1060. newArr.push(_text);
  1061. saveText.push("");
  1062. }
  1063. }
  1064. });
  1065. return {newArr,saveText,checkHiddenDefault};
  1066. }
  1067. //获取标签index,入参:病例项index+标签index+标签内index
  1068. function getLabelIndex(index){
  1069. let ikey = '';
  1070. if(index.length == 3){
  1071. ikey = index.substr(1,1);
  1072. }else if(index.length == 4){
  1073. ikey = index.substr(1,2);
  1074. }else if(index.length == 5){
  1075. ikey = index.substr(1,3);
  1076. }
  1077. return ikey;
  1078. };
  1079. function getWindowInnerHeight(){
  1080. if(window.innerHeight!=undefined){
  1081. return window.innerHeight;
  1082. }else{
  1083. let by = document.body, ele = document.documentElement;
  1084. return Math.min(by.clientHeight,ele.clientHeight);
  1085. }
  1086. };
  1087. function getWindowInnerWidth(){
  1088. let width = window.innerWidth || document.body.clientWidth || document.documentElement.clientWidth
  1089. return width
  1090. };
  1091. function getIds(data){
  1092. let ids = [];
  1093. data&&data.forEach((it,i)=>{
  1094. ids.push(it.id);
  1095. })
  1096. return ids;
  1097. }
  1098. /**
  1099. *
  1100. * @param {日期相关} info
  1101. * @param {时间是否包含时分秒} flg
  1102. * @param {连接符} con
  1103. */
  1104. function getCalendarDate(info,flg,con) {
  1105. let date = '';
  1106. let time = flg?flg:false;
  1107. let conect = con?con:'-';
  1108. if(time){
  1109. 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');
  1110. }else{
  1111. date = info.year + conect + (info.month < 10 ? '0' + info.month : info.month) + conect + (info.day < 10 ? '0' + info.day : info.day);
  1112. }
  1113. return date;
  1114. }
  1115. // 导出
  1116. function downloadExportedData(data, fileName) {
  1117. // var blob = new Blob([data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'}); //type表示xlsx类型
  1118. var blob = new Blob([data], {type: 'application/vnd.ms-excel'}); //type表示xlsx类型
  1119. var downloadElement = document.createElement('a');
  1120. var href = window.URL.createObjectURL(blob); //创建下载的链接
  1121. downloadElement.href = href;
  1122. downloadElement.download = fileName; //下载后文件名
  1123. document.body.appendChild(downloadElement);
  1124. downloadElement.click(); //点击下载
  1125. document.body.removeChild(downloadElement); //下载完成移除元素
  1126. window.URL.revokeObjectURL(href);
  1127. }
  1128. function getStatusImg(type,val,status){
  1129. if(type == 0){//正常
  1130. return <span>{val} </span>
  1131. }else if(type == 1){//异常(表单输入的话非数字显示为异常)
  1132. return <span className={'red'}>{val} </span>
  1133. }
  1134. if(status == 1){
  1135. if(type == 2){
  1136. return <span style={{color:'#FF5D5D'}}>{val}<img src={up} alt=""/> </span>
  1137. }else if(type == 3){
  1138. return <span style={{color:"#D949FF"}}>{val}<img src={down} alt=""/> </span>
  1139. }
  1140. }else{
  1141. if(type == 2){
  1142. return <span>{val}<img src={up} alt=""/> </span>
  1143. }else if(type == 3){
  1144. return <span>{val}<img src={down} alt=""/> </span>
  1145. }
  1146. }
  1147. }
  1148. //键值对转换
  1149. function parseNameVal(arr){
  1150. let obj = {};
  1151. Array.isArray(arr)&&arr.map((it)=>{
  1152. obj[it.code]=it.value;
  1153. });
  1154. return obj;
  1155. }
  1156. module.exports = {
  1157. checkType: Type.checkType,
  1158. getIds,
  1159. getWindowInnerWidth,
  1160. getWindowInnerHeight,
  1161. getLabelIndex,
  1162. fullfillText,
  1163. checkFullfillText,
  1164. parseUrl,
  1165. getAge,
  1166. dateParser,
  1167. debounce,
  1168. regexp,
  1169. isUndefined,
  1170. Storage,
  1171. nullFn,
  1172. isNotNull,
  1173. isNull,
  1174. deepClone,
  1175. isIE,
  1176. storageLocal,
  1177. getUrlArgObject,
  1178. getAllDataList,
  1179. getAllDataStringList,
  1180. pushAllDataList,
  1181. filterArr,
  1182. filterDataArr,
  1183. filterOtherDataArr,
  1184. preventDefault,
  1185. handleEnter,
  1186. didPushParamChange,
  1187. getEMRParams,
  1188. windowEventHandler,
  1189. isAllClear,
  1190. normalVal,
  1191. getPageCoordinate,
  1192. windowRemoveEventHandler,
  1193. timestampToTime,
  1194. formatContinueDots,
  1195. inspectAndAssist,
  1196. getCurrentDate,
  1197. ifOtherClear,
  1198. readyKeepHistory,
  1199. parseChartData,
  1200. getCalendarDate,
  1201. downloadExportedData,
  1202. getStatusImg,
  1203. parseNameVal
  1204. };