assignments.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657
  1. Ext.ns('App');
  2. Ext.Loader.setConfig({
  3. enabled: true,
  4. disableCaching : true,
  5. paths : {
  6. 'App': '/ERP/app/projectscheduler'
  7. }
  8. });
  9. Ext.onReady(function() {
  10. Localize();
  11. function getUrlParam(name){
  12. var reg=new RegExp("(^|&)"+name+"=([^&]*)(&|$)");
  13. var r=window.location.search.substr(1).match(reg);
  14. if (r!=null) return decodeURI(r[2]);
  15. return null;
  16. };
  17. var formCondition = getUrlParam('formCondition');
  18. /*var prjName=getUrlParam('prjName');
  19. var StartDate = new Date(getUrlParam('startDate'));
  20. var EndDate = new Date(getUrlParam('endDate'));*/
  21. App.Assign.init(formCondition);
  22. Ext.QuickTips.init();
  23. });
  24. App.Assign = {
  25. init : function(formCondition) {
  26. var startdate=Ext.Date.add(new Date(), Ext.Date.DAY, -20);
  27. var enddate = Ext.Date.add(new Date(), Ext.Date.DAY, 7);
  28. var datechanged=false;
  29. var dataloaded =true;
  30. Ext.define('Employee', {
  31. extend : 'Sch.model.Resource',
  32. fields:[{name:'efforts'}]
  33. });
  34. var resourceStore = Ext.create('Sch.data.ResourceTreeStore', {
  35. model:'Employee',
  36. autoLoad:true,
  37. proxy: {
  38. type: 'ajax',
  39. extraParams :{
  40. startdate:startdate,
  41. enddate : enddate
  42. },
  43. api: {
  44. //create:basePath+ 'market/updateAssignment.action',
  45. read: basePath+'/market/getEmployeeForTask.action'
  46. //update: basePath+'market/updateAssignment.action',
  47. //destroy: basePath+'market/deleteAssignment.action'
  48. },
  49. reader: {
  50. type: 'json'
  51. },
  52. writer:{
  53. type:'json'
  54. },
  55. async:false
  56. }
  57. });
  58. Ext.define('assignmentevent', {
  59. extend : 'Sch.model.Event',
  60. idProperty : 'id',
  61. //startDateField : 'ra_startdate',
  62. //endDateField : 'ra_enddate',
  63. // just rename the fields
  64. // resourceIdField : 'ra_emid',
  65. nameField : 'ra_taskname',
  66. fields : [
  67. // completely change the definition of fields
  68. // { name: 'ra_startdate', type: 'date'},//, dateFormat : 'Y-m-d' },
  69. // { name: 'ra_enddate', type: 'date'}, //dateFormat : 'Y-m-d' },
  70. //{ name: 'ra_emid', type: 'int' },
  71. { name: 'ra_taskname', type: 'string' },
  72. { name: 'ra_taskid', type: 'string' },
  73. { name: 'ra_taskpercentdone', type: 'number' },
  74. { name: 'ra_projectname', type: 'string' },
  75. { name: 'id',type:'int' }
  76. ]
  77. });
  78. var taskStore = Ext.create('Sch.data.EventStore', {
  79. model:'assignmentevent',
  80. autoLoad:true,
  81. proxy: {
  82. type: 'ajax',
  83. extraParams :{
  84. startdate:startdate,
  85. enddate : enddate
  86. },
  87. api: {
  88. read: basePath+'market/getEmployeeTasks.action'
  89. },
  90. reader: {
  91. type: 'json'
  92. },
  93. writer:{
  94. type:'json'
  95. },
  96. async:false
  97. }
  98. });
  99. Ext.define('Line', {
  100. extend : 'Ext.data.Model',
  101. fields: [
  102. 'Date',
  103. 'Text',
  104. 'Cls'
  105. ]
  106. });
  107. var lineStore = Ext.create('Ext.data.JsonStore', {
  108. model : 'Line',
  109. data : [
  110. {
  111. Date : startdate,
  112. Text : '开始日期',
  113. Cls : 'start'
  114. },{
  115. Date : enddate,
  116. Text : '结束日期',
  117. Cls : 'start'
  118. }
  119. ]
  120. });
  121. var taskTemplate = new Ext.XTemplate(
  122. '<span class="taskName">{ra_taskname}</span><br/>' +
  123. '<span class="startTime">开始时间:{[Ext.Date.format(Values.StartDate, "y-m-d g:i")]}</span><br/>' +
  124. '<span class="startTime">结束时间:{[Ext.Date.format(Values.EndDate, "y-m-d g:i")]}</span>'
  125. /*'<span class="startTime">{[Ext.Date.format(values.StartDate, "y-m-d g:i")]}</span><br/>' +
  126. '<span class="startTime">{[Ext.Date.format(values.StartDate, "y-m-d g:i")]}</span>' */
  127. );
  128. var tree = Ext.create('Sch.panel.SchedulerTree', {
  129. title : '员工任务安排',
  130. readOnly : true,
  131. rowHeight : 32,
  132. eventStore : taskStore,
  133. resourceStore : resourceStore,
  134. viewPreset : 'weekAndDayLetter',
  135. startDate : startdate,//Ext.Date.add(new Date(), Ext.Date.DAY, -1),
  136. endDate : enddate,//Ext.Date.add(new Date(), Ext.Date.DAY, 7),
  137. multiSelect : true,
  138. /* eventRenderer : function(flight, resource, meta) {
  139. if (resource.data.leaf) {
  140. meta.cls = 'leaf';
  141. return flight.get('name');
  142. } else {
  143. meta.cls = 'group';
  144. return '&nbsp;';
  145. }
  146. },*/
  147. // Experimental
  148. layout : { type : 'hbox', align : 'stretch' },
  149. //tooltipTpl : new Ext.XTemplate('{[Ext.Date.format(values.StartDate, "y-m-d g:i")]}' +' : '+ '{[Ext.Date.format(values.EndtDate, "y-m-d g:i")}').compile(),
  150. //eventBodyTemplate : taskTemplate,
  151. // Experimental
  152. lockedGridConfig : {
  153. resizeHandles : 'e',
  154. resizable: { pinned : true },
  155. width : 230
  156. },
  157. dateChanged : false,
  158. // Experimental
  159. schedulerConfig : {
  160. scroll : true,
  161. columnLines : false,
  162. flex : 1
  163. },
  164. /* onEventCreated : function(newFlight) {
  165. newFlight.set('Name', 'New departure');
  166. },*/
  167. columnLines : true,
  168. rowLines : true,
  169. columns: [
  170. {
  171. xtype : 'treecolumn', //this is so we know which column will show the tree
  172. text : '员工姓名',
  173. width : 120,
  174. sortable : true,
  175. dataIndex : 'Name'
  176. },
  177. {
  178. text : '本期工作量(天)',
  179. width : 110,
  180. sortable : true,
  181. dataIndex : 'efforts'
  182. }
  183. ],
  184. listeners:{
  185. eventdblclick:function(tree,record){
  186. var keyValue=record.data.ra_taskid;
  187. var formCondition = "id IS" + keyValue ;
  188. var gridCondition="ra_taskid IS"+keyValue;
  189. var panel = Ext.getCmp("id=" +keyValue);
  190. var caller= 'MProjectTaskGanttEdit';
  191. var url= basePath+'jsps/crm/marketmgr/marketresearch/task.jsp';
  192. var main = parent.Ext.getCmp("content-panel");
  193. if(!panel){
  194. var title = "";
  195. panel = {
  196. //title : main.getActiveTab().title+'('+title+')',
  197. title:'项目任务: ('+keyValue+')',
  198. tag : 'iframe',
  199. tabConfig:{tooltip:'项目任务('+title+')'},
  200. frame : true,
  201. border : false,
  202. layout : 'fit',
  203. iconCls : 'x-tree-icon-tab-tab',
  204. html : '<iframe id="iframe_maindetail_'+caller+"_"+keyValue+'" src="'+url+'?formCondition='+formCondition+'&gridCondition='+gridCondition+'" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>',
  205. closable : true,
  206. listeners : {
  207. close : function(){
  208. main.setActiveTab(main.getActiveTab().id);
  209. }
  210. }
  211. };
  212. this.openTab(panel,"id=" + keyValue);
  213. }
  214. else{
  215. this.openTab(panel,"id=" + keyValue);
  216. // main.setActiveTab(panel);
  217. }
  218. }
  219. },
  220. plugins : [
  221. Ext.create("Sch.plugin.Zones", {
  222. store : Ext.create('Ext.data.JsonStore', {
  223. model : 'Sch.model.Range',
  224. data : [
  225. {
  226. startDate : Ext.Date.add(startdate, Ext.Date.DAY, -5),
  227. endDate : Ext.Date.add(startdate, Ext.Date.DAY, -1),
  228. Cls : 'sch-cloud-thunder'
  229. },
  230. {
  231. startDate : Ext.Date.add(enddate, Ext.Date.DAY, 1),
  232. endDate : Ext.Date.add(enddate, Ext.Date.DAY, 7),
  233. Cls : 'sch-cloud-sun'
  234. }
  235. ]
  236. })
  237. }),
  238. Ext.create("Sch.plugin.Lines", {
  239. innerTpl :'ad', ///'<span class="line-text">{Text}</span>',
  240. store : lineStore
  241. })
  242. ],
  243. viewConfig : {
  244. /* getRowClass : function(r) {
  245. if (r.get('id') === 3 || r.parentNode.get('id') === 3) {
  246. return 'some-grouping-class';
  247. }
  248. if (r.get('id') === 9 || r.parentNode.get('id') === 9) {
  249. return 'some-other-grouping-class';
  250. }
  251. }*/
  252. },
  253. openTab : function (panel,id){
  254. var o = (typeof panel == "string" ? panel : id || panel.id);
  255. var main = parent.Ext.getCmp("content-panel");
  256. var tab = main.getComponent(o);
  257. if (tab) {
  258. main.setActiveTab(tab);
  259. } else if(typeof panel!="string"){
  260. panel.id = o;
  261. var p = main.add(panel);
  262. main.setActiveTab(p);
  263. }
  264. } ,
  265. tbar : [
  266. '查找员工: ',
  267. {
  268. xtype : 'triggerfield',
  269. emptyText : '请输入员工姓名.......',
  270. triggerCls : 'x-form-clear-trigger',
  271. onTriggerClick : function() {
  272. this.setValue('')
  273. },
  274. listeners : {
  275. change : function (field, newValue, oldValue) {
  276. if (newValue) {
  277. var regexps = Ext.Array.map(newValue.split(/\s+/), function (token) { return new RegExp(Ext.String.escapeRegex(token), 'i') })
  278. var length = regexps.length
  279. resourceStore.filterTreeBy(function (resource) {
  280. var name = resource.get('Name')
  281. for (var i = 0; i < length; i++)
  282. if (!regexps[ i ].test(name)) return false
  283. return true
  284. })
  285. } else {
  286. resourceStore.clearTreeFilter()
  287. }
  288. },
  289. specialkey : function(field, e, t) {
  290. if (e.keyCode === e.ESC) field.reset();
  291. }
  292. }
  293. },
  294. ' ',
  295. {
  296. xtype: 'buttongroup',
  297. title: '显示精度',
  298. height: 75,
  299. columns: 4,
  300. items: [
  301. {
  302. text : '小时',
  303. toggleGroup : 'presets',
  304. enableToggle : true,
  305. iconCls : 'icon-calendar',
  306. handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
  307. /*handler : function() {
  308. startdate=this.up('toolbar').queryById('fromdate').value;
  309. enddate=this.up('toolbar').queryById('enddate').value;
  310. tree.switchViewPreset('hourAndDay', new Date(startdate), new Date(enddate));
  311. }*/
  312. },
  313. {
  314. text : '天',
  315. toggleGroup : 'presets',
  316. enableToggle : true,
  317. iconCls : 'icon-calendar',
  318. pressed : true,
  319. handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'weekAndDay');dataloaded=true}
  320. /*handler : function() {
  321. tree.dateChanged=false;
  322. tree.switchViewPreset('weekAndDay', new Date(startdate), new Date(enddate));
  323. taskStore.proxy.extraParams.startdate=startdate;
  324. taskStore.proxy.extraParams.enddate=enddate;
  325. taskStore.load();
  326. }*/
  327. },
  328. {
  329. text : '周(一)',
  330. toggleGroup : 'presets',
  331. enableToggle : true,
  332. iconCls : 'icon-calendar',
  333. handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'weekAndMonth');dataloaded=true}
  334. /* handler : function() {
  335. tree.dateChanged=false;
  336. startdate=this.up('toolbar').queryById('fromdate').value;
  337. enddate=this.up('toolbar').queryById('enddate').value;
  338. tree.switchViewPreset('weekAndMonth', new Date(startdate), new Date(enddate));
  339. }*/
  340. },
  341. {
  342. text : '周(二)',
  343. toggleGroup : 'presets',
  344. enableToggle : true,
  345. iconCls : 'icon-calendar',
  346. handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'weekAndDayLetter');dataloaded=true}
  347. /*handler : function() {
  348. startdate=this.up('toolbar').queryById('fromdate').value;
  349. enddate=this.up('toolbar').queryById('enddate').value;
  350. tree.switchViewPreset('weekAndDayLetter', new Date(startdate), new Date(enddate));
  351. }*/
  352. },
  353. {
  354. text : '周(三)',
  355. toggleGroup : 'presets',
  356. enableToggle : true,
  357. iconCls : 'icon-calendar',
  358. handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'weekDateAndMonth');dataloaded=true}
  359. /*handler : function() {
  360. startdate=this.up('toolbar').queryById('fromdate').value;
  361. enddate=this.up('toolbar').queryById('enddate').value;
  362. tree.switchViewPreset('weekDateAndMonth', new Date(startdate), new Date(enddate));
  363. }*/
  364. },
  365. {
  366. text : '月',
  367. toggleGroup : 'presets',
  368. iconCls : 'icon-calendar',
  369. handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'monthAndYear');dataloaded=true}
  370. /*handler : function() {
  371. startdate=this.up('toolbar').queryById('fromdate').value;
  372. enddate=this.up('toolbar').queryById('enddate').value;
  373. tree.switchViewPreset('monthAndYear', new Date(startdate), new Date(enddate));
  374. }*/
  375. },
  376. {
  377. text : '年',
  378. enableToggle : true,
  379. toggleGroup : 'presets',
  380. iconCls : 'icon-calendar',
  381. handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'year');dataloaded=true}
  382. }
  383. ]
  384. },
  385. '->',
  386. {
  387. xtype: 'buttongroup',
  388. title: '选择固定任务期间',
  389. height:75,
  390. columns: 5,
  391. items: [
  392. {
  393. text : '今天',
  394. toggleGroup : 'period',
  395. enableToggle : true,
  396. iconCls : 'icon-calendar',
  397. handler : function(){
  398. a=Ext.getCmp('fromdate');
  399. b=Ext.getCmp('enddate');
  400. start=new Date();
  401. end=Ext.Date.add(new Date(), Ext.Date.DAY, 1);
  402. refreshCalendar(start,end,a,b)
  403. }
  404. //handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
  405. },{
  406. text : '明天',
  407. toggleGroup : 'period',
  408. enableToggle : true,
  409. iconCls : 'icon-calendar',
  410. handler : function(){
  411. a=Ext.getCmp('fromdate');
  412. b=Ext.getCmp('enddate');
  413. start=Ext.Date.add(new Date(), Ext.Date.DAY, 1);
  414. end=Ext.Date.add(new Date(), Ext.Date.DAY, 2);
  415. refreshCalendar(start,end,a,b)
  416. }
  417. //handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
  418. },{
  419. text : '昨天',
  420. toggleGroup : 'period',
  421. enableToggle : true,
  422. iconCls : 'icon-calendar',
  423. handler : function(){
  424. b=Ext.getCmp('enddate');
  425. a=Ext.getCmp('fromdate');
  426. start=Ext.Date.add(new Date(), Ext.Date.DAY,-1);
  427. end= new Date();
  428. refreshCalendar(start,end,a,b)
  429. }
  430. //handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
  431. },{
  432. text : '本周',
  433. toggleGroup : 'period',
  434. enableToggle : true,
  435. iconCls : 'icon-calendar',
  436. handler : function(){
  437. v=new Date();
  438. days=Ext.Date.getDayOfYear(v);
  439. weeks=Ext.Date.getWeekOfYear(v)
  440. firstdate=Ext.Date.add(v, Ext.Date.DAY,-days)
  441. firstDayofyear = Ext.Date.getFirstDayOfMonth(firstdate);
  442. start=Ext.Date.add(firstdate, Ext.Date.DAY, (weeks-1)*7-firstDayofyear+1);
  443. end=Ext.Date.add(firstdate, Ext.Date.DAY, weeks*7-firstDayofyear+1)
  444. a=Ext.getCmp('fromdate');
  445. b=Ext.getCmp('enddate');
  446. refreshCalendar(start,end,a,b)
  447. }
  448. //handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
  449. },{
  450. text : '上周',
  451. toggleGroup : 'period',
  452. enableToggle : true,
  453. iconCls : 'icon-calendar',
  454. handler : function(){
  455. v=new Date();
  456. days=Ext.Date.getDayOfYear(v);
  457. weeks=Ext.Date.getWeekOfYear(v)
  458. firstdate=Ext.Date.add(v, Ext.Date.DAY,-days)
  459. firstDayofyear = Ext.Date.getFirstDayOfMonth(firstdate);
  460. start=Ext.Date.add(firstdate, Ext.Date.DAY, (weeks-2)*7-firstDayofyear+1);
  461. end=Ext.Date.add(firstdate, Ext.Date.DAY, (weeks-1)*7-firstDayofyear+1)
  462. a=Ext.getCmp('fromdate');
  463. b=Ext.getCmp('enddate');
  464. refreshCalendar(start,end,a,b)
  465. }
  466. //handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
  467. },{
  468. text : '下周',
  469. toggleGroup : 'period',
  470. enableToggle : true,
  471. iconCls : 'icon-calendar',
  472. handler : function(){
  473. v=new Date();
  474. days=Ext.Date.getDayOfYear(v);
  475. weeks=Ext.Date.getWeekOfYear(v)
  476. firstdate=Ext.Date.add(v, Ext.Date.DAY,-days)
  477. firstDayofyear = Ext.Date.getFirstDayOfMonth(firstdate);
  478. start=Ext.Date.add(firstdate, Ext.Date.DAY, (weeks)*7-firstDayofyear+1);
  479. end=Ext.Date.add(firstdate, Ext.Date.DAY, (weeks+1)*7-firstDayofyear+1)
  480. a=Ext.getCmp('fromdate');
  481. b=Ext.getCmp('enddate');
  482. refreshCalendar(start,end,a,b)
  483. }
  484. //handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
  485. },{
  486. text : '本月',
  487. toggleGroup : 'period',
  488. enableToggle : true,
  489. iconCls : 'icon-calendar',
  490. handler : function(){
  491. a=Ext.getCmp('fromdate');
  492. b=Ext.getCmp('enddate');
  493. v=new Date();
  494. start=Ext.Date.getFirstDateOfMonth(v);
  495. end=Ext.Date.add(Ext.Date.getLastDateOfMonth(v), Ext.Date.DAY, 1);
  496. refreshCalendar(start,end,a,b)
  497. }
  498. //handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
  499. },{
  500. text : '上月',
  501. toggleGroup : 'period',
  502. enableToggle : true,
  503. iconCls : 'icon-calendar',
  504. handler : function(){
  505. a=Ext.getCmp('fromdate');
  506. b=Ext.getCmp('enddate');
  507. m=Ext.Date.getFirstDateOfMonth(new Date());
  508. v=Ext.Date.add(m, Ext.Date.DAY, -2);
  509. start=Ext.Date.getFirstDateOfMonth(v);
  510. end=Ext.Date.add(Ext.Date.getLastDateOfMonth(v), Ext.Date.DAY, 1);
  511. refreshCalendar(start,end,a,b)
  512. }
  513. //handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
  514. },{
  515. text : '下月',
  516. toggleGroup : 'period',
  517. enableToggle : true,
  518. iconCls : 'icon-calendar',
  519. handler : function(){
  520. a=Ext.getCmp('fromdate');
  521. b=Ext.getCmp('enddate');
  522. m=Ext.Date.getLastDateOfMonth(new Date());
  523. v=Ext.Date.add(m, Ext.Date.DAY, 2);
  524. start=Ext.Date.getFirstDateOfMonth(v);
  525. end=Ext.Date.add(Ext.Date.getLastDateOfMonth(v), Ext.Date.DAY, 1);
  526. refreshCalendar(start,end,a,b)
  527. }
  528. //handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
  529. }
  530. ]
  531. },
  532. {
  533. xtype: 'buttongroup',
  534. title: '选择任务时间范围',
  535. columns : 1,
  536. defaults:{
  537. scale : "small",
  538. labelWidth:60
  539. },
  540. items: [
  541. {
  542. id:'fromdate',
  543. xtype: 'datefield',
  544. fieldLabel :'开始日期',
  545. value:startdate,
  546. listeners : {
  547. change : function (field, newValue, oldValue) {
  548. if(Date.parse(newValue) > Date.parse(enddate)){
  549. alert("结束日期一定要比开始日期大!!")
  550. field.setValue(oldValue);
  551. }else{
  552. startdate=newValue;
  553. tree.dateChanged=true;
  554. dataloaded =false;
  555. }
  556. }
  557. }
  558. },{
  559. id:'enddate',
  560. xtype: 'datefield',
  561. fieldLabel :'结束日期',
  562. value : enddate,
  563. listeners : {
  564. change : function (field, newValue, oldValue) {
  565. if(Date.parse(newValue) < Date.parse(startdate)){
  566. alert("结束日期一定要比开始日期大!!")
  567. field.setValue(oldValue);
  568. }else{
  569. enddate=newValue;
  570. tree.dateChanged=true;
  571. dataloaded =false;
  572. }
  573. }
  574. }
  575. }]
  576. }
  577. ]
  578. });
  579. var vp = new Ext.Viewport({
  580. layout : 'fit',
  581. items : [tree]
  582. });
  583. function refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,datemode){
  584. if(!dataloaded){
  585. taskStore.proxy.extraParams.startdate=startdate;
  586. taskStore.proxy.extraParams.enddate=enddate;
  587. resourceStore.proxy.extraParams.startdate=startdate;
  588. resourceStore.proxy.extraParams.enddate=enddate;
  589. resourceStore.load();
  590. taskStore.load();
  591. lineStore.clearData();
  592. lineStore.add([
  593. {
  594. Date : startdate,
  595. Text : '开始日期',
  596. Cls : 'start'
  597. },{
  598. Date : enddate,
  599. Text : '结束日期',
  600. Cls : 'start'
  601. }
  602. ])
  603. dataloaded=true;
  604. }
  605. tree.startDate=startdate;
  606. tree.endDate=enddate;
  607. tree.switchViewPreset(datemode, new Date(startdate), new Date(enddate));
  608. };
  609. function refreshCalendar(start,end,a,b){
  610. if(start<b.value){
  611. a.setValue(start);
  612. b.setValue(end)
  613. }else{
  614. b.setValue(end);
  615. a.setValue(start);
  616. }
  617. }
  618. }
  619. };