role.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. 'use strict';
  2. const Service = require('egg').Service;
  3. const assert = require('assert');
  4. const moment = require('moment');
  5. class RoleService extends Service {
  6. async create({ name, code, state }) {
  7. assert(name, '名称不存在');
  8. assert(code, '编码不存在');
  9. assert(state, '状态不存在');
  10. const { Role: model } = this.ctx.model;
  11. const createAt = moment().format('x');
  12. try {
  13. const isrole = await model.find({ code });
  14. if (isrole.length > 0) {
  15. return { errcode: -2001, errmsg: '编码已存在' };
  16. }
  17. await model.create({ name, code, createAt, state });
  18. return { errmsg: '', errcode: 0 };
  19. } catch (error) {
  20. throw new Error('添加失败');
  21. }
  22. }
  23. async update({ name, state, _id, adminMenuList }) {
  24. assert(_id, 'id不存在');
  25. const { Role: model } = this.ctx.model;
  26. try {
  27. await model.findById(_id).update({ name, state, adminMenuList });
  28. return { errmsg: '', errcode: 0 };
  29. } catch (error) {
  30. throw new Error('修改失败');
  31. }
  32. }
  33. async del({ id }) {
  34. assert(id, 'id不存在');
  35. const { Role: model } = this.ctx.model;
  36. const { AdminUser: usermodel } = this.ctx.model;
  37. try {
  38. const role = await model.findById(id);
  39. // 关联删除 数组查询
  40. const userList = await usermodel.find({ roleList: { $in: [ role.code ] } });
  41. // 轮询
  42. userList.forEach(async e => {
  43. const roleList = e.roleList.filter(p => p !== role.code);
  44. await usermodel.findById(e._id).update({ roleList });
  45. });
  46. // 结束
  47. await model.findById(id).remove();
  48. return { errmsg: '', errcode: 0 };
  49. } catch (error) {
  50. throw new Error('删除失败');
  51. }
  52. }
  53. async query({ skip, limit, name, code, state }) {
  54. const { Role: model } = this.ctx.model;
  55. const filter = {};
  56. if (name) filter.name = name;
  57. if (code) filter.state = code;
  58. if (state) filter.acct = state;
  59. try {
  60. const total = await model.find({ ...filter });
  61. let res;
  62. if (skip && limit) {
  63. res = await model.find({ ...filter }).skip(Number(skip) * Number(limit)).limit(Number(limit));
  64. } else {
  65. res = await model.find({ ...filter });
  66. }
  67. return { errmsg: '', errcode: 0, data: res, total: total.length };
  68. } catch (error) {
  69. throw new Error('查询失败');
  70. }
  71. }
  72. }
  73. module.exports = RoleService;