import type { AppCard } from '@/api/card' import type { IUserInfoRes } from '@/api/types/login' import { hasUserPermission } from '@/utils/permission' import { getAccountWorkspace, isEnterpriseUserInfo } from '@/utils/userIdentity' import { V101_RELEASE } from '@/constant/release' export type CardMoreActionKey = 'restart' | 'stop' | 'start' | 'dataStart' | 'dataStop' | 'change' | 'allocate' | 'warning' export interface CardMoreAction { key: CardMoreActionKey name: string description?: string color?: string } export function canBusinessCardAction( userInfo: Partial | null | undefined, card?: AppCard | null, ) { const hasUser = Boolean(userInfo?.userId || userInfo?.phone || userInfo?.nickName || userInfo?.username) return hasUser && !!card && card.ownerType !== 'public' && card.canBusiness !== false } export function canRenewCardAction(userInfo: Partial | null | undefined, card?: AppCard | null) { return canBusinessCardAction(userInfo, card) && hasUserPermission(userInfo, 'renew') } export function canRestartCardAction(userInfo: Partial | null | undefined, card?: AppCard | null) { return canBusinessCardAction(userInfo, card) && hasUserPermission(userInfo, 'restart') } export function canAddonCardAction(userInfo: Partial | null | undefined, card?: AppCard | null) { return canBusinessCardAction(userInfo, card) && hasUserPermission(userInfo, 'addon') } export function canEnterpriseCardAction( userInfo: Partial | null | undefined, card?: AppCard | null, ) { const workspace = getAccountWorkspace(userInfo) return (isEnterpriseUserInfo(userInfo) || workspace === 'agent' || workspace === 'admin') && !!card && card.ownerType !== 'public' && card.canBusiness !== false } export function canAllocateCardAction( userInfo: Partial | null | undefined, card?: AppCard | null, ) { return canEnterpriseCardAction(userInfo, card) && hasUserPermission(userInfo, 'allocate') && card?.canAllocate !== false } export function canStopCardAction(userInfo: Partial | null | undefined, card?: AppCard | null) { return canBusinessCardAction(userInfo, card) && hasUserPermission(userInfo, 'stop') } export function canStartCardAction(userInfo: Partial | null | undefined, card?: AppCard | null) { return canBusinessCardAction(userInfo, card) && hasUserPermission(userInfo, 'start') } export function canDataStartCardAction(userInfo: Partial | null | undefined, card?: AppCard | null) { return canBusinessCardAction(userInfo, card) && hasUserPermission(userInfo, 'dataStart') } export function canDataStopCardAction(userInfo: Partial | null | undefined, card?: AppCard | null) { return canBusinessCardAction(userInfo, card) && hasUserPermission(userInfo, 'dataStop') } export function canChangeCardAction(userInfo: Partial | null | undefined, card?: AppCard | null) { return canEnterpriseCardAction(userInfo, card) && hasUserPermission(userInfo, 'change') } export function canWarningCardAction(userInfo: Partial | null | undefined, card?: AppCard | null) { return canBusinessCardAction(userInfo, card) && hasUserPermission(userInfo, 'warning') } export function buildCardMoreActions( userInfo: Partial | null | undefined, card?: AppCard | null, ) { if (!V101_RELEASE.showCardMoreActions) { return canAllocateCardAction(userInfo, card) ? [{ key: 'allocate', name: '卡片划拨', description: '将这张卡划拨给直属客户' }] satisfies CardMoreAction[] : [] } const actions: CardMoreAction[] = [] if (card?.bossCardStatus === 4) { if (canStartCardAction(userInfo, card)) { actions.push({ key: 'start', name: '复机', description: '恢复卡片联网', }) } } else if (canStopCardAction(userInfo, card)) { actions.push({ key: 'stop', name: '停机', description: '暂停卡片联网', color: '#e11d48', }) } if (card?.dataServiceStatus === 1 && canDataStopCardAction(userInfo, card)) { actions.push({ key: 'dataStop', name: '停用数据服务', description: '关闭这张卡的数据通信', color: '#e11d48', }) } else if (card?.dataServiceStatus === 0 && canDataStartCardAction(userInfo, card)) { actions.push({ key: 'dataStart', name: '开通数据服务', description: '恢复这张卡的数据通信', }) } if (canChangeCardAction(userInfo, card)) { actions.push({ key: 'change', name: '套餐变更', description: '切换当前套餐', }) } if (canAllocateCardAction(userInfo, card)) { actions.push({ key: 'allocate', name: '卡片划拨', description: '划拨权随卡片归属转移', }) } return actions }