diff --git a/test-track/frontend/src/business/module/TestCaseNodeTree.vue b/test-track/frontend/src/business/module/TestCaseNodeTree.vue
index 71fe6b4097..71ce72e931 100644
--- a/test-track/frontend/src/business/module/TestCaseNodeTree.vue
+++ b/test-track/frontend/src/business/module/TestCaseNodeTree.vue
@@ -11,6 +11,7 @@
:update-permission="['PROJECT_TRACK_CASE:READ+EDIT']"
default-label="未规划用例"
local-suffix="test_case"
+ :hide-node-operator="hideNodeOperator"
@add="add"
@edit="edit"
@drag="drag"
@@ -24,30 +25,18 @@
:show-operator="showOperator"
:condition="condition"
:commands="operators"/>
-
-
-
-
-
+
diff --git a/test-track/frontend/src/business/review/components/TestCaseReviewList.vue b/test-track/frontend/src/business/review/components/TestCaseReviewList.vue
index 1e098a69a8..0fe75648b9 100644
--- a/test-track/frontend/src/business/review/components/TestCaseReviewList.vue
+++ b/test-track/frontend/src/business/review/components/TestCaseReviewList.vue
@@ -70,6 +70,14 @@
+
+
+
{{ scope.row.endTime | datetimeFormat }}
+
+
+
@@ -229,12 +245,18 @@ export default {
.then((response) => {
let data = response.data;
this.page.total = data.itemCount;
- this.tableData = data.listObject;
- this.tableData.forEach(item => {
+ let tableData = data.listObject;
+ tableData.forEach(item => {
if (item.tags && item.tags.length > 0) {
item.tags = JSON.parse(item.tags);
}
+ item.passRate = item.passRate + '%';
+ if (item.reviewers) {
+ item.reviewer = item.reviewers.map(reviewer => reviewer.name).join("、");
+ item.userIds = item.reviewers.map(reviewer => reviewer.id);
+ }
});
+ this.tableData = tableData;
for (let i = 0; i < this.tableData.length; i++) {
let param = {id: this.tableData[i].id};
getTestCaseReviewProject(param)
@@ -242,15 +264,7 @@ export default {
let arr = res.data;
let projectIds = arr.filter(d => d.id !== this.tableData[i].projectId).map(data => data.id);
this.$set(this.tableData[i], "projectIds", projectIds);
- })
- getTestCaseReviewReviewer(param)
- .then((res) => {
- let arr = res.data;
- let reviewer = arr.map(data => data.name).join("、");
- let userIds = arr.map(data => data.id);
- this.$set(this.tableData[i], "reviewer", reviewer);
- this.$set(this.tableData[i], "userIds", userIds);
- })
+ });
getTestCaseReviewFollow(param)
.then((res) => {
let arr = res.data;
diff --git a/test-track/frontend/src/business/review/view/components/TestReviewRelevance.vue b/test-track/frontend/src/business/review/view/components/TestReviewRelevance.vue
index df8637f52b..83377fb1fe 100644
--- a/test-track/frontend/src/business/review/view/components/TestReviewRelevance.vue
+++ b/test-track/frontend/src/business/review/view/components/TestReviewRelevance.vue
@@ -192,6 +192,8 @@ export default {
{text: this.$t('test_track.review.prepare'), value: 'Prepare'},
{text: this.$t('test_track.review.pass'), value: 'Pass'},
{text: this.$t('test_track.review.un_pass'), value: 'UnPass'},
+ {text: this.$t('test_track.review.again'), value: 'Again'},
+ {text: this.$t('test_track.review.underway'), value: 'Underway'},
],
selectCounts: null,
};
diff --git a/test-track/frontend/src/business/review/view/components/TestReviewTestCaseEdit.vue b/test-track/frontend/src/business/review/view/components/TestReviewTestCaseEdit.vue
index 427dc8d7b6..c430dc202e 100644
--- a/test-track/frontend/src/business/review/view/components/TestReviewTestCaseEdit.vue
+++ b/test-track/frontend/src/business/review/view/components/TestReviewTestCaseEdit.vue
@@ -4,212 +4,111 @@
:visible.sync="showDialog"
:with-header="false"
:modal-append-to-body="false"
- size="100%"
- ref="drawer"
- v-loading="loading"
- >
+ size="90%"
+ ref="drawer">
+
-
-
-
-
-
-
-
-
- {{ $t("test_track.return") }}
-
-
+
-
-
-
-
+
-
-
-
-
-
- {{ testCase.num }}-{{ testCase.name }}
-
-
-
-
-
-
+
+
+
-
-
-
-
-
- {{ testCase.nodePath }}
-
-
-
-
- {{ testCase.projectName }}
-
-
-
-
-
-
-
-
+
+
+
+ {{ testCase.nodePath }}
+
+
+
+
+ {{ testCase.projectName }}
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
+
+
diff --git a/test-track/frontend/src/business/review/view/components/TestReviewTestCaseEditOperationBar.vue b/test-track/frontend/src/business/review/view/components/TestReviewTestCaseEditOperationBar.vue
new file mode 100644
index 0000000000..d756549d6f
--- /dev/null
+++ b/test-track/frontend/src/business/review/view/components/TestReviewTestCaseEditOperationBar.vue
@@ -0,0 +1,237 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('test_track.review.pass') }}
+
+
+
+ {{ $t('test_track.review.un_pass') }}
+
+
+
+
+
+ {{ $t('case.comment') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('commons.next_page') }}
+
+
+
+
+
+
+
+ {{ $t('commons.pre_page') }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test-track/frontend/src/business/review/view/components/TestReviewTestCaseExecute.vue b/test-track/frontend/src/business/review/view/components/TestReviewTestCaseExecute.vue
deleted file mode 100644
index 26d64f3545..0000000000
--- a/test-track/frontend/src/business/review/view/components/TestReviewTestCaseExecute.vue
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
-
- {{ $t('test_track.review.pass') }}
-
-
- {{ $t('test_track.review.un_pass') }}
-
-
-
-
- {{$t('test_track.save')}}
-
-
-
-
-
-
-
-
-
diff --git a/test-track/frontend/src/business/review/view/components/TestReviewTestCaseList.vue b/test-track/frontend/src/business/review/view/components/TestReviewTestCaseList.vue
index b849ba5deb..85be9bfb2f 100644
--- a/test-track/frontend/src/business/review/view/components/TestReviewTestCaseList.vue
+++ b/test-track/frontend/src/business/review/view/components/TestReviewTestCaseList.vue
@@ -96,6 +96,7 @@
prop="maintainerName"
:field="item"
:fields-width="fieldsWidth"
+ :filters="userFilter"
:label="$t('custom_field.case_maintainer')"
min-width="120px"/>
@@ -117,6 +118,7 @@
prop="reviewerName"
:field="item"
:fields-width="fieldsWidth"
+ :filters="userFilter"
:label="$t('test_track.review.reviewer')"
min-width="120px"/>
@@ -185,7 +187,7 @@ import TestReviewTestCaseEdit from "./TestReviewTestCaseEdit";
import ReviewStatus from "@/business/case/components/ReviewStatus";
import {
_handleSelectAll, buildBatchParam, deepClone, getCustomTableWidth, getLastTableSortField, getSelectDataCounts,
- getTableHeaderWithCustomFields, initCondition, toggleAllSelection} from "metersphere-frontend/src/utils/tableUtils";
+ getTableHeaderWithCustomFields, initCondition, toggleAllSelection, getCustomFieldBatchEditOption} from "metersphere-frontend/src/utils/tableUtils";
import HeaderCustom from "metersphere-frontend/src/components/head/HeaderCustom";
import {Test_Case_Review_Case_List} from "@/business/model/JsonData";
import MsTable from "metersphere-frontend/src/components/table/MsTable";
@@ -198,13 +200,14 @@ import {hasLicense} from "metersphere-frontend/src/utils/permission";
import TestCaseReviewStatusTableItem from "@/business/common/tableItems/TestCaseReviewStatusTableItem";
import {getProjectConfig} from "@/api/project";
import {
- batchDeleteTestReviewCase,
+ batchDeleteTestReviewCase, batchEditTestReviewCaseReviewer,
batchEditTestReviewCaseStatus,
deleteTestReviewCase, getTesReviewById
} from "@/api/test-review";
import {useStore} from "@/store";
import {getVersionFilters} from "@/business/utils/sdk-utils";
-import {getProjectApplicationConfig} from "@/api/project-application";
+import {getProjectMember, getProjectMemberUserFilter} from "@/api/user";
+import {TEST_REVIEW_CASE} from "metersphere-frontend/src/components/search/search-components";
export default {
name: "TestReviewTestCaseList",
@@ -228,17 +231,23 @@ export default {
screenHeight: 'calc(100vh - 240px)',
tableLabel: [],
result: {},
- condition: {},
+ condition: {
+ components: TEST_REVIEW_CASE
+ },
tableData: [],
nextPageData: null,
prePageData: null,
currentPage: 1,
pageSize: 10,
+ userFilter: [],
total: 0,
pageCount: 0,
enableOrderDrag: true,
selectRows: new Set(),
testReview: {},
+ members: [],
+ memberMap: new Map(),
+ testCaseTemplate: {},
isReadOnly: false,
isTestManagerOrTestUser: false,
selectDataCounts: 0,
@@ -284,11 +293,11 @@ export default {
}
],
typeArr: [
- {id: 'status', name: this.$t('test_track.review_view.execute_result')},
+ {id: 'reviewStatus', name: this.$t('test_track.review_view.execute_result')},
],
valueArr: {
- status: [
- {name: this.$t('test_track.review.prepare'), id: 'Prepare'},
+ reviewStatus: [
+ {name: this.$t('test_track.review.again'), id: 'Again'},
{name: this.$t('test_track.review.pass'), id: 'Pass'},
{name: this.$t('test_track.review.un_pass'), id: 'UnPass'},
]
@@ -342,6 +351,10 @@ export default {
created() {
this.condition.orders = getLastTableSortField(this.tableHeaderKey);
this.pageCount = Math.ceil(this.total / this.pageSize);
+ getProjectMemberUserFilter((data) => {
+ this.userFilter = data;
+ });
+ this.getTemplateField();
},
mounted() {
this.$emit('setCondition', this.condition);
@@ -353,6 +366,16 @@ export default {
this.getCustomNum();
},
methods: {
+ getTemplateField() {
+ getProjectMember()
+ .then((response) => {
+ this.typeArr.push({
+ id: "reviewers",
+ name: this.$t('commons.reviewer')
+ });
+ this.valueArr.reviewers = response.data;
+ });
+ },
nextPage() {
this.currentPage++;
this.initTableData(() => {
@@ -512,17 +535,34 @@ export default {
batchEdit(form) {
let reviewId = this.reviewId;
let param = buildBatchParam(this, this.$refs.table.selectIds);
+ if (form.type === 'reviewStatus') {
+ param.status = form.value;
+ }
param.ids = Array.from(this.$refs.table.selectRows).map(row => row.caseId);
param[form.type] = form.value;
param.reviewId = reviewId;
- batchEditTestReviewCaseStatus(param)
- .then(() => {
- this.tableClear();
- this.status = '';
- this.$post('/test/case/review/edit/status/' + reviewId);
- this.$success(this.$t('commons.save_success'));
- this.$emit('refresh');
- })
+ param.description = form.description;
+ if (form.type === 'reviewers') {
+ param.reviewer = form.value;
+ param.appendTag = form.appendTag;
+ batchEditTestReviewCaseReviewer(param)
+ .then(() => {
+ this.tableClear();
+ this.status = '';
+ this.$post('/test/case/review/edit/status/' + reviewId);
+ this.$success(this.$t('commons.save_success'));
+ this.$emit('refresh');
+ })
+ } else {
+ batchEditTestReviewCaseStatus(param)
+ .then(() => {
+ this.tableClear();
+ this.status = '';
+ this.$post('/test/case/review/edit/status/' + reviewId);
+ this.$success(this.$t('commons.save_success'));
+ this.$emit('refresh');
+ });
+ }
},
openTestReport() {
this.$refs.testReportTemplateList.open(this.reviewId);
diff --git a/test-track/frontend/src/business/review/view/components/commnet/CommentEdit.vue b/test-track/frontend/src/business/review/view/components/commnet/CommentEdit.vue
new file mode 100644
index 0000000000..10344438cf
--- /dev/null
+++ b/test-track/frontend/src/business/review/view/components/commnet/CommentEdit.vue
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+ {{ $t('commons.cancel') }}
+
+
+ {{ $t('test_track.comment.send') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/test-track/frontend/src/business/review/view/components/commnet/CommentEditInput.vue b/test-track/frontend/src/business/review/view/components/commnet/CommentEditInput.vue
new file mode 100644
index 0000000000..458617f238
--- /dev/null
+++ b/test-track/frontend/src/business/review/view/components/commnet/CommentEditInput.vue
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
diff --git a/test-track/frontend/src/business/review/view/components/commnet/CommentHistory.vue b/test-track/frontend/src/business/review/view/components/commnet/CommentHistory.vue
new file mode 100644
index 0000000000..0ca768e5ff
--- /dev/null
+++ b/test-track/frontend/src/business/review/view/components/commnet/CommentHistory.vue
@@ -0,0 +1,122 @@
+
+
+
+ {{ $t('review.no_review_history') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test-track/frontend/src/business/review/view/components/commnet/CommentHistoryItem.vue b/test-track/frontend/src/business/review/view/components/commnet/CommentHistoryItem.vue
new file mode 100644
index 0000000000..48a094d6a2
--- /dev/null
+++ b/test-track/frontend/src/business/review/view/components/commnet/CommentHistoryItem.vue
@@ -0,0 +1,207 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test-track/frontend/src/business/review/view/components/commnet/CommentStatusText.vue b/test-track/frontend/src/business/review/view/components/commnet/CommentStatusText.vue
new file mode 100644
index 0000000000..4ff579b9be
--- /dev/null
+++ b/test-track/frontend/src/business/review/view/components/commnet/CommentStatusText.vue
@@ -0,0 +1,53 @@
+
+
+
+ {{ $t('test_track.plan_view.pass') }}
+
+
+ {{ $t('test_track.plan_view.not_pass') }}
+
+
+ {{ $t('test_track.review.again') }}
+
+
+ {{ value }}
+
+
+
+
+
+
+
diff --git a/test-track/frontend/src/business/style/index.scss b/test-track/frontend/src/business/style/index.scss
new file mode 100644
index 0000000000..573d29b717
--- /dev/null
+++ b/test-track/frontend/src/business/style/index.scss
@@ -0,0 +1,4 @@
+/* 全局函数 */
+@function px2rem($px) {
+ @return calc($px / 16) * 1rem;
+}
diff --git a/test-track/frontend/src/business/utils/sdk-utils.js b/test-track/frontend/src/business/utils/sdk-utils.js
index 2a17230c18..57fa3b34e1 100644
--- a/test-track/frontend/src/business/utils/sdk-utils.js
+++ b/test-track/frontend/src/business/utils/sdk-utils.js
@@ -1,4 +1,4 @@
-export {operationConfirm, removeGoBackListener, handleCtrlSEvent, byteToSize, resizeTextarea,
+export {operationConfirm, removeGoBackListener, handleCtrlSEvent, byteToSize, sizeToByte, resizeTextarea,
getTypeByFileName, strMapToObj, getUUID, windowPrint, parseTag} from "metersphere-frontend/src/utils";
export {parseCustomFilesForList, getCustomFieldFilter, buildBatchParam} from "metersphere-frontend/src/utils/tableUtils";
export {sortCustomFields, parseCustomField, buildCustomFields} from "metersphere-frontend/src/utils/custom_field";
diff --git a/test-track/frontend/src/business/utils/track-table-header.js b/test-track/frontend/src/business/utils/track-table-header.js
index 85ed7af597..080cd1a89f 100644
--- a/test-track/frontend/src/business/utils/track-table-header.js
+++ b/test-track/frontend/src/business/utils/track-table-header.js
@@ -101,16 +101,16 @@ const TRACK_HEADER = {
//测试用例
TRACK_TEST_CASE: [
{id: 'num', key: '1', label: 'commons.id'},
- {id: 'name', key: '2', label: 'commons.name'},
+ {id: 'name', key: '2', label: 'test_track.case.name'},
{id: 'reviewStatus', key: '3', label: 'test_track.case.status'},
{id: 'tags', key: '4', label: 'commons.tag'},
- {id: 'versionId', key: 'b', label: 'project.version.name', xpack: true},
{id: 'nodePath', key: '5', label: 'test_track.case.module'},
{id: 'updateTime', key: '6', label: 'commons.update_time'},
{id: 'createUser', key: '7', label: 'commons.create_user'},
{id: 'createTime', key: '8', label: 'commons.create_time'},
{id: 'desc', key: '9', label: 'test_track.case.case_desc'},
{id: 'lastExecuteResult', key: '0', label: 'test_track.plan_view.execute_result'},
+ {id: 'versionId', key: 'a', label: 'project.version.name', xpack: true},
],
// 公共用例库
TRACK_PUBLIC_TEST_CASE: [
@@ -148,6 +148,9 @@ const TRACK_HEADER = {
{id: 'createTime', key: '6', label: 'commons.create_time'},
{id: 'endTime', key: '7', label: 'test_track.review.end_time'},
{id: 'tags', key: '8', label: 'commons.tag'},
+ // {id: 'testRate', key: '9', label: 'review.review_rate'},
+ {id: 'caseCount', key: 'a', label: 'api_test.definition.api_case_number'},
+ {id: 'passRate', key: 'b', label: 'commons.pass_rate'},
],
//用例评审-功能用例
TEST_CASE_REVIEW_FUNCTION_TEST_CASE: [
diff --git a/test-track/frontend/src/i18n/lang/en-US.js b/test-track/frontend/src/i18n/lang/en-US.js
index 9a8f1f56f2..fc293cb574 100644
--- a/test-track/frontend/src/i18n/lang/en-US.js
+++ b/test-track/frontend/src/i18n/lang/en-US.js
@@ -32,6 +32,7 @@ const message = {
this_week: "Week ",
load_error: "Loading failure",
no_data: "No data",
+ no_search_data: 'No search data',
},
case_finished_review_pass_tip: "Reviewed cases/All reviewed cases *100%"
},
@@ -63,6 +64,83 @@ const message = {
},
plan: {
batch_delete_tip: "Do you want to continue deleting the test plan?",
+ },
+ table: {
+ all_case_content: "All case"
+ },
+ review: {
+ result_distribution: "Result Distribution",
+ review_pass_rule: 'Review Pass Criteria',
+ review_pass_rule_all: 'All Pass',
+ review_pass_rule_single: 'Single Pass',
+ update_review_reviewer_tip: "Note: Modifying the reviewer will overwrite the reviewers associated with the use case. Please exercise caution!",
+ review_rule_tip: "All pass: Pass only if all reviewers pass <\/br> Single pass: Pass if any reviewers pass",
+ update_review_rule_tip: "Note: Modifying the standard will affect the reviewed use cases, please exercise caution!",
+ review_history: "Review History",
+ no_review_history: "There is no review history",
+ added_comment: "Added comment",
+ un_pass_review_confirm: "Are you sure you don't pass this review",
+ please_input_review_comment: "Please enter the review comments",
+ pass_review_confirm: "Are you sure to pass this review",
+ },
+ case: {
+ use_case_detail: "Use Case Details",
+ associate_test_cases: "Associate Test Cases",
+ dependencies: "Dependence",
+ comment: "Comment",
+ change_record: "Change record",
+ case_name: "Case Name",
+ please_enter_the_case_name: "Please enter the case name",
+ preconditions: "Preconditions",
+ please_enter_preconditions: "Please enter preconditions",
+ attachment: "Attachment",
+ none: "None",
+ commented: "Commented",
+ add_attachment: "Add Attachment",
+ file_size_limit: "Any type of file is supported, and the file size does not exceed 500MB",
+ file_size_out_of_bounds: "File size does not exceed 500MB",
+ upload_at: "upload",
+ relate_at: "relate",
+ add_steps: "Add Steps",
+ copy_this_step: "Copy step",
+ more: "More",
+ follow: "Follow",
+ followed: "Followed",
+ previous_public_case: "Previous",
+ next_public_case: "Next",
+ add_to_public_case: "Add to Common Use Case Library",
+ added_to_public_case: "Added to public use case library",
+ make_comment: "Make comment",
+ please_enter_comment: "Please enter a comment",
+ associated_defect: "Associated",
+ create_defect: "Create defect",
+ associate_existing_defects: "Associate existing defects",
+ search_by_id: "Search by ID or Name",
+ relieve: "Relieve",
+ content_before_change: "Content before change",
+ content_after_change: "Content after change",
+ empty_tip: "Empty",
+ all_case: "All case",
+ all_scenes: "All scenes",
+ all_api: "All interfaces",
+ associated_files:"Associated",
+ empty_file: "No files",
+ upload_file: "Upload files",
+ selected: "Selected",
+ strip: "Strip",
+ clear: "Clear",
+ please_enter_a_text_description: "Please enter a text description",
+ please_enter_expected_results: "Please enter expected results",
+ please_enter_comments: "Please enter comments",
+ disassociate: "Disassociate",
+ saveAndCreate: "Save and New",
+ last_version: "Last version",
+ set_new: "Set new",
+ version_comparison: "Version comparison",
+ compare: "Compare",
+ project: "Project",
+ create_version: "New Version",
+ choose_copy_info: "Select replication information",
}
}
export default {
diff --git a/test-track/frontend/src/i18n/lang/zh-CN.js b/test-track/frontend/src/i18n/lang/zh-CN.js
index 8496b01db5..fc34d07f0f 100644
--- a/test-track/frontend/src/i18n/lang/zh-CN.js
+++ b/test-track/frontend/src/i18n/lang/zh-CN.js
@@ -1,6 +1,6 @@
import el from "element-ui/lib/locale/lang/zh-CN"; // 加载element的内容
import fu from "fit2cloud-ui/src/locale/lang/zh-CN"; // 加载fit2cloud的内容
-import mf from "metersphere-frontend/src/i18n/lang/zh-CN"
+import mf from "metersphere-frontend/src/i18n/lang/zh-CN";
const message = {
home: {
@@ -32,8 +32,9 @@ const message = {
this_week: "本周",
load_error: "加载失败",
no_data: "暂无数据",
+ no_search_data: "没有找到相关内容",
},
- case_finished_review_pass_tip: "已评审通过的案例/所有完成评审的案例*100%"
+ case_finished_review_pass_tip: "已评审通过的案例/所有完成评审的案例*100%",
},
case_review_dashboard: {
case_count: "用例数量",
@@ -59,16 +60,94 @@ const message = {
un_closed_count: "遗留缺陷数",
total_count: "缺陷总数",
case_count: "用例总数",
- }
+ },
},
plan: {
batch_delete_tip: "批量删除测试计划,是否继续?",
- }
-}
+ },
+ table: {
+ all_case_content: "全部用例",
+ },
+ review: {
+ result_distribution: "结果分布",
+ review_pass_rule: "评审通过标准",
+ review_pass_rule_all: "全部通过",
+ review_pass_rule_single: "单人通过",
+ update_review_reviewer_tip: "注:修改评审人,会覆盖已关联用例的评审人,请谨慎操作!",
+ review_rule_tip: "全部通过:所有评审人都通过才通过<\/br>单人通过:任意评审人通过则通过",
+ update_review_rule_tip: "注:修改通过标准会影响已评审过的用例,请谨慎操作!",
+ review_history: "评审历史",
+ no_review_history: "暂无评审历史",
+ added_comment: "添加了评论",
+ un_pass_review_confirm: "确定不通过此评审吗",
+ please_input_review_comment: "请输入评审意见",
+ pass_review_confirm: "确定通过此评审吗",
+ },
+ case: {
+ use_case_detail: "用例详情",
+ associate_test_cases: "关联测试用例",
+ dependencies: "依赖关系",
+ comment: "评论",
+ change_record: "变更记录",
+ case_name: "用例名称",
+ please_enter_the_case_name: "请输入用例名称",
+ preconditions: "前置条件",
+ please_enter_preconditions: "请输入前置条件",
+ attachment: "附件",
+ none: "暂无",
+ commented: "发布了评论",
+ add_attachment: "添加附件",
+ file_size_limit: "支持任意类型文件,文件大小不超过 500MB",
+ file_size_out_of_bounds: "文件大小不超过 500MB",
+ upload_at: "上传于",
+ relate_at: "关联于",
+ add_steps: "添加步骤",
+ copy_this_step: "复制该步骤",
+ more: "更多",
+ follow: "关注",
+ followed: "已关注",
+ previous_public_case: "上一条",
+ next_public_case: "下一条",
+ add_to_public_case: "添加到公共用例库",
+ added_to_public_case: "已添加到公共用例库",
+ make_comment: "发表评论",
+ please_enter_comment: "请输入评论",
+ associated_defect: "关联缺陷",
+ create_defect: "创建缺陷",
+ associate_existing_defects: "关联现有缺陷",
+ search_by_id: "通过ID或名称搜索",
+ relieve: "解除依赖",
+ content_before_change: "变更前内容",
+ content_after_change: "变更后内容",
+ empty_tip: "空值",
+ all_case: "全部用例",
+ all_scenes: "全部场景",
+ all_api: "全部接口",
+ associated_files:"关联文件",
+ empty_file: "暂无文件",
+ upload_file: "上传文件",
+ selected: "已选择",
+ strip: "条",
+ clear: "清空",
+ please_enter_a_text_description: "请输入文本描述",
+ please_enter_expected_results: "请输入预期结果",
+ please_enter_comments: "请输入备注",
+ disassociate: "取消关联",
+ saveAndCreate: "保存并新建",
+ last_version: "最新版本",
+ set_new: "置新",
+ version_comparison: "版本对比",
+ compare: "对比",
+ project: "项目",
+ create_version: "新建版本",
+ choose_copy_info: "选择复制信息",
+
+ },
+};
export default {
...el,
...fu,
...mf,
- ...message
+ ...message,
};
diff --git a/test-track/frontend/src/i18n/lang/zh-TW.js b/test-track/frontend/src/i18n/lang/zh-TW.js
index 01df8266e2..c8ae5c8575 100644
--- a/test-track/frontend/src/i18n/lang/zh-TW.js
+++ b/test-track/frontend/src/i18n/lang/zh-TW.js
@@ -32,6 +32,7 @@ const message = {
this_week: "本週",
load_error: "加載失敗",
no_data: "暫無數據",
+ no_search_data: '沒有找到相關內容',
},
case_finished_review_pass_tip: "已評審通過的案例/所有完成評審的案例*100%"
},
@@ -63,6 +64,83 @@ const message = {
},
plan: {
batch_delete_tip: "批量刪除測試計劃,是否繼續?",
+ },
+ table: {
+ all_case_content: "全部用例"
+ },
+ review: {
+ result_distribution: "結果分布",
+ review_pass_rule: '評審通過標準',
+ review_pass_rule_all: '全部通過',
+ review_pass_rule_single: '單人通過',
+ update_review_reviewer_tip: "註:修改評審人,會覆蓋已關聯用例的評審人,請謹慎操作!",
+ review_rule_tip: "全部通過:所有評審人都通過才通過<\/br>單人通過:任意評審人通過則通過",
+ update_review_rule_tip: "註:修改通過標準會影響已評審過的用例,請謹慎操作!",
+ review_history: "評審歷史",
+ no_review_history: "暫無評審歷史",
+ added_comment: "添加了評論",
+ un_pass_review_confirm: "確定不通過此評審嗎",
+ please_input_review_comment: "請輸入評審意見",
+ pass_review_confirm: "確定通過此評審嗎",
+ },
+ case: {
+ use_case_detail: "用例詳情",
+ associate_test_cases: "關聯測試用例",
+ dependencies: "依賴關繫",
+ comment: "評論",
+ change_record: "變更記錄",
+ case_name: "用例名稱",
+ please_enter_the_case_name: "請輸入用例名稱",
+ preconditions: "前置條件",
+ please_enter_preconditions: "請輸入前置條件",
+ attachment: "附件",
+ none: "暫無",
+ commented: "髮佈了評論",
+ add_attachment: "添加附件",
+ file_size_limit: "支持任意類型文件,文件大小不超過 500MB",
+ file_size_out_of_bounds: "文件大小不超過 500MB",
+ upload_at: "上傳於",
+ relate_at: "關聯於",
+ add_steps: "添加步骤",
+ copy_this_step: "複製該步驟",
+ more: "更多",
+ follow: "關注",
+ followed: "已關注",
+ previous_public_case: "上一條",
+ next_public_case: "下一條",
+ add_to_public_case: "添加到公共用例庫",
+ added_to_public_case: "已添加到公共用例庫",
+ make_comment: "髮表評論",
+ please_enter_comment: "請輸入評論",
+ associated_defect: "關聯缺陷",
+ create_defect: "創建缺陷",
+ associate_existing_defects: "關聯現有缺陷",
+ search_by_id: "通過ID或名稱蒐索",
+ relieve: "解除依賴",
+ content_before_change: "變更前內容",
+ content_after_change: "變更後內容",
+ empty_tip: "空值",
+ all_case: "全部用例",
+ all_scenes: "全部場景",
+ all_api: "全部接口",
+ associated_files:"關聯文件",
+ empty_file: "暫無文件",
+ upload_file: "上傳文件",
+ selected: "已選擇",
+ strip: "條",
+ clear: "清空",
+ please_enter_a_text_description: "請輸入文本描述",
+ please_enter_expected_results: "請輸入預期結果",
+ please_enter_comments: "請輸入備注",
+ disassociate: "取消關联",
+ saveAndCreate: "保存並新建",
+ last_version: "最新版本",
+ set_new: "置新",
+ version_comparison: "版本對比",
+ compare: "對比",
+ project: "項目",
+ create_version: "新建版本",
+ choose_copy_info: "選擇復製信息",
}
}
diff --git a/test-track/frontend/src/main.js b/test-track/frontend/src/main.js
index 3b4a6d90ec..379dc9a9b8 100644
--- a/test-track/frontend/src/main.js
+++ b/test-track/frontend/src/main.js
@@ -25,6 +25,13 @@ import CKEditor from '@ckeditor/ckeditor5-vue';
Vue.config.productionTip = false
+function calcFontSize(){
+ const w = document.body.clientWidth
+ document.documentElement.style.fontSize = 16 * (w / 1440) + 'px'
+}
+calcFontSize()
+window.addEventListener('resize',calcFontSize)
+
const pinia = createPinia()
pinia.use(PersistedState)//开启缓存,存储在localstorage
@@ -49,7 +56,7 @@ Vue.use(VueClipboard);
Vue.use(CKEditor);
let instance = null;
-
+Vue.prototype._i18n = i18n;
function render(props = {}) {
const {container, eventBus = new Vue()} = props;
// 添加全局事件总线
diff --git a/test-track/frontend/src/router/modules/track.js b/test-track/frontend/src/router/modules/track.js
index fbcb1cea1a..257640d858 100644
--- a/test-track/frontend/src/router/modules/track.js
+++ b/test-track/frontend/src/router/modules/track.js
@@ -14,7 +14,7 @@ export default {
{
path: 'case/create',
name: 'testCaseCreate',
- component: () => import('@/business/case/TestCase'),
+ component: () => import('@/business/case/components/TestCaseEdit'),
},
{
path: 'case/:projectId',
@@ -29,7 +29,7 @@ export default {
{
path: 'case/edit/:caseId',
name: 'testCaseEdit',
- component: () => import('@/business/case/TestCase'),
+ component: () => import('@/business/case/components/TestCaseEdit'),
},
{
path: 'testPlan/reportList',
@@ -56,11 +56,6 @@ export default {
name: "planViewEdit",
component: () => import('@/business/plan/view/TestPlanView')
},
- // {
- // path: "project/:type",
- // name: "trackProject",
- // component: MsProject
- // },
{
path: "review/:type",
name: "testCaseReview",
diff --git a/workstation/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseReviewMapper.xml b/workstation/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseReviewMapper.xml
index e544edb7c6..9fe6ad79ce 100644
--- a/workstation/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseReviewMapper.xml
+++ b/workstation/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseReviewMapper.xml
@@ -75,7 +75,7 @@
and test_case_review.name like CONCAT('%', #{request.name},'%')
- and test_case_review.id in (select test_case_review_users.review_id from test_case_review_users where test_case_review_users.user_id = #{request.reviewerId})
+ and test_case_review.id in (select test_case_review_test_case_users.review_id from test_case_review_test_case_users where test_case_review_test_case_users.user_id = #{request.reviewerId})
AND project.workspace_id = #{request.workspaceId}
@@ -126,7 +126,7 @@
#{projectId}
and tr.status in ('Prepare','Underway')
- and tr.id in (select test_case_review_users.review_id from test_case_review_users where test_case_review_users.user_id = #{userId,jdbcType=VARCHAR})
+ and tr.id in (select test_case_review_test_case_users.review_id from test_case_review_test_case_users where test_case_review_test_case_users.user_id = #{userId,jdbcType=VARCHAR})
diff --git a/workstation/frontend/src/business/dashboard/components/MyCaseCard.vue b/workstation/frontend/src/business/dashboard/components/MyCaseCard.vue
index ecdef01344..cb82781466 100644
--- a/workstation/frontend/src/business/dashboard/components/MyCaseCard.vue
+++ b/workstation/frontend/src/business/dashboard/components/MyCaseCard.vue
@@ -13,7 +13,7 @@
+ src="/assets/module/figma/icon_none.svg"/>
{{ $t('workstation.creation_case_tip') }} {{$t('permission.project_track_case.create') }}
diff --git a/workstation/frontend/src/business/dashboard/components/MyFlawCard.vue b/workstation/frontend/src/business/dashboard/components/MyFlawCard.vue
index f3ebfa298b..c94d54b7f8 100644
--- a/workstation/frontend/src/business/dashboard/components/MyFlawCard.vue
+++ b/workstation/frontend/src/business/dashboard/components/MyFlawCard.vue
@@ -16,7 +16,7 @@
+ src="/assets/module/figma/icon_none.svg"/>
{{ $t('workstation.creation_issue_tip') }} {{$t('permission.project_track_issue.create') }}