增加管理员修改发布任务后继续修改任务的功能

This commit is contained in:
何童崇 2022-11-25 16:21:30 +08:00
parent 161adbe6c7
commit cadf447f45
12 changed files with 293 additions and 81 deletions

View File

@ -1,6 +1,6 @@
{ {
"presets": [ "presets": [
"es2015", "env",
"react", "react",
"stage-2" "stage-2"
], ],

View File

@ -52,14 +52,13 @@ function renderModal(props) {
if (type === 'delete') { if (type === 'delete') {
return <InitModal return <InitModal
title="删除" title="删除"
contentTitle="确定要删除吗?"
okText="确认删除" okText="确认删除"
{...props} {...props}
afterClose={destroy} afterClose={destroy}
contentTitle={<React.Fragment> contentTitle={<React.Fragment>
<i className="red-circle iconfont icon-shanchu_tc_icon mr3"></i> <i className="red-circle iconfont icon-shanchu_tc_icon mr3"></i>
{props.contentTitle} {props.contentTitle||'确定要删除吗?'}
</React.Fragment>} </React.Fragment>}
/> />
} else if (type === 'confirm') { } else if (type === 'confirm') {

View File

@ -48,6 +48,7 @@ function Uploads({ className, size, actionUrl, fileList, showNotification, load
function handleChange(info) { function handleChange(info) {
console.log(info);
if (info.file.status === 'uploading' || info.file.status === 'done' || info.file.status === 'removed') { if (info.file.status === 'uploading' || info.file.status === 'done' || info.file.status === 'removed') {
let fileList = info.fileList; let fileList = info.fileList;
setFiles(appendFileSizeToUploadFileAll(fileList)); setFiles(appendFileSizeToUploadFileAll(fileList));
@ -59,7 +60,8 @@ function Uploads({ className, size, actionUrl, fileList, showNotification, load
} }
backFiles(fileList); backFiles(fileList);
if (!info.file.response.data) { if (!info.file.response.data) {
info.file.response && showNotification(info.file.response.message) info.file.response && showNotification(info.file.response.message);
setFiles([]);
} }
} }
} }

View File

@ -183,6 +183,24 @@ export function updateTask(data) {
}); });
} }
//修改已发布创客任务内容
export function updatePublishedTask(data) {
return fetch({
url: '/api/tasks/backend/admin/updatePublishedTask',
method: 'PUT',
data: data
});
}
//重置延期关闭任务状态
export function resetTask(data) {
return fetch({
url: '/api/tasks/backend/admin/resetTask',
method: 'PUT',
data: data
});
}
//删除 //删除
export function deleteTask(id, isDelete) { export function deleteTask(id, isDelete) {
return fetch({ return fetch({
@ -268,7 +286,7 @@ export function updatePaper(data) {
}); });
} }
// 删除 // 删除成果
export function deletePaper(id) { export function deletePaper(id) {
return fetch({ return fetch({
url: `api/paper/${id}`, url: `api/paper/${id}`,

View File

@ -1,15 +1,19 @@
import React, { useCallback, useEffect, useState, useMemo } from 'react'; import React, { useCallback, useEffect, useState, useMemo } from 'react';
import { Input, Radio, Select, Button, Form, DatePicker, Table, Pagination, Modal } from 'antd'; import { Input, Radio, Select, Button, Form, DatePicker, Table, Pagination, Modal } from 'antd';
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { paperCheckStatusArr } from '../static'; import { Confirm } from '../../components/ModalFun';
import { readyCheckPapers, checkPaper, } from '../api'; import { paperCheckStatusArr,taskStatusAllArr } from '../static';
import { readyCheckPapers, checkPaper,deletePaper } from '../api';
import '../index.scss'; import '../index.scss';
import './index.scss'; import './index.scss';
const format = "YYYY-MM-DD HH:mm:ss"; const format = "YYYY-MM-DD HH:mm:ss";
const Option = Select.Option; const Option = Select.Option;
const TextArea = Input.TextArea; const TextArea = Input.TextArea;
const statusArr = [];
for (const item of taskStatusAllArr) {
statusArr[item.dicItemCode] = item.dicItemName;
}
const checkStatusArr = []; const checkStatusArr = [];
for (const item of paperCheckStatusArr) { for (const item of paperCheckStatusArr) {
checkStatusArr[item.dicItemCode] = item.dicItemName; checkStatusArr[item.dicItemCode] = item.dicItemName;
@ -62,7 +66,7 @@ export default Form.create()(({ current_user, form, showNotification, match, his
function onSearch() { function onSearch() {
let values = getFieldsValue(['checkStatus', 'endCreatedAt', 'startCreatedAt', 'parentId']); let values = getFieldsValue(['checkStatus', 'endCreatedAt', 'startCreatedAt', 'parentId','number']);
if (values.startCreatedAt) values.startCreatedAt = values.startCreatedAt.format(format); if (values.startCreatedAt) values.startCreatedAt = values.startCreatedAt.format(format);
if (values.endCreatedAt) values.endCreatedAt = values.endCreatedAt.format(format); if (values.endCreatedAt) values.endCreatedAt = values.endCreatedAt.format(format);
if (values.checkStatus === '0,1,2') values.checkStatus = ''; if (values.checkStatus === '0,1,2') values.checkStatus = '';
@ -73,11 +77,30 @@ export default Form.create()(({ current_user, form, showNotification, match, his
setFieldsValue({ setFieldsValue({
startCreatedAt: '', startCreatedAt: '',
endCreatedAt: '', endCreatedAt: '',
checkStatus: '0,1,2' checkStatus: '0,1,2',
number:''
}); });
setSearchObj({}); setSearchObj({});
} }
//
function deleteItem(id){
Confirm({
title: "警告",
content: "此操作将删除该用户提交的成果,用户可重新提交。确认删除?",
okText: '确定',
cancelText: '取消',
onOk() {
deletePaper(id).then(res => {
if (res.message === 'success') {
showNotification('操作成功!');
setReload(Math.random());
}
});
},
});
}
function checkPaperItem(paperId, passStatus) { function checkPaperItem(paperId, passStatus) {
validateFields((err, values) => { validateFields((err, values) => {
if (!err) { if (!err) {
@ -113,6 +136,10 @@ export default Form.create()(({ current_user, form, showNotification, match, his
return <div style={{ textAlign: 'center' }}>{index + 1}</div> return <div style={{ textAlign: 'center' }}>{index + 1}</div>
} }
}, },
{
title: '成果编号',
dataIndex: 'number',
},
{ {
title: '来源任务', title: '来源任务',
dataIndex: 'name', dataIndex: 'name',
@ -123,6 +150,13 @@ export default Form.create()(({ current_user, form, showNotification, match, his
</span > </span >
), ),
}, },
{
title: '任务状态',
dataIndex: 'task',
render: (text, record) => {
return text.status.exceptClosedBoolean ? '已关闭' : statusArr[text.status]
}
},
{ {
title: '评论/成果内容', title: '评论/成果内容',
dataIndex: 'content', dataIndex: 'content',
@ -157,7 +191,10 @@ export default Form.create()(({ current_user, form, showNotification, match, his
key: 'action', key: 'action',
render: (text, record) => ( render: (text, record) => (
<React.Fragment> <React.Fragment>
<Link className="line_1 color-grey3" to={`/task/taskDetail/${record.taskId}`}>查看</Link> <Link className="mr5 line_1 color-grey3" to={`/task/taskDetail/${record.taskId}`}>查看</Link>
{record.task&&record.task.status==3&&<a className="mr5 line_1 color-grey3" onClick={() => { deleteItem(record.id) }}>删除</a>}
{/* {record.task&&record.task.status==3&&<Button className=" font-12" type="danger" size="small" onClick={() => { deleteItem(record.id) }}>删除</Button>} */}
</React.Fragment> </React.Fragment>
), ),
}, },
@ -244,10 +281,18 @@ export default Form.create()(({ current_user, form, showNotification, match, his
</Select>, </Select>,
0 0
)} )}
{helper(
"成果编号",
"number",
[{ max: 20, message: '长度不能超过20个字符' }],
<Input
placeholder="请输入成果编号"
/>
)}
</div> </div>
<div className="center-right-but"> <div className="center-right-but">
{helper( {helper(
"发布时间:", "发布时间:",
"startCreatedAt", "startCreatedAt",
@ -269,6 +314,7 @@ export default Form.create()(({ current_user, form, showNotification, match, his
placeholder="请选择结束时间" placeholder="请选择结束时间"
/> />
)} )}
<Button className="mr10" type="primary" onClick={onSearch}>搜索</Button> <Button className="mr10" type="primary" onClick={onSearch}>搜索</Button>
<Button className="mr10" type="" onClick={clearSearch}>清除</Button> <Button className="mr10" type="" onClick={clearSearch}>清除</Button>

View File

@ -6,4 +6,16 @@
float: left; float: left;
} }
} }
.center-left-but{
width: 100%;
.ant-form-item{
width: 30%;
}
}
.center-right-but{
width: 100%;
}
.line_1{
display: inline-block;
}
} }

View File

@ -5,7 +5,7 @@ import { Link } from 'react-router-dom';
import moment from 'moment'; import moment from 'moment';
import { paperCheckStatusArr, publishModeArr, taskStatusAllArr, showUserModeArr, main_web_site_url } from '../static'; import { paperCheckStatusArr, publishModeArr, taskStatusAllArr, showUserModeArr, main_web_site_url } from '../static';
import { getTaskAdminList, changeShowUserMode, deleteTask, recommendTask, addExpertReview, publishExpertsAndRules,delayTask } from '../api'; import { getTaskAdminList, changeShowUserMode, deleteTask, recommendTask, addExpertReview, publishExpertsAndRules,delayTask ,resetTask} from '../api';
import '../index.scss'; import '../index.scss';
import './index.scss'; import './index.scss';
import { getRules, selectExpertList } from 'src/military/expert/api'; import { getRules, selectExpertList } from 'src/military/expert/api';
@ -45,6 +45,8 @@ export default Form.create()(({ form, showNotification, match, history, state })
const [expertReview, setExpertReview] = useState(''); const [expertReview, setExpertReview] = useState('');
const [downloading,setDownloading] = useState(false); const [downloading,setDownloading] = useState(false);
const [restartVisible,setRestartVisible]= useState(false); //modal
// //
const [lookRules, setLookRules] = useState(false); const [lookRules, setLookRules] = useState(false);
const [lookExperts, setLookExperts] = useState(false); const [lookExperts, setLookExperts] = useState(false);
@ -54,7 +56,7 @@ export default Form.create()(({ form, showNotification, match, history, state })
const [publicTaskId, setPublicTaskId] = useState(undefined); const [publicTaskId, setPublicTaskId] = useState(undefined);
// id // id
const [reviewTaskId, setReviewTaskId] = useState(undefined); const [reviewTaskId, setReviewTaskId] = useState(undefined);
const [visible, setVisible] = useState(false); const [visible, setVisible] = useState(false); //modal
const [checkedItem, setCheckedItem] = useState(''); const [checkedItem, setCheckedItem] = useState('');
useEffect(()=>{ useEffect(()=>{
@ -134,9 +136,13 @@ export default Form.create()(({ form, showNotification, match, history, state })
setSearchObj({}); setSearchObj({});
} }
function delayClick(item) { function delayClick(item,restart) {
setCheckedItem(item); setCheckedItem(item);
setVisible(true); if(restart){
setVisible(true);
}else{
setRestartVisible(true);
}
} }
const columns = useMemo(() => { const columns = useMemo(() => {
@ -217,7 +223,8 @@ export default Form.create()(({ form, showNotification, match, history, state })
const disabled = record.assignRuleAndExperts || !(record.status == 1 || record.status == 3); const disabled = record.assignRuleAndExperts || !(record.status == 1 || record.status == 3);
return( return(
<React.Fragment> <React.Fragment>
{[3,4,6,7].includes(record.status)&&<Button className="mr5 mb5 f89" onClick={() => { delayClick(record) }}>延期</Button>} {[3,4,6,7].includes(record.status)&&<Button className="mr5 mb5 f89" onClick={() => { delayClick(record,true) }}>延期</Button>}
{record.status==8&& record.exceptClosedBoolean&&<Button className="mr5 mb5 f89" onClick={() => { delayClick(record)}}>重启</Button>}
<Button className="mr5 mb5 f20" onClick={() => { deleteItem(record.id,isDelete == '0' ? '1':'0') }}>{isDelete == '0' ? '隐藏任务':'恢复任务'}</Button> <Button className="mr5 mb5 f20" onClick={() => { deleteItem(record.id,isDelete == '0' ? '1':'0') }}>{isDelete == '0' ? '隐藏任务':'恢复任务'}</Button>
<Button className="mr5 mb5 f89" onClick={() => { recommendItem(record.id, record.recommend ? '0' :'1') }}>{record.recommend ? '撤销推荐':'首页推荐'}</Button> <Button className="mr5 mb5 f89" onClick={() => { recommendItem(record.id, record.recommend ? '0' :'1') }}>{record.recommend ? '撤销推荐':'首页推荐'}</Button>
<Button className={`mr5 mb5 c2a3 ${text ? 'bor':'full'} ${disabled && 'disabled'}`} onClick={() => { changeExpertReviewStatus(text ? '-1':'1', record.id) }} disabled={disabled}>{text ? '取消专家评审':'加入专家评审'}</Button> <Button className={`mr5 mb5 c2a3 ${text ? 'bor':'full'} ${disabled && 'disabled'}`} onClick={() => { changeExpertReviewStatus(text ? '-1':'1', record.id) }} disabled={disabled}>{text ? '取消专家评审':'加入专家评审'}</Button>
@ -292,6 +299,8 @@ export default Form.create()(({ form, showNotification, match, history, state })
]; ];
}, []); }, []);
// function resetTaskModal
function recommendItem(id, recommend) { function recommendItem(id, recommend) {
Modal.confirm({ Modal.confirm({
title: "警告", title: "警告",
@ -519,10 +528,13 @@ export default Form.create()(({ form, showNotification, match, history, state })
return current && current < moment(checkedItem.eachPhaseEndTime).endOf('day'); return current && current < moment(checkedItem.eachPhaseEndTime).endOf('day');
} }
function disabledDate2(current) {
return current && current < moment();
}
function delayTime() { function delayTime() {
validateFields((err, values) => { validateFields(['delayedTo'],(err, values) => {
if (!err) { if (!err) {
console.log(values)
delayTask({ delayTask({
taskId: checkedItem.id, taskId: checkedItem.id,
params: { params: {
@ -539,7 +551,22 @@ export default Form.create()(({ form, showNotification, match, history, state })
}); });
} }
function restartTask(){
validateFields(["restartEndTime"],(err, values) => {
if (!err) {
resetTask({
taskId: checkedItem.id,
endTime: moment(values.restartEndTime).format(format)
}).then(res => {
if (res && res.message === 'success') {
showNotification('操作成功');
setReload(Math.random());
setRestartVisible(false);
}
});
}
});
}
return ( return (
<div className="task-manage-all "> <div className="task-manage-all ">
@ -755,6 +782,28 @@ export default Form.create()(({ form, showNotification, match, history, state })
)} )}
</Modal> </Modal>
<Modal
title="重启任务"
visible={restartVisible}
onOk={restartTask}
onCancel={() => { setRestartVisible(false) }}
// className="time-edit-modal"
destroyOnClose
>
<div>当前任务将恢复至<span className="imoptantText">{statusArr[checkedItem.currentStatus]}</span>请选择该阶段的截止日期</div>
{helper(
"",
"restartEndTime",
[{ required: true, message: "请选择时间" }],
<DatePicker
format={format}
placeholder="请选择时间"
disabledDate={disabledDate2}
/>,
moment(moment(new Date()).format(formatDelay)+' 23:59:59')
)}
</Modal>
<ExportTable downloading={downloading} setDownloading={setDownloading}/> <ExportTable downloading={downloading} setDownloading={setDownloading}/>
</div> </div>

View File

@ -237,4 +237,8 @@
.time-edit-modal .ant-modal-body{ .time-edit-modal .ant-modal-body{
width: 200px; width: 200px;
margin:0 auto; margin:0 auto;
}
.imoptantText{
color: $primary-color;
} }

View File

@ -9,7 +9,7 @@ import StatusNav from '../../components/statusNav';
import ItemListPaper from '../components/itemListPaper'; import ItemListPaper from '../components/itemListPaper';
import ProofModal from '../components/proofModal'; import ProofModal from '../components/proofModal';
import { getTaskDetail, getTaskCategory, getTaskPaper, makePublic, addPaper, getAgreement, agreement, checkAgreement, checkHavePaper, addExpertReview, followTask, unfollowTask } from '../api'; import { getTaskDetail, getTaskCategory, getTaskPaper, makePublic, addPaper, getAgreement, agreement, checkAgreement, checkHavePaper, addExpertReview, followTask, unfollowTask } from '../api';
import { taskModeIdArr, applyStatusArr, applyStatusAllArr, agreementContent, paperCheckTextArr, surplusTime} from '../static'; import { taskModeIdArr, applyStatusArr, applyStatusAllArr, agreementContent, paperCheckTextArr, surplusTime } from '../static';
import { httpUrl } from '../fetch'; import { httpUrl } from '../fetch';
import './index.scss'; import './index.scss';
import { getRules } from 'src/military/expert/api'; import { getRules } from 'src/military/expert/api';
@ -160,7 +160,7 @@ export default Form.create()(
// //
const process = useCallback((title, status, days) => { const process = useCallback((title, status, days) => {
let {surplus, let { surplus,
surplusTimetext, surplusTimetext,
delayTime delayTime
} = surplusTime(detailData); } = surplusTime(detailData);
@ -216,6 +216,9 @@ export default Form.create()(
let params = { let params = {
...values, ...values,
taskId: id taskId: id
};
if (!params.files){
delete params.files;
} }
setPaperUploadLoading(true); setPaperUploadLoading(true);
addPaper(params).then((res) => { addPaper(params).then((res) => {
@ -307,7 +310,7 @@ export default Form.create()(
Modal.confirm({ Modal.confirm({
content: "请先完成实名认证再提交需求申请,是否前往认证?", content: "请先完成实名认证再提交需求申请,是否前往认证?",
onOk() { onOk() {
window.location.href=`${mygetHelmetapi && mygetHelmetapi.main_web_site_url}/users/${current_user.login}/profiles`; window.location.href = `${mygetHelmetapi && mygetHelmetapi.main_web_site_url}/users/${current_user.login}/profiles`;
} }
}) })
} }
@ -404,6 +407,7 @@ export default Form.create()(
<Link to="/task">创客空间 &gt;</Link> <Link to="/task">创客空间 &gt;</Link>
<Link to="/task">任务大厅 &gt;</Link> <Link to="/task">任务大厅 &gt;</Link>
&nbsp;任务编号{detailData.number} &nbsp;任务编号{detailData.number}
</div> </div>
<div className="edu-back-white padding30"> <div className="edu-back-white padding30">
@ -420,19 +424,23 @@ export default Form.create()(
<span className="font-18 mr20 font-bd task-tit-text fl" >{detailData.name}</span> <span className="font-18 mr20 font-bd task-tit-text fl" >{detailData.name}</span>
<span className="task_tag">{taskCategoryValueArr[detailData.categoryId]}</span> <span className="task_tag">{taskCategoryValueArr[detailData.categoryId]}</span>
</span> </span>
<span className='detail_tag_btn '> <span>
{ {
detailData.canFollow ? <span className='detail_tag_btn_name' onClick={follow}> current_user && current_user.roles && current_user.roles.includes('管理员') && <Link class="adminEdit" to={`/task/taskEdit/${id}`}>编辑</Link>
<i className="iconfont icon-kongxing font-16 mr3"></i>
关注
</span> : <span className='detail_tag_btn_name' onClick={unfollow}>
<i className="iconfont icon-shixing color-orange font-16 mr3"></i>
取消关注
</span>
} }
<span className="detail_tag_btn_count">{detailData.followCount}</span> <span className='detail_tag_btn '>
{
detailData.canFollow ? <span className='detail_tag_btn_name' onClick={follow}>
<i className="iconfont icon-kongxing font-16 mr3"></i>
关注
</span> : <span className='detail_tag_btn_name' onClick={unfollow}>
<i className="iconfont icon-shixing color-orange font-16 mr3"></i>
取消关注
</span>
}
<span className="detail_tag_btn_count">{detailData.followCount}</span>
</span>
</span> </span>
</div> </div>
<div className="clearfix flex1"> <div className="clearfix flex1">
<ul className="fl"> <ul className="fl">
@ -440,7 +448,7 @@ export default Form.create()(
<li><span className="mr10 color-grey9">任务编号</span><span className="color-grey3">{detailData.number}</span></li> <li><span className="mr10 color-grey9">任务编号</span><span className="color-grey3">{detailData.number}</span></li>
<li><span className="mr10 color-grey9">发布时间</span><span className="color-grey3">{detailData.publishedAt || detailData.createdAt}</span></li> <li><span className="mr10 color-grey9">发布时间</span><span className="color-grey3">{detailData.publishedAt || detailData.createdAt}</span></li>
</ul> </ul>
<div className="fr edu-txt-right mt10"> <div className="fr edu-txt-right mt10">
<div className="color-orange font-bd lineh-30"><span className="font-18"></span><span className="font-28">{detailData.bounty}</span></div> <div className="color-orange font-bd lineh-30"><span className="font-18"></span><span className="font-28">{detailData.bounty}</span></div>
</div> </div>

View File

@ -11,6 +11,12 @@
} }
} }
.adminEdit{
float: left;
margin-right: 2em;
color: #4154f1;
}
.task-tit-text{ .task-tit-text{
line-height: 1.4; line-height: 1.4;
max-width: 800px; max-width: 800px;
@ -56,6 +62,7 @@
.head-navigation { .head-navigation {
position: absolute; position: absolute;
top: -2.3em; top: -2.3em;
width: 100%;
} }
.task-title{ .task-title{

View File

@ -6,30 +6,27 @@ import ReactWEditor from 'wangeditor-for-react';
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import Upload from '../../components/Upload'; import Upload from '../../components/Upload';
import { httpUrl } from '../fetch'; import { httpUrl } from '../fetch';
import { getTaskDetail, addTask, updateTask, getTaskCategory, getCompanyInfo } from '../api'; import { getTaskDetail, addTask, updateTask, updatePublishedTask, getTaskCategory, getCompanyInfo } from '../api';
import { formItemLayout, formModalLayout } from '../static'; import { formItemLayout, formModalLayout } from '../static';
import { editorConfig } from '../../components/config'; import { editorConfig } from '../../components/config';
import CodeModal from './codeModal'; import CodeModal from './codeModal';
import './index.scss'; import './index.scss';
import { Confirm } from '../../components/ModalFun';
const { info } = Modal; const { info } = Modal;
function getSomeDayAfter(nDay) {
return moment(new Date().setDate(new Date().getDate() + nDay)).format('YYYY-MM-DD HH:mm');
}
export default Form.create()(forwardRef(({ current_user, form, showNotification, match, history }, ref) => { export default Form.create()(forwardRef(({ current_user, form, showNotification, match, history }, ref) => {
console.log(current_user);
const [taskCategoryArr, setTaskCategoryArr] = useState([]); const [taskCategoryArr, setTaskCategoryArr] = useState([]);
const [fileList, setFileList] = useState(null); const [fileList, setFileList] = useState(null);
const [publishMode, setPublishMode] = useState('0'); const [publishMode, setPublishMode] = useState('0'); //
const [categoryId, setCategoryId] = useState('7'); const [categoryId, setCategoryId] = useState('7'); //
const [descriptionHtml, setDescriptionHtml] = useState(''); const [descriptionHtml, setDescriptionHtml] = useState(''); //
const [enterpriseName, setEnterpriseName] = useState(''); const [enterpriseName, setEnterpriseName] = useState(''); //
const [displayTime, setDisplayTime] = useState(() => { const [displayTime, setDisplayTime] = useState(() => {
return { return {
collectingTime: getSomeDayAfter(30), collectingTime: getSomeDayAfter(30),
@ -38,18 +35,32 @@ export default Form.create()(forwardRef(({ current_user, form, showNotification,
signingTime: getSomeDayAfter(30 + 15 + 7 + 15), signingTime: getSomeDayAfter(30 + 15 + 7 + 15),
payingTime: getSomeDayAfter(30 + 15 + 7 + 15 + 15) payingTime: getSomeDayAfter(30 + 15 + 7 + 15 + 15)
} }
}); }); //
const [visible, setVisible] = useState(false); const [visible, setVisible] = useState(false);
const [num, setNum] = useState(0) // const [num, setNum] = useState(0) //
const [isSend, setIsSend] = useState(false) // const [isSend, setIsSend] = useState(false) //
const [published, setPublished] = useState(false); //
const [status, setStatus] = useState(0); //
const [publishedAt, setPublishedAt] = useState();
const id = match.params.taskId; const id = match.params.taskId;
const { getFieldDecorator, validateFields, setFieldsValue, getFieldsValue } = form; const { getFieldDecorator, validateFields, setFieldsValue, getFieldsValue } = form;
// id // id
useEffect(() => { useEffect(() => {
if (id) { if (id) {
getTaskDetail(id).then(data => { getTaskDetail(id).then(data => {
console.log('data');
console.log(data.status);
//
if (data.status > 2 && !(current_user && current_user.admin)) {
history.go(-1);
}
if (data.status > 2) {
setPublished(true);
setStatus(data.status);
setPublishedAt(data.publishedAt || data.createdAt)
}
let formValue = { let formValue = {
name: data.name, name: data.name,
contactName: data.contactName, contactName: data.contactName,
@ -67,6 +78,7 @@ export default Form.create()(forwardRef(({ current_user, form, showNotification,
makePublicDays: data.makePublicDays, makePublicDays: data.makePublicDays,
signingDays: data.signingDays, signingDays: data.signingDays,
payingDays: data.payingDays, payingDays: data.payingDays,
expertReview: data.expertReview&&'checked'
}; };
if (data.tasksAttachments && data.tasksAttachments.length) { if (data.tasksAttachments && data.tasksAttachments.length) {
for (const item of data.tasksAttachments) { for (const item of data.tasksAttachments) {
@ -82,11 +94,13 @@ export default Form.create()(forwardRef(({ current_user, form, showNotification,
setDescriptionHtml(data.description); setDescriptionHtml(data.description);
setPublishMode(data.publishMode + ''); setPublishMode(data.publishMode + '');
let collectingTime = getSomeDayAfter(data.collectingDays); let publishedAt = (data.publishedAt || data.createdAt);
let choosingTime = getSomeDayAfter(data.collectingDays + data.choosingDays);
let makePublicTime = getSomeDayAfter(data.collectingDays + data.choosingDays + data.makePublicDays); let collectingTime = getSomeDayAfter(data.collectingDays, publishedAt);
let signingTime = getSomeDayAfter(data.collectingDays + data.choosingDays + data.makePublicDays + data.signingDays); let choosingTime = getSomeDayAfter(data.collectingDays + data.choosingDays, publishedAt);
let payingTime = getSomeDayAfter(data.collectingDays + data.choosingDays + data.makePublicDays + data.signingDays + data.payingDays); let makePublicTime = getSomeDayAfter(data.collectingDays + data.choosingDays + data.makePublicDays, publishedAt);
let signingTime = getSomeDayAfter(data.collectingDays + data.choosingDays + data.makePublicDays + data.signingDays, publishedAt);
let payingTime = getSomeDayAfter(data.collectingDays + data.choosingDays + data.makePublicDays + data.signingDays + data.payingDays, publishedAt);
setDisplayTime({ collectingTime, choosingTime, makePublicTime, signingTime, payingTime }); setDisplayTime({ collectingTime, choosingTime, makePublicTime, signingTime, payingTime });
}); });
} else { } else {
@ -153,6 +167,12 @@ export default Form.create()(forwardRef(({ current_user, form, showNotification,
}; };
}, [isSend]); }, [isSend]);
//
function getSomeDayAfter(nDay, publishedAt) {
return publishedAt ? moment(new Date(publishedAt).setDate((publishedAt ? new Date(publishedAt) : new Date()).getDate() + nDay)).format('YYYY-MM-DD HH:mm') :
moment(new Date().setDate(new Date().getDate() + nDay)).format('YYYY-MM-DD HH:mm');
}
// //
function UploadFunc(fileList) { function UploadFunc(fileList) {
setFileList(fileList); setFileList(fileList);
@ -177,16 +197,19 @@ export default Form.create()(forwardRef(({ current_user, form, showNotification,
), []); ), []);
const helperNoLabel = useCallback( const helperNoLabel = useCallback(
(title, name, rules, widget, displayTime) => ( (title, name, rules, widget, displayTime) => {
<div className="timing_task" key={name}> let active = (status == 3 && title == '成果提交') || (status == 4 && title == '成果评选') || (status == 5 && title == '结果公示') || (status == 6 && title == '任务协议签订');
<div className="mbt10 color-grey-9 lineh-35"><span className="inline-span">{title}</span></div> return (
<Form.Item className="no-label"> <div className="timing_task" key={name}>
{getFieldDecorator(name, { rules, validateFirst: true, })(widget)} <div className="mbt10 color-grey-9 lineh-35"><span className={`inline-span ${active ? 'active' : ''}`}>{title}</span></div>
</Form.Item> <Form.Item className="no-label">
<span className="days-word color-grey-9 "></span> {getFieldDecorator(name, { rules, validateFirst: true, })(widget)}
{publishMode == '0' && <p className="display-time">{displayTime}</p>} </Form.Item>
</div> <span className="days-word color-grey-9 "></span>
), [publishMode]); {publishMode == '0' && <p className="display-time">{displayTime}</p>}
</div>
)
}, [publishMode, status]);
// //
const publishDeal = useCallback((status, publishMode, res) => { const publishDeal = useCallback((status, publishMode, res) => {
@ -194,6 +217,9 @@ export default Form.create()(forwardRef(({ current_user, form, showNotification,
if (!status) { if (!status) {
history.push("/task/myTask?published=false"); history.push("/task/myTask?published=false");
showNotification("任务保存成功!"); showNotification("任务保存成功!");
} else if (current_user.admin && status>2) {
history.push(`/task/taskDetail/${id}`);
showNotification("任务修改成功!");
} else if (current_user.admin) { } else if (current_user.admin) {
history.push("/task"); history.push("/task");
showNotification("任务发布成功!"); showNotification("任务发布成功!");
@ -229,7 +255,23 @@ export default Form.create()(forwardRef(({ current_user, form, showNotification,
showNotification("任务天数总和不得超过180天"); showNotification("任务天数总和不得超过180天");
return; return;
} }
if (id) { if (status > 2) {
updatePublishedTask({
id: id,
bounty: values.bounty,
choosingDays: values.choosingDays,
collectingDays: values.collectingDays,
currentUserId: current_user.user_id,
description: values.description,
makePublicDays: values.makePublicDays,
name: values.name,
payingDays: values.payingDays,
signingDays: values.signingDays,
uploadFileNumbers:values.uploadFileNumbers
}).then(res => {
publishDeal(status, publishMode, res);
});
} else if (id) {
// //
params.id = id; params.id = id;
updateTask(params).then(res => { updateTask(params).then(res => {
@ -251,21 +293,36 @@ export default Form.create()(forwardRef(({ current_user, form, showNotification,
} }
let values = getFieldsValue(); let values = getFieldsValue();
values[field] = v; values[field] = v;
let collectingTime = getSomeDayAfter(values.collectingDays); let collectingTime = getSomeDayAfter(values.collectingDays, publishedAt);
let choosingTime = getSomeDayAfter(values.collectingDays + values.choosingDays); let choosingTime = getSomeDayAfter(values.collectingDays + values.choosingDays, publishedAt);
let makePublicTime = getSomeDayAfter(values.collectingDays + values.choosingDays + values.makePublicDays); let makePublicTime = getSomeDayAfter(values.collectingDays + values.choosingDays + values.makePublicDays, publishedAt);
let signingTime = getSomeDayAfter(values.collectingDays + values.choosingDays + values.makePublicDays + values.signingDays); let signingTime = getSomeDayAfter(values.collectingDays + values.choosingDays + values.makePublicDays + values.signingDays, publishedAt);
let payingTime = getSomeDayAfter(values.collectingDays + values.choosingDays + values.makePublicDays + values.signingDays + values.payingDays); let payingTime = getSomeDayAfter(values.collectingDays + values.choosingDays + values.makePublicDays + values.signingDays + values.payingDays, publishedAt);
setDisplayTime({ collectingTime, choosingTime, makePublicTime, signingTime, payingTime }); setDisplayTime({ collectingTime, choosingTime, makePublicTime, signingTime, payingTime });
} }
function changeContactPhone(e){ function changeContactPhone(e) {
console.log(e); console.log(e);
setFieldsValue({ setFieldsValue({
contactPhone:e contactPhone: e
}) })
} }
function editPublished() {
Confirm({
title: '提醒',
content: <div>
<p>确认更改该创客任务内容</p>
</div>,
onOk: () => {
saveItem(status)
},
onCancel:()=>{
history.push(`/task/taskDetail/${id}`);
}
});
}
return ( return (
<div className="centerbox"> <div className="centerbox">
<div className="head-navigation"> <div className="head-navigation">
@ -289,6 +346,7 @@ export default Form.create()(forwardRef(({ current_user, form, showNotification,
"contactName", "contactName",
[{ required: true, message: "请输入联系人" }], [{ required: true, message: "请输入联系人" }],
<Input <Input
disabled={published}
className="contact-input" className="contact-input"
placeholder="请输入联系人" placeholder="请输入联系人"
/> />
@ -364,8 +422,9 @@ export default Form.create()(forwardRef(({ current_user, form, showNotification,
<Form.Item > <Form.Item >
{getFieldDecorator('expertReview', { {getFieldDecorator('expertReview', {
validateFirst: true, validateFirst: true,
initialValue: false defaultValue:true,
})(<Checkbox className="color-grey-3 font-bd mb10 font-18">是否增加专家评审流程添加后可联系管理员发布此专家评审任务</Checkbox>)} valuePropName:"checked"
})(<Checkbox className="color-grey-3" disabled={published}>是否增加专家评审流程添加后可联系管理员发布此专家评审任务</Checkbox>)}
</Form.Item> </Form.Item>
<Form.Item > <Form.Item >
@ -404,7 +463,7 @@ export default Form.create()(forwardRef(({ current_user, form, showNotification,
"悬赏模式:", "悬赏模式:",
"taskModeId", "taskModeId",
[{ required: true, message: "请选择悬赏模式" }], [{ required: true, message: "请选择悬赏模式" }],
<Radio.Group> <Radio.Group disabled={published}>
<Radio value={1}>单人悬赏只设置一个中标者</Radio> <Radio value={1}>单人悬赏只设置一个中标者</Radio>
<Radio value={2}>多人悬赏设置多分中标分享赏金</Radio> <Radio value={2}>多人悬赏设置多分中标分享赏金</Radio>
<Radio value={3}>计件悬赏合格一稿支付一稿稿件数量2</Radio> <Radio value={3}>计件悬赏合格一稿支付一稿稿件数量2</Radio>
@ -415,7 +474,7 @@ export default Form.create()(forwardRef(({ current_user, form, showNotification,
"征集方式:", "征集方式:",
"collectionMode", "collectionMode",
[{ required: true, message: "请选择征集方式" }], [{ required: true, message: "请选择征集方式" }],
<Radio.Group> <Radio.Group disabled={published}>
<Radio value={1}>创意征集应征者以开放讨论的形式参与</Radio> <Radio value={1}>创意征集应征者以开放讨论的形式参与</Radio>
<Radio value={0}>物化成果征集应征者以各自提交成果物的形式参与</Radio> <Radio value={0}>物化成果征集应征者以各自提交成果物的形式参与</Radio>
</Radio.Group> </Radio.Group>
@ -425,7 +484,7 @@ export default Form.create()(forwardRef(({ current_user, form, showNotification,
"发布方式:", "发布方式:",
"publishMode", "publishMode",
[{ required: true, message: "请选择发布方式" }], [{ required: true, message: "请选择发布方式" }],
<Radio.Group onChange={(e) => { setPublishMode(e.target.value) }}> <Radio.Group disabled={published} onChange={(e) => { setPublishMode(e.target.value) }}>
<Radio value={'0'}>自主提交方式由发布方自行支付赏金一键自助发布</Radio> <Radio value={'0'}>自主提交方式由发布方自行支付赏金一键自助发布</Radio>
<Radio value={'1'}>统筹任务由平台支付赏金需经过平台遴选方能发布</Radio> <Radio value={'1'}>统筹任务由平台支付赏金需经过平台遴选方能发布</Radio>
</Radio.Group> </Radio.Group>
@ -447,6 +506,7 @@ export default Form.create()(forwardRef(({ current_user, form, showNotification,
onChange={(v) => { changeDate(v, 'collectingDays') }} onChange={(v) => { changeDate(v, 'collectingDays') }}
min={1} min={1}
max={180} max={180}
disabled={status > 2}
/>, />,
displayTime.collectingTime displayTime.collectingTime
)} )}
@ -462,6 +522,7 @@ export default Form.create()(forwardRef(({ current_user, form, showNotification,
onChange={(v) => { changeDate(v, 'choosingDays') }} onChange={(v) => { changeDate(v, 'choosingDays') }}
min={1} min={1}
max={180} max={180}
disabled={status > 3}
/>, />,
displayTime.choosingTime displayTime.choosingTime
)} )}
@ -475,6 +536,7 @@ export default Form.create()(forwardRef(({ current_user, form, showNotification,
onChange={(v) => { changeDate(v, 'makePublicDays') }} onChange={(v) => { changeDate(v, 'makePublicDays') }}
min={1} min={1}
max={180} max={180}
disabled={status > 4}
/>, />,
displayTime.makePublicTime displayTime.makePublicTime
)} )}
@ -520,12 +582,17 @@ export default Form.create()(forwardRef(({ current_user, form, showNotification,
</div> </div>
</div> </div>
<Button className="mr20" type={"primary"} onClick={() => { saveItem(1) }}>发布</Button> {
<Button className="mr20" type={"primary"} onClick={() => { saveItem(0) }}>保存</Button> published ? <Button className="mr20" type={"primary"} onClick={editPublished}>确认修改</Button> : <div>
<Button onClick={() => { history.go(-1) }}>取消</Button> <Button className="mr20" type={"primary"} onClick={() => { saveItem(1) }}>发布</Button>
<Button className="mr20" type={"primary"} onClick={() => { saveItem(0) }}>保存</Button>
<Button onClick={() => { history.go(-1) }}>取消</Button>
</div>
}
<CodeModal visible={visible} setVisible={setVisible} changeContactPhone={changeContactPhone} />
<CodeModal visible={visible} setVisible={setVisible} changeContactPhone={changeContactPhone}/>
</div> </div>
) )
}) })

View File

@ -37,7 +37,7 @@
line-height: 28px; line-height: 28px;
padding: 0px 12px; padding: 0px 12px;
color: #656565; color: #656565;
margin: 0px 10px 10px; margin: 0px 10px 10px !important;
cursor: pointer; cursor: pointer;
} }