Index_Admin.cshtml 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. @using Masuit.MyBlogs.Core.Models.DTO
  2. @using Masuit.MyBlogs.Core.Models.ViewModel
  3. @using Masuit.Tools.Core.Net
  4. @{
  5. ViewBag.Title = "留言板";
  6. Layout = "~/Views/Shared/_Layout.cshtml";
  7. UserInfoOutputDto user = Context.Session.Get<UserInfoOutputDto>(SessionKey.UserInfo);
  8. string cid = string.IsNullOrEmpty(Context.Request.Query["cid"]) ? "0" : Context.Request.Query["cid"].ToString();
  9. }
  10. <link href="~/Assets/layui/css/layui.min.css" rel="stylesheet" />
  11. <script src="~/Assets/layui/layui.all.js"></script>
  12. <div class="container min-height780">
  13. <ol class="cd-breadcrumb triangle">
  14. <li>@Html.ActionLink("首页", "Index", "Home")</li>
  15. <li class="current"><em>@ViewBag.Title</em></li>
  16. </ol>
  17. <form class="form-horizontal animated pulse" id="msg-form" method="post">
  18. @Html.AntiForgeryToken()
  19. <input type="hidden" name="OperatingSystem" id="OperatingSystem" />
  20. <input type="hidden" name="Browser" id="Browser" />
  21. <input type="hidden" class="form-control" value="@user.NickName" name="NickName" id="name">
  22. <input type="hidden" class="form-control" value="@user.Email" name="Email" id="email">
  23. <input type="hidden" class="form-control" value="@user.QQorWechat" name="QQorWechat" id="chat">
  24. <div class="form-group overlay animated fadeInDown" style="margin-bottom: 0px !important;">
  25. <textarea class="layui-textarea" id="layedit" name="Content" style="height: 200px"></textarea>
  26. </div>
  27. <div class="form-group">
  28. <div class="col-xs-12">
  29. <button type="submit" class="btn btn-info btn-lg">
  30. 发表留言
  31. </button>
  32. </div>
  33. </div>
  34. </form>
  35. <ul class="wow media-list animated fadeInRight"></ul>
  36. <div class="row">
  37. <div class="col-md-12 text-center">
  38. <div id="pageToolbar"></div>
  39. </div>
  40. </div>
  41. </div>
  42. <div style="position: fixed; left: -20000px; bottom: -20000px; display: none">
  43. <div id="reply" class="container-fluid">
  44. <form class="form-horizontal" id="reply-form" method="post">
  45. @Html.AntiForgeryToken()
  46. <input type="hidden" name="OperatingSystem" id="OperatingSystem2" />
  47. <input type="hidden" name="Browser" id="Browser2" />
  48. <input type="hidden" class="form-control" value="@user.NickName" name="NickName" id="name2">
  49. <input type="hidden" class="form-control" value="@user.Email" name="Email" id="email2">
  50. <input type="hidden" class="form-control" value="@user.QQorWechat" name="QQorWechat" id="chat2">
  51. <input type="hidden" value="" id="uid" name="ParentId" />
  52. <div class="form-group overlay animated fadeInDown">
  53. <textarea class="layui-textarea" id="layedit2" name="Content" style="height: 80px"></textarea>
  54. </div>
  55. <div class="form-group">
  56. <div class="col-xs-12">
  57. <div class="btn-group">
  58. <button type="submit" class="btn btn-info btn-lg">
  59. 提交回复
  60. </button>
  61. <button type="button" class="btn-cancel btn btn-danger btn-lg">
  62. 取消回复
  63. </button>
  64. </div>
  65. </div>
  66. </div>
  67. </form>
  68. </div>
  69. </div>
  70. <script src="~/Scripts/global/leavemsg.js"></script>
  71. <script>
  72. window.onload = function () {
  73. loading();
  74. $('#pageToolbar').Paging({ //异步加载评论
  75. pagesize: 10,
  76. count: @ViewBag.TotalCount ,
  77. toolbar: true,
  78. callback: function(page, size, count) {
  79. $.post("/msg/getmsgs", {
  80. page: page,
  81. size: size
  82. }, (data) => {
  83. data = data.Data;
  84. if (data) {
  85. document.querySelector(".media-list").innerHTML = loadParentMsgs(data);
  86. bindReplyBtn();
  87. }
  88. });
  89. }
  90. });
  91. loadingDone();
  92. };
  93. //递归加载留言
  94. //加载父楼层
  95. function loadParentMsgs(data) {
  96. loading();
  97. var html = '';
  98. if (data) {
  99. var rows = Enumerable.From(data.rows).Where(c => c.ParentId === 0).ToArray();
  100. var page = data.page;
  101. var size = data.size;
  102. var maxPage = Math.ceil(data.total / size);
  103. page = page > maxPage ? maxPage : page;
  104. page = page < 1 ? 1 : page;
  105. var startfloor = data.parentTotal - (page - 1) * size;
  106. for (let i = 0; i < rows.length; i++) {
  107. html += `<li class="msg-list media animated fadeInRight" id='${rows[i].Id}'>
  108. <div class="media-body">
  109. <article class="panel panel-info">
  110. <header class="panel-heading">${startfloor}# ${rows[i].IsMaster ? `<i class="icon icon-user"></i>` : ""}${rows[i].NickName}${rows[i].IsMaster ? `(管理员)` : ""}
  111. <span class="pull-right" style="font-size: 10px;">${rows[i].Status == 4 ? `<a class="label label-success" onclick="pass(${rows[i].Id})">通过</a> |` : ""} <a class="label label-danger" onclick="del(${rows[i].Id})">删除</a> | ${rows[i].PostDate}<span class="hidden-sm hidden-xs"> | ${GetOperatingSystem(rows[i].OperatingSystem) + " | " + GetBrowser(rows[i].Browser)}</span></span>
  112. </header>
  113. <div class="panel-body">
  114. ${rows[i].Content} <a class="label label-info" href="?uid=${rows[i].Id}"><i class="icon-comment"></i></a>
  115. <div class="pull-right">
  116. <span class="label label-success">${rows[i].Email}</span>
  117. <span class="label label-primary">${rows[i].QQorWechat}</span>
  118. </div>
  119. ${loadMsgs(data.rows, Enumerable.From(data.rows).Where(c => c.ParentId === rows[i].Id).OrderBy(c => c.PostDate).ToArray(), startfloor--)}
  120. </div>
  121. </article>
  122. </div>
  123. </li>`;
  124. }
  125. }
  126. loadingDone();
  127. return html;
  128. }
  129. //加载子楼层
  130. function loadMsgs(data, msg, root, depth = 0) {
  131. var colors = ["info", "success", "primary", "warning", "danger"];
  132. var floor = 1;
  133. depth++;
  134. var html = '';
  135. Enumerable.From(msg).ForEach((item, index) => {
  136. var color = colors[depth % 5];
  137. html += `<article id="${item.Id}" class="panel panel-${color}">
  138. <div class="panel-heading">
  139. ${depth}-${floor++}# ${item.IsMaster ?`<i class="icon icon-user"></i>`:""}${item.NickName}${item.IsMaster ?`(管理员)`:""}
  140. <span class="pull-right" style="font-size: 10px;">${item.Status == 4 ? `<a class="label label-success" onclick="pass(${item.Id})">通过</a> |`:""} <a class="label label-danger" onclick="del(${item.Id})">删除</a> | ${item.PostDate}<span class="hidden-sm hidden-xs"> | ${GetOperatingSystem(item.OperatingSystem) + " | " + GetBrowser(item.Browser)}</span></span>
  141. </div>
  142. <div class="panel-body">
  143. ${item.Content}
  144. <a class="label label-${color}" href="?uid=${item.Id}"><i class="icon-comment"></i></a>
  145. <div class="pull-right">
  146. <span class="label label-success">${item.Email}</span>
  147. <span class="label label-primary">${item.QQorWechat}</span>
  148. </div>
  149. ${loadMsgs(data, Enumerable.From(data).Where(c => c.ParentId === item.Id).OrderBy(c => c.PostDate), root, depth)}
  150. </div>
  151. </article>`;
  152. });
  153. return html;
  154. }
  155. function pass(id) {
  156. $.post("/msg/pass", {
  157. id: id
  158. }, function(res) {
  159. swal(res.Message, "", res.Success ? "success" : "error");
  160. getmsgs();
  161. });
  162. }
  163. function del(id) {
  164. swal({
  165. title: "确认删除这条留言吗?",
  166. showCancelButton: true,
  167. confirmButtonColor: "#DD6B55",
  168. confirmButtonText: "确定",
  169. cancelButtonText: "取消",
  170. showLoaderOnConfirm: true,
  171. animation: true,
  172. allowOutsideClick: false
  173. }).then(function () {
  174. $.post("/msg/delete", {
  175. id: id
  176. }, function(res) {
  177. swal(res.Message, "", res.Success ? "success" : "error");
  178. getmsgs();
  179. });
  180. }, function () {
  181. });
  182. }
  183. /**
  184. * 获取留言
  185. */
  186. function getmsgs() {
  187. $.post("/msg/getmsgs", {
  188. page: 1,
  189. size: 10,
  190. cid:@cid
  191. }, (data) => {
  192. data = data.Data;
  193. document.querySelector(".media-list").innerHTML = loadParentMsgs(data);
  194. bindReplyBtn();
  195. });
  196. }
  197. </script>