From d9b10a3f0524b16e3fccad9de6f91d17876ebda6 Mon Sep 17 00:00:00 2001 From: liweijie Date: Tue, 15 Sep 2026 18:38:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=99=E5=AD=A6=E6=A5=BC=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=96=B0=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jwgl/service/impl/BuildServiceImpl.java | 15 +- frontend/src/api/teachBusiness/build.js | 109 ++++ .../src/views/teachBusiness/build/index.vue | 507 ++++++++++++++++++ .../src/views/teachBusiness/venue/index.vue | 13 +- 4 files changed, 629 insertions(+), 15 deletions(-) create mode 100644 frontend/src/api/teachBusiness/build.js create mode 100644 frontend/src/views/teachBusiness/build/index.vue diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/BuildServiceImpl.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/BuildServiceImpl.java index 57bee3907..c9b097b97 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/BuildServiceImpl.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/BuildServiceImpl.java @@ -36,6 +36,13 @@ public class BuildServiceImpl implements BuildService { String uuid = UuidUtil.getUUID(); jxlb.setId(uuid); jxlb.setDelFlag(0); + // 序号留空时按现有最大序号 +1 自动生成(与导入逻辑一致),避免空序号破坏列表排序 + String xh = jxlb.getXh(); + if (xh == null || xh.trim().isEmpty()) { + jxlb.setXh(String.valueOf(getNextNumber())); + } else { + jxlb.setXh(xh.trim()); + } buildMapper.insert(jxlb); } @@ -79,6 +86,8 @@ public class BuildServiceImpl implements BuildService { wrapper.like(JXLB::getDd, jxlb.getDd()); } } + // 只返回未删除的教学楼(与 pageList 口径一致,避免已删除数据出现在下拉/全量列表里) + wrapper.eq(JXLB::getDelFlag, 0); wrapper.orderByAsc(JXLB::getXh); return buildMapper.selectList(wrapper); } @@ -131,14 +140,14 @@ public class BuildServiceImpl implements BuildService { @Override public void downloadTemplate(HttpServletResponse response) { try { - // 从resources/template目录读取模板文件 - ClassPathResource resource = new ClassPathResource("template/template_jxcdgl.xls"); + // 模板文件位于 classpath:file/ 下(sheet 名为「教学楼表」) + ClassPathResource resource = new ClassPathResource("file/教学场地管理模板.xls"); InputStream is = resource.getInputStream(); // 设置响应头 response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment;filename=" + - URLEncoder.encode("教学场地管理模板.xls", "UTF-8")); + URLEncoder.encode("教学楼管理模板.xls", "UTF-8")); // 输出文件 OutputStream os = response.getOutputStream(); diff --git a/frontend/src/api/teachBusiness/build.js b/frontend/src/api/teachBusiness/build.js new file mode 100644 index 000000000..d7129b675 --- /dev/null +++ b/frontend/src/api/teachBusiness/build.js @@ -0,0 +1,109 @@ +import request from '@/utils/request' + +// 教学楼管理(教学楼表 /build) +// 接口依据:BuildController(前端 baseURL 为 /api,此处不重复 /api 前缀) + +/** + * 新增教学楼 + * POST /build/add + * 请求体(JXLB):教学楼代号 jxldh、教学楼名称 jxlmc 必填;序号 xh 留空由后端自动生成 + */ +export function addBuild(data) { + return request({ + url: '/build/add', + method: 'post', + data + }) +} + +/** + * 删除教学楼(后端仅提供单条删除,参数为 id) + * POST /build/delete + */ +export function deleteBuild(id) { + return request({ + url: '/build/delete', + method: 'post', + params: { id } + }) +} + +/** + * 更新教学楼 + * POST /build/update + * 请求体(JXLB):id 必传 + */ +export function updateBuild(data) { + return request({ + url: '/build/update', + method: 'post', + data + }) +} + +/** + * 查询教学楼详情 + * GET /build/get + */ +export function getBuild(id) { + return request({ + url: '/build/get', + method: 'get', + params: { id } + }) +} + +/** + * 分页查询教学楼 + * GET /build/list + * @param params { pageNum, pageSize, jxldh, jxlmc, dd } + */ +export function listBuild(params) { + return request({ + url: '/build/list', + method: 'get', + params + }) +} + +/** + * 查询全部教学楼(不分页) + * GET /build/all + */ +export function listAllBuild(params) { + return request({ + url: '/build/all', + method: 'get', + params + }) +} + +/** + * 导入教学楼 Excel,返回导入条数 + * POST /build/import + * @param file 文件对象(.xls/.xlsx) + */ +export function importBuild(file) { + const formData = new FormData() + formData.append('file', file) + return request({ + url: '/build/import', + method: 'post', + data: formData, + headers: { 'Content-Type': 'multipart/form-data' }, + timeout: 60000 + }) +} + +/** + * 下载教学楼导入模板(返回 Blob) + * GET /build/template + */ +export function downloadBuildTemplate() { + return request({ + url: '/build/template', + method: 'get', + responseType: 'blob', + timeout: 30000 + }) +} diff --git a/frontend/src/views/teachBusiness/build/index.vue b/frontend/src/views/teachBusiness/build/index.vue new file mode 100644 index 000000000..1217b2088 --- /dev/null +++ b/frontend/src/views/teachBusiness/build/index.vue @@ -0,0 +1,507 @@ + + + + + diff --git a/frontend/src/views/teachBusiness/venue/index.vue b/frontend/src/views/teachBusiness/venue/index.vue index ad6f5e56a..3ef952450 100644 --- a/frontend/src/views/teachBusiness/venue/index.vue +++ b/frontend/src/views/teachBusiness/venue/index.vue @@ -51,7 +51,6 @@
教室列表
新增 - 【教学场地管理模板】下载
@@ -194,14 +193,12 @@