Files
SMANAGE/_api_backup/TempLateAPI/GERP/API/FormAPI/Columns.api
T
2026-06-16 11:55:14 +08:00

142 lines
5.1 KiB
Plaintext

from PDAPI import *
import TempLateAPI.GERP.API.FormAPI.FormData as FormData
__metadata__ = {
"route": "{DEFAULT_ROUTE}/<TableName>",
"methods": ["GET"],
"blueprint": "GERP",
"permission": 1.0,
"attributes": [],
"limit": "1 per second"
}
def HandleRequest(_CleanedData):
Table = FormData.GetTable(_CleanedData["params"]["TableName"])
if not Table: return {"code": 1, "msg": "找不到表格"}, 404
TableName = _CleanedData["params"]["TableName"]
columns = []
for item in Table.row:
field_name = item["Name"]
field_type = item.get("Type", "str")
groups = item.get("Groups", [])
title = FormData.get_field_display_name(TableName, field_name)
column_def = {
"field": field_name,
"title": title,
"width": "120px"
}
if "PrimaryKey" in groups:
column_def["primaryKey"] = True
column_def["hideInForm"] = True
column_def["editable"] = False
hide_key = f"{TableName}.{field_name}"
if hide_key in FormData.TABLE_HIDE_IN_FORM:
column_def["hideInForm"] = True
if "MechanicalItem" in groups:
column_def["hideInForm"] = True
column_def["editable"] = False
if field_type == "int":
column_def["type"] = "number"
elif field_type == "float":
column_def["type"] = "number"
elif field_type == "bool":
column_def["type"] = "switch"
elif field_type == "timestampstr":
column_def["sortable"] = True
column_def["width"] = "160px"
timestamp_format = item.get("TimestampFormat", "%Y-%m-%d %H:%M:%S")
if "HH:mm" in timestamp_format:
column_def["type"] = "datetime"
elif "HH:mm" not in timestamp_format and "%H" not in timestamp_format:
column_def["type"] = "date"
else:
column_def["type"] = "datetime"
elif field_type == "json":
column_def["type"] = "textarea"
elif field_type == "str":
textarea_key = f"{TableName}.{field_name}"
if textarea_key in FormData.TABLE_TEXTAREA_FIELDS:
column_def["type"] = "textarea"
elif field_type == "UUID":
fk_key = f"{TableName}.{field_name}"
fk_config = FormData.TABLE_FK_PICKER.get(fk_key)
if fk_config:
column_def["type"] = "entityPicker"
column_def["width"] = "320px"
column_def["codeTable"] = f"{TableName}.{field_name}"
column_def["entityPicker"] = {
"api": fk_config.get("api", ""),
"method": fk_config.get("method", "GET"),
"labelField": fk_config.get("labelField", "name"),
"valueField": fk_config.get("valueField", "id"),
"secondaryField": fk_config.get("secondaryField"),
"searchParam": fk_config.get("searchParam", "keyword"),
"resultPath": fk_config.get("resultPath", "data"),
"placeholder": f"输入{title}搜索...",
"codeTable": f"{TableName}.{field_name}",
}
else:
column_def["type"] = "uuid"
column_def["width"] = "280px"
column_def["editable"] = False
if item.get("Required", False):
column_def["required"] = True
if item.get("Unique", False):
column_def["unique"] = True
if item.get("PassEmpty", False):
column_def["passEmpty"] = True
if item.get("AllowList"):
column_def["type"] = "select"
allow_list = item["AllowList"]
translated_options = []
for opt in allow_list:
value = opt.get("value") if isinstance(opt, dict) else opt
label = FormData.get_code_display(TableName, field_name, value)
translated_options.append({
"value": value,
"label": label
})
column_def["options"] = translated_options
column_def["codeTable"] = f"{TableName}.{field_name}"
if item.get("Length"):
column_def["length"] = item["Length"]
if item.get("MinLen") is not None:
column_def["minLength"] = item["MinLen"]
if item.get("MaxLen") is not None:
column_def["maxLength"] = item["MaxLen"]
if item.get("Default") is not None:
column_def["defaultValue"] = item["Default"]
if field_name in ["create_time", "update_time", "created_at", "updated_at"]:
column_def["sortable"] = True
if item.get("Regex"):
column_def["pattern"] = item["Regex"]
placeholder_key = f"{TableName}.{field_name}"
custom_placeholder = FormData.TABLE_FIELD_PLACEHOLDER.get(placeholder_key)
if custom_placeholder:
column_def["placeholder"] = custom_placeholder
columns.append(column_def)
return {"code": 0, "columns": columns}, 200