新增我的任务,修改issue

This commit is contained in:
何童崇 2021-12-31 09:37:54 +08:00
parent ede5ab8957
commit 6fe3928a6e
15 changed files with 775 additions and 443 deletions

View File

@ -3,11 +3,12 @@ import { Table, Pagination } from 'antd';
import './index.scss';
export default (props) => {
const { loading, dataSource, columns, handleRow, total, setCurPage, current, rowSelection, expandedRowRender, expandIconColumnIndex } =props;
const { loading, dataSource, columns, handleRow, total, setCurPage, current, rowSelection, expandedRowRender, expandIconColumnIndex, onShowSizeChange,showSizeChanger } = props;
return (
<div className='pagination-table'>
<Table
{...props}
loading={loading}
rowKey={(row) => row.id}
dataSource={dataSource}
@ -17,14 +18,15 @@ export default (props) => {
rowSelection={rowSelection}
expandedRowRender={expandedRowRender}
expandIconColumnIndex={expandIconColumnIndex}
{...props}
/>
{total > 10 &&
<Pagination
showQuickJumper
onShowSizeChange={onShowSizeChange}
onChange={setCurPage}
current={current}
total={total}
showSizeChanger
/>}
</div>

View File

@ -11,16 +11,6 @@ import { getUserInfo } from './expert/api';
import { ImageLayerOfCommentHOC } from "../modules/page/layers/ImageLayerOfCommentHOC";
import './index.scss';
const Register = Loadable({
loader: () => import("./expert/register"),
loading: Loading,
});
const ExpertList = Loadable({
loader: () => import("./expert/expertList"),
loading: Loading,
});
const Review = Loadable({
loader: () => import("./expert/review/review"),
loading: Loading,
@ -31,8 +21,12 @@ const AdminRouter = Loadable({
loading: Loading,
});
const ReviewTasks = Loadable({
loader: () => import("./expert/reviewTasks"),
// const ReviewTasks = Loadable({
// loader: () => import("./expert/reviewTasks"),
// loading: Loading,
// })
const ExpertUser = Loadable({
loader: () => import("./expert/expertUser"),
loading: Loading,
})
const Expert = (propsTransmit) => {
@ -54,18 +48,14 @@ const Expert = (propsTransmit) => {
return (
<div className="newMain clearfix">
<Switch {...propsF}>
{/* 专家注册、专家评审任务 */}
<Route
path="/expert/register"
path="/expert/user/:functional"
render={(props) => (
<Register {...propsF} {...props} />
)}
></Route>
<Route
path="/expert/tasks"
render={(props) => (
<ReviewTasks {...propsF} {...props} />
<ExpertUser {...propsF} {...props} />
)}
></Route>
{/* 管理员管理 */}
<Route
path="/expert/admin/:admin"

View File

@ -65,10 +65,19 @@ export async function registerCheck(data){
return res;
}
// 获取用户信息
// 获取文件信息
export function getFile(id) {
return fetch({
url: `/busiAttachments/${id}`,
method: 'get'
});
}
// 获取评审任务列表
export function getExpertTasks(params) {
return fetch({
url: `/api/taskExpert/getExpertTasksPageList`,
method: 'get',
params,
});
}

View File

@ -16,19 +16,26 @@ const Option = Select.Option;
function RegisterList({ showNotification }) {
const [reload, setReload] = useState();
const [loading, setLoading] = useState(false);
const [downloading, setDownloading] = useState(false);
const [curPage, setCurPage] = useState(1);
const [pageSize, setPageSize] = useState(10);
const [dataList, setDataList] = useState([]);
const [total, setTotal] = useState(0);
const [searchInput, setSearchInput] = useState('');
const [searchReviewArea, setSearchReviewArea] = useState('');
const [expertType, setExpertType] = useState('')
const [pageSize, setPageSize] = useState(10);
const [uploadExpertList, setUploadExpertList] = useState([]);
const [uploadExpertIds, setUploadExpertIds] = useState([]);
const [dataAll, setDataAll] = useState([]);
const [download, setDownload] = useState();
const [downloading, setDownloading] = useState(false);
function onShowSizeChange(current, pageSize){
setCurPage(current);
setPageSize(pageSize);
}
console.log(pageSize);
const columns = useMemo(() => {
return [{
title: '姓名',
@ -114,7 +121,7 @@ function RegisterList({ showNotification }) {
{
title: '邮箱地址',
dataIndex: 'expertEmail',
width:200,
width: 200,
},
{
title: '开户银行',
@ -145,7 +152,7 @@ function RegisterList({ showNotification }) {
];
}, []);
//
useEffect(() => {
@ -164,11 +171,11 @@ function RegisterList({ showNotification }) {
setLoading(false);
setTotal(data.total);
});
}, [curPage, reload, searchInput, searchReviewArea, expertType]);
}, [curPage, reload, searchInput, searchReviewArea, expertType, pageSize]);
//
useEffect(() => {
if(!download){
if (!download) {
return;
}
setDownloading(true);
@ -311,6 +318,8 @@ function RegisterList({ showNotification }) {
setCurPage={setCurPage}
current={curPage}
scroll={{ x: 2300 }}
onShowSizeChange={onShowSizeChange}
showSizeChanger
/>
<Table

View File

@ -0,0 +1,58 @@
import React from "react";
import { Route, Switch, Link } from "react-router-dom";
import Loadable from "react-loadable";
import Loading from "src/Loading";
import '../index.scss';
import './index.scss';
const Register = Loadable({
loader: () => import("../register"),
loading: Loading,
});
const ReviewTasks = Loadable({
loader: () => import("../reviewTasks"),
loading: Loading,
})
const ExpertUser = (props) => {
const functional = props.match.params.functional;
return (
<div className="centerbox detail">
<div className="navigation">
<span>专家评审系统</span>&nbsp;&gt;&nbsp;
{functional === 'register' && <Link to="/expert/user/register">登记专家资料</Link>}
{functional === 'tasks' && <Link to="/expert/user/tasks">我的评审任务</Link>}
</div>
<div className='center_flex'>
<div className='register_left'>
<Link to="/expert/user/register" className={`${functional === 'register' && 'active'}`}>登记专家资料</Link>
<Link to="/expert/user/tasks" className={`${functional === 'tasks' && 'active'}`}>我的评审任务</Link>
</div>
<Switch {...props}>
<Route
path="/expert/user/register"
render={(props) => (
<Register {...props} />
)}
></Route>
<Route
path="/expert/user/tasks"
render={(props) => (
<ReviewTasks {...props} />
)}
></Route>
</Switch>
</div>
</div>
);
}
export default ExpertUser;

View File

@ -0,0 +1,46 @@
.centerbox.detail {
font-size: 20px;
.navigation {
font-size: 0.6em;
margin: -35px 0 15px;
}
.center_flex {
display: flex;
justify-content: space-between;
.register_left {
display: flex;
flex-direction: column;
height: 10em;
width: 10em;
font-size: 0.7em;
background-color: white;
padding: 0.4vw;
flex: none;
a{
padding: 0 1.3em;
height: 2.55em;
line-height: 2.55em;
border-radius: 4px;
&:hover{
color: #4154f1;
}
&.active {
color: white;
background-color: #4154f1;
&:hover{
opacity: .8;
}
}
}
}
.register_right {
flex: auto;
background-color: white;
margin-left: 2em;
}
}
}

View File

@ -30,6 +30,10 @@ export default Form.create()(({ match, history, showNotification, form, current_
const [reload, setReload] = useState();
const [reviewAreaOne, setReviewAreaOne] = useState();
const [reviewAreaTwo, setReviewAreaTwo] = useState();
const [reviewAreaThree, setReviewAreaThree] = useState();
//
useEffect(() => {
let params = {};
@ -60,7 +64,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
setFieldsValue(params);
setExpertRegisterValues(params);
setLastRegister(lastRegister);
setForbidden(lastRegister&&lastRegister.status===-1);
setForbidden(lastRegister && lastRegister.status === -1);
//
if (lastRegister.resume) {
@ -87,7 +91,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
setHonorList(honors);
setHonorIds(lastRegister.honors);
}
}else{
} else {
setForbidden(false);
}
});
@ -234,320 +238,332 @@ export default Form.create()(({ match, history, showNotification, form, current_
return (
<div className="centerbox detail">
<div className="navigation">
<span>专家评审系统</span>&nbsp;&gt;&nbsp;<span>登记专家资料</span>
</div>
<div className='center_flex'>
<div className='register_left'>
<button className="but41_fill">登记专家资料</button>
<div className='register_right'>
{
lastRegister && lastRegister.status === -1 && <p className='checking'>
您的资料正在审核请稍候
</p>
}
{
lastRegister && lastRegister.status === 2 && <p className='fail'>
您提交的资料已被拒绝请完善资料后重新提交
</p>
}
{
lastRegister && lastRegister.status === 1 && <p className='succeed'>
您已经是专家了如果修改资料修改后的资料需要管理员重新审核审核过程中不会影响您的专家身份
</p>
}
{
(!lastRegister || (lastRegister && lastRegister.status === 3)) && <p>专家资料</p>
}
<Form>
<div className='expert_Register_form'>
{
helper('姓名',
'expertName',
[{ required: true, message: "姓名不能为空" },
{ max: 20, message: '长度不能超过20个字符' }],
<Input
placeholder="请输入您的姓名"
disabled={forbidden}
/>
)
}
{
helper('手机号码',
'phone',
[{ required: true, message: "手机号码不能为空" },
{
validator: (rule, val, callback) => {
const pattern = /^((\+)?86|((\+)?86)?)0?1[3456789]\d{9}$/;
if (pattern.test(val)) {
callback();
} else {
callback('请输入正确的手机号码!');
}
}
}],
<Input
placeholder="请输入您的手机号码"
disabled={forbidden}
/>
)
}
{
helper('单位类别',
'workplaceType',
[{ required: true, message: "请选择单位类别" }],
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{unitType.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
</Select>
)
}
{
helper('专业职称',
'professionalTitle',
[{ required: true, message: "专业职称不能为空" },
{ max: 50, message: '长度不能超过50个字符' }],
<Input
placeholder="请输入您的专业职称"
disabled={forbidden}
/>
)
}
{
helper('专家类别',
'expertType',
[{ required: true, message: "请选择专家类别" }],
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{professionalType.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
</Select>
)
}
{
helper('评审领域2',
'reviewAreaTwo', [],
<Select
disabled={forbidden}
placeholder="请选择"
dropdownClassName="expert_register"
onChange={(value) => { setReviewAreaTwo(value) }}
>
{reviewArea.map(item => {
return <Option key={item.value} value={item.value}
disabled={item.value === reviewAreaOne || item.value === reviewAreaThree}
>{item.label}</Option>
})}
</Select>
)
}
{
helper('毕业院校',
'graduatedFrom', [{ max: 50, message: '长度不能超过50个字符' }],
<Input
placeholder="请输入您的毕业院校"
disabled={forbidden}
/>
)
}
{
helper('身份证号',
'idNumber', [{
validator: (rule, val, callback) => {
let _IDRe18 = /^([1-6][1-9]|50)\d{4}(18|19|20)\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
let _IDre15 = /^([1-6][1-9]|50)\d{4}\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}$/
//
if (_IDRe18.test(val) || _IDre15.test(val)) {
callback();
} else {
callback('请输入正确的身份证号码!');
}
}
}],
<Input
placeholder="请输入您的身份证号码"
disabled={forbidden}
/>
)
}
{
helper('开户银行',
'bankName', [{ max: 50, message: '长度不能超过50个字符' }],
<Input
placeholder="请输入您的开户银行"
disabled={forbidden}
/>
)
}
<Form.Item className="upload-form" label="个人简介">
<Upload
load={uploadResume}
size={100}
showNotification={showNotification}
fileList={resumeList}
disabled={forbidden}
/>
</Form.Item>
<Form.Item className="upload-form" label="学术成果">
<Upload
load={uploadAchievement}
size={100}
showNotification={showNotification}
fileList={achievementList}
disabled={forbidden}
/>
</Form.Item>
</div>
<div className='register_right'>
{/* <p>
{lastRegister && lastRegister.status === -1 ? "您的资料正在审核,请稍候" : lastRegister && lastRegister.status === 2 ? "您提交的资料已被拒绝,请完善资料后重新提交" : "专家资料"}
</p> */}
<div className='expert_Register_form ml80'>
{
lastRegister && lastRegister.status === -1 && <p className='checking'>
您的资料正在审核请稍候
</p>
helper('最高学历',
'highestDegree',
[{ required: true, message: '请选择最高学历' }],
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{highestEducation.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
</Select>
)
}
{
lastRegister && lastRegister.status === 2 && <p className='fail'>
您提交的资料已被拒绝请完善资料后重新提交
</p>
helper('工作单位',
'workplace',
[{ required: true, message: "工作单位不能为空" }],
<Input
placeholder="请输入您的工作单位"
disabled={forbidden}
/>
)
}
{
(!lastRegister || (lastRegister && lastRegister.status === 3)) && <p>专家资料</p>
helper('工作性质',
'workNature',
[{ required: true, message: "请选择工作性质" }],
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{natureOfWork.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
</Select>
)
}
<Form>
<div className='expert_Register_form'>
{
helper('姓名',
'expertName',
[{ required: true, message: "姓名不能为空" },
{ max: 20, message: '长度不能超过20个字符' }],
<Input
placeholder="请输入您的姓名"
disabled={forbidden}
/>
)
}
{
helper('手机号码',
'phone',
[{ required: true, message: "手机号码不能为空" },
{
validator: (rule, val, callback) => {
const pattern = /^((\+)?86|((\+)?86)?)0?1[3456789]\d{9}$/;
if (pattern.test(val)) {
callback();
} else {
callback('请输入正确的手机号码!');
}
}
}],
<Input
placeholder="请输入您的手机号码"
disabled={forbidden}
/>
)
}
{
helper('单位类别',
'workplaceType',
[{ required: true, message: "请选择单位类别" }],
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{unitType.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
</Select>
)
}
{
helper('专业职称',
'professionalTitle',
[{ required: true, message: "专业职称不能为空" },
{ max: 50, message: '长度不能超过50个字符' }],
<Input
placeholder="请输入您的专业职称"
disabled={forbidden}
/>
)
}
{
helper('专家类别',
'expertType',
[{ required: true, message: "请选择专家类别" }],
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{professionalType.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
</Select>
)
}
{
helper('评审领域2',
'reviewAreaTwo', [],
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{reviewArea.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
</Select>
)
}
{
helper('毕业院校',
'graduatedFrom', [{ max: 50, message: '长度不能超过50个字符' }],
<Input
placeholder="请输入您的毕业院校"
disabled={forbidden}
/>
)
}
{
helper('身份证号',
'idNumber', [{
validator: (rule, val, callback) => {
let _IDRe18 = /^([1-6][1-9]|50)\d{4}(18|19|20)\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
let _IDre15 = /^([1-6][1-9]|50)\d{4}\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}$/
//
if (_IDRe18.test(val) || _IDre15.test(val)) {
callback();
} else {
callback('请输入正确的身份证号码!');
}
}
}],
<Input
placeholder="请输入您的身份证号码"
disabled={forbidden}
/>
)
}
{
helper('开户银行',
'bankName', [{ max: 50, message: '长度不能超过50个字符' }],
<Input
placeholder="请输入您的开户银行"
disabled={forbidden}
/>
)
}
<Form.Item className="upload-form" label="个人简介">
<Upload
load={uploadResume}
size={100}
showNotification={showNotification}
fileList={resumeList}
disabled={forbidden}
/>
</Form.Item>
<Form.Item className="upload-form" label="学术成果">
<Upload
load={uploadAchievement}
size={100}
showNotification={showNotification}
fileList={achievementList}
disabled={forbidden}
/>
</Form.Item>
</div>
<div className='expert_Register_form ml80'>
{
helper('最高学历',
'highestDegree',
[{ required: true, message: '请选择最高学历' }],
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{highestEducation.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
</Select>
)
}
{
helper('工作单位',
'workplace',
[{ required: true, message: "工作单位不能为空" }],
<Input
placeholder="请输入您的工作单位"
disabled={forbidden}
/>
)
}
{
helper('工作性质',
'workNature',
[{ required: true, message: "请选择工作性质" }],
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{natureOfWork.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
</Select>
)
}
{
helper('职称职级',
'titleRank',
[{ required: true, message: "请选择职称职级" }],
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{positionLevel.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
</Select>
)
}
{
helper('评审领域1',
'reviewAreaOne',
[{ required: true, message: "请选择评审领域" }],
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{reviewArea.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
</Select>
)
}
{
helper('评审领域3',
'reviewAreaThree', [],
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{reviewArea.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
</Select>
)
}
{
helper('院校专业',
'major', [{ max: 50, message: '长度不能超过50个字符' }],
<Input
placeholder="请输入您的专业"
disabled={forbidden}
/>
)
}
{
helper('邮箱地址',
'expertEmail', [{
validator: (rule, val, callback) => {
const pattern = /^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
if (pattern.test(val)) {
callback();
} else {
callback('请输入正确的邮箱地址!');
}
}
}],
<Input
placeholder="请输入您的常用邮箱地址"
disabled={forbidden}
/>
)
}
{
helper('银行账号',
'bankAccount', [{ max: 50, message: '长度不能超过50个字符' }],
<Input
placeholder="请输入您的银行卡号"
disabled={forbidden}
/>
)
}
<Form.Item className="upload-form" label="职称证明">
<Upload
load={uploadTitleCert}
size={100}
showNotification={showNotification}
fileList={titleCertList}
disabled={forbidden}
/>
</Form.Item>
<Form.Item className="upload-form" label="荣誉称号">
<Upload
load={uploadHonor}
size={100}
showNotification={showNotification}
fileList={honorList}
disabled={forbidden}
/>
</Form.Item>
</div>
</Form>
<div className='buts'>
{/* <button className="but41_fill mr20" disabled={forbidden} onClick={() => expertRegisterSubmit(true)}></button>
{
helper('职称职级',
'titleRank',
[{ required: true, message: "请选择职称职级" }],
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{positionLevel.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
</Select>
)
}
{
helper('评审领域1',
'reviewAreaOne',
[{ required: true, message: "请选择评审领域" }],
<Select
disabled={forbidden}
placeholder="请选择"
dropdownClassName="expert_register"
onChange={(value) => { setReviewAreaOne(value) }}
>
{reviewArea.map(item => {
return <Option key={item.value} value={item.value}
disabled={item.value === reviewAreaTwo || item.value === reviewAreaThree}
>{item.label}</Option>
})}
</Select>
)
}
{
helper('评审领域3',
'reviewAreaThree', [],
<Select
disabled={forbidden}
placeholder="请选择"
dropdownClassName="expert_register"
onChange={(value) => { setReviewAreaThree(value) }}
>
{reviewArea.map(item => {
return <Option key={item.value} value={item.value}
disabled={item.value === reviewAreaTwo || item.value === reviewAreaOne}
>{item.label}</Option>
})}
</Select>
)
}
{
helper('院校专业',
'major', [{ max: 50, message: '长度不能超过50个字符' }],
<Input
placeholder="请输入您的专业"
disabled={forbidden}
/>
)
}
{
helper('邮箱地址',
'expertEmail', [{
validator: (rule, val, callback) => {
const pattern = /^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
if (pattern.test(val)) {
callback();
} else {
callback('请输入正确的邮箱地址!');
}
}
}],
<Input
placeholder="请输入您的常用邮箱地址"
disabled={forbidden}
/>
)
}
{
helper('银行账号',
'bankAccount', [{ max: 50, message: '长度不能超过50个字符' }],
<Input
placeholder="请输入您的银行卡号"
disabled={forbidden}
/>
)
}
<Form.Item className="upload-form" label="职称证明">
<Upload
load={uploadTitleCert}
size={100}
showNotification={showNotification}
fileList={titleCertList}
disabled={forbidden}
/>
</Form.Item>
<Form.Item className="upload-form" label="荣誉称号">
<Upload
load={uploadHonor}
size={100}
showNotification={showNotification}
fileList={honorList}
disabled={forbidden}
/>
</Form.Item>
</div>
</Form>
<div className='buts'>
{/* <button className="but41_fill mr20" disabled={forbidden} onClick={() => expertRegisterSubmit(true)}></button>
<button className="but41_border mr20" disabled={forbidden} onClick={draft}>保存资料</button>
<button className="butE3_border" onClick={() => setCancelConfirmValue(true)}>取消</button> */}
<Button className="but41_fill mr20" type="primary" disabled={forbidden} onClick={() => expertRegisterSubmit(true)}>提交资料</Button>
<Button className="but41_border mr20" disabled={forbidden} onClick={draft}>保存资料</Button>
<Button className="butE3_border" onClick={cancel}>取消</Button>
<Button className="but41_fill mr20" type="primary" disabled={forbidden} onClick={() => expertRegisterSubmit(true)}>提交资料</Button>
<Button className="but41_border mr20" disabled={forbidden} onClick={draft}>保存资料</Button>
<Button className="butE3_border" onClick={cancel}>取消</Button>
<Modal
title="提交资料"
visible={submitConfirmValue}
onOk={expertRegisterOk}
onCancel={() => setSubmitConfirmValue(false)}
wrapClassName="expert_modal submit"
closeIcon={<Icon className='iconfont icon-guanbi1' />}
>
<p className='weight_bold'>资料提交后无法修改将等待管理员审核</p>
<p className='ml30'>确认提交</p>
</Modal>
<Modal
title="提交资料"
visible={submitConfirmValue}
onOk={expertRegisterOk}
onCancel={() => setSubmitConfirmValue(false)}
wrapClassName="expert_modal submit"
closeIcon={<Icon className='iconfont icon-guanbi1' />}
>
<p className='weight_bold'>资料提交后无法修改将等待管理员审核</p>
<p className='ml30'>确认提交</p>
</Modal>
<Modal
title="提交资料"
visible={cancelConfirmValue}
onOk={() => { history.go(-1) }}
onCancel={() => setCancelConfirmValue(false)}
wrapClassName="expert_modal"
>
<p className='weight_bold warning'>有内容没有保存确定退出编辑吗</p>
<p className='ml30'>退出编辑后更新的内容不会自动保存</p>
</Modal>
</div>
</div>
<Modal
title="提交资料"
visible={cancelConfirmValue}
onOk={() => { history.go(-1) }}
onCancel={() => setCancelConfirmValue(false)}
wrapClassName="expert_modal"
>
<p className='weight_bold warning'>有内容没有保存确定退出编辑吗</p>
<p className='ml30'>退出编辑后更新的内容不会自动保存</p>
</Modal>
</div>
</div>
)

View File

@ -1,111 +1,102 @@
.iconfont2 {
font-family: "svgtofont" !important;
font-size: 26px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-webkit-text-stroke-width: 0.2px;
-moz-osx-font-smoothing: grayscale;
}
.centerbox.detail {
font-size: 20px;
.navigation {
font-size: 0.6em;
margin: -35px 0 15px;
.center_flex {
display: flex;
justify-content: space-between;
.register_left {
height: 10em;
font-size: 0.7em;
background-color: white;
padding: 0.4vw;
}
.center_flex {
display: flex;
justify-content: space-between;
.register_left {
height: 10em;
font-size: 0.7em;
background-color: white;
padding: 0.4vw;
.register_right {
flex: auto;
background-color: white;
margin-left: 2em;
& > p {
border-bottom: 1px solid #eeeeee;
padding: 0.5em 2em;
color: #181818;
font-size: 0.8em;
font-weight: bold;
}
.register_right {
flex: auto;
background-color: white;
margin-left: 2em;
& > p {
border-bottom: 1px solid #eeeeee;
padding: 0.5em 2em;
color: #181818;
font-size: 0.8em;
font-weight: bold;
}
.fail{
background: #FFEFEF;
border: 1px solid #FF3838;
color: #FF3838;
}
.fail {
background: #ffefef;
border: 1px solid #ff3838;
color: #ff3838;
}
.checking{
background: #EDF2FF;
border: 1px solid #4154F1;
color: #4154F1;
.checking {
background: #edf2ff;
border: 1px solid #4154f1;
color: #4154f1;
}
.succeed {
background: #edf2ff;
border: 1px solid green;
color: green;
}
.ant-form {
display: flex;
padding: 1em 2em 1.5em;
}
.expert_Register_form {
width: 43.5%;
&.ml80 {
margin-left: 120px;
}
.ant-form{
.ant-form-item {
display: flex;
padding: 1em 2em 1.5em;
}
.expert_Register_form {
width: 43.5%;
&.ml80{
margin-left: 120px;
}
.ant-form-item{
display: flex;
}
.ant-form-item-label {
width: 6em;
line-height: 2.8em;
}
.ant-form-item-required::before{
position: relative;
top: -1px;
content: url('./image/required.svg');
}
.ant-form-item-control-wrapper{
width: 70%;
display: inline-block;
}
.ant-input, .ant-select-selection{
// width: 30.1em;
box-shadow: none;
&:focus, &:hover{
border: 1px solid #4154F1 !important;
}
}
tr td:first-child .ant-row.ant-form-item{
margin-right: 9em;
}
& .ant-input, .ant-input .ant-input-suffix {
background-color: #FFFFFF !important;
}
& .ant-select-open .ant-select-selection{
border: 1px solid #4154F1 !important;
}
& .ant-form-item{
margin-bottom: 0.5em;
}
& td>p{
margin: 0.3em 0 0.6em !important;
}
& .but41_border{
margin-bottom: 0.6em;
padding: 0 0.5em;
}
& .ant-cascader-menu-item:hover {
background: #f2f3ff;
}
.ant-form-item-label {
width: 6em;
line-height: 2.8em;
}
& .buts {
font-size: 0.7em;
padding: 1.5em 2em;
background-color: #f5f5f5;
.ant-form-item-required::before {
position: relative;
top: -1px;
content: url("./image/required.svg");
}
.ant-form-item-control-wrapper {
width: 70%;
display: inline-block;
}
.ant-input,
.ant-select-selection {
// width: 30.1em;
box-shadow: none;
&:focus,
&:hover {
border: 1px solid #4154f1 !important;
}
}
tr td:first-child .ant-row.ant-form-item {
margin-right: 9em;
}
& .ant-input,
.ant-input .ant-input-suffix {
background-color: #ffffff !important;
}
& .ant-select-open .ant-select-selection {
border: 1px solid #4154f1 !important;
}
& .ant-form-item {
margin-bottom: 0.5em;
}
& td > p {
margin: 0.3em 0 0.6em !important;
}
& .but41_border {
margin-bottom: 0.6em;
padding: 0 0.5em;
}
& .ant-cascader-menu-item:hover {
background: #f2f3ff;
}
}
& .buts {
font-size: 0.7em;
padding: 1.5em 2em;
background-color: #f5f5f5;
}
}
}

View File

@ -143,6 +143,11 @@ function RegisterList({ showNotification, form }) {
];
}, []);
function onShowSizeChange(current, pageSize){
setCurPage(current);
setPageSize(pageSize);
}
//
useEffect(() => {
setLoading(true);
@ -223,15 +228,13 @@ function RegisterList({ showNotification, form }) {
return (
<div className="expert-list centerbox">
<div className="center-screen" >
<div className="center-right-but">
<div className="center-screen mb30" >
<Search
maxLength={20}
style={{ width: "300px" }}
placeholder="请输入专家姓名或手机号"
onSearch={(value) => { setSearchInput(value); setCurPage(1); }}
/>
</div>
</div>
<Paginationtable
loading={loading}
@ -241,6 +244,8 @@ function RegisterList({ showNotification, form }) {
setCurPage={setCurPage}
current={curPage}
scroll={{ x: 2300 }}
onShowSizeChange={onShowSizeChange}
showSizeChanger
/>
<Modal

View File

@ -16,7 +16,7 @@ function Review(){
<p className="ne_title">红山开源平台专家评审系统</p>
<p className="ne_tips">您尚未被入选本平台专家团队可提交专家资料进行注册申请加入专家团队</p>
<p className="ne_bar"></p>
<Link to='/expert/register'><button className="but41_fill">专家注册</button></Link>
<Link to='/expert/user/register'><button className="but41_fill">专家注册</button></Link>
</div>
</div>)
}

View File

@ -1,9 +1,161 @@
import React from "react";
import { Link } from "react-router-dom";
import React, { useState, useCallback, useMemo, useEffect } from "react";
import { Input, Select, Button, Form, DatePicker, Table, Pagination, Upload, Modal } from 'antd';
import cookie from 'react-cookies';
import { exportExcel } from '../components/exportExcel.js';
import Paginationtable from "../../components/paginationTable";
import { Info } from '../../components/ModalFun';
import { getExpertTasks } from "../api";
import { taskType } from "../static";
import { httpUrl } from '../fetch';
import './index.scss';
import '../index.scss';
const { Search } = Input;
const Option = Select.Option;
function ReviewTasks({ form, showNotification, match, history }) {
const { getFieldDecorator, setFieldsValue, getFieldsValue } = form;
const [reload, setReload] = useState();
const [loading, setLoading] = useState(false);
const [curPage, setCurPage] = useState(1);
const [pageSize, setPageSize] = useState(10);
const [dataList, setDataList] = useState([]);
const [total, setTotal] = useState(0);
const [searchObj, setSearchObj] = useState({
containerName: '',
containerType: 1
});
const columns = useMemo(() => {
return [
{
title: '序号',
dataIndex: 'index',
render: (text, record, index) => {
return index + 1
}
},
{
title: '任务名称',
dataIndex: 'expertName',
width: 75,
key: 'expertName',
// render: (text, record) => {
// return record.user ? record.user.nickname || record.user.login : ''
// }
},
{
title: '评审截止时间',
dataIndex: 'highestDegree',
key: 'highestDegree',
},
{
title: '剩余评审时间',
dataIndex: 'phone',
key: 'phone',
},
{
title: '评审状态',
dataIndex: 'workplace',
key: 'workplace',
},
];
}, []);
//
useEffect(() => {
setLoading(true);
let params = {
...searchObj,
pageSize,
curPage,
statusString: '1,-1',
};
getExpertTasks(params).then(data => {
setDataList(data.rows || []);
setLoading(false);
setTotal(data.total);
});
}, [curPage, reload, pageSize]);
function onSearch() {
let values = getFieldsValue(['nameInput', 'endTime', 'startTime', 'enterpriseNameInput']);
if (values.checkStatus === '0,1,2') values.checkStatus = '';
setSearchObj(values);
}
function clearSearch() {
setFieldsValue({
containerName: '',
containerType: 1,
});
setSearchObj({
containerName: '',
containerType: 1,
});
}
const helper = useCallback(
(label, name, rules, widget, initialValue) => (
<Form.Item label={label}>
{getFieldDecorator(name, { rules, initialValue, validateFirst: true, })(widget)}
</Form.Item>
), []);
function ReviewTasks() {
return (
<div>aaa</div>
<div className='register_right'>
<p>
我的评审任务
</p>
<div className="search-screen" >
{helper(
"任务名称",
"containerName",
[{ max: 20, message: '长度不能超过20个字符' }],
<Input
placeholder="输入任务名称进行检索"
/>
)}
{helper(
"任务类型",
"containerType",
[],
<Select
style={{ width: "200px" }}
placeholder="所有领域"
dropdownClassName="expert_register"
// onChange={(value) => { setSearchReviewArea(value) }}
>
{taskType.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
</Select>,
1
)}
<div className="button-div">
{/* <a href="/admin/tasks.xlsx" class="fr edu-default-btn edu-blueback-btn plr30">导出</a> */}
<Button className="mr10" type="primary" onClick={onSearch}>搜索</Button>
<Button className="mr10" onClick={clearSearch}>清除</Button>
</div>
</div>
<Paginationtable
loading={loading}
dataSource={dataList}
columns={columns}
total={total}
setCurPage={setCurPage}
current={curPage}
/>
</div>
)
}
export default ReviewTasks;
export default Form.create()(ReviewTasks);

View File

@ -0,0 +1,16 @@
.register_right {
flex: auto;
.search-screen > .ant-row {
min-width: 36%;
}
p{
border-bottom: 1px solid #eeeeee;
padding: 0.5em 2em;
color: #181818;
font-size: 0.8em;
font-weight: bold;
}
.button-div{
line-height: 1.5;
}
}

View File

@ -51,4 +51,9 @@ export const reviewArea = [
{ value: "人工智能", label: "人工智能" },
{ value: "文学交流", label: "文学交流" },
{ value: "体育活动", label: "体育活动" }
];
export const taskType = [
{ value: 1, label: "创客评审任务" },
{ value: 2, label: "竞赛评审任务" },
];

View File

@ -228,6 +228,39 @@
text-align: left;
}
.search-screen {
display: flex;
flex-flow: row wrap;
justify-content: space-between;
margin: 1.25rem 0;
padding: 1.25rem;
background-color: #fff;
border-bottom: 1px solid #dedede;
> .ant-row {
min-width: 41%;
margin-right: 2rem;
.ant-form-item-label {
float: left;
}
.ant-form-item-control-wrapper {
overflow: hidden;
}
}
.center-right-but {
.ant-form-item {
margin: 0 1rem 0 0;
}
.ant-form-item-control-wrapper {
display: inline-block;
}
}
.button-div {
margin-right: 1.5rem;
}
}
@media screen and (max-width: 1200px) {
.centerbox {
width: 98%;

View File

@ -770,7 +770,7 @@ class NewHeader extends Component {
<div className="head-right">
{this.props.user && this.props.user.login &&
<div className='mr30'>
<a href={this.state.isExpert ? '/expert/tasks' :'/expert'}>
<a href={this.state.isExpert ? '/expert/user/tasks' :'/expert'}>
<i className="iconfont icon-xiaoxilingdang color-grey-6"></i>
</a>
</div>