Merge branch 'forge' of https://bdgit.educoder.net/Hjqreturn/educoder into forge
commit
966af92b18
@ -0,0 +1,204 @@
|
||||
import React , {Component} from 'react';
|
||||
import {Link} from 'react-router-dom';
|
||||
|
||||
import axios from 'axios';
|
||||
import Nav from '../Order/Nav';
|
||||
import UploadComponent from '../Upload/Index';
|
||||
|
||||
import{ Modal,Col,Form,Input,Tooltip,Popconfirm,Table} from 'antd'
|
||||
import NoneData from '../../modules/courses/coursesPublic/NoneData';
|
||||
import { getImageUrl } from 'educoder';
|
||||
|
||||
|
||||
const TextArea = Input.TextArea;
|
||||
|
||||
|
||||
class MergeSubmit extends Component{
|
||||
constructor(props){
|
||||
super(props);
|
||||
this.state={
|
||||
data:undefined,
|
||||
isShow:false,
|
||||
imgsrc:'',
|
||||
journalsdata:undefined,
|
||||
//图片区域是否显示 none 隐藏 block 显示
|
||||
display:'none',
|
||||
titledisplay:'none',
|
||||
countvalue:'',
|
||||
//是否需要编辑
|
||||
isedit:'block',
|
||||
limit:50,
|
||||
page:1,
|
||||
titledata:undefined,
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount=()=>{
|
||||
|
||||
this.getDetail();
|
||||
}
|
||||
|
||||
getDetail=()=>{
|
||||
const { projectsId , mergeId} = this.props.match.params;
|
||||
const url = `/projects/${projectsId}/pull_requests/${mergeId}.json`;
|
||||
axios.get(url).then((result)=>{
|
||||
if(result){
|
||||
this.setState({
|
||||
data:result.data,
|
||||
})
|
||||
const { page , limit } = this.state;
|
||||
|
||||
this.getCommitList( result.data.pull_request.base , page , limit );
|
||||
}
|
||||
}).catch((error)=>{
|
||||
console.log(error);
|
||||
})
|
||||
}
|
||||
|
||||
handleok=() => {
|
||||
this.setState({
|
||||
isShow:false
|
||||
});
|
||||
};
|
||||
handleCancel=()=>{
|
||||
this.setState({
|
||||
isShow:false
|
||||
});
|
||||
}
|
||||
|
||||
imgshow=()=>{
|
||||
this.setState({
|
||||
isShow:true
|
||||
});
|
||||
};
|
||||
|
||||
//获取提交列表
|
||||
getCommitList=(branch , page , limit)=>{
|
||||
const { login } = this.props.current_user;
|
||||
const { projectsId } = this.props.match.params;
|
||||
const url = `/${login}/${projectsId}/commits.json`;
|
||||
axios.get(url,{
|
||||
params:{
|
||||
sha:branch,
|
||||
page,
|
||||
limit
|
||||
}
|
||||
}).then((result)=>{
|
||||
if(result){
|
||||
const array = [];
|
||||
result.data && result.data.commits.length > 0 && result.data.commits.map((item,key)=>{
|
||||
array.push({
|
||||
name:item.author && item.author.name,
|
||||
image_url:item.author && item.author.image_url,
|
||||
sha:item.sha,
|
||||
time_from_now:item.time_from_now,
|
||||
message:item.message
|
||||
})
|
||||
})
|
||||
this.setState({
|
||||
titledata:array,
|
||||
dataCount:result.data.total_count,
|
||||
isSpin:false
|
||||
})
|
||||
}
|
||||
}).catch((error)=>{console.log(error)})
|
||||
}
|
||||
|
||||
|
||||
render(){
|
||||
const { projectsId,mergeId} = this.props.match.params;
|
||||
const { data,titledata} = this.state;
|
||||
|
||||
|
||||
const columns=[{
|
||||
title:"作者",
|
||||
dataIndex: 'name',
|
||||
width:"10%",
|
||||
render: (text,item) => (
|
||||
<span className="f-wrap-alignCenter">
|
||||
<img src={getImageUrl(`images/${item.image_url}`)} alt="" width="28px" height="28px" className="mr3 radius"/>
|
||||
<label className="hide-1" style={{maxWidth:"75px"}}>{text}</label>
|
||||
</span>
|
||||
),
|
||||
},{
|
||||
title:"SHA",
|
||||
dataIndex: 'sha',
|
||||
render: (text) => (
|
||||
<span className="commitKey">{text}</span>
|
||||
)
|
||||
},{
|
||||
title:"备注",
|
||||
dataIndex: 'message',
|
||||
render: (text) => (
|
||||
<span>{text}</span>
|
||||
)
|
||||
},{
|
||||
title:"提交时间",
|
||||
className:"edu-txt-right",
|
||||
dataIndex: 'time_from_now',
|
||||
render: (text) => (
|
||||
<span>{text}</span>
|
||||
)
|
||||
}]
|
||||
|
||||
const title =()=>{
|
||||
return(
|
||||
<div className="f-wrap-between" style={{alignItems:"center"}}>
|
||||
<span className="font-16">提交列表</span>
|
||||
{/* <div className="f-wrap-alignCenter">
|
||||
<Input placeholder="搜索提交历史" style={{width:"300px"}}/>
|
||||
<Checkbox className="ml15">所有分支</Checkbox>
|
||||
<a className="btn_32 ml15">搜索</a>
|
||||
</div> */}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
const url = this.props.history.location.pathname;
|
||||
return(
|
||||
<div className="main">
|
||||
<div className="topWrapper">
|
||||
<Nav {...this.props} {...this.state}/>
|
||||
<Link to={`/projects/${projectsId}/merge/new`} className="topWrapper_btn">创建合并请求</Link>
|
||||
</div>
|
||||
<div>
|
||||
<div className="detailContent">
|
||||
<p>
|
||||
<span className="font-16" > { data && data.issue.subject}</span>
|
||||
<div>
|
||||
<Link to={`/projects/${projectsId}/merge/${mergeId}/UpdateMerge`} className="color-blue fr">编辑</Link>
|
||||
</div>
|
||||
</p>
|
||||
<p className="mt15">{ data && data.issue.description}</p>
|
||||
<p className="mt10 color-grey-c">
|
||||
<div className={data&&data.issue_status==="关闭"?"closedetail":"opendetail"}>{data&&data.issue_status==="关闭"?"关闭中!":"开启中!"} </div>
|
||||
由 { data && data.issue.author_name} 于 { data && data.issue.created_at }创建{ data && data.issue.journals_count && data.issue.journals_count > 0 ?` · ${data.issue.journals_count} 条评论`:""}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div className="detailHeader-wrapper">
|
||||
<div className="normal f-wrap-between">
|
||||
<ul className="headerMenu-wrapper">
|
||||
<li className={url.indexOf("Messagecount")>0? "active" : ""}><Link to={`/projects/${projectsId}/merge/${mergeId}/Messagecount`}>对话内容</Link></li>
|
||||
<li className={url.indexOf("MergeSubmit")>0 ? "active" : ""}><Link to={`/projects/${projectsId}/merge/${mergeId}/MergeSubmit`}>代码提交</Link></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<Table
|
||||
className="mt20 wrap-commit-table"
|
||||
columns={columns}
|
||||
dataSource={titledata}
|
||||
showHeader={false}
|
||||
size="small"
|
||||
pagination={false}
|
||||
title={() => title()}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
const WrappedMergeSubmitForm = Form.create({ name: 'MergeSubmitForm' })(MergeSubmit);
|
||||
export default WrappedMergeSubmitForm;
|
@ -0,0 +1,355 @@
|
||||
import React , {Component} from 'react';
|
||||
import {Link} from 'react-router-dom';
|
||||
|
||||
import axios from 'axios';
|
||||
import Nav from '../Order/Nav';
|
||||
|
||||
import UploadComponent from '../Upload/Index';
|
||||
import { getImageUrl } from 'educoder';
|
||||
import{ Modal,Col,Form,Input,Tooltip,Select } from 'antd'
|
||||
import NoneData from '../../modules/courses/coursesPublic/NoneData';
|
||||
|
||||
import Attachments from '../Upload/attachment'
|
||||
|
||||
const TextArea = Input.TextArea;
|
||||
const Option = Select.Option;
|
||||
|
||||
|
||||
class UpdateMerge extends Component{
|
||||
constructor(props){
|
||||
super(props);
|
||||
this.state={
|
||||
data:undefined,
|
||||
isShow:false,
|
||||
imgsrc:'',
|
||||
journalsdata:undefined,
|
||||
//图片区域是否显示 none 隐藏 block 显示
|
||||
display:'none',
|
||||
titledisplay:'none',
|
||||
subject:'',
|
||||
branch_name:"",
|
||||
issue_tag_ids:"",
|
||||
fixed_version_id:"",
|
||||
tracker_id:0,
|
||||
issue_type:0,
|
||||
status_id:0,
|
||||
assigned_to_id:"",
|
||||
priority_id:0,
|
||||
done_ratio:0,
|
||||
textcount:"",
|
||||
fileList:undefined,
|
||||
get_attachments: undefined
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount=()=>{
|
||||
this.InitData();
|
||||
this.getDetail();
|
||||
//this.getSelectList();
|
||||
}
|
||||
|
||||
InitData=()=>{
|
||||
// this.props.form.setFieldsValue({
|
||||
// ...this.state
|
||||
// });
|
||||
}
|
||||
|
||||
getDetail=()=>{
|
||||
const { projectsId , mergeId} = this.props.match.params;
|
||||
const url = `/projects/${projectsId}/pull_requests/${mergeId}/edit.json`;
|
||||
axios.get(url).then((result)=>{
|
||||
if(result){
|
||||
this.setState({
|
||||
data:result.data,
|
||||
subject:result.data.issue.subject,
|
||||
issue_chosen:result.data.issue.issue_chosen,
|
||||
branches:result.data.issue.branches,
|
||||
tracker_id:result.data.issue.tracker_id,
|
||||
issue_type:result.data.issue.issue_type,
|
||||
status_id:result.data.issue.status_id,
|
||||
priority_id:result.data.issue.priority_id,
|
||||
done_ratio:result.data.issue.done_ratio,
|
||||
textcount:result.data.issue.description,
|
||||
branch_name: result.data.issue.branch_name,
|
||||
get_attachments: result.data.issue.attachments,
|
||||
fileList:undefined,
|
||||
issue_tag_ids: result.data.issue.issue_tags && result.data.issue.issue_tags[0].id,
|
||||
fixed_version_id: result.data.issue.fixed_version_id,
|
||||
assigned_to_id: result.data.issue.assigned_to_id
|
||||
})
|
||||
// this.getjournalslist();
|
||||
}
|
||||
}).catch((error)=>{
|
||||
console.log(error);
|
||||
})
|
||||
}
|
||||
|
||||
handleok=() => {
|
||||
this.setState({
|
||||
isShow:false
|
||||
});
|
||||
};
|
||||
handleCancel=()=>{
|
||||
this.setState({
|
||||
isShow:false
|
||||
});
|
||||
}
|
||||
|
||||
imgshow=()=>{
|
||||
this.setState({
|
||||
isShow:true
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
changmodelname=(e)=>{
|
||||
this.setState({
|
||||
subject:e.target.value
|
||||
})
|
||||
}
|
||||
changmodelcount=(e)=>{
|
||||
this.setState({
|
||||
textcount:e.target.value
|
||||
})
|
||||
}
|
||||
|
||||
renderSelect=(list)=>{
|
||||
if(list && list.length >0){
|
||||
return(
|
||||
list.map((item,key)=>{
|
||||
return(
|
||||
<Option key={key+1} value={item.id}>{item.name}</Option>
|
||||
)
|
||||
})
|
||||
)
|
||||
}
|
||||
}
|
||||
// 获取上传后的文件id数组
|
||||
UploadFunc=(fileList)=>{
|
||||
this.setState({
|
||||
fileList
|
||||
})
|
||||
}
|
||||
handleSubmit=()=>{
|
||||
const { fileList } = this.state;
|
||||
this.props.form.validateFieldsAndScroll((err, values) => {
|
||||
if(!err){
|
||||
const { projectsId} = this.props.match.params;
|
||||
const { subject ,data} = this.state;
|
||||
const url = `/projects/${projectsId}/issues/${data.issue.id}.json`;
|
||||
|
||||
if(values.issue_tag_ids===0){
|
||||
values.issue_tag_ids = ""
|
||||
}else{
|
||||
values.issue_tag_ids = [values.issue_tag_ids]
|
||||
}
|
||||
if(values.assigned_to_id===0){
|
||||
values.assigned_to_id = ""
|
||||
}
|
||||
axios.put(url,{
|
||||
project_id:projectsId,
|
||||
subject:subject,
|
||||
id: data.issue.id,
|
||||
description:this.state.textcount,
|
||||
attachment_ids:fileList,
|
||||
...values
|
||||
}).then(result=>{
|
||||
if(result){
|
||||
this.props.history.push(`/projects/${projectsId}/merge`);
|
||||
}
|
||||
}).catch(error=>{
|
||||
console.log(error);
|
||||
})
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
render(){
|
||||
const { projectsId,mergeId } = this.props.match.params;
|
||||
const { getFieldDecorator } = this.props.form;
|
||||
const { current_user } = this.props;
|
||||
const { issue_tag_ids , fixed_version_id , branch_name , status_id , tracker_id , issue_type ,assigned_to_id , priority_id , done_ratio,
|
||||
issue_chosen , branches, subject, textcount,get_attachments } = this.state;
|
||||
return(
|
||||
<div className="main">
|
||||
<div className="topWrapper">
|
||||
<Nav {...this.props} {...this.state}/>
|
||||
</div>
|
||||
<div>
|
||||
<Form>
|
||||
<div className="f-wrap-between mt20" style={{alignItems:"flex-start"}}>
|
||||
<div className="list-right df" >
|
||||
<Link to={``}><img class="user_img" src={getImageUrl(`images/${current_user && current_user.image_url}`)} alt=""/></Link>
|
||||
<div className="new_context">
|
||||
<Form.Item>
|
||||
{getFieldDecorator('subject', {
|
||||
rules: [{
|
||||
required: true, message: '请填写工单标题'
|
||||
}],
|
||||
initialValue: subject
|
||||
})(
|
||||
<Input placeholder="标题" onChange={this.changmodelname}/>
|
||||
)}
|
||||
</Form.Item>
|
||||
<Form.Item>
|
||||
{getFieldDecorator('description', {
|
||||
rules: [],
|
||||
initialValue: textcount
|
||||
})(
|
||||
<TextArea placeholder="请输入工单的描述..." style={{height:"300px"}} onChange={this.changmodelcount}/>
|
||||
)}
|
||||
</Form.Item>
|
||||
<UploadComponent load={this.UploadFunc} showNotification={this.props.showNotification}></UploadComponent>
|
||||
{
|
||||
get_attachments ?
|
||||
<Attachments attachments={get_attachments} showNotification={this.props.showNotification} canDelete={true}/>
|
||||
:
|
||||
""
|
||||
}
|
||||
<p className="clearfix mt15 text-right">
|
||||
<a className="topWrapper_btn fr" type="submit" style={{marginLeft:5}} onClick={this.handleSubmit}>保存</a>
|
||||
<Link to={`/projects/${projectsId}/merge/${mergeId}/Messagecount`} className="a_btn cancel_btn fr">取消</Link>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="list-left" style={{paddingRight:"0px",paddingLeft:"15px",paddingTop:"10px"}}>
|
||||
<div className="list-l-panel">
|
||||
<Form.Item
|
||||
label="分支"
|
||||
>
|
||||
{getFieldDecorator('branch_name', {
|
||||
initialValue: branch_name,
|
||||
rules: [],
|
||||
})(
|
||||
<Select>
|
||||
<Option value={''}>分支未指定</Option>
|
||||
{
|
||||
branches && branches.length >0 && branches.map((item,key)=>{
|
||||
return(
|
||||
<Option value={item}>{item}</Option>
|
||||
)
|
||||
})
|
||||
}
|
||||
</Select>
|
||||
)}
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
label="标签"
|
||||
>
|
||||
{getFieldDecorator('issue_tag_ids', {
|
||||
initialValue: issue_tag_ids ? [issue_tag_ids] : '',
|
||||
rules: [],
|
||||
})(
|
||||
<Select>
|
||||
<Option value={''}>未选择标签</Option>
|
||||
{ this.renderSelect(issue_chosen && issue_chosen.issue_tag) }
|
||||
</Select>
|
||||
)}
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
label="里程碑"
|
||||
>
|
||||
{getFieldDecorator('fixed_version_id', {
|
||||
initialValue: fixed_version_id ? fixed_version_id : "",
|
||||
rules: [],
|
||||
})(
|
||||
<Select>
|
||||
<Option value={''}>未选择里程碑</Option>
|
||||
{ this.renderSelect(issue_chosen && issue_chosen.issue_version) }
|
||||
</Select>
|
||||
)}
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
label="状态"
|
||||
>
|
||||
{getFieldDecorator('status_id', {
|
||||
initialValue:status_id,
|
||||
rules: [{
|
||||
required: true, message: '请选择完成状态'
|
||||
}],
|
||||
})(
|
||||
<Select >
|
||||
{ this.renderSelect(issue_chosen && issue_chosen.issue_status) }
|
||||
</Select>
|
||||
)}
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
label="分类"
|
||||
>
|
||||
{getFieldDecorator('tracker_id', {
|
||||
initialValue:tracker_id,
|
||||
rules: [{
|
||||
required: true, message: '请选择分类'
|
||||
}],
|
||||
})(
|
||||
<Select>
|
||||
{ this.renderSelect(issue_chosen && issue_chosen.tracker) }
|
||||
</Select>
|
||||
)}
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
label="指派成员"
|
||||
>
|
||||
{getFieldDecorator('assigned_to_id', {
|
||||
initialValue: assigned_to_id ? assigned_to_id : "",
|
||||
})(
|
||||
<Select>
|
||||
<Option value={''}>未指派成员</Option>
|
||||
{ this.renderSelect(issue_chosen && issue_chosen.assign_user) }
|
||||
</Select>
|
||||
)}
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
label="优先度"
|
||||
>
|
||||
{getFieldDecorator('priority_id', {
|
||||
|
||||
initialValue:priority_id,
|
||||
rules: [{
|
||||
required: true, message: '请选择优先度'
|
||||
}],
|
||||
})(
|
||||
<Select>
|
||||
{ this.renderSelect(issue_chosen && issue_chosen.priority) }
|
||||
</Select>
|
||||
)}
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
label="完成度"
|
||||
>
|
||||
{getFieldDecorator('done_ratio', {
|
||||
initialValue:done_ratio,
|
||||
rules: [{
|
||||
required: true, message: '请选择完成度'
|
||||
}],
|
||||
})(
|
||||
<Select value={done_ratio}>
|
||||
{ this.renderSelect(issue_chosen && issue_chosen.done_ratio) }
|
||||
</Select>
|
||||
)}
|
||||
</Form.Item>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Form>
|
||||
</div>
|
||||
<Modal
|
||||
onCancel={this.handleCancel}
|
||||
visible={this.state.isShow}
|
||||
width="400px"
|
||||
footer={
|
||||
[]
|
||||
}
|
||||
bodyStyle={{textAlign:'center'}}
|
||||
>
|
||||
<img class="list_img" src="https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=1608431072,669449145&fm=27&gp=0.jpg" alt=""/>
|
||||
</Modal>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
const UpdateMergeForm = Form.create({ name: 'UpdateMergeForm' })(UpdateMerge);
|
||||
export default UpdateMergeForm;
|
@ -0,0 +1,13 @@
|
||||
.mergediv{
|
||||
height: 65px;
|
||||
width: 100%;
|
||||
padding: 15px;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
border: 1px solid #EEEEEE;
|
||||
flex-wrap: wrap;
|
||||
text-align: center;
|
||||
border-radius:4px;
|
||||
margin-left: 15px;
|
||||
}
|
@ -0,0 +1,199 @@
|
||||
import React , { Component } from "react";
|
||||
import { Form , Input , Select,Divider,Button,Checkbox,Dropdown,Menu} from 'antd';
|
||||
import {Link} from 'react-router-dom';
|
||||
|
||||
import UploadComponent from '../Upload/Index';
|
||||
import '../Order/order.css';
|
||||
import './version.css';
|
||||
|
||||
import axios from 'axios';
|
||||
|
||||
const Option = Select.Option;
|
||||
const TextArea = Input.TextArea;
|
||||
class NewVersion extends Component{
|
||||
constructor(props){
|
||||
super(props);
|
||||
this.state={
|
||||
branch_name:"",
|
||||
issue_tag_ids:"",
|
||||
fixed_version_id:"",
|
||||
issue_chosen:undefined,
|
||||
fileList:undefined,
|
||||
ischeck:undefined,
|
||||
branches:undefined,
|
||||
pull:undefined,
|
||||
tag_name:'',
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount=()=>{
|
||||
this.InitData();
|
||||
this.getSelectList();
|
||||
}
|
||||
|
||||
InitData=()=>{
|
||||
this.props.form.setFieldsValue({
|
||||
...this.state
|
||||
});
|
||||
}
|
||||
|
||||
getSelectList=()=>{
|
||||
const { projectsId } = this.props.match.params;
|
||||
const url = `/projects/${projectsId}/pull_requests/new.json`;
|
||||
axios.get(url).then((result)=>{
|
||||
if(result){
|
||||
this.setState({
|
||||
branches:result.data.branches,
|
||||
pull:result.data.branches[0]
|
||||
})
|
||||
}
|
||||
}).catch((error)=>{
|
||||
console.log(error);
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
renderSelect=(list)=>{
|
||||
if(list && list.length >0){
|
||||
return(
|
||||
list.map((item,key)=>{
|
||||
return(
|
||||
<Option key={key+1} value={item.id+""}>{item.name}</Option>
|
||||
)
|
||||
})
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// 创建
|
||||
handleSubmit=(draft)=>{
|
||||
this.props.form.validateFieldsAndScroll((err, values) => {
|
||||
if(!err){
|
||||
const { projectsId } = this.props.match.params;
|
||||
const { pull,tag_name,ischeck } = this.state;
|
||||
const url = `/projects/${projectsId}/version_releases.json`;
|
||||
// if(values.issue_type==="普通"){
|
||||
// values.issue_type="1"
|
||||
// }
|
||||
axios.post(url,{
|
||||
...values,
|
||||
tag_name:tag_name,
|
||||
draft:draft,
|
||||
prerelease:ischeck,
|
||||
target_commitish:pull
|
||||
}).then(result=>{
|
||||
if(result){
|
||||
this.props.history.push(`/projects/${projectsId}/version`);
|
||||
}
|
||||
}).catch(error=>{
|
||||
console.log(error);
|
||||
})
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 获取上传后的文件id数组
|
||||
UploadFunc=(fileList)=>{
|
||||
this.setState({
|
||||
fileList
|
||||
})
|
||||
}
|
||||
RedieonChange=(e)=>{
|
||||
this.setState({
|
||||
ischeck:e.target.checked
|
||||
})
|
||||
}
|
||||
Preservation=()=>{
|
||||
alert(this.state.ischeck)
|
||||
}
|
||||
|
||||
renderMenu =(array,id)=>{
|
||||
return(
|
||||
<Menu>
|
||||
{
|
||||
array && array.length > 0 && array.map((item,key)=>{
|
||||
return(
|
||||
<Menu.Item key={item} onClick={()=>this.getOption(item)}>{item}</Menu.Item>
|
||||
)
|
||||
})
|
||||
}
|
||||
</Menu>
|
||||
)
|
||||
}
|
||||
|
||||
getOption=(name)=>{
|
||||
this.setState({
|
||||
pull:name
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
changmodelname=(e)=>{
|
||||
this.setState({
|
||||
tag_name:e.target.value
|
||||
})
|
||||
}
|
||||
|
||||
render(){
|
||||
const { getFieldDecorator } = this.props.form;
|
||||
const { current_user } = this.props;
|
||||
const {branches,pull,tag_name} = this.state;
|
||||
|
||||
return(
|
||||
<div className="main">
|
||||
<Form>
|
||||
<h1 style={{marginLeft:15,marginTop:20}}>发布新版</h1>
|
||||
<h5 style={{marginLeft:15}}>版本发布组织项目的版本。</h5>
|
||||
<Divider/>
|
||||
<div style={{display:'flex'}}>
|
||||
<Input placeholder="标签名称" style={{width:180,marginLeft:15}} value={tag_name} onChange={this.changmodelname}/>
|
||||
<div style={{marginLeft:20,marginRight:20}}>@ </div>
|
||||
<Dropdown overlay={this.renderMenu(branches &&branches,'pull')} trigger={['click']} placement="bottomCenter">
|
||||
<Button style={{width:180}}>{pull}</Button>
|
||||
</Dropdown>
|
||||
</div>
|
||||
<div style={{display:'flex'}}>
|
||||
<div className="versionmilepostleft">
|
||||
<h1>标题</h1>
|
||||
<div>
|
||||
<Form.Item>
|
||||
{getFieldDecorator('name', {
|
||||
rules: [{
|
||||
required: true, message: '请输入标题'
|
||||
}],
|
||||
})(
|
||||
<Input placeholder="标题"/>
|
||||
)}
|
||||
</Form.Item>
|
||||
</div>
|
||||
<h1>内容</h1>
|
||||
<Form.Item>
|
||||
{getFieldDecorator('body', {
|
||||
rules: [{
|
||||
required: true, message: '请输入描述内容'
|
||||
}],
|
||||
})(
|
||||
<TextArea placeholder="添加一个可选的扩展描述。。。" style={{height:"300px"}}/>
|
||||
|
||||
)}
|
||||
</Form.Item>
|
||||
<UploadComponent load={this.UploadFunc} style={{width:80,marginLeft:15}}></UploadComponent>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Divider/>
|
||||
<div className="fr">
|
||||
<Checkbox onChange={this.RedieonChange}>标记为预行版</Checkbox>
|
||||
<p>标记此版本不适合生产使用</p>
|
||||
</div>
|
||||
<div className="clearfix mt15" style={{marginTop:5}} >
|
||||
<a className='topWrapper_btn_close fr' onClick={()=>this.handleSubmit(true)} style={{marginLeft:15}} >保存草稿</a> <a className='topWrapper_btn fr' onClick={()=>this.handleSubmit(false)} style={{marginRight:15}}>发布版本</a>
|
||||
</div>
|
||||
</Form>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
const WrappedNewVersionForm = Form.create({ name: 'NewVersionForm' })(NewVersion);
|
||||
export default WrappedNewVersionForm;
|
@ -0,0 +1,218 @@
|
||||
import React , { Component } from "react";
|
||||
import { Form , Input , Select,Divider,Button,Checkbox,Dropdown,Menu} from 'antd';
|
||||
import {Link} from 'react-router-dom';
|
||||
|
||||
import UploadComponent from '../Upload/Index';
|
||||
import '../Order/order.css';
|
||||
import './version.css';
|
||||
|
||||
import axios from 'axios';
|
||||
|
||||
const Option = Select.Option;
|
||||
const TextArea = Input.TextArea;
|
||||
class NewVersion extends Component{
|
||||
constructor(props){
|
||||
super(props);
|
||||
this.state={
|
||||
branch_name:"",
|
||||
issue_tag_ids:"",
|
||||
fixed_version_id:"",
|
||||
issue_chosen:undefined,
|
||||
fileList:undefined,
|
||||
ischeck:undefined,
|
||||
pull:undefined,
|
||||
tag_name:'',
|
||||
data:undefined
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount=()=>{
|
||||
this.InitData();
|
||||
this.getSelectList();
|
||||
}
|
||||
|
||||
InitData=()=>{
|
||||
this.props.form.setFieldsValue({
|
||||
...this.state
|
||||
});
|
||||
}
|
||||
|
||||
getSelectList=()=>{
|
||||
const { projectsId,versionId} = this.props.match.params;
|
||||
const url = `/projects/${projectsId}/version_releases/${versionId}/edit.json`;
|
||||
axios.get(url).then((result)=>{
|
||||
if(result){
|
||||
this.setState({
|
||||
data:result.data,
|
||||
pull:result.data.target_commitish
|
||||
})
|
||||
}
|
||||
}).catch((error)=>{
|
||||
console.log(error);
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
renderSelect=(list)=>{
|
||||
if(list && list.length >0){
|
||||
return(
|
||||
list.map((item,key)=>{
|
||||
return(
|
||||
<Option key={key+1} value={item.id+""}>{item.name}</Option>
|
||||
)
|
||||
})
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
//delete
|
||||
deleteversion=()=>{
|
||||
const { projectsId , versionId} = this.props.match.params;
|
||||
const url = `/projects/${projectsId}/version_releases/${versionId}.json`;
|
||||
axios.delete(url,{ data: {
|
||||
project_id: projectsId,
|
||||
id:versionId
|
||||
}
|
||||
}).then((result)=>{
|
||||
if(result){
|
||||
this.props.history.push(`/projects/${projectsId}/orders`);
|
||||
}
|
||||
}).catch((error)=>{
|
||||
console.log(error);
|
||||
})
|
||||
}
|
||||
|
||||
// 创建
|
||||
handleSubmit=()=>{
|
||||
this.props.form.validateFieldsAndScroll((err, values) => {
|
||||
if(!err){
|
||||
const { projectsId} = this.props.match.params;
|
||||
const { pull,tag_name,ischeck } = this.state;
|
||||
const url = `/projects/${projectsId}/version_releases/.json`;
|
||||
// if(values.issue_type==="普通"){
|
||||
// values.issue_type="1"
|
||||
// }
|
||||
axios.post(url,{
|
||||
...values,
|
||||
tag_name:tag_name,
|
||||
draft:false,
|
||||
prerelease:ischeck,
|
||||
target_commitish:pull
|
||||
}).then(result=>{
|
||||
if(result){
|
||||
this.props.history.push(`/projects/${projectsId}/version`);
|
||||
}
|
||||
}).catch(error=>{
|
||||
console.log(error);
|
||||
})
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 获取上传后的文件id数组
|
||||
UploadFunc=(fileList)=>{
|
||||
this.setState({
|
||||
fileList
|
||||
})
|
||||
}
|
||||
RedieonChange=(e)=>{
|
||||
this.setState({
|
||||
ischeck:e.target.checked
|
||||
})
|
||||
}
|
||||
Preservation=()=>{
|
||||
alert(this.state.ischeck)
|
||||
}
|
||||
|
||||
renderMenu =(array,id)=>{
|
||||
return(
|
||||
<Menu>
|
||||
{
|
||||
array && array.length > 0 && array.map((item,key)=>{
|
||||
return(
|
||||
<Menu.Item key={item} onClick={()=>this.getOption(item)}>{item}</Menu.Item>
|
||||
)
|
||||
})
|
||||
}
|
||||
</Menu>
|
||||
)
|
||||
}
|
||||
|
||||
getOption=(name)=>{
|
||||
this.setState({
|
||||
pull:name
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
changmodelname=(e)=>{
|
||||
this.setState({
|
||||
tag_name:e.target.value
|
||||
})
|
||||
}
|
||||
|
||||
render(){
|
||||
const { getFieldDecorator } = this.props.form;
|
||||
const { current_user,projectsId} = this.props;
|
||||
const {data,pull,tag_name} = this.state;
|
||||
|
||||
return(
|
||||
<div className="main">
|
||||
<Form>
|
||||
<h1 style={{marginLeft:15,marginTop:20}}>发布新版</h1>
|
||||
<h5 style={{marginLeft:15}}>版本发布组织项目的版本。</h5>
|
||||
<Divider/>
|
||||
<div style={{display:'flex'}}>
|
||||
{data.tag_name}@{pull}
|
||||
</div>
|
||||
<div style={{display:'flex'}}>
|
||||
<div className="versionmilepostleft">
|
||||
<h1>标题</h1>
|
||||
<div>
|
||||
<Form.Item>
|
||||
{getFieldDecorator('name', {
|
||||
rules: [{
|
||||
required: true, message: '请输入标题'
|
||||
}],
|
||||
initialValue: data.name
|
||||
|
||||
})(
|
||||
<Input placeholder="标题"/>
|
||||
)}
|
||||
</Form.Item>
|
||||
</div>
|
||||
<h1>内容</h1>
|
||||
<Form.Item>
|
||||
{getFieldDecorator('body', {
|
||||
rules: [{
|
||||
required: true, message: '请输入描述内容'
|
||||
}],
|
||||
initialValue: data.body
|
||||
})(
|
||||
<TextArea placeholder="添加一个可选的扩展描述。。。" style={{height:"300px"}}/>
|
||||
|
||||
)}
|
||||
</Form.Item>
|
||||
<UploadComponent load={this.UploadFunc} style={{width:80,marginLeft:15}}></UploadComponent>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Divider/>
|
||||
<div className="fr">
|
||||
<Checkbox onChange={this.RedieonChange}>标记为预行版</Checkbox>
|
||||
<p>标记此版本不适合生产使用</p>
|
||||
</div>
|
||||
<div className="clearfix mt15" style={{marginTop:5}} >
|
||||
<a className='topWrapper_btn_delete fr' onClick={this.deleteversion} style={{marginLeft:15}}>删除发布</a>
|
||||
<a className='topWrapper_btn fr' onClick={this.handleSubmit} style={{marginRight:15}}>编辑发布信息</a>
|
||||
<Link to={`/projects/${projectsId}/version`} className='topWrapper_btn fr'>取消</Link>
|
||||
|
||||
</div>
|
||||
</Form>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
const WrappedNewVersionForm = Form.create({ name: 'NewVersionForm' })(NewVersion);
|
||||
export default WrappedNewVersionForm;
|
@ -0,0 +1,24 @@
|
||||
.versionmilepostleft{
|
||||
padding: 15px;
|
||||
margin-right: 50px;
|
||||
width: 80%;
|
||||
}
|
||||
.topWrapper_btn_close {
|
||||
background: #504b4b;
|
||||
color: #FFFFFF!important;
|
||||
padding:0px 12px;
|
||||
text-align: center;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.topWrapper_btn_delete {
|
||||
background: #da1010;
|
||||
color: #FFFFFF!important;
|
||||
padding:0px 12px;
|
||||
text-align: center;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
border-radius: 4px;
|
||||
}
|
Loading…
Reference in new issue