package platform import ( "git.apinb.com/heqiapp/platforms/backend/api/internal/impl" "git.apinb.com/heqiapp/platforms/backend/api/internal/logic/common" "git.apinb.com/heqiapp/platforms/backend/api/internal/models" ) // Menu 是平台后台的静态菜单定义,不对应数据库表。 type Menu struct { Identity string `json:"identity"` ParentIdentity string `json:"parent_identity,omitempty"` GroupCode string `json:"group_code"` Name string `json:"name"` Icon string `json:"icon"` Path string `json:"path"` SortNo int `json:"sort_no"` Status int `json:"status"` } // PlatformMenus 使用二维数据组织菜单;每一行表示一个菜单分组。 var PlatformMenus = [][]Menu{ { {Identity: "dashboard", GroupCode: "dashboard", Name: "工作台", Icon: "icon-dashboard", Path: "/dashboard", SortNo: 10, Status: common.StatusEnable}, {Identity: "dashboard_overview", ParentIdentity: "dashboard", GroupCode: "dashboard", Name: "数据概览", Path: "/dashboard/overview", SortNo: 1, Status: common.StatusEnable}, {Identity: "dashboard_reports", ParentIdentity: "dashboard", GroupCode: "dashboard", Name: "统计报表", Path: "/dashboard/reports", SortNo: 2, Status: common.StatusEnable}, }, { {Identity: "organization", GroupCode: "organization", Name: "机构管理", Icon: "icon-storage", Path: "/organization", SortNo: 20, Status: common.StatusEnable}, {Identity: "gas_basic", ParentIdentity: "organization", GroupCode: "organization", Name: "气站管理", Path: "/gas/gas-basic", SortNo: 1, Status: common.StatusEnable}, {Identity: "delivery_basic", ParentIdentity: "organization", GroupCode: "organization", Name: "配送点管理", Path: "/delivery/delivery-basic", SortNo: 2, Status: common.StatusEnable}, }, { {Identity: "staff", GroupCode: "staff", Name: "工作人员管理", Icon: "icon-user-group", Path: "/staff", SortNo: 40, Status: common.StatusEnable}, {Identity: "staff_add", ParentIdentity: "staff", GroupCode: "staff", Name: "新增工作人员", Path: "/staff/add", SortNo: 1, Status: common.StatusEnable}, {Identity: "staff_installer", ParentIdentity: "staff", GroupCode: "staff", Name: "安装人员管理", Path: "/staff/installers", SortNo: 2, Status: common.StatusEnable}, {Identity: "staff_delivery", ParentIdentity: "staff", GroupCode: "staff", Name: "配送人员管理", Path: "/staff/delivery", SortNo: 3, Status: common.StatusEnable}, {Identity: "staff_operations", ParentIdentity: "staff", GroupCode: "staff", Name: "运维人员管理", Path: "/staff/operations", SortNo: 4, Status: common.StatusEnable}, }, { {Identity: "user", GroupCode: "user", Name: "用户管理", Icon: "icon-user", Path: "/user", SortNo: 50, Status: common.StatusEnable}, {Identity: "user_account", ParentIdentity: "user", GroupCode: "user", Name: "用户账户", Path: "/user/user-account", SortNo: 1, Status: common.StatusEnable}, {Identity: "user_address", ParentIdentity: "user", GroupCode: "user", Name: "用户地址", Path: "/user/user-address", SortNo: 2, Status: common.StatusEnable}, {Identity: "user_service_relation", ParentIdentity: "user", GroupCode: "user", Name: "服务关系", Path: "/user/service-relation", SortNo: 3, Status: common.StatusEnable}, }, { {Identity: "device", GroupCode: "device", Name: "智能气阀管理", Icon: "icon-common", Path: "/product", SortNo: 60, Status: common.StatusEnable}, {Identity: "product_type", ParentIdentity: "device", GroupCode: "device", Name: "类型管理", Path: "/product/product-type", SortNo: 1, Status: common.StatusEnable}, {Identity: "product_warehouse", ParentIdentity: "device", GroupCode: "device", Name: "库房管理", Path: "/product/warehouse", SortNo: 2, Status: common.StatusEnable}, {Identity: "product_info", ParentIdentity: "device", GroupCode: "device", Name: "智能气阀管理", Path: "/product/product-info", SortNo: 3, Status: common.StatusEnable}, }, { {Identity: "gasorder", GroupCode: "gasorder", Name: "气体配送订单管理", Icon: "icon-list", Path: "/gasorder", SortNo: 70, Status: common.StatusEnable}, {Identity: "gasorder_contract", ParentIdentity: "gasorder", GroupCode: "gasorder", Name: "合同管理", Path: "/gasorder/contracts", SortNo: 1, Status: common.StatusEnable}, {Identity: "gasorder_basic", ParentIdentity: "gasorder", GroupCode: "gasorder", Name: "配送订单", Path: "/gasorder/orders", SortNo: 2, Status: common.StatusEnable}, {Identity: "gasorder_track", ParentIdentity: "gasorder", GroupCode: "gasorder", Name: "运行轨迹", Path: "/gasorder/tracks", SortNo: 3, Status: common.StatusEnable}, }, { {Identity: "ec", GroupCode: "ec", Name: "商城管理", Icon: "icon-gift", Path: "/ec", SortNo: 80, Status: common.StatusEnable}, {Identity: "ec_category", ParentIdentity: "ec", GroupCode: "ec", Name: "商品分类", Path: "/ec/categories", SortNo: 1, Status: common.StatusEnable}, {Identity: "ec_product", ParentIdentity: "ec", GroupCode: "ec", Name: "商品", Path: "/ec/products", SortNo: 2, Status: common.StatusEnable}, {Identity: "ec_cart", ParentIdentity: "ec", GroupCode: "ec", Name: "购物车", Path: "/ec/carts", SortNo: 3, Status: common.StatusEnable}, {Identity: "ec_order", ParentIdentity: "ec", GroupCode: "ec", Name: "商城订单", Path: "/ec/orders", SortNo: 4, Status: common.StatusEnable}, {Identity: "ec_review", ParentIdentity: "ec", GroupCode: "ec", Name: "商品评价", Path: "/ec/reviews", SortNo: 5, Status: common.StatusEnable}, }, { {Identity: "wallet", GroupCode: "wallet", Name: "钱包管理", Icon: "icon-safe", Path: "/wallet", SortNo: 90, Status: common.StatusEnable}, {Identity: "wallet_basic", ParentIdentity: "wallet", GroupCode: "wallet", Name: "钱包", Path: "/wallet/wallet-basic", SortNo: 1, Status: common.StatusEnable}, {Identity: "wallet_bank", ParentIdentity: "wallet", GroupCode: "wallet", Name: "银行卡", Path: "/wallet/banks", SortNo: 2, Status: common.StatusEnable}, {Identity: "wallet_payment", ParentIdentity: "wallet", GroupCode: "wallet", Name: "支付记录", Path: "/wallet/payments", SortNo: 3, Status: common.StatusEnable}, {Identity: "wallet_record", ParentIdentity: "wallet", GroupCode: "wallet", Name: "钱包流水", Path: "/wallet/records", SortNo: 4, Status: common.StatusEnable}, {Identity: "wallet_refund", ParentIdentity: "wallet", GroupCode: "wallet", Name: "退款记录", Path: "/wallet/refunds", SortNo: 5, Status: common.StatusEnable}, {Identity: "wallet_apply_cash", ParentIdentity: "wallet", GroupCode: "wallet", Name: "提现申请", Path: "/wallet/apply-cash", SortNo: 6, Status: common.StatusEnable}, }, { {Identity: "finance", GroupCode: "finance", Name: "财务管理", Icon: "icon-bar-chart", Path: "/finance", SortNo: 100, Status: common.StatusEnable}, {Identity: "fin_payment", ParentIdentity: "finance", GroupCode: "finance", Name: "支付记录", Path: "/finance/payments", SortNo: 1, Status: common.StatusEnable}, {Identity: "fin_settlement", ParentIdentity: "finance", GroupCode: "finance", Name: "财务结算", Path: "/finance/settlements", SortNo: 2, Status: common.StatusEnable}, {Identity: "fin_reconciliation", ParentIdentity: "finance", GroupCode: "finance", Name: "财务对账", Path: "/finance/reconciliations", SortNo: 3, Status: common.StatusEnable}, }, { {Identity: "content", GroupCode: "content", Name: "内容管理", Icon: "icon-file", Path: "/content", SortNo: 110, Status: common.StatusEnable}, {Identity: "cms_content", ParentIdentity: "content", GroupCode: "content", Name: "内容", Path: "/content/contents", SortNo: 1, Status: common.StatusEnable}, }, { {Identity: "customer_service", GroupCode: "customer_service", Name: "客服管理", Icon: "icon-customer-service", Path: "/customer-service", SortNo: 120, Status: common.StatusEnable}, {Identity: "cs_ticket", ParentIdentity: "customer_service", GroupCode: "customer_service", Name: "客服工单", Path: "/customer-service/tickets", SortNo: 1, Status: common.StatusEnable}, }, { {Identity: "platform", GroupCode: "platform", Name: "平台管理", Icon: "icon-settings", Path: "/platform", SortNo: 130, Status: common.StatusEnable}, {Identity: "platform_account", ParentIdentity: "platform", GroupCode: "platform", Name: "平台账户", Path: "/platform/accounts", SortNo: 1, Status: common.StatusEnable}, {Identity: "platform_role", ParentIdentity: "platform", GroupCode: "platform", Name: "平台角色", Path: "/platform/roles", SortNo: 2, Status: common.StatusEnable}, {Identity: "platform_menu", ParentIdentity: "platform", GroupCode: "platform", Name: "平台菜单", Path: "/platform/menus", SortNo: 3, Status: common.StatusEnable}, }, } // AllPlatformMenus 返回静态菜单的扁平副本。 func AllPlatformMenus() []Menu { menus := make([]Menu, 0, len(PlatformMenus)) for _, group := range PlatformMenus { menus = append(menus, group...) } return menus } // FindPlatformMenu 根据稳定 identity 查找静态菜单。 func FindPlatformMenu(identity string) (Menu, bool) { for _, menu := range AllPlatformMenus() { if menu.Identity == identity { return menu, true } } return Menu{}, false } // LoadPlatformMenus 返回角色获授权的静态菜单;root 默认拥有全部菜单。 func LoadPlatformMenus(roleCode string) ([]Menu, error) { menus := AllPlatformMenus() if roleCode == "root" { return menus, nil } var role models.PlatformRole if err := impl.DBService.Where("role_code = ? AND status = ?", roleCode, common.StatusEnable).First(&role).Error; err != nil { return nil, err } var identities []string if err := impl.DBService.Model(&models.PlatformRoleMenu{}). Where("platform_role_id = ?", role.ID). Pluck("menu_identity", &identities).Error; err != nil { return nil, err } allowed := make(map[string]struct{}, len(identities)) for _, identity := range identities { allowed[identity] = struct{}{} } for _, menu := range menus { if _, ok := allowed[menu.Identity]; ok && menu.ParentIdentity != "" { allowed[menu.ParentIdentity] = struct{}{} } } filtered := make([]Menu, 0, len(menus)) for _, menu := range menus { if _, ok := allowed[menu.Identity]; ok { filtered = append(filtered, menu) } } return filtered, nil }