Files
leaudit-platform-backend/scripts/创建sql/seed_govdoc_routes.sql
T
2026-05-25 09:50:01 +08:00

277 lines
7.3 KiB
PL/PgSQL

BEGIN;
-- ============================================================================
-- govdoc 模块前端路由 / 菜单初始化草案
-- 目标:
-- 1. 注册 /govdoc 模块根路由与常用子路由
-- 2. 尽量兼容当前 sys_routes 的父子层级展示方式
-- 3. 为默认角色补齐 role_route 菜单可见性
-- 说明:
-- - 采用 route_path / route_name / route_title 这一套当前仓库主流字段风格
-- - 明细页 / 详情页默认 hidden,避免菜单树出现无意义叶子节点
-- - 幂等执行:重复跑会更新标题、父子关系、显示状态
-- ============================================================================
WITH upsert_root AS (
INSERT INTO sys_routes (
route_path,
route_name,
component,
parent_id,
route_title,
icon,
sort_order,
is_hidden,
is_cache,
meta,
status,
created_at,
updated_at,
deleted_at
)
VALUES (
'/govdoc',
'govdoc',
'govdoc',
NULL,
'内部公文处理',
'ri-file-paper-2-line',
80,
FALSE,
TRUE,
'{"group":"govdoc","module":"govdoc"}'::jsonb,
0,
NOW(),
NOW(),
NULL
)
ON CONFLICT (route_path) WHERE deleted_at IS NULL
DO UPDATE SET
route_name = EXCLUDED.route_name,
component = EXCLUDED.component,
route_title = EXCLUDED.route_title,
icon = EXCLUDED.icon,
sort_order = EXCLUDED.sort_order,
is_hidden = EXCLUDED.is_hidden,
is_cache = EXCLUDED.is_cache,
meta = EXCLUDED.meta,
status = 0,
updated_at = NOW(),
deleted_at = NULL
RETURNING id
),
root_route AS (
SELECT id FROM upsert_root
UNION ALL
SELECT id
FROM sys_routes
WHERE route_path = '/govdoc'
AND deleted_at IS NULL
LIMIT 1
)
INSERT INTO sys_routes (
route_path,
route_name,
component,
parent_id,
route_title,
icon,
sort_order,
is_hidden,
is_cache,
meta,
status,
created_at,
updated_at,
deleted_at
)
VALUES
(
'/govdoc/upload',
'govdoc.upload',
'govdoc.upload',
(SELECT id FROM root_route),
'上传公文',
'ri-upload-cloud-2-line',
1,
FALSE,
TRUE,
'{"group":"govdoc","module":"govdoc","page":"upload"}'::jsonb,
0,
NOW(),
NOW(),
NULL
),
(
'/govdoc/audits',
'govdoc.audits',
'govdoc.audits',
(SELECT id FROM root_route),
'公文列表',
'ri-file-list-3-line',
2,
FALSE,
TRUE,
'{"group":"govdoc","module":"govdoc","page":"audits"}'::jsonb,
0,
NOW(),
NOW(),
NULL
),
(
'/govdoc/detail',
'govdoc.detail',
'govdoc.detail',
(SELECT id FROM root_route),
'公文详情',
'ri-file-search-line',
3,
TRUE,
TRUE,
'{"group":"govdoc","module":"govdoc","page":"detail"}'::jsonb,
0,
NOW(),
NOW(),
NULL
),
(
'/govdoc/rules',
'govdoc.rules',
'govdoc.rules',
(SELECT id FROM root_route),
'规则配置',
'ri-scales-3-line',
4,
FALSE,
TRUE,
'{"group":"govdoc","module":"govdoc","page":"rules"}'::jsonb,
0,
NOW(),
NOW(),
NULL
),
(
'/govdoc/settings',
'govdoc.settings',
'govdoc.settings',
(SELECT id FROM root_route),
'模块配置',
'ri-settings-3-line',
5,
FALSE,
TRUE,
'{"group":"govdoc","module":"govdoc","page":"settings"}'::jsonb,
0,
NOW(),
NOW(),
NULL
)
ON CONFLICT (route_path) WHERE deleted_at IS NULL
DO UPDATE SET
route_name = EXCLUDED.route_name,
component = EXCLUDED.component,
parent_id = EXCLUDED.parent_id,
route_title = EXCLUDED.route_title,
icon = EXCLUDED.icon,
sort_order = EXCLUDED.sort_order,
is_hidden = EXCLUDED.is_hidden,
is_cache = EXCLUDED.is_cache,
meta = EXCLUDED.meta,
status = 0,
updated_at = NOW(),
deleted_at = NULL;
-- 修正旧环境中可能已存在但未正确挂到 /govdoc 下的子路由。
UPDATE sys_routes AS child
SET
parent_id = root.id,
route_title = CASE
WHEN child.route_path = '/govdoc/upload' THEN '上传公文'
WHEN child.route_path = '/govdoc/audits' THEN '公文列表'
WHEN child.route_path = '/govdoc/detail' THEN '公文详情'
WHEN child.route_path = '/govdoc/rules' THEN '规则配置'
WHEN child.route_path = '/govdoc/settings' THEN '模块配置'
ELSE child.route_title
END,
is_hidden = CASE
WHEN child.route_path = '/govdoc/detail' THEN TRUE
ELSE child.is_hidden
END,
updated_at = NOW()
FROM sys_routes root
WHERE child.deleted_at IS NULL
AND root.deleted_at IS NULL
AND root.route_path = '/govdoc'
AND child.route_path IN (
'/govdoc/upload',
'/govdoc/audits',
'/govdoc/detail',
'/govdoc/rules',
'/govdoc/settings'
);
-- 根路由标题兜底,避免历史环境残留旧文案。
UPDATE sys_routes
SET route_title = '内部公文处理',
updated_at = NOW()
WHERE deleted_at IS NULL
AND route_path = '/govdoc';
WITH role_map AS (
SELECT id, role_key
FROM roles
WHERE role_key IN ('super_admin', 'provincial_admin', 'admin', 'common')
),
route_map AS (
SELECT id, route_path
FROM sys_routes
WHERE deleted_at IS NULL
AND route_path IN (
'/govdoc',
'/govdoc/upload',
'/govdoc/audits',
'/govdoc/detail',
'/govdoc/rules',
'/govdoc/settings'
)
),
seed(role_key, route_path, permission, status) AS (
VALUES
('super_admin', '/govdoc', 'RW', 1),
('super_admin', '/govdoc/upload', 'RW', 1),
('super_admin', '/govdoc/audits', 'RW', 1),
('super_admin', '/govdoc/detail', 'RW', 1),
('super_admin', '/govdoc/rules', 'RW', 1),
('super_admin', '/govdoc/settings', 'RW', 1),
('provincial_admin', '/govdoc', 'RW', 1),
('provincial_admin', '/govdoc/upload', 'RW', 1),
('provincial_admin', '/govdoc/audits', 'RW', 1),
('provincial_admin', '/govdoc/detail', 'RW', 1),
('provincial_admin', '/govdoc/rules', 'RW', 1),
('provincial_admin', '/govdoc/settings', 'RW', 1),
('admin', '/govdoc', 'RW', 1),
('admin', '/govdoc/upload', 'RW', 1),
('admin', '/govdoc/audits', 'RW', 1),
('admin', '/govdoc/detail', 'RW', 1),
('admin', '/govdoc/rules', 'R', 1),
('common', '/govdoc', 'R', 1),
('common', '/govdoc/upload', 'R', 1),
('common', '/govdoc/audits', 'R', 1),
('common', '/govdoc/detail', 'R', 1),
('common', '/govdoc/rules', 'R', 1)
)
INSERT INTO role_route (role_id, route_id, permission, status, created_at, updated_at)
SELECT rm.id, tm.id, s.permission, s.status, NOW(), NOW()
FROM seed s
JOIN role_map rm ON rm.role_key = s.role_key
JOIN route_map tm ON tm.route_path = s.route_path
ON CONFLICT (role_id, route_id) DO UPDATE SET
permission = EXCLUDED.permission,
status = EXCLUDED.status,
updated_at = NOW();
COMMIT;