优化仪表盘等

This commit is contained in:
2025-11-13 11:28:00 +08:00
parent db16ee70de
commit 117e2b3440
18 changed files with 863 additions and 442 deletions
+44
View File
@@ -304,3 +304,47 @@ func (c *TaskController) DeleteTask() {
}
c.ServeJSON()
}
// 仪表盘获取待办任务
// GetTodoTasks 获取待办任务列表
// @router /api/oa/tasks/todo [get]
func (c *TaskController) GetTodoTasks() {
// 优先取查询参数,其次取中间件写入的上下文
tenantId, _ := c.GetInt("tenantId", 0)
if tenantId == 0 {
if v := c.Ctx.Input.GetData("tenantId"); v != nil {
if tid, ok := v.(int); ok {
tenantId = tid
}
}
}
id, _ := c.GetInt("id", 0)
if id == 0 {
if v := c.Ctx.Input.GetData("id"); v != nil {
if uid, ok := v.(int); ok {
id = uid
}
}
}
limit, _ := c.GetInt("limit", 10)
tasks, err := services.GetTodoTasks(tenantId, id, limit)
if err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "获取待办任务失败: " + err.Error(),
"data": nil,
}
c.ServeJSON()
return
}
c.Data["json"] = map[string]interface{}{
"code": 0,
"message": "获取成功",
"data": tasks,
}
c.ServeJSON()
}
+20
View File
@@ -0,0 +1,20 @@
-- 反馈表:sys_feedback(修复TEXT字段默认值错误)
CREATE TABLE `sys_feedback` (
`id` varchar(36) NOT NULL COMMENT 'ID',
`tenant_id` varchar(64) NOT NULL COMMENT '租户ID',
`feedback_name` varchar(50) DEFAULT '' COMMENT '反馈人姓名',
`module` varchar(30) NOT NULL COMMENT '反馈对应模块',
`feedback_type` varchar(20) NOT NULL COMMENT '反馈类型',
`content` text NOT NULL COMMENT '反馈详细内容',
`attachment_url` varchar(255) DEFAULT '' COMMENT '附件URL',
`handle_status` varchar(20) NOT NULL DEFAULT '0' COMMENT '处理状态(0-待处理/1-处理中/2-已解决/3-已驳回/4-无需处理)',
`handle_remark` text COMMENT '处理备注(移除默认值,TEXT类型不支持)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`) COMMENT '租户ID索引,优化租户级查询',
KEY `idx_module` (`module`) COMMENT '模块索引,优化模块级反馈统计',
KEY `idx_handle_status` (`handle_status`) COMMENT '处理状态索引,优化待处理反馈查询',
KEY `idx_create_time` (`create_time`) COMMENT '创建时间索引,优化时间范围查询'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通用反馈表(支持租户隔离、软删除)';
+3
View File
@@ -22,5 +22,8 @@ func main() {
}
})
// 静态资源:映射 /uploads 到本地 uploads 目录,供前端访问上传文件
beego.SetStaticPath("/uploads", "uploads")
beego.Run()
}
+4
View File
@@ -48,6 +48,10 @@ func (f *FileInfo) TableName() string {
return "yz_files"
}
func init() {
// Removed duplicate ORM registration
}
// CanPreview 判断文件是否可以在线预览
func (f *FileInfo) CanPreview() bool {
previewableExts := map[string]bool{
+15
View File
@@ -121,3 +121,18 @@ func UpdateTask(t *Task, cols ...string) error {
_, err := o.Update(t, cols...)
return err
}
// GetTodoTasks 获取待办任务列表
func GetTodoTasks(tenantId int, id int, limit int) (tasks []*Task, err error) {
o := orm.NewOrm()
qs := o.QueryTable(new(Task)).Filter("tenant_id", tenantId).Filter("deleted_time__isnull", true)
// 如果传了用户,则筛选负责人为该用户的任务
if id > 0 {
qs = qs.Filter("principal_id", id)
}
if limit <= 0 {
limit = 10
}
_, err = qs.OrderBy("-id").Limit(limit).All(&tasks)
return
}
+20 -19
View File
@@ -8,25 +8,26 @@ import (
)
type Tenant struct {
Id int `orm:"pk;auto" json:"id"`
Name string `orm:"size(100)" json:"name"`
Code string `orm:"size(50);unique" json:"code"`
Owner string `orm:"size(50)" json:"owner"`
Phone string `orm:"size(20);null" json:"phone"`
Email string `orm:"size(100);null" json:"email"`
Status int `orm:"default(1)" json:"status"`
AuditStatus string `orm:"size(20);default(pending)" json:"audit_status"`
AuditComment string `orm:"type(text);null" json:"audit_comment"`
AuditBy string `orm:"size(50);null" json:"audit_by"`
AuditTime *time.Time `orm:"null;type(datetime)" json:"audit_time"`
Capacity int `orm:"default(0)" json:"capacity"`
CapacityUsed int `orm:"default(0)" json:"capacity_used"`
Remark string `orm:"type(text);null" json:"remark"`
CreateTime time.Time `orm:"auto_now_add;type(datetime)" json:"create_time"`
UpdateTime time.Time `orm:"auto_now;type(datetime)" json:"update_time"`
DeleteTime *time.Time `orm:"null;type(datetime)" json:"delete_time"`
CreateBy string `orm:"size(50);null" json:"create_by"`
UpdateBy string `orm:"size(50);null" json:"update_by"`
Id int `orm:"pk;auto" json:"id"`
Name string `orm:"size(100)" json:"name"`
Code string `orm:"size(50);unique" json:"code"`
Owner string `orm:"size(50)" json:"owner"`
Phone string `orm:"size(20);null" json:"phone"`
Email string `orm:"size(100);null" json:"email"`
Status int `orm:"default(1)" json:"status"`
AuditStatus string `orm:"size(20);default(pending)" json:"audit_status"`
AuditComment string `orm:"type(text);null" json:"audit_comment"`
AuditBy string `orm:"size(50);null" json:"audit_by"`
AuditTime *time.Time `orm:"null;type(datetime)" json:"audit_time"`
Capacity int `orm:"default(0)" json:"capacity"`
CapacityUsed int `orm:"default(0)" json:"capacity_used"`
AttachmentUrl string `orm:"size(255);null" json:"attachment_url"`
Remark string `orm:"type(text);null" json:"remark"`
CreateTime time.Time `orm:"auto_now_add;type(datetime)" json:"create_time"`
UpdateTime time.Time `orm:"auto_now;type(datetime)" json:"update_time"`
DeleteTime *time.Time `orm:"null;type(datetime)" json:"delete_time"`
CreateBy string `orm:"size(50);null" json:"create_by"`
UpdateBy string `orm:"size(50);null" json:"update_by"`
}
// TableName 设置表名
+3
View File
@@ -270,6 +270,8 @@ func init() {
// 文件管理路由 - 手动配置以匹配前端的 /api/files 路径
beego.Router("/api/files", &controllers.FileController{}, "get:GetAllFiles")
beego.Router("/api/files", &controllers.FileController{}, "post:Post")
// 兼容前端上传地址 /api/files/upload -> 复用 Post 处理上传
beego.Router("/api/files/upload", &controllers.FileController{}, "post:Post")
beego.Router("/api/files/my", &controllers.FileController{}, "get:GetMyFiles")
beego.Router("/api/files/download/:id", &controllers.FileController{}, "get:DownloadFile")
beego.Router("/api/files/preview/:id", &controllers.FileController{}, "get:PreviewFile")
@@ -315,6 +317,7 @@ func init() {
// OA任务管理路由
beego.Router("/api/oa/tasks", &controllers.TaskController{}, "get:GetTasks;post:CreateTask")
beego.Router("/api/oa/tasks/:id", &controllers.TaskController{}, "get:GetTaskById;put:UpdateTask;delete:DeleteTask")
beego.Router("/api/oa/tasks/todo", &controllers.TaskController{}, "get:GetTodoTasks")
// 权限管理路由
beego.Router("/api/permissions/menus", &controllers.PermissionController{}, "get:GetAllMenuPermissions")
+5
View File
@@ -69,3 +69,8 @@ func DeleteOATask(id int, operatorName string, operatorId int) error {
func genTaskNo(tenantId int) string {
return fmt.Sprintf("TASK%d%s", tenantId, time.Now().Format("20060102150405"))
}
// 仪表盘获取待办任务
func GetTodoTasks(tenantId int, id int, limit int) (tasks []*models.Task, err error) {
return models.GetTodoTasks(tenantId, id, limit)
}