tools.js 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945
  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} from "../store/types/treat";
  12. import {tabChange} from '@store/actions/tabTemplate';
  13. import config from '@config/index.js';
  14. /***
  15. * 工具函数
  16. *
  17. * ***/
  18. const ARR = "Array";
  19. const NUMBER = "Number";
  20. const STRING = "String";
  21. const OBJECT = "Object";
  22. const UNDEFINED = "Undefined";
  23. const NULL = "Null";
  24. const BOOLEAN = "Boolean";
  25. const qs = require('qs');
  26. // 数据类型判断
  27. const Type = {
  28. typeConstant: {
  29. 'array': ARR,
  30. 'number': NUMBER,
  31. 'string': STRING,
  32. 'object': OBJECT,
  33. 'undefined': UNDEFINED,
  34. 'null': NULL,
  35. 'boolean': BOOLEAN
  36. },
  37. tolower: (str)=> {
  38. if(typeof str !== "string") {
  39. return "";
  40. }
  41. return str.toLowerCase();
  42. },
  43. checkType: (el, type)=> {
  44. type = Type.tolower(type);
  45. type = Type.typeConstant[type];
  46. return Object.prototype.toString.call(el) === "[object "+ type +"]";
  47. }
  48. }
  49. // 计算字符串长度,该长度将一个中文字算作2个字符长度
  50. const regexp = {
  51. ch: (str)=> {//匹配中文
  52. if(typeof str !== "string") {
  53. return "";
  54. }
  55. return str.match(/[\u4e00-\u9fa5]/g) || "";
  56. },
  57. chLen: function (str) {//中文长度
  58. return regexp.ch(str).length;
  59. },
  60. strLen: function (str) {//字符串长度(一个中文当作两个英文字母)
  61. if(typeof str !== "string") {
  62. return 0;
  63. }
  64. return str.length + regexp.chLen(str);
  65. }
  66. }
  67. //判断是否空对象或未定义
  68. const isUndefined = function (str) {
  69. if(str === 0 || str === "") {
  70. return false;
  71. }
  72. return (Type.checkType(str, 'null') || Type.checkType(str, 'undefined'));
  73. }
  74. //sessionStorage方法封装
  75. const Storage = {
  76. session: {
  77. get: function (name) {
  78. return JSON.parse(sessionStorage.getItem(name));
  79. },
  80. set: function (name, data) {
  81. sessionStorage.setItem(name, JSON.stringify(data));
  82. },
  83. remove: function (name) {
  84. sessionStorage.removeItem(name);
  85. },
  86. clear: function () {
  87. sessionStorage.clear();
  88. }
  89. }
  90. };
  91. //localStorage方法封装
  92. const storageLocal = {
  93. set: function (name, data) {
  94. if(!data) {
  95. return;
  96. }
  97. if(typeof data !== 'string') {
  98. data = JSON.stringify(data);
  99. }
  100. localStorage.setItem(name, data);
  101. },
  102. get: function (name) {
  103. return localStorage.getItem(name);
  104. },
  105. remove: function (name) {
  106. localStorage.removeItem(name);
  107. },
  108. clear: function () {
  109. localStorage.clear();
  110. }
  111. };
  112. const nullFn = ()=>{};
  113. //是否为空
  114. const isNull = (item)=>{
  115. return String(item)=== "" || String(item)==="null" || String(item)==="undefined";
  116. };
  117. const isNotNull = (item)=>{
  118. return !(isNull(item));
  119. };
  120. //判断是否为ie浏览器
  121. const isIE = () => { //ie?
  122. if (!!window.ActiveXObject || "ActiveXObject" in window){
  123. return true;
  124. } else{
  125. return false;
  126. }
  127. }
  128. const deepClone = (data)=>{
  129. return JSON.parse(JSON.stringify(data))
  130. };
  131. const getUrlArgObject = (parm) => {
  132. /*let args=new Object();
  133. let query=window.location.href;//获取查询串
  134. let pairs,arr;
  135. if(query.indexOf("?") != -1){
  136. pairs=query.split("?")[1].split("&");
  137. for(let i=0;i<pairs.length;i++){
  138. let pos=pairs[i].indexOf('=');//查找name=value
  139. if(pos==-1){//如果没有找到就跳过
  140. continue;
  141. }
  142. let argname=pairs[i].substring(0,pos);//提取name
  143. let value=decodeURIComponent(pairs[i].substring(pos+1));//提取value
  144. args[argname]=unescape(value);//存为属性
  145. }
  146. }*/
  147. let query = window.location.search;
  148. let args = qs.parse(query.substr(1));
  149. return args[parm];//返回对象
  150. }
  151. const getAllDataList =(baseList) =>{ //获取所有模块结构化的数据
  152. let jsonData = {};
  153. //月经史公式
  154. const other = baseList.otherHistory;
  155. jsonData.lis = {};
  156. jsonData.chief = baseList.mainSuit.data; //主诉
  157. jsonData.present = baseList.currentIll.data; //现病史
  158. jsonData.other = other.data; //其他史
  159. jsonData.otherHistoryIsEmpty = other.isEmpty;
  160. jsonData['yjs_1'] = other['yjs_1'];
  161. jsonData['yjs_2'] = other['yjs_2'];
  162. jsonData['yjs_3'] = other['yjs_3'];
  163. jsonData['yjs_4'] = other['yjs_4'];
  164. jsonData.vital = baseList.checkBody.data; //查体
  165. jsonData.checkBodyIsEmpty = baseList.checkBody.isEmpty;
  166. jsonData.lis.labelList = baseList.inspect.labelList; //化验
  167. jsonData.lis.getExcelDataList = baseList.inspect.getExcelDataList; //化验导入
  168. jsonData.pacs = baseList.assistCheck.assistLabel; //辅检
  169. jsonData.diag = baseList.diagnosticList.diagnosticList; //诊断
  170. jsonData.advice = baseList.pushMessage.advice; //医嘱
  171. jsonData.mainSuitSelecteds = baseList.mainSuit.selecteds; //主诉选中状态保存
  172. jsonData.currentIllSelecteds = baseList.currentIll.selecteds; //主诉选中状态保存
  173. jsonData.otherHistorySelecteds = baseList.otherHistory.selecteds; //主诉选中状态保存
  174. jsonData.checkBodySelecteds = baseList.checkBody.selecteds; //主诉选中状态保存
  175. jsonData.addItems = baseList.homePage.addItems||{};
  176. jsonData.mainsuitIds = baseList.mainSuit.mainIds; //主诉去重
  177. jsonData.mainChronicDesease = baseList.mainSuit.chronicDesease; //主诉慢病{}
  178. jsonData.diagChronicMagItem = baseList.diagnosticList.chronicMagItem; //诊断慢病{}
  179. jsonData.currentIds = baseList.currentIll.symptomIds; //现病史去重
  180. jsonData.isFirstMainDiag = baseList.treat.isFirstMainDiag; //治疗方案
  181. // console.log(jsonData,'结构化数据获取')
  182. return jsonData;
  183. }
  184. const getAllDataStringList =(baseList) =>{ //获取所有模块文本的数据
  185. let jsonDataString = {};
  186. jsonDataString.lis = {};
  187. let chiefData = [],presentData=[],otherData=[],vitalData=[];
  188. if(baseList.mainSuit.saveText.length == 1 && baseList.mainSuit.saveText[0].trim() == ''){
  189. chiefData = []
  190. }else{
  191. chiefData = baseList.mainSuit.saveText
  192. }
  193. if(baseList.currentIll.saveText.length == 1 && baseList.currentIll.saveText[0].trim() == ''){
  194. presentData = []
  195. }else{
  196. presentData = baseList.currentIll.saveText
  197. }
  198. if(baseList.otherHistory.saveText.length == 1 && baseList.otherHistory.saveText[0].trim() == ''){
  199. otherData = []
  200. }else{
  201. otherData = baseList.otherHistory.saveText
  202. }
  203. if(baseList.checkBody.saveText.length == 1 && baseList.checkBody.saveText[0].trim() == ''){
  204. vitalData = []
  205. }else{
  206. vitalData = baseList.checkBody.saveText
  207. }
  208. jsonDataString = {
  209. 'chief' : JSON.stringify(chiefData),
  210. 'present' : JSON.stringify(presentData),
  211. 'other' : JSON.stringify(otherData),
  212. 'vital' : JSON.stringify(vitalData),
  213. 'lis' : baseList.inspect.inspectStrPlus,
  214. 'pacs' : baseList.assistCheck.dataString,
  215. 'diag' : baseList.diagnosticList.diagnosticStr,
  216. 'advice' : baseList.pushMessage.AdviceStr
  217. }
  218. //console.log(jsonDataString,'文本模式数据获取')
  219. return jsonDataString;
  220. }
  221. /**
  222. *
  223. * @param {回读数据} reData
  224. * @param {回读数据是历史病历'history',还是模板'template'} type
  225. * @param {什么操作,回读'push'还是清空'clear'} action
  226. * @param {引用的话是保存时候的文本类型,编辑的时候是当前页面设置的文本类型} whichSign
  227. */
  228. const pushAllDataList =(whichSign,action,reData,type) =>{ //回读清空所有的数据
  229. if(action == 'clear'){ //清空
  230. const block = Object.assign(JSON.parse(config.textLabel),{full:true});//空白时保留一个自由文本标签
  231. store.dispatch({type: CLEAR_MAIN_SUIT,data:[],saveText:[],selecteds:[],editClear:true,mainIds:[],clearAction:true,symptomFeature:[],chronicDesease:{}});
  232. store.dispatch({type: CLEAR_CURRENT_ILL,data:[],saveText:[],selecteds:[],editClear:true,symptomIds:[]});
  233. store.dispatch({type: CLEAROTHERHISTORY,data:[block],isEmpty:true,saveText:[],selecteds:[],editClear:true,yjs_1:'',yjs_2:'',yjs_3:'',yjs_4:''});
  234. store.dispatch({type: CLEARCHECKBODY,data:[block],isEmpty:true,saveText:[],selecteds:[]});
  235. store.dispatch(clearAssistData([],''));
  236. store.dispatch(clearAllLabel([],[],''));
  237. store.dispatch({
  238. type: SET_TIPS,
  239. tips: {}
  240. })
  241. store.dispatch({
  242. type: CLEAR_ALL_DIAG,
  243. data:[],
  244. saveText:'',
  245. mainSuitStr: '',
  246. chronicMagItem:{}
  247. });
  248. store.dispatch({
  249. type: CLEAR_ALL_PUSH_MESSAGE,
  250. data:{},
  251. saveText:'',
  252. });
  253. store.dispatch({
  254. type:CLEAR_FIRST_MAIN_DIAG,
  255. flag:true
  256. });
  257. storageLocal.remove('emrParam');
  258. // Notify.success('页面已清空')
  259. }else{
  260. if (whichSign == 0) {
  261. let dataJson = JSON.parse(reData.dataJson);
  262. //其他史data
  263. const oData = dataJson.other;
  264. const onlyOneText = oData.length==1&&oData[0].tagType==8&&!(oData[0].name||oData[0].value);
  265. if(type == 'template'){ //结构化模板回读
  266. let dataJsonStr = JSON.parse(reData.preview);
  267. // console.log(dataJson,dataJsonStr,'结构化模板引用')
  268. store.dispatch({
  269. type: CLEAR_MAIN_SUIT,
  270. data:dataJson.chief,
  271. selecteds:dataJson.mainSuitSelecteds?dataJson.mainSuitSelecteds:[],
  272. saveText:JSON.parse(dataJsonStr.chief),
  273. mainIds:dataJson.mainsuitIds?dataJson.mainsuitIds:[],
  274. chronicDesease:dataJson.mainChronicDesease,
  275. });
  276. store.dispatch({
  277. type: CLEAR_CURRENT_ILL,
  278. data:dataJson.present,
  279. selecteds:dataJson.currentIllSelecteds?dataJson.currentIllSelecteds:[],
  280. saveText:JSON.parse(dataJsonStr.present),
  281. symptomIds:dataJson.currentIds?dataJson.currentIds:[]
  282. });
  283. store.dispatch({
  284. type: CLEAROTHERHISTORY,
  285. data:dataJson.other,
  286. yjs_1:dataJson.yjs_1,
  287. yjs_2:dataJson.yjs_2,
  288. yjs_3:dataJson.yjs_3,
  289. yjs_4:dataJson.yjs_4,
  290. selecteds:dataJson.otherHistorySelecteds?dataJson.otherHistorySelecteds:[],
  291. isEmpty:onlyOneText?true:false,//dataJson.otherHistoryIsEmpty,
  292. saveText:JSON.parse(dataJsonStr.other),
  293. editClear:dataJson.other.length>0?false:true
  294. });
  295. store.dispatch({
  296. type: CLEARCHECKBODY,
  297. data:dataJson.vital,
  298. selecteds:dataJson.checkBodySelecteds?dataJson.checkBodySelecteds:[],
  299. isEmpty:dataJson.checkBodyIsEmpty,
  300. saveText:JSON.parse(dataJsonStr.vital)
  301. });
  302. store.dispatch(clearAllLabel(
  303. dataJson.lis.labelList,
  304. dataJson.lis.getExcelDataList,
  305. dataJsonStr.lis.split('-')[0],
  306. dataJsonStr.lis.split('-')[1]
  307. ));
  308. store.dispatch(clearAssistData(dataJson.pacs,dataJsonStr.pacs));
  309. store.dispatch({
  310. type: CLEAR_ALL_DIAG,
  311. data:dataJson.diag,
  312. saveText:dataJsonStr.diag,
  313. chronicMagItem:dataJson.diagChronicMagItem
  314. });
  315. store.dispatch({
  316. type: CLEAR_ALL_PUSH_MESSAGE,
  317. data:dataJson.advice,
  318. saveText:dataJsonStr.advice
  319. });
  320. store.dispatch({
  321. type:SETREADDITEMS,
  322. data:dataJson.addItems
  323. });
  324. store.dispatch({
  325. type:CLEAR_FIRST_MAIN_DIAG,
  326. flag:dataJson.isFirstMainDiag
  327. });
  328. //tab跳回辅助信息
  329. store.dispatch(tabChange('0'));
  330. }else{ //结构化历史病历回读
  331. /*let dataJson = JSON.parse(reData.dataJson);*/
  332. let dataJsonStr = reData.detailList;
  333. // console.log(dataJson,dataJsonStr,'结构化历史病历回读')
  334. // console.log(dataJson.mainSuitSelecteds,7887)
  335. store.dispatch({
  336. type: CLEAR_MAIN_SUIT,
  337. data:dataJson.chief,
  338. selecteds:dataJson.mainSuitSelecteds?dataJson.mainSuitSelecteds:[],
  339. saveText:dataJsonStr[0].content ? JSON.parse(dataJsonStr[0].content) :[],
  340. mainIds:dataJson.mainsuitIds?dataJson.mainsuitIds:[],
  341. chronicDesease:dataJson.mainChronicDesease,
  342. });
  343. store.dispatch({
  344. type: CLEAR_CURRENT_ILL,
  345. data:dataJson.present,
  346. selecteds:dataJson.currentIllSelecteds?dataJson.currentIllSelecteds:[],
  347. saveText:dataJsonStr[1].content ? JSON.parse(dataJsonStr[1].content):[],
  348. symptomIds:dataJson.currentIds?dataJson.currentIds:[]
  349. });
  350. store.dispatch({
  351. type: CLEAROTHERHISTORY,
  352. data:dataJson.other,
  353. yjs_1:dataJson.yjs_1,
  354. yjs_2:dataJson.yjs_2,
  355. yjs_3:dataJson.yjs_3,
  356. yjs_4:dataJson.yjs_4,
  357. selecteds:dataJson.otherHistorySelecteds?dataJson.otherHistorySelecteds:[],
  358. saveText:dataJsonStr[2].content ? JSON.parse(dataJsonStr[2].content):[],
  359. isEmpty:onlyOneText?true:false,//dataJson.otherHistoryIsEmpty,回读回来后判断是否只有一个空标签,是的话要使用模板
  360. editClear:dataJson.other.length>0?false:true
  361. });
  362. store.dispatch({
  363. type: CLEARCHECKBODY,
  364. data:dataJson.vital,
  365. selecteds:dataJson.checkBodySelecteds?dataJson.checkBodySelecteds:[],
  366. isEmpty:dataJson.checkBodyIsEmpty,
  367. saveText:dataJsonStr[3].content ? JSON.parse(dataJsonStr[3].content):[]
  368. });
  369. store.dispatch(clearAllLabel(
  370. dataJson.lis.labelList,
  371. dataJson.lis.getExcelDataList,
  372. dataJsonStr[4].content ? dataJsonStr[4].content.split('-')[0] :'',
  373. dataJsonStr[4].content ? dataJsonStr[4].content.split('-')[1] :''
  374. ));
  375. store.dispatch(clearAssistData(
  376. dataJson.pacs,
  377. dataJsonStr[5].content ? dataJsonStr[5].content:''
  378. ));
  379. store.dispatch({
  380. type: CLEAR_ALL_DIAG,
  381. data:dataJson.diag,
  382. saveText:dataJsonStr[6].content ? dataJsonStr[6].content:'',
  383. chronicMagItem:dataJson.diagChronicMagItem
  384. });
  385. store.dispatch({
  386. type: CLEAR_ALL_PUSH_MESSAGE,
  387. data:dataJson.advice,
  388. saveText:dataJsonStr[7].content ? dataJsonStr[7].content:''
  389. });
  390. store.dispatch({
  391. type:SETREADDITEMS,
  392. data:dataJson.addItems
  393. });
  394. store.dispatch({
  395. type:CLEAR_FIRST_MAIN_DIAG,
  396. flag:dataJson.isFirstMainDiag
  397. });
  398. }
  399. } else {
  400. if(type == 'template'){ //纯文本模板回读
  401. let dataJson = JSON.parse(reData.dataJson);
  402. let dataJsonStr = JSON.parse(reData.preview);
  403. // console.log(dataJson,dataJsonStr,'纯文本模板引用')
  404. store.dispatch({ //主诉文本框
  405. type: CLEAR_MAIN_SUIT,
  406. data:[],
  407. saveText:JSON.parse(dataJsonStr.chief)
  408. });
  409. store.dispatch({
  410. type: CLEAR_CURRENT_ILL,
  411. data:[],
  412. saveText:JSON.parse(dataJsonStr.present)
  413. });
  414. store.dispatch({
  415. type: CLEAROTHERHISTORY,
  416. data:[],
  417. isEmpty:dataJson.otherHistoryIsEmpty,
  418. saveText:JSON.parse(dataJsonStr.other)
  419. });
  420. store.dispatch({
  421. type: CLEARCHECKBODY,
  422. data:dataJson.vital,
  423. isEmpty:dataJson.checkBodyIsEmpty,
  424. saveText:JSON.parse(dataJsonStr.vital)
  425. });
  426. store.dispatch(clearAllLabel(
  427. dataJson.lis.labelList,
  428. dataJson.lis.getExcelDataList,
  429. dataJsonStr.lis.split('-')[0],
  430. dataJsonStr.lis.split('-')[1]
  431. ));
  432. store.dispatch(clearAssistData(dataJson.pacs,dataJsonStr.pacs));
  433. store.dispatch({
  434. type: CLEAR_ALL_DIAG,
  435. data:dataJson.diag,
  436. saveText:dataJsonStr.diag
  437. });
  438. store.dispatch({
  439. type: CLEAR_ALL_PUSH_MESSAGE,
  440. data:dataJson.advice,
  441. saveText:dataJsonStr.advice,
  442. });
  443. store.dispatch({
  444. type:SETREADDITEMS,
  445. data:dataJson.addItems
  446. });
  447. store.dispatch({
  448. type:CLEAR_FIRST_MAIN_DIAG,
  449. flag:dataJson.isFirstMainDiag
  450. });
  451. //tab跳回辅助信息
  452. store.dispatch(tabChange('0'));
  453. }else{ //纯文本历史病历回读
  454. let dataJson = JSON.parse(reData.dataJson);
  455. let dataJsonStr = reData.detailList;
  456. // console.log(dataJson,dataJsonStr,'纯文本历史病历回读')
  457. if(!dataJson && !dataJsonStr && !reData.sign){
  458. return;
  459. }
  460. store.dispatch({
  461. type: CLEAR_MAIN_SUIT,
  462. data:[],
  463. saveText:dataJsonStr[0].content ? JSON.parse(dataJsonStr[0].content) :[]
  464. });
  465. store.dispatch({
  466. type: CLEAR_CURRENT_ILL,
  467. data:[],
  468. saveText:dataJsonStr[1].content ? JSON.parse(dataJsonStr[1].content) :[]
  469. });
  470. store.dispatch({
  471. type: CLEAROTHERHISTORY,
  472. data:[],
  473. isEmpty:dataJson.otherHistoryIsEmpty,
  474. saveText:dataJsonStr[2].content ? JSON.parse(dataJsonStr[2].content) :[]
  475. });
  476. store.dispatch({
  477. type: CLEARCHECKBODY,
  478. data:dataJson.vital,
  479. isEmpty:dataJson.checkBodyIsEmpty,
  480. saveText:dataJsonStr[3].content ? JSON.parse(dataJsonStr[3].content):[]
  481. });
  482. store.dispatch(clearAllLabel(
  483. dataJson.lis.labelList,
  484. dataJson.lis.getExcelDataList,
  485. dataJsonStr[4].content ? dataJsonStr[4].content.split('-')[0] :'',
  486. dataJsonStr[4].content ? dataJsonStr[4].content.split('-')[1]:''
  487. ));
  488. store.dispatch(clearAssistData(
  489. dataJson.pacs,
  490. dataJsonStr[5].content ? dataJsonStr[5].content:''
  491. ));
  492. store.dispatch({
  493. type: CLEAR_ALL_DIAG,
  494. data:dataJson.diag,
  495. saveText:dataJsonStr[6].content ? dataJsonStr[6].content:''
  496. });
  497. store.dispatch({
  498. type: CLEAR_ALL_PUSH_MESSAGE,
  499. data:dataJson.advice,
  500. saveText:dataJsonStr[7].content ? dataJsonStr[7].content:''
  501. });
  502. store.dispatch({
  503. type:SETREADDITEMS,
  504. data:dataJson.addItems
  505. });
  506. store.dispatch({
  507. type:CLEAR_FIRST_MAIN_DIAG,
  508. flag:dataJson.isFirstMainDiag
  509. });
  510. }
  511. }
  512. }
  513. store.dispatch({
  514. type:ISREAD
  515. });
  516. }
  517. function filterArr(arr){
  518. let tmpArr = arr.filter((item)=>{
  519. if(item){
  520. return item
  521. }
  522. });
  523. return tmpArr.join("").replace(/\s/g,'');
  524. }
  525. function filterDataArr(arrTmp){ //数据处理
  526. let tmpArr = [];
  527. tmpArr = arrTmp.map((it,i)=>{ //连续的标点符号保留第一个
  528. if(!it)return '';
  529. if(!it.match(config.punctuationReg)&&!arrTmp[i-1]){ //只有标点符号或者前一个标签无值是(说明本标点灰显,不显示在预览中)
  530. return '';
  531. }
  532. return it.replace(config.punReg,function(word){
  533. return word.substr(0,1);
  534. });
  535. });
  536. return trimDots(tmpArr.join('')); //去掉开头的标点符号,最后的标点保留第一个,中间连续的保留第一个
  537. }
  538. //其他史预览数据处理-月经史
  539. function filterOtherDataArr(arrTmp,jsonArr){
  540. let tmpArr = [];
  541. let index1 = jsonArr.findIndex((item)=>{
  542. return item.formulaCode=='yjs_1';
  543. });
  544. let index2 = jsonArr.findIndex((item)=>{
  545. return item.formulaCode=='yjs_2';
  546. });
  547. let index3 = jsonArr.findIndex((item)=>{
  548. return item.formulaCode=='yjs_3';
  549. });
  550. let index4 = jsonArr.findIndex((item)=>{
  551. return item.formulaCode=='yjs_4';
  552. });
  553. if(index1==-1&&index2==-1&&index3==-1&&index4==-1){//无月经史
  554. return {str1:filterDataArr(arrTmp),str2:''};
  555. }
  556. tmpArr = arrTmp.map((it,i)=>{ //连续的标点符号保留第一个
  557. if(!it.match(config.punctuationReg)&&!arrTmp[i-1]||[index1,index2,index3,index4].includes(i)){ //只有标点符号或者前一个标签无值是(说明本标点灰显,不显示在预览中)
  558. return '';
  559. }
  560. return it.replace(config.punReg,function(word){
  561. return word.substr(0,1);
  562. });
  563. });
  564. const splitNum = [index1,index2,index3,index4].find((i)=>i!=-1);
  565. const str1 = [...tmpArr].splice(0,splitNum).join("");
  566. const str2 = [...tmpArr].splice(splitNum).join("");
  567. return {str1:trimDots(str1),str2:trimDots(str2),index:index1};
  568. }
  569. //去掉开头的标点符号,最后的标点保留第一个,中间连续的保留第一个
  570. function trimDots(str){
  571. return str.replace(config.punReg,function(word){
  572. return word.substr(0,1);
  573. }).replace(/^[,,.。::"“??”;;、!!\s]+/,'');
  574. }
  575. //标签间连续标点只保留一个,保留前面一个
  576. function formatContinueDots(data){
  577. let arr=[];
  578. arr=data&&data.filter((it,i)=>{
  579. if(i==0||(it.name&&(it.name.match(config.punctuationReg))||(data[i-1].name&&data[i-1].name.match(config.punctuationReg)))){
  580. return it;
  581. }
  582. if(!it.name){ //主诉现病史病情变化
  583. return it;
  584. }
  585. });
  586. return arr;
  587. }
  588. // 取消默认行为
  589. function preventDefault(event) {
  590. if (event.preventDefault) {
  591. event.preventDefault();
  592. } else {
  593. event.returnValue = false;
  594. }
  595. }
  596. //ie8添加解除事件兼容
  597. function windowEventHandler(type,func,dom){
  598. let win = dom?dom:window;
  599. if(win.addEventListener){
  600. win.addEventListener(type, func);
  601. }else{
  602. win.attachEvent('on'+type,func);
  603. }
  604. }
  605. function windowRemoveEventHandler(type,func,dom){
  606. let win = dom?dom:window;
  607. if(win.addEventListener){
  608. win.removeEventListener(type, func);
  609. }else{
  610. win.detachEvent('on'+type,func);
  611. }
  612. }
  613. //禁止回车事件
  614. function handleEnter(event){
  615. event = event?event:window.event;
  616. if(event.keyCode==13){return false;}
  617. }
  618. //获取病例输入的内容
  619. function getEMRParams(){
  620. const state = store.getState();
  621. const {message} = state.patInfo;
  622. const {mainSuit,currentIll,otherHistory,checkBody,inspect,assistCheck,diagnosticList} = state;
  623. const main = filterDataArr(mainSuit.saveText)||'',
  624. current=filterDataArr(currentIll.saveText)||'',
  625. other = filterDataArr(otherHistory.saveText)||'',
  626. vital = filterDataArr(checkBody.saveText)||'',
  627. lis = inspect.pushItem, //化验推送所需数据
  628. pacs = assistCheck.dataString||'',
  629. dis=diagnosticList.diagnosticStrNoType||'',
  630. advice = '',
  631. diseaeId = [];
  632. const age = message.patientAge;
  633. const sex = message.sex;
  634. const patientId = message.patientId //病人id,取上次用药
  635. return {main,current,other,vital,lis,pacs,dis,advice,diseaeId,sex,age, patientId};
  636. };
  637. function didPushParamChange(){
  638. const emrData = getEMRParams();
  639. const oldParams = storageLocal.get('emrParam');
  640. const newParams = JSON.stringify({
  641. age: emrData.age,
  642. featureType: "4,5,6,7,22",
  643. diag: emrData.dis,
  644. lis: emrData.lis,
  645. other: emrData.other,
  646. pacs: emrData.pacs,
  647. sex: emrData.sex,
  648. vital:emrData.vital,
  649. symptom: emrData.current + emrData.main
  650. });
  651. if(newParams == oldParams){
  652. return false;
  653. }
  654. return true;
  655. }
  656. //判断页面所有数据是否为空
  657. function isAllClear(jsonData,jsonStr,baseList){
  658. if ( //结构化和文本数据都为空
  659. JSON.stringify(jsonData.advice) == '{}' &&
  660. jsonData.chief.length < 1 &&
  661. jsonData.present.length < 1 &&
  662. // jsonData.other.length < 1 &&
  663. (jsonData.other.length > 0 ? baseList.otherHistory.isEmpty : true) &&
  664. //jsonData.vital.length < 1 &&
  665. (jsonData.vital.length > 0 ? baseList.checkBody.isEmpty : true) &&
  666. jsonData.diag.length < 1 &&
  667. jsonData.pacs.length < 1 &&
  668. jsonData.lis.labelList.length < 1 &&
  669. jsonData.lis.getExcelDataList.length < 1 &&
  670. filterDataArr(JSON.parse(jsonStr.chief)) == '' &&
  671. filterDataArr(JSON.parse(jsonStr.present)) == '' &&
  672. filterDataArr(JSON.parse(jsonStr.other)) == '' && //这里都是filterDataArr不是filterArr,要去符号的
  673. filterDataArr(JSON.parse(jsonStr.vital)) == ''
  674. ) {
  675. return false;
  676. }else{
  677. return true;
  678. }
  679. }
  680. //判断除主诉外页面数据是否为空--慢病模板
  681. function ifOtherClear(jsonData,jsonStr,baseList){
  682. if ( //结构化和文本数据都为空
  683. JSON.stringify(jsonData.advice) == '{}' &&
  684. jsonData.present.length < 1 &&
  685. (jsonData.other.length > 0 ? baseList.otherHistory.isEmpty : true) &&
  686. (jsonData.vital.length > 0 ? baseList.checkBody.isEmpty : true) &&
  687. jsonData.diag.length < 1 &&
  688. jsonData.pacs.length < 1 &&
  689. jsonData.lis.labelList.length < 1 &&
  690. jsonData.lis.getExcelDataList.length < 1 &&
  691. filterDataArr(JSON.parse(jsonStr.present)) == '' &&
  692. filterDataArr(JSON.parse(jsonStr.other)) == '' && //这里都是filterDataArr不是filterArr,要去符号的
  693. filterDataArr(JSON.parse(jsonStr.vital)) == ''
  694. ) {
  695. return false;
  696. }else{
  697. return true;
  698. }
  699. }
  700. function normalVal(min,max){
  701. if((min-0) && (max-0)){
  702. return `正常值: (${min}~${max})`
  703. }else if((min-0) && !(max-0)){
  704. return `正常值: (>=${min})`
  705. }else if(!(min-0) && (max-0)){
  706. if(min == '' || min == null){
  707. return `正常值: (<=${max})`
  708. }else{
  709. return `正常值: (${min}~${max})`
  710. }
  711. }else{
  712. return null;
  713. }
  714. }
  715. function getPageCoordinate(event){
  716. let e = event || window.event;
  717. var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
  718. var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
  719. var x = e.pageX || (e.clientX + scrollX);
  720. var y = (e.pageY+25) || (e.clientY + scrollY + 25);
  721. let obj = {
  722. boxLeft : x ,
  723. boxTop : y
  724. }
  725. return obj;
  726. }
  727. function timestampToTime(timestamp) { //excel导入2019年5月1日会转换成时间戳
  728. var date = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
  729. var Y = date.getFullYear() + '-';
  730. var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
  731. var D = date.getDate() + ' ';
  732. var h = date.getHours() + ':';
  733. var m = date.getMinutes() + ':';
  734. var s = date.getSeconds();
  735. return Y+M+D+h+m+s;
  736. }
  737. function getPageLength(event) { //兼容ie8获取页面距离左和上的距离,包括滚动距离
  738. let e = event || window.event;
  739. let scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
  740. let scrollY = document.documentElement.scrollTop || document.body.scrollTop;
  741. let x = e.pageX || e.clientX + scrollX;
  742. let y = e.pageY || e.clientY + scrollY;
  743. let page = {
  744. pageX:x,
  745. pageY:y
  746. }
  747. return page;
  748. }
  749. function dragBox(domWrap,domDrag){
  750. console.log(domWrap,domDrag,'拖拽')
  751. let drag = document.getElementById(domDrag);//拖拽区域
  752. let wrap = document.getElementById(domWrap);//被拖拽的元素
  753. let wrapHeight = wrap.offsetHeight;//被拖拽的元素高度
  754. let wrapWidth = wrap.offsetWidth;//被拖拽的元素高度
  755. let width = window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;//屏幕宽度
  756. let height = window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;//屏幕高度
  757. let mouseX = 0,mouseY = 0,dragX = 0,dragY = 0,isDrag = false,isMove = false;
  758. windowEventHandler('mousedown',function(event){ //鼠标位置获取,计算点击位置到拖拽元素左边的距离
  759. let page = getPageLength(event);
  760. mouseX = page.pageX - wrap.offsetLeft //鼠标到拖拽元素的左边界的距离
  761. mouseY = page.pageY - wrap.offsetTop //鼠标到拖拽元素的上边界的距离
  762. isDrag = true
  763. // isMove = false
  764. },drag)
  765. // windowEventHandler('mousemove',handleMove,document)
  766. windowEventHandler('mousemove',handleMove,document)
  767. windowEventHandler('mouseup',()=>{
  768. // if(isMove){ //有move就设置位置没有移动就不处理
  769. // console.log(dragX)
  770. // wrap.style.left = dragX + 'px'
  771. // wrap.style.top = dragY + 'px'
  772. // }
  773. isDrag = false
  774. return false
  775. },drag)
  776. function handleMove(event){ //移动的
  777. let dragDes = document.getElementById('treatDescBox');//展開区域
  778. let page = getPageLength(event);
  779. let maxDragX = 0,dragDesWidth = 0;
  780. let maxDragY = height - wrapHeight;//最大可拖拽y方向距离
  781. if(domDrag == 'dragTreatTitle'){//最大可推拽x方向距离
  782. if(dragDes != null){
  783. dragDesWidth = dragDes.offsetWidth
  784. }else{
  785. dragDesWidth = 0
  786. }
  787. maxDragX = width - wrapWidth - dragDesWidth
  788. }else{
  789. maxDragX = width - wrapWidth
  790. }
  791. if(isDrag){
  792. dragX = page.pageX - mouseX //鼠标可拖拽到左边的最大距离
  793. dragY = page.pageY - mouseY //鼠标可拖拽到上边的最大距离
  794. if(dragX < 0){ //不能超出左边界
  795. dragX = 0
  796. }
  797. if(dragY < 0){ //不能超出上边界
  798. dragY = 0
  799. }
  800. if(domDrag == 'dragTreatTitle'){
  801. if(width-dragX-dragDesWidth < wrapWidth){ //不能超出右边界
  802. dragX = maxDragX
  803. }
  804. }else{
  805. if(width-dragX < wrapWidth){ //不能超出右边界
  806. dragX = maxDragX
  807. }
  808. }
  809. if(height-dragY < wrapHeight){ //不能超出下边界
  810. dragY = maxDragY
  811. }
  812. // isMove = true
  813. wrap.style.left = dragX + 'px'
  814. wrap.style.marginLeft = 0 + 'px'
  815. wrap.style.top = dragY + 'px'
  816. }
  817. }
  818. }
  819. function getCurrentDate(){
  820. let myDate = new Date();
  821. let year = myDate.getFullYear(); //获取完整的年份(4位,1970-????)
  822. let mon = myDate.getMonth()-0+1; //获取当前月份(0-11,0代表1月)
  823. let day = myDate.getDate(); //获取当前日(1-31)
  824. let date = year+'-'+(mon<10?'0'+mon:mon)+'-'+(day<10?'0'+day:day);
  825. return date;
  826. }
  827. function inspectAndAssist(){
  828. const state = store.getState();
  829. let mainType = state.typeConfig.typeConfig
  830. if(mainType == 1){return}//文本模式不放化验辅检的模板
  831. let tmpAll = state.homePage.allModules;
  832. let tmpInspected = state.inspect.labelList;
  833. let tmpAssisted = state.assistCheck.assistLabel;
  834. let tmpInspect = [],tmpAssist = [],assayArr = [],tmpDetail=[],checkArr = [];
  835. for(let i = 0;i < tmpAll.length;i++){
  836. let tmpItem = tmpAll[i];
  837. if(tmpItem.type == 5){
  838. tmpInspect = tmpItem.moduleDetailDTOList || []
  839. }else if(tmpItem.type == 6){
  840. tmpAssist = tmpItem.moduleDetailDTOList || []
  841. }
  842. }
  843. for(let i = 0;i < tmpInspect.length;i++){//化验数据处理
  844. let tmpObj = { //添加化验
  845. details: [],
  846. name: '',
  847. questionId: '',
  848. showType: 1,
  849. }
  850. // let tmpObj = JSON.parse(JSON.stringify(obj));
  851. if (tmpInspect[i].controlType == 0) {
  852. tmpDetail = tmpInspect[i].questionMapping
  853. }else if(tmpInspect[i].controlType == 1 || tmpInspect[i].controlType == 6){
  854. tmpDetail.push(tmpInspect[i])
  855. }
  856. tmpObj.questionId = tmpInspect[i].id
  857. tmpObj.name = tmpInspect[i].name
  858. tmpObj.details = tmpDetail
  859. assayArr.push(tmpObj)
  860. }
  861. for(let i = 0;i < tmpAssist.length;i++){//辅检数据处理
  862. let tmpObj = { //添加辅检
  863. name: '',
  864. questionId: '',
  865. showType: 1,
  866. time:getCurrentDate(),
  867. value:''
  868. }
  869. // let tmpObj = JSON.parse(JSON.stringify(obj1));
  870. tmpObj.questionId = tmpAssist[i].id
  871. tmpObj.name = tmpAssist[i].name
  872. checkArr.push(tmpObj)
  873. }
  874. if(assayArr.length>0 && tmpInspected.length == 0){//化验
  875. store.dispatch(addLabel(assayArr))
  876. }
  877. if(checkArr.length > 0 && tmpAssisted.length == 0){//辅检
  878. store.dispatch(addAssistLabel(checkArr))
  879. }
  880. }
  881. module.exports = {
  882. checkType: Type.checkType,
  883. regexp,
  884. isUndefined,
  885. Storage,
  886. nullFn,
  887. isNotNull,
  888. isNull,
  889. deepClone,
  890. isIE,
  891. storageLocal,
  892. getUrlArgObject,
  893. getAllDataList,
  894. getAllDataStringList,
  895. pushAllDataList,
  896. filterArr,
  897. filterDataArr,
  898. filterOtherDataArr,
  899. preventDefault,
  900. handleEnter,
  901. didPushParamChange,
  902. getEMRParams,
  903. windowEventHandler,
  904. isAllClear,
  905. normalVal,
  906. getPageCoordinate,
  907. windowRemoveEventHandler,
  908. timestampToTime,
  909. getPageLength,
  910. dragBox,
  911. formatContinueDots,
  912. inspectAndAssist,
  913. getCurrentDate,
  914. ifOtherClear
  915. };