From 9ca554079555718e298efea45bbb46d951647e0d Mon Sep 17 00:00:00 2001
From: llj <132905093+newwwwwwtree@users.noreply.github.com>
Date: 星期三, 25 二月 2026 17:11:52 +0800
Subject: [PATCH] 侧边框修改密码功能

---
 src/layout/components/Navbar.vue    |   11 +++
 src/layout/components/UpdatePsw.vue |  132 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 142 insertions(+), 1 deletions(-)

diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
index 5d9ab49..56d54ee 100644
--- a/src/layout/components/Navbar.vue
+++ b/src/layout/components/Navbar.vue
@@ -31,17 +31,22 @@
           <el-dropdown-item @click.native="setLayout" v-if="setting">
             <span>甯冨眬璁剧疆</span>
           </el-dropdown-item>
+          <el-dropdown-item @click.native="handleUpdatePsw">
+            <span>淇敼瀵嗙爜</span>
+          </el-dropdown-item>
           <el-dropdown-item divided @click.native="logout">
             <span>閫�鍑虹櫥褰�</span>
           </el-dropdown-item>
         </el-dropdown-menu>
       </el-dropdown>
     </div>
+    <update-psw ref="pswDialog" />
   </div>
 </template>
 
 <script>
 import { mapGetters } from 'vuex'
+import UpdatePsw from '@/layout/components/UpdatePsw'
 import Breadcrumb from '@/components/Breadcrumb'
 import TopNav from '@/components/TopNav'
 import Hamburger from '@/components/Hamburger'
@@ -61,7 +66,8 @@
     SizeSelect,
     Search,
     RuoYiGit,
-    RuoYiDoc
+    RuoYiDoc,
+    UpdatePsw
   },
   computed: {
     ...mapGetters([
@@ -87,6 +93,9 @@
     }
   },
   methods: {
+      handleUpdatePsw() {
+      this.$refs.pswDialog.open()
+    },
     toggleSideBar() {
       this.$store.dispatch('app/toggleSideBar')
     },
diff --git a/src/layout/components/UpdatePsw.vue b/src/layout/components/UpdatePsw.vue
new file mode 100644
index 0000000..9b8fbcc
--- /dev/null
+++ b/src/layout/components/UpdatePsw.vue
@@ -0,0 +1,132 @@
+<template>
+  <el-dialog title="淇敼瀵嗙爜" :visible.sync="dialogVisible" width="500px" @close="handleClose">
+    <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+      <el-form-item label="褰撳墠鐢ㄦ埛">
+        <el-input v-model="form.currentUser" :readonly="true" />
+      </el-form-item>
+      <el-form-item label="褰撳墠瀵嗙爜">
+        <el-input v-model="form.oldPassword" type="password" :readonly="true" />
+      </el-form-item>
+      <el-form-item label="鏂板瘑鐮�" prop="newPassword">
+        <el-input v-model="form.newPassword" type="password" placeholder="6鍒�16涓瓧绗�" show-password />
+      </el-form-item>
+      <el-form-item label="纭鏂板瘑鐮�" prop="confirmPassword">
+        <el-input v-model="form.confirmPassword" type="password" placeholder="鍐嶆杈撳叆鏂板瘑鐮�" show-password />
+      </el-form-item>
+      <el-form-item label="閲戣澏浜戣处鍙�">
+        <el-input v-model="form.cloudUserName" />
+      </el-form-item>
+      <el-form-item label="閲戣澏浜戝瘑鐮�">
+        <el-input v-model="form.cloudUserPsd" type="password" show-password />
+      </el-form-item>
+    </el-form>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+      <el-button type="primary" @click="submitForm" :loading="submitting">纭� 璁� 淇� 鏀�</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+import request from '@/utils/request' 
+
+export default {
+  name: 'UpdatePsw',
+  data() {
+
+    const validateConfirm = (rule, value, callback) => {
+      if (value !== this.form.newPassword) {
+        callback(new Error('涓ゆ杈撳叆瀵嗙爜涓嶄竴鑷�'))
+      } else {
+        callback()
+      }
+    }
+    return {
+      dialogVisible: false, 
+      submitting: false,
+      form: {
+        currentUser: '',
+        oldPassword: '',
+        newPassword: '',
+        confirmPassword: '',
+        cloudUserName: '',
+        cloudUserPsd: ''
+      },
+      rules: {
+        newPassword: [
+          { required: true, message: '璇疯緭鍏ユ柊瀵嗙爜', trigger: 'blur' },
+          { min: 6, max: 16, message: '闀垮害鍦� 6 鍒� 16 涓瓧绗�', trigger: 'blur' }
+        ],
+        confirmPassword: [
+          { required: true, message: '璇峰啀娆¤緭鍏ユ柊瀵嗙爜', trigger: 'blur' },
+          { validator: validateConfirm, trigger: 'blur' }
+        ]
+      }
+    }
+  },
+  methods: {
+ 
+    open() {
+      this.form.currentUser = sessionStorage['HUserName'] || ''
+      this.form.oldPassword = sessionStorage['Czmm'] || ''
+      this.form.cloudUserName = sessionStorage['HCloudUserName'] || ''
+      this.form.cloudUserPsd = sessionStorage['HCloudUserPsd'] || ''
+      
+      this.form.newPassword = ''
+      this.form.confirmPassword = ''
+      this.dialogVisible = true
+
+      this.$nextTick(() => {
+        this.$refs.form?.clearValidate()
+      })
+    },
+
+    handleClose() {
+
+      this.$refs.form?.resetFields()
+    },
+ 
+    submitForm() {
+      this.$refs.form.validate(valid => {
+        if (!valid) return
+        this.submitting = true
+
+        const params = {
+          UserName: sessionStorage['Czybm'] || '', 
+          oldPassword: this.form.oldPassword,
+          PassWord: this.form.newPassword,
+          Repassword: this.form.confirmPassword,
+          HCloudUserName: this.form.cloudUserName,
+          HCloudUserPsd: this.form.cloudUserPsd
+        }
+        request({
+          url: '/Web/GetXGPassword', 
+          method: 'get',
+          params: params
+        }).then(res => {
+          if (res.count === 1) {
+         
+            this.$modal.msgSuccess(res.Message || '淇敼鎴愬姛')
+  
+            sessionStorage.clear()
+
+            this.$router.push('/index')
+      
+            this.dialogVisible = false
+          } else {
+   
+            this.$modal.msgError(res.Message || '淇敼澶辫触')
+          }
+        }).catch(err => {
+          this.$modal.msgError(err.message || '璇锋眰澶辫触')
+        }).finally(() => {
+          this.submitting = false
+        })
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+</style>
\ No newline at end of file

--
Gitblit v1.9.1