Browse Source

Merge branch 'wangzi_dev' into http_test

qinzhipeng_v@didiglobal.com 4 years ago
parent
commit
b481e29e1a

+ 8 - 0
src/api/statisticsApi/requireStatistics.js

@@ -1,6 +1,14 @@
 import request from '@/utils/request'
 import { TeamManagement } from '@/apiConfig/api'
 
+// 趋势图的动态title枚举
+export function getRequireCountTitleEnum(data) {
+  return request({
+    url: TeamManagement + '/requirement/getRequireCountTitleEnum',
+    method: 'post',
+    data
+  })
+}
 // 需求累计数据
 export function getSummary(data) {
   return request({

+ 17 - 1
src/components/click/overClick.vue

@@ -6,14 +6,16 @@
     <div
       v-show="!visible"
       class="over-context"
+      :class="{'is-link':parameter !== null}"
       @mouseover="hide(false)"
       @mouseleave="hide(true)"
-      @click="handleClick()"
+      @click="link()"
     >
       <slot name="overMouse" />
       <i
         class="el-icon-edit"
         :class="{'hide-edit': hideEdit}"
+        @click.stop="handleClick()"
       />
     </div>
   </div>
@@ -26,6 +28,11 @@ export default {
       default: false,
       required: false
     },
+    parameter: {
+      type: Object,
+      default: () => null,
+      required: false
+    },
     id: {
       type: String,
       default: 'click-parent',
@@ -69,6 +76,12 @@ export default {
     },
     hide(val) {
       this.hideEdit = val
+    },
+    link() {
+      if (this.parameter) {
+        const newTab = this.$router.resolve(this.parameter)
+        window.open(newTab.href, '_blank')
+      }
     }
   }
 }
@@ -83,6 +96,9 @@ export default {
   padding-right: 5px;
   color: #409EFF;
 }
+.is-link {
+  cursor: pointer;
+}
 .hide-edit {
   visibility: hidden;
 }

+ 16 - 16
src/views/projectManage/bugList/file/createdBug.vue

@@ -15,7 +15,15 @@
             <div class="Layouts" style="width: 100%;">
               <div style="width:100%; margin: 0 4%;">
                 <el-form-item label="所属任务" prop="taskId">
-                  <el-select v-model="formInline.taskId" filterable :filter-method="selectFilter" placeholder="请选择" style="width:100%;" @click.native="bugListSelect">
+                  <el-select
+                    v-model="formInline.taskId"
+                    filterable
+                    :remote="true"
+                    :remote-method="debounceQuery"
+                    placeholder="请选择"
+                    style="width:100%;"
+                    @click.native="bugListSelect"
+                  >
                     <el-option v-for="item in taskEnumList" :key="item.id" :label="item.name" :value="item.id">
                       <div class="belong-task">
                         <div class="task-id">{{ item.taskId }}</div>
@@ -313,7 +321,6 @@ export default {
       Editionlist: [], // 版本
       bizIdEnumList: [], // bug业务线
       taskEnumList: [], // 所属任务
-      taskEnumListCopy: [], // 所属任务副本
       bugTypeEnumList: [], // bug类型
       priorityEnumList: [], // 缺陷等级
       clientTypeEnumList: [], // 版本
@@ -491,19 +498,7 @@ export default {
         this.options = []
       }
     },
-    selectFilter(val) { // 所属任务搜索
-    // 判断是否为空
-      if (val) {
-        // 同时筛选Lable与value的值
-        this.taskEnumList = this.taskEnumListCopy.filter((item) => {
-          return item.name.indexOf(val) > -1 || item.name.toUpperCase().indexOf(val.toUpperCase()) > -1 || `${item.id}`.toUpperCase().indexOf(val.toUpperCase()) > -1
-        })
-      } else {
-        // 赋值还原
-        this.taskEnumList = _.cloneDeep(this.taskEnumListCopy)
-      }
-    },
-    async getTaskList() { // 获取所属任务列表
+    async getTaskList(val) { // 获取所属任务列表
       const params = {
         bizId: Number(localStorage.getItem('bizId'))
       }
@@ -518,12 +513,17 @@ export default {
           params.id = this.$route.query.id
           break
       }
+      if (val) {
+        params.name = val
+      }
       const res = await taskListCreate(params)
       if (res.code === 200) {
         this.taskEnumList = res.data || []
-        this.taskEnumListCopy = _.cloneDeep(this.taskEnumList)
       }
     },
+    debounceQuery: _.debounce(function() {
+      this.getTaskList(...arguments)
+    }, 500),
     bugListSelect() {
       this.$set(this.formInline, 'creatorList', this.userNames)
       settingGetBizList({}).then(res => {

+ 2 - 3
src/views/projectManage/projectList/components/modifySchedule.vue

@@ -95,8 +95,7 @@ const _ = require('lodash')
 import searchPeople from '@/components/select/searchPeople'
 import normalDialog from '@/components/dialog/normalDialog'
 import selDatePicker from '@/components/picker/SelDatePicker'
-import { taskList } from '@/api/projectIndex'
-import { taskList as allTaskList, configShowTaskEnum } from '@/api/taskIndex'
+import { taskList, configShowTaskEnum } from '@/api/taskIndex'
 import { getSeprateDayInfo, scheduleCreate, scheduleGet, scheduleUpdate, scheduleDelete } from '@/api/projectViewDetails'
 import danger from '@/assets/感叹@2x.png'
 import '@/styles/PublicStyle/index.scss'
@@ -253,7 +252,7 @@ export default {
         return
       }
       this.loading = true
-      const res = await allTaskList({
+      const res = await taskList({
         bizId: Number(localStorage.getItem('bizId')),
         name: query
       })

+ 1 - 1
src/views/projectManage/requirement/list/index.vue

@@ -17,7 +17,7 @@
           <el-form :model="searchForm" class="Layout">
             <div class="Layout_flex_end" style="padding-left:15px">
               <div class="queryName">需求名称</div>
-              <el-input v-model="requirementName" size="small" clearable style="width:72% !important;" placeholder="请搜索标题或ID" @change="getTableData()" />
+              <el-input v-model="requirementName" size="small" clearable style="width:72% !important;" placeholder="请搜索标题或ID或望岳ID" @change="getTableData()" />
             </div>
             <div class="Layout">
               <div class="queryName marginLeft">需求状态</div>

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

@@ -23,7 +23,7 @@
           <el-form :model="form_task" class="flex_start">
             <div class="Layout">
               <div class="queryName">任务名称</div>
-              <el-input v-model="form_task.name" size="small" clearable style="width:77% !important;" placeholder="请输入标题或ID" @change="get_taskList()" />
+              <el-input v-model="form_task.name" size="small" clearable style="width:77% !important;" placeholder="请输入标题或ID或望岳ID" @change="get_taskList()" />
             </div>
             <div class="Layout marginLeft">
               <div class="queryName">负责人</div>

+ 12 - 8
src/views/quality/requireStatistics.vue

@@ -106,14 +106,8 @@
     </el-header>
     <el-main class="charts-main">
       <el-tabs v-model="activeTab" class="tab-change" @tab-click="onSubmit">
-        <el-tab-pane name="1">
-          <span slot="label" class="tab-item">累计新增</span>
-        </el-tab-pane>
-        <el-tab-pane name="3">
-          <span slot="label" class="tab-item">累计PRD评审通过</span>
-        </el-tab-pane>
-        <el-tab-pane name="2">
-          <span slot="label" class="tab-item">累计上线</span>
+        <el-tab-pane v-for="item in countTitle" :key="'countTitle'+item.code" :name="item.code+''">
+          <span slot="label" class="tab-item">{{ item.msg }}</span>
         </el-tab-pane>
       </el-tabs>
       <div class="chart-item">
@@ -173,6 +167,7 @@ moment.locale('zh-cn')
 import { settingQueryBizRqmtOrntList } from '@/api/requirement'
 import { teamQueryTeamInfoList } from '@/api/configure'
 import {
+  getRequireCountTitleEnum,
   getSummary,
   getCumulativeFlowDiagram,
   getRequireCountTrend,
@@ -213,6 +208,7 @@ export default {
         { code: 2, label: '月' },
         { code: 3, label: '年' }
       ],
+      countTitle: [], // 趋势图的动态title
       teamOptions: [], // 团队列表
       chartForm: {}, // 筛选表单
       stratAndEnd: [], // 开始结束日期
@@ -288,6 +284,7 @@ export default {
       if (this.activeTab === '2' && this.distributeStatus === 1) {
         this.distributeStatus = 2
       }
+      this.getRequireCountTitleEnum()
       this.getSummary()
       this.getCumulativeFlowDiagram()
       this.getRequireCountTrend()
@@ -322,6 +319,13 @@ export default {
       this.stratAndEnd = [startDate, endDate]
       this.onSubmit()
     },
+    async getRequireCountTitleEnum() { // 趋势图的动态title枚举
+      const res = await getRequireCountTitleEnum({ bizId: Number(localStorage.getItem('bizId')) })
+      if (res.code === 200) {
+        this.countTitle = res.data
+        console.log(this.countTitle)
+      }
+    },
     async getRequireDirection() { // 需求方向列表
       const res = await settingQueryBizRqmtOrntList(Number(localStorage.getItem('bizId')))
       if (res.code === 200) {

+ 13 - 13
src/views/reportManagement/daily/components/iconDisplay.vue

@@ -96,7 +96,8 @@ export default {
       const data3 = val.bugDisByDate.yAxis.map(item => ({
         ...item,
         type: 'line',
-        smooth: true
+        smooth: true,
+        itemStyle: { normal: { label: { show: true }}}
       }))
       setTimeout(() => {
         echarts.init(document.getElementById('line-echarts' + this.randomId)).setOption({
@@ -106,13 +107,7 @@ export default {
           grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true },
           xAxis: [{ type: 'category', data: val.bugDisByDate.xAxis ? val.bugDisByDate.xAxis : ['未知'], axisTick: { alignWithLabel: true }}],
           yAxis: [{ type: 'value', axisLine: { show: false }, axisTick: { show: false }, splitLine: { show: true, lineStyle: { type: 'dashed' }}}],
-          series: val.bugDisByDate.yAxis[0].data <= 0 ? [{ name: '直接访问', type: 'line', smooth: true, data: [0] }] : [{ data: data3, type: 'line', itemStyle: { normal: { label: { show: true }}}}]
-          // series: [{
-          //   data: data3,
-          //   type: 'line',
-          //   // 显示数值
-          //   itemStyle: { normal: { label: { show: true }}}
-          // }]
+          series: val.bugDisByDate.yAxis[0].data <= 0 ? [{ name: '直接访问', type: 'line', smooth: true, data: [0] }] : data3
 
         })
       }, 200)
@@ -120,7 +115,8 @@ export default {
       const data = val.bugDisByMember.yAxis.map(item => ({
         ...item,
         type: 'bar',
-        barWidth: '20px'
+        barWidth: '20px',
+        itemStyle: { normal: { label: { show: true, position: 'top', textStyle: { color: '#409EFF' }}}}
       }))
       setTimeout(() => {
         echarts.init(document.getElementById('lineShow' + this.randomId)).setOption({
@@ -138,7 +134,8 @@ export default {
       const data1 = val.bugDisByPri.yAxis.map(item => ({
         ...item,
         type: 'bar',
-        barWidth: '20px'
+        barWidth: '20px',
+        itemStyle: { normal: { label: { show: true, position: 'top', textStyle: { color: '#409EFF' }}}}
       }))
       setTimeout(() => {
         echarts.init(document.getElementById('barShow' + this.randomId)).setOption({
@@ -177,7 +174,8 @@ export default {
         const data = res6.data.yaxis.map(item => ({
           ...item,
           type: 'line',
-          smooth: true
+          smooth: true,
+          itemStyle: { normal: { label: { show: true }}}
         }))
         setTimeout(() => {
           echarts.init(document.getElementById('line-echarts' + this.randomId)).setOption({
@@ -197,7 +195,8 @@ export default {
         const data = res2.data.yaxis.map(item => ({
           ...item,
           type: 'bar',
-          barWidth: '20px'
+          barWidth: '20px',
+          itemStyle: { normal: { label: { show: true, position: 'top', textStyle: { color: '#409EFF' }}}}
         }))
         setTimeout(() => {
           echarts.init(document.getElementById('lineShow' + this.randomId)).setOption({
@@ -218,7 +217,8 @@ export default {
         const data = res3.data.yaxis.map(item => ({
           ...item,
           type: 'bar',
-          barWidth: '20px'
+          barWidth: '20px',
+          itemStyle: { normal: { label: { show: true, position: 'top', textStyle: { color: '#409EFF' }}}}
         }))
         setTimeout(() => {
           echarts.init(document.getElementById('barShow' + this.randomId)).setOption({

+ 22 - 3
src/views/reportManagement/testPresentation.vue

@@ -86,7 +86,15 @@
     <el-dialog title="选择任务" :visible.sync="centerDialogVisible" width="30%" center>
       <div class="Layout_space_between">
         <div style="width:100px;">选择任务 :</div>
-        <el-select v-model="queryData.code" filterable placeholder="请选择任务" size="mini" style="width:100%;">
+        <el-select
+          v-model="queryData.code"
+          filterable
+          :remote="true"
+          :remote-method="debounceQuery"
+          placeholder="请选择任务"
+          size="mini"
+          style="width:100%;"
+        >
           <el-option v-for="item in restaurants" :key="item.id" :label="item.name" :value="item.id" />
         </el-select>
       </div>
@@ -134,6 +142,7 @@
 </template>
 
 <script>
+const _ = require('lodash')
 import '@/styles/PublicStyle/index.scss'
 import { dailyReportDelete } from '@/api/testPresentetion' // 日报
 import { projectTestReportList } from '@/api/ResultPage' // 准出
@@ -377,12 +386,22 @@ export default {
     async getQueryData() { // 获取任务数据
       this.centerDialogVisible = true
       this.$set(this.queryData, 'code', '')
-      const res = await taskListCreate({ bizId: localStorage.getItem('bizId') })
+      this.getTaskList()
+    },
+    // 远程搜索任务
+    async getTaskList(val) {
+      const params = {
+        bizId: localStorage.getItem('bizId')
+      }
+      if (val) { params.name = val }
+      const res = await taskListCreate(params)
       if (res.code === 200) {
         this.restaurants = res.data.taskInfoList
       }
     },
-
+    debounceQuery: _.debounce(function() {
+      this.getTaskList(...arguments)
+    }, 500),
     async createPresentation(vel) {
       if (vel !== '') {
         if (this.title === '测试日报') {

+ 9 - 5
src/views/workbench/components/statisticsSection.vue

@@ -8,7 +8,7 @@
             <div v-for="(item,index) in statisticsList" :key="title+'-statistics-'+index" class="data-item" :class="{'active': clickItem === index }" @click="changeData(item.idList,item.label);clickItem=index">
               <label>
                 {{ item.label }}
-                <template v-if="(title === '需求' || title ==='任务')&& index<5">
+                <template v-if="(title === '需求' || title ==='任务') && index<7">
                   <el-tooltip class="item" effect="dark" :content="tips[title][index]" placement="top">
                     <i class="el-icon-info" />
                   </el-tooltip>
@@ -98,14 +98,18 @@ export default {
           '已过交付日期,状态仍未变更为“已上线”的需求数量(不包含当前状态为hold的需求)。',
           '交付日期在本周内的需求数量(不包含当前状态为hold的需求)。',
           '交付日期在本周,且状态仍未变更为“已上线”的需求数量(不包含当前状态为hold的需求)。',
-          '交付日期在下周的需求数量(不包含当前状态为hold的需求)。'
+          '最近一次变更状态为“已上线”是在本周,且当前状态为“已上线”或“已完成”的需求',
+          '交付日期在下周的需求数量(不包含当前状态为hold的需求)。',
+          '当前状态为“已上线”或“已完成”的需求'
         ],
         '任务': [
           '交付日期为今天,且状态仍未变更为“已上线”的任务数量(不包含当前状态为hold的任务)。',
           '已过交付日期,状态仍未变更为“已上线”的任务数量(不包含当前状态为hold的任务)。',
           '交付日期在本周内的任务数量(不包含当前状态为hold的任务)。',
           '交付日期在本周,且状态仍未变更为“已上线”的任务数量(不包含当前状态为hold的任务)。',
-          '交付日期在下周任务数量(不包含当前状态为hold的任务)。'
+          '最近一次变更状态为“已上线”是在本周,且当前状态为“已上线”的任务',
+          '交付日期在下周任务数量(不包含当前状态为hold的任务)。',
+          '当前状态为“已上线”的任务'
         ]
       },
       clickItem: 0
@@ -239,7 +243,7 @@ export default {
     display: grid;
     grid-template-columns: repeat(2,188px);
     grid-column-gap: 30px;
-    grid-template-rows: repeat(3,111px);
+    grid-template-rows: repeat(4,80px);
     grid-row-gap: 20px;
   }
   .data-item {
@@ -249,7 +253,7 @@ export default {
     display: grid;
     grid-template-rows: repeat(2,50%);
     align-items: center;
-    padding: 5px 0 5px 11px;
+    padding: 0 0 5px 11px;
     label {
       font-weight: 400;
       color: #666666;