index.jsx 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. import { Col, Image, Spin } from 'antd';
  2. import React, { useEffect, useState } from 'react';
  3. import { connect } from 'umi';
  4. import styles from './index.less';
  5. import { timeToString } from '@/utils/common';
  6. import {
  7. DislikeOutlined, LeftOutlined,
  8. LikeOutlined, RightOutlined,
  9. } from '@ant-design/icons';
  10. import { recurrent, severity, bug_categories } from '@/pages/edit/components/Step2/const';
  11. const BugItemDetail = (props) => {
  12. const { bugItemDetail, dispatch,reportCommonInfo } = props;
  13. const [detail, setDetail] = useState({});
  14. const [operator, setOperator] = useState(-1);
  15. const handleChangeImgToLeft = () => {
  16. let newDetail = { ...detail };
  17. newDetail.left--;
  18. newDetail.right--;
  19. newDetail['imgArr'] = newDetail['originArr'].slice(newDetail['left'], newDetail['right']);
  20. setDetail(newDetail);
  21. };
  22. const handleChangeImgToRight = () => {
  23. let newDetail = { ...detail };
  24. newDetail.left++;
  25. newDetail.right++;
  26. newDetail['imgArr'] = newDetail['originArr'].slice(newDetail['left'], newDetail['right']);
  27. setDetail(newDetail);
  28. };
  29. const handleOperateIcon = (type) => {
  30. if (operator === -1) {
  31. //这里的操作是点赞点踩操作
  32. setOperator(type);
  33. if (type) {
  34. //type===1表示点赞
  35. dispatch({
  36. type: 'editReport/goodForReport',
  37. payload: {
  38. id: detail.id,//被点赞的报告的id
  39. report_id: reportCommonInfo.id,
  40. user_id: 2,
  41. action: 'like',
  42. },
  43. });
  44. } else {
  45. dispatch({
  46. type: 'editReport/badForReport',
  47. payload: {
  48. id: detail.id,//被点赞的报告的id
  49. report_id: reportCommonInfo.id,
  50. user_id: 2,
  51. action: 'dislike',
  52. },
  53. });
  54. }
  55. } else {
  56. //这里的操作是取消点赞点踩操作
  57. setOperator(-1);
  58. if (type) {
  59. //type===1表示点赞
  60. dispatch({
  61. type: 'editReport/cancelGoodForReport',
  62. payload: {
  63. id: detail.id,//被点赞的报告的id
  64. report_id: reportCommonInfo.id,
  65. },
  66. });
  67. } else {
  68. dispatch({
  69. type: 'editReport/cancelBadForReport',
  70. payload: {
  71. id: detail.id,//被点赞的报告的id
  72. report_id: reportCommonInfo.id,
  73. },
  74. });
  75. }
  76. }
  77. };
  78. useEffect(() => {
  79. if (JSON.stringify(bugItemDetail) !== '{}') {
  80. console.log(bugItemDetail);
  81. let { detail } = bugItemDetail;
  82. detail['originArr'] = detail.img_url ? detail.img_url.split(',') : [];
  83. if (detail['originArr'].length >= 3) {
  84. //通过更改左右的标记值来更改显示的图片
  85. detail['left'] = 0;
  86. detail['right'] = 3;
  87. detail['imgArr'] = detail['originArr'].slice(detail['left'], detail['right']);
  88. } else if (detail['originArr'].length > 0 && detail['originArr'].length < 3) {
  89. detail['imgArr'] = detail['originArr'];
  90. detail['left'] = 0;
  91. detail['right'] = detail['originArr'].length;
  92. }
  93. setDetail(detail);
  94. }
  95. }, [bugItemDetail]);
  96. return (
  97. detail && detail.id ?
  98. <div className={styles.bugItemDetail}>
  99. <div className={styles.detailItem}>
  100. <span className={styles.detailLabel}>Bug标识:</span>{detail && detail.id || ''}
  101. </div>
  102. <div className={styles.detailItem}><span
  103. className={styles.detailLabel}>Bug题目:</span>{detail && detail.title || ''}
  104. </div>
  105. <div className={styles.detailItem}><span
  106. className={styles.detailLabel}>Bug描述:</span>{detail && detail.description}</div>
  107. <div className={styles.detailItem}><span
  108. className={styles.detailLabel}>创建时间:</span>{timeToString(detail.create_time_millis)}</div>
  109. <div className={styles.detailItem}><span className={styles.detailLabel}>页面路径:</span>{detail.bug_page}
  110. </div>
  111. <div className={styles.detailItem}><span
  112. className={styles.detailLabel}>漏洞分类:</span>{detail.bug_category}</div>
  113. <div className={styles.detailItem}><span
  114. className={styles.detailLabel}>严重等级:</span>{severity[detail.severity - 1]}</div>
  115. <div className={styles.detailItem}><span
  116. className={styles.detailLabel}>复现程度:</span>{recurrent[detail.recurrent - 1]}</div>
  117. {
  118. detail && detail.img_url ? (
  119. <div className={`${styles.detailItem} ${styles.detailItemOperator}`}><span
  120. className={styles.detailLabel}>Bug截图:</span>
  121. <div span={12} className={styles.bugImgList}>
  122. {detail.left > 0 ? <LeftOutlined
  123. onClick={handleChangeImgToLeft} /> :
  124. <div className={styles.switchImgBtn}></div>}
  125. {detail.imgArr.map(img => {
  126. return <Image src={img} key={img} />;
  127. })}
  128. {detail.right < (detail.originArr.length - 1) ?
  129. <RightOutlined onClick={handleChangeImgToRight} /> :
  130. <div className={styles.switchImgBtn}></div>}
  131. </div>
  132. </div>)
  133. : null
  134. }
  135. <div className={`${styles.detailItem} ${styles.detailItemOperator}`}><span
  136. className={styles.detailLabel}>Bug评价:</span>
  137. {operator !== 0 ?
  138. <LikeOutlined className={`${styles.operatorIcon} ${operator === 1 ? styles.operatorIconActive : ''}`}
  139. onClick={() => handleOperateIcon(1)} /> : null}
  140. {operator !== 1 ?
  141. <DislikeOutlined className={`${styles.operatorIcon} ${operator === 0 ? styles.operatorIconActive : ''}`}
  142. onClick={() => handleOperateIcon(0)} /> : null}
  143. </div>
  144. </div> : <Spin />
  145. );
  146. };
  147. export default connect(({ allBugs, editReport }) => ({
  148. bugItemDetail: allBugs.bugItemDetail,
  149. reportCommonInfo: editReport.reportCommonInfo,
  150. }))(BugItemDetail);