From e5ab79c40dd80993250adebc74d56440558a4782 Mon Sep 17 00:00:00 2001 From: richjohnrambo Date: Sun, 20 Sep 2026 17:08:48 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=8B=86=E5=88=86=E5=95=86=E6=88=B7?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=92=8C=E7=BC=96=E8=BE=91=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/api/admin/imtenant/im_tenant.go | 12 ++++++-- .../controller/admin/sys/im_tenant.go | 6 ++++ server/internal/logic/sys/im_tenant.go | 29 ++++++++++++++++++- server/internal/service/sys.go | 4 ++- .../storage/data/generate/im_tenant_menu.sql | 22 +++++++++----- web/src/api/imTenant/index.ts | 11 ++++++- web/src/views/imTenant/edit.vue | 5 ++-- web/src/views/imTenant/index.vue | 2 +- 8 files changed, 76 insertions(+), 15 deletions(-) diff --git a/server/api/admin/imtenant/im_tenant.go b/server/api/admin/imtenant/im_tenant.go index a5eedb5..1d74ad6 100644 --- a/server/api/admin/imtenant/im_tenant.go +++ b/server/api/admin/imtenant/im_tenant.go @@ -33,9 +33,17 @@ type ViewRes struct { *sysin.ImTenantViewModel } -// EditReq 修改/新增IM租户 +// AddReq 新增IM租户 +type AddReq struct { + g.Meta `path:"/imTenant/add" method:"post" tags:"IM租户" summary:"新增IM租户"` + sysin.ImTenantEditInp +} + +type AddRes struct{} + +// EditReq 修改IM租户 type EditReq struct { - g.Meta `path:"/imTenant/edit" method:"post" tags:"IM租户" summary:"修改/新增IM租户"` + g.Meta `path:"/imTenant/edit" method:"post" tags:"IM租户" summary:"修改IM租户"` sysin.ImTenantEditInp } diff --git a/server/internal/controller/admin/sys/im_tenant.go b/server/internal/controller/admin/sys/im_tenant.go index 197fdd5..d8dd865 100644 --- a/server/internal/controller/admin/sys/im_tenant.go +++ b/server/internal/controller/admin/sys/im_tenant.go @@ -35,6 +35,12 @@ func (c *cImTenant) List(ctx context.Context, req *imtenant.ListReq) (res *imten return } +// Add 新增IM租户 +func (c *cImTenant) Add(ctx context.Context, req *imtenant.AddReq) (res *imtenant.AddRes, err error) { + err = service.SysImTenant().Add(ctx, &req.ImTenantEditInp) + return +} + // Edit 更新IM租户 func (c *cImTenant) Edit(ctx context.Context, req *imtenant.EditReq) (res *imtenant.EditRes, err error) { err = service.SysImTenant().Edit(ctx, &req.ImTenantEditInp) diff --git a/server/internal/logic/sys/im_tenant.go b/server/internal/logic/sys/im_tenant.go index 52820ba..f43db62 100644 --- a/server/internal/logic/sys/im_tenant.go +++ b/server/internal/logic/sys/im_tenant.go @@ -163,12 +163,39 @@ func (s *sSysImTenant) fillListConfig(ctx context.Context, list []*sysin.ImTenan return } -// Edit 修改/新增IM租户 +// Add 新增IM租户 +func (s *sSysImTenant) Add(ctx context.Context, in *sysin.ImTenantEditInp) (err error) { + if err = in.Filter(ctx); err != nil { + return + } + if !isImPlatformAdmin(ctx, contexts.GetUserId(ctx)) { + return gerror.New("只有平台管理员可以新增商户") + } + in.Id = 0 + return s.saveTenant(ctx, in) +} + +// Edit 修改IM租户 func (s *sSysImTenant) Edit(ctx context.Context, in *sysin.ImTenantEditInp) (err error) { if err = in.Filter(ctx); err != nil { return } + if in.Id <= 0 { + return gerror.New("商户ID不能为空") + } + if !isImPlatformAdmin(ctx, contexts.GetUserId(ctx)) { + tenantId := contexts.GetTenantId(ctx) + if tenantId <= 0 { + return gerror.New("当前管理员未关联IM租户") + } + if in.Id != tenantId { + return gerror.New("无权编辑其它商户") + } + } + return s.saveTenant(ctx, in) +} +func (s *sSysImTenant) saveTenant(ctx context.Context, in *sysin.ImTenantEditInp) (err error) { tenantID := in.Id err = imtenant.RegistryDB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) { if err = s.checkCodeUnique(ctx, in.Id, in.Code); err != nil { diff --git a/server/internal/service/sys.go b/server/internal/service/sys.go index 00b8a21..da72af2 100644 --- a/server/internal/service/sys.go +++ b/server/internal/service/sys.go @@ -194,7 +194,9 @@ type ( Model(ctx context.Context, option ...*handler.Option) *gdb.Model // List 获取IM租户列表 List(ctx context.Context, in *sysin.ImTenantListInp) (list []*sysin.ImTenantListModel, totalCount int, err error) - // Edit 修改/新增IM租户 + // Add 新增IM租户 + Add(ctx context.Context, in *sysin.ImTenantEditInp) (err error) + // Edit 修改IM租户 Edit(ctx context.Context, in *sysin.ImTenantEditInp) (err error) // View 获取IM租户指定信息 View(ctx context.Context, in *sysin.ImTenantViewInp) (res *sysin.ImTenantViewModel, err error) diff --git a/server/storage/data/generate/im_tenant_menu.sql b/server/storage/data/generate/im_tenant_menu.sql index 0d2d32e..eb5ba74 100644 --- a/server/storage/data/generate/im_tenant_menu.sql +++ b/server/storage/data/generate/im_tenant_menu.sql @@ -31,25 +31,33 @@ SELECT NULL, @tenantListId, '商户详情', 'imTenantView', '', '', '3', '', '/i WHERE NOT EXISTS (SELECT 1 FROM `hg_admin_menu` WHERE `name` = 'imTenantView'); INSERT INTO `hg_admin_menu` (`id`, `pid`, `title`, `name`, `path`, `icon`, `type`, `redirect`, `permissions`, `permission_name`, `component`, `always_show`, `active_menu`, `is_root`, `is_frame`, `frame_src`, `keep_alive`, `hidden`, `affix`, `level`, `tree`, `sort`, `remark`, `status`, `created_at`, `updated_at`) -SELECT NULL, @tenantListId, '编辑/新增商户', 'imTenantEdit', '', '', '3', '', '/imTenant/edit', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT('tr_', @imRootId, ' tr_', @tenantDirId, ' tr_', @tenantListId, ' '), '20', '', '1', @now, @now -WHERE NOT EXISTS (SELECT 1 FROM `hg_admin_menu` WHERE `name` = 'imTenantEdit'); +SELECT NULL, @tenantListId, '新增商户', 'imTenantAdd', '', '', '3', '', '/imTenant/add', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT('tr_', @imRootId, ' tr_', @tenantDirId, ' tr_', @tenantListId, ' '), '20', '', '1', @now, @now +WHERE NOT EXISTS (SELECT 1 FROM `hg_admin_menu` WHERE `name` = 'imTenantAdd'); INSERT INTO `hg_admin_menu` (`id`, `pid`, `title`, `name`, `path`, `icon`, `type`, `redirect`, `permissions`, `permission_name`, `component`, `always_show`, `active_menu`, `is_root`, `is_frame`, `frame_src`, `keep_alive`, `hidden`, `affix`, `level`, `tree`, `sort`, `remark`, `status`, `created_at`, `updated_at`) -SELECT NULL, @tenantListId, '修改商户状态', 'imTenantStatus', '', '', '3', '', '/imTenant/status', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT('tr_', @imRootId, ' tr_', @tenantDirId, ' tr_', @tenantListId, ' '), '30', '', '1', @now, @now +SELECT NULL, @tenantListId, '编辑商户', 'imTenantEdit', '', '', '3', '', '/imTenant/edit', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT('tr_', @imRootId, ' tr_', @tenantDirId, ' tr_', @tenantListId, ' '), '30', '', '1', @now, @now +WHERE NOT EXISTS (SELECT 1 FROM `hg_admin_menu` WHERE `name` = 'imTenantEdit'); + +UPDATE `hg_admin_menu` +SET `title` = '编辑商户', `permissions` = '/imTenant/edit', `sort` = '30', `updated_at` = @now +WHERE `name` = 'imTenantEdit'; + +INSERT INTO `hg_admin_menu` (`id`, `pid`, `title`, `name`, `path`, `icon`, `type`, `redirect`, `permissions`, `permission_name`, `component`, `always_show`, `active_menu`, `is_root`, `is_frame`, `frame_src`, `keep_alive`, `hidden`, `affix`, `level`, `tree`, `sort`, `remark`, `status`, `created_at`, `updated_at`) +SELECT NULL, @tenantListId, '修改商户状态', 'imTenantStatus', '', '', '3', '', '/imTenant/status', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT('tr_', @imRootId, ' tr_', @tenantDirId, ' tr_', @tenantListId, ' '), '40', '', '1', @now, @now WHERE NOT EXISTS (SELECT 1 FROM `hg_admin_menu` WHERE `name` = 'imTenantStatus'); INSERT INTO `hg_admin_menu` (`id`, `pid`, `title`, `name`, `path`, `icon`, `type`, `redirect`, `permissions`, `permission_name`, `component`, `always_show`, `active_menu`, `is_root`, `is_frame`, `frame_src`, `keep_alive`, `hidden`, `affix`, `level`, `tree`, `sort`, `remark`, `status`, `created_at`, `updated_at`) -SELECT NULL, @tenantListId, '商户用量与健康', 'imTenantUsage', '', '', '3', '', '/imTenant/usage', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT('tr_', @imRootId, ' tr_', @tenantDirId, ' tr_', @tenantListId, ' '), '40', '', '1', @now, @now +SELECT NULL, @tenantListId, '商户用量与健康', 'imTenantUsage', '', '', '3', '', '/imTenant/usage', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT('tr_', @imRootId, ' tr_', @tenantDirId, ' tr_', @tenantListId, ' '), '50', '', '1', @now, @now WHERE NOT EXISTS (SELECT 1 FROM `hg_admin_menu` WHERE `name` = 'imTenantUsage'); INSERT INTO `hg_admin_menu` (`id`, `pid`, `title`, `name`, `path`, `icon`, `type`, `redirect`, `permissions`, `permission_name`, `component`, `always_show`, `active_menu`, `is_root`, `is_frame`, `frame_src`, `keep_alive`, `hidden`, `affix`, `level`, `tree`, `sort`, `remark`, `status`, `created_at`, `updated_at`) -SELECT NULL, @tenantListId, '商户删除前检查', 'imTenantDeletionCheck', '', '', '3', '', '/imTenant/deletionCheck', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT('tr_', @imRootId, ' tr_', @tenantDirId, ' tr_', @tenantListId, ' '), '50', '', '1', @now, @now +SELECT NULL, @tenantListId, '商户删除前检查', 'imTenantDeletionCheck', '', '', '3', '', '/imTenant/deletionCheck', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT('tr_', @imRootId, ' tr_', @tenantDirId, ' tr_', @tenantListId, ' '), '60', '', '1', @now, @now WHERE NOT EXISTS (SELECT 1 FROM `hg_admin_menu` WHERE `name` = 'imTenantDeletionCheck'); INSERT INTO `hg_admin_menu` (`id`, `pid`, `title`, `name`, `path`, `icon`, `type`, `redirect`, `permissions`, `permission_name`, `component`, `always_show`, `active_menu`, `is_root`, `is_frame`, `frame_src`, `keep_alive`, `hidden`, `affix`, `level`, `tree`, `sort`, `remark`, `status`, `created_at`, `updated_at`) -SELECT NULL, @tenantListId, '商户进入删除流程', 'imTenantEnterDeleting', '', '', '3', '', '/imTenant/enterDeleting', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT('tr_', @imRootId, ' tr_', @tenantDirId, ' tr_', @tenantListId, ' '), '60', '', '1', @now, @now +SELECT NULL, @tenantListId, '商户进入删除流程', 'imTenantEnterDeleting', '', '', '3', '', '/imTenant/enterDeleting', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT('tr_', @imRootId, ' tr_', @tenantDirId, ' tr_', @tenantListId, ' '), '70', '', '1', @now, @now WHERE NOT EXISTS (SELECT 1 FROM `hg_admin_menu` WHERE `name` = 'imTenantEnterDeleting'); INSERT INTO `hg_admin_menu` (`id`, `pid`, `title`, `name`, `path`, `icon`, `type`, `redirect`, `permissions`, `permission_name`, `component`, `always_show`, `active_menu`, `is_root`, `is_frame`, `frame_src`, `keep_alive`, `hidden`, `affix`, `level`, `tree`, `sort`, `remark`, `status`, `created_at`, `updated_at`) -SELECT NULL, @tenantListId, '恢复商户', 'imTenantRestore', '', '', '3', '', '/imTenant/restore', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT('tr_', @imRootId, ' tr_', @tenantDirId, ' tr_', @tenantListId, ' '), '70', '', '1', @now, @now +SELECT NULL, @tenantListId, '恢复商户', 'imTenantRestore', '', '', '3', '', '/imTenant/restore', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT('tr_', @imRootId, ' tr_', @tenantDirId, ' tr_', @tenantListId, ' '), '80', '', '1', @now, @now WHERE NOT EXISTS (SELECT 1 FROM `hg_admin_menu` WHERE `name` = 'imTenantRestore'); diff --git a/web/src/api/imTenant/index.ts b/web/src/api/imTenant/index.ts index 0b5eff0..a1f4293 100644 --- a/web/src/api/imTenant/index.ts +++ b/web/src/api/imTenant/index.ts @@ -15,7 +15,16 @@ export async function List(params) { return res; } -// 添加/编辑IM商户 +// 添加IM商户 +export function Add(params) { + return http.request({ + url: '/imTenant/add', + method: 'POST', + params, + }); +} + +// 编辑IM商户 export function Edit(params) { return http.request({ url: '/imTenant/edit', diff --git a/web/src/views/imTenant/edit.vue b/web/src/views/imTenant/edit.vue index f6483a5..d83018f 100644 --- a/web/src/views/imTenant/edit.vue +++ b/web/src/views/imTenant/edit.vue @@ -126,7 +126,7 @@