Files
workspace/code/g3soft-libs/docs/examples/attachment/modal.vue
T
2026-10-11 22:14:13 +08:00

59 lines
1.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<script setup lang="ts">
// 弹窗用法:业务自己用 G3Modal 包一层,附件组件并不知道「弹窗」的存在
import { ref } from 'vue'
import { G3Attachment, G3Button, G3Modal } from '@g3soft/ui'
import type { AttachmentItem, AttachmentUploadContext } from '@g3soft/ui'
const open = ref(false)
// 从空列表开始:正好看到空态投放区 → 入队(底栏变"脏")→ 上传的完整过程
const files = ref<AttachmentItem[]>([])
const lastEvent = ref('')
function onUpload(incoming: File[], context: AttachmentUploadContext) {
files.value = [
...files.value,
...incoming.map((file, index) => ({
id: `local-${Date.now()}-${index}`,
name: file.name,
size: file.size,
categoryId: context.categoryId,
url: URL.createObjectURL(file),
})),
]
lastEvent.value = `已加入 ${incoming.length} 个文件`
}
function onRemove(items: AttachmentItem[]) {
const removed = new Set(items.map((item) => item.id))
files.value = files.value.filter((file) => !removed.has(file.id))
lastEvent.value = `已删除 ${items.length} 个文件`
}
</script>
<template>
<div>
<G3Button @click="open = true">打开附件管理</G3Button>
<p class="hint">{{ lastEvent }}</p>
<!-- 弹窗高度用 vh,附件组件再按 100% 撑满;不给 categories 就只有列表一栏 -->
<G3Modal v-model:open="open" title="附件管理" width="80%" :fullscreen="false">
<G3Attachment
v-model:files="files"
height="60vh"
@upload="onUpload"
@remove="onRemove"
/>
</G3Modal>
</div>
</template>
<style scoped>
.hint {
margin: 8px 0 0;
color: #8c8c8c;
font-size: 12px;
}
</style>