78 lines
2.4 KiB
Go
78 lines
2.4 KiB
Go
package models
|
|
|
|
import "time"
|
|
|
|
// FrontMenuDefault 全局默认前端导航项定义
|
|
type FrontMenuDefault struct {
|
|
Title string
|
|
Path string
|
|
Type int8 // 菜单类型:2 页面 / 4 单页
|
|
Sort int
|
|
}
|
|
|
|
// FrontMenuDefaults 所有租户共用的默认导航(不可删除)。
|
|
// 以 tenant_id=0 存放于同一张菜单表,表示全局共享:
|
|
// 租户端增删改接口都带 tenant_id 过滤,天然无法触碰这些行。
|
|
// 路径对应官网前台路由:新闻中心 /news,其余为单页 /page/:path
|
|
// (单页内容在 backend 端 - 单页管理 中按 path 维护)。
|
|
var FrontMenuDefaults = []FrontMenuDefault{
|
|
{Title: "新闻中心", Path: "/news", Type: 2, Sort: 1},
|
|
{Title: "产品展示", Path: "/page/products", Type: 4, Sort: 2},
|
|
{Title: "解决方案", Path: "/page/solutions", Type: 4, Sort: 3},
|
|
{Title: "关于我们", Path: "/page/about", Type: 4, Sort: 4},
|
|
{Title: "联系我们", Path: "/page/contact", Type: 4, Sort: 5},
|
|
}
|
|
|
|
// EnsureGlobalDefaultFrontMenus 保证全局默认导航(tenant_id=0)齐全:
|
|
// 缺失的自动新增;被误删(软删)的自动恢复;已存在(含改名)的不动。
|
|
// 以"在库生效数量 >= 默认项总数"作为短路条件,避免改名后重复插入。
|
|
// 供后台菜单列表与前台导航渲染前调用,任何失败均静默忽略不阻断主流程。
|
|
func EnsureGlobalDefaultFrontMenus() {
|
|
if Orm == nil {
|
|
return
|
|
}
|
|
qs := Orm.QueryTable(new(BackendMenuFront)).Filter("tenant_id", 0)
|
|
|
|
activeCnt, err := qs.Filter("delete_time__isnull", true).Count()
|
|
if err != nil || activeCnt >= int64(len(FrontMenuDefaults)) {
|
|
return
|
|
}
|
|
|
|
// 含软删记录一起取,用于恢复被误删的默认菜单
|
|
var rows []BackendMenuFront
|
|
if _, err := qs.All(&rows); err != nil {
|
|
return
|
|
}
|
|
exist := make(map[string]*BackendMenuFront, len(rows))
|
|
for i := range rows {
|
|
exist[rows[i].Title] = &rows[i]
|
|
}
|
|
|
|
now := time.Now()
|
|
for _, def := range FrontMenuDefaults {
|
|
if row, ok := exist[def.Title]; ok {
|
|
if row.DeleteTime != nil {
|
|
_, _ = Orm.QueryTable(new(BackendMenuFront)).
|
|
Filter("id", row.ID).
|
|
Update(map[string]interface{}{
|
|
"delete_time": nil,
|
|
"status": 1,
|
|
"is_visible": 1,
|
|
"update_time": now,
|
|
})
|
|
}
|
|
continue
|
|
}
|
|
_, _ = Orm.Insert(&BackendMenuFront{
|
|
TenantID: 0,
|
|
Pid: 0,
|
|
Title: def.Title,
|
|
Path: def.Path,
|
|
Sort: def.Sort,
|
|
Status: 1,
|
|
IsVisible: 1,
|
|
Type: def.Type,
|
|
})
|
|
}
|
|
}
|