| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- -- 燃气基础数据:新增「管点台账」菜单
- --
- -- 页面组件:subSystem/gas/gasBasicadata/gasPipePoint
- -- 数据来源:app_user.gas_pipe_point(燃气管点专属表)
- -- 后端接口 /api/gas-pipe-point/{findByPage|getById|save|updateById|deleteById}
- --
- -- 父级定位(两路兜底):
- -- 1) 用兄弟页面 component='subSystem/gas/gasBasicadata/gasPipelintNet' 反查 parent_id(最可靠)
- -- 2) menu_type='M' 且 menu_name='基础数据管理',且父级是燃气目录
- --
- -- 幂等:菜单按 component 判重,已存在则只更新名称/路径/父级,不改排序;
- -- 授权按 (role_id, menu_id) 判重。
- -- 主键:menu_id 显式取 max+1 —— 本库由 MySQL 迁移而来,自增计数器可能未推进。
- --
- -- 执行后请重新登录一次,让前端重新拉取菜单。
- -- 前置:结束上一次失败执行遗留的 aborted 事务
- ROLLBACK;
- BEGIN;
- SET search_path TO app_user, public;
- DO $$
- DECLARE
- v_parent bigint;
- v_page bigint;
- v_role record;
- BEGIN
- -- 1. 定位「燃气 - 基础数据管理」目录
- SELECT parent_id INTO v_parent
- FROM sys_menu
- WHERE component = 'subSystem/gas/gasBasicadata/gasPipelintNet'
- LIMIT 1;
- IF v_parent IS NULL THEN
- SELECT menu_id INTO v_parent
- FROM sys_menu
- WHERE menu_type = 'M'
- AND menu_name = '基础数据管理'
- AND parent_id IN (SELECT menu_id FROM sys_menu WHERE menu_name LIKE '%燃气%')
- LIMIT 1;
- END IF;
- IF v_parent IS NULL THEN
- RAISE NOTICE '未找到燃气-基础数据管理目录,请手工确认 parent_id 后重跑';
- RETURN;
- END IF;
- -- 2. 页面菜单
- SELECT menu_id INTO v_page
- FROM sys_menu
- WHERE component = 'subSystem/gas/gasBasicadata/gasPipePoint'
- LIMIT 1;
- IF v_page IS NULL THEN
- SELECT COALESCE(MAX(menu_id), 0) + 1 INTO v_page FROM sys_menu;
- INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query,
- is_frame, is_cache, menu_type, visible, status, perms, icon,
- create_by, create_time, remark)
- VALUES (v_page, '管点台账', v_parent, 3, 'gasPipePoint',
- 'subSystem/gas/gasBasicadata/gasPipePoint', NULL,
- 1, 0, 'C', '0', '0', '', 'list',
- 'admin', CURRENT_TIMESTAMP, '燃气管点台账');
- RAISE NOTICE '已新增菜单,menu_id=%', v_page;
- ELSE
- UPDATE sys_menu
- SET menu_name = '管点台账',
- parent_id = v_parent,
- path = 'gasPipePoint',
- visible = '0',
- status = '0'
- WHERE menu_id = v_page;
- RAISE NOTICE '菜单已存在,已更新,menu_id=%', v_page;
- END IF;
- -- 3. 跟随既有授权:原本能进父级目录的角色,一并授予该页面
- FOR v_role IN SELECT role_id FROM sys_role_menu WHERE menu_id = v_parent LOOP
- IF NOT EXISTS (SELECT 1 FROM sys_role_menu WHERE role_id = v_role.role_id AND menu_id = v_page) THEN
- INSERT INTO sys_role_menu (role_id, menu_id) VALUES (v_role.role_id, v_page);
- END IF;
- END LOOP;
- END $$;
- COMMIT;
|