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} */ export const getUserInfo = () => request({ url: '/user/info', method: 'POST' }) /** * 更新用户信息 * @returns {Promise} */ export const editUserInfo = (params) => request({ url: '/user/edit', method: 'POST', data: params }) /** * 退出登录 * @returns {Promise} */ export const logout = () => request({ url: '/user/logout', method: 'POST' }) // ===================== 用户配置相关接口(新增) ===================== /** * 获取用户配置(主题) * @returns {Promise} - {theme: string} */ export const getUserConfig = () => request({ url: '/user/config/info', method: 'POST' }) /** * 编辑用户配置 * @param {Object} params - 配置参数 * @param {string} [params.theme] - 主题 * @returns {Promise} - 更新后的配置信息 */ 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} */ 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} */ 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} */ export const getTodoList = (params) => request({ url: '/todo/list', method: 'POST', data: params }) /** * 删除待办 * @param {Object} data - 删除参数 * @param {string} data.id - 待办ID * @returns {Promise} */ 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} */ 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} */ 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} */ 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} */ 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} */ export const getBillList = (params) => request({ url: '/bill/list', method: 'POST', data: params }) /** * 删除账单 * @param {Object} params - 删除参数 * @param {string} params.id - 账单ID * @returns {Promise} */ export const deleteBill = (params) => request({ url: '/bill/delete', method: 'POST', data: params }) /** * 获取月度统计 * @param {Object} [params] - 查询参数 * @param {string} [params.month] - 月份 YYYY-MM * @returns {Promise} */ 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} */ 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} */ export const exportBill = (params) => request({ url: '/bill/export', method: 'POST', data: params }) // ===================== 预算相关接口(新增) ===================== /** * 获取月度预算 * @param {Object} [params] - 查询参数 * @param {string} [params.month] - 月份 YYYY-MM,默认当前月 * @returns {Promise} */ 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} */ export const setMonthBudget = (data) => request({ url: '/budget/set', method: 'POST', data }) /** * 删除月度预算 * @param {Object} params - 删除参数 * @param {string} [params.month] - 月份 YYYY-MM,默认当前月 * @returns {Promise} */ export const deleteMonthBudget = (params = {}) => request({ url: '/budget/delete', method: 'POST', data: params }) // ===================== 分类管理接口 ===================== /** * 获取自定义分类列表 * @param {number} [type] - 类型 1-支出 2-收入 * @returns {Promise} */ 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} */ export const addCustomCate = (data) => request({ url: '/category/add', method: 'POST', data }) /** * 删除自定义分类 * @param {Object} data - 删除参数 * @param {string} data.id - 分类ID * @returns {Promise} */ export const deleteCustomCate = (data) => request({ url: '/category/delete', method: 'POST', data }) // ===================== 心情相关接口 ===================== /** * 获取某天的心情 * @param {Object} params - 查询参数 * @param {string} params.date - 日期 YYYY-MM-DD * @returns {Promise} */ 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} */ 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} */ export const getMoodList = (params = {}) => request({ url: '/mood/list', method: 'POST', data: params }) /** * 删除心情 * @param {Object} data - 删除参数 * @param {string} data.id - 心情ID * @returns {Promise} */ 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} */ 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} */ 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} */ export const saveReview = (data) => request({ url: '/review/save', method: 'POST', data }) /** * 获取单条复盘数据 * @param {Object} params - 查询参数 * @param {string} params.date - 日期 YYYY-MM-DD * @returns {Promise} */ 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} */ export const getReviewList = (params = {}) => request({ url: '/review/list', method: 'POST', data: params }) /** * 删除复盘 * @param {Object} params - 删除参数 * @param {string} params.id - 复盘ID * @returns {Promise} */ export const deleteReview = (params) => request({ url: '/review/delete', method: 'POST', data: params }) // ===================== 成长系统相关接口 ===================== /** * 获取成长信息 * @returns {Promise} */ export const getGrowthInfo = () => request({ url: '/growth/info', method: 'POST' }) /** * 获取成就列表 * @returns {Promise} */ export const getGrowthAchievements = () => request({ url: '/growth/achievements', method: 'POST' }) /** * 获取成长规则 * @returns {Promise} */ 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} 聚合数据,包含 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} 统计数据 */ 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} 统计数据 */ 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} 聚合统计数据 */ export const getBillAggregateStat = (params) => request({ url: '/bill/stat/aggregate', method: 'POST', data: params, showLoading: false })