最近使用了GoAdminGroup/go-admin 搭建后台,创建项目很快,很方便,基本的内容后台管理功能都能实现。但是遇到了一个问题,就是使用 form.Multifile 的字段, 编辑时候,如果不上传新的文件,点击保存就会出现字段内容被清空的问题。
在 git issue 里面发现有人提出过,她那个是旧的版本, 新增后编辑直接不显示图片,作者给出了解决方案(https://github.com/GoAdminGroup/go-admin/issues/257),并且新版已经解决了新增后编辑不显示图片问题。
我现在的问题就是在他那个解决方案后面衍生出来的问题,具体原因应该渲染模版时候发生了一些错误,导致模版内容显示有误,然后保存时候没有正确将默认值发送到后台。问题但是不知道未来版本会不会修复。这里为了赶项目进度,又不想自己修改源码,用简单的方法解决下。
新增页面
编辑页面
解决方法
在更新前校验前台传过来的是不是空值,如果是空值,从数据库里面查询原来的值
formList.AddField("图片", "images", db.Varchar, form.Multifile).
FieldOptionExt(map[string]interface{}{
"maxFileCount": 10,
}).
FieldHelpMsg("图片比例请上传 15/9").
// 多图编辑消失问题,作者说修复了(https://github.com/GoAdminGroup/go-admin/issues/257),但是我这里不好使,有可能哪里配置错了,本人水平有限并没有在官网并找到示例
// 为了实现业务,只能在更新前校验前台传过来的是不是空值,如果是空值,从数据库里面查询原来的值
FieldPostFilterFn(func(value types.PostFieldModel) interface{} {
var str string
if value.Value == nil {
// 从数据库内获取原来的数据
images,err := db.WithDriver(globalConn).Table("toilet").Select("images").Where("id", "=", value.Row["id"]).First()
if err != nil {
return errors.New("数据库内没有这条消息")
}
return images["images"]
} else {
// 处理新上传的数据,拼接成 form.Multifile 可显示的字符串格式
images := value.Value
for i:=0; i<len(images); i++ {
str += images[i]
if i < len(images)-1 {
str += ","
}
}
return str
}
})