Files
simple-memo-wx/api/index.js
T

650 lines
16 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import {
clearCache,
getPreferences
} from '../utils/utils.js'
// 所有接口统一出口
import request from '../utils/request.js'
// ===================== 用户相关接口 =====================
/**
* 微信登录
* @param {string} code - 微信登录code
* @returns {Promise<{token: string, userInfo: Object}>}
*/
export const login = (code) => request({
url: '/user/login',
method: 'POST',
data: {
code
}
})
/**
* 获取用户信息
* @returns {Promise<Object>}
*/
export const getUserInfo = () => request({
url: '/user/info',
method: 'POST'
})
/**
* 更新用户信息
* @returns {Promise<Object>}
*/
export const editUserInfo = (params) => request({
url: '/user/edit',
method: 'POST',
data: params
})
/**
* 退出登录
* @returns {Promise<void>}
*/
export const logout = () => request({
url: '/user/logout',
method: 'POST'
})
// ===================== 用户配置相关接口(新增) =====================
/**
* 获取用户配置(主题)
* @returns {Promise<Object>} - {theme: string}
*/
export const getUserConfig = () => request({
url: '/user/config/info',
method: 'POST'
})
/**
* 编辑用户配置
* @param {Object} params - 配置参数
* @param {string} [params.theme] - 主题
* @returns {Promise<Object>} - 更新后的配置信息
*/
export const editUserConfig = (params) => request({
url: '/user/config/edit',
method: 'POST',
data: params
})
// ===================== 头像相关接口 =====================
/**
* @typedef {Object} AvatarItem 头像项
* @property {string} id - 头像ID
* @property {string} url - 头像图片地址
*/
/**
* 获取头像列表
* @returns {Promise<AvatarItem[]>}
*/
export const getAvatarList = () => request({
url: '/user/avatar/list',
method: 'POST'
})
// ===================== 待办相关接口 =====================
/**
* 添加待办
* @param {Object} data - 待办数据
* @param {string} data.content - 待办内容
* @param {string} data.date - 日期 YYYY-MM-DD
* @param {string} [data.remindTime] - 提醒时间
* @param {number} [data.repeatType=0] - 重复类型
* @returns {Promise<TodoItem>}
*/
export const addTodo = (data) => request({
url: '/todo/add',
method: 'POST',
data
})
/**
* 获取待办列表
* @param {Object} params - 查询参数
* @param {string} params.date - 日期 YYYY-MM-DD
* @param {number} [params.status] - 状态 0-未完成 1-已完成
* @returns {Promise<TodoItem[]>}
*/
export const getTodoList = (params) => request({
url: '/todo/list',
method: 'POST',
data: params
})
/**
* 删除待办
* @param {Object} data - 删除参数
* @param {string} data.id - 待办ID
* @returns {Promise<void>}
*/
export const deleteTodo = (data) => request({
url: '/todo/delete',
method: 'POST',
data
})
/**
* 完成/取消完成待办
* @param {Object} data - 操作参数
* @param {string} data.id - 待办ID
* @param {number} data.status - 状态 0-取消完成 1-完成
* @returns {Promise<TodoItem>}
*/
export const doneTodo = (data) => request({
url: '/todo/done',
method: 'POST',
data
})
/**
* 编辑待办
* @param {Object} data - 待办数据
* @param {string} data.id - 待办ID
* @param {string} [data.content] - 待办内容
* @param {string} [data.date] - 日期
* @param {string} [data.remindTime] - 提醒时间
* @param {number} [data.repeatType] - 重复类型
* @returns {Promise<TodoItem>}
*/
export const editTodo = (data) => request({
url: '/todo/edit',
method: 'POST',
data
})
// ===================== 账单相关接口 =====================
/**
* 添加账单
* @param {Object} data - 账单数据
* @param {number} data.type - 类型 1-支出 2-收入 3-转账
* @param {string} data.money - 金额
* @param {string} data.cate - 分类
* @param {string} [data.note] - 备注
* @param {string} data.date - 日期 YYYY-MM-DD
* @param {string} [data.fromAccount] - 转出账户
* @param {string} [data.toAccount] - 转入账户
* @returns {Promise<BillItem>}
*/
export const addBill = (data) => request({
url: '/bill/add',
method: 'POST',
data
})
/**
* 编辑账单
* @param {Object} data - 账单数据
* @param {string} data.id - 账单ID
* @param {number} [data.type] - 类型
* @param {string} [data.money] - 金额
* @param {string} [data.cate] - 分类
* @param {string} [data.note] - 备注
* @param {string} [data.date] - 日期
* @param {string} [data.fromAccount] - 转出账户
* @param {string} [data.toAccount] - 转入账户
* @returns {Promise<BillItem>}
*/
export const editBill = (data) => request({
url: '/bill/edit',
method: 'POST',
data
})
/**
* 获取账单列表
* @param {Object} params - 查询参数
* @param {string} params.date - 日期 YYYY-MM-DD
* @param {number} [params.type] - 类型 1-支出 2-收入 3-转账
* @param {string} [params.keyword] - 搜索关键词
* @returns {Promise<BillItem[]>}
*/
export const getBillList = (params) => request({
url: '/bill/list',
method: 'POST',
data: params
})
/**
* 删除账单
* @param {Object} params - 删除参数
* @param {string} params.id - 账单ID
* @returns {Promise<void>}
*/
export const deleteBill = (params) => request({
url: '/bill/delete',
method: 'POST',
data: params
})
/**
* 获取月度统计
* @param {Object} [params] - 查询参数
* @param {string} [params.month] - 月份 YYYY-MM
* @returns {Promise<MonthStat>}
*/
export const getMonthStat = (params = {}) => request({
url: '/bill/stat/month',
method: 'POST',
data: params
})
/**
* 获取分类统计
* @param {Object} params - 查询参数
* @param {string} params.month - 月份 YYYY-MM
* @param {number} [params.type] - 类型 1-支出 2-收入
* @returns {Promise<Object[]>}
*/
export const getCateStat = (params) => request({
url: '/bill/stat/category',
method: 'POST',
data: params
})
/**
* 导出账单
* @param {Object} params - 导出参数
* @param {string} params.startDate - 开始日期 YYYY-MM-DD
* @param {string} params.endDate - 结束日期 YYYY-MM-DD
* @param {number} [params.type] - 账单类型 1-支出 2-收入 3-转账
* @returns {Promise<ExportBillRes>}
*/
export const exportBill = (params) => request({
url: '/bill/export',
method: 'POST',
data: params
})
// ===================== 预算相关接口(新增) =====================
/**
* 获取月度预算
* @param {Object} [params] - 查询参数
* @param {string} [params.month] - 月份 YYYY-MM,默认当前月
* @returns {Promise<BudgetItem>}
*/
export const getMonthBudget = (params = {}) => request({
url: '/budget/get',
method: 'POST',
data: params
})
/**
* 设置/更新月度预算
* @param {Object} data - 预算数据
* @param {number} data.amount - 预算金额
* @param {string} [data.month] - 月份 YYYY-MM,默认当前月
* @returns {Promise<BudgetItem>}
*/
export const setMonthBudget = (data) => request({
url: '/budget/set',
method: 'POST',
data
})
/**
* 删除月度预算
* @param {Object} params - 删除参数
* @param {string} [params.month] - 月份 YYYY-MM,默认当前月
* @returns {Promise<void>}
*/
export const deleteMonthBudget = (params = {}) => request({
url: '/budget/delete',
method: 'POST',
data: params
})
// ===================== 分类管理接口 =====================
/**
* 获取自定义分类列表
* @param {number} [type] - 类型 1-支出 2-收入
* @returns {Promise<Object[]>}
*/
export const getCustomCateList = (type) => request({
url: '/category/list',
method: 'POST',
data: type ? {
type
} : {}
})
/**
* 添加自定义分类
* @param {Object} data - 分类数据
* @param {string} data.name - 分类名称
* @param {number} data.type - 类型 1-支出 2-收入
* @param {string} [data.icon] - 图标
* @param {string} [data.color] - 颜色
* @returns {Promise<Object>}
*/
export const addCustomCate = (data) => request({
url: '/category/add',
method: 'POST',
data
})
/**
* 删除自定义分类
* @param {Object} data - 删除参数
* @param {string} data.id - 分类ID
* @returns {Promise<void>}
*/
export const deleteCustomCate = (data) => request({
url: '/category/delete',
method: 'POST',
data
})
// ===================== 心情相关接口 =====================
/**
* 获取某天的心情
* @param {Object} params - 查询参数
* @param {string} params.date - 日期 YYYY-MM-DD
* @returns {Promise<MoodItem>}
*/
export const getMoodByDate = (params) => request({
url: '/mood/get',
method: 'POST',
data: params
})
/**
* 保存心情
* @param {Object} data - 心情数据
* @param {string} data.date - 日期 YYYY-MM-DD
* @param {string} data.emoji - 心情表情
* @param {string} [data.content] - 心情内容(可选)
* @returns {Promise<MoodItem>}
*/
export const saveMood = (data) => request({
url: '/mood/save',
method: 'POST',
data
})
export const getAiMoodResult = (moodId) => request({
url: '/ai/mood/result',
method: 'POST',
data: { mood_id: moodId }
})
export const regenerateAiMood = (moodId) => request({
url: '/ai/mood/regenerate',
method: 'POST',
data: { mood_id: moodId }
})
/**
* 获取心情列表
* @param {Object} params - 查询参数
* @param {string} [params.start_date] - 开始日期 YYYY-MM-DD
* @param {string} [params.end_date] - 结束日期 YYYY-MM-DD
* @returns {Promise<MoodItem[]>}
*/
export const getMoodList = (params = {}) => request({
url: '/mood/list',
method: 'POST',
data: params
})
/**
* 删除心情
* @param {Object} data - 删除参数
* @param {string} data.id - 心情ID
* @returns {Promise<void>}
*/
export const deleteMood = (data) => request({
url: '/mood/delete',
method: 'POST',
data
})
export const getCaptcha = (data) => request({
url: '/captcha/digit',
method: 'POST',
needLogin: false,
showLoading: false
})
// ===================== 邮箱相关接口 =====================
/**
* 获取邮箱验证码
* @param {Object} data - 请求参数
* @param {string} data.email - 邮箱地址
* @returns {Promise<void>}
*/
export const sendEmailCode = (data) => request({
url: '/user/email/code',
method: 'POST',
data
})
/**
* 设置/修改邮箱
* @param {Object} data - 请求参数
* @param {string} data.email - 邮箱地址
* @param {string} data.code - 验证码
* @returns {Promise<Object>}
*/
export const setUserEmail = (data) => request({
url: '/user/email/set',
method: 'POST',
data
})
export const emailLogin = (data) => request({
url: '/user/email/login',
method: 'POST',
data
})
export const register = (data) => request({
url: '/user/register',
method: 'POST',
data
})
export const resetPassword = (data) => request({
url: '/user/reset-password',
method: 'POST',
data
})
export const changePassword = (data) => request({
url: '/user/change-password',
method: 'POST',
data
})
export const checkEmailExists = (data) => request({
url: '/user/email/exists',
method: 'POST',
data
})
export const bindWechat = (data) => request({
url: '/user/bind-wechat',
method: 'POST',
data
})
// ===================== 复盘相关接口(新增) =====================
/**
* 保存复盘数据
* @param {Object} data - 复盘数据
* @param {string} data.date - 日期 YYYY-MM-DD
* @param {string} data.method - 复盘方法 kpt/grai
* @param {Object} [data.kpt] - KPT数据
* @param {string} data.kpt.keep - 保持
* @param {string} data.kpt.problem - 问题
* @param {string} data.kpt.try - 尝试
* @param {Object} [data.grai] - GRAI数据
* @param {string} data.grai.goal - 目标
* @param {string} data.grai.result - 结果
* @param {string} data.grai.analysis - 分析
* @param {string} data.grai.insight - 洞察
* @returns {Promise<ReviewItem>}
*/
export const saveReview = (data) => request({
url: '/review/save',
method: 'POST',
data
})
/**
* 获取单条复盘数据
* @param {Object} params - 查询参数
* @param {string} params.date - 日期 YYYY-MM-DD
* @returns {Promise<ReviewItem>}
*/
export const getReviewByDate = (params) => request({
url: '/review/get',
method: 'POST',
data: params
})
/**
* 获取复盘列表
* @param {Object} params - 查询参数
* @param {string} [params.start_date] - 开始日期 YYYY-MM-DD
* @param {string} [params.end_date] - 结束日期 YYYY-MM-DD
* @param {string} [params.keyword]
* @param {string} [params.page]
* @param {string} [params.page_size]
* @returns {Promise<ReviewItem[]>}
*/
export const getReviewList = (params = {}) => request({
url: '/review/list',
method: 'POST',
data: params
})
/**
* 删除复盘
* @param {Object} params - 删除参数
* @param {string} params.id - 复盘ID
* @returns {Promise<void>}
*/
export const deleteReview = (params) => request({
url: '/review/delete',
method: 'POST',
data: params
})
// ===================== 成长系统相关接口 =====================
/**
* 获取成长信息
* @returns {Promise<Object>}
*/
export const getGrowthInfo = () => request({
url: '/growth/info',
method: 'POST'
})
/**
* 获取成就列表
* @returns {Promise<Object[]>}
*/
export const getGrowthAchievements = () => request({
url: '/growth/achievements',
method: 'POST'
})
/**
* 获取成长规则
* @returns {Promise<Object>}
*/
export const getGrowthRules = () => request({
url: '/growth/rules',
method: 'POST'
})
// ===================== AI 智能分类接口 =====================
/**
* AI 智能分类 - 提交内容后由后端自动分类并批量创建记录
* @param {Object} data - 分类数据
* @param {string} data.content - 用户输入的文本内容
* @param {string} [data.date] - 日期 YYYY-MM-DD
* @returns {Promise<{ items: Array<{category: string, data: Object}>, message: string }>}
* items[i].category: 'todo' | 'bill' | 'mood' | 'review'
* items[i].data - 对应类型的记录数据:
* todo: { id, title, priority, date, end_time, ... }
* bill: { id, money, cate, note, date, ... }
* mood: { id, content, date, ... }
* review: { id, content, method, date, ... }
*/
export const aiClassify = (data) => request({
url: '/ai/classify',
method: 'POST',
data,
showLoading: false
})
// ===================== 首页聚合接口 =====================
/**
* 获取首页每日聚合数据
* 替代首页并发调用 getTodoList + getBillList + getMoodByDate
* @param {Object} [params] - 查询参数
* @param {string} [params.date] - 日期 YYYY-MM-DD,不传默认今天
* @returns {Promise<Object>} 聚合数据,包含 todo/bill/mood/review/growth
*/
export const getDashboardDaily = (params = {}) => request({
url: '/dashboard/daily',
method: 'POST',
data: params,
showLoading: false
})
// ===================== 待办统计接口 =====================
/**
* 获取待办统计数据
* @param {Object} params - 查询参数
* @param {string} params.start_date - 开始日期 YYYY-MM-DD
* @param {string} params.end_date - 结束日期 YYYY-MM-DD
* @returns {Promise<Object>} 统计数据
*/
export const getTodoStat = (params) => request({
url: '/todo/stat',
method: 'POST',
data: params,
showLoading: false
})
// ===================== 心情统计接口 =====================
/**
* 获取心情统计数据
* @param {Object} params - 查询参数
* @param {string} params.month - 月份 YYYY-MM
* @returns {Promise<Object>} 统计数据
*/
export const getMoodStat = (params) => request({
url: '/mood/stat',
method: 'POST',
data: params,
showLoading: false
})
// ===================== 账单聚合统计接口 =====================
/**
* 获取账单聚合统计(整合 getMonthStat + getCateStat
* @param {Object} params - 查询参数
* @param {string} params.start_date - 开始日期 YYYY-MM-DD
* @param {string} params.end_date - 结束日期 YYYY-MM-DD
* @param {number} [params.type] - 类型筛选 1-支出 2-收入
* @returns {Promise<Object>} 聚合统计数据
*/
export const getBillAggregateStat = (params) => request({
url: '/bill/stat/aggregate',
method: 'POST',
data: params,
showLoading: false
})