99 lines
4.5 KiB
Markdown
99 lines
4.5 KiB
Markdown
# 项目长期记忆 - 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 文件,因批量脚本偏移错误)
|
||
- 所有页面构建通过,6169 modules, 0 errors
|
||
- 前端构建产物放在 `backend/dist/` 供后端 serve
|
||
- `frontend/ops_vue/`(TypeScript 版)是旧目录,已弃用
|
||
|
||
## 经验教训
|
||
- **批量字符替换脚本危险**:需在源码上使用前先备份,并限定替换范围
|
||
- **`@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 函数名
|
||
|
||
## 开发规范
|
||
- API 请求统一携带 `userCookieValue` 做身份验证
|
||
- 响应统一用 `ReturnJson(ctx, errorCode, data)` 格式
|
||
- 错误码定义在 `./defConfig/errorCodes.json`
|