127 lines
4.7 KiB
Plaintext
127 lines
4.7 KiB
Plaintext
DELIMITER //
|
|
|
|
CREATE OR REPLACE PROCEDURE zen_create_json_kernel(
|
|
IN p_uuid VARCHAR(100),
|
|
IN p_FunctionTag VARCHAR(100),
|
|
IN p_tblName VARCHAR(100),
|
|
IN p_pk VARCHAR(100),
|
|
IN p_query_type VARCHAR(1),
|
|
IN p_code_id VARCHAR(100)
|
|
)
|
|
/*
|
|
功能 : amis Wizard 產生 json UI 的核心程式
|
|
描述: 本段 sp 是設定的主程式, 由此呼叫各自元件 sp, 會重新組合出原 @temp_code 內跟 compoment 的定義內容
|
|
一般記錄到 zen_wizard_jsondata, 少數情況會寫到 zen_wizard_tmp(zen_create_json_transfer)
|
|
仔細看起來, 似乎只有 Cycle 類元件以及 picker, transfer 及 formula 這幾個特殊元件要特別獨立 function 處理
|
|
我覺得還是給每個元件一段 sp, 雖然子程式會變多, 但是會更好維護 Thinking
|
|
建立日期 : 2023/12/20
|
|
|
|
修改歷史
|
|
項目 誰 日期 修改說明
|
|
==== ========== ========== ================================================
|
|
1 Michael 2023/12/20 根據 v1.0 重構
|
|
*/
|
|
BEGIN
|
|
/* 目前支援下列 amis 元件(可依需求繼續擴充)
|
|
select / options / options-add / checkboxes
|
|
input-date / input-datetime / input-time
|
|
input-number / input-password / formula
|
|
picker
|
|
radios
|
|
switch
|
|
checkbox
|
|
static
|
|
input-text
|
|
textarea
|
|
input-image
|
|
input-file
|
|
link-file
|
|
link
|
|
transfer
|
|
mapping
|
|
progress
|
|
hidden
|
|
uuid
|
|
qr-code
|
|
cycle-frequency / cycle-weeks / cycle-months / cycle-startdate / cycle-enddate
|
|
*/
|
|
|
|
DECLARE v_FieldObject VARCHAR(100);
|
|
DECLARE v_picker_tag VARCHAR(100);
|
|
DECLARE v_FieldName VARCHAR(100);
|
|
DECLARE v_FieldCN NVARCHAR(100);
|
|
DECLARE v_FieldWidth VARCHAR(100);
|
|
DECLARE v_fielddefault VARCHAR(200);
|
|
DECLARE v_fieldro VARCHAR(10);
|
|
DECLARE v_fieldfm VARCHAR(100);
|
|
DECLARE v_FieldDS VARCHAR(1);
|
|
DECLARE v_FieldSH VARCHAR(1);
|
|
DECLARE v_FieldCheckNull VARCHAR(1);
|
|
DECLARE v_iscolumnmatch VARCHAR(10);
|
|
DECLARE v_FieldBlock INT;
|
|
DECLARE v_group VARCHAR(10);
|
|
DECLARE v_block VARCHAR(10);
|
|
-- DECLARE v_y SMALLINT;
|
|
DECLARE v_cnt INT;
|
|
DECLARE v_imax INT;
|
|
DECLARE v_imin INT;
|
|
DECLARE v_inow INT;
|
|
|
|
DECLARE v_required VARCHAR(100);
|
|
DECLARE v_others VARCHAR(800);
|
|
-- 有非 input-text 標準屬性設定的其他元件, 但又不是 4大特殊元件的元件(picker, cycle-, formula, transfer)
|
|
SET v_others = 'input-file^input-image^textarea^select^input-date^input-datetime^options^options-add^mapping^progress^link-file^link^radios^';
|
|
|
|
SELECT MIN(rowid) INTO v_imin FROM zen_wizard_jsondata WHERE uuid = p_uuid;
|
|
SELECT MAX(rowid) INTO v_imax FROM zen_wizard_jsondata WHERE uuid = p_uuid;
|
|
SET v_inow = v_imin;
|
|
-- SET v_y = 1;
|
|
|
|
WHILE v_inow <= v_imax DO
|
|
SELECT
|
|
fieldname, IFNULL(fieldcn,fieldname), fieldwidth, fieldobject, fieldblock, picker_tag,
|
|
IFNULL(fielddefault,''), IFNULL(fieldro,'N'), IFNULL(fieldfm,''),
|
|
fieldds, fieldsh, fieldchecknull, iscolumnmatch, _group, _block
|
|
INTO
|
|
v_FieldName, v_FieldCN, v_FieldWidth, v_FieldObject, v_FieldBlock, v_picker_tag,
|
|
v_fielddefault, v_fieldro, v_fieldfm,
|
|
v_FieldDS, v_FieldSH, v_FieldCheckNull, v_iscolumnmatch, v_group, v_block
|
|
FROM zen_wizard_jsondata WHERE uuid = p_uuid AND rowid = v_inow;
|
|
|
|
-- 防錯處理
|
|
IF v_FieldObject = 'Picker' AND IFNULL(v_picker_tag,'') = '' THEN
|
|
SET v_FieldObject = 'input-text';
|
|
END IF;
|
|
|
|
-- 是否為必填
|
|
SET v_required = '';
|
|
IF v_FieldCheckNull = 'A' OR v_FieldCheckNull = 'Y' THEN
|
|
SET v_required = ' "required": true,';
|
|
END IF;
|
|
|
|
-- 加入簡易排版功能, type=block
|
|
-- v2: block / group
|
|
CALL zen_create_json_comps_block(p_uuid,p_FunctionTag,p_code_id,v_group,v_FieldBlock,v_block,v_inow);
|
|
|
|
-- by 元件產生設定內容, 並寫入暫存
|
|
IF v_FieldObject = 'formula' THEN
|
|
CALL zen_create_json_comps_formula(p_uuid,v_FieldObject,v_FieldName,v_FieldCN,v_picker_tag,v_inow);
|
|
ELSEIF v_FieldObject = 'picker' THEN
|
|
CALL zen_create_json_comps_picker(p_uuid,p_FunctionTag,v_FieldName,v_FieldCN,v_picker_tag,p_pk,v_FieldCheckNull,v_inow);
|
|
ELSEIF v_FieldObject = 'transfer' THEN
|
|
CALL zen_create_json_comps_transfer(p_uuid,v_FieldName,v_FieldCN,v_picker_tag,p_code_id,v_inow);
|
|
ELSEIF LOCATE('cycle-',v_FieldObject) > 0 THEN
|
|
CALL zen_create_json_comps_cycles(p_uuid,v_FieldObject,v_FieldName,v_FieldCN,v_inow);
|
|
ELSEIF v_FieldSH = 'Y' THEN
|
|
CALL zen_create_json_comps_others(
|
|
p_uuid,p_FunctionTag,p_code_id,v_FieldObject,p_tblName,p_pk,
|
|
v_FieldName,v_FieldCN,v_fieldro,v_fielddefault,v_FieldDS,v_FieldSH,
|
|
v_FieldCheckNull,v_required,p_query_type,v_picker_tag,v_fieldfm,v_inow
|
|
);
|
|
END IF;
|
|
|
|
SET v_inow = v_inow + 1;
|
|
END WHILE;
|
|
END //
|
|
|
|
DELIMITER ; |