This commit is contained in:
chenjianxing 2020-07-15 20:45:46 +08:00
commit 942707ab64
18 changed files with 198 additions and 64 deletions

View File

@ -11,6 +11,7 @@ import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@ -18,12 +19,12 @@ import java.util.Optional;
public abstract class ApiImportAbstractParser implements ApiImportParser { public abstract class ApiImportAbstractParser implements ApiImportParser {
protected String getApiTestStr(InputStream source) { protected String getApiTestStr(InputStream source) {
BufferedReader bufferedReader = null; BufferedReader bufferedReader;
StringBuilder testStr = null; StringBuilder testStr = null;
try { try {
bufferedReader = new BufferedReader(new InputStreamReader(source, "UTF-8")); bufferedReader = new BufferedReader(new InputStreamReader(source, StandardCharsets.UTF_8));
testStr = new StringBuilder(); testStr = new StringBuilder();
String inputStr = null; String inputStr;
while ((inputStr = bufferedReader.readLine()) != null) { while ((inputStr = bufferedReader.readLine()) != null) {
testStr.append(inputStr); testStr.append(inputStr);
} }

View File

@ -2,17 +2,15 @@ package io.metersphere.api.parse;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import io.metersphere.api.dto.parse.ApiImport; import io.metersphere.api.dto.parse.ApiImport;
import io.metersphere.commons.exception.MSException;
import io.metersphere.commons.utils.LogUtil;
import java.io.*; import java.io.InputStream;
public class MsParser extends ApiImportAbstractParser { public class MsParser extends ApiImportAbstractParser {
@Override @Override
public ApiImport parse(InputStream source) { public ApiImport parse(InputStream source) {
String testStr = getApiTestStr(source); String testStr = getApiTestStr(source);
return JSON.parseObject(testStr.toString(), ApiImport.class); return JSON.parseObject(testStr, ApiImport.class);
} }
} }

View File

@ -1,7 +1,6 @@
package io.metersphere.api.parse; package io.metersphere.api.parse;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import io.metersphere.api.dto.parse.ApiImport; import io.metersphere.api.dto.parse.ApiImport;
import io.metersphere.api.dto.parse.postman.*; import io.metersphere.api.dto.parse.postman.*;
@ -11,15 +10,9 @@ import io.metersphere.api.dto.scenario.Request;
import io.metersphere.api.dto.scenario.Scenario; import io.metersphere.api.dto.scenario.Scenario;
import io.metersphere.commons.constants.MsRequestBodyType; import io.metersphere.commons.constants.MsRequestBodyType;
import io.metersphere.commons.constants.PostmanRequestBodyMode; import io.metersphere.commons.constants.PostmanRequestBodyMode;
import io.metersphere.commons.exception.MSException;
import io.metersphere.commons.utils.LogUtil;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.eclipse.jetty.http.HttpHeader;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -28,7 +21,7 @@ public class PostmanParser extends ApiImportAbstractParser {
@Override @Override
public ApiImport parse(InputStream source) { public ApiImport parse(InputStream source) {
String testStr = getApiTestStr(source); String testStr = getApiTestStr(source);
PostmanCollection postmanCollection = JSON.parseObject(testStr.toString(), PostmanCollection.class); PostmanCollection postmanCollection = JSON.parseObject(testStr, PostmanCollection.class);
PostmanCollectionInfo info = postmanCollection.getInfo(); PostmanCollectionInfo info = postmanCollection.getInfo();
List<Request> requests = parseRequests(postmanCollection); List<Request> requests = parseRequests(postmanCollection);
ApiImport apiImport = new ApiImport(); ApiImport apiImport = new ApiImport();
@ -46,9 +39,7 @@ public class PostmanParser extends ApiImportAbstractParser {
return null; return null;
} }
List<KeyValue> keyValues = new ArrayList<>(); List<KeyValue> keyValues = new ArrayList<>();
postmanKeyValues.forEach(item -> { postmanKeyValues.forEach(item -> keyValues.add(new KeyValue(item.getKey(), item.getValue())));
keyValues.add(new KeyValue(item.getKey(), item.getValue()));
});
return keyValues; return keyValues;
} }

View File

@ -33,5 +33,7 @@ public class TestCase implements Serializable {
private Integer sort; private Integer sort;
private Integer num;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
} }

View File

@ -1053,6 +1053,66 @@ public class TestCaseExample {
addCriterion("sort not between", value1, value2, "sort"); addCriterion("sort not between", value1, value2, "sort");
return (Criteria) this; return (Criteria) this;
} }
public Criteria andNumIsNull() {
addCriterion("num is null");
return (Criteria) this;
}
public Criteria andNumIsNotNull() {
addCriterion("num is not null");
return (Criteria) this;
}
public Criteria andNumEqualTo(Integer value) {
addCriterion("num =", value, "num");
return (Criteria) this;
}
public Criteria andNumNotEqualTo(Integer value) {
addCriterion("num <>", value, "num");
return (Criteria) this;
}
public Criteria andNumGreaterThan(Integer value) {
addCriterion("num >", value, "num");
return (Criteria) this;
}
public Criteria andNumGreaterThanOrEqualTo(Integer value) {
addCriterion("num >=", value, "num");
return (Criteria) this;
}
public Criteria andNumLessThan(Integer value) {
addCriterion("num <", value, "num");
return (Criteria) this;
}
public Criteria andNumLessThanOrEqualTo(Integer value) {
addCriterion("num <=", value, "num");
return (Criteria) this;
}
public Criteria andNumIn(List<Integer> values) {
addCriterion("num in", values, "num");
return (Criteria) this;
}
public Criteria andNumNotIn(List<Integer> values) {
addCriterion("num not in", values, "num");
return (Criteria) this;
}
public Criteria andNumBetween(Integer value1, Integer value2) {
addCriterion("num between", value1, value2, "num");
return (Criteria) this;
}
public Criteria andNumNotBetween(Integer value1, Integer value2) {
addCriterion("num not between", value1, value2, "num");
return (Criteria) this;
}
} }
public static class Criteria extends GeneratedCriteria { public static class Criteria extends GeneratedCriteria {

View File

@ -16,6 +16,7 @@
<result column="update_time" jdbcType="BIGINT" property="updateTime" /> <result column="update_time" jdbcType="BIGINT" property="updateTime" />
<result column="test_id" jdbcType="VARCHAR" property="testId" /> <result column="test_id" jdbcType="VARCHAR" property="testId" />
<result column="sort" jdbcType="INTEGER" property="sort" /> <result column="sort" jdbcType="INTEGER" property="sort" />
<result column="num" jdbcType="INTEGER" property="num" />
</resultMap> </resultMap>
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.metersphere.base.domain.TestCaseWithBLOBs"> <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.metersphere.base.domain.TestCaseWithBLOBs">
<result column="remark" jdbcType="LONGVARCHAR" property="remark" /> <result column="remark" jdbcType="LONGVARCHAR" property="remark" />
@ -81,7 +82,7 @@
</sql> </sql>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id, node_id, node_path, project_id, `name`, `type`, maintainer, priority, `method`, id, node_id, node_path, project_id, `name`, `type`, maintainer, priority, `method`,
prerequisite, create_time, update_time, test_id, sort prerequisite, create_time, update_time, test_id, sort, num
</sql> </sql>
<sql id="Blob_Column_List"> <sql id="Blob_Column_List">
remark, steps remark, steps
@ -139,14 +140,14 @@
project_id, `name`, `type`, project_id, `name`, `type`,
maintainer, priority, `method`, maintainer, priority, `method`,
prerequisite, create_time, update_time, prerequisite, create_time, update_time,
test_id, sort, remark, test_id, sort, num,
steps) remark, steps)
values (#{id,jdbcType=VARCHAR}, #{nodeId,jdbcType=VARCHAR}, #{nodePath,jdbcType=VARCHAR}, values (#{id,jdbcType=VARCHAR}, #{nodeId,jdbcType=VARCHAR}, #{nodePath,jdbcType=VARCHAR},
#{projectId,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}, #{projectId,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR},
#{maintainer,jdbcType=VARCHAR}, #{priority,jdbcType=VARCHAR}, #{method,jdbcType=VARCHAR}, #{maintainer,jdbcType=VARCHAR}, #{priority,jdbcType=VARCHAR}, #{method,jdbcType=VARCHAR},
#{prerequisite,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT}, #{prerequisite,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT},
#{testId,jdbcType=VARCHAR}, #{sort,jdbcType=INTEGER}, #{remark,jdbcType=LONGVARCHAR}, #{testId,jdbcType=VARCHAR}, #{sort,jdbcType=INTEGER}, #{num,jdbcType=INTEGER},
#{steps,jdbcType=LONGVARCHAR}) #{remark,jdbcType=LONGVARCHAR}, #{steps,jdbcType=LONGVARCHAR})
</insert> </insert>
<insert id="insertSelective" parameterType="io.metersphere.base.domain.TestCaseWithBLOBs"> <insert id="insertSelective" parameterType="io.metersphere.base.domain.TestCaseWithBLOBs">
insert into test_case insert into test_case
@ -193,6 +194,9 @@
<if test="sort != null"> <if test="sort != null">
sort, sort,
</if> </if>
<if test="num != null">
num,
</if>
<if test="remark != null"> <if test="remark != null">
remark, remark,
</if> </if>
@ -243,6 +247,9 @@
<if test="sort != null"> <if test="sort != null">
#{sort,jdbcType=INTEGER}, #{sort,jdbcType=INTEGER},
</if> </if>
<if test="num != null">
#{num,jdbcType=INTEGER},
</if>
<if test="remark != null"> <if test="remark != null">
#{remark,jdbcType=LONGVARCHAR}, #{remark,jdbcType=LONGVARCHAR},
</if> </if>
@ -302,6 +309,9 @@
<if test="record.sort != null"> <if test="record.sort != null">
sort = #{record.sort,jdbcType=INTEGER}, sort = #{record.sort,jdbcType=INTEGER},
</if> </if>
<if test="record.num != null">
num = #{record.num,jdbcType=INTEGER},
</if>
<if test="record.remark != null"> <if test="record.remark != null">
remark = #{record.remark,jdbcType=LONGVARCHAR}, remark = #{record.remark,jdbcType=LONGVARCHAR},
</if> </if>
@ -329,6 +339,7 @@
update_time = #{record.updateTime,jdbcType=BIGINT}, update_time = #{record.updateTime,jdbcType=BIGINT},
test_id = #{record.testId,jdbcType=VARCHAR}, test_id = #{record.testId,jdbcType=VARCHAR},
sort = #{record.sort,jdbcType=INTEGER}, sort = #{record.sort,jdbcType=INTEGER},
num = #{record.num,jdbcType=INTEGER},
remark = #{record.remark,jdbcType=LONGVARCHAR}, remark = #{record.remark,jdbcType=LONGVARCHAR},
steps = #{record.steps,jdbcType=LONGVARCHAR} steps = #{record.steps,jdbcType=LONGVARCHAR}
<if test="_parameter != null"> <if test="_parameter != null">
@ -350,7 +361,8 @@
create_time = #{record.createTime,jdbcType=BIGINT}, create_time = #{record.createTime,jdbcType=BIGINT},
update_time = #{record.updateTime,jdbcType=BIGINT}, update_time = #{record.updateTime,jdbcType=BIGINT},
test_id = #{record.testId,jdbcType=VARCHAR}, test_id = #{record.testId,jdbcType=VARCHAR},
sort = #{record.sort,jdbcType=INTEGER} sort = #{record.sort,jdbcType=INTEGER},
num = #{record.num,jdbcType=INTEGER}
<if test="_parameter != null"> <if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" /> <include refid="Update_By_Example_Where_Clause" />
</if> </if>
@ -397,6 +409,9 @@
<if test="sort != null"> <if test="sort != null">
sort = #{sort,jdbcType=INTEGER}, sort = #{sort,jdbcType=INTEGER},
</if> </if>
<if test="num != null">
num = #{num,jdbcType=INTEGER},
</if>
<if test="remark != null"> <if test="remark != null">
remark = #{remark,jdbcType=LONGVARCHAR}, remark = #{remark,jdbcType=LONGVARCHAR},
</if> </if>
@ -421,6 +436,7 @@
update_time = #{updateTime,jdbcType=BIGINT}, update_time = #{updateTime,jdbcType=BIGINT},
test_id = #{testId,jdbcType=VARCHAR}, test_id = #{testId,jdbcType=VARCHAR},
sort = #{sort,jdbcType=INTEGER}, sort = #{sort,jdbcType=INTEGER},
num = #{num,jdbcType=INTEGER},
remark = #{remark,jdbcType=LONGVARCHAR}, remark = #{remark,jdbcType=LONGVARCHAR},
steps = #{steps,jdbcType=LONGVARCHAR} steps = #{steps,jdbcType=LONGVARCHAR}
where id = #{id,jdbcType=VARCHAR} where id = #{id,jdbcType=VARCHAR}
@ -439,7 +455,8 @@
create_time = #{createTime,jdbcType=BIGINT}, create_time = #{createTime,jdbcType=BIGINT},
update_time = #{updateTime,jdbcType=BIGINT}, update_time = #{updateTime,jdbcType=BIGINT},
test_id = #{testId,jdbcType=VARCHAR}, test_id = #{testId,jdbcType=VARCHAR},
sort = #{sort,jdbcType=INTEGER} sort = #{sort,jdbcType=INTEGER},
num = #{num,jdbcType=INTEGER}
where id = #{id,jdbcType=VARCHAR} where id = #{id,jdbcType=VARCHAR}
</update> </update>
</mapper> </mapper>

View File

@ -17,4 +17,6 @@ public interface ExtTestCaseMapper {
List<TestCaseDTO> listBytestCaseIds(@Param("request") QueryTestCaseRequest request); List<TestCaseDTO> listBytestCaseIds(@Param("request") QueryTestCaseRequest request);
TestCase getMaxNumByProjectId(@Param("projectId") String projectId);
} }

View File

@ -188,7 +188,8 @@
</where> </where>
</select> </select>
<select id="listBytestCaseIds" resultType="io.metersphere.track.dto.TestCaseDTO"> <select id="listBytestCaseIds" resultType="io.metersphere.track.dto.TestCaseDTO">
select test_case.*,api_test.name as apiName,load_test.name AS performName from test_case left join api_test on test_case.test_id=api_test.id left join load_test on test_case.test_id=load_test.id select test_case.*,api_test.name as apiName,load_test.name AS performName from test_case left join api_test on
test_case.test_id=api_test.id left join load_test on test_case.test_id=load_test.id
<where> <where>
<if test="request.testCaseIds!=null and request.testCaseIds.size() > 0"> <if test="request.testCaseIds!=null and request.testCaseIds.size() > 0">
and test_case.id in and test_case.id in
@ -198,4 +199,8 @@
</if> </if>
</where> </where>
</select> </select>
<select id="getMaxNumByProjectId" resultType="io.metersphere.base.domain.TestCase">
select * from test_case where test_case.project_id = #{projectId} order by num desc limit 1;
</select>
</mapper> </mapper>

View File

@ -84,6 +84,7 @@ public class TestCaseService {
testCase.setId(UUID.randomUUID().toString()); testCase.setId(UUID.randomUUID().toString());
testCase.setCreateTime(System.currentTimeMillis()); testCase.setCreateTime(System.currentTimeMillis());
testCase.setUpdateTime(System.currentTimeMillis()); testCase.setUpdateTime(System.currentTimeMillis());
testCase.setNum(getNextNum(testCase.getProjectId()));
testCaseMapper.insert(testCase); testCaseMapper.insert(testCase);
} }
@ -253,9 +254,12 @@ public class TestCaseService {
TestCaseMapper mapper = sqlSession.getMapper(TestCaseMapper.class); TestCaseMapper mapper = sqlSession.getMapper(TestCaseMapper.class);
if (!testCases.isEmpty()) { if (!testCases.isEmpty()) {
AtomicInteger sort = new AtomicInteger(); AtomicInteger sort = new AtomicInteger();
AtomicInteger num = new AtomicInteger();
num.set(getNextNum(projectId)+testCases.size());
testCases.forEach(testcase -> { testCases.forEach(testcase -> {
testcase.setNodeId(nodePathMap.get(testcase.getNodePath())); testcase.setNodeId(nodePathMap.get(testcase.getNodePath()));
testcase.setSort(sort.getAndIncrement()); testcase.setSort(sort.getAndIncrement());
testcase.setNum(num.decrementAndGet());
mapper.insert(testcase); mapper.insert(testcase);
}); });
} }
@ -429,4 +433,17 @@ public class TestCaseService {
MSException.throwException(Translator.get("related_case_del_fail_prefix") + " " + str + " " + Translator.get("related_case_del_fail_suffix")); MSException.throwException(Translator.get("related_case_del_fail_prefix") + " " + str + " " + Translator.get("related_case_del_fail_suffix"));
} }
} }
/**
* 获取项目下一个num (页面展示的ID)
* @return
*/
private int getNextNum(String projectId) {
TestCase testCase = extTestCaseMapper.getMaxNumByProjectId(projectId);
if (testCase == null) {
return 100001;
} else {
return Optional.ofNullable(testCase.getNum()+1).orElse(100001);
}
}
} }

View File

@ -0,0 +1,50 @@
alter table test_case add num int null comment 'Manually controlled growth identifier';
DROP PROCEDURE IF EXISTS test_cursor;
DELIMITER //
CREATE PROCEDURE test_cursor()
BEGIN
DECLARE projectId VARCHAR(64);
DECLARE caseId VARCHAR(64);
DECLARE num INT;
DECLARE done INT DEFAULT 0;
DECLARE cursor1 CURSOR FOR (SELECT DISTINCT project_id
FROM test_case
WHERE num IS NULL);
DECLARE cursor2 CURSOR FOR (SELECT id
FROM test_case
WHERE project_id = projectId
ORDER BY create_time);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cursor1;
outer_loop:
LOOP
FETCH cursor1 INTO projectId;
IF done
THEN
LEAVE outer_loop;
END IF;
SET num = 100001;
OPEN cursor2;
inner_loop:
LOOP
FETCH cursor2 INTO caseId;
IF done
THEN
LEAVE inner_loop;
END IF;
UPDATE test_case
SET num = num
WHERE id = caseId;
SET num = num + 1;
END LOOP;
SET done = 0;
CLOSE cursor2;
END LOOP;
CLOSE cursor1;
END //
DELIMITER ;
CALL test_cursor();
DROP PROCEDURE IF EXISTS test_cursor;

View File

@ -39,8 +39,8 @@
<!-- jdbc连接信息 --> <!-- EduLoanManage EduTestDataBase --> <!-- jdbc连接信息 --> <!-- EduLoanManage EduTestDataBase -->
<!--<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://192.168.20.180:3306/fit2cloud"--> <!--<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://192.168.20.180:3306/fit2cloud"-->
<!--userId="root" password="Fit2cloud2015!" />--> <!--userId="root" password="Fit2cloud2015!" />-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="${spring.datasource.url}" connectionURL="${spring.datasource.url}&amp;nullCatalogMeansCurrent=true"
userId="${spring.datasource.username}" password="${spring.datasource.password}"/> userId="${spring.datasource.username}" password="${spring.datasource.password}"/>
<!-- javaTypeResolver式类型转换的信息 --> <!-- javaTypeResolver式类型转换的信息 -->
@ -64,7 +64,7 @@
<!--要生成的数据库表 --> <!--要生成的数据库表 -->
<table tableName="load_test"/> <table tableName="test_case"/>
</context> </context>

View File

@ -4,11 +4,6 @@
<el-dialog :title="$t('commons.adv_search.combine')" :visible.sync="visible" custom-class="adv-dialog" <el-dialog :title="$t('commons.adv_search.combine')" :visible.sync="visible" custom-class="adv-dialog"
:append-to-body="true"> :append-to-body="true">
<div> <div>
<!-- 如果有需求再加上-->
<!-- <div class="search-label">{{$t('commons.adv_search.combine')}}: </div>-->
<!-- <el-select v-model="logic" :placeholder="$t('commons.please_select')" size="small" class="search-combine">-->
<!-- <el-option v-for="o in options" :key="o.value" :label="o.label" :value="o.value"/>-->
<!-- </el-select>-->
<div class="search-items"> <div class="search-items">
<component class="search-item" v-for="(component, index) in config.components" :key="index" <component class="search-item" v-for="(component, index) in config.components" :key="index"
:is="component.name" :component="component"/> :is="component.name" :component="component"/>
@ -26,7 +21,7 @@
<script> <script>
import components from "./search-components"; import components from "./search-components";
import _ from "lodash"; import {cloneDeep} from "lodash";
export default { export default {
components: {...components}, components: {...components},
@ -37,20 +32,12 @@
data() { data() {
return { return {
visible: false, visible: false,
config: this.init(), config: this.init()
options: [{
label: this.$t("commons.adv_search.and"),
value: "and"
}, {
label: this.$t("commons.adv_search.or"),
value: "or"
}],
logic: this.condition.logic || "and"
} }
}, },
methods: { methods: {
init() { // init() {
let config = _.cloneDeep(this.condition); let config = cloneDeep(this.condition);
config.components.forEach(component => { config.components.forEach(component => {
let operator = component.operator.value; let operator = component.operator.value;
component.operator.value = operator === undefined ? component.operator.options[0].value : operator; component.operator.value = operator === undefined ? component.operator.options[0].value : operator;
@ -58,21 +45,19 @@
return config; return config;
}, },
search() { search() {
let condition = { let condition = {}
// logic: this.logic //
}
this.config.components.forEach(component => { this.config.components.forEach(component => {
let operator = component.operator.value; let operator = component.operator.value;
let value = component.value; let value = component.value;
if (Array.isArray(component.value)) { if (Array.isArray(value)) {
if (component.value.length > 0) { if (value.length > 0) {
condition[component.key] = { condition[component.key] = {
operator: operator, operator: operator,
value: value value: value
} }
} }
} else { } else {
if (component.value !== undefined && component.value !== null && component.value !== "") { if (value !== undefined && value !== null && value !== "") {
condition[component.key] = { condition[component.key] = {
operator: operator, operator: operator,
value: value value: value
@ -135,17 +120,6 @@
text-align: center; text-align: center;
} }
.search-label {
display: inline-block;
width: 80px;
box-sizing: border-box;
padding-left: 5px;
}
.search-combine {
width: 160px;
}
.search-items { .search-items {
width: 100%; width: 100%;
} }

View File

@ -38,6 +38,11 @@
class="test-content"> class="test-content">
<el-table-column <el-table-column
type="selection"/> type="selection"/>
<el-table-column
prop="num"
:label="$t('commons.id')"
show-overflow-tooltip>
</el-table-column>
<el-table-column <el-table-column
prop="name" prop="name"
:label="$t('commons.name')" :label="$t('commons.name')"

View File

@ -33,7 +33,11 @@
<el-table-column <el-table-column
type="selection"></el-table-column> type="selection"></el-table-column>
<el-table-column
prop="num"
:label="$t('commons.id')"
show-overflow-tooltip>
</el-table-column>
<el-table-column <el-table-column
prop="name" prop="name"
:label="$t('commons.name')" :label="$t('commons.name')"

View File

@ -5,6 +5,11 @@
<el-table <el-table
row-key="id" row-key="id"
:data="failureTestCases"> :data="failureTestCases">
<el-table-column
prop="num"
:label="$t('commons.id')"
show-overflow-tooltip>
</el-table-column>
<el-table-column <el-table-column
prop="name" prop="name"
:label="$t('commons.name')" :label="$t('commons.name')"

View File

@ -103,6 +103,7 @@ export default {
input_login_username: 'Please input the user ID or email', input_login_username: 'Please input the user ID or email',
input_name: 'Please enter name', input_name: 'Please enter name',
formatErr: 'Format Error', formatErr: 'Format Error',
id: 'ID',
date: { date: {
select_date: 'Select date', select_date: 'Select date',
start_date: 'Start date', start_date: 'Start date',

View File

@ -103,6 +103,7 @@ export default {
input_login_username: '请输入用户 ID 或 邮箱', input_login_username: '请输入用户 ID 或 邮箱',
input_name: '请输入名称', input_name: '请输入名称',
formatErr: '格式错误', formatErr: '格式错误',
id: 'ID',
date: { date: {
select_date: '选择日期', select_date: '选择日期',
start_date: '开始日期', start_date: '开始日期',

View File

@ -101,6 +101,7 @@ export default {
delete_confirm: '請輸入以下內容,確認刪除:', delete_confirm: '請輸入以下內容,確認刪除:',
input_name: '請輸入名稱', input_name: '請輸入名稱',
formatErr: '格式錯誤', formatErr: '格式錯誤',
id: 'ID',
date: { date: {
select_date: '選擇日期', select_date: '選擇日期',
start_date: '開始日期', start_date: '開始日期',