/** * 系统配置-控制器 * @author * @since 2021/11/15 * @File : config_web */ package controller import ( "encoding/json" "github.com/gin-gonic/gin" "gitlab.52pay.top/go/easygoadmin/app/model" "gitlab.52pay.top/go/easygoadmin/utils" "gitlab.52pay.top/go/easygoadmin/utils/common" "gitlab.52pay.top/go/easygoadmin/utils/gconv" "gitlab.52pay.top/go/easygoadmin/utils/gstr" "gitlab.52pay.top/go/easygoadmin/utils/response" "net/http" "regexp" "strings" "time" ) // 控制器管理对象 var ConfigWeb = new(configWebCtl) type configWebCtl struct{} func (c *configWebCtl) Index(ctx *gin.Context) { if ctx.Request.Method == "POST" { // 返回结果 if utils.AppDebug() { ctx.JSON(http.StatusOK, common.JsonResult{ Code: -1, Msg: "演示环境,暂无权限操作", }) return } // key:string类型,value:interface{} 类型能存任何数据类型 var jsonObj map[string]interface{} data, _ := ctx.GetRawData() json.Unmarshal(data, &jsonObj) // 遍历处理数据源 for key, val := range jsonObj { // 参数处理 if key == "checkbox" { // 复选框 item := gstr.Split(key, "__") // KEY值 key = item[0] } else if strings.Contains(key, "upimage") { // 单图上传 item := gstr.Split(key, "__") // KEY值 key = item[0] if strings.Contains(gconv.String(val), "temp") { image, _ := utils.SaveImage(gconv.String(val), "config") // 赋值给参数 val = image } else { // 赋值给参数 val = gstr.Replace(gconv.String(val), utils.ImageUrl(), "") } } else if strings.Contains(key, "upimgs") { // 多图上传 item := gstr.Split(key, "__") // KEY值 key = item[0] // 图片地址处理 urlArr := gstr.Split(gconv.String(val), ",") list := make([]string, 0) for _, v := range urlArr { if strings.Contains(gconv.String(v), "temp") { image, _ := utils.SaveImage(v, "config") list = append(list, image) } else { image := gstr.Replace(v, utils.ImageUrl(), "") list = append(list, image) } } // 数组转字符串,逗号分隔 val = strings.Join(list, ",") } else if strings.Contains(key, "ueditor") { item := gstr.Split(key, "__") // KEY值 key = item[0] // 富文本处理(待完善) // TODO... } var info model.ConfigData has, err := utils.XormDb.Where("code=?", key).Get(&info) if err != nil || !has { continue } // 更新记录 entity := &model.ConfigData{Id: info.Id} entity.Value = gconv.String(val) entity.UpdateUser = utils.Uid(ctx) entity.UpdateTime = time.Now().Unix() entity.Update() } // 返回结果 ctx.JSON(http.StatusOK, common.JsonResult{ Code: 0, Msg: "保存成功", }) return } // 配置ID configId := ctx.Query("configId") if configId == "" { configId = "1" } // 获取配置列表 configData := make([]model.Config, 0) utils.XormDb.Where("mark=1").Find(&configData) configList := make(map[string]string) for _, v := range configData { configList[gconv.String(v.Id)] = v.Name } // 获取配置项列表 itemData := make([]model.ConfigData, 0) utils.XormDb.Where("config_id=? and status=1 and mark=1", configId).OrderBy("sort asc").Find(&itemData) itemList := make([]map[string]interface{}, 0) for _, v := range itemData { item := make(map[string]interface{}) item["id"] = v.Id item["title"] = v.Title item["code"] = v.Code item["value"] = v.Value item["type"] = v.Type if v.Type == "checkbox" { // 复选框 re := regexp.MustCompile(`\r?\n`) list := gstr.Split(re.ReplaceAllString(v.Options, "|"), "|") optionsList := make(map[string]string) for _, val := range list { re2 := regexp.MustCompile(`:|:|\s+`) item := gstr.Split(re2.ReplaceAllString(val, "|"), "|") optionsList[item[0]] = item[1] } item["optionsList"] = optionsList } else if v.Type == "radio" { // 单选框 re := regexp.MustCompile(`\r?\n`) list := gstr.Split(re.ReplaceAllString(v.Options, "|"), "|") optionsList := make(map[string]string) for _, v := range list { re2 := regexp.MustCompile(`:|:|\s+`) item := gstr.Split(re2.ReplaceAllString(v, "|"), "|") optionsList[item[0]] = item[1] } item["optionsList"] = optionsList } else if v.Type == "select" { // 下拉选择框 re := regexp.MustCompile(`\r?\n`) list := gstr.Split(re.ReplaceAllString(v.Options, "|"), "|") optionsList := make(map[string]string) for _, v := range list { re2 := regexp.MustCompile(`:|:|\s+`) item := gstr.Split(re2.ReplaceAllString(v, "|"), "|") optionsList[item[0]] = item[1] } item["optionsList"] = optionsList } else if v.Type == "image" { // 单图片 item["value"] = utils.GetImageUrl(v.Value) } else if v.Type == "images" { // 多图片 list := gstr.Split(v.Value, ",") itemList := make([]string, 0) for _, v := range list { // 图片地址 item := utils.GetImageUrl(v) itemList = append(itemList, item) } item["value"] = itemList } itemList = append(itemList, item) } // 渲染模板 response.BuildTpl(ctx, "configweb_index.html").WriteTpl(gin.H{ "configId": configId, "configList": configList, "itemList": itemList, }) }