Merge pull request '修改登录加密、管理模块路由、合并后的issue等' (#345) from tongChong/forgeplus-react:JKDevelop into JKDevelop

This commit is contained in:
xxq250 2022-03-03 11:44:18 +08:00
commit 16f41f4299
43 changed files with 604 additions and 698 deletions

View File

@ -22,6 +22,7 @@ import { SnackbarHOC } from 'educoder';
import { initAxiosInterceptors } from './AppConfig'
import { Provider } from 'react-redux';
import configureStore from './redux/stores/configureStore';
import { indexOf } from 'lodash';
const store = configureStore();
window.marked = marked;
const theme = createMuiTheme({
@ -123,8 +124,20 @@ const AboutUs = Loadable({
loading: Loading,
})
const Teaching = Loadable({
loader : () => import("./forge/TeachingPractice/Teaching"),
// const Teaching = Loadable({
// loader : () => import("./forge/TeachingPractice/Teaching"),
// loading: Loading,
// });
// 首页
const HomePage = Loadable({
loader: () => import('./home'),
loading: Loading,
});
// 管理页面
const Managements = Loadable({
loader: () => import('./military/managements'),
loading: Loading,
})
// const CreateMerge = Loadable({
@ -133,7 +146,7 @@ const Teaching = Loadable({
// })
// 此处仅维护前端可能的一级路由,不用进行项目或者组织判断的字段。
const keyWord = ["explore", "settings", "setting", "mulan", "wiki", "issues", "setting", "trending", "code", "projects", "pulls", "mine", "login", "register", "email", "export", "nopage", "404", "403", "500", "501", "search", "organize", "login", "register", "resetPassword", "aboutus","educoder","task","notice"];
const keyWord = ["explore", "settings", "setting", "mulan", "wiki", "issues", "setting", "trending", "code", "projects", "pulls", "mine", "login", "register", "email", "export", "nopage", "404", "403", "500", "501", "search", "organize", "login", "register", "resetPassword", "aboutus","educoder","task","notice","managements","expert",];
class App extends Component {
constructor(props) {
@ -184,7 +197,11 @@ class App extends Component {
this.setState({
pathType: response.data.type || '404',
pathName: pathname,
})
});
// 如果属于组织或者个人那么存储该用户到sessionStorage中作为判断是否为开源项目导航菜单的依据
if(['User','Organization'].includes(response.data.type)){
sessionStorage.setItem("pathname",pathname);
}
}
});
}else{
@ -386,6 +403,11 @@ class App extends Component {
path="/register"
render={(props) =><LoginRegisterPage {...this.props} {...props}/>}
></Route>
{/*管理页面*/}
<Route path="/managements" component={Managements} />
{/*403*/}
<Route path="/403" component={Shixunauthority} />
{/* 忘记密码 */}
<Route
@ -400,10 +422,10 @@ class App extends Component {
></Route>
{/* 教学实践 */}
<Route
{/* <Route
path="/educoder"
render={(props) => <Teaching {...this.props} {...props} />}
></Route>
></Route> */}
{/* 组织 */}
<Route path={"/organize"}

View File

@ -1,6 +1,6 @@
import { queryString } from 'educoder'
import { queryString } from "educoder";
export function updatePageParams(pageNum, props) {
const url = props.match.url
const url = props.match.url;
const _search = props.location.search;
let parsed = {};
@ -9,7 +9,22 @@ export function updatePageParams(pageNum, props) {
}
// 修改page參數
parsed.page = pageNum
parsed.page = pageNum;
props.history.push(`${url}?${queryString.stringify(parsed)}`)
props.history.push(`${url}?${queryString.stringify(parsed)}`);
}
export function goUser(login) {
const main_web_site_url =
localStorage.chromesetting &&
JSON.parse(localStorage.chromesetting).main_web_site_url;
window.location.href = `${main_web_site_url}/accounts/${login}`;
}
export function goUserMes(user_id) {
const main_web_site_url =
localStorage.chromesetting &&
JSON.parse(localStorage.chromesetting).main_web_site_url;
const login =sessionStorage.current_user &&JSON.parse(sessionStorage.current_user).login;
window.location.href = `${main_web_site_url}/users/${login}/message_detail?user_id=${user_id}`;
}

View File

@ -20,7 +20,7 @@ export {
, broadcastChannelPostMessage, broadcastChannelOnmessage
} from './EventUtil';
export { updatePageParams as updatePageParams } from './RouterUtil';
export { updatePageParams as updatePageParams ,goUserMes,goUser} from './RouterUtil';
export { bytesToSize as bytesToSize } from './UnitUtil';

View File

@ -25,7 +25,7 @@ function DeleteBox({
>
<div className="desc">
<AlignCenter className="descMain"><i className="iconfont icon-shanchu_tc_icon mr10"></i>{content}</AlignCenter>
<p>{subTitle}</p>
<p className="task-hide-2" style={{WebkitLineClamp:5}}>删除后未来事件将不会推送至此Webhook地址<span title={subTitle}>{subTitle}</span></p>
</div>
</Modals>
)

View File

@ -36,15 +36,15 @@ function About(props, ref) {
const [ disabled, setDisabled ] = useState(false);
const [ typeFlag, setTypeFlag] = useState(false);
const AuthorLogin = props.projectDetail && props.projectDetail.author && props.projectDetail.author.login;
const isPermission = props.projectDetail && props.projectDetail.permission && props.projectDetail.permission!=="Reporter";
const CurrentLogin = props.current_user && props.current_user.login;
useEffect(()=>{
if(CurrentLogin === AuthorLogin){
if(isPermission){
auth('get');
}else{
setIsSpining(false);
}
},[AuthorLogin,CurrentLogin])
},[isPermission,CurrentLogin])
function auth(type){
const url = `/${owner}/${projectsId}/ci_authorize.json`;
@ -167,7 +167,7 @@ function About(props, ref) {
<img src={activate} alt="" width="250px" />
<P>定义DevOps工作流帮助您检测bug发布代码</P>
{
CurrentLogin !== AuthorLogin ?
!isPermission ?
<div className="noOperation">DevOps开启功能暂未对项目创建者以外的角色开放可以联系项目创建者进行开启开启后便可查看构建信息</div>:""
}
<a href={"https://forum.trustie.net/forums/3110/detail"} target="_blank" style={{ color: "#5091FF"}}>
@ -177,7 +177,7 @@ function About(props, ref) {
如何使用引擎Engine功能
</a>
{
AuthorLogin === CurrentLogin ?
isPermission ?
<React.Fragment>
{
step === 0 && !typeFlag ?

View File

@ -533,7 +533,7 @@ function CoderDepot(props){
<FlexAJ className="font-18 color-ooo mb20" style={{lineHeight:"28px"}}>关于
{
projectDetail.permission && (projectDetail.permission==="Admin" || projectDetail.permission==="Owner" || projectDetail.permission==="Manager") &&
<i onClick={()=>setOpenModal(true)} className="iconfont icon-a-shezhi color-grey-9 font-15"></i>
<i onClick={()=>setOpenModal(true)} className="iconfont icon-a-shezhi color-grey-9 font-15 pointer"></i>
}
</FlexAJ>
{desc && <p className="font-14 color-grey-3 mb15 task-hide-2" style={{lineHeight:"24px",WebkitLineClamp:"4",textAlign:"justify",wordBreak:"break-all"}} title={desc}>{desc}</p>}

View File

@ -255,7 +255,7 @@ class Index extends Component {
<Menu onClick={this.ChangeSoryBy}>
<Menu.Item key="updated_on">更新时间排序</Menu.Item>
<Menu.Item key="created_on">创建时间排序</Menu.Item>
<Menu.Item key="forked_count">fork数排序</Menu.Item>
<Menu.Item key="forked_count">fork数排序</Menu.Item>
<Menu.Item key="praises_count">点赞数量排序</Menu.Item>
</Menu>
)

View File

@ -83,7 +83,7 @@ class IndexItem extends Component {
<div className="p-r-Infos">
<div className="p-r-name">
<AlignCenter>
<Link to={`/${item.author.login}/${item.identifier}`} target="_blank" title={`${item.author.name}/${item.name}`} className="color-grey-3 font-18 task-hide " style={{maxWidth: 470 }}>
<Link to={`/${item.author.login}/${item.identifier}`} title={`${item.author.name}/${item.name}`} className="color-grey-3 font-18 task-hide " style={{maxWidth: 470 }}>
{item.author.name}/{item.name}
</Link>
{ !item.is_public && <span className="privateTag">私有</span> }

View File

@ -16,7 +16,8 @@ function SpecialModal({ visible , hideModal , sureModal , showNotification , use
function sure(){
if(!user_apply_signatures || (user_apply_signatures && user_apply_signatures.status !== "waiting")){
if(!id || (id && id.length === 0)){
showNotification("请先提交文件进行审核!");
// showNotification("");
getUrl(`/api/apply_signatures/template_file`)
return;
}
const url = `/apply_signatures.json`;

View File

@ -210,8 +210,10 @@ class order extends Component {
});
}
}
const { select_params } = this.state;
this.setState({
select_params:{
...select_params,
order_name:key_name[0],
order_type:e.item.props.value,
page:1
@ -220,9 +222,6 @@ class order extends Component {
const { status_type } = this.state;
this.getIssueList(status_type);
})
// this.state.select_params.order_name = key_name[0];
// this.state.select_params.order_type = e.item.props.value;
// this.state.select_params.page = 1;
};
getOption = (e, id, name, toGet) => {
@ -283,15 +282,15 @@ class order extends Component {
// 翻页
ChangePage = (page) => {
window.scrollTo(0,0);
const { status_type } = this.state;
this.setState({
isSpin: true,
checkedValue: [],
all: false
});
const { status_type } = this.state;
all: false,
},()=>{
this.state.select_params.page=page;
this.getIssueList(status_type);
});
};
// 搜索
@ -346,12 +345,12 @@ class order extends Component {
ChangeAssign = (type) => {
const { current_user } = this.props;
this.setState({
isSpin: true,
isSpin: true
});
if (type) {
if (!current_user) {
this.setState({
isSpin: false,
isSpin: false
});
return;
}
@ -385,7 +384,7 @@ class order extends Component {
this.state.select_params.author_id = undefined;
}
const { status_type } = this.state;
this.state.select_params.page = 1;
this.getIssueList(status_type);
};
@ -563,6 +562,49 @@ class order extends Component {
}
})
}
clearSelectParams=()=>{
this.setState({
status_type: "1", // 默认显示开启中的
issue_tag_ids: "标记",
tracker_ids: "类型",
author_ids: "发布人",
assigned_to_ids: "负责人",
fixed_version_ids: "里程碑",
status_ids: "状态",
done_ratios: "完成度",
paix: "排序",
update_author_ids: "更换负责人",
update_fixed_version_ids: '更换里程碑',
update_status_ids: "修改状态",
begin: '',
end: '',
checkedValue: [],
allValue: [],
all: false,
search:undefined,
select_params: {
assigned_to_id: undefined, // 负责人
author_id: undefined, // 发布人
issue_tag_id: undefined, // 标记
tracker_id: undefined, //类型
done_ratio: undefined, // 完成度
status_id: undefined, // 优先级
fixed_version_id: undefined,//里程碑
order_name: undefined,
order_type: undefined,
search: undefined,
update_author_id: undefined,
update_fixed_version_id: undefined,
update_status_id: undefined,
page: 1,
limit: 15,
}
},()=>{
this.getIssueList("1");
})
}
menu =()=> (
<Menu onClick={(e) => this.getMenu(e)}>
<Menu.Item key={"created_on-desc"} value="desc">
@ -634,6 +676,7 @@ class order extends Component {
/>
</div>
<div>
<a className="mr20 color-grey-6" onClick={this.clearSelectParams}><i className="iconfont icon-shanchu6 mr3 font-14"></i></a>
<DatePicker
value={begin ? moment(begin, 'YYYY-MM-DD') : ""}
style={{ marginRight: "20px" }}
@ -912,7 +955,7 @@ class order extends Component {
<div className="pt30 mb30 edu-txt-center" style={{borderTop:"1px solid #eee"}}>
<Pagination
simple
defaultCurrent={select_params.page}
current={select_params.page}
total={search_count}
pageSize={select_params.limit}
onChange={this.ChangePage}

View File

@ -177,15 +177,14 @@ function New({ form , match , showNotification , history }) {
onSuccess={onSuccess}
title="删除Webhook"
content="您确定要删除此Webhook吗"
subTitle={`删除后未来事件将不会推送至此Webhook地址${data && data.url}`}
subTitle={`${data && data.url}`}
/>
<Banner>
<Link to={`/${owner}/${projectsId}/settings/webhooks`} className="color-blue">
<i className="iconfont icon-zuojiantou mr5 font-16"></i>
Webhooks
</Link>
{/* <Button type="primary" size="large">{id ? "更新" : "添加"}Webhook</Button> */}
<span>
<Link to={`/${owner}/${projectsId}/settings/webhooks`} className="color-blue">Webhooks</Link>
<i className="iconfont icon-youjiantou ml5 mr5 font-12"></i>
<span>{id ? "更新" : "添加"}Webhook</span>
</span>
</Banner>
<div>
<p className="deschead mg"><span>当webhook被触发时我们将向以下URL发送通知包括已选择事件的详细信息更多信息可查阅<a className="color-blue hoverLine" target="_blank" href="https://forum.trustie.net/forums/3408/detail">webhooks指南</a></span></p>
@ -200,7 +199,7 @@ function New({ form , match , showNotification , history }) {
}
]
})(
<Input placeholder="请输入目标URL" size="large" autocomplete='off'/>
<Input placeholder="请输入目标URL" maxLength="100" size="large" autocomplete='off'/>
)}
</Form.Item>
<Form.Item label="Webhook密钥" colon={false}>
@ -261,11 +260,11 @@ function New({ form , match , showNotification , history }) {
</span> */}
<span>
<Checkbox value="create">创建</Checkbox>
<span>创建分支或标</span>
<span>创建分支或标</span>
</span>
<span>
<Checkbox value="delete">删除</Checkbox>
<span>删除分支或标</span>
<span>删除分支或标</span>
</span>
</div>
<p className="color-grey-3 mt10 mb10">合并请求事件</p>

View File

@ -74,6 +74,7 @@ export default Form.create()(
function getImage(image){
setImageFlag(true);
setImage(image);
console.log(image);
}
//
@ -107,6 +108,7 @@ export default Form.create()(
}
callback();
}
return(
<div>
<WhiteBack>
@ -176,11 +178,11 @@ export default Form.create()(
'最大仓库数:',
"max_repo_creation",
[],
<InputNumber value="-1" style={{width:"350px"}}/>,false,false,
<InputNumber value="-1" max={1000} style={{width:"350px"}}/>,false,false,
"当输入栏为空时,默认数量无限制"
)}
<p>选择头像:</p>
<UploadImage url={getImageUrl(`/${image}`)} getImage={getImage}/>
<UploadImage url={image&&image.startsWith('images/avatars/Organization')?getImageUrl(`/${image}`):image} getImage={getImage}/>
<Button type={"primary"} onClick={updateDetail}>更新组织设置</Button>
</Form>
</Div>

View File

@ -6,7 +6,7 @@ import Nodata from '../Nodata';
import { Pagination , Spin } from 'antd';
import AddMemberBox from './Component/AddMemberBox';
const limit = 15;
const limit = 16;
function TeamMember({organizeDetail,current_user,history,match}){
const OIdentifier = match.params.OIdentifier;
const [ page , setPage ] = useState(1);
@ -24,7 +24,7 @@ function TeamMember({organizeDetail,current_user,history,match}){
setIsSpin(true);
const url = `/organizations/${organizeDetail.id}/organization_users.json`;
axios.get(url,{
page,limit
params:{page,limit}
}).then(result=>{
if(result && result.data){
setList(result.data.organization_users);
@ -76,7 +76,7 @@ function TeamMember({organizeDetail,current_user,history,match}){
{
total >limit &&
<div className="mt20 pb20 edu-txt-center">
<Pagination simple current={page} pageSize={limit} total={total} onChange={(page)=>setPage(page)}/>
<Pagination simple current={page} pageSize={limit} total={total} onChange={(p)=>setPage(p)}/>
</div>
}
</WhiteBack>

View File

@ -108,7 +108,7 @@ class InfosUser extends Component {
<Menu onClick={this.ChangeSoryBy}>
<Menu.Item key="updated_on">更新时间排序</Menu.Item>
<Menu.Item key="created_on">创建时间排序</Menu.Item>
<Menu.Item key="forked_count">fork数排序</Menu.Item>
<Menu.Item key="forked_count">fork数排序</Menu.Item>
<Menu.Item key="praises_count">点赞数量排序</Menu.Item>
</Menu>
);

View File

@ -121,7 +121,7 @@ function Index(props) {
}
}).then(result=>{
if(result && result.data){
setCloudData({categories:[]});
setCloudData(result.data || []);
}
}).catch(error=>{})
}
@ -202,7 +202,7 @@ function Index(props) {
<div className="echartBox">
<p>展示你擅长关注感兴趣的专业范围通过你参与项目收藏项目关注项目复刻项目等数据来统计</p>
{
cloudData && cloudData.length >0?
cloudData && cloudData.categories && cloudData.categories.length > 0?
<Cloud data={cloudData}/>
:
<Nodata _html="暂无数据" small={true}/>

View File

@ -112,7 +112,7 @@
&.newHeaders {
// background-color: #1a2358;
background-color: #0037af;
z-index: 1000000;
z-index: 1000;
}
.newFooter{
background: inherit;

View File

@ -1,4 +1,4 @@
import React, { useMemo,useState } from 'react';
import React, { useEffect, useMemo,useState } from 'react';
import { Link } from "react-router-dom";
import { Menu, Dropdown, } from 'antd';
@ -7,20 +7,27 @@ import './index.scss';
const { SubMenu } = Menu;
export default props => {
const {current_user}=props;
const main_web_site_url =localStorage.chromesetting&& JSON.parse(localStorage.chromesetting).main_web_site_url;
const current_main_site_url =localStorage.chromesetting&& JSON.parse(localStorage.chromesetting).current_main_site_url;
const noticeUrl =localStorage.chromesetting&& JSON.parse(localStorage.chromesetting).api_urls.notice;
useEffect(()=>{
sessionStorage.setItem('current_user',JSON.stringify(current_user));
},[current_user.login]);
const [current,setCurrent]=useState(JSON.parse(sessionStorage.adminRouter||'[]'));
const [title,setTitle]=useState('');
function handleClick (e){
setCurrent([e.key]);
setTitle(e.item.props.title);
sessionStorage.setItem( 'adminRouter',JSON.stringify([e.key]));
};
const projectMenu = useMemo(() => {
return <Menu>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${current_main_site_url}/admins`}>项目管理后台</a></Menu.Item>
<Menu.Item><a rel="noopener noreferrer" href={`${current_main_site_url}/admins`}>项目管理后台</a></Menu.Item>
</Menu>
});
@ -35,84 +42,79 @@ export default props => {
<Menu.Item><a href={`${main_web_site_url}/admin/sign_agreement_setting`}>应征投稿协议内容</a></Menu.Item>
</SubMenu>
<SubMenu title="代办事项" >
<Menu.Item key="delayManage"><Link to={`/task/delayManage`}>延期任务处理</Link></Menu.Item>
{/* <Menu.Item><a href={`${main_web_site_url}/admin/audit_files`}>协议签订凭证上传</a></Menu.Item> */}
<Menu.Item key="payProof"><Link to="/task/payProof">支付报酬凭证上传</Link></Menu.Item>
<Menu.Item title="task" key="delayManage"><Link to="/managements/task/delayManage">延期任务处理</Link></Menu.Item>
<Menu.Item title="task" key="payProof"><Link to="/managements/task/payProof">支付报酬凭证上传</Link></Menu.Item>
</SubMenu>
<Menu.Item key="taskAdmin"><Link to="/task/taskAdmin">创客任务列表</Link></Menu.Item>
<Menu.Item title="task" key="taskAdmin"><Link to="/managements/task/taskAdmin">创客任务列表</Link></Menu.Item>
</Menu>
});
const competitionMenu = useMemo(() => {
return <Menu>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/competitions/list`}>竞赛列表</a></Menu.Item>
<Menu.Item><Link to="/expert/admin/competition">评审任务列表</Link></Menu.Item>
return <Menu selectedKeys={current} onClick={handleClick} >
<Menu.Item><a rel="noopener noreferrer" href={`${main_web_site_url}/admin/competitions/list`}>竞赛列表</a></Menu.Item>
<Menu.Item><a rel="noopener noreferrer" href={`${main_web_site_url}/admin/competitions/region_zone_edit`}>赛区配置</a></Menu.Item>
<Menu.Item title="competition" key="competitionReview" ><Link to="/managements/expert/competition">竞赛评审列表</Link></Menu.Item>
</Menu>
});
// const expertMenu = useMemo(() => {
// return <Menu>
// <Menu.Item><Link to={`/expert/admin/register`}></Link></Menu.Item>
// <Menu.Item><Link to={`/expert/admin/list`}></Link></Menu.Item>
// </Menu>
// });
const userMenu = useMemo(() => {
return <Menu selectedKeys={current} onClick={handleClick}>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/managements/users`}>用户列表</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/entities`}>主体信息列表</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/managements/users_trial`}>试用授权列表</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/managements/auto_users_trial`}>自动授权列表</a></Menu.Item>
<Menu.Item key={'register'}><Link to={`/expert/admin/register`}>专家注册列表</Link></Menu.Item>
<Menu.Item key={'expertList'}><Link to={`/expert/admin/list`}>专家库列表</Link></Menu.Item>
<Menu.Item><a rel="noopener noreferrer" href={`${main_web_site_url}/managements/users`}>用户列表</a></Menu.Item>
<Menu.Item><a rel="noopener noreferrer" href={`${main_web_site_url}/admin/entities`}>主体信息列表</a></Menu.Item>
<Menu.Item><a rel="noopener noreferrer" href={`${main_web_site_url}/managements/users_trial`}>试用授权列表</a></Menu.Item>
<Menu.Item><a rel="noopener noreferrer" href={`${main_web_site_url}/managements/auto_users_trial`}>自动授权列表</a></Menu.Item>
<Menu.Item title="user" key={'register'}><Link to="/managements/expert/register">专家注册列表</Link></Menu.Item>
<Menu.Item title="user" key={'expertList'}><Link to="/managements/expert/list">专家库列表</Link></Menu.Item>
</Menu>
});
const forumMenu = useMemo(() => {
return <Menu >
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/managements/messages_list`}>帖子</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/managements/apply_destroy_memos`}>申请删帖</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/managements/memo_reply_list`}>回复</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/forum_sections`}>版块配置</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/banned_users`}>禁言列表</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/forum_applies`}>版主审批</a></Menu.Item>
<Menu.Item><a rel="noopener noreferrer" href={`${main_web_site_url}/managements/messages_list`}>帖子</a></Menu.Item>
<Menu.Item><a rel="noopener noreferrer" href={`${main_web_site_url}/managements/apply_destroy_memos`}>申请删帖</a></Menu.Item>
<Menu.Item><a rel="noopener noreferrer" href={`${main_web_site_url}/managements/memo_reply_list`}>回贴</a></Menu.Item>
<Menu.Item><a rel="noopener noreferrer" href={`${main_web_site_url}/admin/forum_sections`}>版块配置</a></Menu.Item>
</Menu>
});
const checkMenu = useMemo(() => {
return <Menu selectedKeys={current} onClick={handleClick}>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/managements/enterprise_authentication`}>企业认证</a></Menu.Item>
{/* <Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/reviews/projects_list`}>开源项目</a></Menu.Item> */}
<Menu.Item key={"taskManage1"}><Link to="/task/taskManage/1">统筹任务发布审批</Link></Menu.Item>
<Menu.Item key={"taskManage0"}><Link to="/task/taskManage/0">自主任务发布审批</Link></Menu.Item>
<Menu.Item key={"paperManage"}><Link to="/task/paperManage">成果/评论审批</Link></Menu.Item>
<Menu.Item key={"paperComplain"}><Link to="/task/paperComplain">成果上传申诉审批</Link></Menu.Item>
<Menu.Item key={"publicityComplain"}><Link to="/task/publicityComplain">公示期成果申诉审批</Link></Menu.Item>
<Menu.Item key={"agreementManage"}><Link to="/task/agreementManage">协议审批</Link></Menu.Item>
<Menu.Item ><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/tasks/report_result_tasks`}>成果举报申诉</a></Menu.Item>
<Menu.Item key={"proofManage"}><Link to="/task/proofManage">评选佐证材料</Link></Menu.Item>
<Menu.Item><a rel="noopener noreferrer" href={`${main_web_site_url}/managements/enterprise_authentication`}>企业认证</a></Menu.Item>
<Menu.Item title="approver" key={"taskManage1"}><Link to="/managements/task/taskManage/1">统筹任务发布审批</Link></Menu.Item>
<Menu.Item title="approver" key={"taskManage0"}><Link to="/managements/task/taskManage/0">自主任务发布审批</Link></Menu.Item>
<Menu.Item title="approver" key={"paperManage"}><Link to="/managements/task/paperManage">成果/评论审批</Link></Menu.Item>
<Menu.Item title="approver" key={"paperComplain"}><Link to="/managements/task/paperComplain">成果上传申诉审批</Link></Menu.Item>
<Menu.Item title="approver" key={"publicityComplain"}><Link to="/managements/task/publicityComplain">公示期成果申诉审批</Link></Menu.Item>
<Menu.Item title="approver" key={"agreementManage"}><Link to="/managements/task/agreementManage">协议审批</Link></Menu.Item>
<Menu.Item ><a rel="noopener noreferrer" href={`${main_web_site_url}/admin/tasks/report_result_tasks`}>成果举报申诉</a></Menu.Item>
<Menu.Item title="approver" key={"proofManage"}><Link to="/managements/task/proofManage">评选佐证材料</Link></Menu.Item>
</Menu>
});
const limitsMenu = useMemo(() => {
return <Menu>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/managements/user_admin_roles`}>权限组配置</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/managements/admin_role_permissions`}>权限操作配置</a></Menu.Item>
<Menu.Item><a rel="noopener noreferrer" href={`${main_web_site_url}/managements/user_admin_roles`}>权限组配置</a></Menu.Item>
<Menu.Item><a rel="noopener noreferrer" href={`${main_web_site_url}/managements/admin_role_permissions`}>权限操作配置</a></Menu.Item>
</Menu>
});
const configMenu = useMemo(() => {
return <Menu>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/about_infos/new"`}>关于我们</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/home_sections"`}>首页版块</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/partners`}>合作伙伴</a></Menu.Item>
<Menu.Item><a rel="noopener noreferrer" href={`${main_web_site_url}/admin/about_infos/new"`}>关于我们</a></Menu.Item>
<Menu.Item><a rel="noopener noreferrer" href={`${main_web_site_url}/admin/home_sections"`}>首页版块</a></Menu.Item>
<Menu.Item><a rel="noopener noreferrer" href={`${main_web_site_url}/admin/partners`}>合作伙伴</a></Menu.Item>
</Menu>
});
const noticeMenu = useMemo(() => {
return <Menu>
<Menu.Item><a rel="noopener noreferrer" href={`${noticeUrl}/admin/index#/`}>招标公告</a></Menu.Item>
</Menu>
});
return (
<div className="centerbox managements_menus clearfix">
@ -123,21 +125,17 @@ export default props => {
</Dropdown>
<Dropdown key={'taskMenu'} overlay={taskMenu} placement="bottomLeft">
<div className="drop-div">
<div className={`${title=='task'&&'active'} drop-div`}>
创客
</div>
</Dropdown>
<Dropdown key={'competitionMenu'} overlay={competitionMenu} placement="bottomLeft">
<div className="drop-div">竞赛</div>
<div className={`${title=='competition'&&'active'} drop-div`}>竞赛</div>
</Dropdown>
{/* <Dropdown key={'expert'} overlay={expertMenu} placement="bottomLeft">
<div className="drop-div">专家</div>
</Dropdown> */}
<Dropdown key={'userMenu'} overlay={userMenu} placement="bottomLeft">
<div className="drop-div">用户</div>
<div className={`${title=='user'&&'active'} drop-div`}>用户</div>
</Dropdown>
<Dropdown key={'forumMenu'} overlay={forumMenu} placement="bottomLeft">
@ -145,15 +143,19 @@ export default props => {
</Dropdown>
<Dropdown key={'checkMenu'} overlay={checkMenu} placement="bottomLeft">
<div className="drop-div">审批</div>
<div className={`${title=='approver'&&'active'} drop-div`}>审批</div>
</Dropdown>
<Dropdown key={'limitsMenu'} overlay={limitsMenu} placement="bottomLeft">
<div className="drop-div">权限管理</div>
</Dropdown>
<Dropdown key={'configMenu'} overlay={configMenu} placement="bottomLeft">
{/* <Dropdown key={'configMenu'} overlay={configMenu} placement="bottomLeft">
<div className="drop-div">网站配置</div>
</Dropdown> */}
<Dropdown key={'notice'} overlay={noticeMenu} placement="bottomLeft">
<div className="drop-div">招标公告</div>
</Dropdown>
</div>
)

View File

@ -11,6 +11,9 @@
box-sizing: border-box;
position: relative;
cursor: pointer;
&.active{
color: #4154f1;
}
&::after {
content: "";
position: absolute;

View File

@ -16,15 +16,6 @@ const Review = Loadable({
loading: Loading,
});
const AdminRouter = Loadable({
loader: () => import("./expert/adminRouter"),
loading: Loading,
});
// const ReviewTasks = Loadable({
// loader: () => import("./expert/reviewTasks"),
// loading: Loading,
// })
const ExpertUser = Loadable({
loader: () => import("./expert/expertUser"),
loading: Loading,
@ -55,13 +46,6 @@ const Expert = (propsTransmit) => {
)}
></Route>
{/* 管理员管理 */}
<Route
path="/expert/admin/:admin"
render={(props) => (
<AdminRouter {...propsF} {...props} />
)}
></Route>
<Route
path="/expert"
render={(props) => (

View File

@ -1,92 +0,0 @@
import React from "react";
import { Route, Switch } from "react-router-dom";
import Loadable from "react-loadable";
import Loading from "../../Loading";
import AdminRouter from "../components/adminRouter";
// 专家库
const ExpertList = Loadable({
loader: () => import("./expertList"),
loading: Loading,
});
// 专家审核
const RegisterList = Loadable({
loader: () => import("./registerList"),
loading: Loading,
});
//创客任务评审规则
const ReviewRules = Loadable({
loader : () => import("./reviewRules"),
loading: Loading,
});
//创客任务选择评审专家
const SelectExpert = Loadable({
loader: () => import("./selectExpert"),
loading: Loading,
});
//创客任务评审结果查看
const ReviewResult = Loadable({
loader: () => import("./reviewResult"),
loading: Loading,
});
//竞赛评审任务列表
const CompetitionList = Loadable({
loader: () => import("./competionList"),
loading: Loading,
})
const AdminPage = (propsF) => {
return (
<React.Fragment>
<AdminRouter {...propsF} />
<Switch {...propsF}>
{/* 专家审核 */}
<Route
path="/expert/admin/register"
render={(props) => (
<RegisterList {...propsF} {...props} />
)}
></Route>
{/* 专家库列表 */}
<Route
path="/expert/admin/list"
render={(props) => (
<ExpertList {...propsF} {...props} />
)}
></Route>
{/* 创客任务评审规则 */}
<Route
path="/expert/admin/task/review/rules/:containerType/:containerId"
render={(props) => (
<ReviewRules {...propsF} {...props} />
)}
></Route>
{/* 创客任务选择评审专家 */}
<Route
path="/expert/admin/task/review/select/:containerType/:containerId"
render={(props) => (
<SelectExpert {...propsF} {...props} />
)}
></Route>
{/* 创客任务评审结果查看 */}
<Route
path="/expert/admin/task/review/results/:containerType/:containerId"
render={(props) => (
<ReviewResult {...propsF} {...props} />
)}
></Route>
{/* 竞赛评审任务列表 */}
<Route
path="/expert/admin/competition"
render={(props) => (
<CompetitionList {...propsF} {...props} />
)}
></Route>
</Switch>
</React.Fragment>
);
}
// }
export default AdminPage;

View File

@ -95,16 +95,13 @@ function Competition(props){
}
},
{
title: "开始时间",
title: "比赛时间",
dataIndex: "start_time",
key: "startTime",
align: "center",
},
{
title: "截止时间",
dataIndex: "end_time",
key: "endTime",
key: "time",
align: "center",
render:(text, record)=>{
return text +' ~ '+ record.end_time;
}
},
{
title: "报名人数",
@ -117,7 +114,7 @@ function Competition(props){
dataIndex: 'current_status',
key: "rules",
render: (text, record) => {
return record.assignRuleAndExperts ? <Button size='small' type="primary" onClick={()=>{viewRules(record)}}>查看</Button> : record.is_expert_audit && text<4 ? <Link className="primary-link" to={`/expert/admin/task/review/rules/${2}/${record.id}/?identifier=${record.identifier}&status=${record.current_status}&name=${record.title}&reviewStartTime=${record.end_time}&reviewEndTime=${record.review_time}`}>编辑</Link> : <span className='gary_span'>编辑</span>
return record.assignRuleAndExperts ? <Button size='small' type="primary" onClick={()=>{viewRules(record)}}>查看</Button> : record.is_expert_audit && text<4 ? <Link className="primary-link" to={`/managements/expert/task/review/rules/${2}/${record.id}/?identifier=${record.identifier}&status=${record.current_status}&name=${record.title}&reviewStartTime=${record.end_time}&reviewEndTime=${record.review_time}`}>编辑</Link> : <span className='gary_span'>编辑</span>
}
},
{
@ -125,7 +122,7 @@ function Competition(props){
dataIndex: 'current_status',
key: "experts",
render: (text, record) => {
return record.assignRuleAndExperts ? <Button size='small' type="primary" onClick={()=>{viewExperts(record)}}>查看</Button> : record.is_expert_audit && text<4 ? <Link className="primary-link" to={`/expert/admin/task/review/select/${2}/${record.id}/?identifier=${record.identifier}&name=${record.title}`}>选择</Link> : <span className='gary_span'>选择</span>
return record.assignRuleAndExperts ? <Button size='small' type="primary" onClick={()=>{viewExperts(record)}}>查看</Button> : record.is_expert_audit && text<4 ? <Link className="primary-link" to={`/managements/expert/task/review/select/${2}/${record.id}/?identifier=${record.identifier}&name=${record.title}`}>选择</Link> : <span className='gary_span'>选择</span>
}
},
{
@ -141,7 +138,7 @@ function Competition(props){
dataIndex: 'assignRuleAndExperts',
key: "results",
render: (text, record) => {
return text ? <Link className="primary-link" to={`/expert/admin/task/review/results/${2}/${record.id}/#status=${record.current_status}&identifier=${record.identifier}&name=${record.title}`}>查看</Link>:<span className='gary_span'>查看</span>
return text ? <Link className="primary-link" to={`/managements/expert/task/review/results/${2}/${record.id}/#status=${record.current_status}&identifier=${record.identifier}&name=${record.title}`}>查看</Link>:<span className='gary_span'>查看</span>
}
}
];
@ -263,7 +260,7 @@ function Competition(props){
// ,
function updateUrl(page){
setCurPage(page);
window.location.href=`/expert/admin/competition/#page=${page}`;
window.location.href=`/managements/expert/competition/#page=${page}`;
}
function hashDate(hash) {

View File

@ -373,7 +373,7 @@ function RegisterList({ showNotification }) {
<Table
id="exportList"
style={{ display: "none" }}
columns={columns}
columns={columns.slice(0,columns.length-2)}
dataSource={dataAll}
pagination={false}
rowKey={(row) => row.id}
@ -393,7 +393,7 @@ function RegisterList({ showNotification }) {
>
<button className="but41_fill">导入</button>
</Upload>
<p className="link" onClick={() => { window.open(httpUrl + '/busiAttachments/download/134') }}>专家注册表模板.xlsx</p>
<p className="link" onClick={() => { window.open(`${httpUrl}/busiAttachments/download/${window.location.host.indexOf('osredm') === -1 ? '171' : '137'}`) }}>专家注册表模板.xlsx</p>
<p className='hint'>提示只能在导入模版上增减数据才能导入成功</p>
</Modal>
</div>)

227
src/military/managements.js Normal file
View File

@ -0,0 +1,227 @@
import React, { useEffect, useState } from "react";
import { Route, Switch } from "react-router-dom";
import { withRouter } from "react-router";
import { SnackbarHOC } from "educoder";
import { CNotificationHOC } from "../modules/courses/common/CNotificationHOC";
import { TPMIndexHOC } from "../modules/tpm/TPMIndexHOC";
import Loadable from "react-loadable";
import Loading from "../Loading";
import AdminRouter from "./components/adminRouter";
import { ImageLayerOfCommentHOC } from "../modules/page/layers/ImageLayerOfCommentHOC";
import './index.scss';
{/* 任务管理审核 */}
const TaskManage = Loadable({
loader: () => import("./task/taskManage"),
loading: Loading,
});
{/* 成果管理审核 */}
const PaperManage = Loadable({
loader: () => import("./task/paperManage"),
loading: Loading,
});
{/* 成果申诉管理审核 */}
const PaperComplain = Loadable({
loader: () => import("./task/paperComplain"),
loading: Loading,
});
const ProofManage = Loadable({
loader: () => import("./task/proofManage"),
loading: Loading,
});
const PublicityComplain = Loadable({
loader: () => import("./task/publicityComplain"),
loading: Loading,
});
const AgreementManage = Loadable({
loader: () => import("./task/agreementManage"),
loading: Loading,
});
const PayProof = Loadable({
loader: () => import("./task/payProof"),
loading: Loading,
});
const TaskAdmin = Loadable({
loader: () => import("./task/taskAdmin"),
loading: Loading,
});
const DelayManage = Loadable({
loader: () => import("./task/delayManage"),
loading: Loading,
});
// 专家库
const ExpertList = Loadable({
loader: () => import("./expert/expertList"),
loading: Loading,
});
// 专家审核
const RegisterList = Loadable({
loader: () => import("./expert/registerList"),
loading: Loading,
});
//创客任务评审规则
const ReviewRules = Loadable({
loader : () => import("./expert/reviewRules"),
loading: Loading,
});
//创客任务选择评审专家
const SelectExpert = Loadable({
loader: () => import("./expert/selectExpert"),
loading: Loading,
});
//创客任务评审结果查看
const ReviewResult = Loadable({
loader: () => import("./expert/reviewResult"),
loading: Loading,
});
//竞赛评审任务列表
const CompetitionList = Loadable({
loader: () => import("./expert/competionList"),
loading: Loading,
})
const Managements = (propsF) => {
return (
<div className="newMain clearfix">
<AdminRouter {...propsF} />
<Switch {...propsF}>
{/* 任务管理审核 */}
<Route
path="/managements/task/taskManage/:publishMode"
render={(props) => (
<TaskManage {...propsF} {...props} />
)}
></Route>
{/* 成果管理审核 */}
<Route
path="/managements/task/paperManage"
render={(props) => (
<PaperManage {...propsF} {...props} />
)}
></Route>
{/* 成果申诉管理审核 */}
<Route
path="/managements/task/paperComplain"
render={(props) => (
<PaperComplain {...propsF} {...props} />
)}
></Route>
{/* 公示期成果申诉管理审核 */}
<Route
path="/managements/task/publicityComplain"
render={(props) => (
<PublicityComplain {...propsF} {...props} />
)}
></Route>
{/* 佐证管理审核 */}
<Route
path="/managements/task/proofManage"
render={(props) => (
<ProofManage {...propsF} {...props} />
)}
></Route>
{/* 管理员协议审核 */}
<Route
path="/managements/task/agreementManage"
render={(props) => (
<AgreementManage {...propsF} {...props} />
)}
></Route>
{/* 管理员上传支付凭证 */}
<Route
path="/managements/task/payProof"
render={(props) => (
<PayProof {...propsF} {...props} />
)}
></Route>
{/* 管理员任务列表 */}
<Route
path="/managements/task/taskAdmin"
render={(props) => (
<TaskAdmin {...propsF} {...props} />
)}
></Route>
{/* 延期管理 */}
<Route
path="/managements/task/delayManage"
render={(props) => (
<DelayManage {...propsF} {...props} />
)}
></Route>
{/* 专家审核 */}
<Route
path="/managements/expert/register"
render={(props) => (
<RegisterList {...propsF} {...props} />
)}
></Route>
{/* 专家库列表 */}
<Route
path="/managements/expert/list"
render={(props) => (
<ExpertList {...propsF} {...props} />
)}
></Route>
{/* 创客任务评审规则 */}
<Route
path="/managements/expert/task/review/rules/:containerType/:containerId"
render={(props) => (
<ReviewRules {...propsF} {...props} />
)}
></Route>
{/* 创客任务选择评审专家 */}
<Route
path="/managements/expert/task/review/select/:containerType/:containerId"
render={(props) => (
<SelectExpert {...propsF} {...props} />
)}
></Route>
{/* 创客任务评审结果查看 */}
<Route
path="/managements/expert/task/review/results/:containerType/:containerId"
render={(props) => (
<ReviewResult {...propsF} {...props} />
)}
></Route>
{/* 竞赛评审任务列表 */}
<Route
path="/managements/expert/competition"
render={(props) => (
<CompetitionList {...propsF} {...props} />
)}
></Route>
</Switch>
</div>
);
}
export default withRouter(
ImageLayerOfCommentHOC({
imgSelector: ".imageLayerParent img, .imageLayerParent .imageTarget",
parentSelector: ".newMain",
})(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC(Managements))))
);

View File

@ -32,13 +32,6 @@ const MyTask = Loadable({
});
const TaskAdminRouter = Loadable({
loader: () => import("./task/taskAdminRouter"),
loading: Loading,
});
const Index = (propsTransmit) => {
// 开发时,从代理的位置获取用户信息
const [currentUser, setCurrentUser] = useState(propsTransmit.current_user);
@ -90,12 +83,12 @@ const Index = (propsTransmit) => {
></Route>
{/* 管理员管理 */}
<Route
{/* <Route
path="/task/:admin"
render={(props) => (
<TaskAdminRouter {...propsF} {...props} />
)}
></Route>
></Route> */}
{/* 任务列表 */}
<Route

View File

@ -1,138 +0,0 @@
import React, { useMemo } from 'react';
import { Menu, Dropdown, } from 'antd';
import { current_main_site_url, main_web_site_url } from '../../static';
import './index.scss';
const { SubMenu } = Menu;
export default props => {
const projectMenu = useMemo(() => {
return <Menu>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${current_main_site_url}/admins`}>项目管理后台</a></Menu.Item>
</Menu>
});
const taskMenu = useMemo(() => {
return <Menu>
<SubMenu title="基础数据" >
<Menu.Item><a href={`${main_web_site_url}/admin/categories/list`}>任务领域</a></Menu.Item>
<Menu.Item><a href={`${main_web_site_url}/admin/industries/list`}>行业信息</a></Menu.Item>
<Menu.Item><a href={`${main_web_site_url}/admin/placements/list`}>职位信息</a></Menu.Item>
<Menu.Item><a href={`${main_web_site_url}/admin/task_templates/list`}>需求导入模板</a></Menu.Item>
<Menu.Item><a href={`${main_web_site_url}/admin/agreement_setting`}>签订协议内容</a></Menu.Item>
<Menu.Item><a href={`${main_web_site_url}/admin/sign_agreement_setting`}>应征投稿协议内容</a></Menu.Item>
</SubMenu>
<SubMenu title="代办事项" >
<Menu.Item><a href={`/task/delayManage`}>延期任务处理</a></Menu.Item>
{/* <Menu.Item><a href={`${main_web_site_url}/admin/audit_files`}>协议签订凭证上传</a></Menu.Item> */}
<Menu.Item><a href="/task/payProof">支付报酬凭证上传</a></Menu.Item>
</SubMenu>
<Menu.Item><a href="/task/taskAdmin">任务列表</a></Menu.Item>
<Menu.Item><a href="/task/paperManage">创意征集评论</a></Menu.Item>
</Menu>
});
const competitionMenu = useMemo(() => {
return <Menu>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/competitions/list`}>竞赛列表</a></Menu.Item>
</Menu>
});
const userMenu = useMemo(() => {
return <Menu>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/managements/users`}>用户列表</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/entities`}>主体信息列表</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/managements/users_trial`}>试用授权列表</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/managements/auto_users_trial`}>自动授权列表</a></Menu.Item>
</Menu>
});
const forumMenu = useMemo(() => {
return <Menu>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/managements/messages_list`}>帖子</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/managements/apply_destroy_memos`}>申请删帖</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/managements/memo_reply_list`}>回复</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/forum_sections`}>版块配置</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/banned_users`}>禁言列表</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/forum_applies`}>版主审批</a></Menu.Item>
</Menu>
});
const checkMenu = useMemo(() => {
return <Menu>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/managements/enterprise_authentication`}>企业认证</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/reviews/projects_list`}>开源项目</a></Menu.Item>
<Menu.Item><a href="/task/taskManage/1">统筹任务发布审批</a></Menu.Item>
<Menu.Item><a href="/task/taskManage/0">自主任务发布审批</a></Menu.Item>
<Menu.Item><a href="/task/paperComplain">成果上传申诉审批</a></Menu.Item>
<Menu.Item><a href="/task/publicityComplain">公示期成果申诉审批</a></Menu.Item>
<Menu.Item><a href="/task/agreementManage">协议审批</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/tasks/report_result_tasks`}>成果举报申诉</a></Menu.Item>
<Menu.Item><a href="/task/proofManage">评选佐证材料</a></Menu.Item>
</Menu>
});
const limitsMenu = useMemo(() => {
return <Menu>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/managements/user_admin_roles`}>权限组配置</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/managements/admin_role_permissions`}>权限操作配置</a></Menu.Item>
</Menu>
});
const configMenu = useMemo(() => {
return <Menu>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/about_infos/new"`}>关于我们</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/home_sections"`}>首页版块</a></Menu.Item>
<Menu.Item><a target="_blank" rel="noopener noreferrer" href={`${main_web_site_url}/admin/partners`}>合作伙伴</a></Menu.Item>
</Menu>
});
return (
<div className="centerbox managements_menus clearfix">
<Dropdown key={'projectMenu'} overlay={projectMenu} placement="bottomLeft">
<div className="drop-div">
项目
</div>
</Dropdown>
<Dropdown key={'taskMenu'} overlay={taskMenu} placement="bottomLeft">
<div className="drop-div">
创客
</div>
</Dropdown>
<Dropdown key={'competitionMenu'} overlay={competitionMenu} placement="bottomLeft">
<div className="drop-div">竞赛</div>
</Dropdown>
<Dropdown key={'userMenu'} overlay={userMenu} placement="bottomLeft">
<div className="drop-div">用户</div>
</Dropdown>
<Dropdown key={'forumMenu'} overlay={forumMenu} placement="bottomLeft">
<div className="drop-div">论坛交流</div>
</Dropdown>
<Dropdown key={'checkMenu'} overlay={checkMenu} placement="bottomLeft">
<div className="drop-div">审批</div>
</Dropdown>
<Dropdown key={'limitsMenu'} overlay={limitsMenu} placement="bottomLeft">
<div className="drop-div">权限管理</div>
</Dropdown>
<Dropdown key={'configMenu'} overlay={configMenu} placement="bottomLeft">
<div className="drop-div">网站配置</div>
</Dropdown>
<div className="drop-div" ><a target="_blank" href="http://121.36.15.240:20772/">数据分析管理</a></div>
</div>
)
}

View File

@ -1,24 +0,0 @@
.managements_menus {
background: #fff;
border: 1px solid #eee;
.drop-div {
position: relative;
float: left;
width: 108px;
text-align: center;
padding: 15px 0px;
box-sizing: border-box;
position: relative;
cursor: pointer;
&::after {
content: "";
position: absolute;
right: 1px;
top: 20px;
width: 1px;
height: 20px;
background-color: #ddd;
}
}
}

View File

@ -3,7 +3,7 @@ import { Pagination, Modal, Input, Form, } from 'antd';
import { Link } from "react-router-dom";
import Nodata from 'forge/Nodata';
import Loading from "src/Loading";
import { timeAgo, getImageUrl } from 'educoder';
import { timeAgo, getImageUrl,goUser,goUserMes } from 'educoder';
import { adminCheckAgreement } from '../../api';
import { httpUrl } from '../../fetch';
import './index.scss';
@ -67,14 +67,6 @@ export default Form.create()((props) => {
});
}
function goUser(login) {
window.location.href = `/users/${login}`;
}
function goUserMes(login) {
window.location.href = `/users/${login}/message_detail`;
}
function downFile(item) {
let url = httpUrl + '/busiAttachments/download/' + item.id;
window.open(url);
@ -108,7 +100,7 @@ export default Form.create()((props) => {
{
item.status === 2 && <React.Fragment>
<a className="edu-default-btn edu-orangeline-btn ml20 fl" onClick={() => { goUserMes(item.user.login) }}>私信</a>
<a className="edu-default-btn edu-orangeline-btn ml20 fl" onClick={() => { goUserMes(item.user.id) }}>私信</a>
<a className="edu-default-btn edu-blueline-btn ml20 fl" onClick={() => { agreeClick(item) }}>同意</a>
<a className="edu-default-btn edu-greyline-btn ml20 fl" onClick={() => { refuseClick(item) }}>驳回</a>
</React.Fragment>

View File

@ -4,7 +4,7 @@ import { Link } from "react-router-dom";
import moment from 'moment';
import Nodata from 'forge/Nodata';
import Loading from "src/Loading";
import { getImageUrl, formatDuring } from 'educoder';
import { getImageUrl, formatDuring,goUser,goUserMes } from 'educoder';
import { taskStatusAllArr } from '../../static';
import { delayTask, closeTask } from '../../api';
import './index.scss';
@ -70,14 +70,6 @@ export default Form.create()((props) => {
});
}
function goUser(login) {
window.location.href = `/users/${login}`;
}
function goUserMes(login) {
window.location.href = `/users/${login}/message_detail`;
}
const helper = useCallback(
(label, name, rules, widget, initialValue) => (
<Form.Item label={label}>
@ -160,7 +152,7 @@ export default Form.create()((props) => {
{
item.cancelStatus === 0 && <React.Fragment>
<a className="edu-default-btn edu-orangeline-btn ml20 fl" onClick={() => { goUserMes(item.user.login) }}>私信</a>
<a className="edu-default-btn edu-orangeline-btn ml20 fl" onClick={() => { goUserMes(item.user.id) }}>私信</a>
<a className="edu-default-btn edu-blueline-btn ml20 fl" onClick={() => { delayClick(item) }}>延期</a>
<a className="edu-default-btn edu-greyline-btn ml20 fl" onClick={() => { closeClick(item) }}>关闭</a>
</React.Fragment>

View File

@ -4,7 +4,7 @@ import { Link } from "react-router-dom";
import Nodata from 'forge/Nodata';
import Loading from "src/Loading";
import Upload from 'military/components/Upload';
import { timeAgo, getImageUrl } from 'educoder';
import { timeAgo, getImageUrl,goUser,goUserMes } from 'educoder';
import { uploadPayProof } from '../../api';
import './index.scss';
@ -16,16 +16,6 @@ export default Form.create()((props) => {
const [fileList, setFileList] = useState(null);
const pageSize = props.pageSize || 10;
function goUser(login) {
window.location.href = `/users/${login}`;
}
function goUserMes(login) {
window.location.href = `/users/${login}/message_detail`;
}
//
function uploadFunc(fileList, files) {
setFileList(fileList);
@ -72,7 +62,7 @@ export default Form.create()((props) => {
<span className="fl color-grey-9 mt3 mr15">{timeAgo(item.createdAt)}</span>
<span className="infos_item color-grey-9 fl">发布方式:</span>
<span className="infos_item mr15 fl">{item.task && item.task.publishMode === 1 ? '统筹任务' : '自主提交'}</span>
<span className="fr"><a className="edu-default-btn edu-orangeline-btn ml20 fl" onClick={() => { item.user && goUserMes(item.user.login) }}>私信</a></span>
<span className="fr"><a className="edu-default-btn edu-orangeline-btn ml20 fl" onClick={() => { item.user && goUserMes(item.user.id) }}>私信</a></span>
</li>
<div className="clearfix">
<div className="width100 lineh-35" >

View File

@ -3,7 +3,7 @@ import { Pagination, Modal, Input } from 'antd';
import { Link } from "react-router-dom";
import Nodata from 'forge/Nodata';
import Loading from "src/Loading";
import { timeAgo, getImageUrl } from 'educoder';
import { timeAgo, getImageUrl,goUser,goUserMes } from 'educoder';
import { checkProof } from '../../api';
import { httpUrl } from '../../fetch';
import './index.scss';
@ -60,13 +60,6 @@ export default (props) => {
});
}
function goUser(login) {
window.location.href = `/users/${login}`;
}
function goUserMes(login) {
window.location.href = `/users/${login}/message_detail`;
}
function downFile(item) {
let url = httpUrl + '/busiAttachments/download/' + item.id;
@ -98,7 +91,7 @@ export default (props) => {
{
item.taskResultProof.status === 2 && <React.Fragment>
<a className="edu-default-btn edu-orangeline-btn ml20 fl" onClick={() => { goUserMes(item.user.login) }}>私信</a>
<a className="edu-default-btn edu-orangeline-btn ml20 fl" onClick={() => { goUserMes(item.user.id) }}>私信</a>
<a className="edu-default-btn edu-blueline-btn ml20 fl" onClick={() => { agreeClick(item) }}>同意</a>
<a className="edu-default-btn edu-greyline-btn ml20 fl" onClick={() => { refuseClick(item) }}>拒绝</a>
</React.Fragment>

View File

@ -3,7 +3,7 @@ import { Pagination, Modal, Input, Radio, Form, InputNumber } from 'antd';
import { Link } from "react-router-dom";
import Nodata from 'forge/Nodata';
import Loading from "src/Loading";
import { timeAgo, getImageUrl } from 'educoder';
import { timeAgo, getImageUrl,goUser,goUserMes } from 'educoder';
import { checkPublicity } from '../../api';
import { httpUrl } from '../../fetch';
import './index.scss';
@ -49,14 +49,6 @@ export default Form.create()((props) => {
}
function goUser(login) {
window.location.href = `/users/${login}`;
}
function goUserMes(login) {
window.location.href = `/users/${login}/message_detail`;
}
function downFile(item) {
let url = httpUrl + '/busiAttachments/download/' + item.id;
window.open(url);
@ -86,7 +78,7 @@ export default Form.create()((props) => {
<a className="user-box fl mr15 color-grey-3 font-16" onClick={() => { goUser(item.user.login) }}>{item.user && (item.user.nickname || item.user.login)}</a>
<span className="fl color-grey-9 mt3 mr15">{timeAgo(item.createdAt)}</span>
<span className="fr">
<a className="edu-default-btn edu-orangeline-btn ml20 fl" onClick={() => { goUserMes(item.user.login) }}>私信</a>
<a className="edu-default-btn edu-orangeline-btn ml20 fl" onClick={() => { goUserMes(item.user.id) }}>私信</a>
{item.status === 2 && <a className="edu-default-btn edu-blueline-btn ml20 fl" onClick={() => { deal(item) }}>处理</a>}
</span>
</li>

View File

@ -3,7 +3,7 @@ import { Pagination, Modal, Input, Radio, Button } from 'antd';
import { Link } from "react-router-dom";
import Nodata from 'forge/Nodata';
import Loading from "src/Loading";
import { timeAgo, getImageUrl } from 'educoder';
import { timeAgo, getImageUrl,goUser,goUserMes } from 'educoder';
import { main_web_site_url } from '../../static';
import { checkTask } from '../../api';
import './index.scss';
@ -61,14 +61,6 @@ export default (props) => {
});
}
function goUser(login) {
window.location.href = `/users/${login}`;
}
function goUserMes(login) {
window.location.href = `/users/${login}/message_detail`;
}
function scale(scale) {
if (scale > 10000) {
return '10000人以上';
@ -103,7 +95,7 @@ export default (props) => {
{
item.status === 1 && <React.Fragment>
<a className="edu-default-btn edu-orangeline-btn ml20 fl" onClick={() => { goUserMes(item.user.login) }}>私信</a>
<a className="edu-default-btn edu-orangeline-btn ml20 fl" onClick={() => { goUserMes(item.user.id) }}>私信</a>
<a className="edu-default-btn edu-blueline-btn ml20 fl" onClick={() => { agreeClick(item.id) }}>同意</a>
<a className="edu-default-btn edu-greyline-btn ml20 fl" onClick={() => { refuseClick(item.id) }}>拒绝</a>
</React.Fragment>

View File

@ -129,3 +129,13 @@ span.list-gray {
.failByPression .ant-modal-body .anticon, .center-right-but .ant-input-search-icon:hover, .center-content .ant-pagination-item-active a{
color: #4154f1;
}
.go_profiles .ant-modal-body{
text-align: center;
.anticon{
color: #4154f1;
margin-left: 30px;
}
.ant-modal-confirm-btns{
float: none;
}
}

File diff suppressed because one or more lines are too long

View File

@ -232,14 +232,14 @@ export default Form.create()(({ form, showNotification, match, history, state })
title: '评审规则',
dataIndex: 'ruleEditedCount',
render: (text, record) => {
return record.assignRuleAndExperts ? <Button size='small' type="primary" onClick={()=>{viewRules(record)}}>查看</Button> : record.expertReview && (record.status === 1 || record.status === 3) ? <Link className="line_1 primary-link" to={`/expert/admin/task/review/rules/${1}/${record.id}/?status=${record.status}&name=${record.name}&createdAt=${record.createdAt}&collectingEndTime=${record.collectingEndTime}&choosingDays=${record.choosingDays}`}>编辑</Link> : <span className='gary_span'>编辑</span>
return record.assignRuleAndExperts ? <Button size='small' type="primary" onClick={()=>{viewRules(record)}}>查看</Button> : record.expertReview && (record.status === 1 || record.status === 3) ? <Link className="line_1 primary-link" to={`/managements/expert/task/review/rules/${1}/${record.id}/?status=${record.status}&name=${record.name}&createdAt=${record.createdAt}&collectingEndTime=${record.collectingEndTime}&choosingDays=${record.choosingDays}`}>编辑</Link> : <span className='gary_span'>编辑</span>
}
},
{
title: '专家选取',
dataIndex: 'expertSelectedCount',
render: (text, record) => {
return record.assignRuleAndExperts ? <Button size='small' type="primary" onClick={()=>{viewExperts(record)}}>查看</Button> : record.expertReview && (record.status === 1 || record.status === 3) ? <Link className="line_1 primary-link" to={`/expert/admin/task/review/select/${1}/${record.id}/?name=${record.name}`}>选择</Link> : <span className='gary_span'>选择</span>
return record.assignRuleAndExperts ? <Button size='small' type="primary" onClick={()=>{viewExperts(record)}}>查看</Button> : record.expertReview && (record.status === 1 || record.status === 3) ? <Link className="line_1 primary-link" to={`/managements/expert/task/review/select/${1}/${record.id}/?name=${record.name}`}>选择</Link> : <span className='gary_span'>选择</span>
}
},
{
@ -253,7 +253,7 @@ export default Form.create()(({ form, showNotification, match, history, state })
title: '评审结果',
dataIndex: 'expertReview2',
render: (text, record) => {
return record.assignRuleAndExperts ? <Link className="line_1 primary-link" to={`/expert/admin/task/review/results/${1}/${record.id}/#status=${record.status}&name=${record.name}&taskModeId=${record.taskModeId}`}>查看</Link>:<span className='gary_span'>查看</span>
return record.assignRuleAndExperts ? <Link className="line_1 primary-link" to={`/managements/expert/task/review/results/${1}/${record.id}/#status=${record.status}&name=${record.name}&taskModeId=${record.taskModeId}`}>查看</Link>:<span className='gary_span'>查看</span>
}
},
{
@ -514,7 +514,7 @@ export default Form.create()(({ form, showNotification, match, history, state })
function setCurPage1(page){
setCurPage(page);
window.location.href=`/task/taskAdmin#page=${page}`;
window.location.href=`/managements/task/taskAdmin#page=${page}`;
}
//

View File

@ -1,136 +0,0 @@
import React from "react";
import { Route, Switch } from "react-router-dom";
import Loadable from "react-loadable";
import Loading from "../../Loading";
import AdminRouter from "../components/adminRouter";
const TaskManage = Loadable({
loader: () => import("./taskManage"),
loading: Loading,
});
const PaperManage = Loadable({
loader: () => import("./paperManage"),
loading: Loading,
});
const PaperComplain = Loadable({
loader: () => import("./paperComplain"),
loading: Loading,
});
const ProofManage = Loadable({
loader: () => import("./proofManage"),
loading: Loading,
});
const PublicityComplain = Loadable({
loader: () => import("./publicityComplain"),
loading: Loading,
});
const AgreementManage = Loadable({
loader: () => import("./agreementManage"),
loading: Loading,
});
const PayProof = Loadable({
loader: () => import("./payProof"),
loading: Loading,
});
const TaskAdmin = Loadable({
loader: () => import("./taskAdmin"),
loading: Loading,
});
const DelayManage = Loadable({
loader: () => import("./delayManage"),
loading: Loading,
});
const AdminPage = (propsF) => {
return (
<React.Fragment>
<AdminRouter {...propsF} />
<Switch {...propsF}>
{/* 任务管理审核 */}
<Route
path="/task/taskManage/:publishMode"
render={(props) => (
<TaskManage {...propsF} {...props} />
)}
></Route>
{/* 成果管理审核 */}
<Route
path="/task/paperManage"
render={(props) => (
<PaperManage {...propsF} {...props} />
)}
></Route>
{/* 成果申诉管理审核 */}
<Route
path="/task/paperComplain"
render={(props) => (
<PaperComplain {...propsF} {...props} />
)}
></Route>
{/* 公示期成果申诉管理审核 */}
<Route
path="/task/publicityComplain"
render={(props) => (
<PublicityComplain {...propsF} {...props} />
)}
></Route>
{/* 佐证管理审核 */}
<Route
path="/task/proofManage"
render={(props) => (
<ProofManage {...propsF} {...props} />
)}
></Route>
{/* 管理员协议审核 */}
<Route
path="/task/agreementManage"
render={(props) => (
<AgreementManage {...propsF} {...props} />
)}
></Route>
{/* 管理员上传支付凭证 */}
<Route
path="/task/payProof"
render={(props) => (
<PayProof {...propsF} {...props} />
)}
></Route>
{/* 管理员任务列表 */}
<Route
path="/task/taskAdmin"
render={(props) => (
<TaskAdmin {...propsF} {...props} />
)}
></Route>
{/* 延期管理 */}
<Route
path="/task/delayManage"
render={(props) => (
<DelayManage {...propsF} {...props} />
)}
></Route>
</Switch>
</React.Fragment>
);
}
// }
export default AdminPage;

View File

@ -11,7 +11,7 @@ import '../index.scss';
const Search = Input.Search;
export default ({ history, current_user, showLoginDialog, location }) => {
export default ({ history, current_user, showLoginDialog, location, mygetHelmetapi }) => {
// console.log(current_user);
let initType = getUrlToken('type', location.search) || '';
@ -147,7 +147,7 @@ export default ({ history, current_user, showLoginDialog, location }) => {
if (res) {
if (res.message === 'success') {
history.push("/task/taskAdd");
} else if (res.message === '主体信息未认证') {
} else if (res.message === '进行实体认证') {
Modal.info({
title: '因为以下原因,您暂时不能进行本操作',
content: <div className="mt10">
@ -157,9 +157,10 @@ export default ({ history, current_user, showLoginDialog, location }) => {
</div>
</div>,
onOk: () => {
window.location.href = `/users/${current_user.login}/profiles`;
window.location.href = mygetHelmetapi && mygetHelmetapi.main_web_site_url + `/users/${current_user.login}/profiles`;
},
okText: '立即完善',
className: 'go_profiles'
});
} else {
Modal.info({

View File

@ -1,4 +1,5 @@
import React, { Component } from 'react';
import { Base64 } from 'js-base64';
import Dialog from 'material-ui/Dialog';
import { notification } from 'antd';
@ -367,7 +368,7 @@ class LoginDialog extends Component {
let url = '/accounts/login.json'
axios.post(url, {
login: newloginValue,
password: newpassValue,
password: Base64.encode(newpassValue),
autologin: isGoingValue
}
).then((response) => {

View File

@ -2,7 +2,7 @@ import React from "react";
import Login from "./Login";
import Register from "./Register";
import ResetPassword from "./ResetPassword";
import logo from './img/logo.png';
import logo from './img/logo.svg';
import banner from './img/banner.png';
import ball from './img/ball.png';
import img1 from './img/img1.png';

View File

@ -0,0 +1,15 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="88" viewBox="0 0 400 88">
<defs>
<linearGradient id="linear-gradient" y1="0.501" x2="1" y2="0.501" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#6dffff"/>
<stop offset="1" stop-color="#0080ff"/>
</linearGradient>
</defs>
<g id="logo" transform="translate(-181 -101)">
<rect id="矩形_1" data-name="矩形 1" width="400" height="88" transform="translate(181 101)" fill="#fff" opacity="0"/>
<g id="顶部logo" transform="translate(181.055 106.72)">
<path id="形状" d="M64.185,77.408H51.334V0h8.379V69.74h4.473v7.668Zm10.223-8.6,0,0-6.029-3.653V10.536l6.033-3.655V68.809Zm-38.624-.144V17.273l-3.337-1.217V6.881l12.71,7.382v6.953L41.891,20V65.511l-6.1,3.152ZM22.152,60.493V17.059L28.9,20.427v36.7l-6.742,3.365Zm69.793,0h0l-3.051-.5L85.2,53.9v3.941l-2.343-1.217V20.856l2.84-1.433,3.265,4.445-.072-5.734,3.054-1.147V60.493ZM.072,57.841H0V23.295l14.626,4.874v5.806L5.68,32.326V47.52L10.508,45.3V40.5H7.74V35.551l6.957.715V50.388L.073,57.84Zm120.7-.142h-.005l-9.226-.432-5.678-7.382v4.946l-5.894-1.219V27.881l5.894-1.433v4.8l5.325-7.169,8.021-.859L108.417,40.354l12.351,17.341Z" transform="translate(0 0)" fill="url(#linear-gradient)"/>
<path id="形状-2" data-name="形状" d="M192.836,66.37l0,0-1.63-1.215a16.1,16.1,0,0,0,1.136-2.222A15.2,15.2,0,0,0,193,61.32c.04-.111.08-.22.12-.326a12.573,12.573,0,0,0,.567-1.934l1.918.5a4.741,4.741,0,0,0-.142.646c-.066.2-.132.414-.205.652-.085.276-.179.58-.292.925a22.742,22.742,0,0,1-.852,2.15,27.108,27.108,0,0,1-1.278,2.434ZM64.824,66.3h0l-.991-.356-.924-.358c.142-.571.253-1.115.351-1.595.051-.248.1-.482.146-.7.085-.423.144-.847.207-1.3.044-.318.09-.645.148-1l.01-.12c.068-.806.132-1.567.132-2.388V50.6h6.888l1.491-2.222H66.1c-.237.359-.453.677-.645.957-.154.226-.294.43-.419.62-.1.124-.188.23-.263.32-.146.174-.234.279-.234.326l-1.491-1.5c.418-.565.851-1.148,1.136-1.577.172-.3.369-.607.578-.927.137-.211.277-.425.416-.65a14.379,14.379,0,0,0,.713-1.361c.071-.149.14-.293.209-.432l1.777,1a3.542,3.542,0,0,1-.31.7c-.042.079-.082.157-.118.229h7.668v1.718L73.272,50.53h1.136V50.1H76.4V63.646a2.617,2.617,0,0,1-.639,1.793,2.039,2.039,0,0,1-1.633.718H72.989V63.934h1.136c.191,0,.283-.117.283-.358V61.712H71v3.943H69.013V61.712H65.676c-.043.386-.11.738-.174,1.08-.043.226-.083.439-.112.641a8.225,8.225,0,0,1-.173.91c-.042.181-.082.352-.11.522-.071.437-.143.725-.214,1a2.19,2.19,0,0,0-.07.426Zm6.105-9.317v2.58h3.409v-2.58Zm-5.042.072v2.508h3.054V57.053Zm5.042-4.3v2.006h3.409V52.752Zm-5.042,0v2.006h3.054V52.752ZM188.649,66.3l0,0-1.7-1.142c.058-.118.128-.272.209-.45.117-.256.262-.574.429-.913.288-.584.575-1.234.852-1.934a15.544,15.544,0,0,0,.611-1.811q.05-.172.1-.339a7.222,7.222,0,0,0,.283-2.006V44.511h15.62v2.22h-13.7V57.555a8.817,8.817,0,0,1-.211,1.862,19.834,19.834,0,0,1-.5,1.937c-.208.627-.418,1.192-.622,1.738l-.019.052a16.993,16.993,0,0,1-.639,1.577c-.113.231-.207.442-.29.628-.073.162-.141.314-.206.447a2.02,2.02,0,0,0-.211.5Zm14.554-.07v0l-2.342-6.449,1.777-.862,2.413,6.451-1.844.86Zm-6.036,0h-1.491V64.006h1.491a.259.259,0,0,0,.214-.072.266.266,0,0,0,.072-.216V58.486h-4.828V48.953h3.123l1.208-2.222,1.7,1.219-.567,1h4.189v-.5h1.988v7.526a2.635,2.635,0,0,1-.639,1.793,2,2,0,0,1-1.442.726,1.727,1.727,0,0,1-.193-.011H199.44v5.232a2.627,2.627,0,0,1-.639,1.793A2.313,2.313,0,0,1,197.167,66.229Zm-2.554-11.182v1.289h7.382c.214,0,.286-.072.286-.286v-1Zm0-3.8v1.5h7.668v-1.5Zm-9.87,14.981h0l-1.772-.932,3.407-7.884,1.846.931-3.478,7.884Zm-124.25,0h-4.4v-9.1c-.142.214-.286.433-.425.646l-.121.183c-.1.156-.2.309-.306.46l-1.561-1.361A12.764,12.764,0,0,0,55.1,54.545l.012-.029c.345-.837.7-1.7.912-2.409.2-.746.339-1.293.5-1.934a5.114,5.114,0,0,0,.211-1V47.376H54.812V45.154h8.237v2.222h-4.4v2.078c0,.048-.032.224-.1.575-.032.174-.071.386-.117.644a22.027,22.027,0,0,1-.78,2.8h3.123v-.43h1.988V63.718a2.617,2.617,0,0,1-.639,1.793A2.039,2.039,0,0,1,60.493,66.229ZM57.936,55.762v8.316h2.415c.212,0,.283-.073.283-.288V55.762ZM167.774,66.157h-1.988V56.05h-8.379a17.373,17.373,0,0,1-1.064,3.869c-.455,1.111-.906,2.189-1.421,3.154-.518.9-.935,1.6-1.277,2.15-.528.62-.639.811-.639.862l-1.563-1.433c.007-.01.215-.289.5-.718.292-.443.671-1.135,1.066-1.865a24.842,24.842,0,0,0,1.277-2.722,23.343,23.343,0,0,0,1.064-3.37h-5.181V53.756h5.467a1.614,1.614,0,0,0,.07-.574V47.235h-4.045V45.012h19.6v2.222h-3.479v6.593h5.042V56.05h-5.042V66.157ZM157.691,47.235v5.947a1.447,1.447,0,0,0-.07.574h8.093V47.235ZM87.9,66.157h0v0l-.281-1.073-.283-1.075a5.866,5.866,0,0,0,.78-.288c.449-.193,1.022-.45,1.918-.859.636-.321,1.448-.79,2.485-1.433a17.173,17.173,0,0,0,2.626-2.009H87.259V57.2h9.87a13.358,13.358,0,0,0,.78-1.363,8.376,8.376,0,0,0,.569-1.433v-4.73h1.988V54.9a6,6,0,0,1-.994,2.294H109.2v2.22h-8.1l7.882,4.8-.993,1.934-8.452-5.16.783-1.577h-2.2A18.535,18.535,0,0,1,96.063,61.5c-.605.49-1.325,1.03-2.2,1.649a16.9,16.9,0,0,1-2.132,1.291c-.247.125-.475.248-.694.368a9.545,9.545,0,0,1-1.152.563,10.6,10.6,0,0,1-1.066.463c-.1.038-.193.074-.281.11A2.943,2.943,0,0,1,87.9,66.157Zm40.328-4.946a3.976,3.976,0,0,1-3.9-3.943,3.905,3.905,0,1,1,7.81,0A3.977,3.977,0,0,1,128.226,61.21ZM94.572,56.765h0l-5.322-2.435.711-2.078,5.325,2.436-.71,2.076Zm165.006-.358H218.966V54.831h40.612v1.577Zm-218.469,0H.5V54.831H41.109v1.577Zm145.764-.5,0,0-3.618-3.725,1.277-1.649,3.692,3.727L186.874,55.9ZM96.845,54.044h0L91.52,51.533l.78-2.078,5.325,2.58-.779,2.006Zm-7.457-2.8H87.4V46.373h9.942L96.7,45.012l1.774-1,1.064,2.436h7.526v-.43h1.988v5.16h-1.988V48.6H89.388v2.652Zm97.484-1.291,0,0-3.69-3.725,1.28-1.646,3.692,3.725-1.278,1.646ZM25.985,33.9H0V.144H41.394l-2.557,4.37v.072h-26.7V29.53h17.4v-11.9H20.8V13.188H41.25V33.9l-11.713,0V30.319L25.986,33.9Zm207.676-.07h0l-11.356,0V.072h11.358v18.2l11.005-8.17h14.059L245.732,20.141l12.706,13.685-12.706,0L233.661,21.217V33.833Zm-66.1,0H156.2V10.106h11.36V33.831Zm-24.354,0h-31.1V.072h11.857V29.458h21.725l-2.484,4.372Zm-44.587,0H79.946V14.407H73.911V10.178h6.036V2.436h11.36v7.742H101.6l-2.84,4.229H91.307V29.746h9.8L98.62,33.829Zm-35.287,0H51.972V10.106h11.36V33.831Zm148.39-.144H200.5V10.034l-3.9,4.229h-7.1V33.687H178.141V10.034h33.582V33.687ZM167.56,7.31H156.2V0h11.36V7.31Zm-104.228,0H51.972V0h11.36V7.31Z" transform="translate(140.368 8.673)" fill="#fffdfd"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@ -581,9 +581,26 @@ class NewHeader extends Component {
matchpaths = (url) => {
const { match } = this.props;
let pathname=sessionStorage.pathname;
if(url){
if (match.path.indexOf(url) > -1) {
if (url.indexOf('forums') > -1 && match.path.indexOf('forums') > -1) {
return true
// 开源项目,路由改版后,比较麻烦,因此使用多个进行判断
} else if (url.indexOf('explore') > -1 && match.path.indexOf('explore') > -1) {
return true
// 开源项目,路由改版后,比较麻烦,因此使用多个进行判断
} else if (url.indexOf('explore') > -1 && match.url.indexOf(pathname) > -1) {
return true
// 公告
} else if (url.indexOf('/notice') > -1 && match.path.indexOf('/notice') > -1) {
return true
// 创客
} else if (url.indexOf('/task') > -1 && match.path.indexOf('/task') > -1) {
return true
// 管理
} else if (url.indexOf('/managements') > -1 && match.path.indexOf('/managements') > -1) {
return true
} else if (['http://117.50.100.12:8080','https://osredm.com','http://111.8.36.180:8000','http://localhost:3007'].includes(url) && match.path === '/') {
return true
} else {
return false
@ -727,7 +744,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}>{item.name}</a>
</li>
)
})
@ -835,7 +852,7 @@ class NewHeader extends Component {
{
settings && settings.personal && settings.personal.length > 0 && settings.personal.map((item,key)=>{
return(
<li key={key}><a href={item.url} target="_blank">{item.name}</a></li>
<li key={key}><a href={item.url}>{item.name}</a></li>
)
})
}

View File

@ -1,14 +1,15 @@
.head-nav ul#header-nav li:hover a, .head-nav ul#header-nav li.active a{
color: #1484EF;
color: #466AFF;
}
.head-nav ul#header-nav li.active a::after{
content: "";
width: 100%;
height:2px;
background-color: #1484EF;
background-color: #466AFF;
left:0px;
bottom: 12px;
position: absolute;
margin-left: 0;
}
.login-box{
font-size: 15px;

View File

@ -1,6 +1,7 @@
import React, {Component} from 'react';
import {setmiyah,broadcastChannelPostMessage} from 'educoder';
import {Tabs, Input, Checkbox, Button, notification,Menu} from 'antd';
import { Base64 } from 'js-base64';
import passopen from '../../../src/images/login/passopen.png';
import passoff from '../../../src/images/login/passoff.png';
import axios from 'axios';
@ -351,7 +352,7 @@ class LoginRegisterComponent extends Component {
var url = "/accounts/login.json";
axios.post(url, {
login: this.state.login,
password: this.state.password,
password: Base64.encode(this.state.password),
}).then((response) => {
if (response === undefined) {