fix(app-manager): 优化安装包上传页面的空状态和权限列表展示

- 将空状态移至加载容器外,避免加载时闪现空提示
- 将安装包详情抽屉宽度调整为 800px
- 权限列表从标签改为带序号的列表,并优化换行与滚动样式
This commit is contained in:
TongTongStudio
2026-08-16 04:50:12 +08:00
parent c33a65350b
commit 640a3ecc57

View File

@@ -31,10 +31,14 @@
<el-button type="success" :icon="Upload" @click="uploadVisible = true">上传安装包</el-button> <el-button type="success" :icon="Upload" @click="uploadVisible = true">上传安装包</el-button>
</div> </div>
<!-- 卡片列表 --> <!-- 卡片列表 / 空状态 -->
<div v-loading="loading" class="card-grid"> <el-empty
<el-empty v-if="!loading && list.length === 0" description="暂无安装包,点击右上角上传" /> v-if="!loading && list.length === 0"
description="暂无安装包,点击右上角上传"
class="empty-state"
/>
<div v-else v-loading="loading" class="card-grid">
<el-card v-for="item in list" :key="item.id" class="pkg-card" shadow="hover"> <el-card v-for="item in list" :key="item.id" class="pkg-card" shadow="hover">
<div class="pkg-card__header"> <div class="pkg-card__header">
<el-image <el-image
@@ -136,7 +140,7 @@
<UploadDialog v-model:visible="uploadVisible" @success="handleUploaded" /> <UploadDialog v-model:visible="uploadVisible" @success="handleUploaded" />
<!-- 详情抽屉 --> <!-- 详情抽屉 -->
<el-drawer v-model="detailVisible" title="安装包详情" size="460px"> <el-drawer v-model="detailVisible" title="安装包详情" size="800px">
<el-descriptions v-if="current" :column="1" border class="detail-desc"> <el-descriptions v-if="current" :column="1" border class="detail-desc">
<el-descriptions-item label="应用名称">{{ current.appLabel || "-" }}</el-descriptions-item> <el-descriptions-item label="应用名称">{{ current.appLabel || "-" }}</el-descriptions-item>
<el-descriptions-item label="包名">{{ current.packageName || "-" }}</el-descriptions-item> <el-descriptions-item label="包名">{{ current.packageName || "-" }}</el-descriptions-item>
@@ -210,15 +214,10 @@
<el-descriptions-item label="备注">{{ current.remark || "-" }}</el-descriptions-item> <el-descriptions-item label="备注">{{ current.remark || "-" }}</el-descriptions-item>
<el-descriptions-item label="权限列表"> <el-descriptions-item label="权限列表">
<div class="perm-list"> <div class="perm-list">
<el-tag <div v-for="(p, i) in current.permissions || []" :key="p" class="perm-item">
v-for="p in current.permissions || []" <span class="perm-index">{{ i + 1 }}.</span>
:key="p" <span class="perm-name">{{ p }}</span>
size="small" </div>
type="info"
class="perm-tag"
>
{{ p }}
</el-tag>
<span v-if="!current.permissions || current.permissions.length === 0">-</span> <span v-if="!current.permissions || current.permissions.length === 0">-</span>
</div> </div>
</el-descriptions-item> </el-descriptions-item>
@@ -423,6 +422,12 @@ onMounted(() => {
} }
} }
.empty-state {
display: flex;
justify-content: center;
min-height: 300px;
}
.card-grid { .card-grid {
display: grid; display: grid;
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
@@ -539,11 +544,28 @@ onMounted(() => {
} }
.perm-list { .perm-list {
max-height: 160px; max-height: 240px;
overflow-y: auto; overflow-y: auto;
.perm-tag { .perm-item {
margin: 0 4px 4px 0; display: flex;
gap: 6px;
align-items: baseline;
padding: 2px 0;
line-height: 20px;
word-break: break-all;
white-space: nowrap;
}
.perm-index {
flex-shrink: 0;
color: var(--el-text-color-secondary);
}
.perm-name {
flex: 1;
min-width: 0;
overflow-wrap: anywhere;
} }
} }