ReadLog.js 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. MWF.xDesktop.requireApp("process.Xform", "$Module", null, false);
  2. /** @class ReadLog 阅读记录组件。
  3. * @o2cn 阅读记录组件
  4. * @example
  5. * //可以在脚本中获取该组件
  6. * //方法1:
  7. * var log = this.form.get("name"); //获取组件
  8. * //方法2
  9. * var log = this.target; //在组件事件脚本中获取
  10. * @extends MWF.xApplication.process.Xform.$Module
  11. * @o2category FormComponents
  12. * @o2range {Process}
  13. * @hideconstructor
  14. */
  15. MWF.xApplication.process.Xform.ReadLog = MWF.APPReadLog = new Class(
  16. /** @lends MWF.xApplication.process.Xform.ReadLog# */
  17. {
  18. Extends: MWF.APP$Module,
  19. options: {
  20. /**
  21. * 加载数据后事件。
  22. * @event MWF.xApplication.process.Xform.ReadLog#postLoadData
  23. * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
  24. * @example
  25. * //触发该事件的时候可以获取到流程数据ReadLog
  26. * var readLog = this.target.readLog;
  27. * //可以修改readLog达到定制化流程记录的效果
  28. * do something
  29. */
  30. /**
  31. * 加载每行流程信息以后触发,可以通过this.event获得下列信息:
  32. * <pre><code>
  33. *{
  34. * "data" : {}, //当前行记录信息,如果是已阅未单条记录(对象),如果是待阅有多条记录(数组)
  35. * "node" : node, //当前节点
  36. * "log" : object, //指向阅读记录
  37. * "type" : "readCompleted" //"read"表示待阅,"readCompleted"表示已阅
  38. *}
  39. </code></pre>
  40. * @event MWF.xApplication.process.Xform.ReadLog#postLoadLine
  41. * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
  42. */
  43. "moduleEvents": ["load", "queryLoad", "postLoad", "postLoadData", "postLoadLine"]
  44. },
  45. load: function(){
  46. this.node.empty();
  47. if (!this.json.isDelay){
  48. this.active();
  49. }
  50. },
  51. /**
  52. * 激活阅读记录。设置了延迟加载的时候,可以通过这个方法来激活
  53. * @example
  54. * this.form.get("fieldId").active();
  55. */
  56. active: function(){
  57. this._loadModuleEvents();
  58. if (this.fireEvent("queryLoad")){
  59. this._queryLoaded();
  60. this._loadUserInterface();
  61. this._loadStyles();
  62. this._loadDomEvents();
  63. //this._loadEvents();
  64. this._afterLoaded();
  65. this.fireEvent("postLoad");
  66. this.fireEvent("load");
  67. }
  68. },
  69. _loadUserInterface: function(){
  70. this.node.setStyle("-webkit-user-select", "text");
  71. this.node.setStyles(this.form.css.logActivityNode_record);
  72. this.form.app.action.getReadRecord(this.form.businessData.work.id, function(json){
  73. this.readLog = json.data;
  74. this.fireEvent("postLoadData");
  75. this.loadReadLog();
  76. }.bind(this));
  77. },
  78. loadReadLog: function(){
  79. switch (this.json.mode){
  80. case "notShow":
  81. return "";
  82. case "script":
  83. this.loadReadLogByScript();
  84. break;
  85. default:
  86. this.loadReadLogDefault();
  87. }
  88. },
  89. loadReadLogByScript: function(){
  90. if (this.json.displayScript && this.json.displayScript.code){
  91. var code = this.json.displayScript.code;
  92. this.readLog.each(function(log){
  93. if (!this.json.isShowRead && log.type === "read"){
  94. //不显示待阅
  95. }else{
  96. this.form.Macro.environment.log = log;
  97. this.form.Macro.environment.list = null;
  98. var r = this.form.Macro.exec(code, this);
  99. var t = o2.typeOf(r);
  100. var lineNode;
  101. if (t==="string"){
  102. lineNode = new Element("div", {
  103. html: r
  104. }).inject(this.node);
  105. //this.node.appendHTML(r);
  106. }else if (t==="element"){
  107. lineNode = this.node.appendChild(r);
  108. }
  109. this.fireEvent("postLoadLine",[{
  110. "data" : log,
  111. "node" : lineNode,
  112. "log" : this,
  113. "type" : "readCompleted"
  114. }]);
  115. }
  116. }.bind(this));
  117. }
  118. },
  119. loadReadLogDefault: function(){
  120. var text = this.json.textStyle;
  121. var readPersons = [];
  122. var readLogs = [];
  123. this.lineClass = "logTaskNode";
  124. this.readLog.each(function(log, i){
  125. if (this.json.textStyleScript && this.json.textStyleScript.code){
  126. this.form.Macro.environment.log = log;
  127. this.form.Macro.environment.list = null;
  128. text = this.form.Macro.exec(this.json.textStyleScript.code, this);
  129. }
  130. if (log.type == "readCompleted"){
  131. var div = new Element("div", {styles: this.form.css[this.lineClass]}).inject(this.node);
  132. var leftDiv = new Element("div", {styles: this.form.css.logTaskIconNode_record}).inject(div);
  133. var rightDiv = new Element("div", {styles: this.form.css.logTaskTextNode}).inject(div);
  134. var html = text.replace(/{person}/g, o2.name.cn(log.person || ""))
  135. .replace(/{datetime}/g, log.completedTime)
  136. .replace(/{date}/g, log.completedTime.substring(0.10))
  137. .replace(/{startDatetime}/g, log.startTime)
  138. .replace(/{startDate}/g, log.startTime.substring(0.10))
  139. .replace(/{startDatetime}/g, log.startTime)
  140. .replace(/{unit}/g, o2.txt(o2.name.cn(log.unit)))
  141. .replace(/{department}/g, o2.txt(o2.name.cn(log.unit)))
  142. .replace(/{identity}/g, o2.name.cn(log.identity))
  143. .replace(/{activity}/g, o2.txt(o2.name.cn(log.activityName)))
  144. .replace(/{title}/g, o2.txt(log.title) || "")
  145. .replace(/{opinion}/g, o2.txt(log.opinion) || "");
  146. rightDiv.appendHTML(html);
  147. if (this.lineClass === "logTaskNode"){
  148. this.lineClass = "logTaskNode_even";
  149. }else{
  150. this.lineClass = "logTaskNode";
  151. }
  152. this.fireEvent("postLoadLine",[{
  153. "data" : log,
  154. "node" : div,
  155. "log" : this,
  156. "type" : "readCompleted"
  157. }]);
  158. }
  159. if (!!this.json.isShowRead && log.type == "read"){
  160. readPersons.push(o2.name.cn(log.person)+"("+o2.name.cn(log.unit)+")");
  161. readLogs.push(log);
  162. }
  163. }.bind(this));
  164. if (readPersons.length){
  165. var div = new Element("div", {styles: this.form.css[this.lineClass]}).inject(this.node);
  166. var leftDiv = new Element("div", {styles: this.form.css.logTaskIconNode_record}).inject(div);
  167. var rightDiv = new Element("div", {styles: this.form.css.logTaskTextNode}).inject(div);
  168. leftDiv.setStyle("background-image", "url("+"../x_component_process_Xform/$Form/"+this.form.options.style+"/icon/rightRed.png)");
  169. rightDiv.appendHTML("<div><font style='font-weight: bold'>"+MWF.xApplication.process.Xform.LP.showReadTitle+": </font><font style='color: #00F'>"+readPersons.join(", ")+"</font></div>");
  170. this.fireEvent("postLoadLine",[{
  171. "data" : readLogs,
  172. "node" : div,
  173. "log" : this,
  174. "type" : "read"
  175. }]);
  176. }
  177. }
  178. });