-- =====================================================
-- 数据权限系统表结构
-- 创建时间: 2026-02-15
-- 说明: 用于实现基于CRUD四个维度的数据权限控制
-- =====================================================

-- 1. 数据权限表
DROP TABLE IF EXISTS t_data_permission;
CREATE TABLE t_data_permission (
    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
    permission_code VARCHAR(100) NOT NULL COMMENT '权限编码(如: product:create)',
    permission_name VARCHAR(100) NOT NULL COMMENT '权限名称(如: 商品创建)',
    module_code VARCHAR(50) NOT NULL COMMENT '模块编码(如: product)',
    module_name VARCHAR(100) NOT NULL COMMENT '模块名称(如: 商品管理)',
    operation_type VARCHAR(20) NOT NULL COMMENT '操作类型: create/read/update/delete/execute',
    description VARCHAR(255) COMMENT '权限描述',
    sort_order INT DEFAULT 0 COMMENT '排序',
    status TINYINT DEFAULT 1 COMMENT '状态: 1-启用, 0-禁用',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    UNIQUE KEY uk_permission_code (permission_code),
    KEY idx_module_code (module_code),
    KEY idx_operation_type (operation_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据权限表';

-- 2. 角色权限关联表
DROP TABLE IF EXISTS t_role_permission;
CREATE TABLE t_role_permission (
    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
    role_id BIGINT NOT NULL COMMENT '角色ID',
    permission_id BIGINT NOT NULL COMMENT '权限ID',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    UNIQUE KEY uk_role_permission (role_id, permission_id),
    KEY idx_role_id (role_id),
    KEY idx_permission_id (permission_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色权限关联表';

-- =====================================================
-- 初始化权限数据
-- =====================================================

-- 清空现有权限数据
TRUNCATE TABLE t_data_permission;

-- 商品管理模块
INSERT INTO t_data_permission (permission_code, permission_name, module_code, module_name, operation_type, description, sort_order) VALUES
('product:create', '创建商品', 'product', '商品管理', 'create', '添加新商品', 1),
('product:read', '查询商品', 'product', '商品管理', 'read', '查看商品列表和详情', 2),
('product:update', '修改商品', 'product', '商品管理', 'update', '编辑商品信息', 3),
('product:delete', '删除商品', 'product', '商品管理', 'delete', '删除商品', 4);

-- 设备管理模块
INSERT INTO t_data_permission (permission_code, permission_name, module_code, module_name, operation_type, description, sort_order) VALUES
('device:create', '添加设备', 'device', '设备管理', 'create', '添加新设备', 11),
('device:read', '查询设备', 'device', '设备管理', 'read', '查看设备列表和详情', 12),
('device:update', '修改设备', 'device', '设备管理', 'update', '编辑设备信息', 13),
('device:delete', '删除设备', 'device', '设备管理', 'delete', '删除设备', 14);

-- 订单管理模块
INSERT INTO t_data_permission (permission_code, permission_name, module_code, module_name, operation_type, description, sort_order) VALUES
('order:create', '创建订单', 'order', '订单管理', 'create', '手动创建订单', 21),
('order:read', '查询订单', 'order', '订单管理', 'read', '查看订单列表和详情', 22),
('order:update', '修改订单', 'order', '订单管理', 'update', '修改订单信息', 23),
('order:delete', '删除订单', 'order', '订单管理', 'delete', '删除订单', 24);

-- 门店管理模块
INSERT INTO t_data_permission (permission_code, permission_name, module_code, module_name, operation_type, description, sort_order) VALUES
('shop:create', '添加门店', 'shop', '门店管理', 'create', '添加新门店', 31),
('shop:read', '查询门店', 'shop', '门店管理', 'read', '查看门店列表和详情', 32),
('shop:update', '修改门店', 'shop', '门店管理', 'update', '编辑门店信息', 33),
('shop:delete', '删除门店', 'shop', '门店管理', 'delete', '删除门店', 34);

-- 库存管理模块
INSERT INTO t_data_permission (permission_code, permission_name, module_code, module_name, operation_type, description, sort_order) VALUES
('inventory:create', '创建库存记录', 'inventory', '库存管理', 'create', '创建库存记录', 41),
('inventory:read', '查询库存', 'inventory', '库存管理', 'read', '查看库存信息', 42),
('inventory:update', '修改库存', 'inventory', '库存管理', 'update', '修改库存信息', 43),
('inventory:delete', '删除库存记录', 'inventory', '库存管理', 'delete', '删除库存记录', 44);

-- 新品申请模块
INSERT INTO t_data_permission (permission_code, permission_name, module_code, module_name, operation_type, description, sort_order) VALUES
('product-apply:create', '提交新品申请', 'product-apply', '新品申请', 'create', '提交新品申请', 51),
('product-apply:read', '查询新品申请', 'product-apply', '新品申请', 'read', '查看新品申请列表和详情', 52),
('product-apply:update', '修改新品申请', 'product-apply', '新品申请', 'update', '修改新品申请或审核', 53),
('product-apply:delete', '删除新品申请', 'product-apply', '新品申请', 'delete', '删除新品申请', 54);

-- 用户管理模块
INSERT INTO t_data_permission (permission_code, permission_name, module_code, module_name, operation_type, description, sort_order) VALUES
('admin:create', '添加用户', 'admin', '用户管理', 'create', '添加管理员账号', 61),
('admin:read', '查询用户', 'admin', '用户管理', 'read', '查看用户列表和详情', 62),
('admin:update', '修改用户', 'admin', '用户管理', 'update', '编辑用户信息', 63),
('admin:delete', '删除用户', 'admin', '用户管理', 'delete', '删除用户账号', 64);

-- 角色管理模块
INSERT INTO t_data_permission (permission_code, permission_name, module_code, module_name, operation_type, description, sort_order) VALUES
('role:create', '添加角色', 'role', '角色管理', 'create', '添加新角色', 71),
('role:read', '查询角色', 'role', '角色管理', 'read', '查看角色列表和详情', 72),
('role:update', '修改角色', 'role', '角色管理', 'update', '编辑角色信息和权限配置', 73),
('role:delete', '删除角色', 'role', '角色管理', 'delete', '删除角色', 74);

-- 公告管理模块
INSERT INTO t_data_permission (permission_code, permission_name, module_code, module_name, operation_type, description, sort_order) VALUES
('announcement:create', '发布公告', 'announcement', '公告管理', 'create', '发布新公告', 81),
('announcement:read', '查询公告', 'announcement', '公告管理', 'read', '查看公告列表和详情', 82),
('announcement:update', '修改公告', 'announcement', '公告管理', 'update', '编辑公告内容', 83),
('announcement:delete', '删除公告', 'announcement', '公告管理', 'delete', '删除公告', 84);

-- 数据同步模块
INSERT INTO t_data_permission (permission_code, permission_name, module_code, module_name, operation_type, description, sort_order) VALUES
('sync:read', '查询同步记录', 'sync', '数据同步', 'read', '查看数据同步记录', 91),
('sync:execute', '执行同步', 'sync', '数据同步', 'execute', '执行数据同步操作', 92);

-- 仪表盘模块
INSERT INTO t_data_permission (permission_code, permission_name, module_code, module_name, operation_type, description, sort_order) VALUES
('dashboard:read', '查看仪表盘', 'dashboard', '仪表盘', 'read', '查看首页仪表盘数据', 101);

-- 操作日志模块
INSERT INTO t_data_permission (permission_code, permission_name, module_code, module_name, operation_type, description, sort_order) VALUES
('operation-log:read', '查询操作日志', 'operation-log', '操作日志', 'read', '查看操作日志记录', 111),
('operation-log:delete', '删除操作日志', 'operation-log', '操作日志', 'delete', '删除或清空操作日志', 112);

-- 客户管理模块
INSERT INTO t_data_permission (permission_code, permission_name, module_code, module_name, operation_type, description, sort_order) VALUES
('customer:read', '查询客户', 'customer', '客户管理', 'read', '查看客户列表和详情', 121),
('customer:update', '修改客户', 'customer', '客户管理', 'update', '编辑客户信息', 123);

-- 补货员管理模块
INSERT INTO t_data_permission (permission_code, permission_name, module_code, module_name, operation_type, description, sort_order) VALUES
('replenisher:create', '添加补货员', 'replenisher', '补货员管理', 'create', '创建新补货员', 131),
('replenisher:read', '查询补货员', 'replenisher', '补货员管理', 'read', '查看补货员列表和详情', 132),
('replenisher:update', '修改补货员', 'replenisher', '补货员管理', 'update', '编辑补货员信息和绑定设备', 133),
('replenisher:delete', '删除补货员', 'replenisher', '补货员管理', 'delete', '删除补货员', 134);

-- 设备补货单模块
INSERT INTO t_data_permission (permission_code, permission_name, module_code, module_name, operation_type, description, sort_order) VALUES
('replenishment:order:create', '创建补货单', 'replenishment-order', '设备补货单', 'create', '创建新补货单', 141),
('replenishment:order:read', '查询补货单', 'replenishment-order', '设备补货单', 'read', '查看补货单列表和详情', 142),
('replenishment:order:update', '修改补货单', 'replenishment-order', '设备补货单', 'update', '编辑补货单信息', 143),
('replenishment:order:delete', '删除补货单', 'replenishment-order', '设备补货单', 'delete', '删除补货单', 144),
('replenishment:order:submit', '提交补货单', 'replenishment-order', '设备补货单', 'execute', '提交补货单', 145),
('replenishment:order:sync', '同步ERP', 'replenishment-order', '设备补货单', 'execute', '同步补货单到ERP系统', 146),
('replenishment:order:complete', '完成补货单', 'replenishment-order', '设备补货单', 'execute', '完成补货单', 147);

-- =====================================================
-- 为超级管理员角色(role.id=1)分配所有权限
-- =====================================================
INSERT INTO t_role_permission (role_id, permission_id)
SELECT 1, id FROM t_data_permission WHERE status = 1;
