pref: 增加服务类优化UI版面
This commit is contained in:
@@ -12,17 +12,8 @@
|
||||
|
||||
namespace app\index\controller;
|
||||
|
||||
use app\common\library\Email;
|
||||
use app\common\library\Sms;
|
||||
use app\common\model\system\User;
|
||||
use app\HomeController;
|
||||
use PHPMailer\PHPMailer\Exception;
|
||||
use Psr\SimpleCache\InvalidArgumentException;
|
||||
use support\Response;
|
||||
use think\db\exception\DataNotFoundException;
|
||||
use think\db\exception\DbException;
|
||||
use think\db\exception\ModelNotFoundException;
|
||||
use think\response\Json;
|
||||
|
||||
/**
|
||||
* Ajax控制器
|
||||
@@ -35,86 +26,6 @@ class Ajax extends HomeController
|
||||
*/
|
||||
public function index(): Response
|
||||
{
|
||||
return \response('Hello SWIFT!', 200);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送短信验证码
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws InvalidArgumentException
|
||||
* @throws ModelNotFoundException
|
||||
*/
|
||||
public function smsSend()
|
||||
{
|
||||
if (request()->isPost()) {
|
||||
|
||||
$mobile = input('mobile');
|
||||
$event = input('event', 'register');
|
||||
|
||||
if (!is_mobile($mobile)) {
|
||||
return $this->error('手机号码不正确');
|
||||
}
|
||||
|
||||
$sms = Sms::instance();
|
||||
$data = $sms->getLast($mobile);
|
||||
if ($data && (time() - strtotime($data['create_time'])) < 60) {
|
||||
return $this->error(__('发送频繁'));
|
||||
}
|
||||
|
||||
$user = User::getByMobile($mobile);
|
||||
if (in_array($event, ['register', 'changer']) && $user) {
|
||||
return $this->error('当前手机号已被占用');
|
||||
} else if ($event == 'forgot' && !$user) {
|
||||
return $this->error('当前手机号未注册');
|
||||
}
|
||||
|
||||
if ($sms->send($mobile, $event)) {
|
||||
return $this->success("验证码发送成功!");
|
||||
} else {
|
||||
return $this->error($sms->getError());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送邮件验证码
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws ModelNotFoundException
|
||||
* @throws Exception
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function emailSend()
|
||||
{
|
||||
if (request()->isPost()) {
|
||||
|
||||
$email = input('email');
|
||||
$event = input('event', 'register');
|
||||
|
||||
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||
return $this->error('邮件格式不正确');
|
||||
}
|
||||
|
||||
$Ems = Email::instance();
|
||||
$data = $Ems->getLast($email);
|
||||
|
||||
if ($data && (time() - strtotime($data['create_time'])) < 60) {
|
||||
return $this->error(__('发送频繁'));
|
||||
}
|
||||
|
||||
$user = User::getByEmail($email);
|
||||
if (in_array($event, ['register', 'changer']) && $user) {
|
||||
return $this->error('当前邮箱已被注册');
|
||||
} else if ($event == 'forgot' && !$user) {
|
||||
return $this->error('当前邮箱不存在');
|
||||
}
|
||||
|
||||
if ($Ems->captcha($email, $event)->send()) {
|
||||
return $this->success("验证码发送成功!");
|
||||
} else {
|
||||
return $this->error($Ems->getError());
|
||||
}
|
||||
}
|
||||
return \response('Hello swiftadmin!', 200);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,11 +12,8 @@ declare (strict_types=1);
|
||||
namespace app\index\controller;
|
||||
|
||||
use app\HomeController;
|
||||
use support\Response;
|
||||
use Psr\SimpleCache\InvalidArgumentException;
|
||||
use think\db\exception\DataNotFoundException;
|
||||
use think\db\exception\DbException;
|
||||
use think\db\exception\ModelNotFoundException;
|
||||
use support\Response;
|
||||
|
||||
class Index extends HomeController
|
||||
{
|
||||
@@ -24,19 +21,9 @@ class Index extends HomeController
|
||||
* 前端首页
|
||||
* @return Response
|
||||
* @throws InvalidArgumentException
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws ModelNotFoundException
|
||||
*/
|
||||
public function index(): Response
|
||||
{
|
||||
$data = [
|
||||
'欢迎使用swiftAdmin极速开发框架',
|
||||
__DIR__.'\Index.php 正在使用halt函数输出到浏览器',
|
||||
'请在app\index\controller\Index.php中删除halt函数',
|
||||
];
|
||||
|
||||
halt($data);
|
||||
return $this->view('index/index', ['name' => 'meystack']);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,11 +12,13 @@ declare (strict_types=1);
|
||||
|
||||
namespace app\index\controller;
|
||||
|
||||
use app\common\library\Auth;
|
||||
use app\common\library\ResultCode;
|
||||
use app\common\service\user\UserService;
|
||||
use app\common\service\user\UserTokenService;
|
||||
use app\HomeController;
|
||||
use app\common\model\system\User;
|
||||
use app\common\model\system\UserThird;
|
||||
use Psr\SimpleCache\InvalidArgumentException;
|
||||
use support\Response;
|
||||
use system\Random;
|
||||
use think\db\exception\DataNotFoundException;
|
||||
@@ -87,10 +89,11 @@ class Third extends HomeController
|
||||
|
||||
/**
|
||||
* 用户回调函数
|
||||
* @return mixed|void
|
||||
* @return Response
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws ModelNotFoundException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function callback()
|
||||
{
|
||||
@@ -100,9 +103,9 @@ class Third extends HomeController
|
||||
return $this->error($e->getMessage());
|
||||
}
|
||||
$user = $this->oauth->getUserInfo();
|
||||
if (!empty($user) && !$this->auth->isLogin()) {
|
||||
if (!empty($user) && !UserTokenService::isLogin()) {
|
||||
return $this->register($user, $this->type);
|
||||
} else if ($this->auth->isLogin()) { // 绑定用户
|
||||
} else if (UserTokenService::isLogin()) { // 绑定用户
|
||||
return $this->doBind($user, $this->type);
|
||||
}
|
||||
}
|
||||
@@ -123,31 +126,28 @@ class Third extends HomeController
|
||||
$userInfo = UserThird::alias('th')->view('user', '*', 'user.id=th.user_id')->where(['openid' => $openid, 'type' => $type])->find();
|
||||
|
||||
if (!empty($userInfo)) {
|
||||
$array['id'] = $userInfo['id'];
|
||||
$array['login_time'] = time();
|
||||
$array['login_ip'] = request()->getRealIp();
|
||||
$array['login_count'] = $userInfo['login_count'] + 1;
|
||||
|
||||
if (User::update($array)) {
|
||||
$response = $this->auth->responseToken($userInfo);
|
||||
$response->withBody(json_encode(ResultCode::LOGINSUCCESS))->redirect(request()->cookie('redirectUrl', '/'));
|
||||
if (User::update($array, ['id' => $userInfo['user_id']])) {
|
||||
UserService::createUserCookies($userInfo);
|
||||
return redirect(request()->cookie('redirectUrl', '/'));
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
// 注册本地用户
|
||||
$data['nickname'] = $nickname;
|
||||
$data['avatar'] = $info['userData']['avatar'];
|
||||
$post['nickname'] = $nickname;
|
||||
$post['avatar'] = $info['userData']['avatar'];
|
||||
if (User::getByNickname($nickname)) {
|
||||
$data['nickname'] .= Random::alpha(3);
|
||||
$post['nickname'] .= Random::alpha(3);
|
||||
}
|
||||
$data['group_id'] = 1;
|
||||
$data['create_ip'] = request()->getRealIp();
|
||||
$result = $this->auth->register($data);
|
||||
$post['group_id'] = 1;
|
||||
$post['create_ip'] = request()->getRealIp();
|
||||
$result = UserService::register($post);
|
||||
|
||||
// 封装第三方数据
|
||||
if (!empty($result)) {
|
||||
$userThird = [
|
||||
$third = [
|
||||
'type' => $this->type,
|
||||
'user_id' => $result['id'],
|
||||
'openid' => $openid,
|
||||
@@ -158,13 +158,10 @@ class Third extends HomeController
|
||||
'login_time' => time(),
|
||||
'expiretime' => time() + $info['expires_in'],
|
||||
];
|
||||
}
|
||||
|
||||
// 注册第三方数据
|
||||
if (isset($userThird) && is_array($userThird)) {
|
||||
if (UserThird::create($userThird)) {
|
||||
$response = $this->auth->responseToken($result);
|
||||
$response->withBody(json_encode(ResultCode::LOGINSUCCESS))->redirect(request()->cookie('redirectUrl', '/'));
|
||||
if (UserThird::create($third)) {
|
||||
UserService::createUserCookies($result);
|
||||
return redirect(request()->cookie('redirectUrl', '/'));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -175,17 +172,18 @@ class Third extends HomeController
|
||||
/**
|
||||
* 用户绑定操作
|
||||
* @return Response
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function bind(): Response
|
||||
{
|
||||
if (Auth::instance()->isLogin()) {
|
||||
if (UserTokenService::isLogin()) {
|
||||
$buildQuery = [
|
||||
'bind' => true,
|
||||
'type' => input('type'),
|
||||
'ref' => input('ref', request()->server('HTTP_REFERER', '/')),
|
||||
];
|
||||
|
||||
return $this->redirect("/third/login?" . http_build_query($buildQuery));
|
||||
return $this->redirect("/third/login?" . http_build_query($buildQuery));
|
||||
}
|
||||
|
||||
return $this->error('请先登录');
|
||||
@@ -193,7 +191,9 @@ class Third extends HomeController
|
||||
|
||||
/**
|
||||
* 用户解除绑定
|
||||
* @return Response
|
||||
* @throws DbException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function unbind(): Response
|
||||
{
|
||||
@@ -202,23 +202,22 @@ class Third extends HomeController
|
||||
} catch (\Exception $e) {
|
||||
return $this->error($e->getMessage());
|
||||
}
|
||||
if ($this->auth->isLogin()) {
|
||||
|
||||
$result = $this->auth->userInfo;
|
||||
if (!empty($result)) {
|
||||
$result = UserTokenService::isLogin();
|
||||
if (!empty($result)) {
|
||||
|
||||
if (empty($result['email']) || empty($result['pwd'])) {
|
||||
return $this->error('解除绑定需要设置邮箱和密码!');
|
||||
}
|
||||
if (empty($result['email']) || empty($result['pwd'])) {
|
||||
return $this->error('解除绑定需要设置邮箱和密码!');
|
||||
}
|
||||
|
||||
$where['type'] = $this->type;
|
||||
$where['user_id'] = request()->cookie('uid');
|
||||
if (UserThird::where($where)->delete()) {
|
||||
return $this->success('解除绑定成功!');
|
||||
}
|
||||
$where['type'] = $this->type;
|
||||
$where['user_id'] = request()->cookie('uid');
|
||||
if (UserThird::where($where)->delete()) {
|
||||
return $this->success('解除绑定成功!');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $this->error();
|
||||
}
|
||||
|
||||
@@ -233,10 +232,8 @@ class Third extends HomeController
|
||||
*/
|
||||
protected function doBind(array $info = [], string $type = null)
|
||||
{
|
||||
|
||||
$openid = $info['openid'] ?? $info['id'];
|
||||
$nickname = $info['userData']['name'] ?? $info['userData']['nickname'];
|
||||
|
||||
// 查询是否被注册
|
||||
$where['openid'] = $openid;
|
||||
$where['type'] = $this->type;
|
||||
@@ -277,7 +274,7 @@ class Third extends HomeController
|
||||
$referer = '/';
|
||||
}
|
||||
|
||||
request()->cookie('redirectUrl', null,1);
|
||||
request()->cookie('redirectUrl', null, 1);
|
||||
return $this->redirect($referer);
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,8 +2,9 @@
|
||||
|
||||
namespace app\index\middleware\system;
|
||||
|
||||
use app\common\library\Auth;
|
||||
use app\common\library\ResultCode;
|
||||
use app\common\service\user\UserTokenService;
|
||||
use Psr\SimpleCache\InvalidArgumentException;
|
||||
use support\View;
|
||||
use Webman\MiddlewareInterface;
|
||||
use Webman\Http\Response;
|
||||
@@ -32,22 +33,23 @@ class IndexPermissions implements MiddlewareInterface
|
||||
* 非鉴权方法
|
||||
* @var array
|
||||
*/
|
||||
public array $noNeedAuth = [];
|
||||
public array $noNeedLogin = [];
|
||||
|
||||
/**
|
||||
* 跳转URL地址
|
||||
* @var string
|
||||
*/
|
||||
public string $JumpUrl = '/index/user/index';
|
||||
public string $JumpUrl = '/index/';
|
||||
|
||||
/**
|
||||
* 校验权限
|
||||
* @param Request $request
|
||||
* @param \support\Request|Request $request
|
||||
* @param callable $handler
|
||||
* @return Response
|
||||
* @throws InvalidArgumentException
|
||||
* @throws \ReflectionException
|
||||
*/
|
||||
public function process(Request $request, callable $handler): Response
|
||||
public function process(\support\Request|Request $request, callable $handler): Response
|
||||
{
|
||||
$app = request()->getApp();
|
||||
$controller = request()->getController();
|
||||
@@ -56,23 +58,23 @@ class IndexPermissions implements MiddlewareInterface
|
||||
$refClass = new \ReflectionClass($request->controller);
|
||||
$property = $refClass->getDefaultProperties();
|
||||
$this->needLogin = $property['needLogin'] ?? false;
|
||||
$this->noNeedAuth = $property['noNeedAuth'] ?? $this->noNeedAuth;
|
||||
$this->noNeedLogin = $property['noNeedLogin'] ?? $this->noNeedLogin;
|
||||
$this->repeatLogin = $property['repeatLogin'] ?? $this->repeatLogin;
|
||||
$this->JumpUrl = $property['JumpUrl'] ?? $this->JumpUrl;
|
||||
|
||||
// 是否验证登录器
|
||||
$auth = Auth::instance();
|
||||
if ($auth->isLogin()) {
|
||||
|
||||
// 禁止重复登录
|
||||
$userInfo = UserTokenService::isLogin();
|
||||
if (!empty($userInfo)) {
|
||||
if (in_array($action, $this->repeatLogin)) {
|
||||
var_dump($this->JumpUrl);
|
||||
return redirect($this->JumpUrl);
|
||||
}
|
||||
|
||||
View::assign('user', $auth->userInfo);
|
||||
$request->userId = $userInfo['id'];
|
||||
$request->userInfo = $userInfo;
|
||||
View::assign('user', $userInfo);
|
||||
} else {
|
||||
|
||||
if ($this->needLogin && !in_array($action, $this->noNeedAuth)) {
|
||||
if ($this->needLogin && !in_array($action, $this->noNeedLogin)) {
|
||||
if (\request()->isAjax()) {
|
||||
return json(ResultCode::PLEASELOGININ);
|
||||
} else {
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<div class="layui-container">
|
||||
<div class="layui-row">
|
||||
<div class="layui-col-md6">
|
||||
<div class="layui-swift-box">
|
||||
<div class="layui-swift-box">
|
||||
<h1>SWIFTADMIN 极速开发框架</h1>
|
||||
<h1 style="font-size: 26px; font-weight: 300">基于高性能WM框架,性能在TP5 10倍以上</h1>
|
||||
<p>SwiftAdmin框架主张简单就是高效的原则,在设计和运维上采用最精简最高效的做法去完成业务系统的需求,并且基于ant Design的设计原则,是一款优秀的前后台极速开发解决方案。相信你第一眼就有立刻想体验SwiftAdmin框架的冲动和热情!</p>
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
<link rel="stylesheet" href="/static/js/layui/css/layui.css">
|
||||
<link rel="stylesheet" href="/static/css/style.css?v={:release()}">
|
||||
<script src="/static/js/layui/layui.js"></script>
|
||||
<script src="/static/js/common.js?v={:release()}"></script>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
|
||||
|
||||
@@ -14,8 +14,30 @@
|
||||
|
||||
<div class="layui-nav layui-hide-xs fr" id="login">
|
||||
<notempty name="$user.id"> <li class="layui-nav-item"><a class="" href="/index/user/index" >会员中心</a></li> <else/>
|
||||
<li class="layui-nav-item"><a href="javascript:;" lay-open data-title="用户注册" data-area="490px" data-url="/index/user/register" >注册</a></li>
|
||||
<li class="layui-nav-item"><a href="javascript:;" lay-open data-title="用户登录" data-area="450px,420px" data-url="/index/user/login" >登录</a></li>
|
||||
<li class="layui-nav-item"><a href="/index/user/register" target="_blank">注册</a></li>
|
||||
<li class="layui-nav-item"><a href="/index/user/login" target="_blank">登录</a></li>
|
||||
<li class="layui-nav-item"><a id="ajaxLogin" href="javascript:;" lay-open data-title="用户登录" data-area="450px,420px" data-url="/index/user/ajaxLogin" >Ajax登录</a></li>
|
||||
</notempty>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script >
|
||||
|
||||
layui.use([], function(e) {
|
||||
var $ = layui.jquery;
|
||||
var layer = layui.layer;
|
||||
//监听导航点击
|
||||
$('#ajaxLogin').on('click', function() {
|
||||
var url = $(this).attr('data-url');
|
||||
var title = $(this).attr('data-title');
|
||||
var area = $(this).attr('data-area');
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: title,
|
||||
area: ['450px','420px'],
|
||||
shadeClose: true, //点击遮罩关闭
|
||||
content: url
|
||||
});
|
||||
});
|
||||
})
|
||||
|
||||
</script>
|
||||
58
app/index/view/user/ajax_login.html
Normal file
58
app/index/view/user/ajax_login.html
Normal file
@@ -0,0 +1,58 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>{$site_name} 用户登录</title>
|
||||
<meta http-equiv="Cache-Control" content="no-transform" />
|
||||
<meta http-equiv="Cache-Control" content="no-siteapp" />
|
||||
<meta name="applicable-device" content="pc,mobile">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">
|
||||
<script src="/static/js/layui/layui.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/static/js/layui/css/font-awesome.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/static/js/layui/css/layui.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/static/css/login.css" />
|
||||
<script src="/static/js/center.js?v={:release()}"></script>
|
||||
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
|
||||
</head>
|
||||
<body>
|
||||
<div id="ajaxLogin" >
|
||||
<div class="other-link">
|
||||
<span class="other">第三方账号登录:</span>
|
||||
<span>
|
||||
<a href="{:url('/third/login',['type'=>'qq'])}&ref={$referer}" class="qq" target="_top"></a>
|
||||
<a href="{:url('/third/login',['type'=>'weixin'])}&ref={$referer}" class="wx" target="_top"></a>
|
||||
<a href="{:url('/third/login',['type'=>'weibo'])}&ref={$referer}" class="sina" target="_top"></a>
|
||||
</span>
|
||||
</div>
|
||||
<form class="layui-form" action="/index/user/login" method="post" style="height: auto">
|
||||
<input type="hidden" name="__token__" value="{:token()}"/>
|
||||
<div class="layui-form-item">
|
||||
<div class="item">
|
||||
<label class="left-icon layui-icon layui-icon-username"></label>
|
||||
<input type="text" id="nickname" name="nickname" lay-verify="required" placeholder="{:__('请输入账号或邮箱')}" class="layui-input" value="test@swiftadmin.net">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="item">
|
||||
<label class="left-icon layui-icon layui-icon-password"></label>
|
||||
<input type="password" id="pwd" name="pwd" lay-verify="required" placeholder="{:__('密码')}" class="layui-input" value="admin888">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item" style="margin-bottom: 20px;">
|
||||
<div class="fl">
|
||||
<input type="checkbox" name="remember" lay-skin="primary" title="{:__('记住密码')}" checked>
|
||||
</div>
|
||||
<a lay-open data-title="找回密码" data-area="500px,320px" data-object="top" data-url="/index/user/forgot"
|
||||
class="forgot-link fr" style="margin-top: 7px;">{:__('忘记密码?')}</a>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<input type="submit" value="{:__('立即登录')}" lay-submit="" lay-filter="submitIframe" data-reload="top"
|
||||
class="layui-btn layui-btn-login layui-btn-fluid layui-btn-normal">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -74,7 +74,7 @@
|
||||
<div class="contract-title">手机</div>
|
||||
<div class="contract-detail">+86 {$user.mobile|default='未绑定'}
|
||||
<i class="layui-icon fa-edit" title="编辑" lay-open data-title="修改手机"
|
||||
data-url="/index/user/mobile" data-area="500px,300px"></i>
|
||||
data-url="/index/user/changeMobile" data-area="500px,300px"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
<div class="contract-title">办公室邮箱</div>
|
||||
<div class="contract-detail">{$user.email|default='member@domain.com'}
|
||||
<i class="layui-icon fa-edit" title="编辑" lay-open data-title="修改邮箱"
|
||||
data-url="/index/user/email" data-area="500px,300px"></i>
|
||||
data-url="/index/user/changeEmail" data-area="500px,300px"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md3">
|
||||
@@ -242,7 +242,7 @@
|
||||
<li>
|
||||
<a title="{$vo.nickname}" href="#" target="_blank">
|
||||
<img class="media-object" src="{$vo.avatar}"></a>
|
||||
<a class="truncate" href="{$vo.url}" target="_blank">{$vo.nickname}</a>
|
||||
<a class="truncate" href="{$vo.url|default='#'}" target="_blank">{$vo.nickname}</a>
|
||||
</li>
|
||||
</volist>
|
||||
</ul>
|
||||
|
||||
@@ -1,79 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>修改密码</title>
|
||||
<include file="user:include"/>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="layui-card-body">
|
||||
<form action="/index/user/changePwd" class="layui-form layui-form-fixed">
|
||||
<input type="text" name="nickname" value="{$user.nickname}" hidden="">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">原密码</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="password" id="oldpwd" name="oldpwd" class="layui-input" >
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">新密码</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="password" id="pwd" name="pwd" class="layui-input" >
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">确认密码</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="password" id="repwd" name="repwd" class="layui-input" >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item" style="margin-top: 22px;text-align: center;">
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
<button type="submit" class="layui-btn layui-btn-normal" lay-submit="" lay-filter="submit">立即提交</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
layui.use(['jquery','form'],function(){
|
||||
|
||||
let $ = layui.jquery;
|
||||
let form = layui.form;
|
||||
//监听提交
|
||||
form.on('submit(submit)', function(data){
|
||||
|
||||
if($("#pwd").val().length < 6){
|
||||
layer.tips('请至少输入6个字符作为密码',"#pwd",{'tips':3});
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($("#pwd").val() !== $("#repwd").val()) {
|
||||
layer.tips('两次输入的密码不一样!',"#repwd",{'tips':3});
|
||||
return false;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url: $(this).attr('action'),
|
||||
type: 'POST',
|
||||
dataType: 'json',
|
||||
timeout: 6000,
|
||||
data: data.field,
|
||||
success: function(res){
|
||||
if (res.code === 200) {
|
||||
top.layer.msg(res.msg);
|
||||
}
|
||||
else {
|
||||
top.layer.msg(res.msg,'error');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
})
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,32 +0,0 @@
|
||||
<layout name="layout:layout"/>
|
||||
<!-- 内容主体区域 -->
|
||||
<div id="content">
|
||||
<div class="layui-fluid ">
|
||||
<form class="layui-form layui-form-fixed" action="/index/user/email">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('邮箱地址')}</label>
|
||||
<div class="layui-input-inline" style="width: 265px">
|
||||
<input name="email" placeholder="{:__('请输入邮箱地址')}" type="text" class="layui-input email"
|
||||
autocomplete="off" lay-verify="required|email"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('验证码')}</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="captcha" placeholder="{:__('请输入验证码')}" type="text" class="layui-input"
|
||||
autocomplete="off" lay-verify="required" maxlength="10"/>
|
||||
</div>
|
||||
<button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-ajax data-url="/index/user/email"
|
||||
data-object="email:email,event:event">{:__('获取')}
|
||||
</button>
|
||||
</div>
|
||||
<input type="text" hidden name="event" class="event" value="change">
|
||||
<div class="layui-footer layui-form-item layui-center">
|
||||
<button class="layui-btn layui-btn-primary" type="button" sa-event="closeDialog">{:__('取消')}</button>
|
||||
<button class="layui-btn layui-btn-normal" data-reload="parent" lay-filter="submitIframe" lay-submit>{:__('提交')}</button>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,86 +1,89 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>SwiftAdmin 用户登录</title>
|
||||
<include file="public:header"/>
|
||||
<title>{$site_name} 找回密码</title>
|
||||
<meta http-equiv="Cache-Control" content="no-transform" />
|
||||
<meta http-equiv="Cache-Control" content="no-siteapp" />
|
||||
<meta name="applicable-device" content="pc,mobile">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">
|
||||
<script src="/static/js/layui/layui.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/static/js/layui/css/font-awesome.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/static/js/layui/css/layui.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/static/css/login.css" />
|
||||
<script src="/static/js/center.js?v={:release()}"></script>
|
||||
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
|
||||
</head>
|
||||
<body>
|
||||
<style>
|
||||
.layui-form-checked[lay-skin="primary"] i {
|
||||
border-color: #1890ff !important;
|
||||
background-color: #1890ff;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.layui-form-item {
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.red {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.layui-input:hover {
|
||||
border: 1px solid #1890ff!important;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div class="layui-fluid">
|
||||
<form class="layui-form layui-form-fixed" action="/index/user/forgot" method="post" >
|
||||
<input type="hidden" name="__token__" value="{:token()}"/>
|
||||
<form class="layui-form layui-form-fixed" action="/index/user/forgot" method="post">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="red">*</span> {:__('手机/邮箱')}</label>
|
||||
<div class="layui-input-inline" style="width: 306px">
|
||||
<input id="string" name="mobile" placeholder="{:__('请输入邮箱或手机号')}" type="text" class="layui-input string"
|
||||
autocomplete="off" lay-verify="required"/>
|
||||
<input id="name" name="name" placeholder="{:__('请输入邮箱或手机号')}" type="text" class="layui-input"
|
||||
lay-verify="required"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="red">*</span> {:__('验证码')}</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="captcha" placeholder="{:__('请输入验证码')}" type="text" class="layui-input" autocomplete="off" lay-verify="required" maxlength="10"/>
|
||||
<div class="layui-input-inline" style="width: 226px">
|
||||
<input name="captcha" placeholder="{:__('请输入验证码')}" type="text" class="layui-input"
|
||||
autocomplete="off" lay-verify="required" maxlength="10"/>
|
||||
</div>
|
||||
<button id="send" class="layui-btn layui-btn-normal" type="button"
|
||||
lay-ajax data-url="/ajax/smsSend" data-object="mobile:string,event:event">{:__('获取')}
|
||||
<button id="uCode" class="layui-btn layui-btn-normal" type="button">{:__('获取')}
|
||||
</button>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="red">*</span> {:__('新密码')}</label>
|
||||
<div class="layui-input-inline" style="width: 306px">
|
||||
<input type="password" id="pwd" name="pwd" lay-verify="required" placeholder="{:__('密码')}" class="layui-input" >
|
||||
<input type="password" id="pwd" name="pwd" lay-verify="required" placeholder="{:__('密码')}"
|
||||
class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" hidden name="event" class="event" value="forgot">
|
||||
<div class="layui-footer layui-form-item layui-center">
|
||||
<button class="layui-btn layui-btn-primary" type="button" sa-event="closeDialog">{:__('取消')}</button>
|
||||
<button class="layui-btn layui-btn-normal" lay-filter="submitIframe" lay-submit>{:__('提交')}</button>
|
||||
<button class="layui-btn layui-btn-normal" lay-filter="submitIframe" lay-submit>{:__('提交')}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
<script>
|
||||
layui.use('jquery', function() {
|
||||
layui.use('jquery', function () {
|
||||
|
||||
let $ = layui.jquery;
|
||||
|
||||
$('#string').on('keyup',function (e) {
|
||||
|
||||
let val = $(this).val();
|
||||
let string = $('#string');
|
||||
let send = $('#send');
|
||||
let regx = /^[1][3,4,5,6.7,8,9][0-9]{9}$/
|
||||
if (regx.test(val)) {
|
||||
string.attr('name','mobile');
|
||||
send.attr('data-object','mobile:string,event:event');
|
||||
send.attr('data-url','/ajax/smsSend');
|
||||
} else {
|
||||
string.attr('name','email');
|
||||
send.attr('data-object','email:string,event:event');
|
||||
send.attr('data-url','/ajax/emailsend');
|
||||
$('#uCode').click(function (e) {
|
||||
let name = $('#name').val();
|
||||
if (name === '') {
|
||||
layer.msg('请输入邮箱或手机号', 'info');
|
||||
return false;
|
||||
}
|
||||
})
|
||||
let regUrl = '/api/ajax/smsSend';
|
||||
let data = { mobile: name };
|
||||
let regxEmail = /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/;
|
||||
if (regxEmail.test(name)) {
|
||||
regUrl = '/api/ajax/emailSend';
|
||||
data = { email: name };
|
||||
}
|
||||
data.event = 'forgot';
|
||||
$(this).attr('disabled', true);
|
||||
$.ajax({
|
||||
url: regUrl,
|
||||
type: 'post',
|
||||
data: data,
|
||||
dataType: 'json',
|
||||
success: function (res) {
|
||||
|
||||
if (res.code === 200) {
|
||||
layer.msg(res.msg, 'success');
|
||||
} else {
|
||||
layer.msg(res.msg, 'error');
|
||||
}
|
||||
}
|
||||
});
|
||||
setTimeout(function () {
|
||||
$('#uCode').attr('disabled', false);
|
||||
}, 10000);
|
||||
});
|
||||
})
|
||||
</script>
|
||||
</html>
|
||||
@@ -1,40 +0,0 @@
|
||||
<div class="layui-header">
|
||||
<div class="layui-logo layui-hide-xs layui-bg-black">
|
||||
<span class="logo-text">SAPHP <span style="font-size: medium ">用户后台</span></span>
|
||||
</div>
|
||||
<!-- 头部区域(可配合layui 已有的水平导航) -->
|
||||
<ul class="layui-nav layui-layout-left">
|
||||
<!-- 移动端显示 -->
|
||||
<li class="layui-nav-item layui-show-xs-inline-block" lay-header-event="menuLeft">
|
||||
<i class="layui-icon layui-icon-spread-left"></i>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="layui-nav layui-layout-right">
|
||||
|
||||
<li class="layui-nav-item" lay-unselect="">
|
||||
<a href="{$site_http}" lay-text="主页">
|
||||
<i class="layui-icon layui-icon-website"></i>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="layui-nav-item" lay-unselect="">
|
||||
<a href="javascript:;" sa-event="message" lay-text="消息中心" data-url="/admin.php/system.admin/message">
|
||||
<i class="layui-icon fa-bell-o"></i>
|
||||
<!-- 如果有新消息,则显示小圆点 -->
|
||||
<span class="layui-badge-dot"></span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="layui-nav-item layui-hide layui-show-md-inline-block">
|
||||
<a href="javascript:;"><img src="{$user.avatar}" alt="{$user.nickname}" class="layui-nav-img">{$user.nickname}</a>
|
||||
<dl class="layui-nav-child">
|
||||
<dd><a lay-open lay-title="修改密码" lay-url="/index/user/changepwd" lay-area="470px,330px" href="javascript:;">修改密码</a>
|
||||
</dd>
|
||||
<dd><a href="/index/user/logout" >退出</a></dd>
|
||||
</dl>
|
||||
</li>
|
||||
<li class="layui-nav-item" lay-header-event="menuRight" lay-unselect>
|
||||
<a href="javascript:;"><i class="layui-icon layui-icon-more-vertical"></i></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -9,7 +9,7 @@
|
||||
<link href="/static/js/layui/css/font-awesome.css?v={:config('app.version')}" rel="stylesheet" type="text/css" />
|
||||
<link rel="stylesheet" href="/static/css/center.css?v={:release()}">
|
||||
<script src="/static/js/layui/layui.js"></script>
|
||||
<script src="/static/js/common.js?v={:release()}"></script>
|
||||
<script src="/static/js/center.js?v={:release()}"></script>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>SwiftAdmin 用户登录</title>
|
||||
<include file="public:header"/>
|
||||
</head>
|
||||
<body>
|
||||
<style>
|
||||
.layui-form-checked[lay-skin="primary"] i {
|
||||
border-color: #1890ff !important;
|
||||
background-color: #1890ff;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.forget-link {
|
||||
margin-top: 7px;
|
||||
color: #1890ff;
|
||||
}
|
||||
</style>
|
||||
<div id="userLogin" class="layui-fluid">
|
||||
<div class="login-link">
|
||||
<span class="other">第三方账号登录:</span>
|
||||
<span>
|
||||
<a href="{:url('/third/login',['type'=>'qq'])}&ref={$referer}" class="qq" target="_top"></a>
|
||||
<a href="{:url('/third/login',['type'=>'weixin'])}&ref={$referer}" class="wx" target="_top"></a>
|
||||
<a href="{:url('/third/login',['type'=>'weibo'])}&ref={$referer}" class="sina" target="_top"></a>
|
||||
</span>
|
||||
</div>
|
||||
<form class="layui-form" action="/index/user/login" method="post" style="height: auto">
|
||||
<input type="hidden" name="__token__" value="{:token()}"/>
|
||||
<div class="layui-form-item">
|
||||
<div class="item">
|
||||
<label class="user-login-icon layui-icon layui-icon-username"></label>
|
||||
<input type="text" id="nickname" name="nickname" lay-verify="required|email"
|
||||
placeholder="{:__('请输入邮箱或手机号')}" class="layui-input" value="test@swiftadmin.net">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="item">
|
||||
<label class="user-login-icon layui-icon layui-icon-password"></label>
|
||||
<input type="password" id="pwd" name="pwd" lay-verify="required" placeholder="{:__('密码')}"
|
||||
class="layui-input" value="admin888">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item" style="margin-bottom: 20px;">
|
||||
<div class="fl">
|
||||
<input type="checkbox" name="remember" lay-skin="primary" title="{:__('记住密码')}" checked>
|
||||
</div>
|
||||
<a lay-open data-title="找回密码" data-area="510px,360px" data-object="top" data-url="/index/user/forgot" class="forget-link fr" style="margin-top: 7px;">{:__('忘记密码?')}</a>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<input type="submit" value="{:__('立即登录')}" lay-submit="" lay-filter="submitIframe" data-reload="top"
|
||||
class="layui-btn layui-btn-fluid layui-btn-normal">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -19,7 +19,7 @@
|
||||
*/
|
||||
var isTable = table.render({
|
||||
elem: "#lay-tableList"
|
||||
, url: "{:url('/user/login_log')}"
|
||||
, url: "{:url('/user/loginLog')}"
|
||||
, page: true
|
||||
, limit: 20
|
||||
, cols: [[
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
<button class="layui-btn layui-btn-normal layui-btn-sm layui-btn-post" data-status="all" >{:__('全部消息')}</button>
|
||||
<button class="layui-btn layui-btn-primary layui-btn-sm layui-btn-post" data-status="1">{:__('已读消息')}</button>
|
||||
<button class="layui-btn layui-btn-primary layui-btn-sm layui-btn-post" data-status="0">{:__('未读消息')}</button>
|
||||
<button class="layui-btn layui-btn-danger layui-btn-sm" lay-batch data-table="lay-tableList" data-url="/index/user/dermessage?type=del" >{:__('删除消息')}</button>
|
||||
<button class="layui-btn layui-btn-checked layui-btn-sm" lay-batch data-table="lay-tableList" data-url="/index/user/dermessage?type=read" >{:__('标记已读')}</button>
|
||||
<button class="layui-btn layui-btn-danger layui-btn-sm" lay-batch data-table="lay-tableList" data-url="/index/user/batchMessage?type=del" >{:__('删除消息')}</button>
|
||||
<button class="layui-btn layui-btn-checked layui-btn-sm" lay-batch data-table="lay-tableList" data-url="/index/user/batchMessage?type=read" >{:__('标记已读')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -45,14 +45,14 @@
|
||||
, page: true
|
||||
, limit: 20
|
||||
, cols: [[
|
||||
{type: 'checkbox', width: 45},
|
||||
{type: 'checkbox', width: 60},
|
||||
{
|
||||
field: 'title', align: 'left', templet: function (e) {
|
||||
let title = '<a class="layui-table-text';
|
||||
if (e.status === 0) {
|
||||
title += ' layui-table-text-red';
|
||||
}
|
||||
title += '" lay-open data-title="查看消息" data-url="/index/user/viewmessage?id=' + e.id + '" data-area="600px, 390px" >';
|
||||
title += '" lay-open data-title="查看消息" data-url="/index/user/viewMessage?id=' + e.id + '" data-area="600px, 390px" >';
|
||||
if (e.status === 0) {
|
||||
title += '<i class="layui-icon fa-envelope"></i> ';
|
||||
} else {
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
<layout name="layout:layout"/>
|
||||
<!-- 内容主体区域 -->
|
||||
<div id="content">
|
||||
<div class="layui-fluid">
|
||||
<form class="layui-form layui-form-fixed" action="/index/user/mobile">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('手机号')}</label>
|
||||
<div class="layui-input-inline" style="width: 265px">
|
||||
<input name="mobile" placeholder="{:__('请输入号码')}" type="text" class="layui-input mobile"
|
||||
autocomplete="off" lay-verify="required|phone"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('验证码')}</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="captcha" placeholder="{:__('请输入验证码')}" type="text" class="layui-input"
|
||||
autocomplete="off" lay-verify="required" maxlength="10"/>
|
||||
</div>
|
||||
<button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-ajax data-url="/index/user/mobile"
|
||||
data-object="mobile:mobile,event:event">{:__('获取')}
|
||||
</button>
|
||||
</div>
|
||||
<input type="text" hidden name="event" class="event" value="change">
|
||||
<div class="layui-footer layui-form-item layui-center">
|
||||
<button class="layui-btn layui-btn-primary" type="button" sa-event="closeDialog">{:__('取消')}</button>
|
||||
<button class="layui-btn layui-btn-normal" data-reload="parent" lay-filter="submitIframe" lay-submit>{:__('提交')}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,35 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>消息管理 | {$site_name}</title>
|
||||
<include file="user:include" />
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="layui-layout layui-layout-admin">
|
||||
<include file="user:header" />
|
||||
|
||||
<div class="layui-side layui-bg-black">
|
||||
<div class="layui-side-scroll">
|
||||
<!-- 左侧导航区域(可配合layui已有的垂直导航) -->
|
||||
<include file="user:userNav" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-body">
|
||||
<!-- 内容主体区域 -->
|
||||
<div id="content">
|
||||
<h1>消息 示例页面</h1>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<include file="user:footer"/>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -2,85 +2,125 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>SwiftAdmin 用户注册</title>
|
||||
<include file="public:header"/>
|
||||
<title>{$site_name} 用户注册</title>
|
||||
<meta http-equiv="Cache-Control" content="no-transform"/>
|
||||
<meta http-equiv="Cache-Control" content="no-siteapp"/>
|
||||
<meta name="applicable-device" content="pc,mobile">
|
||||
<meta name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">
|
||||
<script src="/static/js/layui/layui.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/static/js/layui/css/font-awesome.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="/static/js/layui/css/layui.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="/static/css/login.css"/>
|
||||
<script src="/static/js/center.js?v={:release()}"></script>
|
||||
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
|
||||
</head>
|
||||
<body>
|
||||
<style>
|
||||
<div id="content" class="userLogin layui-fluid">
|
||||
|
||||
.layui-form-item {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
<div class="form-header">
|
||||
<i class="layui-icon fa-user-plus"></i>
|
||||
<h6>用户注册</h6>
|
||||
</div>
|
||||
<div class="formLogin active">
|
||||
|
||||
.red {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.layui-input:hover {
|
||||
border: 1px solid #1890ff !important;
|
||||
}
|
||||
</style>
|
||||
<div id="register" class="layui-fluid">
|
||||
<form class="layui-form layui-form-fixed" action="/index/user/register" method="post">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="red">*</span> 用户帐号</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="nickname" placeholder="请输入帐号" class="layui-input">
|
||||
<form class="layui-form mobileLogin" action="/index/user/register" method="post">
|
||||
<div class="layui-form-item item-input">
|
||||
<input type="text" id="nickname" name="nickname" lay-verify="required" data-title="账号"
|
||||
placeholder="{:__('请输入登录账号')}" class="inputStyle" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="red">*</span> 密码</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="password" id="pwd" name="pwd" placeholder="请输入密码" class="layui-input">
|
||||
<div class="layui-form-item item-input">
|
||||
<input type="password" id="pwd" name="pwd" lay-verify="required" data-title="密码" maxlength="32"
|
||||
placeholder="{:__('请输入密码')}" class="inputStyle" value="">
|
||||
<span class="fr-icon visiblePwd"><i class="layui-icon fa-eye-slash"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="red">*</span> 确认密码</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="password" id="repwd" name="repwd" placeholder="请输入确认密码" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<eq name="style" value="mobile">
|
||||
<div class="layui-form-item item-input">
|
||||
<input type="password" id="pwd2" lay-verify="required" data-title="密码" maxlength="32"
|
||||
placeholder="{:__('请输入确认密码')}" class="inputStyle" value="">
|
||||
<span class="fr-icon visiblePwd"><i class="layui-icon fa-eye-slash"></i></span>
|
||||
</div>
|
||||
<eq name="style" value="mobile">
|
||||
<div class="layui-form-item item-input">
|
||||
<input type="text" id="mobile" name="mobile" lay-verify="required" data-title="手机号"
|
||||
placeholder="{:__('请输入手机号码')}" class="inputStyle mobile" value="">
|
||||
</div>
|
||||
<div class="layui-form-item item-input">
|
||||
<input type="text" id="captcha" name="captcha" lay-verify="required" data-title="验证码"
|
||||
maxlength="6"
|
||||
placeholder="{:__('短信验证码')}" class="inputStyle" value="">
|
||||
<input type="text" hidden name="event" class="event" value="login">
|
||||
<span class="fr-icon getCaptcha" lay-ajax data-url="/api/ajax/smsSend"
|
||||
data-object="mobile:mobile,event:event">获取验证码</span>
|
||||
</div>
|
||||
<else/>
|
||||
<div class="layui-form-item item-input">
|
||||
<input type="text" name="email" lay-verify="require|email" placeholder="请输入邮箱" class="inputStyle">
|
||||
</div>
|
||||
</eq>
|
||||
|
||||
<input type="hidden" id="token" name="__token__" value="{:token()}"/>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="red">*</span> 手机号</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="mobile" name="mobile" placeholder="请输入手机号" lay-verify="require|phone"
|
||||
class="layui-input mobile">
|
||||
<div class="fl">
|
||||
<input type="checkbox" name="remember" lay-skin="primary" title="{:__('记住密码')}" checked>
|
||||
</div>
|
||||
<div class="fr">
|
||||
<a href="/index/user/login" class="forgot-link" style="margin-top: 7px;">{:__('返回登录')}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="red">*</span> 验证码</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="captcha" placeholder="{:__('验证码')}" class="layui-input captcha">
|
||||
<div class="captcha fr">
|
||||
<button id="captcha" type="button" class="layui-btn layui-btn-normal"
|
||||
lay-ajax data-url="/ajax/smsSend" data-object="mobile:mobile,event:event"
|
||||
>获取验证码
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<button class="layui-btn layui-btn-login layui-btn-fluid layui-btn-normal"
|
||||
lay-filter="submitIframe" data-reload="top" lay-submit>{:__('立即注册')}</button>
|
||||
</div>
|
||||
<else/>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="red">*</span> 邮箱地址</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="email" lay-verify="require|email" placeholder="请输入邮箱" class="layui-input">
|
||||
</div>
|
||||
<div class="agreement">
|
||||
<span>未注册手机验证后自动登录,注册即代表同意<a href="#">《用户协议》</a>以及网站<a href="#">《隐私保护指引》</a></span>
|
||||
</div>
|
||||
</eq>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<input type="text" hidden name="event" class="event" value="register">
|
||||
<div class="layui-footer layui-form-item layui-center">
|
||||
<button class="layui-btn layui-btn-primary" type="button" sa-event="closeDialog">{:__('取消')}</button>
|
||||
<button class="layui-btn layui-btn-normal" lay-filter="submitIframe" data-reload="top" lay-submit>
|
||||
{:__('立即注册')}
|
||||
</button>
|
||||
<div class="loginLine"></div>
|
||||
<div class="appUserDown">
|
||||
<div class="fr">
|
||||
<a class="link" href="#" target="_top">
|
||||
<span>
|
||||
<i class="layui-icon fa-apple"></i>
|
||||
<i class="layui-icon fa-android"></i>
|
||||
<i class="layui-icon fa-windows"></i>
|
||||
<span class="tit">下载 APP</span>
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
<script>
|
||||
layui.use(['jquery'], function (e) {
|
||||
let $ = layui.jquery;
|
||||
let layer = layui.layer;
|
||||
$('#pwd, #pwd2').blur(function(e) {
|
||||
let v1 = $('#pwd').val();
|
||||
let v2 = $('#pwd2').val();
|
||||
let v3 = v1 && v2 && (v1 !== v2);
|
||||
v3 && layer.msg('密码不相同');
|
||||
$('.layui-btn-login').attr('disabled', v3);
|
||||
})
|
||||
|
||||
/* 显示隐藏密码 */
|
||||
$('.visiblePwd').click(function() {
|
||||
// 获取我同级上面得input元素
|
||||
let elem = $(this).prev('input');
|
||||
let type = $(elem).attr('type');
|
||||
if (type === 'password') {
|
||||
$(elem).attr('type','text');
|
||||
$(this).find('i.layui-icon').addClass('fa-eye').removeClass('fa-eye-slash');
|
||||
} else {
|
||||
$(elem).attr('type','password');
|
||||
$(this).find('i.layui-icon').addClass('fa-eye-slash').removeClass('fa-eye');
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
</html>
|
||||
@@ -60,7 +60,7 @@
|
||||
<span class="setting-intro">安全性高的密码可以使账户更安全;互联网账号存在被盗风险,建议您定期更换密码</span>
|
||||
</div>
|
||||
<div class="setting-operate fr">
|
||||
<a lay-open="" data-title="修改密码" data-url="/index/user/changepwd" data-area="470px,330px" href="javascript:;">修改</a>
|
||||
<a lay-open="" data-title="修改密码" data-url="/index/user/changePwd" data-area="470px,330px" href="javascript:;">修改</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
</div>
|
||||
|
||||
<div class="setting-operate fr">
|
||||
<a lay-open data-title="修改手机" data-url="/index/user/mobile" data-area="500px,300px">修改</a>
|
||||
<a lay-open data-title="修改手机" data-url="/index/user/changeMobile" data-area="500px,300px">修改</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
</div>
|
||||
|
||||
<div class="setting-operate fr">
|
||||
<a lay-open data-title="修改邮箱" data-url="/index/user/email" data-area="500px,300px">修改</a>
|
||||
<a lay-open data-title="修改邮箱" data-url="/index/user/changeEmail" data-area="500px,300px">修改</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<dl class="layui-nav-child">
|
||||
<dd><a lay-href="/index/user/profile">我的资料</a></dd>
|
||||
<dd><a lay-href="/index/user/message">站内消息</a></dd>
|
||||
<dd><a lay-href="/index/user/login_log">登录日志</a></dd>
|
||||
<dd><a lay-href="/index/user/loginLog">登录日志</a></dd>
|
||||
<dd><a lay-href="/index/user/certification">实名认证</a></dd>
|
||||
<dd><a lay-href="/index/user/security">安全中心</a></dd>
|
||||
</dl>
|
||||
|
||||
Reference in New Issue
Block a user