Industrial-image-management.../src/apis/project/budget.ts

117 lines
2.8 KiB
TypeScript

import http from '@/utils/http'
const BASE_URL = '/project/budget'
/** 预算记录响应类型 */
export interface BudgetRecordResp {
id: string
projectId: string
projectName: string
projectCode: string
projectAmount: number
projectManager: string
establishDate: string
deliveryDate: string
client: string
remark: string
applyBudgetAmount: number
applicant: string
applyTime: string
auditStatus: string // 'pending' | 'approved' | 'rejected'
auditStatusLabel: string
auditRemark: string
auditor: string
auditTime: string
budgetProgress: number
usedBudgetAmount: number
remainingBudgetAmount: number
}
/** 预算项类型 */
export interface BudgetItemResp {
id?: string
budgetName: string
budgetType: string
budgetAmount: number
budgetDescription: string
attachments?: Array<{
id: string
name: string
url: string
}>
}
/** 预算申请请求类型 */
export interface BudgetApplyReq {
projectId: string
budgetItems: BudgetItemResp[]
totalAmount: number
applyReason?: string
}
/** 预算审核请求类型 */
export interface BudgetAuditReq {
auditStatus: 'approved' | 'rejected'
auditRemark: string
}
/** 预算查询参数 */
export interface BudgetQuery {
projectName?: string
projectCode?: string
auditStatus?: string
applicant?: string
applyTimeStart?: string
applyTimeEnd?: string
}
export interface BudgetPageQuery extends BudgetQuery, PageQuery {}
/** @desc 查询预算记录列表 */
export function listBudgetRecord(query: BudgetPageQuery) {
return http.get<PageRes<BudgetRecordResp[]>>(`${BASE_URL}/record`, query)
}
/** @desc 获取预算记录详情 */
export function getBudgetRecord(id: string) {
return http.get<BudgetRecordResp>(`${BASE_URL}/record/${id}`)
}
/** @desc 申请预算 */
export function applyBudget(data: BudgetApplyReq) {
return http.post<boolean>(`${BASE_URL}/apply`, data)
}
/** @desc 审核预算 */
export function auditBudget(id: string, data: BudgetAuditReq) {
return http.put<boolean>(`${BASE_URL}/audit/${id}`, data)
}
/** @desc 获取预算类型选项 */
export function getBudgetTypes() {
return http.get<Array<{ label: string, value: string }>>(`${BASE_URL}/types`)
}
/** @desc 上传预算附件 */
export function uploadBudgetAttachment(file: File) {
const formData = new FormData()
formData.append('file', file)
return http.post<{ id: string, name: string, url: string }>(`${BASE_URL}/upload`, formData, {
headers: {
'Content-Type': 'multipart/form-data',
},
})
}
/** @desc 删除预算附件 */
export function deleteBudgetAttachment(id: string) {
return http.del(`${BASE_URL}/attachment/${id}`)
}
/** @desc 导出预算记录 */
export function exportBudgetRecord(query: BudgetQuery) {
return http.get(`${BASE_URL}/export`, query, {
responseType: 'blob',
})
}