diff --git a/package.json b/package.json index 70aa4b155..04b3ddf92 100644 --- a/package.json +++ b/package.json @@ -124,6 +124,7 @@ "react-router-dom": "^4.2.2", "react-slick": "^0.28.1", "react-split-pane": "^0.1.91", + "react-svg": "^16.3.0", "react-url-query": "^1.5.0", "react-zmage": "^0.8.5-beta.31", "redux": "^4.0.5", diff --git a/src/AppConfig.js b/src/AppConfig.js index ace66200a..2a225d262 100644 --- a/src/AppConfig.js +++ b/src/AppConfig.js @@ -39,7 +39,7 @@ export function initAxiosInterceptors(props) { return config } requestProxy(config); - let url = `/api${config.url}`; + let url = config.url.startsWith('/api') ? config.url : `/api${config.url}`; // if (`${config[0]}` !== `true`) { // if (window.location.port === "3007") { diff --git a/src/forge/Main/CoderDepot.jsx b/src/forge/Main/CoderDepot.jsx index a7e6ac239..61cc23106 100644 --- a/src/forge/Main/CoderDepot.jsx +++ b/src/forge/Main/CoderDepot.jsx @@ -242,7 +242,11 @@ function CoderDepot(props){ let ele = document.getElementById("ptxt"); if(ele){ let h = ele.offsetHeight; - if( h <= 36 ) setHideBtn(false); + if( h <= 36 ) { + setHideBtn(false); + } else { + setHideBtn(true) + } } } },[projectDetail,lastCommit]) @@ -589,7 +593,7 @@ function CoderDepot(props){ { lastCommit.message &&
+
{lastCommit.message}
+
代码质量分析工具
提供自动化的静态代码检查能力,能够识别代码中的缺陷、安全漏洞、代码异味,同时产出代码覆盖率和重复度的详细报告
diff --git a/src/forge/Server/api.js b/src/forge/Server/api.js index acf0679af..2c894ea76 100644 --- a/src/forge/Server/api.js +++ b/src/forge/Server/api.js @@ -67,3 +67,19 @@ export function getActionList(owner, repo ) { }); } +// 获取classes、files地址 +export function getAnalizeUrl(owner, repo ) { + return fetch({ + url: `/api/v1/${owner}/${repo}/sonarqubes/doxygen_url`, + method: 'get', + }); +} + +// 获取方法调用分析 +export function getFuncAnalize(owner, repo ) { + return fetch({ + url: `/api/v1/${owner}/${repo}/sonarqubes/analyze_doxygen`, + method: 'get', + }); +} + diff --git a/src/forge/Server/constants/quality.js b/src/forge/Server/constants/quality.js index c44461377..fa150cc13 100644 --- a/src/forge/Server/constants/quality.js +++ b/src/forge/Server/constants/quality.js @@ -1,9 +1,16 @@ -import bugs from '../img/quality/bugs.png' -import vulnerabilities from '../img/quality/vulnerabilities.png' -import code_smells from '../img/quality/code_smells.png' -import low from '../img/quality/low.png' -import medium from '../img/quality/medium.png' -import high from '../img/quality/high.png' +import bugs from '../img/quality/bugs.svg' +import vulnerabilities from '../img/quality/vulnerabilities.svg' +import code_smells from '../img/quality/code_smells.svg' +import blocked from '../img/quality/blocked.svg' +import low from '../img/quality/low.svg' +import medium from '../img/quality/medium.svg' +import high from '../img/quality/high.svg' +import label1 from '../img/quality/label1.svg' +import label2 from '../img/quality/label2.svg' +import label3 from '../img/quality/label3.svg' +import label4 from '../img/quality/label4.svg' +import label5 from '../img/quality/label5.svg' + export const issueType = { BUG: 'BUG', @@ -17,9 +24,10 @@ export const issueTypeKeys = { CODE_SMELL: 'code_smells' } export const maintainability = { - LOW: '低', - MEDIUM: '中', - HIGH: '高' + LOW: '次要', + MEDIUM: '主要', + HIGH: '严重', + BLOCKED: '阻塞' } export const issueTypeIcon = { @@ -31,5 +39,14 @@ export const issueTypeIcon = { export const maintainabilityIcon = { LOW: low, MEDIUM: medium, - HIGH: high + HIGH: high, + BLOCKED: blocked +} + +export const labelIcon = { + 0: label1, + 1: label2, + 2: label3, + 3: label4, + 4: label5 } diff --git a/src/forge/Server/img/logoq.png b/src/forge/Server/img/logoq.png new file mode 100644 index 000000000..a2415461f Binary files /dev/null and b/src/forge/Server/img/logoq.png differ diff --git a/src/forge/Server/img/quality/blocked.svg b/src/forge/Server/img/quality/blocked.svg new file mode 100644 index 000000000..2b5760fd5 --- /dev/null +++ b/src/forge/Server/img/quality/blocked.svg @@ -0,0 +1,6 @@ + diff --git a/src/forge/Server/img/quality/bugs.svg b/src/forge/Server/img/quality/bugs.svg new file mode 100644 index 000000000..4d532fda8 --- /dev/null +++ b/src/forge/Server/img/quality/bugs.svg @@ -0,0 +1,6 @@ + diff --git a/src/forge/Server/img/quality/class.svg b/src/forge/Server/img/quality/class.svg new file mode 100644 index 000000000..def459276 --- /dev/null +++ b/src/forge/Server/img/quality/class.svg @@ -0,0 +1,10 @@ + diff --git a/src/forge/Server/img/quality/code_lines.svg b/src/forge/Server/img/quality/code_lines.svg new file mode 100644 index 000000000..4fdcd1cbb --- /dev/null +++ b/src/forge/Server/img/quality/code_lines.svg @@ -0,0 +1,6 @@ + diff --git a/src/forge/Server/img/quality/code_smells.svg b/src/forge/Server/img/quality/code_smells.svg new file mode 100644 index 000000000..39a9e20ca --- /dev/null +++ b/src/forge/Server/img/quality/code_smells.svg @@ -0,0 +1,6 @@ + diff --git a/src/forge/Server/img/quality/cover.svg b/src/forge/Server/img/quality/cover.svg new file mode 100644 index 000000000..c0739f10c --- /dev/null +++ b/src/forge/Server/img/quality/cover.svg @@ -0,0 +1,6 @@ + diff --git a/src/forge/Server/img/quality/detail-bg.png b/src/forge/Server/img/quality/detail-bg.png new file mode 100644 index 000000000..35507dd77 Binary files /dev/null and b/src/forge/Server/img/quality/detail-bg.png differ diff --git a/src/forge/Server/img/quality/files.svg b/src/forge/Server/img/quality/files.svg new file mode 100644 index 000000000..7613eb9f4 --- /dev/null +++ b/src/forge/Server/img/quality/files.svg @@ -0,0 +1,9 @@ + diff --git a/src/forge/Server/img/quality/funcs.svg b/src/forge/Server/img/quality/funcs.svg new file mode 100644 index 000000000..29683e4c5 --- /dev/null +++ b/src/forge/Server/img/quality/funcs.svg @@ -0,0 +1,6 @@ + diff --git a/src/forge/Server/img/quality/high.svg b/src/forge/Server/img/quality/high.svg new file mode 100644 index 000000000..f3927f3f5 --- /dev/null +++ b/src/forge/Server/img/quality/high.svg @@ -0,0 +1,9 @@ + diff --git a/src/forge/Server/img/quality/issue-bg.png b/src/forge/Server/img/quality/issue-bg.png new file mode 100644 index 000000000..c9e558c4c Binary files /dev/null and b/src/forge/Server/img/quality/issue-bg.png differ diff --git a/src/forge/Server/img/quality/label1.svg b/src/forge/Server/img/quality/label1.svg new file mode 100644 index 000000000..d3014c9dd --- /dev/null +++ b/src/forge/Server/img/quality/label1.svg @@ -0,0 +1,6 @@ + diff --git a/src/forge/Server/img/quality/label2.svg b/src/forge/Server/img/quality/label2.svg new file mode 100644 index 000000000..3dea807f3 --- /dev/null +++ b/src/forge/Server/img/quality/label2.svg @@ -0,0 +1,6 @@ + diff --git a/src/forge/Server/img/quality/label3.svg b/src/forge/Server/img/quality/label3.svg new file mode 100644 index 000000000..a13b12a4e --- /dev/null +++ b/src/forge/Server/img/quality/label3.svg @@ -0,0 +1,6 @@ + diff --git a/src/forge/Server/img/quality/label4.svg b/src/forge/Server/img/quality/label4.svg new file mode 100644 index 000000000..260475e05 --- /dev/null +++ b/src/forge/Server/img/quality/label4.svg @@ -0,0 +1,11 @@ + diff --git a/src/forge/Server/img/quality/label5.svg b/src/forge/Server/img/quality/label5.svg new file mode 100644 index 000000000..2db9288df --- /dev/null +++ b/src/forge/Server/img/quality/label5.svg @@ -0,0 +1,9 @@ + diff --git a/src/forge/Server/img/quality/low.svg b/src/forge/Server/img/quality/low.svg new file mode 100644 index 000000000..862844d56 --- /dev/null +++ b/src/forge/Server/img/quality/low.svg @@ -0,0 +1,6 @@ + diff --git a/src/forge/Server/img/quality/medium.svg b/src/forge/Server/img/quality/medium.svg new file mode 100644 index 000000000..664b8c77d --- /dev/null +++ b/src/forge/Server/img/quality/medium.svg @@ -0,0 +1,6 @@ + diff --git a/src/forge/Server/img/quality/page-bg.png b/src/forge/Server/img/quality/page-bg.png new file mode 100644 index 000000000..6c72fb864 Binary files /dev/null and b/src/forge/Server/img/quality/page-bg.png differ diff --git a/src/forge/Server/img/quality/repeat.svg b/src/forge/Server/img/quality/repeat.svg new file mode 100644 index 000000000..1d9bf2232 --- /dev/null +++ b/src/forge/Server/img/quality/repeat.svg @@ -0,0 +1,6 @@ + diff --git a/src/forge/Server/img/quality/right-arrow.svg b/src/forge/Server/img/quality/right-arrow.svg new file mode 100644 index 000000000..9aab70a31 --- /dev/null +++ b/src/forge/Server/img/quality/right-arrow.svg @@ -0,0 +1,6 @@ + diff --git a/src/forge/Server/img/quality/right-list-bg.png b/src/forge/Server/img/quality/right-list-bg.png new file mode 100644 index 000000000..1c93e3a20 Binary files /dev/null and b/src/forge/Server/img/quality/right-list-bg.png differ diff --git a/src/forge/Server/img/quality/total-bg.png b/src/forge/Server/img/quality/total-bg.png new file mode 100644 index 000000000..53c041be5 Binary files /dev/null and b/src/forge/Server/img/quality/total-bg.png differ diff --git a/src/forge/Server/img/quality/triangular-arrow.png b/src/forge/Server/img/quality/triangular-arrow.png new file mode 100644 index 000000000..12d4a1c7b Binary files /dev/null and b/src/forge/Server/img/quality/triangular-arrow.png differ diff --git a/src/forge/Server/img/quality/vulnerabilities.svg b/src/forge/Server/img/quality/vulnerabilities.svg new file mode 100644 index 000000000..713a47a68 --- /dev/null +++ b/src/forge/Server/img/quality/vulnerabilities.svg @@ -0,0 +1,6 @@ + diff --git a/src/forge/Server/index.scss b/src/forge/Server/index.scss index 4b8b2018b..ac7e607e1 100644 --- a/src/forge/Server/index.scss +++ b/src/forge/Server/index.scss @@ -2,6 +2,15 @@ width: 1200px; margin:20px auto; } +.panels-quality { + background:#f3f5f9; + background-image: url("./img/quality/page-bg.png"); + background-repeat: no-repeat; + background-size: 100%; + box-sizing: content-box; + width: 100%; + margin: 0; +} .btnhover{ background-color: #466aff; color: #fff!important; diff --git a/src/forge/Server/quality/component/CallTable.jsx b/src/forge/Server/quality/component/CallTable.jsx new file mode 100644 index 000000000..183ab12bb --- /dev/null +++ b/src/forge/Server/quality/component/CallTable.jsx @@ -0,0 +1,65 @@ +import React, { useEffect, useState } from 'react'; +import { Table, Spin } from 'antd'; +import './index.scss' +import { getFuncAnalize } from '../../api'; + +function CallTable(props){ + const [ loading, setLoading ] = useState(false); + const [ listData, setListData ] = useState([]) + const { owner , projectsId } = props.match.params; + + + useEffect(() => { + getlist() + },[]) + + const getlist = () => { + setLoading(true) + getFuncAnalize(owner, projectsId).then(res => { + if (res.status === 0) { + setListData(res.data) + } + setLoading(false) + }) + } + + const openCode = (text) => { + window.open(`${props.match.url}/tree/${ props.projectDetail.default_branch }/${text.split(':')[0]}`) + } + + const columns = [ + { + title: "方法名", + dataIndex: "function", + }, + { + title: "方法位置", + dataIndex: "definition", + render: (text, item) => ( + text !== 'unknown' ? openCode(text)} className="color-blue pointer"> + {text} + : text + ), + }, + { + title: "调用方法数", + dataIndex: "call_count", + }, + { + title: "被调用次数", + dataIndex: "called_count", + }, + ]; + + return{ e.message }
-{ issueType[e.type] }{ e.flows.length > 0 && +{e.flows.length} }
selectRepeat(e, item.line)}/>
- {issues[selectedIssue.component] && issues[selectedIssue.component].map(e => {
- if (e.line === item.line) {
- return setSelectedIssue(e)}>
- {e.message}
- detail()}>问题分析
- ;
- }
- })}
- 代码分析结果,全方位精准定位问题
+深度剖析代码细节,精准定位潜在问题,助力团队提升开发效率,打造高质量软件,为项目稳定运行保驾护航,开启高效开发新时代。
+{ e.message }
+{ issueType[e.type] }{ e.flows.length > 0 && +{e.flows.length} }
selectRepeat(e, item.line)}/>
+ {issues[selectedIssue.component] && issues[selectedIssue.component].map(e => {
+ if (e.line === item.line) {
+ return setSelectedIssue(e)}>
+ {e.message}
+ detail()}>问题分析
+ ;
+ }
+ })}
+ 分析失败,请重试
@@ -264,95 +385,139 @@ function IssueList(props) { } return ( -欢迎使用代码质量分析工具
-代码分析结果
-- {e.message} - { ele.stopPropagation();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 ? ',' : ''}
-
- ))}
-
-
暂无问题
-欢迎使用代码质量分析工具
+软件质量统计结果,全方位精准定位问题
+深度剖析代码细节,精准定位潜在问题,助力团队提升开发效率,打造高质量软件,为项目稳定运行保驾护航,开启高效开发新时代。
++ {e.message} + { ele.stopPropagation();detail(e)}}>问题分析 + L{e.line} +
+
+ {issueType[e.type]}
+
{maintainability[e.impacts[0].severity]}
+ {e.debt}工作
+
+ {e.tags && e.tags.length > 0 &&
暂无问题
+