feat: 统一IM后台商户文案和默认选择
This commit is contained in:
@@ -239,6 +239,17 @@ func (s *sSysImUser) List(ctx context.Context, in *sysin.ImUserListInp) (list []
|
||||
if err = fillImUserRegisterTypes(ctx, tenant.Id, list); err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
page := in.Page
|
||||
if page < 1 {
|
||||
page = 1
|
||||
}
|
||||
perPage := in.PerPage
|
||||
if perPage < 1 {
|
||||
perPage = 10
|
||||
}
|
||||
for index, item := range list {
|
||||
item.DisplayNo = 1000 + (page-1)*perPage + index
|
||||
}
|
||||
return list, totalCount, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@ func (in *ImUserListInp) Filter(ctx context.Context) (err error) {
|
||||
type ImUserListModel struct {
|
||||
TenantId int64 `json:"tenantId" dc:"租户ID"`
|
||||
TenantName string `json:"tenantName" dc:"租户名称"`
|
||||
DisplayNo int `json:"displayNo" dc:"后台展示编号"`
|
||||
UserId string `json:"userId" dc:"用户ID"`
|
||||
Username string `json:"username" dc:"登录账号"`
|
||||
Phone string `json:"phone" dc:"手机号"`
|
||||
|
||||
@@ -11,6 +11,11 @@ FROM (
|
||||
SELECT '登录失败日志','imLoginFailureLogIndex','login-failure-log/index','/imLoginFailureLog/list','/imLoginFailureLog/index',55
|
||||
) p WHERE NOT EXISTS (SELECT 1 FROM `hg_admin_menu` m WHERE m.`name`=p.name);
|
||||
|
||||
UPDATE `hg_admin_menu`
|
||||
SET `pid`=@imRootId, `icon`='DashboardOutlined', `type`=2, `level`=2,
|
||||
`tree`=CONCAT('tr_',@imRootId,' '), `sort`=5, `updated_at`=@now
|
||||
WHERE `name`='imDashboardIndex';
|
||||
|
||||
SET @dashboardId := (SELECT `id` FROM `hg_admin_menu` WHERE `name`='imDashboardIndex' LIMIT 1);
|
||||
SET @privateMessageId := (SELECT `id` FROM `hg_admin_menu` WHERE `name`='imPrivateMessageIndex' LIMIT 1);
|
||||
SET @groupMessageId := (SELECT `id` FROM `hg_admin_menu` WHERE `name`='imGroupMessageIndex' LIMIT 1);
|
||||
|
||||
@@ -30,6 +30,7 @@ UPDATE `hg_admin_menu` SET `pid`=@imRootId, `title`='用户与群组', `path`='p
|
||||
UPDATE `hg_admin_menu` SET `pid`=@imRootId, `title`='内容审核', `path`='content', `icon`='FileSearchOutlined', `type`=1, `redirect`='/im/content/private-message/index', `component`='ParentLayout', `always_show`=1, `hidden`=0, `status`=1, `level`=2, `tree`=CONCAT('tr_', @imRootId, ' '), `sort`=20, `updated_at`=@now WHERE `id`=@contentId;
|
||||
UPDATE `hg_admin_menu` SET `pid`=@imRootId, `title`='日志审计', `path`='audit', `icon`='AuditOutlined', `type`=1, `redirect`='/im/audit/operation/index', `component`='ParentLayout', `always_show`=1, `hidden`=0, `status`=1, `level`=2, `tree`=CONCAT('tr_', @imRootId, ' '), `sort`=30, `updated_at`=@now WHERE `id`=@auditId;
|
||||
UPDATE `hg_admin_menu` SET `pid`=@imRootId, `title`='系统设置', `path`='settings', `icon`='SettingOutlined', `type`=1, `redirect`='/im/settings/tenant/index', `component`='ParentLayout', `always_show`=1, `hidden`=0, `status`=1, `level`=2, `tree`=CONCAT('tr_', @imRootId, ' '), `sort`=40, `updated_at`=@now WHERE `id`=@settingsId;
|
||||
UPDATE `hg_admin_menu` SET `pid`=@imRootId, `icon`='DashboardOutlined', `type`=2, `level`=2, `tree`=CONCAT('tr_', @imRootId, ' '), `sort`=5, `updated_at`=@now WHERE `name`='imDashboardIndex';
|
||||
UPDATE `hg_admin_menu` SET `redirect`='/im/dashboard/index', `updated_at`=@now WHERE `id`=@imRootId;
|
||||
|
||||
-- User and group management.
|
||||
@@ -59,7 +60,7 @@ UPDATE `hg_admin_menu` SET `pid`=@auditId, `path`='dead-letter/index', `level`=3
|
||||
UPDATE `hg_admin_menu` SET `pid`=@auditId, `path`='task-dashboard/index', `level`=3, `tree`=CONCAT('tr_', @imRootId, ' tr_', @auditId, ' '), `sort`=80, `updated_at`=@now WHERE `name`='imTaskDashboardIndex';
|
||||
|
||||
-- System and tenant settings.
|
||||
UPDATE `hg_admin_menu` SET `pid`=@settingsId, `title`='租户管理', `path`='tenant/index', `level`=3, `tree`=CONCAT('tr_', @imRootId, ' tr_', @settingsId, ' '), `sort`=10, `updated_at`=@now WHERE `name`='imTenantIndex';
|
||||
UPDATE `hg_admin_menu` SET `pid`=@settingsId, `title`='商户管理', `path`='tenant/index', `level`=3, `tree`=CONCAT('tr_', @imRootId, ' tr_', @settingsId, ' '), `sort`=10, `updated_at`=@now WHERE `name`='imTenantIndex';
|
||||
UPDATE `hg_admin_menu` SET `pid`=@settingsId, `path`='security-policy/index', `level`=3, `tree`=CONCAT('tr_', @imRootId, ' tr_', @settingsId, ' '), `sort`=20, `updated_at`=@now WHERE `name`='imSecurityPolicyIndex';
|
||||
UPDATE `hg_admin_menu` SET `pid`=@settingsId, `path`='file-policy/index', `level`=3, `tree`=CONCAT('tr_', @imRootId, ' tr_', @settingsId, ' '), `sort`=30, `updated_at`=@now WHERE `name`='imFilePolicyIndex';
|
||||
UPDATE `hg_admin_menu` SET `pid`=@settingsId, `path`='workbench/index', `level`=3, `tree`=CONCAT('tr_', @imRootId, ' tr_', @settingsId, ' '), `sort`=40, `updated_at`=@now WHERE `name`='imWorkbenchIndex';
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
UPDATE `hg_admin_menu` SET `title` = 'IM管理' WHERE `name` = 'imManager';
|
||||
UPDATE `hg_admin_menu` SET `title` = '租户管理' WHERE `name` = 'imTenant';
|
||||
UPDATE `hg_admin_menu` SET `title` = '租户列表' WHERE `name` = 'imTenantIndex';
|
||||
UPDATE `hg_admin_menu` SET `title` = '租户详情' WHERE `name` = 'imTenantView';
|
||||
UPDATE `hg_admin_menu` SET `title` = '新增/编辑租户' WHERE `name` = 'imTenantEdit';
|
||||
UPDATE `hg_admin_menu` SET `title` = '启用/停用租户' WHERE `name` = 'imTenantStatus';
|
||||
UPDATE `hg_admin_menu` SET `title` = '租户用量统计' WHERE `name` = 'imTenantUsage';
|
||||
UPDATE `hg_admin_menu` SET `title` = '租户删除检查' WHERE `name` = 'imTenantDeletionCheck';
|
||||
UPDATE `hg_admin_menu` SET `title` = '商户管理' WHERE `name` = 'imTenant';
|
||||
UPDATE `hg_admin_menu` SET `title` = '商户列表' WHERE `name` = 'imTenantIndex';
|
||||
UPDATE `hg_admin_menu` SET `title` = '商户详情' WHERE `name` = 'imTenantView';
|
||||
UPDATE `hg_admin_menu` SET `title` = '新增/编辑商户' WHERE `name` = 'imTenantEdit';
|
||||
UPDATE `hg_admin_menu` SET `title` = '启用/停用商户' WHERE `name` = 'imTenantStatus';
|
||||
UPDATE `hg_admin_menu` SET `title` = '商户用量统计' WHERE `name` = 'imTenantUsage';
|
||||
UPDATE `hg_admin_menu` SET `title` = '商户删除检查' WHERE `name` = 'imTenantDeletionCheck';
|
||||
UPDATE `hg_admin_menu` SET `title` = '进入删除保护期' WHERE `name` = 'imTenantEnterDeleting';
|
||||
UPDATE `hg_admin_menu` SET `title` = '恢复租户' WHERE `name` = 'imTenantRestore';
|
||||
UPDATE `hg_admin_menu` SET `title` = '恢复商户' WHERE `name` = 'imTenantRestore';
|
||||
|
||||
UPDATE `hg_admin_menu` SET `title` = '用户管理' WHERE `name` = 'imUser';
|
||||
UPDATE `hg_admin_menu` SET `title` = '用户列表' WHERE `name` = 'imUserIndex';
|
||||
|
||||
@@ -67,10 +67,10 @@ FROM (
|
||||
SELECT @abuseReasonId, '原因禁用', 'imAbuseReasonDelete', '/imAbuseReason/delete', 3, CONCAT('tr_', @imRootId, ' tr_', @abuseReasonId, ' '), 20 UNION ALL
|
||||
SELECT @mailboxConfigId, '信箱配置更新', 'imMailboxConfigUpdate', '/imMailboxConfig/update', 3, CONCAT('tr_', @imRootId, ' tr_', @mailboxConfigId, ' '), 10 UNION ALL
|
||||
SELECT @feedbackConfigId, '反馈配置更新', 'imFeedbackConfigUpdate', '/imFeedbackConfig/update', 3, CONCAT('tr_', @imRootId, ' tr_', @feedbackConfigId, ' '), 10 UNION ALL
|
||||
SELECT @tenantListId, '租户用量与健康', 'imTenantUsage', '/imTenant/usage', 4, CONCAT('tr_', @imRootId, ' tr_', (SELECT `pid` FROM `hg_admin_menu` WHERE `id` = @tenantListId), ' tr_', @tenantListId, ' '), 40 UNION ALL
|
||||
SELECT @tenantListId, '租户删除前检查', 'imTenantDeletionCheck', '/imTenant/deletionCheck', 4, CONCAT('tr_', @imRootId, ' tr_', (SELECT `pid` FROM `hg_admin_menu` WHERE `id` = @tenantListId), ' tr_', @tenantListId, ' '), 50 UNION ALL
|
||||
SELECT @tenantListId, '租户进入删除流程', 'imTenantEnterDeleting', '/imTenant/enterDeleting', 4, CONCAT('tr_', @imRootId, ' tr_', (SELECT `pid` FROM `hg_admin_menu` WHERE `id` = @tenantListId), ' tr_', @tenantListId, ' '), 60 UNION ALL
|
||||
SELECT @tenantListId, '恢复租户', 'imTenantRestore', '/imTenant/restore', 4, CONCAT('tr_', @imRootId, ' tr_', (SELECT `pid` FROM `hg_admin_menu` WHERE `id` = @tenantListId), ' tr_', @tenantListId, ' '), 70 UNION ALL
|
||||
SELECT @tenantListId, '商户用量与健康', 'imTenantUsage', '/imTenant/usage', 4, CONCAT('tr_', @imRootId, ' tr_', (SELECT `pid` FROM `hg_admin_menu` WHERE `id` = @tenantListId), ' tr_', @tenantListId, ' '), 40 UNION ALL
|
||||
SELECT @tenantListId, '商户删除前检查', 'imTenantDeletionCheck', '/imTenant/deletionCheck', 4, CONCAT('tr_', @imRootId, ' tr_', (SELECT `pid` FROM `hg_admin_menu` WHERE `id` = @tenantListId), ' tr_', @tenantListId, ' '), 50 UNION ALL
|
||||
SELECT @tenantListId, '商户进入删除流程', 'imTenantEnterDeleting', '/imTenant/enterDeleting', 4, CONCAT('tr_', @imRootId, ' tr_', (SELECT `pid` FROM `hg_admin_menu` WHERE `id` = @tenantListId), ' tr_', @tenantListId, ' '), 60 UNION ALL
|
||||
SELECT @tenantListId, '恢复商户', 'imTenantRestore', '/imTenant/restore', 4, CONCAT('tr_', @imRootId, ' tr_', (SELECT `pid` FROM `hg_admin_menu` WHERE `id` = @tenantListId), ' tr_', @tenantListId, ' '), 70 UNION ALL
|
||||
SELECT @auditLogId, '导出审计日志', 'imAuditLogExport', '/imAuditLog/export', 3, CONCAT('tr_', @imRootId, ' tr_', @auditLogId, ' '), 20
|
||||
) p
|
||||
WHERE parent_id IS NOT NULL
|
||||
|
||||
@@ -25,12 +25,12 @@ SET @now = NOW();
|
||||
SELECT @groupMenuId := `id` FROM `hg_admin_menu` WHERE `name` = 'imUserPolicyGroupIndex' LIMIT 1;
|
||||
|
||||
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, @groupMenuId, '查看租户登录IP白名单', 'imTenantLoginIPWhitelist', '', '', '3', '', '/imUserPolicyGroup/loginIPWhitelist', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT(`tree`, 'tr_', `id`, ' '), '9', '', '1', @now, @now
|
||||
SELECT NULL, @groupMenuId, '查看商户登录IP白名单', 'imTenantLoginIPWhitelist', '', '', '3', '', '/imUserPolicyGroup/loginIPWhitelist', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT(`tree`, 'tr_', `id`, ' '), '9', '', '1', @now, @now
|
||||
FROM `hg_admin_menu` WHERE `id` = @groupMenuId
|
||||
AND NOT EXISTS (SELECT 1 FROM `hg_admin_menu` WHERE `name` = 'imTenantLoginIPWhitelist');
|
||||
|
||||
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, @groupMenuId, '保存租户登录IP白名单', 'imTenantLoginIPWhitelistSave', '', '', '3', '', '/imUserPolicyGroup/loginIPWhitelistSave', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT(`tree`, 'tr_', `id`, ' '), '10', '', '1', @now, @now
|
||||
SELECT NULL, @groupMenuId, '保存商户登录IP白名单', 'imTenantLoginIPWhitelistSave', '', '', '3', '', '/imUserPolicyGroup/loginIPWhitelistSave', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT(`tree`, 'tr_', `id`, ' '), '10', '', '1', @now, @now
|
||||
FROM `hg_admin_menu` WHERE `id` = @groupMenuId
|
||||
AND NOT EXISTS (SELECT 1 FROM `hg_admin_menu` WHERE `name` = 'imTenantLoginIPWhitelistSave');
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ SELECT @imRootId := `id` FROM `hg_admin_menu` WHERE `name` = 'imManager' LIMIT 1
|
||||
SELECT @tenantDirId := `id` FROM `hg_admin_menu` WHERE `name` = 'imTenant' LIMIT 1;
|
||||
|
||||
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, @imRootId, '租户管理', 'imTenant', 'tenant', '', '1', '/im/tenant/index', '', '', 'ParentLayout', '1', '', '0', '0', '', '0', '0', '0', '2', CONCAT('tr_', @imRootId, ' '), '10', '', '1', @now, @now
|
||||
SELECT NULL, @imRootId, '商户管理', 'imTenant', 'tenant', '', '1', '/im/tenant/index', '', '', 'ParentLayout', '1', '', '0', '0', '', '0', '0', '0', '2', CONCAT('tr_', @imRootId, ' '), '10', '', '1', @now, @now
|
||||
WHERE @tenantDirId IS NULL;
|
||||
|
||||
SELECT @tenantDirId := `id` FROM `hg_admin_menu` WHERE `name` = 'imTenant' LIMIT 1;
|
||||
@@ -19,35 +19,35 @@ SELECT @tenantDirId := `id` FROM `hg_admin_menu` WHERE `name` = 'imTenant' LIMIT
|
||||
SELECT @tenantListId := `id` FROM `hg_admin_menu` WHERE `name` = 'imTenantIndex' LIMIT 1;
|
||||
|
||||
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, @tenantDirId, '租户列表', 'imTenantIndex', 'index', '', '2', '', '/imTenant/list', '', '/imTenant/index', '1', 'imTenant', '0', '0', '', '0', '0', '0', '3', CONCAT('tr_', @imRootId, ' tr_', @tenantDirId, ' '), '10', '', '1', @now, @now
|
||||
SELECT NULL, @tenantDirId, '商户列表', 'imTenantIndex', 'index', '', '2', '', '/imTenant/list', '', '/imTenant/index', '1', 'imTenant', '0', '0', '', '0', '0', '0', '3', CONCAT('tr_', @imRootId, ' tr_', @tenantDirId, ' '), '10', '', '1', @now, @now
|
||||
WHERE @tenantListId IS NULL;
|
||||
|
||||
SELECT @tenantListId := `id` FROM `hg_admin_menu` WHERE `name` = 'imTenantIndex' LIMIT 1;
|
||||
|
||||
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, '租户详情', 'imTenantView', '', '', '3', '', '/imTenant/view', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT('tr_', @imRootId, ' tr_', @tenantDirId, ' tr_', @tenantListId, ' '), '10', '', '1', @now, @now
|
||||
SELECT NULL, @tenantListId, '商户详情', 'imTenantView', '', '', '3', '', '/imTenant/view', '', '', '1', '', '0', '0', '', '0', '1', '0', '4', CONCAT('tr_', @imRootId, ' tr_', @tenantDirId, ' tr_', @tenantListId, ' '), '10', '', '1', @now, @now
|
||||
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
|
||||
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');
|
||||
|
||||
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, '修改商户状态', 'imTenantStatus', '', '', '3', '', '/imTenant/status', '', '', '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` = '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, ' '), '40', '', '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, ' '), '50', '', '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, ' '), '60', '', '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, ' '), '70', '', '1', @now, @now
|
||||
WHERE NOT EXISTS (SELECT 1 FROM `hg_admin_menu` WHERE `name` = 'imTenantRestore');
|
||||
|
||||
@@ -1,15 +1,21 @@
|
||||
import { http } from '@/utils/http/axios';
|
||||
|
||||
// 获取IM租户列表
|
||||
export function List(params) {
|
||||
return http.request({
|
||||
// 获取IM商户列表
|
||||
export async function List(params) {
|
||||
const res: any = await http.request({
|
||||
url: '/imTenant/list',
|
||||
method: 'get',
|
||||
params,
|
||||
});
|
||||
if (Array.isArray(res?.list)) {
|
||||
res.list = [...res.list].sort((left, right) => {
|
||||
return Number(right.code === 'default') - Number(left.code === 'default');
|
||||
});
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
// 添加/编辑IM租户
|
||||
// 添加/编辑IM商户
|
||||
export function Edit(params) {
|
||||
return http.request({
|
||||
url: '/imTenant/edit',
|
||||
@@ -18,7 +24,7 @@ export function Edit(params) {
|
||||
});
|
||||
}
|
||||
|
||||
// 修改IM租户状态
|
||||
// 修改IM商户状态
|
||||
export function Status(params) {
|
||||
return http.request({
|
||||
url: '/imTenant/status',
|
||||
@@ -27,7 +33,7 @@ export function Status(params) {
|
||||
});
|
||||
}
|
||||
|
||||
// 获取IM租户指定详情
|
||||
// 获取IM商户指定详情
|
||||
export function View(params) {
|
||||
return http.request({
|
||||
url: '/imTenant/view',
|
||||
@@ -36,7 +42,7 @@ export function View(params) {
|
||||
});
|
||||
}
|
||||
|
||||
// 获取IM租户用量和健康状态
|
||||
// 获取IM商户用量和健康状态
|
||||
export function Usage(params) {
|
||||
return http.request({
|
||||
url: '/imTenant/usage',
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="n-layout-page-header">
|
||||
<n-card :bordered="false" title="IM注册邀请码" />
|
||||
<n-card :bordered="false" title="邀请码管理" />
|
||||
</div>
|
||||
<n-card :bordered="false" class="proCard">
|
||||
<BasicForm
|
||||
@@ -158,7 +158,7 @@
|
||||
function handleCreate(batch: boolean) {
|
||||
const tenantId = selectedTenantId();
|
||||
if (isPlatformAdmin.value && !tenantId) {
|
||||
message.warning('请先选择租户');
|
||||
message.warning('请先选择商户');
|
||||
return;
|
||||
}
|
||||
createRef.value.openModal(tenantId, batch);
|
||||
@@ -215,9 +215,10 @@
|
||||
loadOptions();
|
||||
if (isPlatformAdmin.value) {
|
||||
await loadTenantOptions();
|
||||
await setFieldsValue({ tenantId: null });
|
||||
if (tenantOptions.value.length === 0) {
|
||||
message.warning('暂无可用租户');
|
||||
if (tenantOptions.value.length > 0) {
|
||||
await setFieldsValue({ tenantId: tenantOptions.value[0].value });
|
||||
} else {
|
||||
message.warning('暂无可用商户');
|
||||
}
|
||||
}
|
||||
reloadTable();
|
||||
|
||||
@@ -33,11 +33,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: true,
|
||||
options: computed(() => tenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -99,7 +99,7 @@ export const schemas = ref<FormSchema[]>([
|
||||
|
||||
export const columns = [
|
||||
{ title: 'ID', key: 'id', align: 'left', width: 150 },
|
||||
{ title: '租户', key: 'tenantName', align: 'left', width: 160 },
|
||||
{ title: '商户', key: 'tenantName', align: 'left', width: 160 },
|
||||
{ title: '邀请码', key: 'code', align: 'left', width: 120 },
|
||||
{ title: '状态', key: 'status', align: 'left', width: 110 },
|
||||
{ title: '批次ID', key: 'batchId', align: 'left', width: 150 },
|
||||
|
||||
@@ -253,7 +253,7 @@
|
||||
if (tenantOptions.value.length > 0) {
|
||||
await setFieldsValue({ tenantId: tenantOptions.value[0].value });
|
||||
} else {
|
||||
message.warning('暂无可用租户');
|
||||
message.warning('暂无可用商户');
|
||||
}
|
||||
}
|
||||
reloadTable();
|
||||
|
||||
@@ -38,11 +38,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: false,
|
||||
options: computed(() => tenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -234,7 +234,7 @@
|
||||
if (tenantOptions.value.length > 0) {
|
||||
await setFieldsValue({ tenantId: tenantOptions.value[0].value });
|
||||
} else {
|
||||
message.warning('暂无可用租户');
|
||||
message.warning('暂无可用商户');
|
||||
}
|
||||
}
|
||||
reloadTable();
|
||||
|
||||
@@ -42,11 +42,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: false,
|
||||
options: computed(() => tenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
function handleExport() {
|
||||
const params = { ...searchFormRef.value?.formModel };
|
||||
if (isPlatformAdmin.value && !params.tenantId) {
|
||||
message.warning('请选择租户');
|
||||
message.warning('请选择商户');
|
||||
return;
|
||||
}
|
||||
Export(params);
|
||||
@@ -128,7 +128,7 @@
|
||||
if (tenantOptions.value.length > 0) {
|
||||
await setFieldsValue({ tenantId: tenantOptions.value[0].value });
|
||||
} else {
|
||||
message.warning('暂无可用租户');
|
||||
message.warning('暂无可用商户');
|
||||
}
|
||||
}
|
||||
reloadTable();
|
||||
|
||||
@@ -41,11 +41,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: false,
|
||||
options: computed(() => tenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<n-scrollbar style="max-height: 87vh" class="pr-5">
|
||||
<n-spin :show="loading" description="请稍候...">
|
||||
<n-descriptions label-placement="left" bordered :column="settingStore.isMobile ? 1 : 2">
|
||||
<n-descriptions-item label="租户">{{ formValue.tenantName }}</n-descriptions-item>
|
||||
<n-descriptions-item label="商户">{{ formValue.tenantName }}</n-descriptions-item>
|
||||
<n-descriptions-item label="操作时间">{{ formValue.createdAt || '-' }}</n-descriptions-item>
|
||||
<n-descriptions-item label="操作人UID">{{ formValue.actorUid }}</n-descriptions-item>
|
||||
<n-descriptions-item label="角色">{{ formValue.actorRole || '-' }}</n-descriptions-item>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
v-model:value="tenantId"
|
||||
:options="imQueryTenantOptions"
|
||||
class="tenant-select"
|
||||
placeholder="请选择租户"
|
||||
placeholder="请选择商户"
|
||||
/>
|
||||
<n-select v-model:value="days" :options="dayOptions" class="days-select" />
|
||||
<n-button type="primary" :loading="loading" @click="loadDashboard">刷新</n-button>
|
||||
@@ -72,7 +72,7 @@
|
||||
|
||||
async function loadDashboard() {
|
||||
if (isPlatformAdmin.value && !tenantId.value) {
|
||||
message.warning('请选择租户');
|
||||
message.warning('请选择商户');
|
||||
return;
|
||||
}
|
||||
loading.value = true;
|
||||
@@ -90,7 +90,7 @@
|
||||
if (isPlatformAdmin.value) {
|
||||
await loadImQueryTenantOptions();
|
||||
tenantId.value = imQueryTenantOptions.value[0]?.value || 0;
|
||||
if (!tenantId.value) message.warning('暂无可用租户');
|
||||
if (!tenantId.value) message.warning('暂无可用商户');
|
||||
}
|
||||
if (!isPlatformAdmin.value || tenantId.value) await loadDashboard();
|
||||
});
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="n-layout-page-header">
|
||||
<n-card :bordered="false" title="IM Kafka死信"></n-card>
|
||||
<n-card :bordered="false" title="IM Kafka死信" />
|
||||
</div>
|
||||
<n-card :bordered="false" class="proCard">
|
||||
<BasicForm
|
||||
@@ -30,7 +30,7 @@
|
||||
import { BasicTable, TableAction } from '@/components/Table';
|
||||
import { BasicForm, useForm } from '@/components/Form/index';
|
||||
import { List } from '@/api/imDeadLetter';
|
||||
import { columns, loadOptions, loadTenantOptions, schemas, State } from './model';
|
||||
import { columns, loadOptions, loadTenantOptions, schemas, State, tenantOptions } from './model';
|
||||
import { adaTableScrollX } from '@/utils/hotgo';
|
||||
import ViewModal from './view.vue';
|
||||
|
||||
@@ -48,7 +48,13 @@
|
||||
render(record: State) {
|
||||
return h(TableAction as any, {
|
||||
style: 'button',
|
||||
actions: [{ label: '详情', onClick: () => viewRef.value.openModal(record, currentTenantId.value), auth: ['/imDeadLetter/view'] }],
|
||||
actions: [
|
||||
{
|
||||
label: '详情',
|
||||
onClick: () => viewRef.value.openModal(record, currentTenantId.value),
|
||||
auth: ['/imDeadLetter/view'],
|
||||
},
|
||||
],
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -56,7 +62,7 @@
|
||||
const scrollX = computed(() => adaTableScrollX(columns, actionColumn.width));
|
||||
const currentTenantId = computed(() => searchFormRef.value?.formModel?.tenantId || 0);
|
||||
|
||||
const [register] = useForm({
|
||||
const [register, { setFieldsValue }] = useForm({
|
||||
gridProps: { cols: '1 s:1 m:2 l:3 xl:4 2xl:4' },
|
||||
labelWidth: 90,
|
||||
schemas,
|
||||
@@ -66,7 +72,11 @@
|
||||
if (!currentTenantId.value) {
|
||||
return { list: [], totalCount: 0 };
|
||||
}
|
||||
const params = { ...searchFormRef.value?.formModel, limit: res.pageSize || res.perPage || 50, cursor: cursor.value };
|
||||
const params = {
|
||||
...searchFormRef.value?.formModel,
|
||||
limit: res.pageSize || res.perPage || 50,
|
||||
cursor: cursor.value,
|
||||
};
|
||||
const data = await List(params);
|
||||
hasMore.value = !!data?.hasMore;
|
||||
cursor.value = data?.nextCursor || '';
|
||||
@@ -82,6 +92,9 @@
|
||||
onMounted(async () => {
|
||||
loadOptions();
|
||||
await loadTenantOptions();
|
||||
if (tenantOptions.value.length > 0) {
|
||||
await setFieldsValue({ tenantId: tenantOptions.value[0].value });
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
@@ -46,11 +46,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: true,
|
||||
options: computed(() => tenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
if (tenantOptions.value.length > 0) {
|
||||
await setFieldsValue({ tenantId: tenantOptions.value[0].value });
|
||||
} else {
|
||||
message.warning('暂无可用租户');
|
||||
message.warning('暂无可用商户');
|
||||
}
|
||||
}
|
||||
reloadTable();
|
||||
|
||||
@@ -42,11 +42,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: false,
|
||||
options: computed(() => tenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -11,11 +11,11 @@
|
||||
label-placement="left"
|
||||
label-width="120"
|
||||
>
|
||||
<n-form-item v-if="isPlatformAdmin" label="租户">
|
||||
<n-form-item v-if="isPlatformAdmin" label="商户">
|
||||
<n-select
|
||||
v-model:value="selectedTenantId"
|
||||
:options="tenantOptions"
|
||||
placeholder="请选择租户"
|
||||
placeholder="请选择商户"
|
||||
@update:value="loadConfig"
|
||||
/>
|
||||
</n-form-item>
|
||||
@@ -133,7 +133,7 @@
|
||||
if (isPlatformAdmin.value) {
|
||||
await loadTenantOptions();
|
||||
if (tenantOptions.value.length > 0) selectedTenantId.value = tenantOptions.value[0].value;
|
||||
else message.warning('暂无可用租户');
|
||||
else message.warning('暂无可用商户');
|
||||
}
|
||||
await loadConfig();
|
||||
});
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
function handleCleanupOrphan() {
|
||||
const params = searchFormRef.value?.formModel || {};
|
||||
if (isPlatformAdmin.value && !params.tenantId) {
|
||||
message.warning('请先选择租户');
|
||||
message.warning('请先选择商户');
|
||||
return;
|
||||
}
|
||||
dialog.warning({
|
||||
@@ -173,7 +173,7 @@
|
||||
if (tenantOptions.value.length > 0) {
|
||||
await setFieldsValue({ tenantId: tenantOptions.value[0].value });
|
||||
} else {
|
||||
message.warning('暂无可用租户');
|
||||
message.warning('暂无可用商户');
|
||||
}
|
||||
}
|
||||
reloadTable();
|
||||
|
||||
@@ -45,11 +45,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: false,
|
||||
options: computed(() => tenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
>
|
||||
<n-spin :show="loading" description="请稍候...">
|
||||
<n-descriptions label-placement="left" bordered :column="settingStore.isMobile ? 1 : 2">
|
||||
<n-descriptions-item label="租户">{{ formValue.tenantName }}</n-descriptions-item>
|
||||
<n-descriptions-item label="商户">{{ formValue.tenantName }}</n-descriptions-item>
|
||||
<n-descriptions-item label="状态">{{ statusLabel }}</n-descriptions-item>
|
||||
<n-descriptions-item label="用途">{{ purposeLabel }}</n-descriptions-item>
|
||||
<n-descriptions-item label="上传用户">{{ formValue.userId || '-' }}</n-descriptions-item>
|
||||
|
||||
@@ -217,7 +217,7 @@
|
||||
if (tenantOptions.value.length > 0) {
|
||||
await setFieldsValue({ tenantId: tenantOptions.value[0].value });
|
||||
} else {
|
||||
message.warning('暂无可用租户');
|
||||
message.warning('暂无可用商户');
|
||||
}
|
||||
}
|
||||
reloadTable();
|
||||
|
||||
@@ -38,11 +38,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: false,
|
||||
options: computed(() => tenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="n-layout-page-header">
|
||||
<n-card :bordered="false" title="IM群组管理" />
|
||||
<n-card :bordered="false" title="群组管理" />
|
||||
</div>
|
||||
<n-card :bordered="false" class="proCard">
|
||||
<BasicForm
|
||||
@@ -129,7 +129,7 @@
|
||||
if (tenantOptions.value.length > 0) {
|
||||
await setFieldsValue({ tenantId: tenantOptions.value[0].value });
|
||||
} else {
|
||||
message.warning('暂无可用租户');
|
||||
message.warning('暂无可用商户');
|
||||
}
|
||||
}
|
||||
reloadTable();
|
||||
|
||||
@@ -11,8 +11,8 @@ const dict = useDictStore();
|
||||
export const tenantOptions = ref<any[]>([]);
|
||||
|
||||
export class State {
|
||||
public tenantId = 0; // 租户ID
|
||||
public tenantName = ''; // 租户名称
|
||||
public tenantId = 0; // 商户ID
|
||||
public tenantName = ''; // 商户名称
|
||||
public topic = ''; // Topic
|
||||
public state = 0; // 状态
|
||||
public ownerId = 0; // 群主ID
|
||||
@@ -118,11 +118,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: false,
|
||||
options: computed(() => tenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<n-scrollbar style="max-height: 87vh" class="pr-5">
|
||||
<n-spin :show="loading" description="请稍候...">
|
||||
<n-descriptions label-placement="left" bordered :column="settingStore.isMobile ? 1 : 2">
|
||||
<n-descriptions-item label="租户">{{ formValue.tenantName }}</n-descriptions-item>
|
||||
<n-descriptions-item label="商户">{{ formValue.tenantName }}</n-descriptions-item>
|
||||
<n-descriptions-item label="Topic">{{ formValue.topic }}</n-descriptions-item>
|
||||
<n-descriptions-item label="状态">{{ stateLabel }}</n-descriptions-item>
|
||||
<n-descriptions-item label="群主昵称">{{
|
||||
|
||||
@@ -39,8 +39,8 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantCode',
|
||||
component: 'NInput',
|
||||
label: '租户编码',
|
||||
componentProps: { placeholder: '请输入租户编码' },
|
||||
label: '商户编码',
|
||||
componentProps: { placeholder: '请输入商户编码' },
|
||||
},
|
||||
{
|
||||
field: 'eventId',
|
||||
@@ -92,7 +92,7 @@ export const schemas = ref<FormSchema[]>([
|
||||
|
||||
export const columns = [
|
||||
{ title: 'ID', key: 'id', align: 'left', width: 90 },
|
||||
{ title: '租户', key: 'tenantCode', align: 'left', width: 120 },
|
||||
{ title: '商户', key: 'tenantCode', align: 'left', width: 120 },
|
||||
{ title: '事件ID', key: 'eventId', align: 'left', width: 220 },
|
||||
{ title: '事件类型', key: 'eventType', align: 'left', width: 190 },
|
||||
{ title: '动作', key: 'action', align: 'left', width: 170 },
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<n-scrollbar style="max-height: 87vh" class="pr-5">
|
||||
<n-spin :show="loading" description="请稍候...">
|
||||
<n-descriptions label-placement="left" bordered :column="settingStore.isMobile ? 1 : 2">
|
||||
<n-descriptions-item label="租户">{{ formValue.tenantCode || '-' }}</n-descriptions-item>
|
||||
<n-descriptions-item label="商户">{{ formValue.tenantCode || '-' }}</n-descriptions-item>
|
||||
<n-descriptions-item label="事件类型">{{ formValue.eventType || '-' }}</n-descriptions-item>
|
||||
<n-descriptions-item label="事件ID">{{ formValue.eventId || '-' }}</n-descriptions-item>
|
||||
<n-descriptions-item label="业务ID">{{ formValue.bizId || '-' }}</n-descriptions-item>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="n-layout-page-header">
|
||||
<n-card :bordered="false" title="IM后台命令"></n-card>
|
||||
<n-card :bordered="false" title="IM后台命令" />
|
||||
</div>
|
||||
<n-card :bordered="false" class="proCard">
|
||||
<BasicForm
|
||||
@@ -52,14 +52,20 @@
|
||||
render(record: State) {
|
||||
return h(TableAction as any, {
|
||||
style: 'button',
|
||||
actions: [{ label: '详情', onClick: () => viewRef.value.openModal(record), auth: ['/imKafkaCommand/view'] }],
|
||||
actions: [
|
||||
{
|
||||
label: '详情',
|
||||
onClick: () => viewRef.value.openModal(record),
|
||||
auth: ['/imKafkaCommand/view'],
|
||||
},
|
||||
],
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
const scrollX = computed(() => adaTableScrollX(columns, actionColumn.width));
|
||||
|
||||
const [register] = useForm({
|
||||
const [register, { setFieldsValue }] = useForm({
|
||||
gridProps: { cols: '1 s:1 m:2 l:3 xl:4 2xl:4' },
|
||||
labelWidth: 90,
|
||||
schemas,
|
||||
@@ -77,7 +83,7 @@
|
||||
async function sendCacheInvalidate() {
|
||||
const tenant = getFirstTenant();
|
||||
if (!tenant) {
|
||||
message.warning('暂无可用租户');
|
||||
message.warning('暂无可用商户');
|
||||
return;
|
||||
}
|
||||
const res = await CacheInvalidate({
|
||||
@@ -93,7 +99,7 @@
|
||||
async function sendWorkbenchEvent() {
|
||||
const tenant = getFirstTenant();
|
||||
if (!tenant) {
|
||||
message.warning('暂无可用租户');
|
||||
message.warning('暂无可用商户');
|
||||
return;
|
||||
}
|
||||
const res = await WorkbenchEvent({
|
||||
@@ -117,6 +123,9 @@
|
||||
onMounted(async () => {
|
||||
loadOptions();
|
||||
await loadTenantOptions();
|
||||
if (tenantOptions.value.length > 0) {
|
||||
await setFieldsValue({ tenantId: tenantOptions.value[0].value });
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
@@ -48,11 +48,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: true,
|
||||
options: computed(() => tenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -103,7 +103,7 @@ export const schemas = ref<FormSchema[]>([
|
||||
|
||||
export const columns = [
|
||||
{ title: 'ID', key: 'id', align: 'left', width: 90 },
|
||||
{ title: '租户', key: 'tenantCode', align: 'left', width: 120 },
|
||||
{ title: '商户', key: 'tenantCode', align: 'left', width: 120 },
|
||||
{ title: '命令ID', key: 'commandId', align: 'left', width: 210 },
|
||||
{ title: '事件类型', key: 'eventType', align: 'left', width: 190 },
|
||||
{ title: '业务类型', key: 'bizType', align: 'left', width: 110 },
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<n-scrollbar style="max-height: 87vh" class="pr-5">
|
||||
<n-spin :show="loading" description="请稍候...">
|
||||
<n-descriptions label-placement="left" bordered :column="settingStore.isMobile ? 1 : 2">
|
||||
<n-descriptions-item label="租户">{{ formValue.tenantCode || '-' }}</n-descriptions-item>
|
||||
<n-descriptions-item label="商户">{{ formValue.tenantCode || '-' }}</n-descriptions-item>
|
||||
<n-descriptions-item label="状态">{{ statusLabel }}</n-descriptions-item>
|
||||
<n-descriptions-item label="命令ID">{{ formValue.commandId }}</n-descriptions-item>
|
||||
<n-descriptions-item label="事件ID">{{ formValue.eventId }}</n-descriptions-item>
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
function handleExport() {
|
||||
const params = { ...searchFormRef.value?.formModel };
|
||||
if (isPlatformAdmin.value && !params.tenantId) {
|
||||
message.warning('请选择租户');
|
||||
message.warning('请选择商户');
|
||||
return;
|
||||
}
|
||||
Export(params);
|
||||
@@ -204,7 +204,7 @@
|
||||
await loadImQueryTenantOptions();
|
||||
if (imQueryTenantOptions.value.length)
|
||||
await setFieldsValue({ tenantId: imQueryTenantOptions.value[0].value });
|
||||
else message.warning('暂无可用租户');
|
||||
else message.warning('暂无可用商户');
|
||||
}
|
||||
reloadTable();
|
||||
});
|
||||
|
||||
@@ -10,11 +10,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: false,
|
||||
options: computed(() => imQueryTenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -11,11 +11,11 @@
|
||||
label-placement="left"
|
||||
label-width="120"
|
||||
>
|
||||
<n-form-item v-if="isPlatformAdmin" label="租户">
|
||||
<n-form-item v-if="isPlatformAdmin" label="商户">
|
||||
<n-select
|
||||
v-model:value="selectedTenantId"
|
||||
:options="tenantOptions"
|
||||
placeholder="请选择租户"
|
||||
placeholder="请选择商户"
|
||||
@update:value="loadConfig"
|
||||
/>
|
||||
</n-form-item>
|
||||
@@ -145,7 +145,7 @@
|
||||
if (isPlatformAdmin.value) {
|
||||
await loadTenantOptions();
|
||||
if (tenantOptions.value.length > 0) selectedTenantId.value = tenantOptions.value[0].value;
|
||||
else message.warning('暂无可用租户');
|
||||
else message.warning('暂无可用商户');
|
||||
}
|
||||
await loadConfig();
|
||||
});
|
||||
|
||||
@@ -173,7 +173,7 @@
|
||||
}
|
||||
const params = { ...searchFormRef.value?.formModel };
|
||||
if (isPlatformAdmin.value && !params.tenantId) {
|
||||
message.warning('请选择租户');
|
||||
message.warning('请选择商户');
|
||||
return;
|
||||
}
|
||||
api.Export(params);
|
||||
@@ -219,7 +219,7 @@
|
||||
await loadImQueryTenantOptions();
|
||||
if (imQueryTenantOptions.value.length)
|
||||
await setFieldsValue({ tenantId: imQueryTenantOptions.value[0].value });
|
||||
else message.warning('暂无可用租户');
|
||||
else message.warning('暂无可用商户');
|
||||
}
|
||||
if (!props.group) reloadTable();
|
||||
});
|
||||
|
||||
@@ -11,11 +11,11 @@ export function createMessageSchemas(group: boolean) {
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: false,
|
||||
options: computed(() => imQueryTenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
if (tenantOptions.value.length > 0) {
|
||||
await setFieldsValue({ tenantId: tenantOptions.value[0].value });
|
||||
} else {
|
||||
message.warning('暂无可用租户');
|
||||
message.warning('暂无可用商户');
|
||||
}
|
||||
}
|
||||
reloadTable();
|
||||
|
||||
@@ -40,11 +40,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: false,
|
||||
options: computed(() => tenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -70,7 +70,7 @@ export const schemas = ref<FormSchema[]>([
|
||||
]);
|
||||
|
||||
export const columns = [
|
||||
{ title: '租户', key: 'tenantName', align: 'left', width: 150 },
|
||||
{ title: '商户', key: 'tenantName', align: 'left', width: 150 },
|
||||
{
|
||||
title: '场景',
|
||||
key: 'scene',
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="n-layout-page-header">
|
||||
<n-card :bordered="false" title="IM组织架构" />
|
||||
<n-card :bordered="false" title="组织架构" />
|
||||
</div>
|
||||
<n-card :bordered="false" class="proCard">
|
||||
<n-grid :x-gap="16" :y-gap="16" responsive="screen" cols="1 l:2">
|
||||
@@ -388,7 +388,7 @@
|
||||
function handleDepartmentExport() {
|
||||
const params = { ...departmentSearchRef.value?.formModel };
|
||||
if (isPlatformAdmin.value && !params.tenantId) {
|
||||
message.warning('请先选择租户');
|
||||
message.warning('请先选择商户');
|
||||
return;
|
||||
}
|
||||
DepartmentExport(params);
|
||||
@@ -529,7 +529,7 @@
|
||||
if (tenantOptions.value.length > 0) {
|
||||
await setDepartmentFields({ tenantId: tenantOptions.value[0].value });
|
||||
} else {
|
||||
message.warning('暂无可用租户');
|
||||
message.warning('暂无可用商户');
|
||||
}
|
||||
}
|
||||
reloadDepartments();
|
||||
|
||||
@@ -73,11 +73,11 @@ export const departmentSchemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: false,
|
||||
options: computed(() => tenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
if (tenantOptions.value.length > 0) {
|
||||
await setFieldsValue({ tenantId: tenantOptions.value[0].value });
|
||||
} else {
|
||||
message.warning('暂无可用租户');
|
||||
message.warning('暂无可用商户');
|
||||
}
|
||||
}
|
||||
reloadTable();
|
||||
|
||||
@@ -44,11 +44,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: false,
|
||||
options: computed(() => tenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
>
|
||||
<n-spin :show="loading" description="请稍候...">
|
||||
<n-descriptions label-placement="left" bordered :column="settingStore.isMobile ? 1 : 2">
|
||||
<n-descriptions-item label="租户">{{ formValue.tenantName }}</n-descriptions-item>
|
||||
<n-descriptions-item label="商户">{{ formValue.tenantName }}</n-descriptions-item>
|
||||
<n-descriptions-item label="来源">{{ sourceLabel }}</n-descriptions-item>
|
||||
<n-descriptions-item label="事件ID">{{ formValue.eventId }}</n-descriptions-item>
|
||||
<n-descriptions-item label="事件类型">{{ formValue.eventType }}</n-descriptions-item>
|
||||
|
||||
@@ -3,11 +3,19 @@ import { List as TenantList } from '@/api/imTenant';
|
||||
|
||||
export const policyTenantOptions = ref<any[]>([{ label: '全局默认', value: 0 }]);
|
||||
|
||||
export function getDefaultTenantValue(options: any[]) {
|
||||
const defaultTenant = options.find(
|
||||
(item) => item.code === 'default' || String(item.label || '').includes('(default)')
|
||||
);
|
||||
return defaultTenant?.value || options.find((item) => Number(item.value) > 0)?.value || 0;
|
||||
}
|
||||
|
||||
export async function loadPolicyTenantOptions(includeGlobal = true) {
|
||||
const res = await TenantList({ page: 1, perPage: 100 });
|
||||
const tenants = (res?.list || []).map((item) => ({
|
||||
label: `${item.name}(${item.code})`,
|
||||
value: item.id,
|
||||
code: item.code,
|
||||
}));
|
||||
policyTenantOptions.value = includeGlobal
|
||||
? [{ label: '全局默认', value: 0 }, ...tenants]
|
||||
|
||||
@@ -42,11 +42,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: false,
|
||||
options: computed(() => tenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
>
|
||||
<n-spin :show="loading">
|
||||
<n-descriptions label-placement="left" bordered :column="settingStore.isMobile ? 1 : 2">
|
||||
<n-descriptions-item label="租户">{{ formValue.tenantName }}</n-descriptions-item>
|
||||
<n-descriptions-item label="商户">{{ formValue.tenantName }}</n-descriptions-item>
|
||||
<n-descriptions-item label="用户ID">{{ formValue.userId }}</n-descriptions-item>
|
||||
<n-descriptions-item label="提交ID">{{ formValue.submissionId }}</n-descriptions-item>
|
||||
<n-descriptions-item label="状态">{{ statusLabel }}</n-descriptions-item>
|
||||
|
||||
@@ -267,7 +267,12 @@
|
||||
View,
|
||||
} from '@/api/imSecurityPolicy';
|
||||
import { columns, ipColumns, loadOptions, schemas } from './model';
|
||||
import { loadPolicyTenantOptions, parseJSON } from '@/views/imPolicyShared';
|
||||
import {
|
||||
getDefaultTenantValue,
|
||||
loadPolicyTenantOptions,
|
||||
parseJSON,
|
||||
policyTenantOptions,
|
||||
} from '@/views/imPolicyShared';
|
||||
const dict = useDictStore(),
|
||||
message = useMessage(),
|
||||
dialog = useDialog(),
|
||||
@@ -368,7 +373,11 @@
|
||||
const ipRules = { ipCidr: { required: true, message: '请输入IP或CIDR' } };
|
||||
const tenantSchema = schemas.value.find((v) => v.field === 'tenantId');
|
||||
if (tenantSchema) tenantSchema.ifShow = () => userStore.isCompanyDept;
|
||||
const [register] = useForm({ gridProps: { cols: '1 s:1 m:2 l:3' }, labelWidth: 90, schemas });
|
||||
const [register, { setFieldsValue }] = useForm({
|
||||
gridProps: { cols: '1 s:1 m:2 l:3' },
|
||||
labelWidth: 90,
|
||||
schemas,
|
||||
});
|
||||
const loadTable = (res) => List({ ...searchFormRef.value?.formModel, ...res }),
|
||||
loadIPTable = (res) => IPRuleList({ tenantId: tenantId(), ...res });
|
||||
const reloadAll = () => {
|
||||
@@ -562,7 +571,10 @@
|
||||
}
|
||||
onMounted(async () => {
|
||||
loadOptions();
|
||||
if (userStore.isCompanyDept) await loadPolicyTenantOptions(true);
|
||||
if (userStore.isCompanyDept) {
|
||||
await loadPolicyTenantOptions(true);
|
||||
await setFieldsValue({ tenantId: getDefaultTenantValue(policyTenantOptions.value) });
|
||||
}
|
||||
reloadAll();
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -8,7 +8,7 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: { options: computed(() => policyTenantOptions.value), clearable: false },
|
||||
},
|
||||
{
|
||||
|
||||
@@ -161,7 +161,12 @@
|
||||
Status,
|
||||
} from '@/api/imSensitiveWord';
|
||||
import { columns, groupOptions, loadOptions, schemas } from './model';
|
||||
import { loadPolicyTenantOptions, parseJSON } from '@/views/imPolicyShared';
|
||||
import {
|
||||
getDefaultTenantValue,
|
||||
loadPolicyTenantOptions,
|
||||
parseJSON,
|
||||
policyTenantOptions,
|
||||
} from '@/views/imPolicyShared';
|
||||
const dict = useDictStore(),
|
||||
message = useMessage(),
|
||||
dialog = useDialog(),
|
||||
@@ -204,7 +209,7 @@
|
||||
};
|
||||
const tenantSchema = schemas.value.find((v) => v.field === 'tenantId');
|
||||
if (tenantSchema) tenantSchema.ifShow = () => userStore.isCompanyDept;
|
||||
const [register] = useForm({
|
||||
const [register, { setFieldsValue }] = useForm({
|
||||
gridProps: { cols: '1 s:1 m:2 l:3 xl:4' },
|
||||
labelWidth: 90,
|
||||
schemas,
|
||||
@@ -323,7 +328,10 @@
|
||||
);
|
||||
onMounted(async () => {
|
||||
loadOptions();
|
||||
if (userStore.isCompanyDept) await loadPolicyTenantOptions(true);
|
||||
if (userStore.isCompanyDept) {
|
||||
await loadPolicyTenantOptions(true);
|
||||
await setFieldsValue({ tenantId: getDefaultTenantValue(policyTenantOptions.value) });
|
||||
}
|
||||
await loadGroups();
|
||||
reload();
|
||||
});
|
||||
|
||||
@@ -9,7 +9,7 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: { options: computed(() => policyTenantOptions.value), clearable: false },
|
||||
},
|
||||
{ field: 'word', component: 'NInput', label: '敏感词', componentProps: { clearable: true } },
|
||||
|
||||
@@ -70,8 +70,10 @@
|
||||
loadOptions();
|
||||
if (isPlatformAdmin.value) {
|
||||
await loadTenantOptions();
|
||||
if (tenantOptions.value.length === 0) {
|
||||
message.warning('暂无可用租户');
|
||||
if (tenantOptions.value.length > 0) {
|
||||
await setFieldsValue({ tenantId: tenantOptions.value[0].value });
|
||||
} else {
|
||||
message.warning('暂无可用商户');
|
||||
}
|
||||
}
|
||||
reloadTable();
|
||||
|
||||
@@ -30,11 +30,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: true,
|
||||
options: computed(() => tenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -50,7 +50,7 @@ export const schemas = ref<FormSchema[]>([
|
||||
]);
|
||||
|
||||
export const columns = [
|
||||
{ title: '租户', key: 'tenantName', align: 'left', width: 160 },
|
||||
{ title: '商户', key: 'tenantName', align: 'left', width: 160 },
|
||||
{ title: '企业码', key: 'tenantCode', align: 'left', width: 120 },
|
||||
{
|
||||
title: '状态',
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
}}
|
||||
</n-alert>
|
||||
<n-descriptions label-placement="left" bordered :column="settingStore.isMobile ? 1 : 2">
|
||||
<n-descriptions-item label="租户">{{ detail.name || current.name }}</n-descriptions-item>
|
||||
<n-descriptions-item label="商户">{{ detail.name || current.name }}</n-descriptions-item>
|
||||
<n-descriptions-item label="编码">{{ detail.code || current.code }}</n-descriptions-item>
|
||||
<n-descriptions-item label="用户数">{{ detail.userCount }}</n-descriptions-item>
|
||||
<n-descriptions-item label="群数">{{ detail.groupCount }}</n-descriptions-item>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
:show-icon="false"
|
||||
preset="dialog"
|
||||
transform-origin="center"
|
||||
:title="formValue.id > 0 ? '编辑IM租户 #' + formValue.id : '添加IM租户'"
|
||||
:title="formValue.id > 0 ? '编辑IM商户 #' + formValue.id : '添加IM商户'"
|
||||
:style="{
|
||||
width: dialogWidth,
|
||||
}"
|
||||
@@ -23,13 +23,13 @@
|
||||
>
|
||||
<n-grid cols="1 s:1 m:2 l:2 xl:2 2xl:2" responsive="screen">
|
||||
<n-gi span="1">
|
||||
<n-form-item label="租户编码" path="code">
|
||||
<n-input placeholder="请输入租户编码" v-model:value="formValue.code" />
|
||||
<n-form-item label="商户编码" path="code">
|
||||
<n-input placeholder="请输入商户编码" v-model:value="formValue.code" />
|
||||
</n-form-item>
|
||||
</n-gi>
|
||||
<n-gi span="1">
|
||||
<n-form-item label="租户名称" path="name">
|
||||
<n-input placeholder="请输入租户名称" v-model:value="formValue.name" />
|
||||
<n-form-item label="商户名称" path="name">
|
||||
<n-input placeholder="请输入商户名称" v-model:value="formValue.name" />
|
||||
</n-form-item>
|
||||
</n-gi>
|
||||
<n-gi span="1">
|
||||
@@ -83,10 +83,10 @@
|
||||
</n-form-item>
|
||||
</n-gi>
|
||||
<n-gi span="2">
|
||||
<n-form-item label="租户描述" path="tenantDesc">
|
||||
<n-form-item label="商户描述" path="tenantDesc">
|
||||
<n-input
|
||||
type="textarea"
|
||||
placeholder="请输入租户描述"
|
||||
placeholder="请输入商户描述"
|
||||
v-model:value="formValue.tenantDesc"
|
||||
/>
|
||||
</n-form-item>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="n-layout-page-header">
|
||||
<n-card :bordered="false" title="IM租户管理" />
|
||||
<n-card :bordered="false" title="IM商户管理" />
|
||||
</div>
|
||||
<n-card :bordered="false" class="proCard">
|
||||
<BasicForm
|
||||
|
||||
@@ -10,9 +10,9 @@ const dict = useDictStore();
|
||||
|
||||
export class State {
|
||||
public id = 0; // ID
|
||||
public code = ''; // 租户编码
|
||||
public name = ''; // 租户名称
|
||||
public tenantDesc = ''; // 租户描述
|
||||
public code = ''; // 商户编码
|
||||
public name = ''; // 商户名称
|
||||
public tenantDesc = ''; // 商户描述
|
||||
public dbName = ''; // 业务库名
|
||||
public dbDsn = ''; // 独立连接串
|
||||
public state = 1; // 状态
|
||||
@@ -69,19 +69,19 @@ export const rules = {
|
||||
required: true,
|
||||
trigger: ['blur', 'input'],
|
||||
type: 'string',
|
||||
message: '请输入租户编码',
|
||||
message: '请输入商户编码',
|
||||
},
|
||||
name: {
|
||||
required: true,
|
||||
trigger: ['blur', 'input'],
|
||||
type: 'string',
|
||||
message: '请输入租户名称',
|
||||
message: '请输入商户名称',
|
||||
},
|
||||
state: {
|
||||
required: true,
|
||||
trigger: ['blur', 'change'],
|
||||
type: 'number',
|
||||
message: '请选择租户状态',
|
||||
message: '请选择商户状态',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -90,17 +90,17 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'code',
|
||||
component: 'NInput',
|
||||
label: '租户编码',
|
||||
label: '商户编码',
|
||||
componentProps: {
|
||||
placeholder: '请输入租户编码',
|
||||
placeholder: '请输入商户编码',
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'name',
|
||||
component: 'NInput',
|
||||
label: '租户名称',
|
||||
label: '商户名称',
|
||||
componentProps: {
|
||||
placeholder: '请输入租户名称',
|
||||
placeholder: '请输入商户名称',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -142,13 +142,13 @@ export const columns = [
|
||||
width: 70,
|
||||
},
|
||||
{
|
||||
title: '租户编码',
|
||||
title: '商户编码',
|
||||
key: 'code',
|
||||
align: 'left',
|
||||
width: 150,
|
||||
},
|
||||
{
|
||||
title: '租户名称',
|
||||
title: '商户名称',
|
||||
key: 'name',
|
||||
align: 'left',
|
||||
width: 180,
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
v-model:show="showModal"
|
||||
preset="dialog"
|
||||
:show-icon="false"
|
||||
:title="'租户健康与用量 #' + current.id"
|
||||
:title="'商户健康与用量 #' + current.id"
|
||||
:mask-closable="false"
|
||||
:style="{ width: dialogWidth }"
|
||||
>
|
||||
<n-spin :show="loading" description="请稍候...">
|
||||
<n-descriptions label-placement="left" bordered :column="settingStore.isMobile ? 1 : 2">
|
||||
<n-descriptions-item label="租户">{{ usage.name || current.name }}</n-descriptions-item>
|
||||
<n-descriptions-item label="租户编码">{{ usage.code || current.code }}</n-descriptions-item>
|
||||
<n-descriptions-item label="商户">{{ usage.name || current.name }}</n-descriptions-item>
|
||||
<n-descriptions-item label="商户编码">{{ usage.code || current.code }}</n-descriptions-item>
|
||||
<n-descriptions-item label="业务库">{{ usage.dbName || '-' }}</n-descriptions-item>
|
||||
<n-descriptions-item label="独立连接串">
|
||||
{{ usage.dbDsnConfigured ? '已配置' : '未配置' }}
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
>
|
||||
<n-spin :show="loading" description="请稍候...">
|
||||
<n-descriptions label-placement="left" bordered :column="settingStore.isMobile ? 1 : 2">
|
||||
<n-descriptions-item label="租户">{{ formValue.tenantName || '-' }}</n-descriptions-item>
|
||||
<n-descriptions-item label="商户">{{ formValue.tenantName || '-' }}</n-descriptions-item>
|
||||
<n-descriptions-item label="用户ID">{{ formValue.userId }}</n-descriptions-item>
|
||||
<n-descriptions-item label="昵称">{{ formValue.nickname || '-' }}</n-descriptions-item>
|
||||
<n-descriptions-item label="状态">{{ stateLabel }}</n-descriptions-item>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="n-layout-page-header">
|
||||
<n-card :bordered="false" title="IM用户管理" />
|
||||
<n-card :bordered="false" title="用户管理" />
|
||||
</div>
|
||||
<n-card :bordered="false" class="proCard">
|
||||
<BasicForm
|
||||
@@ -575,7 +575,7 @@
|
||||
tenantId = Number(tenantOptions.value[0].value);
|
||||
await setFieldsValue({ tenantId });
|
||||
} else {
|
||||
message.warning('暂无可用租户');
|
||||
message.warning('暂无可用商户');
|
||||
}
|
||||
}
|
||||
await loadPolicyGroupOptions(tenantId);
|
||||
|
||||
@@ -13,8 +13,9 @@ export const tenantOptions = ref<any[]>([]);
|
||||
export const policyGroupOptions = ref<any[]>([]);
|
||||
|
||||
export class State {
|
||||
public tenantId = 0; // 租户ID
|
||||
public tenantName = ''; // 租户名称
|
||||
public tenantId = 0; // 商户ID
|
||||
public tenantName = ''; // 商户名称
|
||||
public displayNo = 0; // 后台展示编号
|
||||
public userId = ''; // 用户ID
|
||||
public username = ''; // 登录账号
|
||||
public phone = ''; // 手机号
|
||||
@@ -80,11 +81,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: false,
|
||||
options: computed(() => tenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -130,7 +131,7 @@ export const schemas = ref<FormSchema[]>([
|
||||
export const columns = [
|
||||
{
|
||||
title: '编号',
|
||||
key: 'userId',
|
||||
key: 'displayNo',
|
||||
align: 'left',
|
||||
width: 90,
|
||||
},
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<n-scrollbar style="max-height: 87vh" class="pr-5">
|
||||
<n-spin :show="loading" description="请稍候...">
|
||||
<n-descriptions label-placement="left" bordered :column="settingStore.isMobile ? 1 : 2">
|
||||
<n-descriptions-item label="租户">{{ formValue.tenantName }}</n-descriptions-item>
|
||||
<n-descriptions-item label="商户">{{ formValue.tenantName }}</n-descriptions-item>
|
||||
<n-descriptions-item label="用户ID">{{ formValue.userId }}</n-descriptions-item>
|
||||
<n-descriptions-item label="登录账号">{{ formValue.username }}</n-descriptions-item>
|
||||
<n-descriptions-item label="手机号">{{ formValue.phone || '-' }}</n-descriptions-item>
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
function handleExport() {
|
||||
const params = { ...searchFormRef.value?.formModel };
|
||||
if (isPlatformAdmin.value && !params.tenantId) {
|
||||
message.warning('请选择租户');
|
||||
message.warning('请选择商户');
|
||||
return;
|
||||
}
|
||||
Export(params);
|
||||
@@ -88,7 +88,7 @@
|
||||
await loadImQueryTenantOptions();
|
||||
if (imQueryTenantOptions.value.length)
|
||||
await setFieldsValue({ tenantId: imQueryTenantOptions.value[0].value });
|
||||
else message.warning('暂无可用租户');
|
||||
else message.warning('暂无可用商户');
|
||||
}
|
||||
reloadTable();
|
||||
});
|
||||
|
||||
@@ -10,11 +10,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: false,
|
||||
options: computed(() => imQueryTenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
@keyup.enter="reloadTable"
|
||||
/>
|
||||
<n-alert type="info" :show-icon="true" class="whitelist-summary">
|
||||
租户渠道 IP 白名单 APP:{{
|
||||
商户渠道 IP 白名单 APP:{{
|
||||
whitelistSummary.appList.length
|
||||
? `已配置 ${whitelistSummary.appList.length} 条`
|
||||
: '未配置'
|
||||
@@ -54,7 +54,7 @@
|
||||
<n-modal
|
||||
v-model:show="loginIPVisible"
|
||||
preset="dialog"
|
||||
title="租户渠道 IP 白名单"
|
||||
title="商户渠道 IP 白名单"
|
||||
:show-icon="false"
|
||||
:style="{ width: whitelistDialogWidth }"
|
||||
>
|
||||
@@ -235,7 +235,12 @@
|
||||
Status,
|
||||
} from '@/api/imUserPolicyGroup';
|
||||
import { columns, defaultPolicy, loadOptions, schemas } from './model';
|
||||
import { loadPolicyTenantOptions, parseJSON } from '@/views/imPolicyShared';
|
||||
import {
|
||||
getDefaultTenantValue,
|
||||
loadPolicyTenantOptions,
|
||||
parseJSON,
|
||||
policyTenantOptions,
|
||||
} from '@/views/imPolicyShared';
|
||||
|
||||
const dict = useDictStore(),
|
||||
message = useMessage(),
|
||||
@@ -280,7 +285,7 @@
|
||||
};
|
||||
const tenantSchema = schemas.value.find((v) => v.field === 'tenantId');
|
||||
if (tenantSchema) tenantSchema.ifShow = () => userStore.isCompanyDept;
|
||||
const [register] = useForm({
|
||||
const [register, { setFieldsValue }] = useForm({
|
||||
gridProps: { cols: '1 s:1 m:2 l:3 xl:4' },
|
||||
labelWidth: 90,
|
||||
schemas,
|
||||
@@ -350,7 +355,7 @@
|
||||
async function openLoginIPWhitelist() {
|
||||
const result = await fetchLoginIPWhitelist();
|
||||
if (!result) {
|
||||
message.warning('请先选择具体租户');
|
||||
message.warning('请先选择具体商户');
|
||||
return;
|
||||
}
|
||||
Object.assign(loginIPForm, {
|
||||
@@ -367,7 +372,7 @@
|
||||
appList: lines(loginIPForm.appText),
|
||||
webList: lines(loginIPForm.webText),
|
||||
});
|
||||
message.success('租户渠道 IP 白名单保存成功');
|
||||
message.success('商户渠道 IP 白名单保存成功');
|
||||
loginIPVisible.value = false;
|
||||
await refreshLoginIPSummary();
|
||||
} finally {
|
||||
@@ -474,7 +479,10 @@
|
||||
}
|
||||
onMounted(async () => {
|
||||
loadOptions();
|
||||
if (userStore.isCompanyDept) await loadPolicyTenantOptions(true);
|
||||
if (userStore.isCompanyDept) {
|
||||
await loadPolicyTenantOptions(true);
|
||||
await setFieldsValue({ tenantId: getDefaultTenantValue(policyTenantOptions.value) });
|
||||
}
|
||||
reloadTable();
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -23,7 +23,7 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: { options: computed(() => policyTenantOptions.value), clearable: false },
|
||||
},
|
||||
{
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
if (tenantOptions.value.length > 0) {
|
||||
await setFieldsValue({ tenantId: tenantOptions.value[0].value, type: 'abuse' });
|
||||
} else {
|
||||
message.warning('暂无可用租户');
|
||||
message.warning('暂无可用商户');
|
||||
}
|
||||
}
|
||||
reloadTable();
|
||||
|
||||
@@ -53,11 +53,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: false,
|
||||
options: computed(() => tenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<n-scrollbar style="max-height: 87vh" class="pr-5">
|
||||
<n-spin :show="loading" description="请稍候...">
|
||||
<n-descriptions label-placement="left" bordered :column="settingStore.isMobile ? 1 : 2">
|
||||
<n-descriptions-item label="租户">{{ formValue.tenantName }}</n-descriptions-item>
|
||||
<n-descriptions-item label="商户">{{ formValue.tenantName }}</n-descriptions-item>
|
||||
<n-descriptions-item label="类型">{{ typeLabel }}</n-descriptions-item>
|
||||
<n-descriptions-item label="工单ID">{{ formValue.orderId }}</n-descriptions-item>
|
||||
<n-descriptions-item label="状态">{{ statusLabel }}</n-descriptions-item>
|
||||
|
||||
@@ -283,7 +283,7 @@
|
||||
if (tenantOptions.value.length > 0) {
|
||||
await setFieldsValue({ tenantId: tenantOptions.value[0].value });
|
||||
} else {
|
||||
message.warning('暂无可用租户');
|
||||
message.warning('暂无可用商户');
|
||||
}
|
||||
}
|
||||
reloadTable();
|
||||
|
||||
@@ -40,11 +40,11 @@ export const schemas = ref<FormSchema[]>([
|
||||
{
|
||||
field: 'tenantId',
|
||||
component: 'NSelect',
|
||||
label: '租户',
|
||||
label: '商户',
|
||||
componentProps: {
|
||||
clearable: false,
|
||||
options: computed(() => tenantOptions.value),
|
||||
placeholder: '请选择租户',
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user