移除轮询
This commit is contained in:
@@ -242,14 +242,7 @@ const handleMarkAllRead = async () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleMessagesChanged = () => {
|
// 根据菜单列表和当前路径计算出的面包屑导航
|
||||||
fetchUnreadCount();
|
|
||||||
fetchMessages();
|
|
||||||
};
|
|
||||||
|
|
||||||
let timer: any = null;
|
|
||||||
|
|
||||||
// 根据菜单列表和当前路径计算出的面包屑导航
|
|
||||||
const breadcrumbs = computed(() => {
|
const breadcrumbs = computed(() => {
|
||||||
let chain: Breadcrumb[] = [];
|
let chain: Breadcrumb[] = [];
|
||||||
let currentPath = route.path || '/';
|
let currentPath = route.path || '/';
|
||||||
@@ -433,9 +426,8 @@ onMounted(async () => {
|
|||||||
mediaQuery.addEventListener('change', handleChange);
|
mediaQuery.addEventListener('change', handleChange);
|
||||||
|
|
||||||
if (authStore.token) {
|
if (authStore.token) {
|
||||||
|
// 仅在后台页面刷新/首次挂载时更新未读数量,不再自动轮询。
|
||||||
fetchUnreadCount();
|
fetchUnreadCount();
|
||||||
timer = setInterval(fetchUnreadCount, 60000);
|
|
||||||
window.addEventListener('site-messages-changed', handleMessagesChanged);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -444,10 +436,6 @@ onUnmounted(() => {
|
|||||||
if (mediaQuery && handleChange) {
|
if (mediaQuery && handleChange) {
|
||||||
mediaQuery.removeEventListener('change', handleChange);
|
mediaQuery.removeEventListener('change', handleChange);
|
||||||
}
|
}
|
||||||
if (timer) {
|
|
||||||
clearInterval(timer);
|
|
||||||
}
|
|
||||||
window.removeEventListener('site-messages-changed', handleMessagesChanged);
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
|
|
||||||
"server/models"
|
"server/models"
|
||||||
"server/pkg/jwtutil"
|
"server/pkg/jwtutil"
|
||||||
|
"server/services"
|
||||||
|
|
||||||
"github.com/beego/beego/v2/client/orm"
|
"github.com/beego/beego/v2/client/orm"
|
||||||
beego "github.com/beego/beego/v2/server/web"
|
beego "github.com/beego/beego/v2/server/web"
|
||||||
@@ -133,10 +134,13 @@ func (c *BackendOperationLogController) List() {
|
|||||||
|
|
||||||
list := make([]map[string]interface{}, 0, len(rows))
|
list := make([]map[string]interface{}, 0, len(rows))
|
||||||
for i := range rows {
|
for i := range rows {
|
||||||
|
userAccount, userName := services.OperationLogUser(rows[i].Tid, rows[i].UserID)
|
||||||
item := map[string]interface{}{
|
item := map[string]interface{}{
|
||||||
"id": rows[i].ID,
|
"id": rows[i].ID,
|
||||||
"tid": rows[i].Tid,
|
"tid": rows[i].Tid,
|
||||||
"user_id": rows[i].UserID,
|
"user_id": rows[i].UserID,
|
||||||
|
"user_account": userAccount,
|
||||||
|
"user_name": userName,
|
||||||
"module": rows[i].Module,
|
"module": rows[i].Module,
|
||||||
"action": rows[i].Action,
|
"action": rows[i].Action,
|
||||||
"method": rows[i].Method,
|
"method": rows[i].Method,
|
||||||
@@ -189,10 +193,13 @@ func (c *BackendOperationLogController) Detail() {
|
|||||||
c.jsonErr(404, 404, "记录不存在")
|
c.jsonErr(404, 404, "记录不存在")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
userAccount, userName := services.OperationLogUser(row.Tid, row.UserID)
|
||||||
out := map[string]interface{}{
|
out := map[string]interface{}{
|
||||||
"id": row.ID,
|
"id": row.ID,
|
||||||
"tid": row.Tid,
|
"tid": row.Tid,
|
||||||
"user_id": row.UserID,
|
"user_id": row.UserID,
|
||||||
|
"user_account": userAccount,
|
||||||
|
"user_name": userName,
|
||||||
"module": row.Module,
|
"module": row.Module,
|
||||||
"action": row.Action,
|
"action": row.Action,
|
||||||
"method": row.Method,
|
"method": row.Method,
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
|
|
||||||
"server/models"
|
"server/models"
|
||||||
"server/pkg/jwtutil"
|
"server/pkg/jwtutil"
|
||||||
|
"server/services"
|
||||||
|
|
||||||
"github.com/beego/beego/v2/client/orm"
|
"github.com/beego/beego/v2/client/orm"
|
||||||
beego "github.com/beego/beego/v2/server/web"
|
beego "github.com/beego/beego/v2/server/web"
|
||||||
@@ -133,10 +134,13 @@ func (c *PlatformOperationLogController) List() {
|
|||||||
|
|
||||||
list := make([]map[string]interface{}, 0, len(rows))
|
list := make([]map[string]interface{}, 0, len(rows))
|
||||||
for i := range rows {
|
for i := range rows {
|
||||||
|
userAccount, userName := services.OperationLogUser(rows[i].Tid, rows[i].UserID)
|
||||||
item := map[string]interface{}{
|
item := map[string]interface{}{
|
||||||
"id": rows[i].ID,
|
"id": rows[i].ID,
|
||||||
"tid": rows[i].Tid,
|
"tid": rows[i].Tid,
|
||||||
"user_id": rows[i].UserID,
|
"user_id": rows[i].UserID,
|
||||||
|
"user_account": userAccount,
|
||||||
|
"user_name": userName,
|
||||||
"module": rows[i].Module,
|
"module": rows[i].Module,
|
||||||
"action": rows[i].Action,
|
"action": rows[i].Action,
|
||||||
"method": rows[i].Method,
|
"method": rows[i].Method,
|
||||||
@@ -189,10 +193,13 @@ func (c *PlatformOperationLogController) Detail() {
|
|||||||
c.jsonErr(404, 404, "记录不存在")
|
c.jsonErr(404, 404, "记录不存在")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
userAccount, userName := services.OperationLogUser(row.Tid, row.UserID)
|
||||||
out := map[string]interface{}{
|
out := map[string]interface{}{
|
||||||
"id": row.ID,
|
"id": row.ID,
|
||||||
"tid": row.Tid,
|
"tid": row.Tid,
|
||||||
"user_id": row.UserID,
|
"user_id": row.UserID,
|
||||||
|
"user_account": userAccount,
|
||||||
|
"user_name": userName,
|
||||||
"module": row.Module,
|
"module": row.Module,
|
||||||
"action": row.Action,
|
"action": row.Action,
|
||||||
"method": row.Method,
|
"method": row.Method,
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package services
|
||||||
|
|
||||||
|
import "server/models"
|
||||||
|
|
||||||
|
// OperationLogUser 根据操作日志的租户范围解析操作人信息。
|
||||||
|
// tid 为空或为 0 时,日志来自平台管理员;否则来自租户用户。
|
||||||
|
func OperationLogUser(tid *uint64, userID uint64) (account, name string) {
|
||||||
|
if userID == 0 {
|
||||||
|
return "", ""
|
||||||
|
}
|
||||||
|
|
||||||
|
if tid != nil && *tid != 0 {
|
||||||
|
var user models.SystemTenantUser
|
||||||
|
if err := models.Orm.QueryTable(new(models.SystemTenantUser)).
|
||||||
|
Filter("tid", *tid).
|
||||||
|
Filter("uid", userID).
|
||||||
|
One(&user); err == nil {
|
||||||
|
if user.Account != nil {
|
||||||
|
account = *user.Account
|
||||||
|
}
|
||||||
|
if user.Name != nil {
|
||||||
|
name = *user.Name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return account, name
|
||||||
|
}
|
||||||
|
|
||||||
|
var user models.AdminUser
|
||||||
|
if err := models.Orm.QueryTable(new(models.AdminUser)).
|
||||||
|
Filter("id", userID).
|
||||||
|
One(&user); err == nil {
|
||||||
|
account = user.Account
|
||||||
|
if user.Name != nil {
|
||||||
|
name = *user.Name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return account, name
|
||||||
|
}
|
||||||
@@ -8,34 +8,29 @@ import (
|
|||||||
"server/models"
|
"server/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
/* findTenantByLoginName 根据租户简称、短名或编码查找租户。
|
|
||||||
*
|
|
||||||
* 当前表结构中 tenant_name 的业务含义就是“租户简称”,同时兼容
|
|
||||||
* tenant_short_name 和 tenant_code 两个历史/备用登录标识。
|
|
||||||
*/
|
|
||||||
func findTenantByLoginName(loginName string) (*models.SystemTenant, error) {
|
func findTenantByLoginName(loginName string) (*models.SystemTenant, error) {
|
||||||
loginName = strings.TrimSpace(loginName)
|
loginName = strings.TrimSpace(loginName)
|
||||||
if loginName == "" {
|
if loginName == "" {
|
||||||
return nil, orm.ErrNoRows
|
return nil, orm.ErrNoRows
|
||||||
}
|
}
|
||||||
|
|
||||||
// tenant_name 的业务含义是租户简称。使用 TRIM 兼容历史数据中字段值
|
qs := models.Orm.QueryTable(new(models.SystemTenant)).
|
||||||
// 前后存在空格的情况;参数通过 SetArgs 绑定,避免 SQL 注入。
|
Filter("status", 1).
|
||||||
|
Filter("delete_time__isnull", true)
|
||||||
|
|
||||||
tenant := &models.SystemTenant{}
|
tenant := &models.SystemTenant{}
|
||||||
query := `
|
err := qs.Filter("tenant_name", loginName).One(tenant)
|
||||||
SELECT id, tenant_code, tenant_name, tenant_short_name,
|
if err == nil {
|
||||||
contact_person, contact_phone, contact_email, address,
|
return tenant, nil
|
||||||
worktime, status, remark, create_time, update_time, delete_time
|
}
|
||||||
FROM yz_system_tenant
|
|
||||||
WHERE (TRIM(tenant_name) = TRIM(?) OR
|
tenant = &models.SystemTenant{}
|
||||||
TRIM(tenant_short_name) = TRIM(?) OR
|
err = models.Orm.QueryTable(new(models.SystemTenant)).
|
||||||
TRIM(tenant_code) = TRIM(?))
|
Filter("status", 1).
|
||||||
AND status <> 0
|
Filter("delete_time__isnull", true).
|
||||||
ORDER BY id ASC
|
Filter("tenant_code", loginName).
|
||||||
LIMIT 1`
|
One(tenant)
|
||||||
err := models.Orm.Raw(query).
|
|
||||||
SetArgs(loginName, loginName, loginName).
|
|
||||||
QueryRow(tenant)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user