增加修改密码
This commit is contained in:
@@ -9,6 +9,8 @@ use \think\facade\Log;
|
||||
use \think\facade\Cache;
|
||||
use PHPMailer\PHPMailer\PHPMailer;
|
||||
use think\Response;
|
||||
use app\index\model\UserMessage;
|
||||
use app\index\model\SystemNotice;
|
||||
|
||||
class UserController extends BaseController
|
||||
{
|
||||
@@ -141,14 +143,22 @@ class UserController extends BaseController
|
||||
{
|
||||
try {
|
||||
Log::record('用户退出登录', 'info');
|
||||
|
||||
|
||||
// 清除所有会话和缓存数据
|
||||
session(null);
|
||||
Cache::tag('user_cache')->clear();
|
||||
|
||||
|
||||
// 清除所有cookie
|
||||
$cookies = ['user_id', 'user_account', 'user_name', 'user_avatar',
|
||||
'expire_time', 'is_auto_login', 'auto_login_attempted', 'PHPSESSID'];
|
||||
$cookies = [
|
||||
'user_id',
|
||||
'user_account',
|
||||
'user_name',
|
||||
'user_avatar',
|
||||
'expire_time',
|
||||
'is_auto_login',
|
||||
'auto_login_attempted',
|
||||
'PHPSESSID'
|
||||
];
|
||||
foreach ($cookies as $cookie) {
|
||||
cookie($cookie, null, ['expire' => -1]);
|
||||
}
|
||||
@@ -408,4 +418,218 @@ class UserController extends BaseController
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取系统通知列表
|
||||
*/
|
||||
public function getNotifications()
|
||||
{
|
||||
// 检查用户是否登录
|
||||
if (!cookie('user_account')) {
|
||||
return json(['code' => 1, 'msg' => '请先登录']);
|
||||
}
|
||||
|
||||
$type = $this->request->get('type', 'all'); // 获取通知类型:all, unread, read
|
||||
$userId = cookie('user_id');
|
||||
|
||||
try {
|
||||
// 构建查询条件
|
||||
$where = [
|
||||
['status', '=', 1] // 只获取启用的通知
|
||||
];
|
||||
|
||||
// 查询系统通知
|
||||
$notices = SystemNotice::where($where)
|
||||
->order('is_top', 'desc') // 置顶的排在前面
|
||||
->order('create_time', 'desc')
|
||||
->select();
|
||||
|
||||
// 格式化数据
|
||||
$data = [];
|
||||
foreach ($notices as $notice) {
|
||||
// 检查用户是否已读该通知
|
||||
$isRead = SystemNotice::where([
|
||||
['user_id', '=', $userId],
|
||||
['notice_id', '=', $notice->id],
|
||||
['is_read', '=', 1]
|
||||
])->find();
|
||||
|
||||
// 根据type过滤
|
||||
if ($type == 'unread' && $isRead)
|
||||
continue;
|
||||
if ($type == 'read' && !$isRead)
|
||||
continue;
|
||||
|
||||
$data[] = [
|
||||
'id' => $notice->id,
|
||||
'title' => $notice->title,
|
||||
'content' => $notice->content,
|
||||
'type' => $notice->type,
|
||||
'is_top' => $notice->is_top,
|
||||
'is_read' => $isRead ? 1 : 0,
|
||||
'create_time' => date('Y-m-d H:i:s', $notice->create_time)
|
||||
];
|
||||
}
|
||||
|
||||
return json(['code' => 0, 'msg' => '获取成功', 'data' => $data]);
|
||||
} catch (\Exception $e) {
|
||||
return json(['code' => 1, 'msg' => '获取失败:' . $e->getMessage()]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看通知详情
|
||||
*/
|
||||
public function readNotification()
|
||||
{
|
||||
// 检查用户是否登录
|
||||
if (!cookie('user_account')) {
|
||||
return json(['code' => 1, 'msg' => '请先登录']);
|
||||
}
|
||||
|
||||
$data = $this->request->post();
|
||||
$noticeId = $data['id'] ?? 0;
|
||||
$userId = cookie('user_id');
|
||||
|
||||
try {
|
||||
// 查询通知
|
||||
$notice = SystemNotice::where('id', $noticeId)
|
||||
->where('status', 1)
|
||||
->find();
|
||||
|
||||
if (!$notice) {
|
||||
return json(['code' => 1, 'msg' => '通知不存在']);
|
||||
}
|
||||
|
||||
// 记录用户已读状态
|
||||
$message = SystemNotice::where([
|
||||
['user_id', '=', $userId],
|
||||
['notice_id', '=', $noticeId]
|
||||
])->find();
|
||||
|
||||
if (!$message) {
|
||||
// 创建新的已读记录
|
||||
$message = new SystemNotice;
|
||||
$message->user_id = $userId;
|
||||
$message->notice_id = $noticeId;
|
||||
$message->is_read = 1;
|
||||
$message->read_time = time();
|
||||
$message->save();
|
||||
} elseif (!$message->is_read) {
|
||||
// 更新已读状态
|
||||
$message->is_read = 1;
|
||||
$message->read_time = time();
|
||||
$message->save();
|
||||
}
|
||||
|
||||
return json(['code' => 0, 'msg' => '操作成功']);
|
||||
} catch (\Exception $e) {
|
||||
return json(['code' => 1, 'msg' => '操作失败:' . $e->getMessage()]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 通知详情页面
|
||||
*/
|
||||
public function notificationDetail()
|
||||
{
|
||||
// 检查用户是否登录
|
||||
if (!cookie('user_account')) {
|
||||
return redirect('/index/user/login');
|
||||
}
|
||||
|
||||
$noticeId = $this->request->get('id');
|
||||
$userId = cookie('user_id');
|
||||
|
||||
try {
|
||||
// 查询通知
|
||||
$notice = SystemNotice::where('id', $noticeId)
|
||||
->where('status', 1)
|
||||
->find();
|
||||
|
||||
if (!$notice) {
|
||||
return $this->error('通知不存在');
|
||||
}
|
||||
|
||||
// 记录用户已读状态
|
||||
$message = SystemNotice::where([
|
||||
['user_id', '=', $userId],
|
||||
['notice_id', '=', $noticeId]
|
||||
])->find();
|
||||
|
||||
if (!$message) {
|
||||
// 创建新的已读记录
|
||||
$message = new SystemNotice;
|
||||
$message->user_id = $userId;
|
||||
$message->notice_id = $noticeId;
|
||||
$message->is_read = 1;
|
||||
$message->read_time = time();
|
||||
$message->save();
|
||||
} elseif (!$message->is_read) {
|
||||
// 更新已读状态
|
||||
$message->is_read = 1;
|
||||
$message->read_time = time();
|
||||
$message->save();
|
||||
}
|
||||
|
||||
// 增加查看次数
|
||||
$notice->view_count = $notice->view_count + 1;
|
||||
$notice->save();
|
||||
|
||||
View::assign('notice', $notice);
|
||||
return $this->fetch('notification_detail');
|
||||
} catch (\Exception $e) {
|
||||
return $this->error('获取通知详情失败:' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
//修改密码
|
||||
public function updatePassword()
|
||||
{
|
||||
// 检查用户是否登录
|
||||
if (!cookie('user_account')) {
|
||||
return redirect('/index/user/login');
|
||||
}
|
||||
|
||||
// 获取用户信息
|
||||
$user = Users::where('account', cookie('user_account'))->find();
|
||||
if (!$user) {
|
||||
return redirect('/index/user/login');
|
||||
}
|
||||
|
||||
// 如果是GET请求,显示修改密码页面
|
||||
if ($this->request->isGet()) {
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
// 如果是POST请求,处理密码修改
|
||||
if ($this->request->isPost()) {
|
||||
$data = $this->request->post();
|
||||
|
||||
// 验证旧密码
|
||||
if ($user->password !== md5($data['old_password'])) {
|
||||
return json(['code' => 1, 'msg' => '旧密码错误']);
|
||||
}
|
||||
|
||||
// 验证新密码
|
||||
if ($data['new_password'] !== $data['confirm_password']) {
|
||||
return json(['code' => 1, 'msg' => '两次输入的密码不一致']);
|
||||
}
|
||||
|
||||
// 更新密码
|
||||
$user->password = md5($data['new_password']);
|
||||
$user->update_time = time();
|
||||
|
||||
if ($user->save()) {
|
||||
// 清除登录状态
|
||||
cookie('user_id', null, ['expire' => -1]);
|
||||
cookie('user_account', null, ['expire' => -1]);
|
||||
cookie('user_name', null, ['expire' => -1]);
|
||||
cookie('user_avatar', null, ['expire' => -1]);
|
||||
|
||||
return json(['code' => 0, 'msg' => '密码修改成功,请重新登录']);
|
||||
} else {
|
||||
return json(['code' => 1, 'msg' => '密码修改失败']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user