Parcourir la source

四平短信接口定时任务

tchao il y a 3 ans
Parent
commit
c516321c2f
100 fichiers modifiés avec 13916 ajouts et 0 suppressions
  1. 81 0
      .classpath
  2. 8 0
      .idea/.gitignore
  3. 4 0
      .idea/encodings.xml
  4. 6 0
      .idea/misc.xml
  5. 8 0
      .idea/modules.xml
  6. 10 0
      .idea/runConfigurations.xml
  7. 0 0
      .metadata/.lock
  8. 71 0
      .metadata/.log
  9. 1 0
      .metadata/version.ini
  10. 13 0
      .mymetadata
  11. 58 0
      .project
  12. 12 0
      .settings/.jsdtscope
  13. 14 0
      .settings/org.eclipse.core.resources.prefs
  14. 7 0
      .settings/org.eclipse.jdt.core.prefs
  15. 9 0
      .settings/org.eclipse.wst.common.component
  16. 7 0
      .settings/org.eclipse.wst.common.project.facet.core.xml
  17. 1 0
      .settings/org.eclipse.wst.jsdt.ui.superType.container
  18. 1 0
      .settings/org.eclipse.wst.jsdt.ui.superType.name
  19. 740 0
      Smsjk.iml
  20. 0 0
      output.log
  21. 19 0
      src/ApplicationResources.properties
  22. 19 0
      src/ApplicationResources_src.properties
  23. 6 0
      src/com/acc/framework/excel/exception/ExpException.java
  24. 6 0
      src/com/acc/framework/excel/exception/MapIsNullException.java
  25. 8 0
      src/com/acc/framework/excel/exception/ResultIsNullException.java
  26. 444 0
      src/com/acc/framework/excel/util/ExpExcelUtil.java
  27. 546 0
      src/com/acc/framework/excel/util/ImpExcelUtil.java
  28. 178 0
      src/com/acc/framework/excel/util/Student.java
  29. 155 0
      src/com/acc/framework/excel/util/TestExcel.java
  30. 149 0
      src/com/acc/framework/menubar/action/MenubarAction.java
  31. 112 0
      src/com/acc/framework/menubar/dao/MenuSysLimitDAO.java
  32. 53 0
      src/com/acc/framework/menubar/service/MenubarService.java
  33. 72 0
      src/com/acc/framework/menubar/service/impl/MenubarServiceImpl.java
  34. 315 0
      src/com/acc/framework/session/UserInfo.java
  35. 37 0
      src/com/acc/framework/session/dao/OnlineSessionDAO.java
  36. 58 0
      src/com/acc/framework/session/sql/OnlineSQL.java
  37. 2 0
      src/commons-logging.properties
  38. 37 0
      src/log4j.properties
  39. 2 0
      src/run.bat
  40. 58 0
      src/struts.xml
  41. 44 0
      web/404page.jsp
  42. 33 0
      web/500page.jsp
  43. BIN
      web/WEB-INF/lm/org.springframework.aop-3.1.0.RELEASE.jar
  44. BIN
      web/WEB-INF/lm/org.springframework.asm-3.1.0.RELEASE.jar
  45. BIN
      web/WEB-INF/lm/org.springframework.aspects-3.1.0.RELEASE.jar
  46. BIN
      web/WEB-INF/lm/org.springframework.beans-3.1.0.RELEASE.jar
  47. BIN
      web/WEB-INF/lm/org.springframework.context-3.1.0.RELEASE.jar
  48. BIN
      web/WEB-INF/lm/org.springframework.context.support-3.1.0.RELEASE.jar
  49. BIN
      web/WEB-INF/lm/org.springframework.core-3.1.0.RELEASE.jar
  50. BIN
      web/WEB-INF/lm/org.springframework.expression-3.1.0.RELEASE.jar
  51. BIN
      web/WEB-INF/lm/org.springframework.instrument-3.1.0.RELEASE.jar
  52. BIN
      web/WEB-INF/lm/org.springframework.instrument.tomcat-3.1.0.RELEASE.jar
  53. BIN
      web/WEB-INF/lm/org.springframework.jdbc-3.1.0.RELEASE.jar
  54. BIN
      web/WEB-INF/lm/org.springframework.jms-3.1.0.RELEASE.jar
  55. BIN
      web/WEB-INF/lm/org.springframework.orm-3.1.0.RELEASE.jar
  56. BIN
      web/WEB-INF/lm/org.springframework.oxm-3.1.0.RELEASE.jar
  57. BIN
      web/WEB-INF/lm/org.springframework.web-3.1.0.RELEASE.jar
  58. BIN
      web/WEB-INF/lm/org.springframework.web.portlet-3.1.0.RELEASE.jar
  59. BIN
      web/WEB-INF/lm/org.springframework.web.servlet-3.1.0.RELEASE.jar
  60. BIN
      web/WEB-INF/lm/org.springframework.web.struts-3.1.0.RELEASE.jar
  61. 55 0
      web/admin_top.jsp
  62. 311 0
      web/admintitle.jsp
  63. BIN
      web/dsrw.war
  64. 0 0
      web/errorPage.jsp
  65. 15 0
      web/index.jsp
  66. BIN
      web/js/date/skin/whyGreen/Thumbs.db.keep
  67. BIN
      web/js/date/skin/whyGreen/bg.jpg
  68. BIN
      web/js/date/skin/whyGreen/bg.jpg.keep
  69. 249 0
      web/js/date/skin/whyGreen/datepicker.css
  70. 249 0
      web/js/date/skin/whyGreen/datepicker.css.keep
  71. BIN
      web/js/date/skin/whyGreen/down.jpg
  72. BIN
      web/js/date/skin/whyGreen/down.jpg.keep
  73. BIN
      web/js/date/skin/whyGreen/left.gif
  74. BIN
      web/js/date/skin/whyGreen/left.gif.keep
  75. BIN
      web/js/date/skin/whyGreen/navLeft.gif
  76. BIN
      web/js/date/skin/whyGreen/navLeft.gif.keep
  77. BIN
      web/js/date/skin/whyGreen/navRight.gif
  78. BIN
      web/js/date/skin/whyGreen/navRight.gif.keep
  79. BIN
      web/js/date/skin/whyGreen/qs.jpg
  80. BIN
      web/js/date/skin/whyGreen/qs.jpg.keep
  81. BIN
      web/js/date/skin/whyGreen/right.gif
  82. BIN
      web/js/date/skin/whyGreen/right.gif.keep
  83. BIN
      web/js/date/skin/whyGreen/up.jpg
  84. BIN
      web/js/date/skin/whyGreen/up.jpg.keep
  85. 205 0
      web/js/vendors/AIzaSyAurmSUEQDwY86-wOG3kCp855tCI8lHL-I.js
  86. 340 0
      web/js/vendors/amaze.js
  87. 869 0
      web/js/vendors/bootstrap-checkbox-radio-switch-tags.js
  88. 2596 0
      web/js/vendors/bootstrap-datetimepicker.js
  89. 404 0
      web/js/vendors/bootstrap-notify.js
  90. 7 0
      web/js/vendors/bootstrap.min.js
  91. 9 0
      web/js/vendors/chartist.min.js
  92. 401 0
      web/js/vendors/charts/chartjs-charts.js
  93. 14 0
      web/js/vendors/charts/chartjs/Chart.min.js
  94. 363 0
      web/js/vendors/charts/flot-charts.js
  95. 190 0
      web/js/vendors/charts/flot/jquery.flot.categories.js
  96. 3168 0
      web/js/vendors/charts/flot/jquery.flot.js
  97. 820 0
      web/js/vendors/charts/flot/jquery.flot.pie.js
  98. 59 0
      web/js/vendors/charts/flot/jquery.flot.resize.js
  99. 188 0
      web/js/vendors/charts/flot/jquery.flot.stack.js
  100. 0 0
      web/js/vendors/demo.js

+ 81 - 0
.classpath

@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.j2eedt.core.MYECLIPSE_JAVAEE_5_CONTAINER"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.aop-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.asm-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.aspects-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.beans-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.context-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.context.support-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.core-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.expression-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.instrument-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.instrument.tomcat-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.jdbc-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.jms-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.orm-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.oxm-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.spring-library-3.1.0.RELEASE.libd"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.test-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.transaction-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.web-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.web.portlet-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.web.servlet-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lm/org.springframework.web.struts-3.1.0.RELEASE.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/ant.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/aopalliance-1.0.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/aspectjrt.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/aspectjweaver.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/c3p0-0.9.1.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/cglib-nodep-2.2.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/com.springsource.org.apache.commons.logging-1.1.1.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/commons-beanutils.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/commons-cli-1.0.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/commons-codec-1.2.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/commons-collections.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/commons-dbcp-1.2.1.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/commons-digester.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/commons-discovery-0.2.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/commons-email.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/commons-fileupload-1.2.1.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/commons-httpclient-2.0.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/commons-io-1.4.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/commons-lang-2.1.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/commons-logging.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/commons-net-1.3.0.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/commons-pool-1.2.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/commons-validator.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/dom4j-1.6.1.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/ezmorph-1.0.5.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/freemarker-2.3.16.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/jakarta-oro.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/javassist-3.7.ga.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/jdom.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/json-lib-2.1-jdk15.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/json-lib-2.2.3-jdk15.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/jstl.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/log4j-1.2.14.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/mysql-connector-java-5.1.5-bin.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/ognl-3.0.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/ojdbc14.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/poi-3.7-20101029.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/poi-examples-3.7-20101029.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/poi-ooxml-3.7-20101029.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/poi-ooxml-schemas-3.7-20101029.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/poi-scratchpad-3.7-20101029.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/quartz-1.8.4.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/slf4j-api-1.6.1.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/slf4j-log4j12-1.6.1.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/standard.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/struts.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/struts2-core-2.2.1.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/struts2-spring-plugin-2.2.1.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/xwork-core-2.2.1.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/httpclient-4.1.2.jar"/>
+	<classpathentry kind="lib" path="web/WEB-INF/lib/httpcore-4.1.2.jar"/>
+	<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
+	<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.8.0_131"/>
+	<classpathentry kind="output" path="web/WEB-INF/classes"/>
+</classpath>

+ 8 - 0
.idea/.gitignore

@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/

+ 4 - 0
.idea/encodings.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" addBOMForNewFiles="with NO BOM" />
+</project>

+ 6 - 0
.idea/misc.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/classes" />
+  </component>
+</project>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/Smsjk.iml" filepath="$PROJECT_DIR$/Smsjk.iml" />
+    </modules>
+  </component>
+</project>

+ 10 - 0
.idea/runConfigurations.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RunConfigurationProducerService">
+    <option name="ignoredProducers">
+      <set>
+        <option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
+      </set>
+    </option>
+  </component>
+</project>

+ 0 - 0
.metadata/.lock


+ 71 - 0
.metadata/.log

@@ -0,0 +1,71 @@
+!SESSION 2014-10-27 10:08:50.369 -----------------------------------------------
+eclipse.buildId=unknown
+java.version=1.6.0_13
+java.vendor=Sun Microsystems Inc.
+BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=zh_CN
+Command-line arguments:  -os win32 -ws win32 -arch x86
+
+!ENTRY org.eclipse.jface 2 0 2014-10-27 10:09:30.634
+!MESSAGE Keybinding conflicts occurred.  They may interfere with normal accelerator operation.
+!SUBENTRY 1 org.eclipse.jface 2 0 2014-10-27 10:09:30.634
+!MESSAGE A conflict occurred for SHIFT+DEL:
+Binding(SHIFT+DEL,
+	ParameterizedCommand(Command(org.eclipse.datatools.sqltools.result.removeAllInstances,Remove All Visible Results,
+		,
+		Category(org.eclipse.datatools.sqltools.result.category,SQL Results View,null,true),
+		,
+		,,true),null),
+	org.eclipse.ui.defaultAcceleratorConfiguration,
+	org.eclipse.ui.contexts.window,,,system)
+Binding(SHIFT+DEL,
+	ParameterizedCommand(Command(org.eclipse.ui.edit.cut,Cut,
+		Cut the selection to the clipboard,
+		Category(org.eclipse.ui.category.edit,Edit,null,true),
+		org.eclipse.ui.internal.handlers.WidgetMethodHandler@1be6a65,
+		,,true),null),
+	org.eclipse.ui.defaultAcceleratorConfiguration,
+	org.eclipse.ui.contexts.dialogAndWindow,,,system)
+Binding(SHIFT+DEL,
+	ParameterizedCommand(Command(org.topcased.modeler.deleteModelObject,Delete From Model,
+		Allows the user to delete the selected graph element and its associated model element in a Topcased editor.,
+		Category(org.eclipse.ui.category.edit,Edit,null,true),
+		,
+		,,true),null),
+	org.eclipse.ui.defaultAcceleratorConfiguration,
+	org.eclipse.ui.contexts.window,,,system)
+
+!ENTRY com.genuitec.eclipse.core 1 0 2014-10-27 10:09:37.439
+!MESSAGE Unable to locate .myeclipse.properties file
+
+!ENTRY com.genuitec.eclipse.wizards 1 0 2014-10-27 10:09:37.689
+!MESSAGE Installed snippet library: D:\Myeclipse\Myeclipse\configuration\org.eclipse.osgi\bundles\119\1\.cp\snippets\html\css_snippets.xml
+
+!ENTRY com.genuitec.eclipse.wizards 1 0 2014-10-27 10:09:37.741
+!MESSAGE Installed snippet library: D:\Myeclipse\Myeclipse\configuration\org.eclipse.osgi\bundles\119\1\.cp\snippets\html\forms_lists_snippets.xml
+
+!ENTRY com.genuitec.eclipse.wizards 1 0 2014-10-27 10:09:37.766
+!MESSAGE Installed snippet library: D:\Myeclipse\Myeclipse\configuration\org.eclipse.osgi\bundles\119\1\.cp\snippets\html\htmlform_snippets.xml
+
+!ENTRY com.genuitec.eclipse.wizards 1 0 2014-10-27 10:09:37.796
+!MESSAGE Installed snippet library: D:\Myeclipse\Myeclipse\configuration\org.eclipse.osgi\bundles\119\1\.cp\snippets\html\html_snippets.xml
+
+!ENTRY com.genuitec.eclipse.wizards 1 0 2014-10-27 10:09:37.826
+!MESSAGE Installed snippet library: D:\Myeclipse\Myeclipse\configuration\org.eclipse.osgi\bundles\119\1\.cp\snippets\html\javascript_snippets.xml
+
+!ENTRY com.genuitec.eclipse.wizards 1 0 2014-10-27 10:09:37.870
+!MESSAGE Installed snippet library: D:\Myeclipse\Myeclipse\configuration\org.eclipse.osgi\bundles\119\1\.cp\snippets\jsp\jsf_f_snippets.xml
+
+!ENTRY com.genuitec.eclipse.wizards 1 0 2014-10-27 10:09:37.903
+!MESSAGE Installed snippet library: D:\Myeclipse\Myeclipse\configuration\org.eclipse.osgi\bundles\119\1\.cp\snippets\jsp\jsf_h_snippets.xml
+
+!ENTRY com.genuitec.eclipse.wizards 1 0 2014-10-27 10:09:37.933
+!MESSAGE Installed snippet library: D:\Myeclipse\Myeclipse\configuration\org.eclipse.osgi\bundles\119\1\.cp\snippets\jsp\struts_bean_snippets.xml
+
+!ENTRY com.genuitec.eclipse.wizards 1 0 2014-10-27 10:09:37.969
+!MESSAGE Installed snippet library: D:\Myeclipse\Myeclipse\configuration\org.eclipse.osgi\bundles\119\1\.cp\snippets\jsp\struts_html_snippets.xml
+
+!ENTRY com.genuitec.eclipse.wizards 1 0 2014-10-27 10:09:38.007
+!MESSAGE Installed snippet library: D:\Myeclipse\Myeclipse\configuration\org.eclipse.osgi\bundles\119\1\.cp\snippets\jsp\struts_logic_snippets.xml
+
+!ENTRY com.genuitec.eclipse.wizards 1 0 2014-10-27 10:09:38.049
+!MESSAGE Installed snippet library: D:\Myeclipse\Myeclipse\configuration\org.eclipse.osgi\bundles\119\1\.cp\snippets\jsp\struts_tiles_snippets.xml

+ 1 - 0
.metadata/version.ini

@@ -0,0 +1 @@
+org.eclipse.core.runtime=1

+ 13 - 0
.mymetadata

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-module
+  type="WEB"
+  name="fayun"
+  id="myeclipse.1333178401594"
+  context-root="/SpringFrame"
+  j2ee-spec="5.0"
+  archive="fayun.war">
+  <attributes>
+    <attribute name="webrootdir" value="web" />
+  </attributes>
+</project-module>
+

+ 58 - 0
.project

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>fayun</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.wst.common.project.facet.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.genuitec.eclipse.j2eedt.core.WebClasspathBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.genuitec.eclipse.j2eedt.core.J2EEProjectValidator</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.genuitec.eclipse.j2eedt.core.DeploymentDescriptorValidator</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.validation.validationbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.genuitec.eclipse.ast.deploy.core.DeploymentBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+		<nature>com.genuitec.eclipse.ast.deploy.core.deploymentnature</nature>
+		<nature>com.genuitec.eclipse.j2eedt.core.webnature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+	</natures>
+</projectDescription>

+ 12 - 0
.settings/.jsdtscope

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
+		<attributes>
+			<attribute name="hide" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
+	<classpathentry kind="src" path="web"/>
+	<classpathentry kind="output" path=""/>
+</classpath>

+ 14 - 0
.settings/org.eclipse.core.resources.prefs

@@ -0,0 +1,14 @@
+#Tue Mar 26 10:54:46 CST 2019
+eclipse.preferences.version=1
+encoding//src/ApplicationResources_src.properties=gbk
+encoding//src/com/acc/framework/excel/util/ExpExcelUtil.java=UTF-8
+encoding//src/com/acc/framework/excel/util/TestExcel.java=UTF-8
+encoding//src/com/acc/framework/resources/SystemResources_src.properties=UTF-8
+encoding//src/com/acc/util/common/CnToSpell.java=UTF-8
+encoding//src/com/acc/util/common/IPUtil.java=gbk
+encoding//web/WEB-INF/lib=UTF-8
+encoding//web/WEB-INF/lib/org.springframework.jdbc-3.1.1.RELEASE.jar=GBK
+encoding//web/left.jsp=UTF-8
+encoding//web/systemmanager/tht/login/right.jsp=UTF-8
+encoding//web/systemmanager/tht/login/title.jsp=UTF-8
+encoding/<project>=UTF-8

+ 7 - 0
.settings/org.eclipse.jdt.core.prefs

@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5

+ 9 - 0
.settings/org.eclipse.wst.common.component

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-modules id="moduleCoreId" project-version="1.5.0">
+    <wb-module deploy-name="fayun">
+        <wb-resource deploy-path="/" source-path="/web"/>
+        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
+        <property name="context-root" value="/SpringFrame"/>
+        <property name="java-output-path" value="/fayun/web/WEB-INF/classes"/>
+    </wb-module>
+</project-modules>

+ 7 - 0
.settings/org.eclipse.wst.common.project.facet.core.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+  <fixed facet="wst.jsdt.web"/>
+  <installed facet="java" version="1.5"/>
+  <installed facet="jst.web" version="2.5"/>
+  <installed facet="wst.jsdt.web" version="1.0"/>
+</faceted-project>

+ 1 - 0
.settings/org.eclipse.wst.jsdt.ui.superType.container

@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary

+ 1 - 0
.settings/org.eclipse.wst.jsdt.ui.superType.name

@@ -0,0 +1 @@
+Window

+ 740 - 0
Smsjk.iml

@@ -0,0 +1,740 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="EclipseModuleManager">
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.aop-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.asm-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.aspects-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.beans-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.context-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.context.support-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.core-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.expression-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.instrument-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.instrument.tomcat-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.jdbc-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.jms-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.orm-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.oxm-3.1.0.RELEASE.jar!/" />
+    <libelement value="file://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.spring-library-3.1.0.RELEASE.libd" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.test-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.transaction-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.web-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.web.portlet-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.web.servlet-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.web.struts-3.1.0.RELEASE.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/ant.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/aopalliance-1.0.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/aspectjrt.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/aspectjweaver.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/c3p0-0.9.1.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/cglib-nodep-2.2.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/com.springsource.org.apache.commons.logging-1.1.1.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-beanutils.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-cli-1.0.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-codec-1.2.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-collections.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-dbcp-1.2.1.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-digester.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-discovery-0.2.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-email.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-fileupload-1.2.1.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-httpclient-2.0.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-io-1.4.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-lang-2.1.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-logging.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-net-1.3.0.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-pool-1.2.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-validator.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/dom4j-1.6.1.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/ezmorph-1.0.5.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/freemarker-2.3.16.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/jakarta-oro.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/javassist-3.7.ga.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/jdom.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/json-lib-2.1-jdk15.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/json-lib-2.2.3-jdk15.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/jstl.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/log4j-1.2.14.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/mysql-connector-java-5.1.5-bin.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/ognl-3.0.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/ojdbc14.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/poi-3.7-20101029.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/poi-examples-3.7-20101029.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/poi-ooxml-3.7-20101029.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/poi-ooxml-schemas-3.7-20101029.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/poi-scratchpad-3.7-20101029.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/quartz-1.8.4.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/slf4j-api-1.6.1.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/slf4j-log4j12-1.6.1.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/standard.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/struts.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/struts2-core-2.2.1.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/struts2-spring-plugin-2.2.1.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/xwork-core-2.2.1.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/httpclient-4.1.2.jar!/" />
+    <libelement value="jar://$MODULE_DIR$/web/WEB-INF/lib/httpcore-4.1.2.jar!/" />
+    <conelement value="melibrary.com.genuitec.eclipse.j2eedt.core.MYECLIPSE_JAVAEE_5_CONTAINER" />
+    <src_description expected_position="0">
+      <src_folder value="file://$MODULE_DIR$/src" expected_position="0" />
+    </src_description>
+  </component>
+  <component name="NewModuleRootManager">
+    <output url="file://$MODULE_DIR$/web/WEB-INF/classes" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="melibrary.com.genuitec.eclipse.j2eedt.core.MYECLIPSE_JAVAEE_5_CONTAINER" level="application" />
+    <orderEntry type="module-library">
+      <library name="org.springframework.aop-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.aop-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.asm-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.asm-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.aspects-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.aspects-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.beans-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.beans-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.context-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.context-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.context.support-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.context.support-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.core-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.core-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.expression-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.expression-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.instrument-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.instrument-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.instrument.tomcat-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.instrument.tomcat-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.jdbc-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.jdbc-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.jms-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.jms-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.orm-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.orm-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.oxm-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.oxm-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.spring-library-3.1.0.RELEASE.libd">
+        <CLASSES>
+          <root url="file://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.spring-library-3.1.0.RELEASE.libd" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.test-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.test-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.transaction-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.transaction-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.web-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.web-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.web.portlet-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.web.portlet-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.web.servlet-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.web.servlet-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="org.springframework.web.struts-3.1.0.RELEASE.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lm/org.springframework.web.struts-3.1.0.RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="ant.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/ant.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="aopalliance-1.0.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/aopalliance-1.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="aspectjrt.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/aspectjrt.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="aspectjweaver.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/aspectjweaver.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="c3p0-0.9.1.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/c3p0-0.9.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="cglib-nodep-2.2.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/cglib-nodep-2.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="com.springsource.org.apache.commons.logging-1.1.1.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/com.springsource.org.apache.commons.logging-1.1.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="commons-beanutils.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-beanutils.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="commons-cli-1.0.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-cli-1.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="commons-codec-1.2.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-codec-1.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="commons-collections.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-collections.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="commons-dbcp-1.2.1.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-dbcp-1.2.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="commons-digester.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-digester.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="commons-discovery-0.2.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-discovery-0.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="commons-email.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-email.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="commons-fileupload-1.2.1.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-fileupload-1.2.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="commons-httpclient-2.0.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-httpclient-2.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="commons-io-1.4.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-io-1.4.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="commons-lang-2.1.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-lang-2.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="commons-logging.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-logging.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="commons-net-1.3.0.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-net-1.3.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="commons-pool-1.2.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-pool-1.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="commons-validator.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/commons-validator.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="dom4j-1.6.1.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/dom4j-1.6.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="ezmorph-1.0.5.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/ezmorph-1.0.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="freemarker-2.3.16.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/freemarker-2.3.16.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="jakarta-oro.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/jakarta-oro.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="javassist-3.7.ga.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/javassist-3.7.ga.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="jdom.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/jdom.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="json-lib-2.1-jdk15.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/json-lib-2.1-jdk15.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="json-lib-2.2.3-jdk15.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/json-lib-2.2.3-jdk15.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="jstl.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/jstl.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="log4j-1.2.14.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/log4j-1.2.14.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="mysql-connector-java-5.1.5-bin.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/mysql-connector-java-5.1.5-bin.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="ognl-3.0.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/ognl-3.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="ojdbc14.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/ojdbc14.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="poi-3.7-20101029.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/poi-3.7-20101029.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="poi-examples-3.7-20101029.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/poi-examples-3.7-20101029.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="poi-ooxml-3.7-20101029.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/poi-ooxml-3.7-20101029.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="poi-ooxml-schemas-3.7-20101029.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/poi-ooxml-schemas-3.7-20101029.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="poi-scratchpad-3.7-20101029.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/poi-scratchpad-3.7-20101029.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="quartz-1.8.4.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/quartz-1.8.4.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="slf4j-api-1.6.1.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/slf4j-api-1.6.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="slf4j-log4j12-1.6.1.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/slf4j-log4j12-1.6.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="standard.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/standard.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="struts.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/struts.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="struts2-core-2.2.1.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/struts2-core-2.2.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="struts2-spring-plugin-2.2.1.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/struts2-spring-plugin-2.2.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="xwork-core-2.2.1.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/xwork-core-2.2.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="jdk" jdkName="jdk1.6.0_32" jdkType="JavaSDK" />
+    <orderEntry type="module-library">
+      <library name="httpclient-4.1.2.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/httpclient-4.1.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="httpcore-4.1.2.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/web/WEB-INF/lib/httpcore-4.1.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="library" name="ant" level="project" />
+  </component>
+</module>

+ 0 - 0
output.log


+ 19 - 0
src/ApplicationResources.properties

@@ -0,0 +1,19 @@
+system.project.name=\u951f\u65a4\u62f7\u53f0\u951f\u65a4\u62f7\u951f\u65a4\u62f7\u7cfb\u7edf
+system.format.shortdate=yyyy-MM-dd
+system.format.longdate=yyyy-MM-dd HH:mm:ss
+system.update.success={0}\u66f4\u6539\u6210\u529f!
+system.update.failed={0}\u66f4\u6539\u5931\u8d25!
+system.delete.manubar.failed=\u83dc\u5355\u6709\u5b50\u8282\u70b9,\u8bf7\u5148\u5220\u9664\u5b50\u8282\u70b9!
+system.delete.manubar.success=\u83dc\u5355\u5220\u9664\u6210\u529f!
+system.add.manubar.failed=\u83dc\u5355\u6dfb\u52a0\u5931\u8d25!
+system.add.manubar.success=\u83dc\u5355\u6dfb\u52a0\u6210\u529f!
+
+system.user.delete.success=\u5220\u9664\u6210\u529f!
+system.user.resetpassword.success=\u521d\u59cb\u5316\u5bc6\u7801\u6210\u529f!
+system.user.resetpassword.failed=\u521d\u59cb\u5316\u5bc6\u7801\u5931\u8d25!
+
+common.select.items = \u8bf7\u81f3\u5c11\u5217\u8868\u4e2d\u9009\u62e9\u4e00\u9879\u8fdb\u884c\u8be5\u64cd\u4f5c
+common.confirm = \u8bf7\u60a8\u786e\u8ba4\u662f\u5426\u8fdb\u884c\u8be5\u64cd\u4f5c
+
+system.dao.dualNum.default=50
+

+ 19 - 0
src/ApplicationResources_src.properties

@@ -0,0 +1,19 @@
+system.project.name=后台管理系统
+system.format.shortdate=yyyy-MM-dd
+system.format.longdate=yyyy-MM-dd HH:mm:ss
+system.update.success={0}更改成功!
+system.update.failed={0}更改失败!
+system.delete.manubar.failed=菜单有子节点,请先删除子节点!
+system.delete.manubar.success=菜单删除成功!
+system.add.manubar.failed=菜单添加失败!
+system.add.manubar.success=菜单添加成功!
+
+system.user.delete.success=删除成功!
+system.user.resetpassword.success=初始化密码成功!
+system.user.resetpassword.failed=初始化密码失败!
+
+common.select.items=请至少列表中选择一项进行该操作
+common.confirm = 请您确认是否进行该操作
+
+system.dao.dualNum.default=50
+

+ 6 - 0
src/com/acc/framework/excel/exception/ExpException.java

@@ -0,0 +1,6 @@
+package com.acc.framework.excel.exception;
+
+public class ExpException extends Exception
+{
+
+}

+ 6 - 0
src/com/acc/framework/excel/exception/MapIsNullException.java

@@ -0,0 +1,6 @@
+package com.acc.framework.excel.exception;
+
+public class MapIsNullException extends ExpException
+{
+
+}

+ 8 - 0
src/com/acc/framework/excel/exception/ResultIsNullException.java

@@ -0,0 +1,8 @@
+package com.acc.framework.excel.exception;
+
+public class ResultIsNullException extends ExpException
+{
+
+
+
+}

+ 444 - 0
src/com/acc/framework/excel/util/ExpExcelUtil.java

@@ -0,0 +1,444 @@
+package com.acc.framework.excel.util;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.collections.MapUtils;
+import org.apache.poi.hssf.usermodel.HSSFCell;
+import org.apache.poi.hssf.usermodel.HSSFCellStyle;
+import org.apache.poi.hssf.usermodel.HSSFFont;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.hssf.util.HSSFColor;
+import org.jdom.Document;
+import org.jdom.Element;
+import org.jdom.input.SAXBuilder;
+import org.springframework.core.io.Resource;
+
+import com.acc.framework.excel.exception.MapIsNullException;
+import com.acc.framework.excel.exception.ResultIsNullException;
+import com.acc.util.common.StringUtil;
+
+public class ExpExcelUtil
+{
+
+	private HSSFCellStyle titleStyle = null;
+
+	private HSSFCellStyle bodyStyle = null;
+
+	private static Map allMaprule = new HashMap();
+
+	private static Document rule;
+
+	private Resource expXmlPath;
+
+	private Resource expTempExcelPath;
+
+	private synchronized void reloadRuleXML()
+	{
+		try
+		{
+			SAXBuilder sAXBuilder = new SAXBuilder();
+			this.rule = sAXBuilder.build(new BufferedInputStream(this.expXmlPath.getInputStream()));
+		}
+		catch (Exception ex)
+		{
+			ex.printStackTrace();
+		}
+
+	}
+
+	// ͨ��ID��ȡxml�õ����������Ϣ
+	private synchronized Map readRule(String tableid)
+	{
+		Map map = new HashMap();
+		if (this.rule == null)
+		{
+			this.reloadRuleXML();
+		}
+
+		List list = rule.getRootElement().getChildren("table");// rule.selectNodes("execl/table");
+		for (int i = 0; i < list.size(); i++)
+		{
+			Element el = (Element) list.get(i);
+			String id = StringUtil.objNullToStr(el.getAttribute("id").getValue());
+			if (id.equals(tableid))
+			{
+				List sheetlist = el.getChildren();
+				for (int j = 0; j < sheetlist.size(); j++)
+				{
+					Element sheet = (Element) sheetlist.get(j);
+					// �ж��Ƿ��Ѿ�Ҷ�ӽ��
+					if (sheet.getChildren().size() < 1)
+					{
+						map.put(sheet.getQualifiedName(), sheet.getText());
+					}
+					else
+					{
+						// �õ�excel����
+						if (sheet.getQualifiedName().equals("title"))
+						{
+
+							List titiles = sheet.getChildren();
+							String[] ts = new String[titiles.size()];
+							for (int x = 0; x < titiles.size(); x++)
+							{
+								Element elts = (Element) titiles.get(x);
+								ts[x] = elts.getText();
+							}
+							map.put("title", ts);
+
+						}
+						if (sheet.getQualifiedName().equals("body"))
+						{
+							Map bodyMap = new LinkedHashMap();
+							List bodyel = sheet.getChildren();
+							for (int x = 0; x < bodyel.size(); x++)
+							{
+								String[] ts = new String[3];
+								Element elts = (Element) bodyel.get(x);
+								ts[0] = elts.getAttributeValue("key");
+								ts[1] = elts.getAttributeValue("type");
+								Object obj = elts.getAttributeValue("format");
+								if (obj != null) ts[2] = elts.getAttributeValue("format");
+
+								bodyMap.put(ts[0], ts);
+							}
+							map.put("body", bodyMap);
+						}
+					}
+				}
+			}
+			else
+			{
+				continue;
+			}
+			allMaprule.put(tableid, map);
+		}
+
+		return map;
+
+	}
+
+	// ͨ��ID�����ļ�������Ϣ
+	private Map getRuleById(String tableid)
+	{
+		if (allMaprule.containsKey(tableid))
+		{
+			return (Map) allMaprule.get(tableid);
+		}
+		else
+		{
+			return this.readRule(tableid);
+		}
+	}
+
+	private void createTitle(HSSFSheet sheet, Map map)
+	{
+
+		HSSFRow row = sheet.createRow(0);
+		String[] titles = (String[]) map.get("title");
+		for (int i = 0; i < titles.length; i++)
+		{
+			HSSFCell cell = row.createCell((short) i);
+			cell.setCellStyle(titleStyle);
+			// cell.setEncoding(HSSFCell.ENCODING_UTF_16);
+			cell.setCellValue(titles[i]);
+		}
+	}
+
+	private HSSFWorkbook createExcel(String tableid, List list) throws ResultIsNullException,
+			MapIsNullException
+	{
+		Map map = this.getRuleById(tableid);
+		return buildWK(tableid, list, map);
+	}
+
+	// ���excel��
+	private HSSFWorkbook buildWK(String tableid, List list, Map map) throws ResultIsNullException,
+			MapIsNullException
+	{
+		if (map == null) throw new MapIsNullException();
+		if (list == null || list.size() < 1) throw new ResultIsNullException();
+		// �ڴ洴��һ��Excel�ĵ�
+		HSSFWorkbook wb = new HSSFWorkbook();
+		boolean wbstype = true;
+		// sheet ��Ӧһ����ҳ
+		HSSFSheet sheet = wb.createSheet(MapUtils.getString(map, "sheetname", "sheet1"));
+		boolean sheetWith = true;
+		this.titleFont(wb);
+		this.bodyFont(wb);
+		// ������ͷ
+		this.createTitle(sheet, map);
+		Map keyMap = (LinkedHashMap) map.get("body");
+		short startRow = MapUtils.getShortValue(map, "startrow");
+		for (short i = 0; i < list.size(); i++)
+		{
+			short xy = i;
+			HSSFRow row = sheet.createRow(xy + startRow);
+			Map rowmap = (Map) list.get((int) xy);
+			short _i = 0;
+			Iterator keyIterator = keyMap.keySet().iterator();
+			while (keyIterator.hasNext())
+			{
+				String colvalue = "";
+				String col = (String) keyIterator.next();
+				String[] keys = (String[]) keyMap.get(col);
+				HSSFCell cell = row.createCell((short) _i);
+				String type = keys[1];
+				String key = keys[0];
+				cell.setCellStyle(this.bodyStyle);
+				// cell.setEncoding(HSSFCell.ENCODING_UTF_16);
+				colvalue = MapUtils.getString(rowmap, key, "");
+				if (colvalue.equals("") && !type.equals("sequence"))
+				{
+					cell.setCellValue(colvalue);
+				}
+				else
+				{
+					if (type.equals("sequence"))
+					{
+						colvalue = "0000";
+						cell.setCellValue(xy + 1);
+					}
+					else if (type.equals("String"))
+					{
+
+						cell.setCellValue(colvalue);
+					}
+					else if (type.equals("Date"))
+					{
+						DateFormat df = new SimpleDateFormat(keys[2]);
+						cell.setCellValue(colvalue);
+					}
+					else if (type.equals("int"))
+					{
+						if (colvalue.equals("")) colvalue = "0";
+						cell.setCellValue(colvalue);
+					}
+					if (sheetWith)
+					{
+						this.setCellWith(sheet, _i, colvalue);
+					}
+				}
+				_i++;
+
+			}
+			sheetWith = false;
+
+		}
+		return wb;
+	}
+
+	// ����һ���ڴ��� excel
+	public ByteArrayOutputStream createExcelOutputStream(String tableid, List list)
+			throws ResultIsNullException, MapIsNullException
+	{
+		HSSFWorkbook wk = this.createExcel(tableid, list);
+		try
+		{
+			ByteArrayOutputStream baos = new ByteArrayOutputStream();
+			wk.write(baos);
+			baos.close();
+			baos.flush();
+			return baos;
+		}
+		catch (IOException e)
+		{
+			e.printStackTrace();
+			return null;
+		}
+	}
+	 /** 
+     * 针对Book类进行导入的操作 
+     *  
+     * @return 
+     */  
+    public List excleIn(Map map) {  
+        List list = new ArrayList();  
+        try {  
+            InputStream is = new FileInputStream("h:/excleTest/bookPoi.xls");  
+            HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);  
+            // 获取选项卡对象 第0个选项卡 , 因为我们这里只有一个选项卡,如果你每个选项卡的内容是一样,可以通过循环取出  
+            HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0);  
+            // 循环取出每行的值  
+            for (int rowNum = 0; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {  
+                HSSFRow hssfRow = hssfSheet.getRow(rowNum);  
+                //注意Poi读取的内容是有类型的,处理起来也jxl有所不同  
+              /*  book.setId((int) hssfRow.getCell(0).getNumericCellValue());  
+                book.setName(hssfRow.getCell(1).getStringCellValue());  
+                book.setAuthor(hssfRow.getCell(2).getStringCellValue());  
+                list.add(book);  */
+            }  
+        } catch (FileNotFoundException e) {  
+            // TODO Auto-generated catch block  
+            e.printStackTrace();  
+        } catch (IOException e) {  
+            // TODO Auto-generated catch block  
+            e.printStackTrace();  
+        }  
+        return list;  
+    }  
+	/**
+	 * 
+	 * @param tableid �����ID
+	 * @param list ��ݽ��
+	 * @param fileName ���
+	 * @param filepath ����
+	 * @throws MapIsNullException
+	 * @throws ResultIsNullException
+	 */
+	public void writeExcel(String tableid, List list, String fileName, String filepath)
+			throws ResultIsNullException, MapIsNullException
+	{
+		try
+		{
+			File file = new File(filepath + File.separator + fileName);
+			if (file == null || !file.isFile()) file.createNewFile();
+			OutputStream out = new FileOutputStream(file);
+			HSSFWorkbook wb = this.createExcel(tableid, list);
+			wb.write(out);
+			out.close();
+		}
+		catch (IOException e)
+		{
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * ��ҳдexcel�ļ�
+	 * 
+	 * @param tableid �����ID
+	 * @param list ��ݽ��
+	 * @param map ���excel��ʽ˵��
+	 * @param fileName ���
+	 * @param filepath ����
+	 * @throws MapIsNullException
+	 * @throws ResultIsNullException
+	 */
+	private void createExcel(String tableid, List list, Map map, String fileName, String filepath)
+			throws ResultIsNullException, MapIsNullException
+	{
+		try
+		{
+			File file = new File(filepath + File.separator + fileName);
+			if (file == null || !file.isFile()) file.createNewFile();
+			OutputStream out = new FileOutputStream(file);
+			HSSFWorkbook wb = this.buildWK(tableid, list, map);
+			wb.write(out);
+			out.close();
+		}
+		catch (IOException e)
+		{
+			e.printStackTrace();
+		}
+	}
+
+	// ������ֵ������cell�Ŀ��
+	private void setCellWith(HSSFSheet sheet, short cell, String value)
+	{
+		try
+		{
+			int length = 12;
+			int j = value.length();
+			if (j > 32) length = 32;
+			if (j < 12) length = 12;
+			if (j >= 12 && j <= 32) length = j;
+			sheet.setColumnWidth(cell, (short) ((short) (length * 256) + (short) 200));
+		}
+		catch (Exception ex)
+		{
+			ex.printStackTrace();
+		}
+	}
+
+	/**
+	 * ���ñ�����ʽ
+	 * 
+	 */
+	private void titleFont(HSSFWorkbook wb)
+	{
+		HSSFFont titleFont = wb.createFont();
+		titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
+		titleFont.setFontName("����");
+		titleFont.setFontHeightInPoints((short) 10);
+		titleStyle = wb.createCellStyle();
+		titleStyle.setFont(titleFont);
+		titleStyle.setFillBackgroundColor(HSSFColor.AQUA.index);
+		titleStyle.setBorderBottom((short) 1);
+		titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+	}
+
+	/**
+	 * ����head��ʽ
+	 * 
+	 * 
+	 * private void headFont(HSSFWorkbook wb) { HSSFFont headFont = wb.createFont();
+	 * headFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); headFont.setFontName("����");
+	 * headFont.setFontHeightInPoints((short) 11); headStyle = wb.createCellStyle();
+	 * headStyle.setFont(headFont); headStyle.setBorderTop((short)1);
+	 * headStyle.setBorderRight((short)1); headStyle.setBorderBottom((short)1);
+	 * headStyle.setBorderLeft((short)1); headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); }
+	 */
+	/**
+	 * ����body��ʽ
+	 * 
+	 */
+	private void bodyFont(HSSFWorkbook wb)
+	{
+		HSSFFont bodyFont = wb.createFont();
+		bodyFont.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
+		bodyFont.setFontName("����");
+		bodyFont.setFontHeightInPoints((short) 9);
+		bodyStyle = wb.createCellStyle();
+		bodyStyle.setFont(bodyFont);
+		bodyStyle.setBorderTop((short) 1);
+		bodyStyle.setBorderRight((short) 1);
+		bodyStyle.setBorderBottom((short) 1);
+		bodyStyle.setBorderLeft((short) 1);
+		bodyStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+		bodyStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
+	}
+
+	private File writeExcel(String tableid, List list, Map map, String fileName)
+	{
+		try
+		{
+			File file = new File(expTempExcelPath.getFile().getPath() + File.separator + fileName);
+			return file;
+		}
+		catch (IOException e)
+		{
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	public void setExpXmlPath(Resource expXmlPath)
+	{
+		this.expXmlPath = expXmlPath;
+	}
+
+	public void setExpTempExcelPath(Resource expTempExcelPath)
+	{
+		this.expTempExcelPath = expTempExcelPath;
+	}
+
+}

+ 546 - 0
src/com/acc/framework/excel/util/ImpExcelUtil.java

@@ -0,0 +1,546 @@
+package com.acc.framework.excel.util;
+
+import java.io.BufferedInputStream;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.poi.hssf.usermodel.HSSFCell;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.dom4j.Attribute;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.springframework.core.io.Resource;
+
+public class ImpExcelUtil
+{
+
+	private Resource impXmlPath;
+
+	private Document rule;
+
+	private static String oldValue = "";
+
+	// ���ع����ļ�
+	public synchronized void reloadRuleXML() throws Exception
+	{
+		SAXReader saxReader = new SAXReader();	
+		this.rule = saxReader.read(new BufferedInputStream(this.impXmlPath.getInputStream()));
+	}
+
+	/**
+	 * ����˲���ϢXML
+	 */
+	private Document ExecuteXML() throws Exception
+	{
+		try
+		{
+			if (this.rule == null)
+			{
+				this.reloadRuleXML();
+			}
+			return rule;
+		}
+		catch (Exception ex)
+		{
+			return null;
+		}
+	}
+
+	/**
+	 * �õ�map�ı���Ϣ
+	 */
+	public Map readColXml(String tableName)
+	{
+		try
+		{
+			Element root = this.ExecuteXML().getRootElement();
+			root = this.ExecuteXML().getRootElement();
+			Element el = (Element) root.selectNodes("tables").get(0);
+			List list = el.selectNodes("table");
+			for (int i = 0; list != null && i < list.size(); i++) // rule-table
+			{
+				Element e = (Element) list.get(i); // rule-e
+				String tabName = e.attribute("tablename").getValue();
+				if (tabName.equals(tableName))
+				{
+					Element cold = (Element) e.selectNodes("columns").get(0);
+					Element colv = (Element) cold.selectNodes("columns-execlvalue").get(0);
+					List cols = colv.selectNodes("colum");
+					Map map = new HashMap();
+					for (int j = 0; j < cols.size(); j++)
+					{
+						Element cole = (Element) cols.get(j); // rule-e
+
+						Attribute att = cole.attribute("value");
+						if (att != null)
+						{
+							String colName = cole.attribute("name").getValue();
+							String colvalue = att.getValue();
+							map.put(colName, colvalue);
+						}
+
+					}
+					return map;
+				}
+			}
+
+		}
+		catch (Exception e)
+		{
+			return null;
+		}
+		return null;
+	}
+
+	/**
+	 * ����ݱ���Ĭ��ֵ
+	 */
+	public Map readDufaultXml(String tableName, Map map)
+	{
+		Element root;
+		try
+		{
+			root = this.ExecuteXML().getRootElement();
+			Element el = (Element) root.selectNodes("tables").get(0);
+			List list = el.selectNodes("table");
+			for (int i = 0; list != null && i < list.size(); i++) // rule-table
+			{
+				Element e = (Element) list.get(i); // rule-e
+				String tabName = e.attribute("tablename").getValue();
+				if (tabName.equals(tableName))
+				{
+					Element cold = (Element) e.selectNodes("columns").get(0);
+					Element colv = (Element) cold.selectNodes("columns-defaultvalue").get(0);
+					List cols = colv.selectNodes("colum");
+					int xi = cols.size();
+					for (int j = 0; j < cols.size(); j++)
+					{
+						Element cole = (Element) cols.get(j); // rule-e
+						String colName = cole.attribute("name").getValue();
+						String colvalue = cole.attribute("value").getValue();
+						String coltype = cole.attribute("type").getValue();
+						if (coltype.equals("date") && colvalue.equals("sysdate"))
+						{
+
+							Date dNow = new Date();
+							SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+							colvalue = formatter.format(dNow);
+						}
+						map.put(colName, colvalue);
+					}
+					return map;
+				}
+			}
+		}
+		catch (Exception e1)
+		{
+			e1.printStackTrace();
+		}
+		return map;
+	}
+
+	/**
+	 * ͨ�����,�õ���j��Ϣ�б�
+	 * 
+	 * @param tableName����
+	 * @return ��j��Ϣ�б�
+	 */
+	public List getGlMssageByTableName(String tableName)
+	{
+		List returnList = new ArrayList();
+		try
+		{
+			Element root;
+			Map map = new HashMap();
+			root = this.ExecuteXML().getRootElement();
+			List list = root.selectNodes("tables/table");
+			for (int i = 0; list != null && i < list.size(); i++) // rule-table
+			{
+				Element e = (Element) list.get(i); // rule-e
+				String tabName = e.attribute("tablename").getValue();
+				if (tabName.equals(tableName))
+				{
+					List coloumsList = e.selectNodes("gltype/ds");
+					for (int j = 0; j < coloumsList.size(); j++)
+					{
+						Element cole = (Element) coloumsList.get(j);
+						map.put("color", cole.attribute("color").getValue());
+						map.put("gltype", cole.attribute("gltype").getValue());
+						returnList.add(map);
+
+					}
+
+				}
+			}
+		}
+		catch (Exception ex)
+		{
+			ex.printStackTrace();
+		}
+		return returnList;
+	}
+
+	/**
+	 * �õ���ָ������ֵ��Ĭ���б�
+	 * 
+	 * @param tableName:ָ������
+	 * @param attribute:ָ��������
+	 * @param attributevalue:ָ������ֵ
+	 * @return:���ص�Ĭ���б�
+	 */
+	public List getDisplayColumn(String tableName, String attribute, String attributevalue,
+			String reutrnvalue)
+	{
+		List returnList = new ArrayList();
+		try
+		{
+			Element root;
+			Map map = new HashMap();
+			root = this.ExecuteXML().getRootElement();
+			List list = root.selectNodes("tables/table");
+			for (int i = 0; list != null && i < list.size(); i++) // rule-table
+			{
+				Element e = (Element) list.get(i); // rule-e
+				String tabName = e.attribute("tablename").getValue();
+				if (tabName.equals(tableName))
+				{
+					List coloumsList = e.selectNodes("columns/columns-execlvalue/colum");
+					for (int j = 0; coloumsList != null && j < coloumsList.size(); j++)
+					{
+						Element cole = (Element) coloumsList.get(j);
+						Attribute att = cole.attribute(attribute);
+						if (att != null)
+						{
+							String colvalue = att.getValue();
+							if (colvalue != null && colvalue.equals(attributevalue))
+							{
+								String colName = cole.attribute(reutrnvalue).getValue();
+								returnList.add(colName);
+							}
+
+						}
+					}
+					List defaultList = e.selectNodes("columns/columns-defaultvalue/colum");
+					for (int z = 0; defaultList != null && z < defaultList.size(); z++)
+					{
+						Element cole = (Element) defaultList.get(z);
+						Attribute att = cole.attribute(attribute);
+						if (att != null)
+						{
+							String colvalue = att.getValue();
+							if (colvalue != null && colvalue.equals(attributevalue))
+							{
+								String colName = cole.attribute(reutrnvalue).getValue();
+								returnList.add(colName);
+							}
+						}
+					}
+					List selectList = e.selectNodes("columns/columns-selectvalue/colum");
+					for (int z = 0; selectList != null && z < selectList.size(); z++)
+					{
+						Element cole = (Element) selectList.get(z);
+						Attribute att = cole.attribute(attribute);
+						if (att != null)
+						{
+							String colvalue = att.getValue();
+							if (colvalue != null && colvalue.equals(attributevalue))
+							{
+								String colName = cole.attribute(reutrnvalue).getValue();
+								returnList.add(colName);
+							}
+						}
+					}
+				}
+			}
+
+		}
+		catch (Exception e)
+		{
+			e.printStackTrace();
+		}
+		return returnList;
+	}
+
+	public String[] getAllCounmsByTableName(String tableName)
+	{
+		List list = this.getColumnValueByDisplay(tableName, "name", "name");
+		String[] colunms = new String[list.size()];
+		for (int i = 0; i < list.size(); i++)
+		{
+			colunms[i] = list.get(i).toString();
+		}
+		return colunms;
+	}
+
+	public List getColumnValueByDisplay(String tableName, String attribute, String reutrnvalue)
+	{
+		List returnList = new ArrayList();
+		try
+		{
+			Element root;
+			Map map = new HashMap();
+			root = this.ExecuteXML().getRootElement();
+			List list = root.selectNodes("tables/table");
+			for (int i = 0; list != null && i < list.size(); i++) // rule-table
+			{
+				Element e = (Element) list.get(i); // rule-e
+				String tabName = e.attribute("tablename").getValue();
+				if (tabName.equals(tableName))
+				{
+					List coloumsList = e.selectNodes("columns/columns-execlvalue/colum");
+					for (int j = 0; coloumsList != null && j < coloumsList.size(); j++)
+					{
+						Element cole = (Element) coloumsList.get(j);
+						Attribute att = cole.attribute(attribute);
+						if (att != null)
+						{
+							String colName = cole.attribute(reutrnvalue).getValue();
+							returnList.add(colName);
+
+						}
+					}
+					List defaultList = e.selectNodes("columns/columns-defaultvalue/colum");
+					for (int z = 0; defaultList != null && z < defaultList.size(); z++)
+					{
+						Element cole = (Element) defaultList.get(z);
+						Attribute att = cole.attribute(attribute);
+						if (att != null)
+						{
+							String colName = cole.attribute(reutrnvalue).getValue();
+							returnList.add(colName);
+						}
+					}
+					List selectList = e.selectNodes("columns/columns-selectvalue/colum");
+					for (int z = 0; selectList != null && z < selectList.size(); z++)
+					{
+						Element cole = (Element) selectList.get(z);
+						Attribute att = cole.attribute(attribute);
+						if (att != null)
+						{
+							String colName = cole.attribute(reutrnvalue).getValue();
+							returnList.add(colName);
+						}
+					}
+				}
+			}
+
+		}
+		catch (Exception e)
+		{
+			e.printStackTrace();
+		}
+		return returnList;
+	}
+
+	public Map readStartXml(String tableName)
+	{
+		try
+		{
+			Element root;
+			Map map = new HashMap();
+			root = this.ExecuteXML().getRootElement();
+			Element el = (Element) root.selectNodes("tables").get(0);
+			List list = el.selectNodes("table");
+			for (int i = 0; list != null && i < list.size(); i++) // rule-table
+			{
+				Element e = (Element) list.get(i); // rule-e
+				String tabName = e.attribute("tablename").getValue();
+				if (tabName.equals(tableName))
+				{
+					Element estartcol = (Element) e.selectNodes("start-column").get(0);
+					Element estartpage = (Element) e.selectNodes("start-page").get(0);
+					String col = estartcol.getText();
+					String page = estartpage.getText();
+					map.put("start-page", page);
+					map.put("start-column", col);
+				}
+			}
+			return map;
+		}
+		catch (Exception e1)
+		{
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+			return null;
+		}
+
+	} // �õ�Excel��ߵ��������
+
+	public List readExcel(String fileName, String tablename) throws IOException,
+			NullPointerException
+	{
+		POIFSFileSystem fs;
+		fs = new POIFSFileSystem(new FileInputStream(fileName));
+		HSSFWorkbook wb = new HSSFWorkbook(fs);
+		Map startMap = this.readStartXml(tablename);
+		// �õ��ڼ����ǩҳ��ʼ
+		int startPage = Integer.parseInt(startMap.get("start-page").toString());
+		// �õ��ӵڼ��п�ʼȡֵ
+		int startRow = Integer.parseInt(startMap.get("start-column").toString());
+		HSSFSheet sheet = wb.getSheetAt(startPage);
+		List list = new ArrayList();
+		int rownum = this.getRowNum(sheet); // sheet.getLastRowNum();
+		for (int i = startRow; i < rownum; i++)
+		{
+			HSSFRow row = sheet.getRow(i);
+			// �õ�������������excel����λ��
+			Map colmap = this.readColXml(tablename);
+			// ����map�õ����������
+			Iterator it = colmap.keySet().iterator();
+			while (it.hasNext())
+			{
+				String key = (String) it.next();
+				// �õ�map��key
+				Object lobval = colmap.get(key);
+				int j = Integer.parseInt(lobval.toString());
+				// ͨ�������õ�excele����
+				HSSFCell cell = row.getCell((short) j);
+				String value = CellValueToStr(cell);
+				colmap.put(key, value.trim());
+			}
+			// Ϊmap����Ĭ��ֵ
+			colmap = this.readDufaultXml(tablename, colmap);
+			list.add(colmap);
+		}
+		return list;
+
+	}
+
+	/** ����Ԫ��ֵת��Ϊ�ַ��� */
+	public static String CellValueToStr(HSSFCell cell)
+	{
+		String cellValue = "";
+		switch (cell.getCellType())
+		{
+		case HSSFCell.CELL_TYPE_NUMERIC:
+		{
+			cellValue = checkNumNull(cell);
+			break;
+		}
+		case HSSFCell.CELL_TYPE_STRING:
+		{
+			cellValue = checkStrNull(cell);
+			break;
+		}
+		default:
+		{
+			cellValue = checkDateNull(cell);
+		}
+		}
+		return cellValue;
+	}
+
+	public static String checkStrNull(HSSFCell cell)
+	{
+		String cellValue = "";
+		if (cell.getStringCellValue().equals(null) || cell.getStringCellValue().equals(""))
+		{
+			cellValue = "";
+		}
+		else
+		{
+			cellValue = cell.getStringCellValue();
+			oldValue = cellValue;
+		}
+		return cellValue;
+	}
+
+	public static String checkNumNull(HSSFCell cell)
+	{
+		String cellValue = "";
+		if (cell.getNumericCellValue() == 0)
+		{
+			cellValue = "";
+		}
+		else
+		{
+			cellValue = num2str(cell.getNumericCellValue());
+			oldValue = cellValue;
+		}
+		return cellValue;
+	}
+
+	public static String checkDateNull(HSSFCell cell)
+	{
+		String cellValue = "";
+		if (cell.getDateCellValue() == null)
+		{
+			cellValue = "";
+		}
+		else
+		{
+			cellValue = date2str(cell.getDateCellValue());
+			oldValue = cellValue;
+		}
+		return cellValue;
+	}
+
+	/** ����ת��Ϊ�ַ� */
+	public static String num2str(double cellValue)
+	{
+		DecimalFormat df = new DecimalFormat("0");
+		return df.format(new Double(cellValue));
+	}
+
+	/** ����ת��Ϊ�ַ� */
+	public static String date2str(Date ValucellValuee)
+	{
+		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+		return simpleDateFormat.format(ValucellValuee);
+	}
+
+	public static String getOldValue()
+	{
+		return oldValue;
+	}
+
+	public int getRowNum(HSSFSheet sheet)
+	{
+		int i = 0;
+		try
+		{
+			int num = sheet.getLastRowNum();
+			if (num > 1)
+			{
+				for (; i <= num; i++)
+				{
+					HSSFRow row = sheet.getRow(i);
+					HSSFCell cell = row.getCell((short) 0);
+					if (cell != null)
+					{
+						String value = CellValueToStr(cell);
+						if (value.equals(""))
+						{
+							return i;
+						}
+					}
+				}
+				return i;
+			}
+			return i;
+		}
+		catch (Exception ex)
+		{
+			System.out.println("Excel����������" + i);
+			return i;
+		}
+	}
+
+	public void setImpXmlPath(Resource impXmlPath)
+	{
+		this.impXmlPath = impXmlPath;
+	}
+
+}

+ 178 - 0
src/com/acc/framework/excel/util/Student.java

@@ -0,0 +1,178 @@
+package com.acc.framework.excel.util;
+import java.util.Date;  
+import java.io.FileOutputStream;  
+import java.text.SimpleDateFormat;  
+import java.util.ArrayList;  
+import java.util.List;  
+  
+import org.apache.poi.hssf.usermodel.HSSFCell;  
+import org.apache.poi.hssf.usermodel.HSSFCellStyle;  
+import org.apache.poi.hssf.usermodel.HSSFRow;  
+import org.apache.poi.hssf.usermodel.HSSFSheet;  
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
+
+import java.io.FileInputStream;    
+import java.io.FileOutputStream;    
+import org.apache.poi.hssf.usermodel.HSSFRow;    
+import org.apache.poi.hssf.usermodel.HSSFSheet;    
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;    
+import org.apache.poi.poifs.filesystem.POIFSFileSystem; 
+public class Student {
+	private String name;//名称
+	private String xingh;//型号
+	private String jscs;//技术参数
+	private String zzs;//制造商
+	private String beiz;//备注
+	private String danw;//单位
+	private String id;//序号
+	private String number;//数量
+	
+	public  Student(){}
+	
+	public  Student(String id,String name,String xingh,String danw,String number,String jscs,String zzs,String beiz)  
+    {  
+        this.id = id;  
+        this.name = name;  
+        this.xingh = xingh;  
+        this.jscs = jscs; 
+        this.zzs = zzs;  
+        this.beiz = beiz;  
+        this.number = number;  
+        this.danw = danw;  
+    }  
+  
+    
+    /** 
+     * @功能:手工构建一个简单格式的Excel 
+     */  
+    private static List<Student> getStudent() throws Exception  
+    {  
+        List list =TestExcel.testWord();
+       //Student user1 = new Student(1, "张三", 16, df.parse("1997-03-12"));      
+       // list.add(user1); 
+        return list;  
+    }  
+  
+    public static void main(String[] args) throws Exception  
+    {  
+        // 第一步,创建一个webbook,对应一个Excel文件  
+    	FileInputStream fs=new FileInputStream("e:\\机组产品副表BOM导入模板20150316.xls");  //获取d://test.xls  
+        POIFSFileSystem ps=new POIFSFileSystem(fs);  //使用POI提供的方法得到excel的信息  
+        HSSFWorkbook wb = new HSSFWorkbook(ps);  
+        // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet  
+       
+        HSSFSheet sheet=wb.getSheetAt(0);
+        HSSFRow row = sheet.getRow(0);
+      
+        
+      
+      
+      
+        HSSFCell cell = row.createCell((short) 2);  
+        
+        cell = row.createCell((short) 4);  
+        cell = row.createCell((short) 11);  
+        cell = row.createCell((short) 10);
+        cell = row.createCell((short) 8); 
+        cell = row.createCell((short) 7);
+       // cell = row.createCell((short) 13); 
+        // 第五步,写入实体数据 实际应用中这些数据从数据库得到,  
+        List list = Student.getStudent();  
+        list.remove(0);
+        int j=6;
+        for (int i = 1; i < list.size(); i++)  
+        {  
+            row = sheet.createRow((int) j);  
+            Student stu = (Student) list.get(i);  
+            // 第四步,创建单元格,并设置值  
+            row.createCell((short) 2).setCellValue(stu.getName().replace("", "")); 
+            row.createCell((short) 4).setCellValue(stu.getXingh().replace("", "")); 
+            row.createCell((short) 11).setCellValue(stu.getDanw().replace("", "")); 
+            row.createCell((short) 10).setCellValue(stu.getNumber().replace("", "")); 
+            row.createCell((short) 8).setCellValue(stu.getJscs().replace("", "")); 
+            row.createCell((short) 7).setCellValue(stu.getZzs().replace("", "")); 
+           // row.createCell((short) 13).setCellValue(stu.getBeiz().replace("", "")); 
+          j++;
+        }  
+        // 第六步,将文件存到指定位置  
+        try  
+        {  
+            FileOutputStream fout=new FileOutputStream("e:\\机组产品副表BOM导入模板20150316.xls");  //向d://test.xls中写数据  
+           
+            System.err.println("11");
+              
+            fout.flush();  
+            wb.write(fout);    
+            fout.close();    
+        }  
+        catch (Exception e)  
+        {  
+            e.printStackTrace();  
+        }  
+    }    
+      
+    public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getXingh() {
+		return xingh;
+	}
+
+	public void setXingh(String xingh) {
+		this.xingh = xingh;
+	}
+
+	public String getJscs() {
+		return jscs;
+	}
+
+	public void setJscs(String jscs) {
+		this.jscs = jscs;
+	}
+
+	public String getZzs() {
+		return zzs;
+	}
+
+	public void setZzs(String zzs) {
+		this.zzs = zzs;
+	}
+
+	public String getBeiz() {
+		return beiz;
+	}
+
+	public void setBeiz(String beiz) {
+		this.beiz = beiz;
+	}
+
+	public String getDanw() {
+		return danw;
+	}
+
+	public void setDanw(String danw) {
+		this.danw = danw;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getNumber() {
+		return number;
+	}
+
+	public void setNumber(String number) {
+		this.number = number;
+	}
+}  
+

+ 155 - 0
src/com/acc/framework/excel/util/TestExcel.java

@@ -0,0 +1,155 @@
+package com.acc.framework.excel.util;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+
+import com.acc.framework.excel.exception.MapIsNullException;
+import com.acc.framework.excel.exception.ResultIsNullException;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+
+import org.apache.poi.hwpf.HWPFDocument;
+import org.apache.poi.hwpf.usermodel.Paragraph;
+import org.apache.poi.hwpf.usermodel.Range;
+import org.apache.poi.hwpf.usermodel.Table;
+import org.apache.poi.hwpf.usermodel.TableCell;
+import org.apache.poi.hwpf.usermodel.TableIterator;
+import org.apache.poi.hwpf.usermodel.TableRow;
+
+import java.io.File;   
+import java.io.FileInputStream;   
+import java.io.InputStream;   
+  
+import org.apache.poi.POIXMLDocument;   
+import org.apache.poi.POIXMLTextExtractor;   
+import org.apache.poi.hwpf.extractor.WordExtractor;   
+import org.apache.poi.openxml4j.opc.OPCPackage;   
+import org.apache.poi.xwpf.extractor.XWPFWordExtractor; 
+
+
+import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+
+
+public class TestExcel
+{
+	
+	 public static List testWord(){
+	  try{
+	      FileInputStream in = new FileInputStream("D:\\aa.doc");//载入文档
+	     POIFSFileSystem pfs = new POIFSFileSystem(in);   
+	      HWPFDocument hwpf = new HWPFDocument(pfs);   
+	      Range range = hwpf.getRange();//得到文档的读取范围
+	      TableIterator it = new TableIterator(range);
+	     //迭代文档中的表格
+	      String name = "";//名称
+          String xingh = "";//型号
+          String jscs = "";//技术参数
+          String zzs = "";//制造商
+          String beiz = "";//备注
+          String danw = "";//单位
+          String id = "";//序号
+          String number = "";//数量
+	      List list = new ArrayList();
+	      while (it.hasNext()) {   
+	          Table tb = (Table) it.next();   
+	          //迭代行,默认从0开始
+	          for (int i = 0; i < tb.numRows(); i++) {   
+	              TableRow tr = tb.getRow(i);   
+	              //迭代列,默认从0开始
+	              for (int j = 0; j < tr.numCells(); j++) {   
+	                  TableCell td = tr.getCell(j);//取得单元格
+	                  
+	                  //取得单元格的内容
+	                  for(int k=0;k<td.numParagraphs();k++){   
+	                      Paragraph para =td.getParagraph(k);   
+	                      String s = para.text();
+	                      if(j==0){
+	                    	  id=s; 
+	                      }
+	                      if(j==1){
+	                    	  name=s; 
+	                      }
+	                      if(j==2){
+	                    	  xingh=s; 
+	                      }
+	                      if(j==3){
+	                    	  danw=s; 
+	                      }
+	                      if(j==4){
+	                    	  number=s; 
+	                      }
+	                      if(j==5){
+	                    	  jscs=s; 
+	                      }
+	                      if(j==6){
+	                    	  zzs=s; 
+	                      }
+	                      if(j==7){
+	                    	  beiz=s; 
+	                      }
+	                      
+	                     // System.out.println(s);
+	                  } //end for 
+	               
+	              }   //end for
+	             
+	              Student user1 = new Student(id,name,xingh,danw,number,jscs,zzs,beiz);
+	              list.add(user1);
+	          }   //end for
+	      } //end while
+	      return list;
+	  }catch(Exception e){
+	   e.printStackTrace();
+	   return null;
+	  }
+	  
+	 }//end method
+	 public static void main(String[] args) {
+		 //TestExcel a=new TestExcel();
+		 //a.testWord();
+		 String t = "c:\123\123";
+		 t.replaceAll("\\", "\\\\");
+		 System.err.println( t);
+	}
+	
+	 
+/*	public void writerExcel() throws ResultIsNullException, MapIsNullException
+	{
+		ExpExcelUtil expUtil=new ExpExcelUtil();
+		List list=new ArrayList();
+		Map map=new HashMap();
+		map.put("NAME", "韩怀国");
+		map.put("AGE", "30");
+		
+		
+		Map map2=new HashMap();
+		map2.put("NAME", "别欢");
+		map2.put("AGE", "80");
+		
+		
+		Map map3=new HashMap();
+		map3.put("NAME", "乔补来");
+		map3.put("AGE", "100");
+		
+		list.add(map);
+		list.add(map2);
+		list.add(map3);
+		
+		expUtil.writeExcel("exp_personmsg", list, "PersonMsg.xls", "c:\\");
+	}
+	public static void main(String[] args) {
+		 TestExcel a=new TestExcel();
+		 try{
+		 a.writerExcel();
+		 }catch(Exception e){
+			 e.printStackTrace();
+		 }
+		 System.err.println("11");
+	}*/
+	
+}

+ 149 - 0
src/com/acc/framework/menubar/action/MenubarAction.java

@@ -0,0 +1,149 @@
+package com.acc.framework.menubar.action;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import net.sf.json.JSONArray;
+
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.struts2.ServletActionContext;
+import org.springframework.stereotype.Component;
+
+import com.acc.framework.menubar.service.MenubarService;
+import com.acc.util.common.ParameterUtil;
+import com.opensymphony.xwork2.ActionSupport;
+
+@Component
+public class MenubarAction extends ActionSupport
+{
+	//@Resource(name = "menubarService")
+	//private MenubarService menubarService;
+	/*
+	private Map menubarMap;
+
+	// 加载所有菜单
+	public String queryTree() throws IOException
+	{
+		HttpServletResponse response = ServletActionContext.getResponse();
+		response.setCharacterEncoding("UTF-8");
+		response.setContentType("application/json; charset=UTF-8");
+		PrintWriter out = response.getWriter();
+		List<Map> list = menubarService.queryAllTreeview();
+		List resultlist = new ArrayList();
+		for (int i = 0; i < list.size(); i++)
+		{
+			Map map = list.get(i);
+			map.put("id", MapUtils.getObject(map, "ID"));
+			map.put("pId", MapUtils.getObject(map, "PID"));
+			map.put("name", MapUtils.getObject(map, "NAME"));
+			resultlist.add(map);
+		}
+		JSONArray jsonArray = JSONArray.fromObject(resultlist);
+		out.write(jsonArray.toString());
+
+		return null;
+	}
+
+	// 加载所有菜单
+	public String detail() throws IOException
+	{
+		HttpServletRequest request = ServletActionContext.getRequest();
+		String lid = request.getParameter("lid");
+		String mpath = request.getParameter("mpath");
+		String mpathname = request.getParameter("mpathname");
+		String[] paths = StringUtils.split(mpath, ",");
+		String[] pathnames = StringUtils.split(mpathname, ",");
+		ArrayUtils.reverse(paths);
+		ArrayUtils.reverse(pathnames);
+		Map map = menubarService.queryMenubarById(lid);
+		map.put("paths", ArrayUtils.toString(paths));
+		map.put("pathnames", ArrayUtils.toString(pathnames).replace("{", "").replace("}", "")
+				.replace(",", "->"));
+		this.setMenubarMap(map);
+		return "SUCCESS";
+	}
+
+	/**
+	 * 更新菜单
+	 * 
+	 * @return
+	 * @throws IOException
+	 */
+	/**
+	public String update() throws IOException
+	{
+		Map map = ParameterUtil.getParameter(ServletActionContext.getRequest());
+		map.remove("JOB");
+		menubarService.updateMenubar(map);
+		String menname = MapUtils.getString(map, "l_name");
+		ServletActionContext.getResponse().getWriter().write("1");
+		return null;
+
+	}
+
+	/**
+	 * 删除菜单
+	 * 
+	 * @return
+	 */
+	/**
+	public String delete()
+	{
+		Map map = ParameterUtil.getParameter(ServletActionContext.getRequest());
+		String lid = MapUtils.getString(map, "menuid");
+		String result = menubarService.deleteManubarById(lid);
+		if (result.equals("-1"))
+		{
+			ServletActionContext.getRequest().setAttribute("message",
+					this.getText("system.delete.manubar.failed"));
+			return "DELETE_FAILED";
+		}
+		else ServletActionContext.getRequest().setAttribute("message",
+				this.getText("system.delete.manubar.success"));
+		return "DELETE_SUCCESS";
+	}
+
+	/**
+	 * 添加菜单
+	 * 
+	 * @return
+	 * @throws IOException
+	 */
+	/**
+	public String add() throws IOException
+	{
+		Map map = ParameterUtil.getParameter(ServletActionContext.getRequest());
+		Object result = "-1";
+		try
+		{
+			result = menubarService.insertMenubar(map);
+		}
+		catch (Exception ex)
+		{
+			result = "-2";
+		}
+		ServletActionContext.getResponse().getWriter().write(result.toString());
+		return null;
+
+	}
+
+	public Map getMenubarMap()
+	{
+		return menubarMap;
+	}
+
+	public void setMenubarMap(Map menubarMap)
+	{
+		this.menubarMap = menubarMap;
+	}
+	*/
+}

+ 112 - 0
src/com/acc/framework/menubar/dao/MenuSysLimitDAO.java

@@ -0,0 +1,112 @@
+package com.acc.framework.menubar.dao;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.stereotype.Repository;
+
+import com.acc.common.annotation.inject.parent.InjectItem;
+import com.acc.common.annotation.inject.parent.ParentInject;
+import com.acc.common.jdbc.JdbcDaoSupportEx;
+import com.acc.common.jdbc.JdbcTemplateEx;
+import com.acc.util.common.MapUtil;
+
+@Repository
+@ParentInject(items = @InjectItem(attr = "dataSource", ref = "jdbcdataSource"))
+public class MenuSysLimitDAO extends JdbcDaoSupportEx
+{
+
+
+	/**
+	 * 通过菜单ID,得到菜单详细信息
+	 * 
+	 * @param menubarid
+	 * @return
+	 */
+	public Map queryMenubarById(String menubarid)
+	{
+		JdbcTemplateEx template = this.getJdbcTemplate();
+		String sql = "select * from menu_sys_limit t where t.l_id=?";
+		return template.queryForMap(sql, menubarid);
+
+	}
+
+	/**
+	 * 通过菜单名称,得到菜单详细信息
+	 * 
+	 * @param menubarid
+	 * @return
+	 */
+	public Map queryMenubarByName(String l_name)
+	{
+		JdbcTemplateEx template = this.getJdbcTemplate();
+		String sql = "select * from menu_sys_limit t where t.l_name=?";
+		return template.queryForMap(sql, l_name);
+
+	}
+
+	/**
+	 * 通过父ID,得到子菜单列表
+	 * 
+	 * @param pid
+	 * @return
+	 */
+	public List queryMenubarByParentId(String pid)
+	{
+		JdbcTemplateEx template = this.getJdbcTemplate();
+		String sql = "select * from menu_sys_limit t where t.p_l_id=? and open_close = '1'";
+		return template.queryForList(sql, pid);
+
+	}
+
+	/**
+	 * 请求开户菜单信息
+	 * 
+	 * @return
+	 */
+	public List queryListTreeView()
+	{
+		JdbcTemplateEx template = this.getJdbcTemplate();
+		String sql = "select t.l_id id, t.l_name name,t.p_l_id pid  from menu_sys_limit t where open_close = '1'  order by t.p_l_id,t.orderby";
+		return template.queryForList(sql);
+	}
+
+	/**
+	 * 请求所有菜单信息
+	 * 
+	 * @return
+	 */
+	public List queryListAllTreeView()
+	{
+		JdbcTemplateEx template = this.getJdbcTemplate();
+		String sql = "select t.l_id id, t.l_name name,t.p_l_id pid  from menu_sys_limit t   order by t.p_l_id,t.orderby";
+		return template.queryForList(sql);
+	}
+
+	/**
+	 * 更改数据字典
+	 * 
+	 * @param map
+	 */
+	public void update(Map map)
+	{
+		JdbcTemplateEx template = this.getJdbcTemplate();
+		MapUtil.filterMap(map);
+		template.updateMap(map, "menu_sys_limit", "l_id");
+	}
+
+	public void delete(String menubarid)
+	{
+		JdbcTemplateEx template = this.getJdbcTemplate();
+		String sql = "delete from menu_sys_limit where l_id=" + menubarid;
+		template.execute(sql);
+	}
+
+	public Object insert(Map map)
+	{
+		JdbcTemplateEx template = this.getJdbcTemplate();
+		map.put("l_id", "-2");
+		MapUtil.filterMap(map);	
+		return template.insertMap(map, "menu_sys_limit", "l_id");
+	}
+}

+ 53 - 0
src/com/acc/framework/menubar/service/MenubarService.java

@@ -0,0 +1,53 @@
+package com.acc.framework.menubar.service;
+
+import java.util.List;
+import java.util.Map;
+
+public interface MenubarService
+{
+	/**
+	 * 通过菜单ID,得到菜单详细信息
+	 * 
+	 * @param menubarid
+	 * @return
+	 */
+	public Map queryMenubarById(String menubarid);
+
+	/**
+	 * 通过父ID,得到子菜单列表
+	 * 
+	 * @param pid
+	 * @return
+	 */
+	public List queryMenubarByParentId(String pid);
+
+	/**
+	 * 更改菜单信息
+	 * 
+	 * @param map
+	 */
+	public void updateMenubar(Map map);
+
+	/**
+	 * 新加菜单信息
+	 * 
+	 * @param map
+	 * @return
+	 */
+	public Object insertMenubar(Map map);
+	
+	/**
+	 * 得到所有打开状态的菜单
+	 * @return
+	 */
+	public List queryTreeview();
+	
+	/**
+	 * 得到所有菜单
+	 * @return
+	 */
+	public List queryAllTreeview();
+
+	public String deleteManubarById(String menubarid);
+
+}

+ 72 - 0
src/com/acc/framework/menubar/service/impl/MenubarServiceImpl.java

@@ -0,0 +1,72 @@
+package com.acc.framework.menubar.service.impl;
+/*
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.stereotype.Service;
+
+import com.acc.framework.menubar.dao.MenuSysLimitDAO;
+import com.acc.framework.menubar.service.MenubarService;
+
+@Service(value = "menubarService")
+*/
+public class MenubarServiceImpl //implements MenubarService
+{
+	/*
+	private static final Log logger = LogFactory.getLog(MenubarServiceImpl.class);
+
+	@Resource(name = "menuSysLimitDAO")
+	private MenuSysLimitDAO menuSysLimitDAO;
+
+	public Map queryMenubarById(String menubarid)
+	{
+
+		return menuSysLimitDAO.queryMenubarById(menubarid);
+	}
+
+	public List queryMenubarByParentId(String pid)
+	{
+		if (StringUtils.isBlank(pid)) pid = "0";
+		return menuSysLimitDAO.queryMenubarByParentId(pid);
+	}
+
+	public Object insertMenubar(Map map)
+	{
+		String l_name = MapUtils.getString(map, "l_name", "");
+		Map hashmap = menuSysLimitDAO.queryMenubarByName(l_name);
+		// 判断名称是否已经存在
+		if (hashmap.size() > 0) return "-1";
+		return menuSysLimitDAO.insert(map);
+	}
+
+	public void updateMenubar(Map map)
+	{
+		menuSysLimitDAO.update(map);
+	}
+
+	public List queryAllTreeview()
+	{
+		return menuSysLimitDAO.queryListAllTreeView();
+	}
+
+	public List queryTreeview()
+	{
+		return menuSysLimitDAO.queryListTreeView();
+	}
+
+	public String deleteManubarById(String menubarid)
+	{
+		// 得到数据字节点
+		List list = this.queryMenubarByParentId(menubarid);
+		if (list.size() > 0) return "-1";
+		menuSysLimitDAO.delete(menubarid);
+		return "1";
+	}
+*/
+}

+ 315 - 0
src/com/acc/framework/session/UserInfo.java

@@ -0,0 +1,315 @@
+package com.acc.framework.session;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+
+import org.apache.commons.lang.StringUtils;
+
+public class UserInfo
+{
+    private String userId;
+
+    private String userName;
+
+    private String orgCode;
+
+    private String userIP;
+
+    private String loginName;
+
+    private boolean superUser;
+
+    private String isPoliceman;
+
+    private String sessionId;
+
+    private Date loginTime;
+
+    private List roles;
+
+    private List menuBars;
+
+    private String mailLoginName;
+
+    private String umuserTab_DomainID;
+
+    private Map viewOrgs;
+
+    private String role;
+
+    public UserInfo()
+    {
+        this.orgCode = "";
+        this.roles = new Vector();
+        this.menuBars = new Vector();
+        this.viewOrgs = new HashMap();
+        this.userIP = "";
+        this.userId = "";
+        this.userName = "";
+        this.sessionId = "";
+        this.loginName = "";
+        this.umuserTab_DomainID = "";
+        this.loginTime = new Date();
+        this.isPoliceman = "";
+    }
+
+    public String getUmuserTab_DomainID()
+    {
+        return umuserTab_DomainID;
+    }
+
+    public void setUmuserTab_DomainID(String umuserTab_DomainID)
+    {
+        this.umuserTab_DomainID = umuserTab_DomainID;
+    }
+
+    public void setOrgCode(String orgCode)
+    {
+        this.orgCode = orgCode;
+    }
+
+    public String getOrgCode()
+    {
+        return orgCode;
+    }
+
+    public String getUserName()
+    {
+        return userName;
+    }
+
+    public void setUserId(String userId)
+    {
+        this.userId = userId;
+    }
+
+    public void setUserName(String userName)
+    {
+        this.userName = userName;
+    }
+
+    public void setUserIP(String userIP)
+    {
+        this.userIP = userIP;
+    }
+
+    public void setLoginName(String loginName)
+    {
+        this.loginName = loginName;
+    }
+
+    public void setSuperUser(boolean superUser)
+    {
+        this.superUser = superUser;
+    }
+
+    public void setLoginTime(Date loginTime)
+    {
+        this.loginTime = loginTime;
+    }
+
+    public void setSessionId(String sessionId)
+    {
+        this.sessionId = sessionId;
+    }
+
+    public void setRoles(List roles)
+    {
+        this.roles = roles;
+    }
+
+    public void setMenuBars(List menuBars)
+    {
+        this.menuBars = menuBars;
+    }
+
+    public void setMailLoginName(String mailLoginName)
+    {
+        this.mailLoginName = mailLoginName;
+    }
+
+    public String getUserId()
+    {
+        return userId;
+    }
+
+    public String getUserIP()
+    {
+        return userIP;
+    }
+
+    public String getLoginName()
+    {
+        return loginName;
+    }
+
+    public boolean isSuperUser()
+    {
+        return superUser;
+    }
+
+    public String getIsPoliceman()
+    {
+        return isPoliceman;
+    }
+
+    public void setIsPoliceman(String yes)
+    {
+        this.isPoliceman = yes;
+    }
+
+    public Date getLoginTime()
+    {
+        return loginTime;
+    }
+
+    public String getSessionId()
+    {
+        return sessionId;
+    }
+
+    public List getRoles()
+    {
+        return roles;
+    }
+
+    public List getMenuBars()
+    {
+        return menuBars;
+    }
+
+    public String getMailLoginName()
+    {
+        return mailLoginName;
+    }
+
+    // ��ѯSQL
+    public String getSQL(String permcolumn)
+    {
+        String str = " 1=0 ";
+        if (StringUtils.isNotBlank(orgCode))
+        {
+            int orgCodeLen = orgCode.length() / 5;
+            for (int i = 0; i < orgCodeLen; i++)
+            {
+                String org = orgCode.substring(0, (i + 1) * 5);
+                str = str + "or " + permcolumn + " LIKE '%Organization-" + org + ",%' ";
+            }
+        }
+        for (int i = 0; i < this.getRoles().size(); i++)
+        {
+            String roleid = (String) this.getRoles().get(i);
+            str = str + " or " + permcolumn + " LIKE '%Role-" + roleid + ",%' ";
+        }
+        return str;
+    }
+
+    public String getSQL2(String permcolumn)
+    {
+        String str = " ";
+        str = str + permcolumn + " LIKE '%User-" + this.getUserId() + ",%' ";
+
+        int orgCodeLen = orgCode.length() / 5;
+        for (int i = 0; i < orgCodeLen; i++)
+        {
+            String org = orgCode.substring(0, (i + 1) * 5);
+            str = str + "or " + permcolumn + " LIKE '%Organization-" + org + ",%' ";
+        }
+        for (int i = 0; i < this.getRoles().size(); i++)
+        {
+            Map rolemap = (Map) this.getRoles().get(i);
+            String roleid = (String) rolemap.get("UMRoleID");
+            str = str + " or " + permcolumn + " LIKE '%Role-" + roleid + ",%' ";
+        }
+        return str;
+    }
+
+    // �ĵ�ǩ��
+    public String getSQL_WD(String permcolumn)
+    {
+        String str = " ";
+        for (int i = 0; i < this.getRoles().size(); i++)
+        {
+            Map rolemap = (Map) this.getRoles().get(i);
+            String roleid = (String) rolemap.get("UMRoleID");
+            str = str + " or " + permcolumn + " LIKE '%Role-" + roleid + ",%' ";
+        }
+        return str;
+    }
+
+    public String getDataPermSQL(String permcolumn, String permission, String domaintype)
+    {
+
+        String str = "  ( ";
+        str = str + permcolumn + " LIKE '%User-" + this.getUserId() + "-" + permission
+                + ",%' ";
+
+        int orgCodeLen = this.getOrgCode().length() / 5;
+        for (int i = 0; i < orgCodeLen; i++)
+        {
+            String org = orgCode.substring(0, (i + 1) * 5);
+            str = str + " or " + permcolumn + " LIKE '%Organization-" + org + "-"
+                    + permission + ",%' ";
+        }
+
+        for (int i = 0; i < this.getRoles().size(); i++)
+        {
+            Map roleMap = (Map) this.getRoles().get(i);
+            String roleid = (String) roleMap.get("UMRoleID");
+            str = str + " or " + permcolumn + " LIKE '%Role-" + roleid + "-" + permission
+                    + ",%' ";
+        }
+
+        str = str + " ) ";
+        return str;
+
+    }
+
+    public boolean checkUMStr(String str)
+    {
+        String userid = this.getUserId();
+        if (str.indexOf("User-" + userid) != -1)
+        {
+            return true;
+        }
+        if (str.indexOf("Organization-" + orgCode) != -1)
+        {
+            return true;
+        }
+        List roles = this.getRoles();
+        for (int i = 0; i < roles.size(); i++)
+        {
+            Integer roleid = (Integer) roles.get(i);
+            if (str.indexOf("Role-" + roleid) != -1)
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public boolean iswd_role(String roleweid)
+    {
+        List roles = this.getRoles();
+        for (int i = 0; i < roles.size(); i++)
+        {
+            Map map = (Map) roles.get(i);
+            String roleid = (String) map.get("UMROLEID");
+            if (roleweid.equals(roleid + "")) return true;
+        }
+        return false;
+    }
+
+    public String getRole()
+    {
+        return role;
+    }
+
+    public void setRole(String role)
+    {
+        this.role = role;
+    }
+}

+ 37 - 0
src/com/acc/framework/session/dao/OnlineSessionDAO.java

@@ -0,0 +1,37 @@
+package com.acc.framework.session.dao;
+
+import java.util.HashMap;
+
+import com.acc.common.jdbc.JdbcDaoSupportEx;
+import com.acc.common.jdbc.JdbcTemplateEx;
+import com.acc.framework.session.UserInfo;
+
+public class OnlineSessionDAO extends JdbcDaoSupportEx
+{
+	public void deleteOnline()
+	{
+		JdbcTemplateEx template = this.getJdbcTemplate();
+		String sql = "delete from LGOnline ";
+		template.execute(sql);
+	}
+
+	public void deleteSessionById(String sessionId)
+	{
+		JdbcTemplateEx template = this.getJdbcTemplate();
+		String sql = "delete from LGOnline where SessionID='" + sessionId + "'";
+		template.execute(sql);
+	}
+
+	public void insertSessionByUserInfo(UserInfo userinfo)
+	{
+		JdbcTemplateEx template = this.getJdbcTemplate();
+		HashMap dbmap = new HashMap();
+		dbmap.put("SessionID", userinfo.getSessionId());
+		dbmap.put("UserID", userinfo.getUserId());
+		dbmap.put("LoginName", userinfo.getLoginName());
+		dbmap.put("UserName", userinfo.getUserName());
+		dbmap.put("UserIP", userinfo.getUserIP());
+		dbmap.put("LoginTime", userinfo.getLoginTime());
+		template.insertMap(dbmap, "LGOnline");
+	}
+}

+ 58 - 0
src/com/acc/framework/session/sql/OnlineSQL.java

@@ -0,0 +1,58 @@
+package com.acc.framework.session.sql;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import com.acc.common.jdbc.ISQL;
+
+public class OnlineSQL implements ISQL
+{
+	private Log log = LogFactory.getLog(this.getClass());
+
+	public String getSQL(HttpServletRequest request, ServletConfig config)
+	{
+		String field = request.getParameter("field");
+		if (field == null || field.equals("")) field = "LoginTime";
+		String type = request.getParameter("type");
+		if (type == null || type.equals("")) type = "asc";
+
+		String sql = "select * from LGOnline where 1=1 ";
+		String userID = request.getParameter("userID");
+		if (userID != null && userID.length() > 0)
+		{
+			sql = sql + " and userID like '%" + userID + "%'";
+		}
+		String LoginName = request.getParameter("LoginName");
+		if (LoginName != null && LoginName.length() > 0)
+		{
+			LoginName = StringEscapeUtils.escapeSql(LoginName);
+			sql = sql + " and LoginName like '%" + LoginName + "%'";
+		}
+		String userName = request.getParameter("userName");
+		if (userName != null && userName.length() > 0)
+		{
+			userName = StringEscapeUtils.escapeSql(userName);
+			sql = sql + " and userName like '%" + userName + "%'";
+		}
+		// 登录时间
+		String startTime = request.getParameter("startTime");
+		if (startTime != null && startTime.trim().length() > 0)
+		{
+			sql = sql + " and LoginTime >= to_date('" + startTime + " 00:00:00"
+					+ "','yyyy-mm-dd hh24:mi:ss')";
+		}
+		String endTime = request.getParameter("endTime");
+		if (endTime != null && endTime.trim().length() > 0)
+		{
+			sql = sql + " and LoginTime <=to_date('" + endTime + " 23:59:59"
+					+ "','yyyy-mm-dd hh24:mi:ss')";
+		}
+		sql = sql + " order by " + field + " " + type;
+		log.debug(sql);
+		return sql;
+	}
+}

+ 2 - 0
src/commons-logging.properties

@@ -0,0 +1,2 @@
+#org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
+org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JCategoryLog

+ 37 - 0
src/log4j.properties

@@ -0,0 +1,37 @@
+
+# A sample log4j configuration file
+
+# Create two appenders, one called stdout and the other called rolling
+log4j.rootLogger=INFO, stdout,rolling
+log4j.logger.org.apache.struts2=WARN
+log4j.logger.org.apache.commons=WARN
+log4j.logger.httpclient.wire=INFO
+log4j.logger.com.acc=INFO
+log4j.logger.com.acc.document=INFO
+log4j.logger.org.springframework=INFO
+
+
+# Configure the stdout appender to go to the Console
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+
+#  Configure the stdout appender to use the PatternLayout
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+
+# Pattern to output the caller's file name and line number.
+log4j.appender.stdout.layout.ConversionPattern=[message]:%-p %m%n[class]:%c%n[time]:%d%n%n
+
+# Configure the rolling appender to be a RollingFileAppender
+log4j.appender.rolling=org.apache.log4j.RollingFileAppender
+
+# Configure the name of the logout for the rolling appender
+log4j.appender.rolling.File=output.log
+
+# Set up the maximum size of the rolling log file
+log4j.appender.rolling.MaxFileSize=1MB
+
+# Keep one backup file of the rolling appender
+log4j.appender.rolling.MaxBackupIndex=1
+
+# Configure the Layout pattern and conversion pattern for the rolling appender
+log4j.appender.rolling.layout=org.apache.log4j.PatternLayout
+log4j.appender.rolling.layout.ConversionPattern=%d %-p %c - %m%n

+ 2 - 0
src/run.bat

@@ -0,0 +1,2 @@
+del ApplicationResources.properties 
+native2ascii ApplicationResources_src.properties ApplicationResources.properties

+ 58 - 0
src/struts.xml

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="GBK"?>
+<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
+	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
+<struts>
+
+	<!-- 指定struts 2处于开发状态 -->
+	<constant name="struts.devMode" value="true" />
+	<!-- 指定当struts2 配置文件改变后,Web 框架是否重新加载配置文件 -->
+	<constant name="struts.configuration.xml.reload" value="true" />
+	<!-- 系统每次请求是否重新加载文件 (开发阶段为true,发布为false)-->
+	<constant name="struts.i18n.reload" value="true" />
+	<!-- 设置strus2是否支持动态方法调用 
+		<constant name="struts.enable.DynamicMethodInvocation" value="true" />
+	-->
+	<!-- 设置资源文件前缀 -->
+	<constant name="struts.custom.i18n.resources"
+		value="ApplicationResources" />
+
+
+	<package name="system" extends="struts-default">
+		<interceptors>
+			<!-- 用户登录验证 -->
+			<interceptor name="PermissionFilter"
+				class="com.acc.framework.permission.PermissionFilter" />
+			<interceptor-stack name="system-default">
+				<!-- 默认拦截器 -->
+				<interceptor-ref name="defaultStack" />
+				<!-- 用户登录拦截器 -->
+				<interceptor-ref name="PermissionFilter" />
+			</interceptor-stack>
+		</interceptors>
+		<!-- 覆盖struts2 默认拦截器-->
+		<default-interceptor-ref name="system-default" />
+		<global-results>
+			<result name="error">/errorPage.jsp</result>
+		</global-results>
+		<global-exception-mappings>
+			<exception-mapping result="error"
+				exception="java.lang.Exception">
+			</exception-mapping>
+		</global-exception-mappings>
+
+	</package>
+
+
+	<!-- Struts2的所有Action都需位于package下 -->
+	<package name="umuser" extends="struts-default" namespace="/user">
+		<action name="*_empAction" class="empAction" method="{1}">
+			<result name="SUCCESS">/jsp/hc/emp/emp_{1}view.jsp</result>
+			<result name="SUCCESS_UPDATE">
+				/jsp/hc/emp/emp_updateview.jsp
+			</result>
+			<result name="LIST">/jsp/hc/emp/emp_listview.jsp</result>
+		</action>
+	</package>
+
+	<include file="../struts-systemmanager.xml" />
+</struts>

+ 44 - 0
web/404page.jsp

@@ -0,0 +1,44 @@
+<%@ page contentType="text/html; charset=GBK"%>
+<%
+    String prefix = request.getContextPath();
+%>
+<html>
+	<head>
+		<title></title>
+		<LINK REL="stylesheet" type="text/css"
+			href="<%=prefix%>/css/style.css" />
+	<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
+		<table width="90%" border="0" cellspacing="0" cellpadding="0"
+			align="center">
+			<tr>
+				<td height="59">
+					<img src="<%=prefix%>/menubar/icons/33.gif" width="45" height="44"
+						align="absmiddle">
+					<strong><font color="#006699" size="3">服务器信息</font>
+					</strong>
+				</td>
+			</tr>
+		</table>
+		<br>
+		<table width="90%" border="0" align="center" cellpadding="1"
+			cellspacing="1" bordercolordark="#e5e7ec" bgcolor="#999999">
+			<tr bgcolor="#78A4DA">
+				<td height="22" class="white">
+					<b> <img src="<%=prefix%>/images/pageicon.gif" width="18"
+							height="10" align="absmiddle"> <font color="#FFFFFF">服务器信息</font>
+					</b>
+				</td>
+			</tr>
+			<tr>
+				<td bgcolor="#E8E8E8" class="contentTable">
+					<img src="<%=prefix%>/images/spacer.gif" width="40">
+					系统没有找到该文件
+
+					<br>
+					<br>
+					<br>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>

+ 33 - 0
web/500page.jsp

@@ -0,0 +1,33 @@
+<%@ page contentType="text/html; charset=GBK" %>
+<%
+    String prefix = request.getContextPath();
+%>
+<html>
+<head><title>核查即录入工作系统</title>
+<LINK REL="stylesheet" type="text/css" href="<%=prefix%>/css/style.css"/>
+<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" >
+<table width="90%" border="0" cellspacing="0" cellpadding="0" align="center">
+    <tr>
+        <td height="59"><img src="<%=prefix%>/menubar/icons/33.gif" width="45" height="44" align="absmiddle">
+            <strong><font color="#006699" size="3">服务器信息</font></strong>
+        </td>
+    </tr>
+</table>
+<br>
+<table width="90%" border="0" align="center" cellpadding="1" cellspacing="1" bordercolordark="#e5e7ec" bgcolor="#999999">
+    <tr bgcolor="#78A4DA">
+        <td height="22" class="white"><b>
+            <img src="<%=prefix%>/images/pageicon.gif" width="18" height="10" align="absmiddle">
+            <font color="#FFFFFF">服务器信息</font></b>
+        </td>
+    </tr>
+    <tr>
+        <td bgcolor="#E8E8E8" class="contentTable">
+            <img src="<%=prefix%>/images/spacer.gif" width="40">
+           		系统故障!请稍候再试!
+            <br><br><br>
+        </td>
+    </tr>
+</table>
+</body>
+</html>

BIN
web/WEB-INF/lm/org.springframework.aop-3.1.0.RELEASE.jar


BIN
web/WEB-INF/lm/org.springframework.asm-3.1.0.RELEASE.jar


BIN
web/WEB-INF/lm/org.springframework.aspects-3.1.0.RELEASE.jar


BIN
web/WEB-INF/lm/org.springframework.beans-3.1.0.RELEASE.jar


BIN
web/WEB-INF/lm/org.springframework.context-3.1.0.RELEASE.jar


BIN
web/WEB-INF/lm/org.springframework.context.support-3.1.0.RELEASE.jar


BIN
web/WEB-INF/lm/org.springframework.core-3.1.0.RELEASE.jar


BIN
web/WEB-INF/lm/org.springframework.expression-3.1.0.RELEASE.jar


BIN
web/WEB-INF/lm/org.springframework.instrument-3.1.0.RELEASE.jar


BIN
web/WEB-INF/lm/org.springframework.instrument.tomcat-3.1.0.RELEASE.jar


BIN
web/WEB-INF/lm/org.springframework.jdbc-3.1.0.RELEASE.jar


BIN
web/WEB-INF/lm/org.springframework.jms-3.1.0.RELEASE.jar


BIN
web/WEB-INF/lm/org.springframework.orm-3.1.0.RELEASE.jar


BIN
web/WEB-INF/lm/org.springframework.oxm-3.1.0.RELEASE.jar


BIN
web/WEB-INF/lm/org.springframework.web-3.1.0.RELEASE.jar


BIN
web/WEB-INF/lm/org.springframework.web.portlet-3.1.0.RELEASE.jar


BIN
web/WEB-INF/lm/org.springframework.web.servlet-3.1.0.RELEASE.jar


BIN
web/WEB-INF/lm/org.springframework.web.struts-3.1.0.RELEASE.jar


+ 55 - 0
web/admin_top.jsp

@@ -0,0 +1,55 @@
+<html>
+<head>
+<title>管理页面</title>
+<script language=JavaScript>
+function logout(){
+	if (confirm("您确定要退出控制面板吗?"))
+	top.location = "out.asp";
+	return false;
+}
+</script>
+<script language=JavaScript1.2>
+function showsubmenu(sid) {
+	var whichEl = eval("submenu" + sid);
+	var menuTitle = eval("menuTitle" + sid);
+	if (whichEl.style.display == "none"){
+		eval("submenu" + sid + ".style.display=\"\";");
+	}else{
+		eval("submenu" + sid + ".style.display=\"none\";");
+	}
+}
+</script>
+<meta http-equiv=Content-Type content=text/html;charset=utf-8>
+<meta http-equiv="refresh" content="60">
+<script language=JavaScript1.2>
+function showsubmenu(sid) {
+	var whichEl = eval("submenu" + sid);
+	var menuTitle = eval("menuTitle" + sid);
+	if (whichEl.style.display == "none"){
+		eval("submenu" + sid + ".style.display=\"\";");
+	}else{
+		eval("submenu" + sid + ".style.display=\"none\";");
+	}
+}
+</script>
+<base target="main">
+<link href="images/skin.css" rel="stylesheet" type="text/css">
+</head>
+<body leftmargin="0" topmargin="0">
+<table width="100%" height="64" border="0" cellpadding="0" cellspacing="0" class="admin_topbg">
+  <tr>
+    <td width="61%" height="64"><img src="images/logo.gif" width="262" height="64"></td>
+    <td width="39%" valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="0">
+      <tr>
+        <td width="74%" height="38" class="admin_txt">管理员:<b>admin_name</b> 您好,感谢登陆使用!</td>
+        <td width="22%"><a href="#" target="_self" onClick="logout();"><img src="images/out.gif" alt="安全退出" width="46" height="20" border="0"></a></td>
+        <td width="4%">&nbsp;</td>
+      </tr>
+      <tr>
+        <td height="19" colspan="3">&nbsp;</td>
+        </tr>
+    </table></td>
+  </tr>
+</table>
+</body>
+</html>

+ 311 - 0
web/admintitle.jsp

@@ -0,0 +1,311 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"
+	buffer="64kb"%>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
+
+<style type="text/css">
+<!--
+body {
+	margin-left: 0px;
+	margin-top: 0px;
+	margin-right: 0px;
+	margin-bottom: 0px;
+	background-color: #F8F9FA;
+}
+-->
+</style>
+
+<link href="images/skin.css" rel="stylesheet" type="text/css" />
+<body>
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+  <tr>
+    <td width="17" height="29" valign="top" background="images/mail_leftbg.gif"><img src="images/left-top-right.gif" width="17" height="29" /></td>
+    <td width="935" height="29" valign="top" background="images/content-bg.gif"><table width="100%" height="31" border="0" cellpadding="0" cellspacing="0" class="left_topbg" id="table2">
+      <tr>
+        <td height="31"><div class="titlebt">基本设置</div></td>
+      </tr>
+    </table></td>
+    <td width="16" valign="top" background="images/mail_rightbg.gif"><img src="images/nav-right-bg.gif" width="16" height="29" /></td>
+  </tr>
+  <tr>
+    <td height="71" valign="middle" background="images/mail_leftbg.gif">&nbsp;</td>
+    <td valign="top" bgcolor="#F7F8F9"><table width="100%" height="138" border="0" cellpadding="0" cellspacing="0">
+      <tr>
+        <td height="13" valign="top">&nbsp;</td>
+      </tr>
+      <tr>
+        <td valign="top"><table width="98%" border="0" align="center" cellpadding="0" cellspacing="0">
+          <tr>
+            <td class="left_txt">当前位置:基本设置</td>
+          </tr>
+          <tr>
+            <td height="20"><table width="100%" height="1" border="0" cellpadding="0" cellspacing="0" bgcolor="#CCCCCC">
+              <tr>
+                <td></td>
+              </tr>
+            </table></td>
+          </tr>
+          <tr>
+            <td><table width="100%" height="55" border="0" cellpadding="0" cellspacing="0">
+              <tr>
+                <td width="10%" height="55" valign="middle"><img src="images/title.gif" width="54" height="55"></td>
+                <td width="90%" valign="top"><span class="left_txt2">在这里,您可以根据您的网站要求,修改设置网站的</span><span class="left_txt3">基本参数</span><span class="left_txt2">!</span><br>
+                          <span class="left_txt2">包括</span><span class="left_txt3">网站名称,网址,网站备案号,联系方式,网站公告,关键词,风格</span><span class="left_txt2">等以及网站</span><span class="left_txt3">会员及等级积分设置</span><span class="left_txt2">。 </span></td>
+              </tr>
+            </table></td>
+          </tr>
+          <tr>
+            <td>&nbsp;</td>
+          </tr>
+          <tr>
+            <td><table width="100%" height="31" border="0" cellpadding="0" cellspacing="0" class="nowtable">
+              <tr>
+                <td class="left_bt2">&nbsp;&nbsp;&nbsp;&nbsp;系统参数设置</td>
+              </tr>
+            </table></td>
+          </tr>
+          <tr>
+            <td><table width="100%" border="0" cellspacing="0" cellpadding="0">
+			<form name="form1" method="POST" action="admintitlechk.asp">
+              <tr>
+                <td width="20%" height="30" align="right" bgcolor="#f2f2f2" class="left_txt2">设定网站名称:</td>
+                <td width="3%" bgcolor="#f2f2f2">&nbsp;</td>
+                <td width="32%" height="30" bgcolor="#f2f2f2"><input name="title" type="text" id="title" size="30" /></td>
+                <td width="45%" height="30" bgcolor="#f2f2f2" class="left_txt">网站名称</td>
+              </tr>
+              <tr>
+                <td height="30" align="right" class="left_txt2">网站访问地址:</td>
+                <td>&nbsp;</td>
+                <td height="30"><input type="text" name="web" size="30" /></td>
+                <td height="30" class="left_txt">网站的网址</td>
+              </tr>
+              <tr>
+                <td height="30" align="right" bgcolor="#f2f2f2" class="left_txt2">网站备案证号:</td>
+                <td bgcolor="#f2f2f2">&nbsp;</td>
+                <td height="30" bgcolor="#f2f2f2"><input type="text" name="logo" size="25" /></td>
+                <td height="30" bgcolor="#f2f2f2" class="left_txt">信息产业部备案号</td>
+              </tr>
+              <tr>
+                <td height="30" align="right" class="left_txt2">联系电话信息: </td>
+                <td>&nbsp;</td>
+                <td height="30"><input type="text" name="tel" size="30" /></td>
+                <td height="30" class="left_txt">设置网站联系电话</td>
+              </tr>
+              <tr>
+                <td height="30" align="right" bgcolor="#f2f2f2" class="left_txt2">网站客服QQ:</td>
+                <td bgcolor="#f2f2f2">&nbsp;</td>
+                <td height="30" bgcolor="#f2f2f2"><input type="text" name="myqq" size="30" /></td>
+                <td height="30" bgcolor="#f2f2f2" class="left_txt">设置网站客服QQ号</td>
+              </tr>
+              <tr>
+                <td height="30" align="right" bgcolor="#F7F8F9" class="left_txt2">网站客服QQ2:</td>
+                <td bgcolor="#F7F8F9">&nbsp;</td>
+                <td height="30" bgcolor="#F7F8F9"><input type="text" name="myqq2" size="30" /></td>
+                <td height="30" bgcolor="#F7F8F9" class="left_txt">设置网站客服QQ2号</td>
+              </tr>
+              <tr>
+                <td height="30" align="right" bgcolor="#F2F2F2" class="left_txt2">管理员邮箱:</td>
+                <td bgcolor="#F2F2F2">&nbsp;</td>
+                <td height="30" bgcolor="#F2F2F2"><input name="mymail" type="text" id="mymail" size="30" /></td>
+                <td height="30" bgcolor="#F2F2F2"><span class="left_txt">设置网站客服Email</span></td>
+              </tr>
+              <tr>
+                <td height="30" align="right" class="left_txt2">网站滚动通知:</td>
+                <td>&nbsp;</td>
+                <td height="30"><input type="text" name="addinfo" size="30" /></td>
+                <td height="30"><span class="left_txt">设置网站滚动公告内容,支持HTML</span></td>
+              </tr>
+              <tr>
+                <td height="30" align="right" bgcolor="#f2f2f2" class="left_txt2">关键词设置为: </td>
+                <td bgcolor="#f2f2f2">&nbsp;</td>
+                <td height="30" bgcolor="#f2f2f2"><input type="text" name="ci" size="30" /></td>
+                <td height="30" bgcolor="#f2f2f2"><span class="left_txt">设置网站的关键词,更容易被搜索引挚找到。</span></td>
+              </tr>
+              <tr>
+                <td height="30" align="right" class="left_txt2">是否开启复制功能:</td>
+                <td>&nbsp;</td>
+                <td height="30"><input type="text" name="kkk" size="4" /></td>
+                <td height="30" class="left_txt">是否禁止外部复制功能 0关闭,1开启</td>
+              </tr>
+              <tr>
+                <td height="30" align="right" bgcolor="#f2f2f2" class="left_txt2">网站风格设置:</td>
+                <td bgcolor="#f2f2f2">&nbsp;</td>
+                <td height="30" bgcolor="#f2f2f2"><input type="text" name="css" size="24" /></td>
+                <td height="30" bgcolor="#f2f2f2" class="left_txt">尾部加/ CSS样式定义内容用</td>
+              </tr>
+              <tr>
+                <td height="30" align="right" class="left_txt2">程序授权注册码:</td>
+                <td>&nbsp;</td>
+                <td height="30"><input name="zhengban" type="text" id="zhengban" size="24" /></td>
+                <td height="30" class="left_txt">网站正版授权注册码!</td>
+              </tr>
+              
+              <tr>
+                <td height="30" align="right" bgcolor="#f2f2f2" class="left_txt2">51LA网站统计ID:</td>
+                <td bgcolor="#f2f2f2">&nbsp;</td>
+                <td height="30" bgcolor="#f2f2f2"><input name="tongj" type="text" id="tongj" size="15" /></td>
+                <td height="30" bgcolor="#f2f2f2" class="left_txt">51la统计ID,换成您的统计ID号即可 (<a href="http://www.51.la/reg.asp" target="_blank">免费注册51la统计</a>)</td>
+              </tr>
+              <tr>
+                <td height="30" align="right" class="left_txt2">后台管理文件夹:</td>
+                <td>&nbsp;</td>
+                <td height="30"><input type="text" name="foxa" size="24" /></td>
+                <td height="30" class="left_txt">加强安全性,修改后请将后台管理文件夹改为此名</td>
+              </tr>
+              <tr>
+                <td height="17" colspan="4" align="right" >&nbsp;</td>
+              </tr>
+              <tr>
+                <td height="30" colspan="4" align="right" class="left_txt2"><table width="100%" height="31" border="0" cellpadding="0" cellspacing="0" class="nowtable">
+                  <tr>
+                    <td class="left_bt2">&nbsp;&nbsp;&nbsp;&nbsp;会员类型及属性</td>
+                  </tr>
+                </table></td>
+              </tr>
+              <tr>
+                <td height="30" colspan="4" class="left_txt2"><table width="100%" height="99" border="0" cellpadding="0" cellspacing="0">
+                  <tr>
+                    <td width="20%" height="30" align="right" bgcolor="#f2f2f2" class="left_txt">①
+                      <input type="text"  name="aname" size="10" class="button01" />
+                      会员 </td>
+                    <td width="20%" height="30" align="right" bgcolor="#f2f2f2" class="left_txt">有效期:
+                      
+                      天</td>
+                    <td width="60%" height="30" align="right" bgcolor="#f2f2f2" class="left_txt">&nbsp;</td>
+                  </tr>
+                  <tr>
+                    <td height="30" align="right" class="left_txt">②
+                      <input type="text"  name="bname" size="10" class="button01" />
+                      会员</td>
+                    <td height="30" align="right" class="left_txt">转换率:</td>
+                    <td height="30" align="right" class="left_txt">&nbsp;</td>
+                  </tr>
+                  <tr>
+                    <td height="30" align="right" bgcolor="#f2f2f2" class="left_txt">③
+                      <input type="text" s name="cname" size="10" class="button01" />
+                      会员</td>
+                    <td height="30" align="right" bgcolor="#f2f2f2" class="left_txt">有效期:
+                      <input type="text"  name="dqsjc" size="5" class="button01" />
+                      <input type="text"  name="dqsja" size="5" class="button01" />
+                      天</td>
+                    <td height="30" align="right" bgcolor="#f2f2f2" class="left_txt">&nbsp;</td>
+                  </tr>
+                  <tr>
+                    <td height="16" colspan="3" align="right">&nbsp;</td>
+                  </tr>
+                  <tr>
+                    <td colspan="3" align="right">&nbsp;</td>
+                  </tr>
+                  <tr>
+                    <td colspan="3" align="right"><table width="100%" height="31" border="0" cellpadding="0" cellspacing="0" class="nowtable">
+                      <tr>
+                        <td class="left_bt2">&nbsp;&nbsp;&nbsp;&nbsp;设&nbsp; 置</td>
+                      </tr>
+                    </table></td>
+                  </tr>
+                </table></td>
+              </tr>
+              <tr>
+                <td height="30" colspan="4" class="left_txt"><table width="100%" height="90" border="0" cellpadding="0" cellspacing="0">
+                  <tr>
+                    <td width="27%" align="center" bgcolor="#f2f2f2" class="left_txt">会员升会员需:</td>
+                    <td width="27%" bgcolor="#f2f2f2" class="left_txt"><input type="text" style="color=red" name="asb"  size="2" class="button01" /></td>
+                    <td width="24%" bgcolor="#f2f2f2" class="left_txt"> 会员升会员需</td>
+                    <td width="22%" bgcolor="#f2f2f2" class="left_txt"><input type="text" style="color=red" name="bsc" size="2" class="button01" /></td>
+                  </tr>
+                  <tr>
+                    <td align="center" class="left_txt">注册会员送:</td>
+                    <td class="left_txt"><input type="text" style="color=red" name="dxb" size="2" class="button01" /></td>
+                    <td class="left_txt">发布信息商品消耗:</td>
+                    <td class="left_txt"><input type="text" style="color=red" name="hxb" size="2" class="button01" />
+                      /次</td>
+                  </tr>
+                  <tr>
+                    <td align="center" bgcolor="#f2f2f2" class="left_txt">发布图片信息需:</td>
+                    <td bgcolor="#f2f2f2" class="left_txt"><input type="text" style="color=red" name="tdxb" size="2" class="button01" />
+                      /次</td>
+                    <td bgcolor="#f2f2f2" class="left_txt">申请网上店铺需:</td>
+                    <td bgcolor="#f2f2f2" class="left_txt"><input type="text" style="color=red" name="ddxb" size="2" class="button01" /></td>
+                  </tr>
+                </table></td>
+                </tr>
+            </table></td>
+          </tr>
+        </table>
+          <table width="100%" border="0" cellspacing="0" cellpadding="0">
+            <tr>
+              <td colspan="3"><table width="100%" height="31" border="0" cellpadding="0" cellspacing="0" class="nowtable">
+                <tr>
+                  <td class="left_bt2">&nbsp;&nbsp;&nbsp;&nbsp;功能分或转换或消耗</td>
+                </tr>
+              </table></td>
+            </tr>
+            <tr>
+              <td height="30" colspan="3"><table width="100%" height="89" border="0" cellpadding="0" cellspacing="0">
+                <tr>
+                  <td height="30" align="center" bgcolor="#f2f2f2" class="left_txt">会员登陆1次积:
+                    <input name="dlf" type="text" class="button01" id="dlf" style="color=red" size="2" />
+分</td>
+                  <td height="30" bgcolor="#f2f2f2" class="left_txt">介绍1位积:
+                    <input name="jjf" type="text" class="button01" id="jjf" style="color=red"size="2" />
+分</td>
+                  <td height="30" bgcolor="#f2f2f2" class="left_txt">回复1次积:
+                    <input name="ddjf" type="text" class="button01" id="ddjf" style="color=red" size="2" />
+分</td>
+                  <td height="30" bgcolor="#f2f2f2" class="left_txt">积分
+                    <input name="hjf" type="text" class="button01" id="hjf" style="color=red" size="2" />
+可换1</td>
+                </tr>
+                <tr>
+                  <td height="30" align="center" class="left_txt">发布信息广告积:
+                    <input name="xxjf" type="text" class="button01" id="xxjf" style="color=red"  size="2" />
+分</td>
+                  <td height="30" class="left_txt">发布名片积:
+                    <input name="mpjf" type="text" class="button01" id="mpjf" style="color=red"  size="2" />
+分</td>
+                  <td height="30" class="left_txt">加入市场联盟积:
+                    <input name="lmjf" type="text" class="button01" id="lmjf" style="color=red" size="2" />
+分</td>
+                  <td height="30" class="left_txt">发布商品积:
+                    <input name="spjf" type="text" class="button01" id="spjf" style="color=red" size="2" />
+分</td>
+                </tr>
+                <tr>
+                  <td height="30" align="center" bgcolor="#f2f2f2" class="left_txt"><input name="gghjf" type="text" class="button01" id="gghjf" style="color=red" size="2" />
+                    换1置顶工具</td>
+                  <td height="30" bgcolor="#f2f2f2" class="left_txt">改资料1次耗:
+                    <input name="zlhjf" type="text" class="button01" id="zlhjf" style="color=red"  size="2" />
+分</td>
+                  <td height="30" bgcolor="#f2f2f2" class="left_txt">修改发布耗:
+                    <input name="xghjf" type="text" class="button01" id="xghjf" style="color=red"  size="2" />
+分</td>
+                  <td height="30" bgcolor="#f2f2f2" class="left_txt">上传认证奖:
+                    <input name="rzjf" type="text" class="button01" id="rzjf" style="color=red" size="2" />
+分</td>
+                </tr>
+              </table></td>
+            </tr>
+            
+            <tr>
+              <td height="30" colspan="3">&nbsp;</td>
+            </tr>
+            <tr>
+              <td width="50%" height="30" align="right"><input type="submit" value="完成以上修改" name="B1" /></td>
+              <td width="6%" height="30" align="right">&nbsp;</td>
+              <td width="44%" height="30"><input type="reset" value="取消设置" name="B12" /></td>
+            </tr>
+            <tr>
+              <td height="30" colspan="3">&nbsp;</td>
+            </tr>
+          </table></td>
+      </tr>
+    </table></td>
+    <td background="images/mail_rightbg.gif">&nbsp;</td>
+  </tr>
+  <tr>
+    <td valign="middle" background="images/mail_leftbg.gif"><img src="images/buttom_left2.gif" width="17" height="17" /></td>
+      <td height="17" valign="top" background="images/buttom_bgs.gif"><img src="images/buttom_bgs.gif" width="17" height="17" /></td>
+    <td background="images/mail_rightbg.gif"><img src="images/buttom_right2.gif" width="16" height="17" /></td>
+  </tr>
+</table>
+
+</body>

BIN
web/dsrw.war


+ 0 - 0
web/errorPage.jsp


+ 15 - 0
web/index.jsp

@@ -0,0 +1,15 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv=Content-Type content=text/html;charset=utf-8>
+</head>
+<frameset rows="64,*"  frameborder="no" border="0" framespacing="0">
+	<frame src="admin_top.jsp" noresize="noresize" frameborder="no" name="topFrame" scrolling="no" marginwidth="0" marginheight="0" target="main" />
+  <frameset cols="200,*"  rows="560,*" id="frame">
+	<frame src="left.jsp" name="leftFrame" noresize="noresize" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" target="main" />
+	<frame src="right.jsp" name="main" marginwidth="0" marginheight="0" frameborder="0" scrolling="auto" target="_self" />
+  </frameset>
+<noframes>
+  <body></body>
+    </noframes>
+</html>

BIN
web/js/date/skin/whyGreen/Thumbs.db.keep


BIN
web/js/date/skin/whyGreen/bg.jpg


BIN
web/js/date/skin/whyGreen/bg.jpg.keep


+ 249 - 0
web/js/date/skin/whyGreen/datepicker.css

@@ -0,0 +1,249 @@
+/* 
+ * My97 DatePicker 4.0
+ * 皮肤名称:whyGreen
+ * 皮肤作者:why
+ */
+ 
+/* 日期选择容器 DIV */
+.WdateDiv{
+	width:180px;
+	background-color:#fff;
+	border:#C5E1E4 1px solid;
+	padding:2px;
+}
+.WdateDiv *{font-size:9pt;}
+
+/****************************
+ * 导航图标
+ ***************************/
+.WdateDiv .NavImg {
+	cursor:pointer;
+	width:16px;
+	height:16px;
+}
+.WdateDiv .NavImgll {
+	background-image:url(navLeft.gif);
+}
+.WdateDiv .NavImgl {
+	background-image:url(left.gif);
+}
+.WdateDiv .NavImgr {
+	background-image:url(right.gif);
+}
+.WdateDiv .NavImgrr {
+	background-image:url(navRight.gif);
+}
+/****************************
+ * 年份月份相关
+ ***************************/
+/* 年份月份栏 DIV */
+.WdateDiv #dpTitle{
+	height:24px;
+	border:#c5d9e8 1px solid;
+	background:url(bg.jpg);
+	margin-bottom:2px;
+}
+/* 年份月份输入框 INPUT */
+.WdateDiv .yminput{
+	margin-top:2px;
+	text-align:center;
+	border:0px;
+	height:16px;
+	width:50px;
+	color:#034c50;
+	background-color:transparent;
+	cursor:pointer;
+}
+/* 年份月份输入框获得焦点时的样式 INPUT */
+.WdateDiv .yminputfocus{
+	margin-top:2px;
+	text-align:center;
+	border:#939393 1px solid;
+	font-weight:bold;
+	color:#034c50;	
+	height:16px;
+	width:50px;
+}
+/* 菜单选择框 DIV */
+.WdateDiv .menuSel{
+	position:absolute;
+	background-color:#FFFFFF;
+	border:#A3C6C8 1px solid;
+	display:none;
+}
+/* 菜单的样式 TD */
+.WdateDiv .menu{
+	cursor:pointer;
+	background-color:#fff;
+	color:#11777C;
+}
+/* 菜单的mouseover样式 TD */
+.WdateDiv .menuOn{
+	cursor:pointer;
+	background-color:#BEEBEE;
+}
+/* 菜单无效时的样式 TD */
+.WdateDiv .invalidMenu{
+	color:#aaa;
+}
+/* 年选择框的偏移 DIV */
+.WdateDiv .YMenu{
+	margin-top:16px;
+}
+/* 月选择框的偏移 DIV */
+.WdateDiv .MMenu{
+	margin-top:16px;
+	*width:62px;
+}
+/* 时选择框的位置 DIV */
+.WdateDiv .hhMenu{
+	margin-top:-90px; 
+	margin-left:26px;
+}
+/* 分选择框的位置 DIV */
+.WdateDiv .mmMenu{
+	margin-top:-46px; 
+	margin-left:26px;
+}
+/* 秒选择框的位置 DIV */
+.WdateDiv .ssMenu{
+	margin-top:-24px; 
+	margin-left:26px;
+}
+
+/****************************
+ * 周相关
+ ***************************/
+ .WdateDiv .Wweek {
+ 	text-align:center;
+	background:#DAF3F5;
+	border-right:#BDEBEE 1px solid;
+ }
+/****************************
+ * 星期,日期相关
+ ***************************/
+ /* 星期栏 TR */
+.WdateDiv .MTitle{
+	color:#13777e;
+	background-color:#bdebee;
+}
+/* 日期栏表格 TABLE */
+.WdateDiv .WdayTable{
+	line-height:20px;	
+	color:#13777e;
+	background-color:#edfbfb;
+	border:#BEE9F0 1px solid;
+}
+/* 日期格的样式 TD */
+.WdateDiv .Wday{
+	cursor:pointer;
+}
+/* 日期格的mouseover样式 TD */
+.WdateDiv .WdayOn{
+	cursor:pointer;
+	background-color:#74d2d9 ;
+}
+/* 周末日期格的样式 TD */
+.WdateDiv .Wwday{
+	cursor:pointer;
+	color:#ab1e1e;
+}
+/* 周末日期格的mouseover样式 TD */
+.WdateDiv .WwdayOn{
+	cursor:pointer;
+	background-color:#74d2d9;
+}
+.WdateDiv .Wtoday{
+	cursor:pointer;
+	color:blue;
+}
+.WdateDiv .Wselday{
+	background-color:#A7E2E7;
+}
+/* 其他月份的日期 */
+.WdateDiv .WotherDay{ 
+	cursor:pointer;
+	color:#0099CC;	
+}
+/* 其他月份的日期mouseover样式 */
+.WdateDiv .WotherDayOn{ 
+	cursor:pointer;
+	background-color:#C0EBEF;	
+}
+/* 无效日期的样式,即在日期范围以外日期格的样式,不能选择的日期 */
+.WdateDiv .WinvalidDay{
+	color:#aaa;
+}
+/****************************
+ * 时间相关
+ ***************************/
+/* 时间栏 DIV */
+.WdateDiv #dpTime{
+	
+}
+/* 时间文字 SPAN */
+.WdateDiv #dpTime #dpTimeStr{
+	margin-left:1px;
+	color:#497F7F;
+}
+/* 时间输入框 INPUT */
+.WdateDiv #dpTime input{
+	height:16px;
+	width:18px;
+	text-align:center;
+	color:#333;
+	border:#61CAD0 1px solid;	
+}
+/* 时间 时 INPUT */
+.WdateDiv #dpTime .tB{
+	border-right:0px;
+}
+/* 时间 分和间隔符 ':' INPUT */
+.WdateDiv #dpTime .tE{
+	border-left:0;
+	border-right:0;
+}
+/* 时间 秒 INPUT */
+.WdateDiv #dpTime .tm{
+	width:7px;
+	border-left:0;
+	border-right:0;
+}
+/* 时间右边的向上按钮 BUTTON */
+.WdateDiv #dpTime #dpTimeUp{
+	height:10px;
+	width:13px;
+	border:0px;
+	background-image:url(up.jpg);
+}
+/* 时间右边的向下按钮 BUTTON */
+.WdateDiv #dpTime #dpTimeDown{
+	height:10px;
+	width:13px;
+	border:0px;
+	background-image:url(down.jpg);
+}
+/****************************
+ * 其他
+ ***************************/
+ .WdateDiv #dpQS {
+ 	float:left;
+	margin-right:3px;
+	margin-top:3px;
+	background-image:url(qs.jpg);
+	width:20px;
+	height:20px;
+	cursor:pointer;
+ }
+.WdateDiv #dpControl {
+	text-align:right;
+	margin-top:3px;
+}
+.WdateDiv .dpButton{ 
+	height:20px;
+	width:45px;
+	padding:2px;
+	border:#38B1B9 1px solid;
+	background-color:#CFEBEE;
+	color:#08575B;
+}

+ 249 - 0
web/js/date/skin/whyGreen/datepicker.css.keep

@@ -0,0 +1,249 @@
+/* 
+ * My97 DatePicker 4.0
+ * 皮肤名称:whyGreen
+ * 皮肤作者:why
+ */
+ 
+/* 日期选择容器 DIV */
+.WdateDiv{
+	width:180px;
+	background-color:#fff;
+	border:#C5E1E4 1px solid;
+	padding:2px;
+}
+.WdateDiv *{font-size:9pt;}
+
+/****************************
+ * 导航图标
+ ***************************/
+.WdateDiv .NavImg {
+	cursor:pointer;
+	width:16px;
+	height:16px;
+}
+.WdateDiv .NavImgll {
+	background-image:url(navLeft.gif);
+}
+.WdateDiv .NavImgl {
+	background-image:url(left.gif);
+}
+.WdateDiv .NavImgr {
+	background-image:url(right.gif);
+}
+.WdateDiv .NavImgrr {
+	background-image:url(navRight.gif);
+}
+/****************************
+ * 年份月份相关
+ ***************************/
+/* 年份月份栏 DIV */
+.WdateDiv #dpTitle{
+	height:24px;
+	border:#c5d9e8 1px solid;
+	background:url(bg.jpg);
+	margin-bottom:2px;
+}
+/* 年份月份输入框 INPUT */
+.WdateDiv .yminput{
+	margin-top:2px;
+	text-align:center;
+	border:0px;
+	height:16px;
+	width:50px;
+	color:#034c50;
+	background-color:transparent;
+	cursor:pointer;
+}
+/* 年份月份输入框获得焦点时的样式 INPUT */
+.WdateDiv .yminputfocus{
+	margin-top:2px;
+	text-align:center;
+	border:#939393 1px solid;
+	font-weight:bold;
+	color:#034c50;	
+	height:16px;
+	width:50px;
+}
+/* 菜单选择框 DIV */
+.WdateDiv .menuSel{
+	position:absolute;
+	background-color:#FFFFFF;
+	border:#A3C6C8 1px solid;
+	display:none;
+}
+/* 菜单的样式 TD */
+.WdateDiv .menu{
+	cursor:pointer;
+	background-color:#fff;
+	color:#11777C;
+}
+/* 菜单的mouseover样式 TD */
+.WdateDiv .menuOn{
+	cursor:pointer;
+	background-color:#BEEBEE;
+}
+/* 菜单无效时的样式 TD */
+.WdateDiv .invalidMenu{
+	color:#aaa;
+}
+/* 年选择框的偏移 DIV */
+.WdateDiv .YMenu{
+	margin-top:16px;
+}
+/* 月选择框的偏移 DIV */
+.WdateDiv .MMenu{
+	margin-top:16px;
+	*width:62px;
+}
+/* 时选择框的位置 DIV */
+.WdateDiv .hhMenu{
+	margin-top:-90px; 
+	margin-left:26px;
+}
+/* 分选择框的位置 DIV */
+.WdateDiv .mmMenu{
+	margin-top:-46px; 
+	margin-left:26px;
+}
+/* 秒选择框的位置 DIV */
+.WdateDiv .ssMenu{
+	margin-top:-24px; 
+	margin-left:26px;
+}
+
+/****************************
+ * 周相关
+ ***************************/
+ .WdateDiv .Wweek {
+ 	text-align:center;
+	background:#DAF3F5;
+	border-right:#BDEBEE 1px solid;
+ }
+/****************************
+ * 星期,日期相关
+ ***************************/
+ /* 星期栏 TR */
+.WdateDiv .MTitle{
+	color:#13777e;
+	background-color:#bdebee;
+}
+/* 日期栏表格 TABLE */
+.WdateDiv .WdayTable{
+	line-height:20px;	
+	color:#13777e;
+	background-color:#edfbfb;
+	border:#BEE9F0 1px solid;
+}
+/* 日期格的样式 TD */
+.WdateDiv .Wday{
+	cursor:pointer;
+}
+/* 日期格的mouseover样式 TD */
+.WdateDiv .WdayOn{
+	cursor:pointer;
+	background-color:#74d2d9 ;
+}
+/* 周末日期格的样式 TD */
+.WdateDiv .Wwday{
+	cursor:pointer;
+	color:#ab1e1e;
+}
+/* 周末日期格的mouseover样式 TD */
+.WdateDiv .WwdayOn{
+	cursor:pointer;
+	background-color:#74d2d9;
+}
+.WdateDiv .Wtoday{
+	cursor:pointer;
+	color:blue;
+}
+.WdateDiv .Wselday{
+	background-color:#A7E2E7;
+}
+/* 其他月份的日期 */
+.WdateDiv .WotherDay{ 
+	cursor:pointer;
+	color:#0099CC;	
+}
+/* 其他月份的日期mouseover样式 */
+.WdateDiv .WotherDayOn{ 
+	cursor:pointer;
+	background-color:#C0EBEF;	
+}
+/* 无效日期的样式,即在日期范围以外日期格的样式,不能选择的日期 */
+.WdateDiv .WinvalidDay{
+	color:#aaa;
+}
+/****************************
+ * 时间相关
+ ***************************/
+/* 时间栏 DIV */
+.WdateDiv #dpTime{
+	
+}
+/* 时间文字 SPAN */
+.WdateDiv #dpTime #dpTimeStr{
+	margin-left:1px;
+	color:#497F7F;
+}
+/* 时间输入框 INPUT */
+.WdateDiv #dpTime input{
+	height:16px;
+	width:18px;
+	text-align:center;
+	color:#333;
+	border:#61CAD0 1px solid;	
+}
+/* 时间 时 INPUT */
+.WdateDiv #dpTime .tB{
+	border-right:0px;
+}
+/* 时间 分和间隔符 ':' INPUT */
+.WdateDiv #dpTime .tE{
+	border-left:0;
+	border-right:0;
+}
+/* 时间 秒 INPUT */
+.WdateDiv #dpTime .tm{
+	width:7px;
+	border-left:0;
+	border-right:0;
+}
+/* 时间右边的向上按钮 BUTTON */
+.WdateDiv #dpTime #dpTimeUp{
+	height:10px;
+	width:13px;
+	border:0px;
+	background-image:url(up.jpg);
+}
+/* 时间右边的向下按钮 BUTTON */
+.WdateDiv #dpTime #dpTimeDown{
+	height:10px;
+	width:13px;
+	border:0px;
+	background-image:url(down.jpg);
+}
+/****************************
+ * 其他
+ ***************************/
+ .WdateDiv #dpQS {
+ 	float:left;
+	margin-right:3px;
+	margin-top:3px;
+	background-image:url(qs.jpg);
+	width:20px;
+	height:20px;
+	cursor:pointer;
+ }
+.WdateDiv #dpControl {
+	text-align:right;
+	margin-top:3px;
+}
+.WdateDiv .dpButton{ 
+	height:20px;
+	width:45px;
+	padding:2px;
+	border:#38B1B9 1px solid;
+	background-color:#CFEBEE;
+	color:#08575B;
+}

BIN
web/js/date/skin/whyGreen/down.jpg


BIN
web/js/date/skin/whyGreen/down.jpg.keep


BIN
web/js/date/skin/whyGreen/left.gif


BIN
web/js/date/skin/whyGreen/left.gif.keep


BIN
web/js/date/skin/whyGreen/navLeft.gif


BIN
web/js/date/skin/whyGreen/navLeft.gif.keep


BIN
web/js/date/skin/whyGreen/navRight.gif


BIN
web/js/date/skin/whyGreen/navRight.gif.keep


BIN
web/js/date/skin/whyGreen/qs.jpg


BIN
web/js/date/skin/whyGreen/qs.jpg.keep


BIN
web/js/date/skin/whyGreen/right.gif


BIN
web/js/date/skin/whyGreen/right.gif.keep


BIN
web/js/date/skin/whyGreen/up.jpg


BIN
web/js/date/skin/whyGreen/up.jpg.keep


Fichier diff supprimé car celui-ci est trop grand
+ 205 - 0
web/js/vendors/AIzaSyAurmSUEQDwY86-wOG3kCp855tCI8lHL-I.js


+ 340 - 0
web/js/vendors/amaze.js

@@ -0,0 +1,340 @@
+"use strict";
+
+(function() {
+	var fixedTop = false;
+
+	var mobile_menu_visible = 0,
+		mobile_menu_initialized = false,
+		toggle_initialized = false,
+		bootstrap_nav_initialized = false,
+		$sidebar = $('.sidebar'),
+		isWindows;
+	var $window = $(window);
+	var $body = $('body');
+	var $html = $('html');
+	var $sidebar_wrapper = $('.sidebar-wrapper');
+	isWindows = navigator.platform.indexOf('Win') > -1 ? true : false;
+
+	if (isWindows && !$body.hasClass('sidebar-mini')){
+	   // if we are on windows OS we activate the perfectScrollbar function
+	   $('.sidebar .sidebar-wrapper, .main-panel').perfectScrollbar();
+
+	   $html.addClass('perfect-scrollbar-on');
+	} else {
+	   $html.addClass('perfect-scrollbar-off');
+	}
+
+	$(document).ready(function(){
+		var window_width = $window.width();
+
+		if($body.hasClass('sidebar-mini')){
+			pdp.misc.sidebar_mini_active = true;
+		}
+
+		pdp.initSidebarsCheck();
+
+		pdp.initMinimizeSidebar();
+
+		$('.form-control').on("focus", function(){
+			$(this).parent('.input-group').addClass("input-group-focus");
+		}).on("blur", function(){
+			$(this).parent(".input-group").removeClass("input-group-focus");
+		});
+
+		//  Activate the tooltips
+		$('[rel="tooltip"]').tooltip();
+
+		// Init Tags Input
+		if($(".tagsinput").length != 0){
+			$(".tagsinput").tagsInput();
+		}
+
+		//  Init Bootstrap Select Picker
+		if($(".selectpicker").length != 0){
+			$(".selectpicker").selectpicker({
+				size: 9
+			});
+		}
+
+
+	});
+
+
+
+	// activate collapse right menu when the windows is resized
+	$window.resize(function(){
+		pdp.initSidebarsCheck();
+
+	});
+
+	var pdp = {
+		misc:{
+			navbar_menu_visible: 0,
+			active_collapse: true,
+			disabled_collapse_init: 0
+
+		},
+		initSidebarsCheck: function(){
+			// Init navigation toggle for small screens
+			if($window.width() <= 991){
+				if($sidebar.length !== 0){
+					pdp.initSidebarMenu();
+				} else {
+					pdp.initBootstrapNavbarMenu();
+				}
+			} else if(mobile_menu_initialized === true){
+				// reset all the additions that we made for the sidebar wrapper only if the screen is bigger than 991px
+				$sidebar_wrapper.find('.navbar-form').remove();
+				$sidebar_wrapper.find('.nav-mobile-menu').remove();
+
+				mobile_menu_initialized = false;
+			}
+		},
+
+		initMinimizeSidebar: function(){
+			var $sidebar_collapse = $('.sidebar .collapse');
+
+			// when we are on a Desktop Screen and the collapse is triggered we check if the sidebar mini is active or not. If it is active then we don't let the collapse to show the elements because the elements from the collapse are showing on the hover state over the icons in sidebar mini, not on the click.
+			$sidebar_collapse.on('show.bs.collapse',function(){
+				if($window.width() > 991){
+					if(pdp.misc.sidebar_mini_active === true){
+						return false;
+					} else{
+						return true;
+					}
+				}
+			});
+
+			$('#minimizeSidebar').on('click',function(){
+				var $btn = $(this);
+
+				if(pdp.misc.sidebar_mini_active === true){
+					$body.removeClass('sidebar-mini');
+					$btn.html('<i class="ti-arrow-left"></i>');
+					pdp.misc.sidebar_mini_active = false;
+
+					if(isWindows){
+						$('.sidebar .sidebar-wrapper').perfectScrollbar();
+					}
+
+				}else{
+
+					$sidebar_collapse.collapse('hide').on('hidden.bs.collapse',function(){
+						$(this).css('height','auto');
+					});
+
+					if(isWindows){
+						$('.sidebar .sidebar-wrapper').perfectScrollbar('destroy');
+					}
+
+					setTimeout(function(){
+						$body.addClass('sidebar-mini');
+						$btn.html('<i class="ti-arrow-right"></i>');
+
+						$sidebar_collapse.css('height','auto');
+						pdp.misc.sidebar_mini_active = true;
+					},300);
+				}
+
+				// we simulate the window Resize so the charts will get updated in realtime.
+				var simulateWindowResize = setInterval(function(){
+					window.dispatchEvent(new Event('resize'));
+				},180);
+
+				// we stop the simulation of Window Resize after the animations are completed
+				setTimeout(function(){
+					clearInterval(simulateWindowResize);
+				},1000);
+			});
+		},
+
+		initSidebarMenu: function(){
+
+			if(!mobile_menu_initialized){
+
+				var $navbar = $('nav').find('.navbar-collapse').first().clone(true);
+
+				var nav_content = '';
+				var mobile_menu_content = '';
+
+				$navbar.children('ul').each(function(){
+
+					var content_buff = $(this).html();
+					nav_content = nav_content + content_buff;
+				});
+
+				nav_content = '<ul class="nav nav-mobile-menu">' + nav_content + '</ul>';
+
+				var $navbar_form = $('nav').find('.navbar-form').clone(true);
+
+				var $sidebar_nav = $sidebar_wrapper.find(' > .nav');
+
+				// insert the navbar form before the sidebar list
+				var $nav_content = $(nav_content);
+				$nav_content.insertBefore($sidebar_nav);
+				$navbar_form.insertBefore($nav_content);
+
+				$(".sidebar-wrapper .dropdown .dropdown-menu > li > a").on('click',function(event) {
+					event.stopPropagation();
+
+				});
+
+				mobile_menu_initialized = true;
+			} else {
+				if($window.width() > 991){
+					// reset all the additions that we made for the sidebar wrapper only if the screen is bigger than 991px
+					$sidebar_wrapper.find('.navbar-form').remove();
+					$sidebar_wrapper.find('.nav-mobile-menu').remove();
+
+					mobile_menu_initialized = false;
+				}
+			}
+
+			if(!toggle_initialized){
+				var $toggle = $('.navbar-toggle');
+
+				$toggle.on('click',function (){
+
+					if(mobile_menu_visible === 1) {
+						$html.removeClass('nav-open');
+
+						$('.close-layer').remove();
+						setTimeout(function(){
+							$toggle.removeClass('toggled');
+						}, 400);
+
+						mobile_menu_visible = 0;
+					} else {
+						setTimeout(function(){
+							$toggle.addClass('toggled');
+						}, 430);
+
+						var main_panel_height = $('.main-panel')[0].scrollHeight;
+						var $layer = $('<div class="close-layer"></div>');
+						$layer.css('height',main_panel_height + 'px');
+						$layer.appendTo(".main-panel");
+
+
+						setTimeout(function(){
+							$layer.addClass('visible');
+						}, 100);
+
+						$layer.on('click',function() {
+							$html.removeClass('nav-open');
+							mobile_menu_visible = 0;
+
+							$layer.removeClass('visible');
+
+							 setTimeout(function(){
+								$layer.remove();
+								$toggle.removeClass('toggled');
+
+							 }, 400);
+						});
+
+						$html.addClass('nav-open');
+						mobile_menu_visible = 1;
+
+					}
+				});
+
+				toggle_initialized = true;
+			}
+
+		},
+
+		  initBootstrapNavbarMenu: debounce(function(){
+
+			if(!bootstrap_nav_initialized){
+				var $navbar = $('nav').find('.navbar-collapse').first().clone(true);
+
+				var nav_content = '';
+				var mobile_menu_content = '';
+
+				//add the content from the regular header to the mobile menu
+				$navbar.children('ul').each(function(){
+					var content_buff = $(this).html();
+					nav_content = nav_content + content_buff;
+				});
+
+				nav_content = '<ul class="nav nav-mobile-menu">' + nav_content + '</ul>';
+
+				$navbar.html(nav_content);
+				$navbar.addClass('off-canvas-sidebar');
+
+				// append it to the body, so it will come from the right side of the screen
+				$body.append($navbar);
+
+				var $toggle = $('.navbar-toggle');
+
+				$navbar.find('a').removeClass('btn btn-round btn-default');
+				$navbar.find('button').removeClass('btn-round btn-fill btn-info btn-primary btn-success btn-danger btn-warning btn-neutral');
+				$navbar.find('button').addClass('btn-simple btn-block');
+
+				$toggle.on('click',function (){
+					if(mobile_menu_visible === 1) {
+						$html.removeClass('nav-open');
+
+						$('.close-layer').remove();
+						setTimeout(function(){
+							$toggle.removeClass('toggled');
+						}, 400);
+
+						mobile_menu_visible = 0;
+					} else {
+						setTimeout(function(){
+							$toggle.addClass('toggled');
+						}, 430);
+
+						var $layer = $('<div class="close-layer"></div>');
+						$layer.appendTo(".wrapper-full-page");
+
+						setTimeout(function(){
+							$layer.addClass('visible');
+						}, 100);
+
+
+						$layer.on('click',function() {
+							$html.removeClass('nav-open');
+							mobile_menu_visible = 0;
+
+							$layer.removeClass('visible');
+
+							 setTimeout(function(){
+								$layer.remove();
+								$toggle.removeClass('toggled');
+
+							 }, 400);
+						});
+
+						$html.addClass('nav-open');
+						mobile_menu_visible = 1;
+
+					}
+
+				});
+				bootstrap_nav_initialized = true;
+			}
+		}, 500),
+	}
+
+
+	// Returns a function, that, as long as it continues to be invoked, will not
+	// be triggered. The function will be called after it stops being called for
+	// N milliseconds. If `immediate` is passed, trigger the function on the
+	// leading edge, instead of the trailing.
+
+	function debounce(func, wait, immediate) {
+		var timeout;
+		return function() {
+			var context = this, args = arguments;
+			clearTimeout(timeout);
+			timeout = setTimeout(function() {
+				timeout = null;
+				if (!immediate) func.apply(context, args);
+			}, wait);
+			if (immediate && !timeout) func.apply(context, args);
+		};
+	};
+
+})();

+ 869 - 0
web/js/vendors/bootstrap-checkbox-radio-switch-tags.js

@@ -0,0 +1,869 @@
+!function ($) {
+
+ /* CHECKBOX PUBLIC CLASS DEFINITION
+  * ============================== */
+
+  var Checkbox = function (element, options) {
+    this.init(element, options);
+  }
+
+  Checkbox.prototype = {
+
+    constructor: Checkbox
+
+  , init: function (element, options) {
+    var $el = this.$element = $(element)
+
+    this.options = $.extend({}, $.fn.checkbox.defaults, options);
+    $el.before(this.options.template);
+    this.setState();
+  }
+
+  , setState: function () {
+      var $el = this.$element
+        , $parent = $el.closest('.checkbox');
+
+        $el.prop('disabled') && $parent.addClass('disabled');
+        $el.prop('checked') && $parent.addClass('checked');
+    }
+
+  , toggle: function () {
+      var ch = 'checked'
+        , $el = this.$element
+        , $parent = $el.closest('.checkbox')
+        , checked = $el.prop(ch)
+        , e = $.Event('toggle')
+
+      if ($el.prop('disabled') == false) {
+        $parent.toggleClass(ch) && checked ? $el.prop(ch,false) : $el.prop(ch, ch);
+        $el.trigger(e).trigger('change');
+      }
+    }
+
+  , setCheck: function (option) {
+      var d = 'disabled'
+        , ch = 'checked'
+        , $el = this.$element
+        , $parent = $el.closest('.checkbox')
+        , checkAction = option == 'check' ? true : false
+        , e = $.Event(option)
+
+      $parent[checkAction ? 'addClass' : 'removeClass' ](ch) && checkAction ? $el.prop(ch, ch) : $el.prop(ch,false);
+      $el.trigger(e).trigger('change');
+    }
+
+  }
+
+
+ /* CHECKBOX PLUGIN DEFINITION
+  * ======================== */
+
+  var old = $.fn.checkbox
+
+  $.fn.checkbox = function (option) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('checkbox')
+        , options = $.extend({}, $.fn.checkbox.defaults, $this.data(), typeof option == 'object' && option);
+      if (!data) $this.data('checkbox', (data = new Checkbox(this, options)));
+      if (option == 'toggle') data.toggle()
+      if (option == 'check' || option == 'uncheck') data.setCheck(option)
+      else if (option) data.setState();
+    });
+  }
+
+  $.fn.checkbox.defaults = {
+    template: '<span class="icons"><span class="first-icon fa fa-square"></span><span class="second-icon fa fa-check-square "></span></span>'
+  }
+
+
+ /* CHECKBOX NO CONFLICT
+  * ================== */
+
+  $.fn.checkbox.noConflict = function () {
+    $.fn.checkbox = old;
+    return this;
+  }
+
+
+ /* CHECKBOX DATA-API
+  * =============== */
+
+  $(document).on('click.checkbox.data-api', '.checkbox', function (e) {
+    var $checkbox = $(e.target);
+    if (e.target.tagName != "A") {
+      e && e.preventDefault() && e.stopPropagation();
+      if (!$checkbox.hasClass('checkbox')) $checkbox = $checkbox.closest('.checkbox');
+      $checkbox.find(':checkbox').checkbox('toggle');
+    }
+  });
+
+  $(function () {
+    $('[data-toggle="checkbox"]').each(function () {
+      if($(this).data('toggle') == 'switch') return;
+
+      var $checkbox = $(this);
+      $checkbox.checkbox();
+    });
+  });
+
+}(window.jQuery);
+
+
+
+
+!function ($) {
+
+ /* RADIO PUBLIC CLASS DEFINITION
+  * ============================== */
+
+  var Radio = function (element, options) {
+    this.init(element, options);
+  }
+
+  Radio.prototype = {
+
+    constructor: Radio
+
+  , init: function (element, options) {
+      var $el = this.$element = $(element)
+
+      this.options = $.extend({}, $.fn.radio.defaults, options);
+      $el.before(this.options.template);
+      this.setState();
+    }
+
+  , setState: function () {
+      var $el = this.$element
+        , $parent = $el.closest('.radio');
+
+        $el.prop('disabled') && $parent.addClass('disabled');
+        $el.prop('checked') && $parent.addClass('checked');
+    }
+
+  , toggle: function () {
+      var d = 'disabled'
+        , ch = 'checked'
+        , $el = this.$element
+        , checked = $el.prop(ch)
+        , $parent = $el.closest('.radio')
+        , $parentWrap = $el.closest('form').length ? $el.closest('form') : $el.closest('body')
+        , $elemGroup = $parentWrap.find(':radio[name="' + $el.attr('name') + '"]')
+        , e = $.Event('toggle')
+
+        if ($el.prop(d) == false) {
+            $elemGroup.not($el).each(function () {
+              var $el = $(this)
+                , $parent = $(this).closest('.radio');
+
+                if ($el.prop(d) == false) {
+                  $parent.removeClass(ch) && $el.prop( ch, false ).trigger('change');
+                }
+            });
+
+            if (checked == false) $parent.addClass(ch) && $el.prop(ch, true);
+            $el.trigger(e);
+
+            if (checked !== $el.prop(ch)) {
+                $el.trigger('change');
+            }
+        }
+    }
+
+  , setCheck: function (option) {
+      var ch = 'checked'
+        , $el = this.$element
+        , $parent = $el.closest('.radio')
+        , checkAction = option == 'check' ? true : false
+        , checked = $el.prop(ch)
+        , $parentWrap = $el.closest('form').length ? $el.closest('form') : $el.closest('body')
+        , $elemGroup = $parentWrap.find(':radio[name="' + $el['attr']('name') + '"]')
+        , e = $.Event(option)
+
+      $elemGroup.not($el).each(function () {
+        var $el = $(this)
+          , $parent = $(this).closest('.radio');
+
+          $parent.removeClass(ch) && $el.prop(ch,false);
+      });
+
+      $parent[checkAction ? 'addClass' : 'removeClass'](ch) && checkAction ? $el.prop(ch, ch) : $el.prop(ch,false);
+      $el.trigger(e);
+
+      if (checked !== $el.prop(ch)) {
+        $el.trigger('change');
+      }
+    }
+
+  }
+
+
+ /* RADIO PLUGIN DEFINITION
+  * ======================== */
+
+  var old = $.fn.radio
+
+  $.fn.radio = function (option) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('radio')
+        , options = $.extend({}, $.fn.radio.defaults, $this.data(), typeof option == 'object' && option);
+      if (!data) $this.data('radio', (data = new Radio(this, options)));
+      if (option == 'toggle') data.toggle()
+      if (option == 'check' || option == 'uncheck') data.setCheck(option)
+      else if (option) data.setState();
+    });
+  }
+
+  $.fn.radio.defaults = {
+    template: '<span class="icons"><span class="first-icon fa fa-circle-o"></span><span class="second-icon fa fa-dot-circle-o"></span></span>'
+  }
+
+
+ /* RADIO NO CONFLICT
+  * ================== */
+
+  $.fn.radio.noConflict = function () {
+    $.fn.radio = old;
+    return this;
+  }
+
+
+ /* RADIO DATA-API
+  * =============== */
+
+  $(document).on('click.radio.data-api', '.radio', function (e) {
+    var $radio = $(e.target);
+    e && e.preventDefault() && e.stopPropagation();
+    if (!$radio.hasClass('radio')) $radio = $radio.closest('.radio');
+    $radio.find(':radio').radio('toggle');
+  });
+
+  $(function () {
+    $('[data-toggle="radio"]').each(function () {
+      var $radio = $(this);
+      $radio.radio();
+    });
+  });
+
+}(window.jQuery);
+
+
+
+/* ============================================================
+ * bootstrapSwitch v1.3 by Larentis Mattia @spiritualGuru
+ * http://www.larentis.eu/switch/
+ * ============================================================
+ * Licensed under the Apache License, Version 2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * ============================================================ */
+
+!function ($) {
+  "use strict";
+
+  $.fn['bootstrapSwitch'] = function (method) {
+    var methods = {
+      init: function () {
+        return this.each(function () {
+            var $element = $(this)
+              , $div
+              , $switchLeft
+              , $switchRight
+              , $label
+              , myClasses = ""
+              , classes = $element.attr('class')
+              , color
+              , moving
+              , onLabel = "ON"
+              , offLabel = "OFF"
+              , icon = false;
+
+            $.each(['switch-mini', 'switch-small', 'switch-large'], function (i, el) {
+              if (classes.indexOf(el) >= 0)
+                myClasses = el;
+            });
+
+            $element.addClass('has-switch');
+
+            if ($element.data('on') !== undefined)
+              color = "switch-" + $element.data('on');
+
+            if ($element.data('on-label') !== undefined)
+              onLabel = $element.data('on-label');
+
+            if ($element.data('off-label') !== undefined)
+              offLabel = $element.data('off-label');
+
+            if ($element.data('icon') !== undefined)
+              icon = $element.data('icon');
+
+            $switchLeft = $('<span>')
+              .addClass("switch-left")
+              .addClass(myClasses)
+              .addClass(color)
+              .html(onLabel);
+
+            color = '';
+            if ($element.data('off') !== undefined)
+              color = "switch-" + $element.data('off');
+
+            $switchRight = $('<span>')
+              .addClass("switch-right")
+              .addClass(myClasses)
+              .addClass(color)
+              .html(offLabel);
+
+            $label = $('<label>')
+              .html("&nbsp;")
+              .addClass(myClasses)
+              .attr('for', $element.find('input').attr('id'));
+
+            if (icon) {
+              $label.html('<i class="' + icon + '"></i>');
+            }
+
+            $div = $element.find(':checkbox').wrap($('<div>')).parent().data('animated', false);
+
+            if ($element.data('animated') !== false)
+              $div.addClass('switch-animate').data('animated', true);
+
+            $div
+              .append($switchLeft)
+              .append($label)
+              .append($switchRight);
+
+            $element.find('>div').addClass(
+              $element.find('input').is(':checked') ? 'switch-on' : 'switch-off'
+            );
+
+            if ($element.find('input').is(':disabled'))
+              $(this).addClass('deactivate');
+
+            var changeStatus = function ($this) {
+              $this.siblings('label').trigger('mousedown').trigger('mouseup').trigger('click');
+            };
+
+            $element.on('keydown', function (e) {
+              if (e.keyCode === 32) {
+                e.stopImmediatePropagation();
+                e.preventDefault();
+                changeStatus($(e.target).find('span:first'));
+              }
+            });
+
+            $switchLeft.on('click', function (e) {
+              changeStatus($(this));
+            });
+
+            $switchRight.on('click', function (e) {
+              changeStatus($(this));
+            });
+
+            $element.find('input').on('change', function (e) {
+              var $this = $(this)
+                , $element = $this.parent()
+                , thisState = $this.is(':checked')
+                , state = $element.is('.switch-off');
+
+              e.preventDefault();
+
+              $element.css('left', '');
+
+              if (state === thisState) {
+
+                if (thisState)
+                  $element.removeClass('switch-off').addClass('switch-on');
+                else $element.removeClass('switch-on').addClass('switch-off');
+
+                if ($element.data('animated') !== false)
+                  $element.addClass("switch-animate");
+
+                $element.parent().trigger('switch-change', {'el': $this, 'value': thisState})
+              }
+            });
+
+            $element.find('label').on('mousedown touchstart', function (e) {
+              var $this = $(this);
+              moving = false;
+
+              e.preventDefault();
+              e.stopImmediatePropagation();
+
+              $this.closest('div').removeClass('switch-animate');
+
+              if ($this.closest('.has-switch').is('.deactivate'))
+                $this.unbind('click');
+              else {
+                $this.on('mousemove touchmove', function (e) {
+                  var $element = $(this).closest('.switch')
+                    , relativeX = (e.pageX || e.originalEvent.targetTouches[0].pageX) - $element.offset().left
+                    , percent = (relativeX / $element.width()) * 100
+                    , left = 25
+                    , right = 75;
+
+                  moving = true;
+
+                  if (percent < left)
+                    percent = left;
+                  else if (percent > right)
+                    percent = right;
+
+                  $element.find('>div').css('left', (percent - right) + "%")
+                });
+
+                $this.on('click touchend', function (e) {
+                  var $this = $(this)
+                    , $target = $(e.target)
+                    , $myCheckBox = $target.siblings('input');
+
+                  e.stopImmediatePropagation();
+                  e.preventDefault();
+
+                  $this.unbind('mouseleave');
+
+                  if (moving)
+                    $myCheckBox.prop('checked', !(parseInt($this.parent().css('left')) < -25));
+                  else $myCheckBox.prop("checked", !$myCheckBox.is(":checked"));
+
+                  moving = false;
+                  $myCheckBox.trigger('change');
+                });
+
+                $this.on('mouseleave', function (e) {
+                  var $this = $(this)
+                    , $myCheckBox = $this.siblings('input');
+
+                  e.preventDefault();
+                  e.stopImmediatePropagation();
+
+                  $this.unbind('mouseleave');
+                  $this.trigger('mouseup');
+
+                  $myCheckBox.prop('checked', !(parseInt($this.parent().css('left')) < -25)).trigger('change');
+                });
+
+                $this.on('mouseup', function (e) {
+                  e.stopImmediatePropagation();
+                  e.preventDefault();
+
+                  $(this).unbind('mousemove');
+                });
+              }
+            });
+          }
+        );
+      },
+      toggleActivation: function () {
+        $(this).toggleClass('deactivate');
+      },
+      isActive: function () {
+        return !$(this).hasClass('deactivate');
+      },
+      setActive: function (active) {
+        if (active)
+          $(this).removeClass('deactivate');
+        else $(this).addClass('deactivate');
+      },
+      toggleState: function (skipOnChange) {
+        var $input = $(this).find('input:checkbox');
+        $input.prop('checked', !$input.is(':checked')).trigger('change', skipOnChange);
+      },
+      setState: function (value, skipOnChange) {
+        $(this).find('input:checkbox').prop('checked', value).trigger('change', skipOnChange);
+      },
+      status: function () {
+        return $(this).find('input:checkbox').is(':checked');
+      },
+      destroy: function () {
+        var $div = $(this).find('div')
+          , $checkbox;
+
+        $div.find(':not(input:checkbox)').remove();
+
+        $checkbox = $div.children();
+        $checkbox.unwrap().unwrap();
+
+        $checkbox.unbind('change');
+
+        return $checkbox;
+      }
+    };
+
+    if (methods[method])
+      return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
+    else if (typeof method === 'object' || !method)
+      return methods.init.apply(this, arguments);
+    else
+      $.error('Method ' + method + ' does not exist!');
+  };
+
+    $(function () {
+        $('.switch').each(function () {
+            $(this).bootstrapSwitch();
+        });
+
+        $('[data-toggle="switch"]').each(function (){
+            $(this).wrap('<div class="switch" />').parent().bootstrapSwitch();
+        });
+    });
+
+
+}(jQuery);
+
+
+
+/*
+
+	jQuery Tags Input Plugin 1.3.3
+
+	Copyright (c) 2011 XOXCO, Inc
+
+	Documentation for this plugin lives here:
+	http://xoxco.com/clickable/jquery-tags-input
+
+	Licensed under the MIT license:
+	http://www.opensource.org/licenses/mit-license.php
+
+	ben@xoxco.com
+
+*/
+
+(function($) {
+
+	var delimiter = new Array();
+	var tags_callbacks = new Array();
+	$.fn.doAutosize = function(o){
+	    var minWidth = $(this).data('minwidth'),
+	        maxWidth = $(this).data('maxwidth'),
+	        val = '',
+	        input = $(this),
+	        testSubject = $('#'+$(this).data('tester_id'));
+
+	    if (val === (val = input.val())) {return;}
+
+	    // Enter new content into testSubject
+	    var escaped = val.replace(/&/g, '&amp;').replace(/\s/g,' ').replace(/</g, '&lt;').replace(/>/g, '&gt;');
+	    testSubject.html(escaped);
+	    // Calculate new width + whether to change
+	    var testerWidth = testSubject.width(),
+	        newWidth = (testerWidth + o.comfortZone) >= minWidth ? testerWidth + o.comfortZone : minWidth,
+	        currentWidth = input.width(),
+	        isValidWidthChange = (newWidth < currentWidth && newWidth >= minWidth)
+	                             || (newWidth > minWidth && newWidth < maxWidth);
+
+	    // Animate width
+	    if (isValidWidthChange) {
+	        input.width(newWidth);
+	    }
+
+
+  };
+  $.fn.resetAutosize = function(options){
+    // alert(JSON.stringify(options));
+    var minWidth =  $(this).data('minwidth') || options.minInputWidth || $(this).width(),
+        maxWidth = $(this).data('maxwidth') || options.maxInputWidth || ($(this).closest('.tagsinput').width() - options.inputPadding),
+        val = '',
+        input = $(this),
+        testSubject = $('<tester/>').css({
+            position: 'absolute',
+            top: -9999,
+            left: -9999,
+            width: 'auto',
+            fontSize: input.css('fontSize'),
+            fontFamily: input.css('fontFamily'),
+            fontWeight: input.css('fontWeight'),
+            letterSpacing: input.css('letterSpacing'),
+            whiteSpace: 'nowrap'
+        }),
+        testerId = $(this).attr('id')+'_autosize_tester';
+    if(! $('#'+testerId).length > 0){
+      testSubject.attr('id', testerId);
+      testSubject.appendTo('body');
+    }
+
+    input.data('minwidth', minWidth);
+    input.data('maxwidth', maxWidth);
+    input.data('tester_id', testerId);
+    input.css('width', minWidth);
+  };
+
+	$.fn.addTag = function(value,options) {
+			options = jQuery.extend({focus:false,callback:true},options);
+			this.each(function() {
+				var id = $(this).attr('id');
+
+				var tagslist = $(this).val().split(delimiter[id]);
+				if (tagslist[0] == '') {
+					tagslist = new Array();
+				}
+
+				value = jQuery.trim(value);
+
+				if (options.unique) {
+					var skipTag = $(this).tagExist(value);
+					if(skipTag == true) {
+					    //Marks fake input as not_valid to let styling it
+    				    $('#'+id+'_tag').addClass('not_valid');
+    				}
+				} else {
+					var skipTag = false;
+				}
+
+				if (value !='' && skipTag != true) {
+                    $('<span>').addClass('tag').append(
+                        $('<span>').text(value).append('&nbsp;&nbsp;'),
+                        $('<a class="tagsinput-remove-link">', {
+                            href  : '#',
+                            title : 'Remove tag',
+                            text  : ''
+                        }).click(function () {
+                            return $('#' + id).removeTag(escape(value));
+                        })
+                    ).insertBefore('#' + id + '_addTag');
+
+					tagslist.push(value);
+
+					$('#'+id+'_tag').val('');
+					if (options.focus) {
+						$('#'+id+'_tag').focus();
+					} else {
+						$('#'+id+'_tag').blur();
+					}
+
+					$.fn.tagsInput.updateTagsField(this,tagslist);
+
+					if (options.callback && tags_callbacks[id] && tags_callbacks[id]['onAddTag']) {
+						var f = tags_callbacks[id]['onAddTag'];
+						f.call(this, value);
+					}
+					if(tags_callbacks[id] && tags_callbacks[id]['onChange'])
+					{
+						var i = tagslist.length;
+						var f = tags_callbacks[id]['onChange'];
+						f.call(this, $(this), tagslist[i-1]);
+					}
+				}
+
+			});
+
+			return false;
+		};
+
+	$.fn.removeTag = function(value) {
+			value = unescape(value);
+			this.each(function() {
+				var id = $(this).attr('id');
+
+				var old = $(this).val().split(delimiter[id]);
+
+				$('#'+id+'_tagsinput .tag').remove();
+				str = '';
+				for (i=0; i< old.length; i++) {
+					if (old[i] != value.trim()) {
+						str = str + delimiter[id] +old[i];
+					}
+				}
+
+				$.fn.tagsInput.importTags(this,str);
+
+				if (tags_callbacks[id] && tags_callbacks[id]['onRemoveTag']) {
+					var f = tags_callbacks[id]['onRemoveTag'];
+					f.call(this, value);
+				}
+			});
+
+			return false;
+		};
+
+	$.fn.tagExist = function(val) {
+		var id = $(this).attr('id');
+		var tagslist = $(this).val().split(delimiter[id]);
+		return (jQuery.inArray(val, tagslist) >= 0); //true when tag exists, false when not
+	};
+
+	// clear all existing tags and import new ones from a string
+	$.fn.importTags = function(str) {
+                id = $(this).attr('id');
+		$('#'+id+'_tagsinput .tag').remove();
+		$.fn.tagsInput.importTags(this,str);
+	}
+
+	$.fn.tagsInput = function(options) {
+    var settings = jQuery.extend({
+      interactive:true,
+      defaultText:'',
+      minChars:0,
+      width:'',
+      height:'',
+      autocomplete: {selectFirst: false },
+      'hide':true,
+      'delimiter':',',
+      'unique':true,
+      removeWithBackspace:true,
+      placeholderColor:'#666666',
+      autosize: true,
+      comfortZone: 20,
+      inputPadding: 6*2
+    },options);
+
+		this.each(function() {
+			if (settings.hide) {
+				$(this).hide();
+			}
+			var id = $(this).attr('id');
+			if (!id || delimiter[$(this).attr('id')]) {
+				id = $(this).attr('id', 'tags' + new Date().getTime()).attr('id');
+			}
+
+			var data = jQuery.extend({
+				pid:id,
+				real_input: '#'+id,
+				holder: '#'+id+'_tagsinput',
+				input_wrapper: '#'+id+'_addTag',
+				fake_input: '#'+id+'_tag'
+			},settings);
+
+			delimiter[id] = data.delimiter;
+
+			if (settings.onAddTag || settings.onRemoveTag || settings.onChange) {
+				tags_callbacks[id] = new Array();
+				tags_callbacks[id]['onAddTag'] = settings.onAddTag;
+				tags_callbacks[id]['onRemoveTag'] = settings.onRemoveTag;
+				tags_callbacks[id]['onChange'] = settings.onChange;
+			}
+
+            var containerClass = $('#'+id).attr('class').replace('tagsinput', '');
+			var markup = '<div id="'+id+'_tagsinput" class="tagsinput '+containerClass+'"><div class="tagsinput-add-container" id="'+id+'_addTag"><div class="tagsinput-add"></div>';
+
+			if (settings.interactive) {
+				markup = markup + '<input id="'+id+'_tag" value="" data-default="'+settings.defaultText+'" />';
+			}
+
+			markup = markup + '</div></div>';
+
+			$(markup).insertAfter(this);
+
+			$(data.holder).css('width',settings.width);
+			$(data.holder).css('min-height',settings.height);
+			$(data.holder).css('height','100%');
+
+			if ($(data.real_input).val()!='') {
+				$.fn.tagsInput.importTags($(data.real_input),$(data.real_input).val());
+			}
+			if (settings.interactive) {
+				$(data.fake_input).val($(data.fake_input).attr('data-default'));
+				$(data.fake_input).css('color',settings.placeholderColor);
+		        $(data.fake_input).resetAutosize(settings);
+
+				$(data.holder).bind('click',data,function(event) {
+					$(event.data.fake_input).focus();
+				});
+
+				$(data.fake_input).bind('focus',data,function(event) {
+					if ($(event.data.fake_input).val()==$(event.data.fake_input).attr('data-default')) {
+						$(event.data.fake_input).val('');
+					}
+					$(event.data.fake_input).css('color','#000000');
+				});
+
+				if (settings.autocomplete_url != undefined) {
+					autocomplete_options = {source: settings.autocomplete_url};
+					for (attrname in settings.autocomplete) {
+						autocomplete_options[attrname] = settings.autocomplete[attrname];
+					}
+
+					if (jQuery.Autocompleter !== undefined) {
+						$(data.fake_input).autocomplete(settings.autocomplete_url, settings.autocomplete);
+						$(data.fake_input).bind('result',data,function(event,data,formatted) {
+							if (data) {
+								$('#'+id).addTag(data[0] + "",{focus:true,unique:(settings.unique)});
+							}
+					  	});
+					} else if (jQuery.ui.autocomplete !== undefined) {
+						$(data.fake_input).autocomplete(autocomplete_options);
+						$(data.fake_input).bind('autocompleteselect',data,function(event,ui) {
+							$(event.data.real_input).addTag(ui.item.value,{focus:true,unique:(settings.unique)});
+							return false;
+						});
+					}
+
+
+				} else {
+						// if a user tabs out of the field, create a new tag
+						// this is only available if autocomplete is not used.
+						$(data.fake_input).bind('blur',data,function(event) {
+							var d = $(this).attr('data-default');
+							if ($(event.data.fake_input).val()!='' && $(event.data.fake_input).val()!=d) {
+								if( (event.data.minChars <= $(event.data.fake_input).val().length) && (!event.data.maxChars || (event.data.maxChars >= $(event.data.fake_input).val().length)) )
+									$(event.data.real_input).addTag($(event.data.fake_input).val(),{focus:true,unique:(settings.unique)});
+							} else {
+								$(event.data.fake_input).val($(event.data.fake_input).attr('data-default'));
+								$(event.data.fake_input).css('color',settings.placeholderColor);
+							}
+							return false;
+						});
+
+				}
+				// if user types a comma, create a new tag
+				$(data.fake_input).bind('keypress',data,function(event) {
+					if (event.which==event.data.delimiter.charCodeAt(0) || event.which==13 ) {
+					    event.preventDefault();
+						if( (event.data.minChars <= $(event.data.fake_input).val().length) && (!event.data.maxChars || (event.data.maxChars >= $(event.data.fake_input).val().length)) )
+							$(event.data.real_input).addTag($(event.data.fake_input).val(),{focus:true,unique:(settings.unique)});
+					  	$(event.data.fake_input).resetAutosize(settings);
+						return false;
+					} else if (event.data.autosize) {
+			            $(event.data.fake_input).doAutosize(settings);
+
+          			}
+				});
+				//Delete last tag on backspace
+				data.removeWithBackspace && $(data.fake_input).bind('keydown', function(event)
+				{
+					if(event.keyCode == 8 && $(this).val() == '')
+					{
+						 event.preventDefault();
+						 var last_tag = $(this).closest('.tagsinput').find('.tag:last').text();
+						 var id = $(this).attr('id').replace(/_tag$/, '');
+						 last_tag = last_tag.replace(/[\s\u00a0]+x$/, '');
+						 $('#' + id).removeTag(escape(last_tag));
+						 $(this).trigger('focus');
+					}
+				});
+				$(data.fake_input).blur();
+
+				//Removes the not_valid class when user changes the value of the fake input
+				if(data.unique) {
+				    $(data.fake_input).keydown(function(event){
+				        if(event.keyCode == 8 || String.fromCharCode(event.which).match(/\w+|[áéíóúÁÉÍÓÚñÑ,/]+/)) {
+				            $(this).removeClass('not_valid');
+				        }
+				    });
+				}
+			} // if settings.interactive
+		});
+
+		return this;
+
+	};
+
+	$.fn.tagsInput.updateTagsField = function(obj,tagslist) {
+		var id = $(obj).attr('id');
+		$(obj).val(tagslist.join(delimiter[id]));
+	};
+
+	$.fn.tagsInput.importTags = function(obj,val) {
+		$(obj).val('');
+		var id = $(obj).attr('id');
+		var tags = val.split(delimiter[id]);
+		for (i=0; i<tags.length; i++) {
+			$(obj).addTag(tags[i],{focus:false,callback:false});
+		}
+		if(tags_callbacks[id] && tags_callbacks[id]['onChange'])
+		{
+			var f = tags_callbacks[id]['onChange'];
+			f.call(obj, obj, tags[i]);
+		}
+	};
+
+})(jQuery);

Fichier diff supprimé car celui-ci est trop grand
+ 2596 - 0
web/js/vendors/bootstrap-datetimepicker.js


Fichier diff supprimé car celui-ci est trop grand
+ 404 - 0
web/js/vendors/bootstrap-notify.js


Fichier diff supprimé car celui-ci est trop grand
+ 7 - 0
web/js/vendors/bootstrap.min.js


Fichier diff supprimé car celui-ci est trop grand
+ 9 - 0
web/js/vendors/chartist.min.js


+ 401 - 0
web/js/vendors/charts/chartjs-charts.js

@@ -0,0 +1,401 @@
+    /* ChartJS
+     * -------
+     * Here we will create a few charts using ChartJS
+     */
+
+
+$(function () {
+
+
+   /*---------------------
+    ----- PIE CHART -----
+    ---------------------*/
+	if($('#pieChart')[0]){
+		// Get context with jQuery - using jQuery's .get() method.
+		var pieChartCanvas = $("#pieChart").get(0).getContext("2d");
+
+		var config = {
+			type: 'pie',
+			data: {
+				datasets: [{
+					data: [
+						11,
+						16,
+						7,
+						3,
+						14
+					],
+					backgroundColor: [
+						"#FF6384",
+						"#4BC0C0",
+						"#FFCE56",
+						"#E7E9ED",
+						"#36A2EB"
+					],
+					label: 'My dataset' // for legend
+				}],
+				labels: [
+					"USA",
+					"Germany",
+					"Austalia",
+					"Canada",
+					"France"
+				]
+			},
+			options: {
+				responsive: true
+			}
+		};
+		
+	   var myPie = new Chart(pieChartCanvas, config);
+		
+	}
+	
+	
+   /*---------------------
+    ----- DOUGHNUT CHART -----
+    ---------------------*/
+	if($('#doughnutChart')[0]){
+		// Get context with jQuery - using jQuery's .get() method.
+		var doughnutChartCanvas = $("#doughnutChart").get(0).getContext("2d");
+
+		var config = {
+			type: 'doughnut',
+			data: {
+				datasets: [{
+					data: [
+						11,
+						16,
+						7,
+						3,
+						14
+					],
+					backgroundColor: [
+						"#EB5E28",
+						"#4BC0C0",
+						"#68B3C8",
+						"#7AC29A",
+						"#F3BB45"
+					],
+					label: 'My dataset' // for legend
+
+					
+				}],
+				labels: [
+					"USA",
+					"Germany",
+					"Austalia",
+					"Canada",
+					"France"
+				]
+			},
+			options: {
+				responsive: true,
+				legend: {
+					display: false
+				}
+			}
+		};
+		
+	   var myDoughnutChart = new Chart(doughnutChartCanvas, config);
+
+	}	
+
+
+   /*---------------------
+    ----- LINE CHART -----
+    ---------------------*/
+
+	//var MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
+	var config = {
+		type: 'line',
+		data: {
+			labels: ["January", "February", "March", "April", "May", "June", "July"],
+                datasets: [{
+                    label: "My First dataset",
+                    backgroundColor: "#FF6384",
+                    borderColor: "#FF6384",
+                    data: [
+                        45, 
+                        75, 
+                        26, 
+                        23, 
+                        60, 
+                        -48, 
+                        -9
+                    ],
+                    fill: false,
+                }, {
+                    label: "My Second dataset",
+                    fill: false,
+                    backgroundColor: "#36A2EB",
+                    borderColor: "#36A2EB",
+                    data: [
+                        -10, 
+                        16, 
+                        72, 
+                        93, 
+                        29, 
+                        -74, 
+                        64
+                    ],
+                }]
+            },
+		options: {
+			responsive: true,
+			title:{
+				display:true,
+				text:'Chart.js Line Chart'
+			},
+			tooltips: {
+				mode: 'index',
+				intersect: false,
+			},
+			hover: {
+				mode: 'nearest',
+				intersect: true
+			},
+			scales: {
+				xAxes: [{
+					display: true,
+					scaleLabel: {
+						display: true,
+						labelString: 'Month'
+					}
+				}],
+				yAxes: [{
+					display: true,
+					scaleLabel: {
+						display: true,
+						labelString: 'Value'
+					}
+				}]
+			}
+		}
+	};
+
+	if($('#lineChart')[0]){
+		var lineChartCanvas = $("#lineChart").get(0).getContext("2d");
+		var lineChart = new Chart(lineChartCanvas, config);
+
+	}
+
+
+
+   /*---------------------
+    ----- AREA CHART -----
+    ---------------------*/
+
+	var config = {
+		type: 'line',
+		data: {
+			labels: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+                datasets: [{
+                    label: "My First dataset",
+                    backgroundColor: "#FF8A80",
+                    borderColor: "#FF8A80",
+                    data: [
+                        45, 
+                        75, 
+                        26, 
+                        23, 
+                        60, 
+                        48, 
+                        9,
+                        45, 
+                        75, 
+                        26, 
+                        23, 
+                        60, 
+                        48, 
+                        9
+                    ],
+                    fill: true,
+                }]
+            },
+		options: {
+			responsive: true,
+			title:{
+				display:true,
+				text:'Chart.js Area Chart'
+			},
+			tooltips: {
+				mode: 'index',
+				intersect: false,
+			},
+			hover: {
+				mode: 'nearest',
+				intersect: true
+			},
+			scales: {
+				xAxes: [{
+					display: true,
+					scaleLabel: {
+						display: true,
+						labelString: 'Month'
+					}
+				}],
+				yAxes: [{
+					display: true,
+					scaleLabel: {
+						display: true,
+						labelString: 'Value'
+					}
+				}]
+			}
+		}
+	};
+
+	if($('#areaChart')[0]){
+		
+		// Get context with jQuery - using jQuery's .get() method.
+		var areaChartCanvas = $("#areaChart").get(0).getContext("2d");
+		
+		//Create the line chart
+		var areaChart = new Chart(areaChartCanvas, config);
+
+	}
+	
+	
+   /*---------------------
+    ----- BAR CHART -----
+    ---------------------*/
+    
+    
+	var barChartData = {
+		labels: ["January", "February", "March", "April", "May", "June", "July"],
+		datasets: [{
+			label: 'Dataset 1',
+			backgroundColor: "#FF6384",
+			borderColor: "#FF6384",
+			borderWidth: 1,
+			data: [
+					45, 
+					75, 
+					26, 
+					23, 
+					60, 
+					-48, 
+					-9
+			]
+		}, {
+			label: 'Dataset 2',
+			backgroundColor: "#36A2EB",
+			borderColor: "#36A2EB",
+			borderWidth: 1,
+			data: [
+					-10, 
+					16, 
+					72, 
+					93, 
+					29, 
+					-74, 
+					64
+			]
+		}]
+
+	};
+    
+    
+	var config = {
+					type: 'bar',
+					data: barChartData,
+					options: {
+						responsive: true,
+						legend: {
+							position: 'top',
+						},
+						title: {
+							display: true,
+							text: 'Chart.js Bar Chart'
+						}
+					}
+                }
+
+    
+	if($('#barChart')[0]){
+		var barChartCanvas = $("#barChart").get(0).getContext("2d");
+		var barChart = new Chart(barChartCanvas, config);
+
+	}
+
+
+   /*---------------------
+    ----- BAR LINE COMBO CHART -----
+    ---------------------*/
+    
+    
+	var barlinecomboChartData = {
+		labels: ["January", "February", "March", "April", "May", "June", "July"],
+		
+		datasets: [{
+			type: 'line',
+			label: 'Dataset 1',
+			borderColor: "#4BC0C0",
+			borderWidth: 2,
+			fill: false,
+			data: [
+					-10, 
+					16, 
+					72, 
+					93, 
+					29, 
+					-74, 
+					64
+			]
+		}, {
+			type: 'bar',
+			label: 'Dataset 2',
+			backgroundColor: "#FF6384",
+			data: [
+				45, 
+				75, 
+				26, 
+				23, 
+				60, 
+				-48, 
+				-9
+			],
+			borderColor: 'white',
+			borderWidth: 2
+		}, {
+			type: 'bar',
+			label: 'Dataset 3',
+			backgroundColor: "#36A2EB",
+			data: [
+				-10, 
+				16, 
+				72, 
+				93, 
+				29, 
+				-74, 
+				64
+			]
+		}]
+
+	};
+    
+    
+	var config = {
+					type: 'bar',
+					data: barlinecomboChartData,
+					options: {
+						responsive: true,
+						legend: {
+							position: 'top',
+						},
+						title: {
+							display: true,
+							text: 'Chart.js Bar Chart'
+						}
+					}
+                }
+
+    
+	if($('#barlinecomboChart')[0]){
+		var barlinecomboChartCanvas = $("#barlinecomboChart").get(0).getContext("2d");
+		var barlinecomboChart = new Chart(barlinecomboChartCanvas, config);
+
+	}
+	
+});

Fichier diff supprimé car celui-ci est trop grand
+ 14 - 0
web/js/vendors/charts/chartjs/Chart.min.js


+ 363 - 0
web/js/vendors/charts/flot-charts.js

@@ -0,0 +1,363 @@
+
+
+    /* Flot Charts
+     * -------
+     * Here we will create a few charts using Flot Charts
+     */
+
+
+   /*---------------------
+    ----- PIE CHART -----
+    ---------------------*/
+
+	var data = [
+        {data: 18000, color: '#f8bd19', label: 'Linda'},
+        {data: 20000, color: '#e44a00', label: 'John'},
+        {data: 30000, color: '#008ee4', label: 'David'},
+        {data: 13000, color: '#33bdda', label: 'Margaret'},
+        {data: 15000, color: '#6baa01', label: 'Richard'},
+	];
+
+
+		$.plot("#pie-chart", data, {
+			series: {
+				pie: { 
+					show: true,
+					radius: 1,
+					label: {
+						show: true,
+						radius: 3/4,
+						formatter: labelFormatter,
+						background: {
+							opacity: 0.5
+						}
+					}
+				}
+			},
+			legend: {
+				show: false
+			}
+		});
+
+	function labelFormatter(label, series) {
+		return "<div style='font-size:8pt; text-align:center; padding:2px; color:white;'>" + label + "<br/>" + Math.round(series.percent) + "%</div>";
+	}
+
+
+   /*---------------------
+    ----- LINE CHART -----
+    ---------------------*/
+
+	var d1 = [[0,30],[1,35],[2,35],[3,30],[4,30],[5,35],[6,32],[7,37],[8,30],[9,35],[10,30],[11,31]];
+    var d2 = [[0,50],[1,40],[2,45],[3,60],[4,50],[5,50],[6,60],[7,55],[8,50],[9,50],[10,60],[11,35]];
+    var d3 = [[0,40],[1,50],[2,35],[3,25],[4,40],[5,45],[6,55],[7,50],[8,35],[9,40],[10,48],[11,40]];
+
+    /*---------------------------------------------------
+        Make some random data for Recent Items chart
+    ---------------------------------------------------*/
+    
+
+    var options = {
+        series: {
+            shadowSize: 0,
+            lines: {
+                show: true,
+            },
+        },
+        grid: {
+            borderWidth: 1,
+            labelMargin:10,
+			mouseActiveRadius:6,
+            borderColor: '#eee',
+            show : true,
+            hoverable : true,
+            clickable : true
+            
+        },
+        xaxis: {
+            tickColor: '#eee',
+            tickDecimals: 0,
+            font :{
+                lineHeight: 15,
+                style: "normal",
+                color: "#000"
+            },
+            shadowSize: 0,
+            ticks: [[0,"Jan"], [1,"Feb"], [2,"Mar"], [3,"Apr"], [4,"May"], [5,"Jun"], [6,"Jul"], [7,"Aug"], [8,"Sep"], [9,"Oct"], [10,"Nov"], [11,"Dec"]]
+        },
+        
+        yaxis: {
+            tickColor: '#eee',
+            tickDecimals: 0,
+            font :{
+                lineHeight: 15,
+                style: "normal",
+                color: "#000",
+            },
+            shadowSize: 0
+        },
+        
+        legend: {
+            container: '.flc-line',
+            backgroundOpacity: 0.5,
+            noColumns: 0,
+            backgroundColor: "white",
+            lineWidth: 0
+        },
+        colors: ["#EB5E28", "#F3BB45", "#68B3C8"]
+    };
+
+
+    if ($("#line-chart")[0]) {
+        $.plot($("#line-chart"), [
+			{data: d1, lines: { show: true  }, label: 'Product A', stack: true, color: '#EB5E28' },
+            {data: d2, lines: { show: true }, label: 'Product B', stack: true, color: '#F3BB45' },
+            {data: d3, lines: { show: true }, label: 'Product C', stack: true, color: '#68B3C8' }
+        ], options);
+    }
+
+
+
+
+    /*---------------------------------
+        Tooltips for Flot Charts
+    ---------------------------------*/
+    if ($(".flot-chart-line")[0]) {
+        $(".flot-chart-line").bind("plothover", function (event, pos, item) {
+            if (item) {
+                var x = item.datapoint[0].toFixed(2),
+                    y = item.datapoint[1].toFixed(2);
+				$(".flot-tooltip").html(item.series.label + " Sales " + " : " + y).css({top: item.pageY+5, left: item.pageX+5}).show();
+            }
+            else {
+                $(".flot-tooltip").hide();
+            }
+        });
+        
+        $("<div class='flot-tooltip' class='chart-tooltip'></div>").appendTo("body");
+    }
+
+
+
+
+   /*---------------------
+    ----- AREA CHART -----
+    ---------------------*/
+
+
+	var d1 = [[0,0],[1,35],[2,35],[3,30],[4,30],[5,5],[6,32],[7,37],[8,30],[9,35],[10,30],[11,5]];
+
+
+    var options = {
+        series: {
+            shadowSize: 0,
+            curvedLines: { //This is a third party plugin to make curved lines
+                apply: true,
+                active: true,
+                monotonicFit: true
+            },
+            lines: {
+                show: false,
+                fill:0.98,
+                lineWidth: 0,
+            },
+        },
+        grid: {
+            borderWidth: 0,
+            labelMargin:10,
+            hoverable: true,
+            clickable: true,
+            mouseActiveRadius:6,
+            
+        },
+        xaxis: {
+            tickDecimals: 0,
+            ticks: false
+        },
+        
+        yaxis: {
+            tickDecimals: 0,
+            ticks: false
+        },
+        
+        legend: {
+            show: false
+        }
+    };
+
+
+    if ($("#area-chart")[0]) {
+        $.plot($("#area-chart"), [
+            {data: d1, lines: { show: true, fill: 0.6 }, label: 'Product 1', stack: true, color: '#3F51B5' }
+        ], options);
+    }
+
+
+	
+	
+   /*---------------------
+    ----- COLUMN CHART -----
+    ---------------------*/
+    
+    $(function() {
+
+		var data = [ ["January", 10], ["February", 8], ["March", 4], ["April", 13], ["May", 17], ["June", 9] ];
+
+		$.plot("#column-chart", [ data ], {
+			series: {
+				bars: {
+					show: true,
+					barWidth: 0.6,
+					align: "center"
+				}
+			},
+			xaxis: {
+				mode: "categories",
+				tickLength: 0
+			},
+			
+			grid: {
+            	borderWidth: 0,
+            	labelMargin:10,
+            	hoverable: true,
+            	clickable: true,
+           	 	mouseActiveRadius:6,
+       		}
+			
+		});
+
+
+	});
+
+
+
+   /*--------------------------------
+    ----- STACKED CHART -----
+    --------------------------------*/
+    
+    	$(function() {
+
+		var d1 = [];
+		for (var i = 0; i <= 10; i += 1) {
+			d1.push([i, parseInt(Math.random() * 30)]);
+		}
+
+		var d2 = [];
+		for (var i = 0; i <= 10; i += 1) {
+			d2.push([i, parseInt(Math.random() * 30)]);
+		}
+
+		var d3 = [];
+		for (var i = 0; i <= 10; i += 1) {
+			d3.push([i, parseInt(Math.random() * 30)]);
+		}
+
+		
+		$.plot("#stacked-bar-chart", [ d1, d2, d3 ], {
+			series: {
+				stack: 0,
+				lines: {
+					show: false,
+					fill: true,
+					steps: false
+				},
+				bars: {
+					show: true,
+					barWidth: 0.6
+				},
+			},
+			grid: {
+				borderWidth: 0,
+				labelMargin:10,
+				hoverable: true,
+				clickable: true,
+				mouseActiveRadius:6,
+			}
+		});
+
+
+	});
+    
+   /*--------------------------------
+    ----- REALTIME CHART -----
+    --------------------------------*/
+   	$(function() {
+
+		// We use an inline data source in the example, usually data would
+		// be fetched from a server
+
+		var data = [],
+			totalPoints = 300;
+
+		function getRandomData() {
+
+			if (data.length > 0)
+				data = data.slice(1);
+
+			// Do a random walk
+
+			while (data.length < totalPoints) {
+
+				var prev = data.length > 0 ? data[data.length - 1] : 50,
+					y = prev + Math.random() * 10 - 5;
+
+				if (y < 0) {
+					y = 0;
+				} else if (y > 100) {
+					y = 100;
+				}
+
+				data.push(y);
+			}
+
+			// Zip the generated y values with the x values
+
+			var res = [];
+			for (var i = 0; i < data.length; ++i) {
+				res.push([i, data[i]])
+			}
+
+			return res;
+		}
+
+		// Set up the control widget
+
+		var updateInterval = 30;
+
+		var plot = $.plot("#realtime-chart", [ getRandomData() ], {
+			series: {
+				shadowSize: 0	// Drawing is faster without shadows
+			},
+			yaxis: {
+				min: 0,
+				max: 100
+			},
+			xaxis: {
+				show: false
+			},
+			grid: {
+				borderWidth: 0,
+				labelMargin:10,
+				hoverable: true,
+				clickable: true,
+				mouseActiveRadius:6,
+			}
+			
+		});
+
+
+		function update() {
+
+			plot.setData([getRandomData()]);
+
+			// Since the axes don't change, we don't need to call plot.setupGrid()
+
+			plot.draw();
+			setTimeout(update, updateInterval);
+		}
+
+		update();
+		
+
+
+	}); 

+ 190 - 0
web/js/vendors/charts/flot/jquery.flot.categories.js

@@ -0,0 +1,190 @@
+/* Flot plugin for plotting textual data or categories.
+
+Copyright (c) 2007-2014 IOLA and Ole Laursen.
+Licensed under the MIT license.
+
+Consider a dataset like [["February", 34], ["March", 20], ...]. This plugin
+allows you to plot such a dataset directly.
+
+To enable it, you must specify mode: "categories" on the axis with the textual
+labels, e.g.
+
+	$.plot("#placeholder", data, { xaxis: { mode: "categories" } });
+
+By default, the labels are ordered as they are met in the data series. If you
+need a different ordering, you can specify "categories" on the axis options
+and list the categories there:
+
+	xaxis: {
+		mode: "categories",
+		categories: ["February", "March", "April"]
+	}
+
+If you need to customize the distances between the categories, you can specify
+"categories" as an object mapping labels to values
+
+	xaxis: {
+		mode: "categories",
+		categories: { "February": 1, "March": 3, "April": 4 }
+	}
+
+If you don't specify all categories, the remaining categories will be numbered
+from the max value plus 1 (with a spacing of 1 between each).
+
+Internally, the plugin works by transforming the input data through an auto-
+generated mapping where the first category becomes 0, the second 1, etc.
+Hence, a point like ["February", 34] becomes [0, 34] internally in Flot (this
+is visible in hover and click events that return numbers rather than the
+category labels). The plugin also overrides the tick generator to spit out the
+categories as ticks instead of the values.
+
+If you need to map a value back to its label, the mapping is always accessible
+as "categories" on the axis object, e.g. plot.getAxes().xaxis.categories.
+
+*/
+
+(function ($) {
+    var options = {
+        xaxis: {
+            categories: null
+        },
+        yaxis: {
+            categories: null
+        }
+    };
+    
+    function processRawData(plot, series, data, datapoints) {
+        // if categories are enabled, we need to disable
+        // auto-transformation to numbers so the strings are intact
+        // for later processing
+
+        var xCategories = series.xaxis.options.mode == "categories",
+            yCategories = series.yaxis.options.mode == "categories";
+        
+        if (!(xCategories || yCategories))
+            return;
+
+        var format = datapoints.format;
+
+        if (!format) {
+            // FIXME: auto-detection should really not be defined here
+            var s = series;
+            format = [];
+            format.push({ x: true, number: true, required: true });
+            format.push({ y: true, number: true, required: true });
+
+            if (s.bars.show || (s.lines.show && s.lines.fill)) {
+                var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero));
+                format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale });
+                if (s.bars.horizontal) {
+                    delete format[format.length - 1].y;
+                    format[format.length - 1].x = true;
+                }
+            }
+            
+            datapoints.format = format;
+        }
+
+        for (var m = 0; m < format.length; ++m) {
+            if (format[m].x && xCategories)
+                format[m].number = false;
+            
+            if (format[m].y && yCategories)
+                format[m].number = false;
+        }
+    }
+
+    function getNextIndex(categories) {
+        var index = -1;
+        
+        for (var v in categories)
+            if (categories[v] > index)
+                index = categories[v];
+
+        return index + 1;
+    }
+
+    function categoriesTickGenerator(axis) {
+        var res = [];
+        for (var label in axis.categories) {
+            var v = axis.categories[label];
+            if (v >= axis.min && v <= axis.max)
+                res.push([v, label]);
+        }
+
+        res.sort(function (a, b) { return a[0] - b[0]; });
+
+        return res;
+    }
+    
+    function setupCategoriesForAxis(series, axis, datapoints) {
+        if (series[axis].options.mode != "categories")
+            return;
+        
+        if (!series[axis].categories) {
+            // parse options
+            var c = {}, o = series[axis].options.categories || {};
+            if ($.isArray(o)) {
+                for (var i = 0; i < o.length; ++i)
+                    c[o[i]] = i;
+            }
+            else {
+                for (var v in o)
+                    c[v] = o[v];
+            }
+            
+            series[axis].categories = c;
+        }
+
+        // fix ticks
+        if (!series[axis].options.ticks)
+            series[axis].options.ticks = categoriesTickGenerator;
+
+        transformPointsOnAxis(datapoints, axis, series[axis].categories);
+    }
+    
+    function transformPointsOnAxis(datapoints, axis, categories) {
+        // go through the points, transforming them
+        var points = datapoints.points,
+            ps = datapoints.pointsize,
+            format = datapoints.format,
+            formatColumn = axis.charAt(0),
+            index = getNextIndex(categories);
+
+        for (var i = 0; i < points.length; i += ps) {
+            if (points[i] == null)
+                continue;
+            
+            for (var m = 0; m < ps; ++m) {
+                var val = points[i + m];
+
+                if (val == null || !format[m][formatColumn])
+                    continue;
+
+                if (!(val in categories)) {
+                    categories[val] = index;
+                    ++index;
+                }
+                
+                points[i + m] = categories[val];
+            }
+        }
+    }
+
+    function processDatapoints(plot, series, datapoints) {
+        setupCategoriesForAxis(series, "xaxis", datapoints);
+        setupCategoriesForAxis(series, "yaxis", datapoints);
+    }
+
+    function init(plot) {
+        plot.hooks.processRawData.push(processRawData);
+        plot.hooks.processDatapoints.push(processDatapoints);
+    }
+    
+    $.plot.plugins.push({
+        init: init,
+        options: options,
+        name: 'categories',
+        version: '1.0'
+    });
+})(jQuery);

Fichier diff supprimé car celui-ci est trop grand
+ 3168 - 0
web/js/vendors/charts/flot/jquery.flot.js


+ 820 - 0
web/js/vendors/charts/flot/jquery.flot.pie.js

@@ -0,0 +1,820 @@
+/* Flot plugin for rendering pie charts.
+
+Copyright (c) 2007-2014 IOLA and Ole Laursen.
+Licensed under the MIT license.
+
+The plugin assumes that each series has a single data value, and that each
+value is a positive integer or zero.  Negative numbers don't make sense for a
+pie chart, and have unpredictable results.  The values do NOT need to be
+passed in as percentages; the plugin will calculate the total and per-slice
+percentages internally.
+
+* Created by Brian Medendorp
+
+* Updated with contributions from btburnett3, Anthony Aragues and Xavi Ivars
+
+The plugin supports these options:
+
+	series: {
+		pie: {
+			show: true/false
+			radius: 0-1 for percentage of fullsize, or a specified pixel length, or 'auto'
+			innerRadius: 0-1 for percentage of fullsize or a specified pixel length, for creating a donut effect
+			startAngle: 0-2 factor of PI used for starting angle (in radians) i.e 3/2 starts at the top, 0 and 2 have the same result
+			tilt: 0-1 for percentage to tilt the pie, where 1 is no tilt, and 0 is completely flat (nothing will show)
+			offset: {
+				top: integer value to move the pie up or down
+				left: integer value to move the pie left or right, or 'auto'
+			},
+			stroke: {
+				color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#FFF')
+				width: integer pixel width of the stroke
+			},
+			label: {
+				show: true/false, or 'auto'
+				formatter:  a user-defined function that modifies the text/style of the label text
+				radius: 0-1 for percentage of fullsize, or a specified pixel length
+				background: {
+					color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#000')
+					opacity: 0-1
+				},
+				threshold: 0-1 for the percentage value at which to hide labels (if they're too small)
+			},
+			combine: {
+				threshold: 0-1 for the percentage value at which to combine slices (if they're too small)
+				color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#CCC'), if null, the plugin will automatically use the color of the first slice to be combined
+				label: any text value of what the combined slice should be labeled
+			}
+			highlight: {
+				opacity: 0-1
+			}
+		}
+	}
+
+More detail and specific examples can be found in the included HTML file.
+
+*/
+
+(function($) {
+
+	// Maximum redraw attempts when fitting labels within the plot
+
+	var REDRAW_ATTEMPTS = 10;
+
+	// Factor by which to shrink the pie when fitting labels within the plot
+
+	var REDRAW_SHRINK = 0.95;
+
+	function init(plot) {
+
+		var canvas = null,
+			target = null,
+			options = null,
+			maxRadius = null,
+			centerLeft = null,
+			centerTop = null,
+			processed = false,
+			ctx = null;
+
+		// interactive variables
+
+		var highlights = [];
+
+		// add hook to determine if pie plugin in enabled, and then perform necessary operations
+
+		plot.hooks.processOptions.push(function(plot, options) {
+			if (options.series.pie.show) {
+
+				options.grid.show = false;
+
+				// set labels.show
+
+				if (options.series.pie.label.show == "auto") {
+					if (options.legend.show) {
+						options.series.pie.label.show = false;
+					} else {
+						options.series.pie.label.show = true;
+					}
+				}
+
+				// set radius
+
+				if (options.series.pie.radius == "auto") {
+					if (options.series.pie.label.show) {
+						options.series.pie.radius = 3/4;
+					} else {
+						options.series.pie.radius = 1;
+					}
+				}
+
+				// ensure sane tilt
+
+				if (options.series.pie.tilt > 1) {
+					options.series.pie.tilt = 1;
+				} else if (options.series.pie.tilt < 0) {
+					options.series.pie.tilt = 0;
+				}
+			}
+		});
+
+		plot.hooks.bindEvents.push(function(plot, eventHolder) {
+			var options = plot.getOptions();
+			if (options.series.pie.show) {
+				if (options.grid.hoverable) {
+					eventHolder.unbind("mousemove").mousemove(onMouseMove);
+				}
+				if (options.grid.clickable) {
+					eventHolder.unbind("click").click(onClick);
+				}
+			}
+		});
+
+		plot.hooks.processDatapoints.push(function(plot, series, data, datapoints) {
+			var options = plot.getOptions();
+			if (options.series.pie.show) {
+				processDatapoints(plot, series, data, datapoints);
+			}
+		});
+
+		plot.hooks.drawOverlay.push(function(plot, octx) {
+			var options = plot.getOptions();
+			if (options.series.pie.show) {
+				drawOverlay(plot, octx);
+			}
+		});
+
+		plot.hooks.draw.push(function(plot, newCtx) {
+			var options = plot.getOptions();
+			if (options.series.pie.show) {
+				draw(plot, newCtx);
+			}
+		});
+
+		function processDatapoints(plot, series, datapoints) {
+			if (!processed)	{
+				processed = true;
+				canvas = plot.getCanvas();
+				target = $(canvas).parent();
+				options = plot.getOptions();
+				plot.setData(combine(plot.getData()));
+			}
+		}
+
+		function combine(data) {
+
+			var total = 0,
+				combined = 0,
+				numCombined = 0,
+				color = options.series.pie.combine.color,
+				newdata = [];
+
+			// Fix up the raw data from Flot, ensuring the data is numeric
+
+			for (var i = 0; i < data.length; ++i) {
+
+				var value = data[i].data;
+
+				// If the data is an array, we'll assume that it's a standard
+				// Flot x-y pair, and are concerned only with the second value.
+
+				// Note how we use the original array, rather than creating a
+				// new one; this is more efficient and preserves any extra data
+				// that the user may have stored in higher indexes.
+
+				if ($.isArray(value) && value.length == 1) {
+    				value = value[0];
+				}
+
+				if ($.isArray(value)) {
+					// Equivalent to $.isNumeric() but compatible with jQuery < 1.7
+					if (!isNaN(parseFloat(value[1])) && isFinite(value[1])) {
+						value[1] = +value[1];
+					} else {
+						value[1] = 0;
+					}
+				} else if (!isNaN(parseFloat(value)) && isFinite(value)) {
+					value = [1, +value];
+				} else {
+					value = [1, 0];
+				}
+
+				data[i].data = [value];
+			}
+
+			// Sum up all the slices, so we can calculate percentages for each
+
+			for (var i = 0; i < data.length; ++i) {
+				total += data[i].data[0][1];
+			}
+
+			// Count the number of slices with percentages below the combine
+			// threshold; if it turns out to be just one, we won't combine.
+
+			for (var i = 0; i < data.length; ++i) {
+				var value = data[i].data[0][1];
+				if (value / total <= options.series.pie.combine.threshold) {
+					combined += value;
+					numCombined++;
+					if (!color) {
+						color = data[i].color;
+					}
+				}
+			}
+
+			for (var i = 0; i < data.length; ++i) {
+				var value = data[i].data[0][1];
+				if (numCombined < 2 || value / total > options.series.pie.combine.threshold) {
+					newdata.push(
+						$.extend(data[i], {     /* extend to allow keeping all other original data values
+						                           and using them e.g. in labelFormatter. */
+							data: [[1, value]],
+							color: data[i].color,
+							label: data[i].label,
+							angle: value * Math.PI * 2 / total,
+							percent: value / (total / 100)
+						})
+					);
+				}
+			}
+
+			if (numCombined > 1) {
+				newdata.push({
+					data: [[1, combined]],
+					color: color,
+					label: options.series.pie.combine.label,
+					angle: combined * Math.PI * 2 / total,
+					percent: combined / (total / 100)
+				});
+			}
+
+			return newdata;
+		}
+
+		function draw(plot, newCtx) {
+
+			if (!target) {
+				return; // if no series were passed
+			}
+
+			var canvasWidth = plot.getPlaceholder().width(),
+				canvasHeight = plot.getPlaceholder().height(),
+				legendWidth = target.children().filter(".legend").children().width() || 0;
+
+			ctx = newCtx;
+
+			// WARNING: HACK! REWRITE THIS CODE AS SOON AS POSSIBLE!
+
+			// When combining smaller slices into an 'other' slice, we need to
+			// add a new series.  Since Flot gives plugins no way to modify the
+			// list of series, the pie plugin uses a hack where the first call
+			// to processDatapoints results in a call to setData with the new
+			// list of series, then subsequent processDatapoints do nothing.
+
+			// The plugin-global 'processed' flag is used to control this hack;
+			// it starts out false, and is set to true after the first call to
+			// processDatapoints.
+
+			// Unfortunately this turns future setData calls into no-ops; they
+			// call processDatapoints, the flag is true, and nothing happens.
+
+			// To fix this we'll set the flag back to false here in draw, when
+			// all series have been processed, so the next sequence of calls to
+			// processDatapoints once again starts out with a slice-combine.
+			// This is really a hack; in 0.9 we need to give plugins a proper
+			// way to modify series before any processing begins.
+
+			processed = false;
+
+			// calculate maximum radius and center point
+
+			maxRadius =  Math.min(canvasWidth, canvasHeight / options.series.pie.tilt) / 2;
+			centerTop = canvasHeight / 2 + options.series.pie.offset.top;
+			centerLeft = canvasWidth / 2;
+
+			if (options.series.pie.offset.left == "auto") {
+				if (options.legend.position.match("w")) {
+					centerLeft += legendWidth / 2;
+				} else {
+					centerLeft -= legendWidth / 2;
+				}
+				if (centerLeft < maxRadius) {
+					centerLeft = maxRadius;
+				} else if (centerLeft > canvasWidth - maxRadius) {
+					centerLeft = canvasWidth - maxRadius;
+				}
+			} else {
+				centerLeft += options.series.pie.offset.left;
+			}
+
+			var slices = plot.getData(),
+				attempts = 0;
+
+			// Keep shrinking the pie's radius until drawPie returns true,
+			// indicating that all the labels fit, or we try too many times.
+
+			do {
+				if (attempts > 0) {
+					maxRadius *= REDRAW_SHRINK;
+				}
+				attempts += 1;
+				clear();
+				if (options.series.pie.tilt <= 0.8) {
+					drawShadow();
+				}
+			} while (!drawPie() && attempts < REDRAW_ATTEMPTS)
+
+			if (attempts >= REDRAW_ATTEMPTS) {
+				clear();
+				target.prepend("<div class='error'>Could not draw pie with labels contained inside canvas</div>");
+			}
+
+			if (plot.setSeries && plot.insertLegend) {
+				plot.setSeries(slices);
+				plot.insertLegend();
+			}
+
+			// we're actually done at this point, just defining internal functions at this point
+
+			function clear() {
+				ctx.clearRect(0, 0, canvasWidth, canvasHeight);
+				target.children().filter(".pieLabel, .pieLabelBackground").remove();
+			}
+
+			function drawShadow() {
+
+				var shadowLeft = options.series.pie.shadow.left;
+				var shadowTop = options.series.pie.shadow.top;
+				var edge = 10;
+				var alpha = options.series.pie.shadow.alpha;
+				var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;
+
+				if (radius >= canvasWidth / 2 - shadowLeft || radius * options.series.pie.tilt >= canvasHeight / 2 - shadowTop || radius <= edge) {
+					return;	// shadow would be outside canvas, so don't draw it
+				}
+
+				ctx.save();
+				ctx.translate(shadowLeft,shadowTop);
+				ctx.globalAlpha = alpha;
+				ctx.fillStyle = "#000";
+
+				// center and rotate to starting position
+
+				ctx.translate(centerLeft,centerTop);
+				ctx.scale(1, options.series.pie.tilt);
+
+				//radius -= edge;
+
+				for (var i = 1; i <= edge; i++) {
+					ctx.beginPath();
+					ctx.arc(0, 0, radius, 0, Math.PI * 2, false);
+					ctx.fill();
+					radius -= i;
+				}
+
+				ctx.restore();
+			}
+
+			function drawPie() {
+
+				var startAngle = Math.PI * options.series.pie.startAngle;
+				var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;
+
+				// center and rotate to starting position
+
+				ctx.save();
+				ctx.translate(centerLeft,centerTop);
+				ctx.scale(1, options.series.pie.tilt);
+				//ctx.rotate(startAngle); // start at top; -- This doesn't work properly in Opera
+
+				// draw slices
+
+				ctx.save();
+				var currentAngle = startAngle;
+				for (var i = 0; i < slices.length; ++i) {
+					slices[i].startAngle = currentAngle;
+					drawSlice(slices[i].angle, slices[i].color, true);
+				}
+				ctx.restore();
+
+				// draw slice outlines
+
+				if (options.series.pie.stroke.width > 0) {
+					ctx.save();
+					ctx.lineWidth = options.series.pie.stroke.width;
+					currentAngle = startAngle;
+					for (var i = 0; i < slices.length; ++i) {
+						drawSlice(slices[i].angle, options.series.pie.stroke.color, false);
+					}
+					ctx.restore();
+				}
+
+				// draw donut hole
+
+				drawDonutHole(ctx);
+
+				ctx.restore();
+
+				// Draw the labels, returning true if they fit within the plot
+
+				if (options.series.pie.label.show) {
+					return drawLabels();
+				} else return true;
+
+				function drawSlice(angle, color, fill) {
+
+					if (angle <= 0 || isNaN(angle)) {
+						return;
+					}
+
+					if (fill) {
+						ctx.fillStyle = color;
+					} else {
+						ctx.strokeStyle = color;
+						ctx.lineJoin = "round";
+					}
+
+					ctx.beginPath();
+					if (Math.abs(angle - Math.PI * 2) > 0.000000001) {
+						ctx.moveTo(0, 0); // Center of the pie
+					}
+
+					//ctx.arc(0, 0, radius, 0, angle, false); // This doesn't work properly in Opera
+					ctx.arc(0, 0, radius,currentAngle, currentAngle + angle / 2, false);
+					ctx.arc(0, 0, radius,currentAngle + angle / 2, currentAngle + angle, false);
+					ctx.closePath();
+					//ctx.rotate(angle); // This doesn't work properly in Opera
+					currentAngle += angle;
+
+					if (fill) {
+						ctx.fill();
+					} else {
+						ctx.stroke();
+					}
+				}
+
+				function drawLabels() {
+
+					var currentAngle = startAngle;
+					var radius = options.series.pie.label.radius > 1 ? options.series.pie.label.radius : maxRadius * options.series.pie.label.radius;
+
+					for (var i = 0; i < slices.length; ++i) {
+						if (slices[i].percent >= options.series.pie.label.threshold * 100) {
+							if (!drawLabel(slices[i], currentAngle, i)) {
+								return false;
+							}
+						}
+						currentAngle += slices[i].angle;
+					}
+
+					return true;
+
+					function drawLabel(slice, startAngle, index) {
+
+						if (slice.data[0][1] == 0) {
+							return true;
+						}
+
+						// format label text
+
+						var lf = options.legend.labelFormatter, text, plf = options.series.pie.label.formatter;
+
+						if (lf) {
+							text = lf(slice.label, slice);
+						} else {
+							text = slice.label;
+						}
+
+						if (plf) {
+							text = plf(text, slice);
+						}
+
+						var halfAngle = ((startAngle + slice.angle) + startAngle) / 2;
+						var x = centerLeft + Math.round(Math.cos(halfAngle) * radius);
+						var y = centerTop + Math.round(Math.sin(halfAngle) * radius) * options.series.pie.tilt;
+
+						var html = "<span class='pieLabel' id='pieLabel" + index + "' style='position:absolute;top:" + y + "px;left:" + x + "px;'>" + text + "</span>";
+						target.append(html);
+
+						var label = target.children("#pieLabel" + index);
+						var labelTop = (y - label.height() / 2);
+						var labelLeft = (x - label.width() / 2);
+
+						label.css("top", labelTop);
+						label.css("left", labelLeft);
+
+						// check to make sure that the label is not outside the canvas
+
+						if (0 - labelTop > 0 || 0 - labelLeft > 0 || canvasHeight - (labelTop + label.height()) < 0 || canvasWidth - (labelLeft + label.width()) < 0) {
+							return false;
+						}
+
+						if (options.series.pie.label.background.opacity != 0) {
+
+							// put in the transparent background separately to avoid blended labels and label boxes
+
+							var c = options.series.pie.label.background.color;
+
+							if (c == null) {
+								c = slice.color;
+							}
+
+							var pos = "top:" + labelTop + "px;left:" + labelLeft + "px;";
+							$("<div class='pieLabelBackground' style='position:absolute;width:" + label.width() + "px;height:" + label.height() + "px;" + pos + "background-color:" + c + ";'></div>")
+								.css("opacity", options.series.pie.label.background.opacity)
+								.insertBefore(label);
+						}
+
+						return true;
+					} // end individual label function
+				} // end drawLabels function
+			} // end drawPie function
+		} // end draw function
+
+		// Placed here because it needs to be accessed from multiple locations
+
+		function drawDonutHole(layer) {
+			if (options.series.pie.innerRadius > 0) {
+
+				// subtract the center
+
+				layer.save();
+				var innerRadius = options.series.pie.innerRadius > 1 ? options.series.pie.innerRadius : maxRadius * options.series.pie.innerRadius;
+				layer.globalCompositeOperation = "destination-out"; // this does not work with excanvas, but it will fall back to using the stroke color
+				layer.beginPath();
+				layer.fillStyle = options.series.pie.stroke.color;
+				layer.arc(0, 0, innerRadius, 0, Math.PI * 2, false);
+				layer.fill();
+				layer.closePath();
+				layer.restore();
+
+				// add inner stroke
+
+				layer.save();
+				layer.beginPath();
+				layer.strokeStyle = options.series.pie.stroke.color;
+				layer.arc(0, 0, innerRadius, 0, Math.PI * 2, false);
+				layer.stroke();
+				layer.closePath();
+				layer.restore();
+
+				// TODO: add extra shadow inside hole (with a mask) if the pie is tilted.
+			}
+		}
+
+		//-- Additional Interactive related functions --
+
+		function isPointInPoly(poly, pt) {
+			for(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i)
+				((poly[i][1] <= pt[1] && pt[1] < poly[j][1]) || (poly[j][1] <= pt[1] && pt[1]< poly[i][1]))
+				&& (pt[0] < (poly[j][0] - poly[i][0]) * (pt[1] - poly[i][1]) / (poly[j][1] - poly[i][1]) + poly[i][0])
+				&& (c = !c);
+			return c;
+		}
+
+		function findNearbySlice(mouseX, mouseY) {
+
+			var slices = plot.getData(),
+				options = plot.getOptions(),
+				radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius,
+				x, y;
+
+			for (var i = 0; i < slices.length; ++i) {
+
+				var s = slices[i];
+
+				if (s.pie.show) {
+
+					ctx.save();
+					ctx.beginPath();
+					ctx.moveTo(0, 0); // Center of the pie
+					//ctx.scale(1, options.series.pie.tilt);	// this actually seems to break everything when here.
+					ctx.arc(0, 0, radius, s.startAngle, s.startAngle + s.angle / 2, false);
+					ctx.arc(0, 0, radius, s.startAngle + s.angle / 2, s.startAngle + s.angle, false);
+					ctx.closePath();
+					x = mouseX - centerLeft;
+					y = mouseY - centerTop;
+
+					if (ctx.isPointInPath) {
+						if (ctx.isPointInPath(mouseX - centerLeft, mouseY - centerTop)) {
+							ctx.restore();
+							return {
+								datapoint: [s.percent, s.data],
+								dataIndex: 0,
+								series: s,
+								seriesIndex: i
+							};
+						}
+					} else {
+
+						// excanvas for IE doesn;t support isPointInPath, this is a workaround.
+
+						var p1X = radius * Math.cos(s.startAngle),
+							p1Y = radius * Math.sin(s.startAngle),
+							p2X = radius * Math.cos(s.startAngle + s.angle / 4),
+							p2Y = radius * Math.sin(s.startAngle + s.angle / 4),
+							p3X = radius * Math.cos(s.startAngle + s.angle / 2),
+							p3Y = radius * Math.sin(s.startAngle + s.angle / 2),
+							p4X = radius * Math.cos(s.startAngle + s.angle / 1.5),
+							p4Y = radius * Math.sin(s.startAngle + s.angle / 1.5),
+							p5X = radius * Math.cos(s.startAngle + s.angle),
+							p5Y = radius * Math.sin(s.startAngle + s.angle),
+							arrPoly = [[0, 0], [p1X, p1Y], [p2X, p2Y], [p3X, p3Y], [p4X, p4Y], [p5X, p5Y]],
+							arrPoint = [x, y];
+
+						// TODO: perhaps do some mathmatical trickery here with the Y-coordinate to compensate for pie tilt?
+
+						if (isPointInPoly(arrPoly, arrPoint)) {
+							ctx.restore();
+							return {
+								datapoint: [s.percent, s.data],
+								dataIndex: 0,
+								series: s,
+								seriesIndex: i
+							};
+						}
+					}
+
+					ctx.restore();
+				}
+			}
+
+			return null;
+		}
+
+		function onMouseMove(e) {
+			triggerClickHoverEvent("plothover", e);
+		}
+
+		function onClick(e) {
+			triggerClickHoverEvent("plotclick", e);
+		}
+
+		// trigger click or hover event (they send the same parameters so we share their code)
+
+		function triggerClickHoverEvent(eventname, e) {
+
+			var offset = plot.offset();
+			var canvasX = parseInt(e.pageX - offset.left);
+			var canvasY =  parseInt(e.pageY - offset.top);
+			var item = findNearbySlice(canvasX, canvasY);
+
+			if (options.grid.autoHighlight) {
+
+				// clear auto-highlights
+
+				for (var i = 0; i < highlights.length; ++i) {
+					var h = highlights[i];
+					if (h.auto == eventname && !(item && h.series == item.series)) {
+						unhighlight(h.series);
+					}
+				}
+			}
+
+			// highlight the slice
+
+			if (item) {
+				highlight(item.series, eventname);
+			}
+
+			// trigger any hover bind events
+
+			var pos = { pageX: e.pageX, pageY: e.pageY };
+			target.trigger(eventname, [pos, item]);
+		}
+
+		function highlight(s, auto) {
+			//if (typeof s == "number") {
+			//	s = series[s];
+			//}
+
+			var i = indexOfHighlight(s);
+
+			if (i == -1) {
+				highlights.push({ series: s, auto: auto });
+				plot.triggerRedrawOverlay();
+			} else if (!auto) {
+				highlights[i].auto = false;
+			}
+		}
+
+		function unhighlight(s) {
+			if (s == null) {
+				highlights = [];
+				plot.triggerRedrawOverlay();
+			}
+
+			//if (typeof s == "number") {
+			//	s = series[s];
+			//}
+
+			var i = indexOfHighlight(s);
+
+			if (i != -1) {
+				highlights.splice(i, 1);
+				plot.triggerRedrawOverlay();
+			}
+		}
+
+		function indexOfHighlight(s) {
+			for (var i = 0; i < highlights.length; ++i) {
+				var h = highlights[i];
+				if (h.series == s)
+					return i;
+			}
+			return -1;
+		}
+
+		function drawOverlay(plot, octx) {
+
+			var options = plot.getOptions();
+
+			var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;
+
+			octx.save();
+			octx.translate(centerLeft, centerTop);
+			octx.scale(1, options.series.pie.tilt);
+
+			for (var i = 0; i < highlights.length; ++i) {
+				drawHighlight(highlights[i].series);
+			}
+
+			drawDonutHole(octx);
+
+			octx.restore();
+
+			function drawHighlight(series) {
+
+				if (series.angle <= 0 || isNaN(series.angle)) {
+					return;
+				}
+
+				//octx.fillStyle = parseColor(options.series.pie.highlight.color).scale(null, null, null, options.series.pie.highlight.opacity).toString();
+				octx.fillStyle = "rgba(255, 255, 255, " + options.series.pie.highlight.opacity + ")"; // this is temporary until we have access to parseColor
+				octx.beginPath();
+				if (Math.abs(series.angle - Math.PI * 2) > 0.000000001) {
+					octx.moveTo(0, 0); // Center of the pie
+				}
+				octx.arc(0, 0, radius, series.startAngle, series.startAngle + series.angle / 2, false);
+				octx.arc(0, 0, radius, series.startAngle + series.angle / 2, series.startAngle + series.angle, false);
+				octx.closePath();
+				octx.fill();
+			}
+		}
+	} // end init (plugin body)
+
+	// define pie specific options and their default values
+
+	var options = {
+		series: {
+			pie: {
+				show: false,
+				radius: "auto",	// actual radius of the visible pie (based on full calculated radius if <=1, or hard pixel value)
+				innerRadius: 0, /* for donut */
+				startAngle: 3/2,
+				tilt: 1,
+				shadow: {
+					left: 5,	// shadow left offset
+					top: 15,	// shadow top offset
+					alpha: 0.02	// shadow alpha
+				},
+				offset: {
+					top: 0,
+					left: "auto"
+				},
+				stroke: {
+					color: "#fff",
+					width: 1
+				},
+				label: {
+					show: "auto",
+					formatter: function(label, slice) {
+						return "<div style='font-size:x-small;text-align:center;padding:2px;color:" + slice.color + ";'>" + label + "<br/>" + Math.round(slice.percent) + "%</div>";
+					},	// formatter function
+					radius: 1,	// radius at which to place the labels (based on full calculated radius if <=1, or hard pixel value)
+					background: {
+						color: null,
+						opacity: 0
+					},
+					threshold: 0	// percentage at which to hide the label (i.e. the slice is too narrow)
+				},
+				combine: {
+					threshold: -1,	// percentage at which to combine little slices into one larger slice
+					color: null,	// color to give the new slice (auto-generated if null)
+					label: "Other"	// label to give the new slice
+				},
+				highlight: {
+					//color: "#fff",		// will add this functionality once parseColor is available
+					opacity: 0.5
+				}
+			}
+		}
+	};
+
+	$.plot.plugins.push({
+		init: init,
+		options: options,
+		name: "pie",
+		version: "1.1"
+	});
+
+})(jQuery);

Fichier diff supprimé car celui-ci est trop grand
+ 59 - 0
web/js/vendors/charts/flot/jquery.flot.resize.js


+ 188 - 0
web/js/vendors/charts/flot/jquery.flot.stack.js

@@ -0,0 +1,188 @@
+/* Flot plugin for stacking data sets rather than overlyaing them.
+
+Copyright (c) 2007-2014 IOLA and Ole Laursen.
+Licensed under the MIT license.
+
+The plugin assumes the data is sorted on x (or y if stacking horizontally).
+For line charts, it is assumed that if a line has an undefined gap (from a
+null point), then the line above it should have the same gap - insert zeros
+instead of "null" if you want another behaviour. This also holds for the start
+and end of the chart. Note that stacking a mix of positive and negative values
+in most instances doesn't make sense (so it looks weird).
+
+Two or more series are stacked when their "stack" attribute is set to the same
+key (which can be any number or string or just "true"). To specify the default
+stack, you can set the stack option like this:
+
+	series: {
+		stack: null/false, true, or a key (number/string)
+	}
+
+You can also specify it for a single series, like this:
+
+	$.plot( $("#placeholder"), [{
+		data: [ ... ],
+		stack: true
+	}])
+
+The stacking order is determined by the order of the data series in the array
+(later series end up on top of the previous).
+
+Internally, the plugin modifies the datapoints in each series, adding an
+offset to the y value. For line series, extra data points are inserted through
+interpolation. If there's a second y value, it's also adjusted (e.g for bar
+charts or filled areas).
+
+*/
+
+(function ($) {
+    var options = {
+        series: { stack: null } // or number/string
+    };
+    
+    function init(plot) {
+        function findMatchingSeries(s, allseries) {
+            var res = null;
+            for (var i = 0; i < allseries.length; ++i) {
+                if (s == allseries[i])
+                    break;
+                
+                if (allseries[i].stack == s.stack)
+                    res = allseries[i];
+            }
+            
+            return res;
+        }
+        
+        function stackData(plot, s, datapoints) {
+            if (s.stack == null || s.stack === false)
+                return;
+
+            var other = findMatchingSeries(s, plot.getData());
+            if (!other)
+                return;
+
+            var ps = datapoints.pointsize,
+                points = datapoints.points,
+                otherps = other.datapoints.pointsize,
+                otherpoints = other.datapoints.points,
+                newpoints = [],
+                px, py, intery, qx, qy, bottom,
+                withlines = s.lines.show,
+                horizontal = s.bars.horizontal,
+                withbottom = ps > 2 && (horizontal ? datapoints.format[2].x : datapoints.format[2].y),
+                withsteps = withlines && s.lines.steps,
+                fromgap = true,
+                keyOffset = horizontal ? 1 : 0,
+                accumulateOffset = horizontal ? 0 : 1,
+                i = 0, j = 0, l, m;
+
+            while (true) {
+                if (i >= points.length)
+                    break;
+
+                l = newpoints.length;
+
+                if (points[i] == null) {
+                    // copy gaps
+                    for (m = 0; m < ps; ++m)
+                        newpoints.push(points[i + m]);
+                    i += ps;
+                }
+                else if (j >= otherpoints.length) {
+                    // for lines, we can't use the rest of the points
+                    if (!withlines) {
+                        for (m = 0; m < ps; ++m)
+                            newpoints.push(points[i + m]);
+                    }
+                    i += ps;
+                }
+                else if (otherpoints[j] == null) {
+                    // oops, got a gap
+                    for (m = 0; m < ps; ++m)
+                        newpoints.push(null);
+                    fromgap = true;
+                    j += otherps;
+                }
+                else {
+                    // cases where we actually got two points
+                    px = points[i + keyOffset];
+                    py = points[i + accumulateOffset];
+                    qx = otherpoints[j + keyOffset];
+                    qy = otherpoints[j + accumulateOffset];
+                    bottom = 0;
+
+                    if (px == qx) {
+                        for (m = 0; m < ps; ++m)
+                            newpoints.push(points[i + m]);
+
+                        newpoints[l + accumulateOffset] += qy;
+                        bottom = qy;
+                        
+                        i += ps;
+                        j += otherps;
+                    }
+                    else if (px > qx) {
+                        // we got past point below, might need to
+                        // insert interpolated extra point
+                        if (withlines && i > 0 && points[i - ps] != null) {
+                            intery = py + (points[i - ps + accumulateOffset] - py) * (qx - px) / (points[i - ps + keyOffset] - px);
+                            newpoints.push(qx);
+                            newpoints.push(intery + qy);
+                            for (m = 2; m < ps; ++m)
+                                newpoints.push(points[i + m]);
+                            bottom = qy; 
+                        }
+
+                        j += otherps;
+                    }
+                    else { // px < qx
+                        if (fromgap && withlines) {
+                            // if we come from a gap, we just skip this point
+                            i += ps;
+                            continue;
+                        }
+                            
+                        for (m = 0; m < ps; ++m)
+                            newpoints.push(points[i + m]);
+                        
+                        // we might be able to interpolate a point below,
+                        // this can give us a better y
+                        if (withlines && j > 0 && otherpoints[j - otherps] != null)
+                            bottom = qy + (otherpoints[j - otherps + accumulateOffset] - qy) * (px - qx) / (otherpoints[j - otherps + keyOffset] - qx);
+
+                        newpoints[l + accumulateOffset] += bottom;
+                        
+                        i += ps;
+                    }
+
+                    fromgap = false;
+                    
+                    if (l != newpoints.length && withbottom)
+                        newpoints[l + 2] += bottom;
+                }
+
+                // maintain the line steps invariant
+                if (withsteps && l != newpoints.length && l > 0
+                    && newpoints[l] != null
+                    && newpoints[l] != newpoints[l - ps]
+                    && newpoints[l + 1] != newpoints[l - ps + 1]) {
+                    for (m = 0; m < ps; ++m)
+                        newpoints[l + ps + m] = newpoints[l + m];
+                    newpoints[l + 1] = newpoints[l - ps + 1];
+                }
+            }
+
+            datapoints.points = newpoints;
+        }
+        
+        plot.hooks.processDatapoints.push(stackData);
+    }
+    
+    $.plot.plugins.push({
+        init: init,
+        options: options,
+        name: 'stack',
+        version: '1.2'
+    });
+})(jQuery);

+ 0 - 0
web/js/vendors/demo.js


Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff