104 lines
2.2 KiB
TypeScript
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`)
|
|
},
|
|
}
|