package sys import ( "context" "hotgo/internal/library/imworkbench" "hotgo/internal/model/input/sysin" "hotgo/internal/service" "net/url" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" ) type sSysImWorkbench struct{} func NewSysImWorkbench() *sSysImWorkbench { return &sSysImWorkbench{} } func init() { service.RegisterSysImWorkbench(NewSysImWorkbench()) } func (s *sSysImWorkbench) List(ctx context.Context, in *sysin.ImWorkbenchAppListInp) (list []*sysin.ImWorkbenchAppModel, totalCount int, err error) { if err = in.Filter(ctx); err != nil { return } tenant, err := resolveImAdminTenant(ctx, in.TenantId) if err != nil { return } values := url.Values{} values.Set("page", intToString(in.Page)) values.Set("per_page", intToString(in.PerPage)) if in.Code != "" { values.Set("code", in.Code) } if in.Name != "" { values.Set("name", in.Name) } if in.Enabled != nil { values.Set("enabled", intToString(*in.Enabled)) } var page imworkbench.Page[sysin.ImWorkbenchAppModel] if err = imworkbench.DefaultClient(ctx).Get(ctx, "/internal/admin/workbench/apps", values, &page); err != nil { return nil, 0, err } list = make([]*sysin.ImWorkbenchAppModel, 0, len(page.Items)) for i := range page.Items { item := page.Items[i] item.TenantId = tenant.Id item.TenantName = tenant.Name list = append(list, &item) } return list, page.Total, nil } func (s *sSysImWorkbench) Edit(ctx context.Context, in *sysin.ImWorkbenchAppEditInp) (err error) { if err = in.Filter(ctx); err != nil { return } tenant, err := resolveImAdminTenant(ctx, in.TenantId) if err != nil { return } data := g.Map{ "id": in.Id, "code": in.Code, "name": in.Name, "icon_file_id": in.IconFileId, "route": in.Route, "sort_order": in.SortOrder, "unread_key": in.UnreadKey, "enabled": in.Enabled, "permission": in.Permission, } action := "im_workbench_app_create" targetId := in.Id if in.Id > 0 { action = "im_workbench_app_update" } var res sysin.ImWorkbenchAppModel if err = imworkbench.DefaultClient(ctx).Post(ctx, "/internal/admin/workbench/apps", data, &res); err != nil { return err } if targetId <= 0 { targetId = res.Id } _ = writeImAdminAudit(ctx, tenant.Id, action, "im_workbench_app", targetId, "success", g.Map{ "code": in.Code, "route": in.Route, "enabled": in.Enabled, "permission": in.Permission, }) return nil } func (s *sSysImWorkbench) Delete(ctx context.Context, in *sysin.ImWorkbenchAppDeleteInp) (err error) { if err = in.Filter(ctx); err != nil { return } tenant, err := resolveImAdminTenant(ctx, in.TenantId) if err != nil { return } if err = imworkbench.DefaultClient(ctx).Post(ctx, "/internal/admin/workbench/apps/disable", g.Map{"id": in.Id, "code": in.Code}, nil); err != nil { return err } _ = writeImAdminAudit(ctx, tenant.Id, "im_workbench_app_disable", "im_workbench_app", in.Id, "success", g.Map{"code": in.Code}) return nil } func (s *sSysImWorkbench) Reorder(ctx context.Context, in *sysin.ImWorkbenchAppReorderInp) (err error) { if err = in.Filter(ctx); err != nil { return } tenant, err := resolveImAdminTenant(ctx, in.TenantId) if err != nil { return } items := make([]g.Map, 0, len(in.Items)) for _, item := range in.Items { items = append(items, g.Map{ "code": item.Code, "sort_order": item.SortOrder, }) } if err = imworkbench.DefaultClient(ctx).Post(ctx, "/internal/admin/workbench/apps/reorder", g.Map{"items": items}, nil); err != nil { if err.Error() == "" { return gerror.New("调整IM工作台模块排序失败,请稍后重试!") } return err } _ = writeImAdminAudit(ctx, tenant.Id, "im_workbench_app_reorder", "im_workbench_app", 0, "success", g.Map{"count": len(in.Items)}) return nil }