diff --git a/frontend/src/components/pure/ms-code-editor/index.vue b/frontend/src/components/pure/ms-code-editor/index.vue index 970729beba..80462e4910 100644 --- a/frontend/src/components/pure/ms-code-editor/index.vue +++ b/frontend/src/components/pure/ms-code-editor/index.vue @@ -364,9 +364,10 @@ diff --git a/frontend/src/views/api-test/components/requestComposition/postcondition.vue b/frontend/src/views/api-test/components/requestComposition/postcondition.vue index 3e22887f16..9a418595d6 100644 --- a/frontend/src/views/api-test/components/requestComposition/postcondition.vue +++ b/frontend/src/views/api-test/components/requestComposition/postcondition.vue @@ -6,7 +6,6 @@ add-text="apiTestDebug.postCondition" :response="props.response" :disabled="props.disabled" - :height-used="heightUsed" :sql-code-editor-height="props.sqlCodeEditorHeight" @change="emit('change')" > @@ -43,8 +42,6 @@ const props = defineProps<{ config: ExecuteConditionConfig; - secondBoxHeight?: number; - layout: 'horizontal' | 'vertical'; response?: string; // 响应内容 isDefinition?: boolean; // 是否是定义页面 isScenario?: boolean; // 是否是场景页面 @@ -59,12 +56,6 @@ const { t } = useI18n(); const innerConfig = useVModel(props, 'config', emit); - const heightUsed = computed(() => { - if (props.layout === 'horizontal') { - return 328; - } - return 328 + (props.secondBoxHeight || 0); - }); const conditionTypes = computed(() => { if (props.isDefinition) { diff --git a/frontend/src/views/api-test/components/requestComposition/query.vue b/frontend/src/views/api-test/components/requestComposition/query.vue index e6d00ee1cd..e921ee2600 100644 --- a/frontend/src/views/api-test/components/requestComposition/query.vue +++ b/frontend/src/views/api-test/components/requestComposition/query.vue @@ -15,7 +15,6 @@ :disabled-param-value="props.disabledParamValue" :disabled-except-param="props.disabledExceptParam" :columns="columns" - :height-used="heightUsed" :scroll="{ minWidth: 1160 }" :show-setting="true" :table-key="TableKeyEnum.API_TEST_DEBUG_QUERY" @@ -51,11 +50,8 @@ const props = defineProps<{ params: ExecuteRequestCommonParam[]; - layout: 'horizontal' | 'vertical'; disabledParamValue?: boolean; // 参数值禁用 disabledExceptParam?: boolean; // 除了可以修改参数值其他都禁用 - secondBoxHeight: number; - isDrawer?: boolean; }>(); const emit = defineEmits<{ (e: 'update:params', value: any[]): void; @@ -124,30 +120,6 @@ ]); const batchAddKeyValVisible = ref(false); - const heightUsed = ref(undefined); - - watch( - () => props.layout, - (val) => { - const otherHeight = props.isDrawer ? 328 : 372; - heightUsed.value = val === 'horizontal' ? otherHeight : otherHeight + props.secondBoxHeight; - }, - { - immediate: true, - } - ); - - watch( - () => props.secondBoxHeight, - (val) => { - if (props.layout === 'vertical') { - heightUsed.value = (props.isDrawer ? 328 : 372) + val; - } - }, - { - immediate: true, - } - ); /** * 批量参数代码转换为参数表格数据 diff --git a/frontend/src/views/api-test/components/requestComposition/response/edit.vue b/frontend/src/views/api-test/components/requestComposition/response/edit.vue index 07acfe649e..3252202be8 100644 --- a/frontend/src/views/api-test/components/requestComposition/response/edit.vue +++ b/frontend/src/views/api-test/components/requestComposition/response/edit.vue @@ -117,7 +117,6 @@ activeResponse.body.bodyType ) " - class="h-[calc(100%-35px)]" > @@ -368,7 +335,6 @@ import MsDrawer from '@/components/pure/ms-drawer/index.vue'; import MsFormCreate from '@/components/pure/ms-form-create/formCreate.vue'; import MsIcon from '@/components/pure/ms-icon-font/index.vue'; - import MsSplitBox from '@/components/pure/ms-split-box/index.vue'; import MsTab from '@/components/pure/ms-tab/index.vue'; import assertion from '@/components/business/ms-assertion/index.vue'; import loopPagination from './loopPagination.vue'; @@ -936,47 +902,13 @@ const showResponse = computed( () => isHttpProtocol.value || requestVModel.value.response?.requestResults[0]?.responseResult.responseCode ); - const splitBoxSize = ref(!showResponse.value ? 1 : 0.6); const activeLayout = ref<'horizontal' | 'vertical'>('vertical'); - const splitContainerRef = ref(); - const secondBoxHeight = ref(0); - - watch( - () => splitBoxSize.value, - debounce((val) => { - // 动画 300ms - if (splitContainerRef.value) { - if (typeof val === 'string' && val.includes('px')) { - val = Number(val.split('px')[0]); - secondBoxHeight.value = splitContainerRef.value.clientHeight - val; - } else { - secondBoxHeight.value = splitContainerRef.value.clientHeight * (1 - val); - } - } - }, 300), - { - immediate: true, - } - ); - - const verticalSplitBoxRef = ref>(); - const isVerticalExpanded = ref(true); - - function handleVerticalExpandChange(val: boolean) { - isVerticalExpanded.value = val; - } + const isVerticalExpanded = computed(() => activeLayout.value === 'vertical'); + const responseRef = ref>(); function changeVerticalExpand(val: boolean) { - isVerticalExpanded.value = val; - if (val) { - verticalSplitBoxRef.value?.expand(0.6); - } else { - verticalSplitBoxRef.value?.collapse( - splitContainerRef.value ? `${splitContainerRef.value.clientHeight - 42}px` : 0 - ); - } + responseRef.value?.changeExpand(val); } - watch( () => showResponse.value, (val) => { @@ -984,19 +916,12 @@ if (val) { changeVerticalExpand(true); } else { - isVerticalExpanded.value = false; - verticalSplitBoxRef.value?.collapse(1); + changeVerticalExpand(false); } }); } ); - function handleActiveLayoutChange() { - isVerticalExpanded.value = true; - splitBoxSize.value = 0.6; - verticalSplitBoxRef.value?.expand(0.6); - } - /** * 生成请求参数 * @param executeType 执行类型,执行时传入 @@ -1373,10 +1298,6 @@ .btn-base-primary-disabled(); } } - .tab-pane-container { - @apply flex-1 overflow-y-auto; - .ms-scroll-bar(); - } :deep(.no-content) { .arco-tabs-content { display: none; @@ -1388,4 +1309,29 @@ :deep(.arco-tabs-tab) { @apply leading-none; } + .request-tab-and-response { + overflow-x: hidden; + overflow-y: auto; + .ms-scroll-bar(); + } + .sticky-content { + @apply sticky bg-white; + + z-index: 101; + } + .request-content-and-response { + display: flex; + &.vertical { + flex-direction: column; + .response :deep(.response-head) { + @apply sticky bg-white; + + top: 48px; // 请求参数tab高度(不算border-bottom) + z-index: 11; + } + .request-tab-pane { + min-height: 400px; + } + } + } diff --git a/frontend/src/views/api-test/scenario/components/common/customCaseDrawer.vue b/frontend/src/views/api-test/scenario/components/common/customCaseDrawer.vue index 1b2f6a92b1..62d8f8c35f 100644 --- a/frontend/src/views/api-test/scenario/components/common/customCaseDrawer.vue +++ b/frontend/src/views/api-test/scenario/components/common/customCaseDrawer.vue @@ -114,161 +114,131 @@ -
+
-
-
- - - - + + + + + + + + + + + +
+ + + + +
@@ -282,7 +252,6 @@ import MsButton from '@/components/pure/ms-button/index.vue'; import MsDrawer from '@/components/pure/ms-drawer/index.vue'; import MsFormCreate from '@/components/pure/ms-form-create/formCreate.vue'; - import MsSplitBox from '@/components/pure/ms-split-box/index.vue'; import MsTab from '@/components/pure/ms-tab/index.vue'; import assertion from '@/components/business/ms-assertion/index.vue'; import loopPagination from './loopPagination.vue'; @@ -772,47 +741,13 @@ const showResponse = computed( () => isHttpProtocol.value || requestVModel.value.response?.requestResults[0]?.responseResult.responseCode ); - const splitBoxSize = ref(!showResponse.value ? 1 : 0.6); const activeLayout = ref<'horizontal' | 'vertical'>('vertical'); - const splitContainerRef = ref(); - const secondBoxHeight = ref(0); - - watch( - () => splitBoxSize.value, - debounce((val) => { - // 动画 300ms - if (splitContainerRef.value) { - if (typeof val === 'string' && val.includes('px')) { - val = Number(val.split('px')[0]); - secondBoxHeight.value = splitContainerRef.value.clientHeight - val; - } else { - secondBoxHeight.value = splitContainerRef.value.clientHeight * (1 - val); - } - } - }, 300), - { - immediate: true, - } - ); - - const verticalSplitBoxRef = ref>(); - const isVerticalExpanded = ref(true); - - function handleVerticalExpandChange(val: boolean) { - isVerticalExpanded.value = val; - } + const isVerticalExpanded = computed(() => activeLayout.value === 'vertical'); + const responseRef = ref>(); function changeVerticalExpand(val: boolean) { - isVerticalExpanded.value = val; - if (val) { - verticalSplitBoxRef.value?.expand(0.6); - } else { - verticalSplitBoxRef.value?.collapse( - splitContainerRef.value ? `${splitContainerRef.value.clientHeight - 42}px` : 0 - ); - } + responseRef.value?.changeExpand(val); } - watch( () => showResponse.value, (val) => { @@ -820,19 +755,12 @@ if (val) { changeVerticalExpand(true); } else { - isVerticalExpanded.value = false; - verticalSplitBoxRef.value?.collapse(1); + changeVerticalExpand(false); } }); } ); - function handleActiveLayoutChange() { - isVerticalExpanded.value = true; - splitBoxSize.value = 0.6; - verticalSplitBoxRef.value?.expand(0.6); - } - /** * 生成请求参数 * @param executeType 执行类型,执行时传入 @@ -1132,14 +1060,35 @@ .btn-base-primary-disabled(); } } - .tab-pane-container { - @apply flex-1 overflow-y-auto; - .ms-scroll-bar(); - } :deep(.arco-tabs-tab:first-child) { margin-left: 0; } :deep(.arco-tabs-tab) { @apply leading-none; } + .request-tab-and-response { + overflow-x: hidden; + overflow-y: auto; + .ms-scroll-bar(); + } + .sticky-content { + @apply sticky bg-white; + + z-index: 101; + } + .request-content-and-response { + display: flex; + &.vertical { + flex-direction: column; + .response :deep(.response-head) { + @apply sticky bg-white; + + top: 48px; // 请求参数tab高度(不算border-bottom) + z-index: 11; + } + .request-tab-pane { + min-height: 400px; + } + } + } diff --git a/frontend/src/views/api-test/scenario/components/prePost.vue b/frontend/src/views/api-test/scenario/components/prePost.vue index f526dda96b..b1c2749961 100644 --- a/frontend/src/views/api-test/scenario/components/prePost.vue +++ b/frontend/src/views/api-test/scenario/components/prePost.vue @@ -24,7 +24,6 @@ ('vertical'); const preProcessorConfig = defineModel('preProcessorConfig', { required: true, }); diff --git a/frontend/src/views/project-management/environmental/components/envParams/PostTab.vue b/frontend/src/views/project-management/environmental/components/envParams/PostTab.vue index 78f5f6aa4a..708f50d248 100644 --- a/frontend/src/views/project-management/environmental/components/envParams/PostTab.vue +++ b/frontend/src/views/project-management/environmental/components/envParams/PostTab.vue @@ -4,7 +4,6 @@ :condition-types="[RequestConditionProcessor.SCRIPT, RequestConditionProcessor.SQL]" add-text="apiTestDebug.postCondition" response="" - :height-used="600" :show-associated-scene="props.showAssociatedScene" :show-pre-post-request="props.showPrePostRequest" :request-radio-text-props="props.requestRadioTextProps" diff --git a/frontend/src/views/project-management/environmental/components/envParams/PreTab.vue b/frontend/src/views/project-management/environmental/components/envParams/PreTab.vue index ce79eb907b..060561fcba 100644 --- a/frontend/src/views/project-management/environmental/components/envParams/PreTab.vue +++ b/frontend/src/views/project-management/environmental/components/envParams/PreTab.vue @@ -4,7 +4,6 @@ :condition-types="[RequestConditionProcessor.SCRIPT, RequestConditionProcessor.SQL]" add-text="apiTestDebug.precondition" response="" - :height-used="600" :show-associated-scene="props.showAssociatedScene" :show-pre-post-request="props.showPrePostRequest" :request-radio-text-props="props.requestRadioTextProps" diff --git a/frontend/src/views/project-management/environmental/components/envParams/popUp/AddHttpDrawer.vue b/frontend/src/views/project-management/environmental/components/envParams/popUp/AddHttpDrawer.vue index b906fcd20a..bff5d280a3 100644 --- a/frontend/src/views/project-management/environmental/components/envParams/popUp/AddHttpDrawer.vue +++ b/frontend/src/views/project-management/environmental/components/envParams/popUp/AddHttpDrawer.vue @@ -175,7 +175,6 @@ :layout="activeLayout" :disabled-param-value="false" :disabled-except-param="false" - :second-box-height="secondBoxHeight" :type-title="t('project.environmental.requestHeader')" /> @@ -303,7 +302,6 @@ const form = ref({ ...initForm }); const hostType = ref('http://'); - const secondBoxHeight = ref(0); const activeLayout = ref<'horizontal' | 'vertical'>('vertical'); const httpRef = ref(); diff --git a/frontend/src/views/project-management/environmental/components/requestHeader/index.vue b/frontend/src/views/project-management/environmental/components/requestHeader/index.vue index 4ce80d9acd..a9c549d133 100644 --- a/frontend/src/views/project-management/environmental/components/requestHeader/index.vue +++ b/frontend/src/views/project-management/environmental/components/requestHeader/index.vue @@ -4,7 +4,6 @@ :layout="activeLayout" :disabled-param-value="props.disabledParamValue" :disabled-except-param="props.disabledExceptParam" - :second-box-height="secondBoxHeight" @change="emit('change')" /> @@ -32,7 +31,6 @@ }>(); const innerParams = useVModel(props, 'params', emit); - const secondBoxHeight = ref(0); const activeLayout = ref<'horizontal' | 'vertical'>('vertical');