ConDateHourMinuteField.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  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. height: 22,
  11. valuePrint:"",
  12. items: [],
  13. layout: 'column',
  14. showscope: true,
  15. defaultamstarttime:'08:00',
  16. defaultamendtime:'12:00',
  17. defaultpmstarttime:'14:00',
  18. defaultpmendtime:'18:00',
  19. timeregex:/^(([01]?[0-9])|(2[0-3])):[0-5]?[0-9]$/,
  20. dateregex:/^(d{4})-(d{2})-(d{2})$/,
  21. minDate:null,
  22. minTime:null,
  23. maxDate:null,
  24. maxTime:null,
  25. initComponent : function(){
  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. allowBlank: me.allowBlank,
  42. editable:false,
  43. listeners: {
  44. change: function(field){
  45. var date = me.items.items[0].value;
  46. var time = me.items.items[1].value;
  47. me.items.items[3].setMinValue(date);
  48. if(me.items.items[3].value && date>me.items.items[3].value){
  49. me.items.items[3].setValue(null);
  50. }
  51. if(date!=null && date !='' && time!=null && time !='' && me.timeregex.test(time)){
  52. me.firstValue=Ext.Date.format(date,'Y-m-d')+" "+time+":00";
  53. this.value=me.firstValue;
  54. me.items.items[5].setValue(me.firstValue);
  55. }
  56. }
  57. }
  58. }));
  59. me.insert(1, Ext.create('erp.view.core.form.TimeMinuteField', {
  60. columnWidth: 0.2,
  61. fieldStyle: me.fieldStyle,
  62. readOnly:me.readOnly,
  63. allowBlank: me.allowBlank,
  64. value:me.minTime,
  65. listeners: {
  66. change: function(){
  67. var date = me.items.items[0].value;
  68. var time = me.items.items[1].value;
  69. if(date!=null && date !='' && time!=null && time !='' && me.timeregex.test(time)){
  70. me.firstValue=Ext.Date.format(date,'Y-m-d')+" "+time+":00";
  71. this.value=me.firstValue;
  72. me.items.items[5].setValue(me.firstValue);
  73. }
  74. }
  75. }
  76. }));
  77. me.insert(2,{
  78. xtype: 'label',
  79. text: ' -- ',
  80. paddings: '0 10 0 10'
  81. });
  82. me.insert(3, Ext.create('Ext.form.field.Date', {
  83. columnWidth: 0.3,
  84. fieldStyle: me.fieldStyle,
  85. readOnly:me.readOnly,
  86. value:me.maxDate,
  87. editable:false,
  88. allowBlank: me.allowBlank,
  89. listeners: {
  90. change: function(){
  91. var date = me.items.items[3].value;
  92. var time = me.items.items[4].value;
  93. me.items.items[0].setMaxValue(date);
  94. if(me.items.items[0].value && me.items.items[0].value>date){
  95. me.items.items[0].setValue(null);
  96. }
  97. if(date!=null && date !='' && time!=null && time !='' && me.timeregex.test(time)){
  98. me.secondvalue=Ext.Date.format(date,'Y-m-d')+" "+time+":00";
  99. Ext.getCmp(me.secondname).setValue(me.secondvalue);
  100. }
  101. }
  102. }
  103. }));
  104. me.insert(4, Ext.create('erp.view.core.form.TimeMinuteField', {
  105. columnWidth: 0.2,
  106. fieldStyle: me.fieldStyle,
  107. readOnly:me.readOnly,
  108. value:me.maxTime,
  109. allowBlank: me.allowBlank,
  110. listeners: {
  111. change: function(){
  112. var date = me.items.items[3].value;
  113. var time = me.items.items[4].value;
  114. if(date!=null && date !='' && time!=null && time !='' && me.timeregex.test(time)){
  115. me.secondvalue=Ext.Date.format(date,'Y-m-d')+" "+time+":00";
  116. Ext.getCmp(me.secondname).setValue(me.secondvalue);
  117. }
  118. }
  119. }
  120. }));
  121. me.insert(5,{
  122. xtype:'hidden',
  123. name:me.name,
  124. value:me.value
  125. });
  126. me.insert(6,{
  127. xtype: 'button',
  128. iconCls: 'x-button-icon-add',
  129. cls: 'x-btn-tb',
  130. width:20,
  131. hidden:me.readOnly==true,
  132. listeners:{
  133. mouseover:function(btn,e){
  134. btn.showMenu();
  135. }
  136. },
  137. menuAlign:'tl-bl?',
  138. menu:{
  139. xtype:'menu',
  140. width:100,
  141. items:[{
  142. text: '上午',
  143. iconCls: 'main-msg',
  144. listeners: {
  145. click: function(m){
  146. me.setDateFieldValue(1);
  147. }
  148. }
  149. },{
  150. text: '下午',
  151. iconCls: 'main-msg',
  152. width:80,
  153. listeners: {
  154. click: function(m){
  155. me.setDateFieldValue(2);
  156. }
  157. }
  158. },{
  159. text: '整天',
  160. width:80,
  161. iconCls: 'main-msg',
  162. listeners: {
  163. click: function(m){
  164. me.setDateFieldValue(3);
  165. }
  166. }
  167. },{
  168. text:'非整天',
  169. width:50,
  170. iconCls: 'main-msg',
  171. listeners: {
  172. click: function(m){
  173. me.setDateFieldValue(4);
  174. }
  175. }
  176. }]
  177. }
  178. });
  179. },
  180. setDateFieldValue: function(v){
  181. v = Number(v);
  182. var now=new Date(),
  183. minDate,
  184. maxDate,
  185. minTime,
  186. maxTime;
  187. var me = this;
  188. var baseData=this.getSystemSet();
  189. if(baseData.as_amstarttime){
  190. me.defaultamstarttime=baseData.as_amstarttime;
  191. me.defaultamendtime=baseData.as_amendtime;
  192. me.defaultpmstarttime=baseData.as_pmstarttime;
  193. me.defaultpmendtime=baseData.as_pmendtime;
  194. }
  195. switch (v) {
  196. case 1://上午
  197. minDate = now;
  198. maxDate = now;
  199. minTime =me.defaultamstarttime;
  200. maxTime =me.defaultamendtime;
  201. break;
  202. case 2://下午
  203. minDate = now;
  204. maxDate = now;
  205. minTime =me.defaultpmstarttime;
  206. maxTime =me.defaultpmendtime;
  207. break;
  208. case 3://整天
  209. minDate = now;
  210. maxDate = now;
  211. minTime =me.defaultamstarttime;
  212. maxTime =me.defaultpmendtime;
  213. break;
  214. case 4://非整天
  215. minDate = null;
  216. maxDate = null;
  217. minTime = null;
  218. maxTime = null;
  219. break;
  220. default:
  221. minDate = null;
  222. maxDate = null;
  223. minTime = null;
  224. maxTime = null;
  225. break;
  226. }
  227. me.items.items[0].setValue(minDate);
  228. me.items.items[1].setValue(minTime);
  229. me.items.items[3].setValue(maxDate);
  230. me.items.items[4].setValue(maxTime);
  231. },
  232. isValid: function(){
  233. return this.firstField.isValid();
  234. },
  235. setValue: function(value){
  236. this.firstField.setValue(value);
  237. },
  238. getValue: function(){
  239. return this.value;
  240. },
  241. listeners: {
  242. afterrender: function(){
  243. var tb = this.getEl().dom;
  244. if(tb.nodeName != 'TABLE') {
  245. tb.childNodes[1].style.height = 22;
  246. tb.childNodes[1].style.overflow = 'hidden';
  247. }
  248. }
  249. },
  250. hideScope: function(bool) {
  251. if(bool)
  252. this.items.items[0].hide();
  253. else
  254. this.items.items[0].show();
  255. },
  256. mregex: /^[1-9]\d{3}[0-1]\d$/,
  257. getSystemSet: function() {
  258. var result = false;
  259. Ext.Ajax.request({
  260. url : basePath + 'common/getFieldsData.action',
  261. async: false,
  262. params: {
  263. caller: 'AttendSystem',
  264. fields: 'as_amstarttime,as_amendtime,as_pmstarttime,as_pmendtime',
  265. condition:'1=1'
  266. },
  267. method : 'post',
  268. callback : function(opt, s, res){
  269. var r = new Ext.decode(res.responseText);
  270. if(r.exceptionInfo){
  271. showError(r.exceptionInfo);return;
  272. } else if(r.success && r.data){
  273. result = r.data;
  274. }
  275. }
  276. });
  277. return result;
  278. },
  279. });