Преглед на файлове

Merge branch 'bug_fix' of git.xiaojukeji.com:jacklijiajia/thoth-frontend into bug_fix

qinzhipeng_v преди 5 години
родител
ревизия
a3beabefb4

+ 8 - 8
src/api/HMvehicle.js

@@ -4,25 +4,25 @@ 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
   })
 }
 
 // 查询设备信息
-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
   })
@@ -31,7 +31,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
   })
@@ -40,7 +40,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
   })

+ 27 - 0
src/api/qualityCenter.js

@@ -72,3 +72,30 @@ export function getHandlerCount(params) {
     params
   })
 }
+
+// 客户端树形
+export function getClientInfo(params) {
+  return request({
+    url: qualityUrl + '/api/app/get-infos',
+    method: 'get',
+    params
+  })
+}
+
+// 热修复数据
+export function getHotpatch(params) {
+  return request({
+    url: qualityUrl + '/api/app/get-hotpatch-count',
+    method: 'get',
+    params
+  })
+}
+
+// 热修复数据详情
+export function getHotpatchProcess(params) {
+  return request({
+    url: qualityUrl + '/api/app/get-hotpatch',
+    method: 'get',
+    params
+  })
+}

+ 1 - 1
src/apiConfig/api.js

@@ -6,4 +6,4 @@ export const mockUrl = 'http://10.179.24.176:8980' // 线下
 
 export const qualityUrl = 'http://10.179.209.19:8898' // 质量度量
 
-export const HMvehicleUrl = 'http://172.23.161.143:9999' // 电单车
+export const HMvehicleUrl = 'http://172.23.162.169:9999' // 电单车

+ 7 - 0
src/router/index.js

@@ -553,6 +553,13 @@ export const constantRoutes = [
             hidden: true,
             component: () => import('@/views/quality/qualityDefectProcess.vue'),
             meta: { title: '缺陷过程' }
+          },
+          {
+            path: 'qualityHotpatchProcess',
+            name: '热修复过程',
+            hidden: true,
+            component: () => import('@/views/quality/qualityHotpatchProcess.vue'),
+            meta: { title: '热修复过程' }
           }
         ]
       },

+ 16 - 44
src/views/Platform/bugManage/bugCreate.vue

@@ -3,7 +3,7 @@
     <el-form ref="form" :model="form" :rules="serviceDataRules">
       <div class="block">
         <div class="block-flex">
-          <el-form-item label="标题" prop="bugName" label-width="110px"><el-input v-model="form.bugName" autocomplete="off" placeholder="普惠质量产品工具平台..." style="width:90%;" /></el-form-item>
+          <el-form-item label="标题" prop="bugName" label-width="112px"><el-input v-model="form.bugName" autocomplete="off" placeholder="普惠质量产品工具平台..." style="width:89.6%;" /></el-form-item>
           <div class="line-between">
             <el-form-item label="类型" prop="bugType" label-width="124px">
               <el-select v-model="form.bugType" style="width:76%;" placeholder="类型">
@@ -16,7 +16,7 @@
               </el-select>
             </el-form-item>
           </div>
-          <div class="line-between">
+          <!-- <div class="line-between">
             <el-form-item label="状态" prop="status" label-width="124px">
               <el-select v-model="form.status" placeholder="状态" style="width:76%;">
                 <el-option v-for="item in bugStatusStr" :key="item.name" :label="item.name" :value="item.code" />
@@ -27,7 +27,7 @@
                 <el-option v-for="item in reasonStr" :key="item.name" :label="item.name" :value="item.code" />
               </el-select>
             </el-form-item>
-          </div>
+          </div> -->
           <div class="line-between">
             <el-form-item label="级别" prop="priority" label-width="124px">
               <el-select v-model="form.priority" style="width:76%;" placeholder="级别">
@@ -71,52 +71,28 @@
               </el-select>
             </el-form-item>
           </div>
-          <el-form-item label="bug描述" prop="bugDescribe" label-width="110px"><el-input v-model="form.bugDescribe" type="textarea" placeholder="bug描述" rows="2" style="width:90%;" /></el-form-item>
-        </div>
-      </div>
-      <div class="block">
-        <div class="block-flex">
+          <el-form-item label="bug描述" prop="bugDescribe" label-width="112px"><el-input v-model="form.bugDescribe" type="textarea" placeholder="bug描述" rows="2" style="width:89.6%;" /></el-form-item>
           <div class="line-between">
-            <el-form-item label="创建人" label-width="124px"><el-input v-model="form.creator" autocomplete="off" style="width:76%;" /></el-form-item>
-            <el-form-item label="bug责任人" prop="assigner" label-width="147px">
-              <el-select v-model="form.assigner" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+            <el-form-item label="当前处理人" prop="currentHandler" label-width="124px">
+              <el-select v-model="form.currentHandler" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
                 <el-option
-                  v-for="item in optionsAssigner"
+                  v-for="item in optionsCurrentHandler"
                   :key="item.id"
-                  :label="item.email"
+                  :label="item.name"
                   :value="item.email"
                 />
               </el-select>
             </el-form-item>
-          </div>
-          <div class="line-between">
-            <el-form-item label="当前处理人" prop="currentHandler" label-width="124px">
-              <el-select v-model="form.currentHandler" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+            <el-form-item label="bug责任人" prop="assigner" label-width="147px">
+              <el-select v-model="form.assigner" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
                 <el-option
-                  v-for="item in optionsCurrentHandler"
+                  v-for="item in optionsAssigner"
                   :key="item.id"
-                  :label="item.email"
+                  :label="item.name"
                   :value="item.email"
                 />
               </el-select>
             </el-form-item>
-            <el-form-item label="开始开发时间" label-width="147px">    <el-date-picker
-              v-model="form.startDevTime"
-              type="datetime"
-              placeholder="选择时间"
-              style="width:76%;"
-              value-format="yyyy-MM-dd HH:hh:mm"
-            /></el-form-item>
-          </div>
-          <div class="line-between">
-            <el-form-item label="reopen次数" prop="reopenTimes" label-width="124px"><el-input v-model="form.reopenTimes" autocomplete="off" style="width:76%;" /></el-form-item>
-            <el-form-item label="提交测试时间" label-width="147px">    <el-date-picker
-              v-model="form.waitTestTime"
-              type="datetime"
-              placeholder="选择时间"
-              style="width:76%;"
-              value-format="yyyy-MM-dd HH:hh:mm"
-            /></el-form-item>
           </div>
         </div>
       </div>
@@ -222,8 +198,6 @@ export default {
       bugTypeStr: [],
       bugLevelStr: [],
       discoveryMethodStr: [],
-      reasonStr: [],
-      bugStatusStr: [],
       stageStr: [],
       moduleStr: [],
       fileList: [],
@@ -288,9 +262,7 @@ export default {
     },
     async bugListSelect() {
       await bugGetEnum().then(res => {
-        this.bugStatusStr = res.data.bugEnumList
         this.stageStr = res.data.bugStageEnumList
-        this.reasonStr = res.data.reasonEnumList
         this.bugTypeStr = res.data.bugTypeEnumList
         this.bugLevelStr = res.data.priorityEnumList
         this.discoveryMethodStr = res.data.discoveryMethodEnumList
@@ -301,7 +273,7 @@ export default {
         this.taskIdStr = res.data
       })
       if (this.$route.query.id) {
-        getTaskData(this.$route.query.id).then(res => {
+        await getTaskData(this.$route.query.id).then(res => {
           this.taskStatus = res.data.status
           // const pauseTaskId = this.taskIdStr.filter(value=>value.name === res.data.name)
           this.$set(this.form, 'taskId', res.data.id)
@@ -424,9 +396,9 @@ export default {
       background-color rgba(255,255,255,1)
       box-shadow 0px 0px 11px 0px rgba(238,240,245,1)
       border-radius 7px
-      width 78vw
+      width 82vw
       margin-top 25px
-      padding 29px 50px
+      padding 29px 50px 10px 50px
       .block-flex
         display flex
         flex-wrap wrap
@@ -450,7 +422,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 78vw
+      width 82vw
       margin-top 25px
       padding 29px 50px
       margin-bottom 22px

+ 18 - 11
src/views/Platform/bugManage/bugQuery.vue

@@ -37,8 +37,8 @@
       </div>
       <div class="block">
         <div class="display-messege">
-          <div class="divide-threeparts">创建人 :&nbsp;&nbsp;&nbsp;{{ form.creator }}</div>
-          <div class="divide-threeparts"><span>bug责任人 :</span>&nbsp;&nbsp;&nbsp;{{ form.assigner }}</div>
+          <div class="divide-threeparts">创建人 :&nbsp;&nbsp;&nbsp;{{ form.creatorList }}</div>
+          <div class="divide-threeparts"><span>bug责任人 :</span>&nbsp;&nbsp;&nbsp;{{ form.assignerList }}</div>
           <div class="divide-threeparts"><span>当前处理人 :</span>&nbsp;&nbsp;&nbsp;{{ currentHandler }}</div>
         </div>
         <div class="display-messege">
@@ -46,6 +46,11 @@
           <div class="divide-threeparts">创建时间 :&nbsp;&nbsp;&nbsp;{{ form.gmtCreate }}</div>
           <div class="divide-threeparts">提交测试时间 :&nbsp;&nbsp;&nbsp;{{ form.waitTestTime }}</div>
         </div>
+        <div class="display-messege">
+          <div class="divide-threeparts">是否过夜 :&nbsp;&nbsp;&nbsp;{{ form.overNigte }}</div>
+          <div class="divide-threeparts">修复时间 :&nbsp;&nbsp;&nbsp;{{ form.finishTime }}</div>
+          <div class="divide-threeparts">修复时长 :&nbsp;&nbsp;&nbsp;{{ form.fixTime }}</div>
+        </div>
         <div class="display-messege-end">
           <div class="divide-threeparts">reopen次数 :&nbsp;&nbsp;&nbsp;{{ form.reopenTimes }}</div>
         </div>
@@ -63,8 +68,8 @@
         </div>
         <div class="display-messege">
           <div class="divide-threeparts">app版本号 :&nbsp;&nbsp;&nbsp;{{ form.appVersion }}</div>
-          <div class="divide-threeparts">修复方式 :&nbsp;&nbsp;&nbsp;{{ repairResult }}</div>
-          <div class="divide-threeparts">修复结果 :&nbsp;&nbsp;&nbsp;{{ reasonsAndSolutionForTheProblem }}</div>
+          <div class="divide-threeparts">修复结果 :&nbsp;&nbsp;&nbsp;{{ repairResult }}</div>
+          <div class="divide-threeparts">修复方式 :&nbsp;&nbsp;&nbsp;{{ reasonsAndSolutionForTheProblem }}</div>
         </div>
         <div class="display-messege-end">
           app版本号 :&nbsp;&nbsp;&nbsp;{{ form.remark }}
@@ -93,7 +98,7 @@
             <el-option
               v-for="item in optionsCurrentHandlerRD"
               :key="item.id"
-              :label="item.email"
+              :label="item.name"
               :value="item.email"
             />
           </el-select>
@@ -111,7 +116,7 @@
             <el-option
               v-for="item in optionsCurrentHandlerQA"
               :key="item.id"
-              :label="item.email"
+              :label="item.name"
               :value="item.email"
             />
           </el-select>
@@ -235,7 +240,7 @@ export default {
         for (const a of this.bizIdEnumList) {
           if (this.form.bizId === a.code) {
             this.bizId = this.form.bizName
-            this.currentHandler = this.form.currentHandler
+            this.currentHandler = this.form.currentHandlerList
             this.repairResult = this.form.repairResultName
             this.reason = this.form.reason
             this.bugType = this.form.bugTypeName
@@ -288,6 +293,7 @@ export default {
         bugUpdate(this.objData).then(res => {
           if (res.code === 200) {
             this.successFun()
+            this._initBegin()
             if (this.$refs.refeshDevelopmentDialog !== undefined) {
               this.$refs.refeshDevelopmentDialog.resetFields()
             }
@@ -325,7 +331,7 @@ export default {
           bugUpdate(this.objData).then(res => {
             if (res.code === 200) {
               this.successFun()
-              this.currentHandler = this.form.currentHandler
+              this._initBegin()
               if (this.$refs.refeshDevelopmentDialog !== undefined) {
                 this.$refs.refeshDevelopmentDialog.resetFields()
               }
@@ -357,7 +363,7 @@ export default {
           bugUpdate(this.objData).then(res => {
             if (res.code === 200) {
               this.successFun()
-              this.currentHandler = this.form.currentHandler
+              this._initBegin()
               this.form.reasomName = this.reasonStr.filter(value => value.code === this.pauseData.reasonPause)[0].name
               this.bugType = this.bugTypeStr.filter(value => value.code === this.pauseData.bugTypePause)[0].name
               this.reasonsAndSolutionForTheProblem = this.form.reasonsAndSolutionForTheProblem
@@ -388,6 +394,7 @@ export default {
           bugUpdate(this.objData).then(res => {
             if (res.code === 200) {
               this.successFun()
+              this._initBegin()
               this.repairResult = this.form.repairResult
               if (this.$refs.refeshResultDialog !== undefined) {
                 this.$refs.refeshResultDialog.resetFields()
@@ -429,7 +436,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 78vw
+      width 82vw
       margin-top 25px
       padding 29px 50px
     .block >>> .el-form-item__content
@@ -460,7 +467,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 78vw
+      width 82vw
       margin-top 25px
       padding 29px 50px
       margin-bottom 22px

+ 13 - 49
src/views/Platform/bugManage/bugUpdate.vue

@@ -3,7 +3,7 @@
     <el-form ref="form" :model="form" :rules="serviceDataRules">
       <div class="block">
         <div class="block-flex">
-          <el-form-item label="标题" prop="bugName" label-width="110px"><el-input v-model="form.bugName" autocomplete="off" placeholder="普惠质量产品工具平台..." style="width:90%;" /></el-form-item>
+          <el-form-item label="标题" prop="bugName" label-width="112px"><el-input v-model="form.bugName" autocomplete="off" placeholder="普惠质量产品工具平台..." style="width:89.6%;" /></el-form-item>
           <div class="line-between">
             <el-form-item label="类型" prop="bugType" label-width="124px">
               <el-select v-model="form.bugType" style="width:76%;" placeholder="类型">
@@ -16,18 +16,6 @@
               </el-select>
             </el-form-item>
           </div>
-          <div class="line-between">
-            <el-form-item label="状态" prop="status" label-width="124px">
-              <el-select v-model="form.status" placeholder="状态" style="width:76%;">
-                <el-option v-for="item in bugStatusStr" :key="item.name" :label="item.name" :value="item.code" />
-              </el-select>
-            </el-form-item>
-            <el-form-item label="问题原因" prop="reason" label-width="147px">
-              <el-select v-model="form.reason" style="width:76%;" placeholder="问题原因">
-                <el-option v-for="item in reasonStr" :key="item.name" :label="item.name" :value="item.code" />
-              </el-select>
-            </el-form-item>
-          </div>
           <div class="line-between">
             <el-form-item label="级别" prop="priority" label-width="124px">
               <el-select v-model="form.priority" style="width:76%;" placeholder="级别">
@@ -71,52 +59,28 @@
               </el-select>
             </el-form-item>
           </div>
-          <el-form-item label="bug描述" prop="bugDescribe" label-width="110px"><el-input v-model="form.bugDescribe" type="textarea" placeholder="bug描述" rows="2" style="width:90%;" /></el-form-item>
-        </div>
-      </div>
-      <div class="block">
-        <div class="block-flex">
+          <el-form-item label="bug描述" prop="bugDescribe" label-width="112px"><el-input v-model="form.bugDescribe" type="textarea" placeholder="bug描述" rows="2" style="width:89.6%;" /></el-form-item>
           <div class="line-between">
-            <el-form-item label="创建人" label-width="124px"><el-input v-model="form.creator" autocomplete="off" style="width:76%;" /></el-form-item>
-            <el-form-item label="bug责任人" prop="assigner" label-width="147px">
-              <el-select v-model="form.assigner" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+            <el-form-item label="当前处理人" prop="currentHandler" label-width="124px">
+              <el-select v-model="form.currentHandler" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
                 <el-option
-                  v-for="item in optionsAssigner"
+                  v-for="item in optionsCurrentHandler"
                   :key="item.id"
-                  :label="item.email"
+                  :label="item.name"
                   :value="item.email"
                 />
               </el-select>
             </el-form-item>
-          </div>
-          <div class="line-between">
-            <el-form-item label="当前处理人" prop="currentHandler" label-width="124px">
-              <el-select v-model="form.currentHandler" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+            <el-form-item label="bug责任人" prop="assigner" label-width="147px">
+              <el-select v-model="form.assigner" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
                 <el-option
-                  v-for="item in optionsCurrentHandler"
+                  v-for="item in optionsAssigner"
                   :key="item.id"
-                  :label="item.email"
+                  :label="item.name"
                   :value="item.email"
                 />
               </el-select>
             </el-form-item>
-            <el-form-item label="开始开发时间" label-width="147px">    <el-date-picker
-              v-model="form.startDevTime"
-              type="datetime"
-              placeholder="选择时间"
-              style="width:76%;"
-              value-format="yyyy-MM-dd HH:hh:mm"
-            /></el-form-item>
-          </div>
-          <div class="line-between">
-            <el-form-item label="reopen次数" prop="reopenTimes" label-width="124px"><el-input v-model="form.reopenTimes" autocomplete="off" style="width:76%;" /></el-form-item>
-            <el-form-item label="提交测试时间" label-width="147px">    <el-date-picker
-              v-model="form.waitTestTime"
-              type="datetime"
-              placeholder="选择时间"
-              style="width:76%;"
-              value-format="yyyy-MM-dd HH:hh:mm"
-            /></el-form-item>
           </div>
         </div>
       </div>
@@ -454,9 +418,9 @@ export default {
       background-color rgba(255,255,255,1)
       box-shadow 0px 0px 11px 0px rgba(238,240,245,1)
       border-radius 7px
-      width 78vw
+      width 82vw
       margin-top 25px
-      padding 29px 50px
+      padding 29px 50px 10px 50px
       .block-flex
         display flex
         flex-wrap wrap
@@ -480,7 +444,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 78vw
+      width 82vw
       margin-top 25px
       padding 29px 50px
       margin-bottom 22px

+ 418 - 226
src/views/Platform/defectManagement.vue

@@ -1,236 +1,376 @@
 <template>
   <div style="width: 100%;">
-    <div style="margin: 2% 0;">
-      <el-form :model="queryCode">
-        <el-select v-model="queryCode.taskId" clearable placeholder="任务" style="width:10%;margin:0 5px;">
-          <el-option v-for="item in taskIdStr" :key="item.id" :label="item.name" :value="item.id" />
-        </el-select>
-        <el-select v-model="queryCode.status" clearable placeholder="bug状态" style="width:10%;margin-right:5px;">
-          <el-option v-for="item in bugStatusStr" :key="item.code" :label="item.name" :value="item.code" />
-        </el-select>
-        <el-input v-model="queryCode.currentHandler" clearable filterable placeholder="处理人" style="width:12%;margin-right:5px;" />
-        <el-input v-model="queryCode.creator" clearable filterable placeholder="创建人" style="width:12%;margin-right:5px;" />
-        <!-- <el-date-picker v-model="queryCode.gmtCreateBegin" style="width:12%;margin-right:5px;" type="datetime" placeholder="创建时间" /> -->
-        <!-- <el-date-picker v-model="queryCode.gmtCreateEnd" style="width:12%;margin-right:5px;" type="datetime" placeholder="截止时间" /> -->
-        <el-input v-model="queryCode.bugName" clearable filterable placeholder="主题" style="width:12%;margin-right:5px;" />
-        <el-select v-model="queryCode.priority" clearable placeholder="级别" style="width:10%;margin-right:5px;">
-          <el-option v-for="item in bugStatusPriority" :key="item.code" :label="item.name" :value="item.code" />
-        </el-select>
-        <el-button type="primary" @click="dataQuery(queryCode)">查询</el-button>
-        <el-button type="primary" style="margin: 1% 5px;" @click="createdCode()">新建bug</el-button>
-      </el-form>
-    </div>
-
-    <el-table :data="tableData" fit>
-      <el-table-column label="ID" min-width="120" align="center">
-        <template slot-scope="scope">{{ scope.row.id }}</template>
-      </el-table-column>
-      <el-table-column label="主题" min-width="230" align="center">
-        <template slot-scope="scope"><a href="javascript:void(0)" style="color:#20a0ff" @click="toReportView(scope.row.id)">{{ scope.row.bugName }}</a></template>
-      </el-table-column>
-      <el-table-column label="处理人" min-width="150" align="center">
-        <template slot-scope="scope">{{ scope.row.currentHandler }}</template>
-      </el-table-column>
-      <el-table-column label="创建日期" min-width="250" align="center">
-        <template slot-scope="scope">{{ scope.row.gmtCreate }}</template>
-      </el-table-column>
-      <el-table-column label="级别" width="150" align="center">
-        <template slot-scope="scope"><span>{{ scope.row.priorityName }}</span></template>
-      </el-table-column>
-      <el-table-column label="状态" width="150" align="center">
-        <template slot-scope="scope"><span>{{ scope.row.bugStatusName }}</span></template>
-      </el-table-column>
-      <el-table-column fixed="right" label="操作" width="225" align="center">
-        <template slot-scope="scope">
-          <el-button size="mini" type="primary" @click="queryPresentation(scope.row)">更新</el-button>
-          <el-button size="mini" type="primary" @click="delePresentation(scope.row.id)">删除</el-button>
-          <el-button size="mini" type="primary" @click="copyArrange(scope.row.id)">复制</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <el-pagination style="margin-top:30px;" align="center" :current-page="curIndex" :page-sizes="[5, 10, 20]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
-
-    <el-dialog class="adjustHeight" :title="titName" :visible.sync="dialogFormVisible" width="70%">
-      <el-form ref="form" :model="form" :rules="serviceDataRules">
-        <div class="set-background">
-          <el-form-item label="标题" :label-width="formLabelWidth"><el-input v-model="form.bugName" autocomplete="off" placeholder="普惠质量产品工具平台..." style="width:77.2%;" /></el-form-item>
-          <div style="display:flex;">
-            <el-form-item style="flex-grow:1" prop="bizId" label="业务线" :label-width="formLabelWidth1">
-              <el-select v-model="form.bizId" placeholder="业务线" style="width:54.5%;">
-                <el-option v-for="item in bizOptions" :key="item.value" :label="item.name" :value="item.value" />
-              </el-select>
-            </el-form-item>
-            <el-form-item style="flex-grow:1" label="业务模块" prop="businessType" :label-width="formLabelWidth1">
-              <el-select v-model="form.businessType" placeholder="业务模块" style="width:54.5%;">
-                <el-option v-for="item in businessTypeStr" :key="item.name" :label="item.name" :value="item.name" />
-              </el-select>
-            </el-form-item>
+    <div class="set-background">
+      <div class="block">
+        <el-form :model="queryCode">
+          <div class="set-between">
+            <!-- <el-form-item label="创建时间" label-width="70px"><el-date-picker v-model="queryCode.dateQuery" align="left" size="medium" type="datetime" style="width:76%;" placeholder="选择日期" /></el-form-item> -->
+            <el-input v-model="queryCode.currentHandler" placeholder="处理人" autocomplete="off" clearable size="medium" style="width:13%;margin-right: 15px;" />
+            <el-input v-model="queryCode.creator" placeholder="提交人" autocomplete="off" clearable size="medium" style="width:13%;margin-right: 15px;" />
+            <el-input v-model="queryCode.bugName" placeholder="主题" autocomplete="off" clearable size="medium" style="width:13%;margin-right: 15px;" />
+            <el-select v-model="queryCode.taskId" size="medium" style="width:15%;margin-right: 15px;" clearable placeholder="任务">
+              <el-option v-for="item in taskIdStr" :key="item.id" :label="item.name" :value="item.id" />
+            </el-select>
+            <el-select v-model="queryCode.status" size="medium" style="width:15%;margin-right: 15px;" clearable placeholder="bug状态">
+              <el-option v-for="item in bugStatusStr" :key="item.code" :label="item.name" :value="item.code" />
+            </el-select>
+            <el-select v-model="queryCode.priority" size="medium" style="width:15%;margin-right: 15px;" clearable placeholder="级别">
+              <el-option v-for="item in bugStatusPriority" :key="item.code" :label="item.name" :value="item.code" />
+            </el-select>
+            <el-select v-model="queryCode.repairResult" size="medium" style="width:15%;margin-right: 10px;" clearable placeholder="修复状态">
+              <el-option v-for="item in repairResultStr" :key="item.code" :label="item.name" :value="item.code" />
+            </el-select>
+            <el-button type="primary" size="medium" style="margin-right:10px;" icon="el-icon-plus" circle @click="timeShow=! timeShow" />
           </div>
-          <div style="display:flex;">
-            <el-form-item style="flex-grow:1" prop="taskId" label="任务" :label-width="formLabelWidth1">
-              <el-select v-model="form.taskId" placeholder="任务" style="width:54.5%;">
-                <el-option v-for="item in taskIdStr" :key="item.id" :label="item.name" :value="item.id" />
-              </el-select>
-            </el-form-item>
-            <el-form-item style="flex-grow:1" label="平台类型" prop="platformType" :label-width="formLabelWidth1">
-              <el-select v-model="form.platformType" placeholder="平台类型" style="width:54.5%;" @change="clickChangeType(form.platformType)">
-                <el-option v-for="item in platformTypeStr" :key="item.name" :label="item.name" :value="item.name" />
-              </el-select>
-            </el-form-item>
+          <div class="set-between">
+            <el-button type="primary" plain size="medium" @click="dataQuery(queryCode)">查询</el-button>
+            <el-button type="primary" plain size="medium" @click="createdCode()">新增</el-button>
           </div>
-          <div style="display:flex;">
-            <el-form-item style="flex-grow:1" label="类型" prop="bugType" :label-width="formLabelWidth1">
-              <el-select v-model="form.bugType" style="width:54.5%;" placeholder="类型">
-                <el-option v-for="item in bugTypeStr" :key="item.name" :label="item.name" :value="item.name" />
-              </el-select>
-            </el-form-item>
-            <el-form-item style="flex-grow:1" label="发现方式" prop="discoveryMethod" :label-width="formLabelWidth1">
-              <el-select v-model="form.discoveryMethod" style="width:54.5%;" placeholder="发现方式">
-                <el-option v-for="item in discoveryMethodStr" :key="item.name" :label="item.name" :value="item.name" />
-              </el-select>
-            </el-form-item>
+        </el-form>
+        <el-date-picker
+          v-show="timeShow"
+          v-model="timeInterval"
+          size="medium"
+          type="datetimerange"
+          range-separator="至"
+          start-placeholder="创建开始时间"
+          end-placeholder="创建结束时间"
+          clearable
+        />
+        <div class="set-locate">
+          <el-table
+            :data="tableData"
+            border
+            style="width: 100%"
+            size="mini"
+          >
+            <el-table-column
+              prop="id"
+              label="ID"
+              align="center"
+              width="60"
+            />
+            <el-table-column
+              label="主题"
+              align="center"
+              width="180"
+              show-overflow-tooltip
+            >
+              <template slot-scope="scope">
+                <a href="javascript:void(0)" style="color:#20a0ff" @click="toReportView(scope.row.id)">{{ scope.row.bugName }}</a>
+              </template>
+            </el-table-column>
+            <el-table-column
+              prop="priorityName"
+              label="级别"
+              align="center"
+              width="60"
+            />
+            <el-table-column
+              label="状态"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <el-tag type="success" size="medium"><span>{{ scope.row.bugStatusName }}</span></el-tag>
+              </template>
+            </el-table-column>
+            <el-table-column
+              prop="currentHandlerList"
+              label="处理人"
+              align="center"
+              show-overflow-tooltip
+            />
+            <el-table-column
+              prop="creatorList"
+              label="提交人"
+              align="center"
+              show-overflow-tooltip
+            />
+            <el-table-column
+              prop="assignerList"
+              label="责任人"
+              align="center"
+              show-overflow-tooltip
+            />
+            <el-table-column
+              prop="repairResultName"
+              label="修复结果"
+              align="center"
+              width="70"
+              show-overflow-tooltip
+            />
+            <el-table-column
+              prop="gmtCreate"
+              label="创建日期"
+              align="center"
+              show-overflow-tooltip
+            />
+            <el-table-column
+              label="操作"
+              align="center"
+              width="220"
+            >
+              <template v-slot="scope">
+                <div>
+                  <el-button size="mini" type="primary" plain @click="queryPresentation(scope.row)">更新</el-button>
+                  <el-button size="mini" type="danger" plain @click="delePresentation(scope.row.id)">删除</el-button>
+                  <el-button size="mini" type="info" plain @click="copyArrange(scope.row.id)">复制</el-button>
+                </div>
+              </template>
+            </el-table-column>
+          </el-table>
+          <div class="set-locate">
+            <h4>缺陷分析数据</h4>
+            <el-table
+              :data="[statistics]"
+              border
+              style="width: 100%"
+              size="mini"
+            >
+              <el-table-column
+                prop="totalBug"
+                label="总数"
+                align="center"
+              />
+              <el-table-column
+                prop="invalidBug"
+                label="无效Bug"
+                align="center"
+              />
+              <el-table-column
+                prop="fixBug"
+                label="已解决"
+                align="center"
+              />
+              <el-table-column
+                prop="rateOfFix"
+                label="修复率"
+                align="center"
+              />
+              <el-table-column
+                prop="remainBug"
+                label="遗留"
+                align="center"
+              />
+              <el-table-column
+                prop="rateOfReopen"
+                label="Reopen率"
+                align="center"
+              />
+              <el-table-column
+                prop="overnightRate"
+                label="过夜率"
+                align="center"
+              />
+              <el-table-column
+                prop="fixTime"
+                label="修复时长"
+                align="center"
+              />
+              <el-table-column
+                prop="p0"
+                label="P0"
+                align="center"
+              />
+              <el-table-column
+                prop="p1"
+                label="P1"
+                align="center"
+              />
+              <el-table-column
+                prop="other"
+                label="其他"
+                align="center"
+              />
+            </el-table>
+            <el-tooltip effect="dark" placement="bottom">
+              <div slot="content"><div>总数: 搜索结果下的所有有效缺陷不包含无效bug和重复bug</div> <div style="margin:5px 0">已解决: 状态为已完成并且修复结果为已修复或不修复的bug</div><div style="margin:5px 0">遗留bug: 状态不是已完成状态的bug</div><div style="margin:5px 0">reopen率: reopen次数/bug总数</div><div style="margin:5px 0">过夜: 创建时间-修复时间 >24h/bug总数</div><div style="margin:5px 0">修复时长: 创建时间-修复时间,不包含节假日</div><div style="margin:5px 0">其他: 除p0,p1级之外的bug</div><div>无效bug: 修复结果为无效 或者重复的bug</div></div>
+              <span class="titleDescription">统计规则说明<i class="el-icon-question" /> </span>
+            </el-tooltip>
           </div>
-          <div style="display:flex;">
-            <el-form-item style="flex-grow:1" label="级别" prop="priority" :label-width="formLabelWidth1">
-              <el-select v-model="form.priority" style="width:54.5%;" placeholder="级别">
-                <el-option v-for="item in bugLevelStr" :key="item.name" :label="item.name" :value="item.name" />
-              </el-select>
-            </el-form-item>
-            <el-form-item style="flex-grow:1" label="问题原因" prop="reason" :label-width="formLabelWidth1">
-              <el-select v-model="form.reason" style="width:54.5%;" placeholder="问题原因">
-                <el-option v-for="item in reasonStr" :key="item.name" :label="item.name" :value="item.name" />
-              </el-select>
-            </el-form-item>
+          <el-pagination style="margin-top:30px;" align="center" :current-page="curIndex" :page-sizes="[5, 10, 20]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+        </div>
+      </div>
+      <el-dialog class="adjustHeight" :title="titName" :visible.sync="dialogFormVisible" width="70%">
+        <el-form ref="form" :model="form" :rules="serviceDataRules">
+          <div class="set-background">
+            <el-form-item label="标题" :label-width="formLabelWidth"><el-input v-model="form.bugName" autocomplete="off" placeholder="普惠质量产品工具平台..." style="width:77.2%;" /></el-form-item>
+            <div style="display:flex;">
+              <el-form-item style="flex-grow:1" prop="bizId" label="业务线" :label-width="formLabelWidth1">
+                <el-select v-model="form.bizId" placeholder="业务线" style="width:54.5%;">
+                  <el-option v-for="item in bizOptions" :key="item.value" :label="item.name" :value="item.value" />
+                </el-select>
+              </el-form-item>
+              <el-form-item style="flex-grow:1" label="业务模块" prop="businessType" :label-width="formLabelWidth1">
+                <el-select v-model="form.businessType" placeholder="业务模块" style="width:54.5%;">
+                  <el-option v-for="item in businessTypeStr" :key="item.name" :label="item.name" :value="item.name" />
+                </el-select>
+              </el-form-item>
+            </div>
+            <div style="display:flex;">
+              <el-form-item style="flex-grow:1" prop="taskId" label="任务" :label-width="formLabelWidth1">
+                <el-select v-model="form.taskId" placeholder="任务" style="width:54.5%;">
+                  <el-option v-for="item in taskIdStr" :key="item.id" :label="item.name" :value="item.id" />
+                </el-select>
+              </el-form-item>
+              <el-form-item style="flex-grow:1" label="平台类型" prop="platformType" :label-width="formLabelWidth1">
+                <el-select v-model="form.platformType" placeholder="平台类型" style="width:54.5%;" @change="clickChangeType(form.platformType)">
+                  <el-option v-for="item in platformTypeStr" :key="item.name" :label="item.name" :value="item.name" />
+                </el-select>
+              </el-form-item>
+            </div>
+            <div style="display:flex;">
+              <el-form-item style="flex-grow:1" label="类型" prop="bugType" :label-width="formLabelWidth1">
+                <el-select v-model="form.bugType" style="width:54.5%;" placeholder="类型">
+                  <el-option v-for="item in bugTypeStr" :key="item.name" :label="item.name" :value="item.name" />
+                </el-select>
+              </el-form-item>
+              <el-form-item style="flex-grow:1" label="发现方式" prop="discoveryMethod" :label-width="formLabelWidth1">
+                <el-select v-model="form.discoveryMethod" style="width:54.5%;" placeholder="发现方式">
+                  <el-option v-for="item in discoveryMethodStr" :key="item.name" :label="item.name" :value="item.name" />
+                </el-select>
+              </el-form-item>
+            </div>
+            <div style="display:flex;">
+              <el-form-item style="flex-grow:1" label="级别" prop="priority" :label-width="formLabelWidth1">
+                <el-select v-model="form.priority" style="width:54.5%;" placeholder="级别">
+                  <el-option v-for="item in bugLevelStr" :key="item.name" :label="item.name" :value="item.name" />
+                </el-select>
+              </el-form-item>
+              <el-form-item style="flex-grow:1" label="问题原因" prop="reason" :label-width="formLabelWidth1">
+                <el-select v-model="form.reason" style="width:54.5%;" placeholder="问题原因">
+                  <el-option v-for="item in reasonStr" :key="item.name" :label="item.name" :value="item.name" />
+                </el-select>
+              </el-form-item>
+            </div>
+            <div style="display:flex;">
+              <el-form-item style="flex-grow:1" label="状态" prop="status" :label-width="formLabelWidth1">
+                <el-select v-model="form.status" placeholder="状态" style="width:54.5%;" @change="buildShow(form.status)">
+                  <el-option v-for="item in bugStatusStr" :key="item.name" :label="item.name" :value="item.name" />
+                </el-select>
+              </el-form-item>
+              <el-form-item style="flex-grow:1" label="所处阶段" prop="stage" :label-width="formLabelWidth1">
+                <el-select v-model="form.stage" placeholder="所处阶段" style="width:54.5%;">
+                  <el-option v-for="item in stageStr" :key="item.name" :label="item.name" :value="item.name" />
+                </el-select>
+              </el-form-item>
+            </div>
+            <el-form-item label="bug描述" prop="bugDescribe" :label-width="formLabelWidth"><el-input v-model="form.bugDescribe" type="textarea" placeholder="bug描述" rows="2" style="width:77.2%;" /></el-form-item>
           </div>
           <div style="display:flex;">
-            <el-form-item style="flex-grow:1" label="状态" prop="status" :label-width="formLabelWidth1">
-              <el-select v-model="form.status" placeholder="状态" style="width:54.5%;" @change="buildShow(form.status)">
-                <el-option v-for="item in bugStatusStr" :key="item.name" :label="item.name" :value="item.name" />
-              </el-select>
-            </el-form-item>
-            <el-form-item style="flex-grow:1" label="所处阶段" prop="stage" :label-width="formLabelWidth1">
-              <el-select v-model="form.stage" placeholder="所处阶段" style="width:54.5%;">
-                <el-option v-for="item in stageStr" :key="item.name" :label="item.name" :value="item.name" />
+            <el-form-item label="创建人" :label-width="formLabelWidth"><el-input v-model="form.creator" autocomplete="off" style="width:67%;" /></el-form-item>
+            <el-form-item label="bug责任人" prop="assigner" :label-width="formLabelWidth"><el-input v-model="form.assigner" autocomplete="off" style="width:67%;" /></el-form-item>
+          </div>
+          <div style="flex:1">
+            <el-form-item v-show="statusShow" label="问题原因和修复方法" :label-width="formLabelWidth"><el-input v-model="form.reasonsAndSolutionForTheProblem" type="textarea" placeholder="问题原因和修复方法" rows="4" style="width:77.2%;" /></el-form-item>
+          </div>
+          <div style="flex:1">
+            <el-form-item label="bug处理人" prop="currentHandler" :label-width="formLabelWidth"><el-input v-model="form.currentHandler" autocomplete="off" style="width:67%;" /></el-form-item>
+            <el-form-item label="app版本号" :label-width="formLabelWidth"><el-input v-model="form.appVersion" autocomplete="off" style="width:67%;" /></el-form-item>
+            <el-form-item label="地图类型" :label-width="formLabelWidth"><el-input v-model="form.mapType" autocomplete="off" style="width:67%;" /></el-form-item>
+            <el-form-item label="地图版本号" :label-width="formLabelWidth"><el-input v-model="form.mapVersion" autocomplete="off" style="width:67%;" /></el-form-item>
+            <el-form-item label="SDK版本" :label-width="formLabelWidth"><el-input v-model="form.sdkVersion" autocomplete="off" style="width:67%;" /></el-form-item>
+            <el-form-item v-show="repairShow" label="修复结果" :label-width="formLabelWidth">
+              <el-select v-model="form.repairResult" placeholder="发现方法">
+                <el-option v-for="item in repairResultStr" :key="item.name" :label="item.name" :value="item.name" />
               </el-select>
             </el-form-item>
           </div>
-          <el-form-item label="bug描述" prop="bugDescribe" :label-width="formLabelWidth"><el-input v-model="form.bugDescribe" type="textarea" placeholder="bug描述" rows="2" style="width:77.2%;" /></el-form-item>
-        </div>
-        <div style="display:flex;">
-          <el-form-item label="创建人" :label-width="formLabelWidth"><el-input v-model="form.creator" autocomplete="off" style="width:67%;" /></el-form-item>
-          <el-form-item label="bug责任人" prop="assigner" :label-width="formLabelWidth"><el-input v-model="form.assigner" autocomplete="off" style="width:67%;" /></el-form-item>
-        </div>
-        <div style="flex:1">
-          <el-form-item v-show="statusShow" label="问题原因和修复方法" :label-width="formLabelWidth"><el-input v-model="form.reasonsAndSolutionForTheProblem" type="textarea" placeholder="问题原因和修复方法" rows="4" style="width:77.2%;" /></el-form-item>
-        </div>
-        <div style="flex:1">
-          <el-form-item label="bug处理人" prop="currentHandler" :label-width="formLabelWidth"><el-input v-model="form.currentHandler" autocomplete="off" style="width:67%;" /></el-form-item>
-          <el-form-item label="app版本号" :label-width="formLabelWidth"><el-input v-model="form.appVersion" autocomplete="off" style="width:67%;" /></el-form-item>
-          <el-form-item label="地图类型" :label-width="formLabelWidth"><el-input v-model="form.mapType" autocomplete="off" style="width:67%;" /></el-form-item>
-          <el-form-item label="地图版本号" :label-width="formLabelWidth"><el-input v-model="form.mapVersion" autocomplete="off" style="width:67%;" /></el-form-item>
-          <el-form-item label="SDK版本" :label-width="formLabelWidth"><el-input v-model="form.sdkVersion" autocomplete="off" style="width:67%;" /></el-form-item>
-          <el-form-item v-show="repairShow" label="修复结果" :label-width="formLabelWidth">
-            <el-select v-model="form.repairResult" placeholder="发现方法">
-              <el-option v-for="item in repairResultStr" :key="item.name" :label="item.name" :value="item.name" />
-            </el-select>
+          <el-form-item label="附件" :label-width="formLabelWidth">
+            <el-upload
+              class="upload-demo"
+              multiple
+              capture
+              accept="image/jpeg, image/png, image/gif, audio/mp4, video/mp4, audio/mpeg, application/vnd.ms-excel"
+              :on-change="handleChange"
+              :file-list="fileList"
+              action="http://page-daily.kuaidadi.com/upload/img.node"
+            >
+              <!-- action="http://page-daily.kuaidadi.com/upload/img.node" 线下 -->
+              <!-- action="http://star.xiaojukeji.com/upload/img.node" 线上 -->
+              <!-- action="https://jsonplaceholder.typicode.com/posts/" 原始地址-->
+              <el-button size="small" type="primary">点击上传</el-button>
+            </el-upload>
           </el-form-item>
-        </div>
-        <el-form-item label="附件" :label-width="formLabelWidth">
-          <el-upload
-            class="upload-demo"
-            multiple
-            capture
-            accept="image/jpeg, image/png, image/gif, audio/mp4, video/mp4, audio/mpeg, application/vnd.ms-excel"
-            :on-change="handleChange"
-            :file-list="fileList"
-            action="http://page-daily.kuaidadi.com/upload/img.node"
-          >
-            <!-- action="http://page-daily.kuaidadi.com/upload/img.node" 线下 -->
-            <!-- action="http://star.xiaojukeji.com/upload/img.node" 线上 -->
-            <!-- action="https://jsonplaceholder.typicode.com/posts/" 原始地址-->
-            <el-button size="small" type="primary">点击上传</el-button>
-          </el-upload>
-        </el-form-item>
-        {{ form.accessory }}
+          {{ form.accessory }}
 
-      <!-- <el-form-item label="逻辑删" :label-width="formLabelWidth">
+          <!-- <el-form-item label="逻辑删" :label-width="formLabelWidth">
             <el-select v-model="form.isDelete" placeholder="发现方法">
               <el-option v-for="item in isDeleteStr" :key="item.value" :label="item.name" :value="item.value" />
             </el-select>
           </el-form-item> -->
-      <!-- <el-form-item label="reopen的次数" :label-width="formLabelWidth"> <el-input v-model="form.reopenTimes" autocomplete="off" /></el-form-item> -->
-      <!-- <el-form-item label="业务线" prop="bizId" :label-width="formLabelWidth"><el-input v-model="form.bizId" autocomplete="off" /></el-form-item> -->
-      <!-- <el-form-item label="模块" :label-width="formLabelWidth"><el-input v-model="form.moduleId" autocomplete="off" /></el-form-item> -->
-      <!-- <el-form-item label="项目名" :label-width="formLabelWidth"><el-input v-model="form.projectName" autocomplete="off" /></el-form-item> -->
-      <!-- <el-form-item label="项目ID" :label-width="formLabelWidth"><el-input v-model="form.projectId" autocomplete="off" /></el-form-item> -->
-      <!-- <el-form-item label="测试计划ID" prop="planId" :label-width="formLabelWidth"><el-input v-model="form.planId" autocomplete="off" /></el-form-item> -->
-      <!-- <el-form-item label="caseID" :label-width="formLabelWidth"><el-input v-model="form.caseId" autocomplete="off" /></el-form-item> -->
-      <!-- <el-form-item label="bug创建人" :label-width="formLabelWidth"> <el-input v-model="form.creator" autocomplete="off" /></el-form-item> -->
-      <!-- <el-form-item label="开始开发时间" :label-width="formLabelWidth"><el-input v-model="form.startDevTime" autocomplete="off" /></el-form-item> -->
-      <!-- <el-form-item label="开始等待测试时间" :label-width="formLabelWidth"><el-input v-model="form.waitTestTime" autocomplete="off" /></el-form-item> -->
-      <!-- <el-form-item label="创建时间" :label-width="formLabelWidth"><el-input v-model="form.gmtCreate" autocomplete="off" /></el-form-item> -->
-      <!-- <el-form-item label="修改时间" :label-width="formLabelWidth"><el-input v-model="form.gmtModify" autocomplete="off" /></el-form-item> -->
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="dialogFormVisible = false">取 消</el-button>
-        <el-button type="primary" @click="titName === '新建' ? createFormData(form) : queryFormData(form)">确 定</el-button>
-      </div>
-    </el-dialog>
+          <!-- <el-form-item label="reopen的次数" :label-width="formLabelWidth"> <el-input v-model="form.reopenTimes" autocomplete="off" /></el-form-item> -->
+          <!-- <el-form-item label="业务线" prop="bizId" :label-width="formLabelWidth"><el-input v-model="form.bizId" autocomplete="off" /></el-form-item> -->
+          <!-- <el-form-item label="模块" :label-width="formLabelWidth"><el-input v-model="form.moduleId" autocomplete="off" /></el-form-item> -->
+          <!-- <el-form-item label="项目名" :label-width="formLabelWidth"><el-input v-model="form.projectName" autocomplete="off" /></el-form-item> -->
+          <!-- <el-form-item label="项目ID" :label-width="formLabelWidth"><el-input v-model="form.projectId" autocomplete="off" /></el-form-item> -->
+          <!-- <el-form-item label="测试计划ID" prop="planId" :label-width="formLabelWidth"><el-input v-model="form.planId" autocomplete="off" /></el-form-item> -->
+          <!-- <el-form-item label="caseID" :label-width="formLabelWidth"><el-input v-model="form.caseId" autocomplete="off" /></el-form-item> -->
+          <!-- <el-form-item label="bug创建人" :label-width="formLabelWidth"> <el-input v-model="form.creator" autocomplete="off" /></el-form-item> -->
+          <!-- <el-form-item label="开始开发时间" :label-width="formLabelWidth"><el-input v-model="form.startDevTime" autocomplete="off" /></el-form-item> -->
+          <!-- <el-form-item label="开始等待测试时间" :label-width="formLabelWidth"><el-input v-model="form.waitTestTime" autocomplete="off" /></el-form-item> -->
+          <!-- <el-form-item label="创建时间" :label-width="formLabelWidth"><el-input v-model="form.gmtCreate" autocomplete="off" /></el-form-item> -->
+          <!-- <el-form-item label="修改时间" :label-width="formLabelWidth"><el-input v-model="form.gmtModify" autocomplete="off" /></el-form-item> -->
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button @click="dialogFormVisible = false">取 消</el-button>
+          <el-button type="primary" @click="titName === '新建' ? createFormData(form) : queryFormData(form)">确 定</el-button>
+        </div>
+      </el-dialog>
 
-    <el-dialog :visible.sync="dialogFormQuery" width="70%">
-      <el-form :model="form" size="mini">
-        <el-form-item :label-width="formLabelWidth" style="margin-bottom:-10px;"><span style="font-weight:bold;font-size:20px;margin-left:-60px;">主题 : </span>{{ form.bugName }}</el-form-item><hr>
-        <div style="display:flex;">
-          <div style="flex:1">
-            <el-form-item label="任务 : " class="styline" :label-width="formLabelWidth1">{{ form.projectName }}</el-form-item>
-            <el-form-item label="级别 : " :label-width="formLabelWidth1">{{ form.priority }}</el-form-item>
-            <el-form-item label="reopen的次数 : " :label-width="formLabelWidth1">{{ form.reopenTimes }}</el-form-item>
-            <el-form-item label="bug状态 : " :label-width="formLabelWidth1">{{ form.status }}</el-form-item>
-            <el-form-item label="bug类型 : " :label-width="formLabelWidth1">{{ form.bugType }}</el-form-item>
-            <el-form-item label="bug描述 : " :label-width="formLabelWidth1">{{ form.bugDescribe }}</el-form-item>
-            <el-form-item v-show="statusShow" label="问题原因和修复方法" :label-width="formLabelWidth">{{ form.reasonsAndSolutionForTheProblem }}</el-form-item>
-            <el-form-item label="问题原因 : " :label-width="formLabelWidth1">{{ form.reason }}</el-form-item>
-            <el-form-item label="平台类型 : " :label-width="formLabelWidth1">{{ form.platformType }}</el-form-item>
-            <el-form-item label="业务模块 : " :label-width="formLabelWidth1">{{ form.businessType }}</el-form-item>
-            <el-form-item label="所处阶段 : " :label-width="formLabelWidth1">{{ form.stage }}</el-form-item>
-            <el-form-item label="发现方法 : " :label-width="formLabelWidth1">{{ form.discoveryMethod }}</el-form-item>
-            <el-form-item v-show="repairShow" label="修复结果 : " :label-width="formLabelWidth1">{{ form.repairResult }}</el-form-item>
-            <el-form-item label="os类型 : " :label-width="formLabelWidth1">{{ form.osType }}</el-form-item>
-            <el-form-item label="机型 : " :label-width="formLabelWidth1">{{ form.model }}</el-form-item>
-            <el-form-item label="网络类型 : " :label-width="formLabelWidth1">{{ form.networkType }}</el-form-item>
-            <el-form-item label="SDK版本 : " :label-width="formLabelWidth1">{{ form.sdkVersion }}</el-form-item>
-            <el-form-item label="app版本号 : " :label-width="formLabelWidth1">{{ form.appVersion }}</el-form-item>
-            <el-form-item label="地图类型 : " :label-width="formLabelWidth1">{{ form.mapType }}</el-form-item>
-            <el-form-item label="地图版本号 : " :label-width="formLabelWidth1">{{ form.mapVersion }}</el-form-item>
-            <el-form-item label="附件 : " :label-width="formLabelWidth1">{{ form.accessory }}</el-form-item>
-          </div>
-          <div style="flex:1; margin-left:30px;">
-            <el-form-item label="业务线 : " :label-width="formLabelWidth1">{{ form.bizId }}</el-form-item>
-            <el-form-item label="bug责任人 : " :label-width="formLabelWidth1">{{ form.assigner }}</el-form-item>
-            <el-form-item label="bug创建人 : " :label-width="formLabelWidth1">{{ form.creator }}</el-form-item>
-            <el-form-item label="bug处理人 : " :label-width="formLabelWidth1">{{ form.currentHandler }}</el-form-item>
-            <el-form-item label="开始开发时间 : " :label-width="formLabelWidth1">{{ form.startDevTime }}</el-form-item>
-            <el-form-item label="开始等待测试时间 : " :label-width="formLabelWidth1">{{ form.waitTestTime }}</el-form-item>
-            <el-form-item label="创建时间 : " :label-width="formLabelWidth1">{{ form.gmtCreate }}</el-form-item>
+      <el-dialog :visible.sync="dialogFormQuery" width="70%">
+        <el-form :model="form" size="mini">
+          <el-form-item :label-width="formLabelWidth" style="margin-bottom:-10px;"><span style="font-weight:bold;font-size:20px;margin-left:-60px;">主题 : </span>{{ form.bugName }}</el-form-item><hr>
+          <div style="display:flex;">
+            <div style="flex:1">
+              <el-form-item label="任务 : " class="styline" :label-width="formLabelWidth1">{{ form.projectName }}</el-form-item>
+              <el-form-item label="级别 : " :label-width="formLabelWidth1">{{ form.priority }}</el-form-item>
+              <el-form-item label="reopen的次数 : " :label-width="formLabelWidth1">{{ form.reopenTimes }}</el-form-item>
+              <el-form-item label="bug状态 : " :label-width="formLabelWidth1">{{ form.status }}</el-form-item>
+              <el-form-item label="bug类型 : " :label-width="formLabelWidth1">{{ form.bugType }}</el-form-item>
+              <el-form-item label="bug描述 : " :label-width="formLabelWidth1">{{ form.bugDescribe }}</el-form-item>
+              <el-form-item v-show="statusShow" label="问题原因和修复方法" :label-width="formLabelWidth">{{ form.reasonsAndSolutionForTheProblem }}</el-form-item>
+              <el-form-item label="问题原因 : " :label-width="formLabelWidth1">{{ form.reason }}</el-form-item>
+              <el-form-item label="平台类型 : " :label-width="formLabelWidth1">{{ form.platformType }}</el-form-item>
+              <el-form-item label="业务模块 : " :label-width="formLabelWidth1">{{ form.businessType }}</el-form-item>
+              <el-form-item label="所处阶段 : " :label-width="formLabelWidth1">{{ form.stage }}</el-form-item>
+              <el-form-item label="发现方法 : " :label-width="formLabelWidth1">{{ form.discoveryMethod }}</el-form-item>
+              <el-form-item v-show="repairShow" label="修复结果 : " :label-width="formLabelWidth1">{{ form.repairResult }}</el-form-item>
+              <el-form-item label="os类型 : " :label-width="formLabelWidth1">{{ form.osType }}</el-form-item>
+              <el-form-item label="机型 : " :label-width="formLabelWidth1">{{ form.model }}</el-form-item>
+              <el-form-item label="网络类型 : " :label-width="formLabelWidth1">{{ form.networkType }}</el-form-item>
+              <el-form-item label="SDK版本 : " :label-width="formLabelWidth1">{{ form.sdkVersion }}</el-form-item>
+              <el-form-item label="app版本号 : " :label-width="formLabelWidth1">{{ form.appVersion }}</el-form-item>
+              <el-form-item label="地图类型 : " :label-width="formLabelWidth1">{{ form.mapType }}</el-form-item>
+              <el-form-item label="地图版本号 : " :label-width="formLabelWidth1">{{ form.mapVersion }}</el-form-item>
+              <el-form-item label="附件 : " :label-width="formLabelWidth1">{{ form.accessory }}</el-form-item>
+            </div>
+            <div style="flex:1; margin-left:30px;">
+              <el-form-item label="业务线 : " :label-width="formLabelWidth1">{{ form.bizId }}</el-form-item>
+              <el-form-item label="bug责任人 : " :label-width="formLabelWidth1">{{ form.assigner }}</el-form-item>
+              <el-form-item label="bug创建人 : " :label-width="formLabelWidth1">{{ form.creator }}</el-form-item>
+              <el-form-item label="bug处理人 : " :label-width="formLabelWidth1">{{ form.currentHandler }}</el-form-item>
+              <el-form-item label="开始开发时间 : " :label-width="formLabelWidth1">{{ form.startDevTime }}</el-form-item>
+              <el-form-item label="开始等待测试时间 : " :label-width="formLabelWidth1">{{ form.waitTestTime }}</el-form-item>
+              <el-form-item label="创建时间 : " :label-width="formLabelWidth1">{{ form.gmtCreate }}</el-form-item>
+            </div>
           </div>
-        </div>
-      <!-- <el-form-item label="caseID" :label-width="formLabelWidth">{{ form.caseId }}</el-form-item> -->
-      <!-- <el-form-item label="项目名" :label-width="formLabelWidth">{{ form.projectName }}</el-form-item> -->
-      <!-- <el-form-item label="项目ID" :label-width="formLabelWidth">{{ form.projectId }}</el-form-item> -->
-      <!-- <el-form-item label="测试计划ID" :label-width="formLabelWidth">{{ form.planId }}</el-form-item> -->
-      <!-- <el-form-item label="逻辑删" :label-width="formLabelWidth">{{ form.isDelete }}</el-form-item> -->
-      <!-- <el-form-item label="业务线" :label-width="formLabelWidth">{{ form.bizId }}</el-form-item> -->
-      <!-- <el-form-item label="模块ID" :label-width="formLabelWidth">{{ form.moduleId }}</el-form-item> -->
-      <!-- <el-form-item label="修改时间" :label-width="formLabelWidth">{{ form.gmtModify }}</el-form-item> -->
+          <!-- <el-form-item label="caseID" :label-width="formLabelWidth">{{ form.caseId }}</el-form-item> -->
+          <!-- <el-form-item label="项目名" :label-width="formLabelWidth">{{ form.projectName }}</el-form-item> -->
+          <!-- <el-form-item label="项目ID" :label-width="formLabelWidth">{{ form.projectId }}</el-form-item> -->
+          <!-- <el-form-item label="测试计划ID" :label-width="formLabelWidth">{{ form.planId }}</el-form-item> -->
+          <!-- <el-form-item label="逻辑删" :label-width="formLabelWidth">{{ form.isDelete }}</el-form-item> -->
+          <!-- <el-form-item label="业务线" :label-width="formLabelWidth">{{ form.bizId }}</el-form-item> -->
+          <!-- <el-form-item label="模块ID" :label-width="formLabelWidth">{{ form.moduleId }}</el-form-item> -->
+          <!-- <el-form-item label="修改时间" :label-width="formLabelWidth">{{ form.gmtModify }}</el-form-item> -->
 
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="dialogFormQuery = false">关 闭</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="primary" @click="dialogFormQuery = false">关 闭</el-button>
+        </div>
+      </el-dialog>
+    </div>
+  </div></template>
 
 <script>
 import { bugList, bugGet, bugDelete, bugUpdate, bugCreate, bugCopy, taskListCreate, bugGetEnum } from '@/api/defectManage'
@@ -250,6 +390,7 @@ export default {
       businessTypeStr: [],
       bugStatusPriority: [],
       repairResultStr: [],
+      statistics: [],
       isDeleteStr: [{ name: '保留', value: 0 }, { name: '删除', value: 1 }],
       serviceDataRules: {
         bizId: [{ required: true, message: '业务线不能为空', trigger: 'change' }],
@@ -282,6 +423,7 @@ export default {
       queryCode: {},
       statusShow: false,
       repairShow: false,
+      timeShow: false,
       dialogFormVisible: false,
       dialogFormQuery: false,
       formLabelWidth: '11%',
@@ -293,6 +435,7 @@ export default {
       userData: '',
       titName: '',
       taskIdStr: '',
+      timeInterval: [],
       fileList: [],
       fileDbList: []
     }
@@ -313,6 +456,7 @@ export default {
         curIndex: this.curIndex
       }
       bugList(this.indexPage).then(res => {
+        this.statistics = res.query
         this.tableData = res.data
         this.total = res.total
       })
@@ -343,6 +487,26 @@ export default {
       }
     },
     dataQuery(e) {
+      this.bizJson = localStorage.getItem('key')
+      this.indexPage = e
+      this.curIndex = 0
+      this.indexPage.bizId = this.bizJson
+      this.indexPage.pageSize = this.pageSize
+      this.indexPage.curIndex = this.curIndex
+      if (this.timeShow) {
+        this.indexPage.gmtCreateBegin = this.timeInterval[0]
+        this.indexPage.gmtCreateEnd = this.timeInterval[1]
+      } else {
+        this.indexPage.gmtCreateBegin = ''
+        this.indexPage.gmtCreateEnd = ''
+      }
+      bugList(this.indexPage).then(res => {
+        this.tableData = res.data
+        this.total = res.total
+        this.statistics = res.query
+      })
+    },
+    dataQueryInSearch(e) {
       this.bizJson = localStorage.getItem('key')
       this.indexPage = e
       this.indexPage.bizId = this.bizJson
@@ -350,6 +514,7 @@ export default {
       this.indexPage.curIndex = this.curIndex
       bugList(this.indexPage).then(res => {
         this.tableData = res.data
+        this.total = res.total
       })
     },
     // // 删除报告
@@ -417,11 +582,11 @@ export default {
     },
     handleSizeChange(size) {
       this.pageSize = size
-      this.getList()
+      this.dataQueryInSearch(this.queryCode)
     },
     handleCurrentChange(curIndex) {
       this.curIndex = curIndex
-      this.getList()
+      this.dataQueryInSearch(this.queryCode)
     },
     createdCode() {
       // this.titName = '新建'
@@ -482,14 +647,41 @@ export default {
 </script>
 
 <style lang="stylus" scoped>
-  .adjustHeight >>> .el-dialog
-    background-color white
-    margin-top 5vh !important
-  .adjustHeight >>> .el-dialog__body
-    padding 30px 30px
-    .set-background
-      background-color white
-      border-radius 10px
-  .set-background >>> .el-form-item__content
-    margin-left 0px !important
+  .set-background
+    background-color #F2F3F6
+    display flex
+    justify-content center
+    min-width 700px
+    .block
+      background-color rgba(255,255,255,1)
+      box-shadow 0px 0px 11px 0px rgba(238,240,245,1)
+      border-radius 7px
+      width 96%
+      margin 20px 0
+      padding 20px
+      min-height calc(100vh - 100px)
+    .block >>> .el-form
+      display flex
+      justify-content space-between
+      margin 10px 0px 15px 0px
+    .block >>> .el-form-item__content
+      margin-left 0 !important
+    .block >>> th
+      background-color #F0F2F4 !important
+    .block >>> .el-range-separator
+      padding 0
+    .set-between
+      display flex
+    .set-between >>> .el-button
+      height 36px
+    .set-between >>> .el-form-item
+      display flex
+      margin-right -35px
+    .set-locate
+      margin-top 25px
+      .titleDescription
+        font-size 12px
+        color rgba(244,121,121,1)
+        margin 30px 0px
+        display inline-block
 </style>

+ 6 - 6
src/views/onlineProblem/problemCreate.vue

@@ -3,7 +3,7 @@
     <el-form ref="form" :model="form" :rules="serviceDataRules">
       <div class="block">
         <div class="block-flex">
-          <el-form-item label="标题" prop="bugName" label-width="110px"><el-input v-model="form.bugName" autocomplete="off" placeholder="普惠质量产品工具平台..." style="width:90%;" /></el-form-item>
+          <el-form-item label="标题" prop="bugName" label-width="112px"><el-input v-model="form.bugName" autocomplete="off" placeholder="普惠质量产品工具平台..." style="width:89.6%;" /></el-form-item>
           <div class="line-between">
             <el-form-item label="类型" prop="bugType" label-width="124px">
               <el-select v-model="form.bugType" style="width:76%;" placeholder="类型">
@@ -66,7 +66,7 @@
               </el-select>
             </el-form-item>
           </div>
-          <el-form-item label="故障描述" prop="bugDescribe" label-width="110px"><el-input v-model="form.bugDescribe" type="textarea" placeholder="故障详细信息以及复盘wiki地址" rows="2" style="width:90%;" /></el-form-item>
+          <el-form-item label="故障描述" prop="bugDescribe" label-width="112px"><el-input v-model="form.bugDescribe" type="textarea" placeholder="故障详细信息以及复盘wiki地址" rows="2" style="width:89.6%;" /></el-form-item>
         </div>
       </div>
       <div class="block">
@@ -78,7 +78,7 @@
                 <el-option
                   v-for="item in optionsAssigner"
                   :key="item.id"
-                  :label="item.email"
+                  :label="item.name"
                   :value="item.email"
                 />
               </el-select>
@@ -90,7 +90,7 @@
                 <el-option
                   v-for="item in optionsCurrentHandler"
                   :key="item.id"
-                  :label="item.email"
+                  :label="item.name"
                   :value="item.email"
                 />
               </el-select>
@@ -431,7 +431,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 78vw
+      width 82vw
       margin-top 25px
       padding 29px 50px
       .block-flex
@@ -457,7 +457,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 78vw
+      width 82vw
       margin-top 25px
       padding 29px 50px
       margin-bottom 22px

+ 16 - 3
src/views/onlineProblem/problemList.vue

@@ -29,7 +29,7 @@
         <template slot-scope="scope"><a href="javascript:void(0)" style="color:#20a0ff" @click="toReportView(scope.row.id)">{{ scope.row.bugName }}</a></template>
       </el-table-column>
       <el-table-column label="处理人" min-width="150" align="center">
-        <template slot-scope="scope">{{ scope.row.currentHandler }}</template>
+        <template slot-scope="scope">{{ scope.row.currentHandlerList }}</template>
       </el-table-column>
       <el-table-column label="创建日期" min-width="250" align="center">
         <template slot-scope="scope">{{ scope.row.gmtCreate }}</template>
@@ -158,11 +158,24 @@ export default {
     dataQuery(e) {
       this.bizJson = localStorage.getItem('key')
       this.indexPage = e
+      this.curIndex = 0
       this.indexPage.bizId = this.bizJson
       this.indexPage.pageSize = this.pageSize
       this.indexPage.curIndex = this.curIndex
       bugList(this.indexPage).then(res => {
         this.tableData = res.data
+        this.total = res.total
+      })
+    },
+    dataQueryInSearch(e) {
+      this.bizJson = localStorage.getItem('key')
+      this.indexPage = e
+      this.indexPage.bizId = this.bizJson
+      this.indexPage.pageSize = this.pageSize
+      this.indexPage.curIndex = this.curIndex
+      bugList(this.indexPage).then(res => {
+        this.tableData = res.data
+        this.total = res.total
       })
     },
     // // 删除报告
@@ -204,11 +217,11 @@ export default {
     },
     handleSizeChange(size) {
       this.pageSize = size
-      this.getList()
+      this.dataQueryInSearch(this.queryCode)
     },
     handleCurrentChange(curIndex) {
       this.curIndex = curIndex
-      this.getList()
+      this.dataQueryInSearch(this.queryCode)
     },
     createdCode() {
       this.form = {}

+ 13 - 11
src/views/onlineProblem/problemQuery.vue

@@ -36,8 +36,8 @@
       </div>
       <div class="block">
         <div class="display-messege">
-          <div class="divide-threeparts">创建人 :&nbsp;&nbsp;&nbsp;{{ form.creator }}</div>
-          <div class="divide-threeparts"><span>故障责任人 :</span>&nbsp;&nbsp;&nbsp;{{ form.assigner }}</div>
+          <div class="divide-threeparts">创建人 :&nbsp;&nbsp;&nbsp;{{ form.creatorList }}</div>
+          <div class="divide-threeparts"><span>故障责任人 :</span>&nbsp;&nbsp;&nbsp;{{ form.assignerList }}</div>
           <div class="divide-threeparts"><span>当前处理人 :</span>&nbsp;&nbsp;&nbsp;{{ currentHandler }}</div>
         </div>
         <div class="display-messege-end">
@@ -59,8 +59,8 @@
         </div>
         <div class="display-messege">
           <div class="divide-threeparts">app版本号 :&nbsp;&nbsp;&nbsp;{{ form.appVersion }}</div>
-          <div class="divide-threeparts">修复方式 :&nbsp;&nbsp;&nbsp;{{ repairResult }}</div>
-          <div class="divide-threeparts">修复结果 :&nbsp;&nbsp;&nbsp;{{ reasonsAndSolutionForTheProblem }}</div>
+          <div class="divide-threeparts">修复结果 :&nbsp;&nbsp;&nbsp;{{ repairResult }}</div>
+          <div class="divide-threeparts">修复方式 :&nbsp;&nbsp;&nbsp;{{ reasonsAndSolutionForTheProblem }}</div>
         </div>
         <div class="display-messege-end">
           app版本号 :&nbsp;&nbsp;&nbsp;{{ form.remark }}
@@ -89,7 +89,7 @@
             <el-option
               v-for="item in optionsCurrentHandlerRD"
               :key="item.id"
-              :label="item.email"
+              :label="item.name"
               :value="item.email"
             />
           </el-select>
@@ -107,7 +107,7 @@
             <el-option
               v-for="item in optionsCurrentHandlerQA"
               :key="item.id"
-              :label="item.email"
+              :label="item.name"
               :value="item.email"
             />
           </el-select>
@@ -231,7 +231,7 @@ export default {
         for (const a of this.bizIdEnumList) {
           if (this.form.bizId === a.code) {
             this.bizId = this.form.bizName
-            this.currentHandler = this.form.currentHandler
+            this.currentHandler = this.form.currentHandlerList
             this.repairResult = this.form.repairResultName
             this.reason = this.form.reason
             this.bugType = this.form.bugTypeName
@@ -296,6 +296,7 @@ export default {
         bugUpdate(this.objData).then(res => {
           if (res.code === 200) {
             this.successFun()
+            this._initBegin()
             if (this.$refs.refeshDevelopmentDialog !== undefined) {
               this.$refs.refeshDevelopmentDialog.resetFields()
             }
@@ -333,7 +334,7 @@ export default {
           bugUpdate(this.objData).then(res => {
             if (res.code === 200) {
               this.successFun()
-              this.currentHandler = this.form.currentHandler
+              this._initBegin()
               if (this.$refs.refeshDevelopmentDialog !== undefined) {
                 this.$refs.refeshDevelopmentDialog.resetFields()
               }
@@ -365,7 +366,7 @@ export default {
           bugUpdate(this.objData).then(res => {
             if (res.code === 200) {
               this.successFun()
-              this.currentHandler = this.form.currentHandler
+              this._initBegin()
               this.form.reasomName = this.reasonStr.filter(value => value.code === this.pauseData.reasonPause)[0].name
               this.bugType = this.bugTypeStr.filter(value => value.code === this.pauseData.bugTypePause)[0].name
               this.reasonsAndSolutionForTheProblem = this.form.reasonsAndSolutionForTheProblem
@@ -396,6 +397,7 @@ export default {
           bugUpdate(this.objData).then(res => {
             if (res.code === 200) {
               this.successFun()
+              this._initBegin()
               this.repairResult = this.form.repairResult
               if (this.$refs.refeshResultDialog !== undefined) {
                 this.$refs.refeshResultDialog.resetFields()
@@ -437,7 +439,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 78vw
+      width 82vw
       margin-top 25px
       padding 29px 50px
     .block >>> .el-form-item__content
@@ -468,7 +470,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 78vw
+      width 82vw
       margin-top 25px
       padding 29px 50px
       margin-bottom 22px

+ 6 - 6
src/views/onlineProblem/problemUpdate.vue

@@ -3,7 +3,7 @@
     <el-form ref="form" :model="form" :rules="serviceDataRules">
       <div class="block">
         <div class="block-flex">
-          <el-form-item label="标题" prop="bugName" label-width="110px"><el-input v-model="form.bugName" autocomplete="off" placeholder="普惠质量产品工具平台..." style="width:90%;" /></el-form-item>
+          <el-form-item label="标题" prop="bugName" label-width="112px"><el-input v-model="form.bugName" autocomplete="off" placeholder="普惠质量产品工具平台..." style="width:89.6%;" /></el-form-item>
           <div class="line-between">
             <el-form-item label="类型" prop="bugType" label-width="124px">
               <el-select v-model="form.bugType" style="width:76%;" placeholder="类型">
@@ -66,7 +66,7 @@
               </el-select>
             </el-form-item>
           </div>
-          <el-form-item label="故障描述" prop="bugDescribe" label-width="110px"><el-input v-model="form.bugDescribe" type="textarea" placeholder="故障详细信息以及复盘wiki地址" rows="2" style="width:90%;" /></el-form-item>
+          <el-form-item label="故障描述" prop="bugDescribe" label-width="112px"><el-input v-model="form.bugDescribe" type="textarea" placeholder="故障详细信息以及复盘wiki地址" rows="2" style="width:89.6%;" /></el-form-item>
         </div>
       </div>
       <div class="block">
@@ -78,7 +78,7 @@
                 <el-option
                   v-for="item in optionsAssigner"
                   :key="item.id"
-                  :label="item.email"
+                  :label="item.name"
                   :value="item.email"
                 />
               </el-select>
@@ -90,7 +90,7 @@
                 <el-option
                   v-for="item in optionsCurrentHandler"
                   :key="item.id"
-                  :label="item.email"
+                  :label="item.name"
                   :value="item.email"
                 />
               </el-select>
@@ -441,7 +441,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 78vw
+      width 82vw
       margin-top 25px
       padding 29px 50px
       .block-flex
@@ -467,7 +467,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 78vw
+      width 82vw
       margin-top 25px
       padding 29px 50px
       margin-bottom 22px

+ 5 - 4
src/views/projectManage/projectList/projectCreate.vue

@@ -42,7 +42,7 @@
                 <el-option
                   v-for="item in optionsPM"
                   :key="item.id"
-                  :label="item.email"
+                  :label="item.name"
                   :value="item.email"
                 />
               </el-select>
@@ -52,7 +52,7 @@
                 <el-option
                   v-for="item in optionsRD"
                   :key="item.id"
-                  :label="item.email"
+                  :label="item.name"
                   :value="item.email"
                 />
               </el-select>
@@ -64,7 +64,7 @@
                 <el-option
                   v-for="item in optionsQA"
                   :key="item.id"
-                  :label="item.email"
+                  :label="item.name"
                   :value="item.email"
                 />
               </el-select>
@@ -74,7 +74,7 @@
                 <el-option
                   v-for="item in optionsFOCUS"
                   :key="item.id"
-                  :label="item.email"
+                  :label="item.name"
                   :value="item.email"
                 />
               </el-select>
@@ -187,6 +187,7 @@ export default {
           this.getMember() // 保证bizId存在
           if (this.form.pm) {
             this.form.pm = this.form.pm.split(',')
+            // this.$set(this.form, 'pm', this.form.pm)
           }
           if (this.form.rd) {
             this.form.rd = this.form.rd.split(',')

+ 1 - 3
src/views/projectManage/projectList/projectListIndex.vue

@@ -44,7 +44,7 @@
               width="130"
             >
               <template slot-scope="scope">
-                <el-tag type="success"><span>{{ scope.row.statusString }}</span></el-tag>
+                <el-tag size="medium" type="success"><span>{{ scope.row.statusString }}</span></el-tag>
               </template>
             </el-table-column>
             <el-table-column
@@ -130,7 +130,6 @@ export default {
     getList() {
       this.bizJson = localStorage.getItem('key')
       this.queryListData = {
-        ename: this.userInformation,
         bizId: this.bizJson,
         pageSize: this.pageSize,
         curIndex: this.curIndex
@@ -148,7 +147,6 @@ export default {
       queryCode.statusString !== '' ? this.Arra.push(queryCode.statusString) : ''
       queryCode.status = this.Arra
       queryCode.bizId = localStorage.getItem('key')
-      queryCode.ename = this.userInformation
       queryCode.pageSize = this.pageSize
       queryCode.curIndex = this.curIndex
       projectInit(queryCode).then(res => {

+ 4 - 4
src/views/projectManage/projectList/projectPreview.vue

@@ -25,15 +25,15 @@
         </div>
         <div class="display-messege">
           <div class="divide-twoparts"><span style="font-weight:bold;">业务线 :</span>&nbsp;&nbsp;&nbsp;{{ form.bizIdString }}</div>
-          <div class="divide-twoparts"><span style="font-weight:bold;">关注人 :</span>&nbsp;&nbsp;&nbsp;{{ form.focusPenson }}</div>
+          <div class="divide-twoparts"><span style="font-weight:bold;">关注人 :</span>&nbsp;&nbsp;&nbsp;{{ form.focusPensonList }}</div>
         </div>
         <div class="display-messege">
           <div class="divide-twoparts"><span style="font-weight:bold;">平台类型 :</span>&nbsp;&nbsp;&nbsp;{{ form.platFormString }}</div>
-          <div class="divide-twoparts"><span style="font-weight:bold;">开发 :</span>&nbsp;&nbsp;&nbsp;{{ form.rd }}</div>
+          <div class="divide-twoparts"><span style="font-weight:bold;">开发 :</span>&nbsp;&nbsp;&nbsp;{{ form.rdList }}</div>
         </div>
         <div class="display-messege">
-          <div class="divide-twoparts"><span style="font-weight:bold;">产品 :</span>&nbsp;&nbsp;&nbsp;{{ form.pm }}</div>
-          <div class="divide-twoparts"><span style="font-weight:bold;">测试 :</span>&nbsp;&nbsp;&nbsp;{{ form.qa }}</div>
+          <div class="divide-twoparts"><span style="font-weight:bold;">产品 :</span>&nbsp;&nbsp;&nbsp;{{ form.pmList }}</div>
+          <div class="divide-twoparts"><span style="font-weight:bold;">测试 :</span>&nbsp;&nbsp;&nbsp;{{ form.qaList }}</div>
         </div>
         <div class="display-messege">
           <div class="divide-twoparts"><span style="font-weight:bold;">版本 :</span>&nbsp;&nbsp;&nbsp;{{ form.version }}</div>

+ 3 - 3
src/views/projectManage/taskList/taskCreate.vue

@@ -76,7 +76,7 @@
                 <el-option
                   v-for="item in optionsPM"
                   :key="item.id"
-                  :label="item.email"
+                  :label="item.name"
                   :value="item.email"
                 />
               </el-select>
@@ -86,7 +86,7 @@
                 <el-option
                   v-for="item in optionsRD"
                   :key="item.id"
-                  :label="item.email"
+                  :label="item.name"
                   :value="item.email"
                 />
               </el-select>
@@ -98,7 +98,7 @@
                 <el-option
                   v-for="item in optionsQA"
                   :key="item.id"
-                  :label="item.email"
+                  :label="item.name"
                   :value="item.email"
                 />
               </el-select>

+ 1 - 1
src/views/projectManage/taskList/taskListIndex.vue

@@ -46,7 +46,7 @@
                   width="130"
                 >
                   <template slot-scope="scope">
-                    <el-tag type="success"><span>{{ scope.row.statusString }}</span></el-tag>
+                    <el-tag size="medium" type="success"><span>{{ scope.row.statusString }}</span></el-tag>
                   </template>
                 </el-table-column>
                 <el-table-column

+ 4 - 4
src/views/projectManage/taskList/taskPreview.vue

@@ -27,19 +27,19 @@
         <div class="display-messege">
           <div class="divide-fourparts"><span style="font-weight:bold;">业务线 :</span>&nbsp;&nbsp;&nbsp;{{ form.bizIdString }}</div>
           <div class="divide-fourparts"><span style="font-weight:bold;">任务类型 :</span>&nbsp;&nbsp;&nbsp;{{ form.taskType }}</div>
-          <div class="divide-fourparts"><span style="font-weight:bold;">产品 :</span>&nbsp;&nbsp;&nbsp;{{ form.pm }}</div>
-          <div class="divide-fourparts"><span style="font-weight:bold;">分组 :</span>&nbsp;&nbsp;&nbsp;{{ form.group }}</div>
+          <div class="divide-fourparts"><span style="font-weight:bold;">产品 :</span>&nbsp;&nbsp;&nbsp;{{ form.pmList }}</div>
+          <div class="divide-fourparts"><span style="font-weight:bold;">分组 :</span>&nbsp;&nbsp;&nbsp;{{ form.groupList }}</div>
         </div>
         <div class="display-messege">
           <div class="divide-fourparts"><span style="font-weight:bold;">平台类型 :</span>&nbsp;&nbsp;&nbsp;{{ form.typeString }}</div>
           <div class="divide-fourparts"><span style="font-weight:bold;">是否免测 :</span>&nbsp;&nbsp;&nbsp;{{ form.noTestString }}</div>
-          <div class="divide-fourparts"><span style="font-weight:bold;">测试 :</span>&nbsp;&nbsp;&nbsp;{{ form.qa }}</div>
+          <div class="divide-fourparts"><span style="font-weight:bold;">测试 :</span>&nbsp;&nbsp;&nbsp;{{ form.qaList }}</div>
           <div class="divide-fourparts"><span style="font-weight:bold;">标签 :</span>&nbsp;&nbsp;&nbsp;{{ form.tag }}</div>
         </div>
         <div class="display-messege">
           <div class="divide-fourparts"><span style="font-weight:bold;">业务模块 :</span>&nbsp;&nbsp;&nbsp;{{ form.clientTypeString }}</div>
           <div class="divide-fourparts"><span style="font-weight:bold;">打回次数 :</span>&nbsp;&nbsp;&nbsp;{{ form.reopen }}</div>
-          <div class="divide-fourparts"><span style="font-weight:bold;">开发 :</span>&nbsp;&nbsp;&nbsp;{{ form.rd }}</div>
+          <div class="divide-fourparts"><span style="font-weight:bold;">开发 :</span>&nbsp;&nbsp;&nbsp;{{ form.rdList }}</div>
         </div>
         <div class="display-messege-end-one">
           <div class="divide-fullparts"><span style="font-weight:bold;">描述 :</span>&nbsp;&nbsp;&nbsp;{{ form.description }}</div>

+ 3 - 3
src/views/projectManage/taskList/taskUpdateCreate.vue

@@ -76,7 +76,7 @@
                 <el-option
                   v-for="item in optionsPM"
                   :key="item.id"
-                  :label="item.email"
+                  :label="item.name"
                   :value="item.email"
                 />
               </el-select>
@@ -86,7 +86,7 @@
                 <el-option
                   v-for="item in optionsRD"
                   :key="item.id"
-                  :label="item.email"
+                  :label="item.name"
                   :value="item.email"
                 />
               </el-select>
@@ -98,7 +98,7 @@
                 <el-option
                   v-for="item in optionsQA"
                   :key="item.id"
-                  :label="item.email"
+                  :label="item.name"
                   :value="item.email"
                 />
               </el-select>

+ 3 - 0
src/views/quality/qualityDefectProcess.vue

@@ -125,6 +125,9 @@ export default {
     handleCurrentChange(curIndex) {
       this.curIndex = curIndex
       this._initProcess()
+    },
+    errorFun(errorText) {
+      this.$notify({ title: 'Failed', message: errorText, type: 'error', duration: 2000 })
     }
   }
 }

+ 163 - 0
src/views/quality/qualityHotpatchProcess.vue

@@ -0,0 +1,163 @@
+<template>
+  <div id="window-judge" class="set-background">
+    <div class="block">
+      <div style="text-align:right;">
+        <el-link type="primary">指标计算指南</el-link>
+      </div>
+      <div class="title-search-output">
+        <h4>热修复数据</h4>
+        <div class="search-output">
+          <el-input v-model="input" size="medium" style="margin-right:5px" />
+          <el-button plain type="info" size="medium" style="margin-right:35px">搜索</el-button>
+          <el-button size="medium" type="primary">导出</el-button>
+        </div>
+      </div>
+      <el-table
+        :data="tableData"
+        border
+        style="width: 100%"
+        size="mini"
+      >
+        <el-table-column
+          prop="appKey"
+          label="app_Key"
+          align="center"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          prop="appName"
+          label="名称"
+          align="center"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          prop="appVersion"
+          label="版本号"
+          align="center"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          prop="description"
+          label="描述"
+          align="center"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          prop="module"
+          label="资源包地址"
+          align="center"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          prop="bugCreateTime"
+          label="问题类型"
+          align="center"
+          show-overflow-tooltip
+        >
+          <template slot-scope="scope">{{ scope.row.problemType === 1 ? 'Crash修复':'功能修复' }}</template>
+        </el-table-column>
+        <el-table-column
+          prop="publishTime"
+          label="最近放量时间"
+          align="center"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          prop="status"
+          label="状态"
+          align="center"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          prop="submitTime"
+          label="提交时间"
+          align="center"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          prop="submitter"
+          label="提交人"
+          align="center"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          prop="typeName"
+          label="type"
+          align="center"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          prop="versionNum"
+          label="version"
+          align="center"
+          show-overflow-tooltip
+        />
+      </el-table>
+    </div>
+  </div>
+</template>
+
+<script>
+import { getHotpatchProcess } from '@/api/qualityCenter'
+// import { apiBusinessLineAll } from '@/api/qualityMeasurement.js'
+// import Json from '@/api/home.json'
+export default {
+  data() {
+    return {
+      tableData: [],
+      input: '',
+      processSerach: {}
+    }
+  },
+  created() {
+    this._initProcess()
+  },
+  methods: {
+    _initProcess() {
+      this.processSerach = { appKey: this.$route.query.appKey }
+      getHotpatchProcess(this.processSerach).then(res => {
+        res.code === 0 ? this.tableData = res.data.ahs : this.errorFun(res.msg)
+      })
+    },
+    errorFun(errorText) {
+      this.$notify({ title: 'Failed', message: errorText, type: 'error', duration: 2000 })
+    }
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+  .set-background
+    background-color #F2F3F6
+    display flex
+    justify-content center
+    .block
+      background-color rgba(255,255,255,1)
+      box-shadow 0px 0px 11px 0px rgba(238,240,245,1)
+      border-radius 7px
+      width 97%
+      min-height calc(100vh - 100px)
+      margin-top 25px
+      padding 29px 20px
+      margin-bottom 22px
+      .title-search-output
+        display flex
+        align-items center
+        justify-content space-between
+        margin 15px 0
+        h4
+          border-left 4px solid #4665b2
+          padding-left 10px
+          color #5A738E
+        .search-output
+          display flex
+          justify-content space-around
+    .block >>> th
+      background-color #F1F4F7 !important
+      font-size 10px
+    .block >>> .el-table__body-wrapper  .cell
+      font-size 10px
+      white-space nowrap
+      text-overflow ellipsis
+      overflow hidden
+</style>

+ 103 - 41
src/views/quality/qualityMeasurement.vue

@@ -5,7 +5,7 @@
       <el-menu :default-active="activeIndex" active-text-color="#409EFF" mode="horizontal" @select="handleSelect">
         <el-menu-item index="0">业务线数据</el-menu-item>
         <el-menu-item index="3">部门数据</el-menu-item>
-        <!-- <el-menu-item index="5">客户端数据</el-menu-item> -->
+        <el-menu-item index="5">客户端数据</el-menu-item>
       </el-menu>
       <el-date-picker
         v-model="timeInterval"
@@ -19,14 +19,29 @@
     </el-header>
     <el-container style="height:calc(100vh - 140px);">
       <el-aside class="aside">
-        <el-tree ref="treeBox" accordion :data="dealWithBusinessDate" node-key="id" highlight-current :props="defaultProps" style="margin-top:20px" @node-click="handleNodeClick" />
+        <el-tree ref="treeBox" :default-expanded-keys="expandedClient" accordion :data="dealWithBusinessDate" node-key="id" highlight-current :props="defaultProps" style="margin-top:20px" @node-click="handleNodeClick" />
       </el-aside>
       <el-main class="combine-table">
         <el-tabs v-model="activeIndexSecondary" @tab-click="handleClick">
           <el-tab-pane :label="guild" name="first">
             <!-- 上线过程 -->
-            <h4>1.上线过程</h4>
+            <h4>1. 上线过程</h4>
             <el-table
+              v-show="pauseKey === 5"
+              :data="clientOnline"
+              border
+              style="width: 100%"
+              size="mini"
+            >
+              <el-table-column
+                label="上线总数"
+                align="center"
+              >
+                <template slot-scope="scope"><a href="javascript:void(0)" style="color:#20a0ff" @click="toClientView()">{{ scope.row.clientOnlineCount }}</a></template>
+              </el-table-column>
+            </el-table>
+            <el-table
+              v-show="pauseKey !== 5"
               :data="[onlineProcess]"
               border
               style="width: 100%"
@@ -49,6 +64,7 @@
               </el-table-column>
             </el-table>
             <el-table
+              v-show="pauseKey !== 5"
               :data="[onlineProcess]"
               border
               style="width: 100%"
@@ -97,6 +113,7 @@
               </el-table-column>
             </el-table>
             <el-table
+              v-show="pauseKey !== 5"
               :data="[onlineProcess]"
               border
               style="width: 100%"
@@ -168,6 +185,7 @@
               </el-table-column>
             </el-table>
             <el-table
+              v-show="pauseKey !== 5"
               :data="[onlineProcess]"
               border
               style="width: 100%"
@@ -202,8 +220,9 @@
               />
             </el-table>
             <!-- 线上问题 -->
-            <h4>2.线上问题</h4>
+            <h4 v-show="pauseKey !== 5">2. 线上问题</h4>
             <el-table
+              v-show="pauseKey !== 5"
               :data="[problemData]"
               border
               style="width: 100%"
@@ -211,7 +230,7 @@
             >
               <el-table-column
                 prop="totalCount"
-                label="上线次数"
+                label="问题总数"
                 width="170"
                 align="center"
               />
@@ -265,24 +284,13 @@
               </el-table-column>
             </el-table>
             <el-table
+              v-show="pauseKey !== 5"
               :data="[problemData]"
               border
               style="width: 100%"
               class="move-border-top"
               size="mini"
             >
-              <el-table-column
-                prop="unResponsibilityTimeCount"
-                label="未定责P5+问题"
-                style="width:25%;"
-                align="center"
-              />
-              <el-table-column
-                prop="historyResponsibilityCount"
-                label="遗留P5+问题定责"
-                style="width:25%;"
-                align="center"
-              />
               <el-table-column
                 prop="handleDurationPercent"
                 label="线上问题处理完成率"
@@ -297,8 +305,9 @@
               />
             </el-table>
             <!-- 线下缺陷 -->
-            <h4>3.线下缺陷</h4>
+            <h4 v-show="pauseKey !== 5">3. 线下缺陷</h4>
             <el-table
+              v-show="pauseKey !== 5"
               :data="[DefeatData]"
               border
               style="width: 100%"
@@ -440,7 +449,7 @@
 
 <script>
 import axios from 'axios'
-import { getBusiness, getDepartment, getOnlineProblem, getOnlineAllCount, getOnlineVitium, getHandlerCount } from '@/api/qualityCenter'
+import { getBusiness, getDepartment, getOnlineProblem, getOnlineAllCount, getOnlineVitium, getHandlerCount, getClientInfo, getHotpatch } from '@/api/qualityCenter'
 
 export default {
   filters: {
@@ -461,6 +470,8 @@ export default {
       guild: '',
       businessData: [],
       DefeatData: [],
+      expandedClient: [],
+      noWayId: 1,
       problemData: '',
       defaultProps: {
         children: 'child',
@@ -468,6 +479,9 @@ export default {
       },
       loadingOnlineProcess: true,
       activeIndex: '0',
+      clientOnline: [{
+        clientOnlineCount: ''
+      }],
       activeIndexSecondary: 'first',
       // timeInterval: '',
       pauseTreeNode: {},
@@ -488,7 +502,7 @@ export default {
     async _initBusinessTreeAndBeginInfo() {
       this.loadingOnlineProcess = true
       await getBusiness().then(res => {
-        this.businessData = res.code === 0 ? res.data : ''
+        res.code === 0 ? this.businessData = res.data : this.errorFun(res.msg)
         const processFunc = (arr) => { // modules和child
           arr.forEach((each) => {
             if (each.modules) {
@@ -510,7 +524,7 @@ export default {
     async initDepartmentTree() {
       this.loadingOnlineProcess = true
       await getDepartment().then(res => {
-        this.dealWithBusinessDate = res.code === 0 ? res.data : ''
+        res.code === 0 ? this.dealWithBusinessDate = res.data : this.errorFun(res.msg)
         this.pauseTreeNode = this.dealWithBusinessDate[0] ? this.dealWithBusinessDate[0] : ''
         this.pauseKey = 3
         this.pauseId = this.pauseTreeNode.id ? this.pauseTreeNode.id : ''
@@ -518,23 +532,36 @@ export default {
       this.deleteAfter()
     },
     // 点击客户端数据导航栏显示默认数据
-    // async initClientTree() {
-    //   // this.loadingOnlineProcess = true
-    //   await getClientInfo().then(res => {
-    //     this.businessData = res.code === 0 ? res.data : ''
-    //     this.dealWithBusinessDate = this.businessData.map(each => ({
-    //       ...each,
-    //       child: each.details.map(detail => ({
-    //         ...detail,
-    //         name: detail.step
-    //       }))
-    //     }))
-    //     this.pauseTreeNode = this.dealWithBusinessDate[0] ? this.dealWithBusinessDate[0] : ''
-    //     this.pauseKey = 5
-    //     this.pauseId = this.pauseTreeNode.appKey ? this.pauseTreeNode.appKey : ''
-    //   })
-    //   this.clientAfter()
-    // },
+    async initClientTree() {
+      this.loadingOnlineProcess = true
+      await getClientInfo().then(res => {
+        res.code === 0 ? this.businessData = res.data : this.errorFun(res.msg)
+        this.dealWithBusinessDate = this.businessData.map(each => ({
+          ...each,
+          id: this.noWayId++,
+          child: each.details.map(detail => ({
+            ...detail,
+            name: detail.osType,
+            id: each.name + detail.appKey + detail.osType
+          }))
+        }))
+        this.pauseTreeNode = this.dealWithBusinessDate[0].child[0] ? this.dealWithBusinessDate[0].child[0] : ''
+        this.expandedClient = [this.dealWithBusinessDate[0].id]
+        this.pauseKey = 5
+        this.pauseId = this.pauseTreeNode.id ? this.pauseTreeNode.id : ''
+      })
+      this.clientAfter()
+    },
+    // 客户端数据
+    clientAfter() {
+      this.guild = this.treeGuideClient(this.dealWithBusinessDate, this.pauseTreeNode.id).join('/')
+      // const pretermitSearch = { appKey: 'f9a0bc6213db35deb155ff08bffa90a9', startTime: this.timeInterval[0], endTime: this.timeInterval[1] }
+      const pretermitSearch = { appKey: this.pauseTreeNode.appKey }
+      getHotpatch(pretermitSearch).then((res) => {
+        res.code === 0 ? this.clientOnline[0].clientOnlineCount = res.data : this.errorFun(res.msg)
+        this.loadingOnlineProcess = false
+      })
+    },
     // 部门table数据不需要缺陷数据
     deleteAfter() {
       this.guild = this.treeGuide(this.dealWithBusinessDate, this.pauseTreeNode.id, this.pauseTreeNode.type).join('/')
@@ -613,6 +640,16 @@ export default {
       })
       window.open(href, '_blank')
     },
+    toClientView() {
+      // 新页面跳转
+      const { href } = this.$router.resolve({
+        name: '热修复过程',
+        query: {
+          appKey: this.pauseTreeNode.appKey
+        }
+      })
+      window.open(href, '_blank')
+    },
     toDefectView() {
       // 新页面跳转
       const { href } = this.$router.resolve({
@@ -640,12 +677,31 @@ export default {
       getPath(myArr, id, type)
       return res
     },
+    // 树形结构导航
+    treeGuideClient(myArr, id) {
+      let res
+      // path,存储路径
+      const getPath = (arr, id, path = []) => {
+        return arr.reduce((a, c) => {
+          if (c.id === id) {
+            res = [...path, c.name]
+          }
+          if (c.child) {
+            return getPath(c.child, id, [...path, c.name])
+          }
+        }, [])
+      }
+      getPath(myArr, id)
+      return res
+    },
     // 业务树
     handleNodeClick(data) {
       this.loadingOnlineProcess = true
       this.pauseTreeNode = data
       this.pauseId = data.id
-      this.pauseKey = data.type
+      if (this.pauseKey !== 5) {
+        this.pauseKey = data.type
+      }
       if (this.pauseKey === 3 && this.activeIndexSecondary === 'first') {
         this.deleteAfter()
         return
@@ -653,6 +709,12 @@ export default {
         this.guild = this.treeGuide(this.dealWithBusinessDate, this.pauseTreeNode.id, this.pauseTreeNode.type).join('/')
         this.handleClick()
         return
+      } else if (this.pauseKey === 5 && this.pauseTreeNode.appKey) {
+        this.clientAfter()
+        return
+      } else if (this.pauseKey === 5 && !this.pauseTreeNode.appKey) {
+        this.loadingOnlineProcess = false
+        return
       }
       this.allCountAndProlemGet()
     },
@@ -710,8 +772,6 @@ export default {
       margin 0 0 2% 1.5%
       background-color white
       border-radius 7px
-    .aside >>> .el-tree-node__content
-      padding-left 0px !important
     .combine-table
       background-color white
       border-radius 7px
@@ -744,4 +804,6 @@ export default {
       font-size 13px
     .aside >>> .el-tree-node__children .el-tree-node__label
       font-size 12px
+    // .aside >>> .el-tree-node__children
+    //   overflow auto
 </style>

+ 6 - 3
src/views/quality/qualityProcess.vue

@@ -24,17 +24,20 @@
           prop="model"
           label="模块"
           align="center"
+          show-overflow-tooltip
         />
         <el-table-column
           prop="odinId"
           label="上线单号"
           align="center"
           width="70"
+          show-overflow-tooltip
         />
         <el-table-column
           prop="name"
           label="项目名称"
           align="center"
+          show-overflow-tooltip
         />
         <el-table-column
           prop="handlerZh"
@@ -147,6 +150,9 @@ export default {
     handleCurrentChange(curIndex) {
       this.curIndex = curIndex
       this._initProcess()
+    },
+    errorFun(errorText) {
+      this.$notify({ title: 'Failed', message: errorText, type: 'error', duration: 2000 })
     }
   }
 }
@@ -185,7 +191,4 @@ export default {
       margin 0 0 10px 0
     .block >>> .el-table__body-wrapper  .cell
       font-size 10px
-      white-space nowrap
-      text-overflow ellipsis
-      overflow hidden
 </style>

+ 10 - 60
src/views/virtualDevices/HMvehicle.vue

@@ -41,12 +41,6 @@
               style="width: 100%"
               size="mini"
             >
-              <el-table-column
-                prop="id"
-                label="ID"
-                align="center"
-                width="50"
-              />
               <el-table-column
                 prop="vehicleId"
                 label="车辆ID"
@@ -103,7 +97,7 @@
                   <div class="specail-lock">
                     <div :class="{ 'el-icon-lock': scope.row.lockStatus === 0 ,'el-icon-unlock': scope.row.lockStatus === 1}" @click="updateLock(scope.row.ecuId, scope.row.lockStatus)" />
                     <div>
-                      <el-button size="mini" type="success" plain @click="activate(scope.row.ecuId, scope.row.vehicleId, scope.row.batteryId, scope.row.imsi, scope.row.imei, scope.row.vehicleVersion, scope.row.cityName)">激活</el-button>
+                      <el-button size="mini" type="success" plain @click="activate(scope.row.ecuId, scope.row.vehicleId, 'BAT0118022210043', scope.row.imsi, scope.row.imei, scope.row.vehicleVersion, scope.row.cityName)">激活</el-button>
                       <el-button size="mini" type="info" plain @click="offHmvirtual(scope.row.ecuId)">下线</el-button>
                       <el-button size="mini" type="danger" @click="dialogBug(scope.row.ecuId)">删除</el-button>
                       <el-dialog
@@ -161,50 +155,6 @@ export default {
       city: cityJson,
       value: '',
       dialogVisible: false,
-      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
-      },
       lockOptions: [
         {
           name: '未开启',
@@ -237,7 +187,7 @@ export default {
     _queryDeviceInfo() {
       const params = { page: this.curIndex, pageSize: this.pageSize }
       queryDeviceInfo(params).then(res => {
-        res.success === 1 ? this.tableData = res.data : this.errorFun('initialization')
+        res.code === 200 ? this.tableData = res.data : this.errorFun(res.msg)
         this.loading = false
       })
     },
@@ -257,7 +207,7 @@ export default {
         }
       }
       queryDeviceInfo(queryCode).then(res => {
-        res.success === 1 ? this.tableData = res.data : this.errorFun()
+        res.code === 200 ? this.tableData = res.data : this.errorFun(res.msg)
       })
     },
     createdCode() {
@@ -277,29 +227,29 @@ export default {
           this.successFun('update')
           // this._queryDeviceInfo()
         } else {
-          this.errorFun('update')
+          this.errorFun(res.msg)
         }
       })
     },
     activate(ecuId, vehicleId, batteryId, imsi, imei, vehicleVersion, cityName) {
-      const params = { ecuId: ecuId, vehicleId: vehicleId, batteryId: batteryId, imsi: imsi, imei: imei, vehicleVersion: vehicleVersion, cityName: cityName, hmVehicleBaseInfo: this.hmVehicleBaseInfo, hmVehicleBaseStationInfo: this.hmVehicleBaseStationInfo, hmVehicleGpsInfo: this.hmVehicleGpsInfo }
+      const params = { ecuId: ecuId, vehicleId: vehicleId, batteryId: batteryId, imsi: imsi, imei: imei, vehicleVersion: vehicleVersion, cityName: cityName }
       createHmVirtualDevice(params).then(res => {
         if (res.code === 200) {
           this.successFun('activate')
           this._queryDeviceInfo()
         } else {
-          this.errorFun('activate')
+          this.errorFun(res.msg)
         }
       })
     },
     offHmvirtual(ecuId) {
       const params = { ecuId: ecuId }
       offHmvirtualDevice(params).then(res => {
-        if (res.success === 1) {
+        if (res.code === 200) {
           this.successFun('offLine')
           this._queryDeviceInfo()
         } else {
-          this.errorFun('offLine')
+          this.errorFun(res.msg)
         }
       })
     },
@@ -315,7 +265,7 @@ export default {
           this.successFun('delete')
           this._queryDeviceInfo()
         } else {
-          this.errorFun('delete')
+          this.errorFun(res.msg)
         }
       })
       this.dialogVisible = false
@@ -324,7 +274,7 @@ export default {
       this.$notify({ title: 'Success', message: `${successText} Successfully`, type: 'success', duration: 2000 })
     },
     errorFun(errorText) {
-      this.$notify({ title: 'Failed', message: `${errorText} Failed`, type: 'error', duration: 2000 })
+      this.$notify({ title: 'Failed', message: errorText, type: 'error', duration: 2000 })
     }
   }
 }