diff --git a/src/pages/WorkSpace/TestResult/Details/TestRsultTable/CaseTable.tsx b/src/pages/WorkSpace/TestResult/Details/TestRsultTable/CaseTable.tsx index bef87418a753ff3f159ad80937d7023586130fef..281df6dc5120cf77c36d2aec3731226b655f4786 100644 --- a/src/pages/WorkSpace/TestResult/Details/TestRsultTable/CaseTable.tsx +++ b/src/pages/WorkSpace/TestResult/Details/TestRsultTable/CaseTable.tsx @@ -2,7 +2,7 @@ /* eslint-disable react-hooks/exhaustive-deps */ import { Table, Space, Row } from 'antd' import React, { useRef, useState, useEffect } from 'react' -import { useRequest, Access, useAccess, useParams, FormattedMessage, getLocale } from 'umi' +import { useRequest, Access, useAccess, useParams, FormattedMessage } from 'umi' import ServerLink from '@/components/MachineWebLink/index'; import { queryTestResultSuiteConfList } from '../service' import { CaretRightFilled, CaretDownFilled } from '@ant-design/icons'; @@ -26,7 +26,6 @@ const CaseTable: React.FC> = ({ suite_id, testType, suite_name, server_provider, provider_name, creator, expandedState, expandedCaseRowKeys, suiteSelect = [], onCaseSelect, openAllRows = false, setIndexExpandFlag, parentTableName, columnsChange }) => { - const locale = getLocale() === 'en-US'; const { id: job_id } = useParams() as any const background = `url(${treeSvg}) center center / 38.6px 32px ` const [selectedRowKeys, setSelectedRowKeys] = useState([]) @@ -186,7 +185,7 @@ const CaseTable: React.FC> = ({ ['performance', 'business_performance'].includes(testType) && { title: , - width: locale ? 180 : 145, + width: 180, fixed: 'right', render: (_: any) => { diff --git a/src/pages/WorkSpace/TestResult/Details/TestRsultTable/index.tsx b/src/pages/WorkSpace/TestResult/Details/TestRsultTable/index.tsx index f623aeb4370adda16fc374a81f7693bd453e2b3c..bcdcddc9b70ed494046eaaef24e0e909ed5282bf 100644 --- a/src/pages/WorkSpace/TestResult/Details/TestRsultTable/index.tsx +++ b/src/pages/WorkSpace/TestResult/Details/TestRsultTable/index.tsx @@ -117,6 +117,11 @@ const TestResultTable: React.FC = (props) => { setExpandedCaseRowKeys(openKeys) } + const handleExports = (row: any) => { + const { suite_name } = row + window.open(`/api/job/export_results/?job_id=${job_id}&ws_id=${ws_id}&suite_name=${suite_name}`) + } + const states = ['functional', 'business_functional'].includes(testType) ? funcStates : (testType === 'business_business' ? businessBusinessStates : perfStates) @@ -257,7 +262,7 @@ const TestResultTable: React.FC = (props) => { ['performance', 'business_performance'].includes(testType) && { title: , - width: locale ? 180 : 145, + width: 180, fixed: 'right', key: "operation", ellipsis: { @@ -279,6 +284,10 @@ const TestResultTable: React.FC = (props) => { handleContrastBaseline(_)}> handleJoinBaseline(_)}> + { + testType === 'performance' && + handleExports(_)}> + } @@ -396,7 +405,7 @@ const TestResultTable: React.FC = (props) => { const expandBtnText = isOpenAllConf ? formatMessage({ id: `ws.result.details.folded.conf` }) : formatMessage({ id: `ws.result.details.expand.conf` }) const expandIndexBtnText = indexExpandFlag ? formatMessage({ id: `ws.result.details.folded.${childName}` }) : formatMessage({ id: `ws.result.details.expand.${childName}` }) - const RESULT_SUITE_TABLE_NAME = "ws-job-result-list" + const RESULT_SUITE_TABLE_NAME = "ws-job-result-list-1" const [columnsChange, setColumnsChange] = React.useState(uuid()) const batchBtnDisabled = React.useMemo(() => { @@ -406,159 +415,157 @@ const TestResultTable: React.FC = (props) => { }, [selectedRowKeys, suiteCaseSelectKeys]) return ( - <> -
- - - } - overlay={ - - - {expandBtnText} - - - {expandIndexBtnText} - - - } - > - { - isOpenAllConf ? - formatMessage({ id: `ws.result.details.folded.all` }) : - formatMessage({ id: `ws.result.details.expand.all` }) - } - - { - ['performance', 'business_performance'].includes(testType) && - - - - - - } +
+ + + } + overlay={ + + + {expandBtnText} + + + {expandIndexBtnText} + + + } + > + { + isOpenAllConf ? + formatMessage({ id: `ws.result.details.folded.all` }) : + formatMessage({ id: `ws.result.details.expand.all` }) + } + + { + ['performance', 'business_performance'].includes(testType) && + + - - - } - - - { - states.map( - ({ key, name, value }: any) => ( - handleStateChange(value)} - style={{ - cursor: 'pointer', - color: selectSuiteState === value ? '#1890FF' : 'rgba(0, 0, 0, 0.65)' - }} + } + > + + + + + + + } + + + { + states.map( + ({ key, name, value }: any) => ( + handleStateChange(value)} + style={{ + cursor: 'pointer', + color: selectSuiteState === value ? '#1890FF' : 'rgba(0, 0, 0, 0.65)' + }} + > + {name}({caseResult[key]}) + ) - } - - - setColumnsChange(uuid())} - rowKey="suite_id" - name={RESULT_SUITE_TABLE_NAME} - dataSource={filterData} - pagination={false} - refreshDeps={[ws_id, access, testType, baseline, baseline_job_id, creator]} - size="small" - loading={loading} - className={styles.result_expand_table} - style={{ marginTop: 20 }} - rowSelection={rowSelection} - expandable={{ - defaultExpandAllRows: openAllRows, - expandedRowKeys: expandedRowKeys, - onExpand: (expanded: boolean, record: any) => { - if (expanded) { - const tempList = expandedRowKeys.concat([record.suite_id]) - setExpandedRowKeys(tempList) - if (tempList?.length === filterData.length) { - // 展开的状态标志 - setOpenAllRows(true) - setIndexExpandFlag(true) - } + ) + } + + + setColumnsChange(uuid())} + rowKey="suite_id" + name={RESULT_SUITE_TABLE_NAME} + dataSource={filterData} + pagination={false} + refreshDeps={[ws_id, access, testType, baseline, baseline_job_id, creator]} + size="small" + loading={loading} + className={styles.result_expand_table} + style={{ marginTop: 20 }} + rowSelection={rowSelection} + expandable={{ + defaultExpandAllRows: openAllRows, + expandedRowKeys: expandedRowKeys, + onExpand: (expanded: boolean, record: any) => { + if (expanded) { + const tempList = expandedRowKeys.concat([record.suite_id]) + setExpandedRowKeys(tempList) + if (tempList?.length === filterData.length) { + // 展开的状态标志 + setOpenAllRows(true) + setIndexExpandFlag(true) } - else { - const tempList = expandedRowKeys.filter((i: number) => i !== record.suite_id) - setExpandedRowKeys(tempList) - if (!tempList.length) { - // 收起的状态标志 - setOpenAllRows(false) - setIndexExpandFlag(false) - } + } + else { + const tempList = expandedRowKeys.filter((i: number) => i !== record.suite_id) + setExpandedRowKeys(tempList) + if (!tempList.length) { + // 收起的状态标志 + setOpenAllRows(false) + setIndexExpandFlag(false) } - }, - expandedRowRender: (record) => ( - - ), - expandIcon: ({ expanded, onExpand, record }: any) => ( - // expanded ? null : null - expanded ? - ( onExpand(record, e)} />) : - ( onExpand(record, e)} />) - ) - }} - /> -
+ } + }, + expandedRowRender: (record) => ( + + ), + expandIcon: ({ expanded, onExpand, record }: any) => ( + // expanded ? null : null + expanded ? + ( onExpand(record, e)} />) : + ( onExpand(record, e)} />) + ) + }} + /> = (props) => { server_provider={serverProvider} onOk={handleContrastBaselineOk} /> - +
) } diff --git a/src/pages/WorkSpace/TestResult/Details/components/MainPageComponents.tsx b/src/pages/WorkSpace/TestResult/Details/components/MainPageComponents.tsx index 10d8fc9c883604c42b88d31fb7da77722c162784..d693ef8eeda07cb19b3486954430e823dcb57124 100644 --- a/src/pages/WorkSpace/TestResult/Details/components/MainPageComponents.tsx +++ b/src/pages/WorkSpace/TestResult/Details/components/MainPageComponents.tsx @@ -5,7 +5,7 @@ import { useCopyText } from '@/utils/hooks' import styled from 'styled-components' import { Breadcrumb, Typography, message, Row, Tooltip, Space, Col } from "antd" import { useParams, useAccess, useIntl, FormattedMessage, Access, history, getLocale } from 'umi' -import { DownloadOutlined, ShareAltOutlined, EditOutlined } from '@ant-design/icons' +import { DownloadOutlined, ShareAltOutlined, EditOutlined, ExportOutlined } from '@ant-design/icons' import { queryDownloadLink, startDownloadTask } from '@/pages/WorkSpace/TestResult/Details/service' import styles from "../index.less" @@ -25,7 +25,8 @@ export const CAN_STOP_JOB_STATES = ['running', 'pending', 'pending_q'] export const sleep = (time: number) => new Promise((resolve) => setTimeout(resolve, time)) export const BreadcrumbItem: React.FC = (props) => { - const { state: jobState, bottomHeight } = props + const { state: jobState, bottomHeight, test_type } = props + const { ws_id, id: job_id } = useParams() as any const access = useAccess() const intl = useIntl() @@ -83,6 +84,10 @@ export const BreadcrumbItem: React.FC = (props) => { } } + const handleExportJob = () => { + window.open(`/api/job/export_results/?job_id=${job_id}&ws_id=${ws_id}`) + } + React.useEffect(() => { if (downloadHerf) downloadRef.current?.click() }, [downloadHerf]) @@ -123,6 +128,17 @@ export const BreadcrumbItem: React.FC = (props) => { } + { + (test_type === '性能测试' && !CAN_STOP_JOB_STATES.includes(jobState)) && + + + + + + } { key="testResult" creator={details.creator} test_type={details.test_type} - job_id={job_id} cases={details.case_result} caseResult={details.case_result} provider_name={transProvider(details.provider_name)} - ws_id={ws_id} refreshResult={refreshResult} />], [ diff --git a/src/pages/WorkSpace/TestResult/Details/locales/en-US.ts b/src/pages/WorkSpace/TestResult/Details/locales/en-US.ts index f400ad18b827098859b7fb4f8f2fd85cbc44494e..fa51e12967746e593429f7aeb7bb7748c218faad 100644 --- a/src/pages/WorkSpace/TestResult/Details/locales/en-US.ts +++ b/src/pages/WorkSpace/TestResult/Details/locales/en-US.ts @@ -1,6 +1,8 @@ const defaultKey = 'ws.result.details' const text = { + 'exports': 'Export', + 'test.result': 'Test Result', 'result.details': 'Result Details', 'provider_name': 'Sever Type', @@ -121,6 +123,7 @@ const text = { 'breadcrumb.button.download': 'Download', 'breadcrumb.button.share': 'Share', + 'breadcrumb.button.export': 'Export', // ProcessTable 'build.kernel': 'Build Kernel', diff --git a/src/pages/WorkSpace/TestResult/Details/locales/zh-CN.ts b/src/pages/WorkSpace/TestResult/Details/locales/zh-CN.ts index 97a119b99d9496b8f7af48ef51dbfa621f5d1c22..16a95726ed3b297c2bd9d5716fd83557ed57401f 100644 --- a/src/pages/WorkSpace/TestResult/Details/locales/zh-CN.ts +++ b/src/pages/WorkSpace/TestResult/Details/locales/zh-CN.ts @@ -1,6 +1,7 @@ const defaultKey = 'ws.result.details' const text = { + 'exports': '导出', 'test.result': '测试结果', 'result.details': '结果详情', 'provider_name': '机器类型', @@ -115,6 +116,8 @@ const text = { 'track_result': '跟踪结果', 'breadcrumb.button.download': '下载', + 'breadcrumb.button.export': '导出', + 'breadcrumb.button.share': '分享Job链接', "breadcrumb.button.download.running": "下载中...",