瀏覽代碼

Merge branch 'master' into http_mock

qinzhipeng_v 5 年之前
父節點
當前提交
4f4e0c4c8e

+ 8 - 8
src/api/HMvehicle.js

@@ -4,7 +4,7 @@ import { HMvehicleUrl } from '@/apiConfig/api'
 // 创建设备/激活设备
 export function createHmVirtualDevice(data) {
   return request({
-    url: HMvehicleUrl + '/virtual-devices/hm/createDevice',
+    url: HMvehicleUrl + '/virtual-devices/ebike/createDevice',
     method: 'post',
     data
   })
@@ -20,18 +20,18 @@ export function activeHmVirtualDevice(params) {
 }
 
 // 查询设备信息
-export function queryDeviceInfo(params) {
+export function queryDeviceInfo(data) {
   return request({
-    url: HMvehicleUrl + '/virtual-devices/hm/queryDeviceInfo',
-    method: 'get',
-    params
+    url: HMvehicleUrl + '/virtual-devices/ebike/queryDeviceInfo',
+    method: 'post',
+    data
   })
 }
 
 // 删除设备
 export function delHmVirtualDevice(params) {
   return request({
-    url: HMvehicleUrl + '/virtual-devices/hm/delDevice',
+    url: HMvehicleUrl + '/virtual-devices/ebike/delDevice',
     method: 'get',
     params
   })
@@ -40,7 +40,7 @@ export function delHmVirtualDevice(params) {
 // 下线设备
 export function offHmvirtualDevice(params) {
   return request({
-    url: HMvehicleUrl + '/virtual-devices/hm/offDevice',
+    url: HMvehicleUrl + '/virtual-devices/ebike/offDevice',
     method: 'get',
     params
   })
@@ -49,7 +49,7 @@ export function offHmvirtualDevice(params) {
 // 更新锁状态
 export function updateLockStatus(params) {
   return request({
-    url: HMvehicleUrl + '/virtual-devices/hm/updateLockStatus',
+    url: HMvehicleUrl + '/virtual-devices/ebike/updateLockStatus',
     method: 'get',
     params
   })

+ 2 - 1
src/apiConfig/api.js

@@ -6,4 +6,5 @@ export const mockUrl = 'http://10.179.24.123:8980' // 线上
 
 export const qualityUrl = 'http://10.179.209.19:8898' // 质量度量
 
-export const HMvehicleUrl = 'http://10.96.113.197:9999' // 电单车
+// export const HMvehicleUrl = 'http://10.96.113.197:9999' // 电单车 线下
+export const HMvehicleUrl = 'http://10.179.91.236:9999' // 电单车 线上

+ 2 - 2
src/apiConfig/virtualDevices.js

@@ -1,3 +1,3 @@
 /*eslint-disable*/ //规避eslint的检查,如没有eslint可不写
-// export const mockUrl = 'http://mock.Intra.xiaojukeji.com' // 线上
-export const mockUrl = 'http://10.96.113.197:9999/virtual-devices' // 线下
+export const mockUrl = 'http://10.179.91.236:9999/virtual-devices' // 线上
+// export const mockUrl = 'http://10.96.113.197:9999/virtual-devices' // 线下

+ 3 - 3
src/router/index.js

@@ -482,9 +482,9 @@ export const constantRoutes = [
       },
       {
         path: 'ebike',
-        name: ''
-        // component: () => import('@/views/virtualDevices/HMvehicle.vue'),
-        // meta: { title: '电单车' }
+        name: '电单车',
+        component: () => import('@/views/virtualDevices/HMvehicle.vue'),
+        meta: { title: '电单车' }
       },
       {
         path: 'ebike/ebikeCreate',

+ 2 - 0
src/views/Platform/presentation/DailyNewsAdded.vue

@@ -256,6 +256,8 @@ export default {
 
     // 更新bug提交
     getQueryData(ele) {
+      debugger
+      console.log(ele)
       this.fromCreateData = ele
       this.fromCreateData.taskId === 0 ? this.fromCreateData.taskId = '' : ''
       this.fromCreateData.projectId === 0 ? this.fromCreateData.projectId = '' : ''

+ 213 - 18
src/views/Platform/presentation/ResultPageyL.vue

@@ -1,14 +1,14 @@
 <template>
-  <div id="resumeId" class="eleStyle">
+  <div class="eleStyle">
     <div style="height:100%;width:94%; background:#ffffff; margin: 3% 3% 8% 3%; border-radius: 8px; overflow: hidden;">
       <!-- 准出预览 -->
       <div v-if="towShow">
-        <div style="padding: 3% 9%; color: #333B4A;">
-          <div style="display: flex; font-size: 19px;  white-space: nowrap; font-weight: bold;">
-            <span style="flex:1;">{{ ClientDatayl.reportName }}</span>
-            <span style="flex:1;">by : {{ ClientDatayl.ownner }}
-              <el-button type="primary" size="mini" style="margin:0 2% 0 45%;" @click="promptEmail(ClientDatayl)">发送报告</el-button>
-              <el-button size="mini" @click="download()">下载测试报告</el-button>
+        <div style="padding: 2% 9%;">
+          <div style="display: flex; white-space: nowrap; font-family:SimSuncss">
+            <span style="flex:1;font-weight: bold;font-size: 24px;color: #3a8ee6">{{ ClientDatayl.reportName }}</span>
+            <span style="flex:2;margin: 0.5% 0 0 20px;font-size: 17px;">by {{ ClientDatayl.ownner }}
+              <el-button type="primary" size="mini" style="margin:0 2% 0 5%;" @click="dialogTableVisible = true">发送报告</el-button>
+              <el-button size="mini" @click="dialogTableVisible = true">下载测试报告</el-button>
             </span>
           </div>
           <div style="margin: 2% 0 1% 0; font-size: 19px; font-weight: bold;">一. 项目概述</div><br>
@@ -119,11 +119,11 @@
 
       <div v-if="oneShow">
         <div id="resumeId1" style="padding: 3% 6%; color: #333B4A;">
-          <div style="display: flex; font-size: 19px;  white-space: nowrap; font-weight: bold;">
-            <span style="flex:1;">{{ ClientDatayl.reportName }}</span>
-            <span style="flex:1;">by : {{ ClientDatayl.ownner }}
-              <el-button type="primary" size="mini" style="margin:0 2% 0 45%;" @click="promptEmail1(ClientDatayl)">发送报告</el-button>
-              <el-button size="mini" @click="download1()">下载测试报告</el-button>
+          <div style="display: flex; white-space: nowrap; font-family:SimSuncss">
+            <span style="flex:1;font-weight: bold;font-size: 24px;color: #3a8ee6">{{ ClientDatayl.reportName }}</span>
+            <span style="flex:2;margin: 0.5% 0 0 20px;font-size: 17px;">by {{ ClientDatayl.ownner }}
+              <el-button type="primary" size="mini" style="margin:0 2% 0 5%;" @click="dialogTableVisible = true">发送报告</el-button>
+              <el-button size="mini" @click="dialogTableVisible = true">下载测试报告</el-button>
             </span>
           </div>
           <div style="margin: 2% 0 1% 0; font-size: 19px; font-weight: bold;">一、项目概述</div><br>
@@ -189,12 +189,6 @@
                 <span v-else>{{ scope.row.rateOfFix.value }}</span>
               </template>
             </el-table-column>
-            <!-- <el-table-column prop="memo" min-width="200" align="center" label="备注">
-              <template slot-scope="scope">
-                <el-input v-if="scope.row.memo.edit" ref="rateOfFix" v-model="scope.row.memo.value" style="width: 100%" @blur="scope.row.memo.edit = false" />
-                <span v-else>{{ scope.row.memo.value }}</span>
-              </template>
-            </el-table-column> -->
           </el-table>
           <el-row>
             <el-col :span="24"><div style="margin: 2% 0;">1、遗留问题</div>{{ ClientDatayl.bugInfo }}</el-col>
@@ -207,6 +201,206 @@
         <el-button style="margin:02% 0%;" @click="$router.go(-1)"> 返 回 </el-button>
       </div>
     </div>
+
+    <el-dialog title="邮件预览" width="70%" center :visible.sync="dialogTableVisible" @open="idGet()">
+      <div align="center">
+        <el-button type="primary" size="mini" @click="promptEmail(ClientDatayl)">确定发送</el-button>
+        <el-button size="mini" @click="download()">确定下载</el-button>
+      </div>
+      <div id="resumeId" class="eleStyle">
+        <div style="height:100%;width:94%; background:#ffffff; margin: 3% 3% 8% 3%; border-radius: 8px; overflow: hidden;">
+          <div v-if="towShow">
+            <div style="padding: 3% 9%; color: #333B4A;">
+              <div style="display: flex; white-space: nowrap; font-family:SimSuncss">
+                <span style="flex:1;font-weight: bold;font-size: 24px;color: #3a8ee6">{{ ClientDatayl.reportName }}</span>
+                <span style="flex:2;margin: 0.5% 0 0 20px;font-size: 17px;">by {{ ClientDatayl.ownner }}</span>
+              </div>
+              <div style="margin: 2% 0 1% 0; font-size: 19px; font-weight: bold;">一. 项目概述</div><br>
+              <div style="display:flex;">
+                <div style="flex:1">
+                  <div class="marage">测试结果 : <span :style="status1">{{ status }}</span></div><br>
+                  <div class="marage">开发人员 : {{ ClientDatayl.developer }}</div><br>
+                  <div class="marage">开发周期 : {{ ClientDatayl.devTimeEnd }} 至 {{ ClientDatayl.devTimeStart }}</div><br>
+                  <div class="marage">准出延期 : <span :style="taskLateDisabled">{{ ClientDatayl.taskLateStatus }}</span></div><br>
+                </div>
+                <div style="flex:1">
+                  <div class="marage">准入结果 : {{ ClientDatayl.launchInfo }}</div><br>
+                  <div class="marage">测试人员 : {{ ClientDatayl.tester }}</div><br>
+                  <div class="marage">测试周期 : {{ ClientDatayl.testTimeEnd }} 至 {{ ClientDatayl.testTimeStart }} </div><br>
+                  <div v-show="showDelay1" class="marage">延期原因 : {{ ClientDatayl.taskLateReason }}</div><br>
+                </div>
+              </div>
+              <div style="display:flex;">
+                <div style="flex:1">
+                  <div class="marage">涉及安全项 : <span :style="getInfoBtnDisabled">{{ ClientDatayl.getInfoBtn }}</span></div><br>
+                </div>
+                <div style="flex:1">
+                  <div v-show="showData" class="marage">完成结果 : {{ ClientDatayl.safeInfo }}</div>
+                </div>
+              </div>
+              <div style="white-space: nowrap;">SDL链接 : <el-link href="http://wiki.intra.xiaojukeji.com/pages/viewpage.action?pageId=237016271" type="primary" target="_blank"> 普惠SDL准入标准</el-link></div>
+              <div class="titleStyle">二. 项目背景</div><br>
+
+              <div class="rich" v-html="editorElem" />
+
+              <div class="titleStyle">三. 模块信息</div>
+
+              <div class="marage">1、模块信息</div>
+
+              <div class="rich" v-html="editorElems" />
+
+              <div class="marage">2、本期功能</div>
+
+              <div class="rich" v-html="editorFrom" />
+
+              <div class="marage">3、风险点</div>
+
+              <div class="rich" v-html="editorF" />
+
+              <div class="marage">4、缺陷分析</div>
+
+              <el-table :data="tableData" border>
+                <el-table-column prop="totalBug" label="bug总数" min-width="200" align="center" edit="false">
+                  <template slot-scope="scope">
+                    <el-input v-if="scope.row.totalBug.edit" ref="totalBug" v-model="scope.row.totalBug.value" style="width: 100%" @blur="scope.row.totalBug.edit = false" />
+                    <span v-else>{{ scope.row.totalBug.value }}</span>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="fixBug" min-width="200" align="center" label="已解决bug数">
+                  <template slot-scope="scope">
+                    <el-input v-if="scope.row.fixBug.edit" ref="fixBug" v-model="scope.row.fixBug.value" style="width: 100%" @blur="scope.row.fixBug.edit = false" />
+                    <span v-else>{{ scope.row.fixBug.value }}</span>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="remainBug" min-width="200" align="center" label="遗留bug数">
+                  <template slot-scope="scope">
+                    <el-input v-if="scope.row.remainBug.edit" ref="remainBug" v-model="scope.row.remainBug.value" style="width: 100%" @blur="scope.row.remainBug.edit = false" />
+                    <span v-else>{{ scope.row.remainBug.value }}</span>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="rateOfReopen" min-width="200" align="center" label="reopen率">
+                  <template slot-scope="scope">
+                    <el-input v-if="scope.row.rateOfReopen.edit" ref="rateOfReopen" v-model="scope.row.rateOfReopen.value" style="width: 100%" @blur="scope.row.rateOfReopen.edit = false" />
+                    <span v-else>{{ scope.row.rateOfReopen.value }}</span>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="invalidBug" min-width="200" align="center" label="无效bug数">
+                  <template slot-scope="scope">
+                    <el-input v-if="scope.row.invalidBug.edit" ref="invalidBug" v-model="scope.row.invalidBug.value" style="width: 100%" @blur="scope.row.invalidBug.edit = false" />
+                    <span v-else>{{ scope.row.invalidBug.value }}</span>
+                  </template>
+                </el-table-column>
+              </el-table>
+              <el-row>
+                <el-col :span="24"><div style="margin:2% 0;">5、遗留问题</div>{{ ClientDatayl.bugInfo }}</el-col>
+              </el-row>
+
+              <div class="rich" v-html="editorData" />
+
+              <div class="titleStyle">四. 测试项</div>
+
+              <div class="marage">1、功能测试 : <span style="margin-left:40px;" :style="fctResultChange">{{ fctResult }}</span></div>
+
+              <div class="rich" v-html="editorEl" />
+
+              <div class="marage">2、可靠性测试 : <span style="margin-left:40px;" :style="rqtResultChange">{{ rqtResult }}</span></div>
+
+              <div class="rich" v-html="editorEle" />
+
+              <div class="marage">3、稳定性测试 : <span style="margin-left:40px;" :style="pftResultChange">{{ pftResult }}</span></div>
+
+              <div class="rich" v-html="editorSix" />
+
+              <div class="marage">4、安全性测试 : <span style="margin-left:40px;" :style="safeResultChange">{{ safeResult }}</span></div>
+
+              <div class="rich" v-html="editorEight" />
+
+              <div class="marage">5、线上监控 : <span style="margin-left:40px;" :style="moniterResultChange">{{ moniterResult }}</span></div>
+
+              <div class="rich" v-html="editorNine" />
+            </div>
+          </div>
+
+          <div v-if="oneShow">
+            <div id="resumeId1" style="padding: 3% 6%; color: #333B4A;">
+              <div style="display: flex; white-space: nowrap; font-family:SimSuncss">
+                <span style="flex:1;font-weight: bold;font-size: 24px;color: #3a8ee6">{{ ClientDatayl.reportName }}</span>
+                <span style="flex:2;margin: 0.5% 0 0 20px;font-size: 17px;">by {{ ClientDatayl.ownner }}</span>
+              </div>
+              <div style="margin: 2% 0 1% 0; font-size: 19px; font-weight: bold;">一、项目概述</div><br>
+              <div style="display:flex;">
+                <div style="flex:1">
+                  <div class="marage">测试结果 : <span :style="status1">{{ status }}</span></div><br>
+                  <div class="marage">开发人员 : {{ ClientDatayl.developer }}</div><br>
+                  <div class="marage">开发周期 : {{ ClientDatayl.devTimeEnd }} 至 {{ ClientDatayl.devTimeStart }}</div><br>
+                  <div class="marage">准出延期 : <span :style="taskLateDisabled">{{ ClientDatayl.taskLateStatus }}</span></div><br>
+                </div>
+                <div style="flex:1">
+                  <div class="marage">准入结果 : {{ ClientDatayl.launchInfo }}</div><br>
+                  <div class="marage">测试人员 : {{ ClientDatayl.tester }}</div><br>
+                  <div class="marage">测试周期 : {{ ClientDatayl.testTimeEnd }} 至 {{ ClientDatayl.testTimeStart }} </div><br>
+                  <div v-show="showDelay1" class="marage">延期原因 : {{ ClientDatayl.taskLateReason }}</div><br>
+                </div>
+              </div>
+
+              <div class="titleStyle">二. 项目背景</div>
+
+              <div class="rich" v-html="editorElem1" />
+
+              <div class="titleStyle">三. 测试项</div>
+
+              <p>功能测试 : <span style="margin-left:40px;" :style="pftResult1">{{ pftResult }}</span></p>
+
+              <div class="rich" v-html="editorElems1" />
+
+              <p>兼容测试 : <span style="margin-left:40px;" :style="sctResult1">{{ sctResult }}</span></p>
+
+              <div class="rich" v-html="editorFrom1" />
+
+              <div class="titleStyle">四. 产品验收</div>
+
+              <p>验收结果 : <span style="margin-left:40px;" :style="acceptanceResult1">{{ acceptanceResult }}</span></p>
+
+              <div class="rich" v-html="editorFro" />
+
+              <div class="titleStyle">五. bug指标</div>
+
+              <el-table :data="tableData" border>
+                <el-table-column prop="totalBug" label="bug总数" min-width="200" align="center" edit="false">
+                  <template slot-scope="scope">
+                    <el-input v-if="scope.row.totalBug.edit" ref="totalBug" v-model="scope.row.totalBug.value" style="width: 100%" @blur="scope.row.totalBug.edit = false" />
+                    <span v-else>{{ scope.row.totalBug.value }}</span>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="fixBug" min-width="200" align="center" label="已解决bug数">
+                  <template slot-scope="scope">
+                    <el-input v-if="scope.row.fixBug.edit" ref="fixBug" v-model="scope.row.fixBug.value" style="width: 100%" @blur="scope.row.fixBug.edit = false" />
+                    <span v-else>{{ scope.row.fixBug.value }}</span>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="remainBug" min-width="200" align="center" label="遗留bug数">
+                  <template slot-scope="scope">
+                    <el-input v-if="scope.row.remainBug.edit" ref="remainBug" v-model="scope.row.remainBug.value" style="width: 100%" @blur="scope.row.remainBug.edit = false" />
+                    <span v-else>{{ scope.row.remainBug.value }}</span>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="rateOfFix" min-width="200" align="center" label="bug解决率">
+                  <template slot-scope="scope">
+                    <el-input v-if="scope.row.rateOfFix.edit" ref="rateOfFix" v-model="scope.row.rateOfFix.value" style="width: 100%" @blur="scope.row.rateOfFix.edit = false" />
+                    <span v-else>{{ scope.row.rateOfFix.value }}</span>
+                  </template>
+                </el-table-column>
+              </el-table>
+              <el-row>
+                <el-col :span="24"><div style="margin: 2% 0;">1、遗留问题</div>{{ ClientDatayl.bugInfo }}</el-col>
+              </el-row>
+
+              <div class="rich" v-html="editorEle1" />
+            </div>
+          </div>
+        </div>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -232,6 +426,7 @@ export default {
       safeResultChange: { color: '' },
       moniterResultChange: { color: '' },
       showData: false,
+      dialogTableVisible: false,
       status: '',
       acceptanceResult: '',
       sctResult: '',

+ 123 - 42
src/views/Platform/presentation/acceptTheReport.vue

@@ -1,37 +1,27 @@
 <template>
   <!-- 提测预览 -->
-  <div id="resumeId" class="eleStyle">
+  <div class="eleStyle">
     <div style="height:100%;width:94%; background:#ffffff; margin: 3%; border-radius: 8px; overflow: hidden;">
       <div style="padding:2% 9%;">
-        <div style="display: flex; font-size: 19px;  white-space: nowrap; font-weight: bold;">
-          <span style="flex:2;">{{ fromCreateData.name }}</span>
-          <span style="flex:1;">by : {{ fromCreateData.submitter }} </span>
+        <div style="display: flex; white-space: nowrap; font-family:SimSuncss">
+          <span style="flex:1;font-weight: bold;font-size: 24px;color: #3a8ee6">{{ fromCreateData.name }}</span>
+          <span style="flex:2;margin:1% 0 0 20px;font-size: 17px;">by {{ fromCreateData.submitter }}</span>
           <span style="flex:1;">
-            <el-button type="primary" size="mini" style="margin:0 2% 0 0%;" @click="promptEmail(fromCreateData)">发送报告</el-button>
-            <el-button size="mini" @click="download()">下载测试报告</el-button>
+            <el-button type="primary" size="mini" style="margin:0 2% 0 0%;" @click="dialogTableVisible = true">发送报告</el-button>
+            <el-button size="mini" @click="dialogTableVisible = true">下载测试报告</el-button>
           </span>
         </div>
-
         <div class="titleStyle" style="margin:1% 0;">一. 提测详情</div>
-
         <div v-if="oneShow">
           <el-form :model="fromCreateData">
             <div style="display: flex;">
-              <div style="flex:1">
-                <div class="marage">是否延期 : <span :style="lateStatus1">{{ lateStatus }}</span></div><br>
-              </div>
-              <div style="flex:1;">
-                <div v-show="showDelay" class="marage">延期原因 : <span>{{ fromCreateData.lateReason }}</span></div><br>
-              </div>
+              <div style="flex:1"><div class="marage">是否延期 : <span :style="lateStatus1">{{ lateStatus }}</span></div><br></div>
+              <div style="flex:1;"><div v-show="showDelay" class="marage">延期原因 : <span>{{ fromCreateData.lateReason }}</span></div><br></div>
             </div>
 
             <div style="display: flex;">
-              <div style="flex:1">
-                <div class="marage">涉及安全项 : <span :style="safeStatus1">{{ safeStatus }}</span></div><br>
-              </div>
-              <div style="flex:1;">
-                <div v-show="showData" class="marage">完成结果 : <span>{{ fromCreateData.safeInfo }}</span></div><br>
-              </div>
+              <div style="flex:1"><div class="marage">涉及安全项 : <span :style="safeStatus1">{{ safeStatus }}</span></div><br></div>
+              <div style="flex:1;"><div v-show="showData" class="marage">完成结果 : <span>{{ fromCreateData.safeInfo }}</span></div><br></div>
             </div>
 
             <div style="display: flex;">
@@ -70,30 +60,18 @@
             </div>
 
             <div style="display: flex;">
-              <div style="flex:1">
-                <el-form-item label="新增Apollo : "><span :style="configInfo1">{{ config }}</span></el-form-item><br>
-              </div>
-              <div style="flex:1;">
-                <el-form-item v-show="showDelay1" label="Apollo名称">{{ fromCreateData.configInfo }}</el-form-item><br>
-              </div>
+              <div style="flex:1"><el-form-item label="新增Apollo : "><span :style="configInfo1">{{ config }}</span></el-form-item><br></div>
+              <div style="flex:1;"><el-form-item v-show="showDelay1" label="Apollo名称">{{ fromCreateData.configInfo }}</el-form-item><br></div>
             </div>
 
             <div style="display: flex;">
-              <div style="flex:1">
-                <el-form-item label="依赖组件 : "><span :style="dependentComponents1">{{ dependentCom }}</span></el-form-item>
-              </div>
-              <div style="flex:1;">
-                <el-form-item v-show="showDelay2" label="组件名称 : ">{{ fromCreateData.dependentComponents }}</el-form-item>
-              </div>
+              <div style="flex:1"><el-form-item label="依赖组件 : "><span :style="dependentComponents1">{{ dependentCom }}</span></el-form-item></div>
+              <div style="flex:1;"><el-form-item v-show="showDelay2" label="组件名称 : ">{{ fromCreateData.dependentComponents }}</el-form-item></div>
             </div>
 
             <div style="display: flex; margin:1% 0;">
-              <div style="flex:1">
-                <el-form-item label="是否延期 : "><span :style="lateStatus1">{{ lateStatus }}</span></el-form-item>
-              </div>
-              <div style="flex:1;">
-                <el-form-item v-show="showDelay" label="延期原因 : ">{{ fromCreateData.lateReason }}</el-form-item>
-              </div>
+              <div style="flex:1"><el-form-item label="是否延期 : "><span :style="lateStatus1">{{ lateStatus }}</span></el-form-item></div>
+              <div style="flex:1;"><el-form-item v-show="showDelay" label="延期原因 : ">{{ fromCreateData.lateReason }}</el-form-item></div>
             </div>
 
             <el-form-item label="PM & UI : ">{{ fromCreateData.pmUi }}</el-form-item><br>
@@ -109,13 +87,112 @@
 
         <div class="titleStyle">三. 其他</div>
         <el-form>
-          <div v-if="oneShow" class="marage">新增配置 : <span>{{ fromCreateData.configInfo }}</span></div><br>
-          <div class="marage">其他 : <span>{{ fromCreateData.others }}</span></div><br>
+          <div v-if="oneShow" class="marage">新增配置 : {{ fromCreateData.configInfo }}</div><br>
+          <div class="marage">其他 : {{ fromCreateData.others }}</div><br>
           <el-button style="float:right; margin:8% 50%;" @click="open()"> 返 回 </el-button>
         </el-form>
       </div>
     </div>
-  </div></template>
+
+    <el-dialog title="邮件预览" width="70%" center :visible.sync="dialogTableVisible" @open="dasd()">
+      <div align="center">
+        <el-button type="primary" size="mini" @click="promptEmail(fromCreateData)">确定发送</el-button>
+        <el-button size="mini" @click="download()">确定下载</el-button>
+      </div>
+      <div id="resumeId" class="eleStyle">
+        <div style="height:100%;width:94%; background:#ffffff; margin: 3%; border-radius: 8px; overflow: hidden;">
+          <div style="padding:2% 9%;">
+            <div style="display: flex; white-space: nowrap; font-family:SimSuncss">
+              <span style="flex:1;font-weight: bold;font-size: 24px;color: #3a8ee6">{{ fromCreateData.name }}</span>
+              <span style="flex:2;margin:1% 0 0 20px;font-size: 17px;">by {{ fromCreateData.submitter }}
+              </span>
+            </div>
+
+            <div class="titleStyle" style="margin:1% 0;">一. 提测详情</div>
+
+            <div v-if="oneShow">
+              <el-form :model="fromCreateData">
+                <div style="display: flex;">
+                  <div style="flex:1"><div class="marage">是否延期 : <span :style="lateStatus1">{{ lateStatus }}</span></div><br></div>
+                  <div style="flex:1;"><div v-show="showDelay" class="marage">延期原因 : <span>{{ fromCreateData.lateReason }}</span></div><br></div>
+                </div>
+
+                <div style="display: flex;">
+                  <div style="flex:1"><div class="marage">涉及安全项 : <span :style="safeStatus1">{{ safeStatus }}</span></div><br></div>
+                  <div style="flex:1;"><div v-show="showData" class="marage">完成结果 : <span>{{ fromCreateData.safeInfo }}</span></div><br></div>
+                </div>
+
+                <div style="display: flex;">
+                  <div style="flex:1">
+                    <div class="marage">SDL链接 : <a href="http://wiki.intra.xiaojukeji.com/pages/viewpage.action?pageId=237016271" style="color:blue;">普惠SDL准入标准</a></div><br>
+                    <div class="marage">是否跟版 : <span>{{ fromCreateData.isEdition }}</span></div><br>
+                    <div class="marage">优 先 级 : <span>{{ fromCreateData.priority }}</span></div><br>
+                  </div>
+                  <div style="flex:1;">
+                    <div class="marage">开发时间 : <span>{{ fromCreateData.devTimeStart }} 至 {{ fromCreateData.devTimeEnd }}</span></div><br>
+                    <div class="marage">计划提测时间 : <span>{{ fromCreateData.planLaunchTime }}</span></div><br>
+                    <div class="marage">实际提测时间 : <span>{{ fromCreateData.launchTime }}</span></div><br>
+                  </div>
+                </div>
+                <div class="marage">prd地址 : <span>{{ fromCreateData.prdUrl }}</span></div><br>
+                <div class="marage">设计方案 : <span>{{ fromCreateData.devUrl }}</span></div><br>
+                <div class="marage">自测结果 : <span>{{ fromCreateData.selfTestInfo }}</span></div><br>
+                <div class="marage">测试建议 : <span>{{ fromCreateData.testSuggest }}</span></div><br>
+                <el-form-item label="提测模块" style="margin: 2px 0;" />
+                <div class="rich" v-html=" moduleInfoOne" />
+              </el-form>
+            </div>
+
+            <div v-if="towShow">
+              <el-form :model="fromCreateData">
+                <div style="display:flex;">
+                  <div style="flex:1">
+                    <el-form-item label="测试地址 : ">{{ fromCreateData.packageUrl }}</el-form-item><br>
+                    <el-form-item label="提测环境 : ">{{ fromCreateData.env }}</el-form-item><br>
+                    <el-form-item label="自测结果 : ">{{ fromCreateData.selfTestInfo }}</el-form-item><br>
+                  </div>
+                  <div style="flex:1">
+                    <el-form-item label="打包分支 : ">{{ fromCreateData.packageBranch }}</el-form-item><br>
+                    <el-form-item label="优 先 级 : ">{{ fromCreateData.priority }}</el-form-item><br>
+                  </div>
+                </div>
+
+                <div style="display: flex;">
+                  <div style="flex:1"><el-form-item label="新增Apollo : "><span :style="configInfo1">{{ config }}</span></el-form-item><br></div>
+                  <div style="flex:1;"><el-form-item v-show="showDelay1" label="Apollo名称">{{ fromCreateData.configInfo }}</el-form-item><br></div>
+                </div>
+
+                <div style="display: flex;">
+                  <div style="flex:1"><el-form-item label="依赖组件 : "><span :style="dependentComponents1">{{ dependentCom }}</span></el-form-item></div>
+                  <div style="flex:1;"><el-form-item v-show="showDelay2" label="组件名称 : ">{{ fromCreateData.dependentComponents }}</el-form-item></div>
+                </div>
+
+                <div style="display: flex; margin:1% 0;">
+                  <div style="flex:1"><el-form-item label="是否延期 : "><span :style="lateStatus1">{{ lateStatus }}</span></el-form-item></div>
+                  <div style="flex:1;"><el-form-item v-show="showDelay" label="延期原因 : ">{{ fromCreateData.lateReason }}</el-form-item></div>
+                </div>
+
+                <el-form-item label="PM & UI : ">{{ fromCreateData.pmUi }}</el-form-item><br>
+                <div class="noWrap">
+                  <el-form-item label="测试建议 :">{{ fromCreateData.testSuggest }}</el-form-item><br>
+                  <el-form-item label="需求list :">{{ fromCreateData.functionInfo }}</el-form-item><br>
+                  <el-form-item label="涉及接口 :">{{ fromCreateData.interfaceInfo }}</el-form-item><br>
+                </div>
+              </el-form>
+            </div>
+            <div class="titleStyle">二. 联调详情</div>
+            <div class="rich" v-html="joinTestOne" />
+            <div class="titleStyle">三. 其他</div>
+            <el-form>
+              <div v-if="oneShow" class="marage">新增配置 : {{ fromCreateData.configInfo }}</div><br>
+              <div class="marage" style="margin:8% 0%;">其他 : {{ fromCreateData.others }}</div><br>
+            </el-form>
+          </div>
+        </div>
+      </div>
+    </el-dialog>
+  </div>
+</template>
 
 <script>
 import { launchTestSendmail } from '@/api/ResultPage'
@@ -130,6 +207,7 @@ export default {
       dependentComponents1: { color: 'green' },
       lateStatus1: { color: 'red' },
       safeStatus1: { color: 'green' },
+      dialogTableVisible: false,
       dependentCom: '',
       config: '',
       showDelay: false,
@@ -148,10 +226,12 @@ export default {
     }
   },
   created() {
-    // this.getRouterData()
     this.idGet()
   },
   methods: {
+    dasd() {
+      this.idGet()
+    },
     download() {
       this.getPdf('resumeId', this.name)
     },
@@ -222,6 +302,7 @@ export default {
           var sendImgData = imgData.substring(imgData.indexOf(',') + 1)
           var postData = { 'reportId': ele.id, 'imgStr': sendImgData, 'url': window.location.href, 'emailUser': e }
           launchTestSendmail(postData).then(res => {
+            that.dialogTableVisible = false
             res.code === 200 ? that.$message.success('发送测试报告成功') : that.$message.error('发送测试报告失败,请联系管理员!')
           })
         })

+ 84 - 50
src/views/Platform/presentation/testPresenyL.vue

@@ -1,14 +1,14 @@
 <template>
   <!-- 日报预览 -->
-  <div id="resumeId" class="eleStyle">
+  <div class="eleStyle">
     <div style="height:100%;width:94%; background:#ffffff; margin: 3% 3% 8% 3%; border-radius: 8px; overflow: hidden;">
-      <el-form :inline="true" :model="fromCreat" style="margin:2% 9%">
+      <el-form :model="fromCreat" style="margin:2% 9%">
         <div>
-          <div style="display: flex; font-size: 19px;  white-space: nowrap; font-weight: bold;">
-            <span style="flex:1;">{{ fromCreat.reportName }}</span>
-            <span style="flex:1;">by : {{ fromCreat.ownner }}
-              <el-button v-show="btn" type="primary" size="mini" style="margin:0 2% 0 15%;" @click="promptEmail(fromCreat)">发送报告</el-button>
-              <el-button v-show="btn" size="mini" @click="download()">下载测试报告</el-button>
+          <div style="display: flex; white-space: nowrap; font-family:SimSuncss">
+            <span style="flex:1;font-weight: bold;font-size: 24px;color: #3a8ee6">{{ fromCreat.reportName }}</span>
+            <span style="flex:2;margin: 0.5% 0 0 20px;font-size: 17px;">by {{ fromCreat.ownner }}
+              <el-button v-show="btn" type="primary" size="mini" style="margin:0 2% 0 5%;" @click="dialogTableVisible = true">发送报告</el-button>
+              <el-button v-show="btn" size="mini" @click="dialogTableVisible = true">下载测试报告</el-button>
             </span>
           </div>
           <div style="font-size:15px;color:#606266;" class="rich" v-html="projectProgress" />
@@ -17,7 +17,6 @@
           <!-- <div style="font-size:15px;color:#606266;" class="rich" v-html="TestProgress" /> -->
 
           <div class="titleStyle">三. bug情况</div>
-
           <div style="border: 1px,solid #ccc;font-size:14px;color:#606266;">
             <div style="margin: 1%;">1、bug统计</div>
             <div style="display:flex;">
@@ -32,6 +31,37 @@
         <el-button v-show="btn" style="float:right; margin:2% 50%;" @click="$router.go(-1)"> 返 回 </el-button>
       </el-form>
     </div>
+    <el-dialog title="邮件预览" width="70%" center :visible.sync="dialogTableVisible" @open="dasd()">
+      <div align="center">
+        <el-button type="primary" size="mini" @click="promptEmail(fromCreat)">确定发送</el-button>
+        <el-button size="mini" @click="download()">确定下载</el-button>
+      </div>
+      <div id="Gambol" class="eleStyle">
+        <div style="height:100%;width:94%; background:#ffffff; margin: 3% 3% 8% 3%; border-radius: 8px; overflow: hidden;">
+          <el-form :model="fromCreat" style="margin:2% 9%">
+            <div>
+              <div style="display: flex; white-space: nowrap; font-family:SimSuncss">
+                <span style="flex:1;font-weight: bold;font-size: 24px;color: #3a8ee6">{{ fromCreat.reportName }}</span>
+                <span style="flex:2;margin:1% 0 0 20px;font-size: 17px;">by {{ fromCreat.ownner }}
+                </span>
+              </div>
+              <div style="font-size:15px;color:#606266;" class="rich" v-html="projectProgress" />
+              <div class="titleStyle">三. bug情况</div>
+              <div style="border: 1px,solid #ccc;font-size:14px;color:#606266;">
+                <div style="margin: 1%;">1、bug统计</div>
+                <div style="display:flex;">
+                  <div id="lineShow1" style="flex:2; width: 800px;height:400px;" />
+                  <div style="flex:1; width: 400px;height:400px;" />
+                  <div id="barShow1" style="flex:2; width: 800px;height:400px;" />
+                </div>
+                <div style="margin: 1%;">2、bug说明</div>
+                {{ bugshow }}
+              </div>
+            </div>
+          </el-form>
+        </div>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -39,15 +69,17 @@
 import echarts from 'echarts'
 import { bugDailyList, dailyReport } from '@/api/testPresentetion'
 import { dailyReportSendmail } from '@/api/ResultPage'
-// import html2canvas from 'html2canvas'
-import domtoimage from 'dom-to-image'
+import html2canvas from 'html2canvas'
+// import domtoimage from 'dom-to-image'
 export default {
   name: 'TestPresenyL',
   data() {
     return {
       userInformation: localStorage.getItem('username'),
       userNames: localStorage.getItem('realname'),
+      dialogTableVisible: false,
       bugshow: '',
+      postData: {},
       fromCreat: {},
       TestProgress: '',
       projectProgress: '',
@@ -63,11 +95,11 @@ export default {
   },
   created() {
     this.idGet()
-    window.pageYOffset = 0
-    document.documentElement.scrollTop = 0
-    document.body.scrollTop = 0
   },
   methods: {
+    dasd() {
+      this.idGet()
+    },
     idGet() {
       dailyReport({ id: this.$route.query.id }).then((res) => {
         this.fromCreat = res.data
@@ -104,11 +136,32 @@ export default {
             yAxis: [{}],
             series: this.statusMap
           })
+          if (document.getElementById('lineShow1')) {
+            echarts.init(document.getElementById('lineShow1')).setOption({
+              title: { left: 'center', text: 'bug数量汇总' },
+              tooltip: { trigger: 'axis' },
+              legend: { top: 30, data: this.bugName },
+              grid: { left: '5%', right: '25%', bottom: '12%', containLabel: true },
+              xAxis: { type: 'category', boundaryGap: true, data: this.dateList },
+              yAxis: { type: 'value' },
+              series: this.numList
+            })
+            echarts.init(document.getElementById('barShow1')).setOption({
+              title: { text: 'bug状态汇总', x: 'center' },
+              color: ['#003366', '#006699', '#4cabce', '#e5323e'],
+              tooltip: { trigger: 'axis' },
+              legend: { top: 30, data: this.statusMap },
+              grid: { left: '5%', right: '25%', bottom: '12%', containLabel: true },
+              xAxis: [{ data: this.statusList }],
+              yAxis: [{}],
+              series: this.statusMap
+            })
+          }
         })
       })
     },
     download() {
-      this.getPdf('resumeId', this.name)
+      this.getPdf('Gambol', this.name)
     },
     promptEmail(e) {
       this.$prompt('请输入邮箱', '提示', {
@@ -122,41 +175,19 @@ export default {
     },
 
     sendReport(e, ele) {
-      // var node = document.getElementById('resumeId')
-      // domtoimage.toPng(node).then(function(dataUrl) {
-      //   var url = dataUrl
-      //   url = url.toString().substring(url.indexOf(',') + 1)
-      //   var postData = { 'reportId': ele.id, 'imgStr': url, 'url': window.location.href, 'emailUser': e }
-      //   dailyReportSendmail(postData).then(res => {
-      //     // res.code === 200 ? that.$message({ type: 'success', message: '发送测试报告成功' }) : that.$message({ type: 'error', message: '发送测试报告失败,请联系管理员!' })
-      //   })
-      //   var img = new Image()
-      //   img.src = dataUrl
-      //   document.body.appendChild(img)
-
-      domtoimage.toJpeg(document.getElementById('resumeId')).then(function(dataUrl) {
-        var url = dataUrl
-        url = url.toString().substring(url.indexOf(',') + 1)
-        var postData = { 'reportId': ele.id, 'imgStr': url, 'url': window.location.href, 'emailUser': e }
-        dailyReportSendmail(postData).then(res => { console.log(res) })
-      })
-      // }).catch(function(error) {
-      //   console.error('oops, something went wrong!', error)
-      // })
-      // setTimeout(() => {
-      //   var that = this
-      //   that.btn = false
-      //   html2canvas(document.getElementById('resumeId'), { useCORS: true, windowWidth: document.getElementById('resumeId').scrollWidth, windowHeight: document.getElementById('resumeId').scrollHeight }).then(function(canvas) {
-      //     var url = canvas.toDataURL('image/png', 1.0)
-      //     console.log(url)
-      //     url = url.toString().substring(url.indexOf(',') + 1)
-      //     var postData = { 'reportId': ele.id, 'imgStr': url, 'url': window.location.href, 'emailUser': e }
-      //     dailyReportSendmail(postData).then(res => {
-      //       res.code === 200 ? that.$message({ type: 'success', message: '发送测试报告成功' }) : that.$message({ type: 'error', message: '发送测试报告失败,请联系管理员!' })
-      //       that.btn = true
-      //     })
-      //   })
-      // }, 1000)
+      var node = document.getElementById('Gambol')
+      setTimeout(() => {
+        var that = this
+        html2canvas(node, { useCORS: true }).then(function(canvas) {
+          var url = canvas.toDataURL('image/png', 1)
+          url = url.toString().substring(url.indexOf(',') + 1)
+          var postData = { 'reportId': ele.id, 'imgStr': url, 'url': window.location.href, 'emailUser': e }
+          dailyReportSendmail(postData).then(res => {
+            that.dialogTableVisible = false
+            res.code === 200 ? that.$message({ type: 'success', message: '发送测试报告成功' }) : that.$message({ type: 'error', message: '发送测试报告失败,请联系管理员!' })
+          })
+        })
+      }, 1000)
     }
   }
 }
@@ -171,10 +202,13 @@ export default {
   }
   .titleStyle {
     color: #333B4A;
-    margin: 3% 0 1% 0;
+    margin: 1% 0 1% 0;
     font-size: 19px;
     font-weight: bold;
   }
+  #app .hideSidebar .sidebar-container {
+    display: none;
+}
   .rich>>> table tr td{border:1px solid #ccc;font-size: 14px; color: #606266}
   .rich>>> table th{border:1px solid #ccc; font-size: 14px; background: #F0F7FF; color: #606266}
   .rich>>> table {border:1px solid #ccc; border-collapse: collapse;line-height: 30px; text-align: center;font-size: 14px; color: #606266}

+ 11 - 7
src/views/virtualDevices/HMvehicle.vue

@@ -128,7 +128,7 @@
           >
             <el-divider />
             <div style="padding:20px">
-              <table class="table-suit">
+              <table class="table-suit" border="0">
                 <tbody>
                   <tr>
                     <td>硬件中控ID</td>
@@ -402,13 +402,14 @@ export default {
       } else {
         activeHmVirtualDevice(params).then(res => {
           if (res.code === 200) {
+            this.loading = true
             setTimeout(() => {
               this._queryDeviceInfo()
               this.$message({
                 message: `车辆ID ${scope.vehicleId} 激活成功`,
                 type: 'success'
               })
-            }, 500)
+            }, 1000)
           } else {
             this.$message.error(res.msg)
           }
@@ -455,7 +456,7 @@ export default {
       background-color rgba(255,255,255,1)
       box-shadow 0px 0px 11px 0px rgba(238,240,245,1)
       border-radius 7px
-      width 93%
+      width 96%
       margin 25px 0
       padding 20px
       min-height calc(100vh - 100px)
@@ -490,15 +491,18 @@ export default {
     .table-suit
       width 100%
       margin-top 30px
+      border 1px solid #e6e6e6
       tr
-        border 1px solid #eee
-      tr:nth-child(2n)
-        background #fbfbfb
+        border 1px solid #e6e6e6
+      // tr:nth-child(2n)
+      //   background #fbfbfb
       tr td
         padding 10px 20px
-        border-right 1px solid #eee
+        // border-right 1px solid #e6e6e6
+        // border-bottom 1px solid #e6e6e6
       tr td:nth-child(2n-1)
         font-weight 500
+        background #f1f4f7
       tr td:last-child
         border-right 0
 </style>

+ 0 - 44
src/views/virtualDevices/HMvehicleCreate.vue

@@ -78,50 +78,6 @@ export default {
       formLabelWidth: '120px',
       city: cityJson,
       value: '',
-      hmVehicleBaseInfo: {
-        'batteryVoltage': 36511,
-        'controllerTemperature': 25,
-        'holzerVelocity': 2,
-        'rechargeNum': 1,
-        'ridingCurrent': 10,
-        'rscap': 26511,
-        'rsoc': 27,
-        'singleMileage': 10,
-        'soh': 0,
-        'totalMileage': 66,
-        'vehicleStatus': {
-          'vAccStatus': 1,
-          'vBatteryLockStatus': 1,
-          'vBluetoothConnectionStatus': 1,
-          'vBorrowOrReturnStatus': 1,
-          'vExternalBatteryExistStatus': 0,
-          'vHandlerStatus': 1,
-          'vMotorLockStatus': 0,
-          'vMovingStatus': 0,
-          'vRearWheelLockStatus': 0,
-          'vRidingStatus': 0,
-          'vSleepStatus': 0
-        }
-      },
-      hmVehicleBaseStationInfo: {
-        'cellId': 37299,
-        'lac': 8448,
-        'mcc': 1120,
-        'mnc': 0
-      },
-      hmVehicleGpsInfo: {
-        'azimuth': 4,
-        'gpsSignalInfo': {
-          'backupBattery': 9,
-          'gpsLocationStatus': 1,
-          'gpsSatelliteNum': 9,
-          'gpsSignalStrength': 9
-        },
-        'gpsSpeed': 0,
-        'high': 1.2,
-        'lat': 31.85659153128749,
-        'lng': 117.26081489617174
-      },
       serviceDataRules: {
         imei: [{ required: true, message: '终端IMEI码必须为十五位', trigger: 'blur' }],
         ecuId: [{ required: true, message: '硬件中控ID不能为空', trigger: 'blur' }],