mirror of https://gitee.com/karson/fastadmin.git
Pre Merge pull request !145 from smtop/dev
commit
839f9af6bb
|
|
@ -13,6 +13,7 @@ class User extends Backend
|
||||||
{
|
{
|
||||||
|
|
||||||
protected $relationSearch = true;
|
protected $relationSearch = true;
|
||||||
|
protected $modelValidate = true;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -60,6 +61,15 @@ class User extends Backend
|
||||||
return $this->view->fetch();
|
return $this->view->fetch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加
|
||||||
|
*/
|
||||||
|
public function add()
|
||||||
|
{
|
||||||
|
$this->view->assign('groupList', build_select('row[group_id]', \app\admin\model\UserGroup::column('id,name'), 0, ['class' => 'form-control selectpicker']));
|
||||||
|
return parent::add();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 编辑
|
* 编辑
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,33 +1,36 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'Id' => 'ID',
|
'Id' => 'ID',
|
||||||
'Group_id' => '组别ID',
|
'Group_id' => '组别ID',
|
||||||
'Username' => '用户名',
|
'Username' => '用户名',
|
||||||
'Nickname' => '昵称',
|
'Nickname' => '昵称',
|
||||||
'Password' => '密码',
|
'Password' => '密码',
|
||||||
'Salt' => '密码盐',
|
'Salt' => '密码盐',
|
||||||
'Email' => '电子邮箱',
|
'Email' => '电子邮箱',
|
||||||
'Mobile' => '手机号',
|
'Mobile' => '手机号',
|
||||||
'Avatar' => '头像',
|
'Avatar' => '头像',
|
||||||
'Level' => '等级',
|
'Level' => '等级',
|
||||||
'Gender' => '性别',
|
'Gender' => '性别',
|
||||||
'Male' => '男',
|
'Male' => '男',
|
||||||
'FeMale' => '女',
|
'FeMale' => '女',
|
||||||
'Birthday' => '生日',
|
'Birthday' => '生日',
|
||||||
'Bio' => '格言',
|
'Bio' => '格言',
|
||||||
'Score' => '积分',
|
'Score' => '积分',
|
||||||
'Successions' => '连续登录天数',
|
'Successions' => '连续登录天数',
|
||||||
'Maxsuccessions' => '最大连续登录天数',
|
'Maxsuccessions' => '最大连续登录天数',
|
||||||
'Prevtime' => '上次登录时间',
|
'Prevtime' => '上次登录时间',
|
||||||
'Logintime' => '登录时间',
|
'Logintime' => '登录时间',
|
||||||
'Loginip' => '登录IP',
|
'Loginip' => '登录IP',
|
||||||
'Loginfailure' => '失败次数',
|
'Loginfailure' => '失败次数',
|
||||||
'Joinip' => '加入IP',
|
'Joinip' => '加入IP',
|
||||||
'Jointime' => '加入时间',
|
'Jointime' => '加入时间',
|
||||||
'Createtime' => '创建时间',
|
'Createtime' => '创建时间',
|
||||||
'Updatetime' => '更新时间',
|
'Updatetime' => '更新时间',
|
||||||
'Token' => 'Token',
|
'Token' => 'Token',
|
||||||
'Status' => '状态',
|
'Status' => '状态',
|
||||||
'Leave password blank if dont want to change' => '不修改密码请留空',
|
'Leave password blank if dont want to change' => '不修改密码请留空',
|
||||||
|
'Username can not be empty' => '用户名不能为空',
|
||||||
|
'Username must be 3 to 30 characters' => '用户名必须3-30个字符',
|
||||||
|
'Username already exist' => '用户名已经存在',
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,21 @@ class User extends Model
|
||||||
|
|
||||||
protected static function init()
|
protected static function init()
|
||||||
{
|
{
|
||||||
|
self::beforeInsert(function ($row) {
|
||||||
|
$changed = $row->getChangedData();
|
||||||
|
$salt = \fast\Random::alnum();
|
||||||
|
$row->password = \app\common\library\Auth::instance()->getEncryptPassword($changed['password'], $salt);
|
||||||
|
$row->salt = $salt;
|
||||||
|
$row->nickname = $row->nickname ? $row->nickname : $row->username;
|
||||||
|
$row->joinip = $row->loginip = '127.0.0.1';
|
||||||
|
$row->jointime = request()->time();
|
||||||
|
//如果生日为空
|
||||||
|
if (isset($row->birthday) && empty($row->birthday)) {
|
||||||
|
unset($row->birthday);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
self::beforeUpdate(function ($row) {
|
self::beforeUpdate(function ($row) {
|
||||||
$changed = $row->getChangedData();
|
$changed = $row->getChangedData();
|
||||||
//如果有修改密码
|
//如果有修改密码
|
||||||
|
|
@ -41,6 +56,10 @@ class User extends Model
|
||||||
unset($row->password);
|
unset($row->password);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//如果生日为空
|
||||||
|
if (isset($row->birthday) && empty($row->birthday)) {
|
||||||
|
unset($row->birthday);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,11 +10,15 @@ class User extends Validate
|
||||||
* 验证规则
|
* 验证规则
|
||||||
*/
|
*/
|
||||||
protected $rule = [
|
protected $rule = [
|
||||||
|
'username' => 'require|length:3,30|unique:user',
|
||||||
];
|
];
|
||||||
/**
|
/**
|
||||||
* 提示消息
|
* 提示消息
|
||||||
*/
|
*/
|
||||||
protected $message = [
|
protected $message = [
|
||||||
|
'username.require' => 'Username can not be empty',
|
||||||
|
'username.length' => 'Username must be 3 to 30 characters',
|
||||||
|
'username.unique' => 'Username already exist',
|
||||||
];
|
];
|
||||||
/**
|
/**
|
||||||
* 验证场景
|
* 验证场景
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,102 @@
|
||||||
|
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="c-group_id" class="control-label col-xs-12 col-sm-2">{:__('Group')}:</label>
|
||||||
|
<div class="col-xs-12 col-sm-4">
|
||||||
|
{$groupList}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="c-username" class="control-label col-xs-12 col-sm-2">{:__('Username')}:</label>
|
||||||
|
<div class="col-xs-12 col-sm-4">
|
||||||
|
<input id="c-username" data-rule="required" class="form-control" name="row[username]" type="text">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="c-nickname" class="control-label col-xs-12 col-sm-2">{:__('Nickname')}:</label>
|
||||||
|
<div class="col-xs-12 col-sm-4">
|
||||||
|
<input id="c-nickname" class="form-control" name="row[nickname]" type="text">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="c-password" class="control-label col-xs-12 col-sm-2">{:__('Password')}:</label>
|
||||||
|
<div class="col-xs-12 col-sm-4">
|
||||||
|
<input id="c-password" data-rule="required password" class="form-control" name="row[password]" type="text" autocomplete="new-password" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="c-email" class="control-label col-xs-12 col-sm-2">{:__('Email')}:</label>
|
||||||
|
<div class="col-xs-12 col-sm-4">
|
||||||
|
<input id="c-email" data-rule="" class="form-control" name="row[email]" type="text">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="c-mobile" class="control-label col-xs-12 col-sm-2">{:__('Mobile')}:</label>
|
||||||
|
<div class="col-xs-12 col-sm-4">
|
||||||
|
<input id="c-mobile" data-rule="" class="form-control" name="row[mobile]" type="text">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="c-avatar" class="control-label col-xs-12 col-sm-2">{:__('Avatar')}:</label>
|
||||||
|
<div class="col-xs-12 col-sm-8">
|
||||||
|
<div class="input-group">
|
||||||
|
<input id="c-avatar" data-rule="" class="form-control" size="50" name="row[avatar]" type="text">
|
||||||
|
<div class="input-group-addon no-border no-padding">
|
||||||
|
<span><button type="button" id="plupload-avatar" class="btn btn-danger plupload" data-input-id="c-avatar" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-avatar"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||||
|
<span><button type="button" id="fachoose-avatar" class="btn btn-primary fachoose" data-input-id="c-avatar" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||||
|
</div>
|
||||||
|
<span class="msg-box n-right" for="c-avatar"></span>
|
||||||
|
</div>
|
||||||
|
<ul class="row list-inline plupload-preview" id="p-avatar"></ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="c-level" class="control-label col-xs-12 col-sm-2">{:__('Level')}:</label>
|
||||||
|
<div class="col-xs-12 col-sm-4">
|
||||||
|
<input id="c-level" data-rule="required" class="form-control" name="row[level]" type="number" value="0">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="c-gender" class="control-label col-xs-12 col-sm-2">{:__('Gender')}:</label>
|
||||||
|
<div class="col-xs-12 col-sm-8">
|
||||||
|
{:build_radios('row[gender]', ['1'=>__('Male'), '0'=>__('Female')])}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="c-birthday" class="control-label col-xs-12 col-sm-2">{:__('Birthday')}:</label>
|
||||||
|
<div class="col-xs-12 col-sm-4">
|
||||||
|
<input id="c-birthday" data-rule="" class="form-control datetimepicker" data-date-format="YYYY-MM-DD" data-use-current="true" name="row[birthday]" type="text">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="c-bio" class="control-label col-xs-12 col-sm-2">{:__('Bio')}:</label>
|
||||||
|
<div class="col-xs-12 col-sm-8">
|
||||||
|
<input id="c-bio" data-rule="" class="form-control" name="row[bio]" type="text">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="c-money" class="control-label col-xs-12 col-sm-2">{:__('Money')}:</label>
|
||||||
|
<div class="col-xs-12 col-sm-4">
|
||||||
|
<input id="c-money" data-rule="required" class="form-control" name="row[money]" type="number" value="0.00">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="c-score" class="control-label col-xs-12 col-sm-2">{:__('Score')}:</label>
|
||||||
|
<div class="col-xs-12 col-sm-4">
|
||||||
|
<input id="c-score" data-rule="required" class="form-control" name="row[score]" type="number" value="0">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||||
|
<div class="col-xs-12 col-sm-8">
|
||||||
|
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')])}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group layer-footer">
|
||||||
|
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||||
|
<div class="col-xs-12 col-sm-8">
|
||||||
|
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||||
|
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||||
|
<input type="hidden" name="row[id]" value="{$row.id}">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="c-group_id" class="control-label col-xs-12 col-sm-2">{:__('Group')}:</label>
|
<label for="c-group_id" class="control-label col-xs-12 col-sm-2">{:__('Group')}:</label>
|
||||||
<div class="col-xs-12 col-sm-4">
|
<div class="col-xs-12 col-sm-4">
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
<div class="tab-pane fade active in" id="one">
|
<div class="tab-pane fade active in" id="one">
|
||||||
<div class="widget-body no-padding">
|
<div class="widget-body no-padding">
|
||||||
<div id="toolbar" class="toolbar">
|
<div id="toolbar" class="toolbar">
|
||||||
{:build_toolbar('refresh,edit,del')}
|
{:build_toolbar('refresh,add,edit,del')}
|
||||||
<div class="dropdown btn-group {:$auth->check('user/user/multi')?'':'hide'}">
|
<div class="dropdown btn-group {:$auth->check('user/user/multi')?'':'hide'}">
|
||||||
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
|
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
|
||||||
<ul class="dropdown-menu text-left" role="menu">
|
<ul class="dropdown-menu text-left" role="menu">
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue