UploadMediaPopup.vue
1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<!--
* @Date: 2025-09-22 10:10:44
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-09-23 11:17:11
* @FilePath: /lls_program/src/components/UploadMediaPopup.vue
* @Description: 文件描述
-->
<template>
<PopupWrapper
v-model:visible="popupVisible"
position="bottom"
title="拍照留念"
height="80%"
:close-on-click-overlay="false"
@close="handleClose"
>
<UploadMediaComponent
:from="from"
:id="id"
@success="handleSuccess"
@close="handleClose"
/>
</PopupWrapper>
</template>
<script setup>
import { ref, defineProps, defineEmits, watch } from 'vue';
import PopupWrapper from '@/components/PopupWrapper.vue';
import UploadMediaComponent from '@/components/UploadMediaComponent.vue';
// 定义props
const props = defineProps({
// 控制弹窗显示/隐藏
visible: {
type: Boolean,
default: false
},
// 来源标识
from: {
type: String,
default: ''
},
// ID参数
id: {
type: String,
default: ''
}
});
// 定义emits
const emit = defineEmits(['update:visible', 'success', 'close']);
// 内部弹窗状态
const popupVisible = ref(false);
// 监听外部visible变化
watch(() => props.visible, (newVal) => {
popupVisible.value = newVal;
}, { immediate: true });
// 监听内部弹窗状态变化
watch(popupVisible, (newVal) => {
emit('update:visible', newVal);
});
/**
* 处理上传成功
* @param {Object} data - 上传成功的数据
*/
const handleSuccess = (data) => {
emit('success', data);
handleClose();
};
/**
* 处理关闭弹窗
*/
const handleClose = () => {
popupVisible.value = false;
emit('close');
};
</script>
<style lang="less" scoped>
// 组件样式由PopupWrapper和UploadMediaComponent提供
</style>