|
|
|
|
import React , { Component } from "react";
|
|
|
|
|
import {Link} from 'react-router-dom';
|
|
|
|
|
import { Input ,Dropdown , Menu , Icon , Pagination , Spin } from 'antd';
|
|
|
|
|
import NoneData from '../../modules/courses/coursesPublic/NoneData';
|
|
|
|
|
import Nav from '../Order/Nav';
|
|
|
|
|
import MergeItem from './MergeItem';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import axios from 'axios';
|
|
|
|
|
|
|
|
|
|
const Search = Input.Search;
|
|
|
|
|
/**
|
|
|
|
|
* issue_chosen:下拉的筛选列表,
|
|
|
|
|
* data:列表接口返回的所有数据,
|
|
|
|
|
* issues:列表数组,
|
|
|
|
|
* isSpin:加载中,
|
|
|
|
|
* search:搜索关键字,
|
|
|
|
|
* author_id:发布者id,
|
|
|
|
|
* assigned_to_id:指派给。。。的id,
|
|
|
|
|
* limit:每页条数,
|
|
|
|
|
* page:当前页,
|
|
|
|
|
* search_count:列表总条数
|
|
|
|
|
* issue_type:搜索条件
|
|
|
|
|
*/
|
|
|
|
|
class merge extends Component{
|
|
|
|
|
constructor(props){
|
|
|
|
|
super(props);
|
|
|
|
|
this.state={
|
|
|
|
|
issue_chosen:undefined,
|
|
|
|
|
data:undefined,
|
|
|
|
|
issues:undefined,
|
|
|
|
|
isSpin:false,
|
|
|
|
|
search:undefined,
|
|
|
|
|
author_id:undefined,
|
|
|
|
|
assigned_to_id:undefined,
|
|
|
|
|
limit:15,
|
|
|
|
|
page:1,
|
|
|
|
|
search_count:undefined,
|
|
|
|
|
issue_type:undefined
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
componentDidMount=()=>{
|
|
|
|
|
this.getSelectList();
|
|
|
|
|
this.getIssueList();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getSelectList=()=>{
|
|
|
|
|
const { projectsId } = this.props.match.params;
|
|
|
|
|
|
|
|
|
|
const url = `/projects/${projectsId}/issues/index_chosen.json`;
|
|
|
|
|
axios.get(url).then((result)=>{
|
|
|
|
|
if(result){
|
|
|
|
|
this.setState({
|
|
|
|
|
issue_chosen:result.data.issue_chosen
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}).catch((error)=>{
|
|
|
|
|
console.log(error);
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取列表数据
|
|
|
|
|
getIssueList=(page,limit,search,author_id,assigned_to_id,id,value)=>{
|
|
|
|
|
const { projectsId } = this.props.match.params;
|
|
|
|
|
|
|
|
|
|
const url = `/projects/${projectsId}/issues.json`;
|
|
|
|
|
axios.get(url,{
|
|
|
|
|
params:{
|
|
|
|
|
page,limit,search,author_id,assigned_to_id,
|
|
|
|
|
[id]:value
|
|
|
|
|
}
|
|
|
|
|
}).then((result)=>{
|
|
|
|
|
if(result){
|
|
|
|
|
this.setState({
|
|
|
|
|
data:result.data,
|
|
|
|
|
issues:result.data.issues,
|
|
|
|
|
search_count:result.data.search_count,
|
|
|
|
|
isSpin:false
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}).catch((error)=>{
|
|
|
|
|
console.log(error);
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getOption=(e,id)=>{
|
|
|
|
|
this.setState({
|
|
|
|
|
[id]:e.key
|
|
|
|
|
})
|
|
|
|
|
const { page,limit,search,author_id,assigned_to_id } = this.state;
|
|
|
|
|
this.getIssueList(page,limit,search,author_id,assigned_to_id,id,e.key);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
renderMenu =(array,name,id)=>{
|
|
|
|
|
return(
|
|
|
|
|
<Menu>
|
|
|
|
|
<Menu.Item key={undefined} onClick={(e)=>this.getOption(e,id)}>{name}</Menu.Item>
|
|
|
|
|
{
|
|
|
|
|
array && array.length > 0 && array.map((item,key)=>{
|
|
|
|
|
return(
|
|
|
|
|
<Menu.Item key={item.id} onClick={(e)=>this.getOption(e,id)}>{item.name}</Menu.Item>
|
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
</Menu>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 翻页
|
|
|
|
|
ChangePage=(page)=>{
|
|
|
|
|
this.setState({
|
|
|
|
|
page,
|
|
|
|
|
isSpin:true
|
|
|
|
|
})
|
|
|
|
|
const {limit,search} = this.state;
|
|
|
|
|
this.getIssueList(page,limit,search);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 搜索
|
|
|
|
|
searchFunc=(value)=>{
|
|
|
|
|
this.setState({
|
|
|
|
|
search:value,
|
|
|
|
|
isSpin:true
|
|
|
|
|
})
|
|
|
|
|
const {page,limit} = this.state;
|
|
|
|
|
this.getIssueList(page,limit,value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 筛选:全部、指派给我、由我创建
|
|
|
|
|
ChangeAssign=(type)=>{
|
|
|
|
|
const { limit, search} = this.state;
|
|
|
|
|
this.setState({
|
|
|
|
|
isSpin:true
|
|
|
|
|
})
|
|
|
|
|
if(type){
|
|
|
|
|
const { current_user } = this.props;
|
|
|
|
|
if(type===1){
|
|
|
|
|
this.setState({
|
|
|
|
|
page:1,
|
|
|
|
|
author_id:current_user.user_id,
|
|
|
|
|
assigned_to_id:undefined
|
|
|
|
|
})
|
|
|
|
|
this.getIssueList(1,limit,search,current_user.user_id,undefined);
|
|
|
|
|
}else{
|
|
|
|
|
this.setState({
|
|
|
|
|
page:1,
|
|
|
|
|
author_id:undefined,
|
|
|
|
|
assigned_to_id:current_user.user_id
|
|
|
|
|
})
|
|
|
|
|
this.getIssueList(1,limit,search,undefined,current_user.user_id);
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
this.setState({
|
|
|
|
|
page:1,
|
|
|
|
|
author_id:undefined,
|
|
|
|
|
assigned_to_id:undefined
|
|
|
|
|
})
|
|
|
|
|
this.getIssueList(1,limit,search,undefined,undefined);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
render(){
|
|
|
|
|
|
|
|
|
|
const { issue_chosen , issues , limit , page , search_count , data , assigned_to_id , author_id , isSpin } = this.state;
|
|
|
|
|
const { projectsId } = this.props.match.params;
|
|
|
|
|
|
|
|
|
|
const Paginations = (
|
|
|
|
|
<React.Fragment>
|
|
|
|
|
{
|
|
|
|
|
search_count > limit ?
|
|
|
|
|
<div className="mt30 mb50 edu-txt-center">
|
|
|
|
|
<Pagination simple defaultCurrent={page} total={search_count} pageSize={limit} onChange={this.ChangePage}></Pagination>
|
|
|
|
|
</div>:""
|
|
|
|
|
}
|
|
|
|
|
</React.Fragment>
|
|
|
|
|
)
|
|
|
|
|
return(
|
|
|
|
|
<div className="main">
|
|
|
|
|
<div className="topWrapper">
|
|
|
|
|
<Nav {...this.props} {...this.state}/>
|
|
|
|
|
<Link to={`/projects/${projectsId}/orders/new`} className="topWrapper_btn">创建合并请求</Link>
|
|
|
|
|
</div>
|
|
|
|
|
<div className="topWrapper" style={{borderBottom:"none"}}>
|
|
|
|
|
<p className="topWrapper_nav">
|
|
|
|
|
<span>{data && data.open_count}个开启中</span>
|
|
|
|
|
<span>{data && data.close_count}个已关闭</span>
|
|
|
|
|
</p>
|
|
|
|
|
<div>
|
|
|
|
|
<Search
|
|
|
|
|
placeholder="搜索"
|
|
|
|
|
enterButton
|
|
|
|
|
onSearch={this.searchFunc}
|
|
|
|
|
style={{ width: 300 }}
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<Spin spinning={isSpin}>
|
|
|
|
|
<div className="f-wrap-between mb20">
|
|
|
|
|
<div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
<ul className="topWrapper_select">
|
|
|
|
|
<li>
|
|
|
|
|
<Dropdown className="topWrapperSelect" overlay={this.renderMenu(issue_chosen && issue_chosen.issue_tag,'标签','issue_tag_id')} trigger={['click']} placement="bottomCenter">
|
|
|
|
|
<span>标签<Icon type="caret-down" className="ml5" /></span>
|
|
|
|
|
</Dropdown>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<Dropdown className="topWrapperSelect" overlay={this.renderMenu(issue_chosen && issue_chosen.issue_type,'所有类型','issue_type')} trigger={['click']} placement="bottomCenter">
|
|
|
|
|
<span>类型<Icon type="caret-down" className="ml5" /></span>
|
|
|
|
|
</Dropdown>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<Dropdown className="topWrapperSelect" overlay={this.renderMenu(issue_chosen && issue_chosen.tracker,'所有分类','tracker_id')} trigger={['click']} placement="bottomCenter">
|
|
|
|
|
<span>分类<Icon type="caret-down" className="ml5" /></span>
|
|
|
|
|
</Dropdown>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<Dropdown className="topWrapperSelect" overlay={this.renderMenu(issue_chosen && issue_chosen.assign_user,'发布人','author_id')} trigger={['click']} placement="bottomCenter">
|
|
|
|
|
<span>发布人<Icon type="caret-down" className="ml5" /></span>
|
|
|
|
|
</Dropdown>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<Dropdown className="topWrapperSelect" overlay={this.renderMenu(issue_chosen && issue_chosen.assign_user,'指派人','assigned_to_id')} trigger={['click']} placement="bottomCenter">
|
|
|
|
|
<span>指派人<Icon type="caret-down" className="ml5" /></span>
|
|
|
|
|
</Dropdown>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<Dropdown className="topWrapperSelect" overlay={this.renderMenu(issue_chosen && issue_chosen.priority,'优先度','priority_id')} trigger={['click']} placement="bottomCenter">
|
|
|
|
|
<span>优先度<Icon type="caret-down" className="ml5"/></span>
|
|
|
|
|
</Dropdown>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<Dropdown className="topWrapperSelect" overlay={this.renderMenu(issue_chosen && issue_chosen.done_ratio,'完成度','done_ratio')} trigger={['click']} placement="bottomCenter">
|
|
|
|
|
<span>完成度<Icon type="caret-down" className="ml5" /></span>
|
|
|
|
|
</Dropdown>
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
{
|
|
|
|
|
search_count === 0 ?
|
|
|
|
|
<NoneData></NoneData>
|
|
|
|
|
:
|
|
|
|
|
<MergeItem issues={issues} search_count={search_count} page={page} limit={limit} {...this.props} {...this.state}></MergeItem>
|
|
|
|
|
}
|
|
|
|
|
{ Paginations }
|
|
|
|
|
</Spin>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
export default merge;
|