From a12939e9d981b33c4423052a2a7eb750334ab9b0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=BB=84=E5=BF=83=E5=AE=87?=
Date: Thu, 20 Jun 2024 09:04:52 +0800
Subject: [PATCH] =?UTF-8?q?sonar=E4=BC=98=E5=8C=96=E3=80=81bug=E4=BF=AE?=
=?UTF-8?q?=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/common/util/ShareUtil.js | 2 +-
src/forge/Server/Index.jsx | 6 +--
src/forge/Server/List.jsx | 16 +++---
.../quality/component/ProblemDetail.jsx | 2 +-
src/forge/Server/quality/detail.scss | 15 ++++++
src/forge/Server/quality/index.jsx | 54 ++++++++++++++-----
6 files changed, 68 insertions(+), 27 deletions(-)
diff --git a/src/common/util/ShareUtil.js b/src/common/util/ShareUtil.js
index 3eb42e75..2778b8d2 100644
--- a/src/common/util/ShareUtil.js
+++ b/src/common/util/ShareUtil.js
@@ -3,7 +3,7 @@ const host = window.location.protocol + '//' + window.location.host
const wx = window.wx
const appId = 'wxf8debe756b4a0309'
-let settings = localStorage.chromesetting&&JSON.parse(localStorage.chromesetting);
+let settings = localStorage.chromesetting && localStorage.chromesetting !== 'undefined' && JSON.parse(localStorage.chromesetting);
let actionUrl = settings && settings.common.zone +'/api';
const service = axios.create({
diff --git a/src/forge/Server/Index.jsx b/src/forge/Server/Index.jsx
index 6712c499..9b47adea 100644
--- a/src/forge/Server/Index.jsx
+++ b/src/forge/Server/Index.jsx
@@ -40,9 +40,9 @@ function ServerIndex(props){
useEffect(()=>{
// 非项目协作者不可进入服务tab (3397)
- // if(projectDetail && projectDetail.permission === ""){
- // props.history.push(`/${owner}/${projectsId}`);
- // }
+ if(projectDetail && projectDetail.permission === ""){
+ props.history.push(`/${owner}/${projectsId}`);
+ }
}, [projectDetail])
return(
diff --git a/src/forge/Server/List.jsx b/src/forge/Server/List.jsx
index 23e6ddf5..9e535d07 100644
--- a/src/forge/Server/List.jsx
+++ b/src/forge/Server/List.jsx
@@ -17,13 +17,13 @@ function Main(props){
}
}, [projectDetail])
- // useEffect(()=>{
- // if(current_user && !current_user.login){
- // props.history.push(`/login?go_page=/${owner}/${projectsId}/service`);
- // }else{
- // setHas_trace_user(current_user.has_trace_user);
- // }
- // },[current_user])
+ useEffect(()=>{
+ if(current_user && !current_user.login){
+ props.history.push(`/login?go_page=/${owner}/${projectsId}/service`);
+ }else{
+ setHas_trace_user(current_user.has_trace_user);
+ }
+ },[current_user])
function onOk(){
setVisible(false);
@@ -66,7 +66,7 @@ function Main(props){
-
})
+
代码质量分析工具
提供自动化的静态代码检查能力,能够识别代码中的缺陷、安全漏洞、代码异味,同时产出代码覆盖率和重复度的详细报告
diff --git a/src/forge/Server/quality/component/ProblemDetail.jsx b/src/forge/Server/quality/component/ProblemDetail.jsx
index ca33e79f..bbca4f73 100644
--- a/src/forge/Server/quality/component/ProblemDetail.jsx
+++ b/src/forge/Server/quality/component/ProblemDetail.jsx
@@ -30,7 +30,7 @@ function ProblemDetail({visible, issue, issueDetail, onClose}){
{ issueDetail.type }
{ issueDetail.severity }
生效时间 { moment(issue.creationDate).format('YYYY年MM月DD日') }
- { issueDetail.lang }
+ { issueDetail.langName }
diff --git a/src/forge/Server/quality/detail.scss b/src/forge/Server/quality/detail.scss
index 84a42469..8a4a10dc 100644
--- a/src/forge/Server/quality/detail.scss
+++ b/src/forge/Server/quality/detail.scss
@@ -245,9 +245,17 @@
}
.issue-list {
display: flex;
+ .show-more-list {
+ max-height: 2300px;
+ }
+ .show-less-list {
+ max-height: 1400px;
+ }
.left-content {
width: 218px;
flex-shrink: 0;
+ transition: max-height 0.4s;
+ overflow: hidden;
.clear-button {
margin: 17px 0 0 19px;
padding: 0 7px;
@@ -300,6 +308,13 @@
width: auto;
min-width: unset;
}
+ .show-more {
+ cursor: pointer;
+ font-size: 14px;
+ color: #5D6790;
+ margin-left: 20px;
+ margin-top: 4px;
+ }
}
}
.right-content {
diff --git a/src/forge/Server/quality/index.jsx b/src/forge/Server/quality/index.jsx
index 26b57520..1b9c69ef 100644
--- a/src/forge/Server/quality/index.jsx
+++ b/src/forge/Server/quality/index.jsx
@@ -37,7 +37,9 @@ function IssueList(props) {
const [pageSize, setPageSize] = useState(10);
const [loading, setLoading] = useState(false);
const [pageLoading, setPageLoading] = useState(true);
- const [analysisStatus, setAnalysisStatus] = useState(status.none);
+ const [analysisStatus, setAnalysisStatus] = useState(null);
+ const [tagShowMore, setTagShowMore] = useState(false);
+ const [tagShowMoreDelay, setTagShowMoreDelay] = useState(false);
const { projectDetail, history } = props;
const metricKeys = 'lines,coverage,lines_to_cover,duplicated_lines_density,maintainability_issues,vulnerabilities,bugs,code_smells';
const facets = 'impactSeverities,tags,types';
@@ -130,6 +132,16 @@ function IssueList(props) {
}
}, [pageNum, pageSize]);
+ useEffect(() => {
+ if (!tagShowMore) {
+ setTimeout(() => {
+ setTagShowMoreDelay(tagShowMore)
+ }, 450);
+ } else {
+ setTagShowMoreDelay(tagShowMore)
+ }
+ }, [tagShowMore])
+
const detail = (e) => {
setSelectedIssue(e);
getProblemDetail(e.rule, owner, projectsId).then(res => {
@@ -139,6 +151,7 @@ function IssueList(props) {
};
const toggleSelection = (state, setter, value) => {
+ window.scrollTo(0,0);
const index = state.indexOf(value);
if (index > -1) {
state.splice(index, 1);
@@ -148,13 +161,22 @@ function IssueList(props) {
}
};
- const renderFilterItems = (items, state, setter, label) => (
-
+ const clearAllSelection = () => {
+ setSelectedType([])
+ setSelectedSeverity([])
+ setSelectedTag([])
+ }
+
+ // 筛选列表
+ const renderFilterItems = (items, state, setter, label, showMoreButton = false) => {
+ const displayedItems = showMoreButton && items && !tagShowMoreDelay ? items.slice(0, 10) : items;
+
+ return (
{label}
{ state.length > 0 && }
- {items && items.map(e => (
+ {displayedItems && displayedItems.map(e => (
{e.count}
))}
+ { showMoreButton && items.length > 10 &&
{ setTagShowMore(!tagShowMore) }}> { tagShowMore ? '收起' : '显示更多'} }
-
- );
+
)
+ };
+ // 总览项
const renderTotalItem = (label, value, icon) => (
{label}
@@ -175,6 +199,7 @@ function IssueList(props) {
);
+ // 总览项(带代码行数)
const renderDetailedItem = (label, value, percent, moreValue, icon) => (
{label}
@@ -212,6 +237,7 @@ function IssueList(props) {
})
}
+ // 开始按钮状态
const getStatusButton = () => {
switch (analysisStatus) {
case actionStatus.none:
@@ -221,11 +247,11 @@ function IssueList(props) {
return
case actionStatus.failure:
return
-
代码正在分析中,请重试
+
分析失败,请重试
default:
- return
+ return <>>
}
}
@@ -260,18 +286,18 @@ function IssueList(props) {
{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)}
+ {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) &&
}
+
+ { (selectedType.length > 0 || selectedSeverity.length > 0 || selectedTag .length > 0) && }
{renderFilterItems(listFilter.types, selectedType, setSelectedType, "问题类型")}
{renderFilterItems(listFilter.impactSeverities, selectedSeverity, setSelectedSeverity, "严重程度")}
- {renderFilterItems(listFilter.tags, selectedTag, setSelectedTag, "标签")}
+ {renderFilterItems(listFilter.tags, selectedTag, setSelectedTag, "标签", true)}
{issues && baseInfo.total > 0 && Object.entries(issues).map(([key, item]) => (