refactor(api): 精简并移除多余的API接口和类型定义

- 移除多余的统计、预算、AI设置、用户偏好、数据同步及AI处理相关类型定义
- 删除大量未使用的API请求函数,简化导出接口
- 保留核心的用户认证、交易记录、聊天消息和账单提醒相关接口
- 优化App组件状态初始化,改为从localStorage加载持久化数据,避免重复请求
- VoiceInput组件重构,改用持续监听及更健壮的权限和错误处理逻辑
- 优化语音识别启动和停止机制,提升用户体验和错误恢复能力
- 更新依赖顺序,无功能性变更
This commit is contained in:
2026-01-23 11:15:25 +08:00
parent d83f34becc
commit d4aa67b97d
5 changed files with 193 additions and 402 deletions

View File

@@ -24,55 +24,6 @@ interface PaginatedResponse<T> {
total: number;
}
// 统计数据响应格式
interface TransactionStats {
month: string;
total_income: number;
total_expense: number;
balance: number;
expense_by_category: Record<string, number>;
income_by_category: Record<string, number>;
daily_expense: Array<{ date: string; amount: number }>;
}
// 预算响应格式
interface Budget {
id: string;
user_id?: string;
member_id?: string;
budgets: Record<string, number>;
month: string;
created_at?: string;
updated_at?: string;
}
// 预算执行情况
interface BudgetExecution {
month: string;
budgets: Record<string, {
budget: number;
spent: number;
remaining: number;
percentage: number;
}>;
total_budget: number;
total_spent: number;
total_remaining: number;
is_over_budget: boolean;
}
// AI设置
interface AISettings {
id?: string;
user_id?: string;
member_id?: string;
name: string;
persona: string;
avatar?: string;
created_at?: string;
updated_at?: string;
}
// 通用请求函数
async function request<T>(
endpoint: string,
@@ -156,13 +107,6 @@ export async function getUserProfile(): Promise<any> {
});
}
/**
* 退出登录
*/
export function logout(): void {
localStorage.removeItem('auth_token');
}
// ==================== 交易记录接口 ====================
/**
@@ -208,13 +152,6 @@ export async function getTransactions(params?: {
);
}
/**
* 获取单个交易记录
*/
export async function getTransaction(id: string): Promise<Transaction> {
return request<Transaction>(`/bill/transactions/${id}`);
}
/**
* 更新交易记录
*/
@@ -244,27 +181,6 @@ export async function deleteTransaction(id: string): Promise<void> {
});
}
/**
* 批量删除交易记录
*/
export async function batchDeleteTransactions(
transactionIds: string[]
): Promise<{ deleted_count: number }> {
return request<{ deleted_count: number }>('/bill/transactions/batch', {
method: 'DELETE',
body: JSON.stringify({ transaction_ids: transactionIds }),
});
}
/**
* 获取交易统计数据
*/
export async function getTransactionStats(
month: string
): Promise<TransactionStats> {
return request<TransactionStats>(`/bill/transactions/stats/summary?month=${month}`);
}
// ==================== 聊天消息接口 ====================
/**
@@ -306,13 +222,6 @@ export async function getMessages(params?: {
);
}
/**
* 获取单个消息
*/
export async function getMessage(id: string): Promise<Message> {
return request<Message>(`/bill/messages/${id}`);
}
/**
* 删除消息
*/
@@ -322,46 +231,6 @@ export async function deleteMessage(id: string): Promise<void> {
});
}
/**
* 清空聊天历史
*/
export async function clearMessages(): Promise<{ deleted_count: number }> {
return request<{ deleted_count: number }>('/bill/messages/clear', {
method: 'DELETE',
});
}
// ==================== 预算管理接口 ====================
/**
* 获取月度预算
*/
export async function getMonthlyBudget(month: string): Promise<Budget> {
return request<Budget>(`/bill/budgets/${month}`);
}
/**
* 设置/更新月度预算
*/
export async function updateMonthlyBudget(
month: string,
budgets: Record<string, number>
): Promise<Budget> {
return request<Budget>(`/bill/budgets/${month}`, {
method: 'PUT',
body: JSON.stringify({ budgets }),
});
}
/**
* 获取预算执行情况
*/
export async function getBudgetExecution(
month: string
): Promise<BudgetExecution> {
return request<BudgetExecution>(`/bill/budgets/${month}/execution`);
}
// ==================== 账单提醒接口 ====================
/**
@@ -403,13 +272,6 @@ export async function getReminders(params?: {
);
}
/**
* 获取单个提醒
*/
export async function getReminder(id: string): Promise<BillReminder> {
return request<BillReminder>(`/bill/reminders/${id}`);
}
/**
* 更新账单提醒
*/
@@ -451,228 +313,28 @@ export async function deleteReminder(id: string): Promise<void> {
});
}
/**
* 获取即将到期的提醒
*/
export async function getUpcomingReminders(
days: number = 7
): Promise<PaginatedResponse<BillReminder>> {
return request<PaginatedResponse<BillReminder>>(
`/bill/reminders/upcoming?days=${days}`
);
}
// ==================== AI设置接口 ====================
/**
* 获取AI设置
*/
export async function getAISettings(): Promise<AISettings> {
return request<AISettings>('/h5/ai-settings');
}
/**
* 更新AI设置
*/
export async function updateAISettings(data: {
name?: string;
persona?: string;
avatar?: string;
}): Promise<AISettings> {
return request<AISettings>('/h5/ai-settings', {
method: 'PUT',
body: JSON.stringify(data),
});
}
/**
* 重置AI设置为默认
*/
export async function resetAISettings(): Promise<AISettings> {
return request<AISettings>('/h5/ai-settings/reset', {
method: 'POST',
});
}
// ==================== 用户偏好接口 ====================
interface UserPreferences {
id?: string;
user_id?: string;
custom_preset_name?: string;
custom_preset_description?: string;
theme_index?: number;
created_at?: string;
updated_at?: string;
}
/**
* 获取用户偏好
*/
export async function getUserPreferences(): Promise<UserPreferences> {
return request<UserPreferences>('/h5/preferences');
}
/**
* 更新用户偏好
*/
export async function updateUserPreferences(
data: Partial<UserPreferences>
): Promise<UserPreferences> {
return request<UserPreferences>('/h5/preferences', {
method: 'PUT',
body: JSON.stringify(data),
});
}
// ==================== 数据同步接口 ====================
interface SyncData {
transactions?: Transaction[];
messages?: Message[];
budgets?: Record<string, number>;
reminders?: BillReminder[];
ai_settings?: AISettings;
preferences?: UserPreferences;
}
/**
* 全量数据同步(上传)
*/
export async function uploadSyncData(data: SyncData): Promise<{
synced_at: string;
summary: {
transactions_count: number;
messages_count: number;
reminders_count: number;
};
}> {
return request('/bill/sync/upload', {
method: 'POST',
body: JSON.stringify(data),
});
}
/**
* 全量数据同步(下载)
*/
export async function downloadSyncData(): Promise<SyncData> {
return request<SyncData>('/bill/sync/download');
}
/**
* 增量数据同步
*/
export async function incrementalSync(data: {
last_sync_at: string;
changes: SyncData;
}): Promise<{
synced_at: string;
server_changes: SyncData;
}> {
return request('/bill/sync/incremental', {
method: 'POST',
body: JSON.stringify(data),
});
}
// ==================== AI处理接口 ====================
interface AIProcessResult {
transaction: {
item: string;
amount: number;
type: 'expense' | 'income';
category: string;
} | null;
reply: string;
created_transaction_id?: string;
created_message_ids?: string[];
}
/**
* AI处理用户消息
*/
export async function processAIMessage(data: {
message: string;
image_base64?: string;
mime_type?: string;
}): Promise<AIProcessResult> {
return request<AIProcessResult>('/ai/process', {
method: 'POST',
body: JSON.stringify(data),
});
}
/**
* AI识别账单图片
*/
export async function recognizeReceipt(
imageFile: File
): Promise<AIProcessResult> {
const formData = new FormData();
formData.append('image', imageFile);
// 注意: FormData需要特殊处理,不设置Content-Type让浏览器自动设置
return request<AIProcessResult>('/ai/recognize-receipt', {
method: 'POST',
body: formData,
headers: {}, // 清空默认headers,让fetch自动处理multipart/form-data
});
}
// ==================== 导出所有API ====================
export default {
// 用户认证
loginOrRegister,
getUserProfile,
logout,
// 交易记录
createTransaction,
getTransactions,
getTransaction,
updateTransaction,
deleteTransaction,
batchDeleteTransactions,
getTransactionStats,
// 聊天消息
createMessage,
getMessages,
getMessage,
deleteMessage,
clearMessages,
// 预算管理
getMonthlyBudget,
updateMonthlyBudget,
getBudgetExecution,
// 账单提醒
createReminder,
getReminders,
getReminder,
updateReminder,
toggleReminder,
deleteReminder,
getUpcomingReminders,
// AI设置
getAISettings,
updateAISettings,
resetAISettings,
// 用户偏好
getUserPreferences,
updateUserPreferences,
// 数据同步
uploadSyncData,
downloadSyncData,
incrementalSync,
// AI处理
processAIMessage,
recognizeReceipt,
};