diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementInspectionProgramMapper.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementInspectionProgramMapper.java index 7b18578f..1bb6e71d 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementInspectionProgramMapper.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementInspectionProgramMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zdxt.enforcementcode.domain.EnforcementInspectionProgram; import com.zdxt.enforcementcode.domain.bo.EnforcementInspectionProgramBo; import com.zdxt.enforcementcode.domain.vo.EnforcementInspectionProgramVo; +import org.apache.ibatis.annotations.Param; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import java.util.List; @@ -50,4 +51,24 @@ public interface EnforcementInspectionProgramMapper extends BaseMapperPlus selectPlanPage(Page page, EnforcementInspectionProgramBo bo); + /** + * 分页查询计划列表(包含权限控制) - 优化版本 + * + * @param page 分页参数 + * @param bo 查询条件 + * @param accessibleDeptIds 可访问的部门ID列表 + * @return 计划分页列表 + */ + Page selectPlanPageOptimized(Page page, + EnforcementInspectionProgramBo bo, + @Param("accessibleDeptIds") List accessibleDeptIds); + + /** + * 查询可访问的部门ID列表 + * + * @param currentDeptId 当前部门ID + * @return 部门ID列表 + */ + List selectAccessibleDeptIds(@Param("currentDeptId") String currentDeptId); + } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementInspectionProgramServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementInspectionProgramServiceImpl.java index c15ae2ea..a0346362 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementInspectionProgramServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementInspectionProgramServiceImpl.java @@ -202,7 +202,7 @@ public class EnforcementInspectionProgramServiceImpl implements IEnforcementInsp } /** - * 分页查询计划列表(包含权限控制) + * 分页查询计划列表(包含权限控制) * * @param bo 查询条件 * @param pageQuery 分页参数 @@ -210,9 +210,13 @@ public class EnforcementInspectionProgramServiceImpl implements IEnforcementInsp */ @Override public TableDataInfo selectPlanPage(EnforcementInspectionProgramBo bo, PageQuery pageQuery) { - Page result = baseMapper.selectPlanPage(pageQuery.build(), bo); + // 1. 先查询当前部门及其所有下级部门的ID列表 + List accessibleDeptIds = getAccessibleDeptIds(bo.getDeptId()); - // 批量查询关联的文件列表(优化 N+1 查询问题) + // 2. 将部门ID列表传入查询 + Page result = baseMapper.selectPlanPageOptimized(pageQuery.build(), bo, accessibleDeptIds); + + // 批量查询关联的文件列表(优化 N+1 查询问题) if (result.getRecords() != null && !result.getRecords().isEmpty()) { // 1. 收集所有计划ID List planIds = result.getRecords().stream() @@ -227,7 +231,7 @@ public class EnforcementInspectionProgramServiceImpl implements IEnforcementInsp fileLqw.eq(ZdxtFile::getIsDelete2, 0); // 只查询未删除的文件 List allFiles = zdxtFileMapper.selectVoList(fileLqw); - // 3. 按 businessId 分组,构建 Map + // 3. 按 businessId 分组,构建 Map Map> filesByPlanId = allFiles.stream() .collect(Collectors.groupingBy(ZdxtFileVo::getBusinessId)); @@ -242,6 +246,23 @@ public class EnforcementInspectionProgramServiceImpl implements IEnforcementInsp return TableDataInfo.build(result); } + /** + * 获取可访问的部门ID列表(包括当前部门和所有下级部门) + * + * @param currentDeptId 当前部门ID + * @return 可访问的部门ID列表 + */ + private List getAccessibleDeptIds(String currentDeptId) { + if (StringUtils.isBlank(currentDeptId)) { + return Collections.emptyList(); + } + + // 查询当前部门及其所有下级部门的ID + // 这里需要注入 SysDeptMapper 或者调用现有的部门服务 + // 示例代码,需要根据实际项目调整 + return baseMapper.selectAccessibleDeptIds(currentDeptId); + } + private LambdaQueryWrapper buildQueryWrapper(EnforcementInspectionProgramBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementInspectionProgramMapper.xml b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementInspectionProgramMapper.xml index 62039d55..bb195737 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementInspectionProgramMapper.xml +++ b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementInspectionProgramMapper.xml @@ -190,4 +190,34 @@ ORDER BY create_time DESC + + + + + + diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js b/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js index bb44fd8f..d8a033e9 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js @@ -72,6 +72,9 @@ export const queryEnforcementNoticeList = (params, success, error) => _post(base // 执法预告列表 export const getLawNoticeList = (params, success, error) => _post(baseUrl + "/enforcement/queryList", params, success, error); +//计划通知列表 +export const queryListNoPermission = (params, success, error) => _get(baseUrl + "/inspectionProgram/queryListNoPermission", params, success, error); + // 执法评价列表 export const queryEvaluateList = (params, success, error) => _get("/app-ent/evaluate/queryEvaluateList", params, success, error); diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/planNoticeList.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/planNoticeList.vue index fdf2a67f..19c8e204 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/planNoticeList.vue +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/planNoticeList.vue @@ -24,7 +24,7 @@
- {{ item.checkItemText || item.checkItem }} + {{ item.planName || item.planName }}
@@ -33,15 +33,27 @@
执法区域: - {{ item.unitCheck }} + {{ item.enforcementAreaName || item.enforcementArea }}
发布时间: - {{ item.checkTime }} + {{ item.enforcementTime }}
附件: - + + + 无 +
@@ -56,7 +68,7 @@ import { ref, onMounted } from 'vue'; import { useRouter } from 'vue-router'; import { showToast } from 'vant'; import 'vant/es/toast/style'; -import { getLawNoticeList } from '@/api/enforcement/index'; +import { queryListNoPermission } from '@/api/enforcement/index'; const router = useRouter(); @@ -76,7 +88,7 @@ const fetchList = () => { pageSize: pageSize.value, queryParam: searchText.value || undefined, }; - getLawNoticeList(params, (res) => { + queryListNoPermission(params, (res) => { if (res.code === 200) { const rows = res.rows || []; const total = res.total; @@ -143,6 +155,21 @@ const onClickLeft = () => { router.back(); }; +// ========== 下载附件 ========== +const downloadAttachment = (file) => { + if (!file || !file.guid) { + showToast('无法下载该附件'); + return; + } + const downloadUrl = `/api/enf-ep/app-enf/common/file/download?guid=${file.guid}`; + const link = document.createElement('a'); + link.href = downloadUrl; + link.download = file.fileName || file.fileSaveName; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); +}; + // ========== 组件挂载时加载数据 ========== onMounted(() => { // fetchList(); @@ -259,6 +286,16 @@ onMounted(() => { .value { flex: 1; color: #999; + display: flex; + flex-wrap: wrap; + gap: 8px; + } + + .attachment-link { + color: #2d94fa; + text-decoration: underline; + word-break: break-all; + cursor: pointer; } }