| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- # -*- coding: utf-8 -*-
- # @Author : YY
- from typing import Annotated
- from flask_login import login_required
- from pydantic import Field, SecretStr
- from ruoyi_common.config import RuoYiConfig
- from ruoyi_common.constant import UserConstants
- from ruoyi_common.base.model import AjaxResponse, MultiFile
- from ruoyi_common.domain.entity import LoginUser, SysUser
- from ruoyi_common.domain.enum import BusinessType
- from ruoyi_common.descriptor.serializer import JsonSerializer
- from ruoyi_common.descriptor.validator import BodyValidator, FileValidator
- from ruoyi_common.utils.base import FileUploadUtil
- from ruoyi_common.utils import security_util as SecurityUtil
- from ruoyi_system.service import SysUserService
- from ruoyi_framework.service.token import TokenService
- from ruoyi_framework.descriptor.log import Log
- from ... import reg
- @reg.api.route("/system/user/profile", methods=["GET"])
- @login_required
- @JsonSerializer()
- def system_user_profile():
- '''
- 获取个人信息
- '''
- login_user: LoginUser = SecurityUtil.get_login_user()
- user: SysUser = login_user.user
- return AjaxResponse.from_success(data=user) \
- if user else AjaxResponse.from_error(msg="用户信息丢失")
- @reg.api.route("/system/user/profile", methods=["PUT"])
- @BodyValidator()
- @login_required
- @Log(title = "个人信息", business_type = BusinessType.UPDATE)
- @JsonSerializer()
- def system_user_profile_update(dto:SysUser):
- '''
- 修改个人信息
- '''
- login_user: LoginUser = SecurityUtil.get_login_user()
- user: SysUser = login_user.user
- dto.user_name = user.user_name
- if dto.phonenumber and UserConstants.NOT_UNIQUE == \
- SysUserService.check_phone_unique(dto):
- return AjaxResponse.from_error(msg=f"修改用户'{user.user_name}'失败,手机号码已存在")
- if dto.email and UserConstants.NOT_UNIQUE == SysUserService.check_email_unique(dto):
- return AjaxResponse.from_error(msg=f"修改用户'{user.user_name}'失败,邮箱账号已存在")
- dto.user_id = user.user_id
- dto.password = None
- if SysUserService.update_user_profile(dto):
- user.nick_name = dto.nick_name
- user.email = dto.email
- user.phonenumber = dto.phonenumber
- user.sex = dto.sex
- TokenService.set_login_user(login_user)
- return AjaxResponse.from_success()
- else:
- return AjaxResponse.from_error(msg="修改个人信息异常,请联系管理员")
- @reg.api.route("/system/user/profile/updatePwd", methods=["PUT"])
- @BodyValidator()
- @login_required
- @Log(title = "个人信息", business_type = BusinessType.UPDATE)
- @JsonSerializer()
- def system_user_profile_update_pwd(
- old_password:Annotated[SecretStr, Field(..., example='admin')],
- new_password:Annotated[SecretStr, Field(..., example='admin123')]
- ):
- '''
- 修改密码
- '''
- login_user: LoginUser = SecurityUtil.get_login_user()
- if not SecurityUtil.matches_password(
- old_password.get_secret_value(), login_user.user.password
- ):
- return AjaxResponse.from_error(msg="修改密码失败,旧密码错误")
- if SecurityUtil.matches_password(
- new_password.get_secret_value(), login_user.user.password
- ):
- return AjaxResponse.from_error(msg="修改密码失败,新密码不能与旧密码相同")
- if SysUserService.reset_user_pwd(
- login_user.user.user_name,
- SecurityUtil.encrypt_password(new_password.get_secret_value())
- ):
- login_user.user.password = SecurityUtil.encrypt_password(
- new_password.get_secret_value()
- )
- TokenService.set_login_user(login_user)
- return AjaxResponse.from_success()
- else:
- return AjaxResponse.from_error(msg="修改密码异常,请联系管理员")
- @reg.api.route("/system/user/profile/avatar", methods=["POST"])
- @FileValidator(include={"avatarfile"})
- @login_required
- @Log(title = "用户头像", business_type = BusinessType.UPDATE)
- @JsonSerializer()
- def system_user_profile_avatar(file:MultiFile):
- '''
- 头像上传
- '''
- file = file.get("avatarfile")
- if file:
- login_user: LoginUser = SecurityUtil.get_login_user()
- avatar_path = FileUploadUtil.upload(file,RuoYiConfig.profile)
- num = SysUserService.update_user_avatar(
- login_user.user_name,
- avatar_path
- )
- if num > 0:
- ajax_response = AjaxResponse.from_success()
- setattr(ajax_response, "img_url", avatar_path)
- login_user.user.avatar = avatar_path
- TokenService.set_login_user(login_user)
- return ajax_response
- else:
- return AjaxResponse.from_error(msg="上传头像失败,请联系管理员")
- else:
- return AjaxResponse.from_error(msg="上传头像异常,请联系管理员")
|