ConDateHourMinuteField.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. /**
  2. * 方便选择的时间区间
  3. * @author zhouy
  4. */
  5. Ext.define('erp.view.core.form.ConDateHourMinuteField', {
  6. extend: 'Ext.form.FieldContainer',
  7. alias: 'widget.condatehourminutefield',
  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. Ext.getCmp(me.secondname).setValue(me.secondvalue);
  122. }
  123. }
  124. }
  125. }));
  126. me.insert(5,{
  127. xtype:'hidden',
  128. name:me.name,
  129. value:me.value
  130. });
  131. me.insert(6,{
  132. xtype: 'button',
  133. iconCls: 'x-button-icon-add',
  134. cls: 'x-btn-tb',
  135. width:20,
  136. hidden:me.readOnly==true,
  137. listeners:{
  138. mouseover:function(btn,e){
  139. btn.showMenu();
  140. }
  141. },
  142. menuAlign:'tl-bl?',
  143. menu:{
  144. xtype:'menu',
  145. width:100,
  146. items:[{
  147. text: '上午',
  148. iconCls: 'main-msg',
  149. listeners: {
  150. click: function(m){
  151. me.setDateFieldValue(1);
  152. }
  153. }
  154. },{
  155. text: '下午',
  156. iconCls: 'main-msg',
  157. width:80,
  158. listeners: {
  159. click: function(m){
  160. me.setDateFieldValue(2);
  161. }
  162. }
  163. },{
  164. text: '整天',
  165. width:80,
  166. iconCls: 'main-msg',
  167. listeners: {
  168. click: function(m){
  169. me.setDateFieldValue(3);
  170. }
  171. }
  172. },{
  173. text:'非整天',
  174. width:50,
  175. iconCls: 'main-msg',
  176. listeners: {
  177. click: function(m){
  178. me.setDateFieldValue(4);
  179. }
  180. }
  181. }]
  182. }
  183. });
  184. },
  185. setDateFieldValue: function(v){
  186. v = Number(v);
  187. var now=new Date(),
  188. minDate,
  189. maxDate,
  190. minTime,
  191. maxTime;
  192. var me = this;
  193. var baseData=this.getSystemSet();
  194. if(baseData.as_amstarttime){
  195. me.defaultamstarttime=baseData.as_amstarttime;
  196. me.defaultamendtime=baseData.as_amendtime;
  197. me.defaultpmstarttime=baseData.as_pmstarttime;
  198. me.defaultpmendtime=baseData.as_pmendtime;
  199. }
  200. switch (v) {
  201. case 1://上午
  202. minDate = now;
  203. maxDate = now;
  204. minTime =me.defaultamstarttime;
  205. maxTime =me.defaultamendtime;
  206. break;
  207. case 2://下午
  208. minDate = now;
  209. maxDate = now;
  210. minTime =me.defaultpmstarttime;
  211. maxTime =me.defaultpmendtime;
  212. break;
  213. case 3://整天
  214. minDate = now;
  215. maxDate = now;
  216. minTime =me.defaultamstarttime;
  217. maxTime =me.defaultpmendtime;
  218. break;
  219. case 4://非整天
  220. minDate = null;
  221. maxDate = null;
  222. minTime = null;
  223. maxTime = null;
  224. break;
  225. default:
  226. minDate = null;
  227. maxDate = null;
  228. minTime = null;
  229. maxTime = null;
  230. break;
  231. }
  232. me.items.items[0].setValue(minDate);
  233. me.items.items[1].setValue(minTime);
  234. me.items.items[3].setValue(maxDate);
  235. me.items.items[4].setValue(maxTime);
  236. },
  237. isValid: function(){
  238. return this.firstField.isValid();
  239. },
  240. setValue: function(value){
  241. this.firstField.setValue(value);
  242. },
  243. getValue: function(){
  244. return this.value;
  245. },
  246. setReadOnly:function(bool){
  247. Ext.Array.each(this.items.items,function(item){
  248. if(item.setReadOnly)item.setReadOnly(bool);
  249. if(item.xtype='button'){
  250. if(bool) item.hide();
  251. else item.show();
  252. }
  253. });
  254. this.fireEvent('resize',this);
  255. },
  256. setFieldStyle:function(style){
  257. Ext.Array.each(this.items.items,function(item){
  258. if(item.setFieldStyle) item.setFieldStyle(style);
  259. });
  260. },
  261. hideScope: function(bool) {
  262. if(bool)
  263. this.items.items[0].hide();
  264. else
  265. this.items.items[0].show();
  266. },
  267. mregex: /^[1-9]\d{3}[0-1]\d$/,
  268. getSystemSet: function() {
  269. var result = false;
  270. Ext.Ajax.request({
  271. url : basePath + 'common/getFieldsData.action',
  272. async: false,
  273. params: {
  274. caller: 'AttendSystem',
  275. fields: 'as_amstarttime,as_amendtime,as_pmstarttime,as_pmendtime',
  276. condition:'1=1'
  277. },
  278. method : 'post',
  279. callback : function(opt, s, res){
  280. var r = new Ext.decode(res.responseText);
  281. if(r.exceptionInfo){
  282. showError(r.exceptionInfo);return;
  283. } else if(r.success && r.data){
  284. result = r.data;
  285. }
  286. }
  287. });
  288. return result;
  289. },
  290. listeners: {
  291. afterrender: function(){
  292. var tb = this.getEl().dom;
  293. tb.childNodes[1].style.height = 22;
  294. tb.childNodes[1].style.overflow = 'hidden';
  295. }
  296. }
  297. });