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 }