You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
2.4 KiB
Vue

1 month ago
<template>
<el-dialog v-model="dialogVisible" @close="handleClose" title="选择图件" style="width: 800px;height: 580px;"
:close-on-click-modal="false">
<el-tabs type="border-card" tab-position="top" v-model="activeTab">
<el-tab-pane label="地质图件" name="geologyImg">
<GeologyImg @selected-rows="selectedGeologyImgData" />
</el-tab-pane>
<el-tab-pane label="地质参数图件" name="geologyParamImg">
<GeologyParamImg @selected-rows="selectedGeologyParamImgData" />
</el-tab-pane>
</el-tabs>
<div class="oper-bottom">
<el-button type="warning" :icon="Close" @click="handleClose"></el-button>
<el-button type="primary" :icon="Check" @click="handleConfirm"></el-button>
</div>
</el-dialog>
</template>
<script setup>
import { Check, Close } from "@element-plus/icons-vue";
const { $toastMessage } = useNuxtApp();
const props = defineProps({
isVisible: {
type: Boolean,
default: false
}
});
const emit = defineEmits(['updateSelected', 'update:changeShowDialog']);
const activeTab = ref("geologyImg");
let selectedData = [];
const selectedGeologyImg = ref(null);
const selectedGeologyParamImg = ref(null);
// 控制弹出框显示
const dialogVisible = ref(props.isVisible);
const handleClose = () => {
dialogVisible.value = false;
emit('update:changeShowDialog', false);
};
// 确定选择事件
const handleConfirm = () => {
if (selectedGeologyImg.value?.length > 0 || selectedGeologyParamImg.value?.length > 0) {
if (selectedGeologyImg.value) {
selectedGeologyImg.value.forEach(item => {
selectedData.push(item);
});
}
if (selectedGeologyParamImg.value) {
selectedGeologyParamImg.value.forEach(item => {
selectedData.push(item);
});
}
emit('updateSelected', selectedData);
handleClose();
} else {
$toastMessage.warning("请选择图件!");
return;
}
}
const selectedGeologyImgData = (data) => {
selectedGeologyImg.value = data;
};
const selectedGeologyParamImgData = (data) => {
selectedGeologyParamImg.value = data;
};
</script>
<style scoped>
.oper-bottom {
padding: 5px;
display: flex;
justify-content: flex-end;
vertical-align: middle;
height: 40px;
margin-top: 10px;
}
</style>