Merge branch 'forge' of http://bdgit.educoder.net/Hjqreturn/educoder into forge
commit
c250aac0dd
@ -0,0 +1,84 @@
|
||||
import React , {Component} from 'react';
|
||||
import {Link} from 'react-router-dom';
|
||||
|
||||
import axios from 'axios';
|
||||
import Nav from './Nav';
|
||||
|
||||
|
||||
class Detail extends Component{
|
||||
constructor(props){
|
||||
super(props);
|
||||
this.state={
|
||||
data:undefined
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount=()=>{
|
||||
this.getDetail();
|
||||
}
|
||||
|
||||
getDetail=()=>{
|
||||
const { projectsId , orderId} = this.props.match.params;
|
||||
const url = `/projects/${projectsId}/issues/${orderId}.json`;
|
||||
axios.get(url).then((result)=>{
|
||||
if(result){
|
||||
this.setState({
|
||||
data:result.data
|
||||
})
|
||||
}
|
||||
}).catch((error)=>{
|
||||
console.log(error);
|
||||
})
|
||||
}
|
||||
|
||||
render(){
|
||||
const { projectsId } = this.props.match.params;
|
||||
const { data } = this.state;
|
||||
return(
|
||||
<div className="main">
|
||||
<div className="topWrapper">
|
||||
<Nav {...this.props} {...this.state}/>
|
||||
<Link to={`/projects/${projectsId}/orders/new`} className="topWrapper_btn">创建工单</Link>
|
||||
</div>
|
||||
<div>
|
||||
<div className="detailContent">
|
||||
<p>
|
||||
<span className="font-16">{ data && data.subject }</span>
|
||||
<a onClick={this.editOrder} className="color-blue fr">编辑</a>
|
||||
</p>
|
||||
<p className="mt15">{ data && data.description }</p>
|
||||
<p className="mt10 color-grey-c">
|
||||
由 { data && data.author_name} 于 { data && data.created_at }创建{ data && data.journals_count && data.journals_count > 0 ?` · ${data.journals_count} 条评论`:""}
|
||||
</p>
|
||||
</div>
|
||||
<div className="f-wrap-between mt20" style={{alignItems:"flex-start"}}>
|
||||
<div className="list-right df"></div>
|
||||
<div className="list-left DetailRight">
|
||||
<p>
|
||||
<span className="span_title">当前状态</span>
|
||||
<span>已解决</span>
|
||||
</p>
|
||||
<p>
|
||||
<span className="span_title">优先级</span>
|
||||
<span>高</span>
|
||||
</p>
|
||||
<p>
|
||||
<span className="span_title">指派给</span>
|
||||
<span>蔡世</span>
|
||||
</p>
|
||||
<p>
|
||||
<span className="span_title">里程碑</span>
|
||||
<span>20200131前上线</span>
|
||||
</p>
|
||||
<p>
|
||||
<span className="span_title">里程碑</span>
|
||||
<span>20200131前上线</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
export default Detail;
|
@ -0,0 +1,47 @@
|
||||
import React , { Component } from 'react';
|
||||
import { Link } from 'react-router-dom';
|
||||
|
||||
class OrderItem 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 OrderItem;
|
@ -0,0 +1,134 @@
|
||||
import React , {Component} from 'react';
|
||||
import { Dropdown , Icon , Menu , Pagination } from 'antd';
|
||||
import { Link } from 'react-router-dom';
|
||||
import Nav from './Nav';
|
||||
import NoneData from '../../modules/courses/coursesPublic/NoneData';
|
||||
|
||||
import axios from 'axios';
|
||||
class Tags extends Component{
|
||||
constructor(props){
|
||||
super(props);
|
||||
this.state={
|
||||
data:undefined,
|
||||
limit:15,
|
||||
page:1,
|
||||
order_name:undefined,
|
||||
order_type:undefined
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount=()=>{
|
||||
this.getList();
|
||||
}
|
||||
|
||||
getList=(page,order_name,order_type)=>{
|
||||
const { projectsId } = this.props.match.params;
|
||||
const { limit } = this.state;
|
||||
const url = `/projects/${projectsId}/issue_tags.json`;
|
||||
axios.get(url,{
|
||||
params:{
|
||||
page,limit,order_name,order_type
|
||||
}
|
||||
}).then((result)=>{
|
||||
if(result){
|
||||
this.setState({
|
||||
data:result.data
|
||||
})
|
||||
}
|
||||
}).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,e.key,e.item.props.value);
|
||||
}
|
||||
|
||||
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">按issue个数降序排序</Menu.Item>
|
||||
<Menu.Item key={'issues_count'} value="asc">按issue个数升序排序</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.issue_tags && data.issue_tags.length>0 ){
|
||||
return(
|
||||
<div className="tagList">
|
||||
{
|
||||
data.issue_tags.map((item,key)=>{
|
||||
return(
|
||||
<div>
|
||||
<span className="f-wrap-alignCenter">
|
||||
<span style={{backgroundColor:`${item.color}`}} className="tagColor"></span>
|
||||
{item.name}
|
||||
</span>
|
||||
<span className="hide-1">{item.description}</span>
|
||||
<span>{item.issues_count}个开启的工单</span>
|
||||
</div>
|
||||
)
|
||||
})
|
||||
}
|
||||
</div>
|
||||
)
|
||||
}else{
|
||||
return(
|
||||
<NoneData />
|
||||
)
|
||||
}
|
||||
}
|
||||
return(
|
||||
<div className="main">
|
||||
<div>
|
||||
<div className="topWrapper">
|
||||
<Nav {...this.props} {...this.state} />
|
||||
<Link to={`/projects/${projectsId}/orders/new`} className="topWrapper_btn">新建标签</Link>
|
||||
</div>
|
||||
<div className="topWrapper">
|
||||
<span>共{ data && data.issue_tags_count }个标签</span>
|
||||
<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 Tags;
|
Loading…
Reference in new issue