feat: 采购管理税率+分开单价总价列 + 按单出/借库锁定扫描 + 含税法计算

- purchase: 新增tax_rate字段(model+service+frontend), 表格拆分为不含税单价/总价/税率三列
- buy.vue: 含税法计算(含税总价=数量×含税单价), 含税总价自动计算可手动覆盖
- create.vue: 按单出库模式下未选审批单时锁定摄像头和SKU输入
- borrow.vue: 未选审批单时锁定摄像头和SKU输入
- deploy_production.sql: 整合全部数据库变更(表结构+权限码+角色分配)
This commit is contained in:
yueli
2026-07-15 16:07:59 +08:00
parent 4b1a86a870
commit 4934cd4d8f
8 changed files with 240 additions and 87 deletions

View File

@ -12,10 +12,13 @@ BEGIN;
-- 1. 采购申请表新增 base_id关联物料基础信息
ALTER TABLE purchase_request ADD COLUMN IF NOT EXISTS base_id INTEGER;
-- 2. 采购入库表新增 request_id关联采购申请单
-- 2. 采购申请表新增 tax_rate税率
ALTER TABLE purchase_request ADD COLUMN IF NOT EXISTS tax_rate NUMERIC(5,2) DEFAULT 0;
-- 3. 采购入库表新增 request_id关联采购申请单
ALTER TABLE stock_buy ADD COLUMN IF NOT EXISTS request_id INTEGER;
-- 3. 角色权限表新增 company_name支持公司级别权限隔离
-- 4. 角色权限表新增 company_name支持公司级别权限隔离
ALTER TABLE sys_role_permission ADD COLUMN IF NOT EXISTS company_name VARCHAR(255);
@ -188,6 +191,57 @@ FROM sys_menu
WHERE code IN ('system_mgmt', 'system_permission', 'system_audit')
AND NOT EXISTS (SELECT 1 FROM sys_role_permission rp WHERE rp.role_code = 'SUPERVISOR' AND rp.target_code = sys_menu.code AND rp.type = 'menu');
-- ============================================================
-- 三补、借库管理菜单 + 权限码 + 角色分配
-- ============================================================
-- 借库选单 & 借库审批 菜单
INSERT INTO sys_menu (code, name, parent_id, is_visible)
SELECT 'op_borrow_apply', '借库选单', m.id, true
FROM sys_menu m WHERE m.code = 'operation_mgmt'
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE code = 'op_borrow_apply');
INSERT INTO sys_menu (code, name, parent_id, is_visible)
SELECT 'op_borrow_approval', '借库审批', m.id, true
FROM sys_menu m WHERE m.code = 'operation_mgmt'
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE code = 'op_borrow_approval');
-- 借库选单元素权限
INSERT INTO sys_element (menu_code, name, code, element_type) SELECT 'op_borrow_apply', '物品名称', 'op_borrow_apply:name', 'column' WHERE NOT EXISTS (SELECT 1 FROM sys_element WHERE code = 'op_borrow_apply:name');
INSERT INTO sys_element (menu_code, name, code, element_type) SELECT 'op_borrow_apply', '规格型号', 'op_borrow_apply:spec', 'column' WHERE NOT EXISTS (SELECT 1 FROM sys_element WHERE code = 'op_borrow_apply:spec');
INSERT INTO sys_element (menu_code, name, code, element_type) SELECT 'op_borrow_apply', '可用库存', 'op_borrow_apply:available_quantity', 'column' WHERE NOT EXISTS (SELECT 1 FROM sys_element WHERE code = 'op_borrow_apply:available_quantity');
INSERT INTO sys_element (menu_code, name, code, element_type) SELECT 'op_borrow_apply', '操作/编辑', 'op_borrow_apply:operation', 'column' WHERE NOT EXISTS (SELECT 1 FROM sys_element WHERE code = 'op_borrow_apply:operation');
-- 角色分配:有 operation_mgmt 的角色 → 获得借库选单/审批菜单 + 元素
INSERT INTO sys_role_permission (role_code, target_code, type)
SELECT DISTINCT rp.role_code, 'op_borrow_apply', 'menu'
FROM sys_role_permission rp WHERE rp.target_code = 'operation_mgmt'
AND NOT EXISTS (SELECT 1 FROM sys_role_permission WHERE role_code = rp.role_code AND target_code = 'op_borrow_apply');
INSERT INTO sys_role_permission (role_code, target_code, type)
SELECT DISTINCT rp.role_code, 'op_borrow_approval', 'menu'
FROM sys_role_permission rp WHERE rp.target_code = 'operation_mgmt'
AND NOT EXISTS (SELECT 1 FROM sys_role_permission WHERE role_code = rp.role_code AND target_code = 'op_borrow_approval');
INSERT INTO sys_role_permission (role_code, target_code, type)
SELECT rp.role_code, elem.code, 'element'
FROM (SELECT DISTINCT role_code FROM sys_role_permission WHERE target_code = 'operation_mgmt') rp
CROSS JOIN (SELECT unnest(ARRAY['op_borrow_apply:name','op_borrow_apply:spec','op_borrow_apply:available_quantity','op_borrow_apply:operation']) AS code) elem
WHERE NOT EXISTS (SELECT 1 FROM sys_role_permission rp2 WHERE rp2.role_code = rp.role_code AND rp2.target_code = elem.code);
-- 补借库管理菜单给 SUPERVISOR如缺
INSERT INTO sys_role_permission (role_code, target_code, type) SELECT 'SUPERVISOR', 'operation_mgmt', 'menu' WHERE NOT EXISTS (SELECT 1 FROM sys_role_permission WHERE role_code = 'SUPERVISOR' AND target_code = 'operation_mgmt');
INSERT INTO sys_role_permission (role_code, target_code, type) SELECT 'SUPERVISOR', 'op_borrow_apply', 'menu' WHERE NOT EXISTS (SELECT 1 FROM sys_role_permission WHERE role_code = 'SUPERVISOR' AND target_code = 'op_borrow_apply');
INSERT INTO sys_role_permission (role_code, target_code, type) SELECT 'SUPERVISOR', 'op_borrow_approval', 'menu' WHERE NOT EXISTS (SELECT 1 FROM sys_role_permission WHERE role_code = 'SUPERVISOR' AND target_code = 'op_borrow_approval');
INSERT INTO sys_role_permission (role_code, target_code, type) SELECT 'SUPERVISOR', 'op_borrow', 'menu' WHERE NOT EXISTS (SELECT 1 FROM sys_role_permission WHERE role_code = 'SUPERVISOR' AND target_code = 'op_borrow');
INSERT INTO sys_role_permission (role_code, target_code, type) SELECT 'SUPERVISOR', 'op_return', 'menu' WHERE NOT EXISTS (SELECT 1 FROM sys_role_permission WHERE role_code = 'SUPERVISOR' AND target_code = 'op_return');
INSERT INTO sys_role_permission (role_code, target_code, type) SELECT 'SUPERVISOR', 'op_records', 'menu' WHERE NOT EXISTS (SELECT 1 FROM sys_role_permission WHERE role_code = 'SUPERVISOR' AND target_code = 'op_records');
-- 出库管理菜单补 SUPERVISOR
INSERT INTO sys_role_permission (role_code, target_code, type) SELECT 'SUPERVISOR', 'outbound_mgmt', 'menu' WHERE NOT EXISTS (SELECT 1 FROM sys_role_permission WHERE role_code = 'SUPERVISOR' AND target_code = 'outbound_mgmt');
INSERT INTO sys_role_permission (role_code, target_code, type) SELECT 'SUPERVISOR', 'outbound_approval', 'menu' WHERE NOT EXISTS (SELECT 1 FROM sys_role_permission WHERE role_code = 'SUPERVISOR' AND target_code = 'outbound_approval');
INSERT INTO sys_role_permission (role_code, target_code, type) SELECT 'SUPERVISOR', elem.code, 'element' FROM (SELECT unnest(ARRAY['outbound_approval:request_no','outbound_approval:applicant','outbound_approval:approver','outbound_approval:status','outbound_approval:operation']) AS code) elem WHERE NOT EXISTS (SELECT 1 FROM sys_role_permission WHERE role_code = 'SUPERVISOR' AND target_code = elem.code);
-- ============================================================
-- 四、验证
-- ============================================================
@ -196,7 +250,7 @@ SELECT '=== 验证 ===' AS info;
SELECT '表结构' AS item, column_name, data_type
FROM information_schema.columns
WHERE table_name IN ('purchase_request', 'stock_buy', 'sys_role_permission')
AND column_name IN ('base_id', 'request_id', 'company_name')
AND column_name IN ('base_id', 'request_id', 'company_name', 'tax_rate')
ORDER BY table_name, column_name;
SELECT '权限码总数' AS item, count(*) FROM sys_element;