From 4506560a9de9c54e5b41cdc46c3ca84bf234386e Mon Sep 17 00:00:00 2001
From: kongdeqiang <123456>
Date: 星期六, 21 三月 2026 15:05:31 +0800
Subject: [PATCH] fix: 修改前端
---
src/layout/MainLayout.vue | 104 +++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 99 insertions(+), 5 deletions(-)
diff --git a/src/layout/MainLayout.vue b/src/layout/MainLayout.vue
index 7894884..db13252 100644
--- a/src/layout/MainLayout.vue
+++ b/src/layout/MainLayout.vue
@@ -2,7 +2,7 @@
<el-container class="main-layout">
<el-aside :width="isCollapse ? '64px' : '220px'" class="aside">
<div class="logo">
- <span v-if="!isCollapse">鏁版嵁绠$悊绯荤粺</span>
+ <span v-if="!isCollapse">鏁版嵁褰曞叆绯荤粺</span>
<span v-else>鏁版嵁</span>
</div>
<el-menu
@@ -37,11 +37,11 @@
<el-sub-menu index="data">
<template #title>
<el-icon><Upload /></el-icon>
- <span>鏁版嵁瀵煎叆绠$悊</span>
+ <span>鏁版嵁绠$悊</span>
</template>
<el-menu-item index="/data/excel">
<el-icon><Document /></el-icon>
- <template #title>Excel涓婁紶</template>
+ <template #title>鍗曚綅鏁版嵁涓婁紶</template>
</el-menu-item>
</el-sub-menu>
</el-menu>
@@ -50,8 +50,8 @@
<el-container>
<el-header class="header">
<div class="header-left">
- <el-icon
- class="collapse-btn"
+ <el-icon
+ class="collapse-btn"
:size="20"
@click="isCollapse = !isCollapse"
>
@@ -68,6 +68,7 @@
</span>
<template #dropdown>
<el-dropdown-menu>
+ <el-dropdown-item command="editPassword">淇敼瀵嗙爜</el-dropdown-item>
<el-dropdown-item command="logout">閫�鍑虹櫥褰�</el-dropdown-item>
</el-dropdown-menu>
</template>
@@ -79,6 +80,24 @@
<router-view />
</el-main>
</el-container>
+
+ <el-dialog v-model="passwordDialogVisible" title="淇敼瀵嗙爜" width="400px">
+ <el-form ref="passwordFormRef" :model="passwordForm" :rules="passwordRules" label-width="80px">
+ <el-form-item label="鍘熷瘑鐮�" prop="oldPassword">
+ <el-input v-model="passwordForm.oldPassword" type="password" placeholder="璇疯緭鍏ュ師瀵嗙爜" show-password />
+ </el-form-item>
+ <el-form-item label="鏂板瘑鐮�" prop="newPassword">
+ <el-input v-model="passwordForm.newPassword" type="password" placeholder="璇疯緭鍏ユ柊瀵嗙爜" show-password />
+ </el-form-item>
+ <el-form-item label="纭瀵嗙爜" prop="confirmPassword">
+ <el-input v-model="passwordForm.confirmPassword" type="password" placeholder="璇峰啀娆¤緭鍏ユ柊瀵嗙爜" show-password />
+ </el-form-item>
+ </el-form>
+ <template #footer>
+ <el-button @click="passwordDialogVisible = false">鍙栨秷</el-button>
+ <el-button type="primary" @click="handlePasswordChange" :loading="passwordLoading">纭畾</el-button>
+ </template>
+ </el-dialog>
</el-container>
</template>
@@ -86,12 +105,56 @@
import { ref, computed } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { useUserStore } from '@/stores/user'
+import { changePassword } from '@/api/user'
+import { ElMessage } from 'element-plus'
const route = useRoute()
const router = useRouter()
const userStore = useUserStore()
const isCollapse = ref(false)
+const passwordDialogVisible = ref(false)
+const passwordLoading = ref(false)
+const passwordFormRef = ref(null)
+
+const passwordForm = ref({
+ oldPassword: '',
+ newPassword: '',
+ confirmPassword: ''
+})
+
+const validateConfirmPassword = (rule, value, callback) => {
+ if (value === '') {
+ callback(new Error('璇峰啀娆¤緭鍏ユ柊瀵嗙爜'))
+ } else if (value !== passwordForm.value.newPassword) {
+ callback(new Error('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�'))
+ } else {
+ callback()
+ }
+}
+
+const validateNotSameAsOld = (rule, value, callback) => {
+ if (value === '') {
+ callback(new Error('璇疯緭鍏ユ柊瀵嗙爜'))
+ } else if (value === passwordForm.value.oldPassword) {
+ callback(new Error('鏂板瘑鐮佷笉鑳戒笌鍘熷瘑鐮佺浉鍚�'))
+ } else {
+ callback()
+ }
+}
+
+const passwordRules = {
+ oldPassword: [
+ { required: true, message: '璇疯緭鍏ュ師瀵嗙爜', trigger: 'blur' }
+ ],
+ newPassword: [
+ { required: true, validator: validateNotSameAsOld, trigger: 'blur' },
+ { min: 6, message: '瀵嗙爜闀垮害涓嶈兘灏戜簬6浣�', trigger: 'blur' }
+ ],
+ confirmPassword: [
+ { required: true, validator: validateConfirmPassword, trigger: 'blur' }
+ ]
+}
const activeMenu = computed(() => {
return route.path
@@ -101,8 +164,39 @@
if (command === 'logout') {
userStore.logout()
router.push('/login')
+ } else if (command === 'editPassword') {
+ passwordDialogVisible.value = true
+ passwordForm.value = {
+ oldPassword: '',
+ newPassword: '',
+ confirmPassword: ''
+ }
}
}
+
+const handlePasswordChange = async () => {
+ if (!passwordFormRef.value) return
+
+ await passwordFormRef.value.validate(async (valid) => {
+ if (valid) {
+ passwordLoading.value = true
+ try {
+ await changePassword({
+ oldPassword: passwordForm.value.oldPassword,
+ newPassword: passwordForm.value.newPassword
+ })
+ ElMessage.success('瀵嗙爜淇敼鎴愬姛')
+ passwordDialogVisible.value = false
+ userStore.logout()
+ router.push('/login')
+ } catch (error) {
+ ElMessage.error(error.message || '瀵嗙爜淇敼澶辫触')
+ } finally {
+ passwordLoading.value = false
+ }
+ }
+ })
+}
</script>
<style scoped>
--
Gitblit v1.9.1