From ee4f87db50cd6340ad14153bb929d7ff9f84450b Mon Sep 17 00:00:00 2001 From: ila Date: Thu, 27 Aug 2026 09:20:44 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=85=B3=E8=81=94=E5=AD=97=E6=AE=B5=E6=98=A0?= =?UTF-8?q?=E5=B0=84=20(#71)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/app/admin/models/sys_menu.go | 2 +- admin/app/admin/service/sys_menu_test.go | 43 ++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 admin/app/admin/service/sys_menu_test.go diff --git a/admin/app/admin/models/sys_menu.go b/admin/app/admin/models/sys_menu.go index 785fe9e..a5f3a4a 100644 --- a/admin/app/admin/models/sys_menu.go +++ b/admin/app/admin/models/sys_menu.go @@ -19,7 +19,7 @@ type SysMenu struct { Sort int `json:"sort" gorm:"size:4;"` Visible string `json:"visible" gorm:"size:1;"` IsFrame string `json:"isFrame" gorm:"size:1;DEFAULT:0;"` - SysApi []SysApi `json:"sysApi" gorm:"many2many:sys_menu_api_rule"` + SysApi []SysApi `json:"sysApi" gorm:"many2many:sys_menu_api_rule;foreignKey:MenuId;joinForeignKey:menu_id;references:Id;joinReferences:sys_api_id"` Apis []int `json:"apis" gorm:"-"` DataScope string `json:"dataScope" gorm:"-"` Params string `json:"params" gorm:"-"` diff --git a/admin/app/admin/service/sys_menu_test.go b/admin/app/admin/service/sys_menu_test.go new file mode 100644 index 0000000..5f86bba --- /dev/null +++ b/admin/app/admin/service/sys_menu_test.go @@ -0,0 +1,43 @@ +package service + +import ( + "testing" + + adminSDKService "github.com/go-admin-team/go-admin-core/sdk/service" + "gorm.io/driver/sqlite" + "gorm.io/gorm" + + "git.ilapage.cn/OPC/chorus/admin/app/admin/models" + "git.ilapage.cn/OPC/chorus/admin/app/admin/service/dto" +) + +func TestSysMenuGetPagePreloadsAPIsUsingMigrationJoinColumns(t *testing.T) { + db, err := gorm.Open(sqlite.Open("file:"+t.Name()+"?mode=memory&cache=shared"), &gorm.Config{}) + if err != nil { + t.Fatal(err) + } + + statements := []string{ + `CREATE TABLE sys_menu (menu_id INTEGER PRIMARY KEY, title TEXT, sort INTEGER, parent_id INTEGER, deleted_at DATETIME)`, + `CREATE TABLE sys_api (id INTEGER PRIMARY KEY, title TEXT, deleted_at DATETIME)`, + `CREATE TABLE sys_menu_api_rule (menu_id INTEGER NOT NULL, sys_api_id INTEGER NOT NULL, PRIMARY KEY (menu_id, sys_api_id))`, + `INSERT INTO sys_menu (menu_id, title, sort, parent_id) VALUES (1, '菜单结构', 1, 0)`, + `INSERT INTO sys_api (id, title) VALUES (7, '菜单列表')`, + `INSERT INTO sys_menu_api_rule (menu_id, sys_api_id) VALUES (1, 7)`, + } + for _, statement := range statements { + if err := db.Exec(statement).Error; err != nil { + t.Fatal(err) + } + } + + menuService := SysMenu{Service: adminSDKService.Service{Orm: db}} + var menus []models.SysMenu + menuService.GetPage(&dto.SysMenuGetPageReq{}, &menus) + if menuService.Error != nil { + t.Fatalf("get menu page: %v", menuService.Error) + } + if len(menus) != 1 || len(menus[0].SysApi) != 1 || menus[0].SysApi[0].Id != 7 { + t.Fatalf("menus = %#v", menus) + } +}