Files
smart-project-pricing/前端应用/src/api/market-analysis.ts
2026-01-31 21:33:06 +08:00

104 lines
2.2 KiB
TypeScript

/**
* 市场分析 API
*/
import { request } from './request'
// 价格统计
export interface PriceStatistics {
min_price: number
max_price: number
avg_price: number
median_price: number
std_deviation: number | null
}
// 价格分布项
export interface PriceDistributionItem {
range: string
count: number
percentage: number
}
// 价格分布
export interface PriceDistribution {
low: PriceDistributionItem
medium: PriceDistributionItem
high: PriceDistributionItem
}
// 竞品价格摘要
export interface CompetitorPriceSummary {
competitor_name: string
positioning: string
original_price: number
promo_price: number | null
collected_at: string
}
// 标杆参考
export interface BenchmarkReference {
tier: string
min_price: number
max_price: number
avg_price: number
}
// 建议定价区间
export interface SuggestedRange {
min: number
max: number
recommended: number
}
// 市场分析结果
export interface MarketAnalysisResult {
project_id: number
project_name: string
analysis_date: string
competitor_count: number
price_statistics: PriceStatistics
price_distribution: PriceDistribution | null
competitor_prices: CompetitorPriceSummary[]
benchmark_reference: BenchmarkReference | null
suggested_range: SuggestedRange
}
// 市场分析响应(数据库记录)
export interface MarketAnalysisResponse {
id: number
project_id: number
analysis_date: string
competitor_count: number
market_min_price: number
market_max_price: number
market_avg_price: number
market_median_price: number
suggested_range_min: number
suggested_range_max: number
created_at: string
}
// 市场分析请求
export interface MarketAnalysisRequest {
competitor_ids?: number[]
include_benchmark?: boolean
}
// API 方法
export const marketAnalysisApi = {
/**
* 执行市场分析
*/
analyze(projectId: number, data?: MarketAnalysisRequest) {
return request.post<MarketAnalysisResult>(`/projects/${projectId}/market-analysis`, data || {})
},
/**
* 获取最新市场分析结果
*/
getLatest(projectId: number) {
return request.get<MarketAnalysisResponse>(`/projects/${projectId}/market-analysis`)
},
}