perf: 用户管理-上传头像中弹框关闭立刻销毁内部popover,避免延迟关闭影响用户体验

This commit is contained in:
xiaoxian521 2024-01-16 08:57:56 +08:00
parent ebea78f53b
commit 9f7d49d37a
2 changed files with 17 additions and 2 deletions

View File

@ -10,6 +10,7 @@ const props = defineProps({
const emit = defineEmits(["cropper"]); const emit = defineEmits(["cropper"]);
const infos = ref(); const infos = ref();
const popoverRef = ref();
const refCropper = ref(); const refCropper = ref();
const showPopover = ref(false); const showPopover = ref(false);
const cropperImg = ref<string>(""); const cropperImg = ref<string>("");
@ -19,11 +20,22 @@ function onCropper({ base64, blob, info }) {
cropperImg.value = base64; cropperImg.value = base64;
emit("cropper", { base64, blob, info }); emit("cropper", { base64, blob, info });
} }
function hidePopover() {
popoverRef.value.hide();
}
defineExpose({ hidePopover });
</script> </script>
<template> <template>
<div v-loading="!showPopover" element-loading-background="transparent"> <div v-loading="!showPopover" element-loading-background="transparent">
<el-popover :visible="showPopover" placement="right" width="18vw"> <el-popover
ref="popoverRef"
:visible="showPopover"
placement="right"
width="18vw"
>
<template #reference> <template #reference>
<div class="w-[18vw]"> <div class="w-[18vw]">
<ReCropper <ReCropper

View File

@ -351,6 +351,7 @@ export function useUser(tableRef: Ref, treeRef: Ref) {
}); });
} }
const cropRef = ref();
/** 上传头像 */ /** 上传头像 */
function handleUpload(row) { function handleUpload(row) {
addDialog({ addDialog({
@ -360,6 +361,7 @@ export function useUser(tableRef: Ref, treeRef: Ref) {
closeOnClickModal: false, closeOnClickModal: false,
contentRenderer: () => contentRenderer: () =>
h(croppingUpload, { h(croppingUpload, {
ref: cropRef,
imgSrc: row.avatar, imgSrc: row.avatar,
onCropper: info => (avatarInfo.value = info) onCropper: info => (avatarInfo.value = info)
}), }),
@ -368,7 +370,8 @@ export function useUser(tableRef: Ref, treeRef: Ref) {
// 根据实际业务使用avatarInfo.value和row里的某些字段去调用上传头像接口即可 // 根据实际业务使用avatarInfo.value和row里的某些字段去调用上传头像接口即可
done(); // 关闭弹框 done(); // 关闭弹框
onSearch(); // 刷新表格数据 onSearch(); // 刷新表格数据
} },
closeCallBack: () => cropRef.value.hidePopover()
}); });
} }