160 lines
4.7 KiB
PHP
160 lines
4.7 KiB
PHP
<?php
|
|
// +----------------------------------------------------------------------
|
|
// | YwxApp [ WE CAN DO IT JUST THINK ]
|
|
// +----------------------------------------------------------------------
|
|
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
|
|
// +----------------------------------------------------------------------
|
|
// | Author: ywxapp<admin@ywxapp.cn>
|
|
// +----------------------------------------------------------------------
|
|
declare (strict_types = 1);
|
|
|
|
namespace app\member\controller;
|
|
|
|
use think\Request;
|
|
use ywxapp\service\FileStorageService;
|
|
use ywxapp\model\MemberProfile;
|
|
use ywxapp\model\Medal;
|
|
use app\member\validate\Profile as ProfileValidate;
|
|
|
|
use ywxapp\controller\MemberBase;
|
|
/**
|
|
* Profile 类
|
|
*
|
|
* @author ywxapp <admin@ywxapp.cn>
|
|
*/
|
|
class Profile extends MemberBase
|
|
{
|
|
|
|
/**
|
|
* 不需要登录验证的方法
|
|
* @var array
|
|
*/
|
|
protected $noNeedLogin = [];
|
|
|
|
/**
|
|
* 不需要权限验证的方法
|
|
* @var array
|
|
*/
|
|
protected $noNeedVerify = ['*'];
|
|
|
|
/**
|
|
* 控制器初始化 initialize
|
|
* @return void
|
|
*/
|
|
protected function initialize()
|
|
{}
|
|
|
|
/**
|
|
* 个人资料页
|
|
*/
|
|
public function index()
|
|
{
|
|
$user = $this->auth->model;
|
|
$this->view->assign('info', $user);
|
|
$this->view->assign('profile', $user->profile ?? new MemberProfile());
|
|
$this->view->assign('medals', Medal::getUserMedals((int) $user->uid));
|
|
|
|
return $this->view->fetch();
|
|
}
|
|
|
|
/**
|
|
* 保存个人资料
|
|
*/
|
|
public function update()
|
|
{
|
|
if (! $this->request->isPost()) {
|
|
$this->result->error('请求方式错误');
|
|
}
|
|
$data = $this->request->param();
|
|
$validate = new ProfileValidate();
|
|
if (! $validate->check($data)) {
|
|
$this->result->error($validate->getError());
|
|
}
|
|
$user = $this->auth->model;
|
|
|
|
// 基础资料(用户表)
|
|
$user->nickname = $data['nickname'] ?? $user->nickname;
|
|
$user->avatar = $data['avatar'] ?? $user->avatar;
|
|
$user->email = $data['email'] ?? $user->email;
|
|
$user->mobile = $data['mobile'] ?? $user->mobile;
|
|
$user->save();
|
|
|
|
// 扩展资料(user_profile 表)
|
|
$profile = $user->profile;
|
|
if (! $profile) {
|
|
$profile = new MemberProfile();
|
|
$profile->uid = $user->uid;
|
|
}
|
|
if (isset($data['gender'])) {
|
|
$profile->gender = (int) $data['gender'];
|
|
}
|
|
if (isset($data['bio'])) {
|
|
$profile->bio = $data['bio'];
|
|
}
|
|
$profile->save();
|
|
|
|
$this->result->success('保存成功');
|
|
}
|
|
|
|
/**
|
|
* 修改密码页
|
|
*/
|
|
public function password()
|
|
{
|
|
return $this->view->fetch('profile/password');
|
|
}
|
|
|
|
/**
|
|
* 保存新密码
|
|
*/
|
|
public function passwordSave()
|
|
{
|
|
if (! $this->request->isPost()) {
|
|
$this->result->error('请求方式错误');
|
|
}
|
|
$data = $this->request->param();
|
|
$validate = new ProfileValidate();
|
|
if (! $validate->scene('password')->check($data)) {
|
|
$this->result->error($validate->getError());
|
|
}
|
|
$user = $this->auth->model;
|
|
$old = (string) $this->request->param('old_password', '');
|
|
$new = (string) $this->request->param('password', '');
|
|
$new2 = (string) $this->request->param('password_confirm', '');
|
|
|
|
if ($new === '' || $new !== $new2) {
|
|
$this->result->error('两次新密码不一致或为空');
|
|
}
|
|
if (! $user->checkPassword($old)) {
|
|
$this->result->error('原密码错误');
|
|
}
|
|
$user->resetPassword($new);
|
|
$this->result->success('密码修改成功');
|
|
}
|
|
|
|
/**
|
|
* 头像上传(裁剪后的图片)
|
|
*/
|
|
public function avatar()
|
|
{
|
|
if ($this->request->isPost()) {
|
|
$file = $this->request->file('file');
|
|
if (! $file || ! $file->isValid()) {
|
|
$this->result->error('请选择上传文件', 400);
|
|
}
|
|
$type = $this->request->param('type', 'avatar');
|
|
$storage = new FileStorageService();
|
|
$result = $storage->upload($file, $type . '/' . date('Ymd'));
|
|
$info = $this->auth->model;
|
|
if ($info) {
|
|
$info->avatar = $result['storage'] == 'local' ? '/storage/' . $result['path'] : $result['url'];
|
|
$info->save();
|
|
$this->result->success(['src' => $info->avatar], '头像上传成功');
|
|
} else {
|
|
$this->result->error($file->getError(), 500);
|
|
}
|
|
}
|
|
return $this->view->fetch();
|
|
}
|
|
}
|