forgeplus-react/src/military/task/components/itemListMyTask/index.jsx

375 lines
14 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React, { useEffect, useState, useCallback, useMemo, Fragment } from 'react';
import { Form, Modal, Input, Pagination, Radio, Table } from 'antd';
import { Link } from "react-router-dom";
import Nodata from 'forge/Nodata';
import Loading from "src/Loading";
import Upload from 'military/components/Upload';
import ProofModal from '../proofModal';
import { publishModeArr, taskStatusAllArr, myPaperStatusArr } from '../../static';
import { signMethod, uploadAgreeRequire, downAgreement, unfollowTask } from "../../api";
import { httpUrl } from '../../fetch';
import '../../index.scss';
import './index.scss';
const statusArr = [];
for (const item of taskStatusAllArr) {
statusArr[item.dicItemCode] = item.dicItemName;
}
export default Form.create()((props) => {
const { form, list, curPage, total, changePage, taskCategoryValueArr, loading, publish, showNotification, reloadList, joinTask,current_user } = props;
const { getFieldDecorator, validateFields, setFieldsValue, } = form;
const [visibleProofs, setVisibleProofs] = useState(false);
const [taskId, setTaskId] = useState();
const [checkItem, setCheckItem] = useState({});
const [taskModeId, setTaskModeId] = useState('');
const pageSize = props.pageSize || 10;
const [visibleMethod, setVisibleMethod] = useState(false);
const [visibleAgree, setVisibleAgree] = useState(false);
const [fileList, setFileList] = useState(null);
const [dowloadTaskId, setDowloadTaskId] = useState('');
const [visibleDownload, setVisibleDownload] = useState(false);
const [uploadList, setUploadList] = useState([]);
useEffect(() => {
visibleDownload && downAgreement({ taskId: dowloadTaskId }).then(res => {
if (res && res.message === "success") {
setUploadList(res.data);
}
})
}, [visibleDownload])
function uploadProofs(item) {
setVisibleProofs(true);
setTaskId(item.id);
setTaskModeId(item.taskModeId);
}
function adviceModal(advice) {
Modal.info({
title: '审核意见',
content: advice
})
}
function signMethodModal(item) {
setVisibleMethod(true);
setTaskId(item.id);
}
function uploadAgree(item) {
// 清空文件列表
setFileList(null);
setFieldsValue({
files: ''
});
setVisibleAgree(true);
setTaskId(item.id);
setCheckItem(item);
}
function chooseMethod() {
validateFields((err, values) => {
if (!err) {
signMethod({
taskId,
method: values.method,
}).then(res => {
if (res && res.message === 'success') {
showNotification('选择协议签订方式成功');
setVisibleMethod(false);
setFieldsValue({
method: ''
});
reloadList();
} else {
showNotification((res && res.message) || '操作失败');
}
})
}
})
}
const helper = useCallback(
(name, rules, widget) => (
<Form.Item>
{getFieldDecorator(name, { rules, validateFirst: true, })(widget)}
</Form.Item>
), []);
function uploadAgreeList() {
validateFields((err, values) => {
if (!err) {
uploadAgreeRequire({
taskId,
params: {
files: values.files
}
}).then(res => {
if (res && res.message === "success") {
setFieldsValue({
files: ''
});
reloadList();
setVisibleAgree(false);
showNotification('上传协议成功');
} else {
showNotification((res && res.message) || '上传协议失败');
}
})
}
});
}
function uploadFunc(fileList, files) {
setFileList(fileList);
setFieldsValue({
files,
})
}
const columns = useMemo(() => {
return [
{
title: '成果物编号',
dataIndex: 'paperNumber',
},
{
title: '凭证文件',
dataIndex: 'fileName',
render: (text, record) => {
return <a className="line_1 color-grey3" onClick={() => { download(record.winnerContracts[0].id) }}> {record.winnerContracts && record.winnerContracts[0].fileName}</a >
}
},
{
title: '操作',
dataIndex: 'action',
render: (text, record) => {
return <a className="line_1 color-grey3" onClick={(e) => { download(record.winnerContracts[0].id) }}> 下载凭证</a >
}
}
];
}, []);
function download(id) {
window.open(httpUrl + '/busiAttachments/download/' + id);
}
function unfollow(id) {
unfollowTask({
userId: current_user.user_id,
watchableId: id,
watchableType: "MakerTask"
}).then(res => {
if (res.message == 'success') {
reloadList();
}
})
}
return (
<React.Fragment>
<ul className="df mt10 needs_condition_content_nav">
<li key={1} className="with35 edu-txt-left">任务</li>
<li key={2} className="with15">类型</li>
{publish && <li key={3} className="with10 draft_only">应征投稿</li>}
<li key={4} className="with10">金额</li>
<li key={5} className="flex1">任务状态</li>
<li key={6} className="with15">操作</li>
</ul>
{loading ? <Loading /> : <React.Fragment>
{
list.map(item => {
return (
<div key={item.id} className="needs_condition_content">
<p className="needs_condition_content_t color-dark-grey">
任务编号{item.number}
<i className="ml20 mr5 iconfont icon-shijian color-grey9 font-16"></i>
{item.createdAt}
</p>
<ul className="df">
<li key={1} className="mytask-title with35 edu-txt-left font-16 font-bd" >
<Link className="color-grey3 font-16 font-bd" to={`/task/taskDetail/${item.id}`}>{item.name}</Link>
{
joinTask ? <React.Fragment>
{item.myPaperStatus === 0 && <span className="list_status s_orange ml10">{myPaperStatusArr[item.myPaperStatus]}</span>}
{item.myPaperStatus === 1 && <span className="list_status s_grey ml10">{myPaperStatusArr[item.myPaperStatus]}</span>}
{item.myPaperStatus === 2 && <span className="list_status s_red ml10">{myPaperStatusArr[item.myPaperStatus]}</span>}
{item.status === 6 && (item.agreementSigning === 1 || (item.agreementSigning === 2 && item.contractStatus === 1)) && <span className="list_status s_orange ml10">待签订协议</span>}
{item.status !== 8 && item.delayTime < 0 && <span className="list_status list-yellow">延期中</span>}
{item.status !== 8 && item.cancelStatus === 1 && item.delayTime > 0 && <span className="list_status list-yellow">手动延期中</span>}
{item.status !== 8 && item.delayed && item.cancelStatus === 0 && item.delayTime > 0 && item.delayCount > 0 && <span className="list_status list-yellow">系统自动延期中</span>}
</React.Fragment> : <React.Fragment>
{item.status === 6 && (item.agreementSigning === 1 || (item.agreementSigning === 2 && item.auditing && item.auditing.pass === 1)) && <span className="list_status s_orange ml10">待签订协议</span>}
{item.status !== 8 && item.delayTime < 0 && <span className="list_status list-yellow">延期中</span>}
{item.status !== 8 && item.cancelStatus === 1 && item.delayTime > 0 && <span className="list_status list-yellow">手动延期中</span>}
{item.status !== 8 && item.delayed && item.cancelStatus === 0 && item.delayTime > 0 && item.delayCount > 0 && <span className="list_status list-yellow">系统自动延期中</span>}
</React.Fragment>
}
</li>
<li key={2} className="with15 flex-column">
<span className="line_1">{taskCategoryValueArr[item.categoryId]}</span>
<span className="line_1">{publishModeArr[item.publishMode]}</span>
</li>
{publish && <li key={3} className="with10 draft_only">{item.papersCount || 0}</li>}
<li key={4} className="with10 color-orange">{item.bounty}</li>
<li className="flex1">
<span>
<span className="line_1">{item.exceptClosedBoolean ? '已关闭' : statusArr[item.status]}</span>
</span>
</li>
<li key={5} className="with15 flex-column">
{
joinTask ? <Link className="line_1 color-grey3" to={`/task/taskDetail/${item.id}`}>查看详情</Link>
:
<React.Fragment>
{
item.status === 0 || item.status === 9 ?
<Link className="line_1 color-grey3" to={`/task/taskEdit/${item.id}`}>编辑草稿</Link> :
<Link className="line_1 color-grey3" to={`/task/taskDetail/${item.id}`}>查看详情</Link>
}
{
!item.expertReview && item.status === 4 && item.papersCount > 0 && (!item.isProofBoolean) && (!item.expertReview) &&
<a onClick={() => { uploadProofs(item) }} className="line_1 color-blue">上传佐证材料</a>
}
{
(!item.isProofBoolean) && (item.taskResultProof && item.taskResultProof.status === 0) &&
<a onClick={() => { adviceModal(item.advice) }} className="line_1 color-blue">佐证被拒原因</a>
}
{(item.status === 2 || item.status === 9) && <a onClick={() => { adviceModal(item.repairAdvice) }} className="line_1 color-blue">审核意见</a>}
{item.status === 6 && item.agreementSigning === 0 && <a className="line_1 color-blue" onClick={() => { signMethodModal(item) }}>选择协议签订方式</a>}
{item.status === 6 && item.agreementSigning === 2 && (item.contractStatus === null || item.contractStatus === 0) && <a className="line_1 color-blue" onClick={() => { uploadAgree(item) }}>上传委托协议</a>}
{item.status === 6 && item.agreementSigning === 2 && [1, 2].includes(item.contractStatus) && <a className="line_1 color-grey-9" >已上传委托协议</a>}
{item.status === 6 && item.agreementSigning === 1 && <span className="line_1 color-grey-9">已选择自主签订协议</span>}
{item.status === 7 && <span className="line_1 color-grey-9">{item.agreementSigning === 1 ? '待胜出者确认收款' : '待平台上传支付凭证'}</span>}
{item.status === 7 && <a className="line_1 color-blue" onClick={() => { setDowloadTaskId(item.id); setVisibleDownload(true); }}>下载协议签订凭证</a>}
</React.Fragment>
}
{item.contactName ? '' : <a className="line_1 color-grey-9" onClick={()=>{unfollow(item.id)}}>取消关注 </a>}
</li>
</ul>
</div>
)
})
}
{list.length > 0 ?
<div className="edu-txt-center mt20 mb20">
{total > pageSize && <Pagination
showQuickJumper
onChange={(page) => { changePage(page) }}
current={curPage}
total={total}
showTotal={total => `${total}`}
/>}
</div> :
<Nodata _html="暂无数据" />}
</React.Fragment>
}
{visibleProofs && <ProofModal
taskId={taskId}
taskModeId={taskModeId}
visible={visibleProofs}
changeVisible={setVisibleProofs}
showNotification={showNotification}
reloadList={reloadList}
/>}
<Modal
title="选择签订协议方式"
visible={visibleMethod}
onOk={chooseMethod}
onCancel={() => { setVisibleMethod(false) }}
className="form-edit-modal"
>
{
helper('method', [{ required: visibleMethod, message: '请选择签订协议的方式' }],
<Radio.Group className="vertical-radio">
<Radio value={2}>
<p>委托平台签订</p>
<p className="color-grey-9">以平台名义与评选胜出者签订协议需要经平台管理员审批需要发布方将奖励经费划归平台在审核通过后平台自动发送电子协议</p>
</Radio>
<Radio value={1}>
<p>自主签订</p>
<p className="color-grey-9">通过线下的方式以发布方名义与评选胜出者签订协议</p>
</Radio>
</Radio.Group>)
}
</Modal>
<Modal
title="上传委托协议"
visible={visibleAgree}
onOk={uploadAgreeList}
onCancel={() => { setVisibleAgree(false) }}
className="form-edit-modal"
>
{checkItem.auditing && <p className="color-orange mb10 task_tip">
审核意见{checkItem.auditing.message}
</p>}
<Form.Item className="upload-form" label="协议上传" required={true}>
<Upload
load={uploadFunc}
size={50}
showNotification={showNotification}
fileList={fileList}
/>
{/* 用一个隐藏的input实现上传文件的必填校验 */}
{getFieldDecorator('files', {
rules: [{ required: visibleAgree, message: "请上传文件" }],
validateFirst: true
})(<Input style={{ display: 'none' }} />)}
</Form.Item>
</Modal>
<Modal
title="下载协议签订凭证"
visible={visibleDownload}
onOk={() => { setVisibleDownload(false) }}
onCancel={() => { setVisibleDownload(false) }}
className="form-edit-modal"
>
<Table
loading={loading}
rowKey={(row) => row.id}
dataSource={uploadList}
columns={columns}
pagination={false}
/>
</Modal>
</React.Fragment>
)
}
)