1.管理員列表頁添加修改和刪除的按鈕。javascript
<td class="text-center"> <a href="/admin/manager/edit?id=<%=adminList[i]._id%>">修改</a> <a href="/admin/delete?model=Admin&id=<%=adminList[i]._id%>">刪除</a> </td>
2.router.js定義路由html
3.改造manager的edit頁面(這裏有個坑,role_id在用戶表存的是ObjectId)如:java
須要toString一下才能轉換成正常的字符串與角色表_id toString一下才能作比較判斷。數據庫
<%- include ../public/page_header.html %> <div class="container-fluid"> <div class="row"> <div class="col-sm-2"> <%- include ../public/page_aside.html %> </div> <div class="col-sm-10"> <div class="panel panel-default"> <div class="panel-heading"> 修改管理員 </div> <div class="panel-body"> <div class="table-responsive input-form"> <form action="/admin/manager/doEdit" method="post"> <ul> <input type='hidden' name="_csrf" value="<%=csrf%>"></input> <input type='hidden' name="_id" value="<%=list[0]._id%>"></input> <li> 管理員名稱: <input type="text" value="<%=list[0].username%>" readonly name="username"/></li> <li> 管理員密碼: <input type="text" value="" name="password"/></li> <li> 管理員電話: <input type="text" value="<%=list[0].mobile%>" name="mobile"/></li> <li> 管理員郵箱: <input type="text" value="<%=list[0].email%>" name="email"/></li> <li> 管理員角色: <select name="role_id" id="role_id"> <%for(let i=0;i<roleList.length;i++){%> <%if(roleList[i]._id.toString() ==list[0].role_id.toString() ){%> <option value="<%=roleList[i]._id%>" selected><%=roleList[i].title%></option> <%}else{%> <option value="<%=roleList[i]._id%>"><%=roleList[i].title%></option> <%}%> <%}%> </select> </li> <li> <br/> <button type="submit" class="btn btn-default">提交</button> </li> </ul> </form> </div> </div> </div> </div> </div> </div> </body> </html>
4.渲染manager index頁面傳入須要修改的信息,在controller>admin>manager>edit方法中修改,獲取編輯數據,和角色字典async
async edit() { // 獲取編輯數據 let id = this.ctx.query.id; let list = await this.ctx.model.Admin.find({ _id: id }); console.log(list); // 獲取角色列表 let roleList = await this.ctx.model.Role.find({}); console.log(roleList); await this.ctx.render("admin/manager/edit", { list, roleList }); }
5.調用doEdit方法作管理員信息修改,用戶名不可編輯,密碼若是有值則修改密碼,無值則不修改密碼ide
async doEdit() { let { _id, username, password, mobile, email, role_id } = this.ctx.request.body; let result; if (password) { // 添加了新密碼 password = await this.service.tools.md5(password); result = await this.ctx.model.Admin.updateOne( { _id }, { username, password, mobile, email, role_id } ); } else { // 沒添加新密碼 result = await this.ctx.model.Admin.updateOne( { _id }, { username, mobile, email, role_id } ); } console.log(result); if (result) { await this.success("/admin/manager", "編輯管理員成功"); } else { await this.error("/admin/manager", "編輯管理員失敗"); } }
6.展現效果:post
編輯前:ui
編輯中:this
編輯後:code
6.刪除效果太簡單了,調用公共delete方法就好。base.js當中
async delete() { // 1.獲取要刪除的數據庫表 model // 2.獲取要刪除數據的id _id // 3.執行刪除 // 4.返回到之前頁面 let model = this.ctx.request.query.model; console.log(model); let id = this.ctx.request.query.id; await this.ctx.model[model].deleteOne({ _id: id }); console.log(this.ctx.request.headers["referer"]); this.ctx.redirect(this.ctx.state.prevPage); }
碎碎碎