From b93f953327cdfef95c3f0e9750005033e085dfeb Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Tue, 30 Jun 2026 10:24:40 +0800 Subject: [PATCH] =?UTF-8?q?feat(file):=20=E6=B7=BB=E5=8A=A0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD=E5=92=8C=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增文件上传、编辑、删除等基础功能 - 实现文件可见范围控制(公开/私有) - 添加与我相关的文件查询功能 - 集成用户选择组件用于设置文件可见用户 - 实现文件统计展示功能 - 完善文件操作权限验证机制 - 添加文件预览和下载功能 - 优化文件列表分页和搜索功能 --- .../controller/system/SysFileController.java | 13 +- .../klp/system/service/ISysFileService.java | 5 + .../service/impl/SysFileServiceImpl.java | 28 + klp-ui/src/api/system/file.js | 99 +++ klp-ui/src/views/system/file/index.vue | 735 ++++++++++++++++++ 5 files changed, 878 insertions(+), 2 deletions(-) create mode 100644 klp-ui/src/api/system/file.js create mode 100644 klp-ui/src/views/system/file/index.vue diff --git a/klp-admin/src/main/java/com/klp/web/controller/system/SysFileController.java b/klp-admin/src/main/java/com/klp/web/controller/system/SysFileController.java index 0ecef7b1d..d2c287236 100644 --- a/klp-admin/src/main/java/com/klp/web/controller/system/SysFileController.java +++ b/klp-admin/src/main/java/com/klp/web/controller/system/SysFileController.java @@ -71,8 +71,9 @@ public class SysFileController extends BaseController { @Log(title = "文件主信息", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody SysFileBo bo) { - return toAjax(iSysFileService.insertByBo(bo)); + public R add(@Validated(AddGroup.class) @RequestBody SysFileBo bo) { + iSysFileService.insertByBo(bo); + return R.ok(bo.getFileId()); } /** @@ -96,4 +97,12 @@ public class SysFileController extends BaseController { @PathVariable Long[] fileIds) { return toAjax(iSysFileService.deleteWithValidByIds(Arrays.asList(fileIds), true)); } + + /** + * 查询与我相关的文件(私有文件且当前用户在可见用户列表中) + */ + @GetMapping("/relatedToMe") + public TableDataInfo relatedToMe(SysFileBo bo, PageQuery pageQuery) { + return iSysFileService.queryPageListRelatedToMe(bo, pageQuery); + } } diff --git a/klp-system/src/main/java/com/klp/system/service/ISysFileService.java b/klp-system/src/main/java/com/klp/system/service/ISysFileService.java index 1b268f2d0..1cd0a32da 100644 --- a/klp-system/src/main/java/com/klp/system/service/ISysFileService.java +++ b/klp-system/src/main/java/com/klp/system/service/ISysFileService.java @@ -46,4 +46,9 @@ public interface ISysFileService { * 校验并批量删除文件主信息信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 查询与我相关的文件(私有文件且当前用户在可见用户列表中) + */ + TableDataInfo queryPageListRelatedToMe(SysFileBo bo, PageQuery pageQuery); } diff --git a/klp-system/src/main/java/com/klp/system/service/impl/SysFileServiceImpl.java b/klp-system/src/main/java/com/klp/system/service/impl/SysFileServiceImpl.java index 63b01b84d..b06095d64 100644 --- a/klp-system/src/main/java/com/klp/system/service/impl/SysFileServiceImpl.java +++ b/klp-system/src/main/java/com/klp/system/service/impl/SysFileServiceImpl.java @@ -6,18 +6,22 @@ import com.klp.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.klp.common.helper.LoginHelper; import com.klp.common.utils.StringUtils; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.klp.system.domain.bo.SysFileBo; import com.klp.system.domain.vo.SysFileVo; import com.klp.system.domain.SysFile; +import com.klp.system.domain.SysFileVisibleUser; import com.klp.system.mapper.SysFileMapper; +import com.klp.system.mapper.SysFileVisibleUserMapper; import com.klp.system.service.ISysFileService; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.stream.Collectors; /** * 文件主信息Service业务层处理 @@ -30,6 +34,7 @@ import java.util.Collection; public class SysFileServiceImpl implements ISysFileService { private final SysFileMapper baseMapper; + private final SysFileVisibleUserMapper visibleUserMapper; /** * 查询文件主信息 @@ -69,6 +74,7 @@ public class SysFileServiceImpl implements ISysFileService { lqw.eq(StringUtils.isNotBlank(bo.getDept()), SysFile::getDept, bo.getDept()); lqw.eq(StringUtils.isNotBlank(bo.getFileType()), SysFile::getFileType, bo.getFileType()); lqw.eq(bo.getScopeType() != null, SysFile::getScopeType, bo.getScopeType()); + lqw.eq(StringUtils.isNotBlank(bo.getCreateBy()), SysFile::getCreateBy, bo.getCreateBy()); return lqw; } @@ -96,6 +102,28 @@ public class SysFileServiceImpl implements ISysFileService { return baseMapper.updateById(update) > 0; } + /** + * 查询与我相关的文件(私有文件且当前用户在可见用户列表中) + */ + @Override + public TableDataInfo queryPageListRelatedToMe(SysFileBo bo, PageQuery pageQuery) { + Long currentUserId = LoginHelper.getUserId(); + // 查询当前用户可见的私有文件ID列表 + LambdaQueryWrapper vuLqw = Wrappers.lambdaQuery(); + vuLqw.eq(SysFileVisibleUser::getUserId, currentUserId); + List visibleList = visibleUserMapper.selectList(vuLqw); + List fileIds = visibleList.stream().map(SysFileVisibleUser::getFileId).distinct().collect(Collectors.toList()); + + if (fileIds.isEmpty()) { + return TableDataInfo.build(new Page<>()); + } + + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + lqw.in(SysFile::getFileId, fileIds); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + /** * 保存前的数据校验 */ diff --git a/klp-ui/src/api/system/file.js b/klp-ui/src/api/system/file.js new file mode 100644 index 000000000..c184ddda3 --- /dev/null +++ b/klp-ui/src/api/system/file.js @@ -0,0 +1,99 @@ +import request from '@/utils/request' + +// 查询文件列表 +export function listFile(query) { + return request({ + url: '/system/file/list', + method: 'get', + params: query + }) +} + +// 查询文件详细 +export function getFile(fileId) { + return request({ + url: '/system/file/' + fileId, + method: 'get' + }) +} + +// 新增文件 +export function addFile(data) { + return request({ + url: '/system/file', + method: 'post', + data: data + }) +} + +// 修改文件 +export function updateFile(data) { + return request({ + url: '/system/file', + method: 'put', + data: data + }) +} + +// 删除文件 +export function delFile(fileIds) { + return request({ + url: '/system/file/' + fileIds, + method: 'delete' + }) +} + +// 导出文件列表 +export function exportFile(query) { + return request({ + url: '/system/file/export', + method: 'post', + params: query + }) +} + +// 查询与我相关的文件 +export function listRelatedToMe(query) { + return request({ + url: '/system/file/relatedToMe', + method: 'get', + params: query + }) +} + +// ============ 文件可见用户关联 ============ + +// 查询可见用户列表 +export function listVisibleUser(query) { + return request({ + url: '/system/fileVisibleUser/list', + method: 'get', + params: query + }) +} + +// 新增可见用户关联 +export function addVisibleUser(data) { + return request({ + url: '/system/fileVisibleUser', + method: 'post', + data: data + }) +} + +// 删除可见用户关联 +export function delVisibleUser(visibleIds) { + return request({ + url: '/system/fileVisibleUser/' + visibleIds, + method: 'delete' + }) +} + +// 按文件ID查询可见用户列表 +export function listVisibleUserByFileId(fileId) { + return request({ + url: '/system/fileVisibleUser/list', + method: 'get', + params: { fileId: fileId } + }) +} diff --git a/klp-ui/src/views/system/file/index.vue b/klp-ui/src/views/system/file/index.vue new file mode 100644 index 000000000..b91fefc3a --- /dev/null +++ b/klp-ui/src/views/system/file/index.vue @@ -0,0 +1,735 @@ + + + + +