admin.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. 'use strict';
  2. import AdminModel from '../../models/admin/admin'
  3. import BaseComponent from '../../prototype/baseComponent'
  4. import crypto from 'crypto'
  5. import formidable from 'formidable'
  6. import dtime from 'time-formater'
  7. class Admin extends BaseComponent {
  8. constructor(){
  9. super()
  10. this.login = this.login.bind(this)
  11. this.register = this.register.bind(this)
  12. this.encryption = this.encryption.bind(this);
  13. }
  14. async login(req, res, next){
  15. const form = new formidable.IncomingForm();
  16. form.parse(req, async (err, fields, files) => {
  17. if (err) {
  18. res.send({
  19. status: 0,
  20. type: 'FORM_DATA_ERROR',
  21. message: '表单信息错误'
  22. })
  23. return
  24. }
  25. const {user_name, password, status = 1} = fields;
  26. try{
  27. if (!user_name) {
  28. throw new Error('用户名错误')
  29. }else if(!password){
  30. throw new Error('密码错误')
  31. }
  32. }catch(err){
  33. console.log(err.message, err);
  34. res.send({
  35. status: 0,
  36. type: 'GET_ERROR_PARAM',
  37. message: err.message,
  38. })
  39. return
  40. }
  41. const newpassword = this.encryption(password);
  42. try{
  43. const admin = await AdminModel.findOne({user_name})
  44. if (!admin) {
  45. const adminTip = status == 1 ? '普通管理员' : '超级管理员'
  46. const admin_id = await this.getId('admin_id');
  47. const newAdmin = {
  48. user_name,
  49. password: newpassword,
  50. id: admin_id,
  51. create_time: dtime().format('YYYY-MM-DD'),
  52. admin: adminTip,
  53. status,
  54. }
  55. await AdminModel.create(newAdmin)
  56. req.session.admin_id = admin_id;
  57. res.send({
  58. status: 1,
  59. success: '注册管理员成功',
  60. })
  61. }else if(newpassword.toString() != admin.password.toString()){
  62. console.log('密码错误');
  63. res.send({
  64. status: 0,
  65. type: 'ERROR_PASSWORD',
  66. message: '密码输入错误',
  67. })
  68. }else{
  69. req.session.admin_id = admin.id;
  70. res.send({
  71. status: 1,
  72. success: '登录成功'
  73. })
  74. }
  75. }catch(err){
  76. console.log('登录管理员失败', err);
  77. res.send({
  78. status: 0,
  79. type: 'LOGIN_ADMIN_FAILED',
  80. message: '登录管理员失败',
  81. })
  82. }
  83. })
  84. }
  85. async register(req, res, next){
  86. const form = new formidable.IncomingForm();
  87. form.parse(req, async (err, fields, files) => {
  88. if (err) {
  89. res.send({
  90. status: 0,
  91. type: 'FORM_DATA_ERROR',
  92. message: '表单信息错误'
  93. })
  94. return
  95. }
  96. const {user_name, password, status = 1} = fields;
  97. try{
  98. if (!user_name) {
  99. throw new Error('用户名错误')
  100. }else if(!password){
  101. throw new Error('密码错误')
  102. }
  103. }catch(err){
  104. console.log(err.message, err);
  105. res.send({
  106. status: 0,
  107. type: 'GET_ERROR_PARAM',
  108. message: err.message,
  109. })
  110. return
  111. }
  112. try{
  113. const admin = await AdminModel.findOne({user_name})
  114. if (admin) {
  115. console.log('该用户已经存在');
  116. res.send({
  117. status: 0,
  118. type: 'USER_HAS_EXIST',
  119. message: '该用户已经存在',
  120. })
  121. }else{
  122. const adminTip = status == 1 ? '普通管理员' : '超级管理员'
  123. const admin_id = await this.getId('admin_id');
  124. const newpassword = this.encryption(password);
  125. const newAdmin = {
  126. user_name,
  127. password: newpassword,
  128. id: admin_id,
  129. create_time: dtime().format('YYYY-MM-DD'),
  130. admin: adminTip,
  131. status,
  132. }
  133. await AdminModel.create(newAdmin)
  134. req.session.admin_id = admin_id;
  135. res.send({
  136. status: 1,
  137. message: '注册管理员成功',
  138. })
  139. }
  140. }catch(err){
  141. console.log('注册管理员失败', err);
  142. res.send({
  143. status: 0,
  144. type: 'REGISTER_ADMIN_FAILED',
  145. message: '注册管理员失败',
  146. })
  147. }
  148. })
  149. }
  150. encryption(password){
  151. const newpassword = this.Md5(this.Md5(password).substr(2, 7) + this.Md5(password));
  152. return newpassword
  153. }
  154. Md5(password){
  155. const md5 = crypto.createHash('md5');
  156. return md5.update(password).digest('base64');
  157. }
  158. async singout(req, res, next){
  159. try{
  160. delete req.session.admin_id;
  161. res.send({
  162. status: 1,
  163. success: '退出成功'
  164. })
  165. }catch(err){
  166. console.log('退出失败', err)
  167. res.send({
  168. status: 0,
  169. message: '退出失败'
  170. })
  171. }
  172. }
  173. async getAllAdmin(req, res, next){
  174. const {limit = 20, offset = 0} = req.query;
  175. try{
  176. const allAdmin = await AdminModel.find({}, '-_id -password').skip(Number(offset)).limit(Number(limit))
  177. res.send({
  178. status: 1,
  179. data: allAdmin,
  180. })
  181. }catch(err){
  182. console.log('获取超级管理列表失败', err);
  183. res.send({
  184. status: 0,
  185. type: 'ERROR_GET_ADMIN_LIST',
  186. message: '获取超级管理列表失败'
  187. })
  188. }
  189. }
  190. async getAdminCount(req, res, next){
  191. try{
  192. const count = await AdminModel.count()
  193. res.send({
  194. status: 1,
  195. count,
  196. })
  197. }catch(err){
  198. console.log('获取管理员数量失败', err);
  199. res.send({
  200. status: 0,
  201. type: 'ERROR_GET_ADMIN_COUNT',
  202. message: '获取管理员数量失败'
  203. })
  204. }
  205. }
  206. async getAdminInfo(req, res, next){
  207. const admin_id = req.session.admin_id;
  208. if (!admin_id || !Number(admin_id)) {
  209. console.log('session失效');
  210. res.send({
  211. status: 0,
  212. type: 'ERROR_SESSION',
  213. message: '获取管理员信息失败'
  214. })
  215. return
  216. }
  217. try{
  218. const info = await AdminModel.findOne({id: admin_id});
  219. if (!info) {
  220. throw new Error('未找到当前管理员')
  221. }else{
  222. res.send({
  223. status: 1,
  224. data: info
  225. })
  226. }
  227. }catch(err){
  228. console.log('获取管理员信息失败');
  229. res.send({
  230. status: 0,
  231. type: 'GET_ADMIN_INFO_FAILED',
  232. message: '获取管理员信息失败'
  233. })
  234. }
  235. }
  236. }
  237. export default new Admin()