feat: 审计链路
Some checks failed
构建并部署前端到测试环境 / build-and-deploy (push) Failing after 59s

This commit is contained in:
luo
2026-08-07 18:33:37 +08:00
parent fa3d7088f9
commit b8b2854aa6
54 changed files with 5448 additions and 12 deletions

View File

@@ -9,6 +9,9 @@
</ElTag>
</div>
<div class="card-header-right">
<ElButton v-if="auditTarget" type="primary" link @click="openAssetAudit">
{{ isSubjectActivityView ? '活动记录' : '审计记录' }}
</ElButton>
<ElButton
v-if="
cardInfo?.asset_type === 'card' &&
@@ -311,7 +314,7 @@
{{ scope.row.gateway_extend || '-' }}
</template>
</ElTableColumn>
<ElTableColumn label="操作" width="180" fixed="right">
<ElTableColumn label="操作" width="280" fixed="right">
<template #default="scope">
<!-- 根据网络状态显示启用或停用按钮 -->
<ElButton
@@ -345,6 +348,24 @@
>
更新实名状态
</ElButton>
<ElButton
v-if="getBindingCardAuditTarget(scope.row)"
type="primary"
size="small"
link
@click="openBindingCardAudit(scope.row)"
>
卡审计
</ElButton>
<ElButton
v-if="getBindingAuditTarget(scope.row)"
type="primary"
size="small"
link
@click="openBindingAudit(scope.row)"
>
绑定审计
</ElButton>
</template>
</ElTableColumn>
</ElTable>
@@ -589,10 +610,14 @@
getExpiryEstimateTooltip,
getExpiryEstimateClass
} from '@/utils/business/expiryEstimate'
import { AUDIT_PERMISSIONS } from '@/config/constants/audit'
import { resolveAuditResourceTarget } from '@/utils/business/auditNavigation'
import { openAuditInvestigation } from '@/components/business/audit/investigationController'
// Props
interface BindingCard {
id: number
card_id?: number
iccid: string
msisdn?: string
carrier_name?: string
@@ -609,7 +634,9 @@
}
interface AssetInfo {
asset_id: number
asset_type: 'card' | 'device'
identifier: string
iccid?: string
imei?: string
msisdn?: string
@@ -717,6 +744,64 @@
const { hasAuth } = useAuth()
const userStore = useUserStore()
const isSubjectActivityView = computed(() => [3, 4].includes(Number(userStore.info.user_type)))
const auditTarget = computed(() => {
const userType = Number(userStore.info.user_type)
const permission =
userType === 3
? AUDIT_PERMISSIONS.agentActivity
: userType === 4
? AUDIT_PERMISSIONS.enterpriseActivity
: props.cardInfo.asset_type === 'card'
? AUDIT_PERMISSIONS.cardEntry
: AUDIT_PERMISSIONS.deviceEntry
if (!hasAuth(permission)) return null
return resolveAuditResourceTarget({
userType,
resourceType: props.cardInfo.asset_type === 'card' ? 'iot_card' : 'device',
internalId: props.cardInfo.asset_id,
businessIdentifier:
props.cardInfo.asset_type === 'card' ? props.cardInfo.iccid : props.cardInfo.virtual_no
})
})
const openAssetAudit = () => {
if (auditTarget.value) openAuditInvestigation(auditTarget.value)
}
const getBindingCardAuditTarget = (card: BindingCard) => {
const userType = Number(userStore.info.user_type)
const permission =
userType === 3
? AUDIT_PERMISSIONS.agentActivity
: userType === 4
? AUDIT_PERMISSIONS.enterpriseActivity
: AUDIT_PERMISSIONS.cardEntry
if (!hasAuth(permission)) return null
return resolveAuditResourceTarget({
userType,
resourceType: 'iot_card',
internalId: card.card_id,
businessIdentifier: card.iccid
})
}
const getBindingAuditTarget = (card: BindingCard) => {
if (
![1, 2].includes(Number(userStore.info.user_type)) ||
!hasAuth(AUDIT_PERMISSIONS.resourceTimeline)
)
return null
return resolveAuditResourceTarget({
resourceType: 'device_sim_binding',
internalId: card.id
})
}
const openBindingCardAudit = (card: BindingCard) => {
const target = getBindingCardAuditTarget(card)
if (target) openAuditInvestigation(target)
}
const openBindingAudit = (card: BindingCard) => {
const target = getBindingAuditTarget(card)
if (target) openAuditInvestigation(target)
}
const { width } = useWindowSize()
const CARD_MONTH_USAGE_PERMISSION = 'asset_info:view_card_month_usage'