修复导航:校准驾驶舱业务提醒钻取路由
This commit is contained in:
1 parent
4e793b3bb3
commit
3966ffed50
1 file changed
+87
-26
@@ -109,35 +109,21 @@
|
||||
<el-card shadow="never" class="status-card">
|
||||
<div slot="header" class="card-header">
|
||||
<span><i class="el-icon-warning-outline" style="color: #E6A23C; margin-right: 6px;"></i>业务运行待办与治理提醒</span>
|
||||
<span class="tip-text">点击可直接跳转业务处理</span>
|
||||
<span class="tip-text">{{ hasAnyClickableReminder ? '点击具备权限的卡片可直接跳转业务处理' : '业务客观运行指标提示' }}</span>
|
||||
</div>
|
||||
<div class="alert-grid" v-loading="loadingOverview">
|
||||
<div class="alert-item clickable" @click="goTo('/analysis/attendance')">
|
||||
<div class="alert-icon bg-danger"><i class="el-icon-time" /></div>
|
||||
<div
|
||||
v-for="item in reminders"
|
||||
:key="item.key"
|
||||
:class="['alert-item', { 'clickable': item.clickable, 'non-clickable': !item.clickable }]"
|
||||
:title="item.clickable ? `点击前往【${item.label}】处理页面` : '当前角色仅支持查看指标数据'"
|
||||
@click="handleReminderClick(item)"
|
||||
>
|
||||
<div :class="['alert-icon', item.iconBg]"><i :class="item.icon" /></div>
|
||||
<div class="alert-content">
|
||||
<div class="alert-num text-danger">{{ overview.abnormalAttendanceCount || 0 }}</div>
|
||||
<div class="alert-title">异常考勤人次</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="alert-item clickable" @click="goTo('/train/report')">
|
||||
<div class="alert-icon bg-warning"><i class="el-icon-document-checked" /></div>
|
||||
<div class="alert-content">
|
||||
<div class="alert-num text-warning">{{ overview.pendingReportCount || 0 }}</div>
|
||||
<div class="alert-title">待报到参训学员</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="alert-item clickable" @click="goTo('/train/accommodation')">
|
||||
<div class="alert-icon bg-primary"><i class="el-icon-office-building" /></div>
|
||||
<div class="alert-content">
|
||||
<div class="alert-num text-primary">{{ overview.preallocatedAccommodationCount || 0 }}</div>
|
||||
<div class="alert-title">住宿预分配待入住</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="alert-item clickable" @click="goTo('/train/extra')">
|
||||
<div class="alert-icon bg-danger"><i class="el-icon-key" /></div>
|
||||
<div class="alert-content">
|
||||
<div class="alert-num text-danger">{{ overview.abnormalAuthCount || 0 }}</div>
|
||||
<div class="alert-title">门禁授权异常数</div>
|
||||
<div :class="['alert-num', item.numClass]">{{ item.count }}</div>
|
||||
<div class="alert-title">{{ item.label }}</div>
|
||||
<div v-if="item.clickable" class="action-hint">去处理 <i class="el-icon-arrow-right" /></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -237,6 +223,67 @@ export default {
|
||||
computed: {
|
||||
planStatus() {
|
||||
return this.overview.planStatusCounts || {}
|
||||
},
|
||||
reminders() {
|
||||
const o = this.overview || {}
|
||||
const items = [
|
||||
{
|
||||
key: 'attendance',
|
||||
label: '异常考勤人次',
|
||||
count: o.abnormalAttendanceCount || 0,
|
||||
route: '/analysis/attendance',
|
||||
permission: 'train:analysis:attendance',
|
||||
icon: 'el-icon-time',
|
||||
iconBg: 'bg-danger',
|
||||
numClass: 'text-danger'
|
||||
},
|
||||
{
|
||||
key: 'report',
|
||||
label: '待报到参训学员',
|
||||
count: o.pendingReportCount || 0,
|
||||
route: '/analysis/report',
|
||||
permission: 'train:report:list',
|
||||
icon: 'el-icon-document-checked',
|
||||
iconBg: 'bg-warning',
|
||||
numClass: 'text-warning'
|
||||
},
|
||||
{
|
||||
key: 'accommodation',
|
||||
label: '住宿预分配待入住',
|
||||
count: o.preallocatedAccommodationCount || 0,
|
||||
route: '/equip/accommodation',
|
||||
permission: 'train:accommodation:list',
|
||||
icon: 'el-icon-office-building',
|
||||
iconBg: 'bg-primary',
|
||||
numClass: 'text-primary'
|
||||
},
|
||||
{
|
||||
key: 'auth',
|
||||
label: '门禁授权异常数',
|
||||
count: o.abnormalAuthCount || 0,
|
||||
route: '/equip/extra',
|
||||
permission: null,
|
||||
icon: 'el-icon-key',
|
||||
iconBg: 'bg-danger',
|
||||
numClass: 'text-danger'
|
||||
}
|
||||
]
|
||||
return items.map(item => {
|
||||
let clickable = false
|
||||
if (item.key === 'auth') {
|
||||
// 门禁授权异常跳 /equip/extra(设备物联页面),系统管理员与培训管理员均在角色菜单中配置了该路由
|
||||
clickable = this.$auth.hasRoleOr(['admin', 'train_admin'])
|
||||
} else if (item.permission) {
|
||||
clickable = this.$auth.hasPermi(item.permission)
|
||||
}
|
||||
return {
|
||||
...item,
|
||||
clickable
|
||||
}
|
||||
})
|
||||
},
|
||||
hasAnyClickableReminder() {
|
||||
return this.reminders.some(r => r.clickable)
|
||||
}
|
||||
},
|
||||
created() {
|
||||
@@ -466,6 +513,11 @@ export default {
|
||||
if (this.statusChartInstance) { this.statusChartInstance.dispose(); this.statusChartInstance = null }
|
||||
if (this.venueChartInstance) { this.venueChartInstance.dispose(); this.venueChartInstance = null }
|
||||
},
|
||||
handleReminderClick(item) {
|
||||
if (item && item.clickable && item.route) {
|
||||
this.$router.push(item.route)
|
||||
}
|
||||
},
|
||||
goTo(path) {
|
||||
if (path) this.$router.push(path)
|
||||
}
|
||||
@@ -597,6 +649,10 @@ export default {
|
||||
background: #f0f7ff;
|
||||
border-color: #b3d8ff;
|
||||
}
|
||||
&.non-clickable {
|
||||
cursor: default;
|
||||
opacity: 0.9;
|
||||
}
|
||||
.alert-icon {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
@@ -620,6 +676,11 @@ export default {
|
||||
font-size: 12px;
|
||||
color: #909399;
|
||||
}
|
||||
.action-hint {
|
||||
font-size: 11px;
|
||||
color: #409EFF;
|
||||
margin-top: 2px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user