国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

172 lines
6.4KB

  1. {dede:comment text='文档评论模块'/}
  2. <div class="comment pt-3">
  3. <h4>发表评论</h4>
  4. <div id="feedback-alert"></div>
  5. <div class="content mb-3"><textarea cols="60" id="iptMsg" name="msg" rows="5" class="form-control" placeholder="请输入..." required></textarea></div>
  6. <div class="post">
  7. <div class="dcmp-userinfo" id="_ajax_feedback">
  8. <div class="form-group form-row">
  9. <div class="col-md-6">
  10. <label for="iptUsername">会员名</label>
  11. <input type="text" class="form-control" id="iptUsername">
  12. </div>
  13. <div class="col-md-6areaValidate" style="display:none">
  14. <label for="iptValidate">验证码</label>
  15. <div class="input-group">
  16. <input type="text" class="form-control text-uppercase" id="iptValidate">
  17. <img src="{dede:global.cfg_cmspath/}/apps/vdimgck.php" id="validateimg" onclick="this.src='{dede:global.cfg_cmspath/}/apps/vdimgck.php?'+new Date().getTime()+Math.round(Math.random() * 10000)" title="验证码">
  18. </div>
  19. </div>
  20. </div>
  21. <div class="form-group">
  22. <div class="form-check">
  23. <input type="checkbox" value="1" name="notuser" id="iptAny" class="form-check-input">
  24. <label class="form-check-label" for="iptAny">匿名评论</label>
  25. </div>
  26. </div>
  27. </div>
  28. <div class="dcmp-submit"><button type="button" class="btn btn-success btn-md" onClick="SendFeedback()">发表评论</button></div>
  29. </div>
  30. <div class="feedbacks">
  31. {dede:feedback}
  32. <div class="media">
  33. <img class="face" src="[field:face/]" class="mr-2">
  34. <div class="media-body">
  35. <div class="feedback-content">[field:msg/]</div>
  36. <div class="feedback-infos">
  37. <span class="feedback-basic">
  38. [field:username function="(@me=='guest' ? '游客' : @me)"/]
  39. <small>[field:dtime function="MyDate('Y-m-d',@me)"/]</small>
  40. <a href="javascript:LoadReplyFeedbacks([field:id/])">[field:replycount/]条回复</a>
  41. <a href="javascript:ReplyFeedback([field:id/])" class="btn btn-success btn-sm">回复</a>
  42. </span>
  43. <div class="feedback-action"><a href="javascript:GoodFeedback([field:id/], [field:good/])"><span id="feedbackGood[field:id/]">[field:good/]</span><i class="fa fa-thumbs-up ml-1"></i></a></div>
  44. </div>
  45. <div class="_feedback_reply my-2" for="[field:id/]"></div>
  46. <div class="feedback_replies" for="[field:id/]"></div>
  47. </div>
  48. </div>
  49. {/dede:feedback}
  50. </div>
  51. </div>
  52. <script async>
  53. //发表评论
  54. function SendFeedback() {
  55. let feedback = {
  56. action: "send",
  57. comtype: "comments",
  58. aid: "{dede:field name='id'/}",
  59. msg: $("#iptMsg").val(),
  60. username: $("#iptUsername").val(),
  61. validate: $("#iptValidate").val(),
  62. notuser: $("#iptAny").is(":checked") ? "1" : "",
  63. };
  64. $.post("{dede:field name='phpurl'/}/feedback.php", feedback, function (data) {
  65. let result = JSON.parse(data);
  66. if (result.code === 200) {
  67. ShowAlert("#feedback-alert", result.msg, "success");
  68. $("#iptMsg").val("");
  69. $("#iptValidate").val("");
  70. ($("#iptUsername").attr("disabled") !== "disabled") && $("#iptUsername").val("");
  71. $("#validateimg").attr("src", '{dede:global.cfg_cmspath/}/apps/vdimgck.php?' + new Date().getTime() + Math.round(Math.random() * 10000));
  72. } else {
  73. ShowAlert("#feedback-alert", `评论失败:${result.msg}`, "danger");
  74. $("#validateimg").attr("src", '{dede:global.cfg_cmspath/}/apps/vdimgck.php?' + new Date().getTime() + Math.round(Math.random() * 10000));
  75. }
  76. });
  77. }
  78. //进行回复,回复必须登录
  79. function SendReplyFeedback(fid) {
  80. let content = $(`._feedback_reply[for="${fid}"]`).find(".iptReplyContent").val();
  81. let reply = {
  82. action : "send",
  83. comtype : "reply",
  84. fid : fid,
  85. aid : "{dede:field name='id'/}",
  86. msg : content,
  87. }
  88. $.post("{dede:field name='phpurl'/}/feedback.php", reply, function (data) {
  89. let result = JSON.parse(data);
  90. if (result.code === 200) {
  91. ShowAlert(`._feedback_reply[for="${fid}"]`, result.msg, "success");
  92. } else {
  93. ShowAlert(`._feedback_reply[for="${fid}"]`, `评论失败:${result.msg}`, "danger");
  94. }
  95. })
  96. $(`._feedback_reply[for="${fid}"]`).find(".btnSend").attr("disabled", "disabled");
  97. }
  98. //回复某个评论
  99. function ReplyFeedback(fid) {
  100. let replyPannel = `<div class="form-group my-2">
  101. <div class="input-group">
  102. <input type="text" class="form-control iptReplyContent">
  103. <button type="button" class="btn btn-success btnSend ml-2" onClick='SendReplyFeedback(${fid})'>评论</button>
  104. </div>
  105. </div>`;
  106. $.get("{dede:global.cfg_cmsurl/}/user/api.php?format=json", function(result) {
  107. if (result.code !== 200) {
  108. $(`._feedback_reply`).html("");
  109. ShowAlert(`._feedback_reply[for="${fid}"]`,
  110. '回复需要登录会员中心,您可以<a href="{dede:global.cfg_cmsurl/}/user/login.php">点击登录</a>后再来回复', 'warning', 5000);
  111. } else {
  112. $(`._feedback_reply`).html("");
  113. $(`._feedback_reply[for="${fid}"]`).html(replyPannel);
  114. }
  115. });
  116. $(`._feedback_reply[for="${fid}"]`).html('<i class="fa fa-spinner fa-spin"></i> ');
  117. }
  118. //加载回复评论
  119. function LoadReplyFeedbacks(fid) {
  120. $(`.feedback_replies[for="${fid}"]`).html('<i class="fa fa-spinner fa-spin"></i> ');
  121. $.get("{dede:field name='phpurl'/}/feedback.php", {
  122. "aid" : "{dede:field name='id'/}",
  123. "fid" : fid,
  124. }, function (data) {
  125. let result = JSON.parse(data);
  126. let tpl = `
  127. <div class="media">
  128. <img class="face" src="~face~">
  129. <div class="media-body">
  130. <div class="feedback-content">~msg~</div>
  131. <div class="feedback-infos">
  132. <span class="feedback-basic">
  133. ~username~
  134. <small>~dtimestr~</small>
  135. </span>
  136. <div class="feedback-action">
  137. <a href="javascript:GoodFeedback(~id~, ~good~)"><span id="feedbackGood~id~">~good~</span><i class="fa fa-thumbs-up"></i></a>
  138. </div>
  139. </div>
  140. </div>
  141. </div>
  142. `;
  143. if (result.code === 200) {
  144. $(`.feedback_replies[for="${fid}"]`).html("");
  145. for (let i = 0; i < result.data.length; i++) {
  146. const feedback = result.data[i];
  147. let rs = tpl;
  148. for (const key in feedback) {
  149. if (feedback.hasOwnProperty(key)) {
  150. rs = rs.replace(new RegExp(`~${key}~`,"gm"), feedback[key])
  151. }
  152. }
  153. $(`.feedback_replies[for="${fid}"]`).append(rs);
  154. }
  155. }
  156. })
  157. }
  158. //赞
  159. function GoodFeedback(fid, g) {
  160. let good = {
  161. action : "send",
  162. feedbacktype : "good",
  163. good : g,
  164. fid : fid,
  165. }
  166. $.post("{dede:field name='phpurl'/}/feedback.php", good, function (data) {
  167. let result = JSON.parse(data);
  168. $(`#feedbackGood${fid}`).html(result.data);
  169. })
  170. }
  171. </script>