Browse Source

add pom.xml base on svn-mes

xlq 5 years ago
commit
20adeea8b4
100 changed files with 5947 additions and 0 deletions
  1. 3 0
      WebContent/META-INF/MANIFEST.MF
  2. 36 0
      WebContent/Readme.md
  3. 4 0
      WebContent/WEB-INF/jboss-web.xml
  4. BIN
      WebContent/WEB-INF/lib/antlr.jar
  5. BIN
      WebContent/WEB-INF/lib/aopalliance.jar
  6. BIN
      WebContent/WEB-INF/lib/aspectjrt.jar
  7. BIN
      WebContent/WEB-INF/lib/aspectjweaver.jar
  8. BIN
      WebContent/WEB-INF/lib/axis-jaxrpc-1.4.jar
  9. BIN
      WebContent/WEB-INF/lib/axis.jar
  10. BIN
      WebContent/WEB-INF/lib/cglib-nodep-2.2.3.jar
  11. BIN
      WebContent/WEB-INF/lib/commons-beanutils-1.9.1.jar
  12. BIN
      WebContent/WEB-INF/lib/commons-codec-1.9.jar
  13. BIN
      WebContent/WEB-INF/lib/commons-collections-3.2.1.jar
  14. BIN
      WebContent/WEB-INF/lib/commons-configuration-1.2.jar
  15. BIN
      WebContent/WEB-INF/lib/commons-discovery-0.4.jar
  16. BIN
      WebContent/WEB-INF/lib/commons-fileupload-1.2.2.jar
  17. BIN
      WebContent/WEB-INF/lib/commons-io-2.0.1.jar
  18. BIN
      WebContent/WEB-INF/lib/commons-lang.jar
  19. BIN
      WebContent/WEB-INF/lib/commons-logging-1.2.jar
  20. BIN
      WebContent/WEB-INF/lib/commons-net-1.4.1.jar
  21. BIN
      WebContent/WEB-INF/lib/commons-pool2-2.2.jar
  22. BIN
      WebContent/WEB-INF/lib/dom4j.jar
  23. BIN
      WebContent/WEB-INF/lib/drools-core.jar
  24. BIN
      WebContent/WEB-INF/lib/druid-1.0.20.jar
  25. BIN
      WebContent/WEB-INF/lib/ezmorph-1.0.6.jar
  26. BIN
      WebContent/WEB-INF/lib/fastjson-1.2.15.jar
  27. BIN
      WebContent/WEB-INF/lib/flexjson-2.1.jar
  28. BIN
      WebContent/WEB-INF/lib/hibernate-core.jar
  29. BIN
      WebContent/WEB-INF/lib/hibernate3.jar
  30. BIN
      WebContent/WEB-INF/lib/httpclient-4.4.jar
  31. BIN
      WebContent/WEB-INF/lib/httpcore-4.4.jar
  32. BIN
      WebContent/WEB-INF/lib/httpmime-4.4.jar
  33. BIN
      WebContent/WEB-INF/lib/itext-4.2.1.jar
  34. BIN
      WebContent/WEB-INF/lib/jackson-core-asl-1.4.3.jar
  35. BIN
      WebContent/WEB-INF/lib/jackson-mapper-asl-1.4.3.jar
  36. BIN
      WebContent/WEB-INF/lib/javassist.jar
  37. BIN
      WebContent/WEB-INF/lib/jbpm-bpmn.jar
  38. BIN
      WebContent/WEB-INF/lib/jbpm-console-form-plugin.jar
  39. BIN
      WebContent/WEB-INF/lib/jbpm-console-graphView-plugin.jar
  40. BIN
      WebContent/WEB-INF/lib/jbpm-console-integration.jar
  41. BIN
      WebContent/WEB-INF/lib/jbpm-console-reports.jar
  42. BIN
      WebContent/WEB-INF/lib/jbpm-db.jar
  43. BIN
      WebContent/WEB-INF/lib/jbpm-examples-tests.jar
  44. BIN
      WebContent/WEB-INF/lib/jbpm-jboss.jar
  45. BIN
      WebContent/WEB-INF/lib/jbpm-test-db-tests.jar
  46. BIN
      WebContent/WEB-INF/lib/jbpm-tomcat6.jar
  47. BIN
      WebContent/WEB-INF/lib/jbpm.jar
  48. BIN
      WebContent/WEB-INF/lib/json-lib-2.4-jdk15.jar
  49. BIN
      WebContent/WEB-INF/lib/jsonconvert-0.1.0.jar
  50. BIN
      WebContent/WEB-INF/lib/jstl.jar
  51. BIN
      WebContent/WEB-INF/lib/jta.jar
  52. BIN
      WebContent/WEB-INF/lib/log4j-1.2.15.jar
  53. BIN
      WebContent/WEB-INF/lib/mail.jar
  54. BIN
      WebContent/WEB-INF/lib/ojdbc6-11.2.0.jar
  55. BIN
      WebContent/WEB-INF/lib/poi-3.12.jar
  56. BIN
      WebContent/WEB-INF/lib/poi-examples-3.12.jar
  57. BIN
      WebContent/WEB-INF/lib/poi-ooxml-3.12.jar
  58. BIN
      WebContent/WEB-INF/lib/poi-ooxml-schemas-3.12.jar
  59. BIN
      WebContent/WEB-INF/lib/poi-scratchpad-3.12.jar
  60. BIN
      WebContent/WEB-INF/lib/servlet-api.jar
  61. BIN
      WebContent/WEB-INF/lib/slf4j-api.jar
  62. BIN
      WebContent/WEB-INF/lib/slf4j-jdk14.jar
  63. BIN
      WebContent/WEB-INF/lib/spring-aop-4.0.2.RELEASE.jar
  64. BIN
      WebContent/WEB-INF/lib/spring-aspects-4.0.2.RELEASE.jar
  65. BIN
      WebContent/WEB-INF/lib/spring-beans-4.0.2.RELEASE.jar
  66. BIN
      WebContent/WEB-INF/lib/spring-context-4.0.2.RELEASE.jar
  67. BIN
      WebContent/WEB-INF/lib/spring-context-support-4.0.2.RELEASE.jar
  68. BIN
      WebContent/WEB-INF/lib/spring-core-4.0.2.RELEASE.jar
  69. BIN
      WebContent/WEB-INF/lib/spring-expression-4.0.2.RELEASE.jar
  70. BIN
      WebContent/WEB-INF/lib/spring-jdbc-4.0.2.RELEASE.jar
  71. BIN
      WebContent/WEB-INF/lib/spring-orm-4.0.2.RELEASE.jar
  72. BIN
      WebContent/WEB-INF/lib/spring-tx-4.0.2.RELEASE.jar
  73. BIN
      WebContent/WEB-INF/lib/spring-web-4.0.2.RELEASE.jar
  74. BIN
      WebContent/WEB-INF/lib/spring-webmvc-4.0.2.RELEASE.jar
  75. BIN
      WebContent/WEB-INF/lib/standard.jar
  76. BIN
      WebContent/WEB-INF/lib/xmlbeans-2.5.0.jar
  77. 137 0
      WebContent/WEB-INF/spring/cache-default.xml
  78. 35 0
      WebContent/WEB-INF/spring/cache-redis.xml
  79. 217 0
      WebContent/WEB-INF/spring/config.xml
  80. 76 0
      WebContent/WEB-INF/spring/db-config.xml
  81. 115 0
      WebContent/WEB-INF/web.xml
  82. 329 0
      WebContent/app/controller/co/inventory/CheckIVAccount.js
  83. 39 0
      WebContent/app/controller/common/AfterInit.js
  84. 687 0
      WebContent/app/controller/common/BatchDeal.js
  85. 917 0
      WebContent/app/controller/common/BatchDealer.js
  86. 78 0
      WebContent/app/controller/common/BatchPrint.js
  87. 12 0
      WebContent/app/controller/common/BatchUpdate.js
  88. 172 0
      WebContent/app/controller/common/Batchlevel.js
  89. 14 0
      WebContent/app/controller/common/CateTreepanelDbfind.js
  90. 88 0
      WebContent/app/controller/common/CheckBase.js
  91. 209 0
      WebContent/app/controller/common/CheckQuery.js
  92. 122 0
      WebContent/app/controller/common/CommonChange.js
  93. 344 0
      WebContent/app/controller/common/CommonPage.js
  94. 1235 0
      WebContent/app/controller/common/Datalist.js
  95. 539 0
      WebContent/app/controller/common/Datalist2.js
  96. 83 0
      WebContent/app/controller/common/Dbfind.js
  97. 170 0
      WebContent/app/controller/common/DealList.js
  98. 41 0
      WebContent/app/controller/common/DeskTop.js
  99. 189 0
      WebContent/app/controller/common/EditDatalist.js
  100. 56 0
      WebContent/app/controller/common/EditorColumn.js

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

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

+ 36 - 0
WebContent/Readme.md

@@ -0,0 +1,36 @@
+#WebContent目录介绍
+resources/					#资源文件
+	app/					#.js应用
+		controller/			#extjs mvc控制层
+			common/			#common模块
+		
+		override/			#重写
+		
+		plugin/				#插件
+		
+		util/				#工具
+		
+		view/				#extjs mvc视图层
+			common/			#common模块
+			
+	lib/					#第三方库
+		bootstrap/			#twitter bootstrap样式
+		
+		ext/				#ext4.2库
+			resources/		#ext资源文件
+			
+		jquery/				#jquery库
+			plugin/			#jquery插件
+			style/			#jquery及其插件用到的样式
+	
+	style/					#样式资源
+		css/				#样式文件
+		
+		img/				#图片文件
+			icon/			#小图标
+			icon-lg/		#大图标
+			screen/			#全屏背景图片
+			tool/			#工具类图标
+		
+	view/					#页面
+		common/				#common模块

+ 4 - 0
WebContent/WEB-INF/jboss-web.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jboss-web>
+	<context-root>/mes</context-root>
+</jboss-web>

BIN
WebContent/WEB-INF/lib/antlr.jar


BIN
WebContent/WEB-INF/lib/aopalliance.jar


BIN
WebContent/WEB-INF/lib/aspectjrt.jar


BIN
WebContent/WEB-INF/lib/aspectjweaver.jar


BIN
WebContent/WEB-INF/lib/axis-jaxrpc-1.4.jar


BIN
WebContent/WEB-INF/lib/axis.jar


BIN
WebContent/WEB-INF/lib/cglib-nodep-2.2.3.jar


BIN
WebContent/WEB-INF/lib/commons-beanutils-1.9.1.jar


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


BIN
WebContent/WEB-INF/lib/commons-collections-3.2.1.jar


BIN
WebContent/WEB-INF/lib/commons-configuration-1.2.jar


BIN
WebContent/WEB-INF/lib/commons-discovery-0.4.jar


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


BIN
WebContent/WEB-INF/lib/commons-io-2.0.1.jar


BIN
WebContent/WEB-INF/lib/commons-lang.jar


BIN
WebContent/WEB-INF/lib/commons-logging-1.2.jar


BIN
WebContent/WEB-INF/lib/commons-net-1.4.1.jar


BIN
WebContent/WEB-INF/lib/commons-pool2-2.2.jar


BIN
WebContent/WEB-INF/lib/dom4j.jar


BIN
WebContent/WEB-INF/lib/drools-core.jar


BIN
WebContent/WEB-INF/lib/druid-1.0.20.jar


BIN
WebContent/WEB-INF/lib/ezmorph-1.0.6.jar


BIN
WebContent/WEB-INF/lib/fastjson-1.2.15.jar


BIN
WebContent/WEB-INF/lib/flexjson-2.1.jar


BIN
WebContent/WEB-INF/lib/hibernate-core.jar


BIN
WebContent/WEB-INF/lib/hibernate3.jar


BIN
WebContent/WEB-INF/lib/httpclient-4.4.jar


BIN
WebContent/WEB-INF/lib/httpcore-4.4.jar


BIN
WebContent/WEB-INF/lib/httpmime-4.4.jar


BIN
WebContent/WEB-INF/lib/itext-4.2.1.jar


BIN
WebContent/WEB-INF/lib/jackson-core-asl-1.4.3.jar


BIN
WebContent/WEB-INF/lib/jackson-mapper-asl-1.4.3.jar


BIN
WebContent/WEB-INF/lib/javassist.jar


BIN
WebContent/WEB-INF/lib/jbpm-bpmn.jar


BIN
WebContent/WEB-INF/lib/jbpm-console-form-plugin.jar


BIN
WebContent/WEB-INF/lib/jbpm-console-graphView-plugin.jar


BIN
WebContent/WEB-INF/lib/jbpm-console-integration.jar


BIN
WebContent/WEB-INF/lib/jbpm-console-reports.jar


BIN
WebContent/WEB-INF/lib/jbpm-db.jar


BIN
WebContent/WEB-INF/lib/jbpm-examples-tests.jar


BIN
WebContent/WEB-INF/lib/jbpm-jboss.jar


BIN
WebContent/WEB-INF/lib/jbpm-test-db-tests.jar


BIN
WebContent/WEB-INF/lib/jbpm-tomcat6.jar


BIN
WebContent/WEB-INF/lib/jbpm.jar


BIN
WebContent/WEB-INF/lib/json-lib-2.4-jdk15.jar


BIN
WebContent/WEB-INF/lib/jsonconvert-0.1.0.jar


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


BIN
WebContent/WEB-INF/lib/jta.jar


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


BIN
WebContent/WEB-INF/lib/mail.jar


BIN
WebContent/WEB-INF/lib/ojdbc6-11.2.0.jar


BIN
WebContent/WEB-INF/lib/poi-3.12.jar


BIN
WebContent/WEB-INF/lib/poi-examples-3.12.jar


BIN
WebContent/WEB-INF/lib/poi-ooxml-3.12.jar


BIN
WebContent/WEB-INF/lib/poi-ooxml-schemas-3.12.jar


BIN
WebContent/WEB-INF/lib/poi-scratchpad-3.12.jar


BIN
WebContent/WEB-INF/lib/servlet-api.jar


BIN
WebContent/WEB-INF/lib/slf4j-api.jar


BIN
WebContent/WEB-INF/lib/slf4j-jdk14.jar


BIN
WebContent/WEB-INF/lib/spring-aop-4.0.2.RELEASE.jar


BIN
WebContent/WEB-INF/lib/spring-aspects-4.0.2.RELEASE.jar


BIN
WebContent/WEB-INF/lib/spring-beans-4.0.2.RELEASE.jar


BIN
WebContent/WEB-INF/lib/spring-context-4.0.2.RELEASE.jar


BIN
WebContent/WEB-INF/lib/spring-context-support-4.0.2.RELEASE.jar


BIN
WebContent/WEB-INF/lib/spring-core-4.0.2.RELEASE.jar


BIN
WebContent/WEB-INF/lib/spring-expression-4.0.2.RELEASE.jar


BIN
WebContent/WEB-INF/lib/spring-jdbc-4.0.2.RELEASE.jar


BIN
WebContent/WEB-INF/lib/spring-orm-4.0.2.RELEASE.jar


BIN
WebContent/WEB-INF/lib/spring-tx-4.0.2.RELEASE.jar


BIN
WebContent/WEB-INF/lib/spring-web-4.0.2.RELEASE.jar


BIN
WebContent/WEB-INF/lib/spring-webmvc-4.0.2.RELEASE.jar


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


BIN
WebContent/WEB-INF/lib/xmlbeans-2.5.0.jar


+ 137 - 0
WebContent/WEB-INF/spring/cache-default.xml

@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
+	xmlns:context="http://www.springframework.org/schema/context"
+	xmlns:cache="http://www.springframework.org/schema/cache"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans   
+           http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
+           http://www.springframework.org/schema/context   
+           http://www.springframework.org/schema/context/spring-context-4.0.xsd 
+           http://www.springframework.org/schema/cache 
+           http://www.springframework.org/schema/cache/spring-cache-4.0.xsd"
+	default-autowire="byName">
+	<!-- 启用缓存注解功能,这个是必须的,否则注解不会生效,另外,该注解一定要声明在spring主配置文件中才会生效 -->
+	<!-- mode="proxy"时,缓存方法在外部被调用才有效,在对象内部调用不会触发 -->
+	<cache:annotation-driven cache-manager="cacheManager"/>
+	<!-- spring自己的缓存管理器,这里p:name定义了缓存位置名称 ,即注解中的value -->
+	<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
+		<property name="caches">
+			<set>
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="default" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="master" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="configs" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="interceptors" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="basedataset" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="tree" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="productkind" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="formpanel" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="uulistener" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="gridpanel" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="gridbutton" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="limitfields" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="datalist" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="combo" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="employee" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="empsrelativesettings" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="employees" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="mailAddrs" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="mails" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="mail" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="dbfind" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="dbfindsetui" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="relativesearch" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="searchtemplate" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="hrjob" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="power" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="positionpower" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="sysspecialpowers" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="specialactions" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="specialpower" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="bench" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="document" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="documentpositionpower" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="AddrBook" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="documentlistpower" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="datalistEm" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="transfers" />
+				<bean
+					class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
+					p:name="OrgJobEmployees" />
+			</set>
+		</property>
+	</bean>
+</beans>

+ 35 - 0
WebContent/WEB-INF/spring/cache-redis.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c="http://www.springframework.org/schema/c"
+	xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
+	xmlns:cache="http://www.springframework.org/schema/cache"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans  
+           http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
+           http://www.springframework.org/schema/context   
+           http://www.springframework.org/schema/context/spring-context-4.0.xsd 
+           http://www.springframework.org/schema/cache 
+           http://www.springframework.org/schema/cache/spring-cache-4.0.xsd"
+	default-autowire="byName">
+	<cache:annotation-driven cache-manager="cacheManager" />
+	<context:component-scan base-package="com.uas" />
+
+	<!-- redis 相关配置 -->
+	<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
+		<property name="maxIdle" value="300" />
+		<property name="maxWaitMillis" value="3000" />
+		<property name="testOnBorrow" value="true" />
+	</bean>
+
+	<bean id="connectionFactory"
+		class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
+		p:host-name="192.168.253.111" p:port="6379" p:pool-config-ref="poolConfig"
+		p:database="0" />
+
+	<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
+		<property name="connectionFactory" ref="connectionFactory" />
+	</bean>
+
+	<bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"
+		c:redis-operations-ref="redisTemplate" />
+
+</beans>

+ 217 - 0
WebContent/WEB-INF/spring/config.xml

@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
+	xmlns:context="http://www.springframework.org/schema/context"
+	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util"
+	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans   
+           http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
+           http://www.springframework.org/schema/context   
+           http://www.springframework.org/schema/context/spring-context-4.0.xsd 
+           http://www.springframework.org/schema/aop
+           http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
+           http://www.springframework.org/schema/mvc  
+           http://www.springframework.org/schema/mvc/spring-mvc.xsd
+           http://www.springframework.org/schema/tx
+           http://www.springframework.org/schema/tx/spring-tx-4.0.xsd 
+           http://www.springframework.org/schema/util 
+           http://www.springframework.org/schema/util/spring-util.xsd"
+	default-autowire="byName">
+	<bean id="baseUtil" class="com.uas.mes.common.util.BaseUtil"></bean>
+	<util:properties id="about">
+		<prop key="defaultSob">UAS_MES</prop>
+	</util:properties>
+	<mvc:default-servlet-handler />
+	<!-- 自动扫描 ,把作了注解的类转换为bean -->
+	<aop:aspectj-autoproxy />
+	<context:property-placeholder location="WEB-INF/spring:*.properties" />
+	<context:component-scan base-package="com.uas.mes" />
+	<!-- 事务 -->
+	<tx:annotation-driven />
+	<bean id="transactionManager"
+		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
+		<property name="dataSource" ref="dataSource" />
+	</bean>
+	<tx:annotation-driven transaction-manager="transactionManager" />
+	<!-- 对模型视图名称的解析,在请求时模型视图名称添加前后缀 -->
+	<bean
+		class="org.springframework.web.servlet.view.InternalResourceViewResolver"
+		p:prefix="/jsps/" p:suffix=".jsp"><!-- 指向的页面在/jsps/目录下 -->
+		<property name="order" value="0" />
+	</bean>
+	<bean id="jsonHttpMessageConverter"
+		class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
+	</bean>
+	<bean
+		class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
+		<property name="messageConverters">
+			<util:list id="beanList">
+				<ref bean="jsonHttpMessageConverter" /><!-- spring对list自动转成json的机制 -->
+			</util:list>
+		</property>
+	</bean>
+	<!-- 国际化 -->
+	<bean id="messageSource"
+		class="org.springframework.context.support.ResourceBundleMessageSource">
+		<property name="basenames">
+			<list>
+				<value>lang/messages</value><!-- 找src下lang目录下文件名为messages*的所有properties文件 -->
+			</list>
+		</property>
+		<property name="useCodeAsDefaultMessage" value="true" />
+	</bean>
+	<!-- Configure the multipart resolver -->
+	<bean id="multipartResolver"
+		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
+		<!-- one of the properties available; the maximum file size in bytes -->
+		<property name="maxUploadSize" value="104857600" />
+	</bean>
+
+	<!-- 自定义拦截器 -->
+	<mvc:interceptors>
+		<mvc:interceptor>
+			<mvc:mapping path="/*/**"></mvc:mapping>
+			<mvc:exclude-mapping path="/" />
+			<mvc:exclude-mapping path="/app/**" />
+			<mvc:exclude-mapping path="/jsps/**" />
+			<mvc:exclude-mapping path="/resource/**" />
+			<mvc:exclude-mapping path="/resource2/**" />
+			<mvc:exclude-mapping path="/workfloweditor/**" />
+			<mvc:exclude-mapping path="/common/login.action" />
+			<mvc:exclude-mapping path="/api/pda/login.action"/>
+			<bean class="com.uas.mes.common.interceptor.DbSourceInterceptor"></bean><!-- MultiDataSource Interceptor -->
+		</mvc:interceptor>
+		<mvc:interceptor>
+			<mvc:mapping path="/common/tree.action"></mvc:mapping>
+			<mvc:mapping path="/common/lazyTree.action"></mvc:mapping>
+			<mvc:mapping path="/common/searchTree.action"></mvc:mapping>
+			<mvc:mapping path="/common/datalist*"></mvc:mapping>
+			<mvc:mapping path="/common/dbfind.action"></mvc:mapping>
+			<mvc:mapping path="/common/singleFormItems.action"></mvc:mapping>
+			<mvc:mapping path="/common/singleGridPanel.action"></mvc:mapping>
+			<mvc:mapping path="/common/upload.action"></mvc:mapping>
+			<mvc:mapping path="/common/download.action"></mvc:mapping>
+			<mvc:mapping path="/common/setCommonUse.action"></mvc:mapping>
+			<mvc:mapping path="/common/get*"></mvc:mapping>
+			<mvc:mapping path="/common/save*"></mvc:mapping>
+			<mvc:mapping path="/common/update*"></mvc:mapping>
+			<mvc:mapping path="/common/delete*"></mvc:mapping>
+			<mvc:mapping path="/common/audit*"></mvc:mapping>
+			<mvc:mapping path="/common/resAudit*"></mvc:mapping>
+			<mvc:mapping path="/common/submit*"></mvc:mapping>
+			<mvc:mapping path="/common/resSubmit*"></mvc:mapping>
+			<mvc:mapping path="/common/excel*"></mvc:mapping>
+			<mvc:mapping path="/common/desktop/**"></mvc:mapping>
+			<mvc:mapping path="/cost/**"></mvc:mapping>
+			<mvc:mapping path="/crm/**"></mvc:mapping>
+			<mvc:mapping path="/cs/**"></mvc:mapping>
+			<mvc:mapping path="/drp/**"></mvc:mapping>
+			<mvc:mapping path="/fa/**"></mvc:mapping>
+			<mvc:mapping path="/gm/**"></mvc:mapping>
+			<mvc:mapping path="/hr/**"></mvc:mapping>
+			<mvc:mapping path="/ma/**"></mvc:mapping>
+			<mvc:mapping path="/oa/**"></mvc:mapping>
+			<mvc:mapping path="/plm/**"></mvc:mapping>
+			<mvc:mapping path="/pm/**"></mvc:mapping>
+			<mvc:mapping path="/scm/**"></mvc:mapping>
+			<mvc:mapping path="/b2b/**"></mvc:mapping>
+			<mvc:exclude-mapping path="/opensys/**"/>
+			<bean class="com.uas.mes.common.interceptor.UserInterceptor"></bean><!-- 查看用户是否已登录 -->
+		</mvc:interceptor>
+		<!-- 控制权限 的拦截器 -->
+		<mvc:interceptor>
+			<mvc:mapping path="/common/singleFormItems.action"></mvc:mapping>
+			<bean class="com.uas.mes.common.interceptor.SeeInterceptor"></bean><!-- 查看用户是否有查看(他人)权限 -->
+		</mvc:interceptor>
+		<mvc:interceptor>
+			<mvc:mapping path="/common/datalist.action"></mvc:mapping>
+			<mvc:mapping path="/common/datalist/data.action"></mvc:mapping>
+			<mvc:mapping path="/common/excel/create.xls"></mvc:mapping>
+			<bean class="com.uas.mes.common.interceptor.SeeAllInterceptor"></bean><!-- 查看用户是否有查看所有权限 -->
+		</mvc:interceptor>
+		<mvc:interceptor>
+			<mvc:mapping path="/*/save*"></mvc:mapping>
+			<mvc:mapping path="/*/*/save*"></mvc:mapping>
+			<bean class="com.uas.mes.common.interceptor.AddInterceptor"></bean><!-- 查看用户是否有新增权限 -->
+		</mvc:interceptor>
+		<mvc:interceptor>
+			<mvc:mapping path="/*/update*"></mvc:mapping>
+			<mvc:mapping path="/*/*/update*"></mvc:mapping>
+			<bean class="com.uas.mes.common.interceptor.SaveInterceptor"></bean><!-- 查看用户是否有修改(他人)权限 -->
+		</mvc:interceptor>
+		<mvc:interceptor>
+			<mvc:mapping path="/*/delete*"></mvc:mapping>
+			<mvc:mapping path="/*/*/delete*"></mvc:mapping>
+			<bean class="com.uas.mes.common.interceptor.DeleteInterceptor"></bean><!-- 查看用户是否有删除(他人)权限 -->
+		</mvc:interceptor>
+		<mvc:interceptor>
+			<mvc:mapping path="/*/audit*"></mvc:mapping>
+			<mvc:mapping path="/*/*/audit*"></mvc:mapping>
+			<bean class="com.uas.mes.common.interceptor.AuditInterceptor"></bean><!-- 查看用户是否有审核(他人)权限 -->
+		</mvc:interceptor>
+		<mvc:interceptor>
+			<mvc:mapping path="/*/resAudit*"></mvc:mapping>
+			<mvc:mapping path="/*/*/resAudit*"></mvc:mapping>
+			<bean class="com.uas.mes.common.interceptor.ResAuditInterceptor"></bean><!-- 查看用户是否有反审核(他人)权限 -->
+		</mvc:interceptor>
+		<mvc:interceptor>
+			<mvc:mapping path="/*/submit*"></mvc:mapping>
+			<mvc:mapping path="/*/*/submit*"></mvc:mapping>
+			<bean class="com.uas.mes.common.interceptor.SubmitInterceptor"></bean><!-- 查看用户是否有提交(他人)权限 -->
+		</mvc:interceptor>
+		<mvc:interceptor>
+			<mvc:mapping path="/*/resSubmit*"></mvc:mapping>
+			<mvc:mapping path="/*/*/resSubmit*"></mvc:mapping>
+			<bean class="com.uas.mes.common.interceptor.ResSubmitInterceptor"></bean><!-- 查看用户是否有反提交(他人)权限 -->
+		</mvc:interceptor>
+		<mvc:interceptor>
+			<mvc:mapping path="/*/end*"></mvc:mapping>
+			<mvc:mapping path="/*/*/end*"></mvc:mapping>
+			<bean class="com.uas.mes.common.interceptor.EndInterceptor"></bean><!-- 查看用户是否有结案(他人)权限 -->
+		</mvc:interceptor>
+		<mvc:interceptor>
+			<mvc:mapping path="/*/resEnd*"></mvc:mapping>
+			<mvc:mapping path="/*/*/resEnd*"></mvc:mapping>
+			<bean class="com.uas.mes.common.interceptor.ResEndInterceptor"></bean><!-- 查看用户是否有反结案(他人)权限 -->
+		</mvc:interceptor>
+		<mvc:interceptor>
+			<mvc:mapping path="/*/banned*"></mvc:mapping>
+			<mvc:mapping path="/*/*/banned*"></mvc:mapping>
+			<bean class="com.uas.mes.common.interceptor.BannedInterceptor"></bean><!-- 查看用户是否有禁用(他人)权限 -->
+		</mvc:interceptor>
+		<mvc:interceptor>
+			<mvc:mapping path="/*/resBanned*"></mvc:mapping>
+			<mvc:mapping path="/*/*/resBanned*"></mvc:mapping>
+			<bean class="com.uas.mes.common.interceptor.ResBannedInterceptor"></bean><!-- 查看用户是否有反禁用(他人)权限 -->
+		</mvc:interceptor>
+		<mvc:interceptor>
+			<mvc:mapping path="/*/post*"></mvc:mapping>
+			<mvc:mapping path="/*/*/post*"></mvc:mapping>
+			<bean class="com.uas.mes.common.interceptor.PostInterceptor"></bean><!-- 查看用户是否有过账(他人)权限 -->
+		</mvc:interceptor>
+		<mvc:interceptor>
+			<mvc:mapping path="/*/resPost*"></mvc:mapping>
+			<mvc:mapping path="/*/*/resPost*"></mvc:mapping>
+			<bean class="com.uas.mes.common.interceptor.ResPostInterceptor"></bean><!-- 查看用户是否有反过账(他人)权限 -->
+		</mvc:interceptor>
+		<mvc:interceptor>
+			<mvc:mapping path="/*/print*"></mvc:mapping>
+			<mvc:mapping path="/*/*/print*"></mvc:mapping>
+			<bean class="com.uas.mes.common.interceptor.PrintInterceptor"></bean><!-- 查看用户是否有打印(他人)权限 -->
+		</mvc:interceptor>
+		<!-- Android PDA Interceptor -->
+		<mvc:interceptor>
+			<mvc:mapping path="/api/pda/**"></mvc:mapping>
+			<bean class="com.uas.mes.common.interceptor.PdaMobileInterceptor"></bean>
+		</mvc:interceptor>
+		<mvc:interceptor>
+			<mvc:mapping path="/opensys/**"></mvc:mapping>
+			<bean class="com.uas.mes.core.interceptor.AccessTokenInterceptor"></bean>
+		</mvc:interceptor>
+	</mvc:interceptors>
+	<mvc:annotation-driven />
+	<!-- <mvc:resources mapping="/static/**" location="/resources/" /> -->
+
+	<import resource="db-config.xml" />
+	<import resource="cache-default.xml" />
+</beans>

+ 76 - 0
WebContent/WEB-INF/spring/db-config.xml

@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
+	<!-- 数据源 -->
+	<bean id="UAS_MES" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
+		<property name="driverClassName">
+			<value>oracle.jdbc.driver.OracleDriver</value>
+		</property>
+		<property name="url">
+			<value>jdbc:oracle:thin:@192.168.253.6:1521:orcl</value>
+		</property>
+		<property name="username">
+			<value>UAS_MES</value>
+		</property>
+		<property name="password" value="select!#%*(" />
+	</bean>
+	<!-- 将需要用到的多个帐套的dataSource定义在此,再通过multiDataSource切换 -->
+	<bean id="dataSource" class="com.uas.mes.core.data.MultiDataSource">
+		<property name="dataSource">
+			<ref bean="#{about.defaultSob}" />
+		</property>
+		<!-- 配置connectTimeout 和 socketTimeout (防止发生网络异常时,spring jdbcTemplate无法捕捉,可能无限等待) -->
+		<property name="connectionProperties"
+			value="oracle.net.CONNECT_TIMEOUT=6000;oracle.jdbc.ReadTimeout=6000" />
+	</bean>
+
+	<!-- 操作LOB 数据 -->
+	<bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler"
+		lazy-init="true" />
+	<!-- jbpm配置文件 -->
+	<bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper">
+		<property name="jbpmCfg" value="jbpm.cfg.xml"></property>
+	</bean>
+	<bean id="processEngine" factory-bean="springHelper"
+		factory-method="createProcessEngine">
+	</bean>
+	<bean id="repositoryService" factory-bean="processEngine"
+		factory-method="getRepositoryService" />
+
+	<bean id="executionService" factory-bean="processEngine"
+		factory-method="getExecutionService" />
+
+	<bean id="historyService" factory-bean="processEngine"
+		factory-method="getHistoryService" />
+
+	<bean id="managementService" factory-bean="processEngine"
+		factory-method="getManagementService" />
+
+	<bean id="identityService" factory-bean="processEngine"
+		factory-method="getIdentityService" />
+
+	<bean id="taskService" factory-bean="processEngine"
+		factory-method="getTaskService" />
+	<bean id="sessionFactory"
+		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
+		<property name="dataSource" ref="#{about.defaultSob}" />
+		<property name="hibernateProperties">
+			<props>
+				<prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
+				<prop key="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</prop>
+				<prop key="hibernate.format_sql">true</prop>
+			</props>
+		</property>
+		<property name="mappingResources">
+			<list>
+				<value>jbpm.repository.hbm.xml</value>
+				<value>jbpm.execution.hbm.xml</value>
+				<value>jbpm.history.hbm.xml</value>
+				<value>jbpm.task.hbm.xml</value>
+				<value>jbpm.identity.hbm.xml</value>
+			</list>
+		</property>
+	</bean>
+</beans>

+ 115 - 0
WebContent/WEB-INF/web.xml

@@ -0,0 +1,115 @@
+<?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>mes</display-name>
+	<distributable />
+	<filter>
+		<filter-name>encodingFilter</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>encodingFilter</filter-name>
+		<url-pattern>*.action</url-pattern>
+	</filter-mapping>
+	<servlet>
+		<servlet-name>mes-servlet</servlet-name>
+		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+		<init-param>
+			<param-name>contextConfigLocation</param-name>
+			<param-value>
+				/WEB-INF/spring/config.xml
+		</param-value>
+		</init-param>
+		<load-on-startup>1</load-on-startup>
+	</servlet>
+	<servlet-mapping>
+		<servlet-name>mes-servlet</servlet-name>
+		<url-pattern>/</url-pattern>
+	</servlet-mapping>
+	<error-page>
+		<error-code>404</error-code>
+		<location>/jsps/error/e-404.jsp</location>
+	</error-page>
+	<error-page>
+		<error-code>500</error-code>
+		<location>/jsps/error/e-500.jsp</location>
+	</error-page>
+	<session-config>
+		<session-timeout>600</session-timeout>
+	</session-config>
+	<!-- 服务器主动缓存 -->
+	<filter>
+		<filter-name>NoCache</filter-name>
+		<filter-class>com.uas.mes.core.listener.ResponseHeaderFilter</filter-class>
+		<init-param>
+			<param-name>Cache-Control</param-name>
+			<param-value>no-cache, must-revalidate</param-value>
+		</init-param>
+	</filter>
+	<filter>
+		<filter-name>CacheForWeek</filter-name>
+		<filter-class>com.uas.mes.core.listener.ResponseHeaderFilter</filter-class>
+		<init-param>
+			<param-name>Cache-Control</param-name>
+			<param-value>max-age=604800, public</param-value>
+		</init-param>
+	</filter>
+	<filter-mapping>
+		<filter-name>NoCache</filter-name>
+		<url-pattern>*.action</url-pattern>
+	</filter-mapping>
+	<filter-mapping>
+		<filter-name>NoCache</filter-name>
+		<url-pattern>*.xls</url-pattern>
+	</filter-mapping>
+	<filter-mapping>
+		<filter-name>NoCache</filter-name>
+		<url-pattern>*.pdf</url-pattern>
+	</filter-mapping>
+	<filter-mapping>
+		<filter-name>CacheForWeek</filter-name>
+		<url-pattern>*.js</url-pattern>
+	</filter-mapping>
+	<filter-mapping>
+		<filter-name>CacheForWeek</filter-name>
+		<url-pattern>*.css</url-pattern>
+	</filter-mapping>
+	<filter-mapping>
+		<filter-name>CacheForWeek</filter-name>
+		<url-pattern>*.scss</url-pattern>
+	</filter-mapping>
+	<filter-mapping>
+		<filter-name>CacheForWeek</filter-name>
+		<url-pattern>*.html</url-pattern>
+	</filter-mapping>
+	<filter-mapping>
+		<filter-name>CacheForWeek</filter-name>
+		<url-pattern>*.jsp</url-pattern>
+	</filter-mapping>
+	<filter-mapping>
+		<filter-name>CacheForWeek</filter-name>
+		<url-pattern>/app/*</url-pattern>
+	</filter-mapping>
+	<filter-mapping>
+		<filter-name>CacheForWeek</filter-name>
+		<url-pattern>/view/*</url-pattern>
+	</filter-mapping>
+	<filter-mapping>
+		<filter-name>CacheForWeek</filter-name>
+		<url-pattern>/lib/*</url-pattern>
+	</filter-mapping>
+	<filter-mapping>
+		<filter-name>CacheForWeek</filter-name>
+		<url-pattern>/style/*</url-pattern>
+	</filter-mapping>
+</web-app>

+ 329 - 0
WebContent/app/controller/co/inventory/CheckIVAccount.js

@@ -0,0 +1,329 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.co.inventory.CheckIVAccount', {
+    extend: 'Ext.app.Controller',
+    requires: ['erp.util.BaseUtil'],
+    views: ['co.inventory.CheckIVAccount'],
+    FormUtil: Ext.create('erp.util.FormUtil'),
+    init:function(){
+    	var me = this;
+    	this.BaseUtil = Ext.create('erp.util.BaseUtil');
+    	this.control({ 
+    		'button[id=check]': {
+    			click: function(btn) {
+    				var grid = btn.ownerCt.ownerCt;
+    				grid.store.each(function(r){
+    					r.set('check', '');
+    				});
+    				btn.hide();
+    				me.check(grid, 0, btn);
+    			}
+    		},
+    		'#allow' : {
+    			change : function(f) {
+    				if(!me.checked) {
+    					if(f.getValue()) {
+	    					Ext.getCmp('accoutover').setDisabled(false);
+	    				} else {
+	    					Ext.getCmp('accoutover').setDisabled(true);
+	    				}
+    				}
+    			}
+    		},
+    		'button[id=accoutover]': {
+    			click: function() {
+    				this.startAccount();
+    			}
+    		},
+    		'button[id=close]': {
+    			click: function() {
+    				me.BaseUtil.getActiveTab().close();
+    			}
+    		},
+    		'button[id=resaccoutover]': {
+    			click: function() {
+    				this.overAccount();
+    			}
+    		},
+    		'grid[id=account-check]': {
+    			itemclick: function(selModel, record) {
+    				var val = record.get('check');
+    				if(val == 'error') {
+    					me.showDetail(selModel.ownerCt, record);
+    				}
+    			}
+    		},
+    		'tbtext[id=yearmonth]': {
+    			afterrender: function(f) {
+    				this.getCurrentMonth(f);
+    			}
+    		}
+    	});
+    },
+    startAccount: function(){
+    		var me = this;
+    		me.FormUtil.setLoading(true);
+    		Ext.Ajax.request({
+    			url : basePath + "scm/reserve/confirmReserveClose.action",
+    			params:{
+    				param : me.currentMonth
+    			},
+    			timeout: 120000,
+    			method:'post',
+    			callback:function(options,success,response){
+    				me.FormUtil.setLoading(false);
+    				var localJson = new Ext.decode(response.responseText);
+        			if (localJson.success) {
+						window.location.reload();
+					} else {
+						if (localJson.exceptionInfo) {
+							var str = localJson.exceptionInfo;
+							if (str.trim().substr(0, 12) == 'AFTERSUCCESS') {// 特殊情况:操作成功,但是出现警告,允许刷新页面
+								str = str.replace('AFTERSUCCESS', '');
+								showMessage('提示', str);
+								window.location.reload();
+							} else {
+								showError(str);
+								return;
+							}
+						}
+					}
+    			}
+    		});
+    	},
+    	overAccount: function(){
+    		var me = this;
+    		me.FormUtil.setLoading(true);
+    		Ext.Ajax.request({
+    			url : basePath + "scm/reserve/unperiodsdetail.action",
+    			params:{
+    				param : me.currentMonth
+    			},
+    			method:'post',
+    			callback:function(options,success,response){
+    				me.FormUtil.setLoading(false);
+    				var localJson = new Ext.decode(response.responseText);
+        			if (localJson.success) {
+						window.location.reload();
+					} else {
+						if (localJson.exceptionInfo) {
+							var str = localJson.exceptionInfo;
+							if (str.trim().substr(0, 12) == 'AFTERSUCCESS') {// 特殊情况:操作成功,但是出现警告,允许刷新页面
+								str = str.replace('AFTERSUCCESS', '');
+								showMessage('提示', str);
+								window.location.reload();
+							} else {
+								showError(str);
+								return;
+							}
+						}
+					}
+    			}
+    		});
+    	},
+    check: function(grid, idx, btn) {
+    	var me =this,f = grid.store.getAt(idx);
+    	if(!f) {
+    		btn.setDisabled(false);
+    		return;
+    	}
+    	f.set('check', 'loading');
+    	var win = Ext.getCmp('win-' + f.get('type'));
+    	if(win) {
+    		win.destroy();
+		}
+    	Ext.Ajax.request({
+    		url: basePath + f.get('action'),
+    		params: {
+    			type: f.get('type'),
+    			month: me.currentMonth,
+    			start: me.datestart,
+    			end: me.dateend
+    		},
+    		callback: function(opt, s, r) {
+    			me.check(grid, ++idx, btn);
+    			var rs = Ext.decode(r.responseText);
+    			if(rs.ok) {
+    				f.set('check', 'checked');
+    			} else {
+    				f.set('check', 'error');
+    			}
+    			if(idx == grid.store.data.length) {
+    				var ch = 0;
+    				grid.store.each(function(){
+    					if(this.get('check') == 'checked') {
+    						ch ++;
+    					}
+    				});
+    				if(idx == ch) {
+    					me.checked = true;
+    					Ext.getCmp('accoutover').setDisabled(false);
+    				} else {
+    					me.checked = false;
+    					Ext.getCmp('allow').show();
+    				}
+    			}
+    		}
+    	});
+    },
+    showDetail: function(grid, record) {
+    	var me = this, wid = 'win-' + record.get('type'),
+    		win = Ext.getCmp(wid);
+    	if(!win) {
+    		win = Ext.create('Ext.Window', {
+        		title: record.get('value'),
+        		id: wid,
+        		width: 800,
+        		height: 500,
+        		layout: 'anchor',
+        		items: [{
+        			xtype: 'gridpanel',
+        			anchor: '100% 100%',
+        			columnLines: true,
+        			cls: 'custom',
+        			columns: [{
+        				text: '单据',
+        				flex: 1,
+        				dataIndex: 'be_class'
+        			},{
+        				text: '编号',
+        				flex: 1.6,
+        				dataIndex: 'be_code'
+        			},{
+        				text: '检测时间',
+        				flex: 1,
+        				dataIndex: 'be_date',
+        				renderer: function(val) {return Ext.Date.format(new Date(val), 'Y-m-d');}
+        			},{
+        				text: '检测人',
+        				flex: .8,
+        				dataIndex: 'be_checker'
+        			},{
+        				text: '备注',
+        				flex: 3,
+        				dataIndex: 'be_remark'
+        			}],
+        			store: new Ext.data.Store({
+        				fields: ['be_class', 'be_code', 'be_date', 'be_checker', 'be_remark']
+        			})
+        		}],
+        		buttonAlign: 'center',
+        		buttons: [{
+        			text: $I18N.common.button.erpExportButton,
+        			iconCls: 'x-button-icon-excel',
+        	    	cls: 'x-btn-blue',
+        			handler: function(btn) {
+        				me.BaseUtil.exportGrid(btn.up('window').down('gridpanel'));
+        			}
+        		},{
+        			text: '导出全部',
+        			iconCls: 'x-button-icon-excel',
+        	    	cls: 'x-btn-blue',
+        			handler: function(btn) {
+        				me.getAll(grid, record);
+        			}
+        		},{
+        			text: $I18N.common.button.erpCloseButton,
+        			cls: 'x-btn-blue',
+        			handler: function(btn) {
+        				btn.ownerCt.ownerCt.close();
+        			}
+        		}]
+        	});
+    		this.getBillError(record.get('type'), win.down('gridpanel'));
+    	}
+    	win.show();
+    },
+    getCurrentMonth: function(f) {
+    	var me = this;
+    	Ext.Ajax.request({
+    		url: basePath + 'fa/getMonth.action',
+    		params: {
+    			type: 'MONTH-P'
+    		},
+    		callback: function(opt, s, r) {
+    			var rs = Ext.decode(r.responseText);
+    			if(rs.data) {
+    				me.currentMonth = rs.data.PD_DETNO;
+    				me.datestart = Ext.Date.format(new Date(rs.data.PD_STARTDATE), 'Ymd');
+    				me.dateend = Ext.Date.format(new Date(rs.data.PD_ENDDATE), 'Ymd');
+    				f.setText(rs.data.PD_DETNO + ' 从' + Ext.Date.format(new Date(rs.data.PD_STARTDATE), 'Y-m-d')
+    						+ ' 到    ' + Ext.Date.format(new Date(rs.data.PD_ENDDATE), 'Y-m-d'));
+    			}
+    		}
+    	});
+    },
+    getBillError: function(type, grid) {
+    	Ext.Ajax.request({
+    		url: basePath + 'fa/getBillError.action',
+    		params: {
+    			type: type
+    		},
+    		callback: function(opt, s, r) {
+    			var rs = Ext.decode(r.responseText);
+    			if(rs.data) {
+    				grid.store.loadData(rs.data);
+    			} else if(rs.exceptionInfo) {
+    				showError(rs.exceptionInfo);
+    			}
+    		}
+    	});
+    },
+    getAll: function(grid, record) {
+    	var p = Ext.create('Ext.ProgressBar', {
+    		renderTo: Ext.getBody(),
+    		floating: true,
+    		width: 300,
+    		value: 0.4,
+    		text: '获取全部数据...'
+    	}).show();
+    	this.checkAll(grid, record);
+    	p.updateProgress(0.8, '正在下载...', true);
+    	this.exportExcel(record.get('type'));
+    	Ext.defer(function(){
+    		p.setVisible(false);
+    	}, 3000);
+    },
+    checkAll: function(grid, record) {
+    	var me =this;
+    	record.set('check', 'loading');
+    	Ext.Ajax.request({
+    		url: basePath + record.get('action'),
+    		params: {
+    			type: record.get('type'),
+    			month: me.currentMonth,
+    			start: me.datestart,
+    			end: me.dateend,
+    			all: true
+    		},
+    		async: false,
+    		callback: function(opt, s, r) {
+    			var rs = Ext.decode(r.responseText);
+    			if(rs.ok) {
+    				record.set('check', 'checked');
+    			} else {
+    				record.set('check', 'error');
+    			}
+    		}
+    	});
+    },
+    exportExcel: function(type) {
+    	var title = Ext.Date.format(new Date(), 'Y-m-d H:m:s');
+		if (!Ext.fly('ext-grid-excel')) {  
+			var frm = document.createElement('form');  
+			frm.id = 'ext-grid-excel';  
+			frm.name = id;  
+			frm.className = 'x-hidden';
+			document.body.appendChild(frm);  
+		}  
+		Ext.Ajax.request({
+			url: basePath + ('fa/exportBillError.xls'),
+			method: 'post',
+			form: Ext.fly('ext-grid-excel'),
+			isUpload: true,
+			params: {
+				type: type,
+				title: title
+			}
+		});
+    }
+});

+ 39 - 0
WebContent/app/controller/common/AfterInit.js

@@ -0,0 +1,39 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.common.AfterInit', {
+    extend: 'Ext.app.Controller',
+    requires: ['erp.util.BaseUtil'],
+    views: ['common.init.AfterInit'],
+    init: function(){ 
+    	var me = this;
+    	me.BaseUtil = Ext.create('erp.util.BaseUtil');
+    	this.control({ 
+    		'button[name=prev]': {
+    			click: function(btn){
+    				var bt = parent.Ext.ComponentQuery.query('button[step=4]')[0];
+    				bt.fireEvent('click', bt);
+    			}
+    		},
+    		'button[name=confirm]': {
+    			click: function(btn){
+    				var form = btn.ownerCt.ownerCt, fields = form.getForm().getFields();
+    				var c = 0;
+    				form.setLoading(true);
+    				fields.each(function(f){
+    					Ext.Ajax.request({
+							url: basePath + f.action,
+							callback: function(o, s, r) {
+								if (s) {
+									if(++c == fields.length) {
+										form.setLoading(false);
+										alert('完成操作!');
+									}
+								}
+							}
+						});
+    				});
+    			}
+    		}
+    	});
+    },
+    
+});

+ 687 - 0
WebContent/app/controller/common/BatchDeal.js

@@ -0,0 +1,687 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.common.BatchDeal', {
+    extend: 'Ext.app.Controller',
+    requires: ['erp.util.FormUtil', 'erp.util.GridUtil', 'erp.util.BaseUtil', 'erp.util.RenderUtil'],
+    views:[
+           'common.batchDeal.Viewport','common.batchDeal.Form','common.batchDeal.GridPanel','core.trigger.AddDbfindTrigger','core.button.CheckCustomerUU',
+           'core.trigger.DbfindTrigger','core.form.FtField','core.form.FtFindField','core.form.ConDateField','core.button.TurnMeetingButton','core.button.CheckVendorUU',
+           'core.trigger.TextAreaTrigger','core.form.YnField', 'core.form.MonthDateField','core.form.ConMonthDateField','core.trigger.SchedulerTrigger',
+           'core.grid.YnColumn','core.form.DateHourMinuteField','core.form.SeparNumber','core.grid.YnColumnNV','core.button.ExportScanLogin'
+     	],
+    BaseUtil: Ext.create('erp.util.BaseUtil'),
+    FormUtil: Ext.create('erp.util.FormUtil'),
+    GridUtil: Ext.create('erp.util.GridUtil'),
+    init:function(){
+    	var me = this;
+    	me.resized = false;
+    	this.control({
+    		'erpBatchDealFormPanel': {
+    			alladded: function(form){
+    				var grid = Ext.getCmp('batchDealGridPanel');
+    				me.resize(form, grid);
+    				var items = form.items.items, autoQuery = false;
+					Ext.each(items, function() {
+						var val = getUrlParam(this.name);
+						if(!Ext.isEmpty(val)) {
+							this.setValue(val);
+							autoQuery = true;
+							if(this.xtype == 'dbfindtrigger') {
+								this.autoDbfind('form', caller, this.name, this.name + " like '%" + val + "%'");
+							}
+						}
+					});
+					if(autoQuery) {
+						setTimeout(function(){
+							form.onQuery();
+						}, 1000);
+					}
+    			}
+    		},
+    		'erpBatchDealGridPanel': {
+    			afterrender: function(grid){
+    				var form = Ext.getCmp('dealform');
+    				me.resize(form, grid);
+    				grid.store.on('datachanged', function(store){
+						me.getProductWh(grid);
+					});
+    				if(caller == 'ARBill!ToBillOut!Deal'||caller == 'APBill!ToBillOutAP!Deal'){
+        				grid.plugins[0].on('afteredit',function(){
+        					me.countAmount(grid);
+        					
+        				});
+        				grid.on('selectionchange',function(){
+        					me.countAmount(grid);
+        				});
+    				}
+    			}
+    		},
+    		'field[name=differ]': {
+				change: function(field){
+					var grid = Ext.getCmp('batchDealGridPanel');
+					me.countAmount(grid);
+				}
+    		},
+    		'erpExportScanLoginButton':{
+    			click:function(btn){
+    				me.beforeExportScanLogin();
+    			}
+    		},
+    		'erpVastDealButton': {
+    			click: function(btn){
+    				me.vastDeal(btn.ownerCt.ownerCt.dealUrl);
+    			}
+    		},
+    		'erpVastAnalyseButton': {
+    			click: function(btn){
+    				me.vastDeal(btn.ownerCt.ownerCt.dealUrl);
+    			}
+    		},
+    		'erpVastPrintButton': {
+    			click: function(btn){
+    				me.vastDeal(btn.ownerCt.ownerCt.dealUrl);
+    			}
+    		},
+    		'erpVastAllotButton':{
+    			click:function(btn){
+    				me.vastDeal(btn.ownerCt.ownerCt.dealUrl);
+    			}
+    		},
+    		'erpSaveCostDetailButton':{
+    			click:function(btn){
+    				me.vastDeal('cost/vastSaveCostDetail.action');
+    			}
+    		},
+    		'erpDifferVoucherCreditButton':{
+    			click:function(btn){
+    				me.vastDeal('cost/vastDifferVoucherCredit.action');
+    			}
+    		},
+    		'SchedulerTrigger':{
+				afterrender:function(trigger){					
+					trigger.setFields=[{field:'va_vecard',mappingfield:'ID'},{field:'va_driver',mappingfield:'VA_DRIVER'}];
+				}
+			},
+    		'erpEndCRMButton':{
+    			click:function(btn){
+    				me.vastDeal('crm/chanceTurnEnd.action');
+    			}
+    		},
+    		'monthdatefield': {
+				afterrender: function(f) {
+					var type = '', con = null;
+					if(f.name == 'vo_yearmonth' && caller == 'Voucher!Audit!Deal') {
+						type = 'MONTH-A';
+						con = Ext.getCmp('condatefield');
+					} else if(f.name == 'vo_yearmonth' && caller == 'Voucher!ResAudit!Deal') {
+						type = 'MONTH-A';
+						con = Ext.getCmp('condatefield');
+					} else if(f.name == 'vo_yearmonth' && caller == 'CashFlowSet') {
+						type = 'MONTH-A';
+						con = Ext.getCmp('condatefield');
+					} else if(f.name == 'vm_yearmonth' && caller == 'VendMonth!Cyf!Batch') {
+						type = 'MONTH-V';
+						con = Ext.getCmp('condatefield');
+					} else if(f.name == 'cm_yearmonth' && caller == 'CustMonth!Cys!Batch') {
+						type = 'MONTH-C';
+						con = Ext.getCmp('condatefield');
+					} else if(f.name == 'cd_yearmonth' && caller == 'Make!Cost!Deal') {
+						type = 'MONTH-T';
+						con = Ext.getCmp('condatefield');
+					}
+					if(type != '') {
+						this.getCurrentMonth(f, type, con);
+					}
+				},
+    			change: function(f) {
+    				if(f.name == 'vo_yearmonth' &&( caller == 'Voucher!Audit!Deal'||caller == 'Voucher!ResAudit!Deal')){
+        				if(!Ext.isEmpty(f.value)) {
+        					var d = Ext.ComponentQuery.query('condatefield');
+        					if(d && d.length > 0)
+        						d[0].setMonthValue(f.value);
+        				}
+    				}
+
+    			}
+			},
+			'erpRefreshQtyButton': {
+				click : function() {
+					this.refreshQty(caller);
+				}
+			}
+    	});
+    },
+    resize: function(form, grid){
+    	if(!this.resized && form && grid && form.items.items.length > 0){
+    		var height = window.innerHeight, 
+				fh = form.getEl().down('.x-panel-body>.x-column-inner').getHeight();
+			if(Ext.isIE){
+				height = screen.height*0.75;
+			}
+			form.setHeight(35 + fh);
+			grid.setHeight(height - fh - 35);
+			this.resized = true;
+		}
+    },
+    countGrid: function(){
+    	//重新计算合计栏值
+    	var grid = Ext.getCmp('batchDealGridPanel');
+    	Ext.each(grid.columns, function(column){
+			if(column.summary){
+				var sum = 0;
+				Ext.each(grid.store.data.items, function(item){
+					if(item.value != null && item.value != ''){
+						sum += Number(item.value);
+					}
+				});
+				Ext.getCmp(column.dataIndex + '_sum').setText(column.text + '(sum):' + sum);
+			} else if(column.average) {
+				var average = 0;
+				Ext.each(grid.store.data.items, function(item){
+					if(item.value != null && item.value != ''){
+						average += Number(item.value);
+					}
+				});
+				average = average/grid.store.data.items.length;
+				Ext.getCmp(column.dataIndex + '_average').setText(column.text + '(average):' + average);
+			} else if(column.count) {
+				var count = 0;
+				Ext.each(grid.store.data.items, function(item){
+					if(item.value != null && item.value != ''){
+						count++;
+					}
+				});
+				Ext.getCmp(column.dataIndex + '_count').setText(column.text + '(count):' + count);
+			}
+		});
+    },
+    vastDeal: function(url){
+    	var me = this, grid = Ext.getCmp('batchDealGridPanel');
+        var items = grid.selModel.getSelection();
+        grid.multiselected = [];
+        Ext.each(items, function(item, index){
+        	if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
+        		&& this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
+        		item.index = this.data[grid.keyField];
+        		grid.multiselected.push(item);        		
+        	}
+        });
+    	var form = Ext.getCmp('dealform');
+		var records = Ext.Array.unique(grid.multiselected);
+		if(records.length > 0){
+			if(contains(url,'common/form/vastPost.action',true)) {
+				this.vastPost(grid, records, url);
+				return;
+			}
+			var params = new Object();
+			params.id=new Array();
+			params.caller = caller;
+			var data = new Array();
+			var bool = false;
+			Ext.each(records, function(record, index){
+				var f = form.fo_detailMainKeyField;
+				if((grid.keyField && this.data[grid.keyField] != null && this.data[grid.keyField] != ''
+	        		&& this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0) 
+	        		||(f && this.data[f] != null && this.data[f] != ''
+		        		&& this.data[f] != '0' && this.data[f] != 0)){
+					bool = true;
+					var o = new Object();
+					if(grid.keyField){
+						o[grid.keyField] = record.data[grid.keyField];
+					} else {
+						params.id[index] = record.data[form.fo_detailMainKeyField];
+					}
+					if(grid.toField){
+						Ext.each(grid.toField, function(f, index){
+							var v = Ext.getCmp(f).value;
+							if(v != null && v.toString().trim() != '' && v.toString().trim() != 'null'){
+								if(Ext.isDate(v)){
+									v = Ext.Date.toString(v);
+								}
+								o[f] = v;
+							} else {
+								o[f] = '';
+							}
+						});
+					}
+					if(grid.necessaryFields){
+						Ext.each(grid.necessaryFields, function(f, index){
+							var v = record.data[f];
+							if(Ext.isDate(v)){
+								v = Ext.Date.toString(v);
+							}
+							if(Ext.isNumber(v)){
+								v = (v).toString();
+							}
+							o[f] = v;
+						});
+					}
+					data.push(o);
+				}
+			});
+			if(bool && !me.dealing){
+				params.data = unescape(Ext.JSON.encode(data).replace(/\\/g,"%"));
+				me.dealing = true;
+				var main = parent.Ext.getCmp("content-panel");
+				main.getActiveTab().setLoading(true);//loading...
+				Ext.Ajax.request({
+			   		url : basePath + url,
+			   		params: params,
+			   		method : 'post',
+			   		timeout: 6000000,
+			   		callback : function(options,success,response){
+			   			main.getActiveTab().setLoading(false);
+			   			me.dealing = false;
+			   			var localJson = new Ext.decode(response.responseText);
+			   			if(localJson.exceptionInfo){
+			   				var str = localJson.exceptionInfo;
+			   				if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){
+			   					str = str.replace('AFTERSUCCESS', '');
+			   					grid.multiselected = new Array();
+			   					Ext.getCmp('dealform').onQuery();
+			   				}
+			   				showError(str);return;
+			   			}
+		    			if(localJson.success){
+		    				if(localJson.log){
+		    					showMessage("提示", localJson.log);
+		    				}
+		    				grid.multiselected = new Array();
+		   					Ext.getCmp('dealform').onQuery();
+			   				/*Ext.Msg.alert("提示", "处理成功!", function(){
+			   					grid.multiselected = new Array();
+			   					Ext.getCmp('dealform').onQuery();
+			   				});*/
+			   			}
+			   		}
+				});
+			} else {
+				showError("没有需要处理的数据!");
+			}
+		} else {
+			showError("请勾选需要的明细!");
+		}
+    },
+    getCurrentMonth: function(f, type, con) {
+    	Ext.Ajax.request({
+    		url: basePath + 'fa/getMonth.action',
+    		params: {
+    			type: type
+    		},
+    		callback: function(opt, s, r) {
+    			var rs = Ext.decode(r.responseText);
+    			if(rs.data) {
+    				f.setValue(rs.data.PD_DETNO);
+    				if(con != null) {
+    					con.setMonthValue(rs.data.PD_DETNO);
+    				}
+    			}
+    		}
+    	});
+    },
+    vastPost: function(grid, records, url) {
+    	var me = this, win = Ext.getCmp('win-post');
+    	grid._postrecords = records;
+    	if(!win) {
+    		win = Ext.create('Ext.Window', {
+    			id: 'win-post',
+    			width: '70%',
+    			height: '60%',
+    			modal: true,
+    			layout: 'anchor',
+    			items: [{
+    				xtype: 'form',
+    				anchor: '100% 100%',
+    				bodyStyle: 'background: #f1f1f1;',
+    				layout: 'column',
+    				defaults: {
+    					xtype: 'checkbox',
+    					margin: '2 10 2 10',
+    					columnWidth: .33
+    				},
+    				items: [{
+    					xtype: 'displayfield',
+    					fieldLabel: '当前账套',
+    					id: 'ma_name'
+    				},{
+    					xtype: 'displayfield',
+    					fieldLabel: '账套描述',
+    					margin: '2 10 30 10',
+    					id: 'ma_function'
+    				},{
+    					xtype: 'displayfield',
+    					fieldLabel: '目标账套',
+    					columnWidth: 1
+    				},{
+    					boxLabel: '全选',
+    					columnWidth: 1,
+    					listeners: {
+    						change: function(f) {
+    		    				var form = f.up('form');
+    		    				form.getForm().getFields().each(function(a){
+    		    					if(a.xtype == 'checkbox' && a.id != f.id) {
+    		    						a.setValue(f.value);
+    		    					}
+    		    				});
+    		    			}
+    					}
+    				}]
+    			}],
+    			buttonAlign: 'center',
+    			buttons: [{
+					text: $I18N.common.button.erpConfirmButton,
+					cls: 'x-btn-blue',
+					handler: function(btn) {
+						var w = btn.ownerCt.ownerCt, form = w.down('form'),
+							from = form.down('#ma_name').value,
+							items = form.query('checkbox[checked=true]'),
+							data = new Array();
+						Ext.each(items, function(item){
+							if (item.ma_name)
+								data.push(item.ma_name);
+						});
+						if(data.length > 0)
+							me.post(w, grid, url, from, data.join(','));
+					}
+				},{
+					text: $I18N.common.button.erpCloseButton,
+					cls: 'x-btn-blue',
+					handler: function(btn) {
+						btn.ownerCt.ownerCt.hide();
+					}
+				}]
+    		});
+    		if(contains(url,'?_out=1',true)) this.getOutMasters(win);
+    		else this.getMasters(win);
+    	}
+    	win.show();
+    },
+    post: function(w, grid, url, from, to) {
+    	var records = grid._postrecords;
+    	w.setLoading(true);
+		var d = new Array(), f = grid.keyField;
+		Ext.each(records, function(r) {
+			d.push(r.get(f));
+		});
+		Ext.Ajax.request({
+			url: basePath + url,
+			params: {
+				caller: caller,
+				data: d.join(','),
+				to: to
+			},
+			callback: function(opt, s, r) {
+				w.setLoading(false);
+				if(s) {
+					var rs = Ext.decode(r.responseText);
+					if(rs.data) {
+						showMessage('提示', rs.data);
+					} else {
+						alert('抛转成功!');
+					}
+					grid.multiselected = new Array();
+					grid._postrecords = null;
+   					Ext.getCmp('dealform').onQuery();
+   					w.hide();
+				}
+			}
+		});
+    },
+	/**
+	 * 加载系统所有账套
+	 */
+	getMasters: function(win){
+		Ext.Ajax.request({
+			url: basePath + 'common/getMasters.action',
+			method: 'get',
+			callback: function(opt, s, res){
+				var r = Ext.decode(res.responseText), c = r.currentMaster;
+				if(r.masters){
+					var form = win.down('form'), items = new Array();
+    				for(var i in r.masters) {
+    					var d = r.masters[i];
+    					if(d.ma_name != c) {
+    						if(d.ma_type == 3) {
+    							var o = {boxLabel: d.ma_name + '(' + d.ma_function + ')', ma_name: d.ma_name};
+            					items.push(o);
+    						}
+    					} else {
+    						form.down('#ma_name').setValue(c);
+    						form.down('#ma_function').setValue(d.ma_function);
+    					}
+    				}
+    				form.add(items);
+				}
+			}
+		});
+	},
+	getOutMasters:function(win){
+		Ext.Ajax.request({
+			url: basePath + 'common/getOutMasters.action',
+			method: 'get',
+			callback: function(opt, s, res){
+				var r = Ext.decode(res.responseText), c = r.currentMaster;	
+				if(r.data){
+					var form = win.down('form'), items = new Array();
+					Ext.Array.each(r.data,function(d){
+						var o = {boxLabel: d.MO_LOCATION + '(' + d.MO_NAME + ')', ma_name: d.MO_LOCATION};
+    					items.push(o);
+					});
+    				form.down('#ma_name').setValue(c);
+					//form.down('#ma_function').setValue(d.ma_function);
+    				form.add(items);
+				}
+			
+			}
+		});
+	},
+	refreshQty : function(cal) {
+		var tab = null;
+		switch(cal) {
+			case 'Purchase!ToCheckAccept!Deal' :
+				tab = 'Purchase';
+				break;
+			case 'Purchase!ToNotify!Deal' :
+				tab = 'Purchase';
+				break;
+			case 'Sale!ToAccept!Deal':
+				tab = 'Sale';
+				break;
+			case 'SendNotify!ToProdIN!Deal':
+				tab = 'SendNotify';
+				break;
+		}
+		var form = Ext.getCmp('dealform');
+		form.setLoading(true);
+		Ext.Ajax.request({
+			url : basePath + 'common/resetqty.action',
+			params : {
+				tab : tab
+			},
+			callback : function(opt, s, res) {
+				form.setLoading(false);
+				var r = Ext.decode(res.responseText);
+				if (r.success) {
+					alert('已转数量重置成功!');
+//					form.onQuery();
+				}
+			}
+		});
+	},
+	getProductWh: function(grid) {
+		var prodfield = grid.getProdField();
+		if(prodfield) {
+			var codes = [];
+			grid.store.each(function(d){
+				codes.push("'" + d.get(prodfield) + "'");
+			});
+			Ext.Ajax.request({
+				url: basePath + 'scm/product/getProductwh.action',
+				params: {
+					codes: codes.join(',')
+				},
+				callback: function (opt, s, r) {
+					if(s) {
+						var rs = Ext.decode(r.responseText);
+						if(rs.data) {
+							grid.productwh = rs.data;
+						}
+					}
+				}
+			});
+		}
+	},
+    countAmount: function(grid){
+    	var me = this;
+    	var items = grid.selModel.selected.items;
+    	var countamount=0;
+    	var taxsum = 0,
+    	    differ = Ext.getCmp('differ');
+    		priceFormat = grid.down('gridcolumn[dataIndex=abd_thisvoprice]').format,
+    		fsize = (priceFormat && priceFormat.indexOf('.') > -1) ? 
+    				priceFormat.substr(priceFormat.indexOf('.') + 1).length : 6;
+    	Ext.each(items,function(item,index){
+    		var a = Number(grid.BaseUtil.numberFormat(Number(item.data['abd_thisvoprice']),fsize));
+    		var b = Number(grid.BaseUtil.numberFormat(Number(item.data['abd_thisvoqty']),2));
+    		var rate = Number(grid.BaseUtil.numberFormat(Number(item.data['abd_taxrate']),2));
+
+    		countamount = countamount + Number(grid.BaseUtil.numberFormat(a*b,2));
+    		taxsum = taxsum + Number(grid.BaseUtil.numberFormat((a*b*rate/100)/(1+rate/100),2));
+    	});
+    	//金额合计   不能填写  自动显示所选数据条目的本次发票数*本次发票单价 的总和
+       	Ext.getCmp('pi_amounttotal').setValue(Ext.util.Format.number(countamount, "0.00"));
+       	if(differ && !Ext.isEmpty(differ.value)){
+       		Ext.getCmp('taxsum').setValue(Ext.util.Format.number(taxsum+differ.value, "0.00"));
+       	} else {
+       		Ext.getCmp('taxsum').setValue(Ext.util.Format.number(taxsum, "0.00"));
+       	}
+    },
+    
+    //确认投放数量,在修改完计划投放数量时候点击按钮,将选中行的数量保存,并且限制不能超过建议变更数
+    ConfirmThrowQty:function(){   	  
+    	var grid = Ext.getCmp('batchDealGridPanel');
+    	var count=0;
+    	if(grid.multiselected.length==0){
+    		var items = grid.selModel.getSelection();
+            Ext.each(items, function(item, index){
+            	if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
+            		&& this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
+            		grid.multiselected.push(item);
+            	}
+            });
+    	}
+		var records = Ext.Array.unique(grid.multiselected);
+		var gridStore = new Array();
+		var dd;
+		if(records.length>0){
+		   	 Ext.each(records, function(records, index){
+		   	 if(records.data.md_prodcode!=''){
+		   	  dd=new Object();
+		   	  dd['mr_mpsid']=records.data.mr_mpsid;
+			  gridStore[index] =  Ext.JSON.encode(dd);
+			  count++;
+			  }
+			});
+		   	this.ConfirmThrow(gridStore); 
+		   	
+		} else {
+			showError("没有需要处理的数据!");
+			}     	
+    },
+    
+    ComfirmThrow:function(store){
+			if(this.throwing) {
+				alert('正在执行...不要重复点击!');
+				return;
+			}
+			var me = this, gridstore = store;
+			var main = parent.Ext.getCmp("content-panel");
+			main.getActiveTab().setLoading(true);//loading...
+			var btn = Ext.getCmp('erpConfirmThrowQtyButton');
+			if(btn) btn.setDisabled(true);
+			this.throwing = true;
+			Ext.Ajax.request({
+		   		url : basePath + "pm/MPSMain/NeedThrow.action",
+		   		params: {
+		   			mainCode:Ext.getCmp('md_mpscode').value,
+		   			caller:caller,
+		   			gridStore:unescape(gridstore.toString().replace(/\\/g,"%")),
+		   			toWhere:'AUTO',
+		   			toCode:Ext.getCmp('md_ordercode').value,
+		   			condition:'' 
+		   		},
+		   		timeout: 60000,
+		   		method : 'post',
+		   		callback : function(options,success,response){
+		   			btn.setDisabled(false);
+					me.throwing = false;
+		   			main.getActiveTab().setLoading(false);
+		   			var localJson = new Ext.decode(response.responseText);
+		   			if(localJson.exceptionInfo){
+		   				showError(localJson.exceptionInfo);
+		   				return "";
+		   			}
+	    			if(localJson.success){
+	    				if(localJson.log){
+	    					showMessage("提示", localJson.log);
+	    				}
+		   				Ext.Msg.alert("提示", "处理成功!", function(){ 
+		   					Ext.getCmp('dealform').onQuery();
+		   				});
+		   			}
+		   		}
+			});  
+			
+		},
+	beforeExportScanLogin:function(){
+		//form里面数据
+		var me = this;
+		var grid = Ext.getCmp('batchDealGridPanel');
+		var data=me.GridUtil.getGridSelected(grid);
+		if(data.length == 0 || data == null){
+    		showError("请先选择需要批量导出的人员资料");
+    		return ;
+    	}
+		var param = new Array();
+		Ext.each(data,function(item,index){
+			param.push(item.em_id);
+		})
+		param = param == null ? [] : "[" + param.toString().replace(/\\/g,"%") + "]";
+		var mb = new Ext.window.MessageBox();
+ 	   	mb.wait('正在查询中','请稍后...',{
+ 		   interval: 10000, //bar will move fast!
+ 		   duration: 50000,
+ 		   increment: 5,
+ 		   /*  text: 'Runing...',*/
+ 		   scope: this
+ 	   });
+		//me.FormUtil.setLoading(true);//loading...
+		Ext.Ajax.request({
+	   		url : basePath+'hr/employee/ExportScanLogin.action',
+	   		params: {
+	   			caller:caller,
+	   			gridStore:param
+	   		},
+	   		method : 'post',
+	   		timeout:50000,
+	   		callback : function(options,success,response){
+	   			//me.FormUtil.setLoading(false);
+	   			mb.close();
+	   			var localJson = new Ext.decode(response.responseText);
+    			if(localJson.success){
+    				showMessage('提示', '操作成功!', 1000); 
+    				var ids=localJson.ids;
+    				//导出
+    				 var con="em_id in"+ids;
+					 me.BaseUtil.createExcel('ScanCodeLogin!query', 'detailgrid', con);
+					 grid.GridUtil.loadNewStore(grid, {
+                            caller: caller,
+                            condition: 'em_id in'+ids
+                     });  			  								 
+	   			} else if(localJson.exceptionInfo){
+	   				var str = localJson.exceptionInfo; 
+        			showError(str);return;
+        		} 
+	   		}
+		});
+	}
+});

+ 917 - 0
WebContent/app/controller/common/BatchDealer.js

@@ -0,0 +1,917 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.common.BatchDealer', {
+    extend: 'Ext.app.Controller',
+    requires: ['erp.util.FormUtil', 'erp.util.GridUtil', 'erp.util.BaseUtil', 'erp.util.RenderUtil'],
+    views:[
+     		'common.batchDeal.ViewPorter','common.batchDeal.Former','common.batchDeal.GriderPanel','core.trigger.AddDbfindTrigger',
+     		'core.trigger.DbfindTrigger','core.form.FtField','core.form.FtFindField','core.form.ConDateField',
+     		'core.trigger.TextAreaTrigger','core.form.YnField', 'core.form.MonthDateField','core.form.ConMonthDateField','core.trigger.SchedulerTrigger',
+     		'core.grid.YnColumn','core.form.DateHourMinuteField','core.form.SeparNumber','core.grid.YnColumnNV','common.batchDeal.Toolbar'		
+     		],
+    BaseUtil: Ext.create('erp.util.BaseUtil'),
+    FormUtil: Ext.create('erp.util.FormUtil'),
+    init:function(){
+    	var me = this;
+    	me.resized = false;
+    	this.control({
+    		'erpBatchDealerFormPanel': {
+    			alladded: function(form){
+    				var grid = Ext.getCmp('batchDealerGridPanel');
+    				me.resize(form, grid);
+    				/**
+    				 * 手动加锁
+    				 */
+    				var sacode = getUrlParam("sacode");
+    				var prodcode = getUrlParam("prodcode"),detno = getUrlParam("detno"),ob_noallqty=getUrlParam("ob_noallqty"),prodname=getUrlParam("prodname");
+    				if(caller=="HandLocked!Deal"&&sacode&&prodcode){
+    					var prodcode_ = Ext.getCmp("prodcode_"),code_ = Ext.getCmp("code_"),pr_name = Ext.getCmp("pr_name"),qty=Ext.getCmp("qty"),pd_detno=Ext.getCmp("pd_detno");
+    					prodcode_.setValue(prodcode);
+    					code_.setValue(sacode);
+    					pr_name.setValue(prodname);
+    					qty.setValue(ob_noallqty);
+    					pd_detno.setValue(detno);
+    				}
+//    				form.onQuery();
+    				var items = form.items.items, autoQuery = false;
+					Ext.each(items, function() {
+						var val = getUrlParam(this.name);
+						if(!Ext.isEmpty(val)) {
+							this.setValue(val);
+							autoQuery = true;
+							if(this.xtype == 'dbfindtrigger') {
+								this.autoDbfind('form', caller, this.name, this.name + " like '%" + val + "%'");
+							}
+						}
+					});
+					if(autoQuery) {
+						setTimeout(function(){
+							form.onQuery();
+						}, 1000);
+					}
+					if(form.source=='allnavigation'){
+        				Ext.each(form.dockedItems.items[0].items.items,function(btn){
+        					btn.setDisabled(true);
+        				});
+        			}
+    			}  			
+    		},
+    		'erpBatchDealerGridPanel': {
+    			afterrender: function(grid){
+    				var form = Ext.getCmp('dealerform');
+    				me.resize(form, grid);
+    				grid.store.on('datachanged', function(store){//dataChanged事件
+						me.getProductWh(grid);
+					});
+    				if(caller == 'ARBill!ToBillOut!Deal'||caller == 'APBill!ToBillOutAP!Deal'){
+        				grid.plugins[0].on('afteredit',function(){
+        					me.countAmount(grid);
+        					
+        				});
+        				grid.on('selectionchange',function(){
+        					me.countAmount(grid);
+        				});
+    				}
+    			},
+    			edit:function(ed,d){
+    				if(caller == "UpdateMakeSubMaterial" && d.field=='mp_canuseqty'){
+	    				//发送请求更新可替代数
+	    			  me.updateMakeSub(d);
+    				}   				
+    			},
+    			itemclick: function(selModel, record, item, index, event){//grid行选择
+    				if(event.target.getAttribute('class')!='x-grid-row-checker'){
+    					if(caller == 'Make!Cost!Deal'){
+        			    	url = 'jsps/common/batchDeal.jsp?whoami=Make!OnCost!Deal';
+        					if(record) {
+        						url += '&ma_code=' + record.data.cd_makecode;
+        						url += '&cd_yearmonth=' + record.data.cd_yearmonth;
+        						url += '&ma_tasktype=' + record.data.cd_maketype;
+        					}
+        					me.FormUtil.onAdd('addCostDetailMateria', '月结表', url);
+        				}
+    				}
+    		    }
+    		},
+    		'field[name=differ]': {
+				change: function(field){
+					var grid = Ext.getCmp('batchDealerGridPanel');
+					me.countAmount(grid);
+				}
+    		},
+    		'erpVastDealButton': {
+    			click: {
+    				fn: function(btn){
+	    				me.vastDeal(btn.ownerCt.ownerCt.dealUrl);
+	    			},
+	    			lock: 2000
+    			}
+    		},
+    		'erpVastAnalyseButton': {
+    			click: function(btn){
+    				me.vastDeal(btn.ownerCt.ownerCt.dealUrl);
+    			}
+    		},
+    		'erpVastPrintButton': {
+    			click: function(btn){
+    				me.vastDeal(btn.ownerCt.ownerCt.dealUrl);
+    			}
+    		},
+    		'erpVastAllotButton':{
+    			click:function(btn){
+    				me.vastDeal(btn.ownerCt.ownerCt.dealUrl);
+    			}
+    		},
+    		'erpSaveCostDetailButton':{
+    			click:function(btn){
+    				me.vastDeal('cost/vastSaveCostDetail.action');
+    			}
+    		},
+    		'erpDifferVoucherCreditButton':{
+    			click:function(btn){
+    				me.vastDeal('cost/vastDifferVoucherCredit.action');
+    			}
+    		},
+    		'erpNowhVoucherCreditButton':{
+    			click:function(btn){
+    				me.vastDeal('cost/vastNowhVoucherCredit.action');
+    			}
+    		},
+    		'SchedulerTrigger':{
+				afterrender:function(trigger){					
+					trigger.setFields=[{field:'va_vecard',mappingfield:'ID'},{field:'va_driver',mappingfield:'VA_DRIVER'}];
+				}
+			},
+    		'erpEndCRMButton':{
+    			click:function(btn){
+    				me.vastDeal('crm/chanceTurnEnd.action');
+    			}
+    		},
+    		'monthdatefield': {
+				afterrender: function(f) {
+					var type = '', con = null;
+					if(f.name == 'vo_yearmonth' && caller == 'Voucher!Audit!Deal') {
+						type = 'MONTH-A';
+						con = Ext.getCmp('condatefield');
+					} else if(f.name == 'vo_yearmonth' && caller == 'Voucher!ResAudit!Deal') {
+						type = 'MONTH-A';
+						con = Ext.getCmp('condatefield');
+					} else if(f.name == 'vo_yearmonth' && caller == 'CashFlowSet') {
+						type = 'MONTH-A';
+						con = Ext.getCmp('condatefield');
+					} else if(f.name == 'vm_yearmonth' && caller == 'VendMonth!Cyf!Batch') {
+						type = 'MONTH-V';
+						con = Ext.getCmp('condatefield');
+					} else if(f.name == 'cm_yearmonth' && caller == 'CustMonth!Cys!Batch') {
+						type = 'MONTH-C';
+						con = Ext.getCmp('condatefield');
+					} else if(f.name == 'cd_yearmonth' && (caller == 'Make!Cost!Deal' || caller == 'Make!OnCost!Deal')) {
+						type = 'MONTH-T';
+						con = Ext.getCmp('condatefield');
+					} else if(f.name == 'pc_yearmonth' && caller == 'ProjectCost!Deal') {
+						type = 'MONTH-O';
+						con = Ext.getCmp('condatefield');
+					}
+					if(type != '') {
+						this.getCurrentMonth(f, type, con);
+					}
+				},
+    			change: function(f) {
+    				if(f.name == 'vo_yearmonth' &&( caller == 'Voucher!Audit!Deal'||caller == 'Voucher!ResAudit!Deal')){
+        				if(!Ext.isEmpty(f.value)) {
+        					var d = Ext.ComponentQuery.query('condatefield');
+        					if(d && d.length > 0)
+        						d[0].setMonthValue(f.value);
+        				}
+    				}
+
+    			}
+			},
+			'erpRefreshQtyButton': {
+				click : function() {
+					this.refreshQty(caller);
+				}
+			},
+			'gridcolumn[dataIndex=md_canuseqty]':{
+    			 beforerender:function(column){
+    			 }
+    		}
+    	});
+    },
+    checkTempStore:function(){//查看暂存区
+    	var me = this, grid = Ext.getCmp('batchDealerGridPanel');
+    	var checkdata=[];
+    	Ext.each(grid.tempStore,function(d){
+    		var keys=Ext.Object.getKeys(d);//getKeys(Object object):获取所有对象的key组成的数组.
+			Ext.each(keys, function(k){
+				checkdata.push(d[k].data);
+			});
+    	});
+    	var  checkwin=Ext.getCmp('checkwin'+caller);
+        if(checkwin){
+        	checkwin.show();
+        }else{
+       	  var checkwin =  Ext.create('Ext.Window', {
+	    		id : 'checkwin'+caller,
+			    height: "100%",
+			    width: "80%",
+			    maximizable : true,
+				buttonAlign : 'center',
+				layout : 'anchor',
+				items: [{
+			    	  tag : 'iframe',
+			    	  frame : true,
+			    	  anchor : '100% 100%',
+			    	  layout : 'fit',
+			    	  html : '<iframe id="iframe_' + caller + '" src="' + basePath + 'jsps/common/tempStore.jsp?caller=' + caller 
+			    	  	+"&condition= " +'' +'" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>'
+			    }],
+			    buttons : [{
+			    	name: 'cancle',
+			    	text : $I18N.common.button.erpCancelButton,
+			    	iconCls: 'x-button-icon-delete',
+			    	cls: 'x-btn-gray',
+			    	listeners: {
+				    		click: function(btn) {
+				    			var checkgrid=Ext.getCmp('checkwin'+caller).items.items[0].body.dom.getElementsByTagName('iframe')[0].contentWindow.Ext.getCmp("tempStoreGridPanel");
+				    			checkgrid.setLoading(true);
+				    			var grid=Ext.getCmp('batchDealerGridPanel'),form=Ext.getCmp('dealerform');
+				    			var tempStore = grid.tempStore;
+				    			var select=checkgrid.getMultiSelected();
+				    			var keys=new Array();
+						    	if(form.detailkeyfield){
+						    		keys=form.detailkeyfield.split('#');
+						    	}else{
+						    		keys.push(grid.keyField);
+						    	}
+						    	var bool=false;
+				    			Ext.each(select ,function(s){
+				    				var key='';
+				    				 Ext.each(keys,function(k){
+							        	key+=s.data[k];
+							    	});
+				    				delete tempStore[key+'temp'];
+				    				checkgrid.getStore().remove(s);
+				    				Ext.each(grid.store.data.items, function(item){
+				    					Ext.each(keys,function(k){
+				    						if(item.data[k]==s.data[k]){
+				    							bool=true;
+				    						}else{
+				    							bool=false;
+				    							return false;
+				    						}
+				    					});
+				        				if(bool){
+				        					item.set('turned','否');
+				        				}
+				        			});
+				    			});
+				    			checkgrid.summary();
+				    			checkgrid.setLoading(false);
+				    		}
+				    	}
+			    },{
+			    	text :$I18N.common.button.erpExportButton,
+			    	iconCls: 'x-button-icon-excel',
+			    	cls: 'x-btn-gray',
+			    	handler : function(btn){
+			    		var checkgrid=Ext.getCmp('checkwin'+caller).items.items[0].body.dom.getElementsByTagName('iframe')[0].contentWindow.Ext.getCmp("tempStoreGridPanel");		
+			    		checkgrid.BaseUtil.exportGrid(checkgrid,checkgrid.title);
+			    	}
+			  } , {
+			    	text : $I18N.common.button.erpCloseButton,
+			    	iconCls: 'x-button-icon-close',
+			    	cls: 'x-btn-gray',
+			    	handler : function(btn){
+			    		btn.ownerCt.ownerCt.close();
+			    	}
+			    }]
+			});
+			checkwin.show();	    			
+		}
+    },
+    addToTempStore:function(){
+    	var me = this,grid = Ext.getCmp('batchDealerGridPanel'),form=Ext.getCmp('dealerform');
+    	grid.setLoading(true);
+    	var keys=new Array();
+    	if(form.detailkeyfield){
+    		keys=form.detailkeyfield.split('#');//唯一标识
+    	}else{
+    		keys.push(grid.keyField);
+    	}
+        var items = grid.getMultiSelected();
+        Ext.each(items, function(item, index){
+        	if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
+        		&& this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
+        		var key='';
+        		var r=this.data;
+		        Ext.each(keys,function(k){
+		        	key+=r[k.toString()];
+		        });
+        		grid.tempStore[key+"temp"]=item;//key+temp作为key,解决key为id值只有数字时没有按照添加顺序排序
+        		item.set('turned','是');//是否已暂存
+        		grid.getSelectionModel().deselect(item);//取消勾选
+        	}
+        });
+        grid.setLoading(false);
+	},
+    resize: function(form, grid){
+    	if(!this.resized && form && grid && form.items.items.length > 0){
+    		var height = window.innerHeight, 
+				fh = form.getEl().down('.x-panel-body>.x-column-inner').getHeight();
+			if(Ext.isIE){
+				height = screen.height*0.75;
+			}
+			form.setHeight(35 + fh);
+			grid.setHeight(height - fh - 35);
+			this.resized = true;
+		}
+    },
+    countGrid: function(){
+    	//重新计算合计栏值
+    	var grid = Ext.getCmp('batchDealerGridPanel');
+    	Ext.each(grid.columns, function(column){
+			if(column.summary){
+				var sum = 0;
+				Ext.each(grid.store.data.items, function(item){
+					if(item.value != null && item.value != ''){
+						sum += Number(item.value);
+					}
+				});
+				Ext.getCmp(column.dataIndex + '_sum').setText(column.text + '(sum):' + sum);
+			} else if(column.average) {
+				var average = 0;
+				Ext.each(grid.store.data.items, function(item){
+					if(item.value != null && item.value != ''){
+						average += Number(item.value);
+					}
+				});
+				average = average/grid.store.data.items.length;
+				Ext.getCmp(column.dataIndex + '_average').setText(column.text + '(average):' + average);
+			} else if(column.count) {
+				var count = 0;
+				Ext.each(grid.store.data.items, function(item){
+					if(item.value != null && item.value != ''){
+						count++;
+					}
+				});
+				Ext.getCmp(column.dataIndex + '_count').setText(column.text + '(count):' + count);
+			}
+		});
+    },
+    vastDeal: function(url){
+    	var me = this, grid = Ext.getCmp('batchDealerGridPanel'),form = Ext.getCmp('dealerform');
+    	var checkdata=[];
+    	Ext.each(grid.tempStore,function(d){
+    		var keys=Ext.Object.getKeys(d);
+			Ext.each(keys, function(k){
+				checkdata.push(d[k]);
+			});
+    	});
+        var items = grid.getMultiSelected();   //勾选的数据
+        var boolAll = false;
+        if(checkdata.length>0&&items.length>0){
+        	showError('暂存区已经有数据,当前筛选界面勾选的数据无效,请取消勾选或添加到暂存区');
+        	return;
+        }else if(items.length>0){
+	        var data = grid.store.data.items;  //本页展示的数据
+        	Ext.each(items, function(item, index){
+	        	if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
+	        		&& this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
+	        		item.index = this.data[grid.keyField];
+	        		grid.multiselected.push(item);  
+	        	}
+	        });
+        }else if(checkdata.length>0){
+        	grid.multiselected=checkdata;
+        }
+		var records = Ext.Array.unique(grid.multiselected);
+		var itemCheck = grid.selModel.getSelection();  //勾选的数据
+        var dataAll = grid.store.data.items;  //数据
+        Ext.each(itemCheck, function(item, index){
+        	if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
+        		&& this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
+        		if(itemCheck.length == dataAll.length){
+        			if(itemCheck.length > 10){        				
+        				boolAll = true;
+        			}
+        		}
+        	}
+        });
+		if(records.length > 0){
+    			if(contains(url,'common/form/vastPost.action',true) || contains(url,'common/vastPostProcess.action',true)) {//流程批量抛转
+    				this.vastPost(grid, records, url);
+    				return;
+    			}
+			var params = new Object();
+			params.id=new Array();
+			params.caller = caller;
+			var data = new Array();
+			var bool = false;
+			Ext.each(records, function(record, index){
+				var f = form.fo_detailMainKeyField;
+				if((grid.keyField && this.data[grid.keyField] != null && this.data[grid.keyField] != ''
+	        		&& this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0) 
+	        		||(f && this.data[f] != null && this.data[f] != ''
+		        		&& this.data[f] != '0' && this.data[f] != 0)){
+					bool = true;
+					var o = new Object();
+					if(grid.keyField){
+						o[grid.keyField] = record.data[grid.keyField];
+					} else {
+						params.id[index] = record.data[form.fo_detailMainKeyField];
+					}
+					if(grid.toField){
+						Ext.each(grid.toField, function(f, index){
+							var v = Ext.getCmp(f).value;
+							if(v != null && v.toString().trim() != '' && v.toString().trim() != 'null'){
+								if(Ext.isDate(v)){
+									v = Ext.Date.toString(v);
+								}
+								o[f] = v;
+							} else {
+								o[f] = '';
+							}
+						});
+					}
+					if(grid.necessaryFields){
+						Ext.each(grid.necessaryFields, function(f, index){
+							var v = record.data[f];
+							if(Ext.isDate(v)){
+								v = Ext.Date.toString(v);
+							}
+							if(Ext.isNumber(v)){
+								v = (v).toString();
+							}
+							o[f] = v;
+						});
+					}
+					data.push(o);
+				}
+			});
+			if(bool && !me.dealing){
+				var main = parent.Ext.getCmp("content-panel");
+				if(boolAll){
+	    			warnMsg('是否按照筛选条件批量处理符合条件的数据?', function(btn){
+						if(btn == 'yes'){	
+							main.getActiveTab().setLoading(true);//loading...
+							var cond = form.getCondition();
+				    		if(Ext.isEmpty(cond)) {
+				    			cond = '1=1';
+				    		}
+							var constr=form.beforeQuery(caller, cond);//执行查询前逻辑
+				    		cond+=constr!=null && constr!=''?" AND ("+constr+")":"";
+							Ext.Ajax.request({
+						   		url : basePath + url,
+						   		params: {
+						   			caller:caller,
+						   			/*param:cond + form.getOrderBy(grid),*/
+						   			param:cond,
+						   			type:'ALL',
+						   		},
+						   		method : 'post',
+						   		timeout: 6000000,
+						   		callback : function(options,success,response){
+						   			main.getActiveTab().setLoading(false);
+						   			me.dealing = false;
+						   			var localJson = new Ext.decode(response.responseText);
+						   			if(localJson.exceptionInfo){
+						   				var str = localJson.exceptionInfo;			   				
+						   				if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){			   					
+						   					str = str.replace('AFTERSUCCESS', '');	
+						   					grid.multiselected = new Array();
+						   					Ext.getCmp('dealerform').onQuery();
+						   				}
+						   				showError(str);return;
+						   			}
+					    			if(localJson.success){
+					    				grid.tempStore={};//操作成功后清空暂存区数据
+					    				if(localJson.log){
+					    					showMessage("提示", localJson.log);
+					    				}
+					    				grid.multiselected = new Array();
+					   					Ext.getCmp('dealerform').onQuery();
+						   				Ext.Msg.alert("提示", "处理成功!", function(){
+						   					grid.multiselected = new Array();
+						   					Ext.getCmp('dealerform').onQuery();
+						   				});
+						   			}
+						   		}
+							});
+	    				} else if(btn == 'no'){
+	    					return;
+	    				} 
+					})
+	    		}else{
+	    			params.data = unescape(Ext.JSON.encode(data).replace(/\\/g,"%"));
+	    			me.dealing = true;
+					main.getActiveTab().setLoading(true);//loading...
+	    			Ext.Ajax.request({
+				   		url : basePath + url,
+				   		/*params: params,*/
+				   		params: {
+				   			caller:caller,
+				   			param:params.data,
+				   			type:'',
+				   		},
+				   		method : 'post',
+				   		timeout: 6000000,
+				   		callback : function(options,success,response){
+				   			main.getActiveTab().setLoading(false);
+				   			me.dealing = false;
+				   			var localJson = new Ext.decode(response.responseText);
+				   			if(localJson.exceptionInfo){
+				   				var str = localJson.exceptionInfo;			   				
+				   				if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){			   					
+				   					str = str.replace('AFTERSUCCESS', '');	
+				   					grid.multiselected = new Array();
+				   					Ext.getCmp('dealerform').onQuery();
+				   				}
+				   				showError(str);return;
+				   			}
+			    			if(localJson.success){
+			    				grid.tempStore={};//操作成功后清空暂存区数据
+			    				if(localJson.log){
+			    					showMessage("提示", localJson.log);
+			    				}
+			    				grid.multiselected = new Array();
+			   					Ext.getCmp('dealerform').onQuery();
+				   				/*Ext.Msg.alert("提示", "处理成功!", function(){
+				   					grid.multiselected = new Array();
+				   					Ext.getCmp('dealerform').onQuery();
+				   				});*/
+				   			}
+				   		}
+					});
+	    		}
+			} else {
+				showError("没有需要处理的数据!");
+			}
+		} else {
+			showError("请勾选需要的明细!");
+		}
+    },
+    getCurrentMonth: function(f, type, con) {
+    	Ext.Ajax.request({
+    		url: basePath + 'fa/getMonth.action',
+    		params: {
+    			type: type
+    		},
+    		callback: function(opt, s, r) {
+    			var rs = Ext.decode(r.responseText);
+    			if(rs.data) {
+    				f.setValue(rs.data.PD_DETNO);
+    				if(con != null) {
+    					con.setMonthValue(rs.data.PD_DETNO);
+    				}
+    			}
+    		}
+    	});
+    },
+    vastPost: function(grid, records, url) {
+    	var me = this, win = Ext.getCmp('win-post');
+    	grid._postrecords = records;
+    	if(!win) {
+    		win = Ext.create('Ext.Window', {
+    			id: 'win-post',
+    			width: '90%',
+    			height: '60%',
+    			modal: true,
+    			layout: 'anchor',
+    			items: [{
+    				xtype: 'form',
+    				anchor: '100% 100%',
+    				bodyStyle: 'background: #f1f1f1;',
+    				layout: 'column',
+    				autoScroll:true,
+    				defaults: {
+    					xtype: 'checkbox',
+    					margin: '2 10 2 10',
+    					columnWidth: .33
+    				},
+    				items: [{
+    					xtype: 'displayfield',
+    					fieldLabel: '当前账套',
+    					id: 'ma_name'    		
+    				},{
+    					xtype: 'displayfield',
+    					fieldLabel: '账套描述',
+    					margin: '2 10 30 10',
+    					id: 'ma_function',
+    					columnWidth: .65
+    				},{
+    					xtype: 'displayfield',
+    					fieldLabel: '目标账套',
+    					columnWidth: 1
+    				},{
+    					boxLabel: '全选',
+    					columnWidth: 1,
+    					listeners: {
+    						change: function(f) {
+    		    				var form = f.up('form');
+    		    				form.getForm().getFields().each(function(a){
+    		    					if(a.xtype == 'checkbox' && a.id != f.id) {
+    		    						a.setValue(f.value);
+    		    					}
+    		    				});
+    		    			}
+    					}
+    				}]
+    			}],
+    			buttonAlign: 'center',
+    			buttons: [{
+					text: $I18N.common.button.erpConfirmButton,
+					cls: 'x-btn-blue',
+					handler: function(btn) {
+						var w = btn.ownerCt.ownerCt, form = w.down('form'),
+							from = form.down('#ma_name').value,
+							items = form.query('checkbox[checked=true]'),
+							data = new Array();
+						Ext.each(items, function(item){
+							if (item.ma_name)
+								data.push(item.ma_name);
+						});
+						if(data.length > 0)
+							me.post(w, grid, url, from, data.join(','));
+					}
+				},{
+					text: $I18N.common.button.erpCloseButton,
+					cls: 'x-btn-blue',
+					handler: function(btn) {
+						btn.ownerCt.ownerCt.hide();
+					}
+				}]
+    		});
+    		if(contains(url,'?_out=1',true)) this.getOutMasters(win);
+    		else this.getMasters(win);
+    	}
+    	win.show();
+    },
+    post: function(w, grid, url, from, to) {
+    	var records = grid._postrecords;
+    	w.setLoading(true);
+		var d = new Array(), f = grid.keyField;
+		Ext.each(records, function(r) {
+			d.push(r.get(f));
+		});
+		Ext.Ajax.request({
+			url: basePath + url,
+			params: {
+				caller: caller,
+				data: d.join(','),
+				to: to
+			},
+			callback: function(opt, s, r) {
+				w.setLoading(false);
+				if(s) {
+					var rs = Ext.decode(r.responseText);
+					if(rs.data) {
+						showMessage('提示', rs.data);
+					} else {
+						alert('抛转成功!');
+					}
+					grid.multiselected = new Array();
+					grid._postrecords = null;
+   					Ext.getCmp('dealerform').onQuery();
+   					w.hide();
+				}
+			}
+		});
+    },
+	/**
+	 * 加载系统所有账套
+	 */
+	getMasters: function(win){
+		Ext.Ajax.request({
+			url: basePath + 'common/getMasters.action',
+			method: 'get',
+			callback: function(opt, s, res){
+				var r = Ext.decode(res.responseText), c = r.currentMaster;
+				if(r.masters){
+					var form = win.down('form'), items = new Array();
+    				for(var i in r.masters) {
+    					var d = r.masters[i];
+    					if(d.ma_name != c) {
+    						if(d.ma_type == 3) {
+    							var o = {boxLabel: d.ma_name + '(' + d.ma_function + ')', ma_name: d.ma_name};
+            					items.push(o);
+    						}
+    					} else {
+    						form.down('#ma_name').setValue(c);
+    						form.down('#ma_function').setValue(d.ma_function);
+    					}
+    				}
+    				form.add(items);
+				}
+			}
+		});
+	},
+	getOutMasters:function(win){
+		Ext.Ajax.request({
+			url: basePath + 'common/getOutMasters.action',
+			method: 'get',
+			callback: function(opt, s, res){
+				var r = Ext.decode(res.responseText), c = r.currentMaster;	
+				if(r.data){
+					var form = win.down('form'), items = new Array();
+					Ext.Array.each(r.data,function(d){
+						var o = {boxLabel: d.MO_LOCATION + '(' + d.MO_NAME + ')', ma_name: d.MO_LOCATION};
+    					items.push(o);
+					});
+    				form.down('#ma_name').setValue(c);
+					//form.down('#ma_function').setValue(d.ma_function);
+    				form.add(items);
+				}
+			
+			}
+		});
+	},
+	refreshQty : function(cal) {
+		var tab = null;
+		switch(cal) {
+			case 'Purchase!ToCheckAccept!Deal' :
+				tab = 'Purchase';
+				break;
+			case 'Purchase!ToNotify!Deal' :
+				tab = 'Purchase';
+				break;
+			case 'Sale!ToAccept!Deal':
+				tab = 'Sale';
+				break;
+			case 'SendNotify!ToProdIN!Deal':
+				tab = 'SendNotify';
+				break;
+		}
+		var form = Ext.getCmp('dealerform');
+		form.setLoading(true);
+		Ext.Ajax.request({
+			url : basePath + 'common/resetqty.action',
+			params : {
+				tab : tab
+			},
+			callback : function(opt, s, res) {
+				form.setLoading(false);
+				var r = Ext.decode(res.responseText);
+				if (r.success) {
+					alert('已转数量重置成功!');
+//					form.onQuery();
+				}
+			}
+		});
+	},
+	getProductWh: function(grid) {
+		var prodfield = grid.getProdField();
+		if(prodfield) {
+			var codes = [];
+			grid.store.each(function(d){
+				codes.push("'" + d.get(prodfield) + "'");
+			});
+			Ext.Ajax.request({
+				url: basePath + 'scm/product/getProductwh.action',
+				params: {
+					codes: codes.join(',')
+				},
+				callback: function (opt, s, r) {
+					if(s) {
+						var rs = Ext.decode(r.responseText);
+						if(rs.data) {
+							grid.productwh = rs.data;
+						}
+					}
+				}
+			});
+		}
+	},
+    countAmount: function(grid){
+    	var me = this;
+    	var items = grid.selModel.selected.items;
+    	var countamount=0;
+    	var taxsum = 0,
+    	    differ = Ext.getCmp('differ');
+    		priceFormat = grid.down('gridcolumn[dataIndex=abd_thisvoprice]').format,
+    		fsize = (priceFormat && priceFormat.indexOf('.') > -1) ? 
+    				priceFormat.substr(priceFormat.indexOf('.') + 1).length : 6;
+    	Ext.each(items,function(item,index){
+    		var a = Number(item.data['abd_thisvoprice']);
+    		var b = Number(item.data['abd_thisvoqty']);
+    		var rate = Number(item.data['abd_taxrate']);
+
+    		countamount = countamount + Number(grid.BaseUtil.numberFormat(a*b,2));
+    		taxsum = taxsum + Number(grid.BaseUtil.numberFormat((a*b*rate/100)/(1+rate/100),2));
+    	});
+    	//金额合计   不能填写  自动显示所选数据条目的本次发票数*本次发票单价 的总和
+       	Ext.getCmp('pi_amounttotal').setValue(Ext.util.Format.number(countamount, "0.00"));
+       	if(differ && !Ext.isEmpty(differ.value)){
+       		Ext.getCmp('taxsum').setValue(Ext.util.Format.number(taxsum+differ.value, "0.00"));
+       	} else {
+       		Ext.getCmp('taxsum').setValue(Ext.util.Format.number(taxsum, "0.00"));
+       	}
+    },
+    
+    //确认投放数量,在修改完计划投放数量时候点击按钮,将选中行的数量保存,并且限制不能超过建议变更数
+    ConfirmThrowQty:function(){
+    	var grid = Ext.getCmp('batchDealerGridPanel');
+    	var count=0;
+    	if(grid.multiselected.length==0){
+    		var items = grid.selModel.getSelection();
+            Ext.each(items, function(item, index){
+            	if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
+            		&& this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
+            		grid.multiselected.push(item);
+            	}
+            });
+    	}
+		var records = Ext.Array.unique(grid.multiselected);
+		var gridStore = new Array();
+		var dd;
+		if(records.length>0){
+		   	 Ext.each(records, function(records, index){
+		   	 if(records.data.md_prodcode!=''){
+		   	  dd=new Object();
+		   	  dd['mr_mpsid']=records.data.mr_mpsid;
+			  gridStore[index] =  Ext.JSON.encode(dd);
+			  count++;
+			  }
+			});
+		   	this.ConfirmThrow(gridStore); 
+		   	
+		} else {
+			showError("没有需要处理的数据!");
+			}     	
+    },
+    
+    ComfirmThrow:function(store){
+			if(this.throwing) {
+				alert('正在执行...不要重复点击!');
+				return;
+			}
+			var me = this, gridstore = store;
+			var main = parent.Ext.getCmp("content-panel");
+			main.getActiveTab().setLoading(true);//loading...
+			var btn = Ext.getCmp('erpConfirmThrowQtyButton');
+			if(btn) btn.setDisabled(true);
+			this.throwing = true;
+			Ext.Ajax.request({
+		   		url : basePath + "pm/MPSMain/NeedThrow.action",
+		   		params: {
+		   			mainCode:Ext.getCmp('md_mpscode').value,
+		   			caller:caller,
+		   			gridStore:unescape(gridstore.toString().replace(/\\/g,"%")),
+		   			toWhere:'AUTO',
+		   			toCode:Ext.getCmp('md_ordercode').value,
+		   			condition:'' 
+		   		},
+		   		timeout: 60000,
+		   		method : 'post',
+		   		callback : function(options,success,response){
+		   			btn.setDisabled(false);
+					me.throwing = false;
+		   			main.getActiveTab().setLoading(false);
+		   			var localJson = new Ext.decode(response.responseText);
+		   			if(localJson.exceptionInfo){
+		   				var str = localJson.exceptionInfo;
+		   				if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){//特殊情况:操作成功,但是出现警告,允许刷新页面
+    	   					str = str.replace('AFTERSUCCESS', '');
+    	   					showMessage("提示", str);
+    	   				} else {
+    	   					showError(str);return;
+    	   				}
+		   			}
+	    			if(localJson.success){
+	    				if(localJson.log){
+	    					showMessage("提示", localJson.log);
+	    				}
+		   				Ext.Msg.alert("提示", "处理成功!", function(){ 
+		   					Ext.getCmp('dealerform').onQuery();
+		   				});
+		   			}
+		   		}
+			});
+		},
+		updateMakeSub:function(d){
+			if(d.record.dirty){
+				if(Ext.isNumber(d.value) && (d.value==0 ||d.value>0)){
+					Ext.Ajax.request({
+				   		url : basePath + "pm/make/updateMakeSubMaterial.action",
+				   		params: {
+				   			data:unescape(escape(Ext.JSON.encode(d.record.data))),
+				   			caller:caller
+				   		},
+				   		method : 'post',
+				   		callback : function(options,success,response){
+				   			var localJson = new Ext.decode(response.responseText);
+				   			if(localJson.exceptionInfo){
+				   				d.record.set('mp_canuseqty',d.originalValue);
+				   				showError(localJson.exceptionInfo);
+				   			}
+			    			if(localJson.success){
+			    				d.record.commit();
+			    				showMessage("提示", "修改锁库数量成功");
+				   			}
+				   		}
+					}); 
+				}else{
+					d.record.set('mp_canuseqty',d.originalValue);
+				}
+			}
+		}
+});

+ 78 - 0
WebContent/app/controller/common/BatchPrint.js

@@ -0,0 +1,78 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.common.BatchPrint', {
+    extend: 'Ext.app.Controller',
+    views:[
+     		'common.batchPrint.Viewport','common.batchPrint.Form','common.batchPrint.GridPanel','core.form.ConMonthDateField',
+     		'core.trigger.DbfindTrigger','core.form.FtField','core.form.FtFindField','core.form.ConDateField','core.form.MonthDateField',
+     		'core.form.YnField', 'core.form.FtDateField','core.grid.YnColumn', 'core.grid.TfColumn',
+			'core.form.ConMonthDateField'],
+    init:function(){
+    	//var me = this;
+    	this.control({ 
+    		'erpBatchPrintFormPanel button[name=confirm]': {
+    			click: function(btn){
+    				
+    			}
+    		},
+       		'erpBatchPrintGridPanel': {
+    			afterrender: function(grid){
+    				var form = Ext.getCmp('printform');
+        			if(form && form.items.items.length > 0){
+        				//根据form字段的多少来调节form所占高度
+        				var height = window.innerHeight;
+            			if(Ext.isIE){
+            				height = screen.height*0.75;
+            			}
+            			var cw = 0;
+            			Ext.each(form.items.items, function(){
+            				cw += this.columnWidth;
+            			});
+            			cw = Math.ceil(cw);
+            			if(cw == 0){
+            				cw = 5;
+            			} else if(cw > 2 && cw <= 5){
+            				cw -= 1;
+            			} else if(cw > 5 && cw < 8){
+            				cw = 4;
+            			}
+            			cw = Math.min(cw, 5);
+            			form.setHeight(height*cw/10 + 10);
+            			grid.setHeight(height*(10 - cw)/10 - 10);
+        			}
+    			}
+    		}
+    	});
+    },
+    countGrid: function(){
+    	//重新计算合计栏值
+    	var grid = Ext.getCmp('batchPrintGridPanel');
+    	Ext.each(grid.columns, function(column){
+			if(column.summary){
+				var sum = 0;
+				Ext.each(grid.store.data.items, function(item){
+					if(item.value != null && item.value != ''){
+						sum += Number(item.value);
+					}
+				});
+				Ext.getCmp(column.dataIndex + '_sum').setText(column.text + '(sum):' + sum);
+			} else if(column.average) {
+				var average = 0;
+				Ext.each(grid.store.data.items, function(item){
+					if(item.value != null && item.value != ''){
+						average += Number(item.value);
+					}
+				});
+				average = average/grid.store.data.items.length;
+				Ext.getCmp(column.dataIndex + '_average').setText(column.text + '(average):' + average);
+			} else if(column.count) {
+				var count = 0;
+				Ext.each(grid.store.data.items, function(item){
+					if(item.value != null && item.value != ''){
+						count++;
+					}
+				});
+				Ext.getCmp(column.dataIndex + '_count').setText(column.text + '(count):' + count);
+			}
+		});
+    }
+});

+ 12 - 0
WebContent/app/controller/common/BatchUpdate.js

@@ -0,0 +1,12 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.common.BatchUpdate', {
+    extend: 'Ext.app.Controller',
+    views:[
+     		'common.batchUpdate.Viewport','common.batchUpdate.Form','core.toolbar.Toolbar','core.grid.Panel2'
+     		 ],
+    init:function(){
+    	//var me = this;
+    	this.control({ 
+    	});
+    }
+});

+ 172 - 0
WebContent/app/controller/common/Batchlevel.js

@@ -0,0 +1,172 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.common.Batchlevel', {
+    extend: 'Ext.app.Controller',
+    requires: ['erp.util.FormUtil', 'erp.util.GridUtil', 'erp.util.BaseUtil', 'erp.util.RenderUtil'],
+    views:[
+     		'common.Batchlevel.Viewport','common.Batchlevel.Form','common.Batchlevel.GridPanel',
+     		'core.trigger.DbfindTrigger','core.form.FtField','core.form.FtFindField','core.form.ConDateField',
+     		'core.button.VastDeal','core.button.VastPrint','core.button.VastAnalyse','core.button.GetVendor',
+     		'core.button.VastTurnPurc','core.trigger.TextAreaTrigger','core.form.YnField','core.button.DealMake',
+     		'core.button.MakeOccur','core.button.SaleOccur','core.button.AllThrow','core.button.SelectThrow','core.form.MonthDateField',
+     		'core.form.CheckGroup'
+     	],
+    init:function(){
+    	var me = this;
+    	this.control({ 
+    		'erpBatchDealGridPanel': {
+    			afterrender: function(grid){
+    				var form = Ext.getCmp('dealform');
+        			if(form && form.items.items.length > 0){
+        				//根据form字段的多少来调节form所占高度
+        				var height = window.innerHeight;
+            			if(Ext.isIE){
+            				height = screen.height*0.75;
+            			}
+            			var cw = 0;
+            			Ext.each(form.items.items, function(){
+            				cw += this.columnWidth;
+            			});
+            			cw = Math.ceil(cw);
+            			if(cw == 0){
+            				cw = 5;
+            			} else if(cw > 2 && cw <= 5){
+            				cw -= 1;
+            			} else if(cw > 5 && cw < 8){
+            				cw = 4;
+            			}
+            			cw = Math.min(cw, 5);
+            			form.setHeight(height*cw/10 + 10);
+            			grid.setHeight(height*(10 - cw)/10 - 10);
+        			}
+    			}
+    		},
+    		'erpVastDealButton': {
+    			click: function(btn){
+    				me.vastDeal(btn.ownerCt.ownerCt.dealUrl);
+    			}
+    		},
+    		'erpVastAnalyseButton': {
+    			click: function(btn){
+    				me.vastDeal(btn.ownerCt.ownerCt.dealUrl);
+    			}
+    		},
+    		/*'erpVastPrintButton': {
+    			click: function(btn){
+    				me.vastDeal(btn.ownerCt.ownerCt.dealUrl);
+    			}
+    		}*/
+    	});
+    },
+    countGrid: function(){
+    	//重新计算合计栏值
+    	var grid = Ext.getCmp('batchDealGridPanel');
+    	Ext.each(grid.columns, function(column){
+			if(column.summary){
+				var sum = 0;
+				Ext.each(grid.store.data.items, function(item){
+					if(item.value != null && item.value != ''){
+						sum += Number(item.value);
+					}
+				});
+				Ext.getCmp(column.dataIndex + '_sum').setText(column.text + '(sum):' + sum);
+			} else if(column.average) {
+				var average = 0;
+				Ext.each(grid.store.data.items, function(item){
+					if(item.value != null && item.value != ''){
+						average += Number(item.value);
+					}
+				});
+				average = average/grid.store.data.items.length;
+				Ext.getCmp(column.dataIndex + '_average').setText(column.text + '(average):' + average);
+			} else if(column.count) {
+				var count = 0;
+				Ext.each(grid.store.data.items, function(item){
+					if(item.value != null && item.value != ''){
+						count++;
+					}
+				});
+				Ext.getCmp(column.dataIndex + '_count').setText(column.text + '(count):' + count);
+			}
+		});
+    },
+    vastDeal: function(url){
+    	var grid = Ext.getCmp('batchDealGridPanel');
+        var items = grid.selModel.getSelection();
+        Ext.each(items, function(item, index){
+        	if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
+        		&& this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
+        		grid.multiselected.push(item);
+        	}
+        });
+    	var form = Ext.getCmp('dealform');
+		var records = Ext.Array.unique(grid.multiselected);
+		if(records.length > 0){
+			var params = new Object();
+			params.caller = caller;
+			var data = new Array();
+			var bool = false;
+			Ext.each(records, function(record, index){
+				var f = form.fo_detailMainKeyField;
+				if((grid.keyField && this.data[grid.keyField] != null && this.data[grid.keyField] != ''
+	        		&& this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0) 
+	        		||(f && this.data[f] != null && this.data[f] != ''
+		        		&& this.data[f] != '0' && this.data[f] != 0)){
+					bool = true;
+					var o = new Object();
+					if(grid.keyField){
+						o[grid.keyField] = record.data[grid.keyField];
+					} else {
+						params.id[index] = record.data[form.fo_detailMainKeyField];
+					}
+					if(grid.toField){
+						Ext.each(grid.toField, function(f, index){
+							var v = Ext.getCmp(f).value;
+							if(v != null && v.toString().trim() != '' && v.toString().trim() != 'null'){
+								o[f] = v;
+							}
+						});
+					}
+					if(grid.necessaryFields){
+						Ext.each(grid.necessaryFields, function(f, index){
+							var v = record.data[f];
+							if(Ext.isDate(v)){
+								v = Ext.Date.toString(v);
+							}
+							o[f] = v;
+						});
+					}
+					data.push(o);
+				}
+			});
+			if(bool){
+				params.data = Ext.encode(data);
+				var main = parent.Ext.getCmp("content-panel");
+				main.getActiveTab().setLoading(true);//loading...
+				Ext.Ajax.request({
+			   		url : basePath + url,
+			   		params: params,
+			   		method : 'post',
+			   		callback : function(options,success,response){
+			   			main.getActiveTab().setLoading(false);
+			   			var localJson = new Ext.decode(response.responseText);
+			   			if(localJson.exceptionInfo){
+			   				showError(localJson.exceptionInfo);
+			   				return "";
+			   			}
+		    			if(localJson.success){
+		    				if(localJson.log){
+		    					showMessage("提示", localJson.log);
+		    				}
+			   				Ext.Msg.alert("提示", "处理成功!", function(){
+			   					grid.multiselected = new Array();
+			   					Ext.getCmp('dealform').onQuery();
+			   				});
+			   			}
+			   		}
+				});
+			} else {
+				showError("没有需要处理的数据!");
+			}
+		}
+    }
+});

+ 14 - 0
WebContent/app/controller/common/CateTreepanelDbfind.js

@@ -0,0 +1,14 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.common.CateTreepanelDbfind', {
+    extend: 'Ext.app.Controller',
+    views:[
+     		'common.CateTreepanelDbfind.CateStrTree',
+     		//'common.TreepanelDbfind.Toolbar',
+     		'common.CateTreepanelDbfind.Viewport'
+     	],
+    init:function(){
+    	this.control({ 
+    		
+    	});
+    }
+});

+ 88 - 0
WebContent/app/controller/common/CheckBase.js

@@ -0,0 +1,88 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.common.CheckBase', {
+    extend: 'Ext.app.Controller',
+    requires: ['erp.util.BaseUtil'],
+    views: ['common.init.CheckBase'],
+    init: function(){ 
+    	var me = this;
+    	me.BaseUtil = Ext.create('erp.util.BaseUtil');
+    	this.control({ 
+    		'button[name=prev]': {
+    			click: function(btn){
+    				var bt = parent.Ext.ComponentQuery.query('button[step=2]')[0];
+    				bt.fireEvent('click', bt);
+    			}
+    		},
+    		'button[name=check]' : {
+    			click: function(b) {
+        			var c = 0, form = b.up('form'), bar = form.down('progressbar');
+        			var ds = form.query('displayfield');
+        			b.setDisabled(true);
+        			form.setLoading(true);
+        			bar.updateProgress(0);
+        			me.errtables = new Array();
+        			Ext.each(ds, function(d) {
+        				if(d.table) {
+        					d.setFieldStyle('');
+        					bar.updateText(d.value);
+            				Ext.Ajax.request({
+            					url: basePath + 'ma/guide/checktab.action',
+            					params: {
+            						t: d.table
+            					},
+            					async: false,
+            					callback: function (o, s, r) {
+            						bar.updateProgress((bar.value*ds.length + 1)/ds.length);
+            						if('success' == r.responseText) {
+            							d.setFieldStyle('color: blue');
+            							c += 1;
+            						} else {
+            							d.setFieldStyle('color: red');
+            							me.errtables.push(d.table);
+            						}
+            					}
+            				});
+        				}
+        			});
+        			form.setLoading(false);
+        			b.setDisabled(false);
+        			bar.updateText('检测完成 检测项:' + ds.length + ' 通过:' + c + ' 失败:' + (ds.length - c));
+        			if(c == ds.length) {
+        				form.down('button[name=next]').setDisabled(false);
+        				form.down('button[name=repair]').setDisabled(true);
+        			} else {
+        				form.down('button[name=repair]').setDisabled(false);
+        			}
+        		}
+    		},
+    		'button[name=repair]' : {
+    			click: function(b) {
+    				var form = b.up('form'), tbs = me.errtables.join(',');
+    				form.setLoading(true);
+    				Ext.Ajax.request({
+    					url: basePath + 'ma/guide/repair.action',
+    					params: {
+    						tbs: tbs
+    					},
+    					callback: function(o, s, r) {
+    						form.setLoading(false);
+    						if ('success' == r.responseText) {
+    							alert('修复成功');
+    							var b = form.down('button[name=check]');
+    		    				b.fireEvent('click', b);
+    						} else {
+    							alert(r.responseText);
+    						}
+    					}
+    				});
+    			}
+    		},
+    		'button[name=next]': {
+    			click: function(btn){
+    				var bt = parent.Ext.ComponentQuery.query('button[step=4]')[0];
+    				bt.fireEvent('click', bt);
+    			}
+    		}
+    	});
+    }
+});

+ 209 - 0
WebContent/app/controller/common/CheckQuery.js

@@ -0,0 +1,209 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.common.CheckQuery', {
+	extend : 'Ext.app.Controller',
+	views : ['common.query.Viewport', 'common.query.GridPanel', 'common.query.CheckForm', 'core.trigger.DbfindTrigger',
+			'core.form.FtField', 'core.form.ConDateField', 'core.form.YnField', 'core.form.FtDateField','core.form.YearDateField',
+			'core.form.MonthDateField','core.form.FtFindField', 'core.grid.YnColumn', 'core.grid.TfColumn', 'core.button.Refresh',
+			'core.form.ConMonthDateField', 'core.trigger.TextAreaTrigger' ],
+	init : function() {
+		var me=this;
+		this.control({
+			'erpQueryFormPanel' : {
+				alladded : function(form) {
+					var items = form.items.items, autoQuery = false;
+					Ext.each(items, function() {
+						var val = getUrlParam(this.name);
+						if(!Ext.isEmpty(val)) {
+							this.setValue(val);
+							autoQuery = true;
+							if(this.xtype == 'dbfindtrigger') {
+								this.autoDbfind('form', caller, this.name, this.name + " like '%" + val + "%'");
+							}
+						}
+					});
+					if(autoQuery) {
+						setTimeout(function(){
+							form.onQuery();
+						}, 1000);
+					}
+				}
+			},
+			'button[name=refresh]':{
+    			click: function(btn){   
+    				var form = me.getForm(btn);
+    				if (caller == 'ALMonth!Query'){
+    					 var month = Ext.getCmp('am_yearmonth');
+    					 var condition=month.secondVal;
+    					 Ext.Ajax.request({
+        					url: basePath + 'fa/ars/CmQueryController/refreshQuery.action',
+        					params: {
+        						condition:condition
+    						},
+        					method: 'post',        					
+        					callback: function(opt, s, r) {        						
+        						var rs = Ext.decode(r.responseText);
+        						if(rs.success) {
+        								form.onQuery();        							
+        						}else{
+        							
+        						}
+        					}
+        				});
+    				}else{
+    					form.onQuery();
+    				}
+    			}
+			},
+			'erpQueryGridPanel' : {
+				itemclick : this.onGridItemClick
+			},
+			'monthdatefield': {
+				afterrender: function(f) {
+					var type = '';
+					if(f.name == 'cd_yearmonth') {
+						type = 'MONTH-T';
+					}
+					if(f.name == 'cmc_yearmonth') {
+						type = 'MONTH-A';
+					}
+					if(f.name == 'cm_yearmonth') {
+						type = 'MONTH-A';
+					}
+					if(f.name == 'am_yearmonth') {
+						type = 'MONTH-B';
+					}
+					if(type != '' && Ext.isEmpty(getUrlParam(f.name))) {
+						this.getCurrentMonth(f, type);
+					}
+				}
+			},
+			'conmonthdatefield': {
+				afterrender: function(f) {
+					var type = '';
+					if(f.name == 'cd_yearmonth') {
+						type = 'MONTH-T';
+					}
+					if(f.name == 'cmc_yearmonth') {
+						type = 'MONTH-A';
+					}
+					if(f.name == 'cm_yearmonth') {
+						type = 'MONTH-A';
+					}
+					if(f.name == 'am_yearmonth') {
+						type = 'MONTH-B';
+					}
+					if(type != '' && Ext.isEmpty(getUrlParam(f.name))) {
+						this.getCurrentMonth(f, type);
+					}
+				}
+			}
+		});
+	},
+	onGridItemClick : function(selModel, record) {
+		if (caller == 'CustMonth!ARLI!Query') {
+			var cmid = record.data['cm_id'];
+			if (cmid > 0) {
+				var panel = Ext.getCmp(caller + "cm_id" + "=" + cmid);
+				var main = parent.Ext.getCmp("content-panel");
+				if (!main) {
+					main = parent.parent.Ext.getCmp("content-panel");
+				}
+				if (!panel) {
+					var title = "";
+					if (value.toString().length > 4) {
+						title = value.toString().substring(value.toString().length - 4);
+					} else {
+						title = value;
+					}
+					var myurl = '';
+					if (me.BaseUtil.contains(url, '?', true)) {
+						myurl = url + '&formCondition=' + formCondition + '&gridCondition=' + gridCondition;
+					} else {
+						myurl = url + '?formCondition=' + formCondition + '&gridCondition=' + gridCondition;
+					}
+					myurl += "&datalistId=" + main.getActiveTab().id;
+					main.getActiveTab().currentStore = me.getCurrentStore(value);// 用于单据翻页
+					panel = {
+						title : me.BaseUtil.getActiveTab().title + '(' + title + ')',
+						tag : 'iframe',
+						tabConfig : {
+							tooltip : me.BaseUtil.getActiveTab().tabConfig.tooltip + '(' + keyField + "=" + value + ')'
+						},
+						frame : true,
+						border : false,
+						layout : 'fit',
+						iconCls : 'x-tree-icon-tab-tab1',
+						html : '<iframe id="iframe_maindetail_' + caller + "_" + value + '" src="' + myurl
+								+ '" height="100%" width="100%" frameborder="0" scrolling="auto"></iframe>',
+						closable : true,
+						listeners : {
+							close : function() {
+								if (!main) {
+									main = parent.parent.Ext.getCmp("content-panel");
+								}
+								main.setActiveTab(main.getActiveTab().id);
+							}
+						}
+					};
+					this.openTab(panel, caller + keyField + "=" + record.data[keyField]);
+				} else {
+					main.setActiveTab(panel);
+				}
+
+			}
+		}
+		if(caller=='Sale!saledetailDet'){
+			this.schedule(record);
+		}
+	},
+	schedule: function(record) {
+		var width = Ext.isIE ? screen.width*0.7*0.9 : '80%',
+	   		height = Ext.isIE ? screen.height*0.75 : '100%';
+		var sd_id = record.get('sd_id');
+		Ext.Ajax.request({
+			url : basePath + "scm/sale/checkSaleDetailDet.action",
+			params: {
+				whereString: "sd_id="+sd_id
+			},
+			method : 'post',
+			async: false,
+			callback:function(options,success,response){
+				var res = new Ext.decode(response.responseText);
+				if(res.exceptionInfo){
+					showError(res.exceptionInfo);return;
+				}
+			}
+		});
+		Ext.create('Ext.Window', {
+			width: width,
+			height: height,
+			autoShow: true,
+			layout: 'anchor',
+			items: [{
+				tag : 'iframe',
+				frame : true,
+				anchor : '100% 100%',
+				layout : 'fit',
+				html : '<iframe id="iframe_dbfind" src="' + basePath + 'jsps/scm/sale/saleDetail.jsp?formCondition=sd_id=' 
+					+ sd_id + '&gridCondition=sdd_sdid=' + sd_id + '" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>'
+			}]
+		});
+	},
+	getForm: function(btn){
+		return btn.ownerCt.ownerCt;
+	},
+	getCurrentMonth: function(f, type) {
+	    Ext.Ajax.request({
+	    	url: basePath + 'fa/getMonth.action',
+	    	params: {
+	    		type: type
+	    	},
+	    	callback: function(opt, s, r) {
+	    		var rs = Ext.decode(r.responseText);
+	    		if(rs.data) {
+	    			f.setValue(rs.data.PD_DETNO);
+	    		}
+	    	}
+	    });
+	}
+});

+ 122 - 0
WebContent/app/controller/common/CommonChange.js

@@ -0,0 +1,122 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.common.CommonChange', {
+    extend: 'Ext.app.Controller',
+    requires: ['erp.util.FormUtil', 'erp.util.GridUtil', 'erp.util.BaseUtil'],
+    views:[
+      		'common.CommonChange.Form','common.CommonChange.ViewPort','core.grid.Panel2','core.toolbar.Toolbar','core.trigger.MultiDbfindTrigger','core.trigger.HrOrgTreeDbfindTrigger',
+      		'core.button.Save','core.button.Add','core.button.Submit','core.button.Print','core.button.Upload','core.button.ResAudit',
+      		'core.button.Audit','core.button.Close','core.button.Delete','core.button.Update','core.button.DeleteDetail','core.button.ResSubmit',
+      		'core.button.Scan','core.button.Banned','core.button.ResBanned','core.form.MultiField','core.button.Confirm','core.button.Sync',
+      		'core.trigger.DbfindTrigger','core.trigger.TextAreaTrigger','core.form.YnField', 'core.grid.YnColumn','core.trigger.AddDbfindTrigger',
+      		'core.form.FileField','core.form.SplitTextField','core.button.End','core.button.ResEnd','core.form.CheckBoxGroup'
+      	],
+    init:function(){
+    	var me = this;
+    	me.FormUtil = Ext.create('erp.util.FormUtil');
+    	me.GridUtil = Ext.create('erp.util.GridUtil');
+    	me.BaseUtil = Ext.create('erp.util.BaseUtil');
+    	this.control({
+    		'erpFormPanel': {
+    			afterload: function(form){
+    				//form.loadRecord(form,formCondition);
+    			}
+    		},
+    		'erpSaveButton': {
+    			click: function(btn){
+    				var form = me.getForm(btn);
+    				if(!Ext.isEmpty(form.codeField) && Ext.getCmp(form.codeField) && ( 
+    						Ext.getCmp(form.codeField).value == null || Ext.getCmp(form.codeField).value == '')){
+    					me.BaseUtil.getRandomNumber(caller);//自动添加编号
+    				}
+    				this.FormUtil.beforeSave(this);
+    			}
+    		},
+    		'mfilefield':{
+    			beforerender:function(field){
+    				field.autoUpdate=false;
+    			}
+    		},
+    		'dbfindtrigger':{
+    			afterrender:function(field){
+    				//考虑将来 不同变更单变更不同类型 如物料
+    				field.dbCaller=caller.split('$')[0];
+    			}
+    		},
+    		'erpDeleteButton' : {
+    			afterrender: function(btn){
+    				var status = Ext.getCmp(me.getForm(btn).statuscodeField);
+    				if(status && status.value != 'ENTERING'){
+    					btn.hide();
+    				}
+    			},
+    			click: function(btn){
+    				me.FormUtil.onDelete(Ext.getCmp(me.getForm(btn).keyField).value);
+    			}
+    		},
+    		'erpUpdateButton': {
+    			click: function(btn){
+    				this.FormUtil.onUpdate(this);
+    			},
+    			afterrender: function(btn){
+    				var status = Ext.getCmp(me.getForm(btn).statuscodeField);
+    				if(status && status.value != 'ENTERING'){
+    					btn.hide();
+    				}
+    			}
+    		},
+    		'erpAddButton': {
+    			click: function(btn){   		
+    				var url = window.location.href;
+    				url = url.replace(basePath, '');
+    				url = url.substring(0, url.lastIndexOf('formCondition')-1);
+    				url = me.FormUtil.contains(url, '?', true)?url : url+"?whoami="+caller;
+    				me.FormUtil.onAdd('add' + caller, '新增单据', url);
+    			}
+    		},
+    		'erpCloseButton': {
+    			click: function(btn){
+    				me.FormUtil.beforeClose(me);
+    			}
+    		},
+    		'erpSubmitButton': {
+    			afterrender: function(btn){
+    				var status = Ext.getCmp(me.getForm(btn).statuscodeField);
+    				if(status && status.value != 'ENTERING'){
+    					btn.hide();
+    				}
+    			},
+    			click: function(btn){
+    				me.FormUtil.onSubmit(Ext.getCmp(me.getForm(btn).keyField).value);
+    			}
+    		},
+    		'erpResSubmitButton': {
+    			afterrender: function(btn){
+    				var status = Ext.getCmp(me.getForm(btn).statuscodeField);
+    				if(status && status.value != 'COMMITED'){
+    					btn.hide();
+    				}
+    			},
+    			click: function(btn){
+    				me.FormUtil.onResSubmit(Ext.getCmp(me.getForm(btn).keyField).value);
+    			}
+    		},
+    		'erpAuditButton': {
+    			afterrender: function(btn){
+    				var status = Ext.getCmp(me.getForm(btn).statuscodeField);
+    				if(status && status.value != 'COMMITED'){
+    					btn.hide();
+    				}
+    			},
+    			click: function(btn){
+    				me.FormUtil.onAudit(Ext.getCmp(me.getForm(btn).keyField).value);
+    			}
+    		}
+    	});
+    }, 
+    onGridItemClick: function(selModel, record){//grid行选择
+    	this.GridUtil.onGridItemClick(selModel, record);
+    },
+	getForm: function(btn){
+		return btn.ownerCt.ownerCt;
+	}
+});

+ 344 - 0
WebContent/app/controller/common/CommonPage.js

@@ -0,0 +1,344 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.common.CommonPage', {
+    extend: 'Ext.app.Controller',
+    requires: ['erp.util.FormUtil', 'erp.util.GridUtil', 'erp.util.BaseUtil'],
+    views:[
+      		'core.form.Panel','common.CommonPage','core.grid.Panel2','core.toolbar.Toolbar','core.trigger.MultiDbfindTrigger','core.trigger.HrOrgTreeDbfindTrigger',
+      		'core.button.Save','core.button.Add','core.button.Submit','core.button.Print','core.button.Upload','core.button.ResAudit','core.button.FormBook',
+      		'core.button.Audit','core.button.Close','core.button.Delete','core.button.Update','core.button.DeleteDetail','core.button.ResSubmit',
+      		'core.button.Scan','core.button.Banned','core.button.ResBanned','core.form.MultiField','core.button.Confirm','core.button.Sync',
+      		'core.trigger.DbfindTrigger','core.trigger.TextAreaTrigger','core.form.YnField', 'core.grid.YnColumn','core.trigger.AddDbfindTrigger',
+      		'core.form.FileField','core.form.SplitTextField','core.button.End','core.button.ResEnd','core.form.CheckBoxGroup','core.button.TurnMJProject',
+      		'core.form.MonthDateField','core.button.Modify','core.form.MultiField1'
+      	],
+    init:function(){
+    	var me = this;
+    	me.FormUtil = Ext.create('erp.util.FormUtil');
+    	me.GridUtil = Ext.create('erp.util.GridUtil');
+    	me.BaseUtil = Ext.create('erp.util.BaseUtil');
+    	this.control({
+    		'field[name=wh_code]' : {
+    			afterrender: function() {
+    				if(caller == 'Warehouse!Base'){
+    					if(Ext.getCmp('wh_code').getValue()!=null&&Ext.getCmp('wh_code').getValue()!=''){
+    						Ext.getCmp('wh_code').setReadOnly(true);
+    					}
+    					
+    				}
+    			}
+    		},
+    		'field[name=CT_LEAF]' : {//合同类型-叶节点才能设置流水长度
+    			change: function() {
+    				if(caller == 'ContractType'){
+    					if(Ext.getCmp('CT_LEAF').getValue()=='T'){
+    						Ext.getCmp('CT_LENGTH').setReadOnly(false);
+    						Ext.getCmp('CT_WCODESET').setReadOnly(false);  						
+    					}
+    					if(Ext.getCmp('CT_LEAF').getValue()=='F'){
+    						Ext.getCmp('CT_LENGTH').setValue("0");
+    						Ext.getCmp('CT_WCODESET').setValue("0");
+    						Ext.getCmp('CT_LENGTH').setReadOnly(true);
+    						Ext.getCmp('CT_WCODESET').setReadOnly(true);
+    					}   					
+    				}
+    			}
+    		},
+    		'erpFormPanel': {
+    			alladded: function(form){
+    				var grid = Ext.getCmp('grid');
+    				if(grid)
+    					me.resize(form, grid);
+    			}    			
+    		},
+    		'erpGridPanel2': { 
+    			itemclick: this.onGridItemClick,
+    			reconfigure: function(grid){
+    				var form = Ext.getCmp('form');
+        			if(form)
+        				me.resize(form, grid);
+    			}
+    		},
+    		'erpSaveButton': {
+    			afterrender: function(btn){
+    				var form = me.getForm(btn);
+    				var codeField = Ext.getCmp(form.codeField);  				
+    				if(Ext.getCmp(form.codeField) && (Ext.getCmp(form.codeField).value != null && Ext.getCmp(form.codeField).value != '')){
+    						btn.hide();
+    					}
+    			},
+    			click: function(btn){
+    				var form = me.getForm(btn);
+    				if(!Ext.isEmpty(form.codeField) && Ext.getCmp(form.codeField) && ( 
+    						Ext.getCmp(form.codeField).value == null || Ext.getCmp(form.codeField).value == '')){
+    					me.BaseUtil.getRandomNumber(caller);//自动添加编号
+    				}
+    				if(caller == 'FeePlease!Mould'){
+    					me.getamount();
+    				}
+    				this.FormUtil.beforeSave(this);
+    			}
+    		},
+    		'erpDeleteButton' : {
+    			click: function(btn){
+    				me.FormUtil.onDelete(Ext.getCmp(me.getForm(btn).keyField).value);
+    			}
+    		},
+    		'erpUpdateButton': {
+    			click: function(btn){
+    				if(caller == 'FeePlease!Mould'){
+    					me.getamount();
+    				}
+    				this.FormUtil.onUpdate(this);
+    			}
+    		},
+    		'erpAddButton': {
+    			click: function(btn){
+    				var title = btn.ownerCt.ownerCt.title || ' ';
+    				var url = window.location.href;
+    				url = url.replace(basePath, '');
+    				url = url.substring(0, url.lastIndexOf('formCondition')-1);
+    				me.FormUtil.onAdd('add' + caller, title, url);
+    			}
+    		},
+    		'erpCloseButton': {
+    			click: function(btn){
+    				me.FormUtil.beforeClose(me);
+    			}
+    		},
+    		'erpSubmitButton': {
+    			afterrender: function(btn){
+    				var status = Ext.getCmp(me.getForm(btn).statuscodeField);
+    				if(status && status.value != 'ENTERING'){
+    					btn.hide();
+    				}
+    			},
+    			click: function(btn){
+    				me.FormUtil.onSubmit(Ext.getCmp(me.getForm(btn).keyField).value);
+    			}
+    		},
+    		'erpResSubmitButton': {
+    			afterrender: function(btn){
+    				var status = Ext.getCmp(me.getForm(btn).statuscodeField);
+    				if(status && status.value != 'COMMITED'){
+    					btn.hide();
+    				}
+    			},
+    			click: function(btn){
+    				me.FormUtil.onResSubmit(Ext.getCmp(me.getForm(btn).keyField).value);
+    			}
+    		},
+    		'erpAuditButton': {
+    			afterrender: function(btn){
+    				var status = Ext.getCmp(me.getForm(btn).statuscodeField);
+    				if(status && status.value != 'COMMITED'){
+    					btn.hide();
+    				}
+    			},
+    			click: function(btn){
+    				me.FormUtil.onAudit(Ext.getCmp(me.getForm(btn).keyField).value);
+    			}
+    		},
+    		'erpBannedButton': {
+				afterrender:function(btn){
+    				var status = Ext.getCmp(me.getForm(btn).statuscodeField);
+    				if(status && status.value != 'CANUSE' && status.value != 'AUDITED'){
+    					btn.hide();
+    				}
+    			},
+				click: function(btn){
+					var crid = Ext.getCmp(me.getForm(btn).keyField).value;
+					me.FormUtil.onBanned(crid);
+				}
+			},
+			'erpResBannedButton': {
+				afterrender:function(btn){
+    				var status = Ext.getCmp(me.getForm(btn).statuscodeField);
+    				if(status && status.value != 'DISABLE'){
+    					btn.hide();
+    				}
+    			},
+				click: function(btn){
+					var crid = Ext.getCmp(me.getForm(btn).keyField).value;
+					me.FormUtil.onResBanned(crid);
+				}
+			},
+			'erpEndButton': {
+				afterrender:function(btn){
+    				var status = Ext.getCmp(me.getForm(btn).statuscodeField);
+    				if(status && status.value != 'CANUSE' && status.value != 'AUDITED'){
+    					btn.hide();
+    				}
+    			},
+				click: function(btn){
+					var crid = Ext.getCmp(me.getForm(btn).keyField).value;
+					me.FormUtil.onEnd(crid);
+				}
+			},
+			'erpResEndButton': {
+				afterrender:function(btn){
+    				var status = Ext.getCmp(me.getForm(btn).statuscodeField);
+    				if(status && status.value != 'FINISH'){
+    					btn.hide();
+    				}
+    			},
+				click: function(btn){
+					var crid = Ext.getCmp(me.getForm(btn).keyField).value;
+					me.FormUtil.onResEnd(crid);
+				}
+			},
+    		'erpResAuditButton': {
+    			afterrender: function(btn){
+    				var status = Ext.getCmp(me.getForm(btn).statuscodeField);
+    				if(status && status.value != 'AUDITED'){
+    					btn.hide();
+    				}
+    			},
+    			click: function(btn){
+    				me.FormUtil.onResAudit(Ext.getCmp(me.getForm(btn).keyField).value);
+    			}
+    		},
+    		'erpPrintButton': {
+    			click: function(btn){
+    			var condition="";
+    			var reportName="";
+    			    if(caller=="FeePlease!Mould"){
+    			    	 condition = '{MOULDFEEPLEASE.mp_id}=' + Ext.getCmp(me.getForm(btn).keyField).value + '';
+    			    	 reportName="MouldFeePlease";
+    			    }
+    			    if(caller=="Purc!Mould"){
+    			    	condition = '{PURMOULD.pm_id}=' + Ext.getCmp(me.getForm(btn).keyField).value + '';
+   			    	    reportName="MouldPur";
+    			    }
+    			    var id = Ext.getCmp(me.getForm(btn).keyField).value;
+    				me.FormUtil.onwindowsPrint(id, reportName, condition);
+    			}
+    		},
+    		'erpConfirmButton': {
+    			click: function(btn){
+    				me.FormUtil.onConfirm(Ext.getCmp(me.getForm(btn).keyField).value);
+    			}
+    		},
+    		'erpTurnMJProjectButton':{
+    			afterrender: function(btn){
+    				var status = Ext.getCmp('mo_statuscode');
+    				if(status && status.value != 'AUDITED'){
+    					btn.hide();
+    				}
+    			},
+    			click: function(btn){
+    				warnMsg("确定要转模具模具委托保管书吗?", function(btn){
+    					if(btn == 'yes'){
+    						me.FormUtil.getActiveTab().setLoading(true);//loading...
+    	    				Ext.Ajax.request({
+    	    			   		url : basePath + 'pm/mould/turnMJProject.action',
+    	    			   		params: {
+    	    			   			id: Ext.getCmp('mo_id').value
+    	    			   		},
+    	    			   		method : 'post',
+    	    			   		callback : function(o, s, res){
+    	    			   			me.FormUtil.getActiveTab().setLoading(false);
+    	    			   			var r = new Ext.decode(res.responseText);
+    	    			   			if(r.exceptionInfo){
+    	    			   				showError(r.exceptionInfo);
+    	    			   			}
+    	    			   			if(r.success){
+    	    		    				turnSuccess(function(){
+    	    		    					var id = r.id;
+    	    		    					var url = "jsps/common/commonpage.jsp?whoami=MJProject!Mould&formCondition=ws_id=" + id + 
+    	    		    						"&gridCondition=wd_wsid=" + id;
+    	    		    					me.FormUtil.onAdd('MJProject' + id, '模具委托保管书' + id, url);
+    	    		    				});
+    	    			   			}
+    	    			   		}
+    	    				});
+    					}
+    				});
+    			}
+    		},
+    		'htmleditor': {
+    			afterrender: function(f){
+    				f.setHeight(500);
+    			}
+    		},
+    		'datetimefield[id=ag_end]': {
+    			change: function(field){
+    				var time = Ext.getCmp('ag_start').value;
+    				if(time == null || time == ''){
+    					showError('请先选择日程开始时间');
+    					field.setValue('');
+    				} else {
+    					var start = Date.parse(time);
+    					var end = Date.parse(field.value);
+    					if(start > end){
+    						showError('结束时间不能早于开始时间 ');
+    						field.setValue('');
+    					}    					
+    				}
+    			}
+    		},
+    		'datetimefield[id=ag_predict]': {
+    			change: function(field){
+    				var time = Ext.getCmp('ag_start').value;
+    				if(time == null || time == ''){
+    					showError('请先选择日程开始时间');
+    					field.setValue('');
+    				} else {
+    					var start = Date.parse(time);
+    					var end = Date.parse(field.value);
+    					if(start < end){
+    						showError('提醒时间不能晚于开始时间 ');
+    						field.setValue('');
+    					}    					
+    				}
+    			}
+    		},
+    		'dbfindtrigger[name=mfd_purcdetno]': {
+    			focus: function(t){
+    				t.setHideTrigger(false);
+    				t.setReadOnly(false);//用disable()可以,但enable()无效
+    				var record = Ext.getCmp('grid').selModel.lastSelected;
+    				var code = record.data['mfd_purccode'];
+    				if(code == null || code == ''){
+    					showError("请先选择关联单号!");
+    					t.setHideTrigger(true);
+    					t.setReadOnly(true);
+    				} else {
+    					t.dbBaseCondition = "pm_code='" + code + "'";
+    				}
+    			}
+    		}
+    	});
+    }, 
+    getamount: function(){
+		var grid = Ext.getCmp('grid');
+		var items = grid.store.data.items;
+		var amount = 0;
+		var appamount = 0;
+		Ext.each(items,function(item,index){
+			if(item.data['mfd_pscode']!=null&&item.data['mfd_pscode']!=""){
+				amount= amount + Number(item.data['mfd_purcamount']);
+				appamount = appamount + Number(item.data['mfd_amount']);
+			}
+		});
+		Ext.getCmp('mp_orderamount').setValue(Ext.util.Format.number(amount,'0.00'));
+		Ext.getCmp('mp_total').setValue(Ext.util.Format.number(appamount,'0.00'));
+	},
+    onGridItemClick: function(selModel, record){//grid行选择
+    	this.GridUtil.onGridItemClick(selModel, record);
+    },
+	getForm: function(btn){
+		return btn.ownerCt.ownerCt;
+	},
+    resize: function(form, grid){
+    	if(!this.resized && form && grid && form.items.items.length > 0){
+    		var height = window.innerHeight, 
+    			fh = form.getEl().down('.x-panel-body>.x-column-inner').getHeight();
+			if(Ext.isIE){
+				height = screen.height*0.75;
+			}
+			form.setHeight(70 + fh);
+			grid.setHeight(height - fh - 70);
+			this.resized = true;
+		}
+    }
+});

+ 1235 - 0
WebContent/app/controller/common/Datalist.js

@@ -0,0 +1,1235 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.common.Datalist', {
+	extend: 'Ext.app.Controller',
+	requires: ['erp.util.BaseUtil', 'erp.util.FormUtil', 'erp.util.RenderUtil'],
+	views:[
+	       'common.datalist.Viewport','common.datalist.GridPanel','common.datalist.Toolbar','core.button.VastAudit','core.button.VastDelete',
+	       'core.button.VastPrint','core.button.VastReply','core.button.VastSubmit','core.button.ResAudit','core.form.FtField',
+	       'core.grid.TfColumn','core.grid.YnColumn','core.trigger.DbfindTrigger','core.form.FtDateField','core.form.FtFindField',
+	       'core.form.FtNumberField', 'core.form.MonthDateField','core.grid.NtColumn'
+	       ],
+	       init:function(){
+	    	   this.BaseUtil = Ext.create('erp.util.BaseUtil');
+	    	   this.FormUtil = Ext.create('erp.util.FormUtil');
+	    	   this.GridUtil = Ext.create('erp.util.GridUtil');
+	    	   this.control({
+	    		   'erpDatalistGridPanel': { 
+	    			   itemclick: this.onGridItemClick
+	    		   },
+	    		   'erpVastDeleteButton': {
+	    			   click: function(btn){
+	    				   var dlwin = new Ext.window.Window({
+	    					   id : 'dlwin',
+	    					   title: btn.text,
+	    					   height: "100%",
+	    					   width: "80%",
+	    					   maximizable : true,
+	    					   buttonAlign : 'center',
+	    					   layout : 'anchor',
+	    					   items: [{
+	    						   tag : 'iframe',
+	    						   frame : true,
+	    						   anchor : '100% 100%',
+	    						   layout : 'fit',
+	    						   html : '<iframe id="iframe_dl_'+caller+'" src="'+basePath+'jsps/common/vastDatalist.jsp?urlcondition='+condition+'&whoami='+caller+'" height="100%" width="100%" frameborder="0" scrolling="auto"></iframe>'
+	    					   }],
+	    					   buttons : [{
+	    						   text: btn.text,
+	    						   iconCls: btn.iconCls,
+	    						   cls: 'x-btn-gray-1',
+	    						   handler: function(){
+
+	    						   }
+	    					   },{
+	    						   text : '关  闭',
+	    						   iconCls: 'x-button-icon-close',
+	    						   cls: 'x-btn-gray',
+	    						   handler : function(){
+	    							   Ext.getCmp('dlwin').close();
+	    						   }
+	    					   }]
+	    				   });
+	    				   dlwin.show();
+	    			   }
+	    		   },
+	    		   'button[id=searchlist]': {
+	    			   click: function(){
+	    				   this.showSearchListWin();
+	    			   }
+	    		   },
+	    		   'button[id=customize]': {
+	    			   click: function(){
+	    				   this.showCustomizeWin();
+	    			   }
+	    		   },
+	    		   'dbfindtrigger[name=sl_label]': {
+	    			   afterrender: function(t){
+	    				   t.dbBaseCondition = 'sl_caller=\'' + caller + '\'';
+	    			   }
+	    		   }
+	    	   });
+	       }, 
+	       onGridItemClick: function(selModel, record){//grid行选择
+	    	   if(typeof parentDoc !== 'undefined' && parentDoc) {
+	    		   var doc = parent.Ext.getCmp(parentDoc);
+	    		   if(doc) {
+	    			   doc.fireEvent('itemselect', doc, record.data);
+	    		   }
+	    	   } else {
+	    		   if(keyField != null && keyField != ''){//有些datalist不需要打开明细表,这些表在datalist表里面不用配dl_keyField
+		    		   if(keyField.indexOf('+') > 0) {//多条件传入查询界面//vd_vsid@vd_id+vd_class@vd_class
+		    			   this.openQueryUrl(record);
+		    		   } else {
+		    			   this.openUrl(record);
+		    		   }
+		    	   }
+	    	   }
+	       }, 
+	       openUrl: function(record) {
+	    	   var me = this, value = record.data[keyField];
+	    	   var formCondition = keyField + "IS" + value;
+	    	   if(caller == 'BOMStep'){
+	    		   var valuePro = record.data['pr_id'];
+	    		   var valueCraft = record.data['cr_code'];
+	    		   var valueStep = record.data['cd_stepcode'];
+	    		   if(value == null || value == 0 || value == '0'){
+	    			   formCondition = 'pr_id' + "IS" + valuePro + ' and cr_code' + "IS'"+ valueCraft +"'"+' and cd_stepcode' + "IS'"+ valueStep +"'";
+	    		   }else{
+	    			   formCondition = 'pr_id' + "IS" + valuePro +' and cr_code' + "IS'"+ valueCraft +"'"+' and '+ keyField + "IS" + value +' and cd_stepcode' + "IS'"+ valueStep +"'";
+	    		   }
+	    	   }
+	    	   if(caller =='saleSnRule'){
+	    		   formCondition = keyField + "IS" + "'"+value+"' and sd_prodcode IS '"+record.data['sd_prodcode']+"'";
+	    	   }
+	    	   var gridCondition = pfField + "IS" + value;
+	    	   var newmaster = record.data['CURRENTMASTER'];
+	    	   if(!Ext.isEmpty(pfField) && pfField.indexOf('+') > -1) {//多条件传入维护界面//vd_vsid@vd_id+vd_class@vd_class
+	    		   var arr = pfField.split('+'),ff = [],k = [];
+	    		   Ext.Array.each(arr, function(r){
+	    			   ff = r.split('@');
+	    			   k.push(ff[0] + 'IS\'' + record.get(ff[1]) + '\'');
+	    		   });
+	    		   gridCondition = k.join(' AND ');
+	    	   }
+	    	   var panelId = caller + keyField + "_" + value + gridCondition;
+	    	   var panel = Ext.getCmp(panelId); 
+	    	   var main = parent.Ext.getCmp("content-panel");
+	    	   if(!main){
+	    		   main = parent.parent.Ext.getCmp("content-panel");
+	    	   }
+	    	   if(!panel){ 
+	    		   var title = "";
+	    		   if (value.toString().length>4) {
+	    			   title = value.toString().substring(value.toString().length-4);	
+	    		   } else {
+	    			   title = value;
+	    		   }
+	    		   var myurl = '';
+	    		   if(me.BaseUtil.contains(url, '?', true)){
+	    			   myurl = url + '&formCondition='+formCondition+'&gridCondition='+gridCondition;
+	    		   } else {
+	    			   myurl = url + '?formCondition='+formCondition+'&gridCondition='+gridCondition;
+	    		   }
+	    		   myurl += "&datalistId=" + main.getActiveTab().id;
+	    		   if( newmaster ){
+//	    			   myurl += "&newMaster=" + newmaster;
+	    			   var currentMaster = parent.window.sob;
+	    			   if ( currentMaster && currentMaster != newmaster) {// 与当前账套不一致
+	    				   me.openModalWin(newmaster, currentMaster, myurl);return;
+	    			   }
+	    		   }
+	    		   main.getActiveTab().currentStore = me.getCurrentStore(value);//用于单据翻页
+	    		   main.getActiveTab().currentRecord=record;
+	    		   if(main._mobile) {
+	    			   main.addPanel(me.BaseUtil.getActiveTab().title+'('+title+')', myurl, panelId);
+	    		   } else {
+	    			   panel = {       
+	    					   title : me.BaseUtil.getActiveTab().title+'('+title+')',
+	    					   tag : 'iframe',
+	    					   tabConfig:{tooltip:me.BaseUtil.getActiveTab().tabConfig.tooltip+'('+keyField + "=" + value+')'},
+	    					   border : false,
+	    					   layout : 'fit',
+	    					   iconCls : 'x-tree-icon-tab-tab1',
+	    					   html : '<iframe id="iframe_maindetail_'+caller+"_"+value+'" src="' + myurl + '" height="100%" width="100%" frameborder="0" style="border-width: 0px;padding: 0px;" scrolling="auto"></iframe>',
+	    					   closable : true,
+	    					   listeners : {
+	    						   close : function(){
+	    							   if(!main){
+	    								   main = parent.parent.Ext.getCmp("content-panel");
+	    							   }
+	    							   main.setActiveTab(main.getActiveTab().id); 
+	    						   }
+	    					   } 
+	    			   };
+	    			   this.openTab(panel, panelId);
+	    		   }
+	    	   }else{ 
+	    		   main.setActiveTab(panel); 
+	    	   }
+	       },
+	       openQueryUrl: function(record) {
+	    	   var me = this, arr = keyField.split('+'),ff = [],k = [];//vd_vsid@vd_id+vd_class@vd_class
+	    	   Ext.Array.each(arr, function(r){
+	    		   ff = r.split('@');
+	    		   var val = record.get(ff[1]);
+	    		   if(val instanceof Date)
+	    			   val = Ext.Date.format(val, 'Y-m-d');
+	    		   k.push(ff[0] + '=' + val);
+	    	   });
+	    	   var myurl = k.join('&');
+	    	   var panelId = caller +  "_" + myurl;
+	    	   var panel = Ext.getCmp(panelId); 
+	    	   var main = parent.Ext.getCmp("content-panel");
+	    	   if(!main){
+	    		   main = parent.parent.Ext.getCmp("content-panel");
+	    	   }
+	    	   if(!panel){ 
+	    		   var title = me.BaseUtil.getActiveTab().title + '-查询';
+	    		   if(contains(url, '?', true)){
+	    			   myurl = url + '&' + myurl;
+	    		   } else {
+	    			   myurl = url + '?' + myurl;
+	    		   }
+	    		   if (main._mobile) {
+	    			   main.addPanel(title, myurl, panelId);
+	    		   } else {
+	    			   panel = {       
+	    					   title : title,
+	    					   tag : 'iframe',
+	    					   tabConfig: {tooltip: title},
+	    					   border : false,
+	    					   layout : 'fit',
+	    					   iconCls : 'x-tree-icon-tab-tab1',
+	    					   html : '<iframe src="' + myurl + '" height="100%" width="100%" frameborder="0" style="border-width: 0px;padding: 0px;" scrolling="auto"></iframe>',
+	    					   closable : true,
+	    					   listeners : {
+	    						   close : function(){
+	    							   if(!main){
+	    								   main = parent.parent.Ext.getCmp("content-panel");
+	    							   }
+	    							   main.setActiveTab(main.getActiveTab().id); 
+	    						   }
+	    					   } 
+	    			   };
+	    			   this.openTab(panel, panelId);
+	    		   }
+	    	   } else { 
+	    		   main.setActiveTab(panel); 
+	    	   }
+	       },
+	       openTab : function (panel,id){ 
+	    	   var o = (typeof panel == "string" ? panel : id || panel.id); 
+	    	   var main = parent.Ext.getCmp("content-panel"); 
+	    	   /*var tab = main.getComponent(o); */
+	    	   if(!main) {
+	    		   main =parent.parent.Ext.getCmp("content-panel"); 
+	    	   }
+	    	   var tab = main.getComponent(o); 
+	    	   if (tab) { 
+	    		   main.setActiveTab(tab); 
+	    	   } else if(typeof panel!="string"){ 
+	    		   panel.id = o; 
+	    		   var p = main.add(panel); 
+	    		   main.setActiveTab(p); 
+	    	   } 
+	       },
+	       openModalWin: function(master, current, url) {
+	    	   if (parent.Ext) {
+	    		   Ext.Ajax.request({
+	    			   url: basePath + 'common/changeMaster.action',
+	    			   params: {
+	    				   to: master
+	    			   },
+	    			   callback: function(opt, s, r) {
+	    				   if (s) {
+	    					   var win = parent.Ext.create('Ext.Window', {
+	    						   width: '100%',
+	    						   height: '100%',
+	    						   draggable: false,
+	    						   closable: false,
+	    						   modal: true,
+	    						   id:'modalwindow',
+	    						   historyMaster:current,
+	    						   title: '创建到账套' + master + '的临时会话',
+	    						   html : '<iframe src="' + url + '" height="100%" width="100%" frameborder="0" style="border-width: 0px;padding: 0px;" scrolling="auto"></iframe>',
+	    						   buttonAlign: 'center',
+	    						   buttons: [{
+	    							   text: $I18N.common.button.erpCloseButton,
+	    							   cls: 'x-btn-blue',
+	    							   id: 'close',
+	    							   handler: function(b) {
+	    								   Ext.Ajax.request({
+	    									   url: basePath + 'common/changeMaster.action',
+	    									   params: {
+	    										   to: current
+	    									   },
+	    									   callback: function(opt, s, r) {
+	    										   if (s) {
+	    											   b.up('window').close();
+	    										   } else {
+	    											   alert('切换到原账套失败!');
+	    										   }
+	    									   }
+	    								   });
+	    							   }
+	    						   }]
+	    					   });
+	    					   win.show();
+	    				   } else {
+	    					   alert('无法创建到账套' + master + '的临时会话!');
+	    				   }
+	    			   }
+	    		   });
+	    	   }
+	       },
+	       getCurrentStore: function(value){
+	    	   var grid = Ext.getCmp('grid');
+	    	   var items = grid.store.data.items;
+	    	   var array = new Array();
+	    	   var o = null;
+	    	   Ext.each(items, function(item, index){
+	    		   o = new Object();
+	    		   o.selected = false;
+	    		   if(index == 0){
+	    			   o.prev = null;
+	    		   } else {
+	    			   o.prev = items[index-1].data[keyField];
+	    		   }
+	    		   if(index == items.length - 1){
+	    			   o.next = null;
+	    		   } else {
+	    			   o.next = items[index+1].data[keyField];
+	    		   }
+	    		   var v = item.data[keyField];
+	    		   o.value = v;
+	    		   if(v == value)
+	    			   o.selected = true;
+	    		   array.push(o);
+	    	   });
+	    	   return array;
+	       },
+	       showSearchListWin: function(){
+	    	   var me = this, win = this.searchWin;
+	    	   if (!win){
+	    		   win = this.searchWin = Ext.create('Ext.window.Window', {
+	    			   title: '高级查询',
+	    			   height: screen.height*0.7*0.8,
+	    			   width: screen.width*0.7*0.6,
+	    			   maximizable : true,
+	    			   closable: false,
+	    			   buttonAlign : 'center',
+	    			   layout : 'border',
+	    			   bodyStyle: 'background:#f1f1f1;',
+	    			   tools: [{
+	    				   type: 'close',
+	    				   handler: function(e, el, header, tool){
+	    					   tool.ownerCt.ownerCt.down('grid').setEffectData();//保留已选择的条件
+	    					   tool.ownerCt.ownerCt.hide();
+	    				   }
+	    			   }],
+	    			   items: [{
+	    				   xtype: 'form',
+	    				   region: 'north',
+	    				   layout: 'column',
+	    				   bodyStyle: 'background:#f1f1f1;',
+	    				   maxHeight: 100,
+	    				   buttonAlign: 'center',
+	    				   buttons: [{
+	    					   name: 'query',
+	    					   id: 'query',
+	    					   text: $I18N.common.button.erpQueryButton,
+	    					   iconCls: 'x-button-icon-query',
+	    					   cls: 'x-btn-gray',
+	    					   handler: function(btn){
+	    						   Ext.getCmp('grid').getCount(caller);
+	    						   btn.ownerCt.ownerCt.ownerCt.hide();
+	    					   }
+	    				   },{
+	    					   cls: 'x-btn-gray',
+	    					   text: '清空',
+	    					   handler: function(btn){
+	    						   btn.ownerCt.ownerCt.ownerCt.down('grid').store.loadData([{},{},{},{},{},{},{},{},{},{}]);
+	    						   Ext.getCmp('grid').getCount(caller);
+	    					   }
+	    				   },{
+	    					   cls: 'x-btn-gray',
+	    					   text: '关闭',
+	    					   handler: function(btn){
+	    						   btn.ownerCt.ownerCt.ownerCt.down('grid').setEffectData();
+	    						   btn.ownerCt.ownerCt.ownerCt.hide();
+	    					   }
+	    				   },{
+	    					   xtype: 'radio',
+	    					   name: 'separator',
+	    					   boxLabel: '与',
+	    					   checked: true,
+	    					   inputValue: 'AND',
+	    					   getCheckValue: function(){
+	    						   return this.checked ? 'AND' : 'OR';
+	    					   }
+	    				   },{
+	    					   xtype: 'radio',
+	    					   name: 'separator',
+	    					   boxLabel: '或',
+	    					   inputValue: 'OR'
+	    				   }]
+	    			   }, me.getSearchListGrid(), me.getTemplateForm() ]
+	    		   });
+	    		   Ext.getCmp('grid').searchGrid = win.down('grid');
+	    		   Ext.getCmp('grid').tempalteForm = win.down('form[name=template]');
+	    		   this.getTemplates(caller);
+	    	   }
+	    	   win.show();
+	    	   win.down('grid').loadData();
+	       },
+	       showCustomizeWin:function(){
+	    	   var me = this, win = this.CustomizeWin, grid = Ext.getCmp('grid');
+	    	   if(!win){
+	    		   var ablecolumns=new Array(),unselectcolumns=grid.basecolumns;
+	    		   Ext.Array.each(grid.columns,function(item){
+	    			   if(item.text && item.text.indexOf('&#160')<0){
+	    				   ablecolumns.push(item);
+	    			   }
+	    		   });
+	    		   unselectcolumns.splice(0,ablecolumns.length);
+	    		   this.CustomizeWin=win = Ext.create('Ext.window.Window', {
+	    			   title: '<div align="center">个性设置</div>',
+	    			   height: screen.height*0.7,
+	    			   width: screen.width*0.7*0.9,
+	    			   layout:'border',
+	    			   closeAction:'hide',
+	    			   items:[{
+	    				   region:'center',
+	    				   layout:{
+	    					   type: 'hbox',
+	    					   align: 'stretch',
+	    					   padding: 5
+	    				   },
+	    				   defaults     : { flex : 1 },
+	    				   items:[{
+	    					   xtype:'grid',
+	    					   multiSelect: true,
+	    					   id: 'fromgrid',
+	    					   title:'可选项',
+	    					   flex:0.7,
+	    					   cls: 'custom-grid',	    		
+	    					   store:Ext.create('Ext.data.Store', {
+	    						   fields: [{name:'dataIndex',type:'string'},{name:'text',type:'string'},{name:'width',type:'number'}],
+	    						   data: unselectcolumns,
+	    						   filterOnLoad: false 
+	    					   }),
+	    					   plugins: [Ext.create('erp.view.core.grid.HeaderFilter')],
+	    					   viewConfig: {
+	    						   plugins: {
+	    							   ptype: 'gridviewdragdrop',
+	    							   dragGroup: 'togrid',
+	    							   dropGroup: 'togrid'
+	    						   }	    					
+	    					   },
+	    					   stripeRows: false,
+	    					   columnLines:true,
+	    					   columns:[{
+	    						   dataIndex:'dataIndex',
+	    						   cls :"x-grid-header-1",
+	    						   text:'字段名称',
+	    						   width:120,
+	    						   filter: {
+	    							   xtype : 'textfield'
+	    						   }
+	    					   },{
+	    						   dataIndex:'text',
+	    						   text:'描述',
+	    						   cls :"x-grid-header-1",
+	    						   flex:1,
+	    						   filter: {
+	    							   xtype : 'textfield'
+	    						   }
+	    					   },{
+	    						   dataIndex:'width',
+	    						   text:'宽度',
+	    						   width:60,
+	    						   cls :"x-grid-header-1",
+	    						   align:'right',
+	    						   editor: {
+	    							   xtype: 'numberfield',
+	    							   format:0
+	    						   },
+	    						   filter: {
+	    							   xtype : 'textfield'
+	    						   }
+	    					   }]
+	    				   },{
+	    					   xtype:'grid',
+	    					   multiSelect: true,
+	    					   id: 'togrid',
+	    					   stripeRows: true,
+	    					   columnLines:true,
+	    					   title:'显示项',
+	    					   store:Ext.create('Ext.data.Store', {
+	    						   fields: [{name:'dataIndex',type:'string'},{name:'text',type:'string'},{name:'width',type:'number'},
+	    						            {name:'orderby',type:'string'},{name:'priority',type:'string'}],
+	    						            data:ablecolumns,
+	    						            filterOnLoad: false 
+	    					   }),
+	    					   necessaryField:'dataIndex',
+	    					   plugins: [Ext.create('erp.view.core.grid.HeaderFilter'),
+	    					             Ext.create('Ext.grid.plugin.CellEditing', {
+	    					            	 clicksToEdit: 1
+	    					             })],
+	    					             viewConfig: {
+	    					            	 plugins: {
+	    					            		 ptype: 'gridviewdragdrop',
+	    					            		 dragGroup: 'togrid',
+	    					            		 dropGroup: 'togrid'
+	    					            	 }
+	    					             },
+	    					             columns:[{
+	    					            	 dataIndex:'dataIndex',
+	    					            	 text:'字段名称',
+	    					            	 cls :"x-grid-header-1",
+	    					            	 width:120,
+	    					            	 filter: {
+	    					            		 xtype : 'textfield'
+	    					            	 }
+	    					             },{
+	    					            	 dataIndex:'text',
+	    					            	 text:'描述',
+	    					            	 cls :"x-grid-header-1",
+	    					            	 flex:1,
+	    					            	 filter: {
+	    					            		 xtype : 'textfield'
+	    					            	 }
+	    					             },{
+	    					            	 dataIndex:'width',
+	    					            	 text:'宽度',
+	    					            	 width:60,
+	    					            	 xtype:'numbercolumn',
+	    					            	 align:'right',
+	    					            	 cls :"x-grid-header-1",
+	    					            	 filter: {
+	    					            		 xtype : 'textfield'
+	    					            	 },
+	    					            	 editable:true,
+	    					            	 format: '0',
+	    					            	 editor: {
+	    					            		 xtype: 'numberfield',
+	    					            		 hideTrigger: true
+	    					            	 },
+	    					             },
+	    					             {
+	    					            	 dataIndex:'orderby',
+	    					            	 text:'排序',
+	    					            	 width:60,
+	    					            	 xtype:'combocolumn',
+	    					            	 cls :"x-grid-header-1",
+	    					            	 filter: {
+	    					            		 xtype : 'textfield'
+	    					            	 },
+	    					            	 renderer:function(val){
+	    					            		 if(val=='ASC'){
+	    					            			 return '<img src="' + basePath + 'resource/images/16/up.png">' + 
+	    					            			 '<span style="color:red;padding-left:2px">升序</span>';
+	    					            		 } else if(val=='DESC') {
+	    					            			 return '<img src="' + basePath + 'resource/images/16/down.png">' + 
+	    					            			 '<span style="color:red;padding-left:2px">降序</span>';
+	    					            		 }
+	    					            	 },
+	    					            	editor:{
+	    					            			 xtype:'combo',
+	    					            			 queryMode: 'local',
+	    					            			 displayField: 'display',
+	    					            			 valueField: 'value',
+	    					            			 store:Ext.create('Ext.data.Store', {
+	    					            				 fields: ['value', 'display'],
+	    					            				 data : [{value:"ASC", display:"升序"},
+	    					            				         {value:"DESC", display:"降序"}]
+	    					            			 })
+	    					            		 }
+	    					            	 },{
+	    					            		 dataIndex:'priority',
+	    					            		 text:'优先级',
+	    					            		 width:60,
+	    					            		 align:'right',
+	    					            		 cls :"x-grid-header-1",
+	    					            		 filter: {
+	    					            			 xtype : 'textfield'
+	    					            		 },
+	    					            		 editor:{
+	    					            			 xtype:'combo',
+	    					            			 queryMode: 'local',
+	    					            			 displayField: 'display',
+	    					            			 valueField: 'value',
+	    					            			 store:Ext.create('Ext.data.Store', {
+	    					            				 fields: ['value', 'display'],
+	    					            				 data : [{value:"1", display:"1"},
+	    					            				         {value:"2", display:"2"},
+	    					            				         {value:"3", display:"3"},
+	    					            				         {value:"4", display:"4"},
+	    					            				         {value:"5", display:"5"},
+	    					            				         {value:"6", display:"6"},
+	    					            				         {value:"7", display:"7"},
+	    					            				         {value:"8", display:"8"},
+	    					            				         {value:"9", display:"9"},]
+	    					            			 })
+	    					            		 }
+	    					            	 }] 
+
+	    					             }]
+	    				   }],
+	    				   buttonAlign:'center',
+	    				   buttons:['->',{
+	    					   text:'重置',
+	    					   scope:this,
+	    					   handler:function(btn){
+	    						   warnMsg('重置列表将还原配置,确认重置吗?', function(btn){
+	    								if(btn == 'yes'){
+	    									Ext.Ajax.request({
+	    										url : basePath + 'common/resetEmpsDataListDetails.action?_noc=1',
+	    										params: {
+	    											caller:caller
+	    										},
+	    										method : 'post',
+	    										callback : function(options,success,response){
+	    											var localJson = new Ext.decode(response.responseText);
+	    											if(localJson.success){
+	    												showMessage('提示','重置成功!',1000);
+	    													window.location.reload();
+	    											} else {
+	    												if(localJson.exceptionInfo){
+	    													var str = localJson.exceptionInfo;
+	    													if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){//特殊情况:操作成功,但是出现警告,允许刷新页面
+	    														str = str.replace('AFTERSUCCESS', '');
+	    														showError(str);
+	    													} else {
+	    														showError(str);return;
+	    													}
+	    												}
+	    											}
+	    										}
+	    									});
+	    								}
+	    							});
+	    					   }
+	    				    },{
+	    					   style:'margin-left:5px;',
+	    					   text:'保存',
+	    					   scope:this,
+	    					   handler:function(btn){
+	    						   var grid=Ext.getCmp('togrid'),fromgrid=Ext.getCmp('fromgrid');
+	    						   var jsonGridData = new Array(),datas=new Array();
+	    							var form = Ext.getCmp('form');
+	    							grid.getStore().each(function(item){//将grid里面各行的数据获取并拼成jsonGridData
+	    								var data = {
+	    								  dde_field:item.data.dataIndex,
+	    								  dde_width:item.data.width,
+	    								  dde_orderby:item.data.orderby,
+	    								  dde_priority:item.data.priority
+	    								}; 
+	    								item.dirty=false;
+                                    	jsonGridData.push(Ext.JSON.encode(data));
+                                    	datas.push(item.data);
+	    							});
+	    						   Ext.Ajax.request({
+	    								url : basePath + 'common/saveEmpsDataListDetails.action?_noc=1',
+	    								params : {
+	    									caller:caller,
+	    									data:unescape(jsonGridData.toString())
+	    								},
+	    								method : 'post',
+	    								callback : function(options,success,response){
+	    									var localJson = new Ext.decode(response.responseText);
+	    									if(localJson.success){
+	    										showMessage('提示','保存成功!',1000);
+	    										window.location.reload();
+	    									}
+	    								}
+
+	    							});
+	    						   
+	    					   }
+	    				   },{
+	    					   style:'margin-left:5px;',
+	    					   text:'关闭',
+	    					   handler:function(btn){
+	    						   btn.ownerCt.ownerCt.hide();
+	    					   }
+	    				   },'->']
+
+	    			   });
+	    		   }
+	    		   win.show();
+	    	   },
+	    	   getFilterCondition: function(){
+	    		   var fields = Ext.getCmp('grid').plugins[0].fields;
+	    		   var items = new Array();
+	    		   Ext.each(Ext.Object.getKeys(fields), function(key){
+	    			   var item = fields[key];
+	    			   if(item.value != null && item.value.toString().trim() != ''){
+	    				   items.push({
+	    					   xtype: item.xtype,
+	    					   id: item.itemId,
+	    					   fieldLabel: item.fieldLabel,
+	    					   fieldStyle: item.fieldStyle,
+	    					   value: item.value,
+	    					   columnWidth: 0.5,
+	    					   cls: 'form-field-border',
+	    					   listeners: {
+	    						   change: function(f){
+	    							   Ext.getCmp(item.id).setValue(f.value);
+	    						   }
+	    					   }
+	    				   });
+	    			   }
+	    		   });
+	    		   return items;
+	    	   },
+	    	   getGridColumns : function() {
+	    		   var grid = Ext.getCmp('grid'), columns = grid.headerCt.getGridColumns(), data = [];
+	    		   Ext.each(columns, function(){
+	    			   if(this.dataIndex && this.getWidth() > 0) {
+	    				   data.push({
+	    					   display : this.text,
+	    					   value : this.text,
+	    					   column : this
+	    				   });
+	    			   }
+	    		   });
+	    		   return data;
+	    	   },
+	    	   getSearchListGrid: function(){
+	    		   var data = this.getGridColumns();
+	    		   var grid = Ext.create('Ext.grid.Panel', {
+	    			   maxHeight: 350,
+	    			   region: 'center',
+	    			   store: Ext.create('Ext.data.Store', {
+	    				   fields:[{
+	    					   name: 'sl_label',
+	    					   type: 'string'
+	    				   },{
+	    					   name: 'sl_field',
+	    					   type: 'string'
+	    				   },{
+	    					   name: 'sl_type',
+	    					   type: 'string'
+	    				   },{
+	    					   name: 'sl_dbfind',
+	    					   type: 'string'
+	    				   },{
+	    					   name: 'union',
+	    					   type: 'string'
+	    				   },{
+	    					   name: 'value'
+	    				   }],
+	    				   data: []
+	    			   }),
+	    			   columns: [{
+	    				   text: '条件',
+	    				   flex: 2,
+	    				   dataIndex: 'sl_label',
+	    				   editor: {
+	    					   xtype: 'combo',
+	    					   store : Ext.create('Ext.data.Store', {
+	    						   fields : [ 'display', 'value', 'column' ],
+	    						   data : data
+	    					   }),
+	    					   editable: false,
+	    					   displayField : 'display',
+	    					   valueField : 'value',
+	    					   queryMode : 'local'
+	    				   },
+	    				   renderer : function(val, meta, record, x, y, store, view) {
+	    					   if (val) {
+	    						   var column = view.ownerCt.headerCt.getHeaderAtIndex(y);
+	    						   if(column && typeof column.getEditor != 'undefined') {
+	    							   var	editor = column.getEditor(record);
+	    							   if (editor && editor.lastSelection.length > 0) {
+	    								   var cm = editor.lastSelection[0].get('column'),
+	    								   field = cm.dataIndex;
+	    								   if (record.get('sl_field') != field)
+	    									   record.set('sl_field', field);
+	    								   var t = 'S';
+	    								   if(cm.xtype == 'datecolumn' || cm.xtype == 'datetimecolumn') {
+	    									   t = 'D';
+	    								   } else if(cm.xtype == 'numbercolumn') {
+	    									   t = 'N';
+	    								   }
+	    								   if (record.get('sl_type') != t)
+	    									   record.set('sl_type', t);
+	    							   }
+	    						   }
+	    					   } else {
+	    						   if (record.get('sl_field')) {
+	    							   record.set('sl_field', null);
+	    						   }
+	    					   }
+	    					   return val;
+	    				   },
+	    				   processEvent : function(type, view, cell, recordIndex, cellIndex, e) {
+	    					   if (type == 'click' || type == 'dbclick') {
+	    						   return true;
+	    					   }
+	    					   return false;
+	    				   }
+	    			   },{
+	    				   text: '',
+	    				   hidden: true,
+	    				   dataIndex: 'sl_field',
+	    				   processEvent : function(type, view, cell, recordIndex, cellIndex, e) {
+	    					   return false;
+	    				   }
+	    			   },{
+	    				   text: '',
+	    				   hidden: true,
+	    				   dataIndex: 'sl_type',
+	    				   processEvent : function(type, view, cell, recordIndex, cellIndex, e) {
+	    					   return false;
+	    				   }
+	    			   },{
+	    				   text: '关系',
+	    				   flex: 1,
+	    				   dataIndex: 'union',
+	    				   xtype:'combocolumn',
+	    				   editor: {
+	    					   xtype: 'combo',
+	    					   store: Ext.create('Ext.data.Store', {
+	    						   fields: ['display', 'value'],
+	    						   data : [{"display": '等于', "value": '='},
+	    						           {"display": '大于', "value": '>'},
+	    						           {"display": '大于等于', "value": '>='},
+	    						           {"display": '小于', "value": '<'},
+	    						           {"display": '小于等于', "value": '<='},
+	    						           {"display": '不等于', "value": '<>'},
+	    						           {"display": '介于', "value": 'Between And'},
+	    						           {"display": '包含', "value": 'like'},
+	    						           {"display": '不包含', "value": 'not like'},
+	    						           {"display": '开头是', "value": 'begin like'},
+	    						           {"display": '开头不是', "value": 'begin not like'},
+	    						           {"display": '结尾是', "value": 'end like'},
+	    						           {"display": '结尾不是', "value": 'end not like'}]
+	    					   }),
+	    					   displayField: 'display',
+	    					   valueField: 'value',
+	    					   queryMode: 'local',
+	    					   editable: false,
+	    					   value: 'like'
+	    				   },
+	    				  /* renderer : function(v) {
+	    					   var r = v;
+	    					   switch(v) {
+	    					   case 'like':
+	    						   r = 'Like';break;
+	    					   case '=':
+	    						   r = '等于';break;
+	    					   case '>':
+	    						   r = '大于';break;
+	    					   case '>=':
+	    						   r = '大于等于';break;
+	    					   case '<':
+	    						   r = '小于';break;
+	    					   case '<=':
+	    						   r = '小于等于';break;
+	    					   case '<>':
+	    						   r = '不等于';break;
+	    					   case 'Between And':
+	    						   r = '介于';break;
+	    					   }
+	    					   return r;
+	    				   },*/
+	    				   processEvent : function(type, view, cell, recordIndex, cellIndex, e) {
+	    					   if (type == 'click' || type == 'dbclick') {
+	    						   return true;
+	    					   }
+	    					   return false;
+	    				   }
+	    			   },{
+	    				   text: '值',
+	    				   flex: 3,
+	    				   dataIndex: 'value',
+	    				   renderer: function(val){
+	    					   if(Ext.isDate(val)){
+	    						   return Ext.Date.format(val, 'Y-m-d');
+	    					   }
+	    					   return val;
+	    				   },
+	    				   processEvent : function(type, view, cell, recordIndex, cellIndex, e) {
+	    					   if (type == 'click' || type == 'dbclick') {
+	    						   var s = view.ownerCt.selModel, m = s.getSelection(), n = [];
+	    						   Ext.Array.each(m, function(){
+	    							   n.push(this);
+	    						   });
+	    						   n.push(view.ownerCt.store.getAt(recordIndex));
+	    						   s.select(n);
+	    						   return true;
+	    					   }
+	    					   return false;
+	    				   }
+	    			   }],
+	    			   columnLines: true,
+	    			   plugins: Ext.create('Ext.grid.plugin.CellEditing', {
+	    				   clicksToEdit: 1,
+	    				   listeners: {
+	    					   beforeedit: function(e){
+	    						   if(e.field == 'value'){
+	    							   var record = e.record;
+	    							   var column = e.column;
+	    							   if(record.data['union'] == null || record.data['union'] == ''){
+	    								   record.set('union', 'like');
+	    							   }
+	    							   var f = record.data['sl_field'];
+	    							   switch(record.data['sl_type']){
+	    							   case 'D':
+	    								   switch(record.data['union']){
+	    								   case 'Between And':
+	    									   column.setEditor(new erp.view.core.form.FtDateField({
+	    										   id: f,
+	    										   name: f
+	    									   }));break;
+	    								   default:
+	    									   column.setEditor(new Ext.form.field.Date({
+	    										   id: f,
+	    										   name: f
+	    									   }));break;
+	    								   }
+	    								   break;
+	    							   case 'S':
+	    								   switch(record.data['union']){
+	    								   case 'Between And':
+	    									   column.setEditor(new erp.view.core.form.FtField({
+	    										   id: f,
+	    										   name: f,
+	    										   value: e.value
+	    									   }));break;
+	    								   default:
+	    									   column.setEditor(new Ext.form.field.Text({
+	    										   id: f,
+	    										   name: f
+	    									   }));break;
+	    								   }
+	    								   break;
+	    							   case 'N':
+	    								   switch(record.data['union']){
+	    								   case 'Between And':
+	    									   column.setEditor(new erp.view.core.form.FtNumberField({
+	    										   id: f,
+	    										   name: f
+	    									   }));break;
+	    								   default:
+	    									   column.setEditor(new Ext.form.field.Number({
+	    										   id: f,
+	    										   name: f
+	    									   }));break;
+	    								   }
+	    								   break;
+	    							   case 'T':
+	    								   column.dbfind = record.get('sl_dbfind');
+	    								   switch(record.data['union']){
+	    								   case 'Between And':
+	    									   column.setEditor(new erp.view.core.form.FtFindField({
+	    										   id: f,
+	    										   name: f
+	    									   }));break;
+	    								   default:
+	    									   column.setEditor(new erp.view.core.trigger.DbfindTrigger({
+	    										   id: f,
+	    										   name: f
+	    									   }));break;
+	    								   }
+	    								   break;
+	    							   default:
+	    								   column.setEditor(null);
+	    							   }
+	    						   }
+	    					   }
+	    				   }
+	    			   }),
+	    			   selModel: Ext.create('Ext.selection.CheckboxModel',{
+
+	    			   }),
+	    			   setEffectData: function(){
+	    				   var me = this;
+	    				   var datas = new Array();
+	    				   Ext.each(me.selModel.getSelection(), function(item){
+	    					   var data = item.data;
+	    					   if(!Ext.isEmpty(data.sl_label) && !Ext.isEmpty(data.union) && !Ext.isEmpty(data.value)){
+	    						   datas.push(data);
+	    					   }
+	    				   });
+	    				   me.effectdata = datas;
+	    			   },
+	    			   getEffectData: function(){
+	    				   return this.effectdata || new Array();
+	    			   },
+	    			   loadData: function(){
+	    				   if(!this.effectdata) {
+	    					   this.store.add([{},{},{},{},{},{},{},{},{},{}]);
+	    				   }
+	    			   },
+	    			   /**
+	    			    * 将数据拼成Sql条件语句
+	    			    */
+	    			   getCondition: function(){
+	    				   this.setEffectData();
+	    				   var condition = '';
+	    				   var separator = this.up('window').down('form').down('radio').getCheckValue();
+	    				   Ext.each(this.effectdata, function(data){
+	    					   if(data.union == 'Between And'){
+	    						   var v1 = data.value.split('~')[0];
+	    						   var v2 = data.value.split('~')[1];
+	    						   if(data.sl_type == 'D'){
+	    							   if(condition == ''){
+	    								   condition = '(' + data.sl_field + " BETWEEN to_date('" + v1 + " 00:00:00','yyyy-MM-dd HH24:mi:ss') AND to_date('" 
+	    								   + v2 + " 23:59:59','yyyy-MM-dd HH24:mi:ss')" + ') ';
+	    							   } else {
+	    								   condition += ' ' + separator + ' (' + data.sl_field + " BETWEEN to_date('" + v1 + " 00:00:00','yyyy-MM-dd HH24:mi:ss') AND to_date('" 
+	    								   + v2 + " 23:59:59','yyyy-MM-dd HH24:mi:ss')" + ') ';
+	    							   }
+	    						   } else if(data.sl_type == 'N'){
+	    							   if(condition == ''){
+	    								   condition = '(' + data.sl_field + " BETWEEN " + v1 + ' AND ' + v2 + ') ';
+	    							   } else {
+	    								   condition += ' ' + separator + ' (' + data.sl_field + " BETWEEN " + v1 + ' AND ' + v2 + ') ';
+	    							   }
+	    						   } else{
+	    							   if(condition == ''){
+	    								   condition = '(' + data.sl_field + " BETWEEN '" + v1 + "' AND '" + v2 + "') ";
+	    							   } else {
+	    								   condition += ' ' + separator + ' (' + data.sl_field + " BETWEEN '" + v1 + "' AND '" + v2 + "') ";
+	    							   }
+	    						   }
+	    					   } else {
+	    						   if(data.sl_type == 'D'){
+	    							   var v = data.value, field = data.sl_field;
+	    							   if(Ext.isDate(v)) {
+	    								   v = Ext.Date.format(v, 'Y-m-d');
+	    							   }
+	    							   if(data.union == '<' || data.union == '<=' || data.union == '>' || data.union == '>='){
+	    								   v = "to_date('" + v + "','yyyy-MM-dd')";
+	    							   }else {
+	    								   v = Ext.Date.format(data.value, 'Ymd');
+	    								   field = "to_char(" + field + ",'yyyymmdd')";
+	    							   }
+	    							   if(condition == ''){
+	    								   condition = '(' + field + data.union + v + ') ';
+	    							   } else {
+	    								   condition += ' ' + separator +' (' + field + data.union + v + ') ';
+	    							   }
+	    						   } else {
+	    							   var v = data.value;
+	    							   if(data.union == 'like' || data.union=='not like'){
+	    								   v = " '%" + data.value + "%'";
+	    							   }else if(data.union =='begin like' || data.union =='begin not like'){
+	    								   v = " '" + data.value + "%'";
+	    								   data.union=data.union.substring(5);
+	    							   }else if(data.union =='end like' || data.union=='end not like'){
+	    								   v = " '%" + data.value + "'";
+	    								   data.union=data.union.substring(3);
+	    							   }else {
+	    								   v = " '" + data.value + "'";
+	    							   }
+	    							   if(condition == ''){
+	    								   condition = '(' + data.sl_field + " " + data.union + v + ") ";
+	    							   } else {
+	    								   condition += ' ' + separator +' (' + data.sl_field + " " + data.union + v + ") ";
+	    							   }
+	    						   }
+	    					   }
+	    				   });
+	    				   return condition;
+	    			   }
+	    		   });
+	    		   return grid;
+	    	   },
+	    	   getTemplateForm : function() {
+	    		   var me = this;
+	    		   return Ext.create('Ext.form.Panel', {
+	    			   minHeight : 150,
+	    			   region : 'south',
+	    			   layout : 'column',
+	    			   name : 'template',
+	    			   bodyStyle : 'background:#f1f2f5;',
+	    			   items : [{
+	    				   xtype : 'fieldcontainer',
+	    				   columnWidth : .75,
+	    				   defaults : {
+	    					   xtype : 'radio',
+	    					   flex : 1,
+	    					   margin : '5 0 5 15',
+	    					   labelAlign : 'right'
+	    				   },
+	    				   items : [{
+	    					   name : 'export-type',
+	    					   boxLabel : '全部列',
+	    					   checked : true
+	    				   }]
+	    			   }, {
+	    				   xtype : 'fieldcontainer',
+	    				   columnWidth : .25,
+	    				   items : [{
+	    					   xtype : 'button',
+	    					   cls : 'x-btn-gray',
+	    					   iconCls : 'x-button-icon-excel',
+	    					   flex : 1,
+	    					   margin : '15 0 5 0',
+	    					   width : 80,
+	    					   text : '导&nbsp;&nbsp;&nbsp;出',
+	    					   handler : function(b) {
+	    						   var grid = Ext.getCmp('grid'),
+	    						   tb = grid.down('erpDatalistToolbar'),
+	    						   r = b.ownerCt.ownerCt.down('radio[checked=true]');
+	    						   if (r.fields)
+	    							   tb.exportData(grid, b, r.boxLabel, r.fields);
+	    						   else
+	    							   tb.exportData(grid, b);
+	    					   }
+	    				   }
+	    				   //已存在个性化设置列功能
+	    				   /*,{
+	    					   xtype : 'button',
+	    					   cls : 'x-btn-gray',
+	    					   flex : 1,
+	    					   margin : '5 0 10 0',
+	    					   width : 80,
+	    					   text : '新建模板',
+	    					   handler : function(b, e) {
+	    						   var grid = Ext.getCmp('grid');
+	    						   me.addTemplate(grid);
+	    					   }
+	    				   }*/
+	    				   ]
+	    			   }]
+	    		   });
+	    	   },
+	    	  /* addTemplate : function(grid) {
+	    		   var me = this, panel = grid.templatePanel;
+	    		   if (!panel) {
+	    			   var columns = grid.headerCt.getGridColumns(), data = [];
+	    			   Ext.each(columns, function(){
+	    				   if(this.dataIndex && this.getWidth() > 0) {
+	    					   data.push({
+	    						   boxLabel : this.text,
+	    						   inputValue : this.dataIndex,
+	    						   checked : true
+	    					   });
+	    				   }
+	    			   });
+	    			   data.push({
+	    				   columnWidth : .8,
+	    				   labelWidth : 60,
+	    				   fieldLabel : '描述',
+	    				   name : 'desc',
+	    				   xtype : 'textfield',
+	    				   allowBlank : false,
+	    				   value : this.BaseUtil.getActiveTab().title + '(模板)-' + em_name 
+	    				   + '-' + Ext.Date.format(new Date(),'Ymd')
+	    			   });
+	    			   panel = grid.templatePanel = Ext.create('Ext.panel.Panel', {
+	    				   floating : true,
+	    				   shadow : 'frame',
+	    				   layout : 'column',
+	    				   width : 700,
+	    				   bodyStyle : 'background:#f1f2f5;z-index:9999;',
+	    				   defaults : {
+	    					   xtype : 'checkbox',
+	    					   margin : '5 5 15 15',
+	    					   columnWidth : .25
+	    				   },
+	    				   items : data,
+	    				   buttonAlign : 'center',
+	    				   buttons : [{
+	    					   text : '确认',
+	    					   handler : function(b) {
+	    						   var items = panel.query('checkbox[checked=true]'), fs = [];
+	    						   Ext.each(items, function(){
+	    							   fs.push(this.inputValue);
+	    						   });
+	    						   me.onTemplateAdd(panel, caller, fs.join(','), panel.down('textfield[name=desc]').value);
+	    					   }
+	    				   },{
+	    					   text : '取消',
+	    					   handler : function() {
+	    						   panel.hide();
+	    					   }
+	    				   }]
+	    			   });
+	    		   }
+	    		   panel.show();
+	    		   panel.center();
+	    	   },*/
+	    	   onTemplateAdd : function(panel, caller, fields, desc) {
+	    		   warnMsg('确定添加新模板:' + desc + '?', function(b){
+	    			   if (b == 'ok' || b == 'yes') {
+	    				   Ext.Ajax.request({
+	    					   url : basePath + 'common/template/save.action',
+	    					   params : {
+	    						   _noc : 1,
+	    						   caller : caller,
+	    						   fields : fields,
+	    						   desc : desc
+	    					   },
+	    					   callback : function(opt, s, res) {
+	    						   var r = Ext.decode(res.responseText);
+	    						   if (r.success) {
+	    							   alert('添加成功!');
+	    							   panel.hide();
+	    							   var form = Ext.getCmp('grid').tempalteForm;
+	    							   form.down('radio[value=true]').setValue(false);
+	    							   form.items.first().add({
+	    								   name : 'export-type',
+	    								   boxLabel : desc,
+	    								   fields : fields,
+	    								   checked : true
+	    							   });
+	    						   }
+	    					   }
+	    				   });
+	    			   }
+	    		   });
+	    	   },
+	    	   getTemplates : function(caller) {
+	    		   Ext.Ajax.request({
+	    			   url : basePath + 'common/getFieldsDatas.action',
+	    			   async: false,
+	    			   params: {
+	    				   caller: 'DataTemplate',
+	    				   fields: 'dt_desc,dt_fields',
+	    				   condition: 'dt_caller=\'' + caller + '\''
+	    			   },
+	    			   method : 'post',
+	    			   callback : function(opt, s, res){
+	    				   var r = new Ext.decode(res.responseText);
+	    				   if(r.exceptionInfo){
+	    					   showError(r.exceptionInfo);return;
+	    				   }
+	    				   if (r.success && r.data) {
+	    					   var f = [], dd = Ext.decode(r.data);
+	    					   if(dd.length > 0) {
+	    						   Ext.each(dd, function(){
+	    							   f.push({
+	    								   name : 'export-type',
+	    								   boxLabel : this.DT_DESC,
+	    								   fields : this.DT_FIELDS
+	    							   });
+	    						   });
+	    						   var form = Ext.getCmp('grid').tempalteForm;
+	    						   form.items.first().add(f);
+	    					   }
+	    				   }
+	    			   }
+	    		   });
+	    	   },
+	    	   indexOf: function(array, item, from) {
+	    		   if (supportsIndexOf) {
+	    			   return array.indexOf(item, from);
+	    		   }
+
+	    		   var i, length = array.length;
+
+	    		   for (i = (from < 0) ? Math.max(0, length + from) : from || 0; i < length; i++) {
+	    			   if (array[i] === item) {
+	    				   return i;
+	    			   }
+	    		   }
+
+	    		   return -1;
+	    	   },
+	       });

+ 539 - 0
WebContent/app/controller/common/Datalist2.js

@@ -0,0 +1,539 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.common.Datalist2', {
+    extend: 'Ext.app.Controller',
+    requires: ['erp.util.BaseUtil', 'erp.util.FormUtil', 'erp.util.RenderUtil'],
+    views:[
+     		'common.datalist.Viewport','common.datalist.GridPanel2','common.datalist.Toolbar','core.button.VastAudit','core.button.VastDelete',
+     		'core.button.VastPrint','core.button.VastReply','core.button.VastSubmit','core.button.ResAudit','core.form.FtField',
+     		'core.grid.TfColumn','core.grid.YnColumn','core.trigger.DbfindTrigger','core.form.FtDateField','core.form.FtFindField',
+     		'core.form.FtNumberField'
+     	],
+    init:function(){
+    	var me=this;
+        this.BaseUtil = Ext.create('erp.util.BaseUtil');
+        this.FormUtil = Ext.create('erp.util.FormUtil');
+    	this.control({
+    		'erpDatalistGridPanel2': { 
+    			//itemclick: this.onGridItemClick,
+    			/*afterrender:function(grid){
+    				if(Ext.isIE){
+    					document.body.attachEvent('onkeydown', function(){
+    						if(window.event.ctrlKey && window.event.keyCode == 67){//Ctrl + C
+    							var e = window.event;
+    							if(e.srcElement) {
+    								window.clipboardData.setData('text', e.srcElement.innerHTML);
+    							}
+    						}
+    					});
+    				} else {
+    					grid.getEl().dom.addEventListener("mouseover", function(e){
+        					if(e.ctrlKey){
+        						 var Contextvalue=e.target.textContent==""?e.target.value:e.target.textContent;
+        						 textarea_text = parent.document.getElementById("textarea_text");
+        						 textarea_text.value=Contextvalue;
+        					     textarea_text.focus();
+        					     textarea_text.select();
+        					}
+        		    	});
+    				}
+    			},*/
+    			itemdblclick:function(record){
+    				var grid=record.ownerCt;
+    				var data=grid.getSelectionModel().lastSelected.data;
+            		var s=grid.ur+'?formCondition='+grid.keyF+'IS'+data[grid.keyF];
+            		var html='<iframe width=100% height=100% src="'+s+'"/>';
+            		var win=new Ext.window.Window({
+        	    		height:400,
+        	    		width:800,
+        	    		modal:true,
+        	    		listeners : {
+    	    				close : function(){
+    	    					grid.getColumnsAndStore();
+    	    				}
+    	    			},
+        	    		html:html});
+            		win.show();
+    			}
+    		},
+    		'erpVastDeleteButton': {
+    			click: function(btn){
+    				var dlwin = new Ext.window.Window({
+   			    		id : 'dlwin',
+	   				    title: btn.text,
+	   				    height: "100%",
+	   				    width: "80%",
+	   				    maximizable : true,
+	   					buttonAlign : 'center',
+	   					layout : 'anchor',
+	   				    items: [{
+	   				    	  tag : 'iframe',
+	   				    	  frame : true,
+	   				    	  anchor : '100% 100%',
+	   				    	  layout : 'fit',
+	   				    	  html : '<iframe id="iframe_dl_'+caller+'" src="'+basePath+'jsps/common/vastDatalist.jsp?urlcondition='+condition+'&whoami='+caller+'" height="100%" width="100%" frameborder="0" scrolling="auto"></iframe>'
+	   				    }],
+	   				    buttons : [{
+	   				    	text: btn.text,
+	   				    	iconCls: btn.iconCls,
+	   				    	cls: 'x-btn-gray-1',
+	   				    	handler: function(){
+	   				    		
+	   				    	}
+	   				    },{
+	   				    	text : '关  闭',
+	   				    	iconCls: 'x-button-icon-close',
+	   				    	cls: 'x-btn-gray',
+	   				    	handler : function(){
+	   				    		Ext.getCmp('dlwin').close();
+	   				    	}
+	   				    }]
+	   				});
+	   				dlwin.show();
+    			}
+    		},
+    		'button[id=searchlist]': {
+    			click: function(){
+    				this.showSearchListWin();
+    			}
+    		},
+    		'dbfindtrigger[name=sl_label]': {
+    			afterrender: function(t){
+    				t.dbBaseCondition = 'sl_caller=\'' + caller + '\'';
+    			}
+    		}
+    	});
+    }, 
+    onGridItemClick: function(selModel, record){//grid行选择
+    	var me = this;
+    	if(keyField != null && keyField != ''){//有些datalist不需要打开明细表,这些表在datalist表里面不用配dl_keyField
+    		var value = record.data[keyField];
+        	var formCondition = keyField + "IS" + value ;
+        	var gridCondition = pfField + "IS" + value;
+        	//var panel = Ext.getCmp(caller + keyField + "=" + value); 
+        	/*var main = parent.Ext.getCmp("content-panel");
+        	if(!main){
+				main = parent.parent.Ext.getCmp("content-panel");
+			}*/
+        		var title = "";
+    	    	if (value.toString().length>4) {
+    	    		 title = value.toString().substring(value.toString().length-4);	
+    	    	} else {
+    	    		title = value;
+    	    	}
+    	    	var myurl = '';
+    	    	if(me.BaseUtil.contains(url, '?', true)){
+    	    		myurl = url + '&formCondition='+formCondition+'&gridCondition='+gridCondition;
+    	    	} else {
+    	    		myurl = url + '?formCondition='+formCondition+'&gridCondition='+gridCondition;
+    	    	}
+    	    	myurl += "&datalistId=" + main.getActiveTab().id;
+    	    	//main.getActiveTab().currentStore = me.getCurrentStore(value);//用于单据翻页
+    	    	var win=new Ext.window.Window({
+    	    		height:400,
+    	    		width:400,
+    	    		modal:true,
+    	    		title : me.BaseUtil.getActiveTab().title+'('+title+')',
+	    			tag : 'iframe',
+	    			tabConfig:{tooltip:me.BaseUtil.getActiveTab().tabConfig.tooltip+'('+keyField + "=" + value+')'},
+	    			frame : true,
+	    			border : false,
+	    			layout : 'fit',
+	    			iconCls : 'x-tree-icon-tab-tab1',
+	    			html : '<iframe id="iframe_maindetail_'+caller+"_"+value+'" src="' + myurl + '" height="100%" width="100%" frameborder="0" style="border-width: 0px;padding: 0px;" scrolling="auto"></iframe>',
+	    			closable : true,
+	    			listeners : {
+	    				close : function(){
+	    					if(!main){
+	    						main = parent.parent.Ext.getCmp("content-panel");
+	    					}
+	    			    	main.setActiveTab(main.getActiveTab().id); 
+	    				}
+	    			} });
+    	    	win.show();
+    	}
+    }, 
+    openTab : function (panel,id){ 
+    	var o = (typeof panel == "string" ? panel : id || panel.id); 
+    	var main = parent.Ext.getCmp("content-panel"); 
+    	/*var tab = main.getComponent(o); */
+    	if(!main) {
+    		main =parent.parent.Ext.getCmp("content-panel"); 
+    	}
+    	var tab = main.getComponent(o); 
+    	if (tab) { 
+    		main.setActiveTab(tab); 
+    	} else if(typeof panel!="string"){ 
+    		panel.id = o; 
+    		var p = main.add(panel); 
+    		main.setActiveTab(p); 
+    	} 
+    },
+    getCurrentStore: function(value){
+    	var grid = Ext.getCmp('grid');
+		var items = grid.store.data.items;
+		var array = new Array();
+		var o = null;
+		Ext.each(items, function(item, index){
+			o = new Object();
+			o.selected = false;
+			if(index == 0){
+				o.prev = null;
+			} else {
+				o.prev = items[index-1].data[keyField];
+			}
+			if(index == items.length - 1){
+				o.next = null;
+			} else {
+				o.next = items[index+1].data[keyField];
+			}
+			var v = item.data[keyField];
+			o.value = v;
+			if(v == value)
+				o.selected = true;
+			array.push(o);
+		});
+		return array;
+    },
+    showSearchListWin: function(){
+    	var me = this;
+    	if(!Ext.getCmp('slwin')){
+    		Ext.create('Ext.window.Window', {
+        		id : 'slwin',
+        		title: '高级查询',
+        		height: screen.height*0.7*0.8,
+        		width: screen.width*0.7*0.6,
+        		maximizable : true,
+        		closable: false,
+        		buttonAlign : 'center',
+        		layout : 'border',
+        		bodyStyle: 'background:#f1f1f1;',
+        		tools: [{
+        			type: 'close',
+        			handler: function(){
+        				Ext.getCmp('slwin').down('grid').setEffectData();//保留已选择的条件
+        				Ext.getCmp('slwin').hide();
+        			}
+        		}],
+        		items: [{
+        			xtype: 'form',
+        			region: 'north',
+        			layout: 'column',
+        			bodyStyle: 'background:#f1f1f1;',
+        			title: '已选择条件',
+        			maxHeight: 100,
+        			items: me.getFilterCondition(),
+        			buttonAlign: 'center',
+        			buttons: [{
+        				name: 'query',
+        				id: 'query',
+        				text: $I18N.common.button.erpQueryButton,
+        				iconCls: 'x-button-icon-query',
+        		    	cls: 'x-btn-gray',
+        		    	handler: function(btn){
+        		    		var con = btn.ownerCt.ownerCt.ownerCt.down('grid').getCondition();//保留已选择的条件
+        		    		Ext.getCmp('grid').getCount(caller, con);
+    			    		btn.ownerCt.ownerCt.ownerCt.hide();
+        		    	}
+        			},{
+        				cls: 'x-btn-gray',
+    			    	text: $I18N.common.button.erpOffButton,
+    			    	handler: function(btn){
+    			    		btn.ownerCt.ownerCt.ownerCt.down('grid').setEffectData();
+    			    		btn.ownerCt.ownerCt.ownerCt.hide();
+    			    	}
+        			},{
+        				xtype: 'radio',
+        				name: 'separator',
+        				boxLabel: '与',
+        				checked: true,
+        				inputValue: 'AND',
+        				getCheckValue: function(){
+        					return this.checked ? 'AND' : 'OR';
+        				}
+        			},{
+        				xtype: 'radio',
+        				name: 'separator',
+        				boxLabel: '或',
+        				inputValue: 'OR'
+        			}]
+        		}, me.getSearchListGrid()]
+        	});
+    	}
+    	Ext.getCmp('slwin').show();
+    	Ext.getCmp('slwin').down('grid').loadData();
+    },
+    getFilterCondition: function(){
+    	var fields = Ext.getCmp('grid').plugins[0].fields;
+    	var items = new Array();
+    	Ext.each(Ext.Object.getKeys(fields), function(key){
+    		var item = fields[key];
+    		if(item.value != null && item.value.toString().trim() != ''){
+    			items.push({
+    				xtype: item.xtype,
+    				id: item.itemId,
+    				fieldLabel: item.fieldLabel,
+    				fieldStyle: item.fieldStyle,
+    				value: item.value,
+    				columnWidth: 0.5,
+    				cls: 'form-field-border',
+    				listeners: {
+    					change: function(f){
+    						Ext.getCmp(item.id).setValue(f.value);
+    					}
+    				}
+    			});
+    		}
+    	});
+    	return items;
+    },
+    getSearchListGrid: function(){
+    	var grid = Ext.create('Ext.grid.Panel', {
+    		minHeight: 300,
+    		region: 'center',
+    		store: Ext.create('Ext.data.Store', {
+    			 fields:[{
+    				 name: 'sl_label',
+    				 type: 'string'
+    			 },{
+    				 name: 'sl_field',
+    				 type: 'string'
+    			 },{
+    				 name: 'sl_type',
+    				 type: 'string'
+    			 },{
+    				 name: 'union',
+    				 type: 'string'
+    			 },{
+    				 name: 'value'
+    			 }],
+    			 data: []
+    		}),
+    		columns: [{
+    			text: '条件',
+    			flex: 2,
+    			dataIndex: 'sl_label',
+    			editor: {
+    				xtype: 'dbfindtrigger'
+    			},
+    			dbfind: 'SearchList|sl_label'
+    		},{
+    			text: '',
+    			hidden: true,
+    			dataIndex: 'sl_field'
+    		},{
+    			text: '',
+    			hidden: true,
+    			dataIndex: 'sl_type'
+    		},{
+    			text: '关系',
+    			flex: 1,
+    			dataIndex: 'union',
+    			editor: {
+    				xtype: 'combo',
+    				store: Ext.create('Ext.data.Store', {
+    	                fields: ['display', 'value'],
+    	                data : [
+    	                    {"display": 'Like', "value": 'like'},
+    	                    {"display": '等于', "value": '='},
+    	                    {"display": '大于', "value": '>'},
+    	                    {"display": '小于', "value": '<'},
+    	                    {"display": '不等于', "value": '<>'},
+    	                    {"display": '介于', "value": 'Between And'}
+    	                ]
+    	            }),
+    	            displayField: 'display',
+    	            valueField: 'value',
+    	    		queryMode: 'local',
+    	    		editable: false,
+    	    		value: 'like'
+    			}
+    		},{
+    			text: '值',
+    			flex: 3,
+    			dataIndex: 'value',
+    			renderer: function(val){
+    				if(Ext.isDate(val)){
+    					return Ext.Date.format(val, 'Y-m-d');
+    				}
+    				return val;
+    			}
+    		}],
+    		columnLines: true,
+    		plugins: Ext.create('Ext.grid.plugin.CellEditing', {
+    			clicksToEdit: 1,
+    			listeners: {
+    				beforeedit: function(e){
+    					if(e.field == 'value'){
+    	        			var record = e.record;
+    						var column = e.column;
+    						if(record.data['union'] == null || record.data['union'] == ''){
+								record.set('union', '=');
+							}
+    						var f = record.data['sl_field'];
+    						switch(record.data['sl_type']){
+	    						case 'D':
+	    							switch(record.data['union']){
+		    							case 'Between And':
+		    								column.setEditor(new erp.view.core.form.FtDateField({
+		    									id: f,
+		    									name: f
+		    								}));break;
+		    							default:
+		    								column.setEditor(new Ext.form.field.Date({
+		    									id: f,
+		    									name: f
+		    								}));break;
+	    							}
+	    							break;
+	    						case 'S':
+	    							switch(record.data['union']){
+		    							case 'Between And':
+		    								column.setEditor(new erp.view.core.form.FtField({
+		    									id: f,
+		    									name: f,
+		    									value: e.value
+		    								}));break;
+		    							default:
+		    								column.setEditor(new Ext.form.field.Text({
+		    									id: f,
+		    									name: f
+		    								}));break;
+	    							}
+	    							break;
+	    						case 'N':
+	    							switch(record.data['union']){
+		    							case 'Between And':
+		    								column.setEditor(new erp.view.core.form.FtNumberField({
+		    									id: f,
+		    									name: f
+		    								}));break;
+		    							default:
+		    								column.setEditor(new Ext.form.field.Number({
+		    									id: f,
+		    									name: f
+		    								}));break;
+	    							}
+	    							break;
+	    						case 'T':
+	    							column.dbfind = 'a|b';
+	    							switch(record.data['union']){
+		    							case 'Between And':
+		    								column.setEditor(new erp.view.core.form.FtFindField({
+		    									id: f,
+		    									name: f
+		    								}));break;
+		    							default:
+		    								column.setEditor(new erp.view.core.trigger.DbfindTrigger({
+		    									id: f,
+		    									name: f
+		    								}));break;
+	    							}
+	    							break;
+	    						default:
+	    							column.setEditor(null);
+    						}
+    					}
+    				}
+    			}
+    		}),
+    		dbfinds: [{
+    	    	field: 'sl_label',
+    	    	dbGridField: 'sl_label'
+    	    },{
+    	    	field: 'sl_field',
+    	    	dbGridField: 'sl_field'
+    	    },{
+    	    	field: 'sl_type',
+    	    	dbGridField: 'sl_type'
+    	    }],
+    	    selModel: Ext.create('Ext.selection.CheckboxModel',{
+    	    	
+    		}),
+    		setEffectData: function(){
+    			var me = this;
+    			var datas = new Array();
+    			Ext.each(me.selModel.getSelection(), function(item){
+    				var data = item.data;
+    				if(!Ext.isEmpty(data.sl_label) && !Ext.isEmpty(data.union) && !Ext.isEmpty(data.value)){
+    					datas.push(data);
+    				}
+    			});
+    			me.effectdata = datas;
+    		},
+    		getEffectData: function(){
+    			return this.effectdata || new Array();
+    		},
+    		loadData: function(){
+    			var data = this.getEffectData();
+    			this.store.loadData(data);
+    			this.selModel.selectAll();
+    			this.store.add([{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]);
+    		},
+    		/**
+    		 * 将数据拼成Sql条件语句
+    		 */
+    		getCondition: function(){
+    			this.setEffectData();
+    			var condition = '';
+    			var separator = this.up('window').down('form').down('radio').getCheckValue();
+    			Ext.each(this.effectdata, function(data){
+    				if(data.union == 'Between And'){
+    					var v1 = data.value.split('~')[0];
+    					var v2 = data.value.split('~')[1];
+    					if(data.sl_type == 'D'){
+    						if(condition == ''){
+    							condition = '(' + data.sl_field + " BETWEEN to_date('" + v1 + " 00:00:00','yyyy-MM-dd HH24:mi:ss') AND to_date('" 
+	        					+ v2 + " 23:59:59','yyyy-MM-dd HH24:mi:ss')" + ') ';
+    						} else {
+    							condition += ' ' + separator + ' (' + data.sl_field + " BETWEEN to_date('" + v1 + " 00:00:00','yyyy-MM-dd HH24:mi:ss') AND to_date('" 
+    	        					+ v2 + " 23:59:59','yyyy-MM-dd HH24:mi:ss')" + ') ';
+    						}
+    					} else if(data.sl_type == 'N'){
+    						if(condition == ''){
+    							condition = '(' + data.sl_field + " BETWEEN " + v1 + ' AND ' + v2 + ') ';
+    						} else {
+    							condition += ' ' + separator + ' (' + data.sl_field + " BETWEEN " + v1 + ' AND ' + v2 + ') ';
+    						}
+    					} else{
+    						if(condition == ''){
+    							condition = '(' + data.sl_field + " BETWEEN '" + v1 + "' AND '" + v2 + "') ";
+    						} else {
+    							condition += ' ' + separator + ' (' + data.sl_field + " BETWEEN '" + v1 + "' AND '" + v2 + "') ";
+    						}
+    					}
+    				} else {
+    					if(data.sl_type == 'D'){
+    						var v = data.value;
+    						if(data.union == '<'){
+								v = "to_date('" + v + " 00:00:00','yyyy-MM-dd HH24:mi:ss')";
+							} else if(data.union == '>'){
+								v = "to_date('" + v + " 23:59:59','yyyy-MM-dd HH24:mi:ss')";
+							} else {
+								v = "to_date('" + v + "','yyyy-MM-dd')";
+							}
+    						if(condition == ''){
+    							condition = '(' + data.sl_field + data.union + v + ') ';
+    						} else {
+    							condition += ' ' + separator +' (' + data.sl_field + data.union + v + ') ';
+    						}
+    					} else {
+    						var v = data.value;
+    						if(data.union == 'like'){
+    							v = " '%" + data.value + "%'";
+    						} else {
+    							v = " '" + data.value + "'";
+    						}
+    						if(condition == ''){
+    							condition = '(' + data.sl_field + " " + data.union + v + ") ";
+    						} else {
+    							condition += ' ' + separator +' (' + data.sl_field + " " + data.union + v + ") ";
+    						}
+    					}
+    				}
+    			});
+    			return condition;
+    		}
+    	});
+    	return grid;
+    }
+});

+ 83 - 0
WebContent/app/controller/common/Dbfind.js

@@ -0,0 +1,83 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.common.Dbfind', {
+    extend: 'Ext.app.Controller',
+    views:[
+     		'common.dbfind.GridPanel',
+     		'common.dbfind.Toolbar',
+     		'common.dbfind.Viewport','core.grid.YnColumn'
+     	],
+    requires: ['erp.util.BaseUtil'],
+    init:function(){
+    	this.control({ 
+    		'erpDbfindGridPanel': { 
+    			itemclick: this.onGridItemClick 
+    		} 
+    	});
+    }, 
+    onGridItemClick: function(selModel, record){//grid行选择
+    	var keyValues = record.data;
+    	var triggerV = null;
+    	if(!trigger.hidden) {
+        	if(!trigger.ownerCt || trigger.column){//如果是grid的dbfind
+        		var grid = trigger.owner;
+        		//grid前面有checkboxModel 的  时候   grid的一行得到焦点的时候会把这一行的record放入grid 中的lastSelected 
+        		//为了解决selected.items[0]保存的是checkboxModel中选择列的情况
+        		var select = grid.lastSelectedRecord || trigger.record || grid.getSelectionModel().selected.items[0] 
+        				|| grid.selModel.lastSelected;//selected的数据
+        		Ext.Array.each(record.fields.keys, function(k){
+            		Ext.Array.each(grid.dbfinds, function(ds){
+            			if(Ext.isEmpty(ds.trigger) || ds.trigger == trigger.name) {
+            				if(Ext.Array.contains(ds.dbGridField.split(';'), k)) {//k == ds.dbGridField//支持多dbgrid的字段对应grid同一字段
+                    			if(ds.field == key){
+                    				triggerV = keyValues[k];//trigger所在位置赋值
+                    			}
+                    			select.set(ds.field, keyValues[k]);
+                    		}
+            			}
+                	});
+            	});
+        	} else {
+        		var ff;
+    			Ext.Array.each(record.fields.keys,function(k){
+    				Ext.Array.each(dbfinds,function(ds){
+    					if(k == ds.dbGridField) {
+    						if(ds.field && ds.field.indexOf(";")>0){
+    							Ext.Array.each(ds.field.split(";"),function(s){
+    								if(trigger.name == s || trigger.id == s){
+    									triggerV = keyValues[k];
+    								}
+    								ff = parent.Ext.getCmp(s);
+    								if(ff) ff.setValue(keyValues[k]);
+    							});
+    						}
+    						else if(ds.field && parent.Ext.getCmp(ds.field)){
+    							if(trigger.name == ds.field || trigger.id == ds.field){
+    								triggerV = keyValues[k];
+    							}
+    							ff = parent.Ext.getCmp(ds.field);
+    							//有时候会拿不到dbkind
+    							var dbtype=getUrlParam('dbkind');
+    							if(dbtype!=null&&dbtype=='add'&&ff.value!=null&&ff.value!="") {
+    								//判断当前值是否存在于已选择里面
+    								var arr=ff.value.split("#");
+    								if(arr.indexOf(keyValues[k])<0) 
+    									keyValues[k]=ff.value+"#"+keyValues[k];
+    								else  
+    										keyValues[k]=ff.value;
+    								if(trigger.name == ds.field || trigger.id == ds.field){
+        								triggerV = keyValues[k];
+        							}
+    							}
+    							 ff.setValue(keyValues[k]);
+    						}
+    					}
+    				});
+    			});
+        	}
+    	}
+    	trigger.setValue(triggerV);
+    	trigger.fireEvent('aftertrigger', trigger, record, dbfinds);
+    	var win = parent.Ext.getCmp('dbwin');
+    	win && win.close();
+    }
+});

+ 170 - 0
WebContent/app/controller/common/DealList.js

@@ -0,0 +1,170 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.common.DealList', {
+	extend : 'Ext.app.Controller',
+	requires: ['erp.util.BaseUtil'],
+	views : [ 'common.deallist.Viewport', 'common.datalist.GridPanel', 'common.batchDeal.Form', 'core.trigger.DbfindTrigger',
+			'core.form.FtField', 'core.form.ConDateField', 'core.form.YnField', 'core.form.FtDateField','common.datalist.Toolbar',
+			'core.form.MonthDateField','core.form.FtFindField', 'core.grid.YnColumn', 'core.grid.TfColumn', 
+			'core.form.ConMonthDateField','core.button.Refresh' ],
+	refs : [ {
+		ref : 'grid',
+		selector : '#grid'
+	} ],
+	init : function() {
+		var me = this;
+		this.BaseUtil = Ext.create('erp.util.BaseUtil');
+		this.control({
+			'erpBatchDealFormPanel button[id=query]' : {
+				click : function(btn) {
+					var grid = Ext.getCmp('grid');
+					var form = btn.ownerCt.ownerCt, cond = form.getCondition(grid);
+					grid.formCondition = cond;
+					grid.getCount(null, null);
+				}
+			},
+			'erpBatchDealFormPanel': {
+				alladded : function(form) {
+					var items = form.items.items;
+					Ext.each(items, function() {
+						var val = getUrlParam(this.name);
+						if(!Ext.isEmpty(val)) {
+							this.setValue(val);
+							if(this.xtype == 'dbfindtrigger') {
+								this.autoDbfind('form', caller, this.name, this.name + " like '%" + val + "%'");
+							}
+						}
+					});
+				},
+				afterrender: function(f) {
+					f.down('button[name=query]').handler = Ext.emptyFn;
+					f.down('button[name=export]').handler = function(btn){
+			    		var grid = Ext.getCmp('grid');
+			    		var condition = f.getCondition(grid);
+		    			if(Ext.isEmpty(condition)) {
+		    				condition = '1=1';
+		    			}
+			    		grid.BaseUtil.createExcel(caller, 'datalist', condition, null, null, null, grid);
+			    	};
+				}
+			},
+			'erpVastDealButton': {
+				click: function(btn) {
+					if(caller == 'FeatureView!Query'){
+						var ftcode = Ext.getCmp('ft_code').value;
+		                if (Ext.isEmpty(ftcode)) {
+		                	showError('模版编号不能为空!');
+		                    return
+		                } else {
+		                	me.getGrid().setLoading(true);
+		                    Ext.Ajax.request({
+		                         url: basePath + 'pm/make/refreshFeatureView.action',
+		                         method: 'post',
+		                         params: {
+		                        	 ftcode: ftcode
+		                         },
+		                         timeout: 1200000,
+		                         callback: function(options, success, response) {
+		                        	 me.getGrid().setLoading(false);
+		                             var res = new Ext.decode(response.responseText);
+		                             if (res.exceptionInfo != null) {
+		                            	 showError(res.exceptionInfo);
+		                                 return;
+		                             }
+		                             Ext.Msg.alert("提示", "刷新成功!", function() {
+		                            	 var queryBtn = Ext.getCmp('query');
+		                            	 queryBtn.fireEvent('click', queryBtn, queryBtn);
+		                             });
+		                        }
+		                   });
+		                }
+					} else if(caller == 'FeatureView!Prod!Query'){
+						var ftcode = Ext.getCmp('ft_code').value;
+						if (Ext.isEmpty(ftcode)) {
+		                	showError('模版编号不能为空!');
+		                    return
+		                } else {
+		                	me.getGrid().setLoading(true);
+		                    Ext.Ajax.request({
+		                         url: basePath + 'pm/make/refreshFeatureViewProd.action',
+		                         method: 'post',
+		                         params: {
+		                        	 ftcode: ftcode
+		                         },
+		                         timeout: 1200000,
+		                         callback: function(options, success, response) {
+		                        	 me.getGrid().setLoading(false);
+		                             var res = new Ext.decode(response.responseText);
+		                             if (res.exceptionInfo != null) {
+		                            	 showError(res.exceptionInfo);
+		                                 return;
+		                             }
+		                             Ext.Msg.alert("提示", "刷新成功!", function() {
+		                            	 var queryBtn = Ext.getCmp('query');
+		                            	 queryBtn.fireEvent('click', queryBtn, queryBtn);
+		                             });
+		                        }
+		                   });
+		                }
+					} else {
+						var currentMonth = btn.ownerCt.ownerCt.down('monthdatefield').value;
+		                if (!currentMonth) {
+		                	showError('期间不能为空!');
+		                    return
+		                } else {
+		                	me.getGrid().setLoading(true);
+		                    Ext.Ajax.request({
+		                         url: basePath + 'scm/product/RefreshProdMonthNew.action',
+		                         method: 'post',
+		                         params: {
+		                        	 currentMonth: currentMonth
+		                         },
+		                         timeout: 1200000,
+		                         callback: function(options, success, response) {
+		                        	 me.getGrid().setLoading(false);
+		                             var res = new Ext.decode(response.responseText);
+		                             if (res.exceptionInfo != null) {
+		                            	 showError(res.exceptionInfo);
+		                                 return;
+		                             }
+		                             Ext.Msg.alert("提示", "刷新成功!", function() {
+		                            	 var queryBtn = Ext.getCmp('query');
+		                            	 queryBtn.fireEvent('click', queryBtn, queryBtn);
+		                             });
+		                        }
+		                   });
+		                }
+					}
+	            }
+	       },
+			'monthdatefield': {
+				afterrender: function(f) {
+					var type = '', con = null;
+					if(f.name == 'pwm_yearmonth' && (caller == 'Productwhmonth!subject' || caller == 'Productwhmonth!SubjectWarehouse' || caller=='Productwhmonth!warehouse')) {
+						type = 'MONTH-P';
+						con = Ext.getCmp('condatefield');
+					}
+					if(type != '') {
+						this.getCurrentMonth(f, type, con);
+					}
+				}
+			}
+		});
+	},
+    getCurrentMonth: function(f, type, con) {
+    	Ext.Ajax.request({
+    		url: basePath + 'fa/getMonth.action',
+    		params: {
+    			type: type
+    		},
+    		callback: function(opt, s, r) {
+    			var rs = Ext.decode(r.responseText);
+    			if(rs.data) {
+    				f.setValue(rs.data.PD_DETNO);
+    				if(con != null) {
+    					con.setMonthValue(rs.data.PD_DETNO);
+    				}
+    			}
+    		}
+    	});
+    }
+});

+ 41 - 0
WebContent/app/controller/common/DeskTop.js

@@ -0,0 +1,41 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.common.DeskTop', {
+    extend: 'Ext.app.Controller',
+    requires: ['erp.util.FormUtil'],
+    views: ['common.DeskTop.ViewPort', 'common.DeskTop.DeskPortal','common.DeskTop.FlowPortal',
+            'common.DeskTop.PortalColumn','common.DeskTop.Portlet','common.DeskTop.CommonUsePortal',
+            'common.DeskTop.TaskPortal','common.DeskTop.InfoPortal','common.DeskTop.CallPortal',
+            'common.DeskTop.KpiBillPortal'],
+    init: function() {  
+    	var me=this;
+        this.control({
+        	'deskportal':{
+        		drop :function(node,data,overmodel){
+                    me.modifyDesk(node);
+        		}
+        	},
+        	'gridpanel':{
+        		itemmousedown:function(){
+        			return false;
+        		}
+        	}
+        });
+    },
+    modifyDesk:function(node){
+    	var columns=node.portal.items.items,nodes=new Array();
+    	Ext.Array.each(columns,function(item,colIndex){
+    		Ext.Array.each(item.items.items,function(portal,rowIndex){
+    			nodes.push({
+    				xtype_:portal.xtype,
+    				detno_:2*(rowIndex+1)-(colIndex+1)%2
+    			})
+    		});
+    	});
+       Ext.Ajax.request({
+    	   url:basePath+'common/desktop/setDetno.action',
+    	   params:{
+    		 nodes:Ext.encode(nodes)
+    	   }   
+       });
+    }
+});

+ 189 - 0
WebContent/app/controller/common/EditDatalist.js

@@ -0,0 +1,189 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.common.EditDatalist', {
+    extend: 'Ext.app.Controller',
+    requires: ['erp.util.BaseUtil', 'erp.util.FormUtil', 'erp.util.RenderUtil'],
+    views:[
+     		'common.editDatalist.Viewport','common.editDatalist.GridPanel','common.editDatalist.Toolbar','core.form.FtField',
+     		'core.grid.TfColumn','core.grid.YnColumn','core.trigger.DbfindTrigger','core.form.FtDateField','core.form.FtFindField',
+     		'core.form.FtNumberField','core.form.MonthDateField'
+     	],
+    init:function(){
+        this.BaseUtil = Ext.create('erp.util.BaseUtil');
+        this.FormUtil = Ext.create('erp.util.FormUtil');
+    	this.control({
+    		'erpEditDatalistGridPanel': { 
+    			afterrender:function(grid){
+    				if(Ext.isIE){
+    					document.body.attachEvent('onkeydown', function(){
+    						if(window.event.ctrlKey && window.event.keyCode == 67){//Ctrl + C
+    							var e = window.event;
+    							if(e.srcElement) {
+    								window.clipboardData.setData('text', e.srcElement.innerHTML);
+    							}
+    						}
+    					});
+    				} else {
+    					grid.getEl().dom.addEventListener("mouseover", function(e){
+        					if(e.ctrlKey){
+        						 var Contextvalue=e.target.textContent==""?e.target.value:e.target.textContent;
+        						 textarea_text = parent.document.getElementById("textarea_text");
+        						 textarea_text.value=Contextvalue;
+        					     textarea_text.focus();
+        					     textarea_text.select();
+        					}
+        		    	});
+    				}
+    			}
+    		},
+    		'erpVastDeleteButton': {
+    			click: function(btn){
+    				var dlwin = new Ext.window.Window({
+   			    		id : 'dlwin',
+	   				    title: btn.text,
+	   				    height: "100%",
+	   				    width: "80%",
+	   				    maximizable : true,
+	   					buttonAlign : 'center',
+	   					layout : 'anchor',
+	   				    items: [{
+	   				    	  tag : 'iframe',
+	   				    	  frame : true,
+	   				    	  anchor : '100% 100%',
+	   				    	  layout : 'fit',
+	   				    	  html : '<iframe id="iframe_dl_'+caller+'" src="'+basePath+'jsps/common/vastDatalist.jsp?urlcondition='+condition+'&whoami='+caller+'" height="100%" width="100%" frameborder="0" scrolling="auto"></iframe>'
+	   				    }],
+	   				    buttons : [{
+	   				    	text: btn.text,
+	   				    	iconCls: btn.iconCls,
+	   				    	cls: 'x-btn-gray-1',
+	   				    	handler: function(){
+	   				    		
+	   				    	}
+	   				    },{
+	   				    	text : '关  闭',
+	   				    	iconCls: 'x-button-icon-close',
+	   				    	cls: 'x-btn-gray',
+	   				    	handler : function(){
+	   				    		Ext.getCmp('dlwin').close();
+	   				    	}
+	   				    }]
+	   				});
+	   				dlwin.show();
+    			}
+    		},
+    		'erpRefreshButton': {
+    			click: function(btn){
+    				 Ext.Ajax.request({
+     					url: basePath + (btn.url || 'fa/gs/copyAccountRegister/refreshQuery.action'),     					
+     					params: {
+     						
+ 						},
+     					method: 'post',        					
+     					callback: function(opt, s, r) {        						
+     						var rs = Ext.decode(r.responseText);
+     						if(rs.exceptionInfo){
+				   				showError(rs.exceptionInfo);
+				   				return "";
+				   			}
+			    			if(rs.success){
+				   				Ext.Msg.alert("提示", "刷新成功!", function(){
+				   					window.location.reload();
+				   				});
+				   			}
+     					}
+     				});
+    			}
+    		},
+    		'erpVastSaveButton': {
+    			click: function(btn) {
+    				var grid = btn.ownerCt.ownerCt,
+    					data = grid.getEffectData();
+    				if(data.length > 0) {
+    					grid.setLoading(true);
+    					Ext.Ajax.request({
+    				   		url : basePath + (btn.url || 'common/vastSave.action'),
+    				   		params: {
+    				   			caller: caller,
+    				   			data: Ext.encode(data)
+    				   		},
+    				   		method : 'post',
+    				   		callback : function(options,success,response){
+    				   			grid.setLoading(false);
+    				   			var rs = new Ext.decode(response.responseText);
+    				   			if(rs.exceptionInfo){
+    				   				showError(rs.exceptionInfo);
+    				   				return "";
+    				   			}
+    			    			if(rs.success){
+    				   				Ext.Msg.alert("提示", "保存成功!", function(){
+    				   					window.location.reload();
+    				   				});
+    				   			}
+    				   		}
+    					});
+    				}
+    			}
+    		},
+    		'erpVastGetButton': {
+    			click: function(btn) {
+    				var grid = btn.ownerCt.ownerCt,
+    					data = grid.getEffectData();
+    				if(data.length > 0) {
+    					grid.setLoading(true);
+    					Ext.Ajax.request({
+    				   		url : basePath + (btn.url || 'common/vastSave.action'),
+    				   		params: {
+    				   			caller: caller,
+    				   			data: Ext.encode(data)
+    				   		},
+    				   		method : 'post',
+    				   		callback : function(options,success,response){
+    				   			grid.setLoading(false);
+    				   			var rs = new Ext.decode(response.responseText);
+    				   			if(rs.exceptionInfo){
+    				   				showError(rs.exceptionInfo);
+    				   				return "";
+    				   			}
+    			    			if(rs.success){
+    				   				Ext.Msg.alert("提示", "保存成功!", function(){
+    				   					window.location.reload();
+    				   				});
+    				   			}
+    				   		}
+    					});
+    				}
+    			}
+    		},
+    		'erpVastSendOutButton': {
+    			click: function(btn) {
+    				var grid = btn.ownerCt.ownerCt,
+    					data = grid.getEffectData();
+    				if(data.length > 0) {
+    					grid.setLoading(true);
+    					Ext.Ajax.request({
+    				   		url : basePath + (btn.url || 'common/vastSave.action'),
+    				   		params: {
+    				   			caller: caller,
+    				   			data: Ext.encode(data)
+    				   		},
+    				   		method : 'post',
+    				   		callback : function(options,success,response){
+    				   			grid.setLoading(false);
+    				   			var rs = new Ext.decode(response.responseText);
+    				   			if(rs.exceptionInfo){
+    				   				showError(rs.exceptionInfo);
+    				   				return "";
+    				   			}
+    			    			if(rs.success){
+    				   				Ext.Msg.alert("提示", "保存成功!", function(){
+    				   					window.location.reload();
+    				   				});
+    				   			}
+    				   		}
+    					});
+    				}
+    			}
+    		}
+    	});
+    } 
+});

+ 56 - 0
WebContent/app/controller/common/EditorColumn.js

@@ -0,0 +1,56 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.common.EditorColumn', {
+	extend: 'Ext.app.Controller',
+	requires: ['erp.util.RenderUtil', 'erp.util.GridUtil'],
+	views:[
+	       'common.editorColumn.GridPanel',
+	       'common.editorColumn.Viewport',
+	       'core.trigger.DbfindTrigger',
+	       'core.grid.YnColumn'
+	       ],
+	       init:function(){
+	    	   var me = this;
+	    	   this.control({ 
+	    		   'erpEditorColumnGridPanel': { 
+	    			   storeloaded: function(grid){
+	    				   me.getProductWh(grid);
+	    			   }
+	    		   },
+	    		   'dbfindtrigger[name=pw_whcode]':{
+	    			   focus: function(t){
+	    				   t.setHideTrigger(false);
+	    				   t.setReadOnly(false);
+	    				   var record = t.record;
+	    				   var code = record.data['sd_prodcode'];
+	    				   if(caller =='Sale!ToAccept!Deal'){
+	    					   t.dbBaseCondition ="pw_prodcode='" + code + "'";
+	    				   }
+	    			   }
+
+	    		   }
+	    	   });
+	       },
+	       getProductWh: function(grid) {
+	    	   var prodfield = grid.getProdField();
+	    	   if(prodfield) {
+	    		   var codes = [];
+	    		   grid.store.each(function(d){
+	    			   codes.push("'" + d.get(prodfield) + "'");
+	    		   });
+	    		   Ext.Ajax.request({
+	    			   url: basePath + 'scm/product/getProductwh.action',
+	    			   params: {
+	    				   codes: codes.join(',')
+	    			   },
+	    			   callback: function (opt, s, r) {
+	    				   if(s) {
+	    					   var rs = Ext.decode(r.responseText);
+	    					   if(rs.data) {
+	    						   grid.productwh = rs.data;
+	    					   }
+	    				   }
+	    			   }
+	    		   });
+	    	   }
+	       }
+});

Some files were not shown because too many files changed in this diff