-
-
-
问题类型 {}
+ return (
+
+
setDetailVisible(false)}
+ />
+ {
+ false &&
+ sonar代码质量分析工具
+
+

+
欢迎使用代码质量分析工具
+
代码质量分析工具通过静态代码分析帮助开发者识别和修复代码库潜在的缺陷、代码异味、复杂度过高的代码段以及潜在的安全漏洞。同时能够评估代码的结构和风格,提供关于代码覆盖率、重复率等关键指标的深入洞察。
+
+
- {
- listFilter.types && listFilter.types.map(e => (
- selectType(e.val)}>
- { issueType[e.val] }
- { e.count }
-
))
- }
-
-
-
-
- 严重程度
-
- {
- listFilter.impactSeverities && listFilter.impactSeverities.map(e => (
-
selectSeverity(e.val)}>
- { maintainability[e.val] }
- { e.count }
-
))
- }
-
-
-
-
- 标签
-
- {
- listFilter.tags && listFilter.tags.map(e => (
-
selectTags(e.val)}>
- { e.val }
- { e.count }
-
))
- }
-
-
-
- {
- issues && Object.entries(issues).map(([key, item]) =>
-
{ key.split(`:`)[1] }
- {
- item.map(e => (
-
setSelectedIssue(e)}>
-
{ e.message } detail(e)}>问题分析L{ e.line }
-
- { issueType[e.type] }
- { maintainability[e.impacts[0].severity] }
- { e.debt }工作
-
- {
- e.tags && e.tags.map((tag, index) => (
- { tag }{ index < e.tags.length - 1 ? ',' : '' }
- ))
- }
-
-
+
+ }
+ {
+ true &&
+
+
代码分析结果
+
+ {renderTotalItem("Bugs", baseData.bugs, issueTypeIcon.BUG)}
+ {renderTotalItem("漏洞", formatNumber(baseData.vulnerabilities), issueTypeIcon.VULNERABILITY)}
+ {renderTotalItem("异味", formatNumber(baseData.code_smells), issueTypeIcon.CODE_SMELL)}
+ {renderDetailedItem("重复率", baseData.lines, baseData.duplicated_lines_density, "代码", repeat)}
+ {renderDetailedItem("覆盖率", baseData.lines_to_cover, baseData.coverage, "代码", cover)}
+ {renderTotalItem("代码行数", formatNumberWithCommas(baseData.lines), code_lines)}
+
- ))
- }
-
- )
- }
-
+ {issues &&
发现{ baseData.maintainability_issues && JSON.parse(baseData.maintainability_issues).total }个问题
}
+
+
+ { (selectedType.length > 0 || selectedSeverity.length > 0 || selectedTag .length > 0) && }
+ {renderFilterItems(listFilter.types, selectedType, setSelectedType, "问题类型")}
+ {renderFilterItems(listFilter.impactSeverities, selectedSeverity, setSelectedSeverity, "严重程度")}
+ {renderFilterItems(listFilter.tags, selectedTag, setSelectedTag, "标签")}
+
+
+ {issues && Object.entries(issues).map(([key, item]) => (
+
+
+ {key.split(':')[1]}
+
+ {item.map(e => (
+
toDetail(e)}
+ >
+
+ {e.message}
+ detail(e)}>问题分析
+ L{e.line}
+
+
+
{issueType[e.type]}
+
{maintainability[e.impacts[0].severity]}
+ {e.debt}工作
+
+ {e.tags && e.tags.length > 0 &&
}
+ {e.tags && e.tags.map((tag, index) => (
+
+ {tag}{index < e.tags.length - 1 ? ',' : ''}
+
+ ))}
+
+
+
+ ))}
+
+ ))}
+
setPageNum(e)} onShowSizeChange={(current, size) => setPageSize(size)} />
+
+
+
+ }
-
+ );
}
-export default issueList;
\ No newline at end of file
+
+export default IssueList;
diff --git a/src/forge/Server/reposyncer/component/storeList.jsx b/src/forge/Server/reposyncer/component/storeList.jsx
index 0580435ef..86992e01b 100644
--- a/src/forge/Server/reposyncer/component/storeList.jsx
+++ b/src/forge/Server/reposyncer/component/storeList.jsx
@@ -2,7 +2,7 @@ import React, { Fragment, useEffect, useState} from "react";
import { Button, Modal, Icon, message, Select, Input, Form, Radio, Table, Divider, Badge, Spin, Checkbox } from "antd";
import { Link } from "react-router-dom";
import gitlinkLogo from '../../img/gitlink.jpg';
-import logo from '../../img/logo3.png';
+import logo from '../../img/logo3-1.png';
import '../index.scss';
import axios from "axios";
import AddTaskModal from './addTaskModal';
diff --git a/src/forge/Utils/utils.js b/src/forge/Utils/utils.js
index 6aa8c57f7..085bfd5c6 100644
--- a/src/forge/Utils/utils.js
+++ b/src/forge/Utils/utils.js
@@ -9,4 +9,8 @@ export function formatNumber(num) {
} else {
return num.toString(); // 小于 1000 的数字原样返回
}
+}
+export function formatNumberWithCommas(num) {
+ if (num === undefined || num === null) return
+ return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
\ No newline at end of file