增加ai办公,考勤管理

This commit is contained in:
hero920103 committed 2026-11-14 18:15:55 +08:00
1 parent eb9b7beff5
commit 31ae07175d
46 files changed
+9250 -296

No files matched your search

+79
View File
@@ -141,6 +141,85 @@ func (c *BackendSiteSettingsController) GetNormalInfos() {
_ = c.ServeJSON()
}
// backendBrandOutput 后台顶栏品牌(Logo 优先用平台配置)
type backendBrandOutput struct {
Sitename string `json:"sitename"` // 主标题
Subtitle string `json:"subtitle"` // 副标题
Intro string `json:"intro"`
Ico string `json:"ico"` // 浏览器标签页图标(favicon)
LogoSquare string `json:"logoSquare"` // 正方形 Logo(浅色主题 / 顶栏小图标)
LogoRect string `json:"logoRect"` // 长方形 Logo(浅色主题 / 横向品牌图)
Logo string `json:"logo"` // 官网深色 Logo(浅色背景)
Logow string `json:"logow"` // 官网浅色 Logo(深色背景)
// 深色主题专用 Logo:留空时前端回退到上面的浅色主题版本
LogoSquareDark string `json:"logoSquareDark"`
LogoRectDark string `json:"logoRectDark"`
}
// GetBrand GET /backend/brand 后台顶栏品牌信息(顶栏左上角 Logo / 站点名 / 简介)
// 取值优先级:
// 1. 平台「系统设置 - 平台设置 - 平台信息」(logo_square / logo_rect / sitename / platform_intro)
// 2. 平台「官网管理 - 站点设置」(yz_platform_site_setting:logo 深色 / logow 浅色)
// 3. 平台「平台设置 - 登录页设置」的 login_logo(仅在以上都没配 logo 时兜底)
// 4. 当前租户自己的站点设置(yz_tenant_site_setting,租户在 backend「站点设置」上传的图片)
//
// 都没有配置时返回空串,前端保留内置的品牌占位标记。
func (c *BackendSiteSettingsController) GetBrand() {
claims, err := c.claimsByPath()
if err != nil {
code := identity.Status(err)
c.jsonErr(code, code, err.Error())
return
}
tags := models.GetPlatformSiteTagMap()
out := backendBrandOutput{
Sitename: strings.TrimSpace(tags["sitename"]),
Subtitle: strings.TrimSpace(tags["subtitle"]),
Intro: strings.TrimSpace(tags["platform_intro"]),
Ico: strings.TrimSpace(tags["ico"]),
LogoSquare: strings.TrimSpace(tags["logo_square"]),
LogoRect: strings.TrimSpace(tags["logo_rect"]),
LogoSquareDark: strings.TrimSpace(tags["logo_square_dark"]),
LogoRectDark: strings.TrimSpace(tags["logo_rect_dark"]),
Logo: strings.TrimSpace(tags["logo"]),
Logow: strings.TrimSpace(tags["logow"]),
}
if out.Logo == "" {
out.Logo = strings.TrimSpace(tags["login_logo"])
}
if out.Logo == "" {
out.Logo = out.LogoRect
}
// 平台未配置的项回落到租户站点设置,避免顶栏退化成占位标记
if out.Logo == "" || out.Logow == "" || out.Sitename == "" {
if tid := c.resolveBackendTenantID(claims, nil); tid > 0 {
var rows []models.TenantSiteSetting
if _, qerr := models.Orm.QueryTable(new(models.TenantSiteSetting)).
Filter("tid", tid).
Filter("delete_time__isnull", true).
Limit(1).
All(&rows); qerr == nil && len(rows) > 0 {
r := rows[0]
if out.Logo == "" {
out.Logo = strings.TrimSpace(r.Logo)
}
if out.Logow == "" {
out.Logow = strings.TrimSpace(r.Logow)
}
if out.Sitename == "" {
out.Sitename = strings.TrimSpace(r.Sitename)
}
}
}
}
c.Data["json"] = map[string]interface{}{"code": 200, "msg": "success", "data": out}
_ = c.ServeJSON()
}
type backendNormalInfosPayload struct {
// 前端会传 tid(但我们仍优先使用 token 的 tenant_id)
Tid interface{} `json:"tid"`