Task.js 98 KB

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