Compare commits
13 Commits
master
...
上海中远重工组织架构图
| Author | SHA1 | Date |
|---|---|---|
|
|
09f40644a7 | |
|
|
1b7605aaee | |
|
|
f792f93287 | |
|
|
3feb5c33dc | |
|
|
a4ecbb9aab | |
|
|
1ae27893ab | |
|
|
9a3c3141df | |
|
|
df21ceb502 | |
|
|
7ac5656df7 | |
|
|
86c83263e7 | |
|
|
fd31f9370a | |
|
|
156e801980 | |
|
|
e100a542e1 |
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding" native2AsciiForPropertiesFiles="true" defaultCharsetForPropertiesFiles="UTF-8" />
|
||||
</project>
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="JavaDoc" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="TOP_LEVEL_CLASS_OPTIONS">
|
||||
<value>
|
||||
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
|
||||
<option name="REQUIRED_TAGS" value="" />
|
||||
</value>
|
||||
</option>
|
||||
<option name="INNER_CLASS_OPTIONS">
|
||||
<value>
|
||||
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
|
||||
<option name="REQUIRED_TAGS" value="" />
|
||||
</value>
|
||||
</option>
|
||||
<option name="METHOD_OPTIONS">
|
||||
<value>
|
||||
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
|
||||
<option name="REQUIRED_TAGS" value="@return@param@throws or @exception" />
|
||||
</value>
|
||||
</option>
|
||||
<option name="FIELD_OPTIONS">
|
||||
<value>
|
||||
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
|
||||
<option name="REQUIRED_TAGS" value="" />
|
||||
</value>
|
||||
</option>
|
||||
<option name="IGNORE_DEPRECATED" value="false" />
|
||||
<option name="IGNORE_JAVADOC_PERIOD" value="true" />
|
||||
<option name="IGNORE_DUPLICATED_THROWS" value="false" />
|
||||
<option name="IGNORE_POINT_TO_ITSELF" value="false" />
|
||||
<option name="myAdditionalJavadocTags" value="date" />
|
||||
</inspection_tool>
|
||||
</profile>
|
||||
</component>
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="JavaScriptSettings">
|
||||
<option name="languageLevel" value="JSX" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="10" project-jdk-type="JavaSDK" />
|
||||
</project>
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/org-chart-frant.iml" filepath="$PROJECT_DIR$/.idea/org-chart-frant.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -1,593 +0,0 @@
|
|||
<?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="">
|
||||
<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/dragTree.jsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/dragTree.jsx" afterDir="false" />
|
||||
</list>
|
||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="FileEditorManager">
|
||||
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
|
||||
<file pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/src/d3-org-chart.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-146">
|
||||
<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>
|
||||
</leaf>
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
|
||||
<component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
|
||||
<component name="JsGulpfileManager">
|
||||
<detection-done>true</detection-done>
|
||||
<sorting>DEFINITION_ORDER</sorting>
|
||||
</component>
|
||||
<component name="NodeModulesDirectoryManager">
|
||||
<handled-path value="$PROJECT_DIR$/node_modules" />
|
||||
</component>
|
||||
<component name="NodePackageJsonFileManager">
|
||||
<packageJsonPaths>
|
||||
<path value="$PROJECT_DIR$/package.json" />
|
||||
</packageJsonPaths>
|
||||
</component>
|
||||
<component name="ProjectFrameBounds" fullScreen="true">
|
||||
<option name="x" value="1440" />
|
||||
<option name="width" value="1920" />
|
||||
<option name="height" value="1080" />
|
||||
</component>
|
||||
<component name="ProjectInspectionProfilesVisibleTreeState">
|
||||
<entry key="Project Default">
|
||||
<profile-state>
|
||||
<expanded-state>
|
||||
<State />
|
||||
<State>
|
||||
<id>ActionScript specificJavaScript</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Android</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Ant</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Batch Applications</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>CFML</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>CSS</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Class structureJava</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Code quality toolsCSS</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Code quality toolsJavaScript</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Code style issuesJava</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>CoffeeScript</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>CorrectnessLintAndroid</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Cucumber</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Error handlingJava</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Faces Model</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Flow type checkerJavaScript</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>FreeMarker</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>General</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>GeneralCoffeeScript</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>GeneralJavaScript</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Google Web Toolkit</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>GrailsGroovy</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Groovy</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>HTML</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Hibernate</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>IconsUsabilityLintAndroid</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>ImportsJava</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Inheritance issuesJava</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Internationalization</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>InternationalizationJava</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>InternationalizationLintAndroid</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Invalid elementsCSS</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>J2ME issuesJava</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>JSON and JSON5</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>JSP</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Java</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Java 8Java language level migration aidsJava</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Java interop issuesKotlin</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Java language level migration aidsJava</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>JavaFX</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>JavaScript</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>JavadocJava</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Kotlin</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>LintAndroid</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>LintLintAndroid</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Manifest</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Markdown</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>MessagesCorrectnessLintAndroid</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Node.jsJavaScript</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>OSGi</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>OtherGroovy</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Pages Navigation Model</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Plugin DevKit</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>PortabilityJava</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Potentially confusing code constructsGroovy</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Probable bugsJava</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Properties Files</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Properties FilesJava</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>RELAX NG</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>RESTful Web Service</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Resource managementJava</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>SQL</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Sass/SCSS</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>SecurityLintAndroid</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>SetupSpring CoreSpring</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Spring</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Spring BootSpring</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Spring CoreSpring</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Struts</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Struts 1Struts</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Struts 2Struts</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Style issuesKotlin</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>TestNGJava</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Threading issuesJava</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>TypeScript</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>UI Form</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>UsabilityLintAndroid</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Validity issuesGroovy</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Velocity</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Verbose or redundant code constructsJava</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>VisibilityJava</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Vue</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>Web Services</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>XML</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>XMLSpring CoreSpring</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>XPath</id>
|
||||
</State>
|
||||
<State>
|
||||
<id>YAML</id>
|
||||
</State>
|
||||
</expanded-state>
|
||||
</profile-state>
|
||||
</entry>
|
||||
</component>
|
||||
<component name="ProjectView">
|
||||
<navigator proportions="" version="1">
|
||||
<foldersAlwaysOnTop value="true" />
|
||||
</navigator>
|
||||
<panes>
|
||||
<pane id="ProjectPane">
|
||||
<subPane>
|
||||
<expand>
|
||||
<path>
|
||||
<item name="org-chart-frant" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="org-chart-frant" 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" />
|
||||
</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>
|
||||
</pane>
|
||||
<pane id="PackagesPane" />
|
||||
<pane id="Scope" />
|
||||
<pane id="CatdeaLogs" />
|
||||
</panes>
|
||||
</component>
|
||||
<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="1690446615685" />
|
||||
<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" />
|
||||
<property name="project.structure.proportion" value="0.0" />
|
||||
<property name="project.structure.side.proportion" value="0.0" />
|
||||
<property name="settings.editor.selected.configurable" value="preferences.externalDependencies" />
|
||||
</component>
|
||||
<component name="RebelAgentSelection">
|
||||
<selection>jr</selection>
|
||||
</component>
|
||||
<component name="RunDashboard">
|
||||
<option name="ruleStates">
|
||||
<list>
|
||||
<RuleState>
|
||||
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
|
||||
</RuleState>
|
||||
<RuleState>
|
||||
<option name="name" value="StatusDashboardGroupingRule" />
|
||||
</RuleState>
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="SvnConfiguration">
|
||||
<configuration />
|
||||
</component>
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="449daba1-1dd3-4ffd-906d-6ef641fb81de" name="Default Changelist" comment="" />
|
||||
<created>1689842546961</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1689842546961</updated>
|
||||
<workItem from="1689842557088" duration="205000" />
|
||||
<workItem from="1690192167781" duration="39000" />
|
||||
<workItem from="1690341272941" duration="164000" />
|
||||
<workItem from="1690446551998" duration="218000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TimeTrackingManager">
|
||||
<option name="totallyTimeSpent" value="626000" />
|
||||
</component>
|
||||
<component name="ToolWindowManager">
|
||||
<frame x="1440" y="0" width="1920" height="1080" extended-state="0" />
|
||||
<layout>
|
||||
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.19382322" />
|
||||
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
|
||||
<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" />
|
||||
<window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
|
||||
<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="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.26039603" />
|
||||
<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/components/dialog/index.jsx">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state>
|
||||
<folding>
|
||||
<element signature="e#0#26#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/src/d3-org-chart.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-146">
|
||||
<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>
|
||||
</component>
|
||||
<component name="ideajad">
|
||||
<property name="annotate" value="false" />
|
||||
<property name="annotateFully" value="false" />
|
||||
<property name="braces" value="false" />
|
||||
<property name="clear" value="false" />
|
||||
<property name="confirmNavigationTriggeredDecompile" value="true" />
|
||||
<property name="dead" value="true" />
|
||||
<property name="defaultInitializers" value="false" />
|
||||
<property name="dissassemblerOnly" value="false" />
|
||||
<property name="fieldsFirst" value="true" />
|
||||
<property name="fileExtension" value="java" />
|
||||
<property name="fullyQualifiedNames" value="false" />
|
||||
<property name="indentation" value="4" />
|
||||
<property name="intRadix" value="10" />
|
||||
<property name="lineNumbersAsComments" value="true" />
|
||||
<property name="longRadix" value="10" />
|
||||
<property name="maxStringLength" value="64" />
|
||||
<property name="nocast" value="false" />
|
||||
<property name="noclass" value="false" />
|
||||
<property name="nocode" value="false" />
|
||||
<property name="noconv" value="false" />
|
||||
<property name="noctor" value="false" />
|
||||
<property name="nodos" value="false" />
|
||||
<property name="nofd" value="false" />
|
||||
<property name="noinner" value="false" />
|
||||
<property name="nolvt" value="false" />
|
||||
<property name="nonlb" value="false" />
|
||||
<property name="outputDirectory" value="" />
|
||||
<property name="packFields" value="3" />
|
||||
<property name="packImports" value="7" />
|
||||
<property name="prefixNumericalClasses" value="_cls" />
|
||||
<property name="prefixNumericalFields" value="_fld" />
|
||||
<property name="prefixNumericalLocals" value="_lcl" />
|
||||
<property name="prefixNumericalMethods" value="_mth" />
|
||||
<property name="prefixNumericalParameters" value="_prm" />
|
||||
<property name="prefixUnusedExceptions" value="_ex" />
|
||||
<property name="readonly" value="false" />
|
||||
<property name="safe" value="false" />
|
||||
<property name="sort" value="false" />
|
||||
<property name="spaceAfterKeyword" value="false" />
|
||||
<property name="splitStringsAtNewline" value="false" />
|
||||
<property name="useTabs" value="false" />
|
||||
</component>
|
||||
<component name="masterDetails">
|
||||
<states>
|
||||
<state key="GlobalLibrariesConfigurable.UI">
|
||||
<settings>
|
||||
<last-edited>fastdfs-client-java-1.27-RELEASE</last-edited>
|
||||
<splitter-proportions>
|
||||
<option name="proportions">
|
||||
<list>
|
||||
<option value="0.2" />
|
||||
</list>
|
||||
</option>
|
||||
</splitter-proportions>
|
||||
</settings>
|
||||
</state>
|
||||
<state key="JdkListConfigurable.UI">
|
||||
<settings>
|
||||
<last-edited>10</last-edited>
|
||||
<splitter-proportions>
|
||||
<option name="proportions">
|
||||
<list>
|
||||
<option value="0.2" />
|
||||
</list>
|
||||
</option>
|
||||
</splitter-proportions>
|
||||
</settings>
|
||||
</state>
|
||||
<state key="ProjectJDKs.UI">
|
||||
<settings>
|
||||
<last-edited>1.8</last-edited>
|
||||
<splitter-proportions>
|
||||
<option name="proportions">
|
||||
<list>
|
||||
<option value="0.2" />
|
||||
</list>
|
||||
</option>
|
||||
</splitter-proportions>
|
||||
</settings>
|
||||
</state>
|
||||
<state key="ProjectLibrariesConfigurable.UI">
|
||||
<settings>
|
||||
<splitter-proportions>
|
||||
<option name="proportions">
|
||||
<list>
|
||||
<option value="0.2" />
|
||||
</list>
|
||||
</option>
|
||||
</splitter-proportions>
|
||||
</settings>
|
||||
</state>
|
||||
</states>
|
||||
</component>
|
||||
</project>
|
||||
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 485 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 238 B |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 737 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 978 B |
|
After Width: | Height: | Size: 981 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 997 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 945 B |
|
After Width: | Height: | Size: 271 KiB |
|
After Width: | Height: | Size: 978 B |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 835 B |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 140 B |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 232 B |
|
After Width: | Height: | Size: 233 B |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
|
@ -0,0 +1,22 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"
|
||||
/>
|
||||
<link rel="stylesheet" href="./umi.c64b754c.css" />
|
||||
<script>
|
||||
window.routerBase = "/spa/orgChart/";
|
||||
</script>
|
||||
<script>
|
||||
//! umi version: 3.5.32
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
||||
<script src="./umi.1df510d5.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
After Width: | Height: | Size: 485 KiB |
|
After Width: | Height: | Size: 271 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
|
@ -24,6 +24,7 @@
|
|||
"@types/d3": "^7.4.0",
|
||||
"d3": "7.4.4",
|
||||
"d3-org-chart": "2.6.0",
|
||||
"jquery": "^3.7.1",
|
||||
"js-export-excel": "^1.1.4",
|
||||
"jspdf": "^2.5.1",
|
||||
"moment": "^2.29.3",
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 271 KiB |
|
After Width: | Height: | Size: 835 B |
|
|
@ -8,6 +8,8 @@ import {
|
|||
Table,
|
||||
Spin,
|
||||
Checkbox,
|
||||
Row,
|
||||
Col,
|
||||
} from 'antd';
|
||||
import { OrgChartComponent } from '@/components/orgChart';
|
||||
import * as d3 from 'd3';
|
||||
|
|
@ -16,6 +18,7 @@ import { message } from 'antd';
|
|||
import jsPDF from 'jspdf';
|
||||
import ExportJsonExcel from 'js-export-excel';
|
||||
import './index.less';
|
||||
import { CodepenCircleOutlined } from '@ant-design/icons';
|
||||
|
||||
let addNodeChildFunc = null;
|
||||
let orgChart = null;
|
||||
|
|
@ -31,14 +34,29 @@ export default class DrawerComponents extends React.Component {
|
|||
dataSource: [],
|
||||
columns: [],
|
||||
spinning: true,
|
||||
showJob: true,
|
||||
showJob: false,
|
||||
nbOptions: [],
|
||||
defaultNbValue: [],
|
||||
wbOptions: [],
|
||||
defaultWbValue: [],
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {}
|
||||
|
||||
componentDidUpdate(prevProps, prevState, snapshotValue) {
|
||||
// 组件更新后的操作
|
||||
// if (orgChart != null) {
|
||||
// orgChart.getChartState().svgHeight = 3000;
|
||||
// }
|
||||
}
|
||||
|
||||
// 点击节点
|
||||
onNodeClick(node) {}
|
||||
onNodeClick(node) {
|
||||
if (node.ftype == '4') {
|
||||
window.open(node.pcUrl, '_blank');
|
||||
}
|
||||
}
|
||||
|
||||
onButtonClick(event, d) {
|
||||
if (d.children) {
|
||||
|
|
@ -61,18 +79,39 @@ export default class DrawerComponents extends React.Component {
|
|||
: `./img/user-card/user-card-blue.png`;
|
||||
}
|
||||
|
||||
//查询条件
|
||||
getDeatilCondition() {
|
||||
return new Promise((resolve) => {
|
||||
d3.json('/api/bs/hrmorganization/orgchart/getDeptDetailCondition?').then(
|
||||
(data) => {
|
||||
this.setState({
|
||||
nbOptions: data.nbCondition,
|
||||
wbOptions: data.wbCondition,
|
||||
defaultNbValue: data.nbValue,
|
||||
defaultWbValue: data.wbValue,
|
||||
});
|
||||
resolve();
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
//获取数据
|
||||
getDeatilDatas(params, type = 'chart', showJob = '1') {
|
||||
this.setState({ spinning: true });
|
||||
getDeatilDatas(params, type = 'chart', showJob = '0') {
|
||||
this.setState({ spinning: true, data: [] });
|
||||
d3.json(
|
||||
'/api/bs/hrmorganization/orgchart/getDepartmentDetail?' +
|
||||
qs.stringify({ detauleType: type, ...params, showJob }),
|
||||
qs.stringify({ detailType: type, ...params, showJob }),
|
||||
).then((data) => {
|
||||
//
|
||||
if (type == 'chart') {
|
||||
this.setState({ data: data.data, spinning: false });
|
||||
} else {
|
||||
this.setState({ dataSource: data.dataSource, columns: data.columns });
|
||||
this.setState({
|
||||
dataSource: data.dataSource,
|
||||
columns: data.columns,
|
||||
spinning: false,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -226,6 +265,11 @@ export default class DrawerComponents extends React.Component {
|
|||
* 节点渲染
|
||||
*/
|
||||
nodeContentRender = (d, i, arr, state) => {
|
||||
let name = d.data.deptType == 0 ? '所属部门' : '所属科室';
|
||||
if (d.data.fisvitual != 0) {
|
||||
name = '所属部门';
|
||||
}
|
||||
|
||||
if (d.data.ftype == 2) {
|
||||
return `<div style="position: relative;">
|
||||
<div style=" height: 152px;background-size: 100% 100%;box-sizing: border-box;padding-top: 30px;position:relative;z-index:2">
|
||||
|
|
@ -236,8 +280,12 @@ 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"/>
|
||||
</div>
|
||||
<img src="${
|
||||
d.data.fleaderimg
|
||||
? d.data.fleaderimg
|
||||
: './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"/>
|
||||
</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}
|
||||
|
|
@ -283,14 +331,15 @@ export default class DrawerComponents extends React.Component {
|
|||
: './img/default_avator.png'
|
||||
}" style="width: 58px; height: 58px; border-radius: 50%; margin-top: 16px;margin-left: -6px;z-index:999" />
|
||||
</div>
|
||||
<div style="display: inline-block; margin-left: 6px;width: 55%;height:100%">
|
||||
<div style="display: inline-block; margin-left: 6px;width: 55%;height:100%;margin-top: -12px;">
|
||||
<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;font-family: Microsoft YaHei-Regular, Microsoft YaHei;font-weight: 400;color: #333333;display: flex;height: 25px;line-height: 25px;">
|
||||
<span>司龄: ${d.data.companyWorkYear} 年</span>
|
||||
<div style="font-size: 13px;font-family: Microsoft YaHei-Regular, Microsoft YaHei;font-weight: 400;color: #333333;height: 25px;line-height: 25px;">
|
||||
<span>${name}: ${d.data.localDeptName} </span>
|
||||
<div>岗位名称: ${d.data.jobTitle}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -298,24 +347,75 @@ export default class DrawerComponents extends React.Component {
|
|||
}
|
||||
};
|
||||
|
||||
showDrawer = (params) => {
|
||||
const showJob = params.fclass == '0' ? '1' : '0';
|
||||
this.getDeatilDatas(params, 'chart', showJob);
|
||||
showDrawer = async (params) => {
|
||||
this.setState({ open: true, params: params });
|
||||
await this.getDeatilCondition();
|
||||
const { defaultNbValue, defaultWbValue } = this.state;
|
||||
params = {
|
||||
...params,
|
||||
nbValue: defaultNbValue.join(','),
|
||||
wbValue: defaultWbValue.join(','),
|
||||
};
|
||||
this.getDeatilDatas(params, 'chart', '0');
|
||||
};
|
||||
|
||||
onClose = () => {
|
||||
this.setState({ open: false, detailType: 'chart', showJob: true });
|
||||
this.setState({
|
||||
open: false,
|
||||
detailType: 'chart',
|
||||
showJob: false,
|
||||
data: [],
|
||||
dataSource: [],
|
||||
defaultNbValue: [],
|
||||
defaultWbValue: [],
|
||||
});
|
||||
};
|
||||
|
||||
changeDetail = () => {
|
||||
const { detailType, params } = this.state;
|
||||
const {
|
||||
defaultNbValue,
|
||||
defaultWbValue,
|
||||
detailType,
|
||||
params,
|
||||
data,
|
||||
dataSource,
|
||||
} = this.state;
|
||||
let type = detailType == 'chart' ? 'table' : 'chart';
|
||||
const showJob = this.state.showJob ? '1' : '0';
|
||||
this.setState({
|
||||
detailType: type,
|
||||
});
|
||||
this.getDeatilDatas(params, type, showJob);
|
||||
const nParam = {
|
||||
...params,
|
||||
nbValue: defaultNbValue.join(','),
|
||||
wbValue: defaultWbValue.join(','),
|
||||
};
|
||||
this.getDeatilDatas(nParam, type, '0');
|
||||
};
|
||||
|
||||
onNbChange = (checkedValues) => {
|
||||
this.setState({
|
||||
defaultNbValue: checkedValues,
|
||||
});
|
||||
const { defaultWbValue, params, detailType } = this.state;
|
||||
const nParam = {
|
||||
...params,
|
||||
nbValue: checkedValues.join(','),
|
||||
wbValue: defaultWbValue.join(','),
|
||||
};
|
||||
this.getDeatilDatas(nParam, detailType, '0');
|
||||
};
|
||||
|
||||
onWbChange = (checkedValues) => {
|
||||
this.setState({
|
||||
defaultWbValue: checkedValues,
|
||||
});
|
||||
const { defaultNbValue, params, detailType } = this.state;
|
||||
const nParam = {
|
||||
...params,
|
||||
nbValue: defaultNbValue.join(','),
|
||||
wbValue: checkedValues.join(','),
|
||||
};
|
||||
this.getDeatilDatas(nParam, detailType, '0');
|
||||
};
|
||||
|
||||
render() {
|
||||
|
|
@ -328,8 +428,13 @@ export default class DrawerComponents extends React.Component {
|
|||
columns,
|
||||
spinning,
|
||||
showJob,
|
||||
nbOptions,
|
||||
defaultNbValue,
|
||||
wbOptions,
|
||||
defaultWbValue,
|
||||
} = this.state;
|
||||
let arr = [];
|
||||
|
||||
if (detailType == 'chart') {
|
||||
arr.push({ label: '导出图片', key: '1' });
|
||||
//arr.push({ label: '导出PDF', key: '2' });
|
||||
|
|
@ -341,79 +446,95 @@ export default class DrawerComponents extends React.Component {
|
|||
|
||||
return (
|
||||
<Drawer
|
||||
title="详细信息"
|
||||
width={1100}
|
||||
title={
|
||||
<>
|
||||
<CodepenCircleOutlined
|
||||
style={{ color: '#0086ff', fontSize: '16px' }}
|
||||
/>
|
||||
<span style={{ marginLeft: '5px', color: '#0086ff' }}>
|
||||
部门详情
|
||||
</span>
|
||||
</>
|
||||
}
|
||||
width={1200}
|
||||
onClose={this.onClose}
|
||||
open={open}
|
||||
bodyStyle={{
|
||||
paddingBottom: 80,
|
||||
}}
|
||||
extra={
|
||||
<Space>
|
||||
{detailType == 'chart' && params && params.fclass == '0' && (
|
||||
<Checkbox
|
||||
style={{ marginTop: '5px', marginLeft: 100 }}
|
||||
checked={showJob}
|
||||
onChange={(e) => {
|
||||
this.setState({
|
||||
showJob: e.target.checked,
|
||||
});
|
||||
|
||||
this.getDeatilDatas(
|
||||
params,
|
||||
detailType,
|
||||
e.target.checked ? '1' : '0',
|
||||
);
|
||||
}}
|
||||
>
|
||||
是否显示岗位
|
||||
</Checkbox>
|
||||
)}
|
||||
<Dropdown overlay={menu}>
|
||||
<Button type="primary">导出</Button>
|
||||
</Dropdown>
|
||||
<img
|
||||
style={{ width: 36, height: 36, cursor: 'pointer' }}
|
||||
src="./img/change.png"
|
||||
onClick={this.changeDetail}
|
||||
/>
|
||||
<Button type="primary" onClick={this.changeDetail}>
|
||||
切换
|
||||
</Button>
|
||||
</Space>
|
||||
}
|
||||
>
|
||||
{detailType == 'chart' ? (
|
||||
data.length > 0 && (
|
||||
<Spin size="large" spinning={spinning}>
|
||||
<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}
|
||||
<>
|
||||
<Row style={{ margin: '20px 20px' }}>
|
||||
<Col span={2}>内部职工:</Col>{' '}
|
||||
<Col span={22}>
|
||||
{' '}
|
||||
<Checkbox.Group
|
||||
options={nbOptions}
|
||||
value={defaultNbValue}
|
||||
onChange={this.onNbChange}
|
||||
/>
|
||||
</Spin>
|
||||
)
|
||||
) : (
|
||||
<div style={{ padding: '0 20px' }}>
|
||||
<Table
|
||||
dataSource={dataSource}
|
||||
columns={columns}
|
||||
scroll={{ y: 500 }}
|
||||
pagination={{
|
||||
locale: {
|
||||
// 翻页文本替换
|
||||
items_per_page: '条/页',
|
||||
jump_to: '跳至',
|
||||
page: '页',
|
||||
},
|
||||
showTotal: (total) => `共 ${dataSource.length} 条`,
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</Col>
|
||||
</Row>
|
||||
<Row style={{ margin: '0px 20px' }}>
|
||||
<Col span={2}>外部人员:</Col>
|
||||
<Col span={22}>
|
||||
{' '}
|
||||
<Checkbox.Group
|
||||
options={wbOptions}
|
||||
value={defaultWbValue}
|
||||
onChange={this.onWbChange}
|
||||
/>
|
||||
</Col>
|
||||
</Row>
|
||||
{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}
|
||||
/>
|
||||
)}
|
||||
</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) => `共 ${dataSource.length} 条`,
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</>
|
||||
</Drawer>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,3 +2,11 @@
|
|||
width: 500px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.loading-center {
|
||||
position: absolute;
|
||||
top: 50vh;
|
||||
left: 50%;
|
||||
margin-left: -8px;
|
||||
margin-top: -8px;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,10 +7,11 @@
|
|||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
*/
|
||||
import React from 'react';
|
||||
import { Timeline, Drawer } from 'antd';
|
||||
import { Timeline, Drawer, Popconfirm, message } from 'antd';
|
||||
import styles from './index.less';
|
||||
import leftTreeShow from './img/leftTree-show.png';
|
||||
import leftHide from './img/leftTree-hide.png';
|
||||
import { CloseCircleOutlined } from '@ant-design/icons';
|
||||
|
||||
export default class TimeLine extends React.Component {
|
||||
constructor(props) {
|
||||
|
|
@ -35,6 +36,21 @@ export default class TimeLine extends React.Component {
|
|||
this.props.onClick(data);
|
||||
}
|
||||
|
||||
handleDelete(key) {
|
||||
const { labelData } = this.props;
|
||||
let api = `/api/bs/hrmorganization/orgchart/versionDelete?versionId=${key}`;
|
||||
fetch(api)
|
||||
.then((res) => res.json())
|
||||
.then((data) => {
|
||||
if (data.api_status) {
|
||||
message.success(`删除成功`, 2, 3);
|
||||
window.location.reload(true);
|
||||
} else {
|
||||
message.error(`系统错误`, 2, 3);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.searchTimeLines(this.props.url);
|
||||
}
|
||||
|
|
@ -89,14 +105,27 @@ export default class TimeLine extends React.Component {
|
|||
return (
|
||||
<Timeline.Item
|
||||
key={item.key}
|
||||
onClick={this.handleLineClick.bind(this, item)}
|
||||
className={styles.timeline}
|
||||
color={item.color}
|
||||
style={{
|
||||
color: item.color == 'blue' ? '#1890ff' : 'dimgray',
|
||||
}}
|
||||
>
|
||||
<div>{item.title}</div>
|
||||
<div onClick={this.handleLineClick.bind(this, item)}>
|
||||
{item.title}
|
||||
</div>
|
||||
{item.key != 0 && (
|
||||
<Popconfirm
|
||||
title={`确认要删除[${item.title}]版本?`}
|
||||
onConfirm={this.handleDelete.bind(this, item.key)}
|
||||
okText="确认"
|
||||
cancelText="取消"
|
||||
>
|
||||
<div className={styles.delete}>
|
||||
<CloseCircleOutlined />
|
||||
</div>
|
||||
</Popconfirm>
|
||||
)}
|
||||
<div className={styles.time}>{item.time}</div>
|
||||
</Timeline.Item>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -22,14 +22,18 @@
|
|||
.time {
|
||||
color: dimgray;
|
||||
}
|
||||
|
||||
.delete :hover {
|
||||
color: red;
|
||||
}
|
||||
}
|
||||
|
||||
.leftRightLayoutBtn {
|
||||
width: 18px;
|
||||
height: 60px;
|
||||
position: absolute;
|
||||
position: fixed;
|
||||
top: 50%;
|
||||
margin-top: -30px;
|
||||
// margin-top: -30px;
|
||||
z-index: 101;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ const { TextArea } = Input;
|
|||
import moment from 'moment';
|
||||
import 'moment/locale/zh-cn';
|
||||
import locale from 'antd/lib/date-picker/locale/zh_CN';
|
||||
import { HomeOutlined } from '@ant-design/icons';
|
||||
import { HomeOutlined, FolderOpenOutlined } from '@ant-design/icons';
|
||||
moment.locale('zh-cn');
|
||||
|
||||
export class TopBar extends React.Component {
|
||||
|
|
@ -32,12 +32,15 @@ export class TopBar extends React.Component {
|
|||
rootTreeData: [], //根节点异步树
|
||||
treeLoadedKeys: [],
|
||||
treeExpandedKeys: [],
|
||||
deptTreeData: [],
|
||||
requestData: {
|
||||
fclass: '0',
|
||||
root: undefined,
|
||||
level: '2',
|
||||
department: undefined,
|
||||
level: '3',
|
||||
fisvitual: '0',
|
||||
hidedept: '0',
|
||||
showClass: '0', //班组显示 0不显示
|
||||
},
|
||||
open: false,
|
||||
confirmLoading: false,
|
||||
|
|
@ -156,6 +159,29 @@ export class TopBar extends React.Component {
|
|||
this.getSeatchCondition(this.props.url);
|
||||
}
|
||||
|
||||
/**
|
||||
* 部门节点树
|
||||
*/
|
||||
getDeptTreeData = (url) => {
|
||||
fetch(url)
|
||||
.then((res) => res.json())
|
||||
.then((data) => {
|
||||
if (data.api_status) {
|
||||
let arr = [...data.departmentTree];
|
||||
arr.map((item, index) => {
|
||||
item.icon = <FolderOpenOutlined />;
|
||||
});
|
||||
this.setState({
|
||||
deptTreeData: arr,
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
onDeptChange = (value, label, extra) => {
|
||||
this.handleFormChange({ department: value });
|
||||
};
|
||||
|
||||
getSeatchCondition = (url) => {
|
||||
fetch(url)
|
||||
.then((res) => res.json())
|
||||
|
|
@ -163,10 +189,14 @@ export class TopBar extends React.Component {
|
|||
data.companyTree.map((item, index) => {
|
||||
item.icon = <HomeOutlined />;
|
||||
});
|
||||
this.handleFormChange({ root: data.root });
|
||||
this.setState({
|
||||
fclasslist: data.fclasslist,
|
||||
rootTreeData: data.companyTree,
|
||||
});
|
||||
this.getDeptTreeData(
|
||||
`/api/bs/hrmorganization/orgchart/getDepartmentTree?fclass=0&subcompany=${data.root}`,
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
|
|
@ -187,51 +217,28 @@ export class TopBar extends React.Component {
|
|||
);
|
||||
|
||||
render() {
|
||||
const { disabled, type } = this.props;
|
||||
const { rootTreeData, open, confirmLoading, treeExpandedKeys } = this.state;
|
||||
const { disabled, type, timelineId } = this.props;
|
||||
const {
|
||||
rootTreeData,
|
||||
open,
|
||||
confirmLoading,
|
||||
treeExpandedKeys,
|
||||
requestData,
|
||||
deptTreeData,
|
||||
} = this.state;
|
||||
const { fclass, department, root, showClass } = requestData;
|
||||
|
||||
return (
|
||||
<div className={style.topbarWrapper}>
|
||||
<Row>
|
||||
<Col span={6}>
|
||||
维度:
|
||||
<Select
|
||||
defaultValue="0"
|
||||
style={{ width: 140 }}
|
||||
value={this.state.requestData.fclass}
|
||||
onChange={(value) => {
|
||||
const requestData = {
|
||||
fclass: value,
|
||||
root: undefined,
|
||||
level: '2',
|
||||
fisvitual: '0',
|
||||
hidedept: '0',
|
||||
};
|
||||
this.handleFormChange(requestData);
|
||||
this.setState({
|
||||
rootTreeData: [],
|
||||
});
|
||||
this.getNodeTreeNode(
|
||||
`/api/bs/hrmorganization/orgchart/getSubCompanyTree?fclass=${value}`,
|
||||
false,
|
||||
);
|
||||
this.props.changeFclass(requestData);
|
||||
}}
|
||||
>
|
||||
{this.state.fclasslist.map((item) => (
|
||||
<Option key={item.key} value={item.id}>
|
||||
{item.companyname}
|
||||
</Option>
|
||||
))}
|
||||
</Select>
|
||||
</Col>
|
||||
<Col span={6}>
|
||||
根节点:
|
||||
所属分部:
|
||||
<TreeSelect
|
||||
disabled
|
||||
treeDataSimpleMode
|
||||
allowClear
|
||||
style={{ width: '75%' }}
|
||||
value={this.state.requestData.root}
|
||||
value={root}
|
||||
dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}
|
||||
placeholder="请选择根节点"
|
||||
onChange={this.onRootChange}
|
||||
|
|
@ -240,6 +247,31 @@ export class TopBar extends React.Component {
|
|||
treeIcon
|
||||
/>
|
||||
</Col>
|
||||
{timelineId == 0 && (
|
||||
<Col span={6}>
|
||||
<Checkbox
|
||||
style={{ marginTop: '5px', marginLeft: 60 }}
|
||||
checked={showClass == '1'}
|
||||
onChange={(e) =>
|
||||
this.handleFormChange({
|
||||
showClass: e.target.checked ? '1' : '0',
|
||||
})
|
||||
}
|
||||
>
|
||||
显示班组
|
||||
</Checkbox>
|
||||
<Tooltip
|
||||
title="提示:开启后将显示班组信息"
|
||||
color="#0082fb"
|
||||
placement="rightTop"
|
||||
>
|
||||
<QuestionCircleOutlined
|
||||
style={{ color: '#0082fb', cursor: 'pointer', fontSize: 16 }}
|
||||
/>
|
||||
</Tooltip>
|
||||
</Col>
|
||||
)}
|
||||
|
||||
<Col span={6}>
|
||||
<Checkbox
|
||||
style={{ marginTop: '5px', marginLeft: 100 }}
|
||||
|
|
@ -278,40 +310,23 @@ export class TopBar extends React.Component {
|
|||
</Col>
|
||||
</Row>
|
||||
<Row style={{ marginTop: '15px' }}>
|
||||
<Col span={6}>
|
||||
<Checkbox
|
||||
style={{ marginTop: '5px' }}
|
||||
checked={this.state.requestData.fisvitual == '1'}
|
||||
onChange={(e) =>
|
||||
this.handleFormChange({
|
||||
fisvitual: e.target.checked ? '1' : '0',
|
||||
})
|
||||
}
|
||||
>
|
||||
显示虚拟组织
|
||||
</Checkbox>
|
||||
<Tooltip
|
||||
title="提示:若启用虚拟组织,需要在分部自定义表增加字段(名称 fblx) 字段类型 下拉框(0实体 1虚拟) 部门自定义表同上(字段名称 bmlx)。"
|
||||
color="#0082fb"
|
||||
placement="rightTop"
|
||||
>
|
||||
<QuestionCircleOutlined
|
||||
style={{ color: '#0082fb', cursor: 'pointer', fontSize: 16 }}
|
||||
{timelineId == 0 && (
|
||||
<Col span={6}>
|
||||
部门节点:
|
||||
<TreeSelect
|
||||
treeDataSimpleMode
|
||||
allowClear
|
||||
style={{ width: '75%' }}
|
||||
value={department}
|
||||
dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}
|
||||
placeholder="请选择"
|
||||
onChange={this.onDeptChange}
|
||||
treeData={deptTreeData}
|
||||
treeIcon
|
||||
/>
|
||||
</Tooltip>
|
||||
</Col>
|
||||
<Col span={16}>
|
||||
<Button
|
||||
type="primary"
|
||||
style={{ marginRight: '10px' }}
|
||||
disabled={disabled}
|
||||
onClick={() => {
|
||||
this.setState({ open: true });
|
||||
}}
|
||||
>
|
||||
版本记录
|
||||
</Button>
|
||||
|
||||
</Col>
|
||||
)}
|
||||
<Col span={6} style={{ textAlign: 'center' }}>
|
||||
<Button
|
||||
type="primary"
|
||||
style={{ marginRight: '10px' }}
|
||||
|
|
@ -321,7 +336,7 @@ export class TopBar extends React.Component {
|
|||
>
|
||||
查询
|
||||
</Button>
|
||||
<Button
|
||||
{/* <Button
|
||||
type="primary"
|
||||
style={{ marginRight: '10px' }}
|
||||
onClick={() => {
|
||||
|
|
@ -338,7 +353,7 @@ export class TopBar extends React.Component {
|
|||
}}
|
||||
>
|
||||
人数统计
|
||||
</Button>
|
||||
</Button> */}
|
||||
<Dropdown overlay={this.menu}>
|
||||
<Button type="primary">导出</Button>
|
||||
</Dropdown>
|
||||
|
|
|
|||
|
|
@ -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.3,
|
||||
//nodeTopY: (node) => 0,
|
||||
nodeTopY: (node) => node.height / 0.4,
|
||||
nodeBottomY: (node) => node.height,
|
||||
nodeJoinX: (node) => node.x - node.width / 2,
|
||||
nodeJoinY: (node) => node.y + node.height,
|
||||
|
|
|
|||
|
|
@ -10,8 +10,10 @@ import OperateDialog from '../components/dialog';
|
|||
import jsPDF from 'jspdf';
|
||||
import moment from 'moment';
|
||||
import qs from 'qs';
|
||||
import { message, Spin, notification } from 'antd';
|
||||
import { message, Spin, notification, Affix, Button, Tooltip } from 'antd';
|
||||
import { SmileOutlined } from '@ant-design/icons';
|
||||
import remind from '../../public/img/remind.png';
|
||||
import hand from '../../public/img/hand.gif';
|
||||
|
||||
let active = 'top';
|
||||
let drawerCom = null;
|
||||
|
|
@ -20,6 +22,8 @@ let timeLine = null;
|
|||
let orgChart = null;
|
||||
let topbar = null;
|
||||
|
||||
let versionId = 0;
|
||||
|
||||
export default function companyPage() {
|
||||
const [data, setData] = useState(null);
|
||||
let compact = 0;
|
||||
|
|
@ -52,6 +56,8 @@ export default function companyPage() {
|
|||
rootId: node.id,
|
||||
fclass: topbar.state.requestData.fclass,
|
||||
id: infoRef.current,
|
||||
versionId: versionId,
|
||||
deptLevel: node.deptLevel,
|
||||
};
|
||||
drawerCom.showDrawer(params);
|
||||
}
|
||||
|
|
@ -97,8 +103,13 @@ export default function companyPage() {
|
|||
};
|
||||
|
||||
// 获取部门图片
|
||||
function getDepartmentImage(fisvitual) {
|
||||
return fisvitual == '0' ? `./img/back/level4.png` : `./img/back/level8.png`;
|
||||
function getDepartmentImage(level) {
|
||||
//return `./img/department/dept${level}.png`;
|
||||
if (level == '0' || level == '1') {
|
||||
return `./img/department/dept${level}.png`;
|
||||
} else {
|
||||
return `./img/department/dept2.png`;
|
||||
}
|
||||
}
|
||||
|
||||
// 获取分部图片
|
||||
|
|
@ -109,7 +120,7 @@ export default function companyPage() {
|
|||
// 获取数据
|
||||
useEffect(() => {
|
||||
d3.json(
|
||||
'/api/bs/hrmorganization/orgchart/companyData?fclass=0&fisvitual=0&hidedept=0&root=0&level=2&id=0',
|
||||
'/api/bs/hrmorganization/orgchart/companyData?fclass=0&fisvitual=0&hidedept=0&root=0&level=3&id=0&showClass=0',
|
||||
).then((data) => {
|
||||
setData(data.data);
|
||||
setHasRight(data?.hasRight);
|
||||
|
|
@ -151,6 +162,8 @@ export default function companyPage() {
|
|||
const nodeContentRender = (d, i, arr, state) => {
|
||||
let fclass = topbar.state.requestData.fclass;
|
||||
let statisticsStyle = fclass == 0 ? 'block' : 'none';
|
||||
// let flevelStyle =
|
||||
// d.data.ftype == 2 && d.data.deptLevel == 0 ? 'inline-block' : 'none';
|
||||
if (d.data.ftype == 0) {
|
||||
return `<div>
|
||||
<div style="display: inline-block; text-align: center; margin-left: 5px;">
|
||||
|
|
@ -178,8 +191,7 @@ export default function companyPage() {
|
|||
} style="width: 110px;margin: 0 auto;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;-o-text-overflow:ellipsis;
|
||||
line-height: 18px;word-break: break-all;">${d.data.fname}</div>
|
||||
<div style="display: ${statisticsStyle}">
|
||||
<span style="color:red">${d.data.staffNum}</span> /
|
||||
<span style="color:green">${d.data.onJobNum}</span>
|
||||
<span style="color:red;}">${d.data.staffNum}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -189,7 +201,7 @@ export default function companyPage() {
|
|||
<div style="width: 100%; height: 100%; background-size: 100% 100%;">
|
||||
<div style='position:absolute;height:100%'>
|
||||
<img style='width:144px;height:106px' src="${getDepartmentImage(
|
||||
d.data.fisvitual,
|
||||
d.data.deptLevel,
|
||||
)}"/>
|
||||
</div>
|
||||
<div style="width: 144px;height: 80px;top: 35px;position: relative;font-weight: 400;font-size: 14px;
|
||||
|
|
@ -197,8 +209,7 @@ export default function companyPage() {
|
|||
<div style="width: 110px;margin: 0 auto;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;
|
||||
line-height: 18px;word-break: break-all;">${d.data.fname}</div>
|
||||
<div style="display: ${statisticsStyle}">
|
||||
<span style="color:red">${d.data.staffNum}</span> /
|
||||
<span style="color:green">${d.data.onJobNum}</span>
|
||||
<span style="color:red;">${d.data.staffNum} </span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -346,9 +357,9 @@ export default function companyPage() {
|
|||
*/
|
||||
const timeLineSearch = (timeline) => {
|
||||
setTimelineId(timeline.id);
|
||||
versionId = timeline.id;
|
||||
const fclass = topbar.state.requestData.fclass;
|
||||
const resetParams = {
|
||||
root: undefined,
|
||||
level: '2',
|
||||
fisvitual: '0',
|
||||
hidedept: '0',
|
||||
|
|
@ -447,6 +458,7 @@ export default function companyPage() {
|
|||
changeFclass={(requestData) => {
|
||||
handleChange(requestData);
|
||||
}}
|
||||
timelineId={timelineId}
|
||||
type="company"
|
||||
url="/api/bs/hrmorganization/orgchart/getCondition?fclass=0&type=company&id=0"
|
||||
/>
|
||||
|
|
@ -491,6 +503,16 @@ export default function companyPage() {
|
|||
addFolderNode={addFolderNode}
|
||||
deleteNode={deleteNode}
|
||||
/>
|
||||
<Affix style={{ position: 'fixed', top: 200, left: 20 }}>
|
||||
<Tooltip
|
||||
title="提示:图中红色数字代表编制数,绿色数字代表在职人数"
|
||||
color="#0082fb"
|
||||
placement="rightTop"
|
||||
>
|
||||
<img className={styles.remindImage} src={remind} />
|
||||
</Tooltip>
|
||||
<img className={styles.handImage} alt="手势" src={hand} />
|
||||
</Affix>
|
||||
</div>
|
||||
)
|
||||
);
|
||||
|
|
|
|||
|
|
@ -114,6 +114,36 @@
|
|||
}
|
||||
|
||||
.ant-drawer-body {
|
||||
padding: 0px;
|
||||
padding: 0px !important;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.remindImage {
|
||||
cursor: pointer;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
.handImage {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.svg-container {
|
||||
overflow-y: auto;
|
||||
//height: calc(~'100% - 100px');;
|
||||
}
|
||||
|
||||
.svg-container::-webkit-scrollbar {
|
||||
/*滚动条整体样式*/
|
||||
width: 10px;
|
||||
/*高宽分别对应横竖滚动条的尺寸*/
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
.svg-container::-webkit-scrollbar-thumb {
|
||||
/*滚动条里面小方块 #c1c1c1*/
|
||||
border-radius: 10px;
|
||||
background-color: #c1c1c1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ export default function userPage() {
|
|||
// 获取数据
|
||||
useEffect(() => {
|
||||
document.cookie =
|
||||
'ecology_JSessionid=aaahTt6JHXEIM-HoSW-Xy; JSESSIONID=aaahTt6JHXEIM-HoSW-Xy; Systemlanguid=7; languageidweaver=7; loginuuids=2773; __randcode__=a8294fa0-56d7-430f-a35b-139d73474682; loginidweaver=zhangxy16';
|
||||
'ecology_JSessionid=aaaIM-wLhZqZT42JQaHuz; JSESSIONID=aaaIM-wLhZqZT42JQaHuz; __randcode__=4a2611df-36e6-4b5b-9367-4eda0d961d91; Systemlanguid=7; languageidweaver=7; loginidweaver=sysadmin; loginuuids=1';
|
||||
d3.json(
|
||||
'/api/bs/hrmorganization/orgchart/userData?fclass=0&fisvitual=0&root=0&level=3&id=0',
|
||||
).then((data) => {
|
||||
|
|
|
|||