index.jsx 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. import React from 'react';
  2. import { SearchOption, Calendar, ConfirmModal, Notify, Add ,DelToast} from '@commonComp';
  3. import styles from './index.less';
  4. import $ from 'jquery';
  5. import Textarea from './Textarea';
  6. import { getPageCoordinate,getCurrentDate,setPosition } from '@utils/tools';
  7. import ScrollArea from 'react-scrollbar';
  8. class AddAssistCheck extends React.Component {
  9. constructor(props) {
  10. super(props);
  11. this.state = {
  12. show: false,
  13. date: false,
  14. dateTime: "",
  15. active: '',
  16. visible: false,
  17. pageTop:'',
  18. id: null,
  19. activeName:''
  20. }
  21. this.handleShowDate = this.handleShowDate.bind(this)
  22. this.getSearchList = this.getSearchList.bind(this)
  23. this.getAssistLabel = this.getAssistLabel.bind(this)
  24. this.handleDelClick = this.handleDelClick.bind(this)
  25. this.delConfirm = this.delConfirm.bind(this)
  26. this.handleCancel = this.handleCancel.bind(this)
  27. this.timeSure = this.timeSure.bind(this)
  28. }
  29. componentDidMount() {
  30. $(document).click((event) => {
  31. let _con = $('#searchWrapAssist'); // 设置目标区域
  32. let _cons = $('#datePick'); // 设置目标区域
  33. // let _conClick = $('#assistCheck'); // 点击的按钮
  34. let _del = document.getElementById("delBox"); // 删除弹窗
  35. let _close = document.getElementById("assiClose"); // 删除icon
  36. let _closeTil = $('#delTit')[0]; // 弹窗标题
  37. if (_con && searchWrapAssist != event.target && !_con.is(event.target) && _con.has(event.target).length === 0) { // Mark 1
  38. if(this.state.show){
  39. this.props.setHighter(0)
  40. }
  41. this.setState({ show: false });
  42. }
  43. if (!_cons.is(event.target) && _cons.has(event.target).length === 0 || event.target.isEqualNode(_close)) { // Mark 1
  44. this.setState({ date: false });
  45. }
  46. if(_del){
  47. if($(event.target).attr('id') != 'assiClose' &&!event.target.isEqualNode(_close) && !event.target.isEqualNode(_del) && event.target.parentNode != _del && !event.target.isEqualNode(_closeTil)){
  48. this.setState({
  49. visible: false,
  50. id: null,
  51. activeName:''
  52. })
  53. }
  54. }
  55. });
  56. getCurrentDate(1);
  57. }
  58. handleDelClick(id,item) {
  59. this.setState({
  60. visible: true,
  61. id: id,
  62. activeName:item.name
  63. })
  64. }
  65. delConfirm(type) {
  66. const { handleDelAssist, handlePush } = this.props;
  67. const { id,activeName } = this.state;
  68. handleDelAssist && handleDelAssist(id,activeName,type);
  69. handlePush && handlePush(); //右侧推送
  70. this.setState({
  71. visible: false,
  72. id: null,
  73. activeName:''
  74. })
  75. Notify.success("删除成功");
  76. }
  77. handleCancel() {
  78. this.setState({
  79. visible: false,
  80. id: null,
  81. activeName:''
  82. })
  83. }
  84. handleSearchShow(e) {
  85. let tmpShow = this.state.show;
  86. this.setState({ show: !tmpShow,pageTop:getPageCoordinate(e).boxTop })
  87. // e.stopPropagation();
  88. setPosition(e,"#searchOption",this.props.setHighter)
  89. }
  90. handleShowDate(idx) {
  91. this.setState({
  92. date: !this.state.date,
  93. active: idx
  94. })
  95. }
  96. getSearchList(list) { //搜索列表
  97. const { handleSign } = this.props;
  98. return <ul className={styles.searchLiUl}>
  99. {
  100. list && list.map((item, idx) => {
  101. return <li key={item.id}
  102. className={styles.searchLi}
  103. title={(item.name == item.retrievalName || !item.retrievalName) ? null : '(' + item.retrievalName + ')'}
  104. onClick={() => {
  105. handleSign(item.conceptId,idx,'search');
  106. this.setState({ show: false })
  107. }}
  108. >
  109. {item.name}{(item.name == item.retrievalName || !item.retrievalName) ? null : '(' + item.retrievalName + ')'}
  110. </li>
  111. })
  112. }
  113. </ul>
  114. }
  115. getCommonList() { //常用列表
  116. const { handleSign,assistList } = this.props;
  117. return <ul className={styles.searchLiUl}>
  118. {
  119. assistList && assistList.map((item, idx) => {
  120. return <li key={item.id}
  121. className={styles.searchLi}
  122. title={item.name}
  123. onClick={() => {
  124. handleSign(item.conceptId, idx,'common');
  125. this.setState({ show: false })
  126. }}
  127. >
  128. {item.name}
  129. </li>
  130. })
  131. }
  132. </ul>
  133. }
  134. handleChangeDate(){}
  135. timeSure(date,idx){
  136. this.props.handleChangeDate(date,idx)
  137. this.setState({ date: false })
  138. }
  139. getAssistLabel() {
  140. const { assistLabel,checkedListImport, handleChangeAssistValue, handleChangeDate, isRead, handlePush, winWidth,getInfomation,assistList } = this.props;
  141. const { visible,activeName,id,date } = this.state;
  142. return <React.Fragment>
  143. {
  144. checkedListImport.map((part,index)=>{
  145. return <ul className={`${styles.labelWrap} ${styles.labelWrapSpec} ${styles.labelWrapSpecs}`}>
  146. {
  147. part.map((item, idx) => {
  148. return (<li className={`${styles.assistLists} ${styles.clearfix}`}>
  149. <span className={styles.assistName} style={{ width: winWidth < 1200 ? '120px' : 'auto' }}>
  150. <span className={styles.tagSpan}>
  151. {item.name}:
  152. <span className={styles.imgInfo} onClick={()=>getInfomation({name: item.name, position: 1, type: 6})}></span>
  153. </span>
  154. </span>
  155. <div className={styles.textareaWrap}>
  156. <Textarea value={item.value} disabled={item.disabled} handlePush={handlePush} isRead={isRead} handleChangeAssistValue={handleChangeAssistValue} idx={idx}></Textarea>
  157. </div>
  158. <div className={styles.pointerFinger}>
  159. <p>报告日期:<span>{item.time || this.state.dateTime}</span></p>
  160. </div>
  161. </li>)
  162. })
  163. }
  164. <DelToast show={index==id&&part.name==activeName?visible:false}
  165. name="该导入项"
  166. right={'-34px'}
  167. top={'22px'}
  168. cancel={this.handleCancel}
  169. confirm={()=>this.delConfirm(0)}/>
  170. <span className={`${styles.closeIcon} ${styles.closeIcons}`} id="assiClose" onClick={()=>{ this.handleDelClick(index,part)}}></span>
  171. </ul>
  172. })
  173. }
  174. <ul className={styles.labelWrap} id="datePick">
  175. {
  176. assistLabel.map((item, idx) => {
  177. let staticTime = {}
  178. if(item.time){
  179. let tmp1 = (item.time).split(' ')[0].split('-')
  180. let tmp2 = (item.time).split(' ').length>1&&(item.time).split(' ')[1].split(':')
  181. staticTime = {
  182. year: tmp1[0]-0,
  183. month: tmp1[1]-0,
  184. day: tmp1[2]-0,
  185. hour: tmp2[0],
  186. minute: tmp2[1],
  187. second: tmp2[2]
  188. }
  189. }
  190. return (item.disabled?null:<li className={`${styles.assistLists} ${styles.clearfix}`}>
  191. <span className={styles.assistName} style={{ width: winWidth < 1200 ? '120px' : 'auto' }}>
  192. <span className={styles.tagSpan}>
  193. {item.name}:
  194. <span className={styles.imgInfo} onClick={()=>getInfomation({name: item.name, position: 1, type: 6})}></span>
  195. </span>
  196. </span>
  197. <div className={styles.textareaWrap}>
  198. <Textarea value={item.value} disabled={item.disabled} handlePush={handlePush} isRead={isRead} handleChangeAssistValue={handleChangeAssistValue} idx={idx}></Textarea>
  199. </div>
  200. <div className={styles.pointerFinger}>
  201. <p onClick={() => this.handleShowDate(idx)}>报告日期:<span>{item.time || this.state.dateTime}</span></p>
  202. <i onClick={() => this.handleShowDate(idx)}></i>
  203. {/*<a href="javascript:void(0);" onClick={() => { this.handleDelClick(idx,item) }}><img src={close} alt="" /></a>*/}
  204. <span className={styles.closeIcon} id="assiClose" onClick={() => { this.handleDelClick(idx,item) }}></span>
  205. {
  206. this.state.date && idx == this.state.active ?<Calendar timeLis={staticTime} isShow={true} timeSure={(date)=>this.timeSure(date,idx)} needTime={true} sure={true} handleChange={(info) => { this.handleChangeDate(info, idx) }} top={30}></Calendar>:null
  207. }
  208. </div>
  209. <DelToast show={idx==id&&item.name==activeName?visible:false}
  210. name={activeName}
  211. right={'-34px'}
  212. top={'40px'}
  213. cancel={this.handleCancel}
  214. confirm={()=>this.delConfirm(1)}/>
  215. {/* {
  216. id == null?null:<DelToast show={idx==id&&item.name==activeName?visible:false}
  217. name={activeName}
  218. cancel={this.handleCancel}
  219. confirm={this.delConfirm}/>
  220. } */}
  221. </li>)
  222. })
  223. }
  224. </ul>
  225. </React.Fragment>
  226. }
  227. render() {
  228. const { handleChangeValue, list,assistVal,windowHeight,assistList, refreshScroller } = this.props;
  229. const { visible,pageTop } = this.state;
  230. const contStyle={
  231. opacity:'0.4',
  232. right:'0',
  233. top:'1px',
  234. zIndex:'15',
  235. width:'14px',
  236. background:'#f1f1f1'};
  237. const barStyle={background:'#777',width:'100%'};
  238. return (
  239. <div className={styles.wrapper}>
  240. {this.getAssistLabel()}
  241. <div id="searchWrapAssist" style={{ position: "relative", clear: 'both' }}>
  242. <Add showText="添加辅检项" handleClick={(e) => this.handleSearchShow(e)} id="assistCheck" />
  243. {this.state.show ? <SearchOption windowHeight={windowHeight} refreshScroller={refreshScroller } pageTop={pageTop} height={280} handleChangeValue={handleChangeValue} visible={true}>
  244. {list && list.length>0?this.getSearchList(list):(assistVal == ''?'':<p style={{padding:'5px 30px',color:'#bfbfbf'}}>暂无筛选项</p>)}
  245. {
  246. (list && list.length>0) || (assistVal != '') || (assistList&&assistList.length==0)?'':<div>
  247. <p style={{padding:'5px 30px',color:'#bfbfbf'}}>常用辅检项</p>
  248. <ScrollArea speed={0.8}
  249. horizontal={false}
  250. stopScrollPropagation={true}
  251. style={{height:'225px'}}
  252. className={styles["area"]}
  253. verticalContainerStyle={contStyle}
  254. verticalScrollbarStyle={barStyle}
  255. contentClassName="content">
  256. {
  257. this.getCommonList()
  258. }
  259. </ScrollArea>
  260. </div>
  261. }
  262. </SearchOption> : ''}
  263. </div>
  264. </div>
  265. )
  266. }
  267. }
  268. export default AddAssistCheck;