Browse Source

✨ feat(area-management): 集成地理区域模块并更新客户端调用

- 在区域管理组件中导入并使用新的 `areaClientManager` 进行所有 API 调用
- 在服务器端添加 `@d8d/geo-areas` 依赖并注册其数据实体和路由
- 更新 `pnpm-lock.yaml` 以反映新的工作区依赖关系
yourname 5 days ago
parent
commit
95cbc1c66e

+ 6 - 6
packages/area-management-ui/src/components/AreaManagement.tsx

@@ -4,7 +4,7 @@ import { Button } from '@d8d/shared-ui-components/components/ui/button';
 import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@d8d/shared-ui-components/components/ui/card';
 import { Plus } from 'lucide-react';
 import { useState } from 'react';
-import { areaClient } from '../api/areaClient';
+import { areaClient, areaClientManager } from '../api/areaClient';
 import type { InferResponseType, InferRequestType } from 'hono/client';
 import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@d8d/shared-ui-components/components/ui/dialog';
 import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from '@d8d/shared-ui-components/components/ui/alert-dialog';
@@ -56,7 +56,7 @@ export const AreaManagement: React.FC = () => {
   const { data: provinceData, isLoading: isProvinceLoading } = useQuery({
     queryKey: ['areas-tree-province'],
     queryFn: async () => {
-      const res = await areaClient.index.$get({
+      const res = await areaClientManager.get().index.$get({
         query: {
           page: 1,
           pageSize: 100 ,
@@ -77,7 +77,7 @@ export const AreaManagement: React.FC = () => {
   const createMutation = useMutation({
     mutationFn: async (data: CreateAreaRequest) => {
       await handleOperation(async () => {
-        const res = await areaClient.index.$post({ json: data });
+        const res = await areaClientManager.get().index.$post({ json: data });
         if (res.status !== 201) throw new Error('创建省市区失败');
       });
     },
@@ -111,7 +111,7 @@ export const AreaManagement: React.FC = () => {
   const updateMutation = useMutation({
     mutationFn: async ({ id, data }: { id: number; data: UpdateAreaRequest }) => {
       await handleOperation(async () => {
-        const res = await areaClient[':id'].$put({
+        const res = await areaClientManager.get()[':id'].$put({
           param: { id },
           json: data
         });
@@ -142,7 +142,7 @@ export const AreaManagement: React.FC = () => {
   const deleteMutation = useMutation({
     mutationFn: async (id: number) => {
       await handleOperation(async () => {
-        const res = await areaClient[':id'].$delete({
+        const res = await areaClientManager.get()[':id'].$delete({
           param: { id }
         });
         if (res.status !== 204) throw new Error('删除省市区失败');
@@ -172,7 +172,7 @@ export const AreaManagement: React.FC = () => {
   const toggleStatusMutation = useMutation({
     mutationFn: async ({ id, isDisabled }: { id: number; isDisabled: number }) => {
       await handleOperation(async () => {
-        const res = await areaClient[':id'].$put({
+        const res = await areaClientManager.get()[':id'].$put({
           param: { id },
           json: { isDisabled }
         });

+ 1 - 0
packages/server/package.json

@@ -35,6 +35,7 @@
     "@d8d/shared-utils": "workspace:*",
     "@d8d/shared-crud": "workspace:*",
     "@d8d/core-module": "workspace:*",
+    "@d8d/geo-areas": "workspace:*",
     "axios": "^1.12.2",
     "bcrypt": "^6.0.0",
     "debug": "^4.4.3",

+ 6 - 1
packages/server/src/index.ts

@@ -11,8 +11,9 @@ import { databaseBackup } from './utils/backup'
 import { UserEntity, Role } from '@d8d/core-module/user-module'
 import { File } from '@d8d/core-module/file-module'
 import { SystemConfig } from '@d8d/core-module/system-config-module'
+import { areasRoutes, adminAreasRoutes, AreaEntity } from '@d8d/geo-areas'
 
-initializeDataSource([UserEntity, Role, File, SystemConfig])
+initializeDataSource([UserEntity, Role, File, SystemConfig, AreaEntity])
 
 if(!AppDataSource || !AppDataSource.isInitialized) {
   await AppDataSource.initialize();
@@ -113,11 +114,15 @@ export const userRoutes = api.route('/api/v1/users', userModuleRoutes)
 export const authRoutes = api.route('/api/v1/auth', authModuleRoutes)
 export const fileApiRoutes = api.route('/api/v1/files', fileModuleRoutes)
 export const roleRoutes = api.route('/api/v1/roles', roleModuleRoutes)
+export const areaApiRoutes = api.route('/api/v1/areas', areasRoutes)
+export const adminAreaApiRoutes = api.route('/api/v1/admin/areas', adminAreasRoutes)
 
 export type AuthRoutes = typeof authRoutes
 export type UserRoutes = typeof userRoutes
 export type FileRoutes = typeof fileApiRoutes
 export type RoleRoutes = typeof roleRoutes
+export type AreaRoutes = typeof areaApiRoutes
+export type AdminAreaRoutes = typeof adminAreaApiRoutes
 
 app.route('/', api)
 export default app

+ 3 - 0
pnpm-lock.yaml

@@ -3262,6 +3262,9 @@ importers:
       '@d8d/core-module':
         specifier: workspace:*
         version: link:../core-module
+      '@d8d/geo-areas':
+        specifier: workspace:*
+        version: link:../geo-areas
       '@d8d/shared-crud':
         specifier: workspace:*
         version: link:../shared-crud