diff --git a/src/api/erp/purchase-inquiry/index.ts b/src/api/erp/purchase-inquiry/index.ts new file mode 100644 index 0000000..0e0e503 --- /dev/null +++ b/src/api/erp/purchase-inquiry/index.ts @@ -0,0 +1,171 @@ +import type { PageParam, PageResult } from '@/http/types' +import { http } from '@/http/http' + +export interface PurchaseInquiryQuote { + id?: number + inquiryId?: number + invitationId?: number + supplierId?: number + supplierName?: string + contactName?: string + contactPhone?: string + quoteDate?: string | number | Date + unitPrice?: number + totalPrice?: number + paymentTerms?: string + deliveryCycle?: number + expectedArrivalDate?: string | number | Date + qualificationFile?: string + remark?: string + isSelected?: boolean + quoteStatus?: number + submitSource?: string + priceScore?: number + qualityScore?: number + deliveryScore?: number + serviceScore?: number + totalScore?: number +} + +export interface PurchaseInquiry { + id?: number + no?: string + productId?: number + productName?: string + requireCount?: number + budgetPrice?: number + inquiryTime?: string | number | Date + deadline?: string | number | Date + status?: number + remark?: string + selectedQuoteId?: number + creatorName?: string + creator?: number + quoteCount?: number + minQuotePrice?: number + quotes?: PurchaseInquiryQuote[] +} + +export interface PurchaseInquiryPublishReq { + inquiryId: number + supplierIds: number[] + linkExpireTime?: string | number | Date +} + +export interface PurchaseInquiryInvitation { + id?: number + inquiryId?: number + supplierId?: number + supplierName?: string + status?: number + accessToken?: string + portalUrl?: string + linkExpireTime?: string | number | Date + firstViewTime?: string | number | Date + lastViewTime?: string | number | Date + submitTime?: string | number | Date + sendTime?: string | number | Date + quoteId?: number + quoteDate?: string | number | Date + unitPrice?: number + totalPrice?: number + paymentTerms?: string + deliveryCycle?: number + expectedArrivalDate?: string | number | Date + qualificationFile?: string + remark?: string + submitSource?: string + contactName?: string + contactPhone?: string +} + +export interface PurchaseInquiryCompareReq { + inquiryId: number + priceWeight: number + qualityWeight: number + deliveryWeight: number + serviceWeight: number + quotes?: { + quoteId: number + qualityScore?: number + serviceScore?: number + }[] +} + +export interface PurchaseInquiryCompareQuote { + quoteId: number + supplierId: number + supplierName?: string + unitPrice?: number + totalPrice?: number + deliveryCycle?: number + expectedArrivalDate?: string | number | Date + qualificationFile?: string + priceScore?: number + qualityScore?: number + deliveryScore?: number + serviceScore?: number + totalScore?: number + historicalAvgTotalScore?: number + historicalEvaluationCount?: number + attachmentProvided?: boolean + recommended?: boolean + recommendationReasons?: string[] + riskTips?: string[] +} + +export interface PurchaseInquiryCompareResp { + inquiryId: number + inquiryNo?: string + productName?: string + requireCount?: number + budgetPrice?: number + recommendedQuoteId?: number + recommendedSupplierId?: number + recommendedSupplierName?: string + recommendedTotalScore?: number + analysisSummary?: string + analysisTime?: string | number | Date + riskTips?: string[] + quotes: PurchaseInquiryCompareQuote[] +} + +export function getPurchaseInquiryPage(params: PageParam) { + return http.get>('/erp/purchase-inquiry/page', params) +} + +export function getPurchaseInquiry(id: number) { + return http.get(`/erp/purchase-inquiry/get?id=${id}`) +} + +export function createPurchaseInquiry(data: PurchaseInquiry) { + return http.post('/erp/purchase-inquiry/create', data) +} + +export function updatePurchaseInquiry(data: PurchaseInquiry) { + return http.put('/erp/purchase-inquiry/update', data) +} + +export function updatePurchaseInquiryStatus(id: number, status: number) { + return http.put(`/erp/purchase-inquiry/update-status?id=${id}&status=${status}`) +} + +export function publishPurchaseInquiry(data: PurchaseInquiryPublishReq) { + return http.post('/erp/purchase-inquiry/publish', data) +} + +export function comparePurchaseInquiry(data: PurchaseInquiryCompareReq) { + return http.post('/erp/purchase-inquiry/compare-recommend', data) +} + +export function getPurchaseInquiryInvitationList(inquiryId: number) { + return http.get(`/erp/purchase-inquiry/invitation-list?inquiryId=${inquiryId}`) +} + +export function selectPurchaseInquiryQuote(inquiryId: number, quoteId: number) { + return http.put(`/erp/purchase-inquiry/select-quote?inquiryId=${inquiryId}"eId=${quoteId}`) +} + +export function deletePurchaseInquiry(ids: number[]) { + return http.delete(`/erp/purchase-inquiry/delete?ids=${ids.join(',')}`) +} diff --git a/src/api/erp/purchase-statistics/index.ts b/src/api/erp/purchase-statistics/index.ts new file mode 100644 index 0000000..70a09aa --- /dev/null +++ b/src/api/erp/purchase-statistics/index.ts @@ -0,0 +1,75 @@ +import { http } from '@/http/http' + +export interface PurchaseSummary { + todayPrice: number + yesterdayPrice: number + monthPrice: number + yearPrice: number +} + +export interface PurchaseTimeSummary { + time: string + price: number +} + +export interface PurchaseTrend { + time: string + price: number + count: number +} + +export interface PurchaseProductRank { + productId: number + productName: string + count: number + price: number + inCount: number + returnCount: number + inPrice: number + returnPrice: number + orderCount: number + avgPrice: number + shareRate: number +} + +export interface PurchaseSupplierRank { + supplierId: number + supplierName: string + count: number + price: number + inCount: number + returnCount: number + inPrice: number + returnPrice: number + orderCount: number + avgPrice: number + shareRate: number +} + +export function getPurchaseSummary() { + return http.get('/erp/purchase-statistics/summary') +} + +export function getPurchaseTimeSummary() { + return http.get('/erp/purchase-statistics/time-summary') +} + +export function getPurchaseTrendByWeek(count: number = 12) { + return http.get(`/erp/purchase-statistics/trend-by-week?count=${count}`) +} + +export function getPurchaseTrendByMonth(count: number = 12) { + return http.get(`/erp/purchase-statistics/trend-by-month?count=${count}`) +} + +export function getPurchaseProductRank(beginTime: string, endTime: string, limit: number = 10, sortBy: 'price' | 'count' = 'price') { + return http.get('/erp/purchase-statistics/product-rank', { beginTime, endTime, limit, sortBy }) +} + +export function getPurchaseSupplierRank(beginTime: string, endTime: string, limit: number = 10, sortBy: 'price' | 'count' = 'price') { + return http.get('/erp/purchase-statistics/supplier-rank', { beginTime, endTime, limit, sortBy }) +} + +export function analyzePurchaseStatistics(data: Record) { + return http.post('/erp/purchase-statistics/ai-analysis', data) +} diff --git a/src/pages-erp/purchase-inquiry/compare/index.vue b/src/pages-erp/purchase-inquiry/compare/index.vue new file mode 100644 index 0000000..4dbcbee --- /dev/null +++ b/src/pages-erp/purchase-inquiry/compare/index.vue @@ -0,0 +1,239 @@ + + + + + diff --git a/src/pages-erp/purchase-inquiry/detail/index.vue b/src/pages-erp/purchase-inquiry/detail/index.vue new file mode 100644 index 0000000..cda11e1 --- /dev/null +++ b/src/pages-erp/purchase-inquiry/detail/index.vue @@ -0,0 +1,241 @@ + + + + + diff --git a/src/pages-erp/purchase-inquiry/form/index.vue b/src/pages-erp/purchase-inquiry/form/index.vue new file mode 100644 index 0000000..ed7f59c --- /dev/null +++ b/src/pages-erp/purchase-inquiry/form/index.vue @@ -0,0 +1,266 @@ + + + + + diff --git a/src/pages-erp/purchase-inquiry/index.vue b/src/pages-erp/purchase-inquiry/index.vue new file mode 100644 index 0000000..913594d --- /dev/null +++ b/src/pages-erp/purchase-inquiry/index.vue @@ -0,0 +1,392 @@ + + + + + diff --git a/src/pages-erp/purchase-inquiry/publish/index.vue b/src/pages-erp/purchase-inquiry/publish/index.vue new file mode 100644 index 0000000..3086fcc --- /dev/null +++ b/src/pages-erp/purchase-inquiry/publish/index.vue @@ -0,0 +1,218 @@ + + + + + diff --git a/src/pages-erp/purchase-statistics/index.vue b/src/pages-erp/purchase-statistics/index.vue new file mode 100644 index 0000000..4ec5b73 --- /dev/null +++ b/src/pages-erp/purchase-statistics/index.vue @@ -0,0 +1,271 @@ + + + + +