This commit is contained in:
Sun
2023-11-08 21:53:07 +08:00
commit 211c3071dc
245 changed files with 39293 additions and 0 deletions
+7
View File
@@ -0,0 +1,7 @@
package panel
type ApiPanel struct {
ItemIcon ItemIcon
UserConfig UserConfig
UsersApi UsersApi
}
+100
View File
@@ -0,0 +1,100 @@
package panel
import (
"encoding/json"
"sun-panel/api/api_v1/common/apiData/commonApiStructs"
"sun-panel/api/api_v1/common/apiReturn"
"sun-panel/api/api_v1/common/base"
"sun-panel/global"
"sun-panel/models"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
)
type ItemIcon struct {
}
func (a *ItemIcon) Edit(c *gin.Context) {
userInfo, _ := base.GetCurrentUserInfo(c)
req := models.ItemIcon{}
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
apiReturn.ErrorParamFomat(c, err.Error())
return
}
req.UserId = userInfo.ID
req.GroupId = 1
req.Sort = 1
// json转字符串
if j, err := json.Marshal(req.Icon); err == nil {
req.IconJson = string(j)
}
if req.ID != 0 {
// 修改
global.Db.Model(&models.ItemIcon{}).
Select("IconJson", "Icon", "Title", "Url", "LanUrl", "Description", "OpenMethod", "Sort", "GroupId", "UserId").
Where("id=?", req.ID).Updates(&req)
} else {
// 创建
global.Db.Create(&req)
}
apiReturn.SuccessData(c, req)
}
// // 获取详情
// func (a *ItemIcon) GetInfo(c *gin.Context) {
// req := systemApiStructs.AiDrawGetInfoReq{}
// if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
// apiReturn.ErrorParamFomat(c, err.Error())
// return
// }
// userInfo, _ := base.GetCurrentUserInfo(c)
// aiDraw := models.AiDraw{}
// aiDraw.ID = req.ID
// if err := aiDraw.GetInfo(global.Db); err != nil {
// if err == gorm.ErrRecordNotFound {
// apiReturn.Error(c, "不存在记录")
// return
// }
// apiReturn.ErrorDatabase(c, err.Error())
// return
// }
// if userInfo.ID != aiDraw.UserID {
// apiReturn.ErrorNoAccess(c)
// return
// }
// apiReturn.SuccessData(c, aiDraw)
// }
func (a *ItemIcon) GetListByGroupId(c *gin.Context) {
req := commonApiStructs.RequestPage{}
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
apiReturn.ErrorParamFomat(c, err.Error())
return
}
userInfo, _ := base.GetCurrentUserInfo(c)
itemIcons := []models.ItemIcon{}
if err := global.Db.Order("sort ,created_at DESC").Where("user_id=?", userInfo.ID).Find(&itemIcons, "group_id = ? AND user_id=?", 1, userInfo.ID).Error; err != nil {
apiReturn.ErrorDatabase(c, err.Error())
return
}
for k, v := range itemIcons {
json.Unmarshal([]byte(v.IconJson), &itemIcons[k].Icon)
}
apiReturn.SuccessListData(c, itemIcons, 0)
}
+87
View File
@@ -0,0 +1,87 @@
package panel
import (
"encoding/json"
"sun-panel/api/api_v1/common/apiReturn"
"sun-panel/api/api_v1/common/base"
"sun-panel/global"
"sun-panel/models"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"gorm.io/gorm"
)
type UserConfig struct {
}
func (a *UserConfig) Get(c *gin.Context) {
userInfo, _ := base.GetCurrentUserInfo(c)
cfg := models.UserConfig{}
if err := global.Db.First(&cfg, "user_id=?", userInfo.ID).Error; err != nil {
if err == gorm.ErrRecordNotFound {
apiReturn.ErrorDataNotFound(c)
return
} else {
apiReturn.ErrorDatabase(c, err.Error())
return
}
}
// 处理字段
if err := json.Unmarshal([]byte(cfg.PanelJson), &cfg.Panel); err != nil {
cfg.Panel = nil
}
if err := json.Unmarshal([]byte(cfg.SearchEngineJson), &cfg.SearchEngine); err != nil {
cfg.SearchEngine = nil
}
apiReturn.SuccessData(c, cfg)
}
func (a *UserConfig) Set(c *gin.Context) {
userInfo, _ := base.GetCurrentUserInfo(c)
req := models.UserConfig{}
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
apiReturn.ErrorParamFomat(c, err.Error())
return
}
// 处理字段
if jb, err := json.Marshal(req.Panel); err != nil {
req.PanelJson = "{}"
} else {
req.PanelJson = string(jb)
}
if jb, err := json.Marshal(req.SearchEngine); err != nil {
req.SearchEngineJson = "{}"
} else {
req.SearchEngineJson = string(jb)
}
// 保存操作
if err := global.Db.First(&models.UserConfig{}, "user_id=?", userInfo.ID).Error; err != nil {
req.UserId = userInfo.ID
if err == gorm.ErrRecordNotFound {
// 新增
if err := global.Db.Create(&req).Error; err != nil {
apiReturn.ErrorDatabase(c, err.Error())
return
}
} else {
// 报错
apiReturn.ErrorDatabase(c, err.Error())
return
}
} else {
// 修改
if err := global.Db.Where("user_id=?", userInfo.ID).Updates(&req).Error; err != nil {
apiReturn.ErrorDatabase(c, err.Error())
return
}
}
apiReturn.Success(c)
}
+169
View File
@@ -0,0 +1,169 @@
package panel
import (
"sun-panel/api/api_v1/common/apiReturn"
"sun-panel/api/api_v1/common/base"
"sun-panel/global"
"sun-panel/lib/cmn"
"sun-panel/models"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
)
// 此API 临时使用,后期带有管理功能,将废除!!!
type UsersApi struct {
}
func (a UsersApi) Create(c *gin.Context) {
param := models.User{}
if err := c.ShouldBindBodyWith(&param, binding.JSON); err != nil {
apiReturn.ErrorParamFomat(c, err.Error())
return
}
if errMsg, err := base.ValidateInputStruct(param); err != nil {
apiReturn.ErrorParamFomat(c, errMsg)
return
}
mUser := models.User{
Username: param.Username,
Password: cmn.PasswordEncryption(param.Password),
Name: param.Username,
HeadImage: param.HeadImage,
Status: 1,
Role: 1, // 固定管理员
Mail: param.Username,
}
// 验证账号是否存在
if _, err := mUser.CheckUsernameExist(param.Username); err != nil {
apiReturn.Error(c, global.Lang.Get("register.mail_exist"))
return
}
userInfo, err := mUser.CreateOne()
if err != nil {
apiReturn.ErrorDatabase(c, err.Error())
return
}
apiReturn.SuccessData(c, gin.H{"userId": userInfo.ID})
}
func (a UsersApi) Deletes(c *gin.Context) {
type UserIds struct {
UserIds []uint
}
param := UserIds{}
if err := c.ShouldBindBodyWith(&param, binding.JSON); err != nil {
apiReturn.Error(c, global.Lang.GetAndInsert("common.api_error_param_format", "[", err.Error(), "]"))
c.Abort()
return
}
if err := global.Db.Delete(&models.User{}, &param.UserIds).Error; err != nil {
apiReturn.ErrorDatabase(c, err.Error())
return
}
apiReturn.Success(c)
}
func (a UsersApi) Update(c *gin.Context) {
param := models.User{}
if err := c.ShouldBindBodyWith(&param, binding.JSON); err != nil {
apiReturn.Error(c, global.Lang.GetAndInsert("common.api_error_param_format", "[", err.Error(), "]"))
c.Abort()
return
}
if param.Password == "" {
param.Password = "-" // 修改不允许修改密码,为了验证通过
}
param.Mail = param.Username // 密码邮箱同时修改
if errMsg, err := base.ValidateInputStruct(param); err != nil {
apiReturn.ErrorParamFomat(c, errMsg)
return
}
allowField := []string{"Username", "Name", "Mail", "Token"}
// 密码不为默认“-”空,修改密码
if param.Password != "-" {
param.Password = cmn.PasswordEncryption(param.Password)
allowField = append(allowField, "Password")
}
mUser := models.User{}
userInfo := models.User{}
// 验证账号是否存在
if user, err := mUser.CheckUsernameExist(param.Username); err != nil {
userInfo = user
if user.ID != param.ID {
apiReturn.Error(c, global.Lang.Get("register.mail_exist"))
return
}
} else {
userInfo = user
}
param.Token = "" // 修改资料就重置token
if err := global.Db.Select(allowField).Where("id=?", param.ID).Updates(&param).Error; err != nil {
apiReturn.ErrorDatabase(c, err.Error())
return
}
// global.Logger.Debug("修改资料清空token", userInfo.Token)
global.UserToken.Delete(userInfo.Token) // 更新用户信息
// 返回token等基本信息
apiReturn.SuccessData(c, param)
}
func (a UsersApi) GetList(c *gin.Context) {
type ParamsStruct struct {
models.User
Limit int
Page int
Keyword string `json:"keyword"`
}
param := ParamsStruct{}
if err := c.ShouldBindBodyWith(&param, binding.JSON); err != nil {
apiReturn.Error(c, global.Lang.GetAndInsert("common.api_error_param_format", "[", err.Error(), "]"))
c.Abort()
return
}
var (
list []models.User
count int64
)
db := global.Db
// 查询条件
if param.Keyword != "" {
db = db.Where("name LIKE ? OR username LIKE ?", "%"+param.Keyword+"%", "%"+param.Keyword+"%")
}
if err := db.Omit("Password").Limit(param.Limit).Offset((param.Page - 1) * param.Limit).Find(&list).Limit(-1).Offset(-1).Count(&count).Error; err != nil {
apiReturn.ErrorDatabase(c, err.Error())
return
}
// resMap := []map[string]interface{}{}
// for _, v := range list {
// resMap = append(resMap, map[string]interface{}{
// "userId": v.ID,
// "name": v.Name,
// "headImage": v.HeadImage,
// "status": v.Status,
// "role": v.Role,
// "username": v.Username,
// })
// }
apiReturn.SuccessListData(c, list, count)
}