This commit is contained in:
hero920103 committed 2026-11-11 18:42:09 +08:00
1 parent fb04d66e61
commit b6b528490c
13 files changed
+518 -168

No files matched your search

+17 -4
View File
@@ -194,9 +194,18 @@ func (c *AppAggregateController) noTenantHome(claims *jwtutil.Claims) map[string
}
}
// 展示姓名取统一身份昵称(个人中心可改),不再把账号/手机号当名字下发
displayName := ""
var ai models.AuthIdentity
if err := models.Orm.QueryTable(new(models.AuthIdentity)).
Filter("id", uint64(claims.UserID)).
Filter("delete_time__isnull", true).One(&ai); err == nil && ai.Nickname != nil {
displayName = strings.TrimSpace(*ai.Nickname)
}
return map[string]interface{}{
"user": map[string]interface{}{
"account": claims.Username, "tenant": "", "tid": 0, "need_tenant": true,
"name": displayName, "account": claims.Username, "tenant": "", "tid": 0, "need_tenant": true,
},
"modules": modules,
"menus": menus,
@@ -396,15 +405,19 @@ func (c *AppAggregateController) appUser(claims *jwtutil.Claims, uid, tid uint64
out := map[string]interface{}{
"uid": uid,
"tid": tid,
"name": "用户",
"name": "",
"account": "",
"role_name": "",
"tenant": "",
"tenant_id": tid,
"avatar": "",
}
if claims.Username != "" {
out["name"] = claims.Username
// 姓名只取真实资料(统一身份昵称,个人中心可改),不再用账号/手机号冒充
var ai models.AuthIdentity
if err := models.Orm.QueryTable(new(models.AuthIdentity)).
Filter("id", uint64(claims.UserID)).
Filter("delete_time__isnull", true).One(&ai); err == nil && ai.Nickname != nil {
out["name"] = strings.TrimSpace(*ai.Nickname)
}
var tu models.SystemTenantUser
if models.Orm.QueryTable(new(models.SystemTenantUser)).
+5 -3
View File
@@ -168,12 +168,14 @@ func (c *AppAuthController) UpdateCurrentUserProfile() {
}
uid := services.ResolveTenantUID(uint64(claims.TenantId), uint64(claims.UserID))
num, err := models.Orm.QueryTable(new(models.SystemTenantUser)).
// 尚未加入企业(tid=0)的新注册用户没有老表行,属正常情况;
// 姓名仍写入统一身份,工作台首页直接读它显示。
_, err = models.Orm.QueryTable(new(models.SystemTenantUser)).
Filter("uid", uid).
Filter("tid", claims.TenantId).
Update(map[string]interface{}{"name": name, "email": email})
if err != nil || num == 0 {
c.serveJSON(map[string]interface{}{"code": 400, "msg": "未找到当前企业下的用户资料"})
if err != nil {
c.serveJSON(map[string]interface{}{"code": 500, "msg": "资料更新失败,请重试"})
return
}
_, _ = models.Orm.QueryTable(new(models.AuthIdentity)).
+46 -30
View File
@@ -249,7 +249,9 @@ func (c *OnboardingController) issueNoTenantTokens(identityID uint64, mobile str
}
// Status GET /api/onboarding/status
// 返回企业绑定、最新申请状态、微信手机号(前端只读展示)。
// 返回已绑定企业列表、申请记录、微信手机号(前端只读展示)。
// 「我的 → 企业绑定」用 tenants + applies 展示多租户与审核进度;
// apply 保留最新一条,兼容首次加入企业的工作台分流逻辑。
func (c *OnboardingController) Status() {
cl := c.mustClaims()
if cl == nil {
@@ -264,46 +266,65 @@ func (c *OnboardingController) Status() {
mobile = *ai.Mobile
}
// 一人多企业:返回全部启用中的绑定,默认企业排在最前
var binds []models.AuthTenantUser
_, _ = models.Orm.QueryTable(new(models.AuthTenantUser)).
Filter("identity_id", identityID).
Filter("status", 1).
OrderBy("-is_default", "id").
All(&binds)
hasTenant := len(binds) > 0
tenants := make([]map[string]interface{}, 0, len(binds))
for _, b := range binds {
name := ""
var t models.SystemTenant
if err := models.Orm.QueryTable(new(models.SystemTenant)).Filter("id", b.Tid).One(&t); err == nil {
name = t.TenantName
}
tenants = append(tenants, map[string]interface{}{
"tid": b.Tid, "tenant_name": name, "is_default": b.IsDefault,
})
}
tenantName := ""
tid := uint64(0)
if hasTenant {
if len(tenants) > 0 {
tenantName, _ = tenants[0]["tenant_name"].(string)
tid = binds[0].Tid
var t models.SystemTenant
if err := models.Orm.QueryTable(new(models.SystemTenant)).Filter("id", tid).One(&t); err == nil {
tenantName = t.TenantName
}
}
var applyData interface{}
var apply models.AuthTenantApply
if err := models.Orm.QueryTable(new(models.AuthTenantApply)).
// 最近 20 条申请:可同时存在多家企业的待审绑定申请
var rows []models.AuthTenantApply
_, _ = models.Orm.QueryTable(new(models.AuthTenantApply)).
Filter("identity_id", identityID).
Filter("delete_time__isnull", true).
OrderBy("-id").One(&apply); err == nil {
applyData = map[string]interface{}{
"id": apply.ID,
"type": apply.Type,
"status": apply.Status,
"tenant_name": apply.TenantName,
"reject_reason": apply.RejectReason,
"department_name": apply.DepartmentName,
"position_name": apply.PositionName,
"applicant_name": apply.ApplicantName,
}
OrderBy("-id").Limit(20).
All(&rows)
applies := make([]map[string]interface{}, 0, len(rows))
for _, a := range rows {
applies = append(applies, map[string]interface{}{
"id": a.ID,
"type": a.Type,
"status": a.Status,
"tenant_name": a.TenantName,
"reject_reason": a.RejectReason,
"department_name": a.DepartmentName,
"position_name": a.PositionName,
"applicant_name": a.ApplicantName,
"create_time": a.CreateTime,
})
}
var applyData interface{}
if len(applies) > 0 {
applyData = applies[0]
}
c.ok(map[string]interface{}{
"has_tenant": hasTenant,
"has_tenant": len(tenants) > 0,
"tid": tid,
"tenant_name": tenantName,
"mobile": mobile,
"mobile_mask": maskPhone(mobile),
"tenants": tenants,
"applies": applies,
"apply": applyData,
})
}
@@ -383,10 +404,8 @@ func (c *OnboardingController) ApplyJoin() {
if cl == nil {
return
}
if c.hasTenant(uint64(cl.UserID)) {
c.fail(400, "你已加入企业,无需重复申请")
return
}
// 一人可绑定多家企业:已加入企业也能继续申请绑定其他企业。
// 「是否已绑定该企业 / 是否重复待审」由 CreateJoinApply 内部按 tid 判定。
var req struct {
Tid uint64 `json:"tid"`
ApplicantName string `json:"applicant_name"`
@@ -429,10 +448,7 @@ func (c *OnboardingController) ApplyCreate() {
if cl == nil {
return
}
if c.hasTenant(uint64(cl.UserID)) {
c.fail(400, "你已加入企业,无需重复申请")
return
}
// 多租户:已有企业也允许再创建一家(同身份只允许一条待审创建申请,由 CreateTenantApply 校验)
var req services.TenantCreateApplyInput
if !c.readJSON(&req) {
return