使用命令行将sql表生成一个数据表单类型,如:
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`gender` tinyint(4) DEFAULT NULL,
`city` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`ip` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`phone` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;生成了:
package datamodel
import (
...
)
func GetUserTable(ctx *context.Context) (userTable table.Table) {
// config the table model.
userTable = table.NewDefaultTable(...)
...
formList := userTable.GetForm()
// set id editable is false.
formList.AddField("ID", "id", db.Int, form.Default).FieldNotAllowEdit()
formList.AddField("Ip", "ip", db.Varchar, form.Text)
formList.AddField("Name", "name", db.Varchar, form.Text)
...
return
}- 默认,只显示
Default - 普通文本
Text - 单选
SelectSingle - 密码
Password - 富文本
RichText - 文件
File - 双选择框
SelectBox - 多选
Select - icon下拉选择框
IconPicker - 时间选择框
Datetime - radio选择框
Radio - email输入框
Email - url输入框
Url - ip输入框
Ip - 颜色选择框
Color - 货币输入框
Currency - 数字输入框
Number
例子:
import (
...
"github.com/GoAdminGroup/go-admin/template/types/form"
...
)
func GetxxxTable(ctx *context.Context) table.Table {
formList.AddField("ID", "id", db.Int, form.Default)
}// 添加一个字段,字段标题为 ID,字段名为 id,字段类型为 int,表单类型为 Default
formList.AddField("ID", "id", db.Int, form.Default)
// 添加第二个字段,字段标题为 Ip,字段名为 ip,字段类型为 varchar,表单类型为 Text
formList.AddField("Ip", "ip", db.Varchar, form.Text)
// 添加第三个字段,一个sql表不存在的字段
formList.AddField("Custom", "custom", db.Varchar, form.Text)formList.AddField("header", "header", db.Varchar, form.Text).FieldDefault("header")formList.AddField("header", "header", db.Varchar, form.Text).FieldMust()formList.AddField("header", "header", db.Varchar, form.Text).FieldHelpMsg("长度应该大于5")formList.AddField("id", "id", db.Int, form.Default).FieldNotAllowEdit()formList.AddField("id", "id", db.Int, form.Default).FieldNotAllowAdd()formList.HideContinueEditCheckBox()formList.HideContinueNewCheckBox()formList.HideBackButton()formList.HideResetButton()formList.SetPostValidator(func(values form2.Values) error {
if values.Get("sex") != "women" && values.Get("sex") != "men" {
return fmt.Errorf("error info")
}
return nil
})formList.AddField("链接", "url", db.Varchar, form.Text).
FieldPostFilterFn(func(value types.PostFieldModel) interface{} {
return "http://xxxx.com/" + value.Get("url")
})插入字段如果需要为NULL
formList.AddField("avatar", "avatar", db.Varchar, form.Text).
FieldPostFilterFn(func(value types.PostFieldModel) interface{} {
if value.Value == "" {
return sql.NullString{}
}
return value.Value
})// 限制长度
formList.AddField("链接", "url", db.Varchar, form.Text).FieldLimit(limit int)
// 去除空格
formList.AddField("链接", "url", db.Varchar, form.Text).FieldTrimSpace()
// 截取
formList.AddField("链接", "url", db.Varchar, form.Text).FieldSubstr(start int, end int)
// 标题
formList.AddField("链接", "url", db.Varchar, form.Text).FieldToTitle()
// 大写
formList.AddField("链接", "url", db.Varchar, form.Text).FieldToUpper()
// 小写
formList.AddField("链接", "url", db.Varchar, form.Text).FieldToLower()
// xss过滤
formList.AddField("链接", "url", db.Varchar, form.Text).FieldXssFilter()如果你的表单插入操作与新增操作比较复杂,框架不能满足,那么你可以完全重写并取代框架的插入操作。
// 取代新增函数
formList.SetInsertFn(func(values form2.Values) error {
// values 为传入的表单参数
})
// 取代更新函数
formList.SetUpdateFn(func(values form2.Values) error {
// values 为传入的表单参数
// 这里需要区分是否为一个字段更新的情景(表格字段更新),通过values的参数区分:
// values.IsSingleUpdatePost() 返回 1 则为表格字段更新
}) 按时间顺序如下:
- FormPanel.Validator 数据验证
- FormPanel.PreProcessFn 数据预处理
- FormPanel.UpdateFn/InsertFn 数据更新/插入
- FormPanel.PostHook Hook函数
对应设置接口:
formList.SetPostValidator()
formList.SetPreProcessFn()
formList.SetPostHook()
formList.SetUpdateFn()
formList.SetInsertFn()在 PostHook 中,通过 values.PostError() 去拿到更新或插入的结果。