首次提交:初始化项目代码

This commit is contained in:
sunct
2026-07-31 14:42:05 +08:00
commit ecca407485
84 changed files with 24158 additions and 0 deletions
+650
View File
@@ -0,0 +1,650 @@
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
})