修复issue

This commit is contained in:
何童崇 2021-12-29 19:49:22 +08:00
parent 63b6c4ee12
commit c978956463
12 changed files with 189 additions and 73 deletions

View File

@ -34,7 +34,7 @@ export default props => {
<Menu.Item><Link to="/task/payProof">支付报酬凭证上传</Link></Menu.Item>
</SubMenu>
<Menu.Item><Link to="/task/taskAdmin">任务列表</Link></Menu.Item>
<Menu.Item><Link to="/task/taskAdmin">创客任务列表</Link></Menu.Item>
<Menu.Item><Link to="/task/paperManage">创意征集评论</Link></Menu.Item>
</Menu>
});
@ -45,12 +45,12 @@ export default props => {
</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 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>
@ -58,6 +58,8 @@ export default props => {
<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><Link to={`/expert/admin/register`}>专家注册列表</Link></Menu.Item>
<Menu.Item><Link to={`/expert/admin/list`}>专家库列表</Link></Menu.Item>
</Menu>
});
@ -123,9 +125,9 @@ export default props => {
<div className="drop-div">竞赛</div>
</Dropdown>
<Dropdown key={'expert'} overlay={expertMenu} placement="bottomLeft">
{/* <Dropdown key={'expert'} overlay={expertMenu} placement="bottomLeft">
<div className="drop-div">专家</div>
</Dropdown>
</Dropdown> */}
<Dropdown key={'userMenu'} overlay={userMenu} placement="bottomLeft">
<div className="drop-div">用户</div>

View File

@ -6,7 +6,7 @@ export default (props) => {
const { loading, dataSource, columns, handleRow, total, setCurPage, current, rowSelection, expandedRowRender, expandIconColumnIndex } =props;
return (
<Fragment>
<div className='pagination-table'>
<Table
loading={loading}
rowKey={(row) => row.id}
@ -21,11 +21,12 @@ export default (props) => {
/>
{total > 10 &&
<Pagination
showQuickJumper
onChange={setCurPage}
current={current}
total={total}
/>}
</Fragment>
</div>
)
}

View File

@ -1,14 +1,27 @@
.ant-table-wrapper{
::-webkit-scrollbar{
width: 5px;
height: 5px;
}
.ant-table-hide-scrollbar{
margin-bottom: -5px;
overflow-y: hidden !important;
::-webkit-scrollbar{
.pagination-table {
.ant-table-wrapper {
::-webkit-scrollbar {
width: 5px;
height: 5px;
}
.ant-table-hide-scrollbar {
margin-bottom: -5px;
overflow-y: hidden !important;
::-webkit-scrollbar {
width: 5px;
height: 5px;
}
}
}
}
.ant-pagination{
margin-top:1.25rem;
text-align: right;
}
// .ant-table-row-cell-break-word{
// .ant-btn{
// display: inline-block;
// }
// }
}

View File

@ -3,7 +3,7 @@ import { Upload, Button } from 'antd';
import { appendFileSizeToUploadFileAll } from 'educoder';
import { httpUrl } from '../fetch';
function Uploads({ className, size, actionUrl, fileList, showNotification, load,accept }) {
function Uploads({ className, size, actionUrl, fileList, showNotification, load, accept, disabled }) {
const [files, setFiles] = useState(undefined);
useEffect(() => {
@ -75,6 +75,7 @@ function Uploads({ className, size, actionUrl, fileList, showNotification, load,
const upload = {
name: 'file',
fileList: files,
disabled: disabled,
action: (httpUrl || actionUrl) + `/busiAttachments/upload`,
onChange: handleChange,
onRemove: onAttachmentRemove,
@ -82,7 +83,7 @@ function Uploads({ className, size, actionUrl, fileList, showNotification, load,
};
return (
<Upload {...upload} className={className}>
<Button type="primary">点击上传</Button>
<Button type="primary" disabled={disabled}>点击上传</Button>
<span className="ml10 color-grey-9">(你可以上传小于<span className="color-red">{size}MB</span>的文件)</span>
</Upload>
)

View File

@ -54,6 +54,9 @@ function RegisterList({ showNotification }) {
{
title: '工作单位',
dataIndex: 'workplace',
key: 'workplace',
// width: 250,
},
{
title: '单位类别',
@ -68,11 +71,11 @@ function RegisterList({ showNotification }) {
{
title: '专业职称',
dataIndex: 'professionalTitle',
width: 80,
width: 100,
},
{
title: '职称职级',
dataIndex: 'professionalYears',
dataIndex: 'titleRank',
width: 80,
},
{
@ -83,14 +86,17 @@ function RegisterList({ showNotification }) {
{
title: '评审领域1',
dataIndex: 'reviewAreaOne',
width: 100,
},
{
title: '评审领域2',
dataIndex: 'reviewAreaTwo',
width: 100,
},
{
title: '评审领域3',
dataIndex: 'reviewAreaThree',
width: 100,
},
{
title: '毕业院校',
@ -108,10 +114,12 @@ function RegisterList({ showNotification }) {
{
title: '邮箱地址',
dataIndex: 'expertEmail',
width:200,
},
{
title: '开户银行',
dataIndex: 'bankName',
width: 110,
},
{
title: '银行账号',
@ -249,11 +257,11 @@ function RegisterList({ showNotification }) {
<div className="expert-list centerbox">
<div className="center-screen" >
<div className="center-right-but">
<Form.Item label={"名/手机"}>
<Form.Item label={"名/手机"}>
<Search
maxLength={20}
style={{ width: "300px" }}
placeholder="请输入专家名或手机号"
placeholder="请输入专家名或手机号"
onSearch={(value) => { setSearchInput(value); setCurPage(1); }}
/>
</Form.Item>
@ -290,7 +298,7 @@ function RegisterList({ showNotification }) {
>
<button className="but41_fill">导入</button>
</Upload>
<Button loading={downloading} className="but41_fill" onClick={() => { setDownload(Math.random()) }}>导出</Button>
<Button loading={downloading} className="ml10 but41_fill" onClick={() => { setDownload(Math.random()) }}>导出</Button>
{/* <ExportExcel tableClass=".ant-table-scroll" fileName="专家列表" /> */}
</div>
@ -302,7 +310,7 @@ function RegisterList({ showNotification }) {
total={total}
setCurPage={setCurPage}
current={curPage}
scroll={{ x: 2100, y: 600 }}
scroll={{ x: 2300 }}
/>
<Table

View File

@ -116,8 +116,9 @@
text-align: center;
}
.has-error .ant-form-explain, .has-error .ant-form-split {
.ant-form-explain, .ant-form-split {
position: absolute;
margin-top: -5px;
font-size: 12px;
color: #f5222d;
}

View File

@ -14,6 +14,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
const [submitConfirmValue, setSubmitConfirmValue] = useState(false);
const [expertRegisterValues, setExpertRegisterValues] = useState();
const [lastRegister, setLastRegister] = useState();
const [forbidden, setForbidden] = useState(false);
const [resumeList, setResumeList] = useState([]);
const [resumeIds, setResumeIds] = useState();
@ -59,6 +60,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
setFieldsValue(params);
setExpertRegisterValues(params);
setLastRegister(lastRegister);
setForbidden(lastRegister&&lastRegister.status===-1);
//
if (lastRegister.resume) {
@ -85,6 +87,8 @@ export default Form.create()(({ match, history, showNotification, form, current_
setHonorList(honors);
setHonorIds(lastRegister.honors);
}
}else{
setForbidden(false);
}
});
}, [reload]);
@ -244,7 +248,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
</p> */}
{
lastRegister && lastRegister.status === -1 && <p className='ckecking'>
lastRegister && lastRegister.status === -1 && <p className='checking'>
您的资料正在审核请稍候
</p>
}
@ -267,6 +271,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
{ max: 20, message: '长度不能超过20个字符' }],
<Input
placeholder="请输入您的姓名"
disabled={forbidden}
/>
)
}
@ -286,6 +291,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
}],
<Input
placeholder="请输入您的手机号码"
disabled={forbidden}
/>
)
}
@ -293,7 +299,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
helper('单位类别',
'workplaceType',
[{ required: true, message: "请选择单位类别" }],
<Select placeholder="请选择" dropdownClassName="expert_register">
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{unitType.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
@ -307,6 +313,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
{ max: 50, message: '长度不能超过50个字符' }],
<Input
placeholder="请输入您的专业职称"
disabled={forbidden}
/>
)
}
@ -314,7 +321,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
helper('专家类别',
'expertType',
[{ required: true, message: "请选择专家类别" }],
<Select placeholder="请选择" dropdownClassName="expert_register">
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{professionalType.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
@ -323,8 +330,8 @@ export default Form.create()(({ match, history, showNotification, form, current_
}
{
helper('评审领域2',
'"reviewAreaTwo', [],
<Select placeholder="请选择" dropdownClassName="expert_register">
'reviewAreaTwo', [],
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{reviewArea.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
@ -336,6 +343,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
'graduatedFrom', [{ max: 50, message: '长度不能超过50个字符' }],
<Input
placeholder="请输入您的毕业院校"
disabled={forbidden}
/>
)
}
@ -355,6 +363,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
}],
<Input
placeholder="请输入您的身份证号码"
disabled={forbidden}
/>
)
}
@ -363,6 +372,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
'bankName', [{ max: 50, message: '长度不能超过50个字符' }],
<Input
placeholder="请输入您的开户银行"
disabled={forbidden}
/>
)
}
@ -372,6 +382,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
size={100}
showNotification={showNotification}
fileList={resumeList}
disabled={forbidden}
/>
</Form.Item>
<Form.Item className="upload-form" label="学术成果">
@ -380,6 +391,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
size={100}
showNotification={showNotification}
fileList={achievementList}
disabled={forbidden}
/>
</Form.Item>
</div>
@ -388,7 +400,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
helper('最高学历',
'highestDegree',
[{ required: true, message: '请选择最高学历' }],
<Select placeholder="请选择" dropdownClassName="expert_register">
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{highestEducation.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
@ -401,6 +413,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
[{ required: true, message: "工作单位不能为空" }],
<Input
placeholder="请输入您的工作单位"
disabled={forbidden}
/>
)
}
@ -408,7 +421,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
helper('工作性质',
'workNature',
[{ required: true, message: "请选择工作性质" }],
<Select placeholder="请选择" dropdownClassName="expert_register">
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{natureOfWork.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
@ -419,7 +432,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
helper('职称职级',
'titleRank',
[{ required: true, message: "请选择职称职级" }],
<Select placeholder="请选择" dropdownClassName="expert_register">
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{positionLevel.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
@ -430,7 +443,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
helper('评审领域1',
'reviewAreaOne',
[{ required: true, message: "请选择评审领域" }],
<Select placeholder="请选择" dropdownClassName="expert_register">
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{reviewArea.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
@ -440,7 +453,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
{
helper('评审领域3',
'reviewAreaThree', [],
<Select placeholder="请选择" dropdownClassName="expert_register">
<Select disabled={forbidden} placeholder="请选择" dropdownClassName="expert_register">
{reviewArea.map(item => {
return <Option key={item.value} value={item.value}>{item.label}</Option>
})}
@ -452,6 +465,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
'major', [{ max: 50, message: '长度不能超过50个字符' }],
<Input
placeholder="请输入您的专业"
disabled={forbidden}
/>
)
}
@ -469,6 +483,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
}],
<Input
placeholder="请输入您的常用邮箱地址"
disabled={forbidden}
/>
)
}
@ -477,6 +492,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
'bankAccount', [{ max: 50, message: '长度不能超过50个字符' }],
<Input
placeholder="请输入您的银行卡号"
disabled={forbidden}
/>
)
}
@ -486,6 +502,7 @@ export default Form.create()(({ match, history, showNotification, form, current_
size={100}
showNotification={showNotification}
fileList={titleCertList}
disabled={forbidden}
/>
</Form.Item>
<Form.Item className="upload-form" label="荣誉称号">
@ -494,16 +511,17 @@ export default Form.create()(({ match, history, showNotification, form, current_
size={100}
showNotification={showNotification}
fileList={honorList}
disabled={forbidden}
/>
</Form.Item>
</div>
</Form>
<div className='buts'>
{/* <button className="but41_fill mr20" disabled={lastRegister && lastRegister.status === -1} onClick={() => expertRegisterSubmit(true)}></button>
<button className="but41_border mr20" disabled={lastRegister && lastRegister.status === -1} onClick={draft}>保存资料</button>
{/* <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={lastRegister && lastRegister.status === -1} onClick={() => expertRegisterSubmit(true)}>提交资料</Button>
<Button className="but41_border mr20" disabled={lastRegister && lastRegister.status === -1} onClick={draft}>保存资料</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

View File

@ -54,9 +54,12 @@
&.ml80{
margin-left: 120px;
}
.ant-form-item{
display: flex;
}
.ant-form-item-label {
width: 6em;
line-height: 2.5em;
line-height: 2.8em;
}
.ant-form-item-required::before{
position: relative;

View File

@ -1,13 +1,14 @@
import React, { useState, useMemo, useEffect } from "react";
import { Input, Select, Button, Form, DatePicker, Table, Pagination, Modal } from 'antd';
import React, { useState, useCallback, useMemo, useEffect } from "react";
import { Input, Select, Button, Form, Modal } from 'antd';
import Paginationtable from "../../components/paginationTable";
import { Confirm } from '../../components/ModalFun';
import { expertList, registerCheck } from "../api";
import './index.scss';
const { Search } = Input;
const { Search, TextArea } = Input;
function RegisterList({ showNotification }) {
function RegisterList({ showNotification, form }) {
const { getFieldDecorator, validateFields, setFieldsValue, } = form;
const [reload, setReload] = useState();
const [loading, setLoading] = useState(false);
const [curPage, setCurPage] = useState(1);
@ -16,11 +17,14 @@ function RegisterList({ showNotification }) {
const [searchInput, setSearchInput] = useState('');
const [pageSize, setPageSize] = useState(10);
const [visible, setVisible] = useState(false);
const [active, setActive] = useState({});
const columns = useMemo(() => {
return [{
title: '姓名',
dataIndex: 'expertName',
width: 55,
width: 75,
key: 'expertName',
fixed: 'left',
// render: (text, record) => {
@ -30,52 +34,59 @@ function RegisterList({ showNotification }) {
{
title: '最高学历',
dataIndex: 'highestDegree',
width: 100,
key: 'highestDegree',
fixed: 'left',
width: 80,
},
{
title: '手机号码',
dataIndex: 'phone',
width: 100,
key: 'phone',
fixed: 'left',
},
{
title: '工作单位',
dataIndex: 'workplace',
key: 'workplace',
width: 350,
},
{
title: '单位类别',
dataIndex: 'workplaceType',
width: 80,
},
{
title: '工作性质',
dataIndex: 'workNature',
width: 80,
},
{
title: '专业职称',
dataIndex: 'professionalTitle',
width: 100,
},
{
title: '职称职级',
dataIndex: 'professionalYears',
dataIndex: 'titleRank',
width: 80,
},
{
title: '专类别',
title: '专类别',
dataIndex: 'expertType',
width: 80,
},
{
title: '评审领域1',
dataIndex: 'reviewAreaOne',
width: 100,
},
{
title: '评审领域2',
dataIndex: 'reviewAreaTwo',
width: 100,
},
{
title: '评审领域3',
dataIndex: 'reviewAreaThree',
width: 100,
},
{
title: '毕业院校',
@ -88,23 +99,22 @@ function RegisterList({ showNotification }) {
{
title: '身份证号',
dataIndex: 'idNumber',
width: 170,
},
{
title: '邮箱地址',
dataIndex: 'expertEmail',
width: 200,
},
{
title: '开户银行',
dataIndex: 'bankName',
width: 110,
},
{
title: '银行账号',
dataIndex: 'bankAccount',
},
{
title: '个人简介',
dataIndex: 'resume',
},
// {
// title: '',
// dataIndex: 'titleCertificate',
@ -121,12 +131,12 @@ function RegisterList({ showNotification }) {
{
title: '操作',
dataIndex: 'action',
width: 80,
width: 120,
fixed: 'right',
render: (text, record) => {
return <React.Fragment>
<Button className="mr5 font-12" type="primary" size="small" onClick={() => { check(record, '1') }}>同意</Button>
<Button className="mr5 font-12" type="danger" size="small" onClick={() => { check(record, '2') }}>拒绝</Button>
<Button className="mr5 font-12" type="primary" size="small" onClick={() => { check(record, '1') }}>通过</Button>
<Button className="mr5 font-12" type="danger" size="small" onClick={() => { setVisible(true); setActive(record) }}>拒绝</Button>
</React.Fragment>
}
}
@ -155,9 +165,9 @@ function RegisterList({ showNotification }) {
}, [curPage, reload, searchInput]);
function check(record, checkStatus) {
Modal.confirm({
title: "警告",
content: checkStatus == '1' ? "确认通过吗?通过后该用户将成为专家库的一员" : "确认拒绝吗?拒绝后该用户此次不能成为专家",
Confirm({
title: "提醒",
content: checkStatus == '1' ? "您确定要审核通过吗?通过后该用户将成为专家库的一员" : "您确定要拒绝吗?拒绝后该用户此次不能成为专家",
okText: '确定',
cancelText: '取消',
onOk() {
@ -175,6 +185,42 @@ function RegisterList({ showNotification }) {
});
}
const helper = useCallback(
(name, rules, widget) => (
<Form.Item>
{getFieldDecorator(name, { rules, validateFirst: true })(widget)}
</Form.Item>
),
[]
);
function refuse() {
validateFields((err, values) => {
if (!err) {
registerCheck({
expertId: active.id,
isPassed: 2,
userId: active.userId,
reviewerAdvice:values.reviewerAdvice,
}).then(res => {
if (res.message === 'success') {
showNotification('操作成功!');
setReload(Math.random());
setFieldsValue({
reviewerAdvice:''
});
setVisible(false);
setActive({});
}
});
}
});
}
return (
<div className="expert-list centerbox">
<div className="center-screen" >
@ -182,7 +228,7 @@ function RegisterList({ showNotification }) {
<Search
maxLength={20}
style={{ width: "300px" }}
placeholder="请输入专家名或手机号"
placeholder="请输入专家名或手机号"
onSearch={(value) => { setSearchInput(value); setCurPage(1); }}
/>
</div>
@ -194,8 +240,27 @@ function RegisterList({ showNotification }) {
total={total}
setCurPage={setCurPage}
current={curPage}
scroll={{ x: 1600, y: 600 }}
scroll={{ x: 2300 }}
/>
<Modal
title="拒绝的原因"
visible={visible}
onOk={refuse}
onCancel={() => { setVisible(false) }}
className="form-edit-modal"
>
{helper(
"reviewerAdvice",
[{ required: visible, message: '请给出拒绝的原因' }],
<TextArea
placeholder="(必填)我想给点什么意见呢200字以内"
autoSize={{ minRows: 6 }}
className="applyText"
maxLength={200}
/>
)}
</Modal>
</div>)
}
export default RegisterList;
export default Form.create()(RegisterList);

View File

@ -9,10 +9,10 @@ function Review(){
return(
<div className="expert_review_system centerbox">
<div className="navigation">
<span>首页</span>&nbsp;&gt;&nbsp;<span>专家评审系统</span>
<Link to='/'>首页</Link>&nbsp;&gt;&nbsp;<span>专家评审系统</span>
</div>
<div className="notExpert center_flex">
<img src={system} />
<img src={system} alt="img not found"/>
<p className="ne_title">红山开源平台专家评审系统</p>
<p className="ne_tips">您尚未被入选本平台专家团队可提交专家资料进行注册申请加入专家团队</p>
<p className="ne_bar"></p>

View File

@ -242,7 +242,7 @@ function SelectExpert(props) {
{getFieldDecorator('searchInput', {})(<Search
maxLength={20}
style={{ width: "200px" }}
placeholder="请输入专家名或手机号"
placeholder="请输入专家名或手机号"
onSearch={(value) => { setSearchInput(value); setCurPage(1); }}
/>)}
</Form.Item>

View File

@ -224,6 +224,10 @@
text-align: center;
}
.text-left{
text-align: left;
}
@media screen and (max-width: 1200px) {
.centerbox {
width: 98%;