import request from '@/utils/http' type PageList = { list: T[] total: number page: number pageSize: number totalPages: number } export type Material = { id: string materialCode: string materialName: string category: string specModel: string unit: string stockQty: number warningQty: number status: string imageUrls: string tenantNo: string orderNum: number remark: string createBy: string createTime: string updateTime: string } export type MaterialStockLog = { id: string materialId: string materialCode: string materialName: string changeType: string changeQty: number stockBefore: number stockAfter: number receiver: string purpose: string remark: string createBy: string createByName?: string createTime: string updateTime: string } export function fetchMaterialList(params?: { page?: number pageSize?: number keyword?: string category?: string status?: string }) { return request.get>({ url: '/web/admin/materials', params }) } export function fetchMaterialOptions() { return request.get<{ id: string; label: string; materialCode: string }[]>({ url: '/web/admin/materials/options' }) } export function fetchCreateMaterial(data: Record) { return request.post({ url: '/web/admin/materials', data }) } export function fetchUpdateMaterial(id: string, data: Record) { return request.put({ url: `/web/admin/materials/${id}`, data }) } export function fetchDeleteMaterial(id: string) { return request.delete({ url: `/web/admin/materials/${id}` }) } export function fetchStockInMaterial( id: string, data: { qty: number; remark?: string; stockInTime?: string } ) { return request.post({ url: `/web/admin/materials/${id}/stock-in`, data }) } export function fetchStockOutMaterial( id: string, data: { qty: number; receiver?: string; purpose?: string; remark?: string; stockOutTime?: string } ) { return request.post({ url: `/web/admin/materials/${id}/stock-out`, data }) } export function fetchBatchStockInMaterial(data: { items: { materialId: string; qty: number; remark?: string }[] remark?: string stockInTime?: string }) { return request.post<{ count: number }>({ url: '/web/admin/materials/batch-stock-in', data }) } export function fetchBatchStockOutMaterial(data: { items: { materialId: string; qty: number; remark?: string }[] receiver?: string purpose?: string remark?: string stockOutTime?: string }) { return request.post<{ count: number }>({ url: '/web/admin/materials/batch-stock-out', data }) } export function fetchMaterialStockLogList(params?: { page?: number pageSize?: number materialId?: string changeType?: string startTime?: string endTime?: string keyword?: string }) { return request.get>({ url: '/web/admin/material-stock-logs', params }) }