user.go 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595
  1. // user
  2. package admin
  3. import (
  4. "encoding/json"
  5. "jy/front"
  6. . "jy/mongodbutil"
  7. . "jy/util"
  8. "net/http"
  9. qu "qfw/util"
  10. "time"
  11. "github.com/gin-contrib/sessions"
  12. "github.com/gin-gonic/gin"
  13. "gopkg.in/mgo.v2/bson"
  14. "fmt"
  15. )
  16. func init() {
  17. Admin.GET("/index", func(c *gin.Context) {
  18. c.HTML(http.StatusOK, "index.html", nil)
  19. })
  20. Admin.GET("/user", func(c *gin.Context) {
  21. c.HTML(http.StatusOK, "user.html", gin.H{})
  22. })
  23. Admin.GET("/menu", func(c *gin.Context) {
  24. c.HTML(http.StatusOK, "menu.html", gin.H{})
  25. })
  26. Admin.GET("/infotype", func(c *gin.Context) {
  27. c.HTML(http.StatusOK, "class.html", gin.H{})
  28. })
  29. Admin.GET("/role", func(c *gin.Context) {
  30. c.HTML(http.StatusOK, "role.html", gin.H{})
  31. })
  32. Admin.GET("/role/menu", func(c *gin.Context) {
  33. role := c.Query("role")
  34. c.HTML(http.StatusOK, "rolemenu.html", gin.H{"role": role})
  35. })
  36. Admin.GET("/role/secondmenu", func(c *gin.Context) {
  37. role := c.Query("role")
  38. _id := c.Query("_id")
  39. c.HTML(http.StatusOK, "rolesecondmenu.html", gin.H{"role": role, "_id": _id})
  40. })
  41. Admin.GET("/secondmenu", func(c *gin.Context) {
  42. _id := c.Query("id")
  43. c.HTML(http.StatusOK, "secondmenu.html", gin.H{"_id": _id})
  44. })
  45. Admin.POST("/menu", Menu)
  46. Admin.POST("/menu/save", MenuSave)
  47. Admin.POST("/menu/data", MenuData)
  48. Admin.POST("/menu/searchbyid", MenuSearchById)
  49. Admin.POST("/menu/del", MenuDel)
  50. Admin.POST("/infotype/data", InfotypeData)
  51. Admin.POST("/fields/data", FieldsData)
  52. Admin.POST("/topclass/data", TopclassData)
  53. Admin.POST("/subclass/data", SubclassData)
  54. Admin.POST("/infotype/save", InfotypeSave)
  55. Admin.POST("/infotype/select", InfotypeSelect)
  56. Admin.POST("/infotype/del", InfotypeDel)
  57. Admin.POST("/role/menu/data", RoleMenuData)
  58. Admin.POST("/role/menu/save", RoleMenuSave)
  59. Admin.POST("/role/select", RoleSelect)
  60. Admin.POST("/role/secondmenu/data", RoleSecondMenuData)
  61. Admin.POST("/role/menu/del", RoleMenuDel)
  62. Admin.POST("/role/secondmenu/del", RoleSecondMenuDel)
  63. Admin.POST("/secondmenu/data", SecondMenuData)
  64. Admin.POST("/secondmenu/save", SecondMenuSave)
  65. Admin.POST("/secondmenu/searchbyid", SecondMenuSearchById)
  66. Admin.POST("/secondmenu/del", SecondMenuDel)
  67. Admin.POST("/user/data", User)
  68. Admin.POST("/user/save", UserSave)
  69. Admin.POST("/user/searchbyid", UserSearchById)
  70. Admin.POST("/user/del", UserDel)
  71. Admin.POST("/user/uppwd", UserUppwd)
  72. }
  73. func User(c *gin.Context) {
  74. maps := map[string]interface{}{
  75. "role": map[string]interface{}{
  76. "$ne": "3",
  77. },
  78. }
  79. data, _ := Mgo.Find("user", maps, nil, nil, false, -1, -1)
  80. c.JSON(200, gin.H{"data": data})
  81. }
  82. func MenuData(c *gin.Context) {
  83. data, _ := Mgo.Find("menu", `{}`, nil, nil, false, -1, -1)
  84. c.JSON(200, gin.H{"data": data})
  85. }
  86. func SecondMenuData(c *gin.Context) {
  87. _id, _ := c.GetPostForm("_id")
  88. maps := map[string]interface{}{
  89. "menuid": _id,
  90. }
  91. data, _ := Mgo.Find("menusecond", maps, nil, nil, false, -1, -1)
  92. c.JSON(200, gin.H{"data": data})
  93. }
  94. func InfotypeData(c *gin.Context) {
  95. datas, _ := Mgo.Find("infotype", `{}`, nil, nil, false, -1, -1)
  96. list:=[]map[string]interface{}{}
  97. for _,data:=range *datas{
  98. if data["subclass"]==nil{
  99. data["subclass"]=""
  100. list=append(list,data)
  101. }else{
  102. for k,_:=range data["subclass"].(map[string]interface{}){
  103. value:=map[string]interface{}{
  104. "_id":data["_id"],
  105. "topclass":data["topclass"],
  106. "subclass":k,
  107. }
  108. list=append(list,value)
  109. }
  110. }
  111. }
  112. c.JSON(200, gin.H{"data": list})
  113. }
  114. func FieldsData(c *gin.Context){
  115. datas, _ := Mgo.Find("fields", `{}`, nil, nil, false, -1, -1)
  116. c.JSON(200, gin.H{"data": datas})
  117. }
  118. func TopclassData(c *gin.Context){
  119. datas, _ := Mgo.Find("infoclass", `{}`, nil, nil, false, -1, -1)
  120. c.JSON(200, gin.H{"data": datas})
  121. }
  122. func SubclassData(c *gin.Context){
  123. topclass, _ := c.GetPostForm("top")
  124. datas, _ := Mgo.FindOneByField("infoclass",`{"topclass":"`+topclass+`"}`,`{"subclass":"1"}`)
  125. data:=*datas
  126. if data["subclass"]!=nil{
  127. c.JSON(200, gin.H{"data": datas})
  128. }
  129. }
  130. func InfotypeSave(c *gin.Context){
  131. topclass, _ := c.GetPostForm("topclass")
  132. subclass, _ := c.GetPostForm("subclass")
  133. fieldsStr, _ := c.GetPostForm("fields")
  134. fieldsStr2, _ := c.GetPostForm("fields2")
  135. _id,_:=c.GetPostForm("_id")
  136. fields := make([]string, 0)
  137. err := json.Unmarshal([]byte(fieldsStr), &fields)
  138. fields2 := make([]string, 0)
  139. err2 := json.Unmarshal([]byte(fieldsStr2), &fields2)
  140. if _id=="" {
  141. b := Mgo.Count("infotype", map[string]interface{}{
  142. "topclass": topclass,
  143. })
  144. b2 := 0
  145. if subclass != "" {
  146. b2 = Mgo.Count("infotype", map[string]interface{}{
  147. "subclass." + subclass: map[string]interface{}{
  148. "$exists": true,
  149. },
  150. })
  151. }
  152. if (b == 0)||(b!=0&&b2==0&&subclass!=""){
  153. if err == nil {
  154. if subclass == "" {
  155. maps := map[string]interface{}{
  156. "topclass": topclass,
  157. "fields": map[string]interface{}{},
  158. }
  159. for _, field := range fields {
  160. maps["fields"].(map[string]interface{})[field] = true
  161. }
  162. Mgo.Save("infotype", maps)
  163. } else {
  164. maps := map[string]interface{}{
  165. }
  166. for _, field := range fields {
  167. maps = map[string]interface{}{
  168. "subclass." + subclass + "." + field: true,
  169. }
  170. maps2 := map[string]interface{}{
  171. "$set": maps,
  172. }
  173. set := map[string]interface{}{
  174. "topclass": topclass,
  175. }
  176. Mgo.Update("infotype", set, maps2, true, false)
  177. }
  178. }
  179. c.JSON(200, gin.H{"rep": true})
  180. }
  181. }
  182. }else{
  183. if err == nil && err2==nil{
  184. set:=map[string]interface{}{
  185. "_id":bson.ObjectIdHex(_id),
  186. }
  187. if subclass == "" {
  188. maps := map[string]interface{}{
  189. "fields": map[string]interface{}{},
  190. }
  191. for _, field := range fields {
  192. maps["fields"].(map[string]interface{})[field] = true
  193. }
  194. maps2:=map[string]interface{}{
  195. "$set":maps,
  196. }
  197. Mgo.Update("infotype", set, maps2, false, false)
  198. } else {
  199. maps := map[string]interface{}{
  200. "subclass."+subclass:map[string]interface{}{},
  201. }
  202. for _, field := range fields {
  203. maps["subclass."+subclass].(map[string]interface{})[field] = true
  204. maps2 := map[string]interface{}{
  205. "$set": maps,
  206. }
  207. Mgo.Update("infotype", set, maps2, false, false)
  208. }
  209. }
  210. c.JSON(200, gin.H{"rep": true})
  211. }
  212. }
  213. }
  214. func InfotypeSelect(c *gin.Context) {
  215. _id, _ := c.GetPostForm("_id")
  216. subclass, _ := c.GetPostForm("subclass")
  217. fmt.Println(_id)
  218. fmt.Println(subclass)
  219. one1,_:=Mgo.FindById("infotype",_id,`{}`)
  220. one:=*one1
  221. datas, _ := Mgo.Find("fields", `{}`, nil, nil, false, -1, -1)
  222. datas2:=*datas
  223. //list2:=[]map[string]interface{}{}
  224. if one["subclass"]==nil{
  225. list:=[]interface{}{}
  226. for k,v:=range one["fields"].(map[string]interface{}){
  227. if v==true{
  228. s_name1,_:=Mgo.FindOneByField("fields",map[string]interface{}{"s_field":k},`{}`)
  229. s_name:=*s_name1
  230. //已存在属性
  231. list=append(list,s_name)
  232. for key,value:=range datas2{
  233. if value["s_field"]==k{
  234. datas2 = append(datas2[:key], datas2[key+1:]...)
  235. }
  236. }
  237. }
  238. }
  239. fmt.Println(one["topclass"].(string),list)
  240. c.JSON(200, gin.H{"topclass": one["topclass"].(string), "subclass": "","fields2":datas2, "fields": list})
  241. }else{
  242. maps:=one["subclass"].(map[string]interface{})[subclass]
  243. list:=[]interface{}{}
  244. for k,v:=range maps.(map[string]interface{}){
  245. if v==true{
  246. s_name1,_:=Mgo.FindOneByField("fields",map[string]interface{}{"s_field":k},`{}`)
  247. s_name:=*s_name1
  248. list=append(list,s_name)
  249. for key,value:=range datas2{
  250. if value["s_field"]==k{
  251. datas2 = append(datas2[:key], datas2[key+1:]...)
  252. }
  253. }
  254. }
  255. }
  256. fmt.Println(one["topclass"].(string),subclass,list)
  257. c.JSON(200, gin.H{"topclass": one["topclass"].(string), "subclass":subclass,"fields2":datas2, "fields": list})
  258. }
  259. }
  260. func InfotypeDel(c *gin.Context) {
  261. _id, _ := c.GetPostForm("_id")
  262. subclass, _ := c.GetPostForm("subclass")
  263. set:=map[string]interface{}{
  264. "_id":bson.ObjectIdHex(_id),
  265. }
  266. if subclass==""{
  267. b:=Mgo.Del("infotype",set)
  268. c.JSON(200, gin.H{"rep": b})
  269. }else{
  270. info1,_:=Mgo.FindById("infotype",_id,`{}`)
  271. info:=*info1
  272. maps:=info["subclass"].(map[string]interface{})
  273. delete(maps,subclass)
  274. if len(maps)==0{
  275. b:=Mgo.Del("infotype",set)
  276. c.JSON(200, gin.H{"rep": b})
  277. }else{
  278. maps2:=map[string]interface{}{
  279. "subclass":maps,
  280. }
  281. maps3:=map[string]interface{}{
  282. "$set":maps2,
  283. }
  284. b:=Mgo.Update("infotype",set,maps3,false,false)
  285. c.JSON(200, gin.H{"rep": b})
  286. }
  287. }
  288. }
  289. func RoleMenuData(c *gin.Context) {
  290. role, _ := c.GetPostForm("role")
  291. maps := map[string]interface{}{
  292. "role." + role: true,
  293. }
  294. datas, _ := Mgo.Find("menu", maps, nil, nil, false, -1, -1)
  295. list := []map[string]interface{}{}
  296. for _, value := range *datas {
  297. _id := qu.BsonIdToSId(value["_id"])
  298. maps := map[string]interface{}{
  299. "menuid": _id,
  300. }
  301. count, _ := Mgo.Find("menusecond", maps, nil, nil, false, -1, -1)
  302. if len(*count) != 0 {
  303. value["secondmenu"] = true
  304. } else {
  305. value["secondmenu"] = false
  306. }
  307. list = append(list, value)
  308. }
  309. c.JSON(200, gin.H{"data": list})
  310. }
  311. func RoleMenuSave(c *gin.Context) {
  312. menu, _ := c.GetPostForm("menu")
  313. secondmenuStr, _ := c.GetPostForm("secondmenuStr")
  314. secondmenuStr2, _ := c.GetPostForm("secondmenuStr2")
  315. role, _ := c.GetPostForm("role")
  316. secondmenus := make([]string, 0)
  317. secondmenus2 := make([]string, 0)
  318. err := json.Unmarshal([]byte(secondmenuStr), &secondmenus)
  319. err2 := json.Unmarshal([]byte(secondmenuStr2), &secondmenus2)
  320. if err == nil && err2 == nil {
  321. for _, v := range secondmenus {
  322. maps := map[string]interface{}{
  323. "_id": bson.ObjectIdHex(v),
  324. }
  325. data := map[string]interface{}{
  326. "role." + role: true,
  327. }
  328. data2 := map[string]interface{}{
  329. "$set": data,
  330. }
  331. Mgo.Update("menusecond", maps, data2, true, false)
  332. }
  333. for _, v := range secondmenus2 {
  334. maps := map[string]interface{}{
  335. "_id": bson.ObjectIdHex(v),
  336. }
  337. data := map[string]interface{}{
  338. "role." + role: false,
  339. }
  340. data2 := map[string]interface{}{
  341. "$set": data,
  342. }
  343. Mgo.Update("menusecond", maps, data2, true, false)
  344. }
  345. }
  346. b := false
  347. if (len(secondmenus) == 0 && len(secondmenus2) == 0) || (len(secondmenus) > 0) {
  348. maps := map[string]interface{}{
  349. "_id": bson.ObjectIdHex(menu),
  350. }
  351. data := map[string]interface{}{
  352. "role." + role: true,
  353. }
  354. data2 := map[string]interface{}{
  355. "$set": data,
  356. }
  357. b = Mgo.Update("menu", maps, data2, true, false)
  358. }
  359. if len(secondmenus) == 0 && len(secondmenus2) > 0 {
  360. maps := map[string]interface{}{
  361. "_id": bson.ObjectIdHex(menu),
  362. }
  363. data := map[string]interface{}{
  364. "role." + role: false,
  365. }
  366. data2 := map[string]interface{}{
  367. "$set": data,
  368. }
  369. b = Mgo.Update("menu", maps, data2, true, false)
  370. }
  371. c.JSON(200, gin.H{"rep": b})
  372. }
  373. func RoleSelect(c *gin.Context) {
  374. menuid, _ := c.GetPostForm("_id")
  375. mark, _ := c.GetPostForm("mark")
  376. role, _ := c.GetPostForm("role")
  377. if mark == "" {
  378. maps := map[string]interface{}{
  379. "menuid": menuid,
  380. }
  381. datas, _ := Mgo.Find("menusecond", maps, nil, nil, false, -1, -1)
  382. c.JSON(200, gin.H{"data": datas})
  383. } else {
  384. maps := map[string]interface{}{
  385. "menuid": menuid,
  386. "role." + role: true,
  387. }
  388. data, _ := Mgo.Find("menusecond", maps, nil, nil, false, -1, -1)
  389. maps2 := map[string]interface{}{
  390. "menuid": menuid,
  391. "role." + role: false,
  392. }
  393. names, _ := Mgo.FindById("menu", menuid, `{name:1}`)
  394. name := *names
  395. name1 := name["name"]
  396. data2, _ := Mgo.Find("menusecond", maps2, nil, nil, false, -1, -1)
  397. c.JSON(200, gin.H{"name": name1, "data": data, "data2": data2})
  398. }
  399. }
  400. func RoleSecondMenuData(c *gin.Context) {
  401. role, _ := c.GetPostForm("role")
  402. _id, _ := c.GetPostForm("_id")
  403. maps := map[string]interface{}{
  404. "menuid": _id,
  405. "role." + role: true,
  406. }
  407. datas, _ := Mgo.Find("menusecond", maps, nil, nil, false, -1, -1)
  408. c.JSON(200, gin.H{"data": datas})
  409. }
  410. func Menu(c *gin.Context) {
  411. session := sessions.Default(c)
  412. u := session.Get("user").(*map[string]interface{})
  413. list := front.UserMenu[qu.ObjToString((*u)["email"])]
  414. c.JSON(200, gin.H{"data": list})
  415. }
  416. func MenuSave(c *gin.Context) {
  417. name, _ := c.GetPostForm("name")
  418. href, _ := c.GetPostForm("href")
  419. pic, _ := c.GetPostForm("pic")
  420. _id, _ := c.GetPostForm("_id")
  421. data := map[string]interface{}{}
  422. if _id == "" {
  423. data = map[string]interface{}{
  424. "name": name,
  425. "href": href,
  426. "pic": pic,
  427. "role": map[string]interface{}{
  428. "0": false,
  429. "1": false,
  430. "2": false,
  431. },
  432. }
  433. b := Mgo.Save("menu", data)
  434. c.JSON(200, gin.H{"rep": b})
  435. } else {
  436. data = map[string]interface{}{
  437. "name": name,
  438. "href": href,
  439. "pic": pic,
  440. }
  441. data2 := map[string]interface{}{
  442. "$set": data,
  443. }
  444. maps := map[string]interface{}{
  445. "_id": bson.ObjectIdHex(_id),
  446. }
  447. b := Mgo.Update("menu", maps, data2, true, false)
  448. c.JSON(200, gin.H{"rep": b})
  449. }
  450. }
  451. func SecondMenuSave(c *gin.Context) {
  452. name, _ := c.GetPostForm("name")
  453. href, _ := c.GetPostForm("href")
  454. pic, _ := c.GetPostForm("pic")
  455. _id, _ := c.GetPostForm("_id")
  456. menuid, _ := c.GetPostForm("menuid")
  457. data := map[string]interface{}{}
  458. if _id == "" {
  459. data = map[string]interface{}{
  460. "name": name,
  461. "href": href,
  462. "pic": pic,
  463. "menuid": menuid,
  464. "role": map[string]interface{}{
  465. "0": false,
  466. "1": false,
  467. "2": false,
  468. },
  469. }
  470. b := Mgo.Save("menusecond", data)
  471. c.JSON(200, gin.H{"rep": b})
  472. } else {
  473. data = map[string]interface{}{
  474. "name": name,
  475. "href": href,
  476. "pic": pic,
  477. }
  478. data2 := map[string]interface{}{
  479. "$set": data,
  480. }
  481. maps := map[string]interface{}{
  482. "_id": bson.ObjectIdHex(_id),
  483. }
  484. b := Mgo.Update("menusecond", maps, data2, true, false)
  485. c.JSON(200, gin.H{"rep": b})
  486. }
  487. }
  488. func UserSave(c *gin.Context) {
  489. email, _ := c.GetPostForm("email")
  490. pwd, _ := c.GetPostForm("pwd")
  491. name, _ := c.GetPostForm("name")
  492. role, _ := c.GetPostForm("role")
  493. data := map[string]interface{}{
  494. "email": email,
  495. "pwd": Se.EncodeString(pwd),
  496. "name": name,
  497. "role": role,
  498. "mtime": time.Now().Unix(),
  499. }
  500. b := Mgo.Update("user", `{"email":"`+email+`"}`, data, true, false)
  501. c.JSON(200, gin.H{"rep": b})
  502. }
  503. func UserSearchById(c *gin.Context) {
  504. _id, _ := c.GetPostForm("_id")
  505. data, _ := Mgo.FindById("user", _id, nil)
  506. (*data)["pwd"] = Se.DecodeString((*data)["pwd"].(string))
  507. c.JSON(200, gin.H{"rep": data})
  508. }
  509. func MenuSearchById(c *gin.Context) {
  510. _id, _ := c.GetPostForm("_id")
  511. data, _ := Mgo.FindById("menu", _id, nil)
  512. c.JSON(200, gin.H{"rep": data})
  513. }
  514. func SecondMenuSearchById(c *gin.Context) {
  515. _id, _ := c.GetPostForm("_id")
  516. data, _ := Mgo.FindById("menusecond", _id, nil)
  517. c.JSON(200, gin.H{"rep": data})
  518. }
  519. func UserDel(c *gin.Context) {
  520. _id, _ := c.GetPostForm("_id")
  521. b := Mgo.Del("user", `{"_id":"`+_id+`"}`)
  522. c.JSON(200, gin.H{"rep": b})
  523. }
  524. func MenuDel(c *gin.Context) {
  525. _id, _ := c.GetPostForm("_id")
  526. b := Mgo.Del("menu", `{"_id":"`+_id+`"}`)
  527. c.JSON(200, gin.H{"rep": b})
  528. }
  529. func SecondMenuDel(c *gin.Context) {
  530. _id, _ := c.GetPostForm("_id")
  531. b := Mgo.Del("menusecond", `{"_id":"`+_id+`"}`)
  532. c.JSON(200, gin.H{"rep": b})
  533. }
  534. func RoleMenuDel(c *gin.Context) {
  535. _id, _ := c.GetPostForm("_id")
  536. role, _ := c.GetPostForm("role")
  537. maps := map[string]interface{}{
  538. "_id": bson.ObjectIdHex(_id),
  539. }
  540. data := map[string]interface{}{
  541. "role." + role: false,
  542. }
  543. data2 := map[string]interface{}{
  544. "$set": data,
  545. }
  546. b := Mgo.Update("menu", maps, data2, true, false)
  547. maps = map[string]interface{}{
  548. "menuid": _id,
  549. }
  550. count, _ := Mgo.Find("menusecond", maps, nil, nil, false, -1, -1)
  551. if len(*count) != 0 {
  552. for _, c := range *count {
  553. maps = map[string]interface{}{
  554. "_id": c["_id"],
  555. }
  556. Mgo.Update("menusecond", maps, data2, true, false)
  557. }
  558. }
  559. c.JSON(200, gin.H{"rep": b})
  560. }
  561. func RoleSecondMenuDel(c *gin.Context) {
  562. _id, _ := c.GetPostForm("_id")
  563. role, _ := c.GetPostForm("role")
  564. maps := map[string]interface{}{
  565. "_id": bson.ObjectIdHex(_id),
  566. }
  567. data := map[string]interface{}{
  568. "role." + role: false,
  569. }
  570. data2 := map[string]interface{}{
  571. "$set": data,
  572. }
  573. b := Mgo.Update("menusecond", maps, data2, true, false)
  574. c.JSON(200, gin.H{"rep": b})
  575. }
  576. func UserUppwd(c *gin.Context) {
  577. _id, _ := c.GetPostForm("_id")
  578. pwd, _ := c.GetPostForm("pwd")
  579. b := Mgo.UpdateById("user", _id, `{"$set":{"pwd":"`+Se.EncodeString(pwd)+`"}}`)
  580. c.JSON(200, gin.H{"rep": b})
  581. }