feat: 扫描整理并行化、WebSocket 实时进度与统计看板
- 移动阶段并行处理文件,按原子计数上报累计进度 - 扫描遍历阶段实时上报已发现文件数,界面不再卡在 0/0 - 新增 /api/scan/ws WebSocket 实时推送扫描状态;前端断线指数退避自动重连,并以低频轮询兜底 - 新增统计看板与媒体库筛选/排序,目录选择器路径不存在时回退到最近可用父目录 - 存放目录支持自定义并持久化,默认输出到 KMP已整理
This commit is contained in:
@@ -32,7 +32,7 @@
|
||||
</div>
|
||||
|
||||
<el-table :data="list" v-loading="loading" border stripe @sort-change="handleSortChange">
|
||||
<el-table-column prop="fileName" label="文件名" min-width="220" show-overflow-tooltip>
|
||||
<el-table-column prop="fileName" label="文件名" min-width="100" show-overflow-tooltip>
|
||||
<template slot-scope="scope">
|
||||
<span class="file-name" :title="scope.row.filePath">{{ scope.row.fileName }}</span>
|
||||
</template>
|
||||
@@ -48,7 +48,7 @@
|
||||
<span v-else>{{ scope.row.orientation }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="resolution" label="分辨率" width="110" align="center" sortable="custom">
|
||||
<el-table-column prop="resolution" label="分辨率" width="120" align="center" sortable="custom">
|
||||
<template slot-scope="scope">
|
||||
<span class="muted" v-if="!scope.row.resolution">-</span>
|
||||
<span v-else>{{ scope.row.resolution }}</span>
|
||||
@@ -60,19 +60,19 @@
|
||||
<span v-else class="muted">-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="codec" label="编码" width="90" align="center">
|
||||
<el-table-column prop="codec" label="编码" width="120" align="center">
|
||||
<template slot-scope="scope">
|
||||
<span class="muted" v-if="!scope.row.codec">-</span>
|
||||
<span v-else>{{ scope.row.codec }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="format" label="格式" width="80" align="center">
|
||||
<el-table-column prop="format" label="格式" width="120" align="center">
|
||||
<template slot-scope="scope">
|
||||
<span class="muted" v-if="!scope.row.format">-</span>
|
||||
<span v-else>{{ scope.row.format }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="duration" label="时长" width="90" align="center" sortable="custom">
|
||||
<el-table-column prop="duration" label="时长" width="120" align="center" sortable="custom">
|
||||
<template slot-scope="scope">
|
||||
<span class="muted" v-if="!scope.row.durationText">-</span>
|
||||
<span v-else>{{ scope.row.durationText }}</span>
|
||||
@@ -87,7 +87,7 @@
|
||||
<span v-else>{{ scope.row.destDir }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createdAt" label="入库时间" width="150" align="center" sortable="custom">
|
||||
<el-table-column prop="createdAt" label="入库时间" width="200" align="center" sortable="custom">
|
||||
<template slot-scope="scope">
|
||||
<span class="muted" v-if="!scope.row.createdAt">-</span>
|
||||
<span v-else>{{ formatTime(scope.row.createdAt) }}</span>
|
||||
@@ -134,7 +134,7 @@ export default {
|
||||
formatOptions: [],
|
||||
query: {
|
||||
page: 1,
|
||||
pageSize: 10,
|
||||
pageSize: 20,
|
||||
mediaType: '',
|
||||
orientation: '',
|
||||
resolution: '',
|
||||
|
||||
Reference in New Issue
Block a user