|
|
@@ -7,7 +7,9 @@
|
|
|
<el-col :span="12">
|
|
|
<div class="description-card-text" style="font-size: 18px;font-weight: bold">{{selectedProject.name}}</div>
|
|
|
<div class="description-card-text">项目地址:
|
|
|
- <span><a target="_blank" :href="selectedProject.gitRemoteUrl">{{selectedProject.gitRemoteUrl}}</a></span>
|
|
|
+ <span>
|
|
|
+ <el-link target="_blank" type="primary" :href="selectedProject.gitRemoteUrl">{{selectedProject.gitRemoteUrl}}</el-link>
|
|
|
+ </span>
|
|
|
</div>
|
|
|
<div class="description-card-text">项目介绍:
|
|
|
<span>{{selectedProject.description}}</span>
|
|
|
@@ -46,7 +48,7 @@
|
|
|
<script>
|
|
|
import Tree from '@/components/Tree.vue';
|
|
|
import * as echarts from 'echarts';
|
|
|
-import { RequirementAPI } from '@/api';
|
|
|
+import { BugListAPI, RequirementAPI } from '@/api';
|
|
|
import RequirementDrawer from '@/components/RequirementDrawer.vue';
|
|
|
import { useProjectList } from '../../composable/useProject';
|
|
|
|
|
|
@@ -124,9 +126,51 @@ export default {
|
|
|
handleDrawerContentChange(id) {
|
|
|
this.requirementInDrawer = Array.prototype.find.call(this.requirements, (requirement) => requirement.id === id);
|
|
|
},
|
|
|
- drawChart() {
|
|
|
+ async drawChart() {
|
|
|
+ const bugList = await BugListAPI.getBugListByProjectId(this.$store.state.workspace.currentProjectId);
|
|
|
+ const requirementsValuesMap = new Map();
|
|
|
+ const requirementsValues = [];
|
|
|
+ const bugListValuesMap = new Map();
|
|
|
+ const bugListValues = [];
|
|
|
+ this.requirements.forEach((item) => {
|
|
|
+ if (item.type === '任务') {
|
|
|
+ if (!requirementsValuesMap.get(item.state)) requirementsValuesMap.set(item.state, 0);
|
|
|
+ requirementsValuesMap.set(item.state, requirementsValuesMap.get(item.state) + 1);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ requirementsValuesMap.forEach((value, key) => {
|
|
|
+ requirementsValues.push(
|
|
|
+ { value, name: key },
|
|
|
+ );
|
|
|
+ });
|
|
|
+ bugList.forEach((item) => {
|
|
|
+ if (!bugListValuesMap.get(item.state)) bugListValuesMap.set(item.state, 0);
|
|
|
+ bugListValuesMap.set(item.state, bugListValuesMap.get(item.state) + 1);
|
|
|
+ });
|
|
|
+ bugListValuesMap.forEach((value, key) => {
|
|
|
+ bugListValues.push(
|
|
|
+ { value, name: key },
|
|
|
+ );
|
|
|
+ });
|
|
|
+ if (bugListValues.length === 0) {
|
|
|
+ bugListValues.push({
|
|
|
+ name: '无记录', value: 0,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (requirementsValues.length === 0) {
|
|
|
+ requirementsValues.push({
|
|
|
+ name: '无记录', value: 0,
|
|
|
+ });
|
|
|
+ }
|
|
|
const requirementPie = echarts.init(document.getElementById('requirement_pie'));
|
|
|
requirementPie.setOption({
|
|
|
+ title: {
|
|
|
+ text: '任务完成情况',
|
|
|
+ left: 'center',
|
|
|
+ textStyle: {
|
|
|
+ fontSize: 12,
|
|
|
+ },
|
|
|
+ },
|
|
|
tooltip: {
|
|
|
trigger: 'item',
|
|
|
},
|
|
|
@@ -150,22 +194,25 @@ export default {
|
|
|
labelLine: {
|
|
|
show: false,
|
|
|
},
|
|
|
- data: [
|
|
|
- { value: 1048, name: '已完成' },
|
|
|
- { value: 735, name: '进行中' },
|
|
|
- { value: 580, name: '已结束' },
|
|
|
- ],
|
|
|
+ data: requirementsValues,
|
|
|
},
|
|
|
],
|
|
|
});
|
|
|
const bugPie = echarts.init(document.getElementById('bug_pie'));
|
|
|
bugPie.setOption({
|
|
|
+ title: {
|
|
|
+ text: 'Bug处理情况',
|
|
|
+ left: 'center',
|
|
|
+ textStyle: {
|
|
|
+ fontSize: 12,
|
|
|
+ },
|
|
|
+ },
|
|
|
tooltip: {
|
|
|
trigger: 'item',
|
|
|
},
|
|
|
series: [
|
|
|
{
|
|
|
- name: '任务情况',
|
|
|
+ name: 'Bug情况',
|
|
|
type: 'pie',
|
|
|
radius: ['40%', '70%'],
|
|
|
avoidLabelOverlap: false,
|
|
|
@@ -183,11 +230,7 @@ export default {
|
|
|
labelLine: {
|
|
|
show: false,
|
|
|
},
|
|
|
- data: [
|
|
|
- { value: 1048, name: '已完成' },
|
|
|
- { value: 735, name: '进行中' },
|
|
|
- { value: 580, name: '已结束' },
|
|
|
- ],
|
|
|
+ data: bugListValues,
|
|
|
},
|
|
|
],
|
|
|
});
|