From 4506560a9de9c54e5b41cdc46c3ca84bf234386e Mon Sep 17 00:00:00 2001
From: kongdeqiang <123456>
Date: 星期六, 21 三月 2026 15:05:31 +0800
Subject: [PATCH] fix: 修改前端
---
src/utils/request.js | 2
src/api/user.js | 8 ++
src/layout/MainLayout.vue | 104 +++++++++++++++++++++++++++++++++-
src/views/Dashboard.vue | 2
src/views/data/Excel.vue | 8 +-
src/views/system/User.vue | 12 ++--
6 files changed, 119 insertions(+), 17 deletions(-)
diff --git a/src/api/user.js b/src/api/user.js
index 4e7ad49..eabea12 100644
--- a/src/api/user.js
+++ b/src/api/user.js
@@ -58,3 +58,11 @@
responseType: 'blob'
})
}
+
+export const changePassword = (data) => {
+ return request({
+ url: '/user/change-password',
+ method: 'post',
+ data
+ })
+}
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>
diff --git a/src/utils/request.js b/src/utils/request.js
index 00f43bf..ab5c2a2 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -5,7 +5,7 @@
const request = axios.create({
baseURL: '/api',
- timeout: 300000
+ timeout: 3600000
})
request.interceptors.request.use(
diff --git a/src/views/Dashboard.vue b/src/views/Dashboard.vue
index 6b18244..8c40caa 100644
--- a/src/views/Dashboard.vue
+++ b/src/views/Dashboard.vue
@@ -31,7 +31,7 @@
<el-card class="box-card">
<template #header>
<div class="card-header">
- <span>妯℃澘鎬绘暟</span>
+ <span>鏁版嵁鎬绘暟</span>
</div>
</template>
<div class="card-content">
diff --git a/src/views/data/Excel.vue b/src/views/data/Excel.vue
index a18c53b..d56d5fe 100644
--- a/src/views/data/Excel.vue
+++ b/src/views/data/Excel.vue
@@ -146,7 +146,7 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="BP鍚堝悓鍙�" prop="bpContractNo">
- <el-input v-model="form.bpContractNo" placeholder="璇疯緭鍏P鍚堝悓鍙�" />
+ <el-input v-model="form.bpContractNo" placeholder="璇疯緭鍏IP鍚堝悓鍙�" />
</el-form-item>
</el-col>
<el-col :span="12">
@@ -158,19 +158,19 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="BP鍙戠エ鍙�" prop="bpInvoiceNo">
- <el-input v-model="form.bpInvoiceNo" placeholder="璇疯緭鍏P鍙戠エ鍙�" />
+ <el-input v-model="form.bpInvoiceNo" placeholder="璇疯緭鍏IP鍙戠エ鍙�" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="鍙ゆ帶绯荤粺瀵瑰簲鍙戠エ鍙�" prop="gkInvoiceNo">
- <el-input v-model="form.gkInvoiceNo" placeholder="璇疯緭鍏ュ彜鎺х郴缁熷搴斿彂绁ㄥ彿" />
+ <el-input v-model="form.gkInvoiceNo" placeholder="璇疯緭鍏ョ櫨鏃虹郴缁熷搴斿彂绁ㄥ彿" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="涓氬姟鍏宠仈鍏崇郴" prop="businessRelation">
- <el-input v-model="form.businessRelation" placeholder="璇疯緭鍏ヤ笟鍔″叧鑱斿叧绯�" />
+ <el-input v-model="form.businessRelation" placeholder="璇疯緭鍏ュ洓鑰呮湭鍏宠仈鍘熷洜" />
</el-form-item>
</el-col>
<!-- <el-col :span="12">-->
diff --git a/src/views/system/User.vue b/src/views/system/User.vue
index bb6f9e5..2a47d67 100644
--- a/src/views/system/User.vue
+++ b/src/views/system/User.vue
@@ -34,11 +34,11 @@
<el-table :data="tableData" v-loading="loading" border stripe>
<el-table-column prop="id" label="ID" width="80" />
- <el-table-column prop="username" label="鐢ㄦ埛鍚�" width="120" />
- <el-table-column prop="realName" label="鐪熷疄濮撳悕" width="120" />
- <el-table-column prop="email" label="閭" width="180" />
- <el-table-column prop="phone" label="鎵嬫満鍙�" width="130" />
- <el-table-column prop="deptName" label="鎵�灞為儴闂�" width="150" />
+ <el-table-column prop="username" label="鐢ㄦ埛鍚�" width="150" />
+ <el-table-column prop="realName" label="鐪熷疄濮撳悕" width="150" />
+ <el-table-column prop="email" label="閭" width="220" />
+ <el-table-column prop="phone" label="鎵嬫満鍙�" width="150" />
+ <el-table-column prop="deptName" label="鎵�灞為儴闂�" width="220" />
<el-table-column prop="status" label="鐘舵��" width="80">
<template #default="{ row }">
<el-tag :type="row.status === 1 ? 'success' : 'danger'">
@@ -46,7 +46,7 @@
</el-tag>
</template>
</el-table-column>
- <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" width="180" />
+ <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" />
<el-table-column label="鎿嶄綔" fixed="right" width="180">
<template #default="{ row }">
<el-button type="primary" link :icon="Edit" @click="handleEdit(row)">缂栬緫</el-button>
--
Gitblit v1.9.1