index.jsx 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. import React, { Component } from "react";
  2. import style from "./index.less";
  3. import printImg from '@common/images/icon_print_blue.png';
  4. import preview from '@common/images/preview.png';
  5. import saveHistory from '@common/images/saveHistory.png';
  6. import PrintPreviewContainer from '@containers/PrintPreviewContainer';
  7. import PreviewContainer from '@containers/PreviewContainer';
  8. import { ConfirmModal, Notify } from '@commonComp';
  9. import check_circle from './img/check-circle.png';
  10. import check_right from './img/check-right.png';
  11. import {getAllDataList,getAllDataStringList,isAllClear,filterDataArr,readyKeepHistory} from '@utils/tools';
  12. import {dragBox} from '@utils/drag';
  13. import store from '@store';
  14. import $ from 'jquery';
  15. class Operation extends Component {
  16. constructor(props) {
  17. super(props)
  18. this.state = {
  19. title: '',
  20. okText: '',
  21. borderColor: '',
  22. okColor: '',
  23. oKBg: '',
  24. msg: '',
  25. type: '',
  26. zIndex:40,
  27. sex:'3',
  28. le:'',
  29. }
  30. this.showPrint = this.showPrint.bind(this);
  31. this.closePrint = this.closePrint.bind(this);
  32. this.showPreview = this.showPreview.bind(this);
  33. this.closePreview = this.closePreview.bind(this);
  34. this.saveAll = this.saveAll.bind(this);
  35. this.clearAll = this.clearAll.bind(this);
  36. this.saveHis = this.saveHis.bind(this);
  37. this.keypress = this.keypress.bind(this);
  38. }
  39. showPrint() {
  40. this.setState({
  41. zIndex:240
  42. })
  43. this.props.showPrintPreview()
  44. }
  45. closePrint() {
  46. this.setState({
  47. zIndex:40
  48. })
  49. this.props.closePrintPreview()
  50. dragBox('previewPrintWrapper','previewPrintStatic','del')
  51. }
  52. showPreview() {
  53. this.setState({
  54. zIndex:240
  55. })
  56. this.props.showPreview()
  57. }
  58. closePreview() {
  59. this.setState({
  60. zIndex:40
  61. })
  62. this.props.closePreview()
  63. dragBox('previewWrapper','previewStatic','del')
  64. }
  65. saveAll(type) {
  66. let keepState = readyKeepHistory();
  67. if(keepState == 1){
  68. Notify.info('主诉不能为空');
  69. return;
  70. }else if(keepState == 2){
  71. Notify.info('诊断不能为空');
  72. return;
  73. }else{
  74. this.setState({
  75. type: type,
  76. okText: '保存',
  77. borderColor: '#3B9ED0',
  78. okColor: '#fff',
  79. oKBg: '#3B9ED0',
  80. msg: <p className={style['msg']}>是否保存该病历?</p>
  81. })
  82. this.props.diagShowTmp(true)
  83. }
  84. }
  85. clearAll(type) {
  86. let baseList = store.getState();
  87. let jsonData = getAllDataList(baseList);
  88. let jsonStr = getAllDataStringList(baseList);
  89. let flg = isAllClear(jsonData,jsonStr,baseList);
  90. if(flg){
  91. this.setState({
  92. type: type,
  93. okText: '清除',
  94. borderColor: 'red',
  95. okColor: 'red',
  96. oKBg: '#fff',
  97. msg: <p className={style['msg']}>是否清空所有内容?</p>
  98. })
  99. this.props.diagShowTmp(true)
  100. }else{
  101. Notify.info('当前页面数据已清空');
  102. }
  103. }
  104. onchange(val) {
  105. this.setState({
  106. title: val
  107. })
  108. }
  109. handleInput(e){
  110. let val = e.target.value
  111. if(e.target.value.length > 30){
  112. e.target.value = val.substring(0,30)
  113. this.onchange(val.substring(0,30))
  114. }else{
  115. this.onchange(e.target.value)
  116. }
  117. }
  118. keypress(event) {
  119. let e = event?event:window.event;
  120. if (e.keyCode == 13) {
  121. this.makeSure()
  122. }
  123. }
  124. saveHis(type) {
  125. const { diagShowTmp } = this.props;
  126. let flg = this.getAllData();
  127. if(flg){
  128. this.setState({
  129. title: '',
  130. sex:'3',
  131. type: type,
  132. okText: '保存',
  133. borderColor: '#3B9ED0',
  134. okColor: '#fff',
  135. oKBg: '#3B9ED0',
  136. msg: this.changeTitle()
  137. })
  138. diagShowTmp(true)
  139. }
  140. }
  141. getAllData(){
  142. let baseList = store.getState();
  143. let jsonData = getAllDataList(baseList);
  144. let jsonStr = getAllDataStringList(baseList);
  145. let whichSign = baseList.typeConfig.typeConfig;
  146. let tmpLis = baseList.tabTemplate.items;
  147. let flg = isAllClear(jsonData,jsonStr,baseList)
  148. if(!flg){
  149. Notify.info('模板数据不能为空')
  150. return false
  151. }
  152. // console.log(jsonStr,'文本')
  153. // console.log(jsonData,'结构') //测试需要用到,不要删了
  154. // console.log(tmpLis,'接口返回的')
  155. for(let i = 0;i <tmpLis.length;i++){
  156. let dataStr = tmpLis[i].preview;
  157. // let dataJson = tmpLis[i].dataJson;
  158. // console.log(jsonStr.chief , JSON.stringify(eval('('+JSON.parse(dataStr).chief+')')))
  159. if(whichSign == 0){
  160. if(
  161. filterDataArr(JSON.parse(jsonStr.chief)) == filterDataArr(eval('('+JSON.parse(dataStr).chief+')')) &&
  162. filterDataArr(JSON.parse(jsonStr.present)) == filterDataArr(eval('('+JSON.parse(dataStr).present+')')) &&
  163. filterDataArr(JSON.parse(jsonStr.other)) == filterDataArr(eval('('+JSON.parse(dataStr).other+')')) &&
  164. filterDataArr(JSON.parse(jsonStr.vital)) == filterDataArr(eval('('+JSON.parse(dataStr).vital+')')) &&
  165. jsonStr.lis == JSON.parse(dataStr).lis &&
  166. jsonStr.pacs == JSON.parse(dataStr).pacs &&
  167. jsonStr.diag == JSON.parse(dataStr).diag &&
  168. jsonStr.advice == JSON.parse(dataStr).advice
  169. // JSON.stringify(jsonData.chief) == JSON.stringify(JSON.parse(dataJson).chief) &&
  170. // JSON.stringify(jsonData.checkedListImport) == JSON.stringify(JSON.parse(dataJson).checkedListImport) &&
  171. // JSON.stringify(jsonData.present) == JSON.stringify(JSON.parse(dataJson).present) &&
  172. // JSON.stringify(jsonData.other) == JSON.stringify(JSON.parse(dataJson).other) &&
  173. // JSON.stringify(jsonData.vital) == JSON.stringify(JSON.parse(dataJson).vital) &&
  174. // JSON.stringify(jsonData.lis) == JSON.stringify(JSON.parse(dataJson).lis) &&
  175. // JSON.stringify(jsonData.pacs) == JSON.stringify(JSON.parse(dataJson).pacs) &&
  176. // JSON.stringify(jsonData.diag) == JSON.stringify(JSON.parse(dataJson).diag) &&
  177. // JSON.stringify(jsonData.advice) == JSON.stringify(JSON.parse(dataJson).advice) &&
  178. // JSON.stringify(jsonData.mainSuitSelecteds) == JSON.stringify(JSON.parse(dataJson).mainSuitSelecteds) &&
  179. // JSON.stringify(jsonData.currentIllSelecteds) == JSON.stringify(JSON.parse(dataJson).currentIllSelecteds) &&
  180. // JSON.stringify(jsonData.otherHistorySelecteds) == JSON.stringify(JSON.parse(dataJson).otherHistorySelecteds) &&
  181. // JSON.stringify(jsonData.checkBodySelecteds) == JSON.stringify(JSON.parse(dataJson).checkBodySelecteds) &&
  182. // JSON.stringify(jsonData.addItems) == JSON.stringify(JSON.parse(dataJson).addItems)
  183. ){
  184. Notify.info('该模板已保存');
  185. return false;
  186. }
  187. }else if(whichSign == 1){
  188. if(
  189. jsonStr.chief == JSON.stringify(eval('('+JSON.parse(dataStr).chief+')')) &&
  190. jsonStr.present == JSON.stringify(eval('('+JSON.parse(dataStr).present+')')) &&
  191. jsonStr.other == JSON.stringify(eval('('+JSON.parse(dataStr).other+')')) &&
  192. jsonStr.vital == JSON.stringify(eval('('+JSON.parse(dataStr).vital+')')) &&
  193. jsonStr.lis == JSON.parse(dataStr).lis &&
  194. jsonStr.pacs == JSON.parse(dataStr).pacs &&
  195. jsonStr.diag == JSON.parse(dataStr).diag &&
  196. jsonStr.advice == JSON.parse(dataStr).advice
  197. // JSON.stringify(jsonData.vital) == JSON.stringify(JSON.parse(dataJson).vital) &&
  198. // JSON.stringify(jsonData.lis) == JSON.stringify(JSON.parse(dataJson).lis) &&
  199. // JSON.stringify(jsonData.pacs) == JSON.stringify(JSON.parse(dataJson).pacs) &&
  200. // JSON.stringify(jsonData.diag) == JSON.stringify(JSON.parse(dataJson).diag) &&
  201. // JSON.stringify(jsonData.advice) == JSON.stringify(JSON.parse(dataJson).advice) &&
  202. // JSON.stringify(jsonData.addItems) == JSON.stringify(JSON.parse(dataJson).addItems)
  203. ){
  204. Notify.info('该模板已保存');
  205. return false;
  206. }
  207. }
  208. }
  209. return true;
  210. }
  211. changeTitle() {
  212. return <div className={style['box']}>
  213. <input className={style['ipt']}
  214. placeholder="请输入模板名称"
  215. type="text"
  216. maxLength='30'
  217. onInput={(e) => {
  218. this.handleInput(e)
  219. }}
  220. onPropertyChange={(e) => { // 兼容ie
  221. this.handleInput(e)
  222. }}
  223. onKeyPress={e => this.keypress(e)}
  224. />
  225. <div className={style['line']}></div>
  226. <div className={style['iptWrap']}>
  227. <p>请选择模板性别归属(错误引用,显示可能有误)</p>
  228. <span className={style['commonSex']} id="commonSex" onClick={this.changeRadio.bind(this,1)}><img src={check_right} alt=""/><i style={{color:'#000'}}>通用</i></span>
  229. <span id="maleSex" onClick={this.changeRadio.bind(this,2)}><img src={check_circle} alt=""/><i>男</i></span>
  230. <span id="femaleSex" onClick={this.changeRadio.bind(this,3)}><img src={check_circle} alt=""/><i>女</i></span>
  231. </div>
  232. </div>
  233. }
  234. changeRadio(sex){
  235. if(sex == 1){
  236. $('#commonSex img').attr('src',check_right)
  237. $('#maleSex img').attr('src',check_circle)
  238. $('#femaleSex img').attr('src',check_circle)
  239. $('#commonSex i').css('color','#000')
  240. $('#maleSex i').css('color','#6b6969')
  241. $('#femaleSex i').css('color','#6b6969')
  242. this.setState({sex:'3'})
  243. }else if(sex == 2){
  244. $('#commonSex img').attr('src',check_circle)
  245. $('#maleSex img').attr('src',check_right)
  246. $('#femaleSex img').attr('src',check_circle)
  247. $('#commonSex i').css('color','#6b6969')
  248. $('#maleSex i').css('color','#000')
  249. $('#femaleSex i').css('color','#6b6969')
  250. this.setState({sex:'1'})
  251. }else if(sex == 3){
  252. $('#commonSex img').attr('src',check_circle)
  253. $('#maleSex img').attr('src',check_circle)
  254. $('#femaleSex img').attr('src',check_right)
  255. $('#commonSex i').css('color','#6b6969')
  256. $('#maleSex i').css('color','#6b6969')
  257. $('#femaleSex i').css('color','#000')
  258. this.setState({sex:'2'})
  259. }
  260. }
  261. makeSure() {
  262. const { save, clear, saveDataAll,diagShowTmp ,chronicMagItem,chronicDesease} = this.props;
  263. const { type } = this.state;
  264. if (type == 1) {
  265. diagShowTmp(false)
  266. this.setState({ title: '' })
  267. save();
  268. } else if (type == 2) {
  269. diagShowTmp(false)
  270. this.setState({ title: '' })
  271. // 慢病标识
  272. const chronicFlag = chronicMagItem || chronicDesease?true:false;
  273. clear(chronicFlag);
  274. } else if (type == 3) {
  275. if (this.state.title.trim() == '') {
  276. Notify.error('请输入模板名称')
  277. return;
  278. }
  279. saveDataAll(this.state.title,this.state.sex);
  280. }
  281. }
  282. closeDiagBox(){
  283. const { diagShowTmp } = this.props;
  284. const { type } = this.state;
  285. if (type == 3){
  286. diagShowTmp(false)
  287. this.setState({ title: '' })
  288. }else{
  289. diagShowTmp(false)
  290. this.setState({ title: '' })
  291. }
  292. }
  293. componentWillReceiveProps(next){//监听滚动事件
  294. const that = this;
  295. if(next.winWidth <= 1024){
  296. /*$(document).on('scroll',function(){
  297. let left = -($(document).scrollLeft() - 10) + 'px';
  298. that.setState({
  299. le:left
  300. })
  301. })*/
  302. $(window).scroll(function(){
  303. let scrollLeft = document.body.scrollLeft || document.documentElement.scrollLeft;
  304. let left = -(scrollLeft - 10) +'px';
  305. that.setState({
  306. le:left
  307. })
  308. })
  309. }
  310. }
  311. render() {
  312. const { showPrint, closePrint, showPreview, closePreview } = this;
  313. const { visible, preVisible,diagShow } = this.props.print;
  314. const {winWidth} = this.props;
  315. const {zIndex,type,le} = this.state;
  316. return <div className={style['container']} style={{zIndex:zIndex,left:le}}>
  317. <span className={style['button']} onClick={showPrint}><img src={printImg} /> 打印病历</span>
  318. <span className={style['preButton']} onClick={showPreview}><img src={preview} /> 预览</span>
  319. <span className={style['preButton']} onClick={() => { this.saveHis(3) }}><img src={saveHistory} /> 保存病历模板</span>
  320. <span className={winWidth<=1082?`${style['saveButton']} ${style['minstyle']}`: style['saveButton']} onClick={() => { this.saveAll(1) }}>保存</span>
  321. <span className={winWidth<=1082?`${style['clearButton']} ${style['saveButton']} ${style['minstyle']}`:`${style['clearButton']} ${style['saveButton']}`} onClick={() => { this.clearAll(2) }}>清除</span>
  322. {visible?<PrintPreviewContainer visible={visible} onClose={closePrint} />:null}
  323. {preVisible?<PreviewContainer visible={preVisible} onClose={closePreview} />:null}
  324. <ConfirmModal
  325. visible={diagShow} //改为全局控制
  326. confirm={() => { this.makeSure() }}
  327. close={() => { this.closeDiagBox()}}
  328. cancel={() => {this.closeDiagBox()}}
  329. okText={this.state.okText}
  330. height={type==3?228:200}
  331. width={type==3?400:300}
  332. okBorderColor={this.state.borderColor}
  333. okColor={this.state.okColor}
  334. oKBg={this.state.oKBg}
  335. >
  336. {this.state.msg}
  337. </ConfirmModal>
  338. </div>;
  339. }
  340. }
  341. export default Operation;