forgeplus-react/src/forge/DevOps/Dispose.jsx

131 lines
3.4 KiB
React
Raw Normal View History

2020-07-27 18:45:18 +08:00
import React , { useState , useEffect } from 'react';
2020-08-26 16:09:27 +08:00
import { Spin } from 'antd';
2020-07-10 15:42:57 +08:00
import { Blueback } from '../Component/layout';
import Editor from "react-monaco-editor";
import Modals from './DisposeModal';
2020-08-26 16:09:27 +08:00
import FileLanguage from '../Component/OpsFileLanguage';
2021-01-06 16:03:50 +08:00
import List from './Dispose/List';
2020-07-27 18:45:18 +08:00
import axios from 'axios';
2020-07-10 15:42:57 +08:00
2020-07-27 18:45:18 +08:00
function Dispose(props){
2020-08-26 16:09:27 +08:00
const [ spining , setSpining ] = useState(true);
const [ info , setInfo ] = useState('.trustie-pipeline.yml');
2020-07-27 18:45:18 +08:00
const [ visible , setVisible ] = useState(false);
const [ ymlValue , setYmlValue ] = useState("");
2020-08-26 17:11:42 +08:00
const [ sha , setSha ] = useState(undefined);
2020-07-27 18:45:18 +08:00
const [ fileLanguage , setFileLanguage ] = useState(undefined);
const [ first , setFirst ] = useState(false);
2020-07-10 15:42:57 +08:00
2021-01-06 16:03:50 +08:00
const [ list , setList ] = useState(undefined);
useEffect(()=>{
let l = [
{name:"流水线名字",fileName:"filename.jpg",time:"2021-01-06",status:"运行中"}
]
setList(l);
},[])
2020-07-27 18:45:18 +08:00
let projectsId = props.match.params.projectsId;
2020-08-18 17:59:45 +08:00
let owner = props.match.params.owner;
2020-07-27 18:45:18 +08:00
useEffect(()=>{
if(projectsId){
2020-08-26 16:09:27 +08:00
const url = `/${owner}/${projectsId}/get_trustie_pipeline.json`;
2020-07-27 18:45:18 +08:00
axios.get(url,{
params:{
project_id:projectsId
}
}).then(result=>{
if(result && result.data.content){
2020-08-26 16:09:27 +08:00
setInfo(result.data.name);
2020-07-27 18:45:18 +08:00
setYmlValue(result.data.content);
setFirst(true);
2020-08-26 17:11:42 +08:00
setSha(result.data.sha);
2020-07-27 18:45:18 +08:00
}else{
setFirst(false);
}
2020-08-26 16:09:27 +08:00
setSpining(false);
2020-07-27 18:45:18 +08:00
}).catch(error=>{
console.log(error);
})
2020-07-15 17:17:31 +08:00
}
2020-08-26 16:09:27 +08:00
},[projectsId])
2020-07-15 17:17:31 +08:00
2020-07-27 18:45:18 +08:00
// 修改文件内容
function changeEditor(value){
setYmlValue(value);
}
// 切换语言
function select_language(value,array){
setFileLanguage(value);
setYmlValue( array && array.content);
}
// 确定提交
function submit(){
let url = '';
2020-11-24 18:00:34 +08:00
const { defaultBranch } = props;
2020-07-27 18:45:18 +08:00
let params = {
2020-11-24 18:00:34 +08:00
branch: defaultBranch,
2020-07-27 18:45:18 +08:00
content:ymlValue,
2020-08-26 16:09:27 +08:00
filepath:info,
2020-07-27 18:45:18 +08:00
message:''
}
if(first){
// 为true则是编辑否则是新建
2020-08-26 16:09:27 +08:00
url = `/${owner}/${projectsId}/update_trustie_pipeline.json`;
2020-07-27 18:45:18 +08:00
axios.put(url,{
...params,
2020-08-26 17:11:42 +08:00
sha
2020-07-27 18:45:18 +08:00
}).then(result=>{
if(result){
setVisible(true);
}
}).catch(error=>{
console.log(error);
})
}else{
2020-08-18 17:59:45 +08:00
url = `/${owner}/${projectsId}/create_file.json`;
2020-07-27 18:45:18 +08:00
axios.post(url,params).then(result=>{
if(result){
setVisible(true);
2020-07-15 17:17:31 +08:00
}
2020-07-27 18:45:18 +08:00
}).catch(error=>{
console.log(error);
2020-07-15 17:17:31 +08:00
})
}
2020-07-27 18:45:18 +08:00
}
function suresubmit(){
2020-08-26 17:11:42 +08:00
setVisible(false);
2020-08-26 16:09:27 +08:00
props.history.push(`/projects/${owner}/${projectsId}/devops/list`);
2020-07-27 18:45:18 +08:00
}
2021-01-06 16:03:50 +08:00
2020-07-27 18:45:18 +08:00
return(
2020-08-26 16:09:27 +08:00
<Spin spinning={spining}>
2020-07-27 18:45:18 +08:00
<Modals visible={visible} closeFunc={(flag)=>setVisible(flag)} sureFunc={suresubmit}></Modals>
<p>编程语言</p>
2020-08-26 16:09:27 +08:00
2020-07-27 18:45:18 +08:00
<div className="mt20 mb20">
<FileLanguage language={fileLanguage} select_language={select_language}/>
</div>
<p>配置脚本</p>
<div className="editorBody">
2020-09-10 09:47:09 +08:00
<p className="editorHead">{info}</p>
2020-07-27 18:45:18 +08:00
<Editor
height="300px"
2020-09-28 14:51:24 +08:00
language={"yml"}
2020-07-27 18:45:18 +08:00
theme={"vs-grey"}
defaultValue="请输入内容"
value={ymlValue}
options={"editor_options"}
onChange={changeEditor}
></Editor>
</div>
<Blueback onClick={submit}>确定提交</Blueback>
2021-01-06 16:03:50 +08:00
<List list={list}/>
2020-08-26 16:09:27 +08:00
</Spin>
2020-07-27 18:45:18 +08:00
)
}
export default Dispose;