tools.js 44 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244
  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-0) && (max-0)){
  700. return `正常值: (${min}~${max})`
  701. }else if((min-0) && !(max-0)){
  702. return `正常值: (>=${min})`
  703. }else if(!(min-0) && (max-0)){
  704. if(min == '' || min == null){
  705. return `正常值: (<=${max})`
  706. }else{
  707. return `正常值: (${min}~${max})`
  708. }
  709. }else{
  710. return null;
  711. }
  712. }
  713. /**
  714. *
  715. * @param {弹窗显示位置是否往下设置} stic
  716. */
  717. function getPageCoordinate(event,stic){//获取鼠标点击的位置
  718. let e = event || window.event;
  719. var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
  720. var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
  721. var x = e.pageX || (e.clientX + scrollX);
  722. var y = (e.pageY+(stic?25:0)) || (e.clientY + scrollY + (stic?25:0));//弹窗位置偏下25
  723. let obj = {
  724. boxLeft : x ,
  725. boxTop : y
  726. }
  727. return obj;
  728. }
  729. function timestampToTime(timestamp) { //excel导入2019年5月1日会转换成时间戳
  730. var date = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
  731. var Y = date.getFullYear() + '-';
  732. var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
  733. var D = date.getDate() + ' ';
  734. var h = date.getHours() + ':';
  735. var m = date.getMinutes() + ':';
  736. var s = date.getSeconds();
  737. return Y+M+D+h+m+s;
  738. }
  739. /**
  740. *
  741. * @param {需要年月日传个true,不需要不传或者false} flg
  742. */
  743. function getCurrentDate(flg,con){
  744. let link = con?con:'-'
  745. let myDate = new Date();
  746. let year = myDate.getFullYear(); //获取完整的年份(4位,1970-????)
  747. let mon = myDate.getMonth()-0+1; //获取当前月份(0-11,0代表1月)
  748. let day = myDate.getDate(); //获取当前日(1-31)
  749. let date = '';
  750. if(flg){
  751. var h = date.getHours();
  752. var m = date.getMinutes();
  753. var s = date.getSeconds();
  754. 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');
  755. }else{
  756. date = year+link+mon.toString().padStart(2,'0')+link+day.toString().padStart(2,'0');
  757. }
  758. return date;
  759. }
  760. function inspectAndAssist(){
  761. const state = store.getState();
  762. let mainType = state.typeConfig.typeConfig
  763. if(mainType == 1){return}//文本模式不放化验辅检的模板
  764. let tmpAll = state.homePage.allModules;
  765. let tmpInspected = state.inspect.labelList;
  766. let tmpAssisted = state.assistCheck.assistLabel;
  767. let tmpInspect = [],tmpAssist = [],assayArr = [],tmpDetail=[],checkArr = [];
  768. for(let i = 0;i < tmpAll.length;i++){
  769. let tmpItem = tmpAll[i];
  770. if(tmpItem.type == 5){
  771. tmpInspect = tmpItem.moduleDetailDTOList || []
  772. }else if(tmpItem.type == 6){
  773. tmpAssist = tmpItem.moduleDetailDTOList || []
  774. }
  775. }
  776. for(let i = 0;i < tmpInspect.length;i++){//化验数据处理
  777. let tmpObj = { //添加化验
  778. details: [],
  779. name: '',
  780. questionId: '',
  781. showType: 1,
  782. uniqueName:''
  783. }
  784. if (tmpInspect[i].controlType == 0) {
  785. tmpDetail = tmpInspect[i].questionMapping
  786. }else if(tmpInspect[i].controlType == 1 || tmpInspect[i].controlType == 6){
  787. tmpDetail = new Array(tmpInspect[i])
  788. }
  789. tmpObj.questionId = tmpInspect[i].id
  790. tmpObj.name = tmpInspect[i].name
  791. tmpObj.details = tmpDetail
  792. tmpObj.uniqueName = tmpInspect[i].uniqueName || ''
  793. assayArr.push(tmpObj)
  794. }
  795. for(let i = 0;i < tmpAssist.length;i++){//辅检数据处理
  796. let tmpObj = { //添加辅检
  797. name: '',
  798. questionId: '',
  799. showType: 1,
  800. time:getCurrentDate(),
  801. value:''
  802. }
  803. tmpObj.questionId = tmpAssist[i].id
  804. tmpObj.name = tmpAssist[i].name
  805. checkArr.push(tmpObj)
  806. }
  807. if(assayArr.length>0 && tmpInspected.length == 0){//化验
  808. store.dispatch(addLabel(assayArr))
  809. }
  810. if(checkArr.length > 0 && tmpAssisted.length == 0){//辅检
  811. store.dispatch(addAssistLabel(checkArr))
  812. }
  813. }
  814. function readyKeepHistory(){
  815. let baseList = store.getState();
  816. let jsonStr = getAllDataStringList(baseList);
  817. if(filterDataArr(JSON.parse(jsonStr.chief)) == ''){
  818. return 1;//主诉不能为空
  819. }else if(!jsonStr.diag || jsonStr.diag.trim().length < 1){
  820. return 2;//诊断不能为空
  821. }else{
  822. return 3;
  823. }
  824. }
  825. //评估图表数据转换
  826. function parseChartData(indexData){
  827. let arr=[],obj={},temp={};
  828. let nameArr=[],nameObj={};
  829. if(!indexData){
  830. return [];
  831. }
  832. indexData.indexData.map((it)=>{
  833. temp=indexData.indexConfigData.find((i)=>{return it.itemName==i.indexUnique});
  834. arr=obj[temp.groupType]||[];
  835. nameArr=nameObj[temp.groupType]||[];
  836. obj[temp.groupType]=[...arr,it];
  837. nameObj[temp.groupType]=[...nameArr,it.itemName];
  838. });
  839. //nameObj,obj;
  840. return {nameObj,obj};
  841. }
  842. //函数类工具,对函数进行操作 返回函数
  843. //延时操作
  844. function debounce(func, delay) {
  845. let timer = null;
  846. return function (...args) {
  847. if (timer) {
  848. clearTimeout(timer);
  849. }
  850. timer = setTimeout(() => {
  851. func.apply(this, args);
  852. }, delay);
  853. }
  854. }
  855. // 时间戳转换日期
  856. function dateParser(timestamp,link = '-'){
  857. let time = new Date(timestamp);
  858. let year = time.getFullYear();
  859. let month = time.getMonth()+1;
  860. let date = time.getDate();
  861. let hour = time.getHours().toString().padStart(2,'0');
  862. let minute = time.getMinutes().toString().padStart(2,'0');
  863. // let result = year+link+month+link+date;
  864. let result = year+link+(month<10?"0"+month:month)+link+(date<10?"0"+date:date)+' '+hour+':'+minute;
  865. return result;
  866. }
  867. //时间搓转换年龄
  868. function getAge(time){
  869. const birthday = new Date(time),
  870. year = birthday.getFullYear(),
  871. month = birthday.getMonth() + 1,
  872. day = birthday.getDate(),
  873. now = new Date(),
  874. now_year = now.getFullYear(),
  875. now_month = now.getMonth() + 1,
  876. now_day = now.getDate();
  877. let age= now_year - year;
  878. if (now_month > month) {
  879. age += 1;
  880. } else if (now_month === month) {
  881. if (now_day >= day) {
  882. age += 1;
  883. }
  884. }
  885. return age;
  886. };
  887. //获取URL参数-返回json对象
  888. function parseUrl(url){
  889. const r = url.substr(1).split("&"),
  890. obj = {};
  891. r.forEach((v) => {
  892. const index = v.indexOf('=');
  893. if (index > -1) {
  894. obj[v.substring(0, index)] = v.substring(index + 1);
  895. }
  896. });
  897. return obj;
  898. }
  899. //获取组合组件已填文字填入saveText
  900. function getSaveText(data){//console.log(data)
  901. const arr = data.questionMapping.map((it)=>{
  902. return it.value?(it.labelPrefix||'')+(it.value||'')+(it.labelSuffix||''):'';
  903. });
  904. return arr.join('');
  905. }
  906. //添加自由文本标签
  907. function notTextLabel(label){
  908. return +label.tagType!==8;
  909. }
  910. /*
  911. * 给标签组添加自由文本标签
  912. * 入参:arr源数组,
  913. * noPre是否不添加前置文本标签,默认false即添加
  914. * noEnd是否不添加后置文本标签,默认false即添加
  915. * 出参:newArr添加自由文本标签后的数据Array,
  916. * saveText添加自由文本后对应的预览数据Array,
  917. * */
  918. function fullfillText(arr,noPre=false,noEnd=false){
  919. let newArr =[],
  920. pre={},
  921. textLabel={},
  922. notText = true,
  923. saveText=[],
  924. tempText = '',
  925. value = '',
  926. cNum = 0;
  927. Array.isArray(arr)&&arr.map((it,i)=>{
  928. notText = notTextLabel(it);
  929. cNum = i;
  930. value = it.value||'';
  931. textLabel = JSON.parse(config.textLabel);
  932. //n个显示的标签最后一个标签后面要落关标,所以+1
  933. if(i===0){
  934. //第一个标签不是文本标签时在前面添加文本标签
  935. if(!noPre&&notText){
  936. newArr.push(textLabel);
  937. saveText.push('');
  938. }
  939. newArr.push(it);
  940. if(it.tagType != 3){ //非血压类组合标签
  941. tempText = value?it.labelPrefix+value+it.labelSuffix:'';
  942. tempText = notText?tempText:it.value||it.name;
  943. }else{
  944. tempText = getSaveText(it);
  945. }
  946. saveText.push(tempText);
  947. // 模板只有一个标签时第一项后面也要加空标签
  948. if(arr.length==1&&notText){
  949. newArr.push(JSON.parse(config.textLabel));
  950. saveText.push('');
  951. }
  952. }else{
  953. pre = arr[i-1];
  954. //如果本身不是文本标签且前面一个也不是文本标签,该标签前面添加文本标签
  955. if(notTextLabel(pre)&&notText){
  956. newArr.push(textLabel,it);
  957. if(it.tagType != 3) {
  958. tempText = value ? it.labelPrefix + value + it.labelSuffix : '';
  959. }else{
  960. tempText = getSaveText(it);
  961. }
  962. saveText.push("",tempText);
  963. }else{ //本身是或者前面是文本标签时,前面不添加文本标签
  964. newArr.push(it);
  965. if(it.tagType != 3) {
  966. tempText = value ? it.labelPrefix + value + it.labelSuffix : '';
  967. tempText = notText ? tempText : (it.value || it.value == "" ? it.value : it.name);
  968. }else{
  969. tempText = getSaveText(it);
  970. }
  971. saveText.push(tempText);
  972. }
  973. if(notText&&!noEnd&&i===arr.length-1){//最后一个非文本标签,后面添加一个文本标签
  974. //不能用上面的变量textLabel,因为上一个if可能也进了,这样就是同一个对象,值改变时会同步
  975. newArr.push(JSON.parse(config.textLabel));
  976. saveText.push("");
  977. }
  978. }
  979. });
  980. return {newArr,saveText};
  981. };
  982. /*
  983. * 查体添加自由文本标签函数
  984. * 默认标签直接添加,
  985. * 前config.showCheckNum个源数据标签默认显示,剩余隐藏收起
  986. * 入参:arr源数组,
  987. * noPre是否不添加前置文本标签,默认false即添加
  988. * noEnd是否不添加后置文本标签,默认false即添加
  989. * showInCheck是否默认在查体中展开
  990. * 出参:newArr添加自由文本标签后的数据Array,
  991. * saveText添加自由文本后对应的预览数据Array,
  992. * checkHiddenDefault查体是否全部标签展开
  993. *
  994. * */
  995. function checkFullfillText(arr,noPre=false,noEnd=false){
  996. let newArr =[],
  997. pre={},
  998. textLabel={},
  999. notText = true,
  1000. saveText=[],
  1001. tempText = '',
  1002. value = '',
  1003. item={},
  1004. checkHiddenDefault=false;
  1005. arr&&arr.map((it,i)=>{
  1006. notText = notTextLabel(it);
  1007. value = it.value||'';
  1008. //textLabel = i==0?JSON.parse(config.textLabel):Object.assign({},JSON.parse(config.textLabel),{showInCheck:true});
  1009. //n个显示的标签最后一个标签后面要落关标,所以+1
  1010. //_textLabel = !ifEmpty&&cNum<config.showCheckNum+1?Object.assign({},JSON.parse(config._textLabel),{showInCheck:true}):JSON.parse(config._textLabel);
  1011. if(i===0){
  1012. textLabel = Object.assign({},JSON.parse(config.textLabel),{showInCheck:true});
  1013. //第一个标签不是文本标签时在前面添加文本标签
  1014. if(!noPre&&notText){
  1015. newArr.push(textLabel);
  1016. saveText.push('');
  1017. }
  1018. item = Object.assign({},it,{showInCheck:true});
  1019. newArr.push(item);
  1020. if(it.tagType != 3){
  1021. tempText = value?it.labelPrefix+value+it.labelSuffix:'';
  1022. tempText = notText?tempText:it.value||it.name;
  1023. }else{
  1024. tempText = getSaveText(it);
  1025. }
  1026. saveText.push(tempText);
  1027. // 模板只有一个标签时第一项后面也要加空标签
  1028. if(arr.length==1&&notText){
  1029. newArr.push(textLabel);
  1030. saveText.push('');
  1031. }
  1032. }else{
  1033. pre = arr[i-1];
  1034. item = i<config.showCheckNum?Object.assign({},it,{showInCheck:true}):it;
  1035. //判断单选项是否有默认选中,位置在隐藏区域时,查体所有标签展示
  1036. if(!checkHiddenDefault&&i>config.showCheckNum&&+it.tagType===1&&(+it.controlType===0||+it.controlType===1)){
  1037. if(it.questionDetailList.find((it)=>it.defaultSelect=='1')){
  1038. checkHiddenDefault=true;
  1039. }
  1040. }
  1041. //如果本身不是文本标签且前面一个也不是文本标签,该标签前面添加文本标签
  1042. if(notTextLabel(pre)&&notText){
  1043. textLabel = Object.assign(JSON.parse(config._textLabel),{showInCheck:i-1<config.showCheckNum?true:false});
  1044. newArr.push(textLabel,item);
  1045. if(it.tagType != 3) {
  1046. tempText = value ? it.labelPrefix + value + it.labelSuffix : '';
  1047. }else{
  1048. tempText = getSaveText(it);
  1049. }
  1050. saveText.push("",tempText);
  1051. }else{ //本身是或者前面是文本标签时,前面不添加文本标签
  1052. newArr.push(item);
  1053. if(it.tagType != 3) {
  1054. tempText = value ? it.labelPrefix + value + it.labelSuffix : '';
  1055. tempText = notText ? tempText : (it.value || it.value == "" ? it.value : it.name);
  1056. }else{
  1057. tempText = getSaveText(it);
  1058. }
  1059. saveText.push(tempText);
  1060. }
  1061. if(notText&&!noEnd&&i===arr.length-1){//最后一个非文本标签,后面添加一个文本标签
  1062. const _text = Object.assign(JSON.parse(config.textLabel),{showInCheck:arr.length>config.showCheckNum?false:true});
  1063. newArr.push(_text);
  1064. saveText.push("");
  1065. }
  1066. }
  1067. });
  1068. return {newArr,saveText,checkHiddenDefault};
  1069. }
  1070. //获取标签index,入参:病例项index+标签index+标签内index
  1071. function getLabelIndex(index){
  1072. let ikey = '';
  1073. if(index.length == 3){
  1074. ikey = index.substr(1,1);
  1075. }else if(index.length == 4){
  1076. ikey = index.substr(1,2);
  1077. }else if(index.length == 5){
  1078. ikey = index.substr(1,3);
  1079. }
  1080. return ikey;
  1081. };
  1082. function getWindowInnerHeight(){
  1083. if(window.innerHeight!=undefined){
  1084. return window.innerHeight;
  1085. }else{
  1086. let by = document.body, ele = document.documentElement;
  1087. return Math.min(by.clientHeight,ele.clientHeight);
  1088. }
  1089. };
  1090. function getWindowInnerWidth(){
  1091. let width = window.innerWidth || document.body.clientWidth || document.documentElement.clientWidth
  1092. return width
  1093. };
  1094. function getIds(data){
  1095. let ids = [];
  1096. data&&data.forEach((it,i)=>{
  1097. ids.push(it.id);
  1098. })
  1099. return ids;
  1100. }
  1101. /**
  1102. *
  1103. * @param {日期相关} info
  1104. * @param {时间是否包含时分秒} flg
  1105. * @param {连接符} con
  1106. */
  1107. function getCalendarDate(info,flg,con) {
  1108. let date = '';
  1109. let time = flg?flg:false;
  1110. let conect = con?con:'-';
  1111. if(time){
  1112. 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');
  1113. }else{
  1114. date = info.year + conect + (info.month < 10 ? '0' + info.month : info.month) + conect + (info.day < 10 ? '0' + info.day : info.day);
  1115. }
  1116. return date;
  1117. }
  1118. // 导出
  1119. function downloadExportedData(data, fileName) {
  1120. // var blob = new Blob([data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'}); //type表示xlsx类型
  1121. var blob = new Blob([data], {type: 'application/vnd.ms-excel'}); //type表示xlsx类型
  1122. var downloadElement = document.createElement('a');
  1123. var href = window.URL.createObjectURL(blob); //创建下载的链接
  1124. downloadElement.href = href;
  1125. downloadElement.download = fileName; //下载后文件名
  1126. document.body.appendChild(downloadElement);
  1127. downloadElement.click(); //点击下载
  1128. document.body.removeChild(downloadElement); //下载完成移除元素
  1129. window.URL.revokeObjectURL(href);
  1130. }
  1131. function getStatusImg(type,val,status){
  1132. if(type == 0){
  1133. return <span>{val} </span>
  1134. }else if(type == 1){
  1135. return <span className={'red'}>{val} </span>
  1136. }
  1137. if(status == 1){
  1138. if(type == 2){
  1139. return <span style={{color:'#FF5D5D'}}>{val}<img src={up} alt=""/> </span>
  1140. }else if(type == 3){
  1141. return <span style={{color:"#D949FF"}}>{val}<img src={down} alt=""/> </span>
  1142. }
  1143. }else{
  1144. if(type == 2){
  1145. return <span>{val}<img src={up} alt=""/> </span>
  1146. }else if(type == 3){
  1147. return <span>{val}<img src={down} alt=""/> </span>
  1148. }
  1149. }
  1150. }
  1151. //键值对转换
  1152. function parseNameVal(arr){
  1153. let obj = {};
  1154. Array.isArray(arr)&&arr.map((it)=>{
  1155. obj[it.code]=it.value;
  1156. });
  1157. return obj;
  1158. }
  1159. module.exports = {
  1160. checkType: Type.checkType,
  1161. getIds,
  1162. getWindowInnerWidth,
  1163. getWindowInnerHeight,
  1164. getLabelIndex,
  1165. fullfillText,
  1166. checkFullfillText,
  1167. parseUrl,
  1168. getAge,
  1169. dateParser,
  1170. debounce,
  1171. regexp,
  1172. isUndefined,
  1173. Storage,
  1174. nullFn,
  1175. isNotNull,
  1176. isNull,
  1177. deepClone,
  1178. isIE,
  1179. storageLocal,
  1180. getUrlArgObject,
  1181. getAllDataList,
  1182. getAllDataStringList,
  1183. pushAllDataList,
  1184. filterArr,
  1185. filterDataArr,
  1186. filterOtherDataArr,
  1187. preventDefault,
  1188. handleEnter,
  1189. didPushParamChange,
  1190. getEMRParams,
  1191. windowEventHandler,
  1192. isAllClear,
  1193. normalVal,
  1194. getPageCoordinate,
  1195. windowRemoveEventHandler,
  1196. timestampToTime,
  1197. formatContinueDots,
  1198. inspectAndAssist,
  1199. getCurrentDate,
  1200. ifOtherClear,
  1201. readyKeepHistory,
  1202. parseChartData,
  1203. getCalendarDate,
  1204. downloadExportedData,
  1205. getStatusImg,
  1206. parseNameVal
  1207. };