|
|
4c41e1ec13
|
feat(purchase): 采购列表按批次分组展示 + 批次级一键审批
- 列表按批次分组(树形展开):一个批次一行,显示物品数/批次总价/申请人/状态汇总
- 展开批次行显示批内明细(每条记录状态/价格/操作)
- 批次行提供「审批本批」「驳回本批」一键操作(按批次前缀批量处理待审批记录)
- 保留逐条展开明细内的通过/驳回,以及顶部多选批量审批
- fetchData 按批次前缀聚合当前页数据
|
2026-08-31 14:00:31 +08:00 |
|
|
|
1000deda2f
|
feat(purchase): 采购单号改为 批次-批内序号 格式,显式体现同批
按用户原始逻辑还原并扩展:
- 单号格式: PUR-日期-时间-批次-批内序号
例: PUR-20260831-1021-0001-0001(今日第1次采购的第1条)
- generate_request_no 支持 batch_seq 参数生成批次+批内序号
- 新增 GET /purchase/next-batch-seq 返回今日下一个批次号
- 前端提交时获取批次号,同批所有行共享,循环提交生成连续批内序号
- 批次识别: 单号去掉末尾 -批内序号 即为批次前缀
- 保留旧格式兼容(无 batch_seq 时回退 PUR-日期-时间-流水)
|
2026-08-31 13:54:03 +08:00 |
|
|
|
f499346f74
|
refactor(purchase): 批次概念改为基于 request_no 前缀推导,撤销数据库字段
按用户反馈:不需要新增数据库字段,现有 request_no (PUR-20260831-1021-0001)
本身就能推导批次——去掉末尾4位流水号即为批次前缀。
- 撤销 purchase_request.batch_no 字段(模型/数据库)
- 撤销 create 接口的 batch_no 参数与 generate_batch_no
- 批次标识 = request_no 去掉末尾 -XXXX 段
getBatchKey('PUR-20260831-1021-0001') = 'PUR-20260831-1021'
- 按批次查询/批量审批接口改用 batch_key (request_no LIKE 前缀)
- 前端列表批次号列、整批弹窗、一键审批本批均基于前缀推导
- 零数据库迁移,历史数据立即可用
|
2026-08-31 13:49:11 +08:00 |
|
|
|
664127ee30
|
feat(purchase): 采购批次号支持,同一批提交的记录可分组查看/统计
背景: 循环提交把一批物品生成多条独立申请,无法识别'哪些是同一批采购'
后端:
- purchase_request 模型新增 batch_no 字段(同一批提交共享)
- create 接口接收 batch_no,无则自动生成 BATCH-yyyyMMdd-HHmm-随机
- 新增 GET /purchase/batch/<batch_no> 按批次查询所有记录
- 批量审批接口支持按 batch_no 一键审批整批
前端:
- 提交时生成 batch_no 共享给所有行
- 列表新增批次号列(可点击)
- 新增'整批查看'弹窗:显示同批次所有记录 + 一键批量通过本批
- 操作列新增'整批'按钮
数据库需执行: ALTER TABLE purchase_request ADD COLUMN batch_no VARCHAR(100);
|
2026-08-31 13:46:46 +08:00 |
|
|
|
4b62c81baa
|
feat(purchase): 采购申请批量审批(解决循环提交需多次审批)
问题: 一次提交 10 个物品生成 10 条独立申请,审批人需操作 10 次
后端:
- 新增 POST /api/v1/purchase/batch-approve 批量审批接口
接收 ids + action,循环审批,成功/失败分别返回
前端:
- 待审批列表加多选列(仅 status=0 可勾选)
- 顶部批量操作栏:批量通过 / 批量驳回 / 取消选择
- 批量驳回弹窗统一填写驳回原因
|
2026-08-31 13:41:25 +08:00 |
|
|
|
b68dfbf23d
|
feat(purchase): 商家链接改为每行独立
- 明细表新增「商家链接」列,每行独立输入
- 移除公共区商家链接,公共信息区只保留审批人
- 提交时每行携带自己的 supplier_link
|
2026-08-31 13:35:34 +08:00 |
|
|
|
efb88c8f9c
|
fix(purchase): 税率列加宽以完整显示两位数字+%
- 明细表税率列 80px → 100px
- 列表页税率列 70px → 80px
- 税率选项补充 3%/5%/9%
|
2026-08-31 13:33:58 +08:00 |
|
|
|
3a9ec81c51
|
fix(purchase): 照片删除加确认 + 修复同步照片跨行删除导致图片缺失
问题: 同步照片后多行共享同一物理文件 URL,删除某行照片时
deleteFile 删除了物理文件,其他行引用同一 URL 变图片缺失
修复:
- 删除前检查照片被几行引用
- 若被多行引用: 弹窗询问【全部删除】(所有行移除+删文件)
或【仅移出此行】(只从当前行移除引用,不删服务器文件)
- 若仅当前行引用: 普通确认后删除
- 普通删除也加确认弹窗
|
2026-08-31 13:31:08 +08:00 |
|
|
|
25bb35e265
|
feat(purchase): 表格列宽优化 + 迷你上传框 + 照片同步所有
- 每列显式指定 min-width/width,输入多的列用 min-width 防挤压
- 照片列固定 90px,上传框缩小到 60x60(::v-deep 覆盖样式)
- 新增「照片同步所有」按钮:深拷贝第一行照片到所有行
- 照片列保持红星必填标记
|
2026-08-31 13:24:17 +08:00 |
|
|
|
f18e61a71a
|
fix(purchase): 修复 Copy 图标不存在导致的模块加载错误
@element-plus/icons-vue 没有 Copy 图标,改为 CopyDocument
|
2026-08-31 13:18:44 +08:00 |
|
|
|
9e393ff998
|
feat(purchase): 弹窗加大 + 移除公共图片 + 每行照片必填
- 弹窗宽度 1180px → 1350px,缓解表格输入框拥挤
- 移除底部公共「图片凭证」上传区,照片统一在每行上传
- 照片列表头加红星必填标记
- 提交时逐行校验照片必填:某行无照片则阻断并提示该行名称
- 清理废弃的公共图片逻辑(fileList/customUpload/handleRemoveImage/usePasteUpload)
|
2026-08-31 13:16:52 +08:00 |
|
|
|
8d90b3c774
|
feat(purchase): 采购申请弹窗加大 + 每行独立备注/照片 + 备注一键同步
- 弹窗加大到 1180px、表格 max-height 400 减少滚动
- 明细表新增「备注」列和「照片」列(每行独立上传,最多3张)
- 新增「备注同步所有」按钮:把第一行备注复制到所有行
- 提交时行备注优先、行照片优先,无则回退公共备注/公共图片
- 图片校验改为逐行(行内或公共至少其一)
|
2026-08-31 13:10:59 +08:00 |
|
|
|
021c92ee8a
|
feat(purchase): 采购申请改为动态明细表,支持一行多物料批量提交
- 新建弹窗物料区改为动态明细表格:每行独立选择物料/规格/数量/日期/单价/总价/税率
- 支持 [+ 添加一行] 动态增行、行内删除
- 审批人/商家链接/备注/图片凭证为公共信息
- 提交时 for 循环逐行调用单条 createPurchase 接口,后端无需改动
- 行内价格半联动:改单价自动算总价,手动改总价后不再覆盖
|
2026-08-31 13:05:29 +08:00 |
|
|
|
754c46bd59
|
feat: 采购申请字段级价格权限 — 库管看不到采购价格
## permission_service.py
- init_all_menus: 新增3个采购权限元素
inbound_purchase:unit_price, :total_price, :tax_rate
## purchase.py
- _filter_purchase_prices(): 无价格权限则pop价格字段
- GET /purchase (列表): 应用价格过滤
- GET /purchase/<id> (详情): 应用价格过滤
- approved-unstocked: 保留价格(入库数据源,前端按inbound_buy权限控制)
## purchase/index.vue
- 列表: 单价/总价/税率列 v-if hasPermission
- 详情: 单价/总价 v-if hasPermission
|
2026-07-16 17:34:24 +08:00 |
|
|
|
128985af17
|
feat: 采购模块重构 — 权限驱动的可见性 + 严格操作权限
## purchase.py
- GET /purchase (列表): @jwt_required, 有权限看同公司全部/无权限只看自己
- POST /purchase (创建): @jwt_required, 任何登录用户可提交
- GET /purchase/<id> (详情): @jwt_required, 自己的或有权者可见
- PATCH /purchase/<id>/approve (审批): @permission_required('inbound_purchase:operation')
不再硬编码 SUPERVISOR 角色, 有操作权限即可审批
- GET /purchase/approvers, /auto-fill, /search-material: @jwt_required (开放给创建流程)
- 新增 _user_has_purchase_perm() 统一权限检查
- 移除所有硬编码 role in ('SUPERVISOR','SUPER_ADMIN')
## purchase_service.py
- send_email → send_email_async (采购审批邮件异步发送)
## purchase/index.vue
- canApprove: 仅检查 inbound_purchase:operation (菜单权限≠审批权限)
- customUpload: 修复 v-model:file-list 重复推入导致图片双份显示
- auth.py → purchase.py 权限前缀统一
|
2026-07-16 11:25:53 +08:00 |
|
|
|
4934cd4d8f
|
feat: 采购管理税率+分开单价总价列 + 按单出/借库锁定扫描 + 含税法计算
- purchase: 新增tax_rate字段(model+service+frontend), 表格拆分为不含税单价/总价/税率三列
- buy.vue: 含税法计算(含税总价=数量×含税单价), 含税总价自动计算可手动覆盖
- create.vue: 按单出库模式下未选审批单时锁定摄像头和SKU输入
- borrow.vue: 未选审批单时锁定摄像头和SKU输入
- deploy_production.sql: 整合全部数据库变更(表结构+权限码+角色分配)
|
2026-07-15 16:07:59 +08:00 |
|
|
|
31903bdb39
|
feat: 基础信息弹窗新增"发起采购申请"按钮, 跳转采购管理自动预填物料+默认审批人
- material/list.vue: 弹窗头部新增"发起采购申请"按钮, 携带物料信息跳转/purchase
- purchase/index.vue: onMounted读取URL参数自动弹窗并预填物料
- purchase/index.vue: fetchDefaultApprover取当前用户上一次采购申请的审批人作为默认值
- 商家链接placeholder去掉"选填"字样
|
2026-07-14 17:13:31 +08:00 |
|
|
|
c1092407ad
|
V3.50
|
2026-06-25 15:21:43 +08:00 |
|
|
|
8bb3e58b44
|
前端全局:<el-select remote> 三道防线扩展到 BOM 配方/采购/采购入库/售后入库
- 第一道防线:<el-select> 模板显式补充 reserve-keyword="true" / default-first-option="true",覆盖 4 文件 5 实例
- 第二道防线:handleRemoteSearch / handleSearchMaterial 首行深度净化 query(零宽字符/控制字符/BOM/不可见 Unicode)
- 第三道防线:handleVisibleChange / handleMaterialDropdownVisible 加竞态守卫,已有 searchKeyword 或 options 非空时跳过默认列表加载;带 debounce 的场景主动 clearTimeout 互斥
- service.vue 原本缺少 searchKeyword 状态,本轮新增 ref('') 专供 el-select 守卫使用
- BomManage.vue 父件/子件共用 handleVisibleChange,两套守卫分别按 parentQueryParams.keyword 和 state.queryParams.keyword 隔离判断
|
2026-06-04 16:44:59 +08:00 |
|
|
|
ee893485bb
|
feat: 推广粘贴上传功能至所有图片上传页面(purchase/buy/product/semi)
|
2026-05-15 14:29:25 +08:00 |
|
|
|
1a76c4853e
|
feat(purchase): 物料搜索分页+价格半联动+图片必填校验
|
2026-05-12 17:48:29 +08:00 |
|
|
|
3c9d7a999d
|
fix(purchase): 审批人下拉隐藏角色/物料搜索下拉/价格弹窗确认/图片必填校验
|
2026-05-12 17:27:51 +08:00 |
|
|
|
8ec6ca5944
|
feat(purchase): 新增采购管理前端页面与路由(列表+新建+审批)
|
2026-05-12 16:36:57 +08:00 |
|