|
@@ -1,21 +1,16 @@
|
|
|
<template>
|
|
|
<!-- 测试计划管理 -->
|
|
|
- <div id="init-window" style="position:relative; min-height:95vh; background:#F2F3F6;">
|
|
|
+ <div id="init-window" style="position:relative; min-height:95vh; font-size:14px background:#F2F3F6;">
|
|
|
<router-view />
|
|
|
<div style="position: absolute;width: 100%;">
|
|
|
<div style="background:#F2F3F6;">
|
|
|
<el-container>
|
|
|
<el-aside width="17%" style=" background: #FFF;margin: 1% 0 1% 1%; border-radius:8px;">
|
|
|
- <div class="nav_Input" style="min-height:81vh;" @click="click_fa">
|
|
|
+ <div class="nav_Input" style="min-height:90vh;" @click="click_fa">
|
|
|
<br>
|
|
|
- <p v-show="node_Data" style="color: #DCDFE6; margin: 100% 0;font-size:14px; text-align:center;">空空如也</p>
|
|
|
- <el-tree
|
|
|
- v-if="dataShow"
|
|
|
- :data="data1"
|
|
|
- :expand-on-click-node="true"
|
|
|
- node-key="id"
|
|
|
- @node-click="clickFun"
|
|
|
- >
|
|
|
+ <p v-show="node_Data" style="color: #DCDFE6; margin: 100% 0;font-size:14px; text-align:center;" @click="createFolder">新建文件夹</p>
|
|
|
+
|
|
|
+ <el-tree v-if="dataShow" :data="data1" :expand-on-click-node="false" node-key="id" @node-click="clickFun">
|
|
|
<span slot-scope="{ node, data }" style="width:100%;" class="custom-tree-node" @mouseenter="mouseenter(data)" @mouseleave="mouseleave(data)">
|
|
|
<span :title="data.label" class="span_el" @dblclick="dblclick(data)">{{ node.label }}</span>
|
|
|
<el-input v-if="data.que" ref="get_Input" v-model="node_Name.name" size="mini" @blur="queryNodeName(node_Name.name, data)">输入框</el-input>
|
|
@@ -34,17 +29,16 @@
|
|
|
</el-tree>
|
|
|
<el-input v-if="Folder_Show" ref="input1" v-model="add_Folder" size="mini" placeholder="新建文件夹" @blur="hide_input(add_Folder)" />
|
|
|
</div>
|
|
|
- <div style="padding: 0% 15% 15% 15%; text-align: center;"><el-button icon="el-icon-circle-plus" style="border:none;" @click="createFolder">新建文件夹</el-button></div>
|
|
|
</el-aside>
|
|
|
<el-container>
|
|
|
- <el-header style="background:#ffffff; height: auto; width: 98%; margin: 1%; font-size: 14px; border-radius: 8px;">
|
|
|
+ <el-header style="background:#ffffff; height: auto; width: 98%; margin: 1%; font-size: 13px; border-radius: 8px;">
|
|
|
<el-row>
|
|
|
<el-col :span="24" style="white-space:nowrap;">
|
|
|
序列号
|
|
|
<el-input v-model="test_plan.id" placeholder="请填写" style="width: 20%; margin: 4% 2%" />
|
|
|
测试计划状态
|
|
|
- <el-select v-model="test_plan.region" placeholder="活动区域" style="width: 20%; margin: 4% 2%">
|
|
|
- <el-option label="区域一" value="shanghai" />
|
|
|
+ <el-select v-model="test_plan.region" placeholder="请选择" style="width: 20%; margin: 4% 2%">
|
|
|
+ <el-option v-for="item in projectTypeStrings" :key="item.value" :label="item.name" :value="item.value" />
|
|
|
</el-select>
|
|
|
<el-button type="primary" @click="queryCaseData(test_plan)">查询</el-button>
|
|
|
<el-button type="primary" style="margin: 4% 2%" @click="createGetShow">新增</el-button>
|
|
@@ -56,13 +50,13 @@
|
|
|
<el-radio-group v-model="radio" style="margin: 3%; width: 100%; display: flex;">
|
|
|
<el-radio style="margin: 0 3%; flex: 1; border-right: 1px solid #D8D8D8;" :label="3">通过{{ 13 }}个</el-radio>
|
|
|
<el-radio style="margin: 0 3%; flex: 1; border-right: 1px solid #D8D8D8;" :label="6">失败{{ 3 }}个</el-radio>
|
|
|
- <el-radio style="margin: 0 3%; flex: 1; border-right: 1px solid #D8D8D8;" :label="9">阻塞{{ 3 }}个</el-radio>
|
|
|
+ <el-radio style="margin: 0 3%; flex: 1; border-right: 1px solid #D8D8D8;" :label="9">阻塞{{ 3 }}个</el-radio> -->
|
|
|
<el-radio style="margin: 0 3%; flex: 1" :label="11">未执行{{ 44 }}个</el-radio>
|
|
|
</el-radio-group>
|
|
|
</div>
|
|
|
<el-main style="background:#ffffff; width:98%;margin:0% 1% 1% 1%; font-size:14px;border-radius:8px;">
|
|
|
<!-- 主页table -->
|
|
|
- <el-table :data="gridData" :header-cell-style="{ background: '#F0F2F4', color: '#333B4A' }" border tooltip-effect="dark" style="width: 100%">
|
|
|
+ <el-table :data="gridData" :header-cell-style="{ background: '#F0F2F4', color: '#333B4A' }" border tooltip-effect="dark" size="mini" style="width: 100%">
|
|
|
<el-table-column prop="id" label="序列号" min-width="80px" align="center">
|
|
|
<template slot-scope="scope">{{ scope.row.id }}</template>
|
|
|
</el-table-column>
|
|
@@ -103,71 +97,31 @@
|
|
|
</el-main>
|
|
|
</el-container>
|
|
|
</el-container>
|
|
|
- <!-- 新增-编辑 -->
|
|
|
- <el-dialog :title="titleName" :visible.sync="dialogFormVisibleUpdate" width="80%">
|
|
|
- <el-form ref="caseData" :model="caseData" label-width="90pt" :rules="createFormData">
|
|
|
- <div style="display:flex;">
|
|
|
- <div style="flex:1;">
|
|
|
- <el-form-item label="序列号" prop="caseName"><el-input v-model="caseData.caseName" clearable autocomplete="off" style="width: 200px" /></el-form-item>
|
|
|
- <el-form-item label="前置条件" prop="expectedResult"><el-input v-model="caseData.expectedResult" clearable autocomplete="off" style="width: 200px" /></el-form-item>
|
|
|
- <el-form-item label="对应api" prop="api"><el-input v-model="caseData.api" clearable autocomplete="off" style="width: 200px" /></el-form-item>
|
|
|
- </div>
|
|
|
- <div style="flex:1;">
|
|
|
- <el-form-item label="项目类型" prop="projectType">
|
|
|
- <el-select v-model="caseData.projectType" clearable placeholder="项目类型" style="width: 200px">
|
|
|
- <el-option v-for="item in projectTypeStrings" :key="item.value" :label="item.name" :value="item.value" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="平台类型" prop="taskType">
|
|
|
- <el-select v-model="caseData.taskType" clearable placeholder="任务类型" style="width: 200px" @change="taskTypeChange(caseData.taskType)">
|
|
|
- <el-option v-for="item in taskTypeStrings" :key="item.value" :label="item.name" :value="item.value" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="用例优先级" prop="casePriority">
|
|
|
- <el-select v-model="caseData.casePriority" clearable placeholder="用例优先级" style="width: 200px">
|
|
|
- <el-option v-for="item in priorityStrings" :key="item.value" :label="item.name" :value="item.value" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </div>
|
|
|
- <div style="flex:1;">
|
|
|
- <el-form-item v-show="moduleTypeShow" label="模块名" prop="casePriority">
|
|
|
- <el-select v-model="caseData.moduleType" clearable placeholder="模块类型" style="width: 200px">
|
|
|
- <el-option v-for="item in moduleTypeStr" :key="item.id" :label="item.moduleName" :value="item.id" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <el-form-item label="用例描述" prop="description"><el-input v-model="caseData.description" clearable type="textarea" style="width: 95%" :rows="5" placeholder="请输入内容" /></el-form-item>
|
|
|
- <el-form-item label="备注"><el-input v-model="caseData.remark" clearable type="textarea" style="width: 95%" :rows="5" placeholder="请输入内容" /></el-form-item>
|
|
|
- </el-form>
|
|
|
- <div slot="footer" class="dialog-footer">
|
|
|
- <el-button type="primary" @click="dialogFormVisibleUpdate = false">关 闭</el-button>
|
|
|
- <el-button type="primary" @click="caseCreateCase(caseData, titleName)">确 定</el-button>
|
|
|
- </div>
|
|
|
- </el-dialog>
|
|
|
-
|
|
|
- <el-dialog title="查看" :visible.sync="dialogFormVisibleQuery" width="80%">
|
|
|
- <el-form ref="caseData" :model="caseData" label-width="90pt">
|
|
|
- <div style="display:flex;">
|
|
|
- <div style="flex:1;">
|
|
|
- <el-form-item label="用例名 :">{{ caseData.caseName }}</el-form-item>
|
|
|
- <el-form-item label="期望结果 :">{{ caseData.expectedResult }}</el-form-item>
|
|
|
- <el-form-item label="对应接口 :">{{ caseData.api }}</el-form-item>
|
|
|
- </div>
|
|
|
- <div style="flex:1;">
|
|
|
- <el-form-item label="项目类型 :">{{ caseData.projectTypeName }}</el-form-item>
|
|
|
- <el-form-item label="任务类型 :">{{ caseData.taskTypeName }}</el-form-item>
|
|
|
- <el-form-item label="用例优先级 :">{{ caseData.casePriorityName }}</el-form-item>
|
|
|
- </div>
|
|
|
- <div style="flex:1;">
|
|
|
- <el-form-item v-show="moduleTypeShow" label="模块类型 :">{{ caseData.moduleTypeName }}</el-form-item>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <el-form-item label="用例描述 :">{{ caseData.description }}</el-form-item>
|
|
|
- <el-form-item label="备注 :">{{ caseData.remark }}</el-form-item>
|
|
|
+ <!-- 新建测试计划 -->
|
|
|
+ <el-dialog title="新建测试计划" :visible.sync="dialogFormVisibleUpdate" width="30%" center>
|
|
|
+ <el-form ref="caseData" label-position="left" :model="caseData" label-width="120px" :rules="createFormData">
|
|
|
+ <el-form-item label="测试计划名称" prop="caseName">
|
|
|
+ <el-input v-model="caseData.caseName" clearable autocomplete="off" placeholder="请输入测试计划名称" style="width: 270px" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="测试计划类型" prop="projectType">
|
|
|
+ <el-select v-model="caseData.projectType" clearable placeholder="请选择【准入计划】【非准入计划】" style="width: 270px">
|
|
|
+ <el-option v-for="item in projectTypeStrings" :key="item.value" :label="item.name" :value="item.value" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="端类型" prop="taskType">
|
|
|
+ <el-select v-model="caseData.taskType" clearable placeholder="请选择【服务端】【客户端】" style="width: 270px">
|
|
|
+ <el-option v-for="item in taskTypeStrings" :key="item.value" :label="item.name" :value="item.value" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="工程模块" prop="casePriority">
|
|
|
+ <el-select v-model="caseData.casePriority" clearable placeholder="请选择【多选组件】" style="width: 270px">
|
|
|
+ <el-option v-for="item in priorityStrings" :key="item.value" :label="item.name" :value="item.value" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
</el-form>
|
|
|
<div slot="footer" class="dialog-footer">
|
|
|
- <el-button type="primary" @click="dialogFormVisibleQuery = false">关 闭</el-button>
|
|
|
+ <el-button @click="caseCreateCase(caseData, titleName)">确 定</el-button>
|
|
|
+ <el-button type="danger" @click="dialogFormVisibleUpdate = false">关 闭</el-button>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
</div>
|
|
@@ -176,15 +130,13 @@
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import { queryCasesData, createCaseData, updateCaseData, deleteCaseData, settingQueryModuleInfoListData, caseUpdateFolderName, createFolderData, deleteFolderData, queryTestPlanTree } from '@/api/caseProject.js'
|
|
|
+import { queryCasesData, createCaseData, updateCaseData, deleteCaseData, caseUpdateFolderName, createFolderData, deleteFolderData, queryTestPlanTree } from '@/api/caseProject.js'
|
|
|
export default {
|
|
|
- name: 'TestCaseProject',
|
|
|
+ name: 'Testpage',
|
|
|
data() {
|
|
|
return {
|
|
|
test_plan: {},
|
|
|
radio: 3,
|
|
|
- dialogFormVisibleQuery: false,
|
|
|
- moduleTypeShow: false,
|
|
|
dataShow: true,
|
|
|
Folder_Show: false,
|
|
|
node_Data: false,
|
|
@@ -202,7 +154,6 @@ export default {
|
|
|
curIndex: 0,
|
|
|
startId: '',
|
|
|
createParticipation: {},
|
|
|
- moduleTypeStr: [],
|
|
|
gridData: [],
|
|
|
caseData: {},
|
|
|
createFormData: {
|
|
@@ -231,7 +182,7 @@ export default {
|
|
|
},
|
|
|
created() {
|
|
|
this.AllQueryFolderData()
|
|
|
- this.moduleTypeArr()
|
|
|
+ // this.moduleTypeArr()
|
|
|
},
|
|
|
mounted() {
|
|
|
this.imFile = document.getElementById('imFile')
|
|
@@ -251,11 +202,11 @@ export default {
|
|
|
}
|
|
|
})
|
|
|
},
|
|
|
- moduleTypeArr() {
|
|
|
- settingQueryModuleInfoListData(this.formData).then(res => {
|
|
|
- this.moduleTypeStr = res.data
|
|
|
- })
|
|
|
- },
|
|
|
+ // moduleTypeArr() {
|
|
|
+ // settingQueryModuleInfoListData(this.formData).then(res => {
|
|
|
+ // this.moduleTypeStr = res.data
|
|
|
+ // })
|
|
|
+ // },
|
|
|
|
|
|
dblclick(data) {
|
|
|
console.log(data)
|
|
@@ -391,6 +342,25 @@ export default {
|
|
|
this.$set(data, 'children', [])
|
|
|
}
|
|
|
data.children.push(newChild)
|
|
|
+ this.formData = {
|
|
|
+ bizId: this.bizJson,
|
|
|
+ folderName: newChild.label,
|
|
|
+ xmindUrl: '',
|
|
|
+ parentFolderId: this.startId,
|
|
|
+ creator: this.userInformation,
|
|
|
+ modifier: this.userInformation
|
|
|
+ }
|
|
|
+ createFolderData(this.formData).then(res => {
|
|
|
+ // if (res.code === 200) {
|
|
|
+ // this.$message({ message: res.msg, type: 'success', duration: 1000, offset: 150 })
|
|
|
+ // this.data1 = []
|
|
|
+ // this.AllQueryFolderData(this.bizJson)
|
|
|
+ // this.add_Folder = ''
|
|
|
+ // } else {
|
|
|
+ // this.$message({ message: res.msg, type: 'error', duration: 1000, offset: 150 })
|
|
|
+ // this.add_Folder = ''
|
|
|
+ // }
|
|
|
+ })
|
|
|
},
|
|
|
|
|
|
handleSizeChange(size) {
|
|
@@ -411,18 +381,18 @@ export default {
|
|
|
this.gridData = res.data
|
|
|
})
|
|
|
},
|
|
|
- taskTypeChange(ele) {
|
|
|
- if (ele === 2) {
|
|
|
- this.moduleTypeShow = true
|
|
|
- } else {
|
|
|
- this.moduleTypeShow = false
|
|
|
- }
|
|
|
- },
|
|
|
+ // taskTypeChange(ele) {
|
|
|
+ // if (ele === 2) {
|
|
|
+ // this.moduleTypeShow = true
|
|
|
+ // } else {
|
|
|
+ // this.moduleTypeShow = false
|
|
|
+ // }
|
|
|
+ // },
|
|
|
// 新增
|
|
|
caseCreateCase(vel, e) {
|
|
|
if (e === '编辑') {
|
|
|
updateCaseData(this.caseData).then(res => {
|
|
|
- this.successFun()
|
|
|
+ this.$message({ message: res.msg, type: 'success', duration: 1000, offset: 150 })
|
|
|
this.dialogFormVisibleUpdate = false
|
|
|
})
|
|
|
}
|
|
@@ -440,7 +410,7 @@ export default {
|
|
|
createCaseData(this.caseData).then(res => {
|
|
|
if (res.code === 200) {
|
|
|
this.gridData = res.data
|
|
|
- this.successFun()
|
|
|
+ this.$message({ message: res.msg, type: 'success', duration: 1000, offset: 150 })
|
|
|
this.dialogFormVisibleUpdate = false
|
|
|
} else {
|
|
|
this.$notify({ title: '提示', message: res.msg, duration: 2000 })
|
|
@@ -473,8 +443,7 @@ export default {
|
|
|
for (var vel of ele) {
|
|
|
var obj = vel
|
|
|
}
|
|
|
- if (obj.taskType === 2) { this.moduleTypeShow = true }
|
|
|
- this.dialogFormVisibleQuery = true
|
|
|
+ // if (obj.taskType === 2) { this.moduleTypeShow = true }
|
|
|
this.caseData = {}
|
|
|
this.caseData = obj
|
|
|
}
|
|
@@ -486,7 +455,7 @@ export default {
|
|
|
if (this.startId === '') {
|
|
|
this.$notify({ title: '提示', message: '请选择目录', duration: 2000 })
|
|
|
} else {
|
|
|
- if (ele.taskType === 2) { this.moduleTypeShow = true }
|
|
|
+ // if (ele.taskType === 2) { this.moduleTypeShow = true }
|
|
|
this.dialogFormVisibleUpdate = true
|
|
|
}
|
|
|
},
|
|
@@ -498,7 +467,7 @@ export default {
|
|
|
this.$notify({ title: '提示', message: '请选择目录', duration: 2000 })
|
|
|
} else {
|
|
|
this.dialogFormVisibleUpdate = true
|
|
|
- this.moduleTypeShow = false
|
|
|
+ // this.moduleTypeShow = false
|
|
|
// this.$refs['caseData'].resetFields()
|
|
|
if (this.$refs['caseData'] !== undefined) {
|
|
|
this.$refs['caseData'].resetFields()
|
|
@@ -543,18 +512,12 @@ export default {
|
|
|
this.gridData = res.data
|
|
|
})
|
|
|
} else {
|
|
|
- this.errorFun(res.msg)
|
|
|
+ this.$message({ message: res.msg, type: 'success', duration: 1000, offset: 150 })
|
|
|
}
|
|
|
})
|
|
|
})
|
|
|
- .catch(action => { this.$message({ type: 'success', message: '已取消' }) })
|
|
|
+ .catch(action => { this.$message({ message: '已取消', type: 'error', duration: 1000, offset: 150 }) })
|
|
|
}
|
|
|
- },
|
|
|
- successFun() {
|
|
|
- this.$notify({ title: 'Success', message: 'Created Successfully', type: 'success', duration: 2000 })
|
|
|
- },
|
|
|
- errorFun(e) {
|
|
|
- this.$notify({ title: 'Failed', message: e, type: 'error', duration: 2000 })
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -575,6 +538,19 @@ export default {
|
|
|
.nav_Input .el-input--mini .el-input__inner {
|
|
|
height: 23px !important;
|
|
|
}
|
|
|
+ .nav_Input .el-tree-node__content {
|
|
|
+ color: #333B4A;
|
|
|
+ }
|
|
|
+ .nav_Input .el-tree-node__content .el-tree-node__expand-icon{
|
|
|
+ color: #333B4A;
|
|
|
+ }
|
|
|
+ .nav_Input .el-tree-node__expand-icon.is-leaf{
|
|
|
+ color: transparent !important;
|
|
|
+ cursor: default !important
|
|
|
+ }
|
|
|
+ .nav_Input .el-tree-node__children .custom-tree-node{
|
|
|
+ color: #6F7C93;
|
|
|
+ }
|
|
|
.span_el {
|
|
|
display: block;
|
|
|
overflow: hidden;
|