From b609f77709c4646daf155341475ae14fc0c7943d Mon Sep 17 00:00:00 2001 From: 祖安之光 <11848914+light-of-zuan@user.noreply.gitee.com> Date: 星期五, 27 六月 2025 13:25:30 +0800 Subject: [PATCH] 修改 --- src/layout/components/Navbar.vue | 198 ++++++++++++++++++++++++++++++++----------------- 1 files changed, 130 insertions(+), 68 deletions(-) diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue index 2cb8830..463aa7e 100644 --- a/src/layout/components/Navbar.vue +++ b/src/layout/components/Navbar.vue @@ -1,63 +1,92 @@ <template> <div class="navbar"> - <hamburger id="hamburger-container" :is-active="appStore.sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" /> - <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!settingsStore.topNav" /> - <top-nav id="topmenu-container" class="topmenu-container" v-if="settingsStore.topNav" /> + <hamburger id="hamburger-container" :is-active="appStore.sidebar.opened" class="hamburger-container" + @toggleClick="toggleSideBar"/> + <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!settingsStore.topNav"/> + <top-nav id="topmenu-container" class="topmenu-container" v-if="settingsStore.topNav"/> <div class="right-menu"> <template v-if="appStore.device !== 'mobile'"> -<!-- <header-search id="header-search" class="right-menu-item" />--> + <!-- <header-search id="header-search" class="right-menu-item" />--> -<!-- <el-tooltip content="源码地址" effect="dark" placement="bottom">--> -<!-- <ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />--> -<!-- </el-tooltip>--> + <!-- <el-tooltip content="源码地址" effect="dark" placement="bottom">--> + <!-- <ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />--> + <!-- </el-tooltip>--> -<!-- <el-tooltip content="文档地址" effect="dark" placement="bottom">--> -<!-- <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />--> -<!-- </el-tooltip>--> + <!-- <el-tooltip content="文档地址" effect="dark" placement="bottom">--> + <!-- <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />--> + <!-- </el-tooltip>--> - <screenfull id="screenfull" class="right-menu-item hover-effect" /> + <!-- <screenfull id="screenfull" class="right-menu-item hover-effect" />--> -<!-- <el-tooltip content="布局大小" effect="dark" placement="bottom">--> -<!-- <size-select id="size-select" class="right-menu-item hover-effect" />--> -<!-- </el-tooltip>--> + <!-- <el-tooltip content="布局大小" effect="dark" placement="bottom">--> + <!-- <size-select id="size-select" class="right-menu-item hover-effect" />--> + <!-- </el-tooltip>--> </template> <div class="avatar-container"> <el-dropdown @command="handleCommand" class="right-menu-item hover-effect" trigger="click"> <div class="avatar-wrapper"> -<!-- <img :src="userStore.avatar" class="user-avatar" />--> - <img src="../../assets/images/avator.png" class="user-avatar" /> - <el-icon><caret-bottom /></el-icon> + <img :src="avator" class="user-avatar"/> + <el-icon> + <caret-bottom/> + </el-icon> </div> <template #dropdown> <el-dropdown-menu> -<!-- <router-link to="/user/profile">--> -<!-- <el-dropdown-item>个人中心</el-dropdown-item>--> -<!-- </router-link>--> - <el-dropdown-item command="info"> - <span>基本信息</span> - </el-dropdown-item> + <!-- <router-link to="/user/profile">--> + <!-- <el-dropdown-item>个人中心</el-dropdown-item>--> + <!-- </router-link>--> + <!-- <el-dropdown-item command="setLayout" v-if="settingsStore.showSettings">--> + <!-- <span>布局设置</span>--> + <!-- </el-dropdown-item>--> <el-dropdown-item command="password"> <span>修改密码</span> </el-dropdown-item> - <el-dropdown-item divided command="logout"> + <el-dropdown-item command="logout"> <span>退出登录</span> </el-dropdown-item> </el-dropdown-menu> </template> </el-dropdown> </div> + <el-dialog + v-model="pwdDialog" + title="修改密码" + width="550px" + :before-close="handleClose" + > + <el-form :model="form" size="default" ref="pwdRef" :rules="formRules" label-width="110px"> + <el-form-item label="原密码" prop="oldPassword"> + <el-input v-model.trim="form.oldPassword" type="password" show-password + placeholder="请输入原密码"></el-input> + </el-form-item> + <el-form-item label="新密码" prop="newPassword"> + <el-input v-model.trim="form.newPassword" type="password" show-password + placeholder="请输入新密码"></el-input> + </el-form-item> + <el-form-item label="重复密码" prop="confirmPassword"> + <el-input v-model.trim="form.confirmPassword" type="password" show-password + placeholder="请再次输入新密码"></el-input> + </el-form-item> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="handleClose" size="default">取 消</el-button> + <el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button> + </span> + </template> + </el-dialog> </div> - <review-dialog ref="reviewRef" ></review-dialog> - <supervise-dialog ref="superRef"></supervise-dialog> </div> </template> <script setup> -import { ElMessageBox } from 'element-plus' +import {ElMessageBox} from 'element-plus' import Breadcrumb from '@/components/Breadcrumb' import TopNav from '@/components/TopNav' import Hamburger from '@/components/Hamburger' +import {reactive, ref} from 'vue' +import {ElMessage} from "element-plus"; import Screenfull from '@/components/Screenfull' import SizeSelect from '@/components/SizeSelect' import HeaderSearch from '@/components/HeaderSearch' @@ -66,34 +95,82 @@ import useAppStore from '@/store/modules/app' import useUserStore from '@/store/modules/user' import useSettingsStore from '@/store/modules/settings' -import {getToken, removeToken} from "@/utils/auth"; -import {onMounted, ref} from "vue"; -import Cookies from "js-cookie"; -import reviewDialog from "@/views/safetyReview/institution/components/viewInstitution.vue" -import superviseDialog from "@/views/safetyReview/userManage/superviseUsers/components/superviseDialog.vue" +import avator from '@/assets/images/avator.png' +import {updateUserPwd} from "@/api/system/user"; + +let validatePwd = (rule, value, callback) => { + const regex = /^(?=.*[A-Za-z])(?=.*\d).{8,}$/ + if (value === '') { + callback(new Error('请输入密码')) + } else { + if (!regex.test(value)) { + callback(new Error('密码须包含字母、数字,长度不少于8字符')) + } else { + callback() + } + } +} + +const equalToPassword = (rule, value, callback) => { + if (value === '') { + callback(new Error('请再次确认新密码')) + } else if (form.newPassword !== value) { + callback(new Error("两次输入的密码不一致")) + } else { + callback() + } +}; const appStore = useAppStore() const userStore = useUserStore() const settingsStore = useSettingsStore() -const reviewRef = ref(); -const superRef = ref(); -const userInfo = ref(); -onMounted(()=>{ - if(getToken()){ - userInfo.value = JSON.parse(Cookies.get('userInfo')) - console.log("userInfo",userInfo.value ) +const pwdDialog = ref(false) +const pwdRef = ref() - } +const form = reactive({ + newPassword: '', + oldPassword: '', + confirmPassword: '' }) + +const formRules = reactive({ + oldPassword: [{required: true, validator: validatePwd, trigger: 'blur'}], + newPassword: [{required: true, validator: validatePwd, trigger: 'blur'}], + confirmPassword: [{required: true, validator: equalToPassword, trigger: 'blur'}] +}) + +const onSubmit = async()=>{ + const valid = await pwdRef.value.validate(); + if(valid){ + const res = await updateUserPwd(form.oldPassword,form.newPassword) + if(res.code == 200){ + ElMessage.success('修改密码成功,请重新登录') + pwdDialog.value = false + logout() + }else{ + ElMessage.warning(res.msg) + } + } +} + +const handleClose = ()=>{ + form.value = { + newPassword: '', + oldPassword: '', + confirmPassword: '' + } + pwdDialog.value = false +} + function toggleSideBar() { appStore.toggleSideBar() } function handleCommand(command) { switch (command) { - case "info": - getInfo(); + case "setLayout": + setLayout(); break; case "logout": logout(); @@ -106,40 +183,25 @@ } } -function getInfo() { - console.log("getInfo") - //机构用户 - if(userInfo.value.identity === 1){ - const obj = { - agencyId: userInfo.value.agentId - } - reviewRef.value.openDialog(obj,'view') - } - //监管用户 - else if (userInfo.value.identity === 0) { - const obj = { - id: userInfo.value.id - } - superRef.value.openDialog('view', obj); - } -} -function editPsd() { - superRef.value.openDialog('pwd', userInfo.value); -} - function logout() { ElMessageBox.confirm('确定注销并退出系统吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { - removeToken() - location.href = '/homePage'; + userStore.logOut().then(() => { + location.href = '/index'; + }) + }).catch(() => { + }); +} - }).catch(() => { }); +function editPsd() { + pwdDialog.value = true } const emits = defineEmits(['setLayout']) + function setLayout() { emits('setLayout'); } @@ -151,8 +213,8 @@ overflow: hidden; position: relative; background: #fff; - border-radius: 0.4rem 0.4rem 0 0; - border-bottom: 1px solid #d5dce5; + box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08); + .hamburger-container { line-height: 46px; height: 100%; -- Gitblit v1.9.2