parent
9f25ca8527
commit
6659f74e64
2 changed files with 279 additions and 9 deletions
@ -0,0 +1,205 @@ |
|||||||
|
<template> |
||||||
|
<div class="app-container"> |
||||||
|
<el-card> |
||||||
|
<div slot="header"> |
||||||
|
<span>传输管理器</span> |
||||||
|
<el-button |
||||||
|
type="text" |
||||||
|
style="float: right; padding: 3px 0" |
||||||
|
@click="clearRecords" |
||||||
|
> |
||||||
|
清空记录 |
||||||
|
</el-button> |
||||||
|
</div> |
||||||
|
<div class="date-divider"> |
||||||
|
<span class="date-text">2026-05-09</span> |
||||||
|
</div> |
||||||
|
<div v-if="transferList.length > 0" class="transfer-list"> |
||||||
|
<div v-for="item in transferList" :key="item.id" class="transfer-item"> |
||||||
|
<div class="file-icon"> |
||||||
|
<i class="el-icon-video-camera"></i> |
||||||
|
</div> |
||||||
|
<div class="file-info"> |
||||||
|
<div class="file-name">{{ item.name }}</div> |
||||||
|
<div class="file-meta"> |
||||||
|
<span class="file-size">{{ item.size }}</span> |
||||||
|
<span class="file-time">{{ item.time }}</span> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<el-tag :type="item.status">{{ item.status === "failed" ? "上传失败" : "上传成功" }}</el-tag> |
||||||
|
<div class="file-actions"> |
||||||
|
<el-button type="text" class="action-btn" @click="openFile(item)"> |
||||||
|
打开 |
||||||
|
</el-button> |
||||||
|
<el-button |
||||||
|
type="text" |
||||||
|
class="action-btn" |
||||||
|
@click="openLocation(item)" |
||||||
|
> |
||||||
|
打开位置 |
||||||
|
</el-button> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div v-else class="empty-state"> |
||||||
|
<i class="el-icon-folder-opened"></i> |
||||||
|
<span>暂无传输记录</span> |
||||||
|
</div> |
||||||
|
</el-card> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<script> |
||||||
|
const transferList = [ |
||||||
|
{ |
||||||
|
id: 1, |
||||||
|
name: "TG-2023-01-21-215030828.mp4", |
||||||
|
size: "11.86M", |
||||||
|
time: "14:33", |
||||||
|
status: "danger", |
||||||
|
path: "/uploads/TG-2023-01-21-215030828.mp4", |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 2, |
||||||
|
name: "TG-2023-01-21-215030828.mp4", |
||||||
|
size: "11.86M", |
||||||
|
time: "14:33", |
||||||
|
status: "success", |
||||||
|
path: "/uploads/TG-2023-01-21-215030828.mp4", |
||||||
|
}, |
||||||
|
]; |
||||||
|
|
||||||
|
export default { |
||||||
|
name: "UtilityPage", |
||||||
|
data() { |
||||||
|
return { |
||||||
|
transferList, |
||||||
|
}; |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
clearRecords() { |
||||||
|
this.$confirm("是否要清除本地传输记录?", "提示", { |
||||||
|
confirmButtonText: "确定", |
||||||
|
cancelButtonText: "取消", |
||||||
|
}) |
||||||
|
.then(() => { |
||||||
|
this.transferList = []; |
||||||
|
this.$message.success("已清空传输记录"); |
||||||
|
}) |
||||||
|
.catch(() => {}); |
||||||
|
}, |
||||||
|
openFile(item) { |
||||||
|
this.$message.info(`正在打开文件位置:${item.path}`); |
||||||
|
}, |
||||||
|
openLocation(item) { |
||||||
|
this.$message.info(`正在打开文件位置:${item.path}`); |
||||||
|
}, |
||||||
|
}, |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
.date-divider { |
||||||
|
text-align: center; |
||||||
|
margin-bottom: 15px; |
||||||
|
|
||||||
|
.date-text { |
||||||
|
font-size: 12px; |
||||||
|
color: #999; |
||||||
|
padding: 5px 20px; |
||||||
|
background: #f0f0f0; |
||||||
|
border-radius: 20px; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.transfer-list { |
||||||
|
.transfer-item { |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
padding: 15px; |
||||||
|
background: #f7f9f8; |
||||||
|
border-radius: 8px; |
||||||
|
margin-bottom: 10px; |
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); |
||||||
|
|
||||||
|
.file-icon { |
||||||
|
width: 48px; |
||||||
|
height: 48px; |
||||||
|
border-radius: 8px; |
||||||
|
background: #655dd4; |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
justify-content: center; |
||||||
|
color: #fff; |
||||||
|
font-size: 20px; |
||||||
|
margin-right: 15px; |
||||||
|
} |
||||||
|
|
||||||
|
.file-info { |
||||||
|
flex: 1; |
||||||
|
|
||||||
|
.file-name { |
||||||
|
font-size: 14px; |
||||||
|
color: #333; |
||||||
|
margin-bottom: 4px; |
||||||
|
} |
||||||
|
|
||||||
|
.file-meta { |
||||||
|
display: flex; |
||||||
|
gap: 15px; |
||||||
|
font-size: 12px; |
||||||
|
color: #999; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.status-tag { |
||||||
|
font-size: 12px; |
||||||
|
padding: 4px 12px; |
||||||
|
border-radius: 4px; |
||||||
|
margin-right: 15px; |
||||||
|
|
||||||
|
&.failed { |
||||||
|
background: #fff3e0; |
||||||
|
color: #f57c00; |
||||||
|
} |
||||||
|
|
||||||
|
&.success { |
||||||
|
background: #e8f5e9; |
||||||
|
color: #2e7d32; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.file-actions { |
||||||
|
display: flex; |
||||||
|
gap: 10px; |
||||||
|
|
||||||
|
.action-btn { |
||||||
|
color: #009696; |
||||||
|
font-size: 13px; |
||||||
|
|
||||||
|
&:hover { |
||||||
|
color: #00796b; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.empty-state { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
align-items: center; |
||||||
|
justify-content: center; |
||||||
|
padding: 60px 0; |
||||||
|
color: #999; |
||||||
|
|
||||||
|
i { |
||||||
|
font-size: 48px; |
||||||
|
margin-bottom: 15px; |
||||||
|
opacity: 0.5; |
||||||
|
} |
||||||
|
|
||||||
|
span { |
||||||
|
font-size: 14px; |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
||||||
Loading…
Reference in new issue