diff --git a/backend/apps/system/api/user.py b/backend/apps/system/api/user.py index 6a36bd9f..9ee8bf01 100644 --- a/backend/apps/system/api/user.py +++ b/backend/apps/system/api/user.py @@ -1,10 +1,11 @@ from fastapi import APIRouter from apps.system.crud.user import get_db_user, get_user_info from apps.system.models.user import UserModel -from apps.system.schemas.system_schema import UserCreator, UserEditor, UserGrid, UserLanguage +from apps.system.schemas.system_schema import PwdEditor, UserCreator, UserEditor, UserGrid, UserLanguage from common.core.deps import CurrentUser, SessionDep from common.core.pagination import Paginator from common.core.schemas import PaginatedResponse, PaginationParams +from common.core.security import md5pwd, verify_md5pwd from common.utils.time import get_timestamp router = APIRouter(tags=["user"], prefix="/user") @@ -66,10 +67,17 @@ async def langChange(session: SessionDep, current_user: CurrentUser, language: U lang = language.language if lang not in ["zh-CN", "en"]: return {"message": "Language not supported"} - db_user = session.get(UserModel, current_user.id) - if not db_user: - return {"message": "User not found"} + db_user: UserModel = get_db_user(session=session, user_id=current_user.id) db_user.language = lang session.add(db_user) session.commit() - return {"message": "Language changed successfully", "language": lang} \ No newline at end of file + return {"message": "Language changed successfully", "language": lang} + +@router.put("/pwd") +async def pwdUpdate(session: SessionDep, current_user: CurrentUser, editor: PwdEditor): + db_user: UserModel = get_db_user(session=session, user_id=current_user.id) + if not verify_md5pwd(editor.pwd, db_user.password): + raise RuntimeError("pwd error") + db_user.password = md5pwd(editor.new_pwd) + session.add(db_user) + session.commit() \ No newline at end of file diff --git a/backend/apps/system/schemas/system_schema.py b/backend/apps/system/schemas/system_schema.py index 1e9b33a7..83902a24 100644 --- a/backend/apps/system/schemas/system_schema.py +++ b/backend/apps/system/schemas/system_schema.py @@ -36,4 +36,8 @@ class UserEditor(UserCreator, BaseCreatorDTO): class UserGrid(UserEditor): create_time: int - language: str = "zh-CN" \ No newline at end of file + language: str = "zh-CN" + +class PwdEditor(BaseModel): + pwd: str + new_pwd: str \ No newline at end of file diff --git a/frontend/src/api/auth.ts b/frontend/src/api/auth.ts index e44062e9..98aa21df 100644 --- a/frontend/src/api/auth.ts +++ b/frontend/src/api/auth.ts @@ -8,4 +8,5 @@ export const userApi = { delete: (id: number) => request.delete(`/settings/terminology/${id}`), query: (id: number) => request.get(`/settings/terminology/${id}`), language: (data: any) => request.put('/user/language', data), + pwd: (data: any) => request.put('/user/pwd', data), } diff --git a/frontend/src/components/layout/Person.vue b/frontend/src/components/layout/Person.vue index 7f38a854..5f94f89d 100644 --- a/frontend/src/components/layout/Person.vue +++ b/frontend/src/components/layout/Person.vue @@ -8,7 +8,14 @@ import icon_translate_outlined from '@/assets/svg/icon_translate_outlined.svg' import icon_logout_outlined from '@/assets/svg/icon_logout_outlined.svg' import icon_right_outlined from '@/assets/svg/icon_right_outlined.svg' import icon_done_outlined from '@/assets/svg/icon_done_outlined.svg' - +import { useI18n } from 'vue-i18n' +import PwdForm from './PwdForm.vue' +import { useRouter } from 'vue-router' +import { useUserStore } from '@/stores/user' +const router = useRouter() +const userStore = useUserStore() +const pwdFormRef = ref() +const { t } = useI18n() defineProps({ collapse: { type: [Boolean], required: true }, }) @@ -16,6 +23,7 @@ defineProps({ const name = ref('飞小致') const currentLanguage = ref('zh-CN') const emit = defineEmits(['selectPerson']) +const dialogVisible = ref(false) const languageList = [ { name: 'English', @@ -37,6 +45,20 @@ const handlePersonChange = () => { const handleDefaultLanguageChange = (item: any) => { currentLanguage.value = item.value } + +const openPwd = () => { + dialogVisible.value = true +} +const closePwd = () => { + dialogVisible.value = false +} +const savePwdHandler = () => { + pwdFormRef.value?.submit() +} +const logout = () => { + userStore.logout() + router.push('/login') +} diff --git a/frontend/src/i18n/zh-CN.json b/frontend/src/i18n/zh-CN.json index 51b5ca6a..60213ed6 100644 --- a/frontend/src/i18n/zh-CN.json +++ b/frontend/src/i18n/zh-CN.json @@ -17,7 +17,8 @@ "save_success": "保存成功", "next": "下一步", "save": "保存", - "logout": "退出登录" + "logout": "退出登录", + "please_input": "请输入{msg}" }, "dashboard": { "select_dashboard": "请选择仪表板", @@ -246,5 +247,14 @@ "remark": "备注", "back_community": "还原至社区版", "confirm_tips": "确定还原至社区版?" + }, + "user": { + "title": "用户管理", + "upgrade_pwd": { + "title": "修改密码", + "old_pwd": "旧密码", + "new_pwd": "新密码", + "confirm_pwd": "确认密码" + } } }