DELIMITER // CREATE OR REPLACE PROCEDURE zen_create_json_comps_others_quickedit( IN p_uuid VARCHAR(100), IN p_FunctionTag VARCHAR(100), IN p_FieldObject VARCHAR(100), IN p_tblName VARCHAR(100), IN p_pk VARCHAR(100), IN p_FieldName VARCHAR(100), IN p_FieldCN NVARCHAR(100), IN p_query_type VARCHAR(1), IN p_picker_tag VARCHAR(100), IN p_FieldSH VARCHAR(1), IN p_required VARCHAR(100), IN p_fieldfm VARCHAR(100), IN p_rowid INT ) /* function : amis Wizard 產生 json UI 的核心程式(每個 Component 有各自的 json UI 定義) description: 本段 sp 主要是設定 input-text 中 view 部分的 json 定義(實在是太長了) 後來發現, 除了特殊的元件要獨立的 sp 特別處理外, 一般元件可以都統一在 input-text 的 sp 加上一些判斷即可 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_ip VARCHAR(200); DECLARE v_db VARCHAR(200); DECLARE v_tmp2, v_tmp3 VARCHAR(800); DECLARE v_gridType VARCHAR(100); DECLARE v_blob_data TEXT; DECLARE v_field_df TEXT; DECLARE v_crlf VARCHAR(2); DECLARE v_qEdit TEXT; DECLARE v_cnt INT; SET v_crlf = CONCAT(CHAR(13), CHAR(10)); SET v_ip = '${ls:base_ip}'; SET v_db = '${ls:base_db}'; -- for SingleGrid (Use quitEdit to Edit) -- PK 不得編輯, 要判斷 required SET v_qEdit = ''; -- 检查是否为PK字段 SELECT COUNT(*) INTO v_cnt FROM ( SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(p_pk, ',', numbers.n), ',', -1) AS col FROM ( SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 ) numbers WHERE numbers.n <= LENGTH(p_pk) - LENGTH(REPLACE(p_pk, ',', '')) + 1 ) AS split_pk WHERE col = p_FieldName; IF v_cnt <= 0 THEN SET v_gridType = 'text'; IF (p_FieldObject = 'select' OR p_FieldObject = 'options-add' OR p_FieldObject = 'options') THEN SET v_gridType = 'text'; SET v_qEdit = zen_get_keyvalue(p_tblName, p_FieldName); -- 新增允許臨時再前端新增輸入的選項 2022-10-01 Michael IF p_FieldObject = 'options-add' THEN SET v_qEdit = CONCAT( ' "creatable": true,', v_crlf, ' "addControls": [', v_crlf, ' {', v_crlf, ' "type": "text",', v_crlf, ' "name": "label",', v_crlf, ' "label": "選項標題"', v_crlf, ' },', v_crlf, ' {', v_crlf, ' "type": "text",', v_crlf, ' "name": "value",', v_crlf, ' "label": "選項值"', v_crlf, ' }', v_crlf, ' ],', v_crlf, v_qEdit ); END IF; -- option 是特殊的 select, 但還是 select SET p_FieldObject = 'select'; ELSEIF (p_FieldObject = 'radios') THEN SET v_gridType = 'text'; SET v_qEdit = zen_get_keyvalue(p_tblName, p_FieldName); ELSEIF (p_FieldObject = 'picker') THEN -- 待測試 2023/03/17(在 quickEdit 模式時,也能開窗查詢) SET v_gridType = 'text'; SET v_qEdit = zen_picker(p_picker_tag, p_FieldName, p_FieldCN, 'R', v_ip, v_db, p_FunctionTag); ELSEIF (p_FieldObject = 'input-number') THEN SET v_gridType = 'text'; -- 讀取設定 IF IFNULL(p_fieldfm, '') = '' THEN SET p_fieldfm = 'd0'; END IF; SET p_fieldfm = CONCAT('"${ls:sys@', p_fieldfm, '}"'); SET v_qEdit = CONCAT( ' "align": "right",', v_crlf, ' "precision": ', p_fieldfm, ',' ); ELSEIF (p_FieldObject = 'input-datetime') THEN SET v_qEdit = CONCAT(v_qEdit, ' "format": "YYYY-MM-DD HH:mm:ss.SSS",', v_crlf); SET v_gridType = 'static-date'; ELSEIF (p_FieldObject = 'input-date') THEN SET v_qEdit = CONCAT(v_qEdit, ' "format": "YYYY-MM-DD",', v_crlf); SET v_gridType = 'static-date'; ELSEIF (p_FieldObject = 'checkbox') THEN SET v_qEdit = CONCAT(v_qEdit, ' "inputClassName": "p-0 w-6",', v_crlf, ' "trueValue": "Y",', v_crlf, ' "falseValue": "N",', v_crlf ); SET v_gridType = 'text'; END IF; SET v_qEdit = CONCAT( ' "quickEdit": {', v_crlf, ' "type": "', p_FieldObject, '",', v_crlf, p_required, v_qEdit, v_crlf, ' "mode": "inline"', v_crlf, ' },', v_crlf ); ELSE -- pk 設為唯獨 SET v_gridType = 'text'; END IF; IF p_FieldSH = 'Y' THEN SET v_comps = CONCAT( ' {', v_crlf, ' "type": "', v_gridType, '",', v_crlf, ' "name": "', p_FieldName, '",', v_crlf, v_qEdit, ' "label": "', p_FieldCN, '"', v_crlf, ' }' ); END IF; UPDATE zen_wizard_jsondata SET json_quickedit = v_comps WHERE uuid = p_uuid AND rowid = p_rowid; END // DELIMITER ;