Files
hfb_sys/frontend/src/shared/utils/auditLabels.ts
T

132 lines
6.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/** 审计日志动作 / 业务类型中文映射(展示用,存储仍为英文 code) */
export interface AuditOption {
value: string
label: string
/** 筛选下拉分组 */
group?: string
/** 是否高风险操作 */
highRisk?: boolean
}
export const AUDIT_ACTION_OPTIONS: AuditOption[] = [
// 用户
{ value: 'admin_user.freeze', label: '冻结用户', group: '用户', highRisk: true },
{ value: 'admin_user.unfreeze', label: '解冻用户', group: '用户' },
{
value: 'admin_user.set_deposit_free_quota',
label: '设置免押额度',
group: '用户',
highRisk: true,
},
{ value: 'admin_user.manual_realname', label: '人工实名', group: '用户', highRisk: true },
{ value: 'admin_user.revoke_realname', label: '撤销实名', group: '用户', highRisk: true },
{ value: 'admin_user.wallet_adjust', label: '调整用户余额', group: '用户', highRisk: true },
// 商品
{ value: 'listing.admin_offline', label: '后台下架商品', group: '商品', highRisk: true },
{ value: 'listing.mark_abnormal', label: '商品标记异常', group: '商品', highRisk: true },
{ value: 'listing.transfer_owner', label: '转移商品所有权', group: '商品', highRisk: true },
{ value: 'listing.adjust_review_price', label: '审核调价', group: '商品' },
// 订单
{ value: 'order.admin_close', label: '客服关闭订单', group: '订单', highRisk: true },
{ value: 'order.admin_seal', label: '客服封存订单', group: '订单', highRisk: true },
{ value: 'order.mark_abnormal', label: '订单标记异常', group: '订单', highRisk: true },
{ value: 'order.reset_handoff', label: '重置交接流程', group: '订单' },
{ value: 'order.reset_renter_confirm', label: '重置租客确认', group: '订单' },
{ value: 'order.reset_checkout_confirm', label: '重置结账确认', group: '订单' },
{ value: 'order.reset_return_overdue', label: '重置归还逾期', group: '订单' },
{ value: 'order.deposit_hold', label: '押金暂扣', group: '订单', highRisk: true },
{ value: 'order.deposit_release', label: '押金归还', group: '订单', highRisk: true },
// 超时任务(system
{ value: 'order.timeout.pending_payment', label: '超时关闭待支付', group: '系统任务' },
{ value: 'order.timeout.owner_submit', label: '超时号主提交交接', group: '系统任务' },
{ value: 'order.timeout.renter_confirm', label: '超时租客确认收号', group: '系统任务' },
{ value: 'order.timeout.return_overdue', label: '超时归还逾期', group: '系统任务' },
{ value: 'order.timeout.owner_checkout_confirm', label: '超时号主确认结账', group: '系统任务' },
{ value: 'chat.renter_retention.remove', label: '到期移除租客会话', group: '系统任务' },
// 提号
{ value: 'pickup_create', label: '创建提号', group: '提号' },
{ value: 'pickup_complete', label: '完成提号结算', group: '提号', highRisk: true },
{ value: 'pickup_cancel', label: '取消提号', group: '提号' },
// 申诉
{ value: 'dispute.arbitrate', label: '申诉仲裁', group: '申诉', highRisk: true },
// 系统配置
{ value: 'system_config.create', label: '创建系统配置', group: '系统配置', highRisk: true },
{ value: 'system_config.update', label: '更新系统配置', group: '系统配置', highRisk: true },
// 支付配置
{ value: 'payment_config.create', label: '创建支付配置', group: '支付配置', highRisk: true },
{ value: 'payment_config.update', label: '更新支付配置', group: '支付配置', highRisk: true },
{ value: 'payment_config.delete', label: '删除支付配置', group: '支付配置', highRisk: true },
{ value: 'payment_config.view_secret', label: '查看支付密钥', group: '支付配置', highRisk: true },
{ value: 'payment_config.export', label: '导出支付配置', group: '支付配置', highRisk: true },
{ value: 'payment_config.import', label: '导入支付配置', group: '支付配置', highRisk: true },
]
export const AUDIT_BIZ_TYPE_OPTIONS: AuditOption[] = [
{ value: 'user', label: '用户' },
{ value: 'listing', label: '商品' },
{ value: 'order', label: '订单' },
{ value: 'dispute', label: '申诉' },
{ value: 'system_config', label: '系统配置' },
{ value: 'payment_config', label: '支付配置' },
{ value: 'admin_pickup', label: '提号' },
]
const actionLabelMap = Object.fromEntries(
AUDIT_ACTION_OPTIONS.map(item => [item.value, item.label])
)
const bizTypeLabelMap = Object.fromEntries(
AUDIT_BIZ_TYPE_OPTIONS.map(item => [item.value, item.label])
)
const highRiskActions = new Set(
AUDIT_ACTION_OPTIONS.filter(item => item.highRisk).map(item => item.value)
)
/** 动作 code → 中文;未知 code 原样返回 */
export function auditActionLabel(action: string | undefined | null): string {
if (!action) return '-'
return actionLabelMap[action] || action
}
/** 业务类型 code → 中文 */
export function auditBizTypeLabel(bizType: string | undefined | null): string {
if (!bizType) return '-'
return bizTypeLabelMap[bizType] || bizType
}
export function isHighRiskAuditAction(action: string | undefined | null): boolean {
if (!action) return false
if (highRiskActions.has(action)) return true
// 兜底:未登记但含敏感关键词
return /freeze|delete|import|export|secret|wallet_adjust|seal|close|arbitrate|offline|abnormal/i.test(
action
)
}
/** 表格标签颜色 */
export function auditActionTagType(
action: string | undefined | null
): 'danger' | 'warning' | 'success' | 'info' {
if (!action) return 'info'
if (isHighRiskAuditAction(action)) return 'danger'
if (action.startsWith('order.timeout') || action.startsWith('chat.')) return 'info'
if (action.includes('create') || action.includes('update') || action.includes('reset')) {
return 'warning'
}
if (action.includes('complete') || action.includes('release') || action.includes('unfreeze')) {
return 'success'
}
return 'info'
}
/** 按 group 分组,供 el-option-group 使用 */
export function groupedAuditActionOptions(): Array<{ group: string; options: AuditOption[] }> {
const map = new Map<string, AuditOption[]>()
for (const item of AUDIT_ACTION_OPTIONS) {
const group = item.group || '其他'
if (!map.has(group)) map.set(group, [])
map.get(group)!.push(item)
}
return Array.from(map.entries()).map(([group, options]) => ({ group, options }))
}