import { request } from './request';
|
import type { StorageAttachment } from './supplier';
|
|
export interface PageResult<T> { list: T[]; total: number; }
|
export type PurchaseKind = 'request' | 'order' | 'invoice' | 'payment';
|
|
export interface PurchaseItem {
|
id?: number;
|
productId?: number;
|
productName?: string;
|
productCode?: string;
|
productSpecification?: string;
|
productUnitId?: number;
|
productUnitName?: string;
|
productPrice?: number;
|
count?: number;
|
taxPercent?: number;
|
demandTime?: string;
|
qcCheckFlag?: boolean;
|
bizType?: number;
|
bizId?: number;
|
bizNo?: string;
|
totalPrice?: number;
|
paidPrice?: number;
|
paymentPrice?: number;
|
remark?: string;
|
}
|
|
export interface PurchaseRecord {
|
id?: number;
|
no?: string;
|
status?: number;
|
supplierId?: number;
|
supplierName?: string;
|
requestUserName?: string;
|
requestDeptName?: string;
|
requestTime?: string;
|
orderTime?: string;
|
invoiceTime?: string;
|
paymentTime?: string;
|
requestReason?: string;
|
invoiceNo?: string;
|
invoiceTitle?: string;
|
purchaseOrderId?: number;
|
order?: { id?: number; no?: string };
|
invoice?: { no?: string; invoiceNo?: string; remainingInvoicePrice?: number };
|
invoiceId?: number;
|
accountId?: number;
|
accountName?: string;
|
financeUserId?: number;
|
financeUserName?: string;
|
totalCount?: number;
|
totalPrice?: number;
|
paymentPrice?: number;
|
discountPrice?: number;
|
discountPercent?: number;
|
depositPrice?: number;
|
price?: number;
|
remainingInvoicePrice?: number;
|
sourceType?: number;
|
sourceNo?: string;
|
sourceId?: number;
|
inStatus?: number;
|
remark?: string;
|
productNames?: string;
|
processInstanceId?: string | number;
|
orderId?: number;
|
orderNo?: string;
|
hasAttachment?: boolean;
|
blobIds?: number[];
|
attachmentList?: StorageAttachment[];
|
items?: PurchaseItem[];
|
}
|
|
export interface PurchaseProcess { id?: string; key?: string; processDefinitionKey?: string; name?: string; }
|
export interface PurchaseInvoiceSimple {
|
id: number;
|
no?: string;
|
invoiceNo?: string;
|
invoiceTitle?: string;
|
supplierId?: number;
|
purchaseOrderId?: number;
|
remainingInvoicePrice?: number;
|
price?: number;
|
}
|
export interface AccountSimple { id: number; name: string; no?: string; defaultStatus?: boolean; }
|
export interface UserSimple { id: number; nickname?: string; username?: string; }
|
|
const config: Record<PurchaseKind, { endpoint: string; permission: string }> = {
|
request: { endpoint: 'purchase-request', permission: 'erp:purchase-request' },
|
order: { endpoint: 'purchase-order', permission: 'erp:purchase-order' },
|
invoice: { endpoint: 'purchase-invoice', permission: 'erp:purchase-invoice' },
|
payment: { endpoint: 'finance-payment', permission: 'erp:finance-payment' },
|
};
|
function authHeader(accessToken: string) { return { Authorization: `Bearer ${accessToken}` }; }
|
function query(params: Record<string, string | number | undefined>) {
|
const content = Object.entries(params).filter(([, value]) => value !== undefined && value !== '')
|
.map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`).join('&');
|
return content ? `?${content}` : '';
|
}
|
function base(kind: PurchaseKind) { return `/erp/${config[kind].endpoint}`; }
|
export function getPurchasePermission(kind: PurchaseKind) { return config[kind].permission; }
|
export function getPurchasePage(accessToken: string, kind: PurchaseKind, params: { pageNo: number; pageSize: number; no?: string; supplierId?: number; status?: number; bizNo?: string }) {
|
return request<PageResult<PurchaseRecord>>(`${base(kind)}/page${query(params)}`, { header: authHeader(accessToken) });
|
}
|
export function getPurchase(accessToken: string, kind: PurchaseKind, id: number) {
|
return request<PurchaseRecord>(`${base(kind)}/get${query({ id })}`, { header: authHeader(accessToken) });
|
}
|
export function createPurchase(accessToken: string, kind: PurchaseKind, data: PurchaseRecord) {
|
return request<number>(`${base(kind)}/create`, { method: 'POST', data, header: authHeader(accessToken) });
|
}
|
export function updatePurchase(accessToken: string, kind: PurchaseKind, data: PurchaseRecord) {
|
return request<boolean>(`${base(kind)}/update`, { method: 'PUT', data, header: authHeader(accessToken) });
|
}
|
export function deletePurchase(accessToken: string, kind: PurchaseKind, id: number) {
|
return request<boolean>(`${base(kind)}/delete${query(kind === 'invoice' ? { id } : { ids: id })}`, { method: 'DELETE', header: authHeader(accessToken) });
|
}
|
export function getPurchaseProcessList(accessToken: string, kind: 'request' | 'order' | 'payment', id?: number) {
|
return request<PurchaseProcess[]>(`${base(kind)}/approve-process-list${query({ id })}`, { header: authHeader(accessToken) });
|
}
|
export function submitPurchase(accessToken: string, kind: 'request' | 'order' | 'payment', id: number, processDefinitionKey: string) {
|
return request<boolean>(`${base(kind)}/submit${query({ id, processDefinitionKey })}`, { method: kind === 'request' ? 'PUT' : 'POST', data: kind === 'request' ? undefined : {}, header: authHeader(accessToken) });
|
}
|
export function updatePurchaseOrderStatus(accessToken: string, id: number, status: number) {
|
return request<boolean>(`${base('order')}/update-status${query({ id, status })}`, { method: 'PUT', header: authHeader(accessToken) });
|
}
|
export function reverseApprovePurchaseOrder(accessToken: string, processInstanceId: string | number) {
|
return request<boolean>(`${base('order')}/reverse-approve${query({ processInstanceId })}`, { method: 'POST', data: {}, header: authHeader(accessToken) });
|
}
|
export function confirmPurchaseReceipt(accessToken: string, id: number) {
|
return request<number>(`${base('order')}/confirm-receipt${query({ id })}`, { method: 'POST', data: {}, header: authHeader(accessToken) });
|
}
|
export function generatePurchaseOrder(accessToken: string, id: number, supplierId: number) {
|
return request<number>(`${base('request')}/generate-order${query({ id, supplierId })}`, { method: 'POST', data: {}, header: authHeader(accessToken) });
|
}
|
export function getPurchaseOrderPage(accessToken: string, params: { pageNo: number; pageSize: number; status?: number }) {
|
return request<PageResult<PurchaseRecord>>(`${base('order')}/page${query(params)}`, { header: authHeader(accessToken) });
|
}
|
export function getPurchaseInvoiceSimpleList(accessToken: string, supplierId: number, purchaseOrderId?: number) {
|
return request<PurchaseInvoiceSimple[]>(`${base('invoice')}/simple-list${query({ supplierId, purchaseOrderId })}`, { header: authHeader(accessToken) });
|
}
|
export function getAccountSimpleList(accessToken: string) {
|
return request<AccountSimple[]>('/erp/account/simple-list', { header: authHeader(accessToken) });
|
}
|
export function getSimpleUserList(accessToken: string) {
|
return request<UserSimple[]>('/system/user/simple-list', { header: authHeader(accessToken) });
|
}
|