提交 12a19767 编写于 作者: 孙建华

完成后台登录、管理员管理

上级 7a4a2105
......@@ -4,6 +4,7 @@ namespace App\Exceptions;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Auth\AuthenticationException;
class Handler extends ExceptionHandler
{
......@@ -50,4 +51,18 @@ class Handler extends ExceptionHandler
{
return parent::render($request, $exception);
}
/**
* Convert an authentication exception into a response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Auth\AuthenticationException $exception
* @return \Illuminate\Http\Response
*/
protected function unauthenticated($request, AuthenticationException $exception)
{
return $request->expectsJson()
? response()->json(['message' => $exception->getMessage()], 401)
: redirect()->guest(route('admin::login'));
}
}
......@@ -9,16 +9,37 @@
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\AdminUserRequest;
use App\Model\Admin\AdminUser;
use App\Repository\Admin\AdminUserRepository;
use Illuminate\Http\Request;
class AdminUserController extends Controller
{
protected $formNames = ['id', 'name', 'password', 'status'];
public function __construct()
{
parent::__construct();
$this->breadcrumb[] = ['title' => '管理员管理', 'url' => route('admin::adminUser.index')];
}
/**
* 管理员列表
*
*/
public function index()
{
return view('admin.adminUser.index');
$this->breadcrumb[] = ['title' => '管理员列表', 'url' => ''];
return view('admin.adminUser.index', ['title' => '管理员列表', 'breadcrumb' => $this->breadcrumb]);
}
/**
* 管理员列表数据
*
* @package Request $request
*/
public function list(Request $request)
{
$perPage = (int) $request->get('limit', 50);
......@@ -27,13 +48,67 @@ class AdminUserController extends Controller
return $data;
}
public function showAdd()
/**
* 新增管理员用户
*
*/
public function create()
{
$this->breadcrumb[] = ['title' => '新增管理员', 'url' => ''];
return view('admin.adminUser.add', ['breadcrumb' => $this->breadcrumb]);
}
/**
* 保存管理员用户
*
* @param AdminUserRequest $request
*/
public function save(AdminUserRequest $request)
{
return 'add user';
AdminUserRepository::add($request->only($this->formNames));
return [
'code' => 0,
'msg' => '新增成功',
'redirect' => route('admin::adminUser.index')
];
}
public function add(Request $request)
/**
* 编辑管理员用户
*
* @param int $id
*/
public function edit($id)
{
$this->breadcrumb[] = ['title' => '编辑管理员', 'url' => ''];
$user = AdminUserRepository::find($id);
return view('admin.adminUser.add', ['id' => $id, 'user' => $user, 'breadcrumb' => $this->breadcrumb]);
}
/**
* 更新管理员用户
*
* @param AdminUserRequest $request
* @param int $id
*/
public function update(AdminUserRequest $request, $id)
{
$data = $request->only($this->formNames);
if (!isset($data['status'])) {
$data['status'] = AdminUser::STATUS_DISABLE;
}
if ($request->input('password') == '') {
unset($data['password']);
}
AdminUserRepository::update($id, $data);
return [
'code' => 0,
'msg' => '编辑成功',
'redirect' => route('admin::adminUser.index')
];
}
}
\ No newline at end of file
}
......@@ -93,7 +93,7 @@ class LoginController extends Controller
return [
'code' => 0,
'msg' => '登陆成功',
'redirect' => '/',
'redirect' => route('admin::index'),
];
}
}
\ No newline at end of file
......@@ -6,8 +6,18 @@ use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\Auth;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
protected $breadcrumb = [];
public function __construct()
{
$this->breadcrumb[] = ['title' => '首页', 'url' => route('admin::index')];
View::share('breadcrumb', $this->breadcrumb);
}
}
......@@ -39,7 +39,7 @@ class AdminLoginRequest extends FormRequest
{
return [
'name.required' => '用户名不能为空',
'password.required' => '用户名不能为空',
'password.required' => '密码不能为空',
'captcha.required' => '图形验证码不能为空',
'captcha.captcha' => '图形验证码错误',
];
......
<?php
namespace App\Http\Requests\Admin;
use Illuminate\Foundation\Http\FormRequest;
use App\Model\Admin\AdminUser;
use Illuminate\Validation\Rule;
class AdminUserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$status_in = [
AdminUser::STATUS_DISABLE,
AdminUser::STATUS_ENABLE,
];
return [
'name' => 'required|max:50',
'password' => $this->method() == 'PUT' ? '' : 'required|min:6|max:18',
'status' => [
Rule::in($status_in),
],
];
}
/**
* Get custom messages for validator errors.
*
* @return array
*/
public function messages()
{
return [
'name.required' => '用户名不能为空',
'password.required' => '密码不能为空',
];
}
}
......@@ -12,5 +12,8 @@ use Illuminate\Foundation\Auth\User as Authenticatable;
class AdminUser extends Authenticatable
{
protected $fillable = ['name', 'password'];
const STATUS_ENABLE = 1;
const STATUS_DISABLE = 0;
protected $guarded = [];
}
\ No newline at end of file
......@@ -8,7 +8,6 @@
namespace App\Repository\Admin;
use App\Model\Admin\AdminUser;
class AdminUserRepository
......@@ -16,6 +15,11 @@ class AdminUserRepository
public static function list($perPage)
{
$data = AdminUser::query()->paginate($perPage);
$data->transform(function ($item) {
$item->editUrl = route('admin::adminUser.edit', ['id' => $item->id]);
$item->statusText = $item->status == AdminUser::STATUS_ENABLE ? '启用' : '禁用';
return $item;
});
return [
'code' => 0,
......@@ -24,4 +28,23 @@ class AdminUserRepository
'data' => $data->items(),
];
}
public static function add($data)
{
$data['password'] = bcrypt($data['password']);
return AdminUser::query()->create($data);
}
public static function update($id, $data)
{
if (isset($data['password'])) {
$data['password'] = bcrypt($data['password']);
}
return AdminUser::query()->where('id', $id)->update($data);
}
public static function find($id)
{
return AdminUser::query()->find($id);
}
}
\ No newline at end of file
......@@ -65,7 +65,7 @@ return [
|
*/
'timezone' => 'UTC',
'timezone' => 'Asia/Shanghai',
/*
|--------------------------------------------------------------------------
......
.breadcrumb {
padding-left: 15px;
}
\ No newline at end of file
@extends('admin.base')
@section('title', 'qwe')
@section('content')
<div class="layui-card">
@include('admin.breadcrumb')
<div class="layui-card-body">
<form class="layui-form" action="@if(isset($id)){{ route('admin::adminUser.update', ['id' => $id]) }}@else{{ route('admin::adminUser.save') }}@endif" method="post">
@if(isset($id)) {{ method_field('PUT') }} @endif
<div class="layui-form-item">
<label class="layui-form-label">用户名</label>
<div class="layui-input-block">
<input type="text" name="name" required lay-verify="required" placeholder="请输入用户名" autocomplete="off" class="layui-input" value="{{ $user->name ?? '' }}">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">密码</label>
<div class="layui-input-inline">
<input type="password" name="password" @if(!isset($id)) required lay-verify="required" @endif placeholder="请输入密码" autocomplete="off" class="layui-input">
</div>
@if(isset($id))<div class="layui-form-mid layui-word-aux">密码留空则不修改密码</div>@endif
</div>
<div class="layui-form-item">
<label class="layui-form-label">是否启用</label>
<div class="layui-input-block">
<input type="checkbox" name="status" lay-skin="switch" lay-text="启用|禁用" value="1" @if(isset($user) && $user->status == App\Model\Admin\AdminUser::STATUS_ENABLE) checked @endif>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formAdminUser" id="submitBtn">提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</div>
</form>
</div>
</div>
@endsection
@section('js')
<script>
var form = layui.form;
//监听提交
form.on('submit(formAdminUser)', function(data){
window.form_submit = $('#submitBtn');
form_submit.prop('disabled', true);
$.ajax({
url: data.form.action,
data: data.field,
success: function (result) {
if (result.code !== 0) {
form_submit.prop('disabled', false);
layer.msg(result.msg, {shift: 6});
return false;
}
layer.msg(result.msg, {icon: 1}, function () {
if (result.reload) {
location.reload();
}
if (result.redirect) {
location.href = result.redirect;
}
});
}
});
return false;
});
</script>
@endsection
\ No newline at end of file
@extends('admin.base')
@section('content')
<table class="layui-table" lay-data="{height:315, url:'{{ route('admin::adminUser.list') }}', page:true, id:'test', toolbar:'<div><a href=\'{{ route('admin::adminUser.add.show') }}\'><i class=\'layui-icon layui-icon-add-1\'></i>添加管理员</a></div>'}" lay-filter="test">
@include('admin.breadcrumb')
<table class="layui-table" lay-data="{url:'{{ route('admin::adminUser.list') }}', page:true, id:'test', toolbar:'<div><a href=\'{{ route('admin::adminUser.create') }}\'><i class=\'layui-icon layui-icon-add-1\'></i>新增管理员</a></div>'}" lay-filter="test">
<thead>
<tr>
<th lay-data="{field:'id', width:80, sort: true}">ID</th>
<th lay-data="{field:'name', width:80}">用户名</th>
<th lay-data="{field:'name'}">用户名</th>
<th lay-data="{field:'statusText'}">状态</th>
<th lay-data="{field:'created_at'}">添加时间</th>
<th lay-data="{field:'updated_at'}">更新时间</th>
<th lay-data="{width:200, templet:'#action'}">操作</th>
......@@ -15,7 +18,7 @@
@endsection
<script type="text/html" id="action">
<a href="/detail/<% d.id %>" class="layui-table-link"><i class="layui-icon layui-icon-edit"></i></a>
<a href="<% d.editUrl %>" class="layui-table-link"><i class="layui-icon layui-icon-edit"></i></a>
</script>
@section('js')
......
......@@ -2,9 +2,11 @@
<html>
<head>
<meta charset="utf-8">
<meta name="csrf-token" content="{{ csrf_token() }}">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title>@yield('title') - {{ config('app.name') }}</title>
<link rel="stylesheet" href="/public/vendor/layui-v2.4.5/css/layui.css" media="all">
<link rel="stylesheet" href="/public/admin/css/lightCMSAdmin.css" media="all">
@yield('css')
</head>
<body class="layui-layout-body">
......@@ -28,15 +30,15 @@
<ul class="layui-nav layui-layout-right">
<li class="layui-nav-item">
<a href="javascript:;">
<img src="http://t.cn/RCzsdCq" class="layui-nav-img">
贤心
<i class="layui-icon layui-icon-username" style="font-size: 20px; color: #009688;"></i>
{{ \Auth::guard('admin')->user()->name }}
</a>
<dl class="layui-nav-child">
<dd><a href="">基本资料</a></dd>
<dd><a href="">安全设置</a></dd>
</dl>
</li>
<li class="layui-nav-item"><a href="">退了</a></li>
<li class="layui-nav-item"><a href="{{ route('admin::logout') }}">退了</a></li>
</ul>
</div>
......
<div class="layui-card-header">
<span class="layui-breadcrumb">
@foreach($breadcrumb as $v)
@if($v['url'] != '')
<a href="{{ $v['url'] }}">{{ $v['title'] }}</a>
@else
<a><cite>{{ $v['title'] }}</cite></a>
@endif
@endforeach
</span>
</div>
\ No newline at end of file
......@@ -17,13 +17,15 @@ Route::group(
Route::middleware('auth:admin')->group(function () {
Route::get('/logout', 'Auth\LoginController@logout')->name('logout');
Route::get('/index', 'HomeController@showIndex')->name('index.show');
Route::get('/index', 'HomeController@showIndex')->name('index');
// 管理员用户管理
Route::get('/admin_user/index', 'AdminUserController@index')->name('adminUser.index');
Route::get('/admin_user/list', 'AdminUserController@list')->name('adminUser.list');
Route::get('/admin_user/add', 'AdminUserController@showAdd')->name('adminUser.add.show');
Route::post('/admin_user/add', 'AdminUserController@add')->name('adminUser.add');
Route::get('/admin_users', 'AdminUserController@index')->name('adminUser.index');
Route::get('/admin_users/list', 'AdminUserController@list')->name('adminUser.list');
Route::get('/admin_users/create', 'AdminUserController@create')->name('adminUser.create');
Route::post('/admin_users', 'AdminUserController@save')->name('adminUser.save');
Route::get('/admin_users/{id}/edit', 'AdminUserController@edit')->name('adminUser.edit');
Route::put('/admin_user/{id}', 'AdminUserController@update')->name('adminUser.update');
});
}
);
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册