From 3de63514e769ac64da604a3e7e3262b33e653884 Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期一, 16 六月 2025 13:55:29 +0800 Subject: [PATCH] feat(eims): 新增修改密码功能并优化用户初始密码设置- 在 SocialAuthStrategy 中使用 BCrypt 对用户初始密码进行加密- 在 eims-ui-mobile 中添加修改密码页面和相关功能 - 更新用户服务以支持修改密码操作 - 调整页面路由以包含新功能 --- eims-ui-mobile/src/pages/my/password.vue | 132 ++++++++++++++++++++++++++++++++++++++++++++ eims-ui-mobile/src/service/app/user.ts | 11 +++ eims-ui-mobile/src/pages/maint/maint-st.vue | 2 eims-ui-mobile/src/pages.json | 9 +++ eims-ui-mobile/src/pages/my/index.vue | 7 ++ eims/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java | 3 6 files changed, 162 insertions(+), 2 deletions(-) diff --git a/eims-ui-mobile/src/pages.json b/eims-ui-mobile/src/pages.json index dd4e52f..b5a08ca 100644 --- a/eims-ui-mobile/src/pages.json +++ b/eims-ui-mobile/src/pages.json @@ -165,6 +165,15 @@ } }, { + "path": "pages/my/password", + "type": "page", + "layout": "default", + "needLogin": true, + "style": { + "navigationBarTitleText": "淇敼瀵嗙爜" + } + }, + { "path": "pages/repair/repair-add", "type": "page", "layout": "default", diff --git a/eims-ui-mobile/src/pages/maint/maint-st.vue b/eims-ui-mobile/src/pages/maint/maint-st.vue index c58daa8..836d79d 100644 --- a/eims-ui-mobile/src/pages/maint/maint-st.vue +++ b/eims-ui-mobile/src/pages/maint/maint-st.vue @@ -138,7 +138,7 @@ // 鍘熸湁鐘舵�� const status = ref<string>('0') // 榛樿涓哄緟淇濆吇鐘舵�� const equName = ref<string>('-1') -const filterDate = ref<string>('1') +const filterDate = ref<string>('0') const filterDateList = ref<Record<string, any>[]>([ { label: '鎵�鏈夋暟鎹�', value: '0' }, diff --git a/eims-ui-mobile/src/pages/my/index.vue b/eims-ui-mobile/src/pages/my/index.vue index 41c97d5..63ce1b7 100644 --- a/eims-ui-mobile/src/pages/my/index.vue +++ b/eims-ui-mobile/src/pages/my/index.vue @@ -16,6 +16,7 @@ <wd-cell title="浜哄憳绠$悊" icon="usergroup" is-link custom-icon-class="icon-color-base" @click="handleInfo" /> </wd-cell-group> <wd-cell-group border class="mt-2"> + <wd-cell title="淇敼瀵嗙爜" icon="keywords" is-link custom-icon-class="icon-color-base" @click="handlePwd" /> <wd-cell title="閫�鍑虹櫥褰�" icon="login" is-link custom-icon-class="icon-color-base" @click="handleLogout" /> </wd-cell-group> </view> @@ -60,6 +61,12 @@ icon: 'none', }) } + +function handlePwd() { + uni.navigateTo({ + url: '/pages/my/password' + }) +} </script> <style lang="scss" scoped> diff --git a/eims-ui-mobile/src/pages/my/password.vue b/eims-ui-mobile/src/pages/my/password.vue new file mode 100644 index 0000000..499a649 --- /dev/null +++ b/eims-ui-mobile/src/pages/my/password.vue @@ -0,0 +1,132 @@ +<route lang="json5" type="page"> +{ + layout: 'default', + needLogin: true, + "style": { + "navigationBarTitleText": "淇敼瀵嗙爜" + } +} +</route> + +<template> + <view class="container"> + <wd-form ref="formRef" :model="form"> + <wd-cell-group custom-class="cell-group" border> + <wd-input + label="鏃у瘑鐮�" + label-width="100px" + clearable + show-word-limit + prop="oldPassword" + show-password + v-model="form.oldPassword" + placeholder="璇疯緭鍏ユ棫瀵嗙爜" + :rules="[{ required: true, message: '鏃у瘑鐮佷笉鑳戒负绌�' }]" + /> + <wd-input + label="鏂板瘑鐮�" + label-width="100px" + clearable + show-word-limit + prop="newPassword" + show-password + v-model="form.newPassword" + placeholder="璇疯緭鍏ユ柊瀵嗙爜" + :rules="[ + { required: true, message: '鏂板瘑鐮佷笉鑳戒负绌�' }, + { validator: validatePassword }, + ]" + /> + <wd-input + label="纭鏂板瘑鐮�" + label-width="100px" + clearable + show-word-limit + prop="confirmNewPassword" + show-password + v-model="form.confirmNewPassword" + placeholder="璇峰啀娆¤緭鍏ユ柊瀵嗙爜" + :rules="[ + { required: true, message: '纭鏂板瘑鐮佷笉鑳戒负绌�' }, + { validator: validatePassword }, + { + validator: (value) => value === form.newPassword, + message: '涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�' + } + ]" + /> + </wd-cell-group> + <view class="footer"> + <wd-button type="primary" class="mt-6" size="large" block @click="submit">鎻愪氦</wd-button> + </view> + </wd-form> + </view> +</template> + +<script lang="ts" setup> +import { ref, reactive } from 'vue' +import { updatePassword } from '@/service/app/user' +import { useUserStore, useAccessStore, useSystemConfigStore } from '@/store' + + +const userStore = useUserStore() +const accessStore = useAccessStore() +const configStore = useSystemConfigStore() + +const form = reactive({ + oldPassword: '', + newPassword: '', + confirmNewPassword: '' +}) +const formRef = ref() + +const validatePassword = (value) => { + if (value.length < 6) { + return Promise.reject('瀵嗙爜闀垮害涓嶈兘灏戜簬6浣�') + } + if (value.length > 20) { + return Promise.reject('瀵嗙爜闀垮害涓嶈兘瓒呰繃20浣�') + } + return Promise.resolve() +} + +const submit = () => { + + formRef.value.validate().then(({ valid, errors }) => { + if (valid) { + updatePassword(form.oldPassword, form.newPassword) + .then((response) => { + if (response.code === 200) { + uni.showToast({ + title: '淇敼瀵嗙爜鎴愬姛', + icon: 'success', + }) + userStore.clearUserInfo() + accessStore.clearAccessInfo() + configStore.clearConfigInfo() + uni.reLaunch({ + url: '/pages/login/index', + }) + } else { + uni.showToast({ + title: response.msg || '淇敼瀵嗙爜澶辫触', + icon: 'error', + }) + } + }) + .catch((error) => { + uni.showToast({ + title: error.msg || '淇敼瀵嗙爜澶辫触', + icon: 'error', + }) + }) + } + }) +} +</script> + +<style lang="scss" scoped> +.footer { + margin: 20px; +} +</style> diff --git a/eims-ui-mobile/src/service/app/user.ts b/eims-ui-mobile/src/service/app/user.ts index 2474272..c02287b 100644 --- a/eims-ui-mobile/src/service/app/user.ts +++ b/eims-ui-mobile/src/service/app/user.ts @@ -148,3 +148,14 @@ ...(options || {}), }); } + +/** 淇敼瀵嗙爜 POST /system/user/profile/updatePwd */ +export async function updatePassword(oldPassword: string, newPassword: string) { + return request<unknown>('/system/user/profile/updatePwd', { + method: 'PUT', + data: { + oldPassword, + newPassword, + }, + }); +} diff --git a/eims/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java b/eims/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java index ef2caf8..547f53e 100644 --- a/eims/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java +++ b/eims/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java @@ -1,5 +1,6 @@ package org.dromara.web.service.impl; +import cn.dev33.satoken.secure.BCrypt; import cn.dev33.satoken.stp.SaLoginModel; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.collection.CollUtil; @@ -90,7 +91,7 @@ newUser.setUserName(authUserData.getUsername()); newUser.setEmail(authUserData.getEmail()); newUser.setNickName(authUserData.getNickname()); - newUser.setPassword("Initial123@"); // 鍒濆瀵嗙爜闇�绗﹀悎瀹夊叏绛栫暐 + newUser.setPassword(BCrypt.hashpw("123456")); // 鍒濆瀵嗙爜闇�绗﹀悎瀹夊叏绛栫暐 newUser.setStatus("0"); userMapper.insert(newUser); // 鍋囪瀛樺湪鎻掑叆鏂规硶 -- Gitblit v1.9.3