import React from 'react'; import { Button, Tabs, Card, Tooltip, Row, Col, Spin, Menu, Icon } from 'antd'; import { inject, observer } from 'mobx-react'; import { WeaTop, WeaInputSearch, WeaLeftRightLayout, WeaNewScroll, WeaEchart, WeaDropdown, WeaProgress, WeaNewScrollPagination, WeaSelect, WeaAlertPage, WeaTab, WeaRightMenu } from 'ecCom'; import {routerShape} from 'react-router'; const { SubMenu } = Menu; import AddPrjGroupDialog from '../dialog/addPrjGroupDialog'; import {toJS} from 'mobx'; import {Condition,getAdButtons} from '../list/portalCondition'; import {WeaTableNew} from 'comsMobx'; const WeaTable = WeaTableNew.WeaTable; import { WeaLocaleProvider } from 'ecCom'; const getLabel = WeaLocaleProvider.getLabel; import loadjs from 'loadjs'; import "./index.less"; import ShareDialog from '../dialog/shareDialog' import ExchangeDialog from '../dialog/exchangeDialog' import ProjectDialog from '../dialog/projectDialog' import ItemList from "../projectBoard/ItemList"; import ProjectCard from "./projectCard"; @inject("projectPortalStore","queryPrjStore","projectBoardStore") @observer class ProjectPortal extends React.Component { static contextTypes = { router: routerShape } constructor(props) { super(props); this.state = { current: 'allPrj', ctrlHeight : 200, viewScope : "card", showSearchAd : false, selectedKey : 0 }; } componentDidMount() { const {projectPortalStore, queryPrjStore, location:{query}, projectBoardStore} = this.props; queryPrjStore.initDatas(query); projectPortalStore.initDatas({viewScope:this.state.viewScope}); projectBoardStore.initList(); // if (!loadjs.isDefined('weaPrjEcharts')) { // loadjs(['/js/echart/echarts.min.js'], 'weaPrjEcharts', { // success: () => { // projectPortalStore.initDatas({viewScope:this.state.viewScope}); // } // }); // } else { // projectPortalStore.initDatas({viewScope:this.state.viewScope}); // } // console.log(this.refs); // this.setState({ // ctrlHeight: this.refs.searGroup.height // }); } componentWillReceiveProps(nextProps){ const keyOld = this.props.location.key; const keyNew = nextProps.location.key; const query = nextProps.location.query; if(keyOld !== keyNew) { const { projectPortalStore, queryPrjStore, projectBoardStore } = nextProps; queryPrjStore.clearStatus(); queryPrjStore.initDatas(query); projectPortalStore.clearStatus(); projectPortalStore.prjGroupStore1.setId('allPrj'); this.setState({viewScope : "card",current: 'allPrj'}); projectPortalStore.initDatas({viewScope:this.state.viewScope}); projectBoardStore.initList(); // if (!loadjs.isDefined('weaPrjEcharts')) { // loadjs(['/js/echart/echarts.min.js'], 'weaPrjEcharts', { // success: () => { // projectPortalStore.initDatas({viewScope:this.state.viewScope}); // projectBoardStore.initList(); // } // }); // } else { // projectPortalStore.initDatas({viewScope:this.state.viewScope}); // projectBoardStore.initList(); // } } } componentWillUnmount (){ const { queryPrjStore, projectPortalStore } = this.props; queryPrjStore.clearStatus(); projectPortalStore.clearStatus(); projectPortalStore.prjGroupStore1.setId('allPrj'); this.setState({viewScope : "card",current: 'allPrj',selectedKey:0}); } render() { const { projectPortalStore, queryPrjStore, projectBoardStore } = this.props; const { title, prjGroupStore, groups, prjGroupStore1, tableStore, reLoad, loadding, exchangeStore, projectInfoStore, quickSearch, counts, initDatas, isLoadJs, prjtype } = projectPortalStore; const { form, showSearchAd } = queryPrjStore; let prjdatas = this.getProjects(); const formParams = form.getFormParams() || {}; const topTab = [ { title: getLabel('31458','分组') , viewcondition: "0" }, { title: getLabel('320','列表'), viewcondition: "1" } ]; return (
} buttons={this.getTopButtons()} iconBgcolor='#217346'/>
{/* {quickSearch(v)}} /> */} { this.setState({ selectedKey: v }); queryPrjStore.form.resetConditionValue(); queryPrjStore.form.updateFields({'prjtype':'-1'}); if(v==0){ initDatas({viewScope:this.state.viewScope}); }else if(v==1){ projectBoardStore.initList(); } }} /> { if(this.state.selectedKey==0){ initDatas(formParams); }else if(this.state.selectedKey==1){ projectBoardStore.getProjectList1(formParams); } })} searchType={['base','advanced']} showSearchAd={showSearchAd} searchsAd={
} setShowSearchAd={bool=>{queryPrjStore.setShowSearchAd(bool)}} keyParam="key" searchsBaseValue={formParams.name} onSearchChange={v=>{queryPrjStore.appendFormFields({name:{value:v}})}} onSearch={() =>{ if(this.state.selectedKey==0){ initDatas(formParams); }else if(this.state.selectedKey==1){ projectBoardStore.getProjectList1(formParams); } }} leftStyle={{paddingRight: 350}} /> { this.state.selectedKey==0&&
{ this.setState({ scrollTop:e.target.scrollTop, }) }}> {getLabel('518255','全部项目')} {counts.allPrj} {getLabel('518251','我的星标')} {counts.mineStar} {getLabel('83231','我参与的')} {counts.myPrj} {getLabel('16408','项目执行')} {counts.expPrj} {getLabel('518252','已完成项目')} {counts.endPrj} {getLabel('518256','项目分组')} {e.stopPropagation() ;prjGroupStore.handlePrjGroupDialog(true)}} /> } > {this.getGroups(groups)}
} { this.state.selectedKey==1&& }
} // onCollapse={showLeft => console.log('showLeft:', showLeft)} > { this.state.selectedKey==0&&this.state.viewScope=="card" && prjdatas.length==0 &&
{getLabel(83553, '暂无数据')}
} { this.state.selectedKey==0&&this.state.viewScope=="card" && prjdatas.length > 0 && { prjdatas.map((item,i)=>{ return {item} }) } } { this.state.selectedKey==0&&this.state.viewScope=="list" && reLoad()} getColumns={c=>this.reRenderColumns(c)} tableWidth={this.tableWidth} onOperatesClick={this.onOperatesClick.bind(this)} /> } { this.state.selectedKey==1&&(parseInt(projectBoardStore.prjid)>0? {projectBoardStore.getProjectList1(formParams);}} changeCallBack={() =>{projectBoardStore.getProjectList1(formParams);}} > :
{getLabel(83553, '暂无数据')}
) } ) } onEnterSearch=() =>{ const { projectPortalStore,queryPrjStore } = this.props; const { form } = queryPrjStore; const formParams = form.getFormParams() || {}; projectPortalStore.initDatas(formParams); queryPrjStore.setShowSearhAd(false); } onOperatesClick(record,index,operate,flag){ const {projectPortalStore} = this.props; const {shareStore,exchangeStore,projectInfoStore} = projectPortalStore; let _href = operate && operate.href ? operate.href : ""; let fn = _href.replace("javascript:",""); fn = fn.substring(0,fn.indexOf('(')); let that = this; if(fn != ""){ if("onShare"==fn){ //共享 shareStore.handleShareDialog(true,"prj",record.randomFieldId) }else if('onNormal' == fn){ //正常 projectPortalStore.doPlanOpt({method:'normal',prjid:record.randomFieldId}) }else if('onOver' == fn){ //延期 projectPortalStore.doPlanOpt({method:'delay',prjid:record.randomFieldId}) }else if('onFinish' == fn){ //完成 projectPortalStore.doPlanOpt({method:'complete',prjid:record.randomFieldId}) }else if('onFrozen' == fn){ //冻结 projectPortalStore.doPlanOpt({method:'freeze',prjid:record.randomFieldId}) }else if('onEdit' == fn){ //编辑 projectInfoStore.handleDialog(true,record.randomFieldId,{viewtype:'edit',prjid:record.randomFieldId}) ; }else if('onListTask' == fn){ //任务列表 }else if('onDiscuss' == fn){ //相关交流 exchangeStore.handleExchangeDialog(true,"prj",record.randomFieldId,{}) }else if('onDel' == fn){ //项目删除 projectPortalStore.delPrjInfo({method:"del",prjid:record.randomFieldId,from:"mymanagerproject"}) } } } onScrollEnd = () => { const { projectPortalStore, queryPrjStore } = this.props; const { searchNextPage } = projectPortalStore; const { form } = queryPrjStore; const formParams = form.getFormParams() || {}; searchNextPage(formParams); } tableWidth = (columns) => { let width = 0; let cols = 0; columns.map(col => { if (col.display === 'true') { let oldwidth = col.oldWidth || '10%'; let widthInt = parseFloat(oldwidth.replace('%', '')); if (widthInt <= 0) { widthInt = 10; } width += widthInt; cols++ } }) //超过10列,才出现滚动条,width>100才出现滚动条 if(cols<=10){ width = 100 ; } return `${width}%`; } reRenderColumns(columns){ columns.forEach((c,i)=>{ if(c.dataIndex=='finish'){ c.render = function(text, record){ return } } else { // c.render = function(text, record){ // let valueSpan = record[c.dataIndex + "span"] !== undefined ? record[c.dataIndex + "span"] : record[c.dataIndex]; // return // } } }) return columns; } handleClick = e => { const {projectPortalStore,queryPrjStore} = this.props; queryPrjStore.form.resetConditionValue(); queryPrjStore.form.updateFields({'prjtype':'-1'}); projectPortalStore.setPrjType('-1'); projectPortalStore.initDatas({groupid:e.key}); projectPortalStore.prjGroupStore1.setId(e.key); this.setState({ current: e.key, }); }; getProjects = () => { let row = []; let col= []; const { prjDatas, collectProject, counts, getPrjSearchDatas } = this.props.projectPortalStore; let datas = prjDatas; datas.map((item,index)=>{ let data = []; let data2 = []; let dataall = []; for (var i = 0; i < item.xdata.length; i++) { data.push([item.xdata[i],item.data[i]]); data2.push([item.xdata[i],item.data2[i]]); dataall.push([item.xdata[i],item.dataall[i]]); } col.push( {this.forwardProjectCard("?prjid="+item.id)}}>{item.name} {item.dynamic} window.pointerXY(e)} >
{/* 底部按钮组 */} { collectProject({prjid:item.id,type:item.isGuanZhu?0:1}); item.isGuanZhu=!item.isGuanZhu; if(item.isGuanZhu){ counts.mineStar++; }else{ counts.mineStar--; } getPrjSearchDatas(); }}/>
) if((index+1)%4 == 0){ row.push(col); col= []; } if(index == datas.length-1){ row.push(col); col= []; } }); return row; } getTopButtons = () => { const { projectPortalStore, queryPrjStore } = this.props; const { prjtypes, initDatas, setPrjType, setOrderBy, prjtype } = projectPortalStore; const { form } = queryPrjStore; const formParams = form.getFormParams() || {}; const options = [ { key: "", selected:true, showname: "" }, { key: "createtime", showname: getLabel('518253','按创建时间') }, { key: "manager", showname: getLabel('518254','按项目经理') } ]; let buttons = []; if(this.state.selectedKey==0){ buttons.push( {getLabel('586','项目类型')} { queryPrjStore.appendFormFields({prjtype:{value:v}}) setPrjType(v); initDatas(formParams); }} /> ); buttons.push( {getLabel('338','排序')} { setOrderBy(v); initDatas(); }} /> ); if(this.state.viewScope == "card"){ buttons.push(