tools.js 29 KB

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