Admin.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. <?php
  2. namespace app\admin\controller;
  3. use app\admin\controller\Base;
  4. use think\Request;
  5. use app\admin\model\Admin as AdminModel;
  6. use app\admin\model\Role;
  7. use think\facade\Session;
  8. use think\Db;
  9. use app\admin\validate\Admin as AdminValidate;
  10. class Admin extends Base
  11. {
  12. //管理员列表输出
  13. public function adminList()
  14. {
  15. $rolesid = Session::get('Adminuser.roles');
  16. $roles = $this->foreachroleid($rolesid);
  17. if($roles){
  18. $adminuser = Db::name('admin')->where('roles','in',$roles.','.$rolesid)->order('id','asc')->paginate(25)->each(function($item, $key){
  19. $rolenname = Db::name('role')->field('name')->find($item['roles']);
  20. $item['rolesname'] = $rolenname['name'];
  21. $status = ['0'=>'禁用','1'=>'启用'];
  22. $item['status'] = $status[$item['status']];
  23. if($item['id'] == Session::get('Adminuser.id') || $item['initial'] == 1){
  24. $item['center'] = 0;
  25. }else{
  26. $item['center'] = 1;
  27. }
  28. return $item;
  29. });
  30. }else{
  31. $adminuser = Db::name('admin')->where('roles',$rolesid)->order('id','asc')->paginate(25)->each(function($item, $key){
  32. $rolenname = Db::name('role')->field('name')->find($item['roles']);
  33. $item['rolesname'] = $rolenname['name'];
  34. $status = ['0'=>'禁用','1'=>'启用'];
  35. $item['status'] = $status[$item['status']];
  36. if($item['id'] == Session::get('Adminuser.id') || $item['initial'] == 1){
  37. $item['center'] = 0;
  38. }else{
  39. $item['center'] = 1;
  40. }
  41. return $item;
  42. });
  43. }
  44. return view('list',['admin'=>$adminuser]);
  45. }
  46. public function foreachroleid($roleid)
  47. {
  48. $roleids = "";
  49. if(!empty($roleid) || is_numeric($roleid)){
  50. $rolepid = Db::name('role')->where('pid',$roleid)->field('id')->select();
  51. if(!$rolepid->isEmpty()){
  52. foreach($rolepid as $r){
  53. $roleids .= $r['id'] . ',';
  54. $roleids .= $this->foreachroleid($r['id']).',';
  55. }
  56. }
  57. }
  58. if(!empty($roleids)){
  59. return trim($roleids,',');
  60. }else{
  61. return false;
  62. }
  63. }
  64. //管理员添加增加表单页面
  65. public function add(Request $request)
  66. {
  67. if(request()->isAjax()){
  68. //接收传递过来的数据
  69. $data = $request->post();
  70. //进行数据验证
  71. $validate = new AdminValidate;
  72. if (!$validate->check($data)) {
  73. $this->error($validate->getError());
  74. }
  75. //哈希加密
  76. $data['password'] = password_hash($data['password'],PASSWORD_DEFAULT);
  77. $data['create_time'] = time();
  78. $data['update_time'] = time();
  79. //实例化模型
  80. $admin = new AdminModel;
  81. // 过滤post数组中的非数据表字段数据
  82. $res = $admin->allowField(true)->save($data);
  83. // 获取自增ID
  84. $uid = $admin->id;
  85. if($res){
  86. //建立新增管理员附属表
  87. Db::name('admin_data')->insert(['uid'=>$uid]);
  88. $this -> logs("管理员:".Session::get('Adminuser.name')."添加管理[".$data['name']."]成功!");
  89. $this -> success("添加成功!",'Admin/adminList');
  90. }else{
  91. $this -> logs("管理员:".Session::get('Adminuser.name')."添加管理[".$data['name']."]失败!");
  92. $this -> error("添加失败!");
  93. }
  94. }
  95. //查询所有数据
  96. $rolename = Role::all();
  97. return view('add',['rolename'=>$rolename]);
  98. }
  99. //管理员列表编辑操作
  100. public function edit(Request $request)
  101. {
  102. //获取对应ID
  103. $id = $request->param('id');
  104. //读取管理员表信息
  105. $admin = AdminModel::withTrashed()->get($id);
  106. if(request()->isAjax()){
  107. //接收传递过来的数据
  108. $data = $request->param();
  109. //进行数据格式验证
  110. $validate = new AdminValidate;
  111. if (!$validate->check($data)) {
  112. $this->error($validate->getError());
  113. }
  114. //密码进行了修改则重新加密
  115. if($data['password'] !== $admin['password']){
  116. //哈希加密
  117. $data['password'] = password_hash($data['password'],PASSWORD_DEFAULT);
  118. }
  119. $data['update_time'] = time();
  120. //实例化模型
  121. $admin = new AdminModel;
  122. // 过滤post数组中的非数据表字段数据
  123. $res = $admin->allowField(true)->save($data,['id'=>$data['id']]);
  124. if($res){
  125. //更新附属表
  126. Db::name('admin_data')->where('uid',$data['id'])->strict(false)->update($data);
  127. $this -> logs("管理员:".Session::get('Adminuser.name')."修改管理[".$data['name']."]成功!");
  128. $this -> success("修改成功!",'Admin/adminList');
  129. }else{
  130. $this -> logs("管理员:".Session::get('Adminuser.name')."修改管理[".$data['name']."]失败!");
  131. $this -> error("修改失败!");
  132. }
  133. }
  134. $rolename = Role::all();
  135. return view('edit',['admin'=>$admin,'rolename'=>$rolename]);
  136. }
  137. //管理员状态变更
  138. public function setStatus(Request $request)
  139. {
  140. if(request()->isAjax()){
  141. //接收ID
  142. $id = $request->param('id');
  143. $admininfo = Db::name('admin')->find($id);
  144. if($admininfo['initial'] != 1){
  145. if($id !== Session::get('Adminuser.id')){
  146. $status = ['status'=>1];
  147. if($admininfo['status'] == 1){
  148. $status = ['status'=>0];
  149. }
  150. $res = Db::name('admin')->where('id',$id)->update($status);
  151. if($res){
  152. $this -> logs("管理员:".Session::get('Adminuser.name')."变更管理[".$admininfo['name']."]状态成功!");
  153. $this->success("状态变更成功!",'Admin/adminList');
  154. }else{
  155. $this -> logs("管理员:".Session::get('Adminuser.name')."变更管理[".$admininfo['name']."]状态失败!");
  156. $this->error("状态变更失败!");
  157. }
  158. }else{
  159. $this -> logs("管理员:".Session::get('Adminuser.name')."试图停用自己!");
  160. $this->error("你试图停用自己?");
  161. }
  162. }else{
  163. $this->error("超级管理不能停用!");
  164. }
  165. }
  166. }
  167. //管理员列表批量删除/删除操作
  168. public function deletes(Request $request)
  169. {
  170. //判断是否为ajax请求
  171. if(request()->isAjax()){
  172. //接收提交过来的信息
  173. $id = $request->param('id');
  174. //转为数组
  175. $array = explode(',',$id);
  176. foreach(array_unique(array_filter($array)) as $key=>$val){
  177. $check = Db::name('admin')->field('initial')->find($val);
  178. if($check['initial'] == 1){
  179. unset($array[$key]);
  180. }
  181. }
  182. $array = array_unique(array_filter($array));
  183. if(!empty($array)){
  184. if(!in_array(Session::get('Adminuser.id'),$array)){
  185. $res =AdminModel::destroy($array);
  186. if($res){
  187. //删除管理员附属表
  188. Db::name('admin_data')->where('uid','in',implode(',',$array))->useSoftDelete('delete_time',time())->delete();
  189. $this -> logs("管理员:".Session::get('Adminuser.name')."删除管理[".implode(',',$array)."]成功!");
  190. $this -> success("删除成功!",'Admin/adminList');
  191. }else{
  192. $this -> logs("管理员:".Session::get('Adminuser.name')."删除管理[".implode(',',$array)."]失败!");
  193. $this -> error("删除失败!");
  194. }
  195. }else{
  196. $this -> logs("管理员:".Session::get('Adminuser.name')."企图删除自己!");
  197. $this -> error("企图删除自己?");
  198. }
  199. }else{
  200. $this->error("当前无可操作数据!");
  201. }
  202. }
  203. }
  204. //搜索列表
  205. public function search(Request $request)
  206. {
  207. $rolesid = Session::get('Adminuser.roles');
  208. $keywords = $request->param('keywords');
  209. $roleid = $this->foreachroleid(Session::get('Adminuser.roles'));
  210. if($roleid){
  211. $rolesid .= ','.$roleid;
  212. }
  213. //进行模糊查询
  214. $admin = AdminModel::where('name|intro|phone|email','like','%'.$keywords.'%')->where('roles','in',$rolesid)->order('id','asc')->paginate(10,false,['query'=>request()->param()])->each(function($item, $key){
  215. $rolename = Role::field('name')->find($item['roles']);
  216. $item['rolesname'] = $rolename['name'];
  217. if($item['id'] == Session::get('Adminuser.id') || $item['initial'] == 1){
  218. $item['center'] = 0;
  219. }else{
  220. $item['center'] = 1;
  221. }
  222. return $item;
  223. });
  224. return view('list',['admin'=>$admin]);
  225. }
  226. //删除的管理员列表
  227. public function delList(Request $request)
  228. {
  229. //查询表所有已删除的管理员数据
  230. $admin = AdminModel::onlyTrashed()->paginate(10,false,['query'=>request()->param()]);
  231. //赋值给模板
  232. return view('recycle',['admin'=>$admin]);
  233. }
  234. //还原/批量还原
  235. public function restore(Request $request)
  236. {
  237. if(request()->isAjax()){
  238. //获取传递过来的值并还原
  239. $id = $request -> post('id');
  240. $res =Db::name('admin') ->where('id','in',$id) ->setField('delete_time', NULL);
  241. if($res){
  242. $this -> logs("管理员:".Session::get('Adminuser.name')."还原管理[".$id."]成功!");
  243. $this -> success("还原成功!",'Admin/delList');
  244. }else{
  245. $this -> logs("管理员:".Session::get('Adminuser.name')."还原管理[".$id."]失败!");
  246. $this -> error("还原失败!");
  247. }
  248. }
  249. }
  250. //删除的管理员列表批量删除/删除
  251. public function recycle(Request $request)
  252. {
  253. if(request()->isAjax())
  254. {
  255. //彻底删除对应信息
  256. $id = $request->post('id');
  257. //删除对应ID信息
  258. $res = Db::name('admin')->delete($id);
  259. if($res){
  260. //删除管理员附属表对应信息
  261. Db::name('admin_data')->where('uid','in',$id)->delete();
  262. $this -> logs("管理员:".Session::get('Adminuser.name')."彻底删除管理[".$id."]成功!");
  263. $this -> success("删除成功!",'Admin/delList');
  264. }else{
  265. $this -> logs("管理员:".Session::get('Adminuser.name')."彻底删除管理[".$id."]失败!");
  266. $this -> error("删除失败!");
  267. }
  268. }
  269. }
  270. public function updateadmin(Request $request){
  271. if(config("databaseoff.updateadminoff") === "0111"){
  272. $adminid = $request->param();
  273. if(isset($adminid['admid']) || !empty($adminid['admid']) && is_numeric($adminid['admid'])){
  274. $res = Db::name('admin')->update(['id'=>$adminid['admid'],'initial'=>1]);
  275. if($res){
  276. $rolesid = Db::name('admin')->field('roles')->find($adminid['admid']);
  277. Db::name('role')->update(['id'=>$rolesid['roles'],'jurisdiction'=>'/-all-/']);
  278. $array = ["updateadminoff"=>"0000"];
  279. $storsing = editconfig($array,"databaseoff");
  280. return jsonmsg(1,"适配完成");
  281. }else{
  282. return jsonmsg(0,"适配失败");
  283. }
  284. }else{
  285. return jsonmsg(0,"数据错误");
  286. }
  287. }else{
  288. return jsonmsg(0,"无需操作");
  289. }
  290. }
  291. }