Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MeterSphere
metersphere
提交
c4d6ec1f
M
metersphere
项目概览
MeterSphere
/
metersphere
上一次同步 大约 3 年
通知
25
Star
1
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
metersphere
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c4d6ec1f
编写于
5月 21, 2020
作者:
C
chenjianxing
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'dev' of
https://github.com/fit2cloudrd/metersphere-server
into dev
上级
58ace8e0
abf1135a
变更
60
隐藏空白更改
内联
并排
Showing
60 changed file
with
1237 addition
and
367 deletion
+1237
-367
backend/pom.xml
backend/pom.xml
+4
-1
backend/src/main/java/io/metersphere/api/jmeter/APIBackendListenerClient.java
...a/io/metersphere/api/jmeter/APIBackendListenerClient.java
+7
-6
backend/src/main/java/io/metersphere/api/jmeter/RequestResult.java
...rc/main/java/io/metersphere/api/jmeter/RequestResult.java
+2
-0
backend/src/main/java/io/metersphere/api/jmeter/ScenarioResult.java
...c/main/java/io/metersphere/api/jmeter/ScenarioResult.java
+4
-2
backend/src/main/java/io/metersphere/api/jmeter/TestResult.java
...d/src/main/java/io/metersphere/api/jmeter/TestResult.java
+2
-2
backend/src/main/java/io/metersphere/base/domain/LoadTestReport.java
.../main/java/io/metersphere/base/domain/LoadTestReport.java
+2
-0
backend/src/main/java/io/metersphere/base/domain/LoadTestReportDetail.java
...java/io/metersphere/base/domain/LoadTestReportDetail.java
+5
-3
backend/src/main/java/io/metersphere/base/domain/LoadTestReportDetailExample.java
.../metersphere/base/domain/LoadTestReportDetailExample.java
+60
-0
backend/src/main/java/io/metersphere/base/domain/LoadTestReportDetailKey.java
...a/io/metersphere/base/domain/LoadTestReportDetailKey.java
+14
-0
backend/src/main/java/io/metersphere/base/domain/LoadTestReportLog.java
...in/java/io/metersphere/base/domain/LoadTestReportLog.java
+2
-0
backend/src/main/java/io/metersphere/base/domain/LoadTestReportLogExample.java
.../io/metersphere/base/domain/LoadTestReportLogExample.java
+60
-0
backend/src/main/java/io/metersphere/base/mapper/LoadTestReportDetailMapper.java
...o/metersphere/base/mapper/LoadTestReportDetailMapper.java
+3
-2
backend/src/main/java/io/metersphere/base/mapper/LoadTestReportDetailMapper.xml
...io/metersphere/base/mapper/LoadTestReportDetailMapper.xml
+68
-49
backend/src/main/java/io/metersphere/base/mapper/LoadTestReportLogMapper.xml
...va/io/metersphere/base/mapper/LoadTestReportLogMapper.xml
+92
-72
backend/src/main/java/io/metersphere/base/mapper/LoadTestReportMapper.java
...java/io/metersphere/base/mapper/LoadTestReportMapper.java
+8
-9
backend/src/main/java/io/metersphere/base/mapper/LoadTestReportMapper.xml
.../java/io/metersphere/base/mapper/LoadTestReportMapper.xml
+47
-62
backend/src/main/java/io/metersphere/base/mapper/ext/ExtLoadTestReportMapper.java
.../metersphere/base/mapper/ext/ExtLoadTestReportMapper.java
+0
-2
backend/src/main/java/io/metersphere/base/mapper/ext/ExtLoadTestReportMapper.xml
...o/metersphere/base/mapper/ext/ExtLoadTestReportMapper.xml
+0
-6
backend/src/main/java/io/metersphere/commons/constants/ParamConstants.java
...java/io/metersphere/commons/constants/ParamConstants.java
+26
-1
backend/src/main/java/io/metersphere/controller/RoleController.java
...c/main/java/io/metersphere/controller/RoleController.java
+5
-0
backend/src/main/java/io/metersphere/controller/SystemParameterController.java
.../io/metersphere/controller/SystemParameterController.java
+28
-0
backend/src/main/java/io/metersphere/controller/UserController.java
...c/main/java/io/metersphere/controller/UserController.java
+5
-14
backend/src/main/java/io/metersphere/controller/UserRoleController.java
...in/java/io/metersphere/controller/UserRoleController.java
+9
-2
backend/src/main/java/io/metersphere/controller/WorkspaceController.java
...n/java/io/metersphere/controller/WorkspaceController.java
+5
-0
backend/src/main/java/io/metersphere/controller/request/member/SetAdminRequest.java
...etersphere/controller/request/member/SetAdminRequest.java
+0
-10
backend/src/main/java/io/metersphere/controller/request/member/UserRequest.java
...io/metersphere/controller/request/member/UserRequest.java
+16
-0
backend/src/main/java/io/metersphere/dto/LogDetailDTO.java
backend/src/main/java/io/metersphere/dto/LogDetailDTO.java
+1
-1
backend/src/main/java/io/metersphere/performance/controller/PerformanceReportController.java
...e/performance/controller/PerformanceReportController.java
+3
-3
backend/src/main/java/io/metersphere/performance/service/PerformanceTestService.java
...tersphere/performance/service/PerformanceTestService.java
+5
-16
backend/src/main/java/io/metersphere/performance/service/ReportService.java
...ava/io/metersphere/performance/service/ReportService.java
+30
-20
backend/src/main/java/io/metersphere/service/RoleService.java
...end/src/main/java/io/metersphere/service/RoleService.java
+7
-0
backend/src/main/java/io/metersphere/service/SystemParameterService.java
...n/java/io/metersphere/service/SystemParameterService.java
+48
-1
backend/src/main/java/io/metersphere/service/UserRoleService.java
...src/main/java/io/metersphere/service/UserRoleService.java
+34
-0
backend/src/main/java/io/metersphere/service/UserService.java
...end/src/main/java/io/metersphere/service/UserService.java
+53
-24
backend/src/main/resources/db/migration/V2__metersphere_ddl.sql
...d/src/main/resources/db/migration/V2__metersphere_ddl.sql
+6
-8
backend/src/main/resources/generatorConfig.xml
backend/src/main/resources/generatorConfig.xml
+1
-1
frontend/src/business/components/api/head/ApiHeaderMenus.vue
frontend/src/business/components/api/head/ApiHeaderMenus.vue
+1
-0
frontend/src/business/components/api/report/components/AssertionResults.vue
...ess/components/api/report/components/AssertionResults.vue
+1
-1
frontend/src/business/components/api/report/components/MetricChart.vue
...business/components/api/report/components/MetricChart.vue
+1
-1
frontend/src/business/components/api/report/components/RequestResult.vue
...siness/components/api/report/components/RequestResult.vue
+5
-5
frontend/src/business/components/api/report/components/ScenarioResult.vue
...iness/components/api/report/components/ScenarioResult.vue
+1
-1
frontend/src/business/components/api/test/ApiTestConfig.vue
frontend/src/business/components/api/test/ApiTestConfig.vue
+5
-1
frontend/src/business/components/api/test/components/ApiRequestConfig.vue
...iness/components/api/test/components/ApiRequestConfig.vue
+8
-4
frontend/src/business/components/api/test/components/ApiRequestForm.vue
...usiness/components/api/test/components/ApiRequestForm.vue
+5
-1
frontend/src/business/components/api/test/components/ApiScenarioConfig.vue
...ness/components/api/test/components/ApiScenarioConfig.vue
+18
-7
frontend/src/business/components/api/test/components/ApiScenarioForm.vue
...siness/components/api/test/components/ApiScenarioForm.vue
+11
-4
frontend/src/business/components/api/test/components/assertion/ApiAssertionResponseTime.vue
...pi/test/components/assertion/ApiAssertionResponseTime.vue
+1
-2
frontend/src/business/components/api/test/components/assertion/ApiAssertionText.vue
...onents/api/test/components/assertion/ApiAssertionText.vue
+1
-1
frontend/src/business/components/api/test/components/assertion/ApiAssertionsEdit.vue
...nents/api/test/components/assertion/ApiAssertionsEdit.vue
+1
-1
frontend/src/business/components/api/test/model/ScenarioModel.js
...d/src/business/components/api/test/model/ScenarioModel.js
+16
-0
frontend/src/business/components/common/head/RecentList.vue
frontend/src/business/components/common/head/RecentList.vue
+16
-1
frontend/src/business/components/common/router/router.js
frontend/src/business/components/common/router/router.js
+7
-1
frontend/src/business/components/performance/report/components/LogDetails.vue
...s/components/performance/report/components/LogDetails.vue
+2
-2
frontend/src/business/components/performance/test/components/PerformanceAdvancedConfig.vue
...performance/test/components/PerformanceAdvancedConfig.vue
+3
-1
frontend/src/business/components/settings/SettingMenu.vue
frontend/src/business/components/settings/SettingMenu.vue
+1
-0
frontend/src/business/components/settings/system/SystemParameterSetting.vue
...ess/components/settings/system/SystemParameterSetting.vue
+236
-0
frontend/src/business/components/settings/system/User.vue
frontend/src/business/components/settings/system/User.vue
+184
-8
frontend/src/i18n/en-US.js
frontend/src/i18n/en-US.js
+25
-4
frontend/src/i18n/zh-CN.js
frontend/src/i18n/zh-CN.js
+21
-3
frontend/src/i18n/zh-TW.js
frontend/src/i18n/zh-TW.js
+5
-1
未找到文件。
backend/pom.xml
浏览文件 @
c4d6ec1f
...
...
@@ -63,7 +63,10 @@
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-jetty
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-mail
</artifactId>
</dependency>
<dependency>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
...
...
backend/src/main/java/io/metersphere/api/jmeter/APIBackendListenerClient.java
浏览文件 @
c4d6ec1f
...
...
@@ -12,10 +12,7 @@ import org.apache.jmeter.visualizers.backend.AbstractBackendListenerClient;
import
org.apache.jmeter.visualizers.backend.BackendListenerContext
;
import
java.io.Serializable
;
import
java.util.ArrayList
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.*
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
...
...
@@ -72,6 +69,7 @@ public class APIBackendListenerClient extends AbstractBackendListenerClient impl
sampleResults
.
forEach
(
result
->
{
String
thread
=
StringUtils
.
substringBeforeLast
(
result
.
getThreadName
(),
" "
);
String
order
=
StringUtils
.
substringAfterLast
(
result
.
getThreadName
(),
" "
);
String
scenarioName
=
StringUtils
.
substringBefore
(
thread
,
SPLIT
);
String
scenarioId
=
StringUtils
.
substringAfter
(
thread
,
SPLIT
);
ScenarioResult
scenarioResult
;
...
...
@@ -79,6 +77,7 @@ public class APIBackendListenerClient extends AbstractBackendListenerClient impl
scenarioResult
=
new
ScenarioResult
();
scenarioResult
.
setId
(
scenarioId
);
scenarioResult
.
setName
(
scenarioName
);
scenarioResult
.
setOrder
(
StringUtils
.
substringBefore
(
order
,
"-"
));
scenarios
.
put
(
scenarioId
,
scenarioResult
);
}
else
{
scenarioResult
=
scenarios
.
get
(
scenarioId
);
...
...
@@ -88,8 +87,8 @@ public class APIBackendListenerClient extends AbstractBackendListenerClient impl
scenarioResult
.
addSuccess
();
testResult
.
addSuccess
();
}
else
{
scenarioResult
.
addError
();
testResult
.
addError
();
scenarioResult
.
addError
(
result
.
getErrorCount
()
);
testResult
.
addError
(
result
.
getErrorCount
()
);
}
RequestResult
requestResult
=
getRequestResult
(
result
);
...
...
@@ -103,6 +102,7 @@ public class APIBackendListenerClient extends AbstractBackendListenerClient impl
scenarioResult
.
addTotalAssertions
(
requestResult
.
getTotalAssertions
());
});
testResult
.
getScenarios
().
addAll
(
scenarios
.
values
());
testResult
.
getScenarios
().
sort
(
Comparator
.
comparing
(
ScenarioResult:
:
getOrder
));
apiTestService
.
changeStatus
(
id
,
APITestStatus
.
Completed
);
apiReportService
.
save
(
testResult
);
});
...
...
@@ -123,6 +123,7 @@ public class APIBackendListenerClient extends AbstractBackendListenerClient impl
requestResult
.
setRequestSize
(
result
.
getSentBytes
());
requestResult
.
setTotalAssertions
(
result
.
getAssertionResults
().
length
);
requestResult
.
setSuccess
(
result
.
isSuccessful
());
requestResult
.
setError
(
result
.
getErrorCount
());
ResponseResult
responseResult
=
requestResult
.
getResponseResult
();
responseResult
.
setBody
(
result
.
getResponseDataAsString
());
...
...
backend/src/main/java/io/metersphere/api/jmeter/RequestResult.java
浏览文件 @
c4d6ec1f
...
...
@@ -13,6 +13,8 @@ public class RequestResult {
private
long
requestSize
;
private
int
error
;
private
boolean
success
;
private
String
headers
;
...
...
backend/src/main/java/io/metersphere/api/jmeter/ScenarioResult.java
浏览文件 @
c4d6ec1f
...
...
@@ -12,6 +12,8 @@ public class ScenarioResult {
private
String
name
;
private
String
order
;
private
long
responseTime
;
private
int
error
=
0
;
...
...
@@ -28,8 +30,8 @@ public class ScenarioResult {
this
.
responseTime
+=
time
;
}
public
void
addError
()
{
this
.
error
++
;
public
void
addError
(
int
count
)
{
this
.
error
+=
count
;
}
public
void
addSuccess
()
{
...
...
backend/src/main/java/io/metersphere/api/jmeter/TestResult.java
浏览文件 @
c4d6ec1f
...
...
@@ -22,8 +22,8 @@ public class TestResult {
private
final
List
<
ScenarioResult
>
scenarios
=
new
ArrayList
<>();
public
void
addError
()
{
this
.
error
++
;
public
void
addError
(
int
count
)
{
this
.
error
+=
count
;
}
public
void
addSuccess
()
{
...
...
backend/src/main/java/io/metersphere/base/domain/LoadTestReport.java
浏览文件 @
c4d6ec1f
...
...
@@ -18,5 +18,7 @@ public class LoadTestReport implements Serializable {
private
String
status
;
private
String
description
;
private
static
final
long
serialVersionUID
=
1L
;
}
\ No newline at end of file
backend/src/main/java/io/metersphere/base/domain/LoadTestReportDetail.java
浏览文件 @
c4d6ec1f
package
io.metersphere.base.domain
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.ToString
;
import
java.io.Serializable
;
@Data
public
class
LoadTestReportDetail
implements
Serializable
{
private
String
reportId
;
@EqualsAndHashCode
(
callSuper
=
true
)
@ToString
(
callSuper
=
true
)
public
class
LoadTestReportDetail
extends
LoadTestReportDetailKey
implements
Serializable
{
private
String
content
;
private
static
final
long
serialVersionUID
=
1L
;
...
...
backend/src/main/java/io/metersphere/base/domain/LoadTestReportDetailExample.java
浏览文件 @
c4d6ec1f
...
...
@@ -173,6 +173,66 @@ public class LoadTestReportDetailExample {
addCriterion
(
"report_id not between"
,
value1
,
value2
,
"reportId"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartIsNull
()
{
addCriterion
(
"part is null"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartIsNotNull
()
{
addCriterion
(
"part is not null"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartEqualTo
(
Long
value
)
{
addCriterion
(
"part ="
,
value
,
"part"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartNotEqualTo
(
Long
value
)
{
addCriterion
(
"part <>"
,
value
,
"part"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartGreaterThan
(
Long
value
)
{
addCriterion
(
"part >"
,
value
,
"part"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartGreaterThanOrEqualTo
(
Long
value
)
{
addCriterion
(
"part >="
,
value
,
"part"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartLessThan
(
Long
value
)
{
addCriterion
(
"part <"
,
value
,
"part"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartLessThanOrEqualTo
(
Long
value
)
{
addCriterion
(
"part <="
,
value
,
"part"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartIn
(
List
<
Long
>
values
)
{
addCriterion
(
"part in"
,
values
,
"part"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartNotIn
(
List
<
Long
>
values
)
{
addCriterion
(
"part not in"
,
values
,
"part"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartBetween
(
Long
value1
,
Long
value2
)
{
addCriterion
(
"part between"
,
value1
,
value2
,
"part"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartNotBetween
(
Long
value1
,
Long
value2
)
{
addCriterion
(
"part not between"
,
value1
,
value2
,
"part"
);
return
(
Criteria
)
this
;
}
}
public
static
class
Criteria
extends
GeneratedCriteria
{
...
...
backend/src/main/java/io/metersphere/base/domain/LoadTestReport
WithBLOBs
.java
→
backend/src/main/java/io/metersphere/base/domain/LoadTestReport
DetailKey
.java
浏览文件 @
c4d6ec1f
package
io.metersphere.base.domain
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.ToString
;
import
java.io.Serializable
;
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@ToString
(
callSuper
=
true
)
public
class
LoadTestReportWithBLOBs
extends
LoadTestReport
implements
Serializable
{
private
String
description
;
public
class
LoadTestReportDetailKey
implements
Serializable
{
private
String
reportId
;
private
String
conten
t
;
private
Long
par
t
;
private
static
final
long
serialVersionUID
=
1L
;
}
\ No newline at end of file
backend/src/main/java/io/metersphere/base/domain/LoadTestReportLog.java
浏览文件 @
c4d6ec1f
...
...
@@ -12,6 +12,8 @@ public class LoadTestReportLog implements Serializable {
private
String
resourceId
;
private
Long
part
;
private
String
content
;
private
static
final
long
serialVersionUID
=
1L
;
...
...
backend/src/main/java/io/metersphere/base/domain/LoadTestReportLogExample.java
浏览文件 @
c4d6ec1f
...
...
@@ -313,6 +313,66 @@ public class LoadTestReportLogExample {
addCriterion
(
"resource_id not between"
,
value1
,
value2
,
"resourceId"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartIsNull
()
{
addCriterion
(
"part is null"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartIsNotNull
()
{
addCriterion
(
"part is not null"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartEqualTo
(
Long
value
)
{
addCriterion
(
"part ="
,
value
,
"part"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartNotEqualTo
(
Long
value
)
{
addCriterion
(
"part <>"
,
value
,
"part"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartGreaterThan
(
Long
value
)
{
addCriterion
(
"part >"
,
value
,
"part"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartGreaterThanOrEqualTo
(
Long
value
)
{
addCriterion
(
"part >="
,
value
,
"part"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartLessThan
(
Long
value
)
{
addCriterion
(
"part <"
,
value
,
"part"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartLessThanOrEqualTo
(
Long
value
)
{
addCriterion
(
"part <="
,
value
,
"part"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartIn
(
List
<
Long
>
values
)
{
addCriterion
(
"part in"
,
values
,
"part"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartNotIn
(
List
<
Long
>
values
)
{
addCriterion
(
"part not in"
,
values
,
"part"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartBetween
(
Long
value1
,
Long
value2
)
{
addCriterion
(
"part between"
,
value1
,
value2
,
"part"
);
return
(
Criteria
)
this
;
}
public
Criteria
andPartNotBetween
(
Long
value1
,
Long
value2
)
{
addCriterion
(
"part not between"
,
value1
,
value2
,
"part"
);
return
(
Criteria
)
this
;
}
}
public
static
class
Criteria
extends
GeneratedCriteria
{
...
...
backend/src/main/java/io/metersphere/base/mapper/LoadTestReportDetailMapper.java
浏览文件 @
c4d6ec1f
...
...
@@ -2,6 +2,7 @@ package io.metersphere.base.mapper;
import
io.metersphere.base.domain.LoadTestReportDetail
;
import
io.metersphere.base.domain.LoadTestReportDetailExample
;
import
io.metersphere.base.domain.LoadTestReportDetailKey
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
...
...
@@ -11,7 +12,7 @@ public interface LoadTestReportDetailMapper {
int
deleteByExample
(
LoadTestReportDetailExample
example
);
int
deleteByPrimaryKey
(
String
reportId
);
int
deleteByPrimaryKey
(
LoadTestReportDetailKey
key
);
int
insert
(
LoadTestReportDetail
record
);
...
...
@@ -21,7 +22,7 @@ public interface LoadTestReportDetailMapper {
List
<
LoadTestReportDetail
>
selectByExample
(
LoadTestReportDetailExample
example
);
LoadTestReportDetail
selectByPrimaryKey
(
String
reportId
);
LoadTestReportDetail
selectByPrimaryKey
(
LoadTestReportDetailKey
key
);
int
updateByExampleSelective
(
@Param
(
"record"
)
LoadTestReportDetail
record
,
@Param
(
"example"
)
LoadTestReportDetailExample
example
);
...
...
backend/src/main/java/io/metersphere/base/mapper/LoadTestReportDetailMapper.xml
浏览文件 @
c4d6ec1f
...
...
@@ -3,6 +3,7 @@
<mapper
namespace=
"io.metersphere.base.mapper.LoadTestReportDetailMapper"
>
<resultMap
id=
"BaseResultMap"
type=
"io.metersphere.base.domain.LoadTestReportDetail"
>
<id
column=
"report_id"
jdbcType=
"VARCHAR"
property=
"reportId"
/>
<id
column=
"part"
jdbcType=
"BIGINT"
property=
"part"
/>
</resultMap>
<resultMap
extends=
"BaseResultMap"
id=
"ResultMapWithBLOBs"
type=
"io.metersphere.base.domain.LoadTestReportDetail"
>
<result
column=
"content"
jdbcType=
"LONGVARCHAR"
property=
"content"
/>
...
...
@@ -66,7 +67,8 @@
</where>
</sql>
<sql
id=
"Base_Column_List"
>
report_id
report_id,
part
</sql>
<sql
id=
"Blob_Column_List"
>
content
...
...
@@ -101,18 +103,20 @@
order by ${orderByClause}
</if>
</select>
<select
id=
"selectByPrimaryKey"
parameterType=
"java.lang.String"
resultMap=
"ResultMapWithBLOBs"
>
select
<include
refid=
"Base_Column_List"
/>
,
<include
refid=
"Blob_Column_List"
/>
from load_test_report_detail
where report_id = #{reportId,jdbcType=VARCHAR}
</select>
<delete
id=
"deleteByPrimaryKey"
parameterType=
"java.lang.String"
>
delete from load_test_report_detail
where report_id = #{reportId,jdbcType=VARCHAR}
</delete>
<select
id=
"selectByPrimaryKey"
parameterType=
"io.metersphere.base.domain.LoadTestReportDetailKey"
resultMap=
"ResultMapWithBLOBs"
>
SELECT
<include
refid=
"Base_Column_List"
/>
,
<include
refid=
"Blob_Column_List"
/>
FROM load_test_report_detail
WHERE report_id = #{reportId,jdbcType=VARCHAR}
AND part = #{part,jdbcType=BIGINT}
</select>
<delete
id=
"deleteByPrimaryKey"
parameterType=
"io.metersphere.base.domain.LoadTestReportDetailKey"
>
DELETE FROM load_test_report_detail
WHERE report_id = #{reportId,jdbcType=VARCHAR}
AND part = #{part,jdbcType=BIGINT}
</delete>
<delete
id=
"deleteByExample"
parameterType=
"io.metersphere.base.domain.LoadTestReportDetailExample"
>
delete from load_test_report_detail
<if
test=
"_parameter != null"
>
...
...
@@ -120,27 +124,35 @@
</if>
</delete>
<insert
id=
"insert"
parameterType=
"io.metersphere.base.domain.LoadTestReportDetail"
>
insert into load_test_report_detail (report_id, content)
values (#{reportId,jdbcType=VARCHAR}, #{content,jdbcType=LONGVARCHAR})
insert into load_test_report_detail (report_id, part, content
)
values (#{reportId,jdbcType=VARCHAR}, #{part,jdbcType=BIGINT}, #{content,jdbcType=LONGVARCHAR}
)
</insert>
<insert
id=
"insertSelective"
parameterType=
"io.metersphere.base.domain.LoadTestReportDetail"
>
insert into load_test_report_detail
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"reportId != null"
>
report_id,
</if>
<if
test=
"content != null"
>
content,
</if>
</trim>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"reportId != null"
>
#{reportId,jdbcType=VARCHAR},
</if>
<if
test=
"content != null"
>
#{content,jdbcType=LONGVARCHAR},
</if>
</trim>
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"reportId != null"
>
report_id,
</if>
<if
test=
"part != null"
>
part,
</if>
<if
test=
"content != null"
>
content,
</if>
</trim>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"reportId != null"
>
#{reportId,jdbcType=VARCHAR},
</if>
<if
test=
"part != null"
>
#{part,jdbcType=BIGINT},
</if>
<if
test=
"content != null"
>
#{content,jdbcType=LONGVARCHAR},
</if>
</trim>
</insert>
<select
id=
"countByExample"
parameterType=
"io.metersphere.base.domain.LoadTestReportDetailExample"
resultType=
"java.lang.Long"
>
select count(*) from load_test_report_detail
...
...
@@ -150,30 +162,35 @@
</select>
<update
id=
"updateByExampleSelective"
parameterType=
"map"
>
update load_test_report_detail
<set>
<if
test=
"record.reportId != null"
>
report_id = #{record.reportId,jdbcType=VARCHAR},
</if>
<if
test=
"record.content != null"
>
content = #{record.content,jdbcType=LONGVARCHAR},
</if>
</set>
<set>
<if
test=
"record.reportId != null"
>
report_id = #{record.reportId,jdbcType=VARCHAR},
</if>
<if
test=
"record.part != null"
>
part = #{record.part,jdbcType=BIGINT},
</if>
<if
test=
"record.content != null"
>
content = #{record.content,jdbcType=LONGVARCHAR},
</if>
</set>
<if
test=
"_parameter != null"
>
<include
refid=
"Update_By_Example_Where_Clause"
/>
</if>
</update>
<update
id=
"updateByExampleWithBLOBs"
parameterType=
"map"
>
update load_test_report_detail
set report_id = #{record.reportId,jdbcType=VARCHAR},
update load_test_report_detail
set report_id = #{record.reportId,jdbcType=VARCHAR},
part = #{record.part,jdbcType=BIGINT},
content = #{record.content,jdbcType=LONGVARCHAR}
<if
test=
"_parameter != null"
>
<if
test=
"_parameter != null"
>
<include
refid=
"Update_By_Example_Where_Clause"
/>
</if>
</update>
<update
id=
"updateByExample"
parameterType=
"map"
>
update load_test_report_detail
set report_id = #{record.reportId,jdbcType=VARCHAR}
<if
test=
"_parameter != null"
>
update load_test_report_detail
set report_id = #{record.reportId,jdbcType=VARCHAR},
part = #{record.part,jdbcType=BIGINT}
<if
test=
"_parameter != null"
>
<include
refid=
"Update_By_Example_Where_Clause"
/>
</if>
</update>
...
...
@@ -184,11 +201,13 @@
content = #{content,jdbcType=LONGVARCHAR},
</if>
</set>
where report_id = #{reportId,jdbcType=VARCHAR}
where report_id = #{reportId,jdbcType=VARCHAR}
and part = #{part,jdbcType=BIGINT}
</update>
<update
id=
"updateByPrimaryKeyWithBLOBs"
parameterType=
"io.metersphere.base.domain.LoadTestReportDetail"
>
update load_test_report_detail
set content = #{content,jdbcType=LONGVARCHAR}
where report_id = #{reportId,jdbcType=VARCHAR}
update load_test_report_detail
set content = #{content,jdbcType=LONGVARCHAR}
where report_id = #{reportId,jdbcType=VARCHAR}
and part = #{part,jdbcType=BIGINT}
</update>
</mapper>
\ No newline at end of file
backend/src/main/java/io/metersphere/base/mapper/LoadTestReportLogMapper.xml
浏览文件 @
c4d6ec1f
...
...
@@ -5,6 +5,7 @@
<id
column=
"id"
jdbcType=
"VARCHAR"
property=
"id"
/>
<result
column=
"report_id"
jdbcType=
"VARCHAR"
property=
"reportId"
/>
<result
column=
"resource_id"
jdbcType=
"VARCHAR"
property=
"resourceId"
/>
<result
column=
"part"
jdbcType=
"BIGINT"
property=
"part"
/>
</resultMap>
<resultMap
extends=
"BaseResultMap"
id=
"ResultMapWithBLOBs"
type=
"io.metersphere.base.domain.LoadTestReportLog"
>
<result
column=
"content"
jdbcType=
"LONGVARCHAR"
property=
"content"
/>
...
...
@@ -68,7 +69,10 @@
</where>
</sql>
<sql
id=
"Base_Column_List"
>
id, report_id, resource_id
id,
report_id,
resource_id,
part
</sql>
<sql
id=
"Blob_Column_List"
>
content
...
...
@@ -122,41 +126,47 @@
</if>
</delete>
<insert
id=
"insert"
parameterType=
"io.metersphere.base.domain.LoadTestReportLog"
>
insert into load_test_report_log (id, report_id, resource_id,
content)
values (#{id,jdbcType=VARCHAR}, #{reportId,jdbcType=VARCHAR}, #{resourceId,jdbcType=VARCHAR},
#{content,jdbcType=LONGVARCHAR})
insert into load_test_report_log (id, report_id, resource_id,
part,
content)
values (#{id,jdbcType=VARCHAR}, #{reportId,jdbcType=VARCHAR}, #{resourceId,jdbcType=VARCHAR},
#{
part,jdbcType=BIGINT}, #{
content,jdbcType=LONGVARCHAR})
</insert>
<insert
id=
"insertSelective"
parameterType=
"io.metersphere.base.domain.LoadTestReportLog"
>
insert into load_test_report_log
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"id != null"
>
id,
</if>
<if
test=
"reportId != null"
>
report_id,
</if>
<if
test=
"resourceId != null"
>
resource_id,
</if>
<if
test=
"content != null"
>
content,
</if>
</trim>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"id != null"
>
#{id,jdbcType=VARCHAR},
</if>
<if
test=
"reportId != null"
>
#{reportId,jdbcType=VARCHAR},
</if>
<if
test=
"resourceId != null"
>
#{resourceId,jdbcType=VARCHAR},
</if>
<if
test=
"content != null"
>
#{content,jdbcType=LONGVARCHAR},
</if>
</trim>
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"id != null"
>
id,
</if>
<if
test=
"reportId != null"
>
report_id,
</if>
<if
test=
"resourceId != null"
>
resource_id,
</if>
<if
test=
"part != null"
>
part,
</if>
<if
test=
"content != null"
>
content,
</if>
</trim>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"id != null"
>
#{id,jdbcType=VARCHAR},
</if>
<if
test=
"reportId != null"
>
#{reportId,jdbcType=VARCHAR},
</if>
<if
test=
"resourceId != null"
>
#{resourceId,jdbcType=VARCHAR},
</if>
<if
test=
"part != null"
>
#{part,jdbcType=BIGINT},
</if>
<if
test=
"content != null"
>
#{content,jdbcType=LONGVARCHAR},
</if>
</trim>
</insert>
<select
id=
"countByExample"
parameterType=
"io.metersphere.base.domain.LoadTestReportLogExample"
resultType=
"java.lang.Long"
>
select count(*) from load_test_report_log
...
...
@@ -166,69 +176,79 @@
</select>
<update
id=
"updateByExampleSelective"
parameterType=
"map"
>
update load_test_report_log
<set>
<if
test=
"record.id != null"
>
id = #{record.id,jdbcType=VARCHAR},
</if>
<if
test=
"record.reportId != null"
>
report_id = #{record.reportId,jdbcType=VARCHAR},
</if>
<if
test=
"record.resourceId != null"
>
resource_id = #{record.resourceId,jdbcType=VARCHAR},
</if>
<if
test=
"record.content != null"
>
content = #{record.content,jdbcType=LONGVARCHAR},
</if>
</set>
<set>
<if
test=
"record.id != null"
>
id = #{record.id,jdbcType=VARCHAR},
</if>
<if
test=
"record.reportId != null"
>
report_id = #{record.reportId,jdbcType=VARCHAR},
</if>
<if
test=
"record.resourceId != null"
>
resource_id = #{record.resourceId,jdbcType=VARCHAR},
</if>
<if
test=
"record.part != null"
>
part = #{record.part,jdbcType=BIGINT},
</if>
<if
test=
"record.content != null"
>
content = #{record.content,jdbcType=LONGVARCHAR},
</if>
</set>
<if
test=
"_parameter != null"
>
<include
refid=
"Update_By_Example_Where_Clause"
/>
</if>
</update>
<update
id=
"updateByExampleWithBLOBs"
parameterType=
"map"
>
update load_test_report_log
set id = #{record.id,jdbcType=VARCHAR},
update load_test_report_log
set id = #{record.id,jdbcType=VARCHAR},
report_id = #{record.reportId,jdbcType=VARCHAR},
resource_id = #{record.resourceId,jdbcType=VARCHAR},
part = #{record.part,jdbcType=BIGINT},
content = #{record.content,jdbcType=LONGVARCHAR}
<if
test=
"_parameter != null"
>
<if
test=
"_parameter != null"
>
<include
refid=
"Update_By_Example_Where_Clause"
/>
</if>
</update>
<update
id=
"updateByExample"
parameterType=
"map"
>
update load_test_report_log
set id = #{record.id,jdbcType=VARCHAR},
update load_test_report_log
set id = #{record.id,jdbcType=VARCHAR},
report_id = #{record.reportId,jdbcType=VARCHAR},
resource_id = #{record.resourceId,jdbcType=VARCHAR}
<if
test=
"_parameter != null"
>
resource_id = #{record.resourceId,jdbcType=VARCHAR},
part = #{record.part,jdbcType=BIGINT}
<if
test=
"_parameter != null"
>
<include
refid=
"Update_By_Example_Where_Clause"
/>
</if>
</update>
<update
id=
"updateByPrimaryKeySelective"
parameterType=
"io.metersphere.base.domain.LoadTestReportLog"
>
update load_test_report_log
<set>
<if
test=
"reportId != null"
>
report_id = #{reportId,jdbcType=VARCHAR},
</if>
<if
test=
"resourceId != null"
>
resource_id = #{resourceId,jdbcType=VARCHAR},
</if>
<if
test=
"content != null"
>
content = #{content,jdbcType=LONGVARCHAR},
</if>
</set>
<set>
<if
test=
"reportId != null"
>
report_id = #{reportId,jdbcType=VARCHAR},
</if>
<if
test=
"resourceId != null"
>
resource_id = #{resourceId,jdbcType=VARCHAR},
</if>
<if
test=
"part != null"
>
part = #{part,jdbcType=BIGINT},
</if>
<if
test=
"content != null"
>
content = #{content,jdbcType=LONGVARCHAR},
</if>
</set>
where id = #{id,jdbcType=VARCHAR}
</update>
<update
id=
"updateByPrimaryKeyWithBLOBs"
parameterType=
"io.metersphere.base.domain.LoadTestReportLog"
>
update load_test_report_log
set report_id = #{reportId,jdbcType=VARCHAR},
update load_test_report_log
set report_id = #{reportId,jdbcType=VARCHAR},
resource_id = #{resourceId,jdbcType=VARCHAR},
part = #{part,jdbcType=BIGINT},
content = #{content,jdbcType=LONGVARCHAR}
where id = #{id,jdbcType=VARCHAR}
where id = #{id,jdbcType=VARCHAR}
</update>
<update
id=
"updateByPrimaryKey"
parameterType=
"io.metersphere.base.domain.LoadTestReportLog"
>
update load_test_report_log
set report_id = #{reportId,jdbcType=VARCHAR},
resource_id = #{resourceId,jdbcType=VARCHAR}
where id = #{id,jdbcType=VARCHAR}
update load_test_report_log
set report_id = #{reportId,jdbcType=VARCHAR},
resource_id = #{resourceId,jdbcType=VARCHAR},
part = #{part,jdbcType=BIGINT}
where id = #{id,jdbcType=VARCHAR}
</update>
</mapper>
\ No newline at end of file
backend/src/main/java/io/metersphere/base/mapper/LoadTestReportMapper.java
浏览文件 @
c4d6ec1f
...
...
@@ -2,7 +2,6 @@ package io.metersphere.base.mapper;
import
io.metersphere.base.domain.LoadTestReport
;
import
io.metersphere.base.domain.LoadTestReportExample
;
import
io.metersphere.base.domain.LoadTestReportWithBLOBs
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
...
...
@@ -14,25 +13,25 @@ public interface LoadTestReportMapper {
int
deleteByPrimaryKey
(
String
id
);
int
insert
(
LoadTestReport
WithBLOBs
record
);
int
insert
(
LoadTestReport
record
);
int
insertSelective
(
LoadTestReport
WithBLOBs
record
);
int
insertSelective
(
LoadTestReport
record
);
List
<
LoadTestReport
WithBLOBs
>
selectByExampleWithBLOBs
(
LoadTestReportExample
example
);
List
<
LoadTestReport
>
selectByExampleWithBLOBs
(
LoadTestReportExample
example
);
List
<
LoadTestReport
>
selectByExample
(
LoadTestReportExample
example
);
LoadTestReport
WithBLOBs
selectByPrimaryKey
(
String
id
);
LoadTestReport
selectByPrimaryKey
(
String
id
);
int
updateByExampleSelective
(
@Param
(
"record"
)
LoadTestReport
WithBLOBs
record
,
@Param
(
"example"
)
LoadTestReportExample
example
);
int
updateByExampleSelective
(
@Param
(
"record"
)
LoadTestReport
record
,
@Param
(
"example"
)
LoadTestReportExample
example
);
int
updateByExampleWithBLOBs
(
@Param
(
"record"
)
LoadTestReport
WithBLOBs
record
,
@Param
(
"example"
)
LoadTestReportExample
example
);
int
updateByExampleWithBLOBs
(
@Param
(
"record"
)
LoadTestReport
record
,
@Param
(
"example"
)
LoadTestReportExample
example
);
int
updateByExample
(
@Param
(
"record"
)
LoadTestReport
record
,
@Param
(
"example"
)
LoadTestReportExample
example
);
int
updateByPrimaryKeySelective
(
LoadTestReport
WithBLOBs
record
);
int
updateByPrimaryKeySelective
(
LoadTestReport
record
);
int
updateByPrimaryKeyWithBLOBs
(
LoadTestReport
WithBLOBs
record
);
int
updateByPrimaryKeyWithBLOBs
(
LoadTestReport
record
);
int
updateByPrimaryKey
(
LoadTestReport
record
);
}
\ No newline at end of file
backend/src/main/java/io/metersphere/base/mapper/LoadTestReportMapper.xml
浏览文件 @
c4d6ec1f
...
...
@@ -9,9 +9,8 @@
<result
column=
"update_time"
jdbcType=
"BIGINT"
property=
"updateTime"
/>
<result
column=
"status"
jdbcType=
"VARCHAR"
property=
"status"
/>
</resultMap>
<resultMap
extends=
"BaseResultMap"
id=
"ResultMapWithBLOBs"
type=
"io.metersphere.base.domain.LoadTestReportWithBLOBs"
>
<result
column=
"description"
jdbcType=
"LONGVARCHAR"
property=
"description"
/>
<result
column=
"content"
jdbcType=
"LONGVARCHAR"
property=
"content"
/>
<resultMap
extends=
"BaseResultMap"
id=
"ResultMapWithBLOBs"
type=
"io.metersphere.base.domain.LoadTestReport"
>
<result
column=
"description"
jdbcType=
"LONGVARCHAR"
property=
"description"
/>
</resultMap>
<sql
id=
"Example_Where_Clause"
>
<where>
...
...
@@ -75,7 +74,7 @@
id, test_id, name, create_time, update_time, status
</sql>
<sql
id=
"Blob_Column_List"
>
description, content
description
</sql>
<select
id=
"selectByExampleWithBLOBs"
parameterType=
"io.metersphere.base.domain.LoadTestReportExample"
resultMap=
"ResultMapWithBLOBs"
>
select
...
...
@@ -125,25 +124,25 @@
<include
refid=
"Example_Where_Clause"
/>
</if>
</delete>
<insert
id=
"insert"
parameterType=
"io.metersphere.base.domain.LoadTestReportWithBLOBs
"
>
insert into load_test_report (id, test_id, name,
create_time, update_time, status,
description, content
)
values (#{id,jdbcType=VARCHAR}, #{testId,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR},
#{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT}, #{status,jdbcType=VARCHAR},
#{description,jdbcType=LONGVARCHAR}, #{content
,jdbcType=LONGVARCHAR})
</insert>
<insert
id=
"insertSelective"
parameterType=
"io.metersphere.base.domain.LoadTestReportWithBLOBs
"
>
insert into load_test_report
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"id != null"
>
id,
</if>
<if
test=
"testId != null"
>
test_id,
</if>
<if
test=
"name != null"
>
name,
<insert
id=
"insert"
parameterType=
"io.metersphere.base.domain.LoadTestReport
"
>
INSERT INTO load_test_report (id, test_id, name,
create_time, update_time, status,
description
)
VALUES (#{id,jdbcType=VARCHAR}, #{testId,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR},
#{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT}, #{status,jdbcType=VARCHAR},
#{description
,jdbcType=LONGVARCHAR})
</insert>
<insert
id=
"insertSelective"
parameterType=
"io.metersphere.base.domain.LoadTestReport
"
>
insert into load_test_report
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"id != null"
>
id,
</if>
<if
test=
"testId != null"
>
test_id,
</if>
<if
test=
"name != null"
>
name,
</if>
<if
test=
"createTime != null"
>
create_time,
...
...
@@ -157,9 +156,6 @@
<if
test=
"description != null"
>
description,
</if>
<if
test=
"content != null"
>
content,
</if>
</trim>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"id != null"
>
...
...
@@ -183,9 +179,6 @@
<if
test=
"description != null"
>
#{description,jdbcType=LONGVARCHAR},
</if>
<if
test=
"content != null"
>
#{content,jdbcType=LONGVARCHAR},
</if>
</trim>
</insert>
<select
id=
"countByExample"
parameterType=
"io.metersphere.base.domain.LoadTestReportExample"
resultType=
"java.lang.Long"
>
...
...
@@ -218,25 +211,21 @@
<if
test=
"record.description != null"
>
description = #{record.description,jdbcType=LONGVARCHAR},
</if>
<if
test=
"record.content != null"
>
content = #{record.content,jdbcType=LONGVARCHAR},
</if>
</set>
<if
test=
"_parameter != null"
>
<include
refid=
"Update_By_Example_Where_Clause"
/>
</if>
</update>
<update
id=
"updateByExampleWithBLOBs"
parameterType=
"map"
>
update load_test_report
set id = #{record.id,jdbcType=VARCHAR},
update load_test_report
set id = #{record.id,jdbcType=VARCHAR},
test_id = #{record.testId,jdbcType=VARCHAR},
name = #{record.name,jdbcType=VARCHAR},
create_time = #{record.createTime,jdbcType=BIGINT},
update_time = #{record.updateTime,jdbcType=BIGINT},
status = #{record.status,jdbcType=VARCHAR},
description = #{record.description,jdbcType=LONGVARCHAR},
content = #{record.content,jdbcType=LONGVARCHAR}
<if
test=
"_parameter != null"
>
description = #{record.description,jdbcType=LONGVARCHAR}
<if
test=
"_parameter != null"
>
<include
refid=
"Update_By_Example_Where_Clause"
/>
</if>
</update>
...
...
@@ -252,17 +241,17 @@
<include
refid=
"Update_By_Example_Where_Clause"
/>
</if>
</update>
<update
id=
"updateByPrimaryKeySelective"
parameterType=
"io.metersphere.base.domain.LoadTestReportWithBLOBs
"
>
update load_test_report
<set>
<if
test=
"testId != null"
>
test_id = #{testId,jdbcType=VARCHAR},
</if>
<if
test=
"name != null"
>
name = #{name,jdbcType=VARCHAR},
</if>
<if
test=
"createTime != null"
>
create_time = #{createTime,jdbcType=BIGINT},
<update
id=
"updateByPrimaryKeySelective"
parameterType=
"io.metersphere.base.domain.LoadTestReport
"
>
update load_test_report
<set>
<if
test=
"testId != null"
>
test_id = #{testId,jdbcType=VARCHAR},
</if>
<if
test=
"name != null"
>
name = #{name,jdbcType=VARCHAR},
</if>
<if
test=
"createTime != null"
>
create_time = #{createTime,jdbcType=BIGINT},
</if>
<if
test=
"updateTime != null"
>
update_time = #{updateTime,jdbcType=BIGINT},
...
...
@@ -273,23 +262,19 @@
<if
test=
"description != null"
>
description = #{description,jdbcType=LONGVARCHAR},
</if>
<if
test=
"content != null"
>
content = #{content,jdbcType=LONGVARCHAR},
</if>
</set>
where id = #{id,jdbcType=VARCHAR}
</update>
<update
id=
"updateByPrimaryKeyWithBLOBs"
parameterType=
"io.metersphere.base.domain.LoadTestReportWithBLOBs"
>
update load_test_report
set test_id = #{testId,jdbcType=VARCHAR},
name = #{name,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=BIGINT},
update_time = #{updateTime,jdbcType=BIGINT},
status = #{status,jdbcType=VARCHAR},
description = #{description,jdbcType=LONGVARCHAR},
content = #{content,jdbcType=LONGVARCHAR}
where id = #{id,jdbcType=VARCHAR}
</update>
<update
id=
"updateByPrimaryKeyWithBLOBs"
parameterType=
"io.metersphere.base.domain.LoadTestReport"
>
UPDATE load_test_report
SET test_id = #{testId,jdbcType=VARCHAR},
name = #{name,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=BIGINT},
update_time = #{updateTime,jdbcType=BIGINT},
status = #{status,jdbcType=VARCHAR},
description = #{description,jdbcType=LONGVARCHAR}
WHERE id = #{id,jdbcType=VARCHAR}
</update>
<update
id=
"updateByPrimaryKey"
parameterType=
"io.metersphere.base.domain.LoadTestReport"
>
update load_test_report
set test_id = #{testId,jdbcType=VARCHAR},
...
...
backend/src/main/java/io/metersphere/base/mapper/ext/ExtLoadTestReportMapper.java
浏览文件 @
c4d6ec1f
...
...
@@ -14,8 +14,6 @@ public interface ExtLoadTestReportMapper {
ReportDTO
getReportTestAndProInfo
(
@Param
(
"id"
)
String
id
);
int
appendLine
(
@Param
(
"testId"
)
String
id
,
@Param
(
"line"
)
String
line
);
LoadTestReport
selectByPrimaryKey
(
String
id
);
List
<
DashboardTestDTO
>
selectDashboardTests
(
@Param
(
"workspaceId"
)
String
workspaceId
,
@Param
(
"startTimestamp"
)
long
startTimestamp
);
...
...
backend/src/main/java/io/metersphere/base/mapper/ext/ExtLoadTestReportMapper.xml
浏览文件 @
c4d6ec1f
...
...
@@ -41,12 +41,6 @@
where ltr.id = #{id}
</select>
<update
id=
"appendLine"
>
UPDATE load_test_report
SET content = concat(content, #{line})
WHERE id = #{testId}
</update>
<select
id=
"selectByPrimaryKey"
parameterType=
"java.lang.String"
resultMap=
"BaseResultMap"
>
SELECT
<include
refid=
"Base_Column_List"
/>
...
...
backend/src/main/java/io/metersphere/commons/constants/ParamConstants.java
浏览文件 @
c4d6ec1f
...
...
@@ -28,7 +28,7 @@ public interface ParamConstants {
}
enum
Classify
implements
ParamConstants
{
MAIL
(
"meter"
),
REGISTRY
(
"registry"
);
private
String
value
;
...
...
@@ -85,4 +85,29 @@ public interface ParamConstants {
this
.
value
=
value
;
}
}
public
static
enum
MAIL
{
HOST
(
"meter.host"
,
1
),
PORT
(
"meter.port"
,
2
),
ACCOUNT
(
"meter.account"
,
3
),
PASSWORD
(
"meter.password"
,
4
),
SSL
(
"meter.ssl"
,
5
),
TLS
(
"meter.tls"
,
6
),
ANON
(
"meter.anon"
,
7
);
private
String
key
;
private
Integer
value
;
private
MAIL
(
String
key
,
Integer
value
)
{
this
.
key
=
key
;
this
.
value
=
value
;
}
public
String
getKey
()
{
return
this
.
key
;
}
public
Integer
getValue
()
{
return
this
.
value
;
}
}
}
backend/src/main/java/io/metersphere/controller/RoleController.java
浏览文件 @
c4d6ec1f
...
...
@@ -22,4 +22,9 @@ public class RoleController {
return
roleService
.
getRoleList
(
sign
);
}
@GetMapping
(
"/all"
)
public
List
<
Role
>
getAllRole
()
{
return
roleService
.
getAllRole
();
}
}
backend/src/main/java/io/metersphere/controller/SystemParameterController.java
0 → 100644
浏览文件 @
c4d6ec1f
package
io.metersphere.controller
;
import
io.metersphere.base.domain.SystemParameter
;
import
io.metersphere.service.SystemParameterService
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.annotation.Resource
;
import
java.util.HashMap
;
import
java.util.List
;
@RestController
@RequestMapping
(
value
=
"/system"
)
public
class
SystemParameterController
{
@Resource
private
SystemParameterService
SystemParameterService
;
@PostMapping
(
"/edit/email"
)
public
void
editMail
(
@RequestBody
List
<
SystemParameter
>
SystemParameter
){
SystemParameterService
.
editMail
(
SystemParameter
);
}
@PostMapping
(
"/testConnection"
)
public
void
testConnection
(
@RequestBody
HashMap
<
String
,
String
>
hashMap
){
SystemParameterService
.
testConnection
(
hashMap
);
}
}
backend/src/main/java/io/metersphere/controller/UserController.java
浏览文件 @
c4d6ec1f
...
...
@@ -9,11 +9,10 @@ import io.metersphere.commons.user.SessionUser;
import
io.metersphere.commons.utils.PageUtils
;
import
io.metersphere.commons.utils.Pager
;
import
io.metersphere.commons.utils.SessionUtils
;
import
io.metersphere.controller.request.UserRequest
;
import
io.metersphere.controller.request.member.AddMemberRequest
;
import
io.metersphere.controller.request.member.UserRequest
;
import
io.metersphere.controller.request.member.EditPassWordRequest
;
import
io.metersphere.controller.request.member.QueryMemberRequest
;
import
io.metersphere.controller.request.member.SetAdminRequest
;
import
io.metersphere.controller.request.organization.AddOrgMemberRequest
;
import
io.metersphere.controller.request.organization.QueryOrgMemberRequest
;
import
io.metersphere.dto.UserDTO
;
...
...
@@ -39,16 +38,15 @@ public class UserController {
@Resource
private
WorkspaceService
workspaceService
;
// admin api
@PostMapping
(
"/special/add"
)
@RequiresRoles
(
RoleConstants
.
ADMIN
)
public
UserDTO
insertUser
(
@RequestBody
User
user
)
{
public
UserDTO
insertUser
(
@RequestBody
User
Request
user
)
{
return
userService
.
insert
(
user
);
}
@PostMapping
(
"/special/list/{goPage}/{pageSize}"
)
@RequiresRoles
(
RoleConstants
.
ADMIN
)
public
Pager
<
List
<
User
>>
getUserList
(
@PathVariable
int
goPage
,
@PathVariable
int
pageSize
,
@RequestBody
UserRequest
request
)
{
public
Pager
<
List
<
User
>>
getUserList
(
@PathVariable
int
goPage
,
@PathVariable
int
pageSize
,
@RequestBody
io
.
metersphere
.
controller
.
request
.
UserRequest
request
)
{
Page
<
Object
>
page
=
PageHelper
.
startPage
(
goPage
,
pageSize
,
true
);
return
PageUtils
.
setPageInfo
(
page
,
userService
.
getUserListWithRequest
(
request
));
}
...
...
@@ -67,8 +65,8 @@ public class UserController {
@PostMapping
(
"/special/update"
)
@RequiresRoles
(
RoleConstants
.
ADMIN
)
public
void
updateUser
(
@RequestBody
User
user
)
{
userService
.
updateUser
(
user
);
public
void
updateUser
(
@RequestBody
User
Request
user
)
{
userService
.
updateUser
Role
(
user
);
}
@PostMapping
(
"/special/ws/member/list/{goPage}/{pageSize}"
)
...
...
@@ -120,7 +118,6 @@ public class UserController {
public
List
<
User
>
getOrgMemberListByAdmin
(
@RequestBody
QueryOrgMemberRequest
request
)
{
return
userService
.
getOrgMemberList
(
request
);
}
// admin api
@GetMapping
(
"/list"
)
@RequiresRoles
(
value
=
{
RoleConstants
.
ADMIN
,
RoleConstants
.
ORG_ADMIN
},
logical
=
Logical
.
OR
)
...
...
@@ -270,10 +267,4 @@ public class UserController {
return
userService
.
updateUserPassword
(
request
);
}
@PostMapping
(
"/set/admin"
)
@RequiresRoles
(
RoleConstants
.
ADMIN
)
public
void
setAdmin
(
@RequestBody
SetAdminRequest
request
)
{
userService
.
setAdmin
(
request
);
}
}
backend/src/main/java/io/metersphere/controller/UserRoleController.java
浏览文件 @
c4d6ec1f
...
...
@@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.annotation.Resource
;
import
java.util.List
;
import
java.util.Map
;
@RequestMapping
(
"userrole"
)
@RestController
...
...
@@ -20,14 +21,20 @@ public class UserRoleController {
private
UserRoleService
userRoleService
;
@GetMapping
(
"/list/org/{orgId}/{userId}"
)
@RequiresRoles
(
value
=
{
RoleConstants
.
ADMIN
,
RoleConstants
.
ORG_ADMIN
},
logical
=
Logical
.
OR
)
@RequiresRoles
(
value
=
{
RoleConstants
.
ADMIN
,
RoleConstants
.
ORG_ADMIN
},
logical
=
Logical
.
OR
)
public
List
<
Role
>
getOrganizationMemberRoles
(
@PathVariable
String
orgId
,
@PathVariable
String
userId
)
{
return
userRoleService
.
getOrganizationMemberRoles
(
orgId
,
userId
);
}
@GetMapping
(
"/list/ws/{workspaceId}/{userId}"
)
@RequiresRoles
(
value
=
{
RoleConstants
.
ADMIN
,
RoleConstants
.
ORG_ADMIN
},
logical
=
Logical
.
OR
)
@RequiresRoles
(
value
=
{
RoleConstants
.
ADMIN
,
RoleConstants
.
ORG_ADMIN
},
logical
=
Logical
.
OR
)
public
List
<
Role
>
getWorkspaceMemberRoles
(
@PathVariable
String
workspaceId
,
@PathVariable
String
userId
)
{
return
userRoleService
.
getWorkspaceMemberRoles
(
workspaceId
,
userId
);
}
@GetMapping
(
"/all/{userId}"
)
@RequiresRoles
(
RoleConstants
.
ADMIN
)
public
List
<
Map
<
String
,
Object
>>
getUserRole
(
@PathVariable
(
"userId"
)
String
userId
)
{
return
userRoleService
.
getUserRole
(
userId
);
}
}
backend/src/main/java/io/metersphere/controller/WorkspaceController.java
浏览文件 @
c4d6ec1f
...
...
@@ -38,6 +38,11 @@ public class WorkspaceController {
return
workspaceService
.
saveWorkspace
(
workspace
);
}
@GetMapping
(
"/list"
)
public
List
<
Workspace
>
getWorkspaceList
()
{
return
workspaceService
.
getWorkspaceList
(
new
WorkspaceRequest
());
}
@PostMapping
(
"special/add"
)
@RequiresRoles
(
RoleConstants
.
ADMIN
)
public
void
addWorkspaceByAdmin
(
@RequestBody
Workspace
workspace
)
{
...
...
backend/src/main/java/io/metersphere/controller/request/member/SetAdminRequest.java
已删除
100644 → 0
浏览文件 @
58ace8e0
package
io.metersphere.controller.request.member
;
import
lombok.Data
;
@Data
public
class
SetAdminRequest
{
private
String
id
;
private
String
adminId
;
private
String
password
;
}
backend/src/main/java/io/metersphere/controller/request/member/UserRequest.java
0 → 100644
浏览文件 @
c4d6ec1f
package
io.metersphere.controller.request.member
;
import
io.metersphere.base.domain.User
;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
@Getter
@Setter
public
class
UserRequest
extends
User
{
private
List
<
Map
<
String
,
Object
>>
roles
=
new
ArrayList
<>();
}
backend/src/main/java/io/metersphere/dto/LogDetailDTO.java
浏览文件 @
c4d6ec1f
...
...
@@ -6,7 +6,7 @@ import lombok.Setter;
@Getter
@Setter
public
class
LogDetailDTO
{
private
String
i
d
;
private
String
resourceI
d
;
private
String
resourceName
;
private
String
content
;
}
backend/src/main/java/io/metersphere/performance/controller/PerformanceReportController.java
浏览文件 @
c4d6ec1f
...
...
@@ -104,9 +104,9 @@ public class PerformanceReportController {
return
reportService
.
logs
(
reportId
);
}
@GetMapping
(
"log/download/{
log
Id}"
)
public
ResponseEntity
<
byte
[]>
downloadLog
(
@PathVariable
String
log
Id
)
{
byte
[]
bytes
=
reportService
.
downloadLog
(
log
Id
);
@GetMapping
(
"log/download/{
reportId}/{resource
Id}"
)
public
ResponseEntity
<
byte
[]>
downloadLog
(
@PathVariable
String
reportId
,
@PathVariable
String
resource
Id
)
{
byte
[]
bytes
=
reportService
.
downloadLog
(
reportId
,
resource
Id
);
return
ResponseEntity
.
ok
()
.
contentType
(
MediaType
.
parseMediaType
(
"application/octet-stream"
))
.
header
(
HttpHeaders
.
CONTENT_DISPOSITION
,
"attachment; filename=\"jmeter.log\""
)
...
...
backend/src/main/java/io/metersphere/performance/service/PerformanceTestService.java
浏览文件 @
c4d6ec1f
...
...
@@ -79,7 +79,9 @@ public class PerformanceTestService {
// delete load_test_report, delete load_test_report_detail
reportIdList
.
forEach
(
reportId
->
{
loadTestReportDetailMapper
.
deleteByPrimaryKey
(
reportId
);
LoadTestReportDetailExample
example
=
new
LoadTestReportDetailExample
();
example
.
createCriteria
().
andReportIdEqualTo
(
reportId
);
loadTestReportDetailMapper
.
deleteByExample
(
example
);
reportService
.
deleteReport
(
reportId
);
});
...
...
@@ -202,7 +204,7 @@ public class PerformanceTestService {
}
private
void
startEngine
(
LoadTestWithBLOBs
loadTest
,
Engine
engine
)
{
LoadTestReport
WithBLOBs
testReport
=
new
LoadTestReportWithBLOBs
();
LoadTestReport
testReport
=
new
LoadTestReport
();
testReport
.
setId
(
engine
.
getReportId
());
testReport
.
setCreateTime
(
engine
.
getStartTime
());
testReport
.
setUpdateTime
(
engine
.
getStartTime
());
...
...
@@ -216,29 +218,16 @@ public class PerformanceTestService {
loadTest
.
setStatus
(
PerformanceTestStatus
.
Starting
.
name
());
loadTestMapper
.
updateByPrimaryKeySelective
(
loadTest
);
// 启动正常插入 report
testReport
.
setContent
(
HEADERS
);
testReport
.
setStatus
(
PerformanceTestStatus
.
Starting
.
name
());
loadTestReportMapper
.
insertSelective
(
testReport
);
LoadTestReportDetail
reportDetail
=
new
LoadTestReportDetail
();
reportDetail
.
setContent
(
HEADERS
);
reportDetail
.
setReportId
(
testReport
.
getId
());
reportDetail
.
setPart
(
1L
);
loadTestReportDetailMapper
.
insertSelective
(
reportDetail
);
// append \n
extLoadTestReportMapper
.
appendLine
(
testReport
.
getId
(),
"\n"
);
// append \n
extLoadTestReportDetailMapper
.
appendLine
(
testReport
.
getId
(),
"\n"
);
// 保存 load_test_report_log
String
resourcePoolId
=
loadTest
.
getTestResourcePoolId
();
List
<
TestResource
>
testResourceList
=
testResourceService
.
getResourcesByPoolId
(
resourcePoolId
);
testResourceList
.
forEach
(
r
->
{
LoadTestReportLog
record
=
new
LoadTestReportLog
();
record
.
setId
(
UUID
.
randomUUID
().
toString
());
record
.
setReportId
(
testReport
.
getId
());
record
.
setResourceId
(
r
.
getId
());
record
.
setContent
(
StringUtils
.
EMPTY
);
loadTestReportLogMapper
.
insert
(
record
);
});
}
catch
(
MSException
e
)
{
LogUtil
.
error
(
e
);
loadTest
.
setStatus
(
PerformanceTestStatus
.
Error
.
name
());
...
...
backend/src/main/java/io/metersphere/performance/service/ReportService.java
浏览文件 @
c4d6ec1f
...
...
@@ -24,7 +24,9 @@ import org.springframework.stereotype.Service;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
@Service
...
...
@@ -57,7 +59,7 @@ public class ReportService {
MSException
.
throwException
(
"report id cannot be null"
);
}
LoadTestReport
WithBLOBs
loadTestReport
=
loadTestReportMapper
.
selectByPrimaryKey
(
reportId
);
LoadTestReport
loadTestReport
=
loadTestReportMapper
.
selectByPrimaryKey
(
reportId
);
LoadTestWithBLOBs
loadTest
=
loadTestMapper
.
selectByPrimaryKey
(
loadTestReport
.
getTestId
());
LogUtil
.
info
(
"Delete report started, report ID: %s"
+
reportId
);
...
...
@@ -142,7 +144,7 @@ public class ReportService {
}
public
void
checkReportStatus
(
String
reportId
)
{
LoadTestReport
WithBLOBs
loadTestReport
=
loadTestReportMapper
.
selectByPrimaryKey
(
reportId
);
LoadTestReport
loadTestReport
=
loadTestReportMapper
.
selectByPrimaryKey
(
reportId
);
String
reportStatus
=
loadTestReport
.
getStatus
();
if
(
StringUtils
.
equals
(
PerformanceTestStatus
.
Running
.
name
(),
reportStatus
))
{
MSException
.
throwException
(
"Reporting in progress..."
);
...
...
@@ -160,42 +162,50 @@ public class ReportService {
public
List
<
LogDetailDTO
>
logs
(
String
reportId
)
{
LoadTestReportLogExample
example
=
new
LoadTestReportLogExample
();
example
.
createCriteria
().
andReportIdEqualTo
(
reportId
);
example
.
setOrderByClause
(
"part"
);
List
<
LoadTestReportLog
>
loadTestReportLogs
=
loadTestReportLogMapper
.
selectByExampleWithBLOBs
(
example
);
return
loadTestReportLogs
.
stream
().
map
(
log
->
{
Map
<
String
,
List
<
LoadTestReportLog
>>
reportLogs
=
loadTestReportLogs
.
stream
().
collect
(
Collectors
.
groupingBy
(
LoadTestReportLog:
:
getResourceId
));
List
<
LogDetailDTO
>
result
=
new
ArrayList
<>();
reportLogs
.
forEach
((
resourceId
,
resourceLogs
)
->
{
LogDetailDTO
detailDTO
=
new
LogDetailDTO
();
detailDTO
.
setId
(
log
.
getId
());
TestResource
testResource
=
testResourceService
.
getTestResource
(
log
.
getResourceId
());
String
content
=
log
.
getContent
();
TestResource
testResource
=
testResourceService
.
getTestResource
(
resourceId
);
String
content
=
resourceLogs
.
stream
().
map
(
LoadTestReportLog:
:
getContent
).
reduce
(
""
,
(
a
,
b
)
->
a
+
b
);
// 显示前 2048
content
=
StringUtils
.
substring
(
content
,
0
,
2048
);
detailDTO
.
setResourceId
(
resourceId
);
detailDTO
.
setContent
(
content
);
if
(
testResource
==
null
)
{
detailDTO
.
setResourceName
(
log
.
getResourceId
());
return
detailDTO
;
detailDTO
.
setResourceName
(
resourceId
);
result
.
add
(
detailDTO
);
return
;
}
String
configuration
=
testResource
.
getConfiguration
();
if
(
StringUtils
.
isBlank
(
configuration
))
{
detailDTO
.
setResourceName
(
log
.
getResourceId
());
return
detailDTO
;
detailDTO
.
setResourceName
(
resourceId
);
result
.
add
(
detailDTO
);
return
;
}
JSONObject
object
=
JSON
.
parseObject
(
configuration
);
if
(
StringUtils
.
isNotBlank
(
object
.
getString
(
"masterUrl"
)))
{
detailDTO
.
setResourceName
(
object
.
getString
(
"masterUrl"
));
return
detailDTO
;
result
.
add
(
detailDTO
);
return
;
}
if
(
StringUtils
.
isNotBlank
(
object
.
getString
(
"ip"
)))
{
detailDTO
.
setResourceName
(
object
.
getString
(
"ip"
));
re
turn
detailDTO
;
re
sult
.
add
(
detailDTO
)
;
}
return
detailDTO
;
}).
collect
(
Collectors
.
toList
())
;
})
;
return
result
;
}
public
byte
[]
downloadLog
(
String
logId
)
{
LoadTestReportLog
loadTestReportLog
=
loadTestReportLogMapper
.
selectByPrimaryKey
(
logId
);
if
(
loadTestReportLog
!=
null
)
{
return
loadTestReportLog
.
getContent
().
getBytes
();
}
return
new
byte
[
0
];
public
byte
[]
downloadLog
(
String
reportId
,
String
resourceId
)
{
LoadTestReportLogExample
example
=
new
LoadTestReportLogExample
();
example
.
createCriteria
().
andReportIdEqualTo
(
reportId
).
andResourceIdEqualTo
(
resourceId
);
List
<
LoadTestReportLog
>
loadTestReportLogs
=
loadTestReportLogMapper
.
selectByExampleWithBLOBs
(
example
);
String
content
=
loadTestReportLogs
.
stream
().
map
(
LoadTestReportLog:
:
getContent
).
reduce
(
""
,
(
a
,
b
)
->
a
+
b
);
return
content
.
getBytes
();
}
}
backend/src/main/java/io/metersphere/service/RoleService.java
浏览文件 @
c4d6ec1f
package
io.metersphere.service
;
import
io.metersphere.base.domain.Role
;
import
io.metersphere.base.mapper.RoleMapper
;
import
io.metersphere.base.mapper.ext.ExtRoleMapper
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
...
...
@@ -13,8 +14,14 @@ public class RoleService {
@Resource
private
ExtRoleMapper
extRoleMapper
;
@Resource
private
RoleMapper
roleMapper
;
public
List
<
Role
>
getRoleList
(
String
sign
)
{
return
extRoleMapper
.
getRoleList
(
sign
);
}
public
List
<
Role
>
getAllRole
()
{
return
roleMapper
.
selectByExample
(
null
);
}
}
backend/src/main/java/io/metersphere/service/SystemParameterService.java
浏览文件 @
c4d6ec1f
...
...
@@ -4,14 +4,22 @@ import io.metersphere.base.domain.SystemParameter;
import
io.metersphere.base.domain.SystemParameterExample
;
import
io.metersphere.base.mapper.SystemParameterMapper
;
import
io.metersphere.commons.constants.ParamConstants
;
import
io.metersphere.commons.utils.EncryptUtils
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.BooleanUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Service
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Properties
;
import
org.springframework.mail.javamail.JavaMailSenderImpl
;
import
javax.annotation.Resource
;
@Service
public
class
SystemParameterService
{
...
...
@@ -31,4 +39,43 @@ public class SystemParameterService {
}
return
result
;
}
public
void
editMail
(
List
<
SystemParameter
>
parameters
){
List
<
SystemParameter
>
paramList
=
this
.
getParamList
(
ParamConstants
.
Classify
.
MAIL
.
getValue
());
boolean
empty
=
paramList
.
size
()
<
2
;
parameters
.
forEach
(
parameter
->
{
if
(
parameter
.
getParamKey
().
equals
(
ParamConstants
.
MAIL
.
PASSWORD
.
getKey
()))
{
String
string
=
EncryptUtils
.
aesEncrypt
(
parameter
.
getParamValue
()).
toString
();
parameter
.
setParamValue
(
string
);
}
if
(
empty
)
{
systemParameterMapper
.
insert
(
parameter
);
}
else
{
systemParameterMapper
.
updateByPrimaryKey
(
parameter
);
}
});
}
public
List
<
SystemParameter
>
getParamList
(
String
type
)
{
SystemParameterExample
example
=
new
SystemParameterExample
();
example
.
createCriteria
().
andParamKeyLike
(
type
+
"%"
);
return
systemParameterMapper
.
selectByExample
(
example
);
}
public
void
testConnection
(
HashMap
<
String
,
String
>
hashMap
){
JavaMailSenderImpl
javaMailSender
=
new
JavaMailSenderImpl
();
javaMailSender
.
setDefaultEncoding
(
"UTF-8"
);
javaMailSender
.
setHost
(
hashMap
.
get
(
ParamConstants
.
MAIL
.
PORT
.
getKey
()));
javaMailSender
.
setPort
(
Integer
.
valueOf
(
hashMap
.
get
(
ParamConstants
.
MAIL
.
PORT
.
getKey
())));
javaMailSender
.
setUsername
(
hashMap
.
get
(
ParamConstants
.
MAIL
.
ACCOUNT
.
getKey
()));
javaMailSender
.
setPassword
(
hashMap
.
get
(
ParamConstants
.
MAIL
.
PASSWORD
.
getKey
()));
Properties
props
=
new
Properties
();
props
.
put
(
"mail.smtp.auth"
,
"true"
);
if
(
BooleanUtils
.
toBoolean
(
hashMap
.
get
(
ParamConstants
.
MAIL
.
SSL
.
getKey
())))
{
props
.
put
(
"mail.smtp.socketFactory.class"
,
"javax.net.ssl.SSLSocketFactory"
);
}
if
(
BooleanUtils
.
toBoolean
(
hashMap
.
get
(
ParamConstants
.
MAIL
.
TLS
.
getKey
())))
{
props
.
put
(
"mail.smtp.starttls.enable"
,
"true"
);
}
javaMailSender
.
setJavaMailProperties
(
props
);
}
}
backend/src/main/java/io/metersphere/service/UserRoleService.java
浏览文件 @
c4d6ec1f
package
io.metersphere.service
;
import
io.metersphere.base.domain.Role
;
import
io.metersphere.base.domain.UserRole
;
import
io.metersphere.base.domain.UserRoleExample
;
import
io.metersphere.base.mapper.UserRoleMapper
;
import
io.metersphere.base.mapper.ext.ExtUserRoleMapper
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
@Service
@Transactional
(
rollbackFor
=
Exception
.
class
)
...
...
@@ -14,6 +22,8 @@ public class UserRoleService {
@Resource
private
ExtUserRoleMapper
extUserRoleMapper
;
@Resource
private
UserRoleMapper
userRoleMapper
;
public
List
<
Role
>
getOrganizationMemberRoles
(
String
orgId
,
String
userId
)
{
return
extUserRoleMapper
.
getOrganizationMemberRoles
(
orgId
,
userId
);
...
...
@@ -23,4 +33,28 @@ public class UserRoleService {
return
extUserRoleMapper
.
getWorkspaceMemberRoles
(
workspaceId
,
userId
);
}
public
List
<
Map
<
String
,
Object
>>
getUserRole
(
String
userId
)
{
List
<
Map
<
String
,
Object
>>
list
=
new
ArrayList
<>();
UserRoleExample
userRoleExample
=
new
UserRoleExample
();
userRoleExample
.
createCriteria
().
andUserIdEqualTo
(
userId
);
List
<
UserRole
>
userRoles
=
userRoleMapper
.
selectByExample
(
userRoleExample
);
List
<
String
>
collect
=
userRoles
.
stream
()
.
map
(
userRole
->
userRole
.
getRoleId
())
.
distinct
()
.
collect
(
Collectors
.
toList
());
for
(
int
i
=
0
;
i
<
collect
.
size
();
i
++)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>(
2
);
map
.
put
(
"id"
,
collect
.
get
(
i
));
map
.
put
(
"Ids"
,
new
ArrayList
<>());
for
(
int
j
=
0
;
j
<
userRoles
.
size
();
j
++)
{
String
role
=
userRoles
.
get
(
j
).
getRoleId
();
if
(
StringUtils
.
equals
(
role
,
collect
.
get
(
i
)))
{
List
ids
=
(
List
)
map
.
get
(
"Ids"
);
ids
.
add
(
userRoles
.
get
(
j
).
getSourceId
());
}
}
list
.
add
(
map
);
}
return
list
;
}
}
backend/src/main/java/io/metersphere/service/UserService.java
浏览文件 @
c4d6ec1f
...
...
@@ -9,11 +9,10 @@ import io.metersphere.commons.exception.MSException;
import
io.metersphere.commons.user.SessionUser
;
import
io.metersphere.commons.utils.CodingUtil
;
import
io.metersphere.commons.utils.SessionUtils
;
import
io.metersphere.controller.request.UserRequest
;
import
io.metersphere.controller.request.member.AddMemberRequest
;
import
io.metersphere.controller.request.member.UserRequest
;
import
io.metersphere.controller.request.member.EditPassWordRequest
;
import
io.metersphere.controller.request.member.QueryMemberRequest
;
import
io.metersphere.controller.request.member.SetAdminRequest
;
import
io.metersphere.controller.request.organization.AddOrgMemberRequest
;
import
io.metersphere.controller.request.organization.QueryOrgMemberRequest
;
import
io.metersphere.dto.UserDTO
;
...
...
@@ -25,8 +24,7 @@ import org.springframework.stereotype.Service;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
javax.annotation.Resource
;
import
java.util.List
;
import
java.util.UUID
;
import
java.util.*
;
import
java.util.stream.Collectors
;
@Service
...
...
@@ -48,7 +46,7 @@ public class UserService {
@Resource
private
ExtUserMapper
extUserMapper
;
public
UserDTO
insert
(
User
user
)
{
public
UserDTO
insert
(
User
Request
user
)
{
checkUserParam
(
user
);
//
String
id
=
user
.
getId
();
...
...
@@ -58,9 +56,44 @@ public class UserService {
}
else
{
createUser
(
user
);
}
List
<
Map
<
String
,
Object
>>
roles
=
user
.
getRoles
();
if
(!
roles
.
isEmpty
())
{
insertUserRole
(
roles
,
user
.
getId
());
}
return
getUserDTO
(
user
.
getId
());
}
private
void
insertUserRole
(
List
<
Map
<
String
,
Object
>>
roles
,
String
userId
)
{
for
(
int
i
=
0
;
i
<
roles
.
size
();
i
++)
{
Map
<
String
,
Object
>
map
=
roles
.
get
(
i
);
String
role
=
(
String
)
map
.
get
(
"id"
);
if
(
StringUtils
.
equals
(
role
,
RoleConstants
.
ADMIN
))
{
UserRole
userRole
=
new
UserRole
();
userRole
.
setId
(
UUID
.
randomUUID
().
toString
());
userRole
.
setUserId
(
userId
);
userRole
.
setUpdateTime
(
System
.
currentTimeMillis
());
userRole
.
setCreateTime
(
System
.
currentTimeMillis
());
userRole
.
setRoleId
(
role
);
// TODO 修改
userRole
.
setSourceId
(
"adminSourceId"
);
userRoleMapper
.
insertSelective
(
userRole
);
}
else
{
List
<
String
>
list
=
(
List
<
String
>)
map
.
get
(
"Ids"
);
for
(
int
j
=
0
;
j
<
list
.
size
();
j
++)
{
UserRole
userRole1
=
new
UserRole
();
userRole1
.
setId
(
UUID
.
randomUUID
().
toString
());
userRole1
.
setUserId
(
userId
);
userRole1
.
setRoleId
(
role
);
userRole1
.
setUpdateTime
(
System
.
currentTimeMillis
());
userRole1
.
setCreateTime
(
System
.
currentTimeMillis
());
userRole1
.
setSourceId
(
list
.
get
(
j
));
// TODO 防止重复插入
userRoleMapper
.
insertSelective
(
userRole1
);
}
}
}
}
private
void
checkUserParam
(
User
user
)
{
if
(
StringUtils
.
isBlank
(
user
.
getName
()))
{
...
...
@@ -134,7 +167,7 @@ public class UserService {
return
userMapper
.
selectByExample
(
null
);
}
public
List
<
User
>
getUserListWithRequest
(
UserRequest
request
)
{
public
List
<
User
>
getUserListWithRequest
(
io
.
metersphere
.
controller
.
request
.
UserRequest
request
)
{
return
extUserMapper
.
getUserList
(
request
);
}
...
...
@@ -146,6 +179,19 @@ public class UserService {
userMapper
.
deleteByPrimaryKey
(
userId
);
}
public
void
updateUserRole
(
UserRequest
user
)
{
String
userId
=
user
.
getId
();
UserRoleExample
userRoleExample
=
new
UserRoleExample
();
userRoleExample
.
createCriteria
().
andUserIdEqualTo
(
userId
);
userRoleMapper
.
deleteByExample
(
userRoleExample
);
List
<
Map
<
String
,
Object
>>
roles
=
user
.
getRoles
();
if
(!
roles
.
isEmpty
())
{
insertUserRole
(
roles
,
user
.
getId
());
}
user
.
setUpdateTime
(
System
.
currentTimeMillis
());
userMapper
.
updateByPrimaryKeySelective
(
user
);
}
public
void
updateUser
(
User
user
)
{
user
.
setUpdateTime
(
System
.
currentTimeMillis
());
userMapper
.
updateByPrimaryKeySelective
(
user
);
...
...
@@ -270,7 +316,7 @@ public class UserService {
public
void
setLanguage
(
String
lang
)
{
if
(
SessionUtils
.
getUser
()
!=
null
)
{
User
user
=
new
User
();
User
Request
user
=
new
UserRequest
();
user
.
setId
(
SessionUtils
.
getUser
().
getId
());
user
.
setLanguage
(
lang
);
updateUser
(
user
);
...
...
@@ -336,23 +382,6 @@ public class UserService {
return
extUserMapper
.
updatePassword
(
user
);
}
public
void
setAdmin
(
SetAdminRequest
request
)
{
String
adminId
=
request
.
getAdminId
();
String
password
=
request
.
getPassword
();
if
(!
checkUserPassword
(
adminId
,
password
))
{
MSException
.
throwException
(
"verification failed!"
);
}
UserRole
userRole
=
new
UserRole
();
userRole
.
setId
(
UUID
.
randomUUID
().
toString
());
userRole
.
setUserId
(
request
.
getId
());
// TODO 修改admin sourceId
userRole
.
setSourceId
(
"adminSourceId"
);
userRole
.
setRoleId
(
RoleConstants
.
ADMIN
);
userRole
.
setCreateTime
(
System
.
currentTimeMillis
());
userRole
.
setUpdateTime
(
System
.
currentTimeMillis
());
userRoleMapper
.
insertSelective
(
userRole
);
}
public
String
getDefaultLanguage
()
{
final
String
key
=
"default.language"
;
return
extUserMapper
.
getDefaultLanguage
(
key
);
...
...
backend/src/main/resources/db/migration/V2__metersphere_ddl.sql
浏览文件 @
c4d6ec1f
...
...
@@ -51,7 +51,6 @@ CREATE TABLE IF NOT EXISTS `load_test_report` (
`test_id`
varchar
(
50
)
NOT
NULL
COMMENT
'Test ID this test report belongs to'
,
`name`
varchar
(
64
)
NOT
NULL
COMMENT
'Test report name'
,
`description`
varchar
(
255
)
DEFAULT
NULL
COMMENT
'Test report name'
,
`content`
longtext
,
`create_time`
bigint
(
13
)
NOT
NULL
COMMENT
'Create timestamp'
,
`update_time`
bigint
(
13
)
NOT
NULL
COMMENT
'Update timestamp'
,
`status`
varchar
(
64
)
NOT
NULL
COMMENT
'Status of this test run'
,
...
...
@@ -64,20 +63,19 @@ CREATE TABLE IF NOT EXISTS `load_test_report` (
CREATE
TABLE
IF
NOT
EXISTS
`load_test_report_detail`
(
`report_id`
varchar
(
50
)
NOT
NULL
,
`content`
longtext
,
PRIMARY
KEY
(
`report_id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_bin
;
`part`
bigint
(
11
)
NOT
NULL
,
PRIMARY
KEY
(
`report_id`
,
`part`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_bin
;
CREATE
TABLE
IF
NOT
EXISTS
`load_test_report_log`
(
`id`
varchar
(
50
)
NOT
NULL
,
`id`
varchar
(
50
)
NOT
NULL
,
`report_id`
varchar
(
50
)
NOT
NULL
,
`resource_id`
varchar
(
50
)
DEFAULT
NULL
,
`content`
longtext
,
`part`
bigint
(
20
)
DEFAULT
NULL
,
PRIMARY
KEY
(
`id`
),
KEY
`load_test_report_log_report_id_resource_name_index`
(
`report_id`
,
`resource_id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_bin
;
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_bin
;
CREATE
TABLE
IF
NOT
EXISTS
`load_test_report_result`
(
`id`
varchar
(
50
)
NOT
NULL
,
...
...
backend/src/main/resources/generatorConfig.xml
浏览文件 @
c4d6ec1f
...
...
@@ -59,7 +59,7 @@
<!--要生成的数据库表 -->
<table
tableName=
"
test_plan_test_case
"
/>
<table
tableName=
"
load_test_report
"
/>
</context>
</generatorConfiguration>
\ No newline at end of file
frontend/src/business/components/api/head/ApiHeaderMenus.vue
浏览文件 @
c4d6ec1f
...
...
@@ -88,6 +88,7 @@
},
reportRecent
:
{
title
:
this
.
$t
(
'
report.recent
'
),
showTime
:
true
,
url
:
"
/api/report/recent/5
"
,
index
:
function
(
item
)
{
return
'
/api/report/view/
'
+
item
.
id
;
...
...
frontend/src/business/components/api/report/components/AssertionResults.vue
浏览文件 @
c4d6ec1f
...
...
@@ -2,7 +2,7 @@
<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')"
>
<el-table-column
prop=
"message"
:label=
"$t('api_report.assertions_
error_
message')"
>
</el-table-column>
<el-table-column
prop=
"pass"
:label=
"$t('api_report.assertions_is_success')"
width=
"180"
>
<template
v-slot:default=
"
{row}">
...
...
frontend/src/business/components/api/report/components/MetricChart.vue
浏览文件 @
c4d6ec1f
...
...
@@ -105,7 +105,7 @@
},
fail
()
{
return
(
this
.
content
.
error
/
this
.
content
.
total
).
toFixed
(
0
)
+
"
%
"
;
return
(
this
.
content
.
error
/
this
.
content
.
total
*
100
).
toFixed
(
0
)
+
"
%
"
;
},
assertions
()
{
return
this
.
content
.
passAssertions
+
"
/
"
+
this
.
content
.
totalAssertions
;
...
...
frontend/src/business/components/api/report/components/RequestResult.vue
浏览文件 @
c4d6ec1f
...
...
@@ -17,10 +17,10 @@
</div>
</el-col>
<el-col
:span=
"2"
>
{{
error
}}
{{
request
.
error
}}
</el-col>
<el-col
:span=
"2"
>
{{
request
.
passAssertions
}}
/
{{
request
.
totalAssertions
}}
{{
assertion
}}
</el-col>
<el-col
:span=
"2"
>
<el-tag
size=
"mini"
type=
"success"
v-if=
"request.success"
>
...
...
@@ -72,9 +72,9 @@
},
computed
:
{
error
()
{
return
this
.
request
.
totalAssertions
-
this
.
request
.
pass
Assertions
;
}
assertion
()
{
return
this
.
request
.
passAssertions
+
"
/
"
+
this
.
request
.
total
Assertions
;
}
,
}
}
</
script
>
...
...
frontend/src/business/components/api/report/components/ScenarioResult.vue
浏览文件 @
c4d6ec1f
...
...
@@ -59,7 +59,7 @@
computed
:
{
assertion
()
{
return
this
.
scenario
.
passAssertions
-
this
.
scenario
.
totalAssertions
;
return
this
.
scenario
.
passAssertions
+
"
/
"
+
this
.
scenario
.
totalAssertions
;
},
success
()
{
return
this
.
scenario
.
error
===
0
;
...
...
frontend/src/business/components/api/test/ApiTestConfig.vue
浏览文件 @
c4d6ec1f
...
...
@@ -5,7 +5,8 @@
<el-container
class=
"test-container"
v-loading=
"result.loading"
>
<el-header>
<el-row
type=
"flex"
align=
"middle"
>
<el-input
class=
"test-name"
v-model=
"test.name"
maxlength=
"64"
:placeholder=
"$t('api_test.input_name')"
>
<el-input
class=
"test-name"
v-model=
"test.name"
maxlength=
"60"
:placeholder=
"$t('api_test.input_name')"
show-word-limit
>
<el-select
class=
"test-project"
v-model=
"test.projectId"
slot=
"prepend"
:placeholder=
"$t('api_test.select_project')"
>
<el-option
v-for=
"project in projects"
:key=
"project.id"
:label=
"project.name"
:value=
"project.id"
/>
...
...
@@ -113,6 +114,9 @@
saveTest
:
function
()
{
this
.
save
(()
=>
{
this
.
$success
(
this
.
$t
(
'
commons.save_success
'
));
this
.
$router
.
push
({
path
:
'
/api/test/edit?id=
'
+
this
.
test
.
id
})
})
},
runTest
:
function
()
{
...
...
frontend/src/business/components/api/test/components/ApiRequestConfig.vue
浏览文件 @
c4d6ec1f
...
...
@@ -13,8 +13,12 @@
<el-dropdown
trigger=
"click"
@
command=
"handleCommand"
>
<span
class=
"el-dropdown-link el-icon-more"
/>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item
:command=
"
{type: 'copy', index: index}">复制请求
</el-dropdown-item>
<el-dropdown-item
:command=
"
{type: 'delete', index: index}">删除请求
</el-dropdown-item>
<el-dropdown-item
:command=
"
{type: 'copy', index: index}">
{{
$t
(
'
api_test.request.copy
'
)
}}
</el-dropdown-item>
<el-dropdown-item
:command=
"
{type: 'delete', index: index}">
{{
$t
(
'
api_test.request.delete
'
)
}}
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
...
...
@@ -50,12 +54,12 @@
methods
:
{
createRequest
:
function
()
{
let
request
=
new
Request
(
{
method
:
"
GET
"
}
);
let
request
=
new
Request
();
this
.
requests
.
push
(
request
);
},
copyRequest
:
function
(
index
)
{
let
request
=
this
.
requests
[
index
];
this
.
requests
.
push
(
JSON
.
parse
(
JSON
.
stringify
(
request
)
));
this
.
requests
.
push
(
request
.
clone
(
));
},
deleteRequest
:
function
(
index
)
{
this
.
requests
.
splice
(
index
,
1
);
...
...
frontend/src/business/components/api/test/components/ApiRequestForm.vue
浏览文件 @
c4d6ec1f
<
template
>
<el-form
:model=
"request"
:rules=
"rules"
ref=
"request"
label-width=
"100px"
>
<el-form-item
:label=
"$t('api_test.request.name')"
prop=
"name"
>
<el-input
v-model=
"request.name"
maxlength=
"100"
/>
<el-input
v-model=
"request.name"
maxlength=
"100"
@
input=
"valid"
/>
</el-form-item>
<el-form-item
:label=
"$t('api_test.request.url')"
prop=
"url"
>
...
...
@@ -108,6 +108,10 @@
}
}
return
url
;
},
valid
(
value
)
{
value
=
value
.
replace
(
/
[
`~!@#$%^&*()_
\-
+=<>?:"{}|,.
/
;'
\\
[
\]
·!¥…()—
\-
《》?:“”【】、;‘’,。
]
/g
,
''
).
replace
(
/
\s
/g
,
""
);
this
.
request
.
name
=
value
;
}
},
...
...
frontend/src/business/components/api/test/components/ApiScenarioConfig.vue
浏览文件 @
c4d6ec1f
...
...
@@ -12,13 +12,17 @@
{{
$t
(
'
api_test.scenario.config
'
)
}}
</span>
</div>
<!-- 暂时去掉,将来再加-->
<!--
<el-dropdown
trigger=
"click"
@
command=
"handleCommand"
>
-->
<!--
<span
class=
"el-dropdown-link el-icon-more scenario-btn"
/>
-->
<!--
<el-dropdown-menu
slot=
"dropdown"
>
-->
<!--
<el-dropdown-item
:command=
"
{type:'delete', index:index}">删除场景
</el-dropdown-item>
-->
<!--
</el-dropdown-menu>
-->
<!--
</el-dropdown>
-->
<el-dropdown
trigger=
"click"
@
command=
"handleCommand"
>
<span
class=
"el-dropdown-link el-icon-more scenario-btn"
/>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item
:command=
"
{type: 'copy', index: index}">
{{
$t
(
'
api_test.scenario.copy
'
)
}}
</el-dropdown-item>
<el-dropdown-item
:command=
"
{type:'delete', index:index}">
{{
$t
(
'
api_test.scenario.delete
'
)
}}
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</
template
>
<ms-api-request-config
:requests=
"scenario.requests"
:open=
"select"
/>
</ms-api-collapse-item>
...
...
@@ -71,6 +75,10 @@
createScenario
:
function
()
{
this
.
scenarios
.
push
(
new
Scenario
());
},
copyScenario
:
function
(
index
)
{
let
scenario
=
this
.
scenarios
[
index
];
this
.
scenarios
.
push
(
scenario
.
clone
());
},
deleteScenario
:
function
(
index
)
{
this
.
scenarios
.
splice
(
index
,
1
);
if
(
this
.
scenarios
.
length
===
0
)
{
...
...
@@ -83,6 +91,9 @@
},
handleCommand
:
function
(
command
)
{
switch
(
command
.
type
)
{
case
"
copy
"
:
this
.
copyScenario
(
command
.
index
);
break
;
case
"
delete
"
:
this
.
deleteScenario
(
command
.
index
);
break
;
...
...
frontend/src/business/components/api/test/components/ApiScenarioForm.vue
浏览文件 @
c4d6ec1f
<
template
>
<el-form
:model=
"scenario"
:rules=
"rules"
ref=
"scenario"
label-width=
"100px"
>
<el-form-item
:label=
"$t('api_test.scenario.name')"
prop=
"name"
>
<el-input
v-model=
"scenario.name"
maxlength=
"100"
/>
<el-input
v-model=
"scenario.name"
maxlength=
"100"
@
input=
"valid"
/>
</el-form-item>
<!--
<el-form-item
:label=
"$t('api_test.scenario.base_url')"
prop=
"url"
>
-->
<!--
<el-input
:placeholder=
"$t('api_test.scenario.base_url_description')"
v-model=
"scenario.url"
maxlength=
"100"
/>
-->
<!--
</el-form-item>
-->
<!--
<el-form-item
:label=
"$t('api_test.scenario.base_url')"
prop=
"url"
>
-->
<!--
<el-input
:placeholder=
"$t('api_test.scenario.base_url_description')"
v-model=
"scenario.url"
maxlength=
"100"
/>
-->
<!--
</el-form-item>
-->
<el-tabs
v-model=
"activeName"
>
<el-tab-pane
:label=
"$t('api_test.scenario.variables')"
name=
"parameters"
>
...
...
@@ -43,6 +43,13 @@
]
}
}
},
methods
:
{
valid
(
value
)
{
value
=
value
.
replace
(
/
[
`~!@#$%^&*()
\-
+=<>?:"{}|,.
/
;'
\\
[
\]
·!¥…()—
\-
《》?:“”【】、;‘’,。
]
/g
,
''
).
replace
(
/
\s
/g
,
""
);
this
.
scenario
.
name
=
value
;
}
}
}
</
script
>
...
...
frontend/src/business/components/api/test/components/assertion/ApiAssertionResponseTime.vue
浏览文件 @
c4d6ec1f
...
...
@@ -32,13 +32,12 @@
methods
:
{
add
:
function
()
{
this
.
remove
();
setTimeout
(()
=>
{
this
.
duration
.
value
=
this
.
time
;
})
},
remove
:
function
()
{
this
.
duration
.
value
=
null
;
this
.
duration
.
value
=
undefined
;
}
}
}
...
...
frontend/src/business/components/api/test/components/assertion/ApiAssertionText.vue
浏览文件 @
c4d6ec1f
...
...
@@ -20,7 +20,7 @@
</el-select>
</el-col>
<el-col>
<el-input
v-model=
"value"
maxlength=
"2
55
"
size=
"small"
show-word-limit
<el-input
v-model=
"value"
maxlength=
"2
00
"
size=
"small"
show-word-limit
:placeholder=
"$t('api_test.request.assertions.value')"
/>
</el-col>
<el-col
class=
"assertion-btn"
>
...
...
frontend/src/business/components/api/test/components/assertion/ApiAssertionsEdit.vue
浏览文件 @
c4d6ec1f
...
...
@@ -13,7 +13,7 @@
<div>
{{
$t
(
"
api_test.request.assertions.response_time
"
)
}}
</div>
<ms-api-assertion-response-time
:
response-time=
"assertions.responseTime
"
:edit=
"true"
/>
<ms-api-assertion-response-time
:
duration=
"assertions.duration
"
:edit=
"true"
/>
</div>
</div>
...
...
frontend/src/business/components/api/test/model/ScenarioModel.js
浏览文件 @
c4d6ec1f
...
...
@@ -137,6 +137,16 @@ export class Scenario extends BaseConfig {
options
.
requests
=
options
.
requests
||
[
new
Request
()];
return
options
;
}
clone
()
{
let
scenario
=
new
Scenario
(
this
);
scenario
.
id
=
uuid
();
scenario
.
requests
.
forEach
(
function
(
request
)
{
request
.
id
=
uuid
();
});
return
scenario
;
}
}
export
class
Request
extends
BaseConfig
{
...
...
@@ -168,6 +178,12 @@ export class Request extends BaseConfig {
isValid
()
{
return
!!
this
.
url
&&
!!
this
.
method
}
clone
()
{
let
request
=
new
Request
(
this
);
request
.
id
=
uuid
();
return
request
;
}
}
export
class
Body
extends
BaseConfig
{
...
...
frontend/src/business/components/common/head/RecentList.vue
浏览文件 @
c4d6ec1f
...
...
@@ -6,7 +6,10 @@
<i
class=
"el-icon-refresh"
@
click=
"recent"
/>
</div>
<el-menu-item
:key=
"i.id"
v-for=
"i in items"
:index=
"getIndex(i)"
:route=
"getRouter(i)"
>
<span
class=
"title"
>
{{
i
.
name
}}
</span>
<template
slot=
"title"
>
<div
class=
"title"
>
{{
i
.
name
}}
</div>
<div
class=
"time"
v-if=
"options.showTime && i.updateTime"
>
{{
i
.
updateTime
|
timestampFormatDate
}}
</div>
</
template
>
</el-menu-item>
</div>
</template>
...
...
@@ -81,6 +84,18 @@
}
.title
{
display
:
inline-block
;
padding-left
:
20px
;
max-width
:
200px
;
white-space
:
nowrap
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
}
.time
{
color
:
#C0C4CC
;
display
:
inline-block
;
padding-left
:
20px
;
float
:
right
;
}
</
style
>
frontend/src/business/components/common/router/router.js
浏览文件 @
c4d6ec1f
...
...
@@ -10,6 +10,7 @@ import OrganizationMember from "../../settings/organization/OrganizationMember";
import
Member
from
"
../../settings/workspace/WorkspaceMember
"
;
import
TestCaseReportTemplate
from
"
../../settings/workspace/TestCaseReportTemplate
"
;
import
TestResourcePool
from
"
../../settings/system/TestResourcePool
"
;
import
SystemParameterSetting
from
"
../../settings/system/SystemParameterSetting
"
;
import
MsProject
from
"
../../project/MsProject
"
;
import
OrganizationWorkspace
from
"
../../settings/organization/OrganizationWorkspace
"
;
import
PersonSetting
from
"
../../settings/personal/PersonSetting
"
;
...
...
@@ -80,11 +81,16 @@ const router = new VueRouter({
path
:
'
testresourcepool
'
,
component
:
TestResourcePool
},
{
path
:
'
systemparametersetting
'
,
component
:
SystemParameterSetting
},
{
path
:
'
testcase/report/template
'
,
name
:
'
testCaseReportTemplate
'
,
component
:
TestCaseReportTemplate
}
},
]
},
{
...
...
frontend/src/business/components/performance/report/components/LogDetails.vue
浏览文件 @
c4d6ec1f
<
template
>
<div
v-loading=
"result.loading"
>
<el-tabs
type=
"border-card"
:stretch=
"true"
>
<el-tab-pane
v-for=
"item in logContent"
:key=
"item.
i
d"
:label=
"item.resourceName"
class=
"logging-content"
>
<el-tab-pane
v-for=
"item in logContent"
:key=
"item.
resourceI
d"
:label=
"item.resourceName"
class=
"logging-content"
>
{{
item
.
content
}}
...
<el-link
type=
"primary"
@
click=
"downloadLogFile(item)"
>
{{
$t
(
'
load_test.download_log_file
'
)
}}
</el-link>
</el-tab-pane>
...
...
@@ -27,7 +27,7 @@
},
downloadLogFile
(
item
)
{
let
config
=
{
url
:
'
/performance/report/log/download/
'
+
item
.
i
d
,
url
:
'
/performance/report/log/download/
'
+
this
.
id
+
'
/
'
+
item
.
resourceI
d
,
method
:
'
get
'
,
responseType
:
'
blob
'
};
...
...
frontend/src/business/components/performance/test/components/PerformanceAdvancedConfig.vue
浏览文件 @
c4d6ec1f
<
template
>
<div>
<!--Domain name binding-->
<el-row
type=
"flex"
justify=
"start"
>
<el-col
:span=
"8"
>
<h3>
{{
$t
(
'
load_test.domain_bind
'
)
}}
</h3>
...
...
@@ -7,7 +8,7 @@
</el-button>
</el-col>
</el-row>
<!-- -->
<!--
Domain name binding form
-->
<el-row>
<el-col
:span=
"24"
>
<el-table
:data=
"domains"
size=
"mini"
class=
"tb-edit"
align=
"center"
border
highlight-current-row
>
...
...
@@ -40,6 +41,7 @@
v-model=
"row.enable"
active-color=
"#13ce66"
inactive-color=
"#ff4949"
active-value=
"readOnly"
@
click=
"confirmEdit(row)"
>
</el-switch>
...
...
frontend/src/business/components/settings/SettingMenu.vue
浏览文件 @
c4d6ec1f
...
...
@@ -9,6 +9,7 @@
<el-menu-item
index=
"/setting/organization"
>
{{$t('commons.organization')}}
</el-menu-item>
<el-menu-item
index=
"/setting/systemworkspace"
>
{{$t('commons.workspace')}}
</el-menu-item>
<el-menu-item
index=
"/setting/testresourcepool"
>
{{$t('commons.test_resource_pool')}}
</el-menu-item>
<el-menu-item
index=
"/setting/systemparametersetting"
>
{{$t('commons.system_parameter_setting')}}
</el-menu-item>
</el-submenu>
<el-submenu
index=
"2"
v-permission=
"['org_admin']"
v-if=
"isCurrentOrganizationAdmin"
>
...
...
frontend/src/business/components/settings/system/SystemParameterSetting.vue
0 → 100644
浏览文件 @
c4d6ec1f
<
template
>
<div>
<el-card
class=
"box-card"
v-loading=
"result.loading"
>
<template
v-slot:header
>
<h2>
{{
$t
(
'
system_parameter_setting.mailbox_service_settings
'
)
}}
</h2>
</
template
>
<!--邮件表单-->
<el-form
:inline=
"true"
:model=
"formInline"
:rules=
"rules"
ref=
"formInline"
class=
"demo-form-inline"
:disabled=
"show"
v-loading=
"loading"
>
<el-row>
<el-col>
<el-form-item
:label=
"$t('system_parameter_setting.SMTP_host')"
prop=
"host"
>
</el-form-item>
<el-input
v-model=
"formInline.host"
:placeholder=
"$t('system_parameter_setting.SMTP_host')"
v-on:input=
"host"
></el-input>
</el-col>
</el-row>
<el-row>
<el-col>
<el-form-item
:label=
"$t('system_parameter_setting.SMTP_port')"
prop=
"port"
>
</el-form-item>
<el-input
v-model=
"formInline.port"
:placeholder=
"$t('system_parameter_setting.SMTP_port')"
v-on:input=
"port"
></el-input>
</el-col>
</el-row>
<el-row>
<el-col>
<el-form-item
:label=
"$t('system_parameter_setting.SMTP_account')"
prop=
"account"
>
</el-form-item>
<el-input
v-model=
"formInline.account"
:placeholder=
"$t('system_parameter_setting.SMTP_account')"
v-on:input=
"account"
></el-input>
</el-col>
</el-row>
<el-row>
<el-col>
<el-form-item
:label=
"$t('system_parameter_setting.SMTP_password')"
prop=
"password"
>
</el-form-item>
<el-input
v-model=
"formInline.password"
:placeholder=
"$t('system_parameter_setting.SMTP_password')"
show-password
></el-input>
</el-col>
</el-row>
<!---->
<div
style=
"border: 0px;margin-bottom: 20px;margin-top: 20px"
>
<el-checkbox
v-model=
"SSL"
label=
"开启SSL(如果SMTP端口是465,通常需要启用SSL)"
></el-checkbox>
</div>
<div
style=
"border: 0px;margin-bottom: 20px"
>
<el-checkbox
v-model=
"TLS"
label=
"开启TLS(如果SMTP端口是587,通常需要启用TLS)"
></el-checkbox>
</div>
<div
style=
"border: 0px;margin-bottom: 20px"
>
<el-checkbox
v-model=
"SMTP"
label=
"是否匿名 SMTP"
></el-checkbox>
</div>
<
template
v-slot:footer
>
</
template
>
</el-form>
<div
style=
"margin-left: 640px"
>
<el-button
type=
"primary"
@
click=
"testConnection('formInline')"
:disabled=
"disabledConnection"
>
{{$t('system_parameter_setting.test_connection')}}
</el-button>
<el-button
@
click=
"edit"
v-if=
"showEdit"
>
{{$t('commons.edit')}}
</el-button>
<el-button
type=
"success"
@
click=
"save('formInline')"
v-if=
"showSave"
:disabled=
"disabledSave"
>
{{$t('commons.save')}}
</el-button>
<el-button
@
click=
"cancel"
type=
"info"
v-if=
"showCancel"
>
{{$t('commons.cancel')}}
</el-button>
</div>
</el-card>
</div>
</template>
<
script
>
export
default
{
name
:
"
SystemParameterSetting
"
,
data
()
{
return
{
formInline
:
{
host
:
'
smtp.163.com
'
,
port
:
'
465
'
,
account
:
'
xjj0608@153.com
'
,
password
:
'
2345678
'
,
},
result
:
{},
SSL
:
false
,
TLS
:
false
,
SMTP
:
true
,
showEdit
:
true
,
showSave
:
false
,
showCancel
:
false
,
show
:
true
,
disabledConnection
:
false
,
disabledSave
:
false
,
loading
:
false
,
rules
:
{
host
:
[
{
required
:
true
,
message
:
this
.
$t
(
'
commons.host_cannot_be_empty
'
)
},
],
port
:
[
{
required
:
true
,
message
:
'
'
}
],
account
:
[
{
required
:
true
,
message
:
'
'
}]
}
}
},
methods
:
{
host
()
{
let
host
=
this
.
formInline
.
host
;
if
(
!
host
)
{
this
.
disabledConnection
=
true
;
this
.
disabledSave
=
true
;
}
else
{
this
.
disabledConnection
=
false
;
this
.
disabledSave
=
false
;
}
},
port
()
{
let
port
=
this
.
formInline
.
port
;
if
(
!
port
)
{
this
.
disabledConnection
=
true
;
this
.
disabledSave
=
true
;
}
else
{
this
.
disabledConnection
=
false
;
this
.
disabledSave
=
false
;
}
},
account
()
{
let
account
=
this
.
formInline
.
account
;
if
(
!
account
)
{
this
.
disabledConnection
=
true
;
this
.
disabledSave
=
true
;
}
else
{
this
.
disabledConnection
=
false
;
this
.
disabledSave
=
false
;
}
},
testConnection
(
formInline
)
{
let
param
=
{
"
meter.host
"
:
this
.
formInline
.
host
,
"
meter.port
"
:
this
.
formInline
.
port
,
"
meter.account
"
:
this
.
formInline
.
account
,
"
meter.password
"
:
this
.
formInline
.
password
,
"
meter.ssl
"
:
this
.
SSL
,
"
meter.tls
"
:
this
.
TLS
,
"
meter.smtp
"
:
this
.
SMTP
,
};
this
.
$refs
[
formInline
].
validate
((
valid
)
=>
{
if
(
valid
)
{
this
.
result
=
this
.
$post
(
"
/system/testConnection
"
,
param
,
response
=>
{
let
flag
=
response
.
success
;
if
(
flag
)
{
this
.
$success
(
this
.
$t
(
'
commons.connection_successful
'
));
}
else
{
this
.
$message
.
error
(
this
.
$t
(
'
commons.connection_failed
'
));
}
});
}
else
{
return
false
;
}
})
},
edit
()
{
this
.
showEdit
=
false
;
this
.
showSave
=
true
;
this
.
showCancel
=
true
;
this
.
show
=
false
;
},
save
(
formInline
)
{
this
.
showEdit
=
true
;
this
.
showCancel
=
false
;
this
.
showSave
=
false
;
this
.
show
=
true
;
let
param
=
[
{
paramKey
:
"
meter.host
"
,
paramValue
:
this
.
formInline
.
host
,
type
:
"
text
"
,
sort
:
1
},
{
paramKey
:
"
meter.port
"
,
paramValue
:
this
.
formInline
.
port
,
type
:
"
text
"
,
sort
:
2
},
{
paramKey
:
"
meter.account
"
,
paramValue
:
this
.
formInline
.
account
,
type
:
"
text
"
,
sort
:
3
},
{
paramKey
:
"
meter.password
"
,
paramValue
:
this
.
formInline
.
password
,
type
:
"
password
"
,
sort
:
4
},
{
paramKey
:
"
meter.ssl
"
,
paramValue
:
this
.
SSL
,
type
:
"
text
"
,
sort
:
5
},
{
paramKey
:
"
meter.tls
"
,
paramValue
:
this
.
TLS
,
type
:
"
text
"
,
sort
:
6
},
{
paramKey
:
"
meter.smtp
"
,
paramValue
:
this
.
SMTP
,
type
:
"
text
"
,
sort
:
7
}
]
this
.
$refs
[
formInline
].
validate
(
valid
=>
{
if
(
valid
)
{
this
.
result
=
this
.
$post
(
"
/system/edit/email
"
,
param
,
response
=>
{
let
flag
=
response
.
success
;
if
(
flag
)
{
this
.
$success
(
this
.
$t
(
'
commons.save_success
'
));
}
else
{
this
.
$message
.
error
(
this
.
$t
(
'
commons.save_failed
'
));
}
});
}
else
{
return
false
;
}
})
},
cancel
()
{
this
.
showEdit
=
true
;
this
.
showCancel
=
false
;
this
.
showSave
=
false
;
this
.
show
=
true
;
}
}
}
</
script
>
<
style
scoped
>
.text
{
font-size
:
18px
;
}
.item
{
margin-bottom
:
30px
;
}
.box-card
{
padding-left
:
5px
;
}
/
deep
/
.el-input__inner
{
border-width
:
0px
;
border-bottom-width
:
1px
;
}
</
style
>
frontend/src/business/components/settings/system/User.vue
浏览文件 @
c4d6ec1f
...
...
@@ -16,7 +16,7 @@
</
template
>
</el-table-column>
<el-table-column
prop=
"email"
:label=
"$t('commons.email')"
/>
<el-table-column
prop=
"status"
:label=
"$t('commons.status')"
>
<el-table-column
prop=
"status"
:label=
"$t('commons.status')"
width=
"120"
>
<
template
v-slot:default=
"scope"
>
<el-switch
v-model=
"scope.row.status"
active-color=
"#13ce66"
...
...
@@ -49,9 +49,9 @@
</el-card>
<!--Create user-->
<el-dialog
:title=
"$t('user.create')"
:visible.sync=
"createVisible"
width=
"3
0
%"
@
closed=
"handleClose"
<el-dialog
:title=
"$t('user.create')"
:visible.sync=
"createVisible"
width=
"3
5
%"
@
closed=
"handleClose"
:destroy-on-close=
"true"
>
<el-form
:model=
"form"
label-position=
"right"
label-width=
"1
0
0px"
size=
"small"
:rules=
"rule"
ref=
"createUserForm"
>
<el-form
:model=
"form"
label-position=
"right"
label-width=
"1
2
0px"
size=
"small"
:rules=
"rule"
ref=
"createUserForm"
>
<el-form-item
label=
"ID"
prop=
"id"
>
<el-input
v-model=
"form.id"
autocomplete=
"off"
/>
</el-form-item>
...
...
@@ -67,6 +67,74 @@
<el-form-item
:label=
"$t('commons.password')"
prop=
"password"
>
<el-input
v-model=
"form.password"
autocomplete=
"off"
show-password
/>
</el-form-item>
<div
v-for=
"(role, index) in form.roles"
:key=
"index"
>
<el-form-item
:label=
"'角色'+index"
:required=
"true"
>
<el-select
v-model=
"role.id"
placeholder=
"选择角色类型"
>
<el-option
v-for=
"item in userRole"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
>
</el-option>
</el-select>
<el-button
@
click.prevent=
"removeRole(role)"
style=
"margin-left: 20px;"
v-if=
"form.roles.length > 1"
>
删除
</el-button>
</el-form-item>
<div
v-if=
"role.id === 'org_admin'"
>
<el-form-item
label=
"选择组织"
:required=
"true"
>
<el-select
v-model=
"role.Ids"
placeholder=
"选择组织"
multiple
>
<el-option
v-for=
"item in form.orgList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
>
</el-option>
</el-select>
</el-form-item>
</div>
<div
v-if=
"role.id === 'test_manager'"
>
<el-form-item
label=
"选择工作空间"
:required=
"true"
>
<el-select
v-model=
"role.Ids"
placeholder=
"选择工作空间"
multiple
>
<el-option
v-for=
"item in form.wsList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
>
</el-option>
</el-select>
</el-form-item>
</div>
<div
v-if=
"role.id ==='test_user'"
>
<el-form-item
label=
"选择工作空间"
:required=
"true"
>
<el-select
v-model=
"role.Ids"
placeholder=
"选择工作空间"
multiple
>
<el-option
v-for=
"item in form.wsList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
>
</el-option>
</el-select>
</el-form-item>
</div>
<div
v-if=
"role.id ==='test_viewer'"
>
<el-form-item
label=
"选择工作空间"
:required=
"true"
>
<el-select
v-model=
"role.Ids"
placeholder=
"选择工作空间"
multiple
>
<el-option
v-for=
"item in form.wsList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
>
</el-option>
</el-select>
</el-form-item>
</div>
</div>
<el-form-item>
<
template
>
<el-button
type=
"success"
style=
"width: 100%;"
@
click=
"addRole()"
>
添加角色
</el-button>
</
template
>
</el-form-item>
</el-form>
<
template
v-slot:footer
>
<ms-dialog-footer
...
...
@@ -78,7 +146,7 @@
<!--Modify user information in system settings-->
<el-dialog
:title=
"$t('user.modify')"
:visible.sync=
"updateVisible"
width=
"30%"
:destroy-on-close=
"true"
@
close=
"handleClose"
>
<el-form
:model=
"form"
label-position=
"right"
label-width=
"1
0
0px"
size=
"small"
:rules=
"rule"
ref=
"updateUserForm"
>
<el-form
:model=
"form"
label-position=
"right"
label-width=
"1
2
0px"
size=
"small"
:rules=
"rule"
ref=
"updateUserForm"
>
<el-form-item
label=
"ID"
prop=
"id"
>
<el-input
v-model=
"form.id"
autocomplete=
"off"
:disabled=
"true"
/>
</el-form-item>
...
...
@@ -91,6 +159,73 @@
<el-form-item
:label=
"$t('commons.phone')"
prop=
"phone"
>
<el-input
v-model=
"form.phone"
autocomplete=
"off"
/>
</el-form-item>
<div
v-for=
"(role, index) in form.roles"
:key=
"index"
>
<el-form-item
:label=
"'角色'+index"
:required=
"true"
>
<el-select
v-model=
"role.id"
placeholder=
"选择角色类型"
>
<el-option
v-for=
"item in userRole"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
>
</el-option>
</el-select>
<el-button
@
click.prevent=
"removeRole(role)"
style=
"margin-left: 20px;"
v-if=
"form.roles.length > 1"
>
删除
</el-button>
</el-form-item>
<div
v-if=
"role.id === 'org_admin'"
>
<el-form-item
label=
"选择组织"
:required=
"true"
>
<el-select
v-model=
"role.Ids"
placeholder=
"选择组织"
multiple
>
<el-option
v-for=
"item in form.orgList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
>
</el-option>
</el-select>
</el-form-item>
</div>
<div
v-if=
"role.id === 'test_manager'"
>
<el-form-item
label=
"选择工作空间"
:required=
"true"
>
<el-select
v-model=
"role.Ids"
placeholder=
"选择工作空间"
multiple
>
<el-option
v-for=
"item in form.wsList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
>
</el-option>
</el-select>
</el-form-item>
</div>
<div
v-if=
"role.id ==='test_user'"
>
<el-form-item
label=
"选择工作空间"
:required=
"true"
>
<el-select
v-model=
"role.Ids"
placeholder=
"选择工作空间"
multiple
>
<el-option
v-for=
"item in form.wsList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
>
</el-option>
</el-select>
</el-form-item>
</div>
<div
v-if=
"role.id ==='test_viewer'"
>
<el-form-item
label=
"选择工作空间"
:required=
"true"
>
<el-select
v-model=
"role.Ids"
placeholder=
"选择工作空间"
multiple
>
<el-option
v-for=
"item in form.wsList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
>
</el-option>
</el-select>
</el-form-item>
</div>
</div>
<el-form-item>
<
template
>
<el-button
type=
"success"
style=
"width: 100%;"
@
click=
"addRole()"
>
添加角色
</el-button>
</
template
>
</el-form-item>
</el-form>
<
template
v-slot:footer
>
<ms-dialog-footer
...
...
@@ -152,12 +287,15 @@
updateVisible
:
false
,
editPasswordVisible
:
false
,
multipleSelection
:
[],
userRole
:
[],
currentPage
:
1
,
pageSize
:
5
,
total
:
0
,
condition
:
{},
tableData
:
[],
form
:
{},
form
:
{
roles
:
[{}]
},
checkPasswordForm
:
{},
ruleForm
:
{},
setAdminParam
:
{},
...
...
@@ -216,14 +354,27 @@
},
created
()
{
this
.
search
();
this
.
getAllRole
();
},
methods
:
{
create
()
{
this
.
createVisible
=
true
;
this
.
getOrgList
();
this
.
getWsList
();
},
edit
(
row
)
{
this
.
updateVisible
=
true
;
this
.
form
=
Object
.
assign
({},
row
);
this
.
$get
(
"
/organization/list
"
,
response
=>
{
this
.
$set
(
this
.
form
,
"
orgList
"
,
response
.
data
);
});
this
.
$get
(
"
/workspace/list
"
,
response
=>
{
this
.
$set
(
this
.
form
,
"
wsList
"
,
response
.
data
);
});
this
.
$get
(
'
/userrole/all/
'
+
row
.
id
,
response
=>
{
let
data
=
response
.
data
;
this
.
$set
(
this
.
form
,
"
roles
"
,
data
);
});
},
editPassword
(
row
)
{
this
.
editPasswordVisible
=
true
;
...
...
@@ -295,12 +446,12 @@
let
roles
=
data
.
roles
;
// let userRoles = result.userRoles;
this
.
$set
(
this
.
tableData
[
i
],
"
roles
"
,
roles
);
})
})
;
}
})
},
handleClose
()
{
this
.
form
=
{};
this
.
form
=
{
roles
:
[{
value
:
''
}]
};
},
changeSwitch
(
row
)
{
this
.
$post
(
this
.
updatePath
,
row
,
()
=>
{
...
...
@@ -312,7 +463,32 @@
},
handleSelectionChange
(
val
)
{
this
.
multipleSelection
=
val
;
}
},
getOrgList
()
{
this
.
$get
(
"
/organization/list
"
,
response
=>
{
this
.
$set
(
this
.
form
,
"
orgList
"
,
response
.
data
);
})
},
getWsList
()
{
this
.
$get
(
"
/workspace/list
"
,
response
=>
{
this
.
$set
(
this
.
form
,
"
wsList
"
,
response
.
data
);
})
},
getAllRole
()
{
this
.
$get
(
"
/role/all
"
,
response
=>
{
this
.
userRole
=
response
.
data
;
})
},
addRole
()
{
let
roles
=
this
.
form
.
roles
;
roles
.
push
({});
},
removeRole
(
item
)
{
let
index
=
this
.
form
.
roles
.
indexOf
(
item
)
if
(
index
!==
-
1
)
{
this
.
form
.
roles
.
splice
(
index
,
1
)
}
},
}
}
</
script
>
...
...
frontend/src/i18n/en-US.js
浏览文件 @
c4d6ec1f
...
...
@@ -56,6 +56,15 @@ export default {
'
personal_information
'
:
'
Personal Information
'
,
'
exit_system
'
:
'
Exit System
'
,
'
verification
'
:
'
Verification
'
,
'
set_admin
'
:
'
Set Admin
'
,
'
system_parameter_setting
'
:
'
System Parameter Setting
'
,
'
connection_successful
'
:
'
Connection successful
'
,
'
connection_failed
'
:
'
Connection failed
'
,
'
save_failed
'
:
'
Saved failed
'
,
'
host_cannot_be_empty
'
:
'
Host cannot be empty
'
,
'
port_cannot_be_empty
'
:
'
Port cannot be empty
'
,
'
account_cannot_be_empty
'
:
'
Account cannot be empty
'
,
'
title
'
:
'
Title
'
,
'
custom
'
:
'
Custom
'
,
'
select_date
'
:
'
Select date
'
,
...
...
@@ -150,9 +159,9 @@ export default {
'
please_choose_role
'
:
'
Please Choose Role
'
,
'
admin
'
:
'
Admin
'
,
'
org_admin
'
:
'
Org_Admin
'
,
'
test_manager
'
:
'
Test
_
Manager
'
,
'
test_user
'
:
'
Test
_
User
'
,
'
test_viewer
'
:
'
Test
_
Viewer
'
,
'
test_manager
'
:
'
Test
Manager
'
,
'
test_user
'
:
'
Test
User
'
,
'
test_viewer
'
:
'
Test
Viewer
'
,
},
report
:
{
'
recent
'
:
'
Recent Report
'
,
...
...
@@ -252,8 +261,12 @@ export default {
variables
:
"
Variables
"
,
headers
:
"
Headers
"
,
kv_description
:
"
Variables are available for all requests
"
,
copy
:
"
Copy scenario
"
,
delete
:
"
Delete scenario
"
},
request
:
{
copy
:
"
Copy request
"
,
delete
:
"
Delete request
"
,
input_name
:
"
Please enter the request name
"
,
name
:
"
Name
"
,
method
:
"
Method
"
,
...
...
@@ -312,7 +325,7 @@ export default {
assertions
:
"
Assertions
"
,
assertions_pass
:
"
Passed Assertions
"
,
assertions_name
:
"
Assertion Name
"
,
assertions_
message
:
"
Assertion
Message
"
,
assertions_
error_message
:
"
Error
Message
"
,
assertions_is_success
:
"
Fail/Success
"
,
result
:
"
Result
"
,
success
:
"
Success
"
,
...
...
@@ -480,6 +493,14 @@ export default {
'
status_change_success
'
:
'
Successfully changed the status!
'
,
'
status_change_failed
'
:
'
Failed to change the status, resource pool is invalid!
'
,
},
system_parameter_setting
:
{
'
mailbox_service_settings
'
:
'
Mailbox Service Settings
'
,
'
test_connection
'
:
'
Test connection
'
,
'
SMTP_host
'
:
'
SMTP host
'
,
'
SMTP_port
'
:
'
SMTP port
'
,
'
SMTP_account
'
:
'
SMTP account
'
,
'
SMTP_password
'
:
'
SMTP password
'
,
},
i18n
:
{
'
home
'
:
'
Home
'
}
...
...
frontend/src/i18n/zh-CN.js
浏览文件 @
c4d6ec1f
...
...
@@ -80,6 +80,14 @@ export default {
'
weeks_5
'
:
'
周五
'
,
'
weeks_6
'
:
'
周六
'
,
'
test_unit
'
:
'
测试
'
,
'
set_admin
'
:
'
设置为管理员
'
,
'
system_parameter_setting
'
:
'
系统参数设置
'
,
'
connection_successful
'
:
'
连接成功
'
,
'
connection_failed
'
:
'
连接失败
'
,
'
save_failed
'
:
'
保存失败
'
,
'
host_cannot_be_empty
'
:
'
主机不能为空
'
,
'
port_cannot_be_empty
'
:
'
端口号不能为空
'
,
'
account_cannot_be_empty
'
:
'
帐户不能为空
'
,
},
workspace
:
{
'
create
'
:
'
创建工作空间
'
,
...
...
@@ -106,7 +114,6 @@ export default {
'
select
'
:
'
选择组织
'
,
},
project
:
{
'
name
'
:
'
项目名称
'
,
'
recent
'
:
'
最近的项目
'
,
'
create
'
:
'
创建项目
'
,
'
edit
'
:
'
编辑项目
'
,
...
...
@@ -232,7 +239,6 @@ export default {
'
pressure_prediction_chart
'
:
'
压力预估图
'
,
},
api_test
:
{
title
:
"
测试
"
,
save_and_run
:
"
保存并执行
"
,
run
:
"
执行
"
,
running
:
"
正在执行
"
,
...
...
@@ -252,8 +258,12 @@ export default {
variables
:
"
自定义变量
"
,
headers
:
"
请求头
"
,
kv_description
:
"
所有请求可以使用自定义变量
"
,
copy
:
"
复制场景
"
,
delete
:
"
删除场景
"
},
request
:
{
copy
:
"
复制请求
"
,
delete
:
"
删除请求
"
,
input_name
:
"
请输入请求名称
"
,
name
:
"
请求名称
"
,
method
:
"
请求方法
"
,
...
...
@@ -312,7 +322,7 @@ export default {
assertions
:
"
断言
"
,
assertions_pass
:
"
成功断言
"
,
assertions_name
:
"
断言名称
"
,
assertions_
message
:
"
断言
信息
"
,
assertions_
error_message
:
"
错误
信息
"
,
assertions_is_success
:
"
是否成功
"
,
result
:
"
结果
"
,
success
:
"
成功
"
,
...
...
@@ -480,6 +490,14 @@ export default {
'
status_change_success
'
:
'
状态修改成功!
'
,
'
status_change_failed
'
:
'
状态修改失败, 校验不通过!
'
,
},
system_parameter_setting
:
{
'
mailbox_service_settings
'
:
'
邮件服务设置
'
,
'
test_connection
'
:
'
测试连接
'
,
'
SMTP_host
'
:
'
SMTP主机
'
,
'
SMTP_port
'
:
'
SMTP端口
'
,
'
SMTP_account
'
:
'
SMTP账户
'
,
'
SMTP_password
'
:
'
SMTP密码
'
,
},
i18n
:
{
'
home
'
:
'
首页
'
}
...
...
frontend/src/i18n/zh-TW.js
浏览文件 @
c4d6ec1f
...
...
@@ -252,8 +252,12 @@ export default {
variables
:
"
自定義變數
"
,
headers
:
"
請求頭
"
,
kv_description
:
"
所有請求可以使用自定義變數
"
,
copy
:
"
複製場景
"
,
delete
:
"
删除場景
"
},
request
:
{
copy
:
"
複製請求
"
,
delete
:
"
删除請求
"
,
input_name
:
"
請輸入請求名稱
"
,
name
:
"
請求名稱
"
,
method
:
"
請求方法
"
,
...
...
@@ -312,7 +316,7 @@ export default {
assertions
:
"
斷言
"
,
assertions_pass
:
"
成功斷言
"
,
assertions_name
:
"
斷言名稱
"
,
assertions_
message
:
"
斷言
資訊
"
,
assertions_
error_message
:
"
錯誤
資訊
"
,
assertions_is_success
:
"
是否成功
"
,
result
:
"
結果
"
,
success
:
"
成功
"
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录