2021-01-29 14:17:49 +08:00
|
|
|
|
import React , { useEffect , useState , useRef } from 'react';
|
2021-02-01 11:10:51 +08:00
|
|
|
|
import { Banner , Blueback , FlexAJ } from '../Component/layout';
|
2021-01-29 14:17:49 +08:00
|
|
|
|
import { Input , Table ,Pagination , Select , Popconfirm } from 'antd';
|
2021-02-01 11:10:51 +08:00
|
|
|
|
import { Link } from 'react-router-dom'
|
2021-01-29 14:17:49 +08:00
|
|
|
|
import styled from 'styled-components';
|
|
|
|
|
|
import axios from 'axios';
|
|
|
|
|
|
import New from './MouldNew';
|
|
|
|
|
|
|
|
|
|
|
|
const { Option } = Select;
|
|
|
|
|
|
|
|
|
|
|
|
const Div = styled.div`{
|
|
|
|
|
|
padding:24px 30px;
|
|
|
|
|
|
min-height:420px;
|
|
|
|
|
|
}`;
|
|
|
|
|
|
const STAGE = [
|
|
|
|
|
|
{stage_name:"所有",stage_type:"all"},
|
|
|
|
|
|
{stage_name:"初始化",stage_type:"init"},
|
|
|
|
|
|
{stage_name:"编译构建",stage_type:"build"},
|
|
|
|
|
|
{stage_name:"部署",stage_type:"deploy"},
|
|
|
|
|
|
{stage_name:"其他",stage_type:"customize"}
|
|
|
|
|
|
]
|
|
|
|
|
|
const limit = 15;
|
|
|
|
|
|
function Mould(props){
|
|
|
|
|
|
const [ visible ,setVisible ] = useState(false);
|
|
|
|
|
|
const [ list ,setList ] = useState(undefined);
|
|
|
|
|
|
const [ page ,setPage ] = useState(1);
|
|
|
|
|
|
const [ totalCount ,setTotalCount ] = useState(0);
|
|
|
|
|
|
const [ stageType ,setStageType ] = useState("all");
|
|
|
|
|
|
const [ search ,setSearch ] = useState(undefined);
|
|
|
|
|
|
const childRef = useRef();
|
2021-02-01 11:10:51 +08:00
|
|
|
|
let projectsId = props.match.params.projectsId;
|
|
|
|
|
|
let owner = props.match.params.owner;
|
2021-01-29 14:17:49 +08:00
|
|
|
|
useEffect(()=>{
|
|
|
|
|
|
Init(page,stageType);
|
|
|
|
|
|
},[page,stageType])
|
|
|
|
|
|
|
|
|
|
|
|
function Init(page,stageType,searchvalue){
|
|
|
|
|
|
const url = `/ci/templates/list.json`;
|
|
|
|
|
|
axios.get(url,{
|
|
|
|
|
|
params:{
|
|
|
|
|
|
page,limit,stage_type:stageType,name:searchvalue
|
|
|
|
|
|
}
|
|
|
|
|
|
}).then(result=>{
|
|
|
|
|
|
if(result && result.data){
|
|
|
|
|
|
setList(result.data.templates);
|
|
|
|
|
|
setTotalCount(result.data.total_count);
|
|
|
|
|
|
}
|
|
|
|
|
|
}).catch(error=>{})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const columns=[
|
|
|
|
|
|
{
|
|
|
|
|
|
title:"名称",
|
|
|
|
|
|
dataIndex:"template_name",
|
|
|
|
|
|
key:1,
|
|
|
|
|
|
ellipsis:true
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title:"所属阶段",
|
|
|
|
|
|
dataIndex:"stage_type",
|
|
|
|
|
|
key:2,
|
|
|
|
|
|
ellipsis:true,
|
|
|
|
|
|
render:(txt,item)=>{
|
|
|
|
|
|
let i = STAGE.filter(item=>item.stage_type === txt);
|
|
|
|
|
|
return i && i.length>0 && i[0].stage_name
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title:"模板类型",
|
|
|
|
|
|
dataIndex:"category",
|
|
|
|
|
|
key:3,
|
|
|
|
|
|
ellipsis:true
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title:"操作",
|
|
|
|
|
|
dataIndex:"operation",
|
|
|
|
|
|
key:4,
|
|
|
|
|
|
ellipsis:true,
|
|
|
|
|
|
render:(txt,item)=>{
|
|
|
|
|
|
return(
|
|
|
|
|
|
<span>
|
|
|
|
|
|
<a className="mr10 color-grey-6" onClick={()=>editMouldFunc(item)}><i className="iconfont icon-zaibianji font-13 mr3"></i>编辑</a>
|
|
|
|
|
|
<Popconfirm title={"确定要删除此模板?"} onConfirm={()=>deleteMouldFunc(item.id)} okText="确定" cancelText={"取消"}>
|
|
|
|
|
|
<a className="mr10 color-grey-6"><i className="iconfont icon-lajitong font-13 mr3"></i>删除</a>
|
|
|
|
|
|
</Popconfirm>
|
|
|
|
|
|
</span>
|
|
|
|
|
|
)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
// 编辑模板
|
|
|
|
|
|
function editMouldFunc(item){
|
|
|
|
|
|
if (childRef.current) {
|
|
|
|
|
|
childRef.current.setEditInfo(item);
|
|
|
|
|
|
}
|
|
|
|
|
|
setVisible(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 删除模板
|
|
|
|
|
|
function deleteMouldFunc(id){
|
|
|
|
|
|
const url = `/ci/templates/${id}.json`;
|
|
|
|
|
|
axios.delete(url).then(result=>{
|
|
|
|
|
|
if(result && result.data){
|
|
|
|
|
|
props.showNotification("模板删除成功!");
|
|
|
|
|
|
Init(page,stageType,search);
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function searchValue(){
|
|
|
|
|
|
Init(page,stageType,search);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function newMouldFunc(){
|
|
|
|
|
|
if (childRef.current) {
|
|
|
|
|
|
childRef.current.setEditInfo(undefined);
|
|
|
|
|
|
}
|
|
|
|
|
|
setVisible(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function onOk(){
|
|
|
|
|
|
Init(page,"all");
|
|
|
|
|
|
}
|
|
|
|
|
|
return(
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<New wrappedComponentRef={(f) => childRef.current = f} ref={childRef} visible={visible} onCancel={()=>setVisible(false)} onOk={onOk}></New>
|
2021-02-01 11:10:51 +08:00
|
|
|
|
<Banner>
|
|
|
|
|
|
<FlexAJ><span>工作流 - 模板管理</span><Link to={`/projects/${owner}/${projectsId}/devops/dispose`} className="font-14 color-grey-9">返回</Link></FlexAJ>
|
|
|
|
|
|
</Banner>
|
2021-01-29 14:17:49 +08:00
|
|
|
|
<Div className="disposeList">
|
|
|
|
|
|
<FlexAJ>
|
|
|
|
|
|
<Blueback onClick={newMouldFunc}>新建模板</Blueback>
|
|
|
|
|
|
<FlexAJ>
|
|
|
|
|
|
<span className="mr10">阶段:</span>
|
|
|
|
|
|
<Select onChange={e=>setStageType(e)} value={stageType} style={{width:"180px"}}>
|
|
|
|
|
|
{
|
|
|
|
|
|
STAGE.map((item,key)=>{
|
|
|
|
|
|
return(
|
|
|
|
|
|
<Option value={item.stage_type}>{item.stage_name}</Option>
|
|
|
|
|
|
)
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
</Select>
|
|
|
|
|
|
<Input placeholder="请输入模板名称" value={search} onChange={(e)=>setSearch(e.target.value)} allowClear style={{width:"160px",marginLeft:"15px"}}/>
|
|
|
|
|
|
<Blueback className="ml15" onClick={searchValue}>搜索</Blueback>
|
|
|
|
|
|
</FlexAJ>
|
|
|
|
|
|
</FlexAJ>
|
|
|
|
|
|
<Table className="mt20" size="small" columns={columns} dataSource={list} rowKey={(row)=>row.id} pagination={false}></Table>
|
|
|
|
|
|
{
|
|
|
|
|
|
totalCount > limit &&
|
|
|
|
|
|
<div className="mt20 pb20" style={{textAlign:'center'}}>
|
|
|
|
|
|
<Pagination simple current={page} pageSize={limit} total={totalCount} onChange={(page)=>setPage(page)}/>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
}
|
|
|
|
|
|
</Div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
)
|
|
|
|
|
|
}
|
|
|
|
|
|
export default Mould;
|