From 5674d80bb54f8b15ad4b7e6beb173a04ad6ad9e1 Mon Sep 17 00:00:00 2001 From: baiqi Date: Wed, 20 Mar 2024 19:20:54 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=8E=A5=E5=8F=A3=E5=9C=BA=E6=99=AF):=20?= =?UTF-8?q?=E5=9C=BA=E6=99=AF=E6=AD=A5=E9=AA=A4=2035%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/api/modules/api-test/scenario.ts | 6 +- .../src/components/business/ms-tree/index.vue | 31 +- frontend/src/locale/en-US/common.ts | 1 + frontend/src/locale/zh-CN/common.ts | 1 + frontend/src/models/apiTest/scenario.ts | 28 +- frontend/src/utils/index.ts | 141 ++++- frontend/src/utils/tree.ts | 2 +- .../views/api-test/components/paramTable.vue | 2 +- .../components/requestComposition/index.vue | 7 +- .../src/views/api-test/debug/locale/zh-CN.ts | 2 +- .../management/components/moduleTree.vue | 26 +- .../common/importApiDrawer/index.vue | 5 +- .../scenario/components/common/stepType.vue | 2 +- .../api-test/scenario/components/config.ts | 58 +- .../scenario/components/scenarioTable.vue | 10 +- .../components/step/actionDropdown.vue | 72 --- .../step/createAction/createStepActions.vue | 260 +++++++++ .../createAction/stepInsertStepTrigger.vue | 132 +++++ .../scenario/components/step/index.vue | 147 ++--- .../stepNodeComposition/conditionContent.vue | 88 ++- .../step/stepNodeComposition/loopContent.vue | 240 +++++++- .../stepNodeComposition/onlyOnceContent.vue | 7 - .../stepNodeComposition/waitTimeContent.vue | 50 +- .../scenario/components/step/stepTree.vue | 550 +++++++++++------- .../views/api-test/scenario/create/index.vue | 16 +- .../views/api-test/scenario/detail/index.vue | 2 +- .../src/views/api-test/scenario/index.vue | 68 ++- .../views/api-test/scenario/locale/zh-CN.ts | 27 +- .../scenario/recycle/recycleTable.vue | 6 +- 29 files changed, 1503 insertions(+), 484 deletions(-) delete mode 100644 frontend/src/views/api-test/scenario/components/step/actionDropdown.vue create mode 100644 frontend/src/views/api-test/scenario/components/step/createAction/createStepActions.vue create mode 100644 frontend/src/views/api-test/scenario/components/step/createAction/stepInsertStepTrigger.vue delete mode 100644 frontend/src/views/api-test/scenario/components/step/stepNodeComposition/onlyOnceContent.vue diff --git a/frontend/src/api/modules/api-test/scenario.ts b/frontend/src/api/modules/api-test/scenario.ts index c4148ce22d..1d9f692008 100644 --- a/frontend/src/api/modules/api-test/scenario.ts +++ b/frontend/src/api/modules/api-test/scenario.ts @@ -27,10 +27,10 @@ import { import { ApiScenarioBatchDeleteParams, ApiScenarioBatchEditParams, - ApiScenarioDetail, ApiScenarioGetModuleParams, ApiScenarioModuleUpdateParams, ApiScenarioPageParams, + ApiScenarioTableItem, ApiScenarioUpdateDTO, ExecuteHistoryItem, ExecutePageParams, @@ -81,12 +81,12 @@ export function deleteModule(id: string) { // 获取接口场景列表 export function getScenarioPage(data: ApiScenarioPageParams) { - return MSR.post>({ url: ScenarioPageUrl, data }); + return MSR.post>({ url: ScenarioPageUrl, data }); } // 获取回收站的接口场景列表 export function getTrashScenarioPage(data: ApiScenarioPageParams) { - return MSR.post>({ url: ScenarioTrashPageUrl, data }); + return MSR.post>({ url: ScenarioTrashPageUrl, data }); } // 更新接口场景 diff --git a/frontend/src/components/business/ms-tree/index.vue b/frontend/src/components/business/ms-tree/index.vue index 944c7983a2..c63acdfe05 100644 --- a/frontend/src/components/business/ms-tree/index.vue +++ b/frontend/src/components/business/ms-tree/index.vue @@ -33,13 +33,7 @@ diff --git a/frontend/src/views/api-test/scenario/detail/index.vue b/frontend/src/views/api-test/scenario/detail/index.vue index 61a3b64e76..073614751e 100644 --- a/frontend/src/views/api-test/scenario/detail/index.vue +++ b/frontend/src/views/api-test/scenario/detail/index.vue @@ -44,7 +44,7 @@ BASE_INFO - + -
+
+
+ + {{ t('common.save') }} + +
-
+
-
- +
+
- +
@@ -66,49 +71,63 @@ * @description 接口测试-接口场景主页 */ - import { onBeforeMount, ref } from 'vue'; + import { Message } from '@arco-design/web-vue'; import MsCard from '@/components/pure/ms-card/index.vue'; import MsEditableTab from '@/components/pure/ms-editable-tab/index.vue'; - import { TabItem } from '@/components/pure/ms-editable-tab/types'; import MsIcon from '@/components/pure/ms-icon-font/index.vue'; import MsSplitBox from '@/components/pure/ms-split-box/index.vue'; import scenarioModuleTree from './components/scenarioModuleTree.vue'; + import { ScenarioStepInfo } from './components/step/index.vue'; import ScenarioTable from '@/views/api-test/scenario/components/scenarioTable.vue'; import { getTrashModuleCount } from '@/api/modules/api-test/scenario'; import { useI18n } from '@/hooks/useI18n'; import router from '@/router'; + import useAppStore from '@/store/modules/app'; - import { ApiScenarioGetModuleParams } from '@/models/apiTest/scenario'; + import { ApiScenarioGetModuleParams, Scenario } from '@/models/apiTest/scenario'; import { ModuleTreeNode } from '@/models/common'; + import { RequestDefinitionStatus } from '@/enums/apiEnum'; import { ApiTestRouteEnum } from '@/enums/routeEnum'; - import useAppStore from '../../../store/modules/app'; - // 异步导入 const detail = defineAsyncComponent(() => import('./detail/index.vue')); const create = defineAsyncComponent(() => import('./create/index.vue')); const { t } = useI18n(); - const apiTabs = ref([ + const apiTabs = ref([ { id: 'all', label: t('apiScenario.allScenario'), closable: false, - }, + } as Scenario, ]); - const activeApiTab = ref(apiTabs.value[0]); + const activeScenarioTab = ref(apiTabs.value[0]); function newTab() { apiTabs.value.push({ - id: `newTab${apiTabs.value.length}`, - label: `New Tab ${apiTabs.value.length}`, + id: `${t('apiScenario.createScenario')}${apiTabs.value.length}`, + label: `${t('apiScenario.createScenario')}${apiTabs.value.length}`, closable: true, isNew: true, + name: '', + moduleId: 'root', + stepInfo: { + id: new Date().getTime(), + steps: [], + executeTime: '', + executeSuccessCount: 0, + executeFailCount: 0, + } as ScenarioStepInfo, + status: RequestDefinitionStatus.PROCESSING, + tags: [], + params: [], + executeLoading: false, + unSaved: false, }); - activeApiTab.value = apiTabs.value[apiTabs.value.length - 1]; + activeScenarioTab.value = apiTabs.value[apiTabs.value.length - 1]; } const folderTree = ref([]); @@ -153,6 +172,21 @@ }); recycleModulesCount.value = res.all; }); + + const saveLoading = ref(false); + + async function saveScenario() { + saveLoading.value = true; + await new Promise((resolve) => { + setTimeout(() => { + resolve(''); + }, 1000); + }); + Message.success(activeScenarioTab.value.isNew ? t('common.createSuccess') : t('common.saveSuccess')); + activeScenarioTab.value.isNew = false; + activeScenarioTab.value.unSaved = false; + saveLoading.value = false; + }