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); }
碎碎碎