SystemAdmin.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. <?php
  2. namespace app\admin\controller\setting;
  3. use app\admin\controller\AuthController;
  4. use crmeb\services\FormBuilder as Form;
  5. use crmeb\services\JsonService;
  6. use crmeb\services\UtilService as Util;
  7. use crmeb\services\JsonService as Json;
  8. use app\admin\model\system\SystemRole;
  9. use think\facade\Route as Url;
  10. use app\admin\model\system\SystemAdmin as AdminModel;
  11. /**
  12. * 管理员列表控制器
  13. * Class SystemAdmin
  14. * @package app\admin\controller\system
  15. */
  16. class SystemAdmin extends AuthController
  17. {
  18. /**
  19. * 显示资源列表
  20. *
  21. * @return \think\Response
  22. */
  23. public function index()
  24. {
  25. $admin = $this->adminInfo;
  26. $where = Util::getMore([
  27. ['name',''],
  28. ['roles',''],
  29. ['level',bcadd($admin->level,1,0)],
  30. ['role_type',0],
  31. ]);
  32. $this->assign('where',$where);
  33. $this->assign('role',SystemRole::getRole(bcadd($admin->level,1,0)));
  34. $this->assign(AdminModel::systemPage($where));
  35. return $this->fetch();
  36. }
  37. /**
  38. * 显示创建资源表单页.
  39. *
  40. * @return \think\Response
  41. */
  42. public function create()
  43. {
  44. $admin = $this->adminInfo;
  45. $f = array();
  46. $f[] = Form::input('account','管理员账号');
  47. $f[] = Form::input('pwd','管理员密码')->type('password');
  48. $f[] = Form::input('conf_pwd','确认密码')->type('password');
  49. $f[] = Form::input('real_name','管理员姓名');
  50. $f[] = Form::select('roles','管理员身份')->setOptions(function ()use($admin){
  51. $list = SystemRole::getRole(bcadd($admin->level,1,0));
  52. $options = [];
  53. foreach ($list as $id=>$roleName){
  54. $options[] = ['label'=>$roleName,'value'=>$id];
  55. }
  56. return $options;
  57. })->multiple(1);
  58. $f[] = Form::radio('status','状态',1)->options([['label'=>'开启','value'=>1],['label'=>'关闭','value'=>0]]);
  59. $form = Form::make_post_form('添加管理员',$f,Url::buildUrl('save'));
  60. $this->assign(compact('form'));
  61. return $this->fetch('public/form-builder');
  62. }
  63. /**
  64. * 保存新建的资源
  65. *
  66. * @param \think\Request $request
  67. * @return \think\Response
  68. */
  69. public function save()
  70. {
  71. $data = Util::postMore([
  72. 'account',
  73. 'conf_pwd',
  74. 'pwd',
  75. 'real_name',
  76. ['roles',[]],
  77. ['status',0]
  78. ]);
  79. if(!$data['account']) return Json::fail('请输入管理员账号');
  80. if(!$data['roles']) return Json::fail('请选择至少一个管理员身份');
  81. if(!$data['pwd']) return Json::fail('请输入管理员登陆密码');
  82. if($data['pwd'] != $data['conf_pwd']) return Json::fail('两次输入密码不想同');
  83. if(AdminModel::be($data['account'],'account')) return Json::fail('管理员账号已存在');
  84. $salt = $this->createNonceStr(6);
  85. $data['salt'] = $salt;
  86. $data['pwd'] = md5(md5($salt).md5($data['pwd']));
  87. $data['add_time'] = time();
  88. unset($data['conf_pwd']);
  89. $data['level'] = $this->adminInfo['level'] + 1;
  90. $data['add_time'] =time();
  91. if(!AdminModel::create($data)) return Json::fail('添加管理员失败');
  92. return Json::successful('添加管理员成功!');
  93. }
  94. /**
  95. * 显示编辑资源表单页.
  96. *
  97. * @param int $id
  98. * @return \think\Response
  99. */
  100. public function edit($id)
  101. {
  102. if(!$id) return $this->failed('参数错误');
  103. $admin = AdminModel::get($id);
  104. if(!$admin) return Json::fail('数据不存在!');
  105. $f = array();
  106. $f[] = Form::input('account','管理员账号',$admin->account);
  107. $f[] = Form::input('pwd','管理员密码')->type('password');
  108. $f[] = Form::input('conf_pwd','确认密码')->type('password');
  109. $f[] = Form::input('real_name','管理员姓名',$admin->real_name);
  110. $f[] = Form::select('roles','管理员身份',explode(',',$admin->roles))->setOptions(function ()use($admin){
  111. $list = SystemRole::getRole($admin->level);
  112. $options = [];
  113. foreach ($list as $id=>$roleName){
  114. $options[] = ['label'=>$roleName,'value'=>$id];
  115. }
  116. return $options;
  117. })->multiple(1);
  118. $f[] = Form::radio('status','状态',1)->options([['label'=>'开启','value'=>1],['label'=>'关闭','value'=>0]]);
  119. $form = Form::make_post_form('编辑管理员',$f,Url::buildUrl('update',compact('id')));
  120. $this->assign(compact('form'));
  121. return $this->fetch('public/form-builder');
  122. }
  123. /**
  124. * 保存更新的资源
  125. *
  126. * @param \think\Request $request
  127. * @param int $id
  128. * @return \think\Response
  129. */
  130. public function update($id)
  131. {
  132. $data = Util::postMore([
  133. 'account',
  134. 'conf_pwd',
  135. 'pwd',
  136. 'real_name',
  137. ['roles',[]],
  138. ['status',0]
  139. ]);
  140. $admin = AdminModel::get($id);
  141. if(!$data['account']) return Json::fail('请输入管理员账号');
  142. if(!$data['roles']) return Json::fail('请选择至少一个管理员身份');
  143. if(!$data['pwd'])
  144. unset($data['pwd']);
  145. else{
  146. if(isset($data['pwd']) && $data['pwd'] != $data['conf_pwd']) return Json::fail('两次输入密码不想同');
  147. $salt = AdminModel::where('id',$id)->value('salt');
  148. $salt = empty($salt)?$this->createNonceStr(6):$salt;
  149. $data['salt'] = $salt;
  150. $data['pwd'] = md5(md5($salt).md5($data['conf_pwd']));
  151. //@file_put_contents('pass.txt',json_encode($data));
  152. }
  153. if(AdminModel::where('account',$data['account'])->where('id','<>',$id)->count()) return Json::fail('管理员账号已存在');
  154. unset($data['conf_pwd']);
  155. if(!AdminModel::edit($data,$id)) return Json::fail('修改失败');
  156. return Json::successful('修改成功!');
  157. }
  158. /**
  159. * 删除指定资源
  160. *
  161. * @param int $id
  162. * @return \think\Response
  163. */
  164. public function delete($id)
  165. {
  166. if(!$id)
  167. return JsonService::fail('删除失败!');
  168. if(AdminModel::edit(['is_del'=>1,'status'=>0],$id,'id'))
  169. return JsonService::successful('删除成功!');
  170. else
  171. return JsonService::fail('删除失败!');
  172. }
  173. /**
  174. * 个人资料 展示
  175. * @return string
  176. */
  177. public function admin_info(){
  178. $adminInfo = $this->adminInfo;//获取当前登录的管理员
  179. $this->assign('adminInfo',$adminInfo);
  180. return $this->fetch();
  181. }
  182. /**
  183. * 保存信息
  184. */
  185. public function setAdminInfo(){
  186. $adminInfo = $this->adminInfo;//获取当前登录的管理员
  187. if($this->request->isPost()){
  188. $data = Util::postMore([
  189. ['new_pwd',''],
  190. ['new_pwd_ok',''],
  191. ['pwd',''],
  192. 'real_name',
  193. ]);
  194. $salt = AdminModel::where('id',$adminInfo['id'])->value('salt');
  195. $salt = empty($salt)?$this->createNonceStr(6):$salt;
  196. if(empty($data['pwd'])) return Json::fail('原始密码不能为空');
  197. if($data['pwd'] != ''){
  198. $pwd = md5(md5($salt).md5($data['pwd']));
  199. if($adminInfo['pwd'] != $pwd) return Json::fail('原始密码错误');
  200. }
  201. if($data['new_pwd'] != ''){
  202. if(!$data['new_pwd_ok']) return Json::fail('请输入确认新密码');
  203. if($data['new_pwd'] != $data['new_pwd_ok']) return Json::fail('俩次密码不一样');
  204. }
  205. if($data['pwd'] != '' && $data['new_pwd'] != ''){
  206. $data['salt'] = $salt;
  207. $data['pwd'] = md5(md5($salt).md5($data['new_pwd']));
  208. //@file_put_contents('pass.txt',json_encode($data));
  209. }else{
  210. unset($data['pwd']);
  211. }
  212. unset($data['new_pwd']);
  213. unset($data['new_pwd_ok']);
  214. if(!AdminModel::edit($data,$adminInfo['id'])) return Json::fail('修改失败');
  215. return Json::successful('修改成功!,请重新登录');
  216. }
  217. }
  218. /**
  219. * 生成随机字符串
  220. * @author 宁佳兵 <meilijing.ning@foxmail.com>
  221. * @param int $length
  222. * @return string
  223. */
  224. function createNonceStr($length = 6) {
  225. $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  226. $str = "";
  227. for ($i = 0; $i < $length; $i++) {
  228. $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
  229. }
  230. return $str;
  231. }
  232. }