国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

178 satır
6.5KB

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