SpreadDrop.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
  1. import React ,{Component} from 'react';
  2. import {connect} from 'react-redux';
  3. import SpreadDrop from '@components/SpreadDrop';
  4. import {SETSELECTED,CLEARSELECTED,CONFIRMSELECTED,SETOTHERCHECKBOX,CHANGEOTHERTEXTLABEL} from '@types/otherHistory';
  5. import {RESET,SETDROPSHOW,HIDEDROP,CLICKCOUNT,ISREAD} from '@store/types/homePage.js';
  6. import {getModules as fetchModules} from '@store/async-actions/fetchModules.js';
  7. import {getCommSymptomPush} from '@store/async-actions/mainSuit.js'
  8. import {GET_BIGDATAPUSH,MIX_CONFIRM,COMM_CONFIRM,CHANGE_LABELVAL} from '@store/types/mainSuit';
  9. import {SETCHECKBOX,CHANGECHECKTEXTLABEL,CHECKCONFIRMSELECTED} from '@types/checkBody';
  10. import {CURRENT_CONFIRM,SETMAINCHECKBOX,CURRENT_TEXT_LABEL,CURRENT_GET_BIGDATAPUSH} from '@types/currentIll';
  11. import {getLabelIndex,fullfillText,getIds} from '@common/js/func.js';
  12. import {billing} from '@store/async-actions/pushMessage';
  13. import {Notify} from '@commonComp';
  14. import {filterArr,didPushParamChange,filterDataArr} from '@utils/tools.js';
  15. import config from '@config/index.js';
  16. function mapStateToProps(state) {//console.log(state);
  17. return {
  18. mainSaveText:state.mainSuit.saveText,
  19. mainData:state.mainSuit.data,
  20. }
  21. }
  22. function getNames(data,order){//从exist withs 中获取name字段
  23. let nameData = "";
  24. if(+order===1){ //成文默认按点选顺序排序,指定textGenerate=1按从上到下从左到右排序
  25. data.sort(function(a,b){
  26. return a.listIndex-b.listIndex;
  27. });
  28. }
  29. data&&data.forEach((it,i)=>{
  30. nameData += it.name;
  31. });
  32. return nameData;
  33. }
  34. function addPoint(data,num){//给伴随添加顿号
  35. for(let i=num; i<data.length; i++){
  36. data[i].name = '、'+ data[i].name;
  37. }
  38. return data;
  39. }
  40. /***********************标签展开确定事件***************************/
  41. // 主诉--不用展开标签
  42. function mainSuitModule(dispatch,store,params){
  43. const {nones,exists,withs,exclusion,excluName,ban,mainSaveText,mainData} = params;
  44. let text = filterDataArr(mainSaveText);
  45. if(text.length >= config.limited){
  46. Notify.info(config.limitText);
  47. return
  48. }
  49. // let existsName = getNames(exists);
  50. // let withsName = getNames(withs);
  51. const copExists = JSON.parse(JSON.stringify(exists));
  52. const copWiths = JSON.parse(JSON.stringify(withs));
  53. let banName = ban.name;
  54. const index = params.ikey;
  55. let ikey = getLabelIndex(index);
  56. let num = 0;
  57. let existNum = 0;
  58. let forwardId;
  59. let mainText;
  60. for(let n=ikey-1; n>0; n--){
  61. if(mainData[n].flag && mainData[n].flag==1){
  62. forwardId = n;
  63. continue;
  64. }
  65. }
  66. if(forwardId){
  67. mainText = mainSaveText.slice(forwardId,ikey);
  68. const mainSlice = mainData.slice(forwardId,ikey);
  69. let banIndex = mainText.indexOf('伴');
  70. if(banIndex==-1){
  71. num = 1;
  72. }
  73. console.log(11,exists,mainSlice);
  74. // ikey前的data里没有exist=1的数据,则existNum=1
  75. if(exists.length>0){
  76. for(let i=0; i<mainSlice.length; i++){
  77. if(!mainSlice[i].exist && mainSlice[i].exist!==1){
  78. existNum = 1;
  79. continue;
  80. }
  81. }
  82. }
  83. }else{
  84. let banIndex = mainSaveText.indexOf("伴");
  85. if(banIndex==-1){
  86. num = 1;
  87. }
  88. }
  89. let withsName = getNames(addPoint(copWiths,num));
  90. let existsName = getNames(addPoint(copExists,existNum));
  91. let names;
  92. if(banName){
  93. names = existsName + banName + withsName;
  94. }else{
  95. names = existsName + withsName;
  96. }
  97. // num==0 说明有“伴”,减1;
  98. let lengths = num==0?text.length + names.length - 1:text.length + names.length;
  99. // console.log(5656,num,existNum,text,text.length,names,lengths);
  100. if(lengths > config.limited){
  101. Notify.info(config.limitText);
  102. return
  103. }
  104. // const index = params.ikey;
  105. // let ikey = getLabelIndex(index);
  106. dispatch({
  107. type: MIX_CONFIRM,
  108. data: {exists:exists,withs:withs,withsName:withsName,existsName:existsName,ikey,ban}
  109. });
  110. dispatch({ //自由文本标签数据更新
  111. type:ISREAD
  112. });
  113. dispatch({//隐藏下拉
  114. type:HIDEDROP
  115. })
  116. }
  117. // 现病史
  118. function currentIll(dispatch,store,params){
  119. const {nones,exists,withs,exclusion,excluName,ban,noneIds} = params;
  120. // const ikey = params.ikey.substr(1,1);
  121. const index = params.ikey;
  122. let ikey = getLabelIndex(index);
  123. // let existsId = getIds(exists);
  124. // let withsId = getIds(withs);
  125. let existsId = exists && exists.length>0?getIds(exists):[];
  126. let withsId = withs && withs.length>0?getIds(withs):[];
  127. // const ids = existsId.join(",")+withsId.join(",");
  128. const ids = (existsId.concat(withsId)).join(",");
  129. let has = [],wes=[];
  130. //获取选中项目模板
  131. fetchModules(ids).then((res)=>{
  132. if(+res.data.code===0){
  133. const list = res.data.data;
  134. existsId.map((i)=>{
  135. // has.push(...list[i].questionMapping);
  136. has.push(list[i]);
  137. });
  138. withsId.map((i)=>{
  139. // wes.push(...list[i].questionMapping);
  140. wes.push(list[i]);
  141. });
  142. dispatch({
  143. type: CURRENT_CONFIRM,
  144. data: {exists:has,withs:wes,nones:nones,ikey,ban,noneIds}
  145. });
  146. dispatch({ //自由文本标签数据更新
  147. type:ISREAD
  148. });
  149. }else{
  150. console.log(res);
  151. }
  152. });
  153. }
  154. //其他史多选标签确定事件
  155. function otherHisConfirm(dispatch,store,params){
  156. const {nones,exists,withs,exclusion,excluName,copyType} = params;
  157. // const ikey = params.ikey.substr(1,1);
  158. const index = params.ikey;
  159. let ikey = getLabelIndex(index);
  160. if(params.exclusion){
  161. dispatch({
  162. type: CONFIRMSELECTED,
  163. data:{exclusion,excluName,ikey,copyType}
  164. });
  165. return ;
  166. }
  167. let existsId = getIds(exists);
  168. let withsId = getIds(withs);
  169. const ids = existsId.length>0?existsId.join(",")+','+withsId.join(","):withsId.join(",");
  170. if(!ids&&nones){ //只有无的项目
  171. dispatch({
  172. type: CONFIRMSELECTED,
  173. data: {exists:[],withs:[],nones:nones,ikey,copyType}
  174. });
  175. dispatch({
  176. type:ISREAD
  177. });
  178. return;
  179. }
  180. // const ids = exists.join(",")+withs.join(",");
  181. let has = [],wes=[];
  182. //获取选中项目模板
  183. fetchModules(ids).then((res)=>{
  184. if(+res.data.code===0){
  185. const list = res.data.data;
  186. existsId.map((i)=>{
  187. has.push(...list[i].questionMapping);
  188. });
  189. withsId.map((i)=>{
  190. wes.push(...list[i].questionMapping);
  191. });
  192. dispatch({
  193. type: CONFIRMSELECTED,
  194. data: {exists:fullfillText(has,false,true).newArr,withs:fullfillText(wes,false,true).newArr,nones:nones,ikey,copyType}
  195. });
  196. dispatch({
  197. type:ISREAD
  198. });
  199. }
  200. });
  201. }
  202. function checkBodyConfirm(dispatch,store,params){
  203. const {nones,exists,withs,exclusion,excluName,copyType} = params;
  204. // const ikey = params.ikey.substr(1,1);
  205. const index = params.ikey;
  206. let ikey = getLabelIndex(index);
  207. if(params.exclusion){
  208. dispatch({
  209. type: CHECKCONFIRMSELECTED,
  210. data:{exclusion,excluName,ikey,copyType}
  211. });
  212. return ;
  213. }
  214. let existsId = getIds(exists);
  215. let withsId = getIds(withs);
  216. const ids = existsId.join(",")+','+withsId.join(",");
  217. if(!ids&&nones){ //只有无的项目
  218. dispatch({
  219. type: CHECKCONFIRMSELECTED,
  220. data: {exists:[],withs:[],nones:nones,ikey,copyType}
  221. });
  222. dispatch({
  223. type:ISREAD
  224. });
  225. return;
  226. }
  227. // const ids = exists.join(",")+withs.join(",");
  228. let has = [],wes=[];
  229. //获取选中项目模板
  230. fetchModules(ids).then((res)=>{
  231. if(+res.data.code===0){
  232. const list = res.data.data;
  233. existsId.map((i)=>{
  234. has.push(...list[i].questionMapping);
  235. });
  236. withsId.map((i)=>{
  237. wes.push(...list[i].questionMapping);
  238. });
  239. dispatch({
  240. type: CHECKCONFIRMSELECTED,
  241. data: {exists:fullfillText(has,false,false).newArr,withs:fullfillText(wes,false,false).newArr,nones:nones,ikey,copyType}
  242. });
  243. dispatch({
  244. type:ISREAD
  245. });
  246. }
  247. });
  248. }
  249. //在不同模块(主诉、现病史等)下拉选中调用不同事件
  250. function handleModuleDiff(dispatch,store,params){
  251. const {type,mainSaveText} = params;
  252. switch (+type){
  253. case 1:
  254. /*let text = filterDataArr(mainSaveText);
  255. if(text.length >= config.limited){
  256. Notify.info(config.limitText);
  257. return
  258. }*/
  259. mainSuitModule(dispatch,store,params);
  260. break;
  261. case 2:
  262. currentIll(dispatch,store,params);
  263. break;
  264. case 3:
  265. otherHisConfirm(dispatch,store,params);
  266. break;
  267. case 4:
  268. checkBodyConfirm(dispatch,store,params);
  269. break;
  270. default:
  271. }
  272. }
  273. /*****************普通多选框确定事件**************************/
  274. //主诉普通多选确定
  275. function mainSuitCheck(dispatch,store,params){
  276. const {nones,exists,withs,order,mainSaveText,value,ikey} = params;
  277. let existsName = getNames(exists,order);
  278. let withsName = getNames(withs);
  279. let labelInx = getLabelIndex(ikey);
  280. let text = filterDataArr(mainSaveText);
  281. /*if(text.length >= config.limited){
  282. Notify.info(config.limitText);
  283. return
  284. }*/
  285. // let lengths = text.length + existsName.length;
  286. let lengths = value?(text.length - value.length + existsName.length):(text.length + existsName.length);
  287. if(lengths > config.limited){
  288. Notify.info(config.limitText);
  289. return
  290. }
  291. // const index = params.ikey;
  292. // let ikey = getLabelIndex(index);
  293. dispatch({
  294. type: COMM_CONFIRM,
  295. // data: {exists:exists,existsName:existsName,ikey}
  296. data:Object.assign({},params,{existsName,withsName,labelInx})
  297. });
  298. dispatch({//隐藏下拉
  299. type:HIDEDROP
  300. })
  301. }
  302. //现病史普通多选确定
  303. function currentCheck(dispatch,store,params){
  304. const {ikey,exclusion,excluName,nones,exists,noneIds,noneOn,nowOn,withOn,withs,order} = params;
  305. let existsName = getNames(exists,order);
  306. let withsName = getNames(withs);
  307. let labelInx = getLabelIndex(ikey);
  308. dispatch({
  309. type:SETMAINCHECKBOX,
  310. // data:{labelInx,ikey,exclusion,excluName,nones,exists,existsName,noneIds,noneOn,nowOn,withOn,withs,withsName}
  311. data:Object.assign({},params,{existsName,withsName,labelInx})
  312. })
  313. }
  314. //查体普通多选确定
  315. function checkBodyCheck(dispatch,store,params){
  316. const {ikey,exclusion,excluName,nones,exists,noneIds,noneOn,nowOn,withOn,withs,order} = params;
  317. let existsName = getNames(exists,order);
  318. let withsName = getNames(withs);
  319. let labelInx = getLabelIndex(ikey);
  320. dispatch({
  321. type:SETCHECKBOX,
  322. // data:{labelInx,ikey,exclusion,excluName,nones,exists,existsName,noneIds,noneOn,nowOn,withOn,withs,withsName}
  323. data:Object.assign({},params,{existsName,withsName,labelInx})
  324. })
  325. }
  326. //其他史普通多选确定
  327. function otherHisCheck(dispatch,store,params){
  328. const {ikey,exclusion,excluName,nones,exists,noneIds,noneOn,nowOn,withOn,withs,order} = params;
  329. let existsName = getNames(exists,order);
  330. let withsName = getNames(withs);
  331. let labelInx = getLabelIndex(ikey);
  332. dispatch({
  333. type:SETOTHERCHECKBOX,
  334. // data:{labelInx,ikey,exclusion,excluName,nones,exists,existsName,noneIds,noneOn,nowOn,withOn,withs,withsName}
  335. data:Object.assign({},params,{existsName,withsName,labelInx})
  336. })
  337. }
  338. function handleCheckBox(dispatch,store,params){
  339. const {type,mainSaveText} = params;
  340. switch (+type){
  341. case 1:
  342. /*let text = filterDataArr(mainSaveText);
  343. if(text.length >= config.limited){
  344. Notify.info(config.limitText);
  345. return
  346. }*/
  347. mainSuitCheck(dispatch,store,params);
  348. break;
  349. case 2:
  350. currentCheck(dispatch,store,params);
  351. break;
  352. case 3:
  353. otherHisCheck(dispatch,store,params);
  354. break;
  355. case 4:
  356. checkBodyCheck(dispatch,store,params);
  357. break;
  358. default:
  359. }
  360. }
  361. /**************标签双击输入**************/
  362. //主诉
  363. function mainSuitLabelEdit(dispatch,params){
  364. const index = params.ikey;
  365. let ikey = getLabelIndex(index);
  366. dispatch({
  367. type:CHANGE_LABELVAL,
  368. data:{changeVal:params.changeVal,ikey:ikey}
  369. })
  370. }
  371. //现病史
  372. function currentLabelEdit(dispatch,params){
  373. const index = params.ikey;
  374. let ikey = getLabelIndex(index);
  375. dispatch({
  376. type:CURRENT_TEXT_LABEL,
  377. data:{changeVal:params.changeVal,ikey:ikey}
  378. })
  379. }
  380. //其他史
  381. function otherHisLabelEdit(dispatch,params){
  382. const index = params.ikey;
  383. let ikey = getLabelIndex(index);
  384. dispatch({
  385. type:CHANGEOTHERTEXTLABEL,
  386. data:{changeVal:params.changeVal,ikey:ikey}
  387. })
  388. }
  389. //查体
  390. function checkBodyLabelEdit(dispatch,params){
  391. const index = params.ikey;
  392. let ikey = getLabelIndex(index);
  393. const {changeVal} = params;
  394. dispatch({
  395. type:CHANGECHECKTEXTLABEL,
  396. data:{totalVal:changeVal,ikey:ikey,changeVal}
  397. })
  398. }
  399. function handleLabel(dispatch,params){
  400. const {type} = params;
  401. switch (+type){
  402. case 1:
  403. mainSuitLabelEdit(dispatch,params);
  404. break;
  405. case 2:
  406. currentLabelEdit(dispatch,params);
  407. break;
  408. case 3:
  409. otherHisLabelEdit(dispatch,params);
  410. break;
  411. case 4:
  412. checkBodyLabelEdit(dispatch,params);
  413. break;
  414. default:
  415. }
  416. dispatch(billing());
  417. dispatch({
  418. type:ISREAD
  419. })
  420. }
  421. function mapDispatchToProps(dispatch,store){
  422. return {
  423. handleConfirm(obj){
  424. if(obj.tagType == 6||obj.tagType == 11){//铺开
  425. handleModuleDiff(dispatch,store,obj);
  426. }else if(obj.tagType == 2){//普通多选
  427. handleCheckBox(dispatch,store,obj);
  428. }
  429. //右侧推送
  430. setTimeout(function(){ //延迟待确定后的数据更新后推送,避免获取的参数还是旧的
  431. if(didPushParamChange()){ //操作后内容有变化才推送
  432. dispatch(billing());
  433. }
  434. },500);
  435. },
  436. handleHide(){
  437. dispatch({
  438. type: HIDEDROP
  439. });
  440. },
  441. async handleShow(obj){
  442. // 埋点dispatch
  443. dispatch({
  444. type:CLICKCOUNT,
  445. data:obj,
  446. clickType:'单击',
  447. num:1
  448. });
  449. // 调大数据接口
  450. if(obj.tagType ==11 ){
  451. const bigData = await getCommSymptomPush();
  452. let result = bigData.data;
  453. if(+result.code == 0){
  454. // let pushDataList = result.data.symptom;
  455. let bigDataList = result.data.symptom;
  456. let pushDataList = [];
  457. if(bigDataList&&bigDataList.length>0){//剔除没有id
  458. pushDataList = bigDataList.filter(function(item){
  459. return item.id
  460. });
  461. }else{
  462. pushDataList = bigDataList;
  463. }
  464. /*if(pushDataList.length > 0){
  465. if(obj.type == 1){// 主诉--添加症状
  466. dispatch({
  467. type:GET_BIGDATAPUSH,
  468. data:pushDataList,
  469. info:obj
  470. })
  471. }else if(obj.type == 2){// 现病史--添加其他症状
  472. dispatch({
  473. type:CURRENT_GET_BIGDATAPUSH,
  474. data:pushDataList,
  475. info:obj
  476. })
  477. }
  478. }else{
  479. Notify.info("暂无推送");
  480. // return
  481. }*/
  482. //推送无数据显示空下拉并提示暂无推送--1.9/1.18
  483. if(!pushDataList || pushDataList.length == 0){Notify.info("暂无推送");}
  484. if(obj.type == 1){// 主诉--添加症状
  485. dispatch({
  486. type:GET_BIGDATAPUSH,
  487. data:pushDataList,
  488. info:obj
  489. })
  490. }else if(obj.type == 2){// 现病史--添加其他症状
  491. dispatch({
  492. type:CURRENT_GET_BIGDATAPUSH,
  493. data:pushDataList,
  494. info:obj
  495. })
  496. }
  497. }else{
  498. console.log(result.msg);
  499. Notify.info("暂无推送");
  500. // 接口请求失败,不往下执行显示下拉
  501. return
  502. }
  503. }
  504. dispatch({
  505. type:SETDROPSHOW,
  506. data:obj
  507. });
  508. dispatch({
  509. type: RESET
  510. });
  511. },
  512. handleDbclick(obj){//双击统计
  513. dispatch({
  514. type:CLICKCOUNT,
  515. data:obj,
  516. clickType:'双击',
  517. num:1
  518. });
  519. },
  520. handleLabelChange(obj){//标签内输入
  521. handleLabel(dispatch,obj);
  522. }
  523. }
  524. }
  525. const SpreadDropCont = connect(
  526. mapStateToProps,
  527. mapDispatchToProps
  528. )(SpreadDrop);
  529. export default SpreadDropCont;