This commit is contained in:
ChuXun
2026-01-29 02:55:05 +08:00
parent 33fb5639c7
commit c856666f22
19 changed files with 197 additions and 53 deletions

View File

@@ -1,5 +1,13 @@
import apiClient from './index';
import type { Grid } from './types';
import type { Grid, UserAccount } from './types';
export interface GridData extends Grid {}
export type GridWorker = UserAccount;
export interface GridWorkersQuery {
unassigned?: boolean;
}
/**
* DTO for updating a grid's core properties.
@@ -16,8 +24,49 @@ export interface GridUpdateRequest {
* @param data - 包含更新数据的对象
* @returns 更新后的网格对象
*/
export const updateGrid = (gridId: number, data: GridUpdateRequest): Promise<Grid> => {
return apiClient.patch(`/grids/${gridId}`, data);
export function updateGrid(gridId: number, data: GridUpdateRequest): Promise<Grid>;
export function updateGrid(grid: GridData & GridUpdateRequest): Promise<Grid>;
export function updateGrid(
gridOrId: number | (GridData & GridUpdateRequest),
data?: GridUpdateRequest
): Promise<Grid> {
if (typeof gridOrId === 'number') {
return apiClient.patch(`/grids/${gridOrId}`, data ?? {});
}
const payload: GridUpdateRequest = {
isObstacle: gridOrId.isObstacle,
description: gridOrId.description,
};
return apiClient.patch(`/grids/${gridOrId.id}`, payload);
}
/**
* 获取所有网格
*/
export const getGrids = (): Promise<GridData[]> => {
return apiClient.get('/grids');
};
/**
* 获取网格员列表(可选:仅未分配)
*/
export const getGridWorkers = async (params?: GridWorkersQuery): Promise<GridWorker[]> => {
const response = await apiClient.get('/personnel/users', {
params: { role: 'GRID_WORKER' },
});
let workers: GridWorker[] = Array.isArray(response) ? response : (response as any).content || [];
if (params?.unassigned) {
workers = workers.filter(worker =>
worker.gridX === null ||
worker.gridY === null ||
worker.gridX === undefined ||
worker.gridY === undefined ||
worker.gridX === -1 ||
worker.gridY === -1
);
}
return workers;
};
/**
@@ -39,4 +88,8 @@ export const assignWorkerByCoordinates = (gridX: number, gridY: number, userId:
*/
export const unassignWorkerByCoordinates = (gridX: number, gridY: number): Promise<void> => {
return apiClient.post(`/grids/coordinates/${gridX}/${gridY}/unassign`);
};
};
// Aliases for compatibility with existing usage
export const assignGridWorkerByCoordinates = assignWorkerByCoordinates;
export const removeGridWorkerByCoordinates = unassignWorkerByCoordinates;