diff --git a/CLAUDE.md b/CLAUDE.md index 86eb176..c3721e7 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -75,8 +75,10 @@ client/src/ ├── components/ # 公共组件 │ ├── BudgetBar/ # 预算进度条 │ ├── CategoryIcon/ # 分类图标 (首字+颜色) +│ ├── ChartWrapper/ # uCharts 图表封装 │ ├── Icon/ # 图标组件 (PNG 映射) │ ├── Numpad/ # 数字键盘 +│ ├── SaveSuccess/ # 保存成功动画 │ ├── Skeleton/ # 骨架屏 │ └── TransactionItem/ # 交易列表项 ├── stores/ # Pinia stores @@ -89,9 +91,12 @@ client/src/ ├── api/ # API 封装 │ ├── auth.ts # 登录接口 │ ├── transaction.ts # 交易接口 +│ ├── category.ts # 分类接口 +│ ├── budget.ts # 预算接口 │ ├── stats.ts # 统计接口 │ ├── user.ts # 用户信息接口 (含头像上传) -│ └── group.ts # 群组接口 +│ ├── group.ts # 群组接口 +│ └── index.ts # barrel 导出 ├── utils/ │ ├── format.ts # 金额/日期格式化 │ ├── request.ts # HTTP 请求封装 (401 自动重登录+队列重试) diff --git a/client/src/api/stats.ts b/client/src/api/stats.ts index 482eb7f..1165250 100644 --- a/client/src/api/stats.ts +++ b/client/src/api/stats.ts @@ -4,8 +4,11 @@ import { request } from '@/utils/request' export interface Overview { expense: number income: number + expenseCount: number + incomeCount: number count: number daily: number + dailyIncome: number } /** 分类统计 */ diff --git a/client/src/api/transaction.ts b/client/src/api/transaction.ts index 5f0e5e4..bb130d5 100644 --- a/client/src/api/transaction.ts +++ b/client/src/api/transaction.ts @@ -3,6 +3,7 @@ import { request } from '@/utils/request' /** 交易记录 */ export interface Transaction { id: number + user_id: number amount: number type: 'expense' | 'income' category_id: number @@ -13,6 +14,7 @@ export interface Transaction { category_color?: string group_id?: number | null creator_nickname?: string + creator_avatar?: string } /** 交易列表响应 */ diff --git a/client/src/components/CategoryIcon/CategoryIcon.vue b/client/src/components/CategoryIcon/CategoryIcon.vue index 439b224..e873533 100644 --- a/client/src/components/CategoryIcon/CategoryIcon.vue +++ b/client/src/components/CategoryIcon/CategoryIcon.vue @@ -19,7 +19,7 @@ const sizeMap = { sm: 64, md: 88, lg: 112 } const fontMap = { sm: 28, md: 36, lg: 48 } const iconStyle = computed(() => ({ - background: props.bgColor || (props.color + '15'), + background: props.selected ? '#FFE8E0' : (props.bgColor || (props.color + '15')), width: (sizeMap[props.size || 'md']) + 'rpx', height: (sizeMap[props.size || 'md']) + 'rpx', })) @@ -43,6 +43,5 @@ const fontSize = computed(() => (fontMap[props.size || 'md']) + 'rpx') .selected { border-color: #FF8C69; - background: #FFE8E0 !important; } diff --git a/client/src/components/ChartWrapper/ChartWrapper.vue b/client/src/components/ChartWrapper/ChartWrapper.vue index 0c99479..08d2fee 100644 --- a/client/src/components/ChartWrapper/ChartWrapper.vue +++ b/client/src/components/ChartWrapper/ChartWrapper.vue @@ -53,7 +53,7 @@ function buildConfig(ctx: any, canvas2d: boolean, cssWidth: number, cssHeight: n height: cssHeight, animation: true, background: '#FFFFFF', - padding: [20, 20, 20, 20], + padding: [10, 10, 10, 10], fontSize: 10, fontColor: '#8B7E7E', title: { show: false }, diff --git a/client/src/components/Skeleton/Skeleton.vue b/client/src/components/Skeleton/Skeleton.vue index ef1e1f2..16911c8 100644 --- a/client/src/components/Skeleton/Skeleton.vue +++ b/client/src/components/Skeleton/Skeleton.vue @@ -37,4 +37,10 @@ const style = computed(() => ({ 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } + +@media (prefers-reduced-motion: reduce) { + .skeleton { + animation: none; + } +} diff --git a/client/src/components/TransactionItem/TransactionItem.vue b/client/src/components/TransactionItem/TransactionItem.vue index ab56da3..a561384 100644 --- a/client/src/components/TransactionItem/TransactionItem.vue +++ b/client/src/components/TransactionItem/TransactionItem.vue @@ -8,7 +8,13 @@ @touchmove="!disableSwipe && onTouchMove($event)" @touchend="!disableSwipe && onTouchEnd()" > + + + + {{ item.creator_nickname?.[0] }} + {{ item.note || item.category_name || '未分类' }} - {{ item.category_name || '未分类' }}{{ hideDate ? '' : ' · ' + formatDate(item.date) }} + + {{ item.creator_nickname }} · + {{ item.category_name || '未分类' }}{{ hideDate ? '' : ' · ' + formatDate(item.date) }} + {{ item.type === 'expense' ? '-' : '+' }}{{ formatAmount(item.amount) }} @@ -27,14 +36,16 @@