Files
Omni_kernel.db/permission/udf_myfavor.txt
T
2026-02-06 15:09:39 +08:00

125 lines
4.2 KiB
Plaintext

DELIMITER //
CREATE OR REPLACE FUNCTION udf_myfavor(
p_moduleid VARCHAR(100),
p_userid VARCHAR(20),
p_ver_type VARCHAR(10),
p_ip VARCHAR(100),
p_db2 VARCHAR(100)
)
RETURNS LONGTEXT
DETERMINISTIC
/*
function : 將傳入的字串, 依 @split 固定切割為 2筆資料, 仍傳回 table, 這是特殊的用法
description:
呼叫範例 SELECT udf_myfavor('eip','admin','beta','','')
build date : 2023/11/01
modify history
item who date modify docs
==== ========== ========== ================================================
1 michael 2023/11/01 新增
*/
BEGIN
DECLARE v_ret_menu LONGTEXT;
DECLARE v_imax2 INT;
DECLARE v_y2 INT;
DECLARE v_comma VARCHAR(1);
DECLARE v_id2 VARCHAR(100);
DECLARE v_name2 VARCHAR(100);
DECLARE v_isLocalMenu VARCHAR(1);
DECLARE v_crlf VARCHAR(2);
-- 創建臨時表來存儲數據
DROP TEMPORARY TABLE IF EXISTS temp_menu_favor;
CREATE TEMPORARY TABLE temp_menu_favor (
menuid VARCHAR(100),
caption VARCHAR(100),
isLocalMenu VARCHAR(1),
rowid INT AUTO_INCREMENT PRIMARY KEY
) ENGINE=MEMORY;
-- 插入數據到臨時表
INSERT INTO temp_menu_favor (menuid, caption, isLocalMenu)
SELECT a.functiontag, b.caption, IFNULL(b.isLocalMenu, 'N')
FROM sys_myfavor a
LEFT JOIN sys_menutable b ON a.functiontag = b.menuid
WHERE module = p_moduleid AND userid = p_userid;
SET v_ret_menu = '';
SET v_crlf = CHAR(10);
-- 內層迴圈
SELECT IFNULL(MAX(rowid), 0) INTO v_imax2 FROM temp_menu_favor;
SELECT IFNULL(MIN(rowid), 0) INTO v_y2 FROM temp_menu_favor;
WHILE v_y2 <= v_imax2 AND v_imax2 > 0 DO
IF v_y2 = v_imax2 THEN
SET v_comma = '';
ELSE
SET v_comma = ',';
END IF;
SELECT menuid, caption, isLocalMenu
INTO v_id2, v_name2, v_isLocalMenu
FROM temp_menu_favor
WHERE rowid = v_y2;
IF v_isLocalMenu = 'Y' THEN
-- 本地端 json 程式
SET v_ret_menu = CONCAT(
v_ret_menu,
' {', v_crlf,
' "label": "', v_name2, '",', v_crlf,
' "url": "/', p_moduleid, '/', v_id2, '",', v_crlf,
' "schemaApi": "get:/pages/', v_id2, '.json"', v_crlf,
' }', v_comma, v_crlf
);
ELSE
-- 真正的動態載入 code(test ok, but wait to use)
SET v_ret_menu = CONCAT(
v_ret_menu,
' {', v_crlf,
' "label": "', v_name2, '",', v_crlf,
' "url": "/', p_moduleid, '/', v_id2, '",', v_crlf,
' "schemaApi": {', v_crlf,
' "method": "post",', v_crlf,
' "url": "', p_ip, '/xapi/v2/', p_db2, '/zen_showsource/0/",', v_crlf,
' "data": {', v_crlf,
' "para01": "', v_id2, '",', v_crlf,
' "para02": "', p_ver_type, '",', v_crlf,
' "para03": "', p_ip, '"', v_crlf,
' },', v_crlf,
' "dataType": "form"', v_crlf,
' }', v_crlf,
' }', v_comma, v_crlf
);
END IF;
SET v_y2 = v_y2 + 1;
END WHILE;
IF v_ret_menu <> '' THEN
SET v_ret_menu = CONCAT(
' {', v_crlf,
' "children": [', v_crlf,
' {', v_crlf,
' "label": "我的最愛",', v_crlf,
' "url": "/sys",', v_crlf,
' "icon": "fa fa-heart-o",', v_crlf,
' "children": [', v_crlf,
v_ret_menu,
' ]', v_crlf,
' }', v_crlf,
' ]', v_crlf,
' },', v_crlf
);
END IF;
-- 清理臨時表
DROP TEMPORARY TABLE IF EXISTS temp_menu_favor;
RETURN v_ret_menu;
END //
DELIMITER ;