fix: 机柜图形化
This commit is contained in:
@@ -42,13 +42,6 @@ export interface AssetListParams {
|
||||
page_size?: number
|
||||
keyword?: string
|
||||
status?: string
|
||||
category_id?: number
|
||||
supplier_id?: number
|
||||
datacenter_id?: number
|
||||
floor_id?: number
|
||||
room_id?: number
|
||||
rack_id?: number
|
||||
department?: string
|
||||
sort?: string
|
||||
order?: string
|
||||
}
|
||||
@@ -66,7 +59,7 @@ export interface AssetForm {
|
||||
purchase_date?: string
|
||||
original_value?: number
|
||||
supplier_id?: number
|
||||
warranty_period?: string
|
||||
warranty_period?: number
|
||||
warranty_expiry?: string
|
||||
department?: string
|
||||
user?: string
|
||||
@@ -75,9 +68,6 @@ export interface AssetForm {
|
||||
datacenter_id?: number
|
||||
floor_id?: number
|
||||
room_id?: number
|
||||
rack_id?: number
|
||||
unit_start?: number
|
||||
unit_end?: number
|
||||
qr_code?: string
|
||||
rfid_tag?: string
|
||||
asset_tag?: string
|
||||
@@ -138,21 +128,6 @@ export const fetchSupplierOptions = () => {
|
||||
return request.get('/Assets/v1/supplier/all')
|
||||
}
|
||||
|
||||
/** 获取数据中心列表(下拉) */
|
||||
export const fetchDatacenterOptions = () => {
|
||||
return request.get('/Assets/v1/datacenter/list')
|
||||
}
|
||||
|
||||
/** 根据数据中心获取楼层列表 */
|
||||
export const fetchFloorOptions = (datacenterId: number) => {
|
||||
return request.get(`/Assets/v1/datacenter/${datacenterId}`)
|
||||
}
|
||||
|
||||
/** 获取机柜列表(下拉) */
|
||||
export const fetchRackOptions = (params?: { datacenter_id?: number; floor_id?: number }) => {
|
||||
return request.post('/Assets/v1/rack/list', params || {})
|
||||
}
|
||||
|
||||
/** 绑定资产和监控资源 */
|
||||
export const linkAssetResource = (data: {
|
||||
asset_id: number
|
||||
|
||||
@@ -3,6 +3,7 @@ import { request } from '@/api/request'
|
||||
export interface Floor {
|
||||
id?: number
|
||||
name?: string
|
||||
code?: string
|
||||
datacenter_id?: number
|
||||
floor_number?: number
|
||||
status?: string
|
||||
@@ -54,7 +55,6 @@ export const deleteFloor = (id: number) => {
|
||||
}
|
||||
|
||||
/** 获取数据中心列表(用于下拉选择) */
|
||||
export const fetchDatacenterList = (params?: { keyword?: string; name?: string }) => {
|
||||
const normalizedParams = params?.keyword ? { ...params, name: params.name ?? params.keyword } : params
|
||||
return request.get('/Assets/v1/datacenter/all', { params: normalizedParams })
|
||||
export const fetchDatacenterList = (params?: { keyword?: string }) => {
|
||||
return request.get('/Assets/v1/datacenter/all', { params })
|
||||
}
|
||||
|
||||
@@ -21,9 +21,14 @@ export const fetchRackListByDatacenter = (datacenterId: number, params?: { name?
|
||||
return request.get(`/Assets/v1/rack/datacenter/${datacenterId}`, { params })
|
||||
}
|
||||
|
||||
/** 根据楼层获取机柜列表(下拉,不分页)- 已废弃,请使用 fetchRackListByRoom */
|
||||
export const fetchRackListByFloor = (floorId: number, params?: { name?: string }) => {
|
||||
return request.get(`/Assets/v1/rack/floor/${floorId}`, { params })
|
||||
/** 根据楼层获取机柜列表 */
|
||||
export const fetchRackListByFloor = (floorId: number, params?: { keyword?: string }) => {
|
||||
return fetchRackList({
|
||||
page: 1,
|
||||
page_size: 100,
|
||||
floor_id: floorId,
|
||||
keyword: params?.keyword,
|
||||
})
|
||||
}
|
||||
|
||||
/** 根据机房获取机柜列表(下拉,不分页) */
|
||||
@@ -62,13 +67,6 @@ export const fetchSupplierList = () => {
|
||||
}
|
||||
|
||||
/** 获取数据中心列表(用于下拉选择) */
|
||||
export const fetchDatacenterList = (params?: { keyword?: string; name?: string }) => {
|
||||
const normalizedParams = params?.keyword ? { ...params, name: params.name ?? params.keyword } : params
|
||||
return request.get('/Assets/v1/datacenter/all', { params: normalizedParams })
|
||||
}
|
||||
|
||||
/** 获取楼层列表(用于下拉选择) */
|
||||
export const fetchFloorListForSelect = (params?: { datacenter_id?: number; keyword?: string; name?: string }) => {
|
||||
const normalizedParams = params?.keyword ? { ...params, name: params.name ?? params.keyword } : params
|
||||
return request.get('/Assets/v1/floor/all', { params: normalizedParams })
|
||||
export const fetchDatacenterList = (params?: { keyword?: string }) => {
|
||||
return request.get('/Assets/v1/datacenter/all', { params })
|
||||
}
|
||||
|
||||
@@ -11,7 +11,8 @@ export interface RoomItem {
|
||||
description?: string
|
||||
floor_id: number
|
||||
datacenter_id: number
|
||||
status?: string
|
||||
layout_version: number
|
||||
status: string
|
||||
has3D: boolean
|
||||
floor?: { id: number; name: string }
|
||||
datacenter?: { id: number; name: string }
|
||||
@@ -26,6 +27,13 @@ export interface RoomListResponse {
|
||||
}
|
||||
}
|
||||
|
||||
/** 机房详情响应 */
|
||||
export interface RoomDetailResponse {
|
||||
code: number
|
||||
message?: string
|
||||
details: RoomItem
|
||||
}
|
||||
|
||||
/** 机房列表查询参数 */
|
||||
export interface RoomListParams {
|
||||
page?: number
|
||||
@@ -54,6 +62,12 @@ export interface RoomOptionItem {
|
||||
sort: number
|
||||
}
|
||||
|
||||
export interface ApiResponse<T> {
|
||||
code: number
|
||||
message?: string
|
||||
details: T
|
||||
}
|
||||
|
||||
/** 机房创建数据 */
|
||||
export interface RoomCreateData {
|
||||
name: string
|
||||
@@ -61,8 +75,7 @@ export interface RoomCreateData {
|
||||
description?: string
|
||||
floor_id: number
|
||||
datacenter_id: number
|
||||
status?: string
|
||||
has3D: boolean
|
||||
status: string
|
||||
}
|
||||
|
||||
/** 机房更新数据 */
|
||||
@@ -74,7 +87,6 @@ export interface RoomUpdateData {
|
||||
floor_id?: number
|
||||
datacenter_id?: number
|
||||
status?: string
|
||||
has3D?: boolean
|
||||
}
|
||||
|
||||
/** 获取机房列表(分页) */
|
||||
@@ -84,17 +96,17 @@ export const fetchRoomList = (data?: RoomListParams) => {
|
||||
|
||||
/** 获取机房详情 */
|
||||
export const fetchRoomDetail = (id: number) => {
|
||||
return request.get<RoomItem>(`/Assets/v1/room/detail/${id}`)
|
||||
return request.get<RoomDetailResponse>(`/Assets/v1/room/detail/${id}`)
|
||||
}
|
||||
|
||||
/** 获取机房列表(下拉,不分页) */
|
||||
export const fetchRoomOptions = (params?: RoomOptionsParams) => {
|
||||
return request.get<RoomOptionItem[]>('/Assets/v1/room/all', { params })
|
||||
return request.get<ApiResponse<RoomOptionItem[]>>('/Assets/v1/room/all', { params })
|
||||
}
|
||||
|
||||
/** 根据楼层获取机房列表(下拉,不分页) */
|
||||
export const fetchRoomListByFloor = (floorId: number, params?: { name?: string }) => {
|
||||
return request.get<RoomItem[]>(`/Assets/v1/room/floor/${floorId}`, { params })
|
||||
return request.get<ApiResponse<RoomItem[]>>(`/Assets/v1/room/floor/${floorId}`, { params })
|
||||
}
|
||||
|
||||
/** 创建机房 */
|
||||
|
||||
@@ -1,31 +1,100 @@
|
||||
import { request } from '@/api/request'
|
||||
|
||||
/** U 位状态 */
|
||||
export type RackUnitStatus = 'available' | 'occupied' | 'reserved' | 'disabled'
|
||||
|
||||
/** U 位关联资产摘要 */
|
||||
export interface RackUnitAssetSummary {
|
||||
unit_start: number
|
||||
}
|
||||
|
||||
/** U 位公共字段 */
|
||||
export interface RackUnitBase {
|
||||
unit_number: number
|
||||
occupied_units: number
|
||||
description?: string
|
||||
}
|
||||
|
||||
/** 可用 U 位 */
|
||||
export interface AvailableRackUnit extends RackUnitBase {
|
||||
status: 'available'
|
||||
}
|
||||
|
||||
/** 已占用 U 位 */
|
||||
export interface OccupiedRackUnit extends RackUnitBase {
|
||||
status: 'occupied'
|
||||
asset_id: number
|
||||
asset_name: string
|
||||
asset_code: string
|
||||
asset_type: string
|
||||
power_consumption: number
|
||||
asset: RackUnitAssetSummary
|
||||
}
|
||||
|
||||
/** 已预留 U 位 */
|
||||
export interface ReservedRackUnit extends RackUnitBase {
|
||||
status: 'reserved'
|
||||
reserved_for: string
|
||||
reserved_until: string
|
||||
}
|
||||
|
||||
/** 已禁用 U 位 */
|
||||
export interface DisabledRackUnit extends RackUnitBase {
|
||||
status: 'disabled'
|
||||
}
|
||||
|
||||
/** 单个 U 位数据 */
|
||||
export type RackUnitItem = AvailableRackUnit | OccupiedRackUnit | ReservedRackUnit | DisabledRackUnit
|
||||
|
||||
/** U 位页面使用的机柜摘要 */
|
||||
export interface RackUnitRackInfo {
|
||||
id?: number
|
||||
room_id: number
|
||||
height: number
|
||||
status?: string
|
||||
used_power?: number
|
||||
}
|
||||
|
||||
/** 获取机柜 U 位状态响应 */
|
||||
export interface RackUnitListResponse {
|
||||
code: number
|
||||
message?: string
|
||||
details: {
|
||||
rack: RackUnitRackInfo
|
||||
units: RackUnitItem[]
|
||||
}
|
||||
}
|
||||
|
||||
/** 获取机柜U位状态 */
|
||||
export const fetchRackUnits = (rackId: number) => {
|
||||
return request.get(`/Assets/v1/unit/rack/${rackId}`)
|
||||
return request.get<RackUnitListResponse>(`/Assets/v1/unit/rack/${rackId}`)
|
||||
}
|
||||
|
||||
/** 获取U位列表(别名) */
|
||||
export const fetchUnitList = fetchRackUnits
|
||||
|
||||
/** 分配U位 */
|
||||
export const allocateUnit = (data: {
|
||||
/** 机柜设备上架数据 */
|
||||
export interface RackPlacementData {
|
||||
expected_version: number
|
||||
rack_id: number
|
||||
start_unit: number
|
||||
occupied_units: number
|
||||
asset_id?: number
|
||||
asset_code?: string
|
||||
asset_name: string
|
||||
asset_type: string
|
||||
power_consumption?: number
|
||||
description?: string
|
||||
}) => {
|
||||
return request.post('/Assets/v1/unit/allocate', data)
|
||||
power_consumption: number
|
||||
}
|
||||
|
||||
/** 释放U位 */
|
||||
export const releaseUnit = (data: { rack_id: number; start_unit: number; end_unit: number }) => {
|
||||
return request.post('/Assets/v1/unit/release', data)
|
||||
/** 将资产上架到机柜U位 */
|
||||
export const placeAssetInRack = (roomId: number, assetId: number, data: RackPlacementData) => {
|
||||
return request.put(`/Assets/v1/three-d/rooms/${roomId}/devices/${assetId}/placement`, {
|
||||
...data,
|
||||
placement_type: 'rack',
|
||||
})
|
||||
}
|
||||
|
||||
/** 取消资产在机房中的放置 */
|
||||
export const unplaceAsset = (roomId: number, assetId: number, expectedVersion: number) => {
|
||||
return request.delete(`/Assets/v1/three-d/rooms/${roomId}/devices/${assetId}/placement`, {
|
||||
data: { expected_version: expectedVersion },
|
||||
})
|
||||
}
|
||||
|
||||
/** 预留U位 */
|
||||
|
||||
Reference in New Issue
Block a user