feat(ai-house): 解除房源与资料库强绑定

This commit is contained in:
2026-08-08 06:48:09 +08:00
parent e362291d6e
commit 79666898c5
25 changed files with 9484 additions and 1050 deletions
@@ -0,0 +1,146 @@
-- 房源知识库后台菜单与权限。
-- 执行前请确认目标租户;当前开发环境为 10550,部署到其他租户时须改为对应租户 ID。
-- 脚本按“房源管理”父菜单动态挂载;若最后的校验结果显示 parent_menu_id 为 NULL,
-- 请先检查该租户的 sys_menu 数据后再执行。
SET @house_knowledge_tenant_id := 10550;
SET @house_knowledge_advisor_role_code := NULL;
-- 示例:SET @house_knowledge_advisor_role_code := 'consultant';
START TRANSACTION;
SET @house_knowledge_parent_menu_id := (
SELECT menu_id
FROM sys_menu
WHERE tenant_id = @house_knowledge_tenant_id
AND deleted = 0
AND menu_type = 0
AND (title = '房源管理' OR path IN ('/house', 'house'))
ORDER BY CASE WHEN title = '房源管理' THEN 0 ELSE 1 END, menu_id
LIMIT 1
);
INSERT INTO sys_menu (
parent_id, title, path, component, menu_type, sort_number,
authority, icon, hide, meta, app_id, tenant_id, deleted
)
SELECT
parent.menu_id, '房源知识库', '/house/knowledge', 'house/knowledge/index', 0, 90,
'house:knowledge', '', 0, '{}', parent.app_id, @house_knowledge_tenant_id, 0
FROM sys_menu parent
WHERE parent.menu_id = @house_knowledge_parent_menu_id
AND NOT EXISTS (
SELECT 1
FROM sys_menu existing
WHERE existing.tenant_id = @house_knowledge_tenant_id
AND existing.deleted = 0
AND existing.path = '/house/knowledge'
);
SET @house_knowledge_menu_id := (
SELECT menu_id
FROM sys_menu
WHERE tenant_id = @house_knowledge_tenant_id
AND deleted = 0
AND path = '/house/knowledge'
ORDER BY menu_id
LIMIT 1
);
-- 地点档案和标签字典由租户管理员维护;知识条目可单独授予顾问维护。
INSERT INTO sys_menu (
parent_id, title, path, component, menu_type, sort_number,
authority, icon, hide, meta, app_id, tenant_id, deleted
)
SELECT
@house_knowledge_menu_id, permission.title, '', '', 1, permission.sort_number,
permission.authority, '', 0, '{}', menu.app_id, @house_knowledge_tenant_id, 0
FROM sys_menu menu
JOIN (
SELECT '查看地点档案' AS title, 'house:knowledge:location:list' AS authority, 10 AS sort_number
UNION ALL SELECT '维护地点档案', 'house:knowledge:location:manage', 20
UNION ALL SELECT '查看知识标签', 'house:knowledge:tag:list', 30
UNION ALL SELECT '维护知识标签', 'house:knowledge:tag:manage', 40
UNION ALL SELECT '查看知识条目', 'house:knowledge:entry:list', 50
UNION ALL SELECT '新增知识条目', 'house:knowledge:entry:save', 60
UNION ALL SELECT '编辑知识条目', 'house:knowledge:entry:update', 70
UNION ALL SELECT '删除知识条目', 'house:knowledge:entry:remove', 80
) permission
WHERE menu.menu_id = @house_knowledge_menu_id
AND NOT EXISTS (
SELECT 1
FROM sys_menu existing
WHERE existing.tenant_id = @house_knowledge_tenant_id
AND existing.deleted = 0
AND existing.authority = permission.authority
);
-- 管理员拥有菜单及全部知识库维护权限。
INSERT INTO sys_role_menu (role_id, menu_id, tenant_id)
SELECT role.role_id, menu.menu_id, @house_knowledge_tenant_id
FROM sys_role role
JOIN sys_menu menu
ON menu.tenant_id = @house_knowledge_tenant_id
AND menu.deleted = 0
WHERE role.tenant_id = @house_knowledge_tenant_id
AND role.deleted = 0
AND role.role_code IN ('admin', 'superAdmin')
AND (menu.menu_id = @house_knowledge_menu_id OR menu.parent_id = @house_knowledge_menu_id)
AND NOT EXISTS (
SELECT 1
FROM sys_role_menu existing
WHERE existing.role_id = role.role_id
AND existing.menu_id = menu.menu_id
AND existing.tenant_id = @house_knowledge_tenant_id
);
-- 顾问仅获得查看地点/标签及知识条目维护权限。
-- 将 @house_knowledge_advisor_role_code 设为实际角色编码后才会生效。
INSERT INTO sys_role_menu (role_id, menu_id, tenant_id)
SELECT role.role_id, menu.menu_id, @house_knowledge_tenant_id
FROM sys_role role
JOIN sys_menu menu
ON menu.tenant_id = @house_knowledge_tenant_id
AND menu.deleted = 0
WHERE @house_knowledge_advisor_role_code IS NOT NULL
AND role.tenant_id = @house_knowledge_tenant_id
AND role.deleted = 0
AND role.role_code = @house_knowledge_advisor_role_code
AND menu.authority IN (
'house:knowledge',
'house:knowledge:location:list',
'house:knowledge:tag:list',
'house:knowledge:entry:list',
'house:knowledge:entry:save',
'house:knowledge:entry:update',
'house:knowledge:entry:remove'
)
AND NOT EXISTS (
SELECT 1
FROM sys_role_menu existing
WHERE existing.role_id = role.role_id
AND existing.menu_id = menu.menu_id
AND existing.tenant_id = @house_knowledge_tenant_id
);
COMMIT;
-- 执行后校验:应返回一个父菜单、一个知识库菜单和 8 个按钮权限。
SELECT @house_knowledge_parent_menu_id AS parent_menu_id,
@house_knowledge_menu_id AS house_knowledge_menu_id;
SELECT menu_id, parent_id, title, path, component, menu_type, authority, sort_number
FROM sys_menu
WHERE tenant_id = @house_knowledge_tenant_id
AND deleted = 0
AND (menu_id = @house_knowledge_menu_id OR parent_id = @house_knowledge_menu_id)
ORDER BY menu_type, sort_number, menu_id;
SELECT role.role_code, role.role_name, menu.title, menu.authority
FROM sys_role_menu role_menu
JOIN sys_role role ON role.role_id = role_menu.role_id
JOIN sys_menu menu ON menu.menu_id = role_menu.menu_id
WHERE role_menu.tenant_id = @house_knowledge_tenant_id
AND menu.deleted = 0
AND (menu.menu_id = @house_knowledge_menu_id OR menu.parent_id = @house_knowledge_menu_id)
ORDER BY role.role_code, menu.menu_type, menu.sort_number, menu.menu_id;