车间能级提升-智能设备管理系统
feat(eims): 新增修改密码功能并优化用户初始密码设置- 在 SocialAuthStrategy 中使用 BCrypt 对用户初始密码进行加密- 在 eims-ui-mobile 中添加修改密码页面和相关功能
- 更新用户服务以支持修改密码操作
- 调整页面路由以包含新功能
已添加1个文件
已修改5个文件
164 ■■■■■ 文件已修改
eims-ui-mobile/src/pages.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui-mobile/src/pages/maint/maint-st.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui-mobile/src/pages/my/index.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui-mobile/src/pages/my/password.vue 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui-mobile/src/service/app/user.ts 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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",
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' },
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>
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>
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,
    },
  });
}
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); // å‡è®¾å­˜åœ¨æ’入方法