package rigger import ( "fmt" "net/http" "strings" "ciyon/web/admin" . "ciyon/zciyon" ) func Menu_init(w http.ResponseWriter, r *http.Request) bool { post := NewCiyPost(w, r) rsuser, _ := admin.Verifyfast(CiyDB, post) if rsuser == nil { return false } csql := NewCiySQL("zc_icon") csql.Where("icontarget", 10) csql.Column("targetid as id,icon") iconrows, _, err := CiyDB.Get(csql) if err != nil { return ErrJSON(w, "遇到读取错误", err) } icons := Mapid2data(iconrows) csql = NewCiySQL("zc_menu") csql.Order("csort desc,id") rows, _, err := CiyDB.Get(csql) if err != nil { return ErrJSON(w, "遇到menu读取错误", err) } for i, row := range rows { if v, ok := icons[Toint(row["id"])]; ok { rows[i]["icon"] = v["icon"] } } ret := map[string]any{} ret["list"] = rows if post.Getbool("field") { field, fshow := CiyDB.GetField(csql) FieldAdd(&field, &fshow, -1, "_btn", "操作") FieldAdd(&field, &fshow, 2, "demo", "原型") FieldAdd(&field, &fshow, 1, "icon", "|图标|") field["url"]["thwidth"] = "20em" field["csort"]["thwidth"] = "5em" ret["fshow"] = fshow ret["field"] = field } if post.Getbool("once") { once := map[string]any{} input := make([]map[string]string, 0) input = append(input, map[string]string{ "form": "name", "type": "input", "name": "名称", "prop": ` style="width:8em;"`, }) input = append(input, map[string]string{ "form": "url", "type": "input", "name": "链接", "prop": ` style="width:12em;"`, }) once["input"] = input ret["once"] = once } return SuccJSON(w, ret) } func Menu_update(w http.ResponseWriter, r *http.Request) bool { post := NewCiyPost(w, r) _, userid := admin.Verifyfast(CiyDB, post) if userid == 0 { return false } if admin.Nopower(CiyDB, userid, "p903u") { return ErrJSON(w, "您未被授权操作") } id := post.Getint("id") name := post.Get("name") if name == "" { return ErrJSON(w, "请填写菜单名称") } upid := post.Getint("upid") csort := post.Getint("csort") isuse := post.Getint("isuse") csql := NewCiySQL("zc_menu") csql.Where("id", id) datarow, err := CiyDB.Getone(csql) if err != nil { return ErrJSON(w, "数据不存在", err) } demo := "" url := "" urldb := "" pow := "" csql = NewCiySQL("zc_menu") csql.Where("upid", id) downcnt := Toint(CiyDB.Get1(csql)) if downcnt == 0 { url = post.Get("url", CIYPOST_ALLOW_ALL) urldb = url demo = post.Get("demo") if demo != "" { if demo[0] != ':' && demo[0] != 'a' && demo[0] != 'm' && demo[0] != 'c' { return ErrJSON(w, "原型前缀错误,支持[:acm]") } urldb += "~" + demo } pow = post.Get("pow") } err = CiyDB.Tran(func() error { updata := map[string]any{} updata["name"] = name updata["isuse"] = isuse updata["upid"] = upid updata["csort"] = csort updata["url"] = urldb updata["pow"] = pow csql = NewCiySQL("zc_menu") csql.Where("id", id) _, err = CiyDB.Update(csql, updata) if err != nil { return fmt.Errorf("更新失败:%v", err) } admin.SaveLogDB(CiyDB, "zc_menu", datarow, updata) return nil }) if err != nil { return ErrJSON(w, "事务"+err.Error()) } ret := map[string]any{} ret["url"] = url ret["demo"] = demo ret["pow"] = pow return SuccJSON(w, ret) } func Menu_del(w http.ResponseWriter, r *http.Request) bool { post := NewCiyPost(w, r) _, userid := admin.Verifyfast(CiyDB, post) if userid == 0 { return false } if admin.Nopower(CiyDB, userid, "p903d") { return ErrJSON(w, "您未被授权操作") } ids := post.Get("ids") if ids == "" { return ErrJSON(w, "请选择至少一条") } csql := NewCiySQL("zc_menu") csql.Where("id in", ids) rows, _, err := CiyDB.Get(csql) if err != nil { return ErrJSON(w, "遇到读取错误", err) } vids := make([]int, 0) err = CiyDB.Tran(func() error { for _, row := range rows { delid := Toint(row["id"]) if delid >= 10 { Delcheck(CiyDB, delid, "zc_menu", "upid", Tostr(row["name"])) } Delme(CiyDB, delid, "zc_menu") admin.SaveLogDB(CiyDB, "zc_menu", row, nil) vids = append(vids, delid) } return nil }) if err != nil { return ErrJSON(w, "事务"+err.Error()) } ret := map[string]any{} ret["ids"] = vids return SuccJSON(w, ret) } func Menu_modifyupid(w http.ResponseWriter, r *http.Request) bool { post := NewCiyPost(w, r) _, userid := admin.Verifyfast(CiyDB, post) if userid == 0 { return false } if admin.Nopower(CiyDB, userid, "p903u") { return ErrJSON(w, "您未被授权操作") } id := post.Getint("id") newupid := post.Getint("newupid") csql := NewCiySQL("zc_menu") csql.Where("id", id) datarow, err := CiyDB.Getone(csql) if err != nil { return ErrJSON(w, "数据不存在", err) } err = CiyDB.Tran(func() error { updata := map[string]any{} updata["url"] = "" updata["pow"] = "" csql = NewCiySQL("zc_menu") csql.Where("id", newupid) _, err = CiyDB.Update(csql, updata) if err != nil { return fmt.Errorf("更新new失败:%v", err) } updata = map[string]any{} updata["upid"] = newupid csql = NewCiySQL("zc_menu") csql.Where("id", id) _, err = CiyDB.Update(csql, updata) if err != nil { return fmt.Errorf("更新id失败:%v", err) } admin.SaveLogDB(CiyDB, "zc_menu", datarow, updata) return nil }) if err != nil { return ErrJSON(w, "事务"+err.Error()) } return SuccJSON(w) } func Menu_multiadd(w http.ResponseWriter, r *http.Request) bool { post := NewCiyPost(w, r) _, userid := admin.Verifyfast(CiyDB, post) if userid == 0 { return false } if admin.Nopower(CiyDB, userid, "p903u") { return ErrJSON(w, "您未被授权操作") } upid := post.Getint("upid") multi := strings.Split(post.Get("multi"), "\n") cnt := 0 err := CiyDB.Tran(func() error { for _, m := range multi { if m == "" { continue } ms := strings.Split(m, "~") name := strings.TrimSpace(ms[0]) url := "" pow := "" if len(ms) > 1 { url = strings.TrimSpace(ms[1]) } if len(ms) > 2 { pow = strings.TrimSpace(ms[2]) } updata := map[string]any{} updata["name"] = name updata["url"] = url updata["pow"] = pow updata["isuse"] = 1 updata["upid"] = upid updata["csort"] = 10 csql := NewCiySQL("zc_menu") _, err := CiyDB.Insert(csql, updata) if err != nil { return fmt.Errorf("新增失败:%v", err) } cnt++ admin.SaveLogDB(CiyDB, "zc_menu", nil, updata) } return nil }) if err != nil { return ErrJSON(w, "事务"+err.Error()) } if cnt == 0 { return ErrJSON(w, "没有任何新增") } updata := map[string]any{} updata["url"] = "" updata["pow"] = "" csql := NewCiySQL("zc_menu") csql.Where("id", upid) _, err = CiyDB.Update(csql, updata) if err != nil { return ErrJSON(w, "更新upid失败:"+err.Error()) } return SuccJSON(w) } func Menu_seticon(w http.ResponseWriter, r *http.Request) bool { post := NewCiyPost(w, r) _, userid := admin.Verifyfast(CiyDB, post) if userid == 0 { return false } if admin.Nopower(CiyDB, userid, "p903u") { return ErrJSON(w, "您未被授权操作") } id := post.Getint("id") svg := post.Get("svg", CIYPOST_ALLOW_ALL) if svg != "" && !strings.HasPrefix(svg, "