diff --git a/src/forge/Main/CoderDepot.jsx b/src/forge/Main/CoderDepot.jsx index 61cc23106..92eb194b9 100644 --- a/src/forge/Main/CoderDepot.jsx +++ b/src/forge/Main/CoderDepot.jsx @@ -12,7 +12,6 @@ import axios from 'axios'; import Path from './CoderDepotPath'; import Catalogue from './CoderDepotCatalogue'; import ReadMe from './CoderDepotReadme'; -// import CoderRootFileDetail from './CoderRootFileDetail'; import './Index.scss'; import Releases from '../Component/Releases'; import Contributors from '../Component/Contributors'; @@ -21,12 +20,12 @@ import DrawerPanel from '../Component/DrawerPanel'; import UpdateDescModal from './sub/UpdateDescModal'; import Nodata from '../Nodata'; import Invite from './sub/Invite'; -import RenderHtml from '../../components/render-html'; import Loadable from 'react-loadable'; import Loading from '../../Loading'; import ProjectPortrait from '../Component/projectPortrait'; import imNoneImg from './img/importNone.png'; import LicenseModal from '../Component/licenseModal/index'; +import CheckModal from './Modal/checkModal'; import moment from 'moment'; const ProjectCompass = Loadable({ @@ -78,9 +77,11 @@ function CoderDepot(props){ const [ issuesFlag , setIssuesFlag ] = useState(true); const [ releaseVersions , setReleaseVersions] = useState(undefined); const [ licenseVisible ,setLicenseVisible] = useState(false); + const [ checkVisible ,setCheckVisible] = useState(false); const owner = props.match.params.owner; const projectsId = props.match.params.projectsId; + let branchName = props.match.params.branchName; branchName = returnbar(branchName); let pathname = props.history.location.pathname; @@ -438,6 +439,7 @@ function CoderDepot(props){ const fileOperate = type === "dir" && projectDetail && projectDetail.type !==2 && ((projectDetail.permission && projectDetail.permission !=="Reporter") || (current_user && current_user.admin)); return(
+ setCheckVisible(false)}/> {mirror_status ===0 && setOpenModal(false)} onOk={okUpdate}/> } {setLicenseVisible(false)}} createDefaultLicense={createDefaultLicense}/> @@ -548,10 +550,14 @@ function CoderDepot(props){
- { - baseOperate && - + 合并请求 - } + { + projectDetail && projectDetail.permission && projectDetail.permission !=="Reporter" && + {setCheckVisible(true)}}>代码克隆检测 + } + { + baseOperate && + + 合并请求 + } { issuesFlag && + 疑修 diff --git a/src/forge/Main/Modal/checkModal.jsx b/src/forge/Main/Modal/checkModal.jsx new file mode 100644 index 000000000..40803b48d --- /dev/null +++ b/src/forge/Main/Modal/checkModal.jsx @@ -0,0 +1,89 @@ +import React , { useState , forwardRef } from 'react'; +import { Button, message, Modal , Form , Input , Select} from 'antd'; +import CloneLogo from '../img/cloneLogo.png'; +import '../Index.scss'; +import './index.scss'; +import axios from 'axios'; +const { Option } = Select; + +function CheckModal(props){ + const { getFieldDecorator, validateFields , setFieldsValue } = props && props.form; + const { visible , onCancel , owner, projectsId } = props; + const [ loading , setLoading ] = useState(false); + + const [ language , setLanguage ] = useState(["C","Java","Python","C#","C++","PHP","Ruby","Swift","JavaScript","TypeScript","Lisp","Pascal"]) + + function beginFunc(){ + validateFields((error,values)=>{ + if(!error){ + setLoading(true); + const url = `/api/${owner}/${projectsId}/clone_detection.json`; + axios.post(url,{...values}).then(res=>{ + if(res && res.data && res.data.status === 0){ + message.success("检测成功!"); + setLoading(false); + setTimeout(()=>{ + window.location.href = res.data.view_url; + },500) + }else{ + setLoading(false); + } + }) + } + }) + } + return( + +
+
+
+

代码克隆检测

+

提供可扩展的代码克隆检测能力,支持大规模代码库的多语言比对与结果可视化

+
+ +
+
+ + {getFieldDecorator("target_url",{ + rules:[ + {required:true,message:"请输入需对比检测的本平台仓库地址"} + ] + })( + + )} + + + {getFieldDecorator("language",{ + rules:[ + {required:true,message:"请选择仓库语言"} + ] + })( + + )} + +
+
+ +
+
+
+ ) +} +export default Form.create()(forwardRef(CheckModal)); \ No newline at end of file diff --git a/src/forge/Main/Modal/index.scss b/src/forge/Main/Modal/index.scss new file mode 100644 index 000000000..ffae2782d --- /dev/null +++ b/src/forge/Main/Modal/index.scss @@ -0,0 +1,22 @@ +.cloneCheck{ + .ant-modal-content{ + border-radius: 14px; + .ant-modal-body{ + background-image: url("../img/cloneback.png"); + background-size: 100% 100%; + background-repeat: no-repeat; + padding-top: 0px; + border-radius: 14px; + } + .ant-modal-close-x{ + font-size: 26px; + } + .ant-form-item-label{ + height: 20px; + line-height: 20px; + } + .ant-form-explain{ + position: absolute; + } + } +} \ No newline at end of file diff --git a/src/forge/Main/img/cloneLogo.png b/src/forge/Main/img/cloneLogo.png new file mode 100644 index 000000000..41965317f Binary files /dev/null and b/src/forge/Main/img/cloneLogo.png differ diff --git a/src/forge/Main/img/cloneback.png b/src/forge/Main/img/cloneback.png new file mode 100644 index 000000000..4017fbbd3 Binary files /dev/null and b/src/forge/Main/img/cloneback.png differ