forgeplus-react/src/forge/Issues/Pages/sign.jsx

232 lines
7.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React , { useEffect , useState } from 'react';
import create from '../Img/create.png';
import { Menu , Dropdown , Icon, Input, Button , Spin , Pagination } from 'antd';
import ColorCard from '../Component/colorCard';
import DelBox from '../Component/delBox';
import axios from 'axios';
import {Link} from 'react-router-dom';
const limit = 15;
function Sign(props){
const [ edit , setEdit ] = useState(false);
const [ colors , setColors ] = useState(undefined);
const [ delVisible , setDelVisible ] = useState(false);
const [ editId , setEditId ] = useState(undefined);
const [ list , setList ] = useState(undefined);
const [ total , setTotal ] = useState(undefined);
const [ page , setPage ] = useState(1);
const [ name , setName ] = useState(undefined);
const [ desc , setDesc ] = useState(undefined);
const [ order_name , setOrderName ] = useState(undefined);
const [ order_type , setOrderType ] = useState(undefined);
const [ nameFlag , setNameFlag ] = useState(undefined);
const [ defaultColor , setDefaultColor ]= useState("#F17013");
const [ arrayName , setArrayName ] = useState("标记");
const [ key , setKey ] = useState("0");
const owner = props.match.params.owner;
const projectsId = props.match.params.projectsId;
useEffect(()=>{
Init();
},[page,order_name,order_type])
function Init(){
const url = `/v1/${owner}/${projectsId}/issue_tags`;
axios.get(url,{
params:{
page,limit,sort_by:order_name,sort_direction:order_type
}
}).then(result=>{
if(result && result.data){
setList(result.data.issue_tags);
setTotal(result.data.total_count);
}
})
}
function arrayList(e){
const { eventKey , value , children , createName } = e.item.props;
setPage(1);
setOrderName(createName);
setOrderType(value);
setArrayName(children);
setKey(eventKey);
}
const menu = (
<Menu onClick={arrayList} selectedKeys={[`${key}`]}>
<Menu.Item key={"1"} value="desc" createName="created_at">
按疑修数量降序排序
</Menu.Item>
<Menu.Item key={"2"} value="asc" createName="created_at">
按疑修数量升序排序
</Menu.Item>
<Menu.Item key={"3"} value="desc" createName="issues_count">
按疑修数量降序排序
</Menu.Item>
<Menu.Item key={"4"} value="asc" createName="issues_count">
按疑修数量升序排序
</Menu.Item>
<Menu.Item key={"5"} value="desc" createName="pull_requests_count">
按合并请求数量降序排序
</Menu.Item>
<Menu.Item key={"6"} value="asc" createName="pull_requests_count">
按合并请求数量升序排序
</Menu.Item>
</Menu>
);
function getColor(colors){
setColors(colors);
}
function deleteFunc(){
if(editId){
const url = `/v1/${owner}/${projectsId}/issue_tags/${editId}`;
axios.delete(url).then(result=>{
if(result){
props.showNotification("项目标记删除成功!");
Init();
setDelVisible(false);
}
}).catch(error=>{})
}
}
function sureSave(){
if(!name){
setNameFlag(true);
}else{
setNameFlag(false);
if(editId){
// 编辑
const url = `/v1/${owner}/${projectsId}/issue_tags/${editId}`;
axios.patch(url,{
color: colors || defaultColor,
description: desc,
name
}).then(result=>{
if(result){
props.showNotification("标记编辑成功!");
Init();
cancel();
}
}).catch(error=>{})
}else{
// 保存
const url = `/v1/${owner}/${projectsId}/issue_tags`;
axios.post(url,{
color: colors || defaultColor,
description: desc,
name
}).then(result=>{
if(result){
props.showNotification("标记新增成功!");
Init();
cancel();
}
}).catch(error=>{})
}
}
}
function cancel(){
setNameFlag(false);
setName(undefined);
setEdit(false);
setDesc(undefined);
}
function editFunc(i){
setEditId(i.id);
setDefaultColor(i.color);
setName(i.name);
setDesc(i.description);
setEdit(true);
}
function onChangeValue(e){
setName(e.target.value);
if(e.target.value){
setNameFlag(false);
}else{
setNameFlag(true);
}
}
return(
<div>
<DelBox
visible={delVisible}
onCancel={()=>setDelVisible(false)}
onSuccess={deleteFunc}
title="删除标记"
content={<div style={{paddingTop:"3px"}}><p className="font-15 mb20">您确定要删除当前标记</p></div>}
/>
<div className="between mt30 mb25">
<span><Link to={`/${owner}/${projectsId}/issues`}>疑修</Link> / 项目标记</span>
<a className="operateButton" onClick={()=>setEdit(true)}><img src={create} alt="" className="mr5"/>创建标记</a>
</div>
{
edit &&
<div className="editbar">
<div>
<Input style={{width:"163px"}} className={nameFlag ?"inputred":""} value={name} onChange={onChangeValue} placeholder="名称15字以内"/>
{ nameFlag && <p className="red">请输入标记名称</p>}
</div>
<Input style={{width:"276px"}} value={desc} onChange={(e)=>setDesc(e.target.value)} placeholder="描述30字以内"/>
<ColorCard
getColor={getColor}
defaultColor={defaultColor}
/>
<span>
<Button type="primary" ghost onClick={sureSave}>确定</Button>
<Button ghost className="ml15" onClick={cancel}>取消</Button>
</span>
</div>
}
<div className="between bluebar">
<span className="font-17">项目标记({total || 0})</span>
<Dropdown overlay={menu} trigger={["click"]} placement="bottomRight">
<a>{arrayName}<Icon type="caret-down" className="ml5 color-grey-6" /></a>
</Dropdown>
</div>
{
list && list.length > 0 ?
<ul className="signlist">
{
list.map((i,k)=>{
return(
<li>
<p>
<span className="square mr10" style={{backgroundColor:`${i.color}`}}></span>
<i className="iconfont icon-biaoji mr3 font-12 " style={{color:`${i.color}`}}></i>
{i.name}
</p>
<p style={{flex:2}} className="task-hide">{i.description}</p>
<p>
<span className="mr12">{i.issues_count || 0} 疑修</span>
<span className="line">{i.pull_requests_count || 0} 合并请求</span>
</p>
<p>
<a className="color-blue mr12" onClick={()=>editFunc(i)}>编辑</a>
<a className="color-red line" onClick={()=>{setEditId(i.id);setDelVisible(true);}}>删除</a>
</p>
</li>
)
})
}
</ul>
:""
}
{
total > limit &&
<div style={{paddingBottom:"30px",textAlign:"center"}}>
<Pagination total={total} current={page} onChange={(p)=>setPage(p)} pageSize={limit}/>
</div>
}
{total === undefined && <div style={{height:344,display:"flex",alignItems:"center",justifyContent:"center"}}><Spin /></div> }
</div>
)
}
export default Sign;