From 1345b97303282bbb5fb4f2f9f8d7d03ecb0ab672 Mon Sep 17 00:00:00 2001 From: hailin Date: Sat, 3 Jan 2026 21:21:39 -0800 Subject: [PATCH] feat(authorization): implement grant authorization functionality MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在授权管理页面实现创建授权功能: - 导入所有授权创建 hooks (社区/省公司/市公司/省团队/市团队) - 添加 extractUserId 函数从 accountSequence 提取 userId (去掉首字母) - 实现 handleCreate 函数根据授权类型调用对应 API - 添加创建过程中的加载状态显示 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../app/(dashboard)/authorization/page.tsx | 110 +++++++++++++++--- 1 file changed, 96 insertions(+), 14 deletions(-) diff --git a/frontend/admin-web/src/app/(dashboard)/authorization/page.tsx b/frontend/admin-web/src/app/(dashboard)/authorization/page.tsx index d85d7833..027d6885 100644 --- a/frontend/admin-web/src/app/(dashboard)/authorization/page.tsx +++ b/frontend/admin-web/src/app/(dashboard)/authorization/page.tsx @@ -4,7 +4,15 @@ import { useState, useMemo } from 'react'; import { PageContainer } from '@/components/layout'; import { toast } from '@/components/common'; import { cn } from '@/utils/helpers'; -import { useAuthorizations, useRevokeAuthorization } from '@/hooks/useAuthorizations'; +import { + useAuthorizations, + useRevokeAuthorization, + useGrantCommunity, + useGrantProvinceCompany, + useGrantCityCompany, + useGrantAuthProvinceCompany, + useGrantAuthCityCompany, +} from '@/hooks/useAuthorizations'; import type { RoleType, Authorization } from '@/types/authorization.types'; import { ROLE_TYPE_LABELS } from '@/types/authorization.types'; import styles from './authorization.module.scss'; @@ -50,6 +58,13 @@ export default function AuthorizationPage() { // 撤销授权 mutation const revokeMutation = useRevokeAuthorization(); + // 创建授权 mutations + const grantCommunityMutation = useGrantCommunity(); + const grantProvinceCompanyMutation = useGrantProvinceCompany(); + const grantCityCompanyMutation = useGrantCityCompany(); + const grantAuthProvinceCompanyMutation = useGrantAuthProvinceCompany(); + const grantAuthCityCompanyMutation = useGrantAuthCityCompany(); + // 根据状态筛选数据 const filteredData = useMemo(() => { if (!data?.items) return []; @@ -57,18 +72,85 @@ export default function AuthorizationPage() { return data.items.filter(item => item.status === filterStatus); }, [data?.items, filterStatus]); + // 从 accountSequence 提取 userId(去掉首字母) + const extractUserId = (accountSequence: string): string => { + return accountSequence.slice(1); + }; + + // 判断是否有正在处理的创建请求 + const isCreating = + grantCommunityMutation.isPending || + grantProvinceCompanyMutation.isPending || + grantCityCompanyMutation.isPending || + grantAuthProvinceCompanyMutation.isPending || + grantAuthCityCompanyMutation.isPending; + // 处理创建授权 - const handleCreate = () => { - // TODO: 调用API创建授权 - console.log('创建授权:', createForm); - toast.info('创建授权功能开发中'); - setShowCreateModal(false); - setCreateForm({ - accountSequence: '', - type: 'COMMUNITY', - region: '', - skipAssessment: false, - }); + const handleCreate = async () => { + const { accountSequence, type, region, skipAssessment } = createForm; + const userId = extractUserId(accountSequence); + + try { + switch (type) { + case 'COMMUNITY': + await grantCommunityMutation.mutateAsync({ + userId, + accountSequence, + communityName: region, + skipAssessment, + }); + break; + case 'PROVINCE_COMPANY': + await grantProvinceCompanyMutation.mutateAsync({ + userId, + accountSequence, + provinceCode: region, + provinceName: region, + skipAssessment, + }); + break; + case 'CITY_COMPANY': + await grantCityCompanyMutation.mutateAsync({ + userId, + accountSequence, + cityCode: region, + cityName: region, + skipAssessment, + }); + break; + case 'AUTH_PROVINCE_COMPANY': + await grantAuthProvinceCompanyMutation.mutateAsync({ + userId, + accountSequence, + provinceCode: region, + provinceName: region, + skipAssessment, + }); + break; + case 'AUTH_CITY_COMPANY': + await grantAuthCityCompanyMutation.mutateAsync({ + userId, + accountSequence, + cityCode: region, + cityName: region, + skipAssessment, + }); + break; + } + + toast.success('授权创建成功'); + setShowCreateModal(false); + setCreateForm({ + accountSequence: '', + type: 'COMMUNITY', + region: '', + skipAssessment: false, + }); + } catch (err) { + console.error('创建授权失败:', err); + const errorMessage = err instanceof Error ? err.message : '创建授权失败'; + toast.error(errorMessage); + } }; // 处理取消授权 @@ -509,9 +591,9 @@ export default function AuthorizationPage() {