Compare commits
67 Commits
master
...
dev_educod
| Author | SHA1 | Date |
|---|---|---|
|
|
d88179a486 | |
|
|
58613bf4c1 | |
|
|
be379d39e3 | |
|
|
3f918b53d9 | |
|
|
c4bc8fc9c5 | |
|
|
a1b82d833b | |
|
|
350769d3d7 | |
|
|
af31c381f9 | |
|
|
e7f997d3f6 | |
|
|
a968287331 | |
|
|
7dd59f7711 | |
|
|
c3b43bb5c7 | |
|
|
159bc0c893 | |
|
|
ca84851f0b | |
|
|
4dc0f974df | |
|
|
5b60d92063 | |
|
|
f2be69f4e3 | |
|
|
aa93eade71 | |
|
|
02b48e8648 | |
|
|
f50c550816 | |
|
|
16397c8743 | |
|
|
5ef79007e2 | |
|
|
e3321fd676 | |
|
|
80c559895a | |
|
|
e804698d70 | |
|
|
dd20d02477 | |
|
|
28d3b5bedd | |
|
|
e1b73f582a | |
|
|
f94edf90a5 | |
|
|
c9a9da6de9 | |
|
|
7d0abfb764 | |
|
|
f25db9ccf1 | |
|
|
2d79d144a0 | |
|
|
a209b29100 | |
|
|
7666efe1df | |
|
|
a14eddda52 | |
|
|
c54433728b | |
|
|
ee994458a9 | |
|
|
ea57432cb4 | |
|
|
831ff66ebe | |
|
|
bc0d60fea9 | |
|
|
53c92383d2 | |
|
|
7697449f05 | |
|
|
2e66904f81 | |
|
|
21f7a2530a | |
|
|
d76416bf1a | |
|
|
a05d06bc1f | |
|
|
5f7eaa24c6 | |
|
|
e4e419beb2 | |
|
|
14a68f9241 | |
|
|
dd0a9e50e5 | |
|
|
3148397343 | |
|
|
7f7a1021df | |
|
|
882d8aef75 | |
|
|
987688bcc9 | |
|
|
3bebbdc44d | |
|
|
7b4723b111 | |
|
|
3a8d9698db | |
|
|
6b441fc919 | |
|
|
b1725a00ee | |
|
|
0294439f18 | |
|
|
e7acb2f142 | |
|
|
21ab03f3da | |
|
|
102b21f255 | |
|
|
76ed232f6a | |
|
|
f14443a6e8 | |
|
|
146d4c9baa |
|
|
@ -14158,7 +14158,7 @@
|
|||
},
|
||||
"qr.js": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz",
|
||||
"resolved": "https://registry.npm.taobao.org/qr.js/download/qr.js-0.0.0.tgz",
|
||||
"integrity": "sha1-ys6GOG9ZoNuAUPqQ2baw6IoeNk8="
|
||||
},
|
||||
"qrcode.react": {
|
||||
|
|
|
|||
|
|
@ -25,9 +25,6 @@ html {
|
|||
min-width: 1200px
|
||||
}
|
||||
|
||||
.newFooter {
|
||||
max-height: 110px;
|
||||
}
|
||||
|
||||
.newFooter {
|
||||
position: absolute;
|
||||
|
|
|
|||
|
|
@ -3590,7 +3590,6 @@ a.user_bluebg_btn {
|
|||
margin-right: 5px;
|
||||
}
|
||||
|
||||
|
||||
/***** loading ******/
|
||||
/*****载入中******/
|
||||
#ajax-indicator {
|
||||
|
|
@ -3957,7 +3956,7 @@ html>body #ajax-indicator {
|
|||
display: block;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
color: #333;
|
||||
color: #fff;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -79,7 +79,7 @@ const EducoderLogin = Loadable({
|
|||
loading: Loading,
|
||||
})
|
||||
const Search = Loadable({
|
||||
loader: () => import('./modules/search/'),
|
||||
loader: () => import('./search/SearchPage'),
|
||||
loading: Loading,
|
||||
})
|
||||
const WikiPreview = Loadable({
|
||||
|
|
@ -87,6 +87,7 @@ const WikiPreview = Loadable({
|
|||
loading: Loading,
|
||||
})
|
||||
|
||||
|
||||
const ProjectIndex = Loadable({
|
||||
loader: () => import("./forge/Index"),
|
||||
loading: Loading,
|
||||
|
|
@ -168,7 +169,6 @@ class App extends Component {
|
|||
|
||||
componentDidMount() {
|
||||
document.title = "loading...";
|
||||
|
||||
this.getAppdata();
|
||||
|
||||
window.addEventListener('error', (event) => {
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ export function initAxiosInterceptors(props) {
|
|||
// 判断网络是否连接
|
||||
initOnlineOfflineListener();
|
||||
|
||||
var proxy = "https://testforgeplus.trustie.net";
|
||||
var proxy = "https://testforgeplus.educoder.net";
|
||||
//响应前的设置
|
||||
axios.interceptors.request.use(
|
||||
config => {
|
||||
|
|
@ -86,7 +86,7 @@ export function initAxiosInterceptors(props) {
|
|||
|
||||
if (response.data.status === 404) {
|
||||
let responseURL = response.request ? response.request.responseURL:'';
|
||||
if (responseURL.indexOf('/api/users/') === -1 && responseURL.indexOf('/api/organizations/') === -1 && responseURL.indexOf('/api/owners/') === -1) {
|
||||
if (responseURL.indexOf('/api/users/') === -1 || responseURL.indexOf('/api/organizations/') === -1 || responseURL.indexOf('/api/owners/') === -1) {
|
||||
locationurl('/nopage');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,12 +8,18 @@ const isDev = window.location.port == 3007;
|
|||
const isdev2= window.location.hostname ==='www.educoder.net'
|
||||
export const TEST_HOST = "https://testforgeplus.trustie.net/"
|
||||
export function getImageUrl(path) {
|
||||
// https://www.educoder.net
|
||||
// https://testbdweb.trustie.net
|
||||
// const local = 'http://localhost:3000'
|
||||
const local = 'https://testforgeplus.trustie.net';
|
||||
if (isDev) {
|
||||
return `${local}/${path}`
|
||||
const local = 'https://testforgeplus.educoder.net';
|
||||
const normal = 'https://ali-cdn.educoder.net/images';
|
||||
const normalend = 'https://ali-cdn.educoder.net';
|
||||
if(path.substr(0, 7) !== "/system"){
|
||||
if (isDev) {
|
||||
return `${local}/${path}`
|
||||
}
|
||||
if(path.substr(0, 7) !== "/images"){
|
||||
return `${normal}${path}`;
|
||||
}else{
|
||||
return `${normalend}${path}`;
|
||||
}
|
||||
}
|
||||
return `${path}`;
|
||||
}
|
||||
|
|
@ -162,7 +168,7 @@ export function getmyUrl(geturl) {
|
|||
}
|
||||
|
||||
export function getUploadActionUrl(path, goTest) {
|
||||
return `${getUrl()}/api/attachments.json${isDev ?`${isDev ?`?debug=${window._debugType || 'admin'}` : ""}` : ""}`;
|
||||
return `${getUrl()}/api/attachments.json`;
|
||||
}
|
||||
|
||||
export function getUploadLogoActionUrl() {
|
||||
|
|
|
|||
|
|
@ -3,4 +3,9 @@
|
|||
}
|
||||
.ant-modal-wrap{
|
||||
z-index: 1032;
|
||||
}
|
||||
.ant-modal-wrap{
|
||||
.ant-form-explain{
|
||||
position: absolute;
|
||||
}
|
||||
}
|
||||
|
|
@ -35,21 +35,26 @@ function EducoderAccount({form , visible , onOk , email}){
|
|||
>
|
||||
<div>
|
||||
<p className="mb15 edu-txt-center" style={{maxWidth:"350px",margin:"0px auto"}}>
|
||||
为确保您能正常使用平台功能,请确认以下信息:
|
||||
{
|
||||
email ?
|
||||
`平台已检测到您已绑定邮箱${email},请您确认如下操作`
|
||||
:
|
||||
"平台已检测到您未绑定邮箱,为不影响使用协同开发功能,请先绑定邮箱"
|
||||
}
|
||||
</p>
|
||||
<Form {...layout}>
|
||||
<Form.Item label="邮箱">
|
||||
{getFieldDecorator("email",{
|
||||
rules:[{required:true,message:"请输入邮箱账号"}]
|
||||
})(
|
||||
<Input placeholder="请输入您的邮箱账号" width="220px"/>
|
||||
<Input placeholder="请输入您的邮箱账号" width="220px" disabled={email}/>
|
||||
)}
|
||||
</Form.Item>
|
||||
<Form.Item label="密码">
|
||||
{getFieldDecorator("password",{
|
||||
rules:[{required:true,message:"请输入邮箱密码"}]
|
||||
rules:[{required:true,message:"请输入您的平台密码"}]
|
||||
})(
|
||||
<Input.Password placeholder="请输入您的邮箱密码" width="220px"/>
|
||||
<Input.Password placeholder="请输入您的平台密码" width="220px"/>
|
||||
)}
|
||||
</Form.Item>
|
||||
</Form>
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ function ServiceModal({sureModal}){
|
|||
<div className="mt30" style={{textAlign:"center"}}>
|
||||
<Radio.Group value={type} onChange={changeType}>
|
||||
<Radio value={1}>自有服务器</Radio>
|
||||
<Radio value={2}>Trustie服务器</Radio>
|
||||
<Radio value={2}>EduCoder服务器</Radio>
|
||||
</Radio.Group>
|
||||
<p className="mt30"><Button type="primary" onClick={()=>sureModal(type)}>下一步</Button></p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -20,13 +20,6 @@ function DivertModal({form , visible , onSuccess , onCancel,owner,repo}){
|
|||
if(owner && repo && visible===true){
|
||||
getTeam();
|
||||
}
|
||||
if(!visible){
|
||||
setFieldsValue({
|
||||
owner_name:undefined,
|
||||
identifier:undefined
|
||||
})
|
||||
setValue(undefined)
|
||||
}
|
||||
},[repo,owner,visible])
|
||||
|
||||
function getTeam(){
|
||||
|
|
@ -46,12 +39,10 @@ function DivertModal({form , visible , onSuccess , onCancel,owner,repo}){
|
|||
Axios.post(url,{
|
||||
...values
|
||||
}).then(result=>{
|
||||
if(result){
|
||||
if(result.data.status === 0){
|
||||
onSuccess(result.data && result.data.owner);
|
||||
}else{
|
||||
onSuccess();
|
||||
}
|
||||
if(result && result.data.id){
|
||||
onSuccess(result.data && result.data.owner);
|
||||
}else{
|
||||
onSuccess();
|
||||
}
|
||||
|
||||
}).catch(error=>{})
|
||||
|
|
@ -130,7 +121,6 @@ function DivertModal({form , visible , onSuccess , onCancel,owner,repo}){
|
|||
{getFieldDecorator("owner_name",{
|
||||
rules:[{required:true,message:"请输入目标用户名"}]
|
||||
})(
|
||||
// <Input placeholder="请输入目标用户" autoComplete={"off"}/>
|
||||
<SearchUser getUser={getUser} width={"100%"} placeholder="请输入目标用户" value={value}/>
|
||||
)}
|
||||
</Form.Item>
|
||||
|
|
@ -156,11 +146,11 @@ function DivertModal({form , visible , onSuccess , onCancel,owner,repo}){
|
|||
</Form.Item>
|
||||
}
|
||||
|
||||
<Form.Item label="仓库标识:" style={{marginBottom:"0px"}}>
|
||||
<Form.Item label="仓库标识:">
|
||||
{getFieldDecorator("identifier",
|
||||
{
|
||||
rules:[
|
||||
{required:true,message:"请输入仓库标识!"},
|
||||
{required:true,message:"请输入仓库标识"},
|
||||
{
|
||||
validator:checkIdentifier
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ function Footer(){
|
|||
|
||||
return(
|
||||
<div>
|
||||
<div style={{height:"497px"}}></div>
|
||||
<div style={{height:"810px"}}></div>
|
||||
<div className="newFooter edu-txt-center">
|
||||
{value && showhtml(value)}
|
||||
{/* <div className="footerInfos">
|
||||
|
|
|
|||
|
|
@ -80,6 +80,36 @@ class NewHeader extends Component {
|
|||
} catch (e) {}
|
||||
}
|
||||
|
||||
SearchInput = (open,item)=>{
|
||||
if(open){
|
||||
return(
|
||||
<div
|
||||
onBlur={() => {
|
||||
setTimeout(() => {
|
||||
this.setState({
|
||||
openSearch:false
|
||||
})
|
||||
}, 300)
|
||||
}}
|
||||
>
|
||||
<Search placeholder="实践课程/教学课堂/实践项目/交流问答"
|
||||
className={`search-input mr20`}
|
||||
onSearch={(value)=>this.onGlobalSearch(value,item)}
|
||||
autoFocus={true}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}else{
|
||||
return <i className="iconfont icon-sousuo font-18 color-white ml30" onClick={() => {
|
||||
this.setState({openSearch:true})
|
||||
}} />
|
||||
}
|
||||
}
|
||||
|
||||
onGlobalSearch=(value,item)=>{
|
||||
window.location.href=`${item}?value=` + value;
|
||||
}
|
||||
|
||||
openNotification = (messge) => {
|
||||
notification.open({
|
||||
message: "提示",
|
||||
|
|
@ -97,6 +127,26 @@ class NewHeader extends Component {
|
|||
}
|
||||
}
|
||||
|
||||
submitsubmitapplications = () => {
|
||||
let {
|
||||
submitapplicationssum,
|
||||
submitapplicationsvaluedata
|
||||
} = this.state;
|
||||
this.setState({
|
||||
submitapplications: false,
|
||||
RadioGroupvalue: undefined
|
||||
})
|
||||
if (submitapplicationssum === 0) {
|
||||
if (submitapplicationsvaluedata !== undefined) {
|
||||
window.location.href = "/courses/" + submitapplicationsvaluedata;
|
||||
}
|
||||
} else if (submitapplicationssum === 1) {
|
||||
if (submitapplicationsvaluedata !== undefined) {
|
||||
window.location.href = "/projects/" + submitapplicationsvaluedata;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
educoderlogin = () => {
|
||||
//登录账号
|
||||
this.setState({
|
||||
|
|
@ -134,6 +184,24 @@ class NewHeader extends Component {
|
|||
})
|
||||
};
|
||||
|
||||
|
||||
hidetojoinclass = () => {
|
||||
this.setState({
|
||||
tojoinclasstype: false,
|
||||
tojoinitemtype: false,
|
||||
tojoinclasstitle: undefined,
|
||||
rolearr: ["", ""],
|
||||
Checkboxteacherchecked: false,
|
||||
Checkboxstudentchecked: false,
|
||||
Checkboxteachingchecked: false,
|
||||
Checkboxteachertype: false,
|
||||
Checkboxteachingtype: false,
|
||||
code_notice: false,
|
||||
checked_notice: false,
|
||||
RadioGroupvalue: undefined
|
||||
})
|
||||
}
|
||||
|
||||
// 关闭
|
||||
cancelModulationModels = () => {
|
||||
this.setState({ isRenders: false })
|
||||
|
|
@ -278,7 +346,11 @@ class NewHeader extends Component {
|
|||
render() {
|
||||
const { match} = this.props;
|
||||
let current_user = this.props.user;
|
||||
let {
|
||||
let { Addcoursestypes,
|
||||
tojoinitemtype,
|
||||
tojoinclasstitle,
|
||||
code_notice,
|
||||
checked_notice,
|
||||
AccountProfiletype,
|
||||
user,
|
||||
isRender,
|
||||
|
|
@ -416,7 +488,7 @@ class NewHeader extends Component {
|
|||
var wl = waiLian && waiLian.length>0;
|
||||
return (
|
||||
<li key={key} onClick={() => this.headtypesonClick(item.link, true)} className={`${this.matchpaths(item.link) === true ? 'pr active' : 'pr'}`} style={!is_hidden ? { display: 'flex' } : { display: 'none' }}>
|
||||
<a href={new_link} target={wl ? "_self":"_blank"}>{item.name}</a>
|
||||
<a href={new_link} target={wl ? "_self":"_blank"}><div dangerouslySetInnerHTML={{ __html: item.name }}></div></a>
|
||||
</li>
|
||||
)
|
||||
})
|
||||
|
|
@ -431,7 +503,7 @@ class NewHeader extends Component {
|
|||
{
|
||||
current_user && (current_user.main_site || current_user.login) && (settings && settings.add && settings.add.length>0)?
|
||||
<Dropdown overlay={this.addMenu(settings && settings.add)} placement="bottomRight">
|
||||
<i className="iconfont icon-tianjiafangda color-grey-6 ml30"></i>
|
||||
<i className="iconfont icon-tianjiafangda color-white ml30"></i>
|
||||
</Dropdown>:""
|
||||
}
|
||||
|
||||
|
|
@ -439,7 +511,7 @@ class NewHeader extends Component {
|
|||
<div className="ml30 edu-menu-panel">
|
||||
{user && user.login &&
|
||||
<a href={`${notice_url}`} style={{ position: 'relative' }}>
|
||||
<i className="iconfont icon-xiaoxilingdang color-grey-6"></i>
|
||||
<i className="iconfont icon-xiaoxilingdang color-white"></i>
|
||||
<span className="newslight" style={{ display: this.props.Headertop === undefined ? "none" : this.props.Headertop.new_message === true ? "block" : "none" }}>
|
||||
</span>
|
||||
</a>
|
||||
|
|
@ -449,10 +521,10 @@ class NewHeader extends Component {
|
|||
</div>
|
||||
{!user || (user && !user.login) ?
|
||||
<span className="font-15 ml30">
|
||||
<a onClick={() => this.educoderlogin()} className="mr5 color-grey-6">登录</a>
|
||||
<a onClick={() => this.educoderlogin()} className="mr5 color-white">登录</a>
|
||||
{
|
||||
settings && settings.common && settings.common.register &&
|
||||
<span><em className="vertical-line"></em><a className="ml5 color-grey-6" href={`${settings.common.register}`} target="_blank">注册</a></span>
|
||||
<span><em className="vertical-line"></em><a className="ml5 color-white" href={`${settings.common.register}`} target="_blank">注册</a></span>
|
||||
}
|
||||
</span>
|
||||
:
|
||||
|
|
|
|||
|
|
@ -126,4 +126,56 @@
|
|||
width: 110px;
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
|
||||
.newFooter {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
background: #323232;
|
||||
clear: both;
|
||||
min-width: 1200px;
|
||||
z-index: 8;
|
||||
left: 0px;
|
||||
p {
|
||||
margin-top: 0;
|
||||
margin-bottom:0px !important;
|
||||
}
|
||||
.footerInfos{
|
||||
display: flex;
|
||||
max-width: 1200px;
|
||||
margin:0px auto;
|
||||
justify-content: space-around;
|
||||
padding:60px 0px;
|
||||
& >ul{
|
||||
padding:0px 40px;
|
||||
box-sizing: border-box;
|
||||
max-width: 25%;
|
||||
text-align: left;
|
||||
li{
|
||||
color: #fff;
|
||||
font-weight: 300;
|
||||
&:first-child{
|
||||
font-size: 17px;
|
||||
}
|
||||
&>a,&>span{
|
||||
color: #bbb;
|
||||
}
|
||||
&>a:hover{
|
||||
color: #4cacff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.footerCopy{
|
||||
color: #bbb;
|
||||
border-top: 1px solid #4e4e4e;
|
||||
padding:10px 0px;
|
||||
a{
|
||||
color: #bbb;
|
||||
&:hover{
|
||||
color: #4cacff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 212 KiB |
|
|
@ -79,6 +79,12 @@ class Index extends Component {
|
|||
<ProjectIndex {...this.props} {...props} />
|
||||
)}
|
||||
></Route>
|
||||
<Route
|
||||
path="/"
|
||||
render={(props) => (
|
||||
<ProjectIndex {...this.props} {...props} />
|
||||
)}
|
||||
></Route>
|
||||
</Switch>
|
||||
</div>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -450,7 +450,7 @@ function CoderDepot(props){
|
|||
(dirInfo && dirInfo.length === 0) && !fileInfo ? <Nodata _html="暂未发现文件"/> :""
|
||||
}
|
||||
{/* readme文件显示(显示文件详情时不显示readme文件) */}
|
||||
{ dirInfo && (readme && readme.content) ? <ReadMe ChangeFile={ChangeFile} readme={readme} operate={props && (props.isManager || props.isDeveloper) && projectDetail.type !==2 } history={props.history} /> :"" }
|
||||
{ dirInfo && (projectDetail && projectDetail.readme) ? <ReadMe ChangeFile={ChangeFile} readme={projectDetail && projectDetail.readme} operate={props && (props.isManager || props.isDeveloper) && projectDetail.type !==2 } history={props.history} /> :"" }
|
||||
</div>
|
||||
</LongWidth>
|
||||
{
|
||||
|
|
|
|||
|
|
@ -147,7 +147,7 @@ class CoderRootCommit extends Component{
|
|||
<p className="f-wrap-alignCenter mt15">
|
||||
{
|
||||
item.id ?
|
||||
<Link to={`/${item.login}`} className="show-user-link">
|
||||
<Link to={`/users/${item.login}`} className="show-user-link">
|
||||
{item.image_url?<img src={getImageUrl(`/${item.image_url}`)} alt="" width="28px" height="28px" className="mr15 radius"/>:""}
|
||||
<label className="font-14 color-grey-6" style={{verticalAlign:'middle'}}>{item.name ?`${item.name}:`:""}提交于 {item.time_from_now}</label>
|
||||
</Link>:
|
||||
|
|
|
|||
|
|
@ -345,7 +345,7 @@ class Index extends Component {
|
|||
<div className="ProjectListIndex">
|
||||
<div className="list-left">
|
||||
<ul className="list-l-Menu">
|
||||
<li className="MenuTitle"><i className="iconfont icon-xiangmuleixing color-grey-9 font-15 mr5"></i>项目类型</li>
|
||||
<li className="MenuTitle"><i className="iconfont icson-xiangmuleixing color-grey-9 font-15 mr5"></i>项目类型</li>
|
||||
{typeList}
|
||||
</ul>
|
||||
<ul className="list-l-Menu">
|
||||
|
|
|
|||
|
|
@ -1,10 +1,69 @@
|
|||
|
||||
.lineH2{line-height:2}
|
||||
.t_project_banner {
|
||||
/* height: 260px;
|
||||
background: url(../Images/banner_list.jpg) no-repeat center; */
|
||||
.subjectBanner {
|
||||
height: 160px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
background-color: #050d34;
|
||||
}
|
||||
.subjectleft{
|
||||
margin-top: 40px;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
}
|
||||
.bannerBox{
|
||||
width: 1200px;
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
left: 50%;
|
||||
top: 0;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
.subjectleft>span:first-child{
|
||||
width: 140px;
|
||||
height: 30px;
|
||||
font-size: 30px;
|
||||
font-weight: 600;
|
||||
color: #fff;
|
||||
line-height: 30px;
|
||||
letter-spacing: 4px;
|
||||
}
|
||||
.subjectleft>span:last-child{
|
||||
height: 16px;
|
||||
font-size: 16px;
|
||||
color: #fff;
|
||||
line-height: 16px;
|
||||
margin-left: 16px;
|
||||
}
|
||||
.subjectleft>span:last-child .words{
|
||||
letter-spacing: 3px;
|
||||
display: block;
|
||||
margin-top: -6px;
|
||||
margin-bottom: 2px!important;
|
||||
}
|
||||
.bannerBox > a{
|
||||
display: inline-block;
|
||||
width: 104px;
|
||||
height: 30px;
|
||||
line-height: 28px;
|
||||
text-align: center;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #666;
|
||||
margin-right: 30px;
|
||||
margin-top: 30px;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
}
|
||||
.bannerBox > a > i{
|
||||
font-size: 14px!important;
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
}
|
||||
.bannerBox > a > a{
|
||||
color: #fff!important;
|
||||
}
|
||||
.ProjectListIndex{
|
||||
width: 1200px;
|
||||
margin:20px auto;
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
|
|||
return(
|
||||
<div className="f-wrap-between mt15">
|
||||
{
|
||||
menuName && projectDetail ?
|
||||
menuName && menuName.length> 0 && projectDetail ?
|
||||
<ul className="headerMenu-wrapper">
|
||||
{
|
||||
Array.isArray(menuName)&& menuName.map((item,key)=>{
|
||||
|
|
@ -49,7 +49,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
|
|||
<Tooltip title="易修是Issue的中文名,即问题列表" placement="bottom">
|
||||
<Link to={{ pathname: `/${owner}/${projectsId}/issues`, state }}>
|
||||
<i className={pathname==="issues" ? "iconfont icon-renwu color-grey-3 mr5 font-14":"iconfont icon-renwu color-grey-6 font-14 mr5"}></i>
|
||||
<span>易修</span>
|
||||
<span>易修(Issue)</span>
|
||||
{projectDetail && projectDetail.issues_count ? <span className="num">{projectDetail.issues_count}</span> : ""}
|
||||
</Link>
|
||||
</Tooltip>
|
||||
|
|
@ -65,7 +65,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
|
|||
</Link>
|
||||
</li>:""
|
||||
}
|
||||
{
|
||||
{/* {
|
||||
item.menu_name === "wiki" &&
|
||||
<li className={pathname === "wiki" ? "active" : ""}>
|
||||
<Link to={{ pathname: `/${owner}/${projectsId}/wiki`, state }}>
|
||||
|
|
@ -73,7 +73,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
|
|||
<span>Wiki</span>
|
||||
</Link>
|
||||
</li>
|
||||
}
|
||||
} */}
|
||||
{
|
||||
item.menu_name === "devops" && platform ?
|
||||
<li className={pathname==="devops" ? "active" : ""}>
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ class MergeSubmit extends Component{
|
|||
<span className="f-wrap-alignCenter">
|
||||
<Link to={`/${item.login}`} className="show-user-link">
|
||||
<img src={getImageUrl(`/${item.image_url}`)} alt="" width="28px" height="28px" className="mr3 radius"/>
|
||||
<label className="hide-1" style={{maxWidth:"75px",'vertical-align':'middle'}}>{text}</label>
|
||||
<label className="hide-1" style={{maxWidth:"75px",verticalAlign:'middle'}}>{text}</label>
|
||||
</Link>
|
||||
</span>
|
||||
),
|
||||
|
|
|
|||
|
|
@ -209,8 +209,11 @@ class Index extends Component {
|
|||
user_id:owners_id
|
||||
}).then((result) => {
|
||||
if (result && result.data.id) {
|
||||
this.setState({
|
||||
isSpin: false
|
||||
})
|
||||
projectsType && projectsType !== "mirror" && this.props.showNotification(`托管项目创建成功!`);
|
||||
this.props.history.push(`/${result.data.login}/${result.data.identifier}`);
|
||||
this.props.history.push(`/projects/${result.data.login}/${result.data.identifier}`);
|
||||
}
|
||||
this.setState({
|
||||
isSpin: false
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ function Index(props){
|
|||
const username = props.match.params.username;
|
||||
const pathname = props.history.location.pathname;
|
||||
const user = props.user;
|
||||
const undo_messages = props.undo_messages;
|
||||
|
||||
const [ menu , setMenu ] = useState("notify");
|
||||
const [ messagesCount , setMessagesCount ] = useState(0);
|
||||
|
|
|
|||
|
|
@ -14,8 +14,24 @@ function Notify(props){
|
|||
const [ isSpin , setIsSpin ] = useState(true);
|
||||
|
||||
useEffect(()=>{
|
||||
props && props.deleteEvent("notify",0);
|
||||
},[])
|
||||
if(username){
|
||||
getList();
|
||||
}
|
||||
},[username,page])
|
||||
|
||||
function getList(){
|
||||
const url = `/users/${username}/applied_messages.json`;
|
||||
Axios.get(url,{
|
||||
params:{
|
||||
page,per_page:limit
|
||||
}
|
||||
}).then(result=>{
|
||||
if(result){
|
||||
setList(result.data.applied_messages);
|
||||
setTotal(result.data.total_count);
|
||||
}
|
||||
}).catch(error=>{})
|
||||
}
|
||||
|
||||
useEffect(()=>{
|
||||
if(username){
|
||||
|
|
@ -71,6 +87,20 @@ function Notify(props){
|
|||
}
|
||||
}
|
||||
|
||||
function renderApplyStatus(status,applied) {
|
||||
let { project } = applied;
|
||||
if(status){
|
||||
switch(status){
|
||||
case 'successed':
|
||||
return <p>已通过你加入【<Link to={`/projects/${project && project.owner && project.owner.login}/${project && project.identifier}`}>{project && project.name}</Link>】项目的申请</p>
|
||||
default:
|
||||
return <p>已拒绝你加入【<Link to={`/projects/${project && project.owner && project.owner.login}/${project && project.identifier}`}>{project && project.name}</Link>】项目的申请</p>
|
||||
}
|
||||
}else{
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
return(
|
||||
<div>
|
||||
<Spin spinning={isSpin}>
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ function UndoEvent(props){
|
|||
const [ total , setTotal ] = useState(0);
|
||||
const [ isSpin , setIsSpin ] = useState(true);
|
||||
|
||||
|
||||
useEffect(()=>{
|
||||
if(username){
|
||||
setIsSpin(true);
|
||||
|
|
@ -93,7 +94,7 @@ function UndoEvent(props){
|
|||
i.status === "canceled" && <span className="color-grey-9">对方已取消转移</span>
|
||||
}
|
||||
{
|
||||
i.status === "accepted" && <span className="color-grey-9">已接受</span>
|
||||
i.status === "accept" && <span className="color-grey-9">已接受</span>
|
||||
}
|
||||
{
|
||||
i.status === "refused" && <span className="color-grey-9">已拒绝</span>
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ const menu = [
|
|||
{name:"代码库",index:"code"},
|
||||
{name:"易修 (Issue)",index:"issues"},
|
||||
{name:"合并请求",index:"pulls"},
|
||||
{name:"Wiki",index:"wiki"},
|
||||
// {name:"Wiki",index:"wiki"},
|
||||
{name:"工作流(beta版)",index:"devops"},
|
||||
// {name:"资源库",index:"resources"},
|
||||
{name:"里程碑",index:"versions"},
|
||||
|
|
@ -31,7 +31,8 @@ class Setting extends Component {
|
|||
project_units:['home',"activity","code"],
|
||||
divertVisible:false,
|
||||
is_transfering:undefined,
|
||||
projectName:undefined
|
||||
projectName:undefined,
|
||||
permission:undefined
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -241,6 +242,7 @@ class Setting extends Component {
|
|||
let mirror = projectDetail && projectDetail.mirror;
|
||||
let type = projectDetail && projectDetail.type;
|
||||
const forked_from_project_id = this.props && this.props.projectDetail && this.props.projectDetail.forked_from_project_id;
|
||||
|
||||
return (
|
||||
<div>
|
||||
<DivertModal
|
||||
|
|
|
|||
|
|
@ -1,18 +1,17 @@
|
|||
import React, { useEffect, useState } from 'react';
|
||||
import './Index.scss';
|
||||
import { AlignCenter, Blueback , FlexAJ } from '../Component/layout';
|
||||
import { Dropdown, Input , Menu , Pagination, Spin , Popconfirm, Button } from 'antd';
|
||||
import { Blueback , FlexAJ } from '../Component/layout';
|
||||
import { Dropdown, Input , Menu , Pagination } from 'antd';
|
||||
import { Link } from 'react-router-dom';
|
||||
import UploadSource from './UploadSource';
|
||||
import AddTag from './AddTag';
|
||||
import { getImageUrl } from 'educoder';
|
||||
import Nodata from '../Nodata';
|
||||
import axios from 'axios';
|
||||
|
||||
const { Search } = Input;
|
||||
const sort = [
|
||||
"按上传时间排序",
|
||||
"按下载次数排序"
|
||||
"按下载次数排序",
|
||||
"按引用排序"
|
||||
]
|
||||
const limit = 15;
|
||||
const https = 'https://testfiles.trustie.net';
|
||||
|
|
@ -22,22 +21,13 @@ function Index(props){
|
|||
const [ total , setTotal ] = useState(0);
|
||||
const [ search , setSearch ] = useState(undefined);
|
||||
const [ data , setData ] = useState(undefined);
|
||||
const [ isSpin , setIsSpin ] = useState(true);
|
||||
const [ error , setError ] = useState(false);
|
||||
const [ attachments , setAttachments ] = useState(undefined);
|
||||
|
||||
const [ id , setId ] = useState(undefined);
|
||||
|
||||
const [ visible , setVisible ] = useState(false);
|
||||
const [ addVisible , setAddVisible ] = useState(false);
|
||||
|
||||
const repo_id = props.projectDetail && props.projectDetail.repo_id;
|
||||
const owner = props.match.params.owner;
|
||||
const current_user = props.current_user;
|
||||
|
||||
useEffect(()=>{
|
||||
if(owner && repo_id){
|
||||
setIsSpin(true);
|
||||
getData();
|
||||
}
|
||||
},[repo_id,owner,search,sortValue,page])
|
||||
|
|
@ -56,10 +46,8 @@ function Index(props){
|
|||
if(result && result.data){
|
||||
setData(result.data.data.rows);
|
||||
setTotal(result.data.data.total);
|
||||
setIsSpin(false);
|
||||
setError(false);
|
||||
}
|
||||
}).catch(error=>{setIsSpin(false);setError(true);})
|
||||
}).catch(error=>{})
|
||||
}
|
||||
|
||||
// 搜索
|
||||
|
|
@ -85,99 +73,26 @@ function Index(props){
|
|||
</Menu>
|
||||
)
|
||||
|
||||
function listmenu(id,attachments,isPublic){
|
||||
return(
|
||||
<Menu>
|
||||
<Menu.Item onClick={()=>{setId(id);setVisible(true);setAttachments(attachments)}}>更新版本</Menu.Item>
|
||||
<Menu.Item onClick={()=>changeStatus(id,isPublic===1?0:1)}>{isPublic === 1 ? "设为私有":"设为公开"}</Menu.Item>
|
||||
<Menu.Item onClick={()=>deleteSourceFunc(id)}>删除资源</Menu.Item>
|
||||
</Menu>
|
||||
)
|
||||
}
|
||||
// 更细私有状态
|
||||
function changeStatus(id,isPublic){
|
||||
const url = https+`/api/project/achievement/updateStatus`;
|
||||
axios.put(url,{
|
||||
id,status:isPublic
|
||||
}).then(result=>{
|
||||
if(result && result.data){
|
||||
props.showNotification(`资源${isPublic === 1 ? "设为公开":"设为私有"}成功!`);
|
||||
setIsSpin(true);
|
||||
getData();
|
||||
}
|
||||
}).catch({})
|
||||
}
|
||||
|
||||
// 删除资源方法
|
||||
function deleteSourceFunc(id){
|
||||
props.confirm({
|
||||
content: "是否确认删除所选资源文件?",
|
||||
onOk: () => {
|
||||
const url = https + `/api/project/achievement/${id}`;
|
||||
axios.delete(url).then(result=>{
|
||||
if(result && result.data && result.data.code === "1"){
|
||||
props.showNotification("资源删除成功");
|
||||
setIsSpin(true);
|
||||
getData();
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
const listmenu=(
|
||||
<Menu>
|
||||
<Menu.Item>更新版本</Menu.Item>
|
||||
<Menu.Item>设为私有</Menu.Item>
|
||||
<Menu.Item>删除资源</Menu.Item>
|
||||
</Menu>
|
||||
)
|
||||
|
||||
// 上传资源成功
|
||||
function onOk(){
|
||||
setVisible(false);
|
||||
setIsSpin(true);
|
||||
getData();
|
||||
}
|
||||
|
||||
// 确认删除标签
|
||||
function removeTagFunc(id,tag){
|
||||
const url = https + `/api/project/achievement/deleteTag`;
|
||||
axios.delete(url,{
|
||||
params:{id,tagName:tag}
|
||||
}).then(result=>{
|
||||
if(result && result.data){
|
||||
props.showNotification("标签删除成功");
|
||||
setIsSpin(true);
|
||||
getData();
|
||||
}
|
||||
}).then(error=>{})
|
||||
}
|
||||
// 删除标签
|
||||
function removeTagFunc(){
|
||||
|
||||
function addPanel(id){
|
||||
setAddVisible(true);
|
||||
setId(id);
|
||||
}
|
||||
|
||||
function onCancelAdd(){
|
||||
setId(undefined);
|
||||
setAddVisible(false);
|
||||
}
|
||||
|
||||
// 添加标签
|
||||
function sureAddTag(values){
|
||||
const url = https+`/api/project/achievement/addTag?id=`+id+`&tagName=`+values.tagName;
|
||||
axios.put(url).then(result=>{
|
||||
if(result){
|
||||
setId(undefined);
|
||||
setAddVisible(false);
|
||||
setIsSpin(true);
|
||||
getData();
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
return(
|
||||
<div className="sourcePanel">
|
||||
<AddTag
|
||||
visible={addVisible}
|
||||
onCancel={onCancelAdd}
|
||||
onOk={sureAddTag}
|
||||
/>
|
||||
<UploadSource
|
||||
visible={visible}
|
||||
onCancel={()=>setVisible(false)}
|
||||
|
|
@ -185,15 +100,11 @@ function Index(props){
|
|||
showNotification={props.showNotification}
|
||||
owner={owner}
|
||||
projectsId={repo_id}
|
||||
id={id}
|
||||
attachments={attachments}
|
||||
/>
|
||||
<div className="headtitle">
|
||||
<FlexAJ>
|
||||
<span className="font-18">资源库{total ? <span>({total})</span>:""}</span>
|
||||
{ current_user && current_user.login && (props.projectDetail && props.projectDetail.permission) ?
|
||||
<Blueback onClick={()=>{setId(undefined);setVisible(true);}}>上传资源</Blueback>:""
|
||||
}
|
||||
<span className="font-18">资源库(18)</span>
|
||||
<Blueback onClick={()=>setVisible(true)}>上传资源</Blueback>
|
||||
</FlexAJ>
|
||||
</div>
|
||||
<FlexAJ className="subHeadtitle">
|
||||
|
|
@ -208,65 +119,43 @@ function Index(props){
|
|||
<span className="color-grey-9">{sort[sortValue]}<i className="iconfont icon-sanjiaoxing-down font-16 color-grey-9 ml3"></i></span>
|
||||
</Dropdown>
|
||||
</FlexAJ>
|
||||
<Spin spinning={isSpin}>
|
||||
<div className="bodycontent">
|
||||
{
|
||||
data && data.length> 0 &&
|
||||
<ul className="bodycontentul">
|
||||
{
|
||||
data.map((item,key)=>{
|
||||
return(
|
||||
<li>
|
||||
<Link to= {`/${item.login}`} className="infoImg"><img src={getImageUrl(`/${item.imageUrl}`)} alt="" /></Link>
|
||||
<div style={{flex:'1',width:"0"}}>
|
||||
<FlexAJ>
|
||||
<AlignCenter>
|
||||
<a href={https+`/busiAttachments/download/${item.attachId}`} download className="infoname">{item.fileName}</a>
|
||||
<a href={https + `/busiAttachments/view/${item.attachId}`}><i className="iconfont icon-shenqinggongkai font-15 ml10 color-grey-9"></i></a>
|
||||
{item.isPublic === 0 && <span className="privateTip">私有</span>}
|
||||
</AlignCenter>
|
||||
{ current_user && current_user.login &&
|
||||
<Dropdown overlay={()=>listmenu(item.id,item.attachments,item.isPublic)} placement={'bottomRight'}>
|
||||
<i className="iconfont icon-gengduo1 color-grey-6"></i>
|
||||
</Dropdown>
|
||||
}
|
||||
</FlexAJ>
|
||||
<p className="infos">
|
||||
<span>上传时间:<span>{item.uploadTime}</span></span>
|
||||
<span>文件大小:<span>{item.fileSize}</span></span>
|
||||
<span>下载:<span>{item.download}</span></span>
|
||||
</p>
|
||||
<p className="infodesc task-hide-2">{item.remark}</p>
|
||||
<div className="bodycontent">
|
||||
<ul className="bodycontentul">
|
||||
{
|
||||
data && data.length> 0 && data.map((item,key)=>{
|
||||
return(
|
||||
<li>
|
||||
<Link to= {`/users/${item.login}`} className="infoImg"><img src={getImageUrl(`${item.imageUrl}`)} alt="" /></Link>
|
||||
<div style={{flex:'1',width:"0"}}>
|
||||
<FlexAJ>
|
||||
<a href={``} className="infoname">{item.fileName}</a>
|
||||
<Dropdown overlay={listmenu} placement={'bottomRight'}>
|
||||
<i className="iconfont icon-gengduo1 color-grey-6"></i>
|
||||
</Dropdown>
|
||||
</FlexAJ>
|
||||
<p className="infos">
|
||||
<span>上传时间:<span>{item.uploadTime}</span></span>
|
||||
<span>文件大小:<span>{item.fileSize}</span></span>
|
||||
<span>下载:<span>{item.download}</span></span>
|
||||
</p>
|
||||
<p className="infodesc task-hide-2">{item.remark}</p>
|
||||
{ item.tags && item.tags.length>0 &&
|
||||
<div className="infotag">
|
||||
{
|
||||
item.tags && item.tags.length>0 && item.tags.map((i,k)=>{
|
||||
item.tags.map((i,k)=>{
|
||||
return(
|
||||
<span>{i}
|
||||
{
|
||||
current_user && (current_user.login === item.login) ?
|
||||
<Popconfirm title="确定要删除当前标签?" onConfirm={()=>removeTagFunc(item.id,i)} okText="是" cancelText="否">
|
||||
<i className="iconfont icon-guanbi font-12 ml2"></i>
|
||||
</Popconfirm>:""
|
||||
}
|
||||
</span>
|
||||
<span>{i}<i className="iconfont icon-guanbi font-12 ml2" onClick={removeTagFunc}></i></span>
|
||||
)
|
||||
})
|
||||
}
|
||||
{
|
||||
current_user && (current_user.login === item.login) &&
|
||||
<a className="color-blue font-12" onClick={()=>addPanel(item.id)} style={{height:"20px",lineHeight:"20px"}}>+新增标签</a>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
)
|
||||
})
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
{
|
||||
((data && data.length === 0) || error) && <Nodata _html="暂无数据"/>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
</li>
|
||||
)
|
||||
})
|
||||
}
|
||||
</ul>
|
||||
{
|
||||
total > limit &&
|
||||
<div className="pt20 pb20 edu-txt-center">
|
||||
|
|
@ -280,7 +169,6 @@ function Index(props){
|
|||
</div>
|
||||
}
|
||||
</div>
|
||||
</Spin>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@
|
|||
}
|
||||
.bodycontent{
|
||||
padding:0px 20px;
|
||||
min-height: 500px;
|
||||
& > ul.bodycontentul > li{
|
||||
display: flex;
|
||||
border-bottom: 1px solid #eee;
|
||||
|
|
@ -41,16 +40,6 @@
|
|||
.infoname{
|
||||
font-size: 16px;
|
||||
}
|
||||
.privateTip{
|
||||
display: block;
|
||||
font-size: 12px;
|
||||
margin-left: 10px;
|
||||
background-color: orange;
|
||||
height: 18px;
|
||||
line-height: 18px;
|
||||
padding:0px 3px;
|
||||
color: #fff;
|
||||
}
|
||||
.infos{
|
||||
& > span{
|
||||
margin-right: 20px;
|
||||
|
|
@ -84,26 +73,4 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.versionTable{
|
||||
.currentTip{
|
||||
display: block;
|
||||
padding:0px 3px;
|
||||
border-radius: 2px;
|
||||
border:1px solid #68c7ec;
|
||||
font-size: 12px;
|
||||
color: #68c7ec;
|
||||
height: 18px;
|
||||
line-height: 18px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
.ant-table-body{
|
||||
margin:0px!important;
|
||||
thead{
|
||||
background-color: #eee;
|
||||
}
|
||||
thead >tr >th,tbody > tr > td{
|
||||
padding:4px 5px!important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -79,4 +79,4 @@ function Uploads({ className , size , actionUrl,fileList,showNotification , load
|
|||
</Upload>
|
||||
)
|
||||
}
|
||||
export default Uploads;
|
||||
export default Uploads;
|
||||
|
|
|
|||
|
|
@ -5,18 +5,18 @@ import { AlignCenter } from '../Component/layout';
|
|||
import axios from 'axios';
|
||||
const { TextArea } = Input;
|
||||
|
||||
const data = [
|
||||
{name:"sdfkjsfj.pdf",loadNum:"10",citeNum:"15",time:"2021-04-01 10:45"},
|
||||
{name:"sdfkjsfj.pdf",loadNum:"10",citeNum:"15",time:"2021-04-01 10:45"},
|
||||
{name:"sdfkjsfj.pdf",loadNum:"10",citeNum:"15",time:"2021-04-01 10:45"}
|
||||
]
|
||||
const https = 'https://testfiles.trustie.net';
|
||||
function UploadSource({ form , visible , onCancel , onOk , showNotification , attachments , id ,owner,projectsId}){
|
||||
const [ tableData , setTableData ] = useState(undefined);
|
||||
function UploadSource({ form , visible , onCancel , onOk , showNotification ,owner,projectsId}){
|
||||
const [ tableData , setTableData ] = useState(data);
|
||||
const [ fileId , setFilesId ] = useState(undefined);
|
||||
const [ fileName , setFileName ] = useState(undefined);
|
||||
const { getFieldDecorator, validateFields , setFieldsValue } = form;
|
||||
|
||||
useEffect(()=>{
|
||||
if(id && attachments){
|
||||
setTableData(attachments);
|
||||
}
|
||||
},[id,attachments])
|
||||
// 上传附件后得到的文件id数组
|
||||
function UploadFunc(id,name){
|
||||
setFilesId(id);
|
||||
|
|
@ -25,36 +25,37 @@ function UploadSource({ form , visible , onCancel , onOk , showNotification , at
|
|||
|
||||
const columns = [
|
||||
{
|
||||
dataIndex:"fileName",
|
||||
key:"fileName",
|
||||
dataIndex:"name",
|
||||
key:"name",
|
||||
title:"资源名称",
|
||||
width:"42%",
|
||||
width:"45%",
|
||||
ellipsis:true,
|
||||
render:(value,item,key)=>{
|
||||
return <AlignCenter>
|
||||
<div className="task-hide" style={{maxWidth:key===0 ? "240px":"100%"}}>{value}</div>
|
||||
<div className="task-hide" style={{maxWidth:key===0 ? "250px":"100%"}}>{value}</div>
|
||||
{ key === 0 && <span className="currentTip">当前版本</span> }
|
||||
</AlignCenter>
|
||||
}
|
||||
},
|
||||
{
|
||||
dataIndex:"downloads",
|
||||
key:"downloads",
|
||||
dataIndex:"loadNum",
|
||||
key:"loadNum",
|
||||
title:"下载数",
|
||||
width:"14%",
|
||||
width:"15%",
|
||||
className:"edu-txt-center"
|
||||
},
|
||||
{
|
||||
dataIndex:"fileSizeString",
|
||||
key:"fileSizeString",
|
||||
title:"文件大小",
|
||||
width:"16%",
|
||||
dataIndex:"citeNum",
|
||||
key:"citeNum",
|
||||
title:"引用数",
|
||||
width:"15%",
|
||||
className:"edu-txt-center"
|
||||
},
|
||||
{
|
||||
dataIndex:"createdAt",
|
||||
key:"createdAt",
|
||||
dataIndex:"time",
|
||||
key:"time",
|
||||
title:"上传时间",
|
||||
width:"25%"
|
||||
}
|
||||
]
|
||||
|
||||
|
|
@ -73,35 +74,22 @@ function UploadSource({ form , visible , onCancel , onOk , showNotification , at
|
|||
|
||||
function postInfo(values){
|
||||
const url = https+`/api/project/achievement/`;
|
||||
if(id){
|
||||
// 修改
|
||||
axios.put(url,{
|
||||
id,fileName,fileId:`${fileId}`,
|
||||
remark:values.remark
|
||||
}).then(result=>{
|
||||
if(result && result.data){
|
||||
onOk();
|
||||
}
|
||||
}).catch(error=>{})
|
||||
}else{
|
||||
// 上传
|
||||
axios.post(url,{
|
||||
fileId:`${fileId}`,
|
||||
fileName,
|
||||
login:owner,
|
||||
projectId:projectsId,
|
||||
...values
|
||||
}).then(result=>{
|
||||
if(result && result.data){
|
||||
onOk();
|
||||
}
|
||||
}).catch(error=>{})
|
||||
}
|
||||
|
||||
axios.post(url,{
|
||||
fileId:`${fileId}`,
|
||||
fileName,
|
||||
login:owner,
|
||||
projectId:projectsId,
|
||||
...values
|
||||
}).then(result=>{
|
||||
if(result && result.data){
|
||||
onOk();
|
||||
}
|
||||
}).catch(error=>{})
|
||||
}
|
||||
return(
|
||||
<Modal
|
||||
title={id?"更新资源版本":"上传资源"}
|
||||
title={"上传资源"}
|
||||
closable={false}
|
||||
visible={visible}
|
||||
onCancel={onCancel}
|
||||
|
|
@ -113,8 +101,8 @@ function UploadSource({ form , visible , onCancel , onOk , showNotification , at
|
|||
>
|
||||
<div>
|
||||
<Form>
|
||||
{id && <Table className="versionTable mb20" columns={columns} dataSource={tableData} pagination={false} size={"small"}/> }
|
||||
<Form.Item style={{display:id?"none":"block"}}>
|
||||
<Table className="versionTable" columns={columns} dataSource={tableData} pagination={false} size={"small"}/>
|
||||
<Form.Item>
|
||||
{getFieldDecorator("tagNames",{
|
||||
rules:[]
|
||||
})(
|
||||
|
|
@ -147,4 +135,4 @@ function UploadSource({ form , visible , onCancel , onOk , showNotification , at
|
|||
</Modal>
|
||||
)
|
||||
}
|
||||
export default Form.create()(forwardRef(UploadSource));;
|
||||
export default UploadSource;
|
||||
|
|
|
|||
|
|
@ -225,7 +225,7 @@ export default Form.create()(
|
|||
[],
|
||||
<Checkbox checked={check_box} onChange={change_check_box_status} style={OptionStyle}>新建项目<span className="color-grey-8 ml10">(成员可以在组织中新建项目。创建者将自动获得新建的项目的管理员权限)</span></Checkbox>, false, 20,onwers ? "hide":""
|
||||
)}
|
||||
{helper(
|
||||
{/* {helper(
|
||||
'版本库权限:',
|
||||
"authorize",
|
||||
[],
|
||||
|
|
@ -234,7 +234,7 @@ export default Form.create()(
|
|||
<Radio value="write" style={addStyle}>写入权限<span className="color-grey-8 ml10">(成员可以查看和推送提交到团队项目)</span></Radio>
|
||||
<Radio value="admin" style={OptionStyle}>管理员权限<span className="color-grey-8 ml10">(成员可以拉取和推送到团队项目同时可以添加协作者)</span></Radio>
|
||||
</Radio.Group>, false, 20,onwers ? "hide":""
|
||||
)}
|
||||
)} */}
|
||||
</Form>
|
||||
{/* <div className={(auth!=="owner" && auth !=="admin") ? "" :"hide"}>
|
||||
<p className="required">允许访问项目单元:</p>
|
||||
|
|
|
|||
|
|
@ -217,7 +217,6 @@ export default (props) => {
|
|||
<Button type="default" className="ml10">导出<Icon type="caret-down" /></Button>
|
||||
</Dropdown>
|
||||
<Button type="default" className="ml10" onClick={preview}>预览</Button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,56 @@
|
|||
.delete-modal {
|
||||
.ant-modal-header {
|
||||
padding: 9px 24px;
|
||||
background: #f8f8f8;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
.ant-modal-title {
|
||||
text-align: left;
|
||||
}
|
||||
.ant-modal-close {
|
||||
top: 0px !important;
|
||||
}
|
||||
.ant-modal-close-x {
|
||||
font-size: 24px;
|
||||
}
|
||||
.ant-modal-body {
|
||||
text-align: center;
|
||||
}
|
||||
.delete-title {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin: 2rem 0 1rem !important;
|
||||
font-size: 16px;
|
||||
color: #333;
|
||||
letter-spacing: 0;
|
||||
line-height: 29px;
|
||||
font-weight: 400;
|
||||
}
|
||||
.red-circle {
|
||||
align-self: flex-start;
|
||||
color: #ca0002;
|
||||
font-size: 1.5rem !important;
|
||||
}
|
||||
.delete-descibe {
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
line-height: 33px;
|
||||
font-weight: 400;
|
||||
}
|
||||
.ant-modal-footer {
|
||||
padding: 2rem 0;
|
||||
text-align: center;
|
||||
border: 0;
|
||||
.ant-btn {
|
||||
width: 6rem;
|
||||
}
|
||||
}
|
||||
.foot-submit {
|
||||
margin-left: 3rem;
|
||||
color: #df0002;
|
||||
&:hover {
|
||||
border-color: #df0002;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -12,7 +12,7 @@ if (window.location.href.indexOf('localhost') > -1) {
|
|||
actionUrl = "https://test-search.trustie.net";
|
||||
// actionUrl = 'https://testforgeplus.trustie.net';
|
||||
axios.defaults.withCredentials = true;
|
||||
}else if (window.location.href.indexOf('forgeplus') > -1) {
|
||||
}else if (window.location.href.indexOf('wiki-api') > -1) {
|
||||
actionUrl = "https://wiki-api.trustie.net";
|
||||
axios.defaults.withCredentials = true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,8 +13,10 @@ function Cloud({data}) {
|
|||
var div = new Js2WordCloud(document.getElementById('cloud'))
|
||||
let textList= d.categories;
|
||||
let cyList=[]
|
||||
for(let i=0;i<textList.length;i++){
|
||||
cyList.push([textList[i],textList.length-i])
|
||||
if(textList && textList.length > 0){
|
||||
for(let i=0;i<textList.length;i++){
|
||||
cyList.push([textList[i],textList.length-i]);
|
||||
}
|
||||
}
|
||||
div.setOption({
|
||||
backgroundColor:'transparent',
|
||||
|
|
|
|||
|
|
@ -16,12 +16,14 @@ function ConcentrateBox({ visible , onCancel , onSure , username , choosed , his
|
|||
const [ value , setValue ]= useState([]);
|
||||
const [ isSpin , setIsSpin ]= useState(true);
|
||||
const [ disable , setDisable ] = useState(false);
|
||||
const [ loadCount , setLoadCount ] = useState(0);
|
||||
|
||||
const [ copyList , setCopyList ] = useState([]);
|
||||
const [ copyAllList , setCopyAllList ] = useState([]);
|
||||
|
||||
useEffect(()=>{
|
||||
if(visible){
|
||||
if(visible && loadCount === 0){
|
||||
setLoadCount(loadCount+1);
|
||||
setIsSpin(true);
|
||||
getProjectList();
|
||||
}else{
|
||||
|
|
|
|||
|
|
@ -133,12 +133,7 @@ class Infos extends Component {
|
|||
undo_events:e
|
||||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
this.setState({
|
||||
isSpin: false,
|
||||
});
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
change_devops_type=(type)=>{
|
||||
const {user} = this.state;
|
||||
|
|
@ -194,7 +189,7 @@ class Infos extends Component {
|
|||
render() {
|
||||
const { current_user } = this.props;
|
||||
const { username } = this.props.match.params;
|
||||
const { user, isSpin, route_type , undo_events , menuKey } = this.state;
|
||||
const { user, isSpin, route_type , undo_events , menuKey , project_type } = this.state;
|
||||
return (
|
||||
<div className="newMain clearfix">
|
||||
<Spin spinning={isSpin}>
|
||||
|
|
@ -207,14 +202,14 @@ class Infos extends Component {
|
|||
<span>
|
||||
{
|
||||
user && user.gender===1?
|
||||
<i className="iconfont icon-nan1"></i>
|
||||
<i className="iconfont icon-nan"></i>
|
||||
:
|
||||
<i className="iconfont icon-nv1"></i>
|
||||
<i className="iconfont icon-nv"></i>
|
||||
}
|
||||
</span>
|
||||
</span>
|
||||
|
||||
<div className="text-center mt15 font-24 task-hide" title={user && user.username}>
|
||||
<div className="text-center mt15 font-16 fwb">
|
||||
{user && user.username}
|
||||
</div>
|
||||
<div className="userDescription">
|
||||
|
|
@ -277,6 +272,97 @@ class Infos extends Component {
|
|||
}
|
||||
</div>
|
||||
</div>
|
||||
{current_user && user && user.login === current_user.login ? (
|
||||
<div className="bgcF">
|
||||
<div className="list-l-Menu">
|
||||
<li className={project_type && project_type === "notice" ? "active" : ""}>
|
||||
<p onClick={() => this.undo_link()}>
|
||||
<span className="font-16 color-grey-3">
|
||||
<i className="iconfont icon-dahuizhongzuo3x font-15 mr5"></i>
|
||||
待办事项
|
||||
</span>
|
||||
<span className="text-yellow font-16">
|
||||
{user.undo_events}
|
||||
</span>
|
||||
</p>
|
||||
</li>
|
||||
</div>
|
||||
</div>
|
||||
):""}
|
||||
|
||||
<div className="bgcF">
|
||||
<ul className="list-l-Menu">
|
||||
<li className="MenuTitle" onClick={() => this.change_project_type(undefined)}>
|
||||
<i className="iconfont icon-xiangmuleixing font-15 mr5"></i>
|
||||
项目类型
|
||||
<i className="iconfont icon-youjiantou font-15 mr20 color-grey-9 pull-right"></i>
|
||||
</li>
|
||||
<li className={project_type && project_type === "common" ? "active" : ""} onClick={() => this.change_project_type("common")}>
|
||||
<p>
|
||||
<span className="font-16">开源托管项目</span>
|
||||
<span className="color-blue">
|
||||
{user && user.common_projects_count}
|
||||
</span>
|
||||
</p>
|
||||
</li>
|
||||
<li className={project_type && project_type === "mirror" ? "active" : ""} onClick={() => this.change_project_type("mirror")}>
|
||||
<p>
|
||||
<span className="font-16">开源镜像项目</span>
|
||||
<span className="color-blue">
|
||||
{user && user.mirror_projects_count}
|
||||
</span>
|
||||
</p>
|
||||
</li>
|
||||
<li className={project_type && project_type === "sync_mirror" ? "active" : ""} onClick={() => this.change_project_type("sync_mirror")}>
|
||||
<p>
|
||||
<span className="font-16">镜像托管项目</span>
|
||||
<span className="color-blue">
|
||||
{user && user.sync_mirror_projects_count}
|
||||
</span>
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
{
|
||||
current_user && current_user.login && current_user.login === username &&
|
||||
<div className="bgcF">
|
||||
<ul className="list-l-Menu">
|
||||
<li className="MenuTitle">
|
||||
<i className="iconfont icon-gongzuoliu font-15 mr5"></i>
|
||||
DevOps工作流
|
||||
<i className="iconfont icon-youjiantou font-15 mr20 color-grey-9 pull-right"></i>
|
||||
</li>
|
||||
<li className={project_type && project_type === "CIService" ? "active" : ""} onClick={() => this.change_devops_type("CIService")}>
|
||||
<p>
|
||||
<span className="font-16 color-grey-3">CI服务</span>
|
||||
</p>
|
||||
</li>
|
||||
{/* <li className={project_type && project_type === "CDService" ? "active" : ""} onClick={() => this.change_devops_type("CDService")}>
|
||||
<p>
|
||||
<span className="font-16">CD服务</span>
|
||||
<span className="color-blue">
|
||||
{user && user.common_projects_count}
|
||||
</span>
|
||||
</p>
|
||||
</li> */}
|
||||
</ul>
|
||||
</div>
|
||||
}
|
||||
<div className="bgcF">
|
||||
<div className="list-l-Menu">
|
||||
<li className={project_type && project_type === "organizes" ? "active" : ""}>
|
||||
<p onClick={() => this.organize_link()} >
|
||||
<span className="font-16 color-grey-3">
|
||||
<i className="iconfont icon-itsm-liuchengguanli font-15 mr5"></i>
|
||||
组织
|
||||
</span>
|
||||
<span className="color-blue font-16">
|
||||
{user && user.user_org_count}
|
||||
</span>
|
||||
</p>
|
||||
</li>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="list-right">
|
||||
{ !route_type && menuKey &&
|
||||
|
|
|
|||
|
|
@ -143,18 +143,18 @@ function Index(props) {
|
|||
topThree && topThree.length > 0 &&
|
||||
<div className="roundBox">
|
||||
<Round num={topThree[0][1]} color="#FF7F69" name={topThree[0][0]}/>
|
||||
{ topThree[1] && <Round num={topThree[1][1]} color="#99dfff" name={topThree[1][0]}/> }
|
||||
{ topThree[2] && <Round num={topThree[2][1]} color="#ff9e48" name={topThree[2][0]}/> }
|
||||
<Round num={topThree[1][1]} color="#99dfff" name={topThree[1][0]}/>
|
||||
<Round num={topThree[2][1]} color="#ff9e48" name={topThree[2][0]}/>
|
||||
</div>
|
||||
}
|
||||
{
|
||||
percentData &&
|
||||
<div className="pBox">
|
||||
<div className="progress">
|
||||
<div class="progress">
|
||||
{
|
||||
percentData.map((i,k)=>{
|
||||
return(
|
||||
<span key={i.name} style={{width: `${i.p}%`, backgroundColor:`${i.color}`}}></span>
|
||||
<span style={{width: `${i.p}%`, backgroundColor:`${i.color}`}}></span>
|
||||
)
|
||||
})
|
||||
}
|
||||
|
|
@ -163,8 +163,8 @@ function Index(props) {
|
|||
{
|
||||
percentData.map((i,k)=>{
|
||||
return(
|
||||
<span key={i.name}>
|
||||
<i className="zero" style={{backgroundColor: `${i.color}`}}></i><span>{i.name}</span>
|
||||
<span>
|
||||
<i class="zero" style={{backgroundColor: `${i.color}`}}></i><span>{i.name}</span>
|
||||
<span>{`${i.p}%`}</span>
|
||||
</span>
|
||||
)
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 27 KiB |
|
|
@ -1,11 +1,11 @@
|
|||
import React, {Component} from "react";
|
||||
import React, { Component } from "react";
|
||||
import moment from 'moment';
|
||||
import { getImageUrl } from 'educoder';
|
||||
import '../courses/css/members.css';
|
||||
import "../courses/common/formCommon.css";
|
||||
import '../courses/css/Courses.css';
|
||||
import beijintulogontwo from '../../../src/images/login/beijintulogontwo.png';
|
||||
import educodernet from '../../../src/images/login/educodernet.png';
|
||||
import educodernet from '../../../src/images/login/logo.png';
|
||||
import LoginRegisterComponent from '../user/LoginRegisterComponent';
|
||||
import FindPasswordComponent from '../user/FindPasswordComponent';
|
||||
//educoder登入页面
|
||||
|
|
@ -94,84 +94,39 @@ class EducoderLogin extends Component {
|
|||
|
||||
|
||||
render() {
|
||||
let {showbool,loginstatus,logini} = this.state;
|
||||
let { showbool } = this.state;
|
||||
const { settings } = this.props;
|
||||
return (
|
||||
<div style={newContainer} className=" clearfix" >
|
||||
|
||||
<div >
|
||||
<div style={{
|
||||
"display": "flex",
|
||||
"justify-content": "center",
|
||||
"align-items": "center",
|
||||
"width": "100%"
|
||||
}}>
|
||||
<div style={{cursor:"pointer"}}>
|
||||
{this.props.mygetHelmetapi === null ? ""
|
||||
:
|
||||
this.props.mygetHelmetapi===undefined||this.props.mygetHelmetapi.login_logo_url===null|| this.props.mygetHelmetapi.login_logo_url===undefined?
|
||||
<img style={{cursor:"pointer"}} onClick={()=>this.gohome()} src={educodernet}/>
|
||||
:
|
||||
<img style={{cursor:"pointer"}} onClick={()=>this.gohome()} src={getImageUrl(this.props.mygetHelmetapi.login_logo_url)}/>
|
||||
}
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div style={{"justify-content": "center","align-items": "center","width": "100%",textAlign:"center"}}>
|
||||
<div style={{cursor:"pointer"}}>
|
||||
{
|
||||
settings && settings.login_logo_url ?
|
||||
<img style={{cursor:"pointer"}} alt="" onClick={()=>this.gohome()} width="80px" src={getImageUrl(settings.login_logo_url)}/>
|
||||
:
|
||||
<img style={{cursor:"pointer"}} alt="" onClick={()=>this.gohome()} src={educodernet} width="80px"/>
|
||||
}
|
||||
</div>
|
||||
{
|
||||
showbool === 1 ?
|
||||
<div style={{
|
||||
display: "flex",
|
||||
justifyContent: "center",
|
||||
width: "100%",
|
||||
marginTop: "25px",
|
||||
}}>
|
||||
<div>
|
||||
|
||||
<LoginRegisterComponent {...this.props} {...this.state}
|
||||
Setshowbool={(e)=>this.Setshowbool(e)} ></LoginRegisterComponent>
|
||||
|
||||
</div>
|
||||
|
||||
<div style={{
|
||||
display: "flex",
|
||||
justifyContent: "center",
|
||||
width: "100%",
|
||||
marginTop: "25px",
|
||||
}}>
|
||||
<div>
|
||||
<LoginRegisterComponent {...this.props} {...this.state} Setshowbool={(e)=>this.Setshowbool(e)} ></LoginRegisterComponent>
|
||||
</div>
|
||||
</div>
|
||||
:
|
||||
<div style={{
|
||||
display: "flex",
|
||||
justifyContent: "center",
|
||||
width: "100%",
|
||||
marginTop: "25px",
|
||||
}}>
|
||||
<div >
|
||||
<FindPasswordComponent {...this.props} {...this.state}
|
||||
Setshowbool={(e)=>this.Setshowbool(e)}></FindPasswordComponent>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div style={{display: "flex",justifyContent: "center",width: "100%",marginTop: "25px",}}>
|
||||
<div>
|
||||
<FindPasswordComponent {...this.props} {...this.state} Setshowbool={(e)=>this.Setshowbool(e)}></FindPasswordComponent>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
{this.props.mygetHelmetapi === null ? <div style={{
|
||||
display: "flex",
|
||||
justifyContent: "center",
|
||||
width: "100%",
|
||||
}}>
|
||||
<div className="font-14 color-grey-9 " style={{marginTop:"20px"}}><span className="font-18">©</span> {moment().year()} EduCoder<span className="ml15 mr15">湘ICP备17009477号</span><a href="https://team.trustie.net" style={{"color":"#888"}} target="_blank">Trustie</a> & IntelliDE inside.</div>
|
||||
</div>:
|
||||
this.props.mygetHelmetapi===undefined||this.props.mygetHelmetapi.main_site===null|| this.props.mygetHelmetapi.main_site===undefined? <div style={{
|
||||
display: "flex",
|
||||
justifyContent: "center",
|
||||
width: "100%",
|
||||
}}>
|
||||
<div className="font-14 color-grey-9 " style={{marginTop:"20px"}}><span className="font-18">©</span> {moment().year()} EduCoder<span className="ml15 mr15">湘ICP备17009477号</span><a href="https://team.trustie.net" style={{"color":"#888"}} target="_blank">Trustie</a> & IntelliDE inside.</div>
|
||||
</div>:this.props.mygetHelmetapi.main_site===true?
|
||||
<div style={{
|
||||
display: "flex",
|
||||
justifyContent: "center",
|
||||
width: "100%",
|
||||
}}>
|
||||
<div className="font-14 color-grey-9 " style={{marginTop:"20px"}}><span className="font-18">©</span> {moment().year()} EduCoder<span className="ml15 mr15">湘ICP备17009477号</span><a href="https://team.trustie.net" style={{"color":"#888"}} target="_blank">Trustie</a> & IntelliDE inside.</div>
|
||||
</div>
|
||||
:""
|
||||
}
|
||||
|
||||
<div className="font-14 color-grey-9 " style={{marginTop:"20px"}}><span className="font-18">©</span> {moment().year()} EduCoder<span className="ml15 mr15">湘ICP备17009477号</span><a href="https://team.trustie.net" style={{"color":"#888"}} target="_blank">Trustie</a> & IntelliDE inside.</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -321,8 +321,8 @@ class LoginDialog extends Component {
|
|||
return flag;
|
||||
}
|
||||
componentDidMount() {
|
||||
//true为PC端,false为手机端
|
||||
let flag = this.IsPC();
|
||||
|
||||
let flag = this.IsPC(); //true为PC端,false为手机端
|
||||
this.setState({
|
||||
isphone: flag
|
||||
})
|
||||
|
|
@ -455,9 +455,10 @@ class LoginDialog extends Component {
|
|||
}
|
||||
|
||||
render() {
|
||||
let { login, isGoing, isGoingValue, disabled , Phonenumberisnotco , dialogBox, isRender, weixinlogin } = this.state;
|
||||
let { settings } = this.props;
|
||||
let { login, isGoing, isGoingValue, disabled, Phonenumberisnotco,
|
||||
dialogBox, isRender, weixinlogin } = this.state;
|
||||
|
||||
let { settings } = this.props;
|
||||
if (isRender === undefined) {
|
||||
isRender = false
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1068,11 +1068,6 @@ class NewMyShixunModel extends Component {
|
|||
<style>
|
||||
{
|
||||
`
|
||||
.newHeaders{
|
||||
position: fixed;
|
||||
top: 0px;
|
||||
z-index: 999 !important;
|
||||
}
|
||||
.ant-drawer {
|
||||
z-index: 800 !important;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,12 +28,12 @@ body>.-task-title {
|
|||
height:70px;
|
||||
min-width: 1200px;
|
||||
z-index: 1000;
|
||||
background:rgba(255,255,255,1);
|
||||
background:#001529;
|
||||
position: fixed;
|
||||
box-shadow: 0px 0px 14px rgb(0 0 0 / 10%);
|
||||
}
|
||||
.headerContent{
|
||||
width:1200px;
|
||||
padding:0px 25px;
|
||||
margin:0px auto;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
|
@ -135,7 +135,6 @@ body>.-task-title {
|
|||
height: 60px !important;
|
||||
}
|
||||
|
||||
|
||||
.HeaderSearch {
|
||||
margin-top: 18px;
|
||||
margin-right: 20px;
|
||||
|
|
@ -329,4 +328,137 @@ body>.-task-title {
|
|||
.progress-container {
|
||||
flex: 1 0 0;
|
||||
margin-left: 20px;
|
||||
}
|
||||
.newFooter > div{
|
||||
padding: 90px 20px;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
-ms-flex-align: start;
|
||||
align-items: flex-start;
|
||||
background: #242424;
|
||||
min-width: 1200px;
|
||||
}
|
||||
|
||||
.newFooter .module-list{
|
||||
width: 200px;
|
||||
text-align: left;
|
||||
}
|
||||
.newFooter .module-list>.title{
|
||||
font-size: 16px;
|
||||
color: #ddd;
|
||||
margin-bottom: 20px;
|
||||
font-weight: 400;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
padding: 0px;
|
||||
}
|
||||
.newFooter .module-list a {
|
||||
display: block;
|
||||
color: #bbb;
|
||||
line-height: 34px;
|
||||
font-weight: 300;
|
||||
font-size: 12px;
|
||||
}
|
||||
.newFooter .module-list a:hover {
|
||||
color: #fff;
|
||||
}
|
||||
.newFooter .module-introduce{
|
||||
display: flex;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
width: 290px;
|
||||
margin-top: -12px;
|
||||
}
|
||||
.newFooter .module-introduce p {
|
||||
font-size: 12px;
|
||||
color: #bbb;
|
||||
line-height: 32px;
|
||||
margin-top: 12px;
|
||||
font-weight: 300;
|
||||
text-align: justify;
|
||||
}
|
||||
.module-introduce ul {
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-pack: distribute;
|
||||
justify-content: space-around;
|
||||
padding: 0;
|
||||
margin-top: 20px;
|
||||
}
|
||||
.module-introduce ul {
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-pack: distribute;
|
||||
justify-content: space-around;
|
||||
padding: 0;
|
||||
margin-top: 20px;
|
||||
}
|
||||
.module-introduce ul li:first-child {
|
||||
margin-right: 50px;
|
||||
}
|
||||
.module-introduce ul li {
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
}
|
||||
.module-introduce ul li>span {
|
||||
font-size: 12px;
|
||||
color: #bbb;
|
||||
padding-top: 10px;
|
||||
}
|
||||
.module-introduce ol {
|
||||
margin-top: 16px;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-pack: distribute;
|
||||
justify-content: space-around;
|
||||
padding: 0;
|
||||
height: 108px;
|
||||
width: 100%;
|
||||
}
|
||||
.module-introduce ol li {
|
||||
height: 100%;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
-ms-flex-pack: justify;
|
||||
justify-content: space-between;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
}
|
||||
.module-introduce ol li a {
|
||||
font-size: 14px;
|
||||
color: #bbb;
|
||||
margin-top: 20px;
|
||||
}
|
||||
.module-introduce section {
|
||||
width: 100%;
|
||||
height: 115px;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
-ms-flex-pack: justify;
|
||||
justify-content: space-between;
|
||||
-ms-flex-align: start;
|
||||
align-items: flex-start;
|
||||
font-size: 14px;
|
||||
color: #bbb;
|
||||
font-weight: 300;
|
||||
}
|
||||
.module-introduce .footer-line {
|
||||
width: 310px;
|
||||
height: 1px;
|
||||
background-color: #3e4042;
|
||||
margin: 32px 0;
|
||||
}
|
||||
|
|
@ -7,6 +7,8 @@ import './TPMIndex.css';
|
|||
import LoginDialog from '../login/LoginDialog';
|
||||
import EducoderAccount from '../../forge/Component/EducoderAccount';
|
||||
import ProfileModal from '../../forge/Component/ProfileModal/Index';
|
||||
// import AccountProfile from '../user/AccountProfile';
|
||||
// import AccountPhoneemail from '../user/AccountPhoneemail';
|
||||
|
||||
export function TPMIndexHOC(WrappedComponent) {
|
||||
return class II extends React.Component {
|
||||
|
|
@ -27,7 +29,8 @@ export function TPMIndexHOC(WrappedComponent) {
|
|||
giteaVisible:false,
|
||||
email:undefined,
|
||||
completeProfile:false,
|
||||
showCP:false
|
||||
showCP:false,
|
||||
is_sync_pwd:undefined
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -168,6 +171,24 @@ export function TPMIndexHOC(WrappedComponent) {
|
|||
})
|
||||
}
|
||||
}
|
||||
if(response.data && response.data.login){
|
||||
if(!response.data.has_gitea_user || (response.data.has_gitea_user && !response.data.is_sync_pwd)){
|
||||
this.setState({
|
||||
giteaVisible:true,
|
||||
email:response.data.email,
|
||||
is_sync_pwd:response.data.is_sync_pwd
|
||||
})
|
||||
}
|
||||
}
|
||||
if(response.data && response.data.login){
|
||||
if(!response.data.has_gitea_user || (response.data.has_gitea_user && !response.data.is_sync_pwd)){
|
||||
this.setState({
|
||||
giteaVisible:true,
|
||||
email:response.data.email,
|
||||
is_sync_pwd:response.data.is_sync_pwd
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}).catch((error) => {
|
||||
console.log(error)
|
||||
|
|
@ -192,8 +213,11 @@ export function TPMIndexHOC(WrappedComponent) {
|
|||
}
|
||||
|
||||
onOk =(values)=>{
|
||||
let url = `/users/sync_user_info.json`;
|
||||
const { current_user } = this.state;
|
||||
let url = `/accounts/gitea_register.json`;
|
||||
const { email , current_user , is_sync_pwd } = this.state;
|
||||
if(email && !is_sync_pwd){
|
||||
url = `/users/change_password.json`;
|
||||
}
|
||||
axios.post(url,{
|
||||
login:current_user && current_user.login,
|
||||
...values
|
||||
|
|
@ -215,6 +239,22 @@ export function TPMIndexHOC(WrappedComponent) {
|
|||
}
|
||||
|
||||
|
||||
onOk =(values)=>{
|
||||
let url = `/users/sync_user_info.json`;
|
||||
const { current_user } = this.state;
|
||||
axios.post(url,{
|
||||
login:current_user && current_user.login,
|
||||
...values
|
||||
}).then(result=>{
|
||||
if(result && result.data && result.data.status === 0){
|
||||
this.setState({
|
||||
giteaVisible:false,
|
||||
email:undefined
|
||||
})
|
||||
window.location.reload();
|
||||
}
|
||||
}).catch(error=>{})
|
||||
}
|
||||
render() {
|
||||
let { isRender , current_user , giteaVisible , email , completeProfile , showCP } = this.state;
|
||||
const common = {
|
||||
|
|
|
|||
Loading…
Reference in New Issue