|
|
@@ -20,7 +20,7 @@
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
|
|
|
- <el-row>
|
|
|
+ <el-row :gutter="20">
|
|
|
<el-col :span="12">
|
|
|
<el-card class="box-card">
|
|
|
<div slot="header" class="clearfix">
|
|
|
@@ -48,7 +48,7 @@
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
|
|
|
- <el-row>
|
|
|
+ <el-row :gutter="20">
|
|
|
<el-col :span="12">
|
|
|
<el-card class="box-card">
|
|
|
<div slot="header" class="clearfix">
|
|
|
@@ -70,6 +70,8 @@
|
|
|
<el-card class="box-card">
|
|
|
<div slot="header" class="clearfix">
|
|
|
<span>潜在危险得分</span>
|
|
|
+ <el-button style="float: right; padding: 3px 0"
|
|
|
+ type="text" @click="checkDetailedReport">详细信息</el-button>
|
|
|
</div>
|
|
|
<div class="text item">
|
|
|
{{'疑似缺陷数: ' + scores.malformedCode }}
|
|
|
@@ -81,11 +83,13 @@
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
|
|
|
- <el-row>
|
|
|
+ <el-row :gutter="20">
|
|
|
<el-col :span="12">
|
|
|
<el-card class="box-card">
|
|
|
<div slot="header" class="clearfix">
|
|
|
<span>编码规范性得分</span>
|
|
|
+ <el-button style="float: right; padding: 3px 0"
|
|
|
+ type="text" @click="checkDetailedReport">详细信息</el-button>
|
|
|
</div>
|
|
|
<div class="text item">
|
|
|
{{'编程风格问题数: ' + scores.codeStyleIssuesCount }}
|
|
|
@@ -126,6 +130,46 @@
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-card class="box-card">
|
|
|
+ <div slot="header" class="clearfix">
|
|
|
+ <span>可维护性得分</span>
|
|
|
+ <el-button style="float: right; padding: 3px 0"
|
|
|
+ type="text" @click="checkDetailedReport">详细信息</el-button>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ {{ '重复代码数: ' + scores.duplicateCount }}
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ {{ '文档问题数: ' + scores.documentationCount }}
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ {{ '设计问题数: ' + scores.designCount }}
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ {{ '圈复杂度超标数: ' + scores.complexityCount }}
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <el-collapse v-model="activeMaintainableName">
|
|
|
+ <el-collapse-item title="文档问题" name="1">
|
|
|
+ <el-table :data="scores.documentTableData" style="width: 100%">
|
|
|
+ <el-table-column prop="name" label="问题名称" width="180"></el-table-column>
|
|
|
+ <el-table-column prop="occurrence" label="出现次数" width="180"></el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-collapse-item>
|
|
|
+ <el-collapse-item title="设计问题" name="2">
|
|
|
+ <el-table :data="scores.designTableData" style="width: 100%">
|
|
|
+ <el-table-column prop="name" label="问题名称" width="180"></el-table-column>
|
|
|
+ <el-table-column prop="occurrence" label="出现次数" width="180"></el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-collapse-item>
|
|
|
+ </el-collapse>
|
|
|
+ </div>
|
|
|
+ </el-card>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
</el-main>
|
|
|
</el-container>
|
|
|
</template>
|
|
|
@@ -148,6 +192,7 @@
|
|
|
},
|
|
|
|
|
|
activeNormativeName: 1,
|
|
|
+ activeMaintainableName: 1,
|
|
|
|
|
|
scores: {
|
|
|
scale: 0,
|
|
|
@@ -172,7 +217,16 @@
|
|
|
codeStyleIssuesCount: 0,
|
|
|
bestPracticesIssuesCount: 0,
|
|
|
|
|
|
- normDistMainSeqMean: 0
|
|
|
+ normDistMainSeqMean: 0,
|
|
|
+
|
|
|
+ duplicateCount: 0,
|
|
|
+ complexityCount: 0,
|
|
|
+ documentationCount: 0,
|
|
|
+ designCount: 0,
|
|
|
+ documentTableData: [],
|
|
|
+ documentationOccurrences: {},
|
|
|
+ designTableData:[],
|
|
|
+ designOccurrences: {}
|
|
|
}
|
|
|
},
|
|
|
|
|
|
@@ -182,9 +236,10 @@
|
|
|
if (response.body){
|
|
|
this.scores = response.body;
|
|
|
|
|
|
+ // code style
|
|
|
this.scores.codeStyleTableData = [];
|
|
|
this.scores.codeStyleIssuesCount = 0;
|
|
|
- for (let issue of new Map(Object.entries(this.scores.codeStyleIssues))) {
|
|
|
+ for (let issue of Object.entries(this.scores.codeStyleIssues)) {
|
|
|
this.scores.codeStyleTableData.push({
|
|
|
name: issue[0],
|
|
|
occurrence: issue[1]
|
|
|
@@ -192,6 +247,7 @@
|
|
|
this.scores.codeStyleIssuesCount += issue[1]
|
|
|
}
|
|
|
|
|
|
+ // best practice
|
|
|
this.scores.bestPracticesTableData = [];
|
|
|
this.scores.bestPracticesIssuesCount = 0;
|
|
|
for (let issue of Object.entries(this.scores.bestPracticesIssues)) {
|
|
|
@@ -201,6 +257,28 @@
|
|
|
});
|
|
|
this.scores.bestPracticesIssuesCount += issue[1];
|
|
|
}
|
|
|
+
|
|
|
+ // document
|
|
|
+ this.scores.documentTableData = [];
|
|
|
+ this.scores.documentationCount = 0;
|
|
|
+ for (let issue of Object.entries(this.scores.documentationOccurrences)) {
|
|
|
+ this.scores.documentTableData.push({
|
|
|
+ name: issue[0],
|
|
|
+ occurrence: issue[1]
|
|
|
+ });
|
|
|
+ this.scores.documentationCount += issue[1];
|
|
|
+ }
|
|
|
+
|
|
|
+ // design
|
|
|
+ this.scores.designTableData = [];
|
|
|
+ this.scores.designCount = 0;
|
|
|
+ for (let issue of Object.entries(this.scores.designOccurrences)) {
|
|
|
+ this.scores.designTableData.push({
|
|
|
+ name: issue[0],
|
|
|
+ occurrence: issue[1]
|
|
|
+ });
|
|
|
+ this.scores.designCount += issue[1];
|
|
|
+ }
|
|
|
} else {
|
|
|
this.$message.warning('该项目ID不存在!')
|
|
|
}
|
|
|
@@ -216,6 +294,10 @@
|
|
|
} else {
|
|
|
return num.toFixed(2)
|
|
|
}
|
|
|
+ },
|
|
|
+
|
|
|
+ checkDetailedReport() {
|
|
|
+ window.open('/metric/detailed_report?project=' + this.formInline.project, '_blank')
|
|
|
}
|
|
|
}
|
|
|
})
|