|
@@ -1,312 +1,318 @@
|
|
|
<template>
|
|
|
- <el-container class="defect-container">
|
|
|
- <el-header class="defect-main" style="height: auto;">
|
|
|
- <el-form :model="defectForm" class="demo-form-inline" :inline="true">
|
|
|
- <el-form-item label="时间:">
|
|
|
- <div class="date-select">
|
|
|
- <span :class="[dateType==='week'?'date-active':'']" class="date-item" @click.stop="dateType='week';setDate('week')">本周</span>
|
|
|
- <span :class="[dateType==='month'?'date-active':'']" class="date-item" @click.stop="dateType='month';setDate('month')">本月</span>
|
|
|
- <span :class="[dateType==='year'?'date-active':'']" class="date-item" @click.stop="dateType='year';setDate('year')">本年</span>
|
|
|
- </div>
|
|
|
- <el-date-picker
|
|
|
- v-model="stratAndEnd"
|
|
|
- type="daterange"
|
|
|
- align="right"
|
|
|
- unlink-panels
|
|
|
- range-separator="至"
|
|
|
- start-placeholder="开始日期"
|
|
|
- end-placeholder="结束日期"
|
|
|
- size="small"
|
|
|
- value-format="yyyy.MM.dd"
|
|
|
- :default-time="['00:00:00','23:59:59']"
|
|
|
- @change="dateType = ''"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- <el-form :model="defectForm" class="demo-form-inline" :inline="true">
|
|
|
- <el-form-item label="责任团队:">
|
|
|
- <el-select
|
|
|
- v-model="defectForm.team"
|
|
|
- placeholder="请选择"
|
|
|
- size="small"
|
|
|
- clearable
|
|
|
- filterable
|
|
|
- multiple
|
|
|
- >
|
|
|
- <el-option-group
|
|
|
- v-for="group in teamOptions"
|
|
|
- :key="group.label"
|
|
|
- :label="group.label"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="item in group.options"
|
|
|
- :key="item.teamId"
|
|
|
- :label="item.teamName"
|
|
|
- :value="item.teamId"
|
|
|
- />
|
|
|
- </el-option-group>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="模块:">
|
|
|
- <el-cascader
|
|
|
- v-model="defectForm.moduleIds"
|
|
|
- size="small"
|
|
|
- clearable
|
|
|
- collapse-tags
|
|
|
- :props="{ multiple: true }"
|
|
|
- :options="moduleList"
|
|
|
- placeholder="请选择"
|
|
|
- @click.native="bugDataGet"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item>
|
|
|
- <el-button type="primary" size="mini" @click="onSubmit">查询</el-button>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- <div class="data-total">
|
|
|
- <div v-for="(item,index) in Summary" :key="'Summary'+index" class="data-item" :class="['item'+ (index + 1)]">
|
|
|
- <article>
|
|
|
- <div class="item-top">
|
|
|
- <div class="item-circle">
|
|
|
- <img v-show="index === 0" src="../../../src/assets/defect_images/add.png">
|
|
|
- <img v-show="index === 1" src="../../../src/assets/defect_images/repair.png">
|
|
|
- <img v-show="index === 2" src="../../../src/assets/defect_images/reopen.png">
|
|
|
- </div>
|
|
|
- <span>{{ item.label }}</span>
|
|
|
- <el-tooltip v-if="index === 0" class="item" effect="dark" content="统计时间区间内,新增的缺陷的数量" placement="top-start">
|
|
|
- <i class="el-icon-info" />
|
|
|
- </el-tooltip>
|
|
|
- <el-tooltip v-if="index === 1" class="item" effect="dark" content="统计时间区间内,缺陷执行过更新状态为“已完成”的操作并且当前缺陷状态是“已完成”的缺陷数量" placement="top-start">
|
|
|
- <i class="el-icon-info" />
|
|
|
- </el-tooltip>
|
|
|
- <el-tooltip v-if="index === 2" class="item" effect="dark" content="统计时间区间内,缺陷执行过更新状态为“Reopen”的操作并且当前缺陷状态为任意状态的缺陷数量" placement="top-start">
|
|
|
- <i class="el-icon-info" />
|
|
|
- </el-tooltip>
|
|
|
+ <div @click="drawer = false">
|
|
|
+ <el-container class="defect-container">
|
|
|
+ <el-header class="defect-main" style="height: auto;">
|
|
|
+ <el-form :model="defectForm" class="demo-form-inline" :inline="true">
|
|
|
+ <el-form-item label="时间:">
|
|
|
+ <div class="date-select">
|
|
|
+ <span :class="[dateType==='week'?'date-active':'']" class="date-item" @click.stop="dateType='week';setDate('week')">本周</span>
|
|
|
+ <span :class="[dateType==='month'?'date-active':'']" class="date-item" @click.stop="dateType='month';setDate('month')">本月</span>
|
|
|
+ <span :class="[dateType==='year'?'date-active':'']" class="date-item" @click.stop="dateType='year';setDate('year')">本年</span>
|
|
|
</div>
|
|
|
- <div class="item-title">{{ item.total }}</div>
|
|
|
- <div class="item-line" />
|
|
|
- <div v-show="Number(item.relativeRatio)>=0" class="item-up">环比:<i class="el-icon-caret-top" />{{ item.relativeRatio }}%</div>
|
|
|
- <div v-show="Number(item.relativeRatio)<0" class="item-down">环比:<i class="el-icon-caret-bottom" />{{ item.relativeRatio.substring(1,item.relativeRatio.length) }}%</div>
|
|
|
- <div v-show="item.relativeRatio === '--'" class="item-down">环比:{{ item.relativeRatio }}%</div>
|
|
|
- </article>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </el-header>
|
|
|
- <el-main class="charts-main">
|
|
|
- <el-tabs v-model="activeName" @tab-click="tabChange">
|
|
|
- <el-tab-pane name="first">
|
|
|
- <span slot="label" class="tab-item">新增缺陷</span>
|
|
|
- </el-tab-pane>
|
|
|
- <el-tab-pane name="second">
|
|
|
- <span slot="label" class="tab-item">累计修复缺陷</span>
|
|
|
- </el-tab-pane>
|
|
|
- </el-tabs>
|
|
|
- <div v-show="activeName === 'first'" class="chart-item">
|
|
|
- <h3>趋势图</h3>
|
|
|
- <el-row type="flex" align="middle">
|
|
|
- <el-col :span="24">
|
|
|
- <div class="chart-contain">
|
|
|
- <normal-echart v-if="echartsOption3" :chart-id="'chartThird'" :option="echartsOption3" />
|
|
|
- </div>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </div>
|
|
|
- <div class="chart-item">
|
|
|
- <h3>分布图</h3>
|
|
|
- <el-row type="flex" align="middle">
|
|
|
- <el-col :span="4">
|
|
|
- <el-select v-model="defectStatus" placeholder="缺陷状态" size="small" @change="defectStatusChange">
|
|
|
- <el-option
|
|
|
- v-for="item in defectStatusList"
|
|
|
- :key="item.code"
|
|
|
- :disabled="activeTab === 2&&item.code === 1"
|
|
|
- :label="item.label"
|
|
|
- :value="item.code"
|
|
|
- />
|
|
|
+ <el-date-picker
|
|
|
+ v-model="stratAndEnd"
|
|
|
+ type="daterange"
|
|
|
+ align="right"
|
|
|
+ unlink-panels
|
|
|
+ range-separator="至"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ size="small"
|
|
|
+ value-format="yyyy.MM.dd"
|
|
|
+ :default-time="['00:00:00','23:59:59']"
|
|
|
+ @change="dateType = ''"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <el-form :model="defectForm" class="demo-form-inline" :inline="true">
|
|
|
+ <el-form-item label="责任团队:">
|
|
|
+ <el-select
|
|
|
+ v-model="defectForm.team"
|
|
|
+ placeholder="请选择"
|
|
|
+ size="small"
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ multiple
|
|
|
+ >
|
|
|
+ <el-option-group
|
|
|
+ v-for="group in teamOptions"
|
|
|
+ :key="group.label"
|
|
|
+ :label="group.label"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in group.options"
|
|
|
+ :key="item.teamId"
|
|
|
+ :label="item.teamName"
|
|
|
+ :value="item.teamId"
|
|
|
+ />
|
|
|
+ </el-option-group>
|
|
|
</el-select>
|
|
|
- </el-col>
|
|
|
- <el-col :span="4" :offset="16" class="col-flex-end">
|
|
|
- <div class="bar-pie" :class="[barOrPie==='bar'?'active':'']" @click="changeBarOrPie('bar')">柱状图</div>
|
|
|
- <div class="bar-pie" :class="[barOrPie==='pie'?'active':'']" @click="changeBarOrPie('pie')">饼图</div>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row type="flex" align="middle">
|
|
|
- <el-col :span="24">
|
|
|
- <div class="chart-contain">
|
|
|
- <child-chart :show.sync="showChild" :chart-type="barOrPie" :params="childParams" />
|
|
|
- <normal-echart v-if="echartsOption1" :chart-id="'chartFirst'" :option="echartsOption1" @onClick="echartClick" />
|
|
|
- </div>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </div>
|
|
|
- <div class="chart-item">
|
|
|
- <h3>平均修复时长</h3>
|
|
|
- <el-row type="flex" align="middle">
|
|
|
- <div class="repair-list">
|
|
|
- <div v-for="(item, index) in repairTimeList" :key="'time'+index" class="repair-item" :class="[Number(item.relativeRatio)<0?'repair-slow':'repair-rise']">
|
|
|
- <div class="repair-item-point" :class="['point'+index]" />
|
|
|
- <span>{{ item.label }}</span>
|
|
|
- <div class="repair-time">{{ item.total }}</div>
|
|
|
- <div v-show="Number(item.relativeRatio)>=0" class="repair-up">环比:<i class="el-icon-caret-top" /><span>{{ item.relativeRatio }}%</span></div>
|
|
|
- <div v-show="Number(item.relativeRatio)<0" class="repair-down">环比:<i class="el-icon-caret-bottom" /><span>{{ item.relativeRatio.substring(1,item.relativeRatio.length) }}%</span></div>
|
|
|
- <div v-show="item.relativeRatio === '--'" class="repair-up">环比:<span>{{ item.relativeRatio }}%</span></div>
|
|
|
- </div>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="模块:">
|
|
|
+ <el-cascader
|
|
|
+ v-model="defectForm.moduleIds"
|
|
|
+ size="small"
|
|
|
+ clearable
|
|
|
+ collapse-tags
|
|
|
+ :props="{ multiple: true }"
|
|
|
+ :options="moduleList"
|
|
|
+ placeholder="请选择"
|
|
|
+ @click.native="bugDataGet"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item>
|
|
|
+ <el-button type="primary" size="mini" @click="onSubmit">查询</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <div class="data-total">
|
|
|
+ <div v-for="(item,index) in Summary" :key="'Summary'+index" class="data-item" :class="['item'+ (index + 1)]">
|
|
|
+ <article>
|
|
|
+ <div class="item-top">
|
|
|
+ <div class="item-circle">
|
|
|
+ <img v-show="index === 0" src="../../../src/assets/defect_images/add.png">
|
|
|
+ <img v-show="index === 1" src="../../../src/assets/defect_images/repair.png">
|
|
|
+ <img v-show="index === 2" src="../../../src/assets/defect_images/reopen.png">
|
|
|
+ </div>
|
|
|
+ <span>{{ item.label }}</span>
|
|
|
+ <el-tooltip v-if="index === 0" class="item" effect="dark" content="统计时间区间内,新增的缺陷的数量" placement="top-start">
|
|
|
+ <i class="el-icon-info" />
|
|
|
+ </el-tooltip>
|
|
|
+ <el-tooltip v-if="index === 1" class="item" effect="dark" content="统计时间区间内,缺陷执行过更新状态为“已完成”的操作并且当前缺陷状态是“已完成”的缺陷数量" placement="top-start">
|
|
|
+ <i class="el-icon-info" />
|
|
|
+ </el-tooltip>
|
|
|
+ <el-tooltip v-if="index === 2" class="item" effect="dark" content="统计时间区间内,缺陷执行过更新状态为“Reopen”的操作并且当前缺陷状态为任意状态的缺陷数量" placement="top-start">
|
|
|
+ <i class="el-icon-info" />
|
|
|
+ </el-tooltip>
|
|
|
+ </div>
|
|
|
+ <div class="item-title" @click.stop="getRequiredNum(item)">{{ item.total }}</div>
|
|
|
+ <div class="item-line" />
|
|
|
+ <div v-show="Number(item.relativeRatio)>=0" class="item-up">环比:<i class="el-icon-caret-top" />{{ item.relativeRatio }}%</div>
|
|
|
+ <div v-show="Number(item.relativeRatio)<0" class="item-down">环比:<i class="el-icon-caret-bottom" />{{ item.relativeRatio.substring(1,item.relativeRatio.length) }}%</div>
|
|
|
+ <div v-show="item.relativeRatio === '--'" class="item-down">环比:{{ item.relativeRatio }}%</div>
|
|
|
+ </article>
|
|
|
</div>
|
|
|
- </el-row>
|
|
|
- <h3>去除节假日的修复时长</h3>
|
|
|
- <el-row type="flex" align="middle">
|
|
|
- <div class="repair-list">
|
|
|
- <div v-for="(item, index) in repairTimeListNoHoliday" :key="'time'+index" class="repair-item" :class="[Number(item.relativeRatio)<0?'repair-slow':'repair-rise']">
|
|
|
- <div class="repair-item-point" :class="['point'+index]" />
|
|
|
- <span>{{ item.label }}</span>
|
|
|
- <div class="repair-time">{{ item.total }}</div>
|
|
|
- <div v-show="Number(item.relativeRatio)>=0" class="repair-up">环比:<i class="el-icon-caret-top" /><span>{{ item.relativeRatio }}%</span></div>
|
|
|
- <div v-show="Number(item.relativeRatio)<0" class="repair-down">环比:<i class="el-icon-caret-bottom" /><span>{{ item.relativeRatio.substring(1,item.relativeRatio.length) }}%</span></div>
|
|
|
- <div v-show="item.relativeRatio === '--'" class="repair-up">环比:<span>{{ item.relativeRatio }}%</span></div>
|
|
|
+ </div>
|
|
|
+ </el-header>
|
|
|
+ <el-main class="charts-main">
|
|
|
+ <el-tabs v-model="activeName" @tab-click="tabChange">
|
|
|
+ <el-tab-pane name="first">
|
|
|
+ <span slot="label" class="tab-item">新增缺陷</span>
|
|
|
+ </el-tab-pane>
|
|
|
+ <el-tab-pane name="second">
|
|
|
+ <span slot="label" class="tab-item">累计修复缺陷</span>
|
|
|
+ </el-tab-pane>
|
|
|
+ </el-tabs>
|
|
|
+ <div v-show="activeName === 'first'" class="chart-item">
|
|
|
+ <h3>趋势图</h3>
|
|
|
+ <el-row type="flex" align="middle">
|
|
|
+ <el-col :span="24">
|
|
|
+ <div class="chart-contain">
|
|
|
+ <normal-echart v-if="echartsOption3" :chart-id="'chartThird'" :option="echartsOption3" />
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ <div class="chart-item">
|
|
|
+ <h3>分布图</h3>
|
|
|
+ <el-row type="flex" align="middle">
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-select v-model="defectStatus" placeholder="缺陷状态" size="small" @change="defectStatusChange">
|
|
|
+ <el-option
|
|
|
+ v-for="item in defectStatusList"
|
|
|
+ :key="item.code"
|
|
|
+ :disabled="activeTab === 2&&item.code === 1"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.code"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4" :offset="16" class="col-flex-end">
|
|
|
+ <div class="bar-pie" :class="[barOrPie==='bar'?'active':'']" @click="changeBarOrPie('bar')">柱状图</div>
|
|
|
+ <div class="bar-pie" :class="[barOrPie==='pie'?'active':'']" @click="changeBarOrPie('pie')">饼图</div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row type="flex" align="middle">
|
|
|
+ <el-col :span="24">
|
|
|
+ <div class="chart-contain">
|
|
|
+ <child-chart :show.sync="showChild" :chart-type="barOrPie" :params="childParams" />
|
|
|
+ <normal-echart v-if="echartsOption1" :chart-id="'chartFirst'" :option="echartsOption1" @onClick="echartClick" />
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ <div class="chart-item">
|
|
|
+ <h3>平均修复时长</h3>
|
|
|
+ <el-row type="flex" align="middle">
|
|
|
+ <div class="repair-list">
|
|
|
+ <div v-for="(item, index) in repairTimeList" :key="'time'+index" class="repair-item" :class="[Number(item.relativeRatio)<0?'repair-slow':'repair-rise']">
|
|
|
+ <div class="repair-item-point" :class="['point'+index]" />
|
|
|
+ <span>{{ item.label }}</span>
|
|
|
+ <div class="repair-time">{{ item.total }}</div>
|
|
|
+ <div v-show="Number(item.relativeRatio)>=0" class="repair-up">环比:<i class="el-icon-caret-top" /><span>{{ item.relativeRatio }}%</span></div>
|
|
|
+ <div v-show="Number(item.relativeRatio)<0" class="repair-down">环比:<i class="el-icon-caret-bottom" /><span>{{ item.relativeRatio.substring(1,item.relativeRatio.length) }}%</span></div>
|
|
|
+ <div v-show="item.relativeRatio === '--'" class="repair-up">环比:<span>{{ item.relativeRatio }}%</span></div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </el-row>
|
|
|
- <el-row type="flex" align="middle">
|
|
|
- <el-col :span="4" class="col-flex-start">
|
|
|
- <div class="off-holiday" :class="[offOnholiday==='off'?'selected':'']" @click="changeHoliday('off')">去除节假日</div>
|
|
|
- <div class="on-holiday" :class="[offOnholiday==='on'?'selected':'']" @click="changeHoliday('on')">不去除节假日</div>
|
|
|
- </el-col>
|
|
|
- <el-col :span="4" :offset="16" class="col-flex-end">
|
|
|
- <div class="bar-line" :class="[barOrLine==='line'?'active':'']" @click="changeBarOrLine('line')">折线图</div>
|
|
|
- <div class="bar-line" :class="[barOrLine==='bar'?'active':'']" @click="changeBarOrLine('bar')">柱状图</div>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row type="flex" align="middle">
|
|
|
- <el-col :span="24">
|
|
|
- <div class="chart-contain">
|
|
|
- <normal-echart v-if="echartsOption2" :chart-id="'chartSecond'" :option="echartsOption2" />
|
|
|
+ </el-row>
|
|
|
+ <h3>去除节假日的修复时长</h3>
|
|
|
+ <el-row type="flex" align="middle">
|
|
|
+ <div class="repair-list">
|
|
|
+ <div v-for="(item, index) in repairTimeListNoHoliday" :key="'time'+index" class="repair-item" :class="[Number(item.relativeRatio)<0?'repair-slow':'repair-rise']">
|
|
|
+ <div class="repair-item-point" :class="['point'+index]" />
|
|
|
+ <span>{{ item.label }}</span>
|
|
|
+ <div class="repair-time">{{ item.total }}</div>
|
|
|
+ <div v-show="Number(item.relativeRatio)>=0" class="repair-up">环比:<i class="el-icon-caret-top" /><span>{{ item.relativeRatio }}%</span></div>
|
|
|
+ <div v-show="Number(item.relativeRatio)<0" class="repair-down">环比:<i class="el-icon-caret-bottom" /><span>{{ item.relativeRatio.substring(1,item.relativeRatio.length) }}%</span></div>
|
|
|
+ <div v-show="item.relativeRatio === '--'" class="repair-up">环比:<span>{{ item.relativeRatio }}%</span></div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </div>
|
|
|
- <div class="chart-item">
|
|
|
- <h3>模块分布</h3>
|
|
|
- <el-table
|
|
|
- :data="moduleData"
|
|
|
- style="width: 100%;margin-bottom: 20px;"
|
|
|
- row-key="id"
|
|
|
- :border="false"
|
|
|
- :max-height="350"
|
|
|
- :tree-props="{children: 'childModuleDatas', hasChildren: 'hasChildren'}"
|
|
|
- :header-cell-style="{background: 'rgba(232,232,232,0.6)',color:'#333333'}"
|
|
|
- class="repair-table"
|
|
|
- @sort-change="moduleTableSortChange"
|
|
|
- >
|
|
|
- <el-table-column prop="name" label="模块" />
|
|
|
- <el-table-column v-if="activeTab=== 1" prop="newData" label="新增" sortable="custom" show-overflow-tooltip>
|
|
|
- <template slot-scope="scope">
|
|
|
- <span class="table-repair-item1 repair-span">{{ scope.row.newData.total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.newData.detail[0].label }}:{{ scope.row.newData.detail[0].total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.newData.detail[1].label }}:{{ scope.row.newData.detail[1].total }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="newAndReopenData" label="待修复/Reopen" sortable="custom">
|
|
|
- <template slot-scope="scope">
|
|
|
- <span class="table-repair-item2 repair-span2">{{ scope.row.newAndReopenData.total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.newAndReopenData.detail[0].label }}:{{ scope.row.newAndReopenData.detail[0].total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.newAndReopenData.detail[1].label }}:{{ scope.row.newAndReopenData.detail[1].total }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="waitTestData" label="待测试" sortable="custom">
|
|
|
- <template slot-scope="scope">
|
|
|
- <span class="table-repair-item2 repair-span2">{{ scope.row.waitTestData.total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.waitTestData.detail[0].label }}:{{ scope.row.waitTestData.detail[0].total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.waitTestData.detail[1].label }}:{{ scope.row.waitTestData.detail[1].total }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="repairData" label="已完成" sortable="custom">
|
|
|
- <template slot-scope="scope">
|
|
|
- <span class="table-repair-item2 repair-span2">{{ scope.row.repairData.total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.repairData.detail[0].label }}:{{ scope.row.repairData.detail[0].total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.repairData.detail[1].label }}:{{ scope.row.repairData.detail[1].total }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="repairTimeAvgData" label="平均修复时长" min-width="120">
|
|
|
- <template slot-scope="scope">
|
|
|
- <span class="table-repair-item3 repair-span">{{ scope.row.repairTimeAvgData.total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.repairTimeAvgData.detail[0].label }}:{{ scope.row.repairTimeAvgData.detail[0].total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.repairTimeAvgData.detail[1].label }}:{{ scope.row.repairTimeAvgData.detail[1].total }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="repairTimeAvgPurgeNhData" label="平均修复时长(去除节假日)" min-width="120">
|
|
|
- <template slot-scope="scope">
|
|
|
- <span class="table-repair-item4 repair-span">{{ scope.row.repairTimeAvgPurgeNhData.total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.repairTimeAvgPurgeNhData.detail[0].label }}:{{ scope.row.repairTimeAvgPurgeNhData.detail[0].total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.repairTimeAvgPurgeNhData.detail[1].label }}:{{ scope.row.repairTimeAvgPurgeNhData.detail[1].total }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
- </div>
|
|
|
- <div class="chart-item">
|
|
|
- <h3>责任人分布</h3>
|
|
|
- <el-table
|
|
|
- :data="memberData"
|
|
|
- style="width: 100%;margin-bottom: 20px;"
|
|
|
- row-key="id"
|
|
|
- :border="false"
|
|
|
- :max-height="350"
|
|
|
- :tree-props="{children: 'childModuleDatas', hasChildren: 'hasChildren'}"
|
|
|
- :header-cell-style="{background: 'rgba(232,232,232,0.6)',color:'#333333'}"
|
|
|
- class="repair-table"
|
|
|
- @sort-change="memberTableSortChange"
|
|
|
- >
|
|
|
- <el-table-column prop="name" label="姓名" />
|
|
|
- <el-table-column v-if="activeTab=== 1" prop="newData" label="新增" sortable="custom" show-overflow-tooltip>
|
|
|
- <template slot-scope="scope">
|
|
|
- <span class="table-repair-item1 repair-span">{{ scope.row.newData.total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.newData.detail[0].label }}:{{ scope.row.newData.detail[0].total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.newData.detail[1].label }}:{{ scope.row.newData.detail[1].total }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="newAndReopenData" label="待修复/Reopen" sortable="custom">
|
|
|
- <template slot-scope="scope">
|
|
|
- <span class="table-repair-item2 repair-span2">{{ scope.row.newAndReopenData.total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.newAndReopenData.detail[0].label }}:{{ scope.row.newAndReopenData.detail[0].total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.newAndReopenData.detail[1].label }}:{{ scope.row.newAndReopenData.detail[1].total }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="waitTestData" label="待测试" sortable="custom">
|
|
|
- <template slot-scope="scope">
|
|
|
- <span class="table-repair-item2 repair-span2">{{ scope.row.waitTestData.total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.waitTestData.detail[0].label }}:{{ scope.row.waitTestData.detail[0].total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.waitTestData.detail[1].label }}:{{ scope.row.waitTestData.detail[1].total }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="repairData" label="已完成" sortable="custom">
|
|
|
- <template slot-scope="scope">
|
|
|
- <span class="table-repair-item2 repair-span2">{{ scope.row.repairData.total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.repairData.detail[0].label }}:{{ scope.row.repairData.detail[0].total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.repairData.detail[1].label }}:{{ scope.row.repairData.detail[1].total }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="repairTimeAvgData" label="平均修复时长" min-width="120">
|
|
|
- <template slot-scope="scope">
|
|
|
- <span class="table-repair-item3 repair-span">{{ scope.row.repairTimeAvgData.total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.repairTimeAvgData.detail[0].label }}:{{ scope.row.repairTimeAvgData.detail[0].total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.repairTimeAvgData.detail[1].label }}:{{ scope.row.repairTimeAvgData.detail[1].total }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="repairTimeAvgPurgeNhData" label="平均修复时长(去除节假日)" min-width="120">
|
|
|
- <template slot-scope="scope">
|
|
|
- <span class="table-repair-item4 repair-span">{{ scope.row.repairTimeAvgPurgeNhData.total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.repairTimeAvgPurgeNhData.detail[0].label }}:{{ scope.row.repairTimeAvgPurgeNhData.detail[0].total }}</span>
|
|
|
- <span class="repair-span">{{ scope.row.repairTimeAvgPurgeNhData.detail[1].label }}:{{ scope.row.repairTimeAvgPurgeNhData.detail[1].total }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
+ </el-row>
|
|
|
+ <el-row type="flex" align="middle">
|
|
|
+ <el-col :span="4" class="col-flex-start">
|
|
|
+ <div class="off-holiday" :class="[offOnholiday==='off'?'selected':'']" @click="changeHoliday('off')">去除节假日</div>
|
|
|
+ <div class="on-holiday" :class="[offOnholiday==='on'?'selected':'']" @click="changeHoliday('on')">不去除节假日</div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4" :offset="16" class="col-flex-end">
|
|
|
+ <div class="bar-line" :class="[barOrLine==='line'?'active':'']" @click="changeBarOrLine('line')">折线图</div>
|
|
|
+ <div class="bar-line" :class="[barOrLine==='bar'?'active':'']" @click="changeBarOrLine('bar')">柱状图</div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row type="flex" align="middle">
|
|
|
+ <el-col :span="24">
|
|
|
+ <div class="chart-contain">
|
|
|
+ <normal-echart v-if="echartsOption2" :chart-id="'chartSecond'" :option="echartsOption2" />
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ <div class="chart-item">
|
|
|
+ <h3>模块分布</h3>
|
|
|
+ <el-table
|
|
|
+ :data="moduleData"
|
|
|
+ style="width: 100%;margin-bottom: 20px;"
|
|
|
+ row-key="id"
|
|
|
+ :border="false"
|
|
|
+ :max-height="350"
|
|
|
+ :tree-props="{children: 'childModuleDatas', hasChildren: 'hasChildren'}"
|
|
|
+ :header-cell-style="{background: 'rgba(232,232,232,0.6)',color:'#333333'}"
|
|
|
+ class="repair-table"
|
|
|
+ @sort-change="moduleTableSortChange"
|
|
|
+ >
|
|
|
+ <el-table-column prop="name" label="模块" />
|
|
|
+ <el-table-column v-if="activeTab=== 1" prop="newData" label="新增" sortable="custom" show-overflow-tooltip>
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span class="table-repair-item1 repair-span">{{ scope.row.newData.total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.newData.detail[0].label }}:{{ scope.row.newData.detail[0].total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.newData.detail[1].label }}:{{ scope.row.newData.detail[1].total }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="newAndReopenData" label="待修复/Reopen" sortable="custom">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span class="table-repair-item2 repair-span2">{{ scope.row.newAndReopenData.total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.newAndReopenData.detail[0].label }}:{{ scope.row.newAndReopenData.detail[0].total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.newAndReopenData.detail[1].label }}:{{ scope.row.newAndReopenData.detail[1].total }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="waitTestData" label="待测试" sortable="custom">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span class="table-repair-item2 repair-span2">{{ scope.row.waitTestData.total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.waitTestData.detail[0].label }}:{{ scope.row.waitTestData.detail[0].total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.waitTestData.detail[1].label }}:{{ scope.row.waitTestData.detail[1].total }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="repairData" label="已完成" sortable="custom">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span class="table-repair-item2 repair-span2">{{ scope.row.repairData.total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.repairData.detail[0].label }}:{{ scope.row.repairData.detail[0].total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.repairData.detail[1].label }}:{{ scope.row.repairData.detail[1].total }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="repairTimeAvgData" label="平均修复时长" min-width="120">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span class="table-repair-item3 repair-span">{{ scope.row.repairTimeAvgData.total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.repairTimeAvgData.detail[0].label }}:{{ scope.row.repairTimeAvgData.detail[0].total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.repairTimeAvgData.detail[1].label }}:{{ scope.row.repairTimeAvgData.detail[1].total }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="repairTimeAvgPurgeNhData" label="平均修复时长(去除节假日)" min-width="120">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span class="table-repair-item4 repair-span">{{ scope.row.repairTimeAvgPurgeNhData.total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.repairTimeAvgPurgeNhData.detail[0].label }}:{{ scope.row.repairTimeAvgPurgeNhData.detail[0].total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.repairTimeAvgPurgeNhData.detail[1].label }}:{{ scope.row.repairTimeAvgPurgeNhData.detail[1].total }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ <div class="chart-item">
|
|
|
+ <h3>责任人分布</h3>
|
|
|
+ <el-table
|
|
|
+ :data="memberData"
|
|
|
+ style="width: 100%;margin-bottom: 20px;"
|
|
|
+ row-key="id"
|
|
|
+ :border="false"
|
|
|
+ :max-height="350"
|
|
|
+ :tree-props="{children: 'childModuleDatas', hasChildren: 'hasChildren'}"
|
|
|
+ :header-cell-style="{background: 'rgba(232,232,232,0.6)',color:'#333333'}"
|
|
|
+ class="repair-table"
|
|
|
+ @sort-change="memberTableSortChange"
|
|
|
+ >
|
|
|
+ <el-table-column prop="name" label="姓名" />
|
|
|
+ <el-table-column v-if="activeTab=== 1" prop="newData" label="新增" sortable="custom" show-overflow-tooltip>
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span class="table-repair-item1 repair-span">{{ scope.row.newData.total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.newData.detail[0].label }}:{{ scope.row.newData.detail[0].total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.newData.detail[1].label }}:{{ scope.row.newData.detail[1].total }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="newAndReopenData" label="待修复/Reopen" sortable="custom">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span class="table-repair-item2 repair-span2">{{ scope.row.newAndReopenData.total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.newAndReopenData.detail[0].label }}:{{ scope.row.newAndReopenData.detail[0].total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.newAndReopenData.detail[1].label }}:{{ scope.row.newAndReopenData.detail[1].total }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="waitTestData" label="待测试" sortable="custom">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span class="table-repair-item2 repair-span2">{{ scope.row.waitTestData.total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.waitTestData.detail[0].label }}:{{ scope.row.waitTestData.detail[0].total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.waitTestData.detail[1].label }}:{{ scope.row.waitTestData.detail[1].total }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="repairData" label="已完成" sortable="custom">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span class="table-repair-item2 repair-span2">{{ scope.row.repairData.total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.repairData.detail[0].label }}:{{ scope.row.repairData.detail[0].total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.repairData.detail[1].label }}:{{ scope.row.repairData.detail[1].total }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="repairTimeAvgData" label="平均修复时长" min-width="120">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span class="table-repair-item3 repair-span">{{ scope.row.repairTimeAvgData.total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.repairTimeAvgData.detail[0].label }}:{{ scope.row.repairTimeAvgData.detail[0].total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.repairTimeAvgData.detail[1].label }}:{{ scope.row.repairTimeAvgData.detail[1].total }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="repairTimeAvgPurgeNhData" label="平均修复时长(去除节假日)" min-width="120">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span class="table-repair-item4 repair-span">{{ scope.row.repairTimeAvgPurgeNhData.total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.repairTimeAvgPurgeNhData.detail[0].label }}:{{ scope.row.repairTimeAvgPurgeNhData.detail[0].total }}</span>
|
|
|
+ <span class="repair-span">{{ scope.row.repairTimeAvgPurgeNhData.detail[1].label }}:{{ scope.row.repairTimeAvgPurgeNhData.detail[1].total }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ </el-main>
|
|
|
+ <div @click.stop>
|
|
|
+ <require-drawer :drawer="drawer" :data="requireList" @clone="clone" />
|
|
|
</div>
|
|
|
- </el-main>
|
|
|
- </el-container>
|
|
|
+ </el-container>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
<script>
|
|
|
import moment from 'moment'
|
|
|
moment.locale('zh-cn')
|
|
|
import { mapGetters } from 'vuex'
|
|
|
+import requireDrawer from './components/requireDrawer'
|
|
|
import { settingQueryBizModuleList } from '@/api/defectManage'
|
|
|
import { teamQueryTeamInfoList } from '@/api/configure'
|
|
|
import {
|
|
@@ -323,9 +329,11 @@ import {
|
|
|
import normalEchart from '@/components/chart/normalEchart'
|
|
|
import childChart from './components/childCharts'
|
|
|
export default {
|
|
|
- components: { normalEchart, childChart },
|
|
|
+ components: { normalEchart, childChart, requireDrawer },
|
|
|
data() {
|
|
|
return {
|
|
|
+ drawer: false,
|
|
|
+ requireList: {},
|
|
|
echartsOption1: null,
|
|
|
echartsOption2: null,
|
|
|
echartsOption3: null, // 趋势图
|
|
@@ -425,6 +433,7 @@ export default {
|
|
|
}))
|
|
|
},
|
|
|
setDate(type) { // 日期筛选
|
|
|
+ this.drawer = false
|
|
|
let startDate = null
|
|
|
let endDate = null
|
|
|
switch (type) {
|
|
@@ -737,6 +746,15 @@ export default {
|
|
|
column.order === 'ascending' ? this.memberSort = 7 : this.memberSort = 8
|
|
|
}
|
|
|
this.getMemberDistributeData()
|
|
|
+ },
|
|
|
+ getRequiredNum(value) {
|
|
|
+ console.log(value, 'cdcsdcd')
|
|
|
+ this.drawer = true
|
|
|
+ value.typeStr = '缺陷'
|
|
|
+ this.requireList = value
|
|
|
+ },
|
|
|
+ clone(v) {
|
|
|
+ this.drawer = v
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -825,6 +843,7 @@ export default {
|
|
|
.item-title {
|
|
|
font-size: 40px;
|
|
|
padding: 5% 20px;
|
|
|
+ cursor: pointer;
|
|
|
}
|
|
|
.item-up,.item-down {
|
|
|
font-size: 13px;
|