Task.js 103 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111
  1. // this.taskData 任务对象
  2. MWF.xApplication.TeamWork = MWF.xApplication.TeamWork || {};
  3. MWF.xApplication.TeamWork.Task = new Class({
  4. Extends: MPopupForm,
  5. Implements: [Options, Events],
  6. options: {
  7. "style": "default",
  8. "width": 1200,
  9. "height": "90%",
  10. "top": null,
  11. "left": null,
  12. "bottom" : null,
  13. "right" : null,
  14. "minWidth" : 300,
  15. "minHeight" : 220,
  16. "isLimitSize": true,
  17. "ifFade": false,
  18. "hasTop": false,
  19. "hasTopIcon" : false,
  20. "hasTopContent" : false,
  21. "hasIcon": false,
  22. "hasBottom": false,
  23. "hasMask" : true,
  24. "closeByClickMask" : false,
  25. "hasScroll" : false,
  26. "scrollType" : "",
  27. "title": "",
  28. "draggable": false,
  29. "resizeable" : false,
  30. "maxAction" : false,
  31. "closeAction": false,
  32. "relativeToApp" : true,
  33. "sizeRelateTo" : "app", //desktop
  34. "resultSeparator" : ","
  35. },
  36. initialize: function (explorer, data, options, para) {
  37. this.setOptions(options);
  38. if(this.options.type && this.options.type=="window"){
  39. // this.options.width = "100%";
  40. // this.options.height = "100%";
  41. this.explorer = explorer;
  42. this.app = explorer;
  43. this.container = this.app.content;
  44. this.openType = "window"
  45. }else{
  46. this.explorer = explorer;
  47. this.app = this.explorer.app;
  48. this.container = this.app.content;
  49. this.openType = "dialog"
  50. }
  51. this.projectObj = this.explorer;
  52. if(para){
  53. if(para.projectObj) this.projectObj = para.projectObj
  54. }
  55. // this.explorer = explorer;
  56. //
  57. // this.app = this.explorer.app;
  58. // this.container = this.app.content;
  59. this.rootActions = this.app.rootActions;
  60. this.actions = this.rootActions.TaskAction;
  61. this.data = data || {};
  62. this.css = {};
  63. this.cssPath = "../x_component_TeamWork/$Task/"+this.options.style+"/css.wcss";
  64. this.load();
  65. this.lp = this.app.lp.task;
  66. // this.lp = MWF.xApplication.TeamWork.LP.task;
  67. },
  68. close: function (data) {
  69. //愤愤愤愤
  70. this.fireEvent("queryClose");
  71. this._close();
  72. //if( this.form ){
  73. // this.form.destroy();
  74. //}
  75. if(this.setFormNodeSizeFun && this.app && this.app.removeEvent ){
  76. this.app.removeEvent("resize",this.setFormNodeSizeFun);
  77. }
  78. if( this.formMaskNode )this.formMaskNode.destroy();
  79. if( this.formAreaNode )this.formAreaNode.destroy();
  80. this.fireEvent("postClose",[data]);
  81. delete this;
  82. },
  83. openTask:function(data){
  84. //this.data.taskId = data.id;
  85. //alert("id="+this.data.taskId)
  86. // this.formAreaNode.setStyles({"opacity":"1"});
  87. // var fx = new Fx.Tween(this.formAreaNode,{duration:400});
  88. // fx.start(["opacity"] ,"1", "0");
  89. var ef = new Fx.Morph(this.formAreaNode, {
  90. duration: 200,
  91. transition: Fx.Transitions.Sine.easeOut,
  92. onStart:function(){},
  93. onComplete:function(){
  94. this._createTableContent();
  95. }.bind(this)
  96. });
  97. ef.start({
  98. 'opacity': [1, 0]
  99. });
  100. //this.formAreaNode.setStyles({"opacity":0});
  101. //this._createTableContent();
  102. },
  103. _createTableContent: function () {
  104. //data { taskId:xxx }
  105. var _self = this;
  106. this.getTaskData(function(){
  107. this.control = {};
  108. this.control.isEdit = this.taskData.control.edit;
  109. this.control.isDelete = this.taskData.control.delete;
  110. this.control.isFounder = this.taskData.control.founder;
  111. this.control.isCreate = true;
  112. if(this.openType == "window"){
  113. this.app.setTitle(this.taskData.name);
  114. }
  115. this.formTableArea.empty();
  116. this.topLayout = new Element("div.topLayout",{styles:this.css.topLayout}).inject(this.formTableArea);
  117. //this.topImage = new Element("div.topImage",{styles:this.css.topImage}).inject(this.topLayout);
  118. this.topContent = new Element("div.topContent",{styles:this.css.topContent,text:this.taskData.name}).inject(this.topLayout);
  119. if(this.isNew){
  120. this.topContent.set("text",this.lp.newTask)
  121. }
  122. this.topContent.addEvents({
  123. click:function(e){
  124. layout.openApplication(e,"TeamWork.Task",null,{"taskId":this.data.taskId})
  125. }.bind(this)
  126. })
  127. this.topIconContainer = new Element("div.topIconContainer",{styles:this.css.topIconContainer}).inject(this.topLayout);
  128. //更多
  129. this.topIconMore = new Element("div.topIconMore",{styles:this.css.topIconMore,title:this.lp.more}).inject(this.topIconContainer);
  130. this.topIconMore.addEvents({
  131. click:function(){
  132. var tm = new MWF.xApplication.TeamWork.Task.TaskMore(this.container, this.topIconMore, this.app, {data:this.taskData}, {
  133. css:this.css, lp:this.lp, axis : "y",
  134. position : { //node 固定的位置
  135. x : "auto",
  136. y : "middle"
  137. },
  138. nodeStyles : {
  139. "min-width":"200px",
  140. "padding":"2px",
  141. "border-radius":"5px",
  142. "box-shadow":"0px 0px 4px 0px #999999",
  143. "z-index" : "201"
  144. },
  145. onPostLoad:function(){
  146. tm.node.setStyles({"opacity":"0","top":(tm.node.getStyle("top").toInt()+4)+"px"});
  147. var fx = new Fx.Tween(tm.node,{duration:400});
  148. fx.start(["opacity"] ,"0", "1");
  149. },
  150. onClose:function(rd){
  151. if(!rd) return;
  152. if(rd.act == "remove"){
  153. this.close(rd);
  154. if(this.data.projectObj){ //reload project
  155. this.data.projectObj.createTaskGroup()
  156. }
  157. }
  158. }.bind(this)
  159. },null,this);
  160. tm.load();
  161. }.bind(this),
  162. mouseover:function(){
  163. this.setStyles({"background-image":"url(../x_component_TeamWork/$Task/default/icon/icon_more_click.png)"});
  164. },
  165. mouseout:function(){
  166. this.setStyles(_self.css.topIconMore)
  167. }
  168. });
  169. //关闭
  170. this.topIconClose = new Element("div.topIconClose",{styles:this.css.topIconClose,title:this.lp.close}).inject(this.topIconContainer);
  171. this.topIconClose.addEvents({
  172. click:function(){
  173. this.close();
  174. if(this.openType=="window"){
  175. this.app.close();
  176. }
  177. }.bind(this),
  178. mouseover:function(){
  179. this.setStyles({"background-image":"url(../x_component_TeamWork/$Task/default/icon/icon_off_click.png)"});
  180. },
  181. mouseout:function(){
  182. this.setStyles(_self.css.topIconClose)
  183. }
  184. });
  185. this.contentLayout = new Element("div.contentLayout",{styles:this.css.contentLayout}).inject(this.formTableArea);
  186. this.createContentLayout();
  187. this.createDetailLayout();
  188. this.formAreaNode.setStyles({"opacity":1})
  189. }.bind(this));
  190. },
  191. createContentLayout:function(){
  192. var _self = this;
  193. this.taskInforContainer = new Element("div.taskInforContainer",{styles:this.css.taskInforContainer}).inject(this.contentLayout);
  194. this.taskActionBar = new Element("div.taskActionBar",{styles:this.css.taskActionBar}).inject(this.taskInforContainer);
  195. if(this.taskData.parent!="0"){
  196. this.taskActionParentContent = new Element("div.taskActionParentContent").inject(this.taskActionBar);
  197. this.taskActionParentIcon = new Element("div.taskActionParentIcon",{styles:this.css.taskActionParentIcon}).inject(this.taskActionParentContent);
  198. this.taskActionParentText = new Element("div.taskActionParentText",{styles:this.css.taskActionParentText,text:this.lp.taskBelongText+":"}).inject(this.taskActionParentContent);
  199. this.taskActionParentValue = new Element("div.taskActionParentValue",{styles:this.css.taskActionParentValue}).inject(this.taskActionParentContent);
  200. this.actions.get(this.taskData.parent,function(json){
  201. this.taskActionParentValue.set("text",json.data.name);
  202. this.taskActionParentValue.addEvents({
  203. click:function(){
  204. this.data.taskId = json.data.id;
  205. this.openTask()
  206. }.bind(this)
  207. });
  208. }.bind(this))
  209. }
  210. // this.taskActionSave = new Element("div.taskActionSave",{styles:this.css.taskActionSave,text:this.lp.save}).inject(this.taskActionBar);
  211. // this.taskActionSave.addEvents({
  212. // click:function(){
  213. // this.saveTaskData();
  214. // }.bind(this),
  215. // mouseover:function(){
  216. // this.setStyles({
  217. // "color":"#ffffff",
  218. // "background-color":"#4A90E2",
  219. // "border":"1px solid #4A90E2"
  220. // })
  221. // },
  222. // mouseout:function(){
  223. // this.setStyles(_self.css.taskActionSave)
  224. // }
  225. // });
  226. this.taskInforLayout = new Element("div.taskInforLayout",{styles:this.css.taskInforLayout}).inject(this.taskInforContainer);
  227. this.taskInforContent = new Element("div.taskInforContent",{styles:this.css.taskInforContent}).inject(this.taskInforLayout);
  228. this.app.setScrollBar(this.taskInforContent);
  229. //名称
  230. this.taskNameContainer = Element("div.taskNameContainer",{styles:this.css.taskNameContainer}).inject(this.taskInforContent);
  231. //状态
  232. this.taskStatusContainer = Element("div.taskStatusContainer",{styles:this.css.taskStatusContainer}).inject(this.taskInforContent);
  233. this.taskStatusIcon = Element("div.taskStatusIcon",{styles:this.css.taskStatusIcon}).inject(this.taskStatusContainer);
  234. this.taskStatusText = Element("div.taskStatusText",{styles:this.css.taskStatusText,text:this.lp.taskStatus}).inject(this.taskStatusContainer);
  235. this.taskStatusValue = Element("div.taskStatusValue",{styles:this.css.taskStatusValue}).inject(this.taskStatusContainer);
  236. //责任人
  237. this.taskDutyContainer = Element("div.taskDutyContainer",{styles:this.css.taskDutyContainer}).inject(this.taskInforContent);
  238. this.taskDutyIcon = Element("div.taskDutyIcon",{styles:this.css.taskDutyIcon}).inject(this.taskDutyContainer);
  239. this.taskDutyText = Element("div.taskDutyText",{styles:this.css.taskDutyText,text:this.lp.taskDuty}).inject(this.taskDutyContainer);
  240. this.taskDutyValue = Element("div.taskDutyValue",{styles:this.css.taskDutyValue}).inject(this.taskDutyContainer);
  241. //时间
  242. this.taskTimeContainer = Element("div.taskTimeContainer",{styles:this.css.taskTimeContainer}).inject(this.taskInforContent);
  243. this.taskTimeIcon = Element("div.taskTimeIcon",{styles:this.css.taskTimeIcon}).inject(this.taskTimeContainer);
  244. this.taskTimeText = Element("div.taskTimeText",{styles:this.css.taskTimeText,text:this.lp.taskTime}).inject(this.taskTimeContainer);
  245. this.taskTimeValue = Element("div.taskTimeValue",{styles:this.css.taskTimeValue}).inject(this.taskTimeContainer);
  246. //备注
  247. this.taskRemarkContainer = Element("div.taskRemarkContainer",{styles:this.css.taskRemarkContainer}).inject(this.taskInforContent);
  248. this.taskRemarkIcon = Element("div.taskRemarkIcon",{styles:this.css.taskRemarkIcon}).inject(this.taskRemarkContainer);
  249. this.taskRemarkText = Element("div.taskRemarkText",{styles:this.css.taskRemarkText,text:this.lp.taskRemark}).inject(this.taskRemarkContainer);
  250. this.taskRemarkValue = Element("div.taskRemarkValue",{styles:this.css.taskRemarkValue}).inject(this.taskRemarkContainer);
  251. //优先级
  252. this.taskPriorityContainer = Element("div.taskPriorityContainer",{styles:this.css.taskPriorityContainer}).inject(this.taskInforContent);
  253. this.taskPriorityIcon = Element("div.taskPriorityIcon",{styles:this.css.taskPriorityIcon}).inject(this.taskPriorityContainer);
  254. this.taskPriorityText = Element("div.taskPriorityText",{styles:this.css.taskPriorityText,text:this.lp.taskPriority}).inject(this.taskPriorityContainer);
  255. this.taskPriorityValue = Element("div.taskPriorityValue",{styles:this.css.taskPriorityValue}).inject(this.taskPriorityContainer);
  256. //扩展字段
  257. if(this.taskData.extFieldConfigs && this.taskData.extFieldConfigs.length>0){
  258. this.taskExtFieldContainer = new Element("div.taskExtFieldContainer",{styles:this.css.taskExtFieldContainer}).inject(this.taskInforContent);
  259. this.loadTaskExtField();
  260. }
  261. //标签
  262. this.taskTagContainer = Element("div.taskTagContainer",{styles:this.css.taskTagContainer}).inject(this.taskInforContent);
  263. this.taskTagIcon = Element("div.taskTagIcon",{styles:this.css.taskTagIcon}).inject(this.taskTagContainer);
  264. this.taskTagText = Element("div.taskTagText",{styles:this.css.taskTagText,text:this.lp.taskTag}).inject(this.taskTagContainer);
  265. this.taskTagValue = Element("div.taskTagValue",{styles:this.css.taskTagValue}).inject(this.taskTagContainer);
  266. //附件 -- 换成其他样式
  267. // this.taskAttachmentContainer = Element("div.taskAttachmentContainer",{styles:this.css.taskAttachmentContainer}).inject(this.taskInforContent);
  268. // this.taskAttachmentIcon = Element("div.taskAttachmentIcon",{styles:this.css.taskAttachmentIcon}).inject(this.taskAttachmentContainer);
  269. // this.taskAttachmentText = Element("div.taskAttachmentText",{styles:this.css.taskAttachmentText,text:this.lp.taskAttachment}).inject(this.taskAttachmentContainer);
  270. // this.taskAttachmentValue = Element("div.taskAtchatBarEmojitachmentValue",{styles:this.css.taskAttachmentValue}).inject(this.taskAttachmentContainer);
  271. //附件
  272. this.taskAttachmentListContainer = new Element("div.taskAttachmentListContainer",{styles:this.css.taskAttachmentListContainer}).inject(this.taskInforContent);
  273. this.loadTaskAttachmentListContainer();
  274. this.setTaskData();
  275. //this.setAuth();
  276. //子任务
  277. this.subTaskContainer = new Element("div.subTaskContainer",{styles:this.css.subTaskContainer}).inject(this.taskInforContent);
  278. this.loadSubTaskContainer();
  279. //占位
  280. new Element("div",{styles:{"width":"100%","height":"100px"}}).inject(this.taskInforContent)
  281. },
  282. loadTaskExtField:function(){
  283. this.taskData.extFieldConfigs.each(function(data){
  284. this.loadTaskExtFieldItem(data);
  285. }.bind(this))
  286. },
  287. loadTaskExtFieldItem:function(data){
  288. var taskExtFieldItem = new Element("div.taskExtFieldItem",{styles:this.css.taskExtFieldItem}).inject(this.taskExtFieldContainer);
  289. var taskExtFieldIcon = new Element("div.taskExtFieldIcon",{styles:this.css.taskExtFieldIcon}).inject(taskExtFieldItem);
  290. var taskExtFieldText = new Element("div.taskExtFieldText",{styles:this.css.taskExtFieldText}).inject(taskExtFieldItem);
  291. new Element("p",{styles:{
  292. "justify-content": "center",
  293. "align-items":"center"
  294. },text:data.displayName}).inject(taskExtFieldText);
  295. if(data.displayType.toUpperCase() == "TEXT"){
  296. }
  297. },
  298. createDetailLayout:function(){
  299. this.taskDetailLayout = new Element("div.taskDetailLayout",{styles:this.css.taskDetailLayout}).inject(this.contentLayout);
  300. this.taskParticipateContainer = new Element("div.taskParticipateContainer",{styles:this.css.taskParticipateContainer}).inject(this.taskDetailLayout);
  301. this.createParticipateContainer();
  302. this.taskDynamicContainer = new Element("div.taskDynamicContainer",{styles:this.css.taskDynamicContainer}).inject(this.taskDetailLayout);
  303. this.createDynamicContainer();
  304. this.taskChatContainer = new Element("div.taskChatContainer",{styles:this.css.taskChatContainer}).inject(this.taskDetailLayout);
  305. this.createChatContainer();
  306. },
  307. createParticipateContainer:function(){
  308. this.taskParticipateContainer.empty();
  309. this.participateTitle = new Element("div.participateTitle",{styles:this.css.participateTitle}).inject(this.taskParticipateContainer);
  310. this.participateTitleText = new Element("div.participateTitleText",{styles:this.css.participateTitleText}).inject(this.participateTitle);
  311. if(this.control.isEdit){
  312. this.participateTitleIcon = new Element("div.participateTitleIcon",{styles:this.css.participateTitleIcon,title:this.lp.taskReaderAdd}).inject(this.participateTitle);
  313. this.participateTitleIcon.addEvents({
  314. click:function(){
  315. this.selectPerson(this.participateTitleIcon,null,["identity","unit"],0,
  316. function(json){
  317. if(json.length>0){
  318. this.taskData.participantList = this.taskData.participantList.concat(json);
  319. //this.actions.updateParticipantList(this.taskData.id,{participantList:this.taskData.participantList},function(json){
  320. this.actions.updateParticipant(this.taskData.id,{participantList:this.taskData.participantList},function(json){
  321. if(json.data.dynamics){
  322. json.data.dynamics.each(function(dd){
  323. this.loadDynamicItem(dd,"bottom")
  324. }.bind(this))
  325. }
  326. this.dynamicContent.scrollTo(0,this.dynamicContent.getScrollSize().y);
  327. this.createParticipateContainer();
  328. }.bind(this))
  329. }
  330. }.bind(this)
  331. );
  332. }.bind(this)
  333. });
  334. }
  335. this.participateValue = new Element("div.participateValue",{styles:this.css.participateValue}).inject(this.taskParticipateContainer);
  336. this.setScrollBar(this.participateValue);
  337. if(this.taskData.participantList){
  338. count = this.taskData.participantList.length;
  339. this.participateTitleText.set("text",this.lp.taskReader + " . " + count);
  340. this.taskData.participantList.each(function(d){
  341. var flag = true;
  342. if(this.taskData.executor){
  343. if(d === this.taskData.executor) flag = false
  344. }
  345. this.loadparticipantPerson(this.participateValue,d,flag);
  346. }.bind(this));
  347. }
  348. },
  349. createDynamicContainer:function(){
  350. var _self = this;
  351. this.taskDynamicContainer.empty();
  352. this.dynamicBar = new Element("div.dynamicBar",{styles:this.css.dynamicBar}).inject(this.taskDynamicContainer);
  353. this.dynamicBar.addEvents({
  354. mouseover:function(){
  355. this.dynamicText.setStyle("color","#4a90e2");
  356. this.dynamicIcon.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/icon_dw_click.png)")
  357. }.bind(this),
  358. mouseout:function(){
  359. this.dynamicText.setStyle("color","#666666");
  360. this.dynamicIcon.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/icon_dw.png)")
  361. }.bind(this),
  362. click:function(){
  363. var pc = new MWF.xApplication.TeamWork.Task.DynamicType(this.container, this.dynamicBar, this.app, {data:this.taskData}, {
  364. css:this.css, lp:this.lp, axis : "y",
  365. position : { //node 固定的位置
  366. x : "right",
  367. y : "middle"
  368. },
  369. nodeStyles : {
  370. "min-width":"150px",
  371. "padding":"2px",
  372. "border-radius":"5px",
  373. "box-shadow":"0px 0px 4px 0px #999999",
  374. "z-index" : "201"
  375. },
  376. onPostLoad:function(){
  377. pc.node.setStyles({"opacity":"0","top":(pc.node.getStyle("top").toInt()-6)+"px","left":(pc.node.getStyle("left").toInt()+10)+"px"});
  378. var fx = new Fx.Tween(pc.node,{duration:400});
  379. fx.start(["opacity"] ,"0", "1");
  380. },
  381. onClose:function(rd){
  382. if(!rd) return;
  383. if(rd.value == "all"){
  384. filter = {};
  385. this.dynamicText.set("text",this.lp.dynamicAll)
  386. }else if(rd.value == "chat"){
  387. filter = {objectType:"CHAT"};
  388. this.dynamicText.set("text",this.lp.dynamicChat)
  389. }else if(rd.value == "attachment"){
  390. this.dynamicText.set("text",this.lp.dynamicAttachment)
  391. filter = {objectType:"ATTACHMENT"};
  392. }
  393. this.dynamicContent.empty();
  394. this.dyncurCount = 0;
  395. this.createDynamicContent(null,filter,function(){
  396. this.dynamicContent.scrollTo(0,this.dynamicContent.getScrollSize().y);
  397. this.getDynamicStatus = false;
  398. }.bind(this))
  399. }.bind(this)
  400. });
  401. pc.load();
  402. }.bind(this),
  403. });
  404. this.dynamicText = new Element("div.dynamicText",{styles:this.css.dynamicText,text:this.lp.dynamicAll}).inject(this.dynamicBar);
  405. this.dynamicIcon = new Element("div.dynamicIcon",{styles:this.css.dynamicIcon}).inject(this.dynamicBar);
  406. this.dynamicContent = new Element("div.dynamicContent",{styles:this.css.dynamicContent}).inject(this.taskDynamicContainer);
  407. var filter = {};
  408. var _y = this.dynamicContent.getScrollSize().y;
  409. this.dynamicContent.addEvents({
  410. scroll:function(){
  411. if(this.getScrollTop()==0){
  412. //alert("top")
  413. //加载下一页
  414. if(_self.getDynamicStatus) return;
  415. if(_self.dyncurCount>=_self.dyntotal) return;
  416. _self.createDynamicContent(_self.curDynamicId,filter,function(){
  417. _self.dynamicContent.scrollTo(0,_y);
  418. _self.getDynamicStatus = false;
  419. });
  420. }
  421. }
  422. });
  423. this.createDynamicContent(null,filter,function(){
  424. this.dynamicContent.scrollTo(0,this.dynamicContent.getScrollSize().y);
  425. this.getDynamicStatus = false;
  426. }.bind(this));
  427. },
  428. createDynamicContent:function(id,data,callback){
  429. this.getDynamicStatus = true;
  430. var _self = this, id = id || "(0)", count = 15, taskId = this.taskData.id;
  431. this.curDynamicId = id;
  432. //this.dyntotal = 0;
  433. this.dyncurCount = this.dyncurCount || 0;
  434. this.tmpdynamicLoading = new Element("div").inject(this.dynamicContent,"top");
  435. this.app.setLoading(this.tmpdynamicLoading);
  436. this.rootActions.DynamicAction.listNextWithTask(id,count,taskId,data||{},function(json){
  437. //this.actions.taskDynamicListNext(id,count,taskId,data||{},function(json){
  438. if(this.tmpdynamicLoading)this.tmpdynamicLoading.destroy();
  439. //this.getDynamicStatus = false;
  440. if(json.type == "success"){
  441. this.dyntotal = json.count;
  442. json.data.each(function(d,i){
  443. this.curDynamicId = d.id;
  444. this.loadDynamicItem(d);
  445. }.bind(this));
  446. if(callback)callback(json)
  447. }
  448. }.bind(this))
  449. },
  450. loadDynamicItem:function(data,where){
  451. this.dyncurCount = this.dyncurCount + 1;
  452. var dynamicItem = new Element("div.dynamicItem",{styles:this.css.dynamicItem}).inject(this.dynamicContent,where||"top");
  453. var dynamicItemIcon = new Element("div.dynamicItemIcon",{styles:this.css.dynamicItemIcon}).inject(dynamicItem);
  454. var optType = data.optType.toUpperCase();
  455. var objectType = data.objectType.toUpperCase();
  456. if(objectType == "CHAT"){
  457. //if(optType.toUpperCase() == "PUBLISH"){
  458. dynamicItemIcon.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/dy_chat.png)")
  459. //}
  460. }else if(objectType == "ATTACHMENT"){
  461. if(optType == "DELETE"){ //UPLOAD、DOWNLOAD、DELETE
  462. dynamicItemIcon.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/dy_remove.png)")
  463. }else{
  464. dynamicItemIcon.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/dy_attachment.png)")
  465. }
  466. }else if(objectType == "TASK"){
  467. //UPDATE_NAME、UPDATE_EXECUTOR、UPDATE_STATUS、UPDATE_TIME、UPDATE_PROGRESS、ADD_TAGS、REMOVE_TAGS、
  468. //ADD_MANAGER、REMOVE_MANAGER、ADD_PARTICIPANTS、REMOVE_PARTICIPANTS、CREATE、DELETE
  469. if(optType=="SPLIT"){
  470. dynamicItemIcon.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/dy_subtask.png)")
  471. }else if(optType=="DELETE_SUBTASK"){
  472. dynamicItemIcon.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/dy_remove.png)")
  473. }else if(optType=="UPDATE_EXECUTOR"){
  474. dynamicItemIcon.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/dy_duty.png)")
  475. }else if(optType=="UPDATE_NAME"){
  476. dynamicItemIcon.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/dy_title.png)")
  477. }else if(optType=="UPDATE_WORKSTATUS"){
  478. dynamicItemIcon.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/dy_status.png)")
  479. }else if(optType=="UPDATE_WORKDATE"){
  480. dynamicItemIcon.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/dy_time.png)")
  481. }else if(optType=="UPDATE_DESCRIPTION"){
  482. dynamicItemIcon.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/dy_remark.png)")
  483. }else if(optType=="ADD_PARTICIPANTS" || optType == "REMOVE_PARTICIPANTS"){
  484. dynamicItemIcon.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/dy_participant.png)")
  485. }else if(optType=="CREATE"){
  486. dynamicItemIcon.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/icon_jia.png)")
  487. }else{
  488. dynamicItemIcon.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/icon_edit.png)")
  489. }
  490. }else if(objectType=="TASK_TAG"){
  491. if(optType=="REMOVE"){
  492. dynamicItemIcon.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/dy_remove.png)")
  493. }else{
  494. dynamicItemIcon.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/dy_tag.png)")
  495. }
  496. }
  497. var dynamicItemText = new Element("div.dynamicItemText",{styles:this.css.dynamicItemText}).inject(dynamicItem);
  498. if(objectType == "CHAT"){
  499. new Element("div.dynamicItemUser",{styles:this.css.dynamicItemUser,text:data.operator.split("@")[0]}).inject(dynamicItemText);
  500. var chattext = data.description.split("\n").join("<br/>");
  501. //转换表情
  502. for(var item in this.app.lp.emoji){
  503. var val = this.app.lp.emoji[item]; //alert(val)
  504. chattext = chattext.split("["+val+"]").join('<img style="margin:0px 2px; width:30px;height:30px;" src="../x_component_TeamWork/$Emoji/default/icon/'+item+'.png" />');
  505. }
  506. new Element("div.dynamicItemUserChat",{styles:{"margin-top":"5px"},html:chattext}).inject(dynamicItemText);
  507. }else{
  508. dynamicItemText.set("text",data.description);
  509. }
  510. var dynamicItemTime = new Element("div.dynamicItemTime",{styles:this.css.dynamicItemTime}).inject(dynamicItem);
  511. dynamicItemTime.set("text",this.compareWithNow(data.createTime).text);
  512. //最后加一层清除浮动
  513. new Element("div.dynamicItemTime",{styles:{"clear":"both"}}).inject(dynamicItem);
  514. },
  515. createChatContainer:function(){
  516. this.taskChatContainer.empty();
  517. var node = this.taskChatContainer;
  518. this.chatContent = new Element("div.chatContent",{styles:this.css.chatContent}).inject(node);
  519. this.chatTextarea = new Element("textarea.chatTextarea",{styles:this.css.chatTextarea,placeholder:this.lp.chatPlaceholder}).inject(this.chatContent);
  520. this.chatTextarea.addEvents({
  521. keypress:function(e){
  522. var keycode = (e.event.keyCode ? e.event.keyCode : e.event.which);
  523. if (e.event.ctrlKey && (keycode == 13 || keycode == 10)) {
  524. this.chatBarSend.click();
  525. }
  526. }.bind(this)
  527. });
  528. this.chatBarContent = new Element("div.chatBarContent",{styles:this.css.chatBarContent}).inject(node);
  529. this.chatBarTool = new Element("div.chatBarTool",{styles:this.css.chatBarTool}).inject(this.chatBarContent);
  530. this.chatBarEmoji = new Element("div.chatBarEmoji",{styles:this.css.chatBarEmoji,title:this.lp.chatInsertEmoji}).inject(this.chatBarTool);
  531. this.chatBarEmoji.addEvents({
  532. mouseover:function(){this.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/icon_emoji_click.png)")},
  533. mouseout:function(){this.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/icon_emoji.png)")},
  534. click:function(){
  535. MWF.xDesktop.requireApp("TeamWork", "Emoji", function(){
  536. var pc = new MWF.xApplication.TeamWork.Emoji(this,this.container, this.chatBarEmoji, this.app, {}, {
  537. css:this.css, lp:this.lp, axis : "y",
  538. position : { //node 固定的位置
  539. x : "right",
  540. y : "middle"
  541. },
  542. nodeStyles : {
  543. "min-width":"200px",
  544. "max-width":"350px",
  545. "height":"150px",
  546. "padding":"2px",
  547. "border-radius":"5px",
  548. "box-shadow":"0px 0px 4px 0px #999999",
  549. "z-index" : "201"
  550. },
  551. onPostLoad:function(){
  552. pc.node.setStyles({"opacity":"0","top":(pc.node.getStyle("top").toInt())+"px"});
  553. var fx = new Fx.Tween(pc.node,{duration:400});
  554. fx.start(["opacity"] ,"0", "1");
  555. },
  556. onClose:function(rd){
  557. if(!rd) return;
  558. if(rd.value && rd.value !=""){
  559. this.chatTextarea.set("value",this.chatTextarea.get("value")+"["+rd.value+"]");
  560. this.chatTextarea.focus();
  561. }
  562. }.bind(this)
  563. });
  564. pc.load();
  565. }.bind(this))
  566. }.bind(this)
  567. });
  568. this.chatBarSend = new Element("div.chatBarSend",{styles:this.css.chatBarSend,text:this.lp.chatSend}).inject(this.chatBarContent);
  569. this.chatBarSend.addEvents({
  570. click:function(){
  571. if(this.chatTextarea.get("value").trim()=="") return;
  572. var data = {
  573. taskId : this.taskData.id,
  574. content : this.chatTextarea.get("value").trim()
  575. };
  576. //this.actions.chatCreate(data,function(json){
  577. this.rootActions.ChatAction.create(data,function(json){
  578. if(json.data.id){
  579. this.rootActions.ChatAction.get(json.data.id,function(json){
  580. var person = json.data.sender;
  581. var content = json.data.content;
  582. var dynamicItem = new Element("div.dynamicItem",{styles:this.css.dynamicItem}).inject(this.dynamicContent);
  583. var dynamicItemIcon = new Element("div.dynamicItemIcon",{styles:this.css.dynamicItemIcon}).inject(dynamicItem);
  584. dynamicItemIcon.setStyle("background-image","url(../x_component_TeamWork/$Task/default/icon/icon_chat.png)")
  585. var dynamicItemText = new Element("div.dynamicItemText",{styles:this.css.dynamicItemText}).inject(dynamicItem);
  586. new Element("div.dynamicItemUser",{styles:this.css.dynamicItemUser,text:person.split("@")[0]}).inject(dynamicItemText);
  587. var chattext = content.split("\n").join("<br/>");
  588. for(var item in this.app.lp.emoji){
  589. var val = this.app.lp.emoji[item];
  590. chattext = chattext.split("["+val+"]").join('<img style="margin:0 2px; width:30px;height:30px;" src="../x_component_TeamWork/$Emoji/default/icon/'+item+'.png" />');
  591. }
  592. new Element("div.dynamicItemUserChat",{styles:{"margin-top":"5px"},html:chattext}).inject(dynamicItemText);
  593. var dynamicItemTime = new Element("div.dynamicItemTime",{styles:this.css.dynamicItemTime}).inject(dynamicItem);
  594. dynamicItemTime.set("text","刚刚");
  595. new Element("div.dynamicItemTime",{styles:{"clear":"both"}}).inject(dynamicItem);
  596. this.dynamicContent.scrollTo(0,this.dynamicContent.getScrollSize().y);
  597. }.bind(this))
  598. }
  599. this.createChatContainer()
  600. }.bind(this))
  601. }.bind(this)
  602. })
  603. },
  604. addDynamicItem:function(){
  605. },
  606. getTaskData:function(callback){
  607. if(this.data.taskId){
  608. //this.actions.taskGet(this.data.taskId,function(json){
  609. this.actions.get(this.data.taskId,function(json){
  610. if(json.data) {
  611. this.taskData = json.data;
  612. if(callback)callback()
  613. }
  614. }.bind(this))
  615. }
  616. },
  617. setTaskData:function(){
  618. var _self = this;
  619. //名称
  620. if(this.taskNameContainer){
  621. this.loadNameValue();
  622. }
  623. //状态
  624. if(this.taskStatusValue){
  625. this.loadStatusValue()
  626. }
  627. //负责人
  628. if(this.taskDutyValue){
  629. this.loadDutyValue()
  630. }
  631. //时间
  632. if(this.taskTimeContainer){
  633. this.loadTimeValue()
  634. }
  635. //备注
  636. if(this.taskRemarkContainer){
  637. this.loadRemarkValue()
  638. }
  639. //优先级
  640. if(this.taskPriorityValue){
  641. this.loadPriorityValue()
  642. }
  643. //标签
  644. if(this.taskTagValue){
  645. this.loadTagValue()
  646. }
  647. //附件
  648. if(this.taskAttachmentValue){
  649. this.loadAttachment(this.taskAttachmentValue)
  650. }
  651. },
  652. saveTaskData:function(callback) {
  653. if(this.editor){
  654. this.taskData.description = encodeURI(this.editor.getData());
  655. }
  656. this.actions.save(this.taskData,function(json){
  657. if(this.editor) delete this.editor;
  658. //alert(JSON.stringify(json));
  659. this.reload();
  660. //刷新project区域内的task,可能有更新,删除等 干脆直接载入区域
  661. var data = {
  662. "act":"save",
  663. "taskId":json.data.id
  664. };
  665. this.reloadOutContent(data);
  666. }.bind(this))
  667. },
  668. reloadOutContent:function(json){
  669. if(json.act == "save"){
  670. //保存操作,刷新task即可
  671. var taskNode = this.explorer.container.getElementById(json.taskId);
  672. if(!taskNode) return;
  673. this.actions.get(json.taskId,function(d){
  674. this.explorer.loadTaskNode(taskNode,d.data)
  675. }.bind(this));
  676. }
  677. },
  678. updateSingleProperty:function(data,callback){
  679. //this.actions.updateSingleProperty(data.taskId,data,function(json){
  680. this.actions.updateSingleProperty(data.taskId,data,function(json){
  681. if(json.data.dynamics){
  682. json.data.dynamics.each(function(dd){
  683. this.loadDynamicItem(dd,"bottom");
  684. }.bind(this))
  685. }
  686. this.dynamicContent.scrollTo(0,this.dynamicContent.getScrollSize().y);
  687. if(callback)callback(json.data)
  688. }.bind(this))
  689. },
  690. loadNameValue:function(){ //名称
  691. var _self = this;
  692. this.taskNameContainer.set("text",this.taskData.name);
  693. if(this.control.isEdit){ //权限修改
  694. var node = this.taskNameContainer;
  695. var nameEdit = false;
  696. var overStatus = null;
  697. node.addEvents({
  698. mouseenter:function(){
  699. overStatus = window.setTimeout(function(){
  700. var opt={ axis: "y", position : { x : "auto", y : "top"} };
  701. //_self.app.showTips(node,{_html:"<div style='margin:2px 5px;'>"+_self.lp.editTip+"</div>"},opt);
  702. node.set("title",_self.lp.editTip);
  703. },300);
  704. if(this.getElement("input")) return;
  705. var name = this.get("text");
  706. node.empty();
  707. var input = new Element("input.taskNameInput",{type:"text",value:name,styles:_self.css.taskNameInput}).inject(node);
  708. input.addEvents({
  709. click:function(ev){
  710. nameEdit = true;
  711. if(_self.app.st&&_self.app.st.node)_self.app.st.node.destroy();
  712. delete _self.app.st;
  713. ev.stopPropagation()
  714. },
  715. blur:function(){
  716. var v = this.get("value").trim();
  717. if(v=="" || v == _self.taskData.name){
  718. _self.taskNameContainer.empty();
  719. _self.taskNameContainer.set("text",_self.taskData.name);
  720. _self.taskNameContainer.setStyles({"background-color":""});
  721. _self.taskData.name = v;
  722. }else{
  723. if(v != _self.taskData.name){
  724. var sd = {
  725. taskId:_self.taskData.id,
  726. property:"name",
  727. mainValue:v,
  728. secondaryValue:""
  729. }
  730. _self.updateSingleProperty(sd,function(json){
  731. _self.taskNameContainer.empty();
  732. _self.taskNameContainer.set("text",v);
  733. _self.taskNameContainer.setStyles({"background-color":""});
  734. _self.taskData.name = v;
  735. nameEdit = false;
  736. })
  737. }
  738. }
  739. }
  740. });
  741. },
  742. mouseleave:function(){
  743. window.clearTimeout(overStatus);
  744. if(!nameEdit){
  745. if(this.getElement("input")){
  746. var n = this.getElement("input").get("value");
  747. this.empty();
  748. this.set("text",n);
  749. }
  750. this.setStyles({"background-color":""})
  751. }
  752. }
  753. });
  754. }
  755. },
  756. loadStatusValue:function(){ //状态
  757. var _self = this;
  758. if(this.taskStatusValue) this.taskStatusValue.empty();
  759. this.taskStatusValueContainer = new Element("div.taskStatusValueContainer",{styles:this.css.taskStatusValueContainer}).inject(this.taskStatusValue);
  760. this.taskStatusValueIcon = new Element("div.taskStatusValueIcon",{styles:this.css.taskStatusValueIcon}).inject(this.taskStatusValueContainer);
  761. this.taskStatusValueText = new Element("div.taskStatusValueText",{styles:this.css.taskStatusValueText}).inject(this.taskStatusValueContainer);
  762. if(this.taskData.workStatus == "draft"){
  763. this.taskStatusValueContainer.setStyles({"color":"#666666"});
  764. this.taskStatusValueIcon.setStyles({"background-image":"url(../x_component_TeamWork/$Task/default/icon/icon_draft.png)"});
  765. this.taskStatusValueText.set("text",this.lp.status.draft);
  766. }else if(this.taskData.workStatus == "flow"){
  767. this.taskStatusValueContainer.setStyles({"color":"#666666"});
  768. this.taskStatusValueIcon.setStyles({"background-image":"url(../x_component_TeamWork/$Task/default/icon/icon_flow.png)"});
  769. this.taskStatusValueText.set("text",this.lp.status.flow);
  770. }else if(this.taskData.workStatus == "processing") {
  771. this.taskStatusValueContainer.setStyles({"color": "#666666"});
  772. this.taskStatusValueIcon.setStyles({"background-image": "url(../x_component_TeamWork/$Task/default/icon/icon_flow.png)"});
  773. this.taskStatusValueText.set("text",this.lp.status.processing);
  774. }else if(this.taskData.workStatus == "completed"){
  775. this.taskStatusValueContainer.setStyles({"color":"#69b439"});
  776. this.taskStatusValueIcon.setStyles({"background-image":"url(../x_component_TeamWork/$Task/default/icon/icon_complete.png)"});
  777. this.taskStatusValueText.set("text",this.lp.status.completed);
  778. }
  779. if(this.control.isEdit){ //权限
  780. this.taskStatusValueContainer.addEvents({
  781. click:function(){
  782. var sc = new MWF.xApplication.TeamWork.Task.StatusCheck(this.container, this.taskStatusValueContainer, this.app, {data:this.taskData}, {
  783. css:this.css, lp:this.lp, axis : "y",
  784. position : { //node 固定的位置
  785. x : "right",
  786. y : "middle"
  787. },
  788. nodeStyles : {
  789. "min-width":"200px",
  790. "padding":"2px",
  791. "border-radius":"5px",
  792. "box-shadow":"0px 0px 4px 0px #999999",
  793. "z-index" : "201"
  794. },
  795. onPostLoad:function(){
  796. sc.node.setStyles({"opacity":"0","top":(sc.node.getStyle("top").toInt()+4)+"px"});
  797. var fx = new Fx.Tween(sc.node,{duration:400});
  798. fx.start(["opacity"] ,"0", "1");
  799. },
  800. onClose:function(rd){
  801. if(!rd) return;
  802. if(rd.status){
  803. if(rd.status != this.taskData.workStatus){
  804. var sd = {
  805. taskId:_self.taskData.id,
  806. property:"workStatus",
  807. mainValue:rd.status,
  808. secondaryValue:""
  809. };
  810. _self.updateSingleProperty(sd,function(){
  811. this.taskData.workStatus = rd.status;
  812. this.loadStatusValue();
  813. }.bind(this))
  814. }
  815. }
  816. }.bind(this)
  817. });
  818. sc.load();
  819. }.bind(this),
  820. mouseover:function(){
  821. this.setStyles({"background-color":"#efefef"});
  822. this.getElement(".taskStatusValueIcon").setStyles({ "background-image":"url(../x_component_TeamWork/$Task/default/icon/icon_down.png)"})
  823. },
  824. mouseout:function(){
  825. this.setStyles(_self.css.taskStatusValueContainer);
  826. var bgurl = "url(../x_component_TeamWork/$Task/default/icon/icon_draft.png)";
  827. if(_self.taskData.workStatus == "processing")bgurl = "url(../x_component_TeamWork/$Task/default/icon/icon_flow.png)";
  828. else if(_self.taskData.workStatus == "completed")bgurl = "url(../x_component_TeamWork/$Task/default/icon/icon_complete.png)";
  829. this.getElement(".taskStatusValueIcon").setStyles({"background-image":bgurl})
  830. }
  831. });
  832. }
  833. },
  834. loadDutyValue:function(){
  835. var _self = this;
  836. if(this.taskDutyValue) this.taskDutyValue.empty();
  837. this.taskDutyValueContainer = new Element("div.taskDutyValueContainer",{styles:this.css.taskDutyValueContainer}).inject(this.taskDutyValue);
  838. if(this.control.isEdit){//权限
  839. if(this.taskData.executor==""){
  840. this.taskDutyAddIcon = new Element("div.taskDutyAddIcon",{styles:this.css.taskDutyAddIcon}).inject(this.taskDutyValueContainer);
  841. this.taskDutyAddText = new Element("div.taskDutyAddText",{styles:this.css.taskDutyAddText,text:this.lp.addDuty}).inject(this.taskDutyValueContainer);
  842. this.taskDutyAddText.addEvents({
  843. mouseover:function(){this.setStyles({"color":"#4a90e2"})},
  844. mouseout:function(){this.setStyles({"color":"#666666"})},
  845. click:function(){
  846. this.selectPerson(this.taskDutyAddText,"identity",null,1,
  847. function(json){
  848. if(json.length>0){
  849. this.taskData.executor = json[0];
  850. this.loadDutyValue()
  851. }
  852. }.bind(this));
  853. }.bind(this)
  854. })
  855. }else{
  856. this.loadTaskPerson(this.taskDutyValueContainer,this.taskData.executor,this.taskData.control.founder);
  857. }
  858. }else{
  859. if(this.taskData.executor!=""){
  860. this.loadTaskPerson(this.taskDutyValueContainer,this.taskData.executor);
  861. }
  862. }
  863. },
  864. loadTimeValue:function(){
  865. var _self = this;
  866. this.taskStartTime = new Element("div.taskStartTime",{styles:this.css.taskStartTime}).inject(this.taskTimeContainer);
  867. this.taskTimeLine = new Element("div.taskTimeLine",{styles:this.css.taskTimeLine,text:"-"}).inject(this.taskTimeContainer);
  868. this.taskEndTime = new Element("div.taskEndTime",{styles:this.css.taskEndTime}).inject(this.taskTimeContainer);
  869. if(this.taskData.startTime && this.taskData.startTime!=""){
  870. this.taskStartTime.set("text",this.taskData.startTime);
  871. this.taskStartTime.setStyles({"color":"#333333"});
  872. }else{
  873. this.taskStartTime.set("text",this.lp.taskTimeStart);
  874. }
  875. if(this.taskData.endTime && this.taskData.endTime!=""){
  876. this.taskEndTime.set("text",this.taskData.endTime);
  877. this.taskEndTime.setStyles({"color":"#333333"});
  878. }else{
  879. this.taskEndTime.set("text",this.lp.taskTimeEnd);
  880. }
  881. if(this.control.isEdit){ //权限
  882. this.taskStartTime.setStyles({"background-color":"#f5f5f5","cursor":"pointer"});
  883. this.taskEndTime.setStyles({"background-color":"#f5f5f5","cursor":"pointer"});
  884. this.taskStartTime.addEvents({
  885. click:function(){
  886. var opt = {
  887. type:"datetime"
  888. };
  889. this.app.selectCalendar(this.taskStartTime,this.container,opt,function(json){
  890. var sd = {
  891. taskId:_self.taskData.id,
  892. property:"startTime",
  893. secondaryValue:""
  894. };
  895. if(json.action == "ok"){
  896. this.taskStartTime.set("text",json.dateString+":00");
  897. sd.mainValue = json.dateString+":00"
  898. }else if(json.action == "clear"){
  899. this.taskStartTime.set("text",this.lp.taskTimeStart);
  900. sd.mainValue = ""
  901. }
  902. this.updateSingleProperty(sd)
  903. }.bind(this))
  904. }.bind(this)
  905. });
  906. this.taskEndTime.addEvents({
  907. click:function(){
  908. var opt = {
  909. type:"datetime"
  910. };
  911. this.app.selectCalendar(this.taskEndTime,this.container,opt,function(json){
  912. var sd = {
  913. taskId:_self.taskData.id,
  914. property:"endTime",
  915. secondaryValue:""
  916. };
  917. if(json.action == "ok"){
  918. this.taskEndTime.set("text",json.dateString+":00");
  919. sd.mainValue = json.dateString + ":00"
  920. }else if(json.action == "clear"){
  921. this.taskEndTime.set("text",this.lp.taskTimeEnd);
  922. sd.mainValue = ""
  923. }
  924. this.updateSingleProperty(sd)
  925. }.bind(this))
  926. }.bind(this)
  927. })
  928. }
  929. },
  930. loadRemarkValue:function(){
  931. var _self = this;
  932. var value = this.taskData.description || "";
  933. value = decodeURI(value);
  934. this.taskRemarkValue.set("html",value);
  935. if(this.taskRemarkValue.getFirst("p")){
  936. this.taskRemarkValue.getFirst("p").setStyles({"margin-top":"0px"})
  937. }
  938. if(this.editor) delete this.editor;
  939. if(this.control.isEdit){ //权限
  940. if(value == ""){
  941. this.taskRemarkValue.set("text",this.lp.editTip);
  942. }
  943. this.taskRemarkValue.removeEvents(["click"])
  944. this.taskRemarkValue.addEvents({
  945. click:function(e){
  946. this.taskRemarkValue.setStyles({"background-color":"","color":""});
  947. this.taskRemarkValue.removeEvents(["mouseenter"]);
  948. if(!this.editor)this.taskRemarkValue.empty();
  949. this.loadRemarkEditor(this.taskRemarkValue,value,"taskRemark");
  950. e.stopPropagation();
  951. }.bind(this),
  952. mouseenter:function(){
  953. this.taskRemarkValue.setStyles({"background-color":"#f5f5f5","color":"#999999"})
  954. }.bind(this),
  955. mouseleave:function(){
  956. this.taskRemarkValue.setStyles({"background-color":"","color":""})
  957. }.bind(this)
  958. });
  959. }
  960. },
  961. loadPriorityValue:function(){
  962. if(this.taskPriorityValue)this.taskPriorityValue.empty();
  963. var node = new Element("div.taskPriorityValueText",{styles:this.css.taskPriorityValueText}).inject(this.taskPriorityValue);
  964. var dColor = "#999999";
  965. if(this.taskData.priority){
  966. var arr = this.taskData.priority.split("||");
  967. var name = arr[0]?arr[0]:this.lp.priority.normal;
  968. var color = arr[1]?arr[1]:dColor;
  969. node.set("text",name);
  970. // if(this.taskData.priority == this.lp.priority.urgency) curColor = "#ffaf38";
  971. // else if(this.taskData.priority == this.lp.priority.emergency) curColor = "#ff4f3e";
  972. node.setStyles({"color":color,"border":"1px solid "+color+""});
  973. }else{
  974. node.set("text",this.lp.priority.normal)
  975. }
  976. if(this.control.isEdit){
  977. node.addEvents({
  978. click:function(){
  979. var pc = new MWF.xApplication.TeamWork.Task.PriorityCheck(this.container, node, this.app, {data:this.taskData}, {
  980. css:this.css, lp:this.lp, axis : "y",
  981. position : { //node 固定的位置
  982. x : "right",
  983. y : "middle"
  984. },
  985. nodeStyles : {
  986. "min-width":"200px",
  987. "padding":"2px",
  988. "border-radius":"5px",
  989. "box-shadow":"0px 0px 4px 0px #999999",
  990. "z-index" : "201"
  991. },
  992. onPostLoad:function(){
  993. pc.node.setStyles({"opacity":"0","top":(pc.node.getStyle("top").toInt()+4)+"px"});
  994. var fx = new Fx.Tween(pc.node,{duration:400});
  995. fx.start(["opacity"] ,"0", "1");
  996. },
  997. onClose:function(rd){
  998. if(!rd) return;
  999. if(rd.value){
  1000. if(rd.value != this.taskData.priority){
  1001. var sd = {
  1002. taskId:this.taskData.id,
  1003. property:"priority",
  1004. mainValue:rd.value,
  1005. secondaryValue:""
  1006. };
  1007. this.updateSingleProperty(sd,function(){
  1008. this.taskData.priority = rd.value;
  1009. this.loadPriorityValue();
  1010. }.bind(this))
  1011. }
  1012. }
  1013. this.loadPriorityValue();
  1014. }.bind(this)
  1015. });
  1016. pc.load();
  1017. }.bind(this),
  1018. mouseover:function(){
  1019. this.setStyles({"border":"1px solid #4A90E2","color":"#4A90E2"})
  1020. },
  1021. mouseout:function(){
  1022. this.setStyles({"border":"1px solid "+color+"","color":color})
  1023. }
  1024. })
  1025. }
  1026. },
  1027. loadTagValue:function(){
  1028. if(this.taskTagValue)this.taskTagValue.empty();
  1029. this.taskTagLayout = new Element("div.taskTagLayout",{styles:this.css.taskTagLayout}).inject(this.taskTagValue);
  1030. this.taskTagAddContainer = new Element("div.taskTagAddContainer",{styles:this.css.taskTagAddContainer}).inject(this.taskTagValue);
  1031. this.taskTagAddText = new Element("div.taskTagAddText",{styles:this.css.taskTagAddText,text:this.lp.taskTagAddText}).inject(this.taskTagAddContainer);
  1032. this.taskTagAddText.addEvents({
  1033. mouseover:function(){this.setStyles({"color":"#4A90E2"})},
  1034. mouseout:function(){this.setStyles({"color":"#666666"})},
  1035. click:function(){
  1036. this.loadTaskTag(this.taskTagAddText)
  1037. }.bind(this)
  1038. });
  1039. this.taskTagAdd = new Element("div.taskTagAdd",{styles:this.css.taskTagAdd}).inject(this.taskTagAddContainer);
  1040. this.taskTagAdd.addEvents({
  1041. mouseover:function(){this.setStyles({"background-image":"url(../x_component_TeamWork/$Task/default/icon/icon_subtask_add.png)"})},
  1042. mouseout:function(){this.setStyles({"background-image":"url(../x_component_TeamWork/$Task/default/icon/icon_jia.png)"})},
  1043. click:function(){
  1044. this.loadTaskTag(this.taskTagAdd)
  1045. }.bind(this)
  1046. });
  1047. if(!this.taskData.tags || this.taskData.tags.length==0){
  1048. this.taskTagAdd.hide();
  1049. }else{
  1050. this.taskTagAddText.hide();
  1051. this.taskData.tags.each(function(json){
  1052. this.loadTagItem(json)
  1053. }.bind(this))
  1054. }
  1055. },
  1056. loadTagItem:function(data){
  1057. var _self = this;
  1058. var tagItemContainer = new Element("div.tagItemContainer",{styles:this.css.tagItemContainer,id:data.id}).inject(this.taskTagLayout);
  1059. tagItemContainer.setStyles({"background-color":data.tagColor});
  1060. tagItemContainer.addEvents({
  1061. mouseenter:function(){
  1062. var tagItemClose = new Element("div.tagItemClose",{styles:_self.css.tagItemClose}).inject(tagItemContainer);
  1063. tagItemContainer.setStyles({"width":(tagItemContainer.getWidth().toInt()+2)+"px"});
  1064. tagItemText.setStyles({"margin-right":"5px"});
  1065. tagItemText.set("title",data.tag);
  1066. tagItemClose.addEvents({
  1067. click:function(){
  1068. _self.rootActions.TaskTagAction.removeTagRele(_self.taskData.id,data.id,function(json){
  1069. if(json.data.dynamics){
  1070. json.data.dynamics.each(function(dd){
  1071. _self.loadDynamicItem(dd,"bottom")
  1072. })
  1073. }
  1074. _self.dynamicContent.scrollTo(0,_self.dynamicContent.getScrollSize().y);
  1075. tagItemContainer.destroy();
  1076. _self.taskData.tags.each(function(ddd){
  1077. if(ddd.id == data.id){
  1078. _self.taskData.tags.erase(ddd)
  1079. }
  1080. })
  1081. })
  1082. }
  1083. })
  1084. },
  1085. mouseleave:function(){
  1086. //tagItemContainer.setStyles({"width":(tagItemContainer.getWidth().toInt()-this.getElement(".tagItemClose").getWidth()-2)+"px"});
  1087. tagItemContainer.setStyles({"width":""});
  1088. tagItemText.setStyles({"margin-right":"10px"});
  1089. this.getElement(".tagItemClose").destroy();
  1090. }
  1091. });
  1092. var tagItemText = new Element("div.tagItemText",{styles:this.css.tagItemText}).inject(tagItemContainer);
  1093. tagItemText.set("text",data.tag);
  1094. },
  1095. loadTaskTag:function(node){
  1096. MWF.xDesktop.requireApp("TeamWork", "TaskTag", function(){
  1097. //alert(JSON.stringify(this.taskData.tags))
  1098. var data = {
  1099. projectId:this.taskData.project,
  1100. taskId:this.taskData.id,
  1101. taskTags:this.taskData.tags||[]
  1102. };
  1103. var pc = new MWF.xApplication.TeamWork.TaskTag(this.container, node, this.app, data, {
  1104. axis : "y",
  1105. position : { //node 固定的位置
  1106. x : "right",
  1107. y : "middle"
  1108. },
  1109. nodeStyles : {
  1110. "min-width":"200px",
  1111. "width":"210px",
  1112. //"height":"80px",
  1113. "padding":"2px",
  1114. "border-radius":"2px",
  1115. "box-shadow":"0px 0px 4px 0px #999999",
  1116. "z-index" : "201"
  1117. },
  1118. onPostLoad:function(){
  1119. pc.node.setStyles({"opacity":"0","top":(pc.node.getStyle("top").toInt())+"px"});
  1120. var fx = new Fx.Tween(pc.node,{duration:400});
  1121. fx.start(["opacity"] ,"0", "1");
  1122. },
  1123. onClose:function(rd){
  1124. if(!rd) return;
  1125. // if(rd.value && rd.value !=""){
  1126. // this.chatTextarea.set("value",this.chatTextarea.get("value")+"["+rd.value+"]")
  1127. // }
  1128. }.bind(this)
  1129. },null,this);
  1130. pc.load();
  1131. }.bind(this))
  1132. },
  1133. loadRemarkEditor:function(parent,value,name){
  1134. if(this.editor)return;
  1135. COMMON.AjaxModule.load("ckeditor", function(){
  1136. //CKEDITOR.disableAutoInline = true;
  1137. var item = new Element("div",{
  1138. "name" : name,
  1139. "id" : name
  1140. });
  1141. //item.set( attr );
  1142. if(parent)item.inject(parent);
  1143. //if( value )item.set("html", value);
  1144. var editorConfig = {
  1145. "autoGrow_maxHeight": 400,
  1146. //"autoGrow_minHeight": 300,
  1147. "resize_enabled": true,
  1148. //"resize_maxHeight": "3000",
  1149. //"resize_minHeight": "200",
  1150. "autoParagraph": true,
  1151. "autoUpdateElement": true,
  1152. "enterMode": 1,
  1153. "height": 100,
  1154. "width": 580,
  1155. "readOnly": false,
  1156. "startupFocus" : true,
  1157. toolbar : [
  1158. //{ name: 'document', items : [ 'Preview' ] },
  1159. //{ name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
  1160. { name: 'basicstyles', items : [ 'Bold','Underline','Strike','-','RemoveFormat' ] },
  1161. //{ name: 'paragraph', items : [ 'JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock' ] },
  1162. { name: 'styles', items : [ 'Font','FontSize' ] },
  1163. { name: 'colors', items : [ 'TextColor' ] },
  1164. { name: 'links', items : [ 'Link','Unlink' ] },
  1165. //{ name: 'insert', items : [ 'Image' ] },
  1166. { name: 'tools', items : [ 'Maximize','-' ] }
  1167. ]
  1168. };
  1169. if( this.options.RTFConfig ){
  1170. editorConfig = Object.merge( editorConfig, this.options.RTFConfig )
  1171. }
  1172. if( editorConfig.skin )editorConfig.skin = "moono-lisa";
  1173. this.editor = CKEDITOR.replace(item, editorConfig);
  1174. //this.items.push( this.editor );
  1175. this.editor.setData(value);
  1176. this.editor.on('instanceReady', function (e) {
  1177. this.editor.focus();
  1178. var range = this.editor.createRange();
  1179. range.moveToElementEditEnd(this.editor.editable());
  1180. this.editor.getSelection().selectRanges([range]);
  1181. this.taskRemarkActionContainer = new Element("div.taskRemarkActionContainer",{styles:this.css.taskRemarkActionContainer}).inject(parent);
  1182. this.taskRemarkActionOk = new Element("div.taskRemarkActionOk",{styles:this.css.taskRemarkActionOk,text:this.lp.save}).inject(this.taskRemarkActionContainer);
  1183. this.taskRemarkActionOk.addEvents({
  1184. mouseover:function(){this.setStyles({"opacity":"0.9"})},
  1185. mouseout:function(){this.setStyles({"opacity":"1"})},
  1186. click:function(e){
  1187. var sd = {
  1188. taskId:this.taskData.id,
  1189. property:"description",
  1190. dataType:"RichText",
  1191. mainValue:encodeURI(this.editor.getData()),
  1192. secondaryValue:this.editor.document.getBody().getText()
  1193. }
  1194. this.updateSingleProperty(sd,function(json){
  1195. this.taskData.description = encodeURI(this.editor.getData());
  1196. this.loadRemarkValue()
  1197. delete this.editor;
  1198. }.bind(this))
  1199. e.stopPropagation();
  1200. //this.taskData.description = encodeURI(this.editor.getData());
  1201. }.bind(this)
  1202. });
  1203. this.taskRemarkActionCancel = new Element("div.taskRemarkActionCancel",{styles:this.css.taskRemarkActionCancel,text:this.lp.cancel}).inject(this.taskRemarkActionContainer);
  1204. this.taskRemarkActionCancel.addEvents({
  1205. mouseover:function(){this.setStyles({"color":"#4A90E2"})},
  1206. mouseout:function(){this.setStyles({"color":"#999999"})},
  1207. click:function(e){
  1208. this.loadRemarkValue();
  1209. e.stopPropagation()
  1210. }.bind(this)
  1211. })
  1212. }.bind(this))
  1213. }.bind(this));
  1214. },
  1215. loadAttachment: function( area ){
  1216. MWF.xDesktop.requireApp("TeamWork", "TaskAttachment", function(){
  1217. this.attachment = new MWF.xApplication.TeamWork.TaskAttachment( area, this.app, this.actions, this.app.lp, {
  1218. size:"max",
  1219. documentId : this.taskData.id,
  1220. //isNew : this.options.isNew,
  1221. //isEdited : this.options.isEdited,
  1222. onQueryUploadAttachment : function(){
  1223. this.attachment.isQueryUploadSuccess = true;
  1224. if( !this.taskData.id || this.taskData.id=="" ){
  1225. }
  1226. }.bind(this)
  1227. });
  1228. this.attachment.load();
  1229. }.bind(this));
  1230. },
  1231. loadTaskAttachmentListContainer:function(){
  1232. MWF.xDesktop.requireApp("TeamWork", "TaskAttachmentList", function(){
  1233. var data = {
  1234. id:this.taskData.id
  1235. };
  1236. var opt = {};
  1237. this.attachment = new MWF.xApplication.TeamWork.TaskAttachmentList( this,this.taskAttachmentListContainer, data, opt);
  1238. this.attachment.load();
  1239. }.bind(this));
  1240. },
  1241. loadSubTaskContainer:function(){
  1242. this.subTaskContainer.empty();
  1243. this.subTaskTitleContent = new Element("div.subTaskTitleContent",{styles:this.css.subTaskTitleContent}).inject(this.subTaskContainer);
  1244. this.subTaskTitleIcon = new Element("div.subTaskTitleIcon",{styles:this.css.subTaskTitleIcon}).inject(this.subTaskTitleContent);
  1245. this.subTaskTitleText = new Element("div.subTaskTitleText",{styles:this.css.subTaskTitleText,text:this.lp.taskSubName+""}).inject(this.subTaskTitleContent);
  1246. this.subTaskValueContent = new Element("div.subTaskValueContent",{styles:this.css.subTaskValueContent}).inject(this.subTaskContainer);
  1247. this.subTaskAddContainer = new Element("div.subTaskAddContainer",{styles:this.css.subTaskAddContainer}).inject(this.subTaskValueContent);
  1248. //子任务列表
  1249. this.subTaskListContent = new Element("div.subTaskListContent",{styles:this.css.subTaskListContent}).inject(this.subTaskAddContainer);
  1250. this.loadSubTask();
  1251. //添加子任务
  1252. if(this.control.isEdit){ //权限
  1253. this.subTaskNewContent = new Element("div.subTaskNewContent",{styles:this.css.subTaskNewContent}).inject(this.subTaskAddContainer);
  1254. this.subTaskNewIcon = new Element("div.subTaskNewIcon",{styles:this.css.subTaskNewIcon}).inject(this.subTaskNewContent);
  1255. this.subTaskNewText = new Element("div.subTaskNewText",{styles:this.css.subTaskNewText,text:this.lp.taskSubText}).inject(this.subTaskNewContent);
  1256. this.subTaskNewContent.addEvents({
  1257. click:function(){
  1258. this.subTaskNewContent.hide();
  1259. if(this.subTaskNewContainer)this.subTaskNewContainer.destroy();
  1260. this.subTaskNewContainer = new Element("div.subTaskNewContainer",{styles:this.css.subTaskNewContainer}).inject(this.subTaskAddContainer);
  1261. this.subTaskNewValue = new Element("div.subTaskNewValue",{styles:this.css.subTaskNewValue}).inject(this.subTaskNewContainer);
  1262. this.subTaskNewInput = new Element("input.subTaskNewInput",{styles:this.css.subTaskNewInput,placeholder:this.lp.taskSubNamePlaceholder}).inject(this.subTaskNewValue);
  1263. this.subTaskNewPerson = new Element("div.subTaskNewPerson",{styles:this.css.subTaskNewPerson}).inject(this.subTaskNewValue);
  1264. this.subTaskNewPerson.addEvent("click",function(){
  1265. this.selectPerson(this.subTaskNewPerson,"identity",null,1,
  1266. function(json){
  1267. if(json.length>0){
  1268. this.taskSubNewPerson = json[0];
  1269. this.loadSubTaskPerson(this.subTaskNewPerson,json[0],true)
  1270. }
  1271. }.bind(this)
  1272. );
  1273. }.bind(this));
  1274. this.subTaskNewAction = new Element("div.subTaskNewAction",{styles:this.css.subTaskNewAction}).inject(this.subTaskNewContainer);
  1275. this.subTaskNewCancel = new Element("div.subTaskNewCancel",{styles:this.css.subTaskNewCancel,text:this.lp.cancel}).inject(this.subTaskNewAction);
  1276. this.subTaskNewCancel.addEvents({
  1277. click:function(){
  1278. this.subTaskNewContent.show();
  1279. this.subTaskNewContainer.destroy()
  1280. }.bind(this),
  1281. mouseover:function(){
  1282. this.setStyles({"color":"#4A90E2"})
  1283. },
  1284. mouseout:function(){
  1285. this.setStyles({"color":"#666666"})
  1286. }
  1287. });
  1288. this.subTaskNewOK = new Element("div.subTaskNewOK",{styles:this.css.subTaskNewOK,text:this.lp.save}).inject(this.subTaskNewAction);
  1289. this.subTaskNewOK.addEvents({
  1290. click:function(){
  1291. if(this.subTaskNewInput.get("value").trim()=="") return;
  1292. var data = {
  1293. name:this.subTaskNewInput.get("value").trim(),
  1294. project:this.taskData.project,
  1295. parent:this.taskData.id,
  1296. taskGroupId:this.taskData.taskGroupId,
  1297. executor:this.taskSubNewPerson || ""
  1298. };
  1299. this.actions.save(data,function(json){
  1300. this.taskSubNewPerson = "";
  1301. if(json.data.id){
  1302. //this.actions.taskGet(json.data.id,function(d){
  1303. this.actions.get(json.data.id,function(d){
  1304. this.loadSubTaskItem(this.subTaskListContent,d.data);
  1305. }.bind(this))
  1306. }
  1307. this.subTaskNewContent.show();
  1308. this.subTaskNewContainer.destroy();
  1309. if(json.data.dynamics){
  1310. json.data.dynamics.each(function(dd){
  1311. this.loadDynamicItem(dd,"bottom")
  1312. }.bind(this));
  1313. }
  1314. this.dynamicContent.scrollTo(0,this.dynamicContent.getScrollSize().y);
  1315. }.bind(this))
  1316. }.bind(this)
  1317. })
  1318. }.bind(this)
  1319. });
  1320. }
  1321. },
  1322. loadSubTask:function(){
  1323. var node = this.subTaskListContent;
  1324. node.empty();
  1325. this.actions.listSubTaskWithTaskId(this.taskData.id,function(json){
  1326. json.data.each(function(data){
  1327. this.loadSubTaskItem(node,data);
  1328. }.bind(this))
  1329. }.bind(this))
  1330. },
  1331. loadSubTaskItem:function(node,data){
  1332. var subTaskItemContainer = new Element("div.subTaskItemContainer",{styles:this.css.subTaskItemContainer,id:data.id}).inject(node);
  1333. var subTaskItemText = new Element("div.subTaskItemText",{styles:this.css.subTaskItemText,text:data.name,title:this.lp.taskSubDes}).inject(subTaskItemContainer);
  1334. subTaskItemText.addEvents({
  1335. mouseover:function(){
  1336. this.setStyles({"background-color":"#f5f5f5"})
  1337. },
  1338. mouseout:function(){
  1339. this.setStyles({"background-color":""})
  1340. },
  1341. click:function(){
  1342. var id = subTaskItemContainer.get("id");
  1343. if(id && id!=""){
  1344. this.data.taskId = id;
  1345. this.openTask()
  1346. }
  1347. }.bind(this)
  1348. });
  1349. var subTaskItemPerson = new Element("div.subTaskItemPerson",{styles:this.css.subTaskItemPerson}).inject(subTaskItemContainer);
  1350. // subTaskItemPerson.addEvent("click",function(){
  1351. // this.selectPerson(subTaskItemPerson,"identity",null,1,
  1352. // function(json){
  1353. // if(json.length>0){
  1354. // this.loadSubTaskPerson(subTaskItemPerson,json[0],true)
  1355. // }
  1356. // }.bind(this)
  1357. // );
  1358. // }.bind(this));
  1359. if(data.executor && data.executor!=""){
  1360. this.loadSubTaskPerson(subTaskItemPerson,data.executor)
  1361. }
  1362. },
  1363. loadSubTaskPerson:function(node,identity,flag){
  1364. if(flag==null) flag=false;
  1365. node.empty();
  1366. var taskSubNewPerson = identity;
  1367. var _self = this
  1368. var name = identity.split("@")[0];
  1369. var container = new Element("div",{styles:{"height":"30px","padding":"0px 8px 0px 2px","border-radius":"4px","float":"left","position":"relative"}}).inject(node);
  1370. container.set("title",name);
  1371. var circleStyles={
  1372. "width":"24px","height":"24px","border-radius":"20px","float":"left",
  1373. "background-color":"#4A90E2","color":"#ffffff","line-height":"22px",
  1374. "text-align":"center","margin-top":"3px","font-size":"12px"
  1375. };
  1376. var closeStyles={
  1377. "width":"16px","height":"16px","position":"absolute","right":"-5px","top":"-2px",
  1378. "background":"url(../x_component_TeamWork/$Task/default/icon/icon_off.png) no-repeat center"
  1379. };
  1380. var circleDiv = new Element("div",{styles:circleStyles,text:name.substr(0,1)}).inject(container);
  1381. if(flag){ //权限
  1382. container.addEvents({
  1383. mouseenter:function(){
  1384. var closeIcon = new Element("div.closeIcon",{styles:closeStyles}).inject(this);
  1385. closeIcon.addEvents({
  1386. click:function(e){
  1387. node.empty();
  1388. node.setStyles(_self.css.subTaskNewPerson);
  1389. container.destroy();
  1390. e.stopPropagation();
  1391. }
  1392. });
  1393. this.setStyles({"background-color":"#efefef","cursor":"pointer"});
  1394. },
  1395. mouseleave:function(){
  1396. if(this.getElement(".closeIcon"))this.getElement(".closeIcon").destroy();
  1397. this.setStyles({"background-color":""})
  1398. },
  1399. click:function(e){
  1400. this.selectPerson(this.subTaskNewPerson,"identity",null,1,
  1401. function(json){
  1402. if(json.length>0){
  1403. taskSubNewPerson = json[0];
  1404. this.loadSubTaskPerson(this.subTaskNewPerson,json[0],true)
  1405. }
  1406. }.bind(this)
  1407. );
  1408. e.stopPropagation();
  1409. }.bind(this)
  1410. })
  1411. }
  1412. },
  1413. loadTaskPerson:function(node,identity,flag){
  1414. var _self = this
  1415. var name = identity.split("@")[0];
  1416. var container = new Element("div",{styles:{"height":"30px","padding":"0 0px","border-radius":"4px","float":"left","position":"relative"}}).inject(node);
  1417. var circleStyles={
  1418. "width":"24px","height":"24px","border-radius":"20px","float":"left",
  1419. "background-color":"#4A90E2","color":"#ffffff","line-height":"22px",
  1420. "text-align":"center","margin-top":"3px","font-size":"12px"
  1421. };
  1422. var nameStyles={
  1423. "height":"24px","float":"left","margin-left":"2px","margin-right":"10px",
  1424. "color":"#333333","line-height":"22px","margin-top":"3px"
  1425. };
  1426. var closeStyles={
  1427. "width":"16px","height":"16px","position":"absolute","right":"0px",
  1428. "background":"url(../x_component_TeamWork/$Task/default/icon/icon_off.png) no-repeat center"
  1429. };
  1430. var circleDiv = new Element("div",{styles:circleStyles,text:name.substr(0,1)}).inject(container);
  1431. var nameDiv = new Element("div",{styles:nameStyles,text:name}).inject(container);
  1432. if(flag){ //权限
  1433. container.addEvents({
  1434. mouseenter:function(){
  1435. // var closeIcon = new Element("div.closeIcon",{styles:closeStyles}).inject(this);
  1436. // closeIcon.addEvents({
  1437. // click:function(e){
  1438. // // _self.taskData.executor = "";
  1439. // // _self.loadDutyValue();
  1440. //
  1441. // var sd = {
  1442. // taskId:_self.taskData.id,
  1443. // property:"executor",
  1444. // mainValue:"",
  1445. // secondaryValue:""
  1446. // };
  1447. // _self.updateSingleProperty(sd,function(){
  1448. // _self.taskData.executor = "";
  1449. // _self.loadDutyValue()
  1450. // })
  1451. //
  1452. // e.stopPropagation();
  1453. // }
  1454. // });
  1455. this.setStyles({"background-color":"#efefef","cursor":"pointer"});
  1456. },
  1457. mouseleave:function(){
  1458. if(this.getElement(".closeIcon"))this.getElement(".closeIcon").destroy();
  1459. this.setStyles({"background-color":""})
  1460. },
  1461. click:function(e){
  1462. _self.selectPerson(_self.taskDutyAddText,"identity",null,1,
  1463. function(json){
  1464. if(json.length>0){
  1465. if(_self.taskData.executor!=json[0]){
  1466. var sd = {
  1467. taskId:_self.taskData.id,
  1468. property:"executor",
  1469. mainValue:json[0],
  1470. secondaryValue:""
  1471. };
  1472. _self.updateSingleProperty(sd,function(){
  1473. _self.taskData.executor = json[0];
  1474. _self.loadDutyValue()
  1475. })
  1476. }
  1477. }
  1478. }
  1479. );
  1480. }
  1481. })
  1482. }
  1483. },
  1484. loadparticipantPerson:function(node,identity,flag){
  1485. var _self = this;
  1486. var name = identity.split("@")[0];
  1487. var container = new Element("div",{styles:{"height":"30px","padding":"0 0px","border-radius":"4px","float":"left","position":"relative"}}).inject(node);
  1488. var circleStyles={
  1489. "width":"24px","height":"24px","border-radius":"20px","float":"left",
  1490. "background-color":"#4A90E2","color":"#ffffff","line-height":"22px",
  1491. "text-align":"center","margin-top":"3px","font-size":"12px"
  1492. };
  1493. var nameStyles={
  1494. "height":"24px","float":"left","margin-left":"2px","margin-right":"16px",
  1495. "color":"#333333","line-height":"22px","margin-top":"3px"
  1496. };
  1497. var closeStyles={
  1498. "width":"16px","height":"16px","position":"absolute","right":"0px",
  1499. "background":"url(../x_component_TeamWork/$Task/default/icon/icon_off.png) no-repeat center"
  1500. };
  1501. var circleDiv = new Element("div",{styles:circleStyles,text:name.substr(0,1)}).inject(container);
  1502. var nameDiv = new Element("div",{styles:nameStyles,text:name}).inject(container);
  1503. if(flag){ //权限
  1504. container.addEvents({
  1505. mouseenter:function(){
  1506. var closeIcon = new Element("div.closeIcon",{styles:closeStyles}).inject(this);
  1507. closeIcon.addEvents({
  1508. click:function(e){
  1509. var index = _self.taskData.participantList.indexOf(identity);
  1510. if(index>-1){
  1511. _self.taskData.participantList.erase(identity)
  1512. }
  1513. _self.actions.updateParticipant(_self.taskData.id,{participantList:_self.taskData.participantList},function(json){
  1514. _self.createParticipateContainer();
  1515. if(json.data.dynamics){
  1516. json.data.dynamics.each(function(dd){
  1517. _self.loadDynamicItem(dd,"bottom")
  1518. })
  1519. }
  1520. _self.dynamicContent.scrollTo(0,_self.dynamicContent.getScrollSize().y);
  1521. });
  1522. e.stopPropagation();
  1523. }
  1524. });
  1525. this.setStyles({"background-color":"#efefef","cursor":"pointer"});
  1526. },
  1527. mouseleave:function(){
  1528. if(this.getElement(".closeIcon"))this.getElement(".closeIcon").destroy();
  1529. this.setStyles({"background-color":""})
  1530. }
  1531. })
  1532. }
  1533. },
  1534. setAuth:function(){
  1535. var _self = this;
  1536. //名称
  1537. },
  1538. reload : function( keepData ){
  1539. // if( keepData ){
  1540. // this.data = this.form.getResult(false, this.options.resultSeparator, false, false, true);
  1541. // }
  1542. this.formTopNode = null;
  1543. if(this.setFormNodeSizeFun && this.app && this.app.removeEvent){
  1544. this.app.removeEvent("resize",this.setFormNodeSizeFun);
  1545. }
  1546. if( this.formMaskNode )this.formMaskNode.destroy();
  1547. if( this.formAreaNode )this.formAreaNode.destroy();
  1548. if( this.isNew ){
  1549. this.create();
  1550. }else if( this.isEdited ){
  1551. this.edit();
  1552. }else{
  1553. this.open();
  1554. }
  1555. },
  1556. selectPerson: function( item, type,types,count,callback ) {
  1557. MWF.xDesktop.requireApp("Selector", "package", null, false);
  1558. this.fireEvent("querySelect", this);
  1559. var value = [];
  1560. var options = {
  1561. "type": type,
  1562. "types":types,
  1563. "title": "选人",
  1564. "count": count,
  1565. "values": value || [],
  1566. "onComplete": function (items) {
  1567. var arr = [];
  1568. items.each(function (item) {
  1569. arr.push(item.data.distinguishedName);
  1570. }.bind(this));
  1571. if(callback)callback(arr);
  1572. }.bind(this)
  1573. };
  1574. var selector = new MWF.O2Selector(this.app.content, options);
  1575. },
  1576. compareWithNow:function(dstr){
  1577. var result = {};
  1578. try{
  1579. var ct = Date.parse(dstr);
  1580. var intervalDay = 0;
  1581. var now = new Date();
  1582. var sep = now.getTime()-ct.getTime();
  1583. sep = sep/1000; //毫秒
  1584. //一分钟内,刚刚,一小时内,多少分钟前,2小时内,显示一小时前,2小时到今天00:00:00 显示 今天几点,本周内,显示本周几,几点几分,其他显示几月几日
  1585. var cttext = "";
  1586. if(sep<60){
  1587. cttext = "刚刚"
  1588. }else if(sep<3600){
  1589. cttext = Math.floor(sep/60)+"分钟前"
  1590. }else if(sep<7200){
  1591. cttext = "1小时前"
  1592. }else if(sep>7200 && ct.getFullYear() == now.getFullYear() && ct.getMonth()==now.getMonth() && ct.getDate() == now.getDate()){
  1593. cttext = "今天"+(ct.getHours()<10?("0"+ct.getHours()):ct.getHours())+":"+(ct.getMinutes()<10?"0"+ct.getMinutes():ct.getMinutes())
  1594. }else if(ct.getFullYear() == now.getFullYear() && ct.getMonth()==now.getMonth() && ct.getDate() == now.getDate()-1){
  1595. cttext = "昨天"+(ct.getHours()<10?("0"+ct.getHours()):ct.getHours())+":"+(ct.getMinutes()<10?"0"+ct.getMinutes():ct.getMinutes());
  1596. }else{
  1597. cttext = (ct.getMonth()+1) + "月"+ct.getDay()+"日"
  1598. }
  1599. var sepd = ct.getTime() - now.getTime();
  1600. sepd = sepd/1000;
  1601. if(sepd<0){
  1602. intervalDay = -1 //超时
  1603. }else if(sepd /(3600*24)<2){
  1604. intervalDay = 0 //一两天内
  1605. }else{
  1606. intervalDay = 1 //正常
  1607. }
  1608. result.intervalDay = intervalDay;
  1609. result.text = cttext;
  1610. }catch(e){
  1611. result.text = dstr;
  1612. }
  1613. //alert(dstr + "##############" + result.intervalDay)
  1614. return result;
  1615. },
  1616. });
  1617. MWF.xApplication.TeamWork.Task.TaskMore = new Class({
  1618. Extends: MWF.xApplication.TeamWork.Common.ToolTips,
  1619. options : {
  1620. // displayDelay : 300,
  1621. hasArrow:false,
  1622. event:"click"
  1623. },
  1624. _loadCustom : function( callback ){
  1625. this.rootActions = this.app.rootActions;
  1626. var _self = this;
  1627. this.css = this.options.css;
  1628. this.lp = this.options.lp;
  1629. //alert(JSON.stringify(this.data))
  1630. //this.data
  1631. //this.contentNode
  1632. //debugger;
  1633. var topMoreTitle = new Element("div.topMoreTitle",{styles:this.css.topMoreTitle,text:this.lp.taskMenu}).inject(this.contentNode);
  1634. var copyTask = new Element("div.copyTask",{styles:this.css.topMoreItem}).inject(this.contentNode);
  1635. copyTask.addEvents({
  1636. mouseenter:function(){this.setStyles({"background-color":"#F7F7F7"})},
  1637. mouseleave:function(){this.setStyles({"background-color":""})},
  1638. click:function(e){
  1639. _self.app.confirm("warn",e,_self.lp.taskCopy,_self.lp.taskContent,300,120,function(){
  1640. _self.rootActions.TaskAction.copyTask(_self.explorer.data.taskId,function(json){
  1641. if(json.type == "success"){
  1642. _self.explorer.data.taskId = json.data.id;
  1643. _self.explorer._createTableContent();
  1644. _self.explorer.projectObj.reloadTaskGroup(_self.explorer.taskData.taskListId) //ffffffffffffff
  1645. }
  1646. this.close();
  1647. _self.close();
  1648. }.bind(this))
  1649. // _self.rootActions.TaskAction.delete(_self.data.data.id,function(){
  1650. // var rd = {"act":"remove"};
  1651. // _self.close(rd);
  1652. // this.close()
  1653. // }.bind(this))
  1654. },function(){
  1655. this.close();
  1656. });
  1657. }.bind(this)
  1658. });
  1659. var copyTaskIcon = new Element("div.copyTaskIcon",{styles:this.css.topMoreItemIcon}).inject(copyTask);
  1660. copyTaskIcon.setStyles({"background":"url(../x_component_TeamWork/$Task/default/icon/taskcopy.png) no-repeat center"});
  1661. var copyTaskText = new Element("div.copyTaskText",{styles:this.css.topMoreItemText,text:this.lp.taskCopy}).inject(copyTask);
  1662. var moveTask = new Element("div.moveTask",{styles:this.css.topMoreItem}).inject(this.contentNode);
  1663. moveTask.addEvents({
  1664. mouseenter:function(){this.setStyles({"background-color":"#F7F7F7"})},
  1665. mouseleave:function(){this.setStyles({"background-color":""})},
  1666. click:function(){
  1667. var data = this.data;
  1668. var opt = {};
  1669. MWF.xDesktop.requireApp("TeamWork", "TaskMove", function(){
  1670. var taskmove = new MWF.xApplication.TeamWork.TaskMove(this.explorer,data,opt,{projectObj:this.explorer.projectObj});
  1671. taskmove.open();
  1672. var fx = new Fx.Tween(this.node,{duration:200});
  1673. fx.start(["opacity"] ,"1", "0").chain(function(){this.close()}.bind(this));
  1674. }.bind(this));
  1675. }.bind(this)
  1676. });
  1677. var moveTaskIcon = new Element("div.moveTaskIcon",{styles:this.css.topMoreItemIcon}).inject(moveTask);
  1678. moveTaskIcon.setStyles({"background":"url(../x_component_TeamWork/$Task/default/icon/taskmove.png) no-repeat center"});
  1679. var moveTaskText = new Element("div.moveTaskText",{styles:this.css.topMoreItemText,text:this.lp.taskMove}).inject(moveTask);
  1680. // var favTask = new Element("div.favTask",{styles:this.css.topMoreItem}).inject(this.contentNode);
  1681. // favTask.addEvents({
  1682. // mouseenter:function(){this.setStyles({"background-color":"#F7F7F7"})},
  1683. // mouseleave:function(){this.setStyles({"background-color":""})}
  1684. // });
  1685. // var favTaskIcon = new Element("div.favTaskIcon",{styles:this.css.topMoreItemIcon}).inject(favTask);
  1686. // favTaskIcon.setStyles({"background":"url(../x_component_TeamWork/$Task/default/icon/taskfav.png) no-repeat center"});
  1687. // var favTaskText = new Element("div.favTaskText",{styles:this.css.topMoreItemText,text:this.lp.taskFav}).inject(favTask);
  1688. var subTask = new Element("div.subTask",{styles:this.css.topMoreItem}).inject(this.contentNode);
  1689. subTask.addEvents({
  1690. click:function(){
  1691. var data = this.data;
  1692. MWF.xDesktop.requireApp("TeamWork", "TaskSub", function(){
  1693. var opt = {
  1694. "onPostOpen":function(){
  1695. //tasksub.formAreaNode.setStyles({"height":"0px","width":"0px","overflow":"hidden"})
  1696. //tasksub.formAreaNode.setStyles({"top":"10px"});
  1697. var fx = new Fx.Tween(tasksub.formAreaNode,{duration:200});
  1698. fx.start(["top"] ,"10px", "100px");
  1699. }
  1700. };
  1701. var tasksub = new MWF.xApplication.TeamWork.TaskSub(this.explorer,data,opt);
  1702. tasksub.open();
  1703. var fx = new Fx.Tween(this.node,{duration:200});
  1704. fx.start(["opacity"] ,"1", "0").chain(function(){this.close()}.bind(this));
  1705. }.bind(this));
  1706. }.bind(this),
  1707. mouseenter:function(){this.setStyles({"background-color":"#F7F7F7"})},
  1708. mouseleave:function(){this.setStyles({"background-color":""})}
  1709. });
  1710. var subTaskIcon = new Element("div.subTaskIcon",{styles:this.css.topMoreItemIcon}).inject(subTask);
  1711. subTaskIcon.setStyles({"background":"url(../x_component_TeamWork/$Task/default/icon/tasksub.png) no-repeat center"});
  1712. var subTaskText = new Element("div.subTaskText",{styles:this.css.topMoreItemText,text:this.lp.taskSub}).inject(subTask);
  1713. if(this.data.data.control && this.data.data.control.delete){
  1714. var removeTask = new Element("div.removeTask",{styles:this.css.topMoreItem}).inject(this.contentNode);
  1715. removeTask.addEvents({
  1716. click:function(e){
  1717. _self.app.confirm("warn",e,_self.app.lp.common.confirm.removeTitle,_self.app.lp.common.confirm.removeContent,300,120,function(){
  1718. _self.rootActions.TaskAction.delete(_self.data.data.id,function(){
  1719. var rd = {"act":"remove"};
  1720. _self.close(rd);
  1721. this.close()
  1722. }.bind(this))
  1723. },function(){
  1724. this.close();
  1725. });
  1726. },
  1727. mouseenter:function(){this.setStyles({"background-color":"#F7F7F7"})},
  1728. mouseleave:function(){this.setStyles({"background-color":""})}
  1729. });
  1730. var removeTaskIcon = new Element("div.removeTaskIcon",{styles:this.css.topMoreItemIcon}).inject(removeTask);
  1731. removeTaskIcon.setStyles({"background":"url(../x_component_TeamWork/$Task/default/icon/taskremove.png) no-repeat center"});
  1732. var removeTaskText = new Element("div.removeTaskText",{styles:this.css.topMoreItemText,text:this.lp.taskRemove}).inject(removeTask);
  1733. }
  1734. if(callback)callback();
  1735. }
  1736. });
  1737. MWF.xApplication.TeamWork.Task.StatusCheck = new Class({
  1738. Extends: MWF.xApplication.TeamWork.Common.ToolTips,
  1739. options : {
  1740. // displayDelay : 300,
  1741. hasArrow:false,
  1742. event:"click"
  1743. },
  1744. _loadCustom : function( callback ){
  1745. var _self = this;
  1746. this.css = this.options.css;
  1747. this.lp = this.options.lp;
  1748. //this.data
  1749. var container = {
  1750. "cursor":"pointer",
  1751. "height":"40px",
  1752. "width":"100%"
  1753. };
  1754. var text={
  1755. "height":"30px","line-height":"30px","float":"left",
  1756. "padding-left":"10px","padding-right":"10px","margin-left":"6px","margin-top":"5px",
  1757. "font-size":"13px","color":"#666666","border-radius":"2px"
  1758. };
  1759. var icon = {
  1760. "float":"right","width":"24px","height":"24px",
  1761. "margin-top":"6px","margin-right":"8px",
  1762. "background":"url(../x_component_TeamWork/$Task/default/icon/icon_dagou.png) no-repeat center"
  1763. };
  1764. var flowContainer = new Element("div",{styles:container}).inject(this.contentNode);
  1765. var flowText = new Element("div",{styles:text,text:this.lp.status.processing}).inject(flowContainer);
  1766. flowText.setStyles({"background-color":"#f0f0f0"});
  1767. if(this.data.data.workStatus == "processing"){
  1768. var flowIcon = new Element("div",{styles:icon}).inject(flowContainer);
  1769. }
  1770. flowContainer.addEvents({
  1771. click:function(){
  1772. var data = {"status":"processing"};
  1773. this.close(data)
  1774. }.bind(this),
  1775. mouseover:function(){this.setStyles({"background-color":"#f2f5f7"})},
  1776. mouseout:function(){this.setStyles({"background-color":""})}
  1777. });
  1778. var completeContainer = new Element("div",{styles:container}).inject(this.contentNode);
  1779. var completeText = new Element("div",{styles:text,text:this.lp.status.completed}).inject(completeContainer);
  1780. completeText.setStyles({"color":"#69b439","background-color":"#f1f9ec"});
  1781. if(this.data.data.workStatus == "completed"){
  1782. var completeIcon = new Element("div",{styles:icon}).inject(completeContainer);
  1783. }
  1784. completeContainer.addEvents({
  1785. click:function(){
  1786. var data = {"status":"completed"};
  1787. this.close(data)
  1788. }.bind(this),
  1789. mouseover:function(){this.setStyles({"background-color":"#f2f5f7"})},
  1790. mouseout:function(){this.setStyles({"background-color":""})}
  1791. });
  1792. if(callback)callback();
  1793. }
  1794. });
  1795. MWF.xApplication.TeamWork.Task.PriorityCheck = new Class({
  1796. Extends: MWF.xApplication.TeamWork.Common.ToolTips,
  1797. options : {
  1798. // displayDelay : 300,
  1799. hasArrow:false,
  1800. event:"click"
  1801. },
  1802. _loadCustom : function( callback ){
  1803. var _self = this;
  1804. this.css = this.options.css;
  1805. this.lp = this.options.lp;
  1806. this.rootActions = this.app.rootActions;
  1807. //this.data
  1808. //this.contentNode
  1809. var container = {
  1810. "cursor":"pointer",
  1811. "height":"40px",
  1812. "width":"100%"
  1813. };
  1814. var text={
  1815. "height":"25px","line-height":"25px","float":"left","text-align":"center",
  1816. "margin-left":"6px","margin-top":"8px",
  1817. "font-size":"13px","color":"#666666","border-radius":"2px","padding-left":"10px","padding-right":"10px"
  1818. };
  1819. var icon = {
  1820. "float":"right","width":"24px","height":"24px",
  1821. "margin-top":"6px","margin-right":"8px",
  1822. "background":"url(../x_component_TeamWork/$Task/default/icon/icon_dagou.png) no-repeat center"
  1823. };
  1824. var arr = this.data.data.priority.split("||");
  1825. var priorityName = arr[0];
  1826. var priorityColor = arr[1];
  1827. this.rootActions.GlobalAction.priorityList(function(json){
  1828. json.data.each(function(data){
  1829. var vContainer = new Element("div",{styles:container}).inject(this.contentNode);
  1830. var value = new Element("div",{styles:text,text:data.priority}).inject(vContainer);
  1831. value.setStyles({"color":data.priorityColor,"border":"1px solid "+ data.priorityColor});
  1832. if(priorityName == data.priority && priorityColor.toUpperCase() == data.priorityColor.toUpperCase()){
  1833. new Element("div",{styles:icon}).inject(vContainer);
  1834. }
  1835. vContainer.addEvents({
  1836. click:function(){
  1837. var d = {"value":data.priority+"||"+data.priorityColor};
  1838. this.close(d)
  1839. }.bind(this),
  1840. mouseover:function(){this.setStyles({"background-color":"#f2f5f7"})},
  1841. mouseout:function(){this.setStyles({"background-color":""})}
  1842. });
  1843. }.bind(this))
  1844. }.bind(this));
  1845. if(callback)callback();
  1846. return;
  1847. // var normalContainer = new Element("div",{styles:container}).inject(this.contentNode);
  1848. // var normalText = new Element("div",{styles:text,text:this.lp.priority.normal}).inject(normalContainer);
  1849. // normalText.setStyles({"color":"#999999","border":"1px solid #999999"});
  1850. // if(this.data.data.priority == this.lp.priority.normal){
  1851. // new Element("div",{styles:icon}).inject(normalContainer);
  1852. // }
  1853. // normalContainer.addEvents({
  1854. // click:function(){
  1855. // var data = {"value":this.lp.priority.normal};
  1856. // this.close(data)
  1857. // }.bind(this),
  1858. // mouseover:function(){this.setStyles({"background-color":"#f2f5f7"})},
  1859. // mouseout:function(){this.setStyles({"background-color":""})}
  1860. // });
  1861. //
  1862. // var urgencyContainer = new Element("div",{styles:container}).inject(this.contentNode);
  1863. // var urgencyText = new Element("div",{styles:text,text:this.lp.priority.urgency}).inject(urgencyContainer);
  1864. // urgencyText.setStyles({"color":"#ffaf38","border":"1px solid #ffaf38"});
  1865. // if(this.data.data.priority == this.lp.priority.urgency){
  1866. // new Element("div",{styles:icon}).inject(urgencyContainer);
  1867. // }
  1868. // urgencyContainer.addEvents({
  1869. // click:function(){
  1870. // var data = {"value":this.lp.priority.urgency};
  1871. // this.close(data)
  1872. // }.bind(this),
  1873. // mouseover:function(){this.setStyles({"background-color":"#f2f5f7"})},
  1874. // mouseout:function(){this.setStyles({"background-color":""})}
  1875. // });
  1876. //
  1877. // var emergencyContainer = new Element("div",{styles:container}).inject(this.contentNode);
  1878. // var emergencyText = new Element("div",{styles:text,text:this.lp.priority.emergency}).inject(emergencyContainer);
  1879. // emergencyText.setStyles({"color":"#ff4f3e","border":"1px solid #ff4f3e"});
  1880. // if(this.data.data.priority == this.lp.priority.emergency){
  1881. // new Element("div",{styles:icon}).inject(emergencyContainer);
  1882. // }
  1883. // emergencyContainer.addEvents({
  1884. // click:function(){
  1885. // var data = {"value":this.lp.priority.emergency};
  1886. // this.close(data)
  1887. // }.bind(this),
  1888. // mouseover:function(){this.setStyles({"background-color":"#f2f5f7"})},
  1889. // mouseout:function(){this.setStyles({"background-color":""})}
  1890. // });
  1891. //
  1892. // if(callback)callback();
  1893. }
  1894. });
  1895. MWF.xApplication.TeamWork.Task.DynamicType = new Class({
  1896. Extends: MWF.xApplication.TeamWork.Common.ToolTips,
  1897. options : {
  1898. // displayDelay : 300,
  1899. hasArrow:false,
  1900. event:"click"
  1901. },
  1902. _loadCustom : function( callback ){
  1903. var _self = this;
  1904. this.css = this.options.css;
  1905. this.lp = this.options.lp;
  1906. //this.data
  1907. //this.contentNode
  1908. var container = {
  1909. "cursor":"pointer",
  1910. "height":"40px",
  1911. "width":"100%"
  1912. };
  1913. var text={
  1914. "height":"25px","line-height":"25px","float":"left","width":"100%",
  1915. "margin-left":"6px","margin-top":"8px",
  1916. "font-size":"13px","color":"#666666","border-radius":"2px"
  1917. };
  1918. var icon = {
  1919. "float":"right","width":"24px","height":"24px",
  1920. "margin-top":"6px","margin-right":"8px",
  1921. "background":"url(../x_component_TeamWork/$Task/default/icon/icon_dagou.png) no-repeat center"
  1922. };
  1923. var allContainer = new Element("div",{styles:container}).inject(this.contentNode);
  1924. var allText = new Element("div",{styles:text,text:this.lp.dynamicAll}).inject(allContainer);
  1925. allText.setStyles({"color":"#999999","border":"0px solid #999999"});
  1926. allContainer.addEvents({
  1927. click:function(){
  1928. var data = {"value":"all"};
  1929. this.close(data)
  1930. }.bind(this),
  1931. mouseover:function(){this.setStyles({"background-color":"#f2f5f7"})},
  1932. mouseout:function(){this.setStyles({"background-color":""})}
  1933. });
  1934. var attachmentContainer = new Element("div",{styles:container}).inject(this.contentNode);
  1935. var attachmentText = new Element("div",{styles:text,text:this.lp.dynamicAttachment}).inject(attachmentContainer);
  1936. attachmentText.setStyles({"color":"#999999","border":"0px solid #999999"});
  1937. attachmentContainer.addEvents({
  1938. click:function(){
  1939. var data = {"value":"attachment"};
  1940. this.close(data)
  1941. }.bind(this),
  1942. mouseover:function(){this.setStyles({"background-color":"#f2f5f7"})},
  1943. mouseout:function(){this.setStyles({"background-color":""})}
  1944. });
  1945. var chatContainer = new Element("div",{styles:container}).inject(this.contentNode);
  1946. var chatText = new Element("div",{styles:text,text:this.lp.dynamicChat}).inject(chatContainer);
  1947. chatText.setStyles({"color":"#999999","border":"0px solid #999999"});
  1948. chatContainer.addEvents({
  1949. click:function(){
  1950. var data = {"value":"chat"};
  1951. this.close(data)
  1952. }.bind(this),
  1953. mouseover:function(){this.setStyles({"background-color":"#f2f5f7"})},
  1954. mouseout:function(){this.setStyles({"background-color":""})}
  1955. });
  1956. if(callback)callback();
  1957. }
  1958. });