Signed-off-by: kevin <kevin@lmve.net>
This commit is contained in:
@@ -1,59 +0,0 @@
|
||||
{
|
||||
"version": 2,
|
||||
"sessions": {
|
||||
"c9d5673cc5a442d4afa0a2e7805acb2d": [
|
||||
{
|
||||
"expertId": "BackendArchitect",
|
||||
"name": "Joy",
|
||||
"profession": "后端架构师",
|
||||
"avatarUrl": "https://acc-1258344699.cos.accelerate.myqcloud.com/workbuddy/experts/avatars/02-Engineering/BackendArchitect/BackendArchitect.png",
|
||||
"promptUrl": "https://acc-1258344699.cos.accelerate.myqcloud.com/workbuddy/experts/experts/02-Engineering/BackendArchitect/BackendArchitect_zh.md",
|
||||
"usedAt": 1775015316468,
|
||||
"industryId": "all"
|
||||
},
|
||||
{
|
||||
"expertId": "SeniorDeveloper",
|
||||
"name": "Will",
|
||||
"profession": "高级开发工程师",
|
||||
"avatarUrl": "https://acc-1258344699.cos.accelerate.myqcloud.com/workbuddy/experts/avatars/02-Engineering/SeniorDeveloper/SeniorDeveloper.png",
|
||||
"promptUrl": "https://acc-1258344699.cos.accelerate.myqcloud.com/workbuddy/experts/experts/02-Engineering/SeniorDeveloper/SeniorDeveloper_zh.md",
|
||||
"usedAt": 1774930519865,
|
||||
"industryId": "02-Engineering"
|
||||
}
|
||||
],
|
||||
"11397ece53fd4169b02f239520effebb": [
|
||||
{
|
||||
"expertId": "BackendArchitect",
|
||||
"name": "Joy",
|
||||
"profession": "后端架构师",
|
||||
"avatarUrl": "https://acc-1258344699.cos.accelerate.myqcloud.com/workbuddy/experts/avatars/02-Engineering/BackendArchitect/BackendArchitect.png",
|
||||
"promptUrl": "https://acc-1258344699.cos.accelerate.myqcloud.com/workbuddy/experts/experts/02-Engineering/BackendArchitect/BackendArchitect_zh.md",
|
||||
"usedAt": 1775021430911,
|
||||
"industryId": "all"
|
||||
}
|
||||
],
|
||||
"289fb4d7478e42e594de7f5ef79758e6": [
|
||||
{
|
||||
"expertId": "BackendArchitect",
|
||||
"name": "Joy",
|
||||
"profession": "后端架构师",
|
||||
"avatarUrl": "https://acc-1258344699.cos.accelerate.myqcloud.com/workbuddy/experts/avatars/02-Engineering/BackendArchitect/BackendArchitect.png",
|
||||
"promptUrl": "https://acc-1258344699.cos.accelerate.myqcloud.com/workbuddy/experts/experts/02-Engineering/BackendArchitect/BackendArchitect_zh.md",
|
||||
"usedAt": 1775021430911,
|
||||
"industryId": "all"
|
||||
}
|
||||
],
|
||||
"e2cbd4f39ae54816910727421c9dd4b8": [
|
||||
{
|
||||
"expertId": "FrontendDeveloper",
|
||||
"name": "Paul",
|
||||
"profession": "前端开发工程师",
|
||||
"avatarUrl": "https://acc-1258344699.cos.accelerate.myqcloud.com/workbuddy/experts/avatars/02-Engineering/FrontendDeveloper/FrontendDeveloper.png",
|
||||
"promptUrl": "https://acc-1258344699.cos.accelerate.myqcloud.com/workbuddy/experts/experts/02-Engineering/FrontendDeveloper/FrontendDeveloper_zh.md",
|
||||
"usedAt": 1775032762927,
|
||||
"industryId": "all"
|
||||
}
|
||||
]
|
||||
},
|
||||
"lastUpdated": 1775037929186
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,163 +0,0 @@
|
||||
# 2026-04-01 工作日志
|
||||
|
||||
## 修复 SQLite CGO 启动报错 ✅ (11:20)
|
||||
|
||||
- **问题**:fresh 启动时报 `CGO_ENABLED=0` 导致 go-sqlite3 无法工作
|
||||
- **原因**:fresh 不是通过 run-dev.bat 启动,没有继承 `CGO_ENABLED=1` 环境变量
|
||||
- **修复**:
|
||||
- 更新 `run-dev.bat`:改为用 fresh 启动,并确保 `set CGO_ENABLED=1` 在 fresh 之前执行
|
||||
- 更新 `start-dev.bat`:同样加上 `set CGO_ENABLED=1`
|
||||
- 创建 `runner.conf`(fresh 配置文件)
|
||||
- **正确启动方式**:在 backend/ 目录执行 `.\run-dev.bat`,或 PowerShell 中设置 `$env:CGO_ENABLED="1"` 后 `go run .`
|
||||
- **GCC 问题**:已安装 TDM-GCC v10.3.0
|
||||
- **Fresh 问题**:runner-build.exe 缓存损坏,已清理并改用 `go run .` 启动
|
||||
|
||||
## 为 AccountView.vue 添加中文注释 ✅ (12:43)
|
||||
|
||||
- 为 `frontend/ops_vue_js/src/views/settings/AccountView.vue` 添加完整的中文注释
|
||||
- 包含:导入说明、响应式变量说明、函数功能说明、模板结构说明
|
||||
- 未改变任何代码逻辑,仅添加注释
|
||||
|
||||
## 为 ScheduleView.vue 添加中文注释 ✅ (15:24)
|
||||
|
||||
- 为 `frontend/ops_vue_js/src/views/ScheduleView.vue` 添加完整的中文注释
|
||||
- FullCalendar 日历组件,包含月/周/列表视图支持
|
||||
- 详细注释:插件导入、配置选项(高度、语言、视图、工具栏、自定义按钮)
|
||||
- 国际化监听逻辑说明
|
||||
- 模板结构说明(容器布局、日历组件绑定)
|
||||
|
||||
## 为 ContactView.vue 添加中文注释 ✅ (13:36)
|
||||
|
||||
- 为 `frontend/ops_vue_js/src/views/settings/ContactView.vue` 添加完整的中文注释
|
||||
- 包含:导入说明、表单数据说明、handleChangeEmail 函数详细注释
|
||||
- 模板结构说明(页面布局、邮箱输入、验证提示、按钮交互)
|
||||
- 未改变任何代码逻辑
|
||||
|
||||
## 后端入口迁移:cmd/ops-server/main.go → 根目录 main.go ✅ (11:05)
|
||||
|
||||
- 将新架构 `cmd/ops-server/main.go` 内容合并到根目录 `backend/main.go`
|
||||
- 删除 `cmd/` 目录
|
||||
- 更新 `run-dev.bat` 和 `start-dev.bat` 启动命令从 `go run ./cmd/ops-server/main.go` 改为 `go run .`
|
||||
- 编译验证通过(0 errors)
|
||||
- 现在直接在 `backend/` 目录下运行 `go run .` 即可启动
|
||||
|
||||
## 为 ScheduleView.vue 添加今天(Today)按钮 ✅ (13:50)
|
||||
|
||||
- 修改 `frontend/ops_vue_js/src/views/scheduleView.vue` 的 headerToolbar 配置
|
||||
- 在 left 区域加入 `today` 按钮:`prevYear,prev,today,next,nextYear`
|
||||
- 在 customButtons 中添加 today 按钮功能实现:`click() { calendarRef.value.getApi().today() }`
|
||||
- 修复中英文语言文件中 `tody` 键名的拼写错误,改为正确的 `today`
|
||||
- 更新 today 按钮文本引用为正确的键名 `t('schedule.today')`
|
||||
- 所有代码编译通过,无语法错误
|
||||
|
||||
## 修复 ScheduleView.vue 中的 TypeError 错误 ✅ (14:07)
|
||||
|
||||
- **问题**:`Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'prevYear') at ScheduleView.vue:79:53`
|
||||
- **原因**:`watch` 函数中访问路径错误,使用了 `calendarOptions.value.headerToolbar.customButtons`,但实际应该是 `calendarOptions.value.customButtons`
|
||||
- **修复**:
|
||||
- 将 `calendarOptions.value.headerToolbar.customButtons` 改为 `calendarOptions.value.customButtons`
|
||||
- 在 `watch` 函数中添加 today 按钮的文本更新逻辑:`calendarOptions.value.customButtons.today.text = t('schedule.today')`
|
||||
- 修复后错误消失,代码正常运行
|
||||
|
||||
## 完善 ScheduleView.vue 的 dateClick 功能(双击/单击区分)✅ (16:29)
|
||||
|
||||
- **添加响应式变量**:`const lastClickTime = ref(0)` 用于跟踪上次点击时间
|
||||
- **修复逻辑错误**:
|
||||
- 原代码中 `last_click_time` 是局部变量,改为使用响应式变量
|
||||
- 修正时间差计算:`nowTime - lastClickTime.value`
|
||||
- 正确的双击判断:`timeDifference < 400 && timeDifference > 0`
|
||||
- 先计算时间差再更新 `lastClickTime.value`
|
||||
- **实现双击功能**:`handleDoubleClick` 函数
|
||||
- 弹出提示框让用户输入事件标题
|
||||
- 创建新事件对象(包含标题、日期、颜色等属性)
|
||||
- 添加到日历事件列表 `calendarOptions.value.events.push(newEvent)`
|
||||
- **实现单击功能**:`handleSingleClick` 函数
|
||||
- 获取该日期的所有事件
|
||||
- 根据事件数量显示不同的提示信息
|
||||
- 可以进一步扩展为显示事件详情或选中日期
|
||||
- **功能说明**:
|
||||
- 双击(400ms内连续点击):快速添加新事件
|
||||
- 单击:显示日期的事件详情
|
||||
- 所有操作都有 console.log 输出便于调试
|
||||
|
||||
## 修复组件导入错误语法 ✅ (19:22)
|
||||
|
||||
- **问题**:`main.js:37 SyntaxError: The requested module '/src/components/datatimePickerForFullCalendar.vue' does not provide an export named 'datatimePickerForFullCalendar'`
|
||||
- **原因**:
|
||||
- 使用了错误的命名导入语法:`import {datatimePickerForFullCalendar} from "@/components/datatimePickerForFullCalendar.vue"`
|
||||
- Vue组件应使用默认导入,不是命名导入
|
||||
- **修复**:
|
||||
- 改为正确语法:`import DatatimePickerForFullCalendar from "@/components/datatimePickerForFullCalendar.vue"`
|
||||
- 组件文件 `datatimePickerForFullCalendar.vue` 内容不完整(仅有空template),但暂时被注释掉不影响运行
|
||||
- **结果**:开发服务器成功启动,无语法错误,前端正常运行
|
||||
|
||||
## 实现日期选择器三栏对齐布局 ✅ (19:53)
|
||||
|
||||
- **需求**:`datatimePickerForFullCalendar.vue`中实现`{{ eventData.startDate }}`左对齐,`{{ t("schedule.to") }}`中间,`{{ eventData.endDate }}`右对齐
|
||||
- **布局方案**:
|
||||
- 使用`flex justify-between`使三个主要元素等宽分布在容器中
|
||||
- 为每个元素添加对齐类:`text-left`、`text-center`、`text-right`
|
||||
- 清除按钮使用`ml-2`保持与右侧对齐
|
||||
- **功能完善**:
|
||||
- 添加`clearDates()`函数,支持清除开始和结束日期
|
||||
- 添加翻译键`"schedule.to"`到中英文i18n文件
|
||||
- 中文:"至",英文:"To"
|
||||
- **验证结果**:
|
||||
- 构建成功(6171 modules transformed)
|
||||
- 无lint或语法错误
|
||||
- 组件已在scheduleView.vue中取消注释并正确使用
|
||||
|
||||
## 修复组件间数据传递错误 ✅ (20:18)
|
||||
|
||||
- **问题**:`ScheduleView.vue`中`DatatimePickerForFullCalendar.passing_date_characters(dateStr,dateStr);`报错,直接调用子组件方法
|
||||
- **解决方案**:
|
||||
1. **添加Props支持**:在子组件中使用`defineProps`接收`startDate`和`endDate`
|
||||
2. **添加事件发射**:使用`defineEmits`实现子组件向父组件通信
|
||||
3. **双向数据绑定**:
|
||||
- 父组件通过`:start-date="eventData.startDate"`传递数据
|
||||
- 子组件通过`@update:start-date="(value) => eventData.startDate = value"`更新父组件数据
|
||||
- 清除按钮触发`@clear-dates`事件,由父组件处理
|
||||
- **子组件修改**:
|
||||
```javascript
|
||||
const props = defineProps({ startDate, endDate });
|
||||
const emit = defineEmits(['update:startDate', 'update:endDate', 'clearDates']);
|
||||
```
|
||||
- 添加`watch`监听props变化更新本地状态
|
||||
- 添加`watch`监听本地状态变化emit到父组件
|
||||
- **父组件修改**:
|
||||
- 移除错误的直接方法调用
|
||||
- 改为props绑定:`<DatatimePickerForFullCalendar :start-date="eventData.startDate" :end-date="eventData.endDate" ... />`
|
||||
- 添加事件监听函数`clearDatesInParent`
|
||||
- **验证结果**:
|
||||
- 构建成功(6171 modules transformed)
|
||||
- 无语法错误或lint警告
|
||||
- 实现完整的父子组件通信机制
|
||||
|
||||
## 修改日历组件高度为300px ✅ (21:32)
|
||||
|
||||
- **需求**:将`datatimePickerForFullCalendar.vue`中的FullCalendar日历整体高度设置为300px,调整格子高度
|
||||
- **实现方案**:
|
||||
1. **容器高度控制**:
|
||||
- 外层容器:`h-[350px]`(预留30px给日期显示栏)
|
||||
- 日历容器:`h-[300px] overflow-hidden rounded-lg border border-gray-200`
|
||||
- FullCalendar组件:`class="h-full w-full"` 填满容器
|
||||
2. **FullCalendar配置**:
|
||||
- `height: "300px"`:固定整体高度
|
||||
- `contentHeight: "auto"`:内容高度自适应
|
||||
- `dayCellMinHeight: 40`:格子最小高度40px
|
||||
- `expandRows: true`:自动展开行高,均匀分布
|
||||
3. **CSS样式优化**:
|
||||
- `dayCellDidMount`函数中添加样式:
|
||||
```javascript
|
||||
info.el.style.minHeight = "40px";
|
||||
info.el.style.height = "100%";
|
||||
info.el.style.display = "flex";
|
||||
info.el.style.aljustifyContent = "center";
|
||||
```
|
||||
- **高度计算**:
|
||||
- 300px高度 ÷ 6行(月视图通常5-6行)= 每行约50px
|
||||
- 考虑头部工具栏和边框,格子高度设为40px,留出间距
|
||||
- **验证结果**:
|
||||
- 构建成功(6171 modules transformed)
|
||||
- 无语法错误
|
||||
- 实现日历整体300px高度,格子均匀分布
|
||||
@@ -1,188 +0,0 @@
|
||||
# 项目长期记忆 - OPS2
|
||||
|
||||
## 项目概况
|
||||
- **项目名称**:Ops(Operations 运营管理系统)
|
||||
- **类型**:前后端分离的工作流/运营管理系统
|
||||
- **工作区路径**:`c:\Users\wuwen\Documents\prj\ops2`
|
||||
|
||||
## 技术栈
|
||||
|
||||
### 后端(backend/)
|
||||
- **语言**:Go
|
||||
- **框架**:Gin(HTTP 框架)+ GORM(ORM)
|
||||
- **数据库**:支持 SQLite / MySQL / PostgreSQL(通过配置切换)
|
||||
- **配置**:YAML 格式,路径 `./data/config.yaml`,模板在 `./defConfig/configTemp.yaml`
|
||||
- **静态文件**:后端直接 serve `./dist` 目录下的前端构建产物
|
||||
- **TLS**:支持 HTTPS(可配置)
|
||||
|
||||
### 前端(frontend/ops_vue_js/)⬅️ 主力开发目录
|
||||
- **框架**:Vue 3 + JavaScript(非 TypeScript)
|
||||
- **路由**:Vue Router(Hash 模式)
|
||||
- **构建工具**:Vite 7
|
||||
- **CSS 框架**:Tailwind CSS v4(@tailwindcss/vite 插件)
|
||||
- **图标**:@tabler/icons-vue
|
||||
- **状态管理**:Pinia
|
||||
- **国际化**:vue-i18n
|
||||
- **日期选择**:flatpickr / litepicker
|
||||
- **文件上传**:FilePond
|
||||
- **图片裁剪**:CropperJS(@cropper/elements)
|
||||
- **日历**:FullCalendar(含 daygrid/timegrid/list/interaction)
|
||||
- **其他组件**:imageCropper、tagadder、dateTimePicker、useDropzone 等
|
||||
- ~~**UI 框架**:Tabler(Bootstrap 5 + @tabler/core)~~ 已弃用(2026-03-31 迁移至 Tailwind)
|
||||
|
||||
> 注意:`frontend/ops_vue/`(TypeScript 版)是旧目录,已弃用
|
||||
|
||||
### 前端页面路由(ops_vue_js)
|
||||
- `/` — 首页(HomeView)
|
||||
- `/login` — 登录(AuthLayout)
|
||||
- `/register` — 注册(AuthLayout)
|
||||
- `/forgot_password` — 找回密码(AuthLayout)
|
||||
- `/admin` — 管理后台
|
||||
- `/schedule` — 日程/排班(FullCalendar)
|
||||
- `/purchase` — 采购订单列表
|
||||
- `/purchase/addorder` — 新增采购订单
|
||||
- `/purchase/showorder/:id` — 查看采购订单详情
|
||||
- `/warehouse` — 仓库管理
|
||||
- `/settings/account` — 账户设置
|
||||
- `/settings/contact` — 联系信息设置
|
||||
- `/settings/security` — 安全设置
|
||||
- `/404` — 404 页面
|
||||
|
||||
## 数据模型(GORM 表结构)
|
||||
- `TabUser_` - 用户表(name 唯一索引,支持 md5/md5salt 密码哈希)
|
||||
- `TabUserGroups_` - 用户组表
|
||||
- `TabUserGroupBinds_` - 用户-组绑定关系表
|
||||
- `TabUserInfo_` - 用户详情表(头像、性别、语言等)
|
||||
- `TabCookie_` - Session Cookie 表(含过期时间、记住我功能)
|
||||
- `TabFileInfo_` - 文件信息表(支持图片/视频/音乐/PDF)
|
||||
- `APIRequestLog_` - API 请求日志表
|
||||
- `TabPurchaseOrder` - 采购订单表(含照片JSON、快递单号、订单状态)
|
||||
- `TabPurchaseCosts` - 采购费用明细表
|
||||
|
||||
## API 路由结构
|
||||
- `POST /api/users/...` - 用户相关(登录、注册、鉴权)
|
||||
- `POST /api/files/...` - 文件上传管理
|
||||
- `POST /api/purchase/getorders` - 获取采购订单列表(分页)
|
||||
- `POST /api/purchase/addorder` - 新增采购订单
|
||||
- `GET /api/static/...` - 静态资源访问
|
||||
- 认证方式:请求体中携带 `userCookieValue` 字段
|
||||
|
||||
## 前端页面
|
||||
- 见上方"前端页面路由"章节
|
||||
|
||||
## 项目现状(2026-03-31 更新)
|
||||
### 前端
|
||||
- 前端 `ops_vue_js` 目录是主力开发目录(Vue 3 + Tailwind CSS v4)
|
||||
- **已完成前端整体重构**:API 层 async/await、Router 导航守卫、composables、布局分离
|
||||
- **已完成 Tabler → Tailwind CSS v4 迁移**
|
||||
- **已修复所有字符损坏文件**(20 个 Vue 文件,因批量脚本偏移错误)
|
||||
- **已修复国际化翻译缺失问题**:补充 `account_information` 翻译键
|
||||
- **已修复头像裁剪功能**:
|
||||
- 修复事件通信问题(`crop_to_canvas` → `crop-data-url`)
|
||||
- 修正坐标计算逻辑,解决预览不正确问题
|
||||
- 添加多层容错机制和详细调试信息
|
||||
- 所有页面构建通过,6170+ modules, 0 errors
|
||||
- 前端构建产物放在 `backend/dist/` 供后端 serve
|
||||
- `frontend/ops_vue/`(TypeScript 版)是旧目录,已弃用
|
||||
|
||||
### 后端(重构完成 ✅)
|
||||
- **已完成基础架构重构**:cmd/internal/pkg 三层架构
|
||||
- **用户认证模块重构完成**:Handler → Service → Repository 分层
|
||||
- **采购订单模块重构完成**:新增分层架构,兼容现有前端API
|
||||
- **新增中间件系统**:认证、日志、CORS、恢复中间件
|
||||
- **统一API响应**:标准错误码映射和响应格式
|
||||
- **模块化路由系统**:API v1 版本路由定义清晰分离
|
||||
- **新目录结构**:
|
||||
- `main.go` - 应用入口(已从 cmd/ops-server/main.go 合并至根目录,2026-04-01)
|
||||
- `internal/config/` - 配置管理
|
||||
- `internal/database/` - 数据库连接和迁移
|
||||
- `internal/handler/` - HTTP处理器(auth_handler.go, purchase_handler.go)
|
||||
- `internal/service/` - 业务逻辑层(auth_service.go, purchase_service.go)
|
||||
- `internal/repository/` - 数据访问层(user_repository.go, purchase_repository.go)
|
||||
- `internal/middleware/` - 中间件系统(auth.go, logging.go, cors.go)
|
||||
- `api/v1/` - API定义(routes.go)
|
||||
- `pkg/response/` - 统一响应处理
|
||||
|
||||
### 重构进展总结
|
||||
- ✅ **用户认证模块**:完整迁移到分层架构
|
||||
- ✅ **采购订单模块**:完整迁移,同时支持原始POST路由和RESTful API
|
||||
- ✅ **文件管理模块**:完整迁移,支持分层架构
|
||||
- ✅ **基础架构**:所有中间件、配置、数据库连接已完成
|
||||
- ✅ **路由和中间件系统**:已完成统一管理和配置(2026-03-31)
|
||||
- ✅ **编译状态**:项目编译成功(需要CGO_ENABLED=1以支持SQLite)
|
||||
|
||||
### 新路由架构(2026-03-31)
|
||||
- **主入口**:`main.go`(根目录)- 现代化主入口,支持优雅关机
|
||||
- **路由配置**:`api/`包统一管理所有路由
|
||||
- **兼容性**:完全兼容现有前端API `/api/*`
|
||||
- **新增API**:RESTful API v1 `/api/v1/*`
|
||||
- **中间件系统**:环境感知的日志、CORS、认证、恢复中间件
|
||||
- **静态文件**:智能SPA支持,支持Vue Router history模式
|
||||
|
||||
### 中间件系统
|
||||
- **CORS中间件**:完整跨域支持
|
||||
- **日志中间件**:开发环境用简易日志,生产环境用详细日志
|
||||
- **认证中间件**:支持多种认证方式(Bearer令牌、userCookieValue)
|
||||
- **恢复中间件**:Panic恢复和错误处理
|
||||
|
||||
### 已完成模块
|
||||
1. 文件管理模块的分层重构 ✅
|
||||
2. 静态文件服务整合 ✅
|
||||
3. API请求日志模块 ✅
|
||||
4. 管理员权限控制 ⏳
|
||||
5. 系统配置管理 ✅
|
||||
|
||||
### 技术架构升级
|
||||
1. **分层架构完成**:Handler → Service → Repository
|
||||
2. **统一错误处理**:标准错误码和响应格式
|
||||
3. **路由系统整合**:兼容性路由 + RESTful API v1
|
||||
4. **中间件规范化**:统一的中间件加载和配置
|
||||
5. **开发工具完善**:run-dev.bat启动脚本,配置文档
|
||||
|
||||
### 技术规范
|
||||
- **认证方式**:兼容前端 `userCookieValue` POST字段、Authorization头、Cookie头
|
||||
- **响应格式**:统一使用 `pkg/response` 包的标准响应
|
||||
- **错误码**:"0"成功、"-1"内部错误、"-2"参数错误、"-3"未登录、"-4"用户存在、"-5"用户不存在、"-42"凭证错误
|
||||
- **数据库**:支持SQLite/MySQL/PostgreSQL切换
|
||||
- **API版本**:v1 API统一在 `/api/v1/` 路径下
|
||||
|
||||
## 经验教训
|
||||
- **批量字符替换脚本危险**:需在源码上使用前先备份,并限定替换范围
|
||||
- **`@tabler/icons-vue` 不包含所有图标**:如 `IconFileTypeText` 不存在,使用前需确认
|
||||
|
||||
## 前端重构后架构(2026-03-31)
|
||||
- **API 层**:`src/api/` — axios 实例 + 拦截器,async/await 封装
|
||||
- **Composables**:`src/composables/` — usePageTitle、useValidation、isValidEmail
|
||||
- **Stores**:`src/stores/user.js`(精简)、`src/stores/toast.js`(全局通知)
|
||||
- **布局**:`src/layouts/DefaultLayout.vue`(主站)、`AuthLayout.vue`(认证页)
|
||||
- **公共组件**:AppHeader、AppFooter、AppToast、SettingNav
|
||||
- **命名规范**:PascalCase 文件名,camelCase 函数名
|
||||
|
||||
## 开发规范
|
||||
|
||||
### 后端架构规范
|
||||
- **分层架构**:Handler → Service → Repository → Database
|
||||
- **认证方式**:
|
||||
- 兼容现有前端:POST JSON中的 `userCookieValue` 字段
|
||||
- 标准方式:Authorization: Bearer token 或 Cookie header
|
||||
- **响应格式**:
|
||||
```json
|
||||
{
|
||||
"code": "0", // 错误码,0表示成功
|
||||
"message": "Success", // 人类可读的消息
|
||||
"data": {} // 实际数据
|
||||
}
|
||||
```
|
||||
- **错误码系统**:
|
||||
- "0": 成功
|
||||
- "-1": 内部错误
|
||||
- "-2": 参数错误
|
||||
- "-3": 用户未登录
|
||||
- "-4": 用户已存在
|
||||
- "-5": 用户不存在
|
||||
- "-42": 用户名或密码错误
|
||||
- **依赖注入**:Handler通过Service,Service通过Repository访问数据库
|
||||
|
||||
### 前端规范(保持不变)
|
||||
- API 请求统一携带 `userCookieValue` 做身份验证
|
||||
- 错误码定义在 `./defConfig/errorCodes.json`
|
||||
Reference in New Issue
Block a user