50 lines
1.7 KiB
MySQL
50 lines
1.7 KiB
MySQL
|
|
SET XACT_ABORT ON;
|
||
|
|
BEGIN TRANSACTION;
|
||
|
|
|
||
|
|
DECLARE @menuUrl nvarchar(100);
|
||
|
|
DECLARE @menuId int;
|
||
|
|
DECLARE menu_cursor CURSOR LOCAL FAST_FORWARD FOR
|
||
|
|
SELECT Url FROM (VALUES (N'/studentsManage'), (N'/sportsHallClass')) AS menus(Url);
|
||
|
|
|
||
|
|
OPEN menu_cursor;
|
||
|
|
FETCH NEXT FROM menu_cursor INTO @menuUrl;
|
||
|
|
WHILE @@FETCH_STATUS = 0
|
||
|
|
BEGIN
|
||
|
|
IF (SELECT COUNT(*) FROM Sys_Menu
|
||
|
|
WHERE Url = @menuUrl AND ParentId > 0 AND MenuType = 0 AND Enable IN (1, 2)) <> 1
|
||
|
|
THROW 51001, N'页面菜单不存在或不唯一,请检查菜单配置', 1;
|
||
|
|
|
||
|
|
SELECT @menuId = Menu_Id FROM Sys_Menu
|
||
|
|
WHERE Url = @menuUrl AND ParentId > 0 AND MenuType = 0 AND Enable IN (1, 2);
|
||
|
|
|
||
|
|
IF EXISTS (SELECT 1 FROM Sys_Menu WHERE Menu_Id = @menuId
|
||
|
|
AND NULLIF(LTRIM(RTRIM(Auth)), N'') IS NOT NULL
|
||
|
|
AND (ISJSON(Auth) <> 1 OR LEFT(LTRIM(Auth), 1) <> N'['))
|
||
|
|
THROW 51002, N'菜单权限不是有效 JSON 数组,请先检查原始数据', 1;
|
||
|
|
|
||
|
|
UPDATE Sys_Menu
|
||
|
|
SET Auth = COALESCE(NULLIF(Auth, N''), N'[]')
|
||
|
|
WHERE Menu_Id = @menuId AND (Auth IS NULL OR Auth = N'');
|
||
|
|
|
||
|
|
UPDATE menu
|
||
|
|
SET Auth = JSON_MODIFY(menu.Auth, 'append $',
|
||
|
|
JSON_QUERY(N'{"text":"批量删除","value":"BatchDelete"}'))
|
||
|
|
FROM Sys_Menu AS menu
|
||
|
|
WHERE menu.Menu_Id = @menuId
|
||
|
|
AND NOT EXISTS (SELECT 1 FROM OPENJSON(menu.Auth)
|
||
|
|
WITH (Value nvarchar(100) '$.value') AS action
|
||
|
|
WHERE action.Value = N'BatchDelete');
|
||
|
|
|
||
|
|
FETCH NEXT FROM menu_cursor INTO @menuUrl;
|
||
|
|
END;
|
||
|
|
CLOSE menu_cursor;
|
||
|
|
DEALLOCATE menu_cursor;
|
||
|
|
|
||
|
|
COMMIT TRANSACTION;
|
||
|
|
|
||
|
|
SELECT MenuName, Url, Auth
|
||
|
|
FROM Sys_Menu
|
||
|
|
WHERE Url IN (N'/studentsManage', N'/sportsHallClass')
|
||
|
|
AND ParentId > 0 AND MenuType = 0;
|
||
|
|
GO
|