diff --git a/xls2ddl/xls2crud.py b/xls2ddl/xls2crud.py index 78e70b2..3d166b3 100644 --- a/xls2ddl/xls2crud.py +++ b/xls2ddl/xls2crud.py @@ -310,10 +310,18 @@ def build_filter_field_list(desc) -> list: modulename = getattr(desc, 'modulename', '') result = [] + # 构建 browserfields alters 映射(含 inline data) + alters_map = {} + if desc.browserfields and hasattr(desc.browserfields, 'get'): + alters_map = desc.browserfields.get('alters', {}) or {} + for var_name, field_info in var_field_map.items(): field_name = field_info['name'] field_title = field_info.get('title', field_name) field_uitype = field_info.get('uitype', 'str') + # browserfields alters 中的 uitype 优先 + if field_name in alters_map and alters_map[field_name].get('uitype'): + field_uitype = alters_map[field_name]['uitype'] field_def = { 'name': var_name, @@ -322,6 +330,18 @@ def build_filter_field_list(desc) -> list: 'cwidth': 15 } + # 从 alters 取 inline data 或 dataurl + if field_name in alters_map: + alter = alters_map[field_name] + if alter.get('data'): + field_def['data'] = alter['data'] + if alter.get('dataurl'): + field_def['dataurl'] = alter['dataurl'] + if alter.get('valueField'): + field_def['valueField'] = alter['valueField'] + if alter.get('textField'): + field_def['textField'] = alter['textField'] + if field_uitype == 'code' and field_name in codes_map: c = codes_map[field_name] ctable = c.table if isinstance(c, dict) else getattr(c, 'table', '')