Comment.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455
  1. MWF.xApplication.AppMarketV2.Application.Comment = new Class({
  2. Implements: [Options, Events],
  3. options: {
  4. "view": "applicationComment.html"
  5. },
  6. initialize: function(app, container, options){
  7. this.setOptions(options);
  8. this.app = app;
  9. this.appdata = this.app.appdata;
  10. this.container = container;
  11. this.viewPath = this.app.path+this.app.options.style+"/"+this.options.view;
  12. this.iconPath = this.app.path+this.app.options.style+"/icon/";
  13. this.actions = MWF.Actions.load("x_program_center");
  14. this.load();
  15. },
  16. load: function(){
  17. this.container.loadHtml(this.viewPath, {"bind": {"lp": this.app.lp}, "module": this}, function(){
  18. this.loadApplication(function(){
  19. this.fireEvent("load");
  20. }.bind(this));
  21. }.bind(this));
  22. },
  23. loadApplication: function(callback){
  24. if (!this.isLoading){
  25. if (!this.applicationsContentV){
  26. this.applicationsContentV = new MWF.xApplication.AppMarketV2.Application.Comment.ViewPage(this, {
  27. "onLoad": function(){ if (callback) callback(); }
  28. });
  29. }else{
  30. this.applicationsContentV.load();
  31. }
  32. }
  33. }
  34. });
  35. MWF.xApplication.AppMarketV2.Application.Comment.ViewPage= new Class({
  36. Implements: [Options, Events],
  37. options: {
  38. "type": "commentViewPage"
  39. },
  40. initialize: function(content, options){
  41. this.setOptions(options);
  42. this.content = content;
  43. this.app = this.content.app;
  44. this.appdata = this.content.appdata;
  45. this.actions = this.app.actions;
  46. this.container = this.content.container;
  47. this.page = 1;
  48. this.pageSize = 100;
  49. this.querydata = {};
  50. this.load();
  51. },
  52. load: function(){
  53. if (this.app.collectToken=="" || this.app.collectUrl==""){
  54. //先登录collcect
  55. this.actions.CollectAction.login(//平台封装好的方法
  56. function( json ){ //服务调用成功的回调函数, json为服务传回的数据
  57. if (json.type && json.type=="success"){
  58. data = json.data; //为变量data赋值
  59. this.app.collectUrl = data.collectUrl;
  60. this.app.collectToken = data.collectToken;
  61. this.loadCommentsGrade(this,this.commentsGrade.bind(this));
  62. this.loadCommentPower(this,this.commentsPower.bind(this));
  63. this.loadCommentsList(this,this.commentsView.bind(this));
  64. }
  65. }.bind(this),null,false //同步执行
  66. );
  67. }else{
  68. this.loadCommentsGrade(this,this.commentsGrade.bind(this));
  69. this.loadCommentPower(this,this.commentsPower.bind(this));
  70. this.loadCommentsList(this,this.commentsView.bind(this));
  71. }
  72. },
  73. loadCommentsGrade: function(content,callback){
  74. var json = null;
  75. var commenturl = content.app.collectUrl +'/o2_collect_assemble/jaxrs/comment/stat/grade/app/'+content.appdata.id+'?time='+(new Date()).getMilliseconds();
  76. var res = new Request.JSON({
  77. url: commenturl,
  78. headers : {'x-debugger' : true,'Authorization':content.app.collectToken,'c-token':content.app.collectToken},
  79. secure: false,
  80. method: "get",
  81. async: true,
  82. withCredentials: true,
  83. contentType : 'application/json',
  84. crossDomain : true,
  85. onSuccess: function(responseJSON, responseText){
  86. json = responseJSON;
  87. if (typeOf(callback).toLowerCase() == 'function'){
  88. callback(responseJSON);
  89. }else{
  90. o2.runCallback(callback, "success", [responseJSON, responseText]);
  91. }
  92. }.bind(this),
  93. onFailure: function(xhr){
  94. o2.runCallback(callback, "requestFailure", [xhr]);
  95. }.bind(this),
  96. onError: function(text, error){
  97. o2.runCallback(callback, "error", [text, error]);
  98. }.bind(this)
  99. });
  100. res.send();
  101. },
  102. loadCommentPower: function(content,callback){
  103. var json = null;
  104. var commenturl = content.app.collectUrl +'/o2_collect_assemble/jaxrs/comment/app/'+content.appdata.id+'/available?time='+(new Date()).getMilliseconds();
  105. var res = new Request.JSON({
  106. url: commenturl,
  107. headers : {'x-debugger' : true,'Authorization':content.app.collectToken,'c-token':content.app.collectToken},
  108. secure: false,
  109. method: "get",
  110. async: true,
  111. withCredentials: true,
  112. contentType : 'application/json',
  113. crossDomain : true,
  114. onSuccess: function(responseJSON, responseText){
  115. json = responseJSON;
  116. if (typeOf(callback).toLowerCase() == 'function'){
  117. callback(responseJSON);
  118. }else{
  119. o2.runCallback(callback, "success", [responseJSON, responseText]);
  120. }
  121. }.bind(this),
  122. onFailure: function(xhr){
  123. o2.runCallback(callback, "requestFailure", [xhr]);
  124. }.bind(this),
  125. onError: function(text, error){
  126. o2.runCallback(callback, "error", [text, error]);
  127. }.bind(this)
  128. });
  129. res.send();
  130. },
  131. loadCommentsList:function(content,callback){
  132. var json = null;
  133. var commenturl = content.app.collectUrl +'/o2_collect_assemble/jaxrs/comment/list/app/'+content.appdata.id+'?time='+(new Date()).getMilliseconds();
  134. var res = new Request.JSON({
  135. url: commenturl,
  136. headers : {'x-debugger' : true,'Authorization':content.app.collectToken,'c-token':content.app.collectToken},
  137. secure: false,
  138. method: "get",
  139. async: true,
  140. withCredentials: true,
  141. contentType : 'application/json',
  142. crossDomain : true,
  143. onSuccess: function(responseJSON, responseText){
  144. json = responseJSON;
  145. if (typeOf(callback).toLowerCase() == 'function'){
  146. callback(responseJSON);
  147. }else{
  148. o2.runCallback(callback, "success", [responseJSON, responseText]);
  149. }
  150. }.bind(this),
  151. onFailure: function(xhr){
  152. o2.runCallback(callback, "requestFailure", [xhr]);
  153. }.bind(this),
  154. onError: function(text, error){
  155. o2.runCallback(callback, "error", [text, error]);
  156. }.bind(this)
  157. });
  158. res.send();
  159. },
  160. commentsGrade:function(commentdata){
  161. debugger;
  162. var commentcount = 0;
  163. var grade = 0;
  164. var totalgrade = 0;
  165. var commentratiolist = commentdata.data;
  166. var gradeList = ["0","0","0","0","0"];
  167. commentratiolist.each(function(pergrade){
  168. gradeList[parseInt(pergrade.grade)-1]=pergrade.count;
  169. commentcount +=parseInt(pergrade.count)
  170. }.bind(this));
  171. gradeList.each(function(pergrade,index){
  172. totalgrade += parseInt(pergrade)*(index+1)
  173. })
  174. if (commentcount>0){
  175. grade = this.numberFix(totalgrade/commentcount,1)
  176. }
  177. debugger;
  178. this.content.applicationcommenttopgrade.set("text",grade+"");
  179. var intgrade = parseInt(grade);
  180. var dotgrade = grade - intgrade;
  181. for (var tmpnum=0;tmpnum<intgrade;tmpnum++){
  182. new Element("img",{"src":this.content.iconPath+"blackfiveangular.png","class":"o2_appmarket_application_introduce_memo_remark_inner_pic"}).inject(this.content.applicationcommenttopangular)
  183. }
  184. if (dotgrade>=0.5){
  185. new Element("img",{"src":this.content.iconPath+"halffiveangular.png","class":"o2_appmarket_application_introduce_memo_remark_inner_pic"}).inject(this.content.applicationcommenttopangular);
  186. intgrade++;
  187. }
  188. for (var tmpnum=0;tmpnum<5-intgrade;tmpnum++){
  189. new Element("img",{"src":this.content.iconPath+"whitefiveangular.png","class":"o2_appmarket_application_introduce_memo_remark_inner_pic"}).inject(this.content.applicationcommenttopangular);
  190. }
  191. new Element("span",{"class":"o2_appmarket_application_introduce_memo_remark_inner_text","text":"共"+commentcount+"个评分"}).inject(this.content.applicationcommenttopangular);
  192. //5星
  193. new Element("div",{"text":"5","class":"o2_appmarket_application_comment_top_right_graderatioItem"}).inject(this.content.applicationcommentrightfive);
  194. gradeangular = new Element("div",{"class":"o2_appmarket_application_comment_top_right_graderatioItem"}).inject(this.content.applicationcommentrightfive);
  195. new Element("img",{"src":this.content.iconPath+"blackfiveangular.png","class":"o2_appmarket_application_introduce_memo_remark_inner_pic"}).inject(gradeangular)
  196. graderatiodiv = new Element("div",{"class":"o2_appmarket_application_comment_gradetotal"}).inject(this.content.applicationcommentrightfive);
  197. blackratiodiv = new Element("div",{"class":"o2_appmarket_application_comment_graderatio"}).inject(graderatiodiv);
  198. graderratiodivwidth = graderatiodiv.clientWidth;
  199. if (commentcount==0){
  200. blackratio = 0;
  201. blackratiodiv.setStyle("width","0px");
  202. }else{
  203. blackratio = parseInt(gradeList[4])/commentcount;
  204. blackratiowidth = blackratio*graderratiodivwidth;
  205. blackratiodiv.setStyle("width",blackratiowidth+"px");
  206. }
  207. new Element("div",{"text":this.numberFix(blackratio*100,1)+"%","class":"o2_appmarket_application_comment_top_right_graderatioItem"}).inject(this.content.applicationcommentrightfive);
  208. debugger;
  209. //4星
  210. new Element("div",{"text":"4","class":"o2_appmarket_application_comment_top_right_graderatioItem"}).inject(this.content.applicationcommentrightfour);
  211. gradeangular = new Element("div",{"class":"o2_appmarket_application_comment_top_right_graderatioItem"}).inject(this.content.applicationcommentrightfour);
  212. new Element("img",{"src":this.content.iconPath+"blackfiveangular.png","class":"o2_appmarket_application_introduce_memo_remark_inner_pic"}).inject(gradeangular)
  213. graderatiodiv = new Element("div",{"class":"o2_appmarket_application_comment_gradetotal"}).inject(this.content.applicationcommentrightfour);
  214. blackratiodiv = new Element("div",{"class":"o2_appmarket_application_comment_graderatio"}).inject(graderatiodiv);
  215. graderratiodivwidth = graderatiodiv.clientWidth;
  216. if (commentcount==0){
  217. blackratio = 0;
  218. blackratiodiv.setStyle("width","0px");
  219. }else{
  220. blackratio = parseInt(gradeList[3])/commentcount;
  221. blackratiowidth = blackratio*graderratiodivwidth;
  222. blackratiodiv.setStyle("width",blackratiowidth+"px");
  223. }
  224. new Element("div",{"text":this.numberFix(blackratio*100,1)+"%","class":"o2_appmarket_application_comment_top_right_graderatioItem"}).inject(this.content.applicationcommentrightfour);
  225. //3星
  226. new Element("div",{"text":"3","class":"o2_appmarket_application_comment_top_right_graderatioItem"}).inject(this.content.applicationcommentrightthree);
  227. gradeangular = new Element("div",{"class":"o2_appmarket_application_comment_top_right_graderatioItem"}).inject(this.content.applicationcommentrightthree);
  228. new Element("img",{"src":this.content.iconPath+"blackfiveangular.png","class":"o2_appmarket_application_introduce_memo_remark_inner_pic"}).inject(gradeangular)
  229. graderatiodiv = new Element("div",{"class":"o2_appmarket_application_comment_gradetotal"}).inject(this.content.applicationcommentrightthree);
  230. blackratiodiv = new Element("div",{"class":"o2_appmarket_application_comment_graderatio"}).inject(graderatiodiv);
  231. graderratiodivwidth = graderatiodiv.clientWidth;
  232. if (commentcount==0){
  233. blackratio = 0;
  234. blackratiodiv.setStyle("width","0px");
  235. }else{
  236. blackratio = (parseInt(gradeList[2])/commentcount).toFixed(4);
  237. blackratiowidth = blackratio*graderratiodivwidth;
  238. blackratiodiv.setStyle("width",blackratiowidth+"px");
  239. }
  240. new Element("div",{"text":this.numberFix(blackratio*100,1)+"%","class":"o2_appmarket_application_comment_top_right_graderatioItem"}).inject(this.content.applicationcommentrightthree);
  241. //2星
  242. new Element("div",{"text":"2","class":"o2_appmarket_application_comment_top_right_graderatioItem"}).inject(this.content.applicationcommentrighttwo);
  243. gradeangular = new Element("div",{"class":"o2_appmarket_application_comment_top_right_graderatioItem"}).inject(this.content.applicationcommentrighttwo);
  244. new Element("img",{"src":this.content.iconPath+"blackfiveangular.png","class":"o2_appmarket_application_introduce_memo_remark_inner_pic"}).inject(gradeangular)
  245. graderatiodiv = new Element("div",{"class":"o2_appmarket_application_comment_gradetotal"}).inject(this.content.applicationcommentrighttwo);
  246. blackratiodiv = new Element("div",{"class":"o2_appmarket_application_comment_graderatio"}).inject(graderatiodiv);
  247. graderratiodivwidth = graderatiodiv.clientWidth;
  248. if (commentcount==0){
  249. blackratio = 0;
  250. blackratiodiv.setStyle("width","0px");
  251. }else{
  252. blackratio = (parseInt(gradeList[1])/commentcount).toFixed(4);
  253. blackratiowidth = blackratio*graderratiodivwidth;
  254. blackratiodiv.setStyle("width",blackratiowidth+"px");
  255. }
  256. new Element("div",{"text":this.numberFix(blackratio*100,1)+"%","class":"o2_appmarket_application_comment_top_right_graderatioItem"}).inject(this.content.applicationcommentrighttwo);
  257. //1星
  258. new Element("div",{"text":"1","class":"o2_appmarket_application_comment_top_right_graderatioItem"}).inject(this.content.applicationcommentrightone);
  259. gradeangular = new Element("div",{"class":"o2_appmarket_application_comment_top_right_graderatioItem"}).inject(this.content.applicationcommentrightone);
  260. new Element("img",{"src":this.content.iconPath+"blackfiveangular.png","class":"o2_appmarket_application_introduce_memo_remark_inner_pic"}).inject(gradeangular)
  261. graderatiodiv = new Element("div",{"class":"o2_appmarket_application_comment_gradetotal"}).inject(this.content.applicationcommentrightone);
  262. blackratiodiv = new Element("div",{"class":"o2_appmarket_application_comment_graderatio"}).inject(graderatiodiv);
  263. graderratiodivwidth = graderatiodiv.clientWidth;
  264. if (commentcount==0){
  265. blackratio = 0;
  266. blackratiodiv.setStyle("width","0px");
  267. }else{
  268. blackratio = (parseInt(gradeList[0])/commentcount).toFixed(4);
  269. blackratiowidth = blackratio*graderratiodivwidth;
  270. blackratiodiv.setStyle("width",blackratiowidth+"px");
  271. }
  272. new Element("div",{"text":this.numberFix(blackratio*100,1)+"%","class":"o2_appmarket_application_comment_top_right_graderatioItem"}).inject(this.content.applicationcommentrightone);
  273. },
  274. commentsPower:function(commentdata){
  275. var commentText = "";
  276. if (commentdata.type && commentdata.type=="success"){
  277. if (commentdata.data.value){
  278. commentText = "您已评论过该应用!"
  279. }
  280. }
  281. if (this.appdata.installedVersion==""){
  282. commentText = "由于您还未安装本应用,因此无法对其进行评分及评论!"
  283. }
  284. if (commentText == ""){
  285. var commentbuttondiv = new Element("div",{"class":"o2_appmarket_application_comment_middle_commentbutton"}).inject(this.content.applicationcommentmiddle);
  286. new Element("span",{"class":"o2_appmarket_application_comment_middle_commentbutton_InnerSpan","text":"我要评分及评论"}).inject(commentbuttondiv);
  287. var _self = this;
  288. commentbuttondiv.addEvents({
  289. "click": function(e){
  290. _self.createComment(e);
  291. }
  292. })
  293. }else{
  294. new Element("div",{"class":"o2_appmarket_application_comment_middle_tip","text":commentText}).inject(this.content.applicationcommentmiddle);
  295. }
  296. },
  297. commentsView:function(commentdata){
  298. var commentsList = commentdata.data;
  299. commentsList.each(function(percomment){
  300. var commentcontentdiv = new Element("div",{"class":"o2_appmarket_application_comment_content"}).inject(this.content.applicationcommentbottom);
  301. var commentcontentleft = new Element("div",{"class":"o2_appmarket_application_comment_content_left"}).inject(commentcontentdiv);
  302. var iconpersondiv = new Element("div",{"class":"o2_appmarket_application_comment_content_left_icon"}).inject(commentcontentleft);
  303. new Element("img",{"src":this.content.iconPath+"icon_men.png"}).inject(iconpersondiv);
  304. new Element("div",{"class":"o2_appmarket_application_comment_content_left_name","text":percomment.person}).inject(commentcontentleft);
  305. var commentcontentright = new Element("div",{"class":"o2_appmarket_application_comment_content_right"}).inject(commentcontentdiv);
  306. var commentangulardiv = new Element("div").inject(commentcontentright);
  307. for (var tmpi=0;tmpi<parseInt(percomment.grade);tmpi++){
  308. new Element("img",{"src":this.content.iconPath+"blackfiveangular.png","class":"o2_appmarket_application_introduce_memo_remark_inner_pic"}).inject(commentangulardiv)
  309. }
  310. for (var tmpi=0;tmpi<5-parseInt(percomment.grade);tmpi++){
  311. new Element("img",{"src":this.content.iconPath+"whitefiveangular.png","class":"o2_appmarket_application_introduce_memo_remark_inner_pic"}).inject(commentangulardiv)
  312. }
  313. new Element("div",{"class":"o2_appmarket_application_comment_content_title","text":percomment.title}).inject(commentcontentright);
  314. new Element("div",{"class":"o2_appmarket_application_comment_content_text","text":percomment.comment,"title":percomment.comment}).inject(commentcontentright);
  315. }.bind(this))
  316. },
  317. reload: function(){
  318. if (!this.content.isLoading) {
  319. this.loadComments();
  320. this.loadCommentPower();
  321. }
  322. },
  323. emptyLoadContent: function(){
  324. this.content.commentnode.empty();
  325. this.content.isLoading = false;
  326. },
  327. createComment:function(targetnode){
  328. var content = new Element("div", {"styles": {"margin": "20px"}});
  329. var xingdiv = new Element("div").inject(content);
  330. new Element("div",{"class":"comment_dlg_title","text":"评分:"}).inject(xingdiv);
  331. xingpngdiv = new Element("div",{"class":"comment_dlg_png"}).inject(xingdiv);
  332. var starnode;
  333. var _self = this;
  334. var selectstar = 0;
  335. for (var tmpi=0;tmpi<5;tmpi++){
  336. starnode = new Element("img",{"src":this.content.iconPath+"whitefiveangular.png","class":tmpi+"star comment_dlg_star"}).inject(xingpngdiv);
  337. starnode.store("id",tmpi);
  338. starnode.addEvents({
  339. "click": function(e){
  340. var idnum = this.retrieve("id");
  341. selectstar = idnum + 1;
  342. var starblacknode = this;
  343. var starwhitenode = this.nextElementSibling;
  344. while(starwhitenode){
  345. starwhitenode.set("src",_self.content.iconPath+"whitefiveangular.png");
  346. starwhitenode = starwhitenode.nextElementSibling;
  347. }
  348. while(starblacknode){
  349. starblacknode.set("src",_self.content.iconPath+"blackfiveangular.png");
  350. starblacknode = starblacknode.previousElementSibling
  351. }
  352. }
  353. })
  354. }
  355. var cleardiv = new Element("div",{"style":"clear:both"}).inject(content);
  356. var commentdiv = new Element("div").inject(content);
  357. new Element("div",{"class":"comment_dlg_title","text":"评论:"}).inject(commentdiv);
  358. inputdiv = new Element("div",{"class":"comment_dlg_input_div"}).inject(commentdiv);
  359. commentcontentNode = new Element("textarea",{"class":"comment_dlg_input"}).inject(inputdiv);
  360. o2.DL.open({
  361. "title": this.app.lp.commentTitle,
  362. "content": content,
  363. "width": 740,
  364. "height": 520,
  365. "buttonList": [
  366. {
  367. "text": this.app.lp.ok,
  368. "class":"comment_dlg_button_ok",
  369. "action": function(){
  370. debugger;
  371. if (selectstar==0 || commentcontentNode.get("value")==""){
  372. MWF.xDesktop.notice("error", {x: "right", y:"top"}, "请评分,评论后提交");
  373. }else{
  374. var commentdata = {};
  375. commentdata["title"] = "";
  376. commentdata["application"] = _self.appdata.id;
  377. commentdata["grade"] = selectstar+"";
  378. commentdata["comment"] = commentcontentNode.get("value");
  379. _self.submitComment(commentdata);
  380. this.close();
  381. }
  382. }
  383. },
  384. {
  385. "text": this.app.lp.cancel,
  386. "class":"comment_dlg_button_cancel",
  387. "action": function(){this.close();}
  388. }
  389. ]
  390. });
  391. },
  392. submitComment:function(commentdata){
  393. var tmpjson= JSON.stringify(commentdata);
  394. var commenturl = this.app.collectUrl +'/o2_collect_assemble/jaxrs/comment';
  395. var res = new Request.JSON({
  396. "url": commenturl,
  397. "headers" : {"Content-Type": "application/json; charset=utf-8","x-debugger" : true,"Authorization":this.app.collectToken,"c-token":this.app.collectToken},
  398. secure: false,
  399. "method": "POST",
  400. secure: false,
  401. emulation: false,
  402. noCache: true,
  403. withCredentials: true,
  404. crossDomain : true,
  405. "data": JSON.stringify(commentdata),
  406. onSuccess: function(responseJSON, responseText){
  407. debugger;
  408. MWF.xDesktop.notice("success", {x: "right", y:"top"}, this.app.lp.commentsuccess);
  409. this.app.loadIntroduceComment();
  410. }.bind(this),
  411. onFailure: function(xhr){
  412. MWF.xDesktop.notice("error", {x: "right", y:"top"}, xhr);
  413. }.bind(this),
  414. onError: function(text, error){
  415. MWF.xDesktop.notice("error", {x: "right", y:"top"}, text);
  416. }.bind(this)
  417. });
  418. res.send();
  419. },
  420. numberFix:function(data,n){
  421. var numbers = '';
  422. // 保留几位小数后面添加几个0
  423. for (var i = 0; i < n; i++) {
  424. numbers += '0';
  425. }
  426. var s = 1 + numbers;
  427. // 如果是整数需要添加后面的0
  428. var spot = "." + numbers;
  429. // Math.round四舍五入
  430. // parseFloat() 函数可解析一个字符串,并返回一个浮点数。
  431. var value = Math.round(parseFloat(data) * s) / s;
  432. // 从小数点后面进行分割
  433. var d = value.toString().split(".");
  434. if (d.length == 1) {
  435. value = value.toString();
  436. return value;
  437. }
  438. if (d.length > 1) {
  439. if (d[1].length < n) {
  440. value = value.toString() + "0";
  441. }
  442. return value;
  443. }
  444. }
  445. })