diff --git a/frontend/src/business/components/api/definition/ApiDefinition.vue b/frontend/src/business/components/api/definition/ApiDefinition.vue index 48b9496ea3..6629c9ae86 100644 --- a/frontend/src/business/components/api/definition/ApiDefinition.vue +++ b/frontend/src/business/components/api/definition/ApiDefinition.vue @@ -57,7 +57,7 @@
- @@ -76,13 +76,13 @@
- - - -
@@ -184,7 +184,8 @@ type: "list", closable: false }], - isApiListEnable: true + isApiListEnable: true, + syncTabs: [], } }, watch: { diff --git a/frontend/src/business/components/api/definition/components/ApiConfig.vue b/frontend/src/business/components/api/definition/components/ApiConfig.vue index 393c6e780a..e34b9a4838 100644 --- a/frontend/src/business/components/api/definition/components/ApiConfig.vue +++ b/frontend/src/business/components/api/definition/components/ApiConfig.vue @@ -3,16 +3,16 @@
+ :basisData="currentApi" :moduleOptions="moduleOptions" :syncTabs="syncTabs" v-if="currentProtocol === 'HTTP'"/> + :moduleOptions="moduleOptions" :syncTabs="syncTabs" v-if="currentProtocol === 'TCP'"/> + :moduleOptions="moduleOptions" :syncTabs="syncTabs" v-if="currentProtocol === 'DUBBO'"/> + :moduleOptions="moduleOptions" :syncTabs="syncTabs" v-if="currentProtocol === 'SQL'"/>
@@ -45,6 +45,7 @@ currentApi: {}, moduleOptions: {}, currentProtocol: String, + syncTabs: Array, }, created() { this.projectId = getCurrentProjectID(); @@ -75,7 +76,7 @@ this.$emit('runTest', data); }) }, - createRootModelInTree(){ + createRootModelInTree() { this.$emit("createRootModel"); }, getMaintainerOptions() { diff --git a/frontend/src/business/components/api/definition/components/complete/EditCompleteDubboApi.vue b/frontend/src/business/components/api/definition/components/complete/EditCompleteDubboApi.vue index d73e1ad2ba..ffecc7cd01 100644 --- a/frontend/src/business/components/api/definition/components/complete/EditCompleteDubboApi.vue +++ b/frontend/src/business/components/api/definition/components/complete/EditCompleteDubboApi.vue @@ -44,8 +44,30 @@ isReadOnly: { type: Boolean, default: false + }, + syncTabs: Array, + }, + watch: { + syncTabs() { + if (this.basisData && this.syncTabs && this.syncTabs.includes(this.basisData.id)) { + // 标示接口在其他地方更新过,当前页面需要同步 + let url = "/api/definition/get/"; + this.$get(url + this.basisData.id, response => { + if (response.data) { + let request = JSON.parse(response.data.request); + let index = this.syncTabs.findIndex(item => { + if (item === this.basisData.id) { + return true; + } + }) + this.syncTabs.splice(index, 1); + Object.assign(this.request, request); + } + }); + } } }, + data() { return {validated: false} }, diff --git a/frontend/src/business/components/api/definition/components/complete/EditCompleteHTTPApi.vue b/frontend/src/business/components/api/definition/components/complete/EditCompleteHTTPApi.vue index 9a7a4f74f7..6f4415ee65 100644 --- a/frontend/src/business/components/api/definition/components/complete/EditCompleteHTTPApi.vue +++ b/frontend/src/business/components/api/definition/components/complete/EditCompleteHTTPApi.vue @@ -149,7 +149,29 @@ options: API_STATUS, } }, - props: {moduleOptions: {}, request: {}, response: {}, basisData: {}}, + props: {moduleOptions: {}, request: {}, response: {}, basisData: {}, syncTabs: Array}, + watch: { + syncTabs() { + if (this.basisData && this.syncTabs && this.syncTabs.includes(this.basisData.id)) { + // 标示接口在其他地方更新过,当前页面需要同步 + let url = "/api/definition/get/"; + this.$get(url + this.basisData.id, response => { + if (response.data) { + let request = JSON.parse(response.data.request); + let index = this.syncTabs.findIndex(item => { + if (item === this.basisData.id) { + return true; + } + }) + this.syncTabs.splice(index, 1); + this.httpForm.path = response.data.path; + this.httpForm.method = response.data.method; + Object.assign(this.request, request); + } + }); + } + } + }, methods: { runTest() { this.$refs['httpForm'].validate((valid) => { diff --git a/frontend/src/business/components/api/definition/components/complete/EditCompleteSQLApi.vue b/frontend/src/business/components/api/definition/components/complete/EditCompleteSQLApi.vue index 2053db88bd..0b0bb5699e 100644 --- a/frontend/src/business/components/api/definition/components/complete/EditCompleteSQLApi.vue +++ b/frontend/src/business/components/api/definition/components/complete/EditCompleteSQLApi.vue @@ -43,9 +43,29 @@ export default { isReadOnly: { type: Boolean, default: false + }, + syncTabs:{}, + }, + watch: { + syncTabs() { + if (this.basisData && this.syncTabs && this.syncTabs.includes(this.basisData.id)) { + // 标示接口在其他地方更新过,当前页面需要同步 + let url = "/api/definition/get/"; + this.$get(url + this.basisData.id, response => { + if (response.data) { + let request = JSON.parse(response.data.request); + let index = this.syncTabs.findIndex(item => { + if (item === this.basisData.id) { + return true; + } + }) + this.syncTabs.splice(index, 1); + Object.assign(this.request, request); + } + }); + } } }, - data() { return {validated: false} }, diff --git a/frontend/src/business/components/api/definition/components/complete/EditCompleteTCPApi.vue b/frontend/src/business/components/api/definition/components/complete/EditCompleteTCPApi.vue index dcc4078c9c..e2f0eb4a61 100644 --- a/frontend/src/business/components/api/definition/components/complete/EditCompleteTCPApi.vue +++ b/frontend/src/business/components/api/definition/components/complete/EditCompleteTCPApi.vue @@ -42,14 +42,34 @@ export default { isReadOnly: { type: Boolean, default: false - } + }, + syncTabs:Array, }, data() { return { validated: false, } }, - + watch: { + syncTabs() { + if (this.basisData && this.syncTabs && this.syncTabs.includes(this.basisData.id)) { + // 标示接口在其他地方更新过,当前页面需要同步 + let url = "/api/definition/get/"; + this.$get(url + this.basisData.id, response => { + if (response.data) { + let request = JSON.parse(response.data.request); + let index = this.syncTabs.findIndex(item => { + if (item === this.basisData.id) { + return true; + } + }) + this.syncTabs.splice(index, 1); + Object.assign(this.request, request); + } + }); + } + } + }, methods: { callback() { this.validated = true; diff --git a/frontend/src/business/components/api/definition/components/runtest/RunTestDubboPage.vue b/frontend/src/business/components/api/definition/components/runtest/RunTestDubboPage.vue index 8d994e251c..8b1aa32bc4 100644 --- a/frontend/src/business/components/api/definition/components/runtest/RunTestDubboPage.vue +++ b/frontend/src/business/components/api/definition/components/runtest/RunTestDubboPage.vue @@ -89,7 +89,7 @@ reportId: "", } }, - props: {apiData: {}, currentProtocol: String,}, + props: {apiData: {}, currentProtocol: String,syncTabs: Array}, methods: { handleCommand(e) { switch (e) { @@ -173,6 +173,9 @@ let bodyFiles = this.getBodyUploadFiles(); this.$fileUpload(url, null, bodyFiles, this.api, () => { this.$success(this.$t('commons.save_success')); + if (this.syncTabs.indexOf(this.api.id) === -1) { + this.syncTabs.push(this.api.id); + } this.$emit('saveApi', this.api); }); }, @@ -228,7 +231,8 @@ } }, created() { - this.api = this.apiData; + // 深度复制 + this.api = JSON.parse(JSON.stringify(this.apiData)); this.api.protocol = this.currentProtocol; this.currentRequest = this.api.request; this.getEnvironments(); diff --git a/frontend/src/business/components/api/definition/components/runtest/RunTestHTTPPage.vue b/frontend/src/business/components/api/definition/components/runtest/RunTestHTTPPage.vue index 81196904cf..363ad44b8c 100644 --- a/frontend/src/business/components/api/definition/components/runtest/RunTestHTTPPage.vue +++ b/frontend/src/business/components/api/definition/components/runtest/RunTestHTTPPage.vue @@ -113,7 +113,7 @@ projectId: "", } }, - props: {apiData: {}, currentProtocol: String,}, + props: {apiData: {}, currentProtocol: String, syncTabs: Array}, methods: { handleCommand(e) { switch (e) { @@ -205,6 +205,9 @@ this.$fileUpload(url, null, bodyFiles, this.api, () => { this.$success(this.$t('commons.save_success')); this.$emit('saveApi', this.api); + if (this.syncTabs.indexOf(this.api.id) === -1) { + this.syncTabs.push(this.api.id); + } }); }, selectTestCase(item) { @@ -230,7 +233,8 @@ }, created() { this.projectId = getCurrentProjectID(); - this.api = this.apiData; + // 深度复制 + this.api = JSON.parse(JSON.stringify(this.apiData)); this.api.protocol = this.currentProtocol; this.currentRequest = this.api.request; this.getResult(); diff --git a/frontend/src/business/components/api/definition/components/runtest/RunTestSQLPage.vue b/frontend/src/business/components/api/definition/components/runtest/RunTestSQLPage.vue index 4a68528d77..c58872bb76 100644 --- a/frontend/src/business/components/api/definition/components/runtest/RunTestSQLPage.vue +++ b/frontend/src/business/components/api/definition/components/runtest/RunTestSQLPage.vue @@ -89,7 +89,7 @@ reportId: "", } }, - props: {apiData: {}, currentProtocol: String,}, + props: {apiData: {}, currentProtocol: String,syncTabs: Array}, methods: { handleCommand(e) { switch (e) { @@ -172,6 +172,9 @@ let bodyFiles = this.getBodyUploadFiles(); this.$fileUpload(url, null, bodyFiles, this.api, () => { this.$success(this.$t('commons.save_success')); + if (this.syncTabs.indexOf(this.api.id) === -1) { + this.syncTabs.push(this.api.id); + } this.$emit('saveApi', this.api); }); }, @@ -227,7 +230,8 @@ } }, created() { - this.api = this.apiData; + // 深度复制 + this.api = JSON.parse(JSON.stringify(this.apiData)); this.api.protocol = this.currentProtocol; this.currentRequest = this.api.request; this.getEnvironments(); diff --git a/frontend/src/business/components/api/definition/components/runtest/RunTestTCPPage.vue b/frontend/src/business/components/api/definition/components/runtest/RunTestTCPPage.vue index 50545940e1..3a5644a915 100644 --- a/frontend/src/business/components/api/definition/components/runtest/RunTestTCPPage.vue +++ b/frontend/src/business/components/api/definition/components/runtest/RunTestTCPPage.vue @@ -90,7 +90,7 @@ projectId: "" } }, - props: {apiData: {}, currentProtocol: String,}, + props: {apiData: {}, currentProtocol: String,syncTabs: Array}, methods: { handleCommand(e) { switch (e) { @@ -173,6 +173,9 @@ let bodyFiles = this.getBodyUploadFiles(); this.$fileUpload(url, null, bodyFiles, this.api, () => { this.$success(this.$t('commons.save_success')); + if (this.syncTabs.indexOf(this.api.id) === -1) { + this.syncTabs.push(this.api.id); + } this.$emit('saveApi', this.api); }); }, @@ -194,7 +197,8 @@ } }, created() { - this.api = this.apiData; + // 深度复制 + this.api = JSON.parse(JSON.stringify(this.apiData)); this.api.protocol = this.currentProtocol; this.currentRequest = this.api.request; this.projectId = getCurrentProjectID();