parent
8a83b053c5
commit
e2550b9d74
@ -0,0 +1,47 @@
|
||||
import React , { Component } from 'react';
|
||||
import { Link } from 'react-router-dom';
|
||||
|
||||
class MergeItem extends Component{
|
||||
render(){
|
||||
const { issues , search_count , page , limit } = this.props;
|
||||
const { projectsId } = this.props.match.params;
|
||||
const renderList =()=>{
|
||||
if(issues && issues.length > 0){
|
||||
return(
|
||||
issues.map((item,key)=>{
|
||||
return(
|
||||
<div className="issueItem">
|
||||
<div className="flex-1">
|
||||
<p className="mb15 df">
|
||||
<span className="issueNo"># {search_count - (key + (page-1) * limit)}</span>
|
||||
<Link to={`/projects/${projectsId}/orders/${item.id}/detail`} className="flex-1 hide-1 font-16 color-grey-3 lineh-30">{item.name}</Link>
|
||||
</p>
|
||||
<p className="color-grey-6">
|
||||
<span>{item.created_at}</span>
|
||||
{ item.journals_count ? <span className="ml20"><i className="iconfont icon-pinglun1 mr3 font-16"></i>{item.journals_count}</span> : "" }
|
||||
</p>
|
||||
</div>
|
||||
<ul className="topWrapper_select">
|
||||
<li>{item.issue_tags || "--"}</li>
|
||||
<li>{item.issue_type || "--"}</li>
|
||||
<li>{item.tracker || "--"}</li>
|
||||
<li>{item.author_name || "--"}</li>
|
||||
<li>{item.assign_user_name || "--"}</li>
|
||||
<li>{item.priority || "--"}</li>
|
||||
<li>{item.done_ratio || "--"}</li>
|
||||
</ul>
|
||||
</div>
|
||||
)
|
||||
})
|
||||
)
|
||||
}
|
||||
}
|
||||
return(
|
||||
<div>
|
||||
{renderList()}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default MergeItem;
|
@ -0,0 +1,244 @@
|
||||
import React , {Component} from 'react';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { Dropdown , Icon , Menu , Pagination,Typography} from 'antd';
|
||||
import Nav from './Nav';
|
||||
import NoneData from '../../modules/courses/coursesPublic/NoneData';
|
||||
import reactCSS from 'reactcss'
|
||||
import axios from 'axios';
|
||||
|
||||
const { Text } = Typography;
|
||||
|
||||
class Milepost extends Component{
|
||||
constructor(props){
|
||||
super(props);
|
||||
this.state={
|
||||
data:undefined,
|
||||
limit:15,
|
||||
page:1,
|
||||
order_type:undefined,
|
||||
//新建标签区域是否显示 none 隐藏 block 显示
|
||||
display:'none',
|
||||
status:'open'
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount=()=>{
|
||||
this.getList(1,this.state.status,'desc');
|
||||
}
|
||||
|
||||
|
||||
|
||||
getList=(page,status,order_type)=>{
|
||||
const { projectsId } = this.props.match.params;
|
||||
const { limit } = this.state;
|
||||
const url = `/projects/${projectsId}/versions.json`;
|
||||
axios.get(url,{
|
||||
params:{
|
||||
projectsId,page,limit,status,order_type
|
||||
}
|
||||
}).then((result)=>{
|
||||
if(result){
|
||||
this.setState({
|
||||
data:result.data
|
||||
})
|
||||
}
|
||||
}).catch((error)=>{
|
||||
console.log(error);
|
||||
})
|
||||
}
|
||||
|
||||
opneMilelist=()=>{
|
||||
this.setState({
|
||||
status:'open'
|
||||
})
|
||||
this.getList(1,'open','desc');
|
||||
|
||||
}
|
||||
closeMilelist=()=>{
|
||||
this.setState({
|
||||
status:'closed'
|
||||
})
|
||||
this.getList(1,'closed','desc');
|
||||
|
||||
}
|
||||
|
||||
updatestatusemile=(status,arr)=>{
|
||||
const { projectsId } = this.props.match.params;
|
||||
const url = `/projects/${projectsId}/versions/${arr.id}/update_status`;
|
||||
axios.post(url,{
|
||||
project_id:projectsId,
|
||||
id:arr.id,
|
||||
status:status
|
||||
}).then(result=>{
|
||||
if(result){
|
||||
this.getList(1,'open','desc')
|
||||
}
|
||||
}).catch(error=>{
|
||||
console.log(error);
|
||||
})
|
||||
}
|
||||
|
||||
closemile=(arr)=>{
|
||||
const { projectsId } = this.props.match.params;
|
||||
const url = `/projects/${projectsId}/versions/${arr.id}`;
|
||||
axios.delete(url,{ data: {
|
||||
project_id: projectsId,
|
||||
id: arr.id
|
||||
}
|
||||
}).then((result)=>{
|
||||
if(result){
|
||||
this.getList(1,this.state.status,'desc')
|
||||
}
|
||||
}).catch((error)=>{
|
||||
console.log(error);
|
||||
})
|
||||
}
|
||||
|
||||
ChangePage=(page)=>{
|
||||
this.setState({
|
||||
page
|
||||
})
|
||||
|
||||
this.getList(page);
|
||||
}
|
||||
|
||||
// 排序
|
||||
arrayList=(e)=>{
|
||||
this.setState({
|
||||
order_name:e.key,
|
||||
order_type:e.item.props.value
|
||||
})
|
||||
this.getList(1,this.state.status,e.item.props.value);
|
||||
}
|
||||
|
||||
|
||||
//控制新建标签页是否显示
|
||||
newshow=()=>{
|
||||
this.setState({
|
||||
display:'block'
|
||||
});
|
||||
|
||||
};
|
||||
newclose=()=>{
|
||||
this.setState({
|
||||
display:'none'
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
render(){
|
||||
const { data , limit , page } = this.state;
|
||||
const { projectsId } = this.props.match.params;
|
||||
const menu = (
|
||||
<Menu onClick={this.arrayList}>
|
||||
<Menu.Item key={'created_at'} value="desc">到期日从近到远</Menu.Item>
|
||||
<Menu.Item key={'created_at'} value="asc">到期日从远到近</Menu.Item>
|
||||
<Menu.Item key={'issues_count'} value="desc">完成度从低到高</Menu.Item>
|
||||
<Menu.Item key={'issues_count'} value="asc">完成度从高到低</Menu.Item>
|
||||
<Menu.Item key={'issues_count'} value="asc">工单从多到少</Menu.Item>
|
||||
<Menu.Item key={'issues_count'} value="asc">工单从少到多</Menu.Item>
|
||||
</Menu>
|
||||
)
|
||||
|
||||
const Paginations = (
|
||||
<React.Fragment>
|
||||
{
|
||||
data && data.issue_tags_count > limit ?
|
||||
<div className="mt30 mb50 edu-txt-center">
|
||||
<Pagination simple defaultCurrent={page} total={data && data.issue_tags_count} pageSize={limit} onChange={this.ChangePage}></Pagination>
|
||||
</div>:""
|
||||
}
|
||||
</React.Fragment>
|
||||
)
|
||||
|
||||
const renderList =()=>{
|
||||
if(data && data.versions && data.versions.length>0 ){
|
||||
return(
|
||||
<div className="tagList">
|
||||
{
|
||||
data.versions.map((item,key)=>{
|
||||
return(
|
||||
<div style={{display:'block'}}>
|
||||
<div className="milepostdiv">
|
||||
<div className="milepostwidth">
|
||||
<p style={{background:'red',width:20}}></p>
|
||||
<p>{item.name}</p>
|
||||
</div>
|
||||
<div className="mileposwidth">
|
||||
</div>
|
||||
</div>
|
||||
<div className="milepostdiv" style={{marginTop:5}}>
|
||||
<div className="milepostrighe">
|
||||
<p style={{background:'red',width:20}}></p>
|
||||
<p>{item.effective_date}</p>
|
||||
<p style={{background:'red',width:20}}></p>
|
||||
<p>{item.open_issues_count}个开启</p>
|
||||
<p style={{background:'red',width:20}}></p>
|
||||
<p>{item.close_issues_count}个关闭</p>
|
||||
</div>
|
||||
<div className="milepostleft">
|
||||
<p style={{background:'red',width:20}}></p>
|
||||
<p><Link to={`/projects/${projectsId}/orders/${item.id}/meilpost`} >编辑</Link></p>
|
||||
<p style={{background:'red',width:20}}></p>
|
||||
<p onClick={()=>this.updatestatusemile('closed',item)}>关闭</p>
|
||||
<p style={{background:'red',width:20}}></p>
|
||||
<p onClick={()=>this.closemile(item)} >删除</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="milepostdiv"style={{marginTop:5}}>
|
||||
<div className="textwidth">
|
||||
<Text
|
||||
type="secondary"
|
||||
ellipsis={{rows: 30, expandable: false, onExpand: Function}}
|
||||
>
|
||||
{item.description}</Text>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
})
|
||||
}
|
||||
</div>
|
||||
)
|
||||
}else{
|
||||
return(
|
||||
<NoneData />
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
return(
|
||||
<div className="main">
|
||||
<div>
|
||||
<div className="topWrapper">
|
||||
<Nav {...this.props} {...this.state} />
|
||||
{/* <a onClick={this.newshow} className="topWrapper_btn" >新建里程碑</a> */}
|
||||
<Link to={`/projects/${projectsId}/orders/meilpost`} className="topWrapper_btn">新的里程碑</Link>
|
||||
|
||||
</div>
|
||||
<div style={{display: this.state.display}}>
|
||||
<div className="tagdiv" >
|
||||
<span>里程碑{ data && data.issue_tags_count }已创建</span>
|
||||
</div>
|
||||
</div>
|
||||
<div className="topWrapper">
|
||||
<div className="topWrapper_nav">
|
||||
<span onClick={this.opneMilelist}>{ data && data.open_count }开启中</span>
|
||||
<span onClick={this.closeMilelist}>{ data && data.closed_count }已关闭</span>
|
||||
</div>
|
||||
<ul className="topWrapper_select">
|
||||
<li>
|
||||
<Dropdown className="topWrapperSelect" overlay={menu} trigger={['click']} placement="bottomCenter">
|
||||
<span>排序<Icon type="caret-down" className="ml5" /></span>
|
||||
</Dropdown>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
{ renderList()}
|
||||
{ Paginations }
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
export default Milepost;
|
@ -0,0 +1,14 @@
|
||||
import React , { Component } from 'react';
|
||||
import { Link } from 'react-router-dom';
|
||||
|
||||
class VersionItem extends Component{
|
||||
render(){
|
||||
return(
|
||||
<div>
|
||||
1111111111
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default VersionItem;
|
Loading…
Reference in new issue