正在显示
68 个修改的文件
包含
3911 行增加
和
0 行删除
.DS_Store
0 → 100644
不能预览此文件类型
.project
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<projectDescription> | ||
3 | + <name>air-server</name> | ||
4 | + <comment></comment> | ||
5 | + <projects> | ||
6 | + </projects> | ||
7 | + <buildSpec> | ||
8 | + <buildCommand> | ||
9 | + <name>org.eclipse.wst.common.project.facet.core.builder</name> | ||
10 | + <arguments> | ||
11 | + </arguments> | ||
12 | + </buildCommand> | ||
13 | + <buildCommand> | ||
14 | + <name>org.eclipse.m2e.core.maven2Builder</name> | ||
15 | + <arguments> | ||
16 | + </arguments> | ||
17 | + </buildCommand> | ||
18 | + </buildSpec> | ||
19 | + <natures> | ||
20 | + <nature>org.eclipse.jem.workbench.JavaEMFNature</nature> | ||
21 | + <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature> | ||
22 | + <nature>org.eclipse.m2e.core.maven2Nature</nature> | ||
23 | + <nature>org.eclipse.wst.common.project.facet.core.nature</nature> | ||
24 | + </natures> | ||
25 | +</projectDescription> |
.settings/.jsdtscope
0 → 100644
.settings/org.eclipse.m2e.core.prefs
0 → 100644
.settings/org.eclipse.wst.common.component
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0"> | ||
2 | + <wb-module deploy-name="air-server"> | ||
3 | + <wb-resource deploy-path="/WEB-INF/classes" source-path="/air-admin/src/main/java"/> | ||
4 | + <wb-resource deploy-path="/WEB-INF/classes" source-path="/air-api/src/main/java"/> | ||
5 | + <wb-resource deploy-path="/WEB-INF/classes" source-path="/air-common/src/test/java"/> | ||
6 | + <wb-resource deploy-path="/WEB-INF/classes" source-path="/air-model/src/main/java"/> | ||
7 | + <wb-resource deploy-path="/WEB-INF/classes" source-path="/air-model/src/test/java"/> | ||
8 | + <property name="context-root" value="air-server"/> | ||
9 | + <property name="java-output-path" value="/air-server/bin"/> | ||
10 | + </wb-module> | ||
11 | +</project-modules> |
1 | +org.eclipse.wst.jsdt.launching.baseBrowserLibrary |
1 | +Window |
air-admin/.DS_Store
0 → 100644
不能预览此文件类型
air-admin/.classpath
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<classpath> | ||
3 | + <classpathentry kind="src" output="target/classes" path="src/main/java"> | ||
4 | + <attributes> | ||
5 | + <attribute name="optional" value="true"/> | ||
6 | + <attribute name="maven.pomderived" value="true"/> | ||
7 | + </attributes> | ||
8 | + </classpathentry> | ||
9 | + <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> | ||
10 | + <attributes> | ||
11 | + <attribute name="maven.pomderived" value="true"/> | ||
12 | + </attributes> | ||
13 | + </classpathentry> | ||
14 | + <classpathentry kind="src" output="target/test-classes" path="src/test/java"> | ||
15 | + <attributes> | ||
16 | + <attribute name="optional" value="true"/> | ||
17 | + <attribute name="maven.pomderived" value="true"/> | ||
18 | + <attribute name="test" value="true"/> | ||
19 | + </attributes> | ||
20 | + </classpathentry> | ||
21 | + <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> | ||
22 | + <attributes> | ||
23 | + <attribute name="maven.pomderived" value="true"/> | ||
24 | + <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/> | ||
25 | + </attributes> | ||
26 | + </classpathentry> | ||
27 | + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"> | ||
28 | + <attributes> | ||
29 | + <attribute name="maven.pomderived" value="true"/> | ||
30 | + </attributes> | ||
31 | + </classpathentry> | ||
32 | + <classpathentry kind="output" path="target/classes"/> | ||
33 | +</classpath> |
air-admin/.project
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<projectDescription> | ||
3 | + <name>air-admin</name> | ||
4 | + <comment></comment> | ||
5 | + <projects> | ||
6 | + </projects> | ||
7 | + <buildSpec> | ||
8 | + <buildCommand> | ||
9 | + <name>org.eclipse.jdt.core.javabuilder</name> | ||
10 | + <arguments> | ||
11 | + </arguments> | ||
12 | + </buildCommand> | ||
13 | + <buildCommand> | ||
14 | + <name>org.eclipse.wst.common.project.facet.core.builder</name> | ||
15 | + <arguments> | ||
16 | + </arguments> | ||
17 | + </buildCommand> | ||
18 | + <buildCommand> | ||
19 | + <name>org.eclipse.wst.validation.validationbuilder</name> | ||
20 | + <arguments> | ||
21 | + </arguments> | ||
22 | + </buildCommand> | ||
23 | + <buildCommand> | ||
24 | + <name>org.eclipse.m2e.core.maven2Builder</name> | ||
25 | + <arguments> | ||
26 | + </arguments> | ||
27 | + </buildCommand> | ||
28 | + </buildSpec> | ||
29 | + <natures> | ||
30 | + <nature>org.eclipse.jem.workbench.JavaEMFNature</nature> | ||
31 | + <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature> | ||
32 | + <nature>org.eclipse.jdt.core.javanature</nature> | ||
33 | + <nature>org.eclipse.m2e.core.maven2Nature</nature> | ||
34 | + <nature>org.eclipse.wst.common.project.facet.core.nature</nature> | ||
35 | + <nature>org.eclipse.wst.jsdt.core.jsNature</nature> | ||
36 | + </natures> | ||
37 | +</projectDescription> |
air-admin/.settings/.jsdtscope
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<classpath> | ||
3 | + <classpathentry kind="src" path="src/main/webapp"/> | ||
4 | + <classpathentry excluding="**/bower_components/*|**/node_modules/*|**/*.min.js" kind="src" path="target/m2e-wtp/web-resources"/> | ||
5 | + <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/> | ||
6 | + <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject"> | ||
7 | + <attributes> | ||
8 | + <attribute name="hide" value="true"/> | ||
9 | + </attributes> | ||
10 | + </classpathentry> | ||
11 | + <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/> | ||
12 | + <classpathentry kind="output" path=""/> | ||
13 | +</classpath> |
1 | +eclipse.preferences.version=1 | ||
2 | +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled | ||
3 | +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate | ||
4 | +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 | ||
5 | +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve | ||
6 | +org.eclipse.jdt.core.compiler.compliance=1.8 | ||
7 | +org.eclipse.jdt.core.compiler.debug.lineNumber=generate | ||
8 | +org.eclipse.jdt.core.compiler.debug.localVariable=generate | ||
9 | +org.eclipse.jdt.core.compiler.debug.sourceFile=generate | ||
10 | +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error | ||
11 | +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error | ||
12 | +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning | ||
13 | +org.eclipse.jdt.core.compiler.release=disabled | ||
14 | +org.eclipse.jdt.core.compiler.source=1.8 |
1 | +<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0"> | ||
2 | + | ||
3 | + <wb-module deploy-name="air-admin-0.0.1-SNAPSHOT"> | ||
4 | + | ||
5 | + <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/> | ||
6 | + | ||
7 | + <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> | ||
8 | + | ||
9 | + <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> | ||
10 | + | ||
11 | + <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> | ||
12 | + <dependent-module archiveName="air-model-0.0.1-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/air-model/air-model"> | ||
13 | + <dependency-type>uses</dependency-type> | ||
14 | + </dependent-module> | ||
15 | + <dependent-module archiveName="air-kit-0.0.1-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/air-kit/air-kit"> | ||
16 | + <dependency-type>uses</dependency-type> | ||
17 | + </dependent-module> | ||
18 | + <dependent-module archiveName="air-common-0.1.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/air-common/air-common"> | ||
19 | + <dependency-type>uses</dependency-type> | ||
20 | + </dependent-module> | ||
21 | + | ||
22 | + <property name="context-root" value="air-admin"/> | ||
23 | + | ||
24 | + <property name="java-output-path" value="/air-admin/target/classes"/> | ||
25 | + | ||
26 | + </wb-module> | ||
27 | + | ||
28 | +</project-modules> |
1 | +org.eclipse.wst.jsdt.launching.baseBrowserLibrary |
1 | +Window |
air-admin/air-server.log
0 → 100644
1 | + | ||
2 | +2017-07-25 23:24:14 | ||
3 | +[WARN]-[Thread: main]-[org.eclipse.jetty.util.component.AbstractLifeCycle.setFailed()]: FAILED jfinal: java.lang.RuntimeException: Can not create instance of class: com.teplot.air.common.AirAdminConfig | ||
4 | +java.lang.RuntimeException: Can not create instance of class: com.teplot.air.common.AirAdminConfig | ||
5 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:102) | ||
6 | + at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:47) | ||
7 | + at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:119) | ||
8 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
9 | + at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:724) | ||
10 | + at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265) | ||
11 | + at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) | ||
12 | + at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706) | ||
13 | + at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492) | ||
14 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
15 | + at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) | ||
16 | + at org.eclipse.jetty.server.Server.doStart(Server.java:277) | ||
17 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
18 | + at com.jfinal.server.JettyServer.doStart(JettyServer.java:131) | ||
19 | + at com.jfinal.server.JettyServer.start(JettyServer.java:70) | ||
20 | + at com.jfinal.core.JFinal.start(JFinal.java:159) | ||
21 | + at com.air.config.AirAdminConfig.main(AirAdminConfig.java:82) | ||
22 | +Caused by: java.lang.ClassNotFoundException: com.teplot.air.common.AirAdminConfig | ||
23 | + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) | ||
24 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) | ||
25 | + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) | ||
26 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) | ||
27 | + at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:430) | ||
28 | + at com.jfinal.server.JFinalClassLoader.loadClass(JFinalClassLoader.java:53) | ||
29 | + at java.lang.Class.forName0(Native Method) | ||
30 | + at java.lang.Class.forName(Class.java:264) | ||
31 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:100) | ||
32 | + ... 16 more | ||
33 | + | ||
34 | +2017-07-25 23:24:14 | ||
35 | +[WARN]-[Thread: main]-[org.eclipse.jetty.webapp.WebAppContext.doStart()]: Failed startup of context o.e.j.w.WebAppContext{/air-api,file:/Users/Kevin/Documents/workspace/javaweb/air-server/air-admin/src/main/webapp/} | ||
36 | +java.lang.RuntimeException: Can not create instance of class: com.teplot.air.common.AirAdminConfig | ||
37 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:102) | ||
38 | + at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:47) | ||
39 | + at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:119) | ||
40 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
41 | + at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:724) | ||
42 | + at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265) | ||
43 | + at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) | ||
44 | + at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706) | ||
45 | + at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492) | ||
46 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
47 | + at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) | ||
48 | + at org.eclipse.jetty.server.Server.doStart(Server.java:277) | ||
49 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
50 | + at com.jfinal.server.JettyServer.doStart(JettyServer.java:131) | ||
51 | + at com.jfinal.server.JettyServer.start(JettyServer.java:70) | ||
52 | + at com.jfinal.core.JFinal.start(JFinal.java:159) | ||
53 | + at com.air.config.AirAdminConfig.main(AirAdminConfig.java:82) | ||
54 | +Caused by: java.lang.ClassNotFoundException: com.teplot.air.common.AirAdminConfig | ||
55 | + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) | ||
56 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) | ||
57 | + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) | ||
58 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) | ||
59 | + at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:430) | ||
60 | + at com.jfinal.server.JFinalClassLoader.loadClass(JFinalClassLoader.java:53) | ||
61 | + at java.lang.Class.forName0(Native Method) | ||
62 | + at java.lang.Class.forName(Class.java:264) | ||
63 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:100) | ||
64 | + ... 16 more | ||
65 | + | ||
66 | +2017-07-25 23:24:14 | ||
67 | +[WARN]-[Thread: main]-[org.eclipse.jetty.util.component.AbstractLifeCycle.setFailed()]: FAILED o.e.j.w.WebAppContext{/air-api,file:/Users/Kevin/Documents/workspace/javaweb/air-server/air-admin/src/main/webapp/}: java.lang.RuntimeException: Can not create instance of class: com.teplot.air.common.AirAdminConfig | ||
68 | +java.lang.RuntimeException: Can not create instance of class: com.teplot.air.common.AirAdminConfig | ||
69 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:102) | ||
70 | + at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:47) | ||
71 | + at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:119) | ||
72 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
73 | + at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:724) | ||
74 | + at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265) | ||
75 | + at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) | ||
76 | + at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706) | ||
77 | + at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492) | ||
78 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
79 | + at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) | ||
80 | + at org.eclipse.jetty.server.Server.doStart(Server.java:277) | ||
81 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
82 | + at com.jfinal.server.JettyServer.doStart(JettyServer.java:131) | ||
83 | + at com.jfinal.server.JettyServer.start(JettyServer.java:70) | ||
84 | + at com.jfinal.core.JFinal.start(JFinal.java:159) | ||
85 | + at com.air.config.AirAdminConfig.main(AirAdminConfig.java:82) | ||
86 | +Caused by: java.lang.ClassNotFoundException: com.teplot.air.common.AirAdminConfig | ||
87 | + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) | ||
88 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) | ||
89 | + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) | ||
90 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) | ||
91 | + at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:430) | ||
92 | + at com.jfinal.server.JFinalClassLoader.loadClass(JFinalClassLoader.java:53) | ||
93 | + at java.lang.Class.forName0(Native Method) | ||
94 | + at java.lang.Class.forName(Class.java:264) | ||
95 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:100) | ||
96 | + ... 16 more | ||
97 | + | ||
98 | +2017-07-25 23:24:14 | ||
99 | +[WARN]-[Thread: main]-[org.eclipse.jetty.util.component.AbstractLifeCycle.setFailed()]: FAILED org.eclipse.jetty.server.Server@ed9d034: java.lang.RuntimeException: Can not create instance of class: com.teplot.air.common.AirAdminConfig | ||
100 | +java.lang.RuntimeException: Can not create instance of class: com.teplot.air.common.AirAdminConfig | ||
101 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:102) | ||
102 | + at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:47) | ||
103 | + at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:119) | ||
104 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
105 | + at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:724) | ||
106 | + at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265) | ||
107 | + at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) | ||
108 | + at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706) | ||
109 | + at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492) | ||
110 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
111 | + at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) | ||
112 | + at org.eclipse.jetty.server.Server.doStart(Server.java:277) | ||
113 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
114 | + at com.jfinal.server.JettyServer.doStart(JettyServer.java:131) | ||
115 | + at com.jfinal.server.JettyServer.start(JettyServer.java:70) | ||
116 | + at com.jfinal.core.JFinal.start(JFinal.java:159) | ||
117 | + at com.air.config.AirAdminConfig.main(AirAdminConfig.java:82) | ||
118 | +Caused by: java.lang.ClassNotFoundException: com.teplot.air.common.AirAdminConfig | ||
119 | + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) | ||
120 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) | ||
121 | + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) | ||
122 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) | ||
123 | + at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:430) | ||
124 | + at com.jfinal.server.JFinalClassLoader.loadClass(JFinalClassLoader.java:53) | ||
125 | + at java.lang.Class.forName0(Native Method) | ||
126 | + at java.lang.Class.forName(Class.java:264) | ||
127 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:100) | ||
128 | + ... 16 more | ||
129 | + | ||
130 | +2017-07-25 23:24:14 | ||
131 | +[ERROR]-[Thread: main]-[com.jfinal.kit.LogKit.error()]: Can not create instance of class: com.teplot.air.common.AirAdminConfig | ||
132 | +java.lang.RuntimeException: Can not create instance of class: com.teplot.air.common.AirAdminConfig | ||
133 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:102) | ||
134 | + at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:47) | ||
135 | + at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:119) | ||
136 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
137 | + at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:724) | ||
138 | + at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265) | ||
139 | + at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) | ||
140 | + at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706) | ||
141 | + at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492) | ||
142 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
143 | + at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) | ||
144 | + at org.eclipse.jetty.server.Server.doStart(Server.java:277) | ||
145 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
146 | + at com.jfinal.server.JettyServer.doStart(JettyServer.java:131) | ||
147 | + at com.jfinal.server.JettyServer.start(JettyServer.java:70) | ||
148 | + at com.jfinal.core.JFinal.start(JFinal.java:159) | ||
149 | + at com.air.config.AirAdminConfig.main(AirAdminConfig.java:82) | ||
150 | +Caused by: java.lang.ClassNotFoundException: com.teplot.air.common.AirAdminConfig | ||
151 | + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) | ||
152 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) | ||
153 | + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) | ||
154 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) | ||
155 | + at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:430) | ||
156 | + at com.jfinal.server.JFinalClassLoader.loadClass(JFinalClassLoader.java:53) | ||
157 | + at java.lang.Class.forName0(Native Method) | ||
158 | + at java.lang.Class.forName(Class.java:264) | ||
159 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:100) | ||
160 | + ... 16 more | ||
161 | + | ||
162 | +2017-07-25 23:34:34 | ||
163 | +[WARN]-[Thread: main]-[org.eclipse.jetty.util.component.AbstractLifeCycle.setFailed()]: FAILED jfinal: java.lang.RuntimeException: Can not create instance of class: com.teplot.air.common.AirAdminConfig | ||
164 | +java.lang.RuntimeException: Can not create instance of class: com.teplot.air.common.AirAdminConfig | ||
165 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:102) | ||
166 | + at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:47) | ||
167 | + at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:119) | ||
168 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
169 | + at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:724) | ||
170 | + at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265) | ||
171 | + at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) | ||
172 | + at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706) | ||
173 | + at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492) | ||
174 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
175 | + at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) | ||
176 | + at org.eclipse.jetty.server.Server.doStart(Server.java:277) | ||
177 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
178 | + at com.jfinal.server.JettyServer.doStart(JettyServer.java:131) | ||
179 | + at com.jfinal.server.JettyServer.start(JettyServer.java:70) | ||
180 | + at com.jfinal.core.JFinal.start(JFinal.java:159) | ||
181 | + at com.air.config.AirAdminConfig.main(AirAdminConfig.java:82) | ||
182 | +Caused by: java.lang.ClassNotFoundException: com.teplot.air.common.AirAdminConfig | ||
183 | + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) | ||
184 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) | ||
185 | + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) | ||
186 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) | ||
187 | + at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:430) | ||
188 | + at com.jfinal.server.JFinalClassLoader.loadClass(JFinalClassLoader.java:53) | ||
189 | + at java.lang.Class.forName0(Native Method) | ||
190 | + at java.lang.Class.forName(Class.java:264) | ||
191 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:100) | ||
192 | + ... 16 more | ||
193 | + | ||
194 | +2017-07-25 23:34:34 | ||
195 | +[WARN]-[Thread: main]-[org.eclipse.jetty.webapp.WebAppContext.doStart()]: Failed startup of context o.e.j.w.WebAppContext{/air-api,file:/Users/Kevin/Documents/workspace/javaweb/air-server/air-admin/src/main/webapp/} | ||
196 | +java.lang.RuntimeException: Can not create instance of class: com.teplot.air.common.AirAdminConfig | ||
197 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:102) | ||
198 | + at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:47) | ||
199 | + at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:119) | ||
200 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
201 | + at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:724) | ||
202 | + at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265) | ||
203 | + at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) | ||
204 | + at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706) | ||
205 | + at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492) | ||
206 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
207 | + at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) | ||
208 | + at org.eclipse.jetty.server.Server.doStart(Server.java:277) | ||
209 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
210 | + at com.jfinal.server.JettyServer.doStart(JettyServer.java:131) | ||
211 | + at com.jfinal.server.JettyServer.start(JettyServer.java:70) | ||
212 | + at com.jfinal.core.JFinal.start(JFinal.java:159) | ||
213 | + at com.air.config.AirAdminConfig.main(AirAdminConfig.java:82) | ||
214 | +Caused by: java.lang.ClassNotFoundException: com.teplot.air.common.AirAdminConfig | ||
215 | + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) | ||
216 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) | ||
217 | + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) | ||
218 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) | ||
219 | + at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:430) | ||
220 | + at com.jfinal.server.JFinalClassLoader.loadClass(JFinalClassLoader.java:53) | ||
221 | + at java.lang.Class.forName0(Native Method) | ||
222 | + at java.lang.Class.forName(Class.java:264) | ||
223 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:100) | ||
224 | + ... 16 more | ||
225 | + | ||
226 | +2017-07-25 23:34:34 | ||
227 | +[WARN]-[Thread: main]-[org.eclipse.jetty.util.component.AbstractLifeCycle.setFailed()]: FAILED o.e.j.w.WebAppContext{/air-api,file:/Users/Kevin/Documents/workspace/javaweb/air-server/air-admin/src/main/webapp/}: java.lang.RuntimeException: Can not create instance of class: com.teplot.air.common.AirAdminConfig | ||
228 | +java.lang.RuntimeException: Can not create instance of class: com.teplot.air.common.AirAdminConfig | ||
229 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:102) | ||
230 | + at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:47) | ||
231 | + at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:119) | ||
232 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
233 | + at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:724) | ||
234 | + at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265) | ||
235 | + at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) | ||
236 | + at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706) | ||
237 | + at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492) | ||
238 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
239 | + at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) | ||
240 | + at org.eclipse.jetty.server.Server.doStart(Server.java:277) | ||
241 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
242 | + at com.jfinal.server.JettyServer.doStart(JettyServer.java:131) | ||
243 | + at com.jfinal.server.JettyServer.start(JettyServer.java:70) | ||
244 | + at com.jfinal.core.JFinal.start(JFinal.java:159) | ||
245 | + at com.air.config.AirAdminConfig.main(AirAdminConfig.java:82) | ||
246 | +Caused by: java.lang.ClassNotFoundException: com.teplot.air.common.AirAdminConfig | ||
247 | + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) | ||
248 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) | ||
249 | + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) | ||
250 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) | ||
251 | + at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:430) | ||
252 | + at com.jfinal.server.JFinalClassLoader.loadClass(JFinalClassLoader.java:53) | ||
253 | + at java.lang.Class.forName0(Native Method) | ||
254 | + at java.lang.Class.forName(Class.java:264) | ||
255 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:100) | ||
256 | + ... 16 more | ||
257 | + | ||
258 | +2017-07-25 23:34:34 | ||
259 | +[WARN]-[Thread: main]-[org.eclipse.jetty.util.component.AbstractLifeCycle.setFailed()]: FAILED org.eclipse.jetty.server.Server@ed9d034: java.lang.RuntimeException: Can not create instance of class: com.teplot.air.common.AirAdminConfig | ||
260 | +java.lang.RuntimeException: Can not create instance of class: com.teplot.air.common.AirAdminConfig | ||
261 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:102) | ||
262 | + at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:47) | ||
263 | + at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:119) | ||
264 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
265 | + at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:724) | ||
266 | + at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265) | ||
267 | + at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) | ||
268 | + at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706) | ||
269 | + at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492) | ||
270 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
271 | + at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) | ||
272 | + at org.eclipse.jetty.server.Server.doStart(Server.java:277) | ||
273 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
274 | + at com.jfinal.server.JettyServer.doStart(JettyServer.java:131) | ||
275 | + at com.jfinal.server.JettyServer.start(JettyServer.java:70) | ||
276 | + at com.jfinal.core.JFinal.start(JFinal.java:159) | ||
277 | + at com.air.config.AirAdminConfig.main(AirAdminConfig.java:82) | ||
278 | +Caused by: java.lang.ClassNotFoundException: com.teplot.air.common.AirAdminConfig | ||
279 | + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) | ||
280 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) | ||
281 | + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) | ||
282 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) | ||
283 | + at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:430) | ||
284 | + at com.jfinal.server.JFinalClassLoader.loadClass(JFinalClassLoader.java:53) | ||
285 | + at java.lang.Class.forName0(Native Method) | ||
286 | + at java.lang.Class.forName(Class.java:264) | ||
287 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:100) | ||
288 | + ... 16 more | ||
289 | + | ||
290 | +2017-07-25 23:34:34 | ||
291 | +[ERROR]-[Thread: main]-[com.jfinal.kit.LogKit.error()]: Can not create instance of class: com.teplot.air.common.AirAdminConfig | ||
292 | +java.lang.RuntimeException: Can not create instance of class: com.teplot.air.common.AirAdminConfig | ||
293 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:102) | ||
294 | + at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:47) | ||
295 | + at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:119) | ||
296 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
297 | + at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:724) | ||
298 | + at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265) | ||
299 | + at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) | ||
300 | + at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706) | ||
301 | + at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492) | ||
302 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
303 | + at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) | ||
304 | + at org.eclipse.jetty.server.Server.doStart(Server.java:277) | ||
305 | + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) | ||
306 | + at com.jfinal.server.JettyServer.doStart(JettyServer.java:131) | ||
307 | + at com.jfinal.server.JettyServer.start(JettyServer.java:70) | ||
308 | + at com.jfinal.core.JFinal.start(JFinal.java:159) | ||
309 | + at com.air.config.AirAdminConfig.main(AirAdminConfig.java:82) | ||
310 | +Caused by: java.lang.ClassNotFoundException: com.teplot.air.common.AirAdminConfig | ||
311 | + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) | ||
312 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) | ||
313 | + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) | ||
314 | + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) | ||
315 | + at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:430) | ||
316 | + at com.jfinal.server.JFinalClassLoader.loadClass(JFinalClassLoader.java:53) | ||
317 | + at java.lang.Class.forName0(Native Method) | ||
318 | + at java.lang.Class.forName(Class.java:264) | ||
319 | + at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:100) | ||
320 | + ... 16 more | ||
321 | + | ||
322 | +2017-08-01 17:37:52 | ||
323 | +[ERROR]-[Thread: qtp1265210847-19]-[com.air.model.SysMenu.getMenus()]: role-->{"level":1,"name":"超级管理员","id":1,"menu":"1,2,3,4,5,6,7,8,9,11,12,13,14"} | ||
324 | + | ||
325 | +2017-08-01 17:42:11 | ||
326 | +[ERROR]-[Thread: qtp1265210847-21]-[com.air.model.SysMenu.getMenus()]: role-->{"level":4,"name":"货代","id":4,"menu":"1,10"} | ||
327 | + | ||
328 | +2017-08-01 17:42:56 | ||
329 | +[ERROR]-[Thread: qtp1265210847-16]-[com.air.model.SysMenu.getMenus()]: role-->{"level":1,"name":"超级管理员","id":1,"menu":"1,2,3,4,5,6,7,8,9,11,12,13,14"} | ||
330 | + | ||
331 | +2017-08-01 17:49:08 | ||
332 | +[ERROR]-[Thread: qtp1265210847-23]-[com.air.model.SysMenu.getMenus()]: role-->{"level":2,"name":"管理员","id":2,"menu":"1,2,3,4,5,6,7,8,9,11,12,13,14"} | ||
333 | + | ||
334 | +2017-08-22 15:34:59 | ||
335 | +[ERROR]-[Thread: qtp1631862159-18]-[com.air.model.SysMenu.getMenus()]: role-->{"level":1,"name":"超级管理员","id":1,"menu":"1,2,3,4,5,6,7,8,9,11,12,13,14"} | ||
336 | + | ||
337 | +2017-08-22 15:37:00 | ||
338 | +[ERROR]-[Thread: qtp1631862159-18]-[com.air.model.SysMenu.getMenus()]: role-->{"level":1,"name":"超级管理员","id":1,"menu":"1,2,3,4,5,6,7,8,9,11,12,13,14"} | ||
339 | + | ||
340 | +2017-08-22 16:50:08 | ||
341 | +[ERROR]-[Thread: qtp1631862159-21]-[com.air.model.SysMenu.getMenus()]: role-->{"level":1,"name":"超级管理员","id":1,"menu":"1,2,3,4,5,6,7,8,9,11,12,13,14"} | ||
342 | + | ||
343 | +2017-12-25 11:17:08 | ||
344 | +[ERROR]-[Thread: qtp530737374-23]-[com.air.model.SysMenu.getMenus()]: role-->{"level":1,"name":"超级管理员","id":1,"menu":"1,2,3,4,5,6,7,8,9,11,12,13,14"} | ||
345 | + | ||
346 | +2017-12-25 11:48:25 | ||
347 | +[ERROR]-[Thread: qtp530737374-24]-[com.air.model.SysMenu.getMenus()]: role-->{"level":1,"name":"超级管理员","id":1,"menu":"1,2,3,4,5,6,7,8,9,11,12,13,14"} | ||
348 | + | ||
349 | +2017-12-25 14:02:43 | ||
350 | +[ERROR]-[Thread: qtp530737374-21]-[com.air.model.SysMenu.getMenus()]: role-->{"level":1,"name":"超级管理员","id":1,"menu":"1,2,3,4,5,6,7,8,9,11,12,13,14"} | ||
351 | + | ||
352 | +2017-12-25 15:38:41 | ||
353 | +[ERROR]-[Thread: qtp530737374-25]-[com.air.model.SysMenu.getMenus()]: role-->{"level":1,"name":"超级管理员","id":1,"menu":"1,2,3,4,5,6,7,8,9,11,12,13,14"} |
air-admin/pom.xml
0 → 100644
1 | +<?xml version="1.0"?> | ||
2 | +<project | ||
3 | + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" | ||
4 | + xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> | ||
5 | + <modelVersion>4.0.0</modelVersion> | ||
6 | + <parent> | ||
7 | + <groupId>com.air</groupId> | ||
8 | + <artifactId>air-server</artifactId> | ||
9 | + <version>0.0.1-SNAPSHOT</version> | ||
10 | + </parent> | ||
11 | + <artifactId>air-admin</artifactId> | ||
12 | + <packaging>war</packaging> | ||
13 | + <name>air-admin Maven Webapp</name> | ||
14 | + <url>http://maven.apache.org</url> | ||
15 | + <dependencies> | ||
16 | + <dependency> | ||
17 | + <groupId>junit</groupId> | ||
18 | + <artifactId>junit</artifactId> | ||
19 | + <version>3.8.1</version> | ||
20 | + <scope>test</scope> | ||
21 | + </dependency> | ||
22 | + <dependency> | ||
23 | + <groupId>com.air</groupId> | ||
24 | + <artifactId>air-model</artifactId> | ||
25 | + <version>0.0.1-SNAPSHOT</version> | ||
26 | + </dependency> | ||
27 | + <dependency> | ||
28 | + <groupId>com.air</groupId> | ||
29 | + <artifactId>air-kit</artifactId> | ||
30 | + <version>0.0.1-SNAPSHOT</version> | ||
31 | + </dependency> | ||
32 | + </dependencies> | ||
33 | +</project> |
air-admin/src/.DS_Store
0 → 100644
不能预览此文件类型
air-admin/src/main/.DS_Store
0 → 100644
不能预览此文件类型
air-admin/src/main/java/.DS_Store
0 → 100644
不能预览此文件类型
air-admin/src/main/java/com/.DS_Store
0 → 100644
不能预览此文件类型
air-admin/src/main/java/com/air/.DS_Store
0 → 100644
不能预览此文件类型
1 | +package com.air.config; | ||
2 | + | ||
3 | +import com.air.model.StationMap; | ||
4 | +import com.air.model.SysRole; | ||
5 | +import com.air.model.SysUser; | ||
6 | +import com.jfinal.log.Log; | ||
7 | +import com.teplot.common.BaseController; | ||
8 | +import com.teplot.common.Utils; | ||
9 | + | ||
10 | +/** | ||
11 | + * Depiction: | ||
12 | + * <p> | ||
13 | + * Modify: | ||
14 | + * <p> | ||
15 | + * Author: Kevin Lynn | ||
16 | + * <p> | ||
17 | + * Create Date:2017年3月29日 上午10:46:31 | ||
18 | + * | ||
19 | + */ | ||
20 | +public class AbsController extends BaseController { | ||
21 | + @Override | ||
22 | + public void render(String view) { | ||
23 | + setAttr("host", Utils.host()); | ||
24 | + setAttr("version", System.currentTimeMillis()); | ||
25 | + super.render(view); | ||
26 | + } | ||
27 | + | ||
28 | + /** | ||
29 | + * 当前登录用户 | ||
30 | + * | ||
31 | + * @return | ||
32 | + */ | ||
33 | + protected SysUser getLoginUser() { | ||
34 | + return getSessionAttr("user"); | ||
35 | + } | ||
36 | + | ||
37 | + /** | ||
38 | + * 获取当前后台登录用户的角色 | ||
39 | + * | ||
40 | + * @return | ||
41 | + */ | ||
42 | + protected SysRole getRole() { | ||
43 | + SysRole role = null; | ||
44 | + SysUser user = getLoginUser(); | ||
45 | + if (user == null || user.getInt("status") != 0) { | ||
46 | + // 账户过期或者未启用 | ||
47 | + Log.getLog(getClass()).error("the user is null"); | ||
48 | + redirect("/login"); | ||
49 | + return role; | ||
50 | + } | ||
51 | + | ||
52 | + // 存在该账户,并且该账户处于启用状态 | ||
53 | + int roleLevel = user.getInt("roleLevel"); | ||
54 | + role = SysRole.dao.searchFirst("level", roleLevel); | ||
55 | + return role; | ||
56 | + } | ||
57 | + | ||
58 | + protected String getStationArea() { | ||
59 | + StationMap station = getLoginUser().get("station"); | ||
60 | + if (station != null) { | ||
61 | + return station.getAreaCode(); | ||
62 | + } | ||
63 | + | ||
64 | + return null; | ||
65 | + } | ||
66 | +} |
1 | +package com.air.config; | ||
2 | + | ||
3 | +import com.air.controller.AdminController; | ||
4 | +import com.air.controller.AgentController; | ||
5 | +import com.air.controller.CarController; | ||
6 | +import com.air.controller.HomeController; | ||
7 | +import com.air.controller.LogAdminController; | ||
8 | +import com.air.controller.LogApiController; | ||
9 | +import com.air.controller.PortController; | ||
10 | +import com.air.controller.SysUserController; | ||
11 | +import com.air.controller.UploadController; | ||
12 | +import com.jfinal.config.Routes; | ||
13 | + | ||
14 | +/** | ||
15 | + * Depiction:后台路由规则配置 | ||
16 | + * <p> | ||
17 | + * Modify: | ||
18 | + * <p> | ||
19 | + * Author: Kevin Lynn | ||
20 | + * <p> | ||
21 | + * Create Date:2016年7月22日 上午1:48:05 | ||
22 | + * <p> | ||
23 | + * | ||
24 | + * @version 1.0 | ||
25 | + * @since 1.0 | ||
26 | + */ | ||
27 | +public class AdminRoutes extends Routes { | ||
28 | + | ||
29 | + public AdminRoutes() { | ||
30 | + } | ||
31 | + | ||
32 | + @Override | ||
33 | + public void config() { | ||
34 | + setBaseViewPath("WEB-INF/admin"); | ||
35 | + add("/", AdminController.class, "/"); | ||
36 | + add("/home", HomeController.class, "/"); | ||
37 | + add("/car", CarController.class, "/"); | ||
38 | + add("/port", PortController.class, "/"); | ||
39 | + add("/agent", AgentController.class, "/"); | ||
40 | + add("/sysUser", SysUserController.class, "/"); | ||
41 | + add("/sysLog", LogAdminController.class, "/"); | ||
42 | + add("/apiLog", LogApiController.class, "/"); | ||
43 | + add("/upload", UploadController.class, "/"); | ||
44 | + } | ||
45 | + | ||
46 | +} |
1 | +package com.air.config; | ||
2 | + | ||
3 | +import com.air.interceptor.AuthInterceptor; | ||
4 | +import com.air.model._MappingKit; | ||
5 | +import com.jfinal.config.Constants; | ||
6 | +import com.jfinal.config.Handlers; | ||
7 | +import com.jfinal.config.Interceptors; | ||
8 | +import com.jfinal.config.JFinalConfig; | ||
9 | +import com.jfinal.config.Plugins; | ||
10 | +import com.jfinal.config.Routes; | ||
11 | +import com.jfinal.core.JFinal; | ||
12 | +import com.jfinal.ext.handler.ContextPathHandler; | ||
13 | +import com.jfinal.kit.PathKit; | ||
14 | +import com.jfinal.kit.PropKit; | ||
15 | +import com.jfinal.plugin.activerecord.ActiveRecordPlugin; | ||
16 | +import com.jfinal.plugin.activerecord.dialect.MysqlDialect; | ||
17 | +import com.jfinal.plugin.c3p0.C3p0Plugin; | ||
18 | +import com.jfinal.render.ViewType; | ||
19 | +import com.jfinal.template.Engine; | ||
20 | +import com.teplot.common.Utils; | ||
21 | + | ||
22 | +public class AirAdminConfig extends JFinalConfig { | ||
23 | + | ||
24 | + @Override | ||
25 | + public void configConstant(Constants me) { | ||
26 | + Utils.loadConfig(); | ||
27 | + | ||
28 | + me.setEncoding("utf-8"); | ||
29 | + me.setDevMode(PropKit.getBoolean("devMode")); | ||
30 | + me.setViewType(ViewType.JFINAL_TEMPLATE); | ||
31 | + me.setBaseUploadPath("upload"); | ||
32 | + } | ||
33 | + | ||
34 | + @Override | ||
35 | + public void configRoute(Routes me) { | ||
36 | + me.add(new AdminRoutes()); | ||
37 | + } | ||
38 | + | ||
39 | + @Override | ||
40 | + public void configPlugin(Plugins me) { | ||
41 | + C3p0Plugin c3p0Plugin = new C3p0Plugin(PropKit.get("jdbc.url"), PropKit.get("jdbc.user"), | ||
42 | + PropKit.get("jdbc.password")); | ||
43 | + | ||
44 | + ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0Plugin); | ||
45 | + Utils.loadSqls(arp, PathKit.getRootClassPath()); | ||
46 | + | ||
47 | + arp.setShowSql(PropKit.getBoolean("devMode")); | ||
48 | + arp.setDialect(new MysqlDialect()); | ||
49 | + _MappingKit.mapping(arp); | ||
50 | + | ||
51 | + // 添加到插件列表中 | ||
52 | + me.add(c3p0Plugin); | ||
53 | + me.add(arp); | ||
54 | + } | ||
55 | + | ||
56 | + @Override | ||
57 | + public void configInterceptor(Interceptors me) { | ||
58 | + me.add(new AuthInterceptor()); | ||
59 | + } | ||
60 | + | ||
61 | + @Override | ||
62 | + public void configHandler(Handlers me) { | ||
63 | + me.add(new ContextPathHandler("contextPath")); | ||
64 | + } | ||
65 | + | ||
66 | + @Override | ||
67 | + public void configEngine(Engine me) { | ||
68 | + me.addSharedFunction("/WEB-INF/admin/_header.html"); | ||
69 | + me.addSharedFunction("/WEB-INF/admin/_pagination.html"); | ||
70 | + } | ||
71 | + | ||
72 | + @Override | ||
73 | + public void afterJFinalStart() { | ||
74 | + } | ||
75 | + | ||
76 | + @Override | ||
77 | + public void beforeJFinalStop() { | ||
78 | + } | ||
79 | + | ||
80 | + public static void main(String[] args) { | ||
81 | + Utils.loadConfig(); | ||
82 | + JFinal.start("src/main/webapp", 8081, Utils.contextPathAdmin(), 5); | ||
83 | + } | ||
84 | + | ||
85 | +} |
1 | +package com.air.controller; | ||
2 | + | ||
3 | +import com.air.config.AbsController; | ||
4 | +import com.air.model.SysMenu; | ||
5 | +import com.jfinal.aop.Clear; | ||
6 | + | ||
7 | +/** | ||
8 | + * Depiction:后台界面控制器 | ||
9 | + * <p> | ||
10 | + * Modify: | ||
11 | + * <p> | ||
12 | + * Author: Kevin Lynn | ||
13 | + * <p> | ||
14 | + * Create Date:2016年6月3日 下午11:02:05 | ||
15 | + * <p> | ||
16 | + * | ||
17 | + * @version 1.0 | ||
18 | + * @since 1.0 | ||
19 | + */ | ||
20 | +public class AdminController extends AbsController { | ||
21 | + | ||
22 | + public void index() { | ||
23 | + setAttr("loginName", getLoginUser().getStr("realName")); | ||
24 | + setAttr("menuList", SysMenu.dao.getMenus(getRole())); | ||
25 | + render("index.html"); | ||
26 | + } | ||
27 | + | ||
28 | + @Clear | ||
29 | + public void login() { | ||
30 | + render("login.html"); | ||
31 | + } | ||
32 | + | ||
33 | + @Clear | ||
34 | + public void verifyCode() { | ||
35 | + renderCaptcha(); | ||
36 | + } | ||
37 | +} |
1 | +package com.air.controller; | ||
2 | + | ||
3 | +import com.air.config.AbsController; | ||
4 | +import com.air.model.Agent; | ||
5 | +import com.jfinal.plugin.activerecord.Page; | ||
6 | + | ||
7 | +/** | ||
8 | + * Depiction: | ||
9 | + * <p> | ||
10 | + * Modify: | ||
11 | + * <p> | ||
12 | + * Author: Kevin Lynn | ||
13 | + * <p> | ||
14 | + * Create Date:2016年6月3日 下午11:02:05 | ||
15 | + * <p> | ||
16 | + * | ||
17 | + * @version 1.0 | ||
18 | + * @since 1.0 | ||
19 | + */ | ||
20 | +public class AgentController extends AbsController { | ||
21 | + | ||
22 | + public void list() { | ||
23 | + String key = getPara("key"); | ||
24 | + int page = this.getParaToInt("page", 1); | ||
25 | + int pageNum = this.getParaToInt("pageNum", 10); | ||
26 | + Page<Agent> pageData = Agent.dao.search(page, pageNum, key); | ||
27 | + setAttr("dataList", pageData.getList()); | ||
28 | + setAttr("curPage", pageData.getPageNumber()); | ||
29 | + setAttr("totalSize", pageData.getTotalRow()); | ||
30 | + setAttr("totalPage", pageData.getTotalPage()); | ||
31 | + setAttr("searchKey", key); | ||
32 | + render("agentList.html"); | ||
33 | + } | ||
34 | + | ||
35 | + public void edit() { | ||
36 | + int id = getParaToInt("id", 0); | ||
37 | + Agent model = Agent.dao.findById(id); | ||
38 | + setAttr("agent", model); | ||
39 | + render("agentEdit.html"); | ||
40 | + } | ||
41 | + | ||
42 | + public void details() { | ||
43 | + String agentName = getPara("name"); | ||
44 | + String sql = "select * from " + Agent.dao.table() + " where nameCN='" + agentName + "'"; | ||
45 | + Agent model = Agent.dao.findFirst(sql); | ||
46 | + setAttr("agent", model); | ||
47 | + render("agentDetails.html"); | ||
48 | + } | ||
49 | + | ||
50 | + public void submit() { | ||
51 | + Agent model = getModel(Agent.class, "agent"); | ||
52 | + if (model != null) { | ||
53 | + if (model.getId() != null) { | ||
54 | + // 更新 | ||
55 | + if (model.update()) { | ||
56 | + setAttr("flag", "操作成功"); | ||
57 | + } else { | ||
58 | + setAttr("flag", "操作失败"); | ||
59 | + } | ||
60 | + } else { | ||
61 | + // 新建 | ||
62 | + String name = model.getNameCN(); | ||
63 | + Agent temp = Agent.dao.searchFirst("nameCN", name); | ||
64 | + if (temp != null) { | ||
65 | + setAttr("flag", "该货代已经存在"); | ||
66 | + } else { | ||
67 | + if (model.save()) { | ||
68 | + setAttr("flag", "操作成功"); | ||
69 | + } else { | ||
70 | + setAttr("flag", "操作失败"); | ||
71 | + } | ||
72 | + } | ||
73 | + } | ||
74 | + } | ||
75 | + render("agentEdit.html"); | ||
76 | + } | ||
77 | + | ||
78 | + public void delete() { | ||
79 | + int id = getParaToInt("id", 0); | ||
80 | + Agent model = Agent.dao.findById(id); | ||
81 | + if (model != null) { | ||
82 | + if (model.delete()) { | ||
83 | + setAttr("flag", "操作成功"); | ||
84 | + } else { | ||
85 | + setAttr("flag", "操作失败"); | ||
86 | + } | ||
87 | + } else { | ||
88 | + setAttr("flag", "该货代不存在"); | ||
89 | + } | ||
90 | + | ||
91 | + list(); | ||
92 | + } | ||
93 | +} |
1 | +package com.air.controller; | ||
2 | + | ||
3 | +import java.util.Date; | ||
4 | +import java.util.HashMap; | ||
5 | +import java.util.Map; | ||
6 | + | ||
7 | +import com.air.config.AbsController; | ||
8 | +import com.air.model.AirPortCar; | ||
9 | +import com.air.model.AirPortCarStatus; | ||
10 | +import com.air.model.StationMap; | ||
11 | +import com.jfinal.kit.StrKit; | ||
12 | +import com.jfinal.plugin.activerecord.Page; | ||
13 | + | ||
14 | +/** | ||
15 | + * Depiction:车辆进出场控制器 | ||
16 | + * <p> | ||
17 | + * Modify: | ||
18 | + * <p> | ||
19 | + * Author: Kevin Lynn | ||
20 | + * <p> | ||
21 | + * Create Date:2016年6月3日 下午11:02:05 | ||
22 | + * <p> | ||
23 | + * | ||
24 | + * @version 1.0 | ||
25 | + * @since 1.0 | ||
26 | + */ | ||
27 | +public class CarController extends AbsController { | ||
28 | + | ||
29 | + public void applyList() { | ||
30 | + String key = getPara("key"); | ||
31 | + int page = this.getParaToInt("page", 1); | ||
32 | + int pageNum = this.getParaToInt("pageNum", 10); | ||
33 | + | ||
34 | + Page<AirPortCar> pageData = AirPortCar.dao.search(page, pageNum, key, AirPortCarStatus.APPLY, getStationArea()); | ||
35 | + if (pageData.getList() != null) { | ||
36 | + for (AirPortCar car : pageData.getList()) { | ||
37 | + String stationArea = car.getStationArea(); | ||
38 | + StationMap station = StationMap.dao.searchFirst("areaCode", stationArea); | ||
39 | + car.put("station", station); | ||
40 | + } | ||
41 | + } | ||
42 | + setAttr("dataList", pageData.getList()); | ||
43 | + setAttr("curPage", pageData.getPageNumber()); | ||
44 | + setAttr("totalSize", pageData.getTotalRow()); | ||
45 | + setAttr("totalPage", pageData.getTotalPage()); | ||
46 | + setAttr("searchKey", key); | ||
47 | + setAttr("role", getRole().getLevel()); | ||
48 | + render("applyList.html"); | ||
49 | + } | ||
50 | + | ||
51 | + public void enterList() { | ||
52 | + String key = getPara("key"); | ||
53 | + int page = this.getParaToInt("page", 1); | ||
54 | + int pageNum = this.getParaToInt("pageNum", 10); | ||
55 | + Page<AirPortCar> pageData = AirPortCar.dao.search(page, pageNum, key, AirPortCarStatus.ENTER, getStationArea()); | ||
56 | + if (pageData.getList() != null) { | ||
57 | + for (AirPortCar car : pageData.getList()) { | ||
58 | + String stationArea = car.getStationArea(); | ||
59 | + StationMap station = StationMap.dao.searchFirst("areaCode", stationArea); | ||
60 | + car.put("station", station); | ||
61 | + } | ||
62 | + } | ||
63 | + setAttr("dataList", pageData.getList()); | ||
64 | + setAttr("curPage", pageData.getPageNumber()); | ||
65 | + setAttr("totalSize", pageData.getTotalRow()); | ||
66 | + setAttr("totalPage", pageData.getTotalPage()); | ||
67 | + setAttr("searchKey", key); | ||
68 | + setAttr("role", getRole().getLevel()); | ||
69 | + render("enterList.html"); | ||
70 | + } | ||
71 | + | ||
72 | + public void historyList() { | ||
73 | + String key = getPara("key"); | ||
74 | + int page = this.getParaToInt("page", 1); | ||
75 | + int pageNum = this.getParaToInt("pageNum", 10); | ||
76 | + Page<AirPortCar> pageData = AirPortCar.dao.search(page, pageNum, key, null, getStationArea()); | ||
77 | + if (pageData.getList() != null) { | ||
78 | + for (AirPortCar car : pageData.getList()) { | ||
79 | + String stationArea = car.getStationArea(); | ||
80 | + StationMap station = StationMap.dao.searchFirst("areaCode", stationArea); | ||
81 | + car.put("station", station); | ||
82 | + } | ||
83 | + } | ||
84 | + setAttr("dataList", pageData.getList()); | ||
85 | + setAttr("curPage", pageData.getPageNumber()); | ||
86 | + setAttr("totalSize", pageData.getTotalRow()); | ||
87 | + setAttr("totalPage", pageData.getTotalPage()); | ||
88 | + setAttr("searchKey", key); | ||
89 | + setAttr("role", getRole().getLevel()); | ||
90 | + render("historyList.html"); | ||
91 | + } | ||
92 | + | ||
93 | + public void checkList() { | ||
94 | + String key = getPara("key"); | ||
95 | + int page = this.getParaToInt("page", 1); | ||
96 | + int pageNum = this.getParaToInt("pageNum", 10); | ||
97 | + Page<AirPortCar> pageData = AirPortCar.dao.search(page, pageNum, key, null, getStationArea()); | ||
98 | + | ||
99 | + if (pageData != null && pageData.getList() != null) { | ||
100 | + for (AirPortCar data : pageData.getList()) { | ||
101 | + String stationArea = data.getStationArea(); | ||
102 | + StationMap station = StationMap.dao.searchFirst("areaCode", stationArea); | ||
103 | + data.put("station", station); | ||
104 | + | ||
105 | + if (data.getEnterTime() != null) { | ||
106 | + if (data.getLeaveTime() == null) { | ||
107 | + data.put("checkResult", "有进无出"); | ||
108 | + } else { | ||
109 | + data.put("checkResult", "正常"); | ||
110 | + } | ||
111 | + } else { | ||
112 | + if (data.getLeaveTime() == null) { | ||
113 | + data.put("checkResult", "待进场"); | ||
114 | + } else { | ||
115 | + data.put("checkResult", "无进有出"); | ||
116 | + } | ||
117 | + } | ||
118 | + } | ||
119 | + } | ||
120 | + setAttr("dataList", pageData.getList()); | ||
121 | + setAttr("curPage", pageData.getPageNumber()); | ||
122 | + setAttr("totalSize", pageData.getTotalRow()); | ||
123 | + setAttr("totalPage", pageData.getTotalPage()); | ||
124 | + setAttr("searchKey", key); | ||
125 | + setAttr("role", getRole().getLevel()); | ||
126 | + render("checkList.html"); | ||
127 | + } | ||
128 | + | ||
129 | + public void applyPre() { | ||
130 | + String key = getPara("key"); | ||
131 | + int page = this.getParaToInt("page", 1); | ||
132 | + int pageNum = this.getParaToInt("pageNum", 10); | ||
133 | + | ||
134 | + Page<AirPortCar> pageData = AirPortCar.dao.searchPre(page, pageNum, key, getLoginUser().getId()); | ||
135 | + | ||
136 | + if (pageData.getList() != null) { | ||
137 | + for (AirPortCar car : pageData.getList()) { | ||
138 | + String stationArea = car.getStationArea(); | ||
139 | + StationMap station = StationMap.dao.searchFirst("areaCode", stationArea); | ||
140 | + car.put("station", station); | ||
141 | + } | ||
142 | + } | ||
143 | + | ||
144 | + setAttr("dataList", pageData.getList()); | ||
145 | + setAttr("curPage", pageData.getPageNumber()); | ||
146 | + setAttr("totalSize", pageData.getTotalRow()); | ||
147 | + setAttr("totalPage", pageData.getTotalPage()); | ||
148 | + setAttr("searchKey", key); | ||
149 | + render("applyPre.html"); | ||
150 | + } | ||
151 | + | ||
152 | + public void applyPreEdit() { | ||
153 | + setAttr("stationList", StationMap.dao.searchAll()); | ||
154 | + render("applyPreEdit.html"); | ||
155 | + } | ||
156 | + | ||
157 | + public void submitPre() { | ||
158 | + AirPortCar model = getModel(AirPortCar.class, "car"); | ||
159 | + if (model != null) { | ||
160 | + String carNo = model.getCarNo(); | ||
161 | + if (StrKit.notBlank(carNo)) { | ||
162 | + carNo = carNo.toUpperCase(); | ||
163 | + } | ||
164 | + | ||
165 | + Map<String, Object> maps = new HashMap<String, Object>(); | ||
166 | + maps.put("carNo", carNo); | ||
167 | + AirPortCar tmp = AirPortCar.dao.searchFirst(maps); | ||
168 | + if (tmp == null || (tmp.getStatus() == AirPortCarStatus.LEFT.ordinal())) { | ||
169 | + model.setApplyTime(new Date()); | ||
170 | + model.setSysUserId(getLoginUser().getId()); | ||
171 | + | ||
172 | + String agentName = getLoginUser().getAgentName(); | ||
173 | + if (StrKit.isBlank(agentName)) { | ||
174 | + agentName = "无货代公司"; | ||
175 | + } | ||
176 | + | ||
177 | + model.setAgentName(agentName); | ||
178 | + | ||
179 | + if (model.save()) { | ||
180 | + setAttr("flag", "操作成功"); | ||
181 | + } else { | ||
182 | + setAttr("flag", "操作失败"); | ||
183 | + } | ||
184 | + } else { | ||
185 | + setAttr("flag", "不能重复录入"); | ||
186 | + } | ||
187 | + } else { | ||
188 | + setAttr("flag", "操作失败,参数错误"); | ||
189 | + } | ||
190 | + | ||
191 | + applyPre(); | ||
192 | + } | ||
193 | +} |
1 | +package com.air.controller; | ||
2 | + | ||
3 | +import com.air.config.AbsController; | ||
4 | +import com.air.model.SysLoginLog; | ||
5 | +import com.air.model.SysUser; | ||
6 | + | ||
7 | +/** | ||
8 | + * Depiction:后台系统桌面控制器 | ||
9 | + * <p> | ||
10 | + * Modify: | ||
11 | + * <p> | ||
12 | + * Author: Kevin Lynn | ||
13 | + * <p> | ||
14 | + * Create Date:2016年6月3日 下午11:02:05 | ||
15 | + * <p> | ||
16 | + * | ||
17 | + * @version 1.0 | ||
18 | + * @since 1.0 | ||
19 | + */ | ||
20 | +public class HomeController extends AbsController { | ||
21 | + | ||
22 | + public void index() { | ||
23 | + SysUser user = getLoginUser(); | ||
24 | + setAttr("user", user); | ||
25 | + | ||
26 | + Integer uid = user.getId(); | ||
27 | + setAttr("loginTime", SysLoginLog.dao.loginTime(uid)); | ||
28 | + setAttr("lastTime", SysLoginLog.dao.lastTime(uid)); | ||
29 | + | ||
30 | + render("home.html"); | ||
31 | + } | ||
32 | + | ||
33 | +} |
1 | +package com.air.controller; | ||
2 | + | ||
3 | +import com.air.config.AbsController; | ||
4 | +import com.air.model.SysLoginLog; | ||
5 | +import com.jfinal.plugin.activerecord.Page; | ||
6 | + | ||
7 | +/** | ||
8 | + * Depiction: | ||
9 | + * <p> | ||
10 | + * Modify: | ||
11 | + * <p> | ||
12 | + * Author: Kevin Lynn | ||
13 | + * <p> | ||
14 | + * Create Date:2016年6月3日 下午11:02:05 | ||
15 | + * <p> | ||
16 | + * | ||
17 | + * @version 1.0 | ||
18 | + * @since 1.0 | ||
19 | + */ | ||
20 | +public class LogAdminController extends AbsController { | ||
21 | + | ||
22 | + public void list() { | ||
23 | + int page = this.getParaToInt("page", 1); | ||
24 | + int pageNum = this.getParaToInt("pageNum", 10); | ||
25 | + | ||
26 | + Page<SysLoginLog> pageData = SysLoginLog.dao.search(page, pageNum); | ||
27 | + setAttr("dataList", pageData.getList()); | ||
28 | + setAttr("pageNumber", pageData.getPageNumber()); | ||
29 | + setAttr("totalRow", pageData.getTotalRow()); | ||
30 | + setAttr("totalPage", pageData.getTotalPage()); | ||
31 | + | ||
32 | + render("logAdminList.html"); | ||
33 | + } | ||
34 | + | ||
35 | + public void delete() { | ||
36 | + String msg = "操作成功"; | ||
37 | + Integer logId = getParaToInt("logId"); | ||
38 | + SysLoginLog model = SysLoginLog.dao.findById(logId); | ||
39 | + if (model != null) { | ||
40 | + try { | ||
41 | + model.delete(); | ||
42 | + } catch (Exception e) { | ||
43 | + msg = "操作失败"; | ||
44 | + } | ||
45 | + } else { | ||
46 | + msg = "不存在该日志"; | ||
47 | + } | ||
48 | + | ||
49 | + setAttr("flag", msg); | ||
50 | + list(); | ||
51 | + } | ||
52 | +} |
1 | +package com.air.controller; | ||
2 | + | ||
3 | +import com.air.config.AbsController; | ||
4 | +import com.air.model.SysApiLog; | ||
5 | +import com.jfinal.plugin.activerecord.Page; | ||
6 | + | ||
7 | +/** | ||
8 | + * Depiction: | ||
9 | + * <p> | ||
10 | + * Modify: | ||
11 | + * <p> | ||
12 | + * Author: Kevin Lynn | ||
13 | + * <p> | ||
14 | + * Create Date:2016年6月3日 下午11:02:05 | ||
15 | + * <p> | ||
16 | + * | ||
17 | + * @version 1.0 | ||
18 | + * @since 1.0 | ||
19 | + */ | ||
20 | +public class LogApiController extends AbsController { | ||
21 | + | ||
22 | + public void list() { | ||
23 | + String key = getPara("key"); | ||
24 | + int page = this.getParaToInt("page", 1); | ||
25 | + int pageNum = this.getParaToInt("pageNum", 10); | ||
26 | + | ||
27 | + Page<SysApiLog> pageData = SysApiLog.dao.search(page, pageNum, key); | ||
28 | + setAttr("dataList", pageData.getList()); | ||
29 | + setAttr("pageNumber", pageData.getPageNumber()); | ||
30 | + setAttr("totalRow", pageData.getTotalRow()); | ||
31 | + setAttr("totalPage", pageData.getTotalPage()); | ||
32 | + setAttr("searchKey", key); | ||
33 | + | ||
34 | + render("logApiList.html"); | ||
35 | + } | ||
36 | + | ||
37 | + public void delete() { | ||
38 | + String msg = "操作成功"; | ||
39 | + Integer logId = getParaToInt("logId"); | ||
40 | + SysApiLog model = SysApiLog.dao.findById(logId); | ||
41 | + if (model != null) { | ||
42 | + try { | ||
43 | + model.delete(); | ||
44 | + } catch (Exception e) { | ||
45 | + msg = "操作失败"; | ||
46 | + } | ||
47 | + } else { | ||
48 | + msg = "不存在该日志"; | ||
49 | + } | ||
50 | + | ||
51 | + setAttr("flag", msg); | ||
52 | + list(); | ||
53 | + } | ||
54 | + | ||
55 | + public void details() { | ||
56 | + | ||
57 | + } | ||
58 | +} |
1 | +package com.air.controller; | ||
2 | + | ||
3 | +import java.util.Date; | ||
4 | +import java.util.HashMap; | ||
5 | +import java.util.List; | ||
6 | +import java.util.Map; | ||
7 | + | ||
8 | +import com.air.config.AbsController; | ||
9 | +import com.air.led.LedKit; | ||
10 | +import com.air.model.AirPort; | ||
11 | +import com.air.model.AirPortCar; | ||
12 | +import com.air.model.AirPortCarStatus; | ||
13 | +import com.air.model.StationMap; | ||
14 | +import com.air.model.SysRoleType; | ||
15 | +import com.jfinal.kit.StrKit; | ||
16 | +import com.jfinal.plugin.activerecord.Page; | ||
17 | + | ||
18 | +/** | ||
19 | + * Depiction: 码头管理 | ||
20 | + * <p> | ||
21 | + * Modify: | ||
22 | + * <p> | ||
23 | + * Author: Kevin Lynn | ||
24 | + * <p> | ||
25 | + * Create Date:2017年7月31日 下午3:17:35 | ||
26 | + * | ||
27 | + */ | ||
28 | +public class PortController extends AbsController { | ||
29 | + | ||
30 | + public void arrivalList() { | ||
31 | + String key = getPara("key"); | ||
32 | + int page = this.getParaToInt("page", 1); | ||
33 | + int pageNum = this.getParaToInt("pageNum", 30); | ||
34 | + int portNo = getParaToInt("portNo", 0); | ||
35 | + | ||
36 | + setAttr("searchKey", key); | ||
37 | + setAttr("role", getRole().getLevel()); | ||
38 | + | ||
39 | + List<AirPort> portList = AirPort.dao.getAirPortList(getStationArea(), true); | ||
40 | + setAttr("portList", portList); | ||
41 | + | ||
42 | + List<StationMap> stationList = null; | ||
43 | + int roleLevel = getRole().getLevel(); | ||
44 | + if (roleLevel == SysRoleType.SUPER.ordinal()) { | ||
45 | + stationList = StationMap.dao.searchAll(); | ||
46 | + } else { | ||
47 | + stationList = StationMap.dao.search("areaCode", getStationArea()); | ||
48 | + } | ||
49 | + setAttr("stationList", stationList); | ||
50 | + | ||
51 | + String stationArea = getPara("stationArea", | ||
52 | + (stationList != null && !stationList.isEmpty()) ? stationList.get(0).getAreaCode() : null); | ||
53 | + setAttr("portNo", portNo); | ||
54 | + setAttr("stationArea", stationArea); | ||
55 | + | ||
56 | + Page<AirPortCar> pageData = AirPortCar.dao.search(page, pageNum, key, portNo, stationArea, true); | ||
57 | + if (pageData.getList() != null) { | ||
58 | + for (AirPortCar car : pageData.getList()) { | ||
59 | + StationMap station = StationMap.dao.searchFirst("areaCode", stationArea); | ||
60 | + car.put("station", station); | ||
61 | + } | ||
62 | + } | ||
63 | + setAttr("dataList", pageData.getList()); | ||
64 | + setAttr("curPage", pageData.getPageNumber()); | ||
65 | + setAttr("totalSize", pageData.getTotalRow()); | ||
66 | + setAttr("totalPage", pageData.getTotalPage()); | ||
67 | + | ||
68 | + render("portArrivalList.html"); | ||
69 | + } | ||
70 | + | ||
71 | + public void leftList() { | ||
72 | + String key = getPara("key"); | ||
73 | + int page = this.getParaToInt("page", 1); | ||
74 | + int pageNum = this.getParaToInt("pageNum", 30); | ||
75 | + int portNo = getParaToInt("portNo", 0); | ||
76 | + | ||
77 | + setAttr("searchKey", key); | ||
78 | + setAttr("role", getRole().getLevel()); | ||
79 | + | ||
80 | + List<AirPort> portList = AirPort.dao.getAirPortList(getStationArea(), false); | ||
81 | + setAttr("portList", portList); | ||
82 | + | ||
83 | + List<StationMap> stationList = null; | ||
84 | + int roleLevel = getRole().getLevel(); | ||
85 | + if (roleLevel == SysRoleType.SUPER.ordinal()) { | ||
86 | + stationList = StationMap.dao.searchAll(); | ||
87 | + } else { | ||
88 | + stationList = StationMap.dao.search("areaCode", getStationArea()); | ||
89 | + } | ||
90 | + setAttr("stationList", stationList); | ||
91 | + | ||
92 | + String stationArea = getPara("stationArea", | ||
93 | + (stationList != null && !stationList.isEmpty()) ? stationList.get(0).getAreaCode() : null); | ||
94 | + | ||
95 | + setAttr("portNo", portNo); | ||
96 | + setAttr("stationArea", stationArea); | ||
97 | + | ||
98 | + Page<AirPortCar> pageData = AirPortCar.dao.search(page, pageNum, key, portNo, stationArea, false); | ||
99 | + if (pageData.getList() != null) { | ||
100 | + for (AirPortCar car : pageData.getList()) { | ||
101 | + StationMap station = StationMap.dao.searchFirst("areaCode", stationArea); | ||
102 | + car.put("station", station); | ||
103 | + } | ||
104 | + } | ||
105 | + setAttr("dataList", pageData.getList()); | ||
106 | + setAttr("curPage", pageData.getPageNumber()); | ||
107 | + setAttr("totalSize", pageData.getTotalRow()); | ||
108 | + setAttr("totalPage", pageData.getTotalPage()); | ||
109 | + | ||
110 | + render("portLeftList.html"); | ||
111 | + } | ||
112 | + | ||
113 | + // 车辆置顶 | ||
114 | + public void editCar() { | ||
115 | + Boolean isPickup = getParaToBoolean("isPickup", null); | ||
116 | + if (isPickup != null) { | ||
117 | + List<AirPort> arrivalList = AirPort.dao.getAirPortList(getStationArea(), true); | ||
118 | + setAttr("arrivalList", arrivalList); | ||
119 | + | ||
120 | + List<AirPort> leftList = AirPort.dao.getAirPortList(getStationArea(), false); | ||
121 | + setAttr("leftList", leftList); | ||
122 | + render("carEdit.html"); | ||
123 | + } else { | ||
124 | + render("portArrivalList.html"); | ||
125 | + } | ||
126 | + } | ||
127 | + | ||
128 | + public void submitCar() { | ||
129 | + boolean isPickup = getParaToBoolean("car.isPickup"); | ||
130 | + boolean isStick = getPara("car.isStick", null) != null ? true : false; | ||
131 | + String driverName = getPara("car.driverName"); | ||
132 | + String phone = getPara("car.phone"); | ||
133 | + String carNo = getPara("car.carNo"); | ||
134 | + int portNo = getParaToInt("car.portNo", 1); | ||
135 | + | ||
136 | + if (StrKit.notBlank(carNo)) { | ||
137 | + carNo = carNo.toUpperCase(); | ||
138 | + } | ||
139 | + | ||
140 | + AirPortCar model = new AirPortCar(); | ||
141 | + Map<String, Object> maps = new HashMap<String, Object>(); | ||
142 | + maps.put("carNo", carNo); | ||
143 | + maps.put("status", AirPortCarStatus.ENTER.ordinal()); | ||
144 | + AirPortCar tmp = AirPortCar.dao.searchFirst(maps); | ||
145 | + | ||
146 | + if (tmp == null) { | ||
147 | + model.setIsPickup(isPickup); | ||
148 | + model.setDriverName(driverName); | ||
149 | + model.setPhone(phone); | ||
150 | + model.setCarNo(carNo); | ||
151 | + model.setPortNo(portNo); | ||
152 | + if(isStick) { | ||
153 | + model.setSort(0); | ||
154 | + } | ||
155 | + model.setSysUserId(getLoginUser().getId()); | ||
156 | + model.setStationArea(getStationArea()); | ||
157 | + model.setApplyTime(new Date()); | ||
158 | + model.setEnterTime(new Date()); | ||
159 | + model.setStatus(AirPortCarStatus.ENTER.ordinal()); | ||
160 | + | ||
161 | + if (model.save()) { | ||
162 | + setAttr("flag", "操作成功"); | ||
163 | + LedKit.sendBigLedScreen(LedKit.bigLedText(portNo, isPickup, carNo, getStationArea()), getStationArea()); | ||
164 | + LedKit.nextCar(getStationArea(), portNo, isPickup); | ||
165 | + } | ||
166 | + } else { | ||
167 | + setAttr("flag", "不能重复录入"); | ||
168 | + } | ||
169 | + | ||
170 | + if (isPickup) { | ||
171 | + arrivalList(); | ||
172 | + } else { | ||
173 | + leftList(); | ||
174 | + } | ||
175 | + } | ||
176 | +} |
1 | +package com.air.controller; | ||
2 | + | ||
3 | +import java.util.ArrayList; | ||
4 | +import java.util.List; | ||
5 | + | ||
6 | +import com.air.config.AbsController; | ||
7 | +import com.air.model.Agent; | ||
8 | +import com.air.model.StationMap; | ||
9 | +import com.air.model.SysLoginLog; | ||
10 | +import com.air.model.SysMenu; | ||
11 | +import com.air.model.SysRole; | ||
12 | +import com.air.model.SysRoleType; | ||
13 | +import com.air.model.SysUser; | ||
14 | +import com.google.gson.Gson; | ||
15 | +import com.jfinal.aop.Clear; | ||
16 | +import com.jfinal.kit.HashKit; | ||
17 | +import com.jfinal.kit.HttpKit; | ||
18 | +import com.jfinal.kit.Kv; | ||
19 | +import com.jfinal.plugin.activerecord.Page; | ||
20 | +import com.teplot.common.Encrypt; | ||
21 | +import com.teplot.common.Response; | ||
22 | + | ||
23 | +/** | ||
24 | + * Depiction:后台用户管理 | ||
25 | + * <p> | ||
26 | + * Modify: | ||
27 | + * <p> | ||
28 | + * Author: Kevin Lynn | ||
29 | + * <p> | ||
30 | + * Create Date:2016年6月3日 下午11:02:05 | ||
31 | + * <p> | ||
32 | + * | ||
33 | + * @version 1.0 | ||
34 | + * @since 1.0 | ||
35 | + */ | ||
36 | +public class SysUserController extends AbsController { | ||
37 | + private static final String VERIFY_CODE = "verifyCode"; | ||
38 | + | ||
39 | + @Clear | ||
40 | + public void logout() { | ||
41 | + if (getLoginUser() != null) { | ||
42 | + SysLoginLog.dao.log(getLoginUser().getId(), false); | ||
43 | + | ||
44 | + setSessionAttr("user", null); | ||
45 | + } | ||
46 | + | ||
47 | + redirect("/"); | ||
48 | + } | ||
49 | + | ||
50 | + // 用户登录 | ||
51 | + @Clear | ||
52 | + public void login() { | ||
53 | + Response ret = new Response(CODE_SUCCESS); | ||
54 | + | ||
55 | + if (!validateCaptcha(VERIFY_CODE)) { | ||
56 | + ret = new Response(VERIFY_CODE_ERROR); | ||
57 | + renderJson(ret); | ||
58 | + return; | ||
59 | + } | ||
60 | + | ||
61 | + String username = this.getPara("username"); | ||
62 | + String password = this.getPara("password"); | ||
63 | + | ||
64 | + SysUser sysUser = SysUser.dao.searchFirst("username", username); | ||
65 | + | ||
66 | + if (sysUser == null) { | ||
67 | + ret = new Response(CODE_FAILURE); | ||
68 | + ret.setMsg("用户不存在"); | ||
69 | + renderJson(ret); | ||
70 | + } else if (!sysUser.getStr("password").equalsIgnoreCase(Encrypt.encrypt(username, password))) { | ||
71 | + ret = new Response(CODE_FAILURE); | ||
72 | + ret.setMsg("密码不正确"); | ||
73 | + renderJson(ret); | ||
74 | + } else { | ||
75 | + SysLoginLog.dao.log(sysUser.getId(), true); | ||
76 | + int role = sysUser.getRoleLevel(); | ||
77 | + if (role != SysRoleType.SUPER.ordinal() && role != SysRoleType.AGENT.ordinal()) { | ||
78 | + String stationArea = sysUser.getStationArea(); | ||
79 | + StationMap station = StationMap.dao.searchFirst("areaCode", stationArea); | ||
80 | + sysUser.put("station", station); | ||
81 | + } | ||
82 | + setSessionAttr("user", sysUser); | ||
83 | + ret = new Response(CODE_SUCCESS); | ||
84 | + renderJson(ret); | ||
85 | + } | ||
86 | + } | ||
87 | + | ||
88 | + @Clear | ||
89 | + public void doLogin() { | ||
90 | + Response ret = new Response(CODE_FAILURE); | ||
91 | + String url = "http://10.5.13.25/services/rest/token/verifySAMLResponse"; | ||
92 | + String SAMLResponse = getPara("SAMLResponse"); | ||
93 | + String providerId = getPara("providerId"); | ||
94 | + String param = "SAMLResponse=" + SAMLResponse + "&providerId=" + providerId; | ||
95 | + String json = HttpKit.post(url, param); | ||
96 | + Gson gson = new Gson(); | ||
97 | + Kv map = gson.fromJson(json, Kv.class); | ||
98 | + if (map != null) { | ||
99 | + String status = map.getStr("status"); | ||
100 | + if ("0x0000".equalsIgnoreCase(status)) { | ||
101 | + // 成功获取账号密码 | ||
102 | + String username = map.getStr("appLoginID"); | ||
103 | + String password = HashKit.sha256(map.getStr("appLoginPass")); | ||
104 | + SysUser sysUser = SysUser.dao.searchFirst("username", username); | ||
105 | + if (sysUser == null) { | ||
106 | + ret.setMsg("用户不存在"); | ||
107 | + renderJson(ret); | ||
108 | + } else if (!sysUser.getStr("password").equalsIgnoreCase(Encrypt.encrypt(username, password))) { | ||
109 | + ret = new Response(CODE_FAILURE); | ||
110 | + ret.setMsg("密码不正确"); | ||
111 | + renderJson(ret); | ||
112 | + } else { | ||
113 | + //登录成功 | ||
114 | + int role = sysUser.getRoleLevel(); | ||
115 | + if (role != SysRoleType.SUPER.ordinal() && role != SysRoleType.AGENT.ordinal()) { | ||
116 | + String stationArea = sysUser.getStationArea(); | ||
117 | + StationMap station = StationMap.dao.searchFirst("areaCode", stationArea); | ||
118 | + sysUser.put("station", station); | ||
119 | + } | ||
120 | + setSessionAttr("user", sysUser); | ||
121 | + setAttr("loginName", sysUser.getStr("realName")); | ||
122 | + setAttr("menuList", SysMenu.dao.getMenus(getRole())); | ||
123 | + render("index.html"); | ||
124 | + return; | ||
125 | + } | ||
126 | + | ||
127 | + } else { | ||
128 | + ret.setMsg("登录失败"); | ||
129 | + } | ||
130 | + } else { | ||
131 | + ret.setMsg("账号密码不能为空"); | ||
132 | + } | ||
133 | + | ||
134 | + renderJson(ret); | ||
135 | + } | ||
136 | + | ||
137 | + public void list() { | ||
138 | + String key = getPara("key"); | ||
139 | + int page = this.getParaToInt("page", 1); | ||
140 | + int pageNum = this.getParaToInt("pageNum", 10); | ||
141 | + Page<SysUser> pageData = SysUser.dao.search(page, pageNum, key, getRole().getLevel(), getStationArea()); | ||
142 | + setAttr("dataList", pageData.getList()); | ||
143 | + setAttr("curPage", pageData.getPageNumber()); | ||
144 | + setAttr("totalSize", pageData.getTotalRow()); | ||
145 | + setAttr("totalPage", pageData.getTotalPage()); | ||
146 | + setAttr("searchKey", key); | ||
147 | + render("sysUserList.html"); | ||
148 | + } | ||
149 | + | ||
150 | + public void edit() { | ||
151 | + Integer staffId = getParaToInt("staffId"); | ||
152 | + SysUser model = SysUser.dao.findById(staffId); | ||
153 | + setAttr("sysUser", model); | ||
154 | + setAttr("station", model != null ? model.get("station") : null); | ||
155 | + | ||
156 | + List<SysRole> roleList = SysRole.dao.list(getRole().getLevel()); | ||
157 | + setAttr("roleList", roleList); | ||
158 | + | ||
159 | + setAttr("agentList", Agent.dao.searchAll()); | ||
160 | + List<StationMap> stationList = null; | ||
161 | + if (getRole().getLevel() == 1) { | ||
162 | + // 超级管理员,显示所有货站 | ||
163 | + stationList = StationMap.dao.searchAll(); | ||
164 | + StationMap sm = new StationMap(); | ||
165 | + sm.setName("选择货站"); | ||
166 | + sm.setAreaCode(""); | ||
167 | + } else { | ||
168 | + // 普通管理员或者员工,仅显示所属的货站 | ||
169 | + stationList = new ArrayList<StationMap>(); | ||
170 | + String areaCode = getLoginUser().getStationArea(); | ||
171 | + StationMap sm = StationMap.dao.searchFirst("areaCode", areaCode); | ||
172 | + stationList.add(sm); | ||
173 | + } | ||
174 | + setAttr("stationList", stationList); | ||
175 | + | ||
176 | + render("sysUserEdit.html"); | ||
177 | + } | ||
178 | + | ||
179 | + public void submit() { | ||
180 | + SysUser model = getModel(SysUser.class, "sysUser"); | ||
181 | + String msg = "操作成功"; | ||
182 | + SysUser staffTemp = SysUser.dao.searchFirst("username", model.getStr("username")); | ||
183 | + Integer staffId = model.getInt("id"); | ||
184 | + Integer roleLevel = model.getInt("roleLevel"); | ||
185 | + | ||
186 | + if (staffId != null && SysUser.dao.findById(staffId) != null) { | ||
187 | + // 更新资料 | ||
188 | + if (staffTemp != null && staffId != staffTemp.getInt("id")) { | ||
189 | + msg = "该账号已经存在,请更换"; | ||
190 | + } else { | ||
191 | + // 账号没有重复 | ||
192 | + String password = HashKit.sha256(model.getStr("password")); | ||
193 | + password = Encrypt.encrypt(model.getStr("username"), password); | ||
194 | + model.set("password", password); | ||
195 | + | ||
196 | + if (roleLevel != null) { | ||
197 | + model.set("job", getJob(roleLevel)); | ||
198 | + } | ||
199 | + | ||
200 | + if (!model.update()) { | ||
201 | + msg = "操作失败"; | ||
202 | + } | ||
203 | + } | ||
204 | + } else { | ||
205 | + // 新建员工 | ||
206 | + if (staffTemp == null) { | ||
207 | + String password = HashKit.sha256(model.getStr("password")); | ||
208 | + password = Encrypt.encrypt(model.getStr("username"), password); | ||
209 | + model.set("password", password); | ||
210 | + | ||
211 | + if (roleLevel != null) { | ||
212 | + model.set("job", getJob(roleLevel)); | ||
213 | + } | ||
214 | + | ||
215 | + if (!model.save()) { | ||
216 | + msg = "操作失败"; | ||
217 | + } | ||
218 | + } else { | ||
219 | + msg = "该账号已经存在,请更换其它账号"; | ||
220 | + } | ||
221 | + } | ||
222 | + | ||
223 | + if (!msg.equalsIgnoreCase("操作成功")) { | ||
224 | + setAttr("staff", model); | ||
225 | + } | ||
226 | + | ||
227 | + setAttr("flag", msg); | ||
228 | + render("sysUserEdit.html"); | ||
229 | + } | ||
230 | + | ||
231 | + private String getJob(int roleLevel) { | ||
232 | + SysRole role = SysRole.dao.searchFirst("level", roleLevel); | ||
233 | + if (role != null) { | ||
234 | + return role.getName(); | ||
235 | + } | ||
236 | + return "Unknown"; | ||
237 | + } | ||
238 | + | ||
239 | + public void modifyPassword() { | ||
240 | + render("modifyPassword.html"); | ||
241 | + } | ||
242 | + | ||
243 | + public void modifyPasswordAction() { | ||
244 | + String msg = "操作成功"; | ||
245 | + String paramOldPassword = getPara("oldPassword"); | ||
246 | + String password1 = getPara("password1"); | ||
247 | + String password2 = getPara("password2"); | ||
248 | + | ||
249 | + if (!password1.equalsIgnoreCase(password2)) { | ||
250 | + // 密码不一致 | ||
251 | + msg = "新密码不一致!"; | ||
252 | + } else { | ||
253 | + // 密码一致 | ||
254 | + if (password2.length() < 6) { | ||
255 | + // 密码太短 | ||
256 | + msg = "密码太短,长度不能小于6位!"; | ||
257 | + } else { | ||
258 | + SysUser loginUser = getLoginUser(); | ||
259 | + String username = loginUser.getStr("username"); | ||
260 | + String oldPassword = Encrypt.encrypt(username, HashKit.sha256(paramOldPassword)); | ||
261 | + if (!oldPassword.equals(loginUser.getStr("password"))) { | ||
262 | + msg = "旧密码错误"; | ||
263 | + } else { | ||
264 | + loginUser.set("password", Encrypt.encrypt(username, HashKit.sha256(password1))); | ||
265 | + if (!loginUser.update()) { | ||
266 | + msg = "操作失败"; | ||
267 | + } | ||
268 | + } | ||
269 | + } | ||
270 | + } | ||
271 | + | ||
272 | + setAttr("flag", msg); | ||
273 | + | ||
274 | + if (!msg.equalsIgnoreCase("操作成功")) { | ||
275 | + setAttr("oldPassword", paramOldPassword); | ||
276 | + setAttr("password1", password1); | ||
277 | + setAttr("password2", password2); | ||
278 | + | ||
279 | + modifyPassword(); | ||
280 | + } else { | ||
281 | + setSessionAttr("user", null); | ||
282 | + redirect("/login"); | ||
283 | + } | ||
284 | + } | ||
285 | + | ||
286 | + public void delete() { | ||
287 | + Integer staffId = getParaToInt("staffId", 0); | ||
288 | + SysUser staff = SysUser.dao.findById(staffId); | ||
289 | + if (staff != null) { | ||
290 | + if (staff.delete()) { | ||
291 | + setAttr("flag", "操作成功"); | ||
292 | + } else { | ||
293 | + setAttr("flag", "操作失败"); | ||
294 | + } | ||
295 | + } else { | ||
296 | + setAttr("flag", "该账号不存在"); | ||
297 | + } | ||
298 | + | ||
299 | + list(); | ||
300 | + } | ||
301 | +} |
1 | +package com.air.controller; | ||
2 | + | ||
3 | +import java.io.File; | ||
4 | +import java.io.FileFilter; | ||
5 | +import java.text.SimpleDateFormat; | ||
6 | +import java.util.ArrayList; | ||
7 | +import java.util.Arrays; | ||
8 | +import java.util.List; | ||
9 | + | ||
10 | +import com.air.config.AbsController; | ||
11 | +import com.jfinal.kit.Kv; | ||
12 | +import com.teplot.common.Response; | ||
13 | +import com.teplot.common.Utils; | ||
14 | + | ||
15 | +/** | ||
16 | + * Depiction:文件上传控制器 | ||
17 | + * <p> | ||
18 | + * Modify: | ||
19 | + * <p> | ||
20 | + * Author: Kevin Lynn | ||
21 | + * <p> | ||
22 | + * Create Date:2016年6月3日 下午11:02:05 | ||
23 | + * <p> | ||
24 | + * | ||
25 | + * @version 1.0 | ||
26 | + * @since 1.0 | ||
27 | + */ | ||
28 | +public class UploadController extends AbsController { | ||
29 | + | ||
30 | + // 仅仅后台umeditor上传图片使用 | ||
31 | + public void uploadImg() { | ||
32 | + getResponse().setContentType("text/html;charset=utf-8"); | ||
33 | + String destDir = Utils.getImgDir(); | ||
34 | + String fileName = Utils.productNo(); | ||
35 | + Response ret = upload("upfile", 2 * 1024 * 1024, "图片大小不能超过2MB,仅支持jpg和png格式", destDir, fileName); | ||
36 | + renderHtml(ret.toJson()); | ||
37 | + } | ||
38 | + | ||
39 | + // 仅仅后台kindeditor上传图片使用 | ||
40 | + public void uploadImage() { | ||
41 | + getResponse().setContentType("text/html;charset=utf-8"); | ||
42 | + String destDir = Utils.getImgDir(); | ||
43 | + String fileName = Utils.productNo(); | ||
44 | + Response ret = upload("imgFile", 2 * 1024 * 1024, "图片大小不能超过2MB,仅支持jpg和png格式", destDir, fileName); | ||
45 | + renderHtml(ret.toJson()); | ||
46 | + } | ||
47 | + | ||
48 | + // 返回图片目录的所有图片 | ||
49 | + public void imageManager() { | ||
50 | + String dirName = Utils.getImgDir(); | ||
51 | + String rootUrl = Utils.host() + "/upload/img/"; | ||
52 | + String[] fileTypes = new String[] { "gif", "jpg", "jpeg", "png", "bmp" }; | ||
53 | + File currentPathFile = new File(dirName); | ||
54 | + | ||
55 | + List<Kv> fileList = new ArrayList<Kv>(); | ||
56 | + File[] files = currentPathFile.listFiles(new ImageFilter()); | ||
57 | + if (files != null) { | ||
58 | + for (File file : files) { | ||
59 | + Kv hash = new Kv(); | ||
60 | + String fileName = file.getName(); | ||
61 | + String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); | ||
62 | + hash.set("is_dir", false); | ||
63 | + hash.set("has_file", false); | ||
64 | + hash.set("filesize", file.length()); | ||
65 | + hash.set("is_photo", Arrays.<String>asList(fileTypes).contains(fileExt)); | ||
66 | + hash.set("filetype", fileExt); | ||
67 | + | ||
68 | + hash.set("filename", fileName); | ||
69 | + hash.set("datetime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(file.lastModified())); | ||
70 | + | ||
71 | + fileList.add(hash); | ||
72 | + } | ||
73 | + } | ||
74 | + | ||
75 | + Kv result = new Kv(); | ||
76 | + result.set("moveup_dir_path", dirName); | ||
77 | + result.set("current_dir_path", dirName); | ||
78 | + result.set("current_url", rootUrl); | ||
79 | + result.set("total_count", fileList.size()); | ||
80 | + result.set("file_list", fileList); | ||
81 | + | ||
82 | + getResponse().setContentType("application/json; charset=UTF-8"); | ||
83 | + renderHtml(result.toJson()); | ||
84 | + } | ||
85 | + | ||
86 | + class ImageFilter implements FileFilter { | ||
87 | + String[] fileTypes = new String[] { "gif", "jpg", "jpeg", "png", "bmp" }; | ||
88 | + | ||
89 | + public boolean accept(File file) { | ||
90 | + String fileExt = file.getName().substring(file.getName().lastIndexOf(".") + 1).toLowerCase(); | ||
91 | + return Arrays.<String>asList(fileTypes).contains(fileExt); | ||
92 | + } | ||
93 | + | ||
94 | + } | ||
95 | +} |
1 | +package com.air.interceptor; | ||
2 | + | ||
3 | +import com.air.model.SysUser; | ||
4 | +import com.jfinal.aop.Interceptor; | ||
5 | +import com.jfinal.aop.Invocation; | ||
6 | + | ||
7 | +/** | ||
8 | + * Depiction: 权限校验拦截器 | ||
9 | + * <p> | ||
10 | + * Modify: | ||
11 | + * <p> | ||
12 | + * Author: Kevin Lynn | ||
13 | + * <p> | ||
14 | + * Create Date:2016年8月14日 下午7:38:02 | ||
15 | + * <p> | ||
16 | + * | ||
17 | + * @version 1.0 | ||
18 | + * @since 1.0 | ||
19 | + */ | ||
20 | +public class AuthInterceptor implements Interceptor { | ||
21 | + | ||
22 | + public void intercept(Invocation inv) { | ||
23 | + // 不是登录或者登出请求,则需要判断用户是否已经登录,如果没有登录,则跳转到登录界面 | ||
24 | + SysUser user = inv.getController().getSessionAttr("user"); | ||
25 | + if (user == null) { | ||
26 | + inv.getController().redirect("/login"); | ||
27 | + } else { | ||
28 | + inv.invoke(); | ||
29 | + } | ||
30 | + } | ||
31 | + | ||
32 | +} |
1 | +package com.air.push; | ||
2 | + | ||
3 | +import java.util.Date; | ||
4 | +import java.util.HashMap; | ||
5 | +import java.util.Map; | ||
6 | +import java.util.Random; | ||
7 | + | ||
8 | +import com.jfinal.log.Log; | ||
9 | + | ||
10 | +import cn.jiguang.common.ClientConfig; | ||
11 | +import cn.jiguang.common.resp.APIConnectionException; | ||
12 | +import cn.jiguang.common.resp.APIRequestException; | ||
13 | +import cn.jpush.api.JPushClient; | ||
14 | +import cn.jpush.api.push.PushResult; | ||
15 | +import cn.jpush.api.push.model.Platform; | ||
16 | +import cn.jpush.api.push.model.PushPayload; | ||
17 | +import cn.jpush.api.push.model.audience.Audience; | ||
18 | +import cn.jpush.api.push.model.notification.Notification; | ||
19 | + | ||
20 | +public class PushKit { | ||
21 | + // 康爱思 | ||
22 | + private final static String APP_KEY = "aced41f410cced7e08982f2c"; | ||
23 | + private final static String MASTER_SECRET = "0eda135e4bbba17f7e7a11d3"; | ||
24 | + | ||
25 | + public static void main(String[] args) { | ||
26 | + Random random = new Random(System.currentTimeMillis()); | ||
27 | + | ||
28 | + Map<String, String> extras = new HashMap<String, String>(); | ||
29 | + extras.put("title", "title by kevin " + random.nextInt()); | ||
30 | + extras.put("summary", "summary " + random.nextInt()); | ||
31 | + extras.put("content", "content " + random.nextInt()); | ||
32 | + extras.put("createTime", new Date().toString()); | ||
33 | + extras.put("updateTime", new Date().toString()); | ||
34 | + extras.put("pushId", String.valueOf(10001)); | ||
35 | + extras.put("pushType", String.valueOf(PushType.PUSH_MESSAGE)); | ||
36 | + | ||
37 | + String alert = "alert by kevin " + random.nextInt(); | ||
38 | + String title = extras.get("title"); | ||
39 | + boolean flag = PushKit.push(PushKit.allAndroid(alert, title, extras)); | ||
40 | + | ||
41 | + Log.getLog(new PushKit().getClass()).error("flag-->" + flag); | ||
42 | + } | ||
43 | + | ||
44 | + private PushKit() { | ||
45 | + } | ||
46 | + | ||
47 | + public static boolean push(PushPayload payload) { | ||
48 | + JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY, null, ClientConfig.getInstance()); | ||
49 | + | ||
50 | + PushResult result = null; | ||
51 | + try { | ||
52 | + result = jpushClient.sendPush(payload); | ||
53 | + Log.getLog(new PushKit().getClass()).error("Got result - " + result); | ||
54 | + | ||
55 | + } catch (APIConnectionException e) { | ||
56 | + // Connection error, should retry later | ||
57 | + Log.getLog(new PushKit().getClass()).error("Connection error, should retry later", e); | ||
58 | + | ||
59 | + } catch (APIRequestException e) { | ||
60 | + // Should review the error, and fix the request | ||
61 | + Log.getLog(new PushKit().getClass()).error("Should review the error, and fix the request", e); | ||
62 | + Log.getLog(new PushKit().getClass()).error("HTTP Status: " + e.getStatus()); | ||
63 | + Log.getLog(new PushKit().getClass()).error("Error Code: " + e.getErrorCode()); | ||
64 | + Log.getLog(new PushKit().getClass()).error("Error Message: " + e.getErrorMessage()); | ||
65 | + } | ||
66 | + | ||
67 | + if (result != null) { | ||
68 | + if (result.isResultOK()) { | ||
69 | + return true; | ||
70 | + } | ||
71 | + } | ||
72 | + | ||
73 | + return false; | ||
74 | + } | ||
75 | + | ||
76 | + public static PushPayload allAndroid(String alert, String title, Map<String, String> extras) { | ||
77 | + return PushPayload.newBuilder().setPlatform(Platform.android()).setAudience(Audience.all()) | ||
78 | + .setNotification(Notification.android(alert, title, extras)).build(); | ||
79 | + } | ||
80 | + | ||
81 | + public static PushPayload allIos(String alert, String title, Map<String, String> extras) { | ||
82 | + return PushPayload.newBuilder().setPlatform(Platform.ios()).setAudience(Audience.all()) | ||
83 | + .setNotification(Notification.android(alert, title, extras)).build(); | ||
84 | + } | ||
85 | + | ||
86 | +} |
1 | +package com.air.push; | ||
2 | + | ||
3 | +/** | ||
4 | + * Depiction: | ||
5 | + * <p> | ||
6 | + * Modify: | ||
7 | + * <p> | ||
8 | + * Author: Kevin Lynn | ||
9 | + * <p> | ||
10 | + * Create Date:2017年6月27日 下午4:02:35 | ||
11 | + * | ||
12 | + */ | ||
13 | +public class PushType { | ||
14 | + | ||
15 | + public final static int PUSH_ACTIVITY = 100; | ||
16 | + public final static int PUSH_MESSAGE = 101; | ||
17 | + public final static int PUSH_ORDER = 102; | ||
18 | + | ||
19 | + private PushType() { | ||
20 | + } | ||
21 | + | ||
22 | +} |
air-admin/src/main/webapp/.DS_Store
0 → 100644
不能预览此文件类型
air-admin/src/main/webapp/WEB-INF/.DS_Store
0 → 100644
不能预览此文件类型
1 | +#define header() | ||
2 | +<head> | ||
3 | +<meta charset="utf-8" /> | ||
4 | +<meta http-equiv="pragma" content="no-cache"> | ||
5 | +<meta http-equiv="cache-control" content="no-cache, must-revalidate"> | ||
6 | +<meta http-equiv="expires" content="0"> | ||
7 | + | ||
8 | +<title>郑州机场航空物流信息平台——码头管理调度系统</title> | ||
9 | +<meta content="width=device-width, initial-scale=1.0" name="viewport" /> | ||
10 | +<meta content="teplot.com" name="author" /> | ||
11 | +<link rel="shortcut icon" href="#(contextPath)/img/logo.ico?ver=#(version)" /> | ||
12 | + | ||
13 | +<link rel="stylesheet" href="#(contextPath)/res/bootstrap/3.3.7/css/bootstrap.min.css" /> | ||
14 | +<script src="#(contextPath)/res/jquery/jquery.min-1.9.1.js"></script> | ||
15 | +<script src="#(contextPath)/res/jquery/jquery.validate.min.js"></script> | ||
16 | +<script src="#(contextPath)/res/bootstrap/3.3.7/js/bootstrap.min.js"></script> | ||
17 | + | ||
18 | +<link rel="stylesheet" href="#(contextPath)/res/font-awesome/css/font-awesome.css" /> | ||
19 | + | ||
20 | +<link rel="stylesheet" href="#(contextPath)/css/common.css?ver=#(version)" /> | ||
21 | +<script type="text/javascript" src="#(contextPath)/js/common.js?ver=#(version)"></script> | ||
22 | + | ||
23 | +#@res?() | ||
24 | + | ||
25 | +</head> | ||
26 | +#end |
1 | +#define menu() | ||
2 | +<div id="side-menu-bar"> | ||
3 | + <div id="jquery-accordion-menu" class="jquery-accordion-menu red"> | ||
4 | + <!-- <div class="jquery-accordion-menu-header" id="form"> | ||
5 | + <span>功能菜单</span> | ||
6 | + </div> --> | ||
7 | + <ul id="side-menu"> | ||
8 | + #for(menu : menuList) | ||
9 | + <li class="#(for.index==0?'active':'')"> | ||
10 | + #if(menu.url!='#') | ||
11 | + <a href="#(contextPath)#(menu.url)" target="contentPage"> | ||
12 | + <i class="fa #(menu.icon)"></i>#(menu.title) | ||
13 | + </a> | ||
14 | + #else | ||
15 | + <a href="" target="contentPage"> | ||
16 | + <i class="fa #(menu.icon)"></i>#(menu.title) | ||
17 | + </a> | ||
18 | + #end | ||
19 | + | ||
20 | + <!-- submenu --> | ||
21 | + | ||
22 | + #if(menu.child) | ||
23 | + <ul class="submenu"> | ||
24 | + #for(subMenu : menu.child) | ||
25 | + <li> | ||
26 | + <a href="#(contextPath)#(subMenu.url)" target="contentPage">#(subMenu.title)</a> | ||
27 | + </li> | ||
28 | + #end | ||
29 | + </ul> | ||
30 | + #end | ||
31 | + </li> | ||
32 | + #end | ||
33 | + </ul> | ||
34 | + </div> | ||
35 | +</div> | ||
36 | +#end |
1 | +#define page(url,curPage,totalPage,totalSize,key,cid,extra) | ||
2 | +<div> | ||
3 | +<table class="table table-condensed table-advance" style="width: 800px; height: 20px;"> | ||
4 | + <tr> | ||
5 | + <td> | ||
6 | + <a style="text-decoration: none;">每页10条,共#(totalSize??0)条数据,当前第#(curPage??0)页,共#(totalPage??0)页。</a> | ||
7 | + </td> | ||
8 | + #if((curPage??0)>1) | ||
9 | + <td> | ||
10 | + <a href="#(url)?page=1&key=#(key)&cid=#(cid)&#(extra)" style="cursor: pointer;">首页</a> | ||
11 | + </td> | ||
12 | + <td> | ||
13 | + <a href="#(url)?page=#(curPage-1)&key=#(key)&cid=#(cid)&#(extra)" style="cursor: pointer;">上一页</a> | ||
14 | + </td> | ||
15 | + #end | ||
16 | + | ||
17 | + #if((curPage??0) < (totalPage??0)) | ||
18 | + <td> | ||
19 | + <a href="#(url)?page=#(curPage+1)&key=#(key)&cid=#(cid)&#(extra)" style="cursor: pointer;">下一页</a> | ||
20 | + </td> | ||
21 | + #end | ||
22 | + | ||
23 | + #if((curPage??0) !=(totalPage??0)) | ||
24 | + <td> | ||
25 | + <a href="#(url)?page=#(totalPage)&key=#(key)&cid=#(cid)&#(extra)" style="cursor: pointer;">尾页</a> | ||
26 | + </td> | ||
27 | + #end | ||
28 | + | ||
29 | + #if((totalPage??0) > 1) | ||
30 | + <td> | ||
31 | + <a style="text-decoration: none; margin-left: 10px;">查看 </a> | ||
32 | + <input style="width: 80px; height: 20px; margin-top: -15px;" id="inputPage" type="number"> | ||
33 | + <a style="text-decoration: none;"> 页</a> | ||
34 | + <a style="margin-left: 10px; cursor: pointer;" onclick="onGoToPage()">跳转</a> | ||
35 | + </td> | ||
36 | + #end | ||
37 | + </tr> | ||
38 | +</table> | ||
39 | +</div> | ||
40 | +#end |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() | ||
4 | +<body> | ||
5 | + <div> | ||
6 | + <ol class="breadcrumb"> | ||
7 | + <li> | ||
8 | + <a>货代管理</a> | ||
9 | + </li> | ||
10 | + <li> | ||
11 | + <a style="color: gray;">/</a> | ||
12 | + </li> | ||
13 | + <li> | ||
14 | + <a href="#(contextPath)/agent/list">货代列表</a> | ||
15 | + </li> | ||
16 | + <li> | ||
17 | + <a style="color: gray;">/</a> | ||
18 | + </li> | ||
19 | + <li class="active">新建货代</li> | ||
20 | + </ol> | ||
21 | + | ||
22 | + <div style="margin: 10px;"> | ||
23 | + <table class="table table-bordered table-advance table-hover"> | ||
24 | + #if(agent) | ||
25 | + <tr style="display: none;"> | ||
26 | + <td>货代ID</td> | ||
27 | + <td><input class="form-control" type="text" name="agent.id" value="#(agent.id)" /></td> | ||
28 | + </tr> | ||
29 | + #end | ||
30 | + <tr> | ||
31 | + <td>公司</td> | ||
32 | + <td><input class="form-control" name="agent.nameCN" type="text" value="#(agent.nameCN??)" | ||
33 | + required /></td> | ||
34 | + </tr> | ||
35 | + <tr> | ||
36 | + <td>负责人</td> | ||
37 | + <td><input class="form-control" name="agent.manager" type="text" | ||
38 | + value="#(agent.manager??)" required /></td> | ||
39 | + </tr> | ||
40 | + <tr> | ||
41 | + <td>手机号</td> | ||
42 | + <td><input class="form-control" name="agent.phone" type="text" value="#(agent.phone??)" | ||
43 | + min-lenght="11" /></td> | ||
44 | + </tr> | ||
45 | + </table> | ||
46 | + | ||
47 | + <div class="form-actions" style="margin-top: 10px; margin-left: 40%;"> | ||
48 | + <a class="btn" type="button" href="javascript:history.go(-1)" style="margin-left: 30px;">返 回</a> | ||
49 | + </div> | ||
50 | + </div> | ||
51 | + </div> | ||
52 | + | ||
53 | + <script type="text/javascript"> | ||
54 | + #if(flag) | ||
55 | + showTip('#(flag)'); | ||
56 | + #end | ||
57 | + </script> | ||
58 | +</body> | ||
59 | +</html> | ||
60 | + | ||
61 | + | ||
62 | + |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() | ||
4 | +<body> | ||
5 | + <div> | ||
6 | + <ol class="breadcrumb"> | ||
7 | + <li> | ||
8 | + <a>货代管理</a> | ||
9 | + </li> | ||
10 | + <li> | ||
11 | + <a style="color: gray;">/</a> | ||
12 | + </li> | ||
13 | + <li> | ||
14 | + <a href="#(contextPath)/agent/list">货代列表</a> | ||
15 | + </li> | ||
16 | + <li> | ||
17 | + <a style="color: gray;">/</a> | ||
18 | + </li> | ||
19 | + <li class="active">新建货代</li> | ||
20 | + </ol> | ||
21 | + | ||
22 | + <div style="margin: 10px;"> | ||
23 | + <form action="#(contextPath)/agent/submit" method="post"> | ||
24 | + <table class="table table-bordered table-advance table-hover"> | ||
25 | + #if(agent) | ||
26 | + <tr style="display: none;"> | ||
27 | + <td>货代ID</td> | ||
28 | + <td><input class="form-control" type="text" name="agent.id" value="#(agent.id)" /></td> | ||
29 | + </tr> | ||
30 | + #end | ||
31 | + <tr> | ||
32 | + <td>公司</td> | ||
33 | + <td><input class="form-control" name="agent.nameCN" type="text" value="#(agent.nameCN??)" | ||
34 | + required /></td> | ||
35 | + </tr> | ||
36 | + <tr> | ||
37 | + <td>负责人</td> | ||
38 | + <td><input class="form-control" name="agent.manager" type="text" | ||
39 | + value="#(agent.manager??)" required /></td> | ||
40 | + </tr> | ||
41 | + <tr> | ||
42 | + <td>手机号</td> | ||
43 | + <td><input class="form-control" name="agent.phone" type="text" value="#(agent.phone??)" | ||
44 | + min-lenght="11" required /></td> | ||
45 | + </tr> | ||
46 | + </table> | ||
47 | + | ||
48 | + <div class="form-actions" style="margin-top: 10px; margin-left: 40%;"> | ||
49 | + <button class="btn btn-success" type="submit">保 存</button> | ||
50 | + <a class="btn" type="button" href="javascript:history.go(-1)" style="margin-left: 30px;">返 回</a> | ||
51 | + </div> | ||
52 | + </form> | ||
53 | + </div> | ||
54 | + </div> | ||
55 | + | ||
56 | + <script type="text/javascript"> | ||
57 | + #if(flag) | ||
58 | + showTip('#(flag)'); | ||
59 | + #end | ||
60 | + </script> | ||
61 | +</body> | ||
62 | +</html> | ||
63 | + | ||
64 | + | ||
65 | + |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() | ||
4 | +<body> | ||
5 | + <div> | ||
6 | + <ol class="breadcrumb"> | ||
7 | + <li> | ||
8 | + <a>货代管理</a> | ||
9 | + </li> | ||
10 | + <li> | ||
11 | + <a style="color: gray;">/</a> | ||
12 | + </li> | ||
13 | + <li class="active">货代列表</li> | ||
14 | + </ol> | ||
15 | + | ||
16 | + <div style="margin-left: 10px;"> | ||
17 | + <table> | ||
18 | + <tr> | ||
19 | + <td><input id="searchInput" class="form-control" type="text" placeholder="公司名称/负责人/手机号" value="#(searchKey)" style="width: 300px;"/></td> | ||
20 | + <td><button class="btn btn-success" onclick="onSearchAction()" style="margin-left: 5px;">搜索</button></td> | ||
21 | + <td><button class="btn btn-primary" onclick="onAddAction()" style="margin-left: 30px;">新建货代</button></td> | ||
22 | + </tr> | ||
23 | + </table> | ||
24 | + </div> | ||
25 | + | ||
26 | + <div style="margin: 10px;"> | ||
27 | + <table class="table table-bordered table-advance table-hover"> | ||
28 | + <thead> | ||
29 | + <tr> | ||
30 | + <th>公司</th> | ||
31 | + <th>负责人</th> | ||
32 | + <th>手机号</th> | ||
33 | + <th>添加时间</th> | ||
34 | + <th>更新时间</th> | ||
35 | + <th>操作</th> | ||
36 | + </tr> | ||
37 | + </thead> | ||
38 | + <tbody> | ||
39 | + #for(agent : dataList) | ||
40 | + <tr> | ||
41 | + <td>#(agent.nameCN??)</td> | ||
42 | + <td>#(agent.manager??)</td> | ||
43 | + <td>#(agent.phone??)</td> | ||
44 | + <td>#date(agent.createTime??,'yyyy-MM-dd HH:mm:ss')</td> | ||
45 | + <td>#date(agent.updateTime??,'yyyy-MM-dd HH:mm:ss')</td> | ||
46 | + <td> | ||
47 | + <button class="btn btn-primary" onclick="onModifyAction(#(agent.id))"> | ||
48 | + <i class="icon-pencil"></i> 编辑 | ||
49 | + </button> | ||
50 | + <button class="btn btn-danger" onclick="onDeleteAction(#(agent.id))"> | ||
51 | + <i class="icon-trash "></i> 删除 | ||
52 | + </button> | ||
53 | + </td> | ||
54 | + </tr> | ||
55 | + #end | ||
56 | + </tbody> | ||
57 | + </table> | ||
58 | + | ||
59 | + #@page(contextPath+'/agent/list',curPage,totalPage,totalSize,searchKey,'','') | ||
60 | + </div> | ||
61 | + </div> | ||
62 | + | ||
63 | + <!-- Modal --> | ||
64 | + <div id="delModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" | ||
65 | + aria-hidden="true"> | ||
66 | + <div class="modal-dialog"> | ||
67 | + <div class="modal-header"> | ||
68 | + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> | ||
69 | + <h3 id="modal-title">温馨提示</h3> | ||
70 | + </div> | ||
71 | + <div class="modal-body"> | ||
72 | + <div class="control-group"> | ||
73 | + <label class="control-label" id="deleteId" style="display: none;">-1</label> | ||
74 | + <label class="control-label" id="deleteTip">此操作将会删除所有和该货代相关的信息,是否继续删除?</label> | ||
75 | + </div> | ||
76 | + </div> | ||
77 | + <div class="modal-footer form-actions"> | ||
78 | + <button class="btn btn-danger" onclick="onDeleteFromModal()">删除</button> | ||
79 | + <button class="btn" data-dismiss="modal" aria-hidden="true">取消</button> | ||
80 | + </div> | ||
81 | + </div> | ||
82 | + </div> | ||
83 | + <!-- End Modal --> | ||
84 | + | ||
85 | + <script type="text/javascript" src="#(contextPath)/js/agent.js?ver=#(version)"></script> | ||
86 | + | ||
87 | + <script type="text/javascript"> | ||
88 | + #if(flag) | ||
89 | + showTip('#(flag)'); | ||
90 | + #end | ||
91 | + </script> | ||
92 | +</body> | ||
93 | +</html> | ||
94 | + | ||
95 | + | ||
96 | + |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() | ||
4 | +<body> | ||
5 | + <div> | ||
6 | + <ol class="breadcrumb"> | ||
7 | + <li> | ||
8 | + <a>报表中心</a> | ||
9 | + </li> | ||
10 | + <li> | ||
11 | + <a style="color: gray;">/</a> | ||
12 | + </li> | ||
13 | + <li class="active">待进场车辆</li> | ||
14 | + </ol> | ||
15 | + | ||
16 | + <div style="margin-left: 10px;"> | ||
17 | + <table> | ||
18 | + <tr> | ||
19 | + <td><input id="searchInput" class="form-control" type="text" placeholder="货代/车牌号/司机/手机号" | ||
20 | + value="#(searchKey)" style="margin-left: 1px; width: 300px;" /></td> | ||
21 | + <td><button class="btn btn-success" onclick="onSearchAction()" style="margin-left: 5px;">搜索</button></td> | ||
22 | + </tr> | ||
23 | + </table> | ||
24 | + </div> | ||
25 | + | ||
26 | + <div style="margin: 10px;"> | ||
27 | + <table class="table table-bordered table-advance table-hover"> | ||
28 | + <thead> | ||
29 | + <tr> | ||
30 | + <th>车牌号</th> | ||
31 | + <th>司机姓名</th> | ||
32 | + <th>司机手机号</th> | ||
33 | + <th>代理公司</th> | ||
34 | + #if(role==1) | ||
35 | + <th>货站</th> | ||
36 | + #end | ||
37 | + <th>业务类型</th> | ||
38 | + <th>申请时间</th> | ||
39 | + </tr> | ||
40 | + </thead> | ||
41 | + <tbody> | ||
42 | + #for(data : dataList) | ||
43 | + <tr> | ||
44 | + <td>#(data.carNo??)</td> | ||
45 | + <td>#(data.driverName??)</td> | ||
46 | + <td>#(data.phone??)</td> | ||
47 | + <td><a href="#(contextPath)/agent/details?name=#(data.agentName)">#(data.agentName??)</a> </td> | ||
48 | + #if(role==1) | ||
49 | + <td>#(data.station.name??)</td> | ||
50 | + #end | ||
51 | + <td>#(data.isPickup?'提货':'卸货')</td> | ||
52 | + <td>#date(data.applyTime??,'yyyy-MM-dd HH:mm:ss')</td> | ||
53 | + </tr> | ||
54 | + #end | ||
55 | + </tbody> | ||
56 | + </table> | ||
57 | + | ||
58 | + #@page(contextPath+'/car/applyList',curPage,totalPage,totalSize,searchKey,0,'') | ||
59 | + </div> | ||
60 | + </div> | ||
61 | + | ||
62 | + <script type="text/javascript" src="#(contextPath)/js/applyList.js"></script> | ||
63 | + | ||
64 | + <script type="text/javascript"> | ||
65 | + #if(flag) | ||
66 | + showTip('#(flag)'); | ||
67 | + #end | ||
68 | + </script> | ||
69 | +</body> | ||
70 | +</html> | ||
71 | + | ||
72 | + | ||
73 | + |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() | ||
4 | +<body> | ||
5 | + <div> | ||
6 | + <ol class="breadcrumb"> | ||
7 | + <li> | ||
8 | + <a>进场预申请</a> | ||
9 | + </li> | ||
10 | + </ol> | ||
11 | + | ||
12 | + <div style="margin-left: 10px;"> | ||
13 | + <table> | ||
14 | + <tr> | ||
15 | + <td><input id="searchInput" class="form-control" type="text" placeholder="车牌号/司机/手机号" | ||
16 | + value="#(searchKey)" style="margin-left: 1px; width: 300px;" /></td> | ||
17 | + <td><button class="btn btn-success" onclick="onSearchAction()" style="margin-left: 5px;">搜索</button></td> | ||
18 | + <td><button class="btn btn-primary" onclick="onAddAction()" style="margin-left: 30px;">新建预申请</button></td> | ||
19 | + </tr> | ||
20 | + </table> | ||
21 | + </div> | ||
22 | + | ||
23 | + <div style="margin: 10px;"> | ||
24 | + <table class="table table-bordered table-advance table-hover"> | ||
25 | + <thead> | ||
26 | + <tr> | ||
27 | + <th>车牌号</th> | ||
28 | + <th>泊位号</th> | ||
29 | + <th>司机姓名</th> | ||
30 | + <th>司机手机号</th> | ||
31 | + <th>货站</th> | ||
32 | + <th>业务类型</th> | ||
33 | + <th>申请时间</th> | ||
34 | + <th>进场时间</th> | ||
35 | + <th>离场时间</th> | ||
36 | + <th>状态</th> | ||
37 | + </tr> | ||
38 | + </thead> | ||
39 | + <tbody> | ||
40 | + #for(data : dataList) | ||
41 | + <tr> | ||
42 | + <td>#(data.carNo??)</td> | ||
43 | + <td>#(data.portNo??"未分配")</td> | ||
44 | + <td>#(data.driverName??)</td> | ||
45 | + <td>#(data.phone??)</td> | ||
46 | + <td>#(data.station.name??)</td> | ||
47 | + <td>#(data.isPickup?'提货':'卸货')</td> | ||
48 | + <td>#date(data.applyTime??,'yyyy-MM-dd HH:mm:ss')</td> | ||
49 | + <td>#date(data.enterTime??,'yyyy-MM-dd HH:mm:ss')</td> | ||
50 | + <td>#date(data.leaveTime??,'yyyy-MM-dd HH:mm:ss')</td> | ||
51 | + <td>#if(data.enterTime&&data.leaveTime) <span | ||
52 | + style="color: #1cb93b; font: bold; font-size: 1.1em;">已离场</span> | ||
53 | + #elseif(data.enterTime&&!data.leaveTime) <span | ||
54 | + style="color: red; font: bold; font-size: 1.1em;">作业中</span> #else <span | ||
55 | + style="color: blue; font: bold; font-size: 1.1em;">待进场</span> #end | ||
56 | + </td> | ||
57 | + </tr> | ||
58 | + #end | ||
59 | + </tbody> | ||
60 | + </table> | ||
61 | + | ||
62 | + #@page(contextPath+'/car/applyPre',curPage,totalPage,totalSize,searchKey,0,'') | ||
63 | + </div> | ||
64 | + </div> | ||
65 | + | ||
66 | + <script type="text/javascript" src="#(contextPath)/js/applyPre.js?ver=#(version)"></script> | ||
67 | + | ||
68 | + <script type="text/javascript"> | ||
69 | + #if(flag) | ||
70 | + showTip('#(flag)'); | ||
71 | + #end | ||
72 | + </script> | ||
73 | +</body> | ||
74 | +</html> | ||
75 | + | ||
76 | + | ||
77 | + |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() | ||
4 | + | ||
5 | +<body> | ||
6 | + <div> | ||
7 | + <ol class="breadcrumb"> | ||
8 | + <li> | ||
9 | + <a>进场预申请</a> | ||
10 | + </li> | ||
11 | + <li> | ||
12 | + <a style="color: gray;">/</a> | ||
13 | + </li> | ||
14 | + <li class="active">新建预申请</li> | ||
15 | + </ol> | ||
16 | + | ||
17 | + <div style="margin: 10px;"> | ||
18 | + <form action="#(contextPath)/car/submitPre" method="post"> | ||
19 | + <table class="table table-bordered table-advance table-hover"> | ||
20 | + <tbody> | ||
21 | + #if(car) | ||
22 | + <tr style="display: none;"> | ||
23 | + <td>ID</td> | ||
24 | + <td colspan="2"><input class="form-control" type="text" name="car.id" value="#(car.id)" /></td> | ||
25 | + </tr> | ||
26 | + #end | ||
27 | + | ||
28 | + <tr> | ||
29 | + <td>司机名称</td> | ||
30 | + <td colspan="2"><input class="form-control" name="car.driverName" type="text" | ||
31 | + value="#(car.driverName??)" required /></td> | ||
32 | + </tr> | ||
33 | + <tr> | ||
34 | + <td>司机手机号</td> | ||
35 | + <td colspan="2"><input class="form-control" name="car.phone" type="text" | ||
36 | + value="#(car.phone??)" required /></td> | ||
37 | + </tr> | ||
38 | + <tr> | ||
39 | + <td>车牌号</td> | ||
40 | + <td colspan="2"><input class="form-control" name="car.carNo" type="text" | ||
41 | + value="#(car.carNo??)" required /></td> | ||
42 | + </tr> | ||
43 | + <tr> | ||
44 | + <td>航班号</td> | ||
45 | + <td colspan="2"><input class="form-control" name="car.flightNumber" type="text" | ||
46 | + value="#(car.flightNumber??)" /></td> | ||
47 | + </tr> | ||
48 | + <tr> | ||
49 | + <td>业务类型</td> | ||
50 | + <td><select class="input-small m-wrap" tabindex="1" style="width: 200px;" | ||
51 | + name="car.isPickup" required> | ||
52 | + <option value="">选择业务</option> | ||
53 | + <option value="1">提货</option> | ||
54 | + <option value="0">卸货</option> | ||
55 | + </select></td> | ||
56 | + </tr> | ||
57 | + | ||
58 | + <tr> | ||
59 | + <td>货站</td> | ||
60 | + <td><select class="input-small m-wrap" tabindex="1" style="width: 200px;" | ||
61 | + name="car.stationArea" required> | ||
62 | + <!-- <option value="">选择货站</option> --> | ||
63 | + #for(station : stationList) | ||
64 | + <option value="#(station.areaCode)" | ||
65 | + #if(car.stationArea??==station.areaCode) | ||
66 | + selected | ||
67 | + #end | ||
68 | + > | ||
69 | + #(station.name) | ||
70 | + </option> | ||
71 | + #end | ||
72 | + </select></td> | ||
73 | + </tr> | ||
74 | + | ||
75 | + </tbody> | ||
76 | + </table> | ||
77 | + <div class="form-actions" style="margin-top: 10px; margin-left: 40%;"> | ||
78 | + <button class="btn btn-success" type="submit">保 存</button> | ||
79 | + <a class="btn" type="button" href="javascript:history.go(-1)" style="margin-left: 30px;">返 回</a> | ||
80 | + </div> | ||
81 | + </form> | ||
82 | + </div> | ||
83 | + </div> | ||
84 | + | ||
85 | + <script type="text/javascript"> | ||
86 | + #if(flag) | ||
87 | + showTip('#(flag)'); | ||
88 | + #end | ||
89 | + </script> | ||
90 | +</body> | ||
91 | +</html> | ||
92 | + | ||
93 | + | ||
94 | + |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() | ||
4 | + | ||
5 | +<body> | ||
6 | + <div> | ||
7 | + <ol class="breadcrumb"> | ||
8 | + <li> | ||
9 | + <a>码头管理</a> | ||
10 | + </li> | ||
11 | + <li> | ||
12 | + <a style="color: gray;">/</a> | ||
13 | + </li> | ||
14 | + <li class="active">码头分配</li> | ||
15 | + </ol> | ||
16 | + | ||
17 | + <div style="margin: 10px;"> | ||
18 | + <form action="#(contextPath)/port/submitCar" method="post"> | ||
19 | + <table class="table table-bordered table-advance table-hover"> | ||
20 | + <tbody> | ||
21 | + #if(car) | ||
22 | + <tr style="display: none;"> | ||
23 | + <td>ID</td> | ||
24 | + <td colspan="2"><input class="form-control" type="text" name="car.id" value="#(car.id)" /></td> | ||
25 | + </tr> | ||
26 | + #end | ||
27 | + | ||
28 | + <tr> | ||
29 | + <td>司机名称</td> | ||
30 | + <td colspan="2"><input class="form-control" name="car.driverName" type="text" | ||
31 | + value="#(car.driverName??)" required /></td> | ||
32 | + </tr> | ||
33 | + <tr> | ||
34 | + <td>司机手机号</td> | ||
35 | + <td colspan="2"><input class="form-control" name="car.phone" type="text" | ||
36 | + value="#(car.phone??)" required /></td> | ||
37 | + </tr> | ||
38 | + <tr> | ||
39 | + <td>车牌号</td> | ||
40 | + <td colspan="2"><input class="form-control" name="car.carNo" type="text" | ||
41 | + value="#(car.carNo??)" required /></td> | ||
42 | + </tr> | ||
43 | + <tr> | ||
44 | + <td>业务类型</td> | ||
45 | + <td><select id="typeList" class="input-small m-wrap" tabindex="1" style="width: 160px;" | ||
46 | + name="car.isPickup" onchange="onChangeType()" required> | ||
47 | + <option value="1">提货</option> | ||
48 | + <option value="0">卸货</option> | ||
49 | + </select></td> | ||
50 | + </tr> | ||
51 | + | ||
52 | + <tr id="arrivalPortTr" style="width: 100%;"> | ||
53 | + <td>码头</td> | ||
54 | + <td><select id="arrivalList" class="input-small m-wrap" tabindex="1" style="width: 160px;" | ||
55 | + name="car.portNo" required> | ||
56 | + <option value="">选择进港码头</option> | ||
57 | + #for(port : arrivalList) | ||
58 | + <option value="#(port.portNo)" | ||
59 | + #if(car.portNo??==port.portNo) | ||
60 | + selected | ||
61 | + #end | ||
62 | + > | ||
63 | + #(port.portNo) | ||
64 | + </option> | ||
65 | + #end | ||
66 | + </select> | ||
67 | + </td> | ||
68 | + </tr> | ||
69 | + | ||
70 | + <tr id="leftPortTr" style="display:none;width: 100%;"> | ||
71 | + <td>码头</td> | ||
72 | + <td><select id="leftList" class="input-small m-wrap" tabindex="1" style="width: 160px;" | ||
73 | + name="car.portNo" required> | ||
74 | + <option value="">选择离港码头</option> | ||
75 | + #for(port : leftList) | ||
76 | + <option value="#(port.portNo)" | ||
77 | + #if(car.portNo??==port.portNo) | ||
78 | + selected | ||
79 | + #end | ||
80 | + > | ||
81 | + #(port.portNo) | ||
82 | + </option> | ||
83 | + #end | ||
84 | + </select> | ||
85 | + </td> | ||
86 | + </tr> | ||
87 | + | ||
88 | + <tr> | ||
89 | + <td>特殊</td> | ||
90 | + <td colspan="2"> | ||
91 | + <label style="padding-right: 20px;color: red;"> | ||
92 | + <input name="car.isStick" style="margin-right: 5px;" type="checkbox"> | ||
93 | + 优先排队 | ||
94 | + </label> | ||
95 | + </td> | ||
96 | + </tr> | ||
97 | + | ||
98 | + </tbody> | ||
99 | + </table> | ||
100 | + <div class="form-actions" style="margin-top: 10px; margin-left: 40%;"> | ||
101 | + <button class="btn btn-success" type="submit">保 存</button> | ||
102 | + <a class="btn" type="button" href="javascript:history.go(-1)" style="margin-left: 30px;">返 回</a> | ||
103 | + </div> | ||
104 | + </form> | ||
105 | + </div> | ||
106 | + </div> | ||
107 | + | ||
108 | +<script type="text/javascript" src="#(contextPath)/js/portCarEdit.js?ver=#(version)"></script> | ||
109 | + | ||
110 | + <script type="text/javascript"> | ||
111 | + #if(flag) | ||
112 | + showTip('#(flag)'); | ||
113 | + #end | ||
114 | + </script> | ||
115 | +</body> | ||
116 | +</html> | ||
117 | + | ||
118 | + | ||
119 | + |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() | ||
4 | +<body> | ||
5 | + <div> | ||
6 | + <ol class="breadcrumb"> | ||
7 | + <li> | ||
8 | + <a>数据核对</a> | ||
9 | + </li> | ||
10 | + </ol> | ||
11 | + | ||
12 | + <div style="margin-left: 10px;"> | ||
13 | + <table> | ||
14 | + <tr> | ||
15 | + <td><input id="searchInput" class="form-control" type="text" placeholder="货代/车牌号/司机/手机号" | ||
16 | + value="#(searchKey)" style="margin-left: 1px; width: 300px;" /></td> | ||
17 | + <td><button class="btn btn-success" onclick="onSearchAction()" style="margin-left: 5px;">搜索</button></td> | ||
18 | + </tr> | ||
19 | + </table> | ||
20 | + </div> | ||
21 | + | ||
22 | + <div style="margin: 10px;"> | ||
23 | + <table class="table table-bordered table-advance table-hover"> | ||
24 | + <thead> | ||
25 | + <tr> | ||
26 | + <th>车牌号</th> | ||
27 | + <th>泊位号</th> | ||
28 | + <th>司机姓名</th> | ||
29 | + <th>司机手机号</th> | ||
30 | + <th>代理公司</th> | ||
31 | + #if(role==1) | ||
32 | + <th>货站</th> | ||
33 | + #end | ||
34 | + <th>业务类型</th> | ||
35 | + <th>进场时间</th> | ||
36 | + <th>离场时间</th> | ||
37 | + <th>核碰情况</th> | ||
38 | + </tr> | ||
39 | + </thead> | ||
40 | + <tbody> | ||
41 | + #for(data : dataList) | ||
42 | + <tr> | ||
43 | + <td>#(data.carNo??)</td> | ||
44 | + <td>#(data.portNo??"未分配")</td> | ||
45 | + <td>#(data.driverName??)</td> | ||
46 | + <td>#(data.phone??)</td> | ||
47 | + <td><a href="#(contextPath)/agent/details?name=#(data.agentName)">#(data.agentName??)</a> </td> | ||
48 | + #if(role==1) | ||
49 | + <td>#(data.station.name??)</td> | ||
50 | + #end | ||
51 | + <td>#(data.isPickup?'提货':'卸货')</td> | ||
52 | + <td>#date(data.enterTime??,'yyyy-MM-dd HH:mm:ss')</td> | ||
53 | + <td>#date(data.leaveTime??,'yyyy-MM-dd HH:mm:ss')</td> | ||
54 | + <!-- <td>#(data.checkResult??'正常')</td> --> | ||
55 | + <td> | ||
56 | + #if(data.checkResult=='正常') | ||
57 | + <span style="color: #1cb93b; font: bold;font-size: 1.1em;">#(data.checkResult)</span> | ||
58 | + #elseif(data.checkResult=='待进场') | ||
59 | + <span style="color: blue;font: bold;font-size: 1.1em;">#(data.checkResult)</span> | ||
60 | + #else | ||
61 | + <span style="color: red;font: bold;font-size: 1.1em;">#(data.checkResult)</span> | ||
62 | + #end | ||
63 | + </td> | ||
64 | + </tr> | ||
65 | + #end | ||
66 | + </tbody> | ||
67 | + </table> | ||
68 | + | ||
69 | + #@page(contextPath+'/car/checkList',curPage,totalPage,totalSize,searchKey,0,'') | ||
70 | + </div> | ||
71 | + </div> | ||
72 | + | ||
73 | + <script type="text/javascript" src="#(contextPath)/js/checkList.js"></script> | ||
74 | + | ||
75 | + <script type="text/javascript"> | ||
76 | + #if(flag) | ||
77 | + showTip('#(flag)'); | ||
78 | + #end | ||
79 | + </script> | ||
80 | +</body> | ||
81 | +</html> | ||
82 | + | ||
83 | + | ||
84 | + |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() | ||
4 | +<body> | ||
5 | + <div> | ||
6 | + <ol class="breadcrumb"> | ||
7 | + <li> | ||
8 | + <a>报表中心</a> | ||
9 | + </li> | ||
10 | + <li> | ||
11 | + <a style="color: gray;">/</a> | ||
12 | + </li> | ||
13 | + <li class="active">已进场车辆</li> | ||
14 | + </ol> | ||
15 | + | ||
16 | + <div style="margin-left: 10px;"> | ||
17 | + <table> | ||
18 | + <tr> | ||
19 | + <td><input id="searchInput" class="form-control" type="text" placeholder="货代/车牌号/司机/手机号" | ||
20 | + value="#(searchKey)" style="margin-left: 1px; width: 300px;" /></td> | ||
21 | + <td><button class="btn btn-success" onclick="onSearchAction()" style="margin-left: 5px;">搜索</button></td> | ||
22 | + </tr> | ||
23 | + </table> | ||
24 | + </div> | ||
25 | + | ||
26 | + <div style="margin: 10px;"> | ||
27 | + <table class="table table-bordered table-advance table-hover"> | ||
28 | + <thead> | ||
29 | + <tr> | ||
30 | + <th>车牌号</th> | ||
31 | + <th>泊位号</th> | ||
32 | + <th>司机姓名</th> | ||
33 | + <th>司机手机号</th> | ||
34 | + <th>代理公司</th> | ||
35 | + #if(role==1) | ||
36 | + <th>货站</th> | ||
37 | + #end | ||
38 | + <th>业务类型</th> | ||
39 | + <th>进场时间</th> | ||
40 | + </tr> | ||
41 | + </thead> | ||
42 | + <tbody> | ||
43 | + #for(data : dataList) | ||
44 | + <tr> | ||
45 | + <td>#(data.carNo??)</td> | ||
46 | + <td>#(data.portNo??"未分配")</td> | ||
47 | + <td>#(data.driverName??)</td> | ||
48 | + <td>#(data.phone??)</td> | ||
49 | + <td><a href="#(contextPath)/agent/details?name=#(data.agentName)">#(data.agentName??)</a> </td> | ||
50 | + #if(role==1) | ||
51 | + <td>#(data.station.name??)</td> | ||
52 | + #end | ||
53 | + <td>#(data.isPickup?'提货':'卸货')</td> | ||
54 | + <td>#date(data.enterTime??,'yyyy-MM-dd HH:mm:ss')</td> | ||
55 | + </tr> | ||
56 | + #end | ||
57 | + </tbody> | ||
58 | + </table> | ||
59 | + | ||
60 | + #@page(contextPath+'/car/enterList',curPage,totalPage,totalSize,searchKey,0,'') | ||
61 | + </div> | ||
62 | + </div> | ||
63 | + | ||
64 | + <script type="text/javascript" src="#(contextPath)/js/enterList.js"></script> | ||
65 | + | ||
66 | + <script type="text/javascript"> | ||
67 | + #if(flag) | ||
68 | + showTip('#(flag)'); | ||
69 | + #end | ||
70 | + </script> | ||
71 | +</body> | ||
72 | +</html> | ||
73 | + | ||
74 | + | ||
75 | + |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() | ||
4 | +<body> | ||
5 | + <div> | ||
6 | + <ol class="breadcrumb"> | ||
7 | + <li> | ||
8 | + <a>报表中心</a> | ||
9 | + </li> | ||
10 | + <li> | ||
11 | + <a style="color: gray;">/</a> | ||
12 | + </li> | ||
13 | + <li class="active">车辆总表</li> | ||
14 | + </ol> | ||
15 | + | ||
16 | + <div style="margin-left: 10px;"> | ||
17 | + <table> | ||
18 | + <tr> | ||
19 | + <td><input id="searchInput" class="form-control" type="text" placeholder="货代/车牌号/司机/手机号" | ||
20 | + value="#(searchKey)" style="margin-left: 1px; width: 300px;" /></td> | ||
21 | + <td><button class="btn btn-success" onclick="onSearchAction()" style="margin-left: 5px;">搜索</button></td> | ||
22 | + </tr> | ||
23 | + </table> | ||
24 | + </div> | ||
25 | + | ||
26 | + <div style="margin: 10px;"> | ||
27 | + <table class="table table-bordered table-advance table-hover"> | ||
28 | + <thead> | ||
29 | + <tr> | ||
30 | + <th>车牌号</th> | ||
31 | + <th>泊位号</th> | ||
32 | + <th>司机姓名</th> | ||
33 | + <th>司机手机号</th> | ||
34 | + <th>代理公司</th> | ||
35 | + #if(role==1) | ||
36 | + <th>货站</th> | ||
37 | + #end | ||
38 | + <th>业务类型</th> | ||
39 | + <th>进场时间</th> | ||
40 | + <th>离场时间</th> | ||
41 | + </tr> | ||
42 | + </thead> | ||
43 | + <tbody> | ||
44 | + #for(data : dataList) | ||
45 | + <tr> | ||
46 | + <td>#(data.carNo??)</td> | ||
47 | + <td>#(data.portNo??"未分配")</td> | ||
48 | + <td>#(data.driverName??)</td> | ||
49 | + <td>#(data.phone??)</td> | ||
50 | + <td><a href="#(contextPath)/agent/details?name=#(data.agentName)">#(data.agentName??)</a> </td> | ||
51 | + #if(role==1) | ||
52 | + <td>#(data.station.name??)</td> | ||
53 | + #end | ||
54 | + <td>#(data.isPickup?'提货':'卸货')</td> | ||
55 | + <td>#date(data.enterTime??,'yyyy-MM-dd HH:mm:ss')</td> | ||
56 | + <td>#date(data.leaveTime??,'yyyy-MM-dd HH:mm:ss')</td> | ||
57 | + </tr> | ||
58 | + #end | ||
59 | + </tbody> | ||
60 | + </table> | ||
61 | + | ||
62 | + #@page(contextPath+'/car/historyList',curPage,totalPage,totalSize,searchKey,0,'') | ||
63 | + </div> | ||
64 | + </div> | ||
65 | + | ||
66 | + <script type="text/javascript" src="#(contextPath)/js/historyList.js"></script> | ||
67 | + | ||
68 | + <script type="text/javascript"> | ||
69 | + #if(flag) | ||
70 | + showTip('#(flag)'); | ||
71 | + #end | ||
72 | + </script> | ||
73 | +</body> | ||
74 | +</html> | ||
75 | + | ||
76 | + | ||
77 | + |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() #define res() | ||
4 | +<style type="text/css"> | ||
5 | +.welcome-title { | ||
6 | + text-align: center; | ||
7 | + font-size: 2.8em; | ||
8 | + color: #000000; | ||
9 | + margin-top: 60px; | ||
10 | +} | ||
11 | + | ||
12 | +</style> | ||
13 | +#end | ||
14 | +</head> | ||
15 | + | ||
16 | +<body> | ||
17 | + <div id="main-content"> | ||
18 | + <div class="welcome-title">欢迎登录码头管理调度系统!</div> | ||
19 | + | ||
20 | + <div class="widget-body" style="width: 60%; margin-left: 20%; margin-top: 40px;"> | ||
21 | + <table class="table table-striped table-bordered table-advance table-hover"> | ||
22 | + <tbody> | ||
23 | + #if(user.station) | ||
24 | + <tr> | ||
25 | + <td style="width: 100px;">货站:</td> | ||
26 | + <td>#(user.station.name)</td> | ||
27 | + </tr> | ||
28 | + #end | ||
29 | + <tr> | ||
30 | + <td style="width: 100px;">姓名:</td> | ||
31 | + <td>#(user.realName)</td> | ||
32 | + </tr> | ||
33 | + <tr> | ||
34 | + <td>角色:</td> | ||
35 | + <td>#(user.job)</td> | ||
36 | + </tr> | ||
37 | + <tr> | ||
38 | + <td>登录时间:</td> | ||
39 | + <td>#date(loginTime??,'yyyy-MM-dd HH:mm:ss')</td> | ||
40 | + </tr> | ||
41 | + | ||
42 | + <tr> | ||
43 | + <td>上次登录:</td> | ||
44 | + <td>#date(lastTime??,'yyyy-MM-dd HH:mm:ss')</td> | ||
45 | + </tr> | ||
46 | + </tbody> | ||
47 | + </table> | ||
48 | + </div> | ||
49 | + </div> | ||
50 | + | ||
51 | +</body> | ||
52 | +</html> |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#include("_menu.html") #@header() #define res() | ||
4 | +<link href="#(contextPath)/res/jquery-3d-menu/css/jquery-accordion-menu.css?ver=#(version)" | ||
5 | + rel="stylesheet" type="text/css" /> | ||
6 | +<link href="#(contextPath)/res/jquery-3d-menu/css/font-awesome.css" rel="stylesheet" type="text/css" /> | ||
7 | +<script src="#(contextPath)/res/jquery-3d-menu/js/jquery-accordion-menu.js?ver=#(version)" | ||
8 | + type="text/javascript"></script> | ||
9 | + | ||
10 | +<link rel="stylesheet" href="#(contextPath)/css/index.css?ver=#(version)"> | ||
11 | + | ||
12 | +<style> | ||
13 | +#header { | ||
14 | + background: url('#(contextPath)/img/title-bg.png?ver=#(version)'); | ||
15 | +} | ||
16 | +</style> | ||
17 | +#end | ||
18 | + | ||
19 | +<body> | ||
20 | + <div id="header"> | ||
21 | + <table class="header-table"> | ||
22 | + <tr> | ||
23 | + <td class="logo-layout" style="text-align: center;"><img style="vertical-align: middle;" | ||
24 | + class="logo" src="#(contextPath)/img/logo-title.png?ver=#(version)" | ||
25 | + onclick="onMenuIconAction()"></td> | ||
26 | + <td class="profile-layout"><img style="vertical-align: middle;" class="portrait" | ||
27 | + src="#(contextPath)/img/login_portrait.jpg?ver=#(version)"> <label class="loginName">#(loginName)</label> | ||
28 | + <a class="btn btn-warning quit-btn" type="button" href="#(contextPath)/sysUser/logout">退出登录</a></td> | ||
29 | + </tr> | ||
30 | + </table> | ||
31 | + </div> | ||
32 | + | ||
33 | + #@menu() | ||
34 | + | ||
35 | + <div id="section"> | ||
36 | + <iframe id="contentFrame" name="contentPage" scrolling="auto" frameborder="0" | ||
37 | + onload="loadFrame(this)" src="#(contextPath)/home"></iframe> | ||
38 | + </div> | ||
39 | + | ||
40 | + <div id="tipDialog" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> | ||
41 | + <div class="modal-dialog"> | ||
42 | + <div class="modal-content"> | ||
43 | + <div class="modal-header"> | ||
44 | + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> | ||
45 | + <h4 class="modal-title" id="myModalLabel">温馨提示</h4> | ||
46 | + </div> | ||
47 | + <div class="modal-body"> | ||
48 | + <h5 id="tipView"></h5> | ||
49 | + </div> | ||
50 | + <div class="modal-footer"> | ||
51 | + <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> | ||
52 | + </div> | ||
53 | + </div> | ||
54 | + </div> | ||
55 | + </div> | ||
56 | + | ||
57 | + <div id="bigImageDialog" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> | ||
58 | + <div class="modal-dialog"> | ||
59 | + <div class="modal-content"> | ||
60 | + <div class="modal-header"> | ||
61 | + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> | ||
62 | + </div> | ||
63 | + <div class="modal-body" style="text-align: center;"> | ||
64 | + <img alt="pic" src="" id="bigImage" | ||
65 | + style="max-width: 100%; max-height: 100%; min-width: 200px; min-height: 200px;"> | ||
66 | + </div> | ||
67 | + </div> | ||
68 | + </div> | ||
69 | + </div> | ||
70 | + | ||
71 | + <script type="text/javascript" src="#(contextPath)/js/index.js?ver=#(version)"></script> | ||
72 | + <script type="text/javascript"> | ||
73 | + jQuery("#jquery-accordion-menu").jqueryAccordionMenu(); | ||
74 | + </script> | ||
75 | + | ||
76 | +</body> | ||
77 | + | ||
78 | +</html> |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() | ||
4 | +<body> | ||
5 | + <div> | ||
6 | + <ol class="breadcrumb"> | ||
7 | + <li> | ||
8 | + <a>日志管理</a> | ||
9 | + </li> | ||
10 | + <li> | ||
11 | + <a style="color: gray;">/</a> | ||
12 | + </li> | ||
13 | + <li class="active">后台日志列表</li> | ||
14 | + </ol> | ||
15 | + | ||
16 | + <div style="margin: 10px;"> | ||
17 | + <table class="table table-bordered table-advance table-hover"> | ||
18 | + <thead> | ||
19 | + <tr> | ||
20 | + <th><input id="checkboxAll" value="" type="checkbox" /></th> | ||
21 | + <th>用户账号</th> | ||
22 | + <th>用户角色</th> | ||
23 | + <th>真实姓名</th> | ||
24 | + <th>动作</th> | ||
25 | + <th>时间</th> | ||
26 | + <th>操作</th> | ||
27 | + </tr> | ||
28 | + </thead> | ||
29 | + <tbody> | ||
30 | + #for(adminLog : dataList) | ||
31 | + <tr> | ||
32 | + <td><input id="checkbox_#(adminLog.id)" value="#(adminLog.id)" type="checkbox" /></td> | ||
33 | + <td style="font-size: 12px;">#(adminLog.username??)</td> | ||
34 | + <td style="font-size: 12px;">#(adminLog.job??)</td> | ||
35 | + <td style="font-size: 12px;">#(adminLog.realName??)</td> | ||
36 | + <td style="font-size: 12px;">#if(adminLog.isLogin) 登录 #else 退出 #end</td> | ||
37 | + <td style="font-size: 12px;">#date(adminLog.createTime??,'yyyy-MM-dd HH:mm:ss')</td> | ||
38 | + <td> | ||
39 | + <button class="btn btn-primary" onclick="onOpenAction(#(adminLog.id))" | ||
40 | + style="font-size: 12px; display: none;"> | ||
41 | + <i class="icon-eye-open"></i> 详情 | ||
42 | + </button> | ||
43 | + <button class="btn btn-danger" onclick="onDeleteAction(#(adminLog.id))" | ||
44 | + style="font-size: 12px;"> | ||
45 | + <i class="icon-trash "></i> 删除 | ||
46 | + </button> | ||
47 | + </td> | ||
48 | + </tr> | ||
49 | + #end | ||
50 | + </tbody> | ||
51 | + </table> | ||
52 | + | ||
53 | + #@page(contextPath+'/sysLog/list',pageNumber,totalPage,totalRow,searchKey,'','') | ||
54 | + </div> | ||
55 | + </div> | ||
56 | + | ||
57 | + <!-- Modal --> | ||
58 | + <div id="delModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" | ||
59 | + aria-hidden="true"> | ||
60 | + <div class="modal-dialog"> | ||
61 | + <div class="modal-header"> | ||
62 | + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> | ||
63 | + <h3 id="modal-title">温馨提示</h3> | ||
64 | + </div> | ||
65 | + <div class="modal-body"> | ||
66 | + <div class="control-group"> | ||
67 | + <label class="control-label" id="deleteId" style="display: none;">-1</label> | ||
68 | + <label class="control-label" id="deleteTip">此操作将会删除所有和该日志相关的信息,是否继续删除?</label> | ||
69 | + </div> | ||
70 | + </div> | ||
71 | + <div class="modal-footer form-actions"> | ||
72 | + <button class="btn btn-danger" onclick="onDeleteFromModal()">删除</button> | ||
73 | + <button class="btn" data-dismiss="modal" aria-hidden="true">取消</button> | ||
74 | + </div> | ||
75 | + </div> | ||
76 | + </div> | ||
77 | + <!-- End Modal --> | ||
78 | + | ||
79 | + <script type="text/javascript" src="#(contextPath)/js/logAdminList.js?ver=#(version)"></script> | ||
80 | + | ||
81 | + <script type="text/javascript"> | ||
82 | + #if(flag) | ||
83 | + showTip('#(flag)'); | ||
84 | + #end | ||
85 | + </script> | ||
86 | +</body> | ||
87 | +</html> | ||
88 | + | ||
89 | + | ||
90 | + |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() | ||
4 | +<body> | ||
5 | + <div> | ||
6 | + <ol class="breadcrumb"> | ||
7 | + <li> | ||
8 | + <a>日志管理</a> | ||
9 | + </li> | ||
10 | + <li> | ||
11 | + <a style="color: gray;">/</a> | ||
12 | + </li> | ||
13 | + <li class="active">接口日志列表</li> | ||
14 | + </ol> | ||
15 | + | ||
16 | + <div style="margin-left: 10px;"> | ||
17 | + <table> | ||
18 | + <tr> | ||
19 | + <td><input id="searchInput" class="form-control" type="text" placeholder="输入关键字" | ||
20 | + value="#(searchKey)" style="margin-left: 1px; width: 300px;" /></td> | ||
21 | + <td><button class="btn btn-success" onclick="onSearchAction()" style="margin-left: 5px;">搜索</button></td> | ||
22 | + </tr> | ||
23 | + </table> | ||
24 | + </div> | ||
25 | + | ||
26 | + <div style="margin: 10px;"> | ||
27 | + <table class="table table-bordered table-advance table-hover"> | ||
28 | + <thead> | ||
29 | + <tr> | ||
30 | + <th><input id="checkboxAll" value="" type="checkbox" /></th> | ||
31 | + <th>用户ID</th> | ||
32 | + <th style="min-width: 60px;">昵称</th> | ||
33 | + <th>接口</th> | ||
34 | + <th>参数</th> | ||
35 | + <th>时间</th> | ||
36 | + <th>操作</th> | ||
37 | + </tr> | ||
38 | + </thead> | ||
39 | + <tbody> | ||
40 | + #for(log : dataList) | ||
41 | + <tr> | ||
42 | + <td><input id="checkbox_#(log.id)" value="#(log.id)" type="checkbox" /></td> | ||
43 | + <td style="font-size: 12px;">#(log.uid??)</td> | ||
44 | + <td style="font-size: 12px;">#(log.nickname??)</td> | ||
45 | + <td style="font-size: 12px;">#(log.actionKey??)</td> | ||
46 | + <td style="font-size: 12px;">#(log.params??)</td> | ||
47 | + <td style="font-size: 12px;">#date(log.createTime??,'yyyy-MM-dd HH:mm:ss')</td> | ||
48 | + <td> | ||
49 | + <button class="btn btn-primary" onclick="onDetailsAction(#(log.id))" | ||
50 | + style="font-size: 12px; display: none;"> | ||
51 | + <i class="icon-eye-open"></i> 详情 | ||
52 | + </button> | ||
53 | + <button class="btn btn-danger" onclick="onDeleteAction(#(log.id))" style="font-size: 12px;"> | ||
54 | + <i class="icon-trash "></i> 删除 | ||
55 | + </button> | ||
56 | + </td> | ||
57 | + </tr> | ||
58 | + #end | ||
59 | + </tbody> | ||
60 | + </table> | ||
61 | + | ||
62 | + #@page(contextPath+'/apiLog/list',pageNumber,totalPage,totalRow,searchKey,'','') | ||
63 | + </div> | ||
64 | + </div> | ||
65 | + | ||
66 | + <!-- Modal --> | ||
67 | + <div id="delModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" | ||
68 | + aria-hidden="true"> | ||
69 | + <div class="modal-dialog"> | ||
70 | + <div class="modal-header"> | ||
71 | + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> | ||
72 | + <h3 id="modal-title">温馨提示</h3> | ||
73 | + </div> | ||
74 | + <div class="modal-body"> | ||
75 | + <div class="control-group"> | ||
76 | + <label class="control-label" id="deleteId" style="display: none;">-1</label> | ||
77 | + <label class="control-label" id="deleteTip">此操作将会删除所有和该日志相关的信息,是否继续删除?</label> | ||
78 | + </div> | ||
79 | + </div> | ||
80 | + <div class="modal-footer form-actions"> | ||
81 | + <button class="btn btn-danger" onclick="onDeleteFromModal()">删除</button> | ||
82 | + <button class="btn" data-dismiss="modal" aria-hidden="true">取消</button> | ||
83 | + </div> | ||
84 | + </div> | ||
85 | + </div> | ||
86 | + <!-- End Modal --> | ||
87 | + | ||
88 | + <script type="text/javascript" src="#(contextPath)/js/logApiList.js?ver=#(version)"></script> | ||
89 | + | ||
90 | + <script type="text/javascript"> | ||
91 | + #if(flag) | ||
92 | + showTip('#(flag)'); | ||
93 | + #end | ||
94 | + </script> | ||
95 | +</body> | ||
96 | +</html> | ||
97 | + | ||
98 | + | ||
99 | + |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() | ||
4 | +#define res() | ||
5 | +<style> | ||
6 | +body { | ||
7 | + background: url('#(contextPath)/img/login_bg.jpg?ver=#(version)') no-repeat fixed | ||
8 | + center center; | ||
9 | + background-size: cover; | ||
10 | + font-family: Montserrat; | ||
11 | +} | ||
12 | + | ||
13 | +.logo { | ||
14 | + width: 1036px; | ||
15 | + height: 84px; | ||
16 | + background: url('#(contextPath)/img/login-logo.png?ver=#(version)') no-repeat; | ||
17 | + margin: 20px auto; | ||
18 | + margin-top: 130px; | ||
19 | + margin-bottom: 35px; | ||
20 | +} | ||
21 | + | ||
22 | +.login-block { | ||
23 | + width: 360px; | ||
24 | + padding: 20px; | ||
25 | + background: #fff; | ||
26 | + border-radius: 5px; | ||
27 | + border-top: 5px solid #a463ce; | ||
28 | + margin: 0 auto; | ||
29 | +} | ||
30 | + | ||
31 | +.login-block h1 { | ||
32 | + text-align: center; | ||
33 | + color: #000; | ||
34 | + font-size: 18px; | ||
35 | + text-transform: uppercase; | ||
36 | + margin-top: 0; | ||
37 | + margin-bottom: 20px; | ||
38 | +} | ||
39 | + | ||
40 | +.login-block input { | ||
41 | + width: 100%; | ||
42 | + height: 42px; | ||
43 | + box-sizing: border-box; | ||
44 | + border-radius: 5px; | ||
45 | + border: 1px solid #ccc; | ||
46 | + margin-bottom: 10px; | ||
47 | + font-size: 14px; | ||
48 | + font-family: Montserrat; | ||
49 | + padding: 0 20px 0 50px; | ||
50 | + outline: none; | ||
51 | +} | ||
52 | + | ||
53 | +.login-block input#username { | ||
54 | + background: #fff url('#(contextPath)/img/username.png') 20px top | ||
55 | + no-repeat; | ||
56 | + background-size: 16px 80px; | ||
57 | +} | ||
58 | + | ||
59 | +.login-block input#username:focus { | ||
60 | + background: #fff url('#(contextPath)/img/username.png') 20px bottom | ||
61 | + no-repeat; | ||
62 | + background-size: 16px 80px; | ||
63 | +} | ||
64 | + | ||
65 | +.login-block input#password { | ||
66 | + background: #fff url('#(contextPath)/img/password.png') 20px top | ||
67 | + no-repeat; | ||
68 | + background-size: 16px 80px; | ||
69 | +} | ||
70 | + | ||
71 | +.login-block input#password:focus { | ||
72 | + background: #fff url('#(contextPath)/img/password.png') 20px bottom | ||
73 | + no-repeat; | ||
74 | + background-size: 16px 80px; | ||
75 | +} | ||
76 | + | ||
77 | +.login-block input:active, .login-block input:focus { | ||
78 | + border: 1px solid #621d8e; | ||
79 | +} | ||
80 | + | ||
81 | +.login-block button { | ||
82 | + width: 100%; | ||
83 | + height: 40px; | ||
84 | + background: #621d8e; | ||
85 | + box-sizing: border-box; | ||
86 | + border-radius: 5px; | ||
87 | + border: 1px solid #a463ce; | ||
88 | + color: #fff; | ||
89 | + font-weight: bold; | ||
90 | + text-transform: uppercase; | ||
91 | + font-size: 14px; | ||
92 | + font-family: Montserrat; | ||
93 | + outline: none; | ||
94 | + cursor: pointer; | ||
95 | +} | ||
96 | + | ||
97 | +.login-block button:hover { | ||
98 | + background: #a463ce; | ||
99 | +} | ||
100 | +</style> | ||
101 | + | ||
102 | +#end | ||
103 | + | ||
104 | +<body> | ||
105 | + | ||
106 | + <div class="logo"></div> | ||
107 | + <div class="login-block"> | ||
108 | + <h1>码头管理调度系统</h1> | ||
109 | + <input type="text" value="" placeholder="用户名" id="username" /> | ||
110 | + <input type="password" value="" placeholder="密码" id="password" /> | ||
111 | + <table> | ||
112 | + <tbody> | ||
113 | + <tr> | ||
114 | + <td> | ||
115 | + <input type="text" value="" placeholder="请输入验证码" id="verifyCode" /> | ||
116 | + </td> | ||
117 | + | ||
118 | + <td> | ||
119 | + <img id="codeImage" alt="验证码" src="#(contextPath)/verifyCode" onclick="this.src='#(contextPath)/verifyCode?x='+Math.random()" style="margin-top: -10px;height: 42px;"> | ||
120 | + </td> | ||
121 | + </tr> | ||
122 | + </tbody> | ||
123 | + </table> | ||
124 | + <button type="button" onclick="onLoginAction()">登 录</button> | ||
125 | + </div> | ||
126 | + | ||
127 | + <div id="tipDialog" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> | ||
128 | + <div class="modal-dialog"> | ||
129 | + <div class="modal-content"> | ||
130 | + <div class="modal-header"> | ||
131 | + <h4 class="modal-title" id="myModalLabel">温馨提示</h4> | ||
132 | + </div> | ||
133 | + <div class="modal-body"> | ||
134 | + <h5 id="tipView"></h5> | ||
135 | + </div> | ||
136 | + <div class="modal-footer"> | ||
137 | + <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> | ||
138 | + </div> | ||
139 | + </div> | ||
140 | + </div> | ||
141 | + </div> | ||
142 | + | ||
143 | + <div id="loadModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" | ||
144 | + aria-hidden="true"></div> | ||
145 | + | ||
146 | + <script src="#(contextPath)/res/jquery/jQuery.md5.js" type="text/javascript"></script> | ||
147 | + <script src="#(contextPath)/res/common/sha256.js" type="text/javascript"></script> | ||
148 | + <script src="#(contextPath)/js/common.js?ver=#(version)" type="text/javascript"></script> | ||
149 | + <script src="#(contextPath)/js/login.js?ver=#(version)" type="text/javascript"></script> | ||
150 | +</body> | ||
151 | + | ||
152 | +</html> |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() | ||
4 | +<body> | ||
5 | + <div> | ||
6 | + <ol class="breadcrumb"> | ||
7 | + <li> | ||
8 | + <a>系统管理</a> | ||
9 | + </li> | ||
10 | + <li> | ||
11 | + <a style="color: gray;">/</a> | ||
12 | + </li> | ||
13 | + <li class="active">修改密码</li> | ||
14 | + </ol> | ||
15 | + | ||
16 | + <div style="margin: 10px;"> | ||
17 | + <form action="#(contextPath)/sysUser/modifyPasswordAction" method="post"> | ||
18 | + <table class="table table-bordered table-advance table-hover"> | ||
19 | + <tr> | ||
20 | + <td>旧密码</td> | ||
21 | + <td><input class="form-control" name="oldPassword" type="password" value="#(oldPassword)" required /></td> | ||
22 | + </tr> | ||
23 | + <tr> | ||
24 | + <td>新密码1</td> | ||
25 | + <td><input class="form-control" name="password1" type="password" value="#(password1)" required /></td> | ||
26 | + </tr> | ||
27 | + <tr> | ||
28 | + <td>新密码2</td> | ||
29 | + <td><input class="form-control" name="password2" type="password" value="#(password2)" required /></td> | ||
30 | + </tr> | ||
31 | + </table> | ||
32 | + <label style="color: red; font-size: 16px;">#(errorMsg??)</label> | ||
33 | + <div class="form-actions" style="margin-top: 10px; margin-left: 40%;"> | ||
34 | + <button class="btn btn-success" type="submit">保 存</button> | ||
35 | + <a class="btn" type="button" onclick="javascript:history.back(-1);" style="margin-left: 30px;">返 回</a> | ||
36 | + </div> | ||
37 | + </form> | ||
38 | + </div> | ||
39 | + </div> | ||
40 | + | ||
41 | + <script type="text/javascript"> | ||
42 | + #if(flag) | ||
43 | + showTip('#(flag)'); | ||
44 | + #end | ||
45 | + </script> | ||
46 | +</body> | ||
47 | +</html> | ||
48 | + | ||
49 | + | ||
50 | + |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() | ||
4 | +<body> | ||
5 | + <div> | ||
6 | + <ol class="breadcrumb"> | ||
7 | + <li> | ||
8 | + <a>码头管理</a> | ||
9 | + </li> | ||
10 | + <li> | ||
11 | + <a style="color: gray;">/</a> | ||
12 | + </li> | ||
13 | + <li class="active">进港码头</li> | ||
14 | + </ol> | ||
15 | + | ||
16 | + <div style="margin-left: 10px;"> | ||
17 | + <table> | ||
18 | + <tr> | ||
19 | + <td><span style="margin-left: 3px;">货站</span></td> | ||
20 | + <td> | ||
21 | + <select id="stationList" style="margin-left: 3px;width: 200px;"> | ||
22 | + #for(station : stationList) | ||
23 | + <option value="#(station.areaCode)" | ||
24 | + #if(stationArea??==station.areaCode) | ||
25 | + selected | ||
26 | + #end | ||
27 | + > | ||
28 | + #(station.name) | ||
29 | + </option> | ||
30 | + #end | ||
31 | + </select> | ||
32 | + </td> | ||
33 | + | ||
34 | + <td><span style="margin-left: 20px;">进港码头编号</span></td> | ||
35 | + <td> | ||
36 | + <select id="portList" style="margin-left: 3px;width: 100px;"> | ||
37 | + <option value="0">全部</option> | ||
38 | + #for(port : portList) | ||
39 | + <option value="#(port.portNo)" | ||
40 | + #if(portNo??==port.portNo) | ||
41 | + selected | ||
42 | + #end | ||
43 | + > | ||
44 | + #(port.portNo) | ||
45 | + </option> | ||
46 | + #end | ||
47 | + </select> | ||
48 | + </td> | ||
49 | + <td><input id="searchInput" class="form-control" type="text" placeholder="货代/车牌号/司机/手机号" | ||
50 | + value="#(searchKey)" style="margin-left: 20px; width: 300px;" /></td> | ||
51 | + <td><button class="btn btn-success" onclick="onSearchAction()" style="margin-left: 5px;">搜索</button></td> | ||
52 | + <td><button class="btn btn-primary" onclick="onAddAction()" style="margin-left: 30px;">码头分配</button></td> | ||
53 | + </tr> | ||
54 | + </table> | ||
55 | + </div> | ||
56 | + | ||
57 | + <div style="margin: 10px;"> | ||
58 | + <table class="table table-bordered table-advance table-hover"> | ||
59 | + <thead> | ||
60 | + <tr> | ||
61 | + <th>货站</th> | ||
62 | + <th>泊位号</th> | ||
63 | + <th>车牌号</th> | ||
64 | + <th>司机姓名</th> | ||
65 | + <th>司机手机号</th> | ||
66 | + <th>代理公司</th> | ||
67 | + <th>业务类型</th> | ||
68 | + <th>进场时间</th> | ||
69 | + <th>状态</th> | ||
70 | + </tr> | ||
71 | + </thead> | ||
72 | + <tbody> | ||
73 | + #for(data : dataList) | ||
74 | + <tr> | ||
75 | + <td>#(data.station.name??)</td> | ||
76 | + <td>#(data.portNo??"未分配")</td> | ||
77 | + <td>#(data.carNo??)</td> | ||
78 | + <td>#(data.driverName??)</td> | ||
79 | + <td>#(data.phone??)</td> | ||
80 | + <td><a href="#(contextPath)/agent/details?name=#(data.agentName)">#(data.agentName??)</a> </td> | ||
81 | + <td>#(data.isPickup?'提货':'卸货')</td> | ||
82 | + <td>#date(data.enterTime??,'yyyy-MM-dd HH:mm:ss')</td> | ||
83 | + <th><span style="color: blue;font: bold;font-size: 1.1em;">排队中</span> </th> | ||
84 | + </tr> | ||
85 | + #end | ||
86 | + </tbody> | ||
87 | + </table> | ||
88 | + | ||
89 | + <!-- #@page(contextPath+'/port/arrivalList',curPage,totalPage,totalSize,searchKey,0,'') --> | ||
90 | + </div> | ||
91 | + </div> | ||
92 | + | ||
93 | + <script type="text/javascript" src="#(contextPath)/js/portArrivalList.js"></script> | ||
94 | + | ||
95 | + <script type="text/javascript"> | ||
96 | + #if(flag) | ||
97 | + showTip('#(flag)'); | ||
98 | + #end | ||
99 | + </script> | ||
100 | +</body> | ||
101 | +</html> | ||
102 | + | ||
103 | + | ||
104 | + |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() | ||
4 | +<body> | ||
5 | + <div> | ||
6 | + <ol class="breadcrumb"> | ||
7 | + <li> | ||
8 | + <a>码头管理</a> | ||
9 | + </li> | ||
10 | + <li> | ||
11 | + <a style="color: gray;">/</a> | ||
12 | + </li> | ||
13 | + <li class="active">离港码头</li> | ||
14 | + </ol> | ||
15 | + | ||
16 | + <div style="margin-left: 10px;"> | ||
17 | + <table> | ||
18 | + <tr> | ||
19 | + <td><span style="margin-left: 3px;">货站</span></td> | ||
20 | + <td> | ||
21 | + <select id="stationList" style="margin-left: 3px;width: 200px;"> | ||
22 | + #for(station : stationList) | ||
23 | + <option value="#(station.areaCode)" | ||
24 | + #if(stationArea??==station.areaCode) | ||
25 | + selected | ||
26 | + #end | ||
27 | + > | ||
28 | + #(station.name) | ||
29 | + </option> | ||
30 | + #end | ||
31 | + </select> | ||
32 | + </td> | ||
33 | + | ||
34 | + <td><span style="margin-left: 20px;">离港码头编号</span></td> | ||
35 | + <td> | ||
36 | + <select id="portList" style="margin-left: 3px;width: 100px;"> | ||
37 | + <option value="0">全部</option> | ||
38 | + #for(port : portList) | ||
39 | + <option value="#(port.portNo)" | ||
40 | + #if(portNo??==port.portNo) | ||
41 | + selected | ||
42 | + #end | ||
43 | + > | ||
44 | + #(port.portNo) | ||
45 | + </option> | ||
46 | + #end | ||
47 | + </select> | ||
48 | + </td> | ||
49 | + <td><input id="searchInput" class="form-control" type="text" placeholder="货代/车牌号/司机/手机号" | ||
50 | + value="#(searchKey)" style="margin-left: 20px; width: 300px;" /></td> | ||
51 | + <td><button class="btn btn-success" onclick="onSearchAction()" style="margin-left: 5px;">搜索</button></td> | ||
52 | + <td><button class="btn btn-primary" onclick="onAddAction()" style="margin-left: 30px;">码头分配</button></td> | ||
53 | + </tr> | ||
54 | + </table> | ||
55 | + </div> | ||
56 | + | ||
57 | + <div style="margin: 10px;"> | ||
58 | + <table class="table table-bordered table-advance table-hover"> | ||
59 | + <thead> | ||
60 | + <tr> | ||
61 | + <th>货站</th> | ||
62 | + <th>泊位号</th> | ||
63 | + <th>车牌号</th> | ||
64 | + <th>司机姓名</th> | ||
65 | + <th>司机手机号</th> | ||
66 | + <th>代理公司</th> | ||
67 | + <th>业务类型</th> | ||
68 | + <th>进场时间</th> | ||
69 | + <th>状态</th> | ||
70 | + </tr> | ||
71 | + </thead> | ||
72 | + <tbody> | ||
73 | + #for(data : dataList) | ||
74 | + <tr> | ||
75 | + <td>#(data.station.name??)</td> | ||
76 | + <td>#(data.portNo??"未分配")</td> | ||
77 | + <td>#(data.carNo??)</td> | ||
78 | + <td>#(data.driverName??)</td> | ||
79 | + <td>#(data.phone??)</td> | ||
80 | + <td><a href="#(contextPath)/agent/details?name=#(data.agentName)">#(data.agentName??)</a> </td> | ||
81 | + <td>#(data.isPickup?'提货':'卸货')</td> | ||
82 | + <td>#date(data.enterTime??,'yyyy-MM-dd HH:mm:ss')</td> | ||
83 | + <th><span style="color: blue;font: bold;font-size: 1.1em;">排队中</span> </th> | ||
84 | + </tr> | ||
85 | + #end | ||
86 | + </tbody> | ||
87 | + </table> | ||
88 | + | ||
89 | + <!-- #@page(contextPath+'/port/arrivalList',curPage,totalPage,totalSize,searchKey,0,'') --> | ||
90 | + </div> | ||
91 | + </div> | ||
92 | + | ||
93 | + <script type="text/javascript" src="#(contextPath)/js/portLeftList.js"></script> | ||
94 | + | ||
95 | + <script type="text/javascript"> | ||
96 | + #if(flag) | ||
97 | + showTip('#(flag)'); | ||
98 | + #end | ||
99 | + </script> | ||
100 | +</body> | ||
101 | +</html> | ||
102 | + | ||
103 | + | ||
104 | + |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() | ||
4 | +<body> | ||
5 | + <div> | ||
6 | + <ol class="breadcrumb"> | ||
7 | + <li> | ||
8 | + <a>用户管理</a> | ||
9 | + </li> | ||
10 | + <li> | ||
11 | + <a style="color: gray;">/</a> | ||
12 | + </li> | ||
13 | + <li> | ||
14 | + <a href="#(contextPath)/sysUser/list">用户列表</a> | ||
15 | + </li> | ||
16 | + <li> | ||
17 | + <a style="color: gray;">/</a> | ||
18 | + </li> | ||
19 | + <li class="active">新建用户</li> | ||
20 | + </ol> | ||
21 | + | ||
22 | + <div style="margin: 10px;"> | ||
23 | + <form action="#(contextPath)/sysUser/submit" method="post"> | ||
24 | + <table class="table table-bordered table-advance table-hover"> | ||
25 | + #if(sysUser) | ||
26 | + <tr style="display: none;"> | ||
27 | + <td>用户ID</td> | ||
28 | + <td> | ||
29 | + <input class="form-control" type="text" name="sysUser.id" | ||
30 | + value="#(sysUser.id)" /> | ||
31 | + </td> | ||
32 | + </tr> | ||
33 | + #end | ||
34 | + <tr> | ||
35 | + <td>姓名</td> | ||
36 | + <td><input class="form-control" name="sysUser.realName" type="text" | ||
37 | + value="#(sysUser.realName??)" required /></td> | ||
38 | + </tr> | ||
39 | + <tr> | ||
40 | + <td>手机</td> | ||
41 | + <td><input class="form-control" name="sysUser.phone" type="text" | ||
42 | + value="#(sysUser.phone??)" min-lenght="11" /> | ||
43 | + </td> | ||
44 | + </tr> | ||
45 | + <tr> | ||
46 | + <td>账号</td> | ||
47 | + <td><input class="form-control" name="sysUser.username" type="text" | ||
48 | + value="#(sysUser.username??)" required /></td> | ||
49 | + </tr> | ||
50 | + <tr> | ||
51 | + <td>密码</td> | ||
52 | + <td><input class="form-control" name="sysUser.password" type="text" required /></td> | ||
53 | + </tr> | ||
54 | + | ||
55 | + #if(roleList) | ||
56 | + <tr> | ||
57 | + <td>角色</td> | ||
58 | + <td> | ||
59 | + <select id="roleList" style="padding-top: 5px;width: 400px;" name="sysUser.roleLevel" onchange="onChangeRole()" required> | ||
60 | + <option value="">请选择角色</option> | ||
61 | + #for(role : roleList) | ||
62 | + <option value="#(role.level)" | ||
63 | + #if(sysUser.roleLevel??==role.level) | ||
64 | + selected | ||
65 | + #end | ||
66 | + > | ||
67 | + #(role.name) | ||
68 | + </option> | ||
69 | + #end | ||
70 | + </select> | ||
71 | + </td> | ||
72 | + </tr> | ||
73 | + #end | ||
74 | + | ||
75 | + #if(agentList) | ||
76 | + <tr id="agentTr" style="display:none;width: 100%;"> | ||
77 | + <td>公司</td> | ||
78 | + <td> | ||
79 | + <select id="agentList" style="padding-top: 5px;width: 400px;" name="sysUser.agentName" required> | ||
80 | + <option value="">选择货代公司</option> | ||
81 | + <option value="无">无货代公司</option> | ||
82 | + #for(agent : agentList) | ||
83 | + <option value="#(agent.nameCN)" | ||
84 | + #if(sysUser.agentName??==agent.nameCN) | ||
85 | + selected | ||
86 | + #end | ||
87 | + > | ||
88 | + #(agent.nameCN) | ||
89 | + </option> | ||
90 | + #end | ||
91 | + </select> | ||
92 | + </td> | ||
93 | + </tr> | ||
94 | + #end | ||
95 | + | ||
96 | + #if(stationList) | ||
97 | + <tr id="stationTr" style="display:none; width: 100%;"> | ||
98 | + <td>货站</td> | ||
99 | + <td> | ||
100 | + <select id="stationList" style="padding-top: 5px;width: 400px;" name="sysUser.stationArea" required> | ||
101 | + #for(station : stationList) | ||
102 | + <option value="#(station.areaCode)" | ||
103 | + #if(sysUser.stationArea??==station.areaCode) | ||
104 | + selected | ||
105 | + #end | ||
106 | + > | ||
107 | + #(station.name) | ||
108 | + </option> | ||
109 | + #end | ||
110 | + </select> | ||
111 | + </td> | ||
112 | + </tr> | ||
113 | + #end | ||
114 | + | ||
115 | + <tr> | ||
116 | + <td>备注</td> | ||
117 | + <td><input class="form-control" name="sysUser.remark" type="text" | ||
118 | + value="#(sysUser.remark??)" /></td> | ||
119 | + </tr> | ||
120 | + </table> | ||
121 | + <label style="color: red; font-size: 16px;">#(errorMsg??)</label> | ||
122 | + <div class="form-actions" style="margin-top: 10px; margin-left: 40%;"> | ||
123 | + <button class="btn btn-success" type="submit">保 存</button> | ||
124 | + <a class="btn" type="button" href="#(contextPath)/sysUser/list" style="margin-left: 30px;">返 回</a> | ||
125 | + </div> | ||
126 | + </form> | ||
127 | + </div> | ||
128 | + </div> | ||
129 | + | ||
130 | + <script type="text/javascript" src="#(contextPath)/js/sysUser.js?ver=#(version)"></script> | ||
131 | + | ||
132 | + <script type="text/javascript"> | ||
133 | + onChangeRole(); | ||
134 | + | ||
135 | + #if(flag) | ||
136 | + showTip('#(flag)'); | ||
137 | + #end | ||
138 | + </script> | ||
139 | +</body> | ||
140 | +</html> | ||
141 | + | ||
142 | + | ||
143 | + |
1 | +<!DOCTYPE html> | ||
2 | +<html lang="zh"> | ||
3 | +#@header() | ||
4 | +<body> | ||
5 | + <div> | ||
6 | + <ol class="breadcrumb"> | ||
7 | + <li> | ||
8 | + <a>用户管理</a> | ||
9 | + </li> | ||
10 | + <li> | ||
11 | + <a style="color: gray;">/</a> | ||
12 | + </li> | ||
13 | + <li class="active">用户列表</li> | ||
14 | + </ol> | ||
15 | + | ||
16 | + <div style="margin-left: 10px;"> | ||
17 | + <table> | ||
18 | + <tr> | ||
19 | + <td><input id="searchInput" class="form-control" type="text" placeholder="账号" value="#(searchKey)" style="width: 300px;"/></td> | ||
20 | + <td><button class="btn btn-success" onclick="onSearchAction()" style="margin-left: 5px;">搜索</button></td> | ||
21 | + <td><button class="btn btn-primary" onclick="onAddAction()" style="margin-left: 30px;">新建用户</button></td> | ||
22 | + </tr> | ||
23 | + </table> | ||
24 | + </div> | ||
25 | + | ||
26 | + <div style="margin: 10px;"> | ||
27 | + <table class="table table-bordered table-advance table-hover"> | ||
28 | + <thead> | ||
29 | + <tr> | ||
30 | + <th>账号</th> | ||
31 | + <th>姓名</th> | ||
32 | + <th>手机</th> | ||
33 | + <th>角色</th> | ||
34 | + <th>公司</th> | ||
35 | + <th>创建时间</th> | ||
36 | + <th>操作</th> | ||
37 | + </tr> | ||
38 | + </thead> | ||
39 | + <tbody> | ||
40 | + #for(sysUser : dataList) | ||
41 | + <tr> | ||
42 | + <td>#(sysUser.username??)</td> | ||
43 | + <td>#(sysUser.realName??)</td> | ||
44 | + <td>#(sysUser.phone??)</td> | ||
45 | + <td>#(sysUser.job??)</td> | ||
46 | + <td>#(sysUser.agentName??)</td> | ||
47 | + <td>#date(sysUser.createTime??,'yyyy-MM-dd HH:mm:ss')</td> | ||
48 | + <td> | ||
49 | + <button class="btn btn-primary" onclick="onModifyAction(#(sysUser.id))"> | ||
50 | + <i class="icon-pencil"></i> 编辑 | ||
51 | + </button> | ||
52 | + <button class="btn btn-danger" onclick="onDeleteAction(#(sysUser.id))"> | ||
53 | + <i class="icon-trash "></i> 删除 | ||
54 | + </button> | ||
55 | + </td> | ||
56 | + </tr> | ||
57 | + #end | ||
58 | + </tbody> | ||
59 | + </table> | ||
60 | + | ||
61 | + #@page(contextPath+'/sysUser/list',curPage,totalPage,totalSize,searchKey,'','') | ||
62 | + </div> | ||
63 | + </div> | ||
64 | + | ||
65 | + <!-- Modal --> | ||
66 | + <div id="delModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" | ||
67 | + aria-hidden="true"> | ||
68 | + <div class="modal-dialog"> | ||
69 | + <div class="modal-header"> | ||
70 | + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> | ||
71 | + <h3 id="modal-title">温馨提示</h3> | ||
72 | + </div> | ||
73 | + <div class="modal-body"> | ||
74 | + <div class="control-group"> | ||
75 | + <label class="control-label" id="deleteId" style="display: none;">-1</label> | ||
76 | + <label class="control-label" id="deleteTip">此操作将会删除所有和该用户相关的信息,是否继续删除?</label> | ||
77 | + </div> | ||
78 | + </div> | ||
79 | + <div class="modal-footer form-actions"> | ||
80 | + <button class="btn btn-danger" onclick="onDeleteFromModal()">删除</button> | ||
81 | + <button class="btn" data-dismiss="modal" aria-hidden="true">取消</button> | ||
82 | + </div> | ||
83 | + </div> | ||
84 | + </div> | ||
85 | + <!-- End Modal --> | ||
86 | + | ||
87 | + <script type="text/javascript" src="#(contextPath)/js/sysUser.js?ver=#(version)"></script> | ||
88 | + | ||
89 | + <script type="text/javascript"> | ||
90 | + #if(flag) | ||
91 | + showTip('#(flag)'); | ||
92 | + #end | ||
93 | + </script> | ||
94 | +</body> | ||
95 | +</html> | ||
96 | + | ||
97 | + | ||
98 | + |
1 | +<!DOCTYPE html> | ||
2 | +<!--[if IE 8]> <html lang="en" class="ie8"> <![endif]--> | ||
3 | +<!--[if IE 9]> <html lang="en" class="ie9"> <![endif]--> | ||
4 | +<!--[if !IE]><!--> | ||
5 | +<html lang="zh"> | ||
6 | + | ||
7 | +<head> | ||
8 | +<#include "resHeader.ftl"/> | ||
9 | +<@resHeader/> | ||
10 | +</head> | ||
11 | + | ||
12 | +<body> | ||
13 | + <!-- BEGIN PAGE --> | ||
14 | + <div id="main-content"> | ||
15 | + <!-- BEGIN PAGE CONTAINER--> | ||
16 | + <div class="container-fluid"> | ||
17 | + <!-- BEGIN PAGE HEADER--> | ||
18 | + <div class="row-fluid"> | ||
19 | + <div class="span12"> | ||
20 | + <!-- BEGIN PAGE TITLE & BREADCRUMB--> | ||
21 | + <h3 class="page-title">系统设置</h3> | ||
22 | + <ul class="breadcrumb"> | ||
23 | + <li> | ||
24 | + <a href="#">首页</a> | ||
25 | + <span class="divider">/</span> | ||
26 | + </li> | ||
27 | + | ||
28 | + <li class="active">系统设置</li> | ||
29 | + </ul> | ||
30 | + <!-- END PAGE TITLE & BREADCRUMB--> | ||
31 | + </div> | ||
32 | + </div> | ||
33 | + <!-- END PAGE HEADER--> | ||
34 | + | ||
35 | + <!-- END PAGE CONTENT--> | ||
36 | + </div> | ||
37 | + <!-- END PAGE CONTAINER--> | ||
38 | + </div> | ||
39 | + <!-- END PAGE --> | ||
40 | + | ||
41 | +</body> | ||
42 | +</html> |
air-admin/src/main/webapp/WEB-INF/web.xml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
3 | + xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee" | ||
4 | + xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" | ||
5 | + id="WebApp_ID" version="2.5"> | ||
6 | + <filter> | ||
7 | + <filter-name>jfinal</filter-name> | ||
8 | + <filter-class>com.jfinal.core.JFinalFilter</filter-class> | ||
9 | + <init-param> | ||
10 | + <param-name>configClass</param-name> | ||
11 | + <param-value>com.air.config.AirAdminConfig</param-value> | ||
12 | + </init-param> | ||
13 | + </filter> | ||
14 | + | ||
15 | + <filter-mapping> | ||
16 | + <filter-name>jfinal</filter-name> | ||
17 | + <url-pattern>/*</url-pattern> | ||
18 | + </filter-mapping> | ||
19 | + | ||
20 | + <session-config> | ||
21 | + <session-timeout>30</session-timeout> | ||
22 | + </session-config> | ||
23 | + | ||
24 | +</web-app> |
-
请 注册 或 登录 后发表评论