import { computed, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import { useRoute, useRouter } from 'vue-router' import { resetUserTraffic } from '@/api/admin' import type { AdminUserFilter, AdminUserListItem } from '@/types/api' export function useUserScopedActions() { const route = useRoute() const router = useRouter() const assignOrderVisible = ref(false) const assignOrderEmail = ref('') const trafficLogVisible = ref(false) const trafficLogUserId = ref(null) const trafficLogUserEmail = ref('') const resettingTrafficId = ref(null) const scopedUserId = computed(() => { const raw = route.query.user_id const value = Array.isArray(raw) ? raw[0] : raw const numeric = Number(value) return Number.isFinite(numeric) && numeric > 0 ? numeric : null }) const scopedUserEmail = computed(() => { const raw = route.query.user_email const value = Array.isArray(raw) ? raw[0] : raw return typeof value === 'string' ? value : '' }) const scopedInviteUserId = computed(() => { const raw = route.query.invite_user_id const value = Array.isArray(raw) ? raw[0] : raw const numeric = Number(value) return Number.isFinite(numeric) && numeric > 0 ? numeric : null }) const scopedInviteUserEmail = computed(() => { const raw = route.query.invite_user_email const value = Array.isArray(raw) ? raw[0] : raw return typeof value === 'string' ? value : '' }) const scopedInviteFilters = computed(() => ( scopedInviteUserId.value ? [{ id: 'invite_user_id', value: `eq:${scopedInviteUserId.value}` }] : [] )) const scopedUserFilters = computed(() => ( scopedUserId.value ? [{ id: 'id', value: `eq:${scopedUserId.value}` }] : [] )) const scopedUserSummaries = computed(() => { if (!scopedUserId.value) { return [] } const label = scopedUserEmail.value || `用户 #${scopedUserId.value}` return [`用户:${label}`] }) const scopedInviteSummaries = computed(() => { if (!scopedInviteUserId.value) { return [] } const label = scopedInviteUserEmail.value || `用户 #${scopedInviteUserId.value}` return [`邀请人:${label}`] }) function clearScopedUserQuery() { if (!scopedUserId.value && !scopedUserEmail.value) { return Promise.resolve() } const nextQuery = { ...route.query } delete nextQuery.user_id delete nextQuery.user_email return router.replace({ name: 'Users', query: nextQuery }) } function clearScopedInviteQuery() { if (!scopedInviteUserId.value && !scopedInviteUserEmail.value) { return Promise.resolve() } const nextQuery = { ...route.query } delete nextQuery.invite_user_id delete nextQuery.invite_user_email return router.replace({ name: 'Users', query: nextQuery }) } function openAssignOrder(user: Pick) { assignOrderEmail.value = user.email assignOrderVisible.value = true } function handleAssignOrderSuccess() { assignOrderVisible.value = false } function openTrafficLogs(user: Pick) { trafficLogUserId.value = user.id trafficLogUserEmail.value = user.email trafficLogVisible.value = true } function viewUserOrders(user: Pick) { return router.push({ name: 'SubscriptionOrders', query: { user_id: String(user.id), user_email: user.email, }, }) } function viewUserInvites( user: Pick, resetLocalFilters: () => void, ) { resetLocalFilters() return router.push({ name: 'Users', query: { invite_user_id: String(user.id), invite_user_email: user.email, }, }) } async function performResetTraffic(user: Pick) { await ElMessageBox.confirm(`确认重置用户 ${user.email} 的已用流量吗?该操作会清空当前上行和下行统计。`, '重置流量', { type: 'warning', }) resettingTrafficId.value = user.id try { await resetUserTraffic(user.id, '用户管理更多操作手动重置') ElMessage.success('用户流量已重置') } finally { resettingTrafficId.value = null } } return { route, assignOrderVisible, assignOrderEmail, trafficLogVisible, trafficLogUserId, trafficLogUserEmail, resettingTrafficId, scopedUserId, scopedUserFilters, scopedUserSummaries, scopedInviteUserId, scopedInviteFilters, scopedInviteSummaries, clearScopedUserQuery, clearScopedInviteQuery, openAssignOrder, handleAssignOrderSuccess, openTrafficLogs, viewUserOrders, viewUserInvites, performResetTraffic, } }