GuDingZiChan/frontend/src/api/equipment.ts

121 lines
3.6 KiB
TypeScript

import api from './index'
import type { Equipment, PaginatedResponse, ApiResponse } from '@/types'
export interface EquipmentBundleChildPayload {
equipment_name: string
equipment_model?: string
equipment_type: string
code_generation_mode?: 'auto' | 'manual'
quantity?: number
unit_price?: number
purchase_date?: string
supplier?: string
description?: string
storage_location_id?: number
department_id?: number
asset_type_id?: number
notes?: string
}
export type EquipmentCreatePayload = Omit<Partial<Equipment>, 'children'> & {
entry_mode?: 'single' | 'parent' | 'child'
children?: EquipmentBundleChildPayload[]
}
export type EquipmentUpdatePayload = Omit<Partial<Equipment>, 'children'>
const transformEquipmentPayload = (data: EquipmentCreatePayload | EquipmentUpdatePayload) => {
const payload: Record<string, any> = { ...data }
if (payload.storageLocation) {
payload.storage_location_id = payload.storageLocation?.id
delete payload.storageLocation
}
if (payload.storage_location_id !== undefined && payload.storage_location_id !== null) {
payload.storage_location_id = Number(payload.storage_location_id)
} else {
delete payload.storage_location_id
}
return payload
}
// 获取资产列表
export const getEquipmentList = async (params: {
page?: number
pageSize?: number
equipmentType?: string
status?: string
keyword?: string
sort?: 'created_desc' | 'updated_desc' | 'recent_change'
storageLocationId?: number
departmentId?: number
mount_status?: string
}) => {
const { storageLocationId, departmentId, ...rest } = params
const response = await api.get<ApiResponse<PaginatedResponse<Equipment>>>('/equipment/list', {
params: {
...rest,
storage_location_id: storageLocationId,
department_id: departmentId
}
})
return response.data
}
// 获取资产详情
export const getEquipmentDetail = async (id: number) => {
const response = await api.get<ApiResponse<Equipment>>(`/equipment/${id}`)
return response.data
}
// 新增资产
export const createEquipment = async (data: EquipmentCreatePayload) => {
const response = await api.post<ApiResponse<Equipment>>('/equipment', transformEquipmentPayload(data))
return response.data
}
// 更新资产
export const updateEquipment = async (id: number, data: EquipmentUpdatePayload) => {
const response = await api.put<ApiResponse<Equipment>>(`/equipment/${id}`, transformEquipmentPayload(data))
return response.data
}
// 删除资产
export const deleteEquipment = async (id: number) => {
const response = await api.delete<ApiResponse<void>>(`/equipment/${id}`)
return response.data
}
// 生成资产编码
export const generateEquipmentCode = async (
equipmentType: string,
codeGenerationMode: string = 'auto',
storageLocationId?: number | null
) => {
const response = await api.post<ApiResponse<{ equipment_code: string; code_format: string }>>(
'/equipment/generate-code',
{
equipment_type: equipmentType,
code_generation_mode: codeGenerationMode,
storage_location_id: storageLocationId
}
)
return response.data
}
// 验证资产编码
export const verifyEquipmentCode = async (equipmentCode: string) => {
const response = await api.post<ApiResponse<{ is_valid: boolean; is_unique: boolean; message: string }>>(
'/equipment/verify-code',
{
equipment_code: equipmentCode
}
)
return response.data
}
// 根据资产编码查询资产信息(扫码)
export const scanEquipment = async (equipmentCode: string) => {
const response = await api.get<ApiResponse<Equipment>>(`/equipment/scan/${equipmentCode}`)
return response.data
}