121 lines
3.6 KiB
TypeScript
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
|
|
}
|