index.jsx 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import React, { Component } from "react";
  2. import styles from "./index.less";
  3. import NewPortal from './NewPortal'
  4. import close from "./../img/close.png";
  5. import $ from "jquery";
  6. import { imageUrlPrefix } from '@utils/config.js';
  7. import { dragBox } from '@utils/drag';
  8. class DetailsModal extends Component {
  9. constructor(props) {
  10. super(props);
  11. this.state = {
  12. currentIndex: 0
  13. }
  14. this.hideTips = this.hideTips.bind(this)
  15. }
  16. componentDidMount(){
  17. dragBox('detailsContentWrap','detailsContentTitle','add')
  18. }
  19. hideTips() {
  20. const { hideTips } = this.props;
  21. hideTips && hideTips();
  22. dragBox('detailsContentWrap','detailsContentTitle','del')
  23. }
  24. handleClickMenu(index, item, tipsDetails) {
  25. const that = this
  26. setTimeout(function(){
  27. that.setState({
  28. currentIndex: index
  29. })
  30. },0)
  31. let scrollTop = 0
  32. tipsDetails.details.map((it, ii) => {
  33. if( ii < index) {
  34. scrollTop = scrollTop + parseInt($('#' + it.title).css('height'))
  35. }
  36. })
  37. $('#detailsContent').scrollTop(scrollTop)
  38. }
  39. handleScrollModal(tipsDetails) {
  40. const scrollTop = $('#detailsContent').scrollTop()
  41. let divHeight = 0;
  42. for (let i = 0; i < tipsDetails.details.length; i++) {
  43. divHeight = divHeight + parseInt($('#' + tipsDetails.details[i].title).css('height')) -5
  44. if(divHeight > scrollTop) {
  45. this.setState({
  46. currentIndex: i
  47. })
  48. return
  49. }
  50. }
  51. }
  52. render() {
  53. const {showTipsDetails, tipsDetails,showAllName} = this.props;
  54. const { currentIndex } = this.state
  55. return <NewPortal visible = {showTipsDetails}>
  56. <div className={styles['details-wrapper']}>
  57. <div className={styles['details-content-wrapper']} id="detailsContentWrap">
  58. <h1 id="detailsContentTitle" className={`${styles['details-content-name']} drag-title`} >{tipsDetails && showAllName ? showAllName : tipsDetails &&tipsDetails.name} <img className={styles['details-close']} onClick={this.hideTips} src={close} /></h1>
  59. <div className={styles['details-content']} id= 'detailsContent' onScroll={this.handleScrollModal.bind(this, tipsDetails)}>
  60. {tipsDetails && tipsDetails.details && tipsDetails.details.map((item, index) => {
  61. return (<div id={item.title}>
  62. <div className={styles['details-content-title-box']} >
  63. <span className={styles['details-content-title-name']}>{item.title}</span>
  64. <div className={styles['details-content-title-line']}></div>
  65. </div>
  66. <pre dangerouslySetInnerHTML ={{__html: item.content.replace(/{imageUrlPrefix}/g, imageUrlPrefix)}}></pre>
  67. </div>)
  68. })}
  69. </div>
  70. <div className={styles['content-menu-box']}>
  71. <div className={styles['content-menu-wrapper']}>
  72. <div className={styles['content-menu']}>
  73. {tipsDetails && tipsDetails.details && tipsDetails.details.map((item, index) => {
  74. return (<div>
  75. <div className={styles['details-menu-title-box']}>
  76. {index === 0 ? '' : <div className={styles['details-content-menu-line']}></div>}
  77. <span onClick={this.handleClickMenu.bind(this, index, item, tipsDetails)} className={styles['details-content-menu-name']} style = {index === currentIndex ? {color:'#0089be'} : ''}>
  78. <span className={styles['details-content-menu-circle']} style = {index === currentIndex ? {background:'#0089be'} : ''}></span>{item.title}
  79. </span>
  80. </div>
  81. </div>)
  82. })}
  83. </div>
  84. </div>
  85. </div>
  86. </div>
  87. <div className={styles['details-mask']} onClick={this.hideTips}>
  88. </div>
  89. </div>
  90. </NewPortal>
  91. }
  92. }
  93. export default DetailsModal;