RuoYi-Vue-Plus/ruoyi-ui/src/views/system/user/profile/userAvatar.vue

186 lines
5.5 KiB
Vue
Raw Normal View History

2020-02-13 10:48:51 +08:00
<template>
<div>
<div class="user-info-head" @click="editCropper()"><img v-bind:src="options.img" title="点击上传头像" class="img-circle img-lg" /></div>
Merge remote-tracking branch 'ruoyi-vue/master' into dev # Conflicts: # pom.xml # ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java # ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java # ruoyi-generator/pom.xml # ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java # ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java # ruoyi-generator/src/main/resources/vm/js/api.js.vm # ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm # ruoyi-generator/src/main/resources/vm/vue/index.vue.vm # ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm # ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java # ruoyi-ui/package.json # ruoyi-ui/src/api/monitor/server.js # ruoyi-ui/src/components/RuoYi/Doc/index.vue # ruoyi-ui/src/components/RuoYi/Git/index.vue # ruoyi-ui/src/components/SizeSelect/index.vue # ruoyi-ui/src/layout/components/Sidebar/Logo.vue # ruoyi-ui/src/layout/components/TagsView/index.vue # ruoyi-ui/src/layout/index.vue # ruoyi-ui/src/main.js # ruoyi-ui/src/plugins/download.js # ruoyi-ui/src/router/index.js # ruoyi-ui/src/store/modules/permission.js # ruoyi-ui/src/store/modules/settings.js # ruoyi-ui/src/store/modules/tagsView.js # ruoyi-ui/src/store/modules/user.js # ruoyi-ui/src/views/login.vue # ruoyi-ui/src/views/monitor/job/log.vue # ruoyi-ui/src/views/system/dict/data.vue # ruoyi-ui/src/views/system/role/index.vue # ruoyi-ui/src/views/system/user/authRole.vue # ruoyi-ui/src/views/system/user/index.vue # ruoyi-ui/src/views/system/user/profile/resetPwd.vue # ruoyi-ui/src/views/system/user/profile/userAvatar.vue # ruoyi-ui/src/views/system/user/profile/userInfo.vue
2021-11-25 19:39:53 +08:00
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body @opened="modalOpened" @close="closeDialog">
2020-02-13 10:48:51 +08:00
<el-row>
<el-col :xs="24" :md="12" :style="{height: '350px'}">
<vue-cropper
ref="cropper"
:img="options.img"
:info="true"
:autoCrop="options.autoCrop"
:autoCropWidth="options.autoCropWidth"
:autoCropHeight="options.autoCropHeight"
:fixedBox="options.fixedBox"
:outputType="options.outputType"
2020-02-13 10:48:51 +08:00
@realTime="realTime"
v-if="visible"
2020-02-13 10:48:51 +08:00
/>
</el-col>
<el-col :xs="24" :md="12" :style="{height: '350px'}">
<div class="avatar-upload-preview">
<img :src="previews.url" :style="previews.img" />
</div>
</el-col>
</el-row>
<br />
<el-row>
2022-10-21 11:21:59 +08:00
<el-col :lg="2" :sm="3" :xs="3">
2020-02-13 10:48:51 +08:00
<el-upload action="#" :http-request="requestUpload" :show-file-list="false" :before-upload="beforeUpload">
<el-button size="small">
选择
2020-02-13 10:48:51 +08:00
<i class="el-icon-upload el-icon--right"></i>
</el-button>
</el-upload>
</el-col>
<el-col :lg="{span: 1, offset: 2}" :sm="2" :xs="2">
2020-02-13 10:48:51 +08:00
<el-button icon="el-icon-plus" size="small" @click="changeScale(1)"></el-button>
</el-col>
<el-col :lg="{span: 1, offset: 1}" :sm="2" :xs="2">
2020-02-13 10:48:51 +08:00
<el-button icon="el-icon-minus" size="small" @click="changeScale(-1)"></el-button>
</el-col>
<el-col :lg="{span: 1, offset: 1}" :sm="2" :xs="2">
2020-02-13 10:48:51 +08:00
<el-button icon="el-icon-refresh-left" size="small" @click="rotateLeft()"></el-button>
</el-col>
<el-col :lg="{span: 1, offset: 1}" :sm="2" :xs="2">
2020-02-13 10:48:51 +08:00
<el-button icon="el-icon-refresh-right" size="small" @click="rotateRight()"></el-button>
</el-col>
<el-col :lg="{span: 2, offset: 6}" :sm="2" :xs="2">
2020-02-13 10:48:51 +08:00
<el-button type="primary" size="small" @click="uploadImg()"> </el-button>
</el-col>
</el-row>
</el-dialog>
</div>
</template>
<script>
import store from "@/store";
import { VueCropper } from "vue-cropper";
import { uploadAvatar } from "@/api/system/user";
import { debounce } from '@/utils'
2020-02-13 10:48:51 +08:00
export default {
components: { VueCropper },
data() {
return {
// 是否显示弹出层
open: false,
// 是否显示cropper
visible: false,
2020-02-13 10:48:51 +08:00
// 弹出层标题
title: "修改头像",
options: {
img: store.getters.avatar, //裁剪图片的地址
autoCrop: true, // 是否默认生成截图框
autoCropWidth: 200, // 默认生成截图框宽度
autoCropHeight: 200, // 默认生成截图框高度
2021-08-04 13:10:28 +08:00
fixedBox: true, // 固定截图框大小 不允许改变
outputType:"png", // 默认生成截图为PNG格式
2021-08-04 13:10:28 +08:00
filename: ''
2020-02-13 10:48:51 +08:00
},
previews: {},
resizeHandler: null
2020-02-13 10:48:51 +08:00
};
},
methods: {
// 编辑头像
editCropper() {
this.open = true;
},
// 打开弹出层结束时的回调
modalOpened() {
this.visible = true;
if (!this.resizeHandler) {
this.resizeHandler = debounce(() => {
this.refresh()
}, 100)
}
window.addEventListener("resize", this.resizeHandler)
},
// 刷新组件
refresh() {
this.$refs.cropper.refresh();
},
2020-02-13 10:48:51 +08:00
// 覆盖默认的上传行为
requestUpload() {
},
// 向左旋转
rotateLeft() {
this.$refs.cropper.rotateLeft();
},
// 向右旋转
rotateRight() {
this.$refs.cropper.rotateRight();
},
// 图片缩放
changeScale(num) {
num = num || 1;
this.$refs.cropper.changeScale(num);
},
// 上传预处理
beforeUpload(file) {
if (file.type.indexOf("image/") == -1) {
this.$modal.msgError("文件格式错误,请上传图片类型,如JPGPNG后缀的文件。");
2020-02-13 10:48:51 +08:00
} else {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => {
this.options.img = reader.result;
2021-08-04 13:10:28 +08:00
this.options.filename = file.name;
2020-02-13 10:48:51 +08:00
};
}
},
// 上传图片
uploadImg() {
this.$refs.cropper.getCropBlob(data => {
let formData = new FormData();
2021-08-04 13:10:28 +08:00
console.log(this.options.filename)
formData.append("avatarfile", data, this.options.filename);
2020-02-13 10:48:51 +08:00
uploadAvatar(formData).then(response => {
this.open = false;
2021-08-04 11:46:55 +08:00
this.options.img = response.data.imgUrl;
store.commit('SET_AVATAR', this.options.img);
this.$modal.msgSuccess("修改成功");
this.visible = false;
2020-02-13 10:48:51 +08:00
});
});
},
// 实时预览
realTime(data) {
this.previews = data;
},
// 关闭窗口
closeDialog() {
this.options.img = store.getters.avatar
Merge remote-tracking branch 'ruoyi-vue/master' into dev # Conflicts: # pom.xml # ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java # ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java # ruoyi-generator/pom.xml # ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java # ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java # ruoyi-generator/src/main/resources/vm/js/api.js.vm # ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm # ruoyi-generator/src/main/resources/vm/vue/index.vue.vm # ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm # ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java # ruoyi-ui/package.json # ruoyi-ui/src/api/monitor/server.js # ruoyi-ui/src/components/RuoYi/Doc/index.vue # ruoyi-ui/src/components/RuoYi/Git/index.vue # ruoyi-ui/src/components/SizeSelect/index.vue # ruoyi-ui/src/layout/components/Sidebar/Logo.vue # ruoyi-ui/src/layout/components/TagsView/index.vue # ruoyi-ui/src/layout/index.vue # ruoyi-ui/src/main.js # ruoyi-ui/src/plugins/download.js # ruoyi-ui/src/router/index.js # ruoyi-ui/src/store/modules/permission.js # ruoyi-ui/src/store/modules/settings.js # ruoyi-ui/src/store/modules/tagsView.js # ruoyi-ui/src/store/modules/user.js # ruoyi-ui/src/views/login.vue # ruoyi-ui/src/views/monitor/job/log.vue # ruoyi-ui/src/views/system/dict/data.vue # ruoyi-ui/src/views/system/role/index.vue # ruoyi-ui/src/views/system/user/authRole.vue # ruoyi-ui/src/views/system/user/index.vue # ruoyi-ui/src/views/system/user/profile/resetPwd.vue # ruoyi-ui/src/views/system/user/profile/userAvatar.vue # ruoyi-ui/src/views/system/user/profile/userInfo.vue
2021-11-25 19:39:53 +08:00
this.visible = false;
window.removeEventListener("resize", this.resizeHandler)
2020-02-13 10:48:51 +08:00
}
}
};
</script>
<style scoped lang="scss">
.user-info-head {
position: relative;
display: inline-block;
height: 120px;
}
.user-info-head:hover:after {
content: '+';
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
color: #eee;
background: rgba(0, 0, 0, 0.5);
font-size: 24px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
cursor: pointer;
line-height: 110px;
border-radius: 50%;
}
Merge remote-tracking branch 'ruoyi-vue/master' into dev # Conflicts: # pom.xml # ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java # ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java # ruoyi-generator/pom.xml # ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java # ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java # ruoyi-generator/src/main/resources/vm/js/api.js.vm # ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm # ruoyi-generator/src/main/resources/vm/vue/index.vue.vm # ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm # ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java # ruoyi-ui/package.json # ruoyi-ui/src/api/monitor/server.js # ruoyi-ui/src/components/RuoYi/Doc/index.vue # ruoyi-ui/src/components/RuoYi/Git/index.vue # ruoyi-ui/src/components/SizeSelect/index.vue # ruoyi-ui/src/layout/components/Sidebar/Logo.vue # ruoyi-ui/src/layout/components/TagsView/index.vue # ruoyi-ui/src/layout/index.vue # ruoyi-ui/src/main.js # ruoyi-ui/src/plugins/download.js # ruoyi-ui/src/router/index.js # ruoyi-ui/src/store/modules/permission.js # ruoyi-ui/src/store/modules/settings.js # ruoyi-ui/src/store/modules/tagsView.js # ruoyi-ui/src/store/modules/user.js # ruoyi-ui/src/views/login.vue # ruoyi-ui/src/views/monitor/job/log.vue # ruoyi-ui/src/views/system/dict/data.vue # ruoyi-ui/src/views/system/role/index.vue # ruoyi-ui/src/views/system/user/authRole.vue # ruoyi-ui/src/views/system/user/index.vue # ruoyi-ui/src/views/system/user/profile/resetPwd.vue # ruoyi-ui/src/views/system/user/profile/userAvatar.vue # ruoyi-ui/src/views/system/user/profile/userInfo.vue
2021-11-25 19:39:53 +08:00
</style>