Files
ops2/.workbuddy/memory/2026-04-23.md
T
2026-04-23 16:42:10 +08:00

76 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-04-23 工作记录
## 分析 OPS2 流程管理平台架构
完成了对项目前后端完整运行逻辑的分析:
- **项目性质**:内部流程管理平台,前后端同源部署(后端 Gin serve 前端 dist
- **后端**Go 1.24 + Gin + GORM,支持 SQLite/MySQL/PostgreSQL 三选一
- **前端**Vue 3 + Vite + Pinia + Tailwind CSSHash History 路由
- **认证**:自实现 Cookie Token(非 JWT),存于数据库,支持"记住我"滚动续期
- **数据库**:13 张表,涵盖用户体系(4张)、认证日志(2张)、文件(1张)、日程(2张)、采购(5张,含软删除+操作日志双保险)
- **核心功能**:日程日历(FullCalendar,公开可访问)+ 采购流程管理(完整状态流转)+ 用户系统
- **权限设计**:基于用户组(schedule_admin / purchase_admin),内存缓存管理员 ID 列表
- **文件系统**:SHA256 内容寻址,自动去重存储
- **API 协议**:统一 `{ userCookieValue, data }` 请求体,统一 `{ err_code, err_msg, return }` 响应体
## 新增 work_order 工单模块
完整实现了工单模块,文件清单:
**后端(backend/my_work/routers/**
- `apiWorkOrder.go`4张表(TabWorkOrder / TabWorkOrderFileBind / TabWorkOrderCommit / TabWorkOrderLog+ 7个接口(add/update/list/get/commit/delete/count+ work_order_admin 用户组
- `api.go`:注册 `/api/work_order/*` 路由
- `main.go`:注册 `ApiWorkOrderInit()`
**前端(frontend/ops_vue_js/src/**
- `api/work_order.js`API 封装
- `views/work_order/WorkOrderList.vue`:工单列表页(分页+状态筛选)
- `views/work_order/AddEditWorkOrder.vue`:新增/编辑页(图片上传 useDropzone
- `views/work_order/ShowWorkOrder.vue`:详情页(进度时间线+新增进度表单)
- `router/index.js`:注册4条路由(list/add/edit/:id/show/:id
- `components/AppHeader.vue`:导航菜单添加"工单"入口
- `i18n/zh-CN.json` & `i18n/en.json`:添加 work_order 翻译节和 appname.work_order
**工单状态枚举**pending/checked/parts_ordered/repaired/returned/unrepairable
**commit 图片支持**
- 后端:新增 `TabWorkOrderCommitFileBind` 表(commit_id/work_order_id/file_id),commit 接口接收 `photos` 数组,get 接口返回每条 commit 的 photos
- 前端:ShowWorkOrder.vue 新增进度表单底部加了 useDropzone 组件,每条进度时间线下方展示关联图片
- API`commit(id, status, comment, photos)` 函数签名新增 photos 参数
**工单关联采购订单**
- 后端:新增 `TabWorkOrderPurchaseOrderBind` 表(work_order_id/commit_id/purchase_order_id),支持多对多关联
- commit 接口新增 `purchaseOrderIds` 参数([]uint
- get 接口每条 commit 返回 `purchaseOrders` 数组(包含 id/title/status
- 新增 `/search_purchase_orders` 接口:空搜索返回最新5条,支持 ID 精确匹配和标题/备注模糊匹配
- 前端:状态选 `parts_ordered` 时显示采购订单搜索框(防抖300ms),输入框获取焦点自动搜索
- 时间线每条 commit 下方展示关联的采购订单链接(点击跳转到采购详情页)
## 今日功能迭代
**ConfirmDialog 组件 v-model 修复**
- 组件使用 `v-if="modelValue"` 控制弹窗显示,但外部只用了 `v-if` 控制组件存在,没有传入 `modelValue` prop
- 修复:在所有使用 ConfirmDialog 的地方改用 `v-model="xxx"` 绑定
- 涉及文件:ShowWorkOrder.vue、AddEditWorkOrder.vue、ShowOrder.vue
**ShowWorkOrder.vue 进度删除功能**
- 新增删除按钮(新样式:带边框和背景色的文字按钮)
- 每条 commit 加边框和背景色,便于区分
- 最新状态不显示删除按钮
- 权限判断:工单创建者 OR 进度创建者 OR 管理员
- 删除后前端直接移除该 commit,保持滚动位置
**useDropzone v-model 问题修复**
- useDropzone 组件没有实现 v-model,是通过 `return_files()` 方法暴露文件
- 修复:添加 `ref="commitDropzoneRef"`,通过 `commitDropzoneRef.value?.return_files()` 获取文件
- 只筛选 `is_upload === true` 的文件获取 hash
**采购订单状态记录删除功能**
- 后端:apiPurchase.go 新增 `/delete_commit` 接口,权限判断同工单
- 前端:ShowOrder.vue 新增删除按钮,样式和逻辑同工单页面
- 新增翻译:purchase.confirm_delete_commit