|
@@ -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);
|