Files
fe_service_ebtp_frontend/src/pages/MainPage/ProjectManager/manager.js

410 lines
22 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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, { PureComponent } from 'react';
import { history } from 'umi';
import { Row, Col, Tooltip, Card, List, DatePicker, Button, Statistic, Spin, Empty, message, Modal,Popconfirm, Space } from 'antd';
// import PageHeaderWrapper from '@/components/PageHeaderWrapper';
import { connect } from 'dva';
import './index.less';
import talkPng from '@/images/talk/talk.png';
import { routerRedux } from 'dva/router';
import { RightOutlined } from '@ant-design/icons';
import moment from 'moment';
import { followUpAProjectManager, getSessionUserData } from '@/utils/session';
import { getDefId, isInsertIdOrPhoto } from './service';
import { getURLInformation } from '@/utils/CommonUtils';
import MessageDetail from '@/pages/SystemMessage/message/components/messageDetail'
import NoticeDetail from '@/pages/notice/noticeList/components/NoticeDetail'
import QuestDetail from '@/pages/SystemMessage/message/components/questDetail'
import { getQuestList } from '@/pages/SystemMessage/message/service'
import ApprovalDetail from '@/pages/SystemMessage/message/components/approvalDetail'
import { submitHiddenForm, createHiddenForm } from '@/utils/CustomerService' //智慧客服
import kefu from '@/assets/img/kefu.png' //智慧客服
@connect(({ dashboard, loading }) => ({
...dashboard,
downlistLoading: loading.effects['dashboard/fetchDowntlist'],
projectlistLoading: loading.effects['dashboard/fetchprojectRecords'],
}))
class manager extends PureComponent {
state = {
datevalue: moment(moment().format('YYYYMM'), 'YYYY-MM'),
datestring: moment().format('YYYYMM'),
messId: '0', // 消息id
messageDetail: false, // 消息弹窗
detailId: '1', // 公告id
noticeDetail: false, // 公告弹窗
questData: {},//问卷数据
questVisible: false,//问卷弹窗
mainDetail: false, // 审批单消息弹窗
kefuTip: false, // 客服弹窗
// NTKF_PARAM: {
// siteid: "bl_1000", //企业ID,为固定值
// settingid: "bl_1000_1492484340268", //接待组ID为固定值必填
// uid: "${getMyVisit().getCzy().getDlh()}",//登录号 uname:"${getMyVisit().getGG_JGBH().getJgmc()}"+"-"+"${getMyVisit().getCzy().getMc()}", //用户名未登录可以为空但是不能给nulluname赋予的值显示到小能客户端
// isvip: "0", //是否为vip用户0代表非会员1代表会员取值显示到小能客户端
// userlevel: "1", //网站自定义会员级别1-N可根据选择判断取值显示到小能客户端
// erpparam: "abc" //erpparam为erp功能的扩展字段可选购买erp功能后用于erp功能集成
// }
}
componentDidMount() {
this.props.dispatch({
type: "dashboard/fetchDowntlist",
payload: { limit: 4 }
})
this.props.dispatch({
type: "dashboard/fetchprojectRecords",
payload: { selectDate: moment().format('YYYYMM') }
})
this.props.dispatch({
type: "dashboard/fetchtlist",
payload: { limit: 7 }
})
this.props.dispatch({
type: "dashboard/fetchtlistre",
payload: { pageNo: 1, pageSize: 7 }
})
this.props.dispatch({
type: "dashboard/fetchtClarify",
payload: { authorizestate: '0', templatetype: '4', size: 6 }
})
// NTKF_PARAM = {
// siteid: "bl_1000",                    //企业ID,为固定值
// settingid: "bl_1000_1492484340268",           //接待组ID为固定值必填
// uid: getSessionUserData()?.userId,
// uname: getSessionUserData()?.deptName + "-" + getSessionUserData()?.fullName,            //用户名未登录可以为空但是不能给nulluname赋予的值显示到小能客户端
// isvip: "0",                              //是否为vip用户0代表非会员1代表会员取值显示到小能客户端
// userlevel: "1",                       //网站自定义会员级别1-N可根据选择判断取值显示到小能客户端
// erpparam: "abc"                          //erpparam为erp功能的扩展字段可选购买erp功能后用于erp功能集成
// }
this.approvalDetail();
// this.isIdOrPhoto();
}
onChange = (date, dateString) => {
this.setState({
datevalue: moment(dateString, 'YYYY-MM'),
datestring: dateString.split('-').join('')
})
}
onSearch = () => {
const { datestring } = this.state;
this.props.dispatch({
type: "dashboard/save",
payload: { staloading: true }
})
this.props.dispatch({
type: "dashboard/fetchprojectRecords",
payload: { selectDate: datestring }
})
}
lookDetail = (id) => { // 消息查看详情
this.setState({
messId: id,
messageDetail: true
})
}
closeModel = () => { // 关闭消息弹窗
this.setState({
messageDetail: false,
mainDetail: false,
})
}
lookInfo = (id) => { // 公告查看
this.setState({
detailId: id,
noticeDetail: true
})
}
noticeModel = () => { // 公告关闭消息弹窗
this.setState({
noticeDetail: false
})
}
approvalDetail = () => { // 审批单消息查看详情
this.setState({
mainDetail: true
})
}
toParticipate = async (servicecode) => {//问卷调查弹窗
const { questId } = JSON.parse(servicecode);
await getQuestList({ id: questId }).then(res => {
if (res?.code == 200 && res?.success) {
this.setState({
questData: res?.data,
questVisible: true,
})
}
})
}
closeParticipate = () => { // 关闭问卷调查弹窗
this.setState({
questVisible: false
})
}
followUpProject = async (data) => {
// let defId = ''; //项目流程id
// await getDefId(data.id).then((res) => {
// if (res.code == 200) {
// defId = res.data;
// }
// });
// let proTypeCode = '';
// getURLInformation('proTypeCode') != null ? (proTypeCode = getURLInformation('proTypeCode')) : null;
// sessionStorage.setItem('proTypeCode', proTypeCode);
// sessionStorage.setItem('defId', JSON.stringify(defId));
// sessionStorage.setItem('projectData', JSON.stringify(data));
await followUpAProjectManager(data);
history.push('/ProjectLayout/Manager/HomePageSectionList');
};
//触发客服
initChatUI = () => {
let roleAuthority = sessionStorage.getItem('roleAuthority');
let data = getSessionUserData();
const inputList = [
{
label: null,
paraName: 'origin',
isEncode: false,
paraVal: 'eBid',
},
{
label: null,
paraName: 'organizationId',
isEncode: false,
paraVal: data.organizationId,
},
{
label: null,
paraName: 'tenderAgencyId',
isEncode: false,
paraVal: 'EMPTY',
},
{
label: null,
paraName: 'tenderAgencyName',
isEncode: true,
paraVal: '招标采购中心客服',
},
{
label: null,
paraName: 'roleAuthority',
isEncode: false,
paraVal: JSON.parse(roleAuthority)[0],
},
{
label: null,
paraName: 'module',
isEncode: false,
paraVal: '2',
},
{
label: null,
paraName: 'custType',
isEncode: false,
paraVal: '1',
},
]
createHiddenForm(inputList, window.location.pathname)
submitHiddenForm()
}
//判断是否有身份证号或照片
isIdOrPhoto = () => {
const { warning } = Modal;
isInsertIdOrPhoto().then(res => {
if (res?.code == 200) {
if (!res?.data) {
warning({
title: '提示',
content: `您尚未维护身份证号与照片信息,请前往【我的工作台】->【代理机构信息管理】补充信息`,
centered: true,
});
}
}
})
}
render() {
const { downlist, projectlist, staloading, tlist, trelist, idList, dateNum } = this.props;
const { datevalue, messId, messageDetail, detailId, noticeDetail, questData, questVisible, mainDetail, } = this.state;
return (
<>
{/* <Popconfirm
title={()=>{
return <><p>您好,系统操作咨询仅可以解决您在平台的操作问题,如想了解发票、保证金及项目相关问题请点击具体项目的咨询窗口进行咨询。</p>
<p>是否还要继续咨询系统操作问题?</p></>
}}
onConfirm={()=>this.initChatUI()}
okText="是"
cancelText="否"
>
<a className="talk">系统操作咨询︵<span>8:30</span><span>|</span><span>12:30</span><span>13:00</span><span>|</span><span>17:00</span>︶<img src={talkPng} /></a>
</Popconfirm> */}
<a className="talk" onClick={() => {
this.setState({
kefuTip: true
})
}}>系统操作咨询<span>8:30</span><span>|</span><span>12:30</span><span>13:00</span><span>|</span><span>17:00</span><img src={talkPng} /></a>
<div className="dashboard" style={{ height: innerHeight - 70, overflow: "hidden" }}>
<Row className="topt">
<Col span={8}><Card title="我的消息" bordered={false} className="cardtre" style={{ marginRight: "10px" }} extra={<div className="moret" onClick={() => {
history.push('/SystemMessage/message')
}}>更多<RightOutlined /></div>}>
{trelist != [] && trelist.map((item, index) => {
return (
<div onClick={() => { item.templatetype == '3' ? this.toParticipate(item.servicecode) : this.lookDetail(item.msgId) }} className="messagetre" key={item.id}>
<div className="round">{index + 1}</div>
<div className="txt" title={item.title}>{item.title}</div>
<div className="time">{item.createtime}</div>
</div>
)
})}
</Card></Col>
<Col span={8}><Card title="项目统计" bordered={false} className="cardtremanager" style={{ marginRight: "10px" }} loading={staloading} extra={<div style={{ marginTop: "-14px" }}>
<DatePicker showNow={false} picker="month" style={{ marginRight: "10px" }} value={datevalue} onChange={this.onChange} allowClear={false} /><Button type="primary" onClick={() => { this.onSearch() }}>确定</Button></div>}>
{projectlist != "" ? projectlist.map((item) => {
let routerPath = ''
if (item.title == '公开招标') {
routerPath = '/Bid/Manage'
} else if (item.title == '公开比选') {
routerPath = '/Comparison/Manage'
} else if (item.title == '谈判') {
routerPath = '/Negotiation/Manage'
} else if (item.title == '招募') {
routerPath = '/Recruit/Manage'
} else if (item.title == '询价') {
routerPath = '/Inquiry/Manage'
}
return (
<div className="boxrezt" key={item.id} style={{ height: "130px" }}>
<div className="boxtitle" title={item.title}>
{item.title}
<div className="yue"></div></div>
<div className="boxcount" onClick={() => history.push(routerPath)}><Statistic value={item.count} /></div>
<div className="boxdescription" title={item.description}>{item.description}</div>
</div>
)
}) :
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE}
description={<span style={{ color: '#BFBFBF' }}>暂无数据</span>} />
}
</Card>
</Col>
<Col span={8}><Card title="系统公告" bordered={false} className="cardtre" extra={<div className="moret" onClick={() => history.push('/notice/noticeList')}>更多<RightOutlined /></div>}>
{tlist != [] && tlist.map((item, index) => {
return (
<div className="messagetre" onClick={() => { this.lookInfo(item.id) }} key={item.id}>
<div className="round">{index + 1}</div>
<div className="txt" title={item.noticeTitle}>{item.noticeTitle}</div>
<div className="time">{item.updateDate}</div>
</div>
)
})}</Card>
</Col>
</Row>
<Row className="downt" type="flex" justify="space-around">
<Col span={8}><Card title="我的招标项目" className="cardtre" extra={<div className="moret" onClick={() => history.push('/Bid/Manage')}>更多<RightOutlined /></div>}>
<List
size="large"
bordered={false}
dataSource={downlist != [] && downlist["01"] && downlist["01"]}
renderItem={item => <List.Item className="pointer" key={item.id} onClick={() => {
this.followUpProject({
id: item.id,
bidMethodDict: item.bidMethodDict,
biddingSignDict: item.biddingSignDict,
isClientFile: item.isClientFile,
isIPassDecode: item.isIPassDecode,
isIPassFile: item.isIPassFile,
projectName: item.projectName,
openTenderForm: item.projectName
})
}} style={{ height: "25%" }}>
<div className="downround"></div><div className="downtitle" title={item.projectName}>{item.projectName}
<div className="downtime">建档时间{item.createDate}</div></div></List.Item>}
/>
</Card></Col>
<Col span={8}><Card title="我的招募项目" className="cardtre" extra={<div className="moret" onClick={() => history.push('/Recruit/Manage')}>更多<RightOutlined /></div>}>
<List
size="large"
bordered={false}
dataSource={downlist != [] && downlist["03"] && downlist["03"]}
renderItem={item => <List.Item className="pointer" key={item.id} onClick={() => {
this.followUpProject({
id: item.id,
bidMethodDict: item.bidMethodDict,
biddingSignDict: item.biddingSignDict,
isClientFile: item.isClientFile,
isIPassDecode: item.isIPassDecode,
isIPassFile: item.isIPassFile,
projectName: item.projectName,
openTenderForm: item.projectName
})
}} style={{ height: "25%" }}>
<div className="downround"></div><div className="downtitle" title={item.projectName}>{item.projectName}
<div className="downtime">建档时间{item.createDate}</div></div></List.Item>}
/></Card></Col>
<Col span={8}><Card title="我的谈判项目" className="cardtre" extra={<div className="moret" onClick={() => history.push('/Negotiation/Manage')}>更多<RightOutlined /></div>}>
<List
size="large"
bordered={false}
dataSource={downlist != [] && downlist["04"] && downlist["04"]}
renderItem={item => <List.Item className="pointer" key={item.id} onClick={() => {
this.followUpProject({
id: item.id,
bidMethodDict: item.bidMethodDict,
biddingSignDict: item.biddingSignDict,
isClientFile: item.isClientFile,
isIPassDecode: item.isIPassDecode,
isIPassFile: item.isIPassFile,
projectName: item.projectName,
openTenderForm: item.projectName
})
}} style={{ height: "25%" }}>
<div className="downround"></div><div className="downtitle" title={item.projectName}>{item.projectName}
<div className="downtime">建档时间{item.createDate}</div></div></List.Item>}
/></Card></Col>
</Row>
</div>
{messageDetail ? <MessageDetail messId={messId} onCancel={() => { this.closeModel(), this.props.dispatch({ type: "dashboard/fetchtlistre", payload: { pageNo: 1, pageSize: 7 } }) }} modalVisible={messageDetail} /> : null}
{questVisible ? <QuestDetail questData={questData} onCancel={() => { this.closeParticipate(), this.props.dispatch({ type: "dashboard/fetchtlistre", payload: { pageNo: 1, pageSize: 7 } }) }} modalVisible={questVisible} /> : null}
{noticeDetail && <NoticeDetail detailId={detailId} onCancel={() => { this.noticeModel() }} modalVisible={noticeDetail} />}
{
idList.length > 0 ? <ApprovalDetail approvalId={idList[0]} dateNum={dateNum} trelist={idList} onCancel={() => { this.closeModel(), this.props.dispatch({ type: "dashboard/fetchtClarify", payload: { authorizestate: '0', templatetype: '4', size: 6 } }) }} modalVisible={mainDetail} /> : null
}
{
this.state.kefuTip ? <div style={{ border:'1px solid grey', borderRadius: '10px', backgroundColor:'white',position:'absolute', width:'600px', left:'50%', top:'50%',transform:'translate(-50%,-50%)'}}>
<div style={{padding:'10px',borderRadius: '6px 6px 0px 0px',backgroundColor:'rgb(179,0,0)', color:'white'}}>
温馨提示
</div>
<div style={{padding:'10px'}}>
<p>您好系统操作咨询仅可以解决您在<span style={{color:'rgb(179,0,0)', fontWeight:'bolder'}}>平台操作使用问题</span></p>
<p>如您需要咨询发票保证金及项目相关问题请点击项目右侧<img style={{width:20,height:20,}} src={kefu} alt="" />进行咨询</p>
<p>请问您是否咨询系统操作问题</p>
</div>
<div style={{
//width:'200px',
position:'relative',
left:'50%',
transform:'translateX(-50%)',
display: 'inline-block',
margin: '8px 4px',
padding: '4px'
}}>
<Space
align='center'
>
<Button type='primary' onClick={() => {this.initChatUI();this.setState({
kefuTip: false
})}}></Button>
<Button onClick={() => this.setState({
kefuTip: false
})}>
</Button>
</Space>
</div>
</div>:null
}
</>
)
}
}
export default manager;