增加功能报价

This commit is contained in:
2026-09-16 00:22:17 +08:00
parent 71a14c46f9
commit 60b2658d4b
32 changed files with 3578 additions and 77 deletions
+36 -5
View File
@@ -6,10 +6,18 @@ import (
"server/models"
"server/pkg/jwtutil"
"server/services"
beego "github.com/beego/beego/v2/server/web"
)
// tenantModuleItem 模块列表返回项:在模块基础信息上补充套餐开通状态,
// locked=true 表示该模块不在当前租户已购套餐内(前端置灰并提示购买套餐)。
type tenantModuleItem struct {
models.SystemModules
Locked bool `json:"locked"`
}
// BackendModulesController backend 模块接口(yz_system_modules)
type BackendModulesController struct {
beego.Controller
@@ -41,14 +49,16 @@ func (c *BackendModulesController) jsonErr(httpStatus, bizCode int, msg string)
}
// GetTenantList GET /backend/modules/getTenantList
// 返回当前 backend 账号可见的模块。当前实现:返回 status=1 且 is_show=1 的全部模块。
// 返回当前 backend 账号可见的模块(status=1 且 is_show=1)。
// 同时按当前租户已购套餐标记 locked:未开通的功能模块前端置灰、禁止跳转并提示购买套餐。
func (c *BackendModulesController) GetTenantList() {
if _, err := c.backendModulesClaims(); err != nil {
claims, err := c.backendModulesClaims()
if err != nil {
c.jsonErr(401, 401, err.Error())
return
}
var rows []models.SystemModules
_, err := models.Orm.QueryTable(new(models.SystemModules)).
_, err = models.Orm.QueryTable(new(models.SystemModules)).
Filter("delete_time__isnull", true).
Filter("status", 1).
Filter("is_show", 1).
@@ -58,12 +68,33 @@ func (c *BackendModulesController) GetTenantList() {
c.jsonErr(500, 500, "获取失败:"+err.Error())
return
}
// 租户已开通的模块编码集合(来自租户绑定/生效套餐)
allowed := map[string]bool{}
packageName := ""
if tid := uint64(claims.TenantId); tid > 0 {
allowed = services.GetTenantModuleCodes(tid)
if pkg, e := services.GetTenantPackage(tid); e == nil && pkg != nil {
packageName = pkg.Name
}
}
list := make([]tenantModuleItem, 0, len(rows))
for _, m := range rows {
// 安全兜底:租户未绑定套餐或套餐未配置任何功能模块时不做锁定,
// 避免套餐数据缺失导致全部功能不可用。
locked := len(allowed) > 0 && !allowed[strings.TrimSpace(m.Code)]
list = append(list, tenantModuleItem{SystemModules: m, Locked: locked})
}
c.Data["json"] = map[string]interface{}{
"code": 200,
"msg": "获取成功",
"data": map[string]interface{}{
"list": rows,
"total": len(rows),
"list": list,
"total": len(list),
"package_name": packageName,
"purchase_url": services.GetPackagePurchaseURL(),
},
}
_ = c.ServeJSON()