Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MeterSphere
metersphere
提交
4ed7802b
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,发现更多精彩内容 >>
提交
4ed7802b
编写于
10月 12, 2020
作者:
W
wenyann
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'v1.3'
上级
6d265b55
369d35e3
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
223 addition
and
14 deletion
+223
-14
backend/src/main/java/io/metersphere/excel/listener/EasyExcelListener.java
...java/io/metersphere/excel/listener/EasyExcelListener.java
+1
-6
backend/src/main/java/io/metersphere/excel/listener/TestCaseDataListener.java
...a/io/metersphere/excel/listener/TestCaseDataListener.java
+4
-2
backend/src/main/java/io/metersphere/track/service/TestCaseService.java
...in/java/io/metersphere/track/service/TestCaseService.java
+3
-2
frontend/src/business/components/track/case/components/TestCaseDetail.vue
...iness/components/track/case/components/TestCaseDetail.vue
+201
-0
frontend/src/business/components/track/case/components/TestCaseList.vue
...usiness/components/track/case/components/TestCaseList.vue
+14
-4
未找到文件。
backend/src/main/java/io/metersphere/excel/listener/EasyExcelListener.java
浏览文件 @
4ed7802b
...
...
@@ -29,12 +29,7 @@ public abstract class EasyExcelListener<T> extends AnalysisEventListener<T> {
*/
protected
static
final
int
BATCH_COUNT
=
2000
;
protected
Class
<
T
>
clazz
;
public
EasyExcelListener
()
{
Type
type
=
getClass
().
getGenericSuperclass
();
this
.
clazz
=
(
Class
<
T
>)
((
ParameterizedType
)
type
).
getActualTypeArguments
()[
0
];
}
protected
Class
clazz
;
/**
* 每条数据解析都会调用
...
...
backend/src/main/java/io/metersphere/excel/listener/TestCaseDataListener.java
浏览文件 @
4ed7802b
...
...
@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
import
io.metersphere.base.domain.TestCaseWithBLOBs
;
import
io.metersphere.commons.constants.TestCaseConstants
;
import
io.metersphere.commons.utils.BeanUtils
;
import
io.metersphere.commons.utils.CommonBeanFactory
;
import
io.metersphere.excel.domain.TestCaseExcelData
;
import
io.metersphere.i18n.Translator
;
import
io.metersphere.track.service.TestCaseService
;
...
...
@@ -25,8 +26,9 @@ public class TestCaseDataListener extends EasyExcelListener<TestCaseExcelData> {
Set
<
String
>
userIds
;
public
TestCaseDataListener
(
TestCaseService
testCaseService
,
String
projectId
,
Set
<
String
>
testCaseNames
,
Set
<
String
>
userIds
)
{
this
.
testCaseService
=
testCaseService
;
public
TestCaseDataListener
(
Class
clazz
,
String
projectId
,
Set
<
String
>
testCaseNames
,
Set
<
String
>
userIds
)
{
this
.
clazz
=
clazz
;
this
.
testCaseService
=
(
TestCaseService
)
CommonBeanFactory
.
getBean
(
"testCaseService"
);
this
.
projectId
=
projectId
;
this
.
testCaseNames
=
testCaseNames
;
this
.
userIds
=
userIds
;
...
...
backend/src/main/java/io/metersphere/track/service/TestCaseService.java
浏览文件 @
4ed7802b
...
...
@@ -319,8 +319,9 @@ public class TestCaseService {
Set
<
String
>
userIds
=
userRoleMapper
.
selectByExample
(
userRoleExample
).
stream
().
map
(
UserRole:
:
getUserId
).
collect
(
Collectors
.
toSet
());
try
{
EasyExcelListener
easyExcelListener
=
new
TestCaseDataListener
(
this
,
projectId
,
testCaseNames
,
userIds
);
EasyExcelFactory
.
read
(
multipartFile
.
getInputStream
(),
new
TestCaseExcelDataFactory
().
getExcelDataByLocal
(),
easyExcelListener
).
sheet
().
doRead
();
Class
clazz
=
new
TestCaseExcelDataFactory
().
getExcelDataByLocal
();
EasyExcelListener
easyExcelListener
=
new
TestCaseDataListener
(
clazz
,
projectId
,
testCaseNames
,
userIds
);
EasyExcelFactory
.
read
(
multipartFile
.
getInputStream
(),
clazz
,
easyExcelListener
).
sheet
().
doRead
();
errList
=
easyExcelListener
.
getErrList
();
}
catch
(
Exception
e
)
{
LogUtil
.
error
(
e
.
getMessage
(),
e
);
...
...
frontend/src/business/components/track/case/components/TestCaseDetail.vue
0 → 100644
浏览文件 @
4ed7802b
<
template
>
<el-form
:model=
"form"
ref=
"caseFrom"
v-loading=
"result.loading"
>
<el-row>
<el-col
:span=
"8"
:offset=
"1"
>
<el-form-item
:placeholder=
"$t('test_track.case.input_name')"
:label=
"$t('test_track.case.name')"
:label-width=
"formLabelWidth"
prop=
"name"
>
<el-input
class=
"case-name"
:disabled=
"readOnly"
v-model=
"testCase.name"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"11"
:offset=
"2"
>
<el-form-item
:label=
"$t('test_track.case.module')"
:label-width=
"formLabelWidth"
prop=
"module"
>
<el-select
v-model=
"testCase.module"
:disabled=
"readOnly"
:placeholder=
"$t('test_track.case.input_module')"
filterable
>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"10"
:offset=
"1"
>
<el-form-item
:label=
"$t('test_track.case.maintainer')"
:label-width=
"formLabelWidth"
prop=
"maintainer"
>
<el-select
:disabled=
"readOnly"
v-model=
"testCase.maintainer"
:placeholder=
"$t('test_track.case.input_maintainer')"
filterable
>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
:label=
"$t('test_track.case.priority')"
:label-width=
"formLabelWidth"
prop=
"priority"
>
<el-select
:disabled=
"readOnly"
v-model=
"testCase.priority"
clearable
:placeholder=
"$t('test_track.case.input_priority')"
>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"10"
:offset=
"1"
>
<el-form-item
:label=
"$t('test_track.case.type')"
:label-width=
"formLabelWidth"
prop=
"type"
>
<el-select
:disabled=
"readOnly"
v-model=
"testCase.type"
:placeholder=
"$t('test_track.case.input_type')"
>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
:label=
"$t('test_track.case.method')"
:label-width=
"formLabelWidth"
prop=
"method"
>
<el-select
:disabled=
"readOnly"
v-model=
"testCase.method"
:placeholder=
"$t('test_track.case.input_method')"
>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row
v-if=
"testCase.method && testCase.method == 'auto'"
>
<el-col
:span=
"9"
:offset=
"1"
>
<el-form-item
:label=
"$t('test_track.case.relate_test')"
:label-width=
"formLabelWidth"
prop=
"testId"
>
<el-select
filterable
:disabled=
"readOnly"
v-model=
"testCase.testId"
:placeholder=
"$t('test_track.case.input_type')"
>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"9"
:offset=
"1"
v-if=
"testCase.testId=='other'"
>
<el-form-item
:label=
"$t('test_track.case.test_name')"
:label-width=
"formLabelWidth"
prop=
"testId"
>
<el-input
v-model=
"testCase.otherTestName"
:placeholder=
"$t('test_track.case.input_test_case')"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row
style=
"margin-top: 15px;"
>
<el-col
:offset=
"2"
>
{{
$t
(
'
test_track.case.prerequisite
'
)
}}
:
</el-col>
</el-row>
<el-row
type=
"flex"
justify=
"center"
style=
"margin-top: 10px;"
>
<el-col
:span=
"20"
>
<el-form-item
prop=
"prerequisite"
>
<el-input
:disabled=
"readOnly"
v-model=
"testCase.prerequisite"
type=
"textarea"
:autosize=
"
{ minRows: 2, maxRows: 4}"
:rows="2"
:placeholder="$t('test_track.case.input_prerequisite')">
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row
v-if=
"testCase.method && testCase.method != 'auto'"
style=
"margin-bottom: 10px"
>
<el-col
:offset=
"2"
>
{{
$t
(
'
test_track.case.steps
'
)
}}
:
</el-col>
</el-row>
<el-row
v-if=
"testCase.method && testCase.method != 'auto'"
type=
"flex"
justify=
"center"
>
<el-col
:span=
"20"
>
<el-table
v-if=
"isStepTableAlive"
:data=
"JSON.parse(testCase.steps)"
class=
"tb-edit"
border
size=
"mini"
:default-sort=
"
{prop: 'num', order: 'ascending'}"
highlight-current-row>
<el-table-column
:label=
"$t('test_track.case.number')"
prop=
"num"
min-width=
"15%"
></el-table-column>
<el-table-column
:label=
"$t('test_track.case.step_desc')"
prop=
"desc"
min-width=
"35%"
>
<template
v-slot:default=
"scope"
>
<el-input
class=
"table-edit-input"
size=
"mini"
:disabled=
"readOnly"
type=
"textarea"
:autosize=
"
{ minRows: 1, maxRows: 6}"
:rows="2"
v-model="scope.row.desc"
:placeholder="$t('commons.input_content')"
clearable/>
</
template
>
</el-table-column>
<el-table-column
:label=
"$t('test_track.case.expected_results')"
prop=
"result"
min-width=
"35%"
>
<
template
v-slot:default=
"scope"
>
<el-input
class=
"table-edit-input"
size=
"mini"
:disabled=
"readOnly"
type=
"textarea"
:autosize=
"
{ minRows: 1, maxRows: 6}"
:rows="2"
v-model="scope.row.result"
:placeholder="$t('commons.input_content')"
clearable/>
</
template
>
</el-table-column>
</el-table>
</el-col>
</el-row>
<el-row
style=
"margin-top: 15px;margin-bottom: 10px"
>
<el-col
:offset=
"2"
>
{{ $t('commons.remark') }}:
</el-col>
</el-row>
<el-row
type=
"flex"
justify=
"center"
>
<el-col
:span=
"20"
>
<el-form-item
prop=
"remark"
>
<el-input
v-model=
"testCase.remark"
:autosize=
"{ minRows: 2, maxRows: 4}"
type=
"textarea"
:disabled=
"readOnly"
:rows=
"2"
:placeholder=
"$t('commons.input_content')"
></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<
script
>
export
default
{
name
:
"
TestCaseDetail
"
,
data
()
{
return
{
result
:
{},
dialogFormVisible
:
false
,
readOnly
:
true
,
form
:
{
name
:
''
,
module
:
''
,
maintainer
:
''
,
priority
:
''
,
type
:
''
,
method
:
''
,
prerequisite
:
''
,
testId
:
''
,
otherTestName
:
''
,
steps
:
[{
num
:
1
,
desc
:
''
,
result
:
''
}],
remark
:
''
,
},
workspaceId
:
''
,
formLabelWidth
:
"
120px
"
,
isStepTableAlive
:
true
,
methodOptions
:
[
{
value
:
'
auto
'
,
label
:
this
.
$t
(
'
test_track.case.auto
'
)},
{
value
:
'
manual
'
,
label
:
this
.
$t
(
'
test_track.case.manual
'
)}
]
};
},
props
:
{
testCase
:
{
type
:
Object
}
},
}
</
script
>
<
style
scoped
>
</
style
>
frontend/src/business/components/track/case/components/TestCaseList.vue
浏览文件 @
4ed7802b
...
...
@@ -56,9 +56,18 @@
show-overflow-tooltip
>
<
template
v-slot:default=
"scope"
>
<div
@
mouseover=
"showDetail(scope.row)"
>
<
!--
<
div
@
mouseover=
"showDetail(scope.row)"
>
<p>
{{
scope
.
row
.
name
}}
</p>
</div>
</div>
-->
<el-popover
placement=
"right-end"
:title=
"$t('test_track.case.view_case')"
width=
"60%"
trigger=
"hover"
>
<test-case-detail
:test-case=
"scope.row"
/>
<p
slot=
"reference"
>
{{
scope
.
row
.
name
}}
</p>
</el-popover>
</
template
>
</el-table-column>
<el-table-column
...
...
@@ -164,7 +173,7 @@
import
{
WORKSPACE_ID
}
from
"
../../../../../common/js/constants
"
;
import
{
LIST_CHANGE
,
TrackEvent
}
from
"
@/business/components/common/head/ListEvent
"
;
import
StatusTableItem
from
"
@/business/components/track/common/tableItems/planview/StatusTableItem
"
;
import
TestCaseDetail
from
"
./TestCaseDetail
"
;
export
default
{
name
:
"
TestCaseList
"
,
components
:
{
...
...
@@ -182,7 +191,8 @@
MsTableHeader
,
ShowMoreBtn
,
BatchEdit
,
StatusTableItem
StatusTableItem
,
TestCaseDetail
},
data
()
{
return
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录