71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
package config
|
||
|
||
import "encoding/json"
|
||
|
||
const (
|
||
FormTypeText = "text" //文本输入框
|
||
FormTypeTextarea = "textarea" //多行文本
|
||
FormTypeRadio = "radio" //单选框
|
||
FormTypeCheckbox = "checkbox" //单选框
|
||
FormTypeSwitch = "switch" //开关
|
||
FormTypeJson = "json" //JSON输入框
|
||
)
|
||
|
||
type FormOption struct {
|
||
Name string `json:"name"` //选项名称
|
||
Value string `json:"value"` //选项值
|
||
}
|
||
|
||
type Form struct {
|
||
Type string `json:"type"` //表单类型
|
||
Name string `json:"name"` //表单名称
|
||
Key string `json:"key"` //表单KEY
|
||
Value string `json:"value"` //表单值
|
||
Help string `json:"help"` //表单提示
|
||
Options []*FormOption `json:"options"` //表单选项,radion和checkbox需要
|
||
}
|
||
|
||
func NewFroms(tplConfig, saveConfig string) ([]*Form, error) {
|
||
var forms []*Form
|
||
err := json.Unmarshal([]byte(tplConfig), &forms)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
var cfg map[string]string
|
||
err = json.Unmarshal([]byte(saveConfig), &cfg)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
if cfg == nil {
|
||
cfg = map[string]string{}
|
||
}
|
||
|
||
for _, form := range forms {
|
||
if _, ok := cfg[form.Key]; ok {
|
||
form.Value = cfg[form.Key]
|
||
}
|
||
}
|
||
return forms, err
|
||
}
|
||
|
||
func MergeConfig(oldConfig, newConfig string) (string, error) {
|
||
var oldCfg map[string]interface{}
|
||
var newCfg map[string]interface{}
|
||
json.Unmarshal([]byte(oldConfig), &oldCfg)
|
||
json.Unmarshal([]byte(newConfig), &newCfg)
|
||
if oldCfg == nil {
|
||
oldCfg = make(map[string]interface{})
|
||
}
|
||
if newCfg == nil {
|
||
newCfg = make(map[string]interface{})
|
||
}
|
||
|
||
for k, v := range newCfg {
|
||
oldCfg[k] = v
|
||
}
|
||
|
||
res, _ := json.Marshal(oldCfg)
|
||
return string(res), nil
|
||
}
|