增加修改密码

This commit is contained in:
2025-05-27 17:21:33 +08:00
parent 258a6743a9
commit 4838f1f589
3 changed files with 394 additions and 72 deletions
+228 -4
View File
@@ -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' => '密码修改失败']);
}
}
}
}