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