init: IotLCM 开源版部署仓
内容: - docker-compose.yml:14 个基础/业务服务 + 3 个可选 profile(with-mock 挡板、with-bot、with-nginx) - .env.example:集中管理镜像仓库、口令、端口;必填项缺失时 compose 直接报错退出 - config.example/:10 份配置模板,全部为占位值与注释说明 - schema/:12 个初始化脚本,按文件名顺序由 MySQL initdb 自动执行 脱敏处理: - 生产/内网 IP、镜像仓库地址、公司名、真实域名全部清除 - 演示账号保留 18 个(出库与划拨依赖账号与部门树的关联), 昵称/邮箱/手机号/登录IP/头像改为占位或编造值 - 数据库账号与 admin 口令改为初始化时按 .env 注入计算 - 通道模板与 Mock 通道的上游密钥置空 - Mock 通道地址指向 compose 内 onelink-mock 服务 部署时用 --profile with-mock 启动运营商接口挡板,即可在无真实运营商环境时跑通全链路。
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
-- ============================================
|
||||
-- 演示环境种子数据:sys_menu 与生产全量对齐(2026-10-27)
|
||||
--
|
||||
-- 背景:演示库 sys_menu 420 条,生产 459 条,缺 27 条增量(生产有、演示无),
|
||||
-- 反向差异 0 条(演示无多余菜单)。缺的包括:
|
||||
-- · 达量断网 4 个按钮权限(excel:template / excel:submit / range:submit / input:submit)
|
||||
-- —— 这是"达量断网页面按钮点了 403 / 看不到功能"的直接原因
|
||||
-- · 全量同步页(fullSyncRuns:view/failures/start/replay/replay:view)5 条
|
||||
-- · 订单模块(订单目录 + 管理员订单 + 销售订单列表)3 条
|
||||
-- · 文档中心(含 Web 手册 / OpenAPI 文档)3 条
|
||||
-- · 财务/流量池/通道/销户等按钮权限 12 条
|
||||
--
|
||||
-- 方法:以 perms 为语义键做比对(perms 为空时用 menu_type+menu_name),
|
||||
-- 生产 ID 与演示 ID 体系不同,故新建菜单占用演示 421-447 段,
|
||||
-- 父级按语义递归解析到演示现有菜单(0 个悬空)。
|
||||
--
|
||||
-- 结果:演示 447 条;与生产逐条比对 —— 缺 0 条、多余 0 条。
|
||||
-- 数量差 12 = 演示独有的 5 条租户按钮(system:tenant:*)
|
||||
-- + 生产侧 7 条同 perms 的重复菜单(语义键去重后合并)
|
||||
--
|
||||
-- 角色绑定:演示仅 5 个角色,新菜单绑到 2/82/88(原有的全量绑定角色),
|
||||
-- 与它们各自 190 条的绑定模式一致;role 3/4 是限定角色,不绑。
|
||||
--
|
||||
-- 前置知识:超管(role 1) 的菜单可见性走代码分支直接返回全部 status=0 菜单;
|
||||
-- 但接口鉴权的 accessCodeList 仍需 sys_role_menu 里有该菜单,
|
||||
-- 否则 normalizeMenuAccessCodes 拿不到 perms → 按钮/功能 403。
|
||||
--
|
||||
-- 幂等:先删后插,可重复执行。执行顺序:10 之后(11-)。
|
||||
-- ============================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
USE `db_iotlcm`;
|
||||
|
||||
DELETE FROM `sys_menu` WHERE `menu_id` BETWEEN 421 AND 447;
|
||||
INSERT INTO `sys_menu` (`menu_id`,`menu_name`,`parent_id`,`order_num`,`path`,`component`,`is_frame`,`is_cache`,`menu_type`,`visible`,`status`,`perms`,`icon`,`created_dept`,`created_by`,`created_at`,`remark`) VALUES
|
||||
(421,'全量同步',2,7,'full-sync','monitor/full-sync/index','1','0','C','0','0','cpm:iot:fullSyncRuns:view','lucide:refresh-cw',100,1,NOW(),'全量同步结果与手动启动'),
|
||||
(422,'查看失败明细',421,1,'',NULL,'1','0','F','0','0','cpm:iot:fullSyncRuns:failures','#',100,1,NOW(),NULL),
|
||||
(423,'手动启动同步',421,2,'',NULL,'1','0','F','0','0','cpm:iot:fullSyncRuns:start','#',100,1,NOW(),NULL),
|
||||
(424,'重投失败卡',421,3,'',NULL,'1','0','F','0','0','cpm:iot:fullSyncRuns:replay','#',100,1,NOW(),NULL),
|
||||
(425,'查看重投状态',421,4,'',NULL,'1','0','F','0','0','cpm:iot:fullSyncRuns:replay:view','#',100,1,NOW(),NULL),
|
||||
(426,'订单',196,10,'TOrder',NULL,'1','0','M','0','0',NULL,NULL,100,1,NOW(),NULL),
|
||||
(427,'管理员订单',426,11,'indexTwo','iotlcm/tOrder/indexTwo','1','0','C','0','0',NULL,'ant-design:appstore-outlined',100,1,NOW(),NULL),
|
||||
(428,'获取财务审核记录表列表',354,10,'',NULL,'1','0','F','0','0','gen:tFinanceAuditRecord:list',NULL,100,1,NOW(),NULL),
|
||||
(429,'获取财务申请表列表',349,10,'',NULL,'1','0','F','0','0','gen:tFinanceApply:list',NULL,100,1,NOW(),NULL),
|
||||
(430,'获取分层分润概览',334,10,'',NULL,'1','0','F','0','0','common:tFinCommissionDetail:getCommissionOverview',NULL,100,1,NOW(),NULL),
|
||||
(431,'获取SIM流量池套餐配置表列表',411,10,'',NULL,'1','0','F','0','0','iot:tFlowPackageConfig:list',NULL,100,1,NOW(),NULL),
|
||||
(432,'敏感定价查看',135,15,'',NULL,'1','0','F','0','0','iot:tSimFlowPackagePrice:sensitive:view',NULL,100,1,NOW(),NULL),
|
||||
(433,'敏感定价维护',135,15,'',NULL,'1','0','F','0','0','iot:tSimFlowPackagePrice:sensitive:edit',NULL,100,1,NOW(),NULL),
|
||||
(434,'下载批量卡销户Excel模板',257,10,'',NULL,'1','0','F','0','0','iot:tSimCardCancel:excel:template',NULL,100,1,NOW(),NULL),
|
||||
(435,'提交Excel批量卡销户',257,10,'',NULL,'1','0','F','0','0','iot:tSimCardCancel:excel:submit',NULL,100,1,NOW(),NULL),
|
||||
(436,'通道测试',119,10,'',NULL,'1','0','F','0','0','iot:tSimChannels:test',NULL,100,1,NOW(),NULL),
|
||||
(437,'提交批量输入达量断网配置',257,10,'',NULL,'1','0','F','0','0','iot:tSimCardTrafficCutoff:input:submit',NULL,100,1,NOW(),NULL),
|
||||
(438,'单卡加油包',257,10,'',NULL,'1','0','F','0','0','iot:tSimCardBindPkg:addPackage',NULL,100,1,NOW(),NULL),
|
||||
(439,'流量池加油包',257,10,'',NULL,'1','0','F','0','0','iot:tSimPoolBindPackage:addPackage',NULL,100,1,NOW(),NULL),
|
||||
(440,'看订购表/套餐详情',257,10,'',NULL,'1','0','F','0','0','iot:tSimCardBindPkg:view',NULL,100,1,NOW(),NULL),
|
||||
(441,'下载达量断网配置Excel模板',416,1,'',NULL,'1','0','F','0','0','iot:tSimCardTrafficCutoff:excel:template',NULL,100,1,NOW(),NULL),
|
||||
(442,'提交Excel批量达量断网配置',416,1,'',NULL,'1','0','F','0','0','iot:tSimCardTrafficCutoff:excel:submit',NULL,100,1,NOW(),NULL),
|
||||
(443,'提交连号达量断网配置',416,1,'',NULL,'1','0','F','0','0','iot:tSimCardTrafficCutoff:range:submit',NULL,100,1,NOW(),NULL),
|
||||
(444,'文档中心',0,33,'','/','1','0','C','0','0',NULL,NULL,100,1,NOW(),NULL),
|
||||
(445,'Web 使用手册',444,1,'/docs/manual/web/',NULL,'0','0','C','0','0',NULL,NULL,100,1,NOW(),NULL),
|
||||
(446,'OpenAPI 文档',444,2,'/docs/openapi/v3/',NULL,'0','0','C','0','0',NULL,NULL,100,1,NOW(),NULL),
|
||||
(447,'获取销售订单列表',427,10,'',NULL,'1','0','F','0','0','iot:tOrder:sellList',NULL,100,1,NOW(),NULL);
|
||||
|
||||
DELETE FROM sys_role_menu WHERE menu_id BETWEEN 421 AND 447;
|
||||
INSERT INTO sys_role_menu (tenant_id, role_id, menu_id, data_scope)
|
||||
SELECT '000000', r.role_id, m.menu_id, '0'
|
||||
FROM (SELECT 2 AS role_id UNION ALL SELECT 82 UNION ALL SELECT 88) r
|
||||
CROSS JOIN (SELECT menu_id FROM sys_menu WHERE menu_id BETWEEN 421 AND 447) m;
|
||||
|
||||
-- 自检:菜单总数应为 447,新增绑定 81 条
|
||||
SELECT COUNT(*) AS menu_total FROM `sys_menu`;
|
||||
SELECT role_id, COUNT(*) AS menus FROM `sys_role_menu` GROUP BY role_id ORDER BY role_id;
|
||||
Reference in New Issue
Block a user