@ -8,8 +8,8 @@ import {
Table ,
Spin ,
Checkbox ,
Row ,
Col ,
Modal ,
Input ,
} from 'antd' ;
import { OrgChartComponent } from '@/components/orgChart' ;
import * as d3 from 'd3' ;
@ -18,7 +18,7 @@ import { message } from 'antd';
import jsPDF from 'jspdf' ;
import ExportJsonExcel from 'js-export-excel' ;
import './index.less' ;
import { getLabel } from '../../util/i18n.js' ;
import { i18n } from '../../util/i18n.js' ;
let addNodeChildFunc = null ;
let orgChart = null ;
@ -34,24 +34,27 @@ export default class DrawerComponents extends React.Component {
dataSource : [ ] ,
columns : [ ] ,
spinning : true ,
showJob : false ,
defaultTypeValue : [ 'isBelongTo' ] ,
defaultStatusValue : [ 0 , 1 , 2 , 3 ] ,
disabled : false ,
showJob : true ,
isModalOpen : false ,
jobResponsibility : '' ,
personId : '' ,
jobTitle : '' ,
} ;
}
componentDidMount ( ) { }
/ / 点 击 节 点
onNodeClick ( node ) {
onNodeClick = ( node ) => {
if ( node . ftype == '4' ) {
window . open (
` /spa/hrm/index_mobx.html#/main/hrm/card/cardInfo/ ${ node . id } ` ,
'_blank' ,
) ;
this . setState ( {
jobResponsibility : node . jobResponsibility ,
jobTitle : node . jobTitle ,
isModalOpen : true ,
personId : node . id ,
} ) ;
}
}
} ;
onButtonClick ( event , d ) {
if ( d . children ) {
@ -76,6 +79,7 @@ export default class DrawerComponents extends React.Component {
/ / 获 取 数 据
getDeatilDatas ( params , type = 'chart' , showJob = '1' ) {
const { language } = this . props ;
this . setState ( { spinning : true , data : [ ] , dataSource : [ ] } ) ;
d3 . json (
'/api/bs/hrmorganization/orgchart/getDepartmentDetail?' +
@ -85,9 +89,51 @@ export default class DrawerComponents extends React.Component {
if ( type == 'chart' ) {
this . setState ( { data : data . data , spinning : false } ) ;
} else {
let columns = [
{
dataIndex : 'id' ,
key : 'id' ,
title : ` ${ i18n . table . no [ language ] } ` ,
} ,
{
dataIndex : 'workCode' ,
key : 'workCode' ,
title : ` ${ i18n . table . workCode [ language ] } ` ,
} ,
{
dataIndex : 'lastName' ,
key : 'lastName' ,
title : ` ${ i18n . table . lastName [ language ] } ` ,
} ,
{
dataIndex : 'sex' ,
key : 'sex' ,
title : ` ${ i18n . table . gender [ language ] } ` ,
} ,
{
dataIndex : 'departmentName' ,
key : 'departmentName' ,
title : ` ${ i18n . table . department [ language ] } ` ,
} ,
{
dataIndex : 'subcompanyName' ,
key : 'subcompanyName' ,
title : ` ${ i18n . table . company [ language ] } ` ,
} ,
{
dataIndex : 'jobTitle' ,
key : 'jobTitle' ,
title : ` ${ i18n . table . possition [ language ] } ` ,
} ,
{
dataIndex : 'mobile' ,
key : 'mobile' ,
title : ` ${ i18n . table . mobile [ language ] } ` ,
} ,
] ;
this . setState ( {
dataSource : data . dataSource ,
columns : data . columns ,
columns : columns,
spinning : false ,
} ) ;
}
@ -181,7 +227,7 @@ export default class DrawerComponents extends React.Component {
} ;
handleExport = ( e ) => {
const { la belData } = this . props ;
const { la nguage } = this . props ;
let type = e . key == '1' ? 'png' : e . key == '1' ? 'pdf' : 'excel' ;
if ( type == 'png' ) {
orgChart && orgChart . exportImg ( { full : true } ) ;
@ -208,30 +254,30 @@ export default class DrawerComponents extends React.Component {
}
}
}
option . fileName = ` ${ getLabel( 547468 , labelData ) } ` ;
option . fileName = ` ${ i18n. table . orgInfo [ language ] } ` ;
option . datas = [
{
sheetData : dataTable ,
sheetName : 'sheet' ,
sheetFilter : [
` ${ getLabel ( 547327 , labelData ) } ` ,
` ${ getLabel ( 547328 , labelData ) } ` ,
` ${ getLabel ( 547329 , labelData ) } ` ,
` ${ getLabel ( 547330 , labelData ) } ` ,
` ${ getLabel ( 547331 , labelData ) } ` ,
` ${ getLabel ( 547332 , labelData ) } ` ,
` ${ getLabel ( 547333 , labelData ) } ` ,
` ${ getLabel ( 547334 , labelData ) } ` ,
'序号' ,
'工号' ,
'姓名' ,
'性别' ,
'部门' ,
'分部' ,
'岗位' ,
'手机号' ,
] ,
sheetHeader : [
` ${ getLabel ( 547327 , labelData ) } ` ,
` ${ getLabel ( 547328 , labelData ) } ` ,
` ${ getLabel ( 547329 , labelData ) } ` ,
` ${ getLabel ( 547330 , labelData ) } ` ,
` ${ getLabel ( 547331 , labelData ) } ` ,
` ${ getLabel ( 547332 , labelData ) } ` ,
` ${ getLabel ( 547333 , labelData ) } ` ,
` ${ getLabel ( 547334 , labelData ) } ` ,
i18n . table . no [ language ] ,
i18n . table . workCode [ language ] ,
i18n . table . lastName [ language ] ,
i18n . table . gender [ language ] ,
i18n . table . department [ language ] ,
i18n . table . company [ language ] ,
i18n . table . possition [ language ] ,
i18n . table . mobile [ language ] ,
] ,
} ,
] ;
@ -244,7 +290,7 @@ export default class DrawerComponents extends React.Component {
* 节点渲染
* /
nodeContentRender = ( d , i , arr , state ) => {
const { la belData } = this . props ;
const { la nguage } = this . props ;
if ( d . data . ftype == 2 ) {
return ` <div style="position: relative;">
@ -256,20 +302,24 @@ export default class DrawerComponents extends React.Component {
< / div >
< div style = "display: inline-block; background-size: 100% 100%; width: 35%; height: 90px; text-align:center; vertical-align: top; margin-left: 11px;box-sizing: border;" >
< img src = './img/user-card/avatar-outer.png' style = 'position:absolute;width:90px;height:90px;left:11px' / >
< img src = "./img/department.png" style = "width: 58px; height: 58px;position:absolute;left:29px; border-radius: 50%; margin-top: 16px;position:absolute;left:29px;z-index:999" / >
< img src = " $ {
d . data . fleaderimg
? d . data . fleaderimg
: './img/department.png'
} " style=" width : 58 px ; height : 58 px ; position : absolute ; left : 29 px ; border - radius : 50 % ; margin - top : 16 px ; position : absolute ; left : 29 px ; z - index : 999 " / >
< / div >
< div style = "display: inline-block; margin-left: 6px;width: 55%" >
< div class = "dept-box" style = "font-size: 15px;font-family: Microsoft YaHei-Regular, Microsoft YaHei;font-weight: 900;color: #333333;height: 25px;line-height: 25px;width:110px,white-space:nowrap;overflow:hidden;text-overflow:ellipsis;" >
$ { d . data . fname }
< / div >
< div style = "font-size: 13px;font-family: Microsoft YaHei-Bold, Microsoft YaHei;color: #333333; line-height: 25px;">
$ { getLabel( 547190 , labelData ) } : $ { d . data . fleader }
< div style = "font-size: 13px;font-family: Microsoft YaHei-Bold, Microsoft YaHei;color: #333333; height: 25px; line-height: 25px;">
$ { i18n. head [ language ] } : $ { d . data . fleader }
< / div >
< div style = "display:flex" >
< div style = "height: 25px; line-height: 25px; min-width: 80px;" >
$ { getLabel ( 547323 , labelData ) } : $ {
d. data . fonjob
} $ { getLabel ( 547525 , labelData ) }
$ { i18n . onJob [ language ] } : $ { d . data . fonjob } $ {
i18n. onJob [ language ] == 'cn' ? '人' : ''
}
< / div >
< / div >
< / div >
@ -288,9 +338,9 @@ export default class DrawerComponents extends React.Component {
d . data . fname
} < / div >
< div style = "font-size: 13px;font-family: Microsoft YaHei-Regular, Microsoft YaHei;font-weight: 400;color: #333333;display: flex;height: 25px;line-height: 25px;" >
< span > $ { getLabel( 547323 , labelData ) } : $ {
d. data . fonjob
} $ { getLabel ( 547525 , labelData ) } < / span >
< span > $ { i18n. onJob [ language ] } : $ { d . data . fonjob } $ {
i18n. onJob [ language ] == 'cn' ? '人' : ''
} < / span >
< / div >
< / div >
< / div >
@ -309,19 +359,19 @@ export default class DrawerComponents extends React.Component {
: './img/default_avator.png'
} " style=" width : 58 px ; height : 58 px ; border - radius : 50 % ; margin - top : 16 px ; margin - left : - 6 px ; z - index : 999 " / >
< / div >
< div style = "display: inline-block;width: 55%;height:100%" >
< div style = 'display:flex;align-items:center;height: 25px;line-height: 25px;margin-top:2px' >
< div style = "font-weight: bold;font-size: 14px;ont-family: Microsoft YaHei-Bold, Microsoft YaHei;color: #333333;" >
$ { d . data . fname }
< span style = 'color: red;' > ( $ { d . data . accountType } ) < / span >
< / div >
< div style = "display: inline-block; margin-left: -6px;width: 58%;height:100%;margin-top:-20px;" >
< div style = 'display:flex;align-items:center;height: 25px;line-height: 25px;margin-top:15px' >
< div style = "font-weight: bold;font-size: 15px;ont-family: Microsoft YaHei-Bold, Microsoft YaHei;color: #333333;" > $ {
d . data . fname
} < / div >
< / div >
< div style = "font-size: 13px; margin-top: 5px; font-family: Microsoft YaHei-Regular, Microsoft YaHei;font-weight: 400;color: #333333;display: flex ;height: 25px;line-height: 25px;">
< span > $ { getLabel( 547324 , labelData ) } : $ {
< div style = "font-size: 13px; font-family: Microsoft YaHei-Regular, Microsoft YaHei;font-weight: 400;color: #333333;height: 25px;line-height: 25px;">
< span > $ { i18n. serveAge [ language ] } : $ {
d . data . companyWorkYear
} $ { getLabel ( 547526 , labelData ) } < / span >
} $ { i18n . year [ language ] } < / span >
< div > $ { i18n . postion [ language ] } : $ { d . data . jobTitle } < / div >
< div > $ { i18n . level [ language ] } : $ { d . data . level } < / div >
< / div >
< / div >
< / div >
< / div > ` ;
@ -329,81 +379,38 @@ export default class DrawerComponents extends React.Component {
} ;
showDrawer = ( params ) => {
const { defaultStatusValue , defaultTypeValue } = this . state ;
params = {
... params ,
typeValue : defaultTypeValue . join ( ',' ) ,
statusValue : defaultStatusValue . join ( ',' ) ,
} ;
this . getDeatilDatas ( params , 'chart' , '0' ) ;
const showJob = params . fclass == '0' ? '1' : '0' ;
this . getDeatilDatas ( params , 'chart' , showJob ) ;
this . setState ( { open : true , params : params } ) ;
} ;
onClose = ( ) => {
const { params } = this . state ;
this . setState ( {
open : false ,
detailType : 'chart' ,
showJob : false ,
defaultStatusValue : [ 0 , 1 , 2 , 3 ] ,
defaultTypeValue : [ 'isBelongTo' ] ,
disabled : false ,
showJob : params . fclass == '0' ? 'true' : 'false' ,
} ) ;
} ;
changeDetail = ( ) => {
const { detailType , params , defaultTypeValue , defaultStatusValue } =
this . state ;
const newParam = {
... params ,
typeValue : defaultTypeValue . join ( ',' ) ,
statusValue : defaultStatusValue . join ( ',' ) ,
} ;
const { detailType , params } = this . state ;
let type = detailType == 'chart' ? 'table' : 'chart' ;
const showJob = this . state . showJob ? '1' : '0' ;
this . setState ( {
detailType : type ,
} ) ;
this . getDeatilDatas ( newParam , type , showJob ) ;
} ;
onStatusChange = ( checkedValues ) => {
const { labelData } = this . props ;
if ( checkedValues . length === 0 ) {
return message . error ( ` ${ getLabel ( 547728 , labelData ) } ` , 2 ) ;
}
this . setState ( {
defaultStatusValue : checkedValues ,
} ) ;
const { defaultTypeValue , params , detailType } = this . state ;
const showJob = this . state . showJob ? '1' : '0' ;
const nParam = {
... params ,
statusValue : checkedValues . join ( ',' ) ,
typeValue : defaultTypeValue . join ( ',' ) ,
} ;
this . getDeatilDatas ( nParam , detailType , showJob ) ;
} ;
onTypeChange = ( checkedValues ) => {
const { labelData } = this . props ;
if ( this . state . showJob ) {
return message . error ( ` ${ getLabel ( 547729 , labelData ) } ` , 2 ) ;
var showJob = '1' ;
if ( params . fclass == '0' ) {
showJob = this . state . showJob ? '1' : '0' ;
} else {
showJob = '0' ;
}
this . setState ( {
defaultTypeValue : checkedValues ,
disabled : checkedValues . includes ( 'isManager' ) ? true : false ,
detailType : type ,
} ) ;
const { defaultStatusValue , params , detailType } = this . state ;
const showJob = this . state . showJob ? '1' : '0' ;
const nParam = {
... params ,
statusValue : defaultStatusValue . join ( ',' ) ,
typeValue : checkedValues . join ( ',' ) ,
} ;
this . getDeatilDatas ( nParam , detailType , showJob ) ;
this . getDeatilDatas ( params , type , showJob ) ;
} ;
render ( ) {
const { language } = this . props ;
const {
params ,
open ,
@ -413,43 +420,25 @@ export default class DrawerComponents extends React.Component {
columns ,
spinning ,
showJob ,
defaultStatusValue ,
defaultTypeValue ,
disabled ,
jobResponsibility ,
jobTitle ,
isModalOpen ,
personId ,
} = this . state ;
let arr = [ ] ;
const { labelData } = this . props ;
const optionsType = [
{ label : ` ${ getLabel ( 547715 , labelData ) } ` , value : 'isManager' } ,
{ label : ` ${ getLabel ( 547716 , labelData ) } ` , value : 'isBelongTo' } ,
] ;
const optionsStatus = [
{ label : ` ${ getLabel ( 547718 , labelData ) } ` , value : 0 } ,
{ label : ` ${ getLabel ( 547719 , labelData ) } ` , value : 1 } ,
{ label : ` ${ getLabel ( 547720 , labelData ) } ` , value : 2 } ,
{ label : ` ${ getLabel ( 547721 , labelData ) } ` , value : 3 } ,
{ label : ` ${ getLabel ( 547722 , labelData ) } ` , value : 4 } ,
{ label : ` ${ getLabel ( 547723 , labelData ) } ` , value : 5 } ,
{ label : ` ${ getLabel ( 547724 , labelData ) } ` , value : 6 } ,
{ label : ` ${ getLabel ( 547725 , labelData ) } ` , value : 7 } ,
] ;
if ( detailType == 'chart' ) {
arr . push ( { label : ` ${ getLabel( 547315 , labelData ) } ` , key : '1' } ) ;
arr . push ( { label : ` ${ i18n . exportImage [ language ] } ` , key : '1' } ) ;
/ / a r r . p u s h ( { l a b e l : ' 导 出 P D F ' , k e y : ' 2 ' } ) ;
} else {
arr . push ( { label : ` ${ getLabel( 547448 , labelData ) } ` , key : '3' } ) ;
arr . push ( { label : ` ${ i18n . exportTable [ language ] } ` , key : '3' } ) ;
}
const menu = < Menu onClick = { this . handleExport . bind ( this ) } items = { arr } / > ;
return (
< Drawer
title = { getLabel( 547321 , labelData ) }
width = { 1 2 00}
title = { i18n . detailInfo [ language ] }
width = { 1100 }
onClose = { this . onClose }
open = { open }
bodyStyle = { {
@ -461,97 +450,91 @@ export default class DrawerComponents extends React.Component {
< Checkbox
style = { { marginTop : '5px' , marginLeft : 100 } }
checked = { showJob }
disabled = { disabled }
onChange = { ( e ) => {
this . setState ( {
showJob : e . target . checked ,
} ) ;
const newParam = {
... params ,
statusValue : defaultStatusValue . join ( ',' ) ,
typeValue : defaultTypeValue . join ( ',' ) ,
} ;
this . getDeatilDatas (
newParam ,
params ,
detailType ,
e . target . checked ? '1' : '0' ,
) ;
} }
>
{ getLabel( 547447 , labelData ) }
{ i18n. showJob [ language ] }
< / Checkbox >
) }
< Dropdown overlay = { menu } >
< Button type = "primary" > { getLabel( 547314 , labelData ) } < / Button >
< Button type = "primary" > { i18n. export [ language ] } < / Button >
< / Dropdown >
< Button type = "primary" onClick = { this . changeDetail } >
{ getLabel ( 547326 , labelData ) }
< / Button >
< img
style = { { width : 36 , height : 36 , cursor : 'pointer' } }
src = "./img/change.png"
onClick = { this . changeDetail }
/ >
< / Space >
}
>
< >
{ detailType == 'chart' && (
< Row style = { { margin : '20px 20px 0px 20px' } } >
< Col span = { 2 } > { getLabel ( 547714 , labelData ) } : < / Col >
< Col span = { 22 } >
< Checkbox.Group
options = { optionsType }
value = { defaultTypeValue }
onChange = { this . onTypeChange }
/ >
< / Col >
< / Row >
) }
< Row style = { { margin : '10px 20px 10px 20px' } } >
< Col span = { 2 } > { getLabel ( 547717 , labelData ) } : < / Col >
< Col span = { 22 } >
< Checkbox.Group
options = { optionsStatus }
value = { defaultStatusValue }
onChange = { this . onStatusChange }
{ detailType == 'chart' ? (
< div className = "svg-container" >
< Spin
size = "large"
spinning = { spinning }
tip = "正在读取数据...."
className = "loading-center"
/ >
{ data . length > 0 && (
< OrgChartComponent
setChart = { ( chart ) => ( orgChart = chart ) }
setClick = { ( click ) => ( addNodeChildFunc = click ) }
onNodeClick = { this . onNodeClick }
onButtonClick = { this . onButtonClick }
data = { data }
buttonContent = { this . buttonContentRender }
nodeWidth = { this . nodeWidthRender }
nodeHeight = { this . nodeHeightRender }
nodeContent = { this . nodeContentRender }
/ >
< / Col >
< / Row >
{ detailType == 'chart' ? (
< div className = "svg-container" >
< Spin
size = "large"
spinning = { spinning }
tip = { getLabel ( 547320 , labelData ) }
className = "loading-center"
/ >
{ data . length > 0 && (
< OrgChartComponent
setChart = { ( chart ) => ( orgChart = chart ) }
setClick = { ( click ) => ( addNodeChildFunc = click ) }
onNodeClick = { this . onNodeClick }
onButtonClick = { this . onButtonClick }
data = { data }
buttonContent = { this . buttonContentRender }
nodeWidth = { this . nodeWidthRender }
nodeHeight = { this . nodeHeightRender }
nodeContent = { this . nodeContentRender }
/ >
) }
< / div >
) : (
< div style = { { padding : '0 20px' } } >
< Table
dataSource = { dataSource }
columns = { columns }
loading = { spinning }
pagination = { {
showSizeChanger : false ,
showTotal : ( total ) =>
` ${ getLabel ( 547523 , labelData ) } ${
dataSource . length
} $ { getLabel ( 547524 , labelData ) } ` ,
} }
/ >
< / div >
) }
< / >
) }
< / div >
) : (
< div style = { { padding : '0 20px' } } >
< Table
dataSource = { dataSource }
columns = { columns }
scroll = { { y : 500 } }
loading = { spinning }
pagination = { {
locale : {
/ / 翻 页 文 本 替 换
items _per _page : '条/页' ,
jump _to : '跳至' ,
page : '页' ,
} ,
showTotal : ( total ) =>
language == 'cn'
? ` 共 ${ dataSource . length } 条 `
: ` ${ dataSource . length } ${ i18n . table . records [ language ] } ${ i18n . table . total [ language ] } ` ,
} }
/ >
< / div >
) }
< Modal
title = { ` ${ i18n . postionInfo [ language ] } - ${ jobTitle } ` }
open = { isModalOpen }
onCancel = { ( ) => this . setState ( { isModalOpen : false } ) }
footer = { [
< Button
key = "back"
onClick = { ( ) => this . setState ( { isModalOpen : false } ) }
>
{ i18n . close [ language ] }
< / Button > ,
] }
>
< div style = { { whiteSpace : 'pre-line' } } > { jobResponsibility } < / div >
< / Modal >
< / Drawer >
) ;
}