diff --git a/.kiro/specs/odf-v102-update/tasks.md b/.kiro/specs/odf-v102-update/tasks.md index 033a032..ae603f4 100644 --- a/.kiro/specs/odf-v102-update/tasks.md +++ b/.kiro/specs/odf-v102-update/tasks.md @@ -6,23 +6,23 @@ ## 任务 -- [ ] 1. 数据库:创建新表和索引 - - [ ] 1.1 创建 odf_checkin 签到记录表(含索引 IX_odf_checkin_RoomId、IX_odf_checkin_CheckinTime) +- [x] 1. 数据库:创建新表和索引 + - [x] 1.1 创建 odf_checkin 签到记录表(含索引 IX_odf_checkin_RoomId、IX_odf_checkin_CheckinTime) - 编写 SQL Server DDL 脚本,创建表和索引 - _需求: 2.6_ - - [ ] 1.2 创建 odf_cables 光缆表(含索引 IX_odf_cables_DeptId、IX_odf_cables_CableName) + - [x] 1.2 创建 odf_cables 光缆表(含索引 IX_odf_cables_DeptId、IX_odf_cables_CableName) - 编写 SQL Server DDL 脚本,创建表和索引 - _需求: 4.1_ - - [ ] 1.3 创建 odf_cable_faults 干线故障表(含索引 IX_odf_cable_faults_CableId、IX_odf_cable_faults_FaultTime) + - [x] 1.3 创建 odf_cable_faults 干线故障表(含索引 IX_odf_cable_faults_CableId、IX_odf_cable_faults_FaultTime) - 编写 SQL Server DDL 脚本,创建表和索引 - _需求: 5.1, 7.9_ - - [ ] 1.4 创建 odf_cable_fault_images 故障图片表(含索引 IX_odf_cable_fault_images_FaultId) + - [x] 1.4 创建 odf_cable_fault_images 故障图片表(含索引 IX_odf_cable_fault_images_FaultId) - 编写 SQL Server DDL 脚本,创建表和索引 - _需求: 7.9_ - - [ ] 1.5 创建 odf_user_modules 用户功能版块权限表(含唯一索引和普通索引) + - [x] 1.5 创建 odf_user_modules 用户功能版块权限表(含唯一索引和普通索引) - 编写 SQL Server DDL 脚本,创建表和索引 - _需求: 8.1_ - - [ ] 1.6 插入后台管理菜单和权限 SQL 脚本 + - [x] 1.6 插入后台管理菜单和权限 SQL 脚本 - 编写 INSERT INTO sys_menu SQL 脚本,添加以下一级菜单(parentId=0)和按钮权限: - 一级菜单「光缆管理」(MenuId=11190,OrderNum=5)及按钮权限(odfcables:query / odfcables:add / odfcables:edit / odfcables:delete / odfcables:export) - 一级菜单「干线故障管理」(MenuId=11200,OrderNum=6)及按钮权限(odfcablefaults:query / odfcablefaults:delete / odfcablefaults:export) @@ -36,26 +36,26 @@ - Role 1 (admin):超级管理员自动拥有所有权限,无需插入 - _需求: 8.1_ -- [ ] 2. 检查点 — 数据库脚本完成 +- [x] 2. 检查点 — 数据库脚本完成 - 确认所有 5 张表和索引创建成功,菜单权限 SQL 脚本执行无误,如有问题请告知。 -- [ ] 3. 后台 API:实体模型层 - - [ ] 3.1 创建 OdfCheckin 实体类(ZR.Model/Business/OdfCheckin.cs) +- [x] 3. 后台 API:实体模型层 + - [x] 3.1 创建 OdfCheckin 实体类(ZR.Model/Business/OdfCheckin.cs) - 使用 [SugarTable("odf_checkin")] 注解,定义 Id、RoomId、Personnel、CheckinTime、WorkContent、UserId、CreatedAt 属性 - _需求: 2.6_ - - [ ] 3.2 创建 OdfCables 实体类(ZR.Model/Business/OdfCables.cs) + - [x] 3.2 创建 OdfCables 实体类(ZR.Model/Business/OdfCables.cs) - 使用 [SugarTable("odf_cables")] 注解,定义 Id、CableName、DeptId、DeptName、CreatedAt、UpdatedAt 属性 - _需求: 4.1_ - - [ ] 3.3 创建 OdfCableFaults 实体类(ZR.Model/Business/OdfCableFaults.cs) + - [x] 3.3 创建 OdfCableFaults 实体类(ZR.Model/Business/OdfCableFaults.cs) - 使用 [SugarTable("odf_cable_faults")] 注解,定义所有字段属性 - _需求: 5.1, 7.9_ - - [ ] 3.4 创建 OdfCableFaultImages 实体类(ZR.Model/Business/OdfCableFaultImages.cs) + - [x] 3.4 创建 OdfCableFaultImages 实体类(ZR.Model/Business/OdfCableFaultImages.cs) - 使用 [SugarTable("odf_cable_fault_images")] 注解 - _需求: 7.9_ - - [ ] 3.5 创建 OdfUserModules 实体类(ZR.Model/Business/OdfUserModules.cs) + - [x] 3.5 创建 OdfUserModules 实体类(ZR.Model/Business/OdfUserModules.cs) - 使用 [SugarTable("odf_user_modules")] 注解 - _需求: 8.1_ - - [ ] 3.6 创建各实体的 Dto 和 QueryDto 类 + - [x] 3.6 创建各实体的 Dto 和 QueryDto 类 - OdfCheckinDto、OdfCheckinQueryDto(继承 PagerInfo) - OdfCablesQueryDto(继承 PagerInfo) - OdfCableFaultsQueryDto(继承 PagerInfo,含 beginFaultTime/endFaultTime) @@ -63,8 +63,8 @@ - OdfUserModulesSaveDto(含 userId、modules 列表) - _需求: 2.6, 4.1, 5.1, 7.9, 8.1_ -- [ ] 4. 后台 API:Service 层 - - [ ] 4.1 实现 IOdfUserModulesService / OdfUserModulesService +- [x] 4. 后台 API:Service 层 + - [x] 4.1 实现 IOdfUserModulesService / OdfUserModulesService - GetUserModules(userId):按 UserId 查询 odf_user_modules,返回 ModuleCode 列表 - GetUserList():查询 sys_user 返回用户列表(userId, userName) - SaveUserModules(userId, modules):先删后插,事务保证原子性 @@ -73,7 +73,7 @@ - **Property 15: 用户模块权限 round-trip** - 使用 FsCheck 生成随机 UserId 和模块子集,验证插入后查询结果一致 - **验证: 需求 8.1, 8.2** - - [ ] 4.2 实现 IOdfCheckinService / OdfCheckinService + - [x] 4.2 实现 IOdfCheckinService / OdfCheckinService - AddCheckin(dto):校验 RoomId 存在,插入 odf_checkin 记录 - GetList(queryDto):分页查询,联查 odf_rooms 获取机房名称,联查 sys_user 获取提交人用户名 - Export(queryDto):导出签到记录 @@ -82,7 +82,7 @@ - **Property 11: 签到数据持久化 round-trip** - 使用 FsCheck 生成随机签到数据,验证插入后查询字段一致 - **验证: 需求 2.6** - - [ ] 4.3 实现 IOdfCablesService / OdfCablesService + - [x] 4.3 实现 IOdfCablesService / OdfCablesService - GetList(queryDto):按 DeptId 过滤光缆列表(支持分页和 CableName 模糊查询) - Search(deptId, keyword):在指定公司范围内搜索光缆和故障 - Add/Update/Delete/GetDetail/Export:光缆 CRUD 和导出 @@ -95,7 +95,7 @@ - **Property 13: 搜索结果 DeptId 范围限定** - 使用 FsCheck 生成随机数据集,验证搜索结果均属于指定 DeptId - **验证: 需求 4.4** - - [ ] 4.4 实现 IOdfCableFaultsService / OdfCableFaultsService + - [x] 4.4 实现 IOdfCableFaultsService / OdfCableFaultsService - GetList(queryDto):按 CableId 分页查询故障列表,联查光缆名称,按 FaultTime DESC 排序 - GetDetail(id):查询故障详情,联查光缆名称和图片列表 - AddFault(dto):校验 CableId 存在和图片数量,插入故障记录,保存图片文件,插入图片记录 @@ -106,25 +106,25 @@ - **Property 14: 故障新增 round-trip(含图片)** - 使用 FsCheck 生成随机故障数据和图片数量,验证插入后查询一致 - **验证: 需求 7.9** - - [ ] 4.5 实现 IOdfCableFaultImagesService / OdfCableFaultImagesService + - [x] 4.5 实现 IOdfCableFaultImagesService / OdfCableFaultImagesService - GetByFaultId(faultId):按故障 ID 查询图片列表 - BatchInsert(faultId, imageUrls):批量插入图片记录 - DeleteByFaultId(faultId):按故障 ID 删除所有图片记录 - _需求: 7.9_ -- [ ] 5. 后台 API:Controller 层 - - [ ] 5.1 创建 OdfUserModulesController(路由 business/OdfUserModules) +- [x] 5. 后台 API:Controller 层 + - [x] 5.1 创建 OdfUserModulesController(路由 business/OdfUserModules) - GET list — 获取当前登录用户的功能版块列表(APP 端调用,无权限限制,登录即可) - GET users — 获取用户列表(管理端调用,[ActionPermissionFilter(Permission = "odfusermodules:query")]) - GET list?userId=xxx — 获取指定用户的模块权限(管理端调用,[ActionPermissionFilter(Permission = "odfusermodules:query")]) - POST save — 批量保存用户模块权限(管理端调用,[ActionPermissionFilter(Permission = "odfusermodules:edit")]) - _需求: 8.1, 8.2_ - - [ ] 5.2 创建 OdfCheckinController(路由 business/OdfCheckin) + - [x] 5.2 创建 OdfCheckinController(路由 business/OdfCheckin) - POST submit — 提交签到记录(APP 端调用,[ActionPermissionFilter(Permission = "odfcheckin:list")]) - GET list — 分页查询签到记录(管理端调用,[ActionPermissionFilter(Permission = "odfcheckin:list")],联查机房名称和提交人) - GET export — 导出签到记录(管理端调用,[ActionPermissionFilter(Permission = "odfcheckin:export")]) - _需求: 2.6_ - - [ ] 5.3 创建 OdfCablesController(路由 business/OdfCables) + - [x] 5.3 创建 OdfCablesController(路由 business/OdfCables) - GET list — 光缆列表([ActionPermissionFilter(Permission = "odfcables:list")]) - GET search — 搜索光缆和故障([ActionPermissionFilter(Permission = "odfcables:query")]) - POST — 新增光缆([ActionPermissionFilter(Permission = "odfcables:add")]) @@ -133,7 +133,7 @@ - POST delete/{id} — 删除光缆([ActionPermissionFilter(Permission = "odfcables:delete")]) - GET export — 导出光缆([ActionPermissionFilter(Permission = "odfcables:export")]) - _需求: 4.1, 4.4_ - - [ ] 5.4 创建 OdfCableFaultsController(路由 business/OdfCableFaults) + - [x] 5.4 创建 OdfCableFaultsController(路由 business/OdfCableFaults) - GET list — 故障列表分页查询([ActionPermissionFilter(Permission = "odfcablefaults:list")]) - GET {id} — 故障详情含图片([ActionPermissionFilter(Permission = "odfcablefaults:query")]) - POST add — 新增故障含图片上传(APP 端调用,[ActionPermissionFilter(Permission = "odfcablefaults:list")]) @@ -141,7 +141,7 @@ - GET export — 导出故障列表([ActionPermissionFilter(Permission = "odfcablefaults:export")]) - _需求: 5.1, 6.1, 7.9_ -- [ ] 6. 后台 API:依赖注入注册 +- [x] 6. 后台 API:依赖注入注册 - 在 Startup / Program.cs 中注册所有新增 Service 的依赖注入 - IOdfCheckinService → OdfCheckinService - IOdfCablesService → OdfCablesService @@ -150,36 +150,36 @@ - IOdfUserModulesService → OdfUserModulesService - _需求: 2.6, 4.1, 5.1, 7.9, 8.1_ -- [ ] 7. 检查点 — 后台 API 完成 +- [x] 7. 检查点 — 后台 API 完成 - 确认所有 API 编译通过,依赖注入正确,如有问题请告知。 -- [ ] 8. 前端 APP:基础设施和服务层 - - [ ] 8.1 创建 services/permission.js — 权限 API +- [x] 8. 前端 APP:基础设施和服务层 + - [x] 8.1 创建 services/permission.js — 权限 API - getUserModules():GET /business/OdfUserModules/list,返回模块代码列表 - _需求: 8.2_ - - [ ] 8.2 创建 services/checkin.js — 签到 API + - [x] 8.2 创建 services/checkin.js — 签到 API - submitCheckin(data):POST /business/OdfCheckin/submit - _需求: 2.6_ - - [ ] 8.3 创建 services/trunk.js — 干线版块 API + - [x] 8.3 创建 services/trunk.js — 干线版块 API - getCableList(deptId):GET /business/OdfCables/list - getFaultList(cableId, pageNum, pageSize):GET /business/OdfCableFaults/list - getFaultDetail(id):GET /business/OdfCableFaults/{id} - addFault(formData):POST /business/OdfCableFaults/add(multipart/form-data) - searchCablesAndFaults(deptId, keyword):GET /business/OdfCables/search - _需求: 4.1, 5.1, 6.1, 7.9, 4.4_ - - [ ] 8.4 扩展 store/index.js — 新增 modules 字段 + - [x] 8.4 扩展 store/index.js — 新增 modules 字段 - 添加 modules: [] 字段 - 添加 setModules(modules) 方法 - 在 clearAuth() 中清除 modules - _需求: 8.2, 8.3_ - - [ ] 8.5 创建 utils/navigation.js — 导航工具函数 + - [x] 8.5 创建 utils/navigation.js — 导航工具函数 - openNavigation(lat, lng, name):安卓端弹出导航 APP 选择列表,H5 端打开地图网页 - _需求: 6.4, 6.5, 10.4_ - [ ]* 8.5.1 编写属性测试 Property 6:导航 URL 构建正确性 - **Property 6: 导航 URL 构建正确性** - 使用 fast-check 生成随机经纬度和地点名,验证 URL 包含正确参数 - **验证: 需求 6.5, 10.4** - - [ ] 8.6 创建 utils/watermark.js — 水印处理工具函数 + - [x] 8.6 创建 utils/watermark.js — 水印处理工具函数 - addWatermark(imagePath, text):Canvas 叠加水印文字到照片左下角 - _需求: 7.8_ - [ ]* 8.6.1 编写属性测试 Property 7:水印叠加参数正确性 @@ -187,12 +187,12 @@ - 使用 fast-check 生成随机时间和人员字符串,验证水印文本包含两者 - **验证: 需求 7.8** -- [ ] 9. 前端 APP:登录页改造和功能入口页 - - [ ] 9.1 修改 pages/login/index.vue — 登录成功后跳转至 pages/portal/index +- [x] 9. 前端 APP:登录页改造和功能入口页 + - [x] 9.1 修改 pages/login/index.vue — 登录成功后跳转至 pages/portal/index - 将 uni.reLaunch 目标从 home 改为 portal - 登录成功后调用 getUserModules() 获取权限并存入 store.modules - _需求: 1.1, 8.2_ - - [ ] 9.2 新建 pages/portal/index.vue — 功能入口列表页 + - [x] 9.2 新建 pages/portal/index.vue — 功能入口列表页 - 自定义导航栏(刷新 + 标题"功能列表" + 设置图标) - CSS Grid 2 列布局展示功能版块卡片(机房、干线) - 根据 store.modules 过滤显示的入口卡片 @@ -203,17 +203,17 @@ - **Property 1: 权限过滤正确性** - 使用 fast-check 生成随机权限子集,验证过滤函数只返回有权限的版块 - **验证: 需求 1.1, 1.5, 8.3** - - [ ] 9.3 更新 pages.json — 注册所有新增页面 + - [x] 9.3 更新 pages.json — 注册所有新增页面 - 添加 portal、checkin、trunk、cable、fault-list、fault-detail、fault-add、trunk-search、route-plan 页面配置 - 所有页面 navigationStyle 设为 custom - _需求: 1.1_ -- [ ] 10. 前端 APP:签到功能 - - [ ] 10.1 改造 pages/rack/index.vue — 导航栏右侧添加签到按钮 +- [x] 10. 前端 APP:签到功能 + - [x] 10.1 改造 pages/rack/index.vue — 导航栏右侧添加签到按钮 - 将 nav-icon-placeholder 替换为蓝色【签到】按钮 - 点击签到按钮 → navigateTo checkin 页面,传递 roomId 参数 - _需求: 2.1, 2.2_ - - [ ] 10.2 新建 pages/checkin/index.vue — 签到页 + - [x] 10.2 新建 pages/checkin/index.vue — 签到页 - 自定义导航栏 + 表单区域(人员输入、时间 picker、工作内容 textarea) - 底部固定提交按钮 - 点击时间字段弹出 picker mode="date" 年月日选择器 @@ -225,14 +225,14 @@ - 使用 fast-check 生成随机签到数据,验证请求体包含所有必要字段 - **验证: 需求 2.6** -- [ ] 11. 前端 APP:干线版块 — 公司列表和光缆列表 - - [ ] 11.1 新建 pages/trunk/index.vue — 干线页(公司列表) +- [x] 11. 前端 APP:干线版块 — 公司列表和光缆列表 + - [x] 11.1 新建 pages/trunk/index.vue — 干线页(公司列表) - 自定义导航栏 + section-title "公司列表" - 复用 getCompanyList() 接口获取公司数据 - 公司卡片列表(白色背景 + 图片占位 + 公司名称居中) - 点击公司卡片 → navigateTo cable 页面,传递 deptId - _需求: 3.1, 3.2, 3.3_ - - [ ] 11.2 新建 pages/cable/index.vue — 光缆列表页 + - [x] 11.2 新建 pages/cable/index.vue — 光缆列表页 - 自定义导航栏 + section-title "光缆列表" + 搜索栏 - 调用 getCableList(deptId) 获取光缆数据 - 光缆卡片列表(同公司卡片样式) @@ -248,8 +248,8 @@ - 使用 fast-check 生成随机列表项数据,验证导航 URL 包含正确参数 - **验证: 需求 3.3, 4.2, 5.2, 9.4, 9.5** -- [ ] 12. 前端 APP:干线版块 — 故障管理 - - [ ] 12.1 新建 pages/fault-list/index.vue — 故障列表页 +- [x] 12. 前端 APP:干线版块 — 故障管理 + - [x] 12.1 新建 pages/fault-list/index.vue — 故障列表页 - 自定义导航栏 + section-title "故障列表" - 调用 getFaultList(cableId) 获取故障数据,支持分页加载(onReachBottom) - 故障卡片列表(显示故障时间、故障原因、表显故障里程、所属光缆) @@ -261,7 +261,7 @@ - **Property 3: 故障记录渲染完整性** - 使用 fast-check 生成随机故障数据,验证渲染输出包含所有必要字段 - **验证: 需求 5.1, 6.1** - - [ ] 12.2 新建 pages/fault-detail/index.vue — 故障详情页 + - [x] 12.2 新建 pages/fault-detail/index.vue — 故障详情页 - 自定义导航栏 + 图片区域(横向滚动,点击预览)+ 信息展示区域 - 调用 getFaultDetail(faultId) 获取完整数据 - 展示所有字段:图片列表、故障时间、人员、故障原因、表显故障里程、所属光缆、地点、备注 @@ -269,7 +269,7 @@ - 点击图片 → uni.previewImage 全屏预览 - 点击导航 → 调用 openNavigation(lat, lng, name) - _需求: 6.1, 6.2, 6.3, 6.4, 6.5, 6.6_ - - [ ] 12.3 新建 pages/fault-add/index.vue — 新增故障页 + - [x] 12.3 新建 pages/fault-add/index.vue — 新增故障页 - 自定义导航栏 + 拍照区域(横向滚动,仅相机拍摄)+ 表单区域 - 拍摄第 1 张照片时自动获取时间填充故障时间字段 - 自动填充所属光缆名称(从参数传入,不可编辑) @@ -283,8 +283,8 @@ - 使用 fast-check 生成随机故障表单数据,验证请求体包含所有必要字段 - **验证: 需求 7.9** -- [ ] 13. 前端 APP:搜索结果页 - - [ ] 13.1 新建 pages/trunk-search/index.vue — 搜索结果页 +- [x] 13. 前端 APP:搜索结果页 + - [x] 13.1 新建 pages/trunk-search/index.vue — 搜索结果页 - 自定义导航栏 + 搜索结果区域 - 页面 onLoad 从参数获取 deptId 和 keyword,调用 searchCablesAndFaults 接口 - 按「光缆」和「故障列表」两个分类展示结果 @@ -297,8 +297,8 @@ - 使用 fast-check 生成随机搜索结果数据,验证分类展示逻辑正确 - **验证: 需求 9.2, 9.3** -- [ ] 14. 前端 APP:路线规划(尝试性) - - [ ] 14.1 新建 pages/route-plan/index.vue — 路线规划页 +- [x] 14. 前端 APP:路线规划(尝试性) + - [x] 14.1 新建 pages/route-plan/index.vue — 路线规划页 - 集成地图 SDK(如高德地图 UniApp 插件) - 输入起终点坐标,调用路线规划 API,展示路线总长度 - 输入距离值,计算路线上对应坐标并标注 @@ -309,32 +309,32 @@ - 使用 fast-check 生成随机路线点序列和距离值,验证定位计算正确 - **验证: 需求 11.3** -- [ ] 15. 检查点 — 前端 APP 完成 +- [x] 15. 检查点 — 前端 APP 完成 - 确认所有新增页面正常渲染,页面跳转和参数传递正确,API 调用正常,如有问题请告知。 -- [ ] 16. 后台管理前端:API 层 - - [ ] 16.1 创建 api/business/odfcables.js — 光缆管理 API +- [x] 16. 后台管理前端:API 层 + - [x] 16.1 创建 api/business/odfcables.js — 光缆管理 API - listOdfCables / addOdfCables / updateOdfCables / getOdfCables / delOdfCables / exportOdfCables - _需求: 4.1_ - - [ ] 16.2 创建 api/business/odfcablefaults.js — 干线故障管理 API + - [x] 16.2 创建 api/business/odfcablefaults.js — 干线故障管理 API - listOdfCableFaults / getOdfCableFaults / delOdfCableFaults / exportOdfCableFaults - _需求: 5.1_ - - [ ] 16.3 创建 api/business/odfcheckin.js — 签到记录管理 API + - [x] 16.3 创建 api/business/odfcheckin.js — 签到记录管理 API - listOdfCheckin / exportOdfCheckin - _需求: 2.6_ - - [ ] 16.4 创建 api/business/odfusermodules.js — 用户模块权限管理 API + - [x] 16.4 创建 api/business/odfusermodules.js — 用户模块权限管理 API - listUsers / getUserModules / saveUserModules - _需求: 8.1_ -- [ ] 17. 后台管理前端:光缆管理页面 - - [ ] 17.1 创建 views/business/OdfCables.vue — 光缆管理页面 +- [x] 17. 后台管理前端:光缆管理页面 + - [x] 17.1 创建 views/business/OdfCables.vue — 光缆管理页面 - 查询表单(光缆名称 el-input + 所属部门 el-tree-select) - 工具栏按钮(新增/编辑/删除/导出,v-hasPermi 权限控制) - el-table 展示光缆列表(Id、光缆名称、所属部门、创建时间) - 操作列:详情、编辑、删除 - 分页组件 - _需求: 4.1_ - - [ ] 17.2 创建 components/business/OdfCableForm.vue — 光缆表单组件 + - [x] 17.2 创建 components/business/OdfCableForm.vue — 光缆表单组件 - 支持 add / edit / view 三种模式 - 表单字段:光缆名称(必填)、所属部门(el-tree-select) - v-model:visible 控制弹窗显隐,@success 回调刷新列表 @@ -344,8 +344,8 @@ - 使用 fast-check 生成随机光缆名称和部门 ID,验证请求体字段完整 - **验证: 后台管理前端 — 光缆管理** -- [ ] 18. 后台管理前端:干线故障管理页面 - - [ ] 18.1 创建 views/business/OdfCableFaults.vue — 干线故障管理页面 +- [x] 18. 后台管理前端:干线故障管理页面 + - [x] 18.1 创建 views/business/OdfCableFaults.vue — 干线故障管理页面 - 查询表单(所属光缆 el-select 远程搜索 + 故障时间范围 el-date-picker + 故障原因 el-input) - 工具栏按钮(删除/导出,无新增/编辑) - el-table 展示故障列表(Id、故障时间、人员、故障原因、表显故障里程、所属光缆、地点、创建时间) @@ -358,8 +358,8 @@ - 使用 fast-check 生成随机查询条件组合,验证 API 请求参数完整 - **验证: 后台管理前端 — 光缆管理、故障管理、签到记录管理** -- [ ] 19. 后台管理前端:签到记录管理页面 - - [ ] 19.1 创建 views/business/OdfCheckin.vue — 签到记录管理页面 +- [x] 19. 后台管理前端:签到记录管理页面 + - [x] 19.1 创建 views/business/OdfCheckin.vue — 签到记录管理页面 - 查询表单(机房 el-select 远程搜索 + 人员 el-input + 签到时间范围 el-date-picker) - 工具栏按钮(仅导出,无增删改) - el-table 展示签到记录(Id、机房名称、人员、签到时间、工作内容、提交人、创建时间) @@ -367,8 +367,8 @@ - 分页组件 - _需求: 2.6_ -- [ ] 20. 后台管理前端:用户模块权限管理页面 - - [ ] 20.1 创建 views/business/OdfUserModules.vue — 用户模块权限管理页面 +- [x] 20. 后台管理前端:用户模块权限管理页面 + - [x] 20.1 创建 views/business/OdfUserModules.vue — 用户模块权限管理页面 - 左右分栏布局(左侧 360px 用户列表 + 右侧模块权限配置) - 左侧:搜索框 + el-table 用户列表,点击行高亮选中 - 右侧:标题"用户名 - 模块权限配置" + el-checkbox-group(odf/trunk/route)+ 保存按钮 @@ -386,7 +386,7 @@ - 使用 fast-check 生成随机 userId 和模块子集,验证请求体正确 - **验证: 后台管理前端 — 用户模块权限管理** -- [ ] 21. 后台管理前端:路由配置 +- [x] 21. 后台管理前端:路由配置 - ZRAdmin 使用动态路由(从 sys_menu 读取 Component 字段自动生成路由),因此无需手动配置 Vue Router - 任务 1.6 的菜单 SQL 脚本已配置 Component 指向对应 Vue 文件,执行后即可通过菜单访问 - 仅需确认 4 个 Vue 文件路径与菜单 Component 一致: @@ -396,7 +396,7 @@ - business/OdfUserModules → views/business/OdfUserModules.vue - _需求: 8.1_ -- [ ] 22. 最终检查点 — 全部完成 +- [x] 22. 最终检查点 — 全部完成 - 确认所有功能模块正常工作:数据库表、后台 API、前端 APP 页面、后台管理前端页面 - 确认菜单权限 SQL 脚本已执行,后台管理页面可通过菜单访问 - 确认所有测试通过,如有问题请告知。 diff --git a/odf-uniapp/pages.json b/odf-uniapp/pages.json index 477bff5..e7df498 100644 --- a/odf-uniapp/pages.json +++ b/odf-uniapp/pages.json @@ -39,6 +39,42 @@ { "path": "pages/change-password/index", "style": { "navigationStyle": "custom", "navigationBarTitleText": "" } + }, + { + "path": "pages/portal/index", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "" } + }, + { + "path": "pages/checkin/index", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "" } + }, + { + "path": "pages/trunk/index", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "" } + }, + { + "path": "pages/cable/index", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "" } + }, + { + "path": "pages/fault-list/index", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "" } + }, + { + "path": "pages/fault-detail/index", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "" } + }, + { + "path": "pages/fault-add/index", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "" } + }, + { + "path": "pages/trunk-search/index", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "" } + }, + { + "path": "pages/route-plan/index", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "" } } ], "globalStyle": { diff --git a/odf-uniapp/pages/cable/index.vue b/odf-uniapp/pages/cable/index.vue new file mode 100644 index 0000000..3dd6d58 --- /dev/null +++ b/odf-uniapp/pages/cable/index.vue @@ -0,0 +1,216 @@ + + + + + diff --git a/odf-uniapp/pages/checkin/index.vue b/odf-uniapp/pages/checkin/index.vue new file mode 100644 index 0000000..0b3eff4 --- /dev/null +++ b/odf-uniapp/pages/checkin/index.vue @@ -0,0 +1,274 @@ +