From 5d9d73cb56e2afdd0381d3f20eebe2added809a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=87=E5=B3=B0?= Date: Tue, 28 Apr 2026 16:38:39 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E8=A1=A8=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E8=A1=A8=E7=9A=84=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/my_work/models/def.go | 34 ---- backend/my_work/models/log.go | 18 +-- backend/my_work/models/sql.go | 84 ++-------- backend/my_work/routers/apiPurchase.go | 4 +- backend/my_work/routers/apiSchedule.go | 6 +- backend/my_work/routers/apiUsers.go | 196 ++++++++++++++++++------ backend/my_work/routers/apiWarehouse.go | 4 +- backend/my_work/routers/apiWorkOrder.go | 38 ++--- frontend/ops2_uniapp | 2 +- 9 files changed, 191 insertions(+), 195 deletions(-) diff --git a/backend/my_work/models/def.go b/backend/my_work/models/def.go index 9cec2fb..f3e9e35 100644 --- a/backend/my_work/models/def.go +++ b/backend/my_work/models/def.go @@ -51,47 +51,13 @@ func Md5Str(str string) string { return hashString2 } -func HashUserPass(user *TabUser_) { - switch ConfigsUser.PassHashType { - case "text": - break - case "md5": - user.Pass = Md5Str(user.Pass) - case "md5salt": - if user.Salt == "" { - user.Salt = RandStr32() - } - user.Pass = Md5Str(Md5Str(user.Pass) + user.Salt) - - } - -} func IsExpired(expireTime time.Time) bool { return expireTime.Before(time.Now()) } -func CheckCookiesAndUpdate(cookie *TabCookie_) bool { - if !IsExpired(cookie.ExpiresAt) { - if cookie.Remember { - cookiewhere := TabCookie_{ - ID: cookie.ID, - } - cookieupdata := TabCookie_{ - UpdatedAt: time.Now(), - ExpiresAt: time.Now().Add(time.Duration(ConfigsUser.CookieTimeout) * time.Second), - } - DB.Where(&cookiewhere).Updates(&cookieupdata) - } - return true - } else { - //以过期 - return false - } - //return false -} // 判断邮箱是否合法 func IsEmailValid(email string) bool { diff --git a/backend/my_work/models/log.go b/backend/my_work/models/log.go index 7c6242e..ed19682 100644 --- a/backend/my_work/models/log.go +++ b/backend/my_work/models/log.go @@ -35,16 +35,16 @@ func GetRealIP(c *gin.Context) string { return c.ClientIP() } -func LogAdd(c *gin.Context, msg string) { +// func LogAdd(c *gin.Context, msg string) { - var logtemp APIRequestLog_ +// var logtemp APIRequestLog_ - logtemp.IPAddress = GetRealIP(c) - logtemp.Path = c.Request.URL.Path - logtemp.Method = c.Request.Method - logtemp.Message = msg +// logtemp.IPAddress = GetRealIP(c) +// logtemp.Path = c.Request.URL.Path +// logtemp.Method = c.Request.Method +// logtemp.Message = msg - //fmt.Println(logtemp) - DB.Create(&logtemp) +// //fmt.Println(logtemp) +// DB.Create(&logtemp) -} +// } diff --git a/backend/my_work/models/sql.go b/backend/my_work/models/sql.go index d147681..fd0f276 100644 --- a/backend/my_work/models/sql.go +++ b/backend/my_work/models/sql.go @@ -2,7 +2,6 @@ package models import ( "fmt" - "time" "github.com/glebarez/sqlite" "gorm.io/driver/mysql" @@ -12,70 +11,16 @@ import ( var DB *gorm.DB -type TabUser_ struct { - ID uint `gorm:"primaryKey;autoIncrement"` // 自增主键 - Name string `gorm:"size:100;uniqueIndex"` // 唯一约束索引 - Email string `gorm:"size:255;index"` // 字符串长度限制100 索引 - Pass string `gorm:"size:128"` // 建议存储哈希后的密码 - Type string `gorm:"size:64;default:user"` // - Salt string `gorm:"size:64;"` - Date time.Time `gorm:"type:datetime;default:CURRENT_TIMESTAMP"` // 默认当前时间 -} - -type TabUserGroups_ struct { - ID uint `gorm:"primaryKey;autoIncrement"` // 自增主键 - Name string `gorm:"size:100;uniqueIndex"` // 唯一约束索引 - Email string `gorm:"size:255;index"` // 字符串长度限制100 索引 - Type string `gorm:"size:64;default:usergroup"` // - Date time.Time `gorm:"type:datetime;default:CURRENT_TIMESTAMP"` // 默认当前时间 -} - -type TabUserGroupBinds_ struct { - ID uint `gorm:"primaryKey;autoIncrement"` // 自增主键 - UserID uint `gorm:"index"` - GroupID uint `gorm:"index"` - Date time.Time `gorm:"type:datetime;default:CURRENT_TIMESTAMP"` // 默认当前时间 -} - -type TabUserInfo_ struct { - ID uint `gorm:"primaryKey;autoIncrement"` - UserID uint `gorm:"not null;uniqueIndex"` - FirstName string `gorm:"size:50;null"` - Username string `gorm:"size:30;null"` - Birthdate time.Time `gorm:"type:datetime;null"` - Gender string `gorm:"type:char(1);check:gender IN ('M', 'F', 'U');default:'U'"` - AvatarPath string `gorm:"size:255"` - Region string `gorm:"size:50"` - Language string `gorm:"size:10;default:'zh-CN'"` - CreatedAt time.Time `gorm:"type:datetime;default:CURRENT_TIMESTAMP;column:created_at"` -} - -// var def_user_info = User_info{ -// ID:0, -// UserID:0, +// type APIRequestLog_ struct { +// ID int64 `gorm:"primaryKey;column:id" json:"id"` +// IPAddress string `gorm:"column:ip_address;size:45;not null" json:"ip_address"` +// Path string `gorm:"column:path;size:500;not null" json:"path"` +// Method string `gorm:"column:method;size:10;not null" json:"method"` +// StatusCode int `gorm:"column:status_code;index" json:"status_code"` +// Message string `gorm:"column:error_message;type:text" json:"error_message"` +// CreatedAt time.Time `gorm:"column:created_at;type:datetime;default:CURRENT_TIMESTAMP" json:"created_at"` // } -type TabCookie_ struct { - ID uint `gorm:"primaryKey;autoIncrement"` - UserID uint `gorm:"not null"` - Name string `gorm:"size:255;not null;index"` - Value string `gorm:"size:255;not null;index"` - ExpiresAt time.Time `gorm:"type:datetime;index"` - CreatedAt time.Time `gorm:"type:datetime;not null;default:CURRENT_TIMESTAMP"` - UpdatedAt time.Time `gorm:"type:datetime;index;not null;default:CURRENT_TIMESTAMP"` - Remember bool `gorm:"default:false"` -} - -type APIRequestLog_ struct { - ID int64 `gorm:"primaryKey;column:id" json:"id"` - IPAddress string `gorm:"column:ip_address;size:45;not null" json:"ip_address"` - Path string `gorm:"column:path;size:500;not null" json:"path"` - Method string `gorm:"column:method;size:10;not null" json:"method"` - StatusCode int `gorm:"column:status_code;index" json:"status_code"` - Message string `gorm:"column:error_message;type:text" json:"error_message"` - CreatedAt time.Time `gorm:"column:created_at;type:datetime;default:CURRENT_TIMESTAMP" json:"created_at"` -} - func DatabaseInit() error { var err error fmt.Println("database_init") @@ -102,18 +47,7 @@ func DatabaseInit() error { panic("数据库连接失败") } - // 自动创建表结构 - DB.AutoMigrate(&TabUser_{}) - - DB.AutoMigrate(&TabUserGroups_{}) - - DB.AutoMigrate(&TabUserGroupBinds_{}) - - DB.AutoMigrate(&TabUserInfo_{}) - - DB.AutoMigrate(&TabCookie_{}) - - DB.AutoMigrate(&APIRequestLog_{}) + //DB.AutoMigrate(&APIRequestLog_{}) return nil } diff --git a/backend/my_work/routers/apiPurchase.go b/backend/my_work/routers/apiPurchase.go index 0b057e8..2ee5940 100644 --- a/backend/my_work/routers/apiPurchase.go +++ b/backend/my_work/routers/apiPurchase.go @@ -13,7 +13,7 @@ import ( ) var ( - purchaseUserGroup models.TabUserGroups_ + purchaseUserGroup TabUserGroups purchaseAdmins []uint ) @@ -22,7 +22,7 @@ func updatePurchaseAdminsCash() { purchaseAdmins = nil // id 1 是系统管理员 purchaseAdmins = append(purchaseAdmins, 1) - var binds []models.TabUserGroupBinds_ + var binds []TabUserGroupBinds models.DB.Where("group_id = ?", purchaseUserGroup.ID).Find(&binds) for _, item := range binds { if !slices.Contains(purchaseAdmins, item.UserID) { diff --git a/backend/my_work/routers/apiSchedule.go b/backend/my_work/routers/apiSchedule.go index eaac3bb..ea1c765 100644 --- a/backend/my_work/routers/apiSchedule.go +++ b/backend/my_work/routers/apiSchedule.go @@ -53,7 +53,7 @@ type fromGetEvents struct { } var ( - userGroup models.TabUserGroups_ + userGroup TabUserGroups scheduleAdmins []uint ) @@ -66,8 +66,8 @@ scheduleAdmins=nil //id 1是系统管理员 直接appen scheduleAdmins=append(scheduleAdmins, 1) //读取所有绑定了这个用户组的用户id - var usergroupbind []models.TabUserGroupBinds_ - usergroupbindfind:= models.TabUserGroupBinds_{ + var usergroupbind []TabUserGroupBinds + usergroupbindfind:= TabUserGroupBinds{ GroupID: userGroup.ID, } models.DB.Where(&usergroupbindfind).Find(&usergroupbind) diff --git a/backend/my_work/routers/apiUsers.go b/backend/my_work/routers/apiUsers.go index dd4d32c..b5f70eb 100644 --- a/backend/my_work/routers/apiUsers.go +++ b/backend/my_work/routers/apiUsers.go @@ -12,12 +12,115 @@ import ( "github.com/mitchellh/mapstructure" ) +type TabUser struct { + ID uint `gorm:"primaryKey;autoIncrement"` // 自增主键 + Name string `gorm:"size:100;uniqueIndex"` // 唯一约束索引 + Email string `gorm:"size:255;index"` // 字符串长度限制100 索引 + Pass string `gorm:"size:128"` // 建议存储哈希后的密码 + Type string `gorm:"size:64;default:user"` // + Salt string `gorm:"size:64;"` + Date time.Time `gorm:"type:datetime;default:CURRENT_TIMESTAMP"` // 默认当前时间 +} + +type TabUserGroups struct { + ID uint `gorm:"primaryKey;autoIncrement"` // 自增主键 + Name string `gorm:"size:100;uniqueIndex"` // 唯一约束索引 + Email string `gorm:"size:255;index"` // 字符串长度限制100 索引 + Type string `gorm:"size:64;default:usergroup"` // + Date time.Time `gorm:"type:datetime;default:CURRENT_TIMESTAMP"` // 默认当前时间 +} + +type TabUserGroupBinds struct { + ID uint `gorm:"primaryKey;autoIncrement"` // 自增主键 + UserID uint `gorm:"index"` + GroupID uint `gorm:"index"` + Date time.Time `gorm:"type:datetime;default:CURRENT_TIMESTAMP"` // 默认当前时间 +} + +type TabUserInfo struct { + ID uint `gorm:"primaryKey;autoIncrement"` + UserID uint `gorm:"not null;uniqueIndex"` + FirstName string `gorm:"size:50;null"` + Username string `gorm:"size:30;null"` + Birthdate time.Time `gorm:"type:datetime;null"` + Gender string `gorm:"type:char(1);check:gender IN ('M', 'F', 'U');default:'U'"` + AvatarPath string `gorm:"size:255"` + Region string `gorm:"size:50"` + Language string `gorm:"size:10;default:'zh-CN'"` + CreatedAt time.Time `gorm:"type:datetime;default:CURRENT_TIMESTAMP;column:created_at"` +} + +// var def_user_info = User_info{ +// ID:0, +// UserID:0, +// } + +type TabUserCookie struct { + ID uint `gorm:"primaryKey;autoIncrement"` + UserID uint `gorm:"not null"` + Name string `gorm:"size:255;not null;index"` + Value string `gorm:"size:255;not null;index"` + ExpiresAt time.Time `gorm:"type:datetime;index"` + CreatedAt time.Time `gorm:"type:datetime;not null;default:CURRENT_TIMESTAMP"` + UpdatedAt time.Time `gorm:"type:datetime;index;not null;default:CURRENT_TIMESTAMP"` + Remember bool `gorm:"default:false"` +} + +func HashUserPass(user *TabUser) { + switch models.ConfigsUser.PassHashType { + case "text": + break + case "md5": + user.Pass = models.Md5Str(user.Pass) + + case "md5salt": + if user.Salt == "" { + user.Salt = models.RandStr32() + } + user.Pass = models.Md5Str(models.Md5Str(user.Pass) + user.Salt) + + } + +} + +func CheckCookiesAndUpdate(cookie *TabUserCookie) bool { + if !models.IsExpired(cookie.ExpiresAt) { + if cookie.Remember { + cookiewhere := TabUserCookie{ + ID: cookie.ID, + } + cookieupdata := TabUserCookie{ + UpdatedAt: time.Now(), + ExpiresAt: time.Now().Add(time.Duration(models.ConfigsUser.CookieTimeout) * time.Second), + } + models.DB.Where(&cookiewhere).Updates(&cookieupdata) + + } + return true + } else { + //以过期 + return false + } + //return false +} + func ApiUserInit() { //用户模块初始化init fmt.Println("users init") + // 自动创建表结构 + models.DB.AutoMigrate(&TabUser{}) + + models.DB.AutoMigrate(&TabUserGroups{}) + + models.DB.AutoMigrate(&TabUserGroupBinds{}) + + models.DB.AutoMigrate(&TabUserInfo{}) + + models.DB.AutoMigrate(&TabUserCookie{}) + //创建admin用户 - var user models.TabUser_ + var user TabUser user.Name = "admin" if models.DB.Where(&user).First(&user).Error == nil { @@ -28,12 +131,12 @@ func ApiUserInit() { //对密码加盐 user.Salt = models.RandStr32() user.Pass = "adminpassword" - models.HashUserPass(&user) + HashUserPass(&user) models.DB.Create(&user) // 传入指针 } //创建admin group - var usergroup models.TabUserGroups_ + var usergroup TabUserGroups usergroup.Name = "admins" if models.DB.Where(&usergroup).First(&usergroup).Error == nil { @@ -43,7 +146,7 @@ func ApiUserInit() { } //创建用户与用户组绑定 - var usergroupbind models.TabUserGroupBinds_ + var usergroupbind TabUserGroupBinds usergroupbind.UserID = user.ID usergroupbind.GroupID = usergroup.ID @@ -82,18 +185,18 @@ type From_user_changepass struct { Newpass string `json:"newpass"` } -func AuthenticationAuthorityFromCookie(c string) (*models.TabUser_, error) { +func AuthenticationAuthorityFromCookie(c string) (*TabUser, error) { if c != "" { - cookie := models.TabCookie_{ + cookie := TabUserCookie{ Value: c, } if models.DB.Where(&cookie).First(&cookie).Error == nil { //找到cookie,验证cookie有效性,以及更新cookie - if models.CheckCookiesAndUpdate(&cookie) { + if CheckCookiesAndUpdate(&cookie) { //cookie有效 //载入user - user := models.TabUser_{ + user := TabUser{ ID: cookie.UserID, } models.DB.Where(&user).First(&user) @@ -109,27 +212,27 @@ func AuthenticationAuthorityFromCookie(c string) (*models.TabUser_, error) { } } -func GetUserInfoFromUserID(userID uint) (*models.TabUserInfo_){ +func GetUserInfoFromUserID(userID uint) *TabUserInfo { //通过id获取用户info - if(userID <=0){ + if userID <= 0 { return nil } //先查询用户是否存在 - var user models.TabUser_ + var user TabUser user.ID = userID - if models.DB.Where(&user).First(&user).Error==nil{ - var userinfo models.TabUserInfo_ - userinfo.UserID=user.ID - if models.DB.Where(&userinfo).First(&userinfo).Error==nil{ + if models.DB.Where(&user).First(&user).Error == nil { + var userinfo TabUserInfo + userinfo.UserID = user.ID + if models.DB.Where(&userinfo).First(&userinfo).Error == nil { return &userinfo - }else{ + } else { //无记录,创建一条 - userinfo.Username=user.Name - userinfo.FirstName=user.Email - userinfo.Birthdate=(time.Now()) + userinfo.Username = user.Name + userinfo.FirstName = user.Email + userinfo.Birthdate = (time.Now()) models.DB.Create(&userinfo) return &userinfo } @@ -137,16 +240,13 @@ func GetUserInfoFromUserID(userID uint) (*models.TabUserInfo_){ return nil - - - } -func AuthenticationAuthority(ctx *gin.Context) (bool, models.TabUser_, map[string]interface{}) { +func AuthenticationAuthority(ctx *gin.Context) (bool, TabUser, map[string]interface{}) { data, cookieval := SeparateData(ctx) //fmt.Println("cookieis" + cookieval) - var user models.TabUser_ + var user TabUser if cookieval != "" { user_, error := AuthenticationAuthorityFromCookie(cookieval) if error == nil { @@ -163,8 +263,6 @@ func AuthenticationAuthority(ctx *gin.Context) (bool, models.TabUser_, map[strin } - - func ApiUser(r *gin.RouterGroup) { r.GET("/test", func(ctx *gin.Context) { @@ -175,16 +273,16 @@ func ApiUser(r *gin.RouterGroup) { }) //get获取用户info - r.GET("/getuserinfo/:id",func(ctx *gin.Context) { + r.GET("/getuserinfo/:id", func(ctx *gin.Context) { idStr := ctx.Param("id") id, err := strconv.Atoi(idStr) var redata map[string]interface{} = make(map[string]interface{}) if err == nil { - userinfo:=GetUserInfoFromUserID(uint(id)) - if(userinfo!=nil){ - redata["userinfo"]=*userinfo + userinfo := GetUserInfoFromUserID(uint(id)) + if userinfo != nil { + redata["userinfo"] = *userinfo } - + } ReturnJson(ctx, "apiOK", redata) @@ -200,17 +298,17 @@ func ApiUser(r *gin.RouterGroup) { //验证旧密码 //fmt.Println(user) //转换旧密码 - olduser := models.TabUser_{ + olduser := TabUser{ Pass: jsonData.Oldpass, Salt: user.Salt, } - models.HashUserPass(&olduser) + HashUserPass(&olduser) if olduser.Pass == user.Pass { //旧密码正确,更新新密码 - var userupdate models.TabUser_ + var userupdate TabUser userupdate.Pass = jsonData.Newpass userupdate.Salt = models.RandStr32() - models.HashUserPass(&userupdate) + HashUserPass(&userupdate) models.DB.Model(&user).Updates(&userupdate) ReturnJson(ctx, "apiOK", nil) } else { @@ -233,7 +331,7 @@ func ApiUser(r *gin.RouterGroup) { if err := mapstructure.Decode(data, &jsonData); err == nil { //判断新邮箱格式 if models.IsEmailValid(jsonData.Newemail) { - var userupdate models.TabUser_ + var userupdate TabUser userupdate.Email = jsonData.Newemail models.DB.Model(&user).Updates(&userupdate) ReturnJson(ctx, "apiOK", nil) @@ -297,10 +395,10 @@ func ApiUser(r *gin.RouterGroup) { } if is_save_ok { //修改数据库内容 - var user_info_fund models.TabUserInfo_ + var user_info_fund TabUserInfo user_info_fund.UserID = user.ID - var user_update_avatar models.TabUserInfo_ + var user_update_avatar TabUserInfo user_update_avatar.AvatarPath = file_hashi_name + file_extname //先查找是否有记录 @@ -357,10 +455,10 @@ func ApiUser(r *gin.RouterGroup) { // fmt.Println(user) t, err := time.Parse("2006-01-02", jsonData.Birthday) if err == nil { - var userinfo models.TabUserInfo_ + var userinfo TabUserInfo userinfo.UserID = user.ID - var userinfoupdate models.TabUserInfo_ + var userinfoupdate TabUserInfo userinfoupdate.UserID = user.ID userinfoupdate.CreatedAt = time.Now() userinfoupdate.Username = jsonData.Username @@ -399,7 +497,7 @@ func ApiUser(r *gin.RouterGroup) { //fmt.Println(userInfo) var redata map[string]interface{} = make(map[string]interface{}) - info:=GetUserInfoFromUserID(user.ID) + info := GetUserInfoFromUserID(user.ID) redata["userInfo"] = *info user.Pass = "" @@ -419,21 +517,21 @@ func ApiUser(r *gin.RouterGroup) { if loginuser.Username != "" && loginuser.Password != "" { //传入的数据都ok,获取用户信息 - getuser := models.TabUser_{ + getuser := TabUser{ Name: loginuser.Username, } if models.DB.Where(&getuser).First(&getuser).Error == nil { //倒入数据 - user := models.TabUser_{ + user := TabUser{ Pass: loginuser.Password, //密码明文 Salt: getuser.Salt, //保存的盐制 } //哈希密 - models.HashUserPass(&user) + HashUserPass(&user) if user.Pass == getuser.Pass { //用户密码正确,生成cookie - cookie := models.TabCookie_{ + cookie := TabUserCookie{ UserID: getuser.ID, Name: "login", Value: models.RandStr32(), @@ -480,7 +578,7 @@ func ApiUser(r *gin.RouterGroup) { if data != nil { if err := mapstructure.Decode(data, &jsonData); err == nil { //转换字段 - newUser := models.TabUser_{ + newUser := TabUser{ Name: jsonData.Username, Email: jsonData.Useremail, Pass: jsonData.Userpass, // 实际应替换为哈希值 @@ -490,7 +588,7 @@ func ApiUser(r *gin.RouterGroup) { if newUser.Name != "" && newUser.Pass != "" && newUser.Email != "" { //用户名是唯一的,先读取是否有这个用户名 - var user models.TabUser_ + var user TabUser user.Name = newUser.Name if models.DB.Where(&user).First(&user).Error == nil { @@ -503,14 +601,12 @@ func ApiUser(r *gin.RouterGroup) { newUser.Salt = models.RandStr32() //对用户的密码进行哈希替换 - models.HashUserPass(&newUser) + HashUserPass(&newUser) models.DB.Create(&newUser) // 传入指针 //创建用户后写一个log - models.LogAdd(ctx, "New user id:"+strconv.Itoa(int(newUser.ID))) - ReturnJson(ctx, "apiOK", nil) } diff --git a/backend/my_work/routers/apiWarehouse.go b/backend/my_work/routers/apiWarehouse.go index 129b2e6..bf16f86 100644 --- a/backend/my_work/routers/apiWarehouse.go +++ b/backend/my_work/routers/apiWarehouse.go @@ -91,7 +91,7 @@ type TabWarehouseItemWorkOrderBind struct { } var ( - warehouseUserGroup models.TabUserGroups_ + warehouseUserGroup TabUserGroups warehouseAdmins []uint ) @@ -99,7 +99,7 @@ var ( func updateWarehouseAdminsCash() { warehouseAdmins = nil warehouseAdmins = append(warehouseAdmins, 1) // id=1 超级管理员 - var binds []models.TabUserGroupBinds_ + var binds []TabUserGroupBinds models.DB.Where("group_id = ?", warehouseUserGroup.ID).Find(&binds) for _, item := range binds { if !slices.Contains(warehouseAdmins, item.UserID) { diff --git a/backend/my_work/routers/apiWorkOrder.go b/backend/my_work/routers/apiWorkOrder.go index d1008a0..64487f7 100644 --- a/backend/my_work/routers/apiWorkOrder.go +++ b/backend/my_work/routers/apiWorkOrder.go @@ -2,8 +2,8 @@ package routers import ( "encoding/json" - "ops/models" parsefmt "fmt" + "ops/models" "slices" "time" @@ -12,7 +12,7 @@ import ( ) var ( - workOrderUserGroup models.TabUserGroups_ + workOrderUserGroup TabUserGroups workOrderAdmins []uint ) @@ -20,7 +20,7 @@ var ( func updateWorkOrderAdminsCash() { workOrderAdmins = nil workOrderAdmins = append(workOrderAdmins, 1) // id=1 超级管理员 - var binds []models.TabUserGroupBinds_ + var binds []TabUserGroupBinds models.DB.Where("group_id = ?", workOrderUserGroup.ID).Find(&binds) for _, item := range binds { if !slices.Contains(workOrderAdmins, item.UserID) { @@ -82,20 +82,20 @@ type TabWorkOrderLog struct { } type TabWorkOrderCommitFileBind struct { - ID uint `gorm:"primarykey"` - CommitID uint `gorm:"not null;index;comment:关联进度ID"` - FileID uint `gorm:"not null;comment:关联文件ID"` - WorkOrderID uint `gorm:"not null;index;comment:关联工单ID"` - CreatedAt *time.Time `gorm:"type:datetime;autoCreateTime"` + ID uint `gorm:"primarykey"` + CommitID uint `gorm:"not null;index;comment:关联进度ID"` + FileID uint `gorm:"not null;comment:关联文件ID"` + WorkOrderID uint `gorm:"not null;index;comment:关联工单ID"` + CreatedAt *time.Time `gorm:"type:datetime;autoCreateTime"` } // TabWorkOrderPurchaseOrderBind 工单与采购订单的关联表 type TabWorkOrderPurchaseOrderBind struct { - ID uint `gorm:"primarykey"` - WorkOrderID uint `gorm:"not null;index;comment:关联工单ID"` - CommitID uint `gorm:"not null;index;comment:关联进度ID"` - PurchaseOrderID uint `gorm:"not null;comment:关联采购订单ID"` - CreatedAt *time.Time `gorm:"type:datetime;autoCreateTime"` + ID uint `gorm:"primarykey"` + WorkOrderID uint `gorm:"not null;index;comment:关联工单ID"` + CommitID uint `gorm:"not null;index;comment:关联进度ID"` + PurchaseOrderID uint `gorm:"not null;comment:关联采购订单ID"` + CreatedAt *time.Time `gorm:"type:datetime;autoCreateTime"` } // PurchaseOrderInfo 采购订单简要信息 @@ -441,12 +441,12 @@ func ApiWorkOrder(r *gin.RouterGroup) { } ReturnJson(ctx, "apiOK", gin.H{ - "order": order, - "canModify": canModify, - "canCommit": canCommit, - "photos": files, - "commits": commitsWithPhotos, - "linkedItems": linkedItems, + "order": order, + "canModify": canModify, + "canCommit": canCommit, + "photos": files, + "commits": commitsWithPhotos, + "linkedItems": linkedItems, }) }) diff --git a/frontend/ops2_uniapp b/frontend/ops2_uniapp index 6532650..da9a303 160000 --- a/frontend/ops2_uniapp +++ b/frontend/ops2_uniapp @@ -1 +1 @@ -Subproject commit 6532650eb7396cbbf2d3918ebd88e37fe11d4948 +Subproject commit da9a303cb6b3dad5cdd0d2c4d9cabf1b17e9b9c5