23 Commits

Author SHA1 Message Date
d2f8f255e5 feat(i18n): DataViewer弹窗title国际化
- show_filter_form: '搜索过滤' -> bricks.app.i18n._('Search Filter')
- delete_record: 'Delete conform' -> bricks.app.i18n._('Delete conform')
- delete_record: message -> bricks.app.i18n._('Are you sure to delete this record?')
- 修正原文typo: 'is record' -> 'this record'
2026-06-26 11:05:28 +08:00
Hermes Agent
8d0848fd9d fix: get_hidefields() use this.opts.data_params instead of this.data_params 2026-06-24 12:59:13 +08:00
Hermes Agent
acf3937b8d fix: process editable.binds via buildBind after Form construction (new Form bypasses widgetBuild) 2026-06-24 12:18:38 +08:00
Hermes Agent
be25feb077 feat: Tabular passes editable.binds to add/update/clone Form for cascading dropdowns 2026-06-24 10:42:21 +08:00
Hermes Agent
17d7e946e8 feat: InlineForm支持wrap折行,搜索表单默认开启多行布局 2026-06-22 16:54:18 +08:00
Hermes Agent
1e33a70627 fix: toolbar检查search_form而非data_filter导致filter按钮不显示 2026-06-22 16:10:08 +08:00
Hermes Agent
42e7214a86 feat: Tabular inline search form - hidden by default, toggle via toolbar filter button
- build_search_form_widget(): creates InlineForm from opts.search_form config
- toggle_search_form(): show/hide on filter toolbar button click
- search_form_submited(): saves values, hides form, re-renders with params
- merge_search_params(): includes search_form_values in backend requests
2026-06-22 13:27:21 +08:00
883d834272 fix: DataViewer兼容url和data_url两种写法 2026-06-13 18:53:55 +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
f8f02c63ab fix: 为 data_filter code 类型字段添加空选项
- 检查已有空选项避免重复
- 始终注入空选项确保可清空筛选
2026-06-02 17:26:02 +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
6d47eeb795 feat: data_filter support via toolbar search button + popup Form
When CRUD JSON has data_filter in params:
- Toolbar shows a '搜索' button (name:'filter')
- Click opens PopupWindow with Form widget
- Form fields are dynamically generated from data_filter definition
  - Extracts all {var, field, op} from AND/OR/NOT nested structure
  - Supports dropdown (uitype:'code') via browserfields.alters config
  - Customizable labels via filter_labels option
- Form submit collects values → stored in this.filter_values
- merge_search_params() sends data_filter (JSON string) + each var value
  to backend API as URL parameters
- Backend .dspy uses sqlor.filter.DBFilter.gen(ns) for SQL WHERE clause

Deleted previous inline DataFilter widget approach; replaced with
popup Form pattern that matches existing CRUD edit/add form UX.
2026-05-25 14:15:59 +08:00
431245648d feat: add DataFilter widget for data_filter support in DataViewer
- New bricks.DataFilter widget (bricks/data_filter.js): parses data_filter
  JSON definition, renders search input fields for each var parameter,
  supports AND/OR/NOT nested structures, and UiCode dropdowns for fields
  with browserfields.alters uitype=code configuration.
- Modified DataViewer (bricks/dataviewer.js): added build_datafilter_widget(),
  filter_event_handle(), filter_clear_handle() methods; extended
  merge_search_params() to send data_filter JSON + collected var values
  to the backend API.
- Updated build.sh: added data_filter.js to the JS concatenation list.

Backend integration: DataViewer sends data_filter (JSON string) and
each var's user input value as URL params. Backend .dspy uses
sqlor.filter.DBFilter to convert to SQL WHERE clause.
2026-05-25 14:02:58 +08:00
29b9023959 Add DataViewer search bar integration 2026-05-19 01:09:10 +08:00
4168eabcf7 bugfix 2025-09-26 09:07:47 +08:00
5a8e220dd9 bugfix 2025-09-26 09:02:46 +08:00
42186f339c bugfix 2025-09-26 08:54:57 +08:00
2e65d0f25b bugfix 2025-09-26 08:52:43 +08:00
7d540bde05 bugfix 2025-09-26 07:59:38 +08:00
f8b72a9885 bugfix 2025-09-26 07:57:03 +08:00
8a32666043 bugfix 2025-09-26 07:54:00 +08:00
faed420ff0 bugfix 2025-08-13 16:52:36 +08:00
86d1672251 first commit 2025-07-16 14:28:55 +08:00