diff --git a/frontend/package.json b/frontend/package.json
index 918827494f..423574bff2 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -37,7 +37,7 @@
"dependencies": {
"@7polo/kity": "2.0.8",
"@7polo/kityminder-core": "1.4.53",
- "@arco-design/web-vue": "^2.54.3",
+ "@arco-design/web-vue": "^2.54.4",
"@arco-themes/vue-ms-theme-default": "^0.0.30",
"@form-create/arco-design": "^3.1.23",
"@halo-dev/richtext-editor": "0.0.0-alpha.33",
@@ -48,7 +48,7 @@
"@tiptap/vue-3": "^2.1.13",
"@types/color": "^3.0.4",
"@types/node": "^20.11.16",
- "@vueuse/core": "^10.4.1",
+ "@vueuse/core": "^10.7.2",
"@xmldom/xmldom": "^0.8.10",
"ace-builds": "^1.24.2",
"ahooks-vue": "^0.15.1",
diff --git a/frontend/src/components/business/ms-params-input/config.ts b/frontend/src/components/business/ms-params-input/config.ts
index 33007f6f91..d41e626c19 100644
--- a/frontend/src/components/business/ms-params-input/config.ts
+++ b/frontend/src/components/business/ms-params-input/config.ts
@@ -446,13 +446,13 @@ export const mockFunctions: MockParamItem[] = [
inputGroup: [
{
type: 'number',
- value: NaN,
+ value: undefined,
label: 'start',
placeholder: 'ms.paramsInput.substrStartPlaceholder',
},
{
type: 'number',
- value: NaN,
+ value: undefined,
label: 'end',
placeholder: 'ms.paramsInput.substrEndPlaceholder',
},
@@ -896,6 +896,7 @@ export const JMeterAllVars = [
];
// 同名函数但参数不同,需要特殊处理
export const sameFuncNameVars = [
+ '@county(true)',
'@character(pool)',
"@character('lower')",
"@character('upper')",
@@ -905,4 +906,4 @@ export const sameFuncNameVars = [
'@integer(1,100)',
];
// 带形参的函数集合,指的是函数入参为形参,如果用户未填写实参则不需要填充到入参框中
-export const formalParameterVars = ['@character(pool)', '@idCard(birth)'];
+export const formalParameterVars = ['@character(pool)', '@idCard(birth)', '@natural(1,100)', '@integer(1,100)'];
diff --git a/frontend/src/components/business/ms-params-input/index.vue b/frontend/src/components/business/ms-params-input/index.vue
index e46250e661..da1bf6e634 100644
--- a/frontend/src/components/business/ms-params-input/index.vue
+++ b/frontend/src/components/business/ms-params-input/index.vue
@@ -80,6 +80,7 @@
v-model:model-value="paramForm.func"
:options="paramFuncOptions"
:placeholder="t('ms.paramsInput.commonSelectPlaceholder')"
+ allow-clear
@change="(val) => handleParamFuncChange(val as string)"
>
@@ -228,8 +229,8 @@
diff --git a/frontend/src/views/api-test/debug/components/debug/header.vue b/frontend/src/views/api-test/debug/components/debug/header.vue
index d64b30eedf..f05076ff61 100644
--- a/frontend/src/views/api-test/debug/components/debug/header.vue
+++ b/frontend/src/views/api-test/debug/components/debug/header.vue
@@ -38,12 +38,12 @@
const { t } = useI18n();
const innerParams = useVModel(props, 'params', emit);
- const defaultParamItem = ref({
+ const defaultParamItem = {
key: '',
value: '',
description: '',
enable: true,
- });
+ };
const columns: ParamTableColumn[] = [
{
diff --git a/frontend/src/views/api-test/debug/components/debug/index.vue b/frontend/src/views/api-test/debug/components/debug/index.vue
index 83a678259d..719e1838eb 100644
--- a/frontend/src/views/api-test/debug/components/debug/index.vue
+++ b/frontend/src/views/api-test/debug/components/debug/index.vue
@@ -122,12 +122,12 @@
/>
diff --git a/frontend/src/views/api-test/debug/components/debug/query.vue b/frontend/src/views/api-test/debug/components/debug/query.vue
index 5c37aa56ca..cae1572e87 100644
--- a/frontend/src/views/api-test/debug/components/debug/query.vue
+++ b/frontend/src/views/api-test/debug/components/debug/query.vue
@@ -9,13 +9,14 @@
/>
-
+
@@ -44,23 +45,34 @@
const { t } = useI18n();
const innerParams = useVModel(props, 'params', emit);
+ const defaultParamItem = {
+ key: '',
+ value: '',
+ paramType: RequestParamsType.STRING,
+ description: '',
+ required: false,
+ maxLength: undefined,
+ minLength: undefined,
+ encode: false,
+ enable: true,
+ };
const columns: ParamTableColumn[] = [
{
title: 'apiTestDebug.paramName',
- dataIndex: 'name',
- slotName: 'name',
+ dataIndex: 'key',
+ slotName: 'key',
},
{
title: 'apiTestDebug.paramType',
- dataIndex: 'type',
- slotName: 'type',
+ dataIndex: 'paramType',
+ slotName: 'paramType',
hasRequired: true,
- typeOptions: Object.keys(RequestParamsType)
- .filter((key) => ![RequestParamsType.JSON, RequestParamsType.FILE].includes(key as RequestParamsType))
- .map((key) => ({
- label: RequestParamsType[key],
- value: key,
+ typeOptions: Object.values(RequestParamsType)
+ .filter((val) => ![RequestParamsType.JSON, RequestParamsType.FILE].includes(val))
+ .map((val) => ({
+ label: val,
+ value: val,
})),
width: 120,
},
@@ -81,6 +93,7 @@
dataIndex: 'encode',
slotName: 'encode',
titleSlotName: 'encodeTitle',
+ width: 80,
},
{
title: 'apiTestDebug.desc',
diff --git a/frontend/src/views/api-test/debug/components/debug/rest.vue b/frontend/src/views/api-test/debug/components/debug/rest.vue
index a5ce5961ae..f469ec5816 100644
--- a/frontend/src/views/api-test/debug/components/debug/rest.vue
+++ b/frontend/src/views/api-test/debug/components/debug/rest.vue
@@ -9,13 +9,14 @@
/>
-
+
@@ -44,23 +45,34 @@
const { t } = useI18n();
const innerParams = useVModel(props, 'params', emit);
+ const defaultParamItem = {
+ key: '',
+ value: '',
+ paramType: RequestParamsType.STRING,
+ description: '',
+ required: false,
+ maxLength: undefined,
+ minLength: undefined,
+ encode: false,
+ enable: true,
+ };
const columns: ParamTableColumn[] = [
{
title: 'apiTestDebug.paramName',
- dataIndex: 'name',
- slotName: 'name',
+ dataIndex: 'key',
+ slotName: 'key',
},
{
title: 'apiTestDebug.paramType',
- dataIndex: 'type',
- slotName: 'type',
+ dataIndex: 'paramType',
+ slotName: 'paramType',
hasRequired: true,
- typeOptions: Object.keys(RequestParamsType)
- .filter((key) => ![RequestParamsType.JSON, RequestParamsType.FILE].includes(key as RequestParamsType))
- .map((key) => ({
- label: RequestParamsType[key],
- value: key,
+ typeOptions: Object.values(RequestParamsType)
+ .filter((val) => ![RequestParamsType.JSON, RequestParamsType.FILE].includes(val as RequestParamsType))
+ .map((val) => ({
+ label: val,
+ value: val,
})),
width: 120,
},
@@ -81,6 +93,7 @@
dataIndex: 'encode',
slotName: 'encode',
titleSlotName: 'encodeTitle',
+ width: 80,
},
{
title: 'apiTestDebug.desc',
diff --git a/frontend/src/views/api-test/debug/components/debug/setting.vue b/frontend/src/views/api-test/debug/components/debug/setting.vue
index 6e099eb2e2..a0e8d08f31 100644
--- a/frontend/src/views/api-test/debug/components/debug/setting.vue
+++ b/frontend/src/views/api-test/debug/components/debug/setting.vue
@@ -42,8 +42,17 @@
/>
- {{ t('apiTestDebug.follow') }}
-
+ handleFollowRedirectsChange(val as boolean)"
+ >
+ {{ t('apiTestDebug.follow') }}
+
+ handleAutoRedirectsChange(val as boolean)"
+ >
{{ t('apiTestDebug.auto') }}
@@ -76,6 +85,18 @@
},
{ deep: true }
);
+
+ function handleFollowRedirectsChange(val: boolean) {
+ if (val) {
+ settingForm.value.autoRedirects = false;
+ }
+ }
+
+ function handleAutoRedirectsChange(val: boolean) {
+ if (val) {
+ settingForm.value.followRedirects = false;
+ }
+ }
diff --git a/frontend/src/views/api-test/debug/components/moduleTree.vue b/frontend/src/views/api-test/debug/components/moduleTree.vue
index 32d3c1319e..da739be0aa 100644
--- a/frontend/src/views/api-test/debug/components/moduleTree.vue
+++ b/frontend/src/views/api-test/debug/components/moduleTree.vue
@@ -337,6 +337,7 @@
defineExpose({
initModules,
+ initModuleCount,
});
diff --git a/frontend/src/views/api-test/debug/index.vue b/frontend/src/views/api-test/debug/index.vue
index 7cd4a7622b..ffbbf1e926 100644
--- a/frontend/src/views/api-test/debug/index.vue
+++ b/frontend/src/views/api-test/debug/index.vue
@@ -1,9 +1,11 @@
-
+
+
(folderTree = val)"
@new-api="newApi"
@click-api-node="handleApiNodeClick"
@@ -13,7 +15,12 @@
-
+
@@ -62,14 +69,16 @@
import { parseCurlScript } from '@/utils';
import { ModuleTreeNode } from '@/models/common';
- import { RequestContentTypeEnum } from '@/enums/apiEnum';
+ import { RequestContentTypeEnum, RequestParamsType } from '@/enums/apiEnum';
const { t } = useI18n();
+ const moduleTreeRef = ref>();
const debugRef = ref>();
const folderTree = ref([]);
const importDrawerVisible = ref(false);
const curlCode = ref('');
+ const loading = ref(false);
function newApi() {
debugRef.value?.addDebugTab();
@@ -79,31 +88,20 @@
const { url, headers, queryParameters } = parseCurlScript(curlCode.value);
debugRef.value?.addDebugTab({
url,
- headerParams: headers?.map((e) => ({
- required: false,
- type: 'string',
- min: undefined,
- max: undefined,
+ headers: headers?.map((e) => ({
contentType: RequestContentTypeEnum.TEXT,
- tag: [],
- desc: '',
- encode: false,
- enable: false,
- mustContain: false,
+ description: '',
+ enable: true,
...e,
})),
- value: '',
- queryParams: queryParameters?.map((e) => ({
+ query: queryParameters?.map((e) => ({
+ paramType: RequestParamsType.STRING,
+ description: '',
required: false,
- type: 'string',
- min: undefined,
- max: undefined,
- contentType: RequestContentTypeEnum.TEXT,
- tag: [],
- desc: '',
+ maxLength: undefined,
+ minLength: undefined,
encode: false,
- enable: false,
- mustContain: false,
+ enable: true,
...e,
})),
});
@@ -114,6 +112,11 @@
function handleApiNodeClick(node: ModuleTreeNode) {
debugRef.value?.openApiTab(node);
}
+
+ function handleDebugAddDone() {
+ moduleTreeRef.value?.initModules();
+ moduleTreeRef.value?.initModuleCount();
+ }