文件选择器给modal加class防止被样式污染

This commit is contained in:
阿辉
2024-11-23 15:35:15 +08:00
parent 8ff773af3b
commit dac7ea90ae

View File

@@ -6,8 +6,7 @@
<el-option v-for="item, index in listAllData" :key="index" :value="String(item[props.valueKey])" <el-option v-for="item, index in listAllData" :key="index" :value="String(item[props.valueKey])"
:label="item.name" /> :label="item.name" />
</el-select> </el-select>
<div class="form-display" @mouseenter="formDisplayEnter" @mouseleave="formDisplayLeave" <div v-if="props.inputType === 'image'" style="position: relative;"
v-if="props.inputType === 'image'" style="position: relative;"
:style="{ width: props.inputSize + 'px', height: props.inputSize + 'px' }"> :style="{ width: props.inputSize + 'px', height: props.inputSize + 'px' }">
<el-image :src="data" fit="scale-down" :style="{ width: props.inputSize + 'px', aspectRatio: '1 / 1' }"> <el-image :src="data" fit="scale-down" :style="{ width: props.inputSize + 'px', aspectRatio: '1 / 1' }">
<template #error> <template #error>
@@ -26,8 +25,7 @@
<Close /> <Close />
</el-icon> </el-icon>
</div> </div>
<div class="form-display" @mouseenter="formDisplayEnter" @mouseleave="formDisplayLeave" <div v-if="props.inputType === 'video'"
v-if="props.inputType === 'video'"
style="position: relative; display: flex; align-items: center; justify-items: center;" style="position: relative; display: flex; align-items: center; justify-items: center;"
:style="{ width: props.inputSize * 2 + 'px', height: props.inputSize + 'px' }"> :style="{ width: props.inputSize * 2 + 'px', height: props.inputSize + 'px' }">
<video :src="data" :controls="false" :autoplay="true" :muted="true" :loop="true" <video :src="data" :controls="false" :autoplay="true" :muted="true" :loop="true"
@@ -44,8 +42,7 @@
<Close /> <Close />
</el-icon> </el-icon>
</div> </div>
<div class="form-display" @mouseenter="formDisplayEnter" @mouseleave="formDisplayLeave" <div v-if="props.inputType === 'audio'"
v-if="props.inputType === 'audio'"
style="position: relative; display: flex; align-items: center; justify-items: center;" style="position: relative; display: flex; align-items: center; justify-items: center;"
:style="{ width: props.inputSize * 2 + 'px', height: props.inputSize + 'px' }"> :style="{ width: props.inputSize * 2 + 'px', height: props.inputSize + 'px' }">
<audio :src="data" :controls="!!data" :autoplay="false" :muted="true" :loop="true" <audio :src="data" :controls="!!data" :autoplay="false" :muted="true" :loop="true"
@@ -64,7 +61,7 @@
</div> </div>
</div> </div>
<el-dialog v-model="selectVisiable" :draggable="false" width="50%" :align-center="false" <el-dialog v-model="selectVisiable" :draggable="false" width="50%" :align-center="false"
@open="if (listData.length === 0) listRequest();" @closed="clear"> @open="if (listData.length === 0) listRequest();" @closed="clear" modal-class="_overlay">
<template #header> <template #header>
<span class="el-dialog__title">文件选择</span> <span class="el-dialog__title">文件选择</span>
<el-divider style="margin: 0;" /> <el-divider style="margin: 0;" />
@@ -181,8 +178,6 @@ const listRequest = async () => {
pageForm.limit = res.limit; pageForm.limit = res.limit;
selectedInit(); selectedInit();
}; };
const formDisplayEnter = (e: MouseEvent) => (e.target as HTMLElement).style.setProperty('--fileselector-close-display', 'block');
const formDisplayLeave = (e: MouseEvent) => (e.target as HTMLElement).style.setProperty('--fileselector-close-display', 'none');
const listRequestAll = async () => { const listRequestAll = async () => {
if (props.inputType !== 'selector') return; if (props.inputType !== 'selector') return;
let res = await fileApi.GetAll(); let res = await fileApi.GetAll();
@@ -264,9 +259,8 @@ onMounted(() => {
</script> </script>
<style scoped> <style scoped>
.form-display { ._overlay {
--fileselector-close-display: none; width: unset !important;
overflow: hidden;
} }
.headerBar>* { .headerBar>* {
@@ -325,10 +319,13 @@ onMounted(() => {
} }
.closeHover { .closeHover {
display: var(--fileselector-close-display);
position: absolute; position: absolute;
right: 2px; right: 2px;
top: 2px; top: 2px;
cursor: pointer; cursor: pointer;
} }
.closeHover:hover {
color: black;
}
</style> </style>