Browse Source

优化报告

qinzhipeng_v 5 years ago
parent
commit
6297401e87

+ 18 - 0
src/api/reportTemplate.js

@@ -156,6 +156,15 @@ export function bugGetReportDisDataByDate(data) {
 
 // 准出报告部分
 
+// 判断是否能够新建准出报告
+export function reportreleaseCheckStatus(data) {
+  return request({
+    url: Presentation + '/reportrelease/checkStatus',
+    method: 'post',
+    data
+  })
+}
+
 // 新版准出报告list
 export function reportreleaseList(data) {
   return request({
@@ -308,3 +317,12 @@ export function reportdelivertestDelete(data, id) {
     data
   })
 }
+
+// 判断是否能够新建提测报告
+export function reportdelivertestCheckStatus(data, id) {
+  return request({
+    url: Presentation + `/reportdelivertest/checkStatus`,
+    method: 'post',
+    data
+  })
+}

+ 12 - 10
src/components/select/searchTeam.vue

@@ -67,16 +67,18 @@ export default {
   watch: {
     value: {
       handler(newV, oldV) {
-        if (this.searchValue === newV) {
-          return
-        }
-        this.searchValue = newV
-        const type = Object.prototype.toString.call(this.searchValue)
-        if (type.indexOf('Array') < 0) {
-          this.remoteMethod(newV)
-        } else if (type.indexOf('Array') > 0 && newV.length > 0 && this.firstGetArr) {
-          this.initMore(this.searchValue)
-          this.firstGetArr = false
+        if (newV) {
+          if (this.searchValue === newV) {
+            return
+          }
+          this.searchValue = newV
+          const type = Object.prototype.toString.call(this.searchValue)
+          if (type.indexOf('Array') < 0) {
+            this.remoteMethod(newV)
+          } else if (type.indexOf('Array') > 0 && newV.length > 0 && this.firstGetArr) {
+            this.initMore(this.searchValue)
+            this.firstGetArr = false
+          }
         }
       },
       immediate: true

+ 9 - 25
src/views/projectManage/projectList/components/taskList.vue

@@ -131,7 +131,7 @@ import { configShowTaskEnum, configShowTaskStatusEnum } from '@/api/taskIndex'
 import scheduleList from './scheduleList'
 import modifySchedule from './modifySchedule'
 import taskDialog from '@/views/projectManage/taskList/dialog/taskDialog' // 任务状态修改(已上线/已提测/已准出)
-import { dailyReportCheckStatus } from '@/api/reportTemplate'
+import { dailyReportCheckStatus, reportreleaseCheckStatus, reportdelivertestCheckStatus } from '@/api/reportTemplate'
 export default {
   components: {
     TestReport,
@@ -275,17 +275,10 @@ export default {
       this.visibleSchedule = true
       this.selectTaskList = this.curcentList
     },
-    filtrateTest() { // 提测筛选
-      const data = this.curcentList.filter(item => { return item.id })
-      const res = []
-      data.map(item => {
-        if (item.statusString !== '开发中') {
-          res.push(item.id)
-        }
-      })
-      if (res.length > 0) {
-        this.$message({ message: `任务${res}的状态不是【开发中】,无法批量提测,,请检查!`, type: 'warning', offset: 150 })
-      } else {
+    async filtrateTest() { // 提测筛选
+      const data = this.curcentList.map(item => { return item.id })
+      const res = await reportdelivertestCheckStatus(data)
+      if (res.code === 200) {
         this.dialogTestReport = true
         this.$nextTick(() => {
           this.$refs.TestReport.init(7, this.curcentList.map(item => { return item.id }))
@@ -293,19 +286,10 @@ export default {
       }
     },
 
-    filtrateAllow() { // 准出筛选
-      const data = this.curcentList.filter(item => { return item.id })
-      console.log(data, '查看1')
-      const res = []
-      data.map(item => {
-        if (item.statusString !== '测试中') {
-          res.push(item.id)
-        }
-      })
-      console.log(res, '查看')
-      if (res.length > 0) {
-        this.$message({ message: `任务${res}的状态不是【测试中】,无法批量准出,,请检查!`, type: 'warning', offset: 150 })
-      } else {
+    async filtrateAllow() { // 准出筛选
+      const data = this.curcentList.map(item => { return item.id })
+      const res = await reportreleaseCheckStatus(data)
+      if (res.code === 200) {
         this.dialogClientReport = true
         this.$nextTick(() => {
           this.$refs.ClientReport.init(7, this.curcentList.map(item => { return item.id }))

+ 9 - 27
src/views/projectManage/requirement/components/taskList.vue

@@ -132,7 +132,7 @@ import scheduleList from './scheduleList'
 import modifySchedule from './modifySchedule'
 import '@/styles/PublicStyle/index.scss'
 import taskDialog from '@/views/projectManage/taskList/dialog/taskDialog' // 任务状态修改(已上线/已提测/已准出)
-import { dailyReportCheckStatus } from '@/api/reportTemplate'
+import { dailyReportCheckStatus, reportreleaseCheckStatus, reportdelivertestCheckStatus } from '@/api/reportTemplate'
 export default {
   components: {
     TestReport,
@@ -283,38 +283,20 @@ export default {
       this.visibleSchedule = true
       this.selectTaskList = this.curcentList
     },
-    filtrateTest() { // 提测筛选
-      const data = this.curcentList.filter(item => { return item.id })
-      console.log(data, '查看1')
-      const res = []
-      data.map(item => {
-        if (item.statusString !== '开发中') {
-          res.push(item.id)
-        }
-      })
-      console.log(res, '查看')
-      if (res.length > 0) {
-        this.$message({ message: `任务${res}的状态不是【开发中】,无法批量提测,请检查!`, type: 'warning', offset: 150 })
-      } else {
+    async filtrateTest() { // 提测筛选
+      const data = this.curcentList.map(item => { return item.id })
+      const res = await reportdelivertestCheckStatus(data)
+      if (res.code === 200) {
         this.dialogTestReport = true
         this.$nextTick(() => {
           this.$refs.TestReport.init(7, this.curcentList.map(item => { return item.id }))
         })
       }
     },
-    filtrateAllow() { // 准出筛选
-      const data = this.curcentList.filter(item => { return item.id })
-      console.log(data, '查看1')
-      const res = []
-      data.map(item => {
-        if (item.statusString !== '测试中') {
-          res.push(item.id)
-        }
-      })
-      console.log(res, '查看')
-      if (res.length > 0) {
-        this.$message({ message: `任务${res}的状态不是【测试中】,无法批量准出,请检查!`, type: 'warning', offset: 150 })
-      } else {
+    async filtrateAllow() { // 准出筛选
+      const data = this.curcentList.map(item => { return item.id })
+      const res = await reportreleaseCheckStatus(data)
+      if (res.code === 200) {
         this.dialogClientReport = true
         this.$nextTick(() => {
           this.$refs.ClientReport.init(7, this.curcentList.map(item => { return item.id }))

+ 9 - 27
src/views/projectManage/version/components/taskList.vue

@@ -133,7 +133,7 @@ import scheduleList from './scheduleList'
 import modifySchedule from './modifySchedule'
 import taskDialog from '@/views/projectManage/taskList/dialog/taskDialog' // 任务状态修改(已上线/已提测/已准出)
 import { getVersionHomeTaskList } from '@/api/version.js'
-import { dailyReportCheckStatus } from '@/api/reportTemplate'
+import { dailyReportCheckStatus, reportreleaseCheckStatus, reportdelivertestCheckStatus } from '@/api/reportTemplate'
 export default {
   components: {
     TestReport,
@@ -302,38 +302,20 @@ export default {
       this.visibleSchedule = true
       this.selectTaskList = this.curcentList
     },
-    filtrateTest() { // 提测筛选
-      const data = this.curcentList.filter(item => { return item.id })
-      console.log(data, '查看1')
-      const res = []
-      data.map(item => {
-        if (item.statusString !== '开发中') {
-          res.push(item.id)
-        }
-      })
-      console.log(res, '查看')
-      if (res.length > 0) {
-        this.$message({ message: `任务${res}的状态不是【开发中】,无法批量提测,请检查!`, type: 'warning', offset: 150 })
-      } else {
+    async filtrateTest() { // 提测筛选
+      const data = this.curcentList.map(item => { return item.id })
+      const res = await reportdelivertestCheckStatus(data)
+      if (res.code === 200) {
         this.dialogTestReport = true
         this.$nextTick(() => {
           this.$refs.TestReport.init(7, this.curcentList.map(item => { return item.id }))
         })
       }
     },
-    filtrateAllow() { // 准出筛选
-      const data = this.curcentList.filter(item => { return item.id })
-      console.log(data, '查看1')
-      const res = []
-      data.map(item => {
-        if (item.statusString !== '测试中') {
-          res.push(item.id)
-        }
-      })
-      console.log(res, '查看')
-      if (res.length > 0) {
-        this.$message({ message: `任务${res}的状态不是【测试中】,无法批量准出,请检查!`, type: 'warning', offset: 150 })
-      } else {
+    async filtrateAllow() { // 准出筛选
+      const data = this.curcentList.map(item => { return item.id })
+      const res = await reportreleaseCheckStatus(data)
+      if (res.code === 200) {
         this.dialogClientReport = true
         this.$nextTick(() => {
           this.$refs.ClientReport.init(7, this.curcentList.map(item => { return item.id }))

+ 66 - 3
src/views/reportManagement/ReleaseReport/components/iconDisplay.vue

@@ -9,7 +9,7 @@
     >
       <el-table-column prop="缺陷总数" label="缺陷总数" align="center" min-width="100" />
       <el-table-column prop="已完成缺陷" label="已完成缺陷" align="center" min-width="100" />
-      <el-table-column prop="遗留缺陷" label="遗留缺陷" align="center" min-width="100" />
+      <el-table-column prop="遗留缺陷" label="遗留缺陷" align="center" min-width="100" />
       <el-table-column prop="缺陷解决率" label="缺陷解决率" align="center" min-width="100" />
     </el-table>
     <div id="line-echarts" class="line-echarts" />
@@ -46,7 +46,7 @@ import echarts from 'echarts'
 import { bugGetReportOutSumData, bugGetReportNotResolveData, bugGetReportDisDataByMember, bugGetReportDisDataByPri, bugGetReportDisDataByDate } from '@/api/reportTemplate' // 模版添删改查
 export default {
   props: {
-    taskIds: { type: Array, default: null }
+    taskIds: { type: [Array, Object], default: null }
   },
   data() {
     return {
@@ -58,12 +58,75 @@ export default {
   watch: {
     taskIds: {
       handler(newV) {
-        newV ? this.getRouterData(newV) : ''
+        if (newV) {
+          if (newV.statusString && newV.statusString === '已发送') {
+            const data = JSON.parse(newV.dataInfo)
+            this.getDataInfo(data)
+            console.log(data)
+          } else {
+            newV && newV.length > 0 ? this.getRouterData(newV) : ''
+          }
+        }
       },
       immediate: true
     }
   },
   methods: {
+    getDataInfo(res) {
+      this.bugTableData = [res.bugSum]
+      this.tableData = res.bugNotResolveSum
+      const data = res.bugDisByDate.yAxis.map(item => ({
+        ...item,
+        type: 'line',
+        smooth: true
+      }))
+      setTimeout(() => {
+        echarts.init(document.getElementById('line-echarts')).setOption({
+          color: ['#409EFF'],
+          title: { text: '新增缺陷趋势图', x: 'center', textStyle: { fontSize: 14, fontStyle: 'normal', fontWeight: 'normal' }},
+          tooltip: { axisPointer: { type: 'shadow' }},
+          grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true },
+          xAxis: [{ type: 'category', data: res.bugDisByDate.xAxis ? res.bugDisByDate.xAxis : ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期七'], axisTick: { alignWithLabel: true }}],
+          yAxis: [{ type: 'value', axisLine: { show: false }, axisTick: { show: false }, splitLine: { show: true, lineStyle: { type: 'dashed' }}}],
+          series: res.bugDisByDate.yAxis[0].data <= 0 ? [{ name: '直接访问', type: 'line', smooth: true, data: [0, 0, 0, 0, 0, 0, 0] }] : data
+        })
+      }, 200)
+
+      const lineShow = res.bugDisByMember.yAxis.map(item => ({
+        ...item,
+        type: 'bar',
+        barWidth: '20px'
+      }))
+      setTimeout(() => {
+        echarts.init(document.getElementById('lineShow')).setOption({
+          color: ['#409EFF'],
+          title: { text: '缺陷责任人分布', x: 'center', textStyle: { fontSize: 14, fontStyle: 'normal', fontWeight: 'normal' }},
+          tooltip: { axisPointer: { type: 'shadow' }},
+          grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true },
+          xAxis: [{ type: 'category', data: res.bugDisByMember.xAxis[0] ? res.bugDisByMember.xAxis : ['P0', 'P1', 'P2', 'P3'], axisTick: { alignWithLabel: true }}],
+          yAxis: [{ type: 'value', axisLine: { show: false }, axisTick: { show: false }, splitLine: { show: true, lineStyle: { type: 'dashed' }}}],
+          series: res.bugDisByMember.yAxis[0].data <= 0 ? [{ name: '无数据', type: 'bar', barWidth: '20px', data: [0, 0, 0, 0] }] : lineShow
+        })
+      }, 200)
+      const barShow = res.bugDisByPri.yAxis.map(item => ({
+        ...item,
+        type: 'bar',
+        barWidth: '20px'
+      }))
+      setTimeout(() => {
+        echarts.init(document.getElementById('barShow')).setOption({
+          backgroundColor: '#FFF',
+          color: ['#409EFF'],
+          title: { text: '缺陷等级分布', x: 'center', textStyle: { fontSize: 14, fontStyle: 'normal', fontWeight: 'normal' }},
+          tooltip: { axisPointer: { type: 'shadow' }},
+          grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true },
+          xAxis: [{ type: 'category', data: res.bugDisByPri.xAxis, axisTick: { alignWithLabel: true }}],
+          yAxis: [{ type: 'value', axisLine: { show: false }, axisTick: { show: false }, splitLine: { show: true, lineStyle: { type: 'dashed' }}}],
+          series: res.bugDisByPri.yAxis[0].data <= 0 ? [{ name: '无数据', type: 'bar', barWidth: '20px', data: [0, 0, 0, 0] }] : barShow
+        })
+      }, 200)
+    },
+
     async getRouterData(val) {
       const res = await bugGetReportOutSumData({ taskIds: val })
       if (res.code === 200) {

+ 23 - 18
src/views/reportManagement/ReleaseReport/components/releaseDetails.vue

@@ -9,7 +9,7 @@
           </div>
           <div class="details-statusString">{{ details.statusString }}</div>
         </div>
-        <div v-if="details.status === 1 ? false : true">
+        <div v-if="details.status === 3 ? false : true">
           <span class="didi-hover" @click="clientButtom(3,details)">发送</span>
           <span style="margin: 0 30px;" class="didi-hover" @click="clientButtom(2,details)">编辑</span>
           <span class="didi-hover" @click="dialog_testData = true">删除</span>
@@ -19,15 +19,15 @@
     <el-container>
       <el-main class="report-main">
         <div class="title"><div class="blur-column" /> 报告内容</div>
-        <el-row class="from-margin">
-          <el-col :span="24">
+        <el-row>
+          <el-col :span="24" class="task-bot">
             <span class="from-names">测试结果: </span>
             <span class="from-value">通过</span>
           </el-col>
         </el-row>
 
-        <el-row class="from-margin">
-          <el-col :span="12" class="Layout_space_between">
+        <el-row>
+          <el-col :span="12" class="Layout_space_between task-bot">
             <span class="from-name">计划准出时间:{{ details.releasePlanTime }}</span>
           </el-col>
           <el-col :span="12">
@@ -35,14 +35,14 @@
           </el-col>
         </el-row>
 
-        <el-row class="from-margin">
-          <el-col :span="24" class="Layout_space_between">
+        <el-row v-if="details.isDelay === 1">
+          <el-col :span="24" class="Layout_space_between task-bot">
             <span class="from-namea">准出延期原因 : {{ details.moduleName }}</span>
           </el-col>
         </el-row>
 
-        <el-row class="from-margin">
-          <el-col :span="12" class="Layout_space_between">
+        <el-row>
+          <el-col :span="12" class="Layout_space_between task-bot">
             <span class="from-name">计划开发周期:{{ details.testPlanTimeStart }}</span>
           </el-col>
           <el-col :span="12" class="Layout_space_between">
@@ -50,25 +50,25 @@
           </el-col>
         </el-row>
 
-        <el-row class="from-margin">
-          <el-col :span="12" class="Layout_space_between">
+        <el-row>
+          <el-col :span="12" class="Layout_space_between task-bot">
             <span class="from-name">计划测试周期:{{ details.testActualTimeStart }} </span>
           </el-col>
-          <el-col :span="12" class="Layout_space_between">
+          <el-col :span="12" class="Layout_space_between task-bot">
             <span class="from-namer">实际测试周期:{{ details.testActualTimeEnd }}</span>
           </el-col>
         </el-row>
 
-        <el-row class="from-margin">
-          <el-col :span="12" class="Layout_space_between">
+        <el-row>
+          <el-col :span="12" class="Layout_space_between task-bot">
             <span class="from-name">开发人员:{{ details.developer }}</span>
           </el-col>
-          <el-col :span="12" class="Layout_space_between">
+          <el-col :span="12" class="Layout_space_between task-bot">
             <span class="from-namer"> 测试人员:{{ details.tester }}</span>
           </el-col>
         </el-row>
         <div v-html="details.content" />
-        <icon-display :task-ids="details.taskIds" />
+        <icon-display :task-ids="details.statusString === '已发送' ? details : details.taskIds" />
       </el-main>
       <el-aside width="400px">
         <el-container>
@@ -95,14 +95,14 @@
             </div>
             <div class="Layout_flex_start">
               <div class="title-name">发送时间 : </div>
-              <div class="task-name">{{ details.gmtModify }}</div>
+              <div class="task-name">{{ details.reportTime }}</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 class="task-name didi-hover" @click="goTaskDetails(item.id)">{{ item.name }}</div>
             </div>
           </el-footer>
         </el-container>
@@ -158,6 +158,11 @@ export default {
         this.$refs.DailyReport.init(e, data)
       })
     },
+
+    goTaskDetails(id) {
+      this.$router.push({ name: '任务详情', query: { id: id }})
+    },
+
     async deleteDaily() { // 删除准出报告
       const res = await reportreleaseDelete({}, this.details.id)
       if (res.code === 200) {

+ 111 - 120
src/views/reportManagement/ReleaseReport/newReleaeTemplate.vue

@@ -8,56 +8,38 @@
       <el-form-item v-if="!releaseType" label="报告名称" prop="reportName" :rules="[{ required: true, message: '模版名称不能为空', trigger: 'change'}]"><br>
         <el-input v-model="from.reportName" size="small" style="width:100%;" placeholder="请输入模版名称(不可与现有模版重名)" />
       </el-form-item>
-      <div class="backStyle">模版内容</div>
+
+      <div class="backStyle">{{ !releaseType ? '报告模版' : '模版内容' }}</div>
 
       <el-row class="from-margin">
         <el-col :span="24">
-          <span class="from-names">测试结果: </span>
+          <span class="from-name">测试结果: </span>
           <span class="from-value">通过</span>
         </el-col>
       </el-row>
+
       <el-row class="from-margin">
         <el-col :span="12" class="Layout_space_between">
           <span class="from-name">计划准出时间: </span>
-          <el-date-picker
-            v-model="from.releasePlanTime"
-            :disabled="releaseType"
-            type="date"
-            placeholder="选择日期时间"
-            format="yyyy-MM-dd"
-            value-format="yyyy-MM-dd"
-            style="width: 100%;"
-            size="small"
-          />
+          <el-date-picker v-model="from.releasePlanTime" :disabled="releaseType" type="date" placeholder="选择日期时间" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: 100%;" size="small" />
         </el-col>
         <el-col :span="12">
-          <span class="from-namev"> 实际准出时间:{{ from.releaseActualTime }}</span>
+          <span class="from-namer"> 实际准出时间:{{ from.releaseActualTime }}</span>
         </el-col>
       </el-row>
 
-      <el-row class="from-margin">
+      <el-row v-if="from.isDelay === 1 || from.releasePlanTime > from.releaseActualTime" style="margin: 20px 0">
         <!-- 准出是否延期 1 延期,0未延期 -->
-        <el-col v-if="from.isDelay === 1 || from.releasePlanTime > from.releaseActualTime" :span="24" class="Layout_space_between">
+        <el-col :span="24" class="Layout_space_between">
           <span class="from-namea"><span v-if="!releaseType" style="color:red;">*</span>准出延期原因 : </span>
           <el-input v-model="from.delayReason" size="small" :disabled="releaseType" placeholder="请输入准出原因" style="width: 100%;" />
         </el-col>
       </el-row>
-      {{ from.devPlanTimeStart[1] }}
+
       <el-row class="from-margin">
         <el-col :span="12" class="Layout_space_between">
           <span class="from-name">计划开发周期: </span>
-          <el-date-picker
-            v-model="from.devPlanTimeStart"
-            type="daterange"
-            size="small"
-            :disabled="releaseType"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            format="yyyy-MM-dd"
-            value-format="yyyy-MM-dd"
-            style="width: -webkit-fill-available;"
-          />
+          <el-date-picker v-model="from.devPlanTimeStart" type="daterange" size="small" :disabled="releaseType" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: -webkit-fill-available;" />
         </el-col>
         <el-col :span="12" class="Layout_space_between">
           <span class="from-namer"> 实际开发周期:</span>
@@ -86,7 +68,7 @@
           <searchTeam :value.sync="from.tester" :clearable="true" :multiple="true" :disabled="releaseType" :size="'small'" style="width: 100%;" />
         </el-col>
       </el-row>
-      <normal-area id="report-template" :value.sync="content" :height="500" />
+      <normal-area id="report-template" :value.sync="fromData.content" :height="500" />
     </el-form>
     <div class="backStyle">缺陷统计</div>
     <iconDisplay :task-ids="taskId" />
@@ -97,8 +79,9 @@
 import '@/styles/PublicStyle/index.scss' // 公共css
 import searchTeam from '@/components/select/searchTeam' // 人员搜索
 import normalArea from '@/components/input/normalArea' // 富文本
+import 'tinymce/plugins/table'// 插入表格插件
 import iconDisplay from '@/views/reportManagement/ReleaseReport/components/iconDisplay.vue'
-import { settingAddReportModule, settingUpdateReportModule, settingGetReportModuleById, reportreleaseInitReportRelease, reportreleaseCreate, reportreleaseUpdate } from '@/api/reportTemplate' // 模版添删改查
+import { settingAddReportModule, settingUpdateReportModule, settingGetReportModuleById, reportreleaseInitReportRelease, reportreleaseCreate, reportreleaseUpdate, reportreleaseGetReportById } from '@/api/reportTemplate' // 模版添删改查
 
 export default {
   components: {
@@ -113,62 +96,34 @@ export default {
   data() {
     return {
       tpltId: '', // 模版id
+      reportId: '', // 报告id
       taskId: [], // 创建准出的任务
       content: {}, // from
-      from: { }, // from-date
+      from: {}, // from-date
+      fromData: {},
       releaseType: false // 新建模版还是新建准出报告
     }
   },
   watch: {
     templateId: {
       handler(newV) {
-        console.log(newV, '数据')
-        newV === '新建模版' ? this.releaseType = true : this.releaseType = false
-        if (newV !== '新建模版') {
+        if (newV === '新建模版') {
+          this.releaseType = true
+        } else {
           if (newV.id) {
-            this.from = newV
-            this.content = newV.content
+            this.reportId = newV.id
+            this.reportreleaseGetReportById(newV.id)
           } else {
-            this.tpltId = newV
-            if (newV !== 1 && newV !== 2) {
-              this.tpltId ? this.settingGetReportModuleById(newV) : ''
-            }
-            if (newV === 1) {
-              this.content = `
-          <p>背景</p><br>
-          <div>测试内容</div>
-          <p>功能测试</p>
-          <table border="1" style="border: 1px solid #DEE2E7" width="100%"><colgroup><col width="20%"><col width="20%"><col width="20%"><col width="20%"></colgroup><thead><tr><th>页面</th><th>模块</th><th>接口</th><th>测试结果</th><th>备注</th></tr></thead><tbody><tr><td><br></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><br></td><td><br></td><td><br></td><td><br></td><td><br></td></tr></tbody></table>
-          <p>兼容性测试-机型兼容</p>
-          <table border="1" style="border: 1px solid #DEE2E7" width="100%"><colgroup><col width="8%"><col width="8%"><col width="8%"><col width="8%"><col width="8%"><col width="8%"><col width="8%"></colgroup><thead><tr><th>机型</th><th>操作系统</th><th>分辨率</th><th>测试结果</th></tr></thead><tbody><tr><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><br></td><td><br></td><td><br></td><td><br></td></tr></tbody></table>
-          <p>兼容性测试-网络兼容</p>
-          <table border="1" style="border: 1px solid #DEE2E7" width="100%"><colgroup><col width="8%"><col width="8%"><col width="8%"><col width="8%"><col width="8%"><col width="8%"><col width="8%"></colgroup><thead><tr><th>网络类型</th><th>测试结果</th></tr></thead><tbody><tr><td><br></td><td><br></td></tr><tr><td><br></td><td><br></td></tr></tbody></table>
-          <p>产品验收</p>
-          <table border="1" style="border: 1px solid #DEE2E7" width="100%"><colgroup><col width="20%"><col width="20%"><col width="20%"><col width="20%"></colgroup><thead><tr><th>验收项</th><th>验收点</th><th>验收人</th><th>验收结果</th><th>备注</th></tr></thead><tbody><tr><td><br></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><br></td><td><br></td><td><br></td><td><br></td><td><br></td></tr></tbody></table>
-         `
-            }
-            if (newV === 2) {
-              this.content = `
-          <p>背景</p><br>
-          <div>测试内容</div>
-          <p>功能测试</p>
-          <table border="1" style="border: 1px solid #DEE2E7" width="100%"><colgroup><col width="20%"><col width="20%"><col width="20%"><col width="20%"></colgroup><thead><tr><th>页面</th><th>模块</th><th>接口</th><th>测试结果</th><th>备注</th></tr></thead><tbody><tr><td><br></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><br></td><td><br></td><td><br></td><td><br></td><td><br></td></tr></tbody></table>
-          <p>可靠性测试</p>
-          <table border="1" style="border: 1px solid #DEE2E7" width="100%"><colgroup><col width="8%"><col width="8%"><col width="8%"><col width="8%"></colgroup><thead><tr><th>子类</th><th>描述</th><th>测试结果</th><th>备注</th></tr></thead><tbody><tr><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><br></td><td><br></td><td><br></td><td><br></td></tr></tbody></table>
-          <p>稳定性测试</p>
-          <table border="1" style="border: 1px solid #DEE2E7" width="100%"><colgroup><col width="8%"><col width="8%"><col width="8%"><col width="8%"></colgroup><thead><tr><th>子类</th><th>描述</th><th>测试结果</th><th>备注</th></tr></thead><tbody><tr><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><br></td><td><br></td><td><br></td><td><br></td></tr></tbody></table>
-          <p>安全性测试</p>
-          <table border="1" style="border: 1px solid #DEE2E7" width="100%"><colgroup><col width="8%"><col width="8%"><col width="8%"><col width="8%"></colgroup><thead><tr><th>子类</th><th>描述</th><th>测试结果</th><th>备注</th></tr></thead><tbody><tr><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><br></td><td><br></td><td><br></td><td><br></td></tr></tbody></table>
-         `
-            }
+            this.tpsltId = newV
+            this.settingGetReportModuleById(newV)
           }
+          this.releaseType = false
         }
       },
       immediate: true
     },
     taskIds: {
       handler(newV) {
-        console.log(newV, '关联任务')
         if (newV) {
           this.taskId = newV
           this.reportreleaseInitReportRelease()
@@ -178,6 +133,42 @@ export default {
     }
   },
   methods: {
+    async reportreleaseGetReportById(val) { // 获取准出报告数据
+      const res = await reportreleaseGetReportById(val)
+      if (res.code === 200) {
+        this.$nextTick(() => {
+          this.taskId = res.data.taskIds
+        })
+        const from = res.data
+        this.$set(this.from, 'reportName', from.reportName) // 报告名称
+        this.$set(this.from, 'releasePlanTime', from.releasePlanTime) // 计划准出时间
+        this.$set(this.from, 'releaseActualTime', from.releaseActualTime) // 实际准出时间
+        this.$set(this.from, 'isDelay', from.isDelay) // 准出是否延期 1 延期,0未延期
+        this.$set(this.from, 'delayReason', from.delayReason) // 是否延期
+        this.$set(this.from, 'content', from.content) // 富文本
+        this.$set(this.from, 'delayReason', from.delayReason) // 延期原因
+        this.fromData.content = from.content // 富文本
+        if (from.devPlanTimeStart) {
+          this.$set(this.from, 'devPlanTimeStart', [from.devPlanTimeStart, from.devPlanTimeEnd]) // 计划开发开始时间-计划开发结束时间
+        }
+        if (from.devActualTimeStart) {
+          this.$set(this.from, 'devActualTimeStart', [from.devActualTimeStart, from.devActualTimeEnd]) // 实际开发开始时间-实际开发结束时间
+        }
+        if (from.testPlanTimeStart) {
+          this.$set(this.from, 'testPlanTimeStart', [from.testPlanTimeStart, from.testPlanTimeEnd]) // 计划测试开始时间-计划测试结束时间
+        }
+        if (from.testActualTimeStart) {
+          this.$set(this.from, 'testActualTimeStart', [from.testActualTimeStart, from.testActualTimeEnd]) // 实际测试开始时间-实际测试结束时间
+        }
+        this.from.taskIds = from.taskId // 关联任务
+        this.from.bizId = from.bizId // 业务线
+        this.from.moduleId = from.moduleId // 模块id
+        this.from.developer = from.developer ? from.developer.split() : null // 开发人员
+        this.from.tester = from.tester ? from.tester.split() : null // 测试人员
+        console.log(this.from, 'bianji')
+      }
+    },
+
     async reportreleaseInitReportRelease() { // 获取表单数据
       const res = await reportreleaseInitReportRelease({ taskIds: this.taskId })
       if (res.code === 200) {
@@ -188,7 +179,8 @@ export default {
     async settingGetReportModuleById(val) { // 获取富文本内容
       const res = await settingGetReportModuleById(val)
       if (res.code === 200) {
-        this.content = res.data.content
+        this.fromData = res.data
+        console.log(res.data)
       }
     },
 
@@ -196,33 +188,42 @@ export default {
     reportreleaseCreate(val) {
       this.$refs.fromCreateData.validate((valid) => {
         if (valid) {
-          console.log(this.from, 'cdfcfd')
           if (val) {
-            const data = this.from
-            data.id = this.from.id
-
+            const data = {}
+            data.id = this.reportId
+            data.reportName = this.from.reportName // 报告名称
             data.releasePlanTime = this.from.releasePlanTime // 计划准出时间
-
             data.releaseActualTime = this.from.releaseActualTime // 实际准出时间
-
-            data.isDelay = this.from.isDelay // 准出是否延期 1 延期,0未延期
-
-            data.delayReason = this.from.delayReason // 是否延期
-
-            data.devPlanTimeStart = this.from.devPlanTimeStart[0] // 计划开发开始时间
-            data.devPlanTimeEnd = this.from.devPlanTimeStart[1] // 计划开发结束时间
-
-            data.devActualTimeStart = this.from.devActualTimeStart[0] // 实际开发开始时间
-            data.devActualTimeEnd = this.from.devActualTimeStart[1] // 实际开发结束时间
-
-            data.testPlanTimeStart = this.from.testPlanTimeStart // 计划测试开始时间
-            data.testPlanTimeEnd = this.from.testPlanTimeStart // 计划测试结束时间
-
-            data.testActualTimeStart = this.from.testActualTimeStart[0] // 实际测试开始时间
-            data.testActualTimeEnd = this.from.testActualTimeStart[1] // 实际测试结束时间
-
+            if (this.from.releasePlanTime > this.from.releaseActualTime) {
+              data.isDelay = 1// 准出是否延期 1 延期,0未延期
+              data.delayReason = this.from.delayReason // 是否延期
+            } else {
+              data.isDelay = 0
+            }
+            if (this.from.devPlanTimeStart) {
+              data.devPlanTimeStart = this.from.devPlanTimeStart[0] // 计划开发开始时间
+              data.devPlanTimeEnd = this.from.devPlanTimeStart[1] // 计划开发结束时间
+            }
+            if (this.from.devActualTimeStart) {
+              data.devActualTimeStart = this.from.devActualTimeStart[0] // 实际开发开始时间
+              data.devActualTimeEnd = this.from.devActualTimeStart[1] // 实际开发结束时间
+            }
+            if (this.from.testPlanTimeStart) {
+              data.testPlanTimeStart = this.from.testPlanTimeStart[0] // 计划测试开始时间
+              data.testPlanTimeEnd = this.from.testPlanTimeStart[1] // 计划测试结束时间
+            }
+            if (this.from.testActualTimeStart) {
+              data.testActualTimeStart = this.from.testActualTimeStart[0] // 实际测试开始时间
+              data.testActualTimeEnd = this.from.testActualTimeStart[1] // 实际测试结束时间
+            }
+            data.testResult = 1 // 测试结果 状态 1通过 2未通过
+            data.taskIds = this.taskId // 关联任务
+            data.bizId = this.from.bizId // 业务线
+            data.moduleId = this.from.moduleId // 模块id
+            data.content = this.fromData.content // 富文本
             data.developer = this.from.developer ? this.from.developer.toString() : null // 开发人员
             data.tester = this.from.tester ? this.from.tester.toString() : null // 测试人员
+            console.log(data, '更新')
             reportreleaseUpdate(data).then(res => {
               if (res.code === 200) {
                 this.$emit('SaveNextStep', res.data)
@@ -230,39 +231,36 @@ export default {
               }
             })
           } else {
-            const data = this.from
-
+            const data = {}
+            data.reportName = this.from.reportName // 报告名称
             data.releasePlanTime = this.from.releasePlanTime // 计划准出时间
-
             data.releaseActualTime = this.from.releaseActualTime // 实际准出时间
-
             if (this.from.releasePlanTime > this.from.releaseActualTime) {
               data.isDelay = 1// 准出是否延期 1 延期,0未延期
               data.delayReason = this.from.delayReason // 是否延期
             } else {
               data.isDelay = 0
             }
-
             if (this.from.devPlanTimeStart) {
               data.devPlanTimeStart = this.from.devPlanTimeStart[0] // 计划开发开始时间
               data.devPlanTimeEnd = this.from.devPlanTimeStart[1] // 计划开发结束时间
             }
-
-            // data.devActualTimeStart = this.from.devActualTimeStart[0] // 实际开发开始时间
-            // data.devActualTimeEnd = this.from.devActualTimeStart[1] // 实际开发结束时间
-
-            // data.testPlanTimeStart = this.from.testPlanTimeStart // 计划测试开始时间
-            // data.testPlanTimeEnd = this.from.testPlanTimeStart // 计划测试结束时间
-
-            // data.testActualTimeStart = this.from.testActualTimeStart[0] // 实际测试开始时间
-            // data.testActualTimeEnd = this.from.testActualTimeStart[1] // 实际测试结束时间
-
+            if (this.from.devActualTimeStart) {
+              data.devActualTimeStart = this.from.devActualTimeStart[0] // 实际开发开始时间
+              data.devActualTimeEnd = this.from.devActualTimeStart[1] // 实际开发结束时间
+            }
+            if (this.from.testPlanTimeStart) {
+              data.testPlanTimeStart = this.from.testPlanTimeStart[0] // 计划测试开始时间
+              data.testPlanTimeEnd = this.from.testPlanTimeStart[1] // 计划测试结束时间
+            }
+            if (this.from.testActualTimeStart) {
+              data.testActualTimeStart = this.from.testActualTimeStart[0] // 实际测试开始时间
+              data.testActualTimeEnd = this.from.testActualTimeStart[1] // 实际测试结束时间
+            }
             data.taskIds = this.taskId // 关联任务
-
             data.bizId = localStorage.getItem('bizId') // 业务线
-
-            data.moduleId = this.tpltId // 模块id
-
+            data.moduleId = this.fromData.id // 模块id
+            data.content = this.fromData.content // 富文本
             data.developer = this.from.developer ? this.from.developer.toString() : null // 开发人员
             data.tester = this.from.tester ? this.from.tester.toString() : null // 测试人员
             reportreleaseCreate(data).then(res => {
@@ -311,7 +309,7 @@ export default {
 
 <style lang="scss" scoped>
   .backStyle {
-    font-size:16px;
+    font-size:14px;
     font-family:MicrosoftYaHei;
     line-height:19px;
     color:rgba(51,51,51,1);
@@ -330,19 +328,12 @@ export default {
     .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 {
+      width: 150px !important;
       margin-left:10px;
-      vertical-align: sub;
     }
     .from-value {
       margin-left: 30px;

+ 27 - 35
src/views/reportManagement/ReleaseReport/releaePreview.vue

@@ -2,17 +2,16 @@
   <!-- 预览准出报告 -->
   <div class="parent-style">
     <div class="backStyle"> 邮件列表</div>
-    <div class="Layout_space_between" style="margin-bottom: 10px;">
+    <div class="Layout_space_between report-margin" style="margin-bottom: 10px;">
       <div class="div1">收件人</div>
       <searchTeam :value.sync="form.name" :clearable="true" :multiple="true" style="width:100%" />
     </div>
-    <div class="Layout_space_between">
+    <div class="Layout_space_between report-margin">
       <div class="div1">抄送</div>
       <searchTeam :value.sync="form.names" :clearable="true" :multiple="true" style="width:100%" />
     </div>
     <div id="repot-list">
-      <div class="backStyle">模版名称 :{{ fromCreateData.reportName }}</div>
-      <div class="backStyle">模版内容</div>
+      <div class="reportName">{{ fromCreateData.reportName }}</div>
 
       <el-row>
         <el-col :span="24">
@@ -21,45 +20,45 @@
         </el-col>
       </el-row>
 
-      <el-row class="from-margin">
+      <el-row>
         <el-col :span="12" class="Layout_space_between">
-          <span class="from-name">计划准出时间:{{ fromCreateData.releasePlanTime }}</span>
+          <span class="parent-style">计划准出时间:{{ fromCreateData.releasePlanTime }}</span>
         </el-col>
         <el-col :span="12">
-          <span class="from-namev"> 实际准出时间:{{ fromCreateData.releaseActualTime }}</span>
+          <span class="parent-style"> 实际准出时间:{{ fromCreateData.releaseActualTime }}</span>
         </el-col>
       </el-row>
 
-      <el-row class="from-margin">
+      <el-row v-if="fromCreateData.releasePlanTime > fromCreateData.releaseActualTime">
         <el-col :span="24" class="Layout_space_between">
-          <span class="from-namea">准出延期原因 : {{ fromCreateData.moduleName }}</span>
+          <span class="parent-style">准出延期原因 : {{ fromCreateData.delayReason }}</span>
         </el-col>
       </el-row>
 
-      <el-row class="from-margin">
+      <el-row>
         <el-col :span="12" class="Layout_space_between">
-          <span class="from-name">计划开发周期:{{ fromCreateData.testPlanTimeStart }}</span>
+          <span class="parent-style">计划开发周期:{{ fromCreateData.testPlanTimeStart }}</span>
         </el-col>
         <el-col :span="12" class="Layout_space_between">
-          <span class="from-namer"> 实际开发周期:{{ fromCreateData.testPlanTimeEnd }}</span>
+          <span class="parent-style"> 实际开发周期:{{ fromCreateData.testPlanTimeEnd }}</span>
         </el-col>
       </el-row>
 
-      <el-row class="from-margin">
+      <el-row>
         <el-col :span="12" class="Layout_space_between">
-          <span class="from-name">计划测试周期:{{ fromCreateData.testActualTimeStart }} </span>
+          <span class="parent-style">计划测试周期:{{ fromCreateData.testActualTimeStart }} </span>
         </el-col>
         <el-col :span="12" class="Layout_space_between">
-          <span class="from-namer">实际测试周期:{{ fromCreateData.testActualTimeEnd }}</span>
+          <span class="parent-style">实际测试周期:{{ fromCreateData.testActualTimeEnd }}</span>
         </el-col>
       </el-row>
 
-      <el-row class="from-margin">
+      <el-row>
         <el-col :span="12" class="Layout_space_between">
-          <span class="from-name">开发人员:{{ fromCreateData.developer }}</span>
+          <span class="parent-style">开发人员:{{ fromCreateData.developer }}</span>
         </el-col>
         <el-col :span="12" class="Layout_space_between">
-          <span class="from-namer"> 测试人员:{{ fromCreateData.tester }}</span>
+          <span class="parent-style"> 测试人员:{{ fromCreateData.tester }}</span>
         </el-col>
       </el-row>
       <div v-html="fromCreateData.content" />
@@ -142,25 +141,9 @@ export default {
     font-family:Microsoft Sans Serif;
     font-weight:400;
     line-height:22px;
+    margin: 10px 0;
     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);
@@ -187,4 +170,13 @@ export default {
     border-radius: 4px;
     margin: 10px 0;
   }
+  .reportName {
+    font-size: 20px;
+    font-weight: bold;
+    border-radius: 4px;
+    margin: 20px 0;
+  }
+  .report-margin {
+    margin-left: 20px;
+  }
 </style>

+ 18 - 16
src/views/reportManagement/Testing/TestingPreview.vue

@@ -11,48 +11,47 @@
       <searchTeam :value.sync="form.names" :clearable="true" :multiple="true" style="width:100%" />
     </div>
     <div id="repot-list">
-      <div class="backStyle">报告名称 :{{ fromCreateData.reportName }}</div>
-      <div class="backStyle">报告内容</div>
+      <div class="backStyle">{{ fromCreateData.reportName }}</div>
 
-      <el-row class="from-margin">
+      <el-row>
         <el-col :span="12" class="Layout_space_between">
-          <span class="from-name">计划提测时间:{{ fromCreateData.deliverTestPlanTime }}</span>
+          <span class="parent-style">计划提测时间:{{ fromCreateData.deliverTestPlanTime }}</span>
         </el-col>
         <el-col :span="12">
-          <span class="from-namev">实际提测时间:{{ fromCreateData.deliverTestActualTime }}</span>
+          <span class="parent-style">实际提测时间:{{ fromCreateData.deliverTestActualTime }}</span>
         </el-col>
       </el-row>
 
-      <el-row v-show="fromCreateData.isDelay === 1" class="from-margin">
+      <el-row v-show="fromCreateData.isDelay === 1">
         <el-col :span="24" class="Layout_space_between">
-          <span class="from-namea">提测延期原因 : {{ fromCreateData.delayReason }}</span>
+          <span class="parent-style">提测延期原因 : {{ fromCreateData.delayReason }}</span>
         </el-col>
       </el-row>
 
-      <el-row class="from-margin">
+      <el-row>
         <el-col :span="12" class="Layout_space_between">
-          <span class="from-name">计划开发时间:{{ fromCreateData.devPlanTimeStart + '至' + fromCreateData.devPlanTimeEnd }}</span>
+          <span class="parent-style">计划开发时间:{{ fromCreateData.devPlanTimeStart + '至' + fromCreateData.devPlanTimeEnd }}</span>
         </el-col>
         <el-col :span="12" class="Layout_space_between">
-          <span class="from-namer">实际开发时间:{{ fromCreateData.devActualTimeStart + '至' + fromCreateData.devActualTimeEnd }}</span>
+          <span class="parent-style">实际开发时间:{{ fromCreateData.devActualTimeStart + '至' + fromCreateData.devActualTimeEnd }}</span>
         </el-col>
       </el-row>
 
-      <el-row class="from-margin">
+      <el-row>
         <el-col :span="12" class="Layout_space_between">
-          <span class="from-name">是否跟版:{{ fromCreateData.followVersion === 2 ? '否' : '是' }} </span>
+          <span class="parent-style">是否跟版:{{ fromCreateData.followVersion === 2 ? '否' : '是' }} </span>
         </el-col>
         <el-col :span="12" class="Layout_space_between">
-          <span class="from-namer">跟版客户端:{{ fromCreateData.involveAppString }}</span>
+          <span class="parent-style">跟版客户端:{{ fromCreateData.involveAppString }}</span>
         </el-col>
       </el-row>
 
-      <el-row class="from-margin">
+      <el-row>
         <el-col :span="12" class="Layout_space_between">
-          <span class="from-name">CodeReview:{{ fromCreateData.isCodeReview === 0 ? '否' : '是' }}</span>
+          <span class="parent-style">CodeReview:{{ fromCreateData.isCodeReview === 0 ? '否' : '是' }}</span>
         </el-col>
         <el-col :span="12" class="Layout_space_between">
-          <span class="from-namer">执行人:{{ fromCreateData.codeReviewExecutor }}</span>
+          <span class="parent-style">执行人:{{ fromCreateData.codeReviewExecutor }}</span>
         </el-col>
       </el-row>
       <div class="backStyle">需求列表</div>
@@ -207,4 +206,7 @@ export default {
     border-radius: 4px;
     margin: 10px 0;
   }
+  .report-margin {
+    margin-bottom: 20px;
+  }
 </style>

+ 19 - 15
src/views/reportManagement/Testing/components/deliverDetails.vue

@@ -23,8 +23,8 @@
       <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">
+        <el-row>
+          <el-col :span="12" class="Layout_space_between task-bot">
             <span class="from-name">计划提测时间:{{ details.deliverTestPlanTime }}</span>
           </el-col>
           <el-col :span="12">
@@ -32,35 +32,35 @@
           </el-col>
         </el-row>
 
-        <el-row v-show="details.isDelay === 1" class="from-margin">
-          <el-col :span="24" class="Layout_space_between">
+        <el-row v-show="details.isDelay === 1">
+          <el-col :span="24" class="Layout_space_between task-bot">
             <span class="from-namea">提测延期原因 : {{ details.delayReason }}</span>
           </el-col>
         </el-row>
 
-        <el-row class="from-margin">
-          <el-col :span="12" class="Layout_space_between">
+        <el-row>
+          <el-col :span="12" class="Layout_space_between task-bot">
             <span class="from-name">计划开发时间:{{ details.devPlanTimeStart + '至' + details.devPlanTimeEnd }}</span>
           </el-col>
-          <el-col :span="12" class="Layout_space_between">
+          <el-col :span="12" class="Layout_space_between task-bot">
             <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">
+        <el-row>
+          <el-col :span="12" class="Layout_space_between task-bot">
             <span class="from-name">是否跟版:{{ details.followVersion === 2 ? '否' : '是' }} </span>
           </el-col>
-          <el-col :span="12" class="Layout_space_between">
+          <el-col v-show="details.followVersion === 1" :span="12" class="Layout_space_between task-bot">
             <span class="from-namer">跟版客户端:{{ details.involveAppString }}</span>
           </el-col>
         </el-row>
 
-        <el-row class="from-margin">
-          <el-col :span="12" class="Layout_space_between">
+        <el-row>
+          <el-col :span="12" class="Layout_space_between task-bot">
             <span class="from-name">CodeReview:{{ details.isCodeReview === 0 ? '否' : '是' }}</span>
           </el-col>
-          <el-col :span="12" class="Layout_space_between">
+          <el-col v-show="details.isCodeReview === 1" :span="12" class="Layout_space_between task-bot">
             <span class="from-namer">执行人:{{ details.codeReviewExecutor }}</span>
           </el-col>
         </el-row>
@@ -112,14 +112,14 @@
             </div>
             <div class="Layout_flex_start">
               <div class="title-name">发送时间 : </div>
-              <div class="task-name">{{ details.gmtModify }}</div>
+              <div class="task-name">{{ details.reportTime }}</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 class="task-name didi-hover" @click="goTaskDetails(item.id)">{{ item.name }}</div>
             </div>
           </el-footer>
         </el-container>
@@ -213,6 +213,10 @@ export default {
           this.$message({ type: 'success', message: '删除成功' })
         }
       }
+    },
+
+    goTaskDetails(id) {
+      this.$router.push({ name: '任务详情', query: { id: id }})
     }
   }
 }

+ 64 - 54
src/views/reportManagement/Testing/newTestingTemplate.vue

@@ -1,14 +1,14 @@
 <template>
   <!-- 新建报告模版 -->
   <div class="report-container">
-    <el-form ref="fromCreateData" :model="fromCreateData">
-      <el-form-item v-if="releaseType === 'new'" label="模版名称" prop="moduleName" :rules="[{ required: true, message: '模版名称不能为空', trigger: 'change'}]"><br>
+    <el-form ref="fromCreateData" :model="from">
+      <el-form-item v-if="releaseType" label="模版名称" prop="moduleName" :rules="[{ required: true, message: '模版名称不能为空', trigger: 'change'}]"><br>
         <el-input v-model="fromCreateData.moduleName" size="small" style="width:100%;" placeholder="请输入模版名称(不可与现有模版重名)" />
       </el-form-item>
-      <el-form-item v-if="releaseType === 'create'" label="报告名称" prop="reportName" :rules="[{ required: true, message: '报告名称不能为空', trigger: 'change'}]"><br>
-        <el-input v-model="fromCreateData.reportName" size="small" style="width:100%;" placeholder="请输入报告名称名称" />
+      <el-form-item v-if="!releaseType" label="报告名称" prop="reportName" :rules="[{ required: true, message: '报告名称不能为空', trigger: 'change'}]"><br>
+        <el-input v-model="from.reportName" size="small" style="width:100%;" placeholder="请输入报告名称名称" />
       </el-form-item>
-      <div class="backStyle">{{ releaseType === 'create'? "报告内容" : '模版内容' }}</div>
+      <div class="backStyle">{{ !releaseType? "报告内容" : '模版内容' }}</div>
 
       <el-row class="from-margin">
         <el-col :span="12" class="Layout_space_between">
@@ -18,7 +18,7 @@
             type="date"
             placeholder="选择日期时间"
             format="yyyy.MM.dd"
-            :disabled="releaseType === 'new'"
+            :disabled="releaseType"
             value-format="yyyy.MM.dd"
             style="width: 100%;"
             size="small"
@@ -29,21 +29,21 @@
         </el-col>
       </el-row>
 
-      <el-row class="from-margin">
-        <el-col v-show="from.isDelay === 1" :span="24" class="Layout_space_between">
-          <span class="from-namea"><span v-if="releaseType === 'create'" style="color:red;">*</span>提测延期原因 : </span>
-          <el-input v-model="from.delayReason" size="small" :disabled="releaseType === 'new'" placeholder="请输入准出原因" style="width: 100%;" />
+      <el-row v-if="from.isDelay === 1" class="from-margin">
+        <el-col :span="24" class="Layout_space_between">
+          <span class="from-namea"><span v-if="!releaseType" style="color:red;">*</span>提测延期原因 : </span>
+          <el-input v-model="from.delayReason" size="small" :disabled="releaseType" placeholder="请输入准出原因" style="width: 100%;" />
         </el-col>
       </el-row>
-      {{ from.devPlanTimeStart }}
+
       <el-row class="from-margin">
         <el-col :span="12" class="Layout_space_between">
           <span class="from-name">计划开发时间:</span>
-          <el-date-picker v-model="from.devPlanTimeStart" type="daterange" :disabled="releaseType === 'new'" size="small" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: -webkit-fill-available;" />
+          <el-date-picker v-model="from.devPlanTimeStart" type="daterange" :disabled="releaseType" size="small" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: -webkit-fill-available;" />
         </el-col>
         <el-col :span="12" class="Layout_space_between">
           <span class="from-namer"> 实际开发时间:</span>
-          <el-date-picker v-model="from.devActualTimeStart" type="daterange" size="small" :disabled="releaseType === 'new'" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: -webkit-fill-available;" />
+          <el-date-picker v-model="from.devActualTimeStart" type="daterange" size="small" :disabled="releaseType" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: -webkit-fill-available;" />
         </el-col>
       </el-row>
 
@@ -51,7 +51,7 @@
         <el-col :span="12" class="Layout_flex_start">
           <span class="from-name">是否跟版: </span>
           <template>
-            <el-radio-group v-model="from.followVersion" :disabled="releaseType === 'new'">
+            <el-radio-group v-model="from.followVersion" :disabled="releaseType">
               <el-radio :label="2">否</el-radio>
               <el-radio :label="1">是</el-radio>
             </el-radio-group>
@@ -59,7 +59,7 @@
         </el-col>
         <el-col v-if="from.followVersion === 1" :span="12" class="Layout_flex_start">
           <span class="from-namer">跟版客户端</span>
-          <el-select v-model="from.involveAppString" filterable remote size="small" :disabled="releaseType === 'new'" clearable placeholder="请选择" style="width: -webkit-fill-available;">
+          <el-select v-model="from.involveAppString" filterable remote size="small" :disabled="releaseType" clearable placeholder="请选择" style="width: -webkit-fill-available;">
             <el-option v-for="item in appClient" :key="item.code" :label="item.msg" :value="item.code" />
           </el-select>
         </el-col>
@@ -69,7 +69,7 @@
         <el-col :span="12" class="Layout_flex_start">
           <span class="from-name"><span style="color: red;">*</span>CodeReview:</span>
           <template>
-            <el-radio-group v-model="from.isCodeReview" :disabled="releaseType === 'new'">
+            <el-radio-group v-model="from.isCodeReview" :disabled="releaseType">
               <el-radio :label="0">否</el-radio>
               <el-radio :label="1">是</el-radio>
             </el-radio-group>
@@ -77,7 +77,7 @@
         </el-col>
         <el-col v-if="from.isCodeReview === 1" :span="12" class="Layout_space_between">
           <span class="from-namer"><span style="color: red;">*</span>执行人:</span>
-          <searchTeam :value.sync="from.codeReviewExecutor" :clearable="true" :multiple="true" :size="'small'" :disabled="releaseType === 'new'" style="width: 100%;" />
+          <searchTeam :value.sync="from.codeReviewExecutor" :clearable="true" :multiple="true" :size="'small'" :disabled="releaseType" style="width: 100%;" />
         </el-col>
       </el-row>
     </el-form>
@@ -108,8 +108,9 @@
 import '@/styles/PublicStyle/index.scss' // 公共css
 import searchTeam from '@/components/select/searchTeam' // 人员搜索
 import normalArea from '@/components/input/normalArea' // 富文本
+import 'tinymce/plugins/table'// 插入表格插件
 import { configShowTaskEnum } from '@/api/taskIndex'
-import { settingAddReportModule, settingUpdateReportModule, settingGetReportModuleById, reportdelivertestInitReportRelease, reportdelivertestCreate, reportdelivertestGetRequiresByTaskIds, reportdelivertestUpdate } from '@/api/reportTemplate' // 模版添删改查
+import { settingAddReportModule, settingUpdateReportModule, settingGetReportModuleById, reportdelivertestInitReportRelease, reportdelivertestCreate, reportdelivertestGetRequiresByTaskIds, reportdelivertestUpdate, reportdelivertestGetReportById } from '@/api/reportTemplate' // 模版添删改查
 
 export default {
   components: {
@@ -117,8 +118,7 @@ export default {
     searchTeam
   },
   props: {
-    templateId: { type: [String, Number], default: null }, // 模版id
-    type: { type: String, default: 'new' },
+    templateId: { type: [String, Number, Object], default: null }, // 模版id
     taskIds: { type: Array, default: null }
   },
   data() {
@@ -127,54 +127,33 @@ export default {
       tpltId: '', // 模版id
       taskId: [], // 创建准出的任务
       fromCreateData: {}, // from
-      from: {},
+      from: {
+        reportName: ''
+      },
       appClient: [], // 跟版客户端
-      releaseType: '' // 新建模版还是新建准出报告
+      releaseType: true // 新建模版还是新建准出报告
     }
   },
   watch: {
     templateId: {
       handler(newV) {
         console.log(newV, '更新')
-        if (newV.id) {
-          console.log(newV, '有数据')
-          this.fromCreateData = newV
-          this.from = newV
+        if (newV === '新建模版') {
+          this.releaseType = true
         } else {
-          if (newV !== 1 && newV !== 2) {
+          this.releaseType = false
+          if (newV.id) {
+            console.log(newV, '有数据')
+            this.reportdelivertestGetReportById(newV.id)
+          } else {
             console.log(newV, 'tmepId')
             this.tpltId = newV
             this.tpltId ? this.settingGetReportModuleById(newV) : ''
           }
-          if (newV === 1) {
-            this.tpltId = newV
-            this.fromCreateData.content = `
-          <p>背景</p><br>
-          <div>测试内容</div>
-          <p>功能测试</p>
-          <table border="1" style="border: 1px solid #DEE2E7" width="100%"><colgroup><col width="20%"><col width="20%"><col width="20%"><col width="20%"></colgroup><thead><tr><th>验收项</th><th>验收点</th><th>验收人</th><th>验收结果</th><th>备注</th></tr></thead><tbody><tr><td><br></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><br></td><td><br></td><td><br></td><td><br></td><td><br></td></tr></tbody></table>
-         `
-          }
-          if (newV === 2) {
-            this.tpltId = newV
-            this.fromCreateData.content = `
-          <p>背景</p><br>
-          <div>测试内容</div>
-          <p>功能测试</p>
-          <table border="1" style="border: 1px solid #DEE2E7" width="100%"><colgroup><col width="20%"><col width="20%"><col width="20%"><col width="20%"></colgroup><thead><tr><th>页面</th><th>模块</th><th>接口</th><th>测试结果</th><th>备注</th></tr></thead><tbody><tr><td><br></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><br></td><td><br></td><td><br></td><td><br></td><td><br></td></tr></tbody></table>
-          <table border="1" style="border: 1px solid #DEE2E7" width="100%"><colgroup><col width="8%"><col width="8%"><col width="8%"><col width="8%"></colgroup><thead><tr><th>子类</th><th>描述</th><th>测试结果</th><th>备注</th></tr></thead><tbody><tr><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><br></td><td><br></td><td><br></td><td><br></td></tr></tbody></table>
-         `
-          }
         }
       },
       immediate: true
     },
-    type: {
-      handler(newV) {
-        this.releaseType = newV
-      },
-      immediate: true
-    },
     taskIds: {
       handler(newV) {
         console.log(newV, ' taskids')
@@ -190,6 +169,23 @@ export default {
     this.configShowTaskEnum()
   },
   methods: {
+    async reportdelivertestGetReportById(val) { // 获取提测报告数据
+      const res = await reportdelivertestGetReportById(val)
+      if (res.code === 200) {
+        const from = res.data
+        this.$set(this.from, 'reportName', from.reportName) // 报告名称
+        this.$set(this.fromCreateData, 'content', from.content) // 报告名称
+        this.$set(this.from, 'deliverTestPlanTime', from.deliverTestPlanTime) // 计划提测时间
+        this.$set(this.from, 'devPlanTimeStart', [from.devPlanTimeStart, from.devPlanTimeEnd]) // 计划开发时间
+        this.$set(this.from, 'devActualTimeStart', [from.devActualTimeStart, from.devActualTimeEnd]) // 实际开发时间
+        this.from.deliverTestActualTime = from.deliverTestActualTime // 实际提测时间
+        this.from.involveAppString = from.involveAppString // 跟版客户端
+        this.from.followVersion = from.followVersion // 是否跟版1 跟版 2 不跟版
+        this.from.isCodeReview = from.isCodeReview // 是否code review 0:否 1:是
+        this.from.codeReviewExecutor = from.codeReviewExecutor ? from.codeReviewExecutor.split() : '' // 执行人
+      }
+    },
+
     async reportdelivertestInitReportRelease(val) { // 报告时间
       const res = await reportdelivertestInitReportRelease({ taskIds: val })
       if (res.code === 200) {
@@ -241,11 +237,25 @@ export default {
             })
           } else {
             const data = {}
-            data.reportName = this.fromCreateData.reportName
+            data.reportName = this.from.reportName
             data.content = this.fromCreateData.content
             data.taskIds = this.taskId
             data.bizId = localStorage.getItem('bizId')
             data.moduleId = this.tpltId
+            data.deliverTestPlanTime = this.from.deliverTestPlanTime // 计划提测时间
+            data.deliverTestActualTime = this.from.deliverTestActualTime // 实际提测时间
+            if (this.from.devPlanTimeStart) {
+              data.devPlanTimeStart = this.from.devPlanTimeStart[0] // 计划开发开始时间
+              data.devPlanTimeEnd = this.from.devPlanTimeStart[1] // 计划开发结束时间
+            }
+            if (this.from.devActualTimeStart) {
+              data.devActualTimeStart = this.from.devActualTimeStart[0] // 实际开发开始时间
+              data.devActualTimeEnd = this.from.devActualTimeStart[1] // 实际开发结束时间
+            }
+            data.involveAppString = this.from.involveAppString // 跟版客户端
+            data.followVersion = this.from.followVersion // 是否跟版1 跟版 2 不跟版
+            data.isCodeReview = this.from.isCodeReview // 是否code review 0:否 1:是
+            data.codeReviewExecutor = this.from.codeReviewExecutor ? this.from.codeReviewExecutor.toString() : '' // 执行人
             reportdelivertestCreate(data).then(res => {
               if (res.code === 200) {
                 this.$message({ type: 'success', message: '创建成功' })
@@ -312,7 +322,7 @@ export default {
       width: 119px !important;
     }
     .from-namer {
-      width: 140px !important;
+      width: 150px !important;
       margin-left:10px;
     }
     .from-namev {

+ 15 - 16
src/views/reportManagement/components/DailyReport.vue

@@ -17,7 +17,7 @@
         </el-row>
 
         <div ref="refName" style="max-height: 260px; overflow:scroll; overflow-x: hidden">
-          <el-row v-for="(item, index) in selectTemplate" :key="index" type="flex" justify="center" @mouseover.native="item.operation = true" @mouseleave.native="item.operation = false">
+          <el-row v-for="(item, index) in selectTemplate" :key="index" type="flex" justify="center">
             <el-col :span="19">
               <el-radio v-model="fromData.radio" class="creatorList" :label="item.id">{{ item.moduleName }}</el-radio>
             </el-col>
@@ -25,7 +25,7 @@
               {{ item.creatorObject.name }}
               <span v-if="item.creator !== 'SYSTEM' && item.creator !== '系统'" class="operation">
                 <i class="el-icon-edit-outline didi-hover" @click="open_new_template(item)" />
-                <el-popover :ref="item.id" placement="bottom" width="300" trigger="click">
+                <el-popover :ref="item.id" placement="bottom" width="300" :visible-arrow="false" trigger="click">
                   <div><div class="blur-column" /> 删除模版</div>
                   <div class="blueStripe" />
                   <div class="deletreport">是否要删除模版{{ item.moduleName }}?</div>
@@ -95,7 +95,7 @@ export default {
       modelId: '', // 下一步选择的模版id
       selectTemplate: [], // 模版option
       fromData: {
-        radio: 1
+        radio: 0
       },
       newDailyTemplate: false, // 新建日报模版
       reportTamplate: false, // new模版
@@ -117,16 +117,13 @@ export default {
       if (res.code === 200) {
         this.$nextTick(() => {
           const data = res.data
-          this.selectTemplate = data.map(item => ({
-            ...item,
-            operation: false
-          }))
+          this.selectTemplate = data
+          this.fromData.radio = this.selectTemplate[0].id
         })
       }
     },
 
     init(index, newData) {
-      console.log(index, newData, '测试')
       this.dialogDaliy = true
       switch (index) {
         case 2: // 编辑
@@ -134,14 +131,15 @@ export default {
             if (res.code === 200) {
               this.daily_taskIds = res.data.taskIds // 关联任务
               this.fromData.radio = res.data // 选择的模块
+              this.reportHome = true // 步骤条
+              this.active = 2 // 步骤条状态第三步
+              this.showOne = false // 隐藏第一步
+              this.newDailyTemplate = true // 隐藏第二步
+              this.dailyPreview = false // 展示第三部
+              this.updateDaily = true // 编辑
             }
           })
-          this.reportHome = true // 步骤条
-          this.active = 2 // 步骤条状态第三步
-          this.showOne = false // 隐藏第一步
-          this.newDailyTemplate = true // 隐藏第二步
-          this.dailyPreview = false // 展示第三部
-          this.updateDaily = true // 编辑
+
           break
         case 3: // 发送报告
           this.dailyId = newData.id
@@ -264,10 +262,11 @@ export default {
 
 <style lang="scss" scoped>
 .report-leftRight {
-  margin: 0 13%;
+  margin: 20px 8% 0;
   >>> .el-row .el-col {
     margin: 0;
-}
+  }
+
 }
 
 .titIcon {

+ 5 - 18
src/views/reportManagement/components/ReleaseReport.vue

@@ -10,17 +10,11 @@
     </el-steps>
 
     <div class="report-leftRight">
-      <div v-if="showOne" style="min-height: 50vh; margin: 0 13%; ">
+      <div v-if="showOne" style="min-height: 50vh;">
         <el-row type="flex" justify="center">
           <el-col :span="19" class="creator">模版名称</el-col>
           <el-col :span="5" class="creator">创建人</el-col>
         </el-row>
-        <el-row v-for="(item, index) in reportModel" :key="index" type="flex" justify="center">
-          <el-col :span="19">
-            <el-radio v-model="fromData.radio" class="creatorList" :label="item.id">{{ item.moduleName }}</el-radio>
-          </el-col>
-          <el-col :span="5" class="creatorList">{{ item.creatorObject.name }}</el-col>
-        </el-row>
 
         <div ref="refName" style="max-height: 260px; overflow:scroll; overflow-x: hidden">
           <el-row v-for="(item, index) in selectTemplate" :key="index" type="flex" justify="center" @mouseover.native="item.operation = true" @mouseleave.native="item.operation = false">
@@ -96,15 +90,11 @@ export default {
     return {
       templateStatus: false, // 模版状态
       reportHome: true, // 报告主页
-      reportModel: [
-        { id: 1, moduleName: '客户端模版', creatorObject: { 'idap': '', 'name': '系统', 'deptid': '', 'deptName': '', 'empId': '', 'phoneUrl': null }},
-        { id: 2, moduleName: '服务端模版', creatorObject: { 'idap': '', 'name': '系统', 'deptid': '', 'deptName': '', 'empId': '', 'phoneUrl': null }}
-      ], // 创建的模版
       templateId: '', // 模版id
       modelId: '', // 下一步选择的模版id
       selectTemplate: [],
       fromData: {
-        radio: 1
+        radio: 0
       },
       bizJson: localStorage.getItem('bizId'),
       preview: {},
@@ -135,7 +125,7 @@ export default {
             ...item,
             operation: false
           }))
-          console.log(this.selectTemplate, 'xsaxaxsa')
+          this.fromData.radio = this.selectTemplate[0].id
         })
       }
     },
@@ -144,7 +134,7 @@ export default {
       switch (index) {
         case 2: // 编辑
           console.log(newData, '西单商场')
-          this.daily_taskIds = newData.taskIds // 关联任务
+          this.daily_taskIds = null // 关联任务
           this.fromData.radio = newData // 选择的模块
           this.reportHome = true // 步骤条
           this.active = 2 // 步骤条状态第三步
@@ -163,7 +153,6 @@ export default {
           break
         case 7: // 新建
           this.daily_taskIds = newData // taskList
-          this.fromData.radio = 1 // 选择的模版
           this.reportHome = true // 步骤条
           this.active = 1 // 步骤条状态第一步
           this.showOne = true // 展示第一步
@@ -173,7 +162,6 @@ export default {
           break
         case 8: // 新建
           this.daily_taskIds = newData
-          this.fromData.radio = 1 // 选择的模版
           this.reportHome = true // 步骤条
           this.active = 1 // 步骤条状态第三步
           this.showOne = true // 展示第一步
@@ -192,7 +180,6 @@ export default {
     },
 
     reportReturn() { // 新建模版点击返回
-      this.fromData.radio = 1
       this.reportHome = true // 步骤条
       this.showOne = true // 模版选择
       this.reportTamplate = false // 编辑区域
@@ -270,7 +257,7 @@ export default {
 
 <style lang="scss" scoped>
 .report-leftRight {
-  margin: 0 1%;
+  margin: 0 8%;
   >>> .el-row .el-col {
     margin: 0;
 }

+ 5 - 15
src/views/reportManagement/components/TestingReport.vue

@@ -15,12 +15,6 @@
           <el-col :span="19" class="creator">模版名称</el-col>
           <el-col :span="5" class="creator">创建人</el-col>
         </el-row>
-        <el-row v-for="(item, index) in reportModel" :key="index" type="flex" justify="center">
-          <el-col :span="19">
-            <el-radio v-model="fromData.radio" class="creatorList" :label="item.id">{{ item.moduleName }}</el-radio>
-          </el-col>
-          <el-col :span="5" class="creatorList">{{ item.creatorObject.name }}</el-col>
-        </el-row>
 
         <div ref="refName" style="max-height: 260px; overflow:scroll; overflow-x: hidden">
           <el-row v-for="(item, index) in selectTemplate" :key="index" type="flex" justify="center" @mouseover.native="item.operation = true" @mouseleave.native="item.operation = false">
@@ -53,11 +47,11 @@
       </div>
 
       <!-- new模版 -->
-      <newTestingTemplate v-if="reportTamplate" ref="newReportTemplate" class="daily" :template-id="templateId" :type="'new'" @getreportTemplate="getreportTemplate" @reportReturn="reportReturn" />
+      <newTestingTemplate v-if="reportTamplate" ref="newReportTemplate" class="daily" :template-id="templateId" @getreportTemplate="getreportTemplate" @reportReturn="reportReturn" />
       <!-- new模版 -->
 
       <!-- 新建日报模版 -->
-      <newTestingTemplate v-if="newDailyTemplate" ref="dailyTemplate" class="daily" :template-id="fromData.radio" :task-ids="daily_taskIds" :type="'create'" @SaveNextStep="SaveNextStep" />
+      <newTestingTemplate v-if="newDailyTemplate" ref="dailyTemplate" class="daily" :template-id="fromData.radio" :task-ids="daily_taskIds" @SaveNextStep="SaveNextStep" />
       <!-- 新建日报模版 -->
 
       <!-- 日报预览 -->
@@ -95,10 +89,6 @@ export default {
   data() {
     return {
       reportHome: true, // 报告主页
-      reportModel: [
-        { id: 1, moduleName: '客户端模版', creatorObject: { 'idap': '', 'name': '系统', 'deptid': '', 'deptName': '', 'empId': '', 'phoneUrl': null }},
-        { id: 2, moduleName: '服务端模版', creatorObject: { 'idap': '', 'name': '系统', 'deptid': '', 'deptName': '', 'empId': '', 'phoneUrl': null }}
-      ], // 创建的模版
       templateId: '', // 模版id
       modelId: '', // 下一步选择的模版id
       selectTemplate: [], // 模版option
@@ -129,6 +119,7 @@ export default {
             ...item,
             operation: false
           }))
+          this.fromData.radio = this.selectTemplate[0].id
         })
       }
     },
@@ -179,7 +170,6 @@ export default {
     },
 
     reportReturn() { // 新建模版点击返回
-      this.fromData.radio = 1
       this.reportHome = true // 步骤条
       this.showOne = true // 模版选择
       this.reportTamplate = false // 编辑区域
@@ -188,7 +178,7 @@ export default {
     },
 
     open_new_template(val) { // 点击新建模版
-      val ? this.templateId = val.id : this.templateId = null
+      val ? this.templateId = val.id : this.templateId = '新建模版'
       this.reportTamplate = true // 编辑区域
       this.reportHome = false // 步骤条
       this.showOne = false // 模版选择
@@ -257,7 +247,7 @@ export default {
 
 <style lang="scss" scoped>
 .report-leftRight {
-  margin: 0 13%;
+  margin: 0 8%;
   >>> .el-row .el-col {
     margin: 0;
 }

+ 7 - 2
src/views/reportManagement/daily/components/DailyDetails.vue

@@ -48,14 +48,14 @@
             </div>
             <div class="Layout_flex_start task-bot">
               <div class="title-name">发送时间 : </div>
-              <div class="task-name">{{ details.gmtModify }}</div>
+              <div class="task-name">{{ details.reportTime }}</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 class="task-name didi-hover" @click="goTaskDetails(item.id)">{{ item.name }}</div>
             </div>
           </el-footer>
         </el-container>
@@ -126,6 +126,11 @@ export default {
           break
       }
     },
+
+    goTaskDetails(id) {
+      this.$router.push({ name: '任务详情', query: { id: id }})
+    },
+
     async deleteDaily() { // 删除日报‘
       const res = await dailyReportDelete(this.details.id)
       if (res.code === 200) {

+ 13 - 7
src/views/reportManagement/daily/dailyPreview.vue

@@ -2,26 +2,25 @@
   <!-- 预览测试日报 -->
   <div class="parent-style">
     <div class="backStyle"> 邮件列表</div>
-    <div class="Layout_space_between" style="margin-bottom: 10px;">
+    <div class="Layout_space_between report-div">
       <div class="div1">收件人</div>
       <searchTeam :value.sync="form.name" :clearable="true" :multiple="true" style="width:100%" />
     </div>
-    <div class="Layout_space_between">
+    <div class="Layout_space_between report-div">
       <div class="div1">抄送</div>
       <searchTeam :value.sync="form.names" :clearable="true" :multiple="true" style="width:100%" />
     </div>
-    <div class="backStyle"> 报告预览</div>
+
     <div id="repot-list">
-      <span class="backStyle"> 任务名称</span>
+      <span class="backStyle"> 关联任务</span>
       <div v-for="(item, index) in fromCreateData.taskDetailList" :key="index" class="Layout_flex_start report-taskList">
         <span>{{ item.taskId }}</span>
         <span>{{ item.name }}</span>
       </div>
       <div class="Layout_space_between">
-        <span class="backStyle"> 标题 : {{ fromCreateData.reportName }}</span>
+        <span class="backStyle report-name" style="font-size: 20px"> {{ fromCreateData.reportName }}</span>
         <span>报告人:{{ name }}</span>
       </div>
-      <span class="backStyle"> 模版内容</span>
       <div v-html="fromCreateData.content" />
       <icon-display :details="fromCreateData" />
     </div>
@@ -106,9 +105,13 @@ export default {
     font-family:MicrosoftYaHei;
     line-height:17px;
     color:rgba(102,102,102,1);
-    margin-top: 10px;
+    margin: 10px 0 0 20px;
     opacity:1;
   }
+  .report-name {
+    font-size: 20px;
+    margin-top: 15px;
+  }
 }
 .div1 {
     width: 60px;
@@ -123,4 +126,7 @@ export default {
     border-radius: 4px;
     margin: 10px 0;
   }
+  .report-div {
+    margin: 0 0 10px 20px;
+  }
 </style>

+ 3 - 8
src/views/reportManagement/daily/dailyTemplate.vue

@@ -4,7 +4,7 @@
     <el-form ref="fromCreateData" class="dailyFrom" :model="fromCreateData" :rules="serviceDataRules">
       <div class="report-Padding">
         <span style="color: #f56b6c">*</span>
-        <span class="backStyle"> 任务名称</span>
+        <span class="backStyle"> 关联任务</span>
       </div>
 
       <el-select v-model="fromCreateData.taskIds" filterable remote reserve-keyword placeholder="请输入任务名称或ID" :remote-method="remoteMethod" style="width: 100%" size="small" @change="colseSelect">
@@ -24,7 +24,7 @@
         <el-input v-model="fromCreateData.reportName" size="small" style="width: 100%;" placeholder="请输入报告名称" />
       </el-form-item>
 
-      <el-form-item label="模版内容" prop="content"><br>
+      <el-form-item label="报告内容" prop="content"><br>
         <normal-area id="report-template" :value.sync="fromCreateData.content" :height="500" />
       </el-form-item>
     </el-form>
@@ -78,12 +78,7 @@ export default {
           newV.updateDaily === false ? this.$refs.fromCreateData.resetFields() : ''
         } else {
           this.moduleId = newV
-          this.fromCreateData = {}
-          if (newV === 1 || newV === 2) {
-            this.fromCreateData.content = `<div style="color: #606266"><h3>进度和风险</h3><p>项目整体进度</p><p>项目风险与问题</p><table border="1" style="border: 1px solid #DEE2E7" width="100%"><colgroup><col width="8%"><col width="8%"><col width="8%"><col width="8%"></colgroup><thead><tr><th>风险等级</th><th>风险项</th><th>当前状态</th><th>跟进人</th></tr></thead><tbody><tr><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><br></td><td><br></td><td><br></td><td><br></td></tr></tbody></table><h3>测试情况</h3><p>测试进展</p><table border="1" style="border: 1px solid #DEE2E7" width="100%"><colgroup><col width="8%"><col width="8%"><col width="8%"><col width="8%"><col width="8%"><col width="8%"><col width="8%"></colgroup><thead><tr><th>标题1</th><th>标题2</th><th>标题3</th><th>标题4</th><th>标题5</th><th>标题6</th><th>标题7</th></tr></thead><tbody><tr><td><br></td><td><br></td><td><br></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><br></td><td><br></td><td><br></td><td><br></td><td><br></td><td><br></td><td><br></td></tr></tbody></table><p>测试说明</p></div>`
-          } else {
-            this.settingGetReportModuleById(newV)
-          }
+          this.settingGetReportModuleById(newV)
         }
       },
       immediate: true

+ 1 - 0
src/views/reportManagement/daily/newReportTemplate.vue

@@ -52,6 +52,7 @@
 import '@/styles/PublicStyle/index.scss' // 公共css
 import echarts from 'echarts'
 import normalArea from '@/components/input/normalArea' // 富文本
+import 'tinymce/plugins/table'// 插入表格插件
 import { settingAddReportModule, settingUpdateReportModule, settingGetReportModuleById } from '@/api/reportTemplate' // 模版添删改查
 
 export default {

+ 18 - 42
src/views/reportManagement/testPresentation.vue

@@ -51,15 +51,15 @@
           <el-table-column v-if="history" label="操作" align="center" fixed="right" min-width="230">
             <template slot-scope="scope">
               <div v-if="title === '测试日报'">
-                <span v-if="scope.row.status === 0 ? true : false" class="didi-hover" @click="dailyButtom(5,scope.row)">发送</span>
-                <span v-if="scope.row.status === 0 ? true : false" style="margin: 0 30px;" class="didi-hover" @click="dailyButtom(6,scope.row)">编辑</span>
+                <span v-if="scope.row.status === 0 ? true : false" class="didi-hover" @click="dailyButtom(3,scope.row)">发送</span>
+                <span v-if="scope.row.status === 0 ? true : false" style="margin: 0 30px;" class="didi-hover" @click="dailyButtom(2,scope.row)">编辑</span>
                 <span v-if="scope.row.status === 0 ? true : false" class="didi-hover" @click="report_click(4,scope.row )">删除</span>
-                <span v-if="scope.row.status === 3 ? true : false" class="didi-hover" @click="dailyButtom(3,scope.row)">复制</span>
+                <span v-if="scope.row.status === 3 ? true : false" class="didi-hover" @click="dailyButtom(1,scope.row)">复制</span>
               </div>
               <div v-if="title === '准出报告'">
                 <div v-if="scope.row.status === 3 ? false : true">
-                  <span v-if="scope.row.status === 0 ? true : false" class="didi-hover" @click="clientButtom(5,scope.row)">发送</span>
-                  <span v-if="scope.row.status === 0 ? true : false" style="margin: 0 30px;" class="didi-hover" @click="clientButtom(6,scope.row)">编辑</span>
+                  <span v-if="scope.row.status === 0 ? true : false" class="didi-hover" @click="clientButtom(3,scope.row)">发送</span>
+                  <span v-if="scope.row.status === 0 ? true : false" style="margin: 0 30px;" class="didi-hover" @click="clientButtom(2, scope.row)">编辑</span>
                   <span v-if="scope.row.status === 0 ? true : false" class="didi-hover" @click="report_click(4,scope.row )">删除</span>
                 </div>
               </div>
@@ -182,7 +182,6 @@ export default {
         statusString: ''
       },
       tableData: [],
-      z_name: '',
       restaurants2: [],
       dialogVisible1: false, // 提测弹窗
       dialogDaily: false,
@@ -204,7 +203,6 @@ export default {
     handleClick(tab, event) {
       this.curIndex = 1
       this.loading = true
-      console.log(tab.index, 'cdscsc')
       switch (Number(tab.index)) {
         case 0:
           this.title = '测试日报'
@@ -309,44 +307,19 @@ export default {
 
     dailyButtom(e, data) { // 测试报告
       this.report_data = data
-      switch (e) {
-        case 3: // 复制 第二步
-          this.dialogDaily = true
-          this.$nextTick(() => {
-            this.$refs.DailyReport.init(4, data)
-          })
-          break
-        case 5: // 日报第三步
-          this.dialogDaily = true
-          this.$nextTick(() => {
-            this.$refs.DailyReport.init(3, data)
-          })
-          break
-        case 6: // 日报第二步
-          this.dialogDaily = true
-          this.$nextTick(() => {
-            this.$refs.DailyReport.init(2, data)
-          })
-          break
-      }
+      this.dialogDaily = true
+      this.$nextTick(() => {
+        this.$refs.DailyReport.init(e, data)
+      })
     },
 
     clientButtom(e, data) { // 准出报告
+      console.log(data, 'scncjsncnjkn')
       this.report_data = data
-      switch (e) {
-        case 5:
-          this.dialogClient = true
-          this.$nextTick(() => {
-            this.$refs.ClientReport.init(3, data)
-          })
-          break
-        case 6:
-          this.dialogClient = true
-          this.$nextTick(() => {
-            this.$refs.ClientReport.init(2, data)
-          })
-          break
-      }
+      this.dialogClient = true
+      this.$nextTick(() => {
+        this.$refs.ClientReport.init(e, data)
+      })
     },
 
     report_click(e, data) { // 提测报告
@@ -407,10 +380,13 @@ export default {
         if (this.title === '测试日报') {
           const res = await dailyReportCheckStatus([vel])
           if (res.code === 200) {
+            this.centerDialogVisible = false
             this.dialogDaily = true
             this.$nextTick(() => {
               this.$refs.DailyReport.init(7, [vel])
             })
+          } else {
+            this.centerDialogVisible = true
           }
         }
         if (this.title === '准出报告') {
@@ -425,7 +401,7 @@ export default {
             this.$refs.TestReport.init(7, [vel])
           })
         }
-        this.centerDialogVisible = false
+        // this.centerDialogVisible = false
       } else {
         this.$message({ message: '提示,请选择要添加的任务ID', type: 'warning' })
       }

+ 9 - 23
src/views/workbench/team/components/taskList.vue

@@ -138,7 +138,7 @@ import { taskUpdate } from '@/api/projectViewDetails'
 import { configShowTaskEnum, configShowTaskStatusEnum } from '@/api/taskIndex'
 import modifySchedule from '@/views/projectManage/projectList/components/modifySchedule'
 import taskDialog from '@/views/projectManage/taskList/dialog/taskDialog' // 任务状态修改(已上线/已提测/已准出)
-import { dailyReportCheckStatus } from '@/api/reportTemplate'
+import { dailyReportCheckStatus, reportreleaseCheckStatus, reportdelivertestCheckStatus } from '@/api/reportTemplate'
 export default {
   components: {
     TestReport,
@@ -334,17 +334,10 @@ export default {
       this.selectTaskList = this.curcentList
     },
 
-    filtrateTest() { // 提测筛选
-      const data = this.curcentList.filter(item => { return item.id })
-      const res = []
-      data.map(item => {
-        if (item.statusString !== '开发中') {
-          res.push(item.id)
-        }
-      })
-      if (res.length > 0) {
-        this.$message({ message: `任务${res}的状态不是【开发中】,无法批量提测,请检查!”`, type: 'warning', offset: 150 })
-      } else {
+    async filtrateTest() { // 提测筛选
+      const data = this.curcentList.map(item => { return item.id })
+      const res = await reportdelivertestCheckStatus(data)
+      if (res.code === 200) {
         this.dialogTestReport = true
         this.$nextTick(() => {
           this.$refs.TestReport.init(7, this.curcentList.map(item => { return item.id }))
@@ -352,17 +345,10 @@ export default {
       }
     },
 
-    filtrateAllow() { // 准出筛选
-      const data = this.curcentList.filter(item => { return item.id })
-      const res = []
-      data.map(item => {
-        if (item.statusString !== '测试中') {
-          res.push(item.id)
-        }
-      })
-      if (res.length > 0) {
-        this.$message({ message: `任务${res}的状态不是【测试中】,无法批量准出,请检查!”`, type: 'warning', offset: 150 })
-      } else {
+    async filtrateAllow() { // 准出筛选
+      const data = this.curcentList.map(item => { return item.id })
+      const res = await reportreleaseCheckStatus(data)
+      if (res.code === 200) {
         this.dialogClientReport = true
         this.$nextTick(() => {
           this.$refs.ClientReport.init(7, this.curcentList.map(item => { return item.id }))