index.jsx 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. import React from "react";
  2. import style from "./index.less";
  3. import $ from "jquery";
  4. import { Calendar,Notify } from '@commonComp';
  5. import { getCalendarDate, getCurrentDate } from "@utils/tools";
  6. /**
  7. * top 定位距离
  8. * sure 是否显示确认按钮
  9. * timesure 点击确认事件
  10. * needTime 是否需要时分秒
  11. * timeLis 已选时间,点开后显示上次选择事件
  12. * handleChange 日期改变调用
  13. */
  14. class TimeInterval extends React.Component {
  15. constructor(props) {
  16. super(props);
  17. const date = new Date();
  18. this.state = {
  19. startTime: getCurrentDate(false) + ' 00:00:00',
  20. endTime: getCurrentDate(false) + ' 23:59:59',
  21. show: false,
  22. flg: 0,
  23. timeLisStart: {
  24. year: date.getFullYear(),
  25. month: date.getMonth() + 1,
  26. day: date.getDate(),
  27. hour: '00',
  28. minute: '00',
  29. second: '00'
  30. },
  31. timeLisEnd: {
  32. year: date.getFullYear(),
  33. month: date.getMonth() + 1,
  34. day: date.getDate(),
  35. hour: '23',
  36. minute: '59',
  37. second: '59'
  38. }
  39. }
  40. this.handleShowTime = this.handleShowTime.bind(this)
  41. this.timeSure = this.timeSure.bind(this)
  42. }
  43. handleChangeDate(date) {
  44. // console.log(date,'外')
  45. }
  46. componentDidMount() {
  47. $(document).click((event) => {
  48. let startTimeDes = document.getElementById("startTimeDes")
  49. let endTimeDes = document.getElementById("endTimeDes")
  50. let calendarDate = document.getElementById("calendarDate")
  51. if (calendarDate) {
  52. if (startTimeDes != event.target && endTimeDes != event.target && !calendarDate.contains(event.target)) {
  53. this.setState({ show: false });
  54. }
  55. }
  56. });
  57. }
  58. timeSure(date) {
  59. const { getStartTime, getEndTime } = this.props;
  60. if (this.state.flg == 1) {
  61. let time = getCalendarDate(date);
  62. let tmpTime = time.replace(/ |:/g, '-').split('-');
  63. let arr = this.state.endTime.replace(/ |:/g, '-').split('-');
  64. let dateBegin = (new Date(Date.UTC(tmpTime[0],tmpTime[1],tmpTime[2],tmpTime[3],tmpTime[4]))).getTime();
  65. let dateEnd = (new Date(Date.UTC(arr[0], arr[1], arr[2], arr[3],arr[4]))).getTime();
  66. let dateDes = (dateEnd - dateBegin)/(24 * 3600 * 1000)
  67. if(dateEnd - dateBegin < 0){
  68. Notify.info("终止时间不能早于起始时间");
  69. return
  70. }else if(dateDes>90){
  71. Notify.info("只能搜索最近90天的数据");
  72. return
  73. }
  74. this.setState({
  75. show: false,
  76. startTime: time,//页面显示的时间
  77. timeLisStart: date//事件组件的日期
  78. })
  79. getStartTime(time)
  80. } else if (this.state.flg == 2) {
  81. let time = getCalendarDate(date);
  82. let tmpTime = time.replace(/ |:/g, '-').split('-');
  83. let arr = this.state.endTime.replace(/ |:/g, '-').split('-');
  84. let dateBegin = (new Date(Date.UTC(arr[0], arr[1], arr[2], arr[3],arr[4]))).getTime();
  85. let dateEnd = (new Date(Date.UTC(tmpTime[0],tmpTime[1],tmpTime[2],tmpTime[3],tmpTime[4]))).getTime();
  86. let dateDes = (dateEnd - dateBegin)/(24 * 3600 * 1000)
  87. if(dateEnd - dateBegin < 0){
  88. Notify.info("终止时间不能早于起始时间");
  89. return
  90. }else if(dateDes>90){
  91. Notify.info("只能搜索最近90天的数据");
  92. return
  93. }
  94. this.setState({
  95. show: false,
  96. endTime: time,
  97. timeLisEnd: date
  98. })
  99. getEndTime(time)
  100. }
  101. }
  102. handleShowTime(flg) {
  103. if (this.state.show) {
  104. if(flg == this.state.flg){
  105. this.setState({
  106. show: false,
  107. flg: flg
  108. })
  109. }else{
  110. this.setState({ show: false }, () => {
  111. this.setState({
  112. show: true,
  113. flg: flg
  114. })
  115. })
  116. }
  117. } else {
  118. this.setState({
  119. show: true,
  120. flg: flg
  121. })
  122. }
  123. }
  124. render() {
  125. const { startTime, endTime, show, timeLisStart, timeLisEnd, flg } = this.state
  126. const { handleShowTime, timeSure, handleChangeDate } = this
  127. return <div className={style.timeWrap}>
  128. <div className={style.timeIpts}>
  129. <input
  130. value={startTime}
  131. readOnly
  132. className={style.ipt}
  133. onClick={() => handleShowTime(1)}
  134. type="text"
  135. id="startTimeDes"
  136. placeholder="起始时间" />~
  137. <input
  138. value={endTime}
  139. readOnly
  140. id="endTimeDes"
  141. className={style.ipt}
  142. onClick={() => handleShowTime(2)}
  143. type="text"
  144. placeholder="终止时间" />
  145. </div>
  146. {
  147. show ? <Calendar timeLis={flg == 2 ? timeLisEnd : timeLisStart} top={40} sure={true} timeSure={timeSure} needTime={true} isShow={true} handleChange={handleChangeDate}></Calendar> : null
  148. }
  149. </div>
  150. }
  151. }
  152. export default TimeInterval;