ConDateHourMinuteFieldQ.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. /**
  2. * 方便选择的时间区间查询
  3. * @author
  4. */
  5. Ext.define('erp.view.core.form.ConDateHourMinuteFieldQ', {
  6. extend: 'Ext.form.FieldContainer',
  7. alias: 'widget.condatehourminutefieldq',
  8. layout: 'column',
  9. requires:['erp.view.core.form.DateHourMinuteField'],
  10. valuePrint:"",
  11. items: [],
  12. layout: 'column',
  13. showscope: true,
  14. defaultamstarttime:'08:00',
  15. defaultamendtime:'12:00',
  16. defaultpmstarttime:'14:00',
  17. defaultpmendtime:'18:00',
  18. timeregex:/^(([01]?[0-9])|(2[0-3])):[0-5]?[0-9]$/,
  19. dateregex:/^(d{4})-(d{2})-(d{2})$/,
  20. minDate:null,
  21. minTime:null,
  22. maxDate:null,
  23. maxTime:null,
  24. initComponent : function(){
  25. this.cls = (this.cls || '') + ' x-form-field-multi';
  26. this.callParent(arguments);
  27. var me = this;
  28. if(me.value){
  29. me.minDate=me.value.substring(0,10);
  30. me.minTime=me.value.substring(11,16);
  31. }
  32. if(me.secondvalue){
  33. me.maxDate=me.secondvalue.substring(0,10);
  34. me.maxTime=me.secondvalue.substring(11,16);
  35. }
  36. me.insert(0, Ext.create('Ext.form.field.Date', {
  37. columnWidth: 0.3,
  38. fieldStyle: me.fieldStyle,
  39. readOnly:me.readOnly,
  40. value:me.minDate,
  41. groupName:me.groupName,
  42. allowBlank: me.allowBlank,
  43. editable:false,
  44. listeners: {
  45. change: function(field){
  46. var date = me.items.items[0].value;
  47. var time = me.items.items[1].value;
  48. me.items.items[3].setMinValue(date);
  49. if(me.items.items[3].value && date>me.items.items[3].value){
  50. me.items.items[3].setValue(null);
  51. }
  52. if(date!=null && date !='' && time!=null && time !='' && me.timeregex.test(time)){
  53. me.firstValue=Ext.Date.format(date,'Y-m-d')+" "+time+":00";
  54. this.value=me.firstValue;
  55. me.items.items[5].setValue(me.firstValue);
  56. }
  57. }
  58. }
  59. }));
  60. me.insert(1, Ext.create('erp.view.core.form.TimeMinuteField', {
  61. columnWidth: 0.2,
  62. fieldStyle: me.fieldStyle,
  63. readOnly:me.readOnly,
  64. allowBlank: me.allowBlank,
  65. value:me.minTime,
  66. groupName:me.groupName,
  67. editable:false,
  68. listeners: {
  69. change: function(){
  70. var date = me.items.items[0].value;
  71. var time = me.items.items[1].value;
  72. if(date!=null && date !='' && time!=null && time !='' && me.timeregex.test(time)){
  73. me.firstValue=Ext.Date.format(date,'Y-m-d')+" "+time+":00";
  74. this.value=me.firstValue;
  75. me.items.items[5].setValue(me.firstValue);
  76. }
  77. }
  78. }
  79. }));
  80. me.insert(2,{
  81. xtype: 'label',
  82. text: ' -- ',
  83. paddings: '0 10 0 10'
  84. });
  85. me.insert(3, Ext.create('Ext.form.field.Date', {
  86. columnWidth: 0.3,
  87. fieldStyle: me.fieldStyle,
  88. readOnly:me.readOnly,
  89. value:me.maxDate,
  90. editable:false,
  91. groupName:me.groupName,
  92. allowBlank: me.allowBlank,
  93. listeners: {
  94. change: function(){
  95. var date = me.items.items[3].value;
  96. var time = me.items.items[4].value;
  97. me.items.items[0].setMaxValue(date);
  98. if(me.items.items[0].value && me.items.items[0].value>date){
  99. me.items.items[0].setValue(null);
  100. }
  101. if(date!=null && date !='' && time!=null && time !='' && me.timeregex.test(time)){
  102. me.secondvalue=Ext.Date.format(date,'Y-m-d')+" "+time+":00";
  103. /*Ext.getCmp(me.secondname).setValue(me.secondvalue);*/
  104. }
  105. }
  106. }
  107. }));
  108. me.insert(4, Ext.create('erp.view.core.form.TimeMinuteField', {
  109. columnWidth: 0.2,
  110. fieldStyle: me.fieldStyle,
  111. readOnly:me.readOnly,
  112. value:me.maxTime,
  113. groupName:me.groupName,
  114. allowBlank: me.allowBlank,
  115. listeners: {
  116. change: function(){
  117. var date = me.items.items[3].value;
  118. var time = me.items.items[4].value;
  119. if(date!=null && date !='' && time!=null && time !='' && me.timeregex.test(time)){
  120. me.secondvalue=Ext.Date.format(date,'Y-m-d')+" "+time+":00";
  121. }
  122. }
  123. }
  124. }));
  125. me.insert(5,{
  126. xtype:'hidden',
  127. name:me.name,
  128. value:me.value
  129. });
  130. me.insert(6,{
  131. xtype: 'button',
  132. iconCls: 'x-button-icon-add',
  133. cls: 'x-btn-tb',
  134. width:20,
  135. hidden:me.readOnly==true,
  136. listeners:{
  137. mouseover:function(btn,e){
  138. btn.showMenu();
  139. }
  140. },
  141. menuAlign:'tl-bl?',
  142. menu:{
  143. xtype:'menu',
  144. width:100,
  145. items:[{
  146. text: '上午',
  147. iconCls: 'main-msg',
  148. listeners: {
  149. click: function(m){
  150. me.setDateFieldValue(1);
  151. }
  152. }
  153. },{
  154. text: '下午',
  155. iconCls: 'main-msg',
  156. width:80,
  157. listeners: {
  158. click: function(m){
  159. me.setDateFieldValue(2);
  160. }
  161. }
  162. },{
  163. text: '上下午',
  164. width:80,
  165. iconCls: 'main-msg',
  166. listeners: {
  167. click: function(m){
  168. me.setDateFieldValue(3);
  169. }
  170. }
  171. },{
  172. text:'自定义',
  173. width:50,
  174. iconCls: 'main-msg',
  175. listeners: {
  176. click: function(m){
  177. me.setDateFieldValue(4);
  178. }
  179. }
  180. }]
  181. }
  182. });
  183. },
  184. setDateFieldValue: function(v){
  185. v = Number(v);
  186. var now=new Date(),
  187. minDate,
  188. maxDate,
  189. minTime,
  190. maxTime;
  191. var nowYear = now.getYear(); //当前年
  192. nowYear += (nowYear < 2000) ? 1900 : 0;
  193. var me = this;
  194. switch (v) {
  195. case 1://上午
  196. minDate = now;
  197. maxDate = now;
  198. minTime =me.defaultamstarttime;
  199. maxTime =me.defaultamendtime;
  200. break;
  201. case 2://下午
  202. minDate = now;
  203. maxDate = now;
  204. minTime =me.defaultpmstarttime;
  205. maxTime =me.defaultpmendtime;
  206. break;
  207. case 3://整天
  208. minDate = now;
  209. maxDate = now;
  210. minTime =me.defaultamstarttime;
  211. maxTime =me.defaultpmendtime;
  212. break;
  213. case 4://非整天
  214. minDate = new Date(1970, 0, 1);
  215. maxDate = new Date(nowYear + 100, 11, 31);
  216. minTime = '00:00';
  217. maxTime = '23:59';
  218. break;
  219. default:
  220. minDate = null;
  221. maxDate = null;
  222. minTime = null;
  223. maxTime = null;
  224. break;
  225. }
  226. me.items.items[0].setValue(minDate);
  227. me.items.items[1].setValue(minTime);
  228. me.items.items[3].setValue(maxDate);
  229. me.items.items[4].setValue(maxTime);
  230. },
  231. isValid: function(){
  232. return this.firstField.isValid();
  233. },
  234. setValue: function(value){
  235. this.firstField.setValue(value);
  236. },
  237. getValue: function(){
  238. return this.value;
  239. },
  240. setReadOnly:function(bool){
  241. Ext.Array.each(this.items.items,function(item){
  242. if(item.setReadOnly)item.setReadOnly(bool);
  243. if(item.xtype='button'){
  244. if(bool) item.hide();
  245. else item.show();
  246. }
  247. });
  248. this.fireEvent('resize',this);
  249. },
  250. setFieldStyle:function(style){
  251. Ext.Array.each(this.items.items,function(item){
  252. if(item.setFieldStyle) item.setFieldStyle(style);
  253. });
  254. },
  255. hideScope: function(bool) {
  256. if(bool)
  257. this.items.items[0].hide();
  258. else
  259. this.items.items[0].show();
  260. },
  261. mregex: /^[1-9]\d{3}[0-1]\d$/,
  262. listeners: {
  263. afterrender: function(){
  264. var tb = this.getEl().dom;
  265. tb.childNodes[1].style.height = 22;
  266. tb.childNodes[1].style.overflow = 'hidden';
  267. }
  268. }
  269. });