Nav apraksta

yourname 8b54fa445c 📝 docs(env): update development environment documentation 2 mēneši atpakaļ
.bmad-core f90f97479f bmad-method 2 mēneši atpakaļ
.claude 1eef1f9e79 🔧 chore(claude): update allowed bash commands in settings 2 mēneši atpakaļ
.gitea d371fbaefa init 5 mēneši atpakaļ
.github 4467e9fe31 ✅ test(admin): 添加管理后台集成测试和e2e测试 2 mēneši atpakaļ
.roo 4026ff8a93 ✨ feat(commands): 添加多个Roo指令文件 3 mēneši atpakaļ
docs 8314bdd58e 📝 docs(architecture): add version information to all architecture documents 2 mēneši atpakaļ
public de5d3fd40d ✨ feat(project): 重构项目为SSR架构并升级技术栈 4 mēneši atpakaļ
scripts 07815f8ab7 🔧 chore(test): remove deprecated test database setup scripts 2 mēneši atpakaļ
src 2955ac62a6 🐛 fix(routes): 解决TypeScript类型检查错误 2 mēneši atpakaļ
tests 7a19297f22 📝 test(admin): add mobile menu support for E2E tests 2 mēneši atpakaļ
.env.example 87feb89db5 📦 chore(deps): 迁移数据库从MySQL到PostgreSQL 2 mēneši atpakaļ
.env.test.example 87feb89db5 📦 chore(deps): 迁移数据库从MySQL到PostgreSQL 2 mēneši atpakaļ
.gitignore 6842d88c1c 📝 docs(story): update database backup and restore tool integration story status 2 mēneši atpakaļ
.npmrc d371fbaefa init 5 mēneši atpakaļ
.rooignore d371fbaefa init 5 mēneši atpakaļ
CLAUDE.md 8b54fa445c 📝 docs(env): update development environment documentation 2 mēneši atpakaļ
Dockerfile.release d371fbaefa init 5 mēneši atpakaļ
Dockerfile.test d371fbaefa init 5 mēneši atpakaļ
README.md 166f6a3073 📝 docs: add common error troubleshooting guide 4 mēneši atpakaļ
components.json dedffdab0d ✨ feat(ui): 集成 shadcn/ui 组件库基础配置 4 mēneši atpakaļ
debug-page.js d3317bf939 ✨ feat(debug): add automated login and page debugging script 2 mēneši atpakaļ
docker-compose.yml 82aba99ba2 🔧 chore(database): 从MySQL迁移到PostgreSQL数据库 2 mēneši atpakaļ
eslint.config.js ee36ea47b2 ✨ feat(eslint): 添加ESLint基础配置和集成 2 mēneši atpakaļ
index.html de5d3fd40d ✨ feat(project): 重构项目为SSR架构并升级技术栈 4 mēneši atpakaļ
package.json 854d75e091 🔧 chore(scripts): update typecheck script 2 mēneši atpakaļ
pnpm-lock.yaml fd5b892c8c ✨ feat(database): add database backup functionality 2 mēneši atpakaļ
server.js 84a1d9c104 🐛 fix(server): 增强错误响应信息 3 mēneši atpakaļ
tsconfig.json de5d3fd40d ✨ feat(project): 重构项目为SSR架构并升级技术栈 4 mēneši atpakaļ
tsconfig.node.json de5d3fd40d ✨ feat(project): 重构项目为SSR架构并升级技术栈 4 mēneši atpakaļ
vite.config.ts 74ab81962a 🔧 chore(vite): update build ignore configuration 2 mēneši atpakaļ
vitest.config.components.ts 308181ff54 🔧 chore(test): 排除测试工具目录在测试和覆盖率统计之外 2 mēneši atpakaļ
vitest.config.ts fa44bbbb8e 🔥 feat(users): remove individual user CRUD API endpoints 2 mēneši atpakaļ

README.md

常见错误排查指南

前端常见错误

日期组件错误

错误表现:
date4.isValid is not a function
TypeError: date4.isValid is not a function

错误原因:
使用原生Date对象而非dayjs对象初始化日期组件

错误示例:

// 错误示例 - 使用原生Date对象
form.setFieldsValue({
  noteDate: new Date(record.noteDate) // 导致验证失败
});

正确做法:

// 正确示例 - 使用dayjs对象
form.setFieldsValue({
  noteDate: dayjs(record.noteDate) // 正常支持验证方法
});

后端常见错误

OpenAPI路由定义错误

1. 路径参数定义错误

错误表现:
路径参数无法正确解析,接口调用404

错误原因:
使用冒号:定义路径参数而非花括号{}

错误示例:

// 错误方式
path: '/:id'

正确做法:

// 正确方式
path: '/{id}'

2. 参数类型转换错误

错误表现:
数字/布尔型URL参数验证失败,提示类型错误

错误原因:
未使用z.coerce处理URL字符串参数到目标类型的转换

错误示例:

// 错误方式 - 直接使用z.number()
z.number().int().positive() // 无法处理字符串参数

// 错误方式 - 直接使用z.boolean()
z.boolean() // 无法处理字符串参数

正确做法:

// 正确方式 - 使用z.coerce.number()
z.coerce.number().int().positive() // 自动转换字符串参数

// 正确方式 - 使用z.coerce.boolean()
z.coerce.boolean() // 自动转换字符串参数

实体定义错误

1. 创建/更新Schema缺少coerce

错误表现:
日期/数字类型参数验证失败,接口返回400错误

错误原因:
实体的创建/更新Schema中,日期、数字等类型未使用z.coerce进行类型转换

正确做法:

export const UpdateEntityDto = z.object({
  price: z.coerce.number().multipleOf(0.01).optional().openapi({
    description: '价格',
    example: 89.99
  }),
  isActive: z.coerce.boolean().optional().openapi({
    description: '是否激活',
    example: false
  }),
  expireDate: z.coerce.date().optional().openapi({
    description: '过期日期',
    example: '2025-12-31T23:59:59Z'
  })
});

RPC调用错误

InferResponseType使用错误

错误表现:
TypeScript类型推断失败,提示属性不存在

错误原因:
访问带参数的路由类型时未正确使用数组语法

错误示例:

// 错误方式
InferResponseType<typeof zichanClient[':id'].$get, 200>

正确做法:

// 正确方式 - $get要加中括号
InferResponseType<typeof zichanClient[':id']['$get'], 200>

前后端交互错误

表单验证规则不匹配

错误表现:
前端表单提交后后端验证失败,或前端验证通过但后端返回400

错误原因:
前端表单的必填/选填规则与后端实体的create/update schema不一致

正确做法:

  1. 前端表单验证规则必须与后端保持一致
  2. 后端实体schema变更时需同步更新前端表单验证
  3. 创建操作使用CreateXXXDto,更新操作使用UpdateXXXDto