当前位置: 首页 > ops >正文

Nuxt3 全栈作品【通用信息管理系统】修改密码

最终效果

在这里插入图片描述

在这里插入图片描述

前端代码

layouts/default.vue

<el-dropdown-item @click="openEditPassword">修改密码
</el-dropdown-item>
const openEditPassword = () => {editPassword_dialogVisible.value = true;
};
const editPassword_dialogVisible = ref(false);
    <!-- 修改密码的弹窗 --><el-dialogtitle="修改密码"v-model="editPassword_dialogVisible"width="40%"><S-form:Model="editPassword_Model":colNum="1":local_save="editPassword_local_save":cancel="() => {editPassword_dialogVisible = false;}"></S-form></el-dialog>
const editPassword_Model = {newPassword: {label: "新密码",type: "password",require: true,},newPassword_confirm: {label: "密码确认",type: "password",formRules: [{ required: true, message: "请再次输入新密码", trigger: "blur" },],},
};const editPassword_local_save = async (formData: any) => {let error_msg = "";if (formData.newPassword !== formData.newPassword_confirm) {error_msg = "两次密码输入不一致";}if (error_msg) {callbackMessage.value = {show: true,valid: false,content: error_msg,};return;}try {await useFetch(`/api/user/${currentUser._id}`, {method: "PATCH",query: {handleType: "editPassword",newPassword: formData.newPassword,},});callbackMessage.value = {show: true,valid: true,content: "操作成功",};editPassword_dialogVisible.value = false;} catch (e: any) {callbackMessage.value = {show: true,valid: false,content: e.data.message,};}
};

依赖组件 S-form.vue

https://blog.csdn.net/weixin_41192489/article/details/149717692

接口开发

`/api/user/${currentUser._id}`

server/api/user/[id].patch.ts

// 用户的禁用、启用、重置密码
import { UserDataProps } from "~/server/models/user";
import bcrypt from "bcrypt";
export default defineEventHandler(async (event) => {const id = getRouterParam(event, "id");const query = getQuery(event);const { handleType, newPassword } = query;let newData: Partial<UserDataProps> = {};const config = useRuntimeConfig();switch (handleType) {case "disable":newData.disabled = true;break;case "enable":newData.disabled = false;break;case "resetPassword":newData = {password: await bcrypt.hash(config.bcrypt.defaultPassword,config.bcrypt.saltRounds),};break;case "editPassword":if (newPassword) {newData = {password: await bcrypt.hash(String(newPassword),config.bcrypt.saltRounds),};}break;default:break;}const newUser = UserSchema.findByIdAndUpdate(id, newData, { new: true });return newUser;
});

server/models/user.ts

见 https://blog.csdn.net/weixin_41192489/article/details/149709713

validators/user.ts

见 https://blog.csdn.net/weixin_41192489/article/details/149709713

http://www.xdnf.cn/news/16445.html

相关文章:

  • 亚远景-“过度保守”还是“激进创新”?ISO/PAS 8800的99.9%安全阈值之争
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博文章数据可视化分析-点赞区间实现
  • 【HTTP】防XSS+SQL注入:自定义HttpMessageConverter过滤链深度解决方案
  • 【数据标注】详解使用 Labelimg 进行数据标注的 Conda 环境搭建与操作流程
  • 572. 另一棵树的子树
  • 电子签章(PDF)
  • 【0基础PS】PS工具详解--选择工具--对象选择工具
  • 【Linux | 网络】传输层(UDP和TCP) - 两万字详细讲解!!
  • 利用软件定义无线USRP X410、X440 电推进无线原型设计
  • ksql连接数据库免输入密码交互
  • 设计模式(十四)行为型:职责链模式详解
  • 飞牛NAS本地化部署n8n打造个人AI工作流中心
  • 【Java系统接口幂等性解决实操】
  • SpringSecurity实战:核心配置技巧
  • 记录几个SystemVerilog的语法——时钟块和进程通信
  • 盛最多水的容器-leetcode
  • 洛谷 P10446 64位整数乘法-普及-
  • 详解力扣高频SQL50题之1164. 指定日期的产品价格【中等】
  • 3,Windows11安装docker保姆级教程
  • LeetCode 76:最小覆盖子串
  • mybatis的insert(pojo),会返回pojo吗
  • Petalinux生成文件的关系
  • 力扣面试150题--二进制求和
  • mmap机制
  • 2.qt调试日志输出
  • 《C++》STL--string详解(上)
  • vue3报错:this.$refs.** undefined
  • 在Podman/Docker容器中为Luckfox Lyra Zero W编译SDK:终极排错指南
  • Linux实战:从零搭建基于LNMP+NFS+DNS的WordPress博客系统
  • yolo11分类一键训练工具免安装环境windows版使用教程