| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657 |
- Ext.ns('App');
- Ext.Loader.setConfig({
- enabled: true,
- disableCaching : true,
- paths : {
- 'App': '/ERP/app/projectscheduler'
- }
- });
- Ext.onReady(function() {
- Localize();
- function getUrlParam(name){
- var reg=new RegExp("(^|&)"+name+"=([^&]*)(&|$)");
- var r=window.location.search.substr(1).match(reg);
- if (r!=null) return decodeURI(r[2]);
- return null;
- };
- var formCondition = getUrlParam('formCondition');
- /*var prjName=getUrlParam('prjName');
- var StartDate = new Date(getUrlParam('startDate'));
- var EndDate = new Date(getUrlParam('endDate'));*/
- App.Assign.init(formCondition);
- Ext.QuickTips.init();
-
- });
- App.Assign = {
- init : function(formCondition) {
- var startdate=Ext.Date.add(new Date(), Ext.Date.DAY, -20);
- var enddate = Ext.Date.add(new Date(), Ext.Date.DAY, 7);
- var datechanged=false;
- var dataloaded =true;
- Ext.define('Employee', {
- extend : 'Sch.model.Resource',
- fields:[{name:'efforts'}]
- });
- var resourceStore = Ext.create('Sch.data.ResourceTreeStore', {
- model:'Employee',
- autoLoad:true,
- proxy: {
- type: 'ajax',
- extraParams :{
- startdate:startdate,
- enddate : enddate
- },
- api: {
- //create:basePath+ 'market/updateAssignment.action',
- read: basePath+'/market/getEmployeeForTask.action'
- //update: basePath+'market/updateAssignment.action',
- //destroy: basePath+'market/deleteAssignment.action'
- },
- reader: {
- type: 'json'
- },
- writer:{
- type:'json'
- },
- async:false
- }
- });
-
- Ext.define('assignmentevent', {
- extend : 'Sch.model.Event',
- idProperty : 'id',
- //startDateField : 'ra_startdate',
- //endDateField : 'ra_enddate',
-
- // just rename the fields
- // resourceIdField : 'ra_emid',
- nameField : 'ra_taskname',
-
- fields : [
- // completely change the definition of fields
- // { name: 'ra_startdate', type: 'date'},//, dateFormat : 'Y-m-d' },
- // { name: 'ra_enddate', type: 'date'}, //dateFormat : 'Y-m-d' },
- //{ name: 'ra_emid', type: 'int' },
- { name: 'ra_taskname', type: 'string' },
- { name: 'ra_taskid', type: 'string' },
- { name: 'ra_taskpercentdone', type: 'number' },
- { name: 'ra_projectname', type: 'string' },
- { name: 'id',type:'int' }
- ]
-
- });
- var taskStore = Ext.create('Sch.data.EventStore', {
- model:'assignmentevent',
- autoLoad:true,
- proxy: {
- type: 'ajax',
- extraParams :{
- startdate:startdate,
- enddate : enddate
- },
- api: {
- read: basePath+'market/getEmployeeTasks.action'
- },
- reader: {
- type: 'json'
- },
- writer:{
- type:'json'
- },
- async:false
- }
- });
- Ext.define('Line', {
- extend : 'Ext.data.Model',
- fields: [
- 'Date',
- 'Text',
- 'Cls'
- ]
- });
- var lineStore = Ext.create('Ext.data.JsonStore', {
- model : 'Line',
- data : [
- {
- Date : startdate,
- Text : '开始日期',
- Cls : 'start'
- },{
- Date : enddate,
- Text : '结束日期',
- Cls : 'start'
- }
- ]
- });
- var taskTemplate = new Ext.XTemplate(
- '<span class="taskName">{ra_taskname}</span><br/>' +
- '<span class="startTime">开始时间:{[Ext.Date.format(Values.StartDate, "y-m-d g:i")]}</span><br/>' +
- '<span class="startTime">结束时间:{[Ext.Date.format(Values.EndDate, "y-m-d g:i")]}</span>'
- /*'<span class="startTime">{[Ext.Date.format(values.StartDate, "y-m-d g:i")]}</span><br/>' +
- '<span class="startTime">{[Ext.Date.format(values.StartDate, "y-m-d g:i")]}</span>' */
- );
- var tree = Ext.create('Sch.panel.SchedulerTree', {
- title : '员工任务安排',
- readOnly : true,
- rowHeight : 32,
- eventStore : taskStore,
- resourceStore : resourceStore,
-
- viewPreset : 'weekAndDayLetter',
- startDate : startdate,//Ext.Date.add(new Date(), Ext.Date.DAY, -1),
- endDate : enddate,//Ext.Date.add(new Date(), Ext.Date.DAY, 7),
- multiSelect : true,
- /* eventRenderer : function(flight, resource, meta) {
- if (resource.data.leaf) {
- meta.cls = 'leaf';
- return flight.get('name');
- } else {
- meta.cls = 'group';
- return ' ';
- }
- },*/
-
- // Experimental
- layout : { type : 'hbox', align : 'stretch' },
- //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(),
- //eventBodyTemplate : taskTemplate,
- // Experimental
- lockedGridConfig : {
- resizeHandles : 'e',
- resizable: { pinned : true },
- width : 230
- },
- dateChanged : false,
- // Experimental
- schedulerConfig : {
- scroll : true,
- columnLines : false,
- flex : 1
- },
- /* onEventCreated : function(newFlight) {
- newFlight.set('Name', 'New departure');
- },*/
- columnLines : true,
- rowLines : true,
- columns: [
- {
- xtype : 'treecolumn', //this is so we know which column will show the tree
- text : '员工姓名',
- width : 120,
- sortable : true,
- dataIndex : 'Name'
- },
- {
- text : '本期工作量(天)',
- width : 110,
- sortable : true,
- dataIndex : 'efforts'
- }
- ],
- listeners:{
- eventdblclick:function(tree,record){
- var keyValue=record.data.ra_taskid;
- var formCondition = "id IS" + keyValue ;
- var gridCondition="ra_taskid IS"+keyValue;
- var panel = Ext.getCmp("id=" +keyValue);
- var caller= 'MProjectTaskGanttEdit';
- var url= basePath+'jsps/crm/marketmgr/marketresearch/task.jsp';
- var main = parent.Ext.getCmp("content-panel");
- if(!panel){
- var title = "";
- panel = {
- //title : main.getActiveTab().title+'('+title+')',
- title:'项目任务: ('+keyValue+')',
- tag : 'iframe',
- tabConfig:{tooltip:'项目任务('+title+')'},
- frame : true,
- border : false,
- layout : 'fit',
- iconCls : 'x-tree-icon-tab-tab',
- html : '<iframe id="iframe_maindetail_'+caller+"_"+keyValue+'" src="'+url+'?formCondition='+formCondition+'&gridCondition='+gridCondition+'" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>',
- closable : true,
- listeners : {
- close : function(){
- main.setActiveTab(main.getActiveTab().id);
- }
- }
- };
- this.openTab(panel,"id=" + keyValue);
- }
- else{
- this.openTab(panel,"id=" + keyValue);
- // main.setActiveTab(panel);
- }
- }
- },
- plugins : [
- Ext.create("Sch.plugin.Zones", {
- store : Ext.create('Ext.data.JsonStore', {
- model : 'Sch.model.Range',
-
- data : [
- {
- startDate : Ext.Date.add(startdate, Ext.Date.DAY, -5),
- endDate : Ext.Date.add(startdate, Ext.Date.DAY, -1),
- Cls : 'sch-cloud-thunder'
- },
- {
- startDate : Ext.Date.add(enddate, Ext.Date.DAY, 1),
- endDate : Ext.Date.add(enddate, Ext.Date.DAY, 7),
- Cls : 'sch-cloud-sun'
- }
- ]
- })
- }),
- Ext.create("Sch.plugin.Lines", {
- innerTpl :'ad', ///'<span class="line-text">{Text}</span>',
- store : lineStore
- })
- ],
- viewConfig : {
- /* getRowClass : function(r) {
- if (r.get('id') === 3 || r.parentNode.get('id') === 3) {
- return 'some-grouping-class';
- }
- if (r.get('id') === 9 || r.parentNode.get('id') === 9) {
- return 'some-other-grouping-class';
- }
- }*/
- },
- 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 (tab) {
- main.setActiveTab(tab);
- } else if(typeof panel!="string"){
- panel.id = o;
- var p = main.add(panel);
- main.setActiveTab(p);
- }
- } ,
- tbar : [
- '查找员工: ',
- {
- xtype : 'triggerfield',
- emptyText : '请输入员工姓名.......',
-
- triggerCls : 'x-form-clear-trigger',
-
- onTriggerClick : function() {
- this.setValue('')
- },
-
- listeners : {
- change : function (field, newValue, oldValue) {
- if (newValue) {
- var regexps = Ext.Array.map(newValue.split(/\s+/), function (token) { return new RegExp(Ext.String.escapeRegex(token), 'i') })
- var length = regexps.length
-
- resourceStore.filterTreeBy(function (resource) {
- var name = resource.get('Name')
- for (var i = 0; i < length; i++)
- if (!regexps[ i ].test(name)) return false
-
- return true
- })
- } else {
- resourceStore.clearTreeFilter()
- }
- },
-
- specialkey : function(field, e, t) {
- if (e.keyCode === e.ESC) field.reset();
- }
- }
- },
- ' ',
- {
- xtype: 'buttongroup',
- title: '显示精度',
- height: 75,
- columns: 4,
- items: [
- {
- text : '小时',
- toggleGroup : 'presets',
- enableToggle : true,
- iconCls : 'icon-calendar',
- handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
- /*handler : function() {
- startdate=this.up('toolbar').queryById('fromdate').value;
- enddate=this.up('toolbar').queryById('enddate').value;
- tree.switchViewPreset('hourAndDay', new Date(startdate), new Date(enddate));
- }*/
- },
- {
- text : '天',
- toggleGroup : 'presets',
- enableToggle : true,
- iconCls : 'icon-calendar',
- pressed : true,
- handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'weekAndDay');dataloaded=true}
- /*handler : function() {
- tree.dateChanged=false;
- tree.switchViewPreset('weekAndDay', new Date(startdate), new Date(enddate));
- taskStore.proxy.extraParams.startdate=startdate;
- taskStore.proxy.extraParams.enddate=enddate;
- taskStore.load();
- }*/
- },
- {
- text : '周(一)',
- toggleGroup : 'presets',
- enableToggle : true,
- iconCls : 'icon-calendar',
- handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'weekAndMonth');dataloaded=true}
- /* handler : function() {
- tree.dateChanged=false;
- startdate=this.up('toolbar').queryById('fromdate').value;
- enddate=this.up('toolbar').queryById('enddate').value;
- tree.switchViewPreset('weekAndMonth', new Date(startdate), new Date(enddate));
- }*/
- },
- {
- text : '周(二)',
- toggleGroup : 'presets',
- enableToggle : true,
- iconCls : 'icon-calendar',
- handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'weekAndDayLetter');dataloaded=true}
- /*handler : function() {
- startdate=this.up('toolbar').queryById('fromdate').value;
- enddate=this.up('toolbar').queryById('enddate').value;
- tree.switchViewPreset('weekAndDayLetter', new Date(startdate), new Date(enddate));
- }*/
- },
- {
- text : '周(三)',
- toggleGroup : 'presets',
- enableToggle : true,
- iconCls : 'icon-calendar',
- handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'weekDateAndMonth');dataloaded=true}
- /*handler : function() {
- startdate=this.up('toolbar').queryById('fromdate').value;
- enddate=this.up('toolbar').queryById('enddate').value;
- tree.switchViewPreset('weekDateAndMonth', new Date(startdate), new Date(enddate));
- }*/
- },
- {
- text : '月',
- toggleGroup : 'presets',
- iconCls : 'icon-calendar',
- handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'monthAndYear');dataloaded=true}
- /*handler : function() {
- startdate=this.up('toolbar').queryById('fromdate').value;
- enddate=this.up('toolbar').queryById('enddate').value;
- tree.switchViewPreset('monthAndYear', new Date(startdate), new Date(enddate));
- }*/
- },
- {
- text : '年',
- enableToggle : true,
- toggleGroup : 'presets',
- iconCls : 'icon-calendar',
- handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'year');dataloaded=true}
- }
- ]
- },
- '->',
- {
- xtype: 'buttongroup',
- title: '选择固定任务期间',
- height:75,
- columns: 5,
- items: [
- {
- text : '今天',
- toggleGroup : 'period',
- enableToggle : true,
- iconCls : 'icon-calendar',
- handler : function(){
- a=Ext.getCmp('fromdate');
- b=Ext.getCmp('enddate');
- start=new Date();
- end=Ext.Date.add(new Date(), Ext.Date.DAY, 1);
- refreshCalendar(start,end,a,b)
- }
- //handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
-
- },{
- text : '明天',
- toggleGroup : 'period',
- enableToggle : true,
- iconCls : 'icon-calendar',
- handler : function(){
- a=Ext.getCmp('fromdate');
- b=Ext.getCmp('enddate');
- start=Ext.Date.add(new Date(), Ext.Date.DAY, 1);
- end=Ext.Date.add(new Date(), Ext.Date.DAY, 2);
- refreshCalendar(start,end,a,b)
- }
- //handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
-
- },{
- text : '昨天',
- toggleGroup : 'period',
- enableToggle : true,
- iconCls : 'icon-calendar',
- handler : function(){
- b=Ext.getCmp('enddate');
- a=Ext.getCmp('fromdate');
- start=Ext.Date.add(new Date(), Ext.Date.DAY,-1);
- end= new Date();
- refreshCalendar(start,end,a,b)
- }
- //handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
-
- },{
- text : '本周',
- toggleGroup : 'period',
- enableToggle : true,
- iconCls : 'icon-calendar',
- handler : function(){
- v=new Date();
- days=Ext.Date.getDayOfYear(v);
- weeks=Ext.Date.getWeekOfYear(v)
- firstdate=Ext.Date.add(v, Ext.Date.DAY,-days)
- firstDayofyear = Ext.Date.getFirstDayOfMonth(firstdate);
- start=Ext.Date.add(firstdate, Ext.Date.DAY, (weeks-1)*7-firstDayofyear+1);
- end=Ext.Date.add(firstdate, Ext.Date.DAY, weeks*7-firstDayofyear+1)
- a=Ext.getCmp('fromdate');
- b=Ext.getCmp('enddate');
- refreshCalendar(start,end,a,b)
-
- }
- //handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
-
- },{
- text : '上周',
- toggleGroup : 'period',
- enableToggle : true,
- iconCls : 'icon-calendar',
- handler : function(){
- v=new Date();
- days=Ext.Date.getDayOfYear(v);
- weeks=Ext.Date.getWeekOfYear(v)
- firstdate=Ext.Date.add(v, Ext.Date.DAY,-days)
- firstDayofyear = Ext.Date.getFirstDayOfMonth(firstdate);
- start=Ext.Date.add(firstdate, Ext.Date.DAY, (weeks-2)*7-firstDayofyear+1);
- end=Ext.Date.add(firstdate, Ext.Date.DAY, (weeks-1)*7-firstDayofyear+1)
- a=Ext.getCmp('fromdate');
- b=Ext.getCmp('enddate');
- refreshCalendar(start,end,a,b)
- }
-
- //handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
-
- },{
- text : '下周',
- toggleGroup : 'period',
- enableToggle : true,
- iconCls : 'icon-calendar',
- handler : function(){
- v=new Date();
- days=Ext.Date.getDayOfYear(v);
- weeks=Ext.Date.getWeekOfYear(v)
- firstdate=Ext.Date.add(v, Ext.Date.DAY,-days)
- firstDayofyear = Ext.Date.getFirstDayOfMonth(firstdate);
- start=Ext.Date.add(firstdate, Ext.Date.DAY, (weeks)*7-firstDayofyear+1);
- end=Ext.Date.add(firstdate, Ext.Date.DAY, (weeks+1)*7-firstDayofyear+1)
- a=Ext.getCmp('fromdate');
- b=Ext.getCmp('enddate');
- refreshCalendar(start,end,a,b)
-
- }
- //handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
-
- },{
- text : '本月',
- toggleGroup : 'period',
- enableToggle : true,
- iconCls : 'icon-calendar',
- handler : function(){
- a=Ext.getCmp('fromdate');
- b=Ext.getCmp('enddate');
- v=new Date();
- start=Ext.Date.getFirstDateOfMonth(v);
- end=Ext.Date.add(Ext.Date.getLastDateOfMonth(v), Ext.Date.DAY, 1);
- refreshCalendar(start,end,a,b)
- }
- //handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
-
- },{
- text : '上月',
- toggleGroup : 'period',
- enableToggle : true,
- iconCls : 'icon-calendar',
- handler : function(){
- a=Ext.getCmp('fromdate');
- b=Ext.getCmp('enddate');
- m=Ext.Date.getFirstDateOfMonth(new Date());
- v=Ext.Date.add(m, Ext.Date.DAY, -2);
- start=Ext.Date.getFirstDateOfMonth(v);
- end=Ext.Date.add(Ext.Date.getLastDateOfMonth(v), Ext.Date.DAY, 1);
- refreshCalendar(start,end,a,b)
- }
- //handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
-
- },{
- text : '下月',
- toggleGroup : 'period',
- enableToggle : true,
- iconCls : 'icon-calendar',
- handler : function(){
- a=Ext.getCmp('fromdate');
- b=Ext.getCmp('enddate');
- m=Ext.Date.getLastDateOfMonth(new Date());
- v=Ext.Date.add(m, Ext.Date.DAY, 2);
- start=Ext.Date.getFirstDateOfMonth(v);
- end=Ext.Date.add(Ext.Date.getLastDateOfMonth(v), Ext.Date.DAY, 1);
- refreshCalendar(start,end,a,b)
- }
- //handler : function(){refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,'hourAndDay');dataloaded=true}
-
- }
- ]
- },
- {
- xtype: 'buttongroup',
- title: '选择任务时间范围',
- columns : 1,
- defaults:{
- scale : "small",
- labelWidth:60
- },
- items: [
- {
- id:'fromdate',
- xtype: 'datefield',
- fieldLabel :'开始日期',
- value:startdate,
- listeners : {
- change : function (field, newValue, oldValue) {
- if(Date.parse(newValue) > Date.parse(enddate)){
- alert("结束日期一定要比开始日期大!!")
- field.setValue(oldValue);
- }else{
- startdate=newValue;
- tree.dateChanged=true;
- dataloaded =false;
- }
- }
- }
- },{
- id:'enddate',
- xtype: 'datefield',
- fieldLabel :'结束日期',
- value : enddate,
- listeners : {
- change : function (field, newValue, oldValue) {
- if(Date.parse(newValue) < Date.parse(startdate)){
- alert("结束日期一定要比开始日期大!!")
- field.setValue(oldValue);
- }else{
- enddate=newValue;
- tree.dateChanged=true;
- dataloaded =false;
- }
- }
- }
- }]
- }
- ]
- });
-
- var vp = new Ext.Viewport({
- layout : 'fit',
- items : [tree]
- });
-
- function refreshScheduler(tree,startdate,enddate,taskStore,dataloaded,datemode){
- if(!dataloaded){
- taskStore.proxy.extraParams.startdate=startdate;
- taskStore.proxy.extraParams.enddate=enddate;
- resourceStore.proxy.extraParams.startdate=startdate;
- resourceStore.proxy.extraParams.enddate=enddate;
- resourceStore.load();
- taskStore.load();
- lineStore.clearData();
- lineStore.add([
- {
- Date : startdate,
- Text : '开始日期',
- Cls : 'start'
- },{
- Date : enddate,
- Text : '结束日期',
- Cls : 'start'
- }
- ])
- dataloaded=true;
- }
- tree.startDate=startdate;
- tree.endDate=enddate;
- tree.switchViewPreset(datemode, new Date(startdate), new Date(enddate));
- };
-
- function refreshCalendar(start,end,a,b){
- if(start<b.value){
- a.setValue(start);
- b.setValue(end)
- }else{
- b.setValue(end);
- a.setValue(start);
- }
- }
- }
-
-
- };
|