import styles from './index.less'; import React, { useEffect, useState } from "react"; import {OrgChartComponent} from '@/components/orgChart' import * as d3 from 'd3'; import { TopBar } from '../components/topBar'; import ToolBar from '../components/toolBar'; import moment from "moment"; import qs from 'qs'; export default function userPage() { const [data, setData] = useState(null); const [progressTop, setProgressTop] = useState(50); let addNodeChildFunc = null; let orgChart = null; let progressBtnRef = null; // 点击节点 function onNodeClick(nodeId) { // alert('clicked ' + nodeId); } // 获取部门图片 function getDepartmentImage() { let index = Math.floor(Math.random() * 8) + 1 return `./img/department/${index}.png` } // 获取部门图片 function getSubcompanyImage() { let index = Math.floor(Math.random() * 3) + 1 return `./img/subcompany/${index}.png` } // 获取数据 useEffect(() => { d3.json( // "/user/data" "/api/bs/hrmorganization/orgchart/userData?fclass=0&root=0&date=" + moment(new Date()).format("YYYY-MM-DD") ).then(data => { setData(data.data); }); }, [true]); // ButtonContent渲染 const buttonContentRender = ({ node, state }) => { return `
` } // 节点宽度渲染 const nodeWidthRender = d => { return 280; } const nodeHeightRender = d => { return 160; } // tool bar start const handleTopLayoutClick = (progressBtn) => { progressBtn.current.style.top= 50 + "px"; orgChart && orgChart.layout('top').render().fit(); } const handleLeftLayoutClick = (progressBtn) => { progressBtn.current.style.top= 50 + "px"; orgChart && orgChart.layout('left').render().fit(); } const handleZoomIn = (progressBtn) => { if(progressBtn) { let top = (parseInt(progressBtn.current.style.top) - 10) if(top <= 0) { top = 30; } progressBtn.current.style.top = top + "px"; } orgChart && orgChart.zoomIn(); } const handleZoomOut = (progressBtn) => { if(progressBtn) { let top = (parseInt(progressBtn.current.style.top) + 10) if(top >= 100) { top = 70; } progressBtn.current.style.top = top + "px"; } orgChart && orgChart.zoomOut(); } // tool bar end // top bar start function downloadPdf(chart) { chart.exportImg({ save: false, onLoad: (base64) => { var pdf = new jsPDF(); var img = new Image(); img.src = base64; img.onload = function () { pdf.addImage( img, 'JPEG', 5, 5, 595 / 3, ((img.height / img.width) * 595) / 3 ); pdf.save('chart.pdf'); }; }, }); } const handleExport = (type) => { if(type == "png") { orgChart && orgChart.exportImg({full:true}); } else { orgChart && downloadPdf(orgChart) } } const handleSearch = (requestData) => { let api = "/api/bs/hrmorganization/orgchart/jcl/orgchart/userData" + qs.stringify(requestData, {addQueryPrefix: true}) fetch(api).then(res => res.json()).then(data => { setData(data.data) }) } // top bar end const nodeContentRender = (d, i, arr, state) => { if(d.data.ftype == 0 || d.data.ftype == 1 || d.data.ftype == 2) { return `
${d.data.fname}
${d.data.fleadername}
${d.data.fname} / ${d.data.fleaderjob}
编制: ${d.data.fplan}
在岗: ${d.data.fonjob}
` } else if(d.data.ftype == 3) { return `
${d.data.fname}
${d.data.fname}
编制:${d.data.fplan} 在岗:${d.data.fonjob}
` } else if(d.data.ftype == 4) { return `
${d.data.fname}
${d.data.department} / ${d.data.fleaderjob}
${d.data.mobile}
地址:${d.data.address}
` } } return (
{handleExport()}} onSearch={(requestData) => {handleSearch(requestData)}} url="/api/bs/hrmorganization/orgchart/getCondition?type=user" /> handleTopLayoutClick(progressBtn)} onLeftLayoutClick={(progressBtn) => handleLeftLayoutClick(progressBtn)} onZoomOut={(progressBtn) => handleZoomOut(progressBtn)} onZoomIn={(progressBtn) => handleZoomIn(progressBtn)} /> orgChart = chart} setClick={click => (addNodeChildFunc = click)} onNodeClick={onNodeClick} data={data} buttonContent={ buttonContentRender } nodeWidth={nodeWidthRender} nodeHeight={nodeHeightRender} nodeContent={nodeContentRender} />
); }