first commit
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
delimiter //
|
||||
|
||||
create or replace procedure get_menustructure()
|
||||
/*
|
||||
Function : 配合 amis 的 transfer, 取得 module-menu 資料, 主要是建立 role-menu permissions 用
|
||||
Description: 本 sp 修改自 get_orgstructure
|
||||
Build Date : 2021/10/19
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2021/10/19
|
||||
|
||||
*/
|
||||
begin
|
||||
|
||||
declare max_val int;
|
||||
declare curr_id int;
|
||||
declare group_id int;
|
||||
declare next_group_id int;
|
||||
declare datas nvarchar(max);
|
||||
declare footer varchar(600);
|
||||
declare dept_name varchar(100);
|
||||
declare emp_name varchar(100);
|
||||
declare person_id varchar(100);
|
||||
declare crlf varchar(2);
|
||||
declare comm varchar(1);
|
||||
|
||||
set crlf = char(10) + char(13);
|
||||
|
||||
select
|
||||
bp.moduleid, bp.menuid, '(' || bp.moduleid || ')' || bm.modulename as deptname,
|
||||
'(' || bp.menuid || ')' || bp.caption as empname,
|
||||
ROW_NUMBER() OVER(PARTITION BY bp.moduleid ORDER BY bp.moduleid, bp.menuid) AS groupid,
|
||||
ROW_NUMBER() OVER(ORDER BY bp.moduleid, bp.menuid) AS rowid
|
||||
into #tmp
|
||||
from sys_menutable bp
|
||||
left join sys_module bm on bp.moduleid = bm.moduleid
|
||||
where coalesce(bp.moduleid, '') <> ''
|
||||
order by bp.moduleid, bp.menuid;
|
||||
|
||||
select count(*) into max_val from #tmp;
|
||||
select min(rowid) into curr_id from #tmp;
|
||||
|
||||
set datas = '';
|
||||
set comm = '';
|
||||
while (curr_id <= max_val) do
|
||||
-- 取得現有資料
|
||||
select groupid, deptname, empname, menuid into group_id, dept_name, emp_name, person_id
|
||||
from #tmp where rowid = curr_id;
|
||||
|
||||
if curr_id = max_val then
|
||||
set comm = '';
|
||||
else
|
||||
select groupid into next_group_id from #tmp where rowid = curr_id + 1;
|
||||
if next_group_id = 1 then
|
||||
set comm = '';
|
||||
else
|
||||
set comm = ',';
|
||||
end if;
|
||||
end if;
|
||||
|
||||
if group_id = 1 then
|
||||
if curr_id > 1 then
|
||||
set footer = ' ]' || crlf ||
|
||||
' },' || crlf;
|
||||
else
|
||||
set footer = '';
|
||||
end if;
|
||||
|
||||
set datas = datas || footer ||
|
||||
' {' || crlf ||
|
||||
' "label": "' || dept_name || '",' || crlf ||
|
||||
' "children": [' || crlf ||
|
||||
' {' || crlf ||
|
||||
' "label": "' || emp_name || '",' || crlf ||
|
||||
' "value": "' || person_id || '"' || crlf ||
|
||||
' }' || comm || crlf;
|
||||
else
|
||||
set datas = datas ||
|
||||
' {' || crlf ||
|
||||
' "label": "' || emp_name || '",' || crlf ||
|
||||
' "value": "' || person_id || '"' || crlf ||
|
||||
' }' || comm || crlf;
|
||||
end if;
|
||||
|
||||
set curr_id = curr_id + 1;
|
||||
end while;
|
||||
|
||||
set datas = ' [' || crlf || datas ||
|
||||
' ]' || crlf ||
|
||||
' }' || crlf ||
|
||||
' ]';
|
||||
|
||||
drop table #tmp;
|
||||
|
||||
select 0 as code, 'ok' as msg;
|
||||
select datas as jsoncode;
|
||||
|
||||
end //
|
||||
|
||||
delimiter ;
|
||||
Reference in New Issue
Block a user