|
@@ -0,0 +1,361 @@
|
|
|
+<template>
|
|
|
+ <el-container class="BackgroundCloth">
|
|
|
+ <el-header class="public_header setLine">
|
|
|
+ <div class="Layout_space_between">
|
|
|
+ <div class="Layout_flex_start">
|
|
|
+ <div>
|
|
|
+ <span class="details-id">{{ 'report-' + details.id }}</span><br>
|
|
|
+ <span class="report-title">{{ details.reportName }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="details-statusString">{{ details.statusString }}</div>
|
|
|
+ </div>
|
|
|
+ <div v-if="details.status === 1 ? false : true">
|
|
|
+ <span v-if="details.status === 3 ? true : false" class="didi-hover" @click="dialog_testData = true, AsTp = '通过'">通过</span>
|
|
|
+ <span v-if="details.status === 3 ? true : false" style="margin-left: 30px;" class="didi-hover" @click="dialog_testData = true, AsTp = '打回'">打回</span>
|
|
|
+ <span v-if="details.status === 0 ? true : false" class="didi-hover" @click="report_click(3,details)">发送</span>
|
|
|
+ <span v-if="details.status === 0 ? true : false" style="margin: 0 30px;" class="didi-hover" @click="report_click(2,details)">编辑</span>
|
|
|
+ <span v-if="details.status === 0 ? true : false" class="didi-hover" @click="dialog_testData = true, AsTp = '删除'">删除</span>
|
|
|
+ <span v-if="details.status === 2 ? true : false" class="didi-hover" @click="report_click(2,details)">重新提测</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-header>
|
|
|
+ <el-container>
|
|
|
+ <el-main class="report-main">
|
|
|
+ <div class="title"><div class="blur-column" /> 报告内容</div>
|
|
|
+
|
|
|
+ <el-row class="from-margin">
|
|
|
+ <el-col :span="12" class="Layout_space_between">
|
|
|
+ <span class="from-name">计划提测时间:{{ details.deliverTestPlanTime }}</span>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <span class="from-namev">实际提测时间:{{ details.deliverTestActualTime }}</span>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-row v-show="details.isDelay === 1" class="from-margin">
|
|
|
+ <el-col :span="24" class="Layout_space_between">
|
|
|
+ <span class="from-namea">提测延期原因 : {{ details.delayReason }}</span>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-row class="from-margin">
|
|
|
+ <el-col :span="12" class="Layout_space_between">
|
|
|
+ <span class="from-name">计划开发时间:{{ details.devPlanTimeStart + '至' + details.devPlanTimeEnd }}</span>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12" class="Layout_space_between">
|
|
|
+ <span class="from-namer">实际开发时间:{{ details.devActualTimeStart + '至' + details.devActualTimeEnd }}</span>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-row class="from-margin">
|
|
|
+ <el-col :span="12" class="Layout_space_between">
|
|
|
+ <span class="from-name">是否跟版:{{ details.followVersion === 2 ? '否' : '是' }} </span>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12" class="Layout_space_between">
|
|
|
+ <span class="from-namer">跟版客户端:{{ details.involveAppString }}</span>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-row class="from-margin">
|
|
|
+ <el-col :span="12" class="Layout_space_between">
|
|
|
+ <span class="from-name">CodeReview:{{ details.isCodeReview === 0 ? '否' : '是' }}</span>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12" class="Layout_space_between">
|
|
|
+ <span class="from-namer">执行人:{{ details.codeReviewExecutor }}</span>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <div class="backStyle">需求列表</div>
|
|
|
+
|
|
|
+ <el-table
|
|
|
+ :data="tableData"
|
|
|
+ border
|
|
|
+ size="mini"
|
|
|
+ :header-cell-style="{ backgroundColor: 'rgba(241,241,241,1)', color: 'rgba(51,59,74,1)', fontSize: '14px', fontWeight: '400'}"
|
|
|
+ style="width: 100%; margin-bottom: 20px;"
|
|
|
+ show-overflow-tooltip="true"
|
|
|
+ >
|
|
|
+ <el-table-column prop="bugName" label="需求" align="center" min-width="250" show-overflow-tooltip>
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span class="didi-hover">{{ scope.row.bugName }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="priorityLevel" label="优先级" align="center" min-width="100" show-overflow-tooltip />
|
|
|
+ <el-table-column prop="priorityName" label="PM" align="center" min-width="100" show-overflow-tooltip />
|
|
|
+ <el-table-column prop="creatorList" label="跟版客户端" align="center" min-width="90" show-overflow-tooltip />
|
|
|
+ </el-table>
|
|
|
+
|
|
|
+ <div v-html="details.content" />
|
|
|
+
|
|
|
+ </el-main>
|
|
|
+ <el-aside width="400px">
|
|
|
+ <el-container>
|
|
|
+ <el-header class="report-mains">
|
|
|
+ <div class="title"><div class="blur-column" /> 用户信息</div>
|
|
|
+ <div class="Layout_flex_start">
|
|
|
+ <div class="title-name">报告人 : </div>
|
|
|
+ <div class="task-name">{{ details.reportorObject ? details.reportorObject.name : '' }}</div>
|
|
|
+ </div>
|
|
|
+ <div class="Layout_flex_start">
|
|
|
+ <div class="title-name">收件人 : </div>
|
|
|
+ <div v-for="(item, index) in details.sendToObject" :key="index" class="task-name"> {{ item.name }} <span v-if="index < details.sendToObject.length - 1"> , </span></div>
|
|
|
+ </div>
|
|
|
+ <div class="Layout_flex_start">
|
|
|
+ <div class="title-name">抄送人 : </div>
|
|
|
+ <div v-for="(item, index) in details.sendCcObject" :key="index" class="task-name">{{ item.name }} <span v-if="index < details.sendCcObject.length - 1"> , </span></div>
|
|
|
+ </div>
|
|
|
+ </el-header>
|
|
|
+ <el-main class="report-mains">
|
|
|
+ <div class="title"><div class="blur-column" /> 时间</div>
|
|
|
+ <div class="Layout_flex_start">
|
|
|
+ <div class="title-name">创建时间 : </div>
|
|
|
+ <div class="task-name">{{ details.gmtCreate }}</div>
|
|
|
+ </div>
|
|
|
+ <div class="Layout_flex_start">
|
|
|
+ <div class="title-name">发送时间 : </div>
|
|
|
+ <div class="task-name">{{ details.gmtModify }}</div>
|
|
|
+ </div>
|
|
|
+ </el-main>
|
|
|
+ <el-footer class="report-mains">
|
|
|
+ <div class="title"><div class="blur-column" /> 关联任务</div>
|
|
|
+ <div v-for="(item, index) in details.taskDetailList" :key="index" class="Layout_flex_start task-bot">
|
|
|
+ <div class="task-id">{{ item.taskId }}</div>
|
|
|
+ <div class="task-name">{{ item.name }}</div>
|
|
|
+ </div>
|
|
|
+ </el-footer>
|
|
|
+ </el-container>
|
|
|
+ </el-aside>
|
|
|
+ </el-container>
|
|
|
+ <el-dialog :title="AsTp === '删除'? '删除确认': '提测确认'" :visible.sync="dialog_testData" width="30%" :close-on-click-modal="false">
|
|
|
+ <div style="position: absolute; top: 23px; left: 12px;width:4px;height:17px;background:#409EFF;border-radius:1px;" />
|
|
|
+ <div align="center">
|
|
|
+ <div v-if="AsTp === '删除'">是否删除以下提测报告?</div>
|
|
|
+ <div v-if="AsTp === '通过'">是否通过以下提测报告?</div>
|
|
|
+ <div v-if="AsTp === '打回'">是否打回以下提测报告?</div>
|
|
|
+ <div style="color: #f79232;">{{ details.reportName }}</div>
|
|
|
+ <el-input v-show="AsTp === '打回'" v-model="details.returnReason" type="textarea" placeholder="请输入打回原因..." :rows="3" />
|
|
|
+ </div>
|
|
|
+ <span slot="footer" class="dialog-footer">
|
|
|
+ <el-button type="primary" size="mini" @click="deleteDaily()">确 定</el-button>
|
|
|
+ <el-button type="danger" size="mini" @click="dialog_testData = false">取 消</el-button>
|
|
|
+ </span>
|
|
|
+ </el-dialog>
|
|
|
+ <TestingReport v-if="dialogDaily" ref="DailyReport" @getList="reportreleaseGetReportById(reportId)" />
|
|
|
+ </el-container>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import '@/styles/PublicStyle/index.scss'
|
|
|
+import { reportdelivertestGetReportById, reportreleaseDelete, reportdelivertestGetRequiresByTaskIds, reportdelivertestUpdate } from '@/api/reportTemplate'
|
|
|
+import TestingReport from '@/views/reportManagement/components/TestingReport' // 准出
|
|
|
+export default {
|
|
|
+ components: {
|
|
|
+ TestingReport
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ dialogDaily: false, // 准出报告弹窗
|
|
|
+ dialog_testData: false, // 操作弹窗
|
|
|
+ tableData: [],
|
|
|
+ AsTp: '',
|
|
|
+ reportId: this.$route.query.id,
|
|
|
+ details: {}
|
|
|
+ }
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ this.reportdelivertestGetReportById(this.reportId)
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ async reportdelivertestGetReportById(e) { // 获取准出报告data
|
|
|
+ const res = await reportdelivertestGetReportById(e)
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.details = res.data
|
|
|
+ this.reportdelivertestGetRequiresByTaskIds(this.details.taskIds)
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ async reportdelivertestGetRequiresByTaskIds(val) {
|
|
|
+ const res2 = await reportdelivertestGetRequiresByTaskIds({ taskIds: val })
|
|
|
+ if (res2.code === 200) {
|
|
|
+ this.tableData = res2.data.list
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ report_click(e, data) { // 准出报告
|
|
|
+ this.report_data = data
|
|
|
+ this.dialogDaily = true
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.DailyReport.init(e, data)
|
|
|
+ })
|
|
|
+ },
|
|
|
+ async deleteDaily() { // 删除准出报告
|
|
|
+ if (this.AsTp === '打回' || this.AsTp === '通过') {
|
|
|
+ const data = {
|
|
|
+ id: this.details.id,
|
|
|
+ moduleId: this.details.moduleId,
|
|
|
+ bizId: this.details.bizId,
|
|
|
+ taskIds: this.details.taskIds,
|
|
|
+ reportName: this.details.reportName,
|
|
|
+ returnReason: this.details.returnReason,
|
|
|
+ status: this.AsTp === '打回' ? 2 : this.AsTp === '通过' ? 1 : ''
|
|
|
+ }
|
|
|
+ const res1 = await reportdelivertestUpdate(data)
|
|
|
+ if (res1.code === 200) {
|
|
|
+ this.dialog_testData = false
|
|
|
+ this.$message({ type: 'success', message: this.AsTp === '打回' ? '已打回' : '已通过' })
|
|
|
+ this.reportdelivertestGetReportById(this.reportId)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (this.AsTp === '删除') {
|
|
|
+ const res = await reportreleaseDelete({}, this.details.id)
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.dialog_testData = false
|
|
|
+ this.$router.push({ name: '报告' })
|
|
|
+ this.$message({ type: 'success', message: '删除成功' })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+.BackgroundCloth {
|
|
|
+.report-Header {
|
|
|
+ margin: 10px 10px 0;
|
|
|
+ background: #FFF;
|
|
|
+ border-radius:4px;
|
|
|
+}
|
|
|
+.from-margin {
|
|
|
+ width: 100%;
|
|
|
+ display: inline-block;
|
|
|
+ font-size:14px;
|
|
|
+ font-family:Microsoft Sans Serif;
|
|
|
+ font-weight:400;
|
|
|
+ line-height:22px;
|
|
|
+ color:#666666;
|
|
|
+ opacity:1;
|
|
|
+ .from-name {
|
|
|
+ width: 140px !important;
|
|
|
+ }
|
|
|
+ .from-names {
|
|
|
+ width: 100px !important;
|
|
|
+ }
|
|
|
+ .from-namea {
|
|
|
+ width: 119px !important;
|
|
|
+ }
|
|
|
+ .from-namer {
|
|
|
+ width: 140px !important;
|
|
|
+ margin-left:10px;
|
|
|
+ }
|
|
|
+ .from-namev {
|
|
|
+ margin-left:10px;
|
|
|
+ vertical-align: sub;
|
|
|
+ }
|
|
|
+ .from-value {
|
|
|
+ margin-left: 30px;
|
|
|
+ color:rgba(126,211,33,1);
|
|
|
+ }
|
|
|
+ .report-taskList{
|
|
|
+ font-size:14px;
|
|
|
+ font-family:MicrosoftYaHei;
|
|
|
+ line-height:17px;
|
|
|
+ color:rgba(102,102,102,1);
|
|
|
+ margin-top: 10px;
|
|
|
+ opacity:1;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.details-id {
|
|
|
+ font-size:12px;
|
|
|
+ font-family:PingFang SC;
|
|
|
+ font-weight:400;
|
|
|
+ line-height:20px;
|
|
|
+ color:rgba(51,59,74,1);
|
|
|
+ opacity:0.5;
|
|
|
+}
|
|
|
+
|
|
|
+.report-title {
|
|
|
+ font-size:20px;
|
|
|
+ font-family:PingFangSC-Medium;
|
|
|
+ line-height:28px;
|
|
|
+ color:rgba(51,59,74,1);
|
|
|
+ opacity:1;
|
|
|
+}
|
|
|
+
|
|
|
+.details-statusString {
|
|
|
+ font-size:14px;
|
|
|
+ font-family:MicrosoftYaHei;
|
|
|
+ line-height:17px;
|
|
|
+ padding: 5px 8px;
|
|
|
+ margin-left: 15px;
|
|
|
+ color:rgba(111,124,147,1);
|
|
|
+ border:1px solid rgba(191,198,220,1);
|
|
|
+ opacity:1;
|
|
|
+ border-radius:4px;
|
|
|
+}
|
|
|
+
|
|
|
+.report-main {
|
|
|
+ margin: 10px;
|
|
|
+ background: #FFF;
|
|
|
+ border-radius:4px;
|
|
|
+}
|
|
|
+.report-mains {
|
|
|
+ min-height: 200px;
|
|
|
+ padding: 20px ;
|
|
|
+ margin: 10px 10px 0 0;
|
|
|
+ background: #FFF;
|
|
|
+ border-radius:4px;
|
|
|
+}
|
|
|
+.title {
|
|
|
+ font-size:16px;
|
|
|
+ font-family:PingFangSC-Medium;
|
|
|
+ line-height:35px;
|
|
|
+ margin-bottom: 10px;
|
|
|
+ color:rgba(51,59,74,1);
|
|
|
+ opacity:1;
|
|
|
+}
|
|
|
+
|
|
|
+.title-name {
|
|
|
+ width:100px;
|
|
|
+ font-size:14px;
|
|
|
+ margin-bottom: 10px;
|
|
|
+ font-family:PingFangSC-Regular;
|
|
|
+ line-height:20px;
|
|
|
+ color:rgba(102,102,102,1);
|
|
|
+ opacity:1;
|
|
|
+}
|
|
|
+
|
|
|
+.task-id {
|
|
|
+ width:100px;
|
|
|
+ font-size:14px;
|
|
|
+ font-family:MicrosoftYaHei;
|
|
|
+ line-height:17px;
|
|
|
+ color:rgba(102,102,102,1);
|
|
|
+ opacity:1;
|
|
|
+}
|
|
|
+
|
|
|
+.task-name {
|
|
|
+ font-size:14px;
|
|
|
+ font-family:MicrosoftYaHei;
|
|
|
+ line-height:17px;
|
|
|
+ color:rgba(51,51,51,1);
|
|
|
+ opacity:1;
|
|
|
+}
|
|
|
+
|
|
|
+.blur-column {
|
|
|
+ width:4px;
|
|
|
+ height:15px;
|
|
|
+ display:inline-block;
|
|
|
+ vertical-align: middle;
|
|
|
+ background:#409EFF;
|
|
|
+ border-radius:1px;
|
|
|
+}
|
|
|
+
|
|
|
+.task-bot {
|
|
|
+ margin-bottom: 10px;
|
|
|
+}
|
|
|
+}
|
|
|
+.setLine {
|
|
|
+ padding: 10px 20px;
|
|
|
+}
|
|
|
+</style>
|