diff --git a/src/forge/Main/CoderDepot.jsx b/src/forge/Main/CoderDepot.jsx index 2b1851e62..9fa5603d0 100644 --- a/src/forge/Main/CoderDepot.jsx +++ b/src/forge/Main/CoderDepot.jsx @@ -1,6 +1,6 @@ import React , { useEffect , useState } from 'react'; import { WhiteBack , Box , LongWidth , ShortWidth , Gap , AlignCenter , FlexAJ } from '../Component/layout'; -import { Dropdown , Menu , Divider , Spin } from 'antd'; +import { Dropdown , Menu , Divider , Spin, Button } from 'antd'; import { getImageUrl } from "educoder"; import { Link } from 'react-router-dom'; import CloneAddress from '../Branch/CloneAddress'; @@ -20,7 +20,9 @@ import DrawerPanel from '../Component/DrawerPanel'; import UpdateDescModal from './sub/UpdateDescModal'; import Nodata from '../Nodata'; - +/** + * projectDetail.type:0是托管项目,1是镜像项目,2是同步镜像项目(为2时不支持在线创建、在线上传、在线修改、在线删除、创建合并请求等功能) + */ function CoderDepot(props){ const [ projectDetail , setProjectDetail ]= useState(undefined); const [ treeValue , setTreeValue ] = useState(undefined); @@ -42,17 +44,18 @@ function CoderDepot(props){ const [ openModal , setOpenModal ] = useState(false); const [ desc , setDesc ] = useState(undefined); const [ website , setWebsite ] = useState(undefined); + const [ lesson_url , setLessonUrl ] = useState(undefined); const owner = props.match.params.owner; const projectsId = props.match.params.projectsId; const branchName = props.match.params.branchName; let pathname = props.history.location.pathname; - useEffect(()=>{ if(props.projectDetail){ setProjectDetail(props.projectDetail); setDesc(props.projectDetail.description); setWebsite(props.projectDetail.website); + setLessonUrl(props.projectDetail.lesson_url); } },[props]) @@ -65,17 +68,17 @@ function CoderDepot(props){ },[treeValue]) useEffect(()=>{ - if (pathname){ + if (pathname && projectDetail){ if(pathname.indexOf(`/projects/${owner}/${projectsId}`) > -1 && pathname.indexOf(`/tree/${branchName}/`) > -1) { let url = pathname.split(`/tree/${branchName}/`)[1]; setTreeValue(url); getFileInfo(url,branchName); }else{ setTreeValue(undefined); - getDirInfo(branchName ||(projectDetail && projectDetail.default_branch)); + getDirInfo(branchName ||projectDetail.default_branch); } } - },[pathname]) + },[pathname,projectDetail]) // 获取主目录列表 function getDirInfo(branch){ @@ -92,7 +95,7 @@ function CoderDepot(props){ setZip_url(result.data.zip_url); let c = result.data.last_commit setLastCommit(c && c.commit); - setLastCommitAuthor(c && (c.author || (c.commit && c.commit.author))); + setLastCommitAuthor(c && c.committer); setMainFlag(true); setReadOnly(true); } @@ -134,7 +137,7 @@ function CoderDepot(props){ } let c = result.data.last_commit setLastCommit(c && c.commit); - setLastCommitAuthor(c && (c.author || (c.commit && c.commit.author))); + setLastCommitAuthor(c && c.committer); setMainFlag(false); setReadOnly(true); } @@ -216,14 +219,16 @@ function CoderDepot(props){ ) - function okUpdate(d,w){ + // 确认修改简介、website、实践课程链接 + function okUpdate(d,w,l){ const url = `/${owner}/${projectsId}.json`; axios.put(url,{ - description:d,website:w + description:d,website:w,lesson_url:l }).then(result=>{ if(result && result.data && result.data.id){ setDesc(result.data.description); setWebsite(result.data.website); + setLessonUrl(result.data.lesson_url); } }) } @@ -233,7 +238,7 @@ function CoderDepot(props){ return( - setOpenModal(false)} onOk={okUpdate}/> + setOpenModal(false)} onOk={okUpdate}/> { (dirInfo || fileInfo) && @@ -248,7 +253,10 @@ function CoderDepot(props){ onClose={()=>setVisible(false)} list = {mainFlag ? dirInfo : undefined} /> -
setVisible(true)}>
+
setVisible(true)}> + + 目录 +
}
@@ -290,11 +298,21 @@ function CoderDepot(props){ - { type === "dir" && 文件} - 下载 + { type === "dir" && projectDetail.type !== 2 && + + + + } + + + + { @@ -303,8 +321,8 @@ function CoderDepot(props){ { lastCommit &&
- -

{lastCommit && lastCommit.message}

+ +
{lastCommit && lastCommit.message}
{ hideBtn && changeHide(hide)}> } {lastCommit && lastCommit.time_from_now} @@ -344,6 +362,7 @@ function CoderDepot(props){ md={mdFlag} onEdit={onEdit} currentBranch={branchName || (projectDetail && projectDetail.default_branch)} + type={projectDetail.type} > } @@ -354,7 +373,7 @@ function CoderDepot(props){ (dirInfo && dirInfo.length === 0) && (fileInfo && fileInfo.length === 0) ? :"" } {/* readme文件显示(显示文件详情时不显示readme文件) */} - { dirInfo && (projectDetail && projectDetail.readme) ? :"" } + { dirInfo && (projectDetail && projectDetail.readme) ? :"" }
{ @@ -365,12 +384,12 @@ function CoderDepot(props){ 简介 {projectDetail.permission && (projectDetail.permission==="Admin" || projectDetail.permission==="Owner") && setOpenModal(true)} className="iconfont icon-anquanshezhi color-grey-9 font-15">} - {desc &&

{desc}

} + {desc &&

{desc}

} { website &&

- {website} + {website}

}

@@ -389,6 +408,14 @@ function CoderDepot(props){

}
+ { + lesson_url && +
+ +

实践课程

+ {lesson_url} +
+ } {/* 发布 */} { projectDetail && projectDetail.release_versions &&