|
@@ -0,0 +1,394 @@
|
|
|
+<template>
|
|
|
+ <div class="velStyle">
|
|
|
+ <!-- 准出预览 -->
|
|
|
+ <div v-if="towShow" class="reportContent">
|
|
|
+ <div>
|
|
|
+ <div style="display: flex; white-space: nowrap; font-family:SimSuncss">
|
|
|
+ <span style="flex:1;font-weight: bold;font-size: 20px;color: #3a8ee6">{{ ClientDatayl.reportName }}</span>
|
|
|
+ <span style="flex:1;margin: 0.5% 0 0 20px;font-size: 17px;">by {{ ClientDatayl.ownner }}</span>
|
|
|
+ </div>
|
|
|
+ <div style="margin: 2% 0 1% 0; font-size: 17px; font-weight: bold;">一. 项目概述</div><br>
|
|
|
+ <div style="display:flex;">
|
|
|
+ <div style="flex:1">
|
|
|
+ <div class="marage">测试结果 : <span :style="status1">{{ status }}</span></div><br>
|
|
|
+ <div class="marage">开发人员 : {{ ClientDatayl.developer }}</div><br>
|
|
|
+ <div class="marage">开发周期 : {{ ClientDatayl.devTimeEnd }} 至 {{ ClientDatayl.devTimeStart }}</div><br>
|
|
|
+ <div class="marage">准出延期 : <span :style="taskLateDisabled">{{ ClientDatayl.taskLateStatus }}</span></div><br>
|
|
|
+ </div>
|
|
|
+ <div style="flex:1">
|
|
|
+ <div class="marage">准入结果 : {{ ClientDatayl.launchInfo }}</div><br>
|
|
|
+ <div class="marage">测试人员 : {{ ClientDatayl.tester }}</div><br>
|
|
|
+ <div class="marage">测试周期 : {{ ClientDatayl.testTimeEnd }} 至 {{ ClientDatayl.testTimeStart }} </div><br>
|
|
|
+ <div v-show="showDelay1" class="marage">延期原因 : {{ ClientDatayl.taskLateReason }}</div><br>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div style="display:flex;">
|
|
|
+ <div style="flex:1">
|
|
|
+ <div class="marage">涉及安全项 : <span :style="getInfoBtnDisabled">{{ ClientDatayl.getInfoBtn }}</span></div><br>
|
|
|
+ </div>
|
|
|
+ <div style="flex:1">
|
|
|
+ <div v-show="showData" class="marage">完成结果 : {{ ClientDatayl.safeInfo }}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div style="white-space: nowrap;">SDL链接 : <el-link href="http://wiki.intra.xiaojukeji.com/pages/viewpage.action?pageId=237016271" type="primary" target="_blank"> 普惠SDL准入标准</el-link></div>
|
|
|
+ <div class="titleStyle">二. 项目背景</div><br>
|
|
|
+ <div class="rich" v-html="editorElem" />
|
|
|
+
|
|
|
+ <div class="titleStyle">三. 模块信息</div>
|
|
|
+
|
|
|
+ <div class="marage">1、模块信息</div>
|
|
|
+
|
|
|
+ <div class="rich" v-html="editorElems" />
|
|
|
+
|
|
|
+ <div class="marage">2、本期功能</div>
|
|
|
+
|
|
|
+ <div class="rich" v-html="editorFrom" />
|
|
|
+
|
|
|
+ <div class="marage">3、风险点</div>
|
|
|
+
|
|
|
+ <div class="rich" v-html="editorF" />
|
|
|
+
|
|
|
+ <div class="marage">4、缺陷分析</div>
|
|
|
+
|
|
|
+ <el-table :data="tableData" border>
|
|
|
+ <el-table-column prop="totalBug" label="bug总数" min-width="200" align="center" edit="false">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-input v-if="scope.row.totalBug.edit" ref="totalBug" v-model="scope.row.totalBug.value" style="width: 100%" @blur="scope.row.totalBug.edit = false" />
|
|
|
+ <span v-else>{{ scope.row.totalBug.value }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="fixBug" min-width="200" align="center" label="已解决bug数">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-input v-if="scope.row.fixBug.edit" ref="fixBug" v-model="scope.row.fixBug.value" style="width: 100%" @blur="scope.row.fixBug.edit = false" />
|
|
|
+ <span v-else>{{ scope.row.fixBug.value }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="remainBug" min-width="200" align="center" label="遗留bug数">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-input v-if="scope.row.remainBug.edit" ref="remainBug" v-model="scope.row.remainBug.value" style="width: 100%" @blur="scope.row.remainBug.edit = false" />
|
|
|
+ <span v-else>{{ scope.row.remainBug.value }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="rateOfReopen" min-width="200" align="center" label="reopen率">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-input v-if="scope.row.rateOfReopen.edit" ref="rateOfReopen" v-model="scope.row.rateOfReopen.value" style="width: 100%" @blur="scope.row.rateOfReopen.edit = false" />
|
|
|
+ <span v-else>{{ scope.row.rateOfReopen.value }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="invalidBug" min-width="200" align="center" label="无效bug数">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-input v-if="scope.row.invalidBug.edit" ref="invalidBug" v-model="scope.row.invalidBug.value" style="width: 100%" @blur="scope.row.invalidBug.edit = false" />
|
|
|
+ <span v-else>{{ scope.row.invalidBug.value }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="24"><div style="margin:2% 0;">5、遗留问题</div>{{ ClientDatayl.bugInfo }}</el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <div class="rich" v-html="editorData" />
|
|
|
+
|
|
|
+ <div class="titleStyle">四. 测试项</div>
|
|
|
+
|
|
|
+ <div class="marage">1、功能测试 : <span style="margin-left:40px;" :style="fctResultChange">{{ fctResult }}</span></div>
|
|
|
+
|
|
|
+ <div class="rich" v-html="editorEl" />
|
|
|
+
|
|
|
+ <div class="marage">2、可靠性测试 : <span style="margin-left:40px;" :style="rqtResultChange">{{ rqtResult }}</span></div>
|
|
|
+
|
|
|
+ <div class="rich" v-html="editorEle" />
|
|
|
+
|
|
|
+ <div class="marage">3、稳定性测试 : <span style="margin-left:40px;" :style="pftResultChange">{{ pftResult }}</span></div>
|
|
|
+
|
|
|
+ <div class="rich" v-html="editorSix" />
|
|
|
+
|
|
|
+ <div class="marage">4、安全性测试 : <span style="margin-left:40px;" :style="safeResultChange">{{ safeResult }}</span></div>
|
|
|
+
|
|
|
+ <div class="rich" v-html="editorEight" />
|
|
|
+
|
|
|
+ <div class="marage">5、线上监控 : <span style="margin-left:40px;" :style="moniterResultChange">{{ moniterResult }}</span></div>
|
|
|
+
|
|
|
+ <div class="rich" v-html="editorNine" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div v-if="oneShow" class="reportContent">
|
|
|
+ <div>
|
|
|
+ <div style="display: flex; white-space: nowrap; font-family:SimSuncss">
|
|
|
+ <span style="flex:1;font-weight: bold;font-size: 20px;color: #3a8ee6">{{ ClientDatayl.reportName }}</span>
|
|
|
+ <span style="flex:2;margin: 0.5% 0 0 20px;font-size: 17px;">by {{ ClientDatayl.ownner }}</span>
|
|
|
+ </div>
|
|
|
+ <div style="margin: 2% 0 1% 0; font-size: 19px; font-weight: bold;">一、项目概述</div><br>
|
|
|
+ <div style="display:flex;">
|
|
|
+ <div style="flex:1">
|
|
|
+ <div class="marage">测试结果 : <span :style="status1">{{ status }}</span></div><br>
|
|
|
+ <div class="marage">开发人员 : {{ ClientDatayl.developer }}</div><br>
|
|
|
+ <div class="marage">开发周期 : {{ ClientDatayl.devTimeEnd }} 至 {{ ClientDatayl.devTimeStart }}</div><br>
|
|
|
+ <div class="marage">准出延期 : <span :style="taskLateDisabled">{{ ClientDatayl.taskLateStatus }}</span></div><br>
|
|
|
+ </div>
|
|
|
+ <div style="flex:1">
|
|
|
+ <div class="marage">准入结果 : {{ ClientDatayl.smokeTestResult }}</div><br>
|
|
|
+ <div class="marage">测试人员 : {{ ClientDatayl.tester }}</div><br>
|
|
|
+ <div class="marage">测试周期 : {{ ClientDatayl.testTimeEnd }} 至 {{ ClientDatayl.testTimeStart }} </div><br>
|
|
|
+ <div v-show="showDelay1" class="marage">延期原因 : {{ ClientDatayl.taskLateReason }}</div><br>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="titleStyle">二. 项目背景</div>
|
|
|
+
|
|
|
+ <div class="rich" v-html="editorElem" />
|
|
|
+
|
|
|
+ <div class="titleStyle">三. 测试项</div>
|
|
|
+
|
|
|
+ <p>功能测试 : <span style="margin-left:40px;" :style="pftResult1">{{ pftResult }}</span></p>
|
|
|
+
|
|
|
+ <div class="rich" v-html="editorElems1" />
|
|
|
+
|
|
|
+ <p>兼容测试 : <span style="margin-left:40px;" :style="sctResult1">{{ sctResult }}</span></p>
|
|
|
+
|
|
|
+ <div class="rich" v-html="editorFrom1" />
|
|
|
+
|
|
|
+ <div class="titleStyle">四. 产品验收</div>
|
|
|
+
|
|
|
+ <p>验收结果 : <span style="margin-left:40px;" :style="acceptanceResult1">{{ acceptanceResult }}</span></p>
|
|
|
+
|
|
|
+ <div class="rich" v-html="editorFro" />
|
|
|
+
|
|
|
+ <div class="titleStyle">五. bug指标</div>
|
|
|
+
|
|
|
+ <el-table :data="tableData" border>
|
|
|
+ <el-table-column prop="totalBug" label="bug总数" min-width="200" align="center" edit="false">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-input v-if="scope.row.totalBug.edit" ref="totalBug" v-model="scope.row.totalBug.value" style="width: 100%" @blur="scope.row.totalBug.edit = false" />
|
|
|
+ <span v-else>{{ scope.row.totalBug.value }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="fixBug" min-width="200" align="center" label="已解决bug数">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-input v-if="scope.row.fixBug.edit" ref="fixBug" v-model="scope.row.fixBug.value" style="width: 100%" @blur="scope.row.fixBug.edit = false" />
|
|
|
+ <span v-else>{{ scope.row.fixBug.value }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="remainBug" min-width="200" align="center" label="遗留bug数">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-input v-if="scope.row.remainBug.edit" ref="remainBug" v-model="scope.row.remainBug.value" style="width: 100%" @blur="scope.row.remainBug.edit = false" />
|
|
|
+ <span v-else>{{ scope.row.remainBug.value }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="rateOfFix" min-width="200" align="center" label="bug解决率">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-input v-if="scope.row.rateOfFix.edit" ref="rateOfFix" v-model="scope.row.rateOfFix.value" style="width: 100%" @blur="scope.row.rateOfFix.edit = false" />
|
|
|
+ <span v-else>{{ scope.row.rateOfFix.value }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <el-row class="pre-line">
|
|
|
+ <el-col :span="24"><div style="margin: 2% 0;">1、遗留问题</div>{{ ClientDatayl.bugInfo }}</el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <div class="rich" v-html="editorEle1" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import { bugFinishList } from '@/api/ResultPage'
|
|
|
+
|
|
|
+export default {
|
|
|
+ name: 'ResultPageyL',
|
|
|
+ props: {
|
|
|
+ message: {
|
|
|
+ type: Object,
|
|
|
+ required: true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ showDelay1: false,
|
|
|
+ taskLateStatus: '',
|
|
|
+ getInfoBtnDisabled: { color: 'green' },
|
|
|
+ taskLateDisabled: { color: 'green' },
|
|
|
+ pftResult1: { colocr: 'green' },
|
|
|
+ sctResult1: { colocr: 'green' },
|
|
|
+ acceptanceResult1: { colocr: 'green' },
|
|
|
+ fctResultChange: { colocr: '' },
|
|
|
+ rqtResultChange: { color: '' },
|
|
|
+ pftResultChange: { color: '' },
|
|
|
+ safeResultChange: { color: '' },
|
|
|
+ moniterResultChange: { color: '' },
|
|
|
+ showData: false,
|
|
|
+ status: '',
|
|
|
+ acceptanceResult: '',
|
|
|
+ sctResult: '',
|
|
|
+ pftResult: '',
|
|
|
+ towShow: false,
|
|
|
+ oneShow: false,
|
|
|
+ showDisabled: true,
|
|
|
+ showDisabled1: true,
|
|
|
+ ClientDatayl: {},
|
|
|
+ editorElem: '',
|
|
|
+ editorElems: '',
|
|
|
+ editorElems1: '',
|
|
|
+ editorFrom: '',
|
|
|
+ editorFrom1: '',
|
|
|
+ editorF: '',
|
|
|
+ editorData: '',
|
|
|
+ editorEl: '',
|
|
|
+ editorEle: '',
|
|
|
+ editorEle1: '',
|
|
|
+ editorSix: '',
|
|
|
+ editorEight: '',
|
|
|
+ editorNine: '',
|
|
|
+ tableData: [],
|
|
|
+ bugNum: {},
|
|
|
+ status1: { color: 'green' },
|
|
|
+ fctResult: '',
|
|
|
+ moniterResult: '',
|
|
|
+ rqtResult: '',
|
|
|
+ safeResult: ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ this.idGet()
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ idGet() {
|
|
|
+ this.ClientDatayl = this.message
|
|
|
+ console.log(this.ClientDatayl, 'ddddddd')
|
|
|
+ this.editorElems1 = this.ClientDatayl.fctInfo
|
|
|
+ this.editorFrom1 = this.ClientDatayl.sctInfo
|
|
|
+ this.editorFro = this.ClientDatayl.acceptanceResultInfo
|
|
|
+ this.editorEle1 = this.ClientDatayl.bugTarget
|
|
|
+ this.editorElem = this.ClientDatayl.projectBackground
|
|
|
+ this.editorElems = this.ClientDatayl.moduleInfo
|
|
|
+ this.editorFrom = this.ClientDatayl.functionInfo
|
|
|
+ this.editorF = this.ClientDatayl.onlineRisk
|
|
|
+ this.editorEle = this.ClientDatayl.rqtInfo
|
|
|
+ this.editorData = this.ClientDatayl.bugInfo
|
|
|
+ this.editorEl = this.ClientDatayl.fctInfo
|
|
|
+ this.editorSix = this.ClientDatayl.pftInfo
|
|
|
+ this.editorEight = this.ClientDatayl.safeResultInfo
|
|
|
+ this.editorNine = this.ClientDatayl.moniterResultInfo
|
|
|
+ this.getBugData()
|
|
|
+ if (this.ClientDatayl.type === 2) {
|
|
|
+ this.towShow = true
|
|
|
+ this.oneShow = false
|
|
|
+ } else {
|
|
|
+ this.oneShow = true
|
|
|
+ this.towShow = false
|
|
|
+ }
|
|
|
+ if (this.ClientDatayl.status === 1) {
|
|
|
+ this.status = '通过'
|
|
|
+ } else {
|
|
|
+ this.status = '未通过'
|
|
|
+ this.status1.color = 'red'
|
|
|
+ }
|
|
|
+ if (this.ClientDatayl.taskLateStatus === 1) {
|
|
|
+ this.ClientDatayl.taskLateStatus = '否'
|
|
|
+ this.showDelay1 = false
|
|
|
+ this.taskLateDisabled.color = 'green'
|
|
|
+ } else {
|
|
|
+ this.ClientDatayl.taskLateStatus = '是'
|
|
|
+ this.taskLateDisabled.color = 'red'
|
|
|
+ this.showDelay1 = true
|
|
|
+ }
|
|
|
+ if (this.ClientDatayl.safeInfo !== '') {
|
|
|
+ this.ClientDatayl.getInfoBtn = '是'
|
|
|
+ this.getInfoBtnDisabled.color = 'red'
|
|
|
+ this.showData = true
|
|
|
+ } else {
|
|
|
+ this.ClientDatayl.getInfoBtn = '否'
|
|
|
+ this.getInfoBtnDisabled.color = 'green'
|
|
|
+ this.showData = false
|
|
|
+ }
|
|
|
+ switch (this.ClientDatayl.pftResult) {
|
|
|
+ case 1: this.pftResult = '通过'; this.pftResult1.color = 'green'; break
|
|
|
+ case 2: this.pftResult = '未通过'; this.pftResult1.color = 'red'; break
|
|
|
+ case 3: this.pftResult = '未执行'; this.pftResult1.color = 'Orange'; break
|
|
|
+ }
|
|
|
+ switch (this.ClientDatayl.sctResult) {
|
|
|
+ case 1: this.sctResult = '测试通过'; this.sctResult1.color = 'green'; break
|
|
|
+ case 2: this.sctResult = '测试未通过'; this.sctResult1.color = 'red'; break
|
|
|
+ }
|
|
|
+ switch (this.ClientDatayl.acceptanceResult) {
|
|
|
+ case 1: this.acceptanceResult = '通过'; this.acceptanceResult1.color = 'green'; break
|
|
|
+ case 2: this.acceptanceResult = '未通过'; this.acceptanceResult1.color = 'red'; break
|
|
|
+ case 3: this.acceptanceResult = '未执行'; this.acceptanceResult1.color = 'Orange'; break
|
|
|
+ }
|
|
|
+ switch (this.ClientDatayl.fctResult) { // 功能测试
|
|
|
+ case 1: this.fctResult = '通过'; this.fctResultChange.color = 'green'; break
|
|
|
+ case 2: this.fctResult = '未通过'; this.fctResultChange.color = 'red'; break
|
|
|
+ case 3: this.fctResult = '未执行'; this.fctResultChange.color = 'Orange'; break
|
|
|
+ }
|
|
|
+ switch (this.ClientDatayl.rqtResult) { // 可靠性测试
|
|
|
+ case 1: this.rqtResult = '通过'; this.rqtResultChange.color = 'green'; break
|
|
|
+ case 2: this.rqtResult = '未通过'; this.rqtResultChange.color = 'red'; break
|
|
|
+ case 3: this.rqtResult = '未执行'; this.rqtResultChange.color = 'Orange'; break
|
|
|
+ }
|
|
|
+ switch (this.ClientDatayl.pftResult) { // 稳定性测试
|
|
|
+ case 1: this.pftResult = '通过'; this.pftResultChange.color = 'green'; break
|
|
|
+ case 2: this.pftResult = '未通过'; this.pftResultChange.color = 'red'; break
|
|
|
+ case 3: this.pftResult = '未执行'; this.pftResultChange.color = 'Orange'; break
|
|
|
+ }
|
|
|
+ switch (this.ClientDatayl.safeResult) { // 安全性测试
|
|
|
+ case 1: this.safeResult = '通过'; this.safeResultChange.color = 'green'; break
|
|
|
+ case 2: this.safeResult = '未通过'; this.safeResultChange.color = 'red'; break
|
|
|
+ case 3: this.safeResult = '未执行'; this.safeResultChange.color = 'Orange'; break
|
|
|
+ }
|
|
|
+ switch (this.ClientDatayl.moniterResult) { // 线上监控
|
|
|
+ case 1: this.moniterResult = '通过'; this.moniterResultChange.color = 'green'; break
|
|
|
+ case 2: this.moniterResult = '未通过'; this.moniterResultChange.color = 'red'; break
|
|
|
+ case 3: this.moniterResult = '未执行'; this.moniterResultChange.color = 'Orange'; break
|
|
|
+ }
|
|
|
+ },
|
|
|
+ getBugData() {
|
|
|
+ this.bugNum = { type: this.ClientDatayl.type, taskIds: this.ClientDatayl.taskIds }
|
|
|
+ bugFinishList(this.bugNum).then(res => {
|
|
|
+ this.$set(this.ClientDatayl, 'launchInfo', res.data.launchInfo)
|
|
|
+ this.tableData = [res.data]
|
|
|
+ this.formatData()
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ formatData() {
|
|
|
+ this.tableData.forEach(item => {
|
|
|
+ for (var key in item) {
|
|
|
+ item[key] = {
|
|
|
+ value: item[key],
|
|
|
+ edit: false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+ .marage {
|
|
|
+ margin: 1% 0;
|
|
|
+ }
|
|
|
+ .reportContent {
|
|
|
+ padding: 2%;
|
|
|
+ }
|
|
|
+ .velStyle {
|
|
|
+ width: 100%;
|
|
|
+ height:100%;
|
|
|
+ display: inline-block;
|
|
|
+ font-size: 14px;
|
|
|
+ color: #333B4A;
|
|
|
+ }
|
|
|
+ .titleStyle {
|
|
|
+ color: #333B4A;
|
|
|
+ margin: 2% 0;
|
|
|
+ font-size: 17px;
|
|
|
+ font-weight: bold;
|
|
|
+ }
|
|
|
+ .pre-line >>> .el-col{
|
|
|
+ white-space: pre-line
|
|
|
+ }
|
|
|
+ .rich>>> table tr td{border:1px solid #ccc;font-size: 15px; color: #606266}
|
|
|
+ .rich>>> table th{border:1px solid #ccc; font-size: 15px; background: #F0F7FF; color: #606266}
|
|
|
+ .rich>>> table {border:1px solid #ccc; border-collapse: collapse;line-height: 30px; text-align: center;font-size: 15px; color: #606266}
|
|
|
+</style>
|