From 155b4377630f688dca370df9976cb73bb0661e16 Mon Sep 17 00:00:00 2001
From: damonyuan <404054358@qq.com>
Date: Fri, 26 Dec 2025 12:09:58 +0800
Subject: [PATCH] =?UTF-8?q?feat=20=E5=A2=9E=E5=8A=A0=E9=A6=96=E6=AC=A1?=
=?UTF-8?q?=E7=99=BB=E5=BD=95=E5=BC=BA=E5=88=B6=E9=87=8D=E7=BD=AE=E5=AF=86?=
=?UTF-8?q?=E7=A0=81=E7=9A=84=E4=BA=A4=E4=BA=92?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
admin/src/views/account/login.vue | 46 ++++-
admin/src/views/user/setting.vue | 34 +++-
.../adminapi/auth/AdminController.java | 18 +-
.../admin/service/admin/IAdminService.java | 10 +-
.../service/impl/admin/AdminServiceImpl.java | 187 ++++++++++++------
.../system/SystemEditSelfValidate.java | 40 ++++
.../com/mdd/admin/vo/auth/AdminMySelfVo.java | 5 +
.../vo/system/SystemAuthAdminDetailVo.java | 3 +
.../com/mdd/common/entity/admin/Admin.java | 2 +
sql/install.sql | 3 +
10 files changed, 268 insertions(+), 80 deletions(-)
create mode 100644 server/like-admin/src/main/java/com/mdd/admin/validate/system/SystemEditSelfValidate.java
diff --git a/admin/src/views/account/login.vue b/admin/src/views/account/login.vue
index 20d066d5..2ff85c41 100644
--- a/admin/src/views/account/login.vue
+++ b/admin/src/views/account/login.vue
@@ -45,6 +45,27 @@
+
+
+
@@ -59,6 +80,7 @@ import LayoutFooter from '@/layout/components/footer.vue'
import useAppStore from '@/stores/modules/app'
import useUserStore from '@/stores/modules/user'
import cache from '@/utils/cache'
+import UserSetting from '@/views/user/setting.vue'
const passwordRef = shallowRef()
const formRef = shallowRef()
@@ -67,6 +89,7 @@ const userStore = useUserStore()
const route = useRoute()
const router = useRouter()
const remAccount = ref(false)
+const showForceChangePwd = ref(false)
const config = computed(() => appStore.config)
const formData = reactive({
account: '',
@@ -104,14 +127,27 @@ const handleLogin = async () => {
account: remAccount.value ? formData.account : ''
})
await userStore.login(formData)
- const {
- query: { redirect }
- } = route
- const path = typeof redirect === 'string' ? redirect : PageEnum.INDEX
- router.push(path)
+ const userInfo = await userStore.getUserInfo()
+ console.log('userInfo', userInfo)
+ // 检查是否首次登录
+ if (userInfo?.first_login === 1 || userInfo?.user?.first_login === 1) {
+ showForceChangePwd.value = true
+ return
+ }
+ window.location.href = '/workbench'
}
const { isLock, lockFn: lockLogin } = useLockFn(handleLogin)
+const handleForcePwdSuccess = async () => {
+ showForceChangePwd.value = false
+ window.location.href = '/workbench'
+}
+
+const handleForcePwdCancel = async () => {
+ await userStore.logout()
+ showForceChangePwd.value = false
+}
+
onMounted(() => {
const value = cache.get(ACCOUNT_KEY)
if (value?.remember) {
diff --git a/admin/src/views/user/setting.vue b/admin/src/views/user/setting.vue
index be75d14c..2312c61e 100644
--- a/admin/src/views/user/setting.vue
+++ b/admin/src/views/user/setting.vue
@@ -9,23 +9,23 @@
:rules="rules"
label-width="100px"
>
-
+
-
+
-
+
-
+
@@ -72,6 +76,16 @@ import { setUserInfo } from '@/api/user'
import useUserStore from '@/stores/modules/user'
import feedback from '@/utils/feedback'
+const props = defineProps<{
+ isFirstLogin?: boolean
+ tempPassword?: string
+}>()
+
+const emit = defineEmits<{
+ (event: 'success'): void
+ (event: 'cancel'): void
+}>()
+
const formRef = ref()
const userStore = useUserStore()
// 表单数据
@@ -109,6 +123,10 @@ const getUser = async () => {
//@ts-ignore
formData[key] = userInfo[key]
}
+ // 如果是首次登录强制修改密码,自动填充旧密码
+ if (props.isFirstLogin && props.tempPassword) {
+ formData.password_old = props.tempPassword
+ }
}
// 设置个人设置
@@ -143,7 +161,11 @@ const setUser = async () => {
}
}
await setUserInfo(formData)
- userStore.getUserInfo()
+ await userStore.getUserInfo()
+ if (props.isFirstLogin) {
+ feedback.msgSuccess('修改成功')
+ emit('success')
+ }
}
// 提交数据
diff --git a/server/like-admin/src/main/java/com/mdd/admin/controller/adminapi/auth/AdminController.java b/server/like-admin/src/main/java/com/mdd/admin/controller/adminapi/auth/AdminController.java
index 3e446f31..31f22233 100644
--- a/server/like-admin/src/main/java/com/mdd/admin/controller/adminapi/auth/AdminController.java
+++ b/server/like-admin/src/main/java/com/mdd/admin/controller/adminapi/auth/AdminController.java
@@ -4,6 +4,8 @@ import com.mdd.admin.LikeAdminThreadLocal;
import com.mdd.admin.service.IIndexService;
import com.mdd.admin.service.admin.IAdminRoleService;
import com.mdd.admin.service.admin.IAdminService;
+import com.mdd.admin.validate.system.SystemAdminUpInfoValidate;
+import com.mdd.admin.validate.system.SystemEditSelfValidate;
import com.mdd.admin.vo.auth.AdminMySelfVo;
import com.mdd.common.aop.NotLogin;
import com.mdd.common.aop.NotPower;
@@ -11,9 +13,9 @@ import com.mdd.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.checkerframework.checker.units.qual.A;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@@ -31,6 +33,9 @@ public class AdminController {
@Resource
IAdminRoleService iAdminRoleService;
+ @Resource
+ IAdminService iSystemAuthAdminService;
+
@NotPower
@GetMapping("/mySelf")
@ApiOperation(value="获取当前管理员信息")
@@ -43,4 +48,11 @@ public class AdminController {
return AjaxResult.success(mySelf);
}
+ @PostMapping("/editSelf")
+ @ApiOperation(value = "编辑当前管理员信息")
+ public AjaxResult