国内流行的内容管理系统(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.

177 lines
6.5KB

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