model
model/admin.js
module.exports = app => {
const mongoose = app.mongoose;
const Schema = mongoose.Schema;
var d = new Date();
const AdminSchema = new Schema({
username: {
type: String
},
password: {
type: String
},
mobile: {
type: String
},
email: {
type: String
},
status: {
type: Number,
default: 1
},
role_id: {
type: Schema.Types.ObjectId
},
add_time: {
type: Number,
default: d.getTime()
},
is_super: {
type: Number,
default:0
}
});
return mongoose.model('Admin', AdminSchema, 'admin');
}
router.js
router.js
router.get('/admin/manager', controller.admin.manager.index);
router.get('/admin/manager/add', controller.admin.manager.add);
router.post('/admin/manager/doAdd', controller.admin.manager.doAdd);
router.get('/admin/manager/edit', controller.admin.manager.edit);
router.get('/admin/manager/doEdit', controller.admin.manager.doEdit);
增加
controller
controller/admin/manager.js
查找所有的角色数据,新增管理员的时候,选择角色
async add() {
//查找所有的角色
var roelResult = await this.ctx.model.Role.find();
console.log(roelResult)
await this.ctx.render('admin/manager/add',{
roelResult:roelResult
});
}
view
admin/manager/add.html
<form action="/admin/manager/doAdd" method="post">
<ul>
<input type="hidden" name="_csrf" value="<%= csrf %>">
<li> 管理员名称: <input type="text" name="username"/></li>
<li> 管理员密码: <input type="text" name="password"/></li>
<li> 管理员手机号: <input type="text" name="mobile"/></li>
<li> 管理员邮箱: <input type="text" name="email"/></li>
<li>
管理员角色:
<select name="role_id" id="role_id">
<%for(var i =0;i<roelResult.length;i++ ){%>
<option value="<%= roelResult[i]._id %>"><%= roelResult[i].title %></option>
<%}%>
</select>
</li>
<li>
<br/>
<button type="submit" class="btn btn-default">提交</button>
</li>
</ul>
</form>
查找
controller
controller/admin/manager.js
async index() {
var result = await this.ctx.model.Admin.aggregate([{
//关联role表
$lookup:{
from:'role',
localField:'role_id',
foreignField:'_id',
as:'role'
}
}])
console.log(JSON.stringify(result))
await this.ctx.render('admin/manager/index',{
list:result
});
}
view
admin/manager/index.html
<table class="table table-bordered">
<thead>
<tr class="th">
<th>管理员名称</th>
<th>管理员角色</th>
<th class="text-center">操作</th>
</tr>
</thead>
<tbody>
<%for(var i =0;i<list.length;i++ ){%>
<tr>
<td>
<%= list[i].username%>
</td>
<td>
<%= list[i].role[0].title%>
</td>
<td class="text-center">修改 删除</td>
</tr>
<%}%>
</tbody>
</table>
编辑
controller
判断是否修改了密码
controller/admin/manager.js
async edit() {
//获取编辑的数据
var id = this.ctx.request.query.id;
var adminResult = await this.ctx.model.Admin.find({"_id":id});
//获取角色
var roleResult = await this.ctx.model.Role.find();
await this.ctx.render('admin/manager/edit',{
adminResult:adminResult[0],
roleResult:roleResult
});
}
async doEdit() {
console.log(this.ctx.request.body)
var id = this.ctx.request.body.id;
var password = this.ctx.request.body.password;
var mobile = this.ctx.request.body.mobile;
var email = this.ctx.request.body.email;
var role_id = this.ctx.request.body.role_id;
if(password){ //如果修改了密码
password = await this.service.tools.md5(password);
await this.ctx.model.Admin.updateOne({"_id":id},{
password,
mobile,
email,
role_id
})
}else{ //如果没有修改了密码
await this.ctx.model.Admin.updateOne({"_id":id},{
mobile,
email,
role_id
})
}
await this.success('/admin/manager','编辑管理员成功');
}
view
select默认选中
<select name="" id="">
<option value="0">0</option>
<option selected value="1">1</option>
<option value="2">2</option>
</select>
默认选中管理员员的角色
admin/manager/edit.html
<form action="/admin/manager/doEdit" method="post">
<ul>
<input type="hidden" name="_csrf" value="<%= csrf %>">
<input type="hidden" name="id" value="<%= adminResult._id %>">
<li> 管理员名称: <input readonly type="text" name="username" value="<%= adminResult.username %>" /></li>
<li> 管理员密码: <input type="text" name="password" /></li>
<li> 管理员手机号: <input type="text" name="mobile" value="<%= adminResult.mobile %>" /></li>
<li> 管理员邮箱: <input type="text" name="email" value="<%= adminResult.email %>" /></li>
<li>
管理员角色:
<select name="role_id" id="role_id">
<%for(var i =0;i<roleResult.length;i++ ){%>
<!-- 选中的角色 -->
<% if(roleResult[i]._id.toString() == adminResult.role_id.toString() ){%>
<option value="<%= roleResult[i]._id %>" selected>
<%= roleResult[i].title %>
</option>
<% }else {%>
<option value="<%= roleResult[i]._id %>">
<%= roleResult[i].title %>
</option>
<% } %>
<%}%>
</select>
</li>
<li>
<br />
<button type="submit" class="btn btn-default">提交</button>
</li>
</ul>
</form>
删除
view
admin/manager/index.html
<a href="/admin/delete?model=Admin&id=<%= list[i]._id %>">删除</a>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。