fix:更新已知bug,优化代码
This commit is contained in:
@@ -16,10 +16,13 @@ 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控制器
|
||||
@@ -36,10 +39,10 @@ class Ajax extends HomeController
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送短信
|
||||
* @return mixed|void
|
||||
* 发送短信验证码
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws InvalidArgumentException
|
||||
* @throws ModelNotFoundException
|
||||
*/
|
||||
public function smsSend()
|
||||
@@ -59,10 +62,10 @@ class Ajax extends HomeController
|
||||
return $this->error(__('发送频繁'));
|
||||
}
|
||||
|
||||
$userinfo = User::getByMobile($mobile);
|
||||
if (in_array($event, ['register', 'changer']) && $userinfo) {
|
||||
$userData = User::getByMobile($mobile);
|
||||
if (in_array($event, ['register', 'changer']) && $userData) {
|
||||
return $this->error('当前手机号已被占用');
|
||||
} else if ($event == 'forgot' && !$userinfo) {
|
||||
} else if ($event == 'forgot' && !$userData) {
|
||||
return $this->error('当前手机号未注册');
|
||||
}
|
||||
|
||||
@@ -75,11 +78,12 @@ class Ajax extends HomeController
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送邮件
|
||||
* @return mixed|void
|
||||
* 发送邮件验证码
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws ModelNotFoundException
|
||||
* @throws Exception
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function emailSend()
|
||||
{
|
||||
@@ -99,10 +103,10 @@ class Ajax extends HomeController
|
||||
return $this->error(__('发送频繁'));
|
||||
}
|
||||
|
||||
$userinfo = User::getByEmail($email);
|
||||
if (in_array($event, ['register', 'changer']) && $userinfo) {
|
||||
$userData = User::getByEmail($email);
|
||||
if (in_array($event, ['register', 'changer']) && $userData) {
|
||||
return $this->error('当前邮箱已被注册');
|
||||
} else if ($event == 'forgot' && !$userinfo) {
|
||||
} else if ($event == 'forgot' && !$userData) {
|
||||
return $this->error('当前邮箱不存在');
|
||||
}
|
||||
|
||||
|
||||
@@ -12,8 +12,11 @@ declare (strict_types=1);
|
||||
namespace app\index\controller;
|
||||
|
||||
use app\HomeController;
|
||||
use Psr\SimpleCache\InvalidArgumentException;
|
||||
use support\Response;
|
||||
use Psr\SimpleCache\InvalidArgumentException;
|
||||
use think\db\exception\DataNotFoundException;
|
||||
use think\db\exception\DbException;
|
||||
use think\db\exception\ModelNotFoundException;
|
||||
|
||||
class Index extends HomeController
|
||||
{
|
||||
@@ -21,8 +24,11 @@ class Index extends HomeController
|
||||
* 前端首页
|
||||
* @return Response
|
||||
* @throws InvalidArgumentException
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws ModelNotFoundException
|
||||
*/
|
||||
public function index(): \support\Response
|
||||
public function index(): Response
|
||||
{
|
||||
return $this->view('index/index', ['name' => 'meystack']);
|
||||
}
|
||||
|
||||
@@ -19,6 +19,9 @@ use app\common\model\system\User;
|
||||
use app\common\model\system\UserThird;
|
||||
use support\Response;
|
||||
use system\Random;
|
||||
use think\db\exception\DataNotFoundException;
|
||||
use think\db\exception\DbException;
|
||||
use think\db\exception\ModelNotFoundException;
|
||||
|
||||
/**
|
||||
* 社会化登录
|
||||
@@ -28,20 +31,20 @@ class Third extends HomeController
|
||||
{
|
||||
/**
|
||||
* 类型
|
||||
* @var string
|
||||
* @var mixed
|
||||
*/
|
||||
public $type = null;
|
||||
public mixed $type;
|
||||
|
||||
/**
|
||||
* 类型实例
|
||||
* @var Object
|
||||
* @var mixed
|
||||
*/
|
||||
public $oauth = null;
|
||||
public mixed $oauth;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
public $repeatLogin = [];
|
||||
public array $repeatLogin = [];
|
||||
|
||||
/**
|
||||
* 初始化构造函数
|
||||
@@ -70,7 +73,7 @@ class Third extends HomeController
|
||||
/**
|
||||
* 用户登录操作
|
||||
*/
|
||||
public function login(): \support\Response
|
||||
public function login(): Response
|
||||
{
|
||||
try {
|
||||
$this->oauth = $this->oType();
|
||||
@@ -85,9 +88,9 @@ class Third extends HomeController
|
||||
/**
|
||||
* 用户回调函数
|
||||
* @return mixed|void
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws ModelNotFoundException
|
||||
*/
|
||||
public function callback()
|
||||
{
|
||||
@@ -96,40 +99,40 @@ class Third extends HomeController
|
||||
} catch (\Exception $e) {
|
||||
return $this->error($e->getMessage());
|
||||
}
|
||||
$userInfos = $this->oauth->getUserInfo();
|
||||
if (!empty($userInfos) && !$this->auth->isLogin()) {
|
||||
return $this->register($userInfos, $this->type);
|
||||
$userData = $this->oauth->getUserInfo();
|
||||
if (!empty($userData) && !$this->auth->isLogin()) {
|
||||
return $this->register($userData, $this->type);
|
||||
} else if ($this->auth->isLogin()) { // 绑定用户
|
||||
return $this->doBind($userInfos, $this->type);
|
||||
return $this->doBind($userData, $this->type);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户注册操作
|
||||
* @param array $userInfos
|
||||
* @param array $userDatas
|
||||
* @param string|null $type
|
||||
* @return mixed
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @return Response
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws ModelNotFoundException
|
||||
*/
|
||||
protected function register(array $userInfos = [], string $type = null)
|
||||
protected function register(array $userDatas = [], string $type = null)
|
||||
{
|
||||
$openid = $userInfos['openid'] ?? $userInfos['id'];
|
||||
$nickname = $userInfos['userinfo']['name'] ?? $userInfos['userinfo']['nickname'];
|
||||
$userInfo = UserThird::alias('th')
|
||||
$openid = $userDatas['openid'] ?? $userDatas['id'];
|
||||
$nickname = $userDatas['userData']['name'] ?? $userDatas['userData']['nickname'];
|
||||
$userData = UserThird::alias('th')
|
||||
->view('user', '*', 'user.id=th.user_id')
|
||||
->where(['openid' => $openid, 'type' => $type])
|
||||
->find();
|
||||
|
||||
if (!empty($userInfo)) {
|
||||
$array['id'] = $userInfo['id'];
|
||||
if (!empty($userData)) {
|
||||
$array['id'] = $userData['id'];
|
||||
$array['login_time'] = time();
|
||||
$array['login_ip'] = request()->getRealIp();
|
||||
$array['login_count'] = $userInfo['login_count'] + 1;
|
||||
$array['login_count'] = $userData['login_count'] + 1;
|
||||
|
||||
if (User::update($array)) {
|
||||
$response = $this->auth->responseToken($userInfo);
|
||||
$response = $this->auth->responseToken($userData);
|
||||
$response->withBody(json_encode(ResultCode::LOGINSUCCESS))->redirect(request()->cookie('redirectUrl', '/'));
|
||||
}
|
||||
|
||||
@@ -137,7 +140,7 @@ class Third extends HomeController
|
||||
|
||||
// 注册本地用户
|
||||
$data['nickname'] = $nickname;
|
||||
$data['avatar'] = $userInfos['userinfo']['avatar'];
|
||||
$data['avatar'] = $userDatas['userData']['avatar'];
|
||||
if (User::getByNickname($nickname)) {
|
||||
$data['nickname'] .= Random::alpha(3);
|
||||
}
|
||||
@@ -152,11 +155,11 @@ class Third extends HomeController
|
||||
'user_id' => $result['id'],
|
||||
'openid' => $openid,
|
||||
'nickname' => $nickname,
|
||||
'access_token' => $userInfos['access_token'],
|
||||
'refresh_token' => $userInfos['refresh_token'],
|
||||
'expires_in' => $userInfos['expires_in'],
|
||||
'access_token' => $userDatas['access_token'],
|
||||
'refresh_token' => $userDatas['refresh_token'],
|
||||
'expires_in' => $userDatas['expires_in'],
|
||||
'login_time' => time(),
|
||||
'expiretime' => time() + $userInfos['expires_in'],
|
||||
'expiretime' => time() + $userDatas['expires_in'],
|
||||
];
|
||||
}
|
||||
|
||||
@@ -176,7 +179,7 @@ class Third extends HomeController
|
||||
* 用户绑定操作
|
||||
* @return Response
|
||||
*/
|
||||
public function bind(): \support\Response
|
||||
public function bind(): Response
|
||||
{
|
||||
if (Auth::instance()->isLogin()) {
|
||||
$buildQuery = [
|
||||
@@ -193,10 +196,9 @@ class Third extends HomeController
|
||||
|
||||
/**
|
||||
* 用户解除绑定
|
||||
* @return mixed|void
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws DbException
|
||||
*/
|
||||
public function unbind(): \support\Response
|
||||
public function unbind(): Response
|
||||
{
|
||||
try {
|
||||
$this->oauth = $this->oType();
|
||||
@@ -205,7 +207,7 @@ class Third extends HomeController
|
||||
}
|
||||
if ($this->auth->isLogin()) {
|
||||
|
||||
$result = $this->auth->userInfo;
|
||||
$result = $this->auth->userData;
|
||||
if (!empty($result)) {
|
||||
|
||||
if (empty($result['email']) || empty($result['pwd'])) {
|
||||
@@ -225,18 +227,18 @@ class Third extends HomeController
|
||||
|
||||
/**
|
||||
* 用户绑定操作实例
|
||||
* @param array $userInfos
|
||||
* @param array $userDatas
|
||||
* @param string|null $type
|
||||
* @return \support\Response|null
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @return Response|null
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws ModelNotFoundException
|
||||
*/
|
||||
protected function doBind(array $userInfos = [], string $type = null)
|
||||
protected function doBind(array $userDatas = [], string $type = null)
|
||||
{
|
||||
|
||||
$openid = $userInfos['openid'] ?? $userInfos['id'];
|
||||
$nickname = $userInfos['userinfo']['name'] ?? $userInfos['userinfo']['nickname'];
|
||||
$openid = $userDatas['openid'] ?? $userDatas['id'];
|
||||
$nickname = $userDatas['userData']['name'] ?? $userDatas['userData']['nickname'];
|
||||
|
||||
// 查询是否被注册
|
||||
$where['openid'] = $openid;
|
||||
@@ -249,11 +251,11 @@ class Third extends HomeController
|
||||
'user_id' => request()->cookie('uid'),
|
||||
'openid' => $openid,
|
||||
'nickname' => $nickname,
|
||||
'access_token' => $userInfos['access_token'],
|
||||
'refresh_token' => $userInfos['refresh_token'],
|
||||
'expires_in' => $userInfos['expires_in'],
|
||||
'access_token' => $userDatas['access_token'],
|
||||
'refresh_token' => $userDatas['refresh_token'],
|
||||
'expires_in' => $userDatas['expires_in'],
|
||||
'login_time' => time(),
|
||||
'expiretime' => time() + $userInfos['expires_in'],
|
||||
'expiretime' => time() + $userDatas['expires_in'],
|
||||
];
|
||||
|
||||
if (UserThird::create($third)) {
|
||||
@@ -268,9 +270,9 @@ class Third extends HomeController
|
||||
|
||||
/**
|
||||
* 跳转URL
|
||||
* @return void
|
||||
* @return Response
|
||||
*/
|
||||
protected function redirectUrl(): \support\Response
|
||||
protected function redirectUrl(): Response
|
||||
{
|
||||
$referer = request()->cookie('redirectUrl', '/');
|
||||
|
||||
|
||||
@@ -13,29 +13,40 @@ declare(strict_types=1);
|
||||
namespace app\index\controller;
|
||||
|
||||
use app\common\library\ResultCode;
|
||||
use app\common\model\system\UserLog;
|
||||
use app\common\model\system\UserNotice;
|
||||
use app\HomeController;
|
||||
use app\common\library\Sms;
|
||||
use app\common\library\Email;
|
||||
use app\common\library\Upload;
|
||||
use app\common\model\system\User as UserModel;
|
||||
use PHPMailer\PHPMailer\Exception;
|
||||
use Psr\SimpleCache\InvalidArgumentException;
|
||||
use support\Request;
|
||||
use support\Response;
|
||||
use system\Http;
|
||||
use system\Random;
|
||||
use think\db\exception\DataNotFoundException;
|
||||
use think\db\exception\DbException;
|
||||
use think\db\exception\ModelNotFoundException;
|
||||
use Webman\Event\Event;
|
||||
|
||||
class User extends HomeController
|
||||
{
|
||||
/**
|
||||
* 鉴权控制器
|
||||
*/
|
||||
public $needLogin = true;
|
||||
public bool $needLogin = true;
|
||||
|
||||
/**
|
||||
* 超时时间
|
||||
*/
|
||||
public int $expire = 604800;
|
||||
|
||||
/**
|
||||
* 非登录鉴权方法
|
||||
*/
|
||||
public $noNeedAuth = ['login', 'register', 'forgot', 'check'];
|
||||
public array $noNeedAuth = ['login', 'register', 'forgot', 'check'];
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
@@ -43,35 +54,29 @@ class User extends HomeController
|
||||
$this->model = new UserModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* 退出登录
|
||||
* @return Response
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function logout(): \support\Response
|
||||
{
|
||||
$this->auth->logout();
|
||||
return $this->success('退出成功', url('index/index'));
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户中心
|
||||
* @return mixed
|
||||
* @throws DbException
|
||||
*/
|
||||
public function index(): \support\Response
|
||||
public function index(): Response
|
||||
{
|
||||
return view('/user/index');
|
||||
// 未读短消息
|
||||
$unread = UserNotice::where('user_id', \request()->user_id)->where('status', 0)->count();
|
||||
return view('/user/index', [
|
||||
'unread' => $unread,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户注册
|
||||
* @return \support\Response
|
||||
* @throws \Psr\SimpleCache\InvalidArgumentException
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @return Response
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws ModelNotFoundException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function register(): \support\Response
|
||||
public function register(): Response
|
||||
{
|
||||
if (request()->isPost()) {
|
||||
|
||||
@@ -107,9 +112,9 @@ class User extends HomeController
|
||||
|
||||
/**
|
||||
* 用户登录
|
||||
* @return \support\Response
|
||||
* @return Response
|
||||
*/
|
||||
public function login(): \support\Response
|
||||
public function login(): Response
|
||||
{
|
||||
|
||||
if (request()->isPost()) {
|
||||
@@ -132,12 +137,14 @@ class User extends HomeController
|
||||
|
||||
/**
|
||||
* 找回密码
|
||||
* @return \support\Response
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @return Response
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws InvalidArgumentException
|
||||
* @throws ModelNotFoundException
|
||||
* @throws Exception
|
||||
*/
|
||||
public function forgot(): \support\Response
|
||||
public function forgot(): Response
|
||||
{
|
||||
if (request()->isPost()) {
|
||||
|
||||
@@ -158,15 +165,15 @@ class User extends HomeController
|
||||
}
|
||||
|
||||
$where = $email ? ['email' => $email] : ['mobile' => $mobile];
|
||||
$userInfo = $this->model->where($where)->find();
|
||||
if (!$userInfo) {
|
||||
$userData = $this->model->where($where)->find();
|
||||
if (!$userData) {
|
||||
return $this->error('用户不存在');
|
||||
}
|
||||
|
||||
try {
|
||||
$salt = Random::alpha();
|
||||
$pwd = encryptPwd($pwd, $salt);
|
||||
$this->model->update(['id' => $userInfo['id'], 'pwd' => $pwd, 'salt' => $salt]);
|
||||
$this->model->update(['id' => $userData['id'], 'pwd' => $pwd, 'salt' => $salt]);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
return $this->error('修改密码失败,请联系管理员');
|
||||
@@ -186,7 +193,7 @@ class User extends HomeController
|
||||
* @throws DbException
|
||||
* @throws ModelNotFoundException
|
||||
*/
|
||||
public function profile(Request $request): \support\Response
|
||||
public function center(Request $request): Response
|
||||
{
|
||||
if (request()->isPost()) {
|
||||
|
||||
@@ -200,13 +207,245 @@ class User extends HomeController
|
||||
return $this->error('当前昵称已被占用,请更换!');
|
||||
}
|
||||
|
||||
if ($this->model->update(['id' => $request->userId, 'nickname' => $nickname])) {
|
||||
if ($this->model->update(['id' => $request->user_id, 'nickname' => $nickname])) {
|
||||
return $this->success('修改昵称成功!', (string)url('/user/index'));
|
||||
}
|
||||
|
||||
return $this->error();
|
||||
}
|
||||
return view('/user/profile');
|
||||
|
||||
/**
|
||||
* 初始化请求新闻
|
||||
*/
|
||||
$files = public_path('upload/upgrade') . DIRECTORY_SEPARATOR . 'news.html';
|
||||
if (!is_file($files)) {
|
||||
$result = Http::get(config('app.api_url') . '/news/index');
|
||||
write_file($files, $result);
|
||||
} else {
|
||||
$result = read_file($files);
|
||||
if (filemtime($files) + $this->expire <= time()) {
|
||||
@unlink($files);
|
||||
}
|
||||
}
|
||||
|
||||
return view('/user/center', [
|
||||
'newsHtml' => $result ?? '服务器错误',
|
||||
'userList' => $this->model->order('login_count', 'desc')->limit(12)->select()->toArray(),
|
||||
'invite_count' => $this->model->where('invite_id', $request->user_id)->count(),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 消息列表
|
||||
* @return Response
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws ModelNotFoundException
|
||||
*/
|
||||
public function message(): Response
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
|
||||
$page = input('page', 1);
|
||||
$limit = input('limit', 1);
|
||||
|
||||
$status = input('status', 'all');
|
||||
if ($status !== 'all') {
|
||||
$where[] = ['status', '=', $status];
|
||||
}
|
||||
|
||||
$where[] = ['user_id', '=', \request()->user_id];
|
||||
$count = UserNotice::where($where)->count();
|
||||
$page = ($count <= $limit) ? 1 : $page;
|
||||
$list = UserNotice::where($where)->order('id', 'desc')->limit((int)$limit)->page((int)$page)->select()->toArray();
|
||||
return $this->success('查询成功', "", $list, $count);
|
||||
}
|
||||
|
||||
return view('/user/message');
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看消息
|
||||
* @return Response
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws ModelNotFoundException
|
||||
*/
|
||||
public function viewMessage(): Response
|
||||
{
|
||||
$id = input('id');
|
||||
$info = UserNotice::where('id', $id)->find();
|
||||
if (!$info) {
|
||||
return $this->error('消息不存在');
|
||||
}
|
||||
|
||||
if ($info['user_id'] != \request()->user_id) {
|
||||
return $this->error('非法操作');
|
||||
}
|
||||
|
||||
if ($info['status'] == 0) {
|
||||
UserNotice::update(['id' => $id, 'status' => 1]);
|
||||
}
|
||||
|
||||
if ($info['send_id'] > 0) {
|
||||
$fromInfo = $this->model->where('id', $info['send_id'])->find();
|
||||
$info['nickname'] = $fromInfo['nickname'];
|
||||
}
|
||||
|
||||
// 更新未读
|
||||
$unread = UserNotice::where(['user_id' => \request()->user_id, 'status' => 0])->count();
|
||||
return view('/user/viewMessage', [
|
||||
'info' => $info,
|
||||
'unread' => $unread,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 全部删除消息
|
||||
* @return Response
|
||||
* @throws DbException
|
||||
*/
|
||||
public function derMessage(): Response
|
||||
{
|
||||
if (\request()->isPost()) {
|
||||
$ids = input('id');
|
||||
$type = input('type', 'del');
|
||||
$where[] = ['id', 'in', implode(',', $ids)];
|
||||
$where[] = ['user_id', '=', \request()->user_id];
|
||||
if ($type === 'del') {
|
||||
if (UserNotice::where($where)->delete()) {
|
||||
return $this->success('删除成功');
|
||||
}
|
||||
} else {
|
||||
|
||||
if (UserNotice::where($where)->update(['status' =>1])) {
|
||||
return $this->success('操作成功');
|
||||
}
|
||||
}
|
||||
|
||||
return $this->error('操作失败');
|
||||
}
|
||||
|
||||
return $this->error('非法操作');
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户资料
|
||||
* @param Request $request
|
||||
* @return Response
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws ModelNotFoundException
|
||||
*/
|
||||
public function profile(Request $request): Response
|
||||
{
|
||||
if (request()->isPost()) {
|
||||
$nickname = input('nickname');
|
||||
$post = request_validate_rules(request()->Post(), get_class($this->model), 'nickname');
|
||||
if (!is_array($post)) {
|
||||
return $this->error($post);
|
||||
}
|
||||
|
||||
if ($nickname != \request()->userData['nickname']
|
||||
&&$this->model->where('nickname', $nickname)->find()) {
|
||||
return $this->error('当前昵称已被占用,请更换!');
|
||||
}
|
||||
|
||||
unset($post['money']);
|
||||
unset($post['score']);
|
||||
$user = $this->model->find(\request()->user_id);
|
||||
if ($user->save($post)) {
|
||||
return $this->success('更新资料成功');
|
||||
}
|
||||
|
||||
return $this->error();
|
||||
}
|
||||
|
||||
return view('/user/profile',[
|
||||
'user' => \request()->userData,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 实名认证
|
||||
* @return Response
|
||||
*/
|
||||
public function certification(): Response
|
||||
{
|
||||
|
||||
if (request()->isPost()) {
|
||||
$name = input('name');
|
||||
$mobile = input('mobile');
|
||||
$idCard = input('idCard');
|
||||
$captcha = input('captcha');
|
||||
|
||||
if (!empty(\request()->userData['prove'])) {
|
||||
return $this->error('您已经实名认证过了!');
|
||||
}
|
||||
|
||||
// 判断是否安装实名认证插件
|
||||
if (!Event::hasListener('certification')) {
|
||||
return $this->error('实名认证插件未安装');
|
||||
}
|
||||
|
||||
// 判断验证码
|
||||
if (!$captcha || !$this->captchaCheck($captcha)) {
|
||||
return $this->error('验证码错误');
|
||||
}
|
||||
|
||||
try {
|
||||
$result = Event::emit('certification', [
|
||||
'name' => $name,
|
||||
'mobile' => $mobile,
|
||||
'idCard' => $idCard,
|
||||
]);
|
||||
|
||||
if ($result['code'] != 1) {
|
||||
throw new \Exception($result['msg']);
|
||||
}
|
||||
|
||||
// 更新系统认证信息
|
||||
$this->model->where('id', \request()->user_id)->update([
|
||||
'prove' => 1,
|
||||
'name' => $name,
|
||||
'idCard' => $idCard,
|
||||
'mobile' => $mobile,
|
||||
'prove_time' => date('Y-m-d H:i:s', time())
|
||||
]);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
return $this->error('实名认证失败,请联系管理员');
|
||||
}
|
||||
|
||||
return $this->success('实名认证成功!');
|
||||
}
|
||||
|
||||
return view('/user/certification',['prove' => \request()->userData['prove']]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户登录日志
|
||||
* @return Response
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws ModelNotFoundException
|
||||
*/
|
||||
public function login_log(): Response
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
|
||||
// 获取数据
|
||||
$page = input('page', 1);
|
||||
$limit = input('limit', 1);
|
||||
$where[] = ['login_id', '=', \request()->user_id];
|
||||
$count = UserLog::where($where)->count();
|
||||
$page = ($count <= $limit) ? 1 : $page;
|
||||
$list = UserLog::where($where)->order('id', 'desc')->limit((int)$limit)->page((int)$page)->select()->toArray();
|
||||
return $this->success('查询成功', "", $list, $count);
|
||||
|
||||
}
|
||||
|
||||
return view('/user/login_log');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -214,22 +453,22 @@ class User extends HomeController
|
||||
* @param Request $request
|
||||
* @return Response
|
||||
*/
|
||||
public function changePwd(Request $request): \support\Response
|
||||
public function changePwd(Request $request): Response
|
||||
{
|
||||
if (request()->isPost()) {
|
||||
|
||||
// 获取参数
|
||||
$pwd = input('pwd');
|
||||
$oldPwd = input('oldpwd');
|
||||
$yPwd = encryptPwd($oldPwd, $request->userInfo->salt);
|
||||
$yPwd = encryptPwd($oldPwd, $request->userData->salt);
|
||||
|
||||
if ($yPwd != $request->userInfo->pwd) {
|
||||
if ($yPwd != $request->userData->pwd) {
|
||||
return $this->error('原密码输入错误!');
|
||||
}
|
||||
|
||||
$salt = Random::alpha();
|
||||
$pwd = encryptPwd($pwd, $salt);
|
||||
$result = $this->model->update(['id' => $request->userId, 'pwd' => $pwd, 'salt' => $salt]);
|
||||
$result = $this->model->update(['id' => $request->user_id, 'pwd' => $pwd, 'salt' => $salt]);
|
||||
if (!empty($result)) {
|
||||
return $this->success('修改密码成功!');
|
||||
}
|
||||
@@ -248,8 +487,8 @@ class User extends HomeController
|
||||
{
|
||||
if (request()->isPost()) {
|
||||
$data = array();
|
||||
$data['id'] = $request->userId;
|
||||
$data['app_id'] = 10000 + $request->userId;
|
||||
$data['id'] = $request->user_id;
|
||||
$data['app_id'] = 10000 + $request->user_id;
|
||||
$data['app_secret'] = Random::alpha(22);
|
||||
if ($this->model->update($data)) {
|
||||
return $this->success();
|
||||
@@ -260,13 +499,15 @@ class User extends HomeController
|
||||
|
||||
/**
|
||||
* 修改邮箱
|
||||
* @return \support\Response
|
||||
* @throws \PHPMailer\PHPMailer\Exception
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @param Request $request
|
||||
* @return Response
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws Exception
|
||||
* @throws InvalidArgumentException
|
||||
* @throws ModelNotFoundException
|
||||
*/
|
||||
public function email(Request $request): \support\Response
|
||||
public function email(Request $request): Response
|
||||
{
|
||||
if (request()->isPost()) {
|
||||
|
||||
@@ -286,7 +527,7 @@ class User extends HomeController
|
||||
if (!empty($email) && !empty($captcha)) {
|
||||
|
||||
if ($Ems->check($email, $captcha, $event)) {
|
||||
$this->model->update(['id' => $request->userId, 'email' => $email]);
|
||||
$this->model->update(['id' => $request->user_id, 'email' => $email]);
|
||||
return $this->success('修改邮箱成功!');
|
||||
}
|
||||
|
||||
@@ -308,14 +549,13 @@ class User extends HomeController
|
||||
return view('/user/email');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 修改手机号
|
||||
* @param Request $request
|
||||
* @return Response
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws ModelNotFoundException
|
||||
* @throws ModelNotFoundException|InvalidArgumentException
|
||||
*/
|
||||
public function mobile(Request $request): Response
|
||||
{
|
||||
@@ -338,7 +578,7 @@ class User extends HomeController
|
||||
if (!empty($mobile) && !empty($captcha)) {
|
||||
|
||||
if ($Sms->check($mobile, $captcha, $event)) {
|
||||
$this->model->update(['id' => $request->userId, 'mobile' => (int)$mobile]);
|
||||
$this->model->update(['id' => $request->user_id, 'mobile' => (int)$mobile]);
|
||||
return $this->success('修改手机号成功!');
|
||||
}
|
||||
|
||||
@@ -366,7 +606,7 @@ class User extends HomeController
|
||||
* @param Request $request
|
||||
* @return Response
|
||||
*/
|
||||
public function protection(Request $request): \support\Response
|
||||
public function protection(Request $request): Response
|
||||
{
|
||||
$validate = [
|
||||
'你家的宠物叫啥?',
|
||||
@@ -387,9 +627,9 @@ class User extends HomeController
|
||||
}
|
||||
|
||||
try {
|
||||
$request->userInfo->question = $question;
|
||||
$request->userInfo->answer = $answer;
|
||||
$request->userInfo->save();
|
||||
$request->userData->question = $question;
|
||||
$request->userData->answer = $answer;
|
||||
$request->userData->save();
|
||||
} catch (\Throwable $th) {
|
||||
return $this->error();
|
||||
}
|
||||
@@ -412,19 +652,19 @@ class User extends HomeController
|
||||
$maxProgress = 5;
|
||||
$thisProgress = 1;
|
||||
|
||||
if ($request->userInfo->email) {
|
||||
if ($request->userData->email) {
|
||||
$thisProgress++;
|
||||
}
|
||||
|
||||
if ($request->userInfo->mobile) {
|
||||
if ($request->userData->mobile) {
|
||||
$thisProgress++;
|
||||
}
|
||||
|
||||
if ($request->userInfo->answer) {
|
||||
if ($request->userData->answer) {
|
||||
$thisProgress++;
|
||||
}
|
||||
|
||||
if ($request->userInfo->wechat) {
|
||||
if ($request->userData->wechat) {
|
||||
$thisProgress++;
|
||||
}
|
||||
|
||||
@@ -438,18 +678,21 @@ class User extends HomeController
|
||||
/**
|
||||
* 用户头像上传
|
||||
* @param Request $request
|
||||
* @return Response|void
|
||||
* @throws \Exception
|
||||
* @return Response
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws InvalidArgumentException
|
||||
* @throws ModelNotFoundException
|
||||
*/
|
||||
public function avatar(Request $request)
|
||||
public function avatar(Request $request): Response
|
||||
{
|
||||
if (request()->isPost()) {
|
||||
$response = Upload::instance()->upload();
|
||||
if (!$response) {
|
||||
return $this->error(Upload::instance()->getError());
|
||||
}
|
||||
$request->userInfo->avatar = $response['url'] . '?' . Random::alpha(12);
|
||||
if ($request->userInfo->save()) {
|
||||
$request->userData->avatar = $response['url'] . '?' . Random::alpha(12);
|
||||
if ($request->userData->save()) {
|
||||
return json($response);
|
||||
}
|
||||
}
|
||||
@@ -459,10 +702,8 @@ class User extends HomeController
|
||||
|
||||
/**
|
||||
* 文件上传函数
|
||||
* @return mixed
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function upload()
|
||||
public function upload(): Response
|
||||
{
|
||||
if (request()->isPost()) {
|
||||
$file = Upload::instance()->upload();
|
||||
@@ -474,4 +715,33 @@ class User extends HomeController
|
||||
|
||||
return json(ResultCode::SUCCESS);
|
||||
}
|
||||
|
||||
/**
|
||||
* 远程下载图片
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws InvalidArgumentException
|
||||
* @throws ModelNotFoundException
|
||||
*/
|
||||
public function getImage()
|
||||
{
|
||||
if (request()->isPost()) {
|
||||
$file = Upload::instance()->download(input('url'));
|
||||
if (!$file) {
|
||||
return $this->error(Upload::instance()->getError());
|
||||
}
|
||||
return json($file);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 退出登录
|
||||
* @return Response
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function logout(): Response
|
||||
{
|
||||
$this->auth->logout();
|
||||
return $this->success('退出成功', url('/'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,14 +24,15 @@ use Webman\Http\Request;
|
||||
*/
|
||||
class StaticFile implements MiddlewareInterface
|
||||
{
|
||||
public function process(Request $request, callable $next): Response
|
||||
public function process(Request $request, callable $handler): Response
|
||||
{
|
||||
// Access to files beginning with. Is prohibited
|
||||
if (strpos($request->path(), '/.') !== false) {
|
||||
if (str_contains($request->path(), '/.')) {
|
||||
return response('<h1>403 forbidden</h1>', 403);
|
||||
}
|
||||
|
||||
/** @var Response $response */
|
||||
$response = $next($request);
|
||||
$response = $handler($request);
|
||||
// Add cross domain HTTP header
|
||||
/*$response->withHeaders([
|
||||
'Access-Control-Allow-Origin' => '*',
|
||||
|
||||
@@ -11,6 +11,11 @@ declare (strict_types=1);
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\index\middleware\system;
|
||||
use Psr\SimpleCache\InvalidArgumentException;
|
||||
use support\View;
|
||||
use think\db\exception\DataNotFoundException;
|
||||
use think\db\exception\DbException;
|
||||
use think\db\exception\ModelNotFoundException;
|
||||
use Webman\Http\Request;
|
||||
use Webman\Http\Response;
|
||||
use Webman\MiddlewareInterface;
|
||||
@@ -30,10 +35,10 @@ class IndexInitialize implements MiddlewareInterface
|
||||
* @param Request $request
|
||||
* @param callable $handler
|
||||
* @return Response
|
||||
* @throws \Psr\SimpleCache\InvalidArgumentException
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws InvalidArgumentException
|
||||
* @throws DataNotFoundException
|
||||
* @throws DbException
|
||||
* @throws ModelNotFoundException
|
||||
*/
|
||||
public function process(Request $request, callable $handler): Response
|
||||
{
|
||||
@@ -54,7 +59,7 @@ class IndexInitialize implements MiddlewareInterface
|
||||
$siteInfo = saenv('site', true);
|
||||
if ($siteInfo && is_array($siteInfo)) {
|
||||
foreach ($siteInfo as $key => $value) {
|
||||
\support\View::assign($key,$value);
|
||||
View::assign($key,$value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace app\index\middleware\system;
|
||||
|
||||
use app\common\library\Auth;
|
||||
use app\common\library\ResultCode;
|
||||
use support\View;
|
||||
use Webman\MiddlewareInterface;
|
||||
use Webman\Http\Response;
|
||||
@@ -19,25 +20,25 @@ class IndexPermissions implements MiddlewareInterface
|
||||
* 控制器登录鉴权
|
||||
* @var bool
|
||||
*/
|
||||
public $needLogin = false;
|
||||
public bool $needLogin = false;
|
||||
|
||||
/**
|
||||
* 禁止登录重复
|
||||
* @var array
|
||||
*/
|
||||
public $repeatLogin = ['login', 'register'];
|
||||
public array $repeatLogin = ['login', 'register'];
|
||||
|
||||
/**
|
||||
* 非鉴权方法
|
||||
* @var array
|
||||
*/
|
||||
public $noNeedAuth = [];
|
||||
public array $noNeedAuth = [];
|
||||
|
||||
/**
|
||||
* 跳转URL地址
|
||||
* @var string
|
||||
*/
|
||||
public $JumpUrl = '/user/index';
|
||||
public string $JumpUrl = '/user/index';
|
||||
|
||||
/**
|
||||
* 校验权限
|
||||
@@ -67,16 +68,21 @@ class IndexPermissions implements MiddlewareInterface
|
||||
// 是否验证登录器
|
||||
$auth = Auth::instance();
|
||||
if ($auth->isLogin()) {
|
||||
$request->userId = $auth->userInfo['id'];
|
||||
$request->userInfo = $auth->userInfo;
|
||||
$request->user_id = $auth->userData['id'];
|
||||
$request->userData = $auth->userData;
|
||||
// 禁止重复登录
|
||||
if (in_array($action, $this->repeatLogin)) {
|
||||
return redirect($this->JumpUrl);
|
||||
}
|
||||
|
||||
View::assign('user', $auth->userInfo);
|
||||
View::assign('user', $auth->userData);
|
||||
} else {
|
||||
if ($this->needLogin && !in_array($action, $this->noNeedAuth)) {
|
||||
return redirect('/');
|
||||
if (\request()->isAjax()) {
|
||||
return json(ResultCode::PLEASELOGININ);
|
||||
} else {
|
||||
return redirect('/user/login');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>SwiftAdmin 官方演示站</title>
|
||||
@@ -45,7 +45,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md6">
|
||||
<img src="/static/images/hero-img.png" width="90%" height="500" alt="">
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>控制台 | 用户中心</title>
|
||||
|
||||
@@ -13,9 +13,9 @@
|
||||
</ul>
|
||||
|
||||
<div class="layui-nav layui-hide-xs fr" id="login">
|
||||
<notempty name="$user.id"> <li class="layui-nav-item"><a class="" href="/user/index" >会员中心</a></li> <else/>
|
||||
<li class="layui-nav-item"><a href="javascript:;" lay-open data-title="用户注册" data-area="490px" data-url="/user/register" >注册</a></li>
|
||||
<li class="layui-nav-item"><a href="javascript:;" lay-open data-title="用户登录" data-area="450px,420px" data-url="/user/login" >登录</a></li>
|
||||
<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>
|
||||
</notempty>
|
||||
</div>
|
||||
</div>
|
||||
315
app/index/view/user/center.html
Normal file
315
app/index/view/user/center.html
Normal file
@@ -0,0 +1,315 @@
|
||||
<layout name="layout:layout"/>
|
||||
<style>
|
||||
#content .layui-table td, #content .layui-table th {
|
||||
padding: 8px 10px;
|
||||
}
|
||||
</style>
|
||||
<!-- 内容主体区域 -->
|
||||
<div id="content">
|
||||
<div class="layui-row layui-col-space20">
|
||||
<div class="layui-col-md9">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body swift-index vip-head-box" >
|
||||
<div class="user-face-box">
|
||||
<div class="img"><img src="{$user.avatar}" alt="{$user.nickname}" ></div>
|
||||
</div>
|
||||
<div class="user-vip-info">
|
||||
<div class="vip-type-time">
|
||||
<div class="vip-tips">
|
||||
<if check_user_third('qq',$user['id']) >
|
||||
<a lay-ajax class="bind-third" data-url="{:url('/third/unbind',['type'=> 'qq'])}" title="点击解绑"
|
||||
><i class="layui-icon layui-icon-login-qq"></i></a>
|
||||
<else/>
|
||||
<a href="{:url('/third/bind?type=qq&ref=/index/user/index')}" title="点击绑定"target="_top"
|
||||
><i class="layui-icon layui-icon-login-qq"></i></a>
|
||||
</if>
|
||||
|
||||
<if check_user_third('weixin',$user['id']) >
|
||||
<a lay-ajax class="bind-third" data-url="{:url('/third/unbind?type=weixin')}" title="点击解绑"
|
||||
><i class="layui-icon layui-icon-login-wechat"></i></a>
|
||||
<else/>
|
||||
<a href="{:url('/third/bind')}?type=weixin&ref=/index/user/index" title="点击绑定"
|
||||
target="_top"
|
||||
><i class="layui-icon layui-icon-login-wechat"></i></a>
|
||||
</if>
|
||||
|
||||
<if check_user_third('weibo',$user['id']) >
|
||||
<a lay-ajax class="bind-third" data-url="{:url('/third/unbind?type=weibo')}" title="点击解绑">
|
||||
<i class="layui-icon layui-icon-login-weibo"></i></a>
|
||||
<else/>
|
||||
<a href="{:url('/third/bind')}?type=wiebo&ref=/index/user/index" title="点击绑定"
|
||||
target="_top"
|
||||
><i class="layui-icon layui-icon-login-weibo"></i></a>
|
||||
</if>
|
||||
</div>
|
||||
|
||||
<div class="vip-name">
|
||||
<span>{$user.nickname} <i class="layui-icon fa-edit" lay-open data-title="修改昵称" data-url="#nickname" data-area="398px,230px"></i></span>
|
||||
<span>UID: {$user.id|supplement_id}</span>
|
||||
<span><a>已加入第 {$user.create_time|distance_day} 天</a></span>
|
||||
</div>
|
||||
<div class="vip-time-row">
|
||||
<salibs:usergroup id="vo">
|
||||
<div class="vip-item <if ($vo['id'] == $user['group_id']) >vip-active</if>">
|
||||
<span class="vip-item-type">{$vo.alias}</span>
|
||||
<span class="vip-item-name">{$vo.title}</span>
|
||||
</div>
|
||||
</salibs:usergroup>
|
||||
</div>
|
||||
<div class="vip-coupon-row">
|
||||
<div class="vip-coupon-item"><p><em>{$user.score}</em>我的积分</p></div>
|
||||
<div class="vip-coupon-item"><p><em style="color: red">¥{$user.money|default='0.0'}</em>我的余额</p></div>
|
||||
<div class="vip-coupon-item"><p><em>{$invite_count|default='0'}</em>邀请人数</p></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="profile" class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<h2>个人信息</h2>
|
||||
<div class="clear">
|
||||
<div class="layui-col-md3">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md3">
|
||||
<div class="contract-title">微信号</div>
|
||||
<div class="contract-detail">{$user.wechat|default='Tony'}</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md3">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md3">
|
||||
<div class="contract-title">登录IP</div>
|
||||
<div class="contract-detail">{$user.login_ip}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clear">
|
||||
<div class="layui-col-md3">
|
||||
<div class="contract-title">登陆次数</div>
|
||||
<div class="contract-detail">{$user.login_count}</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md3">
|
||||
<div class="contract-title">用户组</div>
|
||||
<div class="contract-detail">{$user.group.title}</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md3">
|
||||
<div class="contract-title">加入时间</div>
|
||||
<div class="contract-detail">{$user.create_time}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md3">
|
||||
<div class="contract-title">所在住址</div>
|
||||
<div class="contract-detail">{$user.address}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-row layui-col-space15">
|
||||
<div class="layui-col-md6">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">登录日志</div>
|
||||
<div class="layui-card-body">
|
||||
<table class="layui-table" lay-skin="nob">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>登录时间</th>
|
||||
<th>登录IP</th>
|
||||
<th> 状态</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<php> $_user_log = \app\common\model\system\UserLog::where('login_id',$user['id'])->limit(8)->order('id desc')->select();</php>
|
||||
<volist name="$_user_log" id="vo">
|
||||
<tr>
|
||||
<td>{$vo.create_time}</td>
|
||||
<td>{$vo.login_ip}</td>
|
||||
<td><span <eq name="$vo['status']" value="0">style="color:red;"</eq> >{$vo.error}</span></td>
|
||||
</tr>
|
||||
</volist>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md6">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">快捷方式</div>
|
||||
<div class="layui-card-body layui-row layui-col-space10" style="max-height: 146px;overflow: auto">
|
||||
<div class="layui-col-md4">
|
||||
<div class="speed-entry-item" data-url="/index/user/profile">
|
||||
<i class="layui-icon fa-user"></i> 我的主页
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md4">
|
||||
<div class="speed-entry-item" data-url="/index/user/message">
|
||||
<i class="layui-icon fa-comment"></i> 站内消息
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md4">
|
||||
<div class="speed-entry-item" data-url="/index/user/security">
|
||||
<i class="layui-icon fa-get-pocket"></i> 安全中心
|
||||
</div>
|
||||
</div>
|
||||
{:get_plugin_menu_entry('tabs')}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">应用插件</div>
|
||||
<div class="layui-card-body">
|
||||
<div id="pluginApp" class="layui-carousel">
|
||||
<div id="appPluginList" carousel-item>
|
||||
<div><img src="/static/images/plugin-banner.png"></div>
|
||||
<div><img src="/static/images/plugin-redis.png"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="layui-col-md3">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">🏷️ 新闻公告</div>
|
||||
<ul id="newsList" class="news-list">
|
||||
{$newsHtml|raw}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">APP KEY</div>
|
||||
<div id="appkey" class="layui-card-body">
|
||||
<notempty name="user.app_id">
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">app_id:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-form-mid layui-word-aux">{$user.app_id}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">app_secret:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-form-mid layui-word-aux">{$user.app_secret}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<button type="submit" class="layui-btn layui-btn-normal" lay-ajax=""
|
||||
data-url="/index/user/appid" data-reload="self">更换APPKEY
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<else/>
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-form-mid layui-word-aux">还没有生成appKey,请点击按钮生成!</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<button type="submit" class="layui-btn layui-btn-normal" lay-ajax=""
|
||||
data-url="/index/user/appid" data-reload="self">生成APPKEY
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</notempty>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header" style="color: red">活跃用户 (TOP)</div>
|
||||
<div class="layui-card-body" id="cardInfoList">
|
||||
<ul class="cardInfoUsers">
|
||||
<volist name="userList" id="vo">
|
||||
<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>
|
||||
</li>
|
||||
</volist>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- // 修改用户昵称 -->
|
||||
<script type="text/html" id="nickname">
|
||||
<div class="layui-fluid layui-bg-white">
|
||||
<form class="layui-form layui-form-fixed" action="/index/user/profile">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('用户昵称')}</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="nickname" autocomplete="off" placeholder="{:__('请输入昵称')}" type="text"
|
||||
class="layui-input" lay-verify="required"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="submitPage" data-reload="parent" lay-submit>
|
||||
{:__('提交')}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
layui.use(['jquery', 'upload','carousel'], function () {
|
||||
var $ = layui.jquery;
|
||||
var upload = layui.upload;
|
||||
var carousel = layui.carousel;
|
||||
|
||||
// API请求热门插件
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: 'https://api.swiftadmin.net/plugin/recommend',
|
||||
data: {type: 'hot'},
|
||||
dataType: 'json',
|
||||
success: function (res) {
|
||||
if (res.code === 200) {
|
||||
$('#appPluginList').html(res.data);
|
||||
}
|
||||
carousel.render({
|
||||
elem: '#pluginApp'
|
||||
,height: '120px'
|
||||
,interval: 3000
|
||||
,anim: 'fade'
|
||||
});
|
||||
},
|
||||
error: function () {}
|
||||
})
|
||||
|
||||
$('.speed-entry-item').click(function (e) {
|
||||
let url = $(this).data('url');
|
||||
if (typeof url == 'undefined') {
|
||||
layer.msg('功能开发中...');
|
||||
return false;
|
||||
}
|
||||
|
||||
let m = parent.layui.$('.layui-nav-tree li [lay-href="' + url + '"]');
|
||||
parent.layui.$(m).parents('.layui-nav-item').addClass('layui-nav-itemed');
|
||||
parent.layui.$(m).trigger('click');
|
||||
})
|
||||
})
|
||||
</script>
|
||||
185
app/index/view/user/certification.html
Normal file
185
app/index/view/user/certification.html
Normal file
@@ -0,0 +1,185 @@
|
||||
<layout name="layout:layout"/>
|
||||
<!-- 内容主体区域 -->
|
||||
<style>
|
||||
.alert-warn {
|
||||
background: #fff3eb;
|
||||
border: 1px solid #ffdac2;
|
||||
border-radius: 2px;
|
||||
color: #ff6600;
|
||||
font-size: 12px;
|
||||
padding: 10px 30px;
|
||||
}
|
||||
|
||||
.choose-box {
|
||||
overflow: hidden;
|
||||
padding: 25px;
|
||||
}
|
||||
|
||||
.choose-box #tip {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.choose-item {
|
||||
cursor: pointer;
|
||||
border: 1px solid #e1e4e6;
|
||||
border-radius: 3px;
|
||||
margin-right: 20px;
|
||||
padding: 28px 28px 28px 50px;
|
||||
}
|
||||
|
||||
.choose-item:hover {
|
||||
border-color: #1890ff;
|
||||
}
|
||||
|
||||
.choose-item:hover i {
|
||||
color: #1890ff;
|
||||
}
|
||||
|
||||
.svg {
|
||||
margin-top: 23px;
|
||||
}
|
||||
|
||||
.fa-wechat, .fa-mobile-phone {
|
||||
font-size: 4em;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
margin-top: 10px;
|
||||
font-size: 18px;
|
||||
clear: both;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.captcha img {
|
||||
border: 1px solid #d9d9d9;
|
||||
background-color: #fff;
|
||||
border-radius: 3px;
|
||||
width: 116px;
|
||||
}
|
||||
|
||||
#proves {
|
||||
padding: 65px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#proves .auHead, #proves .auIntro {
|
||||
margin: 0px 10px;
|
||||
}
|
||||
|
||||
#proves h2 {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
#proves .text-muted {
|
||||
color: #a0a2a3;
|
||||
}
|
||||
|
||||
#proves p {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div id="content">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header "><h5>实名认证</h5></div>
|
||||
<div class="layui-card-body ">
|
||||
|
||||
<div class="alert-warn">
|
||||
<span>
|
||||
<i class="layui-icon fa-info-circle"></i>
|
||||
根据《中华人民共和国网络安全法》等网络安全相关法律法规规定,及按网监,公安等有关监管单位要求,互联网计算资源用户须完成用户实名认证才能使用。
|
||||
请您认真填写相关实名认证信息,完成实名认证申请。
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<empty name="prove">
|
||||
<div class="choose-box layui-row layui-col-space10">
|
||||
<div id="tip">请您从以下认证方式中选择一种:</div>
|
||||
|
||||
<div class="layui-col-md4 choose-item " lay-open data-title="实名认证" data-url="#author" data-area="520px,390px">
|
||||
<div class="layui-col-md2">
|
||||
<div class="svg"><i class="layui-icon fa-mobile-phone"></i></div>
|
||||
</div>
|
||||
<div class="layui-col-md10">
|
||||
<span class="subtitle">手机号码 验证实名</span>
|
||||
<span class="intro">注:手机号码必须与实名认证人信息一致</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md4 choose-item" onclick="layui.layer.msg('暂未支持','info')">
|
||||
<div class="layui-col-md2">
|
||||
<div class="svg"><i class="layui-icon fa-wechat"></i></div>
|
||||
</div>
|
||||
<div class="layui-col-md10">
|
||||
<span class="subtitle">微信人脸 识别认证</span>
|
||||
<span class="intro">注:请使用本人微信进行人脸识别认证</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<else/>
|
||||
|
||||
<div id="proves">
|
||||
<div class="auHead fl"><svg t="1667563336182" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2727" width="200" height="200"><path d="M0 0h1024v1024H0z" fill="#FFFFFF" p-id="2728"></path><path d="M151.272727 197.818182m93.090909 0l538.507637 0q93.090909 0 93.090909 93.090909l0 428.520727q0 93.090909-93.090909 93.090909l-538.507637 0q-93.090909 0-93.090909-93.090909l0-428.520727q0-93.090909 93.090909-93.090909Z" fill="#23C588" p-id="2729"></path><path d="M366.545455 458.624a52.363636 52.363636 0 1 0-52.363637-52.363636 52.421818 52.421818 0 0 0 52.363637 52.363636m0 46.545455a98.909091 98.909091 0 1 1 98.90909-98.909091 98.909091 98.909091 0 0 1-98.90909 98.909091z" fill="#FFFFFF" p-id="2730"></path><path d="M360.727273 551.714909a69.899636 69.899636 0 0 0-69.818182 69.818182v46.545454h151.272727v-46.545454a69.899636 69.899636 0 0 0-69.818182-69.818182h-11.636363m0-46.545454h11.636363a116.363636 116.363636 0 0 1 116.363637 116.363636v46.545454a46.545455 46.545455 0 0 1-46.545455 46.545455H290.909091a46.545455 46.545455 0 0 1-46.545455-46.545455v-46.545454a116.363636 116.363636 0 0 1 116.363637-116.363636z" fill="#FFFFFF" p-id="2731"></path><path d="M758.027636 430.743273h-186.181818a23.272727 23.272727 0 0 1-23.272727-23.272728 23.272727 23.272727 0 0 1 23.272727-23.272727h186.181818a23.272727 23.272727 0 0 1 23.272728 23.272727 23.272727 23.272727 0 0 1-23.272728 23.272728z" fill="#FFFFFF" p-id="2732"></path><path d="M758.027636 535.470545h-186.181818a23.272727 23.272727 0 0 1-23.272727-23.272727 23.272727 23.272727 0 0 1 23.272727-23.272727h186.181818a23.272727 23.272727 0 0 1 23.272728 23.272727 23.272727 23.272727 0 0 1-23.272728 23.272727z" fill="#FFFFFF" p-id="2733"></path><path d="M758.027636 640.197818h-186.181818a23.272727 23.272727 0 0 1-23.272727-23.272727 23.272727 23.272727 0 0 1 23.272727-23.272727h186.181818a23.272727 23.272727 0 0 1 23.272728 23.272727 23.272727 23.272727 0 0 1-23.272728 23.272727z" fill="#FFFFFF" p-id="2734"></path></svg> </div>
|
||||
<div class="auIntro fl">
|
||||
<h2>恭喜您已通过实名认证</h2>
|
||||
<p><span class="text-muted">认证途径:</span>身份证实名</p>
|
||||
<p><span class="text-muted">真实姓名:</span>{:hide_str($user['name'],0,1)}</p>
|
||||
<p><span class="text-muted">认证时间:</span>{$user.prove_time}</p>
|
||||
<p><span class="text-muted">证件号码:</span>{:hide_str($user['idcard'],3,8)}</p>
|
||||
<p>
|
||||
<span class="text-muted">如果您的认证信息发生变更,可</span>
|
||||
<a id="edit-verify">联系管理员修改认证资料 ></a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</empty>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- // 实名认证 -->
|
||||
<script type="text/html" id="author">
|
||||
<div class="layui-fluid layui-bg-white">
|
||||
<form class="layui-form layui-form-fixed" action="/index/user/certification">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('手机号')}</label>
|
||||
<div class="layui-input-inline" style="width: 320px">
|
||||
<input name="mobile" placeholder="{:__('请输入手机号')}" type="text" autocomplete="on"
|
||||
class="layui-input" lay-verify="required|phone"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('真实姓名')}</label>
|
||||
<div class="layui-input-inline" style="width: 320px">
|
||||
<input name="name" placeholder="{:__('请输入真实姓名')}" type="text" autocomplete="on" class="layui-input" lay-verify="required"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('身份证号码')}</label>
|
||||
<div class="layui-input-inline" style="width: 320px">
|
||||
<input name="idCard" placeholder="{:__('请输入身份证号码')}" type="text" autocomplete="on" class="layui-input" lay-verify="required|identity"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('验证码')}</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="captcha" placeholder="{:__('请输入验证码')}" type="text" autocomplete="on" class="layui-input" lay-verify="required" maxlength="10"/>
|
||||
</div>
|
||||
<div class="captcha"><a href="javascript:;"><img src="{:captcha_src()}" height="31" id="captchaImg" alt="{:__('验证码')}"/></a></div>
|
||||
</div>
|
||||
<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="true" lay-filter="submitPage" lay-submit>{:__('提交')}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
layui.use(['table', 'jquery'], function () {
|
||||
let $ = layui.jquery, captchaUrl = '{:captcha_src()}';
|
||||
$(document).on('click', '#captchaImg', function () {
|
||||
$(this).attr('src', captchaUrl + '?rand=' + Math.random())
|
||||
})
|
||||
})
|
||||
</script>
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>修改密码</title>
|
||||
@@ -8,7 +8,7 @@
|
||||
<body>
|
||||
|
||||
<div class="layui-card-body">
|
||||
<form action="/user/changePwd" class="layui-form layui-form-fixed">
|
||||
<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>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<!-- 内容主体区域 -->
|
||||
<div id="content">
|
||||
<div class="layui-fluid ">
|
||||
<form class="layui-form layui-form-fixed" action="/user/email">
|
||||
<form class="layui-form layui-form-fixed" action="/index/user/email">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('邮箱地址')}</label>
|
||||
@@ -17,7 +17,7 @@
|
||||
<input name="captcha" placeholder="{:__('请输入验证码')}" type="text" class="layui-input"
|
||||
autocomplete="off" lay-verify="required" maxlength="10"/>
|
||||
</div>
|
||||
<button class="layui-btn layui-btn-normal" type="button" lay-ajax data-url="/user/email"
|
||||
<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>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>SwiftAdmin 用户登录</title>
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
</style>
|
||||
<div class="layui-fluid">
|
||||
<form class="layui-form layui-form-fixed" action="/user/forgot" method="post" >
|
||||
<form class="layui-form layui-form-fixed" action="/index/user/forgot" method="post" >
|
||||
<input type="hidden" name="__token__" value="{:token()}"/>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="red">*</span> {:__('手机/邮箱')}</label>
|
||||
|
||||
@@ -28,9 +28,9 @@
|
||||
<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="/user/changepwd" lay-area="470px,330px" href="javascript:;">修改密码</a>
|
||||
<dd><a lay-open lay-title="修改密码" lay-url="/index/user/changepwd" lay-area="470px,330px" href="javascript:;">修改密码</a>
|
||||
</dd>
|
||||
<dd><a href="/user/logout" >退出</a></dd>
|
||||
<dd><a href="/index/user/logout" >退出</a></dd>
|
||||
</dl>
|
||||
</li>
|
||||
<li class="layui-nav-item" lay-header-event="menuRight" lay-unselect>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>控制台 | 用户中心</title>
|
||||
@@ -9,9 +9,9 @@
|
||||
<div class="layui-layout layui-layout-admin">
|
||||
<div class="layui-header">
|
||||
<div class="layui-logo layui-side-body layui-hide-xs layui-bg-black">
|
||||
<!-- // 可以增加LOGO-->
|
||||
<!--// 可以增加LOGO-->
|
||||
<img src="/static/system/images/logo.png" style="margin-bottom: 8px;margin-right: 10px" alt="logo" width="22" height="22" >
|
||||
<span class="logo-text">用户中心</span>
|
||||
<span class="logo-text">会员中心</span>
|
||||
</div>
|
||||
<ul class="layui-nav layui-layout-left">
|
||||
<li id="shrink" class="layui-nav-item layui-show-xs-inline-block" >
|
||||
@@ -26,26 +26,26 @@
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="layui-nav-item" >
|
||||
<li class="layui-nav-item">
|
||||
<a href="javascript:;" id="notice">
|
||||
<i class="layui-icon fa-bell-o"></i>
|
||||
<span class="layui-badge-dot"></span>
|
||||
<div id="unread" data-count="{$unread|default='0'}"></div>
|
||||
<empty name="$unread">
|
||||
<i class="layui-icon fa-bell-o"></i>
|
||||
<else/>
|
||||
<i class="layui-icon fa-bell"></i>
|
||||
<span class="layui-badge-dot"></span>
|
||||
</empty>
|
||||
</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 data-title="修改密码" data-url="/user/changepwd" data-area="470px,330px" href="javascript:;">修改密码</a>
|
||||
<dd><a lay-open data-title="修改密码" data-url="/index/user/changepwd" data-area="470px,330px" href="javascript:;">修改密码</a>
|
||||
</dd>
|
||||
<dd><a href="/user/logout">退出</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 id="skin" class="layui-icon fa-moon-o"></i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="layui-side layui-side-body layui-bg-black">
|
||||
@@ -57,12 +57,12 @@
|
||||
|
||||
<div class="layui-body">
|
||||
<!-- 内容主体区域 -->
|
||||
<iframe id="iframe" src="/user/profile" frameborder="0" class="layui-layer-load" onload="this.className='';" ></iframe>
|
||||
<iframe id="iframe" src="/index/user/center" frameborder="0" class="layui-layer-load" onload="this.className='';" ></iframe>
|
||||
</div>
|
||||
<include file="user:footer"/>
|
||||
</div>
|
||||
|
||||
<script !src="">
|
||||
<script>
|
||||
|
||||
layui.use(['jquery','upload'],function(){
|
||||
let $ = layui.jquery;
|
||||
@@ -88,14 +88,14 @@
|
||||
// 上传头像
|
||||
upload.render({
|
||||
elem: '.layui-user-avatar'
|
||||
,url: '/user/avatars'
|
||||
,url: '/index/user/avatars'
|
||||
,method: 'post'
|
||||
,accept: 'file'
|
||||
,before: function(res) {
|
||||
layer.msg('上传中');
|
||||
},done: function(res, index, upload) {
|
||||
// 上传成功
|
||||
if (res.code == 200) {
|
||||
if (res.code === 200) {
|
||||
layer.msg(res.msg);
|
||||
$('#imgHead img').attr('src',res.url);
|
||||
} else {
|
||||
@@ -138,27 +138,7 @@
|
||||
$('#skin').removeClass('fa-moon-o').addClass('fa-sun-o');
|
||||
}
|
||||
|
||||
// 切换皮肤
|
||||
$('#skin').on('click',function () {
|
||||
let value = $(this).hasClass('fa-moon-o');
|
||||
console.log(value)
|
||||
if (value) {
|
||||
$(this).removeClass('fa-moon-o').addClass('fa-sun-o');
|
||||
$('.layui-side-body').removeClass('layui-bg-black').addClass('layui-bg-white');
|
||||
layui.data('skin',{
|
||||
key: 'theme',
|
||||
value: 'layui-bg-white'
|
||||
});
|
||||
} else {
|
||||
$(this).removeClass('fa-sun-o').addClass('fa-moon-o');
|
||||
$('.layui-side-body').removeClass('layui-bg-white').addClass('layui-bg-black');
|
||||
layui.data('skin',{
|
||||
key: 'theme',
|
||||
value: 'layui-bg-black'
|
||||
});
|
||||
}
|
||||
})
|
||||
|
||||
bellMessage($('#unread').data('count'));
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>SwiftAdmin 用户登录</title>
|
||||
@@ -27,7 +27,7 @@
|
||||
<a href="{:url('/third/login',['type'=>'weibo'])}&ref={$referer}" class="sina" target="_top"></a>
|
||||
</span>
|
||||
</div>
|
||||
<form class="layui-form" action="/user/login" method="post" style="height: auto">
|
||||
<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">
|
||||
@@ -49,7 +49,7 @@
|
||||
<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="/user/forgot" class="forget-link fr" style="margin-top: 7px;">{:__('忘记密码?')}</a>
|
||||
<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">
|
||||
|
||||
35
app/index/view/user/login_log.html
Normal file
35
app/index/view/user/login_log.html
Normal file
@@ -0,0 +1,35 @@
|
||||
<layout name="layout:layout" />
|
||||
<!-- 内容主体区域 -->
|
||||
<div id="content">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">登录日志</div>
|
||||
<!-- // 创建数据实例 -->
|
||||
<div class="layui-card-body">
|
||||
<table id="lay-tableList" lay-filter="lay-tableList"></table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
layui.use(['table'], function () {
|
||||
|
||||
var table = layui.table;
|
||||
/*
|
||||
* 初始化表格
|
||||
*/
|
||||
var isTable = table.render({
|
||||
elem: "#lay-tableList"
|
||||
, url: "{:url('/user/login_log')}"
|
||||
, page: true
|
||||
, limit: 20
|
||||
, cols: [[
|
||||
{field: 'nickname', align: 'left',title: '{:__("登录帐号")}'},
|
||||
{field: 'login_ip', align: 'center', title: '{:__("登录IP")}'},
|
||||
{field: 'login_os', align: 'center', title: '{:__("操作系统")}'},
|
||||
{field: 'login_browser', align: 'center', title: '{:__("登录代理")}'},
|
||||
{field: 'error', align: 'center', title: '{:__("登录状态")}'},
|
||||
{field: 'create_time', align: 'center', title: '{:__("登录时间")}'},
|
||||
]]
|
||||
})
|
||||
})
|
||||
</script>
|
||||
88
app/index/view/user/message.html
Normal file
88
app/index/view/user/message.html
Normal file
@@ -0,0 +1,88 @@
|
||||
<layout name="layout:layout" />
|
||||
<!-- 内容主体区域 -->
|
||||
<style>
|
||||
.layui-table-text-red {
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
<div id="content">
|
||||
<div class="layui-row" >
|
||||
<div id="cardInfo" class="layui-card"> <i class="layui-icon fa-bullhorn"></i> 短消息是本站系统给您发送的提醒消息,请务必阅读。如因自身未阅读导致出现的相关问题后果自负!</div>
|
||||
<div class="layui-card" style="padding-top: 10px">
|
||||
<!-- // 默认操作按钮 -->
|
||||
<div class="layui-card-header layadmin-card-header-auto ">
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- // 创建数据实例 -->
|
||||
<table id="lay-tableList" lay-filter="lay-tableList"></table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
layui.use(['table','jquery'], function () {
|
||||
|
||||
let $ = layui.jquery;
|
||||
let table = layui.table;
|
||||
|
||||
/*
|
||||
* 初始化表格
|
||||
*/
|
||||
let isTable = table.render({
|
||||
elem: "#lay-tableList"
|
||||
, url: "{:url('/user/message')}"
|
||||
, page: true
|
||||
, limit: 20
|
||||
, cols: [[
|
||||
{type: 'checkbox', width: 45},
|
||||
{
|
||||
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" >';
|
||||
if (e.status === 0) {
|
||||
title += '<i class="layui-icon fa-envelope"></i> ';
|
||||
} else {
|
||||
title += '<i class="layui-icon fa-envelope-o"></i> ';
|
||||
}
|
||||
title += e.title;
|
||||
title += '</a>';
|
||||
return title;
|
||||
}, title: '{:__("消息标题")}'
|
||||
},
|
||||
{field: 'send_ip', align: 'center',width: 220, title: '{:__("来源IP")}'},
|
||||
{field: 'type', align: 'center', width: 130, title: '{:__("消息类型")}'},
|
||||
{field: 'create_time', align: 'center', width: 200, title: '{:__("创建时间")}'},
|
||||
]]
|
||||
})
|
||||
|
||||
$('.layui-btn-post').click(function () {
|
||||
let status = $(this).data('status');
|
||||
$('.layui-btn-post').removeClass('layui-btn-normal').addClass('layui-btn-primary');
|
||||
$(this).addClass('layui-btn-normal').removeClass('layui-btn-primary');
|
||||
|
||||
isTable.reload({
|
||||
where: {status: status},
|
||||
page: {curr: 1}
|
||||
});
|
||||
});
|
||||
|
||||
$('body').on('click','.layui-table-text-red',function () {
|
||||
$(this).removeClass('layui-table-text-red');
|
||||
});
|
||||
|
||||
})
|
||||
</script>
|
||||
@@ -2,7 +2,7 @@
|
||||
<!-- 内容主体区域 -->
|
||||
<div id="content">
|
||||
<div class="layui-fluid">
|
||||
<form class="layui-form layui-form-fixed" action="/user/mobile">
|
||||
<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">
|
||||
@@ -16,7 +16,7 @@
|
||||
<input name="captcha" placeholder="{:__('请输入验证码')}" type="text" class="layui-input"
|
||||
autocomplete="off" lay-verify="required" maxlength="10"/>
|
||||
</div>
|
||||
<button class="layui-btn layui-btn-normal" type="button" lay-ajax data-url="/user/mobile"
|
||||
<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>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>消息管理 | {$site_name}</title>
|
||||
|
||||
@@ -1,246 +1,158 @@
|
||||
<layout name="layout:layout"/>
|
||||
<!-- 内容主体区域 -->
|
||||
<style>
|
||||
|
||||
.red {
|
||||
color: red;
|
||||
}
|
||||
.mt30 {
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
.layui-form {
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1024px) {
|
||||
|
||||
.layui-input-inline {
|
||||
min-width: 260px!important;
|
||||
}
|
||||
|
||||
.address {
|
||||
min-width: 639px!important;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
<div id="content">
|
||||
<div class="layui-row layui-col-space20">
|
||||
|
||||
<div class="layui-col-md9">
|
||||
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body goindex">
|
||||
<div class="layui-col-md8">
|
||||
<div class="tips"> Hi,{$user.nickname} <span class="regular"> 下午好,今天是你加入的第 {$user.create_time|distance_day} 天~</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md4">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="profile" class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<h2>个人信息</h2>
|
||||
|
||||
<div class="clear">
|
||||
<div class="layui-col-md3">
|
||||
<div class="contract-title">手机</div>
|
||||
<div class="contract-detail">+86 {$user.mobile}
|
||||
<i class="layui-icon fa-edit" title="编辑" lay-open data-title="修改手机"
|
||||
data-url="/user/mobile" data-area="500px,300px"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md3">
|
||||
<div class="contract-title">微信号</div>
|
||||
<div class="contract-detail">{$user.wechat|default='--'}</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md3">
|
||||
<div class="contract-title">办公室邮箱</div>
|
||||
<div class="contract-detail">{$user.email}
|
||||
<i class="layui-icon fa-edit" title="编辑" lay-open data-title="修改邮箱"
|
||||
data-url="/user/email" data-area="500px,300px"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md3">
|
||||
<div class="contract-title">登录IP</div>
|
||||
<div class="contract-detail">{$user.login_ip}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clear">
|
||||
<div class="layui-col-md3">
|
||||
<div class="contract-title">登陆次数</div>
|
||||
<div class="contract-detail">{$user.login_count}</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md3">
|
||||
<div class="contract-title">用户组</div>
|
||||
<div class="contract-detail">{$user.group.title}</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md3">
|
||||
<div class="contract-title">积分</div>
|
||||
<div class="contract-detail">{$user.score}</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md3">
|
||||
<div class="contract-title">加入时间</div>
|
||||
<div class="contract-detail">{$user.create_time}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md3">
|
||||
<div class="contract-title">所在住址</div>
|
||||
<div class="contract-detail">{$user.address}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">我的帖子</div>
|
||||
<div class="layui-card-body">
|
||||
<table class="layui-table" lay-skin="nob">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>标题</th>
|
||||
<th>回答数</th>
|
||||
<th>发表时间</th>
|
||||
<th>访问量</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-row">
|
||||
|
||||
<div id="cardInfo" class="layui-card">
|
||||
<span>温馨提示:</span>
|
||||
<span>1、请务必牢记您所填写的信息</span>
|
||||
<span>2、姓名、电话号码、公司名称、微信号等敏感信息,请谨慎填写</span>
|
||||
</div>
|
||||
<div class="layui-col-md3">
|
||||
|
||||
<div id="account" class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<div id="imgHead" class="layui-user-avatar">
|
||||
<img src="{$user.avatar}" alt="{$user.nickname}" class="avatar">
|
||||
</div>
|
||||
<div class="nickname">
|
||||
{$user.nickname}
|
||||
<span class="edits">
|
||||
<i class="layui-icon fa-edit" lay-open data-title="修改昵称" data-url="#nickname" data-area="398px,230px"></i>
|
||||
</span>
|
||||
</div>
|
||||
<div class="intro">{$user.heart}</div>
|
||||
|
||||
<div id="thrid" class="layui-input-inline">
|
||||
|
||||
<if check_user_third(
|
||||
'qq',$user['id']) >
|
||||
<a lay-ajax data-url="{:url('/third/unbind',['type'=> 'qq'])}" title="点击解绑" type="button"
|
||||
class="layui-btn layui-btn-sm"><i
|
||||
class="layui-icon layui-icon-login-qq"></i></a>
|
||||
<else/>
|
||||
<a href="{:url('/third/bind?type=qq&ref=/user/index')}" title="点击绑定" type="button" target="_top"
|
||||
class="layui-btn layui-btn-sm layui-bind-third"><i
|
||||
class="layui-icon layui-icon-login-qq"></i></a>
|
||||
</if>
|
||||
|
||||
<if check_user_third(
|
||||
'weixin',$user['id']) >
|
||||
<a lay-ajax data-url="{:url('/third/unbind?type=weixin')}" title="点击解绑" type="button"
|
||||
class="layui-btn layui-btn-sm"><i
|
||||
class="layui-icon layui-icon-login-wechat"></i></a>
|
||||
<else/>
|
||||
<a href="{:url('/third/bind')}?type=weixin&ref=/user/index" title="点击绑定" type="button"
|
||||
target="_top"
|
||||
class="layui-btn layui-btn-sm layui-bind-third"><i
|
||||
class="layui-icon layui-icon-login-wechat"></i></a>
|
||||
</if>
|
||||
|
||||
<if check_user_third(
|
||||
'weibo',$user['id']) >
|
||||
<a lay-ajax data-url="{:url('/third/unbind?type=weibo')}" title="点击解绑" type="button"
|
||||
class="layui-btn layui-btn-sm"><i
|
||||
class="layui-icon layui-icon-login-weibo"></i></a>
|
||||
<else/>
|
||||
<a href="{:url('/third/bind')}?type=wiebo&ref=/user/index" title="点击绑定" type="button"
|
||||
target="_top"
|
||||
class="layui-btn layui-btn-sm layui-bind-third"><i
|
||||
class="layui-icon layui-icon-login-weibo"></i></a>
|
||||
</if>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">APP KEY</div>
|
||||
<div id="appkey" class="layui-card-body">
|
||||
<notempty name="user.app_id">
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">app_id:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-form-mid layui-word-aux">{$user.app_id}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">app_secret:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-form-mid layui-word-aux">{$user.app_secret}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<button type="submit" class="layui-btn layui-btn-normal" lay-ajax=""
|
||||
data-url="/user/appid" data-reload="self">更换APPKEY
|
||||
</button>
|
||||
</div>
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">我的资料</div>
|
||||
<div class="layui-card-body" >
|
||||
<form action="/index/user/center" class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label mt30"><span class="red">*</span> 用户头像</label>
|
||||
<div id="imgHead" class="layui-user-avatar">
|
||||
<img src="{$user.avatar}" alt="{$user.nickname}" class="avatar">
|
||||
</div>
|
||||
<else/>
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-form-mid layui-word-aux">还没有生成appKey,请点击按钮生成!</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<button type="submit" class="layui-btn layui-btn-normal" lay-ajax=""
|
||||
data-url="/user/appid" data-reload="self">生成APPKEY
|
||||
</button>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="red">*</span> 用户昵称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="nickname" placeholder="用户昵称" class="layui-input" value="{$user.nickname}">
|
||||
</div>
|
||||
</notempty>
|
||||
</div>
|
||||
</div>
|
||||
<label class="layui-form-label"><span class="red">*</span> 真实姓名</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="name" placeholder="真实姓名" class="layui-input" value="{$user.name}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="red">*</span> 性别</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="gender" type="radio" value="1" title="男" <eq name="$user['gender']" value="1">checked</eq>>
|
||||
<input name="gender" type="radio" value="0" title="女" <eq name="$user['gender']" value="0">checked</eq>>
|
||||
</div>
|
||||
<label class="layui-form-label"><span class="red">*</span> 身份证号码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="idcard" placeholder="请输入身份证号" class="layui-input" value="{$user.idcard}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="red">*</span> 手机号码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input class="layui-input layui-disabled" disabled value="{$user.mobile|default='未绑定'}">
|
||||
</div>
|
||||
<label class="layui-form-label"><span class="red">*</span> 邮箱地址</label>
|
||||
<div class="layui-input-inline">
|
||||
<input class="layui-input layui-disabled" disabled value="{$user.email|default='member@domain.com'}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">用户心情</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="heart" placeholder="请输入用户心情" class="layui-input" value="{$user.heart}">
|
||||
</div>
|
||||
<label class="layui-form-label"><span class="red">*</span> 邮政编码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="zipcode" placeholder="请输入邮政编码" class="layui-input" value="{$user.zipcode}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="red">*</span> 家庭住址</label>
|
||||
<div class="layui-input-inline address">
|
||||
<input name="address" placeholder="请输入家庭住址" class="layui-input" value="{$user.address}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item" style="margin-top: 22px;text-align: center">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-inline">
|
||||
<button type="submit" class="layui-btn layui-btn-normal" lay-submit="" lay-filter="submit">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- // 修改用户昵称 -->
|
||||
<script type="text/html" id="nickname">
|
||||
<div class="layui-fluid layui-bg-white">
|
||||
<form class="layui-form layui-form-fixed" action="/user/profile">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('用户昵称')}</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="nickname" autocomplete="off" placeholder="{:__('请输入昵称')}" type="text"
|
||||
class="layui-input" lay-verify="required"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="submitPage" data-reload="parent" lay-submit>
|
||||
{:__('提交')}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
layui.use(['jquery', 'upload'], function () {
|
||||
layui.use(['jquery', 'upload','form'], function () {
|
||||
var $ = layui.jquery;
|
||||
var upload = layui.upload;
|
||||
var form = layui.form;
|
||||
|
||||
// 上传头像
|
||||
upload.render({
|
||||
elem: '.layui-user-avatar'
|
||||
, url: '/user/avatar?action=avatar' // 默认的上传地址
|
||||
, url: '/index/user/avatar?action=avatar' // 默认的上传地址
|
||||
, method: 'post'
|
||||
, accept: 'image'
|
||||
, before: function (res) {
|
||||
layer.msg('上传中');
|
||||
}, done: function (res, index, upload) {
|
||||
// 上传成功
|
||||
if (res.code === 200) {
|
||||
$('.avatar').attr('src', res.url + '?' + parseInt(100 * Math.random()));
|
||||
return layer.msg(res.msg);
|
||||
}
|
||||
|
||||
layer.msg(res.msg, 'error');
|
||||
}
|
||||
})
|
||||
|
||||
//监听提交
|
||||
form.on('submit(submit)', function(data){
|
||||
$.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>
|
||||
@@ -2,7 +2,7 @@
|
||||
<!-- 内容主体区域 -->
|
||||
<div id="content">
|
||||
<div class="layui-fluid">
|
||||
<form class="layui-form layui-form-fixed" action="/user/protection">
|
||||
<form class="layui-form layui-form-fixed" action="/index/user/protection">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('密保问题')}</label>
|
||||
<div class="layui-input-inline" style="width: 260px">
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
}
|
||||
</style>
|
||||
<div id="register" class="layui-fluid">
|
||||
<form class="layui-form layui-form-fixed" action="/user/register" method="post">
|
||||
<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>
|
||||
|
||||
@@ -1,4 +1,35 @@
|
||||
<layout name="layout:layout"/>
|
||||
<style>
|
||||
|
||||
.u-box {
|
||||
margin-left: 35px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1024px) {
|
||||
.setting-intro {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.u-box {
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 440px) {
|
||||
.u-box {
|
||||
width: 190px;
|
||||
}
|
||||
|
||||
#user-detail .layui-progress {
|
||||
width: 110px;
|
||||
}
|
||||
|
||||
.text-stress {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
<div id="content">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header"><h5>安全设置</h5></div>
|
||||
@@ -7,8 +38,8 @@
|
||||
<div class="layui-user-avatar fl" >
|
||||
<img src="{$user.avatar}" alt="" width="80">
|
||||
</div>
|
||||
<div class="fl" style="margin-left: 35px">
|
||||
<div class="u-info"><span class="label">会员ID:</span>{$user.id}</div>
|
||||
<div class="u-box fl">
|
||||
<div class="u-info"><span class="label">会员UID:</span>{$user.id|supplement_id}</div>
|
||||
<div class="u-info"><span class="label">注册日期:</span>{$user.create_time}</div>
|
||||
<div class="u-info">
|
||||
<span class="label">安全级别:</span>
|
||||
@@ -29,7 +60,7 @@
|
||||
<span class="setting-intro">安全性高的密码可以使账户更安全;互联网账号存在被盗风险,建议您定期更换密码</span>
|
||||
</div>
|
||||
<div class="setting-operate fr">
|
||||
<a lay-open="" data-title="修改密码" data-url="/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>
|
||||
|
||||
@@ -53,7 +84,7 @@
|
||||
</div>
|
||||
|
||||
<div class="setting-operate fr">
|
||||
<a lay-open data-title="修改手机" data-url="/user/mobile" data-area="500px,300px">修改</a>
|
||||
<a lay-open data-title="修改手机" data-url="/index/user/mobile" data-area="500px,300px">修改</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -77,7 +108,7 @@
|
||||
</div>
|
||||
|
||||
<div class="setting-operate fr">
|
||||
<a lay-open data-title="修改邮箱" data-url="/user/email" data-area="500px,300px">修改</a>
|
||||
<a lay-open data-title="修改邮箱" data-url="/index/user/email" data-area="500px,300px">修改</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -95,7 +126,7 @@
|
||||
</div>
|
||||
|
||||
<div class="setting-operate fr">
|
||||
<a lay-open data-title="设置密保" data-url="/user/protection" data-area="500px,300px">设置</a>
|
||||
<a lay-open data-title="设置密保" data-url="/index/user/protection" data-area="500px,300px">设置</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,15 +1,23 @@
|
||||
<!--// 初始化菜单-->
|
||||
<ul class="layui-nav layui-nav-tree" lay-filter="master">
|
||||
<li class="layui-nav-item layui-this">
|
||||
<a lay-href="/user/profile">控制台</a>
|
||||
</li>
|
||||
<!--// 前台菜单-->
|
||||
{:get_plugin_menu()}
|
||||
|
||||
<li class="layui-nav-item">
|
||||
<a class="#" href="javascript:;">账号设置</a>
|
||||
<a class="#" href="javascript:;">Dashboard</a>
|
||||
<dl class="layui-nav-child">
|
||||
<dd><a lay-href="/user/security">安全设置</a></dd>
|
||||
<dd class="layui-this"><a lay-href="/index/user/center">控制台</a></dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!--// 插件菜单开始-->
|
||||
{:get_plugin_menu_entry()}
|
||||
<!--// 插件菜单结束-->
|
||||
<li class="layui-nav-item">
|
||||
<a class="#" href="javascript:;">我的账户</a>
|
||||
<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/certification">实名认证</a></dd>
|
||||
<dd><a lay-href="/index/user/security">安全中心</a></dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
58
app/index/view/user/viewMessage.html
Normal file
58
app/index/view/user/viewMessage.html
Normal file
@@ -0,0 +1,58 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>查看消息</title>
|
||||
<include file="public:header"/>
|
||||
</head>
|
||||
<body>
|
||||
<style>
|
||||
|
||||
h1 {
|
||||
font-family: "helvetica neue", PingFangSC-Light, arial, "hiragino sans gb", "microsoft yahei ui", "microsoft yahei", simsun, sans-serif;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.layui-card-header {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.layui-text {
|
||||
padding: 10px!important;
|
||||
text-indent: 2em;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
.layui-text p {
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div class="layui-fluid">
|
||||
<div id="unread" data-count="{$unread|default='0'}"></div>
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">
|
||||
<h1>{$info.title}</h1>
|
||||
<p style="color: #3464ff">{$info.nickname|default='系统'} 于 {$info.create_time}</p>
|
||||
</div>
|
||||
<div class="layui-card-body layui-text">
|
||||
{$info.content|raw}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<script>
|
||||
layui.use('jquery', function () {
|
||||
let $ = layui.jquery;
|
||||
let unread = $('#unread').data('count');
|
||||
if (!unread) {
|
||||
top.layui.$('#notice').find('.layui-badge-dot').hide();
|
||||
top.layui.$('#notice').find('.fa-bell').removeClass('fa-bell').addClass('fa-bell-o');
|
||||
}
|
||||
|
||||
// 更新消息数量
|
||||
bellMessage(unread);
|
||||
|
||||
})
|
||||
</script>
|
||||
</html>
|
||||
Reference in New Issue
Block a user