up
This commit is contained in:
@@ -1,75 +1,31 @@
|
||||
# 2026-04-23 工作记录
|
||||
|
||||
## 分析 OPS2 流程管理平台架构
|
||||
|
||||
完成了对项目前后端完整运行逻辑的分析:
|
||||
|
||||
- **项目性质**:内部流程管理平台,前后端同源部署(后端 Gin serve 前端 dist)
|
||||
- **后端**:Go 1.24 + Gin + GORM,支持 SQLite/MySQL/PostgreSQL 三选一
|
||||
- **前端**:Vue 3 + Vite + Pinia + Tailwind CSS,Hash 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
|
||||
# 2026-04-23 工作日志
|
||||
|
||||
## warehouse 模块前端开发
|
||||
|
||||
### 今日完成
|
||||
- `apiWarehouse.go` 重写,参照 `apiWorkOrder.go` 模式
|
||||
- 修复 4 处图片绑定查询 `hash` 未使用的问题
|
||||
- 清理 6 处重复的 `AuthenticationAuthority` 调用
|
||||
- 容器列表页 (`WarehouseContainerList.vue`) — 根容器列表 + 统计卡片
|
||||
- 容器详情页 (`WarehouseContainerDetail.vue`) — 子容器/物品 Tab + 新增子容器弹窗
|
||||
- 新增物品独立页 (`WarehouseAddItem.vue`) + 路由注册
|
||||
- 路由: `/warehouse/container/:id/add-item`
|
||||
- 物品 Tab 按钮从弹窗改为跳转独立页面
|
||||
- 使用 `useDropzone` 组件上传图片
|
||||
- 物品详情页 (`WarehouseItemDetail.vue`) — 物品信息 + 移动历史/关联工单 Tab
|
||||
- 物品列表总览 (`WarehouseItemList.vue`)
|
||||
- 路由: `/warehouse/items`,侧边栏入口「物品总览」
|
||||
- 统计卡片(总数/已入库/未入库)
|
||||
- 表格:名称/序列号/数量/位置/创建时间 + 跳转详情/删除
|
||||
- 补充 i18n key(中/英双语)
|
||||
|
||||
### 踩坑
|
||||
- 后端 `TabWarehouseItem.SerialNumber` JSON 字段名为 `serial_number`(小写),前端须对应
|
||||
- `useDropzone` 组件通过 `dropzoneRef.value.return_files()` 获取已上传文件的 hash 数组
|
||||
- `RouterLink` 在此项目为全局组件,无需 import
|
||||
- `watch` 需要显式 import:`import { ref, reactive, computed, onMounted, watch } from 'vue'`
|
||||
- **项目没有 daisyUI**,所有样式均用纯 Tailwind CSS v4 实现
|
||||
- 不用 `btn`、`tabs`、`tab`、`input-bordered`、`table`、`modal`、`join`、`form-control`、`badge`、`card` 等 daisyUI 类
|
||||
- 用 Tailwind 自定义样式:`rounded-xl border border-gray-200 bg-white shadow dark:border-dk-muted dark:bg-dk-card`
|
||||
- 加载动画用自定义 SVG spinner,不用 `loading loading-spinner`
|
||||
- 弹窗用 `<dialog>` + Tailwind 固定定位,不用 daisyUI `modal`
|
||||
|
||||
Reference in New Issue
Block a user