diff --git a/widgets/component/types.go b/widgets/component/types.go index 76afcadc..a88b88e3 100644 --- a/widgets/component/types.go +++ b/widgets/component/types.go @@ -24,6 +24,7 @@ type InstanceDSL struct { // ActionDSL the component action DSL type ActionDSL struct { Title string `json:"title,omitempty"` + Width int `json:"width,omitempty"` Icon string `json:"icon,omitempty"` Style string `json:"style,omitempty"` Props PropsDSL `json:"props,omitempty"` diff --git a/widgets/table/fields.go b/widgets/table/fields.go index c987f8d3..cddfbad1 100644 --- a/widgets/table/fields.go +++ b/widgets/table/fields.go @@ -2,6 +2,7 @@ package table import ( "fmt" + "strings" "github.com/yaoapp/gou" "github.com/yaoapp/yao/widgets/field" @@ -84,21 +85,37 @@ func (fields *FieldsDSL) Xgen(layout *LayoutDSL) (map[string]interface{}, error) tables := map[string]interface{}{} if layout.Filter != nil { for i, f := range layout.Filter.Columns { - field, has := fields.Filter[f.Name] + name := f.Name + field, has := fields.Filter[name] if !has { + if strings.HasPrefix(f.Name, "::") { + name = fmt.Sprintf("$L(%s)", strings.TrimPrefix(f.Name, "::")) + if field, has = fields.Filter[name]; has { + filters[name] = field.Map() + continue + } + } return nil, fmt.Errorf("fields.filter.%s not found, checking layout.filter.columns.%d.name", f.Name, i) } - filters[f.Name] = field.Map() + filters[name] = field.Map() } } if layout.Table != nil { for i, f := range layout.Table.Columns { - field, has := fields.Table[f.Name] + name := f.Name + field, has := fields.Table[name] if !has { + if strings.HasPrefix(f.Name, "::") { + name = fmt.Sprintf("$L(%s)", strings.TrimPrefix(f.Name, "::")) + if field, has = fields.Table[name]; has { + tables[name] = field.Map() + continue + } + } return nil, fmt.Errorf("fields.table.%s not found, checking layout.table.columns.%d.name", f.Name, i) } - tables[f.Name] = field.Map() + tables[name] = field.Map() } } diff --git a/widgets/table/layout.go b/widgets/table/layout.go index 497efdf2..d66908f4 100644 --- a/widgets/table/layout.go +++ b/widgets/table/layout.go @@ -26,7 +26,16 @@ func (layout *LayoutDSL) BindModel(m *gou.Model, fields *FieldsDSL, option map[s layout.Filter = &FilterLayoutDSL{Columns: component.Instances{}} if hasForm { - layout.Filter.BtnAddText = "创建" + layout.Filter.Actions = component.Actions{ + { + Title: "::Create", + Icon: "icon-plus", + Width: 3, + Action: map[string]component.ParamsDSL{ + "Common.historyPush": {"pathname": fmt.Sprintf("/x/Form/%s/0/edit", formName)}, + }, + }, + } } max := 3 diff --git a/widgets/table/types.go b/widgets/table/types.go index 80af013a..a67fad75 100644 --- a/widgets/table/types.go +++ b/widgets/table/types.go @@ -112,8 +112,8 @@ type OperationImportDSL struct { // FilterLayoutDSL layout.filter type FilterLayoutDSL struct { - BtnAddText string `json:"btnAddText,omitempty"` - Columns component.Instances `json:"columns,omitempty"` + Actions component.Actions `json:"actions,omitempty"` + Columns component.Instances `json:"columns,omitempty"` } // ViewLayoutDSL layout.table