diff --git a/src/forge/DevOps/Dispose.jsx b/src/forge/DevOps/Dispose.jsx index 28a714f9..88714d21 100644 --- a/src/forge/DevOps/Dispose.jsx +++ b/src/forge/DevOps/Dispose.jsx @@ -39,7 +39,7 @@ function Dispose(props){ const url = `/ci/pipelines/list.json`; axios.get(url,{ params:{ - identifier:projectsId, + identifier:projectsId,owner, page,limit } }).then(result=>{ @@ -65,25 +65,33 @@ function Dispose(props){ } },[owner,projectsId]) - // 新增流水线 + // 新增/编辑流水线 function addNew(pipeline_name,id,branch,event){ setVisible(true); setUpdateInfo(undefined); if(pipeline_name){ - let l = {pipeline_name,id,branch,event} + let eventA = event.split(","); + let l = {pipeline_name,id,branch,event:eventA} setUpdateInfo(l); + }else{ + setUpdateInfo(undefined); } } function onOk(pipeline_name,updateId,branch,event){ if(pipeline_name){ + let eventStr = ""; + for(var i = 0;i{ setVisible(false); if(result && result.data){ @@ -97,7 +105,7 @@ function Dispose(props){ // 修改 const url = `/ci/pipelines/${updateId}.json`; axios.put(url,{ - pipeline_name,repo:projectsId,branch,event,owner + pipeline_name,repo:projectsId,branch,event:eventStr,owner }).then(result=>{ if(result && result.data){ setVisible(false); @@ -126,7 +134,7 @@ function Dispose(props){ // 模板管理 function toModalManage(){ - props.history.push(`/projects/cxt/DevOps-mo/devops/mould`); + props.history.push(`/projects/${owner}/${projectsId}/devops/mould`); } const operate = current_user && (permission && permission !== "Reporter"); diff --git a/src/forge/DevOps/Dispose/List.jsx b/src/forge/DevOps/Dispose/List.jsx index 334d5e4f..b218281d 100644 --- a/src/forge/DevOps/Dispose/List.jsx +++ b/src/forge/DevOps/Dispose/List.jsx @@ -17,7 +17,6 @@ function List({ list, operate , projectsId , owner , showModal , deleteFunc }){ title:"流水线名称", dataIndex:"pipeline_name", key:1, - width:"19%", ellipsis:true, render:(txt,item)=>{ return( @@ -30,14 +29,25 @@ function List({ list, operate , projectsId , owner , showModal , deleteFunc }){ dataIndex:"file_name", key:1, width:"15%", - className:"color-blue", + ellipsis:true, + render:(value,item)=>{ + return( + {value} + ) + } + }, + { + title:"触发分支", + dataIndex:"branch", + key:1, + width:"10%", ellipsis:true }, { - title:"创建时间", - dataIndex:"created_at", + title:"触发事件", + dataIndex:"event", key:1, - width:"15%", + width:"10%", ellipsis:true }, { @@ -51,7 +61,7 @@ function List({ list, operate , projectsId , owner , showModal , deleteFunc }){ title:"最近构建状态", dataIndex:"pipeline_status", key:1, - width:"15%", + width:"10%", ellipsis:true, render:(txt)=>{ return(STATUS[txt]) diff --git a/src/forge/DevOps/Dispose/PipelineName.jsx b/src/forge/DevOps/Dispose/PipelineName.jsx index 1a532fd4..3cf7f96a 100644 --- a/src/forge/DevOps/Dispose/PipelineName.jsx +++ b/src/forge/DevOps/Dispose/PipelineName.jsx @@ -6,7 +6,7 @@ const EVENT = ["push","pull_request","tag","cron","custom","promote","rollback"] function PipelineName({visible,onCancel,onOk,value ,branchList}){ const [ name , setName ] = useState(undefined); const [ branchValue , setBranchValue ] = useState(undefined); - const [ eventValue , setEventValue ] = useState(EVENT[0]); + const [ eventValue , setEventValue ] = useState([EVENT[0]]); useEffect(()=>{ if(branchList && branchList.length>0){ @@ -19,6 +19,8 @@ function PipelineName({visible,onCancel,onOk,value ,branchList}){ setName(value.pipeline_name); setBranchValue(value.branch); setEventValue(value.event); + }else{ + setName(undefined); } },[value]) @@ -40,7 +42,7 @@ function PipelineName({visible,onCancel,onOk,value ,branchList}){
触发条件: - setBranchValue(e)}> { branchList && branchList.length>0 && branchList.map((item,key)=>{ return( @@ -49,7 +51,7 @@ function PipelineName({visible,onCancel,onOk,value ,branchList}){ }) } - {console.log(e);setEventValue(e)}}> { EVENT.map((item,key)=>{ return( diff --git a/src/forge/DevOps/Mould.jsx b/src/forge/DevOps/Mould.jsx index 41b50eda..933299d6 100644 --- a/src/forge/DevOps/Mould.jsx +++ b/src/forge/DevOps/Mould.jsx @@ -1,6 +1,7 @@ import React , { useEffect , useState , useRef } from 'react'; -import { Banner , Blueback , FlexAJ , Spin } from '../Component/layout'; +import { Banner , Blueback , FlexAJ } from '../Component/layout'; import { Input , Table ,Pagination , Select , Popconfirm } from 'antd'; +import { Link } from 'react-router-dom' import styled from 'styled-components'; import axios from 'axios'; import New from './MouldNew'; @@ -27,6 +28,8 @@ function Mould(props){ const [ stageType ,setStageType ] = useState("all"); const [ search ,setSearch ] = useState(undefined); const childRef = useRef(); + let projectsId = props.match.params.projectsId; + let owner = props.match.params.owner; useEffect(()=>{ Init(page,stageType); },[page,stageType]) @@ -117,12 +120,14 @@ function Mould(props){ } function onOk(){ - Init(page,"all"); + Init(page,stageType); } return(
childRef.current = f} ref={childRef} visible={visible} onCancel={()=>setVisible(false)} onOk={onOk}> - 工作流 - 模板管理 + + 工作流 - 模板管理返回 +
新建模板 diff --git a/src/forge/DevOps/MouldNew.jsx b/src/forge/DevOps/MouldNew.jsx index cf6465bf..a0d7a465 100644 --- a/src/forge/DevOps/MouldNew.jsx +++ b/src/forge/DevOps/MouldNew.jsx @@ -12,8 +12,9 @@ function MouldNew({ form , visible , onCancel , onOk }, ref){ const [isSpin , setIsSpin ] = useState(false); const [valueFlag , setValueFlag ] = useState(false); const [ id , setId ] = useState(false); + const [ buildFlag , setBuildFlag ] = useState(false); - const { getFieldDecorator, validateFields , setFieldsValue , getFieldsValue } = form; + const { getFieldDecorator, validateFields , setFieldsValue } = form; useImperativeHandle(ref, () => ({ setEditInfo: (info) => { @@ -21,9 +22,18 @@ function MouldNew({ form , visible , onCancel , onOk }, ref){ setFieldsValue({ ...info }) + if(info.stage_type === "build"){ + setBuildFlag(true); + setFieldsValue({ + category:TYPE[0] + }) + }else{ + removeCate(); + } setValue(info.content); setId(info.id); }else{ + removeCate(); clear(); setId(undefined); } @@ -32,7 +42,7 @@ function MouldNew({ form , visible , onCancel , onOk }, ref){ const helper = useCallback( (label, name, rules, widget, className, isRequired,flag) => ( - + {getFieldDecorator(name, { rules, validateFirst: true , valuePropName:flag ? "checked":"value" })(widget)} ), @@ -58,7 +68,7 @@ function MouldNew({ form , visible , onCancel , onOk }, ref){ setIsSpin(true); const url = `/ci/templates.json`; axios.post(url,{ - ...values,id,content:value + ...values,id,content:value,category:buildFlag ? values.category:"" }).then(result=>{ if(result && result.data){ setIsSpin(false); @@ -71,13 +81,31 @@ function MouldNew({ form , visible , onCancel , onOk }, ref){ } function clear(){ setFieldsValue({ - stage_type:"all", + stage_type:"init", template_name:undefined, category:"Java", }) setValue(""); setValueFlag(false); } + + function changeStage(e){ + if(e === "build"){ + setBuildFlag(true); + setFieldsValue({ + category:TYPE[0] + }) + }else{ + removeCate(); + } + } + + function removeCate(){ + setBuildFlag(false); + setFieldsValue({ + category:"" + }) + } return( - + ,true + )} {helper( "模板名称", "template_name", [{required:true,message:"请输入模板名称"}], - ,true + )} {helper( "模板分类", "category", - [{required:true,message:"请选择模板分类"}], + [{required:buildFlag,message:"请选择模板分类"}], ,true + ,buildFlag===true ? "" :"hide" )}
* 模板内容: diff --git a/src/forge/DevOps/disposePipeline.jsx b/src/forge/DevOps/disposePipeline.jsx index f39f7e6f..1da142f6 100644 --- a/src/forge/DevOps/disposePipeline.jsx +++ b/src/forge/DevOps/disposePipeline.jsx @@ -34,7 +34,7 @@ function disposePipeline(props){ function InitTemplates(){ const url = `/ci/templates/templates_by_stage.json`; axios.get(url,{ - params:{ stage_type:stageType } + params:{ stage_type:stageType, id:disposeId } }).then(result=>{ if(result && result.data){ setTemplates(result.data); @@ -261,9 +261,8 @@ function disposePipeline(props){ // 确认提交 function sureSubmit(){ setLoading(true); - const { defaultBranch } = props; let params = { - branch: defaultBranch, + branch: datas.branch, content:datas.content, filepath:'.trustie-pipeline.yml', message:'', diff --git a/src/forge/DevOps/ops.scss b/src/forge/DevOps/ops.scss index 17832e6a..79c02fd4 100644 --- a/src/forge/DevOps/ops.scss +++ b/src/forge/DevOps/ops.scss @@ -454,6 +454,12 @@ background-color: #1890FF; } } + .ant-select-selection.ant-select-selection--multiple{ + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + height: 35px; + } } .addBtn{ display: block; @@ -500,4 +506,7 @@ width: 336px!important; } } +} +.hide{ + display: none!important; } \ No newline at end of file diff --git a/src/forge/DevOps/opsDetail.jsx b/src/forge/DevOps/opsDetail.jsx index 92f620a7..6ac3dc44 100644 --- a/src/forge/DevOps/opsDetail.jsx +++ b/src/forge/DevOps/opsDetail.jsx @@ -87,7 +87,7 @@ export default (props) => { 退出 diff --git a/src/forge/users/CIList.jsx b/src/forge/users/CIList.jsx index 7d678b93..a4e0331c 100644 --- a/src/forge/users/CIList.jsx +++ b/src/forge/users/CIList.jsx @@ -62,7 +62,7 @@ function CIList(props){ return(
  • - {item.name} + {item.name} { item.open_devops ? 已激活 :