assignresource.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. Ext.ns('App');
  2. //Ext.Loader.setConfig({ enabled : true, disableCaching : true });
  3. //Ext.Loader.setPath('Sch', '../../js/Sch');
  4. //Ext.require([
  5. // 'Sch.panel.SchedulerGrid'
  6. //]);
  7. Ext.onReady(function() {
  8. function getUrlParam(name){
  9. var reg=new RegExp("(^|&)"+name+"=([^&]*)(&|$)");
  10. var r=window.location.search.substr(1).match(reg);
  11. if (r!=null) return decodeURI(r[2]);
  12. return null;
  13. }
  14. var prjplanid=getUrlParam("prjplanid");
  15. var resourcedata=null;
  16. eventdata=null;
  17. /** Ext.Ajax.request({
  18. url : basePath + "plm/resource/getResourceData.action",
  19. params:{
  20. id:prjplanid
  21. },
  22. method : 'get',
  23. callback : function(options,success,response){
  24. var rs = new Ext.decode(response.responseText);
  25. if(rs.exceptionInfo){
  26. showError(rs.exceptionInfo);return;
  27. }
  28. if(rs.success){
  29. resourcedata=rs.data.resource;
  30. eventdata=rs.data.event;
  31. }
  32. }
  33. });**/
  34. var fiscalYear = {
  35. displayDateFormat : 'Y-m-d',
  36. shiftIncrement : 1,
  37. shiftUnit : "YEAR",
  38. timeColumnWidth : 90,
  39. timeResolution : {
  40. unit : "MONTH",
  41. increment : 1
  42. },
  43. headerConfig : {
  44. bottom : {
  45. unit : "MONTH",
  46. dateFormat : 'M Y'
  47. },
  48. middle: {
  49. unit : "QUARTER",
  50. renderer : function(start, end, cfg) {
  51. var quarter = Math.floor(start.getMonth() / 3) + 1,
  52. fiscalQuarter = quarter === 4 ? 1 : (quarter + 1);
  53. return Ext.String.format('FQ{0} {1}', fiscalQuarter, start.getFullYear() + (fiscalQuarter === 1 ? 1 : 0));
  54. }
  55. },
  56. top : {
  57. unit : "YEAR",
  58. cellGenerator : function(viewStart, viewEnd) {
  59. var cells = [];
  60. // Simplified scenario, assuming view will always just show one US fiscal year
  61. return [{
  62. start : viewStart,
  63. end : viewEnd,
  64. header : 'Fiscal Year ' + (viewStart.getFullYear() + 1)
  65. }];
  66. }
  67. }
  68. }
  69. };
  70. Sch.preset.Manager.registerPreset("fiscalYear", fiscalYear);
  71. App.Scheduler.init(resourcedata,eventdata);
  72. });
  73. App.Scheduler = {
  74. // Initialize application
  75. init : function() {
  76. function getUrlParam(name){
  77. var reg=new RegExp("(^|&)"+name+"=([^&]*)(&|$)");
  78. var r=window.location.search.substr(1).match(reg);
  79. if (r!=null) return decodeURI(r[2]);
  80. return null;
  81. }
  82. var prjplanid=getUrlParam("prjplanid");
  83. Ext.define('MyModel', {
  84. extend: 'Sch.model.Event',
  85. //fields : ['PercentAllocated']
  86. fields:['Type','PercentAllocated','Name']
  87. });
  88. Ext.define('MyResource', {
  89. extend: 'Sch.model.Resource',
  90. fields : ['LikesBacon', 'LikesChrome', 'LikesIE6']
  91. });
  92. Ext.Ajax.request({
  93. url : basePath + "plm/resource/getResourceData.action",
  94. params:{
  95. id:prjplanid
  96. },
  97. method : 'get',
  98. callback : function(options,success,response){
  99. var rs = new Ext.decode(response.responseText);
  100. if(rs.exceptionInfo){
  101. showError(rs.exceptionInfo);return;
  102. }
  103. if(rs.success){
  104. resourcedata=rs.data.resource;
  105. eventdata=rs.data.event;
  106. var resourceStore = Ext.create('Sch.data.ResourceStore', {
  107. model : 'MyResource',
  108. data:resourcedata
  109. });
  110. var summaryCol = Ext.create("Sch.plugin.SummaryColumn", {
  111. header : '工时总和(d/h)',
  112. width: 100,
  113. showPercent : false
  114. });
  115. var summaryCol2 = Ext.create("Sch.plugin.SummaryColumn", {
  116. header : '区间所占比率(%)',
  117. showPercent : true,
  118. align : 'center',
  119. width: 100,
  120. renderer : function(j, a, f) {
  121. var h = this.scheduler, k = this.eventStore, e = h.getStart(), i = h
  122. .getEnd(), c = 0, b = this.calculate(f.getEvents(), e,
  123. i);
  124. if (b <= 0) {
  125. return ""
  126. }
  127. if (this.showPercent) {
  128. var d = Sch.util.Date.getDurationInMinutes(e, i);
  129. return (Math.round((b * 100) / d)) + " %"
  130. } else {
  131. if (b > 1440) {
  132. return (b / 1440).toFixed(this.nbrDecimals) + " "
  133. + Sch.util.Date.getShortNameOfUnit("DAY")
  134. }
  135. if (b >= 30) {
  136. return (b / 60).toFixed(this.nbrDecimals) + " "
  137. + Sch.util.Date.getShortNameOfUnit("HOUR")
  138. }
  139. return b + " " + Sch.util.Date.getShortNameOfUnit("MINUTE")
  140. }
  141. },
  142. });
  143. var eventStore = Ext.create('Sch.data.EventStore', {
  144. model : MyModel,
  145. data:eventdata
  146. });
  147. var sched = Ext.create("Sch.panel.SchedulerGrid", {
  148. id:'sched',
  149. title : '资源分配详情',
  150. border : true,
  151. readOnly:true,
  152. viewPreset: 'weekAndDayLetter',
  153. renderTo : Ext.getBody(),
  154. //viewPreset : 'fiscalYear',
  155. startDate : new Date(2012, 3, 1),
  156. // height: window.innerHeight,
  157. height: document.documentElement.clientHeight,
  158. endDate : new Date(2012, 12, 1),
  159. rowHeight : 40,
  160. autoScroll:true,
  161. loadMask:true,
  162. layout:'fit',
  163. lockedGridConfig :{
  164. autoScroll:true,
  165. collapsible : true,
  166. },
  167. schedulerConfig :{
  168. autoScroll:true,
  169. collapsible : true,
  170. },
  171. columnLines : true,
  172. eventBodyTemplate : new Ext.XTemplate(
  173. '<div class="sch-percent-allocated-bar" style="height:{PercentAllocated}% " ></div><span class="sch-percent-allocated-text">{[values.PercentAllocated||0]}%</span>'
  174. ).compile(),
  175. //eventRenderer : function(ev, res, tplData) {
  176. // tplData.cls = ev.get('Type') || 'Task';
  177. // return ev.getName();
  178. // },
  179. // Define static columns
  180. columns : [
  181. {header : '成员名称', width:100, dataIndex : 'Name'},
  182. summaryCol,summaryCol2,
  183. ],
  184. tbar : [
  185. { text:'上一阶段',
  186. iconCls : 'icon-previous',
  187. handler : function() {
  188. sched.shiftPrevious();
  189. }
  190. },
  191. { text:'下一阶段',
  192. iconCls : 'icon-next',
  193. handler : function() {
  194. sched.shiftNext();
  195. }
  196. },
  197. {
  198. text : 'Hours',
  199. toggleGroup : 'presets',
  200. enableToggle : true,
  201. pressed : true,
  202. iconCls : 'icon-calendar',
  203. handler : function() {
  204. sched.switchViewPreset('hourAndDay', new Date(2012, 9, 1, 8), new Date(2012, 9, 1, 18));
  205. }
  206. },
  207. {
  208. text : 'Days',
  209. toggleGroup : 'presets',
  210. enableToggle : true,
  211. iconCls : 'icon-calendar',
  212. handler : function() {
  213. sched.switchViewPreset('weekAndDay', new Date(2012, 9, 1), new Date(2012, 9, 21));
  214. }
  215. },
  216. {
  217. text : 'Weeks',
  218. toggleGroup : 'presets',
  219. enableToggle : true,
  220. iconCls : 'icon-calendar',
  221. handler : function() {
  222. sched.switchViewPreset('weekAndMonth');
  223. }
  224. },
  225. {
  226. text : 'Weeks 2',
  227. toggleGroup : 'presets',
  228. enableToggle : true,
  229. iconCls : 'icon-calendar',
  230. handler : function() {
  231. sched.switchViewPreset('weekAndDayLetter');
  232. }
  233. },
  234. {
  235. text : 'Weeks 3',
  236. toggleGroup : 'presets',
  237. enableToggle : true,
  238. iconCls : 'icon-calendar',
  239. handler : function() {
  240. sched.switchViewPreset('weekDateAndMonth');
  241. }
  242. },
  243. {
  244. text : 'Months',
  245. toggleGroup : 'presets',
  246. iconCls : 'icon-calendar',
  247. handler : function() {
  248. sched.switchViewPreset('monthAndYear');
  249. }
  250. },
  251. {
  252. text : 'Years',
  253. enableToggle : true,
  254. toggleGroup : 'presets',
  255. iconCls : 'icon-calendar',
  256. handler : function() {
  257. sched.switchViewPreset('year', new Date(2012, 0, 1), new Date(2015, 0, 1));
  258. }
  259. },
  260. ],
  261. //tooltipTpl:'hahah',
  262. plugins : [summaryCol,summaryCol2],
  263. resourceStore : resourceStore,
  264. eventStore : eventStore
  265. });
  266. sched.on('eventmouseenter',function(view,Record,e, eOpts){
  267. view.tip = Ext.create('Ext.tip.ToolTip', {
  268. bodyStyle: {
  269. background: '#C5C1AA',
  270. },
  271. bodyCls :'sch-alert',
  272. target: view.el,
  273. delegate: view.itemSelector,
  274. trackMouse: true,
  275. renderTo: Ext.getBody(),
  276. listeners: {
  277. beforeshow: function updateTipBody(tip) {
  278. tip.update('在进行任务: "' + Record.data.Name + '"');
  279. }
  280. }
  281. });
  282. });
  283. var vp = Ext.create("Ext.Viewport", {
  284. layout : 'border',
  285. items : [
  286. {
  287. region : 'north',
  288. contentEl : 'north',
  289. bodyStyle : 'padding:0px',
  290. //anchor:'100% 100%',
  291. },
  292. //anchor:'100% 100%',
  293. // sched
  294. ]
  295. });
  296. }
  297. }
  298. });
  299. },
  300. };