增加了报销审批模块;邮件地址加了后缀要求(xx@pkusz.edu.cn)

This commit is contained in:
my-style committed 2020-02-21 00:02:05 +08:00
1 parent c2ffefa3fd
commit f1ea3d7567
58 files changed
+2747 -258

No files matched your search

+562 -232
View File
@@ -6,7 +6,28 @@
</artifacts-to-build>
</component>
<component name="ChangeListManager">
<list default="true" id="f2ca1002-1ec5-49f3-ab6f-fb7dec9c9e4d" name="Default Changelist" comment="" />
<list default="true" id="f2ca1002-1ec5-49f3-ab6f-fb7dec9c9e4d" 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$/out/production/classes/cn/minoa/Main.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/classes/cn/minoa/Main.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/classes/cn/minoa/dataRequestInterface/MinoaDataAPI$1.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/classes/cn/minoa/dataRequestInterface/MinoaDataAPI$1.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/classes/cn/minoa/dataRequestInterface/MinoaDataAPI$2.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/classes/cn/minoa/dataRequestInterface/MinoaDataAPI$2.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/classes/cn/minoa/dataRequestInterface/MinoaDataAPI$3.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/classes/cn/minoa/dataRequestInterface/MinoaDataAPI$3.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/classes/cn/minoa/dataRequestInterface/MinoaDataAPI$4.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/classes/cn/minoa/dataRequestInterface/MinoaDataAPI$4.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/classes/cn/minoa/dataRequestInterface/MinoaDataAPI$5.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/classes/cn/minoa/dataRequestInterface/MinoaDataAPI$5.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/classes/cn/minoa/dataRequestInterface/MinoaDataAPI$6.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/classes/cn/minoa/dataRequestInterface/MinoaDataAPI$6.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/classes/cn/minoa/dataRequestInterface/MinoaDataAPI$7.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/classes/cn/minoa/dataRequestInterface/MinoaDataAPI$7.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/classes/cn/minoa/dataRequestInterface/MinoaDataAPI$8.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/classes/cn/minoa/dataRequestInterface/MinoaDataAPI$8.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/classes/cn/minoa/dataRequestInterface/MinoaDataAPI.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/classes/cn/minoa/dataRequestInterface/MinoaDataAPI.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/minoa/MainApp.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/minoa/MainApp.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/minoa/dataRequestInterface/MinoaDataAPI.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/minoa/dataRequestInterface/MinoaDataAPI.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/minoa/view/home/HomeListController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/minoa/view/home/HomeListController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/SingleEmailDetailsController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/SingleEmailDetailsController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/WrittenEmailController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/WrittenEmailController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/fxml/home/HomeListOverview.fxml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/fxml/home/HomeListOverview.fxml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/fxml/mine/MyEmailOverview.fxml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/fxml/mine/MyEmailOverview.fxml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/fxml/mine/SingleEmailDetails.fxml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/fxml/mine/SingleEmailDetails.fxml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/fxml/mine/WrittenEmailDetails.fxml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/fxml/mine/WrittenEmailDetails.fxml" afterDir="false" />
</list>
<ignored path="$PROJECT_DIR$/out/" />
<ignored path="$PROJECT_DIR$/.gradle/" />
<ignored path="$PROJECT_DIR$/build/" />
@@ -80,22 +101,23 @@
<session id="-17715935">
<usages-collector id="statistics.lifecycle.project">
<counts>
<entry key="project.closed" value="4" />
<entry key="project.open.time.18" value="1" />
<entry key="project.closed" value="7" />
<entry key="project.open.time.18" value="2" />
<entry key="project.open.time.19" value="1" />
<entry key="project.open.time.2" value="1" />
<entry key="project.open.time.20" value="1" />
<entry key="project.open.time.20" value="3" />
<entry key="project.open.time.24" value="1" />
<entry key="project.open.time.3" value="1" />
<entry key="project.opened" value="5" />
<entry key="project.opened" value="9" />
</counts>
</usages-collector>
<usages-collector id="statistics.file.extensions.open">
<counts>
<entry key="MF" value="1" />
<entry key="css" value="12" />
<entry key="fxml" value="10" />
<entry key="css" value="14" />
<entry key="fxml" value="20" />
<entry key="gradle" value="5" />
<entry key="java" value="64" />
<entry key="java" value="94" />
<entry key="png" value="4" />
<entry key="txt" value="2" />
<entry key="xml" value="1" />
@@ -103,29 +125,31 @@
</usages-collector>
<usages-collector id="statistics.file.types.open">
<counts>
<entry key="CSS" value="12" />
<entry key="CSS" value="14" />
<entry key="Groovy" value="5" />
<entry key="Image" value="4" />
<entry key="JAVA" value="64" />
<entry key="JAVA" value="94" />
<entry key="Manifest" value="1" />
<entry key="PLAIN_TEXT" value="2" />
<entry key="XML" value="11" />
<entry key="XML" value="21" />
</counts>
</usages-collector>
<usages-collector id="statistics.file.extensions.edit">
<counts>
<entry key="MF" value="92" />
<entry key="fxml" value="4" />
<entry key="gradle" value="366" />
<entry key="java" value="740" />
<entry key="java" value="5971" />
<entry key="txt" value="89" />
</counts>
</usages-collector>
<usages-collector id="statistics.file.types.edit">
<counts>
<entry key="Groovy" value="366" />
<entry key="JAVA" value="740" />
<entry key="JAVA" value="5971" />
<entry key="Manifest" value="92" />
<entry key="PLAIN_TEXT" value="89" />
<entry key="XML" value="4" />
</counts>
</usages-collector>
</session>
@@ -135,20 +159,66 @@
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/Main.java">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/MyEmailController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="50">
<caret line="2" column="3" selection-start-line="2" selection-start-column="3" selection-end-line="2" selection-end-column="3" />
<state relative-caret-position="-13">
<caret line="120" column="9" lean-forward="true" selection-start-line="120" selection-start-column="9" selection-end-line="120" selection-end-column="9" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/message/MessageListController.java">
<entry file="file://$PROJECT_DIR$/src/main/resources/fxml/home/DealSingleReimbursement.fxml">
<provider editor-type-id="JavaFX-Scene-Builder" />
<provider selected="true" editor-type-id="text-editor" />
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/home/DealSingleReimbursementController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="475">
<caret line="29" column="31" selection-start-line="29" selection-start-column="31" selection-end-line="29" selection-end-column="31" />
<state relative-caret-position="294">
<caret line="238" column="49" lean-forward="true" selection-start-line="238" selection-start-column="49" selection-end-line="238" selection-end-column="49" />
<folding>
<element signature="e#975#976#0" expanded="true" />
<element signature="e#999#1000#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/MainApp.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="125">
<caret line="470" column="40" lean-forward="true" selection-start-line="470" selection-start-column="40" selection-end-line="470" selection-end-column="40" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/home/ReimbursementDealController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="169">
<caret line="41" column="50" lean-forward="true" selection-start-line="41" selection-start-column="50" selection-end-line="41" selection-end-column="50" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/dataRequestInterface/MinoaDataAPI.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="219">
<caret line="369" column="29" lean-forward="true" selection-start-line="369" selection-start-column="29" selection-end-line="369" selection-end-column="29" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
@@ -156,8 +226,36 @@
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/MineListController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="625">
<caret line="30" column="67" selection-start-line="30" selection-start-column="67" selection-end-line="30" selection-end-column="67" />
<state relative-caret-position="50">
<caret line="37" column="4" lean-forward="true" selection-start-line="37" selection-start-column="4" selection-end-line="37" selection-end-column="4" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/WrittenEmailController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75">
<caret line="181" selection-start-line="181" selection-end-line="187" selection-end-column="25" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#3210#3211#0" expanded="true" />
<element signature="e#3227#3228#0" expanded="true" />
<element signature="e#4638#4639#0" expanded="true" />
<element signature="e#4669#4670#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/SingleEmailDetailsController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="219">
<caret line="56" column="43" selection-start-line="56" selection-start-column="43" selection-end-line="56" selection-end-column="43" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
@@ -168,6 +266,7 @@
<option name="RECENT_TEMPLATES">
<list>
<option value="Class" />
<option value="FxmlFile" />
</list>
</option>
</component>
@@ -175,6 +274,20 @@
<findStrings>
<find>controller</find>
<find>view/</find>
<find>reimbu</find>
<find>email</find>
<find>home</find>
<find>ini</find>
<find>时间</find>
<find>联系人</find>
<find>han</find>
<find>switch</find>
<find>reimbursementFileListItem</find>
<find>ReimbursementListItem</find>
<find>客户端</find>
<find>exit</find>
<find>show</find>
<find>弹窗</find>
</findStrings>
</component>
<component name="Git.Settings">
@@ -607,13 +720,26 @@
<option value="$PROJECT_DIR$/ReadMe.txt" />
<option value="$PROJECT_DIR$/META-INF/MANIFEST.MF" />
<option value="$PROJECT_DIR$/build.gradle" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/MainApp.java" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/view/login/LoginOverviewController.java" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/view/home/HomeListController.java" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/MineListController.java" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/view/NavigationBarController.java" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/view/message/MessageListController.java" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/Main.java" />
<option value="$PROJECT_DIR$/src/main/resources/fxml/home/ReimbursementApplyOverview.fxml" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/model/Reimbursement.java" />
<option value="$PROJECT_DIR$/src/main/resources/fxml/home/SingleReimbursementDetails.fxml" />
<option value="$PROJECT_DIR$/src/main/resources/fxml/home/WrittenReimbursementDetails.fxml" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/view/login/LoginOverviewController.java" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/view/home/SingleReimbursementDetailsController.java" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/view/home/WrittenReimbursementController.java" />
<option value="$PROJECT_DIR$/src/main/resources/fxml/home/ReimbursementDealOverview.fxml" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/view/home/ReimbursementApplyController.java" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/view/home/HomeListController.java" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/WrittenEmailController.java" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/SingleEmailDetailsController.java" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/MainApp.java" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/view/home/ReimbursementDealController.java" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/dataRequestInterface/MinoaDataAPI.java" />
<option value="$PROJECT_DIR$/src/main/java/cn/minoa/view/home/DealSingleReimbursementController.java" />
</list>
</option>
</component>
@@ -629,7 +755,7 @@
<select />
</treeState>
</component>
<component name="ProjectFrameBounds" extendedState="1">
<component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="-8" />
<option name="y" value="-8" />
<option name="width" value="1386" />
@@ -680,8 +806,6 @@
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="AndroidView" />
<pane id="Scope" />
<pane id="PackagesPane" />
<pane id="ProjectPane">
<subPane>
@@ -690,16 +814,136 @@
<item name="Demo_gradle_javafx11_01" type="b2602c69:ProjectViewProjectNode" />
<item name="Demo_gradle_javafx11_01" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
</path>
<path>
<item name="Demo_gradle_javafx11_01" type="b2602c69:ProjectViewProjectNode" />
<item name="Demo_gradle_javafx11_01" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="Demo_gradle_javafx11_01" type="b2602c69:ProjectViewProjectNode" />
<item name="Demo_gradle_javafx11_01" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
</path>
<path>
<item name="Demo_gradle_javafx11_01" type="b2602c69:ProjectViewProjectNode" />
<item name="Demo_gradle_javafx11_01" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="Demo_gradle_javafx11_01" type="b2602c69:ProjectViewProjectNode" />
<item name="Demo_gradle_javafx11_01" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
<item name="minoa" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="Demo_gradle_javafx11_01" type="b2602c69:ProjectViewProjectNode" />
<item name="Demo_gradle_javafx11_01" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
<item name="minoa" type="462c0819:PsiDirectoryNode" />
<item name="dataRequestInterface" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="Demo_gradle_javafx11_01" type="b2602c69:ProjectViewProjectNode" />
<item name="Demo_gradle_javafx11_01" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
<item name="minoa" type="462c0819:PsiDirectoryNode" />
<item name="view" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="Demo_gradle_javafx11_01" type="b2602c69:ProjectViewProjectNode" />
<item name="Demo_gradle_javafx11_01" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
<item name="minoa" type="462c0819:PsiDirectoryNode" />
<item name="view" type="462c0819:PsiDirectoryNode" />
<item name="home" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="Demo_gradle_javafx11_01" type="b2602c69:ProjectViewProjectNode" />
<item name="Demo_gradle_javafx11_01" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
<item name="minoa" type="462c0819:PsiDirectoryNode" />
<item name="view" type="462c0819:PsiDirectoryNode" />
<item name="login" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="Demo_gradle_javafx11_01" type="b2602c69:ProjectViewProjectNode" />
<item name="Demo_gradle_javafx11_01" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
<item name="minoa" type="462c0819:PsiDirectoryNode" />
<item name="view" type="462c0819:PsiDirectoryNode" />
<item name="mine" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="Demo_gradle_javafx11_01" type="b2602c69:ProjectViewProjectNode" />
<item name="Demo_gradle_javafx11_01" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
<item name="minoa" type="462c0819:PsiDirectoryNode" />
<item name="view" type="462c0819:PsiDirectoryNode" />
<item name="mine" type="462c0819:PsiDirectoryNode" />
<item name="SingleEmailDetailsController.java" type="529ef68f:ClassesTreeStructureProvider$PsiClassOwnerTreeNode" />
</path>
<path>
<item name="Demo_gradle_javafx11_01" type="b2602c69:ProjectViewProjectNode" />
<item name="Demo_gradle_javafx11_01" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="resources" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="Demo_gradle_javafx11_01" type="b2602c69:ProjectViewProjectNode" />
<item name="Demo_gradle_javafx11_01" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="resources" type="462c0819:PsiDirectoryNode" />
<item name="fxml" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="Demo_gradle_javafx11_01" type="b2602c69:ProjectViewProjectNode" />
<item name="Demo_gradle_javafx11_01" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="resources" type="462c0819:PsiDirectoryNode" />
<item name="fxml" type="462c0819:PsiDirectoryNode" />
<item name="home" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="Demo_gradle_javafx11_01" type="b2602c69:ProjectViewProjectNode" />
<item name="Demo_gradle_javafx11_01" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="resources" type="462c0819:PsiDirectoryNode" />
<item name="fxml" type="462c0819:PsiDirectoryNode" />
<item name="mine" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
<pane id="AndroidView" />
<pane id="Scope" />
</panes>
</component>
<component name="PropertiesComponent">
<property name="SearchEverywhereHistoryKey" value="file&#9;ACTION&#9;ChangeFileEncodingAction" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1581787943272" />
<property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1582214408068" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/lib/sqlite-jdbc-3.30.1.jar" />
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
@@ -710,10 +954,14 @@
</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="E:\MyCode\newEclipseWorkspace\Demo_gradle_javafx11_01\src\main\resources\fxml\home" />
<recent name="E:\MyCode\newEclipseWorkspace\Demo_gradle_javafx11_01\ndn" />
<recent name="E:\MyCode\newEclipseWorkspace\Demo_gradle_javafx11_01\EXE" />
<recent name="E:\MyCode\newEclipseWorkspace\Demo_gradle_javafx11_01\src\main\java" />
<recent name="E:\MyCode\newEclipseWorkspace\Demo_gradle_javafx11_01" />
<recent name="E:\MyCode\newEclipseWorkspace\Demo_gradle_javafx11_01\lib" />
</key>
<key name="CopyClassDialog.RECENTS_KEY">
<recent name="cn.minoa.view.home" />
</key>
<key name="MoveFile.RECENT_KEYS">
<recent name="E:\MyCode\newEclipseWorkspace\Demo_gradle_javafx11_01\src\main\resources\fxml" />
@@ -735,7 +983,7 @@
</list>
</option>
</component>
<component name="RunManager" selected="Gradle.Demo_gradle_javafx11_01 [jar]">
<component name="RunManager" selected="Application.Main">
<configuration name="Main" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="cn.minoa.Main" />
<module name="Demo_gradle_javafx11_01_main" />
@@ -847,18 +1095,21 @@
<workItem from="1581696923134" duration="9052000" />
<workItem from="1581750395591" duration="9823000" />
<workItem from="1581766015797" duration="8050000" />
<workItem from="1581787475946" duration="433000" />
<workItem from="1581787475946" duration="766000" />
<workItem from="1581859383332" duration="9170000" />
<workItem from="1582094850998" duration="13191000" />
<workItem from="1582175443289" duration="2661000" />
<workItem from="1582199584649" duration="14818000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="35050000" />
<option name="totallyTimeSpent" value="75223000" />
</component>
<component name="ToolWindowManager">
<frame x="-8" y="-8" width="1386" height="788" extended-state="1" />
<editor active="true" />
<frame x="-8" y="-8" width="1382" height="744" extended-state="6" />
<layout>
<window_info active="true" content_ui="combo" id="Project" order="0" sideWeight="0.4977029" visible="true" weight="0.27978885" />
<window_info content_ui="combo" id="Project" order="0" sideWeight="0.4977029" visible="true" weight="0.31694403" />
<window_info id="Structure" order="1" sideWeight="0.5022971" side_tool="true" weight="0.30542988" />
<window_info id="Designer" order="2" />
<window_info id="Image Layers" order="3" />
@@ -867,7 +1118,7 @@
<window_info id="Capture Tool" order="6" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" weight="0.32874617" />
<window_info anchor="bottom" id="Run" order="2" weight="0.29096478" />
<window_info anchor="bottom" id="Run" order="2" weight="0.31198686" />
<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" />
@@ -884,11 +1135,43 @@
<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" weight="0.3295626" />
<window_info anchor="right" id="Gradle" order="6" visible="true" weight="0.3295626" />
<window_info anchor="right" id="Gradle" order="6" weight="0.073373675" />
<window_info anchor="right" id="Database" order="7" weight="0.3295626" />
<window_info anchor="right" id="Palette&#9;" order="8" />
<window_info anchor="right" id="Theme Preview" order="9" />
</layout>
<layout-to-restore>
<window_info active="true" content_ui="combo" id="Project" order="0" sideWeight="0.4977029" visible="true" weight="0.23524962" />
<window_info id="Structure" order="1" sideWeight="0.5022971" side_tool="true" weight="0.30542988" />
<window_info id="Designer" order="2" />
<window_info id="Image Layers" order="3" />
<window_info id="UI Designer" order="4" />
<window_info id="Favorites" order="5" sideWeight="0.5022971" side_tool="true" weight="0.30542988" />
<window_info id="Capture Tool" order="6" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" weight="0.32874617" />
<window_info anchor="bottom" id="Run" order="2" visible="true" weight="0.31198686" />
<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="Build" order="7" weight="0.32874617" />
<window_info anchor="bottom" id="Terminal" order="8" />
<window_info anchor="bottom" id="Event Log" order="9" side_tool="true" />
<window_info anchor="bottom" id="Messages" order="10" weight="0.58039814" />
<window_info anchor="bottom" id="Database Changes" order="11" show_stripe_button="false" />
<window_info anchor="bottom" id="Version Control" order="12" />
<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.14630468" />
<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" weight="0.3295626" />
<window_info anchor="right" id="Gradle" order="6" visible="true" weight="0.073373675" />
<window_info anchor="right" id="Database" order="7" weight="0.3295626" />
<window_info anchor="right" id="Palette&#9;" order="8" />
<window_info anchor="right" id="Theme Preview" order="9" />
</layout-to-restore>
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="1" />
@@ -901,126 +1184,6 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/model/Person.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="50">
<caret line="2" lean-forward="true" selection-start-line="2" selection-end-line="2" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/model/SingleMessage.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="50">
<caret line="2" lean-forward="true" selection-start-line="2" selection-end-line="2" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/model/SingleNotice.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="275">
<caret line="11" column="38" selection-start-line="11" selection-start-column="38" selection-end-line="11" selection-end-column="38" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/util/DateUtil.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="50">
<caret line="4" column="47" lean-forward="true" selection-start-line="4" selection-start-column="47" selection-end-line="4" selection-end-column="47" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/util/LocalDateAdapter.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="100">
<caret line="4" lean-forward="true" selection-start-line="4" selection-end-line="4" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/util/Tool.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="339">
<caret line="54" lean-forward="true" selection-start-line="54" selection-end-line="54" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/fxml/home/HomeList.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="25">
<caret line="1" column="20" selection-start-line="1" selection-start-column="20" selection-end-line="1" selection-end-column="20" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/fxml/home/HomeListOverview.fxml">
<provider editor-type-id="JavaFX-Scene-Builder" />
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="309">
<caret line="70" column="10" lean-forward="true" selection-start-line="70" selection-start-column="10" selection-end-line="70" selection-end-column="10" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/fxml/login/Login.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="50">
<caret line="2" column="29" selection-start-line="2" selection-start-column="29" selection-end-line="2" selection-end-column="29" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/fxml/login/Register.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="50">
<caret line="2" column="29" selection-start-line="2" selection-start-column="29" selection-end-line="2" selection-end-column="29" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/fxml/message/ChatBox.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="50">
<caret line="2" column="27" selection-start-line="2" selection-start-column="27" selection-end-line="2" selection-end-column="27" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/fxml/message/ChatBox_Version1.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="175">
<caret line="7" column="30" selection-start-line="7" selection-start-column="30" selection-end-line="7" selection-end-column="30" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/login/RegisterOverviewController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="225">
<caret line="11" column="30" lean-forward="true" selection-start-line="11" selection-start-column="30" selection-end-line="11" selection-end-column="30" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/message/ChatBoxController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="129">
<caret line="257" column="6" selection-start-line="257" selection-start-column="6" selection-end-line="257" selection-end-column="6" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/message/ChatBoxController_Version1.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="86">
<caret line="117" column="4" lean-forward="true" selection-start-line="117" selection-start-column="4" selection-end-line="117" selection-end-column="4" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/fxml/message/MessageList.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="25">
<caret line="1" column="2" lean-forward="true" selection-start-line="1" selection-start-column="2" selection-end-line="1" selection-end-column="2" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/HeadPhotoAboutMeController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="50">
<caret line="7" column="26" lean-forward="true" selection-start-line="7" selection-start-column="26" selection-end-line="7" selection-end-column="26" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/fxml/mine/MineList.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="50">
@@ -1049,13 +1212,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/MyEmailController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="212">
<caret line="238" column="13" lean-forward="true" selection-start-line="238" selection-start-column="13" selection-end-line="238" selection-end-column="13" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/fxml/mine/MyNotice.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="50">
@@ -1063,27 +1219,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/MyNoticeController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75">
<caret line="7" lean-forward="true" selection-start-line="7" selection-end-line="7" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/NewFolderDialogController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75">
<caret line="3" column="24" lean-forward="true" selection-start-line="3" selection-start-column="24" selection-end-line="3" selection-end-column="24" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/SingleEmailDetailsController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="87">
<caret line="149" lean-forward="true" selection-start-line="149" selection-end-line="149" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/fxml/mine/SingleNoticeDetails.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="339">
@@ -1129,13 +1264,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/WrittenEmailController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="975">
<caret line="65" column="16" selection-start-line="65" selection-start-column="16" selection-end-line="65" selection-end-column="16" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/WrittenNoticeController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="175">
@@ -1168,30 +1296,6 @@
<entry file="file://$PROJECT_DIR$/resources/images/logo_mini.png">
<provider selected="true" editor-type-id="images" />
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/login/LoginOverviewController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="60">
<caret line="45" column="37" lean-forward="true" selection-start-line="45" selection-start-column="37" selection-end-line="45" selection-end-column="37" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/MainApp.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="56">
<caret line="126" lean-forward="true" selection-start-line="126" selection-end-line="126" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/home/HomeListController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="25">
<caret line="2" column="24" lean-forward="true" selection-start-line="2" selection-start-column="24" selection-end-line="2" selection-end-column="24" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/resources/images/mImage/left.png">
<provider selected="true" editor-type-id="images" />
</entry>
@@ -1209,20 +1313,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/message/MessageListController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="475">
<caret line="29" column="31" selection-start-line="29" selection-start-column="31" selection-end-line="29" selection-end-column="31" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/MineListController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="625">
<caret line="30" column="67" selection-start-line="30" selection-start-column="67" selection-end-line="30" selection-end-column="67" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/NavigationBarController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="314">
@@ -1230,10 +1320,250 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/dataRequestInterface/creatNDNKey.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="553">
<caret line="36" lean-forward="true" selection-start-line="36" selection-end-line="36" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/message/MessageListController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="475">
<caret line="29" column="31" selection-start-line="29" selection-start-column="31" selection-end-line="29" selection-end-column="31" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/dataRequestInterface/DataCacheQueue.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="125">
<caret line="6" column="29" lean-forward="true" selection-start-line="6" selection-start-column="29" selection-end-line="6" selection-end-column="29" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/Main.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75">
<caret line="3" selection-start-line="3" selection-end-line="3" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/fxml/home/ReimbursementApplyOverview.fxml">
<provider editor-type-id="JavaFX-Scene-Builder" />
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="200">
<caret line="8" selection-start-line="8" selection-end-line="8" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/fxml/home/ReimbursementApply.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="250">
<caret line="10" column="8" selection-start-line="10" selection-start-column="8" selection-end-line="10" selection-end-column="8" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/NewFolderDialogController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="925">
<caret line="44" selection-start-line="44" selection-end-line="44" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/model/Reimbursement.java">
<provider selected="true" editor-type-id="text-editor">
<state>
<caret lean-forward="true" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#1930#1931#0" expanded="true" />
<element signature="e#1971#1972#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/login/LoginOverviewController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="53">
<caret line="970" lean-forward="true" selection-start-line="970" selection-end-line="970" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/model/Email.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="509">
<caret line="30" lean-forward="true" selection-start-line="30" selection-end-line="30" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/MyNoticeController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="509">
<caret line="66" selection-start-line="66" selection-end-line="66" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/fxml/home/WrittenReimbursementDetails.fxml">
<provider editor-type-id="JavaFX-Scene-Builder" />
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="164">
<caret line="23" column="127" lean-forward="true" selection-start-line="23" selection-start-column="127" selection-end-line="23" selection-end-column="127" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/fxml/home/ReimbursementDeal.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="275">
<caret line="11" column="3" lean-forward="true" selection-start-line="11" selection-start-column="3" selection-end-line="11" selection-end-column="3" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/fxml/home/ReimbursementDealOverview.fxml">
<provider editor-type-id="JavaFX-Scene-Builder" />
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="250">
<caret line="10" column="45" lean-forward="true" selection-start-line="10" selection-start-column="45" selection-end-line="10" selection-end-column="45" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/home/HomeListController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="116">
<caret line="51" selection-start-line="51" selection-end-line="51" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/home/ReimbursementApplyController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="238">
<caret line="122" column="22" lean-forward="true" selection-start-line="122" selection-start-column="22" selection-end-line="122" selection-end-column="22" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#3904#3905#0" expanded="true" />
<element signature="e#3960#3961#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/fxml/home/SingleReimbursementDetails.fxml">
<provider editor-type-id="JavaFX-Scene-Builder" />
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="313">
<caret line="20" column="23" selection-start-line="20" selection-start-column="23" selection-end-line="20" selection-end-column="23" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/home/SingleReimbursementDetailsController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="25">
<caret line="112" column="35" lean-forward="true" selection-start-line="112" selection-start-column="35" selection-end-line="112" selection-end-column="35" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/MineListController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="50">
<caret line="2" column="3" selection-start-line="2" selection-start-column="3" selection-end-line="2" selection-end-column="3" />
<caret line="37" column="4" lean-forward="true" selection-start-line="37" selection-start-column="4" selection-end-line="37" selection-end-column="4" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/SingleEmailDetailsController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="219">
<caret line="56" column="43" selection-start-line="56" selection-start-column="43" selection-end-line="56" selection-end-column="43" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/home/WrittenReimbursementController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="200">
<caret line="56" column="5" lean-forward="true" selection-start-line="56" selection-start-column="5" selection-end-line="56" selection-end-column="5" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#1683#1684#0" expanded="true" />
<element signature="e#1723#1724#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/fxml/home/DealSingleReimbursement.fxml">
<provider editor-type-id="JavaFX-Scene-Builder" />
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/MyEmailController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-13">
<caret line="120" column="9" lean-forward="true" selection-start-line="120" selection-start-column="9" selection-end-line="120" selection-end-column="9" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/mine/WrittenEmailController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75">
<caret line="181" selection-start-line="181" selection-end-line="187" selection-end-column="25" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#3210#3211#0" expanded="true" />
<element signature="e#3227#3228#0" expanded="true" />
<element signature="e#4638#4639#0" expanded="true" />
<element signature="e#4669#4670#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/MainApp.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="125">
<caret line="470" column="40" lean-forward="true" selection-start-line="470" selection-start-column="40" selection-end-line="470" selection-end-column="40" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/home/ReimbursementDealController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="169">
<caret line="41" column="50" lean-forward="true" selection-start-line="41" selection-start-column="50" selection-end-line="41" selection-end-column="50" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/dataRequestInterface/MinoaDataAPI.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="219">
<caret line="369" column="29" lean-forward="true" selection-start-line="369" selection-start-column="29" selection-end-line="369" selection-end-column="29" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/cn/minoa/view/home/DealSingleReimbursementController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="294">
<caret line="238" column="49" lean-forward="true" selection-start-line="238" selection-start-column="49" selection-end-line="238" selection-end-column="49" />
<folding>
<element signature="e#975#976#0" expanded="true" />
<element signature="e#999#1000#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane prefHeight="600.0" prefWidth="500.0" stylesheets="@ReimbursementDeal.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cn.minoa.view.home.DealSingleReimbursementController">
<children>
<Button mnemonicParsing="false" opacity="0.0" text="避免聚焦" />
<Text layoutX="65.0" layoutY="65.0" strokeType="OUTSIDE" strokeWidth="0.0" text="申报人:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="20.0" />
<Text layoutX="36.0" layoutY="73.0" strokeType="OUTSIDE" strokeWidth="0.0" text="审核人:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="60.0" />
<Text layoutX="30.0" layoutY="90.0" strokeType="OUTSIDE" strokeWidth="0.0" text="审批状态:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="100.0" />
<Text layoutX="30.0" layoutY="118.0" strokeType="OUTSIDE" strokeWidth="0.0" text="报销金额:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="140.0" />
<Text layoutX="42.0" layoutY="160.0" strokeType="OUTSIDE" strokeWidth="0.0" text="单据张数:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="180.0" />
<Text layoutX="30.0" layoutY="199.0" strokeType="OUTSIDE" strokeWidth="0.0" text="报销内容:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="220.0" />
<Text layoutX="18.0" layoutY="219.0" strokeType="OUTSIDE" strokeWidth="0.0" text="费用详细:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="260.0" />
<Text fx:id="reimFilesTitleText" layoutX="42.0" layoutY="243.0" strokeType="OUTSIDE" strokeWidth="0.0" text="报销凭证:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="400.0" />
<TextArea fx:id="detailTextArea" layoutX="135.0" layoutY="220.0" prefHeight="200.0" prefWidth="200.0" wrapText="true" AnchorPane.bottomAnchor="210.0" AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="285.0" />
<Text fx:id="senderText" layoutX="105.0" layoutY="32.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="20.0" />
<Text fx:id="receiverText" layoutX="100.0" layoutY="72.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="60.0" />
<Text fx:id="processText" layoutX="170.0" layoutY="112.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="100.0" />
<Text fx:id="moneyText" layoutX="100.0" layoutY="145.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="140.0" />
<Text fx:id="numberText" layoutX="100.0" layoutY="185.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="180.0" />
<Text fx:id="contentText" layoutX="100.0" layoutY="232.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="220.0" />
<ListView fx:id="reimFiles" layoutX="112.0" layoutY="386.0" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="50.0" AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="420.0" />
<Button layoutX="417.0" layoutY="563.0" mnemonicParsing="false" onAction="#exit" text="取消" AnchorPane.bottomAnchor="15.0" AnchorPane.rightAnchor="20.0" />
<Button layoutX="271.0" layoutY="562.0" mnemonicParsing="false" onAction="#passReim" text="通过报销" AnchorPane.bottomAnchor="15.0" AnchorPane.rightAnchor="175.0" />
<Button layoutX="351.0" layoutY="562.0" mnemonicParsing="false" onAction="#vetoReim" text="否决报销" AnchorPane.bottomAnchor="15.0" AnchorPane.rightAnchor="85.0" />
</children>
</AnchorPane>
@@ -13,10 +13,10 @@
<HBox spacing="10.0" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="7.0">
<children>
<ImageView fx:id="reimbursement" fitHeight="35.0" fitWidth="35.0" layoutX="45.0" layoutY="124.0" pickOnBounds="true" preserveRatio="true" />
<Label layoutX="10.0" layoutY="10.0" prefHeight="35.0" text="报销" />
<Label layoutX="10.0" layoutY="10.0" prefHeight="35.0" text="报销申请" />
</children>
</HBox>
<Button mnemonicParsing="false" opacity="0.3" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
<Button mnemonicParsing="false" onAction="#showReimApplyView" opacity="0.3" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
</children>
</AnchorPane>
<AnchorPane layoutX="40.0" layoutY="40.0" prefHeight="50.0" prefWidth="225.0" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="80.0">
@@ -24,10 +24,10 @@
<HBox spacing="10.0" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="7.0">
<children>
<ImageView fx:id="entry_examination" fitHeight="35.0" fitWidth="35.0" layoutX="45.0" layoutY="124.0" pickOnBounds="true" preserveRatio="true" />
<Label layoutX="10.0" layoutY="10.0" prefHeight="35.0" text="入职审批" />
<Label layoutX="10.0" layoutY="10.0" prefHeight="35.0" text="报销审批" />
</children>
</HBox>
<Button mnemonicParsing="false" opacity="0.3" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
<Button mnemonicParsing="false" onAction="#showReimDealView" opacity="0.3" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
</children>
</AnchorPane>
<AnchorPane layoutX="30.0" layoutY="30.0" prefHeight="50.0" prefWidth="225.0" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="130.0">
@@ -0,0 +1,46 @@
/*list样式
* */
.list-cell:empty {
-fx-background-color: white;
}
/*页面底色
*/
#upPane{
-fx-background-color:#E8F2FE;
}
/*文件图标样式
*/
.head{
-fx-background-radius: 1px;
-fx-background-position: center center;
-fx-background-repeat: no-repeat;
-fx-background-size: 40px 40px;
-fx-background-color: rgba(255,255,255,0);
-fx-background-image: url("file:resources/images/headPhotos/default.png");
-fx-cursor: hand;
-fx-border-width: 1px;
-fx-border-radius: 1px;
-fx-border-color:transparent;
}
.head:hover{
-fx-background-radius: 1px;
-fx-background-position: center center;
-fx-background-repeat: no-repeat;
-fx-background-color: transparent;
-fx-background-size: 40px 40px;
-fx-cursor: hand;
-fx-border-width: 1px;
-fx-border-radius: 1px;
-fx-border-color:transparent;
}
.head:pressed{
-fx-background-radius: 1px;
-fx-background-position: center center;
-fx-background-repeat: no-repeat;
-fx-background-color: transparent;
-fx-background-size: 40px 40px;
-fx-cursor: hand;
-fx-border-width: 1px;
-fx-border-radius: 1px;
-fx-border-color:transparent;
}
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane prefHeight="638.0" prefWidth="548.0" stylesheets="@ReimbursementApply.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cn.minoa.view.home.ReimbursementApplyController">
<children>
<ListView fx:id="reimbursementList" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="80.0" AnchorPane.leftAnchor="50.0" AnchorPane.rightAnchor="50.0" AnchorPane.topAnchor="120.0" />
<AnchorPane fx:id="upPane" prefHeight="55.0" prefWidth="548.0">
<children>
<Text fill="#370b5b" strokeType="OUTSIDE" strokeWidth="0.0" text="报销申请" textAlignment="CENTER" AnchorPane.leftAnchor="25.0" AnchorPane.topAnchor="15.0">
<font>
<Font name="Arial Black" size="18.0" />
</font>
</Text>
</children>
</AnchorPane>
<Text layoutX="45.0" layoutY="96.0" strokeType="OUTSIDE" strokeWidth="0.0" text="我发起的" underline="true" AnchorPane.leftAnchor="50.0" AnchorPane.topAnchor="72.0" />
<Text layoutX="96.0" layoutY="96.0" strokeType="OUTSIDE" strokeWidth="0.0" text="我审批的" underline="true" AnchorPane.leftAnchor="122.0" AnchorPane.topAnchor="72.0" />
<Button layoutX="39.0" layoutY="64.0" mnemonicParsing="false" onAction="#switchToSendBox" opacity="0.0" prefWidth="60.0" AnchorPane.leftAnchor="43.0" AnchorPane.topAnchor="68.0" />
<Button mnemonicParsing="false" onAction="#switchToRecvBox" opacity="0.0" prefWidth="60.0" AnchorPane.leftAnchor="115.0" AnchorPane.topAnchor="68.0" />
<Text fx:id="listTitleText" strokeType="OUTSIDE" strokeWidth="0.0" text="xxxx审批列表" AnchorPane.leftAnchor="50.0" AnchorPane.topAnchor="105.0" />
<Button layoutX="443.0" layoutY="586.0" mnemonicParsing="false" onAction="#handleWritter" text="申请报销" AnchorPane.bottomAnchor="30.0" AnchorPane.rightAnchor="60.0" />
</children>
</AnchorPane>
@@ -0,0 +1,46 @@
/*list样式
* */
.list-cell:empty {
-fx-background-color: white;
}
/*页面底色
*/
#upPane{
-fx-background-color:#E8F2FE;
}
/*文件图标样式
*/
.head{
-fx-background-radius: 1px;
-fx-background-position: center center;
-fx-background-repeat: no-repeat;
-fx-background-size: 40px 40px;
-fx-background-color: rgba(255,255,255,0);
-fx-background-image: url("file:resources/images/headPhotos/default.png");
-fx-cursor: hand;
-fx-border-width: 1px;
-fx-border-radius: 1px;
-fx-border-color:transparent;
}
.head:hover{
-fx-background-radius: 1px;
-fx-background-position: center center;
-fx-background-repeat: no-repeat;
-fx-background-color: transparent;
-fx-background-size: 40px 40px;
-fx-cursor: hand;
-fx-border-width: 1px;
-fx-border-radius: 1px;
-fx-border-color:transparent;
}
.head:pressed{
-fx-background-radius: 1px;
-fx-background-position: center center;
-fx-background-repeat: no-repeat;
-fx-background-color: transparent;
-fx-background-size: 40px 40px;
-fx-cursor: hand;
-fx-border-width: 1px;
-fx-border-radius: 1px;
-fx-border-color:transparent;
}
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane prefHeight="638.0" prefWidth="548.0" stylesheets="@ReimbursementDeal.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cn.minoa.view.home.ReimbursementDealController">
<children>
<AnchorPane fx:id="upPane" prefHeight="55.0" prefWidth="548.0">
<children>
<Text fill="#370b5b" strokeType="OUTSIDE" strokeWidth="0.0" text="报销审批" AnchorPane.leftAnchor="25.0" AnchorPane.topAnchor="15.0">
<font>
<Font name="Arial Black" size="18.0" />
</font>
</Text>
</children>
</AnchorPane>
<Text layoutX="41.0" layoutY="99.0" strokeType="OUTSIDE" strokeWidth="0.0" text="我收到的报销待审批列表" AnchorPane.leftAnchor="50.0" AnchorPane.topAnchor="100.0" />
<ListView fx:id="reimbursementList" layoutX="60.0" layoutY="119.0" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="80.0" AnchorPane.leftAnchor="50.0" AnchorPane.rightAnchor="50.0" AnchorPane.topAnchor="120.0" />
</children>
</AnchorPane>
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane prefHeight="600.0" prefWidth="500.0" stylesheets="@ReimbursementDeal.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cn.minoa.view.home.SingleReimbursementDetailsController">
<children>
<Button mnemonicParsing="false" opacity="0.0" text="避免聚焦" />
<Text layoutX="65.0" layoutY="65.0" strokeType="OUTSIDE" strokeWidth="0.0" text="申报人:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="20.0" />
<Text layoutX="36.0" layoutY="73.0" strokeType="OUTSIDE" strokeWidth="0.0" text="审核人:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="60.0" />
<Text layoutX="30.0" layoutY="90.0" strokeType="OUTSIDE" strokeWidth="0.0" text="审批状态:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="100.0" />
<Text layoutX="30.0" layoutY="118.0" strokeType="OUTSIDE" strokeWidth="0.0" text="报销金额:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="140.0" />
<Text layoutX="42.0" layoutY="160.0" strokeType="OUTSIDE" strokeWidth="0.0" text="单据张数:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="180.0" />
<Text layoutX="30.0" layoutY="199.0" strokeType="OUTSIDE" strokeWidth="0.0" text="报销内容:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="220.0" />
<Text layoutX="18.0" layoutY="219.0" strokeType="OUTSIDE" strokeWidth="0.0" text="费用详细:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="260.0" />
<Text fx:id="reimFilesTitleText" layoutX="42.0" layoutY="243.0" strokeType="OUTSIDE" strokeWidth="0.0" text="报销凭证:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="400.0" />
<TextArea fx:id="detailTextArea" layoutX="135.0" layoutY="220.0" prefHeight="200.0" prefWidth="200.0" wrapText="true" AnchorPane.bottomAnchor="210.0" AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="285.0" />
<Text fx:id="senderText" layoutX="105.0" layoutY="32.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="20.0" />
<Text fx:id="receiverText" layoutX="100.0" layoutY="72.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="60.0" />
<Text fx:id="processText" layoutX="170.0" layoutY="112.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="100.0" />
<Text fx:id="moneyText" layoutX="100.0" layoutY="145.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="140.0" />
<Text fx:id="numberText" layoutX="100.0" layoutY="185.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="180.0" />
<Text fx:id="contentText" layoutX="100.0" layoutY="232.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="220.0" />
<ListView fx:id="reimFiles" layoutX="112.0" layoutY="386.0" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="50.0" AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="420.0" />
<Button layoutX="417.0" layoutY="563.0" mnemonicParsing="false" onAction="#exit" text="OK" AnchorPane.bottomAnchor="15.0" AnchorPane.rightAnchor="20.0" />
</children>
</AnchorPane>
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane prefHeight="600.0" prefWidth="500.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cn.minoa.view.home.WrittenReimbursementController">
<children>
<Text layoutX="58.0" layoutY="54.0" strokeType="OUTSIDE" strokeWidth="0.0" text="审核人:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="20.0" />
<Text layoutX="30.0" layoutY="87.0" strokeType="OUTSIDE" strokeWidth="0.0" text="报销金额:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="70.0" />
<Text layoutX="42.0" layoutY="133.0" strokeType="OUTSIDE" strokeWidth="0.0" text="单据张数:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="120.0" />
<Text layoutX="66.0" layoutY="195.0" strokeType="OUTSIDE" strokeWidth="0.0" text="报销内容:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="170.0" />
<Text layoutX="48.0" layoutY="239.0" strokeType="OUTSIDE" strokeWidth="0.0" text="费用详细:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="220.0" />
<Text layoutX="42.0" layoutY="289.0" strokeType="OUTSIDE" strokeWidth="0.0" text="报销凭证:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="360.0" />
<TextArea fx:id="detailArea" layoutX="90.0" layoutY="120.0" prefHeight="200.0" prefWidth="200.0" wrapText="true" AnchorPane.bottomAnchor="250.0" AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="245.0" />
<ListView fx:id="reimbursementFiles" layoutX="108.0" layoutY="360.0" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="50.0" AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="380.0" />
<Button layoutX="209.0" layoutY="550.0" mnemonicParsing="false" onAction="#addFilesToReimbursement" text="添加附件" AnchorPane.bottomAnchor="10.0" AnchorPane.rightAnchor="185.0" />
<Button layoutX="352.0" layoutY="567.0" mnemonicParsing="false" onAction="#exit" text="取消" AnchorPane.bottomAnchor="10.0" AnchorPane.rightAnchor="120.0" />
<Button layoutX="410.0" layoutY="567.0" mnemonicParsing="false" onAction="#handleSendReimbursement" text="发送" AnchorPane.bottomAnchor="10.0" AnchorPane.rightAnchor="55.0" />
<TextField fx:id="receiverField" layoutX="106.0" layoutY="16.0" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="16.0" />
<TextField fx:id="moneyField" layoutX="106.0" layoutY="66.0" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="66.0" />
<TextField fx:id="numberField" layoutX="106.0" layoutY="116.0" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="116.0" />
<TextField fx:id="contentField" layoutX="106.0" layoutY="166.0" AnchorPane.leftAnchor="100.0" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="166.0" />
</children>
</AnchorPane>
@@ -20,7 +20,7 @@
<ListView fx:id="emailList" layoutX="135.0" layoutY="141.0" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="80.0" AnchorPane.leftAnchor="50.0" AnchorPane.rightAnchor="50.0" AnchorPane.topAnchor="120.0" />
<Button layoutX="424.0" layoutY="601.0" mnemonicParsing="false" onAction="#handleWritter" text="写信" AnchorPane.bottomAnchor="30.0" AnchorPane.rightAnchor="60.0" />
<Text layoutX="50.0" layoutY="85.0" onDragEntered="#switchToRecvBox" strokeType="OUTSIDE" strokeWidth="0.0" text="收件箱" underline="true" AnchorPane.leftAnchor="50.0" AnchorPane.topAnchor="72.0" />
<Text layoutX="120.0" layoutY="84.0" onDragEntered="#switchToSendBox" strokeType="OUTSIDE" strokeWidth="0.0" text="发件箱" underline="true" />
<Text layoutX="120.0" layoutY="84.0" onDragEntered="#switchToSendBox" strokeType="OUTSIDE" strokeWidth="0.0" text="发件箱" underline="true" AnchorPane.leftAnchor="120.0" AnchorPane.topAnchor="72.0" />
<Text fx:id="listTitleText" layoutX="249.0" layoutY="117.0" strokeType="OUTSIDE" strokeWidth="0.0" text="xx列表" textAlignment="CENTER" AnchorPane.leftAnchor="50.0" AnchorPane.topAnchor="105.0" />
<Button layoutX="41.0" layoutY="87.0" mnemonicParsing="false" onAction="#switchToRecvBox" opacity="0.0" prefWidth="50.0" text="R" AnchorPane.leftAnchor="42.0" AnchorPane.topAnchor="68.0" />
<Button layoutX="222.0" layoutY="76.0" mnemonicParsing="false" onAction="#switchToSendBox" opacity="0.0" prefWidth="50.0" text="S" AnchorPane.leftAnchor="115.0" AnchorPane.topAnchor="68.0" />
@@ -7,7 +7,7 @@
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefHeight="600.0" prefWidth="500.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cn.minoa.view.mine.SingleEmailDetailsController">
<AnchorPane prefHeight="600.0" prefWidth="500.0" stylesheets="@../home/ReimbursementDeal.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cn.minoa.view.mine.SingleEmailDetailsController">
<children>
<Button mnemonicParsing="false" opacity="0.0" text="透明=&gt;避免自动聚焦" />
<Text layoutX="30.0" layoutY="33.0" strokeType="OUTSIDE" strokeWidth="0.0" text="来自:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="20.0" />
@@ -8,6 +8,7 @@
<AnchorPane prefHeight="600.0" prefWidth="500.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cn.minoa.view.mine.WrittenEmailController">
<children>
<Button mnemonicParsing="false" opacity="0.0" text="避免聚焦" />
<Text layoutX="54.0" layoutY="49.0" strokeType="OUTSIDE" strokeWidth="0.0" text="收件人:" AnchorPane.leftAnchor="50.0" AnchorPane.topAnchor="50.0" />
<Text layoutX="54.0" layoutY="106.0" strokeType="OUTSIDE" strokeWidth="0.0" text="主题:" AnchorPane.leftAnchor="50.0" AnchorPane.topAnchor="90.0" />
<Text layoutX="54.0" layoutY="185.0" strokeType="OUTSIDE" strokeWidth="0.0" text="正文:" AnchorPane.leftAnchor="50.0" AnchorPane.topAnchor="130.0" />
+145 -8
View File
@@ -8,14 +8,9 @@ import java.util.Map;
import java.util.TreeMap;
import cn.minoa.dataRequestInterface.MinoaDataAPI;
import cn.minoa.model.Email;
import cn.minoa.model.Loginer;
import cn.minoa.model.NotReadMessageList;
import cn.minoa.model.Person;
import cn.minoa.model.SingleMessage;
import cn.minoa.model.SingleNotice;
import cn.minoa.model.*;
import cn.minoa.view.NavigationBarController;
import cn.minoa.view.home.HomeListController;
import cn.minoa.view.home.*;
import cn.minoa.view.login.LoginOverviewController;
import cn.minoa.view.login.RegisterOverviewController;
import cn.minoa.view.message.ChatBoxController;
@@ -71,6 +66,8 @@ public class MainApp extends Application {
private final String MAIN_EMAILPANE;
private final String MAIN_CLOUDFILEPANE;
private final String MAIN_ABOUTMINEPANE;
private final String MAIN_REIMPANE;
private final String MAIN_REIMDEALPANE;
// 判断联系人列表是否已经被完整加载的锁(保证刷新小红点的时候联系人列表已经产生)
private boolean contactListFinished;
@@ -121,6 +118,7 @@ public class MainApp extends Application {
fileServerBinPath = "/";
sharedFileServerPath = "/share/";
// userHeadPhotoBinPath = "E:\\MyCode\\newEclipseWorkspace\\minoa_client_windows_JavaFX11\\resources\\images\\headPhotos\\";
System.out.println("客户端根目录:"+getClientPath());
userHeadPhotoBinPath = getClientPath() + "\\resources\\images\\headPhotos\\";
// System.out.println(userHeadPhotoBinPath);
sliceSize = 7000;
@@ -137,6 +135,8 @@ public class MainApp extends Application {
MAIN_EMAILPANE = "MAIN_EMAILPANE";
MAIN_CLOUDFILEPANE = "MAIN_CLOUDFILEPANE";
MAIN_ABOUTMINEPANE = "MAIN_ABOUTMINEPANE";
MAIN_REIMPANE = "MAIN_REIMPANE";
MAIN_REIMDEALPANE = "MAIN_REIMDEALPANE";
// 记录字符串
currentSecondPane = SECOND_NULLPANE;
currentMainPane = MAIN_NULLPANE;
@@ -158,7 +158,7 @@ public class MainApp extends Application {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("客户端根目录:" + path);
// System.out.println("客户端根目录:" + path);
return path;
}
@@ -405,6 +405,143 @@ public class MainApp extends Application {
currentSecondPane = SECOND_HOMEPANE;
}
// 设为报销申请
public void showReimbursementOverview() throws IOException {
// 加载FXMLLoader
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getClassLoader().getResource("fxml/home/ReimbursementApplyOverview.fxml"));
// 修改主面板内容
barController.skipMainContextView(loader);
// 设置对应的控制器
ReimbursementApplyController reimbursementApplyController = loader.getController();
reimbursementApplyController.setMainApp(this);
currentMainPane = MAIN_REIMPANE;
}
// 重新加载我的报销【我申报的和我审核的】
public void reloadReimbursementOverview(String controlString) throws IOException {
// 加载FXMLLoader
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getClassLoader().getResource("fxml/home/ReimbursementApplyOverview.fxml"));
// 修改主面板内容
barController.skipMainContextView(loader);
// 设置对应的控制器
ReimbursementApplyController reimbursementApplyController = loader.getController();
reimbursementApplyController.setMainApp(this, controlString);
currentMainPane = MAIN_REIMPANE;
}
// 展示某条报销的详细信息
public void showReimbursementDetailsDialog(Reimbursement reimbursement) {
try {
// Load the fxml file and create a new stage for the popup dialog.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getClassLoader().getResource("fxml/home/SingleReimbursementDetails.fxml"));
AnchorPane page = (AnchorPane) loader.load();
// Create the dialog Stage.
Stage dialogStage = new Stage();
dialogStage.initStyle(StageStyle.TRANSPARENT);
dialogStage.setTitle("报销");
dialogStage.initModality(Modality.WINDOW_MODAL);
dialogStage.initOwner(primaryStage);
Scene scene = new Scene(page);
dialogStage.setScene(scene);
// Set the controller.
SingleReimbursementDetailsController controller = loader.getController();
controller.setDialogStage(dialogStage);
controller.setMainApp(this);
controller.setReimInfo(reimbursement);
// Show the dialog and wait until the user closes it
dialogStage.showAndWait();
} catch (IOException e) {
e.printStackTrace();
}
}
// 审核某条报销
public void dealReimbursementDetailsDialog(Reimbursement reimbursement) {
try {
// Load the fxml file and create a new stage for the popup dialog.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getClassLoader().getResource("fxml/home/DealSingleReimbursement.fxml"));
AnchorPane page = (AnchorPane) loader.load();
// Create the dialog Stage.
Stage dialogStage = new Stage();
dialogStage.initStyle(StageStyle.TRANSPARENT);
dialogStage.setTitle("审核报销");
dialogStage.initModality(Modality.WINDOW_MODAL);
dialogStage.initOwner(primaryStage);
Scene scene = new Scene(page);
dialogStage.setScene(scene);
// Set the controller.
DealSingleReimbursementController controller = loader.getController();
controller.setDialogStage(dialogStage);
controller.setMainApp(this);
controller.setReimInfo(reimbursement);
// Show the dialog and wait until the user closes it
dialogStage.showAndWait();
} catch (IOException e) {
e.printStackTrace();
}
}
// 展示编辑报销界面
public void showWritterReimbursementDialog() {
try {
// Load the fxml file and create a new stage for the popup dialog.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getClassLoader().getResource("fxml/home/WrittenReimbursementDetails.fxml"));
AnchorPane page = (AnchorPane) loader.load();
// Create the dialog Stage.
Stage dialogStage = new Stage();
dialogStage.initStyle(StageStyle.TRANSPARENT);
dialogStage.setTitle("报销申请");
dialogStage.initModality(Modality.WINDOW_MODAL);
dialogStage.initOwner(primaryStage);
Scene scene = new Scene(page);
dialogStage.setScene(scene);
// Set the controller.
WrittenReimbursementController controller = loader.getController();
controller.setStage(dialogStage);
controller.setMainApp(this);
// Show the dialog and wait until the user closes it
dialogStage.showAndWait();
} catch (IOException e) {
e.printStackTrace();
}
}
// 设为报销审核
public void showReimbursementDealOverview() throws IOException {
// 加载FXMLLoader
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getClassLoader().getResource("fxml/home/ReimbursementDealOverview.fxml"));
// 修改主面板内容
barController.skipMainContextView(loader);
// 设置对应的控制器
ReimbursementDealController controller = loader.getController();
controller.setMainApp(this);
currentMainPane = MAIN_REIMDEALPANE;
}
// 二级导航栏设为联系人列表页
public void showMessageListOverview() throws IOException {
contactListFinished = false;
@@ -27,8 +27,8 @@ import net.named_data.jndn.util.Blob;
public class MinoaDataAPI {
static private String keyChainNameString = "/wefree";
static private String minoaServerIpString = "121.15.171.89";
// static private String pidDbPathString = "E:\\MyCode\\newEclipseWorkspace\\minoa_client_windows_JavaFX11";
static private String pidDbPathString = "";
private String pidDbPathString;
// static private String pidDbPathString = "";
static private String globalPrefixString = "/ndn/edu/pkusz/OA";
KeyChain keyChain;
@@ -41,6 +41,7 @@ public class MinoaDataAPI {
this.face = new Face(minoaServerIpString);
this.dataCacheQueue = new DataCacheQueue();
this.mainApp = mainApp;
pidDbPathString=mainApp.getClientPath()+"\\ndn";
runFace();
try {
// 密钥“黑盒”
@@ -366,6 +367,9 @@ public class MinoaDataAPI {
case "/getDataSlice":
requestStr = orderInfo.getJsonString();
break;
case "/dealApproval":
requestStr = orderInfo.getJsonString();
break;
default:
requestStr = "*wrong command string*";
break;
@@ -0,0 +1,164 @@
package cn.minoa.model;
//报销类
import java.util.LinkedList;
import java.util.List;
import javafx.beans.property.*;
public class Reimbursement {
// 报销发起方
private StringProperty sender;
// 报销审批方
private StringProperty receiver;
// 报销编号
private IntegerProperty id;
// 报销状态
private IntegerProperty process;
//报销日期
private LongProperty date;
// 报销内容
private StringProperty content;
// 报销单据张数
private IntegerProperty number;
//报销总价值
private DoubleProperty totalMoney;
//报销费用详细
private StringProperty detail;
// 报销中的附件列表
public List<String> files;
public Reimbursement() {
// TODO Auto-generated constructor stub
detail = new SimpleStringProperty();
totalMoney=new SimpleDoubleProperty();
number = new SimpleIntegerProperty();
date =new SimpleLongProperty();
process=new SimpleIntegerProperty();
content = new SimpleStringProperty();
sender = new SimpleStringProperty();
receiver = new SimpleStringProperty();
id = new SimpleIntegerProperty();
files=new LinkedList<String>();
}
// id
public void setId(Integer id) {
this.id.set(id);
}
public Integer getId() {
return this.id.get();
}
public IntegerProperty idProperty() {
return id;
}
// sender
public void setSender(String sender) {
this.sender.set(sender);
}
public String getSender() {
return this.sender.get();
}
public StringProperty senderProperty() {
return sender;
}
// receiver
public void setReceiver(String receiver) {
this.receiver.set(receiver);
}
public String getReceiver() {
return this.receiver.get();
}
public StringProperty receiverProperty() {
return receiver;
}
//process
public void setProcess(Integer process){
this.process.set(process);
}
public Integer getProcess(){
return process.get();
}
public IntegerProperty processProperty(){
return process;
}
//date
public void setDate(Long date){
this.date.set(date);
}
public Long getDate(){
return date.get();
}
public LongProperty dateProperty(){
return date;
}
//number
public void setNumber(Integer number){
this.number.set(number);
}
public Integer getNumber(){
return number.get();
}
public IntegerProperty numberProperty(){
return number;
}
//totalMoney
public void setTotalMoney(Double totalMoney){
this.totalMoney.set(totalMoney);
}
public Double getTotalMoney(){
return totalMoney.get();
}
public DoubleProperty totalMoneyProperty(){
return totalMoney;
}
// detail
public void setDetail(String detail) {
this.detail.set(detail);
}
public String getDetail() {
return detail.get();
}
public StringProperty detailProperty() {
return detail;
}
// content
public void setContent(String content) {
this.content.set(content);
}
public String getContent() {
return content.get();
}
public StringProperty contentProperty() {
return content;
}
// 获取附件文件数目
public Integer getFilesNumber() {
return files.size();
}
}
@@ -0,0 +1,247 @@
package cn.minoa.view.home;
import cn.minoa.MainApp;
import cn.minoa.dataRequestInterface.OrderInfo;
import cn.minoa.dataRequestInterface.ResponseData;
import cn.minoa.model.Email;
import cn.minoa.model.Reimbursement;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.ListView;
import javafx.scene.control.TextArea;
import javafx.scene.layout.Pane;
import javafx.scene.text.Text;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.util.LinkedList;
import java.util.List;
public class DealSingleReimbursementController {
private MainApp mainApp;
private Stage dialogStage;
private Integer aprovalId;
@FXML
private Text senderText;
@FXML
private Text receiverText;
@FXML
private Text processText;
@FXML
private Text moneyText;
@FXML
private Text numberText;
@FXML
private Text contentText;
@FXML
private TextArea detailTextArea;
@FXML
private Text reimFilesTitleText;
@FXML
private ListView<Pane> reimFiles;
public DealSingleReimbursementController(){
aprovalId=0;
}
@FXML
private void initialize() {
// 在fxml被载入时候被自动调用
// 监听选择的改变
reimFiles.getSelectionModel().selectedItemProperty()
.addListener((observable, oldValue, newValue) -> downloadReimFile(newValue.getId()));
}
/*
* @param mainApp
*/
public void setMainApp(MainApp mainApp) {
this.mainApp = mainApp;
}
public void setReimInfo(Reimbursement reimbursement) {
senderText.setText(reimbursement.getSender());
receiverText.setText(reimbursement.getReceiver());
processText.setText(reimbursement.getProcess().toString());
moneyText.setText(reimbursement.getTotalMoney().toString());
numberText.setText(reimbursement.getNumber().toString());
contentText.setText(reimbursement.getContent());
detailTextArea.setText(reimbursement.getDetail());
aprovalId=reimbursement.getId();
// 如果邮件带有附件,将其显示到前端
showReimFiles(reimbursement);
}
private void showReimFiles(Reimbursement reimbursement) {
if (reimbursement.getFilesNumber() == 0) {
// 没有文件,隐藏附件列表
// ...
reimFilesTitleText.setText("报销凭证【当前报销申请无附加凭证】");
} else {
// 有文件,展示到前端
for (int i = 0; i < reimbursement.getFilesNumber(); i++) {
reimFiles.getItems().add(new reimbursementFileListItem(reimbursement.files.get(i)).getPaneItem());
}
}
}
//从服务器下载选中的附件到指定的本地文件夹下
private void downloadReimFile(String pathfilename) {
//选择要下载到的文件夹
String localDirString=mainApp.fileLocalPath;
DirectoryChooser directoryChooser=new DirectoryChooser();
directoryChooser.setTitle("选择要下载到的本地文件夹");
Stage selectFileStage = new Stage();
File file = directoryChooser.showDialog(selectFileStage);
if (file != null) {
//文件不为空,且不是文件夹
if(file.isDirectory()) {
localDirString=file.getPath()+"\\";
System.out.println("选中的文件夹为:"+localDirString);
}else {
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.WARNING);
alert.setTitle("选中类型错误");
alert.setHeaderText("你的选中类型错误");
alert.setContentText("请确保你选中的是一个文件夹而不是一个文件。");
alert.showAndWait();
}
}else{
return ;
}
System.out.println("开始下载... :"+pathfilename);
int flag=mainApp.downloadFileByPathfilename(pathfilename,localDirString);
if(flag==0) {
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("下载成功");
alert.setHeaderText("下载文件成功");
alert.setContentText("您请求的文件数据已经被全部下载到本地,"
+ "如有发现打开异常或数据内容并非所求,说明出现了服务器数据请求问题。"
+ "您的文件保存位置为:"+localDirString);
alert.showAndWait();
}else {
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("下载失败");
alert.setHeaderText("下载文件失败");
alert.setContentText("本地文件数据写入失败,请检查是否有权限访问默认存储位置。"
+ "您的文件默认保存位置为:"+localDirString);
alert.showAndWait();
}
}
public void setDialogStage(Stage stage) {
this.dialogStage = stage;
}
@FXML
private void exit() {
this.dialogStage.close();
}
@FXML
private void passReim(){
//通过报销
//否决报销
Integer r=makeReim(1);
if(r==0){
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("通过报销成功");
alert.setHeaderText("已通过该报销申请");
alert.setContentText("已通过该报销申请,报销的ID为:"+aprovalId);
alert.showAndWait();
exit();
}else{
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("通过报销失败");
alert.setHeaderText("通过该报销申请失败");
alert.setContentText("由于未知原因,不能通过该报销申请,报销的ID为:"+aprovalId);
alert.showAndWait();
exit();
}
}
@FXML
private void vetoReim(){
//否决报销
Integer r=makeReim(0);
if(r==0){
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("否决报销成功");
alert.setHeaderText("已否决该报销申请");
alert.setContentText("已否决该报销申请,报销的ID为:"+aprovalId);
alert.showAndWait();
exit();
}else{
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("否决报销失败");
alert.setHeaderText("否决该报销申请失败");
alert.setContentText("由于未知原因,不能否决该报销申请,报销的ID为:"+aprovalId);
alert.showAndWait();
exit();
}
}
//审核报销:0不通过,1通过
private Integer makeReim(Integer rstCode){
if(aprovalId==0){
return -1;
}
// 请求数据
OrderInfo orderInfo = new OrderInfo();
ResponseData responseData = new ResponseData();
Long seqLong = mainApp.getNewDataReqId();
orderInfo.setSeq(seqLong);
orderInfo.setJsonString(getDealApproval(aprovalId,rstCode));
mainApp.minoaDataAPI.executeOrder("/dealApproval", orderInfo);
responseData = mainApp.minoaDataAPI.dataCacheQueue.getResponseDataBySeq(seqLong);
JSONObject jsonObject = responseData.praseRequestData();
responseData.printSelf();
// 解析数据
Integer codeInteger = null;
try {
codeInteger = jsonObject.getInt("code");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (codeInteger == 200) {
return 0;
} else {
return -1;
}
}
// 审核报销命令: 0表示不通过,1表示通过
private String getDealApproval(Integer aprId,Integer rstCode) {
JSONObject jsonObject = new JSONObject();
String commandString = "/dealApproval";
String usernameString = mainApp.loginer.getUserName();
String uuidString = mainApp.loginer.getUuid();
Integer approvalIdInteger = aprId;
Integer approvalRstInteger = rstCode;
try {
jsonObject.put("command", commandString);
jsonObject.put("username", usernameString);
jsonObject.put("uuid", uuidString);
jsonObject.put("approvalId", approvalIdInteger);
jsonObject.put("approvalRst", approvalRstInteger);
jsonObject.put("reason","no reason");
} catch (Exception e) {
// TODO: handle exception
System.out.println("exception: " + e.getMessage());
}
return jsonObject.toString();
}
}
@@ -5,6 +5,7 @@ import javafx.fxml.FXML;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import java.io.IOException;
public class HomeListController {
@SuppressWarnings("unused")
@@ -40,4 +41,14 @@ public class HomeListController {
public void setMainApp(MainApp mainApp) {
this.mainApp = mainApp;
}
@FXML
private void showReimApplyView() throws IOException {
mainApp.showReimbursementOverview();
}
@FXML
private void showReimDealView() throws IOException {
mainApp.showReimbursementDealOverview();
}
}
@@ -0,0 +1,344 @@
package cn.minoa.view.home;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import cn.minoa.model.Reimbursement;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import cn.minoa.MainApp;
import cn.minoa.dataRequestInterface.OrderInfo;
import cn.minoa.dataRequestInterface.ResponseData;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.scene.layout.Pane;
import javafx.scene.text.Text;
public class ReimbursementApplyController {
private MainApp mainApp;
private List<Reimbursement> reimbursementInfoList;
private final String CONTROLSTRING_SEND;//表示“我发起的”
private final String CONTROLSTRING_RECEIVE;//表示“我审批的”
@FXML
private Text listTitleText;
@FXML
private ListView<Pane> reimbursementList;
public ReimbursementApplyController() {
// TODO Auto-generated constructor stub
reimbursementInfoList = new LinkedList<Reimbursement>();
CONTROLSTRING_RECEIVE = "R";
CONTROLSTRING_SEND = "S";
}
@FXML
private void initialize() {
// 在fxml被载入时候被自动调用
// 监听选择的改变
reimbursementList.getSelectionModel().selectedItemProperty()
.addListener((observable, oldValue, newValue) -> showReimbursementDetails(Integer.parseInt(newValue.getId())));
}
/*
* @param mainApp
*/
public void setMainApp(MainApp mainApp) {
// 被mainApp调用
this.mainApp = mainApp;
// 缺省标题
listTitleText.setText("我申报的报销列表");
// 初始化list
getReimbursement(0);
// 反应到前端
for (int i = 0; i < reimbursementInfoList.size(); i++) {
reimbursementList.getItems().add(new ReimbursementListItem(reimbursementInfoList.get(i)).getPaneItem());
}
}
/*
* @param mainApp
*/
public void setMainApp(MainApp mainApp, String controlString) {
// 被mainApp调用
this.mainApp = mainApp;
if (controlString.equals(CONTROLSTRING_RECEIVE)) {
// 缺省标题
listTitleText.setText("我审核的报销列表");
// 初始化list
getReimbursement(1);
// 反应到前端
for (int i = 0; i < reimbursementInfoList.size(); i++) {
reimbursementList.getItems().add(new ReimbursementListItem(reimbursementInfoList.get(i)).getPaneItem());
}
} else {
// 缺省标题
listTitleText.setText("我申报的报销列表");
// 初始化list
getReimbursement(0);
// 反应到前端
for (int i = 0; i < reimbursementInfoList.size(); i++) {
reimbursementList.getItems().add(new ReimbursementListItem(reimbursementInfoList.get(i)).getPaneItem());
}
}
}
// 切换成我审批的报销审批
@FXML
private void switchToSendBox() {
try {
mainApp.reloadReimbursementOverview(CONTROLSTRING_SEND);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 切换成我发出的报销审批
@FXML
private void switchToRecvBox() {
try {
mainApp.reloadReimbursementOverview(CONTROLSTRING_RECEIVE);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 展示报销的详细信息的弹窗
private void showReimbursementDetails(Integer paneId) {
// 在当前数据结构中找到这个emailId对应的邮件
Reimbursement reimbursement = new Reimbursement();
for (int i = 0; i < reimbursementInfoList.size(); i++) {
reimbursement = reimbursementInfoList.get(i);
if (reimbursement.getId() == paneId) {
break;
}
}
// 传递给主函数
mainApp.showReimbursementDetailsDialog(reimbursement);
}
// 申请报销弹窗
@FXML
private void handleWritter() {
mainApp.showWritterReimbursementDialog();
}
// 发送数据请求请求发送给登录者的报销列表
private Integer getReimbursement(Integer queryCode) {
// 请求数据
OrderInfo orderInfo = new OrderInfo();
ResponseData responseData = new ResponseData();
Long seqLong = mainApp.getNewDataReqId();
orderInfo.setSeq(seqLong);
orderInfo.setJsonString(getGetApproval(queryCode));
mainApp.minoaDataAPI.executeOrder("/getApproval", orderInfo);
responseData = mainApp.minoaDataAPI.dataCacheQueue.getResponseDataBySeq(seqLong);
JSONObject jsonObject = responseData.praseRequestData();
responseData.printSelf();
// 解析数据
Integer codeInteger = null;
try {
codeInteger = jsonObject.getInt("code");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (codeInteger == 200) {
String dataString;
try {
dataString = jsonObject.getString("data");
if ((dataString.equals("")) || (dataString.equals("null"))) {
reimbursementInfoList.clear();
return 0;
}
reimbursementInfoList.clear();
JSONArray dataJsonArray = new JSONArray(dataString);
String reimbursementCacheString;
JSONObject reimbursementCacheJsonObject;
// 遍历每个邮件信息
for (int i = 0; i < dataJsonArray.length(); i++) {
reimbursementCacheString = dataJsonArray.getString(i);
reimbursementCacheJsonObject = new JSONObject(reimbursementCacheString);
Integer id = reimbursementCacheJsonObject.getInt("approvalId");
String senderInfo = reimbursementCacheJsonObject.getString("proposer");
// 解析发送者和接收者的姓名
String receiverInfo = reimbursementCacheJsonObject.getString("approver");
Integer process=reimbursementCacheJsonObject.getInt("process");
String detailString = reimbursementCacheJsonObject.getString("detail");
JSONObject receiverJsonObject = new JSONObject(receiverInfo);
JSONObject senderJsonObject = new JSONObject(senderInfo);
String sender_usernameString = senderJsonObject.getString("username");
String receiver_usernameString = receiverJsonObject.getString("username");
// 解析报销详细内容
JSONObject detailJsonObject = new JSONObject(detailString);
Long detail_date = detailJsonObject.getLong("date");
String detail_content = detailJsonObject.getString("content");
Integer detail_invoiceNum = detailJsonObject.getInt("invoiceNum");
Double detail_totalMoney = detailJsonObject.getDouble("totalMoney");
String detail_detail = detailJsonObject.getString("detail");
//解析邮件的附件列表
String filesString=detailJsonObject.getString("pictures");
JSONArray filesJsonArray=new JSONArray(filesString);
List<String> reimbursementfiles=new LinkedList<String>();
for(int j=0;j<filesJsonArray.length();j++) {
String onefileString=filesJsonArray.getString(j);
reimbursementfiles.add(onefileString);
}
//构建一个报销对象
Reimbursement reimbursement = new Reimbursement();
reimbursement.setId(id);
reimbursement.setProcess(process);
reimbursement.setDate(detail_date);
reimbursement.setContent(detail_content);
reimbursement.setDetail(detail_detail);
reimbursement.setNumber(detail_invoiceNum);
reimbursement.setTotalMoney(detail_totalMoney);
reimbursement.setSender(sender_usernameString);
reimbursement.setReceiver(receiver_usernameString);
reimbursement.files=reimbursementfiles;
reimbursementInfoList.add(reimbursement);
}
return 0;
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return -1;
}
} else if(codeInteger==201){
System.out.println("201:报销审批,请使用大数据接口获取数据");
} else {
return -1;
}
return -1;
}
// 获取记录命令: 0表示查询我发送的,1表示查询发送给我的
private String getGetApproval(Integer queryCode) {
JSONObject jsonObject = new JSONObject();
String commandString = "/getApproval";
String usernameString = mainApp.loginer.getUserName();
String uuidString = mainApp.loginer.getUuid();
Integer typeCodeInteger = 2;
Integer queryCodeInteger = queryCode;
Integer pageNoInteger = 0; // 页编号
Integer pageSizeInteger = 6; // 页大小
try {
jsonObject.put("command", commandString);
jsonObject.put("username", usernameString);
jsonObject.put("uuid", uuidString);
jsonObject.put("typeCode", typeCodeInteger);
jsonObject.put("queryCode", queryCodeInteger);
jsonObject.put("pageNo", pageNoInteger);
jsonObject.put("pageSize", pageSizeInteger);
} catch (Exception e) {
// TODO: handle exception
System.out.println("exception: " + e.getMessage());
}
return jsonObject.toString();
}
}
class ReimbursementListItem {
// 外部pane
private Pane pane;
private Integer paneWidth;
private Integer paneHeight;
// 头像
private Button head;
private Integer headLength;
// 文本区域
private Text text; // 显示报销发送者姓名
private Text titleText; // 显示报销审核状态
private Reimbursement reimbursement;
// 组件位置属性
private Integer headXInteger;
private Integer headYInteger;
private Integer textXInteger;
private Integer textYInteger;
private Integer titleTextXInteger;
private Integer titleTextYInteger;
// 设置联系人头像
private void setHeadPortrait(Button button, String username) {
button.setStyle(
String.format("-fx-background-image: url('file:resources/images/headPhotos/%s.png')", username));
}
// 构造函数
public ReimbursementListItem(Reimbursement reimbursement) {
// 数据配置
this.reimbursement = reimbursement;
// 大小配置
paneWidth = 200;
paneHeight = 50;
headLength = 35;
// 位置配置
headXInteger = 10;
headYInteger = 10;
textXInteger = 70;
textYInteger = 28;
titleTextXInteger = 250;
titleTextYInteger = 28;
pane = new Pane();
head = new Button();
text = new Text();
titleText = new Text();
// 最外面的pane的大小
pane.setPrefSize(paneWidth, paneHeight);
// 设置头像和pane的CSS的样式标识
head.getStyleClass().add("head");
pane.getStyleClass().add("pane");
// 设置消息头像和消息文本属性
head.setPrefSize(headLength, headLength);
}
// 根据email获取pane
public Pane getPaneItem() {
// 头像位置
head.setLayoutY(headYInteger);
head.setLayoutX(headXInteger);
// 发送人名位置
text.setLayoutX(textXInteger);
text.setLayoutY(textYInteger);
// 审核状态位置
titleText.setLayoutX(titleTextXInteger);
titleText.setLayoutY(titleTextYInteger);
// 头像和气泡文本内容
text.setText(reimbursement.getSender()+"提交的报销申请");
titleText.setText("【"+getProcessString(reimbursement.getProcess())+"】");
setHeadPortrait(head, reimbursement.getSender());
// 赋值子节点
pane.getChildren().add(head);
pane.getChildren().add(text);
pane.getChildren().add(titleText);
// 设置pane的id
pane.setId(reimbursement.getId().toString());
return pane;
}
//根据报销状态字节码获取报销状态
private String getProcessString(Integer type){
if(type==0){
return "等待处理";
}else if(type==1){
return "已处理";
}else if(type==2){
return "审批未通过";
}else if(type==3){
return "审批通过";
}else{
return "审核进度未知";
}
}
}
@@ -0,0 +1,197 @@
package cn.minoa.view.home;
import cn.minoa.MainApp;
import cn.minoa.dataRequestInterface.OrderInfo;
import cn.minoa.dataRequestInterface.ResponseData;
import cn.minoa.model.Reimbursement;
import javafx.fxml.FXML;
import javafx.scene.control.ListView;
import javafx.scene.layout.Pane;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.LinkedList;
import java.util.List;
public class ReimbursementDealController {
private MainApp mainApp;
private List<Reimbursement> reimbursementInfoList;
@FXML
private ListView<Pane> reimbursementList;
public ReimbursementDealController(){
reimbursementInfoList = new LinkedList<Reimbursement>();
}
@FXML
private void initialize() {
// 在fxml被载入时候被自动调用
// 监听选择的改变
reimbursementList.getSelectionModel().selectedItemProperty()
.addListener((observable, oldValue, newValue) -> showReimbursementDetails(Integer.parseInt(newValue.getId())));
}
// 展示报销的详细信息的弹窗
private void showReimbursementDetails(Integer paneId) {
// 在当前数据结构中找到这个emailId对应的邮件
Reimbursement reimbursement = new Reimbursement();
for (int i = 0; i < reimbursementInfoList.size(); i++) {
reimbursement = reimbursementInfoList.get(i);
if (reimbursement.getId() == paneId) {
break;
}
}
// 传递给主函数
mainApp.dealReimbursementDetailsDialog(reimbursement);
}
//弹出一个可以选择通过审批或者拒绝通过审批的弹窗
private void dealReimbursementDetails(Integer paneId){
// 在当前数据结构中找到这个emailId对应的邮件
Reimbursement reimbursement = new Reimbursement();
for (int i = 0; i < reimbursementInfoList.size(); i++) {
reimbursement = reimbursementInfoList.get(i);
if (reimbursement.getId() == paneId) {
break;
}
}
//然后发条消息将这个审批给通过或否决
//...
}
/*
* @param mainApp
*/
public void setMainApp(MainApp mainApp) {
// 被mainApp调用
this.mainApp = mainApp;
// 初始化list
getReimbursement(1);
// 反应到前端
for (int i = 0; i < reimbursementInfoList.size(); i++) {
reimbursementList.getItems().add(new ReimbursementListItem(reimbursementInfoList.get(i)).getPaneItem());
}
}
// 发送数据请求请求发送给登录者的报销列表
// 0表示我发送的,1表示发送给我的
// 要判断是否是已经被审核的,process=0表示还审核
private Integer getReimbursement(Integer queryCode) {
// 请求数据
OrderInfo orderInfo = new OrderInfo();
ResponseData responseData = new ResponseData();
Long seqLong = mainApp.getNewDataReqId();
orderInfo.setSeq(seqLong);
orderInfo.setJsonString(getGetApproval(queryCode));
mainApp.minoaDataAPI.executeOrder("/getApproval", orderInfo);
responseData = mainApp.minoaDataAPI.dataCacheQueue.getResponseDataBySeq(seqLong);
JSONObject jsonObject = responseData.praseRequestData();
responseData.printSelf();
// 解析数据
Integer codeInteger = null;
try {
codeInteger = jsonObject.getInt("code");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (codeInteger == 200) {
String dataString;
try {
dataString = jsonObject.getString("data");
if ((dataString.equals("")) || (dataString.equals("null"))) {
reimbursementInfoList.clear();
return 0;
}
reimbursementInfoList.clear();
JSONArray dataJsonArray = new JSONArray(dataString);
String reimbursementCacheString;
JSONObject reimbursementCacheJsonObject;
// 遍历每个信息
for (int i = 0; i < dataJsonArray.length(); i++) {
reimbursementCacheString = dataJsonArray.getString(i);
reimbursementCacheJsonObject = new JSONObject(reimbursementCacheString);
Integer id = reimbursementCacheJsonObject.getInt("approvalId");
String senderInfo = reimbursementCacheJsonObject.getString("proposer");
// 解析发送者和接收者的姓名
String receiverInfo = reimbursementCacheJsonObject.getString("approver");
Integer process=reimbursementCacheJsonObject.getInt("process");
String detailString = reimbursementCacheJsonObject.getString("detail");
JSONObject receiverJsonObject = new JSONObject(receiverInfo);
JSONObject senderJsonObject = new JSONObject(senderInfo);
String sender_usernameString = senderJsonObject.getString("username");
String receiver_usernameString = receiverJsonObject.getString("username");
// 解析报销详细内容
JSONObject detailJsonObject = new JSONObject(detailString);
Long detail_date = detailJsonObject.getLong("date");
String detail_content = detailJsonObject.getString("content");
Integer detail_invoiceNum = detailJsonObject.getInt("invoiceNum");
Double detail_totalMoney = detailJsonObject.getDouble("totalMoney");
String detail_detail = detailJsonObject.getString("detail");
//解析邮件的附件列表
String filesString=detailJsonObject.getString("pictures");
JSONArray filesJsonArray=new JSONArray(filesString);
List<String> reimbursementfiles=new LinkedList<String>();
for(int j=0;j<filesJsonArray.length();j++) {
String onefileString=filesJsonArray.getString(j);
reimbursementfiles.add(onefileString);
}
//构建一个报销对象
Reimbursement reimbursement = new Reimbursement();
reimbursement.setId(id);
reimbursement.setProcess(process);
reimbursement.setDate(detail_date);
reimbursement.setContent(detail_content);
reimbursement.setDetail(detail_detail);
reimbursement.setNumber(detail_invoiceNum);
reimbursement.setTotalMoney(detail_totalMoney);
reimbursement.setSender(sender_usernameString);
reimbursement.setReceiver(receiver_usernameString);
reimbursement.files=reimbursementfiles;
if(reimbursement.getProcess()==0){
reimbursementInfoList.add(reimbursement);
}else{
//do nothing
}
}
return 0;
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return -1;
}
} else if(codeInteger==201){
System.out.println("201:报销审批,请使用大数据接口获取数据");
} else {
return -1;
}
return -1;
}
// 获取邮件记录命令: 0表示查询我发送的,1表示查询发送给我的
private String getGetApproval(Integer queryCode) {
JSONObject jsonObject = new JSONObject();
String commandString = "/getApproval";
String usernameString = mainApp.loginer.getUserName();
String uuidString = mainApp.loginer.getUuid();
Integer typeCodeInteger = 2;
Integer queryCodeInteger = queryCode;
Integer pageNoInteger = 0; // 页编号
Integer pageSizeInteger = 6; // 页大小
try {
jsonObject.put("command", commandString);
jsonObject.put("username", usernameString);
jsonObject.put("uuid", uuidString);
jsonObject.put("typeCode", typeCodeInteger);
jsonObject.put("queryCode", queryCodeInteger);
jsonObject.put("pageNo", pageNoInteger);
jsonObject.put("pageSize", pageSizeInteger);
} catch (Exception e) {
// TODO: handle exception
System.out.println("exception: " + e.getMessage());
}
return jsonObject.toString();
}
}
@@ -0,0 +1,138 @@
package cn.minoa.view.home;
import cn.minoa.MainApp;
import cn.minoa.model.Reimbursement;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.ListView;
import javafx.scene.control.TextArea;
import javafx.scene.layout.Pane;
import javafx.scene.text.Text;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
import java.io.File;
public class SingleReimbursementDetailsController {
private MainApp mainApp;
private Stage dialogStage;
@FXML
private Text senderText;
@FXML
private Text receiverText;
@FXML
private Text processText;
@FXML
private Text moneyText;
@FXML
private Text numberText;
@FXML
private Text contentText;
@FXML
private TextArea detailTextArea;
@FXML
private Text reimFilesTitleText;
@FXML
private ListView<Pane> reimFiles;
public SingleReimbursementDetailsController(){
}
@FXML
private void initialize() {
// 在fxml被载入时候被自动调用
// 监听选择的改变
reimFiles.getSelectionModel().selectedItemProperty()
.addListener((observable, oldValue, newValue) -> downloadReimFile(newValue.getId()));
}
/*
* @param mainApp
*/
public void setMainApp(MainApp mainApp) {
this.mainApp = mainApp;
}
public void setReimInfo(Reimbursement reimbursement) {
senderText.setText(reimbursement.getSender());
receiverText.setText(reimbursement.getReceiver());
processText.setText(reimbursement.getProcess().toString());
moneyText.setText(reimbursement.getTotalMoney().toString());
numberText.setText(reimbursement.getNumber().toString());
contentText.setText(reimbursement.getContent());
detailTextArea.setText(reimbursement.getDetail());
// 如果邮件带有附件,将其显示到前端
showReimFiles(reimbursement);
}
private void showReimFiles(Reimbursement reimbursement) {
if (reimbursement.getFilesNumber() == 0) {
// 没有文件,隐藏附件列表
// ...
reimFilesTitleText.setText("报销凭证【当前报销申请无附加凭证】");
} else {
// 有文件,展示到前端
for (int i = 0; i < reimbursement.getFilesNumber(); i++) {
reimFiles.getItems().add(new reimbursementFileListItem(reimbursement.files.get(i)).getPaneItem());
}
}
}
//从服务器下载选中的附件到指定的本地文件夹下
private void downloadReimFile(String pathfilename) {
//选择要下载到的文件夹
String localDirString=mainApp.fileLocalPath;
DirectoryChooser directoryChooser=new DirectoryChooser();
directoryChooser.setTitle("选择要下载到的本地文件夹");
Stage selectFileStage = new Stage();
File file = directoryChooser.showDialog(selectFileStage);
if (file != null) {
//文件不为空,且不是文件夹
if(file.isDirectory()) {
localDirString=file.getPath()+"\\";
System.out.println("选中的文件夹为:"+localDirString);
}else {
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.WARNING);
alert.setTitle("选中类型错误");
alert.setHeaderText("你的选中类型错误");
alert.setContentText("请确保你选中的是一个文件夹而不是一个文件。");
alert.showAndWait();
}
}else{
return ;
}
System.out.println("开始下载... :"+pathfilename);
int flag=mainApp.downloadFileByPathfilename(pathfilename,localDirString);
if(flag==0) {
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("下载成功");
alert.setHeaderText("下载文件成功");
alert.setContentText("您请求的文件数据已经被全部下载到本地,"
+ "如有发现打开异常或数据内容并非所求,说明出现了服务器数据请求问题。"
+ "您的文件保存位置为:"+localDirString);
alert.showAndWait();
}else {
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("下载失败");
alert.setHeaderText("下载文件失败");
alert.setContentText("本地文件数据写入失败,请检查是否有权限访问默认存储位置。"
+ "您的文件默认保存位置为:"+localDirString);
alert.showAndWait();
}
}
public void setDialogStage(Stage stage) {
this.dialogStage = stage;
}
@FXML
private void exit() {
this.dialogStage.close();
}
}
@@ -0,0 +1,403 @@
package cn.minoa.view.home;
import cn.minoa.MainApp;
import cn.minoa.dataRequestInterface.OrderInfo;
import cn.minoa.dataRequestInterface.ResponseData;
import cn.minoa.model.Person;
import cn.minoa.view.login.LoginOverviewController;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.scene.layout.Pane;
import javafx.scene.text.Text;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class WrittenReimbursementController {
private MainApp mainApp;
private Stage dialogStage;
@FXML
private TextField receiverField;
@FXML
private TextField moneyField;
@FXML
private TextField numberField;
@FXML
private TextField contentField;
@FXML
private TextArea detailArea;
@FXML
private ListView<Pane> reimbursementFiles;
//与之对应的数据结构
private List<String> reimbursementFilesList;
public WrittenReimbursementController(){
reimbursementFilesList=new LinkedList<String>();
}
@FXML
private void initialize() {
// 在fxml被载入时候被自动调用
receiverField.setPromptText("请输入一个联系人...");
moneyField.setPromptText("请输入一个正数...");
numberField.setPromptText("请输入一个正整数...");
contentField.setPromptText("请输入报销类别,如:采购经费、活动经费等...");
detailArea.setPromptText("请输入报销费用的详细描述...");
}
public void setMainApp(MainApp mainApp) {
this.mainApp = mainApp;
}
public void setStage(Stage stage) {
this.dialogStage = stage;
}
/*
* 从弹窗获取要添加的附件文件路径,将其加入到附件列表中,并显示到前端
*/
@FXML
private void addFilesToReimbursement() {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("选择上传文件");
Stage selectFileStage = new Stage();
File file = fileChooser.showOpenDialog(selectFileStage);
if (file != null) {
//文件不为空,且不是文件夹
if(file.isFile()) {
if(!isSelected(file.getAbsolutePath())) {
reimbursementFilesList.add(file.getAbsolutePath());
reimbursementFiles.getItems().add(new reimbursementFileListItem(file.getAbsolutePath()).getPaneItem());
}else {
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.WARNING);
alert.setTitle("附件添加重复");
alert.setHeaderText("你选择的该文件已加入附件列表");
alert.setContentText("请确保你选中的文件是未加入附件列表的文件。");
alert.showAndWait();
}
}else {
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.WARNING);
alert.setTitle("附件类型错误");
alert.setHeaderText("你的文件类型错误");
alert.setContentText("请确保你选中的是一个文件而非文件夹。");
alert.showAndWait();
}
}
}
//根据文件路径判断该选中文件是否已经加入到列表中
private boolean isSelected(String absolutePath) {
boolean flag=false;
//...
return flag;
}
@FXML
private void exit() {
// System.out.println("关闭弹窗中...");
this.dialogStage.close();
}
//发送报销凭证
@FXML
private void handleSendReimbursement() {
if(isRightContent()) {
// 请求数据
OrderInfo orderInfo = new OrderInfo();
ResponseData responseData = new ResponseData();
Long seqLong = mainApp.getNewDataReqId();
orderInfo.setSeq(seqLong);
orderInfo.setJsonString(getSendApproval());
System.out.println("getSendApproval: " + orderInfo.getJsonString());
mainApp.minoaDataAPI.executeOrder("/sendApproval", orderInfo);
responseData = mainApp.minoaDataAPI.dataCacheQueue.getResponseDataBySeq(seqLong);
JSONObject jsonObject = responseData.praseRequestData();
responseData.printSelf();
// 解析数据
Integer codeInteger = null;
try {
codeInteger = jsonObject.getInt("code");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (codeInteger == 200) {
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("发送成功");
alert.setHeaderText("报销发送成功");
alert.setContentText("你的报销申请已经发送给审核人。");
alert.showAndWait();
exit();
}else {
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.WARNING);
alert.setTitle("发送失败");
alert.setHeaderText("报销发送失败");
alert.setContentText("登录信息过期,报销发送失败,请尝试重新登录。");
alert.showAndWait();
}
}
}
//验证报销格式
private boolean isRightContent() {
//验证接收人是否是联系人列表中的一个
String receiverName = receiverField.getText().trim();
Integer flag = 0;
ObservableList<Person> persons = mainApp.contactListData;
for (Iterator<Person> iterator = persons.iterator(); iterator.hasNext(); ) {
Person person = (Person) iterator.next();
if (person.getUserName().equals(receiverName)) {
flag++;
}
}
if (flag == 0) {
//弹窗提示
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.WARNING);
alert.setTitle("收件人错误");
alert.setHeaderText("你的收件人错误");
alert.setContentText("请确保你输入的收件人姓名是系统的实际用户。");
alert.showAndWait();
return false;
}
//验证金额
if (moneyField.getText().trim().equals("")) {
//弹窗提示
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.WARNING);
alert.setTitle("报销金额错误");
alert.setHeaderText("你的报销金额错误");
alert.setContentText("请确保你输入的报销金额不为空。");
alert.showAndWait();
return false;
} else {
try {
Double.parseDouble(moneyField.getText());
} catch (NumberFormatException e) {
//弹窗提示
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.WARNING);
alert.setTitle("报销金额错误");
alert.setHeaderText("你的报销金额错误");
alert.setContentText("请确保你输入的报销金额是一个数字。");
alert.showAndWait();
return false;
}
}
//验证金额
if (numberField.getText().trim().equals("")) {
//弹窗提示
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.WARNING);
alert.setTitle("单据张数错误");
alert.setHeaderText("你的单据张数错误");
alert.setContentText("请确保你输入的单据张数不为空。");
alert.showAndWait();
return false;
} else {
try {
Integer.parseInt(numberField.getText());
} catch (NumberFormatException e) {
//弹窗提示
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.WARNING);
alert.setTitle("单据张数错误");
alert.setHeaderText("你的单据张数错误");
alert.setContentText("请确保你输入的单据张数是一个整数。");
alert.showAndWait();
return false;
}
}
//验证报销类别
if (contentField.getText().trim().equals("")) {
//弹窗提示
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.WARNING);
alert.setTitle("报销内容错误");
alert.setHeaderText("你的报销内容错误");
alert.setContentText("请确保你输入的报销内容不为空。");
alert.showAndWait();
return false;
}
//验证报销详情
if (detailArea.getText().trim().equals("")) {
//弹窗提示
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(Alert.AlertType.WARNING);
alert.setTitle("费用详细错误");
alert.setHeaderText("你的费用详细错误");
alert.setContentText("请确保你输入的费用详细不为空。");
alert.showAndWait();
return false;
}
return true;
}
//发送报销命令
private String getSendApproval () {
JSONObject detailJsonObject = new JSONObject();
String detail_detailString = detailArea.getText().trim();
String detail_contentString = contentField.getText().trim();
Integer detail_numberInteger = Integer.parseInt(numberField.getText().trim());
Double detail_moneyDouble = Double.parseDouble(moneyField.getText().trim());
String detail_approvalER=receiverField.getText().trim();
Long detail_date=LoginOverviewController.getNowTimeStamp();
//根据已经添加的文件附件列表制作一个arraylist
JSONArray filesArray = new JSONArray();
for (int i = 0; i < reimbursementFilesList.size(); i++) {
String pathfilename = reimbursementFilesList.get(i);
//上传该文件到服务器共享文件夹目录下
File file = new File(pathfilename);
mainApp.uploadFileToServerSharedFolder(file);
//将该文件信息[服务器文件路径地址]写入邮件信息中
String oneFile = mainApp.sharedFileServerPath + getPureFileNameFromWindows(pathfilename);
filesArray.put(oneFile);
}
try {
detailJsonObject.put("date", detail_date);
detailJsonObject.put("content", detail_contentString);
detailJsonObject.put("invoiceNum",detail_numberInteger);
detailJsonObject.put("totalMoney",detail_moneyDouble);
detailJsonObject.put("detail",detail_detailString);
detailJsonObject.put("approvalER",detail_approvalER);
detailJsonObject.put("pictures", filesArray);
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
JSONObject jsonObject = new JSONObject();
String commandString = "/sendApproval";
String usernameString = mainApp.loginer.getUserName();
String uuidString = mainApp.loginer.getUuid();
String approverString = receiverField.getText().trim();
Integer typeCodeInteger = 2;
try {
jsonObject.put("command", commandString);
jsonObject.put("username", usernameString);
jsonObject.put("uuid", uuidString);
jsonObject.put("approver", approverString);
jsonObject.put("typeCode", typeCodeInteger);
jsonObject.put("detail", detailJsonObject);
} catch (Exception e) {
// TODO: handle exception
System.out.println("exception: " + e.getMessage());
}
return jsonObject.toString();
}
// 根据包含路径的文件名获取纯文件名[windows本地]
private String getPureFileNameFromWindows(String pathfilename) {
// 标记最后一个/的下标
int indexLeft = -1;
for (int i = 0; i < pathfilename.length(); i++) {
if (pathfilename.charAt(i) == '\\') {
indexLeft = i;
}
}
if (indexLeft == -1) {
System.out.println("pure name[windows]: " + pathfilename);
return pathfilename;
} else {
System.out.println("pure name[windows]: " + pathfilename.substring(indexLeft + 1, pathfilename.length()));
return pathfilename.substring(indexLeft + 1, pathfilename.length());
}
}
}
//报销附件
class reimbursementFileListItem {
// 外部pane
private Pane pane;
private Integer paneWidth;
private Integer paneHeight;
// 头像
private Button head;
private Integer headLength;
// 文本区域
// public TextArea text;
private Text text;
// private Integer textWidth;
// private Integer textHeight;
// 每个Pane代映射了一个文件[路径+文件名+@文件类型]
String pathfilename;
// 组件位置属性
private Integer headXInteger;
private Integer headYInteger;
private Integer textXInteger;
private Integer textYInteger;
// 设置联系人头像
private void setHeadPortrait(Button button, String filetype) {
button.setStyle(
String.format("-fx-background-image: url('file:resources/images/emailFileIcon/%s.png')", filetype));
}
// 构造函数
public reimbursementFileListItem(String pathfiletypename) {
// 映射数据
this.pathfilename = pathfiletypename;
// 大小配置
paneWidth = 200;
paneHeight = 50;
headLength = 35;
// textWidth = 150;
// textHeight = 25;
// 位置配置
headXInteger = 10;
headYInteger = 10;
textXInteger = 70;
textYInteger = 28;
pane = new Pane();
head = new Button();
text = new Text();
// 最外面的pane的大小
pane.setPrefSize(paneWidth, paneHeight);
// 设置头像和pane的CSS的样式标识
head.getStyleClass().add("head");
pane.getStyleClass().add("pane");
// 设置消息头像和消息文本属性
head.setPrefSize(headLength, headLength);
}
// 根据person获取pane
public Pane getPaneItem() {
String name = this.pathfilename;
// 头像位置
head.setLayoutY(headYInteger);
head.setLayoutX(headXInteger);
// text位置
text.setLayoutX(textXInteger);
text.setLayoutY(textYInteger);
// 头像和气泡文本内容
text.setText(name);
setHeadPortrait(head, "f");
pane.getChildren().add(head);
pane.getChildren().add(text);
// 设置pane的id
pane.setId(name);
return pane;
}
}
@@ -54,8 +54,8 @@ public class SingleEmailDetailsController {
}
public void setEmailInfo(Email email) {
senderText.setText(email.getSender());
receiverText.setText(email.getReceiver());
senderText.setText(email.getSender()+"@pkusz.edu.cn");
receiverText.setText(email.getReceiver()+"@pkusz.edu.cn");
titleText.setText(email.getTitle());
contentText.setText(email.getContent());
// 如果邮件带有附件,将其显示到前端
@@ -119,7 +119,9 @@ public class SingleEmailDetailsController {
alert.setContentText("请确保你选中的是一个文件夹而不是一个文件。");
alert.showAndWait();
}
}
}else{
return ;
}
System.out.println("开始下载... :"+pathfilename);
int flag=mainApp.downloadFileByPathfilename(pathfilename,localDirString);
@@ -49,6 +49,9 @@ public class WrittenEmailController {
@FXML
private void initialize() {
// 在fxml被载入时候被自动调用
receiverField.setPromptText("请输入邮件地址(格式:昵称@pkusz.edu.cn)");
emailTitleField.setPromptText("请输入邮件主题...");
emailContentTextArea.setPromptText("请输入邮件内容...");
}
/*
@@ -95,6 +98,26 @@ public class WrittenEmailController {
}
}
}
//判断邮件地址是否符合要求
private boolean isRightEmailPath(String emailPath){
//取尾部字段:@pkusz.edu.cn [length=13]
if(emailPath.length()<=13){
return false;
}
String tailPath=emailPath.substring(emailPath.length()-13);
System.out.println("tailPath: "+tailPath);
if(tailPath.equals("@pkusz.edu.cn")){
return true;
}else{
return false;
}
}
//取邮件地址中的昵称字段
private String getUserInEmailPath(String emailPath){
return emailPath.substring(0,emailPath.length()-13);
}
//根据文件路径判断该选中文件是否已经加入到列表中
private boolean isSelected(String absolutePath) {
@@ -153,7 +176,18 @@ public class WrittenEmailController {
//验证邮件格式
private boolean isRightContent() {
//验证接收人是否是联系人列表中的一个
String receiverName=receiverField.getText().trim();
String receiverRawName=receiverField.getText().trim();
if(!isRightEmailPath(receiverRawName)){
//弹窗提示
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(AlertType.WARNING);
alert.setTitle("地址后缀错误");
alert.setHeaderText("你的地址后缀错误");
alert.setContentText("请确保你输入的地址后缀是@pkusz.edu.cn,并保证前面有用户名。");
alert.showAndWait();
return false;
}
String receiverName=getUserInEmailPath(receiverRawName);
Integer flag=0;
ObservableList<Person> persons=mainApp.contactListData;
for (Iterator<Person> iterator = persons.iterator(); iterator.hasNext();) {
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane prefHeight="600.0" prefWidth="500.0" stylesheets="@ReimbursementDeal.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cn.minoa.view.home.DealSingleReimbursementController">
<children>
<Button mnemonicParsing="false" opacity="0.0" text="避免聚焦" />
<Text layoutX="65.0" layoutY="65.0" strokeType="OUTSIDE" strokeWidth="0.0" text="申报人:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="20.0" />
<Text layoutX="36.0" layoutY="73.0" strokeType="OUTSIDE" strokeWidth="0.0" text="审核人:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="60.0" />
<Text layoutX="30.0" layoutY="90.0" strokeType="OUTSIDE" strokeWidth="0.0" text="审批状态:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="100.0" />
<Text layoutX="30.0" layoutY="118.0" strokeType="OUTSIDE" strokeWidth="0.0" text="报销金额:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="140.0" />
<Text layoutX="42.0" layoutY="160.0" strokeType="OUTSIDE" strokeWidth="0.0" text="单据张数:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="180.0" />
<Text layoutX="30.0" layoutY="199.0" strokeType="OUTSIDE" strokeWidth="0.0" text="报销内容:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="220.0" />
<Text layoutX="18.0" layoutY="219.0" strokeType="OUTSIDE" strokeWidth="0.0" text="费用详细:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="260.0" />
<Text fx:id="reimFilesTitleText" layoutX="42.0" layoutY="243.0" strokeType="OUTSIDE" strokeWidth="0.0" text="报销凭证:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="400.0" />
<TextArea fx:id="detailTextArea" layoutX="135.0" layoutY="220.0" prefHeight="200.0" prefWidth="200.0" wrapText="true" AnchorPane.bottomAnchor="210.0" AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="285.0" />
<Text fx:id="senderText" layoutX="105.0" layoutY="32.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="20.0" />
<Text fx:id="receiverText" layoutX="100.0" layoutY="72.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="60.0" />
<Text fx:id="processText" layoutX="170.0" layoutY="112.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="100.0" />
<Text fx:id="moneyText" layoutX="100.0" layoutY="145.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="140.0" />
<Text fx:id="numberText" layoutX="100.0" layoutY="185.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="180.0" />
<Text fx:id="contentText" layoutX="100.0" layoutY="232.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="220.0" />
<ListView fx:id="reimFiles" layoutX="112.0" layoutY="386.0" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="50.0" AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="420.0" />
<Button layoutX="417.0" layoutY="563.0" mnemonicParsing="false" onAction="#exit" text="取消" AnchorPane.bottomAnchor="15.0" AnchorPane.rightAnchor="20.0" />
<Button layoutX="271.0" layoutY="562.0" mnemonicParsing="false" onAction="#passReim" text="通过报销" AnchorPane.bottomAnchor="15.0" AnchorPane.rightAnchor="175.0" />
<Button layoutX="351.0" layoutY="562.0" mnemonicParsing="false" onAction="#vetoReim" text="否决报销" AnchorPane.bottomAnchor="15.0" AnchorPane.rightAnchor="85.0" />
</children>
</AnchorPane>
@@ -13,10 +13,10 @@
<HBox spacing="10.0" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="7.0">
<children>
<ImageView fx:id="reimbursement" fitHeight="35.0" fitWidth="35.0" layoutX="45.0" layoutY="124.0" pickOnBounds="true" preserveRatio="true" />
<Label layoutX="10.0" layoutY="10.0" prefHeight="35.0" text="报销" />
<Label layoutX="10.0" layoutY="10.0" prefHeight="35.0" text="报销申请" />
</children>
</HBox>
<Button mnemonicParsing="false" opacity="0.3" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
<Button mnemonicParsing="false" onAction="#showReimApplyView" opacity="0.3" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
</children>
</AnchorPane>
<AnchorPane layoutX="40.0" layoutY="40.0" prefHeight="50.0" prefWidth="225.0" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="80.0">
@@ -24,10 +24,10 @@
<HBox spacing="10.0" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="7.0">
<children>
<ImageView fx:id="entry_examination" fitHeight="35.0" fitWidth="35.0" layoutX="45.0" layoutY="124.0" pickOnBounds="true" preserveRatio="true" />
<Label layoutX="10.0" layoutY="10.0" prefHeight="35.0" text="入职审批" />
<Label layoutX="10.0" layoutY="10.0" prefHeight="35.0" text="报销审批" />
</children>
</HBox>
<Button mnemonicParsing="false" opacity="0.3" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
<Button mnemonicParsing="false" onAction="#showReimDealView" opacity="0.3" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
</children>
</AnchorPane>
<AnchorPane layoutX="30.0" layoutY="30.0" prefHeight="50.0" prefWidth="225.0" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="130.0">
@@ -0,0 +1,46 @@
/*list样式
* */
.list-cell:empty {
-fx-background-color: white;
}
/*页面底色
*/
#upPane{
-fx-background-color:#E8F2FE;
}
/*文件图标样式
*/
.head{
-fx-background-radius: 1px;
-fx-background-position: center center;
-fx-background-repeat: no-repeat;
-fx-background-size: 40px 40px;
-fx-background-color: rgba(255,255,255,0);
-fx-background-image: url("file:resources/images/headPhotos/default.png");
-fx-cursor: hand;
-fx-border-width: 1px;
-fx-border-radius: 1px;
-fx-border-color:transparent;
}
.head:hover{
-fx-background-radius: 1px;
-fx-background-position: center center;
-fx-background-repeat: no-repeat;
-fx-background-color: transparent;
-fx-background-size: 40px 40px;
-fx-cursor: hand;
-fx-border-width: 1px;
-fx-border-radius: 1px;
-fx-border-color:transparent;
}
.head:pressed{
-fx-background-radius: 1px;
-fx-background-position: center center;
-fx-background-repeat: no-repeat;
-fx-background-color: transparent;
-fx-background-size: 40px 40px;
-fx-cursor: hand;
-fx-border-width: 1px;
-fx-border-radius: 1px;
-fx-border-color:transparent;
}
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane prefHeight="638.0" prefWidth="548.0" stylesheets="@ReimbursementApply.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cn.minoa.view.home.ReimbursementApplyController">
<children>
<ListView fx:id="reimbursementList" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="80.0" AnchorPane.leftAnchor="50.0" AnchorPane.rightAnchor="50.0" AnchorPane.topAnchor="120.0" />
<AnchorPane fx:id="upPane" prefHeight="55.0" prefWidth="548.0">
<children>
<Text fill="#370b5b" strokeType="OUTSIDE" strokeWidth="0.0" text="报销申请" textAlignment="CENTER" AnchorPane.leftAnchor="25.0" AnchorPane.topAnchor="15.0">
<font>
<Font name="Arial Black" size="18.0" />
</font>
</Text>
</children>
</AnchorPane>
<Text layoutX="45.0" layoutY="96.0" strokeType="OUTSIDE" strokeWidth="0.0" text="我发起的" underline="true" AnchorPane.leftAnchor="50.0" AnchorPane.topAnchor="72.0" />
<Text layoutX="96.0" layoutY="96.0" strokeType="OUTSIDE" strokeWidth="0.0" text="我审批的" underline="true" AnchorPane.leftAnchor="122.0" AnchorPane.topAnchor="72.0" />
<Button layoutX="39.0" layoutY="64.0" mnemonicParsing="false" onAction="#switchToSendBox" opacity="0.0" prefWidth="60.0" AnchorPane.leftAnchor="43.0" AnchorPane.topAnchor="68.0" />
<Button mnemonicParsing="false" onAction="#switchToRecvBox" opacity="0.0" prefWidth="60.0" AnchorPane.leftAnchor="115.0" AnchorPane.topAnchor="68.0" />
<Text fx:id="listTitleText" strokeType="OUTSIDE" strokeWidth="0.0" text="xxxx审批列表" AnchorPane.leftAnchor="50.0" AnchorPane.topAnchor="105.0" />
<Button layoutX="443.0" layoutY="586.0" mnemonicParsing="false" onAction="#handleWritter" text="申请报销" AnchorPane.bottomAnchor="30.0" AnchorPane.rightAnchor="60.0" />
</children>
</AnchorPane>
@@ -0,0 +1,46 @@
/*list样式
* */
.list-cell:empty {
-fx-background-color: white;
}
/*页面底色
*/
#upPane{
-fx-background-color:#E8F2FE;
}
/*文件图标样式
*/
.head{
-fx-background-radius: 1px;
-fx-background-position: center center;
-fx-background-repeat: no-repeat;
-fx-background-size: 40px 40px;
-fx-background-color: rgba(255,255,255,0);
-fx-background-image: url("file:resources/images/headPhotos/default.png");
-fx-cursor: hand;
-fx-border-width: 1px;
-fx-border-radius: 1px;
-fx-border-color:transparent;
}
.head:hover{
-fx-background-radius: 1px;
-fx-background-position: center center;
-fx-background-repeat: no-repeat;
-fx-background-color: transparent;
-fx-background-size: 40px 40px;
-fx-cursor: hand;
-fx-border-width: 1px;
-fx-border-radius: 1px;
-fx-border-color:transparent;
}
.head:pressed{
-fx-background-radius: 1px;
-fx-background-position: center center;
-fx-background-repeat: no-repeat;
-fx-background-color: transparent;
-fx-background-size: 40px 40px;
-fx-cursor: hand;
-fx-border-width: 1px;
-fx-border-radius: 1px;
-fx-border-color:transparent;
}
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane prefHeight="638.0" prefWidth="548.0" stylesheets="@ReimbursementDeal.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cn.minoa.view.home.ReimbursementDealController">
<children>
<AnchorPane fx:id="upPane" prefHeight="55.0" prefWidth="548.0">
<children>
<Text fill="#370b5b" strokeType="OUTSIDE" strokeWidth="0.0" text="报销审批" AnchorPane.leftAnchor="25.0" AnchorPane.topAnchor="15.0">
<font>
<Font name="Arial Black" size="18.0" />
</font>
</Text>
</children>
</AnchorPane>
<Text layoutX="41.0" layoutY="99.0" strokeType="OUTSIDE" strokeWidth="0.0" text="我收到的报销待审批列表" AnchorPane.leftAnchor="50.0" AnchorPane.topAnchor="100.0" />
<ListView fx:id="reimbursementList" layoutX="60.0" layoutY="119.0" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="80.0" AnchorPane.leftAnchor="50.0" AnchorPane.rightAnchor="50.0" AnchorPane.topAnchor="120.0" />
</children>
</AnchorPane>
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane prefHeight="600.0" prefWidth="500.0" stylesheets="@ReimbursementDeal.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cn.minoa.view.home.SingleReimbursementDetailsController">
<children>
<Button mnemonicParsing="false" opacity="0.0" text="避免聚焦" />
<Text layoutX="65.0" layoutY="65.0" strokeType="OUTSIDE" strokeWidth="0.0" text="申报人:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="20.0" />
<Text layoutX="36.0" layoutY="73.0" strokeType="OUTSIDE" strokeWidth="0.0" text="审核人:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="60.0" />
<Text layoutX="30.0" layoutY="90.0" strokeType="OUTSIDE" strokeWidth="0.0" text="审批状态:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="100.0" />
<Text layoutX="30.0" layoutY="118.0" strokeType="OUTSIDE" strokeWidth="0.0" text="报销金额:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="140.0" />
<Text layoutX="42.0" layoutY="160.0" strokeType="OUTSIDE" strokeWidth="0.0" text="单据张数:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="180.0" />
<Text layoutX="30.0" layoutY="199.0" strokeType="OUTSIDE" strokeWidth="0.0" text="报销内容:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="220.0" />
<Text layoutX="18.0" layoutY="219.0" strokeType="OUTSIDE" strokeWidth="0.0" text="费用详细:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="260.0" />
<Text fx:id="reimFilesTitleText" layoutX="42.0" layoutY="243.0" strokeType="OUTSIDE" strokeWidth="0.0" text="报销凭证:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="400.0" />
<TextArea fx:id="detailTextArea" layoutX="135.0" layoutY="220.0" prefHeight="200.0" prefWidth="200.0" wrapText="true" AnchorPane.bottomAnchor="210.0" AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="285.0" />
<Text fx:id="senderText" layoutX="105.0" layoutY="32.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="20.0" />
<Text fx:id="receiverText" layoutX="100.0" layoutY="72.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="60.0" />
<Text fx:id="processText" layoutX="170.0" layoutY="112.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="100.0" />
<Text fx:id="moneyText" layoutX="100.0" layoutY="145.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="140.0" />
<Text fx:id="numberText" layoutX="100.0" layoutY="185.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="180.0" />
<Text fx:id="contentText" layoutX="100.0" layoutY="232.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="220.0" />
<ListView fx:id="reimFiles" layoutX="112.0" layoutY="386.0" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="50.0" AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="420.0" />
<Button layoutX="417.0" layoutY="563.0" mnemonicParsing="false" onAction="#exit" text="OK" AnchorPane.bottomAnchor="15.0" AnchorPane.rightAnchor="20.0" />
</children>
</AnchorPane>
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane prefHeight="600.0" prefWidth="500.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cn.minoa.view.home.WrittenReimbursementController">
<children>
<Text layoutX="58.0" layoutY="54.0" strokeType="OUTSIDE" strokeWidth="0.0" text="审核人:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="20.0" />
<Text layoutX="30.0" layoutY="87.0" strokeType="OUTSIDE" strokeWidth="0.0" text="报销金额:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="70.0" />
<Text layoutX="42.0" layoutY="133.0" strokeType="OUTSIDE" strokeWidth="0.0" text="单据张数:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="120.0" />
<Text layoutX="66.0" layoutY="195.0" strokeType="OUTSIDE" strokeWidth="0.0" text="报销内容:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="170.0" />
<Text layoutX="48.0" layoutY="239.0" strokeType="OUTSIDE" strokeWidth="0.0" text="费用详细:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="220.0" />
<Text layoutX="42.0" layoutY="289.0" strokeType="OUTSIDE" strokeWidth="0.0" text="报销凭证:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="360.0" />
<TextArea fx:id="detailArea" layoutX="90.0" layoutY="120.0" prefHeight="200.0" prefWidth="200.0" wrapText="true" AnchorPane.bottomAnchor="250.0" AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="245.0" />
<ListView fx:id="reimbursementFiles" layoutX="108.0" layoutY="360.0" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="50.0" AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="380.0" />
<Button layoutX="209.0" layoutY="550.0" mnemonicParsing="false" onAction="#addFilesToReimbursement" text="添加附件" AnchorPane.bottomAnchor="10.0" AnchorPane.rightAnchor="185.0" />
<Button layoutX="352.0" layoutY="567.0" mnemonicParsing="false" onAction="#exit" text="取消" AnchorPane.bottomAnchor="10.0" AnchorPane.rightAnchor="120.0" />
<Button layoutX="410.0" layoutY="567.0" mnemonicParsing="false" onAction="#handleSendReimbursement" text="发送" AnchorPane.bottomAnchor="10.0" AnchorPane.rightAnchor="55.0" />
<TextField fx:id="receiverField" layoutX="106.0" layoutY="16.0" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="16.0" />
<TextField fx:id="moneyField" layoutX="106.0" layoutY="66.0" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="66.0" />
<TextField fx:id="numberField" layoutX="106.0" layoutY="116.0" AnchorPane.leftAnchor="100.0" AnchorPane.topAnchor="116.0" />
<TextField fx:id="contentField" layoutX="106.0" layoutY="166.0" AnchorPane.leftAnchor="100.0" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="166.0" />
</children>
</AnchorPane>
@@ -20,7 +20,7 @@
<ListView fx:id="emailList" layoutX="135.0" layoutY="141.0" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="80.0" AnchorPane.leftAnchor="50.0" AnchorPane.rightAnchor="50.0" AnchorPane.topAnchor="120.0" />
<Button layoutX="424.0" layoutY="601.0" mnemonicParsing="false" onAction="#handleWritter" text="写信" AnchorPane.bottomAnchor="30.0" AnchorPane.rightAnchor="60.0" />
<Text layoutX="50.0" layoutY="85.0" onDragEntered="#switchToRecvBox" strokeType="OUTSIDE" strokeWidth="0.0" text="收件箱" underline="true" AnchorPane.leftAnchor="50.0" AnchorPane.topAnchor="72.0" />
<Text layoutX="120.0" layoutY="84.0" onDragEntered="#switchToSendBox" strokeType="OUTSIDE" strokeWidth="0.0" text="发件箱" underline="true" />
<Text layoutX="120.0" layoutY="84.0" onDragEntered="#switchToSendBox" strokeType="OUTSIDE" strokeWidth="0.0" text="发件箱" underline="true" AnchorPane.leftAnchor="120.0" AnchorPane.topAnchor="72.0" />
<Text fx:id="listTitleText" layoutX="249.0" layoutY="117.0" strokeType="OUTSIDE" strokeWidth="0.0" text="xx列表" textAlignment="CENTER" AnchorPane.leftAnchor="50.0" AnchorPane.topAnchor="105.0" />
<Button layoutX="41.0" layoutY="87.0" mnemonicParsing="false" onAction="#switchToRecvBox" opacity="0.0" prefWidth="50.0" text="R" AnchorPane.leftAnchor="42.0" AnchorPane.topAnchor="68.0" />
<Button layoutX="222.0" layoutY="76.0" mnemonicParsing="false" onAction="#switchToSendBox" opacity="0.0" prefWidth="50.0" text="S" AnchorPane.leftAnchor="115.0" AnchorPane.topAnchor="68.0" />
@@ -7,7 +7,7 @@
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefHeight="600.0" prefWidth="500.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cn.minoa.view.mine.SingleEmailDetailsController">
<AnchorPane prefHeight="600.0" prefWidth="500.0" stylesheets="@../home/ReimbursementDeal.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cn.minoa.view.mine.SingleEmailDetailsController">
<children>
<Button mnemonicParsing="false" opacity="0.0" text="透明=&gt;避免自动聚焦" />
<Text layoutX="30.0" layoutY="33.0" strokeType="OUTSIDE" strokeWidth="0.0" text="来自:" AnchorPane.leftAnchor="30.0" AnchorPane.topAnchor="20.0" />
@@ -8,6 +8,7 @@
<AnchorPane prefHeight="600.0" prefWidth="500.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cn.minoa.view.mine.WrittenEmailController">
<children>
<Button mnemonicParsing="false" opacity="0.0" text="避免聚焦" />
<Text layoutX="54.0" layoutY="49.0" strokeType="OUTSIDE" strokeWidth="0.0" text="收件人:" AnchorPane.leftAnchor="50.0" AnchorPane.topAnchor="50.0" />
<Text layoutX="54.0" layoutY="106.0" strokeType="OUTSIDE" strokeWidth="0.0" text="主题:" AnchorPane.leftAnchor="50.0" AnchorPane.topAnchor="90.0" />
<Text layoutX="54.0" layoutY="185.0" strokeType="OUTSIDE" strokeWidth="0.0" text="正文:" AnchorPane.leftAnchor="50.0" AnchorPane.topAnchor="130.0" />