weaver_trunk_cli/pc4mobx/hrm/components/Outside.js

553 lines
18 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 from 'react';
import {
inject,
observer
} from 'mobx-react';
import {
WeaTop,
WeaTab,
WeaOrgTree,
WeaEchart,
WeaYear,
WeaDialog,
WeaPopoverHrm,
WeaCheckbox,
WeaRadioGroup,
WeaRightMenu,
WeaTools,
WeaErrorPage,
WeaAlertPage,
WeaDatePicker,
WeaBrowser,
WeaNewScroll,
WeaSearchGroup
} from 'ecCom';
import {
WeaTableNew
} from 'comsMobx';
const WeaTable = WeaTableNew.WeaTable;
import {
Modal,
Row,
Col,
Button,
Spin,
Icon,
Calendar,
Tooltip,
Timeline
} from 'antd';
import '../style/checking.less';
import '../style/outside.less';
import * as mobx from 'mobx';
import isEmpty from 'lodash/isEmpty';
import cloneDeep from 'lodash/cloneDeep';
import toString from 'lodash/toString';
import moment from 'moment';
import * as Util from '../util/index';
import Map from '../coms/Map';
import loadjs from 'loadjs';
import OutSideTabkey1 from './OutsideTabkey1.js';
import OutSideTabkey2 from './OutsideTabkey2.js';
import OutSideTabkey3 from './OutsideTabkey3.js';
import {
i18n
} from '../public/i18n';
import {
WeaLocaleProvider
} from 'ecCom';
import {
carousel
} from '../util/index'
import {addContentPath} from '../util/index.js'
const getLabel = WeaLocaleProvider.getLabel;
const toJS = mobx.toJS;
@inject('hrmOutside')
@observer
class main extends React.Component {
constructor(props) {
super(props);
}
componentDidMount() {
const {
hrmOutside
} = this.props;
hrmOutside.init();
this.getData();
//document.title = hrmOutside.title;
}
componentWillReceiveProps(nextProps) {
if (this.props.location.key !== nextProps.location.key) {
const {
hrmOutside
} = this.props;
hrmOutside.init();
this.getData();
}
}
getData() {
const {
hrmOutside
} = this.props;
hrmOutside.getData();
}
getRightMenu() {
const {
hrmOutside
} = this.props;
const {
dataKey,
tabkey,
hasRight
} = hrmOutside;
let btns = [];
if (tabkey == '3' && hasRight) { //分页控件导出有bug先屏蔽
btns.push({
key: "exportExcel",
icon: <i className='icon-coms-export'/>,
content: i18n.button.export(),
onClick: key => {
hrmOutside.exportExcel(dataKey)
}
});
}
return btns;
}
chooseUser(e) {
const {
hrmOutside
} = this.props;
let hrmId = '',
hrmName = undefined;
if (e.selected) {
hrmId = e.node.props.id;
hrmName = e.node.props.name;
}
if (hrmId) {
hrmOutside.updateHrmId(hrmId);
if (hrmName) hrmOutside.updateHrmName(hrmName);
this.getData();
}
}
changeUserRoot(ids, names, datas) {
const {
hrmOutside
} = this.props;
hrmOutside.updateUserRoot(datas);
}
resetUserRoot() {
const {
hrmOutside
} = this.props;
hrmOutside.updateUserRoot();
hrmOutside.updateHrmId();
hrmOutside.updateHrmName();
this.getData();
}
reFresh() {
this.getData();
}
changeTab(key) {
const {
hrmOutside
} = this.props;
hrmOutside.changeTab(key);
//this.resetUserRoot();
if(key!="3"){
this.getData();
}
}
changeDateTab(key) {
const {
hrmOutside
} = this.props;
hrmOutside.changeDateTab(key);
this.getData();
}
changeDate(v1, v2) {
const {
hrmOutside
} = this.props;
hrmOutside.changeDate(v1, v2);
this.getData();
}
handlerCheckbox(v) {
const {
hrmOutside
} = this.props;
hrmOutside.handlerCheckbox(v);
}
handlerPosition(item) {
const {
hrmOutside
} = this.props;
hrmOutside.updatePosition(item);
hrmOutside.updateVisible(true);
}
onTreeCheck(ids, datas) {
const {
hrmOutside
} = this.props;
let idds = [];
datas.forEach((d) => {
idds.push(d.id);
})
hrmOutside.updateHrmId(idds.join(','));
hrmOutside.updateOrgTreeCheckedDatas(datas);
this.getData();
}
renderLeft() {
const {
hrmOutside
} = this.props;
let {
leftTitle,
userRoot,
orgTreeIsMult,
orgTreeCheckedDatas
} = hrmOutside;
userRoot = toJS(userRoot);
return <div className="wea-hrm-checking-left" style={{height: window.innerHeight - 125}}>
<div className="left-header">
<div className="header-title bb">
<div style={{padding: '0 15px'}}>
<span style={{float: 'left'}}>{leftTitle()}</span>
<span style={{float: 'right', fontSize: '12px'}}>
<WeaCheckbox ecId={`${this && this.props && this.props.ecId || ''}_WeaCheckbox@lgdz1j`} onChange={(v)=> {
hrmOutside.updateOrgTreeIsMult(v);
hrmOutside.updateOrgTreeCheckedDatas();
this.refs.orgTree && this.refs.orgTree.resetCheck()
}}
value={orgTreeIsMult}/>&nbsp;&nbsp;{getLabel('386504',"开启选择")}
</span>
</div>
</div>
</div>
<div className="left-body">
<div>
<WeaBrowser ecId={`${this && this.props && this.props.ecId || ''}_WeaBrowser@pgolae`} isSingle={true}
linkUrl="/hrm/resource/HrmResource.jsp?id=" title={getLabel('179',"人力资源")} type="1" viewAttr="2"
replaceDatas={userRoot}
customIcon="icon-coms-Reset"
addOnClick={this.resetUserRoot.bind(this)}
onChange={this.changeUserRoot.bind(this)}
/>
<div style={{display: orgTreeIsMult == '0'?'block':'none',height: window.innerHeight - 225}}>
<WeaOrgTree ecId={`${this && this.props && this.props.ecId || ''}_WeaOrgTree@31k36r`}
renderNodeId = {(item)=> item.id}
dataUrl="/api/hrm/base/getHrmResourceTree"
rootKey="rootManager"
treeNodeClick={this.chooseUser.bind(this)}
params={Array.isArray(userRoot) && userRoot[0] ? {rootid: userRoot[0].id} : {}}
/>
</div>
<div style={{display: orgTreeIsMult == '1'?'block':'none',height: window.innerHeight - 225}}>
<WeaOrgTree ecId={`${this && this.props && this.props.ecId || ''}_WeaOrgTree@nr691d`}
ref="orgTree"
dataUrl="/api/hrm/base/getHrmResourceTree"
rootKey="rootManager"
onCheck={this.onTreeCheck.bind(this)}
isMult={true}
checkStrictly={false}
checkedDatas={orgTreeCheckedDatas}
params={Array.isArray(userRoot) && userRoot[0] ? {rootid: userRoot[0].id} : {}}
/>
</div>
</div>
</div>
</div>
}
renderList() {
const {
hrmOutside
} = this.props;
let {
timeData
} = hrmOutside;
timeData = toJS(timeData);
return <Timeline ecId={`${this && this.props && this.props.ecId || ''}_Timeline@7x4jhb`} className="list-wrapper grayBG">
{
timeData && timeData.map((item,index) => {
return <Timeline.Item ecId={`${this && this.props && this.props.ecId || ''}_undefined@n3i6ob@${index}`} className="list-item">
<div className="list-item-wrapper">
<div className="list-item-title">{item.date}</div>
<div className="list-item-content">
{
isEmpty(item.items) && <div className="no-signinfo gray align-center">
<Icon ecId={`${this && this.props && this.props.ecId || ''}_Icon@bb4xa6@${index}`} type="frown gray" style={{marginRight : 10}} />
{getLabel('386505',"当天无外勤签到记录")}
</div>
}
{
!isEmpty(item.items) && item.items.map(i=> {
return <div className="list-item-single">
<div className="mb5">
{i.name}
<span className="gray" style={{marginLeft: 15}}>{i.time}</span>
<span style={{float: 'right', marginRight: 10, color: '#67AFF7'}}>{i.signTitle}</span>
</div>
{i.information && <div className="mb5" dangerouslySetInnerHTML={{__html: i.information}}></div>}
{i.pics && <div className="mb5">
{
i.pics.map(pic=> {
return <div>{
<img src={addContentPath(pic)} border="0" width="100" height="110" onClick={event => carousel(pic,index,'ant-timeline-item')}/>
}
</div>
})
}
</div>
}
{
i.crm && i.crm.length > 0 &&
<div style={{display: 'flex'}}>
<i className="icon-coms-currency-Customer" style={{marginRight: 10}}/>
<div style={{flex: 1, width: '98%'}}>
{
i.crm.map((d, i) => {
return (
<div className='text-elli'>{d}</div>
)
})
}
</div>
</div>
}
<span className="cursor-pointer gray"
onClick={this.handlerPosition.bind(this, i)}>
<i className="icon-coms-position" style={{marginRight: 6}}/> {i.title}</span>
</div>
})
}
</div>
</div>
</Timeline.Item>
})
}
</Timeline>
}
renderDetail() {
const {
hrmOutside
} = this.props;
let {
config,
dataKey,
table,
onRadioGroupChange
} = hrmOutside;
config = toJS(config);
return <div className="radio-search-group">
{/* <WeaRadioGroup config={config()} onChange={(params)=> {console.debug(1);hrmOutside.radioGroupParams=params;hrmOutside.getData(params)}}/> */}
<WeaRadioGroup ecId={`${this && this.props && this.props.ecId || ''}_WeaRadioGroup@qawhry`} config={toJS(config)} onChange={(params)=> {hrmOutside.radioGroupParams=params;hrmOutside.onRadioGroupChange(params)}}/>
<WeaSearchGroup ecId={`${this && this.props && this.props.ecId || ''}_WeaSearchGroup@2ry8am`} needTigger={true} title={getLabel('19325',"明细表")} showGroup={true}>
<WeaTable ecId={`${this && this.props && this.props.ecId || ''}_WeaTable@r5jcrz`}
comsWeaTableStore={table}
hasOrder={true}
needScroll={true}
getColumns={columns => this.reRenderColumns(columns,hrmOutside)}
/>
</WeaSearchGroup>
</div>
}
reRenderColumns = (columns, store) => {
const {
handleViewClick
} = store;
columns.map(c => {
if (c.dataIndex === 'canViewSignImg') {
c.render = function(text, record) {
const {
randomFieldId,
canViewSignImgspan
} = record;
if (canViewSignImgspan === '1') {
return <a onClick={() => handleViewClick(randomFieldId)}>{getLabel(33564,'查看')}</a>
} else {
return <span />
}
}
}
});
}
renderMap() {
const {
hrmOutside
} = this.props;
let {
mapData
} = hrmOutside;
mapData = toJS(mapData);
if (!isEmpty(mapData)) {
return <Map ecId={`${this && this.props && this.props.ecId || ''}_Map@x9b9e7`} config={mapData} mult/>
} else {
return <div className="grayBG"><WeaAlertPage ecId={`${this && this.props && this.props.ecId || ''}_WeaAlertPage@guvicv`}
icon={<img style={{width: 77, height: 97}} src={addContentPath('/cloudstore/resource/pc/com/images/no_sign.png')}/>}
><div>{getLabel('386505',"当天无外勤签到记录")}</div></WeaAlertPage></div>
}
}
renderContent() {
const {
hrmOutside
} = this.props;
let {
tabkey
} = hrmOutside;
if (tabkey == 1) return this.renderList();
if (tabkey == 2) return this.renderMap();
if (tabkey == 3) return this.renderDetail();
}
getTabButtonsAd() {
const {
hrmOutside
} = this.props;
const {
dataKey
} = hrmOutside;
return [
(<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@h2bec9@1`} type="primary" onClick={()=>{hrmOutside.exportExcel(dataKey)}}>{i18n.button.export()}</Button>),
]
}
showtabs(){
const {
hrmOutside
} = this.props;
let {
tabkey
} = hrmOutside;
return tabkey==3?<OutSideTabkey3 ecId={`${this && this.props && this.props.ecId || ''}_OutSideTabkey3@cpqfjr`} {...this.props}/>:this.renderContent()
}
render() {
const {
hrmOutside
} = this.props;
let {
title,
tabkey,
tabDatas,
loading,
hasRight,
hrmName,
dateTabkey,
dateTabDatas,
dateTabDatas1,
pDate,
showSignInfo,
signTitle,
visible,
positionObj,
getRadioGroupConfig
} = hrmOutside;
tabDatas = tabDatas();
dateTabDatas1 = dateTabDatas1();
dateTabDatas = dateTabDatas();
positionObj = toJS(positionObj);
const errorMsg = getLabel('386507', "你无权查看{params}的外勤数据!").replace('{params}', hrmName);
return (
<div className="wea-hrm-checking wea-hrm-outside">
<WeaPopoverHrm ecId={`${this && this.props && this.props.ecId || ''}_WeaPopoverHrm@jsxngc`} />
<WeaDialog ecId={`${this && this.props && this.props.ecId || ''}_WeaDialog@x45bue`}
visible={visible}
onCancel={()=> {hrmOutside.updateVisible(false);}}
closable
style={{width: 700, height: 500}}
title = {getLabel('386506',"位置详情")}
icon="icon-coms-hrm"
iconBgcolor='#008572'
>
{visible &&<Map ecId={`${this && this.props && this.props.ecId || ''}_Map@axdn1n`} config={positionObj} ref="map1"/>}
</WeaDialog>
<Spin ecId={`${this && this.props && this.props.ecId || ''}_Spin@n2tc87`} spining={loading}>
<WeaRightMenu ecId={`${this && this.props && this.props.ecId || ''}_WeaRightMenu@wiqo47`} datas={this.getRightMenu()}>
<WeaTop ecId={`${this && this.props && this.props.ecId || ''}_WeaTop@2t013k`}
title={title()}
icon={<i className='icon-coms-hrm'/>}
iconBgcolor='#217346'
buttons={[]}
buttonSpace={10}
showDropIcon={true}
dropMenuDatas={this.getRightMenu()}
>
{this.renderLeft()}
<div style={{width: '100%', paddingLeft: 221}}>
<WeaTab ecId={`${this && this.props && this.props.ecId || ''}_WeaTab@02rcfa`}
buttons={tabkey==3 && this.getTabButtonsAd()}
selectedKey={tabkey}
keyParam='key'
datas={tabDatas}
onChange={this.changeTab.bind(this)}
/>
{
tabkey!=3 && <Row ecId={`${this && this.props && this.props.ecId || ''}_Row@f22knl`} className="picker-wrapper">
{tabkey == 1 && dateTabDatas.map((item)=> {
return <Col ecId={`${this && this.props && this.props.ecId || ''}_Col@w553ql@1`} span={1} onClick={this.changeDateTab.bind(this, item.key)} className={`cursor-pointer date-item ${item.key===dateTabkey?'active':'' }`}>
{item.title}
</Col>
}
)}
{tabkey == 2 && dateTabDatas1.map((item)=> {
return <Col ecId={`${this && this.props && this.props.ecId || ''}_Col@74encf@2`} span={1} onClick={this.changeDateTab.bind(this, item.key)} className={`cursor-pointer date-item ${item.key===dateTabkey?'active':'' }`}>
{item.title}
</Col>
}
)}
<Col ecId={`${this && this.props && this.props.ecId || ''}_Col@0c5bq0`} span={13} className="picker">
<WeaDatePicker ecId={`${this && this.props && this.props.ecId || ''}_WeaDatePicker@hjxlz3`} arrow type={dateTabkey == '3' ? 'month': 'day'} date={pDate} onChange={this.changeDate.bind(this)}/>
<i className="icon-coms-Refresh cursor-pointer outside-refresh" onClick={this.reFresh.bind(this)}/>
</Col>
<Col ecId={`${this && this.props && this.props.ecId || ''}_Col@hk28pe`} span={6} className ="checkbox-wrapper" title={signTitle()}>
<WeaCheckbox ecId={`${this && this.props && this.props.ecId || ''}_WeaCheckbox@jyzl9z`} value={showSignInfo} onChange={this.handlerCheckbox.bind(this)}/>
{signTitle()}
</Col>
</Row>
}
<WeaNewScroll ecId={`${this && this.props && this.props.ecId || ''}_WeaNewScroll@ad6pfy`} height={tabkey==3? window.innerHeight - 150 - 35 : window.innerHeight - 150 - 65}>
<div className={`${tabkey == 2 ? 'wea-outside-content': ''}`}>
{!hasRight ? <WeaAlertPage ecId={`${this && this.props && this.props.ecId || ''}_WeaAlertPage@amx6wv`}>
<div>{errorMsg}</div>
</WeaAlertPage>
:
this.showtabs()
// this.renderContent()
// <div>
// {
// tabkey == 1 &&this.renderContent()
// // <OutSideTabkey1 {...this.props} />
// }
// {
// tabkey == 2 &&this.renderContent()
// // <OutSideTabkey2 {...this.props} />
// }
// {
// tabkey == 3 &&
// <OutSideTabkey3 {...this.props}/>
// }
// </div>
}
</div>
</WeaNewScroll>
</div>
</WeaTop>
</WeaRightMenu>
</Spin>
</div>
)
}
}
export default main