This commit is contained in:
砂糖
2026-07-07 13:25:03 +08:00
5 changed files with 899 additions and 1199 deletions

View File

@@ -86,4 +86,10 @@ public class SysFileVo extends BaseEntity {
@ExcelProperty(value = "浏览次数") @ExcelProperty(value = "浏览次数")
private Long viewCount; private Long viewCount;
/**
* 创建者昵称
*/
@ExcelProperty(value = "创建者昵称")
private String createByName;
} }

View File

@@ -17,12 +17,15 @@ import com.klp.system.domain.SysFile;
import com.klp.system.domain.SysFileVisibleUser; import com.klp.system.domain.SysFileVisibleUser;
import com.klp.system.mapper.SysFileMapper; import com.klp.system.mapper.SysFileMapper;
import com.klp.system.mapper.SysFileVisibleUserMapper; import com.klp.system.mapper.SysFileVisibleUserMapper;
import com.klp.system.mapper.SysUserMapper;
import com.klp.system.service.ISysFileService; import com.klp.system.service.ISysFileService;
import com.klp.common.core.domain.entity.SysUser;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection; import java.util.Collection;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.Optional;
/** /**
* 文件主信息Service业务层处理 * 文件主信息Service业务层处理
@@ -36,6 +39,7 @@ public class SysFileServiceImpl implements ISysFileService {
private final SysFileMapper baseMapper; private final SysFileMapper baseMapper;
private final SysFileVisibleUserMapper visibleUserMapper; private final SysFileVisibleUserMapper visibleUserMapper;
private final SysUserMapper userMapper;
/** /**
* 查询文件主信息 * 查询文件主信息
@@ -52,6 +56,7 @@ public class SysFileServiceImpl implements ISysFileService {
public TableDataInfo<SysFileVo> queryPageList(SysFileBo bo, PageQuery pageQuery) { public TableDataInfo<SysFileVo> queryPageList(SysFileBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<SysFile> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<SysFile> lqw = buildQueryWrapper(bo);
Page<SysFileVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<SysFileVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
fillCreateByName(result.getRecords());
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
@@ -61,7 +66,9 @@ public class SysFileServiceImpl implements ISysFileService {
@Override @Override
public List<SysFileVo> queryList(SysFileBo bo) { public List<SysFileVo> queryList(SysFileBo bo) {
LambdaQueryWrapper<SysFile> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<SysFile> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw); List<SysFileVo> list = baseMapper.selectVoList(lqw);
fillCreateByName(list);
return list;
} }
private LambdaQueryWrapper<SysFile> buildQueryWrapper(SysFileBo bo) { private LambdaQueryWrapper<SysFile> buildQueryWrapper(SysFileBo bo) {
@@ -122,6 +129,7 @@ public class SysFileServiceImpl implements ISysFileService {
LambdaQueryWrapper<SysFile> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<SysFile> lqw = buildQueryWrapper(bo);
lqw.in(SysFile::getFileId, fileIds); lqw.in(SysFile::getFileId, fileIds);
Page<SysFileVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<SysFileVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
fillCreateByName(result.getRecords());
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
@@ -135,6 +143,35 @@ public class SysFileServiceImpl implements ISysFileService {
.eq(SysFile::getFileId, fileId)); .eq(SysFile::getFileId, fileId));
} }
/**
* 根据 createBy登录名批量填充 createByName用户昵称
*/
private void fillCreateByName(List<SysFileVo> list) {
if (list == null || list.isEmpty()) {
return;
}
// 收集所有不重复的 createBy
List<String> userNames = list.stream()
.map(SysFileVo::getCreateBy)
.filter(StringUtils::isNotBlank)
.distinct()
.collect(Collectors.toList());
if (userNames.isEmpty()) {
return;
}
// 批量查询用户
List<SysUser> users = userMapper.selectUserList(
Wrappers.<SysUser>lambdaQuery().in(SysUser::getUserName, userNames));
Map<String, String> nickNameMap = users.stream()
.collect(Collectors.toMap(SysUser::getUserName, SysUser::getNickName, (a, b) -> a));
// 赋值
for (SysFileVo vo : list) {
if (StringUtils.isNotBlank(vo.getCreateBy())) {
vo.setCreateByName(nickNameMap.get(vo.getCreateBy()));
}
}
}
/** /**
* 保存前的数据校验 * 保存前的数据校验
*/ */

View File

@@ -1,26 +1,28 @@
<template> <template>
<el-select <div class="user-select-wrapper" :class="{ 'has-value': selectedValue && (Array.isArray(selectedValue) ? selectedValue.length > 0 : true) }">
v-model="selectedValue" <el-select
:multiple="multiple" v-model="selectedValue"
filterable :multiple="multiple"
remote filterable
:remote-method="handleSearch" remote
:loading="loading" :remote-method="handleSearch"
:placeholder="placeholder" :loading="loading"
style="width: 100%" :placeholder="placeholder"
@change="handleChange" style="width: 100%"
:clearable="clearable" @change="handleChange"
> :clearable="clearable"
<el-option
v-for="user in filteredUsers"
:key="user.userId"
:label="`${user.nickName}${user.dept && user.dept.deptName ? user.dept.deptName : '无部门'}`"
:value="user.userId"
> >
<span>{{ user.nickName }}</span> <el-option
<span style="color: #999; font-size: 12px; margin-left: 8px;">{{ user.dept && user.dept.deptName ? user.dept.deptName : '无部门' }}</span> v-for="user in filteredUsers"
</el-option> :key="user.userId"
</el-select> :label="`${user.nickName}${user.dept && user.dept.deptName ? user.dept.deptName : '无部门'}`"
:value="user.userId"
>
<span>{{ user.nickName }}</span>
<span style="color: #999; font-size: 12px; margin-left: 8px;">{{ user.dept && user.dept.deptName ? user.dept.deptName : '无部门' }}</span>
</el-option>
</el-select>
</div>
</template> </template>
<script> <script>
@@ -109,4 +111,62 @@ export default {
</script> </script>
<style scoped> <style scoped>
.user-select-wrapper {
position: relative;
border: 1px solid #dcdfe6;
border-radius: 4px;
padding: 2px 8px;
transition: border-color 0.2s, box-shadow 0.2s;
min-height: 32px;
}
.user-select-wrapper:hover {
border-color: #c0c4cc;
}
.user-select-wrapper.has-value {
border-color: #5F7BA0;
box-shadow: 0 0 0 1px rgba(95, 123, 160, 0.1);
}
.user-select-wrapper /deep/ .el-select {
width: 100%;
}
.user-select-wrapper /deep/ .el-select__tags {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 4px;
position: relative !important;
top: auto !important;
left: auto !important;
transform: none !important;
overflow: visible;
padding: 2px 0;
}
.user-select-wrapper /deep/ .el-select__tags .el-tag {
margin: 2px 0;
}
.user-select-wrapper /deep/ .el-input {
width: auto;
min-width: 60px;
}
.user-select-wrapper /deep/ .el-select .el-select__input {
margin-left: 0;
}
.user-select-wrapper /deep/ .el-select__tags-text {
display: inline;
}
/* Hide the original el-select border since wrapper provides it */
.user-select-wrapper /deep/ .el-select .el-input__inner {
border: none !important;
box-shadow: none !important;
padding-left: 0;
}
</style> </style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff