30 Commits

Author SHA1 Message Date
zhangjf
a74875eeda feat(移动端): 新增支出使用 COS 上传附件
1. API 增强 (src/api/index.ts):
   - 新增 uploadFile 函数:支持文件上传到腾讯云 COS
   - 新增 getFileList 函数:获取文件列表
   - 新增 deleteFile 函数:删除文件

2. 新增支出页面优化 (src/views/expense/Add.vue):
   - 修改附件上传逻辑:从 base64 改为 COS 上传
   - onAfterRead: 调用 uploadFile API 上传到 COS
   - 获取 COS 返回的文件路径并存储
   - 提交时将 COS 路径数组转为逗号分隔字符串
   - 图片预览直接使用 COS URL
   - 添加上传进度提示和成功/失败反馈

技术实现:
- 使用 FormData 进行 multipart/form-data 上传
- 业务类型标识为'expense'
- 附件以 COS 完整 URL 形式存储(逗号分隔)
- 支持多图片上传(最多 9 张)
- 每张图片独立上传到 COS,获得永久可访问链接
2026-03-01 22:23:59 +08:00
zhangjf
da4488dccc feat(移动端): 优化支出管理功能
1. 新增支出 (Add.vue):
   - 增加图片附件上传功能(限制为图片类型)
   - 支持最多上传 9 张图片
   - 实现图片预览和删除功能
   - 将图片转 base64 格式提交到后端 attachments 字段

2. 支出列表 (List.vue):
   - 重构卡片布局为 5 行展示:
     * 第一行:标题 + 支出时间(右侧对齐)
     * 第二行:支出类型(左)+ 支出金额(右,红色突出显示)
     * 第三行:收款单位
     * 第四行:支付描述(可选,有内容时显示)
     * 第五行:查看附件按钮(有附件时显示,蓝色可点击)
   - 添加 formatDateTime 函数格式化日期时间
   - 添加 getAttachmentCount 函数计算附件数量
   - 添加 previewAttachments 函数实现图片预览
   - 优化样式:分隔线、图标、标签等细节美化

技术实现:
- 使用 Vant 的 van-uploader 组件上传图片
- 使用 ImagePreview 组件预览图片
- 附件以 base64 逗号分隔字符串形式存储
- 响应式布局适配移动端
2026-03-01 22:17:20 +08:00
zhangjf
6923024650 修复前端登录租户ID 缺失问题 + 新增集成测试
1. 管理后台 (fund-admin):
   - src/api/auth.ts: 登录请求自动添加默认租户ID (tenantId: 1)
   - src/views/login/index.vue: 优化 MD5 加密注释

2. 移动端 (fund-mobile):
   - src/api/index.ts: 登录 API 自动添加默认租户ID (tenantId: 1)

3. 系统服务 (fund-sys):
   - 新增 AuthControllerIntegrationTest.java: 登录接口集成测试
   - 验证登录请求格式和响应格式的正确性
   - 演示完整的登录流程(需要数据库支持)

4. 依赖更新:
   - fund-admin/package-lock.json
   - fund-mobile/package-lock.json

技术细节:
- 解决后端要求 tenantId 必填导致的 400 错误
- 前后端一致的租户ID 默认值处理
- 端到端登录流程验证
2026-03-01 22:03:03 +08:00
zhangjf
455a20c1df 完善项目配置和测试用例
新增内容:
1. 添加 AGENTS.md 和 CLAUDE.md AI 助手配置文件
2. 添加安全修复说明文档 (doc/security-fixes.md)
3. 新增单元测试用例:
   - fund-common: TenantContextHolderTest, UserContextHolderTest, PageResultTest, ResultTest
   - fund-sys: AuthServiceImplTest, RoleServiceImplTest, TenantServiceImplTest

修改内容:
1. 数据库初始化脚本更新 (fund_sys_init.sql)
2. 前端依赖更新 (package.json)
3. 登录和密码管理功能优化:
   - 管理后台和移动端登录页面
   - 密码修改功能
4. 租户上下文处理优化 (TenantLineHandlerImpl)
5. 网关过滤器增强:
   - TenantGatewayFilter 租户过滤
   - TokenAuthFilter 认证过滤
6. Controller 层代码优化
7. DTO 和 Service 层代码改进

技术改进:
- 密码加密方式从 BCrypt 改为 MD5(前后端一致)
- 登录验证流程优化,支持多租户
- 增加日志输出便于调试
- 代码规范性和可维护性提升
2026-03-01 19:06:42 +08:00
zhangjf
df2f1cdfa2 fix: 项目列表字段对齐,ProjectVO的id改为projectId,添加customerName 2026-02-23 14:36:59 +08:00
zhangjf
83e8712dfc fix: 新增支出页面添加收款单位必填字段 2026-02-23 14:23:27 +08:00
zhangjf
9498201313 fix: 新增需求页面添加需求编号和客户ID字段,修正需求名称字段 2026-02-23 14:14:38 +08:00
zhangjf
f87ee0b51d feat: 移动端新增项目添加项目编码和项目类型字段 2026-02-23 14:07:23 +08:00
zhangjf
ff9f4d05ad fix: 移动端列表页首次加载pageNum从1开始
**问题:**
- van-list组件的@load事件在挂载时自动触发
- 导致onLoad先执行pageNum++,首次请求时pageNum变成2

**修复:**
- 在onMounted中主动加载第一页数据
- onLoad只处理加载更多逻辑
- 统一所有列表页:customer, project, expense, requirement, receivable
2026-02-23 13:43:43 +08:00
zhangjf
9b545b3f00 fix: 客户列表查询失败问题修复
**问题根因:**
1. PageResult返回字段list与前端期望records不一致
2. CustomerVO字段名与前端期望不一致

**修改内容:**
- fund-common: PageResult字段list改为records
- fund-cust: CustomerVO字段id改为customerId
- fund-mobile: 客户列表页面字段对齐
- fund-admin: 客户管理页面字段对齐
2026-02-23 13:26:07 +08:00
zhangjf
011a6bfb3f fix: 移动端新增客户表单与后端字段对齐
- 新增联系人(contact)字段,设为必填
- 客户编码(customerCode)设为必填
- 移除后端不支持的字段:简称、客户等级、所属行业
- 表单字段与后端CustomerCreateDTO保持一致
2026-02-23 13:14:17 +08:00
zhangjf
965d98cab5 feat: 移动端新增客户页面添加客户编码字段
- 新增客户编码输入框(customerCode)
- 位于客户名称字段之前
2026-02-23 13:05:57 +08:00
zhangjf
69f437dbb3 fix: 移动端表单优化
1. 新增页面必填项标记
   - expense/Add.vue: 支出标题、支出类型、支出金额添加红色星号必填标记
   - 其他使用 van-form 的页面已有 required 属性标记

2. 错误提示优化
   - 将 showToast 改为 showFailToast 显示错误提示
   - showFailToast 使用红色背景,错误信息更清晰可见
   - 涉及文件:
     - expense/Add.vue
     - requirement/Add.vue
     - receivable/Add.vue
     - project/Add.vue
     - customer/Add.vue
     - my/ChangePassword.vue
2026-02-23 12:56:52 +08:00
zhangjf
b5a954f008 fix: 修复列表页浮动添加按钮被底部Tabbar遮挡的问题
将列表页浮动添加按钮的bottom值从24px调整为80px:
- receivable/List.vue
- expense/List.vue
- requirement/List.vue

Tabbar高度64px,添加按钮需要预留足够空间避免被遮挡
2026-02-23 12:43:42 +08:00
zhangjf
205af48cb6 fix: 修复底部工具栏遮挡页面提交按钮的问题
1. 在App.vue中统一添加padding-bottom: 80px
2. 移除各列表页面重复的padding-bottom设置
   - expense/List.vue
   - requirement/List.vue
   - receivable/List.vue
2026-02-23 12:37:20 +08:00
zhangjf
400b7272d4 feat: 移动端新增修改密码功能
1. 新增修改密码页面 (my/ChangePassword.vue)
   - 支持输入旧密码、新密码、确认密码
   - 密码验证:至少6位、两次输入一致性校验
   - 修改成功后自动清除登录信息并跳转到登录页

2. 新增API接口 (updatePassword)
   - PUT /sys/profile/password
   - 参数: oldPassword, newPassword, confirmPassword

3. 更新路由配置
   - 新增 /my/change-password 路由

4. 更新我的页面
   - 修改密码点击跳转到修改密码页面
2026-02-23 12:32:36 +08:00
zhangjf
e7f1b39ac8 style: 移动端首页UI调整
1. 删除顶部标题区域,节省页面垂直空间
2. 快捷操作调整为2行布局(第一行3个,第二行2个)
3. 优化快捷操作图标和文字大小
2026-02-23 12:26:58 +08:00
zhangjf
d3a77c23f1 feat: 移动端首页重构与业务模块完善
1. 首页布局调整
   - 保留今日概览板块
   - 快捷操作板块:新增需求工单、新增应收款、新增支出、新增项目、新增客户
   - 新增业务服务板块:需求工单、应收款管理、支出管理、项目管理、客户管理入口

2. 新增页面
   - 需求工单:列表页(支持搜索)、新增页
   - 支出管理:列表页(支持搜索)、保留新增页
   - 应收款:新增页、列表页添加搜索功能
   - 项目:新增页、列表页优化搜索参数
   - 客户:新增页、列表页优化搜索参数

3. API更新
   - 新增需求工单相关API(getRequirementList、getRequirementById、createRequirement)
   - 新增项目新增API(createProject)
   - 新增客户新增API(createCustomer)
   - 新增应收款新增API(createReceivable)
   - 更新搜索参数为统一的keyword格式

4. 路由更新
   - 新增需求工单列表/新增路由
   - 新增支出管理列表路由
   - 新增应收款新增路由
   - 新增项目新增路由
   - 新增客户新增路由
2026-02-23 11:51:52 +08:00
zhangjf
2e7fb5f5d4 fix: 修复移动端API路径错误,统一归集到api/index.ts
问题:
- Vue文件中直接使用错误的API路径 /api/v1/xxx
- 导致请求URL重复包含/api/v1,被当作静态资源处理

修复:
1. 重构src/api/index.ts,按模块分类集中定义所有API
   - 用户认证:login, getUserInfo, logout
   - 项目管理:getProjectList, getProjectById
   - 客户管理:getCustomerList
   - 支出管理:createExpense, getExpenseList, getExpenseTypeTree, getTodayExpense
   - 应收款管理:getReceivableList, getUpcomingDueList, getTodayIncome, getUnpaidAmount, getOverdueCount

2. 修复各Vue文件,使用集中的API定义
   - Home.vue: 使用getTodayIncome, getTodayExpense, getUnpaidAmount
   - receivable/List.vue: 使用getReceivableList
   - expense/Add.vue: 使用createExpense, getExpenseTypeTree
   - Login.vue: 使用login

正确的API路径:
- 前端请求: /fund/receipt/receivable/page
- Gateway转发: /api/v1/receipt/receivable/page
2026-02-23 11:18:44 +08:00
zhangjf
807f894828 fix: 修复Login.vue登录API路径错误
- 将 '/sys/api/v1/auth/login' 修正为 '/auth/login'
- baseURL已配置为/fund,最终请求地址为 /fund/auth/login
2026-02-23 10:47:30 +08:00
zhangjf
1a5b583c2f feat: fund-mobile支持Nginx子路径/fmobile部署
- 新增.env.development/.env.production环境配置
- vite.config.ts支持VITE_BASE动态base路径
- router使用import.meta.env.BASE_URL
- API baseURL使用环境变量
- 新增vite-env.d.ts类型声明
2026-02-23 10:28:51 +08:00
zhangjf
8490b7a2c6 fix: 全面修复网关路由与前端API路径一致性问题
问题分析:
1. 后端Controller路径不一致:
   - fund-cust: /api/v1/customer (不是/api/v1/cust/customer)
   - fund-proj: /api/v1/project (不是/api/v1/proj/project)
   - fund-sys: /api/v1/auth 和 /api/v1/sys/* 两种路径

2. 之前的错误修改导致路径不匹配

解决方案:
- 网关: StripPrefix=1 + PrefixPath=/api/v1
- 前端: baseURL=/fund,路径直接对应后端路径

网关路由配置:
- fund-sys: /fund/auth/**,/fund/sys/** -> /api/v1/auth/*,/api/v1/sys/*
- fund-cust: /fund/customer/** -> /api/v1/customer/*
- fund-proj: /fund/project/**,/fund/requirement/** -> /api/v1/project/*,/api/v1/requirement/*
- fund-exp: /fund/exp/** -> /api/v1/exp/*
- fund-receipt: /fund/receipt/** -> /api/v1/receipt/*
- fund-report: /fund/report/** -> /api/v1/report/*
- fund-file: /fund/file/** -> /api/v1/file/*

前端API路径规范:
- 认证: /auth/login -> /api/v1/auth/login
- 用户: /sys/user/page -> /api/v1/sys/user/page
- 客户: /customer/page -> /api/v1/customer/page
- 项目: /project/page -> /api/v1/project/page
- 支出: /exp/expense/page -> /api/v1/exp/expense/page
- 收款: /receipt/receivable/page -> /api/v1/receipt/receivable/page
- 报表: /report/stats -> /api/v1/report/stats
- 文件: /file/upload -> /api/v1/file/upload

修改文件:
- fund-gateway/application.yml: 路由配置调整
- TenantGatewayFilter.java: 白名单路径修正
- TokenAuthFilter.java: 白名单路径修正
- fund-admin/src/api/*.ts: 所有API路径修正
- fund-mobile/src/api/index.ts: 所有API路径修正
- FileUpload组件: 上传路径修正
2026-02-22 23:06:54 +08:00
zhangjf
3b0b10d5b2 fix: 修复前端API路径与网关路由配置匹配
问题:前端API包含/api/v1导致路径重复
- 前端: /fund/sys/api/v1/auth/login
- 网关StripPrefix=2后: /api/v1/auth/login
- PrefixPath=/api/v1后: /api/v1/api/v1/auth/login 

修复:移除前端API中的/api/v1前缀

fund-admin修改:
- auth.ts: /sys/auth/login
- user.ts: /sys/sys/user/page
- tenant.ts: /sys/sys/tenant/page
- customer.ts: /cust/cust/customer/page
- project.ts: /proj/proj/project/page
- expense.ts: /exp/exp/expense/page
- receivable.ts: /receipt/receipt/receivable/page
- report.ts: /report/report/dashboard/stats
- file.ts: /file/file/upload
- menu.ts: /sys/sys/menu/tree
- role.ts: /sys/sys/role/page
- dept.ts: /sys/sys/dept/list
- config.ts: /sys/sys/config/page
- FileUpload组件: /fund/file/file/upload

fund-mobile修改:
- index.ts: 统一移除/api/v1,添加模块名重复

路由流程示例:
- 前端请求: /fund/sys/auth/login
- StripPrefix=2: /auth/login
- PrefixPath=/api/v1: /api/v1/auth/login ✓
2026-02-22 22:56:00 +08:00
zhangjf
797feff8c2 feat: fund-gateway增加/fund context path
修改内容:
1. fund-gateway/application.yml:
   - 所有路由Path添加/fund前缀
   - StripPrefix从1改为2(剥离/fund和模块名两级)
   - 例:/fund/sys/... -> 转发到 /api/v1/sys/...

2. 前端API配置:
   - fund-admin/src/api/request.ts: baseURL改为'/fund'
   - fund-mobile/src/api/request.ts: baseURL改为'/fund'

3. Nginx部署脚本:
   - 添加/fund/路径代理配置
   - 保留/api/代理兼容旧版

API调用示例:
- 旧版:/sys/auth/login
- 新版:/fund/sys/auth/login

网关路由:
- /fund/sys/** -> lb://fund-sys/api/v1/sys/**
- /fund/cust/** -> lb://fund-cust/api/v1/cust/**
- ...
2026-02-22 22:24:20 +08:00
zhangjf
8190887de8 feat: 数据库脚本优化、前端部署脚本、租户ID支持
- 数据库脚本优化
  - 新增01_create_user.sql创建fundsp用户
  - 新增02_grant_user.sql授权脚本
  - 新增fund_exp_init.sql、fund_receipt_init.sql
  - 修复SQL脚本与实体类一致性
  - 密码更新为fundSP@123

- 前端部署脚本
  - 新增build-frontend.sh前端构建脚本
  - 新增deploy-frontend-nginx.sh Nginx部署脚本
  - 打包输出到deploy目录

- 租户ID支持
  - fund-admin/fund-mobile支持query参数读取tid
  - 新增tenant.ts store管理租户状态
  - 请求拦截器添加X-Tenant-Id header

- 启动脚本修复
  - 修复INSTANCE_NAME变量替换问题
  - 更新所有service.properties配置

- 配置更新
  - 更新所有服务数据库密码
  - 更新docker-compose.yml配置
2026-02-22 19:45:52 +08:00
zhangjf
47703e40c4 feat: 移动端完善与操作日志审计功能
1. 移动端fund-mobile完善:
   - 新增项目列表页面 (project/List.vue)
   - 新增客户列表页面 (customer/List.vue)
   - 新增统一API文件 (api/index.ts)
   - 更新路由配置,新增项目和客户路由
   - 首页增加项目和客户快捷入口

2. 操作日志审计功能:
   - OperationLog实体类: 操作日志数据模型
   - OperationLogMapper: MyBatis-Plus Mapper
   - OperationLogService: 日志服务接口和实现
   - OperationLogController: 日志查询API
   - OperationLogAspect: AOP切面自动记录操作日志
   - 支持异步保存,只记录写操作(增删改)

3. 操作日志功能特性:
   - 自动拦截Controller层方法
   - 记录用户ID、用户名、操作描述、请求参数
   - 记录IP、UserAgent、操作时间、耗时
   - 支持成功/失败状态记录
   - 支持分页查询和历史日志清理
2026-02-20 09:16:00 +08:00
zhangjf
8e4afcd1a5 feat: TenantAwareLoadBalancer 整合 TenantRoutingProperties 配置
问题:TenantRoutingProperties 定义了配置但未被使用

解决方案:
1. TenantAwareLoadBalancer 注入 TenantRoutingProperties
   - 使用配置的 tenantHeader 名称
   - 使用配置的 buildTenantGroup 方法
   - 使用配置的 isSharedService 判断
   - 使用配置的 isFallbackToShared 策略

2. 新增功能
   - 支持 enabled=false 禁用租户路由
   - 共享服务跳过租户过滤
   - 可配置是否回退到共享实例

3. 更新测试适配新构造函数
2026-02-19 21:02:25 +08:00
zhangjf
a17307a96e feat: 完成资金服务平台六步实施 - 数据库初始化+服务启动+网关配置
本次提交包含:
1. 11个Maven模块全部创建并编译通过
2. 4个数据库初始化脚本(14张表)
3. fund-sys服务启动验证
4. Gateway路由配置完成
5. API端到端测试通过

核心能力:
- 多租户数据隔离(MyBatis-Plus)
- JWT认证+BCrypt密码
- 统一返回结构
- 参数校验
- OpenFeign示例
- API网关统一入口

修复:
- MyBatis-Plus与Spring Boot 3兼容性问题
- BaseEntity字段类型统一(Long)
- Gateway版本兼容性
2026-02-17 12:53:55 +08:00
zhangjf
efd1810e11 feat: UniApp移动端核心页面全部完成
新增页面:
1. receipt/add.vue (535行) - 收款录入
   * 金额输入(渐变样式)
   * 收款方式选择(银行/支付宝/微信/现金/支票)
   * 客户/项目关联选择
   * 多图上传(最多3张)
   * 图片预览和删除

2. customer/list.vue (503行) - 客户列表
   * 搜索功能
   * 等级筛选(A/B/C级)
   * 下拉刷新/上拉加载
   * 客户卡片(头像/等级/统计)
   * 一键拨号

3. customer/detail.vue (529行) - 客户详情
   * 基本信息展示
   * 合作统计(项目/合同/收支)
   * 时间轴记录
   * 联系功能(电话/邮件)

4. project/list.vue (512行) - 项目列表
   * 状态筛选(未启动/进行中/已完成/已暂停)
   * 进度条展示
   * 财务统计(合同/已收/未收)
   * 下拉刷新/上拉加载

5. project/detail.vue (569行) - 项目详情
   * 项目基本信息
   * 进度圆环展示
   * 项目阶段时间轴
   * 财务情况统计
   * 项目成员展示

6. my/index.vue (434行) - 个人中心
   * 用户信息卡片(渐变背景)
   * 快捷功能入口
   * 功能菜单列表
   * 消息角标
   * 退出登录

总代码量:3082行

功能特性:
- 完整的移动端UI设计
- 与后端API对接
- JWT认证集成
- 图片上传功能
- 下拉刷新/上拉加载
- 电话拨打集成
2026-02-16 11:40:19 +08:00
zhangjf
515590477b feat: UniApp移动端项目初始化及核心页面开发
新增:
- fund-mobile/: UniApp移动端项目(Vue3 + TypeScript)
- manifest.json: 应用配置(支持H5/小程序/App)
- pages.json: 页面路由及TabBar配置
- App.vue: 应用入口,登录状态检查

核心页面:
- login/index.vue: 登录页面(193行)
  * 渐变背景设计
  * JWT登录集成
  * 本地存储token

- index/index.vue: 首页(338行)
  * 数据概览卡片(今日收支/待收付款)
  * 快捷操作入口
  * 最近收支列表

- expense/add.vue: 支出录入(339行)
  * 表单验证
  * 图片上传(拍照/相册)
  * 关联项目选择

配置:
- config/api.ts: API接口地址配置
- utils/request.ts: 请求拦截封装

技术栈:
- Vue 3 Composition API
- TypeScript
- UniApp跨端框架
- SCSS样式

支持平台:
- H5
- 微信小程序
- App(Android/iOS)
2026-02-16 11:26:16 +08:00