277 lines
7.3 KiB
PL/PgSQL
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;
|