From d9d8f6a670801ef3eb673937fdcbffec5babe7ed Mon Sep 17 00:00:00 2001 From: wulibaibao <13366578180@163.com> Date: Mon, 4 Mar 2024 15:12:17 +0800 Subject: [PATCH 01/16] =?UTF-8?q?feat:=20=E8=B0=83=E6=95=B4=E5=88=86?= =?UTF-8?q?=E4=BA=AB=E6=8A=A5=E5=91=8A=E8=B7=AF=E7=94=B1&=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=88=86=E4=BA=AB=E6=8C=89=E9=92=AEUI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/routes.ts | 41 ++++++------ .../NewReport/components/SharePopover.tsx | 55 ++++++++++++++++ .../WorkSpace/TestReport/NewReport/index.tsx | 62 +++++++++++++++---- src/pages/WorkSpace/TestReport/services.ts | 14 ++++- 4 files changed, 138 insertions(+), 34 deletions(-) create mode 100644 src/pages/WorkSpace/TestReport/NewReport/components/SharePopover.tsx diff --git a/config/routes.ts b/config/routes.ts index cd79d3f5..9f8639ac 100644 --- a/config/routes.ts +++ b/config/routes.ts @@ -92,26 +92,24 @@ const routes = [ component: './TaskMessage', }, { - path: '/share/job/:share_id', + path: '/share', hideInMenu: true, - name: 'share_job', - component: '@/pages/WorkSpace/TestResult/Details', - }, - { - path: '/share/report/:report_id', - hideInMenu: true, - name: 'ShareReport', - component: '@/pages/WorkSpace/TestReport/NewReport' - }, - { - path: '/share/analysis_result/:form_id', - hideInMenu: true, - component: '@/pages/WorkSpace/TestAnalysis/AnalysisResult' - }, - { - path: '/share/analysis/:share_id', - hideInMenu: true, - component: '@/pages/WorkSpace/TestAnalysis/AnalysisTime/SharePage' + routes: [{ + path: '/share/job/:share_id', + name: 'share_job', + component: '@/pages/WorkSpace/TestResult/Details', + }, { + path: '/share/report/:share_id', + name: 'ShareReport', + component: '@/pages/WorkSpace/TestReport/NewReport' + }, { + path: '/share/analysis_result/:form_id', + component: '@/pages/WorkSpace/TestAnalysis/AnalysisResult' + }, + { + path: '/share/analysis/:share_id', + component: '@/pages/WorkSpace/TestAnalysis/AnalysisTime/SharePage' + },] }, { path: '/ws/:ws_id', @@ -326,6 +324,11 @@ const routes = [ name: 'Report', component: '@/pages/WorkSpace/TestReport/NewReport', }, + { + path: '/ws/:ws_id/test_report/:report_id/share', + name: 'ReportShare', + component: '@/pages/WorkSpace/TestReport/NewReport', + }, { path: '/ws/:ws_id/test_report/:report_id/edit', exact: true, diff --git a/src/pages/WorkSpace/TestReport/NewReport/components/SharePopover.tsx b/src/pages/WorkSpace/TestReport/NewReport/components/SharePopover.tsx new file mode 100644 index 00000000..12db45c7 --- /dev/null +++ b/src/pages/WorkSpace/TestReport/NewReport/components/SharePopover.tsx @@ -0,0 +1,55 @@ +import React from 'react' +import { Popover, Radio, Typography, Button } from 'antd' +import { FormattedMessage } from 'umi' +import styled from "styled-components" + +const FlexColGap = styled.div<{ gap?: string }>` + display: flex; + flex-direction: column; + gap: ${({ gap }) => gap || 10}px; +` + +const SharePopover: React.FC = (props) => { + const { onCopy, children, list } = props + + const [shareRadioVal, setShareRadioVal] = React.useState(1) + + return ( + + } + content={ + + + + + setShareRadioVal(evt?.target?.value)} + > + + { + list.map((i: any) => ( +
+ {i.label} +
+ )) + } +
+
+ +
+ } + > + {children} +
+ ) +} + +export default SharePopover \ No newline at end of file diff --git a/src/pages/WorkSpace/TestReport/NewReport/index.tsx b/src/pages/WorkSpace/TestReport/NewReport/index.tsx index ada546ec..728ea91a 100644 --- a/src/pages/WorkSpace/TestReport/NewReport/index.tsx +++ b/src/pages/WorkSpace/TestReport/NewReport/index.tsx @@ -13,13 +13,27 @@ import ReportTestEnv from './components/ReportTestEnv'; import ReportTestPref from './components/ReportTestPerf'; import { useClientSize, useCopyText } from '@/utils/hooks' import Catalog from './components/Catalog' -import { editReport, saveReport } from '../services'; +import { editReport, getReportShareID, saveReport } from '../services'; import { history, useAccess, Access, useParams, useIntl, FormattedMessage, useLocation } from 'umi'; import { requestCodeMessage, AccessTootip } from '@/utils/utils'; import { ReportContext } from './Provider'; import _ from 'lodash'; import { ReportTemplate, ReportBodyContainer, ReportWarpper, ReportBread, BreadDetailL, BreadDetailR } from './ReportUI'; import { CreatePageData, EditPageData } from './hooks'; +import SharePopover from './components/SharePopover'; +import styled from "styled-components" + +const HoverSpan = styled.span` + &:hover { + .ant-space-item { + color: #1890FF; + + path { + fill: #1890FF; + } + } + } +` // 面包屑 const BreadcrumbItem: React.FC = ({ saveReportData, routeName, creator }) => { @@ -30,6 +44,16 @@ const BreadcrumbItem: React.FC = ({ saveReportData, routeName, creator }) = const access = useAccess(); const handleCopyText = useCopyText(formatMessage({ id: 'report.link.copied.successfully' })) + const handleCopyOk = async (key: any) => { + if (key === 1) { + handleCopyText(location.origin + `/ws/${ws_id}/test_report/${report_id}/share`) + } + else { + const { share_id } = await getReportShareID(report_id) + handleCopyText(location.origin + `/share/report/${share_id}`) + } + } + return ( @@ -45,15 +69,27 @@ const BreadcrumbItem: React.FC = ({ saveReportData, routeName, creator }) = { !['EditReport', 'CreateReport'].includes(routeName) && - handleCopyText(location.origin + `/share/report/${report_id}`)} + - - - - - + + + + + + + + { routeName !== 'ShareReport' && = ({ saveReportData, routeName, creator }) = AccessTootip()} > - + } > - { const editPath = pathname.lastIndexOf("/") === pathname.length - 1 ? 'edit' : '/edit' history.push(`${pathname}${pathname !== 'EditReport' ? editPath : ''}`) }} > - + - + } diff --git a/src/pages/WorkSpace/TestReport/services.ts b/src/pages/WorkSpace/TestReport/services.ts index bd1d517c..31db5358 100644 --- a/src/pages/WorkSpace/TestReport/services.ts +++ b/src/pages/WorkSpace/TestReport/services.ts @@ -7,15 +7,19 @@ export const queryReportTemplateList = async (params: any) => { export const copyReportTemplateList = async (data: any) => { return request(`/api/report/template/copy/`, { method: 'post', data }) } + export const delReportTemplateList = async (data: any) => { return request(`/api/report/template/detail/`, { method: 'delete', data }) } + export const queryReportList = async (params: any) => { return request(`/api/report/test/report/`, { params }) } + export const delReportList = async (data: any) => { return request(`/api/report/test/report/`, { method: 'delete', data }) } + export const projectList = async (params: any) => { return request(`/api/sys/project/`, { params }) } @@ -23,6 +27,7 @@ export const projectList = async (params: any) => { export const productVersionList = async (params: any) => { return request(`/api/get/product/version/`, { params }) } + export const creatReport = async (data: any) => { return request(`/api/report/template/copy/`, { method: 'post', data }) } @@ -30,18 +35,20 @@ export const creatReport = async (data: any) => { export const saveReport = async (data: any) => { return request(`/api/report/test/report/`, { method: 'post', data }) } + export const detailTemplate = async (params: any) => { return request(`/api/report/template/detail/`, { params }) } + // 查询报告详情 export const reportDetail = async (params: any) => { return request(`/api/report/test/report/detail/`, { params }) } + export const editReport = async (data: any) => { return request(`/api/report/test/report/`, { method: 'put', data }) } - //查询成员 export async function member(params: any) { return request('/api/auth/user/', { @@ -49,7 +56,6 @@ export async function member(params: any) { }) } - // 获取结果对比图表数据 export async function compareChart(data: any) { return request('/api/job/result/compare/chart/', { @@ -81,4 +87,8 @@ type editGroupDescProps = { export async function editReportGroupDesc(data: editGroupDescProps) { return request(`/api/report/test/report/item/update_desc/`, { method: 'post', data }) +} + +export async function getReportShareID(data: any) { + return request(`/`, { method: 'post', data }) } \ No newline at end of file -- Gitee From 4bce6629f68f2f006a6c808cad94071cb7bc2454 Mon Sep 17 00:00:00 2001 From: wulibaibao <13366578180@163.com> Date: Tue, 5 Mar 2024 15:19:40 +0800 Subject: [PATCH 02/16] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84=E6=8A=A5?= =?UTF-8?q?=E5=91=8A=E5=88=86=E4=BA=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/routes.ts | 6 ++- src/locales/en-US/menu.ts | 4 ++ src/locales/zh-CN/menu.ts | 4 ++ .../TestReport/NewReport/ReportUI.tsx | 2 + .../NewReport/components/EditPublic.tsx | 43 ++++++++------- .../NewReport/components/ReportSummary.tsx | 20 +++---- .../NewReport/components/ReportTestFunc.tsx | 11 ++-- .../components/TestDataChild/FuncReview.tsx | 5 +- .../components/TestDataChild/PrefReview.tsx | 47 +++++----------- .../WorkSpace/TestReport/NewReport/hooks.ts | 54 +++---------------- .../WorkSpace/TestReport/NewReport/index.tsx | 51 ++++++++++++------ src/pages/WorkSpace/TestReport/services.ts | 4 -- src/utils/utils.test.ts | 7 --- 13 files changed, 105 insertions(+), 153 deletions(-) diff --git a/config/routes.ts b/config/routes.ts index 9f8639ac..31513ebe 100644 --- a/config/routes.ts +++ b/config/routes.ts @@ -100,14 +100,16 @@ const routes = [ component: '@/pages/WorkSpace/TestResult/Details', }, { path: '/share/report/:share_id', - name: 'ShareReport', + name: 'share_report', component: '@/pages/WorkSpace/TestReport/NewReport' }, { path: '/share/analysis_result/:form_id', + name: 'share_result_analysis', component: '@/pages/WorkSpace/TestAnalysis/AnalysisResult' }, { path: '/share/analysis/:share_id', + name: 'share_time_analysis', component: '@/pages/WorkSpace/TestAnalysis/AnalysisTime/SharePage' },] }, @@ -326,7 +328,7 @@ const routes = [ }, { path: '/ws/:ws_id/test_report/:report_id/share', - name: 'ReportShare', + name: 'ShareReport', component: '@/pages/WorkSpace/TestReport/NewReport', }, { diff --git a/src/locales/en-US/menu.ts b/src/locales/en-US/menu.ts index 5cdf8f6f..24e45575 100644 --- a/src/locales/en-US/menu.ts +++ b/src/locales/en-US/menu.ts @@ -22,6 +22,9 @@ export default { "menu.home": 'Home', 'menu.share_job': 'Share Job', + 'menu.share_report': 'Share Report', + 'menu.share_result_analysis': 'Share Result Analysis', + 'menu.share_time_analysis': 'Share Time Analysis', "menu.PersonCenter": 'Person Center', "menu.HelpDoc": 'Help', @@ -63,6 +66,7 @@ export default { 'menu.Workspace.TestReport.TemplateEdit': 'Edit Report Template', 'menu.Workspace.TestReport.Report': 'Test Report', 'menu.Workspace.TestReport.EditReport': 'Edit Report', + 'menu.Workspace.TestReport.ShareReport': 'Share Report', // "menu.Workspace.TestReport.ShareReport": '分享报告', 'menu.Workspace.TestReport.CompareAnalysisConf': 'Result', diff --git a/src/locales/zh-CN/menu.ts b/src/locales/zh-CN/menu.ts index 29b6ec5d..5919494c 100644 --- a/src/locales/zh-CN/menu.ts +++ b/src/locales/zh-CN/menu.ts @@ -35,6 +35,9 @@ export default { 'menu.DirectRoute': 'directRoute', 'menu.ShareReport': '测试报告', + 'menu.share_report': '测试报告分享', + 'menu.share_result_analysis': '对比分析分享', + 'menu.share_time_analysis': '时序分析分享', 'menu.JobTypePreview': '模板预览', 'menu.TemplateEdit': '模板编辑', @@ -61,6 +64,7 @@ export default { 'menu.Workspace.TestReport.TemplateEdit': '编辑报告模版', 'menu.Workspace.TestReport.Report': '测试报告', 'menu.Workspace.TestReport.EditReport': '编辑报告', + 'menu.Workspace.TestReport.ShareReport': '测试报告分享', // "menu.Workspace.TestReport.ShareReport": '分享报告', 'menu.Workspace.TestReport.CompareAnalysisConf': '结果页', diff --git a/src/pages/WorkSpace/TestReport/NewReport/ReportUI.tsx b/src/pages/WorkSpace/TestReport/NewReport/ReportUI.tsx index ee6d123a..a2d43be7 100644 --- a/src/pages/WorkSpace/TestReport/NewReport/ReportUI.tsx +++ b/src/pages/WorkSpace/TestReport/NewReport/ReportUI.tsx @@ -223,11 +223,13 @@ export const GroupTitle = styled.div` ${GroupPulic} width : ${({ gLen }) => setGroupWdith(gLen)}; border-right:1px solid rgba(0,0,0,0.10); + ${({ gLen }) => gLen <= 1 && 'border-bottom: 0;'} ` export const GroupData = styled.div` ${GroupPulic} display:flex; width : ${({ gLen }) => setDataWdith(gLen)}; + ${({ gLen }) => gLen <= 1 && 'border-bottom: 0;'} &:last-child { border-right:none; } diff --git a/src/pages/WorkSpace/TestReport/NewReport/components/EditPublic.tsx b/src/pages/WorkSpace/TestReport/NewReport/components/EditPublic.tsx index dd1ab0dc..1e18e851 100644 --- a/src/pages/WorkSpace/TestReport/NewReport/components/EditPublic.tsx +++ b/src/pages/WorkSpace/TestReport/NewReport/components/EditPublic.tsx @@ -4,7 +4,7 @@ import React, { useEffect, useState } from 'react'; import { Typography, Input, notification, message, Row } from 'antd'; import { EditOutlined } from '@ant-design/icons'; -import { useIntl, FormattedMessage, Access, useAccess } from 'umi'; +import { useIntl, FormattedMessage, Access, useAccess, useParams } from 'umi'; import { AccessTootip } from '@/utils/utils'; import styled from 'styled-components'; import _ from 'lodash'; @@ -119,6 +119,7 @@ export const SettingRegUpdate = ({ }) => { const access = useAccess(); const { formatMessage } = useIntl() + const { share_id } = useParams() as any const [btn, setBtn] = useState(false) const [title, setTitle] = useState('') @@ -197,14 +198,17 @@ export const SettingRegUpdate = ({ return (
{handleChange(title)} - AccessTootip()} style={{ paddingLeft: 10 }} /> - } - > - setBtn(true)} /> - + { + !share_id && + AccessTootip()} style={{ paddingLeft: 10 }} /> + } + > + setBtn(true)} /> + + }
) } @@ -221,9 +225,9 @@ type TextAreaEditBlockProps = { } export const TextAreaEditBlock: React.FC = (props) => { - const { placeholder, creator, value, report_id, item_name, item_id, default_state = false, title } = props - const access = useAccess() + const { placeholder, value, report_id, item_name, item_id, default_state = false, title } = props const intl = useIntl() + const { share_id } = useParams() as any const [state, setState] = React.useState(default_state) const [val, setVal] = React.useState(value) @@ -266,17 +270,12 @@ export const TextAreaEditBlock: React.FC = (props) => { return ( {val || '-'} - - } - /> - setState(true)} - /> + { + !share_id && + setState(true)} + /> + } ) } \ No newline at end of file diff --git a/src/pages/WorkSpace/TestReport/NewReport/components/ReportSummary.tsx b/src/pages/WorkSpace/TestReport/NewReport/components/ReportSummary.tsx index e964a9d6..3f90837a 100644 --- a/src/pages/WorkSpace/TestReport/NewReport/components/ReportSummary.tsx +++ b/src/pages/WorkSpace/TestReport/NewReport/components/ReportSummary.tsx @@ -97,9 +97,6 @@ const RenderFuncItem: React.FC = ({ logoData, groupLen }) => ( const ReportSummary = () => { const { logoData, envData, domainResult, groupLen, baselineGroupIndex } = useContext(ReportContext) - // console.log(logoData) - // const statisticalWidth = `${String(base_group.all).length * 20}px` 动态计算测试数据的宽度 - const PerfFlag = useMemo(() => { let baseIndex = 0 if (logoData.length > 1) { @@ -124,19 +121,21 @@ const ReportSummary = () => { { - item.is_group && }> + item.is_group && + }> } { - item.is_baseline ? }> - - - : null + item.is_baseline ? + }> + + + : null } @@ -153,4 +152,5 @@ const ReportSummary = () => { ) } + export default memo(ReportSummary); \ No newline at end of file diff --git a/src/pages/WorkSpace/TestReport/NewReport/components/ReportTestFunc.tsx b/src/pages/WorkSpace/TestReport/NewReport/components/ReportTestFunc.tsx index a56f2999..53f67572 100644 --- a/src/pages/WorkSpace/TestReport/NewReport/components/ReportTestFunc.tsx +++ b/src/pages/WorkSpace/TestReport/NewReport/components/ReportTestFunc.tsx @@ -16,17 +16,17 @@ import { TestGroup, CloseBtn, } from '../ReportUI'; -import _ from 'lodash'; +import lodash from 'lodash'; import { TextAreaEditBlock } from './EditPublic'; const ReportTestFunc: React.FC = () => { - const { obj, setObj, domainResult, btnState, isOldReport, saveReportData, routeName } = useContext(ReportContext) + const { setObj, domainResult, btnState, isOldReport, saveReportData, routeName } = useContext(ReportContext) const { report_id } = useParams() as any; const intl = useIntl() const data = useMemo(() => { if (Array.isArray(domainResult.func_item)) { - return _.cloneDeep(domainResult.func_item) + return lodash.cloneDeep(domainResult.func_item) } }, [domainResult]) @@ -136,7 +136,6 @@ const ReportTestFunc: React.FC = () => { child={child} name="group" id={child.rowKey} - // subObj={subObj} dataSource={dataSource} setDataSource={setDataSource} onDelete={handleDelete} @@ -145,13 +144,11 @@ const ReportTestFunc: React.FC = () => { ) }) } - - : + : = (props) => { const FuncDataIndex: React.FC = (props) => { const { pathname } = useLocation() + const { share_id } = useParams() as any const isEditPage = !!~pathname?.indexOf('/edit') const { formatMessage } = useIntl() const { child, name, id, onDelete, dataSource, setDataSource } = props @@ -512,7 +513,7 @@ const FuncDataIndex: React.FC = (props) => { {toShowNum(item.success_case)} {toShowNum(item.fail_case)} { - !getCompareType(item) && + !share_id && !getCompareType(item) && } diff --git a/src/pages/WorkSpace/TestReport/NewReport/components/TestDataChild/PrefReview.tsx b/src/pages/WorkSpace/TestReport/NewReport/components/TestDataChild/PrefReview.tsx index 71b577a8..c8f2cf54 100644 --- a/src/pages/WorkSpace/TestReport/NewReport/components/TestDataChild/PrefReview.tsx +++ b/src/pages/WorkSpace/TestReport/NewReport/components/TestDataChild/PrefReview.tsx @@ -5,7 +5,7 @@ /* eslint-disable @typescript-eslint/no-shadow */ /* eslint-disable @typescript-eslint/no-unused-expressions */ import React, { useContext, useEffect, useState, memo, useMemo, useRef } from 'react'; -import { useIntl, FormattedMessage, getLocale, useLocation } from 'umi'; +import { useIntl, FormattedMessage, getLocale, useLocation, useParams } from 'umi'; import { ReportContext } from '../../Provider'; import { Typography, Space, Select, Popconfirm, Tooltip, Empty, Row, Col } from 'antd'; import { PerfTextArea, GroupItemText } from '../EditPerfText'; @@ -24,7 +24,7 @@ import ChartsIndex from '../PerfCharts'; import ChartTypeChild from './ChartTypeChild' import { QuestionCircleOutlined } from '@ant-design/icons'; import { JumpResult } from '@/utils/hooks'; -import _ from 'lodash'; +import lodash from 'lodash'; import { TestGroupItem, TestItemText, @@ -71,6 +71,7 @@ const compare = ($props: any) => { const Performance = (props: any) => { const { formatMessage } = useIntl() const sortRef = useRef(); + const { share_id } = useParams() as any const { pathname } = useLocation() const { child, name, btn, id, onDelete, dataSource, setDataSource } = props const { btnState, allGroupData, baselineGroupIndex, domainResult, environmentResult, groupLen, wsId, isOldReport } = useContext(ReportContext) @@ -85,7 +86,7 @@ const Performance = (props: any) => { }, [baselineGroupIndex]) useEffect(() => { - const data = isOldReport ? handleDataArr(_.cloneDeep(child), baseIndex) : child + const data = isOldReport ? handleDataArr(lodash.cloneDeep(child), baseIndex) : child btn ? setPerData(data) : setPerData({ ...child, list: child.list?.map((item: any) => { return { @@ -99,7 +100,7 @@ const Performance = (props: any) => { // 筛选过滤 const handleConditions = (value: any) => { setFilterName(value) - let dataSource = isOldReport ? handleDataArr(_.cloneDeep(child), baseIndex) : _.cloneDeep(child) + let dataSource = isOldReport ? handleDataArr(lodash.cloneDeep(child), baseIndex) : lodash.cloneDeep(child) if (value === 'all') { setPerData(dataSource) } else { @@ -156,7 +157,11 @@ const Performance = (props: any) => { btn && : - : + + } + options={ + dataSource?.data?.map((l: any) => ({ + label: l.name, + value: l.id, + disabled: l.id === + project_id + })) + } + /> + + + +
+ + + + 已选Job + + + { + rows.map((i: any) => ( + + {`#${i.id} ${i.name}`} + + )) + } + + + + + ) +} + +export default React.forwardRef(SelectionRowBar) \ No newline at end of file diff --git a/src/pages/WorkSpace/Dashboard/Project/components/JobTable.tsx b/src/pages/WorkSpace/Dashboard/Project/components/JobTable.tsx index b7426ce1..dae1dbf5 100644 --- a/src/pages/WorkSpace/Dashboard/Project/components/JobTable.tsx +++ b/src/pages/WorkSpace/Dashboard/Project/components/JobTable.tsx @@ -3,7 +3,7 @@ import { JobListStateTag } from '@/pages/WorkSpace/TestResult/Details/components import lodash from 'lodash' import CommonPagination from '@/components/CommonPagination'; import { deleteJobTest } from '@/pages/WorkSpace/TestResult/services' -import { message, Space, Typography, Tooltip, Popconfirm, Row, Spin } from 'antd' +import { message, Space, Typography, Tooltip, Popconfirm, Row, Spin, Button } from 'antd' import ViewReports from './ViewReports' import { queryTestResultList } from '@/pages/WorkSpace/TestResult/services' import styled from 'styled-components' @@ -13,6 +13,7 @@ import styles from './index.less' import { requestCodeMessage, AccessTootip } from '@/utils/utils'; import { ResizeHooksTable } from '@/utils/table.hooks'; import { ColumnEllipsisText } from '@/components/ColumnComponents'; +import ChangeJobProjectDrawer from './ChangeJobProjectDrawer'; const TableBody = styled(Row)` width : 100%; @@ -32,7 +33,7 @@ const ColumnCircleText = styled.span` cursor: pointer; ` -const JobTable = (props: any) => { +const JobTable: React.FC = () => { const { formatMessage } = useIntl() const enLocale = getLocale() === 'en-US' @@ -40,12 +41,15 @@ const JobTable = (props: any) => { const DEFAULT_TABLE_PARAMS = { page_num: 1, page_size: 10, ws_id, project_id } const [pageParams, setPageParams] = useState(DEFAULT_TABLE_PARAMS) + const changeJobProjectDrawer = useRef() as any + const [jobs, setJobs] = useState({ data: [], total: 0, }) const access = useAccess(); const [loading, setLoading] = useState(true) + const [selectedRows, setSelectedRows] = useState([]) useEffect(() => { getProjectJobs() @@ -86,7 +90,9 @@ const JobTable = (props: any) => { {_} + > + {_} + ) }, { @@ -199,10 +205,12 @@ const JobTable = (props: any) => { {/** case.离线任务上传后,不能重跑。 */} {_.created_from === 'offline' ? - + + : handleTestReRun(_)}> - + + } { } ] + const handleChangeProjectOk = () => { + setSelectedRows([]) + message.success('操作成功!') + getProjectJobs() + } + return ( + { pagination={false} style={{ width: '100%' }} size="small" + rowSelection={{ + selectedRowKeys: selectedRows.map((i: any) => i.id), + onChange: (rowkeys: any, selectedRows: any) => { + setSelectedRows(selectedRows) + } + }} /> { + + ) } diff --git a/src/pages/WorkSpace/Dashboard/services.ts b/src/pages/WorkSpace/Dashboard/services.ts index 250f5f34..8cfa8198 100644 --- a/src/pages/WorkSpace/Dashboard/services.ts +++ b/src/pages/WorkSpace/Dashboard/services.ts @@ -1,18 +1,21 @@ import { request } from 'umi' -export async function queryWorkspaceProductData(params:any) { +export async function queryWorkspaceProductData(params: any) { return request(`/api/sys/ws_data_list/`, { params }) } -export async function queryWorkspaceProjectChart(params:any) { +export async function queryWorkspaceProjectChart(params: any) { return request(`/api/sys/ws_chart/`, { params }) } -export async function queryWorkspaceProductInfo (params:any) { +export async function queryWorkspaceProductInfo(params: any) { return request(`/api/sys/ws_project_data/`, { params }) } -export async function queryWorkspaceJobs (params:any) { +export async function queryWorkspaceJobs(params: any) { return request(`/api/sys/ws_project_job/`, { params }) } +export async function postChangeJobProject(data: any) { + return request(`/api/sys/change_job_project/`, { data, method: 'POST' }) +} \ No newline at end of file -- Gitee From eb28b02c0e0c28596a4a4dcec9d8328bf620e13a Mon Sep 17 00:00:00 2001 From: wulibaibao <13366578180@163.com> Date: Thu, 14 Mar 2024 10:29:09 +0800 Subject: [PATCH 06/16] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=9F=BA?= =?UTF-8?q?=E7=BA=BF=E5=8A=A0=E5=85=A5suite=E9=83=A8=E5=88=86=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WorkSpace/TestResult/Details/components/JoinBaseline.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/WorkSpace/TestResult/Details/components/JoinBaseline.tsx b/src/pages/WorkSpace/TestResult/Details/components/JoinBaseline.tsx index dafbbed5..46697bec 100644 --- a/src/pages/WorkSpace/TestResult/Details/components/JoinBaseline.tsx +++ b/src/pages/WorkSpace/TestResult/Details/components/JoinBaseline.tsx @@ -110,6 +110,7 @@ const JoinBaseline: React.ForwardRefRenderFunction = (props, ref) => { async (values: any) => { const { bug } = values const baseParams = { ...values, ws_id, test_type, bug: bug?.trim() } + console.log(source) if (source?.isMore) { const { code, msg } = await perfJoinBaselineBatch({ ...baseParams, ids: oSuite, job_id }) defaultOption(code, msg) @@ -124,7 +125,7 @@ const JoinBaseline: React.ForwardRefRenderFunction = (props, ref) => { else { const { suite_id, test_case_id: case_id } = source const { code, msg } = case_id ? await perfJoinBaseline({ ...baseParams, job_id, suite_id, case_id }) : - await perfJoinBaselineBatch({ ...baseParams, job_id, suite_list: [suite_id] }) + await perfJoinBaselineBatch({ ...baseParams, job_id, ids: { [suite_id]: {} } }) defaultOption(code, msg) } } -- Gitee From e4465d947532c26dd318c7c17a419546b42ebf0b Mon Sep 17 00:00:00 2001 From: wulibaibao <13366578180@163.com> Date: Thu, 14 Mar 2024 16:01:11 +0800 Subject: [PATCH 07/16] =?UTF-8?q?feat:=20=E6=9B=B4=E6=94=B9=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/WorkSpace/Dashboard/services.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/WorkSpace/Dashboard/services.ts b/src/pages/WorkSpace/Dashboard/services.ts index 8cfa8198..49953c4c 100644 --- a/src/pages/WorkSpace/Dashboard/services.ts +++ b/src/pages/WorkSpace/Dashboard/services.ts @@ -17,5 +17,5 @@ export async function queryWorkspaceJobs(params: any) { } export async function postChangeJobProject(data: any) { - return request(`/api/sys/change_job_project/`, { data, method: 'POST' }) + return request(`/api/sys/workspace/change_job_project/`, { data, method: 'POST' }) } \ No newline at end of file -- Gitee From dc2c9c99ac0baa8249f7bc70c1b8b5f5bb738cc8 Mon Sep 17 00:00:00 2001 From: wulibaibao <13366578180@163.com> Date: Thu, 14 Mar 2024 16:10:28 +0800 Subject: [PATCH 08/16] =?UTF-8?q?feat:=20=E6=96=B0=E5=BB=BAJob=E4=B8=AD?= =?UTF-8?q?=E7=94=A8=E4=BE=8B=E9=AB=98=E7=BA=A7=E9=85=8D=E7=BD=AE=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E6=89=93=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WorkSpace/TestJob/components/SelectSuite/SuiteTable.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/WorkSpace/TestJob/components/SelectSuite/SuiteTable.tsx b/src/pages/WorkSpace/TestJob/components/SelectSuite/SuiteTable.tsx index b6cc1010..a8079a79 100644 --- a/src/pages/WorkSpace/TestJob/components/SelectSuite/SuiteTable.tsx +++ b/src/pages/WorkSpace/TestJob/components/SelectSuite/SuiteTable.tsx @@ -26,7 +26,7 @@ const TestJobSuiteTable: React.FC> = (props) => { const settingDrawerRef: any = useRef(null) const [hasCases, setHasCases] = useState(true) - const [checked, setChecked] = useState(false) + const [checked, setChecked] = useState(true) const [selectedSuiteKeys, setSelectedSuiteKeys] = useState([]) const [selectedCaseKeys, setSelectedCaseKeys] = useState([]) const [selectedCaseObj, setSelectedCaseObj] = useState({}) -- Gitee From 12b28d59336ad45924447c0c0e27d30e23711390 Mon Sep 17 00:00:00 2001 From: wulibaibao <13366578180@163.com> Date: Fri, 15 Mar 2024 17:26:53 +0800 Subject: [PATCH 09/16] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=9B=B4?= =?UTF-8?q?=E6=94=B9job=E9=A1=B9=E7=9B=AE=E5=90=8E=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Project/components/ChangeJobProjectDrawer.tsx | 2 +- .../Dashboard/Project/components/JobTable.tsx | 11 +++++++++-- src/pages/WorkSpace/locales/en-US.ts | 1 + src/pages/WorkSpace/locales/zh-CN.ts | 1 + 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/pages/WorkSpace/Dashboard/Project/components/ChangeJobProjectDrawer.tsx b/src/pages/WorkSpace/Dashboard/Project/components/ChangeJobProjectDrawer.tsx index ccda024c..34029918 100644 --- a/src/pages/WorkSpace/Dashboard/Project/components/ChangeJobProjectDrawer.tsx +++ b/src/pages/WorkSpace/Dashboard/Project/components/ChangeJobProjectDrawer.tsx @@ -90,7 +90,7 @@ const SelectionRowBar: React.ForwardRefRenderFunction = (props, ref) = { setPageParams(params) setLoading(false) } + const handleDelete = async (_: any) => { const { code, msg } = await deleteJobTest({ job_id: _.id }) if (code !== 200) { @@ -237,9 +238,15 @@ const JobTable: React.FC = () => { ] const handleChangeProjectOk = () => { - setSelectedRows([]) message.success('操作成功!') - getProjectJobs() + const page_num = Math.ceil((jobs?.total - selectedRows?.length) / pageParams.page_size) + const params = { ...pageParams, page_num } + + if (page_num < pageParams.page_num) + getProjectJobs(params) + else + getProjectJobs(pageParams) + setSelectedRows([]) } return ( diff --git a/src/pages/WorkSpace/locales/en-US.ts b/src/pages/WorkSpace/locales/en-US.ts index 20d81979..e443bce3 100644 --- a/src/pages/WorkSpace/locales/en-US.ts +++ b/src/pages/WorkSpace/locales/en-US.ts @@ -14,6 +14,7 @@ export default { 'Workspace.JobConfig.JobTypeUpdate': 'Edit Job Type', 'Workspace.JobConfig.CreateJobType': 'Create Job Type', 'Workspace.JobTypePreview': 'Preview Job Type', + 'Workspace.Dashboard': 'Dashboard', 'Workspace.Baseline': 'Baseline', 'Workspace.Baseline.GroupBaseline': aligroupServer_baseline_en, //这是引用变量不用翻译 diff --git a/src/pages/WorkSpace/locales/zh-CN.ts b/src/pages/WorkSpace/locales/zh-CN.ts index c46626c6..fda12006 100644 --- a/src/pages/WorkSpace/locales/zh-CN.ts +++ b/src/pages/WorkSpace/locales/zh-CN.ts @@ -17,6 +17,7 @@ export default { 'Workspace.JobConfig.JobTypeUpdate': 'Job类型编辑', 'Workspace.JobConfig.CreateJobType': '新建Job类型', 'Workspace.JobTypePreview': 'Job类型预览', + 'Workspace.Dashboard': 'Dashboard', 'Workspace.Baseline': '基线管理', 'Workspace.Baseline.GroupBaseline': aligroupServer_baseline, -- Gitee From 997f776ca9bc760109bdafbba16c015a17197764 Mon Sep 17 00:00:00 2001 From: wulibaibao <13366578180@163.com> Date: Wed, 20 Mar 2024 09:39:15 +0800 Subject: [PATCH 10/16] =?UTF-8?q?fix:=20=E9=98=B2=E6=AD=A2=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=BD=920?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/WorkSpace/TestResult/JobList/ListTable.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/WorkSpace/TestResult/JobList/ListTable.tsx b/src/pages/WorkSpace/TestResult/JobList/ListTable.tsx index 90cebe78..4f234cc9 100644 --- a/src/pages/WorkSpace/TestResult/JobList/ListTable.tsx +++ b/src/pages/WorkSpace/TestResult/JobList/ListTable.tsx @@ -110,7 +110,7 @@ const ListTable: React.FC = (props) => { message.success(formatMessage({ id: 'operation.success' })) const $page_num = Math.ceil((dataSource?.total - 1) / pageQuery.page_size) if ($page_num < pageQuery.page_num) - setPageQuery({ ...pageQuery, page_num: $page_num }) + setPageQuery({ ...pageQuery, page_num: $page_num || 1 }) else listRefresh() countRefresh() -- Gitee From 789868f8026ac1a8097c3b14cb1ed820730d7cef Mon Sep 17 00:00:00 2001 From: wulibaibao <13366578180@163.com> Date: Wed, 20 Mar 2024 10:35:43 +0800 Subject: [PATCH 11/16] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0=E9=A3=8E?= =?UTF-8?q?=E9=99=A9=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/ChangeJobProjectDrawer.tsx | 31 ++++++++++++++++--- .../Dashboard/Project/components/JobTable.tsx | 2 +- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/pages/WorkSpace/Dashboard/Project/components/ChangeJobProjectDrawer.tsx b/src/pages/WorkSpace/Dashboard/Project/components/ChangeJobProjectDrawer.tsx index 34029918..3b5fce38 100644 --- a/src/pages/WorkSpace/Dashboard/Project/components/ChangeJobProjectDrawer.tsx +++ b/src/pages/WorkSpace/Dashboard/Project/components/ChangeJobProjectDrawer.tsx @@ -1,4 +1,4 @@ -import { Drawer, Select, Space, Form, Row, Button, Spin, Empty, Typography } from 'antd' +import { Drawer, Select, Space, Form, Row, Button, Spin, Empty, Typography, Modal } from 'antd' import React from 'react' import { useRequest } from 'ahooks' import { useParams } from 'umi' @@ -70,7 +70,7 @@ const SelectionRowBar: React.ForwardRefRenderFunction = (props, ref) = form.resetFields() } - const handleAdd = async () => { + const handleConfirm = async () => { const values = await form.validateFields() if (loading) return setLoading(true) @@ -86,6 +86,29 @@ const SelectionRowBar: React.ForwardRefRenderFunction = (props, ref) = handleCancel() } + const handleAdd = async () => { + form.validateFields().then(() => { + Modal.confirm({ + title: '提示', + content: ( + + + 更改项目信息后可能影响以下历史数据展示: + + +
    +
  • 计划视图
  • +
  • 测试报告
  • +
  • 时序分析
  • +
+
+
+ ), + onOk: handleConfirm, + }) + }) + } + return ( = (props, ref) = +