Ver código fonte

初始socket代码

quyueting 5 anos atrás
pai
commit
ddf164be34
100 arquivos alterados com 1979 adições e 0 exclusões
  1. 10 0
      cloud-socket/.classpath
  2. 36 0
      cloud-socket/.project
  3. 12 0
      cloud-socket/.settings/.jsdtscope
  4. 2 0
      cloud-socket/.settings/org.eclipse.core.resources.prefs
  5. 12 0
      cloud-socket/.settings/org.eclipse.jdt.core.prefs
  6. 8 0
      cloud-socket/.settings/org.eclipse.wst.common.component
  7. 10 0
      cloud-socket/.settings/org.eclipse.wst.common.project.facet.core.xml
  8. 1 0
      cloud-socket/.settings/org.eclipse.wst.jsdt.ui.superType.container
  9. 1 0
      cloud-socket/.settings/org.eclipse.wst.jsdt.ui.superType.name
  10. 3 0
      cloud-socket/WebContent/META-INF/MANIFEST.MF
  11. BIN
      cloud-socket/WebContent/WEB-INF/lib/DBPool-5.1.jar
  12. BIN
      cloud-socket/WebContent/WEB-INF/lib/ZXing-core-2.2.jar
  13. BIN
      cloud-socket/WebContent/WEB-INF/lib/ZXing-javase-2.2.jar
  14. BIN
      cloud-socket/WebContent/WEB-INF/lib/activation.jar
  15. BIN
      cloud-socket/WebContent/WEB-INF/lib/alipay-sdk-java20170615110434.jar
  16. BIN
      cloud-socket/WebContent/WEB-INF/lib/aliyun-java-sdk-core-3.2.2.jar
  17. BIN
      cloud-socket/WebContent/WEB-INF/lib/aliyun-java-sdk-push-3.1.0.jar
  18. BIN
      cloud-socket/WebContent/WEB-INF/lib/aopalliance-1.0.jar
  19. BIN
      cloud-socket/WebContent/WEB-INF/lib/asm-all-3.0.jar
  20. BIN
      cloud-socket/WebContent/WEB-INF/lib/backport-util-concurrent-3.1.jar
  21. BIN
      cloud-socket/WebContent/WEB-INF/lib/cglib-2.2.2.jar
  22. BIN
      cloud-socket/WebContent/WEB-INF/lib/commons-codec-1.9.jar
  23. BIN
      cloud-socket/WebContent/WEB-INF/lib/commons-dbcp-1.4.jar
  24. BIN
      cloud-socket/WebContent/WEB-INF/lib/commons-fileupload-1.2.2.jar
  25. BIN
      cloud-socket/WebContent/WEB-INF/lib/commons-fileupload-1.3.1.jar
  26. BIN
      cloud-socket/WebContent/WEB-INF/lib/commons-httpclient-3.1.jar
  27. BIN
      cloud-socket/WebContent/WEB-INF/lib/commons-io-2.4.jar
  28. BIN
      cloud-socket/WebContent/WEB-INF/lib/commons-lang-2.4-1.jar
  29. BIN
      cloud-socket/WebContent/WEB-INF/lib/commons-logging-1.1.3.jar
  30. BIN
      cloud-socket/WebContent/WEB-INF/lib/commons-pool-1.6.jar
  31. BIN
      cloud-socket/WebContent/WEB-INF/lib/dsn.jar
  32. BIN
      cloud-socket/WebContent/WEB-INF/lib/fastjson-1.1.24.jar
  33. BIN
      cloud-socket/WebContent/WEB-INF/lib/fastjson-1.1.28.jar
  34. BIN
      cloud-socket/WebContent/WEB-INF/lib/gimap.jar
  35. BIN
      cloud-socket/WebContent/WEB-INF/lib/gson-2.2.2.jar
  36. BIN
      cloud-socket/WebContent/WEB-INF/lib/httpclient-4.2.5.jar
  37. BIN
      cloud-socket/WebContent/WEB-INF/lib/httpclient-cache-4.2.5.jar
  38. BIN
      cloud-socket/WebContent/WEB-INF/lib/httpcore-4.2.4.jar
  39. BIN
      cloud-socket/WebContent/WEB-INF/lib/httpmime-4.2.5.jar
  40. BIN
      cloud-socket/WebContent/WEB-INF/lib/imap.jar
  41. BIN
      cloud-socket/WebContent/WEB-INF/lib/jackson-all-2.8.0.jar
  42. BIN
      cloud-socket/WebContent/WEB-INF/lib/jai_codec.jar
  43. BIN
      cloud-socket/WebContent/WEB-INF/lib/jai_core.jar
  44. BIN
      cloud-socket/WebContent/WEB-INF/lib/jave-1.0.2.jar
  45. BIN
      cloud-socket/WebContent/WEB-INF/lib/jdom.jar
  46. BIN
      cloud-socket/WebContent/WEB-INF/lib/json.jar
  47. BIN
      cloud-socket/WebContent/WEB-INF/lib/jstl.jar
  48. BIN
      cloud-socket/WebContent/WEB-INF/lib/log4j-1.2.15.jar
  49. BIN
      cloud-socket/WebContent/WEB-INF/lib/mailapi.jar
  50. BIN
      cloud-socket/WebContent/WEB-INF/lib/mybatis-3.1.1-SNAPSHOT.jar
  51. BIN
      cloud-socket/WebContent/WEB-INF/lib/mybatis-spring-1.2.0.jar
  52. BIN
      cloud-socket/WebContent/WEB-INF/lib/mysql-connector-java-5.1.31-bin.jar
  53. BIN
      cloud-socket/WebContent/WEB-INF/lib/mysql-connector-java-5.1.34-bin.jar
  54. BIN
      cloud-socket/WebContent/WEB-INF/lib/netty-all-4.1.5.Final.jar
  55. BIN
      cloud-socket/WebContent/WEB-INF/lib/org.json.JsonObject.jar
  56. BIN
      cloud-socket/WebContent/WEB-INF/lib/org.springframework.aop-3.1.1.RELEASE.jar
  57. BIN
      cloud-socket/WebContent/WEB-INF/lib/org.springframework.asm-3.1.1.RELEASE.jar
  58. BIN
      cloud-socket/WebContent/WEB-INF/lib/org.springframework.beans-3.1.1.RELEASE.jar
  59. BIN
      cloud-socket/WebContent/WEB-INF/lib/org.springframework.context-3.1.1.RELEASE.jar
  60. BIN
      cloud-socket/WebContent/WEB-INF/lib/org.springframework.core-3.1.1.RELEASE.jar
  61. BIN
      cloud-socket/WebContent/WEB-INF/lib/org.springframework.expression-3.1.1.RELEASE.jar
  62. BIN
      cloud-socket/WebContent/WEB-INF/lib/org.springframework.jdbc-3.1.1.RELEASE.jar
  63. BIN
      cloud-socket/WebContent/WEB-INF/lib/org.springframework.transaction-3.1.1.RELEASE.jar
  64. BIN
      cloud-socket/WebContent/WEB-INF/lib/org.springframework.web-3.1.1.RELEASE.jar
  65. BIN
      cloud-socket/WebContent/WEB-INF/lib/org.springframework.web.servlet-3.1.1.RELEASE.jar
  66. BIN
      cloud-socket/WebContent/WEB-INF/lib/pop3.jar
  67. BIN
      cloud-socket/WebContent/WEB-INF/lib/slf4j-api-1.6.6.jar
  68. BIN
      cloud-socket/WebContent/WEB-INF/lib/slf4j-log4j12-1.6.6.jar
  69. BIN
      cloud-socket/WebContent/WEB-INF/lib/smtp.jar
  70. BIN
      cloud-socket/WebContent/WEB-INF/lib/spring-websocket-4.0.4.RELEASE.jar
  71. BIN
      cloud-socket/WebContent/WEB-INF/lib/standard.jar
  72. BIN
      cloud-socket/WebContent/WEB-INF/lib/taobao-sdk-java-auto_1455552377940-20160607.jar
  73. BIN
      cloud-socket/WebContent/WEB-INF/lib/ueditor-1.1.2.jar
  74. 43 0
      cloud-socket/WebContent/WEB-INF/web.xml
  75. 156 0
      cloud-socket/WebContent/addOwner.html
  76. 150 0
      cloud-socket/WebContent/addProperty.html
  77. 40 0
      cloud-socket/WebContent/backend/dialogs/anchor/anchor.html
  78. 681 0
      cloud-socket/WebContent/backend/dialogs/attachment/attachment.css
  79. 60 0
      cloud-socket/WebContent/backend/dialogs/attachment/attachment.html
  80. 754 0
      cloud-socket/WebContent/backend/dialogs/attachment/attachment.js
  81. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_chm.gif
  82. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_default.png
  83. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_doc.gif
  84. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_exe.gif
  85. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_jpg.gif
  86. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_mp3.gif
  87. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_mv.gif
  88. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_pdf.gif
  89. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_ppt.gif
  90. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_psd.gif
  91. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_rar.gif
  92. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_txt.gif
  93. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_xls.gif
  94. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/images/alignicon.gif
  95. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/images/alignicon.png
  96. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/images/bg.png
  97. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/images/file-icons.gif
  98. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/images/file-icons.png
  99. BIN
      cloud-socket/WebContent/backend/dialogs/attachment/images/icons.gif
  100. 0 0
      cloud-socket/WebContent/backend/dialogs/attachment/images/icons.png

+ 10 - 0
cloud-socket/.classpath

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<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.junit.JUNIT_CONTAINER/4"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v9.0"/>
+	<classpathentry kind="output" path="build/classes"/>
+</classpath>

+ 36 - 0
cloud-socket/.project

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>cloud-socket</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.common.project.facet.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.validation.validationbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+	</natures>
+</projectDescription>

+ 12 - 0
cloud-socket/.settings/.jsdtscope

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="WebContent"/>
+	<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="output" path=""/>
+</classpath>

+ 2 - 0
cloud-socket/.settings/org.eclipse.core.resources.prefs

@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding//src/com/tenpay=GBK

+ 12 - 0
cloud-socket/.settings/org.eclipse.jdt.core.prefs

@@ -0,0 +1,12 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7

+ 8 - 0
cloud-socket/.settings/org.eclipse.wst.common.component

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

+ 10 - 0
cloud-socket/.settings/org.eclipse.wst.common.project.facet.core.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+  <runtime name="Apache Tomcat v7.0"/>
+  <fixed facet="java"/>
+  <fixed facet="wst.jsdt.web"/>
+  <fixed facet="jst.web"/>
+  <installed facet="java" version="1.7"/>
+  <installed facet="jst.web" version="3.0"/>
+  <installed facet="wst.jsdt.web" version="1.0"/>
+</faceted-project>

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

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

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

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

+ 3 - 0
cloud-socket/WebContent/META-INF/MANIFEST.MF

@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path: 
+

BIN
cloud-socket/WebContent/WEB-INF/lib/DBPool-5.1.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/ZXing-core-2.2.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/ZXing-javase-2.2.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/activation.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/alipay-sdk-java20170615110434.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/aliyun-java-sdk-core-3.2.2.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/aliyun-java-sdk-push-3.1.0.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/aopalliance-1.0.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/asm-all-3.0.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/backport-util-concurrent-3.1.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/cglib-2.2.2.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/commons-codec-1.9.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/commons-dbcp-1.4.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/commons-fileupload-1.2.2.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/commons-fileupload-1.3.1.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/commons-httpclient-3.1.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/commons-io-2.4.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/commons-lang-2.4-1.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/commons-logging-1.1.3.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/commons-pool-1.6.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/dsn.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/fastjson-1.1.24.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/fastjson-1.1.28.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/gimap.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/gson-2.2.2.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/httpclient-4.2.5.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/httpclient-cache-4.2.5.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/httpcore-4.2.4.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/httpmime-4.2.5.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/imap.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/jackson-all-2.8.0.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/jai_codec.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/jai_core.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/jave-1.0.2.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/jdom.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/json.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/jstl.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/log4j-1.2.15.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/mailapi.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/mybatis-3.1.1-SNAPSHOT.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/mybatis-spring-1.2.0.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/mysql-connector-java-5.1.31-bin.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/mysql-connector-java-5.1.34-bin.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/netty-all-4.1.5.Final.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/org.json.JsonObject.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/org.springframework.aop-3.1.1.RELEASE.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/org.springframework.asm-3.1.1.RELEASE.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/org.springframework.beans-3.1.1.RELEASE.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/org.springframework.context-3.1.1.RELEASE.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/org.springframework.core-3.1.1.RELEASE.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/org.springframework.expression-3.1.1.RELEASE.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/org.springframework.jdbc-3.1.1.RELEASE.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/org.springframework.transaction-3.1.1.RELEASE.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/org.springframework.web-3.1.1.RELEASE.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/org.springframework.web.servlet-3.1.1.RELEASE.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/pop3.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/slf4j-api-1.6.6.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/slf4j-log4j12-1.6.6.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/smtp.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/spring-websocket-4.0.4.RELEASE.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/standard.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/taobao-sdk-java-auto_1455552377940-20160607.jar


BIN
cloud-socket/WebContent/WEB-INF/lib/ueditor-1.1.2.jar


+ 43 - 0
cloud-socket/WebContent/WEB-INF/web.xml

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
+  <display-name>cloudsocket</display-name>
+  <context-param>
+    <param-name>contextConfigLocation</param-name>
+    <param-value>classpath:applicationContext.xml</param-value>
+  </context-param>
+  <listener>
+    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+  </listener>
+  <filter>
+    <filter-name>CharacterEncodingFilter</filter-name>
+    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
+    <init-param>
+      <param-name>encoding</param-name>
+      <param-value>utf-8</param-value>
+    </init-param>
+    <init-param>
+      <param-name>forceEncoding</param-name>
+      <param-value>true</param-value>
+    </init-param>
+  </filter>
+  <filter-mapping>
+    <filter-name>CharacterEncodingFilter</filter-name>
+    <url-pattern>/*</url-pattern>
+  </filter-mapping>
+  
+  <servlet>
+    <servlet-name>spring</servlet-name>
+    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+    <init-param>
+      <param-name>contextConfigLocation</param-name>
+      <param-value>classpath:context-dispatcher.xml</param-value>
+    </init-param>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>spring</servlet-name>
+    <url-pattern>*.do</url-pattern>
+  </servlet-mapping>
+  <welcome-file-list>
+    <welcome-file>login.html</welcome-file>
+  </welcome-file-list>
+</web-app>

+ 156 - 0
cloud-socket/WebContent/addOwner.html

@@ -0,0 +1,156 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>添加物业</title>
+<script type="text/javascript" src="js/jquery-2.1.1.min.js"></script>
+<link rel="stylesheet" href="css/bootstrap.css"/>
+<script src="js/bootstrap.js"></script>
+<script src="js/public.js"></script> 
+<style>
+	*{
+		margin:0;
+		padding:0;
+	}
+	.title{
+		width:100%;
+		height:50px;
+		font-size:16px;
+		background:#555;
+		text-align:center;
+		color:#fff;
+		line-height:50px;
+		font-weight:600;
+	}
+	h4.title>span:last-child img{
+		width: 18px;
+    	vertical-align: text-bottom;
+    	margin-left: 10px;
+    	cursor:pointer;
+	}
+	#formArea>p{
+			position:relative;
+	}
+	#formArea>p input,#formArea>p select{
+			padding-left:84px;
+	}
+	#formArea>p>span{
+			position: absolute;
+		    left: 10px;
+		    display: inline-block;
+		    width: 80px;
+		    height: 34px;
+		    line-height: 34px;
+		    color:#555;
+	}
+	@media screen and (min-width:1024px){
+		.formArea{
+			width:40%;
+			margin:0 auto;
+			padding-top:60px;
+		}
+		.formArea input,select{
+			margin-bottom:20px;
+		}
+	}
+	@media screen and (max-width:1024px){
+		.formArea{
+			width:90%;
+			margin:0 auto;
+		}
+	}
+</style>
+<script>
+var comId;
+var postUrl = "system/addCommunityProperty.do";
+	$(function(){
+		loadWy();
+		if(sessionStorage.id != null && sessionStorage.userName == "系统"){
+			$("h4.title>span:last-child").html("<img onclick='returnPage()' src='images/return.png'>");
+			comId = getQueryString("id");
+			if(comId != null){
+				$("h4.title>span:first-child").html("修改业主");
+				postUrl = "system/updateCommunityProperty.do"
+				$.post("getComDetail.do",{"comId":comId},function(resp){
+					var proData = resp.data;
+					for(key in proData){
+						$("#"+key).val(proData[key]);
+					}
+					$("#rePwd").val(proData.pwd);
+				})				
+			}
+		}
+	})
+
+function getQueryString(name) {
+    var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
+    var r = window.location.search.substr(1).match(reg);
+    if (r != null) {
+        return unescape(r[2]);
+    }
+    return null;
+}
+/*获取物业*/
+function loadWy(){
+	$.post("system/getCommunityPropertyAllMessageList.do",{},function(resp) {
+		var listArray = resp.data;
+		$("#comId").html("<option value=''>--请选择--</option>")
+		for(var i = 0;i<listArray.length;i++){
+		 	var leng = "<option value=\""+listArray[i].id+"\">"+listArray[i].username+"</option>";
+		 	$("#comId").append(leng);
+		}
+	})
+}
+/*提交*/	
+	function submits(){
+		var param = {};
+		if($("#nickname").val() == ""){ 
+			alert("请输入账号");
+			return
+		}
+		if($("#mobile").val() == ""){ 
+			alert("请输入手机号");
+			return
+		}
+		if($("#comId").val() == ""){ 
+			alert("请选择物业");
+			return
+		}
+// 		if($("#income").val() != "" && ($("#income").val() < 0 || $("#income").val() > 100)){ 
+// 			alert("收益范围0~100"); 
+// 			return
+// 		}
+		var formData = $("#formArea").serialize();
+		if(comId != null){
+			formData += "&id="+comId;
+		}
+		console.log(formData)
+		$.post("addUser.do",formData,function(resp){
+			if(resp.code == "ok"){
+				alert("提交成功!");
+				location.reload();
+			}else{
+				alert(resp.msg);
+			}
+		});
+	}
+</script>
+</head>
+<body>
+	<h4 class="title"><span>添加业主</span><span></span></h4>
+	<div class="formArea">
+		<form id="formArea">
+		<p><span>账 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;号:</span><input type="text" class="form-control" id="count" name="count"></p>
+		<p><span>姓 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;名:</span><input type="text" class="form-control" id="nickname" name="nickname"></p>
+		<p><span>手 &nbsp;机&nbsp; 号:</span><input type="text" class="form-control" id="mobile" name="mobile"></p>
+		<p><span>住 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;址:</span><input type="text" class="form-control" id="address" name="address"></p>
+		<p><span>所属物业:</span><select class="form-control" id="comId" name="comId">
+		</select>
+		</p>
+		<p><span>收 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;益:</span><input type="number" class="form-control" placeholder="0~100" id="income" name="income"></p>
+		<button type="button" class="btn btn-success btn-md btn-block" onclick="submits()">提交</button>
+		</form>
+	</div>
+</body>
+</html>

+ 150 - 0
cloud-socket/WebContent/addProperty.html

@@ -0,0 +1,150 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>添加物业</title>
+<script type="text/javascript" src="js/jquery-2.1.1.min.js"></script>
+<link rel="stylesheet" href="css/bootstrap.css"/>
+<script src="js/bootstrap.js"></script>
+<script src="js/public.js"></script> 
+<style>
+	*{
+		margin:0;
+		padding:0;
+	}
+	.title{
+		width:100%;
+		height:50px;
+		font-size:16px;
+		background:#555;
+		text-align:center;
+		color:#fff;
+		line-height:50px;
+		font-weight:600;
+	}
+	h4.title>span:last-child img{
+		width: 18px;
+    	vertical-align: text-bottom;
+    	margin-left: 10px;
+    	cursor:pointer;
+	}
+	#formArea>p{
+			position:relative;
+	}
+	#formArea>p input,select{
+			padding-left:84px;
+	}
+	#formArea>p>span{
+			position: absolute;
+		    left: 10px;
+		    display: inline-block;
+		    width: 80px;
+		    height: 34px;
+		    line-height: 34px;
+		    color:#555;
+	}
+	@media screen and (min-width:1024px){
+		.formArea{
+			width:40%;
+			margin:0 auto;
+			padding-top:60px;
+		}
+		.formArea input{
+			margin-bottom:20px;
+		}
+	}
+	@media screen and (max-width:1024px){
+		.formArea{
+			width:90%;
+			margin:0 auto;
+		}
+	}
+</style>
+<script>
+var comId;
+var postUrl = "addCommunityProperty.do";
+	$(function(){
+		if(sessionStorage.id != null && sessionStorage.userName == "系统"){
+			$("h4.title>span:last-child").html("<img onclick='returnPage()' src='images/return.png'>");
+			comId = getQueryString("id");
+			if(comId != null){
+				$("h4.title>span:first-child").html("修改物业");
+				postUrl = "updateCommunityProperty.do"
+				$.post("getComDetail.do",{"comId":comId},function(resp){
+					var proData = resp.data;
+					for(key in proData){
+						$("#"+key).val(proData[key]);
+					}
+					$("#rePwd").val(proData.pwd);
+				})				
+			}
+		}
+	})
+
+function getQueryString(name) {
+    var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
+    var r = window.location.search.substr(1).match(reg);
+    if (r != null) {
+        return unescape(r[2]);
+    }
+    return null;
+}
+/*提交*/	
+	function submits(){
+		var param = {};
+		if($("#username").val() == ""){ 
+			alert("请输入账号");
+			return
+		}
+		if($("#pwd").val() == ""){ 
+			alert("请输入密码");
+			return
+		}
+		if($("#rePwd").val() == ""){ 
+			alert("请再次输入密码"); 
+			return
+		}
+		if($("#pwd").val() != $("#rePwd").val()){ 
+			alert("两次密码输入不一致"); 
+			return
+		}
+		if($("#serviceFee").val() != "" && ($("#serviceFee").val()*1 < 0 || $("#serviceFee").val()*1 > 100)){ 
+			alert("服务费率范围0~100"); 
+			return
+		}
+		var formData = $("#formArea").serialize();
+		if(comId != null){
+			formData += "&id="+comId;
+		}
+		$.post(postUrl,formData,function(resp){
+			if(resp.code == "ok"){
+				alert("提交成功!");
+				if(sessionStorage.id != null && sessionStorage.userName == "系统"){
+					location.href="index.html#/property";
+				}else{
+					location.reload();
+				}				
+			}else{
+				alert(resp.msg);
+			}
+		})
+	}
+</script>
+</head>
+<body>
+	<h4 class="title"><span>添加物业</span><span></span></h4>
+	<div class="formArea">
+		<form id="formArea">
+		<p><span>账 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;号:</span><input autocomplete="new-password" type="text" class="form-control" id="username" name="username"></p>
+		<p><span>密 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码:</span><input autocomplete="new-password" type="password" class="form-control" id="pwd" name="pwd"></p>
+		<p><span>重复密码:</span><input type="password" class="form-control" autocomplete="new-password" id="rePwd"></p>
+		<p><span>联系方式:</span><input type="text" class="form-control" id="tel" name="tel"></p>
+		<p><span>营业证名:</span><input type="text" class="form-control" id="name" name="name"></p>	
+		<p><span>银行账户:</span><input type="number" class="form-control" id="bankAccount" name="bankAccount"></p>
+		<p><span>服务费率:</span><input type="number" class="form-control" id="serviceFee" name="serviceFee"></p>
+		<button type="button" class="btn btn-success btn-md btn-block" onclick="submits()">提交</button>
+		</form>
+	</div>
+</body>
+</html>

+ 40 - 0
cloud-socket/WebContent/backend/dialogs/anchor/anchor.html

@@ -0,0 +1,40 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+    "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+        <title></title>
+        <style type="text/css">
+            *{color: #838383;margin: 0;padding: 0}
+            html,body {font-size: 12px;overflow: hidden; }
+            .content{padding:5px 0 0 15px;}
+            input{width:210px;height:21px;line-height:21px;margin-left: 4px;}
+        </style>
+    </head>
+    <body>
+        <div class="content">
+            <span><var id="lang_input_anchorName"></var></span><input id="anchorName"  value="" />
+        </div>
+        <script type="text/javascript" src="../internal.js"></script>
+        <script type="text/javascript">
+            var anchorInput = $G('anchorName'),
+                node = editor.selection.getRange().getClosedNode();
+            if(node && node.tagName == 'IMG' && (node = node.getAttribute('anchorname'))){
+                anchorInput.value = node;
+            }
+            anchorInput.onkeydown = function(evt){
+                evt = evt || window.event;
+                if(evt.keyCode == 13){
+                    editor.execCommand('anchor', anchorInput.value);
+                    dialog.close();
+                    domUtils.preventDefault(evt)
+                }
+            };
+            dialog.onok = function (){
+                editor.execCommand('anchor', anchorInput.value);
+                dialog.close();
+            };
+            $focus(anchorInput);
+        </script>
+    </body>
+</html>

+ 681 - 0
cloud-socket/WebContent/backend/dialogs/attachment/attachment.css

@@ -0,0 +1,681 @@
+@charset "utf-8";
+/* dialog样式 */
+.wrapper {
+    zoom: 1;
+    width: 630px;
+    *width: 626px;
+    height: 380px;
+    margin: 0 auto;
+    padding: 10px;
+    position: relative;
+    font-family: sans-serif;
+}
+
+/*tab样式框大小*/
+.tabhead {
+    float:left;
+}
+.tabbody {
+    width: 100%;
+    height: 346px;
+    position: relative;
+    clear: both;
+}
+
+.tabbody .panel {
+    position: absolute;
+    width: 0;
+    height: 0;
+    background: #fff;
+    overflow: hidden;
+    display: none;
+}
+
+.tabbody .panel.focus {
+    width: 100%;
+    height: 346px;
+    display: block;
+}
+
+/* 上传附件 */
+.tabbody #upload.panel {
+    width: 0;
+    height: 0;
+    overflow: hidden;
+    position: absolute !important;
+    clip: rect(1px, 1px, 1px, 1px);
+    background: #fff;
+    display: block;
+}
+
+.tabbody #upload.panel.focus {
+    width: 100%;
+    height: 346px;
+    display: block;
+    clip: auto;
+}
+
+#upload .queueList {
+    margin: 0;
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    overflow: hidden;
+}
+
+#upload p {
+    margin: 0;
+}
+
+.element-invisible {
+    width: 0 !important;
+    height: 0 !important;
+    border: 0;
+    padding: 0;
+    margin: 0;
+    overflow: hidden;
+    position: absolute !important;
+    clip: rect(1px, 1px, 1px, 1px);
+}
+
+#upload .placeholder {
+    margin: 10px;
+    border: 2px dashed #e6e6e6;
+    *border: 0px dashed #e6e6e6;
+    height: 172px;
+    padding-top: 150px;
+    text-align: center;
+    background: url(./images/image.png) center 70px no-repeat;
+    color: #cccccc;
+    font-size: 18px;
+    position: relative;
+    top:0;
+    *top: 10px;
+}
+
+#upload .placeholder .webuploader-pick {
+    font-size: 18px;
+    background: #00b7ee;
+    border-radius: 3px;
+    line-height: 44px;
+    padding: 0 30px;
+    *width: 120px;
+    color: #fff;
+    display: inline-block;
+    margin: 0 auto 20px auto;
+    cursor: pointer;
+    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
+}
+
+#upload .placeholder .webuploader-pick-hover {
+    background: #00a2d4;
+}
+
+
+#filePickerContainer {
+    text-align: center;
+}
+
+#upload .placeholder .flashTip {
+    color: #666666;
+    font-size: 12px;
+    position: absolute;
+    width: 100%;
+    text-align: center;
+    bottom: 20px;
+}
+
+#upload .placeholder .flashTip a {
+    color: #0785d1;
+    text-decoration: none;
+}
+
+#upload .placeholder .flashTip a:hover {
+    text-decoration: underline;
+}
+
+#upload .placeholder.webuploader-dnd-over {
+    border-color: #999999;
+}
+
+#upload .filelist {
+    list-style: none;
+    margin: 0;
+    padding: 0;
+    overflow-x: hidden;
+    overflow-y: auto;
+    position: relative;
+    height: 300px;
+}
+
+#upload .filelist:after {
+    content: '';
+    display: block;
+    width: 0;
+    height: 0;
+    overflow: hidden;
+    clear: both;
+}
+
+#upload .filelist li {
+    width: 113px;
+    height: 113px;
+    background: url(./images/bg.png);
+    text-align: center;
+    margin: 9px 0 0 9px;
+    *margin: 6px 0 0 6px;
+    position: relative;
+    display: block;
+    float: left;
+    overflow: hidden;
+    font-size: 12px;
+}
+
+#upload .filelist li p.log {
+    position: relative;
+    top: -45px;
+}
+
+#upload .filelist li p.title {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    overflow: hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    top: 5px;
+    text-indent: 5px;
+    text-align: left;
+}
+
+#upload .filelist li p.progress {
+    position: absolute;
+    width: 100%;
+    bottom: 0;
+    left: 0;
+    height: 8px;
+    overflow: hidden;
+    z-index: 50;
+    margin: 0;
+    border-radius: 0;
+    background: none;
+    -webkit-box-shadow: 0 0 0;
+}
+
+#upload .filelist li p.progress span {
+    display: none;
+    overflow: hidden;
+    width: 0;
+    height: 100%;
+    background: #1483d8 url(./images/progress.png) repeat-x;
+
+    -webit-transition: width 200ms linear;
+    -moz-transition: width 200ms linear;
+    -o-transition: width 200ms linear;
+    -ms-transition: width 200ms linear;
+    transition: width 200ms linear;
+
+    -webkit-animation: progressmove 2s linear infinite;
+    -moz-animation: progressmove 2s linear infinite;
+    -o-animation: progressmove 2s linear infinite;
+    -ms-animation: progressmove 2s linear infinite;
+    animation: progressmove 2s linear infinite;
+
+    -webkit-transform: translateZ(0);
+}
+
+@-webkit-keyframes progressmove {
+    0% {
+        background-position: 0 0;
+    }
+    100% {
+        background-position: 17px 0;
+    }
+}
+
+@-moz-keyframes progressmove {
+    0% {
+        background-position: 0 0;
+    }
+    100% {
+        background-position: 17px 0;
+    }
+}
+
+@keyframes progressmove {
+    0% {
+        background-position: 0 0;
+    }
+    100% {
+        background-position: 17px 0;
+    }
+}
+
+#upload .filelist li p.imgWrap {
+    position: relative;
+    z-index: 2;
+    line-height: 113px;
+    vertical-align: middle;
+    overflow: hidden;
+    width: 113px;
+    height: 113px;
+
+    -webkit-transform-origin: 50% 50%;
+    -moz-transform-origin: 50% 50%;
+    -o-transform-origin: 50% 50%;
+    -ms-transform-origin: 50% 50%;
+    transform-origin: 50% 50%;
+
+    -webit-transition: 200ms ease-out;
+    -moz-transition: 200ms ease-out;
+    -o-transition: 200ms ease-out;
+    -ms-transition: 200ms ease-out;
+    transition: 200ms ease-out;
+}
+#upload .filelist li p.imgWrap.notimage {
+    margin-top: 0;
+    width: 111px;
+    height: 111px;
+    border: 1px #eeeeee solid;
+}
+#upload .filelist li p.imgWrap.notimage i.file-preview {
+    margin-top: 15px;
+}
+
+#upload .filelist li img {
+    width: 100%;
+}
+
+#upload .filelist li p.error {
+    background: #f43838;
+    color: #fff;
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    height: 28px;
+    line-height: 28px;
+    width: 100%;
+    z-index: 100;
+    display:none;
+}
+
+#upload .filelist li .success {
+    display: block;
+    position: absolute;
+    left: 0;
+    bottom: 0;
+    height: 40px;
+    width: 100%;
+    z-index: 200;
+    background: url(./images/success.png) no-repeat right bottom;
+    background-image: url(./images/success.gif) \9;
+}
+
+#upload .filelist li.filePickerBlock {
+    width: 113px;
+    height: 113px;
+    background: url(./images/image.png) no-repeat center 12px;
+    border: 1px solid #eeeeee;
+    border-radius: 0;
+}
+#upload .filelist li.filePickerBlock div.webuploader-pick  {
+    width: 100%;
+    height: 100%;
+    margin: 0;
+    padding: 0;
+    opacity: 0;
+    background: none;
+    font-size: 0;
+}
+
+#upload .filelist div.file-panel {
+    position: absolute;
+    height: 0;
+    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \0;
+    background: rgba(0, 0, 0, 0.5);
+    width: 100%;
+    top: 0;
+    left: 0;
+    overflow: hidden;
+    z-index: 300;
+}
+
+#upload .filelist div.file-panel span {
+    width: 24px;
+    height: 24px;
+    display: inline;
+    float: right;
+    text-indent: -9999px;
+    overflow: hidden;
+    background: url(./images/icons.png) no-repeat;
+    background: url(./images/icons.gif) no-repeat \9;
+    margin: 5px 1px 1px;
+    cursor: pointer;
+    -webkit-tap-highlight-color: rgba(0,0,0,0);
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+}
+
+#upload .filelist div.file-panel span.rotateLeft {
+    display:none;
+    background-position: 0 -24px;
+}
+
+#upload .filelist div.file-panel span.rotateLeft:hover {
+    background-position: 0 0;
+}
+
+#upload .filelist div.file-panel span.rotateRight {
+    display:none;
+    background-position: -24px -24px;
+}
+
+#upload .filelist div.file-panel span.rotateRight:hover {
+    background-position: -24px 0;
+}
+
+#upload .filelist div.file-panel span.cancel {
+    background-position: -48px -24px;
+}
+
+#upload .filelist div.file-panel span.cancel:hover {
+    background-position: -48px 0;
+}
+
+#upload .statusBar {
+    height: 45px;
+    border-bottom: 1px solid #dadada;
+    margin: 0 10px;
+    padding: 0;
+    line-height: 45px;
+    vertical-align: middle;
+    position: relative;
+}
+
+#upload .statusBar .progress {
+    border: 1px solid #1483d8;
+    width: 198px;
+    background: #fff;
+    height: 18px;
+    position: absolute;
+    top: 12px;
+    display: none;
+    text-align: center;
+    line-height: 18px;
+    color: #6dbfff;
+    margin: 0 10px 0 0;
+}
+#upload .statusBar .progress span.percentage {
+    width: 0;
+    height: 100%;
+    left: 0;
+    top: 0;
+    background: #1483d8;
+    position: absolute;
+}
+#upload .statusBar .progress span.text {
+    position: relative;
+    z-index: 10;
+}
+
+#upload .statusBar .info {
+    display: inline-block;
+    font-size: 14px;
+    color: #666666;
+}
+
+#upload .statusBar .btns {
+    position: absolute;
+    top: 7px;
+    right: 0;
+    line-height: 30px;
+}
+
+#filePickerBtn {
+    display: inline-block;
+    float: left;
+}
+#upload .statusBar .btns .webuploader-pick,
+#upload .statusBar .btns .uploadBtn,
+#upload .statusBar .btns .uploadBtn.state-uploading,
+#upload .statusBar .btns .uploadBtn.state-paused {
+    background: #ffffff;
+    border: 1px solid #cfcfcf;
+    color: #565656;
+    padding: 0 18px;
+    display: inline-block;
+    border-radius: 3px;
+    margin-left: 10px;
+    cursor: pointer;
+    font-size: 14px;
+    float: left;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+}
+#upload .statusBar .btns .webuploader-pick-hover,
+#upload .statusBar .btns .uploadBtn:hover,
+#upload .statusBar .btns .uploadBtn.state-uploading:hover,
+#upload .statusBar .btns .uploadBtn.state-paused:hover {
+    background: #f0f0f0;
+}
+
+#upload .statusBar .btns .uploadBtn,
+#upload .statusBar .btns .uploadBtn.state-paused{
+    background: #00b7ee;
+    color: #fff;
+    border-color: transparent;
+}
+#upload .statusBar .btns .uploadBtn:hover,
+#upload .statusBar .btns .uploadBtn.state-paused:hover{
+    background: #00a2d4;
+}
+
+#upload .statusBar .btns .uploadBtn.disabled {
+    pointer-events: none;
+    filter:alpha(opacity=60);
+    -moz-opacity:0.6;
+    -khtml-opacity: 0.6;
+    opacity: 0.6;
+}
+
+
+
+/* 图片管理样式 */
+#online {
+    width: 100%;
+    height: 336px;
+    padding: 10px 0 0 0;
+}
+#online #fileList{
+    width: 100%;
+    height: 100%;
+    overflow-x: hidden;
+    overflow-y: auto;
+    position: relative;
+}
+#online ul {
+    display: block;
+    list-style: none;
+    margin: 0;
+    padding: 0;
+}
+#online li {
+    float: left;
+    display: block;
+    list-style: none;
+    padding: 0;
+    width: 113px;
+    height: 113px;
+    margin: 0 0 9px 9px;
+    *margin: 0 0 6px 6px;
+    background-color: #eee;
+    overflow: hidden;
+    cursor: pointer;
+    position: relative;
+}
+#online li.clearFloat {
+    float: none;
+    clear: both;
+    display: block;
+    width:0;
+    height:0;
+    margin: 0;
+    padding: 0;
+}
+#online li img {
+    cursor: pointer;
+}
+#online li div.file-wrapper {
+    cursor: pointer;
+    position: absolute;
+    display: block;
+    width: 111px;
+    height: 111px;
+    border: 1px solid #eee;
+    background: url("./images/bg.png") repeat;
+}
+#online li div span.file-title{
+    display: block;
+    padding: 0 3px;
+    margin: 3px 0 0 0;
+    font-size: 12px;
+    height: 13px;
+    color: #555555;
+    text-align: center;
+    width: 107px;
+    white-space: nowrap;
+    word-break: break-all;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+#online li .icon {
+    cursor: pointer;
+    width: 113px;
+    height: 113px;
+    position: absolute;
+    top: 0;
+    left: 0;
+    z-index: 2;
+    border: 0;
+    background-repeat: no-repeat;
+}
+#online li .icon:hover {
+    width: 107px;
+    height: 107px;
+    border: 3px solid #1094fa;
+}
+#online li.selected .icon {
+    background-image: url(images/success.png);
+    background-image: url(images/success.gif) \9;
+    background-position: 75px 75px;
+}
+#online li.selected .icon:hover {
+    width: 107px;
+    height: 107px;
+    border: 3px solid #1094fa;
+    background-position: 72px 72px;
+}
+
+
+/* 在线文件的文件预览图标 */
+i.file-preview {
+    display: block;
+    margin: 10px auto;
+    width: 70px;
+    height: 70px;
+    background-image: url("./images/file-icons.png");
+    background-image: url("./images/file-icons.gif") \9;
+    background-position: -140px center;
+    background-repeat: no-repeat;
+}
+i.file-preview.file-type-dir{
+    background-position: 0 center;
+}
+i.file-preview.file-type-file{
+    background-position: -140px center;
+}
+i.file-preview.file-type-filelist{
+    background-position: -210px center;
+}
+i.file-preview.file-type-zip,
+i.file-preview.file-type-rar,
+i.file-preview.file-type-7z,
+i.file-preview.file-type-tar,
+i.file-preview.file-type-gz,
+i.file-preview.file-type-bz2{
+    background-position: -280px center;
+}
+i.file-preview.file-type-xls,
+i.file-preview.file-type-xlsx{
+    background-position: -350px center;
+}
+i.file-preview.file-type-doc,
+i.file-preview.file-type-docx{
+    background-position: -420px center;
+}
+i.file-preview.file-type-ppt,
+i.file-preview.file-type-pptx{
+    background-position: -490px center;
+}
+i.file-preview.file-type-vsd{
+    background-position: -560px center;
+}
+i.file-preview.file-type-pdf{
+    background-position: -630px center;
+}
+i.file-preview.file-type-txt,
+i.file-preview.file-type-md,
+i.file-preview.file-type-json,
+i.file-preview.file-type-htm,
+i.file-preview.file-type-xml,
+i.file-preview.file-type-html,
+i.file-preview.file-type-js,
+i.file-preview.file-type-css,
+i.file-preview.file-type-php,
+i.file-preview.file-type-jsp,
+i.file-preview.file-type-asp{
+    background-position: -700px center;
+}
+i.file-preview.file-type-apk{
+    background-position: -770px center;
+}
+i.file-preview.file-type-exe{
+    background-position: -840px center;
+}
+i.file-preview.file-type-ipa{
+    background-position: -910px center;
+}
+i.file-preview.file-type-mp4,
+i.file-preview.file-type-swf,
+i.file-preview.file-type-mkv,
+i.file-preview.file-type-avi,
+i.file-preview.file-type-flv,
+i.file-preview.file-type-mov,
+i.file-preview.file-type-mpg,
+i.file-preview.file-type-mpeg,
+i.file-preview.file-type-ogv,
+i.file-preview.file-type-webm,
+i.file-preview.file-type-rm,
+i.file-preview.file-type-rmvb{
+    background-position: -980px center;
+}
+i.file-preview.file-type-ogg,
+i.file-preview.file-type-wav,
+i.file-preview.file-type-wmv,
+i.file-preview.file-type-mid,
+i.file-preview.file-type-mp3{
+    background-position: -1050px center;
+}
+i.file-preview.file-type-jpg,
+i.file-preview.file-type-jpeg,
+i.file-preview.file-type-gif,
+i.file-preview.file-type-bmp,
+i.file-preview.file-type-png,
+i.file-preview.file-type-psd{
+    background-position: -140px center;
+}

+ 60 - 0
cloud-socket/WebContent/backend/dialogs/attachment/attachment.html

@@ -0,0 +1,60 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="UTF-8">
+    <title>ueditor图片对话框</title>
+    <script type="text/javascript" src="../internal.js"></script>
+
+    <!-- jquery -->
+    <script type="text/javascript" src="../../third-party/jquery-1.10.2.min.js"></script>
+
+    <!-- webuploader -->
+    <script src="../../third-party/webuploader/webuploader.min.js"></script>
+    <link rel="stylesheet" type="text/css" href="../../third-party/webuploader/webuploader.css">
+
+    <!-- attachment dialog -->
+    <link rel="stylesheet" href="attachment.css" type="text/css" />
+</head>
+<body>
+
+    <div class="wrapper">
+        <div id="tabhead" class="tabhead">
+            <span class="tab focus" data-content-id="upload"><var id="lang_tab_upload"></var></span>
+            <span class="tab" data-content-id="online"><var id="lang_tab_online"></var></span>
+        </div>
+        <div id="tabbody" class="tabbody">
+            <!-- 上传图片 -->
+            <div id="upload" class="panel focus">
+                <div id="queueList" class="queueList">
+                    <div class="statusBar element-invisible">
+                        <div class="progress">
+                            <span class="text">0%</span>
+                            <span class="percentage"></span>
+                        </div><div class="info"></div>
+                        <div class="btns">
+                            <div id="filePickerBtn"></div>
+                            <div class="uploadBtn"><var id="lang_start_upload"></var></div>
+                        </div>
+                    </div>
+                    <div id="dndArea" class="placeholder">
+                        <div class="filePickerContainer">
+                            <div id="filePickerReady"></div>
+                        </div>
+                    </div>
+                    <ul class="filelist element-invisible">
+                        <li id="filePickerBlock" class="filePickerBlock"></li>
+                    </ul>
+                </div>
+            </div>
+
+            <!-- 在线图片 -->
+            <div id="online" class="panel">
+                <div id="fileList"><var id="lang_imgLoading"></var></div>
+            </div>
+
+        </div>
+    </div>
+    <script type="text/javascript" src="attachment.js"></script>
+
+</body>
+</html>

+ 754 - 0
cloud-socket/WebContent/backend/dialogs/attachment/attachment.js

@@ -0,0 +1,754 @@
+/**
+ * User: Jinqn
+ * Date: 14-04-08
+ * Time: 下午16:34
+ * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片
+ */
+
+(function () {
+
+    var uploadFile,
+        onlineFile;
+
+    window.onload = function () {
+        initTabs();
+        initButtons();
+    };
+
+    /* 初始化tab标签 */
+    function initTabs() {
+        var tabs = $G('tabhead').children;
+        for (var i = 0; i < tabs.length; i++) {
+            domUtils.on(tabs[i], "click", function (e) {
+                var target = e.target || e.srcElement;
+                setTabFocus(target.getAttribute('data-content-id'));
+            });
+        }
+
+        setTabFocus('upload');
+    }
+
+    /* 初始化tabbody */
+    function setTabFocus(id) {
+        if(!id) return;
+        var i, bodyId, tabs = $G('tabhead').children;
+        for (i = 0; i < tabs.length; i++) {
+            bodyId = tabs[i].getAttribute('data-content-id')
+            if (bodyId == id) {
+                domUtils.addClass(tabs[i], 'focus');
+                domUtils.addClass($G(bodyId), 'focus');
+            } else {
+                domUtils.removeClasses(tabs[i], 'focus');
+                domUtils.removeClasses($G(bodyId), 'focus');
+            }
+        }
+        switch (id) {
+            case 'upload':
+                uploadFile = uploadFile || new UploadFile('queueList');
+                break;
+            case 'online':
+                onlineFile = onlineFile || new OnlineFile('fileList');
+                break;
+        }
+    }
+
+    /* 初始化onok事件 */
+    function initButtons() {
+
+        dialog.onok = function () {
+            var list = [], id, tabs = $G('tabhead').children;
+            for (var i = 0; i < tabs.length; i++) {
+                if (domUtils.hasClass(tabs[i], 'focus')) {
+                    id = tabs[i].getAttribute('data-content-id');
+                    break;
+                }
+            }
+
+            switch (id) {
+                case 'upload':
+                    list = uploadFile.getInsertList();
+                    var count = uploadFile.getQueueCount();
+                    if (count) {
+                        $('.info', '#queueList').html('<span style="color:red;">' + '还有2个未上传文件'.replace(/[\d]/, count) + '</span>');
+                        return false;
+                    }
+                    break;
+                case 'online':
+                    list = onlineFile.getInsertList();
+                    break;
+            }
+
+            editor.execCommand('insertfile', list);
+        };
+    }
+
+
+    /* 上传附件 */
+    function UploadFile(target) {
+        this.$wrap = target.constructor == String ? $('#' + target) : $(target);
+        this.init();
+    }
+    UploadFile.prototype = {
+        init: function () {
+            this.fileList = [];
+            this.initContainer();
+            this.initUploader();
+        },
+        initContainer: function () {
+            this.$queue = this.$wrap.find('.filelist');
+        },
+        /* 初始化容器 */
+        initUploader: function () {
+            var _this = this,
+                $ = jQuery,    // just in case. Make sure it's not an other libaray.
+                $wrap = _this.$wrap,
+            // 图片容器
+                $queue = $wrap.find('.filelist'),
+            // 状态栏,包括进度和控制按钮
+                $statusBar = $wrap.find('.statusBar'),
+            // 文件总体选择信息。
+                $info = $statusBar.find('.info'),
+            // 上传按钮
+                $upload = $wrap.find('.uploadBtn'),
+            // 上传按钮
+                $filePickerBtn = $wrap.find('.filePickerBtn'),
+            // 上传按钮
+                $filePickerBlock = $wrap.find('.filePickerBlock'),
+            // 没选择文件之前的内容。
+                $placeHolder = $wrap.find('.placeholder'),
+            // 总体进度条
+                $progress = $statusBar.find('.progress').hide(),
+            // 添加的文件数量
+                fileCount = 0,
+            // 添加的文件总大小
+                fileSize = 0,
+            // 优化retina, 在retina下这个值是2
+                ratio = window.devicePixelRatio || 1,
+            // 缩略图大小
+                thumbnailWidth = 113 * ratio,
+                thumbnailHeight = 113 * ratio,
+            // 可能有pedding, ready, uploading, confirm, done.
+                state = '',
+            // 所有文件的进度信息,key为file id
+                percentages = {},
+                supportTransition = (function () {
+                    var s = document.createElement('p').style,
+                        r = 'transition' in s ||
+                            'WebkitTransition' in s ||
+                            'MozTransition' in s ||
+                            'msTransition' in s ||
+                            'OTransition' in s;
+                    s = null;
+                    return r;
+                })(),
+            // WebUploader实例
+                uploader,
+                actionUrl = editor.getActionUrl(editor.getOpt('fileActionName')),
+                fileMaxSize = editor.getOpt('fileMaxSize'),
+                acceptExtensions = (editor.getOpt('fileAllowFiles') || []).join('').replace(/\./g, ',').replace(/^[,]/, '');;
+
+            if (!WebUploader.Uploader.support()) {
+                $('#filePickerReady').after($('<div>').html(lang.errorNotSupport)).hide();
+                return;
+            } else if (!editor.getOpt('fileActionName')) {
+                $('#filePickerReady').after($('<div>').html(lang.errorLoadConfig)).hide();
+                return;
+            }
+
+            uploader = _this.uploader = WebUploader.create({
+                pick: {
+                    id: '#filePickerReady',
+                    label: lang.uploadSelectFile
+                },
+                swf: '../../third-party/webuploader/Uploader.swf',
+                server: actionUrl,
+                fileVal: editor.getOpt('fileFieldName'),
+                duplicate: true,
+                fileSingleSizeLimit: fileMaxSize,
+                compress: false
+            });
+            uploader.addButton({
+                id: '#filePickerBlock'
+            });
+            uploader.addButton({
+                id: '#filePickerBtn',
+                label: lang.uploadAddFile
+            });
+
+            setState('pedding');
+
+            // 当有文件添加进来时执行,负责view的创建
+            function addFile(file) {
+                var $li = $('<li id="' + file.id + '">' +
+                        '<p class="title">' + file.name + '</p>' +
+                        '<p class="imgWrap"></p>' +
+                        '<p class="progress"><span></span></p>' +
+                        '</li>'),
+
+                    $btns = $('<div class="file-panel">' +
+                        '<span class="cancel">' + lang.uploadDelete + '</span>' +
+                        '<span class="rotateRight">' + lang.uploadTurnRight + '</span>' +
+                        '<span class="rotateLeft">' + lang.uploadTurnLeft + '</span></div>').appendTo($li),
+                    $prgress = $li.find('p.progress span'),
+                    $wrap = $li.find('p.imgWrap'),
+                    $info = $('<p class="error"></p>').hide().appendTo($li),
+
+                    showError = function (code) {
+                        switch (code) {
+                            case 'exceed_size':
+                                text = lang.errorExceedSize;
+                                break;
+                            case 'interrupt':
+                                text = lang.errorInterrupt;
+                                break;
+                            case 'http':
+                                text = lang.errorHttp;
+                                break;
+                            case 'not_allow_type':
+                                text = lang.errorFileType;
+                                break;
+                            default:
+                                text = lang.errorUploadRetry;
+                                break;
+                        }
+                        $info.text(text).show();
+                    };
+
+                if (file.getStatus() === 'invalid') {
+                    showError(file.statusText);
+                } else {
+                    $wrap.text(lang.uploadPreview);
+                    if ('|png|jpg|jpeg|bmp|gif|'.indexOf('|'+file.ext.toLowerCase()+'|') == -1) {
+                        $wrap.empty().addClass('notimage').append('<i class="file-preview file-type-' + file.ext.toLowerCase() + '"></i>' +
+                        '<span class="file-title" title="' + file.name + '">' + file.name + '</span>');
+                    } else {
+                        if (browser.ie && browser.version <= 7) {
+                            $wrap.text(lang.uploadNoPreview);
+                        } else {
+                            uploader.makeThumb(file, function (error, src) {
+                                if (error || !src) {
+                                    $wrap.text(lang.uploadNoPreview);
+                                } else {
+                                    var $img = $('<img src="' + src + '">');
+                                    $wrap.empty().append($img);
+                                    $img.on('error', function () {
+                                        $wrap.text(lang.uploadNoPreview);
+                                    });
+                                }
+                            }, thumbnailWidth, thumbnailHeight);
+                        }
+                    }
+                    percentages[ file.id ] = [ file.size, 0 ];
+                    file.rotation = 0;
+
+                    /* 检查文件格式 */
+                    if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) {
+                        showError('not_allow_type');
+                        uploader.removeFile(file);
+                    }
+                }
+
+                file.on('statuschange', function (cur, prev) {
+                    if (prev === 'progress') {
+                        $prgress.hide().width(0);
+                    } else if (prev === 'queued') {
+                        $li.off('mouseenter mouseleave');
+                        $btns.remove();
+                    }
+                    // 成功
+                    if (cur === 'error' || cur === 'invalid') {
+                        showError(file.statusText);
+                        percentages[ file.id ][ 1 ] = 1;
+                    } else if (cur === 'interrupt') {
+                        showError('interrupt');
+                    } else if (cur === 'queued') {
+                        percentages[ file.id ][ 1 ] = 0;
+                    } else if (cur === 'progress') {
+                        $info.hide();
+                        $prgress.css('display', 'block');
+                    } else if (cur === 'complete') {
+                    }
+
+                    $li.removeClass('state-' + prev).addClass('state-' + cur);
+                });
+
+                $li.on('mouseenter', function () {
+                    $btns.stop().animate({height: 30});
+                });
+                $li.on('mouseleave', function () {
+                    $btns.stop().animate({height: 0});
+                });
+
+                $btns.on('click', 'span', function () {
+                    var index = $(this).index(),
+                        deg;
+
+                    switch (index) {
+                        case 0:
+                            uploader.removeFile(file);
+                            return;
+                        case 1:
+                            file.rotation += 90;
+                            break;
+                        case 2:
+                            file.rotation -= 90;
+                            break;
+                    }
+
+                    if (supportTransition) {
+                        deg = 'rotate(' + file.rotation + 'deg)';
+                        $wrap.css({
+                            '-webkit-transform': deg,
+                            '-mos-transform': deg,
+                            '-o-transform': deg,
+                            'transform': deg
+                        });
+                    } else {
+                        $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');
+                    }
+
+                });
+
+                $li.insertBefore($filePickerBlock);
+            }
+
+            // 负责view的销毁
+            function removeFile(file) {
+                var $li = $('#' + file.id);
+                delete percentages[ file.id ];
+                updateTotalProgress();
+                $li.off().find('.file-panel').off().end().remove();
+            }
+
+            function updateTotalProgress() {
+                var loaded = 0,
+                    total = 0,
+                    spans = $progress.children(),
+                    percent;
+
+                $.each(percentages, function (k, v) {
+                    total += v[ 0 ];
+                    loaded += v[ 0 ] * v[ 1 ];
+                });
+
+                percent = total ? loaded / total : 0;
+
+                spans.eq(0).text(Math.round(percent * 100) + '%');
+                spans.eq(1).css('width', Math.round(percent * 100) + '%');
+                updateStatus();
+            }
+
+            function setState(val, files) {
+
+                if (val != state) {
+
+                    var stats = uploader.getStats();
+
+                    $upload.removeClass('state-' + state);
+                    $upload.addClass('state-' + val);
+
+                    switch (val) {
+
+                        /* 未选择文件 */
+                        case 'pedding':
+                            $queue.addClass('element-invisible');
+                            $statusBar.addClass('element-invisible');
+                            $placeHolder.removeClass('element-invisible');
+                            $progress.hide(); $info.hide();
+                            uploader.refresh();
+                            break;
+
+                        /* 可以开始上传 */
+                        case 'ready':
+                            $placeHolder.addClass('element-invisible');
+                            $queue.removeClass('element-invisible');
+                            $statusBar.removeClass('element-invisible');
+                            $progress.hide(); $info.show();
+                            $upload.text(lang.uploadStart);
+                            uploader.refresh();
+                            break;
+
+                        /* 上传中 */
+                        case 'uploading':
+                            $progress.show(); $info.hide();
+                            $upload.text(lang.uploadPause);
+                            break;
+
+                        /* 暂停上传 */
+                        case 'paused':
+                            $progress.show(); $info.hide();
+                            $upload.text(lang.uploadContinue);
+                            break;
+
+                        case 'confirm':
+                            $progress.show(); $info.hide();
+                            $upload.text(lang.uploadStart);
+
+                            stats = uploader.getStats();
+                            if (stats.successNum && !stats.uploadFailNum) {
+                                setState('finish');
+                                return;
+                            }
+                            break;
+
+                        case 'finish':
+                            $progress.hide(); $info.show();
+                            if (stats.uploadFailNum) {
+                                $upload.text(lang.uploadRetry);
+                            } else {
+                                $upload.text(lang.uploadStart);
+                            }
+                            break;
+                    }
+
+                    state = val;
+                    updateStatus();
+
+                }
+
+                if (!_this.getQueueCount()) {
+                    $upload.addClass('disabled')
+                } else {
+                    $upload.removeClass('disabled')
+                }
+
+            }
+
+            function updateStatus() {
+                var text = '', stats;
+
+                if (state === 'ready') {
+                    text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize));
+                } else if (state === 'confirm') {
+                    stats = uploader.getStats();
+                    if (stats.uploadFailNum) {
+                        text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum);
+                    }
+                } else {
+                    stats = uploader.getStats();
+                    text = lang.updateStatusFinish.replace('_', fileCount).
+                        replace('_KB', WebUploader.formatSize(fileSize)).
+                        replace('_', stats.successNum);
+
+                    if (stats.uploadFailNum) {
+                        text += lang.updateStatusError.replace('_', stats.uploadFailNum);
+                    }
+                }
+
+                $info.html(text);
+            }
+
+            uploader.on('fileQueued', function (file) {
+                fileCount++;
+                fileSize += file.size;
+
+                if (fileCount === 1) {
+                    $placeHolder.addClass('element-invisible');
+                    $statusBar.show();
+                }
+
+                addFile(file);
+            });
+
+            uploader.on('fileDequeued', function (file) {
+                fileCount--;
+                fileSize -= file.size;
+
+                removeFile(file);
+                updateTotalProgress();
+            });
+
+            uploader.on('filesQueued', function (file) {
+                if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) {
+                    setState('ready');
+                }
+                updateTotalProgress();
+            });
+
+            uploader.on('all', function (type, files) {
+                switch (type) {
+                    case 'uploadFinished':
+                        setState('confirm', files);
+                        break;
+                    case 'startUpload':
+                        /* 添加额外的GET参数 */
+                        var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',
+                            url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + 'encode=utf-8&' + params);
+                        uploader.option('server', url);
+                        setState('uploading', files);
+                        break;
+                    case 'stopUpload':
+                        setState('paused', files);
+                        break;
+                }
+            });
+
+            uploader.on('uploadBeforeSend', function (file, data, header) {
+                //这里可以通过data对象添加POST参数
+                header['X_Requested_With'] = 'XMLHttpRequest';
+            });
+
+            uploader.on('uploadProgress', function (file, percentage) {
+                var $li = $('#' + file.id),
+                    $percent = $li.find('.progress span');
+
+                $percent.css('width', percentage * 100 + '%');
+                percentages[ file.id ][ 1 ] = percentage;
+                updateTotalProgress();
+            });
+
+            uploader.on('uploadSuccess', function (file, ret) {
+                var $file = $('#' + file.id);
+                try {
+                    var responseText = (ret._raw || ret),
+                        json = utils.str2json(responseText);
+                    if (json.state == 'SUCCESS') {
+                        _this.fileList.push(json);
+                        $file.append('<span class="success"></span>');
+                    } else {
+                        $file.find('.error').text(json.state).show();
+                    }
+                } catch (e) {
+                    $file.find('.error').text(lang.errorServerUpload).show();
+                }
+            });
+
+            uploader.on('uploadError', function (file, code) {
+            });
+            uploader.on('error', function (code, file) {
+                if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {
+                    addFile(file);
+                }
+            });
+            uploader.on('uploadComplete', function (file, ret) {
+            });
+
+            $upload.on('click', function () {
+                if ($(this).hasClass('disabled')) {
+                    return false;
+                }
+
+                if (state === 'ready') {
+                    uploader.upload();
+                } else if (state === 'paused') {
+                    uploader.upload();
+                } else if (state === 'uploading') {
+                    uploader.stop();
+                }
+            });
+
+            $upload.addClass('state-' + state);
+            updateTotalProgress();
+        },
+        getQueueCount: function () {
+            var file, i, status, readyFile = 0, files = this.uploader.getFiles();
+            for (i = 0; file = files[i++]; ) {
+                status = file.getStatus();
+                if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++;
+            }
+            return readyFile;
+        },
+        getInsertList: function () {
+            var i, link, data, list = [],
+                prefix = editor.getOpt('fileUrlPrefix');
+            for (i = 0; i < this.fileList.length; i++) {
+                data = this.fileList[i];
+                link = data.url;
+                list.push({
+                    title: data.original || link.substr(link.lastIndexOf('/') + 1),
+                    url: prefix + link
+                });
+            }
+            return list;
+        }
+    };
+
+
+    /* 在线附件 */
+    function OnlineFile(target) {
+        this.container = utils.isString(target) ? document.getElementById(target) : target;
+        this.init();
+    }
+    OnlineFile.prototype = {
+        init: function () {
+            this.initContainer();
+            this.initEvents();
+            this.initData();
+        },
+        /* 初始化容器 */
+        initContainer: function () {
+            this.container.innerHTML = '';
+            this.list = document.createElement('ul');
+            this.clearFloat = document.createElement('li');
+
+            domUtils.addClass(this.list, 'list');
+            domUtils.addClass(this.clearFloat, 'clearFloat');
+
+            this.list.appendChild(this.clearFloat);
+            this.container.appendChild(this.list);
+        },
+        /* 初始化滚动事件,滚动到地步自动拉取数据 */
+        initEvents: function () {
+            var _this = this;
+
+            /* 滚动拉取图片 */
+            domUtils.on($G('fileList'), 'scroll', function(e){
+                var panel = this;
+                if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {
+                    _this.getFileData();
+                }
+            });
+            /* 选中图片 */
+            domUtils.on(this.list, 'click', function (e) {
+                var target = e.target || e.srcElement,
+                    li = target.parentNode;
+
+                if (li.tagName.toLowerCase() == 'li') {
+                    if (domUtils.hasClass(li, 'selected')) {
+                        domUtils.removeClasses(li, 'selected');
+                    } else {
+                        domUtils.addClass(li, 'selected');
+                    }
+                }
+            });
+        },
+        /* 初始化第一次的数据 */
+        initData: function () {
+
+            /* 拉取数据需要使用的值 */
+            this.state = 0;
+            this.listSize = editor.getOpt('fileManagerListSize');
+            this.listIndex = 0;
+            this.listEnd = false;
+
+            /* 第一次拉取数据 */
+            this.getFileData();
+        },
+        /* 向后台拉取图片列表数据 */
+        getFileData: function () {
+            var _this = this;
+
+            if(!_this.listEnd && !this.isLoadingData) {
+                this.isLoadingData = true;
+                ajax.request(editor.getActionUrl(editor.getOpt('fileManagerActionName')), {
+                    timeout: 100000,
+                    data: utils.extend({
+                            start: this.listIndex,
+                            size: this.listSize
+                        }, editor.queryCommandValue('serverparam')),
+                    method: 'get',
+                    onsuccess: function (r) {
+                        try {
+                            var json = eval('(' + r.responseText + ')');
+                            if (json.state == 'SUCCESS') {
+                                _this.pushData(json.list);
+                                _this.listIndex = parseInt(json.start) + parseInt(json.list.length);
+                                if(_this.listIndex >= json.total) {
+                                    _this.listEnd = true;
+                                }
+                                _this.isLoadingData = false;
+                            }
+                        } catch (e) {
+                            if(r.responseText.indexOf('ue_separate_ue') != -1) {
+                                var list = r.responseText.split(r.responseText);
+                                _this.pushData(list);
+                                _this.listIndex = parseInt(list.length);
+                                _this.listEnd = true;
+                                _this.isLoadingData = false;
+                            }
+                        }
+                    },
+                    onerror: function () {
+                        _this.isLoadingData = false;
+                    }
+                });
+            }
+        },
+        /* 添加图片到列表界面上 */
+        pushData: function (list) {
+            var i, item, img, filetype, preview, icon, _this = this,
+                urlPrefix = editor.getOpt('fileManagerUrlPrefix');
+            for (i = 0; i < list.length; i++) {
+                if(list[i] && list[i].url) {
+                    item = document.createElement('li');
+                    icon = document.createElement('span');
+                    filetype = list[i].url.substr(list[i].url.lastIndexOf('.') + 1);
+
+                    if ( "png|jpg|jpeg|gif|bmp".indexOf(filetype) != -1 ) {
+                        preview = document.createElement('img');
+                        domUtils.on(preview, 'load', (function(image){
+                            return function(){
+                                _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);
+                            };
+                        })(preview));
+                        preview.width = 113;
+                        preview.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) );
+                    } else {
+                        var ic = document.createElement('i'),
+                            textSpan = document.createElement('span');
+                        textSpan.innerHTML = list[i].url.substr(list[i].url.lastIndexOf('/') + 1);
+                        preview = document.createElement('div');
+                        preview.appendChild(ic);
+                        preview.appendChild(textSpan);
+                        domUtils.addClass(preview, 'file-wrapper');
+                        domUtils.addClass(textSpan, 'file-title');
+                        domUtils.addClass(ic, 'file-type-' + filetype);
+                        domUtils.addClass(ic, 'file-preview');
+                    }
+                    domUtils.addClass(icon, 'icon');
+                    item.setAttribute('data-url', urlPrefix + list[i].url);
+                    if (list[i].original) {
+                        item.setAttribute('data-title', list[i].original);
+                    }
+
+                    item.appendChild(preview);
+                    item.appendChild(icon);
+                    this.list.insertBefore(item, this.clearFloat);
+                }
+            }
+        },
+        /* 改变图片大小 */
+        scale: function (img, w, h, type) {
+            var ow = img.width,
+                oh = img.height;
+
+            if (type == 'justify') {
+                if (ow >= oh) {
+                    img.width = w;
+                    img.height = h * oh / ow;
+                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
+                } else {
+                    img.width = w * ow / oh;
+                    img.height = h;
+                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
+                }
+            } else {
+                if (ow >= oh) {
+                    img.width = w * ow / oh;
+                    img.height = h;
+                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
+                } else {
+                    img.width = w;
+                    img.height = h * oh / ow;
+                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
+                }
+            }
+        },
+        getInsertList: function () {
+            var i, lis = this.list.children, list = [];
+            for (i = 0; i < lis.length; i++) {
+                if (domUtils.hasClass(lis[i], 'selected')) {
+                    var url = lis[i].getAttribute('data-url');
+                    var title = lis[i].getAttribute('data-title') || url.substr(url.lastIndexOf('/') + 1);
+                    list.push({
+                        title: title,
+                        url: url
+                    });
+                }
+            }
+            return list;
+        }
+    };
+
+
+})();

BIN
cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_chm.gif


BIN
cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_default.png


BIN
cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_doc.gif


BIN
cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_exe.gif


BIN
cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_jpg.gif


BIN
cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_mp3.gif


BIN
cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_mv.gif


BIN
cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_pdf.gif


BIN
cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_ppt.gif


BIN
cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_psd.gif


BIN
cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_rar.gif


BIN
cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_txt.gif


BIN
cloud-socket/WebContent/backend/dialogs/attachment/fileTypeImages/icon_xls.gif


BIN
cloud-socket/WebContent/backend/dialogs/attachment/images/alignicon.gif


BIN
cloud-socket/WebContent/backend/dialogs/attachment/images/alignicon.png


BIN
cloud-socket/WebContent/backend/dialogs/attachment/images/bg.png


BIN
cloud-socket/WebContent/backend/dialogs/attachment/images/file-icons.gif


BIN
cloud-socket/WebContent/backend/dialogs/attachment/images/file-icons.png


BIN
cloud-socket/WebContent/backend/dialogs/attachment/images/icons.gif


+ 0 - 0
cloud-socket/WebContent/backend/dialogs/attachment/images/icons.png


Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff