Merge remote-tracking branch 'origin/dev' into dev
# Conflicts: # frontend/src/business/components/settings/system/User.vue
This commit is contained in:
commit
17be7deb21
|
@ -34,7 +34,6 @@ public class APIReportService {
|
|||
}
|
||||
|
||||
public List<APIReportResult> recentTest(QueryAPIReportRequest request) {
|
||||
request.setRecent(true);
|
||||
return extApiTestReportMapper.list(request);
|
||||
}
|
||||
|
||||
|
|
|
@ -45,7 +45,6 @@ public class APITestService {
|
|||
}
|
||||
|
||||
public List<APITestResult> recentTest(QueryAPITestRequest request) {
|
||||
request.setRecent(true);
|
||||
return extApiTestMapper.list(request);
|
||||
}
|
||||
|
||||
|
|
|
@ -25,9 +25,7 @@
|
|||
AND api_test.id = #{request.id}
|
||||
</if>
|
||||
</where>
|
||||
<if test="request.recent">
|
||||
order by api_test.update_time desc
|
||||
</if>
|
||||
order by api_test.update_time desc
|
||||
</select>
|
||||
|
||||
</mapper>
|
|
@ -25,9 +25,7 @@
|
|||
AND project.workspace_id = #{request.workspaceId,jdbcType=VARCHAR}
|
||||
</if>
|
||||
</where>
|
||||
<if test="request.recent">
|
||||
ORDER BY r.update_time DESC
|
||||
</if>
|
||||
ORDER BY r.update_time DESC
|
||||
</select>
|
||||
|
||||
<select id="listByTestId" resultMap="BaseResultMap">
|
||||
|
|
|
@ -135,8 +135,6 @@ public class UserService {
|
|||
}
|
||||
|
||||
public void updateUser(User user) {
|
||||
// MD5
|
||||
user.setPassword(CodingUtil.md5(user.getPassword()));
|
||||
user.setUpdateTime(System.currentTimeMillis());
|
||||
userMapper.updateByPrimaryKeySelective(user);
|
||||
}
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
<div class="container" v-loading="result.loading">
|
||||
<div class="main-content">
|
||||
<el-card>
|
||||
<section class="report-container">
|
||||
<header class="report-header" v-if="this.report.testId">
|
||||
<section class="report-container" v-if="this.report.testId">
|
||||
<header class="report-header">
|
||||
<span>{{report.projectName}} / </span>
|
||||
<router-link :to="path">{{report.testName}}</router-link>
|
||||
</header>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<el-table :data="assertions" style="width: 100%">
|
||||
<el-table :data="assertions" :row-style="getRowStyle" :header-cell-style="getRowStyle">
|
||||
<el-table-column prop="name" :label="$t('api_report.assertions_name')" width="300">
|
||||
</el-table-column>
|
||||
<el-table-column prop="message" :label="$t('api_report.assertions_message')">
|
||||
|
@ -23,6 +23,12 @@
|
|||
|
||||
props: {
|
||||
assertions: Array
|
||||
},
|
||||
|
||||
methods: {
|
||||
getRowStyle() {
|
||||
return {backgroundColor: "#F5F5F5"};
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<el-tab-pane label="Headers" name="headers" class="pane">
|
||||
<pre>{{response.headers}}</pre>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane :label="$t('api_report.assertions')" name="assertions" class="pane">
|
||||
<el-tab-pane :label="$t('api_report.assertions')" name="assertions" class="pane assertions">
|
||||
<ms-assertion-results :assertions="response.assertions"/>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
@ -71,6 +71,10 @@
|
|||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.text-container .pane.assertions {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
pre {
|
||||
margin: 0;
|
||||
}
|
||||
|
|
|
@ -16,11 +16,11 @@
|
|||
{{$t('commons.save')}}
|
||||
</el-button>
|
||||
|
||||
<el-button type="primary" plain v-if="!isDisabled" @click="saveRunTest">
|
||||
<el-button type="primary" plain v-if="!isShowRun" :disabled="isDisabled" @click="saveRunTest">
|
||||
{{$t('load_test.save_and_run')}}
|
||||
</el-button>
|
||||
|
||||
<el-button type="primary" plain v-if="isDisabled" @click="runTest">
|
||||
<el-button type="primary" plain v-if="isShowRun" @click="runTest">
|
||||
{{$t('api_test.run')}}
|
||||
</el-button>
|
||||
<el-button type="warning" plain @click="cancel">{{$t('commons.cancel')}}</el-button>
|
||||
|
@ -153,6 +153,9 @@
|
|||
},
|
||||
|
||||
computed: {
|
||||
isShowRun() {
|
||||
return this.test.projectId && this.test.name && !this.change;
|
||||
},
|
||||
isDisabled() {
|
||||
return !(this.test.projectId && this.test.name && this.change)
|
||||
}
|
||||
|
|
|
@ -70,7 +70,7 @@
|
|||
|
||||
<style scoped>
|
||||
.kv-description {
|
||||
font-size: 14px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.kv-row {
|
||||
|
|
|
@ -34,8 +34,8 @@
|
|||
<el-tab-pane :label="$t('api_test.request.assertions.label')" name="assertions">
|
||||
<ms-api-assertions :assertions="request.assertions"/>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane :label="$t('api_test.request.extract')" name="extract" v-if="false">
|
||||
TODO
|
||||
<el-tab-pane :label="$t('api_test.request.extract.label')" name="extract">
|
||||
<ms-api-extract :extract="request.extract"/>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-form>
|
||||
|
@ -44,12 +44,13 @@
|
|||
<script>
|
||||
import MsApiKeyValue from "./ApiKeyValue";
|
||||
import MsApiBody from "./ApiBody";
|
||||
import MsApiAssertions from "./ApiAssertions";
|
||||
import MsApiAssertions from "./assertion/ApiAssertions";
|
||||
import {KeyValue, Request} from "../model/ScenarioModel";
|
||||
import MsApiExtract from "./extract/ApiExtract";
|
||||
|
||||
export default {
|
||||
name: "MsApiRequestForm",
|
||||
components: {MsApiAssertions, MsApiBody, MsApiKeyValue},
|
||||
components: {MsApiExtract, MsApiAssertions, MsApiBody, MsApiKeyValue},
|
||||
props: {
|
||||
request: Request
|
||||
},
|
||||
|
|
|
@ -96,7 +96,6 @@
|
|||
});
|
||||
},
|
||||
reset: function () {
|
||||
this.selected = null;
|
||||
this.$nextTick(function () {
|
||||
this.activeName = 0;
|
||||
this.select(this.scenarios[0]);
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import {ASSERTION_REGEX_SUBJECT, Regex} from "../model/ScenarioModel";
|
||||
import {ASSERTION_REGEX_SUBJECT, Regex} from "../../model/ScenarioModel";
|
||||
|
||||
export default {
|
||||
name: "MsApiAssertionRegex",
|
|
@ -14,7 +14,7 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import {ResponseTime} from "../model/ScenarioModel";
|
||||
import {ResponseTime} from "../../model/ScenarioModel";
|
||||
|
||||
export default {
|
||||
name: "MsApiAssertionResponseTime",
|
|
@ -11,7 +11,7 @@
|
|||
</el-col>
|
||||
<el-col class="assertion-select">
|
||||
<el-select class="assertion-item" v-model="condition" size="small"
|
||||
:placeholder="$t('api_test.request.assertions.select_contains')">
|
||||
:placeholder="$t('api_test.request.assertions.select_condition')">
|
||||
<el-option :label="$t('api_test.request.assertions.contains')" value="CONTAINS"/>
|
||||
<el-option :label="$t('api_test.request.assertions.not_contains')" value="NOT_CONTAINS"/>
|
||||
<el-option :label="$t('api_test.request.assertions.equals')" value="EQUALS"/>
|
||||
|
@ -31,7 +31,7 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import {Regex, ASSERTION_REGEX_SUBJECT} from "../model/ScenarioModel";
|
||||
import {Regex, ASSERTION_REGEX_SUBJECT} from "../../model/ScenarioModel";
|
||||
|
||||
export default {
|
||||
name: "MsApiAssertionText",
|
|
@ -24,7 +24,7 @@
|
|||
import MsApiAssertionText from "./ApiAssertionText";
|
||||
import MsApiAssertionRegex from "./ApiAssertionRegex";
|
||||
import MsApiAssertionResponseTime from "./ApiAssertionResponseTime";
|
||||
import {ASSERTION_TYPE, Assertions, Regex} from "../model/ScenarioModel";
|
||||
import {ASSERTION_TYPE, Assertions} from "../../model/ScenarioModel";
|
||||
import MsApiAssertionsEdit from "./ApiAssertionsEdit";
|
||||
|
||||
export default {
|
|
@ -22,7 +22,7 @@
|
|||
<script>
|
||||
import MsApiAssertionRegex from "./ApiAssertionRegex";
|
||||
import MsApiAssertionResponseTime from "./ApiAssertionResponseTime";
|
||||
import {Assertions} from "../model/ScenarioModel";
|
||||
import {Assertions} from "../../model/ScenarioModel";
|
||||
|
||||
export default {
|
||||
name: "MsApiAssertionsEdit",
|
|
@ -0,0 +1,74 @@
|
|||
<template>
|
||||
<div>
|
||||
<div class="extract-description">
|
||||
{{$t('api_test.request.extract.description')}}
|
||||
</div>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="4">
|
||||
<el-select class="extract-item" v-model="type" :placeholder="$t('api_test.request.extract.select_type')"
|
||||
size="small">
|
||||
<el-option :label="$t('api_test.request.extract.regex')" :value="options.REGEX"/>
|
||||
<el-option label="JSONPath" :value="options.JSON_PATH"/>
|
||||
<el-option label="XPath" :value="options.XPATH"/>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="20">
|
||||
<ms-api-extract-common :extract-type="type" :list="list" v-if="type"/>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<ms-api-extract-edit :extract="extract"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {EXTRACT_TYPE, Extract} from "../../model/ScenarioModel";
|
||||
import MsApiExtractEdit from "./ApiExtractEdit";
|
||||
import MsApiExtractCommon from "./ApiExtractCommon";
|
||||
|
||||
export default {
|
||||
name: "MsApiExtract",
|
||||
|
||||
components: {
|
||||
MsApiExtractCommon,
|
||||
MsApiExtractEdit,
|
||||
},
|
||||
|
||||
props: {
|
||||
extract: Extract
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
options: EXTRACT_TYPE,
|
||||
type: "",
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
list() {
|
||||
switch (this.type) {
|
||||
case EXTRACT_TYPE.REGEX:
|
||||
return this.extract.regex;
|
||||
case EXTRACT_TYPE.JSON_PATH:
|
||||
return this.extract.json;
|
||||
case EXTRACT_TYPE.XPATH:
|
||||
return this.extract.xpath;
|
||||
default:
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.extract-description {
|
||||
font-size: 13px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.extract-item {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,85 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-row :gutter="10" type="flex" justify="space-between" align="middle">
|
||||
<el-col :span="10">
|
||||
<el-input v-model="common.variable" maxlength="60" size="small" @input="change"
|
||||
:placeholder="$t('api_test.request.extract.variable_name')"/>
|
||||
</el-col>
|
||||
<el-col>
|
||||
<el-input v-model="common.expression" maxlength="255" size="small" :placeholder="expression"/>
|
||||
</el-col>
|
||||
<el-col class="extract-btn">
|
||||
<el-button type="danger" size="mini" icon="el-icon-delete" circle @click="remove" v-if="edit"/>
|
||||
<el-button type="primary" size="small" icon="el-icon-plus" plain @click="add" v-else/>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {EXTRACT_TYPE, ExtractCommon} from "../../model/ScenarioModel";
|
||||
|
||||
export default {
|
||||
name: "MsApiExtractCommon",
|
||||
|
||||
props: {
|
||||
extractType: {
|
||||
type: String,
|
||||
validator: function (value) {
|
||||
return [EXTRACT_TYPE.XPATH, EXTRACT_TYPE.JSON_PATH, EXTRACT_TYPE.REGEX].indexOf(value) !== -1
|
||||
}
|
||||
},
|
||||
common: {
|
||||
type: ExtractCommon,
|
||||
default: () => {
|
||||
return new ExtractCommon();
|
||||
}
|
||||
},
|
||||
edit: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
index: Number,
|
||||
list: Array
|
||||
},
|
||||
|
||||
methods: {
|
||||
add() {
|
||||
this.list.push(new ExtractCommon(this.extractType, this.common));
|
||||
this.clear();
|
||||
},
|
||||
change(variable) {
|
||||
this.common.value = "${" + variable + "}";
|
||||
},
|
||||
remove() {
|
||||
this.list.splice(this.index, 1);
|
||||
},
|
||||
clear() {
|
||||
this.common.variable = null;
|
||||
this.common.expression = null;
|
||||
this.common.value = null;
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
expression() {
|
||||
switch (this.extractType) {
|
||||
case EXTRACT_TYPE.REGEX:
|
||||
return this.$t('api_test.request.extract.regex_expression');
|
||||
case EXTRACT_TYPE.JSON_PATH:
|
||||
return this.$t('api_test.request.extract.json_path_expression');
|
||||
case EXTRACT_TYPE.XPATH:
|
||||
return this.$t('api_test.request.extract.xpath_expression');
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.extract-btn {
|
||||
width: 60px;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,80 @@
|
|||
<template>
|
||||
<div>
|
||||
<div class="extract-item-editing regex" v-if="extract.regex.length > 0">
|
||||
<div>
|
||||
{{$t("api_test.request.extract.regex")}}
|
||||
</div>
|
||||
<div class="regex-item" v-for="(regex, index) in extract.regex" :key="index">
|
||||
<ms-api-extract-common :extract-type="type.REGEX" :list="extract.regex" :common="regex"
|
||||
:edit="true" :index="index"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="extract-item-editing json" v-if="extract.json.length > 0">
|
||||
<div>
|
||||
JSONPath
|
||||
</div>
|
||||
<div class="regex-item" v-for="(json, index) in extract.json" :key="index">
|
||||
<ms-api-extract-common :extract-type="type.JSON_PATH" :list="extract.json" :common="json"
|
||||
:edit="true" :index="index"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="extract-item-editing xpath" v-if="extract.xpath.length > 0">
|
||||
<div>
|
||||
XPath
|
||||
</div>
|
||||
<div class="regex-item" v-for="(xpath, index) in extract.xpath" :key="index">
|
||||
<ms-api-extract-common :extract-type="type.XPATH" :list="extract.xpath" :common="xpath"
|
||||
:edit="true" :index="index"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {Extract, EXTRACT_TYPE} from "../../model/ScenarioModel";
|
||||
import MsApiExtractCommon from "./ApiExtractCommon";
|
||||
|
||||
export default {
|
||||
name: "MsApiExtractEdit",
|
||||
|
||||
components: {MsApiExtractCommon},
|
||||
|
||||
props: {
|
||||
extract: Extract
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
type: EXTRACT_TYPE
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.extract-item-editing {
|
||||
padding-left: 10px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.extract-item-editing.regex {
|
||||
border-left: 2px solid #7B0274;
|
||||
}
|
||||
|
||||
.extract-item-editing.json {
|
||||
border-left: 2px solid #44B3D2;
|
||||
}
|
||||
|
||||
.extract-item-editing.xpath {
|
||||
border-left: 2px solid #E6A200;
|
||||
}
|
||||
|
||||
.regex-item {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
|
@ -49,6 +49,12 @@ export const ASSERTION_REGEX_SUBJECT = {
|
|||
RESPONSE_DATA: "Response Data"
|
||||
}
|
||||
|
||||
export const EXTRACT_TYPE = {
|
||||
REGEX: "Regex",
|
||||
JSON_PATH: "JSONPath",
|
||||
XPATH: "XPath"
|
||||
}
|
||||
|
||||
export class BaseConfig {
|
||||
|
||||
set(options) {
|
||||
|
@ -144,11 +150,10 @@ export class Request extends BaseConfig {
|
|||
this.headers = [];
|
||||
this.body = null;
|
||||
this.assertions = null;
|
||||
this.extract = [];
|
||||
this.extract = null;
|
||||
|
||||
this.set(options);
|
||||
this.sets({parameters: KeyValue, headers: KeyValue}, options);
|
||||
// TODO assigns extract
|
||||
}
|
||||
|
||||
initOptions(options) {
|
||||
|
@ -156,6 +161,7 @@ export class Request extends BaseConfig {
|
|||
options.method = "GET";
|
||||
options.body = new Body(options.body);
|
||||
options.assertions = new Assertions(options.assertions);
|
||||
options.extract = new Extract(options.extract);
|
||||
return options;
|
||||
}
|
||||
|
||||
|
@ -278,6 +284,64 @@ export class ResponseTime extends AssertionType {
|
|||
}
|
||||
}
|
||||
|
||||
export class Extract extends BaseConfig {
|
||||
constructor(options) {
|
||||
super();
|
||||
this.regex = [];
|
||||
this.json = [];
|
||||
this.xpath = [];
|
||||
|
||||
this.set(options);
|
||||
let types = {
|
||||
json: ExtractJSONPath,
|
||||
xpath: ExtractXPath,
|
||||
regex: ExtractRegex
|
||||
}
|
||||
this.sets(types, options);
|
||||
}
|
||||
}
|
||||
|
||||
export class ExtractType extends BaseConfig {
|
||||
constructor(type) {
|
||||
super();
|
||||
this.type = type;
|
||||
}
|
||||
}
|
||||
|
||||
export class ExtractCommon extends ExtractType {
|
||||
constructor(type, options) {
|
||||
super(type);
|
||||
this.variable = null;
|
||||
this.value = ""; // ${variable}
|
||||
this.expression = null;
|
||||
this.description = null;
|
||||
|
||||
this.set(options);
|
||||
}
|
||||
|
||||
isValid() {
|
||||
return !!this.variable && !!this.expression;
|
||||
}
|
||||
}
|
||||
|
||||
export class ExtractRegex extends ExtractCommon {
|
||||
constructor(options) {
|
||||
super(EXTRACT_TYPE.REGEX, options);
|
||||
}
|
||||
}
|
||||
|
||||
export class ExtractJSONPath extends ExtractCommon {
|
||||
constructor(options) {
|
||||
super(EXTRACT_TYPE.JSON_PATH, options);
|
||||
}
|
||||
}
|
||||
|
||||
export class ExtractXPath extends ExtractCommon {
|
||||
constructor(options) {
|
||||
super(EXTRACT_TYPE.XPATH, options);
|
||||
}
|
||||
}
|
||||
|
||||
/** ------------------------------------------------------------------------ **/
|
||||
const JMX_ASSERTION_CONDITION = {
|
||||
MATCH: 1,
|
||||
|
|
|
@ -147,7 +147,7 @@
|
|||
})
|
||||
},
|
||||
handleDelete(report) {
|
||||
this.$alert(this.$t('load_test.delete_confirm') + report.name + "?", '', {
|
||||
this.$alert(this.$t('report.delete_confirm') + report.name + "?", '', {
|
||||
confirmButtonText: this.$t('commons.confirm'),
|
||||
callback: (action) => {
|
||||
if (action === 'confirm') {
|
||||
|
|
|
@ -163,8 +163,8 @@
|
|||
this.editPasswordVisible = true;
|
||||
},
|
||||
updateUser(updateUserForm) {
|
||||
this.$refs[updateUserForm].validate(valide => {
|
||||
if (valide) {
|
||||
this.$refs[updateUserForm].validate(valid => {
|
||||
if (valid) {
|
||||
this.result = this.$post(this.updatePath, this.form, response => {
|
||||
this.$success(this.$t('commons.modify_success'));
|
||||
localStorage.setItem(TokenKey, JSON.stringify(response.data));
|
||||
|
@ -178,8 +178,8 @@
|
|||
})
|
||||
},
|
||||
updatePassword(editPasswordForm) {
|
||||
this.$refs[editPasswordForm].validate(valide => {
|
||||
if (valide) {
|
||||
this.$refs[editPasswordForm].validate(valid => {
|
||||
if (valid) {
|
||||
this.result = this.$post(this.updatePasswordPath, this.ruleForm, response => {
|
||||
this.$success(this.$t('commons.modify_success'));
|
||||
this.editPasswordVisible = false;
|
||||
|
|
|
@ -290,8 +290,8 @@
|
|||
})
|
||||
},
|
||||
updateWorkspace(updateForm) {
|
||||
this.$refs[updateForm].validate(valide => {
|
||||
if (valide) {
|
||||
this.$refs[updateForm].validate(valid => {
|
||||
if (valid) {
|
||||
this.result = this.$post("/workspace/special/update", this.form, () => {
|
||||
this.$success(this.$t('commons.modify_success'));
|
||||
this.dialogWsUpdateVisible = false;
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<template>
|
||||
<div v-loading="result.loading">
|
||||
|
||||
<el-card class="table-card">
|
||||
<div>
|
||||
<el-card class="table-card" v-loading="result.loading">
|
||||
<template v-slot:header>
|
||||
<ms-table-header :condition.sync="condition" @search="search" @create="create"
|
||||
:create-tip="btnTips" :title="$t('commons.test_resource_pool')"/>
|
||||
|
@ -46,11 +45,11 @@
|
|||
:total="total"/>
|
||||
</el-card>
|
||||
|
||||
<el-dialog v-loading="result.loading"
|
||||
:title="$t('test_resource_pool.create_resource_pool')"
|
||||
:visible.sync="createVisible" width="70%"
|
||||
@closed="closeFunc"
|
||||
:destroy-on-close="true">
|
||||
<el-dialog
|
||||
:title="$t('test_resource_pool.create_resource_pool')"
|
||||
:visible.sync="createVisible" width="70%"
|
||||
@closed="closeFunc"
|
||||
:destroy-on-close="true">
|
||||
<el-form :model="form" label-position="right" label-width="100px" size="small" :rules="rule"
|
||||
ref="createTestResourcePoolForm">
|
||||
<el-form-item :label="$t('commons.name')" prop="name">
|
||||
|
@ -351,8 +350,8 @@
|
|||
if (this.result.loading) {
|
||||
return;
|
||||
}
|
||||
this.$refs[createTestResourcePoolForm].validate(valide => {
|
||||
if (valide) {
|
||||
this.$refs[createTestResourcePoolForm].validate(valid => {
|
||||
if (valid) {
|
||||
let vri = this.validateResourceInfo();
|
||||
if (vri.validate) {
|
||||
this.convertSubmitResources();
|
||||
|
@ -390,8 +389,8 @@
|
|||
if (this.result.loading) {
|
||||
return;
|
||||
}
|
||||
this.$refs[updateTestResourcePoolForm].validate(valide => {
|
||||
if (valide) {
|
||||
this.$refs[updateTestResourcePoolForm].validate(valid => {
|
||||
if (valid) {
|
||||
let vri = this.validateResourceInfo();
|
||||
if (vri.validate) {
|
||||
this.convertSubmitResources();
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div v-loading="result.loading">
|
||||
|
||||
<el-card class="table-card">
|
||||
<el-card class="table-card">
|
||||
<template v-slot:header>
|
||||
<ms-table-header :condition.sync="condition" @search="search" @create="create"
|
||||
:create-tip="btnTips" :title="$t('commons.member')"/>
|
||||
|
@ -42,6 +42,7 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<ms-table-pagination :change="search" :current-page.sync="currentPage" :page-size.sync="pageSize"
|
||||
:total="total"/>
|
||||
</el-card>
|
||||
|
@ -111,14 +112,14 @@
|
|||
@confirm="updateUser('updateUserForm')"/>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<!--Changing user password in system settings-->
|
||||
<!--Changing user password in system settings-->
|
||||
<el-dialog :title="$t('member.edit_password')" :visible.sync="editPasswordVisible" width="30%" left>
|
||||
<el-form :model="ruleForm" label-position="right" label-width="100px" size="small" :rules="rule"
|
||||
ref="editPasswordForm" class="demo-ruleForm">
|
||||
<el-form-item :label="$t('member.new_password')" prop="newpassword">
|
||||
<el-input type="password" v-model="ruleForm.newpassword" autocomplete="off" show-password></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-form-item >
|
||||
<el-input v-model="ruleForm.id" autocomplete="off" :disabled="true" style="display:none"/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
@ -275,9 +276,9 @@
|
|||
}
|
||||
})
|
||||
},
|
||||
editUserPassword(editPasswordForm) {
|
||||
this.$refs[editPasswordForm].validate(valide => {
|
||||
if (valide) {
|
||||
editUserPassword(editPasswordForm){
|
||||
this.$refs[editPasswordForm].validate(valid=>{
|
||||
if(valid){
|
||||
this.result = this.$post(this.editPasswordPath, this.ruleForm, response => {
|
||||
this.$success(this.$t('commons.modify_success'));
|
||||
this.editPasswordVisible = false;
|
||||
|
|
|
@ -6,6 +6,7 @@ export default {
|
|||
'project': 'Project',
|
||||
'name': 'Name',
|
||||
'description': 'Description',
|
||||
'clear': 'Clear',
|
||||
'save': 'Save',
|
||||
'save_success': 'Saved successfully',
|
||||
'delete_success': 'Deleted successfully',
|
||||
|
@ -50,6 +51,7 @@ export default {
|
|||
'remark': 'Remark',
|
||||
'delete': 'Delete',
|
||||
'not_filled': 'Not filled',
|
||||
'please_select': 'Please select',
|
||||
'search_by_name': 'Search by name',
|
||||
'personal_information': 'Personal Information',
|
||||
'exit_system': 'Exit System',
|
||||
|
@ -97,16 +99,16 @@ export default {
|
|||
'please_choose_member': 'Please Choose Member',
|
||||
'search_by_name': 'Search by name',
|
||||
'modify_personal_info': 'Modify Personal Information',
|
||||
'edit_password':'Edit_Password',
|
||||
'edit_information':'Edit_Information',
|
||||
'edit_password': 'Edit_Password',
|
||||
'edit_information': 'Edit_Information',
|
||||
'input_name': 'Please enter a user name',
|
||||
'input_email': 'Please enter a email',
|
||||
'special_characters_are_not_supported': 'Special characters are not supported',
|
||||
'mobile_number_format_is_incorrect': 'Mobile number format is incorrect',
|
||||
'email_format_is_incorrect': 'Email format is incorrect',
|
||||
'password_format_is_incorrect': 'Password format is incorrect (At least 8-16 characters, at least 1 uppercase letter, 1 lowercase letter and 1 number)',
|
||||
'old_password':'Old Password',
|
||||
'new_password':'New Password',
|
||||
'old_password': 'Old Password',
|
||||
'new_password': 'New Password',
|
||||
},
|
||||
user: {
|
||||
'create': 'Create',
|
||||
|
@ -141,6 +143,7 @@ export default {
|
|||
'compare': 'Compare',
|
||||
'generation_error': 'Report generation error, cannot be viewed!',
|
||||
'being_generated': 'Report is being generated...',
|
||||
'delete_confirm': 'Confirm delete: ',
|
||||
},
|
||||
load_test: {
|
||||
'operating': 'Operating',
|
||||
|
@ -233,9 +236,9 @@ export default {
|
|||
text: "Text",
|
||||
regex: "Regex",
|
||||
response_time: "Response Time",
|
||||
select_type: "Please select a request type",
|
||||
select_subject: "Please select a request subject",
|
||||
select_condition: "Please select a condition",
|
||||
select_type: "Choose type",
|
||||
select_subject: "Subject",
|
||||
select_condition: "Condition",
|
||||
contains: "Contains",
|
||||
not_contains: "Not contains",
|
||||
equals: "Equals",
|
||||
|
@ -243,10 +246,18 @@ export default {
|
|||
end_with: "End With",
|
||||
value: "Value",
|
||||
expression: "Expression",
|
||||
response_in_time: "Response in time",
|
||||
response_in_time: "Response Time",
|
||||
},
|
||||
extract: "Extract from response",
|
||||
extract_desc: "Extract data from the response and store it in variables. Use the variables in subsequent requests.",
|
||||
extract: {
|
||||
label: "Extract from response",
|
||||
select_type: "Choose type",
|
||||
description: "Extract data from the response and store it in variables. Use the variables in subsequent requests.",
|
||||
regex: "Regex",
|
||||
variable_name: "Variable name",
|
||||
regex_expression: "Regular expression",
|
||||
json_path_expression: "JSONPath expression",
|
||||
xpath_expression: "XPath expression",
|
||||
}
|
||||
}
|
||||
},
|
||||
api_report: {
|
||||
|
@ -314,7 +325,6 @@ export default {
|
|||
input_method: "Please select method",
|
||||
input_prerequisite: "Please select prerequisite",
|
||||
delete_confirm: "Confirm delete test case: ",
|
||||
|
||||
import: {
|
||||
import: "Import test case",
|
||||
case_import: "Import test case",
|
||||
|
@ -326,7 +336,6 @@ export default {
|
|||
upload_limit_size: "Upload file size cannot exceed 20MB!",
|
||||
success: "Import success!",
|
||||
},
|
||||
|
||||
export: {
|
||||
export: "Export cases"
|
||||
}
|
||||
|
@ -403,7 +412,7 @@ export default {
|
|||
'fill_the_data': 'Please complete the data',
|
||||
'delete_prompt': 'This operation will permanently delete the resource pool, continue?',
|
||||
'status_change_success': 'Successfully changed the status!',
|
||||
'status_change_failed': 'Failed to change the status!',
|
||||
'status_change_failed': 'Failed to change the status, resource pool is invalid!',
|
||||
},
|
||||
i18n: {
|
||||
'home': 'Home'
|
||||
|
|
|
@ -99,16 +99,16 @@ export default {
|
|||
'please_choose_member': '请选择成员',
|
||||
'search_by_name': '根据名称搜索',
|
||||
'modify_personal_info': '修改个人信息',
|
||||
'edit_password':'修改密码',
|
||||
'edit_information':'编辑信息',
|
||||
'edit_password': '修改密码',
|
||||
'edit_information': '编辑信息',
|
||||
'input_name': '请输入名称',
|
||||
'input_email': '请输入邮箱',
|
||||
'special_characters_are_not_supported': '不支持特殊字符',
|
||||
'mobile_number_format_is_incorrect': '手机号码格式不正确',
|
||||
'email_format_is_incorrect': '邮箱格式不正确',
|
||||
'password_format_is_incorrect':'密码格式不正确(至少8-16个字符,至少1个大写字母,1个小写字母和1个数字)',
|
||||
'old_password':'旧密码',
|
||||
'new_password':'新密码',
|
||||
'password_format_is_incorrect': '密码格式不正确(至少8-16个字符,至少1个大写字母,1个小写字母和1个数字)',
|
||||
'old_password': '旧密码',
|
||||
'new_password': '新密码',
|
||||
},
|
||||
user: {
|
||||
'create': '创建用户',
|
||||
|
@ -116,7 +116,7 @@ export default {
|
|||
'input_name': '请输入用户名',
|
||||
'input_id': '请输入ID',
|
||||
'input_email': '请输入邮箱',
|
||||
'input_password':'请输入密码',
|
||||
'input_password': '请输入密码',
|
||||
'special_characters_are_not_supported': '不支持特殊字符',
|
||||
'mobile_number_format_is_incorrect': '手机号码格式不正确',
|
||||
'email_format_is_incorrect': '邮箱格式不正确',
|
||||
|
@ -143,9 +143,10 @@ export default {
|
|||
'compare': '比较',
|
||||
'generation_error': '报告生成错误,无法查看!',
|
||||
'being_generated': '报告正在生成中...',
|
||||
'delete_confirm': '确认删除报告: ',
|
||||
},
|
||||
load_test: {
|
||||
'operating':'操作',
|
||||
'operating': '操作',
|
||||
'recent': '最近的测试',
|
||||
'search_by_name': '根据名称搜索',
|
||||
'project_name': '所属项目',
|
||||
|
@ -199,8 +200,7 @@ export default {
|
|||
'select_resource_pool': '请选择资源池',
|
||||
'resource_pool_is_null': '资源池为空',
|
||||
'download_log_file': '下载完整日志文件',
|
||||
'pressure_prediction_chart':'压力预估图',
|
||||
|
||||
'pressure_prediction_chart': '压力预估图',
|
||||
},
|
||||
api_test: {
|
||||
save_and_run: "保存并执行",
|
||||
|
@ -245,11 +245,19 @@ export default {
|
|||
start_with: "以...开始",
|
||||
end_with: "以...结束",
|
||||
value: "值",
|
||||
expression: "正则表达式",
|
||||
expression: "表达式",
|
||||
response_in_time: "响应时间在...毫秒以内",
|
||||
},
|
||||
extract: "提取",
|
||||
extract_desc: "从响应中提取数据并将其存储在变量中。在后续请求中使用变量",
|
||||
extract: {
|
||||
label: "提取",
|
||||
select_type: "请选择类型",
|
||||
description: "从响应中提取数据并将其存储在变量中,在后续请求中使用变量。",
|
||||
regex: "正则",
|
||||
variable_name: "变量名",
|
||||
regex_expression: "正则表达式",
|
||||
json_path_expression: "JSONPath表达式",
|
||||
xpath_expression: "XPath表达式",
|
||||
}
|
||||
}
|
||||
},
|
||||
api_report: {
|
||||
|
@ -404,7 +412,7 @@ export default {
|
|||
'fill_the_data': '请完善数据',
|
||||
'delete_prompt': '此操作将永久删除该资源池, 是否继续?',
|
||||
'status_change_success': '状态修改成功!',
|
||||
'status_change_failed': '状态修改失败!',
|
||||
'status_change_failed': '状态修改失败, 校验不通过!',
|
||||
},
|
||||
i18n: {
|
||||
'home': '首页'
|
||||
|
|
Loading…
Reference in New Issue