team_member_list.tpl 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <title>团队用户管理 - Powered by MinDoc</title>
  8. <!-- Bootstrap -->
  9. <link href="{{cdncss "/static/bootstrap/css/bootstrap.min.css"}}" rel="stylesheet">
  10. <link href="{{cdncss "/static/font-awesome/css/font-awesome.min.css"}}" rel="stylesheet">
  11. <link href="{{cdncss "/static/select2/4.0.5/css/select2.min.css"}}" rel="stylesheet">
  12. <link href="{{cdncss "/static/css/main.css" "version"}}" rel="stylesheet">
  13. <style type="text/css">
  14. .table>tbody>tr>td{vertical-align: middle;}
  15. </style>
  16. </head>
  17. <body>
  18. <div class="manual-reader">
  19. {{template "widgets/header.tpl" .}}
  20. <div class="container manual-body">
  21. <div class="row">
  22. {{template "manager/widgets.tpl" "team"}}
  23. <div class="page-right">
  24. <div class="m-box">
  25. <div class="box-head">
  26. <strong class="box-title">{{.Model.TeamName}} - 成员管理</strong>
  27. <button type="button" class="btn btn-success btn-sm pull-right" data-toggle="modal" data-target="#addTeamMemberDialogModal"><i class="fa fa-user-plus" aria-hidden="true"></i> 添加成员</button>
  28. </div>
  29. </div>
  30. <div class="box-body">
  31. <div class="users-list" id="teamMemberList">
  32. <template v-if="lists.length <= 0">
  33. <div class="text-center">暂无数据</div>
  34. </template>
  35. <template v-else>
  36. <table class="table">
  37. <thead>
  38. <tr>
  39. <th width="80">头像</th>
  40. <th width="100">账号</th>
  41. <th width="100">姓名</th>
  42. <th width="150">角色</th>
  43. <th width="80px">操作</th>
  44. </tr>
  45. </thead>
  46. <tbody>
  47. <tr v-for="item in lists">
  48. <td><img :src="item.avatar" onerror="this.src='{{cdnimg "/static/images/middle.gif"}}'" class="img-circle" width="34" height="34"></td>
  49. <td>${item.account}</td>
  50. <td>${item.real_name}</td>
  51. <td>
  52. <div class="btn-group">
  53. <button type="button" class="btn btn-default btn-sm" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  54. 角色:${item.role_name}
  55. <span class="caret"></span></button>
  56. <ul class="dropdown-menu">
  57. <li><a href="javascript:;" @click="setTeamMemberRole(item.member_id,1)">管理员 <p class="text">拥有阅读、写作和管理权限</p></a> </li>
  58. <li><a href="javascript:;" @click="setTeamMemberRole(item.member_id,2)">编辑者 <p class="text">拥有阅读和写作权限</p></a> </li>
  59. <li><a href="javascript:;" @click="setTeamMemberRole(item.member_id,3)">观察者 <p class="text">拥有阅读权限</p></a> </li>
  60. </ul>
  61. </div>
  62. </td>
  63. <td>
  64. <button type="button" class="btn btn-danger btn-sm" @click="deleteMember(item.member_id,$event)" data-loading-text="删除中">删除</button>
  65. </td>
  66. </tr>
  67. </tbody>
  68. </table>
  69. </template>
  70. <nav class="pagination-container">
  71. {{.PageHtml}}
  72. </nav>
  73. </div>
  74. </div>
  75. </div>
  76. </div>
  77. </div>
  78. {{template "widgets/footer.tpl" .}}
  79. </div>
  80. <!-- Modal -->
  81. <div class="modal fade" id="addTeamMemberDialogModal" tabindex="-1" role="dialog" aria-labelledby="addTeamMemberDialogModalLabel">
  82. <div class="modal-dialog modal-sm" role="document" style="width: 400px;">
  83. <form method="post" autocomplete="off" class="form-horizontal" action="{{urlfor "ManagerController.TeamMemberAdd"}}" id="addTeamMemberDialogForm">
  84. <input type="hidden" name="teamId" value="{{.Model.TeamId}}">
  85. <div class="modal-content">
  86. <div class="modal-header">
  87. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  88. <h4 class="modal-title" id="myModalLabel">添加成员</h4>
  89. </div>
  90. <div class="modal-body">
  91. <div class="form-group">
  92. <label class="col-sm-2 control-label">账号</label>
  93. <div class="col-sm-10">
  94. <select class="js-data-example-ajax form-control" multiple="multiple" name="memberId" id="memberId"></select>
  95. </div>
  96. </div>
  97. <div class="form-group">
  98. <label class="col-sm-2 control-label">角色</label>
  99. <div class="col-sm-10">
  100. <select name="roleId" class="form-control">
  101. <option value="1">管理员</option>
  102. <option value="2">编辑者</option>
  103. <option value="3">观察者</option>
  104. </select>
  105. </div>
  106. </div>
  107. <div class="clearfix"></div>
  108. </div>
  109. <div class="modal-footer">
  110. <span id="form-error-message"></span>
  111. <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
  112. <button type="submit" class="btn btn-success" data-loading-text="保存中..." id="btnAddMember">保存</button>
  113. </div>
  114. </div>
  115. </form>
  116. </div>
  117. </div><!--END Modal-->
  118. <script src="{{cdnjs "/static/jquery/1.12.4/jquery.min.js"}}"></script>
  119. <script src="{{cdnjs "/static/bootstrap/js/bootstrap.min.js"}}"></script>
  120. <script src="{{cdnjs "/static/vuejs/vue.min.js"}}"></script>
  121. <script src="{{cdnjs "/static/js/jquery.form.js"}}" type="text/javascript"></script>
  122. <script src="{{cdnjs "/static/select2/4.0.5/js/select2.full.min.js"}}"></script>
  123. <script src="{{cdnjs "/static/select2/4.0.5/js/i18n/zh-CN.js"}}"></script>
  124. <script src="{{cdnjs "/static/js/main.js"}}" type="text/javascript"></script>
  125. <script type="text/javascript">
  126. $(function () {
  127. var modalCache = $("#addTeamMemberDialogModal form").html();
  128. /**
  129. * 添加用户
  130. */
  131. $("#addTeamMemberDialogForm").ajaxForm({
  132. beforeSubmit : function () {
  133. var memberId = $.trim($("#memberId").val());
  134. if(memberId === ""){
  135. return showError("账号不能为空");
  136. }
  137. $("#btnAddMember").button("loading");
  138. },
  139. success : function (res) {
  140. if(res.errcode === 0){
  141. app.lists.splice(0,0,res.data);
  142. $("#addTeamMemberDialogModal").modal("hide");
  143. }else{
  144. showError(res.message);
  145. }
  146. $("#btnAddMember").button("reset");
  147. }
  148. });
  149. $("#addTeamMemberDialogModal").on("hidden.bs.modal",function () {
  150. $(this).find("form").html(modalCache);
  151. }).on("show.bs.modal",function () {
  152. $('.js-data-example-ajax').select2({
  153. language: "zh-CN",
  154. minimumInputLength : 1,
  155. minimumResultsForSearch: Infinity,
  156. maximumSelectionLength:1,
  157. width : "100%",
  158. ajax: {
  159. url: '{{urlfor "ManagerController.TeamSearchMember" "teamId" .Model.TeamId}}',
  160. dataType: 'json',
  161. data: function (params) {
  162. return {
  163. q: params.term, // search term
  164. page: params.page
  165. };
  166. },
  167. processResults: function (data, params) {
  168. return {
  169. results : data.data.results
  170. }
  171. }
  172. }
  173. });
  174. });
  175. var app = new Vue({
  176. el : "#teamMemberList",
  177. data : {
  178. lists : {{.Result}}
  179. },
  180. delimiters : ['${','}'],
  181. methods : {
  182. setTeamMemberRole : function (member_id, role) {
  183. var $this = this;
  184. $.ajax({
  185. url :"{{urlfor "ManagerController.TeamChangeMemberRole"}}",
  186. dataType :"json",
  187. type :"post",
  188. data : { "memberId" : member_id,"roleId" : role ,"teamId":{{.Model.TeamId}}},
  189. success : function (res) {
  190. if(res.errcode === 0){
  191. for (var index in $this.lists) {
  192. var item = $this.lists[index];
  193. if (item.member_id === member_id) {
  194. $this.lists.splice(index,1,res.data);
  195. break;
  196. }
  197. }
  198. }else{
  199. alert("操作失败:" + res.message);
  200. }
  201. }
  202. })
  203. },
  204. deleteMember : function (id, e) {
  205. var $this = this;
  206. $.ajax({
  207. url : "{{urlfor "ManagerController.TeamMemberDelete"}}",
  208. type : "post",
  209. data : { "memberId":id ,"teamId":{{.Model.TeamId}}},
  210. dataType : "json",
  211. success : function (res) {
  212. if (res.errcode === 0) {
  213. for (var index in $this.lists) {
  214. var item = $this.lists[index];
  215. if (item.member_id == id) {
  216. $this.lists.splice(index,1);
  217. break;
  218. }
  219. }
  220. } else {
  221. alert("操作失败:" + res.message);
  222. }
  223. }
  224. });
  225. }
  226. }
  227. });
  228. Vue.nextTick(function () {
  229. $("[data-toggle='tooltip']").tooltip();
  230. });
  231. });
  232. </script>
  233. </body>
  234. </html>