forgeplus-react/src/forge/Settings/Setting.js

248 lines
7.0 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, { Component } from "react";
import { Form, Input, Checkbox, Select } from "antd";
import Title from '../Component/Title';
import Mirror from './SettingMirror';
import {WhiteBack} from '../Component/layout';
import axios from "axios";
import "./setting.scss";
const { TextArea } = Input;
const { Option } = Select;
class Setting extends Component {
constructor(props) {
super(props);
this.state = {
CategoryList: undefined,
LanguageList: undefined,
private_check: undefined,
};
}
componentDidUpdate=(prevPros)=>{
if(prevPros && this.props && !this.props.checkIfLogin()){
this.props.history.push("/403")
return
}
}
componentDidMount = () => {
this.getCategory();
this.getLanguage();
this.getInfo();
};
getLanguage = () => {
const url = `/project_languages.json`;
axios
.get(url)
.then((result) => {
if (result) {
let LanguageList = this.setOptionsList(result.data.project_languages);
this.setState({
LanguageList,
});
}
})
.catch((error) => {});
};
getInfo = () => {
const { projectsId , owner } = this.props.match.params;
const url = `/${owner}/${projectsId}/edit.json`;
axios
.get(url)
.then((result) => {
if (result) {
this.props.form.setFieldsValue({
...result.data,
});
this.setState({
private_check: result.data.private,
});
}
})
.catch((error) => {
console.log(error);
});
};
getCategory = () => {
const url = `/project_categories.json`;
axios
.get(url)
.then((result) => {
if (result) {
let CategoryList = this.setOptionsList(
result.data.project_categories
);
this.setState({
CategoryList,
});
}
})
.catch((error) => {});
};
setOptionsList = (data) => {
let list = undefined;
if (data && data.length > 0) {
list = data.map((item, key) => {
return (
<Option key={item.id} value={item.id}>
{item.name}
</Option>
);
});
}
return list;
};
// 更新仓库设置
resetSetting = () => {
this.props.form.validateFields((err, values) => {
if (!err) {
const { projectsId , owner } = this.props.match.params;
const { private_check } = this.state;
const url = `/${owner}/${projectsId}.json`;
axios
.put(url, {
name: values.project_name,
description: values.project_description,
private: private_check,
...values,
})
.then((result) => {
if (result) {
this.props.showNotification(`仓库信息修改成功!`);
const { getDetail } = this.props;
getDetail && getDetail();
}
})
.catch((error) => {
console.log(error);
});
}
});
};
// 删除本仓库
deleteProject = () => {
this.props.confirm({
content: "删除后无法恢复,是否确认删除本仓库?",
onOk: () => {
const { projectsId , owner } = this.props.match.params;
const url = `/${owner}/${projectsId}.json`;
axios
.delete(url)
.then((result) => {
this.props.showNotification("仓库删除成功!");
this.props.history.push("/projects");
})
.catch((error) => {
console.log(error);
});
},
});
};
changePrivate = (e) => {
this.setState({
private_check: e.target.checked,
});
};
render() {
const { getFieldDecorator } = this.props.form;
const { CategoryList, LanguageList, private_check } = this.state;
return (
<div>
<WhiteBack>
<Title>基本设置</Title>
<Form className="baseForm">
<Form.Item label="项目名称">
{getFieldDecorator("project_name", {
rules: [
{
required: true,
message: "请输入项目名称",
},
],
})(<Input placeholder="请输入项目名称" />)}
</Form.Item>
<div className="df" style={{ alignItems: "center" }}>
<span className="mr20 mb15 font-16">可见性</span>
<Form.Item label="">
{getFieldDecorator("private", {
rules: [],
})(
<Checkbox
checked={private_check}
onChange={this.changePrivate}
>
将仓库设为私有
</Checkbox>
)}
</Form.Item>
</div>
<Form.Item label="仓库描述">
{getFieldDecorator("project_description", {
rules: [],
})(
<TextArea
placeholder="请输入仓库描述"
style={{ height: "80px" }}
/>
)}
</Form.Item>
<Form.Item label="项目类别">
{getFieldDecorator("project_category_id", {
rules: [
{
required: true,
message: "请选择大类别",
},
],
})(<Select>{CategoryList}</Select>)}
</Form.Item>
<Form.Item label="项目语言">
{getFieldDecorator("project_language_id", {
rules: [
{
required: true,
message: "请选择项目语言",
},
],
})(<Select>{LanguageList}</Select>)}
</Form.Item>
<p className="clearfix">
<a className="submitBtn" onClick={this.resetSetting}>
更新仓库设置
</a>
</p>
</Form>
{/* 镜像设置部分,暂无接口,先不显示 */}
{/* <Mirror /> */}
</WhiteBack>
<WhiteBack className="dangerousBox mb20">
<div>
<div className="dangerousTitle">危险操作区</div>
<div className="flex-a-center padding15-10">
<div>
<p className="font-bd font-16">删除本仓库</p>
<p className="mt10">
删除仓库是永久性的,
无法撤消且删除后与仓库关联的项目/任务/合并请求/版本发布等均会被删除
</p>
</div>
<a onClick={this.deleteProject} className="red_deleteBtn">
删除本仓库
</a>
</div>
</div>
</WhiteBack>
</div>
);
}
}
const WrappedSettingIndexForm = Form.create({ name: "settingForm" })(Setting);
export default WrappedSettingIndexForm;