实现测试用例编排拖曳功能、解决用例编排步骤引入接口后参数没有带入以及无法删除的问题、解决点击执行用例调整用例编排页面的问题

This commit is contained in:
liangdaliang
2025-03-05 18:00:47 +08:00
parent 7f4a845cfe
commit b76a6a16e9
5 changed files with 45 additions and 15 deletions

View File

@@ -60,6 +60,9 @@ public class TestCaseStepController extends BaseController {
@Log(title = "步骤", businessType = BusinessType.UPDATE) @Log(title = "步骤", businessType = BusinessType.UPDATE)
@PostMapping("/edit") @PostMapping("/edit")
public AjaxResult edit(@RequestBody TestCaseStep testCaseStep) { public AjaxResult edit(@RequestBody TestCaseStep testCaseStep) {
if (testCaseStep.getId() == null) {
return null;
}
return toAjax(testCaseStepService.updateTestCaseStep(testCaseStep)); return toAjax(testCaseStepService.updateTestCaseStep(testCaseStep));
} }

View File

@@ -229,15 +229,22 @@ export default {
value: "", value: "",
}] }]
} }
if (row.param && JSON.parse(row.param).length) { if (row.param && JSON.parse(row.param).length) {
this.form.requestParam = JSON.parse(row.param); this.form.requestParams = JSON.parse(row.param);
this.form.requestParam.push([{}]) this.form.requestParams.push([{}])
} else { } else {
this.form.requestParam = [{ this.form.requestParams = [{
key: "", key: "",
value: "", value: "",
}] }]
} }
if (row.body) {
this.form.requestBody = row.body;
} else {
this.form.requestBody = '';
}
} }
}, },
apiHttpIdHandleChange(e) { apiHttpIdHandleChange(e) {
@@ -271,16 +278,16 @@ export default {
}, },
handleTableEdit(e, flag, scope) { handleTableEdit(e, flag, scope) {
if (flag === "header") { if (flag === "header") {
if (e && this.form.header.length === scope.$index + 1) { if (e && this.form.requestHeader.length === scope.$index + 1) {
this.form.header.push({ this.form.requestHeader.push({
key: "", key: "",
value: "" value: ""
}) })
} }
} }
if (flag === "param") { if (flag === "param") {
if (e && this.form.param.length === scope.$index + 1) { if (e && this.form.requestParams.length === scope.$index + 1) {
this.form.param.push({ this.form.requestParams.push({
key: "", key: "",
value: "" value: ""
}) })
@@ -289,10 +296,10 @@ export default {
}, },
handleDelete(flag, scope) { handleDelete(flag, scope) {
if (flag === "header") { if (flag === "header") {
this.form.header.splice(scope.$index, 1) this.form.requestHeader.splice(scope.$index, 1)
} }
if (flag === "param") { if (flag === "param") {
this.form.param.splice(scope.$index, 1) this.form.requestParams.splice(scope.$index, 1)
} }
if (flag === "assignment") { if (flag === "assignment") {
this.form.assignment.splice(scope.$index, 1) this.form.assignment.splice(scope.$index, 1)

View File

@@ -8,7 +8,10 @@
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</div> </div>
<div>
</div>
<el-collapse v-model="activeName" accordion v-if="list && list.length"> <el-collapse v-model="activeName" accordion v-if="list && list.length">
<draggable v-model="list" @end="onDragEnd">
<el-collapse-item :name="index" v-for="(item, index) in list" :key="index" v-if="!item.parentId"> <el-collapse-item :name="index" v-for="(item, index) in list" :key="index" v-if="!item.parentId">
<template slot="title"> <template slot="title">
<el-button size="mini" plain type="warning" icon="el-icon-rank" circle style="margin-right: 12px"/> <el-button size="mini" plain type="warning" icon="el-icon-rank" circle style="margin-right: 12px"/>
@@ -16,6 +19,7 @@
<el-tag v-if="item.name" effect="plain" style="width: 240px;text-align: center;margin-right: 12px;" type="info">{{ item.name }}</el-tag> <el-tag v-if="item.name" effect="plain" style="width: 240px;text-align: center;margin-right: 12px;" type="info">{{ item.name }}</el-tag>
<el-tag v-if="item.datasourceId" effect="plain" style="width: 240px;text-align: center;margin-right: 12px;" type="info">{{ datasourceList.findLast(t => t.id === item.datasourceId).name }}</el-tag> <el-tag v-if="item.datasourceId" effect="plain" style="width: 240px;text-align: center;margin-right: 12px;" type="info">{{ datasourceList.findLast(t => t.id === item.datasourceId).name }}</el-tag>
<el-tag v-if="item.requestUrl" effect="plain" style="text-align: center;margin-right: 12px;" type="success">{{ item.requestUrl }}</el-tag> <el-tag v-if="item.requestUrl" effect="plain" style="text-align: center;margin-right: 12px;" type="success">{{ item.requestUrl }}</el-tag>
<el-tag effect="plain" style="text-align: center;margin-right: 12px;">{{ index + 1 }}</el-tag>
</template> </template>
<el-button size="mini" type="text" @click="handleDel(index)" style="float: right">删除</el-button> <el-button size="mini" type="text" @click="handleDel(index)" style="float: right">删除</el-button>
<page1 v-if="item.type == 1" :form="item" :hosts="hosts"/> <page1 v-if="item.type == 1" :form="item" :hosts="hosts"/>
@@ -23,6 +27,7 @@
<page3 v-if="item.type == 3" :form="item" :list="list" :hosts="hosts" :datasourceList="datasourceList"/> <page3 v-if="item.type == 3" :form="item" :list="list" :hosts="hosts" :datasourceList="datasourceList"/>
<page4 v-if="item.type == 4" :form="item" :list="list" :hosts="hosts" :datasourceList="datasourceList"/> <page4 v-if="item.type == 4" :form="item" :list="list" :hosts="hosts" :datasourceList="datasourceList"/>
</el-collapse-item> </el-collapse-item>
</draggable>
</el-collapse> </el-collapse>
<el-empty v-else/> <el-empty v-else/>
<div class="footer"> <div class="footer">
@@ -33,7 +38,8 @@
</template> </template>
<script> <script>
import {listCaseStep} from "@/api/test/caseStep"; import draggable from "vuedraggable";
import {listCaseStep, updateCaseStep} from "@/api/test/caseStep";
import page1 from "./page1.vue" import page1 from "./page1.vue"
import page2 from "./page2.vue" import page2 from "./page2.vue"
import page3 from "./page3.vue" import page3 from "./page3.vue"
@@ -43,7 +49,7 @@ import {listDatasource} from "@/api/test/database";
export default { export default {
dicts: ['step_type'], dicts: ['step_type'],
components: {page1, page2, page3, page4}, components: {draggable, page1, page2, page3, page4},
data() { data() {
return { return {
loading: false, loading: false,
@@ -98,6 +104,20 @@ export default {
}, },
methods: { methods: {
// 拖拽结束后更新排序值
onDragEnd() {
this.updateSortValues();
},
// 更新每行数据的 sort 值
updateSortValues() {
this.list.forEach((item, index) => {
item.stepNum = index + 1;
updateCaseStep({
id: item.id,
stepNum: item.stepNum,
})
});
},
handleAdd(type) { handleAdd(type) {
this.list.push({ this.list.push({
name: "", name: "",

View File

@@ -14,8 +14,8 @@
<el-table-column label="创建时间" align="center" prop="createTime"/> <el-table-column label="创建时间" align="center" prop="createTime"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleRun(scope.row.id)">执行</el-button> <el-button size="mini" type="text" icon="el-icon-delete" @click.native.stop="handleRun(scope.row.id)">执行</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row.id)">删除</el-button> <el-button size="mini" type="text" icon="el-icon-delete" @click.native.stop="handleDelete(scope.row.id)">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

View File

@@ -15,8 +15,8 @@
<el-table-column label="创建时间" align="center" prop="createTime"/> <el-table-column label="创建时间" align="center" prop="createTime"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleRun(scope.row.id)">执行</el-button> <el-button size="mini" type="text" icon="el-icon-delete" @click.native.stop="handleRun(scope.row.id)">执行</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row.id)">删除</el-button> <el-button size="mini" type="text" icon="el-icon-delete" @click.native.stop="handleDelete(scope.row.id)">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>