feat(@vben/web-antd): 新增工牌出入轨迹页面

This commit is contained in:
lzh
2026-03-31 22:54:45 +08:00
parent 91cd7adc39
commit 16434a0d88
9 changed files with 1978 additions and 0 deletions

View File

@@ -0,0 +1,112 @@
import { requestClient } from '#/api/request';
// ==================== 类型定义 ====================
export namespace OpsTrajectoryApi {
/** 出入事件离开原因 */
export type LeaveReason = 'AREA_SWITCH' | 'DEVICE_OFFLINE' | 'SIGNAL_LOSS';
/** 工牌设备下拉项 */
export interface BadgeOption {
deviceId: number;
deviceKey: string;
nickname: string;
personName?: string;
}
/** 轨迹分页查询参数 */
export interface TrajectoryPageQuery {
deviceId?: number;
areaId?: number;
enterTime?: string[]; // [startTime, endTime]
pageNo?: number;
pageSize?: number;
}
/** 轨迹记录 */
export interface TrajectoryRecord {
id: number;
deviceId: number;
deviceName: string;
nickname: string;
areaId: number;
areaName: string;
buildingName?: string;
floorNo?: number;
beaconMac?: string;
enterTime: string;
leaveTime?: string;
durationSeconds?: number;
leaveReason?: LeaveReason;
enterRssi?: number;
}
/** 时间线查询参数 */
export interface TimelineQuery {
deviceId: number;
date: string; // yyyy-MM-dd
}
/** 设备当前位置 */
export interface CurrentLocation {
deviceId: number;
areaId?: number;
areaName?: string;
enterTime?: number; // 毫秒时间戳
beaconMac?: string;
inArea: boolean;
}
/** 轨迹统计摘要 */
export interface TrajectorySummary {
totalEvents: number;
uniqueAreaCount: number;
onlineDurationSeconds: number;
firstOnlineTime?: string;
lastOnlineTime?: string;
}
}
// ==================== API 接口 ====================
/** 获取工牌设备下拉列表 */
export function getBadgeList(keyword?: string) {
return requestClient.get<OpsTrajectoryApi.BadgeOption[]>(
'/ops/trajectory/badge-list',
{ params: keyword ? { keyword } : undefined },
);
}
/** 分页查询轨迹记录 */
export function getTrajectoryPage(
params: OpsTrajectoryApi.TrajectoryPageQuery,
) {
return requestClient.get<{
list: OpsTrajectoryApi.TrajectoryRecord[];
total: number;
}>('/ops/trajectory/page', { params });
}
/** 获取某设备某天的时间线 */
export function getTrajectoryTimeline(params: OpsTrajectoryApi.TimelineQuery) {
return requestClient.get<OpsTrajectoryApi.TrajectoryRecord[]>(
'/ops/trajectory/timeline',
{ params },
);
}
/** 获取设备实时位置 */
export function getCurrentLocation(deviceId: number) {
return requestClient.get<OpsTrajectoryApi.CurrentLocation>(
'/ops/trajectory/current-location',
{ params: { deviceId } },
);
}
/** 获取轨迹统计摘要 */
export function getTrajectorySummary(deviceId: number, date: string) {
return requestClient.get<OpsTrajectoryApi.TrajectorySummary>(
'/ops/trajectory/summary',
{ params: { deviceId, date } },
);
}