|
|
27436f5efe
|
feat(ui): 菜单权限过滤与退回记录页
侧边栏支持按权限隐藏菜单(Sidebar/index.vue):
- 新增 canSee():读取 meta.permissions(数组,满足任一即可)
- ★ 同时修了一个既有缺陷:原实现只过滤顶层路由,**子路由的权限判定不生效**,
未授权用户仍能在菜单里看到入口。现改为递归过滤,父菜单的子项被过滤光后
父菜单本身也不再显示。
- ★ 刻意只认 meta.permissions(新键),历史遗留的 meta.permission(单数,
如「维修管理」的 inbound_repair)保持不生效——一旦开始消费它,会让若干
菜单对部分角色突然消失,属于超出本次范围的静默行为变更。两者若要统一,
建议单独排期逐个核对影响面。
路由守卫(router/index.ts):
- 新增 meta.permissions 校验,未授权时提示并跳首页。侧边栏负责「菜单看不见」,
守卫负责「直接敲 URL 也进不去」,后端负责「绕过前端直接调接口也不行」,
三层任一失效都不至于越权。
- 顺带修了原守卫的分支结构:roles 通过时直接 next(),会跳过后续检查;
改为不通过才中断,落到末尾统一 next()。
新增「退回记录」页(views/outbound/returns/index.vue):
- 纯只读台账,无任何操作按钮,供库管核对历史退回
- 展示 退回时间 / 原出库单号 / 物料名称 / 规格 / SKU / 退回数量 /
退回类型 / 退回原因 / 操作人
- 退回类型用标签区分(不良品=红,良品=绿)
- 源库存行或原单被删除时显示占位文案而非空白,台账不留哑行
api/inbound/return.ts 补 getReturnList()。
|
2026-09-16 16:46:02 +08:00 |
|
|
|
fd99d33a0d
|
feat(return): 前端退回入口与不良品在管台账看板
出库记录页(views/outbound/index.vue):
- 明细行新增「退回」列,returnable_quantity <= 0 时按钮置灰,行内显示「已退 N」
- 对话框展示 原出库数量 / 已退回数量 / 本次可退最大,默认带入可退最大值
- 退回类型用下拉单选:良品(加回库存)/ 不良品(转入异常待处理)
- 退回原因必填,提交前三重校验;按钮 :loading + 函数内 submitting 双保险防抖
- 成功后刷新列表。错误提示不重复弹——request 拦截器对 HTTP 400 已取
data.msg 展示,对话框 catch 只收尾
配套后端(services/outbound_service.py):
- get_grouped_list 的出库明细补 id / returned_quantity / returnable_quantity。
原先明细不带 id,退回接口无从指定 outbound_id
新增页面(views/stock/defective/index.vue,路由 /inventory/defective):
- 展示 物料名称/规格/SKU/退回时间/操作人/退回总数/剩余待处理/状态
- 顶部 alert 提示在管总量,并明确「这批实物不在库存表中,盘点请以本台账
为准」——在管坏件对盘点不可见是本方案的固有盲区,必须在页面上主动提醒
- 仅对 remaining_qty > 0 的行提供「修复回库」「报废销毁」,终态行显示已结案
- 两个弹窗均带数量上限约束与 loading 防抖,成功后刷新
新增 api/inbound/return.ts 承载四个逆向物流接口。
侧边栏由 router/index.ts 驱动,加路由即入菜单;注意侧边栏只过滤
meta.hidden、不看 meta.permission,故菜单对所有角色可见,访问控制由后端
接口负责(与既有「维修管理」一致)。
|
2026-09-16 15:45:40 +08:00 |
|
|
|
20d49c0b0d
|
feat(my-requests): 我的申请单独立模块(采购管理之后)
路由位置
--------
放在「采购管理」之后,作为独立一级模块:
采购管理
我的申请单 ← 新增(icon: Tickets)
借库管理
★ 独立模块而非挂在某个业务页下:申请人可能提交出库/借库/报废三类单据,
放在任一业务模块下都会让其它模块的人找不到。
页面功能
--------
· 类型筛选:全部 / 出库 / 借库 / 报废
· 状态筛选:全部 / 待审批 / 已通过 / 已驳回 / 已完成 / 已撤回
· 展开行显示物料明细(数量字段已由后端归一化)
· 撤回按钮仅对 status 0/1 可见(已预占但未执行)
撤回不硬编码 URL —— 使用后端回传的 withdraw_endpoint 分发:
const res = await request({ url: row.withdraw_endpoint, method: 'post' })
这样将来模块端点调整(如借库从 close 换成正式 withdraw),前端无需改动。
权限说明
--------
菜单不做权限过滤(Sidebar 只过滤 meta.hidden),所有角色都会看到本页。
这正是预期 —— 申请人本就不应需要任何权限码。数据由后端强制按
applicant_id 过滤,看不到他人单据。
顺带清理
--------
移除先前加在 Selection.vue 的重复实现(约 110 行模板/脚本/样式),
改为一个跳转链接「查看我的申请单 >」;并移除随之失效的 3 个导入
(onMounted / Refresh / 两个 API 函数)。
验证:新页面 SFC 编译零告警;Selection.vue 清理后编译通过。
|
2026-09-10 15:37:11 +08:00 |
|
|
|
3cadd42338
|
refactor(scrap): 报废管理子菜单按业务流排序
顺序调整为:报废申请 → 按单报废 → 报废记录 → 报废审批。
侧边栏由 layout/components/Sidebar/index.vue 的 v-for="child in
route.children" 直接按路由数组顺序渲染,无排序逻辑,故仅需调整数组元素。
原「按单报废执行」标题缩短为「按单报废」(四字,与同级菜单一致)。
注:父菜单 redirect 仍指向 /scrap/index(报废记录),与出库模块
redirect 指向「出库记录」的既有惯例保持一致,未改动。
|
2026-09-10 11:33:01 +08:00 |
|
|
|
af2d1c10c6
|
feat(scrap): 报废作业页重构为「按单扫码执行」,对齐出库版式
create.vue 由「直接报废」页(492 行)重写为按单执行页:
· 顶部选择已批准申请单(scope=executable, status=1);
· 载入 items_json 为待执行清单,逐项显示批准数量与已扫数量;
· 扫码头按 (source_table, stock_id) 匹配批准明细,
不在单内或超批准量时红色 toast + 震动阻断,禁止入车;
· 支持 ?requestId= 深链直达;提交实扫 payload 到 execute 接口。
审批页的「执行报废」由弹窗盲执行改为跳转本页(router.push + query.requestId),
移除 executeVisible/confirmExecute 等已失效代码;路由标题改为「按单报废执行」。
executeScrapByRequest 增加 items 参数。
|
2026-09-10 10:14:43 +08:00 |
|
|
|
da5357acb3
|
feat(scrap): 前端报废申请 / 报废审批页 + API(对齐出库版式)
- api/scrap.ts 新增 submitScrapRequest/checkScrapApproval/getScrapApprovals/approveScrapRequest/executeScrapByRequest
- apply: 选库存(带 source_table+stock_id)/报废数量/原因/按需审批人提交
- approval: 顶部审批状态筛选+刷新、展开明细、列名对齐出库、分页含 sizes、按单执行弹窗
- 路由挂载 /scrap/apply、/scrap/approval
|
2026-09-10 09:47:02 +08:00 |
|
|
|
0651eb07fa
|
fix: 彻底解耦出库/借库权限联动 + 路由去硬编码roles + 补API权限保护
根因: 借库选单页面14处硬编码outbound_selection:operation, 导致两模块权限联动
修复:
- borrow/apply: 14处outbound_selection:operation→op_borrow_apply:operation
- stock.py: 拆分_do_get_stock_list裸逻辑, 出库/借库各绑独立权限码
- transactions: 新增/borrow/stock-list端点(@permission(op_borrow_apply))
- transaction.ts: 新增getBorrowStockList前端API函数
- outbound.py: 出库审批4端点改用独立outbound_approval权限码
- transactions.py: 借库审批3端点补@permission(op_borrow_approval)
- purchase.py: 采购管理7端点补@permission(inbound_buy)
- audit.py: 审计日志补@permission(system_audit)
- router: 清除全部6处硬编码roles, 交由动态权限树控制
|
2026-07-15 14:33:11 +08:00 |
|
|
|
0c822938f0
|
fix: 系统管理菜单开放给SUPERVISOR, 补全审计日志路由
|
2026-07-15 09:22:58 +08:00 |
|
|
|
6f5652b90e
|
fix(借库菜单): 调整路由顺序 + 统一菜单命名
|
2026-06-12 14:21:03 +08:00 |
|
|
|
7ef22a3830
|
feat(借库审批流): 完整前后端实现
|
2026-06-12 14:08:19 +08:00 |
|
|
|
1def8c7747
|
fix: 修复物料管理菜单空白,修正子菜单显示名称
|
2026-06-05 15:41:05 +08:00 |
|
|
|
907c083107
|
feat: 新增 Odoo 风格物料管理视图及相关路由,优化成品入库逻辑
|
2026-06-05 15:35:43 +08:00 |
|
|
|
8ec6ca5944
|
feat(purchase): 新增采购管理前端页面与路由(列表+新建+审批)
|
2026-05-12 16:36:57 +08:00 |
|
|
|
62c0e3738e
|
fix(outbound+trans): 修复POST接口错误数据清洗导致的sku/quantity字段被清除Bug,并新增出库审批工作流全链路
|
2026-04-28 16:02:34 +08:00 |
|
|
|
cf7dc04db7
|
feat(route): register repair management page in frontend router
|
2026-04-08 19:08:43 +08:00 |
|
|
|
c1c67ae4aa
|
refactor: extract stocktake and adjustment routes into a standalone top-level menu category
|
2026-03-19 16:27:33 +08:00 |
|
|
|
d8a57ab66e
|
feat: initialize inventory profit and loss adjustment module
|
2026-03-19 12:06:32 +08:00 |
|
|
|
3afcf1434c
|
refactor: extract scrap to top-level menu and rebuild create UI using immersive scanner layout
|
2026-03-12 13:00:09 +08:00 |
|
|
|
d2d9abe201
|
全局审计日fix: 使用鸭子类型强制安全解包 SQLAlchemy Row 对象,彻底解决 to_dict 报错志
|
2026-03-11 13:11:16 +08:00 |
|
|
|
aeea3fc25c
|
feat: 将审计日志页面注册至前端路由体系
|
2026-03-10 12:25:32 +08:00 |
|
|
|
e4632086a1
|
feat: 重构鉴权系统为双Token无感刷新,并增加前端Token过期安全预判机制
|
2026-03-10 09:45:41 +08:00 |
|
|
|
7431f1f41e
|
权限管理,没有页面修改之前版本
|
2026-02-25 16:10:12 +08:00 |
|
|
|
1c3f116c50
|
修改登录,添加超级管理员权限
|
2026-02-25 11:02:06 +08:00 |
|
|
|
ec7f20869a
|
feat: refactor outbound selection to cart mode and update BomManage route
Co-authored-by: aider (openai/DeepSeek-V3.2-Thinking) <aider@aider.chat>
|
2026-02-12 09:53:17 +08:00 |
|
|
|
5245ee2da3
|
feat: add BOM API and routing
Co-authored-by: aider (openai/DeepSeek-V3.2-Thinking) <aider@aider.chat>
|
2026-02-12 09:43:51 +08:00 |
|
|
|
1edd9a95c6
|
修改服务权益和入库记录排序
|
2026-02-10 10:02:47 +08:00 |
|
|
|
04ee938cd1
|
借库逻辑实现
|
2026-02-06 17:11:47 +08:00 |
|
|
|
e027ebd4a9
|
盘库操作初设计
|
2026-02-06 10:16:37 +08:00 |
|
|
|
0bc47d306d
|
增加入库记录页面,同时修正三组入库的时间问题
|
2026-02-05 14:30:11 +08:00 |
|
|
|
797b611530
|
出库逻辑添加,扫码识别编码成功,后续对应逻辑没有完成
|
2026-02-04 17:22:20 +08:00 |
|
|
|
fd5600b65b
|
修改登录退出逻辑
|
2026-02-04 14:29:59 +08:00 |
|
|
|
13590b1fac
|
超级管理员登录设置
|
2026-02-04 13:30:07 +08:00 |
|
|
|
7a4ea8acfb
|
基础信息读取错误,未修改完成
|
2026-01-28 08:54:11 +08:00 |
|
|
|
3afea217b7
|
物料-采购件入库页面功能实现
|
2026-01-27 15:50:23 +08:00 |
|
|
|
2f8a5c55b1
|
python-flask和Vue两种模式初模板
|
2026-01-26 17:00:12 +08:00 |
|