2021-09-16 09:19:25 +08:00
|
|
|
|
import React, { useEffect , useState } from "react";
|
|
|
|
|
|
import { Link } from 'react-router-dom';
|
|
|
|
|
|
import { Spin , Button } from 'antd';
|
|
|
|
|
|
import { getImageUrl } from 'educoder';
|
2021-09-28 08:56:16 +08:00
|
|
|
|
import {truncateCommitId} from '../../common/util';
|
2021-09-16 09:19:25 +08:00
|
|
|
|
import Empty from './Empty';
|
|
|
|
|
|
import './version.scss';
|
|
|
|
|
|
import axios from 'axios';
|
2021-09-28 09:29:33 +08:00
|
|
|
|
import Tree from '../img/tree-black.png';
|
2021-09-16 09:19:25 +08:00
|
|
|
|
import RenderHtml from '../../../components/render-html';
|
2021-09-29 21:04:40 +08:00
|
|
|
|
import User from "../../Component/User";
|
2021-09-16 09:19:25 +08:00
|
|
|
|
|
|
|
|
|
|
function version(props) {
|
2021-09-28 08:56:16 +08:00
|
|
|
|
console.log(props);
|
2021-09-16 09:19:25 +08:00
|
|
|
|
const [ data , setData ] = useState(undefined);
|
|
|
|
|
|
const [ releases , setReleases ] = useState(undefined);
|
|
|
|
|
|
const [ isSpin , setIsSpin ] = useState(true);
|
|
|
|
|
|
const { projectsId ,owner } = props.match.params;
|
2021-09-28 08:56:16 +08:00
|
|
|
|
const { isManager, isDeveloper, location , user } = props;
|
2021-09-16 09:19:25 +08:00
|
|
|
|
const type = props.projectDetail && props.projectDetail.type;
|
2021-09-28 08:56:16 +08:00
|
|
|
|
const turnFromNew = location && location.query && location.query.turnFromNew;
|
|
|
|
|
|
const current_user_login = user && user.login;
|
|
|
|
|
|
owner && console.log(owner);
|
2021-09-16 09:19:25 +08:00
|
|
|
|
useEffect(()=>{
|
|
|
|
|
|
getIssueList();
|
|
|
|
|
|
},[])
|
|
|
|
|
|
// 获取列表数据
|
|
|
|
|
|
function getIssueList(){
|
|
|
|
|
|
const url = `/${owner}/${projectsId}/releases.json`;
|
|
|
|
|
|
axios.get(url).then((result) => {
|
|
|
|
|
|
if (result) {
|
|
|
|
|
|
setData(result.data);
|
2021-09-29 21:04:40 +08:00
|
|
|
|
console.log('data',result.data)
|
2021-09-28 08:56:16 +08:00
|
|
|
|
const { releases = [] } = result.data;
|
|
|
|
|
|
//默认第一个展开(body参数)
|
|
|
|
|
|
releases.length && (releases[0].bodyshow = true);
|
2021-09-16 09:19:25 +08:00
|
|
|
|
setReleases(result.data.releases);
|
|
|
|
|
|
setIsSpin(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
}).catch((error) => {
|
|
|
|
|
|
console.log(error);
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
// 显示版本描述
|
|
|
|
|
|
function showBody(key,flag){
|
|
|
|
|
|
var lists = releases.concat();
|
|
|
|
|
|
lists[key].bodyshow = !flag ? true : false;
|
|
|
|
|
|
lists.splice();
|
|
|
|
|
|
setReleases(lists);
|
|
|
|
|
|
}
|
2021-09-28 08:56:16 +08:00
|
|
|
|
//删除
|
|
|
|
|
|
function deleteRelease(releaseId) {
|
|
|
|
|
|
if(releaseId){
|
|
|
|
|
|
axios.delete(`/${owner}/${projectsId}/releases/${releaseId}.json`).then((result)=>{
|
|
|
|
|
|
if(result){
|
|
|
|
|
|
getIssueList();
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
function release(item,key){
|
|
|
|
|
|
return (
|
|
|
|
|
|
<div className="versionInfo" key={key}>
|
|
|
|
|
|
<span className="versionInfo_left">
|
|
|
|
|
|
<span className={`${item.draft === "稳定" ?"versionTag green":"versionTag orange"}`}>{item.draft}</span>
|
|
|
|
|
|
<span className="color-grey-3 mt15 font-12">
|
|
|
|
|
|
<i className="iconfont icon-biaoqianicon mr3 font-14"></i>
|
2021-09-29 21:04:40 +08:00
|
|
|
|
<Link className="hover" to={`/${owner}/${projectsId}/tree/${item.name}`} >{item.tag_name}</Link>
|
2021-09-28 08:56:16 +08:00
|
|
|
|
</span>
|
|
|
|
|
|
<span className="color-grey-3 font-12">
|
|
|
|
|
|
<img src={Tree} width="16px" color="#333333" className="mr3"/>
|
2021-09-29 21:04:40 +08:00
|
|
|
|
<Link className="hover" to={`/${owner}/${projectsId}/commits/${truncateCommitId(`${item.sha}`)}/${item.branch}`}>{truncateCommitId(item.sha)}</Link>
|
2021-09-28 08:56:16 +08:00
|
|
|
|
</span>
|
|
|
|
|
|
</span>
|
|
|
|
|
|
<div className="versionInfo_right">
|
|
|
|
|
|
<div className="versionName">
|
2021-09-29 21:04:40 +08:00
|
|
|
|
<Link to={`/${owner}/${projectsId}/tree/${item.tag_name}`} className="task-hide color-blue hover font-18">发布{item.name}</Link>
|
2021-09-28 08:56:16 +08:00
|
|
|
|
<span>
|
2021-09-29 21:04:40 +08:00
|
|
|
|
{data && data.user_admin_permission && <Link to={{pathname:`/${owner}/${projectsId}/releases/${item.version_id}/update`,state:{"stable":item.draft==="稳定"}}} className="ml15"><i className="iconfont icon-a-bianji1 font-16 color-grey-6"></i></Link>}
|
|
|
|
|
|
{data && data.user_admin_permission && <i className ="iconfont icon-shanchuicon1 font-16 ml15" onClick={()=>{deleteRelease(item.version_id)}}></i>}
|
2021-09-28 08:56:16 +08:00
|
|
|
|
</span>
|
|
|
|
|
|
</div>
|
2021-09-29 21:04:40 +08:00
|
|
|
|
<span className="color-grey-3 mb15 version-user">
|
2021-09-28 08:56:16 +08:00
|
|
|
|
<i className={`${item.bodyshow ? "iconfont icon-sanjiaoxing-down color-grey-8 mr3 font-14":"iconfont icon-triangle color-grey-8 mr3 font-14"}`} onClick={()=>showBody(key,item.bodyshow)}></i>
|
2021-09-29 21:04:40 +08:00
|
|
|
|
<User
|
|
|
|
|
|
id={item.id}
|
|
|
|
|
|
url={(item.image_url && getImageUrl(`/${item.image_url}`)) || "https://dss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=3025493530,1989042357&fm=26&gp=0.jpg"}
|
|
|
|
|
|
name={item.user_name}
|
|
|
|
|
|
login={item.user_name}
|
|
|
|
|
|
/>
|
2021-09-28 08:56:16 +08:00
|
|
|
|
<span className="ml5">发布于{item.created_at}</span>
|
|
|
|
|
|
</span>
|
|
|
|
|
|
{
|
|
|
|
|
|
item.bodyshow &&
|
|
|
|
|
|
<div className="body-show">
|
|
|
|
|
|
<RenderHtml className="break_word_comments imageLayerParent" value={item.body} url={props.history.location}/>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
}
|
|
|
|
|
|
<RenderHtml />
|
|
|
|
|
|
<p className="versionFile">
|
2021-09-29 21:04:40 +08:00
|
|
|
|
{/* 发行版附件下载 */}
|
2021-09-28 15:50:20 +08:00
|
|
|
|
{item.attachments && item.attachments.map((item)=>{
|
2021-09-29 21:04:40 +08:00
|
|
|
|
return(<Link to={`${item.url}`}><i className="iconfont icon-wenjian7 font-14 mr10 color-grey-3"></i>下载 {item.title}</Link>)
|
2021-09-28 15:50:20 +08:00
|
|
|
|
})}
|
2021-09-29 21:04:40 +08:00
|
|
|
|
{/* 发行版下载包 */}
|
|
|
|
|
|
<a href={item.tarball_url}><i className="iconfont icon-wenjian7 font-14 mr10 color-grey-3"></i>下载 {item.tag_name}.TAR.gz</a>
|
|
|
|
|
|
<a href={item.zipball_url}><i className="iconfont icon-wenjian7 font-14 mr10 color-grey-3"></i>下载 {item.tag_name}.ZIP</a>
|
|
|
|
|
|
</p>
|
2021-09-28 08:56:16 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
)
|
|
|
|
|
|
}
|
2021-09-16 09:19:25 +08:00
|
|
|
|
function renderList(releases){
|
|
|
|
|
|
if (releases && releases.length > 0) {
|
|
|
|
|
|
return (
|
|
|
|
|
|
<React.Fragment>
|
|
|
|
|
|
{
|
2021-09-29 21:04:40 +08:00
|
|
|
|
data && data.user_admin_permission &&
|
2021-09-16 09:19:25 +08:00
|
|
|
|
<div className="addReleaseBtn">
|
|
|
|
|
|
<Button type={"primary"} onClick={addFunc} className="btnblue" style={{height:"36px"}}>发布新版本</Button>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
}
|
|
|
|
|
|
<div>
|
2021-09-28 08:56:16 +08:00
|
|
|
|
{!turnFromNew ? releases.map((item, key) => release(item,key)) : release(releases[0],0)}
|
2021-09-16 09:19:25 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</React.Fragment>
|
|
|
|
|
|
)
|
|
|
|
|
|
} else if (releases && releases.length === 0) {
|
|
|
|
|
|
return (
|
|
|
|
|
|
<Empty
|
2021-09-29 21:04:40 +08:00
|
|
|
|
operation={data && data.user_admin_permission}
|
2021-09-16 09:19:25 +08:00
|
|
|
|
addFunc={addFunc}
|
|
|
|
|
|
/>
|
|
|
|
|
|
)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function addFunc(){
|
2021-09-29 21:04:40 +08:00
|
|
|
|
props.history.push({pathname:`/${owner}/${projectsId}/releases/new`,state:{stable:true}});
|
2021-09-16 09:19:25 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
|
<div className="releaseIndex">
|
|
|
|
|
|
<div className="releasesVersion">
|
|
|
|
|
|
<Spin spinning={isSpin}>
|
|
|
|
|
|
{renderList(releases)}
|
|
|
|
|
|
</Spin>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
)
|
|
|
|
|
|
}
|
|
|
|
|
|
export default version;
|