Browse Source

ADD:修改了fork问题,以及report review问题,更改了编辑页样式

wjj 3 years ago
parent
commit
a622c67be0

+ 31 - 27
src/components/GlobalHeader/RightContent.jsx

@@ -22,31 +22,31 @@ const GlobalHeaderRight = (props) => {
     className = `${styles.right}  ${styles.dark}`;
   }
 
-  useEffect(()=>{
-    let token = window.location.search.split('token=') && window.location.search.split('token=')[1];
-    dispatch({
-      type: 'editReport/getIdByToken',
-      payload: {
-        token
-      }
-    }).then(res=>{
-      //{result: "fail", cause: "身份验证失败,请重新点击按钮进入答题页面"}
-      if(res.result === 'success'){
-        let idInfo = {
-          roleId:res.roleId,
-          caseId:res.caseId,
-          examId:res.examId,
-          userId:res.userId,
-          case_take_id:res.caseId + '-' + res.examId,
-        }
-        setIdInfo(idInfo);
-      }else{
-        //错误处理
-        message.error(res.cause);
-        console.log(res)
-      }
-    })
-  },[])
+  // useEffect(()=>{
+  //   let token = window.location.search.split('token=') && window.location.search.split('token=')[1];
+  //   dispatch({
+  //     type: 'editReport/getIdByToken',
+  //     payload: {
+  //       token
+  //     }
+  //   }).then(res=>{
+  //     //{result: "fail", cause: "身份验证失败,请重新点击按钮进入答题页面"}
+  //     if(res.result === 'success'){
+  //       let idInfo = {
+  //         roleId:res.roleId,
+  //         caseId:res.caseId,
+  //         examId:res.examId,
+  //         userId:res.userId,
+  //         case_take_id:res.caseId + '-' + res.examId,
+  //       }
+  //       setIdInfo(idInfo);
+  //     }else{
+  //       //错误处理
+  //       message.error(res.cause);
+  //       console.log(res)
+  //     }
+  //   })
+  // },[])
 
 
   useEffect(() => {
@@ -55,9 +55,13 @@ const GlobalHeaderRight = (props) => {
       dispatch({
         type: 'report/getTaskName',
         payload: { examId: idInfo.examId },
-      }, [dispatch, idInfo.examId]);
+      });
+      dispatch({
+        type: 'editReport/getOsType',
+        payload: { examId: idInfo.examId },
+      },[idInfo.examId])
     }
-  });
+  },[dispatch, idInfo.examId]);
 
   return (
     <div className={className}>

+ 21 - 6
src/pages/bugs/components/BugDetailModal/index.jsx

@@ -1,4 +1,4 @@
-import { Col, Image, Spin } from 'antd';
+import { Col, Image, Spin, Tooltip } from 'antd';
 import React, { useEffect, useState } from 'react';
 import { connect } from 'umi';
 import styles from './index.less';
@@ -10,7 +10,10 @@ import {
 import { recurrent, severity, bug_categories } from '@/pages/edit/components/Step2/const';
 
 const BugItemDetail = (props) => {
-  const { bugItemDetail, dispatch,reportCommonInfo } = props;
+  const {
+    bugItemDetail, dispatch, reportCommonInfo, commonId,
+    getReportReview,
+  } = props;
   const [detail, setDetail] = useState({});
   const [operator, setOperator] = useState(-1);
 
@@ -41,9 +44,11 @@ const BugItemDetail = (props) => {
           payload: {
             id: detail.id,//被点赞的报告的id
             report_id: reportCommonInfo.id,
-            user_id: 2,
+            user_id: commonId.userId,
             action: 'like',
           },
+        }).then(() => {
+          getReportReview();
         });
       } else {
         dispatch({
@@ -51,9 +56,11 @@ const BugItemDetail = (props) => {
           payload: {
             id: detail.id,//被点赞的报告的id
             report_id: reportCommonInfo.id,
-            user_id: 2,
+            user_id: commonId.userId,
             action: 'dislike',
           },
+        }).then(() => {
+          getReportReview();
         });
       }
     } else {
@@ -67,6 +74,8 @@ const BugItemDetail = (props) => {
             id: detail.id,//被点赞的报告的id
             report_id: reportCommonInfo.id,
           },
+        }).then(_ => {
+          getReportReview();
         });
       } else {
         dispatch({
@@ -75,6 +84,8 @@ const BugItemDetail = (props) => {
             id: detail.id,//被点赞的报告的id
             report_id: reportCommonInfo.id,
           },
+        }).then(_ => {
+          getReportReview();
         });
       }
     }
@@ -96,14 +107,17 @@ const BugItemDetail = (props) => {
       }
       setDetail(detail);
     }
-
   }, [bugItemDetail]);
 
   return (
     detail && detail.id ?
       <div className={styles.bugItemDetail}>
         <div className={styles.detailItem}>
-          <span className={styles.detailLabel}>Bug标识:</span>{detail && detail.id || ''}
+          <Tooltip title={detail.id}>
+            <span className={styles.testBugItemTitleDetail}>
+              <span className={styles.detailLabel}>Bug标识:</span>{detail && detail.id || ''}</span>
+          </Tooltip>
+          {/*<span className={styles.detailLabel}>Bug标识:</span>{detail && detail.id || ''}*/}
         </div>
         <div className={styles.detailItem}><span
           className={styles.detailLabel}>Bug题目:</span>{detail && detail.title || ''}
@@ -157,4 +171,5 @@ const BugItemDetail = (props) => {
 export default connect(({ allBugs, editReport }) => ({
   bugItemDetail: allBugs.bugItemDetail,
   reportCommonInfo: editReport.reportCommonInfo,
+  commonId: editReport.commonId,
 }))(BugItemDetail);

+ 8 - 0
src/pages/bugs/components/BugDetailModal/index.less

@@ -17,6 +17,14 @@
     .backIcon {
       float: right;
     }
+    .testBugItemTitleDetail {
+      //display: inline-block;
+      line-height: 22px;
+      margin-right: 30px;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+    }
   }
   .detailItemOperator {
     height: auto;

+ 3 - 1
src/pages/bugs/components/BugSingleList/index.jsx

@@ -48,7 +48,9 @@ const BugSingleList = (props) => {
         case_take_id:`${commonId.caseId}-${commonId.examId}`,
         start:10*(currPage-1),
         count:"10",
-        page
+        page,
+        condition:null,
+        roleId:commonId.roleId
       }
     })
   }

+ 1 - 1
src/pages/bugs/components/BugSingleList/index.less

@@ -6,7 +6,7 @@
     border: 1px dashed #1890ff;
     border-bottom: none;
     border-radius: 7px;
-    max-width: 350px;
+    max-width: 80%;
     display: flex;
     height: 60px;
     line-height: 40px;

+ 1 - 0
src/pages/bugs/components/BugTreeList/index.jsx

@@ -50,6 +50,7 @@ const BugTreeList = (props) => {
         start: 10*(currPage-1),
         count: '10',
         page,
+        roleId:commonId.roleId
       },
     });
   }

+ 1 - 1
src/pages/bugs/components/BugTreeList/index.less

@@ -6,7 +6,7 @@
     border: 1px dashed #1890ff;
     border-bottom: none;
     border-radius: 7px;
-    max-width: 350px;
+    max-width: 80%;
     display: flex;
     .bugListItemNum {
       font-weight: bold;

+ 9 - 6
src/pages/bugs/index.jsx

@@ -27,6 +27,10 @@ const AllBugs = (props) => {
   const [page, setPage] = useState('null');
 
   const onChange = e => {
+    dispatch({
+      type:'allBugs/saveBugItemDetail',
+      payload:{}
+    })
     setStatus(e.target.value);
     setPage('null');
   };
@@ -151,16 +155,15 @@ const AllBugs = (props) => {
           </Col>
         </Row>
         <Row>
-          <Col span={8}>
+          <Col span={status === 'tree' ? 8 : 11}>
             {status === 'tree' ? <BugTreeList page={page} /> : <BugSingleList page={page} />}
-
           </Col>
-          <Col span={8}>
-            <BugTreeGraph/>
+          <Col span={status === 'tree' ? 8 : 2}>
+            {status === 'tree' ? <BugTreeGraph  /> : null}
           </Col>
-          <Col span={8}>
+          <Col span={status === 'tree' ? 8 : 11}>
             <div className={styles.bugDetail}>
-              <BugDetailModal />
+              <BugDetailModal getReportReview={getReportReview}/>
             </div>
           </Col>
         </Row>

+ 4 - 5
src/pages/bugs/model.js

@@ -27,8 +27,8 @@ const Model = {
 
     //todo:获取bug树状列表
     * getTreeList({ payload }, { call, put }) {
-      const {case_take_id,start,count,page} = payload;
-      let res = yield call(getTreeList, case_take_id,start,count,page);
+      const {case_take_id,start,count,page,roleId} = payload;
+      let res = yield call(getTreeList, case_take_id,start,count,page,roleId);
       yield put({
         type: 'saveBugTreeList',
         payload: res,
@@ -37,9 +37,8 @@ const Model = {
 
     //todo:获取bug单一状列表
     * getSingleList({ payload }, { call, put }) {
-      const {case_take_id,start,count,page} = payload;
-      let res = yield call(getSingleList, case_take_id,start,count,page);
-
+      const {case_take_id,start,count,page,roleId} = payload;
+      let res = yield call(getSingleList, case_take_id,start,count,page,roleId);
       yield put({
         type: 'saveBugSingleList',
         payload: res,

+ 7 - 5
src/pages/bugs/service.js

@@ -12,27 +12,29 @@ export async function getReportReview(report_id,case_take_id) {
 }
 
 // todo:获取树状列表
-export async function getTreeList(case_take_id,start,count,page) {
-  return request('/Bug/api/history/getTreesStu', {
+export async function getTreeList(case_take_id,start,count,page,roleId) {
+  return request('/Bug/api/history/getTreeData', {
     method: 'get',
     params: {
       case_take_id,
       start,
       count,
-      page
+      page,
+      roleId
     }
   });
 }
 
 // todo:获取单一状列表
-export async function getSingleList(case_take_id,start,count,page) {
+export async function getSingleList(case_take_id,start,count,page,roleId) {
   return request('/Bug/api/history/getSingleStu', {
     method: 'get',
     params: {
       case_take_id,
       start,
       count,
-      page
+      page,
+      roleId
     }
   });
 }

+ 46 - 22
src/pages/edit/components/Step2/index.jsx

@@ -1,5 +1,5 @@
 import React, { useEffect, useRef, useState } from 'react';
-import { Form, Row, Col, Card, Modal, Input, Select, Upload, Button, message, Tag, Badge, Image } from 'antd';
+import { Form, Row, Col, Card, Modal, Input, Select, Upload, Button, message, Tag, Tooltip, Image } from 'antd';
 import { connect } from 'umi';
 import styles from './index.less';
 import {
@@ -72,6 +72,10 @@ const Step2 = (props) => {
   const [page3List, setPage3List] = useState([]);
   const [bugList, setBugList] = useState([]);
 
+  const forkStatus = useRef(false);
+  const currForkId = useRef('');
+  const forkInput = useRef('');
+
   const handleEditReportInfo = () => {
     editReportForm.validateFields().then((res) => {
       let formData = new FormData();
@@ -145,7 +149,7 @@ const Step2 = (props) => {
       formData.append('bug_category', res.bug_category);
       formData.append('severity', res.severity);
       formData.append('recurrent', res.recurrent);
-      formData.append('parent', null);
+      formData.append('parent', forkStatus.current?currForkId.current+'-2':null);
       formData.append('useCase', currentTestCaseRef.current.id);
       formData.append('case_id', commonId.caseId);
       formData.append('case_take_id', commonId.case_take_id);
@@ -196,6 +200,7 @@ const Step2 = (props) => {
   const handleClickAddBug = () => {
     //current目前只在点击edit cease的时候会有用
     addBugForm.resetFields();
+    forkInput.current.state.value = '';
     setAddTestBugModal(true);
   };
 
@@ -225,15 +230,26 @@ const Step2 = (props) => {
   };
 
   const handleSelectPage1 = (val) => {
-    let item = categories.find(x => x.item === val);
-    setPage2List(item.children);
+    if (val !== page1) {
+      addBugForm.setFieldsValue({page1:val,page2:'',page3:''})
+      let item = categories.find(x => x.item === val);
+      setPage2List(item.children);
+    }
   };
 
   const handleSelectPage2 = (val) => {
-    let item = page2List.find(x => x.item === val);
-    setPage3List(item.children);
+    if (val !== page2) {
+      addBugForm.setFieldsValue({page2:val,page3:''})
+      let item = page2List.find(x => x.item === val);
+      setPage3List(item.children);
+    }
   };
 
+  // const handlePage3Change = val => {
+  //   // setPage3(val);
+  // };
+
+
   const handlePreview = async file => {
     if (!file.url && !file.preview) {
       file.preview = await getBase64(file.originFileObj);
@@ -269,7 +285,9 @@ const Step2 = (props) => {
     setBugList(newList);
   };
 
-  const searchBugToFork = value=>{
+  const searchBugToFork = value =>{
+    forkStatus.current = true;
+    currForkId.current = value;
     dispatch({
       type: 'editReport/getBugDetail',
       payload: { id: value},
@@ -428,11 +446,13 @@ const Step2 = (props) => {
                       <Row gutter={10}>
                         <Col span={6}>
                           {<span
-                            className={styles.testCaseItemNo}>{`编号.${((item.id).substring((item.id.length) - 6)).toUpperCase()}`}</span>}
-                        </Col>
-                        <Col span={15}>
-                          <span>{item.name}</span>
+                            className={`${styles.testCaseItemNo} ${styles.testCaseItemTitle}`}>{`编号.${((item.id).substring((item.id.length) - 6)).toUpperCase()}`}</span>}
                         </Col>
+                          <Col span={15} className={styles.testCaseItemTitle}>
+                            <Tooltip title={item.name}>
+                              {item.name}
+                            </Tooltip>
+                          </Col>
                         <Col span={3}>
                           <EditOutlined className={styles.editTestBug}
                                         onClick={() => handleEditTestCase(item)} />
@@ -475,8 +495,9 @@ const Step2 = (props) => {
                         <Col span={12}>
                           <div>
                             <div className={styles.testBugItemTitleBlock}>
-                              <span className={styles.testBugItemTitle}>标题:</span>
-                              <span className={styles.testBugItemTitleDetail}>{item.title}</span>
+                              <Tooltip title={item.title}>
+                                <span className={styles.testBugItemTitleDetail}>标题:{item.title}</span>
+                              </Tooltip>
                             </div>
                             <div className={styles.testBugItemTitleBlock}>
                               <span className={styles.testBugItemTitle}>特征:</span>
@@ -493,8 +514,9 @@ const Step2 = (props) => {
                               {item.bug_page}
                             </div>
                             <div className={styles.testBugItemTitleBlock}>
-                              <span className={styles.testBugItemTitle}>描述:</span>
-                              {item.description}
+                              <Tooltip title={item.description}>
+                                <span className={styles.testBugItemDesc}>描述:{item.description}</span>
+                              </Tooltip>
                             </div>
                           </div>
                         </Col>
@@ -609,6 +631,7 @@ const Step2 = (props) => {
                  onSearch={searchBugToFork}
                  className={styles.forkBtn}
                  key="search"
+                 ref={forkInput}
                />
              ]}
              footer={[
@@ -616,13 +639,14 @@ const Step2 = (props) => {
                <Button key='cancel' htmlType="button" style={{ marginLeft: '10px' }}
                        onClick={() => {
                          setAddTestBugModal(false);
-                       }}>取消</Button>]}
+                         forkInput.current.state.value = '';
+                       }}>取消</Button>]}s
              onCancel={() => {
                setAddTestBugModal(false);
              }}
              className={styles.bugForm}
       >
-        <ExclamationCircleFilled className={styles.addModalInfo} />为了评分准确,请勿提交重复Bug
+        <ExclamationCircleFilled className={styles.addModalInfo} />为了评分准确,请勿提交重复缺陷Bug
         <Form
           form={addBugForm}
           {...modalFormItemLayout}
@@ -630,7 +654,7 @@ const Step2 = (props) => {
           className={styles.stepForm}
         >
           <Form.Item
-            label="测试标题"
+            label="缺陷标题"
             name="title"
             rules={[
               {
@@ -642,7 +666,7 @@ const Step2 = (props) => {
             <Input.TextArea autoSize={{ minRows: 1, maxRows: 999 }} />
           </Form.Item>
           <Form.Item
-            label="题目描述"
+            label="缺陷描述"
             name="description"
             rules={[
               {
@@ -668,7 +692,7 @@ const Step2 = (props) => {
                     },
                   ]}
                 >
-                  <Select onSelect={(val) => {
+                  <Select value={addBugForm.getFieldValue('page1')} onSelect={(val) => {
                     handleSelectPage1(val);
                   }}>
                     {categories.map((item) => {
@@ -688,7 +712,7 @@ const Step2 = (props) => {
                     },
                   ]}
                 >
-                    <Select
+                    <Select value={addBugForm.getFieldValue('page2')}
                       disabled={!page2List.length&& !addBugForm.getFieldValue('page2')}
                           onSelect={(val) => {
                             handleSelectPage2(val);
@@ -709,7 +733,7 @@ const Step2 = (props) => {
                     },
                   ]}
                   >
-                  <Select disabled={!page3List.length&& !addBugForm.getFieldValue('page3')}>
+                  <Select value={addBugForm.getFieldValue('page3')} disabled={!page3List.length&& !addBugForm.getFieldValue('page3')}>
                     {page3List.map((item) => {
                       return <Select.Option value={item.item} key={item.item}>{item.item}</Select.Option>;
                     })}

+ 21 - 1
src/pages/edit/components/Step2/index.less

@@ -90,6 +90,12 @@
       color:#aaaaaa;
       font-size: 8px;
     }
+    .testCaseItemTitle {
+      width:100%;
+      overflow:hidden; //超出的文本隐藏
+      text-overflow:ellipsis; //溢出用省略号显示
+      white-space:nowrap; //溢出不换行
+    }
     .editTestBug{
       cursor: pointer;
     }
@@ -128,14 +134,28 @@
     box-shadow: 0 0 5px #aaa;;
     margin-bottom:20px;
     .testBugItemTitleBlock{
+      display: flex;
+      margin:5px 10px 10px 10px;
       .testBugItemTitle {
         display: inline-block;
-        margin:5px 10px 10px 10px;
         line-height: 22px;
       }
       .testBugItemTitleDetail {
         display: inline-block;
+        line-height: 22px;
         margin-right: 30px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+      }
+      .testBugItemDesc {
+        overflow: hidden;
+        display: inline-block;
+        text-overflow: ellipsis;
+        display: -webkit-box;// 设置为弹性盒?(后续会专门写一篇文章介绍)有兼容性问题
+        -webkit-line-clamp: 2;// 在一个块元素内显示的文本行数
+        line-clamp: 2;
+        -webkit-box-orient: vertical;
       }
     }
     .bugImgList {

+ 22 - 10
src/pages/edit/model.js

@@ -20,7 +20,9 @@ import {
   recordAction,
   uploadImage,
   getIdByToken,
-  forkReport
+  forkReport,
+  recordGoodReport,
+  recordBadReport
 } from './service';
 
 const Model = {
@@ -44,14 +46,14 @@ const Model = {
     recommendPath: [],
     bugRecommendList: [],
     commonId:{
-      // result:"success",
-      // roleId:1,
-      // caseId:"1718",
-      // examId:"1718",
-      // beginTime:"1621945823000",
-      // endTime:"1624291200000",
-      // userId:"99222",
-      // case_take_id:"1718_1718",
+      result:"success",
+      roleId:1,
+      caseId:"1718",
+      examId:"1718",
+      beginTime:"1621945823000",
+      endTime:"1624291200000",
+      userId:"99222",
+      case_take_id:"1718_1718",
     },
   },
   effects: {
@@ -80,7 +82,7 @@ const Model = {
     * getIdByToken({ payload }, { call, put }) {
       const { token } = payload;
       let res = yield call(getIdByToken, token)
-      res['case_take_id'] = res['caseId'] + '_' + res['examId'];
+      res['case_take_id'] = res['caseId'] + '-' + res['examId'];
       yield put({
         type: 'saveCommonId',
         payload: res,
@@ -280,6 +282,16 @@ const Model = {
       const { page1, page2, page3, bug_category, severity, recurrent } = payload;
       yield call(forkReport, page1, page2, page3, bug_category, severity, recurrent);
     },
+    //todo:记录点赞行为
+    * recordGoodReport({ payload }, { call, put }) {
+      const { user_id, target_id,action } = payload;
+      yield call(recordGoodReport, user_id, target_id,action);
+    },
+    //todo:记录点踩行为
+    * recordBadReport({ payload }, { call, put }) {
+      const { user_id, target_id,action } = payload;
+      yield call(recordBadReport, user_id, target_id,action);
+    },
   },
   reducers: {
     saveCurrentStep(state, { payload }) {

+ 20 - 8
src/pages/edit/service.js

@@ -42,7 +42,6 @@ export async function getReportInfo(case_take_id, worker_id) {
   });
 }
 
-
 // todo:点击下一步,提交测试报告的基础信息
 export async function createReportCommon(data) {
   return request('/Bug/api/extra/uploadReport', {
@@ -60,7 +59,6 @@ export async function createTestCase(data) {
 }
 
 // todo:获取测试用例列表
-// eslint-disable-next-line camelcase
 export async function getTestCaseList(report_id) {
   return request('/Bug/api/extra/getCaseList', {
     method: 'get',
@@ -78,7 +76,6 @@ export async function updateTestCaseList(data) {
   });
 }
 
-
 // todo:根据用例ID获取测试bug列表
 export async function getCaseBugList(useCase) {
   return request(`/Bug/api/relation/CTB?useCase=${useCase}`, {
@@ -94,7 +91,6 @@ export async function getBugInfo(bugId) {
 }
 
 // todo:返回路径信息
-// eslint-disable-next-line camelcase
 export async function getPathInfo(case_take_id, report_id) {
   return request('/Bug/api/analyze/path', {
     method: 'get',
@@ -106,7 +102,6 @@ export async function getPathInfo(case_take_id, report_id) {
 }
 
 // todo:返回推荐路径
-// eslint-disable-next-line camelcase
 export async function getRecommendPath(case_take_id, report_id) {
   return request('/Bug/api/report/pageRec', {
     method: 'get',
@@ -118,7 +113,6 @@ export async function getRecommendPath(case_take_id, report_id) {
 }
 
 // todo:获取bug推荐列表
-// eslint-disable-next-line camelcase
 export async function getRecommendList(case_take_id, report_id) {
   return request('/Bug/api/report/bugRec', {
     method: 'get',
@@ -161,8 +155,17 @@ export async function cancelGoodReport(id, report_id) {
   });
 }
 
+// todo:记录报告点踩行为
+export async function recordGoodReport(user_id, target_id,action) {
+  return request('/Bug/api/report/record', {
+    method: 'get',
+    params: {
+      user_id, target_id,action
+    },
+  });
+}
+
 // todo:报告点踩
-// eslint-disable-next-line camelcase
 export async function badReport(id, report_id) {
   return request('/Bug/api/upload/bad', {
     method: 'get',
@@ -173,6 +176,16 @@ export async function badReport(id, report_id) {
   });
 }
 
+// todo:记录报告点踩行为
+export async function recordBadReport(user_id, target_id,action) {
+  return request('/Bug/api/report/record', {
+    method: 'get',
+    params: {
+      user_id, target_id,action
+    },
+  });
+}
+
 // todo:取消报告点踩
 // eslint-disable-next-line camelcase
 export async function cancelBadReport(id, report_id) {
@@ -186,7 +199,6 @@ export async function cancelBadReport(id, report_id) {
 }
 
 // todo:记录用户行为
-// eslint-disable-next-line camelcase
 export async function recordAction(user_id, report_id, action) {
   return request('/Bug/api/report/record', {
     method: 'get',