SystemAdmin.php 10 KB

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