feat(版本对比): 功能用例版本对比加版本名称

--user=郭雨琦 功能用例版本对比加版本名称
This commit is contained in:
guoyuqi 2022-01-19 13:11:16 +08:00 committed by song-tianyang
parent 42b5a0f7d8
commit a1df5c2e80
9 changed files with 219 additions and 192 deletions

View File

@ -49,9 +49,11 @@
<el-dialog
:fullscreen="true"
:visible.sync="dialogVisible"
:destroy-on-close="true"
width="100%"
>
<dubbo-api-version-diff
v-if="dialogVisible"
:old-data="basisData"
:show-follow="showFollow"
:new-data="newData"

View File

@ -137,9 +137,11 @@
<el-dialog
:fullscreen="true"
:visible.sync="dialogVisible"
:destroy-on-close="true"
width="100%"
>
<http-api-version-diff
v-if="dialogVisible"
:old-data="httpForm"
:show-follow="showFollow"
:new-data="newData"

View File

@ -50,9 +50,11 @@
<el-dialog
:fullscreen="true"
:visible.sync="dialogVisible"
:destroy-on-close="true"
width="100%"
>
<s-q-l-api-version-diff
v-if="dialogVisible"
:old-data="basisData"
:show-follow="showFollow"
:new-data="newData"

View File

@ -77,9 +77,11 @@
<el-dialog
:fullscreen="true"
:visible.sync="dialogVisible"
:destroy-on-close="true"
width="100%"
>
<t-c-p-api-version-diff
v-if="dialogVisible"
:old-data="basisData"
:show-follow="showFollow"
:new-data="newData"

View File

@ -222,7 +222,7 @@ export default{
},
mounted() {
this.$nextTick(function () {
setTimeout(this.getDiff,(this.$refs.old.$children.length+1)*1000)
setTimeout(this.getDiff,(this.$refs.old.$children.length-2)*1000)
})
}

View File

@ -79,9 +79,10 @@
<el-dialog
:fullscreen="true"
:visible.sync="dialogVisible"
:destroy-on-close="true"
width="100%"
>
<diff-version :old-data="oldData" :show-follow="showFollow" :new-data="newData" :new-show-follow="newShowFollow" ></diff-version>
<diff-version v-if="dialogVisible" :old-data="oldData" :show-follow="showFollow" :new-data="newData" :new-show-follow="newShowFollow" ></diff-version>
</el-dialog>
</ms-main-container>

View File

@ -146,15 +146,12 @@
<el-dialog
:fullscreen="true"
:visible.sync="dialogVisible"
:destroy-on-close="true"
width="100%"
>
<test-case-version-diff :old-data="oldData" :new-data="newData"
<test-case-version-diff v-if="dialogVisible" :old-data="oldData" :new-data="newData"
:tree-nodes="treeNodes"></test-case-version-diff>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible=false">{{this.$t('commons.cancel')}}</el-button>
<el-button type="primary">{{this.$t('commons.confirm')}}</el-button>
</span>
</el-dialog>
</div>
</el-card>
@ -997,6 +994,11 @@ export default {
if (data[0] && data[1]) {
that.newData = data[0].data.data;
that.oldData = data[1].data.data;
let testCase = this.versionData.filter(v => v.versionId === this.currentTestCaseInfo.versionId)[0];
that.newData.versionName = response.data.versionName
that.oldData.versionName = testCase.versionName
that.newData.userName = response.data.createName
that.oldData.userName = testCase.createName
this.setSpecialPropForCompare(that);
that.dialogVisible = true;
}

View File

@ -130,17 +130,15 @@
<el-dialog
:fullscreen="true"
:visible.sync="dialogVisible"
:destroy-on-close="true"
width="100%"
>
<test-case-version-diff :old-data="oldData" :new-data="newData"
<test-case-version-diff v-if="dialogVisible" :old-data="oldData" :new-data="newData"
:tree-nodes="treeNodes" :is-public="publicEnable"></test-case-version-diff>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible=false">{{this.$t('commons.cancel')}}</el-button>
<el-button type="primary">{{this.$t('commons.confirm')}}</el-button>
</span>
</el-dialog>
</div>
<batch-move ref="testBatchMove" :public-enable="publicEnable"
@copyPublic="copyPublic"/>
@ -948,6 +946,11 @@ export default {
if (data[0] && data[1]) {
that.newData = data[0].data.data;
that.oldData = data[1].data.data;
let testCase = this.versionData.filter(v => v.versionId === this.currentTestCaseInfo.versionId)[0];
that.newData.versionName = response.data.versionName
that.oldData.versionName = testCase.versionName
that.newData.userName = response.data.createName
that.oldData.userName = testCase.createName
this.setSpecialPropForCompare(that);
that.dialogVisible = true;
}

View File

@ -1,218 +1,227 @@
<template>
<div class="compare-class">
<el-card style="width: 50%;" ref="old">
<el-form :model="oldData" ref="old" class="case-form" v-loading="oldLoading">
<ms-form-divider :title="$t('test_track.plan_view.base_info')"/>
<el-row>
<el-col :span="8">
<el-form-item
:placeholder="$t('test_track.case.input_name')"
:label="$t('test_track.case.name')"
:label-width="oldData.formLabelWidth"
prop="name">
<el-input :disabled="oldData.readOnly" v-model="oldData.name" size="small"
class="ms-case-input"></el-input>
</el-form-item>
</el-col>
<div>
<el-row>
<el-col :span="12">
<el-tag>当前{{oldData.versionName }}</el-tag><span style="margin-left: 10px">{{oldData.userName}}</span><span style="margin-left: 10px">{{oldData.updateTime | timestampFormatDate }}</span>
</el-col>
<el-col :span="12">
<el-tag>{{ newData.versionName }}</el-tag><span style="margin-left: 10px">{{newData.userName}}</span><span style="margin-left: 10px">{{newData.updateTime | timestampFormatDate }}</span>
</el-col>
</el-row>
<div class="compare-class" v-loading="isReloadData">
<el-card style="width: 50%;" ref="old">
<el-form :model="oldData" ref="old" class="case-form" v-loading="oldLoading">
<ms-form-divider :title="$t('test_track.plan_view.base_info')"/>
<el-row>
<el-col :span="8">
<el-form-item
:placeholder="$t('test_track.case.input_name')"
:label="$t('test_track.case.name')"
:label-width="oldData.formLabelWidth"
prop="name">
<el-input :disabled="oldData.readOnly" v-model="oldData.name" size="small"
class="ms-case-input"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="$t('test_track.case.module')" :label-width="oldData.formLabelWidth" prop="module" v-if="!isPublic">
<ms-select-tree :disabled="oldData.readOnly" :data="treeNodes" :defaultKey="oldData.module"
:obj="moduleObj"
@getValue="setModule" clearable checkStrictly size="small"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="$t('test_track.case.module')" :label-width="oldData.formLabelWidth" prop="module" v-if="!isPublic">
<ms-select-tree :disabled="oldData.readOnly" :data="treeNodes" :defaultKey="oldData.module"
:obj="moduleObj"
@getValue="setModule" clearable checkStrictly size="small"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="$t('test_track.case.project')" :label-width="oldData.formLabelWidth" prop="projectId"
v-if="isPublic" >
<el-select v-model="oldData.projectId" filterable clearable :disabled="oldData.readOnly">
<el-option v-for="item in projectList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="$t('test_track.case.project')" :label-width="oldData.formLabelWidth" prop="projectId"
v-if="isPublic" >
<el-select v-model="oldData.projectId" filterable clearable :disabled="oldData.readOnly">
<el-option v-for="item in projectList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="$t('commons.tag')" :label-width="oldData.formLabelWidth" prop="tag">
<ms-input-tag :read-only="oldData.readOnly" :currentScenario="oldData" v-if="showInputTag" ref="tag"
class="ms-case-input"/>
</el-form-item>
</el-col>
</el-row>
<el-col :span="8">
<el-form-item :label="$t('commons.tag')" :label-width="oldData.formLabelWidth" prop="tag">
<ms-input-tag :read-only="oldData.readOnly" :currentScenario="oldData" v-if="showInputTag" ref="tag"
class="ms-case-input"/>
</el-form-item>
</el-col>
</el-row>
<!-- 自定义字段 -->
<el-form v-if="oldData.isFormAlive" :model="oldData.customFieldForm" :rules="oldData.customFieldRules"
ref="oldCustomFieldForm"
class="case-form">
<custom-filed-form-item :form="oldData.customFieldForm" :form-label-width="oldData.formLabelWidth"
:issue-template="oldData.testCaseTemplate" :is-public="isPublic"/>
</el-form>
<!-- 自定义字段 -->
<el-form v-if="oldData.isFormAlive" :model="oldData.customFieldForm" :rules="oldData.customFieldRules"
ref="oldCustomFieldForm"
class="case-form">
<custom-filed-form-item :form="oldData.customFieldForm" :form-label-width="oldData.formLabelWidth"
:issue-template="oldData.testCaseTemplate" :is-public="isPublic"/>
</el-form>
<el-row v-if="oldData.isCustomNum">
<el-col :span="7">
<el-form-item label="ID" :label-width="oldData.formLabelWidth" prop="customNum">
<el-input :disabled="oldData.readOnly" v-model.trim="oldData.customNum" size="small"
class="ms-case-input"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="oldData.isCustomNum">
<el-col :span="7">
<el-form-item label="ID" :label-width="oldData.formLabelWidth" prop="customNum">
<el-input :disabled="oldData.readOnly" v-model.trim="oldData.customNum" size="small"
class="ms-case-input"></el-input>
</el-form-item>
</el-col>
</el-row>
<ms-form-divider :title="$t('test_track.case.step_info')"/>
<ms-form-divider :title="$t('test_track.case.step_info')"/>
<form-rich-text-item :disabled="oldData.readOnly" :label-width="oldData.formLabelWidth"
:title="$t('test_track.case.prerequisite')" :data="oldData" prop="prerequisite"/>
<form-rich-text-item :disabled="oldData.readOnly" :label-width="oldData.formLabelWidth"
:title="$t('test_track.case.prerequisite')" :data="oldData" prop="prerequisite"/>
<step-change-item :label-width="oldData.formLabelWidth" :form="oldData"/>
<form-rich-text-item :disabled="oldData.readOnly" :label-width="oldData.formLabelWidth"
v-if="oldData.stepModel === 'TEXT'"
:title="$t('test_track.case.step_desc')" :data="oldData" prop="stepDescription"/>
<form-rich-text-item :disabled="oldData.readOnly" :label-width="oldData.formLabelWidth"
v-if="oldData.stepModel === 'TEXT'"
:title="$t('test_track.case.expected_results')" :data="oldData" prop="expectedResult"/>
<step-change-item :label-width="oldData.formLabelWidth" :form="oldData"/>
<form-rich-text-item :disabled="oldData.readOnly" :label-width="oldData.formLabelWidth"
v-if="oldData.stepModel === 'TEXT'"
:title="$t('test_track.case.step_desc')" :data="oldData" prop="stepDescription"/>
<form-rich-text-item :disabled="oldData.readOnly" :label-width="oldData.formLabelWidth"
v-if="oldData.stepModel === 'TEXT'"
:title="$t('test_track.case.expected_results')" :data="oldData" prop="expectedResult"/>
<test-case-step-item :label-width="oldData.formLabelWidth"
v-if="oldData.stepModel === 'STEP' || !oldData.stepModel"
:form="oldData" :read-only="oldData.readOnly"/>
<test-case-step-item :label-width="oldData.formLabelWidth"
v-if="oldData.stepModel === 'STEP' || !oldData.stepModel"
:form="oldData" :read-only="oldData.readOnly"/>
<ms-form-divider :title="$t('test_track.case.other_info')"/>
<ms-form-divider :title="$t('test_track.case.other_info')"/>
<test-case-edit-other-info :read-only="oldData.readOnly" :project-id="projectIds" :form="oldData"
:label-width="oldData.formLabelWidth" :case-id="oldData.id" ref="oldOtherInfo"/>
<test-case-edit-other-info :read-only="oldData.readOnly" :project-id="projectIds" :form="oldData"
:label-width="oldData.formLabelWidth" :case-id="oldData.id" ref="oldOtherInfo"/>
<el-row style="margin-top: 10px">
<el-col :span="20" :offset="1">{{ $t('test_track.review.comment') }}:
</el-col>
</el-row>
<el-row>
<el-col :span="20" :offset="1">
<el-row style="margin-top: 10px">
<el-col :span="20" :offset="1">{{ $t('test_track.review.comment') }}:
</el-col>
</el-row>
<el-row>
<el-col :span="20" :offset="1">
<review-comment-item v-for="(comment,index) in oldData.comments"
:key="index"
:comment="comment"
@refresh="getComments" api-url="/test/case"/>
<div v-if="oldData.comments && oldData.comments.length === 0" style="text-align: center">
<i class="el-icon-chat-line-square" style="font-size: 15px;color: #8a8b8d;">
<review-comment-item v-for="(comment,index) in oldData.comments"
:key="index"
:comment="comment"
@refresh="getComments" api-url="/test/case"/>
<div v-if="oldData.comments && oldData.comments.length === 0" style="text-align: center">
<i class="el-icon-chat-line-square" style="font-size: 15px;color: #8a8b8d;">
<span style="font-size: 15px; color: #8a8b8d;">
{{ $t('test_track.comment.no_comment') }}
</span>
</i>
</div>
</el-col>
</el-row>
<test-case-comment :case-id="oldData.id"
@getComments="getComments" ref="testCaseComment"/>
</i>
</div>
</el-col>
</el-row>
<test-case-comment :case-id="oldData.id"
@getComments="getComments" ref="testCaseComment"/>
</el-form>
</el-card>
<el-card style="width: 50%;" ref="new">
<el-form :model="newData" ref="new" class="case-form" v-loading="newLoading">
<ms-form-divider :title="$t('test_track.plan_view.base_info')"/>
<el-row>
<el-col :span="8">
<el-form-item
:placeholder="$t('test_track.case.input_name')"
:label="$t('test_track.case.name')"
:label-width="newData.formLabelWidth"
prop="name">
<el-input :disabled="newData.readOnly" v-model="newData.name" size="small"
class="ms-case-input"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="$t('test_track.case.module')" :label-width="newData.formLabelWidth" prop="module" v-if="!isPublic">
<ms-select-tree :disabled="newData.readOnly" :data="treeNodes" :defaultKey="newData.module"
:obj="moduleObj"
@getValue="setModule" clearable checkStrictly size="small"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="$t('test_track.case.project')" :label-width="newData.formLabelWidth" prop="projectId"
v-if="isPublic" >
<el-select v-model="newData.projectId" filterable clearable :disabled="newData.readOnly">
<el-option v-for="item in projectList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="$t('commons.tag')" :label-width="newData.formLabelWidth" prop="tag">
<ms-input-tag :read-only="newData.readOnly" :currentScenario="newData" v-if="showInputTag" ref="tag"
class="ms-case-input"/>
</el-form-item>
</el-col>
</el-row>
<!-- 自定义字段 -->
<el-form v-if="newData.isFormAlive" :model="newData.customFieldForm" :rules="newData.customFieldRules"
ref="newCustomFieldForm"
class="case-form">
<custom-filed-form-item :form="newData.customFieldForm" :form-label-width="newData.formLabelWidth"
:issue-template="newData.testCaseTemplate" :is-public="isPublic"/>
</el-form>
</el-card>
<el-card style="width: 50%;" ref="new">
<el-form :model="newData" ref="new" class="case-form" v-loading="newLoading">
<ms-form-divider :title="$t('test_track.plan_view.base_info')"/>
<el-row>
<el-col :span="8">
<el-form-item
:placeholder="$t('test_track.case.input_name')"
:label="$t('test_track.case.name')"
:label-width="newData.formLabelWidth"
prop="name">
<el-input :disabled="newData.readOnly" v-model="newData.name" size="small"
class="ms-case-input"></el-input>
</el-form-item>
</el-col>
<el-row v-if="newData.isCustomNum">
<el-col :span="7">
<el-form-item label="ID" :label-width="newData.formLabelWidth" prop="customNum">
<el-input :disabled="newData.readOnly" v-model.trim="newData.customNum" size="small"
class="ms-case-input"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-col :span="8">
<el-form-item :label="$t('test_track.case.module')" :label-width="newData.formLabelWidth" prop="module" v-if="!isPublic">
<ms-select-tree :disabled="newData.readOnly" :data="treeNodes" :defaultKey="newData.module"
:obj="moduleObj"
@getValue="setModule" clearable checkStrictly size="small"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="$t('test_track.case.project')" :label-width="newData.formLabelWidth" prop="projectId"
v-if="isPublic" >
<el-select v-model="newData.projectId" filterable clearable :disabled="newData.readOnly">
<el-option v-for="item in projectList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="$t('commons.tag')" :label-width="newData.formLabelWidth" prop="tag">
<ms-input-tag :read-only="newData.readOnly" :currentScenario="newData" v-if="showInputTag" ref="tag"
class="ms-case-input"/>
</el-form-item>
</el-col>
</el-row>
<!-- 自定义字段 -->
<el-form v-if="newData.isFormAlive" :model="newData.customFieldForm" :rules="newData.customFieldRules"
ref="newCustomFieldForm"
class="case-form">
<custom-filed-form-item :form="newData.customFieldForm" :form-label-width="newData.formLabelWidth"
:issue-template="newData.testCaseTemplate" :is-public="isPublic"/>
</el-form>
<el-row v-if="newData.isCustomNum">
<el-col :span="7">
<el-form-item label="ID" :label-width="newData.formLabelWidth" prop="customNum">
<el-input :disabled="newData.readOnly" v-model.trim="newData.customNum" size="small"
class="ms-case-input"></el-input>
</el-form-item>
</el-col>
</el-row>
<ms-form-divider :title="$t('test_track.case.step_info')"/>
<ms-form-divider :title="$t('test_track.case.step_info')"/>
<form-rich-text-item :disabled="newData.readOnly" :label-width="newData.formLabelWidth"
:title="$t('test_track.case.prerequisite')" :data="newData" prop="prerequisite"/>
<form-rich-text-item :disabled="newData.readOnly" :label-width="newData.formLabelWidth"
:title="$t('test_track.case.prerequisite')" :data="newData" prop="prerequisite"/>
<step-change-item :label-width="newData.formLabelWidth" :form="newData"/>
<form-rich-text-item :disabled="newData.readOnly" :label-width="newData.formLabelWidth"
v-if="newData.stepModel === 'TEXT'"
:title="$t('test_track.case.step_desc')" :data="newData" prop="stepDescription"/>
<form-rich-text-item :disabled="newData.readOnly" :label-width="newData.formLabelWidth"
v-if="newData.stepModel === 'TEXT'"
:title="$t('test_track.case.expected_results')" :data="newData" prop="expectedResult"/>
<step-change-item :label-width="newData.formLabelWidth" :form="newData"/>
<form-rich-text-item :disabled="newData.readOnly" :label-width="newData.formLabelWidth"
v-if="newData.stepModel === 'TEXT'"
:title="$t('test_track.case.step_desc')" :data="newData" prop="stepDescription"/>
<form-rich-text-item :disabled="newData.readOnly" :label-width="newData.formLabelWidth"
v-if="newData.stepModel === 'TEXT'"
:title="$t('test_track.case.expected_results')" :data="newData" prop="expectedResult"/>
<test-case-step-item :label-width="newData.formLabelWidth"
v-if="newData.stepModel === 'STEP' || !newData.stepModel"
:form="newData" :read-only="newData.readOnly"/>
<test-case-step-item :label-width="newData.formLabelWidth"
v-if="newData.stepModel === 'STEP' || !newData.stepModel"
:form="newData" :read-only="newData.readOnly"/>
<ms-form-divider :title="$t('test_track.case.other_info')"/>
<ms-form-divider :title="$t('test_track.case.other_info')"/>
<test-case-edit-other-info :read-only="newData.readOnly" :project-id="projectIds" :form="newData"
:label-width="newData.formLabelWidth" :case-id="newData.id" ref="newOtherInfo"/>
<test-case-edit-other-info :read-only="newData.readOnly" :project-id="projectIds" :form="newData"
:label-width="newData.formLabelWidth" :case-id="newData.id" ref="newOtherInfo"/>
<el-row style="margin-top: 10px">
<el-col :span="20" :offset="1">{{ $t('test_track.review.comment') }}:
</el-col>
</el-row>
<el-row>
<el-col :span="20" :offset="1">
<el-row style="margin-top: 10px">
<el-col :span="20" :offset="1">{{ $t('test_track.review.comment') }}:
</el-col>
</el-row>
<el-row>
<el-col :span="20" :offset="1">
<review-comment-item v-for="(comment,index) in newData.comments"
:key="index"
:comment="comment"
@refresh="getComments" api-url="/test/case"/>
<div v-if="newData.comments && newData.comments.length === 0" style="text-align: center">
<i class="el-icon-chat-line-square" style="font-size: 15px;color: #8a8b8d;">
<review-comment-item v-for="(comment,index) in newData.comments"
:key="index"
:comment="comment"
@refresh="getComments" api-url="/test/case"/>
<div v-if="newData.comments && newData.comments.length === 0" style="text-align: center">
<i class="el-icon-chat-line-square" style="font-size: 15px;color: #8a8b8d;">
<span style="font-size: 15px; color: #8a8b8d;">
{{ $t('test_track.comment.no_comment') }}
</span>
</i>
</div>
</el-col>
</el-row>
<test-case-comment :case-id="newData.id"
@getComments="getComments" ref="testCaseComment"/>
</i>
</div>
</el-col>
</el-row>
<test-case-comment :case-id="newData.id"
@getComments="getComments" ref="testCaseComment"/>
</el-form>
</el-form>
</el-card>
<button @click="getDiff"></button>
</el-card>
</div>
</div>
</template>
<script>
@ -301,6 +310,7 @@ export default {
maintainerOptions: [],
oldLoading: null,
newLoading: null,
isReloadData:true
};
},
mounted() {
@ -311,13 +321,16 @@ export default {
this.getComments("oldData");
this.open("oldData");
this.open("newData");
this.$nextTick(function () {
setTimeout(this.getDiff,(this.$refs.old.$children.length+1)*1000)
})
},
methods: {
getDiff() {
let oldVnode = this.$refs.old
let vnode = this.$refs.new
//oldVnode.style.backgroundColor = "rgb(241,200,196)";
diff(oldVnode, vnode);
this.isReloadData = false
},
alert: alert,
currentUser: () => {