| | |
| | | params |
| | | }); |
| | | } |
| | | // 获取头像 |
| | | export function getUserPhoto(params) { |
| | | return request({ |
| | | url: "/api/userQueryController/getUserPhoto", |
| | | method: "get", |
| | | responseType:'blob', |
| | | params |
| | | }); |
| | | } |
| | | // 上传头像 |
| | | export function updateUserPhoto(formData) { |
| | | return request({ |
| | | url: "/api/userQueryController/updateUserPhoto", |
| | | method: "post", |
| | | data:formData |
| | | }); |
| | | } |
| | |
| | | </el-tooltip> |
| | | <el-tooltip content="个人信息"> |
| | | <div> |
| | | <img :src="userInfo.avatar" |
| | | <img :src="avatar" |
| | | class="top-bar__img" |
| | | @click="gotoInfo"> |
| | | </div> |
| | |
| | | listenfullscreen(this.setScreen); |
| | | }, |
| | | computed: { |
| | | avatar(){ |
| | | return this.userInfo.avatar |
| | | }, |
| | | ...mapState({ |
| | | showDebug: state => state.common.showDebug, |
| | | showTheme: state => state.common.showTheme, |
| | |
| | | import {isURL, validatenull} from '@/util/validate' |
| | | import {deepClone, queryStringToObject} from '@/util/util' |
| | | import website from '@/config/website' |
| | | import {loginByUsername, loginBySocial, loginBySso, getUserInfo, logout, refreshToken, getButtons} from '@/api/user' |
| | | import {loginByUsername, loginBySocial, loginBySso, getUserInfo, logout, refreshToken, getButtons,getUserPhoto} from '@/api/user' |
| | | import {getTopMenu, getRoutes} from '@/api/system/menu' |
| | | import md5 from 'js-md5' |
| | | import func from "@/util/func"; |
| | |
| | | state.tenantId = tenantId; |
| | | setStore({name: 'tenantId', content: state.tenantId}) |
| | | }, |
| | | // SET_USER_INFO: (state, userInfo) => { |
| | | // getUserPhoto().then(res => { |
| | | // userInfo.avatar = URL.createObjectURL(res.data); |
| | | // console.log('userInfo',userInfo) |
| | | // }) |
| | | // state.userInfo = userInfo; |
| | | // setStore({name: 'userInfo', content: state.userInfo}) |
| | | // }, |
| | | SET_USER_INFO: (state, userInfo) => { |
| | | if (validatenull(userInfo.avatar)) { |
| | | userInfo.avatar = "/img/bg/img-logo.png"; |
| | | } |
| | | getUserPhoto().then(res => { |
| | | // 将 Blob 转换为 Base64 |
| | | const reader = new FileReader(); |
| | | reader.onloadend = (result) => { |
| | | userInfo.avatar = reader.result; // 存储 Base64 字符串 |
| | | |
| | | // 更新状态并存储到 localStorage |
| | | state.userInfo = userInfo; |
| | | setStore({name: 'userInfo', content: state.userInfo}) |
| | | setStore({ name: 'userInfo', content: state.userInfo }); |
| | | }; |
| | | reader.readAsDataURL(res.data); // 调用reader方法 |
| | | }); |
| | | }, |
| | | SET_ROLES: (state, roles) => { |
| | | state.roles = roles; |
| | |
| | | <span slot-scope="{ node, data }" class="el-tree-node__label"> |
| | | <span style="display: flex"> |
| | | <i v-if="data.oId=='parentNode'" class="iconShow el-icon-s-home"></i> |
| | | <icon-show v-else :name="data.iconPath"></icon-show> |
| | | <icon-show v-if="data.oId!='parentNode' && data.iconPath && data.iconPath!='undefined'" :name="data.iconPath"></icon-show> |
| | | {{ (node || {}).label }} |
| | | </span> |
| | | </span> |
| | |
| | | ] |
| | | }, |
| | | { |
| | | label: '编号', |
| | | label: '序号', |
| | | prop: 'seq', |
| | | width: 100, |
| | | type:'number', |
| | | labelWidth: 110, |
| | | hide: false, |
| | | rules: [ |
| | |
| | | } else { |
| | | return false; |
| | | } |
| | | done(); |
| | | }); |
| | | }, |
| | | |
| | |
| | | prop: 'plExtAttr' |
| | | }, { |
| | | label: '描述', |
| | | prop: 'plDesc' |
| | | prop: 'plDesc', |
| | | overHidden: true |
| | | }] |
| | | }, |
| | | data: [], |
| | |
| | | |
| | | <script> |
| | | import option from "@/option/user/info"; |
| | | import {getUserInfo, updateInfo, updatePassword} from "@/api/system/user"; |
| | | import { updateUser } from "@/api/system/user/api"; |
| | | import func from "../../../util/func"; |
| | | import {changePassword} from "../../../api/user" |
| | | import userAvatar from "./userAvatar"; |
| | |
| | | methods: { |
| | | handleSubmit(form, done) { |
| | | if (this.index === 0) { |
| | | updateInfo(form).then(res => { |
| | | updateUser(form).then(res => { |
| | | if (res.data.success) { |
| | | this.$message({ |
| | | type: "success", |
| | |
| | | } |
| | | done(); |
| | | }, error => { |
| | | window.console.log(error); |
| | | done(); |
| | | }) |
| | | } else { |
| | |
| | | handleWitch() { |
| | | if (this.index === 0) { |
| | | this.form = {...this.userInfo}; |
| | | console.log(this.form); |
| | | } |
| | | }, |
| | | handleTabClick(tabs) { |
| | |
| | | <script> |
| | | import store from "@/store"; |
| | | import { VueCropper } from "vue-cropper"; |
| | | import { uploadAvatar } from "@/api/system/user"; |
| | | import {getUserPhoto, updateUserPhoto} from "@/api/user"; |
| | | import {mapGetters} from "vuex"; |
| | | import {setStore} from '@/util/store' |
| | | |
| | | export default { |
| | | components: { VueCropper }, |
| | |
| | | visible: false, |
| | | // 弹出层标题 |
| | | title: "修改头像", |
| | | options: { |
| | | img: this.avatar, //裁剪图片的地址 |
| | | previews: {}, |
| | | resizeHandler: null |
| | | }; |
| | | }, |
| | | computed: { |
| | | ...mapGetters(["userInfo"]), |
| | | options() { |
| | | return { |
| | | img: this.userInfo.avatar, //裁剪图片的地址 |
| | | autoCrop: true, // 是否默认生成截图框 |
| | | autoCropWidth: 200, // 默认生成截图框宽度 |
| | | autoCropHeight: 200, // 默认生成截图框高度 |
| | | fixedBox: true, // 固定截图框大小 不允许改变 |
| | | outputType:"png", // 默认生成截图为PNG格式 |
| | | filename: 'avatar' // 文件名称 |
| | | }, |
| | | previews: {}, |
| | | resizeHandler: null |
| | | }; |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | // 编辑头像 |
| | |
| | | // 上传预处理 |
| | | beforeUpload(file) { |
| | | if (file.type.indexOf("image/") == -1) { |
| | | this.$modal.msgError("文件格式错误,请上传图片类型,如:JPG,PNG后缀的文件。"); |
| | | this.$message.error("文件格式错误,请上传图片类型,如:JPG,PNG后缀的文件。"); |
| | | } else { |
| | | const reader = new FileReader(); |
| | | reader.readAsDataURL(file); |
| | |
| | | this.options.img = reader.result; |
| | | this.options.filename = file.name; |
| | | }; |
| | | this.$refs.cropper.refresh(); |
| | | } |
| | | }, |
| | | // 上传图片 |
| | | uploadImg() { |
| | | this.$refs.cropper.getCropBlob(data => { |
| | | console.log(data); |
| | | |
| | | let formData = new FormData(); |
| | | formData.append("avatarfile", data, this.options.filename); |
| | | uploadAvatar(formData).then(response => { |
| | | formData.append("file", data, this.options.filename); |
| | | formData.append("username",this.userInfo.userId); |
| | | |
| | | updateUserPhoto(formData).then(response => { |
| | | this.open = false; |
| | | this.options.img = process.env.VUE_APP_BASE_API + response.imgUrl; |
| | | store.commit('SET_AVATAR', this.options.img); |
| | | this.$modal.msgSuccess("修改成功"); |
| | | this.$message.success('修改成功!'); |
| | | this.getUserInfo(); |
| | | this.visible = false; |
| | | }); |
| | | }); |
| | |
| | | }, |
| | | // 关闭窗口 |
| | | closeDialog() { |
| | | this.options.img = store.getters.avatar |
| | | this.options.img = this.userInfo.avatar; // 关闭窗口更新为缓存中的头像地址 如修改成功更新为最新的 如修改后未保存更新为缓存中的 |
| | | this.visible = false; |
| | | window.removeEventListener("resize", this.resizeHandler) |
| | | }, |
| | | // 更新缓存内容 |
| | | getUserInfo(){ |
| | | getUserPhoto().then(res => { |
| | | // 将 Blob 转换为 Base64 |
| | | const reader = new FileReader(); |
| | | reader.onloadend = (result) => { |
| | | this.userInfo.avatar = reader.result; // 存储 Base64 字符串 |
| | | |
| | | setStore({ name: 'userInfo', content: this.userInfo }); |
| | | }; |
| | | reader.readAsDataURL(res.data); // 调用reader方法 |
| | | }); |
| | | } |
| | | } |
| | | }; |