From c978ce55940ed5d45189b82a8966a0afb7910e79 Mon Sep 17 00:00:00 2001 From: printempw Date: Sat, 23 Jul 2016 15:20:10 +0800 Subject: [PATCH] add management page of players --- app/Controllers/AdminController.php | 175 ++++++++++++++++++++------- app/Controllers/PlayerController.php | 12 +- app/Models/Player.php | 15 ++- app/Models/User.php | 19 +++ assets/src/js/admin.js | 144 ++++++++++++++++++++-- assets/src/js/utils.js | 10 ++ assets/src/sass/admin.scss | 53 +++++--- assets/src/sass/style.scss | 67 +++++++--- config/routes.php | 13 +- resources/views/admin/master.tpl | 3 - resources/views/admin/players.tpl | 166 +++++++++++++++++++++++++ resources/views/admin/users.tpl | 54 ++++++--- resources/views/skinlib/index.tpl | 29 +++-- resources/views/user/master.tpl | 6 + 14 files changed, 632 insertions(+), 134 deletions(-) create mode 100644 resources/views/admin/players.tpl diff --git a/app/Controllers/AdminController.php b/app/Controllers/AdminController.php index 4a328966..6cb159a4 100644 --- a/app/Controllers/AdminController.php +++ b/app/Controllers/AdminController.php @@ -4,8 +4,10 @@ namespace App\Controllers; use App\Models\User; use App\Models\UserModel; +use App\Models\Player; +use App\Models\PlayerModel; +use App\Models\Texture; use App\Exceptions\E; -use Option; use Utils; use View; @@ -14,10 +16,83 @@ class AdminController extends BaseController public function index() { - echo View::make('admin.index')->render(); + View::show('admin.index'); } - public function ajaxHandler() + public function customize() + { + View::show('admin.customize'); + } + + public function options() + { + View::show('admin.options'); + } + + public function users() + { + $page = isset($_GET['page']) ? $_GET['page'] : 1; + + $filter = isset($_GET['filter']) ? $_GET['filter'] : ""; + + $q = isset($_GET['q']) ? $_GET['q'] : ""; + + if ($filter == "") { + $users = UserModel::orderBy('uid'); + $total_pages = ceil($users->count() / 30); + $users = $users->skip(($page - 1) * 30)->take(30)->get(); + } else if ($filter == "email") { + $users = UserModel::like('email', $q)->orderBy('uid'); + $total_pages = ceil($users->count() / 30); + $users = $users->skip(($page - 1) * 30)->take(30)->get(); + } else if ($filter == "nickname") { + $users = UserModel::like('nickname', $q)->orderBy('uid'); + $total_pages = ceil($users->count() / 30); + $users = $users->skip(($page - 1) * 30)->take(30)->get(); + } + + echo View::make('admin.users')->with('users', $users) + ->with('filter', $filter) + ->with('q', $q) + ->with('page', $page) + ->with('total_pages', $total_pages) + ->render(); + } + + public function players() + { + $page = isset($_GET['page']) ? $_GET['page'] : 1; + + $filter = isset($_GET['filter']) ? $_GET['filter'] : ""; + + $q = isset($_GET['q']) ? $_GET['q'] : ""; + + if ($filter == "") { + $players = PlayerModel::orderBy('uid'); + $total_pages = ceil($players->count() / 30); + $players = $players->skip(($page - 1) * 30)->take(30)->get(); + } else if ($filter == "player_name") { + $players = PlayerModel::like('player_name', $q)->orderBy('uid'); + $total_pages = ceil($players->count() / 30); + $players = $players->skip(($page - 1) * 30)->take(30)->get(); + } else if ($filter == "uid") { + $players = PlayerModel::where('uid', $q)->orderBy('uid'); + $total_pages = ceil($players->count() / 30); + $players = $players->skip(($page - 1) * 30)->take(30)->get(); + } + + echo View::make('admin.players')->with('players', $players) + ->with('filter', $filter) + ->with('q', $q) + ->with('page', $page) + ->with('total_pages', $total_pages) + ->render(); + } + + /** + * Handle ajax request from /admin/users + */ + public function userAjaxHandler() { $action = isset($_GET['action']) ? $_GET['action'] : ""; @@ -25,7 +100,7 @@ class AdminController extends BaseController Utils::checkPost(['color_scheme']); $color_scheme = str_replace('_', '-', $_POST['color_scheme']); - Option::set('color_scheme', $color_scheme); + \Option::set('color_scheme', $color_scheme); View::json('修改配色成功', 0); } @@ -44,6 +119,7 @@ class AdminController extends BaseController if ($user->setEmail($_POST['email'])) View::json('邮箱修改成功', 0); + } if ($action == "nickname") { Utils::checkPost(['nickname']); @@ -52,6 +128,7 @@ class AdminController extends BaseController if ($user->setNickName($_POST['nickname'])) View::json('昵称已成功设置为 '.$_POST['nickname'], 0); + } else if ($action == "password") { Utils::checkPost(['password']); @@ -59,67 +136,77 @@ class AdminController extends BaseController if ($user->changePasswd($_POST['password'])) View::json('密码修改成功', 0); } + } else if ($action == "score") { Utils::checkPost(['score']); if ($user->setScore($_POST['score'])) View::json('积分修改成功', 0); + + } else if ($action == "permission") { + $permission = $user->getPermission() == "0" + ? "-1" : "0"; + + if ($user->setPermission($permission)) + View::json('账号已被'.($permission == "-1"?"封禁":"解封"), 0); + } else if ($action == "delete") { if ($user->delete()) View::json('账号已被成功删除', 0); + } else { throw new E('Illegal parameters', 1); } } - public function customize() + /** + * Handle ajax request from /admin/players + */ + public function playerAjaxHandler() { - echo View::make('admin.customize')->render(); - } + $action = isset($_GET['action']) ? $_GET['action'] : ""; - public function options() - { - echo View::make('admin.options')->render(); - } + // exception will be throw by model if player is not existent + $player = new Player(Utils::getValue('pid', $_POST)); - public function users() - {/* - for ($i=0; $i < 60; $i++) { - $user = new UserModel(); - $user->email = Utils::generateRndString(6)."@".Utils::generateRndString(3).".com"; - $user->nickname = Utils::generateRndString(5); - $user->score = 666; - $user->ip = '111.111.111.111'; - $user->permission = "0"; - $user->register_at = Utils::getTimeFormatted(); - $user->save(); + if ($action == "preference") { + Utils::checkPost(['preference']); - echo "Seed: ".$user->email." added.
"; - } - exit;*/ + if ($_POST['preference'] != "default" && $_POST['preference'] != "slim") + View::json('无效的参数', 0); - $page = isset($_GET['page']) ? $_GET['page'] : 1; - $filter = isset($_GET['filter']) ? $_GET['filter'] : ""; + if ($player->setPreference($_POST['preference'])) + View::json('角色 '.$player->player_name.' 的优先模型已更改至 '.$_POST['preference'], 0); + + } elseif ($action == "texture") { + Utils::checkPost(['model', 'tid']); + + if ($_POST['model'] != "steve" && $_POST['model'] != "alex" && $_POST['model'] != "cape") + View::json('无效的参数', 0); + + if (!(is_numeric($_POST['tid']) && Texture::find($_POST['tid']))) + View::json('材质 tid.'.$_POST['tid'].' 不存在', 1); + + if ($player->setTexture(['tid_'.$_POST['model'] => $_POST['tid']])) + View::json('角色 '.$player->player_name.' 的材质修改成功', 0); + + } elseif ($action == "owner") { + Utils::checkPost(['uid']); + + if (!is_numeric($_POST['uid'])) + View::json('无效的参数', 0); + + $user = new User('', $_POST['uid']); + + if (!$user->is_registered) + View::json('不存在的用户', 1); + + if ($player->setOwner($_POST['uid'])) + View::json('角色 '.$player->player_name.' 已成功让渡至 '.$user->getNickName(), 0); - if ($filter == "") { - $users = UserModel::orderBy('uid'); - $total_pages = ceil($users->count() / 30); - $users = $users->skip(($page - 1) * 30)->take(30)->get(); } else { - $users = UserModel::like('nickname', $filter)->orderBy('uid'); - $total_pages = ceil($users->count() / 30); - $users = $users->skip(($page - 1) * 30)->take(30)->get(); + throw new E('Illegal parameters', 1); } - - echo View::make('admin.users')->with('users', $users) - ->with('page', $page) - ->with('total_pages', $total_pages) - ->render(); - } - - public function players() - { - echo View::make('admin.players')->render(); } } diff --git a/app/Controllers/PlayerController.php b/app/Controllers/PlayerController.php index 3579d1de..d54a8add 100644 --- a/app/Controllers/PlayerController.php +++ b/app/Controllers/PlayerController.php @@ -50,10 +50,11 @@ class PlayerController extends BaseController if ($user->getScore() < 100) View::json('积分不够添加角色啦', 7); - $player = new PlayerModel(); - $player->uid = $user->uid; - $player->player_name = $player_name; - $player->preference = "default"; + $player = new PlayerModel(); + $player->uid = $user->uid; + $player->player_name = $player_name; + $player->preference = "default"; + $player->last_modified = Utils::getTimeFormatted(); $player->save(); $user->setScore(100, 'minus'); @@ -117,6 +118,7 @@ class PlayerController extends BaseController $field_name = "tid_".$texture->type; $this->player->eloquent_model->$field_name = $tid; + $this->player->eloquent_model->last_modified = Utils::getTimeFormatted(); $this->player->eloquent_model->save(); View::json('材质已成功应用至角色 '.$this->player->eloquent_model->player_name.'', 0); @@ -131,6 +133,8 @@ class PlayerController extends BaseController $this->player->eloquent_model->tid_alex = ""; $this->player->eloquent_model->tid_cape = ""; + $this->player->eloquent_model->last_modified = Utils::getTimeFormatted(); + $this->player->eloquent_model->save(); View::json('角色 '.$this->player->eloquent_model->player_name.' 的材质已被成功重置', 0); diff --git a/app/Models/Player.php b/app/Models/Player.php index 04df2f19..362ca570 100644 --- a/app/Models/Player.php +++ b/app/Models/Player.php @@ -100,6 +100,10 @@ class Player return $this->eloquent_model['preference']; } + public function setOwner($uid) { + return $this->eloquent_model->update(['uid' => $uid]); + } + /** * Get JSON profile * @param int $api_type, which API to use, 0 for CustomSkinAPI, 1 for UniSkinAPI @@ -146,9 +150,14 @@ class Player class PlayerModel extends \Illuminate\Database\Eloquent\Model { - public $primaryKey = 'pid'; - protected $table = 'players'; - public $timestamps = false; + public $primaryKey = 'pid'; + protected $table = 'players'; + public $timestamps = false; protected $fillable = ['preference', 'last_modified']; + + public function scopeLike($query, $field, $value) + { + return $query->where($field, 'LIKE', "%$value%"); + } } diff --git a/app/Models/User.php b/app/Models/User.php index e31e3f55..eb17c449 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -69,6 +69,23 @@ class User return $this->eloquent_model->save(); } + public function getPermission() + { + return $this->eloquent_model->permission; + } + + /** + * Set user permission + * @param int $permission + * -1 - banned + * 0 - normal + * 1 - admin + */ + public function setPermission($permission) + { + return $this->eloquent_model->update(['permission' => $permission]); + } + public function setEmail($new_email) { $this->eloquent_model->email = $new_email; @@ -233,6 +250,8 @@ class UserModel extends \Illuminate\Database\Eloquent\Model protected $table = 'users'; public $timestamps = false; + protected $fillable = ['email', 'nickname', 'permission']; + public function scopeLike($query, $field, $value) { return $query->where($field, 'LIKE', "%$value%"); diff --git a/assets/src/js/admin.js b/assets/src/js/admin.js index 5077d2d9..1c193e2d 100644 --- a/assets/src/js/admin.js +++ b/assets/src/js/admin.js @@ -2,7 +2,7 @@ * @Author: printempw * @Date: 2016-07-22 14:02:44 * @Last Modified by: printempw -* @Last Modified time: 2016-07-22 19:27:20 +* @Last Modified time: 2016-07-23 15:17:22 */ 'use strict'; @@ -21,10 +21,9 @@ $('#layout-skins-list [data-skin]').click(function(e) { }); $('#color-submit').click(function() { - $.ajax({ type: "POST", - url: "../admin?action=color", + url: "../admin/users?action=color", dataType: "json", data: { "color_scheme": current_skin }, success: function(json) { @@ -40,7 +39,16 @@ $('#color-submit').click(function() { }); $('#page-select').on('change', function() { - window.location = "?page=" + $(this).val(); + // if has query strings + if (getQueryString('filter') != "" || getQueryString('q') != "") { + if (getQueryString('page') == "") + window.location = location.href + "&page=" + $(this).val(); + else + window.location = "?filter="+getQueryString('filter')+"&q="+getQueryString('q')+"&page="+$(this).val(); + } else { + window.location = "?page=" + $(this).val(); + } + }); function changeUserEmail(uid) { @@ -50,7 +58,7 @@ function changeUserEmail(uid) { $.ajax({ type: "POST", - url: "../admin?action=email", + url: "../admin/users?action=email", dataType: "json", data: { 'uid': uid, 'email': email }, success: function(json) { @@ -74,7 +82,7 @@ function changeUserNickName(uid) { $.ajax({ type: "POST", - url: "../admin?action=nickname", + url: "../admin/users?action=nickname", dataType: "json", data: { 'uid': uid, 'nickname': nickname }, success: function(json) { @@ -98,7 +106,7 @@ function changeUserPwd(uid) { $.ajax({ type: "POST", - url: "../admin?action=password", + url: "../admin/users?action=password", dataType: "json", data: { 'uid': uid, 'password': password }, success: function(json) { @@ -116,7 +124,7 @@ function changeUserPwd(uid) { function changeUserScore(uid, score) { $.ajax({ type: "POST", - url: "../admin?action=score", + url: "../admin/users?action=score", dataType: "json", data: { 'uid': uid, 'score': score }, success: function(json) { @@ -133,12 +141,36 @@ function changeUserScore(uid, score) { }); } +function changePermission(uid) { + $.ajax({ + type: "POST", + url: "../admin/users?action=permission", + dataType: "json", + data: { 'uid': uid }, + success: function(json) { + if (json.errno == 0) { + var object = $($('#'+uid).find('ul').children()[6]); + var dom = '' + + (object.text() == '封禁' ? '解封' : '封禁') + ''; + object.html(dom); + $('#'+uid).find('#permission').text(object.text() == '封禁' ? '正常' : '封禁'); + toastr.success(json.msg); + } else { + toastr.warning(json.msg); + } + }, + error: function(json) { + showModal(json.responseText.replace(/\n/g, '
'), 'Fatal Error(请联系作者)', 'danger'); + } + }); +} + function deleteUserAccount(uid) { if (!window.confirm('真的要删除此用户吗?此操作不可恢复')) return; $.ajax({ type: "POST", - url: "../admin?action=delete", + url: "../admin/users?action=delete", dataType: "json", data: { 'uid': uid }, success: function(json) { @@ -160,4 +192,96 @@ $('.score').on('keypress', function(event){ changeUserScore($(this).parent().parent().attr('id'), $(this).val()); }).click(function() { $(this).tooltip('show'); -}) +}); + +$('body').on('change', '#preference', function() { + $.ajax({ + type: "POST", + url: "../admin/players?action=preference", + dataType: "json", + data: { 'pid': $(this).parent().parent().attr('id'), 'preference': $(this).val() }, + success: function(json) { + if (json.errno == 0) { + toastr.success(json.msg); + } else { + toastr.warning(json.msg); + } + }, + error: function(json) { + showModal(json.responseText.replace(/\n/g, '
'), 'Fatal Error(请联系作者)', 'danger'); + } + }); +}); + +function changeTexture(pid) { + var dom = '
'+ + ''+ + ''+ + '
'+ + '
'+ + ''+ + ''+ + '
'; + + var player_name = $('#'+pid).find('#player-name').text(); + showModal(dom, '更换角色 '+player_name+' 的材质', 'default', 'ajaxChangeTexture('+pid+')'); + return; +} + +function ajaxChangeTexture(pid) { + // remove interference of modal which is hide + $('.modal').each(function() { + if ($(this).css('display') == "none") + $(this).remove(); + }); + + var model = $('#model').val(); + var tid = $('#tid').val(); + + $.ajax({ + type: "POST", + url: "../admin/players?action=texture", + dataType: "json", + data: { 'pid': pid, 'model': model, 'tid': tid }, + success: function(json) { + if (json.errno == 0) { + $('#'+pid+'-'+model).attr('src', '../preview/64/'+tid+'.png'); + $('.modal').modal('hide'); + toastr.success(json.msg); + } else { + toastr.warning(json.msg); + } + }, + error: function(json) { + showModal(json.responseText.replace(/\n/g, '
'), 'Fatal Error(请联系作者)', 'danger'); + } + }); +} + +function changeOwner(pid) { + var uid = prompt("请输入此角色要让渡至的用户 UID:"); + + if (!uid) return; + + $.ajax({ + type: "POST", + url: "../admin/players?action=owner", + dataType: "json", + data: { 'pid': pid, 'uid': uid }, + success: function(json) { + if (json.errno == 0) { + $($('#'+pid).children()[1]).text(uid); + toastr.success(json.msg); + } else { + toastr.warning(json.msg); + } + }, + error: function(json) { + showModal(json.responseText.replace(/\n/g, '
'), 'Fatal Error(请联系作者)', 'danger'); + } + }); +} diff --git a/assets/src/js/utils.js b/assets/src/js/utils.js index f5fb10e7..a5531bbb 100644 --- a/assets/src/js/utils.js +++ b/assets/src/js/utils.js @@ -23,6 +23,16 @@ function isMobile() { return false; } +function getQueryString(key) { + result = location.search.match(new RegExp('[\?\&]'+key+'=([^\&]+)','i')); + + if (result == null || result.length < 1){ + return ""; + } else { + return result[1]; + } +} + function logout(with_out_confirm, callback) { if (!with_out_confirm) { if (!window.confirm('确定要登出吗?')) return; diff --git a/assets/src/sass/admin.scss b/assets/src/sass/admin.scss index 9316f049..b96ea174 100644 --- a/assets/src/sass/admin.scss +++ b/assets/src/sass/admin.scss @@ -2,14 +2,16 @@ * @Author: printempw * @Date: 2016-07-22 14:08:41 * @Last Modified by: printempw -* @Last Modified time: 2016-07-22 19:33:23 +* @Last Modified time: 2016-07-23 12:35:32 */ @import "style.scss"; -.info-box > a { - color: #333; - font-size: 18px; +.info-box { + a { + color: #333; + font-size: 18px; + } } .key { @@ -29,23 +31,42 @@ td[class='key'], td[class='value'] { } } -#page-select { - padding-left: 0; - margin: 0 20px 0 0; - border-radius: 4px; - padding: 5.5px 14px; -} - input.score { width: 80px; } .user-search-form { display: inline; + + .user-search-input { + display: inline; + width: 30%; + float: right; + margin: 0; + } + + select.user-search-input { + padding-left: 0; + margin: 0 20px 0 0; + padding: 5.5px 14px; + width: 120px; + } } -.user-search-input { - display: inline; - width: 30%; - float: right; - margin: 0; + +td { + a { + color: inherit; + + img { + margin-left: 10px; + } + } + + a:first-child > img { + margin-left: 0; + } + + a:last-child > img { + margin-left: 0; + } } diff --git a/assets/src/sass/style.scss b/assets/src/sass/style.scss index e2dd53ba..5da4a289 100644 --- a/assets/src/sass/style.scss +++ b/assets/src/sass/style.scss @@ -1,5 +1,8 @@ /* * @Author: printempw +* @Date: 2016-06-04 20:55:09 +* @Last Modified by: printempw +* @Last Modified time: 2016-07-23 10:47:50 */ @font-face { @@ -26,6 +29,13 @@ input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px #fff inset !important; } +#page-select { + padding-left: 0; + margin: 0 20px 0 0; + border-radius: 4px; + padding: 5.5px 14px; +} + .item { display: block; background: #EFF1F0; @@ -75,29 +85,54 @@ input:-webkit-autofill { padding: 3px 8px; } -.item-footer > .more { +.item-footer { + .more { + float: right; + margin-left: 6px; + margin-right: 3px; + color: #fff; + } + + .more:hover { + color: #dadada; + } + + small { + font-size: 50%; + } +} + +.operations { + display: inline; float: right; + + i { + padding: .5em .5em; + display: inline !important; + } + + i:hover { + color: #555; + cursor: pointer; + } +} + +.skin2d { float: right; - margin-left: 6px; - margin-right: 3px; - color: #fff; + max-height: 64px; + width: 64px; + font-size: 16px; } -.item-footer > .more:hover { - color: #dadada; +#canvas3d { + margin: 0 auto; + display: block; } -.item-footer > small { - font-size: 50%; +#preview-2d > p { + height: 64px; + line-height: 64px; } -.operations { display: inline; float: right; } -.operations > i { padding: .5em .5em; display: inline !important; } -.operations > i:hover { color: #555; cursor: pointer; } -.skin2d { float: right; max-height: 64px; width: 64px; font-size: 16px; } - -#canvas3d { margin: 0 auto; display: block; } -#preview-2d > p { height: 64px; line-height: 64px; } - #toast-container > div { opacity: 1; -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); diff --git a/config/routes.php b/config/routes.php index 7401166e..0854b176 100644 --- a/config/routes.php +++ b/config/routes.php @@ -97,14 +97,15 @@ Route::group(['prefix' => 'skinlib'], function() Route::group(['middleware' => 'App\Middlewares\CheckAdminMiddleware', 'prefix' => 'admin'], function() { Route::get('/', 'AdminController@index'); - Route::post('/', 'AdminController@ajaxHandler'); - Route::all('/customize', 'AdminController@customize'); + Route::all('/customize', 'AdminController@customize'); + Route::all('/options', 'AdminController@options'); - Route::all('/options', 'AdminController@options'); - - Route::get('/users', 'AdminController@users'); - Route::get('/players', 'AdminController@players'); + Route::get('/users', 'AdminController@users'); + Route::get('/players', 'AdminController@players'); + // ajax handlers + Route::post('/users', 'AdminController@userAjaxHandler'); + Route::post('/players', 'AdminController@playerAjaxHandler'); }); /** diff --git a/resources/views/admin/master.tpl b/resources/views/admin/master.tpl index 96e68ae5..be0b6685 100644 --- a/resources/views/admin/master.tpl +++ b/resources/views/admin/master.tpl @@ -101,9 +101,6 @@ @endforeach -
  • 皮肤库
  • -
  • 材质管理
  • - @if ($user->is_admin)
  • 返回
  • 用户中心
  • diff --git a/resources/views/admin/players.tpl b/resources/views/admin/players.tpl new file mode 100644 index 00000000..906e9b93 --- /dev/null +++ b/resources/views/admin/players.tpl @@ -0,0 +1,166 @@ +@extends('admin.master') + +@section('title', '角色管理') + +@section('content') + + +
    + +
    +

    + @if (isset($_GET['q'])) + 搜索结果:{{ $_GET['q'] }} + @else + 角色管理 + @endif + Player Management +
    + + +
    + +

    +
    + + +
    +
    +
    + + + + + + + + + + + + + + + @forelse($players as $player) + + + + + + + + + + + @empty + + + + + + @endforelse + +
    PID拥有者 UID角色名优先模型预览材质修改时间操作
    {{ $player->pid }}{{ $player->uid }}{{ $player->player_name }} + + + @if ($player->tid_steve == '0') + + @else + + + + @endif + + @if ($player->tid_alex == '0') + + @else + + + + @endif + + @if ($player->tid_cape == '0') + + @else + + + + @endif + {{ $player->last_modified }} +
    + + +
    + + 删除角色 +
    0无结果(´・ω・`)
    +
    + +
    + +
    +
    + + + +@endsection diff --git a/resources/views/admin/users.tpl b/resources/views/admin/users.tpl index c02ede1e..db734292 100644 --- a/resources/views/admin/users.tpl +++ b/resources/views/admin/users.tpl @@ -9,15 +9,20 @@

    - @if (isset($_GET['filter'])) - 搜索结果:{{ $_GET['filter'] }} + @if (isset($_GET['q'])) + 搜索结果:{{ $_GET['q'] }} @else 用户管理 @endif User Management
    - + +
    +

    @@ -32,6 +37,7 @@ 邮箱 昵称 积分 + 状态 注册时间 操作 @@ -44,6 +50,7 @@ {{ $user->email }} {{ $user->nickname }} + {{ $user->permission == "-1" ? "封禁" : "正常" }} {{ $user->register_at }} @@ -55,46 +62,59 @@
  • 修改邮箱
  • 修改昵称
  • 更改密码
  • +
  • +
  • 查看该用户拥有的角色
  • +
  • + + @if ($user->permission == "1") +
  • 无法封禁管理员
  • + @elseif ($user->permission == "0") +
  • 封禁
  • + @else +
  • 解封
  • + @endif - permission == "1") - disabled="disabled" data-toggle="tooltip" data-placement="bottom" title="少年,不要作死哦" - @else - href="javascript:deleteUserAccount('{{ $user->uid }}');" - @endif> - 删除用户 - + + @if ($user->permission == "1") + 删除用户 + @else + 删除用户 + @endif @empty 0 无结果 + (´・ω・`) @endforelse