首次提交:初始化项目代码
This commit is contained in:
+650
@@ -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
|
||||
})
|
||||
Reference in New Issue
Block a user