From 0b43fa89526e976cf73efd0f03b3548108d2220b Mon Sep 17 00:00:00 2001
From: caishi <1149225589@qq.com>
Date: Thu, 6 May 2021 17:12:42 +0800
Subject: [PATCH] merge develop
---
public/css/edu-purge.css | 6 +
src/forge/Divert/DivertModal.jsx | 174 +++++++++++++++++++
src/forge/Head/Header.js | 8 +-
src/forge/Head/header.scss | 8 +-
src/forge/New/Index.js | 44 +++--
src/forge/Order/order_form.js | 2 +-
src/forge/Team/Group/GroupForm.jsx | 23 ++-
src/forge/Team/New.jsx | 30 ++--
src/forge/Team/Setting/TeamSettingCommon.jsx | 43 ++++-
src/forge/users/Index.scss | 7 +-
src/forge/users/Team-item.jsx | 2 +-
11 files changed, 295 insertions(+), 52 deletions(-)
create mode 100644 src/forge/Divert/DivertModal.jsx
diff --git a/public/css/edu-purge.css b/public/css/edu-purge.css
index ac97837fc..009810a66 100644
--- a/public/css/edu-purge.css
+++ b/public/css/edu-purge.css
@@ -6702,4 +6702,10 @@ ul.count_ul li:not(:last-child):after {
}
input.ant-input-lg::placeholder{
font-size: 14px !important;
+}
+.toprightNum{
+ position: absolute;
+ right: 0px;
+ top:4px;
+ color: #999;
}
\ No newline at end of file
diff --git a/src/forge/Divert/DivertModal.jsx b/src/forge/Divert/DivertModal.jsx
new file mode 100644
index 000000000..dd9475010
--- /dev/null
+++ b/src/forge/Divert/DivertModal.jsx
@@ -0,0 +1,174 @@
+import React ,{ forwardRef, useEffect, useState } from 'react';
+import { Modal , Form , Input , Radio , Select } from 'antd';
+import SearchUser from '../Component/SearchUser';
+import './Index.scss';
+import Axios from 'axios';
+
+const { Option } = Select;
+function DivertModal({form , visible , onSuccess , onCancel,owner,repo}){
+ const { getFieldDecorator, validateFields , setFieldsValue } = form;
+ const [ cate , setCate ] = useState(0);
+ const [ value , setValue ] = useState(undefined);
+
+ const [ organizations , setOrganizations ] = useState(undefined);
+
+ useEffect(()=>{
+ setFieldsValue({goal:cate})
+ },[])
+
+ useEffect(()=>{
+ if(owner && repo && visible===true){
+ getTeam();
+ }
+ if(!visible){
+ setFieldsValue({
+ owner_name:undefined,
+ identifier:undefined
+ })
+ setValue(undefined)
+ }
+ },[repo,owner,visible])
+
+ function getTeam(){
+ const url = `/${owner}/${repo}/applied_transfer_projects/organizations.json`;
+ Axios.get(url).then(result=>{
+ if(result){
+ setOrganizations(result.data.organizations);
+ }
+ }).catch(error=>{})
+ }
+
+ // 确认转移
+ function onOk(){
+ validateFields((error,values)=>{
+ console.log(...values);
+ if(!error){
+ const url = `/${owner}/${repo}/applied_transfer_projects.json`;
+ Axios.post(url,{
+ ...values
+ }).then(result=>{
+ if(result){
+ onSuccess(result.data && result.data.owner);
+ }
+ }).catch(error=>{})
+ }
+ })
+
+ }
+ function changeType(e){
+ setCate(e.target.value);
+ setFieldsValue({
+ owner_name:undefined
+ })
+ }
+
+ function checkIdentifier(rule, value, callback){
+ if(!value){
+ callback();
+ }
+ if (repo && value !== repo) {
+ callback("请输入当前项目的标识!");
+ }
+ callback();
+ }
+
+ const layout = {
+ labelCol: { span: 5 },
+ wrapperCol: { span: 18 },
+ };
+
+ function getUser(id){
+ setValue(id);
+ setFieldsValue({
+ owner_name:id
+ })
+ }
+ return(
+
+
+ {
+ cate === 0 ?
+
+ - 转移需对方确认接受,转移成功后你将被移出仓库,其他已有成员权限不变
+ - 转移成功后,仓库的地址将变更至目标用户的命名空间下
+ - 已有成员如需继续操作仓库,需更新本地仓库的remote,使之指向新的地址
+
+ :
+
+ - 仓库仅可以转移到您已经加入的组织中,不可以转移到未加入的组织中
+ - 涉及到仓库改名操作,请提前做好仓库备份并且在转移后对本地仓库的remote进行修改
+ - 转移仓库到组织后,你和组织创建者/管理员同时拥有对该仓库的管理操作
+
+ }
+
+ {getFieldDecorator("goal",{
+ rules:[]
+ })(
+
+ 个人
+ 组织
+
+ )}
+
+ {
+ cate === 0 &&
+
+ {getFieldDecorator("owner_name",{
+ rules:[{required:true,message:"请输入目标用户名"}]
+ })(
+ //
+
+ )}
+
+ }
+ {
+ cate === 1 &&
+
+ {getFieldDecorator("owner_name",
+ {rules:[{required:true,message:"请选择目标组织"}]}
+ )(
+
+ )}
+
+ }
+
+
+ {getFieldDecorator("identifier",
+ {
+ rules:[
+ {required:true,message:"请输入仓库名称"},
+ {
+ validator:checkIdentifier
+ }
+ ]
+ }
+ )(
+
+ )}
+
+
+
+
+ )
+}
+export default Form.create()(forwardRef(DivertModal));
\ No newline at end of file
diff --git a/src/forge/Head/Header.js b/src/forge/Head/Header.js
index 9ff4f559d..e76fc8147 100644
--- a/src/forge/Head/Header.js
+++ b/src/forge/Head/Header.js
@@ -2,16 +2,14 @@ import React, { Component } from 'react';
import AccountProfile from "../../modules/user/AccountProfile";
import { getImageUrl } from 'educoder'
import axios from 'axios';
-import { Modal, Input, message, notification , Dropdown , Menu ,Divider } from 'antd';
+import { Modal, Input, message, notification , Dropdown , Menu } from 'antd';
import LoginDialog from '../../modules/login/LoginDialog';
import GotoQQgroup from '../../modal/GotoQQgroup'
-// import 'antd/lib/modal/style/index.css';
-// import 'antd/lib/checkbox/style/index.css';
-// import 'antd/lib/radio/style/index.css';
-// import 'antd/lib/input/style/index.css';
+
import '../../modules/tpm/TPMIndex.css';
import logo from '../../modules/tpm/images/logo.png';
+
import './header.scss';
const $ = window.$
// TODO 这部分脚本从公共脚本中直接调用
diff --git a/src/forge/Head/header.scss b/src/forge/Head/header.scss
index 130df4ca8..0ae8f48e2 100644
--- a/src/forge/Head/header.scss
+++ b/src/forge/Head/header.scss
@@ -5,7 +5,13 @@
background:#fff;
border-radius: 3px;
.ant-menu-vertical > .ant-menu-item{
- border:none
+ border:none;
+ height: 35px;
+ line-height: 35px;
+ margin:0px;
+ }
+ .ant-menu-vertical{
+ border:none;
}
}
diff --git a/src/forge/New/Index.js b/src/forge/New/Index.js
index e519bbf2c..381d74382 100644
--- a/src/forge/New/Index.js
+++ b/src/forge/New/Index.js
@@ -43,7 +43,8 @@ class Index extends Component {
project_language_name: undefined,
project_category_name: undefined,
license_name: undefined,
- ignore_name: undefined
+ ignore_name: undefined,
+ descNum:0
}
}
componentDidMount = () => {
@@ -254,6 +255,13 @@ class Index extends Component {
}
}
+ changeDesc=(e)=>{
+ let value = e.target.value;
+ this.setState({
+ descNum:value ? value.length :0
+ })
+ }
+
render() {
const { getFieldDecorator } = this.props.form;
// 项目类型:deposit-托管项目,mirror-镜像项目
@@ -273,7 +281,9 @@ class Index extends Component {
license_list,
ignore_list,
- mirrorCheck
+ mirrorCheck,
+
+ descNum
} = this.state;
return (
@@ -361,21 +371,23 @@ class Index extends Component {
required: true, message: '请填写项目名称'
}],
})(
-
- )}
-
-
-
- {getFieldDecorator('description', {
- rules: [{
- required: true, message: '请填写项目简介'
- }],
- })(
-
+
)}
+
+ {descNum}/200
+
+ {getFieldDecorator('description', {
+ rules: [{
+ required: true, message: '请填写项目简介'
+ }],
+ })(
+
+ )}
+
+
@@ -384,7 +396,7 @@ class Index extends Component {
required: true, message: '请填写仓库名称'
}],
})(
-
+
)}
)}
+ })(
)}
, true
)}
- {helper(
-
团队描述:(描述团队的目的或作用),
- "description",
- [],
-
- )}
+
+ {descNum}/200
+ {helper(
+ 团队描述:(描述团队的目的或作用),
+ "description",
+ [],
+
{helper(
'项目权限:',
diff --git a/src/forge/Team/New.jsx b/src/forge/Team/New.jsx
index c7e48e8cf..f4a9880b9 100644
--- a/src/forge/Team/New.jsx
+++ b/src/forge/Team/New.jsx
@@ -9,6 +9,8 @@ export default Form.create()(
forwardRef(({ form , showNotification , history })=>{
const [ image , setImage ] = useState(undefined);
const [ imageFlag , setImageFlag] = useState(false);
+ const [ descNum ,setDescNum ] = useState(0);
+
const { getFieldDecorator, validateFields , setFieldsValue } = form;
const radioStyle = {
display: 'block',
@@ -86,7 +88,7 @@ export default Form.create()(
],
)}
{helper(
@@ -94,24 +96,28 @@ export default Form.create()(
"nickname",
[{ required: true, message: "请输入组织名称" }],
)}
+
+ {descNum}/200
+ {helper(
+ '组织描述',
+ "description",
+ [{ required: true, message: "请输入组织描述" }],
+ {setDescNum(e.target.value ? e.target.value.length :0)}}
+ />
+ )}
+
- {helper(
- '组织描述',
- "description",
- [{ required: true, message: "请输入组织描述" }],
-
- )}
{helper(
'所在地区',
"location",
[],
-
,false
+
,false
)}
{helper(
'可见性',
diff --git a/src/forge/Team/Setting/TeamSettingCommon.jsx b/src/forge/Team/Setting/TeamSettingCommon.jsx
index e70d9a4bb..5be03db09 100644
--- a/src/forge/Team/Setting/TeamSettingCommon.jsx
+++ b/src/forge/Team/Setting/TeamSettingCommon.jsx
@@ -25,6 +25,7 @@ export default Form.create()(
const [ password , setPassword ] = useState(undefined);
const [ passwordFlag , setPasswordFlag ] = useState(false);
const [ visible , setVisible ] = useState(false);
+ const [ descNum , setDescNum ] = useState(0);
const { getFieldDecorator , validateFields , setFieldsValue } = form;
useEffect(()=>{
@@ -33,6 +34,7 @@ export default Form.create()(
...organizeDetail
})
setImage(organizeDetail.avatar_url);
+ setDescNum(organizeDetail.description ? organizeDetail.description.length : 0);
}
},[organizeDetail])
@@ -95,6 +97,15 @@ export default Form.create()(
})
setVisible(false);
}
+ function checkname(rule, value, callback){
+ if(!value){
+ callback();
+ }
+ if(value && !value.match(/^[a-zA-Z][a-zA-Z0-9_-]{3,19}$/)){
+ callback("只能使用以字母开头,包含字母、数字、下划线、横杠等,长度4到20个字符");
+ }
+ callback();
+ }
return(
@@ -102,17 +113,35 @@ export default Form.create()(