diff --git a/frontend/src/components/business/ms-assertion/comp/ResponseBodyTab.vue b/frontend/src/components/business/ms-assertion/comp/ResponseBodyTab.vue
index de87c92fb7..0339d6f46d 100644
--- a/frontend/src/components/business/ms-assertion/comp/ResponseBodyTab.vue
+++ b/frontend/src/components/business/ms-assertion/comp/ResponseBodyTab.vue
@@ -38,6 +38,7 @@
v-model:model-value="record.expression"
class="ms-params-input"
:max-length="255"
+ size="mini"
:disabled="props.disabled"
:placeholder="t('apiTestDebug.commonPlaceholder')"
@input="() => handleExpressionChange(rowIndex)"
@@ -133,6 +134,7 @@
:disabled="props.disabled"
class="ms-params-input"
:max-length="255"
+ size="mini"
:placeholder="t('apiTestDebug.commonPlaceholder')"
@input="() => handleExpressionChange(rowIndex)"
@change="() => handleExpressionChange(rowIndex)"
@@ -281,6 +283,7 @@
:disabled="props.disabled"
class="ms-params-input"
:max-length="255"
+ size="mini"
@input="() => handleExpressionChange(rowIndex)"
@change="() => handleExpressionChange(rowIndex)"
>
@@ -457,7 +460,6 @@
dataIndex: 'condition',
slotName: 'condition',
options: statusCodeOptions,
- width: 120,
},
{
title: 'ms.assertion.matchValue',
diff --git a/frontend/src/components/business/ms-assertion/index.vue b/frontend/src/components/business/ms-assertion/index.vue
index 057ce25be8..bd6d2720ad 100644
--- a/frontend/src/components/business/ms-assertion/index.vue
+++ b/frontend/src/components/business/ms-assertion/index.vue
@@ -40,15 +40,13 @@
>
-
-
+
props.modelValue,
- (val) => {
- if (val) {
- selectValue.value = val as any;
- }
- },
- { immediate: true }
- );
-
watch(
() => props.keyword,
(val) => {
@@ -116,6 +106,9 @@
if (props.options) {
optionsList.value = props.options;
}
+ if (props.modelValue) {
+ selectValue.value = props.modelValue;
+ }
});
onMounted(() => {
diff --git a/frontend/src/models/projectManagement/environmental.ts b/frontend/src/models/projectManagement/environmental.ts
index 7236c7585a..bec1b3ce70 100644
--- a/frontend/src/models/projectManagement/environmental.ts
+++ b/frontend/src/models/projectManagement/environmental.ts
@@ -1,4 +1,4 @@
-import { ExecuteConditionProcessor } from '../apiTest/common';
+import { EnableKeyValueParam, ExecuteConditionProcessor } from '@/models/apiTest/common';
export interface EnvListItem {
mock?: boolean;
@@ -140,7 +140,7 @@ export interface HttpForm {
description?: string;
hostname: string;
type: string;
- headers: Record[];
+ headers: EnableKeyValueParam[];
// pathMatchRule: {
path: string;
condition: string;
diff --git a/frontend/src/views/api-test/components/condition/list.vue b/frontend/src/views/api-test/components/condition/list.vue
index 6e97b75dbe..6c4ea32be4 100644
--- a/frontend/src/views/api-test/components/condition/list.vue
+++ b/frontend/src/views/api-test/components/condition/list.vue
@@ -113,6 +113,12 @@
return data.value.filter((item: any) => item.processorType === RequestConditionProcessor.EXTRACT).length > 0;
});
+ const hasSql = computed(
+ () =>
+ data.value.filter((item: any) => item.processorType === RequestConditionProcessor.SQL).length > 0 &&
+ props.showPrePostRequest
+ );
+
const itemMoreActions: ActionsItem[] = [
{
label: 'common.copy',
@@ -131,7 +137,7 @@
watchEffect(() => {
activeItem.value = data.value.find((item) => item.id === props.activeId) || data.value[0] || {};
emit('activeChange', activeItem.value);
- if (hasPreAndPost.value || hasEXTRACT.value) {
+ if (hasPreAndPost.value || hasEXTRACT.value || hasSql.value) {
moreActions = itemMoreActions.slice(-1);
} else {
moreActions = itemMoreActions;
diff --git a/frontend/src/views/api-test/components/requestComposition/response/result/index.vue b/frontend/src/views/api-test/components/requestComposition/response/result/index.vue
index e7d850f5b2..6a14021212 100644
--- a/frontend/src/views/api-test/components/requestComposition/response/result/index.vue
+++ b/frontend/src/views/api-test/components/requestComposition/response/result/index.vue
@@ -61,7 +61,16 @@
-
{{ props.environmentName }}
+
+ {{
+ props.environmentName
+ }}
+
+ {{
+ props.environmentName
+ }}
+
+
@@ -112,7 +121,7 @@
import { reportCaseStepDetail, reportStepDetail } from '@/api/modules/api-test/report';
import { useI18n } from '@/hooks/useI18n';
- import { findNodeByKey } from '@/utils';
+ import { findNodeByKey, formatDuration } from '@/utils';
import type { ReportStepDetail, ReportStepDetailItem, ScenarioItemType } from '@/models/apiTest/report';
import { ResponseComposition, ScenarioStepType } from '@/enums/apiEnum';
diff --git a/frontend/src/views/api-test/management/components/management/api/apiTable.vue b/frontend/src/views/api-test/management/components/management/api/apiTable.vue
index 397fe26ff6..3f7039a01b 100644
--- a/frontend/src/views/api-test/management/components/management/api/apiTable.vue
+++ b/frontend/src/views/api-test/management/components/management/api/apiTable.vue
@@ -421,7 +421,7 @@
dataIndex: 'tags',
isTag: true,
isStringTag: true,
- width: 150,
+ width: 400,
showDrag: true,
},
{
diff --git a/frontend/src/views/api-test/management/components/management/case/caseTable.vue b/frontend/src/views/api-test/management/components/management/case/caseTable.vue
index d212323d73..958180a462 100644
--- a/frontend/src/views/api-test/management/components/management/case/caseTable.vue
+++ b/frontend/src/views/api-test/management/components/management/case/caseTable.vue
@@ -482,6 +482,7 @@
isTag: true,
isStringTag: true,
showDrag: true,
+ width: 400,
},
{
title: 'case.lastReportStatus',
diff --git a/frontend/src/views/api-test/report/component/caseReportCom.vue b/frontend/src/views/api-test/report/component/caseReportCom.vue
index 63cdc46766..328bcdf5e9 100644
--- a/frontend/src/views/api-test/report/component/caseReportCom.vue
+++ b/frontend/src/views/api-test/report/component/caseReportCom.vue
@@ -1,74 +1,14 @@
-
+
{{ t('report.detail.api.requestAnalysis') }}
-
-
-
@@ -76,15 +16,17 @@
{{ t('report.detail.api.totalTime') }}
- {{ getTotalTime.split('-')[0] || '-' }}{{ getTotalTime.split('-')[0] || 0 }}{{ getTotalTime.split('-')[1] || 'ms' }}
{{ t('report.detail.api.requestTotalTime') }}
- {{ formatDuration(detail.requestDuration).split('-')[0] || '-' }}{{
+ detail.requestDuration !== null ? formatDuration(detail.requestDuration).split('-')[0] : '-'
+ }}{{
- formatDuration(detail.requestDuration).split('-')[1] || 'ms'
+ detail.requestDuration !== null ? formatDuration(detail.requestDuration).split('-')[1] : 'ms'
}}
@@ -132,7 +74,7 @@
-
+
import { ref } from 'vue';
import { useRoute } from 'vue-router';
- import dayjs from 'dayjs';
+ import { cloneDeep } from 'lodash-es';
import SetReportChart from './case/setReportChart.vue';
+ import ReportDetailHeader from './reportDetailHeader.vue';
import reportInfoHeader from './step/reportInfoHeaders.vue';
import TiledList from './tiledList.vue';
@@ -329,7 +272,12 @@
rateKey: 'requestPendingRate',
},
];
- const validArr = props?.detailInfo?.integrated ? tempArr : tempArr.slice(0, 1);
+ let validArr;
+ if (props?.detailInfo?.integrated) {
+ validArr = cloneDeep(tempArr);
+ } else {
+ validArr = props?.detailInfo?.status === 'SUCCESS' ? [tempArr[0]] : [tempArr[2]];
+ }
charOptions.value.series.data = validArr.map((item: any) => {
return {
value: detail.value[item.value] || 0,
diff --git a/frontend/src/views/api-test/report/component/reportDetailHeader.vue b/frontend/src/views/api-test/report/component/reportDetailHeader.vue
new file mode 100644
index 0000000000..83b90bb255
--- /dev/null
+++ b/frontend/src/views/api-test/report/component/reportDetailHeader.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
diff --git a/frontend/src/views/api-test/report/component/reportList.vue b/frontend/src/views/api-test/report/component/reportList.vue
index ba110e3ce0..c9a9620fb6 100644
--- a/frontend/src/views/api-test/report/component/reportList.vue
+++ b/frontend/src/views/api-test/report/component/reportList.vue
@@ -27,7 +27,7 @@
{{ characterLimit(record.name) }}
@@ -87,8 +87,12 @@
-
-
+
+
@@ -153,6 +157,7 @@
diff --git a/frontend/src/views/api-test/report/component/step/stepDrawer.vue b/frontend/src/views/api-test/report/component/step/stepDrawer.vue
index c3df887de2..cdfabcb31a 100644
--- a/frontend/src/views/api-test/report/component/step/stepDrawer.vue
+++ b/frontend/src/views/api-test/report/component/step/stepDrawer.vue
@@ -39,6 +39,7 @@
import { useI18n } from '@/hooks/useI18n';
import type { ScenarioItemType } from '@/models/apiTest/report';
+ import { ScenarioStepType } from '@/enums/apiEnum';
const { t } = useI18n();
const props = defineProps<{
@@ -65,12 +66,12 @@
});
const showCondition = ref([
- 'API',
- 'API_CASE',
- ' CUSTOM_REQUEST',
- ' LOOP_CONTROLLER',
- 'IF_CONTROLLER',
- 'ONCE_ONLY_CONTROLLER',
+ ScenarioStepType.API,
+ ScenarioStepType.API_CASE,
+ ScenarioStepType.CUSTOM_REQUEST,
+ ScenarioStepType.LOOP_CONTROLLER,
+ ScenarioStepType.IF_CONTROLLER,
+ ScenarioStepType.ONCE_ONLY_CONTROLLER,
]);
diff --git a/frontend/src/views/api-test/report/component/step/stepTree.vue b/frontend/src/views/api-test/report/component/step/stepTree.vue
index 9ff2d1744c..ce3a329924 100644
--- a/frontend/src/views/api-test/report/component/step/stepTree.vue
+++ b/frontend/src/views/api-test/report/component/step/stepTree.vue
@@ -71,7 +71,7 @@
-
+
- {{ t('report.detail.api.statusCode') }}
+ {{ t('report.detail.api.statusCode') }}
-
+
{{ step.code || '-' }}
@@ -109,25 +113,39 @@
-
+
+
{{ t('report.detail.api.responseTime') }}
- {{ step.requestTime ? formatDuration(step.requestTime).split('-')[0] : '-'
- }}{{ step.requestTime ? formatDuration(step.requestTime).split('-')[1] : 'ms' }}
-
-
- {{ t('report.detail.api.responseSize') }}
- {{ step.responseSize || 0 }} bytes
-
-
- {{ t('report.detail.api.responseSize') }}
- {{ step.responseSize || 0 }} bytes
+ {{ step.requestTime !== null ? formatDuration(step.requestTime).split('-')[0] : '-'
+ }}{{ step.requestTime !== null ? formatDuration(step.requestTime).split('-')[1] : 'ms' }}
-
-
+
+
+ {{ t('report.detail.api.responseTime') }}
+ {{ step.requestTime !== null ? formatDuration(step.requestTime).split('-')[0] : '-'
+ }}{{
+ step.requestTime !== null ? formatDuration(step.requestTime).split('-')[1] : 'ms'
+ }}
+
+
+
+ {{ t('report.detail.api.responseSize') }}
+
+ {{ step.responseSize || 0 }} bytes
+
+
+ {{ t('report.detail.api.responseSize') }}
+ {{ step.responseSize || 0 }} bytes
+
+
diff --git a/frontend/src/views/case-management/caseManagementFeature/components/tabContent/tabComment/tabCommentIndex.vue b/frontend/src/views/case-management/caseManagementFeature/components/tabContent/tabComment/tabCommentIndex.vue
index 4d3ca1bcff..be05459ef5 100644
--- a/frontend/src/views/case-management/caseManagementFeature/components/tabContent/tabComment/tabCommentIndex.vue
+++ b/frontend/src/views/case-management/caseManagementFeature/components/tabContent/tabComment/tabCommentIndex.vue
@@ -51,13 +51,13 @@
{{ dayjs(item.createTime).format('YYYY-MM-DD HH:mm:ss') }}
-
+
{{ characterLimit(item.reviewName) }}
{{ characterLimit(item.reviewName) }}
diff --git a/frontend/src/views/case-management/caseManagementFeature/components/tabContent/tabDemand/associatedDemandTable.vue b/frontend/src/views/case-management/caseManagementFeature/components/tabContent/tabDemand/associatedDemandTable.vue
index e1062b54a8..b321fddba8 100644
--- a/frontend/src/views/case-management/caseManagementFeature/components/tabContent/tabDemand/associatedDemandTable.vue
+++ b/frontend/src/views/case-management/caseManagementFeature/components/tabContent/tabDemand/associatedDemandTable.vue
@@ -3,7 +3,7 @@
{{ characterLimit(record.demandName) }} ({{ (record.children || []).length || 0 }})
+ >({{ (record.children || []).length || 0 }})
- {{
+
{{
props.id ? t('system.userGroup.rename') : t('system.userGroup.createUserGroup')
}}
@@ -118,43 +101,43 @@
emit('cancel', false);
};
- const handleBeforeOk = () => {
+ const handleBeforeOk = (done?: (closed: boolean) => void) => {
formRef.value?.validate(async (errors: undefined | Record
) => {
- if (errors) {
- return false;
- }
- // let res: EnvListItem;
- try {
- loading.value = true;
+ if (!errors) {
+ try {
+ loading.value = true;
- if (props.type === EnvAuthScopeEnum.PROJECT) {
- await updateOrAddEnv({ fileList: [], request: { ...store.currentEnvDetailInfo, name: form.name } });
- } else {
- const id = store.currentGroupId === NEW_ENV_GROUP ? undefined : store.currentGroupId;
- if (id) {
- const detail: Record = await getGroupDetailEnv(id);
- const envGroupProject = detail?.environmentGroupInfo.filter(
- (item: any) => item.projectId && item.environmentId
- );
- const params = {
- id,
- name: form.name,
- description: detail.description,
- projectId: appStore.currentProjectId,
- envGroupProject,
- };
+ if (props.type === EnvAuthScopeEnum.PROJECT) {
+ await updateOrAddEnv({ fileList: [], request: { ...store.currentEnvDetailInfo, name: form.name } });
+ } else {
+ const id = store.currentGroupId === NEW_ENV_GROUP ? undefined : store.currentGroupId;
+ if (id) {
+ const detail: Record = await getGroupDetailEnv(id);
+ const envGroupProject = detail?.environmentGroupInfo.filter(
+ (item: any) => item.projectId && item.environmentId
+ );
+ const params = {
+ id,
+ name: form.name,
+ description: detail.description,
+ projectId: appStore.currentProjectId,
+ envGroupProject,
+ };
- await groupUpdateEnv(params);
+ await groupUpdateEnv(params);
+ }
}
+ Message.success(t('project.fileManagement.renameSuccess'));
+ emit('success');
+ handleCancel();
+ } catch (error) {
+ // eslint-disable-next-line no-console
+ console.error(error);
+ } finally {
+ loading.value = false;
}
- Message.success(t('project.fileManagement.renameSuccess'));
- emit('success');
- handleCancel();
- } catch (error) {
- // eslint-disable-next-line no-console
- console.error(error);
- } finally {
- loading.value = false;
+ } else if (done) {
+ done(false);
}
});
};
diff --git a/frontend/src/views/project-management/environmental/components/envParams/DatabaseTab.vue b/frontend/src/views/project-management/environmental/components/envParams/DatabaseTab.vue
index 41770a2841..7cb35283fd 100644
--- a/frontend/src/views/project-management/environmental/components/envParams/DatabaseTab.vue
+++ b/frontend/src/views/project-management/environmental/components/envParams/DatabaseTab.vue
@@ -7,6 +7,7 @@
v-model="keyword"
class="w-[240px]"
allow-clear
+ :placeholder="t('project.menu.nameSearch')"
@press-enter="fetchData"
@search="fetchData"
>
diff --git a/frontend/src/views/project-management/environmental/components/envParams/HttpTab.vue b/frontend/src/views/project-management/environmental/components/envParams/HttpTab.vue
index 3c49b973e1..d9a72f07d2 100644
--- a/frontend/src/views/project-management/environmental/components/envParams/HttpTab.vue
+++ b/frontend/src/views/project-management/environmental/components/envParams/HttpTab.vue
@@ -74,6 +74,17 @@
/>
+
+
+ {{
+ t('caseManagement.caseReview.tableNoData')
+ }}
+ {{ t('caseManagement.featureCase.tableNoData') }}
+
+ {{ t('project.environmental.addHttp') }}
+
+
+