From 50db7ad27e1171c86d43d743e0a5ed0e8ed2b8e3 Mon Sep 17 00:00:00 2001
From: ali <ali9696@163.com>
Date: 星期四, 13 二月 2025 17:36:28 +0800
Subject: [PATCH] 屏蔽密码、个人信息、头像的修改提交
---
zhitan-vue/src/views/system/user/profile/index.vue | 152 +++++++++---------
zhitan-vue/src/views/system/user/profile/userInfo.vue | 98 ++++++-----
zhitan-vue/src/views/system/user/profile/resetPwd.vue | 71 ++++----
zhitan-vue/src/views/system/user/profile/userAvatar.vue | 101 ++++++------
4 files changed, 218 insertions(+), 204 deletions(-)
diff --git a/zhitan-vue/src/views/system/user/profile/index.vue b/zhitan-vue/src/views/system/user/profile/index.vue
index e34c98b..56ba9bc 100644
--- a/zhitan-vue/src/views/system/user/profile/index.vue
+++ b/zhitan-vue/src/views/system/user/profile/index.vue
@@ -1,87 +1,89 @@
<template>
- <div class="app-container">
- <el-row :gutter="20">
- <el-col :span="6" :xs="24">
- <el-card class="box-card">
- <template v-slot:header>
- <div class="clearfix">
- <span>涓汉淇℃伅</span>
- </div>
- </template>
- <div>
- <div class="text-center">
- <userAvatar />
- </div>
- <ul class="list-group list-group-striped">
- <li class="list-group-item">
- <svg-icon icon-class="user" />鐢ㄦ埛鍚嶇О
- <div class="pull-right">{{ state.user.userName }}</div>
- </li>
- <li class="list-group-item">
- <svg-icon icon-class="phone" />鎵嬫満鍙风爜
- <div class="pull-right">{{ state.user.phoneNumber }}</div>
- </li>
- <li class="list-group-item">
- <svg-icon icon-class="email" />鐢ㄦ埛閭
- <div class="pull-right">{{ state.user.email }}</div>
- </li>
- <li class="list-group-item">
- <svg-icon icon-class="tree" />鎵�灞為儴闂�
- <div class="pull-right" v-if="state.user.dept">{{ state.user.dept.deptName }} / {{ state.postGroup }}</div>
- </li>
- <li class="list-group-item">
- <svg-icon icon-class="peoples" />鎵�灞炶鑹�
- <div class="pull-right">{{ state.roleGroup }}</div>
- </li>
- <li class="list-group-item">
- <svg-icon icon-class="date" />鍒涘缓鏃ユ湡
- <div class="pull-right">{{ state.user.createTime }}</div>
- </li>
- </ul>
- </div>
- </el-card>
- </el-col>
- <el-col :span="18" :xs="24">
- <el-card>
- <template v-slot:header>
- <div class="clearfix">
- <span>鍩烘湰璧勬枡</span>
- </div>
- </template>
- <el-tabs v-model="activeTab">
- <el-tab-pane label="鍩烘湰璧勬枡" name="userinfo">
- <userInfo :user="state.user" />
- </el-tab-pane>
- <el-tab-pane label="淇敼瀵嗙爜" name="resetPwd">
- <resetPwd />
- </el-tab-pane>
- </el-tabs>
- </el-card>
- </el-col>
- </el-row>
- </div>
+ <div class="app-container">
+ <el-row :gutter="20">
+ <el-col :span="6" :xs="24">
+ <el-card class="box-card">
+ <template v-slot:header>
+ <div class="clearfix">
+ <span>涓汉淇℃伅</span>
+ </div>
+ </template>
+ <div>
+ <div class="text-center">
+ <userAvatar />
+ </div>
+ <ul class="list-group list-group-striped">
+ <li class="list-group-item">
+ <svg-icon icon-class="user" />鐢ㄦ埛鍚嶇О
+ <div class="pull-right">{{ state.user.userName }}</div>
+ </li>
+ <li class="list-group-item">
+ <svg-icon icon-class="phone" />鎵嬫満鍙风爜
+ <div class="pull-right">{{ state.user.phoneNumber }}</div>
+ </li>
+ <li class="list-group-item">
+ <svg-icon icon-class="email" />鐢ㄦ埛閭
+ <div class="pull-right">{{ state.user.email }}</div>
+ </li>
+ <li class="list-group-item">
+ <svg-icon icon-class="tree" />鎵�灞為儴闂�
+ <div class="pull-right" v-if="state.user.dept">
+ {{ state.user.dept.deptName }} / {{ state.postGroup }}
+ </div>
+ </li>
+ <li class="list-group-item">
+ <svg-icon icon-class="peoples" />鎵�灞炶鑹�
+ <div class="pull-right">{{ state.roleGroup }}</div>
+ </li>
+ <li class="list-group-item">
+ <svg-icon icon-class="date" />鍒涘缓鏃ユ湡
+ <div class="pull-right">{{ state.user.createTime }}</div>
+ </li>
+ </ul>
+ </div>
+ </el-card>
+ </el-col>
+ <el-col :span="18" :xs="24">
+ <el-card>
+ <template v-slot:header>
+ <div class="clearfix">
+ <span>鍩烘湰璧勬枡</span>
+ </div>
+ </template>
+ <el-tabs v-model="activeTab">
+ <el-tab-pane label="鍩烘湰璧勬枡" name="userinfo">
+ <userInfo :user="state.user" />
+ </el-tab-pane>
+ <el-tab-pane label="淇敼瀵嗙爜" name="resetPwd">
+ <resetPwd />
+ </el-tab-pane>
+ </el-tabs>
+ </el-card>
+ </el-col>
+ </el-row>
+ </div>
</template>
<script setup name="Profile">
-import userAvatar from "./userAvatar";
-import userInfo from "./userInfo";
-import resetPwd from "./resetPwd";
-import { getUserProfile } from "@/api/system/user";
+import userAvatar from "./userAvatar"
+import userInfo from "./userInfo"
+import resetPwd from "./resetPwd"
+import { getUserProfile } from "@/api/system/user"
-const activeTab = ref("userinfo");
+const activeTab = ref("userinfo")
const state = reactive({
user: {},
roleGroup: {},
- postGroup: {}
-});
+ postGroup: {},
+})
function getUser() {
- getUserProfile().then(response => {
- state.user = response.data;
- state.roleGroup = response.roleGroup;
- state.postGroup = response.postGroup;
- });
-};
+ getUserProfile().then((response) => {
+ state.user = response.data
+ state.roleGroup = response.roleGroup
+ state.postGroup = response.postGroup
+ })
+}
-getUser();
+getUser()
</script>
diff --git a/zhitan-vue/src/views/system/user/profile/resetPwd.vue b/zhitan-vue/src/views/system/user/profile/resetPwd.vue
index 96daef3..f4ab06f 100644
--- a/zhitan-vue/src/views/system/user/profile/resetPwd.vue
+++ b/zhitan-vue/src/views/system/user/profile/resetPwd.vue
@@ -1,57 +1,64 @@
<template>
- <el-form ref="pwdRef" :model="user" :rules="rules" label-width="80px">
- <el-form-item label="鏃у瘑鐮�" prop="oldPassword">
- <el-input v-model="user.oldPassword" placeholder="璇疯緭鍏ユ棫瀵嗙爜" type="password" show-password />
- </el-form-item>
- <el-form-item label="鏂板瘑鐮�" prop="newPassword">
- <el-input v-model="user.newPassword" placeholder="璇疯緭鍏ユ柊瀵嗙爜" type="password" show-password />
- </el-form-item>
- <el-form-item label="纭瀵嗙爜" prop="confirmPassword">
- <el-input v-model="user.confirmPassword" placeholder="璇风‘璁ゆ柊瀵嗙爜" type="password" show-password/>
- </el-form-item>
- <el-form-item>
- <el-button type="primary" @click="submit">淇濆瓨</el-button>
+ <el-form ref="pwdRef" :model="user" :rules="rules" label-width="80px">
+ <el-form-item label="鏃у瘑鐮�" prop="oldPassword">
+ <el-input v-model="user.oldPassword" placeholder="璇疯緭鍏ユ棫瀵嗙爜" type="password" show-password />
+ </el-form-item>
+ <el-form-item label="鏂板瘑鐮�" prop="newPassword">
+ <el-input v-model="user.newPassword" placeholder="璇疯緭鍏ユ柊瀵嗙爜" type="password" show-password />
+ </el-form-item>
+ <el-form-item label="纭瀵嗙爜" prop="confirmPassword">
+ <el-input v-model="user.confirmPassword" placeholder="璇风‘璁ゆ柊瀵嗙爜" type="password" show-password />
+ </el-form-item>
+ <el-form-item>
+ <!-- <el-button type="primary" @click="submit">淇濆瓨</el-button> -->
<el-button type="danger" @click="close">鍏抽棴</el-button>
- </el-form-item>
- </el-form>
+ </el-form-item>
+ </el-form>
</template>
<script setup>
-import { updateUserPwd } from "@/api/system/user";
+import { updateUserPwd } from "@/api/system/user"
-const { proxy } = getCurrentInstance();
+const { proxy } = getCurrentInstance()
const user = reactive({
oldPassword: undefined,
newPassword: undefined,
- confirmPassword: undefined
-});
+ confirmPassword: undefined,
+})
const equalToPassword = (rule, value, callback) => {
if (user.newPassword !== value) {
- callback(new Error("涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�"));
+ callback(new Error("涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�"))
} else {
- callback();
+ callback()
}
-};
+}
const rules = ref({
oldPassword: [{ required: true, message: "鏃у瘑鐮佷笉鑳戒负绌�", trigger: "blur" }],
- newPassword: [{ required: true, message: "鏂板瘑鐮佷笉鑳戒负绌�", trigger: "blur" }, { min: 6, max: 20, message: "闀垮害鍦� 6 鍒� 20 涓瓧绗�", trigger: "blur" }, { pattern: /^[^<>"'|\\]+$/, message: "涓嶈兘鍖呭惈闈炴硶瀛楃锛�< > \" ' \\\ |", trigger: "blur" }],
- confirmPassword: [{ required: true, message: "纭瀵嗙爜涓嶈兘涓虹┖", trigger: "blur" }, { required: true, validator: equalToPassword, trigger: "blur" }]
-});
+ newPassword: [
+ { required: true, message: "鏂板瘑鐮佷笉鑳戒负绌�", trigger: "blur" },
+ { min: 6, max: 20, message: "闀垮害鍦� 6 鍒� 20 涓瓧绗�", trigger: "blur" },
+ { pattern: /^[^<>"'|\\]+$/, message: "涓嶈兘鍖呭惈闈炴硶瀛楃锛�< > \" ' \\\ |", trigger: "blur" },
+ ],
+ confirmPassword: [
+ { required: true, message: "纭瀵嗙爜涓嶈兘涓虹┖", trigger: "blur" },
+ { required: true, validator: equalToPassword, trigger: "blur" },
+ ],
+})
/** 鎻愪氦鎸夐挳 */
function submit() {
- proxy.$refs.pwdRef.validate(valid => {
+ proxy.$refs.pwdRef.validate((valid) => {
if (valid) {
- updateUserPwd(user.oldPassword, user.newPassword).then(response => {
- proxy.$modal.msgSuccess("淇敼鎴愬姛");
- });
+ updateUserPwd(user.oldPassword, user.newPassword).then((response) => {
+ proxy.$modal.msgSuccess("淇敼鎴愬姛")
+ })
}
- });
-};
+ })
+}
/** 鍏抽棴鎸夐挳 */
function close() {
- proxy.$tab.closePage();
-};
+ proxy.$tab.closePage()
+}
</script>
diff --git a/zhitan-vue/src/views/system/user/profile/userAvatar.vue b/zhitan-vue/src/views/system/user/profile/userAvatar.vue
index 3b39636..94b898e 100644
--- a/zhitan-vue/src/views/system/user/profile/userAvatar.vue
+++ b/zhitan-vue/src/views/system/user/profile/userAvatar.vue
@@ -26,12 +26,7 @@
<br />
<el-row>
<el-col :lg="2" :md="2">
- <el-upload
- action="#"
- :http-request="requestUpload"
- :show-file-list="false"
- :before-upload="beforeUpload"
- >
+ <el-upload action="#" :http-request="requestUpload" :show-file-list="false" :before-upload="beforeUpload">
<el-button>
閫夋嫨
<el-icon class="el-icon--right"><Upload /></el-icon>
@@ -51,7 +46,7 @@
<el-button icon="RefreshRight" @click="rotateRight()"></el-button>
</el-col>
<el-col :lg="{ span: 2, offset: 6 }" :md="2">
- <el-button type="primary" @click="uploadImg()">鎻� 浜�</el-button>
+ <!-- <el-button type="primary" @click="uploadImg()">鎻� 浜�</el-button> -->
</el-col>
</el-row>
</el-dialog>
@@ -59,92 +54,92 @@
</template>
<script setup>
-import "vue-cropper/dist/index.css";
-import { VueCropper } from "vue-cropper";
-import { uploadAvatar } from "@/api/system/user";
-import useUserStore from "@/store/modules/user";
+import "vue-cropper/dist/index.css"
+import { VueCropper } from "vue-cropper"
+import { uploadAvatar } from "@/api/system/user"
+import useUserStore from "@/store/modules/user"
-const userStore = useUserStore();
-const { proxy } = getCurrentInstance();
+const userStore = useUserStore()
+const { proxy } = getCurrentInstance()
-const open = ref(false);
-const visible = ref(false);
-const title = ref("淇敼澶村儚");
+const open = ref(false)
+const visible = ref(false)
+const title = ref("淇敼澶村儚")
//鍥剧墖瑁佸壀鏁版嵁
const options = reactive({
- img: userStore.avatar, // 瑁佸壀鍥剧墖鐨勫湴鍧�
- autoCrop: true, // 鏄惁榛樿鐢熸垚鎴浘妗�
- autoCropWidth: 200, // 榛樿鐢熸垚鎴浘妗嗗搴�
- autoCropHeight: 200, // 榛樿鐢熸垚鎴浘妗嗛珮搴�
- fixedBox: true, // 鍥哄畾鎴浘妗嗗ぇ灏� 涓嶅厑璁告敼鍙�
- outputType: "png", // 榛樿鐢熸垚鎴浘涓篜NG鏍煎紡
- filename: 'avatar', // 鏂囦欢鍚嶇О
- previews: {} //棰勮鏁版嵁
-});
+ img: userStore.avatar, // 瑁佸壀鍥剧墖鐨勫湴鍧�
+ autoCrop: true, // 鏄惁榛樿鐢熸垚鎴浘妗�
+ autoCropWidth: 200, // 榛樿鐢熸垚鎴浘妗嗗搴�
+ autoCropHeight: 200, // 榛樿鐢熸垚鎴浘妗嗛珮搴�
+ fixedBox: true, // 鍥哄畾鎴浘妗嗗ぇ灏� 涓嶅厑璁告敼鍙�
+ outputType: "png", // 榛樿鐢熸垚鎴浘涓篜NG鏍煎紡
+ filename: "avatar", // 鏂囦欢鍚嶇О
+ previews: {}, //棰勮鏁版嵁
+})
/** 缂栬緫澶村儚 */
function editCropper() {
- open.value = true;
+ open.value = true
}
/** 鎵撳紑寮瑰嚭灞傜粨鏉熸椂鐨勫洖璋� */
function modalOpened() {
- visible.value = true;
+ visible.value = true
}
/** 瑕嗙洊榛樿涓婁紶琛屼负 */
function requestUpload() {}
/** 鍚戝乏鏃嬭浆 */
function rotateLeft() {
- proxy.$refs.cropper.rotateLeft();
+ proxy.$refs.cropper.rotateLeft()
}
/** 鍚戝彸鏃嬭浆 */
function rotateRight() {
- proxy.$refs.cropper.rotateRight();
+ proxy.$refs.cropper.rotateRight()
}
/** 鍥剧墖缂╂斁 */
function changeScale(num) {
- num = num || 1;
- proxy.$refs.cropper.changeScale(num);
+ num = num || 1
+ proxy.$refs.cropper.changeScale(num)
}
/** 涓婁紶棰勫鐞� */
function beforeUpload(file) {
if (file.type.indexOf("image/") == -1) {
- proxy.$modal.msgError("鏂囦欢鏍煎紡閿欒锛岃涓婁紶鍥剧墖绫诲瀷,濡傦細JPG锛孭NG鍚庣紑鐨勬枃浠躲��");
+ proxy.$modal.msgError("鏂囦欢鏍煎紡閿欒锛岃涓婁紶鍥剧墖绫诲瀷,濡傦細JPG锛孭NG鍚庣紑鐨勬枃浠躲��")
} else {
- const reader = new FileReader();
- reader.readAsDataURL(file);
+ const reader = new FileReader()
+ reader.readAsDataURL(file)
reader.onload = () => {
- options.img = reader.result;
- options.filename = file.name;
- };
+ options.img = reader.result
+ options.filename = file.name
+ }
}
}
/** 涓婁紶鍥剧墖 */
function uploadImg() {
- proxy.$refs.cropper.getCropBlob(data => {
- let formData = new FormData();
- formData.append("avatarfile", data, options.filename);
- uploadAvatar(formData).then(response => {
- open.value = false;
- options.img = import.meta.env.VITE_APP_BASE_API + response.imgUrl;
- userStore.avatar = options.img;
- proxy.$modal.msgSuccess("淇敼鎴愬姛");
- visible.value = false;
- });
- });
+ proxy.$refs.cropper.getCropBlob((data) => {
+ let formData = new FormData()
+ formData.append("avatarfile", data, options.filename)
+ uploadAvatar(formData).then((response) => {
+ open.value = false
+ options.img = import.meta.env.VITE_APP_BASE_API + response.imgUrl
+ userStore.avatar = options.img
+ proxy.$modal.msgSuccess("淇敼鎴愬姛")
+ visible.value = false
+ })
+ })
}
/** 瀹炴椂棰勮 */
function realTime(data) {
- options.previews = data;
+ options.previews = data
}
/** 鍏抽棴绐楀彛 */
function closeDialog() {
- options.img = userStore.avatar;
- options.visible = false;
+ options.img = userStore.avatar
+ options.visible = false
}
</script>
-<style lang='scss' scoped>
+<style lang="scss" scoped>
.user-info-head {
position: relative;
display: inline-block;
@@ -168,4 +163,4 @@
line-height: 110px;
border-radius: 50%;
}
-</style>
\ No newline at end of file
+</style>
diff --git a/zhitan-vue/src/views/system/user/profile/userInfo.vue b/zhitan-vue/src/views/system/user/profile/userInfo.vue
index f1d67b5..187c02e 100644
--- a/zhitan-vue/src/views/system/user/profile/userInfo.vue
+++ b/zhitan-vue/src/views/system/user/profile/userInfo.vue
@@ -1,67 +1,77 @@
<template>
- <el-form ref="userRef" :model="form" :rules="rules" label-width="80px">
- <el-form-item label="鐢ㄦ埛鏄电О" prop="nickName">
- <el-input v-model="form.nickName" maxlength="30" />
- </el-form-item>
- <el-form-item label="鎵嬫満鍙风爜" prop="phoneNumber">
- <el-input v-model="form.phoneNumber" maxlength="11" />
- </el-form-item>
- <el-form-item label="閭" prop="email">
- <el-input v-model="form.email" maxlength="50" />
- </el-form-item>
- <el-form-item label="鎬у埆">
- <el-radio-group v-model="form.sex">
- <el-radio label="0">鐢�</el-radio>
- <el-radio label="1">濂�</el-radio>
- </el-radio-group>
- </el-form-item>
- <el-form-item>
- <el-button type="primary" @click="submit">淇濆瓨</el-button>
+ <el-form ref="userRef" :model="form" :rules="rules" label-width="80px">
+ <el-form-item label="鐢ㄦ埛鏄电О" prop="nickName">
+ <el-input v-model="form.nickName" maxlength="30" />
+ </el-form-item>
+ <el-form-item label="鎵嬫満鍙风爜" prop="phoneNumber">
+ <el-input v-model="form.phoneNumber" maxlength="11" />
+ </el-form-item>
+ <el-form-item label="閭" prop="email">
+ <el-input v-model="form.email" maxlength="50" />
+ </el-form-item>
+ <el-form-item label="鎬у埆">
+ <el-radio-group v-model="form.sex">
+ <el-radio label="0">鐢�</el-radio>
+ <el-radio label="1">濂�</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item>
+ <!-- <el-button type="primary" @click="submit">淇濆瓨</el-button> -->
<el-button type="danger" @click="close">鍏抽棴</el-button>
- </el-form-item>
- </el-form>
+ </el-form-item>
+ </el-form>
</template>
<script setup>
-import { updateUserProfile } from "@/api/system/user";
+import { updateUserProfile } from "@/api/system/user"
const props = defineProps({
user: {
- type: Object
- }
-});
+ type: Object,
+ },
+})
-const { proxy } = getCurrentInstance();
+const { proxy } = getCurrentInstance()
-const form = ref({});
+const form = ref({})
const rules = ref({
nickName: [{ required: true, message: "鐢ㄦ埛鏄电О涓嶈兘涓虹┖", trigger: "blur" }],
- email: [{ required: true, message: "閭鍦板潃涓嶈兘涓虹┖", trigger: "blur" }, { type: "email", message: "璇疯緭鍏ユ纭殑閭鍦板潃", trigger: ["blur", "change"] }],
- phoneNumber: [{ required: true, message: "鎵嬫満鍙风爜涓嶈兘涓虹┖", trigger: "blur" }, { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜", trigger: "blur" }],
-});
+ email: [
+ { required: true, message: "閭鍦板潃涓嶈兘涓虹┖", trigger: "blur" },
+ { type: "email", message: "璇疯緭鍏ユ纭殑閭鍦板潃", trigger: ["blur", "change"] },
+ ],
+ phoneNumber: [
+ { required: true, message: "鎵嬫満鍙风爜涓嶈兘涓虹┖", trigger: "blur" },
+ { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜", trigger: "blur" },
+ ],
+})
/** 鎻愪氦鎸夐挳 */
function submit() {
- proxy.$refs.userRef.validate(valid => {
+ proxy.$refs.userRef.validate((valid) => {
if (valid) {
- updateUserProfile(form.value).then(response => {
- proxy.$modal.msgSuccess("淇敼鎴愬姛");
- props.user.phoneNumber = form.value.phoneNumber;
- props.user.email = form.value.email;
- });
+ updateUserProfile(form.value).then((response) => {
+ proxy.$modal.msgSuccess("淇敼鎴愬姛")
+ props.user.phoneNumber = form.value.phoneNumber
+ props.user.email = form.value.email
+ })
}
- });
-};
+ })
+}
/** 鍏抽棴鎸夐挳 */
function close() {
- proxy.$tab.closePage();
-};
+ proxy.$tab.closePage()
+}
// 鍥炴樉褰撳墠鐧诲綍鐢ㄦ埛淇℃伅
-watch(() => props.user, user => {
- if (user) {
- form.value = { nickName: user.nickName, phoneNumber: user.phoneNumber, email: user.email, sex: user.sex };
- }
-},{ immediate: true });
+watch(
+ () => props.user,
+ (user) => {
+ if (user) {
+ form.value = { nickName: user.nickName, phoneNumber: user.phoneNumber, email: user.email, sex: user.sex }
+ }
+ },
+ { immediate: true }
+)
</script>
--
Gitblit v1.9.3