diff --git a/src/AppConfig.js b/src/AppConfig.js
index 328579998..dc23caeff 100644
--- a/src/AppConfig.js
+++ b/src/AppConfig.js
@@ -32,7 +32,8 @@ export function initAxiosInterceptors(props) {
// 判断网络是否连接
initOnlineOfflineListener();
- var proxy = "http://172.16.100.220:81";
+ // var proxy = "http://172.16.100.220:81";
+ var proxy = 'http://172.16.100.130:81'
//响应前的设置
axios.interceptors.request.use(
config => {
diff --git a/src/forge/Head/AddProjectModal.jsx b/src/forge/Head/AddProjectModal.jsx
index 8e3073e30..9c8f100fc 100644
--- a/src/forge/Head/AddProjectModal.jsx
+++ b/src/forge/Head/AddProjectModal.jsx
@@ -1,84 +1,270 @@
-import React, { useState , forwardRef, useEffect } from 'react';
-import { Form , Modal , Input , Radio } from 'antd';
+import React, { useState, forwardRef, useEffect } from 'react';
+import { Form, Modal, Input, Radio, Upload, Button, Icon, message } from 'antd';
import Axios from 'axios';
+import { getUploadActionUrl, appendFileSizeToUploadFileAll } from 'educoder';
-export default Form.create()(
- forwardRef((props)=>{
- const { getFieldDecorator, validateFields , setFieldsValue } = props && props.form;
- const [ visible , setVisible ] = useState(false);
+const JoinProjectForm = Form.create({
+ name: 'join_project_form',
+})(
+ forwardRef((props) => {
+ const { getFieldDecorator, validateFields } = props.form;
+ const { onOk, onCancel } = props;
- useEffect(()=>{
- if(!visible){
- setFieldsValue({
- code:undefined,
- role:"developer"
- })
+ useEffect(() => {
+ if (props.visible) {
+ props.form.setFieldsValue({
+ code: '',
+ role: 'developer',
+ });
}
- },[visible])
+ }, [props.visible])
- function onOk() {
- validateFields((error,values)=>{
- if(!error){
- const url = `/applied_projects.json`;
- Axios.post(url,{
- applied_project:{
- ...values
- }
- }).then(result=>{
- if(result && result.data){
- setVisible(false);
- props.showNotification("申请加入项目成功,等待审核!");
- }
- }).catch(error=>{})
- }
- })
- }
- function checkValue(rule, value, callback){
- if(!value){
+ function checkValue(rule, value, callback) {
+ if (!value) {
callback();
}
- if(value.length < 6 || value.length > 6){
- callback("请输入6位数的邀请码");
+ if (value.length < 6 || value.length > 6) {
+ callback('请输入6位数的邀请码');
}
callback();
- }
+ }
- return(
-
- setVisible(false)}
- >
-
- {getFieldDecorator("code",{
- rules:[
- {required:true,message:"请输入6位项目邀请码"},
- {validator:checkValue}
- ]
- })(
-
- )}
-
-
- {getFieldDecorator("role",{
- rules:[{required:true,message:"请选择角色"}]
- })(
-
- 管理员
- 开发者
- 报告者
-
- )}
-
-
-
- setVisible(true)}>加入项目
-
- )
+ const handleOk = () => {
+ validateFields((error, values) => {
+ if (!error) {
+ onOk(values);
+ }
+ });
+ };
+
+ return (
+
+
+ {getFieldDecorator('code', {
+ rules: [
+ { required: true, message: '请输入6位项目邀请码' },
+ { validator: checkValue },
+ ],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('role', {
+ rules: [{ required: true, message: '请选择角色' }],
+ })(
+
+ 管理员
+ 开发者
+ 报告者
+
+ )}
+
+
+
+ );
})
-)
\ No newline at end of file
+);
+
+const PersonalInfoForm = Form.create({
+ name: 'personal_info_form',
+})(
+ forwardRef((props) => {
+ const { getFieldDecorator, validateFields } = props.form;
+ const { onOk, onCancel, contentFileList, uploadProps } = props;
+
+ useEffect(() => {
+ if (props.visible) {
+ props.form.setFieldsValue({
+ remarks: '',
+ attachment_id: '',
+ });
+ }
+ }, [props.visible])
+
+ const handleOk = () => {
+ validateFields((error, values) => {
+ if (!error) {
+ const attachmentId = contentFileList.map((item) => {
+ return item.response ? item.response.id : item.id;
+ });
+ onOk({ ...values, attachment_id: attachmentId.join(',') });
+ }
+ });
+ };
+
+ return (
+
+
+ {getFieldDecorator('remarks', {
+ rules: [{ required: true, message: '请输入个人情况' }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('attachment_id', {
+ rules: [],
+ })(
+
+
+ (单个文件最大20MB)
+
+ )}
+
+
+
+ );
+ })
+);
+
+export default forwardRef((props) => {
+ const [visible, setVisible] = useState(false);
+ const [infoVis, setInfoVis] = useState(false);
+ const [contentFileList, setContentFileList] = useState([]);
+ // 新增状态用于保存加入项目表单的数据
+ const [joinProjectValues, setJoinProjectValues] = useState({});
+
+ const uploadProps = {
+ fileList: contentFileList,
+ multiple: false,
+ action: `${getUploadActionUrl()}`,
+ onChange: (info) => {
+ let content = info.fileList;
+ setContentFileList(appendFileSizeToUploadFileAll(content));
+ },
+ onRemove: (file) => {
+ if (file.response != undefined) {
+ Modal.confirm({
+ content: '是否确认删除?',
+ onOk: () => {
+ deleteAttachment(file);
+ },
+ onCancel() {
+ console.log('Cancel');
+ },
+ });
+ return false;
+ }
+ },
+ beforeUpload: (file) => {
+ console.log('beforeUpload', file.name);
+ const isLt150M = file.size / 1024 / 1024 <= 20;
+ if (!isLt150M) {
+ message.error('文件大小必须不超过20MB!');
+ }
+ return isLt150M;
+ },
+ };
+
+ const deleteAttachment = (file) => {
+ const url = `/attachments/${file.response ? file.response.id : file.uid}.json`;
+ Axios.delete(url, {})
+ .then((response) => {
+ if (response.data) {
+ const { status } = response.data;
+ if (status === 0) {
+ setContentFileList([]);
+ }
+ }
+ })
+ .catch((error) => {
+ console.log(error);
+ });
+ };
+
+ const handleJoinProjectOk = (values) => {
+ const url = `/applied_projects.json`;
+ setJoinProjectValues({ ...values })
+ Axios.post(url, {
+ applied_project: {
+ alert_remarks: false,
+ ...values,
+ },
+ })
+ .then((result) => {
+ if (result) {
+ setVisible(false);
+ if (result.data.join_project_need_verify) {
+ setInfoVis(true);
+ } else {
+ props.showNotification('申请已提交,请等待项目管理者审核!');
+ }
+ }
+ })
+ .catch((error) => {
+ console.log(error);
+ });
+ };
+
+ const handlePersonalInfoOk = (values) => {
+ const url = `/applied_projects.json`;
+ let attachmentId = contentFileList.map(item => {
+ return item.response ? item.response.id : item.id
+ })
+ Axios.post(url, {
+ personal_info: {
+ ...joinProjectValues,
+ alert_remarks: true,
+ ...values,
+ attachment_id: attachmentId.join(','),
+ },
+ })
+ .then((result) => {
+ if (result && result.data) {
+ setInfoVis(false);
+ setContentFileList([]);
+ props.showNotification('申请已提交,请等待项目管理者审核!');
+ }
+ })
+ .catch((error) => {
+ console.log(error);
+ });
+ };
+
+ return (
+
+ setVisible(false)}
+ />
+ setInfoVis(false)}
+ contentFileList={contentFileList}
+ uploadProps={uploadProps}
+ />
+ setVisible(true)}>加入项目
+
+ );
+});
\ No newline at end of file
diff --git a/src/forge/Head/header.scss b/src/forge/Head/header.scss
index 812280107..08b1cf29b 100644
--- a/src/forge/Head/header.scss
+++ b/src/forge/Head/header.scss
@@ -152,4 +152,17 @@
width: 110px;
text-align: right;
}
+}
+
+.inviteForm2{
+ .ant-form-item{
+ margin-right: 0px;
+ display:flex;
+ flex-wrap: nowrap;
+
+ }
+ .ant-form-item-label{
+ width: 92px;
+ text-align: right;
+ }
}
\ No newline at end of file
diff --git a/src/forge/Main/Index.js b/src/forge/Main/Index.js
index 3c3ffe9a8..27bfe9a06 100644
--- a/src/forge/Main/Index.js
+++ b/src/forge/Main/Index.js
@@ -32,14 +32,15 @@ class Index extends Component {
recommendList:undefined,
languageList:undefined,
- languageId:undefined
+ languageId:undefined,
+ filter:undefined,
}
}
componentDidMount = () => {
- const { page, limit, search, sort, project_type, category_id , languageId } = this.state;
- this.getListData(page, limit, search, sort, project_type, category_id , languageId);
+ const { page, limit, search, sort, project_type, category_id , languageId,filter } = this.state;
+ this.getListData(page, limit, search, sort, project_type, category_id , languageId,filter);
this.getType();
@@ -74,7 +75,7 @@ class Index extends Component {
}
// 获取列表
- getListData = (page, limit, search, sort, project_type, category_id,languageId) => {
+ getListData = (page, limit, search, sort, project_type, category_id,languageId,filter) => {
const { current_user } = this.props;
const url = `/projects.json`;
axios.get(url, {
@@ -86,7 +87,8 @@ class Index extends Component {
sort_by: sort,
project_type,
category_id,
- language_id:languageId
+ language_id:languageId,
+ filter
}
}).then((result) => {
if (result) {
@@ -132,8 +134,8 @@ class Index extends Component {
search: undefined
})
this.setTypeList(list, type)
- const { page, limit, sort, category_id , languageId } = this.state;
- this.getListData(page, limit, undefined, sort, type, category_id , languageId);
+ const { page, limit, sort, category_id , languageId,filter } = this.state;
+ this.getListData(page, limit, undefined, sort, type, category_id , languageId,filter);
}
// 获取类型
@@ -168,8 +170,8 @@ class Index extends Component {
page: 1
});
this.setCategoryList(list, id)
- const { limit, sort, project_type , languageId } = this.state;
- this.getListData(1, limit, undefined, sort, project_type, id , languageId);
+ const { limit, sort, project_type , languageId,filter } = this.state;
+ this.getListData(1, limit, undefined, sort, project_type, id , languageId,filter);
}
// 排序
@@ -180,8 +182,8 @@ class Index extends Component {
search: undefined,
isSpin: true
})
- const { limit, project_type, category_id , languageId } = this.state;
- this.getListData(1, limit, undefined, e.key, project_type, category_id , languageId);
+ const { limit, project_type, category_id , languageId,filter } = this.state;
+ this.getListData(1, limit, undefined, e.key, project_type, category_id , languageId,filter);
}
// 搜索
@@ -193,8 +195,8 @@ class Index extends Component {
project_type: undefined,
sort: "updated_on"
})
- const { limit, sort, category_id , languageId } = this.state;
- this.getListData(1, limit, value, sort, undefined, category_id , languageId);
+ const { limit, sort, category_id , languageId ,filter} = this.state;
+ this.getListData(1, limit, value, sort, undefined, category_id , languageId,filter);
}
changeSearchValue = (e) => {
this.setState({
@@ -206,8 +208,8 @@ class Index extends Component {
this.setState({
page
})
- const { limit, search, sort, project_type, category_id , languageId } = this.state;
- this.getListData(page, limit, search, sort, project_type, category_id , languageId);
+ const { limit, search, sort, project_type, category_id , languageId,filter } = this.state;
+ this.getListData(page, limit, search, sort, project_type, category_id , languageId,filter);
}
getoDetail=(login,identifier)=>{
@@ -220,8 +222,17 @@ class Index extends Component {
isSpin:true,
languageId:e === 0 ?undefined:e
})
- const { page, limit, sort , project_type , category_id } = this.state;
- this.getListData(page, limit, undefined, sort, project_type, category_id ,e === 0 ?undefined:e);
+ const { page, limit, sort , project_type , category_id,filter } = this.state;
+ this.getListData(page, limit, undefined, sort, project_type, category_id ,e === 0 ?undefined:e,filter);
+ }
+
+ changeFilter=(e)=>{
+ this.setState({
+ isSpin:true,
+ filter:e
+ })
+ const { page,limit, search, sort, project_type, category_id , languageId } = this.state;
+ this.getListData(page, limit, search, sort, project_type, category_id , languageId,e);
}
menu =()=> {
@@ -282,7 +293,7 @@ class Index extends Component {
{
recommendList && recommendList.length>0 &&
- {
+ {/* {
recommendList.map((item,key)=>{
return(
this.getoDetail(item.author && item.author.login,item.identifier)}>
@@ -298,7 +309,7 @@ class Index extends Component {
)
})
- }
+ } */}
}
@@ -315,6 +326,11 @@ class Index extends Component {
+
+
+
+
+