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

widget_article_feedback.htm 6.9KB

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