209 lines
7.8 KiB
Plaintext
209 lines
7.8 KiB
Plaintext
DELIMITER //
|
|
|
|
CREATE OR REPLACE PROCEDURE zen_create_json_comps_others(
|
|
IN p_uuid VARCHAR(100),
|
|
IN p_FunctionTag VARCHAR(100),
|
|
IN p_code_id 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_fieldro VARCHAR(100),
|
|
IN p_fielddefault VARCHAR(100),
|
|
IN p_FieldDS VARCHAR(2),
|
|
IN p_FieldSH VARCHAR(1),
|
|
IN p_FieldCheckNull VARCHAR(2),
|
|
IN p_required VARCHAR(100),
|
|
IN p_query_type VARCHAR(1),
|
|
IN p_picker_tag VARCHAR(100),
|
|
IN p_fieldfm VARCHAR(100),
|
|
IN p_rowid INT
|
|
)
|
|
/*
|
|
function : amis Wizard 產生 json UI 的核心程式(每個 Component 有各自的 json UI 定義)
|
|
description: 本段 sp 主要是設定非 input-text 且非 picker/formule/transger 的 json 定義
|
|
後來發現, 除了特殊的元件要獨立的 sp 特別處理外, 一般元件可以都統一在 input-text 的 sp 加上一些判斷即可
|
|
Build Date : 2023/12/22
|
|
Modified : 2025/08/09 (轉換為 MariaDB 版本)
|
|
|
|
Modify History
|
|
Item Who Date Modify Docs
|
|
==== ========== ========== ================================================
|
|
1 Michael 2023/12/22 根據 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_cnt INT;
|
|
DECLARE v_tmp2, v_tmp3 VARCHAR(800);
|
|
DECLARE v_orgObj VARCHAR(100);
|
|
DECLARE v_fieldfm_new VARCHAR(20);
|
|
|
|
DECLARE v_blob_data TEXT;
|
|
DECLARE v_field_df TEXT;
|
|
DECLARE v_crlf VARCHAR(2);
|
|
|
|
SET v_crlf = CONCAT(CHAR(13), CHAR(10));
|
|
SET v_orgObj = p_FieldObject;
|
|
|
|
-- 调用 udf_create_json_comps_blob 函数
|
|
SET v_blob_data = udf_create_json_comps_blob(p_FieldObject, p_tblName, p_FieldName);
|
|
|
|
-- 以下新增考慮 default, Readonly(p_fielddefault, p_fieldro)
|
|
IF IFNULL(p_fieldro, '') = 'Y' AND LOCATE('"disabled"', v_blob_data) <= 0 THEN
|
|
SET v_blob_data = CONCAT(v_blob_data, ' "disabled": true,', v_crlf);
|
|
END IF;
|
|
|
|
-- option 是特殊的 select, 但還是 select
|
|
IF (p_FieldObject = 'options' OR p_FieldObject = 'options-add' OR p_FieldObject = 'mapping') THEN
|
|
SET p_FieldObject = 'select';
|
|
ELSEIF p_FieldObject = 'progress' OR p_FieldObject = 'link-file' OR p_FieldObject = 'link' THEN
|
|
SET p_FieldObject = 'input-text';
|
|
ELSEIF p_FieldObject = 'qr-code' THEN
|
|
SET p_FieldObject = 'input-text';
|
|
END IF;
|
|
|
|
/*
|
|
-- amis 的預設值機制較特殊, 因為 data domain 的定義方式, 所以要用 data: {} 來定義
|
|
-- ${ls:userid} 這類無法用 value 設定, 才必須用 data domain 設定, 且必須設定在 page 下
|
|
*/
|
|
SET v_field_df = '';
|
|
SET v_tmp3 = '';
|
|
|
|
IF IFNULL(p_fielddefault, '') <> '' THEN
|
|
IF SUBSTRING(p_fielddefault, 1, 1) <> '@' AND LOCATE('$', p_fielddefault) <= 0 THEN
|
|
IF SUBSTRING(p_fielddefault, 1, 1) = '#' THEN
|
|
-- 要考慮 add/update 的不同, 要修改 value 的設定內容
|
|
SET v_tmp2 = SUBSTRING(p_fielddefault, 2, 100);
|
|
SET v_field_df = CONCAT(' "value": "', '${', v_tmp2, '}",', v_crlf);
|
|
|
|
-- for 修改專用
|
|
SET v_tmp3 = CONCAT(' "value": "', '${', v_tmp2, '|isFalse:', p_FieldName, ':', v_tmp2, '}",', v_crlf);
|
|
ELSE
|
|
-- 因為 json 不能有 #{ 內容, 只會有 ls:user, 所以要判斷加入
|
|
IF SUBSTRING(p_fielddefault, 1, 3) = 'ls:' THEN
|
|
SET v_field_df = CONCAT(' "value": "', '${', p_fielddefault, '}",', v_crlf);
|
|
ELSE
|
|
SET v_field_df = CONCAT(' "value": "', p_fielddefault, '",', v_crlf);
|
|
END IF;
|
|
END IF;
|
|
|
|
-- 加入數字靠右的顯示(default=0 或 1 時加入設定) amis v1.3.x 後的新增功能
|
|
IF p_fielddefault = '0' OR p_fielddefault = '1' THEN
|
|
SET v_field_df = CONCAT(v_field_df, ' "align": "right",', v_crlf);
|
|
END IF;
|
|
END IF;
|
|
END IF;
|
|
|
|
IF p_FieldObject = 'input-datetime' THEN
|
|
SET v_field_df = CONCAT(v_field_df, ' "format": "YYYY-MM-DD HH:mm:ss.SSS",', v_crlf);
|
|
END IF;
|
|
|
|
IF p_FieldObject = 'input-date' THEN
|
|
SET v_field_df = CONCAT(v_field_df, ' "format": "YYYY-MM-DD",', v_crlf);
|
|
END IF;
|
|
|
|
IF p_FieldObject = 'input-time' THEN
|
|
SET v_field_df = CONCAT(v_field_df, ' "format": "HH:mm",', v_crlf);
|
|
END IF;
|
|
|
|
IF (p_FieldObject = 'input-number') THEN
|
|
-- 讀取設定
|
|
IF IFNULL(p_fieldfm, '') = '' THEN
|
|
SET p_fieldfm = 'd0';
|
|
END IF;
|
|
|
|
SET v_fieldfm_new = CONCAT('"${ls:sys@', p_fieldfm, '}"');
|
|
|
|
SET v_field_df = CONCAT(v_field_df,
|
|
-- ' "align": "right",', v_crlf,
|
|
' "precision": ', v_fieldfm_new, ',', v_crlf
|
|
);
|
|
END IF;
|
|
|
|
-- 新增
|
|
SET v_comps = CONCAT(
|
|
' {', v_crlf,
|
|
' "type": "', p_FieldObject, '",', v_crlf,
|
|
' "name": "', p_FieldName, '",', v_crlf,
|
|
v_field_df,
|
|
v_blob_data,
|
|
p_required, v_crlf,
|
|
' "label": "', p_FieldCN, '"', v_crlf,
|
|
' }'
|
|
);
|
|
|
|
SET v_json_insert = v_comps;
|
|
|
|
-- update: 加入判斷, 是否為 pk 欄位
|
|
-- PK 修改時不能編輯
|
|
SET v_field_df = v_tmp3;
|
|
|
|
-- 检查是否为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;
|
|
|
|
-- 怕重複設定 disabled
|
|
IF v_cnt > 0 AND LOCATE('"disabled"', v_field_df) <= 0 AND LOCATE('"disabled"', v_blob_data) <= 0 THEN
|
|
SET v_field_df = CONCAT(v_field_df, ' "disabled": true,', v_crlf);
|
|
END IF;
|
|
|
|
-- 只有修改狀態才要設定日期 format
|
|
-- 更新版本後會報錯, 應該是真的有輸入時間, 才需要特別加
|
|
IF (p_FieldObject = 'input-date' OR p_FieldObject = 'input-datetime') THEN
|
|
SET v_field_df = CONCAT(v_field_df, ' "format": "YYYY-MM-DDTHH:mm:ss.SSSZ",', v_crlf);
|
|
END IF;
|
|
|
|
IF p_FieldObject = 'input-time' THEN
|
|
SET v_field_df = CONCAT(v_field_df, ' "format": "HH:mm",', v_crlf);
|
|
END IF;
|
|
|
|
SET v_comps = CONCAT(
|
|
' {', v_crlf,
|
|
' "type": "', p_FieldObject, '",', v_crlf,
|
|
' "name": "', p_FieldName, '",', v_crlf,
|
|
v_field_df,
|
|
v_blob_data,
|
|
p_required, v_crlf,
|
|
' "label": "', p_FieldCN, '"', v_crlf,
|
|
' }'
|
|
);
|
|
|
|
SET v_json_update = v_comps;
|
|
|
|
-- 回復原值
|
|
SET p_FieldObject = v_orgObj;
|
|
|
|
-- 调用其他存储过程
|
|
CALL zen_create_json_comps_others_quickedit(
|
|
p_uuid, p_FunctionTag, p_FieldObject, p_tblName, p_pk, p_FieldName,
|
|
p_FieldCN, p_query_type, p_picker_tag, p_FieldSH, p_required, p_fieldfm, p_rowid
|
|
);
|
|
|
|
CALL zen_create_json_comps_others_view(
|
|
p_uuid, p_FieldObject, p_tblName, p_FieldName, p_FieldCN, p_fielddefault,
|
|
p_FieldDS, p_FieldCheckNull, p_query_type, p_fieldfm, p_rowid
|
|
);
|
|
|
|
CALL zen_create_json_comps_others_gridview(
|
|
p_uuid, p_FieldObject, p_tblName, p_FieldName, p_FieldCN, p_fielddefault,
|
|
p_FieldDS, p_FieldCheckNull, p_query_type, p_fieldfm, p_rowid
|
|
);
|
|
|
|
-- 寫入暫存 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;
|
|
END //
|
|
|
|
DELIMITER ; |