Browse Source

IP显示、可根据平台管理搜索、最后登录时间不显示

master
La123123 6 days ago
parent
commit
0787209b47
  1. 4
      im-admin-ui/src/views/im/customer/index.vue
  2. 25
      im-admin-ui/src/views/im/user/index.vue
  3. 22
      im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImPlatformConfigurationController.java
  4. 5
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/bo/ImUserBo.java
  5. 5
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/vo/ImUserVo.java
  6. 7
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImPlatformConfigurationService.java
  7. 11
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImPlatformConfigurationServiceImpl.java
  8. 18
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImUserServiceImpl.java

4
im-admin-ui/src/views/im/customer/index.vue

@ -63,11 +63,11 @@
<span>{{ parseTime(scope.row.createdTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="最后登录时间" align="center" prop="lastLoginTime" width="160">
<!-- <el-table-column label="最后登录时间" align="center" prop="lastLoginTime" width="160">
<template #default="scope">
<span>{{ parseTime(scope.row.lastLoginTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
</el-table-column> -->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top">

25
im-admin-ui/src/views/im/user/index.vue

@ -5,18 +5,23 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="用户名" prop="userName">
<el-input v-model="queryParams.userName" placeholder="请输入用户名" clearable @keyup.enter="handleQuery" />
<el-input v-model="queryParams.userName" placeholder="请输入用户名" clearable style="width: 180px" @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="用户昵称" prop="nickName">
<el-input v-model="queryParams.nickName" placeholder="请输入用户昵称" clearable @keyup.enter="handleQuery" />
<el-input v-model="queryParams.nickName" placeholder="请输入用户昵称" clearable style="width: 180px" @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="平台来源" prop="platformId">
<el-select v-model="queryParams.platformId" placeholder="请选择平台来源" clearable style="width: 180px">
<el-option v-for="item in platformOptions" :key="item.id" :label="item.platformName" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="标签" prop="labelIds">
<el-select v-model="queryParams.labelIds" multiple collapse-tags collapse-tags-tooltip placeholder="请选择标签" style="width: 200px">
<el-select v-model="queryParams.labelIds" multiple collapse-tags collapse-tags-tooltip placeholder="请选择标签" style="width: 180px">
<el-option v-for="item in labelOptions" :key="item.id" :label="item.labelName" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="群组" prop="groupIds">
<el-select v-model="queryParams.groupIds" multiple collapse-tags collapse-tags-tooltip placeholder="请选择群组" style="width: 200px">
<el-select v-model="queryParams.groupIds" multiple collapse-tags collapse-tags-tooltip placeholder="请选择群组" style="width: 180px">
<el-option v-for="item in groupOptions" :key="item.id" :label="item.groupName" :value="item.id" />
</el-select>
</el-form-item>
@ -208,6 +213,7 @@
<script setup name="User" lang="ts">
import { listUser, getUser, ban, unban, getLabelList, getGroupList, updateBatchUser } from '@/api/im/user';
import { allListPlatformConfiguration } from '@/api/im/platformConfiguration';
import { UserVO, UserQuery, UserForm } from '@/api/im/user/types';
import { ElMessageBox, ElFormInstance, ComponentInternalInstance } from 'element-plus';
@ -224,6 +230,7 @@ const total = ref(0);
//
const labelOptions = ref<any[]>([]);
const groupOptions = ref<any[]>([]);
const platformOptions = ref<any[]>([]); //
const queryFormRef = ref<ElFormInstance>();
const userFormRef = ref<ElFormInstance>();
@ -258,6 +265,7 @@ const data = reactive<PageData<UserForm, UserQuery>>({
nickName: undefined,
labelIds: [] as any,
groupIds: [] as any,
platformId: undefined, //
params: {}
},
rules: {}
@ -591,15 +599,16 @@ const getGroupNameById = (id: string | number) => {
return group ? group.groupName : '';
};
//
//
const getLabelAndGroupList = async () => {
try {
const [labelsRes, groupsRes] = await Promise.all([getLabelList(), getGroupList()]);
const [labelsRes, groupsRes, platformRes] = await Promise.all([getLabelList(), getGroupList(), allListPlatformConfiguration()]);
labelOptions.value = labelsRes.data || [];
groupOptions.value = groupsRes.data || [];
platformOptions.value = platformRes.data || []; //
} catch (error) {
console.error('获取标签和群组列表失败:', error);
proxy?.$modal?.msgError('获取标签和群组列表失败');
console.error('获取标签、群组和平台列表失败:', error);
proxy?.$modal?.msgError('获取标签、群组和平台列表失败');
}
};

22
im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImPlatformConfigurationController.java

@ -1,11 +1,15 @@
package org.dromara.im.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.im.domain.ImPlatformConfiguration;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -45,6 +49,24 @@ public class ImPlatformConfigurationController extends BaseController {
return imPlatformConfigurationService.queryPageList(bo, pageQuery);
}
/**
* 获取所有平台管理列表对象
*/
@GetMapping("/allList")
public R<List<Map<String, Object>>> allList() {
//转为Map取id、platformName返回结果
List<ImPlatformConfiguration> list = imPlatformConfigurationService.queryAllList();
List<Map<String, Object>> result = list.stream()
.map(item -> {
Map<String, Object> map = new HashMap<>();
map.put("id", item.getId());
map.put("platformName", item.getPlatformName());
return map;
})
.collect(Collectors.toList());
return R.ok(result);
}
/**
* 导出平台管理配置列表
*/

5
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/bo/ImUserBo.java

@ -101,4 +101,9 @@ public class ImUserBo {
*/
private String welcomeMsg;
/**
* 来源平台 ID
*/
private Long platformId;
}

5
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/vo/ImUserVo.java

@ -118,6 +118,11 @@ public class ImUserVo {
*/
private String welcomeMsg;
/**
* 用户ip地址
*/
private String lastLoginIp;
}

7
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImPlatformConfigurationService.java

@ -1,5 +1,6 @@
package org.dromara.im.service;
import org.dromara.im.domain.ImPlatformConfiguration;
import org.dromara.im.domain.vo.ImPlatformConfigurationVo;
import org.dromara.im.domain.bo.ImPlatformConfigurationBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -33,6 +34,12 @@ public interface IImPlatformConfigurationService {
*/
TableDataInfo<ImPlatformConfigurationVo> queryPageList(ImPlatformConfigurationBo bo, PageQuery pageQuery);
/**
* 查询平台管理配置所有列表
* @return 平台管理配置列表
*/
List<ImPlatformConfiguration> queryAllList();
/**
* 查询符合条件的平台管理配置列表
*

11
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImPlatformConfigurationServiceImpl.java

@ -76,6 +76,17 @@ public class ImPlatformConfigurationServiceImpl implements IImPlatformConfigurat
return TableDataInfo.build(result);
}
@Override
public List<ImPlatformConfiguration> queryAllList() {
LambdaQueryWrapper<ImPlatformConfiguration> lqw = Wrappers.lambdaQuery();
if(!LoginHelper.isSuperAdmin()) {
LambdaQueryWrapperHelper.appendToken(lqw, ImPlatformConfiguration::getUniqueToken);
}
return baseMapper.selectList(lqw);
}
/**
* 查询符合条件的平台管理配置列表
*

18
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImUserServiceImpl.java

@ -17,15 +17,18 @@ import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.im.constant.ImConstant;
import org.dromara.im.constant.ImRedisKey;
import org.dromara.im.domain.ImAgent;
import org.dromara.im.domain.ImPlatformConfiguration;
import org.dromara.im.domain.ImUser;
import org.dromara.im.domain.bo.ImUserBo;
import org.dromara.im.domain.dto.BatchUpdateUserDto;
import org.dromara.im.domain.dto.ImUserBanDto;
import org.dromara.im.domain.dto.ImUserUnbanDto;
import org.dromara.im.domain.vo.ImUserVo;
import org.dromara.im.mapper.ImPlatformConfigurationMapper;
import org.dromara.im.mapper.ImUserMapper;
import org.dromara.im.mq.ImRedisMQTemplate;
import org.dromara.im.service.IImAgentService;
import org.dromara.im.service.IImPlatformConfigurationService;
import org.dromara.im.service.IImUserService;
import org.dromara.im.util.LambdaQueryWrapperHelper;
import org.springframework.stereotype.Service;
@ -47,6 +50,7 @@ public class ImUserServiceImpl implements IImUserService {
private final ImRedisMQTemplate redisMQTemplate;
private final ImUserMapper baseMapper;
private final IImAgentService imAgentService;
private final ImPlatformConfigurationMapper platformConfigurationMapper;
/**
* 查询用户
@ -130,6 +134,20 @@ public class ImUserServiceImpl implements IImUserService {
wrapper.like(StringUtils.isNotBlank(bo.getUserName()), ImUser::getUserName, bo.getUserName());
wrapper.like(StringUtils.isNotBlank(bo.getNickName()), ImUser::getNickName, bo.getNickName());
if(ObjectUtil.isNotEmpty(bo.getPlatformId())){
ImPlatformConfiguration data = platformConfigurationMapper.selectById(bo.getPlatformId());
String domainName = data.getDomainName();
if(ObjectUtil.isNotEmpty(domainName)){
//根据换行符将字符串分割为Set
//使用 \R 匹配所有的换行符(包括 \n, \r, \r\n 等),并去除首尾空格
System.out.println(domainName);
Set<String> domainNameSet = Arrays.stream(domainName.split("\\R"))
.map(String::trim)
.collect(Collectors.toSet());
wrapper.in(ImUser::getSourceUrl, domainNameSet);
}
}
if(!LoginHelper.isSuperAdmin()) {
LambdaQueryWrapperHelper.appendToken(wrapper, ImUser::getUniqueToken);
}

Loading…
Cancel
Save