Browse Source

ADD:fix buglist bug

wjj 4 years ago
parent
commit
8eb8d3ffe8

+ 2 - 4
src/pages/edit/components/Step2/const.js

@@ -1,5 +1,3 @@
-export const recurrent = new Map([[0,''],[1,'其他'],[2,'无规律复现'],
-  [3,'小概率复现'],[4,'大概率复现'],[5,'必现']]);
-export const severity = new Map([[0,''],[1,'待定'],[2,'较轻'],
-  [3,'一般'],[4,'严重'],[5,'紧急']]);
+export const recurrent = ['','其他','无规律复现', '小概率复现','大概率复现','必现'];
+export const severity = ['','待定','较轻','一般','严重','紧急'];
 export const bug_categories = ['不正常退出','功能不完整','用户体验','页面布局缺陷','性能','安全','其他']

+ 149 - 94
src/pages/edit/components/Step2/index.jsx

@@ -23,18 +23,19 @@ const formItemLayout = {
 };
 
 const Step2 = (props) => {
-  const [form] = Form.useForm();
+  const [reportForm] = Form.useForm();
   const [addCaseForm] = Form.useForm();
   const [addBugForm] = Form.useForm();
-  const { data, dispatch, reportCommonInfo, testCaseList, caseBugList,categories } = props;
+  const { data, dispatch, reportCommonInfo, testCaseList, caseBugList, categories } = props;
 
   const [showTaskRecommendModal, setTaskRecommendModal] = useState(false);
   const [showAddTestCaseModal, setAddTestCaseModal] = useState(false);
   const [showAddBugModal, setAddTestBugModal] = useState(false);
   const currentTestCaseRef = useRef({});
   const [isAddCaseStatus, setIsAddCaseStatus] = useState(true);
-  const [currActiveTestCase, setCurrActiveTestCase] = useState({});
-
+  // const [currActiveTestCase, setCurrActiveTestCase] = useState({});
+  const [page2List, setPage2List] = useState([]);
+  const [page3List, setPage3List] = useState([]);
 
   if (!data) {
     return null;
@@ -48,7 +49,7 @@ const Step2 = (props) => {
       formData.append('name', res.name);
       formData.append('front', res.front);
       formData.append('behind', res.behind);
-      formData.append('description', res.description);
+      formData.append('description', res.result);
       if (!isAddCaseStatus) {
         //处理编辑用例
         formData.append('id', currentTestCaseRef.current.id);
@@ -77,44 +78,46 @@ const Step2 = (props) => {
           }
         });
       }
-
       setAddTestCaseModal(false);
     });
   };
 
   const handleAddBug = () => {
     addBugForm.validateFields().then((res) => {
-      console.log(res);
       let formData = new FormData();
       formData.append('report_id', reportCommonInfo.id);
-      formData.append('name', res.name);
-      formData.append('front', res.front);
-      formData.append('behind', res.behind);
+      formData.append('title', res.title);
       formData.append('description', res.description);
+      formData.append('bug_category', res.bug_category);
+      formData.append('severity', res.severity);
+      formData.append('recurrent', res.recurrent);
+      formData.append('parent', null);
+      formData.append('useCase', currentTestCaseRef.current.id);
+      formData.append('case_id', '1718');
+      formData.append('case_take_id', '1718-1718');
+      formData.append('worker_id', '1');
+      formData.append('page', `${res.page1}-${res.page2}-${res.page3}`);
+      //新建bug
+      dispatch({
+        type:'editReport/createCaseBug',
+        payload: {
+          formData,
+          useCase:currentTestCaseRef.current.id
+        }
+      }).then(res=>{
+        console.log(res.status)
+      })
     });
-    // if (true) {
-    //   //新建bug的逻辑
-    //   setAddTestBugModal(true);
-      // dispatch({
-      //   type: 'editReport/createTestCase',
-      //   payload: {
-      //     report_id:reportCommonInfo.id
-      //   },
-      // }).then((res)=>{
-      //   if(res&&res.id){
-      //     message.success('添加成功!');
-      //   }
-      // });
-    // } else {
-    //   //编辑bug的逻辑
-    // }
   };
 
   const handleClickTestCase = (caseItem) => {
-    setCurrActiveTestCase(caseItem);
+    // setCurrActiveTestCase(caseItem);
+    currentTestCaseRef.current = caseItem;
     dispatch({
       type: 'editReport/getCaseBugList',
       payload: caseItem.id,
+    }).then(res=>{
+      res.map(item=>console.log(item))
     });
   };
 
@@ -126,23 +129,26 @@ const Step2 = (props) => {
   };
 
   const handleClickAddCase = () => {
-    currentTestCaseRef.current = {};
     addCaseForm.resetFields();
     setAddTestCaseModal(true);
   };
 
-  // const handleEditBug = (item) => {
-  //   setIsAddCaseStatus(false);
-  //   currentTestCaseRef.current = item;
-  //   addBugForm.setFieldsValue(currentTestCaseRef.current)
-  //   setAddTestCaseModal(true);
-  // };
-
   const handleClickAddBug = () => {
+    //current目前只在点击edit cease的时候会有用
     addBugForm.resetFields();
     setAddTestBugModal(true);
   };
 
+  const handleSelectPage1 = (val) =>{
+    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)
+  }
+
   useEffect(() => {
     //判断是否已经有报告
     dispatch({
@@ -151,24 +157,29 @@ const Step2 = (props) => {
         case_take_id: '1718-1718',
         worker_id: 1,
       },
-    }).then(() => {
+    }).then((res) => {
+      // console.log(res)
+      // console.log(reportCommonInfo)
       //有报告,获取对应信息。没有就直接转去了第一步
       dispatch({
         type: 'editReport/getTestCaseList',
         payload: { report_id: reportCommonInfo.id },
+      }).then((res)=>{
+        currentTestCaseRef.current = res;
+        // setCurrActiveTestCase(res);
       });
       dispatch({
         type: 'editReport/getCategories',
         payload: { examId: 1945 },
       });
     });
-  }, [dispatch]);
+  }, [dispatch,reportCommonInfo.id]);
 
   return (
     <div>
       <Form
         {...formItemLayout}
-        form={form}
+        form={reportForm}
         layout="horizontal"
         className={styles.stepForm}
         hideRequiredMark
@@ -224,7 +235,7 @@ const Step2 = (props) => {
                 {testCaseList && testCaseList.map((item) => {
                   return (
                     <div
-                      className={`${styles.testCaseItem} ${currActiveTestCase.id === item.id ? styles.activeCase : ''}`}
+                      className={`${styles.testCaseItem} ${currentTestCaseRef.current.id === item.id ? styles.activeCase : ''}`}
                       key={item.id}
                       onClick={() => {
                         handleClickTestCase(item);
@@ -258,22 +269,27 @@ const Step2 = (props) => {
                 </Col>
               </Row>
               <div className={styles.testBugList}>
-                {caseBugList.map((item) => {
+                {/*{console.log(props)}*/}
+                {/*{console.log(props.caseBugList)}*/}
+                {/*{console.log(props.caseBugList.length)}*/}
+                {caseBugList && caseBugList.map((item) => {
                   return (
                     <div className={styles.testBugItem} key={item.detail.id}>
                       <Row gutter={10}>
-                      <Col span={20}>
-                        <div><span className={styles.bugItemTitle}>Bug标题:</span>{item.detail.title}</div>
-                        <div><span className={styles.bugItemTitle}>复现程度:</span>{recurrent.get(item.detail.recurrent)}</div>
-                        <div><span className={styles.bugItemTitle}>严重程度:</span>{item.detail.severity}</div>
-                        <div><span className={styles.bugItemTitle}>缺陷分类:</span>{severity.get(item.detail.bug_category)}
-                        </div>
-                      </Col>
-                      <Col span={4}>
-                        <Button size='small' style={{ marginTop: 10 }}>
-                          <EyeOutlined />详情</Button>
-                      </Col>
-                    </Row>
+                        <Col span={20}>
+                          <div><span className={styles.bugItemTitle}>Bug标题:</span>{item.detail.title}</div>
+                          <div><span className={styles.bugItemTitle}>复现程度:</span>{recurrent[item.detail.recurrent]}
+                          </div>
+                          <div><span className={styles.bugItemTitle}>严重程度:</span>{item.detail.severity}</div>
+                          <div><span
+                            className={styles.bugItemTitle}>缺陷分类:</span>{severity[item.detail.bug_category]}
+                          </div>
+                        </Col>
+                        <Col span={4}>
+                          <Button size='small' style={{ marginTop: 10 }}>
+                            <EyeOutlined />详情</Button>
+                        </Col>
+                      </Row>
                     </div>
                   );
                 })}
@@ -342,7 +358,7 @@ const Step2 = (props) => {
           </Form.Item>
           <Form.Item
             label="预期结果"
-            name="description"
+            name="result"
             rules={[
               {
                 required: true,
@@ -356,102 +372,139 @@ const Step2 = (props) => {
       </Modal>
 
       <Modal title="添加用例缺陷" visible={showAddBugModal} width={720}
+             forceRender={true}
              footer={[
-               <Button key='submit' type="primary" htmlType="submit" onClick={handleClickAddBug}>确定</Button>,
+               <Button key='submit' type="primary" htmlType="submit" onClick={handleAddBug}>确定</Button>,
                <Button key='cancel' htmlType="button" style={{ marginLeft: '10px' }}
-                       onClick={() => { handleAddBug();}}>取消</Button>]}
-               onCancel={() => {
-                 setAddTestBugModal(false);
-               }}
+                       onClick={() => {
+                         setAddTestBugModal(false);
+                       }}>取消</Button>]}
+             onCancel={() => {
+               setAddTestBugModal(false);
+             }}
+             className={styles.bugForm}
       >
         <ExclamationCircleFilled className={styles.addModalInfo} />为了评分准确,请勿提交重复Bug
         <Form
-          labelCol={{ span: 4 }}
           form={addBugForm}
           {...formItemLayout}
           layout="horizontal"
           className={styles.stepForm}
         >
           <Form.Item
-            label="测试题"
-            name="testName"
+            label="测试题"
+            name="title"
             rules={[
               {
                 required: true,
-                message: '请输入测试题!',
+                message: '请输入测试题!',
               },
             ]}
           >
-            <Input />
+            <Input.TextArea autoSize={{ minRows: 1, maxRows: 999 }} />
           </Form.Item>
           <Form.Item
-            label="前置条件"
-            name="precondition"
+            label="题目描述"
+            name="description"
             rules={[
               {
                 required: true,
-                message: '请输入前置条件!',
+                message: '请输入题目描述!',
               },
             ]}
           >
-            <Input.TextArea autoSize />
+            <Input.TextArea autoSize={{ minRows: 2, maxRows: 999 }} />
           </Form.Item>
           <Form.Item
             label="三级页面"
             name="pages"
-            rules={[
-              {
-                required: true,
-                message: '请确保输入了三级页面',
-              },
-            ]}
           >
-            <Row gutter={5}>
+            <Row gutter={5} className={styles.pageSelect}>
               <Col span={8}>
-                <Select>
-                  {categories.map((item)=>{
-                    return <Select.Option value="demo" key={item.item}>{item.item}</Select.Option>
-                  })}
-                </Select>
+                <Form.Item
+                  name="page1"
+                  rules={[
+                    {
+                      required: true,
+                      message: '请输入一级页面',
+                    },
+                  ]}
+                >
+                  <Select onSelect={(val)=>{handleSelectPage1(val)}}>
+                    {categories.map((item) => {
+                      return <Select.Option value={item.item} key={item.item}>{item.item}
+                      </Select.Option>;
+                    })}
+                  </Select>
+                </Form.Item>
               </Col>
               <Col span={8}>
-                <Select>
-                  <Select.Option value="demo">Demo2</Select.Option>
-                </Select>
+                <Form.Item
+                  name="page2"
+                  rules={[
+                    {
+                      required: true,
+                      message: '请输入二级页面',
+                    },
+                  ]}
+                >
+                  <Select disabled={!page2List.length}
+                    onSelect={(val)=>{handleSelectPage2(val)}}>
+                    {page2List.map((item)=>{
+                        return <Select.Option value={item.item} key={item.item}>{item.item}</Select.Option>
+                    })}
+                  </Select>
+                </Form.Item>
               </Col>
               <Col span={8}>
-                <Select>
-                  <Select.Option value="demo">Demo3</Select.Option>
-                </Select>
+                <Form.Item
+                  name="page3"
+                  rules={[
+                    {
+                      required: true,
+                      message: '请输入三级页面',
+                    },
+                  ]}
+                >
+                  <Select disabled={!page3List.length}>
+                    {page3List.map((item)=>{
+                      return <Select.Option value={item.item} key={item.item}>{item.item}</Select.Option>
+                    })}
+                  </Select>
+                </Form.Item>
               </Col>
             </Row>
           </Form.Item>
           <Form.Item
             label="漏洞分类"
-            name="bugType"
+            name="bug_category"
             rules={[
               {
                 required: true,
-                message: '请输入漏洞分类!',
+                message: '请选择漏洞分类!',
               },
             ]}
           >
             <Select>
-              <Select.Option value="demo">Demo</Select.Option>
+              {bug_categories.map((item) => {
+                return <Select.Option value={item} key={item}>{item}</Select.Option>;
+              })}
             </Select>
           </Form.Item>
           <Form.Item
             label="严重等级"
-            name="service"
+            name="severity"
             rules={[
               {
                 required: true,
-                message: '请输入严重等级!',
+                message: '请选择严重等级!',
               },
             ]}
           >
             <Select>
-              <Select.Option value="demo">Demo</Select.Option>
+              {severity.map((item) => {
+                return <Select.Option value={item} key={item}>{item}</Select.Option>;
+              })}
             </Select>
           </Form.Item>
           <Form.Item
@@ -460,12 +513,14 @@ const Step2 = (props) => {
             rules={[
               {
                 required: true,
-                message: '请输入测试题目!',
+                message: '请选择复现程度!',
               },
             ]}
           >
             <Select>
-              <Select.Option value="demo">Demo</Select.Option>
+              {recurrent.map((item) => {
+                return <Select.Option value={item} key={item}>{item}</Select.Option>;
+              })}
             </Select>
           </Form.Item>
           {/*<Form.Item*/}
@@ -497,5 +552,5 @@ export default connect(({ editReport, loading }) => ({
   reportCommonInfo: editReport.reportCommonInfo,
   testCaseList: editReport.testCaseList,
   caseBugList: editReport.caseBugList,
-  categories:editReport.categories
+  categories: editReport.categories,
 }))(Step2);

+ 4 - 3
src/pages/edit/components/Step2/index.less

@@ -97,10 +97,11 @@
     }
   }
 }
-.reportContainer {
-  height: 500px;
+.bugForm {
+  .pageSelect {
+    margin-bottom: -24px;
+  }
 }
-
 .addModalInfo {
   color: #1890ff;
   margin-top: -20px;

+ 13 - 16
src/pages/edit/model.js

@@ -8,7 +8,7 @@ import {
   getBugInfo,
   updateTestCaseList,
   getReportInfo,
-  getCategoriesInfo,
+  createCaseBug,
 } from './service';
 
 const Model = {
@@ -39,7 +39,7 @@ const Model = {
         payload: 'detail',
       });
     },
-    * getOsType({ payload }, { call, put }) {
+    * getOsType({ payload }, { call, put}) {
       const { examId } = payload;
       let res = yield call(getExamInfo, examId);
       let osType = res?.result?.paper_type;
@@ -67,6 +67,7 @@ const Model = {
         type: 'saveTestCaseList',
         payload: res.result,
       });
+      return res.result;
     },
     //todo:获取报告基础信息
     * getReportInfo({ payload }, { call, put }) {
@@ -83,6 +84,7 @@ const Model = {
           payload: 'info',
         });
       }
+      return res.status;
     },
     //todo:保存报告基础信息
     * saveReportCommonDetail({ payload }, { call, put }) {
@@ -122,19 +124,21 @@ const Model = {
       return res;
     },
     //todo:获取bug列表
-    * getCaseBugList({ payload }, { call, put }) {
+    * getCaseBugList({ payload }, { call, put , take}) {
       let bugIdList = yield call(getCaseBugList, payload);//bug id list
       let newBugList = [];
       for (const item of bugIdList) {
         let p = yield put({ type: 'getBugInfo', payload: { item } });
+        yield take('getBugInfo/@@end');
         p.then(res => {
-          newBugList.push(res);
+          newBugList = [...newBugList,res];
         });
       }
       yield put({
         type: 'saveCaseBugList',
         payload: newBugList,
       });
+      return newBugList;
     },
     //todo:获取bug详情
     * getBugInfo({ payload }, { call, put }) {
@@ -144,20 +148,13 @@ const Model = {
     },
     //todo:保存bug
     * createCaseBug({ payload }, { call, put }) {
-      let res = yield call(createReportCommon, payload);
-      //res拿到报告id,组装生成report对象
-      let report = { id: res.id };
-      for (let key of payload.keys()) {
-        report[key] = payload.get(key);
-      }
+      const { useCase,formData } = payload;
+      let res = yield call(createCaseBug, formData);
       yield put({
-        type: 'saveReportCommonInfo',
-        payload: report,
-      });
-      yield put({
-        type: 'saveCurrentStep',
-        payload: 'detail',
+        type: 'getCaseBugList',
+        payload: useCase ,
       });
+      return res;
     },
   },
   reducers: {