forked from Gitlink/forgeplus-react
Merge pull request '修改创客延期和项目侧边栏' (#100) from tongChong/forgeplus-react:dev-jk-maker into pre_dev_military
This commit is contained in:
commit
0e0c13f1a4
|
@ -1,6 +1,6 @@
|
|||
import React, { Component } from 'react';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { Menu, Input , Spin, Pagination , Popover } from 'antd';
|
||||
import { Menu, Input , Spin, Pagination , Popover, Affix, } from 'antd';
|
||||
import '../css/index.scss'
|
||||
import './list.css';
|
||||
import './Index.scss';
|
||||
|
@ -74,6 +74,12 @@ class Index extends Component {
|
|||
getListData = (page,search, sort,category_id,language_id) => {
|
||||
const { current_user } = this.props;
|
||||
const url = `/projects.json`;
|
||||
if(category_id==0){
|
||||
category_id=undefined;
|
||||
}
|
||||
if(language_id==0){
|
||||
language_id=undefined;
|
||||
}
|
||||
axios.get(url, {
|
||||
params: {
|
||||
user_id: current_user && current_user.user_id,
|
||||
|
@ -100,7 +106,11 @@ class Index extends Component {
|
|||
const url = `/projects/group_type_list.json`;
|
||||
axios.get(url).then((result) => {
|
||||
if (result && result.data) {
|
||||
this.setTypeList(result.data, undefined)
|
||||
result.data.unshift({
|
||||
name:'全部语言',
|
||||
id:0,
|
||||
});
|
||||
this.setTypeList(result.data, 0)
|
||||
}
|
||||
}).catch((error) => { })
|
||||
}
|
||||
|
@ -109,7 +119,7 @@ class Index extends Component {
|
|||
this.setState({
|
||||
typeList: list.map((item, key) => {
|
||||
return (
|
||||
<li key={key} className={active_type && parseInt(active_type) === item.id ? 'active' : ''} onClick={() => this.changeType(`${item.id}`, list)}>
|
||||
<li key={key} className={ parseInt(active_type) === item.id ? 'active' : ''} onClick={() => this.changeType(`${item.id}`, list)}>
|
||||
<p>
|
||||
<span className="font-16">{item.name}</span>
|
||||
<span className="color-blue">{item.projects_count}</span>
|
||||
|
@ -120,14 +130,14 @@ class Index extends Component {
|
|||
})
|
||||
}
|
||||
|
||||
// 切换类型
|
||||
// 切换语言类型
|
||||
changeType = (id, list) => {
|
||||
this.setState({
|
||||
isSpin: true,
|
||||
languageId: id,
|
||||
search: undefined
|
||||
})
|
||||
this.setTypeList(list, id)
|
||||
this.setTypeList(list, id);
|
||||
const { page,sort, category_id} = this.state;
|
||||
this.getListData(page,undefined, sort,category_id , id);
|
||||
}
|
||||
|
@ -138,7 +148,11 @@ class Index extends Component {
|
|||
|
||||
axios.get(url).then((result) => {
|
||||
if (result && result.data) {
|
||||
this.setCategoryList(result.data, undefined);
|
||||
result.data.unshift({
|
||||
name:'全部类别',
|
||||
id:0,
|
||||
});
|
||||
this.setCategoryList(result.data, 0);
|
||||
}
|
||||
}).catch((error) => { })
|
||||
}
|
||||
|
@ -147,7 +161,7 @@ class Index extends Component {
|
|||
this.setState({
|
||||
categoryList: list.map((item, key) => {
|
||||
return (
|
||||
<li key={key} className={active_id && parseInt(active_id) === item.id ? 'active' : ''} onClick={() => this.changeCategory(`${item.id}`, list)}>
|
||||
<li key={key} className={ parseInt(active_id) === item.id ? 'active' : ''} onClick={() => this.changeCategory(`${item.id}`, list)}>
|
||||
<p>
|
||||
<span className="font-16">{item.name}</span>
|
||||
<span className="color-blue">{item.projects_count}</span>
|
||||
|
@ -274,7 +288,9 @@ class Index extends Component {
|
|||
}
|
||||
*/}
|
||||
<div className="ProjectListIndex">
|
||||
<div className="list-left">
|
||||
|
||||
<Affix className="affix-list-left" offsetTop={90}>
|
||||
<div className="affix-list-content">
|
||||
<ul className="list-l-Menu">
|
||||
<li className="MenuTitle" onClick={() => {this.getType();this.changeType(undefined, this.state.typeList);}}>
|
||||
<span><i className="iconfont icon-bianchengyuyan color-grey-9 font-15 mr5"></i>
|
||||
|
@ -287,6 +303,8 @@ class Index extends Component {
|
|||
<div className="list-affix">{categoryList}</div>
|
||||
</ul>
|
||||
</div>
|
||||
</Affix>
|
||||
|
||||
<div className="list-right boxShandow radius-2" style={{padding:0}}>
|
||||
<Spin spinning={isSpin}>
|
||||
<div className="list-r-operation">
|
||||
|
|
|
@ -18,6 +18,14 @@
|
|||
box-sizing: border-box;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.affix-list-left{
|
||||
width: 26%;
|
||||
box-sizing: border-box;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.affix-list-content{
|
||||
padding-right:20px;
|
||||
}
|
||||
.list-right{
|
||||
width:74%;
|
||||
background: #fff;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import React, { useEffect, useState } from 'react';
|
||||
import classNames from 'classnames';
|
||||
import { Pagination, Icon, Input } from 'antd';
|
||||
import { Pagination, Icon, Input, Affix, } from 'antd';
|
||||
import ItemList from '../components/itemList';
|
||||
import Nodata from '../../../forge/Nodata';
|
||||
import Loading from "../../../Loading";
|
||||
|
@ -239,6 +239,8 @@ export default (props) => {
|
|||
<span>公告</span>
|
||||
</div> */}
|
||||
<div className="body">
|
||||
<Affix className="affix-list-left" offsetTop={90}>
|
||||
{/* <div className="affix-list-content"> */}
|
||||
<div className="navigationMenu">
|
||||
<ul className="menu-ul">
|
||||
<li className="MenuTitle" onClick={()=>click('0')}><span><i className="iconfont icon-xiangmugonggao"></i>项目公告</span></li>
|
||||
|
@ -253,6 +255,7 @@ export default (props) => {
|
|||
<li className={tab === '6' ? "active" : ""} onClick={()=>click('6')}><span>成交公告</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</Affix>
|
||||
<div className="notice-center-content">
|
||||
{sortNav()}
|
||||
{loading ? <Loading /> : content()}
|
||||
|
|
|
@ -13,13 +13,9 @@ export default Form.create()((props) => {
|
|||
const { form, list, curPage, total, changePage, loading, showNotification, reloadList } = props;
|
||||
const { getFieldDecorator, validateFields, setFieldsValue } = form;
|
||||
const [checkedItem, setCheckedItem] = useState({});
|
||||
const [page, setPage] = useState(1);
|
||||
const [visible, setVisible] = useState(false);
|
||||
const pageSize = props.pageSize || 10;
|
||||
|
||||
useEffect(() => {
|
||||
changePage(page);
|
||||
}, [page]);
|
||||
|
||||
|
||||
function refuseClick(item) {
|
||||
|
@ -175,7 +171,7 @@ export default Form.create()((props) => {
|
|||
<div className="edu-txt-center mt20 mb20">
|
||||
{total > pageSize && <Pagination
|
||||
showQuickJumper
|
||||
onChange={(page) => { setPage(page) }}
|
||||
onChange={(page) => { changePage(page) }}
|
||||
current={curPage}
|
||||
total={total}
|
||||
showTotal={total => `共 ${total} 条`}
|
||||
|
|
|
@ -19,7 +19,6 @@ export default Form.create()((props) => {
|
|||
const { form, list, curPage, total, changePage, taskCategoryValueArr, loading, publish, showNotification, reloadList, joinTask } = props;
|
||||
const { getFieldDecorator, validateFields, setFieldsValue, } = form;
|
||||
|
||||
const [page, setPage] = useState(1);
|
||||
const [visibleProofs, setVisibleProofs] = useState(false);
|
||||
const [taskId, setTaskId] = useState();
|
||||
const [checkItem, setCheckItem] = useState({});
|
||||
|
@ -35,9 +34,6 @@ export default Form.create()((props) => {
|
|||
const [uploadList, setUploadList] = useState([]);
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
changePage(page);
|
||||
}, [page]);
|
||||
|
||||
useEffect(() => {
|
||||
visibleDownload && downAgreement({ taskId: dowloadTaskId }).then(res => {
|
||||
|
@ -191,8 +187,17 @@ export default Form.create()((props) => {
|
|||
{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>
|
||||
|
@ -206,7 +211,7 @@ export default Form.create()((props) => {
|
|||
<li key={4} className="with10 color-orange">¥{item.bounty}</li>
|
||||
<li className="flex1">
|
||||
<span>
|
||||
<span className="line_1">{statusArr[item.status]}</span>
|
||||
<span className="line_1">{item.exceptClosedBoolean ? '已关闭' : statusArr[item.status]}</span>
|
||||
</span>
|
||||
</li>
|
||||
<li key={5} className="with15 flex-column">
|
||||
|
@ -221,7 +226,7 @@ export default Form.create()((props) => {
|
|||
}
|
||||
|
||||
{
|
||||
item.status === 4 && item.papersCount > 0 && (!item.isProofBoolean) && (!item.isProofBoolean)&&
|
||||
item.status === 4 && item.papersCount > 0 && (!item.isProofBoolean) && (!item.isProofBoolean) &&
|
||||
<a onClick={() => { uploadProofs(item) }} className="line_1 color-blue">上传佐证材料</a>
|
||||
}
|
||||
|
||||
|
@ -259,7 +264,7 @@ export default Form.create()((props) => {
|
|||
<div className="edu-txt-center mt20 mb20">
|
||||
{total > pageSize && <Pagination
|
||||
showQuickJumper
|
||||
onChange={(page) => { setPage(page) }}
|
||||
onChange={(page) => { changePage(page) }}
|
||||
current={curPage}
|
||||
total={total}
|
||||
showTotal={total => `共 ${total} 条`}
|
||||
|
|
|
@ -14,12 +14,8 @@ for (const item of taskStatusAllArr) {
|
|||
const classArr = ['', 'list-done', 'list-error', 'list-red', 'list-yellow', 'list-pay', '', 'list-pay', 'list-gray',];
|
||||
export default (props) => {
|
||||
const { list, itemClick, curPage, total, changePage, loading } = props;
|
||||
const [page, setPage] = useState(1);
|
||||
const pageSize = props.pageSize || 10;
|
||||
|
||||
useEffect(() => {
|
||||
changePage(page);
|
||||
}, [page]);
|
||||
|
||||
function goUser(login) {
|
||||
window.location.href = `/users/${login}`;
|
||||
|
@ -36,8 +32,14 @@ export default (props) => {
|
|||
<div className="list-content">
|
||||
<div className="list-title mb10" onClick={() => { itemClick(item.id) }}>
|
||||
<div className="title-content text-ellipsis">{item.name}</div>
|
||||
{item.status && <span className={classArr[item.status]}>{item.exceptClosedBoolean?'已关闭':statusArr[item.status]}</span>}
|
||||
{(item.status !== 8) && item.delayTime.indexOf('延期') > -1 && <span className="list-yellow">延期中</span>}
|
||||
{item.status && <span className={classArr[item.status]}>{item.exceptClosedBoolean ? '已关闭' : statusArr[item.status]}</span>}
|
||||
{(item.status !== 8) && item.delayTime.indexOf('延期') > -1 ? <span className="list-yellow">延期中</span>
|
||||
: <React.Fragment>
|
||||
{(item.status !== 8) && item.cancelStatus === 1 && <span className="list-yellow">手动延期中</span>}
|
||||
{(item.status !== 8) && item.delayed && item.cancelStatus === 0 && item.delayCount>0 && <span className="list-yellow">系统自动延期中</span>}
|
||||
</React.Fragment>
|
||||
}
|
||||
|
||||
</div>
|
||||
<div className="list-other">
|
||||
<span className="user-box mr30" onClick={() => { goUser(item.user.login) }}>
|
||||
|
@ -63,7 +65,7 @@ export default (props) => {
|
|||
<div className="edu-txt-center mt20 mb20">
|
||||
{total > pageSize && <Pagination
|
||||
showQuickJumper
|
||||
onChange={(page) => { setPage(page) }}
|
||||
onChange={(page) => { changePage(page) }}
|
||||
current={curPage}
|
||||
total={total}
|
||||
showTotal={total => `共 ${total} 条`}
|
||||
|
|
|
@ -13,14 +13,9 @@ export default Form.create()((props) => {
|
|||
const { getFieldDecorator, validateFields, setFieldsValue } = form;
|
||||
const [checkedItem, setCheckedItem] = useState({});
|
||||
const [visible, setVisible] = useState(false);
|
||||
const [page, setPage] = useState(1);
|
||||
const [fileList, setFileList] = useState(null);
|
||||
const pageSize = props.pageSize || 10;
|
||||
|
||||
useEffect(() => {
|
||||
changePage(page);
|
||||
}, [page]);
|
||||
|
||||
|
||||
function goUser(login) {
|
||||
window.location.href = `/users/${login}`;
|
||||
|
@ -117,7 +112,7 @@ export default Form.create()((props) => {
|
|||
<div className="edu-txt-center mt20 mb20">
|
||||
{total > pageSize && <Pagination
|
||||
showQuickJumper
|
||||
onChange={(page) => { setPage(page) }}
|
||||
onChange={(page) => { changePage(page) }}
|
||||
current={curPage}
|
||||
total={total}
|
||||
showTotal={total => `共 ${total} 条`}
|
||||
|
|
|
@ -12,16 +12,10 @@ const { TextArea } = Input;
|
|||
export default (props) => {
|
||||
const { list, curPage, total, changePage, loading, showNotification, reloadList } = props;
|
||||
const [checkedItem, setCheckedItem] = useState('');
|
||||
const [page, setPage] = useState(1);
|
||||
const [visible, setVisible] = useState(false);
|
||||
const [advice, setRepairAdvice] = useState('');
|
||||
const pageSize = props.pageSize || 10;
|
||||
|
||||
useEffect(() => {
|
||||
changePage(page);
|
||||
}, [page]);
|
||||
|
||||
|
||||
function agreeClick(item) {
|
||||
Modal.confirm({
|
||||
title: '是否确认审批通过?',
|
||||
|
@ -152,7 +146,7 @@ export default (props) => {
|
|||
<div className="edu-txt-center mt20 mb20">
|
||||
{total > pageSize && <Pagination
|
||||
showQuickJumper
|
||||
onChange={(page) => { setPage(page) }}
|
||||
onChange={(page) => { changePage(page) }}
|
||||
current={curPage}
|
||||
total={total}
|
||||
showTotal={total => `共 ${total} 条`}
|
||||
|
|
|
@ -13,7 +13,6 @@ export default Form.create()((props) => {
|
|||
const { form, list, curPage, total, changePage, loading, showNotification, reloadList } = props;
|
||||
const { getFieldDecorator, validateFields, setFieldsValue } = form;
|
||||
const [checkedItem, setCheckedItem] = useState('');
|
||||
const [page, setPage] = useState(1);
|
||||
const [visible, setVisible] = useState(false);
|
||||
const pageSize = props.pageSize || 10;
|
||||
|
||||
|
@ -22,10 +21,6 @@ export default Form.create()((props) => {
|
|||
const [isChanged, setIsChanged] = useState('');
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
changePage(page);
|
||||
}, [page]);
|
||||
|
||||
|
||||
function deal(item) {
|
||||
setCheckedItem(item);
|
||||
|
@ -145,7 +140,7 @@ export default Form.create()((props) => {
|
|||
<div className="edu-txt-center mt20 mb20">
|
||||
{total > pageSize && <Pagination
|
||||
showQuickJumper
|
||||
onChange={(page) => { setPage(page) }}
|
||||
onChange={(page) => { changePage(page) }}
|
||||
current={curPage}
|
||||
total={total}
|
||||
showTotal={total => `共 ${total} 条`}
|
||||
|
|
|
@ -12,16 +12,11 @@ const { TextArea } = Input;
|
|||
export default (props) => {
|
||||
const { list, categoryArr, curPage, total, changePage, loading, showNotification, reloadList } = props;
|
||||
const [checkedId, setCheckedId] = useState('');
|
||||
const [page, setPage] = useState(1);
|
||||
const [visible, setVisible] = useState(false);
|
||||
const [isRepairDocument, setIsRepairDocument] = useState('0');
|
||||
const [repairAdvice, setRepairAdvice] = useState('');
|
||||
const pageSize = props.pageSize || 10;
|
||||
|
||||
useEffect(() => {
|
||||
changePage(page);
|
||||
}, [page]);
|
||||
|
||||
|
||||
function agreeClick(id) {
|
||||
Modal.confirm({
|
||||
|
@ -186,7 +181,7 @@ export default (props) => {
|
|||
<div className="edu-txt-center mt20 mb20">
|
||||
{total > pageSize && <Pagination
|
||||
showQuickJumper
|
||||
onChange={(page) => { setPage(page) }}
|
||||
onChange={(page) => { changePage(page) }}
|
||||
current={curPage}
|
||||
total={total}
|
||||
showTotal={total => `共 ${total} 条`}
|
||||
|
|
|
@ -63,6 +63,9 @@ export default ({ location, history, current_user, showNotification }) => {
|
|||
setLoading(true);
|
||||
getMyTaskList(params).then(data => {
|
||||
if (data) {
|
||||
for (const item of data.rows) {
|
||||
item.delayTime = surplusTime(item);
|
||||
}
|
||||
setMyTaskList(data.rows);
|
||||
setTotal(data.total);
|
||||
}
|
||||
|
@ -73,6 +76,31 @@ export default ({ location, history, current_user, showNotification }) => {
|
|||
function taskClick(id) {
|
||||
history.push(`/task/taskDetail/${id}`);
|
||||
}
|
||||
|
||||
function surplusTime(item) {
|
||||
let surplus;
|
||||
switch (item.status) {
|
||||
case 3:
|
||||
surplus = item.collectingDays * 24 * 3600 - (new Date() - new Date(item.publishedAt || item.createdAt)) / 1000;
|
||||
break;
|
||||
case 4:
|
||||
surplus = item.choosingDays * 24 * 3600 - (new Date() - new Date(item.collectingCompleteAt)) / 1000;
|
||||
break;
|
||||
case 5:
|
||||
surplus = item.makePublicDays * 24 * 3600 - (new Date() - new Date(item.makePublicAt)) / 1000;
|
||||
break;
|
||||
case 6:
|
||||
surplus = item.signingDays * 24 * 3600 - (new Date() - new Date(item.publicityCompleteAt)) / 1000;
|
||||
break;
|
||||
case 7:
|
||||
surplus = item.payingDays * 24 * 3600 - (new Date() - new Date(item.signingCompleteAt)) / 1000;
|
||||
break;
|
||||
default:
|
||||
surplus = 0;
|
||||
}
|
||||
|
||||
return surplus ;
|
||||
}
|
||||
|
||||
const changeOptionId = useCallback((option, type) => {
|
||||
if (type === 'publishStatus') {
|
||||
|
|
|
@ -88,11 +88,18 @@ export default ({ taskCategoryValueArr, showNotification }) => {
|
|||
const columns = useMemo(() => {
|
||||
return [
|
||||
{
|
||||
title: '任务/编号名称',
|
||||
title: '任务编号',
|
||||
dataIndex: 'name',
|
||||
width: '30%',
|
||||
render: (text, record) => {
|
||||
return <Link className="color-grey3 font-16 font-bd" to={`/task/taskDetail/${record.task.id}`}>{record.task.number + " " + record.task.name}</Link>
|
||||
return <Link className="color-grey3 font-16 font-bd" to={`/task/taskDetail/${record.task.id}`}>{record.task.number}</Link>
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '任务名称',
|
||||
dataIndex: 'name',
|
||||
width: '20%',
|
||||
render: (text, record) => {
|
||||
return record.task.name
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
|
@ -137,7 +137,7 @@ export default Form.create()(({ form, showNotification, match, history }) => {
|
|||
width: '10%',
|
||||
dataIndex: 'status',
|
||||
render: (text, record) => {
|
||||
return statusArr[text]
|
||||
return record.exceptClosedBoolean ? '已关闭' : statusArr[text]
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
|
@ -175,6 +175,9 @@ export default Form.create()(
|
|||
|
||||
{/* 因为有时只延期几秒或者几分钟时后端没有返回延期,所以这里加一个判断 */}
|
||||
{detailData.status === status && days ? <p className="color-grey-6 font-12">{surplus < 0 ? ('延期' + surplusTimetext) : ('剩余' + surplusTimetext)}</p> : ''}
|
||||
|
||||
{detailData.status === status && detailData.cancelStatus === 1 && surplus > 0 && <p className="delay-text">(手动延期)</p>}
|
||||
{detailData.status === status && detailData.delayed && detailData.cancelStatus === 0 && surplus > 0 && detailData.delayCount && <p className="delay-text">(系统自动延期)</p>}
|
||||
</li>
|
||||
)
|
||||
}, [detailData]);
|
||||
|
|
|
@ -49,6 +49,12 @@
|
|||
color: #05101a;
|
||||
text-align: center;
|
||||
margin-bottom: 32px;
|
||||
|
||||
.delay-text{
|
||||
margin-top:-15px;
|
||||
color: #666;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
.tasks_status li:not(:last-child){
|
||||
margin-right: 20px;
|
||||
|
|
Loading…
Reference in New Issue