DELIMITER // CREATE OR REPLACE PROCEDURE zen_create_json_comps_cycles( IN p_uuid VARCHAR(100), IN p_FieldObject VARCHAR(100), IN p_FieldName VARCHAR(100), IN p_FieldCN NVARCHAR(100), IN p_rowid INT ) /* function : amis Wizard 產生 json UI 的核心程式(每個 Component 有各自的 json UI 定義) description: 本段 sp 主要是設定 cycle 週期性類元件 的 json 定義 Build Date : 2023/12/20 Modified : 2025/08/09 (轉換為 MariaDB 版本) Modify History Item Who Date Modify Docs ==== ========== ========== ================================================ 1 Michael 2023/12/20 根據 v1.0 重構 2 Assistant 2025/08/09 轉換為 MariaDB 版本 */ BEGIN DECLARE v_comps TEXT; DECLARE v_json_insert TEXT; DECLARE v_json_update TEXT; DECLARE v_json_quickedit TEXT; DECLARE v_json_gridview TEXT; DECLARE v_json_view TEXT; DECLARE v_code_id VARCHAR(600); DECLARE v_cnt INT; DECLARE v_blob_data TEXT; DECLARE v_field_df TEXT; DECLARE v_required TEXT; DECLARE v_crlf VARCHAR(2); DECLARE v_init_api TEXT; DECLARE v_pos , v_x INT; DECLARE v_tmp1 VARCHAR(100); DECLARE v_tmp2 TEXT; DECLARE v_tmp3 VARCHAR(1000); DECLARE v_frequency VARCHAR(100); DECLARE v_FieldWidth VARCHAR(100); DECLARE v_fld_date VARCHAR(20); DECLARE v_fld_time VARCHAR(20); DECLARE v_fld_last VARCHAR(10); DECLARE v_visibleOn VARCHAR(100); DECLARE v_vKey VARCHAR(100); DECLARE v_vVal VARCHAR(100); -- 通用寫法 SET v_crlf = CONCAT(CHAR(13), CHAR(10)); SET v_blob_data = ''; SET v_field_df = ''; SET v_required = ''; SET v_frequency = 'cal_repeated_flag'; -- Insert -- 以下和週期性設定元件相關 20230819 Michael IF p_FieldObject = 'cycle-frequency' THEN SET v_comps = CONCAT( ' {', v_crlf, ' "label": "', p_FieldCN, '",', v_crlf, ' "type": "radios",', v_crlf, ' "name": "', p_FieldName, '",', v_crlf, ' "inline": true,', v_crlf, ' "value": "none",', v_crlf, ' "required": true,', v_crlf, ' "options": [', v_crlf, ' {', v_crlf, ' "label": "不重複",', v_crlf, ' "value": "none"', v_crlf, ' },', v_crlf, ' {', v_crlf, ' "label": "每天",', v_crlf, ' "value": "day"', v_crlf, ' },', v_crlf, ' {', v_crlf, ' "label": "每週",', v_crlf, ' "value": "week"', v_crlf, ' },', v_crlf, ' {', v_crlf, ' "label": "每月",', v_crlf, ' "value": "month"', v_crlf, ' }', v_crlf, ' ]', v_crlf, ' }' ); ELSEIF p_FieldObject = 'cycle-weeks' THEN SET v_comps = CONCAT( ' {', v_crlf, ' "label": "', p_FieldCN, '",', v_crlf, ' "type": "button-group-select",', v_crlf, ' "name": "', p_FieldName, '",', v_crlf, ' "size": "md",', v_crlf, ' "visibleOn": "this.', IFNULL(v_frequency, ''), ' == \\"week\\"",', v_crlf, ' "clearable": true,', v_crlf, ' "multiple": true,', v_crlf, ' "extractValue": true,', v_crlf, ' "maxLength": 7,', v_crlf, ' "options": [', v_crlf, ' {', v_crlf, ' "label": "週一",', v_crlf, ' "value": "2"', v_crlf, ' },', v_crlf, ' {', v_crlf, ' "label": "週二",', v_crlf, ' "value": "3"', v_crlf, ' },', v_crlf, ' {', v_crlf, ' "label": "週三",', v_crlf, ' "value": "4"', v_crlf, ' },', v_crlf, ' {', v_crlf, ' "label": "週四",', v_crlf, ' "value": "5"', v_crlf, ' },', v_crlf, ' {', v_crlf, ' "label": "週五",', v_crlf, ' "value": "6"', v_crlf, ' },', v_crlf, ' {', v_crlf, ' "label": "週六",', v_crlf, ' "value": "7"', v_crlf, ' },', v_crlf, ' {', v_crlf, ' "label": "周日",', v_crlf, ' "value": "1"', v_crlf, ' }', v_crlf, ' ]', v_crlf, ' }' ); ELSEIF p_FieldObject = 'cycle-months' THEN SET v_x = 1; SET v_tmp2 = ''; WHILE v_x <= 31 DO SET v_tmp2 = CONCAT( v_tmp2, ' {', v_crlf, ' "value": ', v_x, ',', v_crlf, ' "label": "', IF(v_x < 10, '0', ''), v_x, '"', v_crlf, ' }', IF(v_x = 31, '', ','), v_crlf ); SET v_x = v_x + 1; END WHILE; SET v_comps = CONCAT( ' {', v_crlf, ' "label": "', p_FieldCN, '",', v_crlf, ' "type": "list-select",', v_crlf, ' "name": "', p_FieldName, '",', v_crlf, ' "size": "md",', v_crlf, ' "visibleOn": "this.', IFNULL(v_frequency, ''), ' == \\"month\\"",', v_crlf, ' "maxLength": 31,', v_crlf, ' "clearable": true,', v_crlf, ' "multiple": true,', v_crlf, ' "extractValue": true,', v_crlf, ' "options": [', v_crlf, v_tmp2, ' ]', v_crlf, ' }' ); ELSEIF p_FieldObject IN ('cycle-startdate', 'cycle-enddate') THEN SELECT visibleOn INTO v_visibleOn FROM zen_wizard_jsondata WHERE uuid = p_uuid AND rowid = p_rowid; -- 動態顯式否 IF IFNULL(v_visibleOn, '') <> '' THEN SET v_pos = LOCATE(',', v_visibleOn); IF v_pos > 0 THEN SET v_vKey = SUBSTRING(v_visibleOn, 1, v_pos - 1); SET v_vVal = SUBSTRING(v_visibleOn, v_pos + 1, 100); END IF; END IF; SET v_comps = CONCAT( ' {', v_crlf, ' "type": "input-date",', v_crlf, ' "name": "', p_FieldName, '",', v_crlf, ' "label": "', p_FieldCN, '",', v_crlf, ' "visibleOn": "this.', v_vKey, ' != \\"', v_vVal, '\\"",', v_crlf, ' "format": "YYYY-MM-DDTHH:mm:ss.SSSZ"', v_crlf, ' }', v_crlf ); END IF; SET v_json_insert = v_comps; SET v_json_update = v_comps; SET v_json_view = v_comps; -- Grid View 內如果要顯示, 應該只能用 text SET v_json_gridview = CONCAT( ' {', v_crlf, ' "type": "text",', v_crlf, ' "name": "', p_FieldName, '",', v_crlf, ' "label": "', p_FieldCN, '"', v_crlf, ' }' ); -- 寫入暫存 Table (zen_wizard_jsondata) UPDATE zen_wizard_jsondata SET json_insert = v_json_insert WHERE uuid = p_uuid AND rowid = p_rowid; UPDATE zen_wizard_jsondata SET json_update = v_json_update WHERE uuid = p_uuid AND rowid = p_rowid; UPDATE zen_wizard_jsondata SET json_gridview = v_json_gridview WHERE uuid = p_uuid AND rowid = p_rowid; UPDATE zen_wizard_jsondata SET json_view = v_json_view WHERE uuid = p_uuid AND rowid = p_rowid; END // DELIMITER ;