571 Commits

Author SHA1 Message Date
Hermes Agent
37f46ed1bd feat: Form validation — rules-based field validation with inline error display
- FormBase: added validate_rules(), _check_rule(), show_field_error(), clear_all_errors()
- FieldGroup: creates hidden error Text widget for fields with rules
- validation(): calls validate_rules() before submit, blocks on failure
- CSS: .inputbox.field-error red border, .field-error-msg red text
- Supported rule types: required, minlength, maxlength, min, max, pattern, email, number
2026-06-18 17:22:11 +08:00
Hermes Agent
e7ae56e142 fix: DynamicColumn移动端默认2列
- mobile_cols默认值从1改为2
- 已使用bricks.is_mobile()判断移动设备
2026-06-18 16:48:24 +08:00
Hermes Agent
579d60b49b fix: DynamicColumn子控件宽度覆盖为100%+修复间隙和覆盖问题
- _fix_children: MutationObserver监听子控件添加,强制width:100%+minWidth:0
- 解决子控件cwidth设置的固定像素宽度超出grid cell导致重叠
- align-items:start防止grid items垂直拉伸
- col_cgap默认值统一为1(原构造函数设0.5但set_column_width用0.1)
- 移除console.log调试输出
2026-06-18 16:43:48 +08:00
Hermes Agent
0686a9ae86 fix: TextBase空值undefined渲染为空字符串
- set_attrs: innerHTML兜底空字符串
- set_otext: otxt空值兜底
- set_text: text空值兜底
2026-06-18 14:02:20 +08:00
Hermes Agent
306f5cb1b9 fix: Tabular空值显示undefined改为空字符串 2026-06-18 13:54:53 +08:00
Hermes Agent
6f5e8fde9d fix: password字段表头显示title而非******
- uitype.js: ViewBuilder检查user_data区分表头/数据行
- uitypesdef.js: passwordViewBuilder无rec时显示label/name
- views.js: ViewPassword无row_data时显示value/label/name
2026-06-18 11:41:47 +08:00
Hermes Agent
a29fe0e923 fix: ApiDoc _render中sections未定义改为all_sections 2026-06-17 15:33:31 +08:00
Hermes Agent
5ebfa0d56c fix: bricks.error不存在的函数调用改为console.error (ApiDoc) 2026-06-17 15:23:03 +08:00
883d834272 fix: DataViewer兼容url和data_url两种写法 2026-06-13 18:53:55 +08:00
84e1ebd1f0 fix: InlineForm codes→data映射给UiCode 2026-06-13 18:43:28 +08:00
abfb99aee8 feat: InlineForm控件 - 水平单行表单,支持自定义提交按钮样式 2026-06-13 18:32:06 +08:00
79cfc005bb feat: filter form passes valueField/textField to UiCode
get_filter_fields() now:
- Copies valueField/textField from alter config to filter field
- Uses custom valueField for empty option check and injection
- Ensures filter form and add/edit form use identical code-type config
2026-06-12 11:40:55 +08:00
1c09faf210 Revert "fix: increase model card spacing - margin 4px -> 8px"
This reverts commit 1434dffb49cb7b515e7d12679e5c1a6b777e1d50.
2026-06-12 11:18:55 +08:00
1434dffb49 fix: increase model card spacing - margin 4px -> 8px 2026-06-12 11:17:25 +08:00
a0cff97091 fix: LlmModel card spacing - add cwidth/cheight/margin to prevent overlap
render_title: padding 15px -> cwidth:3, cheight:3, padding:4px, margin:2px, css:clickable
2026-06-12 11:05:58 +08:00
577df9bac9 feat: LlmModel sends llmcatelogid in inference requests
- bricks/llm.js: inputdata2uploaddata includes opts.llmcatelogid when present
2026-06-11 19:22:19 +08:00
9059a8fa89 bugfix 2026-06-10 15:50:30 +08:00
645e26c0c8 bugfix 2026-06-10 15:48:26 +08:00
1b1b87236a bugfix 2026-06-10 15:26:31 +08:00
78a0e3a791 bugfix 2026-06-10 15:18:00 +08:00
1031c77dda bugfix 2026-06-10 15:05:39 +08:00
b37d2811da bugfix 2026-06-03 13:00:27 +08:00
6fe0919f8a fix: load api_doc.css in header.tmpl, revert JS hack 2026-06-02 20:28:36 +08:00
c8941a5b84 fix: ApiDoc widget self-loads its CSS for sidebar layout 2026-06-02 20:24:22 +08:00
f8f02c63ab fix: 为 data_filter code 类型字段添加空选项
- 检查已有空选项避免重复
- 始终注入空选项确保可清空筛选
2026-06-02 17:26:02 +08:00
a2a80ac922 docs: update api_doc.js dependency comment to reference local 3parties/marked.js 2026-06-02 17:15:31 +08:00
d41c386acf feat: add ApiDoc widget - renders API docs from markdown with sidebar nav, method badges, code copy 2026-06-02 17:08:42 +08:00
d67bd84d4d fix: normalize full URLs to relative paths in Router
When ?page= param contains a full URL (e.g. https://domain/module/page.ui),
normalize it to relative path (/module/page.ui) before loading.
Applied in _restore, _loadInto, navigate, and _onReplace.
2026-06-01 23:41:50 +08:00
e5981ba447 style: redesign add/delete icons for modern UI consistency
Replace add.svg and delete.svg with minimalist design:
- 1.5px stroke width for thin, elegant appearance
- Round line caps and joins for smooth edges
- Consistent style across both icons
- Uses currentColor for theme compatibility
2026-06-01 15:40:38 +08:00
74db534e41 chore: ignore NFS temp files 2026-06-01 15:29:35 +08:00
6aaac666d5 chore: remove stale NFS temp file from repo 2026-06-01 15:29:29 +08:00
8109292f8a fix: UiText auto-height on setValue when element not yet rendered
Add requestAnimationFrame deferred handleInput() call in setValue()
to ensure textarea height recalculates after DOM render, fixing
single-line display when value is set during Form build phase.
2026-06-01 15:26:57 +08:00
d1661e7ab6 bugfix 2026-06-01 12:09:00 +08:00
88c6fd3138 bugfix 2026-06-01 11:40:38 +08:00
b46c82b402 bugfix 2026-05-31 22:48:54 +08:00
bd706943ce bugfix 2026-05-31 22:48:23 +08:00
b43d2e7cbd fix: codeViewBuilder支持DataRow调用(rec为undefined时用desc.user_data)并增加field_name_text查找逻辑 2026-05-31 15:59:17 +08:00
f49994cea7 fix: Menu widget now triggers Router._onReplace for SPA URL tracking
Menu widget's menu_clicked() was bypassing the standard _buildWidget
path in bricks.js, so Router._onReplace was never called when navigating
via sidebar menu items. This caused:
- Browser URL not updating on menu clicks
- F5 refresh not restoring the current page

Added Router hook after t.add_widget(w) in menu_clicked(), matching
the same pattern used in bricks.js _buildWidget.
2026-05-31 12:32:17 +08:00
216221f67f 暗色主题: 菜单图标添加filter:invert(1)自适应 2026-05-31 11:22:07 +08:00
ebc8959f4c fix: 暗色主题输入框背景色优化 #1E293B → #0F172A
全局 inputbox 在 dark 主题下使用更深的背景色,与页面主色调协调
2026-05-30 14:32:21 +08:00
fe98b07466 chore: remove dist/ from git tracking, add to .gitignore 2026-05-30 13:47:28 +08:00
db1934fd1c fix: UiType.setValue typo vlaue -> value 2026-05-30 13:45:07 +08:00
81fd808d02 fix: data_filter form fields missing uitype and browserfields lookup
1. Default uitype to 'str' when no alter matches (text input)
2. Handle alter.uitype='select' by converting to code with inline data
3. Read browserfields from opts.row_options.browserfields (CRUD-generated
   UIs nest it under row_options, not at opts top level)
2026-05-30 01:18:55 +08:00
94a95b529b bugfix 2026-05-29 23:11:12 +08:00
fb718b6249 bugfix 2026-05-29 23:10:45 +08:00
1291f7fee3 fix: UiCode build_options uses valueField/textField fallback to 'value'/'text'
When valueField/textField are not explicitly set in opts, the auto-select
logic (line 1140) and nullable empty-option creation (lines 1144-1145) used
data[0][undefined] which returned undefined, causing:
- Single-option selects to show blank (auto-select failed)
- nullable empty options to have undefined keys

Now extracts vf/tf local variables with ||'value'/||'text' fallback at the
top of build_options(), used consistently throughout.
2026-05-29 23:03:52 +08:00
976fcbcc3b bugfix 2026-05-29 22:58:16 +08:00
a3f51f79fe bugfix 2026-05-29 22:56:57 +08:00
970f60e6f5 fix: add background-color to tabular-row-selected for visible selection highlight 2026-05-29 19:25:16 +08:00
ed95c8c88f debug: use console.log instead of bricks.debug for tabular click tracing 2026-05-29 13:58:42 +08:00