Merge pull request '组织快捷调整页面' (#5) from feature/cl into master
Reviewed-on: http://221.226.25.34:3000/liang.cheng/org-chart-frant/pulls/5
This commit is contained in:
commit
038c6fef3c
|
|
@ -1,7 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="449daba1-1dd3-4ffd-906d-6ef641fb81de" name="Default Changelist" comment="" />
|
||||
<list default="true" id="449daba1-1dd3-4ffd-906d-6ef641fb81de" name="Default Changelist" comment="">
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.umirc.ts" beforeDir="false" afterPath="$PROJECT_DIR$/.umirc.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/d3-org-chart.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/d3-org-chart.js" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/company.jsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/company.jsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/index.less" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/index.less" afterDir="false" />
|
||||
</list>
|
||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
|
|
@ -9,13 +15,34 @@
|
|||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="FileEditorManager">
|
||||
<leaf>
|
||||
<file pinned="false" current-in-tab="true">
|
||||
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/src/d3-org-chart.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state>
|
||||
<state relative-caret-position="-20">
|
||||
<folding>
|
||||
<element signature="e#0#49#0" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/src/components/dialog/index.jsx">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-2297">
|
||||
<folding>
|
||||
<element signature="e#0#26#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
|
|
@ -320,9 +347,9 @@
|
|||
<foldersAlwaysOnTop value="true" />
|
||||
</navigator>
|
||||
<panes>
|
||||
<pane id="Scope" />
|
||||
<pane id="PackagesPane" />
|
||||
<pane id="CatdeaLogs" />
|
||||
<pane id="Scope" />
|
||||
<pane id="ProjectPane">
|
||||
<subPane>
|
||||
<expand>
|
||||
|
|
@ -335,6 +362,19 @@
|
|||
<item name="org-chart-frant" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="org-chart-frant" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="org-chart-frant" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="components" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="org-chart-frant" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="org-chart-frant" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="components" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="dialog" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
</expand>
|
||||
<select />
|
||||
</subPane>
|
||||
|
|
@ -344,7 +384,7 @@
|
|||
<component name="PropertiesComponent">
|
||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||
<property name="aspect.path.notification.shown" value="true" />
|
||||
<property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1689842769496" />
|
||||
<property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1690341396252" />
|
||||
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
|
||||
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
|
||||
<property name="project.structure.last.edited" value="Project" />
|
||||
|
|
@ -378,30 +418,25 @@
|
|||
<option name="presentableId" value="Default" />
|
||||
<updated>1689842546961</updated>
|
||||
<workItem from="1689842557088" duration="205000" />
|
||||
<workItem from="1690192167781" duration="39000" />
|
||||
<workItem from="1690341272941" duration="164000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TimeTrackingManager">
|
||||
<option name="totallyTimeSpent" value="205000" />
|
||||
<option name="totallyTimeSpent" value="408000" />
|
||||
</component>
|
||||
<component name="ToolWindowManager">
|
||||
<frame x="0" y="28" width="1440" height="872" extended-state="0" />
|
||||
<frame x="0" y="0" width="1440" height="900" extended-state="0" />
|
||||
<layout>
|
||||
<window_info id="JRebel" side_tool="true" />
|
||||
<window_info id="Image Layers" />
|
||||
<window_info id="UI Designer" />
|
||||
<window_info id="Favorites" side_tool="true" />
|
||||
<window_info id="Capture Tool" />
|
||||
<window_info id="Designer" />
|
||||
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.24964234" />
|
||||
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.25679544" />
|
||||
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
|
||||
<window_info anchor="bottom" id="Event Log" side_tool="true" />
|
||||
<window_info anchor="bottom" id="Terminal" />
|
||||
<window_info anchor="bottom" id="Messages" />
|
||||
<window_info anchor="bottom" id="Database Changes" show_stripe_button="false" />
|
||||
<window_info anchor="bottom" id="Version Control" />
|
||||
<window_info anchor="bottom" id="Docker" show_stripe_button="false" />
|
||||
<window_info anchor="bottom" id="JRebel Console" side_tool="true" />
|
||||
<window_info id="JRebel" order="2" side_tool="true" />
|
||||
<window_info id="Image Layers" order="3" />
|
||||
<window_info id="Capture Tool" order="4" />
|
||||
<window_info id="UI Designer" order="5" />
|
||||
<window_info id="Favorites" order="6" side_tool="true" />
|
||||
<window_info id="Designer" order="7" />
|
||||
<window_info anchor="bottom" id="Message" order="0" />
|
||||
<window_info anchor="bottom" id="Find" order="1" />
|
||||
<window_info anchor="bottom" id="Run" order="2" />
|
||||
|
|
@ -409,30 +444,66 @@
|
|||
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
|
||||
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
|
||||
<window_info anchor="bottom" id="TODO" order="6" />
|
||||
<window_info anchor="right" id="Palette" />
|
||||
<window_info anchor="right" id="Capture Analysis" />
|
||||
<window_info anchor="right" id="aiXcoder" />
|
||||
<window_info anchor="right" id="Maven Projects" />
|
||||
<window_info anchor="right" id="Database" />
|
||||
<window_info anchor="right" id="Palette	" />
|
||||
<window_info anchor="right" id="Theme Preview" />
|
||||
<window_info anchor="bottom" id="Event Log" order="7" side_tool="true" />
|
||||
<window_info anchor="bottom" id="Terminal" order="8" />
|
||||
<window_info anchor="bottom" id="Docker" order="9" show_stripe_button="false" />
|
||||
<window_info anchor="bottom" id="Messages" order="10" />
|
||||
<window_info anchor="bottom" id="Database Changes" order="11" show_stripe_button="false" />
|
||||
<window_info active="true" anchor="bottom" id="Version Control" order="12" visible="true" weight="0.32891566" />
|
||||
<window_info anchor="bottom" id="JRebel Console" order="13" side_tool="true" />
|
||||
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
|
||||
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
|
||||
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
|
||||
<window_info anchor="right" id="Palette" order="3" />
|
||||
<window_info anchor="right" id="Capture Analysis" order="4" />
|
||||
<window_info anchor="right" id="Maven Projects" order="5" />
|
||||
<window_info anchor="right" id="aiXcoder" order="6" />
|
||||
<window_info anchor="right" id="Database" order="7" />
|
||||
<window_info anchor="right" id="Palette	" order="8" />
|
||||
<window_info anchor="right" id="Theme Preview" order="9" />
|
||||
</layout>
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="1" />
|
||||
</component>
|
||||
<component name="Vcs.Log.History.Properties">
|
||||
<option name="COLUMN_ORDER">
|
||||
<list>
|
||||
<option value="0" />
|
||||
<option value="2" />
|
||||
<option value="3" />
|
||||
<option value="1" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="VcsContentAnnotationSettings">
|
||||
<option name="myLimit" value="2678400000" />
|
||||
</component>
|
||||
<component name="editorHistoryManager">
|
||||
<entry file="file://$PROJECT_DIR$/src/d3-org-chart.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state>
|
||||
<state relative-caret-position="-20">
|
||||
<folding>
|
||||
<element signature="e#0#49#0" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/src/components/dialog/index.jsx">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-2297">
|
||||
<folding>
|
||||
<element signature="e#0#26#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
|
|
|
|||
|
|
@ -1,11 +1,3 @@
|
|||
/*
|
||||
* @Author: Chengliang 1546584672@qq.com
|
||||
* @Date: 2022-08-04 10:22:55
|
||||
* @LastEditors: Chengliang 1546584672@qq.com
|
||||
* @LastEditTime: 2023-07-24 09:57:14
|
||||
* @FilePath: /org-chart-frant/.umirc.ts
|
||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
*/
|
||||
import { defineConfig } from 'umi';
|
||||
|
||||
export default defineConfig({
|
||||
|
|
@ -20,6 +12,7 @@ export default defineConfig({
|
|||
routes: [
|
||||
{ path: '/user', component: '@/pages/user' },
|
||||
{ path: '/company', component: '@/pages/company' },
|
||||
{ path: '/dragtree', component: '@/pages/dragTree' },
|
||||
],
|
||||
fastRefresh: {},
|
||||
antd: {},
|
||||
|
|
|
|||
|
|
@ -28,29 +28,6 @@ export default class OperateDialog extends React.Component {
|
|||
this.setState({ open: false });
|
||||
message.success('操作成功');
|
||||
}, 200);
|
||||
// if (description.length == 0) {
|
||||
// return message.error('请填写描述信息');
|
||||
// }
|
||||
// this.setState({ confirmLoading: true });
|
||||
// let api =
|
||||
// '/api/bs/hrmorganization/orgchart/versionRecord?fclass=' +
|
||||
// requestData.fclass +
|
||||
// '&description=' +
|
||||
// description;
|
||||
// fetch(api)
|
||||
// .then((res) => res.json())
|
||||
// .then((data) => {
|
||||
// if (data.api_status) {
|
||||
// this.setState({
|
||||
// open: false,
|
||||
// confirmLoading: false,
|
||||
// description: '',
|
||||
// });
|
||||
// message.success('版本记录成功,请重新刷新页面', 2, 3);
|
||||
// } else {
|
||||
// message.error('版本记录失败,请联系相关人员处理数据', 2, 3);
|
||||
// }
|
||||
// });
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -230,8 +230,8 @@ export class OrgChart {
|
|||
top: {
|
||||
nodeLeftX: (node) => -node.width / 2,
|
||||
nodeRightX: (node) => node.width / 2,
|
||||
nodeTopY: (node) => 0,
|
||||
// "nodeTopY": node => node.height/0.4,
|
||||
//nodeTopY: (node) => 0,
|
||||
nodeTopY: (node) => node.height / 0.3,
|
||||
nodeBottomY: (node) => node.height,
|
||||
nodeJoinX: (node) => node.x - node.width / 2,
|
||||
nodeJoinY: (node) => node.y + node.height,
|
||||
|
|
@ -509,7 +509,9 @@ export class OrgChart {
|
|||
// Get zooming function
|
||||
behaviors.zoom = d3
|
||||
.zoom()
|
||||
.on('zoom', (event, d) => this.zoomed(event, d))
|
||||
.on('zoom', (event, d) => {
|
||||
this.zoomed(event, d);
|
||||
})
|
||||
.scaleExtent(attrs.scaleExtent);
|
||||
attrs.zoomBehavior = behaviors.zoom;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ export default function companyPage() {
|
|||
// 节点宽度渲染
|
||||
const nodeWidthRender = (d) => {
|
||||
if (d.data.ftype == 0) {
|
||||
return 1000;
|
||||
return 220;
|
||||
} else if (d.data.ftype == 1) {
|
||||
return 160;
|
||||
} else if (d.data.ftype == 2) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,156 @@
|
|||
import { Tree, message } from 'antd';
|
||||
import React, { useEffect, useState, useRef } from 'react';
|
||||
import * as d3 from 'd3';
|
||||
import qs from 'qs';
|
||||
|
||||
import { HomeOutlined, FolderOutlined } from '@ant-design/icons';
|
||||
|
||||
import './index.less';
|
||||
|
||||
const DragTree = () => {
|
||||
const [gData, setGData] = useState([]);
|
||||
const [expandedKeys, setExpandedKeys] = useState([]);
|
||||
|
||||
useEffect(() => {
|
||||
d3.json('/api/bs/hrmorganization/orgchart/getMovingTree').then((data) => {
|
||||
setGData(data.movingTree);
|
||||
setExpandedKeys(data.expandedKeys);
|
||||
});
|
||||
}, [true]);
|
||||
|
||||
const onDragEnter = (info) => {
|
||||
//console.log(info);
|
||||
// expandedKeys 需要受控时设置
|
||||
// setExpandedKeys(info.expandedKeys)
|
||||
};
|
||||
|
||||
const onDrop = (info) => {
|
||||
debugger;
|
||||
//弹框操作
|
||||
const dropKey = info.node.key;
|
||||
const dragKey = info.dragNode.key;
|
||||
const dropPos = info.node.pos.split('-');
|
||||
const dropPosition =
|
||||
info.dropPosition - Number(dropPos[dropPos.length - 1]);
|
||||
const loop = (data, key, callback) => {
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
if (data[i].key === key) {
|
||||
return callback(data[i], i, data);
|
||||
}
|
||||
if (data[i].children) {
|
||||
loop(data[i].children, key, callback);
|
||||
}
|
||||
}
|
||||
};
|
||||
const data = [...gData];
|
||||
|
||||
// Find dragObject
|
||||
let dragObj;
|
||||
loop(data, dragKey, (item, index, arr) => {
|
||||
arr.splice(index, 1);
|
||||
dragObj = item;
|
||||
});
|
||||
if (!info.dropToGap) {
|
||||
// Drop on the content
|
||||
loop(data, dropKey, (item) => {
|
||||
item.children = item.children || [];
|
||||
// where to insert 示例添加到头部,可以是随意位置
|
||||
item.children.unshift(dragObj);
|
||||
});
|
||||
} else if (
|
||||
(info.node.props.children || []).length > 0 &&
|
||||
// Has children
|
||||
info.node.props.expanded &&
|
||||
// Is expanded
|
||||
dropPosition === 1 // On the bottom gap
|
||||
) {
|
||||
loop(data, dropKey, (item) => {
|
||||
item.children = item.children || [];
|
||||
// where to insert 示例添加到头部,可以是随意位置
|
||||
item.children.unshift(dragObj);
|
||||
// in previous version, we use item.children.push(dragObj) to insert the
|
||||
// item to the tail of the children
|
||||
});
|
||||
} else {
|
||||
let ar = [];
|
||||
let i;
|
||||
loop(data, dropKey, (_item, index, arr) => {
|
||||
ar = arr;
|
||||
i = index;
|
||||
});
|
||||
if (dropPosition === -1) {
|
||||
ar.splice(i, 0, dragObj);
|
||||
} else {
|
||||
ar.splice(i + 1, 0, dragObj);
|
||||
}
|
||||
}
|
||||
setGData(data);
|
||||
};
|
||||
|
||||
const onDelete = (nodeData) => {
|
||||
const extend = nodeData.type == '1' ? 'comp' : 'dept';
|
||||
d3.json(`/api/bs/hrmorganization/${extend}/deleteByIds`)
|
||||
.header('Content-Type', 'application/json')
|
||||
.post(JSON.stringify({ ids: nodeData.id }))
|
||||
.then(function (response) {
|
||||
message.success('删除成功');
|
||||
})
|
||||
.catch(function (error) {
|
||||
message.error('接口异常,请联系管理员');
|
||||
});
|
||||
};
|
||||
|
||||
const onTitleRender = (nodeData) => {
|
||||
let extend = nodeData.type == '1' ? 'companyExtend' : 'departmentExtend';
|
||||
let attr = nodeData.type == '1' ? 'none' : 'inline-block';
|
||||
let icon = nodeData.type == '1' ? <HomeOutlined /> : <FolderOutlined />;
|
||||
return (
|
||||
<div>
|
||||
<span>
|
||||
{icon}
|
||||
<span style={{ marginLeft: '5px' }}>{nodeData.title}</span>
|
||||
</span>
|
||||
<div id="drag-button-ops">
|
||||
<span
|
||||
className="drag-button"
|
||||
onClick={() =>
|
||||
window.open(
|
||||
`/spa/organization/static/index.html#/main/organization/${extend}/${nodeData.id}`,
|
||||
'_blank',
|
||||
)
|
||||
}
|
||||
>
|
||||
查看
|
||||
</span>
|
||||
<span className="drag-button" onClick={onDelete(nodeData)}>
|
||||
删除
|
||||
</span>
|
||||
<span className="drag-button" onClick={onDelete(nodeData)}>
|
||||
封存
|
||||
</span>
|
||||
<span style={{ display: attr }} className="drag-button">
|
||||
合并
|
||||
</span>
|
||||
<span style={{ display: attr }} className="drag-button">
|
||||
复制
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<Tree
|
||||
className="draggable-tree"
|
||||
defaultExpandedKeys={expandedKeys}
|
||||
draggable
|
||||
icon={false}
|
||||
blockNode
|
||||
onDragEnter={onDragEnter}
|
||||
onDrop={onDrop}
|
||||
treeData={gData}
|
||||
titleRender={onTitleRender}
|
||||
/>
|
||||
);
|
||||
};
|
||||
export default DragTree;
|
||||
|
|
@ -9,3 +9,30 @@
|
|||
.contentWrapper {
|
||||
background-color: #f7f9fd;
|
||||
}
|
||||
|
||||
.ant-tree .ant-tree-node-content-wrapper:hover {
|
||||
background-color: #e6f7ff;
|
||||
}
|
||||
|
||||
.ant-tree .ant-tree-node-content-wrapper:hover #drag-button-ops {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
#drag-button-ops {
|
||||
display: none;
|
||||
width: 500px;
|
||||
height: 16px;
|
||||
font-size: 12px;
|
||||
line-height: 16px;
|
||||
margin-left: 100px;
|
||||
.drag-button {
|
||||
display: inline-block;
|
||||
padding: 0 10px;
|
||||
color: #333;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.drag-button:hover {
|
||||
color: #22c8fb;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ export default function userPage() {
|
|||
// 获取数据
|
||||
useEffect(() => {
|
||||
document.cookie =
|
||||
'ecology_JSessionid=aaauntrtgZdkuanT5w2Ly; JSESSIONID=aaauntrtgZdkuanT5w2Ly; loginidweaver=1; languageidweaver=7; loginuuids=1; __randcode__=c5235342-7633-4eec-a754-b36eefdf8c9e';
|
||||
'ecology_JSessionid=aaaqxkKrIiwa59VyYrwMy; JSESSIONID=aaaqxkKrIiwa59VyYrwMy; loginidweaver=1; languageidweaver=7; loginuuids=1; __randcode__=61884b51-d206-4953-8fd2-78cfc6cc7044';
|
||||
d3.json(
|
||||
// "/user/data"
|
||||
'/api/bs/hrmorganization/orgchart/userData?fclass=0&fisvitual=0&root=0&level=3&id=0',
|
||||
|
|
|
|||
Loading…
Reference in New Issue