parent
6a8065853e
commit
b9061856e2
|
@ -273,7 +273,7 @@ public class ApiDefinitionController {
|
||||||
@RequiresPermissions(PermissionConstants.PROJECT_API_DEFINITION_READ_EDIT_API)
|
@RequiresPermissions(PermissionConstants.PROJECT_API_DEFINITION_READ_EDIT_API)
|
||||||
@MsAuditLog(module = OperLogModule.API_DEFINITION, type = OperLogConstants.BATCH_UPDATE, beforeEvent = "#msClass.getLogDetails(#request)", content = "#msClass.getLogDetails(#request)", msClass = ApiDefinitionService.class)
|
@MsAuditLog(module = OperLogModule.API_DEFINITION, type = OperLogConstants.BATCH_UPDATE, beforeEvent = "#msClass.getLogDetails(#request)", content = "#msClass.getLogDetails(#request)", msClass = ApiDefinitionService.class)
|
||||||
@SendNotice(taskType = NoticeConstants.TaskType.API_DEFINITION_TASK, event = NoticeConstants.Event.UPDATE, target = "#targetClass.getBLOBs(#request.ids)", targetClass = ApiDefinitionService.class,
|
@SendNotice(taskType = NoticeConstants.TaskType.API_DEFINITION_TASK, event = NoticeConstants.Event.UPDATE, target = "#targetClass.getBLOBs(#request.ids)", targetClass = ApiDefinitionService.class,
|
||||||
subject = "接口定义通知")
|
subject = "接口定义通知")
|
||||||
public void editByParams(@RequestBody ApiBatchRequest request) {
|
public void editByParams(@RequestBody ApiBatchRequest request) {
|
||||||
apiDefinitionService.editApiByParam(request);
|
apiDefinitionService.editApiByParam(request);
|
||||||
}
|
}
|
||||||
|
@ -357,6 +357,12 @@ public class ApiDefinitionController {
|
||||||
apiDefinitionService.saveFollows(definitionId, follows);
|
apiDefinitionService.saveFollows(definitionId, follows);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/delete/follows/batch")
|
||||||
|
public void deleteFollows(@RequestBody List<String> definitionIds) {
|
||||||
|
apiDefinitionService.deleteFollows(definitionIds);
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/getWorkerQueue")
|
@GetMapping("/getWorkerQueue")
|
||||||
public String getWorkerQueue() {
|
public String getWorkerQueue() {
|
||||||
return execThreadPoolExecutor.getWorkerQueue();
|
return execThreadPoolExecutor.getWorkerQueue();
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package io.metersphere.api.dto.definition;
|
package io.metersphere.api.dto.definition;
|
||||||
|
|
||||||
import io.metersphere.plugin.core.MsTestElement;
|
|
||||||
import io.metersphere.api.dto.definition.response.Response;
|
import io.metersphere.api.dto.definition.response.Response;
|
||||||
import io.metersphere.base.domain.Schedule;
|
import io.metersphere.base.domain.Schedule;
|
||||||
|
import io.metersphere.plugin.core.MsTestElement;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@ -71,4 +71,7 @@ public class SaveApiDefinitionRequest {
|
||||||
//是否进入待更新列表
|
//是否进入待更新列表
|
||||||
private Boolean toBeUpdated;
|
private Boolean toBeUpdated;
|
||||||
|
|
||||||
|
//同步的内容
|
||||||
|
private String triggerUpdate;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
package io.metersphere.api.service;
|
||||||
|
|
||||||
|
import io.metersphere.api.dto.definition.ApiSyncCaseRequest;
|
||||||
|
import io.metersphere.base.domain.ApiDefinitionWithBLOBs;
|
||||||
|
|
||||||
|
public interface ApiCaseBatchSyncService {
|
||||||
|
void oneClickSyncCase(ApiSyncCaseRequest apiSyncCaseRequest, ApiDefinitionWithBLOBs apiDefinitionWithBLOBs);
|
||||||
|
}
|
|
@ -368,13 +368,25 @@ public class ApiDefinitionService {
|
||||||
if (StringUtils.equals(request.getProtocol(), "DUBBO")) {
|
if (StringUtils.equals(request.getProtocol(), "DUBBO")) {
|
||||||
request.setMethod("dubbo://");
|
request.setMethod("dubbo://");
|
||||||
}
|
}
|
||||||
// 存储依赖关系
|
if (StringUtils.isBlank(request.getTriggerUpdate())) {
|
||||||
ApiDefinitionSyncService apiDefinitionSyncService = CommonBeanFactory.getBean(ApiDefinitionSyncService.class);
|
// 设置是否需要进入待更新列表
|
||||||
if (apiDefinitionSyncService != null) {
|
ApiDefinitionSyncService apiDefinitionSyncService = CommonBeanFactory.getBean(ApiDefinitionSyncService.class);
|
||||||
apiDefinitionSyncService.syncApi(request);
|
if (apiDefinitionSyncService != null) {
|
||||||
|
apiDefinitionSyncService.syncApi(request);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ApiDefinitionWithBLOBs returnModel = updateTest(request);
|
ApiDefinitionWithBLOBs returnModel = updateTest(request);
|
||||||
|
if (StringUtils.isNotBlank(request.getTriggerUpdate())) {
|
||||||
|
//一键同步case
|
||||||
|
ApiSyncCaseRequest apiSyncCaseRequest = JSONObject.parseObject(request.getTriggerUpdate(), ApiSyncCaseRequest.class);
|
||||||
|
ApiCaseBatchSyncService apiCaseSyncService = CommonBeanFactory.getBean(ApiCaseBatchSyncService.class);
|
||||||
|
if (apiCaseSyncService != null) {
|
||||||
|
apiCaseSyncService.oneClickSyncCase(apiSyncCaseRequest, returnModel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
MockConfigService mockConfigService = CommonBeanFactory.getBean(MockConfigService.class);
|
MockConfigService mockConfigService = CommonBeanFactory.getBean(MockConfigService.class);
|
||||||
mockConfigService.updateMockReturnMsgByApi(returnModel);
|
mockConfigService.updateMockReturnMsgByApi(returnModel);
|
||||||
FileUtils.createBodyFiles(request.getRequest().getId(), bodyFiles);
|
FileUtils.createBodyFiles(request.getRequest().getId(), bodyFiles);
|
||||||
|
@ -614,9 +626,11 @@ public class ApiDefinitionService {
|
||||||
test.setEnvironmentId(request.getEnvironmentId());
|
test.setEnvironmentId(request.getEnvironmentId());
|
||||||
test.setUserId(request.getUserId());
|
test.setUserId(request.getUserId());
|
||||||
test.setRemark(request.getRemark());
|
test.setRemark(request.getRemark());
|
||||||
if (request.getToBeUpdated() != null && request.getToBeUpdated()) {
|
if (request.getToBeUpdated() != null) {
|
||||||
test.setToBeUpdated(request.getToBeUpdated());
|
test.setToBeUpdated(request.getToBeUpdated());
|
||||||
test.setToBeUpdateTime(System.currentTimeMillis());
|
if (request.getToBeUpdated()) {
|
||||||
|
test.setToBeUpdateTime(System.currentTimeMillis());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (StringUtils.isNotEmpty(request.getTags()) && !StringUtils.equals(request.getTags(), "[]")) {
|
if (StringUtils.isNotEmpty(request.getTags()) && !StringUtils.equals(request.getTags(), "[]")) {
|
||||||
test.setTags(request.getTags());
|
test.setTags(request.getTags());
|
||||||
|
@ -2583,4 +2597,12 @@ public class ApiDefinitionService {
|
||||||
relationshipEdgeService.saveBatch(request);
|
relationshipEdgeService.saveBatch(request);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void deleteFollows(List<String> definitionIds) {
|
||||||
|
if (CollectionUtils.isNotEmpty(definitionIds)) {
|
||||||
|
ApiDefinitionFollowExample example = new ApiDefinitionFollowExample();
|
||||||
|
example.createCriteria().andDefinitionIdIn(definitionIds);
|
||||||
|
apiDefinitionFollowMapper.deleteByExample(example);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -181,6 +181,24 @@
|
||||||
</ms-dialog-footer>
|
</ms-dialog-footer>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
|
<el-dialog :visible.sync="batchSyncApiVisible" :title="$t('commons.save')+$t('commons.setting')">
|
||||||
|
<el-row style="margin-bottom: 10px;box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1)">
|
||||||
|
<div class="timeClass">
|
||||||
|
<span>{{ $t('api_test.definition.one_click_sync') + "case" }}</span>
|
||||||
|
<el-switch v-model="syncCases"></el-switch>
|
||||||
|
</div>
|
||||||
|
<span>{{ $t('workstation.batch_sync_api_tips') }}</span>
|
||||||
|
</el-row>
|
||||||
|
<span v-if="syncCases">{{ $t('workstation.sync') + $t('commons.setting') }}</span><br/>
|
||||||
|
<sync-settings v-if="syncCases" ref="synSetting"></sync-settings>
|
||||||
|
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="batchSyncApiVisible = false">取 消</el-button>
|
||||||
|
<el-button type="primary" @click="batchSync()">确 定</el-button>
|
||||||
|
</span>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -202,6 +220,7 @@ import {createComponent} from ".././jmeter/components";
|
||||||
import {TYPE_TO_C} from "@/business/components/api/automation/scenario/Setting";
|
import {TYPE_TO_C} from "@/business/components/api/automation/scenario/Setting";
|
||||||
import MsDialogFooter from "@/business/components/common/components/MsDialogFooter";
|
import MsDialogFooter from "@/business/components/common/components/MsDialogFooter";
|
||||||
import {getProjectMemberOption} from "@/network/user";
|
import {getProjectMemberOption} from "@/network/user";
|
||||||
|
import SyncSettings from "@/business/components/xpack/workstation/component/SyncSettings";
|
||||||
|
|
||||||
const {Body} = require("@/business/components/api/definition/model/ApiTestModel");
|
const {Body} = require("@/business/components/api/definition/model/ApiTestModel");
|
||||||
const Sampler = require("@/business/components/api/definition/components/jmeter/components/sampler/sampler");
|
const Sampler = require("@/business/components/api/definition/components/jmeter/components/sampler/sampler");
|
||||||
|
@ -217,7 +236,7 @@ export default {
|
||||||
ApiOtherInfo,
|
ApiOtherInfo,
|
||||||
MsFormDivider,
|
MsFormDivider,
|
||||||
MsJsr233Processor, MsResponseText, MsApiRequestForm, MsInputTag, MsSelectTree, MsChangeHistory,
|
MsJsr233Processor, MsResponseText, MsApiRequestForm, MsInputTag, MsSelectTree, MsChangeHistory,
|
||||||
HttpApiVersionDiff
|
HttpApiVersionDiff, SyncSettings,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
let validateURL = (rule, value, callback) => {
|
let validateURL = (rule, value, callback) => {
|
||||||
|
@ -269,6 +288,8 @@ export default {
|
||||||
newRequest: Sampler,
|
newRequest: Sampler,
|
||||||
newResponse: {},
|
newResponse: {},
|
||||||
createNewVersionVisible: false,
|
createNewVersionVisible: false,
|
||||||
|
batchSyncApiVisible: false,
|
||||||
|
syncCases: true,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
props: {moduleOptions: {}, request: {}, response: {}, basisData: {}, syncTabs: Array, projectId: String},
|
props: {moduleOptions: {}, request: {}, response: {}, basisData: {}, syncTabs: Array, projectId: String},
|
||||||
|
@ -473,7 +494,11 @@ export default {
|
||||||
this.httpForm.versionId = this.$refs.versionHistory.currentVersion.id;
|
this.httpForm.versionId = this.$refs.versionHistory.currentVersion.id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.$emit('saveApi', this.httpForm);
|
if (hasLicense() && this.httpForm.caseTotal > 0) {
|
||||||
|
this.batchSyncApiVisible = true;
|
||||||
|
} else {
|
||||||
|
this.$emit('saveApi', this.httpForm);
|
||||||
|
}
|
||||||
this.count = 0;
|
this.count = 0;
|
||||||
this.$store.state.apiStatus.set("fromChange", false);
|
this.$store.state.apiStatus.set("fromChange", false);
|
||||||
this.$store.state.apiMap.set(this.httpForm.id, this.$store.state.apiStatus);
|
this.$store.state.apiMap.set(this.httpForm.id, this.$store.state.apiStatus);
|
||||||
|
@ -485,6 +510,15 @@ export default {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
batchSync() {
|
||||||
|
if (hasLicense() && this.httpForm.caseTotal > 0) {
|
||||||
|
if (this.$refs.synSetting && this.$refs.synSetting.fromData) {
|
||||||
|
let fromData = this.$refs.synSetting.fromData;
|
||||||
|
this.httpForm.triggerUpdate = JSON.stringify(fromData);
|
||||||
|
}
|
||||||
|
this.$emit('saveApi', this.httpForm);
|
||||||
|
}
|
||||||
|
},
|
||||||
createModules() {
|
createModules() {
|
||||||
this.$emit("createRootModelInTree");
|
this.$emit("createRootModelInTree");
|
||||||
},
|
},
|
||||||
|
@ -768,6 +802,11 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
.timeClass {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
.base-info .el-form-item {
|
.base-info .el-form-item {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
|
@ -248,6 +248,16 @@
|
||||||
:visible.sync="resVisible" class="api-import" destroy-on-close @close="resVisible=false">
|
:visible.sync="resVisible" class="api-import" destroy-on-close @close="resVisible=false">
|
||||||
<ms-request-result-tail :response="response" ref="debugResult"/>
|
<ms-request-result-tail :response="response" ref="debugResult"/>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
|
<el-dialog :visible.sync="batchSyncCaseVisible" :title="$t('commons.batch')+$t('workstation.sync')">
|
||||||
|
<span>{{ $t('workstation.sync') + $t('commons.setting') }}</span><br/>
|
||||||
|
<sync-settings ref="synSetting"></sync-settings>
|
||||||
|
<span style="color: red">{{ $t('workstation.batch_sync_api_tips') }}</span>
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="batchSyncCaseVisible = false">取 消</el-button>
|
||||||
|
<el-button type="primary" @click="batchSync()">确 定</el-button>
|
||||||
|
</span>
|
||||||
|
</el-dialog>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
@ -297,6 +307,7 @@ import {editApiTestCaseOrder} from "@/network/api";
|
||||||
import {TYPE_TO_C} from "@/business/components/api/automation/scenario/Setting";
|
import {TYPE_TO_C} from "@/business/components/api/automation/scenario/Setting";
|
||||||
import i18n from "@/i18n/i18n";
|
import i18n from "@/i18n/i18n";
|
||||||
import MsSearch from "@/business/components/common/components/search/MsSearch";
|
import MsSearch from "@/business/components/common/components/search/MsSearch";
|
||||||
|
import SyncSettings from "@/business/components/xpack/workstation/component/SyncSettings";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "ApiCaseSimpleList",
|
name: "ApiCaseSimpleList",
|
||||||
|
@ -324,6 +335,7 @@ export default {
|
||||||
MsRequestResultTail,
|
MsRequestResultTail,
|
||||||
MsApiCaseRunModeWithEnv,
|
MsApiCaseRunModeWithEnv,
|
||||||
MsSearch,
|
MsSearch,
|
||||||
|
SyncSettings,
|
||||||
PlanStatusTableItem: () => import("../../../../track/common/tableItems/plan/PlanStatusTableItem"),
|
PlanStatusTableItem: () => import("../../../../track/common/tableItems/plan/PlanStatusTableItem"),
|
||||||
MsTaskCenter: () => import("@/business/components/task/TaskCenter"),
|
MsTaskCenter: () => import("@/business/components/task/TaskCenter"),
|
||||||
},
|
},
|
||||||
|
@ -360,6 +372,28 @@ export default {
|
||||||
permissions: ['PROJECT_API_DEFINITION:READ+RUN']
|
permissions: ['PROJECT_API_DEFINITION:READ+RUN']
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
batchButtons: [
|
||||||
|
{
|
||||||
|
name: this.$t('api_test.definition.request.batch_delete'),
|
||||||
|
handleClick: this.handleDeleteToGcBatch,
|
||||||
|
permissions: ['PROJECT_API_DEFINITION:READ+DELETE_CASE']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: this.$t('api_test.definition.request.batch_edit'),
|
||||||
|
handleClick: this.handleEditBatch,
|
||||||
|
permissions: ['PROJECT_API_DEFINITION:READ+EDIT_CASE']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: this.$t('api_test.automation.batch_execute'),
|
||||||
|
handleClick: this.handleRunBatch,
|
||||||
|
permissions: ['PROJECT_API_DEFINITION:READ+RUN']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: this.$t('commons.batch') + this.$t('workstation.sync'),
|
||||||
|
handleClick: this.openBatchSync,
|
||||||
|
permissions: ['PROJECT_TRACK_PLAN:READ+SCHEDULE']
|
||||||
|
},
|
||||||
|
],
|
||||||
trashButtons: [
|
trashButtons: [
|
||||||
{
|
{
|
||||||
name: this.$t('commons.reduction'),
|
name: this.$t('commons.reduction'),
|
||||||
|
@ -459,6 +493,7 @@ export default {
|
||||||
versionEnable: false,
|
versionEnable: false,
|
||||||
userFilters: [],
|
userFilters: [],
|
||||||
environmentsFilters: [],
|
environmentsFilters: [],
|
||||||
|
batchSyncCaseVisible: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
|
@ -499,7 +534,12 @@ export default {
|
||||||
this.buttons = this.trashButtons;
|
this.buttons = this.trashButtons;
|
||||||
} else {
|
} else {
|
||||||
this.operators = this.simpleOperators;
|
this.operators = this.simpleOperators;
|
||||||
this.buttons = this.simpleButtons;
|
if (hasLicense()) {
|
||||||
|
this.buttons = this.batchButtons;
|
||||||
|
} else {
|
||||||
|
this.buttons = this.simpleButtons;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// 切换tab之后版本查询
|
// 切换tab之后版本查询
|
||||||
this.condition.versionId = this.currentVersion;
|
this.condition.versionId = this.currentVersion;
|
||||||
|
@ -1016,6 +1056,21 @@ export default {
|
||||||
this.initTable();
|
this.initTable();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
openBatchSync() {
|
||||||
|
this.batchSyncCaseVisible = true;
|
||||||
|
},
|
||||||
|
batchSync() {
|
||||||
|
let selectIds = this.$refs.caseTable.selectIds;
|
||||||
|
let fromData = this.$refs.synSetting.fromData;
|
||||||
|
fromData.ids = selectIds;
|
||||||
|
if (hasLicense()) {
|
||||||
|
this.$post('/api/sync/case/batch', fromData, response => {
|
||||||
|
this.batchSyncCaseVisible = false;
|
||||||
|
this.$message.success("success");
|
||||||
|
this.initTable();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
handleDelete(apiCase) {
|
handleDelete(apiCase) {
|
||||||
this.$alert(this.$t('api_test.definition.request.delete_case_confirm') + ' ' + apiCase.name + " ?", '', {
|
this.$alert(this.$t('api_test.definition.request.delete_case_confirm') + ' ' + apiCase.name + " ?", '', {
|
||||||
confirmButtonText: this.$t('commons.confirm'),
|
confirmButtonText: this.$t('commons.confirm'),
|
||||||
|
|
|
@ -1242,6 +1242,7 @@ export default {
|
||||||
api_import: "Api Import",
|
api_import: "Api Import",
|
||||||
check_select: "Please check the API",
|
check_select: "Please check the API",
|
||||||
api_project: "Project",
|
api_project: "Project",
|
||||||
|
one_click_sync: "One-click sync",
|
||||||
select_comp: {
|
select_comp: {
|
||||||
no_data: "No Data",
|
no_data: "No Data",
|
||||||
add_data: "Add Data"
|
add_data: "Add Data"
|
||||||
|
@ -1506,7 +1507,7 @@ export default {
|
||||||
base_url: "Base URL",
|
base_url: "Base URL",
|
||||||
base_url_description: "Base URL as URL prefix for all requests",
|
base_url_description: "Base URL as URL prefix for all requests",
|
||||||
scenario_step_is_empty: "Scenario: {0} has none step!",
|
scenario_step_is_empty: "Scenario: {0} has none step!",
|
||||||
base_scenario_step_is_empty:"Scenario step is empty!",
|
base_scenario_step_is_empty: "Scenario step is empty!",
|
||||||
url_invalid: "Invalid URL",
|
url_invalid: "Invalid URL",
|
||||||
variables: "Variables",
|
variables: "Variables",
|
||||||
headers: "Headers",
|
headers: "Headers",
|
||||||
|
|
|
@ -1251,6 +1251,7 @@ export default {
|
||||||
api_import: "接口导入",
|
api_import: "接口导入",
|
||||||
check_select: "请勾选接口",
|
check_select: "请勾选接口",
|
||||||
api_project: "所属项目",
|
api_project: "所属项目",
|
||||||
|
one_click_sync: "一键同步",
|
||||||
select_comp: {
|
select_comp: {
|
||||||
no_data: "无数据",
|
no_data: "无数据",
|
||||||
add_data: "去添加"
|
add_data: "去添加"
|
||||||
|
@ -1514,7 +1515,7 @@ export default {
|
||||||
base_url: "基础URL",
|
base_url: "基础URL",
|
||||||
base_url_description: "基础URL作为所有请求的URL前缀",
|
base_url_description: "基础URL作为所有请求的URL前缀",
|
||||||
scenario_step_is_empty: "场景: {0} 的步骤为空,无法导入",
|
scenario_step_is_empty: "场景: {0} 的步骤为空,无法导入",
|
||||||
base_scenario_step_is_empty:"原场景步骤为空",
|
base_scenario_step_is_empty: "原场景步骤为空",
|
||||||
variables: "自定义变量",
|
variables: "自定义变量",
|
||||||
headers: "请求头",
|
headers: "请求头",
|
||||||
kv_description: "所有请求可以使用自定义变量",
|
kv_description: "所有请求可以使用自定义变量",
|
||||||
|
|
|
@ -1248,6 +1248,7 @@ export default {
|
||||||
api_import: "接口導入",
|
api_import: "接口導入",
|
||||||
check_select: "請勾選接口",
|
check_select: "請勾選接口",
|
||||||
api_project: "所屬項目",
|
api_project: "所屬項目",
|
||||||
|
one_click_sync: "一鍵同步",
|
||||||
select_comp: {
|
select_comp: {
|
||||||
no_data: "無數據",
|
no_data: "無數據",
|
||||||
add_data: "去添加"
|
add_data: "去添加"
|
||||||
|
@ -1511,7 +1512,7 @@ export default {
|
||||||
base_url: "基礎URL",
|
base_url: "基礎URL",
|
||||||
base_url_description: "基礎URL作為所有請求的URL前綴",
|
base_url_description: "基礎URL作為所有請求的URL前綴",
|
||||||
scenario_step_is_empty: "場景: {0} 的步驟為空,無法導入",
|
scenario_step_is_empty: "場景: {0} 的步驟為空,無法導入",
|
||||||
base_scenario_step_is_empty:"原場景步驟為空",
|
base_scenario_step_is_empty: "原場景步驟為空",
|
||||||
variables: "自定義變量",
|
variables: "自定義變量",
|
||||||
headers: "請求頭",
|
headers: "請求頭",
|
||||||
kv_description: "所有請求可以使用自定義變量",
|
kv_description: "所有請求可以使用自定義變量",
|
||||||
|
|
Loading…
Reference in New Issue